[tuxguitar] 01/01: Imported Upstream version 1.2+r1105

Tony Mancill tmancill at moszumanska.debian.org
Thu Jun 19 04:33:09 UTC 2014


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

tmancill pushed a commit to annotated tag upstream/1.2+r1105
in repository tuxguitar.

commit ee2934ba9b68ae890469f4361c1d11533e316302
Author: tony mancill <tmancill at debian.org>
Date:   Sun Jun 15 20:43:56 2014 -0700

    Imported Upstream version 1.2+r1105
---
 AUTHORS                                            |   29 +-
 CHANGES                                            |   22 +
 ChangeLog                                          |   17 -
 Makefile                                           |  263 +
 TuxGuitar-AudioUnit/build.properties               |    4 +-
 TuxGuitar-AudioUnit/build.xml                      |    4 +-
 .../libtuxguitar-audiounit-jni.jnilib              |  Bin 0 -> 55960 bytes
 TuxGuitar-AudioUnit/pom.xml                        |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-audiounit.info        |    5 +
 .../impl/midiport/audiounit/MidiPortImpl.java      |    8 +-
 .../midiport/audiounit/MidiPortReaderPlugin.java   |   23 +-
 .../impl/midiport/audiounit/MidiReceiverImpl.java  |    4 +-
 TuxGuitar-AudioUnit/tuxguitar-audiounit.jar        |  Bin 0 -> 6134 bytes
 TuxGuitar-CoreAudio/build.properties               |    1 +
 TuxGuitar-CoreAudio/build.xml                      |    3 +-
 .../libtuxguitar-coreaudio-jni.jnilib              |  Bin 0 -> 50128 bytes
 TuxGuitar-CoreAudio/pom.xml                        |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-coreaudio.info        |    5 +
 .../impl/midiport/coreaudio/MidiPortImpl.java      |    8 +-
 .../midiport/coreaudio/MidiPortReaderPlugin.java   |   23 +-
 .../impl/midiport/coreaudio/MidiReceiverImpl.java  |    4 +-
 TuxGuitar-CoreAudio/tuxguitar-coreaudio.jar        |  Bin 0 -> 6136 bytes
 TuxGuitar-abc/GNUmakefile                          |   68 +
 TuxGuitar-abc/TuxGuitar-abc.MF                     |    2 +
 TuxGuitar-abc/build.properties                     |    9 +
 TuxGuitar-abc/build.xml                            |   57 +
 TuxGuitar-abc/buildjar.jardesc                     |   23 +
 TuxGuitar-abc/buildplugin.jardesc                  |   24 +
 TuxGuitar-abc/doc/allclasses-frame.html            |   84 +
 TuxGuitar-abc/doc/allclasses-noframe.html          |   84 +
 TuxGuitar-abc/doc/constant-values.html             |  814 ++
 TuxGuitar-abc/doc/deprecated-list.html             |  134 +
 TuxGuitar-abc/doc/help-doc.html                    |  193 +
 TuxGuitar-abc/doc/index-files/index-1.html         |  296 +
 TuxGuitar-abc/doc/index-files/index-10.html        |  146 +
 TuxGuitar-abc/doc/index-files/index-11.html        |  143 +
 TuxGuitar-abc/doc/index-files/index-12.html        |  143 +
 TuxGuitar-abc/doc/index-files/index-13.html        |  155 +
 TuxGuitar-abc/doc/index-files/index-14.html        |  161 +
 TuxGuitar-abc/doc/index-files/index-15.html        |  502 ++
 TuxGuitar-abc/doc/index-files/index-16.html        |  203 +
 TuxGuitar-abc/doc/index-files/index-17.html        |  140 +
 TuxGuitar-abc/doc/index-files/index-18.html        |  137 +
 TuxGuitar-abc/doc/index-files/index-19.html        |  140 +
 TuxGuitar-abc/doc/index-files/index-2.html         |  152 +
 TuxGuitar-abc/doc/index-files/index-3.html         |  179 +
 TuxGuitar-abc/doc/index-files/index-4.html         |  176 +
 TuxGuitar-abc/doc/index-files/index-5.html         |  152 +
 TuxGuitar-abc/doc/index-files/index-6.html         |  191 +
 TuxGuitar-abc/doc/index-files/index-7.html         |  524 ++
 TuxGuitar-abc/doc/index-files/index-8.html         |  239 +
 TuxGuitar-abc/doc/index-files/index-9.html         |  146 +
 TuxGuitar-abc/doc/index.html                       |   26 +
 .../tuxguitar/io/abc/ABCExportSettingsDialog.html  |  252 +
 .../tuxguitar/io/abc/ABCImportSettingsDialog.html  |  252 +
 .../org/herac/tuxguitar/io/abc/ABCInputStream.html |  257 +
 .../herac/tuxguitar/io/abc/ABCOutputStream.html    |  254 +
 .../herac/tuxguitar/io/abc/ABCPluginExporter.html  |  323 +
 .../herac/tuxguitar/io/abc/ABCPluginImporter.html  |  323 +
 .../org/herac/tuxguitar/io/abc/ABCPluginList.html  |  323 +
 .../org/herac/tuxguitar/io/abc/ABCSettings.html    | 1121 +++
 .../herac/tuxguitar/io/abc/ABCSettingsDialog.html  |  252 +
 .../herac/tuxguitar/io/abc/ABCSongExporter.html    |  348 +
 .../herac/tuxguitar/io/abc/ABCSongImporter.html    |  382 +
 .../org/herac/tuxguitar/io/abc/base/ABCChord.html  |  347 +
 .../herac/tuxguitar/io/abc/base/ABCComponent.html  |  297 +
 .../tuxguitar/io/abc/base/ABCComponentChord.html   |  287 +
 .../tuxguitar/io/abc/base/ABCComponentNote.html    |  350 +
 .../org/herac/tuxguitar/io/abc/base/ABCEvent.html  | 2988 +++++++
 .../org/herac/tuxguitar/io/abc/base/ABCInfo.html   |  876 ++
 .../herac/tuxguitar/io/abc/base/ABCLocation.html   |  654 ++
 .../org/herac/tuxguitar/io/abc/base/ABCMacro.html  |  416 +
 .../tuxguitar/io/abc/base/ABCOctaveDatabase.html   |  296 +
 .../herac/tuxguitar/io/abc/base/ABCPercussion.html |  292 +
 .../org/herac/tuxguitar/io/abc/base/ABCRepeat.html |  292 +
 .../org/herac/tuxguitar/io/abc/base/ABCRhythm.html |  313 +
 .../org/herac/tuxguitar/io/abc/base/ABCSong.html   | 2139 +++++
 .../org/herac/tuxguitar/io/abc/base/ABCSymbol.html |  364 +
 .../org/herac/tuxguitar/io/abc/base/ABCTempo.html  |  332 +
 .../tuxguitar/io/abc/base/ABCTempoChange.html      |  292 +
 .../org/herac/tuxguitar/io/abc/base/ABCText.html   |  271 +
 .../tuxguitar/io/abc/base/ABCTimeSignature.html    |  314 +
 .../io/abc/base/ABCTimeSignatureChange.html        |  292 +
 .../org/herac/tuxguitar/io/abc/base/ABCTrack.html  |  756 ++
 .../tuxguitar/io/abc/base/class-use/ABCChord.html  |  224 +
 .../io/abc/base/class-use/ABCComponent.html        |  180 +
 .../io/abc/base/class-use/ABCComponentChord.html   |  136 +
 .../io/abc/base/class-use/ABCComponentNote.html    |  136 +
 .../tuxguitar/io/abc/base/class-use/ABCEvent.html  |  208 +
 .../tuxguitar/io/abc/base/class-use/ABCInfo.html   |  196 +
 .../io/abc/base/class-use/ABCLocation.html         |  136 +
 .../tuxguitar/io/abc/base/class-use/ABCMacro.html  |  136 +
 .../io/abc/base/class-use/ABCOctaveDatabase.html   |  136 +
 .../io/abc/base/class-use/ABCPercussion.html       |  189 +
 .../tuxguitar/io/abc/base/class-use/ABCRepeat.html |  189 +
 .../tuxguitar/io/abc/base/class-use/ABCRhythm.html |  189 +
 .../tuxguitar/io/abc/base/class-use/ABCSong.html   |  200 +
 .../tuxguitar/io/abc/base/class-use/ABCSymbol.html |  136 +
 .../tuxguitar/io/abc/base/class-use/ABCTempo.html  |  172 +
 .../io/abc/base/class-use/ABCTempoChange.html      |  172 +
 .../tuxguitar/io/abc/base/class-use/ABCText.html   |  189 +
 .../io/abc/base/class-use/ABCTimeSignature.html    |  235 +
 .../abc/base/class-use/ABCTimeSignatureChange.html |  172 +
 .../tuxguitar/io/abc/base/class-use/ABCTrack.html  |  198 +
 .../herac/tuxguitar/io/abc/base/package-frame.html |   66 +
 .../tuxguitar/io/abc/base/package-summary.html     |  216 +
 .../herac/tuxguitar/io/abc/base/package-tree.html  |  149 +
 .../herac/tuxguitar/io/abc/base/package-use.html   |  247 +
 .../io/abc/class-use/ABCExportSettingsDialog.html  |  136 +
 .../io/abc/class-use/ABCImportSettingsDialog.html  |  136 +
 .../tuxguitar/io/abc/class-use/ABCInputStream.html |  136 +
 .../io/abc/class-use/ABCOutputStream.html          |  136 +
 .../io/abc/class-use/ABCPluginExporter.html        |  136 +
 .../io/abc/class-use/ABCPluginImporter.html        |  136 +
 .../tuxguitar/io/abc/class-use/ABCPluginList.html  |  136 +
 .../tuxguitar/io/abc/class-use/ABCSettings.html    |  210 +
 .../io/abc/class-use/ABCSettingsDialog.html        |  136 +
 .../io/abc/class-use/ABCSongExporter.html          |  136 +
 .../io/abc/class-use/ABCSongImporter.html          |  136 +
 .../org/herac/tuxguitar/io/abc/package-frame.html  |   50 +
 .../herac/tuxguitar/io/abc/package-summary.html    |  184 +
 .../org/herac/tuxguitar/io/abc/package-tree.html   |  156 +
 .../org/herac/tuxguitar/io/abc/package-use.html    |  162 +
 TuxGuitar-abc/doc/overview-frame.html              |   44 +
 TuxGuitar-abc/doc/overview-summary.html            |  148 +
 TuxGuitar-abc/doc/overview-tree.html               |  159 +
 TuxGuitar-abc/doc/package-list                     |    2 +
 TuxGuitar-abc/doc/packages.html                    |   31 +
 TuxGuitar-abc/doc/resources/inherit.gif            |  Bin 0 -> 57 bytes
 TuxGuitar-abc/doc/stylesheet.css                   |   29 +
 TuxGuitar-abc/javadoc.xml                          |    6 +
 TuxGuitar-abc/pom.xml                              |   42 +
 TuxGuitar-abc/share/META-INF/MANIFEST.MF           |    4 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    2 +
 TuxGuitar-abc/share/META-INF/tuxguitar-abc.info    |    5 +
 TuxGuitar-abc/share/lang/messages.properties       |   25 +
 .../tuxguitar/io/abc/ABCExportSettingsDialog.java  |  407 +
 .../tuxguitar/io/abc/ABCImportSettingsDialog.java  |  181 +
 .../org/herac/tuxguitar/io/abc/ABCInputStream.java |  278 +
 .../herac/tuxguitar/io/abc/ABCOutputStream.java    | 1189 +++
 .../src/org/herac/tuxguitar/io/abc/ABCPlugin.java  |    6 +
 .../herac/tuxguitar/io/abc/ABCPluginExporter.java  |   15 +
 .../herac/tuxguitar/io/abc/ABCPluginImporter.java  |   15 +
 .../org/herac/tuxguitar/io/abc/ABCSettings.java    |  267 +
 .../herac/tuxguitar/io/abc/ABCSongExporter.java    |   37 +
 .../herac/tuxguitar/io/abc/ABCSongImporter.java    |  591 ++
 .../org/herac/tuxguitar/io/abc/base/ABCChord.java  |  214 +
 .../herac/tuxguitar/io/abc/base/ABCComponent.java  |   28 +
 .../tuxguitar/io/abc/base/ABCComponentChord.java   |   24 +
 .../tuxguitar/io/abc/base/ABCComponentNote.java    |   46 +
 .../org/herac/tuxguitar/io/abc/base/ABCEvent.java  |  690 ++
 .../org/herac/tuxguitar/io/abc/base/ABCInfo.java   |  216 +
 .../herac/tuxguitar/io/abc/base/ABCLocation.java   |  167 +
 .../org/herac/tuxguitar/io/abc/base/ABCMacro.java  |  222 +
 .../tuxguitar/io/abc/base/ABCOctaveDatabase.java   |   33 +
 .../org/herac/tuxguitar/io/abc/base/ABCRepeat.java |   27 +
 .../org/herac/tuxguitar/io/abc/base/ABCSong.java   | 2480 ++++++
 .../org/herac/tuxguitar/io/abc/base/ABCSymbol.java |  133 +
 .../org/herac/tuxguitar/io/abc/base/ABCTempo.java  |   82 +
 .../tuxguitar/io/abc/base/ABCTempoChange.java      |   27 +
 .../org/herac/tuxguitar/io/abc/base/ABCText.java   |   20 +
 .../tuxguitar/io/abc/base/ABCTimeSignature.java    |   33 +
 .../io/abc/base/ABCTimeSignatureChange.java        |   28 +
 .../org/herac/tuxguitar/io/abc/base/ABCTrack.java  |  240 +
 TuxGuitar-alsa/GNUmakefile                         |   92 -
 TuxGuitar-alsa/build.properties                    |    4 +-
 TuxGuitar-alsa/build.xml                           |   11 +-
 TuxGuitar-alsa/jni/GNUmakefile                     |    9 +-
 TuxGuitar-alsa/pom.xml                             |   36 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 TuxGuitar-alsa/share/META-INF/tuxguitar-alsa.info  |    5 +
 .../impl/midiport/alsa/MidiOutputPortImpl.java     |    8 +-
 .../alsa/MidiOutputPortProviderPlugin.java         |   21 +-
 .../impl/midiport/alsa/MidiReceiverImpl.java       |    4 +-
 TuxGuitar-ascii/GNUmakefile                        |   72 -
 TuxGuitar-ascii/build.properties                   |    3 +-
 TuxGuitar-ascii/build.xml                          |   10 +-
 TuxGuitar-ascii/pom.xml                            |   36 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-ascii.info            |    5 +
 .../tuxguitar/io/ascii/ASCIIPluginExporter.java    |   20 +-
 TuxGuitar-browser-ftp/GNUmakefile                  |   72 -
 TuxGuitar-browser-ftp/build.properties             |    3 +-
 TuxGuitar-browser-ftp/build.xml                    |   10 +-
 TuxGuitar-browser-ftp/pom.xml                      |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-browser-ftp.info      |    5 +
 .../app/tools/browser/ftp/TGBrowserDataImpl.java   |   97 +
 .../browser/ftp/TGBrowserElementComparator.java    |   36 +
 .../tools/browser/ftp/TGBrowserElementImpl.java    |   33 +
 .../app/tools/browser/ftp/TGBrowserFTPClient.java  |  214 +
 .../tools/browser/ftp/TGBrowserFactoryImpl.java    |  251 +
 .../app/tools/browser/ftp/TGBrowserImpl.java       |  174 +
 .../app/tools/browser/ftp/TGBrowserPluginImpl.java |   17 +
 .../app/tools/browser/ftp/utils/Base64Decoder.java |   96 +
 .../app/tools/browser/ftp/utils/Base64Encoder.java |  132 +
 .../gui/tools/browser/ftp/TGBrowserDataImpl.java   |   97 -
 .../browser/ftp/TGBrowserElementComparator.java    |   36 -
 .../tools/browser/ftp/TGBrowserElementImpl.java    |   33 -
 .../gui/tools/browser/ftp/TGBrowserFTPClient.java  |  214 -
 .../tools/browser/ftp/TGBrowserFactoryImpl.java    |  251 -
 .../gui/tools/browser/ftp/TGBrowserImpl.java       |  174 -
 .../gui/tools/browser/ftp/TGBrowserPluginImpl.java |   27 -
 .../gui/tools/browser/ftp/utils/Base64Decoder.java |   96 -
 .../gui/tools/browser/ftp/utils/Base64Encoder.java |  132 -
 TuxGuitar-carbon-integration/build.properties      |    3 +-
 TuxGuitar-carbon-integration/build.xml             |    3 +-
 .../jni/libtuxguitar-carbon-integration.jnilib     |  Bin 0 -> 43408 bytes
 TuxGuitar-carbon-integration/pom.xml               |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    2 +
 .../META-INF/tuxguitar-carbon-integration.info     |    5 +
 .../carbon/TGCarbonIntegrationPlugin.java          |   24 +-
 .../org/herac/tuxguitar/carbon/menu/MacMenu.java   |   24 +-
 .../herac/tuxguitar/carbon/menu/MacMenuPlugin.java |   12 +-
 .../tuxguitar/carbon/opendoc/OpenDocAction.java    |   20 +-
 .../tuxguitar/carbon/opendoc/OpenDocPlugin.java    |   13 +-
 TuxGuitar-cocoa-integration/build.properties       |    3 +-
 TuxGuitar-cocoa-integration/build.xml              |    3 +-
 TuxGuitar-cocoa-integration/pom.xml                |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    4 +
 .../META-INF/tuxguitar-cocoa-integration.info      |    5 +
 .../tuxguitar/cocoa/TGCocoaIntegrationPlugin.java  |   42 +-
 .../org/herac/tuxguitar/cocoa/menu/MacMenu.java    |   24 +-
 .../herac/tuxguitar/cocoa/menu/MacMenuPlugin.java  |   11 +-
 .../cocoa/modifiedmarker/ModifiedMarker.java       |    4 +-
 .../cocoa/modifiedmarker/ModifiedMarkerPlugin.java |   11 +-
 .../tuxguitar/cocoa/opendoc/OpenDocAction.java     |   20 +-
 .../tuxguitar/cocoa/opendoc/OpenDocPlugin.java     |   11 +-
 .../tuxguitar/cocoa/toolbar/MacToolbarAction.java  |    7 +-
 .../tuxguitar/cocoa/toolbar/MacToolbarPlugin.java  |   13 +-
 TuxGuitar-community/GNUmakefile                    |   84 -
 TuxGuitar-community/build.properties               |   20 +-
 TuxGuitar-community/build.xml                      |   17 +-
 TuxGuitar-community/pom.xml                        |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    4 +
 .../share/META-INF/tuxguitar-community.info        |    5 +
 .../share/lang/messages_fi.properties              |   25 +
 .../share/lang/messages_zh_TW.properties           |   25 +
 TuxGuitar-community/share/tuxguitar-community.cfg  |   14 +
 .../tuxguitar/community/TGCommunityPlugin.java     |   25 +
 .../tuxguitar/community/TGCommunityPluginImpl.java |   49 -
 .../tuxguitar/community/TGCommunitySingleton.java  |    8 +-
 .../tuxguitar/community/auth/TGCommunityAuth.java  |    6 +-
 .../community/auth/TGCommunityAuthDialog.java      |   11 +-
 .../community/auth/utils/Base64Decoder.java        |    8 +-
 .../community/browser/TGBrowserAuthDialog.java     |    4 +-
 .../community/browser/TGBrowserConnection.java     |    4 +-
 .../community/browser/TGBrowserDataImpl.java       |    2 +-
 .../community/browser/TGBrowserElementImpl.java    |    4 +-
 .../community/browser/TGBrowserFactoryImpl.java    |    6 +-
 .../tuxguitar/community/browser/TGBrowserImpl.java |    6 +-
 .../community/browser/TGBrowserPluginImpl.java     |   10 +-
 .../tuxguitar/community/io/TGShareFileDialog.java  |   11 +-
 .../herac/tuxguitar/community/io/TGShareSong.java  |   25 +-
 .../tuxguitar/community/io/TGShareSongPlugin.java  |    9 +-
 .../startup/TGCommunityStartupPlugin.java          |    9 +-
 .../startup/TGCommunityStartupScreen.java          |   15 +-
 .../tuxguitar/community/utils/TGCommunityWeb.java  |    6 +-
 TuxGuitar-compat/GNUmakefile                       |   72 -
 TuxGuitar-compat/build.properties                  |    4 +-
 TuxGuitar-compat/build.xml                         |   11 +-
 TuxGuitar-compat/pom.xml                           |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |   11 +
 .../share/META-INF/tuxguitar-compat.info           |    5 +
 .../org/herac/tuxguitar/io/tg/TGCompatPlugin.java  |    6 +
 .../tuxguitar/io/tg/TGExporterPluginImpl.java      |   22 +
 .../tuxguitar/io/tg/TGInputStreamPluginImpl.java   |   22 +
 .../herac/tuxguitar/io/tg/TGPluginListImpl.java    |   69 -
 .../herac/tuxguitar/io/tg/dev/TGInputStream.java   |   36 +
 .../tuxguitar/io/tg/dev/TGInputStreamPlugin.java   |   10 +
 .../herac/tuxguitar/io/tg/v07/TGInputStream.java   |   71 +-
 .../tuxguitar/io/tg/v07/TGInputStreamPlugin.java   |   10 +
 .../herac/tuxguitar/io/tg/v08/TGInputStream.java   |   59 +-
 .../tuxguitar/io/tg/v08/TGInputStreamPlugin.java   |   10 +
 .../herac/tuxguitar/io/tg/v09/TGInputStream.java   |   59 +-
 .../tuxguitar/io/tg/v09/TGInputStreamPlugin.java   |   10 +
 .../tuxguitar/io/tg/v10/TGExporterPlugin.java      |   10 +
 .../herac/tuxguitar/io/tg/v10/TGInputStream.java   |   61 +-
 .../tuxguitar/io/tg/v10/TGInputStreamPlugin.java   |   10 +
 .../herac/tuxguitar/io/tg/v10/TGOutputStream.java  |   65 +-
 .../org/herac/tuxguitar/io/tg/v10/TGStream.java    |    2 +-
 .../tuxguitar/io/tg/v11/TGExporterPlugin.java      |   10 +
 .../herac/tuxguitar/io/tg/v11/TGInputStream.java   |   46 +-
 .../tuxguitar/io/tg/v11/TGInputStreamPlugin.java   |   10 +
 .../herac/tuxguitar/io/tg/v11/TGOutputStream.java  |   48 +-
 .../tuxguitar/io/tg/v12/TGExporterPlugin.java      |   10 +
 .../herac/tuxguitar/io/tg/v12/TGInputStream.java   |  800 ++
 .../tuxguitar/io/tg/v12/TGInputStreamPlugin.java   |   10 +
 .../herac/tuxguitar/io/tg/v12/TGOutputStream.java  |  761 ++
 .../org/herac/tuxguitar/io/tg/v12/TGStream.java    |  205 +
 TuxGuitar-converter/GNUmakefile                    |   79 -
 TuxGuitar-converter/build.properties               |    5 +-
 TuxGuitar-converter/build.xml                      |   13 +-
 TuxGuitar-converter/pom.xml                        |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-converter.info        |    5 +
 .../share/lang/messages_zh_TW.properties           |   17 +
 .../app/tools/custom/converter/TGConverter.java    |  208 +
 .../tools/custom/converter/TGConverterDialog.java  |  254 +
 .../tools/custom/converter/TGConverterFormat.java  |   20 +
 .../custom/converter/TGConverterListener.java      |   13 +
 .../tools/custom/converter/TGConverterPlugin.java  |   19 +
 .../tools/custom/converter/TGConverterProcess.java |  261 +
 .../gui/tools/custom/converter/TGConverter.java    |  208 -
 .../tools/custom/converter/TGConverterDialog.java  |  254 -
 .../tools/custom/converter/TGConverterFormat.java  |   20 -
 .../custom/converter/TGConverterListener.java      |   13 -
 .../tools/custom/converter/TGConverterPlugin.java  |   29 -
 .../tools/custom/converter/TGConverterProcess.java |  260 -
 TuxGuitar-fluidsynth/GNUmakefile                   |   94 -
 TuxGuitar-fluidsynth/build.properties              |    4 +-
 TuxGuitar-fluidsynth/build.xml                     |   13 +-
 TuxGuitar-fluidsynth/jni/GNUmakefile               |    9 +-
 ...tar_player_impl_midiport_fluidsynth_MidiSynth.c |    2 +-
 TuxGuitar-fluidsynth/pom.xml                       |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    2 +
 .../share/META-INF/tuxguitar-fluidsynth.info       |    5 +
 .../share/lang/messages.properties                 |    4 +-
 .../share/lang/messages_zh_TW.properties           |   17 +
 .../midiport/fluidsynth/MidiOutputPortImpl.java    |    8 +-
 .../fluidsynth/MidiOutputPortProviderPlugin.java   |   28 +-
 .../fluidsynth/MidiOutputPortSettings.java         |    4 +-
 .../impl/midiport/fluidsynth/MidiReceiverImpl.java |    4 +-
 .../impl/midiport/fluidsynth/MidiSettings.java     |   30 +-
 .../midiport/fluidsynth/MidiSettingsHandler.java   |   20 +
 .../midiport/fluidsynth/MidiSettingsPlugin.java    |   35 +
 .../player/impl/midiport/fluidsynth/MidiSynth.java |    2 +-
 .../impl/midiport/fluidsynth/MidiSynthPlugin.java  |    7 +
 TuxGuitar-gervill/build.properties                 |    6 +-
 TuxGuitar-gervill/build.xml                        |   11 +-
 TuxGuitar-gervill/pom.xml                          |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-gervill.info          |    5 +
 TuxGuitar-gervill/share/lang/messages.properties   |    8 +
 .../io/gervill/MidiSequenceHandlerImpl.java        |   51 +-
 .../tuxguitar/io/gervill/MidiToAudioExporter.java  |   21 +-
 .../tuxguitar/io/gervill/MidiToAudioPlugin.java    |   27 +-
 .../tuxguitar/io/gervill/MidiToAudioSettings.java  |   15 +-
 .../io/gervill/MidiToAudioSettingsDialog.java      |   86 +-
 .../tuxguitar/io/gervill/MidiToAudioSynth.java     |   83 +-
 .../tuxguitar/io/gervill/MidiToAudioWriter.java    |   55 +
 TuxGuitar-gm-settings/build.properties             |   10 +
 TuxGuitar-gm-settings/build.xml                    |   53 +
 TuxGuitar-gm-settings/pom.xml                      |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-gm-settings.info      |    5 +
 .../share/lang/messages.properties                 |    6 +
 .../gm/settings/GMChannelSettingsDialog.java       |  180 +
 .../gm/settings/GMChannelSettingsHandler.java      |   21 +
 .../gm/settings/GMChannelSettingsPlugin.java       |   24 +
 TuxGuitar-gm-utils/build.properties                |    7 +
 TuxGuitar-gm-utils/build.xml                       |   46 +
 TuxGuitar-gm-utils/pom.xml                         |   26 +
 .../src/org/herac/tuxguitar/gm/GMChannelRoute.java |   37 +
 .../org/herac/tuxguitar/gm/GMChannelRouter.java    |  131 +
 .../tuxguitar/gm/GMChannelRouterConfigurator.java  |   48 +
 .../src/org/herac/tuxguitar/gm/port/GMChannel.java |   75 +
 .../org/herac/tuxguitar/gm/port/GMOutputPort.java  |   20 +
 .../org/herac/tuxguitar/gm/port/GMReceiver.java    |   19 +
 .../org/herac/tuxguitar/gm/port/GMSynthesizer.java |   31 +
 TuxGuitar-gpx/build.properties                     |    9 +
 TuxGuitar-gpx/build.xml                            |   52 +
 TuxGuitar-gpx/pom.xml                              |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    2 +
 TuxGuitar-gpx/share/META-INF/tuxguitar-gpx.info    |    5 +
 .../org/herac/tuxguitar/io/gpx/GPXByteBuffer.java  |   61 +
 .../herac/tuxguitar/io/gpx/GPXDocumentParser.java  |  617 ++
 .../herac/tuxguitar/io/gpx/GPXDocumentReader.java  |  466 ++
 .../org/herac/tuxguitar/io/gpx/GPXFileSystem.java  |  207 +
 .../org/herac/tuxguitar/io/gpx/GPXInputStream.java |   51 +
 .../tuxguitar/io/gpx/GPXInputStreamPlugin.java     |   17 +
 .../tuxguitar/io/gpx/score/GPXAutomation.java      |   63 +
 .../org/herac/tuxguitar/io/gpx/score/GPXBar.java   |   45 +
 .../org/herac/tuxguitar/io/gpx/score/GPXBeat.java  |  187 +
 .../herac/tuxguitar/io/gpx/score/GPXDocument.java  |  136 +
 .../herac/tuxguitar/io/gpx/score/GPXDrumkit.java   |   50 +
 .../herac/tuxguitar/io/gpx/score/GPXMasterBar.java |   74 +
 .../org/herac/tuxguitar/io/gpx/score/GPXNote.java  |  288 +
 .../herac/tuxguitar/io/gpx/score/GPXRhythm.java    |   54 +
 .../org/herac/tuxguitar/io/gpx/score/GPXScore.java |  108 +
 .../org/herac/tuxguitar/io/gpx/score/GPXTrack.java |   73 +
 .../org/herac/tuxguitar/io/gpx/score/GPXVoice.java |   27 +
 TuxGuitar-gtp/GNUmakefile                          |   89 -
 TuxGuitar-gtp/build.properties                     |    6 +-
 TuxGuitar-gtp/build.xml                            |   16 +-
 TuxGuitar-gtp/pom.xml                              |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    9 +
 TuxGuitar-gtp/share/META-INF/tuxguitar-gtp.info    |    5 +
 TuxGuitar-gtp/share/tuxguitar-gtp.cfg              |    3 +
 .../org/herac/tuxguitar/io/gtp/GP1InputStream.java |  189 +-
 .../tuxguitar/io/gtp/GP1InputStreamPlugin.java     |    8 +
 .../org/herac/tuxguitar/io/gtp/GP2InputStream.java |  177 +-
 .../tuxguitar/io/gtp/GP2InputStreamPlugin.java     |    8 +
 .../org/herac/tuxguitar/io/gtp/GP3InputStream.java |  151 +-
 .../tuxguitar/io/gtp/GP3InputStreamPlugin.java     |    8 +
 .../herac/tuxguitar/io/gtp/GP3OutputStream.java    |   40 +-
 .../tuxguitar/io/gtp/GP3OutputStreamPlugin.java    |    8 +
 .../org/herac/tuxguitar/io/gtp/GP4InputStream.java |  158 +-
 .../tuxguitar/io/gtp/GP4InputStreamPlugin.java     |    8 +
 .../herac/tuxguitar/io/gtp/GP4OutputStream.java    |   65 +-
 .../tuxguitar/io/gtp/GP4OutputStreamPlugin.java    |    8 +
 .../org/herac/tuxguitar/io/gtp/GP5InputStream.java |  179 +-
 .../tuxguitar/io/gtp/GP5InputStreamPlugin.java     |    8 +
 .../herac/tuxguitar/io/gtp/GP5OutputStream.java    |   41 +-
 .../tuxguitar/io/gtp/GP5OutputStreamPlugin.java    |    8 +
 .../org/herac/tuxguitar/io/gtp/GTPInputStream.java |    4 +-
 .../tuxguitar/io/gtp/GTPInputStreamPlugin.java     |   22 +
 .../herac/tuxguitar/io/gtp/GTPOutputStream.java    |   36 +
 .../tuxguitar/io/gtp/GTPOutputStreamPlugin.java    |   22 +
 .../src/org/herac/tuxguitar/io/gtp/GTPPlugin.java  |    7 +
 .../org/herac/tuxguitar/io/gtp/GTPPluginList.java  |   82 -
 .../herac/tuxguitar/io/gtp/GTPSettingsHandler.java |   11 +
 .../herac/tuxguitar/io/gtp/GTPSettingsPlugin.java  |   16 +
 .../herac/tuxguitar/io/gtp/GTPSettingsUtil.java    |   14 +-
 TuxGuitar-image/build.properties                   |    9 +
 TuxGuitar-image/build.xml                          |   53 +
 TuxGuitar-image/pom.xml                            |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-image.info            |    5 +
 TuxGuitar-image/share/lang/messages.properties     |    4 +
 .../herac/tuxguitar/io/image/ImageExporter.java    |  183 +
 .../tuxguitar/io/image/ImageExporterDialog.java    |  246 +
 .../tuxguitar/io/image/ImageExporterPlugin.java    |   17 +
 .../org/herac/tuxguitar/io/image/ImageFormat.java  |   34 +
 .../org/herac/tuxguitar/io/image/ImageWriter.java  |   30 +
 TuxGuitar-jack-ui/build.properties                 |   12 +
 TuxGuitar-jack-ui/build.xml                        |   54 +
 TuxGuitar-jack-ui/pom.xml                          |   51 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    2 +
 TuxGuitar-jack-ui/share/lang/messages.properties   |   17 +
 .../tuxguitar/jack/console/JackConsoleDialog.java  |  176 +
 .../tuxguitar/jack/console/JackConsolePlugin.java  |   49 +
 .../settings/JackChannelSettingsDialog.java        |  349 +
 .../settings/JackChannelSettingsHandler.java       |   21 +
 .../settings/JackChannelSettingsPlugin.java        |   23 +
 .../settings/JackMidiPlayerListener.java           |   46 +
 TuxGuitar-jack/GNUmakefile                         |   94 -
 TuxGuitar-jack/build.properties                    |    4 +-
 TuxGuitar-jack/build.xml                           |    2 +
 TuxGuitar-jack/jni/GNUmakefile                     |   12 +-
 .../jni/org_herac_tuxguitar_jack_JackClient.c      |  457 +-
 .../jni/org_herac_tuxguitar_jack_JackClient.h      |   64 +-
 TuxGuitar-jack/pom.xml                             |   41 +
 ...org.herac.tuxguitar.gui.system.plugins.TGPlugin |    1 -
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    4 +
 TuxGuitar-jack/share/META-INF/tuxguitar-jack.info  |    5 +
 TuxGuitar-jack/share/lang/messages.properties      |   38 +-
 .../src/org/herac/tuxguitar/jack/JackClient.java   |  189 +-
 .../src/org/herac/tuxguitar/jack/JackPlugin.java   |    6 +
 .../org/herac/tuxguitar/jack/JackPluginImpl.java   |   59 -
 .../src/org/herac/tuxguitar/jack/JackPort.java     |   20 +
 .../org/herac/tuxguitar/jack/JackPortFlags.java    |   15 +
 .../tuxguitar/jack/JackPortRegisterListener.java   |    7 +
 .../org/herac/tuxguitar/jack/JackPortTypes.java    |    9 +
 .../tuxguitar/jack/connection/JackConnection.java  |   36 +
 .../jack/connection/JackConnectionConfig.java      |   60 +
 .../jack/connection/JackConnectionListener.java    |   16 +
 .../jack/connection/JackConnectionManager.java     |  204 +
 .../jack/connection/JackConnectionPlugin.java      |   39 +
 .../jack/connection/JackConnectionProcess.java     |   39 +
 .../jack/provider/JackClientProvider.java          |    8 +
 .../herac/tuxguitar/jack/sequencer/JackEvent.java  |   24 +-
 .../jack/sequencer/JackEventDispacher.java         |   10 +-
 .../jack/sequencer/JackMidiPlayerStarter.java      |   57 +
 .../jack/sequencer/JackSequenceHandler.java        |   16 +-
 .../tuxguitar/jack/sequencer/JackSequencer.java    |  135 +-
 .../jack/sequencer/JackSequencerProvider.java      |   26 +-
 .../sequencer/JackSequencerProviderPlugin.java     |   17 +-
 .../jack/sequencer/JackTickController.java         |   24 +-
 .../tuxguitar/jack/settings/JackSettings.java      |   50 -
 .../jack/settings/JackSettingsDialog.java          |  554 --
 .../jack/settings/JackSettingsListener.java        |    9 -
 .../jack/singleton/JackClientInstanceProvider.java |   26 +
 .../jack/singleton/JackSingletonPlugin.java        |   59 +
 .../tuxguitar/jack/synthesizer/JackChannel.java    |   92 +
 .../jack/synthesizer/JackChannelParameter.java     |    9 +
 .../jack/synthesizer/JackChannelProxy.java         |   94 +
 .../tuxguitar/jack/synthesizer/JackGmPort.java     |   46 +
 .../tuxguitar/jack/synthesizer/JackGmReceiver.java |   66 +
 .../tuxguitar/jack/synthesizer/JackOutputPort.java |   75 -
 .../jack/synthesizer/JackOutputPortProvider.java   |   23 +-
 .../synthesizer/JackOutputPortProviderPlugin.java  |   16 +-
 .../jack/synthesizer/JackOutputPortRouter.java     |  185 -
 .../tuxguitar/jack/synthesizer/JackReceiver.java   |   66 -
 .../jack/synthesizer/JackSynthesizer.java          |  161 +
 .../jack/synthesizer/JackSynthesizerPort.java      |   48 +
 TuxGuitar-jsa/build.properties                     |    4 +-
 TuxGuitar-jsa/build.xml                            |   13 +-
 TuxGuitar-jsa/pom.xml                              |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    3 +
 TuxGuitar-jsa/share/META-INF/tuxguitar-jsa.info    |    5 +
 .../tuxguitar/player/impl/jsa/MidiPlugin.java      |    6 +
 .../tuxguitar/player/impl/jsa/MidiPluginList.java  |   53 -
 .../player/impl/jsa/assistant/SBAssistant.java     |   13 +-
 .../player/impl/jsa/assistant/SBInstaller.java     |    6 +-
 .../player/impl/jsa/assistant/SBInstallerGui.java  |   23 +-
 .../impl/jsa/message/MidiControlChangeMessage.java |   14 +
 .../impl/jsa/message/MidiMessageFactory.java       |  155 +
 .../impl/jsa/message/MidiNoteOffMessage.java       |   14 +
 .../player/impl/jsa/message/MidiNoteOnMessage.java |   14 +
 .../impl/jsa/message/MidiPitchBendMessage.java     |   14 +
 .../impl/jsa/message/MidiProgramChangeMessage.java |   14 +
 .../player/impl/jsa/message/MidiShortMessage.java  |   41 +
 .../impl/jsa/message/MidiSystemResetMessage.java   |   14 +
 .../impl/jsa/message/MidiTempoInUsqMessage.java    |   11 +
 .../impl/jsa/message/MidiTimeSignatureMessage.java |   13 +
 .../jsa/midiport/MidiOutputPortProviderPlugin.java |   16 +
 .../player/impl/jsa/midiport/MidiPortOut.java      |   76 +-
 .../impl/jsa/midiport/MidiPortProviderImpl.java    |    4 +-
 .../impl/jsa/midiport/MidiPortSynthesizer.java     |   56 +-
 .../impl/jsa/sequencer/MidiReceiverImpl.java       |  112 +-
 .../jsa/sequencer/MidiSequenceHandlerImpl.java     |   24 +-
 .../impl/jsa/sequencer/MidiSequencerImpl.java      |   15 +-
 .../jsa/sequencer/MidiSequencerProviderImpl.java   |    2 +-
 .../jsa/sequencer/MidiSequencerProviderPlugin.java |   16 +
 .../impl/jsa/settings/MidiSettingsHandler.java     |   16 +
 .../impl/jsa/settings/MidiSettingsPlugin.java      |   17 +
 .../player/impl/jsa/utils/MidiConfigUtils.java     |   21 +-
 TuxGuitar-jws/.classpath                           |    5 +
 TuxGuitar-jws/.project                             |   17 +
 TuxGuitar-jws/build.properties                     |    3 +-
 TuxGuitar-jws/build.xml                            |   22 +-
 TuxGuitar-jws/jws/files/gnu-linux-x86-64/swt.jar   |  Bin 0 -> 1614550 bytes
 .../files/gnu-linux-x86-64/tuxguitar-alsa-jni.jar  |  Bin 0 -> 6727 bytes
 .../jws/files/gnu-linux-x86-64/tuxguitar-alsa.jar  |  Bin 0 -> 8024 bytes
 .../jws/files/gnu-linux-x86-64/tuxguitar-dist.jar  |  Bin 0 -> 13849 bytes
 TuxGuitar-jws/jws/files/gnu-linux-x86/swt.jar      |  Bin 0 -> 1512959 bytes
 .../jws/files/gnu-linux-x86/tuxguitar-alsa-jni.jar |  Bin 0 -> 6318 bytes
 .../jws/files/gnu-linux-x86/tuxguitar-alsa.jar     |  Bin 0 -> 8024 bytes
 .../jws/files/gnu-linux-x86/tuxguitar-dist.jar     |  Bin 0 -> 13849 bytes
 TuxGuitar-jws/jws/files/macosx-x86/swt.jar         |  Bin 0 -> 1646544 bytes
 .../files/macosx-x86/tuxguitar-audiounit-jni.jar   |  Bin 0 -> 9371 bytes
 .../jws/files/macosx-x86/tuxguitar-audiounit.jar   |  Bin 0 -> 8532 bytes
 .../macosx-x86/tuxguitar-cocoa-integration.jar     |  Bin 0 -> 21186 bytes
 .../jws/files/macosx-x86/tuxguitar-dist.jar        |  Bin 0 -> 13842 bytes
 TuxGuitar-jws/jws/files/macosx-x86_64/swt.jar      |  Bin 0 -> 1532749 bytes
 .../macosx-x86_64/tuxguitar-audiounit-jni.jar      |  Bin 0 -> 9373 bytes
 .../files/macosx-x86_64/tuxguitar-audiounit.jar    |  Bin 0 -> 8533 bytes
 .../macosx-x86_64/tuxguitar-cocoa-integration.jar  |  Bin 0 -> 21185 bytes
 .../jws/files/macosx-x86_64/tuxguitar-dist.jar     |  Bin 0 -> 13842 bytes
 TuxGuitar-jws/jws/files/tuxguitar-jws.jar          |  Bin 0 -> 5370490 bytes
 TuxGuitar-jws/jws/files/windows-x86/swt.jar        |  Bin 0 -> 1786335 bytes
 .../jws/files/windows-x86/tuxguitar-dist.jar       |  Bin 0 -> 13905 bytes
 TuxGuitar-jws/jws/tuxguitar.jnlp                   |   10 +-
 TuxGuitar-lib/build.properties                     |    5 +
 TuxGuitar-lib/build.xml                            |   40 +
 TuxGuitar-lib/pom.xml                              |   28 +
 .../src/org/herac/tuxguitar/action/TGAction.java   |    6 +
 .../herac/tuxguitar/action/TGActionContext.java    |   21 +
 .../tuxguitar/action/TGActionContextFactory.java   |    7 +
 .../herac/tuxguitar/action/TGActionException.java  |   20 +
 .../tuxguitar/action/TGActionInterceptor.java      |    6 +
 .../herac/tuxguitar/action/TGActionManager.java    |  157 +
 .../action/TGActionPostExecutionListener.java      |    7 +
 .../action/TGActionPreExecutionListener.java       |    7 +
 .../src/org/herac/tuxguitar/graphics/TGColor.java  |   10 +
 .../org/herac/tuxguitar/graphics/TGColorModel.java |   42 +
 .../org/herac/tuxguitar/graphics/TGDimension.java  |   32 +
 .../src/org/herac/tuxguitar/graphics/TGFont.java   |   13 +
 .../org/herac/tuxguitar/graphics/TGFontModel.java  |   52 +
 .../src/org/herac/tuxguitar/graphics/TGImage.java  |   10 +
 .../org/herac/tuxguitar/graphics/TGPainter.java    |   73 +
 .../herac/tuxguitar/graphics/TGPainterFactory.java |    7 +
 .../src/org/herac/tuxguitar/graphics/TGPoint.java  |   32 +
 .../org/herac/tuxguitar/graphics/TGRectangle.java  |   48 +
 .../org/herac/tuxguitar/graphics/TGResource.java   |    9 +
 .../tuxguitar/graphics/TGResourceFactory.java      |   15 +
 .../tuxguitar/graphics/control/TGBeatGroup.java    |  202 +
 .../tuxguitar/graphics/control/TGBeatImpl.java     |  393 +
 .../tuxguitar/graphics/control/TGBeatSpacing.java  |   45 +
 .../tuxguitar/graphics/control/TGChordImpl.java    |  435 +
 .../tuxguitar/graphics/control/TGController.java   |   26 +
 .../tuxguitar/graphics/control/TGFactoryImpl.java  |   55 +
 .../herac/tuxguitar/graphics/control/TGLayout.java |  834 ++
 .../graphics/control/TGLayoutHorizontal.java       |  126 +
 .../tuxguitar/graphics/control/TGLayoutStyles.java |  323 +
 .../graphics/control/TGLayoutVertical.java         |  203 +
 .../tuxguitar/graphics/control/TGLyricImpl.java    |   72 +
 .../graphics/control/TGMeasureBuffer.java          |   78 +
 .../graphics/control/TGMeasureHeaderImpl.java      |  156 +
 .../tuxguitar/graphics/control/TGMeasureImpl.java  | 1326 +++
 .../tuxguitar/graphics/control/TGNoteImpl.java     |  665 ++
 .../tuxguitar/graphics/control/TGResources.java    |  429 +
 .../tuxguitar/graphics/control/TGSpacing.java      |   52 +
 .../tuxguitar/graphics/control/TGTextImpl.java     |   16 +
 .../tuxguitar/graphics/control/TGTrackImpl.java    |   76 +
 .../tuxguitar/graphics/control/TGTrackSpacing.java |   89 +
 .../tuxguitar/graphics/control/TGVoiceImpl.java    |  648 ++
 .../graphics/control/painters/TGClefPainter.java   |  345 +
 .../control/painters/TGKeySignaturePainter.java    |  144 +
 .../graphics/control/painters/TGNotePainter.java   |   47 +
 .../control/painters/TGSilencePainter.java         |  254 +
 .../graphics/control/painters/TGTempoPainter.java  |   21 +
 .../control/painters/TGTripletFeelPainter.java     |  124 +
 .../org/herac/tuxguitar/io/base/TGFileFormat.java  |    0
 .../tuxguitar/io/base/TGFileFormatException.java   |    0
 .../tuxguitar/io/base/TGFileFormatManager.java     |  185 +
 .../herac/tuxguitar/io/base/TGInputStreamBase.java |   17 +
 .../tuxguitar/io/base/TGLocalFileExporter.java     |    0
 .../tuxguitar/io/base/TGLocalFileImporter.java     |    0
 .../tuxguitar/io/base/TGOutputStreamBase.java      |   17 +
 .../org/herac/tuxguitar/io/base/TGRawExporter.java |    0
 .../org/herac/tuxguitar/io/base/TGRawImporter.java |    0
 .../org/herac/tuxguitar/io/base/TGSongLoader.java  |    0
 .../org/herac/tuxguitar/io/base/TGSongWriter.java  |    0
 .../io/base/event/TGFileFormatEventManager.java    |  193 +
 .../io/base/event/TGInputStreamAddedListener.java  |    9 +
 .../base/event/TGInputStreamRemovedListener.java   |    9 +
 .../io/base/event/TGOutputStreamAddedListener.java |    9 +
 .../base/event/TGOutputStreamRemovedListener.java  |    9 +
 .../io/base/event/TGRawExporterAddedListener.java  |    9 +
 .../base/event/TGRawExporterRemovedListener.java   |    9 +
 .../io/base/event/TGRawImporterAddedListener.java  |    9 +
 .../base/event/TGRawImporterRemovedListener.java   |    9 +
 .../tuxguitar/io/plugin/TGExporterPlugin.java      |   44 +
 .../tuxguitar/io/plugin/TGImporterPlugin.java      |   44 +
 .../tuxguitar/io/plugin/TGInputStreamPlugin.java   |   44 +
 .../tuxguitar/io/plugin/TGOutputStreamPlugin.java  |   44 +
 .../org/herac/tuxguitar/io/tg/TGInputStream.java   |  774 ++
 .../org/herac/tuxguitar/io/tg/TGOutputStream.java  |  725 ++
 .../src/org/herac/tuxguitar/io/tg/TGStream.java    |  205 +
 .../herac/tuxguitar/player/base/MidiChannel.java   |   21 +
 .../tuxguitar/player/base/MidiChannelRouter.java   |  110 +
 .../tuxguitar/player/base/MidiControllers.java     |   31 +
 .../herac/tuxguitar/player/base/MidiDevice.java    |    0
 .../tuxguitar/player/base/MidiInstrument.java      |    0
 .../tuxguitar/player/base/MidiOutputPort.java      |    7 +
 .../player/base/MidiOutputPortProvider.java        |    0
 .../tuxguitar/player/base/MidiPercussion.java      |    0
 .../herac/tuxguitar/player/base/MidiPlayer.java    |  982 +++
 .../tuxguitar/player/base/MidiPlayerCountDown.java |  111 +
 .../tuxguitar/player/base/MidiPlayerException.java |   18 +
 .../tuxguitar/player/base/MidiPlayerListener.java  |   14 +
 .../tuxguitar/player/base/MidiPlayerMode.java      |    0
 .../herac/tuxguitar/player/base/MidiReceiver.java  |   21 +
 .../player/base/MidiRepeatController.java          |    0
 .../tuxguitar/player/base/MidiSequenceHandler.java |   32 +
 .../tuxguitar/player/base/MidiSequenceParser.java  |  933 +++
 .../herac/tuxguitar/player/base/MidiSequencer.java |    0
 .../tuxguitar/player/base/MidiSequencerEmpty.java  |  102 +
 .../player/base/MidiSequencerProvider.java         |    0
 .../tuxguitar/player/base/MidiSynthesizer.java     |   10 +
 .../player/base/MidiSynthesizerProxy.java          |   38 +
 .../tuxguitar/player/base/MidiTransmitter.java     |  113 +
 .../tuxguitar/player/impl/sequencer/MidiEvent.java |   73 +
 .../player/impl/sequencer/MidiEventDispacher.java  |   35 +
 .../player/impl/sequencer/MidiEventPlayer.java     |    0
 .../impl/sequencer/MidiSequenceHandlerImpl.java    |   47 +
 .../player/impl/sequencer/MidiSequencerImpl.java   |  176 +
 .../impl/sequencer/MidiSequencerProviderImpl.java  |    0
 .../player/impl/sequencer/MidiTickPlayer.java      |    0
 .../tuxguitar/player/impl/sequencer/MidiTrack.java |    0
 .../player/impl/sequencer/MidiTrackController.java |    0
 .../plugin/TGMidiOutputPortProviderPlugin.java     |   57 +
 .../plugin/TGMidiSequencerProviderPlugin.java      |   57 +
 .../herac/tuxguitar/song/factory/TGFactory.java    |  201 +
 .../tuxguitar/song/helpers/TGSongSegment.java      |    0
 .../song/helpers/TGSongSegmentHelper.java          |    0
 .../tuxguitar/song/helpers/TGTrackSegment.java     |    0
 .../tuxguitar/song/managers/TGMeasureManager.java  | 2411 ++++++
 .../tuxguitar/song/managers/TGSongManager.java     |  961 +++
 .../tuxguitar/song/managers/TGTrackManager.java    |  341 +
 .../org/herac/tuxguitar/song/models/TGBeat.java    |    0
 .../org/herac/tuxguitar/song/models/TGChannel.java |  179 +
 .../tuxguitar/song/models/TGChannelParameter.java  |   40 +
 .../org/herac/tuxguitar/song/models/TGChord.java   |    0
 .../org/herac/tuxguitar/song/models/TGColor.java   |    0
 .../tuxguitar/song/models/TGDivisionType.java      |   91 +
 .../herac/tuxguitar/song/models/TGDuration.java    |    0
 .../org/herac/tuxguitar/song/models/TGLyric.java   |    0
 .../org/herac/tuxguitar/song/models/TGMarker.java  |    0
 .../org/herac/tuxguitar/song/models/TGMeasure.java |  165 +
 .../tuxguitar/song/models/TGMeasureHeader.java     |    0
 .../org/herac/tuxguitar/song/models/TGNote.java    |    0
 .../herac/tuxguitar/song/models/TGNoteEffect.java  |  416 +
 .../org/herac/tuxguitar/song/models/TGScale.java   |    0
 .../org/herac/tuxguitar/song/models/TGSong.java    |  260 +
 .../org/herac/tuxguitar/song/models/TGString.java  |    0
 .../org/herac/tuxguitar/song/models/TGStroke.java  |    0
 .../org/herac/tuxguitar/song/models/TGTempo.java   |    0
 .../org/herac/tuxguitar/song/models/TGText.java    |    0
 .../tuxguitar/song/models/TGTimeSignature.java     |    0
 .../org/herac/tuxguitar/song/models/TGTrack.java   |  197 +
 .../herac/tuxguitar/song/models/TGVelocities.java  |    0
 .../org/herac/tuxguitar/song/models/TGVoice.java   |    0
 .../song/models/effects/TGEffectBend.java          |    0
 .../song/models/effects/TGEffectGrace.java         |    0
 .../song/models/effects/TGEffectHarmonic.java      |    0
 .../song/models/effects/TGEffectTremoloBar.java    |    0
 .../models/effects/TGEffectTremoloPicking.java     |    0
 .../song/models/effects/TGEffectTrill.java         |    0
 .../org/herac/tuxguitar/util/TGClassLoader.java    |    0
 .../src/org/herac/tuxguitar/util/TGException.java  |   22 +
 .../org/herac/tuxguitar/util/TGLibraryLoader.java  |  144 +
 .../src/org/herac/tuxguitar/util/TGLock.java       |    0
 .../org/herac/tuxguitar/util/TGServiceReader.java  |    0
 .../org/herac/tuxguitar/util/TGSynchronizer.java   |   75 +
 .../src/org/herac/tuxguitar/util/TGVersion.java    |   47 +
 .../util/configuration/TGConfigManager.java        |  104 +
 .../herac/tuxguitar/util/error/TGErrorHandler.java |    7 +
 .../herac/tuxguitar/util/error/TGErrorManager.java |   49 +
 .../org/herac/tuxguitar/util/plugin/TGPlugin.java  |   13 +
 .../tuxguitar/util/plugin/TGPluginException.java   |   24 +
 .../herac/tuxguitar/util/plugin/TGPluginInfo.java  |   49 +
 .../tuxguitar/util/plugin/TGPluginManager.java     |  137 +
 .../tuxguitar/util/plugin/TGPluginProperties.java  |   68 +
 .../tuxguitar/util/properties/TGProperties.java    |   13 +
 .../util/properties/TGPropertiesException.java     |   20 +
 .../util/properties/TGPropertiesFactory.java       |    7 +
 .../util/properties/TGPropertiesManager.java       |   81 +
 .../util/properties/TGPropertiesReader.java        |    7 +
 .../util/properties/TGPropertiesUtil.java          |   89 +
 .../util/properties/TGPropertiesWriter.java        |    7 +
 TuxGuitar-lib/tuxguitar-lib.jar                    |  Bin 0 -> 256271 bytes
 TuxGuitar-lilypond/GNUmakefile                     |   79 -
 TuxGuitar-lilypond/build.properties                |    5 +-
 TuxGuitar-lilypond/build.xml                       |   12 +-
 TuxGuitar-lilypond/pom.xml                         |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-lilypond.info         |    5 +
 TuxGuitar-lilypond/share/lang/messages.properties  |    1 +
 .../io/lilypond/LilypondOutputStream.java          |  133 +-
 .../io/lilypond/LilypondPluginExporter.java        |   20 +-
 .../tuxguitar/io/lilypond/LilypondSettings.java    |   11 +
 .../io/lilypond/LilypondSettingsDialog.java        |   16 +-
 TuxGuitar-midi-input/build.properties              |    9 +
 TuxGuitar-midi-input/build.xml                     |   53 +
 TuxGuitar-midi-input/pom.xml                       |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    2 +
 .../share/META-INF/tuxguitar-midi-input.info       |    5 +
 .../share/lang/messages.properties                 |   45 +
 .../share/lang/messages_sv.properties              |   51 +
 .../org/herac/tuxguitar/midiinput/MiBuffer.java    |  326 +
 .../org/herac/tuxguitar/midiinput/MiConfig.java    |  361 +
 .../org/herac/tuxguitar/midiinput/MiException.java |   17 +
 .../src/org/herac/tuxguitar/midiinput/MiNote.java  |   45 +
 .../src/org/herac/tuxguitar/midiinput/MiPanel.java |  161 +
 .../org/herac/tuxguitar/midiinput/MiPlugin.java    |    6 +
 .../src/org/herac/tuxguitar/midiinput/MiPort.java  |  184 +
 .../herac/tuxguitar/midiinput/MiPortProvider.java  |   90 +
 .../org/herac/tuxguitar/midiinput/MiProvider.java  |  461 ++
 .../org/herac/tuxguitar/midiinput/MiRecorder.java  |  131 +
 .../herac/tuxguitar/midiinput/MiScaleFinder.java   |  189 +
 .../tuxguitar/midiinput/MiSettingsHandler.java     |   15 +
 .../src/org/herac/tuxguitar/midiinput/MiStaff.java |  439 +
 .../herac/tuxguitar/midiinput/MiStaffEvent.java    |  140 +
 .../org/herac/tuxguitar/midiinput/MiStaffNote.java |  196 +
 .../herac/tuxguitar/midiinput/MidiInputPlugin.java |   77 +
 .../tuxguitar/midiinput/MidiSettingsPlugin.java    |   16 +
 TuxGuitar-midi/GNUmakefile                         |   72 -
 TuxGuitar-midi/build.properties                    |    6 +-
 TuxGuitar-midi/build.xml                           |   11 +-
 TuxGuitar-midi/keyboard-bug/TEST_R25.mid           |  Bin 0 -> 4433 bytes
 TuxGuitar-midi/keyboard-bug/description            |    1 +
 TuxGuitar-midi/pom.xml                             |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    2 +
 TuxGuitar-midi/share/META-INF/tuxguitar-midi.info  |    5 +
 .../org/herac/tuxguitar/io/midi/MidiPlugin.java    |    6 +
 .../tuxguitar/io/midi/MidiPluginExporter.java      |    6 +-
 .../tuxguitar/io/midi/MidiPluginImporter.java      |    6 +-
 .../herac/tuxguitar/io/midi/MidiPluginList.java    |   32 -
 .../tuxguitar/io/midi/MidiSequenceHandlerImpl.java |   51 +-
 .../tuxguitar/io/midi/MidiSettingsDialog.java      |    4 +-
 .../herac/tuxguitar/io/midi/MidiSongExporter.java  |   19 +-
 .../herac/tuxguitar/io/midi/MidiSongImporter.java  |  127 +-
 TuxGuitar-musicxml/GNUmakefile                     |   72 -
 TuxGuitar-musicxml/build.properties                |    5 +-
 TuxGuitar-musicxml/build.xml                       |   11 +-
 TuxGuitar-musicxml/pom.xml                         |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-musicxml.info         |    5 +
 .../io/musicxml/MusicXMLPluginExporter.java        |   20 +-
 .../tuxguitar/io/musicxml/MusicXMLWriter.java      |   26 +-
 TuxGuitar-oss/GNUmakefile                          |   92 -
 TuxGuitar-oss/build.properties                     |    6 +-
 TuxGuitar-oss/build.xml                            |   11 +-
 TuxGuitar-oss/jni/GNUmakefile                      |    9 +-
 TuxGuitar-oss/pom.xml                              |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    2 +
 TuxGuitar-oss/share/META-INF/tuxguitar-oss.info    |    5 +
 .../player/impl/midiport/oss/MidiConfigUtils.java  |   17 +-
 .../impl/midiport/oss/MidiOutputPortImpl.java      |    8 +-
 .../midiport/oss/MidiOutputPortProviderPlugin.java |   30 +-
 .../player/impl/midiport/oss/MidiPlugin.java       |    6 +
 .../player/impl/midiport/oss/MidiReceiverImpl.java |    4 +-
 .../impl/midiport/oss/MidiSettingsHandler.java     |   17 +
 .../impl/midiport/oss/MidiSettingsPlugin.java      |   35 +
 TuxGuitar-pdf/build.properties                     |    4 +-
 TuxGuitar-pdf/build.xml                            |   11 +-
 TuxGuitar-pdf/pom.xml                              |   56 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 TuxGuitar-pdf/share/META-INF/tuxguitar-pdf.info    |    5 +
 .../herac/tuxguitar/io/pdf/PDFPluginExporter.java  |   23 +-
 .../herac/tuxguitar/io/pdf/PDFSongExporter.java    |   83 +-
 .../src/org/herac/tuxguitar/io/pdf/PDFWriter.java  |    8 +-
 TuxGuitar-ptb/GNUmakefile                          |   72 -
 TuxGuitar-ptb/build.properties                     |    5 +-
 TuxGuitar-ptb/build.xml                            |   11 +-
 TuxGuitar-ptb/pom.xml                              |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 TuxGuitar-ptb/share/META-INF/tuxguitar-ptb.info    |    5 +
 .../org/herac/tuxguitar/io/ptb/PTInputStream.java  |   27 +-
 .../tuxguitar/io/ptb/PTInputStreamPlugin.java      |   20 +-
 .../org/herac/tuxguitar/io/ptb/PTSongParser.java   |   22 +-
 TuxGuitar-svg/build.properties                     |    9 +
 TuxGuitar-svg/build.xml                            |   53 +
 TuxGuitar-svg/pom.xml                              |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    2 +
 TuxGuitar-svg/share/META-INF/tuxguitar-svg.info    |    5 +
 .../src/org/herac/tuxguitar/io/svg/SVGColor.java   |   49 +
 .../org/herac/tuxguitar/io/svg/SVGController.java  |  140 +
 .../org/herac/tuxguitar/io/svg/SVGExporter.java    |   60 +
 .../herac/tuxguitar/io/svg/SVGExporterPlugin.java  |   18 +
 .../herac/tuxguitar/io/svg/SVGExporterStyles.java  |  106 +
 .../tuxguitar/io/svg/SVGExporterStylesDialog.java  |  163 +
 .../src/org/herac/tuxguitar/io/svg/SVGFont.java    |   37 +
 .../src/org/herac/tuxguitar/io/svg/SVGImage.java   |   50 +
 .../src/org/herac/tuxguitar/io/svg/SVGPainter.java |  239 +
 .../herac/tuxguitar/io/svg/SVGResourceFactory.java |   31 +
 TuxGuitar-tef/GNUmakefile                          |   72 -
 TuxGuitar-tef/build.properties                     |    4 +-
 TuxGuitar-tef/build.xml                            |   10 +-
 TuxGuitar-tef/pom.xml                              |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 TuxGuitar-tef/share/META-INF/tuxguitar-tef.info    |    5 +
 .../herac/tuxguitar/io/tef/TEPluginImporter.java   |   20 +-
 .../org/herac/tuxguitar/io/tef/TESongImporter.java |   17 +-
 TuxGuitar-testing/.project                         |   11 +
 TuxGuitar-testing/build.xml                        |  200 +
 TuxGuitar-testing/platform-all/doc/AUTHORS         |  195 +
 TuxGuitar-testing/platform-all/doc/CHANGES         |   30 +
 .../platform-all/doc/LICENSE                       |    0
 TuxGuitar-testing/platform-all/doc/README          |   42 +
 TuxGuitar-testing/platform-all/lib/gervill.jar     |  Bin 0 -> 243704 bytes
 TuxGuitar-testing/platform-all/lib/itext.jar       |  Bin 0 -> 1130070 bytes
 .../platform-all/share/help/about.html             |  313 +
 .../platform-all/share/help/css/styles.css         |   57 +
 .../platform-all/share/help/edit_chord.html        |  231 +
 .../platform-all/share/help/edit_effects.html      |  424 +
 .../platform-all/share/help/edit_matrix.html       |  110 +
 .../platform-all/share/help/editing_song.html      |  264 +
 .../platform-all/share/help/editing_track.html     |  286 +
 .../platform-all/share/help/file_formats.html      |  137 +
 .../share/help/images/edit/chord_dialog.png        |  Bin 0 -> 55272 bytes
 .../help/images/edit/chord_settings_dialog.png     |  Bin 0 -> 12287 bytes
 .../share/help/images/edit/ed_lyrics.png           |  Bin 0 -> 9611 bytes
 .../share/help/images/edit/effects_bend.png        |  Bin 0 -> 12957 bytes
 .../share/help/images/edit/effects_grace.png       |  Bin 0 -> 19824 bytes
 .../share/help/images/edit/effects_tremolobar.png  |  Bin 0 -> 14675 bytes
 .../share/help/images/edit/insert_named_chord.png  |  Bin 0 -> 2210 bytes
 .../share/help/images/edit/matrix_editor.png       |  Bin 0 -> 25017 bytes
 .../share/help/images/edit/repeats.png             |  Bin 0 -> 927 bytes
 .../share/help/images/edit/sed_mixer_dialog.png    |  Bin 0 -> 11051 bytes
 .../platform-all/share/help/images/edit/typing.png |  Bin 0 -> 834 bytes
 .../share/help/images/start/fs_new_file.png        |  Bin 0 -> 13015 bytes
 .../share/help/images/start/fs_song_table.png      |  Bin 0 -> 3040 bytes
 .../help/images/start/fs_track_properties.png      |  Bin 0 -> 24342 bytes
 .../share/help/images/start/p_mode.png             |  Bin 0 -> 14708 bytes
 .../share/help/images/start/tb_add_track.png       |  Bin 0 -> 1320 bytes
 .../share/help/images/start/tb_composition.png     |  Bin 0 -> 2280 bytes
 .../share/help/images/start/tb_duration.png        |  Bin 0 -> 3740 bytes
 .../share/help/images/start/tb_dynamics.png        |  Bin 0 -> 3515 bytes
 .../share/help/images/start/tb_edit_menu.png       |  Bin 0 -> 1263 bytes
 .../share/help/images/start/tb_edit_mode.png       |  Bin 0 -> 2675 bytes
 .../share/help/images/start/tb_effects.png         |  Bin 0 -> 6881 bytes
 .../share/help/images/start/tb_file_menu.png       |  Bin 0 -> 4083 bytes
 .../share/help/images/start/tb_layout.png          |  Bin 0 -> 4162 bytes
 .../share/help/images/start/tb_markers.png         |  Bin 0 -> 2984 bytes
 .../share/help/images/start/tb_note.png            |  Bin 0 -> 1398 bytes
 .../share/help/images/start/tb_properties.png      |  Bin 0 -> 806 bytes
 .../share/help/images/start/tb_props_diff.png      |  Bin 0 -> 11342 bytes
 .../share/help/images/start/tb_transport.png       |  Bin 0 -> 2184 bytes
 .../share/help/images/start/tb_view.png            |  Bin 0 -> 2270 bytes
 .../share/help/images/tools/converter.png          |  Bin 0 -> 12469 bytes
 .../share/help/images/tools/keybinding_editor.png  |  Bin 0 -> 18947 bytes
 .../share/help/images/tools/plugins_dialog.png     |  Bin 0 -> 17538 bytes
 .../share/help/images/tools/settings_skin.png      |  Bin 0 -> 113867 bytes
 .../platform-all/share/help/index.html             |    6 +
 .../platform-all/share/help/license.html           |  645 ++
 .../platform-all/share/help/start_first_steps.html |  172 +
 .../platform-all/share/help/start_playing.html     |  167 +
 .../platform-all/share/help/start_toolbars.html    |  404 +
 .../platform-all/share/help/tools_converter.html   |  134 +
 .../platform-all/share/help/tools_keybinding.html  |   99 +
 .../platform-all/share/help/tools_plugins.html     |  114 +
 .../platform-all/share/help/tools_shortcuts.html   |  515 ++
 .../platform-all/share/help/tools_skin.html        |  102 +
 .../platform-all/share/help/tools_sound.html       |  150 +
 .../platform-all/share/help/whatsnew.html          |  259 +
 .../platform-all/share/lang/last_additions         |   59 +
 .../platform-all/share/lang/messages.properties    |  866 ++
 .../platform-all/share/lang/messages_bg.properties |  682 ++
 .../platform-all/share/lang/messages_ca.properties |  687 ++
 .../platform-all/share/lang/messages_cs.properties |  484 ++
 .../platform-all/share/lang/messages_de.properties |  685 ++
 .../platform-all/share/lang/messages_el.properties |  685 ++
 .../platform-all/share/lang/messages_en.properties |  686 ++
 .../platform-all/share/lang/messages_es.properties |  680 ++
 .../platform-all/share/lang/messages_eu.properties | 1101 +++
 .../platform-all/share/lang/messages_fi.properties |  688 ++
 .../platform-all/share/lang/messages_fr.properties |  638 ++
 .../platform-all/share/lang/messages_hu.properties |  482 ++
 .../platform-all/share/lang/messages_it.properties |  646 ++
 .../platform-all/share/lang/messages_ja.properties |  682 ++
 .../platform-all/share/lang/messages_lt.properties |  687 ++
 .../platform-all/share/lang/messages_nl.properties |  616 ++
 .../platform-all/share/lang/messages_pl.properties |  702 ++
 .../platform-all/share/lang/messages_pt.properties |  722 ++
 .../platform-all/share/lang/messages_ru.properties |  615 ++
 .../platform-all/share/lang/messages_sr.properties |  618 ++
 .../platform-all/share/lang/messages_sv.properties |  692 ++
 .../platform-all/share/lang/messages_uk.properties |  614 ++
 .../platform-all/share/lang/messages_vi.properties |  617 ++
 .../share/lang/messages_zh_GB.properties           | 1237 +++
 .../share/lang/messages_zh_TW.properties           |  719 ++
 TuxGuitar-testing/platform-all/share/lang/toutf.pl |   35 +
 .../platform-all/share/plugins/tuxguitar-abc.jar   |  Bin 0 -> 80129 bytes
 .../platform-all/share/plugins/tuxguitar-ascii.jar |  Bin 0 -> 5660 bytes
 .../share/plugins/tuxguitar-browser-ftp.jar        |  Bin 0 -> 18166 bytes
 .../share/plugins/tuxguitar-community.jar          |  Bin 0 -> 56238 bytes
 .../share/plugins/tuxguitar-compat.jar             |  Bin 0 -> 64544 bytes
 .../share/plugins/tuxguitar-converter.jar          |  Bin 0 -> 25597 bytes
 .../share/plugins/tuxguitar-gervill.jar            |  Bin 0 -> 19046 bytes
 .../platform-all/share/plugins/tuxguitar-gpx.jar   |  Bin 0 -> 25943 bytes
 .../platform-all/share/plugins/tuxguitar-gtp.jar   |  Bin 0 -> 66321 bytes
 .../platform-all/share/plugins/tuxguitar-image.jar |  Bin 0 -> 16064 bytes
 .../platform-all/share/plugins/tuxguitar-jsa.jar   |  Bin 0 -> 39116 bytes
 .../share/plugins/tuxguitar-lilypond.jar           |  Bin 0 -> 23485 bytes
 .../platform-all/share/plugins/tuxguitar-midi.jar  |  Bin 0 -> 26887 bytes
 .../share/plugins/tuxguitar-musicxml.jar           |  Bin 0 -> 8787 bytes
 .../platform-all/share/plugins/tuxguitar-pdf.jar   |  Bin 0 -> 8291 bytes
 .../platform-all/share/plugins/tuxguitar-ptb.jar   |  Bin 0 -> 27381 bytes
 .../platform-all/share/plugins/tuxguitar-svg.jar   |  Bin 0 -> 17371 bytes
 .../platform-all/share/plugins/tuxguitar-tef.jar   |  Bin 0 -> 20327 bytes
 .../platform-all/share/plugins/tuxguitar-tray.jar  |  Bin 0 -> 5654 bytes
 .../platform-all/share/plugins/tuxguitar-tuner.jar |  Bin 0 -> 30271 bytes
 .../platform-all/share/scales/scales.xml           |  278 +
 .../platform-all/share/skins/Lavender/1.png        |  Bin 0 -> 3086 bytes
 .../platform-all/share/skins/Lavender/16.png       |  Bin 0 -> 3290 bytes
 .../platform-all/share/skins/Lavender/2.png        |  Bin 0 -> 3032 bytes
 .../platform-all/share/skins/Lavender/32.png       |  Bin 0 -> 3277 bytes
 .../platform-all/share/skins/Lavender/4.png        |  Bin 0 -> 3027 bytes
 .../platform-all/share/skins/Lavender/64.png       |  Bin 0 -> 3203 bytes
 .../platform-all/share/skins/Lavender/8.png        |  Bin 0 -> 3268 bytes
 .../share/skins/Lavender/about_authors.png         |  Bin 0 -> 6897 bytes
 .../share/skins/Lavender/about_description.png     |  Bin 0 -> 9155 bytes
 .../share/skins/Lavender/about_license.png         |  Bin 0 -> 6728 bytes
 .../share/skins/Lavender/browser_back.png          |  Bin 0 -> 914 bytes
 .../share/skins/Lavender/browser_file.png          |  Bin 0 -> 517 bytes
 .../share/skins/Lavender/browser_folder.png        |  Bin 0 -> 679 bytes
 .../share/skins/Lavender/browser_new.png           |  Bin 0 -> 3361 bytes
 .../share/skins/Lavender/browser_refresh.png       |  Bin 0 -> 1380 bytes
 .../share/skins/Lavender/browser_root.png          |  Bin 0 -> 914 bytes
 .../platform-all/share/skins/Lavender/chord.png    |  Bin 0 -> 3645 bytes
 .../share/skins/Lavender/closerepeat.png           |  Bin 0 -> 3171 bytes
 .../share/skins/Lavender/division-type.png         |  Bin 0 -> 3623 bytes
 .../platform-all/share/skins/Lavender/dotted.png   |  Bin 0 -> 3093 bytes
 .../share/skins/Lavender/doubledotted.png          |  Bin 0 -> 3130 bytes
 .../share/skins/Lavender/dynamic_f.png             |  Bin 0 -> 3098 bytes
 .../share/skins/Lavender/dynamic_ff.png            |  Bin 0 -> 3328 bytes
 .../share/skins/Lavender/dynamic_fff.png           |  Bin 0 -> 3568 bytes
 .../share/skins/Lavender/dynamic_mf.png            |  Bin 0 -> 3295 bytes
 .../share/skins/Lavender/dynamic_mp.png            |  Bin 0 -> 3193 bytes
 .../share/skins/Lavender/dynamic_p.png             |  Bin 0 -> 3011 bytes
 .../share/skins/Lavender/dynamic_pp.png            |  Bin 0 -> 3161 bytes
 .../share/skins/Lavender/dynamic_ppp.png           |  Bin 0 -> 3327 bytes
 .../share/skins/Lavender/edit_mode_edition.png     |  Bin 0 -> 3567 bytes
 .../Lavender/edit_mode_edition_no_natural.png      |  Bin 0 -> 3811 bytes
 .../share/skins/Lavender/edit_mode_selection.png   |  Bin 0 -> 3523 bytes
 .../share/skins/Lavender/edit_redo.png             |  Bin 0 -> 3554 bytes
 .../share/skins/Lavender/edit_undo.png             |  Bin 0 -> 3547 bytes
 .../share/skins/Lavender/edit_voice_1.png          |  Bin 0 -> 3273 bytes
 .../share/skins/Lavender/edit_voice_2.png          |  Bin 0 -> 3309 bytes
 .../share/skins/Lavender/effect_accentuated.png    |  Bin 0 -> 3141 bytes
 .../share/skins/Lavender/effect_bend.png           |  Bin 0 -> 3278 bytes
 .../share/skins/Lavender/effect_dead.png           |  Bin 0 -> 3329 bytes
 .../share/skins/Lavender/effect_fade_in.png        |  Bin 0 -> 3124 bytes
 .../share/skins/Lavender/effect_ghost.png          |  Bin 0 -> 3277 bytes
 .../share/skins/Lavender/effect_grace.png          |  Bin 0 -> 3345 bytes
 .../share/skins/Lavender/effect_hammer.png         |  Bin 0 -> 3418 bytes
 .../share/skins/Lavender/effect_harmonic.png       |  Bin 0 -> 3492 bytes
 .../skins/Lavender/effect_heavy_accentuated.png    |  Bin 0 -> 3219 bytes
 .../share/skins/Lavender/effect_palm_mute.png      |  Bin 0 -> 3458 bytes
 .../share/skins/Lavender/effect_popping.png        |  Bin 0 -> 3089 bytes
 .../share/skins/Lavender/effect_slapping.png       |  Bin 0 -> 3181 bytes
 .../share/skins/Lavender/effect_slide.png          |  Bin 0 -> 3206 bytes
 .../share/skins/Lavender/effect_staccato.png       |  Bin 0 -> 3060 bytes
 .../share/skins/Lavender/effect_tapping.png        |  Bin 0 -> 3072 bytes
 .../share/skins/Lavender/effect_tremolo_bar.png    |  Bin 0 -> 3247 bytes
 .../skins/Lavender/effect_tremolo_picking.png      |  Bin 0 -> 3316 bytes
 .../share/skins/Lavender/effect_trill.png          |  Bin 0 -> 3261 bytes
 .../share/skins/Lavender/effect_vibrato.png        |  Bin 0 -> 3033 bytes
 .../share/skins/Lavender/firstfret.png             |  Bin 0 -> 3247 bytes
 .../platform-all/share/skins/Lavender/fret.png     |  Bin 0 -> 930 bytes
 .../share/skins/Lavender/fretboard.png             |  Bin 0 -> 3644 bytes
 .../platform-all/share/skins/Lavender/grace.png    |  Bin 0 -> 3345 bytes
 .../share/skins/Lavender/icon-16x16.png            |  Bin 0 -> 3617 bytes
 .../share/skins/Lavender/icon-24x24.png            |  Bin 0 -> 4410 bytes
 .../share/skins/Lavender/icon-32x32.png            |  Bin 0 -> 5350 bytes
 .../share/skins/Lavender/icon-48x48.png            |  Bin 0 -> 7501 bytes
 .../share/skins/Lavender/icon-64x64.png            |  Bin 0 -> 9943 bytes
 .../share/skins/Lavender/icon-96x96.png            |  Bin 0 -> 15565 bytes
 .../platform-all/share/skins/Lavender/icon.icns    |  Bin 0 -> 229344 bytes
 .../platform-all/share/skins/Lavender/icon.ico     |  Bin 0 -> 72566 bytes
 .../platform-all/share/skins/Lavender/icon.png     |  Bin 0 -> 15565 bytes
 .../share/skins/Lavender/layout_compact.png        |  Bin 0 -> 3447 bytes
 .../share/skins/Lavender/layout_linear.png         |  Bin 0 -> 3497 bytes
 .../share/skins/Lavender/layout_multitrack.png     |  Bin 0 -> 3589 bytes
 .../share/skins/Lavender/layout_page.png           |  Bin 0 -> 3893 bytes
 .../share/skins/Lavender/layout_score.png          |  Bin 0 -> 3404 bytes
 .../platform-all/share/skins/Lavender/logo.png     |  Bin 0 -> 28531 bytes
 .../share/skins/Lavender/marker_add.png            |  Bin 0 -> 3719 bytes
 .../share/skins/Lavender/marker_first.png          |  Bin 0 -> 3748 bytes
 .../share/skins/Lavender/marker_last.png           |  Bin 0 -> 3767 bytes
 .../share/skins/Lavender/marker_list.png           |  Bin 0 -> 3657 bytes
 .../share/skins/Lavender/marker_next.png           |  Bin 0 -> 3727 bytes
 .../share/skins/Lavender/marker_previous.png       |  Bin 0 -> 3711 bytes
 .../share/skins/Lavender/marker_remove.png         |  Bin 0 -> 3701 bytes
 .../platform-all/share/skins/Lavender/mixer.png    |  Bin 0 -> 3876 bytes
 .../platform-all/share/skins/Lavender/new.png      |  Bin 0 -> 3361 bytes
 .../platform-all/share/skins/Lavender/open.png     |  Bin 0 -> 3827 bytes
 .../share/skins/Lavender/openrepeat.png            |  Bin 0 -> 3169 bytes
 .../share/skins/Lavender/option_language.png       |  Bin 0 -> 9221 bytes
 .../share/skins/Lavender/option_skin.png           |  Bin 0 -> 6233 bytes
 .../share/skins/Lavender/option_sound.png          |  Bin 0 -> 3891 bytes
 .../share/skins/Lavender/option_style.png          |  Bin 0 -> 4533 bytes
 .../share/skins/Lavender/option_toolbars.png       |  Bin 0 -> 5199 bytes
 .../share/skins/Lavender/option_view.png           |  Bin 0 -> 9155 bytes
 .../share/skins/Lavender/print-preview.png         |  Bin 0 -> 3650 bytes
 .../platform-all/share/skins/Lavender/print.png    |  Bin 0 -> 3610 bytes
 .../share/skins/Lavender/repeat_alternative.png    |  Bin 0 -> 3039 bytes
 .../platform-all/share/skins/Lavender/save-as.png  |  Bin 0 -> 3806 bytes
 .../platform-all/share/skins/Lavender/save.png     |  Bin 0 -> 3623 bytes
 .../platform-all/share/skins/Lavender/settings.png |  Bin 0 -> 3629 bytes
 .../share/skins/Lavender/skin-preview.png          |  Bin 0 -> 84322 bytes
 .../share/skins/Lavender/skin.properties           |    6 +
 .../share/skins/Lavender/song_properties.png       |  Bin 0 -> 3549 bytes
 .../platform-all/share/skins/Lavender/splash.png   |  Bin 0 -> 150661 bytes
 .../platform-all/share/skins/Lavender/tempo.png    |  Bin 0 -> 2920 bytes
 .../share/skins/Lavender/tempoicon.png             |  Bin 0 -> 3756 bytes
 .../platform-all/share/skins/Lavender/tgdoc.icns   |  Bin 0 -> 48080 bytes
 .../platform-all/share/skins/Lavender/tiednote.png |  Bin 0 -> 3109 bytes
 .../share/skins/Lavender/timesignature.png         |  Bin 0 -> 3335 bytes
 .../share/skins/Lavender/track_add.png             |  Bin 0 -> 3733 bytes
 .../share/skins/Lavender/track_remove.png          |  Bin 0 -> 3598 bytes
 .../share/skins/Lavender/transport.png             |  Bin 0 -> 3383 bytes
 .../share/skins/Lavender/transport_first_1.png     |  Bin 0 -> 4353 bytes
 .../share/skins/Lavender/transport_first_2.png     |  Bin 0 -> 4353 bytes
 .../skins/Lavender/transport_icon_first_1.png      |  Bin 0 -> 3173 bytes
 .../skins/Lavender/transport_icon_first_2.png      |  Bin 0 -> 3173 bytes
 .../share/skins/Lavender/transport_icon_last_1.png |  Bin 0 -> 3168 bytes
 .../share/skins/Lavender/transport_icon_last_2.png |  Bin 0 -> 3177 bytes
 .../share/skins/Lavender/transport_icon_next_1.png |  Bin 0 -> 3280 bytes
 .../share/skins/Lavender/transport_icon_next_2.png |  Bin 0 -> 3280 bytes
 .../share/skins/Lavender/transport_icon_pause.png  |  Bin 0 -> 3015 bytes
 .../share/skins/Lavender/transport_icon_play_1.png |  Bin 0 -> 3346 bytes
 .../share/skins/Lavender/transport_icon_play_2.png |  Bin 0 -> 3346 bytes
 .../skins/Lavender/transport_icon_previous_1.png   |  Bin 0 -> 3290 bytes
 .../skins/Lavender/transport_icon_previous_2.png   |  Bin 0 -> 3290 bytes
 .../share/skins/Lavender/transport_icon_stop_1.png |  Bin 0 -> 2966 bytes
 .../share/skins/Lavender/transport_icon_stop_2.png |  Bin 0 -> 2966 bytes
 .../share/skins/Lavender/transport_last_1.png      |  Bin 0 -> 4359 bytes
 .../share/skins/Lavender/transport_last_2.png      |  Bin 0 -> 4359 bytes
 .../share/skins/Lavender/transport_metronome.png   |  Bin 0 -> 3685 bytes
 .../share/skins/Lavender/transport_mode.png        |  Bin 0 -> 4022 bytes
 .../share/skins/Lavender/transport_next_1.png      |  Bin 0 -> 3975 bytes
 .../share/skins/Lavender/transport_next_2.png      |  Bin 0 -> 3975 bytes
 .../share/skins/Lavender/transport_pause.png       |  Bin 0 -> 3198 bytes
 .../share/skins/Lavender/transport_play_1.png      |  Bin 0 -> 4042 bytes
 .../share/skins/Lavender/transport_play_2.png      |  Bin 0 -> 4042 bytes
 .../share/skins/Lavender/transport_previous_1.png  |  Bin 0 -> 3952 bytes
 .../share/skins/Lavender/transport_previous_2.png  |  Bin 0 -> 3952 bytes
 .../share/skins/Lavender/transport_stop_1.png      |  Bin 0 -> 3065 bytes
 .../share/skins/Lavender/transport_stop_2.png      |  Bin 0 -> 3065 bytes
 .../platform-all/share/skins/Oxygen/1.png          |  Bin 0 -> 3086 bytes
 .../platform-all/share/skins/Oxygen/16.png         |  Bin 0 -> 3290 bytes
 .../platform-all/share/skins/Oxygen/2.png          |  Bin 0 -> 3032 bytes
 .../platform-all/share/skins/Oxygen/32.png         |  Bin 0 -> 3277 bytes
 .../platform-all/share/skins/Oxygen/4.png          |  Bin 0 -> 3027 bytes
 .../platform-all/share/skins/Oxygen/64.png         |  Bin 0 -> 3203 bytes
 .../platform-all/share/skins/Oxygen/8.png          |  Bin 0 -> 3268 bytes
 .../platform-all/share/skins/Oxygen/README         |    9 +
 .../share/skins/Oxygen/about_authors.png           |  Bin 0 -> 25310 bytes
 .../share/skins/Oxygen/about_description.png       |  Bin 0 -> 9155 bytes
 .../share/skins/Oxygen/about_license.png           |  Bin 0 -> 26088 bytes
 .../share/skins/Oxygen/browser_back.png            |  Bin 0 -> 929 bytes
 .../share/skins/Oxygen/browser_file.png            |  Bin 0 -> 881 bytes
 .../share/skins/Oxygen/browser_folder.png          |  Bin 0 -> 878 bytes
 .../share/skins/Oxygen/browser_new.png             |  Bin 0 -> 873 bytes
 .../share/skins/Oxygen/browser_refresh.png         |  Bin 0 -> 1283 bytes
 .../share/skins/Oxygen/browser_root.png            |  Bin 0 -> 935 bytes
 .../platform-all/share/skins/Oxygen/chord.png      |  Bin 0 -> 3645 bytes
 .../share/skins/Oxygen/closerepeat.png             |  Bin 0 -> 3171 bytes
 .../share/skins/Oxygen/division-type.png           |  Bin 0 -> 3623 bytes
 .../platform-all/share/skins/Oxygen/dotted.png     |  Bin 0 -> 3093 bytes
 .../share/skins/Oxygen/doubledotted.png            |  Bin 0 -> 3130 bytes
 .../platform-all/share/skins/Oxygen/dynamic_f.png  |  Bin 0 -> 3098 bytes
 .../platform-all/share/skins/Oxygen/dynamic_ff.png |  Bin 0 -> 3328 bytes
 .../share/skins/Oxygen/dynamic_fff.png             |  Bin 0 -> 3568 bytes
 .../platform-all/share/skins/Oxygen/dynamic_mf.png |  Bin 0 -> 3295 bytes
 .../platform-all/share/skins/Oxygen/dynamic_mp.png |  Bin 0 -> 3193 bytes
 .../platform-all/share/skins/Oxygen/dynamic_p.png  |  Bin 0 -> 3011 bytes
 .../platform-all/share/skins/Oxygen/dynamic_pp.png |  Bin 0 -> 3161 bytes
 .../share/skins/Oxygen/dynamic_ppp.png             |  Bin 0 -> 3327 bytes
 .../share/skins/Oxygen/edit_mode_edition.png       |  Bin 0 -> 3567 bytes
 .../skins/Oxygen/edit_mode_edition_no_natural.png  |  Bin 0 -> 3811 bytes
 .../share/skins/Oxygen/edit_mode_selection.png     |  Bin 0 -> 3523 bytes
 .../platform-all/share/skins/Oxygen/edit_redo.png  |  Bin 0 -> 1245 bytes
 .../platform-all/share/skins/Oxygen/edit_undo.png  |  Bin 0 -> 1220 bytes
 .../share/skins/Oxygen/edit_voice_1.png            |  Bin 0 -> 3273 bytes
 .../share/skins/Oxygen/edit_voice_2.png            |  Bin 0 -> 3309 bytes
 .../share/skins/Oxygen/effect_accentuated.png      |  Bin 0 -> 3141 bytes
 .../share/skins/Oxygen/effect_bend.png             |  Bin 0 -> 3278 bytes
 .../share/skins/Oxygen/effect_dead.png             |  Bin 0 -> 3329 bytes
 .../share/skins/Oxygen/effect_fade_in.png          |  Bin 0 -> 3124 bytes
 .../share/skins/Oxygen/effect_ghost.png            |  Bin 0 -> 3277 bytes
 .../share/skins/Oxygen/effect_grace.png            |  Bin 0 -> 3345 bytes
 .../share/skins/Oxygen/effect_hammer.png           |  Bin 0 -> 3418 bytes
 .../share/skins/Oxygen/effect_harmonic.png         |  Bin 0 -> 3492 bytes
 .../skins/Oxygen/effect_heavy_accentuated.png      |  Bin 0 -> 3219 bytes
 .../share/skins/Oxygen/effect_palm_mute.png        |  Bin 0 -> 3458 bytes
 .../share/skins/Oxygen/effect_popping.png          |  Bin 0 -> 3089 bytes
 .../share/skins/Oxygen/effect_slapping.png         |  Bin 0 -> 3181 bytes
 .../share/skins/Oxygen/effect_slide.png            |  Bin 0 -> 3206 bytes
 .../share/skins/Oxygen/effect_staccato.png         |  Bin 0 -> 3060 bytes
 .../share/skins/Oxygen/effect_tapping.png          |  Bin 0 -> 3072 bytes
 .../share/skins/Oxygen/effect_tremolo_bar.png      |  Bin 0 -> 3247 bytes
 .../share/skins/Oxygen/effect_tremolo_picking.png  |  Bin 0 -> 3316 bytes
 .../share/skins/Oxygen/effect_trill.png            |  Bin 0 -> 3261 bytes
 .../share/skins/Oxygen/effect_vibrato.png          |  Bin 0 -> 3033 bytes
 .../platform-all/share/skins/Oxygen/firstfret.png  |  Bin 0 -> 244 bytes
 .../platform-all/share/skins/Oxygen/fret.png       |  Bin 0 -> 258 bytes
 .../platform-all/share/skins/Oxygen/fretboard.png  |  Bin 0 -> 12066 bytes
 .../platform-all/share/skins/Oxygen/grace.png      |  Bin 0 -> 3345 bytes
 .../platform-all/share/skins/Oxygen/icon-16x16.png |  Bin 0 -> 3617 bytes
 .../platform-all/share/skins/Oxygen/icon-24x24.png |  Bin 0 -> 4410 bytes
 .../platform-all/share/skins/Oxygen/icon-32x32.png |  Bin 0 -> 5350 bytes
 .../platform-all/share/skins/Oxygen/icon-48x48.png |  Bin 0 -> 7501 bytes
 .../platform-all/share/skins/Oxygen/icon-64x64.png |  Bin 0 -> 9943 bytes
 .../platform-all/share/skins/Oxygen/icon-96x96.png |  Bin 0 -> 15565 bytes
 .../platform-all/share/skins/Oxygen/icon.icns      |  Bin 0 -> 229344 bytes
 .../platform-all/share/skins/Oxygen/icon.ico       |  Bin 0 -> 72566 bytes
 .../platform-all/share/skins/Oxygen/icon.png       |  Bin 0 -> 15565 bytes
 .../share/skins/Oxygen/layout_compact.png          |  Bin 0 -> 3447 bytes
 .../share/skins/Oxygen/layout_linear.png           |  Bin 0 -> 3497 bytes
 .../share/skins/Oxygen/layout_multitrack.png       |  Bin 0 -> 3589 bytes
 .../share/skins/Oxygen/layout_page.png             |  Bin 0 -> 3893 bytes
 .../share/skins/Oxygen/layout_score.png            |  Bin 0 -> 3404 bytes
 .../platform-all/share/skins/Oxygen/logo.png       |  Bin 0 -> 28531 bytes
 .../platform-all/share/skins/Oxygen/marker_add.png |  Bin 0 -> 1105 bytes
 .../share/skins/Oxygen/marker_first.png            |  Bin 0 -> 1154 bytes
 .../share/skins/Oxygen/marker_last.png             |  Bin 0 -> 1159 bytes
 .../share/skins/Oxygen/marker_list.png             |  Bin 0 -> 2557 bytes
 .../share/skins/Oxygen/marker_next.png             |  Bin 0 -> 1109 bytes
 .../share/skins/Oxygen/marker_previous.png         |  Bin 0 -> 1102 bytes
 .../share/skins/Oxygen/marker_remove.png           |  Bin 0 -> 1044 bytes
 .../platform-all/share/skins/Oxygen/mixer.png      |  Bin 0 -> 877 bytes
 .../platform-all/share/skins/Oxygen/new.png        |  Bin 0 -> 750 bytes
 .../platform-all/share/skins/Oxygen/open.png       |  Bin 0 -> 1125 bytes
 .../platform-all/share/skins/Oxygen/openrepeat.png |  Bin 0 -> 3169 bytes
 .../share/skins/Oxygen/option_language.png         |  Bin 0 -> 26684 bytes
 .../share/skins/Oxygen/option_skin.png             |  Bin 0 -> 25485 bytes
 .../share/skins/Oxygen/option_sound.png            |  Bin 0 -> 25781 bytes
 .../share/skins/Oxygen/option_style.png            |  Bin 0 -> 26166 bytes
 .../share/skins/Oxygen/option_toolbars.png         |  Bin 0 -> 24836 bytes
 .../share/skins/Oxygen/option_view.png             |  Bin 0 -> 9155 bytes
 .../share/skins/Oxygen/print-preview.png           |  Bin 0 -> 1386 bytes
 .../platform-all/share/skins/Oxygen/print.png      |  Bin 0 -> 880 bytes
 .../share/skins/Oxygen/repeat_alternative.png      |  Bin 0 -> 3039 bytes
 .../platform-all/share/skins/Oxygen/save-as.png    |  Bin 0 -> 1233 bytes
 .../platform-all/share/skins/Oxygen/save.png       |  Bin 0 -> 798 bytes
 .../platform-all/share/skins/Oxygen/settings.png   |  Bin 0 -> 1101 bytes
 .../share/skins/Oxygen/skin-preview.png            |  Bin 0 -> 98238 bytes
 .../share/skins/Oxygen/skin.properties             |    6 +
 .../share/skins/Oxygen/song_properties.png         |  Bin 0 -> 924 bytes
 .../platform-all/share/skins/Oxygen/splash.png     |  Bin 0 -> 150661 bytes
 .../platform-all/share/skins/Oxygen/tempo.png      |  Bin 0 -> 2920 bytes
 .../platform-all/share/skins/Oxygen/tempoicon.png  |  Bin 0 -> 3608 bytes
 .../platform-all/share/skins/Oxygen/tgdoc.icns     |  Bin 0 -> 48080 bytes
 .../platform-all/share/skins/Oxygen/tiednote.png   |  Bin 0 -> 3109 bytes
 .../share/skins/Oxygen/timesignature.png           |  Bin 0 -> 3335 bytes
 .../platform-all/share/skins/Oxygen/track_add.png  |  Bin 0 -> 3707 bytes
 .../share/skins/Oxygen/track_remove.png            |  Bin 0 -> 3579 bytes
 .../platform-all/share/skins/Oxygen/transport.png  |  Bin 0 -> 1444 bytes
 .../share/skins/Oxygen/transport_first_1.png       |  Bin 0 -> 16204 bytes
 .../share/skins/Oxygen/transport_first_2.png       |  Bin 0 -> 16204 bytes
 .../share/skins/Oxygen/transport_icon_first_1.png  |  Bin 0 -> 753 bytes
 .../share/skins/Oxygen/transport_icon_first_2.png  |  Bin 0 -> 753 bytes
 .../share/skins/Oxygen/transport_icon_last_1.png   |  Bin 0 -> 752 bytes
 .../share/skins/Oxygen/transport_icon_last_2.png   |  Bin 0 -> 752 bytes
 .../share/skins/Oxygen/transport_icon_next_1.png   |  Bin 0 -> 748 bytes
 .../share/skins/Oxygen/transport_icon_next_2.png   |  Bin 0 -> 748 bytes
 .../share/skins/Oxygen/transport_icon_pause.png    |  Bin 0 -> 721 bytes
 .../share/skins/Oxygen/transport_icon_play_1.png   |  Bin 0 -> 736 bytes
 .../share/skins/Oxygen/transport_icon_play_2.png   |  Bin 0 -> 736 bytes
 .../skins/Oxygen/transport_icon_previous_1.png     |  Bin 0 -> 749 bytes
 .../skins/Oxygen/transport_icon_previous_2.png     |  Bin 0 -> 749 bytes
 .../share/skins/Oxygen/transport_icon_stop_1.png   |  Bin 0 -> 736 bytes
 .../share/skins/Oxygen/transport_icon_stop_2.png   |  Bin 0 -> 736 bytes
 .../share/skins/Oxygen/transport_last_1.png        |  Bin 0 -> 16210 bytes
 .../share/skins/Oxygen/transport_last_2.png        |  Bin 0 -> 16210 bytes
 .../share/skins/Oxygen/transport_metronome.png     |  Bin 0 -> 3685 bytes
 .../share/skins/Oxygen/transport_mode.png          |  Bin 0 -> 4022 bytes
 .../share/skins/Oxygen/transport_next_1.png        |  Bin 0 -> 16198 bytes
 .../share/skins/Oxygen/transport_next_2.png        |  Bin 0 -> 16198 bytes
 .../share/skins/Oxygen/transport_pause.png         |  Bin 0 -> 16040 bytes
 .../share/skins/Oxygen/transport_play_1.png        |  Bin 0 -> 16032 bytes
 .../share/skins/Oxygen/transport_play_2.png        |  Bin 0 -> 16032 bytes
 .../share/skins/Oxygen/transport_previous_1.png    |  Bin 0 -> 16208 bytes
 .../share/skins/Oxygen/transport_previous_2.png    |  Bin 0 -> 16208 bytes
 .../share/skins/Oxygen/transport_stop_1.png        |  Bin 0 -> 15995 bytes
 .../share/skins/Oxygen/transport_stop_2.png        |  Bin 0 -> 15995 bytes
 .../platform-all/share/skins/blue_serious/1.png    |  Bin 0 -> 434 bytes
 .../platform-all/share/skins/blue_serious/16.png   |  Bin 0 -> 489 bytes
 .../platform-all/share/skins/blue_serious/2.png    |  Bin 0 -> 429 bytes
 .../platform-all/share/skins/blue_serious/32.png   |  Bin 0 -> 544 bytes
 .../platform-all/share/skins/blue_serious/4.png    |  Bin 0 -> 369 bytes
 .../platform-all/share/skins/blue_serious/64.png   |  Bin 0 -> 521 bytes
 .../platform-all/share/skins/blue_serious/8.png    |  Bin 0 -> 451 bytes
 .../share/skins/blue_serious/about_authors.png     |  Bin 0 -> 2582 bytes
 .../share/skins/blue_serious/about_description.png |  Bin 0 -> 951 bytes
 .../share/skins/blue_serious/about_license.png     |  Bin 0 -> 523 bytes
 .../share/skins/blue_serious/browser_back.png      |  Bin 0 -> 914 bytes
 .../share/skins/blue_serious/browser_file.png      |  Bin 0 -> 517 bytes
 .../share/skins/blue_serious/browser_folder.png    |  Bin 0 -> 679 bytes
 .../share/skins/blue_serious/browser_new.png       |  Bin 0 -> 682 bytes
 .../share/skins/blue_serious/browser_refresh.png   |  Bin 0 -> 1380 bytes
 .../share/skins/blue_serious/browser_root.png      |  Bin 0 -> 914 bytes
 .../share/skins/blue_serious/chord.png             |  Bin 0 -> 601 bytes
 .../share/skins/blue_serious/closerepeat.png       |  Bin 0 -> 403 bytes
 .../share/skins/blue_serious/division-type.png     |  Bin 0 -> 576 bytes
 .../share/skins/blue_serious/dotted.png            |  Bin 0 -> 417 bytes
 .../share/skins/blue_serious/doubledotted.png      |  Bin 0 -> 444 bytes
 .../share/skins/blue_serious/dynamic_f.png         |  Bin 0 -> 358 bytes
 .../share/skins/blue_serious/dynamic_ff.png        |  Bin 0 -> 461 bytes
 .../share/skins/blue_serious/dynamic_fff.png       |  Bin 0 -> 546 bytes
 .../share/skins/blue_serious/dynamic_mf.png        |  Bin 0 -> 458 bytes
 .../share/skins/blue_serious/dynamic_mp.png        |  Bin 0 -> 395 bytes
 .../share/skins/blue_serious/dynamic_p.png         |  Bin 0 -> 313 bytes
 .../share/skins/blue_serious/dynamic_pp.png        |  Bin 0 -> 377 bytes
 .../share/skins/blue_serious/dynamic_ppp.png       |  Bin 0 -> 457 bytes
 .../share/skins/blue_serious/edit_mode_edition.png |  Bin 0 -> 773 bytes
 .../blue_serious/edit_mode_edition_no_natural.png  |  Bin 0 -> 552 bytes
 .../skins/blue_serious/edit_mode_selection.png     |  Bin 0 -> 1133 bytes
 .../share/skins/blue_serious/edit_redo.png         |  Bin 0 -> 1018 bytes
 .../share/skins/blue_serious/edit_undo.png         |  Bin 0 -> 1024 bytes
 .../share/skins/blue_serious/edit_voice_1.png      |  Bin 0 -> 280 bytes
 .../share/skins/blue_serious/edit_voice_2.png      |  Bin 0 -> 359 bytes
 .../skins/blue_serious/effect_accentuated.png      |  Bin 0 -> 348 bytes
 .../share/skins/blue_serious/effect_bend.png       |  Bin 0 -> 426 bytes
 .../share/skins/blue_serious/effect_dead.png       |  Bin 0 -> 414 bytes
 .../share/skins/blue_serious/effect_fade_in.png    |  Bin 0 -> 331 bytes
 .../share/skins/blue_serious/effect_ghost.png      |  Bin 0 -> 413 bytes
 .../share/skins/blue_serious/effect_grace.png      |  Bin 0 -> 448 bytes
 .../share/skins/blue_serious/effect_hammer.png     |  Bin 0 -> 474 bytes
 .../share/skins/blue_serious/effect_harmonic.png   |  Bin 0 -> 488 bytes
 .../blue_serious/effect_heavy_accentuated.png      |  Bin 0 -> 379 bytes
 .../share/skins/blue_serious/effect_palm_mute.png  |  Bin 0 -> 498 bytes
 .../share/skins/blue_serious/effect_popping.png    |  Bin 0 -> 318 bytes
 .../share/skins/blue_serious/effect_slapping.png   |  Bin 0 -> 375 bytes
 .../share/skins/blue_serious/effect_slide.png      |  Bin 0 -> 396 bytes
 .../share/skins/blue_serious/effect_staccato.png   |  Bin 0 -> 318 bytes
 .../share/skins/blue_serious/effect_tapping.png    |  Bin 0 -> 305 bytes
 .../skins/blue_serious/effect_tremolo_bar.png      |  Bin 0 -> 426 bytes
 .../skins/blue_serious/effect_tremolo_picking.png  |  Bin 0 -> 437 bytes
 .../share/skins/blue_serious/effect_trill.png      |  Bin 0 -> 425 bytes
 .../share/skins/blue_serious/effect_vibrato.png    |  Bin 0 -> 286 bytes
 .../share/skins/blue_serious/firstfret.png         |  Bin 0 -> 3795 bytes
 .../platform-all/share/skins/blue_serious/fret.png |  Bin 0 -> 1582 bytes
 .../share/skins/blue_serious/fretboard.png         |  Bin 0 -> 1007 bytes
 .../share/skins/blue_serious/grace.png             |  Bin 0 -> 396 bytes
 .../share/skins/blue_serious/icon-16x16.png        |  Bin 0 -> 995 bytes
 .../share/skins/blue_serious/icon-24x24.png        |  Bin 0 -> 1734 bytes
 .../share/skins/blue_serious/icon-32x32.png        |  Bin 0 -> 2641 bytes
 .../share/skins/blue_serious/icon-48x48.png        |  Bin 0 -> 4628 bytes
 .../share/skins/blue_serious/icon-64x64.png        |  Bin 0 -> 7129 bytes
 .../share/skins/blue_serious/icon-96x96.png        |  Bin 0 -> 13183 bytes
 .../share/skins/blue_serious/icon.icns             |  Bin 0 -> 50546 bytes
 .../platform-all/share/skins/blue_serious/icon.ico |  Bin 0 -> 72170 bytes
 .../platform-all/share/skins/blue_serious/icon.png |  Bin 0 -> 7129 bytes
 .../share/skins/blue_serious/layout_compact.png    |  Bin 0 -> 535 bytes
 .../share/skins/blue_serious/layout_linear.png     |  Bin 0 -> 389 bytes
 .../share/skins/blue_serious/layout_multitrack.png |  Bin 0 -> 676 bytes
 .../share/skins/blue_serious/layout_page.png       |  Bin 0 -> 607 bytes
 .../share/skins/blue_serious/layout_score.png      |  Bin 0 -> 994 bytes
 .../platform-all/share/skins/blue_serious/logo.png |  Bin 0 -> 28408 bytes
 .../share/skins/blue_serious/marker_add.png        |  Bin 0 -> 540 bytes
 .../share/skins/blue_serious/marker_first.png      |  Bin 0 -> 851 bytes
 .../share/skins/blue_serious/marker_last.png       |  Bin 0 -> 843 bytes
 .../share/skins/blue_serious/marker_list.png       |  Bin 0 -> 582 bytes
 .../share/skins/blue_serious/marker_next.png       |  Bin 0 -> 796 bytes
 .../share/skins/blue_serious/marker_previous.png   |  Bin 0 -> 746 bytes
 .../share/skins/blue_serious/marker_remove.png     |  Bin 0 -> 470 bytes
 .../share/skins/blue_serious/mixer.png             |  Bin 0 -> 756 bytes
 .../platform-all/share/skins/blue_serious/new.png  |  Bin 0 -> 565 bytes
 .../platform-all/share/skins/blue_serious/open.png |  Bin 0 -> 933 bytes
 .../share/skins/blue_serious/openrepeat.png        |  Bin 0 -> 380 bytes
 .../share/skins/blue_serious/option_language.png   |  Bin 0 -> 2022 bytes
 .../share/skins/blue_serious/option_skin.png       |  Bin 0 -> 3750 bytes
 .../share/skins/blue_serious/option_sound.png      |  Bin 0 -> 5413 bytes
 .../share/skins/blue_serious/option_style.png      |  Bin 0 -> 1815 bytes
 .../share/skins/blue_serious/option_toolbars.png   |  Bin 0 -> 2766 bytes
 .../share/skins/blue_serious/option_view.png       |  Bin 0 -> 1464 bytes
 .../share/skins/blue_serious/print-preview.png     |  Bin 0 -> 1347 bytes
 .../share/skins/blue_serious/print.png             |  Bin 0 -> 1128 bytes
 .../skins/blue_serious/repeat_alternative.png      |  Bin 0 -> 302 bytes
 .../share/skins/blue_serious/save-as.png           |  Bin 0 -> 1095 bytes
 .../platform-all/share/skins/blue_serious/save.png |  Bin 0 -> 794 bytes
 .../share/skins/blue_serious/settings.png          |  Bin 0 -> 1027 bytes
 .../share/skins/blue_serious/skin-preview.png      |  Bin 0 -> 7554 bytes
 .../share/skins/blue_serious/skin.properties       |    6 +
 .../platform-all/share/skins/blue_serious/skin.svg | 8639 +++++++++++++++++++
 .../share/skins/blue_serious/song_properties.png   |  Bin 0 -> 755 bytes
 .../share/skins/blue_serious/splash.png            |  Bin 0 -> 64139 bytes
 .../share/skins/blue_serious/tempo.png             |  Bin 0 -> 160 bytes
 .../share/skins/blue_serious/tempoicon.png         |  Bin 0 -> 585 bytes
 .../share/skins/blue_serious/tiednote.png          |  Bin 0 -> 410 bytes
 .../share/skins/blue_serious/timesignature.png     |  Bin 0 -> 570 bytes
 .../share/skins/blue_serious/track_add.png         |  Bin 0 -> 839 bytes
 .../share/skins/blue_serious/track_remove.png      |  Bin 0 -> 802 bytes
 .../share/skins/blue_serious/transport.png         |  Bin 0 -> 767 bytes
 .../share/skins/blue_serious/transport_first_1.png |  Bin 0 -> 1565 bytes
 .../share/skins/blue_serious/transport_first_2.png |  Bin 0 -> 1396 bytes
 .../skins/blue_serious/transport_icon_first_1.png  |  Bin 0 -> 1020 bytes
 .../skins/blue_serious/transport_icon_first_2.png  |  Bin 0 -> 926 bytes
 .../skins/blue_serious/transport_icon_last_1.png   |  Bin 0 -> 1037 bytes
 .../skins/blue_serious/transport_icon_last_2.png   |  Bin 0 -> 972 bytes
 .../skins/blue_serious/transport_icon_next_1.png   |  Bin 0 -> 891 bytes
 .../skins/blue_serious/transport_icon_next_2.png   |  Bin 0 -> 850 bytes
 .../skins/blue_serious/transport_icon_pause.png    |  Bin 0 -> 769 bytes
 .../skins/blue_serious/transport_icon_play_1.png   |  Bin 0 -> 814 bytes
 .../skins/blue_serious/transport_icon_play_2.png   |  Bin 0 -> 762 bytes
 .../blue_serious/transport_icon_previous_1.png     |  Bin 0 -> 906 bytes
 .../blue_serious/transport_icon_previous_2.png     |  Bin 0 -> 865 bytes
 .../skins/blue_serious/transport_icon_stop_1.png   |  Bin 0 -> 753 bytes
 .../skins/blue_serious/transport_icon_stop_2.png   |  Bin 0 -> 653 bytes
 .../share/skins/blue_serious/transport_last_1.png  |  Bin 0 -> 1621 bytes
 .../share/skins/blue_serious/transport_last_2.png  |  Bin 0 -> 1476 bytes
 .../skins/blue_serious/transport_metronome.png     |  Bin 0 -> 967 bytes
 .../share/skins/blue_serious/transport_mode.png    |  Bin 0 -> 1674 bytes
 .../share/skins/blue_serious/transport_next_1.png  |  Bin 0 -> 1409 bytes
 .../share/skins/blue_serious/transport_next_2.png  |  Bin 0 -> 1298 bytes
 .../share/skins/blue_serious/transport_pause.png   |  Bin 0 -> 1004 bytes
 .../share/skins/blue_serious/transport_play_1.png  |  Bin 0 -> 1260 bytes
 .../share/skins/blue_serious/transport_play_2.png  |  Bin 0 -> 1126 bytes
 .../skins/blue_serious/transport_previous_1.png    |  Bin 0 -> 1397 bytes
 .../skins/blue_serious/transport_previous_2.png    |  Bin 0 -> 1307 bytes
 .../share/skins/blue_serious/transport_stop_1.png  |  Bin 0 -> 1113 bytes
 .../share/skins/blue_serious/transport_stop_2.png  |  Bin 0 -> 930 bytes
 .../share/skins/blue_serious/tupleto.png           |  Bin 0 -> 576 bytes
 .../platform-all/share/skins/ersplus/1.png         |  Bin 0 -> 434 bytes
 .../platform-all/share/skins/ersplus/16.png        |  Bin 0 -> 489 bytes
 .../platform-all/share/skins/ersplus/2.png         |  Bin 0 -> 429 bytes
 .../platform-all/share/skins/ersplus/32.png        |  Bin 0 -> 544 bytes
 .../platform-all/share/skins/ersplus/4.png         |  Bin 0 -> 369 bytes
 .../platform-all/share/skins/ersplus/64.png        |  Bin 0 -> 521 bytes
 .../platform-all/share/skins/ersplus/8.png         |  Bin 0 -> 451 bytes
 .../share/skins/ersplus/about_authors.png          |  Bin 0 -> 9849 bytes
 .../share/skins/ersplus/about_description.png      |  Bin 0 -> 7947 bytes
 .../share/skins/ersplus/about_license.png          |  Bin 0 -> 10903 bytes
 .../share/skins/ersplus/browser_back.png           |  Bin 0 -> 914 bytes
 .../share/skins/ersplus/browser_file.png           |  Bin 0 -> 517 bytes
 .../share/skins/ersplus/browser_folder.png         |  Bin 0 -> 679 bytes
 .../share/skins/ersplus/browser_new.png            |  Bin 0 -> 682 bytes
 .../share/skins/ersplus/browser_refresh.png        |  Bin 0 -> 1380 bytes
 .../share/skins/ersplus/browser_root.png           |  Bin 0 -> 914 bytes
 .../platform-all/share/skins/ersplus/chord.png     |  Bin 0 -> 619 bytes
 .../share/skins/ersplus/closerepeat.png            |  Bin 0 -> 403 bytes
 .../share/skins/ersplus/division-type.png          |  Bin 0 -> 576 bytes
 .../platform-all/share/skins/ersplus/dotted.png    |  Bin 0 -> 417 bytes
 .../share/skins/ersplus/doubledotted.png           |  Bin 0 -> 444 bytes
 .../platform-all/share/skins/ersplus/dynamic_f.png |  Bin 0 -> 358 bytes
 .../share/skins/ersplus/dynamic_ff.png             |  Bin 0 -> 461 bytes
 .../share/skins/ersplus/dynamic_fff.png            |  Bin 0 -> 546 bytes
 .../share/skins/ersplus/dynamic_mf.png             |  Bin 0 -> 458 bytes
 .../share/skins/ersplus/dynamic_mp.png             |  Bin 0 -> 395 bytes
 .../platform-all/share/skins/ersplus/dynamic_p.png |  Bin 0 -> 313 bytes
 .../share/skins/ersplus/dynamic_pp.png             |  Bin 0 -> 377 bytes
 .../share/skins/ersplus/dynamic_ppp.png            |  Bin 0 -> 457 bytes
 .../share/skins/ersplus/edit_mode_edition.png      |  Bin 0 -> 733 bytes
 .../skins/ersplus/edit_mode_edition_no_natural.png |  Bin 0 -> 552 bytes
 .../share/skins/ersplus/edit_mode_selection.png    |  Bin 0 -> 1092 bytes
 .../platform-all/share/skins/ersplus/edit_redo.png |  Bin 0 -> 1133 bytes
 .../platform-all/share/skins/ersplus/edit_undo.png |  Bin 0 -> 1261 bytes
 .../share/skins/ersplus/edit_voice_1.png           |  Bin 0 -> 280 bytes
 .../share/skins/ersplus/edit_voice_2.png           |  Bin 0 -> 359 bytes
 .../share/skins/ersplus/effect_accentuated.png     |  Bin 0 -> 348 bytes
 .../share/skins/ersplus/effect_bend.png            |  Bin 0 -> 426 bytes
 .../share/skins/ersplus/effect_dead.png            |  Bin 0 -> 414 bytes
 .../share/skins/ersplus/effect_fade_in.png         |  Bin 0 -> 331 bytes
 .../share/skins/ersplus/effect_ghost.png           |  Bin 0 -> 413 bytes
 .../share/skins/ersplus/effect_grace.png           |  Bin 0 -> 448 bytes
 .../share/skins/ersplus/effect_hammer.png          |  Bin 0 -> 474 bytes
 .../share/skins/ersplus/effect_harmonic.png        |  Bin 0 -> 488 bytes
 .../skins/ersplus/effect_heavy_accentuated.png     |  Bin 0 -> 379 bytes
 .../share/skins/ersplus/effect_palm_mute.png       |  Bin 0 -> 498 bytes
 .../share/skins/ersplus/effect_popping.png         |  Bin 0 -> 318 bytes
 .../share/skins/ersplus/effect_slapping.png        |  Bin 0 -> 375 bytes
 .../share/skins/ersplus/effect_slide.png           |  Bin 0 -> 396 bytes
 .../share/skins/ersplus/effect_staccato.png        |  Bin 0 -> 318 bytes
 .../share/skins/ersplus/effect_tapping.png         |  Bin 0 -> 305 bytes
 .../share/skins/ersplus/effect_tremolo_bar.png     |  Bin 0 -> 426 bytes
 .../share/skins/ersplus/effect_tremolo_picking.png |  Bin 0 -> 437 bytes
 .../share/skins/ersplus/effect_trill.png           |  Bin 0 -> 425 bytes
 .../share/skins/ersplus/effect_vibrato.png         |  Bin 0 -> 286 bytes
 .../platform-all/share/skins/ersplus/firstfret.png |  Bin 0 -> 3795 bytes
 .../platform-all/share/skins/ersplus/fret.png      |  Bin 0 -> 1582 bytes
 .../platform-all/share/skins/ersplus/fretboard.png |  Bin 0 -> 1080 bytes
 .../platform-all/share/skins/ersplus/grace.png     |  Bin 0 -> 396 bytes
 .../share/skins/ersplus/icon-16x16.png             |  Bin 0 -> 760 bytes
 .../share/skins/ersplus/icon-24x24.png             |  Bin 0 -> 1358 bytes
 .../share/skins/ersplus/icon-32x32.png             |  Bin 0 -> 1919 bytes
 .../share/skins/ersplus/icon-48x48.png             |  Bin 0 -> 3329 bytes
 .../share/skins/ersplus/icon-64x64.png             |  Bin 0 -> 4861 bytes
 .../share/skins/ersplus/icon-96x96.png             |  Bin 0 -> 8460 bytes
 .../platform-all/share/skins/ersplus/icon.icns     |  Bin 0 -> 50318 bytes
 .../platform-all/share/skins/ersplus/icon.ico      |  Bin 0 -> 72566 bytes
 .../platform-all/share/skins/ersplus/icon.png      |  Bin 0 -> 4861 bytes
 .../share/skins/ersplus/layout_compact.png         |  Bin 0 -> 535 bytes
 .../share/skins/ersplus/layout_linear.png          |  Bin 0 -> 1069 bytes
 .../share/skins/ersplus/layout_multitrack.png      |  Bin 0 -> 1350 bytes
 .../share/skins/ersplus/layout_page.png            |  Bin 0 -> 1031 bytes
 .../share/skins/ersplus/layout_score.png           |  Bin 0 -> 1130 bytes
 .../platform-all/share/skins/ersplus/logo.png      |  Bin 0 -> 28408 bytes
 .../share/skins/ersplus/marker_add.png             |  Bin 0 -> 878 bytes
 .../share/skins/ersplus/marker_first.png           |  Bin 0 -> 955 bytes
 .../share/skins/ersplus/marker_last.png            |  Bin 0 -> 837 bytes
 .../share/skins/ersplus/marker_list.png            |  Bin 0 -> 909 bytes
 .../share/skins/ersplus/marker_next.png            |  Bin 0 -> 906 bytes
 .../share/skins/ersplus/marker_previous.png        |  Bin 0 -> 818 bytes
 .../share/skins/ersplus/marker_remove.png          |  Bin 0 -> 960 bytes
 .../platform-all/share/skins/ersplus/mixer.png     |  Bin 0 -> 650 bytes
 .../platform-all/share/skins/ersplus/new.png       |  Bin 0 -> 682 bytes
 .../platform-all/share/skins/ersplus/open.png      |  Bin 0 -> 974 bytes
 .../share/skins/ersplus/openrepeat.png             |  Bin 0 -> 380 bytes
 .../share/skins/ersplus/option_language.png        |  Bin 0 -> 2504 bytes
 .../share/skins/ersplus/option_skin.png            |  Bin 0 -> 3750 bytes
 .../share/skins/ersplus/option_sound.png           |  Bin 0 -> 4486 bytes
 .../share/skins/ersplus/option_style.png           |  Bin 0 -> 4050 bytes
 .../share/skins/ersplus/option_toolbars.png        |  Bin 0 -> 2789 bytes
 .../share/skins/ersplus/option_view.png            |  Bin 0 -> 1468 bytes
 .../share/skins/ersplus/print-preview.png          |  Bin 0 -> 1504 bytes
 .../platform-all/share/skins/ersplus/print.png     |  Bin 0 -> 1165 bytes
 .../share/skins/ersplus/repeat_alternative.png     |  Bin 0 -> 302 bytes
 .../platform-all/share/skins/ersplus/save-as.png   |  Bin 0 -> 1208 bytes
 .../platform-all/share/skins/ersplus/save.png      |  Bin 0 -> 909 bytes
 .../platform-all/share/skins/ersplus/settings.png  |  Bin 0 -> 1000 bytes
 .../share/skins/ersplus/skin-preview.png           |  Bin 0 -> 59014 bytes
 .../share/skins/ersplus/skin.properties            |    6 +
 .../platform-all/share/skins/ersplus/skin.svg      | 8660 ++++++++++++++++++++
 .../share/skins/ersplus/song_properties.png        |  Bin 0 -> 1324 bytes
 .../platform-all/share/skins/ersplus/splash.png    |  Bin 0 -> 85187 bytes
 .../platform-all/share/skins/ersplus/tempo.png     |  Bin 0 -> 160 bytes
 .../platform-all/share/skins/ersplus/tempoicon.png |  Bin 0 -> 585 bytes
 .../platform-all/share/skins/ersplus/tiednote.png  |  Bin 0 -> 410 bytes
 .../share/skins/ersplus/timesignature.png          |  Bin 0 -> 609 bytes
 .../platform-all/share/skins/ersplus/track_add.png |  Bin 0 -> 1144 bytes
 .../share/skins/ersplus/track_remove.png           |  Bin 0 -> 1100 bytes
 .../platform-all/share/skins/ersplus/transport.png |  Bin 0 -> 1119 bytes
 .../share/skins/ersplus/transport_first_1.png      |  Bin 0 -> 2295 bytes
 .../share/skins/ersplus/transport_first_2.png      |  Bin 0 -> 2246 bytes
 .../share/skins/ersplus/transport_icon_first_1.png |  Bin 0 -> 811 bytes
 .../share/skins/ersplus/transport_icon_first_2.png |  Bin 0 -> 735 bytes
 .../share/skins/ersplus/transport_icon_last_1.png  |  Bin 0 -> 832 bytes
 .../share/skins/ersplus/transport_icon_last_2.png  |  Bin 0 -> 779 bytes
 .../share/skins/ersplus/transport_icon_next_1.png  |  Bin 0 -> 732 bytes
 .../share/skins/ersplus/transport_icon_next_2.png  |  Bin 0 -> 653 bytes
 .../share/skins/ersplus/transport_icon_pause.png   |  Bin 0 -> 602 bytes
 .../share/skins/ersplus/transport_icon_play_1.png  |  Bin 0 -> 678 bytes
 .../share/skins/ersplus/transport_icon_play_2.png  |  Bin 0 -> 622 bytes
 .../skins/ersplus/transport_icon_previous_1.png    |  Bin 0 -> 722 bytes
 .../skins/ersplus/transport_icon_previous_2.png    |  Bin 0 -> 644 bytes
 .../share/skins/ersplus/transport_icon_stop_1.png  |  Bin 0 -> 616 bytes
 .../share/skins/ersplus/transport_icon_stop_2.png  |  Bin 0 -> 517 bytes
 .../share/skins/ersplus/transport_last_1.png       |  Bin 0 -> 2340 bytes
 .../share/skins/ersplus/transport_last_2.png       |  Bin 0 -> 2285 bytes
 .../share/skins/ersplus/transport_metronome.png    |  Bin 0 -> 967 bytes
 .../share/skins/ersplus/transport_mode.png         |  Bin 0 -> 1674 bytes
 .../share/skins/ersplus/transport_next_1.png       |  Bin 0 -> 2239 bytes
 .../share/skins/ersplus/transport_next_2.png       |  Bin 0 -> 2168 bytes
 .../share/skins/ersplus/transport_pause.png        |  Bin 0 -> 2527 bytes
 .../share/skins/ersplus/transport_play_1.png       |  Bin 0 -> 2365 bytes
 .../share/skins/ersplus/transport_play_2.png       |  Bin 0 -> 2332 bytes
 .../share/skins/ersplus/transport_previous_1.png   |  Bin 0 -> 2187 bytes
 .../share/skins/ersplus/transport_previous_2.png   |  Bin 0 -> 2149 bytes
 .../share/skins/ersplus/transport_stop_1.png       |  Bin 0 -> 2496 bytes
 .../share/skins/ersplus/transport_stop_2.png       |  Bin 0 -> 1848 bytes
 .../platform-all/share/templates/template-1.tg     |  Bin 0 -> 347 bytes
 .../platform-all/share/templates/template-2.tg     |  Bin 0 -> 309 bytes
 .../share/templates/template-default.tg            |  Bin 0 -> 213 bytes
 .../platform-all/share/templates/templates.xml     |    5 +
 TuxGuitar-testing/platform-all/tuxguitar.jar       |  Bin 0 -> 1130447 bytes
 .../lib/libtuxguitar-alsa-jni.so                   |  Bin 0 -> 13588 bytes
 .../lib/libtuxguitar-fluidsynth-jni.so             |  Bin 0 -> 19108 bytes
 .../lib/libtuxguitar-jack-jni.so                   |  Bin 0 -> 14645 bytes
 TuxGuitar-testing/platform-linux-x86/lib/swt.jar   |  Bin 0 -> 1541860 bytes
 .../platform-linux-x86/lib/tuxguitar-dist.jar      |  Bin 0 -> 11558 bytes
 .../share/plugins/tuxguitar-alsa.jar               |  Bin 0 -> 5787 bytes
 .../share/plugins/tuxguitar-fluidsynth.jar         |  Bin 0 -> 21463 bytes
 .../share/plugins/tuxguitar-jack.jar               |  Bin 0 -> 34983 bytes
 .../lib/libtuxguitar-alsa-jni.so                   |  Bin 0 -> 17443 bytes
 .../platform-linux-x86_64/lib/swt.jar              |  Bin 0 -> 1575795 bytes
 .../platform-linux-x86_64/lib/tuxguitar-dist.jar   |  Bin 0 -> 11558 bytes
 .../share/plugins/tuxguitar-alsa.jar               |  Bin 0 -> 5787 bytes
 TuxGuitar-testing/platform-win32/fluidsynth.dll    |  Bin 0 -> 145408 bytes
 TuxGuitar-testing/platform-win32/lib/swt.jar       |  Bin 0 -> 1738651 bytes
 .../platform-win32/lib/tuxguitar-dist.jar          |  Bin 0 -> 11612 bytes
 .../lib/tuxguitar-fluidsynth-jni.dll               |  Bin 0 -> 13824 bytes
 .../platform-win32/lib/tuxguitar-jack-jni.dll      |  Bin 0 -> 10752 bytes
 TuxGuitar-testing/platform-win32/pthreadVC2.dll    |  Bin 0 -> 86070 bytes
 .../share/plugins/tuxguitar-fluidsynth.jar         |  Bin 0 -> 21463 bytes
 .../share/plugins/tuxguitar-jack.jar               |  Bin 0 -> 34983 bytes
 TuxGuitar-testing/tuxguitar.bat                    |   17 +
 TuxGuitar-testing/tuxguitar_x86.sh                 |   45 +
 TuxGuitar-testing/tuxguitar_x86_64.sh              |   45 +
 TuxGuitar-tray/GNUmakefile                         |   72 -
 TuxGuitar-tray/build.properties                    |    3 +-
 TuxGuitar-tray/build.xml                           |    9 +-
 TuxGuitar-tray/pom.xml                             |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 TuxGuitar-tray/share/META-INF/tuxguitar-tray.info  |    5 +
 .../src/org/herac/tuxguitar/tray/TGTray.java       |    7 +-
 .../src/org/herac/tuxguitar/tray/TGTrayIcon.java   |   16 +-
 .../src/org/herac/tuxguitar/tray/TGTrayMenu.java   |   15 +-
 .../src/org/herac/tuxguitar/tray/TGTrayPlugin.java |   22 +-
 TuxGuitar-tuner/build.properties                   |    3 +-
 TuxGuitar-tuner/build.xml                          |   12 +-
 TuxGuitar-tuner/pom.xml                            |   46 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-tuner.info            |    6 +
 TuxGuitar-tuner/share/lang/messages.properties     |   12 +
 .../tuxguitar/app/tools/custom/tuner/TGTuner.java  |  312 +
 .../app/tools/custom/tuner/TGTunerDialog.java      |  206 +
 .../app/tools/custom/tuner/TGTunerFineWidget.java  |  150 +
 .../app/tools/custom/tuner/TGTunerListener.java    |   13 +
 .../app/tools/custom/tuner/TGTunerPlugin.java      |   39 +
 .../app/tools/custom/tuner/TGTunerQueue.java       |  105 +
 .../app/tools/custom/tuner/TGTunerRoughWidget.java |  113 +
 .../app/tools/custom/tuner/TGTunerSettings.java    |  172 +
 .../tools/custom/tuner/TGTunerSettingsDialog.java  |  334 +
 .../app/tools/custom/tuner/TGTuningString.java     |   52 +
 .../tuxguitar/gui/tools/custom/tuner/TGTuner.java  |  312 -
 .../gui/tools/custom/tuner/TGTunerDialog.java      |  205 -
 .../gui/tools/custom/tuner/TGTunerFineWidget.java  |  148 -
 .../gui/tools/custom/tuner/TGTunerListener.java    |   13 -
 .../gui/tools/custom/tuner/TGTunerPlugin.java      |   53 -
 .../gui/tools/custom/tuner/TGTunerQueue.java       |  105 -
 .../gui/tools/custom/tuner/TGTunerRoughWidget.java |  112 -
 .../gui/tools/custom/tuner/TGTunerSettings.java    |  172 -
 .../tools/custom/tuner/TGTunerSettingsDialog.java  |  334 -
 .../gui/tools/custom/tuner/TGTuningString.java     |   52 -
 TuxGuitar-viewer/build.properties                  |    8 +
 TuxGuitar-viewer/build.xml                         |   83 +
 TuxGuitar-viewer/resources/skin/scroll_down.png    |  Bin 0 -> 1770 bytes
 .../resources/skin/scroll_down_pressed.png         |  Bin 0 -> 743 bytes
 TuxGuitar-viewer/resources/skin/scroll_up.png      |  Bin 0 -> 1741 bytes
 .../resources/skin/scroll_up_pressed.png           |  Bin 0 -> 747 bytes
 TuxGuitar-viewer/resources/skin/setup.png          |  Bin 0 -> 5131 bytes
 TuxGuitar-viewer/resources/skin/setup_over.png     |  Bin 0 -> 5129 bytes
 TuxGuitar-viewer/resources/skin/setup_pressed.png  |  Bin 0 -> 3672 bytes
 TuxGuitar-viewer/resources/skin/transport_play.png |  Bin 0 -> 5399 bytes
 .../resources/skin/transport_play_over.png         |  Bin 0 -> 5436 bytes
 .../resources/skin/transport_play_pressed.png      |  Bin 0 -> 3356 bytes
 .../resources/skin/transport_play_selected.png     |  Bin 0 -> 3691 bytes
 .../skin/transport_play_selected_over.png          |  Bin 0 -> 3700 bytes
 .../src/org/herac/tuxguitar/app/TGApplet.java      |  169 +
 .../src/org/herac/tuxguitar/app/TuxGuitar.java     |  220 +
 .../org/herac/tuxguitar/app/actions/Action.java    |  106 +
 .../herac/tuxguitar/app/actions/ActionAdapter.java |   44 +
 .../herac/tuxguitar/app/actions/ActionDialog.java  |   72 +
 .../herac/tuxguitar/app/actions/ActionLock.java    |   30 +
 .../herac/tuxguitar/app/actions/ActionManager.java |   92 +
 .../layout/SetChordDiagramEnabledAction.java       |   33 +
 .../actions/layout/SetChordNameEnabledAction.java  |   33 +
 .../app/actions/layout/SetScoreEnabledAction.java  |   36 +
 .../actions/layout/SetTablatureEnabledAction.java  |   36 +
 .../app/actions/measure/GoNextMeasureAction.java   |   44 +
 .../actions/measure/GoPreviousMeasureAction.java   |   44 +
 .../app/actions/measure/SelectMeasureAction.java   |   78 +
 .../app/actions/settings/SettingsAction.java       |   98 +
 .../app/actions/track/SelectTrackAction.java       |   59 +
 .../actions/transport/TransportMixerAction.java    |  400 +
 .../app/actions/transport/TransportPlayAction.java |   77 +
 .../actions/transport/TransportSetupAction.java    |  123 +
 .../app/actions/transport/TransportStopAction.java |   39 +
 .../herac/tuxguitar/app/editors/EditorCache.java   |  144 +
 .../herac/tuxguitar/app/editors/TGColorImpl.java   |   42 +
 .../herac/tuxguitar/app/editors/TGFontImpl.java    |   47 +
 .../herac/tuxguitar/app/editors/TGImageImpl.java   |   64 +
 .../herac/tuxguitar/app/editors/TGPainterImpl.java |  273 +
 .../app/editors/TGResourceFactoryImpl.java         |   35 +
 .../herac/tuxguitar/app/editors/TGScrollBar.java   |  134 +
 .../tuxguitar/app/editors/TablatureEditor.java     |  121 +
 .../org/herac/tuxguitar/app/editors/tab/Caret.java |  355 +
 .../herac/tuxguitar/app/editors/tab/Tablature.java |  331 +
 .../tuxguitar/app/system/config/TGConfig.java      |   64 +
 .../app/system/keybindings/KeyBinding.java         |  177 +
 .../app/system/keybindings/KeyBindingAction.java   |   28 +
 .../system/keybindings/KeyBindingActionList.java   |   44 +
 .../keybindings/KeyBindingActionManager.java       |   45 +
 .../system/keybindings/KeyBindingConstants.java    |   89 +
 .../org/herac/tuxguitar/app/toolbar/TGToolBar.java |  106 +
 .../herac/tuxguitar/app/transport/TGTransport.java |   76 +
 .../org/herac/tuxguitar/app/util/MidiTickUtil.java |   70 +
 .../org/herac/tuxguitar/app/util/SyncThread.java   |   40 +
 .../herac/tuxguitar/app/util/TGResourceUtils.java  |   24 +
 .../src/org/herac/tuxguitar/graphics/TGColor.java  |   10 +
 .../org/herac/tuxguitar/graphics/TGColorModel.java |   42 +
 .../org/herac/tuxguitar/graphics/TGDimension.java  |   32 +
 .../src/org/herac/tuxguitar/graphics/TGFont.java   |   13 +
 .../org/herac/tuxguitar/graphics/TGFontModel.java  |   52 +
 .../src/org/herac/tuxguitar/graphics/TGImage.java  |   10 +
 .../org/herac/tuxguitar/graphics/TGPainter.java    |   73 +
 .../herac/tuxguitar/graphics/TGPainterFactory.java |    7 +
 .../src/org/herac/tuxguitar/graphics/TGPoint.java  |   32 +
 .../org/herac/tuxguitar/graphics/TGRectangle.java  |   48 +
 .../org/herac/tuxguitar/graphics/TGResource.java   |    9 +
 .../tuxguitar/graphics/TGResourceFactory.java      |   15 +
 .../tuxguitar/graphics/control/TGBeatGroup.java    |  202 +
 .../tuxguitar/graphics/control/TGBeatImpl.java     |  394 +
 .../tuxguitar/graphics/control/TGBeatSpacing.java  |   45 +
 .../tuxguitar/graphics/control/TGChordImpl.java    |  435 +
 .../tuxguitar/graphics/control/TGController.java   |   26 +
 .../tuxguitar/graphics/control/TGFactoryImpl.java  |   55 +
 .../herac/tuxguitar/graphics/control/TGLayout.java |  832 ++
 .../graphics/control/TGLayoutHorizontal.java       |  126 +
 .../tuxguitar/graphics/control/TGLayoutStyles.java |  323 +
 .../graphics/control/TGLayoutVertical.java         |  203 +
 .../tuxguitar/graphics/control/TGLyricImpl.java    |   72 +
 .../graphics/control/TGMeasureBuffer.java          |   78 +
 .../graphics/control/TGMeasureHeaderImpl.java      |  156 +
 .../tuxguitar/graphics/control/TGMeasureImpl.java  | 1326 +++
 .../tuxguitar/graphics/control/TGNoteImpl.java     |  665 ++
 .../tuxguitar/graphics/control/TGResources.java    |  429 +
 .../tuxguitar/graphics/control/TGSpacing.java      |   52 +
 .../tuxguitar/graphics/control/TGTextImpl.java     |   16 +
 .../tuxguitar/graphics/control/TGTrackImpl.java    |   76 +
 .../tuxguitar/graphics/control/TGTrackSpacing.java |   89 +
 .../tuxguitar/graphics/control/TGVoiceImpl.java    |  648 ++
 .../graphics/control/painters/TGClefPainter.java   |  345 +
 .../control/painters/TGKeySignaturePainter.java    |  144 +
 .../graphics/control/painters/TGNotePainter.java   |   47 +
 .../control/painters/TGSilencePainter.java         |  254 +
 .../graphics/control/painters/TGTempoPainter.java  |   21 +
 .../control/painters/TGTripletFeelPainter.java     |  124 +
 .../org/herac/tuxguitar/io/tg10/TGInputStream.java |  747 ++
 .../src/org/herac/tuxguitar/io/tg10/TGStream.java  |  146 +
 .../org/herac/tuxguitar/io/tg11/TGInputStream.java |  782 ++
 .../src/org/herac/tuxguitar/io/tg11/TGStream.java  |  203 +
 .../org/herac/tuxguitar/io/tg12/TGInputStream.java |  800 ++
 .../src/org/herac/tuxguitar/io/tg12/TGStream.java  |  205 +
 .../player/impl/jsa/assistant/SBAssistant.java     |   63 +
 .../impl/jsa/message/MidiControlChangeMessage.java |   13 +
 .../impl/jsa/message/MidiMessageFactory.java       |  115 +
 .../impl/jsa/message/MidiNoteOffMessage.java       |   17 +
 .../player/impl/jsa/message/MidiNoteOnMessage.java |   17 +
 .../impl/jsa/message/MidiPitchBendMessage.java     |   17 +
 .../impl/jsa/message/MidiProgramChangeMessage.java |   13 +
 .../player/impl/jsa/message/MidiShortMessage.java  |   32 +
 .../impl/jsa/message/MidiSystemResetMessage.java   |   13 +
 .../impl/jsa/message/MidiTempoInUsqMessage.java    |   11 +
 .../impl/jsa/message/MidiTimeSignatureMessage.java |   13 +
 .../player/impl/jsa/midiport/MidiPortOut.java      |  171 +
 .../impl/jsa/midiport/MidiPortProviderImpl.java    |   62 +
 .../impl/jsa/midiport/MidiPortSynthesizer.java     |  203 +
 .../impl/jsa/sequencer/MidiReceiverImpl.java       |  122 +
 .../jsa/sequencer/MidiSequenceHandlerImpl.java     |   78 +
 .../impl/jsa/sequencer/MidiSequenceLoader.java     |    9 +
 .../impl/jsa/sequencer/MidiSequencerImpl.java      |  226 +
 .../jsa/sequencer/MidiSequencerProviderImpl.java   |   55 +
 .../player/impl/jsa/utils/MidiMessageUtils.java    |    0
 TuxGuitar-winmm/build.properties                   |    5 +-
 TuxGuitar-winmm/build.xml                          |   11 +-
 TuxGuitar-winmm/jni/GNUmakefile                    |    6 +-
 TuxGuitar-winmm/pom.xml                            |   41 +
 .../org.herac.tuxguitar.util.plugin.TGPlugin       |    1 +
 .../share/META-INF/tuxguitar-winmm.info            |    5 +
 .../impl/midiport/winmm/MidiOutputPortImpl.java    |    8 +-
 .../winmm/MidiOutputPortProviderPlugin.java        |   20 +-
 .../impl/midiport/winmm/MidiReceiverImpl.java      |    4 +-
 TuxGuitar/GNUmakefile                              |  109 -
 TuxGuitar/TODO                                     |   21 +
 TuxGuitar/build-sources.xml                        |   90 +
 TuxGuitar/build.properties                         |   61 +-
 TuxGuitar/build.xml                                |   76 +-
 TuxGuitar/dist/about_authors.dist                  |   29 +-
 TuxGuitar/dist/config.dist                         |    7 -
 TuxGuitar/dist/shortcuts-default.xml               |   56 -
 TuxGuitar/dist/tuxguitar-shortcuts.xml             |   74 +
 TuxGuitar/dist/tuxguitar.cfg                       |    7 +
 TuxGuitar/doc/AUTHORS                              |   29 +-
 TuxGuitar/doc/CHANGES                              |   15 +
 TuxGuitar/pom.xml                                  |   32 +
 TuxGuitar/share/help/about.html                    |  519 +-
 TuxGuitar/share/help/edit_chord.html               |  387 +-
 TuxGuitar/share/help/edit_effects.html             |  773 +-
 TuxGuitar/share/help/edit_matrix.html              |  144 +-
 TuxGuitar/share/help/editing_song.html             |  452 +-
 TuxGuitar/share/help/editing_track.html            |  497 +-
 TuxGuitar/share/help/file_formats.html             |  199 +-
 TuxGuitar/share/help/index.html                    |   66 +-
 TuxGuitar/share/help/js/jquery-1.2.6.min.js        |   32 -
 TuxGuitar/share/help/js/jquery.menu.js             |   26 -
 TuxGuitar/share/help/license.html                  | 1214 +--
 TuxGuitar/share/help/start_first_steps.html        |  268 +-
 TuxGuitar/share/help/start_playing.html            |  258 +-
 TuxGuitar/share/help/start_toolbars.html           |  732 +-
 TuxGuitar/share/help/tools_converter.html          |  192 +-
 TuxGuitar/share/help/tools_keybinding.html         |  123 +-
 TuxGuitar/share/help/tools_plugins.html            |  151 +-
 TuxGuitar/share/help/tools_shortcuts.html          |  954 ++-
 TuxGuitar/share/help/tools_skin.html               |  128 +-
 TuxGuitar/share/help/tools_sound.html              |  225 +-
 TuxGuitar/share/help/whatsnew.html                 |  441 +-
 TuxGuitar/share/lang/last_additions                |   59 +
 TuxGuitar/share/lang/messages.properties           |   81 +-
 TuxGuitar/share/lang/messages_bg.properties        |  682 ++
 TuxGuitar/share/lang/messages_ca.properties        |   25 +-
 TuxGuitar/share/lang/messages_cs.properties        |   22 +-
 TuxGuitar/share/lang/messages_de.properties        |  707 +-
 TuxGuitar/share/lang/messages_el.properties        |  685 ++
 TuxGuitar/share/lang/messages_en.properties        |   29 +-
 TuxGuitar/share/lang/messages_es.properties        |   21 +-
 TuxGuitar/share/lang/messages_eu.properties        |   26 +-
 TuxGuitar/share/lang/messages_fi.properties        |  688 ++
 TuxGuitar/share/lang/messages_fr.properties        |   21 +-
 TuxGuitar/share/lang/messages_hu.properties        |   22 +-
 TuxGuitar/share/lang/messages_it.properties        |   21 +-
 TuxGuitar/share/lang/messages_ja.properties        |   21 +-
 TuxGuitar/share/lang/messages_lt.properties        |  687 ++
 TuxGuitar/share/lang/messages_nl.properties        |   21 +-
 TuxGuitar/share/lang/messages_pl.properties        |   21 +-
 TuxGuitar/share/lang/messages_pt.properties        |   21 +-
 TuxGuitar/share/lang/messages_ru.properties        |   21 +-
 TuxGuitar/share/lang/messages_sr.properties        |   20 +-
 TuxGuitar/share/lang/messages_sv.properties        |   29 +-
 TuxGuitar/share/lang/messages_uk.properties        |   21 +-
 TuxGuitar/share/lang/messages_vi.properties        |   21 +-
 TuxGuitar/share/lang/messages_zh_GB.properties     |   26 +-
 TuxGuitar/share/lang/messages_zh_TW.properties     | 1208 +--
 TuxGuitar/share/lang/toutf.pl                      |   35 +
 TuxGuitar/share/skins/Oxygen/1.png                 |  Bin 0 -> 3086 bytes
 TuxGuitar/share/skins/Oxygen/16.png                |  Bin 0 -> 3290 bytes
 TuxGuitar/share/skins/Oxygen/2.png                 |  Bin 0 -> 3032 bytes
 TuxGuitar/share/skins/Oxygen/32.png                |  Bin 0 -> 3277 bytes
 TuxGuitar/share/skins/Oxygen/4.png                 |  Bin 0 -> 3027 bytes
 TuxGuitar/share/skins/Oxygen/64.png                |  Bin 0 -> 3203 bytes
 TuxGuitar/share/skins/Oxygen/8.png                 |  Bin 0 -> 3268 bytes
 TuxGuitar/share/skins/Oxygen/README                |    9 +
 TuxGuitar/share/skins/Oxygen/about_authors.png     |  Bin 0 -> 25310 bytes
 TuxGuitar/share/skins/Oxygen/about_description.png |  Bin 0 -> 9155 bytes
 TuxGuitar/share/skins/Oxygen/about_license.png     |  Bin 0 -> 26088 bytes
 TuxGuitar/share/skins/Oxygen/browser_back.png      |  Bin 0 -> 929 bytes
 TuxGuitar/share/skins/Oxygen/browser_file.png      |  Bin 0 -> 881 bytes
 TuxGuitar/share/skins/Oxygen/browser_folder.png    |  Bin 0 -> 878 bytes
 TuxGuitar/share/skins/Oxygen/browser_new.png       |  Bin 0 -> 873 bytes
 TuxGuitar/share/skins/Oxygen/browser_refresh.png   |  Bin 0 -> 1283 bytes
 TuxGuitar/share/skins/Oxygen/browser_root.png      |  Bin 0 -> 935 bytes
 TuxGuitar/share/skins/Oxygen/chord.png             |  Bin 0 -> 3645 bytes
 TuxGuitar/share/skins/Oxygen/closerepeat.png       |  Bin 0 -> 3171 bytes
 TuxGuitar/share/skins/Oxygen/division-type.png     |  Bin 0 -> 3623 bytes
 TuxGuitar/share/skins/Oxygen/dotted.png            |  Bin 0 -> 3093 bytes
 TuxGuitar/share/skins/Oxygen/doubledotted.png      |  Bin 0 -> 3130 bytes
 TuxGuitar/share/skins/Oxygen/dynamic_f.png         |  Bin 0 -> 3098 bytes
 TuxGuitar/share/skins/Oxygen/dynamic_ff.png        |  Bin 0 -> 3328 bytes
 TuxGuitar/share/skins/Oxygen/dynamic_fff.png       |  Bin 0 -> 3568 bytes
 TuxGuitar/share/skins/Oxygen/dynamic_mf.png        |  Bin 0 -> 3295 bytes
 TuxGuitar/share/skins/Oxygen/dynamic_mp.png        |  Bin 0 -> 3193 bytes
 TuxGuitar/share/skins/Oxygen/dynamic_p.png         |  Bin 0 -> 3011 bytes
 TuxGuitar/share/skins/Oxygen/dynamic_pp.png        |  Bin 0 -> 3161 bytes
 TuxGuitar/share/skins/Oxygen/dynamic_ppp.png       |  Bin 0 -> 3327 bytes
 TuxGuitar/share/skins/Oxygen/edit_mode_edition.png |  Bin 0 -> 3567 bytes
 .../skins/Oxygen/edit_mode_edition_no_natural.png  |  Bin 0 -> 3811 bytes
 .../share/skins/Oxygen/edit_mode_selection.png     |  Bin 0 -> 3523 bytes
 TuxGuitar/share/skins/Oxygen/edit_redo.png         |  Bin 0 -> 1245 bytes
 TuxGuitar/share/skins/Oxygen/edit_undo.png         |  Bin 0 -> 1220 bytes
 TuxGuitar/share/skins/Oxygen/edit_voice_1.png      |  Bin 0 -> 3273 bytes
 TuxGuitar/share/skins/Oxygen/edit_voice_2.png      |  Bin 0 -> 3309 bytes
 .../share/skins/Oxygen/effect_accentuated.png      |  Bin 0 -> 3141 bytes
 TuxGuitar/share/skins/Oxygen/effect_bend.png       |  Bin 0 -> 3278 bytes
 TuxGuitar/share/skins/Oxygen/effect_dead.png       |  Bin 0 -> 3329 bytes
 TuxGuitar/share/skins/Oxygen/effect_fade_in.png    |  Bin 0 -> 3124 bytes
 TuxGuitar/share/skins/Oxygen/effect_ghost.png      |  Bin 0 -> 3277 bytes
 TuxGuitar/share/skins/Oxygen/effect_grace.png      |  Bin 0 -> 3345 bytes
 TuxGuitar/share/skins/Oxygen/effect_hammer.png     |  Bin 0 -> 3418 bytes
 TuxGuitar/share/skins/Oxygen/effect_harmonic.png   |  Bin 0 -> 3492 bytes
 .../skins/Oxygen/effect_heavy_accentuated.png      |  Bin 0 -> 3219 bytes
 TuxGuitar/share/skins/Oxygen/effect_palm_mute.png  |  Bin 0 -> 3458 bytes
 TuxGuitar/share/skins/Oxygen/effect_popping.png    |  Bin 0 -> 3089 bytes
 TuxGuitar/share/skins/Oxygen/effect_slapping.png   |  Bin 0 -> 3181 bytes
 TuxGuitar/share/skins/Oxygen/effect_slide.png      |  Bin 0 -> 3206 bytes
 TuxGuitar/share/skins/Oxygen/effect_staccato.png   |  Bin 0 -> 3060 bytes
 TuxGuitar/share/skins/Oxygen/effect_tapping.png    |  Bin 0 -> 3072 bytes
 .../share/skins/Oxygen/effect_tremolo_bar.png      |  Bin 0 -> 3247 bytes
 .../share/skins/Oxygen/effect_tremolo_picking.png  |  Bin 0 -> 3316 bytes
 TuxGuitar/share/skins/Oxygen/effect_trill.png      |  Bin 0 -> 3261 bytes
 TuxGuitar/share/skins/Oxygen/effect_vibrato.png    |  Bin 0 -> 3033 bytes
 TuxGuitar/share/skins/Oxygen/firstfret.png         |  Bin 0 -> 244 bytes
 TuxGuitar/share/skins/Oxygen/fret.png              |  Bin 0 -> 258 bytes
 TuxGuitar/share/skins/Oxygen/fretboard.png         |  Bin 0 -> 12066 bytes
 TuxGuitar/share/skins/Oxygen/grace.png             |  Bin 0 -> 3345 bytes
 TuxGuitar/share/skins/Oxygen/icon-16x16.png        |  Bin 0 -> 3617 bytes
 TuxGuitar/share/skins/Oxygen/icon-24x24.png        |  Bin 0 -> 4410 bytes
 TuxGuitar/share/skins/Oxygen/icon-32x32.png        |  Bin 0 -> 5350 bytes
 TuxGuitar/share/skins/Oxygen/icon-48x48.png        |  Bin 0 -> 7501 bytes
 TuxGuitar/share/skins/Oxygen/icon-64x64.png        |  Bin 0 -> 9943 bytes
 TuxGuitar/share/skins/Oxygen/icon-96x96.png        |  Bin 0 -> 15565 bytes
 TuxGuitar/share/skins/Oxygen/icon.icns             |  Bin 0 -> 229344 bytes
 TuxGuitar/share/skins/Oxygen/icon.ico              |  Bin 0 -> 72566 bytes
 TuxGuitar/share/skins/Oxygen/icon.png              |  Bin 0 -> 15565 bytes
 TuxGuitar/share/skins/Oxygen/layout_compact.png    |  Bin 0 -> 3447 bytes
 TuxGuitar/share/skins/Oxygen/layout_linear.png     |  Bin 0 -> 3497 bytes
 TuxGuitar/share/skins/Oxygen/layout_multitrack.png |  Bin 0 -> 3589 bytes
 TuxGuitar/share/skins/Oxygen/layout_page.png       |  Bin 0 -> 3893 bytes
 TuxGuitar/share/skins/Oxygen/layout_score.png      |  Bin 0 -> 3404 bytes
 TuxGuitar/share/skins/Oxygen/logo.png              |  Bin 0 -> 28531 bytes
 TuxGuitar/share/skins/Oxygen/marker_add.png        |  Bin 0 -> 1105 bytes
 TuxGuitar/share/skins/Oxygen/marker_first.png      |  Bin 0 -> 1154 bytes
 TuxGuitar/share/skins/Oxygen/marker_last.png       |  Bin 0 -> 1159 bytes
 TuxGuitar/share/skins/Oxygen/marker_list.png       |  Bin 0 -> 2557 bytes
 TuxGuitar/share/skins/Oxygen/marker_next.png       |  Bin 0 -> 1109 bytes
 TuxGuitar/share/skins/Oxygen/marker_previous.png   |  Bin 0 -> 1102 bytes
 TuxGuitar/share/skins/Oxygen/marker_remove.png     |  Bin 0 -> 1044 bytes
 TuxGuitar/share/skins/Oxygen/mixer.png             |  Bin 0 -> 877 bytes
 TuxGuitar/share/skins/Oxygen/new.png               |  Bin 0 -> 750 bytes
 TuxGuitar/share/skins/Oxygen/open.png              |  Bin 0 -> 1125 bytes
 TuxGuitar/share/skins/Oxygen/openrepeat.png        |  Bin 0 -> 3169 bytes
 TuxGuitar/share/skins/Oxygen/option_language.png   |  Bin 0 -> 26684 bytes
 TuxGuitar/share/skins/Oxygen/option_skin.png       |  Bin 0 -> 25485 bytes
 TuxGuitar/share/skins/Oxygen/option_sound.png      |  Bin 0 -> 25781 bytes
 TuxGuitar/share/skins/Oxygen/option_style.png      |  Bin 0 -> 26166 bytes
 TuxGuitar/share/skins/Oxygen/option_toolbars.png   |  Bin 0 -> 24836 bytes
 TuxGuitar/share/skins/Oxygen/option_view.png       |  Bin 0 -> 9155 bytes
 TuxGuitar/share/skins/Oxygen/print-preview.png     |  Bin 0 -> 1386 bytes
 TuxGuitar/share/skins/Oxygen/print.png             |  Bin 0 -> 880 bytes
 .../share/skins/Oxygen/repeat_alternative.png      |  Bin 0 -> 3039 bytes
 TuxGuitar/share/skins/Oxygen/save-as.png           |  Bin 0 -> 1233 bytes
 TuxGuitar/share/skins/Oxygen/save.png              |  Bin 0 -> 798 bytes
 TuxGuitar/share/skins/Oxygen/settings.png          |  Bin 0 -> 1101 bytes
 TuxGuitar/share/skins/Oxygen/skin-preview.png      |  Bin 0 -> 98238 bytes
 TuxGuitar/share/skins/Oxygen/skin.properties       |    6 +
 TuxGuitar/share/skins/Oxygen/song_properties.png   |  Bin 0 -> 924 bytes
 TuxGuitar/share/skins/Oxygen/splash.png            |  Bin 0 -> 150661 bytes
 TuxGuitar/share/skins/Oxygen/tempo.png             |  Bin 0 -> 2920 bytes
 TuxGuitar/share/skins/Oxygen/tempoicon.png         |  Bin 0 -> 3608 bytes
 TuxGuitar/share/skins/Oxygen/tgdoc.icns            |  Bin 0 -> 48080 bytes
 TuxGuitar/share/skins/Oxygen/tiednote.png          |  Bin 0 -> 3109 bytes
 TuxGuitar/share/skins/Oxygen/timesignature.png     |  Bin 0 -> 3335 bytes
 TuxGuitar/share/skins/Oxygen/track_add.png         |  Bin 0 -> 3707 bytes
 TuxGuitar/share/skins/Oxygen/track_remove.png      |  Bin 0 -> 3579 bytes
 TuxGuitar/share/skins/Oxygen/transport.png         |  Bin 0 -> 1444 bytes
 TuxGuitar/share/skins/Oxygen/transport_first_1.png |  Bin 0 -> 16204 bytes
 TuxGuitar/share/skins/Oxygen/transport_first_2.png |  Bin 0 -> 16204 bytes
 .../share/skins/Oxygen/transport_icon_first_1.png  |  Bin 0 -> 753 bytes
 .../share/skins/Oxygen/transport_icon_first_2.png  |  Bin 0 -> 753 bytes
 .../share/skins/Oxygen/transport_icon_last_1.png   |  Bin 0 -> 752 bytes
 .../share/skins/Oxygen/transport_icon_last_2.png   |  Bin 0 -> 752 bytes
 .../share/skins/Oxygen/transport_icon_next_1.png   |  Bin 0 -> 748 bytes
 .../share/skins/Oxygen/transport_icon_next_2.png   |  Bin 0 -> 748 bytes
 .../share/skins/Oxygen/transport_icon_pause.png    |  Bin 0 -> 721 bytes
 .../share/skins/Oxygen/transport_icon_play_1.png   |  Bin 0 -> 736 bytes
 .../share/skins/Oxygen/transport_icon_play_2.png   |  Bin 0 -> 736 bytes
 .../skins/Oxygen/transport_icon_previous_1.png     |  Bin 0 -> 749 bytes
 .../skins/Oxygen/transport_icon_previous_2.png     |  Bin 0 -> 749 bytes
 .../share/skins/Oxygen/transport_icon_stop_1.png   |  Bin 0 -> 736 bytes
 .../share/skins/Oxygen/transport_icon_stop_2.png   |  Bin 0 -> 736 bytes
 TuxGuitar/share/skins/Oxygen/transport_last_1.png  |  Bin 0 -> 16210 bytes
 TuxGuitar/share/skins/Oxygen/transport_last_2.png  |  Bin 0 -> 16210 bytes
 .../share/skins/Oxygen/transport_metronome.png     |  Bin 0 -> 3685 bytes
 TuxGuitar/share/skins/Oxygen/transport_mode.png    |  Bin 0 -> 4022 bytes
 TuxGuitar/share/skins/Oxygen/transport_next_1.png  |  Bin 0 -> 16198 bytes
 TuxGuitar/share/skins/Oxygen/transport_next_2.png  |  Bin 0 -> 16198 bytes
 TuxGuitar/share/skins/Oxygen/transport_pause.png   |  Bin 0 -> 16040 bytes
 TuxGuitar/share/skins/Oxygen/transport_play_1.png  |  Bin 0 -> 16032 bytes
 TuxGuitar/share/skins/Oxygen/transport_play_2.png  |  Bin 0 -> 16032 bytes
 .../share/skins/Oxygen/transport_previous_1.png    |  Bin 0 -> 16208 bytes
 .../share/skins/Oxygen/transport_previous_2.png    |  Bin 0 -> 16208 bytes
 TuxGuitar/share/skins/Oxygen/transport_stop_1.png  |  Bin 0 -> 15995 bytes
 TuxGuitar/share/skins/Oxygen/transport_stop_2.png  |  Bin 0 -> 15995 bytes
 TuxGuitar/share/skins/blue_serious/skin.svg        | 8639 +++++++++++++++++++
 TuxGuitar/share/skins/ersplus/skin.svg             | 8660 ++++++++++++++++++++
 TuxGuitar/share/templates/template-1.tg            |  Bin 0 -> 329 bytes
 TuxGuitar/share/templates/template-2.tg            |  Bin 0 -> 291 bytes
 TuxGuitar/share/templates/template-default.tg      |  Bin 0 -> 195 bytes
 TuxGuitar/share/templates/templates.xml            |    5 +
 TuxGuitar/src/org/herac/tuxguitar/app/TGMain.java  |   10 +
 .../src/org/herac/tuxguitar/app/TuxGuitar.java     |  851 ++
 .../app/action/TGActionAccessInterceptor.java      |   54 +
 .../app/action/TGActionAdapterManager.java         |  423 +
 .../app/action/TGActionAutoLockListener.java       |   20 +
 .../app/action/TGActionAutoUnlockListener.java     |   20 +
 .../app/action/TGActionAutoUpdateListener.java     |   19 +
 .../herac/tuxguitar/app/action/TGActionBase.java   |  108 +
 .../app/action/TGActionContextFactoryImpl.java     |   18 +
 .../tuxguitar/app/action/TGActionContextImpl.java  |   10 +
 .../herac/tuxguitar/app/action/TGActionIdList.java |   51 +
 .../herac/tuxguitar/app/action/TGActionLock.java   |   30 +
 .../tuxguitar/app/action/TGActionProcessor.java    |  121 +
 .../app/action/impl/caret/GoDownAction.java        |   29 +
 .../app/action/impl/caret/GoLeftAction.java        |   35 +
 .../app/action/impl/caret/GoRightAction.java       |   52 +
 .../app/action/impl/caret/GoUpAction.java          |   29 +
 .../action/impl/composition/ChangeClefAction.java  |  161 +
 .../action/impl/composition/ChangeInfoAction.java  |  236 +
 .../impl/composition/ChangeKeySignatureAction.java |  172 +
 .../action/impl/composition/ChangeTempoAction.java |  183 +
 .../composition/ChangeTimeSignatureAction.java     |  179 +
 .../impl/composition/ChangeTripletFeelAction.java  |  167 +
 .../impl/duration/ChangeDivisionTypeAction.java    |   91 +
 .../impl/duration/ChangeDottedDurationAction.java  |   53 +
 .../duration/ChangeDoubleDottedDurationAction.java |   53 +
 .../impl/duration/DecrementDurationAction.java     |   57 +
 .../impl/duration/IncrementDurationAction.java     |   57 +
 .../impl/duration/SetEighthDurationAction.java     |   65 +
 .../impl/duration/SetHalfDurationAction.java       |   65 +
 .../impl/duration/SetQuarterDurationAction.java    |   65 +
 .../impl/duration/SetSixteenthDurationAction.java  |   65 +
 .../duration/SetSixtyFourthDurationAction.java     |   65 +
 .../duration/SetThirtySecondDurationAction.java    |   65 +
 .../impl/duration/SetWholeDurationAction.java      |   64 +
 .../tuxguitar/app/action/impl/edit/RedoAction.java |   37 +
 .../impl/edit/SetMouseModeEditionAction.java       |   30 +
 .../impl/edit/SetMouseModeSelectionAction.java     |   30 +
 .../app/action/impl/edit/SetNaturalKeyAction.java  |   29 +
 .../app/action/impl/edit/SetVoice1Action.java      |   29 +
 .../app/action/impl/edit/SetVoice2Action.java      |   29 +
 .../tuxguitar/app/action/impl/edit/UndoAction.java |   37 +
 .../impl/effects/ChangeAccentuatedNoteAction.java  |   45 +
 .../action/impl/effects/ChangeBendNoteAction.java  |   59 +
 .../action/impl/effects/ChangeDeadNoteAction.java  |   59 +
 .../action/impl/effects/ChangeFadeInAction.java    |   45 +
 .../action/impl/effects/ChangeGhostNoteAction.java |   45 +
 .../action/impl/effects/ChangeGraceNoteAction.java |   59 +
 .../impl/effects/ChangeHammerNoteAction.java       |   45 +
 .../impl/effects/ChangeHarmonicNoteAction.java     |   59 +
 .../effects/ChangeHeavyAccentuatedNoteAction.java  |   45 +
 .../action/impl/effects/ChangeLetRingAction.java   |   45 +
 .../action/impl/effects/ChangePalmMuteAction.java  |   45 +
 .../action/impl/effects/ChangePoppingAction.java   |   45 +
 .../action/impl/effects/ChangeSlappingAction.java  |   45 +
 .../action/impl/effects/ChangeSlideNoteAction.java |   45 +
 .../action/impl/effects/ChangeStaccatoAction.java  |   45 +
 .../action/impl/effects/ChangeTappingAction.java   |   45 +
 .../impl/effects/ChangeTremoloBarAction.java       |   59 +
 .../impl/effects/ChangeTremoloPickingAction.java   |   59 +
 .../action/impl/effects/ChangeTrillNoteAction.java |   59 +
 .../impl/effects/ChangeVibratoNoteAction.java      |   45 +
 .../tuxguitar/app/action/impl/file/ExitAction.java |   31 +
 .../app/action/impl/file/ExportSongAction.java     |   83 +
 .../app/action/impl/file/FileActionUtils.java      |  188 +
 .../app/action/impl/file/ImportSongAction.java     |  125 +
 .../app/action/impl/file/NewFileAction.java        |   96 +
 .../app/action/impl/file/OpenFileAction.java       |  124 +
 .../app/action/impl/file/OpenURLAction.java        |  187 +
 .../app/action/impl/file/PrintAction.java          |  218 +
 .../app/action/impl/file/PrintPreviewAction.java   |  167 +
 .../app/action/impl/file/SaveAsFileAction.java     |   45 +
 .../app/action/impl/file/SaveFileAction.java       |   46 +
 .../app/action/impl/help/ShowAboutAction.java      |   36 +
 .../app/action/impl/help/ShowDocAction.java        |   35 +
 .../app/action/impl/insert/InsertChordAction.java  |  124 +
 .../app/action/impl/insert/InsertTextAction.java   |  152 +
 .../impl/insert/RepeatAlternativeAction.java       |  185 +
 .../app/action/impl/insert/RepeatCloseAction.java  |  142 +
 .../app/action/impl/insert/RepeatOpenAction.java   |   45 +
 .../impl/layout/SetChordDiagramEnabledAction.java  |   32 +
 .../impl/layout/SetChordNameEnabledAction.java     |   32 +
 .../action/impl/layout/SetCompactViewAction.java   |   32 +
 .../action/impl/layout/SetLinearLayoutAction.java  |   33 +
 .../impl/layout/SetMultitrackViewAction.java       |   32 +
 .../action/impl/layout/SetPageLayoutAction.java    |   33 +
 .../action/impl/layout/SetScoreEnabledAction.java  |   35 +
 .../impl/layout/SetTablatureEnabledAction.java     |   35 +
 .../app/action/impl/marker/AddMarkerAction.java    |   48 +
 .../action/impl/marker/GoFirstMarkerAction.java    |   30 +
 .../app/action/impl/marker/GoLastMarkerAction.java |   30 +
 .../app/action/impl/marker/GoNextMarkerAction.java |   33 +
 .../action/impl/marker/GoPreviousMarkerAction.java |   33 +
 .../app/action/impl/marker/ListMarkersAction.java  |   35 +
 .../app/action/impl/measure/AddMeasureAction.java  |  169 +
 .../action/impl/measure/CleanMeasureAction.java    |  179 +
 .../app/action/impl/measure/CopyMeasureAction.java |  172 +
 .../action/impl/measure/GoFirstMeasureAction.java  |   43 +
 .../action/impl/measure/GoLastMeasureAction.java   |   43 +
 .../action/impl/measure/GoNextMeasureAction.java   |   65 +
 .../impl/measure/GoPreviousMeasureAction.java      |   43 +
 .../action/impl/measure/PasteMeasureAction.java    |  150 +
 .../action/impl/measure/RemoveMeasureAction.java   |  179 +
 .../app/action/impl/note/ChangeNoteAction.java     |  125 +
 .../app/action/impl/note/ChangeTiedNoteAction.java |   99 +
 .../app/action/impl/note/ChangeVelocityAction.java |   53 +
 .../app/action/impl/note/CleanBeatAction.java      |   48 +
 .../impl/note/DecrementNoteSemitoneAction.java     |   47 +
 .../action/impl/note/DeleteNoteOrRestAction.java   |   56 +
 .../impl/note/IncrementNoteSemitoneAction.java     |   47 +
 .../app/action/impl/note/InsertRestBeatAction.java |   57 +
 .../action/impl/note/MoveBeatsCustomAction.java    |  339 +
 .../app/action/impl/note/MoveBeatsLeftAction.java  |   53 +
 .../app/action/impl/note/MoveBeatsRightAction.java |   53 +
 .../action/impl/note/RemoveUnusedVoiceAction.java  |   52 +
 .../action/impl/note/SetNoteFretNumberAction.java  |   57 +
 .../app/action/impl/note/SetStrokeDownAction.java  |   55 +
 .../app/action/impl/note/SetStrokeUpAction.java    |   55 +
 .../app/action/impl/note/SetVoiceAutoAction.java   |   63 +
 .../app/action/impl/note/SetVoiceDownAction.java   |   63 +
 .../app/action/impl/note/SetVoiceUpAction.java     |   63 +
 .../app/action/impl/note/ShiftNoteDownAction.java  |   50 +
 .../app/action/impl/note/ShiftNoteUpAction.java    |   50 +
 .../app/action/impl/settings/EditConfigAction.java |   31 +
 .../impl/settings/EditKeyBindingsAction.java       |   31 +
 .../action/impl/settings/EditPluginsAction.java    |  254 +
 .../app/action/impl/system/DisposeAction.java      |  125 +
 .../app/action/impl/tools/ScaleAction.java         |   30 +
 .../app/action/impl/tools/TGBrowserAction.java     |   22 +
 .../app/action/impl/tools/TransposeAction.java     |  231 +
 .../app/action/impl/track/AddTrackAction.java      |   44 +
 .../action/impl/track/ChangeTrackMuteAction.java   |   46 +
 .../action/impl/track/ChangeTrackSoloAction.java   |   46 +
 .../app/action/impl/track/CloneTrackAction.java    |   42 +
 .../app/action/impl/track/EditLyricsAction.java    |   34 +
 .../app/action/impl/track/GoFirstTrackAction.java  |   35 +
 .../app/action/impl/track/GoLastTrackAction.java   |   35 +
 .../app/action/impl/track/GoNextTrackAction.java   |   35 +
 .../action/impl/track/GoPreviousTrackAction.java   |   35 +
 .../app/action/impl/track/GoToTrackAction.java     |   36 +
 .../app/action/impl/track/MoveTrackDownAction.java |   45 +
 .../app/action/impl/track/MoveTrackUpAction.java   |   45 +
 .../app/action/impl/track/RemoveTrackAction.java   |   58 +
 .../action/impl/track/TrackPropertiesAction.java   |  716 ++
 .../impl/transport/TransportCountDownAction.java   |   18 +
 .../impl/transport/TransportMetronomeAction.java   |   18 +
 .../action/impl/transport/TransportModeAction.java |  467 ++
 .../action/impl/transport/TransportPlayAction.java |   29 +
 .../transport/TransportSetLoopEHeaderAction.java   |   26 +
 .../transport/TransportSetLoopSHeaderAction.java   |   26 +
 .../action/impl/transport/TransportStopAction.java |   30 +
 .../app/action/impl/view/ShowFretBoardAction.java  |   37 +
 .../action/impl/view/ShowInstrumentsAction.java    |   34 +
 .../app/action/impl/view/ShowMatrixAction.java     |   34 +
 .../app/action/impl/view/ShowPianoAction.java      |   34 +
 .../app/action/impl/view/ShowToolbarsAction.java   |   30 +
 .../app/action/impl/view/ShowTransportAction.java  |   34 +
 .../clipboard/CannotInsertTransferException.java   |   34 +
 .../herac/tuxguitar/app/clipboard/ClipBoard.java   |   40 +
 .../app/clipboard/MeasureTransferable.java         |  130 +
 .../tuxguitar/app/clipboard/Transferable.java      |   19 +
 .../herac/tuxguitar/app/editors/EditorCache.java   |  152 +
 .../tuxguitar/app/editors/FretBoardEditor.java     |  114 +
 .../herac/tuxguitar/app/editors/PianoEditor.java   |  122 +
 .../herac/tuxguitar/app/editors/TGColorImpl.java   |   42 +
 .../tuxguitar/app/editors/TGEditorManager.java     |   83 +
 .../app/editors/TGExternalBeatViewerListener.java  |   10 +
 .../herac/tuxguitar/app/editors/TGFontImpl.java    |   52 +
 .../herac/tuxguitar/app/editors/TGImageImpl.java   |   73 +
 .../herac/tuxguitar/app/editors/TGPainterImpl.java |  263 +
 .../tuxguitar/app/editors/TGPainterUtils.java      |   14 +
 .../tuxguitar/app/editors/TGRedrawListener.java    |   10 +
 .../app/editors/TGResourceFactoryImpl.java         |   50 +
 .../tuxguitar/app/editors/TGUpdateListener.java    |   10 +
 .../tuxguitar/app/editors/TablatureEditor.java     |   85 +
 .../app/editors/channel/TGChannelHandle.java       |   85 +
 .../app/editors/channel/TGChannelItem.java         |  372 +
 .../app/editors/channel/TGChannelList.java         |   89 +
 .../editors/channel/TGChannelManagerDialog.java    |  250 +
 .../editors/channel/TGChannelSettingsDialog.java   |    8 +
 .../editors/channel/TGChannelSettingsHandler.java  |   11 +
 .../channel/TGChannelSettingsHandlerManager.java   |   59 +
 .../editors/channel/TGChannelSettingsPlugin.java   |   44 +
 .../app/editors/channel/TGScalePopup.java          |  218 +
 .../editors/channel/TGScaleSelectionListener.java  |   77 +
 .../app/editors/chord/ChordCreatorListener.java    |    9 +
 .../app/editors/chord/ChordCreatorUtil.java        | 1212 +++
 .../app/editors/chord/ChordCustomList.java         |  256 +
 .../tuxguitar/app/editors/chord/ChordDatabase.java |  110 +
 .../tuxguitar/app/editors/chord/ChordDialog.java   |  252 +
 .../tuxguitar/app/editors/chord/ChordEditor.java   |  509 ++
 .../tuxguitar/app/editors/chord/ChordList.java     |  257 +
 .../app/editors/chord/ChordNamingConvention.java   |   94 +
 .../app/editors/chord/ChordRecognizer.java         |  659 ++
 .../tuxguitar/app/editors/chord/ChordSelector.java |  535 ++
 .../tuxguitar/app/editors/chord/ChordSettings.java |  171 +
 .../app/editors/chord/ChordSettingsDialog.java     |  195 +
 .../app/editors/chord/CustomChordManager.java      |   77 +
 .../tuxguitar/app/editors/chord/xml/ChordXML.java  |   14 +
 .../app/editors/chord/xml/ChordXMLReader.java      |   94 +
 .../app/editors/chord/xml/ChordXMLWriter.java      |  121 +
 .../tuxguitar/app/editors/effects/BendEditor.java  |  459 ++
 .../tuxguitar/app/editors/effects/GraceEditor.java |  328 +
 .../app/editors/effects/HarmonicEditor.java        |  232 +
 .../app/editors/effects/StrokeEditor.java          |  170 +
 .../app/editors/effects/TremoloBarEditor.java      |  455 +
 .../app/editors/effects/TremoloPickingEditor.java  |  158 +
 .../tuxguitar/app/editors/effects/TrillEditor.java |  179 +
 .../tuxguitar/app/editors/fretboard/FretBoard.java |  747 ++
 .../app/editors/fretboard/FretBoardConfig.java     |  358 +
 .../tuxguitar/app/editors/lyric/LyricEditor.java   |  278 +
 .../app/editors/lyric/LyricModifyListener.java     |   55 +
 .../tuxguitar/app/editors/matrix/MatrixConfig.java |  341 +
 .../tuxguitar/app/editors/matrix/MatrixEditor.java |  917 +++
 .../herac/tuxguitar/app/editors/piano/Piano.java   |  611 ++
 .../tuxguitar/app/editors/piano/PianoConfig.java   |  240 +
 .../org/herac/tuxguitar/app/editors/tab/Caret.java |  391 +
 .../herac/tuxguitar/app/editors/tab/Tablature.java |  431 +
 .../app/editors/tab/TablaturePaintListener.java    |   29 +
 .../tuxguitar/app/editors/tab/edit/EditorKit.java  |  495 ++
 .../tuxguitar/app/editors/tab/edit/MouseKit.java   |   82 +
 .../app/help/about/AboutContentReader.java         |   50 +
 .../tuxguitar/app/help/about/AboutDialog.java      |  155 +
 .../tuxguitar/app/help/doc/TGDocumentation.java    |   60 +
 .../herac/tuxguitar/app/helper/FileHistory.java    |  236 +
 .../org/herac/tuxguitar/app/helper/SyncThread.java |   40 +
 .../org/herac/tuxguitar/app/items/ItemBase.java    |   13 +
 .../org/herac/tuxguitar/app/items/ItemManager.java |  486 ++
 .../org/herac/tuxguitar/app/items/MenuItems.java   |   22 +
 .../org/herac/tuxguitar/app/items/ToolItems.java   |   35 +
 .../tuxguitar/app/items/menu/BeatMenuItem.java     |  252 +
 .../tuxguitar/app/items/menu/ChordMenuItem.java    |  110 +
 .../app/items/menu/CompositionMenuItem.java        |  124 +
 .../tuxguitar/app/items/menu/DurationMenuItem.java |  135 +
 .../tuxguitar/app/items/menu/DynamicMenuItem.java  |  129 +
 .../tuxguitar/app/items/menu/EditMenuItem.java     |  112 +
 .../tuxguitar/app/items/menu/FileMenuItem.java     |  356 +
 .../tuxguitar/app/items/menu/HelpMenuItem.java     |   63 +
 .../tuxguitar/app/items/menu/MarkerMenuItem.java   |  100 +
 .../tuxguitar/app/items/menu/MeasureMenuItem.java  |  126 +
 .../app/items/menu/NoteEffectsMenuItem.java        |  246 +
 .../tuxguitar/app/items/menu/ToolMenuItem.java     |  104 +
 .../herac/tuxguitar/app/items/menu/TrackMenu.java  |  174 +
 .../tuxguitar/app/items/menu/TrackMenuItem.java    |   49 +
 .../app/items/menu/TransportMenuItem.java          |  142 +
 .../tuxguitar/app/items/menu/ViewMenuItem.java     |  179 +
 .../tuxguitar/app/items/tool/BeatToolItems.java    |  152 +
 .../app/items/tool/CompositionToolItems.java       |   91 +
 .../app/items/tool/DurationToolItems.java          |  240 +
 .../tuxguitar/app/items/tool/DynamicToolItems.java |  141 +
 .../tuxguitar/app/items/tool/EditToolItems.java    |  110 +
 .../tuxguitar/app/items/tool/FileToolItems.java    |   84 +
 .../tuxguitar/app/items/tool/LayoutToolItems.java  |   89 +
 .../tuxguitar/app/items/tool/MarkerToolItems.java  |   94 +
 .../app/items/tool/NoteEffectToolItems.java        |  252 +
 .../app/items/tool/PropertiesToolItems.java        |   51 +
 .../tuxguitar/app/items/tool/TrackToolItems.java   |   60 +
 .../app/items/tool/TransportToolItems.java         |  141 +
 .../tuxguitar/app/items/tool/ViewToolItems.java    |   70 +
 .../tuxguitar/app/items/xml/ToolBarsReader.java    |   60 +
 .../tuxguitar/app/items/xml/ToolBarsWriter.java    |   83 +
 .../herac/tuxguitar/app/marker/MarkerEditor.java   |  210 +
 .../org/herac/tuxguitar/app/marker/MarkerList.java |  298 +
 .../tuxguitar/app/marker/MarkerNavigator.java      |   33 +
 .../src/org/herac/tuxguitar/app/mixer/TGMixer.java |  265 +
 .../herac/tuxguitar/app/mixer/TGMixerTrack.java    |  397 +
 .../tuxguitar/app/mixer/TGMixerTrackChannel.java   |  208 +
 .../tuxguitar/app/printer/PrintController.java     |  103 +
 .../herac/tuxguitar/app/printer/PrintDocument.java |   22 +
 .../herac/tuxguitar/app/printer/PrintLayout.java   |  462 ++
 .../herac/tuxguitar/app/printer/PrintPreview.java  |  190 +
 .../herac/tuxguitar/app/printer/PrintStyles.java   |   68 +
 .../tuxguitar/app/printer/PrintStylesDialog.java   |  190 +
 .../app/system/config/TGConfigDefaults.java        |  136 +
 .../config/TGConfigDefaultsPropertiesHandler.java  |   25 +
 .../app/system/config/TGConfigEditor.java          |  324 +
 .../tuxguitar/app/system/config/TGConfigKeys.java  |   93 +
 .../app/system/config/TGConfigManager.java         |  114 +
 .../system/config/TGConfigPropertiesHandler.java   |   59 +
 .../app/system/config/items/LanguageOption.java    |  178 +
 .../app/system/config/items/MainOption.java        |  135 +
 .../tuxguitar/app/system/config/items/Option.java  |  227 +
 .../app/system/config/items/SkinOption.java        |  265 +
 .../app/system/config/items/SoundOption.java       |  156 +
 .../app/system/config/items/StylesOption.java      |  361 +
 .../app/system/config/items/ToolBarsOption.java    |  175 +
 .../tuxguitar/app/system/error/TGErrorAdapter.java |   11 +
 .../app/system/error/TGGuiOutErrorHandler.java     |   11 +
 .../app/system/error/TGStdOutErrorHandler.java     |   10 +
 .../tuxguitar/app/system/icons/IconLoader.java     |    7 +
 .../tuxguitar/app/system/icons/IconManager.java    |  864 ++
 .../app/system/keybindings/KeyBinding.java         |   59 +
 .../app/system/keybindings/KeyBindingAction.java   |   28 +
 .../keybindings/KeyBindingActionDefaults.java      |   30 +
 .../keybindings/KeyBindingActionManager.java       |   98 +
 .../app/system/keybindings/KeyBindingListener.java |   24 +
 .../app/system/keybindings/KeyBindingUtil.java     |  121 +
 .../tuxguitar/app/system/keybindings/KeyCode.java  |   20 +
 .../keybindings/editor/KeyBindingEditor.java       |  235 +
 .../keybindings/editor/KeyBindingSelector.java     |  144 +
 .../system/keybindings/xml/KeyBindingReader.java   |  116 +
 .../system/keybindings/xml/KeyBindingWriter.java   |  101 +
 .../app/system/language/LanguageLoader.java        |    7 +
 .../app/system/language/LanguageManager.java       |  161 +
 .../app/system/language/TGResourceBundle.java      |   79 +
 .../app/system/plugins/TGPluginInfoHandler.java    |   13 +
 .../system/plugins/TGPluginPropertiesHandler.java  |   22 +
 .../system/plugins/TGPluginSettingsAdapter.java    |   43 +
 .../system/plugins/TGPluginSettingsHandler.java    |    9 +
 .../system/plugins/TGPluginSettingsManager.java    |   49 +
 .../TGDefaultAndStoredPropertiesHandler.java       |   41 +
 .../system/properties/TGFilePropertiesHandler.java |   23 +
 .../system/properties/TGFilePropertiesReader.java  |   30 +
 .../system/properties/TGFilePropertiesWriter.java  |   34 +
 .../app/system/properties/TGPropertiesAdapter.java |   24 +
 .../system/properties/TGPropertiesBaseHandler.java |   20 +
 .../system/properties/TGPropertiesFactoryImpl.java |   12 +
 .../app/system/properties/TGPropertiesImpl.java    |   41 +
 .../properties/TGResourcePropertiesReader.java     |   26 +
 .../src/org/herac/tuxguitar/app/table/TGTable.java |  169 +
 .../tuxguitar/app/table/TGTableCanvasPainter.java  |   90 +
 .../herac/tuxguitar/app/table/TGTableColumn.java   |   73 +
 .../org/herac/tuxguitar/app/table/TGTableRow.java  |  186 +
 .../herac/tuxguitar/app/table/TGTableViewer.java   |  474 ++
 .../app/tools/browser/TGBrowserCollection.java     |   30 +
 .../app/tools/browser/TGBrowserCollectionInfo.java |   28 +
 .../app/tools/browser/TGBrowserConnection.java     |  225 +
 .../tools/browser/TGBrowserConnectionHandler.java  |   23 +
 .../app/tools/browser/TGBrowserException.java      |   23 +
 .../app/tools/browser/TGBrowserFactoryHandler.java |    9 +
 .../app/tools/browser/TGBrowserManager.java        |  162 +
 .../app/tools/browser/base/TGBrowser.java          |   25 +
 .../app/tools/browser/base/TGBrowserData.java      |    9 +
 .../app/tools/browser/base/TGBrowserElement.java   |   23 +
 .../app/tools/browser/base/TGBrowserFactory.java   |   16 +
 .../app/tools/browser/dialog/TGBrowserBar.java     |   65 +
 .../browser/dialog/TGBrowserCollectionCombo.java   |   66 +
 .../app/tools/browser/dialog/TGBrowserDialog.java  |  393 +
 .../app/tools/browser/dialog/TGBrowserMenuBar.java |  217 +
 .../app/tools/browser/dialog/TGBrowserToolBar.java |  180 +
 .../browser/filesystem/TGBrowserDataDialog.java    |  138 +
 .../browser/filesystem/TGBrowserDataImpl.java      |   36 +
 .../filesystem/TGBrowserElementComparator.java     |   36 +
 .../browser/filesystem/TGBrowserElementImpl.java   |   45 +
 .../browser/filesystem/TGBrowserFactoryImpl.java   |   38 +
 .../tools/browser/filesystem/TGBrowserImpl.java    |   58 +
 .../app/tools/browser/plugin/TGBrowserPlugin.java  |   45 +
 .../app/tools/browser/xml/TGBrowserReader.java     |   64 +
 .../app/tools/browser/xml/TGBrowserWriter.java     |  107 +
 .../tuxguitar/app/tools/custom/TGCustomTool.java   |   22 +
 .../app/tools/custom/TGCustomToolManager.java      |   36 +
 .../app/tools/custom/TGToolItemPlugin.java         |   66 +
 .../tuxguitar/app/tools/scale/ScaleEditor.java     |   79 +
 .../herac/tuxguitar/app/tools/scale/ScaleInfo.java |   19 +
 .../tuxguitar/app/tools/scale/ScaleListener.java   |    7 +
 .../tuxguitar/app/tools/scale/ScaleManager.java    |  135 +
 .../tuxguitar/app/tools/scale/xml/ScaleReader.java |   64 +
 .../tuxguitar/app/tools/template/TGTemplate.java   |   27 +
 .../app/tools/template/TGTemplateManager.java      |   66 +
 .../app/tools/template/TGTemplateReader.java       |   60 +
 .../herac/tuxguitar/app/transport/TGTransport.java |  501 ++
 .../app/transport/TGTransportListener.java         |   78 +
 .../tuxguitar/app/undo/CannotRedoException.java    |   34 +
 .../tuxguitar/app/undo/CannotUndoException.java    |   34 +
 .../org/herac/tuxguitar/app/undo/UndoableEdit.java |   14 +
 .../herac/tuxguitar/app/undo/UndoableManager.java  |  125 +
 .../app/undo/undoables/UndoableCaretHelper.java    |   37 +
 .../app/undo/undoables/UndoableJoined.java         |   62 +
 .../undoables/channel/UndoableChannelGeneric.java  |   90 +
 .../undoables/channel/UndoableModifyChannel.java   |   91 +
 .../custom/UndoableChangeAlternativeRepeat.java    |   79 +
 .../undo/undoables/custom/UndoableChangeClef.java  |  123 +
 .../custom/UndoableChangeCloseRepeat.java          |   82 +
 .../undo/undoables/custom/UndoableChangeInfo.java  |   98 +
 .../custom/UndoableChangeKeySignature.java         |  123 +
 .../undoables/custom/UndoableChangeMarker.java     |   74 +
 .../undoables/custom/UndoableChangeOpenRepeat.java |   75 +
 .../undo/undoables/custom/UndoableChangeTempo.java |   89 +
 .../custom/UndoableChangeTimeSignature.java        |   72 +
 .../custom/UndoableChangeTripletFeel.java          |  118 +
 .../undo/undoables/measure/UndoableAddMeasure.java |   62 +
 .../undoables/measure/UndoableInsertMeasure.java   |   77 +
 .../undoables/measure/UndoableMeasureGeneric.java  |  102 +
 .../undoables/measure/UndoableRemoveMeasure.java   |   91 +
 .../undoables/measure/UndoableReplaceMeasures.java |  105 +
 .../app/undo/undoables/track/UndoableAddTrack.java |   68 +
 .../undo/undoables/track/UndoableCloneTrack.java   |   69 +
 .../undoables/track/UndoableMoveTrackDown.java     |   67 +
 .../undo/undoables/track/UndoableMoveTrackUp.java  |   66 +
 .../undo/undoables/track/UndoableRemoveTrack.java  |   73 +
 .../undo/undoables/track/UndoableTrackChannel.java |  111 +
 .../undo/undoables/track/UndoableTrackGeneric.java |  107 +
 .../undo/undoables/track/UndoableTrackInfo.java    |   80 +
 .../undoables/track/UndoableTrackInstrument.java   |   75 +
 .../undo/undoables/track/UndoableTrackLyric.java   |   77 +
 .../undoables/track/UndoableTrackSoloMute.java     |   92 +
 .../herac/tuxguitar/app/util/ArgumentParser.java   |  151 +
 .../herac/tuxguitar/app/util/ConfirmDialog.java    |   99 +
 .../org/herac/tuxguitar/app/util/DialogUtils.java  |   64 +
 .../org/herac/tuxguitar/app/util/FileChooser.java  |  166 +
 .../org/herac/tuxguitar/app/util/ImageUtils.java   |   58 +
 .../herac/tuxguitar/app/util/MessageDialog.java    |   83 +
 .../org/herac/tuxguitar/app/util/MidiTickUtil.java |   70 +
 .../org/herac/tuxguitar/app/util/TGFileUtils.java  |  294 +
 .../herac/tuxguitar/app/util/TGMusicKeyUtils.java  |  102 +
 .../src/org/herac/tuxguitar/app/util/TGSplash.java |   72 +
 .../herac/tuxguitar/app/util/WindowTitleUtil.java  |   81 +
 TuxGuitar/src/org/herac/tuxguitar/gui/TGMain.java  |   10 -
 .../src/org/herac/tuxguitar/gui/TuxGuitar.java     |  812 --
 .../org/herac/tuxguitar/gui/actions/Action.java    |  123 -
 .../herac/tuxguitar/gui/actions/ActionAdapter.java |   81 -
 .../herac/tuxguitar/gui/actions/ActionLock.java    |   30 -
 .../herac/tuxguitar/gui/actions/ActionManager.java |  366 -
 .../tuxguitar/gui/actions/caret/GoDownAction.java  |   29 -
 .../tuxguitar/gui/actions/caret/GoLeftAction.java  |   35 -
 .../tuxguitar/gui/actions/caret/GoRightAction.java |   52 -
 .../tuxguitar/gui/actions/caret/GoUpAction.java    |   29 -
 .../gui/actions/composition/ChangeClefAction.java  |  160 -
 .../gui/actions/composition/ChangeInfoAction.java  |  235 -
 .../composition/ChangeKeySignatureAction.java      |  171 -
 .../gui/actions/composition/ChangeTempoAction.java |  181 -
 .../composition/ChangeTimeSignatureAction.java     |  178 -
 .../composition/ChangeTripletFeelAction.java       |  166 -
 .../actions/duration/ChangeDivisionTypeAction.java |   95 -
 .../duration/ChangeDottedDurationAction.java       |   54 -
 .../duration/ChangeDoubleDottedDurationAction.java |   54 -
 .../actions/duration/DecrementDurationAction.java  |   58 -
 .../actions/duration/IncrementDurationAction.java  |   58 -
 .../actions/duration/SetEighthDurationAction.java  |   56 -
 .../actions/duration/SetHalfDurationAction.java    |   56 -
 .../actions/duration/SetQuarterDurationAction.java |   56 -
 .../duration/SetSixteenthDurationAction.java       |   56 -
 .../duration/SetSixtyFourthDurationAction.java     |   56 -
 .../duration/SetThirtySecondDurationAction.java    |   56 -
 .../actions/duration/SetWholeDurationAction.java   |   56 -
 .../tuxguitar/gui/actions/edit/RedoAction.java     |   37 -
 .../actions/edit/SetMouseModeEditionAction.java    |   30 -
 .../actions/edit/SetMouseModeSelectionAction.java  |   30 -
 .../gui/actions/edit/SetNaturalKeyAction.java      |   29 -
 .../gui/actions/edit/SetVoice1Action.java          |   29 -
 .../gui/actions/edit/SetVoice2Action.java          |   29 -
 .../tuxguitar/gui/actions/edit/UndoAction.java     |   37 -
 .../effects/ChangeAccentuatedNoteAction.java       |   46 -
 .../gui/actions/effects/ChangeBendNoteAction.java  |   55 -
 .../gui/actions/effects/ChangeDeadNoteAction.java  |   60 -
 .../gui/actions/effects/ChangeFadeInAction.java    |   46 -
 .../gui/actions/effects/ChangeGhostNoteAction.java |   46 -
 .../gui/actions/effects/ChangeGraceNoteAction.java |   55 -
 .../actions/effects/ChangeHammerNoteAction.java    |   46 -
 .../actions/effects/ChangeHarmonicNoteAction.java  |   55 -
 .../effects/ChangeHeavyAccentuatedNoteAction.java  |   46 -
 .../gui/actions/effects/ChangePalmMuteAction.java  |   46 -
 .../gui/actions/effects/ChangePoppingAction.java   |   46 -
 .../gui/actions/effects/ChangeSlappingAction.java  |   46 -
 .../gui/actions/effects/ChangeSlideNoteAction.java |   46 -
 .../gui/actions/effects/ChangeStaccatoAction.java  |   46 -
 .../gui/actions/effects/ChangeTappingAction.java   |   46 -
 .../actions/effects/ChangeTremoloBarAction.java    |   55 -
 .../effects/ChangeTremoloPickingAction.java        |   55 -
 .../gui/actions/effects/ChangeTrillNoteAction.java |   55 -
 .../actions/effects/ChangeVibratoNoteAction.java   |   46 -
 .../tuxguitar/gui/actions/file/ExitAction.java     |   31 -
 .../gui/actions/file/ExportSongAction.java         |  103 -
 .../gui/actions/file/FileActionUtils.java          |  188 -
 .../gui/actions/file/ImportSongAction.java         |  120 -
 .../tuxguitar/gui/actions/file/NewFileAction.java  |   79 -
 .../tuxguitar/gui/actions/file/OpenFileAction.java |  119 -
 .../tuxguitar/gui/actions/file/OpenURLAction.java  |  183 -
 .../tuxguitar/gui/actions/file/PrintAction.java    |  235 -
 .../gui/actions/file/PrintPreviewAction.java       |  172 -
 .../gui/actions/file/SaveAsFileAction.java         |   45 -
 .../tuxguitar/gui/actions/file/SaveFileAction.java |   46 -
 .../gui/actions/help/ShowAboutAction.java          |   36 -
 .../tuxguitar/gui/actions/help/ShowDocAction.java  |   35 -
 .../gui/actions/insert/InsertChordAction.java      |  120 -
 .../gui/actions/insert/InsertTextAction.java       |  153 -
 .../actions/insert/RepeatAlternativeAction.java    |  185 -
 .../gui/actions/insert/RepeatCloseAction.java      |  142 -
 .../gui/actions/insert/RepeatOpenAction.java       |   46 -
 .../layout/SetChordDiagramEnabledAction.java       |   32 -
 .../actions/layout/SetChordNameEnabledAction.java  |   32 -
 .../gui/actions/layout/SetCompactViewAction.java   |   32 -
 .../gui/actions/layout/SetLinearLayoutAction.java  |   33 -
 .../actions/layout/SetMultitrackViewAction.java    |   32 -
 .../gui/actions/layout/SetPageLayoutAction.java    |   33 -
 .../gui/actions/layout/SetScoreEnabledAction.java  |   35 -
 .../actions/layout/SetTablatureEnabledAction.java  |   35 -
 .../gui/actions/marker/AddMarkerAction.java        |   48 -
 .../gui/actions/marker/GoFirstMarkerAction.java    |   31 -
 .../gui/actions/marker/GoLastMarkerAction.java     |   31 -
 .../gui/actions/marker/GoNextMarkerAction.java     |   34 -
 .../gui/actions/marker/GoPreviousMarkerAction.java |   34 -
 .../gui/actions/marker/ListMarkersAction.java      |   35 -
 .../gui/actions/measure/AddMeasureAction.java      |  169 -
 .../gui/actions/measure/CleanMeasureAction.java    |  179 -
 .../gui/actions/measure/CopyMeasureAction.java     |  173 -
 .../gui/actions/measure/GoFirstMeasureAction.java  |   43 -
 .../gui/actions/measure/GoLastMeasureAction.java   |   43 -
 .../gui/actions/measure/GoNextMeasureAction.java   |   66 -
 .../actions/measure/GoPreviousMeasureAction.java   |   43 -
 .../gui/actions/measure/PasteMeasureAction.java    |  150 -
 .../gui/actions/measure/RemoveMeasureAction.java   |  179 -
 .../gui/actions/note/ChangeNoteAction.java         |  134 -
 .../gui/actions/note/ChangeTiedNoteAction.java     |   99 -
 .../gui/actions/note/ChangeVelocityAction.java     |   52 -
 .../gui/actions/note/CleanBeatAction.java          |   48 -
 .../actions/note/DecrementNoteSemitoneAction.java  |   47 -
 .../actions/note/IncrementNoteSemitoneAction.java  |   47 -
 .../gui/actions/note/InsertNoteAction.java         |   57 -
 .../gui/actions/note/MoveBeatsCustomAction.java    |  335 -
 .../gui/actions/note/MoveBeatsLeftAction.java      |   53 -
 .../gui/actions/note/MoveBeatsRightAction.java     |   53 -
 .../gui/actions/note/RemoveNoteAction.java         |   57 -
 .../gui/actions/note/RemoveUnusedVoiceAction.java  |   52 -
 .../gui/actions/note/SetStrokeDownAction.java      |   55 -
 .../gui/actions/note/SetStrokeUpAction.java        |   55 -
 .../gui/actions/note/SetVoiceAutoAction.java       |   63 -
 .../gui/actions/note/SetVoiceDownAction.java       |   63 -
 .../gui/actions/note/SetVoiceUpAction.java         |   63 -
 .../gui/actions/note/ShiftNoteDownAction.java      |   50 -
 .../gui/actions/note/ShiftNoteUpAction.java        |   50 -
 .../gui/actions/settings/EditConfigAction.java     |   31 -
 .../actions/settings/EditKeyBindingsAction.java    |   31 -
 .../gui/actions/settings/EditPluginsAction.java    |  218 -
 .../gui/actions/system/DisposeAction.java          |  118 -
 .../tuxguitar/gui/actions/tools/ScaleAction.java   |   30 -
 .../gui/actions/tools/TGBrowserAction.java         |   22 -
 .../gui/actions/tools/TransposeAction.java         |  230 -
 .../gui/actions/track/AddTrackAction.java          |   46 -
 .../gui/actions/track/CloneTrackAction.java        |   44 -
 .../gui/actions/track/EditLyricsAction.java        |   34 -
 .../gui/actions/track/GoFirstTrackAction.java      |   35 -
 .../gui/actions/track/GoLastTrackAction.java       |   35 -
 .../gui/actions/track/GoNextTrackAction.java       |   35 -
 .../gui/actions/track/GoPreviousTrackAction.java   |   35 -
 .../gui/actions/track/GoToTrackAction.java         |   34 -
 .../gui/actions/track/MoveTrackDownAction.java     |   46 -
 .../gui/actions/track/MoveTrackUpAction.java       |   46 -
 .../gui/actions/track/RemoveTrackAction.java       |   60 -
 .../gui/actions/track/TrackPropertiesAction.java   |  648 --
 .../transport/TransportMetronomeAction.java        |   19 -
 .../gui/actions/transport/TransportModeAction.java |  463 --
 .../gui/actions/transport/TransportPlayAction.java |   29 -
 .../transport/TransportSetLoopEHeaderAction.java   |   27 -
 .../transport/TransportSetLoopSHeaderAction.java   |   27 -
 .../gui/actions/transport/TransportStopAction.java |   30 -
 .../gui/actions/view/ShowFretBoardAction.java      |   37 -
 .../gui/actions/view/ShowMatrixAction.java         |   34 -
 .../gui/actions/view/ShowMixerAction.java          |   34 -
 .../gui/actions/view/ShowPianoAction.java          |   34 -
 .../gui/actions/view/ShowTransportAction.java      |   34 -
 .../clipboard/CannotInsertTransferException.java   |   34 -
 .../herac/tuxguitar/gui/clipboard/ClipBoard.java   |   40 -
 .../gui/clipboard/MeasureTransferable.java         |  130 -
 .../tuxguitar/gui/clipboard/Transferable.java      |   19 -
 .../herac/tuxguitar/gui/editors/EditorCache.java   |  144 -
 .../tuxguitar/gui/editors/FretBoardEditor.java     |  114 -
 .../herac/tuxguitar/gui/editors/PianoEditor.java   |  122 -
 .../tuxguitar/gui/editors/TGEditorManager.java     |   83 -
 .../gui/editors/TGExternalBeatViewerListener.java  |   10 -
 .../org/herac/tuxguitar/gui/editors/TGPainter.java |  195 -
 .../tuxguitar/gui/editors/TGPainterUtils.java      |   14 -
 .../tuxguitar/gui/editors/TGRedrawListener.java    |   10 -
 .../tuxguitar/gui/editors/TGUpdateListener.java    |   10 -
 .../tuxguitar/gui/editors/TablatureEditor.java     |   87 -
 .../gui/editors/chord/ChordCreatorListener.java    |    9 -
 .../gui/editors/chord/ChordCreatorUtil.java        | 1216 ---
 .../gui/editors/chord/ChordCustomList.java         |  256 -
 .../tuxguitar/gui/editors/chord/ChordDatabase.java |  110 -
 .../tuxguitar/gui/editors/chord/ChordDialog.java   |  252 -
 .../tuxguitar/gui/editors/chord/ChordEditor.java   |  502 --
 .../tuxguitar/gui/editors/chord/ChordList.java     |  254 -
 .../gui/editors/chord/ChordNamingConvention.java   |   94 -
 .../gui/editors/chord/ChordRecognizer.java         |  658 --
 .../tuxguitar/gui/editors/chord/ChordSelector.java |  534 --
 .../tuxguitar/gui/editors/chord/ChordSettings.java |  171 -
 .../gui/editors/chord/ChordSettingsDialog.java     |  195 -
 .../gui/editors/chord/CustomChordManager.java      |   76 -
 .../tuxguitar/gui/editors/chord/xml/ChordXML.java  |   14 -
 .../gui/editors/chord/xml/ChordXMLReader.java      |   94 -
 .../gui/editors/chord/xml/ChordXMLWriter.java      |  121 -
 .../tuxguitar/gui/editors/effects/BendEditor.java  |  446 -
 .../tuxguitar/gui/editors/effects/GraceEditor.java |  319 -
 .../gui/editors/effects/HarmonicEditor.java        |  221 -
 .../gui/editors/effects/StrokeEditor.java          |  170 -
 .../gui/editors/effects/TremoloBarEditor.java      |  442 -
 .../gui/editors/effects/TremoloPickingEditor.java  |  149 -
 .../tuxguitar/gui/editors/effects/TrillEditor.java |  170 -
 .../tuxguitar/gui/editors/fretboard/FretBoard.java |  736 --
 .../gui/editors/fretboard/FretBoardConfig.java     |  358 -
 .../tuxguitar/gui/editors/lyric/LyricEditor.java   |  277 -
 .../gui/editors/lyric/LyricModifyListener.java     |   55 -
 .../tuxguitar/gui/editors/matrix/MatrixConfig.java |  341 -
 .../tuxguitar/gui/editors/matrix/MatrixEditor.java |  953 ---
 .../herac/tuxguitar/gui/editors/piano/Piano.java   |  600 --
 .../tuxguitar/gui/editors/piano/PianoConfig.java   |  240 -
 .../org/herac/tuxguitar/gui/editors/tab/Caret.java |  351 -
 .../tuxguitar/gui/editors/tab/TGBeatGroup.java     |  203 -
 .../tuxguitar/gui/editors/tab/TGBeatImpl.java      |  404 -
 .../tuxguitar/gui/editors/tab/TGBeatSpacing.java   |   44 -
 .../tuxguitar/gui/editors/tab/TGChordImpl.java     |  448 -
 .../tuxguitar/gui/editors/tab/TGFactoryImpl.java   |   55 -
 .../tuxguitar/gui/editors/tab/TGLyricImpl.java     |   73 -
 .../tuxguitar/gui/editors/tab/TGMeasureBuffer.java |   80 -
 .../gui/editors/tab/TGMeasureHeaderImpl.java       |  157 -
 .../tuxguitar/gui/editors/tab/TGMeasureImpl.java   | 1316 ---
 .../tuxguitar/gui/editors/tab/TGNoteImpl.java      |  656 --
 .../tuxguitar/gui/editors/tab/TGResources.java     |  486 --
 .../herac/tuxguitar/gui/editors/tab/TGSpacing.java |   53 -
 .../tuxguitar/gui/editors/tab/TGTextImpl.java      |   17 -
 .../tuxguitar/gui/editors/tab/TGTrackImpl.java     |   81 -
 .../tuxguitar/gui/editors/tab/TGTrackSpacing.java  |   90 -
 .../tuxguitar/gui/editors/tab/TGVoiceImpl.java     |  649 --
 .../herac/tuxguitar/gui/editors/tab/Tablature.java |  340 -
 .../gui/editors/tab/TablaturePaintListener.java    |   29 -
 .../tuxguitar/gui/editors/tab/TablatureUtil.java   |   30 -
 .../tuxguitar/gui/editors/tab/edit/EditorKit.java  |  227 -
 .../tuxguitar/gui/editors/tab/edit/MouseKit.java   |  356 -
 .../gui/editors/tab/layout/LinearViewLayout.java   |  133 -
 .../gui/editors/tab/layout/PageViewLayout.java     |  235 -
 .../gui/editors/tab/layout/PrinterViewLayout.java  |  496 --
 .../gui/editors/tab/layout/ViewLayout.java         |  872 --
 .../gui/editors/tab/painters/TGClefPainter.java    |  345 -
 .../tab/painters/TGKeySignaturePainter.java        |  144 -
 .../gui/editors/tab/painters/TGNotePainter.java    |   47 -
 .../gui/editors/tab/painters/TGSilencePainter.java |  254 -
 .../gui/editors/tab/painters/TGTempoPainter.java   |   21 -
 .../editors/tab/painters/TGTripletFeelPainter.java |  122 -
 .../gui/help/about/AboutContentReader.java         |   50 -
 .../tuxguitar/gui/help/about/AboutDialog.java      |  154 -
 .../tuxguitar/gui/help/doc/TGDocumentation.java    |   72 -
 .../herac/tuxguitar/gui/helper/FileHistory.java    |  236 -
 .../org/herac/tuxguitar/gui/helper/SyncThread.java |   39 -
 .../org/herac/tuxguitar/gui/items/ItemBase.java    |   13 -
 .../org/herac/tuxguitar/gui/items/ItemManager.java |  448 -
 .../org/herac/tuxguitar/gui/items/MenuItems.java   |   22 -
 .../org/herac/tuxguitar/gui/items/ToolItems.java   |   35 -
 .../tuxguitar/gui/items/menu/BeatMenuItem.java     |  235 -
 .../tuxguitar/gui/items/menu/ChordMenuItem.java    |   96 -
 .../gui/items/menu/CompositionMenuItem.java        |  123 -
 .../tuxguitar/gui/items/menu/DurationMenuItem.java |  134 -
 .../tuxguitar/gui/items/menu/DynamicMenuItem.java  |  119 -
 .../tuxguitar/gui/items/menu/EditMenuItem.java     |  111 -
 .../tuxguitar/gui/items/menu/FileMenuItem.java     |  308 -
 .../tuxguitar/gui/items/menu/HelpMenuItem.java     |   63 -
 .../tuxguitar/gui/items/menu/MarkerMenuItem.java   |   99 -
 .../tuxguitar/gui/items/menu/MeasureMenuItem.java  |  125 -
 .../gui/items/menu/NoteEffectsMenuItem.java        |  239 -
 .../tuxguitar/gui/items/menu/ToolMenuItem.java     |  103 -
 .../tuxguitar/gui/items/menu/TrackMenuItem.java    |  137 -
 .../gui/items/menu/TransportMenuItem.java          |  134 -
 .../tuxguitar/gui/items/menu/ViewMenuItem.java     |  170 -
 .../tuxguitar/gui/items/tool/BeatToolItems.java    |  138 -
 .../gui/items/tool/CompositionToolItems.java       |   90 -
 .../gui/items/tool/DurationToolItems.java          |  245 -
 .../tuxguitar/gui/items/tool/DynamicToolItems.java |  131 -
 .../tuxguitar/gui/items/tool/EditToolItems.java    |  109 -
 .../tuxguitar/gui/items/tool/FileToolItems.java    |   83 -
 .../tuxguitar/gui/items/tool/LayoutToolItems.java  |   88 -
 .../tuxguitar/gui/items/tool/MarkerToolItems.java  |   93 -
 .../gui/items/tool/NoteEffectToolItems.java        |  251 -
 .../gui/items/tool/PropertiesToolItems.java        |   50 -
 .../tuxguitar/gui/items/tool/TrackToolItems.java   |   59 -
 .../gui/items/tool/TransportToolItems.java         |  140 -
 .../tuxguitar/gui/items/tool/ViewToolItems.java    |   69 -
 .../tuxguitar/gui/items/xml/ToolBarsReader.java    |   60 -
 .../tuxguitar/gui/items/xml/ToolBarsWriter.java    |   83 -
 .../herac/tuxguitar/gui/marker/MarkerEditor.java   |  210 -
 .../org/herac/tuxguitar/gui/marker/MarkerList.java |  298 -
 .../tuxguitar/gui/marker/MarkerNavigator.java      |   33 -
 .../src/org/herac/tuxguitar/gui/mixer/TGMixer.java |  275 -
 .../herac/tuxguitar/gui/mixer/TGMixerTrack.java    |  393 -
 .../tuxguitar/gui/mixer/TGMixerTrackChannel.java   |  206 -
 .../herac/tuxguitar/gui/printer/PrintDocument.java |   22 -
 .../herac/tuxguitar/gui/printer/PrintPreview.java  |  185 -
 .../herac/tuxguitar/gui/printer/PrintStyles.java   |   68 -
 .../tuxguitar/gui/printer/PrintStylesDialog.java   |  190 -
 .../gui/system/config/TGConfigDefaults.java        |  153 -
 .../gui/system/config/TGConfigEditor.java          |  323 -
 .../tuxguitar/gui/system/config/TGConfigKeys.java  |   95 -
 .../gui/system/config/TGConfigManager.java         |  242 -
 .../gui/system/config/TGConfigManagerImpl.java     |   26 -
 .../gui/system/config/items/LanguageOption.java    |  178 -
 .../gui/system/config/items/MainOption.java        |  135 -
 .../tuxguitar/gui/system/config/items/Option.java  |  228 -
 .../gui/system/config/items/SkinOption.java        |  265 -
 .../gui/system/config/items/SoundOption.java       |  156 -
 .../gui/system/config/items/StylesOption.java      |  361 -
 .../gui/system/config/items/ToolBarsOption.java    |  175 -
 .../tuxguitar/gui/system/icons/IconLoader.java     |    7 -
 .../tuxguitar/gui/system/icons/IconManager.java    |  828 --
 .../gui/system/keybindings/KeyBinding.java         |  127 -
 .../gui/system/keybindings/KeyBindingAction.java   |   28 -
 .../keybindings/KeyBindingActionDefaults.java      |   30 -
 .../keybindings/KeyBindingActionManager.java       |  100 -
 .../system/keybindings/KeyBindingConstants.java    |  118 -
 .../system/keybindings/KeyBindingReserveds.java    |   75 -
 .../keybindings/editor/KeyBindingEditor.java       |  235 -
 .../keybindings/editor/KeyBindingSelector.java     |  154 -
 .../system/keybindings/xml/KeyBindingReader.java   |  116 -
 .../system/keybindings/xml/KeyBindingWriter.java   |  101 -
 .../gui/system/language/LanguageLoader.java        |    7 -
 .../gui/system/language/LanguageManager.java       |  161 -
 .../gui/system/language/TGResourceBundle.java      |   79 -
 .../tuxguitar/gui/system/plugins/TGPlugin.java     |   19 -
 .../gui/system/plugins/TGPluginConfigManager.java  |   39 -
 .../gui/system/plugins/TGPluginException.java      |   23 -
 .../gui/system/plugins/TGPluginManager.java        |   96 -
 .../gui/system/plugins/TGPluginProperties.java     |   48 -
 .../gui/system/plugins/TGPluginSetup.java          |    9 -
 .../gui/system/plugins/base/TGBrowserPlugin.java   |   43 -
 .../gui/system/plugins/base/TGExporterPlugin.java  |   46 -
 .../gui/system/plugins/base/TGImporterPlugin.java  |   46 -
 .../system/plugins/base/TGInputStreamPlugin.java   |   43 -
 .../base/TGMidiOutputPortProviderPlugin.java       |   55 -
 .../base/TGMidiSequencerProviderPlugin.java        |   55 -
 .../system/plugins/base/TGOutputStreamPlugin.java  |   43 -
 .../gui/system/plugins/base/TGPluginAdapter.java   |   22 -
 .../gui/system/plugins/base/TGPluginList.java      |   49 -
 .../gui/system/plugins/base/TGToolItemPlugin.java  |   67 -
 .../src/org/herac/tuxguitar/gui/table/TGTable.java |  161 -
 .../tuxguitar/gui/table/TGTableCanvasPainter.java  |   88 -
 .../herac/tuxguitar/gui/table/TGTableColumn.java   |   73 -
 .../org/herac/tuxguitar/gui/table/TGTableRow.java  |  169 -
 .../herac/tuxguitar/gui/table/TGTableViewer.java   |  360 -
 .../gui/tools/browser/TGBrowserCollection.java     |   30 -
 .../gui/tools/browser/TGBrowserCollectionInfo.java |   28 -
 .../gui/tools/browser/TGBrowserConnection.java     |  225 -
 .../tools/browser/TGBrowserConnectionHandler.java  |   23 -
 .../gui/tools/browser/TGBrowserException.java      |   23 -
 .../gui/tools/browser/TGBrowserFactoryHandler.java |    9 -
 .../gui/tools/browser/TGBrowserManager.java        |  162 -
 .../gui/tools/browser/base/TGBrowser.java          |   25 -
 .../gui/tools/browser/base/TGBrowserData.java      |    9 -
 .../gui/tools/browser/base/TGBrowserElement.java   |   23 -
 .../gui/tools/browser/base/TGBrowserFactory.java   |   16 -
 .../gui/tools/browser/dialog/TGBrowserBar.java     |   65 -
 .../browser/dialog/TGBrowserCollectionCombo.java   |   66 -
 .../gui/tools/browser/dialog/TGBrowserDialog.java  |  393 -
 .../gui/tools/browser/dialog/TGBrowserMenuBar.java |  217 -
 .../gui/tools/browser/dialog/TGBrowserToolBar.java |  180 -
 .../browser/filesystem/TGBrowserDataDialog.java    |  138 -
 .../browser/filesystem/TGBrowserDataImpl.java      |   36 -
 .../filesystem/TGBrowserElementComparator.java     |   36 -
 .../browser/filesystem/TGBrowserElementImpl.java   |   45 -
 .../browser/filesystem/TGBrowserFactoryImpl.java   |   38 -
 .../tools/browser/filesystem/TGBrowserImpl.java    |   58 -
 .../gui/tools/browser/xml/TGBrowserReader.java     |   64 -
 .../gui/tools/browser/xml/TGBrowserWriter.java     |  107 -
 .../tuxguitar/gui/tools/custom/TGCustomTool.java   |   22 -
 .../gui/tools/custom/TGCustomToolManager.java      |   36 -
 .../tuxguitar/gui/tools/scale/ScaleEditor.java     |   79 -
 .../herac/tuxguitar/gui/tools/scale/ScaleInfo.java |   19 -
 .../tuxguitar/gui/tools/scale/ScaleListener.java   |    7 -
 .../tuxguitar/gui/tools/scale/ScaleManager.java    |  135 -
 .../tuxguitar/gui/tools/scale/xml/ScaleReader.java |   64 -
 .../herac/tuxguitar/gui/transport/TGTransport.java |  500 --
 .../gui/transport/TGTransportListener.java         |   69 -
 .../tuxguitar/gui/undo/CannotRedoException.java    |   34 -
 .../tuxguitar/gui/undo/CannotUndoException.java    |   34 -
 .../org/herac/tuxguitar/gui/undo/UndoableEdit.java |   14 -
 .../herac/tuxguitar/gui/undo/UndoableManager.java  |  125 -
 .../gui/undo/undoables/UndoableCaretHelper.java    |   37 -
 .../gui/undo/undoables/UndoableJoined.java         |   62 -
 .../custom/UndoableChangeAlternativeRepeat.java    |   79 -
 .../undo/undoables/custom/UndoableChangeClef.java  |  123 -
 .../custom/UndoableChangeCloseRepeat.java          |   82 -
 .../undo/undoables/custom/UndoableChangeInfo.java  |   98 -
 .../custom/UndoableChangeKeySignature.java         |  123 -
 .../undoables/custom/UndoableChangeMarker.java     |   74 -
 .../undoables/custom/UndoableChangeOpenRepeat.java |   75 -
 .../undo/undoables/custom/UndoableChangeTempo.java |   89 -
 .../custom/UndoableChangeTimeSignature.java        |   72 -
 .../custom/UndoableChangeTripletFeel.java          |  118 -
 .../undo/undoables/measure/UndoableAddMeasure.java |   62 -
 .../undoables/measure/UndoableInsertMeasure.java   |   77 -
 .../undoables/measure/UndoableMeasureGeneric.java  |  102 -
 .../undoables/measure/UndoableRemoveMeasure.java   |   91 -
 .../undoables/measure/UndoableReplaceMeasures.java |  105 -
 .../gui/undo/undoables/track/UndoableAddTrack.java |   70 -
 .../undo/undoables/track/UndoableCloneTrack.java   |   71 -
 .../undoables/track/UndoableMoveTrackDown.java     |   69 -
 .../undo/undoables/track/UndoableMoveTrackUp.java  |   68 -
 .../undo/undoables/track/UndoableRemoveTrack.java  |   75 -
 .../undo/undoables/track/UndoableTrackChannel.java |  109 -
 .../undo/undoables/track/UndoableTrackGeneric.java |  109 -
 .../undo/undoables/track/UndoableTrackInfo.java    |   82 -
 .../undoables/track/UndoableTrackInstrument.java   |   83 -
 .../undo/undoables/track/UndoableTrackLyric.java   |   77 -
 .../undoables/track/UndoableTrackSoloMute.java     |   94 -
 .../herac/tuxguitar/gui/util/ArgumentParser.java   |  151 -
 .../herac/tuxguitar/gui/util/ConfirmDialog.java    |   99 -
 .../org/herac/tuxguitar/gui/util/DialogUtils.java  |   64 -
 .../org/herac/tuxguitar/gui/util/FileChooser.java  |  166 -
 .../org/herac/tuxguitar/gui/util/ImageUtils.java   |   58 -
 .../herac/tuxguitar/gui/util/MessageDialog.java    |   83 -
 .../org/herac/tuxguitar/gui/util/MidiTickUtil.java |   70 -
 .../org/herac/tuxguitar/gui/util/TGFileUtils.java  |  235 -
 .../herac/tuxguitar/gui/util/TGMusicKeyUtils.java  |  102 -
 .../src/org/herac/tuxguitar/gui/util/TGSplash.java |   70 -
 .../herac/tuxguitar/gui/util/WindowTitleUtil.java  |   81 -
 .../tuxguitar/io/base/TGFileFormatManager.java     |  154 -
 .../herac/tuxguitar/io/base/TGInputStreamBase.java |   18 -
 .../tuxguitar/io/base/TGOutputStreamBase.java      |   18 -
 .../org/herac/tuxguitar/io/tg/TGInputStream.java   |  763 --
 .../org/herac/tuxguitar/io/tg/TGOutputStream.java  |  707 --
 .../src/org/herac/tuxguitar/io/tg/TGStream.java    |  203 -
 .../tuxguitar/player/base/MidiControllers.java     |   29 -
 .../tuxguitar/player/base/MidiOutputPort.java      |    7 -
 .../herac/tuxguitar/player/base/MidiPlayer.java    |  855 --
 .../tuxguitar/player/base/MidiPlayerException.java |   15 -
 .../tuxguitar/player/base/MidiPlayerListener.java  |   10 -
 .../herac/tuxguitar/player/base/MidiReceiver.java  |   19 -
 .../tuxguitar/player/base/MidiSequenceHandler.java |   32 -
 .../tuxguitar/player/base/MidiSequenceParser.java  |  816 --
 .../tuxguitar/player/base/MidiSequencerEmpty.java  |  102 -
 .../tuxguitar/player/base/MidiTransmitter.java     |  106 -
 .../tuxguitar/player/impl/sequencer/MidiEvent.java |   73 -
 .../player/impl/sequencer/MidiEventDispacher.java  |   35 -
 .../impl/sequencer/MidiSequenceHandlerImpl.java    |   47 -
 .../player/impl/sequencer/MidiSequencerImpl.java   |  181 -
 .../herac/tuxguitar/song/factory/TGFactory.java    |  194 -
 .../tuxguitar/song/managers/TGMeasureManager.java  | 2400 ------
 .../tuxguitar/song/managers/TGSongManager.java     | 1044 ---
 .../tuxguitar/song/managers/TGTrackManager.java    |  346 -
 .../org/herac/tuxguitar/song/models/TGChannel.java |  146 -
 .../tuxguitar/song/models/TGDivisionType.java      |   76 -
 .../org/herac/tuxguitar/song/models/TGMeasure.java |  165 -
 .../herac/tuxguitar/song/models/TGNoteEffect.java  |  390 -
 .../org/herac/tuxguitar/song/models/TGSong.java    |  223 -
 .../org/herac/tuxguitar/song/models/TGTrack.java   |  199 -
 .../org/herac/tuxguitar/util/TGLibraryLoader.java  |   61 -
 .../org/herac/tuxguitar/util/TGSynchronizer.java   |   73 -
 .../src/org/herac/tuxguitar/util/TGVersion.java    |   47 -
 TuxGuitar/xml/build-fedora.xml                     |  150 +
 TuxGuitar/xml/build-freebsd.xml                    |    2 +-
 TuxGuitar/xml/build-linux.xml                      |    2 +-
 TuxGuitar/xml/build-mac.xml                        |    2 +-
 TuxGuitar/xml/build-ubuntu.xml                     |    2 +-
 TuxGuitar/xml/build-windows.xml                    |    4 +-
 build-scripts/.project                             |   11 +
 .../tuxguitar-alsa-linux-x86/pom.xml               |  126 +
 .../tuxguitar-alsa-linux-x86_64/pom.xml            |  126 +
 .../tuxguitar-fluidsynth-linux-x86/pom.xml         |  126 +
 .../tuxguitar-fluidsynth-linux-x86_64/pom.xml      |  126 +
 .../include/fluidsynth.h                           |  102 +
 .../include/fluidsynth/audio.h                     |   70 +
 .../include/fluidsynth/event.h                     |  123 +
 .../include/fluidsynth/gen.h                       |  135 +
 .../include/fluidsynth/log.h                       |   83 +
 .../include/fluidsynth/midi.h                      |  118 +
 .../include/fluidsynth/misc.h                      |   65 +
 .../include/fluidsynth/mod.h                       |  112 +
 .../include/fluidsynth/ramsfont.h                  |  113 +
 .../include/fluidsynth/seq.h                       |  109 +
 .../include/fluidsynth/seqbind.h                   |   44 +
 .../include/fluidsynth/settings.h                  |  223 +
 .../include/fluidsynth/sfont.h                     |  193 +
 .../include/fluidsynth/shell.h                     |  137 +
 .../include/fluidsynth/synth.h                     |  700 ++
 .../include/fluidsynth/types.h                     |   66 +
 .../include/fluidsynth/version.h                   |   44 +
 .../include/fluidsynth/voice.h                     |   97 +
 .../lib/fluidsynth.dll                             |  Bin 0 -> 145408 bytes
 .../tuxguitar-fluidsynth-windows-x86/pom.xml       |  148 +
 .../tuxguitar-jack-linux-x86/pom.xml               |  135 +
 .../tuxguitar-jack-linux-x86_64/pom.xml            |  135 +
 .../include/jack/control.h                         |  563 ++
 .../include/jack/intclient.h                       |  130 +
 .../tuxguitar-jack-windows-x86/include/jack/jack.h | 1102 +++
 .../include/jack/jslist.h                          |  289 +
 .../include/jack/midiport.h                        |  159 +
 .../include/jack/ringbuffer.h                      |  243 +
 .../include/jack/statistics.h                      |   57 +
 .../include/jack/systemdeps.h                      |   62 +
 .../include/jack/thread.h                          |  155 +
 .../include/jack/transport.h                       |  246 +
 .../include/jack/types.h                           |  647 ++
 .../tuxguitar-jack-windows-x86/include/pthread.h   | 1368 ++++
 .../tuxguitar-jack-windows-x86/include/sched.h     |  178 +
 .../tuxguitar-jack-windows-x86/include/semaphore.h |  166 +
 .../tuxguitar-jack-windows-x86/lib/libjack.a       |  Bin 0 -> 218254 bytes
 .../tuxguitar-jack-windows-x86/lib/pthreadVC2.dll  |  Bin 0 -> 86070 bytes
 .../tuxguitar-jack-windows-x86/pom.xml             |  158 +
 .../native-modules/tuxguitar-oss-linux-x86/pom.xml |  126 +
 .../tuxguitar-oss-linux-x86_64/pom.xml             |  126 +
 .../tuxguitar-winmm-windows-x86/pom.xml            |  143 +
 build-scripts/tuxguitar-linux-gcj/GNUmakefile      |   69 +
 .../makefiles/tuxguitar-alsa.mf                    |   90 +
 .../makefiles/tuxguitar-ascii.mf                   |   69 +
 .../makefiles/tuxguitar-browser-ftp.mf             |   69 +
 .../makefiles/tuxguitar-community.mf               |   69 +
 .../makefiles/tuxguitar-compat.mf                  |   69 +
 .../makefiles/tuxguitar-converter.mf               |   69 +
 .../makefiles/tuxguitar-fluidsynth.mf              |   90 +
 .../makefiles/tuxguitar-gm-settings.mf             |   69 +
 .../makefiles/tuxguitar-gm-utils.mf                |   53 +
 .../tuxguitar-linux-gcj/makefiles/tuxguitar-gpx.mf |   69 +
 .../tuxguitar-linux-gcj/makefiles/tuxguitar-gtp.mf |   69 +
 .../makefiles/tuxguitar-image.mf                   |   69 +
 .../makefiles/tuxguitar-jack-ui.mf                 |   75 +
 .../makefiles/tuxguitar-jack.mf                    |   90 +
 .../tuxguitar-linux-gcj/makefiles/tuxguitar-lib.mf |   50 +
 .../makefiles/tuxguitar-lilypond.mf                |   69 +
 .../makefiles/tuxguitar-midi.mf                    |   69 +
 .../makefiles/tuxguitar-musicxml.mf                |   69 +
 .../tuxguitar-linux-gcj/makefiles/tuxguitar-oss.mf |   90 +
 .../tuxguitar-linux-gcj/makefiles/tuxguitar-ptb.mf |   69 +
 .../tuxguitar-linux-gcj/makefiles/tuxguitar-svg.mf |   69 +
 .../tuxguitar-linux-gcj/makefiles/tuxguitar-tef.mf |   69 +
 .../makefiles/tuxguitar-tray.mf                    |   69 +
 .../tuxguitar-linux-gcj/makefiles/tuxguitar.mf     |  118 +
 .../tuxguitar-linux-gcj/src/resources/tuxguitar.sh |   10 +
 build-scripts/tuxguitar-linux-x86/pom.xml          |  328 +
 .../src/resources/dist/about_description.dist      |   10 +
 .../resources/dist/tuxguitar-plugin-settings.cfg   |    4 +
 .../src/resources/dist/tuxguitar.cfg               |   13 +
 .../tuxguitar-linux-x86/src/resources/tuxguitar.sh |   43 +
 build-scripts/tuxguitar-linux-x86_64/pom.xml       |  328 +
 .../src/resources/dist/about_description.dist      |   10 +
 .../src/resources/dist/tuxguitar.cfg               |   13 +
 .../src/resources/tuxguitar.sh                     |   43 +
 build-scripts/tuxguitar-macosx-cocoa-32/pom.xml    |  285 +
 .../src/resources/Contents/Info.plist              |   84 +
 .../Contents/MacOS/dist/about_description.dist     |   11 +
 .../Contents/MacOS/dist/tuxguitar-shortcuts.xml    |   66 +
 .../resources/Contents/MacOS/dist/tuxguitar.cfg    |   10 +
 .../src/resources/Contents/MacOS/lib/gervill.jar   |  Bin 0 -> 229088 bytes
 .../MacOS/lib/libtuxguitar-audiounit-jni.jnilib    |  Bin 0 -> 55960 bytes
 .../src/resources/Contents/MacOS/tuxguitar         |   29 +
 .../src/resources/Contents/Resources/icon.icns     |  Bin 0 -> 229344 bytes
 .../src/resources/Contents/Resources/tgdoc.icns    |  Bin 0 -> 48080 bytes
 build-scripts/tuxguitar-macosx-cocoa-64/pom.xml    |  285 +
 .../src/resources/Contents/Info.plist              |   84 +
 .../Contents/MacOS/dist/about_description.dist     |   11 +
 .../Contents/MacOS/dist/tuxguitar-shortcuts.xml    |   66 +
 .../resources/Contents/MacOS/dist/tuxguitar.cfg    |   10 +
 .../src/resources/Contents/MacOS/lib/gervill.jar   |  Bin 0 -> 229088 bytes
 .../MacOS/lib/libtuxguitar-audiounit-jni.jnilib    |  Bin 0 -> 55960 bytes
 .../src/resources/Contents/MacOS/tuxguitar         |   29 +
 .../src/resources/Contents/Resources/icon.icns     |  Bin 0 -> 229344 bytes
 .../src/resources/Contents/Resources/tgdoc.icns    |  Bin 0 -> 48080 bytes
 build-scripts/tuxguitar-windows-x86/pom.xml        |  329 +
 .../src/resources/dist/about_description.dist      |   10 +
 .../src/resources/dist/tuxguitar.cfg               |   18 +
 .../src/resources/dll/gdiplus.dll                  |  Bin 0 -> 1645320 bytes
 .../src/resources/dll/msvcr71.dll                  |  Bin 0 -> 348160 bytes
 .../src/resources/tuxguitar.bat                    |   18 +
 .../src/resources/tuxguitar.exe                    |  Bin 0 -> 241664 bytes
 .../src/resources/tuxguitar.lap                    |   24 +
 build_gcj.sh                                       |   76 -
 debian/README.Debian                               |   19 +
 debian/changelog                                   |  259 +
 debian/compat                                      |    1 +
 debian/control                                     |   75 +
 debian/copyright                                   |   20 +
 debian/rules                                       |   74 +
 debian/snapshot.mk                                 |  534 ++
 debian/source/format                               |    1 +
 debian/stamp-patched                               |    0
 debian/tuxguitar-alsa.install                      |    2 +
 debian/tuxguitar-fluidsynth.install                |    3 +
 debian/tuxguitar-jack.install                      |    3 +
 debian/tuxguitar-jsa.install                       |    1 +
 debian/tuxguitar-oss.install                       |    3 +
 debian/tuxguitar.docs                              |    2 +
 debian/tuxguitar.install                           |   19 +
 debian/tuxguitar.manpages                          |    1 +
 debian/tuxguitar.menu                              |    2 +
 debian/tuxguitar.postinst                          |   16 +
 debian/tuxguitar.postrm                            |   15 +
 debian/watch                                       |    2 +
 misc/env.sh                                        |   44 +
 misc/swt-3.3-gtk-linux-x86.patch                   |   84 +
 misc/tuxguitar.sh                                  |   66 +-
 pom.xml                                            |  360 +
 2863 files changed, 221642 insertions(+), 73661 deletions(-)

diff --git a/AUTHORS b/AUTHORS
index 9cd1a75..faf0d7f 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -61,7 +61,11 @@ Jose Gato
 
     * Mac version
     * Contact: <jgato at gsyc.info>
-    
+
+Benjamin Scherrer
+
+    * Deutsch translation
+
 Thomas Thiel
 
     * Deutsch translation
@@ -86,6 +90,11 @@ Máté Huszár
 
     * Hungarian translation
 
+Tim Loo
+
+    * Chinese (Taiwan) translation
+    * Contact: http://www.sinan-melody.co.cc/wordpress_1/
+
 PTT Team
 
     * Chinese (Taiwan) translation
@@ -167,4 +176,20 @@ Jean-Pierre POULIN
 
 Lobo
 	* Basque translation
-	* Contact: <lobo1985guitarrista at hotmail.es> http://www.myspace.com/lobotheguitardude
\ No newline at end of file
+	* Contact: <lobo1985guitarrista at hotmail.es> http://www.myspace.com/lobotheguitardude
+
+Pekka Manninen
+	* Finnish translation
+	* Contact: <pekka.t.manninen at iki.fi>
+
+Rytis Umbrasas
+	* Lithuanian translation
+	* Contact: <rytumb at gmail.com>
+
+Periklis Ntanasis
+	* Greek translation
+	* Contact: <pntanasis at gmail.com> http://www.greekrocktabs.gr
+
+Svetoslav Stefanov
+	* Bulgarian translation
+	* Contact: <lfu.project at gmail.com> http://learnfree.eu
diff --git a/CHANGES b/CHANGES
new file mode 100644
index 0000000..11d8e15
--- /dev/null
+++ b/CHANGES
@@ -0,0 +1,22 @@
+TuxGuitar Dev changes:
+
+* Add Show/Hide Toolbars feature.
+* Add Let Ring support
+
+TuxGuitar 1.2 changes:
+
+* Fix some bugs
+* Support measure range to loop
+* Transpose notes feature
+* Optionally transpose afected notes when change tuning
+* Move beats left|right support
+* More song properties options.
+* Add multiple measure support
+* Clean multiple measure support
+* Number of pastes support
+* Better lilypond plugin
+* Better fluidsynth plugin
+* New jack plugin
+* New community integration plugin
+* New cocoa integration plugin
+* New audio unit plugin
diff --git a/ChangeLog b/ChangeLog
deleted file mode 100644
index 298e932..0000000
--- a/ChangeLog
+++ /dev/null
@@ -1,17 +0,0 @@
-TuxGuitar 1.2 changes:
-
-* Fix some bugs
-* Support measure range to loop
-* Transpose notes feature
-* Optionally transpose afected notes when change tuning
-* Move beats left|right support
-* More song properties options.
-* Add multiple measure support
-* Clean multiple measure support
-* Number of pastes support
-* Better lilypond plugin
-* Better fluidsynth plugin
-* New jack plugin
-* New community integration plugin
-* New cocoa integration plugin
-* New audio unit plugin
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..2544679
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,263 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+#ident "$Id: Makefile,v 1.19 2008/04/17 20:06:22 rzr Exp $"
+#@author: created by www.philippe.coval.online.fr -- revision: $Author: rzr $
+#licence: LGPL-2.1
+#------------------------------------------------------------------------------
+default: build
+
+PACKAGE?=tuxguitar
+
+JNI_OS?=linux
+JAVA_HOME?=/usr/lib/jvm/java-6-sun/
+JAVA_VERS?=1.4
+
+ITEXT_JAR?=/usr/share/java/itext.jar
+
+SWT_JAR?=$(shell echo ` \
+    ( t=/usr/share/java/swt.jar && test -r "$$t" && echo $$t ) \
+ || ( t=/usr/lib/java/swt.jar && test -r "$$t" && echo $$t ) \
+ || ( t=/usr/lib/java/swt-gtk-3.5.1.jar && test -r "$$t" && echo $$t ) \
+ || ( t=/usr/lib/java/swt-gtk-3.5.jar && test -r "$$t" && echo $$t ) \
+ || ( t=/etc/alternatives/swt.jar && test -r "$$t" && echo $$t ) \
+` )
+SWT_PATH?=${SWT_JAR}
+
+PACKAGE_JAR?=${CURDIR}/TuxGuitar/${PACKAGE}.jar
+TUXGUITAR_PATH?=${PACKAGE_JAR}
+
+PACKAGE_EXEC?=${CURDIR}/misc/${PACKAGE}.sh
+
+JNILIB_SUFFIX?=.so
+JNILIB_PREFIX?=lib
+
+subdirs?=\
+ TuxGuitar \
+ TuxGuitar-compat \
+ TuxGuitar-ascii \
+ TuxGuitar-gtp \
+ TuxGuitar-musicxml \
+ TuxGuitar-ptb \
+ TuxGuitar-tef \
+\
+ TuxGuitar-pdf \
+ TuxGuitar-midi \
+ TuxGuitar-tray \
+ TuxGuitar-lilypond \
+\
+ TuxGuitar-jsa \
+\
+ TuxGuitar-converter \
+ TuxGuitar-community \
+ TuxGuitar-tuner \
+#}subdirs
+
+subdirs_jni?=\
+ TuxGuitar-alsa \
+ TuxGuitar-oss \
+ TuxGuitar-fluidsynth \
+ TuxGuitar-jack \
+ #}subdirs_jni
+
+#
+export PACKAGE_JAR
+###
+
+out_java?=\
+ ./TuxGuitar/tuxguitar.jar \
+ ./TuxGuitar-compat/tuxguitar-compat.jar \
+ ./TuxGuitar-lilypond/tuxguitar-lilypond.jar \
+ ./TuxGuitar-midi/tuxguitar-midi.jar \
+ ./TuxGuitar-gtp/tuxguitar-gtp.jar \
+ ./TuxGuitar-pdf/tuxguitar-pdf.jar \
+ ./TuxGuitar-tef/tuxguitar-tef.jar \
+ ./TuxGuitar-ascii/tuxguitar-ascii.jar \
+ ./TuxGuitar-tray/tuxguitar-tray.jar \
+ ./TuxGuitar-ptb/tuxguitar-ptb.jar \
+ ./TuxGuitar-musicxml/tuxguitar-musicxml.jar \
+ ./TuxGuitar-converter/tuxguitar-converter.jar \
+ ./TuxGuitar-community/tuxguitar-community.jar \
+ ./TuxGuitar-tuner/tuxguitar-tuner.jar \
+ #}out_java
+
+out_jsa?=TuxGuitar-jsa/tuxguitar-jsa.jar
+
+out_sun?=\
+ TuxGuitar-library-ftp/tuxguitar-browser-ftp.jar \
+ TuxGuitar-library-http/tuxguitar-library-http.jar \
+ #}out_sun
+
+out_linux?=\
+ ./TuxGuitar-alsa/tuxguitar-alsa.jar \
+ ./TuxGuitar-alsa/jni/libtuxguitar-alsa-jni.so \
+ ./TuxGuitar-oss/tuxguitar-oss.jar \
+ ./TuxGuitar-oss/jni/libtuxguitar-oss-jni.so \
+ ./TuxGuitar-fluidsynth/tuxguitar-fluidsynth.jar \
+ ./TuxGuitar-fluidsynth/jni/libtuxguitar-fluidsynth-jni.so \
+ ./TuxGuitar-jack/tuxguitar-jack.jar \
+ ./TuxGuitar-jack/jni/libtuxguitar-jack-jni.so \
+ #}out_linux
+
+out_windows?=TuxGuitar-winmm/tuxguitar-winmm.jar
+
+out_macos?=TuxGuitar-CoreAudio/tuxguitar-coreaudio.jar
+
+#all?=${out_java} out_${JNI_OS} ${out_jsa} ${out_sun}  # TODO
+all?=${out_java} ${out_${JNI_OS}} ${out_jsa}
+
+###
+
+ANT_FLAGS?=\
+ -Dpath.tuxguitar="${PACKAGE_JAR}" \
+ -Dpath.itext="${ITEXT_JAR}" \
+ -Dpath.swt="${SWT_JAR}" \
+ -Dlib.swt.jar="${SWT_JAR}" \
+ -Ddist.version="java" \
+ -Ddist.file="NOT_EXISTENT_FILE" \
+ -Dant.build.javac.source=${JAVA_VERS} \
+ -Dant.build.javac.target=${JAVA_VERS} \
+ -Dbuild.jni.library.dir=. \
+ -Dbuild.jni.library.extension=${JNILIB_SUFFIX} \
+ -Dbuild.jni.library.prefix=${JNILIB_PREFIX} \
+ -lib ${CURDIR}/TuxGuitar \
+ #}ANT_FLAGS
+
+CFLAGS?=\
+ -I$(shell gcj -print-file-name=include/)
+
+CFLAGS+= \
+-I${JAVA_HOME}/include/ \
+-I${JAVA_HOME}/include/${JNI_OS}
+
+MAKE_FLAGS+=\
+ SWT_PATH=${SWT_PATH} \
+ JAVA_HOME=${JAVA_HOME} \
+ JNILIB_SUFFIX=${JNILIB_SUFFIX} \
+ JNILIB_PREFIX=${JNILIB_PREFIX} \
+ CFLAGS=${CFLAGS}
+ #} MAKE_FLAGS
+
+PREFIX?=${DESTDIR}/usr
+INSTALL_BIN_DIR?=${PREFIX}/bin/
+INSTALL_LIB_DIR?=${PREFIX}/lib/jni/
+INSTALL_DOC_DIR?=${PREFIX}/share/${PACKAGE}/doc/
+INSTALL_SHARE_DIR?=${PREFIX}/share/${PACKAGE}/
+INSTALL_JAR_DIR?=${INSTALL_SHARE_DIR}/
+
+build: help all
+
+rebuild: clean fix build
+
+all: ${all}
+
+all-java: ${out_java}
+
+all-linux: ${out_linux}
+
+all-sun: ${out_sun}
+
+%.jar:
+	cd ${@D} && ant -v -d ${ANT_FLAGS} all
+
+%.so:
+	${MAKE} -C ${@D}/../jni/ ${@F}
+
+#%.native:
+#	 make -C $$t  ${MAKE_FLAGS} library_jni
+
+subdirs: ${subdirs}
+	for t in $^ ; do \
+	 cd "${CURDIR}/$$t" && ant -v -d ${ANT_FLAGS} build ; \
+	done
+
+fix: overide
+
+overide: COPYING
+
+COPYING: TuxGuitar
+	- at cp -a $</doc/LICENSE ./COPYING
+	- at cp -a $</doc/LICENSE ./
+	- at cp -a $</doc/CHANGES ChangeLog
+	- at cp -a $</doc/README ./
+	- at cp -a $</doc/AUTHORS ./
+
+install: ${all}
+	-install -d ${PREFIX}
+	-install -d ${INSTALL_BIN_DIR}
+	-install -d ${INSTALL_JAR_DIR}
+	-install -d ${INSTALL_SHARE_DIR}
+	-install -d ${INSTALL_DOC_DIR}
+#	-install -m 755 ./TuxGuitar/${PACKAGE} ${INSTALL_BIN_DIR}/${PACKAGE}
+	-install -m 644 ${PACKAGE_JAR} ${INSTALL_JAR_DIR}/${PACKAGE}.jar
+	install -d ${INSTALL_BIN_DIR}
+	mkdir -p  ./TuxGuitar/share/plugins/
+	for t in ${subdirs} ; do cp $$t/*.jar ./TuxGuitar/share/plugins/ ; done
+#	-find . -iname "*.jar" -exec cp {} ./TuxGuitar/share/plugins/ \;
+	cp -rfa ./TuxGuitar/doc/* ${INSTALL_DOC_DIR}/
+#	cp -rfa ./TuxGuitar/share/* ${INSTALL_SHARE_DIR} # TODO
+	cp -rfa ./TuxGuitar/share/help ${INSTALL_SHARE_DIR} # TODO
+	cp -rfa ./TuxGuitar/share/lang ${INSTALL_SHARE_DIR} # TODO
+	cp -rfa ./TuxGuitar/share/scales ${INSTALL_SHARE_DIR} # TODO
+	cp -rfa ./TuxGuitar/share/skins ${INSTALL_SHARE_DIR} # TODO
+	-cp -a misc/${PACKAGE}.tg ${INSTALL_SHARE_DIR} # TODO
+	-install -T ${PACKAGE_EXEC} ${INSTALL_BIN_DIR}/${PACKAGE}
+#	-${MAKE} install-jni
+
+install-linux:
+	install -d ${INSTALL_LIB_DIR}
+	install -s TuxGuitar*/jni/lib*.so ${INSTALL_LIB_DIR}
+
+clean:
+	find . -iname "*.class" -exec rm -fv "{}" \;
+	find . -iname "*.jar" -exec rm -fv "{}" \;
+	find . -iname "*.jnilib" -exec rm -fv "{}" \;
+	find . -iname "*.o" -exec rm -fv "{}" \;
+	find . -iname "*.so" -exec rm -fv "{}" \;
+	find . -type l -exec rm -fv "{}" \;
+	rm -rf TuxGuitar/tmp
+
+run: ${PACKAGE_EXEC}
+	cd ./TuxGuitar && APP_HOME=. ; ${SHELL} $<
+
+test: ${PACKAGE_EXEC}
+	cd TuxGuitar && APP_HOME=. ; \
+	 export PACKAGE_CLASSPATH="${PACKAGE_JAR}:." ;\
+	 DEBUG=1 ${SHELL} $< --version
+
+help:
+	@echo "# JAVA_HOME=${JAVA_HOME}"
+	@echo "# JAVA=${JAVA}"
+	@echo "# JAVAC=${JAVAC}"
+	@echo "# SWT_JAR=${SWT_JAR}"
+	-which javac
+	-which java
+#	java -version
+
+version?=$(shell date +%Y%m%d)
+scmroot?=https://${PACKAGE}.svn.sourceforge.net/svnroot/${PACKAGE}/trunk
+
+package_version?=0.0.${version}
+snapshot_dir?=${PACKAGE}-snapshot-${package_version}
+release_dir?=${PACKAGE}-${package_version}
+
+dist tarball: snapshot
+
+
+snapshot: ../${snapshot_dir}.tar.gz
+
+../${snapshot_dir}.tar.gz: ../${snapshot_dir}
+	cd ${@D} && tar czf ${@F}.tar.gz \
+	 --exclude="debian" \
+	 ${@D}
+
+release:  ../${release_dir}.tar.gz
+
+../${release_dir}.tar.gz: ../${release_dir}
+	cd ${@D} && tar czf ${@F}.tar.gz \
+	 --exclude="debian" --exclude "CVS" --exclude ".svn"\
+	 ${@D}
+
+../${snapshot_dir} ../${release_dir}:
+	svn co ${scmroot} $@
+
+#eof "$Id: Makefile,v 1.19 2008/04/17 20:06:22 rzr Exp $"
diff --git a/TuxGuitar-AudioUnit/build.properties b/TuxGuitar-AudioUnit/build.properties
index 519fcc3..77594e9 100644
--- a/TuxGuitar-AudioUnit/build.properties
+++ b/TuxGuitar-AudioUnit/build.properties
@@ -4,4 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
\ No newline at end of file
diff --git a/TuxGuitar-AudioUnit/build.xml b/TuxGuitar-AudioUnit/build.xml
index 8cf7c07..3b627bd 100644
--- a/TuxGuitar-AudioUnit/build.xml
+++ b/TuxGuitar-AudioUnit/build.xml
@@ -11,10 +11,12 @@
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-audiounit.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
+	<property name="service.class" value="org.herac.tuxguitar.util.plugin.TGPlugin" />
 	<property name="service.provider" value="org.herac.tuxguitar.player.impl.midiport.audiounit.MidiPortReaderPlugin" />
 	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
diff --git a/TuxGuitar-AudioUnit/libtuxguitar-audiounit-jni.jnilib b/TuxGuitar-AudioUnit/libtuxguitar-audiounit-jni.jnilib
new file mode 100644
index 0000000..b7177e7
Binary files /dev/null and b/TuxGuitar-AudioUnit/libtuxguitar-audiounit-jni.jnilib differ
diff --git a/TuxGuitar-AudioUnit/pom.xml b/TuxGuitar-AudioUnit/pom.xml
new file mode 100644
index 0000000..016a8ed
--- /dev/null
+++ b/TuxGuitar-AudioUnit/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-audiounit</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-AudioUnit/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-AudioUnit/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..9249069
--- /dev/null
+++ b/TuxGuitar-AudioUnit/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.player.impl.midiport.audiounit.MidiPortReaderPlugin
diff --git a/TuxGuitar-AudioUnit/share/META-INF/tuxguitar-audiounit.info b/TuxGuitar-AudioUnit/share/META-INF/tuxguitar-audiounit.info
new file mode 100644
index 0000000..6c58aaa
--- /dev/null
+++ b/TuxGuitar-AudioUnit/share/META-INF/tuxguitar-audiounit.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Audio Unit output plugin
+plugin.description=Audio Unit output plugin
+plugin.author=Auria
+plugin.version=1.0
diff --git a/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortImpl.java b/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortImpl.java
index 3c20e83..fd22304 100644
--- a/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortImpl.java
+++ b/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.audiounit;
 
-import org.herac.tuxguitar.player.base.MidiOutputPort;
-import org.herac.tuxguitar.player.base.MidiReceiver;
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
 
-public class MidiPortImpl implements MidiOutputPort{
+public class MidiPortImpl extends GMOutputPort{
 	
 	private String key;
 	private String name;
@@ -25,7 +25,7 @@ public class MidiPortImpl implements MidiOutputPort{
 		this.receiver.disconnect();
 	}
 	
-	public MidiReceiver getReceiver(){
+	public GMReceiver getReceiver(){
 		this.open();
 		return this.receiver;
 	}
diff --git a/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortReaderPlugin.java b/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortReaderPlugin.java
index 50a2672..2913b75 100644
--- a/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortReaderPlugin.java
+++ b/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiPortReaderPlugin.java
@@ -1,28 +1,17 @@
 package org.herac.tuxguitar.player.impl.midiport.audiounit;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin;
 import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.plugin.TGMidiOutputPortProviderPlugin;
 
 public class MidiPortReaderPlugin extends TGMidiOutputPortProviderPlugin{
-
+	
+	public static final String MODULE_ID = "tuxguitar-audiounit";
+	
 	protected MidiOutputPortProvider getProvider() {
 		return new MidiPortReaderAudioUnit();
 	}
 
-	public String getAuthor() {
-		return "Auria";
-	}
-
-	public String getDescription() {		
-		return "Core Audio output plugin";
+	public String getModuleId() {
+		return MODULE_ID;
 	}
-
-	public String getName() {
-		return "Core Audio output plugin";
-	}
-
-	public String getVersion() {
-		return "1.0";
-	}
-	
 }
diff --git a/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiReceiverImpl.java b/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiReceiverImpl.java
index 7f4bd00..b29cc0f 100644
--- a/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiReceiverImpl.java
+++ b/TuxGuitar-AudioUnit/src/org/herac/tuxguitar/player/impl/midiport/audiounit/MidiReceiverImpl.java
@@ -4,10 +4,10 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import org.herac.tuxguitar.gm.port.GMReceiver;
 import org.herac.tuxguitar.player.base.MidiControllers;
-import org.herac.tuxguitar.player.base.MidiReceiver;
 
-public class MidiReceiverImpl extends MidiReceiverJNI implements MidiReceiver{
+public class MidiReceiverImpl extends MidiReceiverJNI implements GMReceiver{
 	private boolean open; // unncessary
     private boolean connected;	
 	private List ports;
diff --git a/TuxGuitar-AudioUnit/tuxguitar-audiounit.jar b/TuxGuitar-AudioUnit/tuxguitar-audiounit.jar
new file mode 100644
index 0000000..7d32234
Binary files /dev/null and b/TuxGuitar-AudioUnit/tuxguitar-audiounit.jar differ
diff --git a/TuxGuitar-CoreAudio/build.properties b/TuxGuitar-CoreAudio/build.properties
index 519fcc3..94c0912 100644
--- a/TuxGuitar-CoreAudio/build.properties
+++ b/TuxGuitar-CoreAudio/build.properties
@@ -5,3 +5,4 @@ ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
 path.tuxguitar=../TuxGuitar/build
+path.tuxguitar-lib=../TuxGuitar-lib/build
\ No newline at end of file
diff --git a/TuxGuitar-CoreAudio/build.xml b/TuxGuitar-CoreAudio/build.xml
index f8df777..f7a1705 100644
--- a/TuxGuitar-CoreAudio/build.xml
+++ b/TuxGuitar-CoreAudio/build.xml
@@ -11,10 +11,11 @@
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-coreaudio.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
+	<property name="service.class" value="org.herac.tuxguitar.util.plugin.TGPlugin" />
 	<property name="service.provider" value="org.herac.tuxguitar.player.impl.midiport.coreaudio.MidiPortReaderPlugin" />
 	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
diff --git a/TuxGuitar-CoreAudio/libtuxguitar-coreaudio-jni.jnilib b/TuxGuitar-CoreAudio/libtuxguitar-coreaudio-jni.jnilib
new file mode 100644
index 0000000..8c5ba71
Binary files /dev/null and b/TuxGuitar-CoreAudio/libtuxguitar-coreaudio-jni.jnilib differ
diff --git a/TuxGuitar-CoreAudio/pom.xml b/TuxGuitar-CoreAudio/pom.xml
new file mode 100644
index 0000000..65130d8
--- /dev/null
+++ b/TuxGuitar-CoreAudio/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-coreaudio</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-CoreAudio/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-CoreAudio/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..ef97ab5
--- /dev/null
+++ b/TuxGuitar-CoreAudio/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.player.impl.midiport.coreaudio.MidiPortReaderPlugin
diff --git a/TuxGuitar-CoreAudio/share/META-INF/tuxguitar-coreaudio.info b/TuxGuitar-CoreAudio/share/META-INF/tuxguitar-coreaudio.info
new file mode 100644
index 0000000..3e6ad51
--- /dev/null
+++ b/TuxGuitar-CoreAudio/share/META-INF/tuxguitar-coreaudio.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Core Audio output plugin
+plugin.description=Core Audio output plugin
+plugin.author=Auria
+plugin.version=1.0
diff --git a/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortImpl.java b/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortImpl.java
index 18de30a..fa01f97 100644
--- a/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortImpl.java
+++ b/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.coreaudio;
 
-import org.herac.tuxguitar.player.base.MidiOutputPort;
-import org.herac.tuxguitar.player.base.MidiReceiver;
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
 
-public class MidiPortImpl implements MidiOutputPort{
+public class MidiPortImpl extends GMOutputPort{
 	
 	private String key;
 	private String name;
@@ -25,7 +25,7 @@ public class MidiPortImpl implements MidiOutputPort{
 		this.receiver.disconnect();
 	}
 	
-	public MidiReceiver getReceiver(){
+	public GMReceiver getReceiver(){
 		this.open();
 		return this.receiver;
 	}
diff --git a/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortReaderPlugin.java b/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortReaderPlugin.java
index 9b79e75..99cd333 100644
--- a/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortReaderPlugin.java
+++ b/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiPortReaderPlugin.java
@@ -1,28 +1,17 @@
 package org.herac.tuxguitar.player.impl.midiport.coreaudio;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin;
 import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.plugin.TGMidiOutputPortProviderPlugin;
 
 public class MidiPortReaderPlugin extends TGMidiOutputPortProviderPlugin{
 
+	public static final String MODULE_ID = "tuxguitar-coreaudio";
+	
 	protected MidiOutputPortProvider getProvider() {
 		return new MidiPortReaderCoreAudio();
 	}
-
-	public String getAuthor() {
-		return "Auria";
-	}
-
-	public String getDescription() {		
-		return "Core Audio output plugin";
-	}
-
-	public String getName() {
-		return "Core Audio output plugin";
-	}
-
-	public String getVersion() {
-		return "1.0";
-	}
 	
+	public String getModuleId() {
+		return MODULE_ID;
+	}	
 }
diff --git a/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiReceiverImpl.java b/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiReceiverImpl.java
index 3caf2c1..e039c37 100644
--- a/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiReceiverImpl.java
+++ b/TuxGuitar-CoreAudio/src/org/herac/tuxguitar/player/impl/midiport/coreaudio/MidiReceiverImpl.java
@@ -4,10 +4,10 @@ import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
+import org.herac.tuxguitar.gm.port.GMReceiver;
 import org.herac.tuxguitar.player.base.MidiControllers;
-import org.herac.tuxguitar.player.base.MidiReceiver;
 
-public class MidiReceiverImpl extends MidiReceiverJNI implements MidiReceiver{
+public class MidiReceiverImpl extends MidiReceiverJNI implements GMReceiver{
 	private boolean open; // unncessary
     private boolean connected;	
 	private List ports;
diff --git a/TuxGuitar-CoreAudio/tuxguitar-coreaudio.jar b/TuxGuitar-CoreAudio/tuxguitar-coreaudio.jar
new file mode 100644
index 0000000..672d91f
Binary files /dev/null and b/TuxGuitar-CoreAudio/tuxguitar-coreaudio.jar differ
diff --git a/TuxGuitar-abc/GNUmakefile b/TuxGuitar-abc/GNUmakefile
new file mode 100644
index 0000000..9d8495c
--- /dev/null
+++ b/TuxGuitar-abc/GNUmakefile
@@ -0,0 +1,68 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:45 akdmia Exp $"
+#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
+#licence: LGPL
+#------------------------------------------------------------------------------
+PACKAGE?=tuxguitar-abc
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=./share/
+
+# build paths
+SOURCE_PATH?=./src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
+
+default: all
+
+all: objects library
+
+objects: tmp.classes.tmp
+
+tmp.classes.tmp: $(OBJECTS)
+	@touch $@
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
+	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
+	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
+
diff --git a/TuxGuitar-abc/TuxGuitar-abc.MF b/TuxGuitar-abc/TuxGuitar-abc.MF
new file mode 100644
index 0000000..58630c0
--- /dev/null
+++ b/TuxGuitar-abc/TuxGuitar-abc.MF
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+
diff --git a/TuxGuitar-abc/build.properties b/TuxGuitar-abc/build.properties
new file mode 100644
index 0000000..717c2ef
--- /dev/null
+++ b/TuxGuitar-abc/build.properties
@@ -0,0 +1,9 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
+
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-abc/build.xml b/TuxGuitar-abc/build.xml
new file mode 100644
index 0000000..a62a025
--- /dev/null
+++ b/TuxGuitar-abc/build.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-abc" basedir="." default="all">
+	<description>
+		TuxGuitar ABC Exporter
+	</description>
+	
+	<property file="build.properties" />
+	<property name="build.src.path" value="src${file.separator}" />
+	<property name="build.share.path" value="share${file.separator}" />
+	<property name="build.path" value="build${file.separator}" />
+	<property name="build.jar" value="tuxguitar-abc.jar" />
+	
+	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar}"/>
+		<pathelement location="${path.swt}"/>
+	</path >
+	
+	<target name="init" depends="clean">
+		<mkdir dir="${build.path}" />
+	</target>
+	
+	<target name="build" depends="init">
+		<echo>+-------------------------------------------------+</echo>
+		<echo>|          B U I L D I N G   P L U G I N          |</echo>
+		<echo>+-------------------------------------------------+</echo>
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<classpath refid="class.path"/>
+			<include name="**/*.java"/>
+		</javac>
+		
+		<mkdir dir="${build.path}${file.separator}lang" />
+		<copy todir="${build.path}${file.separator}lang">
+			<fileset dir="${build.share.path}${file.separator}lang"/>
+		</copy>
+		
+		<mkdir dir="${build.path}/META-INF/services" />
+		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		
+		<echo>+-----------------------------------------------+</echo>
+		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
+		<echo>+-----------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}" basedir="${build.path}" />
+		<delete quiet="true" dir="${build.path}" />
+	</target>
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
+<!-- eof "$Id: build.xml,v 1.5 2008/02/28 00:35:00 rzr Exp $" -->
diff --git a/TuxGuitar-abc/buildjar.jardesc b/TuxGuitar-abc/buildjar.jardesc
new file mode 100644
index 0000000..2b4ed84
--- /dev/null
+++ b/TuxGuitar-abc/buildjar.jardesc
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jardesc>
+    <jar path="TuxGuitar-abc/tuxguitar-abc.jar"/>
+    <options buildIfNeeded="true" compress="true" descriptionLocation="/TuxGuitar-abc/buildjar.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="true" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
+    <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
+    <selectedProjects/>
+    <manifest generateManifest="false" manifestLocation="/TuxGuitar-abc/TuxGuitar-abc.MF" manifestVersion="1.0" reuseManifest="true" saveManifest="true" usesManifest="true">
+        <sealing sealJar="false">
+            <packagesToSeal/>
+            <packagesToUnSeal/>
+        </sealing>
+    </manifest>
+    <selectedElements exportClassFiles="true" exportJavaFiles="true" exportOutputFolder="false">
+        <folder path="/TuxGuitar-abc/lang"/>
+        <folder path="/TuxGuitar-abc/doc"/>
+        <folder path="/TuxGuitar-abc/META-INF"/>
+        <file path="/TuxGuitar-abc/.project"/>
+        <javaElement handleIdentifier="=TuxGuitar-abc/src"/>
+        <file path="/TuxGuitar-abc/.classpath"/>
+        <file path="/TuxGuitar-abc/javadoc.xml"/>
+        <file path="/TuxGuitar-abc/buildjar.jardesc"/>
+    </selectedElements>
+</jardesc>
diff --git a/TuxGuitar-abc/buildplugin.jardesc b/TuxGuitar-abc/buildplugin.jardesc
new file mode 100644
index 0000000..af296dd
--- /dev/null
+++ b/TuxGuitar-abc/buildplugin.jardesc
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jardesc>
+    <jar path="/home/peter/tuxguitar-1.2/share/plugins/tuxguitar-abc.jar"/>
+    <options buildIfNeeded="true" compress="true" descriptionLocation="/TuxGuitar-abc/buildplugin.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="true" overwrite="false" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
+    <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
+    <selectedProjects/>
+    <manifest generateManifest="false" manifestLocation="/TuxGuitar-abc/TuxGuitar-abc.MF" manifestVersion="1.0" reuseManifest="true" saveManifest="true" usesManifest="true">
+        <sealing sealJar="false">
+            <packagesToSeal/>
+            <packagesToUnSeal/>
+        </sealing>
+    </manifest>
+    <selectedElements exportClassFiles="true" exportJavaFiles="true" exportOutputFolder="false">
+        <folder path="/TuxGuitar-abc/lang"/>
+        <folder path="/TuxGuitar-abc/doc"/>
+        <folder path="/TuxGuitar-abc/META-INF"/>
+        <file path="/TuxGuitar-abc/.project"/>
+        <javaElement handleIdentifier="=TuxGuitar-abc/src"/>
+        <file path="/TuxGuitar-abc/.classpath"/>
+        <file path="/TuxGuitar-abc/buildplugin.jardesc"/>
+        <file path="/TuxGuitar-abc/javadoc.xml"/>
+        <file path="/TuxGuitar-abc/buildjar.jardesc"/>
+    </selectedElements>
+</jardesc>
diff --git a/TuxGuitar-abc/doc/allclasses-frame.html b/TuxGuitar-abc/doc/allclasses-frame.html
new file mode 100644
index 0000000..c0349b6
--- /dev/null
+++ b/TuxGuitar-abc/doc/allclasses-frame.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+All Classes
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCChord</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCComponent</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCComponentChord</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCComponentNote</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCEvent</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCExportSettingsDialog</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCImportSettingsDialog</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCInfo</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCInputStream</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCLocation</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCMacro</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCOctaveDatabase</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCOutputStream</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCPluginExporter</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCPluginImporter</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCPluginList</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCRepeat</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCSettings</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCSong</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCSongExporter</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCSongImporter</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCSymbol</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTempo</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTempoChange</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCText</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTimeSignature</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTimeSignatureChange</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTrack</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/allclasses-noframe.html b/TuxGuitar-abc/doc/allclasses-noframe.html
new file mode 100644
index 0000000..953af5d
--- /dev/null
+++ b/TuxGuitar-abc/doc/allclasses-noframe.html
@@ -0,0 +1,84 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+All Classes
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameHeadingFont">
+<B>All Classes</B></FONT>
+<BR>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentChord</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCExportSettingsDialog</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCImportSettingsDialog</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCInputStream</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base">ABCMacro</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base">ABCOctaveDatabase</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCOutputStream</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginExporter</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginImporter</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginList</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongExporter</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSymbol</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A>
+<BR>
+<A HREF="org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<BR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/constant-values.html b/TuxGuitar-abc/doc/constant-values.html
new file mode 100644
index 0000000..ef12b65
--- /dev/null
+++ b/TuxGuitar-abc/doc/constant-values.html
@@ -0,0 +1,814 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Constant Field Values
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Constant Field Values";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H1>
+Constant Field Values</H1>
+</CENTER>
+<HR SIZE="4" NOSHADE>
+<B>Contents</B><UL>
+<LI><A HREF="#org.herac">org.herac.*</A>
+</UL>
+
+<A NAME="org.herac"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD ALIGN="left"><FONT SIZE="+2">
+<B>org.herac.*</B></FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<TABLE BORDER="0" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>org.herac.tuxguitar.io.abc.<A HREF="org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.ABCSettings.ALL_TRACKS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/ABCSettings.html#ALL_TRACKS">ALL_TRACKS</A></CODE></TD>
+<TD ALIGN="right"><CODE>-1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.ABCSettings.AUTO_MEASURES"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/ABCSettings.html#AUTO_MEASURES">AUTO_MEASURES</A></CODE></TD>
+<TD ALIGN="right"><CODE>0</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.ABCSettings.AUTO_TRACK"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/ABCSettings.html#AUTO_TRACK">AUTO_TRACK</A></CODE></TD>
+<TD ALIGN="right"><CODE>0</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.ABCSettings.FIRST_MEASURE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/ABCSettings.html#FIRST_MEASURE">FIRST_MEASURE</A></CODE></TD>
+<TD ALIGN="right"><CODE>-1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.ABCSettings.LAST_MEASURE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/ABCSettings.html#LAST_MEASURE">LAST_MEASURE</A></CODE></TD>
+<TD ALIGN="right"><CODE>-1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.ABCSettings.NO_TRACK"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/ABCSettings.html#NO_TRACK">NO_TRACK</A></CODE></TD>
+<TD ALIGN="right"><CODE>-2</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="0" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.ACCENT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#ACCENT">ACCENT</A></CODE></TD>
+<TD ALIGN="right"><CODE>4</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.ALCODA"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#ALCODA">ALCODA</A></CODE></TD>
+<TD ALIGN="right"><CODE>30</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.ALFINE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#ALFINE">ALFINE</A></CODE></TD>
+<TD ALIGN="right"><CODE>32</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.ANNOTATION"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#ANNOTATION">ANNOTATION</A></CODE></TD>
+<TD ALIGN="right"><CODE>11</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.ARPEGGIO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#ARPEGGIO">ARPEGGIO</A></CODE></TD>
+<TD ALIGN="right"><CODE>56</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.BAR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#BAR">BAR</A></CODE></TD>
+<TD ALIGN="right"><CODE>0</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.BAR_BAR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#BAR_BAR">BAR_BAR</A></CODE></TD>
+<TD ALIGN="right"><CODE>1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.BAR_FATBAR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#BAR_FATBAR">BAR_FATBAR</A></CODE></TD>
+<TD ALIGN="right"><CODE>2</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.BASSPROG"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#BASSPROG">BASSPROG</A></CODE></TD>
+<TD ALIGN="right"><CODE>-6</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.BASSVOL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#BASSVOL">BASSVOL</A></CODE></TD>
+<TD ALIGN="right"><CODE>-7</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.BREATH"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#BREATH">BREATH</A></CODE></TD>
+<TD ALIGN="right"><CODE>20</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.CHORD_BEGIN"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORD_BEGIN">CHORD_BEGIN</A></CODE></TD>
+<TD ALIGN="right"><CODE>12</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.CHORD_CLOSE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORD_CLOSE">CHORD_CLOSE</A></CODE></TD>
+<TD ALIGN="right"><CODE>15</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.CHORD_SYMBOL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORD_SYMBOL">CHORD_SYMBOL</A></CODE></TD>
+<TD ALIGN="right"><CODE>10</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.CHORDPROG"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORDPROG">CHORDPROG</A></CODE></TD>
+<TD ALIGN="right"><CODE>-4</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.CHORDVOL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORDVOL">CHORDVOL</A></CODE></TD>
+<TD ALIGN="right"><CODE>-5</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.CODA"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#CODA">CODA</A></CODE></TD>
+<TD ALIGN="right"><CODE>34</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DACAPO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DACAPO">DACAPO</A></CODE></TD>
+<TD ALIGN="right"><CODE>29</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DACODA"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DACODA">DACODA</A></CODE></TD>
+<TD ALIGN="right"><CODE>28</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DC"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DC">DC</A></CODE></TD>
+<TD ALIGN="right"><CODE>27</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DECORATION"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DECORATION">DECORATION</A></CODE></TD>
+<TD ALIGN="right"><CODE>16</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DOWNBOW"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DOWNBOW">DOWNBOW</A></CODE></TD>
+<TD ALIGN="right"><CODE>51</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DRONE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRONE">DRONE</A></CODE></TD>
+<TD ALIGN="right"><CODE>-13</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DRONEOFF"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRONEOFF">DRONEOFF</A></CODE></TD>
+<TD ALIGN="right"><CODE>-12</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DRONEON"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRONEON">DRONEON</A></CODE></TD>
+<TD ALIGN="right"><CODE>-11</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DRUM"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRUM">DRUM</A></CODE></TD>
+<TD ALIGN="right"><CODE>-10</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DRUMOFF"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRUMOFF">DRUMOFF</A></CODE></TD>
+<TD ALIGN="right"><CODE>-9</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DRUMON"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRUMON">DRUMON</A></CODE></TD>
+<TD ALIGN="right"><CODE>-8</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DS">DS</A></CODE></TD>
+<TD ALIGN="right"><CODE>25</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.DSS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#DSS">DSS</A></CODE></TD>
+<TD ALIGN="right"><CODE>26</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.ENDCRESCENDO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#ENDCRESCENDO">ENDCRESCENDO</A></CODE></TD>
+<TD ALIGN="right"><CODE>36</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.ENDDIMINUENDO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#ENDDIMINUENDO">ENDDIMINUENDO</A></CODE></TD>
+<TD ALIGN="right"><CODE>38</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.ENDTRILL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#ENDTRILL">ENDTRILL</A></CODE></TD>
+<TD ALIGN="right"><CODE>58</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.F"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#F">F</A></CODE></TD>
+<TD ALIGN="right"><CODE>45</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FATBAR_BAR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FATBAR_BAR">FATBAR_BAR</A></CODE></TD>
+<TD ALIGN="right"><CODE>3</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FERMATA"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FERMATA">FERMATA</A></CODE></TD>
+<TD ALIGN="right"><CODE>5</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FF"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FF">FF</A></CODE></TD>
+<TD ALIGN="right"><CODE>46</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FFF"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FFF">FFF</A></CODE></TD>
+<TD ALIGN="right"><CODE>47</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FFFF"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FFFF">FFFF</A></CODE></TD>
+<TD ALIGN="right"><CODE>48</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FINE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINE">FINE</A></CODE></TD>
+<TD ALIGN="right"><CODE>33</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_0"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_0">FINGERING_0</A></CODE></TD>
+<TD ALIGN="right"><CODE>8</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_1"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_1">FINGERING_1</A></CODE></TD>
+<TD ALIGN="right"><CODE>9</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_2"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_2">FINGERING_2</A></CODE></TD>
+<TD ALIGN="right"><CODE>10</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_3"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_3">FINGERING_3</A></CODE></TD>
+<TD ALIGN="right"><CODE>11</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_4"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_4">FINGERING_4</A></CODE></TD>
+<TD ALIGN="right"><CODE>12</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_5"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_5">FINGERING_5</A></CODE></TD>
+<TD ALIGN="right"><CODE>13</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.GCHORD"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#GCHORD">GCHORD</A></CODE></TD>
+<TD ALIGN="right"><CODE>-3</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.GCHORDOFF"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#GCHORDOFF">GCHORDOFF</A></CODE></TD>
+<TD ALIGN="right"><CODE>-2</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.GCHORDON"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#GCHORDON">GCHORDON</A></CODE></TD>
+<TD ALIGN="right"><CODE>-1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.INVERTEDFERMATA"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#INVERTEDFERMATA">INVERTEDFERMATA</A></CODE></TD>
+<TD ALIGN="right"><CODE>6</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.INVERTEDTURN"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#INVERTEDTURN">INVERTEDTURN</A></CODE></TD>
+<TD ALIGN="right"><CODE>54</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.INVERTEDTURNX"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#INVERTEDTURNX">INVERTEDTURNX</A></CODE></TD>
+<TD ALIGN="right"><CODE>55</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.LINE_BREAK"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#LINE_BREAK">LINE_BREAK</A></CODE></TD>
+<TD ALIGN="right"><CODE>17</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.LONGPHRASE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#LONGPHRASE">LONGPHRASE</A></CODE></TD>
+<TD ALIGN="right"><CODE>23</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.LOWERMORDENT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#LOWERMORDENT">LOWERMORDENT</A></CODE></TD>
+<TD ALIGN="right"><CODE>2</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.MEDIUMPHRASE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#MEDIUMPHRASE">MEDIUMPHRASE</A></CODE></TD>
+<TD ALIGN="right"><CODE>22</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.MF"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#MF">MF</A></CODE></TD>
+<TD ALIGN="right"><CODE>44</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.MP"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#MP">MP</A></CODE></TD>
+<TD ALIGN="right"><CODE>43</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.NOT_RELEVANT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#NOT_RELEVANT">NOT_RELEVANT</A></CODE></TD>
+<TD ALIGN="right"><CODE>18</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.NOTE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#NOTE">NOTE</A></CODE></TD>
+<TD ALIGN="right"><CODE>14</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.OPEN"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#OPEN">OPEN</A></CODE></TD>
+<TD ALIGN="right"><CODE>16</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.P"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#P">P</A></CODE></TD>
+<TD ALIGN="right"><CODE>42</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.PLUS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#PLUS">PLUS</A></CODE></TD>
+<TD ALIGN="right"><CODE>14</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.PP"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#PP">PP</A></CODE></TD>
+<TD ALIGN="right"><CODE>41</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.PPP"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#PPP">PPP</A></CODE></TD>
+<TD ALIGN="right"><CODE>40</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.PPPP"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#PPPP">PPPP</A></CODE></TD>
+<TD ALIGN="right"><CODE>39</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.REPEAT_BEGIN"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#REPEAT_BEGIN">REPEAT_BEGIN</A></CODE></TD>
+<TD ALIGN="right"><CODE>4</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.REPEAT_END"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#REPEAT_END">REPEAT_END</A></CODE></TD>
+<TD ALIGN="right"><CODE>5</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.REPEAT_END_AND_START"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#REPEAT_END_AND_START">REPEAT_END_AND_START</A></CODE></TD>
+<TD ALIGN="right"><CODE>6</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.REST"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#REST">REST</A></CODE></TD>
+<TD ALIGN="right"><CODE>13</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.ROLL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#ROLL">ROLL</A></CODE></TD>
+<TD ALIGN="right"><CODE>19</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.SEGNO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#SEGNO">SEGNO</A></CODE></TD>
+<TD ALIGN="right"><CODE>24</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.SFZ"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#SFZ">SFZ</A></CODE></TD>
+<TD ALIGN="right"><CODE>49</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.SHORTPHRASE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#SHORTPHRASE">SHORTPHRASE</A></CODE></TD>
+<TD ALIGN="right"><CODE>21</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.SLIDE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#SLIDE">SLIDE</A></CODE></TD>
+<TD ALIGN="right"><CODE>52</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.STACATODOT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#STACATODOT">STACATODOT</A></CODE></TD>
+<TD ALIGN="right"><CODE>59</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.STARTCRESCENDO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#STARTCRESCENDO">STARTCRESCENDO</A></CODE></TD>
+<TD ALIGN="right"><CODE>35</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.STARTDIMINUENDO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#STARTDIMINUENDO">STARTDIMINUENDO</A></CODE></TD>
+<TD ALIGN="right"><CODE>37</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.STARTTRILL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#STARTTRILL">STARTTRILL</A></CODE></TD>
+<TD ALIGN="right"><CODE>57</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.TEMPO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#TEMPO">TEMPO</A></CODE></TD>
+<TD ALIGN="right"><CODE>9</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.TENUTO"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#TENUTO">TENUTO</A></CODE></TD>
+<TD ALIGN="right"><CODE>7</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.THUMB"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#THUMB">THUMB</A></CODE></TD>
+<TD ALIGN="right"><CODE>17</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.TIME"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#TIME">TIME</A></CODE></TD>
+<TD ALIGN="right"><CODE>8</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.TOCODA"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#TOCODA">TOCODA</A></CODE></TD>
+<TD ALIGN="right"><CODE>31</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.TRILL"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#TRILL">TRILL</A></CODE></TD>
+<TD ALIGN="right"><CODE>1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.TURN"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#TURN">TURN</A></CODE></TD>
+<TD ALIGN="right"><CODE>18</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.TURNX"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#TURNX">TURNX</A></CODE></TD>
+<TD ALIGN="right"><CODE>53</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.UPBOW"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#UPBOW">UPBOW</A></CODE></TD>
+<TD ALIGN="right"><CODE>50</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.UPPERMORDENT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#UPPERMORDENT">UPPERMORDENT</A></CODE></TD>
+<TD ALIGN="right"><CODE>3</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.VARIANT"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#VARIANT">VARIANT</A></CODE></TD>
+<TD ALIGN="right"><CODE>7</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCEvent.WEDGE"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html#WEDGE">WEDGE</A></CODE></TD>
+<TD ALIGN="right"><CODE>15</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="0" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCSong.TICKS_PER_QUART"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCSong.html#TICKS_PER_QUART">TICKS_PER_QUART</A></CODE></TD>
+<TD ALIGN="right"><CODE>192</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+
+<TABLE BORDER="0" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=3><B>org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_DOUBLE_STRINGS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_DOUBLE_STRINGS">FLAG_DOUBLE_STRINGS</A></CODE></TD>
+<TD ALIGN="right"><CODE>1</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_EFFECT_CHANNEL_DISABLED"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_EFFECT_CHANNEL_DISABLED">FLAG_EFFECT_CHANNEL_DISABLED</A></CODE></TD>
+<TD ALIGN="right"><CODE>8</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_LET_RING"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_LET_RING">FLAG_LET_RING</A></CODE></TD>
+<TD ALIGN="right"><CODE>2</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_PEDAL_SABCEL_GUITAR"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_PEDAL_SABCEL_GUITAR">FLAG_PEDAL_SABCEL_GUITAR</A></CODE></TD>
+<TD ALIGN="right"><CODE>4</CODE></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<A NAME="org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_RHYTHM_TRACK"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
+<CODE>public static final int</CODE></FONT></TD>
+<TD ALIGN="left"><CODE><A HREF="org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_RHYTHM_TRACK">FLAG_RHYTHM_TRACK</A></CODE></TD>
+<TD ALIGN="right"><CODE>16</CODE></TD>
+</TR>
+</FONT></TD>
+</TR>
+</TABLE>
+
+<P>
+
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/deprecated-list.html b/TuxGuitar-abc/doc/deprecated-list.html
new file mode 100644
index 0000000..90a13e9
--- /dev/null
+++ b/TuxGuitar-abc/doc/deprecated-list.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+Deprecated List
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Deprecated List";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Deprecated API</B></H2>
+</CENTER>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/help-doc.html b/TuxGuitar-abc/doc/help-doc.html
new file mode 100644
index 0000000..2bc16e3
--- /dev/null
+++ b/TuxGuitar-abc/doc/help-doc.html
@@ -0,0 +1,193 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+API Help
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="API Help";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H1>
+How This API Document Is Organized</H1>
+</CENTER>
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
+Overview</H3>
+<BLOCKQUOTE>
+
+<P>
+The <A HREF="overview-summary.html">Overview</A> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</BLOCKQUOTE>
+<H3>
+Package</H3>
+<BLOCKQUOTE>
+
+<P>
+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
+<LI>Interfaces (italic)<LI>Classes<LI>Exceptions<LI>Errors</UL>
+</BLOCKQUOTE>
+<H3>
+Class/Interface</H3>
+<BLOCKQUOTE>
+
+<P>
+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
+<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
+<P>
+<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
+<P>
+<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
+<H3>
+Use</H3>
+<BLOCKQUOTE>
+Each documented package, class and interface has its own Use page.  This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A.  You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.</ [...]
+<H3>
+Tree (Class Hierarchy)</H3>
+<BLOCKQUOTE>
+There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
+<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
+</BLOCKQUOTE>
+<H3>
+Deprecated API</H3>
+<BLOCKQUOTE>
+The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
+<H3>
+Index</H3>
+<BLOCKQUOTE>
+The <A HREF="index-files/index-1.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
+<H3>
+Prev/Next</H3>
+These links take you to the next or previous class, interface, package, or related page.<H3>
+Frames/No Frames</H3>
+These links show and hide the HTML frames.  All pages are available with or without frames.
+<P>
+<H3>
+Serialized Form</H3>
+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
+<P>
+<FONT SIZE="-1">
+<EM>
+This help file applies to API documentation generated using the standard doclet.</EM>
+</FONT>
+<BR>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-1.html b/TuxGuitar-abc/doc/index-files/index-1.html
new file mode 100644
index 0000000..f0a8c08
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-1.html
@@ -0,0 +1,296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+A-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="A-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV LETTER 
+ <A HREF="index-2.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-1.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_A_"><!-- --></A><H2>
+<B>A</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCChord</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html#ABCChord(java.lang.String)"><B>ABCChord(String)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCComponent</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html#ABCComponent(int, int, int)"><B>ABCComponent(int, int, int)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCComponentChord</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentChord</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html#ABCComponentChord(int, int, int, int)"><B>ABCComponentChord(int, int, int, int)</B [...]
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCComponentNote</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#ABCComponentNote(int, int, int, int, int, int, int)"><B>ABCComponentNote(int, int, int, [...]
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCEvent</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ABCEvent(int, java.lang.String, int)"><B>ABCEvent(int, String, int)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ABCEvent(org.herac.tuxguitar.io.abc.base.ABCSong, java.lang.String)"><B>ABCEvent(ABCSong, String)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCExportSettingsDialog</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCExportSettingsDialog</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html#ABCExportSettingsDialog()"><B>ABCExportSettingsDialog()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCExportSettingsDialog</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCImportSettingsDialog</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCImportSettingsDialog</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html#ABCImportSettingsDialog()"><B>ABCImportSettingsDialog()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCImportSettingsDialog</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCInfo</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#ABCInfo(java.lang.String, java.lang.String, java.lang.String)"><B>ABCInfo(String, String, String)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCInputStream</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCInputStream</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCInputStream.html#ABCInputStream(java.io.InputStream, org.herac.tuxguitar.io.abc.ABCSettings)"><B>ABCInputStream(InputStream, ABCSettings)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCInputStream</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCLocation</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#ABCLocation(java.lang.String, int, int, int, org.herac.tuxguitar.io.abc.base.ABCChord, org.herac.tuxguitar.io.ab [...]
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCMacro</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base">ABCMacro</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html#ABCMacro(java.lang.String)"><B>ABCMacro(String)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base">ABCMacro</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCOctaveDatabase</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base">ABCOctaveDatabase</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html#ABCOctaveDatabase()"><B>ABCOctaveDatabase()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base">ABCOctaveDatabase</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCOutputStream</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCOutputStream</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCOutputStream.html#ABCOutputStream(java.io.OutputStream, org.herac.tuxguitar.io.abc.ABCSettings)"><B>ABCOutputStream(OutputStream, ABCSetting [...]
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCOutputStream</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCPluginExporter</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginExporter</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#ABCPluginExporter()"><B>ABCPluginExporter()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCPluginImporter</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginImporter</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#ABCPluginImporter()"><B>ABCPluginImporter()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCPluginList</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginList</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html#ABCPluginList()"><B>ABCPluginList()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginList</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCRepeat</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html#ABCRepeat(int, int)"><B>ABCRepeat(int, int)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCSettings</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#ABCSettings()"><B>ABCSettings()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCSong</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#ABCSong()"><B>ABCSong()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCSongExporter</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongExporter</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html#ABCSongExporter()"><B>ABCSongExporter()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCSongImporter</B></A> - class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html#ABCSongImporter()"><B>ABCSongImporter()</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCSymbol</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSymbol</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#ABCSymbol(java.lang.String)"><B>ABCSymbol(String)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSymbol</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCTempo</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html#ABCTempo(int)"><B>ABCTempo(int)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html#ABCTempo(java.lang.String)"><B>ABCTempo(String)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCTempoChange</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html#ABCTempoChange(int, int)"><B>ABCTempoChange(int, int)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCText</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCText.html#ABCText(java.lang.String)"><B>ABCText(String)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCTimeSignature</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#ABCTimeSignature(int, int, boolean)"><B>ABCTimeSignature(int, int, boolean)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCTimeSignatureChange</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#ABCTimeSignatureChange(int, org.herac.tuxguitar.io.abc.ba [...]
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCTrack</B></A> - class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>.<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#ABCTrack(java.lang.String)"><B>ABCTrack(String)</B></A> - 
+Constructor for class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ACCENT"><B>ACCENT</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ALCODA"><B>ALCODA</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ALFINE"><B>ALFINE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#ALL_TRACKS"><B>ALL_TRACKS</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ANNOTATION"><B>ANNOTATION</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ARPEGGIO"><B>ARPEGGIO</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#AUTO_MEASURES"><B>AUTO_MEASURES</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#AUTO_TRACK"><B>AUTO_TRACK</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addChord(java.lang.String)"><B>addChord(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#addHistory(java.lang.String)"><B>addHistory(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addHistory(java.lang.String)"><B>addHistory(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addLyrics(java.lang.String)"><B>addLyrics(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addMacro(java.lang.String)"><B>addMacro(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addMusic(java.lang.String)"><B>addMusic(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#addNote(java.lang.String)"><B>addNote(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addNote(java.lang.String)"><B>addNote(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addRedefinable(java.lang.String)"><B>addRedefinable(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addRemarks(java.lang.String)"><B>addRemarks(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addSymbols(java.lang.String)"><B>addSymbols(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addTempoChange(org.herac.tuxguitar.io.abc.base.ABCTempoChange)"><B>addTempoChange(ABCTempoChange)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addTimeSignatureChange(org.herac.tuxguitar.io.abc.base.ABCTimeSignatureChange)"><B>addTimeSignatureChange(ABCTimeSignatureChange)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addVoice(java.lang.String)"><B>addVoice(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#addWords(java.lang.String)"><B>addWords(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#alterString(int, int[])"><B>alterString(int, int[])</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV LETTER 
+ <A HREF="index-2.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-1.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-10.html b/TuxGuitar-abc/doc/index-files/index-10.html
new file mode 100644
index 0000000..be02efe
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-10.html
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+M-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="M-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-9.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-11.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-10.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_M_"><!-- --></A><H2>
+<B>M</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#MEDIUMPHRASE"><B>MEDIUMPHRASE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#MF"><B>MF</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#MP"><B>MP</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#midiCommand(java.lang.String)"><B>midiCommand(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-9.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-11.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-10.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-11.html b/TuxGuitar-abc/doc/index-files/index-11.html
new file mode 100644
index 0000000..bbe865b
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-11.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+N-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="N-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-10.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-12.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-11.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_N_"><!-- --></A><H2>
+<B>N</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#NOTE"><B>NOTE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#NOT_RELEVANT"><B>NOT_RELEVANT</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#NO_TRACK"><B>NO_TRACK</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-10.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-12.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-11.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-12.html b/TuxGuitar-abc/doc/index-files/index-12.html
new file mode 100644
index 0000000..2f08fa6
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-12.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+O-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="O-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-11.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-13.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-12.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_O_"><!-- --></A><H2>
+<B>O</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#OPEN"><B>OPEN</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html#open()"><B>open()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCExportSettingsDialog</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html#open()"><B>open()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCImportSettingsDialog</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/package-summary.html"><B>org.herac.tuxguitar.io.abc</B></A> - package org.herac.tuxguitar.io.abc<DD> <DT><A HREF="../org/herac/tuxguitar/io/abc/base/package-summary.html"><B>org.herac.tuxguitar.io.abc.base</B></A> - package org.herac.tuxguitar.io.abc.base<DD> </DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-11.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-13.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-12.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-13.html b/TuxGuitar-abc/doc/index-files/index-13.html
new file mode 100644
index 0000000..b3104d9
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-13.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+P-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="P-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-12.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-14.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-13.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_P_"><!-- --></A><H2>
+<B>P</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#P"><B>P</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html#PERCUSSION_TUNINGS"><B>PERCUSSION_TUNINGS</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#PLUS"><B>PLUS</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#PP"><B>PP</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#PPP"><B>PPP</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#PPPP"><B>PPPP</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#postprocessor()"><B>postprocessor()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-12.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-14.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-13.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-14.html b/TuxGuitar-abc/doc/index-files/index-14.html
new file mode 100644
index 0000000..d2830a3
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-14.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+R-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="R-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-13.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-15.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-14.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_R_"><!-- --></A><H2>
+<B>R</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#REPEAT_BEGIN"><B>REPEAT_BEGIN</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#REPEAT_END"><B>REPEAT_END</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#REPEAT_END_AND_START"><B>REPEAT_END_AND_START</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#REST"><B>REST</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ROLL"><B>ROLL</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCInputStream.html#readSong()"><B>readSong()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCInputStream</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html#recall(int)"><B>recall(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base">ABCOctaveDatabase</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html#reset()"><B>reset()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base">ABCOctaveDatabase</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#resetScale()"><B>resetScale()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-13.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-15.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-14.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-15.html b/TuxGuitar-abc/doc/index-files/index-15.html
new file mode 100644
index 0000000..33f4a46
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-15.html
@@ -0,0 +1,502 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+S-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="S-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-14.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-16.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-15.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_S_"><!-- --></A><H2>
+<B>S</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#SEGNO"><B>SEGNO</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#SFZ"><B>SFZ</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#SHORTPHRASE"><B>SHORTPHRASE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#SLIDE"><B>SLIDE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#STACATODOT"><B>STACATODOT</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#STARTCRESCENDO"><B>STARTCRESCENDO</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#STARTDIMINUENDO"><B>STARTDIMINUENDO</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#STARTTRILL"><B>STARTTRILL</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setArea(java.lang.String)"><B>setArea(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setArea(java.lang.String)"><B>setArea(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setArtist(java.lang.String)"><B>setArtist(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setArtist(java.lang.String)"><B>setArtist(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setBarkey(java.lang.String)"><B>setBarkey(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setBaseTrack(int)"><B>setBaseTrack(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setBassprog(int)"><B>setBassprog(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setBassvol(int)"><B>setBassvol(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setBook(java.lang.String)"><B>setBook(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setBook(java.lang.String)"><B>setBook(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setCapo(int)"><B>setCapo(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setChord(org.herac.tuxguitar.io.abc.base.ABCChord)"><B>setChord(ABCChord)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setChord(int, org.herac.tuxguitar.io.abc.base.ABCChord)"><B>setChord(int, ABCChord)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setChordDiagramEnabled(boolean)"><B>setChordDiagramEnabled(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setChordEnabled(boolean)"><B>setChordEnabled(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setChordTrack(int)"><B>setChordTrack(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setChordprog(int)"><B>setChordprog(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setChords(int)"><B>setChords(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setChordvol(int)"><B>setChordvol(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setClefNumber(int)"><B>setClefNumber(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setClefType(int)"><B>setClefType(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setComments(java.lang.String)"><B>setComments(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setComments(java.lang.String)"><B>setComments(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setComponist(java.lang.String)"><B>setComponist(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setComponist(java.lang.String)"><B>setComponist(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDefaultNoteLength(org.herac.tuxguitar.io.abc.base.ABCTimeSignature)"><B>setDefaultNoteLength(ABCTimeSignature)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setDenominator(int)"><B>setDenominator(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setDiagramTrack(int)"><B>setDiagramTrack(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setDiscography(java.lang.String)"><B>setDiscography(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDiscography(java.lang.String)"><B>setDiscography(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDrone(java.lang.String)"><B>setDrone(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setDroneEnabled(boolean)"><B>setDroneEnabled(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setDroneTrack(int)"><B>setDroneTrack(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDroneon(boolean)"><B>setDroneon(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDrum(java.lang.String)"><B>setDrum(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDrumon(boolean)"><B>setDrumon(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setFilename(java.lang.String)"><B>setFilename(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setFilename(java.lang.String)"><B>setFilename(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setFlags(int)"><B>setFlags(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setGchord(java.lang.String)"><B>setGchord(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setGchordon(boolean)"><B>setGchordon(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setGrace(boolean)"><B>setGrace(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setGroup(java.lang.String)"><B>setGroup(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setGroup(java.lang.String)"><B>setGroup(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setInfo(org.herac.tuxguitar.io.abc.base.ABCInfo)"><B>setInfo(ABCInfo)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setInformation(java.lang.String)"><B>setInformation(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setInformation(java.lang.String)"><B>setInformation(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setInstrument(int)"><B>setInstrument(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setInstrumentOffset(int)"><B>setInstrumentOffset(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setInstrumentsStartAt1(boolean)"><B>setInstrumentsStartAt1(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setKey(java.lang.String)"><B>setKey(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setLegato(boolean)"><B>setLegato(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setLegato(int)"><B>setLegato(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setLyrics(java.lang.String)"><B>setLyrics(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setLyricsEnabled(boolean)"><B>setLyricsEnabled(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setMeasure(int)"><B>setMeasure(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setMeasureFrom(int)"><B>setMeasureFrom(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setMeasureTo(int)"><B>setMeasureTo(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setMeasuresPerLine(int)"><B>setMeasuresPerLine(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setNumerator(int)"><B>setNumerator(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setOrigin(java.lang.String)"><B>setOrigin(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setOrigin(java.lang.String)"><B>setOrigin(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setPan(int)"><B>setPan(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setPart(java.lang.String)"><B>setPart(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setPart(java.lang.String)"><B>setPart(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setParts(java.lang.String)"><B>setParts(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setPitchStringAndFret(int, int[])"><B>setPitchStringAndFret(int, int[])</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setRepeat(int, org.herac.tuxguitar.io.abc.base.ABCRepeat)"><B>setRepeat(int, ABCRepeat)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setRepeats(int)"><B>setRepeats(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setRhythm(java.lang.String)"><B>setRhythm(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD>Abc also includes a rhythm field, 
+ R:, which is used for cataloguing and sorting collections of abc tunes:
+ this is entirely free text (although there are obvious 'standard' entries eg R:reel, R:jig, R:schottische).
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setScoreEnabled(boolean)"><B>setScoreEnabled(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setSequence(int)"><B>setSequence(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setSource(java.lang.String)"><B>setSource(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setSource(java.lang.String)"><B>setSource(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setStacato(boolean)"><B>setStacato(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setStrings(int)"><B>setStrings(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setStrings(int[])"><B>setStrings(int[])</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setSubtitle(java.lang.String)"><B>setSubtitle(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setTablatureEnabled(boolean)"><B>setTablatureEnabled(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setTempo(int)"><B>setTempo(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTempo(java.lang.String)"><B>setTempo(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setText(int, org.herac.tuxguitar.io.abc.base.ABCText)"><B>setText(int, ABCText)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setTextEnabled(boolean)"><B>setTextEnabled(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTexts(int)"><B>setTexts(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTicks(int)"><B>setTicks(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setTicks(int)"><B>setTicks(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTied(boolean)"><B>setTied(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setTied(boolean)"><B>setTied(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTimeSignature(org.herac.tuxguitar.io.abc.base.ABCTimeSignature)"><B>setTimeSignature(ABCTimeSignature)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setTitle(java.lang.String)"><B>setTitle(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTitle(java.lang.String)"><B>setTitle(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setToEnd(boolean)"><B>setToEnd(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setTrack(int)"><B>setTrack(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTrack(int, org.herac.tuxguitar.io.abc.base.ABCTrack)"><B>setTrack(int, ABCTrack)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setTrackGroupEnabled(boolean)"><B>setTrackGroupEnabled(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setTrackNameEnabled(boolean)"><B>setTrackNameEnabled(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTracks(int)"><B>setTracks(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setTranscriptor(java.lang.String)"><B>setTranscriptor(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTranscriptor(java.lang.String)"><B>setTranscriptor(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTriplet(boolean)"><B>setTriplet(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTriplet(int, int, int)"><B>setTriplet(int, int, int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTripletP(int)"><B>setTripletP(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTripletQ(int)"><B>setTripletQ(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTripletR(int)"><B>setTripletR(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setType(int)"><B>setType(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setValue(int)"><B>setValue(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setVelocity(int)"><B>setVelocity(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setVoice(java.lang.String)"><B>setVoice(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setVolume(int)"><B>setVolume(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#setX(int)"><B>setX(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#setX(int)"><B>setX(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html#size()"><B>size()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#sortEvents()"><B>sortEvents()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html#store(int, int)"><B>store(int, int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base">ABCOctaveDatabase</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-14.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-16.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-15.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-16.html b/TuxGuitar-abc/doc/index-files/index-16.html
new file mode 100644
index 0000000..cd49dab
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-16.html
@@ -0,0 +1,203 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+T-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="T-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-15.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-17.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-16.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_T_"><!-- --></A><H2>
+<B>T</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TEMPO"><B>TEMPO</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TENUTO"><B>TENUTO</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#THUMB"><B>THUMB</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#TICKS_PER_QUART"><B>TICKS_PER_QUART</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TIME"><B>TIME</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TOCODA"><B>TOCODA</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TRILL"><B>TRILL</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TURN"><B>TURN</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TURNX"><B>TURNX</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCText.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#toString()"><B>toString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-15.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-17.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-16.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-17.html b/TuxGuitar-abc/doc/index-files/index-17.html
new file mode 100644
index 0000000..9a60da4
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-17.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+U-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="U-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-16.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-18.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-17.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_U_"><!-- --></A><H2>
+<B>U</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#UPBOW"><B>UPBOW</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#UPPERMORDENT"><B>UPPERMORDENT</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-16.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-18.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-17.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-18.html b/TuxGuitar-abc/doc/index-files/index-18.html
new file mode 100644
index 0000000..dd7799b
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-18.html
@@ -0,0 +1,137 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+V-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="V-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-17.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-19.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-18.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_V_"><!-- --></A><H2>
+<B>V</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#VARIANT"><B>VARIANT</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-17.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-19.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-18.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-19.html b/TuxGuitar-abc/doc/index-files/index-19.html
new file mode 100644
index 0000000..5a21f94
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-19.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+W-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="W-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-18.html"><B>PREV LETTER</B></A> 
+ NEXT LETTER</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-19.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_W_"><!-- --></A><H2>
+<B>W</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#WEDGE"><B>WEDGE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCOutputStream.html#writeSong(org.herac.tuxguitar.song.models.TGSong)"><B>writeSong(TGSong)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCOutputStream</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-18.html"><B>PREV LETTER</B></A> 
+ NEXT LETTER</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-19.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-2.html b/TuxGuitar-abc/doc/index-files/index-2.html
new file mode 100644
index 0000000..5e7020a
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-2.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+B-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="B-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-1.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-3.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-2.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_B_"><!-- --></A><H2>
+<B>B</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BAR"><B>BAR</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BAR_BAR"><B>BAR_BAR</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BAR_FATBAR"><B>BAR_FATBAR</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BASSPROG"><B>BASSPROG</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BASSVOL"><B>BASSVOL</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BREATH"><B>BREATH</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-1.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-3.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-2.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-3.html b/TuxGuitar-abc/doc/index-files/index-3.html
new file mode 100644
index 0000000..dde9df9
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-3.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+C-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="C-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-2.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-4.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-3.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_C_"><!-- --></A><H2>
+<B>C</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORDPROG"><B>CHORDPROG</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORDVOL"><B>CHORDVOL</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORD_BEGIN"><B>CHORD_BEGIN</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORD_CLOSE"><B>CHORD_CLOSE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORD_SYMBOL"><B>CHORD_SYMBOL</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CODA"><B>CODA</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#check()"><B>check()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#clone()"><B>clone()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#clone(java.lang.String, int)"><B>clone(String, int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#compareTo(java.lang.Object)"><B>compareTo(Object)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#compareTo(java.lang.Object)"><B>compareTo(Object)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#computePitch(org.herac.tuxguitar.io.abc.base.ABCEvent, char[])"><B>computePitch(ABCEvent, char[])</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html#configure(boolean)"><B>configure(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html#configure(boolean)"><B>configure(boolean)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html#copy()"><B>copy()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-2.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-4.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-3.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-4.html b/TuxGuitar-abc/doc/index-files/index-4.html
new file mode 100644
index 0000000..d02dc13
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-4.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+D-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="D-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-3.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-5.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-4.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_D_"><!-- --></A><H2>
+<B>D</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DACAPO"><B>DACAPO</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DACODA"><B>DACODA</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DC"><B>DC</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DECORATION"><B>DECORATION</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DOWNBOW"><B>DOWNBOW</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRONE"><B>DRONE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRONEOFF"><B>DRONEOFF</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRONEON"><B>DRONEON</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRUM"><B>DRUM</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRUMOFF"><B>DRUMOFF</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRUMON"><B>DRUMON</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DS"><B>DS</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DSS"><B>DSS</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#directive(java.lang.String)"><B>directive(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-3.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-5.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-4.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-5.html b/TuxGuitar-abc/doc/index-files/index-5.html
new file mode 100644
index 0000000..e37c307
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-5.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+E-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="E-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-4.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-6.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-5.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_E_"><!-- --></A><H2>
+<B>E</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ENDCRESCENDO"><B>ENDCRESCENDO</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ENDDIMINUENDO"><B>ENDDIMINUENDO</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ENDTRILL"><B>ENDTRILL</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html#execute(java.lang.String)"><B>execute(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base">ABCMacro</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#execute(java.lang.String)"><B>execute(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSymbol</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html#exportSong(org.herac.tuxguitar.song.models.TGSong)"><B>exportSong(TGSong)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongExporter</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-4.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-6.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-5.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-6.html b/TuxGuitar-abc/doc/index-files/index-6.html
new file mode 100644
index 0000000..ee055b1
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-6.html
@@ -0,0 +1,191 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+F-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="F-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-5.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-7.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-6.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_F_"><!-- --></A><H2>
+<B>F</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#F"><B>F</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FATBAR_BAR"><B>FATBAR_BAR</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FERMATA"><B>FERMATA</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FF"><B>FF</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FFF"><B>FFF</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FFFF"><B>FFFF</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINE"><B>FINE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_0"><B>FINGERING_0</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_1"><B>FINGERING_1</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_2"><B>FINGERING_2</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_3"><B>FINGERING_3</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_4"><B>FINGERING_4</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_5"><B>FINGERING_5</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#FIRST_MEASURE"><B>FIRST_MEASURE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_DOUBLE_STRINGS"><B>FLAG_DOUBLE_STRINGS</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_EFFECT_CHANNEL_DISABLED"><B>FLAG_EFFECT_CHANNEL_DISABLED</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_LET_RING"><B>FLAG_LET_RING</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_PEDAL_SABCEL_GUITAR"><B>FLAG_PEDAL_SABCEL_GUITAR</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_RHYTHM_TRACK"><B>FLAG_RHYTHM_TRACK</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-5.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-7.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-6.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-7.html b/TuxGuitar-abc/doc/index-files/index-7.html
new file mode 100644
index 0000000..4d1ad5d
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-7.html
@@ -0,0 +1,524 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+G-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="G-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-6.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-8.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-7.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_G_"><!-- --></A><H2>
+<B>G</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#GCHORD"><B>GCHORD</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#GCHORDOFF"><B>GCHORDOFF</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#GCHORDON"><B>GCHORDON</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getArea()"><B>getArea()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getArtist()"><B>getArtist()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#getAuthor()"><B>getAuthor()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#getAuthor()"><B>getAuthor()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html#getAuthor()"><B>getAuthor()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginList</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getBarkey()"><B>getBarkey()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getBaseTrack()"><B>getBaseTrack()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getBassprog()"><B>getBassprog()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getBassvol()"><B>getBassvol()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getBook()"><B>getBook()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getCapo()"><B>getCapo()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html#getChord()"><B>getChord()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getChord()"><B>getChord()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getChordTrack()"><B>getChordTrack()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getChordnum()"><B>getChordnum()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getChordprog()"><B>getChordprog()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getChords()"><B>getChords()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getChordvol()"><B>getChordvol()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getClefNumber()"><B>getClefNumber()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getClefType()"><B>getClefType()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getComments()"><B>getComments()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getComponist()"><B>getComponist()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html#getData1()"><B>getData1()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html#getData2()"><B>getData2()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getDeclaration()"><B>getDeclaration()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getDecoration()"><B>getDecoration()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getDefaultNoteLength()"><B>getDefaultNoteLength()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getDefaults()"><B>getDefaults()</B></A> - 
+Static method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getDenominator()"><B>getDenominator()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#getDenominator()"><B>getDenominator()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#getDescription()"><B>getDescription()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#getDescription()"><B>getDescription()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html#getDescription()"><B>getDescription()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginList</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getDiagramTrack()"><B>getDiagramTrack()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getDiscography()"><B>getDiscography()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getDrone()"><B>getDrone()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getDroneTrack()"><B>getDroneTrack()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getDrum()"><B>getDrum()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#getDuration()"><B>getDuration()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#getDynamic()"><B>getDynamic()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#getEffect()"><B>getEffect()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getEvent()"><B>getEvent()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getEvents()"><B>getEvents()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html#getExportName()"><B>getExportName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html#getFileFormat()"><B>getFileFormat()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html#getFileFormat()"><B>getFileFormat()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getFilename()"><B>getFilename()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getFlags()"><B>getFlags()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#getFret()"><B>getFret()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getFret()"><B>getFret()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getGchord()"><B>getGchord()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html#getGchordChar(int)"><B>getGchordChar(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getGroup()"><B>getGroup()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getHistory()"><B>getHistory()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html#getImportName()"><B>getImportName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getInfo()"><B>getInfo()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getInformation()"><B>getInformation()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getInstrument()"><B>getInstrument()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getKeySignature()"><B>getKeySignature()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getLegato()"><B>getLegato()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getLyrics()"><B>getLyrics()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getMeasure()"><B>getMeasure()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getMeasure()"><B>getMeasure()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html#getMeasure()"><B>getMeasure()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#getMeasure()"><B>getMeasure()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getMeasureFrom()"><B>getMeasureFrom()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getMeasureTo()"><B>getMeasureTo()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getMeasures()"><B>getMeasures()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getMeasuresPerLine()"><B>getMeasuresPerLine()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#getName()"><B>getName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#getName()"><B>getName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html#getName()"><B>getName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginList</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html#getName()"><B>getName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getName()"><B>getName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html#getName()"><B>getName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base">ABCMacro</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#getName()"><B>getName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSymbol</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getName()"><B>getName()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html#getNote(char)"><B>getNote(char)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getNotes()"><B>getNotes()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getNumerator()"><B>getNumerator()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#getNumerator()"><B>getNumerator()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getOrigin()"><B>getOrigin()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getPan()"><B>getPan()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getParm()"><B>getParm()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getPart()"><B>getPart()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getPitch()"><B>getPitch()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getPosition()"><B>getPosition()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getRepeats()"><B>getRepeats()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getSequence()"><B>getSequence()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getSource()"><B>getSource()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getString()"><B>getString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getString()"><B>getString()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html#getStrings()"><B>getStrings()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getStrings()"><B>getStrings()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getStrings()"><B>getStrings()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getSubtitle()"><B>getSubtitle()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getTempo()"><B>getTempo()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTempo()"><B>getTempo()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTempo(int)"><B>getTempo(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html#getTempo()"><B>getTempo()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTexts()"><B>getTexts()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getTicks()"><B>getTicks()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getTicks()"><B>getTicks()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTimeSignature()"><B>getTimeSignature()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTimeSignature(int)"><B>getTimeSignature(int)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#getTimeSignature()"><B>getTimeSignature()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getTitle()"><B>getTitle()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getTrack()"><B>getTrack()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getTrack()"><B>getTrack()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTrack()"><B>getTrack()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTracks()"><B>getTracks()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getTranscriptor()"><B>getTranscriptor()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getTripletP()"><B>getTripletP()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getTripletQ()"><B>getTripletQ()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getTripletR()"><B>getTripletR()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getType()"><B>getType()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getValue()"><B>getValue()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html#getValue()"><B>getValue()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCText.html#getValue()"><B>getValue()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getVariant()"><B>getVariant()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getVelocity()"><B>getVelocity()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#getVersion()"><B>getVersion()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#getVersion()"><B>getVersion()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html#getVersion()"><B>getVersion()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginList</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#getVoice(java.lang.String)"><B>getVoice(String)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getVolume()"><B>getVolume()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#getX()"><B>getX()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-6.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-8.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-7.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-8.html b/TuxGuitar-abc/doc/index-files/index-8.html
new file mode 100644
index 0000000..1664411
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-8.html
@@ -0,0 +1,239 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+I-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="I-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-7.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-9.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-8.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_I_"><!-- --></A><H2>
+<B>I</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#INVERTEDFERMATA"><B>INVERTEDFERMATA</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#INVERTEDTURN"><B>INVERTEDTURN</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#INVERTEDTURNX"><B>INVERTEDTURNX</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html#importSong()"><B>importSong()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html#init(org.herac.tuxguitar.song.factory.TGFactory, java.io.OutputStream)"><B>init(TGFactory, OutputStream)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongExporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html#init(org.herac.tuxguitar.song.factory.TGFactory, java.io.InputStream)"><B>init(TGFactory, InputStream)</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#initBody()"><B>initBody()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#initHead()"><B>initHead()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#isBagpipe()"><B>isBagpipe()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isChordDiagramEnabled()"><B>isChordDiagramEnabled()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isChordEnabled()"><B>isChordEnabled()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isDroneEnabled()"><B>isDroneEnabled()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#isDroneon()"><B>isDroneon()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#isDrumon()"><B>isDrumon()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#isGchordon()"><B>isGchordon()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isGrace()"><B>isGrace()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html#isHornpipe()"><B>isHornpipe()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isInstrumentsStartAt1()"><B>isInstrumentsStartAt1()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isLegato()"><B>isLegato()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isLyricsEnabled()"><B>isLyricsEnabled()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#isNil()"><B>isNil()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSymbol</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html#isPercussion()"><B>isPercussion()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isScoreEnabled()"><B>isScoreEnabled()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isStacato()"><B>isStacato()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isTablatureEnabled()"><B>isTablatureEnabled()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isTextEnabled()"><B>isTextEnabled()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isTied()"><B>isTied()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html#isTied()"><B>isTied()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isToEnd()"><B>isToEnd()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#isToEnd()"><B>isToEnd()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isTrackGroupEnabled()"><B>isTrackGroupEnabled()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#isTrackNameEnabled()"><B>isTrackNameEnabled()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isTriplet()"><B>isTriplet()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html#isValid()"><B>isValid()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base">ABCMacro</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#isValid()"><B>isValid()</B></A> - 
+Method in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSymbol</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-7.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-9.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-8.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index-files/index-9.html b/TuxGuitar-abc/doc/index-files/index-9.html
new file mode 100644
index 0000000..5e54893
--- /dev/null
+++ b/TuxGuitar-abc/doc/index-files/index-9.html
@@ -0,0 +1,146 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+L-Index
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="L-Index";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-8.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-10.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-9.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+<A NAME="_L_"><!-- --></A><H2>
+<B>L</B></H2>
+<DL>
+<DT><A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html#LAST_MEASURE"><B>LAST_MEASURE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.<A HREF="../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#LINE_BREAK"><B>LINE_BREAK</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#LONGPHRASE"><B>LONGPHRASE</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+<DT><A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html#LOWERMORDENT"><B>LOWERMORDENT</B></A> - 
+Static variable in class org.herac.tuxguitar.io.abc.base.<A HREF="../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A>
+<DD> 
+</DL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="index-8.html"><B>PREV LETTER</B></A> 
+ <A HREF="index-10.html"><B>NEXT LETTER</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="index-9.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<A HREF="index-1.html">A</A> <A HREF="index-2.html">B</A> <A HREF="index-3.html">C</A> <A HREF="index-4.html">D</A> <A HREF="index-5.html">E</A> <A HREF="index-6.html">F</A> <A HREF="index-7.html">G</A> <A HREF="index-8.html">I</A> <A HREF="index-9.html">L</A> <A HREF="index-10.html">M</A> <A HREF="index-11.html">N</A> <A HREF="index-12.html">O</A> <A HREF="index-13.html">P</A> <A HREF="index-14.html">R</A> <A HREF="index-15.html">S</A> <A HREF="index-16.html">T</A> <A HREF="index-17.htm [...]
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/index.html b/TuxGuitar-abc/doc/index.html
new file mode 100644
index 0000000..971c213
--- /dev/null
+++ b/TuxGuitar-abc/doc/index.html
@@ -0,0 +1,26 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc on Fri Jul 15 19:51:32 GMT+01:00 2011-->
+<TITLE>
+Generated Documentation (Untitled)
+</TITLE>
+</HEAD>
+<FRAMESET cols="20%,80%">
+<FRAMESET rows="30%,70%">
+<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">
+<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
+</FRAMESET>
+<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions">
+<NOFRAMES>
+<H2>
+Frame Alert</H2>
+
+<P>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<BR>
+Link to<A HREF="overview-summary.html">Non-frame version.</A>
+</NOFRAMES>
+</FRAMESET>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html
new file mode 100644
index 0000000..170fcef
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+ABCExportSettingsDialog
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCExportSettingsDialog class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCExportSettingsDialog";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCExportSettingsDialog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV CLASS 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCExportSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCExportSettingsDialog</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCExportSettingsDialog</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCExportSettingsDialog</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html#ABCExportSettingsDialog()">ABCExportSettingsDialog</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html#open()">open</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCExportSettingsDialog()"><!-- --></A><H3>
+ABCExportSettingsDialog</H3>
+<PRE>
+public <B>ABCExportSettingsDialog</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="open()"><!-- --></A><H3>
+open</H3>
+<PRE>
+public <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> <B>open</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCExportSettingsDialog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV CLASS 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCExportSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html
new file mode 100644
index 0000000..a905fb2
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+ABCImportSettingsDialog
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCImportSettingsDialog class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCImportSettingsDialog";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCImportSettingsDialog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCImportSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCImportSettingsDialog</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCImportSettingsDialog</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCImportSettingsDialog</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html#ABCImportSettingsDialog()">ABCImportSettingsDialog</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html#open()">open</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCImportSettingsDialog()"><!-- --></A><H3>
+ABCImportSettingsDialog</H3>
+<PRE>
+public <B>ABCImportSettingsDialog</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="open()"><!-- --></A><H3>
+open</H3>
+<PRE>
+public <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> <B>open</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCImportSettingsDialog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCImportSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCInputStream.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCInputStream.html
new file mode 100644
index 0000000..828ac63
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCInputStream.html
@@ -0,0 +1,257 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCInputStream
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCInputStream class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCInputStream";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCInputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCInputStream.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCInputStream</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCInputStream</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCInputStream</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html#ABCInputStream(java.io.InputStream, org.herac.tuxguitar.io.abc.ABCSettings)">ABCInputStream</A></B>(java.io.InputStream stream,
+               <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> settings)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html#readSong()">readSong</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCInputStream(java.io.InputStream, org.herac.tuxguitar.io.abc.ABCSettings)"><!-- --></A><H3>
+ABCInputStream</H3>
+<PRE>
+public <B>ABCInputStream</B>(java.io.InputStream stream,
+                      <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> settings)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="readSong()"><!-- --></A><H3>
+readSong</H3>
+<PRE>
+public <A HREF="../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A> <B>readSong</B>()
+                 throws org.herac.tuxguitar.io.base.TGFileFormatException</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>org.herac.tuxguitar.io.base.TGFileFormatException</CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCInputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCInputStream.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCOutputStream.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCOutputStream.html
new file mode 100644
index 0000000..8d60e6a
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCOutputStream.html
@@ -0,0 +1,254 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCOutputStream
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCOutputStream class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCOutputStream";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCOutputStream.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCOutputStream</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCOutputStream</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCOutputStream</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html#ABCOutputStream(java.io.OutputStream, org.herac.tuxguitar.io.abc.ABCSettings)">ABCOutputStream</A></B>(java.io.OutputStream stream,
+                <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> settings)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html#writeSong(org.herac.tuxguitar.song.models.TGSong)">writeSong</A></B>(org.herac.tuxguitar.song.models.TGSong song)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCOutputStream(java.io.OutputStream, org.herac.tuxguitar.io.abc.ABCSettings)"><!-- --></A><H3>
+ABCOutputStream</H3>
+<PRE>
+public <B>ABCOutputStream</B>(java.io.OutputStream stream,
+                       <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> settings)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="writeSong(org.herac.tuxguitar.song.models.TGSong)"><!-- --></A><H3>
+writeSong</H3>
+<PRE>
+public void <B>writeSong</B>(org.herac.tuxguitar.song.models.TGSong song)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCOutputStream.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCOutputStream.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCPluginExporter.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCPluginExporter.html
new file mode 100644
index 0000000..cc2db93
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCPluginExporter.html
@@ -0,0 +1,323 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCPluginExporter
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCPluginExporter class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCPluginExporter";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCPluginExporter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginExporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCPluginExporter</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by">org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter
+      <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by">org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin
+          <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCPluginExporter</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD>org.herac.tuxguitar.gui.system.plugins.TGPlugin</DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>ABCPluginExporter</B><DT>extends org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#ABCPluginExporter()">ABCPluginExporter</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#getAuthor()">getAuthor</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#getDescription()">getDescription</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html#getVersion()">getVersion</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>close, init, setEnabled</CODE></TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCPluginExporter()"><!-- --></A><H3>
+ABCPluginExporter</H3>
+<PRE>
+public <B>ABCPluginExporter</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getAuthor()"><!-- --></A><H3>
+getAuthor</H3>
+<PRE>
+public java.lang.String <B>getAuthor</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDescription()"><!-- --></A><H3>
+getDescription</H3>
+<PRE>
+public java.lang.String <B>getDescription</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVersion()"><!-- --></A><H3>
+getVersion</H3>
+<PRE>
+public java.lang.String <B>getVersion</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCPluginExporter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginExporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCPluginImporter.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCPluginImporter.html
new file mode 100644
index 0000000..4f32f4e
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCPluginImporter.html
@@ -0,0 +1,323 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCPluginImporter
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCPluginImporter class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCPluginImporter";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCPluginImporter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginImporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCPluginImporter</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by">org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter
+      <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by">org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin
+          <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCPluginImporter</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD>org.herac.tuxguitar.gui.system.plugins.TGPlugin</DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>ABCPluginImporter</B><DT>extends org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#ABCPluginImporter()">ABCPluginImporter</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#getAuthor()">getAuthor</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#getDescription()">getDescription</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html#getVersion()">getVersion</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>close, init, setEnabled</CODE></TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCPluginImporter()"><!-- --></A><H3>
+ABCPluginImporter</H3>
+<PRE>
+public <B>ABCPluginImporter</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getAuthor()"><!-- --></A><H3>
+getAuthor</H3>
+<PRE>
+public java.lang.String <B>getAuthor</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDescription()"><!-- --></A><H3>
+getDescription</H3>
+<PRE>
+public java.lang.String <B>getDescription</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVersion()"><!-- --></A><H3>
+getVersion</H3>
+<PRE>
+public java.lang.String <B>getVersion</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCPluginImporter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginImporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCPluginList.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCPluginList.html
new file mode 100644
index 0000000..4d8dcba
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCPluginList.html
@@ -0,0 +1,323 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCPluginList
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCPluginList class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCPluginList";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCPluginList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginList.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCPluginList</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by">org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter
+      <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by">org.herac.tuxguitar.gui.system.plugins.base.TGPluginList
+          <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCPluginList</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD>org.herac.tuxguitar.gui.system.plugins.TGPlugin</DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>ABCPluginList</B><DT>extends org.herac.tuxguitar.gui.system.plugins.base.TGPluginList</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html#ABCPluginList()">ABCPluginList</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html#getAuthor()">getAuthor</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html#getDescription()">getDescription</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html#getVersion()">getVersion</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_org.herac.tuxguitar.gui.system.plugins.base.TGPluginList"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class org.herac.tuxguitar.gui.system.plugins.base.TGPluginList</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>close, init, setEnabled</CODE></TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCPluginList()"><!-- --></A><H3>
+ABCPluginList</H3>
+<PRE>
+public <B>ABCPluginList</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getAuthor()"><!-- --></A><H3>
+getAuthor</H3>
+<PRE>
+public java.lang.String <B>getAuthor</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDescription()"><!-- --></A><H3>
+getDescription</H3>
+<PRE>
+public java.lang.String <B>getDescription</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVersion()"><!-- --></A><H3>
+getVersion</H3>
+<PRE>
+public java.lang.String <B>getVersion</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCPluginList.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginList.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSettings.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSettings.html
new file mode 100644
index 0000000..4d92eb5
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSettings.html
@@ -0,0 +1,1121 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCSettings
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCSettings class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCSettings";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSettings.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSettings.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCSettings</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCSettings</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCSettings</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#ALL_TRACKS">ALL_TRACKS</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#AUTO_MEASURES">AUTO_MEASURES</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#AUTO_TRACK">AUTO_TRACK</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#FIRST_MEASURE">FIRST_MEASURE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#LAST_MEASURE">LAST_MEASURE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#NO_TRACK">NO_TRACK</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#ABCSettings()">ABCSettings</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#check()">check</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getBaseTrack()">getBaseTrack</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getChordTrack()">getChordTrack</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getDefaults()">getDefaults</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getDiagramTrack()">getDiagramTrack</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getDroneTrack()">getDroneTrack</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getMeasureFrom()">getMeasureFrom</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getMeasuresPerLine()">getMeasuresPerLine</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getMeasureTo()">getMeasureTo</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getTrack()">getTrack</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getX()">getX</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isChordDiagramEnabled()">isChordDiagramEnabled</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isChordEnabled()">isChordEnabled</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isDroneEnabled()">isDroneEnabled</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isInstrumentsStartAt1()">isInstrumentsStartAt1</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isLyricsEnabled()">isLyricsEnabled</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isScoreEnabled()">isScoreEnabled</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isTablatureEnabled()">isTablatureEnabled</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isTextEnabled()">isTextEnabled</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isTrackGroupEnabled()">isTrackGroupEnabled</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#isTrackNameEnabled()">isTrackNameEnabled</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setBaseTrack(int)">setBaseTrack</A></B>(int baseTrack)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setChordDiagramEnabled(boolean)">setChordDiagramEnabled</A></B>(boolean chordDiagramEnabled)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setChordEnabled(boolean)">setChordEnabled</A></B>(boolean chordEnabled)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setChordTrack(int)">setChordTrack</A></B>(int chordTrack)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setDiagramTrack(int)">setDiagramTrack</A></B>(int diagramTrack)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setDroneEnabled(boolean)">setDroneEnabled</A></B>(boolean droneEnabled)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setDroneTrack(int)">setDroneTrack</A></B>(int droneTrack)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setInstrumentsStartAt1(boolean)">setInstrumentsStartAt1</A></B>(boolean instrumentsStartAt1)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setLyricsEnabled(boolean)">setLyricsEnabled</A></B>(boolean lyricsEnabled)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setMeasureFrom(int)">setMeasureFrom</A></B>(int measureFrom)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setMeasuresPerLine(int)">setMeasuresPerLine</A></B>(int measuresPerLine)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setMeasureTo(int)">setMeasureTo</A></B>(int measureTo)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setScoreEnabled(boolean)">setScoreEnabled</A></B>(boolean scoreEnabled)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setTablatureEnabled(boolean)">setTablatureEnabled</A></B>(boolean tablatureEnabled)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setTextEnabled(boolean)">setTextEnabled</A></B>(boolean textEnabled)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setTrack(int)">setTrack</A></B>(int track)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setTrackGroupEnabled(boolean)">setTrackGroupEnabled</A></B>(boolean trackGroupEnabled)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setTrackNameEnabled(boolean)">setTrackNameEnabled</A></B>(boolean trackNameEnabled)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#setX(int)">setX</A></B>(int x)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ALL_TRACKS"><!-- --></A><H3>
+ALL_TRACKS</H3>
+<PRE>
+public static final int <B>ALL_TRACKS</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#org.herac.tuxguitar.io.abc.ABCSettings.ALL_TRACKS">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FIRST_MEASURE"><!-- --></A><H3>
+FIRST_MEASURE</H3>
+<PRE>
+public static final int <B>FIRST_MEASURE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#org.herac.tuxguitar.io.abc.ABCSettings.FIRST_MEASURE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="LAST_MEASURE"><!-- --></A><H3>
+LAST_MEASURE</H3>
+<PRE>
+public static final int <B>LAST_MEASURE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#org.herac.tuxguitar.io.abc.ABCSettings.LAST_MEASURE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="AUTO_MEASURES"><!-- --></A><H3>
+AUTO_MEASURES</H3>
+<PRE>
+public static final int <B>AUTO_MEASURES</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#org.herac.tuxguitar.io.abc.ABCSettings.AUTO_MEASURES">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="AUTO_TRACK"><!-- --></A><H3>
+AUTO_TRACK</H3>
+<PRE>
+public static final int <B>AUTO_TRACK</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#org.herac.tuxguitar.io.abc.ABCSettings.AUTO_TRACK">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="NO_TRACK"><!-- --></A><H3>
+NO_TRACK</H3>
+<PRE>
+public static final int <B>NO_TRACK</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../constant-values.html#org.herac.tuxguitar.io.abc.ABCSettings.NO_TRACK">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCSettings()"><!-- --></A><H3>
+ABCSettings</H3>
+<PRE>
+public <B>ABCSettings</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getMeasureFrom()"><!-- --></A><H3>
+getMeasureFrom</H3>
+<PRE>
+public int <B>getMeasureFrom</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMeasureFrom(int)"><!-- --></A><H3>
+setMeasureFrom</H3>
+<PRE>
+public void <B>setMeasureFrom</B>(int measureFrom)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMeasureTo()"><!-- --></A><H3>
+getMeasureTo</H3>
+<PRE>
+public int <B>getMeasureTo</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMeasureTo(int)"><!-- --></A><H3>
+setMeasureTo</H3>
+<PRE>
+public void <B>setMeasureTo</B>(int measureTo)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTrack()"><!-- --></A><H3>
+getTrack</H3>
+<PRE>
+public int <B>getTrack</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTrack(int)"><!-- --></A><H3>
+setTrack</H3>
+<PRE>
+public void <B>setTrack</B>(int track)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTrackGroupEnabled()"><!-- --></A><H3>
+isTrackGroupEnabled</H3>
+<PRE>
+public boolean <B>isTrackGroupEnabled</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTrackGroupEnabled(boolean)"><!-- --></A><H3>
+setTrackGroupEnabled</H3>
+<PRE>
+public void <B>setTrackGroupEnabled</B>(boolean trackGroupEnabled)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTrackNameEnabled()"><!-- --></A><H3>
+isTrackNameEnabled</H3>
+<PRE>
+public boolean <B>isTrackNameEnabled</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTrackNameEnabled(boolean)"><!-- --></A><H3>
+setTrackNameEnabled</H3>
+<PRE>
+public void <B>setTrackNameEnabled</B>(boolean trackNameEnabled)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isScoreEnabled()"><!-- --></A><H3>
+isScoreEnabled</H3>
+<PRE>
+public boolean <B>isScoreEnabled</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setScoreEnabled(boolean)"><!-- --></A><H3>
+setScoreEnabled</H3>
+<PRE>
+public void <B>setScoreEnabled</B>(boolean scoreEnabled)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTablatureEnabled()"><!-- --></A><H3>
+isTablatureEnabled</H3>
+<PRE>
+public boolean <B>isTablatureEnabled</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTablatureEnabled(boolean)"><!-- --></A><H3>
+setTablatureEnabled</H3>
+<PRE>
+public void <B>setTablatureEnabled</B>(boolean tablatureEnabled)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isLyricsEnabled()"><!-- --></A><H3>
+isLyricsEnabled</H3>
+<PRE>
+public boolean <B>isLyricsEnabled</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLyricsEnabled(boolean)"><!-- --></A><H3>
+setLyricsEnabled</H3>
+<PRE>
+public void <B>setLyricsEnabled</B>(boolean lyricsEnabled)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isChordDiagramEnabled()"><!-- --></A><H3>
+isChordDiagramEnabled</H3>
+<PRE>
+public boolean <B>isChordDiagramEnabled</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setChordDiagramEnabled(boolean)"><!-- --></A><H3>
+setChordDiagramEnabled</H3>
+<PRE>
+public void <B>setChordDiagramEnabled</B>(boolean chordDiagramEnabled)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTextEnabled()"><!-- --></A><H3>
+isTextEnabled</H3>
+<PRE>
+public boolean <B>isTextEnabled</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTextEnabled(boolean)"><!-- --></A><H3>
+setTextEnabled</H3>
+<PRE>
+public void <B>setTextEnabled</B>(boolean textEnabled)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="check()"><!-- --></A><H3>
+check</H3>
+<PRE>
+public void <B>check</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDefaults()"><!-- --></A><H3>
+getDefaults</H3>
+<PRE>
+public static <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> <B>getDefaults</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getX()"><!-- --></A><H3>
+getX</H3>
+<PRE>
+public int <B>getX</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the x</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setX(int)"><!-- --></A><H3>
+setX</H3>
+<PRE>
+public void <B>setX</B>(int x)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>x</CODE> - the x to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isInstrumentsStartAt1()"><!-- --></A><H3>
+isInstrumentsStartAt1</H3>
+<PRE>
+public boolean <B>isInstrumentsStartAt1</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the instrumentsStartAt1</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setInstrumentsStartAt1(boolean)"><!-- --></A><H3>
+setInstrumentsStartAt1</H3>
+<PRE>
+public void <B>setInstrumentsStartAt1</B>(boolean instrumentsStartAt1)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>instrumentsStartAt1</CODE> - the instrumentsStartAt1 to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMeasuresPerLine()"><!-- --></A><H3>
+getMeasuresPerLine</H3>
+<PRE>
+public int <B>getMeasuresPerLine</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMeasuresPerLine(int)"><!-- --></A><H3>
+setMeasuresPerLine</H3>
+<PRE>
+public void <B>setMeasuresPerLine</B>(int measuresPerLine)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>measuresPerLine</CODE> - the measuresPerLine to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBaseTrack()"><!-- --></A><H3>
+getBaseTrack</H3>
+<PRE>
+public int <B>getBaseTrack</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the baseTrack</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBaseTrack(int)"><!-- --></A><H3>
+setBaseTrack</H3>
+<PRE>
+public void <B>setBaseTrack</B>(int baseTrack)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>baseTrack</CODE> - the baseTrack to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getChordTrack()"><!-- --></A><H3>
+getChordTrack</H3>
+<PRE>
+public int <B>getChordTrack</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the chordTrack</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setChordTrack(int)"><!-- --></A><H3>
+setChordTrack</H3>
+<PRE>
+public void <B>setChordTrack</B>(int chordTrack)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chordTrack</CODE> - the chordTrack to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDiagramTrack()"><!-- --></A><H3>
+getDiagramTrack</H3>
+<PRE>
+public int <B>getDiagramTrack</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the diagramTrack</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDiagramTrack(int)"><!-- --></A><H3>
+setDiagramTrack</H3>
+<PRE>
+public void <B>setDiagramTrack</B>(int diagramTrack)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>diagramTrack</CODE> - the diagramTrack to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDroneTrack()"><!-- --></A><H3>
+getDroneTrack</H3>
+<PRE>
+public int <B>getDroneTrack</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDroneTrack(int)"><!-- --></A><H3>
+setDroneTrack</H3>
+<PRE>
+public void <B>setDroneTrack</B>(int droneTrack)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>droneTrack</CODE> - the droneTrack to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isDroneEnabled()"><!-- --></A><H3>
+isDroneEnabled</H3>
+<PRE>
+public boolean <B>isDroneEnabled</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the droneEnabled</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDroneEnabled(boolean)"><!-- --></A><H3>
+setDroneEnabled</H3>
+<PRE>
+public void <B>setDroneEnabled</B>(boolean droneEnabled)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>droneEnabled</CODE> - the droneEnabled to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isChordEnabled()"><!-- --></A><H3>
+isChordEnabled</H3>
+<PRE>
+public boolean <B>isChordEnabled</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the chordEnabled</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setChordEnabled(boolean)"><!-- --></A><H3>
+setChordEnabled</H3>
+<PRE>
+public void <B>setChordEnabled</B>(boolean chordEnabled)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chordEnabled</CODE> - the chordEnabled to set</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSettings.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSettings.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSettingsDialog.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSettingsDialog.html
new file mode 100644
index 0000000..ee4f3c2
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSettingsDialog.html
@@ -0,0 +1,252 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Sun Jun 26 09:16:56 GMT+01:00 2011 -->
+<TITLE>
+ABCSettingsDialog
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCSettingsDialog class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCSettingsDialog";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSettingsDialog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCSettingsDialog</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCSettingsDialog</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCSettingsDialog</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettingsDialog.html#ABCSettingsDialog()">ABCSettingsDialog</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettingsDialog.html#open()">open</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCSettingsDialog()"><!-- --></A><H3>
+ABCSettingsDialog</H3>
+<PRE>
+public <B>ABCSettingsDialog</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="open()"><!-- --></A><H3>
+open</H3>
+<PRE>
+public <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> <B>open</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSettingsDialog.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSongExporter.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSongExporter.html
new file mode 100644
index 0000000..2cdb931
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSongExporter.html
@@ -0,0 +1,348 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCSongExporter
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCSongExporter class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCSongExporter";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSongExporter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSongExporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCSongExporter</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCSongExporter</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD>org.herac.tuxguitar.io.base.TGLocalFileExporter, org.herac.tuxguitar.io.base.TGRawExporter</DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>ABCSongExporter</B><DT>extends java.lang.Object<DT>implements org.herac.tuxguitar.io.base.TGLocalFileExporter</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html#ABCSongExporter()">ABCSongExporter</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html#configure(boolean)">configure</A></B>(boolean setDefaults)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html#exportSong(org.herac.tuxguitar.song.models.TGSong)">exportSong</A></B>(org.herac.tuxguitar.song.models.TGSong song)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html#getExportName()">getExportName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> org.herac.tuxguitar.io.base.TGFileFormat</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html#getFileFormat()">getFileFormat</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html#init(org.herac.tuxguitar.song.factory.TGFactory, java.io.OutputStream)">init</A></B>(org.herac.tuxguitar.song.factory.TGFactory factory,
+     java.io.OutputStream stream)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCSongExporter()"><!-- --></A><H3>
+ABCSongExporter</H3>
+<PRE>
+public <B>ABCSongExporter</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getExportName()"><!-- --></A><H3>
+getExportName</H3>
+<PRE>
+public java.lang.String <B>getExportName</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>getExportName</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGRawExporter</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFileFormat()"><!-- --></A><H3>
+getFileFormat</H3>
+<PRE>
+public org.herac.tuxguitar.io.base.TGFileFormat <B>getFileFormat</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>getFileFormat</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGLocalFileExporter</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="configure(boolean)"><!-- --></A><H3>
+configure</H3>
+<PRE>
+public boolean <B>configure</B>(boolean setDefaults)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>configure</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGLocalFileExporter</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="init(org.herac.tuxguitar.song.factory.TGFactory, java.io.OutputStream)"><!-- --></A><H3>
+init</H3>
+<PRE>
+public void <B>init</B>(org.herac.tuxguitar.song.factory.TGFactory factory,
+                 java.io.OutputStream stream)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>init</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGLocalFileExporter</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="exportSong(org.herac.tuxguitar.song.models.TGSong)"><!-- --></A><H3>
+exportSong</H3>
+<PRE>
+public void <B>exportSong</B>(org.herac.tuxguitar.song.models.TGSong song)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>exportSong</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGRawExporter</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSongExporter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSongExporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSongImporter.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSongImporter.html
new file mode 100644
index 0000000..3fd641c
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/ABCSongImporter.html
@@ -0,0 +1,382 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCSongImporter
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.ABCSongImporter class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCSongImporter";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSongImporter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSongImporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc</FONT>
+<BR>
+Class ABCSongImporter</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.ABCSongImporter</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD>org.herac.tuxguitar.io.base.TGLocalFileImporter, org.herac.tuxguitar.io.base.TGRawImporter</DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>ABCSongImporter</B><DT>extends java.lang.Object<DT>implements org.herac.tuxguitar.io.base.TGLocalFileImporter</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int[][]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html#PERCUSSION_TUNINGS">PERCUSSION_TUNINGS</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html#ABCSongImporter()">ABCSongImporter</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html#configure(boolean)">configure</A></B>(boolean setDefaults)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> org.herac.tuxguitar.io.base.TGFileFormat</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html#getFileFormat()">getFileFormat</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html#getImportName()">getImportName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> org.herac.tuxguitar.song.models.TGSong</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html#importSong()">importSong</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html#init(org.herac.tuxguitar.song.factory.TGFactory, java.io.InputStream)">init</A></B>(org.herac.tuxguitar.song.factory.TGFactory factory,
+     java.io.InputStream stream)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="PERCUSSION_TUNINGS"><!-- --></A><H3>
+PERCUSSION_TUNINGS</H3>
+<PRE>
+public static final int[][] <B>PERCUSSION_TUNINGS</B></PRE>
+<DL>
+<DL>
+</DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCSongImporter()"><!-- --></A><H3>
+ABCSongImporter</H3>
+<PRE>
+public <B>ABCSongImporter</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getFileFormat()"><!-- --></A><H3>
+getFileFormat</H3>
+<PRE>
+public org.herac.tuxguitar.io.base.TGFileFormat <B>getFileFormat</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>getFileFormat</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGLocalFileImporter</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getImportName()"><!-- --></A><H3>
+getImportName</H3>
+<PRE>
+public java.lang.String <B>getImportName</B>()</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>getImportName</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGRawImporter</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="configure(boolean)"><!-- --></A><H3>
+configure</H3>
+<PRE>
+public boolean <B>configure</B>(boolean setDefaults)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>configure</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGLocalFileImporter</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="init(org.herac.tuxguitar.song.factory.TGFactory, java.io.InputStream)"><!-- --></A><H3>
+init</H3>
+<PRE>
+public void <B>init</B>(org.herac.tuxguitar.song.factory.TGFactory factory,
+                 java.io.InputStream stream)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>init</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGLocalFileImporter</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="importSong()"><!-- --></A><H3>
+importSong</H3>
+<PRE>
+public org.herac.tuxguitar.song.models.TGSong <B>importSong</B>()
+                                                  throws org.herac.tuxguitar.io.base.TGFileFormatException</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>importSong</CODE> in interface <CODE>org.herac.tuxguitar.io.base.TGRawImporter</CODE></DL>
+</DD>
+<DD><DL>
+
+<DT><B>Throws:</B>
+<DD><CODE>org.herac.tuxguitar.io.base.TGFileFormatException</CODE></DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSongImporter.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>PREV CLASS</B></A> 
+ NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSongImporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCChord.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCChord.html
new file mode 100644
index 0000000..b7a1452
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCChord.html
@@ -0,0 +1,347 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCChord
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCChord class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCChord";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCChord.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV CLASS 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCChord.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCChord</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCChord</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCChord</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html#ABCChord(java.lang.String)">ABCChord</A></B>(java.lang.String name)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> char</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html#getGchordChar(int)">getGchordChar</A></B>(int value)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html#getNote(char)">getNote</A></B>(char c)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> byte[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html#getStrings()">getStrings</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html#size()">size</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCChord(java.lang.String)"><!-- --></A><H3>
+ABCChord</H3>
+<PRE>
+public <B>ABCChord</B>(java.lang.String name)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getStrings()"><!-- --></A><H3>
+getStrings</H3>
+<PRE>
+public byte[] <B>getStrings</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="size()"><!-- --></A><H3>
+size</H3>
+<PRE>
+public int <B>size</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getNote(char)"><!-- --></A><H3>
+getNote</H3>
+<PRE>
+public java.lang.String <B>getNote</B>(char c)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getGchordChar(int)"><!-- --></A><H3>
+getGchordChar</H3>
+<PRE>
+public char <B>getGchordChar</B>(int value)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCChord.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV CLASS 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCChord.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCComponent.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCComponent.html
new file mode 100644
index 0000000..98f7835
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCComponent.html
@@ -0,0 +1,297 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCComponent
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCComponent class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCComponent";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCComponent.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponent.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCComponent</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCComponent</B>
+</PRE>
+<DL>
+<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentChord</A>, <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A></DD>
+</DL>
+<HR>
+<DL>
+<DT>public abstract class <B>ABCComponent</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#ABCComponent(int, int, int)">ABCComponent</A></B>(int position,
+             int measure,
+             int string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getMeasure()">getMeasure</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getPosition()">getPosition</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getString()">getString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCComponent(int, int, int)"><!-- --></A><H3>
+ABCComponent</H3>
+<PRE>
+public <B>ABCComponent</B>(int position,
+                    int measure,
+                    int string)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getPosition()"><!-- --></A><H3>
+getPosition</H3>
+<PRE>
+public int <B>getPosition</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMeasure()"><!-- --></A><H3>
+getMeasure</H3>
+<PRE>
+public int <B>getMeasure</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getString()"><!-- --></A><H3>
+getString</H3>
+<PRE>
+public int <B>getString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCComponent.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponent.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCComponentChord.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCComponentChord.html
new file mode 100644
index 0000000..c3db2d0
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCComponentChord.html
@@ -0,0 +1,287 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCComponentChord
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCComponentChord class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCComponentChord";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCComponentChord.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponentChord.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCComponentChord</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">org.herac.tuxguitar.io.abc.base.ABCComponent</A>
+      <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCComponentChord</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCComponentChord</B><DT>extends <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A></DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html#ABCComponentChord(int, int, int, int)">ABCComponentChord</A></B>(int position,
+                  int measure,
+                  int string,
+                  int chord)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html#getChord()">getChord</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_org.herac.tuxguitar.io.abc.base.ABCComponent"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getMeasure()">getMeasure</A>, <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getPosition()">getPosition</A>, <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getString()">getString</A></CODE></TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCComponentChord(int, int, int, int)"><!-- --></A><H3>
+ABCComponentChord</H3>
+<PRE>
+public <B>ABCComponentChord</B>(int position,
+                         int measure,
+                         int string,
+                         int chord)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getChord()"><!-- --></A><H3>
+getChord</H3>
+<PRE>
+public int <B>getChord</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCComponentChord.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponentChord.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCComponentNote.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCComponentNote.html
new file mode 100644
index 0000000..795d9b4
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCComponentNote.html
@@ -0,0 +1,350 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCComponentNote
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCComponentNote class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCComponentNote";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCComponentNote.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponentNote.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCComponentNote</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">org.herac.tuxguitar.io.abc.base.ABCComponent</A>
+      <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCComponentNote</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCComponentNote</B><DT>extends <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A></DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#ABCComponentNote(int, int, int, int, int, int, int)">ABCComponentNote</A></B>(int position,
+                 int measure,
+                 int string,
+                 int fret,
+                 int duration,
+                 int dynamic,
+                 int effect)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#getDuration()">getDuration</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#getDynamic()">getDynamic</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#getEffect()">getEffect</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#getFret()">getFret</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_org.herac.tuxguitar.io.abc.base.ABCComponent"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A></B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getMeasure()">getMeasure</A>, <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getPosition()">getPosition</A>, <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html#getString()">getString</A></CODE></TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCComponentNote(int, int, int, int, int, int, int)"><!-- --></A><H3>
+ABCComponentNote</H3>
+<PRE>
+public <B>ABCComponentNote</B>(int position,
+                        int measure,
+                        int string,
+                        int fret,
+                        int duration,
+                        int dynamic,
+                        int effect)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getDuration()"><!-- --></A><H3>
+getDuration</H3>
+<PRE>
+public int <B>getDuration</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDynamic()"><!-- --></A><H3>
+getDynamic</H3>
+<PRE>
+public int <B>getDynamic</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEffect()"><!-- --></A><H3>
+getEffect</H3>
+<PRE>
+public int <B>getEffect</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFret()"><!-- --></A><H3>
+getFret</H3>
+<PRE>
+public int <B>getFret</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCComponentNote.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponentNote.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCEvent.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCEvent.html
new file mode 100644
index 0000000..8de40d6
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCEvent.html
@@ -0,0 +1,2988 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCEvent
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCEvent class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCEvent";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCEvent.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCEvent.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCEvent</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCEvent</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD>java.lang.Comparable</DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>ABCEvent</B><DT>extends java.lang.Object<DT>implements java.lang.Comparable</DL>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>peter</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ACCENT">ACCENT</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ALCODA">ALCODA</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ALFINE">ALFINE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ANNOTATION">ANNOTATION</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ARPEGGIO">ARPEGGIO</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BAR">BAR</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BAR_BAR">BAR_BAR</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BAR_FATBAR">BAR_FATBAR</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BASSPROG">BASSPROG</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BASSVOL">BASSVOL</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#BREATH">BREATH</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORD_BEGIN">CHORD_BEGIN</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORD_CLOSE">CHORD_CLOSE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORD_SYMBOL">CHORD_SYMBOL</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORDPROG">CHORDPROG</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CHORDVOL">CHORDVOL</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#CODA">CODA</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DACAPO">DACAPO</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DACODA">DACODA</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DC">DC</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DECORATION">DECORATION</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DOWNBOW">DOWNBOW</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRONE">DRONE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRONEOFF">DRONEOFF</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRONEON">DRONEON</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRUM">DRUM</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRUMOFF">DRUMOFF</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DRUMON">DRUMON</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DS">DS</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#DSS">DSS</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ENDCRESCENDO">ENDCRESCENDO</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ENDDIMINUENDO">ENDDIMINUENDO</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ENDTRILL">ENDTRILL</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#F">F</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FATBAR_BAR">FATBAR_BAR</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FERMATA">FERMATA</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FF">FF</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FFF">FFF</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FFFF">FFFF</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINE">FINE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_0">FINGERING_0</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_1">FINGERING_1</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_2">FINGERING_2</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_3">FINGERING_3</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_4">FINGERING_4</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#FINGERING_5">FINGERING_5</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#GCHORD">GCHORD</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#GCHORDOFF">GCHORDOFF</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#GCHORDON">GCHORDON</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#INVERTEDFERMATA">INVERTEDFERMATA</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#INVERTEDTURN">INVERTEDTURN</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#INVERTEDTURNX">INVERTEDTURNX</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#LINE_BREAK">LINE_BREAK</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#LONGPHRASE">LONGPHRASE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#LOWERMORDENT">LOWERMORDENT</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#MEDIUMPHRASE">MEDIUMPHRASE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#MF">MF</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#MP">MP</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#NOT_RELEVANT">NOT_RELEVANT</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#NOTE">NOTE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#OPEN">OPEN</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#P">P</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#PLUS">PLUS</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#PP">PP</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#PPP">PPP</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#PPPP">PPPP</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#REPEAT_BEGIN">REPEAT_BEGIN</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#REPEAT_END">REPEAT_END</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#REPEAT_END_AND_START">REPEAT_END_AND_START</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#REST">REST</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ROLL">ROLL</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#SEGNO">SEGNO</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#SFZ">SFZ</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#SHORTPHRASE">SHORTPHRASE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#SLIDE">SLIDE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#STACATODOT">STACATODOT</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#STARTCRESCENDO">STARTCRESCENDO</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#STARTDIMINUENDO">STARTDIMINUENDO</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#STARTTRILL">STARTTRILL</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TEMPO">TEMPO</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TENUTO">TENUTO</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#THUMB">THUMB</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TIME">TIME</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TOCODA">TOCODA</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TRILL">TRILL</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TURN">TURN</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#TURNX">TURNX</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#UPBOW">UPBOW</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#UPPERMORDENT">UPPERMORDENT</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#VARIANT">VARIANT</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#WEDGE">WEDGE</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ABCEvent(org.herac.tuxguitar.io.abc.base.ABCSong, java.lang.String)">ABCEvent</A></B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A> song,
+         java.lang.String name)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ABCEvent(int, java.lang.String, int)">ABCEvent</A></B>(int type,
+         java.lang.String parm,
+         int value)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#alterString(int, int[])">alterString</A></B>(int string,
+            int[] strings)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.Object</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#clone()">clone</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#compareTo(java.lang.Object)">compareTo</A></B>(java.lang.Object o)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getChordnum()">getChordnum</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getDecoration()">getDecoration</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getDenominator()">getDenominator</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getFret()">getFret</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getLyrics()">getLyrics</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getNumerator()">getNumerator</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getParm()">getParm</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getPitch()">getPitch</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getSequence()">getSequence</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getString()">getString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getTicks()">getTicks</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getTripletP()">getTripletP</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getTripletQ()">getTripletQ</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getTripletR()">getTripletR</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getType()">getType</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getValue()">getValue</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getVariant()">getVariant</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#getVelocity()">getVelocity</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isGrace()">isGrace</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isLegato()">isLegato</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isStacato()">isStacato</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isTied()">isTied</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isToEnd()">isToEnd</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#isTriplet()">isTriplet</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setDenominator(int)">setDenominator</A></B>(int d)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setGrace(boolean)">setGrace</A></B>(boolean b)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setLegato(boolean)">setLegato</A></B>(boolean legato)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setLyrics(java.lang.String)">setLyrics</A></B>(java.lang.String lyrics)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setNumerator(int)">setNumerator</A></B>(int value)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setPitchStringAndFret(int, int[])">setPitchStringAndFret</A></B>(int pitch,
+                      int[] strings)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setSequence(int)">setSequence</A></B>(int sequence)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setStacato(boolean)">setStacato</A></B>(boolean stacato)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTicks(int)">setTicks</A></B>(int ticks)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTied(boolean)">setTied</A></B>(boolean b)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setToEnd(boolean)">setToEnd</A></B>(boolean b)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTriplet(boolean)">setTriplet</A></B>(boolean triplet)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTriplet(int, int, int)">setTriplet</A></B>(int p,
+           int q,
+           int r)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTripletP(int)">setTripletP</A></B>(int tripletP)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTripletQ(int)">setTripletQ</A></B>(int tripletQ)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setTripletR(int)">setTripletR</A></B>(int tripletR)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setType(int)">setType</A></B>(int type)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setValue(int)">setValue</A></B>(int value)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#setVelocity(int)">setVelocity</A></B>(int velocity)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="BAR"><!-- --></A><H3>
+BAR</H3>
+<PRE>
+public static final int <B>BAR</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.BAR">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="BAR_BAR"><!-- --></A><H3>
+BAR_BAR</H3>
+<PRE>
+public static final int <B>BAR_BAR</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.BAR_BAR">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="BAR_FATBAR"><!-- --></A><H3>
+BAR_FATBAR</H3>
+<PRE>
+public static final int <B>BAR_FATBAR</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.BAR_FATBAR">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FATBAR_BAR"><!-- --></A><H3>
+FATBAR_BAR</H3>
+<PRE>
+public static final int <B>FATBAR_BAR</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FATBAR_BAR">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="REPEAT_BEGIN"><!-- --></A><H3>
+REPEAT_BEGIN</H3>
+<PRE>
+public static final int <B>REPEAT_BEGIN</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.REPEAT_BEGIN">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="REPEAT_END"><!-- --></A><H3>
+REPEAT_END</H3>
+<PRE>
+public static final int <B>REPEAT_END</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.REPEAT_END">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="REPEAT_END_AND_START"><!-- --></A><H3>
+REPEAT_END_AND_START</H3>
+<PRE>
+public static final int <B>REPEAT_END_AND_START</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.REPEAT_END_AND_START">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="VARIANT"><!-- --></A><H3>
+VARIANT</H3>
+<PRE>
+public static final int <B>VARIANT</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.VARIANT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="TIME"><!-- --></A><H3>
+TIME</H3>
+<PRE>
+public static final int <B>TIME</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.TIME">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="TEMPO"><!-- --></A><H3>
+TEMPO</H3>
+<PRE>
+public static final int <B>TEMPO</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.TEMPO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="CHORD_SYMBOL"><!-- --></A><H3>
+CHORD_SYMBOL</H3>
+<PRE>
+public static final int <B>CHORD_SYMBOL</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.CHORD_SYMBOL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ANNOTATION"><!-- --></A><H3>
+ANNOTATION</H3>
+<PRE>
+public static final int <B>ANNOTATION</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.ANNOTATION">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="CHORD_BEGIN"><!-- --></A><H3>
+CHORD_BEGIN</H3>
+<PRE>
+public static final int <B>CHORD_BEGIN</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.CHORD_BEGIN">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="REST"><!-- --></A><H3>
+REST</H3>
+<PRE>
+public static final int <B>REST</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.REST">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="NOTE"><!-- --></A><H3>
+NOTE</H3>
+<PRE>
+public static final int <B>NOTE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.NOTE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="CHORD_CLOSE"><!-- --></A><H3>
+CHORD_CLOSE</H3>
+<PRE>
+public static final int <B>CHORD_CLOSE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.CHORD_CLOSE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DECORATION"><!-- --></A><H3>
+DECORATION</H3>
+<PRE>
+public static final int <B>DECORATION</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DECORATION">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="LINE_BREAK"><!-- --></A><H3>
+LINE_BREAK</H3>
+<PRE>
+public static final int <B>LINE_BREAK</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.LINE_BREAK">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="NOT_RELEVANT"><!-- --></A><H3>
+NOT_RELEVANT</H3>
+<PRE>
+public static final int <B>NOT_RELEVANT</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.NOT_RELEVANT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="TRILL"><!-- --></A><H3>
+TRILL</H3>
+<PRE>
+public static final int <B>TRILL</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.TRILL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="LOWERMORDENT"><!-- --></A><H3>
+LOWERMORDENT</H3>
+<PRE>
+public static final int <B>LOWERMORDENT</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.LOWERMORDENT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="UPPERMORDENT"><!-- --></A><H3>
+UPPERMORDENT</H3>
+<PRE>
+public static final int <B>UPPERMORDENT</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.UPPERMORDENT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ACCENT"><!-- --></A><H3>
+ACCENT</H3>
+<PRE>
+public static final int <B>ACCENT</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.ACCENT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FERMATA"><!-- --></A><H3>
+FERMATA</H3>
+<PRE>
+public static final int <B>FERMATA</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FERMATA">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="INVERTEDFERMATA"><!-- --></A><H3>
+INVERTEDFERMATA</H3>
+<PRE>
+public static final int <B>INVERTEDFERMATA</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.INVERTEDFERMATA">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="TENUTO"><!-- --></A><H3>
+TENUTO</H3>
+<PRE>
+public static final int <B>TENUTO</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.TENUTO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FINGERING_0"><!-- --></A><H3>
+FINGERING_0</H3>
+<PRE>
+public static final int <B>FINGERING_0</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_0">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FINGERING_1"><!-- --></A><H3>
+FINGERING_1</H3>
+<PRE>
+public static final int <B>FINGERING_1</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_1">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FINGERING_2"><!-- --></A><H3>
+FINGERING_2</H3>
+<PRE>
+public static final int <B>FINGERING_2</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_2">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FINGERING_3"><!-- --></A><H3>
+FINGERING_3</H3>
+<PRE>
+public static final int <B>FINGERING_3</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_3">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FINGERING_4"><!-- --></A><H3>
+FINGERING_4</H3>
+<PRE>
+public static final int <B>FINGERING_4</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_4">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FINGERING_5"><!-- --></A><H3>
+FINGERING_5</H3>
+<PRE>
+public static final int <B>FINGERING_5</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FINGERING_5">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="PLUS"><!-- --></A><H3>
+PLUS</H3>
+<PRE>
+public static final int <B>PLUS</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.PLUS">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="WEDGE"><!-- --></A><H3>
+WEDGE</H3>
+<PRE>
+public static final int <B>WEDGE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.WEDGE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="OPEN"><!-- --></A><H3>
+OPEN</H3>
+<PRE>
+public static final int <B>OPEN</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.OPEN">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="THUMB"><!-- --></A><H3>
+THUMB</H3>
+<PRE>
+public static final int <B>THUMB</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.THUMB">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="TURN"><!-- --></A><H3>
+TURN</H3>
+<PRE>
+public static final int <B>TURN</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.TURN">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ROLL"><!-- --></A><H3>
+ROLL</H3>
+<PRE>
+public static final int <B>ROLL</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.ROLL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="BREATH"><!-- --></A><H3>
+BREATH</H3>
+<PRE>
+public static final int <B>BREATH</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.BREATH">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="SHORTPHRASE"><!-- --></A><H3>
+SHORTPHRASE</H3>
+<PRE>
+public static final int <B>SHORTPHRASE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.SHORTPHRASE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="MEDIUMPHRASE"><!-- --></A><H3>
+MEDIUMPHRASE</H3>
+<PRE>
+public static final int <B>MEDIUMPHRASE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.MEDIUMPHRASE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="LONGPHRASE"><!-- --></A><H3>
+LONGPHRASE</H3>
+<PRE>
+public static final int <B>LONGPHRASE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.LONGPHRASE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="SEGNO"><!-- --></A><H3>
+SEGNO</H3>
+<PRE>
+public static final int <B>SEGNO</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.SEGNO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DS"><!-- --></A><H3>
+DS</H3>
+<PRE>
+public static final int <B>DS</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DS">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DSS"><!-- --></A><H3>
+DSS</H3>
+<PRE>
+public static final int <B>DSS</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DSS">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DC"><!-- --></A><H3>
+DC</H3>
+<PRE>
+public static final int <B>DC</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DC">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DACODA"><!-- --></A><H3>
+DACODA</H3>
+<PRE>
+public static final int <B>DACODA</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DACODA">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DACAPO"><!-- --></A><H3>
+DACAPO</H3>
+<PRE>
+public static final int <B>DACAPO</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DACAPO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ALCODA"><!-- --></A><H3>
+ALCODA</H3>
+<PRE>
+public static final int <B>ALCODA</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.ALCODA">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="TOCODA"><!-- --></A><H3>
+TOCODA</H3>
+<PRE>
+public static final int <B>TOCODA</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.TOCODA">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ALFINE"><!-- --></A><H3>
+ALFINE</H3>
+<PRE>
+public static final int <B>ALFINE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.ALFINE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FINE"><!-- --></A><H3>
+FINE</H3>
+<PRE>
+public static final int <B>FINE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FINE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="CODA"><!-- --></A><H3>
+CODA</H3>
+<PRE>
+public static final int <B>CODA</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.CODA">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="STARTCRESCENDO"><!-- --></A><H3>
+STARTCRESCENDO</H3>
+<PRE>
+public static final int <B>STARTCRESCENDO</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.STARTCRESCENDO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ENDCRESCENDO"><!-- --></A><H3>
+ENDCRESCENDO</H3>
+<PRE>
+public static final int <B>ENDCRESCENDO</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.ENDCRESCENDO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="STARTDIMINUENDO"><!-- --></A><H3>
+STARTDIMINUENDO</H3>
+<PRE>
+public static final int <B>STARTDIMINUENDO</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.STARTDIMINUENDO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ENDDIMINUENDO"><!-- --></A><H3>
+ENDDIMINUENDO</H3>
+<PRE>
+public static final int <B>ENDDIMINUENDO</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.ENDDIMINUENDO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="PPPP"><!-- --></A><H3>
+PPPP</H3>
+<PRE>
+public static final int <B>PPPP</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.PPPP">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="PPP"><!-- --></A><H3>
+PPP</H3>
+<PRE>
+public static final int <B>PPP</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.PPP">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="PP"><!-- --></A><H3>
+PP</H3>
+<PRE>
+public static final int <B>PP</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.PP">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="P"><!-- --></A><H3>
+P</H3>
+<PRE>
+public static final int <B>P</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.P">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="MP"><!-- --></A><H3>
+MP</H3>
+<PRE>
+public static final int <B>MP</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.MP">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="MF"><!-- --></A><H3>
+MF</H3>
+<PRE>
+public static final int <B>MF</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.MF">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="F"><!-- --></A><H3>
+F</H3>
+<PRE>
+public static final int <B>F</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.F">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FF"><!-- --></A><H3>
+FF</H3>
+<PRE>
+public static final int <B>FF</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FF">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FFF"><!-- --></A><H3>
+FFF</H3>
+<PRE>
+public static final int <B>FFF</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FFF">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FFFF"><!-- --></A><H3>
+FFFF</H3>
+<PRE>
+public static final int <B>FFFF</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.FFFF">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="SFZ"><!-- --></A><H3>
+SFZ</H3>
+<PRE>
+public static final int <B>SFZ</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.SFZ">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="UPBOW"><!-- --></A><H3>
+UPBOW</H3>
+<PRE>
+public static final int <B>UPBOW</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.UPBOW">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DOWNBOW"><!-- --></A><H3>
+DOWNBOW</H3>
+<PRE>
+public static final int <B>DOWNBOW</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DOWNBOW">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="SLIDE"><!-- --></A><H3>
+SLIDE</H3>
+<PRE>
+public static final int <B>SLIDE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.SLIDE">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="TURNX"><!-- --></A><H3>
+TURNX</H3>
+<PRE>
+public static final int <B>TURNX</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.TURNX">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="INVERTEDTURN"><!-- --></A><H3>
+INVERTEDTURN</H3>
+<PRE>
+public static final int <B>INVERTEDTURN</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.INVERTEDTURN">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="INVERTEDTURNX"><!-- --></A><H3>
+INVERTEDTURNX</H3>
+<PRE>
+public static final int <B>INVERTEDTURNX</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.INVERTEDTURNX">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ARPEGGIO"><!-- --></A><H3>
+ARPEGGIO</H3>
+<PRE>
+public static final int <B>ARPEGGIO</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.ARPEGGIO">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="STARTTRILL"><!-- --></A><H3>
+STARTTRILL</H3>
+<PRE>
+public static final int <B>STARTTRILL</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.STARTTRILL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="ENDTRILL"><!-- --></A><H3>
+ENDTRILL</H3>
+<PRE>
+public static final int <B>ENDTRILL</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.ENDTRILL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="STACATODOT"><!-- --></A><H3>
+STACATODOT</H3>
+<PRE>
+public static final int <B>STACATODOT</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.STACATODOT">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="GCHORDON"><!-- --></A><H3>
+GCHORDON</H3>
+<PRE>
+public static final int <B>GCHORDON</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.GCHORDON">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="GCHORDOFF"><!-- --></A><H3>
+GCHORDOFF</H3>
+<PRE>
+public static final int <B>GCHORDOFF</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.GCHORDOFF">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="GCHORD"><!-- --></A><H3>
+GCHORD</H3>
+<PRE>
+public static final int <B>GCHORD</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.GCHORD">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="CHORDPROG"><!-- --></A><H3>
+CHORDPROG</H3>
+<PRE>
+public static final int <B>CHORDPROG</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.CHORDPROG">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="CHORDVOL"><!-- --></A><H3>
+CHORDVOL</H3>
+<PRE>
+public static final int <B>CHORDVOL</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.CHORDVOL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="BASSPROG"><!-- --></A><H3>
+BASSPROG</H3>
+<PRE>
+public static final int <B>BASSPROG</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.BASSPROG">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="BASSVOL"><!-- --></A><H3>
+BASSVOL</H3>
+<PRE>
+public static final int <B>BASSVOL</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.BASSVOL">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DRUMON"><!-- --></A><H3>
+DRUMON</H3>
+<PRE>
+public static final int <B>DRUMON</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DRUMON">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DRUMOFF"><!-- --></A><H3>
+DRUMOFF</H3>
+<PRE>
+public static final int <B>DRUMOFF</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DRUMOFF">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DRUM"><!-- --></A><H3>
+DRUM</H3>
+<PRE>
+public static final int <B>DRUM</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DRUM">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DRONEON"><!-- --></A><H3>
+DRONEON</H3>
+<PRE>
+public static final int <B>DRONEON</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DRONEON">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DRONEOFF"><!-- --></A><H3>
+DRONEOFF</H3>
+<PRE>
+public static final int <B>DRONEOFF</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DRONEOFF">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="DRONE"><!-- --></A><H3>
+DRONE</H3>
+<PRE>
+public static final int <B>DRONE</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCEvent.DRONE">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCEvent(int, java.lang.String, int)"><!-- --></A><H3>
+ABCEvent</H3>
+<PRE>
+public <B>ABCEvent</B>(int type,
+                java.lang.String parm,
+                int value)</PRE>
+<DL>
+</DL>
+<HR>
+
+<A NAME="ABCEvent(org.herac.tuxguitar.io.abc.base.ABCSong, java.lang.String)"><!-- --></A><H3>
+ABCEvent</H3>
+<PRE>
+public <B>ABCEvent</B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A> song,
+                java.lang.String name)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="clone()"><!-- --></A><H3>
+clone</H3>
+<PRE>
+public java.lang.Object <B>clone</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPitchStringAndFret(int, int[])"><!-- --></A><H3>
+setPitchStringAndFret</H3>
+<PRE>
+public void <B>setPitchStringAndFret</B>(int pitch,
+                                  int[] strings)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compareTo(java.lang.Object)"><!-- --></A><H3>
+compareTo</H3>
+<PRE>
+public int <B>compareTo</B>(java.lang.Object o)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>compareTo</CODE> in interface <CODE>java.lang.Comparable</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFret()"><!-- --></A><H3>
+getFret</H3>
+<PRE>
+public int <B>getFret</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the fret</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the name</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getParm()"><!-- --></A><H3>
+getParm</H3>
+<PRE>
+public java.lang.String <B>getParm</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the name</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPitch()"><!-- --></A><H3>
+getPitch</H3>
+<PRE>
+public int <B>getPitch</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the pitch</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getValue()"><!-- --></A><H3>
+getValue</H3>
+<PRE>
+public int <B>getValue</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the pitch</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getString()"><!-- --></A><H3>
+getString</H3>
+<PRE>
+public int <B>getString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the string</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTicks()"><!-- --></A><H3>
+getTicks</H3>
+<PRE>
+public int <B>getTicks</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the ticks</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getType()"><!-- --></A><H3>
+getType</H3>
+<PRE>
+public int <B>getType</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the type</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTicks(int)"><!-- --></A><H3>
+setTicks</H3>
+<PRE>
+public void <B>setTicks</B>(int ticks)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>ticks</CODE> - the ticks to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDecoration()"><!-- --></A><H3>
+getDecoration</H3>
+<PRE>
+public int <B>getDecoration</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getChordnum()"><!-- --></A><H3>
+getChordnum</H3>
+<PRE>
+public int <B>getChordnum</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="alterString(int, int[])"><!-- --></A><H3>
+alterString</H3>
+<PRE>
+public void <B>alterString</B>(int string,
+                        int[] strings)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setType(int)"><!-- --></A><H3>
+setType</H3>
+<PRE>
+public void <B>setType</B>(int type)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setValue(int)"><!-- --></A><H3>
+setValue</H3>
+<PRE>
+public void <B>setValue</B>(int value)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setNumerator(int)"><!-- --></A><H3>
+setNumerator</H3>
+<PRE>
+public void <B>setNumerator</B>(int value)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDenominator(int)"><!-- --></A><H3>
+setDenominator</H3>
+<PRE>
+public void <B>setDenominator</B>(int d)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVelocity()"><!-- --></A><H3>
+getVelocity</H3>
+<PRE>
+public int <B>getVelocity</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setVelocity(int)"><!-- --></A><H3>
+setVelocity</H3>
+<PRE>
+public void <B>setVelocity</B>(int velocity)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>velocity</CODE> - the velocity to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTied(boolean)"><!-- --></A><H3>
+setTied</H3>
+<PRE>
+public void <B>setTied</B>(boolean b)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTied()"><!-- --></A><H3>
+isTied</H3>
+<PRE>
+public boolean <B>isTied</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the tied</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setToEnd(boolean)"><!-- --></A><H3>
+setToEnd</H3>
+<PRE>
+public void <B>setToEnd</B>(boolean b)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isToEnd()"><!-- --></A><H3>
+isToEnd</H3>
+<PRE>
+public boolean <B>isToEnd</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the toEnd</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVariant()"><!-- --></A><H3>
+getVariant</H3>
+<PRE>
+public int <B>getVariant</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getNumerator()"><!-- --></A><H3>
+getNumerator</H3>
+<PRE>
+public int <B>getNumerator</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDenominator()"><!-- --></A><H3>
+getDenominator</H3>
+<PRE>
+public int <B>getDenominator</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setGrace(boolean)"><!-- --></A><H3>
+setGrace</H3>
+<PRE>
+public void <B>setGrace</B>(boolean b)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isGrace()"><!-- --></A><H3>
+isGrace</H3>
+<PRE>
+public boolean <B>isGrace</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the grace</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSequence()"><!-- --></A><H3>
+getSequence</H3>
+<PRE>
+public int <B>getSequence</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setSequence(int)"><!-- --></A><H3>
+setSequence</H3>
+<PRE>
+public void <B>setSequence</B>(int sequence)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTriplet()"><!-- --></A><H3>
+isTriplet</H3>
+<PRE>
+public boolean <B>isTriplet</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTriplet(boolean)"><!-- --></A><H3>
+setTriplet</H3>
+<PRE>
+public void <B>setTriplet</B>(boolean triplet)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTripletP()"><!-- --></A><H3>
+getTripletP</H3>
+<PRE>
+public int <B>getTripletP</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTripletP(int)"><!-- --></A><H3>
+setTripletP</H3>
+<PRE>
+public void <B>setTripletP</B>(int tripletP)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTripletQ()"><!-- --></A><H3>
+getTripletQ</H3>
+<PRE>
+public int <B>getTripletQ</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTripletQ(int)"><!-- --></A><H3>
+setTripletQ</H3>
+<PRE>
+public void <B>setTripletQ</B>(int tripletQ)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTripletR()"><!-- --></A><H3>
+getTripletR</H3>
+<PRE>
+public int <B>getTripletR</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTripletR(int)"><!-- --></A><H3>
+setTripletR</H3>
+<PRE>
+public void <B>setTripletR</B>(int tripletR)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTriplet(int, int, int)"><!-- --></A><H3>
+setTriplet</H3>
+<PRE>
+public void <B>setTriplet</B>(int p,
+                       int q,
+                       int r)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLyrics()"><!-- --></A><H3>
+getLyrics</H3>
+<PRE>
+public java.lang.String[] <B>getLyrics</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLyrics(java.lang.String)"><!-- --></A><H3>
+setLyrics</H3>
+<PRE>
+public void <B>setLyrics</B>(java.lang.String lyrics)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isStacato()"><!-- --></A><H3>
+isStacato</H3>
+<PRE>
+public boolean <B>isStacato</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the stacato</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setStacato(boolean)"><!-- --></A><H3>
+setStacato</H3>
+<PRE>
+public void <B>setStacato</B>(boolean stacato)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>stacato</CODE> - the stacato to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isLegato()"><!-- --></A><H3>
+isLegato</H3>
+<PRE>
+public boolean <B>isLegato</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the legato</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLegato(boolean)"><!-- --></A><H3>
+setLegato</H3>
+<PRE>
+public void <B>setLegato</B>(boolean legato)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>legato</CODE> - the legato to set</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCEvent.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCEvent.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCInfo.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCInfo.html
new file mode 100644
index 0000000..3e9804b
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCInfo.html
@@ -0,0 +1,876 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCInfo
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCInfo class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCInfo";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCInfo.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCInfo.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCInfo</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCInfo</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCInfo</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#ABCInfo(java.lang.String, java.lang.String, java.lang.String)">ABCInfo</A></B>(java.lang.String title,
+        java.lang.String subtitle,
+        java.lang.String comments)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#addHistory(java.lang.String)">addHistory</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#addNote(java.lang.String)">addNote</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getArea()">getArea</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getArtist()">getArtist</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getBook()">getBook</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getComments()">getComments</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getComponist()">getComponist</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getDiscography()">getDiscography</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getFilename()">getFilename</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getGroup()">getGroup</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.util.List</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getHistory()">getHistory</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getInformation()">getInformation</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getNotes()">getNotes</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getOrigin()">getOrigin</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getSource()">getSource</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getSubtitle()">getSubtitle</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getTitle()">getTitle</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#getTranscriptor()">getTranscriptor</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setArea(java.lang.String)">setArea</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setArtist(java.lang.String)">setArtist</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setBook(java.lang.String)">setBook</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setComments(java.lang.String)">setComments</A></B>(java.lang.String comments)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setComponist(java.lang.String)">setComponist</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setDiscography(java.lang.String)">setDiscography</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setFilename(java.lang.String)">setFilename</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setGroup(java.lang.String)">setGroup</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setInformation(java.lang.String)">setInformation</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setOrigin(java.lang.String)">setOrigin</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setSource(java.lang.String)">setSource</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setSubtitle(java.lang.String)">setSubtitle</A></B>(java.lang.String subtitle)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setTitle(java.lang.String)">setTitle</A></B>(java.lang.String title)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#setTranscriptor(java.lang.String)">setTranscriptor</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCInfo(java.lang.String, java.lang.String, java.lang.String)"><!-- --></A><H3>
+ABCInfo</H3>
+<PRE>
+public <B>ABCInfo</B>(java.lang.String title,
+               java.lang.String subtitle,
+               java.lang.String comments)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getComments()"><!-- --></A><H3>
+getComments</H3>
+<PRE>
+public java.lang.String <B>getComments</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSubtitle()"><!-- --></A><H3>
+getSubtitle</H3>
+<PRE>
+public java.lang.String <B>getSubtitle</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTitle()"><!-- --></A><H3>
+getTitle</H3>
+<PRE>
+public java.lang.String <B>getTitle</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getNotes()"><!-- --></A><H3>
+getNotes</H3>
+<PRE>
+public java.lang.String <B>getNotes</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setComments(java.lang.String)"><!-- --></A><H3>
+setComments</H3>
+<PRE>
+public void <B>setComments</B>(java.lang.String comments)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>comments</CODE> - the comments to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setSubtitle(java.lang.String)"><!-- --></A><H3>
+setSubtitle</H3>
+<PRE>
+public void <B>setSubtitle</B>(java.lang.String subtitle)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>subtitle</CODE> - the subtitle to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTitle(java.lang.String)"><!-- --></A><H3>
+setTitle</H3>
+<PRE>
+public void <B>setTitle</B>(java.lang.String title)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>title</CODE> - the title to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setArtist(java.lang.String)"><!-- --></A><H3>
+setArtist</H3>
+<PRE>
+public void <B>setArtist</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getArtist()"><!-- --></A><H3>
+getArtist</H3>
+<PRE>
+public java.lang.String <B>getArtist</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the artist</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setComponist(java.lang.String)"><!-- --></A><H3>
+setComponist</H3>
+<PRE>
+public void <B>setComponist</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setArea(java.lang.String)"><!-- --></A><H3>
+setArea</H3>
+<PRE>
+public void <B>setArea</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getArea()"><!-- --></A><H3>
+getArea</H3>
+<PRE>
+public java.lang.String <B>getArea</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the area</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getComponist()"><!-- --></A><H3>
+getComponist</H3>
+<PRE>
+public java.lang.String <B>getComponist</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the componist</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBook(java.lang.String)"><!-- --></A><H3>
+setBook</H3>
+<PRE>
+public void <B>setBook</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBook()"><!-- --></A><H3>
+getBook</H3>
+<PRE>
+public java.lang.String <B>getBook</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the book</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDiscography(java.lang.String)"><!-- --></A><H3>
+setDiscography</H3>
+<PRE>
+public void <B>setDiscography</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDiscography()"><!-- --></A><H3>
+getDiscography</H3>
+<PRE>
+public java.lang.String <B>getDiscography</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the discography</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFilename(java.lang.String)"><!-- --></A><H3>
+setFilename</H3>
+<PRE>
+public void <B>setFilename</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFilename()"><!-- --></A><H3>
+getFilename</H3>
+<PRE>
+public java.lang.String <B>getFilename</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the filename</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setGroup(java.lang.String)"><!-- --></A><H3>
+setGroup</H3>
+<PRE>
+public void <B>setGroup</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getGroup()"><!-- --></A><H3>
+getGroup</H3>
+<PRE>
+public java.lang.String <B>getGroup</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the group</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addHistory(java.lang.String)"><!-- --></A><H3>
+addHistory</H3>
+<PRE>
+public void <B>addHistory</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setInformation(java.lang.String)"><!-- --></A><H3>
+setInformation</H3>
+<PRE>
+public void <B>setInformation</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getHistory()"><!-- --></A><H3>
+getHistory</H3>
+<PRE>
+public java.util.List <B>getHistory</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the history</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getInformation()"><!-- --></A><H3>
+getInformation</H3>
+<PRE>
+public java.lang.String <B>getInformation</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the information</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addNote(java.lang.String)"><!-- --></A><H3>
+addNote</H3>
+<PRE>
+public void <B>addNote</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setOrigin(java.lang.String)"><!-- --></A><H3>
+setOrigin</H3>
+<PRE>
+public void <B>setOrigin</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setSource(java.lang.String)"><!-- --></A><H3>
+setSource</H3>
+<PRE>
+public void <B>setSource</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTranscriptor(java.lang.String)"><!-- --></A><H3>
+setTranscriptor</H3>
+<PRE>
+public void <B>setTranscriptor</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getOrigin()"><!-- --></A><H3>
+getOrigin</H3>
+<PRE>
+public java.lang.String <B>getOrigin</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the origin</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getSource()"><!-- --></A><H3>
+getSource</H3>
+<PRE>
+public java.lang.String <B>getSource</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the source</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTranscriptor()"><!-- --></A><H3>
+getTranscriptor</H3>
+<PRE>
+public java.lang.String <B>getTranscriptor</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the transcriptor</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCInfo.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCInfo.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCLocation.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCLocation.html
new file mode 100644
index 0000000..db3986a
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCLocation.html
@@ -0,0 +1,654 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCLocation
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCLocation class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCLocation";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCLocation.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCLocation.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCLocation</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCLocation</B>
+</PRE>
+<DL>
+<DT><B>All Implemented Interfaces:</B> <DD>java.lang.Comparable</DD>
+</DL>
+<HR>
+<DL>
+<DT>public class <B>ABCLocation</B><DT>extends java.lang.Object<DT>implements java.lang.Comparable</DL>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>peter</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#ABCLocation(java.lang.String, int, int, int, org.herac.tuxguitar.io.abc.base.ABCChord, org.herac.tuxguitar.io.abc.base.ABCEvent)">ABCLocation</A></B>(java.lang.String part,
+            int track,
+            int measure,
+            int ticks,
+            <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord,
+            <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A> event)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#compareTo(java.lang.Object)">compareTo</A></B>(java.lang.Object o)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getChord()">getChord</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getEvent()">getEvent</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getLegato()">getLegato</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getMeasure()">getMeasure</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getPart()">getPart</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getTempo()">getTempo</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getTicks()">getTicks</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getTrack()">getTrack</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#isTied()">isTied</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setChord(org.herac.tuxguitar.io.abc.base.ABCChord)">setChord</A></B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setLegato(int)">setLegato</A></B>(int legato)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setMeasure(int)">setMeasure</A></B>(int measure)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setPart(java.lang.String)">setPart</A></B>(java.lang.String part)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setTempo(int)">setTempo</A></B>(int tempo)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setTicks(int)">setTicks</A></B>(int ticks)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setTied(boolean)">setTied</A></B>(boolean tied)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCLocation(java.lang.String, int, int, int, org.herac.tuxguitar.io.abc.base.ABCChord, org.herac.tuxguitar.io.abc.base.ABCEvent)"><!-- --></A><H3>
+ABCLocation</H3>
+<PRE>
+public <B>ABCLocation</B>(java.lang.String part,
+                   int track,
+                   int measure,
+                   int ticks,
+                   <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord,
+                   <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A> event)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMeasure()"><!-- --></A><H3>
+getMeasure</H3>
+<PRE>
+public int <B>getMeasure</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the measure</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPart()"><!-- --></A><H3>
+getPart</H3>
+<PRE>
+public java.lang.String <B>getPart</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the part</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTicks()"><!-- --></A><H3>
+getTicks</H3>
+<PRE>
+public int <B>getTicks</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the ticks</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTrack()"><!-- --></A><H3>
+getTrack</H3>
+<PRE>
+public int <B>getTrack</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the track</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEvent()"><!-- --></A><H3>
+getEvent</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A> <B>getEvent</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the event</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="compareTo(java.lang.Object)"><!-- --></A><H3>
+compareTo</H3>
+<PRE>
+public int <B>compareTo</B>(java.lang.Object o)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Specified by:</B><DD><CODE>compareTo</CODE> in interface <CODE>java.lang.Comparable</CODE></DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setMeasure(int)"><!-- --></A><H3>
+setMeasure</H3>
+<PRE>
+public void <B>setMeasure</B>(int measure)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>measure</CODE> - the measure to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPart(java.lang.String)"><!-- --></A><H3>
+setPart</H3>
+<PRE>
+public void <B>setPart</B>(java.lang.String part)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>part</CODE> - the part to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTicks(int)"><!-- --></A><H3>
+setTicks</H3>
+<PRE>
+public void <B>setTicks</B>(int ticks)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>ticks</CODE> - the ticks to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setChord(org.herac.tuxguitar.io.abc.base.ABCChord)"><!-- --></A><H3>
+setChord</H3>
+<PRE>
+public void <B>setChord</B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getChord()"><!-- --></A><H3>
+getChord</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> <B>getChord</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the chord</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTied(boolean)"><!-- --></A><H3>
+setTied</H3>
+<PRE>
+public void <B>setTied</B>(boolean tied)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isTied()"><!-- --></A><H3>
+isTied</H3>
+<PRE>
+public boolean <B>isTied</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the tied</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTempo()"><!-- --></A><H3>
+getTempo</H3>
+<PRE>
+public int <B>getTempo</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTempo(int)"><!-- --></A><H3>
+setTempo</H3>
+<PRE>
+public void <B>setTempo</B>(int tempo)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getLegato()"><!-- --></A><H3>
+getLegato</H3>
+<PRE>
+public int <B>getLegato</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the legato</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setLegato(int)"><!-- --></A><H3>
+setLegato</H3>
+<PRE>
+public void <B>setLegato</B>(int legato)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>legato</CODE> - the legato to set</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCLocation.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCLocation.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCMacro.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCMacro.html
new file mode 100644
index 0000000..6ce8954
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCMacro.html
@@ -0,0 +1,416 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCMacro
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCMacro class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCMacro";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCMacro.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCMacro.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCMacro</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCMacro</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCMacro</B><DT>extends java.lang.Object</DL>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>peter
+ <p>
+ <b>Macros</b>
+ <p>
+  This standard defines an optional system of macros which is principally used to define the way in which ornament symbols 
+  such as the tilde ~ are played (although it could be used for many other purposes).
+  <p> 
+  Software implementing these macros, should first expand the macros defined in this section, 
+  and only afterwards apply any relevant U: replacement (see section Redefinable symbols). 
+  <p>
+  When these macros are stored in an ABC Header file (see section Include field), they may form a powerful library. 
+  <p>
+  There are two kinds of macro, called Static and Transposing.
+  <p> 
+ <b>Static macros</b>
+ <p>
+  You define a static macro by writing into the tune header something like this:
+  <p> 
+  m: ~G3 = G{A}G{F}G
+  <p>
+  When you play the tune, the program searches the tune header for macro definitions, 
+  then does a search and replace on its internal copy of the text before passing that 
+  to the parser which plays the tune. Every occurence of ~G3 in the tune is replaced 
+  by G{A}G{F}G, and that is what gets played. Only ~G3 notes are affected,
+  ~G2, ~g3, ~F3 etc. are ignored. 
+  <p>
+  You can put in as many macros as you want, and indeed, if you only use static macros 
+  you will need to write a separate macro for each combination of pitch and note-length. 
+  Here is an example:
+  <pre> 
+ X:50
+ T:Apples in Winter
+ S:Trad, arr. Paddy O'Brien
+ R:jig
+ E:9
+ m: ~g2 = {a}g{f}g
+ m: ~D2 = {E}D{C}D
+ M:6/8
+ K:D
+ G/2A/2|BEE dEE|BAG FGE|~D2D FDF|ABc ded|
+ BEE BAB|def ~g2 e|fdB AGF|GEE E2:|
+ d|efe edB|ege fdB|dec dAF|DFA def|
+ [1efe edB|def ~g2a|bgb afa|gee e2:|
+ [2edB def|gba ~g2e|fdB AGF|GEE E2||
+ </pre>
+ <p>
+  Here I have put in two static macros, since there are two different notes in the tune marked with a tilde. 
+  <p>
+  A static macro definition consists of four parts:
+  <ul><li> 
+  the field identifier m:
+  </li><li>
+  the target string - e.g ~G3
+  </li><li>
+  the equals sign
+  </li><li>
+  the replacement string - e.g. G{A}G{F}G
+  </li></ul>
+  <p>
+  The target string can consist of any string up to 31 characters in length, 
+  except that it may not include the letter 'n', for reasons which will become obvious later. 
+  You don't have to use the tilde, but of course if you don't use a legal combination of abc, 
+  other programs will not be able to play your tune. 
+  <p>
+  The replacement string consists of any legal abc text up to 200 characters in length. 
+  It's up to you to ensure that the target and replacement strings occupy the same time 
+  interval (the program does not check this). Both the target and replacement strings may 
+  have spaces embedded if necessary, but leading and trailing spaces are stripped off so 
+  <p>
+ m:~g2={a}g{f}g
+ <p>
+  is perfectly OK, although less readable. 
+ <p><b>Transposing macros</b>
+  If your tune has ornaments on lots of different notes, and you want them to all play 
+  with the same ornament pattern, you can use transposing macros to achieve this. 
+  Transposing macros are written in exactly the same way as static macros, except that 
+  the note symbol in the target string is represented by 'n' (meaning any note) and the 
+  note symbols in the replacement string by other letters (h to z) which are interpreted 
+  according to their position in the alphabet relative to n.
+  <p> 
+  So, for example I could re-write the static macro m: ~G3 = G{A}G{F}G as a transposing 
+  macro m: ~n3 = n{o}n{m}n. When the transposing macro is expanded, any note of the form 
+  ~n3 will be replaced by the appropriate pattern of notes. 
+  Notes of the form ~n2 (or other lengths) will be ignored, so you will have to write 
+  separate transposing macros for each note length. 
+  <p>
+  Here's an example:
+  <pre> 
+ X:35
+ T:Down the Broom
+ S:Trad, arr. Paddy O'Brien
+ R:reel
+ M:C|
+ m: ~n2 = (3o/n/m/ n                % One macro does for all four rolls
+ K:ADor
+ EAAG~A2 Bd|eg~g2 egdc|BGGF GAGE|~D2B,D GABG|
+ EAAG ~A2 Bd|eg~g2 egdg|eg~g2 dgba|gedB BAA2:|
+ ~a2ea agea|agbg agef|~g2dg Bgdg|gfga gede|
+ ~a2 ea agea|agbg ageg|dg~g2 dgba|gedB BA A2:|
+ </pre>
+ <p>
+  A transposing macro definition consists of four parts:
+  <ul><li> 
+  the field identifier m:
+  </li><li>
+  the target string - e.g ~n3
+  </li><li>
+  the equals sign
+  </li><li>
+  the replacement string - e.g. n{o}n{m}n
+  </li></ul>
+  <p>
+  The target string can consist of any string up to 31 characters in length, 
+  except that it must conclude with the letter 'n', followed by a number 
+  which specifies the note length. 
+  <p>
+  The replacement string consists of any legal abc text up to 200 characters in length, 
+  where note pitches are defined by the letters h - z, the pitches being interpreted 
+  relative to that of the letter n. Once again you should ensure that the time intervals match. 
+  You should not use accidentals in transposing macros (I can't for the life of me think of a way 
+  to transpose ~=a3 or ~^G2 which will work correctly under all circumstances, so if you need to 
+  do this you must use a static macro.) 
+ <p></DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base"><CODE>ABCSymbol</CODE></A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html#ABCMacro(java.lang.String)">ABCMacro</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html#execute(java.lang.String)">execute</A></B>(java.lang.String line)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html#isValid()">isValid</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCMacro(java.lang.String)"><!-- --></A><H3>
+ABCMacro</H3>
+<PRE>
+public <B>ABCMacro</B>(java.lang.String string)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="execute(java.lang.String)"><!-- --></A><H3>
+execute</H3>
+<PRE>
+public java.lang.String <B>execute</B>(java.lang.String line)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isValid()"><!-- --></A><H3>
+isValid</H3>
+<PRE>
+public boolean <B>isValid</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCMacro.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCMacro.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html
new file mode 100644
index 0000000..666cb86
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html
@@ -0,0 +1,296 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCOctaveDatabase
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCOctaveDatabase class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCOctaveDatabase";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCOctaveDatabase.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCOctaveDatabase.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCOctaveDatabase</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCOctaveDatabase</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCOctaveDatabase</B><DT>extends java.lang.Object</DL>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>peter</DD>
+</DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html#ABCOctaveDatabase()">ABCOctaveDatabase</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html#recall(int)">recall</A></B>(int pitch)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html#reset()">reset</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html#store(int, int)">store</A></B>(int i,
+      int pitch)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCOctaveDatabase()"><!-- --></A><H3>
+ABCOctaveDatabase</H3>
+<PRE>
+public <B>ABCOctaveDatabase</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="store(int, int)"><!-- --></A><H3>
+store</H3>
+<PRE>
+public void <B>store</B>(int i,
+                  int pitch)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="recall(int)"><!-- --></A><H3>
+recall</H3>
+<PRE>
+public int <B>recall</B>(int pitch)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="reset()"><!-- --></A><H3>
+reset</H3>
+<PRE>
+public void <B>reset</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCOctaveDatabase.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCOctaveDatabase.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCPercussion.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCPercussion.html
new file mode 100644
index 0000000..21b09d2
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCPercussion.html
@@ -0,0 +1,292 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Tue May 17 20:18:19 GMT+01:00 2011 -->
+<TITLE>
+ABCPercussion
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCPercussion class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCPercussion";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCPercussion.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPercussion.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCPercussion</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCPercussion</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCPercussion</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html#ABCPercussion(java.lang.String, int)">ABCPercussion</A></B>(java.lang.String name,
+              int volume)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html#getVolume()">getVolume</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCPercussion(java.lang.String, int)"><!-- --></A><H3>
+ABCPercussion</H3>
+<PRE>
+public <B>ABCPercussion</B>(java.lang.String name,
+                     int volume)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVolume()"><!-- --></A><H3>
+getVolume</H3>
+<PRE>
+public int <B>getVolume</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCPercussion.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPercussion.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCRepeat.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCRepeat.html
new file mode 100644
index 0000000..5570339
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCRepeat.html
@@ -0,0 +1,292 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCRepeat
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCRepeat class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCRepeat";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCRepeat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCRepeat.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCRepeat</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCRepeat</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCRepeat</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html#ABCRepeat(int, int)">ABCRepeat</A></B>(int data1,
+          int data2)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html#getData1()">getData1</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html#getData2()">getData2</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCRepeat(int, int)"><!-- --></A><H3>
+ABCRepeat</H3>
+<PRE>
+public <B>ABCRepeat</B>(int data1,
+                 int data2)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getData1()"><!-- --></A><H3>
+getData1</H3>
+<PRE>
+public int <B>getData1</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getData2()"><!-- --></A><H3>
+getData2</H3>
+<PRE>
+public int <B>getData2</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCRepeat.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCRepeat.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCRhythm.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCRhythm.html
new file mode 100644
index 0000000..db08df9
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCRhythm.html
@@ -0,0 +1,313 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Tue May 17 20:18:19 GMT+01:00 2011 -->
+<TITLE>
+ABCRhythm
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCRhythm class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCRhythm";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCRhythm.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCRhythm.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCRhythm</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCRhythm</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCRhythm</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html#ABCRhythm(java.lang.String, int, int)">ABCRhythm</A></B>(java.lang.String name,
+          int volume,
+          int instrument)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html#getInstrument()">getInstrument</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html#getVolume()">getVolume</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCRhythm(java.lang.String, int, int)"><!-- --></A><H3>
+ABCRhythm</H3>
+<PRE>
+public <B>ABCRhythm</B>(java.lang.String name,
+                 int volume,
+                 int instrument)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getInstrument()"><!-- --></A><H3>
+getInstrument</H3>
+<PRE>
+public int <B>getInstrument</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVolume()"><!-- --></A><H3>
+getVolume</H3>
+<PRE>
+public int <B>getVolume</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCRhythm.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCRhythm.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCSong.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCSong.html
new file mode 100644
index 0000000..ee18fba
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCSong.html
@@ -0,0 +1,2139 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCSong
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCSong class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCSong";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSong.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSong.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCSong</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCSong</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCSong</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#TICKS_PER_QUART">TICKS_PER_QUART</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#ABCSong()">ABCSong</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addChord(java.lang.String)">addChord</A></B>(java.lang.String name)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addHistory(java.lang.String)">addHistory</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addLyrics(java.lang.String)">addLyrics</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addMacro(java.lang.String)">addMacro</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addMusic(java.lang.String)">addMusic</A></B>(java.lang.String line)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addNote(java.lang.String)">addNote</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addRedefinable(java.lang.String)">addRedefinable</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addRemarks(java.lang.String)">addRemarks</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addSymbols(java.lang.String)">addSymbols</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addTempoChange(org.herac.tuxguitar.io.abc.base.ABCTempoChange)">addTempoChange</A></B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A> tChange)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addTimeSignatureChange(org.herac.tuxguitar.io.abc.base.ABCTimeSignatureChange)">addTimeSignatureChange</A></B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A> tsChange)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addVoice(java.lang.String)">addVoice</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addWords(java.lang.String)">addWords</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#computePitch(org.herac.tuxguitar.io.abc.base.ABCEvent, char[])">computePitch</A></B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A> event,
+             char[] a)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#directive(java.lang.String)">directive</A></B>(java.lang.String line)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getBarkey()">getBarkey</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getBassprog()">getBassprog</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getBassvol()">getBassvol</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getChordprog()">getChordprog</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getChords()">getChords</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getChordvol()">getChordvol</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getDefaultNoteLength()">getDefaultNoteLength</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getDrone()">getDrone</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getDrum()">getDrum</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.util.ArrayList</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getEvents()">getEvents</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getGchord()">getGchord</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getInfo()">getInfo</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getKeySignature()">getKeySignature</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getMeasures()">getMeasures</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getRepeats()">getRepeats</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getStrings()">getStrings</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTempo()">getTempo</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTempo(int)">getTempo</A></B>(int measure)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTexts()">getTexts</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTimeSignature()">getTimeSignature</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTimeSignature(int)">getTimeSignature</A></B>(int measure)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTrack()">getTrack</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTracks()">getTracks</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getVoice(java.lang.String)">getVoice</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#initBody()">initBody</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#initHead()">initHead</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#isDroneon()">isDroneon</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#isDrumon()">isDrumon</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#isGchordon()">isGchordon</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#isHornpipe()">isHornpipe</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#midiCommand(java.lang.String)">midiCommand</A></B>(java.lang.String line)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#postprocessor()">postprocessor</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#resetScale()">resetScale</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setArea(java.lang.String)">setArea</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setArtist(java.lang.String)">setArtist</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setBarkey(java.lang.String)">setBarkey</A></B>(java.lang.String scale)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setBassprog(int)">setBassprog</A></B>(int bassprog)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setBassvol(int)">setBassvol</A></B>(int bassvol)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setBook(java.lang.String)">setBook</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setChord(int, org.herac.tuxguitar.io.abc.base.ABCChord)">setChord</A></B>(int index,
+         <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setChordprog(int)">setChordprog</A></B>(int chordprog)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setChords(int)">setChords</A></B>(int length)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setChordvol(int)">setChordvol</A></B>(int chordvol)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setComments(java.lang.String)">setComments</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setComponist(java.lang.String)">setComponist</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDefaultNoteLength(org.herac.tuxguitar.io.abc.base.ABCTimeSignature)">setDefaultNoteLength</A></B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> signature)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDiscography(java.lang.String)">setDiscography</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDrone(java.lang.String)">setDrone</A></B>(java.lang.String drone)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDroneon(boolean)">setDroneon</A></B>(boolean droneon)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDrum(java.lang.String)">setDrum</A></B>(java.lang.String drum)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDrumon(boolean)">setDrumon</A></B>(boolean drumon)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setFilename(java.lang.String)">setFilename</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setGchord(java.lang.String)">setGchord</A></B>(java.lang.String gchord)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setGchordon(boolean)">setGchordon</A></B>(boolean gchordon)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setGroup(java.lang.String)">setGroup</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setInfo(org.herac.tuxguitar.io.abc.base.ABCInfo)">setInfo</A></B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A> info)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setInformation(java.lang.String)">setInformation</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setInstrumentOffset(int)">setInstrumentOffset</A></B>(int instrumentOffset)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setKey(java.lang.String)">setKey</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setOrigin(java.lang.String)">setOrigin</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setPart(java.lang.String)">setPart</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setParts(java.lang.String)">setParts</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setRepeat(int, org.herac.tuxguitar.io.abc.base.ABCRepeat)">setRepeat</A></B>(int index,
+          <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A> repeat)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setRepeats(int)">setRepeats</A></B>(int length)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setRhythm(java.lang.String)">setRhythm</A></B>(java.lang.String string)</CODE>
+
+<BR>
+          Abc also includes a rhythm field, 
+ R:, which is used for cataloguing and sorting collections of abc tunes:
+ this is entirely free text (although there are obvious 'standard' entries eg R:reel, R:jig, R:schottische).</TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setSource(java.lang.String)">setSource</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setStrings(int)">setStrings</A></B>(int strings)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTempo(java.lang.String)">setTempo</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setText(int, org.herac.tuxguitar.io.abc.base.ABCText)">setText</A></B>(int index,
+        <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A> text)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTexts(int)">setTexts</A></B>(int length)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTimeSignature(org.herac.tuxguitar.io.abc.base.ABCTimeSignature)">setTimeSignature</A></B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> timeSignature)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTitle(java.lang.String)">setTitle</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTrack(int, org.herac.tuxguitar.io.abc.base.ABCTrack)">setTrack</A></B>(int index,
+         <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A> track)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTracks(int)">setTracks</A></B>(int length)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTranscriptor(java.lang.String)">setTranscriptor</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setVoice(java.lang.String)">setVoice</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setX(int)">setX</A></B>(int i)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#sortEvents()">sortEvents</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="TICKS_PER_QUART"><!-- --></A><H3>
+TICKS_PER_QUART</H3>
+<PRE>
+public static final int <B>TICKS_PER_QUART</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCSong.TICKS_PER_QUART">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCSong()"><!-- --></A><H3>
+ABCSong</H3>
+<PRE>
+public <B>ABCSong</B>()</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getChords()"><!-- --></A><H3>
+getChords</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>[] <B>getChords</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setChords(int)"><!-- --></A><H3>
+setChords</H3>
+<PRE>
+public void <B>setChords</B>(int length)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setChord(int, org.herac.tuxguitar.io.abc.base.ABCChord)"><!-- --></A><H3>
+setChord</H3>
+<PRE>
+public void <B>setChord</B>(int index,
+                     <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getInfo()"><!-- --></A><H3>
+getInfo</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A> <B>getInfo</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setInfo(org.herac.tuxguitar.io.abc.base.ABCInfo)"><!-- --></A><H3>
+setInfo</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A> <B>setInfo</B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A> info)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getRepeats()"><!-- --></A><H3>
+getRepeats</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A>[] <B>getRepeats</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setRepeats(int)"><!-- --></A><H3>
+setRepeats</H3>
+<PRE>
+public void <B>setRepeats</B>(int length)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setRepeat(int, org.herac.tuxguitar.io.abc.base.ABCRepeat)"><!-- --></A><H3>
+setRepeat</H3>
+<PRE>
+public void <B>setRepeat</B>(int index,
+                      <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A> repeat)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTexts()"><!-- --></A><H3>
+getTexts</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A>[] <B>getTexts</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTexts(int)"><!-- --></A><H3>
+setTexts</H3>
+<PRE>
+public void <B>setTexts</B>(int length)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setText(int, org.herac.tuxguitar.io.abc.base.ABCText)"><!-- --></A><H3>
+setText</H3>
+<PRE>
+public void <B>setText</B>(int index,
+                    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A> text)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTracks()"><!-- --></A><H3>
+getTracks</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>[] <B>getTracks</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTracks(int)"><!-- --></A><H3>
+setTracks</H3>
+<PRE>
+public void <B>setTracks</B>(int length)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTrack(int, org.herac.tuxguitar.io.abc.base.ABCTrack)"><!-- --></A><H3>
+setTrack</H3>
+<PRE>
+public void <B>setTrack</B>(int index,
+                     <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A> track)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTimeSignature()"><!-- --></A><H3>
+getTimeSignature</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> <B>getTimeSignature</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTimeSignature(org.herac.tuxguitar.io.abc.base.ABCTimeSignature)"><!-- --></A><H3>
+setTimeSignature</H3>
+<PRE>
+public void <B>setTimeSignature</B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> timeSignature)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTempo()"><!-- --></A><H3>
+getTempo</H3>
+<PRE>
+public int <B>getTempo</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getStrings()"><!-- --></A><H3>
+getStrings</H3>
+<PRE>
+public int <B>getStrings</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setStrings(int)"><!-- --></A><H3>
+setStrings</H3>
+<PRE>
+public void <B>setStrings</B>(int strings)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getMeasures()"><!-- --></A><H3>
+getMeasures</H3>
+<PRE>
+public int <B>getMeasures</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addTempoChange(org.herac.tuxguitar.io.abc.base.ABCTempoChange)"><!-- --></A><H3>
+addTempoChange</H3>
+<PRE>
+public void <B>addTempoChange</B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A> tChange)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addTimeSignatureChange(org.herac.tuxguitar.io.abc.base.ABCTimeSignatureChange)"><!-- --></A><H3>
+addTimeSignatureChange</H3>
+<PRE>
+public void <B>addTimeSignatureChange</B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A> tsChange)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTimeSignature(int)"><!-- --></A><H3>
+getTimeSignature</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> <B>getTimeSignature</B>(int measure)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTempo(int)"><!-- --></A><H3>
+getTempo</H3>
+<PRE>
+public int <B>getTempo</B>(int measure)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTitle(java.lang.String)"><!-- --></A><H3>
+setTitle</H3>
+<PRE>
+public void <B>setTitle</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setComments(java.lang.String)"><!-- --></A><H3>
+setComments</H3>
+<PRE>
+public void <B>setComments</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setArtist(java.lang.String)"><!-- --></A><H3>
+setArtist</H3>
+<PRE>
+public void <B>setArtist</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setComponist(java.lang.String)"><!-- --></A><H3>
+setComponist</H3>
+<PRE>
+public void <B>setComponist</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setArea(java.lang.String)"><!-- --></A><H3>
+setArea</H3>
+<PRE>
+public void <B>setArea</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBook(java.lang.String)"><!-- --></A><H3>
+setBook</H3>
+<PRE>
+public void <B>setBook</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDiscography(java.lang.String)"><!-- --></A><H3>
+setDiscography</H3>
+<PRE>
+public void <B>setDiscography</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDefaultNoteLength(org.herac.tuxguitar.io.abc.base.ABCTimeSignature)"><!-- --></A><H3>
+setDefaultNoteLength</H3>
+<PRE>
+public void <B>setDefaultNoteLength</B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> signature)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDefaultNoteLength()"><!-- --></A><H3>
+getDefaultNoteLength</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> <B>getDefaultNoteLength</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the defaultNoteLength</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFilename(java.lang.String)"><!-- --></A><H3>
+setFilename</H3>
+<PRE>
+public void <B>setFilename</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setGroup(java.lang.String)"><!-- --></A><H3>
+setGroup</H3>
+<PRE>
+public void <B>setGroup</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addHistory(java.lang.String)"><!-- --></A><H3>
+addHistory</H3>
+<PRE>
+public void <B>addHistory</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setInformation(java.lang.String)"><!-- --></A><H3>
+setInformation</H3>
+<PRE>
+public void <B>setInformation</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setKey(java.lang.String)"><!-- --></A><H3>
+setKey</H3>
+<PRE>
+public void <B>setKey</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="resetScale()"><!-- --></A><H3>
+resetScale</H3>
+<PRE>
+public void <B>resetScale</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addNote(java.lang.String)"><!-- --></A><H3>
+addNote</H3>
+<PRE>
+public void <B>addNote</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setOrigin(java.lang.String)"><!-- --></A><H3>
+setOrigin</H3>
+<PRE>
+public void <B>setOrigin</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setParts(java.lang.String)"><!-- --></A><H3>
+setParts</H3>
+<PRE>
+public void <B>setParts</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTempo(java.lang.String)"><!-- --></A><H3>
+setTempo</H3>
+<PRE>
+public void <B>setTempo</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setRhythm(java.lang.String)"><!-- --></A><H3>
+setRhythm</H3>
+<PRE>
+public void <B>setRhythm</B>(java.lang.String string)</PRE>
+<DL>
+<DD>Abc also includes a rhythm field, 
+ R:, which is used for cataloguing and sorting collections of abc tunes:
+ this is entirely free text (although there are obvious 'standard' entries eg R:reel, R:jig, R:schottische).
+<P>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setSource(java.lang.String)"><!-- --></A><H3>
+setSource</H3>
+<PRE>
+public void <B>setSource</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addWords(java.lang.String)"><!-- --></A><H3>
+addWords</H3>
+<PRE>
+public void <B>addWords</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setTranscriptor(java.lang.String)"><!-- --></A><H3>
+setTranscriptor</H3>
+<PRE>
+public void <B>setTranscriptor</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addRedefinable(java.lang.String)"><!-- --></A><H3>
+addRedefinable</H3>
+<PRE>
+public void <B>addRedefinable</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addMacro(java.lang.String)"><!-- --></A><H3>
+addMacro</H3>
+<PRE>
+public void <B>addMacro</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setX(int)"><!-- --></A><H3>
+setX</H3>
+<PRE>
+public void <B>setX</B>(int i)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPart(java.lang.String)"><!-- --></A><H3>
+setPart</H3>
+<PRE>
+public void <B>setPart</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addSymbols(java.lang.String)"><!-- --></A><H3>
+addSymbols</H3>
+<PRE>
+public void <B>addSymbols</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>string</CODE> - <p>
+	Adding many symbols to a line of music can make a tune difficult to read.<br>
+	In such cases, a symbol line (a line that contains only +...+ decorations and "..." chord symbols or annotations) can be used, 
+	analogous to a lyrics line.<br>
+	A symbol line starts with s:, followed by a line of symbols.<br> 
+	Matching of notes and symbols follows the rules defined in section Lyrics.<br>
+<pre> 
+	 Example: 
+	   CDEF    | G'''AB'c
+	s: "^slow" | +f+ ** +fff+
+</pre><DT><B>See Also:</B><DD><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addLyrics(java.lang.String)"><CODE>addLyrics(String)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addLyrics(java.lang.String)"><!-- --></A><H3>
+addLyrics</H3>
+<PRE>
+public void <B>addLyrics</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>string</CODE> - <p>
+	 The w field (lowercase w) in the body, supplies a line of lyrics to be aligned syllable 
+   by syllable below the previous line of notes.<br>
+   Syllables are not aligned on grace notes and tied notes are treated as two separate notes;
+   slurred or beamed notes are also treated as separate notes in this context. <br>
+   Note that lyrics are always aligned to the beginning of the preceding music line.<br> 
+	 It is possible for a music line to be followed by several w fields.<br>
+   This can be used together with the part notation to create verses.<br>
+   The first w field is used the first time that part is played, then the second and so on.<br> 
+	 The lyrics lines are treated as an ABC string.<br>
+   Within the lyrics, the words should be separated by one or more spaces
+   and to correctly align them the following symbols may be used:
+   <p>
+   <table>
+    <tr><th>Symbol</th><th>Meaning</th></tr> 
+	  <tr><td>-    (hyphen)</td><td>break between syllables within a word</td></tr> 
+	  <tr><td>_    (underscore)</td><td> last syllable is to be held for an extra note</td></tr> 
+	  <tr><td>*    </td><td>one note is skipped (i.e. * is equivalent to a blank syllable) </td></tr>
+	  <tr><td>~    </td><td>appears as a space; aligns multiple words under one note </td></tr>
+	  <tr><td>\-   </td><td>appears as hyphen; aligns multiple syllables under one note </td></tr>
+	  <tr><td>|    </td><td>advances to the next bar </td></tr>
+   </table>
+   <p>
+	 Note that if - is preceded by a space or another hyphen, it is regarded as a separate syllable.<br> 
+	 When an underscore is used next to a hyphen, the hyphen must always come first. <br>
+	 If there are not as many syllables as notes in a measure, typing a | automatically advances to the next bar;
+	 if there are enough syllables the '|' is just ignored. 
+<p>
+	 <b>Some examples:</b>
+<pre> 
+	w: syll-a-ble    is aligned with three notes
+	w: syll-a--ble   is aligned with four notes
+	w: syll-a -ble   (equivalent to the previous line)
+	w: time__        is aligned with three notes
+	w: of~the~day    is treated as one syllable (i.e. aligned with one note)
+	                 but appears as three separate words
+	 gf|e2dc B2A2|B2G2 E2D2|.G2.G2 GABc|d4 B2
+	w: Sa-ys my au-l' wan to your aul' wan\
+	   Will~ye come to the Wa-x-ies dar-gle?
+</pre>
+<p>
+	 Please see section Continuation of input lines for the meaning of the backslash (\) character. 
+<p>
+	 If a word starts with a digit, this is interpreted as numbering of a stanza and is pushed forward a bit.<br> 
+   In other words, use something like <br>
+	   w: 1.~Three blind mice<br>
+	 to put a number before Three.
+<p><DT><B>See Also:</B><DD><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addSymbols(java.lang.String)"><CODE>addSymbols(String)</CODE></A></DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addVoice(java.lang.String)"><!-- --></A><H3>
+addVoice</H3>
+<PRE>
+public void <B>addVoice</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setVoice(java.lang.String)"><!-- --></A><H3>
+setVoice</H3>
+<PRE>
+public void <B>setVoice</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addRemarks(java.lang.String)"><!-- --></A><H3>
+addRemarks</H3>
+<PRE>
+public void <B>addRemarks</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addMusic(java.lang.String)"><!-- --></A><H3>
+addMusic</H3>
+<PRE>
+public void <B>addMusic</B>(java.lang.String line)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVoice(java.lang.String)"><!-- --></A><H3>
+getVoice</H3>
+<PRE>
+public int <B>getVoice</B>(java.lang.String string)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBarkey()"><!-- --></A><H3>
+getBarkey</H3>
+<PRE>
+public java.lang.String <B>getBarkey</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBarkey(java.lang.String)"><!-- --></A><H3>
+setBarkey</H3>
+<PRE>
+public void <B>setBarkey</B>(java.lang.String scale)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getEvents()"><!-- --></A><H3>
+getEvents</H3>
+<PRE>
+public java.util.ArrayList <B>getEvents</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the events</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="addChord(java.lang.String)"><!-- --></A><H3>
+addChord</H3>
+<PRE>
+public int <B>addChord</B>(java.lang.String name)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBassprog()"><!-- --></A><H3>
+getBassprog</H3>
+<PRE>
+public int <B>getBassprog</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the bassprog</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBassprog(int)"><!-- --></A><H3>
+setBassprog</H3>
+<PRE>
+public void <B>setBassprog</B>(int bassprog)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bassprog</CODE> - the bassprog to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getBassvol()"><!-- --></A><H3>
+getBassvol</H3>
+<PRE>
+public int <B>getBassvol</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the bassvol</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setBassvol(int)"><!-- --></A><H3>
+setBassvol</H3>
+<PRE>
+public void <B>setBassvol</B>(int bassvol)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>bassvol</CODE> - the bassvol to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getChordprog()"><!-- --></A><H3>
+getChordprog</H3>
+<PRE>
+public int <B>getChordprog</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the chordprog</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setChordprog(int)"><!-- --></A><H3>
+setChordprog</H3>
+<PRE>
+public void <B>setChordprog</B>(int chordprog)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chordprog</CODE> - the chordprog to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getChordvol()"><!-- --></A><H3>
+getChordvol</H3>
+<PRE>
+public int <B>getChordvol</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the chordvol</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setChordvol(int)"><!-- --></A><H3>
+setChordvol</H3>
+<PRE>
+public void <B>setChordvol</B>(int chordvol)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>chordvol</CODE> - the chordvol to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDrone()"><!-- --></A><H3>
+getDrone</H3>
+<PRE>
+public java.lang.String <B>getDrone</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the drone</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDrone(java.lang.String)"><!-- --></A><H3>
+setDrone</H3>
+<PRE>
+public void <B>setDrone</B>(java.lang.String drone)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>drone</CODE> - the drone to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isDroneon()"><!-- --></A><H3>
+isDroneon</H3>
+<PRE>
+public boolean <B>isDroneon</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the droneon</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDroneon(boolean)"><!-- --></A><H3>
+setDroneon</H3>
+<PRE>
+public void <B>setDroneon</B>(boolean droneon)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>droneon</CODE> - the droneon to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDrum()"><!-- --></A><H3>
+getDrum</H3>
+<PRE>
+public java.lang.String <B>getDrum</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the drum</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDrum(java.lang.String)"><!-- --></A><H3>
+setDrum</H3>
+<PRE>
+public void <B>setDrum</B>(java.lang.String drum)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>drum</CODE> - the drum to set
+ <p>
+ %%MIDI drum dzddd2dz 35 39 39 35 39 127 80 80 127 80
+ % Bass Drum 1 + Electric Snare</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isDrumon()"><!-- --></A><H3>
+isDrumon</H3>
+<PRE>
+public boolean <B>isDrumon</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the drumon</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setDrumon(boolean)"><!-- --></A><H3>
+setDrumon</H3>
+<PRE>
+public void <B>setDrumon</B>(boolean drumon)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>drumon</CODE> - the drumon to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getGchord()"><!-- --></A><H3>
+getGchord</H3>
+<PRE>
+public java.lang.String <B>getGchord</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the gchord</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setGchord(java.lang.String)"><!-- --></A><H3>
+setGchord</H3>
+<PRE>
+public void <B>setGchord</B>(java.lang.String gchord)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>gchord</CODE> - the gchord to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isGchordon()"><!-- --></A><H3>
+isGchordon</H3>
+<PRE>
+public boolean <B>isGchordon</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the gchordon</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setGchordon(boolean)"><!-- --></A><H3>
+setGchordon</H3>
+<PRE>
+public void <B>setGchordon</B>(boolean gchordon)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>gchordon</CODE> - the gchordon to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTrack()"><!-- --></A><H3>
+getTrack</H3>
+<PRE>
+public int <B>getTrack</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getKeySignature()"><!-- --></A><H3>
+getKeySignature</H3>
+<PRE>
+public int <B>getKeySignature</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the keySignature</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="midiCommand(java.lang.String)"><!-- --></A><H3>
+midiCommand</H3>
+<PRE>
+public void <B>midiCommand</B>(java.lang.String line)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setInstrumentOffset(int)"><!-- --></A><H3>
+setInstrumentOffset</H3>
+<PRE>
+public void <B>setInstrumentOffset</B>(int instrumentOffset)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>instrumentOffset</CODE> - the instrumentOffset to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="postprocessor()"><!-- --></A><H3>
+postprocessor</H3>
+<PRE>
+public void <B>postprocessor</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="sortEvents()"><!-- --></A><H3>
+sortEvents</H3>
+<PRE>
+public void <B>sortEvents</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="initBody()"><!-- --></A><H3>
+initBody</H3>
+<PRE>
+public void <B>initBody</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isHornpipe()"><!-- --></A><H3>
+isHornpipe</H3>
+<PRE>
+public boolean <B>isHornpipe</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="initHead()"><!-- --></A><H3>
+initHead</H3>
+<PRE>
+public void <B>initHead</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="computePitch(org.herac.tuxguitar.io.abc.base.ABCEvent, char[])"><!-- --></A><H3>
+computePitch</H3>
+<PRE>
+public int <B>computePitch</B>(<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A> event,
+                        char[] a)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="directive(java.lang.String)"><!-- --></A><H3>
+directive</H3>
+<PRE>
+public void <B>directive</B>(java.lang.String line)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>line</CODE> - </DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSong.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSong.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCSymbol.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCSymbol.html
new file mode 100644
index 0000000..ae3d039
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCSymbol.html
@@ -0,0 +1,364 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCSymbol
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCSymbol class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCSymbol";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSymbol.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSymbol.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCSymbol</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCSymbol</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCSymbol</B><DT>extends java.lang.Object</DL>
+
+<P>
+<DL>
+<DT><B>Author:</B></DT>
+  <DD>peter
+ <p>
+ <b>Redefinable symbols</b>
+ <p>
+ As a short cut to writing symbols which avoids the +symbol+ syntax (see decorations),
+ the letters H-W and h-w and the symbol ~ can be assigned with the U: field.<br>
+ For example, to assign the letter T to represent the trill, you can write: 
+ <pre>
+     U: T = +trill+
+ </pre>
+ You can also use "^text" etc (see Annotations below) in definitions, e.g. 
+ <pre>
+     U: X = ''^+''
+ </pre>
+ to print a plus sign over notes with X before them. 
+ <p>
+ Symbol definitions can be written in the file header, in which case they apply to all
+ the tunes in that file, or in a tune header, when they apply only to that tune, and 
+ override any previous definitions.
+ <p> 
+ Programs may also make use of a set of global default definitions, which apply 
+ everywhere unless overridden by local definitions. <br>
+ You can assign the same symbol to two or more letters e.g. 
+ <pre>
+     U: T = +trill+
+     U: U = +trill+
+ </pre>
+ in which case the same visible symbol will be produced by both letters 
+ (but they may be played differently), 
+ and you can de-assign a symbol by writing: 
+ <pre>
+     U: T = +nil+
+ </pre>
+ or 
+ <pre>
+     U: T = +none+
+ </pre>
+ The standard set of definitions (if you do not redefine them) is: 
+ <pre>
+     U: ~ = +roll+
+     U: T = +trill+
+     U: H = +fermata+
+     U: L = +emphasis+
+     U: M = +lowermordent+
+     U: P = +uppermordent+
+     U: S = +segno+
+     U: O = +coda+
+     U: u = +upbow+
+     U: v = +downbow+
+ </pre>
+ Please see ABCMacro for an advanced macro mechanism.
+ <p></DD>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><CODE>ABCMacro</CODE></A></DL>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#ABCSymbol(java.lang.String)">ABCSymbol</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#execute(java.lang.String)">execute</A></B>(java.lang.String line)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> char</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#isNil()">isNil</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html#isValid()">isValid</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCSymbol(java.lang.String)"><!-- --></A><H3>
+ABCSymbol</H3>
+<PRE>
+public <B>ABCSymbol</B>(java.lang.String string)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="execute(java.lang.String)"><!-- --></A><H3>
+execute</H3>
+<PRE>
+public java.lang.String <B>execute</B>(java.lang.String line)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public char <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isValid()"><!-- --></A><H3>
+isValid</H3>
+<PRE>
+public boolean <B>isValid</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isNil()"><!-- --></A><H3>
+isNil</H3>
+<PRE>
+public boolean <B>isNil</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCSymbol.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSymbol.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTempo.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTempo.html
new file mode 100644
index 0000000..458e28b
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTempo.html
@@ -0,0 +1,332 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCTempo
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCTempo class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCTempo";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTempo.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTempo.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCTempo</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCTempo</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCTempo</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html#ABCTempo(int)">ABCTempo</A></B>(int value)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html#ABCTempo(java.lang.String)">ABCTempo</A></B>(java.lang.String string)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html#copy()">copy</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html#getValue()">getValue</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCTempo(int)"><!-- --></A><H3>
+ABCTempo</H3>
+<PRE>
+public <B>ABCTempo</B>(int value)</PRE>
+<DL>
+</DL>
+<HR>
+
+<A NAME="ABCTempo(java.lang.String)"><!-- --></A><H3>
+ABCTempo</H3>
+<PRE>
+public <B>ABCTempo</B>(java.lang.String string)</PRE>
+<DL>
+<DT><B>Parameters:</B><DD><CODE>string</CODE> - <p>
+ "the actual number of beats per minute in a piece marked allergro (for example),
+  will depend on the music itself.
+  A piece consisting mainly of 'half notes' can be played very much quicker in
+  terms of bpm than a piece consisting mainly of 'sixteenth notes', 
+  but still be described with the same word."
+  <p>
+ Here are the best descriptions for the following tempo markings:<br>
+ <table border="2">
+ <tr><th>Beats/minute</th><th>marking</th><th>description</th></tr>
+ <tr><td>20</td><td>Larghissimo/td><td>very, very slow (20 bpm and below)</td></tr>
+ <tr><td>40</td><td>Grave/td><td>slow and solemn (20-40 bpm)</td></tr>
+ <tr><td>50</td><td>Lento/td><td>very slow (40-60 bpm)</td></tr>
+ <tr><td>60</td><td>Largo/td><td>very slow (40-60 bpm), like lento</td></tr>
+ <tr><td>65</td><td>Larghetto</td><td>rather broadly (60-66 bpm)</td></tr> 
+ <tr><td>76</td><td>Adagio</td><td>slowly </td></tr>
+ <tr><td>80</td><td>Andante</td><td>at a walking pace</td></tr> 
+ <tr><td>90</td><td>Andante Moderato</td><td>a bit faster than andante</td></tr>
+ <tr><td>100</td><td>Andantino</td><td>slightly faster than andante</td></tr>
+ <tr><td>105</td><td>Moderato</td><td>moderately (101-110 bpm)</td></tr>
+ <tr><td>110</td><td>Allegretto</td><td>moderately fast (but less so than allegro)</td></tr>
+ <tr><td>120</td><td>Allegro moderato</td><td>moderately quick (112-124 bpm)</td></tr>
+ <tr><td>130</td><td>Allegro</td><td>fast, quickly and bright (120-139 bpm)</td></tr>
+ <tr><td>140</td><td>Vivace</td><td>lively and fast (~140 bpm) (quicker than allegro)</td></tr>
+ <tr><td>150</td><td>Vivacissimo</td><td>very fast and lively</td></tr>
+ <tr><td>160</td><td>Allegrissimo</td><td>very fast</td></tr>
+ <tr><td>180</td><td>Presto</td><td>very fast (168-200 bpm)</td></tr>
+ <tr><td>220</td><td>Prestissimo</td><td>extremely fast (more than 200bpm)</td></tr>
+ </table></DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getValue()"><!-- --></A><H3>
+getValue</H3>
+<PRE>
+public int <B>getValue</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="copy()"><!-- --></A><H3>
+copy</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A> <B>copy</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTempo.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTempo.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTempoChange.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTempoChange.html
new file mode 100644
index 0000000..6296d45
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTempoChange.html
@@ -0,0 +1,292 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCTempoChange
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCTempoChange class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCTempoChange";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTempoChange.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTempoChange.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCTempoChange</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCTempoChange</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCTempoChange</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html#ABCTempoChange(int, int)">ABCTempoChange</A></B>(int measure,
+               int tempo)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html#getMeasure()">getMeasure</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html#getTempo()">getTempo</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCTempoChange(int, int)"><!-- --></A><H3>
+ABCTempoChange</H3>
+<PRE>
+public <B>ABCTempoChange</B>(int measure,
+                      int tempo)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getMeasure()"><!-- --></A><H3>
+getMeasure</H3>
+<PRE>
+public int <B>getMeasure</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTempo()"><!-- --></A><H3>
+getTempo</H3>
+<PRE>
+public int <B>getTempo</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTempoChange.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTempoChange.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCText.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCText.html
new file mode 100644
index 0000000..b58983c
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCText.html
@@ -0,0 +1,271 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCText
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCText class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCText";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCText.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCText.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCText</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCText</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCText</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html#ABCText(java.lang.String)">ABCText</A></B>(java.lang.String value)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html#getValue()">getValue</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCText(java.lang.String)"><!-- --></A><H3>
+ABCText</H3>
+<PRE>
+public <B>ABCText</B>(java.lang.String value)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getValue()"><!-- --></A><H3>
+getValue</H3>
+<PRE>
+public java.lang.String <B>getValue</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCText.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCText.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html
new file mode 100644
index 0000000..b0c7ce9
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html
@@ -0,0 +1,314 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCTimeSignature
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCTimeSignature class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCTimeSignature";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTimeSignature.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTimeSignature.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCTimeSignature</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCTimeSignature</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCTimeSignature</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#ABCTimeSignature(int, int, boolean)">ABCTimeSignature</A></B>(int numerator,
+                 int denominator,
+                 boolean toEnd)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#getDenominator()">getDenominator</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#getNumerator()">getNumerator</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#isToEnd()">isToEnd</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCTimeSignature(int, int, boolean)"><!-- --></A><H3>
+ABCTimeSignature</H3>
+<PRE>
+public <B>ABCTimeSignature</B>(int numerator,
+                        int denominator,
+                        boolean toEnd)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDenominator()"><!-- --></A><H3>
+getDenominator</H3>
+<PRE>
+public int <B>getDenominator</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getNumerator()"><!-- --></A><H3>
+getNumerator</H3>
+<PRE>
+public int <B>getNumerator</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isToEnd()"><!-- --></A><H3>
+isToEnd</H3>
+<PRE>
+public boolean <B>isToEnd</B>()</PRE>
+<DL>
+<DD><DL>
+
+<DT><B>Returns:</B><DD>the toEnd</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTimeSignature.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTimeSignature.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html
new file mode 100644
index 0000000..ef3b594
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html
@@ -0,0 +1,292 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCTimeSignatureChange
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCTimeSignatureChange class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCTimeSignatureChange";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTimeSignatureChange.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTimeSignatureChange.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCTimeSignatureChange</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCTimeSignatureChange</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCTimeSignatureChange</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#ABCTimeSignatureChange(int, org.herac.tuxguitar.io.abc.base.ABCTimeSignature)">ABCTimeSignatureChange</A></B>(int measure,
+                       <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> timeSignature)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#getMeasure()">getMeasure</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#getTimeSignature()">getTimeSignature</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCTimeSignatureChange(int, org.herac.tuxguitar.io.abc.base.ABCTimeSignature)"><!-- --></A><H3>
+ABCTimeSignatureChange</H3>
+<PRE>
+public <B>ABCTimeSignatureChange</B>(int measure,
+                              <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> timeSignature)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getMeasure()"><!-- --></A><H3>
+getMeasure</H3>
+<PRE>
+public int <B>getMeasure</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getTimeSignature()"><!-- --></A><H3>
+getTimeSignature</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> <B>getTimeSignature</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTimeSignatureChange.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base"><B>NEXT CLASS</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTimeSignatureChange.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | FIELD | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: FIELD | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTrack.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTrack.html
new file mode 100644
index 0000000..36f117f
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/ABCTrack.html
@@ -0,0 +1,756 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:33 GMT+01:00 2011 -->
+<TITLE>
+ABCTrack
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base.ABCTrack class">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="ABCTrack";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTrack.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTrack.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<!-- ======== START OF CLASS DATA ======== -->
+<H2>
+<FONT SIZE="-1">
+org.herac.tuxguitar.io.abc.base</FONT>
+<BR>
+Class ABCTrack</H2>
+<PRE>
+java.lang.Object
+  <IMG SRC="../../../../../../resources/inherit.gif" ALT="extended by"><B>org.herac.tuxguitar.io.abc.base.ABCTrack</B>
+</PRE>
+<HR>
+<DL>
+<DT>public class <B>ABCTrack</B><DT>extends java.lang.Object</DL>
+
+<P>
+<HR>
+
+<P>
+<!-- ======== NESTED CLASS SUMMARY ======== -->
+
+
+<!-- =========== FIELD SUMMARY =========== -->
+
+<A NAME="field_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Field Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_DOUBLE_STRINGS">FLAG_DOUBLE_STRINGS</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_EFFECT_CHANNEL_DISABLED">FLAG_EFFECT_CHANNEL_DISABLED</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_LET_RING">FLAG_LET_RING</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_PEDAL_SABCEL_GUITAR">FLAG_PEDAL_SABCEL_GUITAR</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#FLAG_RHYTHM_TRACK">FLAG_RHYTHM_TRACK</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+
+<A NAME="constructor_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Constructor Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#ABCTrack(java.lang.String)">ABCTrack</A></B>(java.lang.String declaration)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<!-- ========== METHOD SUMMARY =========== -->
+
+<A NAME="method_summary"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Method Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A></CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#clone(java.lang.String, int)">clone</A></B>(java.lang.String name,
+      int numstrings)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getCapo()">getCapo</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getClefNumber()">getClefNumber</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getClefType()">getClefType</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getDeclaration()">getDeclaration</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getFlags()">getFlags</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getInstrument()">getInstrument</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getName()">getName</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getPan()">getPan</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int[]</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getStrings()">getStrings</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#getVolume()">getVolume</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#isBagpipe()">isBagpipe</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> boolean</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#isPercussion()">isPercussion</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setCapo(int)">setCapo</A></B>(int capo)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setClefNumber(int)">setClefNumber</A></B>(int clefNumber)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setClefType(int)">setClefType</A></B>(int clefType)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setFlags(int)">setFlags</A></B>(int flags)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setInstrument(int)">setInstrument</A></B>(int instrument)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setPan(int)">setPan</A></B>(int pan)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setStrings(int[])">setStrings</A></B>(int[] s)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#setVolume(int)">setVolume</A></B>(int volume)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> java.lang.String</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#toString()">toString</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ <A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
+<TD><B>Methods inherited from class java.lang.Object</B></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE>equals, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<!-- ============ FIELD DETAIL =========== -->
+
+<A NAME="field_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Field Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="FLAG_DOUBLE_STRINGS"><!-- --></A><H3>
+FLAG_DOUBLE_STRINGS</H3>
+<PRE>
+public static final int <B>FLAG_DOUBLE_STRINGS</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_DOUBLE_STRINGS">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FLAG_LET_RING"><!-- --></A><H3>
+FLAG_LET_RING</H3>
+<PRE>
+public static final int <B>FLAG_LET_RING</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_LET_RING">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FLAG_PEDAL_SABCEL_GUITAR"><!-- --></A><H3>
+FLAG_PEDAL_SABCEL_GUITAR</H3>
+<PRE>
+public static final int <B>FLAG_PEDAL_SABCEL_GUITAR</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_PEDAL_SABCEL_GUITAR">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FLAG_EFFECT_CHANNEL_DISABLED"><!-- --></A><H3>
+FLAG_EFFECT_CHANNEL_DISABLED</H3>
+<PRE>
+public static final int <B>FLAG_EFFECT_CHANNEL_DISABLED</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_EFFECT_CHANNEL_DISABLED">Constant Field Values</A></DL>
+</DL>
+<HR>
+
+<A NAME="FLAG_RHYTHM_TRACK"><!-- --></A><H3>
+FLAG_RHYTHM_TRACK</H3>
+<PRE>
+public static final int <B>FLAG_RHYTHM_TRACK</B></PRE>
+<DL>
+<DL>
+<DT><B>See Also:</B><DD><A HREF="../../../../../../constant-values.html#org.herac.tuxguitar.io.abc.base.ABCTrack.FLAG_RHYTHM_TRACK">Constant Field Values</A></DL>
+</DL>
+
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+
+<A NAME="constructor_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Constructor Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="ABCTrack(java.lang.String)"><!-- --></A><H3>
+ABCTrack</H3>
+<PRE>
+public <B>ABCTrack</B>(java.lang.String declaration)</PRE>
+<DL>
+</DL>
+
+<!-- ============ METHOD DETAIL ========== -->
+
+<A NAME="method_detail"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=1><FONT SIZE="+2">
+<B>Method Detail</B></FONT></TD>
+</TR>
+</TABLE>
+
+<A NAME="getCapo()"><!-- --></A><H3>
+getCapo</H3>
+<PRE>
+public int <B>getCapo</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClefNumber()"><!-- --></A><H3>
+getClefNumber</H3>
+<PRE>
+public int <B>getClefNumber</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getClefType()"><!-- --></A><H3>
+getClefType</H3>
+<PRE>
+public int <B>getClefType</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getFlags()"><!-- --></A><H3>
+getFlags</H3>
+<PRE>
+public int <B>getFlags</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getName()"><!-- --></A><H3>
+getName</H3>
+<PRE>
+public java.lang.String <B>getName</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getPan()"><!-- --></A><H3>
+getPan</H3>
+<PRE>
+public int <B>getPan</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isPercussion()"><!-- --></A><H3>
+isPercussion</H3>
+<PRE>
+public boolean <B>isPercussion</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getStrings()"><!-- --></A><H3>
+getStrings</H3>
+<PRE>
+public int[] <B>getStrings</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getVolume()"><!-- --></A><H3>
+getVolume</H3>
+<PRE>
+public int <B>getVolume</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getInstrument()"><!-- --></A><H3>
+getInstrument</H3>
+<PRE>
+public int <B>getInstrument</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="toString()"><!-- --></A><H3>
+toString</H3>
+<PRE>
+public java.lang.String <B>toString</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="getDeclaration()"><!-- --></A><H3>
+getDeclaration</H3>
+<PRE>
+public java.lang.String <B>getDeclaration</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setCapo(int)"><!-- --></A><H3>
+setCapo</H3>
+<PRE>
+public void <B>setCapo</B>(int capo)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>capo</CODE> - the capo to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setClefNumber(int)"><!-- --></A><H3>
+setClefNumber</H3>
+<PRE>
+public void <B>setClefNumber</B>(int clefNumber)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>clefNumber</CODE> - the clefNumber to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setClefType(int)"><!-- --></A><H3>
+setClefType</H3>
+<PRE>
+public void <B>setClefType</B>(int clefType)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>clefType</CODE> - the clefType to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setInstrument(int)"><!-- --></A><H3>
+setInstrument</H3>
+<PRE>
+public void <B>setInstrument</B>(int instrument)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>instrument</CODE> - the instrument to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setPan(int)"><!-- --></A><H3>
+setPan</H3>
+<PRE>
+public void <B>setPan</B>(int pan)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>pan</CODE> - the pan to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setVolume(int)"><!-- --></A><H3>
+setVolume</H3>
+<PRE>
+public void <B>setVolume</B>(int volume)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>volume</CODE> - the volume to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setFlags(int)"><!-- --></A><H3>
+setFlags</H3>
+<PRE>
+public void <B>setFlags</B>(int flags)</PRE>
+<DL>
+<DD><DL>
+<DT><B>Parameters:</B><DD><CODE>flags</CODE> - the flags to set</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="clone(java.lang.String, int)"><!-- --></A><H3>
+clone</H3>
+<PRE>
+public <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A> <B>clone</B>(java.lang.String name,
+                      int numstrings)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="setStrings(int[])"><!-- --></A><H3>
+setStrings</H3>
+<PRE>
+public void <B>setStrings</B>(int[] s)</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<HR>
+
+<A NAME="isBagpipe()"><!-- --></A><H3>
+isBagpipe</H3>
+<PRE>
+public boolean <B>isBagpipe</B>()</PRE>
+<DL>
+<DD><DL>
+</DL>
+</DD>
+</DL>
+<!-- ========= END OF CLASS DATA ========= -->
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="class-use/ABCTrack.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base"><B>PREV CLASS</B></A> 
+ NEXT CLASS</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTrack.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+<TR>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+  SUMMARY: NESTED | <A HREF="#field_summary">FIELD</A> | <A HREF="#constructor_summary">CONSTR</A> | <A HREF="#method_summary">METHOD</A></FONT></TD>
+<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
+DETAIL: <A HREF="#field_detail">FIELD</A> | <A HREF="#constructor_detail">CONSTR</A> | <A HREF="#method_detail">METHOD</A></FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCChord.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCChord.html
new file mode 100644
index 0000000..e93e97e
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCChord.html
@@ -0,0 +1,224 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCChord
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCChord";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCChord.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCChord</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A>[]</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getChords()">getChords</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A></CODE></FONT></TD>
+<TD><CODE><B>ABCLocation.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getChord()">getChord</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setChord(int, org.herac.tuxguitar.io.abc.base.ABCChord)">setChord</A></B>(int index,
+         <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCLocation.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#setChord(org.herac.tuxguitar.io.abc.base.ABCChord)">setChord</A></B>(<A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#ABCLocation(java.lang.String, int, int, int, org.herac.tuxguitar.io.abc.base.ABCChord, org.herac.tuxguitar.io.abc.base.ABCEvent)">ABCLocation</A></B>(java.lang.String part,
+            int track,
+            int measure,
+            int ticks,
+            <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord,
+            <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A> event)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCChord.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCComponent.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCComponent.html
new file mode 100644
index 0000000..dc4dd45
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCComponent.html
@@ -0,0 +1,180 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCComponent
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCComponent";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponent.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCComponent</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Subclasses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentChord</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> class</CODE></FONT></TD>
+<TD><CODE><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A></B></CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponent.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCComponentChord.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCComponentChord.html
new file mode 100644
index 0000000..765dc59
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCComponentChord.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCComponentChord
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCComponentChord";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponentChord.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCComponentChord</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.base.ABCComponentChord
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponentChord.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCComponentNote.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCComponentNote.html
new file mode 100644
index 0000000..6c7ab15
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCComponentNote.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCComponentNote
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCComponentNote";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponentNote.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCComponentNote</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.base.ABCComponentNote
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCComponentNote.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCEvent.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCEvent.html
new file mode 100644
index 0000000..dbe48eb
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCEvent.html
@@ -0,0 +1,208 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCEvent
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCEvent";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCEvent.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCEvent</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A></CODE></FONT></TD>
+<TD><CODE><B>ABCLocation.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#getEvent()">getEvent</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> int</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#computePitch(org.herac.tuxguitar.io.abc.base.ABCEvent, char[])">computePitch</A></B>(<A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A> event,
+             char[] a)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html#ABCLocation(java.lang.String, int, int, int, org.herac.tuxguitar.io.abc.base.ABCChord, org.herac.tuxguitar.io.abc.base.ABCEvent)">ABCLocation</A></B>(java.lang.String part,
+            int track,
+            int measure,
+            int ticks,
+            <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A> chord,
+            <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A> event)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCEvent.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCInfo.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCInfo.html
new file mode 100644
index 0000000..c241821
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCInfo.html
@@ -0,0 +1,196 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCInfo
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCInfo";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCInfo.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCInfo</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A></CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getInfo()">getInfo</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A></CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setInfo(org.herac.tuxguitar.io.abc.base.ABCInfo)">setInfo</A></B>(<A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A> info)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A></CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setInfo(org.herac.tuxguitar.io.abc.base.ABCInfo)">setInfo</A></B>(<A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A> info)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCInfo.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCLocation.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCLocation.html
new file mode 100644
index 0000000..3ea989b
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCLocation.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCLocation
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCLocation";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCLocation.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCLocation</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.base.ABCLocation
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCLocation.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCMacro.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCMacro.html
new file mode 100644
index 0000000..6825a34
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCMacro.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCMacro
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCMacro";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCMacro.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCMacro</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.base.ABCMacro
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCMacro.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCOctaveDatabase.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCOctaveDatabase.html
new file mode 100644
index 0000000..eddd10d
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCOctaveDatabase.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCOctaveDatabase
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCOctaveDatabase";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCOctaveDatabase.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCOctaveDatabase</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.base.ABCOctaveDatabase
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCOctaveDatabase.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCPercussion.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCPercussion.html
new file mode 100644
index 0000000..d4cae45
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCPercussion.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Tue May 17 20:18:18 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCPercussion
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCPercussion";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPercussion.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCPercussion</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html" title="class in org.herac.tuxguitar.io.abc.base">ABCPercussion</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html" title="class in org.herac.tuxguitar.io.abc.base">ABCPercussion</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html" title="class in org.herac.tuxguitar.io.abc.base">ABCPercussion</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html" title="class in org.herac.tuxguitar.io.abc.base">ABCPercussion</A>[]</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getPercussions()">getPercussions</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html" title="class in org.herac.tuxguitar.io.abc.base">ABCPercussion</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setPercussion(int, org.herac.tuxguitar.io.abc.base.ABCPercussion)">setPercussion</A></B>(int index,
+              <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html" title="class in org.herac.tuxguitar.io.abc.base">ABCPercussion</A> percussions)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCPercussion.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPercussion.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCRepeat.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCRepeat.html
new file mode 100644
index 0000000..10fe8d9
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCRepeat.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCRepeat
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCRepeat";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCRepeat.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCRepeat</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A>[]</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getRepeats()">getRepeats</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setRepeat(int, org.herac.tuxguitar.io.abc.base.ABCRepeat)">setRepeat</A></B>(int index,
+          <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A> repeat)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCRepeat.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCRhythm.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCRhythm.html
new file mode 100644
index 0000000..f842f10
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCRhythm.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Tue May 17 20:18:18 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCRhythm
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCRhythm";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCRhythm.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCRhythm</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRhythm</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRhythm</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRhythm</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRhythm</A>[]</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getRhythms()">getRhythms</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRhythm</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setRhythm(int, org.herac.tuxguitar.io.abc.base.ABCRhythm)">setRhythm</A></B>(int index,
+          <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRhythm</A> rhythm)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCRhythm.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCRhythm.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCSong.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCSong.html
new file mode 100644
index 0000000..8e1d83c
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCSong.html
@@ -0,0 +1,200 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCSong
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCSong";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSong.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCSong</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc"><B>org.herac.tuxguitar.io.abc</B></A></TD>
+<TD>  </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A></CODE></FONT></TD>
+<TD><CODE><B>ABCInputStream.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html#readSong()">readSong</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html#ABCEvent(org.herac.tuxguitar.io.abc.base.ABCSong, java.lang.String)">ABCEvent</A></B>(<A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A> song,
+         java.lang.String name)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSong.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCSymbol.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCSymbol.html
new file mode 100644
index 0000000..fffb8a1
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCSymbol.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCSymbol
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCSymbol";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSymbol.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCSymbol</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.base.ABCSymbol
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSymbol.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTempo.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTempo.html
new file mode 100644
index 0000000..e7f8d68
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTempo.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCTempo
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCTempo";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTempo.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCTempo</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A></CODE></FONT></TD>
+<TD><CODE><B>ABCTempo.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html#copy()">copy</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTempo.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTempoChange.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTempoChange.html
new file mode 100644
index 0000000..0f89768
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTempoChange.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCTempoChange
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCTempoChange";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTempoChange.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCTempoChange</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addTempoChange(org.herac.tuxguitar.io.abc.base.ABCTempoChange)">addTempoChange</A></B>(<A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A> tChange)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTempoChange.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCText.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCText.html
new file mode 100644
index 0000000..3633cea
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCText.html
@@ -0,0 +1,189 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCText
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCText";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCText.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCText</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A>[]</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTexts()">getTexts</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setText(int, org.herac.tuxguitar.io.abc.base.ABCText)">setText</A></B>(int index,
+        <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A> text)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCText.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTimeSignature.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTimeSignature.html
new file mode 100644
index 0000000..f4a359b
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTimeSignature.html
@@ -0,0 +1,235 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCTimeSignature
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCTimeSignature";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTimeSignature.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCTimeSignature</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></CODE></FONT></TD>
+<TD><CODE><B>ABCTimeSignatureChange.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#getTimeSignature()">getTimeSignature</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTimeSignature()">getTimeSignature</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTimeSignature(int)">getTimeSignature</A></B>(int measure)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getDefaultNoteLength()">getDefaultNoteLength</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTimeSignature(org.herac.tuxguitar.io.abc.base.ABCTimeSignature)">setTimeSignature</A></B>(<A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> timeSignature)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setDefaultNoteLength(org.herac.tuxguitar.io.abc.base.ABCTimeSignature)">setDefaultNoteLength</A></B>(<A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> signature)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html#ABCTimeSignatureChange(int, org.herac.tuxguitar.io.abc.base.ABCTimeSignature)">ABCTimeSignatureChange</A></B>(int measure,
+                       <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A> timeSignature)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTimeSignature.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTimeSignatureChange.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTimeSignatureChange.html
new file mode 100644
index 0000000..7878b0c
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTimeSignatureChange.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCTimeSignatureChange
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCTimeSignatureChange";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTimeSignatureChange.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCTimeSignatureChange</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#addTimeSignatureChange(org.herac.tuxguitar.io.abc.base.ABCTimeSignatureChange)">addTimeSignatureChange</A></B>(<A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A> tsChange)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTimeSignatureChange.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTrack.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTrack.html
new file mode 100644
index 0000000..14fe8ef
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/class-use/ABCTrack.html
@@ -0,0 +1,198 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.base.ABCTrack
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.base.ABCTrack";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTrack.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.base.ABCTrack</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A> in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> that return <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A>[]</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#getTracks()">getTracks</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A></CODE></FONT></TD>
+<TD><CODE><B>ABCTrack.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html#clone(java.lang.String, int)">clone</A></B>(java.lang.String name,
+      int numstrings)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> with parameters of type <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> void</CODE></FONT></TD>
+<TD><CODE><B>ABCSong.</B><B><A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html#setTrack(int, org.herac.tuxguitar.io.abc.base.ABCTrack)">setTrack</A></B>(int index,
+         <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A> track)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCTrack.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-frame.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-frame.html
new file mode 100644
index 0000000..65143ea
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-frame.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+org.herac.tuxguitar.io.abc.base
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base package">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html" target="classFrame">org.herac.tuxguitar.io.abc.base</A></FONT>
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT> 
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCChord</A>
+<BR>
+<A HREF="ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCComponent</A>
+<BR>
+<A HREF="ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCComponentChord</A>
+<BR>
+<A HREF="ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCComponentNote</A>
+<BR>
+<A HREF="ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCEvent</A>
+<BR>
+<A HREF="ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCInfo</A>
+<BR>
+<A HREF="ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCLocation</A>
+<BR>
+<A HREF="ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCMacro</A>
+<BR>
+<A HREF="ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCOctaveDatabase</A>
+<BR>
+<A HREF="ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCRepeat</A>
+<BR>
+<A HREF="ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCSong</A>
+<BR>
+<A HREF="ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCSymbol</A>
+<BR>
+<A HREF="ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTempo</A>
+<BR>
+<A HREF="ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTempoChange</A>
+<BR>
+<A HREF="ABCText.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCText</A>
+<BR>
+<A HREF="ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTimeSignature</A>
+<BR>
+<A HREF="ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTimeSignatureChange</A>
+<BR>
+<A HREF="ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base" target="classFrame">ABCTrack</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-summary.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-summary.html
new file mode 100644
index 0000000..0e36672
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-summary.html
@@ -0,0 +1,216 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+org.herac.tuxguitar.io.abc.base
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc.base package">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="org.herac.tuxguitar.io.abc.base";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/package-summary.html"><B>PREV PACKAGE</B></A> 
+ NEXT PACKAGE</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<H2>
+Package org.herac.tuxguitar.io.abc.base
+</H2>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCChord</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponent</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentChord</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base">ABCComponentNote</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base">ABCEvent</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCInfo</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base">ABCLocation</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base">ABCMacro</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base">ABCOctaveDatabase</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCRepeat.html" title="class in org.herac.tuxguitar.io.abc.base">ABCRepeat</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSong.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSong</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base">ABCSymbol</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempo</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTempoChange</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCText.html" title="class in org.herac.tuxguitar.io.abc.base">ABCText</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignature.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignature</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTimeSignatureChange</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCTrack.html" title="class in org.herac.tuxguitar.io.abc.base">ABCTrack</A></B></TD>
+<TD> </TD>
+</TR>
+</TABLE>
+ 
+
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/package-summary.html"><B>PREV PACKAGE</B></A> 
+ NEXT PACKAGE</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-tree.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-tree.html
new file mode 100644
index 0000000..2f60d24
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-tree.html
@@ -0,0 +1,149 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+org.herac.tuxguitar.io.abc.base Class Hierarchy
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="org.herac.tuxguitar.io.abc.base Class Hierarchy";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/package-tree.html"><B>PREV</B></A> 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package org.herac.tuxguitar.io.abc.base
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.Object<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCChord</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCComponent</B></A><UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCComponentChord</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCComponentNote</B></A></UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCEvent</B></A> (implements java.lang.Comparable)
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCInfo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCInfo</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCLocation.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCLocation</B></A> (implements java.lang.Comparable)
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCMacro</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCOctaveDatabase</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="../../../../. [...]
+</UL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../../../../../../org/herac/tuxguitar/io/abc/package-tree.html"><B>PREV</B></A> 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-use.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-use.html
new file mode 100644
index 0000000..27ed24d
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/base/package-use.html
@@ -0,0 +1,247 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Package org.herac.tuxguitar.io.abc.base
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Package org.herac.tuxguitar.io.abc.base";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>org.herac.tuxguitar.io.abc.base</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc"><B>org.herac.tuxguitar.io.abc</B></A></TD>
+<TD>  </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc.base"><B>org.herac.tuxguitar.io.abc.base</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> used by <A HREF="../../../../../../org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCSong.html#org.herac.tuxguitar.io.abc"><B>ABCSong</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc.base"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A> used by <A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCChord.html#org.herac.tuxguitar.io.abc.base"><B>ABCChord</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCComponent.html#org.herac.tuxguitar.io.abc.base"><B>ABCComponent</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCEvent.html#org.herac.tuxguitar.io.abc.base"><B>ABCEvent</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCInfo.html#org.herac.tuxguitar.io.abc.base"><B>ABCInfo</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCRepeat.html#org.herac.tuxguitar.io.abc.base"><B>ABCRepeat</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCSong.html#org.herac.tuxguitar.io.abc.base"><B>ABCSong</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCTempo.html#org.herac.tuxguitar.io.abc.base"><B>ABCTempo</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCTempoChange.html#org.herac.tuxguitar.io.abc.base"><B>ABCTempoChange</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCText.html#org.herac.tuxguitar.io.abc.base"><B>ABCText</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCTimeSignature.html#org.herac.tuxguitar.io.abc.base"><B>ABCTimeSignature</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCTimeSignatureChange.html#org.herac.tuxguitar.io.abc.base"><B>ABCTimeSignatureChange</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/base/class-use/ABCTrack.html#org.herac.tuxguitar.io.abc.base"><B>ABCTrack</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCExportSettingsDialog.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCExportSettingsDialog.html
new file mode 100644
index 0000000..f17fa41
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCExportSettingsDialog.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCExportSettingsDialog
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCExportSettingsDialog";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCExportSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCExportSettingsDialog</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCExportSettingsDialog
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCExportSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCImportSettingsDialog.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCImportSettingsDialog.html
new file mode 100644
index 0000000..0d95b53
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCImportSettingsDialog.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCImportSettingsDialog
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCImportSettingsDialog";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCImportSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCImportSettingsDialog</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCImportSettingsDialog
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCImportSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCInputStream.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCInputStream.html
new file mode 100644
index 0000000..f828512
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCInputStream.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCInputStream
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCInputStream";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCInputStream.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCInputStream</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCInputStream
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCInputStream.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCOutputStream.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCOutputStream.html
new file mode 100644
index 0000000..535703d
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCOutputStream.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCOutputStream
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCOutputStream";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCOutputStream.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCOutputStream</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCOutputStream
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCOutputStream.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCPluginExporter.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCPluginExporter.html
new file mode 100644
index 0000000..999fc50
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCPluginExporter.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCPluginExporter
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCPluginExporter";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginExporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCPluginExporter</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCPluginExporter
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginExporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCPluginImporter.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCPluginImporter.html
new file mode 100644
index 0000000..d10291c
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCPluginImporter.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCPluginImporter
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCPluginImporter";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginImporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCPluginImporter</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCPluginImporter
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginImporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCPluginList.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCPluginList.html
new file mode 100644
index 0000000..3f5f589
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCPluginList.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCPluginList
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCPluginList";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginList.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCPluginList</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCPluginList
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCPluginList.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSettings.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSettings.html
new file mode 100644
index 0000000..4c0309f
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSettings.html
@@ -0,0 +1,210 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCSettings
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCSettings";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSettings.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCSettings</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc"><B>org.herac.tuxguitar.io.abc</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Uses of <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> in <A HREF="../../../../../../org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A></FONT></TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Methods in <A HREF="../../../../../../org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A> that return <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></CODE></FONT></TD>
+<TD><CODE><B>ABCExportSettingsDialog.</B><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html#open()">open</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE> <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></CODE></FONT></TD>
+<TD><CODE><B>ABCImportSettingsDialog.</B><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html#open()">open</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
+<CODE>static <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></CODE></FONT></TD>
+<TD><CODE><B>ABCSettings.</B><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html#getDefaults()">getDefaults</A></B>()</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableSubHeadingColor">
+<TD COLSPAN=2>Constructors in <A HREF="../../../../../../org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A> with parameters of type <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html#ABCInputStream(java.io.InputStream, org.herac.tuxguitar.io.abc.ABCSettings)">ABCInputStream</A></B>(java.io.InputStream stream,
+               <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> settings)</CODE>
+
+<BR>
+           </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><CODE><B><A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html#ABCOutputStream(java.io.OutputStream, org.herac.tuxguitar.io.abc.ABCSettings)">ABCOutputStream</A></B>(java.io.OutputStream stream,
+                <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A> settings)</CODE>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSettings.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSettingsDialog.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSettingsDialog.html
new file mode 100644
index 0000000..4ca6137
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSettingsDialog.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Sun Jun 26 09:16:54 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCSettingsDialog
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCSettingsDialog";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCSettingsDialog</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCSettingsDialog
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSettingsDialog.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSongExporter.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSongExporter.html
new file mode 100644
index 0000000..f6ffcc5
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSongExporter.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCSongExporter
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCSongExporter";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSongExporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCSongExporter</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCSongExporter
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSongExporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSongImporter.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSongImporter.html
new file mode 100644
index 0000000..091301e
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/class-use/ABCSongImporter.html
@@ -0,0 +1,136 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Class org.herac.tuxguitar.io.abc.ABCSongImporter
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Class org.herac.tuxguitar.io.abc.ABCSongImporter";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSongImporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Class<br>org.herac.tuxguitar.io.abc.ABCSongImporter</B></H2>
+</CENTER>
+No usage of org.herac.tuxguitar.io.abc.ABCSongImporter
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc"><FONT CLASS="NavBarFont1"><B>Class</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="ABCSongImporter.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-frame.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-frame.html
new file mode 100644
index 0000000..0fb06ee
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-frame.html
@@ -0,0 +1,50 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+org.herac.tuxguitar.io.abc
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc package">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+<FONT size="+1" CLASS="FrameTitleFont">
+<A HREF="../../../../../org/herac/tuxguitar/io/abc/package-summary.html" target="classFrame">org.herac.tuxguitar.io.abc</A></FONT>
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
+Classes</FONT> 
+<FONT CLASS="FrameItemFont">
+<BR>
+<A HREF="ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCExportSettingsDialog</A>
+<BR>
+<A HREF="ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCImportSettingsDialog</A>
+<BR>
+<A HREF="ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCInputStream</A>
+<BR>
+<A HREF="ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCOutputStream</A>
+<BR>
+<A HREF="ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCPluginExporter</A>
+<BR>
+<A HREF="ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCPluginImporter</A>
+<BR>
+<A HREF="ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCPluginList</A>
+<BR>
+<A HREF="ABCSettings.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCSettings</A>
+<BR>
+<A HREF="ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCSongExporter</A>
+<BR>
+<A HREF="ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc" target="classFrame">ABCSongImporter</A></FONT></TD>
+</TR>
+</TABLE>
+
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-summary.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-summary.html
new file mode 100644
index 0000000..3e8605a
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-summary.html
@@ -0,0 +1,184 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+org.herac.tuxguitar.io.abc
+</TITLE>
+
+<META NAME="keywords" CONTENT="org.herac.tuxguitar.io.abc package">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="org.herac.tuxguitar.io.abc";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV PACKAGE 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<H2>
+Package org.herac.tuxguitar.io.abc
+</H2>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Class Summary</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCExportSettingsDialog</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc">ABCImportSettingsDialog</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCInputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCInputStream</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCOutputStream.html" title="class in org.herac.tuxguitar.io.abc">ABCOutputStream</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginExporter</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginImporter</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc">ABCPluginList</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSettings.html" title="class in org.herac.tuxguitar.io.abc">ABCSettings</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongExporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongExporter</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="15%"><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc">ABCSongImporter</A></B></TD>
+<TD> </TD>
+</TR>
+</TABLE>
+ 
+
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-use.html"><FONT CLASS="NavBarFont1"><B>Use</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV PACKAGE 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/base/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-tree.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-tree.html
new file mode 100644
index 0000000..043419a
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-tree.html
@@ -0,0 +1,156 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+org.herac.tuxguitar.io.abc Class Hierarchy
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="org.herac.tuxguitar.io.abc Class Hierarchy";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/base/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For Package org.herac.tuxguitar.io.abc
+</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../../overview-tree.html">All Packages</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.Object<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCExportSettingsDialog</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCImportSettingsDialog</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="../../../../ [...]
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCSongImporter</B></A> (implements org.herac.tuxguitar.io.base.TGLocalFileImporter)
+<LI TYPE="circle">class org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter (implements org.herac.tuxguitar.gui.system.plugins.TGPlugin)
+<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCPluginExporter</B></A></UL>
+<LI TYPE="circle">class org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCPluginImporter</B></A></UL>
+<LI TYPE="circle">class org.herac.tuxguitar.gui.system.plugins.base.TGPluginList<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="../../../../../org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCPluginList</B></A></UL>
+</UL>
+</UL>
+</UL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ <A HREF="../../../../../org/herac/tuxguitar/io/abc/base/package-tree.html"><B>NEXT</B></A></FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-use.html b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-use.html
new file mode 100644
index 0000000..6cb9661
--- /dev/null
+++ b/TuxGuitar-abc/doc/org/herac/tuxguitar/io/abc/package-use.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:31 GMT+01:00 2011 -->
+<TITLE>
+Uses of Package org.herac.tuxguitar.io.abc
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../../stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Uses of Package org.herac.tuxguitar.io.abc";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+<B>Uses of Package<br>org.herac.tuxguitar.io.abc</B></H2>
+</CENTER>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Packages that use <A HREF="../../../../../org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><A HREF="#org.herac.tuxguitar.io.abc"><B>org.herac.tuxguitar.io.abc</B></A></TD>
+<TD>  </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<A NAME="org.herac.tuxguitar.io.abc"><!-- --></A>
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+Classes in <A HREF="../../../../../org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A> used by <A HREF="../../../../../org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD><B><A HREF="../../../../../org/herac/tuxguitar/io/abc/class-use/ABCSettings.html#org.herac.tuxguitar.io.abc"><B>ABCSettings</B></A></B>
+
+<BR>
+           </TD>
+</TR>
+</TABLE>
+ 
+<P>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Use</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="../../../../../index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="package-use.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="../../../../../allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/overview-frame.html b/TuxGuitar-abc/doc/overview-frame.html
new file mode 100644
index 0000000..79ceae1
--- /dev/null
+++ b/TuxGuitar-abc/doc/overview-frame.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+Overview
+</TITLE>
+
+<META NAME="keywords" CONTENT="Overview">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT size="+1" CLASS="FrameTitleFont">
+<B></B></FONT></TD>
+</TR>
+</TABLE>
+
+<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
+<TR>
+<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" target="packageFrame">All Classes</A></FONT>
+<P>
+<FONT size="+1" CLASS="FrameHeadingFont">
+Packages</FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="org/herac/tuxguitar/io/abc/package-frame.html" target="packageFrame">org.herac.tuxguitar.io.abc</A></FONT>
+<BR>
+<FONT CLASS="FrameItemFont"><A HREF="org/herac/tuxguitar/io/abc/base/package-frame.html" target="packageFrame">org.herac.tuxguitar.io.abc.base</A></FONT>
+<BR>
+</TD>
+</TR>
+</TABLE>
+
+<P>
+ 
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/overview-summary.html b/TuxGuitar-abc/doc/overview-summary.html
new file mode 100644
index 0000000..b60eced
--- /dev/null
+++ b/TuxGuitar-abc/doc/overview-summary.html
@@ -0,0 +1,148 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+Overview
+</TITLE>
+
+<META NAME="keywords" CONTENT="Overview">
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Overview";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+
+<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
+<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
+<TD COLSPAN=2><FONT SIZE="+2">
+<B>Packages</B></FONT></TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="org/herac/tuxguitar/io/abc/package-summary.html">org.herac.tuxguitar.io.abc</A></B></TD>
+<TD> </TD>
+</TR>
+<TR BGCOLOR="white" CLASS="TableRowColor">
+<TD WIDTH="20%"><B><A HREF="org/herac/tuxguitar/io/abc/base/package-summary.html">org.herac.tuxguitar.io.abc.base</A></B></TD>
+<TD> </TD>
+</TR>
+</TABLE>
+
+<P>
+ <HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/overview-tree.html b/TuxGuitar-abc/doc/overview-tree.html
new file mode 100644
index 0000000..70659e7
--- /dev/null
+++ b/TuxGuitar-abc/doc/overview-tree.html
@@ -0,0 +1,159 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+Class Hierarchy
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+<SCRIPT type="text/javascript">
+function windowTitle()
+{
+    parent.document.title="Class Hierarchy";
+}
+</SCRIPT>
+
+</HEAD>
+
+<BODY BGCOLOR="white" onload="windowTitle();">
+
+
+<!-- ========= START OF TOP NAVBAR ======= -->
+<A NAME="navbar_top"><!-- --></A>
+<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_top_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_top"></A>
+<!-- ========= END OF TOP NAVBAR ========= -->
+
+<HR>
+<CENTER>
+<H2>
+Hierarchy For All Packages</H2>
+</CENTER>
+<DL>
+<DT><B>Package Hierarchies:</B><DD><A HREF="org/herac/tuxguitar/io/abc/package-tree.html">org.herac.tuxguitar.io.abc</A>, <A HREF="org/herac/tuxguitar/io/abc/base/package-tree.html">org.herac.tuxguitar.io.abc.base</A></DL>
+<HR>
+<H2>
+Class Hierarchy
+</H2>
+<UL>
+<LI TYPE="circle">class java.lang.Object<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCChord</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCComponent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCComponent</B></A><UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCComponentChord.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCComponentChord</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCComponentNote.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCComponentNote</B></A></UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCEvent.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCEvent</B></A> (implements java.lang.Comparable)
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCExportSettingsDialog</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCImportSettingsDialog</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCIn [...]
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCMacro.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCMacro</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCOctaveDatabase</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="org/herac/tuxguitar/io/abc/ABCOutputStream.html" title [...]
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="org/herac/tuxguitar/io/abc/ABCSongImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCSongImporter</B></A> (implements org.herac.tuxguitar.io.base.TGLocalFileImporter)
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCSymbol.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCSymbol</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCTempo.html" title="class in org.herac.tuxguitar.io.abc.base"><B>ABCTempo</B></A><LI TYPE="circle">class org.herac.tuxguitar.io.abc.base.<A HREF="org/herac/tuxguitar/io/abc/base/ABCTempoChange.html" title="class [...]
+<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="org/herac/tuxguitar/io/abc/ABCPluginExporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCPluginExporter</B></A></UL>
+<LI TYPE="circle">class org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="org/herac/tuxguitar/io/abc/ABCPluginImporter.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCPluginImporter</B></A></UL>
+<LI TYPE="circle">class org.herac.tuxguitar.gui.system.plugins.base.TGPluginList<UL>
+<LI TYPE="circle">class org.herac.tuxguitar.io.abc.<A HREF="org/herac/tuxguitar/io/abc/ABCPluginList.html" title="class in org.herac.tuxguitar.io.abc"><B>ABCPluginList</B></A></UL>
+</UL>
+</UL>
+</UL>
+<HR>
+
+
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<A NAME="navbar_bottom"><!-- --></A>
+<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
+<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
+<TR>
+<TD COLSPAN=3 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+<A NAME="navbar_bottom_firstrow"><!-- --></A>
+<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
+  <TR ALIGN="center" VALIGN="top">
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Use</FONT> </TD>
+  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev">  <FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-files/index-1.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A> </TD>
+  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A> </TD>
+  </TR>
+</TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
+</EM>
+</TD>
+</TR>
+
+<TR>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+ PREV 
+ NEXT</FONT></TD>
+<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
+  <A HREF="index.html" target="_top"><B>FRAMES</B></A>   
+ <A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>   
+ <SCRIPT type="text/javascript">
+  <!--
+  if(window==top) {
+    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
+  }
+  //-->
+</SCRIPT>
+<NOSCRIPT>
+  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
+</NOSCRIPT>
+
+</FONT></TD>
+</TR>
+</TABLE>
+<A NAME="skip-navbar_bottom"></A>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+
+<HR>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/package-list b/TuxGuitar-abc/doc/package-list
new file mode 100644
index 0000000..2706e80
--- /dev/null
+++ b/TuxGuitar-abc/doc/package-list
@@ -0,0 +1,2 @@
+org.herac.tuxguitar.io.abc
+org.herac.tuxguitar.io.abc.base
diff --git a/TuxGuitar-abc/doc/packages.html b/TuxGuitar-abc/doc/packages.html
new file mode 100644
index 0000000..8715df8
--- /dev/null
+++ b/TuxGuitar-abc/doc/packages.html
@@ -0,0 +1,31 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!--NewPage-->
+<HTML>
+<HEAD>
+<!-- Generated by javadoc (build 1.4.2_13) on Fri Jul 15 19:51:32 GMT+01:00 2011 -->
+<TITLE>
+
+</TITLE>
+
+
+<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">
+
+
+</HEAD>
+
+<BODY BGCOLOR="white">
+
+<BR>
+
+<BR>
+
+<BR>
+<CENTER>
+The front page has been relocated.Please see:
+<BR>
+          <A HREF="index.html">Frame version</A>
+<BR>
+          <A HREF="overview-summary.html">Non-frame version.</A></CENTER>
+
+</BODY>
+</HTML>
diff --git a/TuxGuitar-abc/doc/resources/inherit.gif b/TuxGuitar-abc/doc/resources/inherit.gif
new file mode 100644
index 0000000..c814867
Binary files /dev/null and b/TuxGuitar-abc/doc/resources/inherit.gif differ
diff --git a/TuxGuitar-abc/doc/stylesheet.css b/TuxGuitar-abc/doc/stylesheet.css
new file mode 100644
index 0000000..6d31fdb
--- /dev/null
+++ b/TuxGuitar-abc/doc/stylesheet.css
@@ -0,0 +1,29 @@
+/* Javadoc style sheet */
+
+/* Define colors, fonts and other style attributes here to override the defaults */
+
+/* Page background color */
+body { background-color: #FFFFFF }
+
+/* Headings */
+h1 { font-size: 145% }
+
+/* Table colors */
+.TableHeadingColor     { background: #CCCCFF } /* Dark mauve */
+.TableSubHeadingColor  { background: #EEEEFF } /* Light mauve */
+.TableRowColor         { background: #FFFFFF } /* White */
+
+/* Font used in left-hand frame lists */
+.FrameTitleFont   { font-size: 100%; font-family: Helvetica, Arial, sans-serif }
+.FrameHeadingFont { font-size:  90%; font-family: Helvetica, Arial, sans-serif }
+.FrameItemFont    { font-size:  90%; font-family: Helvetica, Arial, sans-serif }
+
+/* Navigation bar fonts and colors */
+.NavBarCell1    { background-color:#EEEEFF;} /* Light mauve */
+.NavBarCell1Rev { background-color:#00008B;} /* Dark Blue */
+.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;}
+.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
+
+.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
+
diff --git a/TuxGuitar-abc/javadoc.xml b/TuxGuitar-abc/javadoc.xml
new file mode 100644
index 0000000..057c2d8
--- /dev/null
+++ b/TuxGuitar-abc/javadoc.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project default="javadoc">
+    <target name="javadoc">
+        <javadoc access="public" author="true" classpath="../TuxGuitar/bin:/home/peter/eclipse/plugins/org.eclipse.swt.gtk.linux.x86_3.2.0.v3232m.jar" destdir="doc" nodeprecated="false" nodeprecatedlist="false" noindex="false" nonavbar="false" notree="false" packagenames="org.herac.tuxguitar.io.abc,org.herac.tuxguitar.io.abc.base" source="1.4" sourcepath="src" splitindex="true" use="true" version="true"/>
+    </target>
+</project>
diff --git a/TuxGuitar-abc/pom.xml b/TuxGuitar-abc/pom.xml
new file mode 100644
index 0000000..a871a92
--- /dev/null
+++ b/TuxGuitar-abc/pom.xml
@@ -0,0 +1,42 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-abc</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-abc/share/META-INF/MANIFEST.MF b/TuxGuitar-abc/share/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1fb9fd7
--- /dev/null
+++ b/TuxGuitar-abc/share/META-INF/MANIFEST.MF
@@ -0,0 +1,4 @@
+Manifest-Version: 1.0
+Ant-Version: Apache Ant 1.7.1
+Created-By: 14.2-b01 (Sun Microsystems Inc.)
+
diff --git a/TuxGuitar-abc/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-abc/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..1fc2212
--- /dev/null
+++ b/TuxGuitar-abc/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,2 @@
+org.herac.tuxguitar.io.abc.ABCPluginImporter
+org.herac.tuxguitar.io.abc.ABCPluginExporter
\ No newline at end of file
diff --git a/TuxGuitar-abc/share/META-INF/tuxguitar-abc.info b/TuxGuitar-abc/share/META-INF/tuxguitar-abc.info
new file mode 100644
index 0000000..e87a44c
--- /dev/null
+++ b/TuxGuitar-abc/share/META-INF/tuxguitar-abc.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=ABC file format import-export plugin
+plugin.description=ABC file format import-export plugin
+plugin.author=Peter Grootswagers <pgrootswagers at planet.nl>
+plugin.version=1.0
diff --git a/TuxGuitar-abc/share/lang/messages.properties b/TuxGuitar-abc/share/lang/messages.properties
new file mode 100644
index 0000000..8af6b60
--- /dev/null
+++ b/TuxGuitar-abc/share/lang/messages.properties
@@ -0,0 +1,25 @@
+abc.options=Options
+abc.options.select-track.tip=Track Selection
+abc.options.select-track=Export track
+abc.options.select-all-tracks=Export all tracks
+abc.options.layout.tip=Layout Options
+abc.options.layout.enable-score=Show score
+abc.options.layout.enable-tablature=Show tablature
+abc.options.layout.enable-lyrics=Show lyrics
+abc.options.layout.enable-texts=Show texts
+abc.options.layout.enable-chord-diagrams=Show chord diagrams
+abc.options.layout.enable-chord-tracks=Use gchord syntax for chord and base tracks
+abc.options.layout.enable-drone-track=Use drone syntax for drone track
+abc.options.layout.enable-track-groups=Show grouped tracks
+abc.options.layout.enable-track-names=Show track names
+abc.options.layout.instruments-start-at-1=MIDI instruments start at 1
+abc.options.layout.measures-per-line=Measures per line (0=auto)
+abc.options.layout.chord-diagrams-track=Track with chord diagrams
+abc.options.layout.chord-track=Track with chord treble notes
+abc.options.layout.base-track=Track with chord base notes
+abc.options.layout.drone-track=Track with drone (Scottisch bagpipe)
+abc.options.measure-range.tip=Measure range
+abc.options.measure-range.from=From
+abc.options.measure-range.to=To
+abc.options.x.tip=X:
+abc.options.x.number=Index Field
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.java
new file mode 100644
index 0000000..a9896d8
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCExportSettingsDialog.java
@@ -0,0 +1,407 @@
+package org.herac.tuxguitar.io.abc;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+
+public class ABCExportSettingsDialog {
+	
+	private static final int STATUS_NONE = 0;
+	
+	private static final int STATUS_CANCELLED = 1;
+	
+	private static final int STATUS_ACCEPTED = 2;
+	
+	protected int status;
+	
+	public ABCExportSettingsDialog(){
+		super();
+	}
+	
+	public ABCSettings open() {
+		this.status = STATUS_NONE;
+		final ABCSettings settings = ABCSettings.getDefaults();
+		
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout(2, false));
+		dialog.setText(TuxGuitar.getProperty("abc.options"));
+		
+		Composite columnLeft = new Composite(dialog, SWT.NONE);
+		columnLeft.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		columnLeft.setLayout(getColumnLayout());
+		
+		Composite columnRight = new Composite(dialog, SWT.NONE);
+		columnRight.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		columnRight.setLayout(getColumnLayout());
+		
+		//------------------X SELECTION------------------
+		Group xGroup = new Group(columnLeft,SWT.SHADOW_ETCHED_IN);
+		xGroup.setLayout(new GridLayout(2,false));
+		xGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		xGroup.setText(TuxGuitar.getProperty("abc.options.x.tip"));
+		
+		final int minXNum = 1;
+		final int maxXNum = 100;
+		
+		Label xNumLabel = new Label(xGroup, SWT.NULL);
+		xNumLabel.setText(TuxGuitar.getProperty("abc.options.x.number"));
+		xNumLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Spinner xNumSpinner = new Spinner(xGroup, SWT.BORDER);
+		xNumSpinner.setLayoutData(getSpinnerData());
+		xNumSpinner.setMaximum(maxXNum);
+		xNumSpinner.setMinimum(minXNum);
+		xNumSpinner.setSelection(minXNum);
+		
+		xNumSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int fromSelection = xNumSpinner.getSelection();
+				
+				if(fromSelection < minXNum){
+					xNumSpinner.setSelection(minXNum);
+				}else if(fromSelection > maxXNum){
+					xNumSpinner.setSelection(maxXNum);
+				}
+			}
+		});
+
+		//------------------TRACK SELECTION------------------
+		Group trackGroup = new Group(columnLeft ,SWT.SHADOW_ETCHED_IN);
+		trackGroup.setLayout(new GridLayout(2,false));
+		trackGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		trackGroup.setText(TuxGuitar.getProperty("abc.options.select-track.tip"));
+		
+		final Label trackLabel = new Label(trackGroup, SWT.NULL);
+		trackLabel.setText(TuxGuitar.getProperty("abc.options.select-track") + ":");
+		trackLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Combo trackCombo = new Combo(trackGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		trackCombo.setLayoutData(getComboData());
+		for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){
+			trackCombo.add(TuxGuitar.instance().getSongManager().getTrack(number).getName());
+		}
+		trackCombo.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber() - 1);
+		trackCombo.setEnabled( settings.getTrack() != ABCSettings.ALL_TRACKS );
+		
+		final Button trackAllCheck = new Button(trackGroup,SWT.CHECK);
+		trackAllCheck.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true,2,1));
+		trackAllCheck.setText(TuxGuitar.getProperty("abc.options.select-all-tracks"));
+		trackAllCheck.setSelection( settings.getTrack() == ABCSettings.ALL_TRACKS );
+		
+		//------------------MEASURE RANGE------------------
+		Group measureGroup = new Group(columnLeft,SWT.SHADOW_ETCHED_IN);
+		measureGroup.setLayout(new GridLayout(2,false));
+		measureGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		measureGroup.setText(TuxGuitar.getProperty("abc.options.measure-range.tip"));
+		
+		final int minSelection = 1;
+		final int maxSelection = TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders();
+		
+		Label measureFromLabel = new Label(measureGroup, SWT.NULL);
+		measureFromLabel.setText(TuxGuitar.getProperty("abc.options.measure-range.from"));
+		measureFromLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Spinner measureFromSpinner = new Spinner(measureGroup, SWT.BORDER);
+		measureFromSpinner.setLayoutData(getSpinnerData());
+		measureFromSpinner.setMaximum(maxSelection);
+		measureFromSpinner.setMinimum(minSelection);
+		measureFromSpinner.setSelection(minSelection);
+		
+		Label measureToLabel = new Label(measureGroup, SWT.NULL);
+		measureToLabel.setText(TuxGuitar.getProperty("abc.options.measure-range.to"));
+		measureToLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Spinner measureToSpinner = new Spinner(measureGroup, SWT.BORDER);
+		measureToSpinner.setLayoutData(getSpinnerData());
+		measureToSpinner.setMinimum(minSelection);
+		measureToSpinner.setMaximum(maxSelection);
+		measureToSpinner.setSelection(maxSelection);
+		
+		measureFromSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int fromSelection = measureFromSpinner.getSelection();
+				int toSelection = measureToSpinner.getSelection();
+				
+				if(fromSelection < minSelection){
+					measureFromSpinner.setSelection(minSelection);
+				}else if(fromSelection > toSelection){
+					measureFromSpinner.setSelection(toSelection);
+				}
+			}
+		});
+		measureToSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int toSelection = measureToSpinner.getSelection();
+				int fromSelection = measureFromSpinner.getSelection();
+				if(toSelection < fromSelection){
+					measureToSpinner.setSelection(fromSelection);
+				}else if(toSelection > maxSelection){
+					measureToSpinner.setSelection(maxSelection);
+				}
+			}
+		});
+		
+		//------------------LAYOUT OPTIONS------------------
+		Group layoutGroup = new Group(columnRight,SWT.SHADOW_ETCHED_IN);
+		layoutGroup.setLayout(new GridLayout());
+		layoutGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		layoutGroup.setText(TuxGuitar.getProperty("abc.options.layout.tip"));
+		
+		final Button scoreCheck = new Button(layoutGroup,SWT.CHECK);
+		scoreCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		scoreCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-score"));
+		scoreCheck.setSelection(settings.isScoreEnabled());
+		
+		final Button tablatureCheck = new Button(layoutGroup,SWT.CHECK);
+		tablatureCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		tablatureCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-tablature"));
+		tablatureCheck.setSelection(settings.isTablatureEnabled());
+		
+		final Button trackGroupCheck = new Button(layoutGroup,SWT.CHECK);
+		trackGroupCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		trackGroupCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-track-groups"));
+		trackGroupCheck.setSelection(settings.isTrackGroupEnabled());
+		trackGroupCheck.setEnabled(settings.getTrack() == ABCSettings.ALL_TRACKS);
+		
+		final Button trackNameCheck = new Button(layoutGroup,SWT.CHECK);
+		trackNameCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		trackNameCheck.setSelection(settings.isTrackNameEnabled());
+		trackNameCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-track-names"));
+
+		final Button lyricsCheck = new Button(layoutGroup,SWT.CHECK);
+		lyricsCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		lyricsCheck.setSelection(settings.isLyricsEnabled());
+		lyricsCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-lyrics"));
+
+		final Button textsCheck = new Button(layoutGroup,SWT.CHECK);
+		textsCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		textsCheck.setSelection(settings.isTextEnabled());
+		textsCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-texts"));
+		
+		final Button chordDiagramsCheck = new Button(layoutGroup,SWT.CHECK);
+		chordDiagramsCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		chordDiagramsCheck.setSelection(settings.isChordDiagramEnabled());
+		chordDiagramsCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-chord-diagrams"));
+		
+		final Button chordTracksCheck = new Button(layoutGroup,SWT.CHECK);
+		chordTracksCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		chordTracksCheck.setSelection(settings.isChordEnabled());
+		chordTracksCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-chord-tracks"));
+		
+		final Button droneTrackCheck = new Button(layoutGroup,SWT.CHECK);
+		droneTrackCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		droneTrackCheck.setSelection(settings.isDroneEnabled());
+		droneTrackCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-drone-track"));
+		
+		final Button instrCheck = new Button(layoutGroup,SWT.CHECK);
+		instrCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		instrCheck.setSelection(settings.isInstrumentsStartAt1());
+		instrCheck.setText(TuxGuitar.getProperty("abc.options.layout.instruments-start-at-1"));
+		
+		final Label diagramTrackLabel = new Label(layoutGroup, SWT.NULL);
+		diagramTrackLabel.setText(TuxGuitar.getProperty("abc.options.layout.chord-diagrams-track"));
+		diagramTrackLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Combo diagramTrackCombo = new Combo(layoutGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		diagramTrackCombo.setLayoutData(getComboData());
+		diagramTrackCombo.add("");
+		for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){
+			diagramTrackCombo.add(TuxGuitar.instance().getSongManager().getTrack(number).getName());
+		}
+		diagramTrackCombo.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber());
+		diagramTrackCombo.setEnabled( settings.isChordDiagramEnabled() );
+		
+		final Label chordTrackLabel = new Label(layoutGroup, SWT.NULL);
+		chordTrackLabel.setText(TuxGuitar.getProperty("abc.options.layout.chord-track"));
+		chordTrackLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Combo chordTrackCombo = new Combo(layoutGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		chordTrackCombo.setLayoutData(getComboData());
+		chordTrackCombo.add("");
+		for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){
+			chordTrackCombo.add(TuxGuitar.instance().getSongManager().getTrack(number).getName());
+		}
+		chordTrackCombo.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber());
+		chordTrackCombo.setEnabled( settings.isChordEnabled() );
+		
+		final Label baseTrackLabel = new Label(layoutGroup, SWT.NULL);
+		baseTrackLabel.setText(TuxGuitar.getProperty("abc.options.layout.base-track"));
+		baseTrackLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Combo baseTrackCombo = new Combo(layoutGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		baseTrackCombo.setLayoutData(getComboData());
+		baseTrackCombo.add("");
+		for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){
+			baseTrackCombo.add(TuxGuitar.instance().getSongManager().getTrack(number).getName());
+		}
+		baseTrackCombo.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber());
+		baseTrackCombo.setEnabled( settings.isChordEnabled() );
+		
+		final Label droneTrackLabel = new Label(layoutGroup, SWT.NULL);
+		droneTrackLabel.setText(TuxGuitar.getProperty("abc.options.layout.drone-track"));
+		droneTrackLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Combo droneTrackCombo = new Combo(layoutGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		droneTrackCombo.setLayoutData(getComboData());
+		droneTrackCombo.add("");
+		for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){
+			droneTrackCombo.add(TuxGuitar.instance().getSongManager().getTrack(number).getName());
+		}
+		droneTrackCombo.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber());
+		droneTrackCombo.setEnabled( settings.isDroneEnabled() );
+		
+		Label measuresPerLineLabel = new Label(layoutGroup, SWT.NULL);
+		measuresPerLineLabel.setText(TuxGuitar.getProperty("abc.options.layout.measures-per-line"));
+		measuresPerLineLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Spinner measuresPerLineSpinner = new Spinner(layoutGroup, SWT.BORDER);
+		measuresPerLineSpinner.setLayoutData(getSpinnerData());
+		measuresPerLineSpinner.setMaximum(5);
+		measuresPerLineSpinner.setMinimum(-1);
+		measuresPerLineSpinner.setSelection(3);
+
+		tablatureCheck.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!tablatureCheck.getSelection()){
+					scoreCheck.setSelection(true);
+				}
+			}
+		});
+		scoreCheck.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!scoreCheck.getSelection()){
+					tablatureCheck.setSelection(true);
+				}
+			}
+		});
+		trackAllCheck.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				trackLabel.setEnabled( !trackAllCheck.getSelection() );
+				trackCombo.setEnabled( !trackAllCheck.getSelection() );
+				trackGroupCheck.setEnabled( trackAllCheck.getSelection() );
+			}
+		});
+		chordDiagramsCheck.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				diagramTrackCombo.setEnabled( chordDiagramsCheck.getSelection() );
+			}
+		});
+		chordTracksCheck.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				chordTrackCombo.setEnabled( chordTracksCheck.getSelection() );
+				baseTrackCombo.setEnabled( chordTracksCheck.getSelection() );
+			}
+		});
+		droneTrackCheck.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				droneTrackCombo.setEnabled( droneTrackCheck.getSelection() );
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true,2,1));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				ABCExportSettingsDialog.this.status = STATUS_ACCEPTED;
+				
+				settings.setX(xNumSpinner.getSelection());
+				settings.setTrack( trackAllCheck.getSelection()?ABCSettings.ALL_TRACKS:trackCombo.getSelectionIndex() + 1);
+				settings.setTrackGroupEnabled( trackAllCheck.getSelection()? trackGroupCheck.getSelection() : false);
+				settings.setTrackNameEnabled( trackNameCheck.getSelection() );
+				settings.setMeasureFrom(measureFromSpinner.getSelection());
+				settings.setMeasureTo(measureToSpinner.getSelection());
+				settings.setScoreEnabled(scoreCheck.getSelection());
+				settings.setTablatureEnabled(tablatureCheck.getSelection());
+				settings.setChordDiagramEnabled(chordDiagramsCheck.getSelection());
+				settings.setChordEnabled(chordTracksCheck.getSelection());
+				settings.setDroneEnabled(droneTrackCheck.getSelection());
+				settings.setLyricsEnabled(lyricsCheck.getSelection());
+				settings.setTextEnabled(textsCheck.getSelection());
+				settings.setMeasuresPerLine(measuresPerLineSpinner.getSelection());
+				settings.setInstrumentsStartAt1(instrCheck.getSelection());
+				if(settings.isChordDiagramEnabled()) {
+					settings.setDiagramTrack(diagramTrackCombo.getSelectionIndex());
+				}
+				else {
+					settings.setDiagramTrack(ABCSettings.NO_TRACK);
+				}
+				if(settings.isChordEnabled()) {
+					settings.setChordTrack(chordTrackCombo.getSelectionIndex());
+					settings.setBaseTrack(baseTrackCombo.getSelectionIndex());
+				}
+				else {
+					settings.setChordTrack(ABCSettings.NO_TRACK);
+					settings.setBaseTrack(ABCSettings.NO_TRACK);
+				}
+				if(settings.isDroneEnabled()) {
+					settings.setDroneTrack(droneTrackCombo.getSelectionIndex());
+				}
+				else {
+					settings.setDroneTrack(ABCSettings.NO_TRACK);
+				}
+				settings.check();
+				
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				ABCExportSettingsDialog.this.status = STATUS_CANCELLED;
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return ( ( this.status == STATUS_ACCEPTED )? settings : null );
+	}
+	
+	private GridLayout getColumnLayout(){
+		GridLayout layout = new GridLayout();
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		return layout;
+	}
+	
+	private GridData getComboData(){
+		GridData data = new GridData(SWT.FILL,SWT.CENTER,true,true);
+		data.minimumWidth = 120;
+		return data;
+	}
+	
+	private GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.CENTER,true,true);
+		data.minimumWidth = 60;
+		return data;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.java
new file mode 100644
index 0000000..e92febd
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCImportSettingsDialog.java
@@ -0,0 +1,181 @@
+package org.herac.tuxguitar.io.abc;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+
+public class ABCImportSettingsDialog {
+	
+	private static final int STATUS_NONE = 0;
+	
+	private static final int STATUS_CANCELLED = 1;
+	
+	private static final int STATUS_ACCEPTED = 2;
+	
+	protected int status;
+	
+	public ABCImportSettingsDialog(){
+		super();
+	}
+	
+	public ABCSettings open() {
+		this.status = STATUS_NONE;
+		final ABCSettings settings = ABCSettings.getDefaults();
+		
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout(2, false));
+		dialog.setText(TuxGuitar.getProperty("abc.options"));
+		
+		Composite columnLeft = new Composite(dialog, SWT.NONE);
+		columnLeft.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		columnLeft.setLayout(getColumnLayout());
+		
+		Composite columnRight = new Composite(dialog, SWT.NONE);
+		columnRight.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		columnRight.setLayout(getColumnLayout());
+		
+		//------------------X SELECTION------------------
+		Group xGroup = new Group(columnLeft,SWT.SHADOW_ETCHED_IN);
+		xGroup.setLayout(new GridLayout(2,false));
+		xGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		xGroup.setText(TuxGuitar.getProperty("abc.options.x.tip"));
+		
+		final int minXNum = 1;
+		final int maxXNum = 100;
+		
+		Label xNumLabel = new Label(xGroup, SWT.NULL);
+		xNumLabel.setText(TuxGuitar.getProperty("abc.options.x.number"));
+		xNumLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Spinner xNumSpinner = new Spinner(xGroup, SWT.BORDER);
+		xNumSpinner.setLayoutData(getSpinnerData());
+		xNumSpinner.setMaximum(maxXNum);
+		xNumSpinner.setMinimum(minXNum);
+		xNumSpinner.setSelection(minXNum);
+		
+		xNumSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int fromSelection = xNumSpinner.getSelection();
+				
+				if(fromSelection < minXNum){
+					xNumSpinner.setSelection(minXNum);
+				}else if(fromSelection > maxXNum){
+					xNumSpinner.setSelection(maxXNum);
+				}
+			}
+		});
+
+		//------------------LAYOUT OPTIONS------------------
+		Group layoutGroup = new Group(columnRight,SWT.SHADOW_ETCHED_IN);
+		layoutGroup.setLayout(new GridLayout());
+		layoutGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		layoutGroup.setText(TuxGuitar.getProperty("abc.options.layout.tip"));
+		
+		final Button trackNameCheck = new Button(layoutGroup,SWT.CHECK);
+		trackNameCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		trackNameCheck.setSelection(settings.isTrackNameEnabled());
+		trackNameCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-track-names"));
+
+		final Button lyricsCheck = new Button(layoutGroup,SWT.CHECK);
+		lyricsCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		lyricsCheck.setSelection(settings.isLyricsEnabled());
+		lyricsCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-lyrics"));
+
+		final Button textsCheck = new Button(layoutGroup,SWT.CHECK);
+		textsCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		textsCheck.setSelection(settings.isTextEnabled());
+		textsCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-texts"));
+		
+		final Button chordDiagramsCheck = new Button(layoutGroup,SWT.CHECK);
+		chordDiagramsCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		chordDiagramsCheck.setSelection(settings.isChordDiagramEnabled());
+		chordDiagramsCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-chord-diagrams"));
+		
+		final Button chordTracksCheck = new Button(layoutGroup,SWT.CHECK);
+		chordTracksCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		chordTracksCheck.setSelection(settings.isChordEnabled());
+		chordTracksCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-chord-tracks"));
+		
+		final Button droneTrackCheck = new Button(layoutGroup,SWT.CHECK);
+		droneTrackCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		droneTrackCheck.setSelection(settings.isDroneEnabled());
+		droneTrackCheck.setText(TuxGuitar.getProperty("abc.options.layout.enable-drone-track"));
+		
+		final Button instrCheck = new Button(layoutGroup,SWT.CHECK);
+		instrCheck.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		instrCheck.setSelection(settings.isInstrumentsStartAt1());
+		instrCheck.setText(TuxGuitar.getProperty("abc.options.layout.instruments-start-at-1"));
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true,2,1));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				ABCImportSettingsDialog.this.status = STATUS_ACCEPTED;
+				
+				settings.setX(xNumSpinner.getSelection());
+				settings.setTrackNameEnabled( trackNameCheck.getSelection() );
+				settings.setChordDiagramEnabled(chordDiagramsCheck.getSelection());
+				settings.setChordEnabled(chordTracksCheck.getSelection());
+				settings.setDroneEnabled(droneTrackCheck.getSelection());
+				settings.setLyricsEnabled(lyricsCheck.getSelection());
+				settings.setTextEnabled(textsCheck.getSelection());
+				settings.setInstrumentsStartAt1(instrCheck.getSelection());
+				settings.check();
+				
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				ABCImportSettingsDialog.this.status = STATUS_CANCELLED;
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return ( ( this.status == STATUS_ACCEPTED )? settings : null );
+	}
+	
+	private GridLayout getColumnLayout(){
+		GridLayout layout = new GridLayout();
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		return layout;
+	}
+	
+	private GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.CENTER,true,true);
+		data.minimumWidth = 60;
+		return data;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCInputStream.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCInputStream.java
new file mode 100644
index 0000000..8b146c3
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCInputStream.java
@@ -0,0 +1,278 @@
+package org.herac.tuxguitar.io.abc;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.herac.tuxguitar.io.abc.base.ABCSong;
+import org.herac.tuxguitar.io.abc.base.ABCTimeSignature;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+
+public class ABCInputStream {
+	
+	private static final int OUTSIDE = 0;
+	private static final int SKIPX = 1;
+	private static final int INHEAD = 2;
+	private static final int INBODY = 3;
+	private static final int EOF = 4;
+	private static final int CR = '\r';
+	private static final int LF = '\n';
+	private static final int TAB = '\t';
+	private static final int EMPTY = -1;
+	private ABCSong song;
+	private InputStream stream;
+	private int state;
+	private String line;
+	private int putback;
+	private ABCSettings settings;
+	
+	public ABCInputStream(InputStream stream,ABCSettings settings){
+		this.stream            = stream;
+		this.putback           = EMPTY;
+		this.settings=settings==null?new ABCSettings():settings;
+	}
+
+	public ABCSong readSong() throws TGFileFormatException{
+		boolean firstMusicLine=false;
+		this.song = new ABCSong();
+		int skip=settings.getX();
+		this.song.setInstrumentOffset(settings.isInstrumentsStartAt1()?1:0);
+		this.song.initHead();
+		this.state = OUTSIDE;
+		while(this.state==SKIPX || this.state == OUTSIDE) {
+			if(this.readLine()) {
+				if(this.line.startsWith("X:")) {
+					this.state=SKIPX;
+					if(--skip == 0) {
+						this.state = INHEAD;
+						this.song.setX(Integer.parseInt(line.substring(2).trim(), 10));
+					}
+				}
+				else { 
+					if(this.state==OUTSIDE) {
+						if(this.line.startsWith("U:")) this.song.addRedefinable(line.substring(2).trim());			
+						else if(this.line.startsWith("m:")) this.song.addMacro(line.substring(2).trim());
+					}
+				}
+			}
+			else
+				this.state = EOF;
+		}
+		while(this.state == INHEAD || this.state == INBODY) {
+			if(this.readLine()) {
+				if(this.line.length()==0) this.state = OUTSIDE;
+				else if(this.line.startsWith("%%")) this.preprocessor();
+				else {
+					if(this.line.indexOf('%')>=0) this.removeComment();
+					/*
+					  A:  (Geographical) Area : eg A:Brittany or A:Sussex
+					  B:  Book, eg B:Encyclopeadia Blowzabellica or B:O'Neill's
+					  C:  Composer eg C:Andy Cutting or C:Trad
+					  D:  Discography eg D:New Victory Band, One More Dance And Then
+					  F:  File Name eg http://www.lesession.co.uk/woodenflute.abc
+					  G:  Group eg G:Flute - this is used for the purpose of indexing tunes in software, NOT for naming the group / band you acquired the tune from (which should be recorded in the S: source field).
+					  H:  History - Multiple H: fields may be used as needed to record text about the history of the tune. (Many people (including me) seem to tend to forget about the H: field and instead always put information like that in the N: notes field instead.)
+					  I:  Information - used by certain software packages, NOT for historical information or notes (which should be recorded in the H: or N: fields).
+					  K:  Key -see part one of this tutorial for further details
+					  L:  Default note length -see part one of this tutorial for further details
+					  M:  Meter :see part one of this tutorial for further details
+					  N:  Notes : Multiple N: fields can be used as needed to record detailed text notes about, well, just about anything you want to say about the tune that won't go in any of the other fields really ...
+					  O:  (Geographical) Origin : eg O:Irish or O:Swedish
+					  P:  Parts -see below for further details
+					  Q:  Tempo -see part one of this tutorial for further details
+					  R:  Rhythm -see part one of this tutorial for further details
+					  S:  Source - where you got the tune from eg S:Olio or S:Dave Praties
+					  T:  Title -see part one of this tutorial for further details
+					  U:  User defined symbol
+					  W:  Words -see below for further details
+					  X:  Tune reference number -see part one of this tutorial for further details
+					  Z:  Transcription note - the identity of the transcriber or the source of the transcription, eg Z:Steve Mansfield
+					  d:  body Decorations. d:!pp! * * !mf! * !ff!
+					  s:  body inline symbols. s:+pp+ * * +mf+ * +ff+
+					  w:  body inline lyrics. w:Help! I need...
+					 */	
+					if(this.line.startsWith("A:")) this.song.setArea(line.substring(2).trim());
+					else if(this.line.startsWith("B:")) this.song.setBook(line.substring(2).trim());
+					else if(this.line.startsWith("C:")) this.song.setComponist(line.substring(2).trim());
+					else if(this.line.startsWith("D:")) this.song.setDiscography(line.substring(2).trim());
+					else if(this.line.startsWith("E:")) { /* do nothing */ }
+					else if(this.line.startsWith("F:")) this.song.setFilename(line.substring(2).trim());
+					else if(this.line.startsWith("G:")) this.song.setGroup(line.substring(2).trim());
+					else if(this.line.startsWith("H:")) this.song.addHistory(line.substring(2).trim());
+					else if(this.line.startsWith("I:")) this.song.setInformation(line.substring(2).trim());
+					else if(this.line.startsWith("J:")) { /* do nothing */ }
+					else if(this.line.startsWith("K:")) {
+						this.song.setKey(line.substring(2).trim());
+						this.state = INBODY;
+						firstMusicLine=true;
+					}
+					else if(this.line.startsWith("L:")) this.setDefaultNoteLength(line.substring(2).trim());
+					else if(this.line.startsWith("M:")) this.setTimeSignature(line.substring(2).trim());
+					else if(this.line.startsWith("N:")) this.song.addNote(line.substring(2).trim());
+					else if(this.line.startsWith("O:")) this.song.setOrigin(line.substring(2).trim());
+					else if(this.line.startsWith("P:")) {
+						if(this.state == INHEAD)
+							this.song.setParts(line.substring(2).trim());
+						else
+							this.song.setPart(line.substring(2).trim());
+					}
+					else if(this.line.startsWith("Q:")) this.song.setTempo(line.substring(2).trim());
+					else if(this.line.startsWith("R:")) this.song.setRhythm(line.substring(2).trim());
+					else if(this.line.startsWith("S:")) this.song.setSource(line.substring(2).trim());
+					else if(this.line.startsWith("T:")) this.song.setTitle(line.substring(2).trim());
+					else if(this.line.startsWith("U:")) this.song.addRedefinable(line.substring(2).trim());
+					else if(this.line.startsWith("V:")) {
+						if(this.state ==  INHEAD)
+							this.song.addVoice(line.substring(2).trim());
+						else
+							this.song.setVoice(line.substring(2).trim());
+					}
+					else if(this.line.startsWith("W:")) this.song.addWords(line.trim());
+					else if(this.line.startsWith("X:")) { /* do nothing */ }
+					else if(this.line.startsWith("Y:")) { /* do nothing */ }
+					else if(this.line.startsWith("Z:")) this.song.setTranscriptor(line.substring(2).trim());
+					else if(this.line.startsWith("m:")) this.song.addMacro(line.substring(2).trim());
+					else if(this.line.startsWith("r:")) this.song.addRemarks(line.substring(2).trim());
+					else if(this.state == INBODY) { 
+						if(firstMusicLine) this.song.initBody();
+						firstMusicLine=false;
+						if(this.line.startsWith("d:")) this.song.addSymbols(line.substring(2).trim());
+						else if(this.line.startsWith("s:")) this.song.addSymbols(line.substring(2).trim());
+						else if(this.line.startsWith("w:")) this.song.addLyrics(line.substring(2).trim());
+						else if(this.line.matches("[a-z]:.*")) { /* do nothing */ }
+						else {
+							// must have a line with music here...
+							this.song.addMusic(line+"  ");
+						}
+					}
+				}
+			}
+			else
+				this.state = EOF;
+		}
+		
+		this.close();
+		if(this.song.getEvents()==null) {
+			throw new TGFileFormatException("no music body");
+		}
+		this.song.postprocessor();
+		return this.song;
+	}
+
+	private void setDefaultNoteLength(String line) {
+		if(line.matches("[0-9]+/[0-9]+.*")) {
+			int numerator=0,denominator=0,i;
+			for(i=0;line.charAt(i)!='/';i++) {
+				numerator=numerator*10+line.charAt(i)-'0';
+			}
+			for(i++;i<line.length() && "0123456789".indexOf(line.charAt(i))>=0;i++) {
+				denominator=denominator*10+line.charAt(i)-'0';
+			}
+			this.song.setDefaultNoteLength(new ABCTimeSignature(numerator,denominator,false));
+		}
+		else
+			this.song.setDefaultNoteLength(new ABCTimeSignature(1,4,false));
+	}
+
+	private void setTimeSignature(String line) {
+		if(line.matches("[0-9]+/[0-9]+.*")) {
+			int numerator=0,denominator=0,i;
+			for(i=0;line.charAt(i)!='/';i++) {
+				numerator=numerator*10+line.charAt(i)-'0';
+			}
+			for(i++;i<line.length() && "0123456789".indexOf(line.charAt(i))>=0;i++) {
+				denominator=denominator*10+line.charAt(i)-'0';
+			}
+			this.song.setTimeSignature(new ABCTimeSignature(numerator,denominator,true));
+			return;
+		}
+		if(line.equals("C")) {
+			this.song.setTimeSignature(new ABCTimeSignature(4,4,true));
+			return;
+		}
+		if(line.equals("C|")) {
+			this.song.setTimeSignature(new ABCTimeSignature(2,2,true));
+			return;
+		}
+		this.song.setTimeSignature(new ABCTimeSignature(4,4,true));
+	}
+
+	private void removeComment() {
+		int q=0;
+		for(int i=0;i<line.length();i++) {
+			switch(line.charAt(i)) {
+			case '"':
+				if(q=='"') q=0; else if(q==0) q='"';
+				break;
+			case '\'':
+				if(q=='\'') q=0; else if(q==0) q='\'';
+				break;
+			case '%':
+				if(q==0) {
+					line=line.substring(0,i);
+					return;
+				}
+				break;
+			}
+		}
+	}
+
+	private void preprocessor() {
+		int i=line.indexOf('%', 2);
+		if(i>0) line=line.substring(0, i).replaceAll("\\s+", " ").trim();
+		if(line.startsWith("%%MIDI ")) song.midiCommand(line);
+		else song.directive(line);
+	}
+
+	private boolean readLine() {
+		this.line="";
+		int b=this.putback==EMPTY?this.readByte():this.putback;
+		if(b<=0) return false;
+		boolean hadCR=false;
+		this.putback=EMPTY;
+		while(b!=0 && b!=LF) {
+			switch(b) {
+			case CR:
+				hadCR=true;
+				break;
+			case TAB:
+				b=' ';
+			default:
+				this.line+=(char)b;
+				hadCR=false;
+				break;
+			}
+			b=this.readByte();
+			if(hadCR && b!=LF) {
+				this.putback=b;
+				b=LF;
+			}
+			if(b==LF && line.endsWith("\\")) {
+				this.line=this.line.substring(0, this.line.length()-1)+' ';
+				if(this.putback!=EMPTY) { 
+					this.line+=(char)this.putback;
+					this.putback=EMPTY;
+				}
+			}
+		}
+		while(this.line.endsWith(" "))
+			this.line=this.line.substring(0, this.line.length()-1);
+		return true;
+	}
+
+	protected int readByte(){
+		try {
+			return this.stream.read();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	protected void close(){
+		try {
+			this.stream.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCOutputStream.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCOutputStream.java
new file mode 100644
index 0000000..36d051b
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCOutputStream.java
@@ -0,0 +1,1189 @@
+package org.herac.tuxguitar.io.abc;
+
+import java.io.OutputStream;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.io.abc.base.ABCChord;
+import org.herac.tuxguitar.player.base.MidiInstrument;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+
+public class ABCOutputStream {
+	
+	private static final String ABC_VERSION = "ABC standard 2.0 & ABCplus-1.1.0";
+	private static final String[] ABC_KEY_SIGNATURES = new String[]{ "C","G","D","A","E","B","F#","C#","F","Bb","Eb","Ab", "Db", "Gb","Cb" };
+	private TGSongManager manager;
+	private TGChannel channelAux;
+	private PrintWriter writer;
+	private ABCSettings settings;
+	private int barsperstaff;
+	private int instrumentoffset;
+	private int[] droneparm;
+	private int from;
+	private int to;
+	private int measures;
+	private int diagramt;
+	private int chordt;
+	private int baset;
+	private String vId;
+	private String wline;
+	private String line;
+	private int dronet;
+	private String gchord;
+	private boolean droneon;
+	private String drum;
+	private int enterstogo;
+	private int enters;
+	private int times;
+	private String triol;
+	
+	public ABCOutputStream(OutputStream stream,ABCSettings settings){
+		this.writer = new PrintWriter(stream);
+		this.settings = settings;
+		this.instrumentoffset=(settings==null) ? 1 : settings.isInstrumentsStartAt1() ? 1 : 0;
+	}
+	
+	public void writeSong(TGSong song){
+		this.manager = new TGSongManager();
+		this.manager.setSong(song);
+		this.channelAux = null;
+		
+		this.addVersion();
+		this.addPaper(song);
+		this.addSongDefinitions(song);
+		this.addSong(song);
+		
+		this.writer.flush();
+		this.writer.close();
+	}
+	
+	private void addVersion(){
+		this.writer.println("% ABC version " + ABC_VERSION + " with ABCPlus");
+	}
+	
+	private void addPaper(TGSong song){
+		this.writer.println("%%scale 0.66");
+	}
+	
+	private void addSongDefinitions(TGSong song){
+		String[] line={ "X:1" };
+		if(song.getComments()!=null) line=song.getComments().split("\\n+");
+		String s="X:1";
+		for(int i=0;i<line.length;i++) {
+			if(line[i].startsWith("X:")) {
+				s=line[i];
+				break;
+			}
+		}
+		this.writer.println(s);
+		this.writer.println("%%exprabove 0");
+		this.writer.println("%%exprbelow 1");
+		this.diagramt=this.settings.getDiagramTrack();
+		this.chordt=this.settings.getChordTrack();
+		this.baset=this.settings.getBaseTrack();
+		this.dronet=this.settings.getDroneTrack();
+		if(this.diagramt==ABCSettings.AUTO_TRACK 
+		|| this.chordt==ABCSettings.AUTO_TRACK
+		|| this.baset==ABCSettings.AUTO_TRACK
+		|| this.dronet==ABCSettings.AUTO_TRACK) {
+			for(int t=0;t<song.countTracks();t++) {
+				TGTrack track = song.getTrack(t);
+				int tnum=track.getNumber();
+				if(this.settings.getTrack() == ABCSettings.ALL_TRACKS || this.settings.getTrack() == tnum) {
+					String id = track.getName();
+					
+					if((tnum==this.diagramt+1 || id.indexOf('\t')<0) && !isPercussionTrack(track)) {
+						for(int j=0;j<song.countTracks();j++) {
+							TGTrack buddy=song.getTrack(j);
+							if(this.chordt==j+1 || buddy.getName().matches(id+"\tchords")) {
+								if(this.chordt==ABCSettings.AUTO_TRACK) this.chordt=j+1;
+								if(this.diagramt==ABCSettings.AUTO_TRACK) this.diagramt=t+1;
+							}
+							if(this.baset==j+1 || buddy.getName().matches(id+"\tbase")) {
+								if(this.baset==ABCSettings.AUTO_TRACK) this.baset=j+1;
+								if(this.diagramt==ABCSettings.AUTO_TRACK) this.diagramt=t+1;
+							}
+							if(this.dronet==j+1 || buddy.getName().matches(id+"\tdrone")) {
+								if(this.dronet==ABCSettings.AUTO_TRACK) this.dronet=j+1;
+							}
+						}
+					}
+				}
+			}
+		}
+		if(this.chordt==ABCSettings.AUTO_TRACK) this.chordt=this.baset;
+		if(this.baset==ABCSettings.AUTO_TRACK) this.baset=this.chordt;
+		if(this.chordt==ABCSettings.NO_TRACK) this.baset=ABCSettings.NO_TRACK;
+		if(this.baset==ABCSettings.NO_TRACK) this.chordt=ABCSettings.NO_TRACK;
+		this.measures=song.countMeasureHeaders();
+		this.from=ABCSettings.FIRST_MEASURE;
+		this.to=ABCSettings.LAST_MEASURE;
+		if(this.settings.getMeasureFrom() != ABCSettings.FIRST_MEASURE || this.settings.getMeasureTo() != ABCSettings.LAST_MEASURE) {
+			this.from=this.settings.getMeasureFrom();
+			to=this.settings.getMeasureTo();
+		}
+		if(this.from==ABCSettings.FIRST_MEASURE) this.from=0;
+		if(this.to==ABCSettings.LAST_MEASURE) to=measures-1;
+		if(this.from>measures-1) this.from=measures-1;
+		if(this.to<this.from) this.to=this.from;
+		this.measures=this.to-this.from+1;
+		this.barsperstaff=this.settings.getMeasuresPerLine();
+		if(this.barsperstaff==ABCSettings.AUTO_MEASURES) {
+			this.barsperstaff=5;
+			while((measures % this.barsperstaff) > 0) --this.barsperstaff;
+			if(this.barsperstaff<2) {
+				if((measures % 3)<2) this.barsperstaff=3;
+				else this.barsperstaff=4;
+			}
+		}
+		this.writer.println("%%%barsperstaff "+this.barsperstaff);
+		if(song.getName()!=null && song.getName().trim().length()>0)               this.writer.println("T:"+song.getName());
+		if(song.getAlbum()!=null && song.getAlbum().trim().length()>0)             this.writer.println("O:"+song.getAlbum());
+		if(song.getAuthor()!=null && song.getAuthor().trim().length()>0)           this.writer.println("A:"+song.getAuthor());
+		if(song.getTranscriber()!=null && song.getTranscriber().trim().length()>0) this.writer.println("Z:"+song.getTranscriber());
+		TGTimeSignature ts = song.getMeasureHeader(0).getTimeSignature();
+		int n=ts.getNumerator();
+		int d=ts.getDenominator().getValue();
+		if(n==4 && d==4) this.writer.println("M:C");
+		else if(n==2 && d==2) this.writer.println("M:C|");
+		else this.writer.println("M:"+n+"/"+d);
+		this.writer.println("L:1/8");
+		n=song.getMeasureHeader(0).getTempo().getValue();
+		this.writer.println("Q:1/4="+n);
+		int trackCount = 0;
+		for(int i = 0; i < song.countTracks(); i ++) {
+			TGTrack track = song.getTrack(i);
+			String id = handleId(track.getName());
+			if(id.indexOf('\t')<0 && !isPercussionTrack(track) && i!=this.chordt-1 && i!=this.baset-1 && i!=this.dronet-1)
+				++trackCount;
+		}
+		if(trackCount > 1 && this.settings.getTrack() == ABCSettings.ALL_TRACKS) {
+			for(int i = 0; i < song.countTracks(); i ++) {
+				TGTrack track = song.getTrack(i);
+				String id = handleId(track.getName());
+				if(id.indexOf('\t')<0 && !isPercussionTrack(track) && i!=this.chordt-1 && i!=this.baset-1 && i!=this.dronet-1)
+					this.writer.println("V:"+id.replaceAll("\\s+","_")+" clef="+clefname(track.getMeasure(0).getClef()));
+			}
+			if(this.settings.isTrackGroupEnabled()) {
+				String staves="%%staves ";
+				String stave2="";
+				String stave3="";
+				int v=0;
+				for(int i = 0; i < song.countTracks(); i ++) {
+					TGTrack track = song.getTrack(i);
+					String id = handleId(track.getName());
+					int clef=track.getMeasure(0).getClef();
+					if(id.indexOf('\t')<0 && !isPercussionTrack(track) && i!=this.chordt-1 && i!=this.baset-1 && i!=this.dronet-1) {
+						++v;
+						if(v==1 && clef==TGMeasure.CLEF_TREBLE) staves+="1 ";
+						else if(clef==TGMeasure.CLEF_TREBLE) stave2+=v+" ";
+						else if(clef==TGMeasure.CLEF_BASS) stave3+=v+" ";
+						else staves+=v+" ";
+					}
+				}
+				if(stave2.trim().split(" ").length>1) stave2="("+stave2.trim()+")";
+				if(stave3.trim().split(" ").length>1) stave3="("+stave3.trim()+")";
+				if(stave2.length()>0 && stave3.length()>0) staves+="{"+stave2.trim()+" "+stave3.trim()+"}";
+				else staves+=(stave2+stave3).trim();
+				this.writer.println(staves);
+			}
+		}
+		if(song.getMeasureHeader(0).getTripletFeel()!=TGMeasureHeader.TRIPLET_FEEL_NONE)
+			this.writer.println("R:hornpipe");
+		this.writer.println("K:"+ABC_KEY_SIGNATURES[song.getTrack(0).getMeasure(0).getKeySignature()]);
+		int v=0;
+		TGBeat[] gchordBeat=new TGBeat[2];
+		for(int i = 0; i < song.countTracks(); i ++) {
+			TGTrack track = song.getTrack(i);
+			String id = handleId(track.getName());
+			int tnum=track.getNumber();
+			if(id.indexOf('\t')>0) {
+				for(int j=0;j<song.countTracks();j++) {
+					TGTrack buddy=song.getTrack(j);
+					if(id.matches(buddy.getName()+"\t.*")) {
+						tnum=buddy.getNumber();
+						break;
+					}
+				}
+			}
+			if(this.settings.getTrack() == ABCSettings.ALL_TRACKS || this.settings.getTrack() == tnum){
+				TGChannel channel = getChannel(track);
+				int instrument=channel.getProgram()+this.instrumentoffset;
+				String instrName=MidiInstrument.INSTRUMENT_LIST[instrument-this.instrumentoffset].getName();
+				int pan=channel.getBalance();
+				if(isPercussionTrack(track)) {
+					TGBeat beat=getFirstBeat(track);
+					if(beat==null) {
+						this.writer.println("%%MIDI drumoff");
+						this.drum="";
+					}
+					else {
+						this.writer.println("%%MIDI drumon");
+						this.drum=getABCDrum(track, beat.getMeasure().getNumber());
+						this.writer.println("%%MIDI drum "+this.drum);
+					}
+				}
+				else if(id.indexOf('\t')<0 && this.chordt!=i+1 && this.baset!=i+1 && this.dronet!=i+1) {
+					++v;
+					this.writer.println("%%MIDI voice "+id.replaceAll("\\s+","_")+" instrument="+instrument+" % "+instrName+" pan="+pan);
+				}
+				else if(this.dronet==i+1 || id.endsWith("\tdrone")) {
+					TGBeat beat=getFirstBeat(track);
+					if(beat!=null) {
+						this.droneparm=getDroneParm(beat);
+						this.droneparm[4]=instrument;
+						String drone=instrument+"        "+droneparm[0]+"   "+droneparm[1]+"   "+droneparm[2]+"   "+droneparm[3];
+						this.writer.println("%      drone <instrument> <pitch1> <pitch2> <vol1> <vol2>");
+						this.writer.println("%%MIDI drone "+drone+" % "+instrName);
+						this.droneon=beat.getMeasure().getNumber()<2;
+						if(this.droneon)
+							this.writer.println("%%MIDI droneon");
+						else
+							this.writer.println("%%MIDI droneoff");
+					}
+				}
+				else if(this.chordt==i+1 || id.endsWith("\tchords")) {
+					gchordBeat[0]=getFirstBeat(track);
+					if(gchordBeat[0]!=null) {
+						int[] p=getDroneParm(gchordBeat[0]);
+						this.writer.println("%%MIDI chordprog "+instrument+" % "+instrName);
+						this.writer.println("%%MIDI chordvol "+p[2]);
+					}
+				}
+				else if(this.baset==i+1 || id.endsWith("\tbase")) {
+					gchordBeat[1]=getFirstBeat(track);
+					if(gchordBeat[1]!=null) {
+						int[] p=getDroneParm(gchordBeat[1]);
+						this.writer.println("%%MIDI bassprog "+instrument+" % "+instrName);
+						this.writer.println("%%MIDI bassvol "+p[2]);
+					}
+				}
+			}
+		}
+		s=null;
+		v=-1;
+		boolean gchords=false;
+		for(int i=0;i<2;i++) {
+			if(gchordBeat[i]!=null) {
+				gchords=true;
+				if(v<0) v=i;
+				else if(gchordBeat[i].getMeasure().getNumber()<gchordBeat[v].getMeasure().getNumber()) v=i;
+				if(gchordBeat[i].getMeasure().getNumber()<2)
+					s="%%MIDI gchordon";
+			}
+		}
+		if(s==null && gchords) s="%%MIDI gchordoff";
+		this.gchord=null;
+		if(v>=0) {
+			this.gchord=getABCGchord(song, gchordBeat[v].getMeasure().getNumber());
+		}
+		if(this.gchord!=null) this.writer.println("%%MIDI gchord "+this.gchord);
+		if(s!=null) this.writer.println(s);
+	}
+	
+	private String handleId(String name) {
+		if(name.indexOf('\t')<0) return name;
+		if(this.chordt==ABCSettings.NO_TRACK) name=name.replaceAll("\tchords", " chords");
+		if(this.baset==ABCSettings.NO_TRACK) name=name.replaceAll("\tbase", " base");
+		if(this.dronet==ABCSettings.NO_TRACK) name=name.replaceAll("\tdrone", " drone");
+		return name;
+	}
+
+	private String getABCGchord(TGSong song, int m) {
+		TGMeasure chordm=song.getTrack(chordt-1).getMeasure(m-1);
+		TGMeasure basem=song.getTrack(baset-1).getMeasure(m-1);
+		int clen=chordm.countBeats();
+		int blen=basem.countBeats();
+		char[] gc=new char[clen+blen];
+		int[] gn=new int[clen+blen];
+		int[] gd=new int[clen+blen];
+		int cb=0;
+		int bb=0;
+		int kgv=1;
+		int sx=0;
+		while(cb<clen || bb<blen) {
+			TGBeat beatc=null;
+			TGBeat beatb=null;
+			char b=0;
+			char c=0;
+			String db="";
+			String dc="";
+			int cticks=0;
+			int bticks=0;
+			if(cb<chordm.countBeats()) beatc=chordm.getBeat(cb);
+			if(bb<basem.countBeats()) beatb=basem.getBeat(bb);
+			if(beatb!=null && (beatc==null || beatb.getStart()<=beatc.getStart())) {
+				int n=0;
+				for(int v=0;v<beatb.countVoices();v++) n+=beatb.getVoice(v).countNotes();
+				TGDuration duration = beatb.getVoice(0).getDuration();
+				bticks=(int) duration.getTime();
+				db=getABCDuration(duration);
+				if(n==0) b='z';
+				else {
+					if(chordt==baset && n>3) b='f';
+					else if(chordt!=baset) { 
+						if(n==1) b=getABCGchordNote(song,beatb);
+						else	 b='f';
+						if(b=='G') b='f';
+					}
+				}
+				++bb;
+			}
+			if(beatc!=null && (beatb==null || beatc.getStart()<=beatb.getStart())) {
+				int n=0;
+				for(int v=0;v<beatc.countVoices();v++) n+=beatc.getVoice(v).countNotes();
+				TGDuration duration = beatc.getVoice(0).getDuration();
+				cticks=(int) duration.getTime();
+				dc=getABCDuration(duration);
+				if(n==0) c='z';
+				else {
+					if(chordt==baset && n>3)  c='b';
+					else if(chordt!=baset) {
+						if(n==1) c=getABCGchordNote(song,beatc);
+						else	 c='c';
+					}
+				}
+				++cb;
+			}
+			if(b>0 && c>0) {
+				if(b=='z') gc[sx]=c;
+				else if(c=='z') gc[sx]=b;
+				else if(cticks>bticks) gc[sx]=c;
+				else if(bticks>cticks) gc[sx]=b;
+				else gc[sx]='b';
+			}
+			else if(b>0) gc[sx]=b;
+			else if(c>0) gc[sx]=c;
+			else gc[sx]='z';
+			String d="";
+			if(b>0 && c>0) {
+				if(cticks>bticks) d=dc;
+				else d=db;
+			}
+			else if(b>0) d=db;
+			else if(c>0) d=dc;
+			if(d.indexOf('/')<0) {
+				gd[sx]=1;
+				if(d.length()==0) gn[sx]=1;
+				else gn[sx]=Integer.parseInt(d, 10);
+			}
+			else {
+				int i=d.indexOf('/');
+				int q=2;
+				int n=1;
+				if(i>0) n=Integer.parseInt(d.substring(0,i), 10);
+				if(i<d.length()-1) q=Integer.parseInt(d.substring(i+1), 10);
+				kgv=getKgv(kgv,q);
+				gn[sx]=n;
+				gd[sx]=q;
+			}
+			++sx;
+		}
+		if(kgv>1) {
+			while(kgv>8) {
+				kgv/=2;
+			}
+			for(int i=0;i<sx;i++) {
+				if(((gn[i]*kgv) % gd[i])==0) {
+					gn[i]=(gn[i]*kgv)/gd[i];
+					gd[i]=1;
+				}
+				else {
+					gn[i]=gn[i]*kgv;
+					while((gn[i]&1)==0 && (gd[i]&1)==0) {
+						gn[i]/=2;
+						gd[i]/=2;
+					}
+				}
+			}
+		}
+		String s="";
+		for(int i=0;i<sx;i++) {
+			s+=gc[i];
+			if(gn[i]>1) s+=gn[i];
+			if(gd[i]>1) {
+				s+='/';
+				if(gd[i]>2) s+=gd[i];
+			}
+		}
+		if(s.matches("(./)+")) s=s.replaceAll("/","");
+		for(int i=1;i<10;i++)
+			if(s.matches("(."+i+")+")) s=s.replaceAll(""+i,"");
+		if(s.matches("z[z0-9]*")) return "";
+		return s;
+	}
+
+	private int getKgv(int kgv, int q) {
+		return kgv * q / getGgd(kgv,q);
+	}
+
+	private int getGgd(int p, int q) {
+		int m=p;
+		int n=q;
+		if(m<n) {
+			m=q;
+			n=p;
+		}
+		int r=m%n;
+		while(r>0) {
+			m=n;
+			n=r;
+			r=m%n;
+		}
+		return n;
+	}
+
+	private char getABCGchordNote(TGSong song, TGBeat beat) {
+		char c='f';
+		TGChord chord=findChord(song,beat);
+		if(chord!=null) {
+			String name=chord.getName().replaceAll("[^ -~]", " ").trim();
+			while(name.length()>0 && "CDEFGAB".indexOf(name.charAt(0))<0) name=name.substring(1);
+			if(name.length()>0) {
+				name=name.split("\\s+")[0];
+				ABCChord abcChord=new ABCChord(name); 
+				TGNote note=null;
+				for(int v=0;v<beat.countVoices();v++) {
+					for(int i=0;i<beat.getVoice(v).countNotes();i++)
+						note=beat.getVoice(v).getNote(i);
+				}
+				if(note!=null) {
+					int value=beat.getMeasure().getTrack().getString(note.getString()).getValue() + note.getValue();
+					c=abcChord.getGchordChar(value+24);
+				}
+			}
+		}
+		return c;
+	}
+
+	private TGChord findChord(TGSong song, TGBeat beat) {
+		TGChord chord=null;
+		long start=beat.getStart();
+		int m=beat.getMeasure().getNumber();
+		for(int x=m;x>0;x--) {
+			for(int t=0;t<song.countTracks();t++) {
+				TGMeasure measure=song.getTrack(t).getMeasure(x-1);
+				for(int b=0;b<measure.countBeats();b++) {
+					TGBeat bx=measure.getBeat(b);
+					if(x==m && bx.getStart()>start) break;
+					if(bx.getChord()!=null) {
+						chord=bx.getChord();
+					}
+				}
+				if(chord!=null) return chord;
+			}
+		}
+		return null;
+	}
+
+	private String getABCDrum(TGTrack drumTrack, int m) {
+		String s="";
+		String ins="";
+		String vol="";
+		TGMeasure drumm=drumTrack.getMeasure(m-1);
+		int db=0;
+		while(db<drumm.countBeats()) {
+			TGBeat beatd=drumm.getBeat(db);
+			int n=0;
+			for(int v=0;v<beatd.countVoices();v++) n+=beatd.getVoice(v).countNotes();
+			if(n==0) s+="z"+getABCDuration(beatd.getVoice(0).getDuration());
+			else {
+				s+="d"+getABCDuration(beatd.getVoice(0).getDuration());
+				for(int v=0;v<beatd.countVoices();v++) {
+					for(int i=0;i<beatd.getVoice(v).countNotes();i++) {
+						TGNote note=beatd.getVoice(v).getNote(i);
+						int val=note.getValue()+drumTrack.getString(note.getString()).getValue();
+						ins+=" "+(val-12);
+						vol+=" "+note.getVelocity();
+					}
+				}
+			}
+			++db;
+		}
+		if(s.matches("(./)+")) s=s.replaceAll("/","");
+		for(int i=1;i<10;i++)
+			if(s.matches("(."+i+")+")) s=s.replaceAll(""+i,"");
+		if(s.matches("z[z0-9]*")) return "";
+		return s+ins+vol;
+	}
+
+	private int[] getDroneParm(TGBeat beat) {
+		int[] p=new int[5];
+		int i=0;
+		for(int v=0;v<beat.countVoices();v++) {
+			for(int n=0;n<beat.getVoice(v).countNotes();n++) {
+				TGNote note = beat.getVoice(v).getNote(n);
+				p[i]=note.getValue()+beat.getMeasure().getTrack().getString(note.getString()).getValue();
+				p[i+2]=note.getVelocity();
+				i++;
+				if(i>1) return p;
+			}
+		}
+		return p;
+	}
+
+	private TGBeat getFirstBeat(TGTrack track) {
+		for(int m=0;m<track.countMeasures();m++) {
+			for(int b=0;b<track.getMeasure(m).countBeats();b++) {
+				TGBeat beat=track.getMeasure(m).getBeat(b);
+				if(!beat.isRestBeat()) {
+					for(int v=0;v<beat.countVoices();v++) {
+						if(beat.getVoice(v).countNotes()>0) return beat;
+					}
+				}
+			}
+		}
+		return null;
+	}
+
+	private String clefname(int clef) {
+		switch(clef) {
+		case TGMeasure.CLEF_ALTO: return "alto";
+		case TGMeasure.CLEF_BASS: return "bass";
+		case TGMeasure.CLEF_TENOR: return "tenor";
+		case TGMeasure.CLEF_TREBLE: return "treble";
+		}
+		return "treble";
+	}
+
+	private void addSong(TGSong song) {
+		for(int m=this.from-1;m<this.to;m+=this.barsperstaff) {
+			this.writer.println("% "+(m+1));
+			boolean first=true;
+			for(int t=0;t<song.countTracks();t++) {
+				if(t==this.baset-1 || t==this.chordt-1 || t==this.dronet-1) continue;
+				TGTrack track = song.getTrack(t);
+				int tnum=track.getNumber();
+				if(this.settings.getTrack() == ABCSettings.ALL_TRACKS || this.settings.getTrack() == tnum) {
+					this.vId = track.getName().replaceAll("\\s+", "_");
+					if(!isPercussionTrack(track)) {
+						this.line="[V:"+this.vId+"] ";
+						this.wline="w:";
+						for(int b=0;b<this.barsperstaff && m+b<this.to; b++) {
+							TGMeasure measure = track.getMeasure(m+b);
+							TGMeasure prevMeasure = m+b==0? measure: track.getMeasure(m+b-1);
+							this.handleBeginMeasure(measure, prevMeasure);
+							if(first && this.chordt > 0 && this.baset > 0) handleGChord(song,m+b+1);
+							if(first && this.dronet > 0) handleDrone(song,m+b+1);
+							if(t==this.diagramt-1 && this.chordt > 0) {
+								TGTrack chordTrack=song.getTrack(this.chordt-1);
+								TGMeasure chordsMeasure = chordTrack.getMeasure(m+b);
+								measure=mergeChords(measure,chordsMeasure,song.getMeasureHeader(m+b));
+								measure.setTrack(track); // prevent nullpointer in addBeat later on...
+							}
+							this.addMeasureComponents(measure,0);
+							this.handleEndMeasure(measure);
+						}
+						this.writer.println(this.line.replaceAll(":\\]\\s*\\|", ":|").replaceAll("\\|\\s*\\[:", "|:"));
+						if(this.wline.length()>2) this.writer.println(this.wline);
+						first=false;
+					}
+				}
+			}
+			this.writer.println("%");
+		}
+	}
+	
+	private void handleBeginMeasure(TGMeasure measure, TGMeasure previous) {
+		// Open repeat
+		if(measure.isRepeatOpen()){
+			this.addRepeatOpen(measure.getHeader());
+		}
+		else if(measure.getHeader().getRepeatAlternative() > 0){
+			// Open a repeat alternative only if this measure isn't who opened the repeat.
+			this.addRepeatAlternativeOpen(measure.getHeader().getRepeatAlternative());
+		}
+		if(previous == null || measure.getTempo().getValue() != previous.getTempo().getValue()) {
+			this.addTempo(measure.getTempo());
+		}
+		
+		if(previous == null || measure.getClef() != previous.getClef()){
+			this.addClef(measure.getClef());
+		}
+		if(previous == null || measure.getKeySignature() != previous.getKeySignature()){
+			this.addKeySignature(measure.getKeySignature());
+		}
+		
+		if(previous == null || !measure.getTimeSignature().isEqual(previous.getTimeSignature())){
+			this.addTimeSignature(measure.getTimeSignature());
+		}
+		
+	}
+
+	private void handleEndMeasure(TGMeasure measure) {
+		handleTrioles();
+		// Close repeat
+		int count=measure.getRepeatClose();
+		if(count > 0){
+			this.line += " "+(count>1? String.valueOf(count): "") + ":";
+		}
+		if(!this.line.endsWith(":")) this.line+=" ";
+		this.line += "|";
+	}
+
+	private void handleDrone(TGSong song, int m) {
+		TGTrack droneTrack = song.getTrack(this.dronet-1);
+		TGMeasure droneMeasure=droneTrack.getMeasure(m);
+		if(droneMeasure.countBeats()>0) {
+			int[] dp=getDroneParm(droneMeasure.getBeat(0));
+			for(int i=0;i<4;i++) {
+				if(dp[i]!=this.droneparm[i]) {
+					this.line += " [I:MIDI=drone "+this.droneparm[4]+" "+dp[0]+" "+dp[1]+" "+dp[2]+" "+dp[3]+"]";
+					break;
+				}
+			}
+			for(int i=0;i<4;i++) this.droneparm[i]=dp[i];
+			if(!this.droneon) {
+				this.line += " [I:MIDI=droneon]";
+				this.droneon=true;
+			}
+		}
+		else {
+			if(this.droneon) {
+				this.line += " [I:MIDI=droneoff]";
+				this.droneon=false;
+			}
+		}
+	}
+
+	private void handleGChord(TGSong song, int m) {
+		String gc=getABCGchord(song, m);
+		if(this.gchord==null || !this.gchord.equals(gc)) {
+			if(gc.length()==0) {
+				if(this.gchord != null) {
+					this.line += "[I:MIDI=gchordoff]";
+					this.gchord=null;
+				}
+			}
+			else {
+				this.line+=" [I:MIDI=gchord "+gc+"]";
+				if(this.gchord==null)
+					this.line+=" [I:MIDI=gchordon]";
+				this.gchord=gc;
+			}
+		}
+	}
+
+	private TGMeasure mergeChords(TGMeasure measure, TGMeasure chordsMeasure, TGMeasureHeader header) {
+		TGFactory factory = TuxGuitar.instance().getSongManager().getFactory();
+		TGMeasure m=measure.clone(factory, header);
+		for(int i=0;i<chordsMeasure.countBeats();i++) {
+			TGBeat cb=chordsMeasure.getBeat(i).clone(factory);
+			if(cb.isChordBeat()) {
+				boolean hit=false;
+				int x=-1;
+				TGBeat prevmb=null;
+				for(int j=0;j<m.countBeats();j++) {
+					TGBeat mb = m.getBeat(j);
+					if(mb.getStart()==cb.getStart()) {
+						mb.setChord(cb.getChord());
+						if(cb.getText()!=null && mb.getText()==null)
+							mb.setText(cb.getText());
+						hit=true;
+						break;
+					}
+					else if(mb.getStart()>cb.getStart()) break;
+					x=j;
+					prevmb=mb;
+				}
+				if(!hit) {
+					cb.removeText();
+					for(int v=0;v<cb.countVoices();v++) {
+						TGVoice voice = cb.getVoice(v);
+						while(voice.countNotes()>0)
+							voice.removeNote(voice.getNote(0));
+					}
+					if(prevmb!=null && prevmb.getStart()+prevmb.getVoice(0).getDuration().getTime()>cb.getStart()) {
+						long time=cb.getStart()-prevmb.getStart();
+						TGDuration duration1=TGDuration.fromTime(factory, time);
+						TGDuration duration2=TGDuration.fromTime(factory, prevmb.getVoice(0).getDuration().getTime()-time);
+						for(int v=0;v<cb.countVoices();v++) {
+							TGVoice voice = cb.getVoice(v);
+							voice.setDuration(duration2);
+							if(v<prevmb.countVoices()) {
+								TGVoice prevvoice = prevmb.getVoice(v);
+								prevvoice.setDuration(duration1);
+								for(int n=0;n<prevvoice.countNotes();n++) {
+									TGNote note=prevvoice.getNote(n).clone(factory);
+									note.setTiedNote(true);
+									voice.addNote(note);
+								}
+							}
+						}
+					}
+					m.addBeat(cb);
+					m.moveBeat(x+1, cb);
+				}
+			}
+		}
+		return m;
+	}
+
+	private void addRepeatOpen(TGMeasureHeader measure){
+		if(!this.line.endsWith("|")) this.line += "[";
+		this.line += ": ";
+	}
+	
+	private void addRepeatAlternativeOpen(int alternatives) {
+		int bit=1;
+		String comma="[";
+		if(this.line.endsWith("|")) comma="";
+		for(int i=0;i<8;i++) {
+			if((alternatives&bit)==bit) {
+				this.line += comma+(i+1);
+				comma=",";
+			}
+			bit<<=1;
+		}
+	}
+	
+	private void addTempo(TGTempo tempo) {
+		this.line += "[Q:1/4=" + tempo.getValue()+"]";
+	}
+	
+	private void addTimeSignature(TGTimeSignature ts) {
+		this.line += "[M:" + ts.getNumerator() + "/" + ts.getDenominator().getValue()+"]";
+	}
+	
+	private void addKeySignature(int keySignature) {
+		if(keySignature >= 0 && keySignature < ABC_KEY_SIGNATURES.length){
+			this.line += "[K:" + ABC_KEY_SIGNATURES[keySignature] + "]";
+		}
+	}
+	
+	private void addClef(int clef){
+		String clefName = "";
+		if(clef == TGMeasure.CLEF_TREBLE){
+			clefName = "treble";
+		}
+		else if(clef == TGMeasure.CLEF_BASS){
+			clefName = "bass";
+		}
+		else if(clef == TGMeasure.CLEF_ALTO){
+			clefName = "alto";
+		}
+		else if(clef == TGMeasure.CLEF_TENOR){
+			clefName = "tenor";
+		}
+		if(clefName!=""){
+			this.line += "[V:"+vId+" clef="+clefName+"]";
+		}
+	}
+	
+	private void addMeasureComponents(TGMeasure measure,int voice){
+		this.line += " ";
+		this.addComponents(measure,voice);
+	}
+	
+	private void addComponents(TGMeasure measure,int vIndex){
+		int key = measure.getKeySignature();
+		TGBeat previous = null;
+		
+		for(int i = 0 ; i < measure.countBeats() ; i ++){
+			TGBeat beat = measure.getBeat( i );
+			TGVoice voice = beat.getVoice( vIndex );
+			if( !voice.isEmpty() ){
+				this.addBeat(key, beat, voice);
+				previous = beat;
+			}
+		}
+		// It Means that all voice beats are empty 
+		if( previous == null ){
+			int ticks=(int) (measure.getTimeSignature().getDenominator().getTime() * measure.getTimeSignature().getNumerator());
+			int eight=(int) (TGDuration.QUARTER_TIME/2);
+			this.line += "x"+String.valueOf(ticks/eight);
+		}
+		
+	}
+	
+	private void addBeat(int key,TGBeat beat, TGVoice voice){		
+		// Add Chord, if was not previously added in another voice
+		if( beat.isChordBeat() && voice.getIndex()==0) {
+			String name=beat.getChord().getName().replaceAll("[^ -~]", " ").trim();
+			while(name.length()>0 && "CDEFGAB".indexOf(name.charAt(0))<0) name=name.substring(1);
+			if(name.length()>0) {
+				name=name.split("\\s+")[0];
+				this.line += "\""+name+"\"";
+			}
+		}
+		
+		if(voice.isRestVoice()){
+			boolean skip = false;
+			for( int v = 0 ; v < beat.countVoices() ; v ++ ){
+				if( !skip && v != voice.getIndex() ){
+					TGVoice current = beat.getVoice( v );
+					if(!current.isEmpty() && current.getDuration().isEqual( voice.getDuration() )){
+						skip = (!current.isRestVoice() || current.getIndex() < voice.getIndex());
+					}
+				}
+			}
+			this.addTrioles(voice.getDuration());
+			this.line +=  ( skip ? "x" : "z" ) ;
+			this.addDuration( voice.getDuration() );
+		}
+		else{
+			this.addEffectsBeforeBeat(voice);
+			
+			
+			int size = voice.countNotes();
+			this.addTrioles(voice.getDuration());
+			this.addEffectsOnBeat( voice );
+			this.addEffectsOnDuration( voice );
+			if(size > 1) this.line += "[";
+			String tie="";
+			for(int i = 0 ; i < size ; i ++){
+				TGNote note = voice.getNote(i);
+				
+				this.addEffectsBeforeNote(note);
+				
+				this.addKey(key, (beat.getMeasure().getTrack().getString(note.getString()).getValue() + note.getValue()) );
+				if(this.isAnyTiedTo(note)){
+					tie = "-";
+				}
+				
+				this.addEffectsOnNote(note.getEffect());
+				
+			}
+			
+			if(size > 1) this.line += "]";
+			
+			this.addDuration( voice.getDuration() );
+			this.line += tie;
+		}
+		
+		// Add Text, if was not previously added in another voice
+		boolean skip = false;
+		for( int v = 0 ; v < voice.getIndex() ; v ++ ){
+			skip = (skip || !beat.getVoice( v ).isEmpty() );
+		}
+		if( !skip ) {
+			if( beat.isTextBeat() ){
+				this.wline+=" " + beat.getText().getValue();
+			}
+
+			// Check if it's a lyric beat to skip
+			if( beat.getMeasure().getTrack().getLyrics().getFrom() > beat.getMeasure().getNumber()){
+				this.wline+=" *";
+			}
+		}
+		
+		this.line += " ";
+	}
+	
+	private void addTrioles(TGDuration duration) {
+		TGDivisionType dt=duration.getDivision();
+		int times=dt.getTimes();
+		int enters=dt.getEnters();
+		if(enters==times) {
+			handleTrioles();
+		}
+		else {
+			if(this.enterstogo==0) {
+				this.enterstogo=enters;
+				this.triol = "("+enters+":"+times+":"+enters; 
+				this.line += this.triol+" ";
+			}
+			this.enters=enters;
+			this.times=times;
+			--this.enterstogo;
+			if(this.enterstogo==0) {
+				int p=this.line.lastIndexOf(this.triol);
+				if(this.times==2)
+					this.line=this.line.substring(0, p)+"("+this.enters+" "+this.line.substring(p+this.triol.length());
+				this.enters=1;
+				this.times=1;
+			}
+		}
+	}
+
+	private void handleTrioles() {
+		if(this.enters == this.times) return;
+		int p=this.line.lastIndexOf(this.triol);
+		if(p>=0) {
+			if(this.enterstogo>0) {
+				this.line=this.line.substring(0, p)+
+				"("+this.enters+":"+this.times+":"+(this.enters-this.enterstogo)+
+				this.line.substring(p+this.triol.length());
+			}
+			else {
+				if(this.times==2)
+					this.line=this.line.substring(0, p)+"("+this.enters+" "+this.line.substring(p+this.triol.length());
+			}
+		}
+		this.enterstogo=0;
+		this.enters=1;
+		this.times=1;
+	}
+
+	private void addKey(int keySignature,int value){
+		String pitch=getABCKey(keySignature, value) ;
+		int i=this.line.lastIndexOf('|')+1;
+		this.line += scanMeasure(this.line.substring(i),pitch);
+	}
+	
+	private String scanMeasure(String m, String pitch) {
+		char c=pitch.charAt(0);
+		switch(c) {
+		case '=':
+		case '_':
+		case '^':
+			c=pitch.charAt(1);
+		}
+		if(m.lastIndexOf(c)<0) return pitch;
+		String sharp="^"+c;
+		String flat="_"+c;
+		String normal="="+c;
+		int isharp=m.lastIndexOf(sharp);
+		int iflat=m.lastIndexOf(flat);
+		int inormal=m.lastIndexOf(normal);
+		if(inormal<0 && isharp<0 && iflat<0) return pitch;
+		switch(pitch.charAt(0)) {
+		case '=':
+			if(inormal>isharp && inormal>iflat) pitch=pitch.substring(1);
+			break;
+		case '^':
+			if(isharp>inormal && isharp>iflat) pitch=pitch.substring(1);
+			break;
+		case '_':
+			if(iflat>inormal && iflat>isharp) pitch=pitch.substring(1);
+			break;
+		default:
+			if(inormal<iflat || inormal<isharp) pitch="="+pitch;
+			break;
+		}
+		return pitch;
+	}
+
+	private void addDuration(TGDuration duration){
+		this.line += getABCDuration(duration);
+	}
+	
+	private void addEffectsBeforeNote(TGNote note){
+		TGNoteEffect effect = note.getEffect();
+		if( effect.isDeadNote() ){
+			this.line += "\"<x\"";
+		}
+		if( effect.isPalmMute() ){
+			this.line += "\"_palmMute\"";
+		}
+		if( effect.isGhostNote() ){
+			this.line += "\"<(\"";
+			this.line += "\">)\"";
+		}
+		if( effect.isBend() ){
+			this.line += "+upbow+";
+		}
+	}
+	
+	private void addEffectsOnNote(TGNoteEffect effect){
+		if( effect.isHarmonic() ){
+			this.line += "\"_harmonic\"";
+		}
+	}
+	
+	private void addEffectsOnDuration(TGVoice voice){
+		int tremoloPicking = -1;
+		for( int i = 0 ; i < voice.countNotes() ; i ++ ){
+			TGNote note = voice.getNote(i);
+			if( tremoloPicking == -1 && note.getEffect().isTremoloPicking() ){
+				tremoloPicking = note.getEffect().getTremoloPicking().getDuration().getValue();
+			}
+		}
+		if( tremoloPicking != -1 ){
+			this.line += "+trill+";
+		}
+	}
+	
+	private void addEffectsOnBeat(TGVoice voice){
+		boolean trill = false;
+		boolean vibrato = false;
+		boolean staccato = false;
+		boolean accentuatedNote = false;
+		boolean heavyAccentuatedNote = false;
+		boolean arpeggio = ( voice.getBeat().getStroke().getDirection() != TGStroke.STROKE_NONE );
+		for( int i = 0 ; i < voice.countNotes() ; i ++ ){
+			TGNoteEffect effect = voice.getNote(i).getEffect();
+			
+			trill = (trill || effect.isTrill() );
+			vibrato = (vibrato || effect.isVibrato() );
+			staccato = (staccato || effect.isStaccato() );
+			accentuatedNote = (accentuatedNote || effect.isAccentuatedNote() );
+			heavyAccentuatedNote = (heavyAccentuatedNote || effect.isHeavyAccentuatedNote() );
+		}
+		if( trill ){
+			this.line += "+trill+";
+		}
+		if( vibrato ){
+			this.line += "+prall+";
+		}
+		if( staccato ){
+			this.line += ".";
+		}
+		if( accentuatedNote ){
+			this.line += "+>+";
+		}
+		if( heavyAccentuatedNote ){
+			this.line += "^^";
+		}
+		if( arpeggio ){
+			this.line += "+arpeggio+";
+		}
+	}
+	
+	private void addEffectsBeforeBeat(TGVoice voice){
+		List graceNotes = new ArrayList();
+		for( int i = 0 ; i < voice.countNotes() ; i ++ ){
+			TGNote note = voice.getNote(i);
+			if( note.getEffect().isGrace() ){
+				graceNotes.add( note );
+			}
+		}
+		if( !graceNotes.isEmpty() ){
+			this.line += "{";
+			
+			int duration = 0;
+			for( int i = 0 ; i < graceNotes.size() ; i ++ ){
+				TGNote note = (TGNote)graceNotes.get( i );
+				TGMeasure measure = voice.getBeat().getMeasure();
+				TGString string = measure.getTrack().getString(note.getString());
+				TGEffectGrace grace = note.getEffect().getGrace();
+				
+				if( duration < TGDuration.SIXTY_FOURTH && grace.getDuration() == 1 ){
+					duration = TGDuration.SIXTY_FOURTH;
+				}else if( duration < TGDuration.THIRTY_SECOND && grace.getDuration() == 2 ){
+					duration = TGDuration.THIRTY_SECOND;
+				}else if( duration < TGDuration.SIXTEENTH && grace.getDuration() == 3 ){
+					duration = TGDuration.SIXTEENTH;
+				}
+				this.addKey(measure.getKeySignature(), (string.getValue() + grace.getFret()) );
+			}
+			this.line += "}";
+		}
+	}
+	
+	private boolean isAnyTiedTo(TGNote note){
+		TGMeasure measure = note.getVoice().getBeat().getMeasure();
+		TGBeat beat = this.manager.getMeasureManager().getNextBeat( measure.getBeats(), note.getVoice().getBeat());
+		while( measure != null){
+			while( beat != null ){
+				TGVoice voice = beat.getVoice(0);
+				
+				// If is a rest beat, all voice sounds must be stopped.
+				if(voice.isRestVoice()){
+					return false;
+				}
+				// Check if is there any note at same string.
+				Iterator it = voice.getNotes().iterator();
+				while( it.hasNext() ){
+					TGNote current = (TGNote) it.next();
+					if(current.getString() == note.getString()){
+						return current.isTiedNote();
+					}
+				}
+				beat = this.manager.getMeasureManager().getNextBeat( measure.getBeats(), beat);
+			}
+			measure = this.manager.getTrackManager().getNextMeasure(measure);
+			if( measure != null ){
+				beat = this.manager.getMeasureManager().getFirstBeat( measure.getBeats() );
+			}
+		}
+		return false;
+	}
+	
+	private String getABCKey(int keySignature , int value){
+		final String[][] ABC_SCALE = {
+				{ "B", "c", "=d", "d", "=e", "e", "f", "=g", "g", "=a", "a", "=b" } ,	// 7 sharps
+				{ "=c", "c", "=d", "d", "=e", "e", "f", "=g", "g", "=a", "a", "b" } ,	// 6 sharps
+				{ "=c", "c", "=d", "d", "e", "=f", "f", "=g", "g", "=a", "a", "b" } ,	// 5 sharps
+				{ "=c", "c", "=d", "d", "e", "=f", "f", "=g", "g", "a", "^a", "b" } ,	// 4 sharps
+				{ "=c", "c", "d", "^d", "e", "=f", "f", "=g", "g", "a", "^a", "b" } ,	// 3 sharps
+				{ "=c", "c", "d", "^d", "e", "=f", "f", "g", "^g", "a", "^a", "b" } ,	// 2 sharps
+				{ "c", "^c", "d", "^d", "e", "=f", "f", "g", "^g", "a", "^a", "b" } ,	// 1 sharp
+				{ "c", "^c", "d", "^d", "e", "f", "^f", "g", "^g", "a", "^a", "b" } ,	// 0 sharps
+				{ "c", "_d", "d", "_e", "e", "f", "_g", "g", "_a", "a", "b", "=b" } ,	// 1 flat
+				{ "c", "_d", "d", "e", "=e", "f", "_g", "g", "_a", "a", "b", "=b" } ,	// 2 flats
+				{ "c", "_d", "d", "e", "=e", "f", "_g", "g", "a", "=a", "b", "=b" } ,	// 3 flats
+				{ "c", "d", "=d", "e", "=e", "f", "_g", "g", "a", "=a", "b", "=b" } ,	// 4 flats
+				{ "c", "d", "=d", "e", "=e", "f", "g", "=g", "a", "=a", "b", "=b" } ,	// 5 flats
+				{ "=c", "d", "=d", "e", "=e", "f", "g", "=g", "a", "=a", "b", "c" } ,	// 6 flats
+				{ "=c", "d", "=d", "e", "f", "=f", "g", "=g", "a", "=a", "b", "c" } ,	// 7 flats
+		};
+		int octave=value / 12;
+		int note=value % 12;
+		String[] ABC_NOTES = ABC_SCALE[keySignature>7?keySignature:7-keySignature]; // see TGMeasureimpl.java
+		String key = ABC_NOTES[ note ];
+		if(keySignature==7 && note==0 && octave==5) key="B";
+		else if(keySignature>12 && note==11 && octave==4) key="c";
+		else {
+			if(octave < 5) key=key.toUpperCase();
+			else key=key.toLowerCase();
+		}
+		for(int i = 5; i < octave; i ++){
+			key += "'";
+		}
+		for(int i = octave; i < 4; i ++){
+			key += ",";
+		}
+		return key;
+	}
+	
+	private String getABCDuration(TGDuration value) {
+		int ticks=getTime(value);
+		int eight=(int) (TGDuration.QUARTER_TIME/2);
+		int d=1;
+		while(((ticks * d) % eight)>0) d = d * 2;
+		String duration = Integer.toString((ticks*d)/eight);
+		if(duration.equals("1")) duration="";
+		if(d==1) return duration;
+		if(d==2) return duration+"/";
+		duration+="/"+Integer.toString(d);
+		return duration;
+	}
+	
+	private int getTime(TGDuration value) {
+		long time = (long)( TGDuration.QUARTER_TIME * ( 4.0f / value.getValue()) ) ;
+		if(value.isDotted()){
+			time += time / 2;
+		}else if(value.isDoubleDotted()){
+			time += ((time / 4) * 3);
+		}
+		return (int)time;
+	}
+	
+	protected TGChannel getChannel( TGTrack track ){
+		TGChannel tgChannel = this.manager.getChannel( track.getChannelId() );
+		if( tgChannel != null ){
+			return tgChannel;
+		}
+		if( this.channelAux == null ){
+			this.channelAux = this.manager.createChannel();
+		}
+		return this.channelAux;
+	}
+	
+	private boolean isPercussionTrack(TGTrack track){
+		return this.manager.isPercussionChannel(track.getChannelId());
+	
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCPlugin.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCPlugin.java
new file mode 100644
index 0000000..c18e3f8
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCPlugin.java
@@ -0,0 +1,6 @@
+package org.herac.tuxguitar.io.abc;
+
+public class ABCPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-abc";
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCPluginExporter.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCPluginExporter.java
new file mode 100644
index 0000000..130caae
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCPluginExporter.java
@@ -0,0 +1,15 @@
+package org.herac.tuxguitar.io.abc;
+
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
+
+public class ABCPluginExporter extends TGExporterPlugin{
+	
+	protected TGRawExporter getExporter() {
+		return new ABCSongExporter();
+	}
+	
+	public String getModuleId() {
+		return ABCPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCPluginImporter.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCPluginImporter.java
new file mode 100644
index 0000000..413b4e9
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCPluginImporter.java
@@ -0,0 +1,15 @@
+package org.herac.tuxguitar.io.abc;
+
+import org.herac.tuxguitar.io.base.TGRawImporter;
+import org.herac.tuxguitar.io.plugin.TGImporterPlugin;
+
+public class ABCPluginImporter extends TGImporterPlugin{
+	
+	protected TGRawImporter getImporter() {
+		return new ABCSongImporter();
+	}
+	
+	public String getModuleId() {
+		return ABCPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCSettings.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCSettings.java
new file mode 100644
index 0000000..575717e
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCSettings.java
@@ -0,0 +1,267 @@
+package org.herac.tuxguitar.io.abc;
+
+public class ABCSettings {
+	
+	public static final int ALL_TRACKS = -1;
+	public static final int FIRST_MEASURE = -1;
+	public static final int LAST_MEASURE = -1;
+	public static final int AUTO_MEASURES = 0;
+	public static final int AUTO_TRACK = 0;
+	public static final int NO_TRACK = -2;
+	
+	private int x = 1;
+	private int track;
+	private int measureFrom;	
+	private int measureTo;
+	private int measuresPerLine;
+	private int diagramTrack;
+	private int chordTrack;
+	private int baseTrack;
+	private int droneTrack;
+
+	private boolean instrumentsStartAt1;
+	private boolean trackGroupEnabled;
+	private boolean trackNameEnabled;
+	private boolean scoreEnabled;
+	private boolean tablatureEnabled;
+	private boolean lyricsEnabled;
+	private boolean chordDiagramEnabled;
+	private boolean chordEnabled;
+	private boolean droneEnabled;
+	private boolean textEnabled;
+	
+	public ABCSettings(){
+		super();
+	}
+	
+	public int getMeasureFrom() {
+		return this.measureFrom;
+	}
+	
+	public void setMeasureFrom(int measureFrom) {
+		this.measureFrom = measureFrom;
+	}
+	
+	public int getMeasureTo() {
+		return this.measureTo;
+	}
+	
+	public void setMeasureTo(int measureTo) {
+		this.measureTo = measureTo;
+	}
+	
+	public int getTrack() {
+		return this.track;
+	}
+	
+	public void setTrack(int track) {
+		this.track = track;
+	}
+	
+	public boolean isTrackGroupEnabled() {
+		return this.trackGroupEnabled;
+	}
+	
+	public void setTrackGroupEnabled(boolean trackGroupEnabled) {
+		this.trackGroupEnabled = trackGroupEnabled;
+	}
+	
+	public boolean isTrackNameEnabled() {
+		return this.trackNameEnabled;
+	}
+	
+	public void setTrackNameEnabled(boolean trackNameEnabled) {
+		this.trackNameEnabled = trackNameEnabled;
+	}
+	
+	public boolean isScoreEnabled() {
+		return this.scoreEnabled;
+	}
+	
+	public void setScoreEnabled(boolean scoreEnabled) {
+		this.scoreEnabled = scoreEnabled;
+	}
+	
+	public boolean isTablatureEnabled() {
+		return this.tablatureEnabled;
+	}
+	
+	public void setTablatureEnabled(boolean tablatureEnabled) {
+		this.tablatureEnabled = tablatureEnabled;
+	}
+	
+	public boolean isLyricsEnabled() {
+		return this.lyricsEnabled;
+	}
+	
+	public void setLyricsEnabled(boolean lyricsEnabled) {
+		this.lyricsEnabled = lyricsEnabled;
+	}
+	
+	public boolean isChordDiagramEnabled() {
+		return this.chordDiagramEnabled;
+	}
+	
+	public void setChordDiagramEnabled(boolean chordDiagramEnabled) {
+		this.chordDiagramEnabled = chordDiagramEnabled;
+	}
+	
+	public boolean isTextEnabled() {
+		return this.textEnabled;
+	}
+	
+	public void setTextEnabled(boolean textEnabled) {
+		this.textEnabled = textEnabled;
+	}
+
+	public void check(){
+		if(!this.isScoreEnabled() && !this.isTablatureEnabled()){
+			this.setScoreEnabled( true );
+			this.setTablatureEnabled( true );
+		}
+	}
+	
+	public static ABCSettings getDefaults(){
+		ABCSettings settings = new ABCSettings();
+		settings.setX(1);
+		settings.setInstrumentsStartAt1(true);
+		settings.setTrack(ALL_TRACKS);
+		settings.setBaseTrack(AUTO_TRACK);
+		settings.setChordTrack(AUTO_TRACK);
+		settings.setDiagramTrack(AUTO_TRACK);
+		settings.setDroneTrack(NO_TRACK);
+		settings.setMeasureFrom(FIRST_MEASURE);
+		settings.setMeasureTo(LAST_MEASURE);
+		settings.setMeasuresPerLine(AUTO_MEASURES);
+		settings.setScoreEnabled(true);
+		settings.setDroneEnabled(false);
+		settings.setTablatureEnabled(true);
+		settings.setTextEnabled(true);
+		settings.setLyricsEnabled(true);
+		settings.setChordDiagramEnabled(true);
+		settings.setChordEnabled(true);
+		settings.setTrackNameEnabled(true);
+		settings.setTrackGroupEnabled(false);
+		return settings;
+	}
+
+	/**
+	 * @return the x
+	 */
+	public int getX() {
+		return x;
+	}
+
+	/**
+	 * @param x the x to set
+	 */
+	public void setX(int x) {
+		this.x = x;
+	}
+
+	/**
+	 * @return the instrumentsStartAt1
+	 */
+	public boolean isInstrumentsStartAt1() {
+		return instrumentsStartAt1;
+	}
+
+	/**
+	 * @param instrumentsStartAt1 the instrumentsStartAt1 to set
+	 */
+	public void setInstrumentsStartAt1(boolean instrumentsStartAt1) {
+		this.instrumentsStartAt1 = instrumentsStartAt1;
+	}
+
+	public int getMeasuresPerLine() {
+		return measuresPerLine;
+	}
+
+	/**
+	 * @param measuresPerLine the measuresPerLine to set
+	 */
+	public void setMeasuresPerLine(int measuresPerLine) {
+		this.measuresPerLine = measuresPerLine;
+	}
+
+	/**
+	 * @return the baseTrack
+	 */
+	public int getBaseTrack() {
+		return baseTrack;
+	}
+
+	/**
+	 * @param baseTrack the baseTrack to set
+	 */
+	public void setBaseTrack(int baseTrack) {
+		this.baseTrack = baseTrack;
+	}
+
+	/**
+	 * @return the chordTrack
+	 */
+	public int getChordTrack() {
+		return chordTrack;
+	}
+
+	/**
+	 * @param chordTrack the chordTrack to set
+	 */
+	public void setChordTrack(int chordTrack) {
+		this.chordTrack = chordTrack;
+	}
+
+	/**
+	 * @return the diagramTrack
+	 */
+	public int getDiagramTrack() {
+		return diagramTrack;
+	}
+
+	/**
+	 * @param diagramTrack the diagramTrack to set
+	 */
+	public void setDiagramTrack(int diagramTrack) {
+		this.diagramTrack = diagramTrack;
+	}
+
+	public int getDroneTrack() {
+		return droneTrack;
+	}
+
+	/**
+	 * @param droneTrack the droneTrack to set
+	 */
+	public void setDroneTrack(int droneTrack) {
+		this.droneTrack = droneTrack;
+	}
+
+	/**
+	 * @return the droneEnabled
+	 */
+	public boolean isDroneEnabled() {
+		return droneEnabled;
+	}
+
+	/**
+	 * @param droneEnabled the droneEnabled to set
+	 */
+	public void setDroneEnabled(boolean droneEnabled) {
+		this.droneEnabled = droneEnabled;
+	}
+
+	/**
+	 * @return the chordEnabled
+	 */
+	public boolean isChordEnabled() {
+		return chordEnabled;
+	}
+
+	/**
+	 * @param chordEnabled the chordEnabled to set
+	 */
+	public void setChordEnabled(boolean chordEnabled) {
+		this.chordEnabled = chordEnabled;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCSongExporter.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCSongExporter.java
new file mode 100644
index 0000000..8505a78
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCSongExporter.java
@@ -0,0 +1,37 @@
+package org.herac.tuxguitar.io.abc;
+
+import java.io.OutputStream;
+
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGLocalFileExporter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class ABCSongExporter implements TGLocalFileExporter{
+	
+	private OutputStream stream;
+	private ABCSettings settings;
+	
+	public String getExportName() {
+		return "Abc";
+	}
+	
+	public TGFileFormat getFileFormat() {
+		return new TGFileFormat("Abc","*.abc");
+	}
+	
+	public boolean configure(boolean setDefaults) {
+		this.settings = (setDefaults ? ABCSettings.getDefaults() : new ABCExportSettingsDialog().open());
+		return (this.settings != null);
+	}
+	
+	public void init(TGFactory factory,OutputStream stream){
+		this.stream = stream;
+	}
+	
+	public void exportSong(TGSong song) {
+		if(this.stream != null && this.settings != null){
+			new ABCOutputStream(this.stream,this.settings).writeSong(song);
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCSongImporter.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCSongImporter.java
new file mode 100644
index 0000000..92413e2
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/ABCSongImporter.java
@@ -0,0 +1,591 @@
+package org.herac.tuxguitar.io.abc;
+
+import java.io.InputStream;
+import java.util.Iterator;
+
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGLocalFileImporter;
+import org.herac.tuxguitar.io.abc.base.ABCChord;
+import org.herac.tuxguitar.io.abc.base.ABCLocation;
+import org.herac.tuxguitar.io.abc.base.ABCEvent;
+import org.herac.tuxguitar.io.abc.base.ABCSong;
+import org.herac.tuxguitar.io.abc.base.ABCTimeSignature;
+import org.herac.tuxguitar.io.abc.base.ABCTrack;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+
+public class ABCSongImporter implements TGLocalFileImporter{
+	
+	public static final int[][] PERCUSSION_TUNINGS = new int[][]{
+		new int[]{ 32 },
+		new int[]{ 49, 32 },
+		new int[]{ 49, 41, 32 },
+		new int[]{ 49, 51, 42, 32 },
+		new int[]{ 49, 42, 50, 37, 32 },
+		new int[]{ 49, 51, 42, 50, 45, 37 },
+		new int[]{ 49, 51, 42, 50, 45, 37, 41 },
+	};
+	
+	protected TGSongManager manager;
+	protected InputStream stream;
+
+	private ABCSettings settings;
+	
+	public ABCSongImporter(){
+		super();
+	}
+	
+	public TGFileFormat getFileFormat() {
+		return new TGFileFormat("ABC","*.abc");
+	}
+	
+	public String getImportName() {
+		return "ABC";
+	}
+	
+	public boolean configure(boolean setDefaults){
+		this.settings = (setDefaults ? ABCSettings.getDefaults() : new ABCImportSettingsDialog().open());
+		return (this.settings != null);
+	}
+	
+	
+	public void init(TGFactory factory,InputStream stream) {
+		this.manager = new TGSongManager(factory);
+		this.stream = stream;
+	}
+	
+	public TGSong importSong() throws TGFileFormatException {
+		try {
+			if( this.manager != null && this.stream != null ){
+				return this.parseSong(new ABCInputStream(this.stream, this.settings).readSong());
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		throw new TGFileFormatException();
+	}
+	
+	private TGSong parseSong(ABCSong song){
+		song.sortEvents();
+		this.newTGSong(song);
+		this.addMeasureValues(song);
+		this.addTrackValues(song.getTracks());
+		this.addComponents(song);
+		
+		return new TGSongAdjuster(this.manager).process();
+	}
+	
+	private void newTGSong(ABCSong song) {
+		int tracks=song.getTracks().length;
+		int measures=song.getMeasures();
+		int tempo=song.getTempo(0);
+		this.manager.setSong(this.manager.newSong());
+		this.manager.getFirstMeasureHeader().getTempo().setValue(tempo);
+		TGSong tgsong = this.manager.getSong();
+		while(tgsong.countTracks() < tracks){
+			this.manager.addTrack();
+		}
+		while(tgsong.countMeasureHeaders() < measures){
+			this.manager.addNewMeasureBeforeEnd();
+		}
+		tgsong.setCopyright("GPL");
+		if(song.getInfo()!=null) {
+			String s=song.getInfo().getBook();
+			if(s!=null) tgsong.setAlbum(s);
+			s=song.getInfo().getArtist();
+			if(s!=null) tgsong.setArtist(s);
+			s=song.getInfo().getComponist();
+			if(s!=null) tgsong.setAuthor(s);
+			s=song.getInfo().getTitle();
+			if(s!=null) tgsong.setName(s);
+			else {
+				s=song.getInfo().getSource();
+				if(s!=null) tgsong.setName(s);
+				else {
+					s=song.getInfo().getOrigin();
+					if(s!=null) tgsong.setName(s);
+					else {
+						s=song.getInfo().getFilename();
+						if(s!=null) tgsong.setName(s);
+					}
+				}
+			}
+			s=song.getInfo().getTranscriptor();
+			if(s!=null) tgsong.setTranscriber(s);
+			else {
+				s=song.getInfo().getDiscography();
+				if(s!=null) tgsong.setTranscriber(s);
+			}
+			if(song.getInfo().getComments()!=null || song.getInfo().getNotes()!=null) {
+				s="";
+				if(song.getInfo().getComments()!=null) s+=song.getInfo().getComments();
+				if(song.getInfo().getNotes()!=null) s+=song.getInfo().getNotes();
+				tgsong.setComments(s);
+			}
+		}
+		for(int t=0;t<tracks;t++) {
+			TGTrack trk = this.manager.getTrack(t+1);
+			int clef=song.getTracks()[t].getClefType();
+			int key=song.getKeySignature();
+			for(int m=0;m<measures;m++) {
+				trk.getMeasure(m).setClef(clef);
+				trk.getMeasure(m).setKeySignature(key);
+			}
+		}
+	}
+	
+	private void addMeasureValues(ABCSong song){
+		for(int i = 0; i < this.manager.getSong().countMeasureHeaders(); i ++){
+			TGTimeSignature timeSignature = this.manager.getFactory().newTimeSignature();
+			TGTempo tempo=manager.getFactory().newTempo();
+			TGMeasureHeader header = this.manager.getSong().getMeasureHeader(i);
+			ABCTimeSignature ts = song.getTimeSignature(i);
+			int t = song.getTempo(i);
+			timeSignature.setNumerator( ts.getNumerator() );
+			timeSignature.getDenominator().setValue( ts.getDenominator() );
+			tempo.setValue(t);
+			this.manager.changeTimeSignature(header, timeSignature,ts.isToEnd());
+			this.manager.changeTempos(header, tempo, true);
+		}
+		if(song.isHornpipe()) {
+			TGMeasureHeader header = this.manager.getSong().getMeasureHeader(0);
+			this.manager.changeTripletFeel(header, TGMeasureHeader.TRIPLET_FEEL_EIGHTH, true);
+		}
+	}
+	
+	private void addTrackValues(ABCTrack[] tracks){
+		for(int i = 0; i < tracks.length; i ++){
+			TGTrack track = this.manager.getSong().getTrack(i);
+			
+			TGChannel tgChannel = this.manager.addChannel();
+			tgChannel.setVolume((short) 127);
+			tgChannel.setBalance((short)(( tracks[i].getPan() * 127) / 15));
+			tgChannel.setProgram((short)tracks[i].getInstrument());
+			tgChannel.setBank( tracks[i].isPercussion() ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+			
+			track.setChannelId(tgChannel.getChannelId());
+			track.setName(tracks[i].getName());
+			track.getStrings().clear();
+			int strings[] = tracks[i].getStrings();
+			
+			for(int j = 0; j < strings.length;j ++){
+				if(j >= 7){
+					break;
+				}
+				TGString string = this.manager.getFactory().newString();
+				string.setNumber( (j + 1) );
+				if(tracks[i].isPercussion()) string.setValue(0);
+				else if(tracks[i].isBagpipe()) string.setValue(strings[j]);
+				else string.setValue(strings[j]-24);
+				track.getStrings().add(string);
+			}
+		}
+	}
+	
+	private void addComponents(ABCSong song){
+		ABCTrack[] tracks = song.getTracks();
+		Iterator it = song.getEvents().iterator();
+		while(it.hasNext()){
+			ABCLocation component = (ABCLocation)it.next();
+			
+			if(component.getMeasure() >= 0 && component.getMeasure() < this.manager.getSong().countMeasureHeaders()){
+				for(int i = 0; i < tracks.length; i ++){
+					if( component.getTrack()==i ) {
+						int strings = tracks[i].getStrings().length;
+						int string = component.getEvent().getString();
+						TGTrack tgTrack = this.manager.getSong().getTrack(i);
+						TGMeasure tgMeasure = tgTrack.getMeasure(component.getMeasure());
+						TGMeasureHeader header = this.manager.getSong().getMeasureHeader(component.getMeasure());
+						switch(component.getEvent().getType()) {
+						case ABCEvent.NOTE:
+							if( string >= 0 && string <  strings && string < 7)
+								addNote(tracks[i], component,string,strings,tgMeasure);
+							break;
+						case ABCEvent.CHORD_SYMBOL:
+							addChord(song.getChords(),component,tgTrack,tgMeasure);
+							break;
+						case ABCEvent.DECORATION:
+							addDecoration(component,tgMeasure);
+							break;
+						case ABCEvent.REPEAT_BEGIN:
+							header.setRepeatOpen(true);
+							break;
+						case ABCEvent.REPEAT_END:
+							header.setRepeatClose(1);
+							break;
+						case ABCEvent.REPEAT_END_AND_START:
+							header.setRepeatClose(1);
+							header = this.manager.getSong().getMeasureHeader(component.getMeasure()+1);
+							header.setRepeatOpen(true);
+							break;
+						case ABCEvent.VARIANT:
+							header.setRepeatAlternative(component.getEvent().getVariant());
+							break;
+						}
+					}
+				}
+			}
+		}
+	}
+
+	private void addDecoration(ABCLocation component, TGMeasure tgMeasure) {
+		TGBeat tgBeat = this.manager.getMeasureManager().getBeat(tgMeasure, getStart(null, tgMeasure, component.getTicks()));
+		int n=tgBeat==null ? 0 : tgBeat.getVoice(0).countNotes();
+		TGNote[] note=new TGNote[n];
+		TGNoteEffect[] effect=new TGNoteEffect[n];
+		TGFactory factory=manager.getFactory();
+		for(int i=0;i<n;i++) {
+			note[i] = tgBeat.getVoice(0).getNote(i);
+			effect[i]=note[i].getEffect();
+		}
+		TGMeasureHeader header = tgMeasure.getHeader();
+		TGMarker marker=factory.newMarker();
+		marker.setMeasure(component.getMeasure()+1);
+		switch(component.getEvent().getDecoration()) {
+		case ABCEvent.ARPEGGIO:
+			if(n<2) return;
+			TGDuration duration=tgBeat.getVoice(0).getDuration();
+			long t=duration.getTime()/n;
+			n=TGDuration.QUARTER;
+			if(t<TGDuration.QUARTER_TIME) {
+				n=TGDuration.EIGHTH;
+				if(t*2<TGDuration.QUARTER_TIME) {
+					n=TGDuration.SIXTEENTH;
+					if(t*4<TGDuration.QUARTER_TIME) {
+						n=TGDuration.THIRTY_SECOND;
+						if(t*8<TGDuration.QUARTER_TIME) {
+							n=TGDuration.SIXTY_FOURTH;
+						}
+					}
+				}
+			}
+			tgBeat.getStroke().setDirection(TGStroke.STROKE_DOWN);
+			tgBeat.getStroke().setValue(n);
+			break;
+		case ABCEvent.ACCENT:
+			for(int i=0;i<n;i++) {
+				if(effect[i]==null) effect[i]=factory.newEffect();
+				effect[i].setAccentuatedNote(true);
+				note[i].setEffect(effect[i].clone(factory));
+			}
+			break;
+		case ABCEvent.TRILL:
+			for(int i=0;i<n;i++) {
+				if(effect[i]==null) effect[i]=factory.newEffect();
+				effect[i].setTrill(factory.newEffectTrill());
+				note[i].setEffect(effect[i].clone(factory));
+			}
+			break;
+		case ABCEvent.STACATODOT:
+			for(int i=0;i<n;i++) {
+				if(effect[i]==null) effect[i]=factory.newEffect();
+				effect[i].setStaccato(true);
+				note[i].setEffect(effect[i].clone(factory));
+			}
+			break;
+		case ABCEvent.SEGNO:
+			marker.setTitle("$ Segno");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.DS:
+			marker.setTitle("D.S.");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.DSS:
+			marker.setTitle("D.S.S.");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.DC:
+		case ABCEvent.DACAPO:
+			marker.setTitle("D.C.");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.ALCODA:
+			if(header.getMarker()!=null) {
+				marker.setTitle(header.getMarker().getTitle()+" al Coda");
+			}
+			else
+				marker.setTitle("D.C. al Coda");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.DACODA:
+			marker.setTitle("Da Coda");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.ALFINE:
+			if(header.getMarker()!=null) {
+				marker.setTitle(header.getMarker().getTitle()+" al Fine");
+			}
+			else
+				marker.setTitle("D.C. al Fine");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.FINE:
+			marker.setTitle("Fine");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.TOCODA:
+			marker.setTitle("To Coda");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.CODA:
+			if(header.getMarker()!=null) {
+				String m=header.getMarker().getTitle();
+				if(m.equalsIgnoreCase("to coda"))
+					marker.setTitle(m);
+				else
+					marker.setTitle(m+" | Coda");
+				
+			}
+			else
+				marker.setTitle("Coda");
+			header.setMarker(marker.clone(factory));
+			break;
+		case ABCEvent.PPPP:
+		case ABCEvent.PPP:
+		case ABCEvent.PP:
+		case ABCEvent.P:
+		case ABCEvent.MP:
+		case ABCEvent.MF:
+		case ABCEvent.SFZ:
+		case ABCEvent.F:
+		case ABCEvent.FF:
+		case ABCEvent.FFF:
+		case ABCEvent.FFFF:
+			String dynamic=component.getEvent().toString();
+			dynamic=dynamic.substring(1, dynamic.length()-1);
+			TGColor color=factory.newColor();
+			color.setR(32);
+			color.setG(192);
+			color.setB(32);
+			if(header.getMarker()!=null) {
+				String m=header.getMarker().getTitle();
+				marker.setTitle(m+" "+dynamic);
+				color=marker.getColor();
+			}
+			else
+				marker.setTitle(dynamic);
+			marker.setColor(color.clone(factory));
+			header.setMarker(marker.clone(factory));
+			break;
+		}
+	}
+
+	private TGBeat getBeat(TGMeasure measure, long start){
+		TGBeat beat = this.manager.getMeasureManager().getBeat(measure, start);
+		if(beat == null){
+			beat = this.manager.getFactory().newBeat();
+			beat.setStart(start);
+			measure.addBeat(beat);
+		}
+		return beat;
+	}
+	
+	private long getStart(TGDuration duration, TGMeasure measure,int position){
+		float fixedPosition = (position*64)/ABCSong.TICKS_PER_QUART;
+		if(duration != null && !duration.getDivision().isEqual(TGDivisionType.NORMAL)){
+			fixedPosition = (( fixedPosition - (fixedPosition % 64)) + ((((fixedPosition % 64) * 2) * 2) / 3) );
+		}
+		long start = ((long) (measure.getStart() + ( (fixedPosition * TGDuration.QUARTER_TIME)  / 64)) );
+		
+		return start;
+	}
+	
+	private TGDuration getDuration(int duration){
+		return TGDuration.fromTime(this.manager.getFactory(), ticksToTime(duration));
+	}
+	
+	private int ticksToTime(int tcks) {
+		return (int) ((tcks*TGDuration.QUARTER_TIME)/ABCSong.TICKS_PER_QUART);
+	}
+
+	private void addNote(ABCTrack track,ABCLocation component,int string,int strings,TGMeasure tgMeasure){
+		ABCEvent e=component.getEvent();
+		int value    = e.getFret();
+		int velocity = e.getVelocity();
+		if(track.isPercussion() ){
+			int tuning = (Math.min( (strings - 1) ,(PERCUSSION_TUNINGS.length )) - 1);
+			if(string >= 0 && string < PERCUSSION_TUNINGS[tuning].length){
+				value += PERCUSSION_TUNINGS[tuning][string];
+			}
+		}
+		TGFactory factory=this.manager.getFactory();
+		TGNote tgNote = factory.newNote();
+		tgNote.setString( string + 1 );
+		tgNote.setValue( value );
+		tgNote.setVelocity(velocity);
+		tgNote.setTiedNote(e.isTied());
+		TGDuration tgDuration = getDuration(e.getTicks());
+		TGNoteEffect effect = factory.newEffect();
+		if(e.isGrace()) {
+			TGEffectGrace grace = factory.newEffectGrace();
+			int dur=4;
+			switch(tgDuration.getValue()) {
+			case TGDuration.QUARTER: dur=4;break;
+			case TGDuration.EIGHTH: dur=2;break;
+			case TGDuration.SIXTEENTH: dur=1;break;
+			case TGDuration.HALF: dur=4;break;
+			case TGDuration.WHOLE: dur=4;break;
+			default:
+				dur=4;
+				break;
+			}
+			grace.setOnBeat(false);
+			grace.setFret(e.getFret());
+			grace.setDuration(dur);
+			grace.setTransition(TGEffectGrace.TRANSITION_HAMMER);
+			effect.setGrace(grace.clone(factory));
+		}
+		if(track.isBagpipe()) {
+			effect.setVibrato(true);
+		}
+		effect.setStaccato(e.isStacato() && !e.isLegato());
+		tgNote.setEffect(effect.clone(factory));
+		TGBeat tgBeat = getBeat(tgMeasure, getStart(tgDuration, tgMeasure, component.getTicks()));
+		if(e.isGrace()) {
+			for(int i=0;i<tgBeat.getVoice(0).countNotes();i++) {
+				TGNote n=tgBeat.getVoice(0).getNote(i);
+				if(n.getString()==tgNote.getString()) 
+					n.setEffect(tgNote.getEffect().clone(factory));
+			}
+		}
+		else {
+			if(e.getLyrics()!=null) {
+				String[] lyrics = component.getEvent().getLyrics();
+				TGText text = factory.newText();
+				text.setValue(lyrics[0]);
+				tgBeat.setText(text);
+			}
+			tgDuration.copy(tgBeat.getVoice(0).getDuration());
+			tgBeat.getVoice(0).addNote(tgNote);
+		}
+	}
+	
+	private void addChord(ABCChord[] chords,ABCLocation component,TGTrack tgTrack,TGMeasure tgMeasure){
+		if(component.getEvent().getChordnum() >= 0 && component.getEvent().getChordnum() < chords.length){
+			ABCChord chord = chords[component.getEvent().getChordnum()];
+			byte[] strings = chord.getStrings();
+			
+			TGChord tgChord = this.manager.getFactory().newChord(tgTrack.stringCount());
+			tgChord.setName(chord.getName());
+			for(int i = 0; i < tgChord.countStrings(); i ++){
+				int value = ( ( i < strings.length )?strings[i]:-1 );
+				tgChord.addFretValue(i,value);
+			}
+			if(tgChord.countNotes() > 0){
+				TGBeat tgBeat = getBeat(tgMeasure, getStart(null, tgMeasure, component.getTicks()));
+				tgBeat.setChord(tgChord);
+			}
+		}
+	}
+	
+}
+
+class TGSongAdjuster{
+	
+	protected TGSongManager manager;
+	
+	public TGSongAdjuster(TGSongManager manager){
+		this.manager = manager;
+	}
+	
+	public TGSong process(){
+		Iterator tracks = this.manager.getSong().getTracks();
+		while(tracks.hasNext()){
+			TGTrack track = (TGTrack)tracks.next();
+			Iterator measures = track.getMeasures();
+			while(measures.hasNext()){
+				TGMeasure measure = (TGMeasure)measures.next();
+				this.process(measure);
+			}
+		}
+		return this.manager.getSong();
+	}
+	
+	public void process(TGMeasure measure){
+		this.manager.getMeasureManager().orderBeats(measure);
+		this.adjustBeats(measure);
+	}
+	
+	public void adjustBeats(TGMeasure measure){
+		TGBeat previous = null;
+		boolean finish = true;
+		
+		long measureStart = measure.getStart();
+		long measureEnd = (measureStart + measure.getLength());
+		for(int i = 0;i < measure.countBeats();i++){
+			TGBeat beat = measure.getBeat( i );
+			long beatStart = beat.getStart();
+			long beatLength = beat.getVoice(0).getDuration().getTime();
+			if(previous != null){
+				long previousStart = previous.getStart();
+				long previousLength = previous.getVoice(0).getDuration().getTime();
+				
+				// check for a chord in a rest beat
+				if( beat.getVoice(0).isRestVoice() && beat.isChordBeat() ){
+					TGBeat candidate = null;
+					TGBeat next = this.manager.getMeasureManager().getFirstBeat( measure.getBeats() );
+					while( next != null ){
+						if( candidate != null && next.getStart() > beat.getStart() ){
+							break;
+						}
+						if(! next.getVoice(0).isRestVoice() && !next.isChordBeat() ){
+							candidate = next;
+						}
+						next = this.manager.getMeasureManager().getNextBeat(measure.getBeats(), next);
+					}
+					if(candidate != null){
+						candidate.setChord( beat.getChord() );
+					}
+					measure.removeBeat(beat);
+					finish = false;
+					break;
+				}
+				
+				// check the duration
+				if(previousStart < beatStart && (previousStart + previousLength) > beatStart){
+					if(beat.getVoice(0).isRestVoice()){
+						measure.removeBeat(beat);
+						finish = false;
+						break;
+					}
+					TGDuration duration = TGDuration.fromTime(this.manager.getFactory(), (beatStart - previousStart) );
+					duration.copy( previous.getVoice(0).getDuration() );
+				}
+			}
+			if( (beatStart + beatLength) > measureEnd ){
+				if(beat.getVoice(0).isRestVoice()){
+					measure.removeBeat(beat);
+					finish = false;
+					break;
+				}
+				TGDuration duration = TGDuration.fromTime(this.manager.getFactory(), (measureEnd - beatStart) );
+				duration.copy( beat.getVoice(0).getDuration() );
+			}
+			previous = beat;
+		}
+		if(!finish){
+			adjustBeats(measure);
+		}
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCChord.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCChord.java
new file mode 100644
index 0000000..47bcecf
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCChord.java
@@ -0,0 +1,214 @@
+package org.herac.tuxguitar.io.abc.base;
+
+import org.herac.tuxguitar.app.editors.chord.ChordDatabase.ChordInfo;
+
+public class ABCChord {
+
+	private static final String GCHORDNOTESET = "fghijklGHIJ";
+
+	private static final ChordInfo[] data = new ChordInfo[]{
+		
+
+		new ChordInfo("",      new int[]{ 1, 5, 8 }),		// Major
+		new ChordInfo("7",     new int[]{ 1, 5, 8, 11 }),
+		new ChordInfo("maj7",  new int[]{ 1, 5, 8, 12 }),
+		new ChordInfo("6",     new int[]{ 1, 5, 8, 10 }),
+		new ChordInfo("m",     new int[]{ 1, 4, 8 }),
+		new ChordInfo("m7",    new int[]{ 1, 4, 8, 11 }),
+		new ChordInfo("m/maj7",new int[]{ 1, 4, 8, 12 }),
+		new ChordInfo("m6",    new int[]{ 1, 4, 8, 10 }),
+		new ChordInfo("sus2",  new int[]{ 1, 3, 8 }),
+		new ChordInfo("sus4",  new int[]{ 1, 6, 8 }),
+		new ChordInfo("7sus2", new int[]{ 1, 3, 8, 11 }),
+		new ChordInfo("7sus4", new int[]{ 1, 6, 8, 11 }),
+		new ChordInfo("dim",   new int[]{ 1, 4, 7 }),
+		new ChordInfo("dim7",  new int[]{ 1, 4, 7, 10 }),
+		new ChordInfo("aug",   new int[]{ 1, 5, 9 }),
+		new ChordInfo("5",     new int[]{ 1, 8 }),
+//		from here extending ChordDataBase 
+		new ChordInfo("M7",    new int[]{ 1, 5, 8, 12 }),
+		new ChordInfo("+",     new int[]{ 1, 5, 9 }),
+		new ChordInfo("aug7",  new int[]{ 1, 5, 9, 11 }),
+		new ChordInfo("7+",    new int[]{ 1, 5, 9, 11 }),
+		new ChordInfo("9",     new int[]{ 1, 5, 8, 11, 3 }),
+		new ChordInfo("m9",    new int[]{ 1, 4, 8, 11, 3 }),
+		new ChordInfo("maj9",  new int[]{ 1, 5, 8, 12, 3 }),
+		new ChordInfo("M9",    new int[]{ 1, 5, 8, 12, 3 }),
+		new ChordInfo("11",    new int[]{ 1, 5, 8, 11, 3, 6 }),
+		new ChordInfo("dim9",  new int[]{ 1, 5, 8, 11, 14 }),
+		new ChordInfo("sus",   new int[]{ 1, 6, 8 }),
+		new ChordInfo("sus9",  new int[]{ 1, 3, 8 }),
+		new ChordInfo("7sus",  new int[]{ 1, 6, 8, 11 }),
+		new ChordInfo("7sus9", new int[]{ 1, 3, 8, 11 }),
+		new ChordInfo("9sus",  new int[]{ 1, 6, 11, 15, 20 }),
+		new ChordInfo("9sus4", new int[]{ 1, 6, 11, 15, 20 }),
+		new ChordInfo("5",     new int[]{ 1, 8 }),
+		new ChordInfo("13",    new int[]{ 1, 5, 8, 11, 17, 21 }),
+		
+	};
+	
+	private byte[] strings;
+	private String name;
+	private String[] chordnote;
+	private int size;
+
+	private int[] gchordnote;
+	
+	public ABCChord(String name){
+		this.name = name.substring(0, 1).toUpperCase()+name.substring(1);
+		plotChord(this.name);
+	}
+	
+	private void plotChord(String name) {
+		String base,variant,root;
+		if(name.length()>1 && (name.charAt(1)=='#' || name.charAt(1)=='b')) {
+			base=name.substring(0,2);
+			variant=name.substring(2);
+		}
+		else {
+			base=name.substring(0, 1);
+			variant=name.substring(1);
+		}
+		if(variant.length()==0) variant="M";
+		if(variant.lastIndexOf('/')<0 || variant.equals("m/maj7")) root=base;
+		else {
+			int i=variant.indexOf('/');
+			root=variant.substring(i+1);
+			variant=variant.substring(0, i);
+		}
+		if(variant.indexOf('(')>0) {
+			int i=variant.indexOf('(');
+			variant=variant.substring(0, i);
+		}
+		if(root.length()>1 && root.charAt(1)=='#') root="^"+root.substring(0,1);
+		else if(root.length()>1 && root.charAt(1)=='b') root="_"+root.substring(0,1);
+		else root="="+root.substring(0,1);
+		// chord builder
+		strings=new byte[6];
+		for(int x=0;x<strings.length;x++) strings[x]=-1;
+		for(int i=0;i<data.length;i++) {
+			ChordInfo info=data[i];
+			if(variant.equals(info.getName())) {
+				initChord(info,base,root);
+				break;
+			}
+		}
+		if(chordnote==null) {
+			for(int i=0;i<data.length;i++) {
+				ChordInfo info=data[i];
+				if(variant.startsWith(info.getName())) {
+					initChord(info,base,root);
+					break;
+				}
+			}
+		}
+	}
+
+	private void initChord(ChordInfo info, String base, String root) {
+		int[] n = info.cloneRequireds();
+		size=n.length;
+		gchordnote=new int[GCHORDNOTESET.length()];
+		chordnote=new String[7];
+		chordnote[0]=root.toUpperCase();
+		int note=" C D EF G A B ".indexOf(base.charAt(0));
+		if(base.endsWith("#")) note++;
+		else if(base.endsWith("b")) note--;
+		note+=70; // YES not 71 for B3 because the requireds are base 1
+		gchordnote[0]=note+1;
+		for(int x=0;x<n.length;x++) {
+			n[x]+=note;
+			gchordnote[x+1]=n[x];
+			if(n[x]<96)
+				chordnote[x+1]="=C^C=D^D=E=F^F=G^G=A^A=B=c^c=d^d=e=f^f=g^g=a^a=b".substring((n[x]-72)*2,(n[x]-72)*2+2);
+			else
+				chordnote[x+1]="=c'^c'=d'^d'=e'=f'^f'=g'^g'=a'^a'=b'".substring((n[x]-96)*3,(n[x]-96)*3+3);
+		}
+		for(int x=n.length;x<chordnote.length-1;x++) {
+			note=n[x-n.length]+12;
+			gchordnote[x+1]=note;
+			if(note<96)
+				chordnote[x+1]="=C^C=D^D=E=F^F=G^G=A^A=B=c^c=d^d=e=f^f=g^g=a^a=b".substring((note-72)*2,(note-72)*2+2)+"'";
+			else
+				chordnote[x+1]="=c'^c'=d'^d'=e'=f'^f'=g'^g'=a'^a'=b'".substring((note-96)*3,(note-96)*3+3);
+		}
+		for(int x=chordnote.length-1;x<gchordnote.length-1;x++)
+			gchordnote[x+1]=gchordnote[x+2-chordnote.length]-12;
+		int[] snare={64, 69, 74, 79, 83, 88};
+		for(int y=0;y<strings.length;y++) {
+			int x=0;
+			while(x<n.length && snare[y]>n[x]-24) ++x;
+			if(x<n.length) {
+				strings[strings.length-y-1]=(byte) (n[x]-24-snare[y]);
+				continue;
+			}
+			x=0;
+			while(x<n.length && snare[y]>n[x]-12) ++x;
+			if(x<n.length) {
+				strings[strings.length-y-1]=(byte) (n[x]-12-snare[y]);
+				continue;
+			}
+			x=0;
+			while(x<n.length && snare[y]>n[x]) ++x;
+			if(x<n.length) {
+				strings[strings.length-y-1]=(byte) (n[x]-snare[y]);
+				continue;
+			}
+			x=0;
+			while(x<n.length && snare[y]>n[x]+12) ++x;
+			if(x<n.length) {
+				strings[strings.length-y-1]=(byte) (n[x]+12-snare[y]);
+				continue;
+			}
+		}
+	}
+
+	public String getName() {
+		return this.name;
+	}
+	
+	public byte[] getStrings() {
+		return this.strings;
+	}
+	
+	public int size() {
+		return this.size;
+	}
+	
+	public String toString(){
+		String string = new String("[CHORD]");
+		string += "\n     Name:       " + getName();
+		for(int i = 0; i < this.strings.length; i ++){
+			if(this.strings[i] != -1){
+				string += "\n     String " + (i + 1) + ":    " + this.strings[i];
+			}
+		}
+		return string;
+	}
+
+	public String getNote(char c) {
+		switch(c) {
+		case 'f': return chordnote[0];
+		case 'g': return chordnote[1];
+		case 'h': return chordnote[2];
+		case 'i': return chordnote[3];
+		case 'j': return chordnote[4];
+		case 'k': return chordnote[5];
+		case 'l': return chordnote[6];
+		case 'G': return chordnote[1]+",";
+		case 'H': return chordnote[2]+",";
+		case 'I': return chordnote[3]+",";
+		case 'J': return chordnote[4]+",";
+		}
+		return "z";
+	}
+
+	public char getGchordChar(int value) {
+		while(value>gchordnote[GCHORDNOTESET.indexOf('l')]) value-=12;
+		while(value<gchordnote[GCHORDNOTESET.indexOf('f')] && value<gchordnote[GCHORDNOTESET.indexOf('G')]) value+=12;
+		for(int i=0;i<gchordnote.length;i++) {
+			if(gchordnote[i]==value) return GCHORDNOTESET.charAt(i);
+		}
+		return 'f';
+	}
+
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCComponent.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCComponent.java
new file mode 100644
index 0000000..ba35777
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCComponent.java
@@ -0,0 +1,28 @@
+package org.herac.tuxguitar.io.abc.base;
+
+public abstract class ABCComponent {
+	
+	private int position;
+	
+	private int measure;
+	
+	private int string;
+	
+	public ABCComponent(int position,int measure, int string) {
+		this.position = position;
+		this.measure = measure;
+		this.string = string;
+	}
+	
+	public int getPosition() {
+		return this.position;
+	}
+	
+	public int getMeasure() {
+		return this.measure;
+	}
+	
+	public int getString() {
+		return this.string;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCComponentChord.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCComponentChord.java
new file mode 100644
index 0000000..062499b
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCComponentChord.java
@@ -0,0 +1,24 @@
+package org.herac.tuxguitar.io.abc.base;
+
+public class ABCComponentChord extends ABCComponent{
+	
+	private int chord;
+	
+	public ABCComponentChord(int position,int measure, int string, int chord) {
+		super(position, measure, string);
+		this.chord = chord;
+	}
+	
+	public int getChord() {
+		return this.chord;
+	}
+	
+	public String toString(){
+		String string = new String("[NOTE]");
+		string += "\n     Measure:   " + getMeasure();
+		string += "\n     Position:  " + getPosition();
+		string += "\n     String:    " + getString();
+		string += "\n     Chord:     " + getChord();
+		return string;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCComponentNote.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCComponentNote.java
new file mode 100644
index 0000000..f77fb17
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCComponentNote.java
@@ -0,0 +1,46 @@
+package org.herac.tuxguitar.io.abc.base;
+
+public class ABCComponentNote extends ABCComponent{
+	
+	private int fret;
+	
+	private int duration;
+	
+	private int dynamic;
+	
+	private int effect;
+	
+	public ABCComponentNote(int position,int measure, int string, int fret, int duration, int dynamic, int effect) {
+		super(position, measure, string);
+		this.fret = fret;
+		this.duration = duration;
+		this.dynamic = dynamic;
+		this.effect = effect;
+	}
+	
+	public int getDuration() {
+		return this.duration;
+	}
+	
+	public int getDynamic() {
+		return this.dynamic;
+	}
+	
+	public int getEffect() {
+		return this.effect;
+	}
+	
+	public int getFret() {
+		return this.fret;
+	}
+	
+	public String toString(){
+		String string = new String("[NOTE]");
+		string += "\n     Measure:   " + getMeasure();
+		string += "\n     Position:  " + getPosition();
+		string += "\n     String:    " + getString();
+		string += "\n     Fret:      " + getFret();
+		
+		return string;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCEvent.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCEvent.java
new file mode 100644
index 0000000..e7a1658
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCEvent.java
@@ -0,0 +1,690 @@
+/**
+ * 
+ */
+package org.herac.tuxguitar.io.abc.base;
+
+import java.util.ArrayList;
+
+/**
+ * @author peter
+ *
+ */
+public class ABCEvent implements Comparable {
+	// types
+	public static final int BAR = 0;
+	public static final int BAR_BAR = 1;
+	public static final int BAR_FATBAR = 2;
+	public static final int FATBAR_BAR = 3;
+	public static final int REPEAT_BEGIN = 4;
+	public static final int REPEAT_END = 5;
+	public static final int REPEAT_END_AND_START = 6;
+	public static final int VARIANT = 7;
+	public static final int TIME = 8;
+	public static final int TEMPO = 9;
+	public static final int CHORD_SYMBOL = 10;
+	public static final int ANNOTATION = 11;
+	public static final int CHORD_BEGIN = 12;
+	public static final int REST = 13;
+	public static final int NOTE = 14;
+	public static final int CHORD_CLOSE = 15;
+	public static final int DECORATION = 16;
+	public static final int LINE_BREAK = 17;
+	public static final int NOT_RELEVANT = 18;
+	// decoration (stored in the pitch)
+	public static final int TRILL = 1;
+	public static final int LOWERMORDENT = 2;
+	public static final int UPPERMORDENT = 3;
+	public static final int ACCENT = 4;
+	public static final int FERMATA = 5;
+	public static final int INVERTEDFERMATA = 6;
+	public static final int TENUTO = 7;
+	public static final int FINGERING_0 = 8;
+	public static final int FINGERING_1 = 9;
+	public static final int FINGERING_2 = 10;
+	public static final int FINGERING_3 = 11;
+	public static final int FINGERING_4 = 12;
+	public static final int FINGERING_5 = 13;
+	public static final int PLUS = 14;
+	public static final int WEDGE = 15;
+	public static final int OPEN = 16;
+	public static final int THUMB = 17;
+	public static final int TURN = 18;
+	public static final int ROLL = 19;
+	public static final int BREATH = 20;
+	public static final int SHORTPHRASE = 21;
+	public static final int MEDIUMPHRASE = 22;
+	public static final int LONGPHRASE = 23;
+	public static final int SEGNO = 24;
+	public static final int DS = 25;
+	public static final int DSS = 26;
+	public static final int DC = 27;
+	public static final int DACODA = 28;
+	public static final int DACAPO = 29;
+	public static final int ALCODA = 30;
+	public static final int TOCODA = 31;
+	public static final int ALFINE = 32;
+	public static final int FINE = 33;
+	public static final int CODA = 34;
+	public static final int STARTCRESCENDO = 35;
+	public static final int ENDCRESCENDO = 36;
+	public static final int STARTDIMINUENDO = 37;
+	public static final int ENDDIMINUENDO = 38;
+	public static final int PPPP = 39;
+	public static final int PPP = 40;
+	public static final int PP = 41;
+	public static final int P = 42;
+	public static final int MP = 43;
+	public static final int MF = 44;
+	public static final int F = 45;
+	public static final int FF = 46;
+	public static final int FFF = 47;
+	public static final int FFFF = 48;
+	public static final int SFZ = 49;
+	public static final int UPBOW = 50;
+	public static final int DOWNBOW = 51;
+	public static final int SLIDE = 52;
+	public static final int TURNX = 53;
+	public static final int INVERTEDTURN = 54;
+	public static final int INVERTEDTURNX = 55;
+	public static final int ARPEGGIO = 56;
+	public static final int STARTTRILL = 57;
+	public static final int ENDTRILL = 58;
+	public static final int STACATODOT = 59;
+	public static final int GCHORDON = -1;
+	public static final int GCHORDOFF = -2;
+	public static final int GCHORD = -3;
+	public static final int CHORDPROG = -4;
+	public static final int CHORDVOL = -5;
+	public static final int BASSPROG = -6;
+	public static final int BASSVOL = -7;
+	public static final int DRUMON = -8;
+	public static final int DRUMOFF = -9;
+	public static final int DRUM = -10;
+	public static final int DRONEON = -11;
+	public static final int DRONEOFF = -12;
+	public static final int DRONE = -13;
+	
+	private String name;
+	private int type;
+	private int pitch;
+	private int ticks;
+	private int string;
+	private int fret;
+	private int velocity;
+	private boolean tied;
+	private boolean stacato;
+	private boolean grace;
+	private boolean legato;
+	private int sequence;
+	private boolean triplet;
+	private int tripletP;
+	private int tripletQ;
+	private int tripletR;
+	private ArrayList lyrics;
+	
+	public ABCEvent(int type, String parm, int value) {
+		this.type=type;
+		this.name=parm;
+		this.pitch=value;
+		ticks=0;
+		velocity=0;
+		tied=false;
+		grace=false;
+		stacato=false;
+		legato=false;
+		sequence=0;
+		triplet=false;
+		lyrics=null;
+	}
+
+	public ABCEvent(ABCSong song, String name) {
+		char[] a=(name+"  ").toCharArray();
+		int i=0;
+		pitch=0;
+		ticks=0;
+		velocity=0;
+		type=REST;
+		tied=false;
+		grace=false;
+		stacato=false;
+		legato=false;
+		sequence=0;
+		triplet=false;
+		switch(a[0]) {
+		default: type=NOT_RELEVANT; i=1;break;
+		case '|': 
+			if(a[1]==':') {
+				type=REPEAT_BEGIN;
+				i=2;
+				break;
+			}
+			if(a[1]=='|') {
+				type=BAR_BAR;
+				i=2;
+				break;
+			}
+			if(a[1]==']') {
+				type=BAR_FATBAR;
+				i=2;
+				break;
+			}
+			type=BAR;
+			i=1;
+			break;
+		case '[': 
+			if(a[1]=='|') {
+				type=FATBAR_BAR;
+				i=2;
+				break;
+			}
+			if(a[1]==':') {
+				type=REPEAT_BEGIN;
+				i=2;
+				break;
+			}
+			if("123456789".indexOf(a[1])>=0) {
+				type=VARIANT;
+				pitch=0;
+				i=0;
+				fret=0;
+				ticks=0;
+				while(i==0 || ",-".indexOf(a[i])>=0) {
+					if(a[i]==',') fret=0;
+					else fret=ticks;
+					i++;
+					ticks=0;
+					while(i<a.length && "0123456789".indexOf(a[i])>=0) {
+						ticks=ticks*10+"0123456789".indexOf(a[i]);
+						i++;
+					}
+					if(fret==0) pitch |= (1<<(ticks-1));
+					else {
+						while(fret<=ticks) {
+							pitch |= (1<<(fret-1));
+							fret++;
+						}
+					}
+					if(i==a.length) break;
+				}
+				fret=0;
+				ticks=0;
+				break;
+			}
+			type=CHORD_BEGIN;
+			i=1;
+			break;
+		case ':': 
+			if(a[1]==':') 
+				type=REPEAT_END_AND_START; 
+			else 
+				type=REPEAT_END;
+			i=2;
+			break;
+		case '"':// preceded by one of five symbols ^, _, <, > or @ which controls where the annotation is to be placed
+			if("^_<>@".indexOf(a[1])<0) 
+				type=CHORD_SYMBOL;
+			else
+				type=ANNOTATION;
+			++i;
+			while(i<a.length && a[i]!='"') ++i;
+			if(i<a.length) ++i; else System.out.println("unbalanced quote (\") in music line:'"+name+"'");
+			break;
+		case '.':
+			type=DECORATION;
+			++i;
+			break;
+		case '+':
+			type=DECORATION;
+			++i;
+			while(i<a.length && "+[:]| \t".indexOf(a[i])<0) ++i;
+			if(i<a.length && a[i]=='+') ++i;
+			else
+				System.out.println("unbalanced decoration delimiter ("+a[0]+") in music line:'"+name+"'");
+			break;
+		case '!':
+			type=DECORATION;
+			++i;
+			while(i<a.length && "![:]| \t".indexOf(a[i])<0) ++i;
+			if(i<a.length && a[i]=='!') ++i;
+			else {
+				type=LINE_BREAK;	// old school ABC 
+				i=1;
+			}
+			break;
+		case '^':
+		case '_':
+		case '=':
+		case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
+		case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
+			type=NOTE;
+			i=song.computePitch(this,a);
+			velocity=song.getTracks()[song.getTrack()].getVolume();
+		case 'x':
+		case 'z':
+		case ']':// chord close...
+			if(a[i]==']') type=CHORD_CLOSE;
+			++i;
+			this.ticks=(song.getDefaultNoteLength().getNumerator()*4*ABCSong.TICKS_PER_QUART)/song.getDefaultNoteLength().getDenominator();
+			int multiplyer=1,denominator=1,n=0;
+			while("0123456789".indexOf(a[i])>=0) {
+				n=10*n+a[i]-'0';
+				++i;
+			}
+			if(n>0) multiplyer=n;
+			if(a[i]=='/') { 
+				if("0123456789".indexOf(a[i+1])>=0) {
+					n=0;
+					++i;
+					while("0123456789".indexOf(a[i])>=0) {
+						n=10*n+a[i]-'0';
+						++i;
+					}
+					if(n>0) denominator=n;
+				}
+				else {
+					while(a[i]=='/') {
+						denominator *= 2;
+						++i;
+					}
+				}
+			}
+			this.ticks*=multiplyer;
+			this.ticks/=denominator;
+			break;
+		}
+		this.name=String.copyValueOf(a, 0, i);
+		if(type==CHORD_SYMBOL) {
+			if(!this.name.endsWith("\"")) this.name+="\"";
+			pitch=song.addChord(this.name.substring(1, this.name.length()-1));
+		}
+		else if(type==NOTE) {
+			int[] strings=song.getTracks()[song.getTrack()].getStrings();
+			setPitchStringAndFret(pitch,strings);
+		}
+		else if(type==DECORATION) {
+			if(this.name.equals(".")) 
+				pitch=STACATODOT;
+			else {
+				if(!this.name.endsWith(this.name.substring(0, 1))) this.name+=this.name.substring(0, 1);
+				pitch=decoration(this.name.substring(1,this.name.length()-1).toLowerCase());
+			}
+		}
+		else if(type==ANNOTATION) {
+			if(!this.name.endsWith(this.name.substring(0, 1))) this.name+=this.name.substring(0, 1);
+			String s=this.name.substring(2, this.name.length()-1).trim().toLowerCase();
+			pitch=0;
+			if(s.matches("al +fine")) pitch=ALFINE;
+			else if(s.matches("d\\.?s\\.?s\\.?")) pitch=DSS;
+			else if(s.matches("to +coda")) pitch=TOCODA;
+			else if(s.matches("al +coda")) pitch=ALCODA;
+			if(pitch>0) type=DECORATION;
+		}
+	}
+
+	public Object clone() {
+		ABCEvent e=new ABCEvent(this.type, this.name, this.pitch);
+		e.ticks=this.ticks;
+		e.string=this.string;
+		e.fret=this.fret;
+		e.velocity=this.velocity;
+		e.tied=this.tied;
+		e.grace=this.grace;
+		return e;
+	}
+	
+	public void setPitchStringAndFret(int pitch, int[] strings) {
+		int f=0;
+		this.pitch=pitch;
+		if(strings==null) return;
+		this.string=-1;
+		this.fret=127;
+		for(int y=0;y<strings.length;y++) { 
+			if(strings[y]<=pitch) {
+				f=pitch-strings[y];
+				if(f<this.fret) {
+					this.string=y;
+					this.fret=f;
+				}
+			}
+		}
+		if(this.string<0) {
+			// note can not be mapped, forget it
+			type=REST;
+		}
+	}
+
+	private int decoration(String d) {
+		if(d.equals("trill")) return TRILL; // "tr" (trill mark)
+		if(d.equals("lowermordent")) return LOWERMORDENT; // short /|/|/ squiggle with a vertical line through it
+		if(d.equals("uppermordent")) return UPPERMORDENT; // short /|/|/ squiggle
+		if(d.equals("mordent")) return LOWERMORDENT; // same as +lowermordent+ 
+		if(d.equals("pralltriller")) return UPPERMORDENT; // same as +uppermordent+ 
+		if(d.equals("accent")) return ACCENT; // > mark
+		if(d.equals(">")) return ACCENT; // same as +accent+ 
+		if(d.equals("emphasis")) return ACCENT; // same as +accent+ 
+		if(d.equals("fermata")) return FERMATA; // fermata or hold (arc above dot)
+		if(d.equals("invertedfermata")) return INVERTEDFERMATA; // upside down fermata
+		if(d.equals("tenuto")) return TENUTO; // horizontal line to indicate holding note for full duration
+		if(d.equals("0")) return FINGERING_0; // fingerings
+		if(d.equals("1")) return FINGERING_1; // fingerings
+		if(d.equals("2")) return FINGERING_2; // fingerings
+		if(d.equals("3")) return FINGERING_3; // fingerings
+		if(d.equals("4")) return FINGERING_4; // fingerings
+		if(d.equals("5")) return FINGERING_5; // fingerings
+		if(d.equals("plus")) return PLUS; // left-hand pizzicato, or rasp for French horns
+		if(d.equals("wedge")) return WEDGE; // small filled-in wedge mark
+		if(d.equals("open")) return OPEN; // small circle above note indicating open string or harmonic
+		if(d.equals("thumb")) return THUMB; // cello thumb symbol
+		if(d.equals("snap")) return THUMB; // snap-pizzicato mark, visually similar to +thumb+ 
+		if(d.equals("turn")) return TURN; // a turn mark
+		if(d.equals("roll")) return ROLL; // a roll mark (arc) as used in Irish music
+		if(d.equals("breath")) return BREATH; // a breath mark (apostrophe-like) after note
+		if(d.equals("shortphrase")) return SHORTPHRASE; // vertical line on the upper part of the staff
+		if(d.equals("mediumphrase")) return MEDIUMPHRASE; // same, but extending down to the centre line
+		if(d.equals("longphrase")) return LONGPHRASE; // same, but extending 3/4 of the way down
+		if(d.equals("segno")) return SEGNO; // 2 ornate s-like symbols separated by a diagonal line
+		if(d.equals("coda")) return CODA; // a ring with a cross in it
+		if(d.equalsIgnoreCase("D.S.")) return DS; // the letters D.S. (=Da Segno)
+		if(d.equalsIgnoreCase("D.C.")) return DC; // the letters D.C. (=either Da Coda or Da Capo)
+		if(d.equals("dacoda")) return DACODA; // the word "Da" followed by a Coda sign
+		if(d.equals("dacapo")) return DACAPO; // the words "Da Capo"
+		if(d.equals("fine")) return FINE; // the word "fine"
+		if(d.equals("crescendo(")) return STARTCRESCENDO; // or +<(+  start of a < crescendo mark
+		if(d.equals("<(")) return STARTCRESCENDO; // or +<(+  start of a < crescendo mark
+		if(d.equals("crescendo)")) return ENDCRESCENDO; // or +<)+  end of a < crescendo mark, placed after the last note
+		if(d.equals("<)")) return ENDCRESCENDO; // or +<)+  end of a < crescendo mark, placed after the last note
+		if(d.equals("diminuendo(")) return STARTDIMINUENDO; // or +>(+  start of a > diminuendo mark
+		if(d.equals(">(")) return STARTDIMINUENDO; // or +>(+  start of a > diminuendo mark
+		if(d.equals("diminuendo)")) return ENDDIMINUENDO; // or +>)+  end of a > diminuendo mark, placed after the last note
+		if(d.equals(">)")) return ENDDIMINUENDO; // or +>)+  end of a > diminuendo mark, placed after the last note
+		if(d.equals("pppp")) return PPPP; // +ppp+ +pp+ +p+
+		if(d.equals("ppp")) return PPP; // +ppp+ +pp+ +p+
+		if(d.equals("pp")) return PP; // +ppp+ +pp+ +p+
+		if(d.equals("p")) return P; // +ppp+ +pp+ +p+
+		if(d.equals("mp")) return MP; // +mf+ +f+ +ff+
+		if(d.equals("mf")) return MF; // +mf+ +f+ +ff+
+		if(d.equals("f")) return F; // +ffff+ +sfz+     dynamics marks
+		if(d.equals("ff")) return FF; // +ffff+ +sfz+     dynamics marks
+		if(d.equals("fff")) return FFF; // +ffff+ +sfz+     dynamics marks
+		if(d.equals("ffff")) return FFFF; // +ffff+ +sfz+     dynamics marks
+		if(d.equals("sfz")) return SFZ; // +ffff+ +sfz+     dynamics marks
+		if(d.equals("upbow")) return UPBOW; // V mark
+		if(d.equals("downbow")) return DOWNBOW; // squared n mark
+//		By extension, the following decorations have been added:
+		if(d.equals("slide")) return SLIDE; 
+		if(d.equals("turnx")) return TURNX; 
+		if(d.equals("invertedturn")) return INVERTEDTURN; 
+		if(d.equals("invertedturnx")) return INVERTEDTURNX; 
+		if(d.equals("arpeggio")) return ARPEGGIO; 
+		if(d.equals("trill(")) return STARTTRILL; 
+		if(d.equals("trill)")) return ENDTRILL; 
+		return 0;
+	}
+
+	public String toString() {
+		return name;
+	}
+	
+	public int compareTo(Object o) {
+		if(o==null) return 1;
+		if (o instanceof ABCEvent) {
+			ABCEvent e = (ABCEvent) o;
+			int i=type - e.type;
+			if(i!=0) return i;
+			if(grace && !e.grace) return 1;
+			if(e.grace && !grace) return -1;
+			if(grace) {
+				i=sequence - e.sequence;
+				if(i!=0) return i;
+			}
+			i=pitch - e.pitch;
+			if(i!=0) return i;
+			i=ticks - e.ticks;
+			if(i!=0) return i;
+			i = string - e.string;
+			if(i!=0) return i;
+			i = fret - e.fret;
+			if(i!=0) return i;
+		}
+		else return -1;
+		return 0;
+	}
+
+	/**
+	 * @return the fret
+	 */
+	public int getFret() {
+		return fret;
+	}
+
+	/**
+	 * @return the name
+	 */
+	public String getName() {
+		return name;
+	}
+
+	/**
+	 * @return the name
+	 */
+	public String getParm() {
+		return name;
+	}
+
+	/**
+	 * @return the pitch
+	 */
+	public int getPitch() {
+		return pitch;
+	}
+
+	/**
+	 * @return the pitch
+	 */
+	public int getValue() {
+		return pitch;
+	}
+
+	/**
+	 * @return the string
+	 */
+	public int getString() {
+		return string;
+	}
+
+	/**
+	 * @return the ticks
+	 */
+	public int getTicks() {
+		return ticks;
+	}
+
+	/**
+	 * @return the type
+	 */
+	public int getType() {
+		return type;
+	}
+
+	/**
+	 * @param ticks the ticks to set
+	 */
+	public void setTicks(int ticks) {
+		this.ticks = ticks;
+	}
+
+	public int getDecoration() {
+		return pitch;
+	}
+
+	public int getChordnum() {
+		return pitch;
+	}
+
+	public void alterString(int string, int[] strings) {
+		if(string>=0 && string<strings.length) {
+			this.string=string;
+			this.fret=(byte) (pitch-strings[string]);
+		}
+	}
+
+	public void setType(int type) {
+		this.type=type;
+	}
+
+	public void setValue(int value) {
+		this.pitch=value;
+	}
+
+	public void setNumerator(int value) {
+		this.pitch=value;
+	}
+
+	public void setDenominator(int d) {
+		this.fret=d;
+	}
+
+	public int getVelocity() {
+		return this.velocity;
+	}
+
+	/**
+	 * @param velocity the velocity to set
+	 */
+	public void setVelocity(int velocity) {
+		this.velocity = velocity;
+	}
+
+	public void setTied(boolean b) {
+		tied=b;
+	}
+
+	/**
+	 * @return the tied
+	 */
+	public boolean isTied() {
+		return tied;
+	}
+
+	public void setToEnd(boolean b) {
+		tied=b;
+	}
+
+	/**
+	 * @return the toEnd
+	 */
+	public boolean isToEnd() {
+		return tied;
+	}
+
+	public int getVariant() {
+		return pitch;
+	}
+
+	public int getNumerator() {
+		return pitch;
+	}
+
+	public int getDenominator() {
+		return fret;
+	}
+
+	public void setGrace(boolean b) {
+		this.grace=b;
+	}
+
+	/**
+	 * @return the grace
+	 */
+	public boolean isGrace() {
+		return grace;
+	}
+
+	public int getSequence() {
+		return sequence;
+	}
+
+	public void setSequence(int sequence) {
+		this.sequence = sequence;
+	}
+
+	public boolean isTriplet() {
+		return triplet;
+	}
+
+	public void setTriplet(boolean triplet) {
+		this.triplet = triplet;
+	}
+
+	public int getTripletP() {
+		return tripletP;
+	}
+
+	public void setTripletP(int tripletP) {
+		this.tripletP = tripletP;
+	}
+
+	public int getTripletQ() {
+		return tripletQ;
+	}
+
+	public void setTripletQ(int tripletQ) {
+		this.tripletQ = tripletQ;
+	}
+
+	public int getTripletR() {
+		return tripletR;
+	}
+
+	public void setTripletR(int tripletR) {
+		this.tripletR = tripletR;
+	}
+
+	public void setTriplet(int p, int q, int r) {
+		triplet=true;
+		tripletP=p;
+		tripletQ=q;
+		tripletR=r;
+	}
+
+	public String[] getLyrics() {
+		if(this.lyrics==null) return null;
+		String[] s=new String[lyrics.size()];
+		for(int i=0;i<s.length;i++) s[i]=(String)lyrics.get(i);
+		return s;
+	}
+
+	public void setLyrics(String lyrics) {
+		if(this.lyrics==null) this.lyrics=new ArrayList();
+		this.lyrics.add(lyrics);
+	}
+
+	/**
+	 * @return the stacato
+	 */
+	public boolean isStacato() {
+		return stacato;
+	}
+
+	/**
+	 * @param stacato the stacato to set
+	 */
+	public void setStacato(boolean stacato) {
+		this.stacato = stacato;
+	}
+
+	/**
+	 * @return the legato
+	 */
+	public boolean isLegato() {
+		return legato;
+	}
+
+	/**
+	 * @param legato the legato to set
+	 */
+	public void setLegato(boolean legato) {
+		this.legato = legato;
+	}
+
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCInfo.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCInfo.java
new file mode 100644
index 0000000..874b5e6
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCInfo.java
@@ -0,0 +1,216 @@
+package org.herac.tuxguitar.io.abc.base;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class ABCInfo {
+	
+	private String title;
+	private String subtitle;
+	private String comments;
+	private String componist;
+	private String artist;
+	private String area;
+	private String book;
+	private String discography;
+	private String filename;
+	private String group;
+	private List history;
+	private List note;
+	private String information;
+	private String origin;
+	private String source;
+	private String transcriptor;
+	
+	public ABCInfo(String title, String subtitle, String comments) {
+		this.title = title;
+		this.subtitle = subtitle;
+		this.comments = comments;
+	}
+	
+	public String getComments() {
+		return this.comments;
+	}
+	
+	public String getSubtitle() {
+		return this.subtitle;
+	}
+	
+	public String getTitle() {
+		return this.title;
+	}
+	
+	public String getNotes() {
+		if(this.note==null) return null;
+		String s="";
+		for(int i=0;i<note.size();i++) s+=(String)note.get(i)+"\n";
+		return s;
+	}
+	
+	public String toString(){
+		String string = new String("[INFO]");
+		string += "\n     Title:       " + getTitle();
+		string += "\n     Subtitle:    " + getSubtitle();
+		string += "\n     Comments:    " + getComments();
+		if(this.getNotes() != null){
+			string += "\n     Notes:       " + getNotes();
+		}
+		return string;
+	}
+
+	/**
+	 * @param comments the comments to set
+	 */
+	public void setComments(String comments) {
+		this.comments = comments;
+	}
+
+	/**
+	 * @param subtitle the subtitle to set
+	 */
+	public void setSubtitle(String subtitle) {
+		this.subtitle = subtitle;
+	}
+
+	/**
+	 * @param title the title to set
+	 */
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public void setArtist(String string) {
+		this.artist=string;
+	}
+
+	/**
+	 * @return the artist
+	 */
+	public String getArtist() {
+		return artist;
+	}
+
+	public void setComponist(String string) {
+		this.componist=string;
+	}
+
+	public void setArea(String string) {
+		this.area=string;
+	}
+
+	/**
+	 * @return the area
+	 */
+	public String getArea() {
+		return area;
+	}
+	/**
+	 * @return the componist
+	 */
+	public String getComponist() {
+		return componist;
+	}
+
+	public void setBook(String string) {
+		this.book=string;
+	}
+	/**
+	 * @return the book 
+	 */
+	public String getBook() {
+		return book;
+	}
+
+	public void setDiscography(String string) {
+		this.discography=string;
+	}
+	/**
+	 * @return the discography 
+	 */
+	public String getDiscography() {
+		return discography;
+	}
+
+	public void setFilename(String string) {
+		this.filename=string;
+	}
+
+	/**
+	 * @return the filename
+	 */
+	public String getFilename() {
+		return filename;
+	}
+
+	public void setGroup(String string) {
+		this.group = string;
+	}
+
+	/**
+	 * @return the group
+	 */
+	public String getGroup() {
+		return group;
+	}
+
+	public void addHistory(String string) {
+		if(history==null) history=new ArrayList();
+		history.add(string);
+	}
+
+	public void setInformation(String string) {
+		this.information=string;
+	}
+
+	/**
+	 * @return the history
+	 */
+	public List getHistory() {
+		return history;
+	}
+
+	/**
+	 * @return the information
+	 */
+	public String getInformation() {
+		return information;
+	}
+
+	public void addNote(String string) {
+		if(note==null) note=new ArrayList();
+		note.add(string);
+	}
+
+	public void setOrigin(String string) {
+		this.origin=string;
+	}
+
+	public void setSource(String string) {
+		this.source=string;
+	}
+
+	public void setTranscriptor(String string) {
+		this.transcriptor = string;
+	}
+
+	/**
+	 * @return the origin
+	 */
+	public String getOrigin() {
+		return origin;
+	}
+
+	/**
+	 * @return the source
+	 */
+	public String getSource() {
+		return source;
+	}
+
+	/**
+	 * @return the transcriptor
+	 */
+	public String getTranscriptor() {
+		return transcriptor;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCLocation.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCLocation.java
new file mode 100644
index 0000000..f94ee5f
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCLocation.java
@@ -0,0 +1,167 @@
+/**
+ * 
+ */
+package org.herac.tuxguitar.io.abc.base;
+
+/**
+ * @author peter
+ *
+ */
+public class ABCLocation implements Comparable {
+
+	private String part;
+	private int ticks;
+	private int measure;
+	private int track;
+	private ABCEvent event;
+	private ABCChord chord;
+	private int tempo;
+	private int legato;
+	private boolean tied;
+
+	public ABCLocation(String part, int track, int measure, int ticks, ABCChord chord, ABCEvent event) {
+		this.part = part;
+		this.track = track;
+		this.measure = measure;
+		this.ticks = ticks;
+		this.chord = chord;
+		this.event = event;
+	}
+
+	public String toString() {
+		String s;
+		if(part==null) s="";
+		else s="Part "+part+" ";
+		s+="Track "+String.valueOf(100+track).substring(1)+":";
+		s+="Measure "+String.valueOf(100+measure).substring(1)+":";
+		s+="Tick "+String.valueOf(1000+ticks).substring(1)+":";
+		s+=event.getName();
+		return s;
+	}
+	
+	/**
+	 * @return the measure
+	 */
+	public int getMeasure() {
+		return measure;
+	}
+
+	/**
+	 * @return the part
+	 */
+	public String getPart() {
+		return part;
+	}
+
+	/**
+	 * @return the ticks
+	 */
+	public int getTicks() {
+		return ticks;
+	}
+
+	/**
+	 * @return the track
+	 */
+	public int getTrack() {
+		return track;
+	}
+
+	/**
+	 * @return the event
+	 */
+	public ABCEvent getEvent() {
+		return event;
+	}
+
+	public int compareTo(Object o) {
+		if(o==null) return 1;
+		if (o instanceof ABCLocation) {
+			ABCLocation e = (ABCLocation) o;
+			if(part==null || e.part==null) {
+				if(part!=null) return 1;
+				if(e.part!=null) return -1;
+			}
+			else {
+				int i=part.compareTo(e.part);
+				if(i!=0) return i;
+			}
+			int i=track - e.track;
+			if(i!=0) return i;
+			i=measure - e.measure;
+			if(i!=0) return i;
+			i=ticks - e.ticks;
+			if(i!=0) return i;
+			i = event.compareTo(e.event);
+			if(i!=0) return i;
+		}
+		else return -1;
+		return 0;
+	}
+
+	/**
+	 * @param measure the measure to set
+	 */
+	public void setMeasure(int measure) {
+		this.measure = measure;
+	}
+
+	/**
+	 * @param part the part to set
+	 */
+	public void setPart(String part) {
+		this.part = part;
+	}
+
+	/**
+	 * @param ticks the ticks to set
+	 */
+	public void setTicks(int ticks) {
+		this.ticks = ticks;
+	}
+
+	public void setChord(ABCChord chord) {
+		this.chord=chord;
+	}
+
+	/**
+	 * @return the chord
+	 */
+	public ABCChord getChord() {
+		return chord;
+	}
+
+	public void setTied(boolean tied) {
+		this.tied=tied;
+	}
+
+	/**
+	 * @return the tied
+	 */
+	public boolean isTied() {
+		return tied;
+	}
+
+	public int getTempo() {
+		return tempo;
+	}
+
+	public void setTempo(int tempo) {
+		this.tempo = tempo;
+	}
+
+	/**
+	 * @return the legato
+	 */
+	public int getLegato() {
+		return legato;
+	}
+
+	/**
+	 * @param legato the legato to set
+	 */
+	public void setLegato(int legato) {
+		this.legato = legato;
+	}
+
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCMacro.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCMacro.java
new file mode 100644
index 0000000..1769eba
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCMacro.java
@@ -0,0 +1,222 @@
+/**
+ * 
+ */
+package org.herac.tuxguitar.io.abc.base;
+
+/**
+ * @author peter
+ * <p>
+ * <b>Macros</b>
+ * <p>
+ *  This standard defines an optional system of macros which is principally used to define the way in which ornament symbols 
+ *  such as the tilde ~ are played (although it could be used for many other purposes).
+ *  <p> 
+ *  Software implementing these macros, should first expand the macros defined in this section, 
+ *  and only afterwards apply any relevant U: replacement (see section Redefinable symbols). 
+ *  <p>
+ *  When these macros are stored in an ABC Header file (see section Include field), they may form a powerful library. 
+ *  <p>
+ *  There are two kinds of macro, called Static and Transposing.
+ *  <p> 
+ * <b>Static macros</b>
+ * <p>
+ *  You define a static macro by writing into the tune header something like this:
+ *  <p> 
+ *  m: ~G3 = G{A}G{F}G
+ *  <p>
+ *  When you play the tune, the program searches the tune header for macro definitions, 
+ *  then does a search and replace on its internal copy of the text before passing that 
+ *  to the parser which plays the tune. Every occurence of ~G3 in the tune is replaced 
+ *  by G{A}G{F}G, and that is what gets played. Only ~G3 notes are affected,
+ *  ~G2, ~g3, ~F3 etc. are ignored. 
+ *  <p>
+ *  You can put in as many macros as you want, and indeed, if you only use static macros 
+ *  you will need to write a separate macro for each combination of pitch and note-length. 
+ *  Here is an example:
+ *  <pre> 
+ * X:50
+ * T:Apples in Winter
+ * S:Trad, arr. Paddy O'Brien
+ * R:jig
+ * E:9
+ * m: ~g2 = {a}g{f}g
+ * m: ~D2 = {E}D{C}D
+ * M:6/8
+ * K:D
+ * G/2A/2|BEE dEE|BAG FGE|~D2D FDF|ABc ded|
+ * BEE BAB|def ~g2 e|fdB AGF|GEE E2:|
+ * d|efe edB|ege fdB|dec dAF|DFA def|
+ * [1efe edB|def ~g2a|bgb afa|gee e2:|
+ * [2edB def|gba ~g2e|fdB AGF|GEE E2||
+ * </pre>
+ * <p>
+ *  Here I have put in two static macros, since there are two different notes in the tune marked with a tilde. 
+ *  <p>
+ *  A static macro definition consists of four parts:
+ *  <ul><li> 
+ *  the field identifier m:
+ *  </li><li>
+ *  the target string - e.g ~G3
+ *  </li><li>
+ *  the equals sign
+ *  </li><li>
+ *  the replacement string - e.g. G{A}G{F}G
+ *  </li></ul>
+ *  <p>
+ *  The target string can consist of any string up to 31 characters in length, 
+ *  except that it may not include the letter 'n', for reasons which will become obvious later. 
+ *  You don't have to use the tilde, but of course if you don't use a legal combination of abc, 
+ *  other programs will not be able to play your tune. 
+ *  <p>
+ *  The replacement string consists of any legal abc text up to 200 characters in length. 
+ *  It's up to you to ensure that the target and replacement strings occupy the same time 
+ *  interval (the program does not check this). Both the target and replacement strings may 
+ *  have spaces embedded if necessary, but leading and trailing spaces are stripped off so 
+ *  <p>
+ * m:~g2={a}g{f}g
+ * <p>
+ *  is perfectly OK, although less readable. 
+ * <p><b>Transposing macros</b>
+ *  If your tune has ornaments on lots of different notes, and you want them to all play 
+ *  with the same ornament pattern, you can use transposing macros to achieve this. 
+ *  Transposing macros are written in exactly the same way as static macros, except that 
+ *  the note symbol in the target string is represented by 'n' (meaning any note) and the 
+ *  note symbols in the replacement string by other letters (h to z) which are interpreted 
+ *  according to their position in the alphabet relative to n.
+ *  <p> 
+ *  So, for example I could re-write the static macro m: ~G3 = G{A}G{F}G as a transposing 
+ *  macro m: ~n3 = n{o}n{m}n. When the transposing macro is expanded, any note of the form 
+ *  ~n3 will be replaced by the appropriate pattern of notes. 
+ *  Notes of the form ~n2 (or other lengths) will be ignored, so you will have to write 
+ *  separate transposing macros for each note length. 
+ *  <p>
+ *  Here's an example:
+ *  <pre> 
+ * X:35
+ * T:Down the Broom
+ * S:Trad, arr. Paddy O'Brien
+ * R:reel
+ * M:C|
+ * m: ~n2 = (3o/n/m/ n                % One macro does for all four rolls
+ * K:ADor
+ * EAAG~A2 Bd|eg~g2 egdc|BGGF GAGE|~D2B,D GABG|
+ * EAAG ~A2 Bd|eg~g2 egdg|eg~g2 dgba|gedB BAA2:|
+ * ~a2ea agea|agbg agef|~g2dg Bgdg|gfga gede|
+ * ~a2 ea agea|agbg ageg|dg~g2 dgba|gedB BA A2:|
+ * </pre>
+ * <p>
+ *  A transposing macro definition consists of four parts:
+ *  <ul><li> 
+ *  the field identifier m:
+ *  </li><li>
+ *  the target string - e.g ~n3
+ *  </li><li>
+ *  the equals sign
+ *  </li><li>
+ *  the replacement string - e.g. n{o}n{m}n
+ *  </li></ul>
+ *  <p>
+ *  The target string can consist of any string up to 31 characters in length, 
+ *  except that it must conclude with the letter 'n', followed by a number 
+ *  which specifies the note length. 
+ *  <p>
+ *  The replacement string consists of any legal abc text up to 200 characters in length, 
+ *  where note pitches are defined by the letters h - z, the pitches being interpreted 
+ *  relative to that of the letter n. Once again you should ensure that the time intervals match. 
+ *  You should not use accidentals in transposing macros (I can't for the life of me think of a way 
+ *  to transpose ~=a3 or ~^G2 which will work correctly under all circumstances, so if you need to 
+ *  do this you must use a static macro.) 
+ * <p>
+ * @see ABCSymbol
+ */
+public class ABCMacro {
+	
+	private static final String N_SCALE = 
+		"D, E, F, G, A, B, C  D  E  F  G  A  B  c  d  e  f  g  a  b  c' d' e' f' g' a' b' c''d''e''f''g''";
+	//   h  i  j  k  l  m  n                                      n  o  p  q  r  s  t  u  v  w  x  y  z  
+	private String name;
+	private String symbol;
+	private boolean valid;
+	private String len;
+	private char n;
+	private int targetlen;
+	private String nmatch;
+
+	public ABCMacro(String string) {
+		this.valid=false;
+		int i=string.indexOf('=');
+		if(i>0 && string.substring(0, i).trim().length()<32) {
+			this.name=string.substring(0, i).trim();
+			this.symbol=string.substring(i+1).trim();
+			this.targetlen=this.name.length();
+			if(this.name.matches(".*[A-Ga-gn][1-9][0-9]*")) {
+				this.valid=true;
+				this.len="";
+				while(this.name.matches(".*[0-9]+")) {
+					this.len  = this.name.substring(this.name.length()-1)+this.len;
+					this.name = this.name.substring(0, this.name.length()-1);
+				}
+				this.n = this.name.charAt(this.name.length()-1);
+				this.name=this.name.substring(0, this.name.length()-1);
+				if(this.n=='n')
+					this.nmatch="[A-Ga-g]"+len+".*";
+				else
+					this.nmatch=String.valueOf(this.n);
+			}
+		}
+		
+	}
+
+	public String execute(String line) {
+		int i=0;
+		char q=0;
+		while(i<line.length()) {
+			switch(line.charAt(i)) {
+			case '"': 
+				if(q=='"') q=0;
+				else if(q==0) q='"';
+				break;
+			case '+':
+				if(q=='+') q=0;
+				else if(q==0) q='+';
+				break;
+			default:
+				if(q==0 
+				&& line.substring(i).length()>=targetlen 
+				&& line.substring(i).startsWith(name)
+				&& line.substring(i+name.length()).matches(nmatch)) {
+					line=line.substring(0,i)+invoke(line.charAt(i+name.length()))+line.substring(i+targetlen);
+					i+=symbol.length()-1;
+				}
+				break;
+			}
+			++i;
+		}
+		return line;
+	}
+
+	private String invoke(char note) {
+		if(this.n!='n') return this.symbol;
+		String s="";
+		for(int i=0;i<symbol.length();i++) {
+			s+=replacement(symbol.charAt(i),note);
+		}
+		return s;
+	}
+
+	private String replacement(char c, char note) {
+		int i="hijklmnopqrstuvwxyz".indexOf(c);
+		if(i<0) return String.valueOf(c);
+		i=N_SCALE.indexOf(note+"  ")+3*(c-'n');
+		return N_SCALE.substring(i, i+3).trim();
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public boolean isValid() {
+		return valid;
+	}
+
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.java
new file mode 100644
index 0000000..598a0f3
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCOctaveDatabase.java
@@ -0,0 +1,33 @@
+/**
+ * 
+ */
+package org.herac.tuxguitar.io.abc.base;
+
+import java.util.Properties;
+
+/**
+ * @author peter
+ *
+ */
+public class ABCOctaveDatabase {
+
+	private Properties database;
+
+	public ABCOctaveDatabase() {
+		this.database=new Properties();
+	}
+	
+	public void store(int i, int pitch) {
+		this.database.setProperty(String.valueOf(pitch), String.valueOf(i));
+	}
+
+	public int recall(int pitch) {
+		String r=this.database.getProperty(String.valueOf(pitch), "0");
+		return Integer.parseInt(r);
+	}
+
+	public void reset() {
+		this.database.clear();
+	}
+
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCRepeat.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCRepeat.java
new file mode 100644
index 0000000..55c6560
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCRepeat.java
@@ -0,0 +1,27 @@
+package org.herac.tuxguitar.io.abc.base;
+
+public class ABCRepeat {
+	
+	private int data1;
+	
+	private int data2;
+	
+	public ABCRepeat(int data1,int data2){
+		this.data1 = data1;
+		this.data2 = data2;
+	}
+	
+	public int getData1() {
+		return this.data1;
+	}
+	
+	public int getData2() {
+		return this.data2;
+	}
+	
+	public String toString(){
+		String string = new String("[REPEAT]     ");
+		string += (this.getData1() + "-" + this.getData2());
+		return string;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCSong.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCSong.java
new file mode 100644
index 0000000..4b03a05
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCSong.java
@@ -0,0 +1,2480 @@
+package org.herac.tuxguitar.io.abc.base;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGVelocities;
+
+public class ABCSong {
+
+	public static final int TICKS_PER_QUART = 192;
+
+	// propagate_accidentals constants
+	private static final int PITCH = 0;
+	private static final int OCTAVE = 1;
+	private static final int NOT = 2;
+	
+	// buddy track types
+	private static final String DRONE = "drone";
+	private static final String DRUMS = "drums";
+	private static final String BASE = "base";
+	private static final String CHORDS = "chords";
+
+	private int strings;
+	private int measures;
+	private ABCInfo info;
+	private int tempo;
+	private ABCTimeSignature timeSignature;
+	private ABCRepeat[] repeats;
+	private ABCText[] texts;
+	private ABCChord[] chords;
+	private ABCTrack[] tracks;
+	private List tsChanges;
+	private ABCTimeSignature defaultNoteLength;
+	private String key;
+	private String parts;
+	private String rhythm;
+	private List words;
+	private List redefinable;
+	private List macro;
+	private int x;
+	private String part;
+	private List symbols;
+	private List lyrics;
+	private List voice;
+	private int track;
+	private List remarks;
+	private int ticks;
+	private int measure;
+	private int ticksperbar;
+	private ArrayList events;
+	private int lineloc;
+	private String scale;
+	private String gchord;
+	private String drum;
+	private String drone;
+	private int chordprog;
+	private int chordvol;
+	private int bassprog;
+	private int bassvol;
+	private boolean gchordon;
+	private boolean drumon;
+	private boolean droneon;
+	private ArrayList chordsList;
+	private ArrayList voiceloc;
+	private int keySignature;
+	private ABCChord chord;
+	private int tickspergchord;
+	private int chordMeasure;
+	private int chordTicks;
+	private int instrumentOffset;
+	private int basevoice;
+	private int chordvoice;
+	private int drumvoice;
+	private int dronevoice;
+	private boolean tied;
+	private ABCEvent[] drumnotes;
+	private List tmpsChanges;
+	private ABCEvent[] dronenotes;
+	private String beatstring;
+	private int[] beat;
+	private int propagate_accidentals;
+	private ABCOctaveDatabase octaveDatabase;
+	private boolean sorted;
+
+	private int legato;
+	
+	public ABCSong(){
+		this.tsChanges = new ArrayList();
+		this.tmpsChanges = new ArrayList();
+		this.part=null;
+		this.track=0;
+		this.measure=0;
+		this.ticks=0;
+		this.scale=" C D EF G A Bc d ef g a b ";
+		this.tied=false;
+		this.legato=0;
+		this.chord=null;
+		this.gchord=null;
+		this.drum=null;
+		this.drone=null;
+		this.gchordon=true;
+		this.droneon=false;
+		this.drumon=false;
+		this.chordvol=127;
+		this.bassvol=127;
+		basevoice=-1;
+		chordvoice=-1;
+		drumvoice=-1;
+		dronevoice=-1;
+		this.sorted=false;
+	}
+	
+	public ABCChord[] getChords() {
+		if(this.chords==null && this.chordsList==null) return null;
+		if(this.chords==null) {
+			this.chords=new ABCChord[this.chordsList.size()];
+			for(int i=0;i<chords.length;i++) 
+				this.chords[i]=(ABCChord) this.chordsList.get(i);
+		}
+		return this.chords;
+	}
+	
+	public void setChords(int length) {
+		this.chords = new ABCChord[length];
+	}
+	
+	public void setChord(int index,ABCChord chord) {
+		this.chords[index] = chord;
+	}
+	
+	public ABCInfo getInfo() {
+		return this.info;
+	}
+	
+	public ABCInfo setInfo(ABCInfo info) {
+		this.info = info;
+		return this.info;
+	}
+	
+	public ABCRepeat[] getRepeats() {
+		return this.repeats;
+	}
+	
+	public void setRepeats(int length) {
+		this.repeats = new ABCRepeat[length];
+	}
+	
+	public void setRepeat(int index,ABCRepeat repeat) {
+		this.repeats[index] = repeat;
+	}
+	
+	public ABCText[] getTexts() {
+		return this.texts;
+	}
+	
+	public void setTexts(int length) {
+		this.texts = new ABCText[length];
+	}
+	
+	public void setText(int index,ABCText text) {
+		this.texts[index] = text;
+	}
+	
+	public ABCTrack[] getTracks() {
+		if(voice==null) addVoice("1 clef=treble");
+		this.tracks = new ABCTrack[voice.size()];
+		for(int i=0;i<tracks.length;i++) {
+			tracks[i]=(ABCTrack)voice.get(i);
+		}
+		return this.tracks;
+	}
+	
+	public void setTracks(int length) {
+		this.tracks = new ABCTrack[length];
+	}
+	
+	public void setTrack(int index,ABCTrack track) {
+		this.tracks[index] = track;
+	}
+	
+	public ABCTimeSignature getTimeSignature() {
+		return this.timeSignature;
+	}
+	
+	public void setTimeSignature(ABCTimeSignature timeSignature) {
+		this.timeSignature = timeSignature;
+		if(timeSignature==null) return;
+		this.ticksperbar = (this.timeSignature.getNumerator() * 4 * TICKS_PER_QUART)/this.timeSignature.getDenominator();
+		if(gchord==null) {
+			String t=timeSignature.toString();
+			// see abcplus_en-1.1.0.pdf page 66
+			if(t.equals("4/4")) gchord="fzczfzcz";
+			else if(t.equals("3/4")) gchord="fzczcz";
+			else if(t.equals("6/8")) gchord="fzcfzc";
+			else if(t.equals("9/8")) gchord="fzcfzcfzc";
+			else if(t.equals("12/8")) gchord="fzcfzcfzcfzc";
+		}
+		this.tickspergchord=getTickspergchord();
+		addTimeSignatureChange(new ABCTimeSignatureChange(this.measure,timeSignature));
+	}
+	
+	private int getTickspergchord() {
+		if(gchord==null) return 0;
+		char[] g=gchord.toCharArray();
+		int n=0;
+		for(int i=0;i<g.length;i++) {
+			if(g[i]>'1' && g[i]<='9') n+=g[i]-'1';
+			else n++;
+		}
+		if(n<1) return 0;
+		return ticksperbar/n;
+	}
+
+	public int getTempo() {
+		return this.tempo;
+	}
+	
+	public int getStrings() {
+		return this.strings;
+	}
+	
+	public void setStrings(int strings) {
+		this.strings = strings;
+	}
+	
+	public int getMeasures() {
+		return this.measures;
+	}
+	
+	public void addTempoChange(ABCTempoChange tChange) {
+		for(int i=0;i<this.tmpsChanges.size();i++) {
+			ABCTempoChange tc = (ABCTempoChange)this.tmpsChanges.get(i);
+			if(tc.getMeasure()==tChange.getMeasure()) {
+				if(tc.getTempo()!=tChange.getTempo()) {
+					this.tmpsChanges.remove(i);
+					this.tmpsChanges.add(i, tChange);
+				}
+				return;
+			}
+		}
+		this.tmpsChanges.add(tChange);
+	}
+	
+	public void addTimeSignatureChange(ABCTimeSignatureChange tsChange) {
+		int n=tsChange.getTimeSignature().getNumerator();
+		int d=tsChange.getTimeSignature().getDenominator();
+		for(int i=0;i<this.tsChanges.size();i++) {
+			ABCTimeSignatureChange tsc = (ABCTimeSignatureChange)this.tsChanges.get(i);
+			if(tsc.getMeasure()==tsChange.getMeasure()) {
+				int n1=tsc.getTimeSignature().getNumerator();
+				int d1=tsc.getTimeSignature().getDenominator();
+				if(n1!=n || d1!=d) {
+					this.tsChanges.remove(i);
+					this.tsChanges.add(i, tsChange);
+				}
+				return;
+			}
+		}
+		this.tsChanges.add(tsChange);
+	}
+	
+	public ABCTimeSignature getTimeSignature(int measure) {
+		Iterator it = this.tsChanges.iterator();
+		ABCTimeSignatureChange last = null;
+		while(it.hasNext()){
+			ABCTimeSignatureChange change = (ABCTimeSignatureChange)it.next();
+			if(change.getMeasure() == measure){
+				return change.getTimeSignature();
+			}
+			if(change.getMeasure() < measure) {
+				if(last==null) last=change;
+				else if(last.getMeasure() < change.getMeasure()) last=change;
+			}
+		}
+		if(last==null)
+			return getTimeSignature();
+		return last.getTimeSignature();
+	}
+	
+	public int getTempo(int measure) {
+		Iterator it = this.tmpsChanges.iterator();
+		ABCTempoChange last = null;
+		while(it.hasNext()){
+			ABCTempoChange change = (ABCTempoChange)it.next();
+			if(change.getMeasure() == measure){
+				return change.getTempo();
+			}
+			if(change.getMeasure() < measure) {
+				if(last==null) last=change;
+				else if(last.getMeasure() < change.getMeasure()) last=change;
+			}
+		}
+		if(last==null)
+			return getTempo();
+		return last.getTempo();
+	}
+
+	public String toString(){
+		String string = new String("[SONG] *** ABC file format ***\n");
+		string +=  (this.getInfo().toString() + "\n");
+		string +=  (new ABCTempo(this.getTempo()).toString() + "\n");
+		for(int i = 0; i < this.repeats.length; i ++){
+			string +=  (this.repeats[i].toString() + "\n");
+		}
+		for(int i = 0; i < this.texts.length; i ++){
+			string +=  (this.texts[i].toString() + "\n");
+		}
+		for(int i = 0; i < this.chords.length; i ++){
+			string +=  (this.chords[i].toString() + "\n");
+		}
+		for(int i = 0; i < this.tracks.length; i ++){
+			string +=  (this.tracks[i].toString() + "\n");
+		}
+		return string;
+	}
+
+	public void setTitle(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) setInfo(new ABCInfo(string,"",""));
+		else info.setTitle(string);
+	}
+
+	public void setComments(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) setInfo(new ABCInfo("","",string));
+		else info.setComments(string);
+	}
+
+	public void setArtist(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setArtist(string);
+	}
+
+	public void setComponist(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setComponist(string);
+	}
+
+	public void setArea(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setArea(string);
+	}
+
+	public void setBook(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setBook(string);
+	}
+
+	public void setDiscography(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setDiscography(string);
+	}
+
+	public void setDefaultNoteLength(ABCTimeSignature signature) {
+		this.defaultNoteLength=signature;		
+	}
+
+	/**
+	 * @return the defaultNoteLength
+	 */
+	public ABCTimeSignature getDefaultNoteLength() {
+		return defaultNoteLength;
+	}
+
+	public void setFilename(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setFilename(string);
+	}
+
+	public void setGroup(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setGroup(string);
+	}
+
+	public void addHistory(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.addHistory(string);
+	}
+
+	public void setInformation(String string) {
+		if(string.toUpperCase().startsWith("MIDI"))
+			midiCommand(string.replaceFirst("[mM][iI][dD][iI]\\s*=?"," ").trim());
+		else {
+			ABCInfo info=getInfo();
+			if(info==null) info=setInfo(new ABCInfo("","",""));
+			info.setInformation(string);
+		}
+	}
+/*
+Key Sig     Major   Minor    Mix     Dor     Phr     Lyd     Loc
+            Ion     Aeo
+
+7 sharps:   C#      A#m      G#Mix   D#Dor   E#Phr   F#Lyd   B#Loc
+6 sharps:   F#      D#m      C#Mix   G#Dor   A#Phr   BLyd    E#Loc
+5 sharps:   B       G#m      F#Mix   C#Dor   D#Phr   ELyd    A#Loc
+4 sharps:   E       C#m      BMix    F#Dor   G#Phr   ALyd    D#Loc
+3 sharps:   A       F#m      EMix    BDor    C#Phr   DLyd    G#Loc
+2 sharps:   D       Bm       AMix    EDor    F#Phr   GLyd    C#Loc
+1 sharp :   G       Em       DMix    ADor    BPhr    CLyd    F#Loc
+0 sharps:   C       Am       GMix    DDor    EPhr    FLyd    BLoc
+1 flat  :   F       Dm       CMix    GDor    APhr    BbLyd   ELoc
+2 flats :   Bb      Gm       FMix    CDor    DPhr    EbLyd   ALoc
+3 flats :   Eb      Cm       BbMix   FDor    GPhr    AbLyd   DLoc
+4 flats :   Ab      Fm       EbMix   BbDor   CPhr    DbLyd   GLoc
+5 flats :   Db      Bbm      AbMix   EbDor   FPhr    GbLyd   CLoc
+6 flats :   Gb      Ebm      DbMix   AbDor   BbPhr   CbLyd   FLoc
+7 flats :   Cb      Abm      GbMix   DbDor   EbPhr   FbLyd   BbLoc
+ */
+	public void setKey(String string) {
+		this.key=string;
+		resetScale();
+	}
+	
+	public void resetScale() {
+		final String[] scales={
+				"7 sharps:   C#      A#m      G#Mix   D#Dor   E#Phr   F#Lyd   B#Loc ",
+				"6 sharps:   F#      D#m      C#Mix   G#Dor   A#Phr   BLyd    E#Loc ",
+				"5 sharps:   B       G#m      F#Mix   C#Dor   D#Phr   ELyd    A#Loc ",
+				"4 sharps:   E       C#m      BMix    F#Dor   G#Phr   ALyd    D#Loc ",
+				"3 sharps:   A       F#m      EMix    BDor    C#Phr   DLyd    G#Loc ",
+				"2 sharps:   D       Bm       AMix    EDor    F#Phr   GLyd    C#Loc ",
+				"1 sharp :   G       Em       DMix    ADor    BPhr    CLyd    F#Loc ",
+				"0 sharps:   C       Am       GMix    DDor    EPhr    FLyd    BLoc  ",
+				"1 flat  :   F       Dm       CMix    GDor    APhr    BbLyd   ELoc  ",
+				"2 flats :   Bb      Gm       FMix    CDor    DPhr    EbLyd   ALoc  ",
+				"3 flats :   Eb      Cm       BbMix   FDor    GPhr    AbLyd   DLoc  ",
+				"4 flats :   Ab      Fm       EbMix   BbDor   CPhr    DbLyd   GLoc  ",
+				"5 flats :   Db      Bbm      AbMix   EbDor   FPhr    GbLyd   CLoc  ",
+				"6 flats :   Gb      Ebm      DbMix   AbDor   BbPhr   CbLyd   FLoc  ",
+				"7 flats :   Cb      Abm      GbMix   DbDor   EbPhr   FbLyd   BbLoc "
+		};
+		final String[] keyscales={
+				"7 sharps:  C D EF G A Bc d ef g a b",
+				"6 sharps:  C D EF G AB c d ef g ab ",
+				"5 sharps:  C DE F G AB c de f g ab ",
+				"4 sharps:  C DE F GA B c de f ga b ",
+				"3 sharps:  CD E F GA B cd e f ga b ",
+				"2 sharps:  CD E FG A B cd e fg a b ",
+				"1 sharp : C D E FG A Bc d e fg a b ",
+				"0 sharps: C D EF G A Bc d ef g a b ",
+				"1 flat  : C D EF G AB c d ef g ab  ",
+				"2 flats : C DE F G AB c de f g a b ",
+				"3 flats : C DE F GA B c de f ga b  ",
+				"4 flats : CD E F GA B cd e f ga b  ",
+				"5 flats : CD E FG A B cd e fg a b  ",
+				"6 flats :C D E FG A Bc d e fg a b  ",
+				"7 flats :C D EF G A Bc d ef g a b  ",
+		};
+		if(key.equals("none")) {
+			this.scale = keyscales[7].substring("0 sharps:".length());
+			this.keySignature=0;
+		}
+		else {
+			for(int i=0;i<scales.length;i++) {
+				if(scales[i].indexOf(key+" ")>0) {
+					this.scale = keyscales[i].substring("0 sharps:".length());
+					this.keySignature=i>7?i:7-i; // see TGMeasureimpl.java
+					break;
+				}
+			}
+		}
+		if(octaveDatabase!=null) octaveDatabase.reset();
+	}
+
+	public void addNote(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.addNote(string);
+	}
+
+	public void setOrigin(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setOrigin(string);
+	}
+
+	public void setParts(String string) {
+		this.parts=string;
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.addNote("P:"+this.parts);
+	}
+
+	public void setTempo(String string) {
+		// TODO textual tempo's Moderato Largo Allegro, etc. etc.
+		ABCTimeSignature beat=parseTimeSignature("1/4");
+		int bpm=120;
+		if(string.trim().matches("[0-9]+"))
+			bpm=Integer.parseInt(string,10);
+		else if(string.trim().matches("[0-9 /]*\\s*[0-9]+/[0-9]+\\s*=\\s*[0-9]+")) {
+			String[] eq=string.trim().split("=");
+			beat=parseTimeSignature(eq[0].trim());
+			bpm=Integer.parseInt(eq[1].trim(),10);
+		}
+		else if(string.trim().matches("\".*\"\\s*[0-9 /]*\\s*[0-9]+/[0-9]+\\s*=\\s*[0-9]+")) {
+			int i1=string.lastIndexOf('"')+1;
+			String[] eq=string.substring(i1).trim().split("=");
+			beat=parseTimeSignature(eq[0].trim());
+			bpm=Integer.parseInt(eq[1].trim(),10);
+		}
+		else if(string.trim().matches("[0-9 /]*\\s*[0-9]+/[0-9]+\\s*=\\s*[0-9]+\\s*\".*\"")) {
+			int i1=string.indexOf('"');
+			String[] eq=string.substring(0,i1).trim().split("=");
+			beat=parseTimeSignature(eq[0].trim());
+			bpm=Integer.parseInt(eq[1].trim(),10);
+		}
+		else if(string.trim().matches("\".*\"")) {
+			this.tempo=new ABCTempo(string.trim().substring(1,string.trim().length()-1).toLowerCase()).getValue();
+			bpm=0;
+		}
+		if(bpm>0)
+			this.tempo=(bpm*beat.getDenominator())/(4*beat.getNumerator());
+		alignTicks();
+		addTempoChange(new ABCTempoChange(this.measure,this.tempo));
+	}
+
+	private ABCTimeSignature parseTimeSignature(String string) {
+		// There may be up to 4 beats in the definition, e.g: 
+		//	Q:1/4 3/8 1/4 3/8=40
+		// This means: play the tune as if Q:5/4=40 was written, but print the tempo indication using separate notes as specified by the user.
+		String[] q=string.split("\\s+");
+		int numerator=0;
+		int denominator=1;
+		for(int i=0;i<q.length;i++) {
+			if(q[i].matches("[0-9]+/[0-9]+")) {
+				int i1=q[i].indexOf('/');
+				int n1=Integer.parseInt(q[i].substring(0, i1),10);
+				int d1=Integer.parseInt(q[i].substring(i1+1),10);
+				if(denominator!=d1) {
+					numerator*=d1;
+					n1*=denominator;
+					denominator*=d1;
+				}
+				numerator+=n1;
+			}
+		}
+		if(numerator==0) return defaultNoteLength;
+		return new ABCTimeSignature(numerator,denominator,true);
+	}
+/**
+ * Abc also includes a rhythm field, 
+ * R:, which is used for cataloguing and sorting collections of abc tunes:
+ * this is entirely free text (although there are obvious 'standard' entries eg R:reel, R:jig, R:schottische).
+*/
+	public void setRhythm(String string) {
+		this.rhythm = string;
+	}
+
+	public void setSource(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setSource(string);
+	}
+
+	public void addWords(String string) {
+		if(this.words==null) this.words=new ArrayList();
+		this.words.add(string.substring(2).trim());
+		addNote(string);
+	}
+
+	public void setTranscriptor(String string) {
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.setTranscriptor(string);
+	}
+
+	public void addRedefinable(String string) {
+		ABCSymbol symbol=new ABCSymbol(string);
+		if(!symbol.isValid()) return;
+		if(this.redefinable==null) this.redefinable=new ArrayList();
+		// delete eventual "old" symbol redefinition
+		char c=symbol.getName();
+		for(int i=0;i<this.redefinable.size();i++) {
+			char a=((ABCSymbol)this.redefinable.get(i)).getName();
+			if(a==c) {
+				this.redefinable.remove(i);
+				break;
+			}
+		}
+
+		if(!symbol.isNil()) 
+			this.redefinable.add(symbol);
+	}
+
+	public void addMacro(String string) {
+		ABCMacro m=new ABCMacro(string);
+		if(!m.isValid()) return;
+		if(this.macro==null) this.macro=new ArrayList();
+		this.macro.add(m);
+	}
+
+	public void setX(int i) {
+		this.x = i;
+		ABCInfo info=getInfo();
+		if(info==null) info=setInfo(new ABCInfo("","",""));
+		info.addNote("X:"+this.x);
+	}
+
+	public void setPart(String string) {
+		this.part = string;
+	}
+/**
+ * @param string
+ * <p>
+ *	Adding many symbols to a line of music can make a tune difficult to read.<br>
+ *	In such cases, a symbol line (a line that contains only +...+ decorations and "..." chord symbols or annotations) can be used, 
+ *	analogous to a lyrics line.<br>
+ *	A symbol line starts with s:, followed by a line of symbols.<br> 
+ *	Matching of notes and symbols follows the rules defined in section Lyrics.<br>
+ *<pre> 
+ *	 Example: 
+ *	   CDEF    | G'''AB'c
+ *	s: "^slow" | +f+ ** +fff+
+ *</pre>
+ * @see #addLyrics(String)
+ */
+	public void addSymbols(String string) {
+		if(this.symbols==null) this.symbols=new ArrayList();
+		this.symbols.add(string);
+		if(events==null) return;
+		String[] w=string.trim().split("\\s+");
+		int x=0;
+		boolean dx=false;
+		for(int i=lineloc;i<events.size() && x<w.length;i++) {
+			ABCLocation loc=(ABCLocation) events.get(i);
+			ABCEvent e=loc.getEvent();
+			if(loc.getTrack()==this.track && e.getTicks()>0 && e.isGrace()==false) {
+				dx=false;
+				if(w[x]=="|") {
+					dx=true;
+					--x;
+				}
+				else if(w[x].matches("\\*+")) {
+					if(w[x].length()==1) dx=true;
+					else w[x]=w[x].substring(1);
+				}
+				else {
+					dx=true;
+					String s=w[x].replace('~', ' ');
+					if(s.startsWith("\"") && s.endsWith("\"")) insertAnnotation(i,s); 
+					else if(s.startsWith("+") && s.endsWith("+")) insertDecoration(i,s); 
+					else if(s.startsWith("!") && s.endsWith("!")) insertDecoration(i,s); 
+					else e.setLyrics(s);
+				}
+				if(dx) {
+					++x;
+					while(x<w.length && w[x].equals("|")) {
+						int m = loc.getMeasure();
+						for(i+=1;i<events.size();i++) {
+							loc=(ABCLocation) events.get(i);
+							if(loc.getTrack()==this.track && loc.getMeasure()>m)
+								break;
+						}
+						--i;
+						++x;
+					}
+				}
+					
+			}
+		}
+	}
+
+private void insertAnnotation(int i, String s) {
+	ABCLocation loc=(ABCLocation) events.get(i);
+	ABCEvent a=new ABCEvent(this, s+"  ");
+	if(a.getType()==ABCEvent.CHORD_SYMBOL) {
+		if(chordvoice<0) {
+			// encountered first chord, set defaults
+			if(voice==null) addVoice("1 clef=treble");
+			chordvoice=chordTrack(this.track);
+			basevoice=baseTrack(this.track);
+			setGchordon(this.gchordon);
+			setGchord(gchord);
+			setChordprog(chordprog);
+			setChordvol(chordvol);
+			setBassprog(bassprog);
+			setBassvol(bassvol);
+		}
+		this.chord=(ABCChord) chordsList.get(a.getChordnum());
+		events.add(i,new ABCLocation(loc.getPart(),loc.getTrack(),loc.getMeasure(),loc.getTicks(),this.chord,a));
+	}
+	events.add(i,new ABCLocation(loc.getPart(),loc.getTrack(),loc.getMeasure(),loc.getTicks(),loc.getChord(),a));
+}
+
+private void insertDecoration(int i, String s) {
+	ABCLocation loc=(ABCLocation) events.get(i);
+	ABCEvent d=new ABCEvent(this, s+"  ");
+	events.add(i,new ABCLocation(loc.getPart(),loc.getTrack(),loc.getMeasure(),loc.getTicks(),loc.getChord(),d));
+}
+
+/**
+ * @param string
+ * <p>
+ *	 The w field (lowercase w) in the body, supplies a line of lyrics to be aligned syllable 
+ *   by syllable below the previous line of notes.<br>
+ *   Syllables are not aligned on grace notes and tied notes are treated as two separate notes;
+ *   slurred or beamed notes are also treated as separate notes in this context. <br>
+ *   Note that lyrics are always aligned to the beginning of the preceding music line.<br> 
+ *	 It is possible for a music line to be followed by several w fields.<br>
+ *   This can be used together with the part notation to create verses.<br>
+ *   The first w field is used the first time that part is played, then the second and so on.<br> 
+ *	 The lyrics lines are treated as an ABC string.<br>
+ *   Within the lyrics, the words should be separated by one or more spaces
+ *   and to correctly align them the following symbols may be used:
+ *   <p>
+ *   <table>
+ *    <tr><th>Symbol</th><th>Meaning</th></tr> 
+ *	  <tr><td>-    (hyphen)</td><td>break between syllables within a word</td></tr> 
+ *	  <tr><td>_    (underscore)</td><td> last syllable is to be held for an extra note</td></tr> 
+ *	  <tr><td>*    </td><td>one note is skipped (i.e. * is equivalent to a blank syllable) </td></tr>
+ *	  <tr><td>~    </td><td>appears as a space; aligns multiple words under one note </td></tr>
+ *	  <tr><td>\-   </td><td>appears as hyphen; aligns multiple syllables under one note </td></tr>
+ *	  <tr><td>|    </td><td>advances to the next bar </td></tr>
+ *   </table>
+ *   <p>
+ *	 Note that if - is preceded by a space or another hyphen, it is regarded as a separate syllable.<br> 
+ *	 When an underscore is used next to a hyphen, the hyphen must always come first. <br>
+ *	 If there are not as many syllables as notes in a measure, typing a | automatically advances to the next bar;
+ *	 if there are enough syllables the '|' is just ignored. 
+ *<p>
+ *	 <b>Some examples:</b>
+ *<pre> 
+ *	w: syll-a-ble    is aligned with three notes
+ *	w: syll-a--ble   is aligned with four notes
+ *	w: syll-a -ble   (equivalent to the previous line)
+ *	w: time__        is aligned with three notes
+ *	w: of~the~day    is treated as one syllable (i.e. aligned with one note)
+ *	                 but appears as three separate words
+ *	 gf|e2dc B2A2|B2G2 E2D2|.G2.G2 GABc|d4 B2
+ *	w: Sa-ys my au-l' wan to your aul' wan\
+ *	   Will~ye come to the Wa-x-ies dar-gle?
+ *</pre>
+ *<p>
+ *	 Please see section Continuation of input lines for the meaning of the backslash (\) character. 
+ *<p>
+ *	 If a word starts with a digit, this is interpreted as numbering of a stanza and is pushed forward a bit.<br> 
+ *   In other words, use something like <br>
+ *	   w: 1.~Three blind mice<br>
+ *	 to put a number before Three.
+ *<p>
+ *@see #addSymbols(String)
+ */
+	 public void addLyrics(String string) {
+		if(this.lyrics==null) this.lyrics=new ArrayList();
+		this.lyrics.add(string);
+		if(events==null) return;
+		String[] w=string.trim().split("\\s+");
+		int x=0;
+		boolean dx=false;
+		for(int i=lineloc;i<events.size() && x<w.length;i++) {
+			ABCLocation loc=(ABCLocation) events.get(i);
+			ABCEvent e=loc.getEvent();
+			if(loc.getTrack()==this.track && e.getTicks()>0 && e.getType()==ABCEvent.NOTE && !e.isGrace()) {
+				dx=false;
+				if(w[x].equals("|")) {
+					dx=true;
+					--x;
+				}
+				else if(w[x].matches("\\*+")) {
+					if(w[x].length()==1) dx=true;
+					else w[x]=w[x].substring(1);
+				}
+				else {
+					String s=w[x].trim();
+					int h=s.indexOf('-');
+					int u=s.indexOf('_');
+					if(h==0 && s.length()>1) {
+						w[x]=s.substring(1);
+						s="-";
+					}
+					else if(h>0 && h<s.length()-1) {
+						w[x]=s.substring(h+1);
+						s=s.substring(0, h+1);
+					}
+					else if(u==0 && s.length()>1) {
+						w[x]=s.substring(1);
+						s="_";
+					}
+					else if(u>0) {
+						w[x]=s.substring(u);
+						s=s.substring(0,u);
+					}
+					else
+						dx=true;
+					e.setLyrics(s.replace('~', ' '));
+				}
+				if(dx) {
+					++x;
+					while(x<w.length && w[x].equals("|")) {
+						int m = loc.getMeasure();
+						int j=i;
+						for(i+=1;i<events.size();i++) {
+							loc=(ABCLocation) events.get(i);
+							if(loc.getTrack()==this.track) {
+								if(loc.getMeasure()>m)
+									break;
+								j=i;
+							}
+						}
+						i=j;
+						++x;
+					}
+				}
+					
+			}
+		}
+	}
+
+	public void addVoice(String string) {
+		if(this.voice==null) {
+			this.voice=new ArrayList();
+			this.voiceloc=new ArrayList();
+		}
+		this.track=this.voice.size();
+		this.voice.add(new ABCTrack(string.trim()));
+		ABCLocation loc = new ABCLocation(this.part,this.track,0,0,null,null);
+		loc.setTied(false);
+		loc.setLegato(0);
+		loc.setChord(null);
+		loc.setTempo(this.tempo);
+		this.voiceloc.add(loc);
+	}
+
+	public void setVoice(String string) {
+		if(this.voice==null) {
+			this.voice=new ArrayList();
+			this.voice.add(new ABCTrack(string.trim()));
+			this.voiceloc=new ArrayList();
+			ABCLocation loc=new ABCLocation(this.part,this.track,this.measure,this.ticks,null,null);
+			loc.setTied(this.tied);
+			loc.setLegato(this.legato);
+			loc.setChord(this.chord);
+			loc.setTempo(this.tempo);
+			this.voiceloc.add(loc);
+		}
+		else {
+			ABCLocation loc=(ABCLocation) this.voiceloc.get(this.track);
+			loc.setPart(this.part);
+			loc.setMeasure(this.measure);
+			loc.setTicks(this.ticks);
+			loc.setTied(this.tied);
+			loc.setLegato(this.legato);
+			loc.setChord(this.chord);
+			loc.setTempo(this.tempo);
+		}
+		String v=string.trim().split("\\s+")[0];
+		for(int i=0;i<voice.size();i++) {
+			ABCTrack trk=(ABCTrack)voice.get(i);
+			String vi=trk.getName();
+			if(vi.equals(v)) {
+				this.track = i;
+				ABCLocation loc=(ABCLocation) this.voiceloc.get(this.track);
+				this.part    = loc.getPart();
+				this.measure = loc.getMeasure();
+				this.ticks   = loc.getTicks();
+				this.tied    = loc.isTied();
+				this.legato  = loc.getLegato();
+				this.chord   = loc.getChord();
+				this.tempo   = loc.getTempo();
+				return;
+			}
+		}
+		this.track = voice.size();
+		this.voice.add(new ABCTrack(string.trim()));
+		ABCLocation loc = new ABCLocation(this.part,this.track,0,0,this.chord,null);
+		loc.setTied(false);
+		loc.setLegato(0);
+		loc.setTempo(this.tempo);
+		this.voiceloc.add(loc);
+		this.part    = loc.getPart();
+		this.measure = loc.getMeasure();
+		this.ticks   = loc.getTicks();
+		this.tied    = loc.isTied();
+		this.legato  = loc.getLegato();
+	}
+
+	public void addRemarks(String string) {
+		if(this.remarks==null) this.remarks=new ArrayList();
+		this.remarks.add(string);
+	}
+
+	public void addMusic(String line) {
+		if(this.macro!=null) line=substituteMacros(line);
+		if(this.redefinable!=null) line=substituteSymbols(line);
+		if(this.events==null) this.events = new ArrayList();
+		this.lineloc = this.events.size();
+		char[] a=(line+"  ").toCharArray();
+		int i=0;
+		int p=1;
+		int q=1;
+		int r=0;
+		int broken=0;
+		boolean inchord=false;
+		boolean ingrace=false;
+		boolean stacato=false;
+		int chordstart=0;
+		int graceticks=0;
+		int fermato=0;
+		int lineMeasure=this.measure;
+		ABCEvent e,lastnote=null;
+		while(i<a.length) {
+			switch(a[i]) {
+			default:
+				e=new ABCEvent(this,line.substring(i));
+				e.setSequence(i);
+				if(e.getType() == ABCEvent.NOTE) {
+					if(ingrace) {
+						e.setGrace(true);
+					}
+				}
+				if(r>0 && e.getTicks()>0 && !inchord) {	// triplet recalculation of e.getTicks() for NOTE, REST & CHORD events
+					switch(e.getType()) {
+					case ABCEvent.NOTE:
+					case ABCEvent.REST:
+						e.setTriplet(p,q,r-1);
+					}
+				}
+				if(e.getType()==ABCEvent.CHORD_SYMBOL) {
+					if(chordvoice<0) {
+						// encountered first chord, set defaults
+						if(voice==null) addVoice("1 clef=treble");
+						chordvoice=chordTrack(this.track);
+						basevoice=baseTrack(this.track);
+						setGchordon(this.gchordon);
+						setGchord(gchord);
+						setChordprog(chordprog);
+						setChordvol(chordvol);
+						setBassprog(bassprog);
+						setBassvol(bassvol);
+					}
+					this.chord=(ABCChord) chordsList.get(e.getChordnum());
+					events.add(new ABCLocation(this.part,chordTrack(this.track),this.measure,this.ticks,this.chord,e));
+				}
+				else {
+					if(e.getType()==ABCEvent.NOTE) {
+						e.setVelocity(beatVolume());
+					}
+					if(this.ticks==this.ticksperbar && (e.getType()==ABCEvent.ANNOTATION || e.getType() == ABCEvent.DECORATION))
+						events.add(new ABCLocation(this.part,this.track,this.measure+1,0,this.chord,e));
+					else
+						events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,e));
+					if(e.getType()==ABCEvent.DECORATION) {
+						switch(e.getDecoration()) {
+						case ABCEvent.PPPP: setVolume(TGVelocities.PIANO_PIANISSIMO/2);break;
+						case ABCEvent.PPP:  setVolume(TGVelocities.PIANO_PIANISSIMO);break;
+						case ABCEvent.PP:   setVolume(TGVelocities.PIANISSIMO);break;
+						case ABCEvent.P:    setVolume(TGVelocities.PIANO);break;
+						case ABCEvent.MP:   setVolume(TGVelocities.MEZZO_PIANO);break;
+						case ABCEvent.MF:   setVolume(TGVelocities.MEZZO_FORTE);break;
+						case ABCEvent.SFZ:  setVolume((TGVelocities.MEZZO_FORTE+TGVelocities.FORTE)/2);break;
+						case ABCEvent.F:    setVolume(TGVelocities.FORTE);break;
+						case ABCEvent.FF:   setVolume(TGVelocities.FORTISSIMO);break;
+						case ABCEvent.FFF:  setVolume((TGVelocities.FORTISSIMO+TGVelocities.FORTE_FORTISSIMO)/2);break;
+						case ABCEvent.FFFF: setVolume(TGVelocities.FORTE_FORTISSIMO);break;
+						case ABCEvent.FERMATA: fermato=tempo;setTempo(String.valueOf(tempo/2));break;
+						case ABCEvent.STACATODOT: stacato=true;break;
+						}
+					}
+					else if(e.getType()==ABCEvent.NOTE) {
+						if(this.tied) { 
+							e.setTied(true);
+							if(!inchord) this.tied=false;
+						}
+						if(stacato) {
+							e.setStacato(true);
+							if(!inchord) stacato=false;
+						}
+						e.setLegato(this.legato>0);
+					}
+				}
+				i+=e.getName().length();
+				if(!inchord) {
+					if(broken != 0 && e.getTicks() > 0) {
+						e.setTicks(e.getTicks()+broken);
+						broken=0;
+					}
+					if(!ingrace && e.getTicks()>0) {
+						if(r>0) {
+							--r;
+							this.ticks+=(e.getTicks()*q)/p; // put p notes into the time of q for the next r notes
+						}
+						else
+							this.ticks += e.getTicks();
+						if(fermato>0) setTempo(String.valueOf(fermato));
+						fermato=0;
+					}
+				}
+				if(e.getTicks() > 0) lastnote=e;
+				break;
+			case ' ':
+			case '\t':
+			case '\r':
+			case '\n':
+				i++;
+				break;
+			case '&':	// reset to begin of measure
+				i++;
+				this.ticks=0;
+				break;
+			case '-': // tied note
+				i++;
+				this.tied=true;
+				break;
+			case '>': // broken rhythm
+				if(lastnote!=null) {
+					int t=lastnote.getTicks();
+					broken=0;
+					while(a[i]=='>') {
+						broken -= t/2;
+						++i;
+						t += t/2;
+					}
+					lastnote.setTicks(t);
+					this.ticks -= broken;
+				}
+				else i++;	// no notes to be broken
+				break;
+			case '<': // broken rhythm
+				if(lastnote!=null) {
+					int t=lastnote.getTicks();
+					int d=t;
+					broken=0;
+					while(a[i]=='<') {
+						broken += t/2;
+						++i;
+						t += t/2;
+					}
+					lastnote.setTicks(d-broken);
+					this.ticks -= broken;
+				}
+				else i++;	// no notes to be broken
+				break;
+			case '{':
+				i++;
+				ingrace=true;
+				graceticks=this.ticks;
+				break;
+			case '}':
+				i++;
+				ingrace=false;
+				this.ticks=graceticks;
+				break;
+			case '(':	// (p:q:r triplets, put p notes into the time of q for the next r notes
+				i++;
+				if(a[i]>'0' && a[i]<='9') {
+					p=a[i]-'0';
+					i++;
+					while("0123456789".indexOf(a[i])>=0) {
+						p=10*p+a[i]-'0';
+						i++;
+					}
+					r=p;
+//					Symbol					Meaning 
+//					(2    2 notes in the time of 3 
+//					  (3    3 notes in the time of 2 
+//					  (4    4 notes in the time of 3 
+//					  (5    5 notes in the time of n 
+//					  (6    6 notes in the time of 2 
+//					  (7    7 notes in the time of n 
+//					  (8    8 notes in the time of 3 
+//					  (9    9 notes in the time of n 
+//					If the time signature is compound (6/8, 9/8, 12/8) then n is three, otherwise n is two.
+					switch(p) {
+					case 2: q=3;break;
+					case 3: q=2;break;
+					case 4: q=3;break;
+					case 6: q=2;break;
+					case 8: q=3;break;
+					default: 
+						if(this.timeSignature.getDenominator()==8 && this.timeSignature.getNumerator() % 3==0) q=3;
+						else q=2;
+					break;
+					}
+					if(a[i]==':') {
+						i++;
+						int n=0;
+						while("0123456789".indexOf(a[i])>=0) {
+							n=10*n+a[i]-'0';
+							i++;
+						}
+						if(n>0) q=n;
+						if(a[i]==':') {
+							i++;
+							n=0;
+							while("0123456789".indexOf(a[i])>=0) {
+								n=10*n+a[i]-'0';
+								i++;
+							}
+							if(n>0) r=n;
+						}
+					}
+				}
+				else
+					this.legato++;
+				break;
+			case ')':
+				i++;
+				if(this.legato>0)
+					this.legato--;
+				break;
+			case '[':
+				if(a[i+2]==':') {
+					int j=line.indexOf(']', i+2);
+					boolean bol=this.measure == lineMeasure;
+					if(j<0) j=line.length();
+					switch(a[i+1]) {
+					case 'V':
+						this.setVoice(line.substring(i+3, j).trim());
+						if(bol) 
+							lineMeasure=this.measure;
+						break;
+					case 'P':
+						alignTicks();
+						this.setPart(line.substring(i+3, j).trim());
+						break;
+					case 'I':
+						if(line.substring(i+3, j).trim().toUpperCase().matches("MIDI\\s*=?.*")) {
+							midiCommand("%%MIDI "+line.substring(i+3, j).replaceFirst("MIDI\\s*=?"," ").trim());
+						}
+						break;
+					case 'M':
+						alignTicks();
+						ABCEvent et = timeCommand(line.substring(i+3, j).trim());
+						events.add(new ABCLocation(this.part,this.track,this.measure,0,this.chord,et));
+						if(chordvoice>=0 && isBuddy(CHORDS)) events.add(new ABCLocation(this.part,chordvoice,this.measure,0,this.chord,et));
+						if(basevoice>=0 && isBuddy(BASE)) events.add(new ABCLocation(this.part,basevoice,this.measure,0,this.chord,et));
+						if(drumvoice>=0 && isBuddy(DRUMS)) events.add(new ABCLocation(this.part,drumvoice,this.measure,0,this.chord,et));
+						if(dronevoice>=0 && isBuddy(DRONE)) events.add(new ABCLocation(this.part,dronevoice,this.measure,0,this.chord,et));
+						ABCTimeSignature ts=new ABCTimeSignature(et.getNumerator(),et.getDenominator(),true);
+						addTimeSignatureChange(new ABCTimeSignatureChange(this.measure,ts));
+						break;
+					case 'Q':
+						alignTicks();
+						ABCEvent eq = tempoCommand(line.substring(i+3, j).trim());
+						events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,eq));
+						break;
+					case '|':	// a fatbar with a repeat begin "[|:", skip the "[" and let the "|:" code parse again
+						j=i;	// consume the "[" only
+						alignTicks();
+						ABCEvent eb = new ABCEvent(ABCEvent.FATBAR_BAR,"[|",0);
+						events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,eb));
+						break;
+					}
+					i=j+1;
+				}
+				else if(a[i+1]=='|') {
+					alignTicks();
+					resetScale();
+					i+=2;
+				}
+				else if("123456789".indexOf(a[i+1])>=0) {
+					// start of variant part
+					ABCEvent ev=new ABCEvent(this,line.substring(i));
+					alignTicks();
+					events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,ev));
+					i+=ev.getName().length();
+				}
+				else {
+					// start of chord
+					inchord=true;
+					++i;
+					chordstart=events.size();
+				}
+				break;
+			case ']':
+				if(inchord) {
+					remapChord(events.size()-chordstart);
+					e=new ABCEvent(this,line.substring(i));
+					i+=e.getName().length();
+					int t=e.getTicks();
+					for(int x=chordstart;x<events.size();x++) {
+						ABCLocation l=(ABCLocation) events.get(x);
+						e=l.getEvent();
+						switch(e.getType()) {
+						case ABCEvent.NOTE:
+						case ABCEvent.REST:
+							if(!e.isGrace()) {
+								e.setTicks(t);
+								if(r>0)
+									e.setTriplet(p,q,r-1);
+							}
+							break;
+						}
+					}
+					if(r>0) {	// triplet recalculation of e.getTicks() for NOTE, REST & CHORD events
+						this.ticks += (t*q)/p; // put p notes into the time of q for the next r notes
+						--r;
+					}
+					else 
+						this.ticks+=t;
+					if(fermato>0) setTempo(String.valueOf(fermato));
+					fermato=0;
+					inchord=false;
+					this.tied=false;
+					stacato=false;
+					lastnote=null; // can not cope with broken rhythm on chords
+				}
+				break;
+			case '|':
+				alignTicks();
+				if(a[i+1]==']' || a[i+1]=='|') {
+					events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,new ABCEvent(this,String.valueOf(a, i, 2))));
+					resetScale();
+					i+=2;
+				}
+				else if(a[i+1]==':') {
+					resetScale();
+					events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,new ABCEvent(this,"|:")));
+					i+=2;
+				}
+				else if("123456789".indexOf(a[i+1])>=0) {
+					events.add(new ABCLocation(this.part,this.track,this.measure-1,this.ticks,this.chord,new ABCEvent(this,"|")));
+					ABCEvent ev=new ABCEvent(this,"["+line.substring(i+1));
+					events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,ev));
+					resetScale();
+					i+=ev.getName().length();
+				}
+				else {
+					events.add(new ABCLocation(this.part,this.track,this.measure-1,this.ticks,this.chord,new ABCEvent(this,String.valueOf(a, i, 1))));
+					resetScale();
+					i++;
+				}
+				break;
+			case ':':
+				if(a[i+1]=='|') {
+					events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,new ABCEvent(this,":|")));
+					alignTicks();
+					resetScale();
+					i+=2;
+					if("123456789".indexOf(a[i])>=0) {
+						ABCEvent ev=new ABCEvent(this,"["+line.substring(i));
+						events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,ev));
+						i+=ev.getName().length()-1;
+					}
+				}
+				else if(a[i+1]==':') {
+					events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,new ABCEvent(this,"::")));
+					alignTicks();
+					resetScale();
+					i+=2;
+				}
+				else if(a[i+1]==']') {
+					events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,new ABCEvent(this,":]")));
+					alignTicks();
+					i+=2;
+				}
+				else {
+					e=new ABCEvent(this,line.substring(i));
+					events.add(new ABCLocation(this.part,this.track,this.measure,this.ticks,this.chord,e));
+					i+=e.getName().length();
+					this.ticks += e.getTicks();
+				}
+				break;
+			}
+		}
+		if(this.track==0 && this.measure>=this.measures)
+			this.measures=this.measure+1;
+	}
+
+	private void setVolume(int volume) {
+		if(voice==null) addVoice("1 clef=treble");
+		for(int i=this.track;i<voice.size();i++) {
+			ABCTrack trk=(ABCTrack) voice.get(i);
+			if(i==this.track || trk.getVolume()<0)
+				trk.setVolume(volume);
+		}
+	}
+
+	private void alignTicks() {
+		if(this.ticks % this.ticksperbar > 0) {
+			int n=this.timeSignature.getNumerator();
+			int d=this.timeSignature.getDenominator();
+			int ticksperbeat=this.ticksperbar / n;
+			while(this.ticks<ticksperbeat) {
+				ticksperbeat /= 2;
+				d *= 2;
+			}
+			while((ticksperbeat % 2)==0 &&(this.ticks % ticksperbeat)>0) {
+				ticksperbeat /= 2;
+				d *= 2;
+			}
+			if(ticksperbeat>0) {
+				n=this.ticks/ticksperbeat;
+				ABCEvent et = new ABCEvent(ABCEvent.TIME,n+"/"+d+" \"generated to align\"",0);
+				et.setToEnd(false);
+				et.setNumerator(n);
+				et.setDenominator(d);
+				events.add(new ABCLocation(this.part,this.track,this.measure,0,this.chord,et));
+				if(chordvoice>=0 && isBuddy(CHORDS)) events.add(new ABCLocation(this.part,chordvoice,this.measure,0,this.chord,et));
+				if(basevoice>=0 && isBuddy(BASE)) events.add(new ABCLocation(this.part,basevoice,this.measure,0,this.chord,et));
+				if(drumvoice>=0 && isBuddy(DRUMS)) events.add(new ABCLocation(this.part,drumvoice,this.measure,0,this.chord,et));
+				if(dronevoice>=0 && isBuddy(DRONE)) events.add(new ABCLocation(this.part,dronevoice,this.measure,0,this.chord,et));
+				ABCTimeSignature ts=new ABCTimeSignature(n,d,false);
+				addTimeSignatureChange(new ABCTimeSignatureChange(this.measure,ts));
+				addTimeSignatureChange(new ABCTimeSignatureChange(this.measure+1,this.timeSignature));
+			}
+		}
+		if(this.ticks>0)
+			++this.measure;
+		this.ticks=0;
+	}
+
+	private boolean isBuddy(String type) {
+		ABCTrack ttrk=(ABCTrack) voice.get(this.track);
+		String v=ttrk.getName()+"\t"+type;
+		for(int i=0;i<voice.size();i++) {
+			ABCTrack trk=(ABCTrack)voice.get(i);
+			if(v.equalsIgnoreCase(trk.getName())) return true;
+		}
+		return false;
+	}
+
+	private String substituteMacros(String line) {
+		for(int i=0;i<macro.size();i++) {
+			line=((ABCMacro)macro.get(i)).execute(line);
+		}
+		return line;
+	}
+
+	private String substituteSymbols(String line) {
+		for(int i=0;i<redefinable.size();i++) {
+			line=((ABCSymbol)redefinable.get(i)).execute(line);
+		}
+		return line;
+	}
+
+	private int beatVolume() {
+		if(voice==null) addVoice("1 clef=treble");
+		ABCTrack trk=(ABCTrack) voice.get(this.track);
+		int v=trk.getVolume();
+		int tpb=ticksperbar/timeSignature.getNumerator();
+		int b=ticks/tpb;
+		if(v<0) v=TGVelocities.DEFAULT;
+		if(b<beatstring.length()) {
+			char fmp=beatstring.charAt(b);
+			int perc=beat["fmp".indexOf(fmp)];
+			v *= perc;
+			v /= 100;
+			if(v>127) v=127;
+		}
+		return v;
+	}
+
+	private ABCEvent tempoCommand(String string) {
+		int bpm=120;
+		if(string.trim().matches("[0-9]+"))
+			bpm=Integer.parseInt(string,10);
+		else if(string.trim().matches("[0-9 /]*\\s[0-9]+/[0-9]+\\s*=\\s*[0-9]+")) {
+			String eq=string.trim().split("=")[1].trim();
+			bpm=Integer.parseInt(eq,10);
+		}
+		else if(string.trim().matches("\".*\"\\s*[0-9 /]*\\s[0-9]+/[0-9]+\\s*=\\s*[0-9]+")) {
+			int i1=string.lastIndexOf('"')+1;
+			String eq=string.substring(i1).trim().split("=")[1].trim();
+			bpm=Integer.parseInt(eq,10);
+		}
+		else if(string.trim().matches("[0-9 /]*\\s[0-9]+/[0-9]+\\s*=\\s*[0-9]+\\s*\".*\"")) {
+			int i1=string.indexOf('"');
+			String eq=string.substring(0,i1).trim().split("=")[1].trim();
+			bpm=Integer.parseInt(eq,10);
+		}
+		else if(string.trim().matches("\".*\"")) {
+			ABCTempo tmp = new ABCTempo(string.trim().substring(1,string.trim().length()-1).toLowerCase());
+			bpm=tmp.getValue();
+		}
+		return new ABCEvent(ABCEvent.TEMPO,string,bpm);
+	}
+
+	private ABCEvent timeCommand(String string) {
+		ABCEvent e=new ABCEvent(ABCEvent.TIME,string,0);
+		e.setToEnd(true);
+		if(string.matches("[0-9]+/[0-9]+.*")) {
+			int numerator=0,denominator=0,i;
+			for(i=0;string.charAt(i)!='/';i++) {
+				numerator=numerator*10+string.charAt(i)-'0';
+			}
+			for(i++;i<string.length() && "0123456789".indexOf(string.charAt(i))>=0;i++) {
+				denominator=denominator*10+string.charAt(i)-'0';
+			}
+			e.setNumerator(numerator);
+			e.setDenominator(denominator);
+			return e;
+		}
+		if(string.equals("M:C")) {
+			e.setNumerator(4);
+			e.setDenominator(4);
+			return e;
+		}
+		if(string.equals("M:C|")) {
+			e.setNumerator(2);
+			e.setDenominator(2);
+			return e;
+		}
+		e.setNumerator(4);
+		e.setDenominator(4);
+		return e;
+	}
+
+	private void advancegchordticks(int t) {
+		if(gchordon && t>0 && this.tickspergchord>0 && this.chord != null && this.gchord != null) {
+			int i;
+			char[] g=this.gchord.toCharArray();
+			int n=this.ticks;
+			for(i=0;n>0 && i<g.length;i++) {
+				if(g[i]>'1' && g[i]<='9') n-=(g[i]-'1')*this.tickspergchord;
+				else n-=this.tickspergchord;
+			}
+			if(i<g.length) {
+				if(n==0) {
+					generatechordnotes(this.ticks,g,i);
+				}
+				n+=this.tickspergchord;
+				i++;
+				if(i<g.length && g[i]>'1' && g[i]<='9') {
+					n+=(g[i]-'1')*this.tickspergchord;
+					i++;
+				}
+				n+=this.ticks;
+				while(i<g.length && n<t) {
+					generatechordnotes(n,g,i);
+					n+=this.tickspergchord;
+					i++;
+					if(i<g.length && g[i]>'1' && g[i]<='9') {
+						n+=(g[i]-'1')*this.tickspergchord;
+						i++;
+					}
+				}
+			}
+		}
+		this.ticks = t;
+	}
+
+	private void generatechordnotes(int t, char[] g, int i) {
+		int saveTrack=this.track;
+		boolean newchord=this.chordMeasure==this.measure && this.chordTicks==t;
+		ABCEvent e;
+		int len=this.tickspergchord;
+		char n=g[i];
+		++i;
+		if(i<g.length &&  g[i]>'1' && g[i]<='9') len+=(g[i]-'1')*this.tickspergchord;
+		switch(n) {
+		case 'z':
+			this.track=chordTrack(saveTrack);
+			e=new ABCEvent(this,newchord?this.chord.getNote('f'):"z");
+			e.setTicks(len);
+			e.setVelocity(0);
+			events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+			this.track=baseTrack(saveTrack);
+			e=new ABCEvent(this,"z");
+			e.setTicks(len);
+			e.setVelocity(bassvol);
+			events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord, e));
+			break;
+		case 'f':
+			this.track=chordTrack(saveTrack);
+			e=new ABCEvent(this,newchord?this.chord.getNote('f'):"z");
+			e.setTicks(len);
+			e.setVelocity(0);
+			events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+			this.track=baseTrack(saveTrack);
+			e=new ABCEvent(this,this.chord.getNote('f')+",");
+			e.setTicks(len);
+			e.setVelocity(bassvol);
+			events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+			break;
+		case 'g':
+		case 'h':
+		case 'i':
+		case 'j':
+			this.track=chordTrack(saveTrack);
+			e=new ABCEvent(this,this.chord.getNote(n));
+			e.setTicks(len);
+			e.setVelocity(chordvol);
+			events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+			this.track=baseTrack(saveTrack);
+			e=new ABCEvent(this,"z");
+			e.setTicks(len);
+			events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+			break;
+		case 'G':
+		case 'H':
+		case 'I':
+		case 'J':
+			this.track=chordTrack(saveTrack);
+			e=new ABCEvent(this,newchord?this.chord.getNote('f'):"z");
+			e.setTicks(len);
+			e.setVelocity(0);
+			events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+			this.track=baseTrack(saveTrack);
+			e=new ABCEvent(this,this.chord.getNote(n));
+			e.setTicks(len);
+			e.setVelocity(bassvol);
+			events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+			break;
+		case 'b':
+			this.track=baseTrack(saveTrack);
+			e=new ABCEvent(this,this.chord.getNote('f')+",");
+			e.setTicks(len);
+			e.setVelocity(bassvol);
+			events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+		case 'c':
+			if(n=='c') {
+				this.track=baseTrack(saveTrack);
+				e=new ABCEvent(this,"z");
+				e.setTicks(len);
+				events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+			}
+			this.track=chordTrack(saveTrack);
+			for(int c=0;c<this.chord.size();c++) {
+				e=new ABCEvent(this,this.chord.getNote((char) ('g'+c)));
+				e.setTicks(len);
+				e.setVelocity(chordvol);
+				events.add(new ABCLocation(this.part,this.track,this.measure,t,this.chord,e));
+			}
+			remapChord(this.chord.size());
+		}
+		this.track=saveTrack;
+	}
+
+	private void remapChord(int sz) {
+		ABCEvent[] e=new ABCEvent[sz];
+		int[] snares=getTracks()[this.track].getStrings();
+		for(int i=0;i<sz;i++) e[i]=((ABCLocation)events.get(events.size()-sz+i)).getEvent();
+		int[] frets=new int[snares.length];
+		for(int i=0;i<frets.length;i++) frets[i]=-1;
+		for(int i=0;i<sz;i++) {
+			if(e[i].getType()==ABCEvent.NOTE) placeNote(i,e,frets, snares);
+		}
+	}
+
+	private void placeNote(int i, ABCEvent[] e, int[] frets, int[] strings) {
+			int s=e[i].getString();
+			if(frets[s]<0) frets[s]=i;
+			else {
+				int j=frets[s];
+				int fi=e[i].getFret();
+				int fj=e[j].getFret();
+				int fn=5;
+				if(s==2) fn=4;
+				if(fi<fj) {
+					if(s>0 && fj>=fn && frets[s-1]<0) {
+						frets[s]=i;
+						frets[s-1]=j;
+						e[j].alterString(s-1, strings);
+					}
+					else if(s<frets.length-1) {
+						e[i].alterString(s+1, strings);
+						placeNote(i,e,frets, strings);
+					}
+					else e[i].setType(ABCEvent.NOT_RELEVANT);
+				}
+				else {
+					if(s>0 && fi>=fn && frets[s-1]<0) {
+						frets[s-1]=i;
+						e[i].alterString(s-1, strings);
+					}
+					else if(s<strings.length-1) {
+						frets[s]=i;
+						e[j].alterString(s+1, strings);
+						placeNote(j,e,frets, strings);
+					}
+					else e[j].setType(ABCEvent.NOT_RELEVANT);
+				}
+			}
+		
+	}
+
+	private int baseTrack(int t) {
+		if(basevoice<0) basevoice=buddyTrack(t,BASE,4, TGMeasure.CLEF_BASS, getBassprog());
+		return basevoice;
+	}
+
+	private int chordTrack(int t) {
+		if(chordvoice<0) chordvoice=buddyTrack(t,CHORDS,6, TGMeasure.CLEF_TREBLE, getChordprog());
+		return chordvoice;
+	}
+	
+	private int drumTrack(int t) {
+		if(drumvoice<0) drumvoice=buddyTrack(t,DRUMS,6, TGMeasure.CLEF_BASS, 0);
+		return drumvoice;
+	}
+	
+	private int droneTrack(int t) {
+		if(dronevoice<0) dronevoice=buddyTrack(t,DRONE,2, TGMeasure.CLEF_BASS, getDroneprog());
+		ABCTrack ttrk=(ABCTrack) voice.get(dronevoice);
+		final int[] s={ 40, 28 };
+		ttrk.setStrings(s);
+		return dronevoice;
+	}
+	
+	private int buddyTrack(int t, String type, int strings, int cleftype, int instrument) {
+		ABCTrack ttrk=(ABCTrack) voice.get(t);
+		String v=ttrk.getName()+"\t"+type;
+		for(int i=0;i<voice.size();i++) {
+			ABCTrack trk=(ABCTrack)voice.get(i);
+			if(v.equalsIgnoreCase(trk.getName())) return i;
+		}
+		int i=voice.size();
+		ttrk=ttrk.clone(v,strings);
+		ttrk.setClefType(cleftype);
+		ttrk.setInstrument(instrument);
+		this.voice.add(ttrk);
+		return i;
+	}
+
+	public int getVoice(String string) {
+		if(this.voice==null) {
+			this.voice=new ArrayList();
+			this.voiceloc=new ArrayList();
+		}
+		for(int i=0;i<voice.size();i++) {
+			ABCTrack trk=(ABCTrack)voice.get(i);
+			if(string.equalsIgnoreCase(trk.getName())) return i;
+		}
+		this.voice.add(new ABCTrack(string.trim()));
+		ABCLocation loc = new ABCLocation(this.part,this.track,0,0,null,null);
+		loc.setTied(false);
+		loc.setChord(null);
+		this.voiceloc.add(loc);
+		return voice.size()-1;
+	}
+
+	public String getBarkey() {
+		return this.scale;
+	}
+
+	public void setBarkey(String scale) {
+		this.scale=scale;
+	}
+
+	/**
+	 * @return the events
+	 */
+	public ArrayList getEvents() {
+		return events;
+	}
+
+	public int addChord(String name) {
+		if(this.chordsList==null) this.chordsList=new ArrayList();
+		for(int i=0;i<chordsList.size();i++) {
+			ABCChord chord=(ABCChord) chordsList.get(i);
+			if(chord.getName().equals(name))
+				return i;
+		}
+		chordsList.add(new ABCChord(name));
+		return chordsList.size()-1;
+	}
+
+	/**
+	 * @return the bassprog
+	 */
+	public int getBassprog() {
+		return bassprog;
+	}
+
+	/**
+	 * @param bassprog the bassprog to set
+	 */
+	public void setBassprog(int bassprog) {
+		this.bassprog = bassprog;
+		if(basevoice<0) return;
+		ABCEvent e=new ABCEvent(ABCEvent.BASSPROG,"",bassprog);
+		events.add(new ABCLocation(this.part,baseTrack(this.track),this.measure,this.ticks,this.chord,e));
+	}
+
+	/**
+	 * @return the bassvol
+	 */
+	public int getBassvol() {
+		return bassvol;
+	}
+
+	/**
+	 * @param bassvol the bassvol to set
+	 */
+	public void setBassvol(int bassvol) {
+		this.bassvol = bassvol;
+		if(basevoice<0) return;
+		ABCEvent e=new ABCEvent(ABCEvent.BASSVOL,"",bassvol);
+		events.add(new ABCLocation(this.part,baseTrack(this.track),this.measure,this.ticks,this.chord,e));
+	}
+
+	/**
+	 * @return the chordprog
+	 */
+	public int getChordprog() {
+		return chordprog;
+	}
+
+	/**
+	 * @param chordprog the chordprog to set
+	 */
+	public void setChordprog(int chordprog) {
+		this.chordprog = chordprog;
+		if(chordvoice<0) return;
+		ABCEvent e=new ABCEvent(ABCEvent.CHORDPROG,"",chordprog);
+		events.add(new ABCLocation(this.part,chordTrack(this.track),this.measure,this.ticks,this.chord,e));
+	}
+
+	/**
+	 * @return the chordvol
+	 */
+	public int getChordvol() {
+		return chordvol;
+	}
+
+	/**
+	 * @param chordvol the chordvol to set
+	 */
+	public void setChordvol(int chordvol) {
+		this.chordvol = chordvol;
+		if(chordvoice<0) return;
+		ABCEvent e=new ABCEvent(ABCEvent.CHORDVOL,"",chordvol);
+		events.add(new ABCLocation(this.part,chordTrack(this.track),this.measure,this.ticks,this.chord,e));
+	}
+
+	/**
+	 * @return the drone
+	 */
+	public String getDrone() {
+		return drone;
+	}
+
+	/**
+	 * @param drone the drone to set
+	 */
+	public void setDrone(String drone) {
+		this.drone = drone;
+		if(dronevoice<0) return;
+		ABCEvent e=new ABCEvent(ABCEvent.DRONE,drone,0);
+		events.add(new ABCLocation(this.part,dronevoice,this.measure,this.ticks,this.chord,e));
+	}
+
+	/**
+	 * @return the droneon
+	 */
+	public boolean isDroneon() {
+		return droneon;
+	}
+
+	/**
+	 * @param droneon the droneon to set
+	 */
+	public void setDroneon(boolean droneon) {
+		this.droneon = droneon;
+		if(dronevoice<0) return;
+		if(dronevoice<0) {
+			if(!droneon) return;
+			dronevoice=droneTrack(this.track);
+			if(drone!=null) setDrone(drone);
+		}
+		ABCEvent e=new ABCEvent(droneon?ABCEvent.DRONEON:ABCEvent.DRONEOFF,"[I:MIDI=droneo"+(gchordon?"n]":"ff]"),0);
+		if(this.events==null) this.events = new ArrayList();
+		events.add(new ABCLocation(this.part,dronevoice,this.measure,this.ticks,this.chord,e));
+	}
+
+	private int getDroneprog() {
+		if(drone!=null) {
+			String[] a=drone.split("\\s+");
+			if(a.length>0 && a[0].matches("[0-9]+")) {
+				int i=Integer.parseInt(a[0], 10)-instrumentOffset;
+				if(i<0) {
+					i=0;
+					instrumentOffset=0;
+				}
+				if(i>127) {
+					i=127;
+					instrumentOffset=1;
+				}
+				return i;
+			}
+		}
+		return 0;
+	}
+
+	/**
+	 * @return the drum
+	 */
+	public String getDrum() {
+		return drum;
+	}
+
+	/**
+	 * @param drum the drum to set
+	 * <p>
+	 * %%MIDI drum dzddd2dz 35 39 39 35 39 127 80 80 127 80
+	 * % Bass Drum 1 + Electric Snare
+	 */
+	public void setDrum(String drum) {
+		this.drum = drum;
+		this.drumnotes=initDrumnotes();
+		if(drumnotes==null) return;
+		if(drumvoice<0) {
+			if(!drumon) return;
+			if(events==null) return;
+			drumvoice=drumTrack(this.track);
+			setDrumon(true);
+		}
+		ABCEvent e=new ABCEvent(ABCEvent.DRUM,drum,0);
+		if(events==null) events=new ArrayList();
+		events.add(new ABCLocation(this.part,drumvoice,this.measure,this.ticks,this.chord,e));
+	}
+
+	/**
+	 * @return the drumon
+	 */
+	public boolean isDrumon() {
+		return drumon;
+	}
+
+	/**
+	 * @param drumon the drumon to set
+	 */
+	public void setDrumon(boolean drumon) {
+		this.drumon = drumon;
+		if(drumvoice<0) {
+			if(!drumon) return;
+			drumvoice=drumTrack(this.track);
+			if(drum!=null) setDrum(drum);
+		}
+		ABCEvent e=new ABCEvent(drumon?ABCEvent.DRUMON:ABCEvent.DRUMOFF,"[I:MIDI=drumo"+(gchordon?"n]":"ff]"),0);
+		events.add(new ABCLocation(this.part,drumvoice,this.measure,this.ticks,this.chord,e));
+	}
+
+	/**
+	 * @return the gchord
+	 */
+	public String getGchord() {
+		return gchord;
+	}
+
+	/**
+	 * @param gchord the gchord to set
+	 */
+	public void setGchord(String gchord) {
+		this.gchord = gchord;
+		this.tickspergchord=getTickspergchord();
+		if(chordvoice<0) return;
+		ABCEvent e=new ABCEvent(ABCEvent.GCHORD,gchord,0);
+		events.add(new ABCLocation(this.part,chordTrack(this.track),this.measure,this.ticks,this.chord,e));
+	}
+
+	/**
+	 * @return the gchordon
+	 */
+	public boolean isGchordon() {
+		return gchordon;
+	}
+
+	/**
+	 * @param gchordon the gchordon to set
+	 */
+	public void setGchordon(boolean gchordon) {
+		this.gchordon = gchordon;
+		if(chordvoice<0) return;
+		ABCEvent e=new ABCEvent(gchordon?ABCEvent.GCHORDON:ABCEvent.GCHORDOFF,"[I:MIDI=gchordo"+(gchordon?"n]":"ff]"),0);
+		events.add(new ABCLocation(this.part,chordvoice,this.measure,this.ticks,this.chord,e));
+	}
+
+	public int getTrack() {
+		return this.track;
+	}
+
+	/**
+	 * @return the keySignature
+	 */
+	public int getKeySignature() {
+		return keySignature;
+	}
+
+	public void midiCommand(String line) {
+		String[] a=line.split("\\s+");
+		int v=-1;
+		int i=1;
+		while(i<a.length) {
+			if(a[i].equalsIgnoreCase("voice")) {
+				if(i<a.length-1) v=getVoice(a[i+1]);
+				++i;
+			}
+			if(a[i].equalsIgnoreCase("program")) {
+				if(i<a.length-2 && a[i+1].matches("[0-9]+")) {
+					v=Integer.parseInt(a[i+1], 10)-1;
+					++i;
+				}
+				if(v<0) v=getTrack();
+				if(v>=0 && i<a.length-1 && a[i+1].matches("[0-9]+")) {
+					int instrument=Integer.parseInt(a[i+1], 10) - instrumentOffset;	// ABC instruments start at 1
+					if(instrument<0) {
+						instrument=0;
+						instrumentOffset=0;
+					}
+					if(instrument>127) {
+						instrument=127;
+						instrumentOffset=1;
+					}
+					getTracks()[v].setInstrument(instrument); 
+				}
+				++i;
+			}
+			else if(v>=0 && a[i].toLowerCase().matches("instrument=[0-9]+")) {
+				int instrument=Integer.parseInt(a[i].split("=")[1], 10) - instrumentOffset;	// ABC instruments start at 1
+				if(instrument<0) {
+					instrument=0;
+					instrumentOffset=0;
+				}
+				if(instrument>127) {
+					instrument=127;
+					instrumentOffset=1;
+				}
+				getTracks()[v].setInstrument(instrument); 
+			}
+			else if(a[i].equalsIgnoreCase("gchord")) {
+				if(i<a.length-1) setGchord(a[i+1]);
+				++i;
+			}
+			else if(a[i].equalsIgnoreCase("chordprog")) {
+				if(i<a.length-1 && a[i+1].matches("[0-9]+")) {
+					int instrument=Integer.parseInt(a[i+1], 10) - instrumentOffset;	// ABC instruments start at 1
+					if(instrument<0) {
+						instrument=0;
+						instrumentOffset=0;
+					}
+					if(instrument>127) {
+						instrument=127;
+						instrumentOffset=1;
+					}
+					setChordprog(instrument);
+				}
+				++i;
+			}
+			else if(a[i].equalsIgnoreCase("chordvol")) {
+				if(i<a.length-1 && a[i+1].matches("[0-9]+")) setChordvol(Integer.parseInt(a[i+1], 10));
+				++i;
+			}
+			else if(a[i].equalsIgnoreCase("bassprog")) {
+				if(i<a.length-1 && a[i+1].matches("[0-9]+")) {
+					int instrument=Integer.parseInt(a[i+1], 10) - instrumentOffset;	// ABC instruments start at 1
+					if(instrument<0) {
+						instrument=0;
+						instrumentOffset=0;
+					}
+					if(instrument>127) {
+						instrument=127;
+						instrumentOffset=1;
+					}
+					setBassprog(instrument);
+				}
+				++i;
+			}
+			else if(a[i].equalsIgnoreCase("bassvol")) {
+				if(i<a.length-1 && a[i+1].matches("[0-9]+")) setBassvol(Integer.parseInt(a[i+1], 10));
+				++i;
+			}
+			else if(a[i].equalsIgnoreCase("drum")) {
+				String d="";
+				for(i+=1;i<a.length;i++) d+=a[i]+" ";
+				setDrum(d.trim());
+			}
+			else if(a[i].equalsIgnoreCase("beat")) {
+				String d="";
+				for(i+=1;i<a.length;i++) d+=a[i]+" ";
+				setBeat(d.trim());
+			}
+			else if(a[i].equalsIgnoreCase("beatstring")) {
+				if(i<a.length-1 && a[i+1].toLowerCase().matches("[fmp]+")) setBeatstring(a[i+1].toLowerCase());
+				++i;
+			}
+			else if(a[i].equalsIgnoreCase(DRONE)) {
+				String d="";
+				for(i+=1;i<a.length;i++) d+=a[i]+" ";
+				setDrone(d.trim());
+			}
+			else if(a[i].equalsIgnoreCase("gchordon")) setGchordon(true);
+			else if(a[i].equalsIgnoreCase("gchordoff")) setGchordon(false);
+			else if(a[i].equalsIgnoreCase("drumon")) setDrumon(true);
+			else if(a[i].equalsIgnoreCase("drumoff")) setDrumon(false);
+			else if(a[i].equalsIgnoreCase("droneon")) setDroneon(true);
+			else if(a[i].equalsIgnoreCase("droneoff")) setDroneon(false);
+			++i;
+		}
+	}
+
+	/*	
+	 * MIDI files usually sound artificial and expressionless, but there are several ways to improve them. 
+	 * The command %%MIDI beatstring fmp provides a way of specifying where the strong, medium and weak
+	 * stresses fall within a bar.
+	 *   f indicates a strong beat, m a medium beat, and p a soft beat.
+	 * For example, let's consider an Irish jig, which has a 6/8 time.
+	 * The corresponding fmp sequence would be fppmpp.
+	 */ 
+	private void setBeatstring(String string) {
+		if(string.matches("[fmp]+")) beatstring=string;
+	}
+
+	/*	
+	 * To fine-grain the volume of the single notes in a measure, the
+	 *  %%MIDI beat <vol1> <vol2> <vol3> <pos>
+	 * command can be used. vol1, vol2, and vol3 specify the volume of notes that fall on a strong,
+	 * medium, and weak beat, while pos indicates the position of strong beats in the measure.
+	 * We interpret it as percentages of the track volume, the first beat (pos=0) is always a 
+	 * strong beat and pos indicates the medium beat
+	*/
+	private void setBeat(String string) {
+		if(string.matches("[0-9]+\\s+[0-9]+\\s+[0-9]+\\s+[0-9]+")) {
+			if(beat==null) beat=new int[4];
+			String[] a=string.split("\\s+");
+			for(int i=0;i<4;i++) beat[i]=Integer.parseInt(a[i],10);
+			if(beatstring!=null && beat[3]>0 && beatstring.length()>beat[3])
+				beatstring=beatstring.substring(0,beat[3])+"m"+beatstring.substring(beat[3]+1);
+		}
+	}
+
+	/**
+	 * @param instrumentOffset the instrumentOffset to set
+	 */
+	public void setInstrumentOffset(int instrumentOffset) {
+		this.instrumentOffset = instrumentOffset;
+	}
+
+	public void postprocessor() {
+		if(events==null) return;
+		int sz=events.size();
+		if(this.ticks==0) this.measures--;
+		((ABCTrack)voice.get(0)).setPan(8);
+		if(chordvoice>=0) generatechordtracks(sz);
+		if(dronevoice>=0) generatedronetrack(sz);
+		if(drumvoice>=0) generatedrumtrack(sz);
+	}
+
+	public void sortEvents() {
+		if(getEvents()==null) return;
+		if(this.sorted) return;
+		Collections.sort(getEvents(),new Comparator() {
+			public int compare(Object o1, Object o2) {
+				if(o1 instanceof ABCLocation){
+					ABCLocation c1 = (ABCLocation)o1;
+					return c1.compareTo(o2);
+				}
+				if(o2 instanceof ABCLocation){
+					ABCLocation c2 = (ABCLocation)o2;
+					return 0 - c2.compareTo(o1);
+				}
+				return 0;
+			}
+		});
+		this.sorted=true;
+	}
+
+	private void generatedronetrack(int sz) {
+		sortEvents();
+		measure=0;
+		ticks=0;
+		this.dronenotes=initDronenotes();
+		part=null;
+		droneon=false;
+		tied=false;
+		for(int i=0;i<sz;i++) {
+			ABCLocation loc=(ABCLocation) events.get(i);
+			if(loc.getTrack()==dronevoice) {
+				ABCEvent e=loc.getEvent();
+				if(droneon && drone!=null) {
+					int m=loc.getMeasure();
+					while(measure<m) {
+						advancedroneticks(ticksperbar);
+						++measure;
+						ticks=0;
+					}
+					part=loc.getPart();
+					advancedroneticks(loc.getTicks());
+				}
+				else {
+					measure=loc.getMeasure();
+					ticks=loc.getTicks();
+				}
+				switch(e.getType()) {
+				case ABCEvent.DRONEOFF: droneon=false;tied=false;break;
+				case ABCEvent.DRONEON:  droneon=true;break;
+				case ABCEvent.DRONE:
+					drone=e.getParm();
+					this.dronenotes=initDronenotes();
+					break;
+				case ABCEvent.TIME:
+					ticksperbar = (e.getNumerator() * 4 * TICKS_PER_QUART)/e.getDenominator();
+					this.dronenotes=initDronenotes();
+					break;
+				}
+			}
+		}
+		if(droneon && drone!=null) {
+			while(measure<measures-1) {
+				advancedroneticks(ticksperbar);
+				++measure;
+				ticks=0;
+			}
+		}
+	}
+
+	private void advancedroneticks(int t) {
+		if(droneon && t>0 && this.dronenotes != null) {
+			for(int i=0;i<this.dronenotes.length;i++) {
+				ABCEvent e=(ABCEvent) dronenotes[i].clone();
+				e.setTicks(t-this.ticks);
+				e.setTied(this.tied);
+				events.add(new ABCLocation(this.part,dronevoice,this.measure,this.ticks,null,e));
+			}
+			this.tied=true;
+		}
+		this.ticks = t;
+	}
+
+	private ABCEvent[] initDronenotes() {
+		if(drone==null || !drone.matches("[0-9]+\\s+[0-9]+\\s+[0-9]+\\s+[0-9]+\\s+[0-9]+")) return null;
+		ABCEvent[] e=new ABCEvent[2];
+		String[] a=this.drone.split("\\s+");
+		int[] strings=((ABCTrack)voice.get(dronevoice)).getStrings();
+		int i=Integer.parseInt(a[0],10)-instrumentOffset;
+		if(i<0) {
+			i=0;
+			instrumentOffset=0;
+		}
+		if(i>127) {
+			i=127;
+			instrumentOffset=1;
+		}
+		((ABCTrack)voice.get(dronevoice)).setInstrument(i);
+		for(int n=0;n<e.length;n++) {
+			e[n]=new ABCEvent(ABCEvent.NOTE,"D",0);
+			e[n].setPitchStringAndFret(Integer.parseInt(a[1+n],10), strings);
+			e[n].setVelocity(Integer.parseInt(a[3+n],10));
+			e[n].setTicks(this.ticksperbar);
+			e[n].setTied(this.tied);
+		}
+		return e;
+	}
+
+	private void generatedrumtrack(int sz) {
+		sortEvents();
+		measure=0;
+		ticks=0;
+		drum=null;
+		part=null;
+		drumon=true;
+		for(int i=0;i<sz;i++) {
+			ABCLocation loc=(ABCLocation) events.get(i);
+			if(loc.getTrack()==drumvoice) {
+				ABCEvent e=loc.getEvent();
+				if(drumon && drum!=null) {
+					int m=loc.getMeasure();
+					while(measure<m) {
+						advancedrumticks(ticksperbar);
+						++measure;
+						ticks=0;
+					}
+					part=loc.getPart();
+					advancedrumticks(loc.getTicks());
+				}
+				else {
+					measure=loc.getMeasure();
+					ticks=loc.getTicks();
+				}
+				switch(e.getType()) {
+				case ABCEvent.DRUMOFF: drumon=false;break;
+				case ABCEvent.DRUMON:  drumon=true;break;
+				case ABCEvent.DRUM:
+					drum=e.getParm();
+					this.drumnotes=initDrumnotes();
+					break;
+				case ABCEvent.TIME:
+					ticksperbar = (e.getNumerator() * 4 * TICKS_PER_QUART)/e.getDenominator();
+					this.drumnotes=initDrumnotes();
+					break;
+				}
+			}
+		}
+		if(drumon && drum!=null) {
+			while(measure<measures-1) {
+				advancedrumticks(ticksperbar);
+				++measure;
+				ticks=0;
+			}
+		}
+	}
+
+	private ABCEvent[] initDrumnotes() {
+		if(drum==null) return null;
+		String[] a=drum.split("\\s+");
+		for(int i=1;i<a.length;i++) {
+			if(!a[i].matches("[0-9]+"))
+				return null;
+		}
+		char[] d=a[0].toCharArray();
+		int n=0;
+		int notes=0;
+		int events=0;
+		for(int i=0;i<d.length;i++) {
+			if(d[i]>'1' && d[i]<='9') n+=d[i]-'1';
+			else {
+				n++;
+				events++;
+				if(d[i]=='d') notes++;
+			}
+		}
+		if(n<1 || notes<1 || a.length < 2*notes+1) return null;
+		int ticksperdrum=ticksperbar/n;
+		ABCEvent[] e=new ABCEvent[events];
+		int[] drumstrings;
+		if(drumvoice<0) drumstrings=new ABCTrack("dummy\tdrums").getStrings(); 
+		else drumstrings=((ABCTrack)voice.get(drumvoice)).getStrings();
+		n=0;
+		int note=0;
+		events=0;
+		for(int i=0;i<d.length;i++) {
+			if(d[i]>'1' && d[i]<='9') {
+				n=d[i]-'0';
+				e[events-1].setTicks(ticksperdrum*n);
+			}
+			else {
+				if(d[i]=='d') {
+					e[events]=new ABCEvent(this,"d");
+					e[events].setPitchStringAndFret(Integer.parseInt(a[note+1], 10)+9,drumstrings);
+					e[events].setVelocity(Integer.parseInt(a[note+notes+1], 10));
+					note++;
+				}
+				else
+					e[events]=new ABCEvent(this,"z");
+				e[events].setTicks(ticksperdrum);
+				events++;
+			}
+		}
+		return e;
+	}
+
+	private void advancedrumticks(int t) {
+		if(drumon && t>0 && this.drumnotes != null) {
+			int i;
+			int n=this.ticks;
+			for(i=0;n>0 && i<drumnotes.length;i++) {
+				n-=drumnotes[i].getTicks();
+			}
+			if(i<drumnotes.length) {
+				if(n==0) {
+					events.add(new ABCLocation(this.part,drumvoice,this.measure,this.ticks,null,drumnotes[i]));
+				}
+				n+=drumnotes[i].getTicks();
+				n+=this.ticks;
+				i++;
+				while(i<drumnotes.length && n<t) {
+					events.add(new ABCLocation(this.part,drumvoice,this.measure,n,null,drumnotes[i]));
+					n+=drumnotes[i].getTicks();
+					i++;
+				}
+			}
+		}
+		this.ticks = t;
+	}
+
+	private void generatechordtracks(int sz) {
+		ABCTrack cTrk=(ABCTrack) voice.get(chordvoice);
+		ABCTrack bTrk=(ABCTrack) voice.get(basevoice);
+		sortEvents();
+		measure=0;
+		ticks=0;
+		chord=null;
+		part=null;
+		gchordon=true;
+		for(int i=0;i<sz;i++) {
+			ABCLocation loc=(ABCLocation) events.get(i);
+			if(loc.getTrack()==chordvoice) {
+				ABCEvent e=loc.getEvent();
+				if(gchordon && chord!=null && gchord!=null) {
+					int m=loc.getMeasure();
+					while(measure<m) {
+						advancegchordticks(ticksperbar);
+						++measure;
+						ticks=0;
+					}
+					part=loc.getPart();
+					advancegchordticks(loc.getTicks());
+				}
+				else {
+					measure=loc.getMeasure();
+					ticks=loc.getTicks();
+				}
+				switch(e.getType()) {
+				case ABCEvent.CHORD_SYMBOL:
+					if(gchordon) {
+						chord=(ABCChord) chordsList.get(e.getChordnum());
+						chordMeasure = this.measure;
+						chordTicks = this.ticks;
+					}
+					break;
+				case ABCEvent.GCHORDOFF: gchordon=false;break;
+				case ABCEvent.GCHORDON:  gchordon=true;break;
+				case ABCEvent.GCHORD:    gchord=e.getParm();tickspergchord=getTickspergchord();break;
+				case ABCEvent.CHORDPROG: chordprog=e.getValue();break;
+				case ABCEvent.CHORDVOL:  chordvol=e.getValue();cTrk.setVolume(chordvol);break;
+				case ABCEvent.BASSPROG:  bassprog=e.getValue();break;
+				case ABCEvent.BASSVOL:   bassvol=e.getValue();bTrk.setVolume(bassvol);break;
+				case ABCEvent.TIME:
+					ticksperbar = (e.getNumerator() * 4 * TICKS_PER_QUART)/e.getDenominator();
+					tickspergchord=getTickspergchord();
+					break;
+				}
+			}
+		}
+		if(gchordon && chord!=null && gchord!=null) {
+			while(measure<measures-1) {
+				advancegchordticks(ticksperbar);
+				++measure;
+				ticks=0;
+			}
+		}
+	}
+
+	public void initBody() {
+		if(droneon && dronevoice<0) {
+			dronevoice=droneTrack(this.track);
+			setDroneon(true);
+		}
+		if(drumon && drumvoice<0) {
+			drumvoice=drumTrack(this.track);
+			setDrumon(true);
+			if(drum!=null) setDrum(drum);
+		}
+		if(this.rhythm==null) {
+			int n=this.timeSignature.getNumerator();
+			int d=this.timeSignature.getDenominator();
+			if(n==6 && d==8) setRhythm("jig");
+			else if(n==4 && d==4) setRhythm("reel");
+			else if(n==3 && d==4) setRhythm("waltz");
+			else if(n==2 && d==4) setRhythm("mars");
+		}
+		if(this.beat==null) {
+			int n=this.timeSignature.getNumerator();
+			switch(n) {
+			case 6: setBeat("105 90 60 3");break; // jig
+			case 4: setBeat("105 90 60 2");break; // reel
+			case 3: setBeat("105 90 60 1");break; // waltz
+			case 2: setBeat("105 90 60 0");break;	// mars
+			case 5: setBeat("105 90 60 2");break;
+			case 12: setBeat("105 90 60 6");break;
+			default: setBeat("105 90 60 0");break;
+			}
+		}
+		if(this.beatstring==null) {
+			int n=this.timeSignature.getNumerator();
+			switch(n) {
+			case 6: setBeatstring("fppmpp");break;
+			case 4: setBeatstring("fpmp");break;
+			case 3: setBeatstring("fmp");break;
+			case 2: setBeatstring("fp");break;
+			case 5: setBeatstring("fpmpp");break;
+			case 12: setBeatstring("fppmppmppmpp");break;
+			default:
+				String s="";
+				for(;n>3;n-=3) s+="mpp";
+				setBeatstring("fpp".substring(0,n)+s);
+				break;
+			}
+			if(beat!=null && beat[3]>0 && beatstring.length()>beat[3])
+				beatstring=beatstring.substring(0,beat[3])+"m"+beatstring.substring(beat[3]+1);
+		}
+	}
+
+	public boolean isHornpipe() {
+		return "hornpipe".equalsIgnoreCase(this.rhythm);
+	}
+	
+	public void initHead() {
+		this.setTimeSignature(new ABCTimeSignature(4,4,true));
+		this.setDefaultNoteLength(new ABCTimeSignature(1,8,false));
+		this.setTempo("1/4=120");
+		this.beatstring=null;
+		this.beat=null;
+		addRedefinable("~ = +roll+");
+		addRedefinable("T = +trill+");
+		addRedefinable("H = +fermata+");
+		addRedefinable("L = +emphasis+");
+		addRedefinable("M = +lowermordent+");
+		addRedefinable("P = +uppermordent+");
+		addRedefinable("S = +segno+");
+		addRedefinable("O = +coda+");
+		addRedefinable("u = +upbow+");
+		addRedefinable("v = +downbow+");
+		this.drone="71 45 33 80 80"; // Bassoon A,, A,,, vol1 vol2
+	}
+
+	public int computePitch(ABCEvent event, char[] a) {
+		int i=0;
+		int p=0;
+		int pitch;
+		int propagate=NOT;
+		String barkey=getBarkey();
+		while(a[i]=='^') {
+			propagate=this.propagate_accidentals;
+			i++;
+			p++;
+		}
+		while(a[i]=='_') {
+			propagate=this.propagate_accidentals;
+			i++;
+			p--;
+		}
+		while(a[i]=='=') {
+			propagate=this.propagate_accidentals;
+			i++;
+			p=0;
+		}
+		boolean hasaccidentals=i>0;
+		int x=barkey.indexOf(a[i]);
+		int y=p+" C D EF G A Bc d ef g a b ".indexOf(a[i]);
+		if(propagate==PITCH || x<0) {
+			if(x!=y) {
+				char[] b=barkey.toCharArray();
+				if(x>=0) b[x]=' ';
+				b[y]=a[i];
+				if("abcdefg".indexOf(a[i])<0) {
+					if(x>=0) b[x+12]=' ';
+					b[y+12]=String.copyValueOf(a, i, 1).toLowerCase().charAt(0);
+				}
+				else {
+					if(x>=0) b[x-12]=' ';
+					b[y-12]=String.copyValueOf(a, i, 1).toUpperCase().charAt(0);
+				}
+				barkey=String.copyValueOf(b);
+				setBarkey(barkey);
+			}
+		}
+		if(hasaccidentals) pitch=y+71;
+		else	pitch=x+71;
+		++i;
+		while(a[i]=='\'') {
+			pitch+=12;
+			i++;
+		}
+		while(a[i]==',') {
+			pitch-=12;
+			i++;
+		}
+		if(propagate_accidentals==OCTAVE) {
+			if(octaveDatabase==null) octaveDatabase=new ABCOctaveDatabase();
+			if(hasaccidentals) octaveDatabase.store(y-x,pitch);
+			else pitch+=octaveDatabase.recall(pitch);
+		}
+		event.setPitchStringAndFret(pitch, null);
+		return i-1;
+	}
+
+	/**
+	 * @param line
+	 */
+	public void directive(String line) {
+		if(line.startsWith("%%propagate-accidentals")) {
+//			%%propagate-accidentals not | octave | pitch
+//			When set to not, accidentals apply only to the note they're attached to.
+//			When set to octave, accidentals also apply to all the notes of the same pitch in the same octave up to the end of the bar. 
+//			When set to pitch, accidentals also apply to all the notes of the same pitch in all octaves up to the end of the bar. 
+//			The default value is pitch.
+			String[] option=line.split("\\s+");
+			if(option.length>1) {
+				if(option[1].equals("not")) this.propagate_accidentals = NOT;
+				else if(option[1].equals("octave")) this.propagate_accidentals = OCTAVE;
+				else if(option[1].equals("pitch")) this.propagate_accidentals = PITCH;
+			}
+		}
+	}
+
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCSymbol.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCSymbol.java
new file mode 100644
index 0000000..30462ab
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCSymbol.java
@@ -0,0 +1,133 @@
+/**
+ * 
+ */
+package org.herac.tuxguitar.io.abc.base;
+
+/**
+ * @author peter
+ * <p>
+ * <b>Redefinable symbols</b>
+ * <p>
+ * As a short cut to writing symbols which avoids the +symbol+ syntax (see decorations),
+ * the letters H-W and h-w and the symbol ~ can be assigned with the U: field.<br>
+ * For example, to assign the letter T to represent the trill, you can write: 
+ * <pre>
+ *     U: T = +trill+
+ * </pre>
+ * You can also use "^text" etc (see Annotations below) in definitions, e.g. 
+ * <pre>
+ *     U: X = ''^+''
+ * </pre>
+ * to print a plus sign over notes with X before them. 
+ * <p>
+ * Symbol definitions can be written in the file header, in which case they apply to all
+ * the tunes in that file, or in a tune header, when they apply only to that tune, and 
+ * override any previous definitions.
+ * <p> 
+ * Programs may also make use of a set of global default definitions, which apply 
+ * everywhere unless overridden by local definitions. <br>
+ * You can assign the same symbol to two or more letters e.g. 
+ * <pre>
+ *     U: T = +trill+
+ *     U: U = +trill+
+ * </pre>
+ * in which case the same visible symbol will be produced by both letters 
+ * (but they may be played differently), 
+ * and you can de-assign a symbol by writing: 
+ * <pre>
+ *     U: T = +nil+
+ * </pre>
+ * or 
+ * <pre>
+ *     U: T = +none+
+ * </pre>
+ * The standard set of definitions (if you do not redefine them) is: 
+ * <pre>
+ *     U: ~ = +roll+
+ *     U: T = +trill+
+ *     U: H = +fermata+
+ *     U: L = +emphasis+
+ *     U: M = +lowermordent+
+ *     U: P = +uppermordent+
+ *     U: S = +segno+
+ *     U: O = +coda+
+ *     U: u = +upbow+
+ *     U: v = +downbow+
+ * </pre>
+ * Please see ABCMacro for an advanced macro mechanism.
+ * <p>
+ * @see ABCMacro
+ */
+public class ABCSymbol {
+
+	private char name;
+	private String symbol;
+	private boolean valid;
+	
+
+	public ABCSymbol(String string) {
+		this.valid=false;
+		int i=string.indexOf('=');
+		if(i>0 && string.substring(0, i).trim().length()==1) {
+			this.name=string.substring(0, i).trim().charAt(0);
+			this.symbol=string.substring(i+1).trim();
+			if("~HIJKLMNOPQRSTUVWhijklmnopqrstuvw".indexOf(this.name)>=0)
+				if(this.symbol.length()>2 && this.symbol.charAt(0)==this.symbol.charAt(this.symbol.length()-1))
+					if(this.symbol.charAt(0)=='+' || this.symbol.charAt(0)=='"')
+						if(this.symbol.substring(1, this.symbol.length()-1).indexOf(this.symbol.charAt(0))<0)
+							valid=true;
+		}
+	}
+
+	public String execute(String line) {
+		int i=0;
+		char q=0;
+		while(i<line.length()) {
+			switch(line.charAt(i)) {
+			case '"': 
+				if(q=='"') q=0;
+				else if(q==0) q='"';
+				break;
+			case '+':
+				if(q=='+') q=0;
+				else if(q==0) q='+';
+				break;
+			case '!':
+				if(q=='!') q=0;
+				else if(q==0) q='!';
+				break;
+			case '|':
+				if(q=='!') q=0;
+				else if(q=='[') q=0;
+				break;
+			case '[':
+				if(q==0) q='[';
+				break;
+			case ']':
+				if(q=='!') q=0;
+				else if(q=='[') q=0;
+				break;
+			default:
+				if(q==0 && line.charAt(i)==name) {
+					line=line.substring(0,i)+symbol+line.substring(i+1);
+					i+=symbol.length()-1;
+				}
+			}
+			++i;
+		}
+		return line;
+	}
+
+	public char getName() {
+		return name;
+	}
+
+	public boolean isValid() {
+		return valid;
+	}
+
+	public boolean isNil() {
+		return symbol.equals("+nil+") || symbol.equals("+none+");
+	}
+
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTempo.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTempo.java
new file mode 100644
index 0000000..8ea8cf3
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTempo.java
@@ -0,0 +1,82 @@
+package org.herac.tuxguitar.io.abc.base;
+
+public class ABCTempo {
+	
+	private int value;
+	
+	public ABCTempo(int value){
+		this.value = value;
+	}
+	
+	/**
+	 * @param string
+	 * <p>
+	 * "the actual number of beats per minute in a piece marked allergro (for example),
+	 *  will depend on the music itself.
+	 *  A piece consisting mainly of 'half notes' can be played very much quicker in
+	 *  terms of bpm than a piece consisting mainly of 'sixteenth notes', 
+	 *  but still be described with the same word."
+	 *  <p>
+	 * Here are the best descriptions for the following tempo markings:<br>
+	 * <table border="2">
+	 * <tr><th>Beats/minute</th><th>marking</th><th>description</th></tr>
+	 * <tr><td>20</td><td>Larghissimo/td><td>very, very slow (20 bpm and below)</td></tr>
+	 * <tr><td>40</td><td>Grave/td><td>slow and solemn (20-40 bpm)</td></tr>
+	 * <tr><td>50</td><td>Lento/td><td>very slow (40-60 bpm)</td></tr>
+	 * <tr><td>60</td><td>Largo/td><td>very slow (40-60 bpm), like lento</td></tr>
+	 * <tr><td>65</td><td>Larghetto</td><td>rather broadly (60-66 bpm)</td></tr> 
+	 * <tr><td>76</td><td>Adagio</td><td>slowly </td></tr>
+	 * <tr><td>80</td><td>Andante</td><td>at a walking pace</td></tr> 
+	 * <tr><td>90</td><td>Andante Moderato</td><td>a bit faster than andante</td></tr>
+	 * <tr><td>100</td><td>Andantino</td><td>slightly faster than andante</td></tr>
+	 * <tr><td>105</td><td>Moderato</td><td>moderately (101-110 bpm)</td></tr>
+	 * <tr><td>110</td><td>Allegretto</td><td>moderately fast (but less so than allegro)</td></tr>
+	 * <tr><td>120</td><td>Allegro moderato</td><td>moderately quick (112-124 bpm)</td></tr>
+	 * <tr><td>130</td><td>Allegro</td><td>fast, quickly and bright (120-139 bpm)</td></tr>
+	 * <tr><td>140</td><td>Vivace</td><td>lively and fast (~140 bpm) (quicker than allegro)</td></tr>
+	 * <tr><td>150</td><td>Vivacissimo</td><td>very fast and lively</td></tr>
+	 * <tr><td>160</td><td>Allegrissimo</td><td>very fast</td></tr>
+	 * <tr><td>180</td><td>Presto</td><td>very fast (168-200 bpm)</td></tr>
+	 * <tr><td>220</td><td>Prestissimo</td><td>extremely fast (more than 200bpm)</td></tr>
+	 * </table>
+	 * 
+	 */
+	public ABCTempo(String string) {
+		this.value=120;
+		if(string.indexOf("larghissimo")>=0) this.value=20;
+		else if(string.indexOf("grave")>=0) this.value=40;
+		else if(string.indexOf("lento")>=0) this.value=50;
+		else if(string.indexOf("largo")>=0) this.value=60;
+		else if(string.indexOf("larghetto")>=0) this.value=65;
+		else if(string.indexOf("adagio")>=0) this.value=76;
+		else if(string.indexOf("andante moderato")>=0) this.value=90;
+		else if(string.indexOf("andante")>=0) this.value=80;
+		else if(string.indexOf("andantino")>=0) this.value=100;
+		else if(string.indexOf("allegro moderato")>=0) this.value=120;
+		else if(string.indexOf("moderato")>=0) this.value=105;
+		else if(string.indexOf("allegretto")>=0) this.value=110;
+		else if(string.indexOf("allegro")>=0) this.value=130;
+		else if(string.indexOf("vivace")>=0) this.value=140;
+		else if(string.indexOf("vivacissimo")>=0) this.value=150;
+		else if(string.indexOf("allegrissimo")>=0) this.value=160;
+		else if(string.indexOf("presto")>=0) this.value=180;
+		else if(string.indexOf("prestissimo")>=0) this.value=220;
+		else if(string.indexOf("slow")>=0) this.value=80;
+		else if(string.indexOf("fast")>=0) this.value=130;
+		else if(string.indexOf("lively")>=0) this.value=140;
+	}
+
+	public int getValue() {
+		return this.value;
+	}
+	
+	public String toString(){
+		String string = new String("[TEMPO]");
+		string += "\n     Value:       " + getValue();
+		return string;
+	}
+
+	public ABCTempo copy() {
+		return new ABCTempo(value);
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTempoChange.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTempoChange.java
new file mode 100644
index 0000000..89f98ab
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTempoChange.java
@@ -0,0 +1,27 @@
+package org.herac.tuxguitar.io.abc.base;
+
+public class ABCTempoChange {
+	private int measure;
+	private int tempo;
+	
+	public ABCTempoChange(int measure, int tempo) {
+		this.measure = measure;
+		this.tempo = tempo;
+	}
+	
+	public int getMeasure(){
+		return this.measure;
+	}
+	
+	public int getTempo() {
+		return this.tempo;
+	}
+	
+	public String toString(){
+		String string = new String("[TEMPO CHANGE]");
+		string += "\n     Measure:     " + getMeasure();
+		string += "\n     Value:       " + getTempo();
+		return string;
+	}
+
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCText.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCText.java
new file mode 100644
index 0000000..3519067
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCText.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.io.abc.base;
+
+public class ABCText {
+	
+	private String value;
+	
+	public ABCText(String value){
+		this.value = value;
+	}
+	
+	public String getValue() {
+		return this.value;
+	}
+	
+	public String toString(){
+		String string = new String("[TEXT]");
+		string += "\n     Value:       " + getValue();
+		return string;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTimeSignature.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTimeSignature.java
new file mode 100644
index 0000000..3fe7bf2
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTimeSignature.java
@@ -0,0 +1,33 @@
+package org.herac.tuxguitar.io.abc.base;
+
+public class ABCTimeSignature {
+	
+	private int numerator;
+	private int denominator;
+	private boolean toEnd;
+	
+	public ABCTimeSignature(int numerator, int denominator, boolean toEnd) {
+		this.numerator = numerator;
+		this.denominator = denominator;
+		this.toEnd=toEnd;
+	}
+	
+	public String toString() {
+		return this.numerator+"/"+this.denominator;
+	}
+	
+	public int getDenominator() {
+		return this.denominator;
+	}
+	
+	public int getNumerator() {
+		return this.numerator;
+	}
+
+	/**
+	 * @return the toEnd
+	 */
+	public boolean isToEnd() {
+		return toEnd;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.java
new file mode 100644
index 0000000..af08d39
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTimeSignatureChange.java
@@ -0,0 +1,28 @@
+package org.herac.tuxguitar.io.abc.base;
+
+public class ABCTimeSignatureChange{
+	
+	private int measure;
+	private ABCTimeSignature timeSignature;
+	
+	public ABCTimeSignatureChange(int measure, ABCTimeSignature timeSignature) {
+		this.measure = measure;
+		this.timeSignature = timeSignature;
+	}
+	
+	public int getMeasure(){
+		return this.measure;
+	}
+	
+	public ABCTimeSignature getTimeSignature() {
+		return this.timeSignature;
+	}
+	
+	public String toString(){
+		String string = new String("[TIME SIGNATURE CHANGE]");
+		string += "\n     Measure:     " + getMeasure();
+		string += "\n     Numerator:   " + getTimeSignature().getNumerator();
+		string += "\n     Denominator: " + getTimeSignature().getDenominator();
+		return string;
+	}
+}
diff --git a/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTrack.java b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTrack.java
new file mode 100644
index 0000000..268f2cf
--- /dev/null
+++ b/TuxGuitar-abc/src/org/herac/tuxguitar/io/abc/base/ABCTrack.java
@@ -0,0 +1,240 @@
+package org.herac.tuxguitar.io.abc.base;
+
+import org.herac.tuxguitar.io.abc.ABCSongImporter;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+public class ABCTrack {
+	
+	public static final int FLAG_DOUBLE_STRINGS = 0x01;
+	public static final int FLAG_LET_RING = 0x02;
+	public static final int FLAG_PEDAL_SABCEL_GUITAR = 0x04;
+	public static final int FLAG_EFFECT_CHANNEL_DISABLED = 0x08;
+	public static final int FLAG_RHYTHM_TRACK = 0x10;
+	private boolean percussion;
+	private int instrument;
+	private int capo;
+	private int clefType;
+	private int clefNumber;
+	private int pan;
+	private int volume;
+	private int flags;
+	private int[] strings;
+	private String name;
+	private String declaration;
+	private boolean bagpipe;
+	
+	public ABCTrack(String declaration) {
+		this.declaration=declaration;
+		name=declaration.split("\\s+")[0];
+		percussion = declaration.endsWith("\tdrums");
+		bagpipe = declaration.endsWith("\tdrone"); 
+		instrument=0;
+		capo=0;
+		clefType=TGMeasure.DEFAULT_CLEF;
+		clefNumber=0;
+		pan=(int) (Math.random()*16);
+		volume=-1;
+		flags=0; 
+		strings=null;
+		if(declaration.toLowerCase().indexOf("clef=")>0) {
+			if(declaration.toLowerCase().indexOf("clef=treble")>0) clefType=TGMeasure.CLEF_TREBLE;
+			if(declaration.toLowerCase().indexOf("clef=bass")>0) clefType=TGMeasure.CLEF_BASS;
+			if(declaration.toLowerCase().indexOf("clef=alto")>0) clefType=TGMeasure.CLEF_ALTO;
+			if(declaration.toLowerCase().indexOf("clef=tenor")>0) clefType=TGMeasure.CLEF_TENOR;
+		}
+		switch(clefType) {
+		case TGMeasure.CLEF_ALTO:
+			strings=new int[4];
+			strings[0]=67;
+			strings[1]=62;
+			strings[2]=57;
+			strings[3]=52;
+			break;
+		case TGMeasure.CLEF_BASS:
+			strings=new int[4];
+			strings[0]=67;
+			strings[1]=62;
+			strings[2]=57;
+			strings[3]=52;
+			break;
+		case TGMeasure.CLEF_TENOR:
+			strings=new int[6];
+			strings[0]=76;
+			strings[1]=71;
+			strings[2]=67;
+			strings[3]=62;
+			strings[4]=57;
+			strings[5]=52;
+			break;
+		case TGMeasure.CLEF_TREBLE:
+			strings=new int[6];
+			strings[0]=88;
+			strings[1]=83;
+			strings[2]=79;
+			strings[3]=74;
+			strings[4]=69;
+			strings[5]=64;
+			break;
+		}
+		if(percussion) {
+			for(int i=0;i<strings.length;i++) 
+				strings[i]=ABCSongImporter.PERCUSSION_TUNINGS[strings.length-1][i];
+		}
+	}
+	
+	public int getCapo() {
+		return this.capo;
+	}
+	
+	public int getClefNumber() {
+		return this.clefNumber;
+	}
+	
+	public int getClefType() {
+		return this.clefType;
+	}
+	
+	public int getFlags() {
+		return this.flags;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public int getPan() {
+		return this.pan;
+	}
+	
+	public boolean isPercussion() {
+		return this.percussion;
+	}
+	
+	public int[] getStrings() {
+		return this.strings;
+	}
+	
+	public int getVolume() {
+		return this.volume;
+	}
+	
+	public int getInstrument() {
+		return this.instrument;
+	}
+	
+	public String toString(){
+		String string = new String("[TRACK]");
+		string += "\n     "  + this.getName();
+		
+		for(int i = 0; i < this.strings.length; i ++){
+			string += "\n     String " + i + ": " + (96 - this.strings[i]);
+		}
+		return string;
+	}
+
+	public String getDeclaration() {
+		// TODO Auto-generated method stub
+		return declaration;
+	}
+
+	/**
+	 * @param capo the capo to set
+	 */
+	public void setCapo(int capo) {
+		this.capo = capo;
+	}
+
+	/**
+	 * @param clefNumber the clefNumber to set
+	 */
+	public void setClefNumber(int clefNumber) {
+		this.clefNumber = clefNumber;
+	}
+
+	/**
+	 * @param clefType the clefType to set
+	 */
+	public void setClefType(int clefType) {
+		transposeStrings(this.clefType,clefType);
+		this.clefType = clefType;
+	}
+
+	private void transposeStrings(int from, int to) {
+		int transpose = tuning(to) - tuning(from);
+		for(int i=0;i<strings.length;i++) strings[i] += transpose;
+	}
+
+	private int tuning(int c) {
+		switch(c) {
+		case TGMeasure.CLEF_ALTO:	return 52;
+		case TGMeasure.CLEF_BASS:	return 52;
+		case TGMeasure.CLEF_TENOR:	return 52;
+		case TGMeasure.CLEF_TREBLE:	return 64;
+		}
+		return 0;
+	}
+
+	/**
+	 * @param instrument the instrument to set
+	 */
+	public void setInstrument(int instrument) {
+		this.instrument = instrument;
+	}
+
+	/**
+	 * @param pan the pan to set
+	 */
+	public void setPan(int pan) {
+		this.pan = pan;
+	}
+
+	/**
+	 * @param volume the volume to set
+	 */
+	public void setVolume(int volume) {
+		this.volume = volume;
+	}
+
+	/**
+	 * @param flags the flags to set
+	 */
+	public void setFlags(int flags) {
+		this.flags = flags;
+	}
+
+	public ABCTrack clone(String name, int numstrings) {
+		ABCTrack trk=new ABCTrack(this.declaration);
+		trk.name=name;
+		trk.percussion = name.endsWith("\tdrums");
+		trk.bagpipe = name.endsWith("\tdrone"); 
+		if(numstrings==strings.length && !trk.percussion) 
+			return trk;
+		trk.strings=new int[numstrings];
+		if(trk.percussion) {
+			for(int i=0;i<numstrings;i++) 
+				trk.strings[i]=ABCSongImporter.PERCUSSION_TUNINGS[numstrings-1][i];
+		}
+		else if(strings.length>numstrings) {
+			for(int i=0;i<numstrings;i++) {
+				trk.strings[i]=strings[i+strings.length-numstrings];
+			}
+		}
+		else { // strings.length < numstrings
+			trk.strings[numstrings-1]=strings[strings.length-1]-5*(numstrings-strings.length);
+			for(int i=numstrings-1;i>0;i--) {
+				trk.strings[i-1]=(i==2?4:5)+trk.strings[i];
+			}
+		}
+		return trk;
+	}
+
+	public void setStrings(int[] s) {
+		this.strings=new int[s.length];
+		for(int i=0;i<s.length;i++)
+			this.strings[i]=s[i];
+	}
+
+	public boolean isBagpipe() {
+		return bagpipe;
+	}
+}
diff --git a/TuxGuitar-alsa/GNUmakefile b/TuxGuitar-alsa/GNUmakefile
deleted file mode 100644
index c9c2701..0000000
--- a/TuxGuitar-alsa/GNUmakefile
+++ /dev/null
@@ -1,92 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.10 2008/04/17 20:06:34 rzr Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: rzr $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-alsa
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_JNI?=lib$(PACKAGE)-jni.so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.player.impl.midiport.alsa.MidiOutputPortProviderPlugin
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI)
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-JAVA_SOURCE_PATH?=./src/
-JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java")
-JAVA_OBJECTS?=$(PACKAGE).o
-JNI_SOURCE_PATH?=./jni/
-JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c")
-JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o)
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(JAVA_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) 
-
-CC=gcc
-CFLAGS=-fPIC -I $(shell $(GCJ) -print-file-name=include/)
-
-default: all
-
-all: objects library library_jni meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(JAVA_OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-library_jni: $(LIBRARY_JNI)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-%.o: %.c
-	$(CC) $(CFLAGS) -c -o $(@F) $<
-
-$(PACKAGE).o: $(JAVA_SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(JAVA_OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-$(LIBRARY_JNI): $(JNI_OBJECTS)
-	$(GCJ) -shared -o $@ -lasound -lpthread $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.10 2008/04/17 20:06:34 rzr Exp $"
diff --git a/TuxGuitar-alsa/build.properties b/TuxGuitar-alsa/build.properties
index 519fcc3..77594e9 100644
--- a/TuxGuitar-alsa/build.properties
+++ b/TuxGuitar-alsa/build.properties
@@ -4,4 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
\ No newline at end of file
diff --git a/TuxGuitar-alsa/build.xml b/TuxGuitar-alsa/build.xml
index 8aa0044..a3ad7cd 100644
--- a/TuxGuitar-alsa/build.xml
+++ b/TuxGuitar-alsa/build.xml
@@ -7,13 +7,13 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-alsa.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.player.impl.midiport.alsa.MidiOutputPortProviderPlugin" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -38,8 +38,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+--------------------------------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   T U X G U I T A R  -  A L S A           |</echo>
diff --git a/TuxGuitar-alsa/jni/GNUmakefile b/TuxGuitar-alsa/jni/GNUmakefile
index 695cb65..9498be2 100644
--- a/TuxGuitar-alsa/jni/GNUmakefile
+++ b/TuxGuitar-alsa/jni/GNUmakefile
@@ -1,13 +1,12 @@
-CFLAGS?=-I$(shell gcj -print-file-name=include/)
-CFLAGS+=-fPIC
+CFLAGS?=-I$(shell gcj -print-file-name=include/) -fPIC
 LDFLAGS?=
 LDLIBS?=-lasound
 LDPATH?=-L/usr/lib
-LIBRARY_PREFIX?=lib
 LIBRARY_NAME?=tuxguitar-alsa-jni
-LIBRARY_EXTENSION?=.so
+LIBRARY_PREFIX?=lib
+LIBRARY_SUFFIX?=.so
 
-LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION)
+LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_SUFFIX)
 OBJECTS=org_herac_tuxguitar_player_impl_midiport_alsa_MidiSystem.o
 
 %.o: %.c
diff --git a/TuxGuitar-alsa/pom.xml b/TuxGuitar-alsa/pom.xml
new file mode 100644
index 0000000..9e694de
--- /dev/null
+++ b/TuxGuitar-alsa/pom.xml
@@ -0,0 +1,36 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-alsa</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+	
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-alsa/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-alsa/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..96aad7f
--- /dev/null
+++ b/TuxGuitar-alsa/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.player.impl.midiport.alsa.MidiOutputPortProviderPlugin
diff --git a/TuxGuitar-alsa/share/META-INF/tuxguitar-alsa.info b/TuxGuitar-alsa/share/META-INF/tuxguitar-alsa.info
new file mode 100644
index 0000000..d3561e9
--- /dev/null
+++ b/TuxGuitar-alsa/share/META-INF/tuxguitar-alsa.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=ALSA output plugin
+plugin.description=ALSA output plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortImpl.java b/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortImpl.java
index 9e6f566..a9bb5b4 100644
--- a/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortImpl.java
+++ b/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.alsa;
 
-import org.herac.tuxguitar.player.base.MidiOutputPort;
-import org.herac.tuxguitar.player.base.MidiReceiver;
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
 
-public class MidiOutputPortImpl implements MidiOutputPort{
+public class MidiOutputPortImpl extends GMOutputPort{
 	
 	private int port;
 	private int client;
@@ -27,7 +27,7 @@ public class MidiOutputPortImpl implements MidiOutputPort{
 		this.receiver.disconnect();
 	}
 	
-	public MidiReceiver getReceiver(){
+	public GMReceiver getReceiver(){
 		this.open();
 		return this.receiver;
 	}
diff --git a/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortProviderPlugin.java b/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortProviderPlugin.java
index 4fd910b..69b909d 100644
--- a/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortProviderPlugin.java
+++ b/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiOutputPortProviderPlugin.java
@@ -1,28 +1,17 @@
 package org.herac.tuxguitar.player.impl.midiport.alsa;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin;
 import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.plugin.TGMidiOutputPortProviderPlugin;
 
 public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin{
 	
+	private static final String MODULE_ID = "tuxguitar-alsa";
+	
 	protected MidiOutputPortProvider getProvider() {
 		return new MidiOutputPortProviderImpl();
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "ALSA output plugin";
-	}
-	
-	public String getName() {
-		return "ALSA output plugin";
-	}
-	
-	public String getVersion() {
-		return "1.0";
+	public String getModuleId() {
+		return MODULE_ID;
 	}
-	
 }
diff --git a/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiReceiverImpl.java b/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiReceiverImpl.java
index 7ea520b..8fbc2be 100644
--- a/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiReceiverImpl.java
+++ b/TuxGuitar-alsa/src/org/herac/tuxguitar/player/impl/midiport/alsa/MidiReceiverImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.alsa;
 
+import org.herac.tuxguitar.gm.port.GMReceiver;
 import org.herac.tuxguitar.player.base.MidiControllers;
-import org.herac.tuxguitar.player.base.MidiReceiver;
 
-public class MidiReceiverImpl implements MidiReceiver{
+public class MidiReceiverImpl implements GMReceiver{
 	
 	private boolean connected;
 	private MidiOutputPortImpl midiPort;
diff --git a/TuxGuitar-ascii/GNUmakefile b/TuxGuitar-ascii/GNUmakefile
deleted file mode 100644
index ed7fdef..0000000
--- a/TuxGuitar-ascii/GNUmakefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:31 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-ascii
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.io.ascii.ASCIIPluginExporter
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:31 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-ascii/build.properties b/TuxGuitar-ascii/build.properties
index 519fcc3..1a48414 100644
--- a/TuxGuitar-ascii/build.properties
+++ b/TuxGuitar-ascii/build.properties
@@ -4,4 +4,5 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
diff --git a/TuxGuitar-ascii/build.xml b/TuxGuitar-ascii/build.xml
index f1c71c5..a60a035 100644
--- a/TuxGuitar-ascii/build.xml
+++ b/TuxGuitar-ascii/build.xml
@@ -7,13 +7,12 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-ascii.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.ascii.ASCIIPluginExporter" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -32,8 +31,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
diff --git a/TuxGuitar-ascii/pom.xml b/TuxGuitar-ascii/pom.xml
new file mode 100644
index 0000000..169e088
--- /dev/null
+++ b/TuxGuitar-ascii/pom.xml
@@ -0,0 +1,36 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-ascii</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-ascii/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-ascii/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..20d302f
--- /dev/null
+++ b/TuxGuitar-ascii/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.io.ascii.ASCIIPluginExporter
diff --git a/TuxGuitar-ascii/share/META-INF/tuxguitar-ascii.info b/TuxGuitar-ascii/share/META-INF/tuxguitar-ascii.info
new file mode 100644
index 0000000..0b15777
--- /dev/null
+++ b/TuxGuitar-ascii/share/META-INF/tuxguitar-ascii.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=ASCII tab exporter
+plugin.description=ASCII tab exporter
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-ascii/src/org/herac/tuxguitar/io/ascii/ASCIIPluginExporter.java b/TuxGuitar-ascii/src/org/herac/tuxguitar/io/ascii/ASCIIPluginExporter.java
index 4a3a7e3..d6c0898 100644
--- a/TuxGuitar-ascii/src/org/herac/tuxguitar/io/ascii/ASCIIPluginExporter.java
+++ b/TuxGuitar-ascii/src/org/herac/tuxguitar/io/ascii/ASCIIPluginExporter.java
@@ -1,27 +1,17 @@
 package org.herac.tuxguitar.io.ascii;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin;
 import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
 
 public class ASCIIPluginExporter extends TGExporterPlugin{
 	
+	public static final String MODULE_ID = "tuxguitar-ascii";
+	
 	protected TGRawExporter getExporter() {
 		return new ASCIISongExporter();
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "ASCII tab exporter";
-	}
-	
-	public String getName() {
-		return "ASCII tab exporter";
-	}
-	
-	public String getVersion() {
-		return "1.0";
+	public String getModuleId() {
+		return MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-browser-ftp/GNUmakefile b/TuxGuitar-browser-ftp/GNUmakefile
deleted file mode 100644
index 6c177f8..0000000
--- a/TuxGuitar-browser-ftp/GNUmakefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:31 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-browser-ftp
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.gui.tools.browser.ftp.TGBrowserPluginImpl
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:31 akdmia Exp $"
diff --git a/TuxGuitar-browser-ftp/build.properties b/TuxGuitar-browser-ftp/build.properties
index dba8bef..717c2ef 100644
--- a/TuxGuitar-browser-ftp/build.properties
+++ b/TuxGuitar-browser-ftp/build.properties
@@ -4,5 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
 path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-browser-ftp/build.xml b/TuxGuitar-browser-ftp/build.xml
index 57621ac..d2cd5fd 100644
--- a/TuxGuitar-browser-ftp/build.xml
+++ b/TuxGuitar-browser-ftp/build.xml
@@ -7,13 +7,12 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-browser-ftp.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.gui.tools.browser.ftp.TGBrowserPluginImpl" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -32,8 +31,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   L I B R A R Y      |</echo>
diff --git a/TuxGuitar-browser-ftp/pom.xml b/TuxGuitar-browser-ftp/pom.xml
new file mode 100644
index 0000000..06384fc
--- /dev/null
+++ b/TuxGuitar-browser-ftp/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-browser-ftp</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-browser-ftp/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-browser-ftp/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..2c41298
--- /dev/null
+++ b/TuxGuitar-browser-ftp/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.app.tools.browser.ftp.TGBrowserPluginImpl
diff --git a/TuxGuitar-browser-ftp/share/META-INF/tuxguitar-browser-ftp.info b/TuxGuitar-browser-ftp/share/META-INF/tuxguitar-browser-ftp.info
new file mode 100644
index 0000000..e8cc0e2
--- /dev/null
+++ b/TuxGuitar-browser-ftp/share/META-INF/tuxguitar-browser-ftp.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=FTP Plugin for TGBrowser
+plugin.description=FTP Plugin for TGBrowser
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserDataImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserDataImpl.java
new file mode 100644
index 0000000..9b5ba68
--- /dev/null
+++ b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserDataImpl.java
@@ -0,0 +1,97 @@
+package org.herac.tuxguitar.app.tools.browser.ftp;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
+import org.herac.tuxguitar.app.tools.browser.ftp.utils.Base64Decoder;
+import org.herac.tuxguitar.app.tools.browser.ftp.utils.Base64Encoder;
+
+public class TGBrowserDataImpl implements TGBrowserData{
+	
+	private static final String STRING_SEPARATOR = ";";
+	
+	private String name;
+	private String host;
+	private String path;
+	private String username;
+	private String password;
+	private String proxyUser;
+	private String proxyPwd;
+	private String proxyHost;
+	private int proxyPort;
+	
+	public TGBrowserDataImpl(String name, String host, String path, String username, String password, String proxyUser, String proxyPwd, String proxyHost, int proxyPort) {
+		this.name = name;
+		this.host = host;
+		this.path = path;
+		this.username = username;
+		this.password = password;
+		this.proxyUser = proxyUser;
+		this.proxyPwd = proxyPwd;
+		this.proxyHost = proxyHost;
+		this.proxyPort = proxyPort;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public String getHost() {
+		return this.host;
+	}
+	
+	public String getPath() {
+		return this.path;
+	}
+	
+	public String getPassword() {
+		return ((this.username != null && this.username.length() > 0)?this.password:TGBrowserFTPClient.DEFAULT_USER_PASSWORD);
+	}
+	
+	public String getUsername() {
+		return ((this.username != null && this.username.length() > 0)?this.username:TGBrowserFTPClient.DEFAULT_USER_NAME);
+	}
+	
+	public String getTitle(){
+		return getName();
+	}
+	
+	public String getProxyHost() {
+		return this.proxyHost;
+	}
+
+	public int getProxyPort() {
+		return this.proxyPort;
+	}
+
+	public String getProxyUser() {
+		return this.proxyUser;
+	}
+
+	public String getProxyPwd() {
+		return this.proxyPwd;
+	}
+
+	public String toString(){
+		String username = new String( Base64Encoder.encode( getUsername().getBytes() ) );
+		String password = new String( Base64Encoder.encode( getPassword().getBytes() ) );
+		String	proxyUser = new String( Base64Encoder.encode( getProxyUser().getBytes() ));
+		String	proxyPwd = new String( Base64Encoder.encode( getProxyPwd().getBytes() ));
+		
+		return getName() + STRING_SEPARATOR + getHost() + STRING_SEPARATOR
+				+ getPath() + STRING_SEPARATOR + username + STRING_SEPARATOR
+				+ password + STRING_SEPARATOR + proxyUser + STRING_SEPARATOR
+				+ proxyPwd + STRING_SEPARATOR + getProxyHost()
+				+ STRING_SEPARATOR + getProxyPort();
+	}
+	
+	public static TGBrowserData fromString(String string) {
+		String[] data = string.split(STRING_SEPARATOR);
+		if(data.length == 9){
+			String username = new String( Base64Decoder.decode( data[3].getBytes() ) );
+			String password = new String( Base64Decoder.decode( data[4].getBytes() ) );
+			String proxyUser = new String( Base64Decoder.decode( data[5].getBytes() ));
+			String proxyPwd = new String( Base64Decoder.decode( data[6].getBytes() ) );
+			return new TGBrowserDataImpl(data[0], data[1], data[2], username, password,  proxyUser, proxyPwd, data[7], Integer.parseInt(data[8]));
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserElementComparator.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserElementComparator.java
new file mode 100644
index 0000000..5536dee
--- /dev/null
+++ b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserElementComparator.java
@@ -0,0 +1,36 @@
+package org.herac.tuxguitar.app.tools.browser.ftp;
+
+import java.util.Comparator;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
+
+public class TGBrowserElementComparator implements Comparator {
+	
+	private static final int RESULT_LESS = -1;
+	
+	private static final int RESULT_EQUAL = 0;
+	
+	private static final int RESULT_GREATER = 1;
+	
+	private static final int DIRECTION = 1;
+	
+	private static final int DIRECTION_FOLDER = 1;
+	
+	public int compare(Object o1, Object o2) {
+		if(o1 instanceof TGBrowserElement && o2 instanceof TGBrowserElement){
+			TGBrowserElement element1 = (TGBrowserElement)o1;
+			TGBrowserElement element2 = (TGBrowserElement)o2;
+			
+			if(element1.isFolder() && !element2.isFolder()){
+				return (DIRECTION_FOLDER * RESULT_LESS);
+			}
+			if(element2.isFolder() && !element1.isFolder()){
+				return (DIRECTION_FOLDER * RESULT_GREATER);
+			}
+			
+			return (DIRECTION * (element1.getName().compareTo(element2.getName())));
+		}
+		return RESULT_EQUAL;
+	}
+	
+}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserElementImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserElementImpl.java
new file mode 100644
index 0000000..85b3d8a
--- /dev/null
+++ b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserElementImpl.java
@@ -0,0 +1,33 @@
+package org.herac.tuxguitar.app.tools.browser.ftp;
+
+import java.io.InputStream;
+
+import org.herac.tuxguitar.app.tools.browser.TGBrowserException;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
+
+public class TGBrowserElementImpl extends TGBrowserElement{
+	
+	private TGBrowserImpl browser;
+	private String path;
+	private String info;
+	
+	public TGBrowserElementImpl(TGBrowserImpl browser,String name,String info,String path) {
+		super(name);
+		this.browser = browser;
+		this.info = info;
+		this.path = path;
+	}
+	
+	public boolean isFolder(){
+		return (this.info != null && this.info.length() > 0 && this.info.charAt(0) == 'd');
+	}
+	
+	public boolean isSymLink() {
+		return (this.info != null && this.info.length() > 0 && this.info.charAt(0) == 'l');
+	}
+	
+	public InputStream getInputStream()throws TGBrowserException {
+		return this.browser.getInputStream(this.path,this);
+	}
+	
+}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserFTPClient.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserFTPClient.java
new file mode 100644
index 0000000..7f894f6
--- /dev/null
+++ b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserFTPClient.java
@@ -0,0 +1,214 @@
+package org.herac.tuxguitar.app.tools.browser.ftp;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.Socket;
+
+public class TGBrowserFTPClient {
+	
+	public static final int DEFAULT_PORT = 21;
+	
+	public static final String DEFAULT_USER_NAME = "anonymous";
+	public static final String DEFAULT_USER_PASSWORD = "anonymous";
+	
+	private static final String REQUEST_USER_NAME = "USER";
+	private static final String REQUEST_USER_PASSWORD = "PASS";
+	private static final String REQUEST_EXIT = "QUIT";
+	private static final String REQUEST_TYPE_ASCII = "TYPE A";
+	private static final String REQUEST_TYPE_BINARY = "TYPE I";
+	private static final String REQUEST_PWD = "PWD";
+	private static final String REQUEST_CD = "CWD";
+	private static final String REQUEST_CDUP = "CDUP";
+	private static final String REQUEST_PASSIVE = "PASV";
+	private static final String REQUEST_GET = "RETR";
+	private static final String REQUEST_LIST_FILES = "LIST";
+	private static final String REQUEST_LIST_NAMES = "NLST";
+	
+	private static final int RESPONSE_CODE_CONNECT = 220;
+	private static final int RESPONSE_CODE_USER_NAME = 331;
+	private static final int RESPONSE_CODE_USER_PASSWORD = 230;
+	private static final int RESPONSE_CODE_PWD = 257;
+	private static final int RESPONSE_CODE_CD = 250;
+	private static final int RESPONSE_CODE_TYPE = 200;
+	private static final int RESPONSE_CODE_PASV = 227;
+	private static final int RESPONSE_CODE_PASV_CONNECTION = 150;
+	
+	private boolean open;
+	private Socket socket = null;
+	private BufferedWriter request = null;
+	private BufferedReader response = null;
+	
+	public boolean isOpen() {
+		return this.open;
+	}
+	
+	public void setOpen(boolean open) {
+		this.open = open;
+	}
+	
+	public synchronized void open(String host, int port) throws IOException {
+		this.socket = new Socket(host, port);
+		this.response = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
+		this.request = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
+		
+		String response = getResponse(RESPONSE_CODE_CONNECT);
+		if (!isExpectedResponse(response, RESPONSE_CODE_CONNECT)) {
+			throw new IOException(response);
+		}
+		this.setOpen( true );
+	}
+	
+	public synchronized void close() throws IOException {
+		if( this.isOpen() ){
+			this.setRequest(REQUEST_EXIT);
+			this.socket.close();
+			this.socket = null;
+		}
+		this.setOpen( false );
+	}
+	
+	public synchronized void login(String user, String password) throws IOException {
+		String error = null;
+		
+		this.setRequest(REQUEST_USER_NAME + " " + user);
+		if ((error = getResponseError(RESPONSE_CODE_USER_NAME)) != null ){
+			throw new IOException(error);
+		}
+		
+		this.setRequest(REQUEST_USER_PASSWORD + " " + password);
+		if ((error = getResponseError(RESPONSE_CODE_USER_PASSWORD)) != null ){
+			throw new IOException(error);
+		}
+	}
+	
+	public synchronized String pwd() throws IOException {
+		this.setRequest(REQUEST_PWD);
+		String response = getResponse(RESPONSE_CODE_PWD);
+		if (isExpectedResponse(response, RESPONSE_CODE_PWD)) {
+			int i1 = response.indexOf('\"');
+			int i2 = response.indexOf('\"', i1 + 1);
+			if (i2 > i1) {
+				return response.substring(i1 + 1, i2);
+			}
+		}
+		return null;
+	}
+	
+	public synchronized boolean cd(String dir) throws IOException {
+		this.setRequest(REQUEST_CD + " " + dir);
+		return (getResponseError(RESPONSE_CODE_CD) == null);
+	}
+	
+	public synchronized boolean cdUp() throws IOException {
+		this.setRequest(REQUEST_CDUP);
+		return (getResponseError(RESPONSE_CODE_CD) == null);
+	}
+	
+	public synchronized boolean binary() throws IOException {
+		this.setRequest(REQUEST_TYPE_BINARY);
+		return (getResponseError(RESPONSE_CODE_TYPE) == null);
+	}
+	
+	public synchronized boolean ascii() throws IOException {
+		this.setRequest(REQUEST_TYPE_ASCII);
+		return (getResponseError(RESPONSE_CODE_TYPE) == null);
+	}
+	
+	public synchronized byte[] get(String file)  throws IOException{
+		return sendPasvCMD(REQUEST_GET + " " + file);
+	}
+	
+	public synchronized String[] listDetails() throws IOException{
+		return new String( sendPasvCMD(REQUEST_LIST_FILES) ).split("\r\n");
+	}
+	
+	public synchronized String[] listNames() throws IOException{
+		return new String( sendPasvCMD(REQUEST_LIST_NAMES) ).split("\r\n");
+	}
+	
+	private synchronized byte[] sendPasvCMD(String cmd)  throws IOException{
+		byte[] buffer = new byte[0];
+		
+		setRequest(REQUEST_PASSIVE);
+		
+		String response = getResponse(RESPONSE_CODE_PASV);
+		if(isExpectedResponse(response, RESPONSE_CODE_PASV)){
+			setRequest(cmd);
+			
+			int addressIndex1 = response.indexOf("(") + 1;
+			int addressIndex2 = response.indexOf(")");
+			if( addressIndex1 > 0 && addressIndex2 > addressIndex1 ){
+				String[] address = response.substring( addressIndex1, addressIndex2 ).split(",");
+				if(address.length == 6){
+					int a1 = Integer.parseInt(address[0]);
+					int a2 = Integer.parseInt(address[1]);
+					int a3 = Integer.parseInt(address[2]);
+					int a4 = Integer.parseInt(address[3]);
+					int p1 = Integer.parseInt(address[4]);
+					int p2 = Integer.parseInt(address[5]);
+					
+					Socket socket = new Socket((a1 + "." + a2 + "." + a3 + "." + a4), ((p1 * 256) + p2));
+					
+					response = getResponse(RESPONSE_CODE_PASV_CONNECTION);
+					if(isExpectedResponse(response, RESPONSE_CODE_PASV_CONNECTION)){
+						buffer = getByteBuffer(socket.getInputStream());
+					}
+					socket.close();
+				}
+			}
+			if(isExpectedResponse(response, RESPONSE_CODE_PASV_CONNECTION)){
+				response = getResponse();
+			}
+		}
+		return buffer;
+	}
+	
+	private boolean isExpectedResponse(String response, int expectedCode){
+		return ( response != null && response.indexOf(expectedCode + " ") == 0 );
+	}
+	
+	private String getResponseError(int expectedCode) throws IOException{
+		String response = getResponse(expectedCode);
+		return (isExpectedResponse(response, expectedCode) ? null : response); 
+	}
+	
+	private String getResponse(int expectedCode) throws IOException{
+		String response = this.getResponse();
+		// Some FTP Servers appends comments like "[CODE_NUMBER]-".
+		// This while tries to skip all comments before response.
+		while( response != null && response.indexOf(expectedCode + "-") == 0){
+			response = this.getResponse();
+		}
+		return response; 
+	}
+	
+	private String getResponse() throws IOException {
+		return this.response.readLine();
+	}
+	
+	private void setRequest(String line) throws IOException {
+		this.request.write(line + "\r\n");
+		this.request.flush();
+	}
+	
+	private static byte[] getByteBuffer(InputStream in) throws IOException{
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		
+		int read = 0;
+		while((read = in.read()) != -1){
+			out.write(read);
+		}
+		
+		byte[] bytes = out.toByteArray();
+		
+		out.close();
+		out.flush();
+		
+		return bytes;
+	}
+}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserFactoryImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserFactoryImpl.java
new file mode 100644
index 0000000..37fb5af
--- /dev/null
+++ b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserFactoryImpl.java
@@ -0,0 +1,251 @@
+package org.herac.tuxguitar.app.tools.browser.ftp;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserCollection;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserManager;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowser;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+
+public class TGBrowserFactoryImpl implements TGBrowserFactory{
+	
+	public TGBrowserFactoryImpl() {
+		super();
+	}
+	
+	public String getType(){
+		return "ftp";
+	}
+	
+	public String getName(){
+		return "FTP";
+	}
+	
+	public TGBrowser newTGBrowser(TGBrowserData data) {
+		if(data instanceof TGBrowserDataImpl){
+			return new TGBrowserImpl((TGBrowserDataImpl)data);
+		}
+		return null;
+	}
+	
+	public TGBrowserData parseData(String string) {
+		return TGBrowserDataImpl.fromString(string);
+	}
+	
+	public TGBrowserData dataDialog(Shell parent) {
+		return new TGBrowserDataDialog().show(parent);
+	}
+	
+}
+class TGBrowserDataDialog{
+	
+	protected TGBrowserDataImpl data;
+	
+	public TGBrowserDataImpl show(final Shell parent){
+		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("FTP Location"));
+		
+		//-------------LIBRARY DATA-----------------------------------------------
+		Composite composite = new Composite(dialog, SWT.NONE);
+		composite.setLayout(new GridLayout(2,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		GridData textData = new GridData(SWT.FILL,SWT.FILL,true,true);
+		textData.minimumWidth = 300;
+		
+		//name
+		Label nameLabel = new Label(composite, SWT.NULL);
+		nameLabel.setText(TuxGuitar.getProperty("Name"));
+		final Text nameText = new Text(composite,SWT.BORDER);
+		nameText.setLayoutData(textData);
+		
+		
+		//host
+		Label hostLabel = new Label(composite, SWT.NULL);
+		hostLabel.setText(TuxGuitar.getProperty("Host"));
+		final Text hostText = new Text(composite,SWT.BORDER);
+		hostText.setLayoutData(textData);
+		
+		//path
+		Label pathLabel = new Label(composite, SWT.NULL);
+		pathLabel.setText(TuxGuitar.getProperty("Path"));
+		final Text pathText = new Text(composite,SWT.BORDER);
+		pathText.setLayoutData(textData);
+		
+		//user
+		Label userLabel = new Label(composite, SWT.NULL);
+		userLabel.setText(TuxGuitar.getProperty("Login name"));
+		final Text userText = new Text(composite,SWT.BORDER);
+		userText.setLayoutData(textData);
+		
+		//password
+		Label passwordLabel = new Label(composite, SWT.NULL);
+		passwordLabel.setText(TuxGuitar.getProperty("Password"));
+		final Text passwordText = new Text(composite,SWT.BORDER | SWT.PASSWORD);
+		passwordText.setLayoutData(textData);
+		
+		// Proxy
+		final Button hasProxy = new Button(composite,SWT.CHECK);
+		hasProxy.setText("Connect via Proxy Server");
+		Label dummyLabel = new Label(composite, SWT.NULL);
+		dummyLabel.setLayoutData(textData);
+		
+		//proxy host
+		final Label proxyHostLabel = new Label(composite, SWT.NULL);
+		proxyHostLabel.setText(TuxGuitar.getProperty("Proxy Server Host"));
+		final Text proxyHostText = new Text(composite,SWT.BORDER);
+		proxyHostText.setLayoutData(textData);
+		
+		//proxy port
+		final Label proxyPortLabel = new Label(composite, SWT.NULL); 
+		proxyPortLabel.setText(TuxGuitar.getProperty("Proxy Server Port"));
+		final Text proxyPortText = new Text(composite,SWT.BORDER);
+		proxyPortText.setText("1080");
+		proxyPortText.setLayoutData(textData);
+		
+		//proxy user
+		final Label proxyUserLabel = new Label(composite, SWT.NULL);
+		proxyUserLabel.setText(TuxGuitar.getProperty("Proxy Server User"));
+		final Text proxyUserText = new Text(composite,SWT.BORDER);
+		proxyUserText.setLayoutData(textData);
+		
+		//proxy password
+		final Label proxyPwdLabel = new Label(composite, SWT.NULL);
+		proxyPwdLabel.setText(TuxGuitar.getProperty("Proxy Server Password"));
+		final Text proxyPwdText = new Text(composite,SWT.BORDER | SWT.PASSWORD);
+		proxyPwdText.setLayoutData(textData);
+		
+		proxyHostText.setEnabled(false);
+		proxyPortText.setEnabled(false);
+		proxyUserText.setEnabled(false);
+		proxyPwdText.setEnabled(false);
+		
+		hasProxy.addSelectionListener(new SelectionAdapter(){
+			public void widgetSelected(SelectionEvent e) {
+				proxyHostText.setEnabled(hasProxy.getSelection());
+				proxyPortText.setEnabled(hasProxy.getSelection());
+				proxyUserText.setEnabled(hasProxy.getSelection());
+				proxyPwdText.setEnabled(hasProxy.getSelection());
+			}
+		});
+	
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		
+		final Button buttonOk = new Button(buttons, SWT.PUSH);
+		buttonOk.setText(TuxGuitar.getProperty("ok"));
+		buttonOk.setLayoutData(data);
+		buttonOk.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				String name = nameText.getText();
+				String host = hostText.getText();
+				String path = pathText.getText();
+				String user = userText.getText();
+				String password = passwordText.getText();
+				String proxyHost = proxyHostText.getText();
+				String proxyPortStr = proxyPortText.getText();
+				String proxyUser = proxyUserText.getText();
+				String proxyPwd = proxyPwdText.getText();
+				
+				List errors = validate(name, host, proxyHost, proxyPortStr, hasProxy.getSelection());
+				if( !errors.isEmpty() ){
+					StringWriter buffer = new StringWriter();
+					PrintWriter writer = new PrintWriter( buffer );
+					Iterator it = errors.iterator();
+					while( it.hasNext() ){
+						writer.println( "*" + (String)it.next() );
+					}
+					MessageDialog.errorMessage(parent, buffer.getBuffer().toString() );
+				}else{
+					int proxyPort = Integer.parseInt( proxyPortStr );
+					TGBrowserDataDialog.this.data = new TGBrowserDataImpl(name, host, path, user, password, proxyUser, proxyPwd, proxyHost, proxyPort);
+				
+					dialog.dispose();
+				}
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setLayoutData(data);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOk );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return this.data;
+	}
+	
+	protected List validate(String name, String host, String pHost, String pPort, boolean pEnabled){
+		List errors = new ArrayList();
+		// Check the Name
+		if (name == null || name.trim().length() == 0) {
+			errors.add("Please enter the Name");
+		}else{
+			Iterator it = TGBrowserManager.instance().getCollections();
+			while(it.hasNext()){
+				TGBrowserCollection collection = (TGBrowserCollection)it.next();
+				if(name.equals(collection.getData().getTitle())){
+					errors.add("A collection named \"" + name + "\" already exists");
+					break;
+				}
+			}
+		}
+		if (host == null || host.trim().length() == 0) {
+			errors.add("Please enter the Host");
+		}
+		if( pEnabled ){
+			if(pHost == null || pHost.trim().length() == 0){
+				errors.add("Please enter Proxy Host");
+			}
+			if(pPort == null || pPort.trim().length() == 0){
+				errors.add("Please enter Proxy Port");
+			}else if(!isNumber(pPort)){
+				errors.add("Proxy Port should be a valid number");
+			}
+		}
+		
+		return errors;
+	}
+	
+	private boolean isNumber( String s ){
+		try {
+			Integer.parseInt(s);
+		} catch (Throwable e) {
+			return false;
+		}
+		return true;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserImpl.java
new file mode 100644
index 0000000..16892da
--- /dev/null
+++ b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserImpl.java
@@ -0,0 +1,174 @@
+package org.herac.tuxguitar.app.tools.browser.ftp;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.net.Authenticator;
+import java.net.PasswordAuthentication;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Properties;
+
+import org.herac.tuxguitar.app.tools.browser.TGBrowserException;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowser;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
+
+public class TGBrowserImpl extends TGBrowser{
+	
+	private TGBrowserDataImpl data;
+	private String root; 
+	private String path; 
+	private TGBrowserFTPClient client;
+	
+	public TGBrowserImpl(TGBrowserDataImpl data){
+		this.data = data;
+	}
+	
+	private String getRoot(){
+		if(this.root == null){
+			this.root = "/";
+			if(this.data.getPath() != null && this.data.getPath().length() > 0){
+				this.root = this.data.getPath();
+				if(this.root.indexOf("/") != 0){
+					this.root = ("/" + this.root);
+				}
+			}
+		}
+		return this.root;
+	}
+	
+	public void open() throws TGBrowserException{
+		try {
+			checkForProxy();
+			this.client = new TGBrowserFTPClient();
+			this.client.open(this.data.getHost(), TGBrowserFTPClient.DEFAULT_PORT);
+			this.client.login(this.data.getUsername(),this.data.getPassword());
+			this.cdRoot();
+		} catch (Throwable throwable) {
+			throw new TGBrowserException(throwable);
+		}
+	}
+
+	
+	public void close() throws TGBrowserException{
+		try {
+			closeProxy();
+			this.client.close();
+		} catch (Throwable throwable) {
+			throw new TGBrowserException(throwable);
+		}
+	}
+	
+	public void cdElement(TGBrowserElement element) throws TGBrowserException {
+		try {
+			boolean isCDSuccess = this.client.cd(element.getName());
+			if(!isCDSuccess)
+				throw new TGBrowserException("could not cd to "+element.getName());
+			this.path = this.client.pwd();
+		} catch (Throwable throwable) {
+			throw new TGBrowserException(throwable);
+		}
+	}
+	
+	public void cdRoot() throws TGBrowserException {
+		try {
+			this.client.cd(getRoot());
+			this.path = this.client.pwd();
+		} catch (Throwable throwable) {
+			throw new TGBrowserException(throwable);
+		}
+	}
+	
+	public void cdUp() throws TGBrowserException {
+		try {
+			this.client.cdUp();
+			this.path = this.client.pwd();
+		} catch (Throwable throwable) {
+			throw new TGBrowserException(throwable);
+		}
+	}
+	
+	public List listElements() throws TGBrowserException {
+		List elements = new ArrayList();
+		try {
+			this.client.binary();
+			String[] names = this.client.listNames();
+			String[] infos = this.client.listDetails();
+			
+			if(names.length > 0 && infos.length > 0){
+				for(int i = 0;i < names.length;i++){
+					String name = names[i].trim();
+					
+					if(name.indexOf(this.path) == 0 && name.length() > this.path.length()){
+						name = name.substring(this.path.length());
+					}
+					while(name.indexOf("/") == 0){
+						name = name.substring(1);
+					}
+					if( name.length() > 0 ){
+						for(int j = 0;j < infos.length;j++){
+							String info = infos[j].trim();
+							if(info.indexOf(name) > 0){
+								elements.add(new TGBrowserElementImpl(this,name,info,this.path));
+								break;
+							}
+						}
+					}
+				}
+			}
+			if( !elements.isEmpty() ){
+				Collections.sort(elements,new TGBrowserElementComparator());
+			}
+		} catch (Throwable throwable) {
+			throw new TGBrowserException(throwable);
+		}
+		return elements;
+	}
+	
+	public InputStream getInputStream(String path,TGBrowserElement element)throws TGBrowserException {
+		try {
+			this.client.cd(path);
+			this.client.binary();
+			
+			byte[] bytes = this.client.get(element.getName());
+			
+			return new ByteArrayInputStream( bytes );
+		} catch (Throwable throwable) {
+			throw new TGBrowserException(throwable);
+		}
+	}
+	
+	private void checkForProxy() {
+		if (this.data.getProxyHost() != null && this.data.getProxyPort() > 0) {
+			System.setProperty("socksProxyHost", this.data.getProxyHost());
+			System.setProperty("socksProxyPort", String.valueOf(this.data.getProxyPort()));
+			if (this.data.getProxyUser() != null && this.data.getProxyUser().trim().length() > 0) {
+				System.setProperty("java.net.socks.username", this.data.getProxyUser());
+				System.setProperty("java.net.socks.password", this.data.getProxyPwd());
+				Authenticator.setDefault(new ProxyAuthenticator(this.data.getProxyUser(), this.data.getProxyPwd()));
+			}
+		} else {
+			closeProxy();
+		}
+	}
+
+	private void closeProxy() {
+		Properties sysProperties = System.getProperties();
+		sysProperties.remove("socksProxyHost");
+		sysProperties.remove("socksProxyPort");
+		sysProperties.remove("java.net.socks.username");
+		sysProperties.remove("java.net.socks.password");
+	}
+
+	private final class ProxyAuthenticator extends Authenticator {
+		private PasswordAuthentication auth;
+
+		protected ProxyAuthenticator(String user, String pass) {
+			this.auth = new PasswordAuthentication(user, pass.toCharArray());
+		}
+
+		protected PasswordAuthentication getPasswordAuthentication() {
+			return this.auth;
+		}
+	}
+}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserPluginImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserPluginImpl.java
new file mode 100644
index 0000000..7790861
--- /dev/null
+++ b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/TGBrowserPluginImpl.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.app.tools.browser.ftp;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+import org.herac.tuxguitar.app.tools.browser.plugin.TGBrowserPlugin;
+
+public class TGBrowserPluginImpl extends TGBrowserPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-browser-ftp";
+	
+	protected TGBrowserFactory getFactory() {
+		return new TGBrowserFactoryImpl();
+	}
+	
+	public String getModuleId() {
+		return MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/utils/Base64Decoder.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/utils/Base64Decoder.java
new file mode 100644
index 0000000..8d6b7c3
--- /dev/null
+++ b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/utils/Base64Decoder.java
@@ -0,0 +1,96 @@
+package org.herac.tuxguitar.app.tools.browser.ftp.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+public class Base64Decoder {
+	
+	private static final int BUFFER_SIZE = 1024;
+	
+	private static int get1(byte buf[], int off) {
+		return ((buf[off] & 0x3f) << 2) | ((buf[off + 1] & 0x30) >>> 4);
+	}
+	
+	private static int get2(byte buf[], int off) {
+		return ((buf[off + 1] & 0x0f) << 4) | ((buf[off + 2] & 0x3c) >>> 2);
+	}
+	
+	private static int get3(byte buf[], int off) {
+		return ((buf[off + 2] & 0x03) << 6) | (buf[off + 3] & 0x3f);
+	}
+	
+	private static int check(int ch) {
+		if ((ch >= 'A') && (ch <= 'Z')) {
+			return ch - 'A';
+		} else if ((ch >= 'a') && (ch <= 'z')) {
+			return ch - 'a' + 26;
+		} else if ((ch >= '0') && (ch <= '9')) {
+			return ch - '0' + 52;
+		} else {
+			switch (ch) {
+				case '=':
+					return 65;
+				case '+':
+					return 62;
+				case '/':
+					return 63;
+				default:
+					return -1;
+			}
+		}
+	}
+	
+	public static byte[] decode(byte[] bytes){
+		try{
+			ByteArrayInputStream  in  = new ByteArrayInputStream( bytes );
+			ByteArrayOutputStream out = new ByteArrayOutputStream();
+			
+			byte buffer[] = new byte[BUFFER_SIZE];
+			byte chunk[] = new byte[4];
+			int got = -1;
+			int ready = 0;
+			
+			fill: while ((got = in.read(buffer)) > 0) {
+				int skipped = 0;
+				
+				while (skipped < got) {
+					
+					while (ready < 4) {
+						if (skipped >= got){ 
+							continue fill;
+						}
+						int ch = check(buffer[skipped++]);
+						if (ch >= 0) {
+							chunk[ready++] = (byte) ch;
+						}
+					}
+					
+					if (chunk[2] == 65) {
+						out.write(get1(chunk, 0));
+						return out.toByteArray();
+					} 
+					else if (chunk[3] == 65) {
+						out.write(get1(chunk, 0));
+						out.write(get2(chunk, 0));
+						return out.toByteArray();
+					} 
+					else {
+						out.write(get1(chunk, 0));
+						out.write(get2(chunk, 0));
+						out.write(get3(chunk, 0));
+					}
+					ready = 0;
+				}
+			}
+			if (ready == 0){
+				out.flush();
+				return out.toByteArray();
+			}
+			
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		
+		return bytes;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/utils/Base64Encoder.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/utils/Base64Encoder.java
new file mode 100644
index 0000000..f27cc66
--- /dev/null
+++ b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/app/tools/browser/ftp/utils/Base64Encoder.java
@@ -0,0 +1,132 @@
+package org.herac.tuxguitar.app.tools.browser.ftp.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
+public class Base64Encoder {
+	
+	private static final int BUFFER_SIZE = 1024;
+	
+	private static byte ENCODING[] = { 
+		(byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F', (byte) 'G', (byte) 'H',
+		(byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O', (byte) 'P',
+		(byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', (byte) 'V', (byte) 'W', (byte) 'X',
+		(byte) 'Y', (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f',
+		(byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n',
+		(byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', (byte) 'v',
+		(byte) 'w', (byte) 'x', (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3',
+		(byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) '+', (byte) '/',
+		(byte) '='
+	};
+	
+	private static int get1(byte buf[], int off) {
+		return (buf[off] & 0xfc) >> 2;
+	}
+	
+	private static int get2(byte buf[], int off) {
+		return ((buf[off] & 0x3) << 4) | ((buf[off + 1] & 0xf0) >>> 4);
+	}
+	
+	private static int get3(byte buf[], int off) {
+		return ((buf[off + 1] & 0x0f) << 2) | ((buf[off + 2] & 0xc0) >>> 6);
+	}
+	
+	private static int get4(byte buf[], int off) {
+		return buf[off + 2] & 0x3f;
+	}
+	
+	public static byte[] encode(byte[] bytes) {
+		try{
+			
+			ByteArrayInputStream  in  = new ByteArrayInputStream( bytes );
+			ByteArrayOutputStream out = new ByteArrayOutputStream();
+			
+			byte buffer[] = new byte[BUFFER_SIZE];
+			int got = -1;
+			int off = 0;
+			int count = 0;
+			while ((got = in.read(buffer, off, BUFFER_SIZE - off)) > 0) {
+				if ((got + off) >= 3) {
+					got += off;
+					off = 0;
+					while (off + 3 <= got) {
+						int c1 = get1(buffer, off);
+						int c2 = get2(buffer, off);
+						int c3 = get3(buffer, off);
+						int c4 = get4(buffer, off);
+						switch (count) {
+							case 73:
+								out.write(ENCODING[c1]);
+								out.write(ENCODING[c2]);
+								out.write(ENCODING[c3]);
+								out.write('\n');
+								out.write(ENCODING[c4]);
+								count = 1;
+								break;
+							case 74:
+								out.write(ENCODING[c1]);
+								out.write(ENCODING[c2]);
+								out.write('\n');
+								out.write(ENCODING[c3]);
+								out.write(ENCODING[c4]);
+								count = 2;
+								break;
+							case 75:
+								out.write(ENCODING[c1]);
+								out.write('\n');
+								out.write(ENCODING[c2]);
+								out.write(ENCODING[c3]);
+								out.write(ENCODING[c4]);
+								count = 3;
+								break;
+							case 76:
+								out.write('\n');
+								out.write(ENCODING[c1]);
+								out.write(ENCODING[c2]);
+								out.write(ENCODING[c3]);
+								out.write(ENCODING[c4]);
+								count = 4;
+								break;
+							default:
+								out.write(ENCODING[c1]);
+								out.write(ENCODING[c2]);
+								out.write(ENCODING[c3]);
+								out.write(ENCODING[c4]);
+								count += 4;
+								break;
+						}
+						off += 3;
+					}
+					
+					for (int i = 0; i < 3; i++){
+						buffer[i] = (i < got - off) ? buffer[off + i] : ((byte) 0);
+					}
+					off = got - off;
+				} else {
+					off += got;
+				}
+			}
+			
+			switch (off) {
+				case 1:
+					out.write(ENCODING[get1(buffer, 0)]);
+					out.write(ENCODING[get2(buffer, 0)]);
+					out.write('=');
+					out.write('=');
+					break;
+				case 2:
+					out.write(ENCODING[get1(buffer, 0)]);
+					out.write(ENCODING[get2(buffer, 0)]);
+					out.write(ENCODING[get3(buffer, 0)]);
+					out.write('=');
+			}
+			
+			return out.toByteArray();
+			
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		
+		return bytes;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserDataImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserDataImpl.java
deleted file mode 100644
index ec6497d..0000000
--- a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserDataImpl.java
+++ /dev/null
@@ -1,97 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.ftp;
-
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
-import org.herac.tuxguitar.gui.tools.browser.ftp.utils.Base64Decoder;
-import org.herac.tuxguitar.gui.tools.browser.ftp.utils.Base64Encoder;
-
-public class TGBrowserDataImpl implements TGBrowserData{
-	
-	private static final String STRING_SEPARATOR = ";";
-	
-	private String name;
-	private String host;
-	private String path;
-	private String username;
-	private String password;
-	private String proxyUser;
-	private String proxyPwd;
-	private String proxyHost;
-	private int proxyPort;
-	
-	public TGBrowserDataImpl(String name, String host, String path, String username, String password, String proxyUser, String proxyPwd, String proxyHost, int proxyPort) {
-		this.name = name;
-		this.host = host;
-		this.path = path;
-		this.username = username;
-		this.password = password;
-		this.proxyUser = proxyUser;
-		this.proxyPwd = proxyPwd;
-		this.proxyHost = proxyHost;
-		this.proxyPort = proxyPort;
-	}
-	
-	public String getName() {
-		return this.name;
-	}
-	
-	public String getHost() {
-		return this.host;
-	}
-	
-	public String getPath() {
-		return this.path;
-	}
-	
-	public String getPassword() {
-		return ((this.username != null && this.username.length() > 0)?this.password:TGBrowserFTPClient.DEFAULT_USER_PASSWORD);
-	}
-	
-	public String getUsername() {
-		return ((this.username != null && this.username.length() > 0)?this.username:TGBrowserFTPClient.DEFAULT_USER_NAME);
-	}
-	
-	public String getTitle(){
-		return getName();
-	}
-	
-	public String getProxyHost() {
-		return this.proxyHost;
-	}
-
-	public int getProxyPort() {
-		return this.proxyPort;
-	}
-
-	public String getProxyUser() {
-		return this.proxyUser;
-	}
-
-	public String getProxyPwd() {
-		return this.proxyPwd;
-	}
-
-	public String toString(){
-		String username = new String( Base64Encoder.encode( getUsername().getBytes() ) );
-		String password = new String( Base64Encoder.encode( getPassword().getBytes() ) );
-		String	proxyUser = new String( Base64Encoder.encode( getProxyUser().getBytes() ));
-		String	proxyPwd = new String( Base64Encoder.encode( getProxyPwd().getBytes() ));
-		
-		return getName() + STRING_SEPARATOR + getHost() + STRING_SEPARATOR
-				+ getPath() + STRING_SEPARATOR + username + STRING_SEPARATOR
-				+ password + STRING_SEPARATOR + proxyUser + STRING_SEPARATOR
-				+ proxyPwd + STRING_SEPARATOR + getProxyHost()
-				+ STRING_SEPARATOR + getProxyPort();
-	}
-	
-	public static TGBrowserData fromString(String string) {
-		String[] data = string.split(STRING_SEPARATOR);
-		if(data.length == 9){
-			String username = new String( Base64Decoder.decode( data[3].getBytes() ) );
-			String password = new String( Base64Decoder.decode( data[4].getBytes() ) );
-			String proxyUser = new String( Base64Decoder.decode( data[5].getBytes() ));
-			String proxyPwd = new String( Base64Decoder.decode( data[6].getBytes() ) );
-			return new TGBrowserDataImpl(data[0], data[1], data[2], username, password,  proxyUser, proxyPwd, data[7], Integer.parseInt(data[8]));
-		}
-		return null;
-	}
-}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserElementComparator.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserElementComparator.java
deleted file mode 100644
index bde20d7..0000000
--- a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserElementComparator.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.ftp;
-
-import java.util.Comparator;
-
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
-
-public class TGBrowserElementComparator implements Comparator {
-	
-	private static final int RESULT_LESS = -1;
-	
-	private static final int RESULT_EQUAL = 0;
-	
-	private static final int RESULT_GREATER = 1;
-	
-	private static final int DIRECTION = 1;
-	
-	private static final int DIRECTION_FOLDER = 1;
-	
-	public int compare(Object o1, Object o2) {
-		if(o1 instanceof TGBrowserElement && o2 instanceof TGBrowserElement){
-			TGBrowserElement element1 = (TGBrowserElement)o1;
-			TGBrowserElement element2 = (TGBrowserElement)o2;
-			
-			if(element1.isFolder() && !element2.isFolder()){
-				return (DIRECTION_FOLDER * RESULT_LESS);
-			}
-			if(element2.isFolder() && !element1.isFolder()){
-				return (DIRECTION_FOLDER * RESULT_GREATER);
-			}
-			
-			return (DIRECTION * (element1.getName().compareTo(element2.getName())));
-		}
-		return RESULT_EQUAL;
-	}
-	
-}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserElementImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserElementImpl.java
deleted file mode 100644
index f09c195..0000000
--- a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserElementImpl.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.ftp;
-
-import java.io.InputStream;
-
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserException;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
-
-public class TGBrowserElementImpl extends TGBrowserElement{
-	
-	private TGBrowserImpl browser;
-	private String path;
-	private String info;
-	
-	public TGBrowserElementImpl(TGBrowserImpl browser,String name,String info,String path) {
-		super(name);
-		this.browser = browser;
-		this.info = info;
-		this.path = path;
-	}
-	
-	public boolean isFolder(){
-		return (this.info != null && this.info.length() > 0 && this.info.charAt(0) == 'd');
-	}
-	
-	public boolean isSymLink() {
-		return (this.info != null && this.info.length() > 0 && this.info.charAt(0) == 'l');
-	}
-	
-	public InputStream getInputStream()throws TGBrowserException {
-		return this.browser.getInputStream(this.path,this);
-	}
-	
-}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFTPClient.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFTPClient.java
deleted file mode 100644
index 96569e5..0000000
--- a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFTPClient.java
+++ /dev/null
@@ -1,214 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.ftp;
-
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStreamWriter;
-import java.net.Socket;
-
-public class TGBrowserFTPClient {
-	
-	public static final int DEFAULT_PORT = 21;
-	
-	public static final String DEFAULT_USER_NAME = "anonymous";
-	public static final String DEFAULT_USER_PASSWORD = "anonymous";
-	
-	private static final String REQUEST_USER_NAME = "USER";
-	private static final String REQUEST_USER_PASSWORD = "PASS";
-	private static final String REQUEST_EXIT = "QUIT";
-	private static final String REQUEST_TYPE_ASCII = "TYPE A";
-	private static final String REQUEST_TYPE_BINARY = "TYPE I";
-	private static final String REQUEST_PWD = "PWD";
-	private static final String REQUEST_CD = "CWD";
-	private static final String REQUEST_CDUP = "CDUP";
-	private static final String REQUEST_PASSIVE = "PASV";
-	private static final String REQUEST_GET = "RETR";
-	private static final String REQUEST_LIST_FILES = "LIST";
-	private static final String REQUEST_LIST_NAMES = "NLST";
-	
-	private static final int RESPONSE_CODE_CONNECT = 220;
-	private static final int RESPONSE_CODE_USER_NAME = 331;
-	private static final int RESPONSE_CODE_USER_PASSWORD = 230;
-	private static final int RESPONSE_CODE_PWD = 257;
-	private static final int RESPONSE_CODE_CD = 250;
-	private static final int RESPONSE_CODE_TYPE = 200;
-	private static final int RESPONSE_CODE_PASV = 227;
-	private static final int RESPONSE_CODE_PASV_CONNECTION = 150;
-	
-	private boolean open;
-	private Socket socket = null;
-	private BufferedWriter request = null;
-	private BufferedReader response = null;
-	
-	public boolean isOpen() {
-		return this.open;
-	}
-	
-	public void setOpen(boolean open) {
-		this.open = open;
-	}
-	
-	public synchronized void open(String host, int port) throws IOException {
-		this.socket = new Socket(host, port);
-		this.response = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
-		this.request = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
-		
-		String response = getResponse(RESPONSE_CODE_CONNECT);
-		if (!isExpectedResponse(response, RESPONSE_CODE_CONNECT)) {
-			throw new IOException(response);
-		}
-		this.setOpen( true );
-	}
-	
-	public synchronized void close() throws IOException {
-		if( this.isOpen() ){
-			this.setRequest(REQUEST_EXIT);
-			this.socket.close();
-			this.socket = null;
-		}
-		this.setOpen( false );
-	}
-	
-	public synchronized void login(String user, String password) throws IOException {
-		String error = null;
-		
-		this.setRequest(REQUEST_USER_NAME + " " + user);
-		if ((error = getResponseError(RESPONSE_CODE_USER_NAME)) != null ){
-			throw new IOException(error);
-		}
-		
-		this.setRequest(REQUEST_USER_PASSWORD + " " + password);
-		if ((error = getResponseError(RESPONSE_CODE_USER_PASSWORD)) != null ){
-			throw new IOException(error);
-		}
-	}
-	
-	public synchronized String pwd() throws IOException {
-		this.setRequest(REQUEST_PWD);
-		String response = getResponse(RESPONSE_CODE_PWD);
-		if (isExpectedResponse(response, RESPONSE_CODE_PWD)) {
-			int i1 = response.indexOf('\"');
-			int i2 = response.indexOf('\"', i1 + 1);
-			if (i2 > i1) {
-				return response.substring(i1 + 1, i2);
-			}
-		}
-		return null;
-	}
-	
-	public synchronized boolean cd(String dir) throws IOException {
-		this.setRequest(REQUEST_CD + " " + dir);
-		return (getResponseError(RESPONSE_CODE_CD) == null);
-	}
-	
-	public synchronized boolean cdUp() throws IOException {
-		this.setRequest(REQUEST_CDUP);
-		return (getResponseError(RESPONSE_CODE_CD) == null);
-	}
-	
-	public synchronized boolean binary() throws IOException {
-		this.setRequest(REQUEST_TYPE_BINARY);
-		return (getResponseError(RESPONSE_CODE_TYPE) == null);
-	}
-	
-	public synchronized boolean ascii() throws IOException {
-		this.setRequest(REQUEST_TYPE_ASCII);
-		return (getResponseError(RESPONSE_CODE_TYPE) == null);
-	}
-	
-	public synchronized byte[] get(String file)  throws IOException{
-		return sendPasvCMD(REQUEST_GET + " " + file);
-	}
-	
-	public synchronized String[] listDetails() throws IOException{
-		return new String( sendPasvCMD(REQUEST_LIST_FILES) ).split("\r\n");
-	}
-	
-	public synchronized String[] listNames() throws IOException{
-		return new String( sendPasvCMD(REQUEST_LIST_NAMES) ).split("\r\n");
-	}
-	
-	private synchronized byte[] sendPasvCMD(String cmd)  throws IOException{
-		byte[] buffer = new byte[0];
-		
-		setRequest(REQUEST_PASSIVE);
-		
-		String response = getResponse(RESPONSE_CODE_PASV);
-		if(isExpectedResponse(response, RESPONSE_CODE_PASV)){
-			setRequest(cmd);
-			
-			int addressIndex1 = response.indexOf("(") + 1;
-			int addressIndex2 = response.indexOf(")");
-			if( addressIndex1 > 0 && addressIndex2 > addressIndex1 ){
-				String[] address = response.substring( addressIndex1, addressIndex2 ).split(",");
-				if(address.length == 6){
-					int a1 = Integer.parseInt(address[0]);
-					int a2 = Integer.parseInt(address[1]);
-					int a3 = Integer.parseInt(address[2]);
-					int a4 = Integer.parseInt(address[3]);
-					int p1 = Integer.parseInt(address[4]);
-					int p2 = Integer.parseInt(address[5]);
-					
-					Socket socket = new Socket((a1 + "." + a2 + "." + a3 + "." + a4), ((p1 * 256) + p2));
-					
-					response = getResponse(RESPONSE_CODE_PASV_CONNECTION);
-					if(isExpectedResponse(response, RESPONSE_CODE_PASV_CONNECTION)){
-						buffer = getByteBuffer(socket.getInputStream());
-					}
-					socket.close();
-				}
-			}
-			if(isExpectedResponse(response, RESPONSE_CODE_PASV_CONNECTION)){
-				response = getResponse();
-			}
-		}
-		return buffer;
-	}
-	
-	private boolean isExpectedResponse(String response, int expectedCode){
-		return ( response != null && response.indexOf(expectedCode + " ") == 0 );
-	}
-	
-	private String getResponseError(int expectedCode) throws IOException{
-		String response = getResponse(expectedCode);
-		return (isExpectedResponse(response, expectedCode) ? null : response); 
-	}
-	
-	private String getResponse(int expectedCode) throws IOException{
-		String response = this.getResponse();
-		// Some FTP Servers appends comments like "[CODE_NUMBER]-".
-		// This while tries to skip all comments before response.
-		while( response != null && response.indexOf(expectedCode + "-") == 0){
-			response = this.getResponse();
-		}
-		return response; 
-	}
-	
-	private String getResponse() throws IOException {
-		return this.response.readLine();
-	}
-	
-	private void setRequest(String line) throws IOException {
-		this.request.write(line + "\r\n");
-		this.request.flush();
-	}
-	
-	private static byte[] getByteBuffer(InputStream in) throws IOException{
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		
-		int read = 0;
-		while((read = in.read()) != -1){
-			out.write(read);
-		}
-		
-		byte[] bytes = out.toByteArray();
-		
-		out.close();
-		out.flush();
-		
-		return bytes;
-	}
-}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFactoryImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFactoryImpl.java
deleted file mode 100644
index 53e74ca..0000000
--- a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserFactoryImpl.java
+++ /dev/null
@@ -1,251 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.ftp;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-
-public class TGBrowserFactoryImpl implements TGBrowserFactory{
-	
-	public TGBrowserFactoryImpl() {
-		super();
-	}
-	
-	public String getType(){
-		return "ftp";
-	}
-	
-	public String getName(){
-		return "FTP";
-	}
-	
-	public TGBrowser newTGBrowser(TGBrowserData data) {
-		if(data instanceof TGBrowserDataImpl){
-			return new TGBrowserImpl((TGBrowserDataImpl)data);
-		}
-		return null;
-	}
-	
-	public TGBrowserData parseData(String string) {
-		return TGBrowserDataImpl.fromString(string);
-	}
-	
-	public TGBrowserData dataDialog(Shell parent) {
-		return new TGBrowserDataDialog().show(parent);
-	}
-	
-}
-class TGBrowserDataDialog{
-	
-	protected TGBrowserDataImpl data;
-	
-	public TGBrowserDataImpl show(final Shell parent){
-		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("FTP Location"));
-		
-		//-------------LIBRARY DATA-----------------------------------------------
-		Composite composite = new Composite(dialog, SWT.NONE);
-		composite.setLayout(new GridLayout(2,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		GridData textData = new GridData(SWT.FILL,SWT.FILL,true,true);
-		textData.minimumWidth = 300;
-		
-		//name
-		Label nameLabel = new Label(composite, SWT.NULL);
-		nameLabel.setText(TuxGuitar.getProperty("Name"));
-		final Text nameText = new Text(composite,SWT.BORDER);
-		nameText.setLayoutData(textData);
-		
-		
-		//host
-		Label hostLabel = new Label(composite, SWT.NULL);
-		hostLabel.setText(TuxGuitar.getProperty("Host"));
-		final Text hostText = new Text(composite,SWT.BORDER);
-		hostText.setLayoutData(textData);
-		
-		//path
-		Label pathLabel = new Label(composite, SWT.NULL);
-		pathLabel.setText(TuxGuitar.getProperty("Path"));
-		final Text pathText = new Text(composite,SWT.BORDER);
-		pathText.setLayoutData(textData);
-		
-		//user
-		Label userLabel = new Label(composite, SWT.NULL);
-		userLabel.setText(TuxGuitar.getProperty("Login name"));
-		final Text userText = new Text(composite,SWT.BORDER);
-		userText.setLayoutData(textData);
-		
-		//password
-		Label passwordLabel = new Label(composite, SWT.NULL);
-		passwordLabel.setText(TuxGuitar.getProperty("Password"));
-		final Text passwordText = new Text(composite,SWT.BORDER | SWT.PASSWORD);
-		passwordText.setLayoutData(textData);
-		
-		// Proxy
-		final Button hasProxy = new Button(composite,SWT.CHECK);
-		hasProxy.setText("Connect via Proxy Server");
-		Label dummyLabel = new Label(composite, SWT.NULL);
-		dummyLabel.setLayoutData(textData);
-		
-		//proxy host
-		final Label proxyHostLabel = new Label(composite, SWT.NULL);
-		proxyHostLabel.setText(TuxGuitar.getProperty("Proxy Server Host"));
-		final Text proxyHostText = new Text(composite,SWT.BORDER);
-		proxyHostText.setLayoutData(textData);
-		
-		//proxy port
-		final Label proxyPortLabel = new Label(composite, SWT.NULL); 
-		proxyPortLabel.setText(TuxGuitar.getProperty("Proxy Server Port"));
-		final Text proxyPortText = new Text(composite,SWT.BORDER);
-		proxyPortText.setText("1080");
-		proxyPortText.setLayoutData(textData);
-		
-		//proxy user
-		final Label proxyUserLabel = new Label(composite, SWT.NULL);
-		proxyUserLabel.setText(TuxGuitar.getProperty("Proxy Server User"));
-		final Text proxyUserText = new Text(composite,SWT.BORDER);
-		proxyUserText.setLayoutData(textData);
-		
-		//proxy password
-		final Label proxyPwdLabel = new Label(composite, SWT.NULL);
-		proxyPwdLabel.setText(TuxGuitar.getProperty("Proxy Server Password"));
-		final Text proxyPwdText = new Text(composite,SWT.BORDER | SWT.PASSWORD);
-		proxyPwdText.setLayoutData(textData);
-		
-		proxyHostText.setEnabled(false);
-		proxyPortText.setEnabled(false);
-		proxyUserText.setEnabled(false);
-		proxyPwdText.setEnabled(false);
-		
-		hasProxy.addSelectionListener(new SelectionAdapter(){
-			public void widgetSelected(SelectionEvent e) {
-				proxyHostText.setEnabled(hasProxy.getSelection());
-				proxyPortText.setEnabled(hasProxy.getSelection());
-				proxyUserText.setEnabled(hasProxy.getSelection());
-				proxyPwdText.setEnabled(hasProxy.getSelection());
-			}
-		});
-	
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-		
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		
-		final Button buttonOk = new Button(buttons, SWT.PUSH);
-		buttonOk.setText(TuxGuitar.getProperty("ok"));
-		buttonOk.setLayoutData(data);
-		buttonOk.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				String name = nameText.getText();
-				String host = hostText.getText();
-				String path = pathText.getText();
-				String user = userText.getText();
-				String password = passwordText.getText();
-				String proxyHost = proxyHostText.getText();
-				String proxyPortStr = proxyPortText.getText();
-				String proxyUser = proxyUserText.getText();
-				String proxyPwd = proxyPwdText.getText();
-				
-				List errors = validate(name, host, proxyHost, proxyPortStr, hasProxy.getSelection());
-				if( !errors.isEmpty() ){
-					StringWriter buffer = new StringWriter();
-					PrintWriter writer = new PrintWriter( buffer );
-					Iterator it = errors.iterator();
-					while( it.hasNext() ){
-						writer.println( "*" + (String)it.next() );
-					}
-					MessageDialog.errorMessage(parent, buffer.getBuffer().toString() );
-				}else{
-					int proxyPort = Integer.parseInt( proxyPortStr );
-					TGBrowserDataDialog.this.data = new TGBrowserDataImpl(name, host, path, user, password, proxyUser, proxyPwd, proxyHost, proxyPort);
-				
-					dialog.dispose();
-				}
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setLayoutData(data);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOk );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return this.data;
-	}
-	
-	protected List validate(String name, String host, String pHost, String pPort, boolean pEnabled){
-		List errors = new ArrayList();
-		// Check the Name
-		if (name == null || name.trim().length() == 0) {
-			errors.add("Please enter the Name");
-		}else{
-			Iterator it = TGBrowserManager.instance().getCollections();
-			while(it.hasNext()){
-				TGBrowserCollection collection = (TGBrowserCollection)it.next();
-				if(name.equals(collection.getData().getTitle())){
-					errors.add("A collection named \"" + name + "\" already exists");
-					break;
-				}
-			}
-		}
-		if (host == null || host.trim().length() == 0) {
-			errors.add("Please enter the Host");
-		}
-		if( pEnabled ){
-			if(pHost == null || pHost.trim().length() == 0){
-				errors.add("Please enter Proxy Host");
-			}
-			if(pPort == null || pPort.trim().length() == 0){
-				errors.add("Please enter Proxy Port");
-			}else if(!isNumber(pPort)){
-				errors.add("Proxy Port should be a valid number");
-			}
-		}
-		
-		return errors;
-	}
-	
-	private boolean isNumber( String s ){
-		try {
-			Integer.parseInt(s);
-		} catch (Throwable e) {
-			return false;
-		}
-		return true;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserImpl.java
deleted file mode 100644
index 9088e74..0000000
--- a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserImpl.java
+++ /dev/null
@@ -1,174 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.ftp;
-
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.net.Authenticator;
-import java.net.PasswordAuthentication;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Properties;
-
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserException;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
-
-public class TGBrowserImpl extends TGBrowser{
-	
-	private TGBrowserDataImpl data;
-	private String root; 
-	private String path; 
-	private TGBrowserFTPClient client;
-	
-	public TGBrowserImpl(TGBrowserDataImpl data){
-		this.data = data;
-	}
-	
-	private String getRoot(){
-		if(this.root == null){
-			this.root = "/";
-			if(this.data.getPath() != null && this.data.getPath().length() > 0){
-				this.root = this.data.getPath();
-				if(this.root.indexOf("/") != 0){
-					this.root = ("/" + this.root);
-				}
-			}
-		}
-		return this.root;
-	}
-	
-	public void open() throws TGBrowserException{
-		try {
-			checkForProxy();
-			this.client = new TGBrowserFTPClient();
-			this.client.open(this.data.getHost(), TGBrowserFTPClient.DEFAULT_PORT);
-			this.client.login(this.data.getUsername(),this.data.getPassword());
-			this.cdRoot();
-		} catch (Throwable throwable) {
-			throw new TGBrowserException(throwable);
-		}
-	}
-
-	
-	public void close() throws TGBrowserException{
-		try {
-			closeProxy();
-			this.client.close();
-		} catch (Throwable throwable) {
-			throw new TGBrowserException(throwable);
-		}
-	}
-	
-	public void cdElement(TGBrowserElement element) throws TGBrowserException {
-		try {
-			boolean isCDSuccess = this.client.cd(element.getName());
-			if(!isCDSuccess)
-				throw new TGBrowserException("could not cd to "+element.getName());
-			this.path = this.client.pwd();
-		} catch (Throwable throwable) {
-			throw new TGBrowserException(throwable);
-		}
-	}
-	
-	public void cdRoot() throws TGBrowserException {
-		try {
-			this.client.cd(getRoot());
-			this.path = this.client.pwd();
-		} catch (Throwable throwable) {
-			throw new TGBrowserException(throwable);
-		}
-	}
-	
-	public void cdUp() throws TGBrowserException {
-		try {
-			this.client.cdUp();
-			this.path = this.client.pwd();
-		} catch (Throwable throwable) {
-			throw new TGBrowserException(throwable);
-		}
-	}
-	
-	public List listElements() throws TGBrowserException {
-		List elements = new ArrayList();
-		try {
-			this.client.binary();
-			String[] names = this.client.listNames();
-			String[] infos = this.client.listDetails();
-			
-			if(names.length > 0 && infos.length > 0){
-				for(int i = 0;i < names.length;i++){
-					String name = names[i].trim();
-					
-					if(name.indexOf(this.path) == 0 && name.length() > this.path.length()){
-						name = name.substring(this.path.length());
-					}
-					while(name.indexOf("/") == 0){
-						name = name.substring(1);
-					}
-					if( name.length() > 0 ){
-						for(int j = 0;j < infos.length;j++){
-							String info = infos[j].trim();
-							if(info.indexOf(name) > 0){
-								elements.add(new TGBrowserElementImpl(this,name,info,this.path));
-								break;
-							}
-						}
-					}
-				}
-			}
-			if( !elements.isEmpty() ){
-				Collections.sort(elements,new TGBrowserElementComparator());
-			}
-		} catch (Throwable throwable) {
-			throw new TGBrowserException(throwable);
-		}
-		return elements;
-	}
-	
-	public InputStream getInputStream(String path,TGBrowserElement element)throws TGBrowserException {
-		try {
-			this.client.cd(path);
-			this.client.binary();
-			
-			byte[] bytes = this.client.get(element.getName());
-			
-			return new ByteArrayInputStream( bytes );
-		} catch (Throwable throwable) {
-			throw new TGBrowserException(throwable);
-		}
-	}
-	
-	private void checkForProxy() {
-		if (this.data.getProxyHost() != null && this.data.getProxyPort() > 0) {
-			System.setProperty("socksProxyHost", this.data.getProxyHost());
-			System.setProperty("socksProxyPort", String.valueOf(this.data.getProxyPort()));
-			if (this.data.getProxyUser() != null && this.data.getProxyUser().trim().length() > 0) {
-				System.setProperty("java.net.socks.username", this.data.getProxyUser());
-				System.setProperty("java.net.socks.password", this.data.getProxyPwd());
-				Authenticator.setDefault(new ProxyAuthenticator(this.data.getProxyUser(), this.data.getProxyPwd()));
-			}
-		} else {
-			closeProxy();
-		}
-	}
-
-	private void closeProxy() {
-		Properties sysProperties = System.getProperties();
-		sysProperties.remove("socksProxyHost");
-		sysProperties.remove("socksProxyPort");
-		sysProperties.remove("java.net.socks.username");
-		sysProperties.remove("java.net.socks.password");
-	}
-
-	private final class ProxyAuthenticator extends Authenticator {
-		private PasswordAuthentication auth;
-
-		protected ProxyAuthenticator(String user, String pass) {
-			this.auth = new PasswordAuthentication(user, pass.toCharArray());
-		}
-
-		protected PasswordAuthentication getPasswordAuthentication() {
-			return this.auth;
-		}
-	}
-}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserPluginImpl.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserPluginImpl.java
deleted file mode 100644
index 6879995..0000000
--- a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/TGBrowserPluginImpl.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.ftp;
-
-import org.herac.tuxguitar.gui.system.plugins.base.TGBrowserPlugin;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
-
-public class TGBrowserPluginImpl extends TGBrowserPlugin {
-	
-	protected TGBrowserFactory getFactory() {
-		return new TGBrowserFactoryImpl();
-	}
-	
-	public String getName() {
-		return "FTP Plugin for TGBrowser";
-	}
-	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "FTP Plugin for TGBrowser";
-	}
-	
-	public String getVersion() {
-		return "1.0";
-	}
-}
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64Decoder.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64Decoder.java
deleted file mode 100644
index 0608133..0000000
--- a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64Decoder.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.ftp.utils;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
-public class Base64Decoder {
-	
-	private static final int BUFFER_SIZE = 1024;
-	
-	private static int get1(byte buf[], int off) {
-		return ((buf[off] & 0x3f) << 2) | ((buf[off + 1] & 0x30) >>> 4);
-	}
-	
-	private static int get2(byte buf[], int off) {
-		return ((buf[off + 1] & 0x0f) << 4) | ((buf[off + 2] & 0x3c) >>> 2);
-	}
-	
-	private static int get3(byte buf[], int off) {
-		return ((buf[off + 2] & 0x03) << 6) | (buf[off + 3] & 0x3f);
-	}
-	
-	private static int check(int ch) {
-		if ((ch >= 'A') && (ch <= 'Z')) {
-			return ch - 'A';
-		} else if ((ch >= 'a') && (ch <= 'z')) {
-			return ch - 'a' + 26;
-		} else if ((ch >= '0') && (ch <= '9')) {
-			return ch - '0' + 52;
-		} else {
-			switch (ch) {
-				case '=':
-					return 65;
-				case '+':
-					return 62;
-				case '/':
-					return 63;
-				default:
-					return -1;
-			}
-		}
-	}
-	
-	public static byte[] decode(byte[] bytes){
-		try{
-			ByteArrayInputStream  in  = new ByteArrayInputStream( bytes );
-			ByteArrayOutputStream out = new ByteArrayOutputStream();
-			
-			byte buffer[] = new byte[BUFFER_SIZE];
-			byte chunk[] = new byte[4];
-			int got = -1;
-			int ready = 0;
-			
-			fill: while ((got = in.read(buffer)) > 0) {
-				int skiped = 0;
-				
-				while (skiped < got) {
-					
-					while (ready < 4) {
-						if (skiped >= got){ 
-							continue fill;
-						}
-						int ch = check(buffer[skiped++]);
-						if (ch >= 0) {
-							chunk[ready++] = (byte) ch;
-						}
-					}
-					
-					if (chunk[2] == 65) {
-						out.write(get1(chunk, 0));
-						return out.toByteArray();
-					} 
-					else if (chunk[3] == 65) {
-						out.write(get1(chunk, 0));
-						out.write(get2(chunk, 0));
-						return out.toByteArray();
-					} 
-					else {
-						out.write(get1(chunk, 0));
-						out.write(get2(chunk, 0));
-						out.write(get3(chunk, 0));
-					}
-					ready = 0;
-				}
-			}
-			if (ready == 0){
-				out.flush();
-				return out.toByteArray();
-			}
-			
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		
-		return bytes;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64Encoder.java b/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64Encoder.java
deleted file mode 100644
index b84d622..0000000
--- a/TuxGuitar-browser-ftp/src/org/herac/tuxguitar/gui/tools/browser/ftp/utils/Base64Encoder.java
+++ /dev/null
@@ -1,132 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.ftp.utils;
-
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-
-public class Base64Encoder {
-	
-	private static final int BUFFER_SIZE = 1024;
-	
-	private static byte ENCODING[] = { 
-		(byte) 'A', (byte) 'B', (byte) 'C', (byte) 'D', (byte) 'E', (byte) 'F', (byte) 'G', (byte) 'H',
-		(byte) 'I', (byte) 'J', (byte) 'K', (byte) 'L', (byte) 'M', (byte) 'N', (byte) 'O', (byte) 'P',
-		(byte) 'Q', (byte) 'R', (byte) 'S', (byte) 'T', (byte) 'U', (byte) 'V', (byte) 'W', (byte) 'X',
-		(byte) 'Y', (byte) 'Z', (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd', (byte) 'e', (byte) 'f',
-		(byte) 'g', (byte) 'h', (byte) 'i', (byte) 'j', (byte) 'k', (byte) 'l', (byte) 'm', (byte) 'n',
-		(byte) 'o', (byte) 'p', (byte) 'q', (byte) 'r', (byte) 's', (byte) 't', (byte) 'u', (byte) 'v',
-		(byte) 'w', (byte) 'x', (byte) 'y', (byte) 'z', (byte) '0', (byte) '1', (byte) '2', (byte) '3',
-		(byte) '4', (byte) '5', (byte) '6', (byte) '7', (byte) '8', (byte) '9', (byte) '+', (byte) '/',
-		(byte) '='
-	};
-	
-	private static int get1(byte buf[], int off) {
-		return (buf[off] & 0xfc) >> 2;
-	}
-	
-	private static int get2(byte buf[], int off) {
-		return ((buf[off] & 0x3) << 4) | ((buf[off + 1] & 0xf0) >>> 4);
-	}
-	
-	private static int get3(byte buf[], int off) {
-		return ((buf[off + 1] & 0x0f) << 2) | ((buf[off + 2] & 0xc0) >>> 6);
-	}
-	
-	private static int get4(byte buf[], int off) {
-		return buf[off + 2] & 0x3f;
-	}
-	
-	public static byte[] encode(byte[] bytes) {
-		try{
-			
-			ByteArrayInputStream  in  = new ByteArrayInputStream( bytes );
-			ByteArrayOutputStream out = new ByteArrayOutputStream();
-			
-			byte buffer[] = new byte[BUFFER_SIZE];
-			int got = -1;
-			int off = 0;
-			int count = 0;
-			while ((got = in.read(buffer, off, BUFFER_SIZE - off)) > 0) {
-				if ((got + off) >= 3) {
-					got += off;
-					off = 0;
-					while (off + 3 <= got) {
-						int c1 = get1(buffer, off);
-						int c2 = get2(buffer, off);
-						int c3 = get3(buffer, off);
-						int c4 = get4(buffer, off);
-						switch (count) {
-							case 73:
-								out.write(ENCODING[c1]);
-								out.write(ENCODING[c2]);
-								out.write(ENCODING[c3]);
-								out.write('\n');
-								out.write(ENCODING[c4]);
-								count = 1;
-								break;
-							case 74:
-								out.write(ENCODING[c1]);
-								out.write(ENCODING[c2]);
-								out.write('\n');
-								out.write(ENCODING[c3]);
-								out.write(ENCODING[c4]);
-								count = 2;
-								break;
-							case 75:
-								out.write(ENCODING[c1]);
-								out.write('\n');
-								out.write(ENCODING[c2]);
-								out.write(ENCODING[c3]);
-								out.write(ENCODING[c4]);
-								count = 3;
-								break;
-							case 76:
-								out.write('\n');
-								out.write(ENCODING[c1]);
-								out.write(ENCODING[c2]);
-								out.write(ENCODING[c3]);
-								out.write(ENCODING[c4]);
-								count = 4;
-								break;
-							default:
-								out.write(ENCODING[c1]);
-								out.write(ENCODING[c2]);
-								out.write(ENCODING[c3]);
-								out.write(ENCODING[c4]);
-								count += 4;
-								break;
-						}
-						off += 3;
-					}
-					
-					for (int i = 0; i < 3; i++){
-						buffer[i] = (i < got - off) ? buffer[off + i] : ((byte) 0);
-					}
-					off = got - off;
-				} else {
-					off += got;
-				}
-			}
-			
-			switch (off) {
-				case 1:
-					out.write(ENCODING[get1(buffer, 0)]);
-					out.write(ENCODING[get2(buffer, 0)]);
-					out.write('=');
-					out.write('=');
-					break;
-				case 2:
-					out.write(ENCODING[get1(buffer, 0)]);
-					out.write(ENCODING[get2(buffer, 0)]);
-					out.write(ENCODING[get3(buffer, 0)]);
-					out.write('=');
-			}
-			
-			return out.toByteArray();
-			
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		
-		return bytes;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar-carbon-integration/build.properties b/TuxGuitar-carbon-integration/build.properties
index dba8bef..717c2ef 100644
--- a/TuxGuitar-carbon-integration/build.properties
+++ b/TuxGuitar-carbon-integration/build.properties
@@ -4,5 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
 path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-carbon-integration/build.xml b/TuxGuitar-carbon-integration/build.xml
index cef5366..a45b136 100644
--- a/TuxGuitar-carbon-integration/build.xml
+++ b/TuxGuitar-carbon-integration/build.xml
@@ -10,10 +10,11 @@
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-carbon-integration.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
+	<property name="service.class" value="org.herac.tuxguitar.util.plugin.TGPlugin" />
 	<property name="service.provider" value="org.herac.tuxguitar.carbon.TGCarbonIntegrationPlugin" />
 	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
diff --git a/TuxGuitar-carbon-integration/jni/libtuxguitar-carbon-integration.jnilib b/TuxGuitar-carbon-integration/jni/libtuxguitar-carbon-integration.jnilib
new file mode 100755
index 0000000..2e19b77
Binary files /dev/null and b/TuxGuitar-carbon-integration/jni/libtuxguitar-carbon-integration.jnilib differ
diff --git a/TuxGuitar-carbon-integration/pom.xml b/TuxGuitar-carbon-integration/pom.xml
new file mode 100644
index 0000000..2c8448b
--- /dev/null
+++ b/TuxGuitar-carbon-integration/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-carbon-integration</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>org.eclipse.swt.carbon.macosx</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-carbon-integration/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-carbon-integration/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..11bce84
--- /dev/null
+++ b/TuxGuitar-carbon-integration/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,2 @@
+org.herac.tuxguitar.carbon.menu.MacMenuPlugin
+org.herac.tuxguitar.carbon.opendoc.OpenDocPlugin
\ No newline at end of file
diff --git a/TuxGuitar-carbon-integration/share/META-INF/tuxguitar-carbon-integration.info b/TuxGuitar-carbon-integration/share/META-INF/tuxguitar-carbon-integration.info
new file mode 100644
index 0000000..946bd6e
--- /dev/null
+++ b/TuxGuitar-carbon-integration/share/META-INF/tuxguitar-carbon-integration.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+#plugin.name=
+#plugin.description=
+#plugin.author=
+#plugin.version=
diff --git a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/TGCarbonIntegrationPlugin.java b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/TGCarbonIntegrationPlugin.java
index 7187ee2..4e28f78 100644
--- a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/TGCarbonIntegrationPlugin.java
+++ b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/TGCarbonIntegrationPlugin.java
@@ -1,26 +1,6 @@
 package org.herac.tuxguitar.carbon;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.carbon.menu.MacMenuPlugin;
-import org.herac.tuxguitar.carbon.opendoc.OpenDocPlugin;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList;
-
-public class TGCarbonIntegrationPlugin extends TGPluginList {
-
-	private List plugins; 
-	
-	protected List getPlugins() {
-		if( this.plugins == null ){
-			this.plugins = new ArrayList();
-			
-			this.plugins.add(new OpenDocPlugin());
-			this.plugins.add(new MacMenuPlugin());
-		}
-		return this.plugins;
-	}
-	
-	
+public class TGCarbonIntegrationPlugin {
 
+	public static final String MODULE_ID = "tuxguitar-carbon-integration";
 }
diff --git a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenu.java b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenu.java
index d8defa8..c8043b8 100644
--- a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenu.java
+++ b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenu.java
@@ -5,10 +5,12 @@ import org.eclipse.swt.internal.carbon.HICommand;
 import org.eclipse.swt.internal.carbon.OS;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.file.ExitAction;
-import org.herac.tuxguitar.gui.actions.help.ShowAboutAction;
-import org.herac.tuxguitar.gui.actions.settings.EditConfigAction;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.action.impl.file.ExitAction;
+import org.herac.tuxguitar.app.action.impl.help.ShowAboutAction;
+import org.herac.tuxguitar.app.action.impl.settings.EditConfigAction;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class MacMenu {
 	
@@ -107,17 +109,25 @@ public class MacMenu {
 	}
 	
 	public int handleQuitCommand(){
-		TuxGuitar.instance().getAction(ExitAction.NAME).process(null);
+		this.executeAction(ExitAction.NAME);
 		return OS.noErr;
 	}
 	
 	public int handleAboutCommand(){
-		TuxGuitar.instance().getAction(ShowAboutAction.NAME).process(null);
+		this.executeAction(ShowAboutAction.NAME);
 		return OS.noErr;
 	}
 	
 	public int handlePreferencesCommand(){
-		TuxGuitar.instance().getAction(EditConfigAction.NAME).process(null);
+		this.executeAction(EditConfigAction.NAME);
 		return OS.noErr;
 	}
+	
+	private void executeAction(final String actionId){
+		TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				TGActionManager.getInstance().execute(actionId);
+			}
+		});
+	}
 }
diff --git a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenuPlugin.java b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenuPlugin.java
index 2a85a1c..38a2528 100644
--- a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenuPlugin.java
+++ b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/menu/MacMenuPlugin.java
@@ -1,10 +1,11 @@
 package org.herac.tuxguitar.carbon.menu;
 
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.carbon.TGCarbonIntegrationPlugin;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
-public class MacMenuPlugin extends TGPluginAdapter {
+public class MacMenuPlugin implements TGPlugin {
 	
 	private MacMenu macMenu;
 	
@@ -26,4 +27,7 @@ public class MacMenuPlugin extends TGPluginAdapter {
 		}
 	}
 
+	public String getModuleId() {
+		return TGCarbonIntegrationPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocAction.java b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocAction.java
index d0ef517..0b0ee0c 100644
--- a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocAction.java
+++ b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocAction.java
@@ -1,16 +1,16 @@
 package org.herac.tuxguitar.carbon.opendoc;
 
 import org.eclipse.swt.SWT;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.actions.file.FileActionUtils;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.action.impl.file.FileActionUtils;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
 
 public class OpenDocAction {
 
 	public static void saveAndOpen(final String file){
-		ActionLock.lock();
+		TGActionLock.lock();
 		
 		TuxGuitar.instance().getPlayer().reset();
 		
@@ -19,13 +19,13 @@ public class OpenDocAction {
 			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
 			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
 			if(status == ConfirmDialog.STATUS_CANCEL){
-				ActionLock.unlock();
+				TGActionLock.unlock();
 				return;
 			}
 			if(status == ConfirmDialog.STATUS_YES){
 				final String fileName = FileActionUtils.getFileName();
 				if(fileName == null){
-					ActionLock.unlock();
+					TGActionLock.unlock();
 					return;
 				}
 				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
@@ -52,7 +52,7 @@ public class OpenDocAction {
 	
 	protected static void openFile(final String url){
 		if(url == null){
-			ActionLock.unlock();
+			TGActionLock.unlock();
 			return;
 		}
 		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
@@ -61,7 +61,7 @@ public class OpenDocAction {
 				if(!TuxGuitar.isDisposed()){
 					FileActionUtils.open(url);
 					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
+					TGActionLock.unlock();
 				}
 			}
 		}).start();
diff --git a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocPlugin.java b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocPlugin.java
index 911ab37..e8c8eee 100644
--- a/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocPlugin.java
+++ b/TuxGuitar-carbon-integration/src/org/herac/tuxguitar/carbon/opendoc/OpenDocPlugin.java
@@ -1,10 +1,10 @@
 package org.herac.tuxguitar.carbon.opendoc;
 
-import org.herac.tuxguitar.carbon.opendoc.OpenDocListener;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter;
+import org.herac.tuxguitar.carbon.TGCarbonIntegrationPlugin;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
-public class OpenDocPlugin extends TGPluginAdapter {
+public class OpenDocPlugin implements TGPlugin {
 	
 	private OpenDocListener openDocListener;
 	
@@ -25,5 +25,8 @@ public class OpenDocPlugin extends TGPluginAdapter {
 			this.openDocListener.init();
 		}
 	}
-
+	
+	public String getModuleId() {
+		return TGCarbonIntegrationPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-cocoa-integration/build.properties b/TuxGuitar-cocoa-integration/build.properties
index dba8bef..717c2ef 100644
--- a/TuxGuitar-cocoa-integration/build.properties
+++ b/TuxGuitar-cocoa-integration/build.properties
@@ -4,5 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
 path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-cocoa-integration/build.xml b/TuxGuitar-cocoa-integration/build.xml
index 65ee093..84dad96 100644
--- a/TuxGuitar-cocoa-integration/build.xml
+++ b/TuxGuitar-cocoa-integration/build.xml
@@ -10,10 +10,11 @@
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-cocoa-integration.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
+	<property name="service.class" value="org.herac.tuxguitar.util.plugin.TGPlugin" />
 	<property name="service.provider" value="org.herac.tuxguitar.cocoa.TGCocoaIntegrationPlugin" />
 	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
diff --git a/TuxGuitar-cocoa-integration/pom.xml b/TuxGuitar-cocoa-integration/pom.xml
new file mode 100644
index 0000000..5f4ad6d
--- /dev/null
+++ b/TuxGuitar-cocoa-integration/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-cocoa-integration</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>org.eclipse.swt.cocoa.macosx</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-cocoa-integration/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-cocoa-integration/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..e27006d
--- /dev/null
+++ b/TuxGuitar-cocoa-integration/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,4 @@
+org.herac.tuxguitar.cocoa.opendoc.OpenDocPlugin
+org.herac.tuxguitar.cocoa.menu.MacMenuPlugin
+org.herac.tuxguitar.cocoa.toolbar.MacToolbarPlugin
+org.herac.tuxguitar.cocoa.modifiedmarker.ModifiedMarkerPlugin
diff --git a/TuxGuitar-cocoa-integration/share/META-INF/tuxguitar-cocoa-integration.info b/TuxGuitar-cocoa-integration/share/META-INF/tuxguitar-cocoa-integration.info
new file mode 100644
index 0000000..c59dbbb
--- /dev/null
+++ b/TuxGuitar-cocoa-integration/share/META-INF/tuxguitar-cocoa-integration.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Cocoa Integration Plugin
+plugin.description=Cocoa Integration Plugin
+plugin.author=Auria & Julian Casadesus
+plugin.version=1.0
diff --git a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/TGCocoaIntegrationPlugin.java b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/TGCocoaIntegrationPlugin.java
index 5c177bc..4025714 100644
--- a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/TGCocoaIntegrationPlugin.java
+++ b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/TGCocoaIntegrationPlugin.java
@@ -1,44 +1,6 @@
 package org.herac.tuxguitar.cocoa;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.cocoa.menu.MacMenuPlugin;
-import org.herac.tuxguitar.cocoa.opendoc.OpenDocPlugin;
-import org.herac.tuxguitar.cocoa.toolbar.MacToolbarPlugin;
-import org.herac.tuxguitar.cocoa.modifiedmarker.ModifiedMarkerPlugin;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList;
-
-public class TGCocoaIntegrationPlugin extends TGPluginList {
-	
-	private List plugins; 
-	
-	protected List getPlugins() throws TGPluginException {
-		if( this.plugins == null ){
-			this.plugins = new ArrayList();
-			
-			this.plugins.add(new OpenDocPlugin());
-			this.plugins.add(new MacMenuPlugin());
-			this.plugins.add(new MacToolbarPlugin());
-			this.plugins.add(new ModifiedMarkerPlugin());
-		}
-		return this.plugins;
-	}
-	
-	public String getAuthor() {
-		return "Auria & Julian Casadesus";
-	}
-	
-	public String getDescription() {
-		return "Cocoa Integration Plugin";
-	}
-	
-	public String getName() {
-		return "Cocoa Integration Plugin";
-	}
+public class TGCocoaIntegrationPlugin {
 	
-	public String getVersion() {
-		return "1.0";
-	}
+	public static final String MODULE_ID = "tuxguitar-cocoa-integration";
 }
diff --git a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenu.java b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenu.java
index dceaf80..e32fec5 100644
--- a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenu.java
+++ b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenu.java
@@ -4,11 +4,13 @@ import org.eclipse.swt.internal.Callback;
 import org.eclipse.swt.internal.cocoa.NSApplication;
 import org.eclipse.swt.internal.cocoa.NSMenu;
 import org.eclipse.swt.internal.cocoa.NSMenuItem;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.action.impl.file.ExitAction;
+import org.herac.tuxguitar.app.action.impl.help.ShowAboutAction;
+import org.herac.tuxguitar.app.action.impl.settings.EditConfigAction;
 import org.herac.tuxguitar.cocoa.TGCocoa;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.file.ExitAction;
-import org.herac.tuxguitar.gui.actions.help.ShowAboutAction;
-import org.herac.tuxguitar.gui.actions.settings.EditConfigAction;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class MacMenu {
 	
@@ -82,17 +84,25 @@ public class MacMenu {
 	}
 	
 	public long handleQuitCommand(){
-		TuxGuitar.instance().getAction(ExitAction.NAME).process(null);
+		this.executeAction(ExitAction.NAME);
 		return TGCocoa.noErr;
 	}
 	
 	public long handleAboutCommand(){
-		TuxGuitar.instance().getAction(ShowAboutAction.NAME).process(null);
+		this.executeAction(ShowAboutAction.NAME);
 		return TGCocoa.noErr;
 	}
 	
 	public long handlePreferencesCommand(){
-		TuxGuitar.instance().getAction(EditConfigAction.NAME).process(null);
+		this.executeAction(EditConfigAction.NAME);
 		return TGCocoa.noErr;
 	}
+	
+	private void executeAction(final String actionId){
+		TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				TGActionManager.getInstance().execute(actionId);
+			}
+		});
+	}
 }
diff --git a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenuPlugin.java b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenuPlugin.java
index 073768d..ce5b67c 100644
--- a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenuPlugin.java
+++ b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/menu/MacMenuPlugin.java
@@ -1,9 +1,10 @@
 package org.herac.tuxguitar.cocoa.menu;
 
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter;
+import org.herac.tuxguitar.cocoa.TGCocoaIntegrationPlugin;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
-public class MacMenuPlugin extends TGPluginAdapter {
+public class MacMenuPlugin implements TGPlugin {
 	
 	private MacMenu macMenu;
 	
@@ -28,4 +29,8 @@ public class MacMenuPlugin extends TGPluginAdapter {
 			throw new TGPluginException( throwable );
 		}
 	}
+	
+	public String getModuleId() {
+		return TGCocoaIntegrationPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarker.java b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarker.java
index 61fc21c..bf19cc9 100644
--- a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarker.java
+++ b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarker.java
@@ -2,8 +2,8 @@ package org.herac.tuxguitar.cocoa.modifiedmarker;
 
 import org.eclipse.swt.internal.cocoa.NSWindow;
 import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
 
 public class ModifiedMarker implements TGUpdateListener {
 	
diff --git a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarkerPlugin.java b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarkerPlugin.java
index ae92476..df65a7c 100644
--- a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarkerPlugin.java
+++ b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/modifiedmarker/ModifiedMarkerPlugin.java
@@ -1,9 +1,10 @@
 package org.herac.tuxguitar.cocoa.modifiedmarker;
 
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter;
+import org.herac.tuxguitar.cocoa.TGCocoaIntegrationPlugin;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
-public class ModifiedMarkerPlugin extends TGPluginAdapter {
+public class ModifiedMarkerPlugin implements TGPlugin {
 	
 	private ModifiedMarker modifiedMarker;
 	
@@ -28,4 +29,8 @@ public class ModifiedMarkerPlugin extends TGPluginAdapter {
 			throw new TGPluginException( throwable );
 		}
 	}
+	
+	public String getModuleId() {
+		return TGCocoaIntegrationPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocAction.java b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocAction.java
index 9a31b99..87f89a6 100644
--- a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocAction.java
+++ b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocAction.java
@@ -1,16 +1,16 @@
 package org.herac.tuxguitar.cocoa.opendoc;
 
 import org.eclipse.swt.SWT;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.actions.file.FileActionUtils;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.action.impl.file.FileActionUtils;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
 
 public class OpenDocAction {
 	
 	public static void saveAndOpen(final String file){
-		ActionLock.lock();
+		TGActionLock.lock();
 		
 		TuxGuitar.instance().getPlayer().reset();
 		
@@ -19,13 +19,13 @@ public class OpenDocAction {
 			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
 			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
 			if(status == ConfirmDialog.STATUS_CANCEL){
-				ActionLock.unlock();
+				TGActionLock.unlock();
 				return;
 			}
 			if(status == ConfirmDialog.STATUS_YES){
 				final String fileName = FileActionUtils.getFileName();
 				if(fileName == null){
-					ActionLock.unlock();
+					TGActionLock.unlock();
 					return;
 				}
 				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
@@ -52,7 +52,7 @@ public class OpenDocAction {
 	
 	protected static void openFile(final String url){
 		if(url == null){
-			ActionLock.unlock();
+			TGActionLock.unlock();
 			return;
 		}
 		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
@@ -61,7 +61,7 @@ public class OpenDocAction {
 				if(!TuxGuitar.isDisposed()){
 					FileActionUtils.open(url);
 					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
+					TGActionLock.unlock();
 				}
 			}
 		}).start();
diff --git a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocPlugin.java b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocPlugin.java
index 0c582d6..afbc8f4 100644
--- a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocPlugin.java
+++ b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/opendoc/OpenDocPlugin.java
@@ -1,9 +1,10 @@
 package org.herac.tuxguitar.cocoa.opendoc;
 
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter;
+import org.herac.tuxguitar.cocoa.TGCocoaIntegrationPlugin;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
-public class OpenDocPlugin extends TGPluginAdapter {
+public class OpenDocPlugin implements TGPlugin {
 	
 	private OpenDocListener openDocListener;
 	
@@ -28,4 +29,8 @@ public class OpenDocPlugin extends TGPluginAdapter {
 			throw new TGPluginException( throwable );
 		}
 	}
+	
+	public String getModuleId() {
+		return TGCocoaIntegrationPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarAction.java b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarAction.java
index 13a8c2f..31968b7 100644
--- a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarAction.java
+++ b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarAction.java
@@ -1,14 +1,15 @@
 package org.herac.tuxguitar.cocoa.toolbar;
 
-import org.herac.tuxguitar.gui.TuxGuitar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.util.TGException;
 import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class MacToolbarAction {
 	
 	protected static void toogleToolbar(){
 		try {
-			TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
+			TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
 					TuxGuitar.instance().getItemManager().toogleToolbarVisibility();
 				}
 			});
diff --git a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarPlugin.java b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarPlugin.java
index f6646ca..386de6f 100644
--- a/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarPlugin.java
+++ b/TuxGuitar-cocoa-integration/src/org/herac/tuxguitar/cocoa/toolbar/MacToolbarPlugin.java
@@ -1,10 +1,11 @@
 package org.herac.tuxguitar.cocoa.toolbar;
 
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.cocoa.TGCocoaIntegrationPlugin;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
-public class MacToolbarPlugin extends TGPluginAdapter {
+public class MacToolbarPlugin implements TGPlugin {
 	
 	private MacToolbar macToolbar;
 	
@@ -35,4 +36,8 @@ public class MacToolbarPlugin extends TGPluginAdapter {
 			throw new TGPluginException( throwable );
 		}
 	}
+	
+	public String getModuleId() {
+		return TGCocoaIntegrationPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-community/GNUmakefile b/TuxGuitar-community/GNUmakefile
deleted file mode 100644
index 902a83e..0000000
--- a/TuxGuitar-community/GNUmakefile
+++ /dev/null
@@ -1,84 +0,0 @@
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-community
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.community.TGCommunityPluginImpl
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SETTINGS_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/
-INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# resources
-LANGUAGE?=./share/lang
-SETTINGS=$(PACKAGE).cfg
-DEFAULT_SETTINGS_URL?="community.url=http://community.tuxguitar.com.ar\n"
-DEFAULT_SETTINGS_BROWSER?="community.browser=;x-www-browser %s;firefox %s;mozilla %s;mozilla-firefox %s;epiphany-browser %s;epiphany-gecko %s\n"
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf settings
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SETTINGS_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR)
-	-install $(SETTINGS) $(DESTDIR)$(INSTALL_SETTINGS_DIR)/$(SETTINGS)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-	-rm $(DESTDIR)$(INSTALL_SETTINGS_DIR)/$(SETTINGS)
-	-rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/*
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-	- at rm $(SETTINGS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-settings:
-	echo $(DEFAULT_SETTINGS_URL) > $(SETTINGS)
-	echo $(DEFAULT_SETTINGS_BROWSER) >> $(SETTINGS)
diff --git a/TuxGuitar-community/build.properties b/TuxGuitar-community/build.properties
index ec2f9c0..cbf31b5 100644
--- a/TuxGuitar-community/build.properties
+++ b/TuxGuitar-community/build.properties
@@ -4,20 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
-path.swt=../TuxGuitar/lib/swt.jar
-
-
-## Default Settings ##
-default.community.url=http://community.tuxguitar.com.ar
-
-default.community.browser=\
-;xdg-open %s\
-;x-www-browser %s\
-;rundll32 url.dll,FileProtocolHandler %s\
-;open %s\
-;firefox %s\
-;mozilla %s\
-;mozilla-firefox %s\
-;epiphany-browser %s\
-;epiphany-gecko %s\
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.swt=../TuxGuitar/lib/swt.jar
\ No newline at end of file
diff --git a/TuxGuitar-community/build.xml b/TuxGuitar-community/build.xml
index b0a7358..0098ba8 100644
--- a/TuxGuitar-community/build.xml
+++ b/TuxGuitar-community/build.xml
@@ -9,13 +9,10 @@
 	<property name="build.src.path" value="src${file.separator}" />
 	<property name="build.share.path" value="share${file.separator}" />
 	<property name="build.path" value="build${file.separator}" />
-	<property name="build.cfg" value="tuxguitar-community.cfg" />
 	<property name="build.jar" value="tuxguitar-community.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.community.TGCommunityPluginImpl" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -34,18 +31,10 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}${file.separator}lang" />
-		<copy todir="${build.path}${file.separator}lang">
-			<fileset dir="${build.share.path}${file.separator}lang"/>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
 		</copy>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
-		
-		<touch file="${build.path}/${build.cfg}" />
-		<echo file="${build.path}/${build.cfg}" append="true">community.url=${default.community.url}${line.separator}</echo>
-		<echo file="${build.path}/${build.cfg}" append="true">community.browser=${default.community.browser}${line.separator}</echo>
-		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
 		<echo>+-----------------------------------------------+</echo>
diff --git a/TuxGuitar-community/pom.xml b/TuxGuitar-community/pom.xml
new file mode 100644
index 0000000..0c470a8
--- /dev/null
+++ b/TuxGuitar-community/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-community</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-community/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-community/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..4a4d774
--- /dev/null
+++ b/TuxGuitar-community/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,4 @@
+org.herac.tuxguitar.community.TGCommunityPlugin
+org.herac.tuxguitar.community.browser.TGBrowserPluginImpl
+org.herac.tuxguitar.community.io.TGShareSongPlugin
+org.herac.tuxguitar.community.startup.TGCommunityStartupPlugin
diff --git a/TuxGuitar-community/share/META-INF/tuxguitar-community.info b/TuxGuitar-community/share/META-INF/tuxguitar-community.info
new file mode 100644
index 0000000..b36767a
--- /dev/null
+++ b/TuxGuitar-community/share/META-INF/tuxguitar-community.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=TuxGuitar Community Integration
+plugin.description=TuxGuitar Community Integration
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.2
diff --git a/TuxGuitar-community/share/lang/messages_fi.properties b/TuxGuitar-community/share/lang/messages_fi.properties
new file mode 100644
index 0000000..44fa7b1
--- /dev/null
+++ b/TuxGuitar-community/share/lang/messages_fi.properties
@@ -0,0 +1,25 @@
+tuxguitar-community.auth-dialog.title=Sis\u00e4\u00e4nkirjautuminen
+tuxguitar-community.auth-dialog.signin=Tunnukseni yhteis\u00f6\u00f6n
+tuxguitar-community.auth-dialog.signin.username=K\u00e4ytt\u00e4j\u00e4tunnus
+tuxguitar-community.auth-dialog.signin.password=Salasana
+tuxguitar-community.auth-dialog.signup=Uusi k\u00e4ytt\u00e4j\u00e4:
+tuxguitar-community.auth-dialog.signup.tip=Jos sinulla ei ole <a href="" >TuxGuitar-yhteis\u00f6n</a> k\u00e4ytt\u00e4j\u00e4tunnusta viel\u00e4, voit <a href="join">luoda k\u00e4ytt\u00e4j\u00e4tunnuksen</a>, ja alkaa jakaa tiedostoja muiden k\u00e4ytt\u00e4jien kanssa. Kun kirjaudut sis\u00e4\u00e4n, voit jakaa, ladata, kommentoida ja arvostella tiedostoja.
+		
+tuxguitar-community.share-dialog.title=Jaa kappaleesi
+tuxguitar-community.share-dialog.details=Kappaleen tiedot
+tuxguitar-community.share-dialog.details.user=K\u00e4ytt\u00e4j\u00e4tunnus
+tuxguitar-community.share-dialog.details.title=Otsikko
+tuxguitar-community.share-dialog.details.tagkeys=Hakusanat
+tuxguitar-community.share-dialog.details.description=Kuvaus
+		
+tuxguitar-community.browser-dialog.title=Jaetut tabulatuurit
+tuxguitar-community.browser-dialog.account=Minun k\u00e4ytt\u00e4j\u00e4tilini
+tuxguitar-community.browser-dialog.account.user=K\u00e4ytt\u00e4j\u00e4tunnus
+		
+tuxguitar-community.welcome-dialog.title=Tervetuloa TuxGuitar-yhteis\u00f6\u00f6n
+tuxguitar-community.welcome-dialog.tip-1=Nyt voit yhteis\u00f6liit\u00e4nn\u00e4isen avulla avata tiedostoja TuxGuitar-yhteis\u00f6n tietovarastosta. Yhteis\u00f6liit\u00e4nn\u00e4inen on osa TuxGuitar-selainta, joka k\u00e4ynnistyy valikon kohdasta Ty\u00f6kalut -> Selain.
+tuxguitar-community.welcome-dialog.tip-2=Voit nyt helposti l\u00e4hett\u00e4\u00e4 ja jakaa tiedostosi yhteis\u00f6lle (Tiedosto -> Vie -> Jaa...)
+tuxguitar-community.welcome-dialog.tip-bottom=Jos sinulla ei ole <a href="" >TuxGuitar-yhteis\u00f6n</a> k\u00e4ytt\u00e4j\u00e4tunnusta viel\u00e4, voit <a href="join">luoda k\u00e4ytt\u00e4j\u00e4tunnuksen</a>, ja alkaa jakaa tiedostoja muiden k\u00e4ytt\u00e4jien kanssa. Kun kirjaudut sis\u00e4\u00e4n, voit jakaa, ladata, kommentoida ja arvostella tiedostoja.
+tuxguitar-community.welcome-dialog.disable=\u00c4l\u00e4 n\u00e4yt\u00e4 t\u00e4t\u00e4 viesti\u00e4 en\u00e4\u00e4 uudelleen.
+		
+
diff --git a/TuxGuitar-community/share/lang/messages_zh_TW.properties b/TuxGuitar-community/share/lang/messages_zh_TW.properties
new file mode 100644
index 0000000..bbc19da
--- /dev/null
+++ b/TuxGuitar-community/share/lang/messages_zh_TW.properties
@@ -0,0 +1,25 @@
+tuxguitar-community.auth-dialog.title=\u767b\u5165
+tuxguitar-community.auth-dialog.signin=\u6211\u7684\u793e\u7fa4\u5e33\u865f
+tuxguitar-community.auth-dialog.signin.username=\u5e33\u865f
+tuxguitar-community.auth-dialog.signin.password=\u5bc6\u78bc
+tuxguitar-community.auth-dialog.signup=\u6211\u662f\u65b0\u4f7f\u7528\u8005
+tuxguitar-community.auth-dialog.signup.tip=\u5047\u5982\u4f60\u9084\u6c92\u6709 <a href="" >TuxGuitar \u793e\u7fa4</a> \u5e33\u865f, \u4f60\u73fe\u5728\u53ef\u4ee5  <a href="join">\u65b0\u5efa\u4e00\u500b\u5e33\u865f </a>, \u7136\u5f8c\u958b\u59cb\u5206\u4eab\u4f60\u7684\u6a94\u6848\u7d66\u5176\u4ed6\u540c\u597d.\u4e00\u65e6\u4f60\u767b\u5165 ,\u4f60\u5c07\u53ef\u4ee5\u4e0a\u50b3,\u4e0b\u8f09,\u8a55\u8a9e\u548c\u7d66\u5206 .
+
+tuxguitar-community.share-dialog.title=\u5206\u4eab\u6211\u7684\u6b4c
+tuxguitar-community.share-dialog.details=\u6b4c\u66f2\u7684\u660e\u7d30
+tuxguitar-community.share-dialog.details.user=\u5e33\u865f
+tuxguitar-community.share-dialog.details.title=\u6a19\u984c
+tuxguitar-community.share-dialog.details.tagkeys=\u6a19\u7c64Tag 
+tuxguitar-community.share-dialog.details.description=\u8aaa\u660e\u4e8b\u9805
+
+tuxguitar-community.browser-dialog.title=\u5206\u4eab\u7684\u5409\u4ed6\u8b5c
+tuxguitar-community.browser-dialog.account=\u6211\u7684\u5e33\u865f
+tuxguitar-community.browser-dialog.account.user=\u5e33\u865f
+
+tuxguitar-community.welcome-dialog.title=\u6b61\u8fce\u60a8\u4f86\u5230 TuxGuitar \u793e\u7fa4
+tuxguitar-community.welcome-dialog.tip-1=\u73fe\u5728\u4f60\u53ef\u4ee5\u958b\u555f\u4f86\u81ea TuxGuitar \u793e\u7fa4\u7684\u6a02\u66f2\u5eab, \u4f7f\u7528\u65b0\u7684TuxGuitar\u700f\u89bd\u5668\u4e2d\u7684\u793e\u7fa4\u6574\u5408\u5916\u639b (\u5de5\u5177 -> \u700f\u89bd)
+tuxguitar-community.welcome-dialog.tip-2=\u4f60\u53ef\u4ee5\u7c21\u55ae\u5730\u4e0a\u50b3\u548c\u5206\u4eab\u4f60\u7684\u6a02\u66f2\u5230\u793e\u7fa4\u4e0a (\u6a94\u6848 -> \u532f\u51fa -> \u5206\u4eab...)
+tuxguitar-community.welcome-dialog.tip-bottom=\u5047\u5982\u4f60\u9084\u6c92\u6709 <a href="" >TuxGuitar \u793e\u7fa4</a> \u5e33\u865f, \u4f60\u73fe\u5728\u53ef\u4ee5  <a href="join">\u65b0\u5efa\u4e00\u500b</a>, \u7136\u5f8c\u958b\u59cb\u5206\u4eab\u4f60\u7684\u6a94\u6848\u7d66\u5176\u4ed6\u540c\u597d.\u4e00\u65e6\u4f60\u767b\u5165 ,\u4f60\u5c07\u53ef\u4ee5\u4e0a\u50b3,\u4e0b\u8f09,\u8a55\u8a9e\u548c\u7d66\u5206.
+tuxguitar-community.welcome-dialog.disable=\u4e0d\u8981\u518d\u986f\u793a\u9019\u500b\u8a0a\u606f
+
+
diff --git a/TuxGuitar-community/share/tuxguitar-community.cfg b/TuxGuitar-community/share/tuxguitar-community.cfg
new file mode 100644
index 0000000..ec17b43
--- /dev/null
+++ b/TuxGuitar-community/share/tuxguitar-community.cfg
@@ -0,0 +1,14 @@
+## Default Settings ##
+
+community.url=http://community.tuxguitar.com.ar
+
+community.browser=\
+;xdg-open %s\
+;x-www-browser %s\
+;rundll32 url.dll,FileProtocolHandler %s\
+;open %s\
+;firefox %s\
+;mozilla %s\
+;mozilla-firefox %s\
+;epiphany-browser %s\
+;epiphany-gecko %s\
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunityPlugin.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunityPlugin.java
new file mode 100644
index 0000000..3061d41
--- /dev/null
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunityPlugin.java
@@ -0,0 +1,25 @@
+package org.herac.tuxguitar.community;
+
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class TGCommunityPlugin implements TGPlugin {
+
+	public static final String MODULE_ID = "tuxguitar-community";
+	
+	public void init() throws TGPluginException{
+		TGCommunitySingleton.getInstance().loadSettings();
+	}
+	
+	public void close() throws TGPluginException{
+		TGCommunitySingleton.getInstance().saveSettings();
+	}
+	
+	public String getModuleId() {
+		return MODULE_ID;
+	}
+
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		// Not implemented.
+	}
+}
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunityPluginImpl.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunityPluginImpl.java
deleted file mode 100644
index 159aa29..0000000
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunityPluginImpl.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.herac.tuxguitar.community;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.community.browser.TGBrowserPluginImpl;
-import org.herac.tuxguitar.community.io.TGShareSongPlugin;
-import org.herac.tuxguitar.community.startup.TGCommunityStartupPlugin;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList;
-
-public class TGCommunityPluginImpl extends TGPluginList {
-
-	protected List getPlugins() throws TGPluginException {
-		List plugins = new ArrayList();
-		
-		plugins.add(new TGShareSongPlugin());
-		plugins.add(new TGBrowserPluginImpl());
-		plugins.add(new TGCommunityStartupPlugin());
-		
-		return plugins;
-	}
-	
-	public void init() throws TGPluginException{
-		TGCommunitySingleton.getInstance().loadSettings();
-		super.init();
-	}
-	
-	public void close() throws TGPluginException{
-		TGCommunitySingleton.getInstance().saveSettings();
-		super.close();
-	}
-	
-	public String getName() {
-		return "TuxGuitar Community Integration";
-	}
-	
-	public String getDescription() {
-		return "TuxGuitar Community Integration";
-	}
-	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getVersion() {
-		return "1.2";
-	}
-}
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunitySingleton.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunitySingleton.java
index 4169f88..e119b2c 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunitySingleton.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/TGCommunitySingleton.java
@@ -1,8 +1,7 @@
 package org.herac.tuxguitar.community;
 
 import org.herac.tuxguitar.community.auth.TGCommunityAuth;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
 
 public class TGCommunitySingleton {
 	
@@ -25,9 +24,8 @@ public class TGCommunitySingleton {
 	}
 	
 	public TGConfigManager getConfig(){
-		if(this.config == null){ 
-			this.config = new TGPluginConfigManager("tuxguitar-community");
-			this.config.init();
+		if( this.config == null ){ 
+			this.config = new TGConfigManager("tuxguitar-community");
 		}
 		return this.config;
 	}
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuth.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuth.java
index 59b6462..d50aad7 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuth.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuth.java
@@ -4,7 +4,7 @@ import java.security.MessageDigest;
 
 import org.herac.tuxguitar.community.auth.utils.Base64Decoder;
 import org.herac.tuxguitar.community.auth.utils.Base64Encoder;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
 
 public class TGCommunityAuth {
 	
@@ -65,11 +65,11 @@ public class TGCommunityAuth {
 	public void save( TGConfigManager config ){
 		String data = new String(this.getUsername() + STRING_SEPARATOR + this.getPassword() );
 		String encodedData = new String(Base64Encoder.encode( data.getBytes() ) ) ;
-		config.setProperty("community.account", encodedData );
+		config.setValue("community.account", encodedData );
 	}
 	
 	public void load( TGConfigManager config ) {
-		String encodedData = config.getStringConfigValue("community.account");
+		String encodedData = config.getStringValue("community.account");
 		if( encodedData != null && encodedData.length() > 0 ){
 			String data = new String(Base64Decoder.decode( encodedData.getBytes() ));
 			String[] values = data.split(STRING_SEPARATOR);
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuthDialog.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuthDialog.java
index cff2b35..2382a2d 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuthDialog.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/TGCommunityAuthDialog.java
@@ -14,10 +14,11 @@ import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
 import org.herac.tuxguitar.community.TGCommunitySingleton;
 import org.herac.tuxguitar.community.utils.TGCommunityWeb;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
+import org.herac.tuxguitar.util.TGException;
 import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class TGCommunityAuthDialog {
@@ -37,8 +38,8 @@ public class TGCommunityAuthDialog {
 	public void open(final Shell shell) {
 		try {
 			if( shell != null && !shell.isDisposed() ){
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-					public void run() throws Throwable {
+				TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
 						if( !shell.isDisposed() ){
 							doOpen( shell );
 						}
@@ -98,7 +99,7 @@ public class TGCommunityAuthDialog {
 				final String href = event.text;
 				if( href != null ){
 					new Thread( new Runnable() {
-						public void run() {
+						public void run() throws TGException {
 							TGCommunityWeb.open( href );
 						}
 					} ).start();
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/utils/Base64Decoder.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/utils/Base64Decoder.java
index 10cc9c1..fa5bf0c 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/utils/Base64Decoder.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/auth/utils/Base64Decoder.java
@@ -51,15 +51,15 @@ public class Base64Decoder {
 			int ready = 0;
 			
 			fill: while ((got = in.read(buffer)) > 0) {
-				int skiped = 0;
+				int skipped = 0;
 				
-				while (skiped < got) {
+				while (skipped < got) {
 					
 					while (ready < 4) {
-						if (skiped >= got){ 
+						if (skipped >= got){ 
 							continue fill;
 						}
-						int ch = check(buffer[skiped++]);
+						int ch = check(buffer[skipped++]);
 						if (ch >= 0) {
 							chunk[ready++] = (byte) ch;
 						}
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserAuthDialog.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserAuthDialog.java
index a9e496f..7ee7ed9 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserAuthDialog.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserAuthDialog.java
@@ -11,10 +11,10 @@ import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
 import org.herac.tuxguitar.community.TGCommunitySingleton;
 import org.herac.tuxguitar.community.auth.TGCommunityAuthDialog;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
 
 public class TGBrowserAuthDialog {
 	
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserConnection.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserConnection.java
index 87dc97d..db06388 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserConnection.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserConnection.java
@@ -2,11 +2,11 @@ package org.herac.tuxguitar.community.browser;
 
 import java.util.List;
 
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserException;
 import org.herac.tuxguitar.community.TGCommunitySingleton;
 import org.herac.tuxguitar.community.auth.TGCommunityAuth;
 import org.herac.tuxguitar.community.auth.TGCommunityAuthDialog;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserException;
 
 public class TGBrowserConnection {
 	
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserDataImpl.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserDataImpl.java
index 2a5587f..51ef637 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserDataImpl.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserDataImpl.java
@@ -1,6 +1,6 @@
 package org.herac.tuxguitar.community.browser;
 
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
 
 public class TGBrowserDataImpl implements TGBrowserData {
 	
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserElementImpl.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserElementImpl.java
index dcdf5ae..c93bf1f 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserElementImpl.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserElementImpl.java
@@ -6,8 +6,8 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserException;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserException;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
 
 public class TGBrowserElementImpl extends TGBrowserElement {
 	
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserFactoryImpl.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserFactoryImpl.java
index fec2cbb..10eb420 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserFactoryImpl.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserFactoryImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.community.browser;
 
 import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowser;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
 
 public class TGBrowserFactoryImpl implements TGBrowserFactory {
 	
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserImpl.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserImpl.java
index 177f97d..53cc767 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserImpl.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserImpl.java
@@ -3,9 +3,9 @@ package org.herac.tuxguitar.community.browser;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserException;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserException;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowser;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
 
 public class TGBrowserImpl extends TGBrowser {
 	
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserPluginImpl.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserPluginImpl.java
index d7c452a..41487c4 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserPluginImpl.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/browser/TGBrowserPluginImpl.java
@@ -1,8 +1,9 @@
 package org.herac.tuxguitar.community.browser;
 
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGBrowserPlugin;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+import org.herac.tuxguitar.app.tools.browser.plugin.TGBrowserPlugin;
+import org.herac.tuxguitar.community.TGCommunityPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
 public class TGBrowserPluginImpl extends TGBrowserPlugin {
 	
@@ -10,4 +11,7 @@ public class TGBrowserPluginImpl extends TGBrowserPlugin {
 		return new TGBrowserFactoryImpl();
 	}
 	
+	public String getModuleId(){
+		return TGCommunityPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareFileDialog.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareFileDialog.java
index f6f9050..bdbf69b 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareFileDialog.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareFileDialog.java
@@ -11,11 +11,12 @@ import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
 import org.herac.tuxguitar.community.TGCommunitySingleton;
 import org.herac.tuxguitar.community.auth.TGCommunityAuthDialog;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
+import org.herac.tuxguitar.util.TGException;
 import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class TGShareFileDialog {
@@ -32,8 +33,8 @@ public class TGShareFileDialog {
 	
 	public void open() {
 		try {
-			TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
 					if( !TuxGuitar.isDisposed() ){
 						open( TuxGuitar.instance().getShell() );
 					}
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSong.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSong.java
index 1d63ff9..f9cb06b 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSong.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSong.java
@@ -6,14 +6,15 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.eclipse.swt.SWT;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.util.MessageDialog;
 import org.herac.tuxguitar.community.auth.TGCommunityAuthDialog;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.util.MessageDialog;
 import org.herac.tuxguitar.io.base.TGOutputStreamBase;
 import org.herac.tuxguitar.io.tg.TGOutputStream;
 import org.herac.tuxguitar.song.factory.TGFactory;
 import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.util.TGException;
 import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class TGShareSong {
@@ -34,8 +35,8 @@ public class TGShareSong {
 	
 	public void processDialog( final TGShareFile file , final String errors ) {
 		try {
-			TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
+			TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
 					TGShareFileDialog fileDialog = new TGShareFileDialog( file , errors );
 					fileDialog.open();
 					if( fileDialog.isAccepted() ){
@@ -50,8 +51,8 @@ public class TGShareSong {
 	
 	public void processAuthDialog( final TGShareFile file ) {
 		try {
-			TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
+			TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
 					TGCommunityAuthDialog authDialog = new TGCommunityAuthDialog();
 					authDialog.open();
 					if( authDialog.isAccepted() ){
@@ -68,7 +69,7 @@ public class TGShareSong {
 		this.setActiveMode();
 		
 		new Thread( new Runnable() {
-			public void run() {
+			public void run() throws TGException {
 				try {
 					TGShareSongConnection share = new TGShareSongConnection();
 					share.uploadFile(file , TGShareSong.this );
@@ -80,7 +81,7 @@ public class TGShareSong {
 	}
 	
 	public void processResult( TGShareSongResponse response, TGShareFile file ){
-		this.setPasiveMode();
+		this.setPassiveMode();
 		
 		try {
 			String status = response.getStatus();
@@ -120,11 +121,11 @@ public class TGShareSong {
 	public void setActiveMode(){
 		TuxGuitar.instance().lock();
 		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		ActionLock.lock();
+		TGActionLock.lock();
 	}
 	
-	public void setPasiveMode(){
-		ActionLock.unlock();
+	public void setPassiveMode(){
+		TGActionLock.unlock();
 		TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
 		TuxGuitar.instance().unlock();
 	}
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongPlugin.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongPlugin.java
index 510851b..9d27268 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongPlugin.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/io/TGShareSongPlugin.java
@@ -1,12 +1,17 @@
 package org.herac.tuxguitar.community.io;
 
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin;
+import org.herac.tuxguitar.community.TGCommunityPlugin;
 import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
 public class TGShareSongPlugin extends TGExporterPlugin {
 	
 	protected TGRawExporter getExporter() throws TGPluginException {
 		return new TGShareSongExporter();
 	}
+	
+	public String getModuleId(){
+		return TGCommunityPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupPlugin.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupPlugin.java
index 3634f4c..df5a986 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupPlugin.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupPlugin.java
@@ -1,8 +1,9 @@
 package org.herac.tuxguitar.community.startup;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter;
+import org.herac.tuxguitar.community.TGCommunityPlugin;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
 
-public class TGCommunityStartupPlugin extends TGPluginAdapter {
+public class TGCommunityStartupPlugin implements TGPlugin {
 	
 	private boolean done;
 	
@@ -27,4 +28,8 @@ public class TGCommunityStartupPlugin extends TGPluginAdapter {
 		}
 		this.done = true;
 	}
+	
+	public String getModuleId(){
+		return TGCommunityPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupScreen.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupScreen.java
index e44ec25..be8f7f2 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupScreen.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/startup/TGCommunityStartupScreen.java
@@ -16,10 +16,11 @@ import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Link;
 import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
 import org.herac.tuxguitar.community.TGCommunitySingleton;
 import org.herac.tuxguitar.community.utils.TGCommunityWeb;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
+import org.herac.tuxguitar.util.TGException;
 import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class TGCommunityStartupScreen {
@@ -34,8 +35,8 @@ public class TGCommunityStartupScreen {
 	public void open(){
 		try {
 			final Shell parent = TuxGuitar.instance().getShell();
-			TGSynchronizer.instance().runLater( new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
+			TGSynchronizer.instance().executeLater( new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
 					open( parent );
 				}
 			} );
@@ -152,7 +153,7 @@ public class TGCommunityStartupScreen {
 				final String href = event.text;
 				if( href != null ){
 					new Thread( new Runnable() {
-						public void run() {
+						public void run() throws TGException {
 							TGCommunityWeb.open( href );
 						}
 					} ).start();
@@ -162,10 +163,10 @@ public class TGCommunityStartupScreen {
 	}
 	
 	public void setDisabled( boolean enabled ){
-		TGCommunitySingleton.getInstance().getConfig().setProperty("community.welcome.disabled",enabled);
+		TGCommunitySingleton.getInstance().getConfig().setValue("community.welcome.disabled",enabled);
 	}
 	
 	public boolean isDisabled(){
-		return TGCommunitySingleton.getInstance().getConfig().getBooleanConfigValue("community.welcome.disabled");
+		return TGCommunitySingleton.getInstance().getConfig().getBooleanValue("community.welcome.disabled");
 	}
 }
\ No newline at end of file
diff --git a/TuxGuitar-community/src/org/herac/tuxguitar/community/utils/TGCommunityWeb.java b/TuxGuitar-community/src/org/herac/tuxguitar/community/utils/TGCommunityWeb.java
index 912dfba..c73efb9 100644
--- a/TuxGuitar-community/src/org/herac/tuxguitar/community/utils/TGCommunityWeb.java
+++ b/TuxGuitar-community/src/org/herac/tuxguitar/community/utils/TGCommunityWeb.java
@@ -5,11 +5,11 @@ import java.net.MalformedURLException;
 import java.net.URL;
 
 import org.herac.tuxguitar.community.TGCommunitySingleton;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
 
 public class TGCommunityWeb {
 	
-	public static String HOME_URL = TGCommunitySingleton.getInstance().getConfig().getStringConfigValue("community.url");
+	public static String HOME_URL = TGCommunitySingleton.getInstance().getConfig().getStringValue("community.url");
 	
 	public static void open( String suffix ){
 		try {
@@ -52,7 +52,7 @@ public class TGCommunityWeb {
 	private static boolean openCommandLineBrowser( URL url ){
 		TGConfigManager config = TGCommunitySingleton.getInstance().getConfig();
 		
-		String[] browserCmds = config.getStringConfigValue("community.browser","").split(";");
+		String[] browserCmds = config.getStringValue("community.browser","").split(";");
 		for( int i = 0 ; i < browserCmds.length ; i ++ ){
 			try {
 				String browserCmd = browserCmds[i];
diff --git a/TuxGuitar-compat/GNUmakefile b/TuxGuitar-compat/GNUmakefile
deleted file mode 100644
index 507a82d..0000000
--- a/TuxGuitar-compat/GNUmakefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-compat
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.io.tg.TGPluginListImpl
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-compat/build.properties b/TuxGuitar-compat/build.properties
index 519fcc3..77594e9 100644
--- a/TuxGuitar-compat/build.properties
+++ b/TuxGuitar-compat/build.properties
@@ -4,4 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
\ No newline at end of file
diff --git a/TuxGuitar-compat/build.xml b/TuxGuitar-compat/build.xml
index b3f8d6e..0b70803 100644
--- a/TuxGuitar-compat/build.xml
+++ b/TuxGuitar-compat/build.xml
@@ -7,13 +7,13 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-compat.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.tg.TGPluginListImpl" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -32,8 +32,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
diff --git a/TuxGuitar-compat/pom.xml b/TuxGuitar-compat/pom.xml
new file mode 100644
index 0000000..0d91f9a
--- /dev/null
+++ b/TuxGuitar-compat/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-compat</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-compat/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-compat/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..7aa4ae0
--- /dev/null
+++ b/TuxGuitar-compat/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,11 @@
+org.herac.tuxguitar.io.tg.v12.TGInputStreamPlugin
+org.herac.tuxguitar.io.tg.v11.TGInputStreamPlugin
+org.herac.tuxguitar.io.tg.v10.TGInputStreamPlugin
+org.herac.tuxguitar.io.tg.v09.TGInputStreamPlugin
+org.herac.tuxguitar.io.tg.v08.TGInputStreamPlugin
+org.herac.tuxguitar.io.tg.v07.TGInputStreamPlugin
+org.herac.tuxguitar.io.tg.v12.TGExporterPlugin
+org.herac.tuxguitar.io.tg.v11.TGExporterPlugin
+org.herac.tuxguitar.io.tg.v10.TGExporterPlugin
+
+org.herac.tuxguitar.io.tg.dev.TGInputStreamPlugin
diff --git a/TuxGuitar-compat/share/META-INF/tuxguitar-compat.info b/TuxGuitar-compat/share/META-INF/tuxguitar-compat.info
new file mode 100644
index 0000000..1ffc80f
--- /dev/null
+++ b/TuxGuitar-compat/share/META-INF/tuxguitar-compat.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=TuxGuitar file format compatibility
+plugin.description=This plugin, provides support for other tuxguitar file format versions.
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGCompatPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGCompatPlugin.java
new file mode 100644
index 0000000..981ca90
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGCompatPlugin.java
@@ -0,0 +1,6 @@
+package org.herac.tuxguitar.io.tg;
+
+public class TGCompatPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-compat";
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGExporterPluginImpl.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGExporterPluginImpl.java
new file mode 100644
index 0000000..d14d065
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGExporterPluginImpl.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.io.tg;
+
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class TGExporterPluginImpl extends TGExporterPlugin{
+	
+	private TGRawExporter rawExporter;
+	
+	public TGExporterPluginImpl(TGRawExporter rawExporter){
+		this.rawExporter = rawExporter;
+	}
+	
+	protected TGRawExporter getExporter() throws TGPluginException {
+		return this.rawExporter;
+	}
+	
+	public String getModuleId(){
+		return TGCompatPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGInputStreamPluginImpl.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGInputStreamPluginImpl.java
new file mode 100644
index 0000000..a66efaf
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGInputStreamPluginImpl.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.io.tg;
+
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.io.plugin.TGInputStreamPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class TGInputStreamPluginImpl extends TGInputStreamPlugin{
+	
+	private TGInputStreamBase inputStreamBase;
+	
+	public TGInputStreamPluginImpl(TGInputStreamBase inputStreamBase){
+		this.inputStreamBase = inputStreamBase;
+	}
+	
+	protected TGInputStreamBase getInputStream() throws TGPluginException {
+		return this.inputStreamBase;
+	}
+	
+	public String getModuleId(){
+		return TGCompatPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGPluginListImpl.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGPluginListImpl.java
deleted file mode 100644
index cb50cc5..0000000
--- a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/TGPluginListImpl.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.herac.tuxguitar.io.tg;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin;
-import org.herac.tuxguitar.gui.system.plugins.base.TGInputStreamPlugin;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList;
-import org.herac.tuxguitar.io.base.TGInputStreamBase;
-import org.herac.tuxguitar.io.base.TGRawExporter;
-
-public class TGPluginListImpl extends TGPluginList{
-	
-	protected List getPlugins() {
-		List plugins = new ArrayList();
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new org.herac.tuxguitar.io.tg.v11.TGInputStream();
-			}
-		});
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new org.herac.tuxguitar.io.tg.v10.TGInputStream();
-			}
-		});
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new org.herac.tuxguitar.io.tg.v09.TGInputStream();
-			}
-		});
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new org.herac.tuxguitar.io.tg.v08.TGInputStream();
-			}
-		});
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new org.herac.tuxguitar.io.tg.v07.TGInputStream();
-			}
-		});
-		plugins.add(new TGExporterPlugin() {
-			protected TGRawExporter getExporter() {
-				return new org.herac.tuxguitar.io.tg.v11.TGOutputStream();
-			}
-		});
-		plugins.add(new TGExporterPlugin() {
-			protected TGRawExporter getExporter() {
-				return new org.herac.tuxguitar.io.tg.v10.TGOutputStream();
-			}
-		});
-		return plugins;
-	}
-	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getName() {
-		return "TuxGuitar file format compatibility";
-	}
-	
-	public String getDescription() {
-		return "This plugin, provides support for other tuxguitar file format versions.";
-	}
-	
-	public String getVersion() {
-		return "1.0";
-	}
-}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/dev/TGInputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/dev/TGInputStream.java
new file mode 100644
index 0000000..6751f94
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/dev/TGInputStream.java
@@ -0,0 +1,36 @@
+/*
+ * Created on 16-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.io.tg.dev;
+
+import org.herac.tuxguitar.util.TGVersion;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGInputStream extends org.herac.tuxguitar.io.tg.TGInputStream {
+	
+	private static final String[] DEVELOPMENT_VERSIONS = new String[] {
+		(TG_FORMAT_NAME + " - " + new TGVersion(1,2,20111001).getVersion() )
+	};
+	
+	public TGInputStream() {
+		super();
+	}
+	
+	public boolean isSupportedVersion(String version){
+		for(int i = 0 ; i < DEVELOPMENT_VERSIONS.length ; i ++){
+			if( version.equals(DEVELOPMENT_VERSIONS[i]) ){
+				System.out.println("This file was saved with an old develpment version of tuxguitar, please save it again with current format.");
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/dev/TGInputStreamPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/dev/TGInputStreamPlugin.java
new file mode 100644
index 0000000..cf63df5
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/dev/TGInputStreamPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.dev;
+
+import org.herac.tuxguitar.io.tg.TGInputStreamPluginImpl;
+
+public class TGInputStreamPlugin extends TGInputStreamPluginImpl{
+
+	public TGInputStreamPlugin() {
+		super(new TGInputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v07/TGInputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v07/TGInputStream.java
index aa7e0b5..311d10b 100644
--- a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v07/TGInputStream.java
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v07/TGInputStream.java
@@ -10,11 +10,14 @@ import java.io.DataInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGInputStreamBase;
 import org.herac.tuxguitar.song.factory.TGFactory;
 import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
 import org.herac.tuxguitar.song.models.TGMeasure;
@@ -85,7 +88,7 @@ public class TGInputStream implements TGInputStreamBase{
 				this.dataInputStream.close();
 				return song;
 			}
-			throw new TGFileFormatException("Unsopported Version");
+			throw new TGFileFormatException("Unsupported Version");
 		}catch (Throwable throwable) {
 			throw new TGFileFormatException(throwable);
 		}
@@ -127,7 +130,13 @@ public class TGInputStream implements TGInputStreamBase{
 		track.setName(readString());
 		
 		//leo el canal
-		readChannel(track);
+		readChannel(song,track);
+		
+		//leo el solo
+		track.setSolo(readBoolean());
+		
+		//leo el mute
+		track.setMute(readBoolean());
 		
 		//leo la cantidad de compases
 		int measureCount = readInt();
@@ -246,39 +255,65 @@ public class TGInputStream implements TGInputStreamBase{
 		return beat;
 	}
 	
-	private void readChannel(TGTrack track){
+	private void readChannel(TGSong song, TGTrack track){
+		TGChannel channel = this.factory.newChannel();
+		TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+		TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+		
 		//leo el canal
-		track.getChannel().setChannel(readShort());
+		int channel1 = readShort();
+		gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+		gmChannel1Param.setValue(Integer.toString(channel1));
 		
 		//leo el canal de efectos
-		track.getChannel().setEffectChannel(readShort());
+		int channel2 = readShort();
+		gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+		gmChannel2Param.setValue(Integer.toString(channel2));
+		
+		// Parseo el banco de sonidos
+		channel.setBank( channel1 == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
 		
 		//leo el instrumento
-		track.getChannel().setInstrument(readShort());
+		channel.setProgram(readShort());
 		
 		//leo el volumen
-		track.getChannel().setVolume(readShort());
+		channel.setVolume(readShort());
 		
 		//leo el balance
-		track.getChannel().setBalance(readShort());
+		channel.setBalance(readShort());
 		
 		//leo el chorus
-		track.getChannel().setChorus(readShort());
+		channel.setChorus(readShort());
 		
 		//leo el reverb
-		track.getChannel().setReverb(readShort());
+		channel.setReverb(readShort());
 		
 		//leo el phaser
-		track.getChannel().setPhaser(readShort());
+		channel.setPhaser(readShort());
 		
 		//leo el tremolo
-		track.getChannel().setTremolo(readShort());
-		
-		//leo el solo
-		track.setSolo(readBoolean());
-		
-		//leo el mute
-		track.setMute(readBoolean());
+		channel.setTremolo(readShort());
+		
+		//------------------------------------------//
+		for( int i = 0 ; i < song.countChannels() ; i ++ ){
+			TGChannel channelAux = song.getChannel(i);
+			for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+				TGChannelParameter channelParameter = channelAux.getParameter( n );
+				if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+					if( Integer.toString(channel1).equals(channelParameter.getValue()) ){
+						channel.setChannelId(channelAux.getChannelId());
+					}
+				}
+			}
+		}
+		if( channel.getChannelId() <= 0 ){
+			channel.setChannelId( song.countChannels() + 1 );
+			channel.setName(("#" + channel.getChannelId()));
+			channel.addParameter(gmChannel1Param);
+			channel.addParameter(gmChannel2Param);
+			song.addChannel(channel);
+		}
+		track.setChannelId(channel.getChannelId());
 	}
 	
 	private TGBeat readSilence(TGMeasure measure, TGBeat previous){
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v07/TGInputStreamPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v07/TGInputStreamPlugin.java
new file mode 100644
index 0000000..c0c7753
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v07/TGInputStreamPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.v07;
+
+import org.herac.tuxguitar.io.tg.TGInputStreamPluginImpl;
+
+public class TGInputStreamPlugin extends TGInputStreamPluginImpl{
+
+	public TGInputStreamPlugin() {
+		super(new TGInputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/TGInputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/TGInputStream.java
index 2985143..8d19744 100644
--- a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/TGInputStream.java
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/TGInputStream.java
@@ -10,11 +10,14 @@ import java.io.DataInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGInputStreamBase;
 import org.herac.tuxguitar.song.factory.TGFactory;
 import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
 import org.herac.tuxguitar.song.models.TGMarker;
@@ -83,7 +86,7 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 				this.dataInputStream.close();
 				return song;
 			}
-			throw new TGFileFormatException("Unsopported Version");
+			throw new TGFileFormatException("Unsupported Version");
 		} catch (Throwable throwable) {
 			throw new TGFileFormatException(throwable);
 		}
@@ -137,7 +140,7 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		track.setName(readString());
 		
 		//leo el canal
-		readChannel(track);
+		readChannel(song, track);
 		
 		//leo la cantidad de compases
 		int measureCount = song.countMeasureHeaders();
@@ -235,41 +238,73 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		return measure;
 	}
 	
-	private void readChannel(TGTrack track){
+	private void readChannel(TGSong song, TGTrack track){
 		int header = readHeader();
 		
+		TGChannel channel = this.factory.newChannel();
+		TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+		TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+		
 		//leo el canal
-		track.getChannel().setChannel((short)readByte());
+		int channel1 = (readByte() & 0xff);
+		gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+		gmChannel1Param.setValue(Integer.toString(channel1));
 		
 		//leo el canal de efectos
-		track.getChannel().setEffectChannel((short)readByte());
+		int channel2 = (readByte() & 0xff);
+		gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+		gmChannel2Param.setValue(Integer.toString(channel2));
+		
+		// Parseo el banco de sonidos
+		channel.setBank( channel1 == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
 		
 		//leo el instrumento
-		track.getChannel().setInstrument((short)readByte());
+		channel.setProgram((short)readByte());
 		
 		//leo el volumen
-		track.getChannel().setVolume((short)readByte());
+		channel.setVolume((short)readByte());
 		
 		//leo el balance
-		track.getChannel().setBalance((short)readByte());
+		channel.setBalance((short)readByte());
 		
 		//leo el chorus
-		track.getChannel().setChorus((short)readByte());
+		channel.setChorus((short)readByte());
 		
 		//leo el reverb
-		track.getChannel().setReverb((short)readByte());
+		channel.setReverb((short)readByte());
 		
 		//leo el phaser
-		track.getChannel().setPhaser((short)readByte());
+		channel.setPhaser((short)readByte());
 		
 		//leo el tremolo
-		track.getChannel().setTremolo((short)readByte());
+		channel.setTremolo((short)readByte());
 		
 		//leo el solo
 		track.setSolo(((header & CHANNEL_SOLO) != 0));
 		
 		//leo el mute
 		track.setMute(((header & CHANNEL_MUTE) != 0));
+		
+		//------------------------------------------//
+		for( int i = 0 ; i < song.countChannels() ; i ++ ){
+			TGChannel channelAux = song.getChannel(i);
+			for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+				TGChannelParameter channelParameter = channelAux.getParameter( n );
+				if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+					if( Integer.toString(channel1).equals(channelParameter.getValue()) ){
+						channel.setChannelId(channelAux.getChannelId());
+					}
+				}
+			}
+		}
+		if( channel.getChannelId() <= 0 ){
+			channel.setChannelId( song.countChannels() + 1 );
+			channel.setName(("#" + channel.getChannelId()));
+			channel.addParameter(gmChannel1Param);
+			channel.addParameter(gmChannel2Param);
+			song.addChannel(channel);
+		}
+		track.setChannelId(channel.getChannelId());
 	}
 	
 	private TGBeat readComponent(TGMeasure measure,TGBeat previous){
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/TGInputStreamPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/TGInputStreamPlugin.java
new file mode 100644
index 0000000..c4ee5c9
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v08/TGInputStreamPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.v08;
+
+import org.herac.tuxguitar.io.tg.TGInputStreamPluginImpl;
+
+public class TGInputStreamPlugin extends TGInputStreamPluginImpl{
+
+	public TGInputStreamPlugin() {
+		super(new TGInputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/TGInputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/TGInputStream.java
index 81548cd..0993853 100644
--- a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/TGInputStream.java
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/TGInputStream.java
@@ -10,11 +10,14 @@ import java.io.DataInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGInputStreamBase;
 import org.herac.tuxguitar.song.factory.TGFactory;
 import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
 import org.herac.tuxguitar.song.models.TGLyric;
@@ -92,7 +95,7 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 				this.dataInputStream.close();
 				return song;
 			}
-			throw new TGFileFormatException("Unsopported Version");
+			throw new TGFileFormatException("Unsupported Version");
 		} catch (Throwable throwable) {
 			throw new TGFileFormatException(throwable);
 		}
@@ -149,7 +152,7 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		track.setName( readString() );
 		
 		//leo el canal
-		readChannel(track);
+		readChannel(song, track);
 		
 		//leo la cantidad de compases
 		int measureCount = song.countMeasureHeaders();
@@ -256,41 +259,73 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		
 	}
 	
-	private void readChannel(TGTrack track){
+	private void readChannel(TGSong song, TGTrack track){
 		int header = readHeader();
 		
+		TGChannel channel = this.factory.newChannel();
+		TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+		TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+		
 		//leo el canal
-		track.getChannel().setChannel( (short)readByte() );
+		int channel1 = (readByte() & 0xff);
+		gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+		gmChannel1Param.setValue(Integer.toString(channel1));
 		
 		//leo el canal de efectos
-		track.getChannel().setEffectChannel( (short)readByte() );
+		int channel2 = (readByte() & 0xff);
+		gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+		gmChannel2Param.setValue(Integer.toString(channel2));
+		
+		// Parseo el banco de sonidos
+		channel.setBank( channel1 == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
 		
 		//leo el instrumento
-		track.getChannel().setInstrument( (short)readByte() );
+		channel.setProgram( (short)readByte() );
 		
 		//leo el volumen
-		track.getChannel().setVolume( (short)readByte() );
+		channel.setVolume( (short)readByte() );
 		
 		//leo el balance
-		track.getChannel().setBalance( (short)readByte() );
+		channel.setBalance( (short)readByte() );
 		
 		//leo el chorus
-		track.getChannel().setChorus( (short)readByte() );
+		channel.setChorus( (short)readByte() );
 		
 		//leo el reverb
-		track.getChannel().setReverb( (short)readByte() );
+		channel.setReverb( (short)readByte() );
 		
 		//leo el phaser
-		track.getChannel().setPhaser( (short)readByte() );
+		channel.setPhaser( (short)readByte() );
 		
 		//leo el tremolo
-		track.getChannel().setTremolo( (short)readByte() );
+		channel.setTremolo( (short)readByte() );
 		
 		//leo el solo
 		track.setSolo( ((header & CHANNEL_SOLO) != 0) );
 		
 		//leo el mute
 		track.setMute( ((header & CHANNEL_MUTE) != 0) );
+		
+		//------------------------------------------//
+		for( int i = 0 ; i < song.countChannels() ; i ++ ){
+			TGChannel channelAux = song.getChannel(i);
+			for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+				TGChannelParameter channelParameter = channelAux.getParameter( n );
+				if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+					if( Integer.toString(channel1).equals(channelParameter.getValue()) ){
+						channel.setChannelId(channelAux.getChannelId());
+					}
+				}
+			}
+		}
+		if( channel.getChannelId() <= 0 ){
+			channel.setChannelId( song.countChannels() + 1 );
+			channel.setName(("#" + channel.getChannelId()));
+			channel.addParameter(gmChannel1Param);
+			channel.addParameter(gmChannel2Param);
+			song.addChannel(channel);
+		}
+		track.setChannelId(channel.getChannelId());
 	}
 	
 	private TGBeat readComponent(TGMeasure measure,TGBeat previous){
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/TGInputStreamPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/TGInputStreamPlugin.java
new file mode 100644
index 0000000..c58def2
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v09/TGInputStreamPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.v09;
+
+import org.herac.tuxguitar.io.tg.TGInputStreamPluginImpl;
+
+public class TGInputStreamPlugin extends TGInputStreamPluginImpl{
+
+	public TGInputStreamPlugin() {
+		super(new TGInputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGExporterPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGExporterPlugin.java
new file mode 100644
index 0000000..82ef59b
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGExporterPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.v10;
+
+import org.herac.tuxguitar.io.tg.TGExporterPluginImpl;
+
+public class TGExporterPlugin extends TGExporterPluginImpl{
+
+	public TGExporterPlugin() {
+		super(new TGOutputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGInputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGInputStream.java
index 4ebf1d5..7bb432c 100644
--- a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGInputStream.java
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGInputStream.java
@@ -10,11 +10,14 @@ import java.io.DataInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGInputStreamBase;
 import org.herac.tuxguitar.song.factory.TGFactory;
 import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
@@ -85,7 +88,7 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 				this.dataInputStream.close();
 				return song;
 			}
-			throw new TGFileFormatException("Unsopported Version");
+			throw new TGFileFormatException("Unsupported Version");
 		} catch (Throwable throwable) {
 			throw new TGFileFormatException(throwable);
 		}
@@ -148,7 +151,7 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		track.setName(readUnsignedByteString());
 		
 		//leo el canal
-		readChannel(track);
+		readChannel(song, track);
 		
 		//leo la cantidad de compases
 		int measureCount = song.countMeasureHeaders();
@@ -254,41 +257,73 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		return measure;
 	}
 	
-	private void readChannel(TGTrack track){
+	private void readChannel(TGSong song, TGTrack track){
 		int header = readHeader();
 		
+		TGChannel channel = this.factory.newChannel();
+		TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+		TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+		
 		//leo el canal
-		track.getChannel().setChannel(readByte());
+		int channel1 = (readByte() & 0xff);
+		gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+		gmChannel1Param.setValue(Integer.toString(channel1));
 		
 		//leo el canal de efectos
-		track.getChannel().setEffectChannel(readByte());
+		int channel2 = (readByte() & 0xff);
+		gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+		gmChannel2Param.setValue(Integer.toString(channel2));
+		
+		// Parseo el banco de sonidos
+		channel.setBank( channel1 == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
 		
 		//leo el instrumento
-		track.getChannel().setInstrument(readByte());
+		channel.setProgram(readByte());
 		
 		//leo el volumen
-		track.getChannel().setVolume(readByte());
+		channel.setVolume(readByte());
 		
 		//leo el balance
-		track.getChannel().setBalance(readByte());
+		channel.setBalance(readByte());
 		
 		//leo el chorus
-		track.getChannel().setChorus(readByte());
+		channel.setChorus(readByte());
 		
 		//leo el reverb
-		track.getChannel().setReverb(readByte());
+		channel.setReverb(readByte());
 		
 		//leo el phaser
-		track.getChannel().setPhaser(readByte());
+		channel.setPhaser(readByte());
 		
 		//leo el tremolo
-		track.getChannel().setTremolo(readByte());
+		channel.setTremolo(readByte());
 		
 		//leo el solo
 		track.setSolo((header & CHANNEL_SOLO) != 0);
 		
 		//leo el mute
 		track.setMute((header & CHANNEL_MUTE) != 0);
+		
+		//------------------------------------------//
+		for( int i = 0 ; i < song.countChannels() ; i ++ ){
+			TGChannel channelAux = song.getChannel(i);
+			for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+				TGChannelParameter channelParameter = channelAux.getParameter( n );
+				if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+					if( Integer.toString(channel1).equals(channelParameter.getValue()) ){
+						channel.setChannelId(channelAux.getChannelId());
+					}
+				}
+			}
+		}
+		if( channel.getChannelId() <= 0 ){
+			channel.setChannelId( song.countChannels() + 1 );
+			channel.setName(("#" + channel.getChannelId()));
+			channel.addParameter(gmChannel1Param);
+			channel.addParameter(gmChannel2Param);
+			song.addChannel(channel);
+		}
+		track.setChannelId(channel.getChannelId());
 	}
 	
 	private void readBeats(TGMeasure measure,TGBeatData data){
@@ -430,7 +465,7 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		duration.setValue(readByte());
 		
 		//leo el tipo de divisiones
-		if(((header & DURATION_NO_TUPLE) != 0)){
+		if(((header & DURATION_NO_TUPLET) != 0)){
 			readDivisionType(duration.getDivision());
 		}
 		else{
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGInputStreamPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGInputStreamPlugin.java
new file mode 100644
index 0000000..717b168
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGInputStreamPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.v10;
+
+import org.herac.tuxguitar.io.tg.TGInputStreamPluginImpl;
+
+public class TGInputStreamPlugin extends TGInputStreamPluginImpl{
+
+	public TGInputStreamPlugin() {
+		super(new TGInputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGOutputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGOutputStream.java
index 9af9b21..3614f06 100644
--- a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGOutputStream.java
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGOutputStream.java
@@ -11,11 +11,16 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Iterator;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGLocalFileExporter;
 import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.managers.TGSongManager;
 import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
@@ -47,6 +52,8 @@ import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
  */
 public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 	
+	private TGFactory factory;
+	private GMChannelRouter channelRouter;
 	private DataOutputStream dataOutputStream;
 	
 	public boolean isSupportedExtension(String extension) {
@@ -66,11 +73,13 @@ public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 	}
 	
 	public void init(TGFactory factory,OutputStream stream){
+		this.factory = factory;
 		this.dataOutputStream = new DataOutputStream(stream);
 	}
 	
 	public void exportSong(TGSong song) throws TGFileFormatException {
 		try{
+			this.configureChannelRouter(song);
 			this.writeVersion();
 			this.write(song);
 			this.dataOutputStream.flush();
@@ -269,32 +278,36 @@ public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 		header = (track.isMute())?header |= CHANNEL_MUTE:header;
 		writeHeader(header);
 		
+		TGChannel channel = getChannel(track.getSong(), track);
+		
+		GMChannelRoute gmChannelRoute = getChannelRoute(channel.getChannelId());
+		
 		//escribo el canal
-		writeByte(track.getChannel().getChannel());
+		writeByte(gmChannelRoute.getChannel1());
 		
 		//escribo el canal de efectos
-		writeByte(track.getChannel().getEffectChannel());
+		writeByte(gmChannelRoute.getChannel2());
 		
 		//escribo el instrumento
-		writeByte(track.getChannel().getInstrument());
+		writeByte(channel.getProgram());
 		
 		//escribo el volumen
-		writeByte(track.getChannel().getVolume());
+		writeByte(channel.getVolume());
 		
 		//escribo el balance
-		writeByte(track.getChannel().getBalance());
+		writeByte(channel.getBalance());
 		
 		//escribo el chorus
-		writeByte(track.getChannel().getChorus());
+		writeByte(channel.getChorus());
 		
 		//escribo el reverb
-		writeByte(track.getChannel().getReverb());
+		writeByte(channel.getReverb());
 		
 		//escribo el phaser
-		writeByte(track.getChannel().getPhaser());
+		writeByte(channel.getPhaser());
 		
 		//escribo el tremolo
-		writeByte(track.getChannel().getTremolo());
+		writeByte(channel.getTremolo());
 	}
 	
 	private void writeBeats(TGMeasure measure,TGBeatData data){
@@ -434,14 +447,14 @@ public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 		int header = 0;
 		header = (duration.isDotted())?header |= DURATION_DOTTED:header;
 		header = (duration.isDoubleDotted())?header |= DURATION_DOUBLE_DOTTED:header;
-		header = (!duration.getDivision().isEqual(TGDivisionType.NORMAL))?header |= DURATION_NO_TUPLE:header;
+		header = (!duration.getDivision().isEqual(TGDivisionType.NORMAL))?header |= DURATION_NO_TUPLET:header;
 		writeHeader(header);
 		
 		//escribo el valor
 		writeByte(duration.getValue());
 		
 		//escribo el tipo de divisiones
-		if(((header & DURATION_NO_TUPLE) != 0)){
+		if(((header & DURATION_NO_TUPLET) != 0)){
 			writeDivisionType(duration.getDivision());
 		}
 	}
@@ -658,6 +671,36 @@ public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 		}
 	}
 	
+	private TGChannel getChannel( TGSong song, TGTrack track ){
+		TGSongManager tgSongManager = new TGSongManager(this.factory);
+		tgSongManager.setSong( song );
+		
+		TGChannel tgChannel = tgSongManager.getChannel( track.getChannelId() );
+		if( tgChannel == null ){
+			tgChannel = this.factory.newChannel();
+		}
+		
+		return tgChannel;
+	}
+	
+	private GMChannelRoute getChannelRoute( int channelId ){
+		GMChannelRoute gmChannelRoute = this.channelRouter.getRoute(channelId);
+		if( gmChannelRoute == null ){
+			gmChannelRoute = new GMChannelRoute(GMChannelRoute.NULL_VALUE);
+			gmChannelRoute.setChannel1(15);
+			gmChannelRoute.setChannel2(15);
+		}
+		
+		return gmChannelRoute;
+	}
+	
+	private void configureChannelRouter( TGSong song ){
+		this.channelRouter = new GMChannelRouter();
+		
+		GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(this.channelRouter);
+		gmChannelRouterConfigurator.configureRouter(song.getChannels());
+	}
+	
 	public class TGVoiceJoiner {
 		private TGFactory factory;
 		private TGMeasure measure;
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGStream.java
index 65da004..26a2106 100644
--- a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGStream.java
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v10/TGStream.java
@@ -60,7 +60,7 @@ public class TGStream {
 	
 	protected static final int DURATION_DOUBLE_DOTTED = 0x02;
 	
-	protected static final int DURATION_NO_TUPLE = 0x04;
+	protected static final int DURATION_NO_TUPLET = 0x04;
 	
 	protected static final int EFFECT_BEND = 0x01;
 	
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGExporterPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGExporterPlugin.java
new file mode 100644
index 0000000..383150d
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGExporterPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.v11;
+
+import org.herac.tuxguitar.io.tg.TGExporterPluginImpl;
+
+public class TGExporterPlugin extends TGExporterPluginImpl{
+
+	public TGExporterPlugin() {
+		super(new TGOutputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGInputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGInputStream.java
index 2025e1c..3179095 100644
--- a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGInputStream.java
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGInputStream.java
@@ -10,12 +10,14 @@ import java.io.DataInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGInputStreamBase;
 import org.herac.tuxguitar.song.factory.TGFactory;
 import org.herac.tuxguitar.song.models.TGBeat;
 import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
@@ -87,7 +89,7 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 				this.dataInputStream.close();
 				return song;
 			}
-			throw new TGFileFormatException("Unsopported Version");
+			throw new TGFileFormatException("Unsupported Version");
 		} catch (Throwable throwable) {
 			throw new TGFileFormatException(throwable);
 		}
@@ -156,7 +158,7 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		track.setMute((header & TRACK_MUTE) != 0);
 		
 		//leo el canal
-		readChannel(track.getChannel());
+		readChannel(song, track);
 		
 		//leo la cantidad de compases
 		int measureCount = song.countMeasureHeaders();
@@ -262,15 +264,26 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		return measure;
 	}
 	
-	private void readChannel(TGChannel channel){
+	private void readChannel(TGSong song, TGTrack track){
+		TGChannel channel = this.factory.newChannel();
+		TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+		TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+		
 		//leo el canal
-		channel.setChannel(readByte());
+		int channel1 = (readByte() & 0xff);
+		gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+		gmChannel1Param.setValue(Integer.toString(channel1));
 		
 		//leo el canal de efectos
-		channel.setEffectChannel(readByte());
+		int channel2 = (readByte() & 0xff);
+		gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+		gmChannel2Param.setValue(Integer.toString(channel2));
+		
+		// Parseo el banco de sonidos
+		channel.setBank( channel1 == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
 		
 		//leo el instrumento
-		channel.setInstrument(readByte());
+		channel.setProgram(readByte());
 		
 		//leo el volumen
 		channel.setVolume(readByte());
@@ -289,6 +302,27 @@ public class TGInputStream extends TGStream implements TGInputStreamBase{
 		
 		//leo el tremolo
 		channel.setTremolo(readByte());
+		
+		//------------------------------------------//
+		for( int i = 0 ; i < song.countChannels() ; i ++ ){
+			TGChannel channelAux = song.getChannel(i);
+			for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+				TGChannelParameter channelParameter = channelAux.getParameter( n );
+				if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+					if( Integer.toString(channel1).equals(channelParameter.getValue()) ){
+						channel.setChannelId(channelAux.getChannelId());
+					}
+				}
+			}
+		}
+		if( channel.getChannelId() <= 0 ){
+			channel.setChannelId( song.countChannels() + 1 );
+			channel.setName(("#" + channel.getChannelId()));
+			channel.addParameter(gmChannel1Param);
+			channel.addParameter(gmChannel2Param);
+			song.addChannel(channel);
+		}
+		track.setChannelId(channel.getChannelId());
 	}
 	
 	private void readBeats(TGMeasure measure,TGBeatData data){
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGInputStreamPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGInputStreamPlugin.java
new file mode 100644
index 0000000..cb5a94b
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGInputStreamPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.v11;
+
+import org.herac.tuxguitar.io.tg.TGInputStreamPluginImpl;
+
+public class TGInputStreamPlugin extends TGInputStreamPluginImpl{
+
+	public TGInputStreamPlugin() {
+		super(new TGInputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGOutputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGOutputStream.java
index 943466b..6c2f9c7 100644
--- a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGOutputStream.java
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v11/TGOutputStream.java
@@ -11,10 +11,14 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Iterator;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGLocalFileExporter;
 import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.managers.TGSongManager;
 import org.herac.tuxguitar.song.models.TGBeat;
 import org.herac.tuxguitar.song.models.TGChannel;
 import org.herac.tuxguitar.song.models.TGChord;
@@ -49,6 +53,8 @@ import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
  */
 public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 	
+	private TGFactory factory;
+	private GMChannelRouter channelRouter;
 	private DataOutputStream dataOutputStream;
 	
 	public boolean isSupportedExtension(String extension) {
@@ -68,11 +74,13 @@ public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 	}
 	
 	public void init(TGFactory factory,OutputStream stream){
+		this.factory = factory;
 		this.dataOutputStream = new DataOutputStream(stream);
 	}
 	
 	public void exportSong(TGSong song) throws TGFileFormatException {
 		try{
+			this.configureChannelRouter(song);
 			this.writeVersion();
 			this.write(song);
 			this.dataOutputStream.flush();
@@ -139,7 +147,7 @@ public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 		writeUnsignedByteString(track.getName());
 		
 		//escribo el canal
-		writeChannel(track.getChannel());
+		writeChannel(getChannel(track.getSong(), track));
 		
 		//escribo los compases
 		TGMeasure lastMeasure = null;
@@ -270,14 +278,16 @@ public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 	}
 	
 	private void writeChannel(TGChannel channel){
+		GMChannelRoute gmChannelRoute = getChannelRoute(channel.getChannelId());
+		
 		//escribo el canal
-		writeByte(channel.getChannel());
+		writeByte(gmChannelRoute.getChannel1());
 		
 		//escribo el canal de efectos
-		writeByte(channel.getEffectChannel());
+		writeByte(gmChannelRoute.getChannel2());
 		
 		//escribo el instrumento
-		writeByte(channel.getInstrument());
+		writeByte(channel.getProgram());
 		
 		//escribo el volumen
 		writeByte(channel.getVolume());
@@ -702,4 +712,34 @@ public class TGOutputStream extends TGStream implements TGLocalFileExporter{
 			e.printStackTrace();
 		}
 	}
+	
+	private TGChannel getChannel( TGSong song, TGTrack track ){
+		TGSongManager tgSongManager = new TGSongManager(this.factory);
+		tgSongManager.setSong( song );
+		
+		TGChannel tgChannel = tgSongManager.getChannel( track.getChannelId() );
+		if( tgChannel == null ){
+			tgChannel = this.factory.newChannel();
+		}
+		
+		return tgChannel;
+	}
+	
+	private GMChannelRoute getChannelRoute( int channelId ){
+		GMChannelRoute gmChannelRoute = this.channelRouter.getRoute(channelId);
+		if( gmChannelRoute == null ){
+			gmChannelRoute = new GMChannelRoute(GMChannelRoute.NULL_VALUE);
+			gmChannelRoute.setChannel1(15);
+			gmChannelRoute.setChannel2(15);
+		}
+		
+		return gmChannelRoute;
+	}
+	
+	private void configureChannelRouter( TGSong song ){
+		this.channelRouter = new GMChannelRouter();
+		
+		GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(this.channelRouter);
+		gmChannelRouterConfigurator.configureRouter(song.getChannels());
+	}
 }
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGExporterPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGExporterPlugin.java
new file mode 100644
index 0000000..7600b28
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGExporterPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.v12;
+
+import org.herac.tuxguitar.io.tg.TGExporterPluginImpl;
+
+public class TGExporterPlugin extends TGExporterPluginImpl{
+
+	public TGExporterPlugin() {
+		super(new TGOutputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGInputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGInputStream.java
new file mode 100644
index 0000000..0eecfa7
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGInputStream.java
@@ -0,0 +1,800 @@
+/*
+ * Created on 16-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.io.tg.v12;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGInputStream extends TGStream implements TGInputStreamBase{
+	
+	private DataInputStream dataInputStream;
+	private String version;
+	private TGFactory factory;
+	
+	public TGInputStream() {
+		super();
+	}
+	
+	public void init(TGFactory factory,InputStream stream) {
+		this.factory = factory;
+		this.dataInputStream = new DataInputStream(stream);
+		this.version = null;
+	}
+	
+	public TGFileFormat getFileFormat(){
+		return new TGFileFormat("TuxGuitar","*.tg");
+	}
+	
+	public boolean isSupportedVersion(String version){
+		return (version.equals(TG_FORMAT_VERSION));
+	}
+	
+	public boolean isSupportedVersion(){
+		try{
+			readVersion();
+			return isSupportedVersion(this.version);
+		}catch(Throwable throwable){
+			return false;
+		}
+	}
+	
+	public TGSong readSong() throws TGFileFormatException{
+		try {
+			if(this.isSupportedVersion()){
+				TGSong song = this.read();
+				this.dataInputStream.close();
+				return song;
+			}
+			throw new TGFileFormatException("Unsupported Version");
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
+		}
+	}
+	
+	private void readVersion(){
+		if(this.version == null){
+			this.version = readUnsignedByteString();
+		}
+	}
+	
+	private TGSong read(){
+		TGSong song = this.factory.newSong();
+		
+		//leo el nombre
+		song.setName(readUnsignedByteString());
+		
+		//leo el artista
+		song.setArtist(readUnsignedByteString());
+		
+		//leo el album
+		song.setAlbum(readUnsignedByteString());
+		
+		//leo el autor
+		song.setAuthor(readUnsignedByteString());
+		
+		//leo la fecha
+		song.setDate(readUnsignedByteString());
+		
+		//leo el copyright
+		song.setCopyright(readUnsignedByteString());
+		
+		//leo el creador
+		song.setWriter(readUnsignedByteString());
+		
+		//leo el transcriptor
+		song.setTranscriber(readUnsignedByteString());
+		
+		//leo los comentarios
+		song.setComments(readIntegerString());
+		
+		//leo la cantidad de measure headers
+		int headerCount = readShort();
+		
+		//leo las pistas
+		TGMeasureHeader lastHeader = null;
+		long headerStart = TGDuration.QUARTER_TIME;
+		for(int i = 0;i < headerCount;i++){
+			TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader);
+			song.addMeasureHeader(header);
+			headerStart += header.getLength();
+			lastHeader = header;
+		}
+		
+		//leo la cantidad de pistas
+		int trackCount = readByte();
+		
+		//leo las pistas
+		for(int i = 0;i < trackCount;i++){
+			song.addTrack(readTrack(i + 1,song));
+		}
+		
+		return song;
+	}
+	
+	private TGTrack readTrack(int number,TGSong song){
+		//header
+		int header = readHeader();
+		
+		TGTrack track = this.factory.newTrack();
+		
+		track.setNumber(number);
+		
+		//leo el nombre
+		track.setName(readUnsignedByteString());
+		
+		//leo el solo
+		track.setSolo((header & TRACK_SOLO) != 0);
+		
+		//leo el mute
+		track.setMute((header & TRACK_MUTE) != 0);
+		
+		//leo el canal
+		readChannel(song, track);
+		
+		//leo la cantidad de compases
+		int measureCount = song.countMeasureHeaders();
+		
+		//leo los compases
+		TGMeasure lastMeasure = null;
+		for(int i = 0;i < measureCount;i++){
+			TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure);
+			track.addMeasure(measure);
+			lastMeasure = measure;
+		}
+		
+		//leo la cantidad de cuerdas
+		int stringCount = readByte();
+		
+		//leo las cuerdas
+		for(int i = 0;i < stringCount;i++){
+			track.getStrings().add(readInstrumentString(i + 1));
+		}
+		
+		//leo el offset
+		track.setOffset(TGTrack.MIN_OFFSET + readByte());
+		
+		//leo el color
+		readRGBColor(track.getColor());
+		
+		//leo el lyrics
+		if(((header & TRACK_LYRICS) != 0)){
+			readLyrics(track.getLyrics());
+		}
+		
+		return track;
+	}
+	
+	private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){
+		int header = readHeader();
+		
+		TGMeasureHeader measureHeader = this.factory.newHeader();
+		measureHeader.setNumber(number);
+		measureHeader.setStart(start);
+		
+		//leo el time signature
+		if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){
+			readTimeSignature(measureHeader.getTimeSignature());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature());
+		}
+		
+		//leo el tempo
+		if(((header & MEASURE_HEADER_TEMPO) != 0)){
+			readTempo(measureHeader.getTempo());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTempo().copy(measureHeader.getTempo());
+		}
+		
+		//leo el comienzo de la repeticion
+		measureHeader.setRepeatOpen((header & MEASURE_HEADER_REPEAT_OPEN) != 0);
+		
+		//leo el numero de repeticiones
+		if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){
+			 measureHeader.setRepeatClose(readShort());
+		}
+		
+		//leo los finales alternativos
+		if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){
+			 measureHeader.setRepeatAlternative(readByte());
+		}
+		
+		//leo el marker
+		if(((header & MEASURE_HEADER_MARKER) != 0)){
+			measureHeader.setMarker(readMarker(number));
+		}
+		
+		measureHeader.setTripletFeel((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE);
+		if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){
+			measureHeader.setTripletFeel(readByte());
+		}
+		
+		return measureHeader;
+	}
+	
+	private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){
+		int header = readHeader();
+		
+		TGMeasure measure = this.factory.newMeasure(measureHeader);
+		TGBeatData data = new TGBeatData(measure);
+		
+		//leo la los beats
+		readBeats(measure, data);
+		
+		//leo la clave
+		measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef());
+		if(((header & MEASURE_CLEF) != 0)){
+			measure.setClef(readByte());
+		}
+		
+		//leo el key signature
+		measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature());
+		if(((header & MEASURE_KEYSIGNATURE) != 0)){
+			measure.setKeySignature(readByte());
+		}
+		
+		return measure;
+	}
+	
+	private void readChannel(TGSong song, TGTrack track){
+		TGChannel channel = this.factory.newChannel();
+		TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+		TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+		
+		//leo el canal
+		int channel1 = (readByte() & 0xff);
+		gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+		gmChannel1Param.setValue(Integer.toString(channel1));
+		
+		//leo el canal de efectos
+		int channel2 = (readByte() & 0xff);
+		gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+		gmChannel2Param.setValue(Integer.toString(channel2));
+		
+		// Parseo el banco de sonidos
+		channel.setBank( channel1 == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+		
+		//leo el instrumento
+		channel.setProgram(readByte());
+		
+		//leo el volumen
+		channel.setVolume(readByte());
+		
+		//leo el balance
+		channel.setBalance(readByte());
+		
+		//leo el chorus
+		channel.setChorus(readByte());
+		
+		//leo el reverb
+		channel.setReverb(readByte());
+		
+		//leo el phaser
+		channel.setPhaser(readByte());
+		
+		//leo el tremolo
+		channel.setTremolo(readByte());
+		
+		//------------------------------------------//
+		for( int i = 0 ; i < song.countChannels() ; i ++ ){
+			TGChannel channelAux = song.getChannel(i);
+			for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+				TGChannelParameter channelParameter = channelAux.getParameter( n );
+				if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+					if( Integer.toString(channel1).equals(channelParameter.getValue()) ){
+						channel.setChannelId(channelAux.getChannelId());
+					}
+				}
+			}
+		}
+		if( channel.getChannelId() <= 0 ){
+			channel.setChannelId( song.countChannels() + 1 );
+			channel.setName(("#" + channel.getChannelId()));
+			channel.addParameter(gmChannel1Param);
+			channel.addParameter(gmChannel2Param);
+			song.addChannel(channel);
+		}
+		track.setChannelId(channel.getChannelId());
+	}
+	
+	private void readBeats(TGMeasure measure,TGBeatData data){
+		int header = BEAT_HAS_NEXT;
+		while(((header & BEAT_HAS_NEXT) != 0)){
+			header = readHeader();
+			readBeat(header, measure, data);
+		}
+	}
+	
+	private void readBeat(int header, TGMeasure measure,TGBeatData data){
+		TGBeat beat = this.factory.newBeat();
+		
+		beat.setStart(data.getCurrentStart());
+		
+		readVoices(header, beat, data);
+		
+		//leo el stroke
+		if(((header & BEAT_HAS_STROKE) != 0)){
+			readStroke(beat.getStroke());
+		}
+		
+		//leo el acorde
+		if(((header & BEAT_HAS_CHORD) != 0)){
+			readChord(beat);
+		}
+		
+		//leo el texto
+		if(((header & BEAT_HAS_TEXT) != 0)){
+			readText(beat);
+		}
+		
+		measure.addBeat(beat);
+	}
+	
+	private void readVoices(int header, TGBeat beat, TGBeatData data){
+		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
+			int shift = (i * 2 );
+			
+			beat.getVoice(i).setEmpty(true);
+			
+			if(((header & (BEAT_HAS_VOICE << shift)) != 0)){
+				if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){
+					data.getVoice(i).setFlags( readHeader() );
+				}
+				
+				int flags = data.getVoice(i).getFlags();
+				
+				//leo la duracion
+				if(((flags & VOICE_NEXT_DURATION) != 0)){
+					readDuration(data.getVoice(i).getDuration());
+				}
+				
+				//leo las notas
+				if(((flags & VOICE_HAS_NOTES) != 0)){
+					readNotes(beat.getVoice(i), data);
+				}
+				
+				//leo la direccion
+				if(((flags & VOICE_DIRECTION_UP) != 0)){
+					beat.getVoice(i).setDirection( TGVoice.DIRECTION_UP );
+				}
+				else if(((flags & VOICE_DIRECTION_DOWN) != 0)){
+					beat.getVoice(i).setDirection( TGVoice.DIRECTION_DOWN );
+				}
+				data.getVoice(i).getDuration().copy(beat.getVoice(i).getDuration());
+				data.getVoice(i).setStart(data.getVoice(i).getStart() + beat.getVoice(i).getDuration().getTime());
+				
+				beat.getVoice(i).setEmpty(false);
+			}
+		}
+	}
+	
+	private void readNotes(TGVoice voice,TGBeatData data){
+		int header = NOTE_HAS_NEXT;
+		while(((header & NOTE_HAS_NEXT) != 0)){
+			header = readHeader();
+			readNote(header, voice, data);
+		}
+	}
+	
+	private void readNote(int header,TGVoice voice,TGBeatData data){
+		TGNote note = this.factory.newNote();
+		
+		//leo el valor
+		note.setValue(readByte());
+		
+		//leo la cuerda
+		note.setString(readByte());
+		
+		//leo la ligadura
+		note.setTiedNote((header & NOTE_TIED) != 0);
+		
+		//leo el velocity
+		if(((header & NOTE_VELOCITY) != 0)){
+			data.getVoice(voice.getIndex()).setVelocity(readByte());
+		}
+		note.setVelocity(data.getVoice(voice.getIndex()).getVelocity());
+		
+		//leo los efectos
+		if(((header & NOTE_EFFECT) != 0)){
+			readNoteEffect(note.getEffect());
+		}
+		
+		voice.addNote(note);
+	}
+	
+	private void readChord(TGBeat beat){
+		TGChord chord = this.factory.newChord(readByte());
+		
+		//leo el nombre
+		chord.setName( readUnsignedByteString() );
+		
+		//leo el primer fret
+		chord.setFirstFret(readByte());
+		
+		//leo las cuerdas
+		for(int string = 0; string < chord.countStrings(); string ++){
+			chord.addFretValue(string, readByte());
+		}
+		beat.setChord(chord);
+	}
+	
+	private void readText(TGBeat beat){
+		TGText text = this.factory.newText();
+		
+		//leo el texto
+		text.setValue(readUnsignedByteString());
+		
+		beat.setText(text);
+	}
+	
+	private TGString readInstrumentString(int number){
+		TGString string = this.factory.newString();
+		
+		string.setNumber(number);
+		
+		//leo el valor
+		string.setValue(readByte());
+		
+		return string;
+	}
+	
+	private void readTempo(TGTempo tempo){
+		//leo el valor
+		tempo.setValue(readShort());
+	}
+	
+	private void readTimeSignature(TGTimeSignature timeSignature){
+		//leo el numerador
+		timeSignature.setNumerator(readByte());
+		
+		//leo el denominador
+		readDuration(timeSignature.getDenominator());
+	}
+	
+	private void readDuration(TGDuration duration){
+		int header = readHeader();
+		
+		// leo el puntillo
+		duration.setDotted((header & DURATION_DOTTED) != 0);
+		
+		//leo el doble puntillo
+		duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0);
+		
+		//leo el valor
+		duration.setValue(readByte());
+		
+		//leo el tipo de divisiones
+		if(((header & DURATION_NO_TUPLET) != 0)){
+			readDivisionType(duration.getDivision());
+		}
+		else{
+			TGDivisionType.NORMAL.copy(duration.getDivision());
+		}
+	}
+	
+	private void readDivisionType(TGDivisionType divisionType){
+		//leo los enters
+		divisionType.setEnters(readByte());
+		
+		//leo los tiempos
+		divisionType.setTimes(readByte());
+	}
+	
+	private void readStroke(TGStroke stroke){
+		//leo la direccion
+		stroke.setDirection( readByte() );
+		
+		//leo el valor
+		stroke.setValue( readByte() );
+	}
+	
+	private void readNoteEffect(TGNoteEffect effect){
+		int header = readHeader(3);
+		
+		//leo el bend
+		if(((header & EFFECT_BEND) != 0)){
+			effect.setBend(readBendEffect());
+		}
+		
+		//leo el tremolo bar
+		if(((header & EFFECT_TREMOLO_BAR) != 0)){
+			effect.setTremoloBar(readTremoloBarEffect());
+		}
+		
+		//leo el harmonic
+		if(((header & EFFECT_HARMONIC) != 0)){
+			effect.setHarmonic(readHarmonicEffect());
+		}
+		
+		//leo el grace
+		if(((header & EFFECT_GRACE) != 0)){
+			effect.setGrace(readGraceEffect());
+		}
+		
+		//leo el trill
+		if(((header & EFFECT_TRILL) != 0)){
+			effect.setTrill(readTrillEffect());
+		}
+		
+		//leo el tremolo picking
+		if(((header & EFFECT_TREMOLO_PICKING) != 0)){
+			effect.setTremoloPicking(readTremoloPickingEffect());
+		}
+		
+		//vibrato
+		effect.setVibrato(((header & EFFECT_VIBRATO) != 0));
+		
+		//dead note
+		effect.setDeadNote(((header & EFFECT_DEAD) != 0));
+		
+		//slide
+		effect.setSlide(((header & EFFECT_SLIDE) != 0));
+		
+		//hammer-on/pull-off
+		effect.setHammer(((header & EFFECT_HAMMER) != 0));
+		
+		//ghost note
+		effect.setGhostNote(((header & EFFECT_GHOST) != 0));
+		
+		//accentuated note
+		effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0));
+		
+		//heavy accentuated note
+		effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0));
+		
+		//palm mute
+		effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0));
+		
+		//staccato
+		effect.setStaccato(((header & EFFECT_STACCATO) != 0));
+		
+		//tapping
+		effect.setTapping(((header & EFFECT_TAPPING) != 0));
+		
+		//slapping
+		effect.setSlapping(((header & EFFECT_SLAPPING) != 0));
+		
+		//popping
+		effect.setPopping(((header & EFFECT_POPPING) != 0));
+		
+		//fade in
+		effect.setFadeIn(((header & EFFECT_FADE_IN) != 0));
+		
+		//let ring
+		effect.setLetRing(((header & EFFECT_LET_RING) != 0));
+	}
+	
+	private TGEffectBend readBendEffect(){
+		TGEffectBend bend = this.factory.newEffectBend();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value = readByte();
+			
+			//agrego el punto
+			bend.addPoint(position,value);
+		}
+		return bend;
+	}
+	
+	private TGEffectTremoloBar readTremoloBarEffect(){
+		TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value =  (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH);
+			
+			//agrego el punto
+			tremoloBar.addPoint(position,value);
+		}
+		return tremoloBar;
+	}
+	
+	private TGEffectHarmonic readHarmonicEffect(){
+		TGEffectHarmonic effect = this.factory.newEffectHarmonic();
+		
+		//leo el tipo
+		effect.setType(readByte());
+		
+		//leo la data
+		if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){
+			effect.setData(readByte());
+		}
+		return effect;
+	}
+	
+	private TGEffectGrace readGraceEffect(){
+		int header = readHeader();
+		
+		TGEffectGrace effect = this.factory.newEffectGrace();
+		
+		effect.setDead((header & GRACE_FLAG_DEAD) != 0) ;
+		
+		effect.setOnBeat((header & GRACE_FLAG_ON_BEAT) != 0) ;
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.setDuration(readByte());
+		
+		//leo el velocity
+		effect.setDynamic(readByte());
+		
+		//leo la transicion
+		effect.setTransition(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTremoloPicking readTremoloPickingEffect(){
+		TGEffectTremoloPicking effect = this.factory.newEffectTremoloPicking();
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTrill readTrillEffect(){
+		TGEffectTrill effect = this.factory.newEffectTrill();
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGMarker readMarker(int measure){
+		TGMarker marker = this.factory.newMarker();
+		
+		marker.setMeasure(measure);
+		
+		//leo el titulo
+		marker.setTitle(readUnsignedByteString());
+		
+		//leo el color
+		readRGBColor(marker.getColor());
+		
+		return marker;
+	}
+	
+	private void readRGBColor(TGColor color){
+		//leo el RGB
+		color.setR((readByte() & 0xff));
+		color.setG((readByte() & 0xff));
+		color.setB((readByte() & 0xff));
+	}
+	
+	private void readLyrics(TGLyric lyrics){
+		//leo el compas de comienzo
+		lyrics.setFrom(readShort());
+		
+		//leo el texto
+		lyrics.setLyrics(readIntegerString());
+	}
+	
+	private byte readByte(){
+		try {
+			return (byte)this.dataInputStream.read();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private int readHeader(){
+		try {
+			return this.dataInputStream.read();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private int readHeader(int bCount){
+		int header = 0;
+		for(int i = bCount; i > 0; i --){
+			header += ( readHeader() << ( (8 * i) - 8 ) );
+		}
+		return header;
+	}
+	
+	private short readShort(){
+		try {
+			return this.dataInputStream.readShort();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private String readUnsignedByteString(){
+		try {
+			return readString( (this.dataInputStream.read() & 0xFF ));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private String readIntegerString(){
+		try {
+			return readString(this.dataInputStream.readInt());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private String readString(int length){
+		try {
+			char[] chars = new char[length];
+			for(int i = 0;i < chars.length; i++){
+				chars[i] = this.dataInputStream.readChar();
+			}
+			return String.copyValueOf(chars);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGInputStreamPlugin.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGInputStreamPlugin.java
new file mode 100644
index 0000000..0b433b0
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGInputStreamPlugin.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.io.tg.v12;
+
+import org.herac.tuxguitar.io.tg.TGInputStreamPluginImpl;
+
+public class TGInputStreamPlugin extends TGInputStreamPluginImpl{
+
+	public TGInputStreamPlugin() {
+		super(new TGInputStream());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGOutputStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGOutputStream.java
new file mode 100644
index 0000000..b385708
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGOutputStream.java
@@ -0,0 +1,761 @@
+/*
+ * Created on 16-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.io.tg.v12;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Iterator;
+
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGLocalFileExporter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGOutputStream extends TGStream implements TGLocalFileExporter{
+	
+	private TGFactory factory;
+	private GMChannelRouter channelRouter;
+	private DataOutputStream dataOutputStream;
+	
+	public boolean isSupportedExtension(String extension) {
+		return (extension.toLowerCase().equals(TG_FORMAT_EXTENSION));
+	}
+	
+	public String getExportName(){
+		return "TuxGuitar 1.2";
+	}
+	
+	public TGFileFormat getFileFormat(){
+		return new TGFileFormat("TuxGuitar","*.tg");
+	}
+	
+	public boolean configure(boolean setDefaults){
+		return true;
+	}
+	
+	public void init(TGFactory factory,OutputStream stream) {
+		this.factory = factory;
+		this.dataOutputStream = new DataOutputStream(stream);
+	}
+	
+	public void exportSong(TGSong song) throws TGFileFormatException {
+		try{
+			this.configureChannelRouter(song);
+			this.writeVersion();
+			this.write(song);
+			this.dataOutputStream.flush();
+			this.dataOutputStream.close();
+		}catch( Throwable throwable){
+			throw new TGFileFormatException(throwable);
+		}
+	}
+	
+	private void writeVersion(){
+		writeUnsignedByteString(TG_FORMAT_VERSION);
+	}
+	
+	private void write(TGSong song){
+		//escribo el nombre
+		writeUnsignedByteString(song.getName());
+		
+		//escribo el artista
+		writeUnsignedByteString(song.getArtist());
+		
+		//escribo el album
+		writeUnsignedByteString(song.getAlbum());
+		
+		//escribo el autor
+		writeUnsignedByteString(song.getAuthor());
+		
+		//escribo la fecha
+		writeUnsignedByteString(song.getDate());
+		
+		//escribo el copyright
+		writeUnsignedByteString(song.getCopyright());
+		
+		//escribo el creador
+		writeUnsignedByteString(song.getWriter());
+		
+		//escribo el transcriptor
+		writeUnsignedByteString(song.getTranscriber());
+		
+		//escribo los comentarios
+		writeIntegerString(song.getComments());
+		
+		//escribo la cantidad de measure headers 
+		writeShort((short)song.countMeasureHeaders());
+		
+		//escribo las pistas
+		TGMeasureHeader lastHeader = null;
+		Iterator headers = song.getMeasureHeaders();
+		while(headers.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)headers.next();
+			writeMeasureHeader(header,lastHeader);
+			lastHeader = header;
+		}
+		
+		//escribo la cantidad de pistas
+		writeByte(song.countTracks());
+		
+		//escribo las pistas
+		for(int i = 0;i < song.countTracks();i++){
+			TGTrack track = song.getTrack(i);
+			writeTrack(track);
+		}
+	}
+	
+	private void writeTrack(TGTrack track){
+		//header
+		int header = 0;
+		if (track.isSolo()) {
+			header |= TRACK_SOLO;
+		}
+		if (track.isMute()) {
+			header |= TRACK_MUTE;
+		}
+		if(!track.getLyrics().isEmpty()){
+			header |= TRACK_LYRICS;
+		}
+		writeHeader(header);
+		
+		//escribo el nombre
+		writeUnsignedByteString(track.getName());
+		
+		//escribo el canal
+		writeChannel(getChannel(track.getSong(), track));
+		
+		//escribo los compases
+		TGMeasure lastMeasure = null;
+		Iterator measures  = track.getMeasures();
+		while(measures.hasNext()){
+			TGMeasure measure = (TGMeasure)measures.next();
+			writeMeasure(measure,lastMeasure);
+			lastMeasure = measure;
+		}
+		
+		//escribo la cantidad de cuerdas 
+		writeByte(track.getStrings().size());
+		
+		//escribo las cuerdas
+		Iterator stringIt  = track.getStrings().iterator();
+		while(stringIt.hasNext()){
+			TGString string = (TGString)stringIt.next();
+			writeInstrumentString(string);
+		}
+		
+		//escribo el offset
+		writeByte(track.getOffset() - TGTrack.MIN_OFFSET);
+		
+		//escribo el color
+		writeRGBColor(track.getColor());
+		
+		//escribo el lyrics
+		if(((header & TRACK_LYRICS) != 0)){
+			writeLyrics(track.getLyrics());
+		}
+	}
+	
+	private void writeMeasureHeader(TGMeasureHeader measureheader,TGMeasureHeader lastMeasureHeader){
+		int header = 0;
+		if(lastMeasureHeader == null){
+			header |= MEASURE_HEADER_TIMESIGNATURE;
+			header |= MEASURE_HEADER_TEMPO;
+			if(measureheader.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE){
+				header |= MEASURE_HEADER_TRIPLET_FEEL;
+			}
+		}else{
+			//Time Signature
+			int numerator = measureheader.getTimeSignature().getNumerator();
+			int value = measureheader.getTimeSignature().getDenominator().getValue();
+			int prevNumerator = lastMeasureHeader.getTimeSignature().getNumerator();
+			int prevValue = lastMeasureHeader.getTimeSignature().getDenominator().getValue();
+			if(numerator != prevNumerator || value != prevValue){
+				header |= MEASURE_HEADER_TIMESIGNATURE;
+			}
+			//Tempo
+			if(measureheader.getTempo().getValue() != lastMeasureHeader.getTempo().getValue()){
+				header |= MEASURE_HEADER_TEMPO;
+			}
+			//Triplet Feel
+			if(measureheader.getTripletFeel() != lastMeasureHeader.getTripletFeel()){
+				header |= MEASURE_HEADER_TRIPLET_FEEL;
+			}
+		}
+		header = (measureheader.isRepeatOpen())?header |= MEASURE_HEADER_REPEAT_OPEN:header;
+		header = (measureheader.getRepeatClose() > 0)?header |= MEASURE_HEADER_REPEAT_CLOSE:header;
+		header = (measureheader.getRepeatAlternative() > 0)?header |= MEASURE_HEADER_REPEAT_ALTERNATIVE:header;
+		header = (measureheader.hasMarker())?header |= MEASURE_HEADER_MARKER:header;
+		
+		writeHeader(header);
+		
+		//escribo el timeSignature
+		if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){
+			writeTimeSignature(measureheader.getTimeSignature());
+		}
+		
+		//escribo el tempo
+		if(((header & MEASURE_HEADER_TEMPO) != 0)){
+			writeTempo(measureheader.getTempo());
+		}
+		
+		//escribo el numero de repeticiones
+		if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){
+			writeShort((short)measureheader.getRepeatClose());
+		}
+		
+		//escribo los finales alternativos
+		if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){
+			writeByte(measureheader.getRepeatAlternative());
+		}
+		
+		//escribo el marker
+		if(((header & MEASURE_HEADER_MARKER) != 0)){
+			writeMarker(measureheader.getMarker());
+		}
+		
+		//escribo el triplet feel
+		if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){
+			writeByte(measureheader.getTripletFeel());
+		}
+	}
+	
+	private void writeMeasure(TGMeasure measure,TGMeasure lastMeasure){
+		int header = 0;
+		if(lastMeasure == null){
+			header |= MEASURE_CLEF;
+			header |= MEASURE_KEYSIGNATURE;
+		}else{
+			//Clef
+			if(measure.getClef() != lastMeasure.getClef()){
+				header |= MEASURE_CLEF;
+			}
+			//KeySignature
+			if(measure.getKeySignature() != lastMeasure.getKeySignature()){
+				header |= MEASURE_KEYSIGNATURE;
+			}
+		}
+		//escribo la cabecera
+		writeHeader(header);
+		
+		//escribo los beats
+		TGBeatData data = new TGBeatData(measure);
+		writeBeats(measure, data);
+		
+		//escribo la clave
+		if(((header & MEASURE_CLEF) != 0)){
+			writeByte(measure.getClef());
+		}
+		
+		//escribo el key signature
+		if(((header & MEASURE_KEYSIGNATURE) != 0)){
+			writeByte(measure.getKeySignature());
+		}
+	}
+	
+	private void writeChannel(TGChannel channel){
+		GMChannelRoute gmChannelRoute = getChannelRoute(channel.getChannelId());
+		
+		//escribo el canal
+		writeByte(gmChannelRoute.getChannel1());
+		
+		//escribo el canal de efectos
+		writeByte(gmChannelRoute.getChannel2());
+		
+		//escribo el instrumento
+		writeByte(channel.getProgram());
+		
+		//escribo el volumen
+		writeByte(channel.getVolume());
+		
+		//escribo el balance
+		writeByte(channel.getBalance());
+		
+		//escribo el chorus
+		writeByte(channel.getChorus());
+		
+		//escribo el reverb
+		writeByte(channel.getReverb());
+		
+		//escribo el phaser
+		writeByte(channel.getPhaser());
+		
+		//escribo el tremolo
+		writeByte(channel.getTremolo());
+	}
+	
+	private void writeBeats(TGMeasure measure,TGBeatData data){
+		int count = measure.countBeats();
+		for(int i = 0; i < count; i ++){
+			TGBeat beat = measure.getBeat(i);
+			writeBeat(beat,data, (i + 1 < count ));
+		}
+	}
+	
+	private void writeBeat(TGBeat beat,TGBeatData data, boolean hasNext){
+		int header = hasNext ? BEAT_HAS_NEXT : 0;
+		
+		//Berifico si hay cambios en las voces
+		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
+			int shift = (i * 2 );
+			if(!beat.getVoice(i).isEmpty()){
+				header |= ( BEAT_HAS_VOICE << shift ); 
+				
+				int flags = ( beat.getVoice(i).isRestVoice() ? 0 : VOICE_HAS_NOTES );
+				if(!beat.getVoice(i).getDuration().isEqual(data.getVoice(i).getDuration())){
+					flags |= VOICE_NEXT_DURATION;
+					data.getVoice(i).setDuration(beat.getVoice(i).getDuration());
+				}
+				if(beat.getVoice(i).getDirection() != TGVoice.DIRECTION_NONE ){
+					if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_UP ){
+						flags |= VOICE_DIRECTION_UP;
+					}
+					else if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_DOWN ){
+						flags |= VOICE_DIRECTION_DOWN;
+					}
+				}
+				if( data.getVoice(i).getFlags() != flags ){
+					header |= ( BEAT_HAS_VOICE_CHANGES << shift ); 
+					data.getVoice(i).setFlags( flags );
+				}
+			}
+			
+		}
+		//Berifico si tiene stroke
+		if(beat.getStroke().getDirection() != TGStroke.STROKE_NONE){
+			header |= BEAT_HAS_STROKE;
+		}
+		//Berifico si tiene acorde
+		if(beat.getChord() != null){
+			header |= BEAT_HAS_CHORD;
+		}
+		//Berifico si tiene texto
+		if(beat.getText() != null){
+			header |= BEAT_HAS_TEXT;
+		}
+		
+		// escribo la cabecera
+		writeHeader(header);
+		
+		//escribo las voces
+		writeVoices(header, beat, data);
+		
+		//escribo el stroke
+		if(((header & BEAT_HAS_STROKE) != 0)){
+			writeStroke(beat.getStroke());
+		}
+		
+		//escribo el acorde
+		if(((header & BEAT_HAS_CHORD) != 0)){
+			writeChord(beat.getChord());
+		}
+		
+		//escribo el texto
+		if(((header & BEAT_HAS_TEXT) != 0)){
+			writeText(beat.getText());
+		}
+	}
+	
+	private void writeVoices(int header, TGBeat beat,TGBeatData data){
+		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
+			int shift = (i * 2 );
+			if((( header & (BEAT_HAS_VOICE << shift)) != 0)){
+				
+				if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){
+					writeHeader( data.getVoice(i).getFlags() );
+				}
+				
+				//escribo la duracion
+				if((( data.getVoice(i).getFlags() & VOICE_NEXT_DURATION) != 0)){
+					writeDuration(beat.getVoice(i).getDuration());
+				}
+				
+				//escribo las notas
+				if((( data.getVoice(i).getFlags() & VOICE_HAS_NOTES) != 0)){
+					writeNotes(beat.getVoice(i), data);
+				}
+			}
+		}
+	}
+	
+	private void writeNotes(TGVoice voice,TGBeatData data){
+		for( int i = 0 ; i < voice.countNotes() ; i ++){
+			TGNote note = voice.getNote(i);
+			
+			int header = ( i + 1 < voice.countNotes() ? NOTE_HAS_NEXT : 0 );
+			header = (note.isTiedNote())?header |= NOTE_TIED:header;
+			if(note.getVelocity() != data.getVoice(voice.getIndex()).getVelocity()){
+				data.getVoice(voice.getIndex()).setVelocity(note.getVelocity());
+				header |= NOTE_VELOCITY;
+			}
+			header = (note.getEffect().hasAnyEffect())?header |= NOTE_EFFECT:header;
+			
+			writeHeader(header);
+			
+			writeNote(header,note);
+		}
+	}
+	
+	private void writeNote(int header,TGNote note){
+		//escribo el valor
+		writeByte(note.getValue());
+		
+		//escribo la cuerda
+		writeByte(note.getString());
+		
+		//escribo el velocity
+		if(((header & NOTE_VELOCITY) != 0)){
+			writeByte(note.getVelocity());
+		}
+		
+		//escribo los efectos
+		if(((header & NOTE_EFFECT) != 0)){
+			writeNoteEffect(note.getEffect());
+		}
+	}
+	
+	private void writeStroke(TGStroke stroke){
+		//escribo la direccion
+		writeByte(stroke.getDirection());
+		
+		//escribo el valor
+		writeByte(stroke.getValue());
+	}
+	
+	private void writeChord(TGChord chord){
+		//escribo la cantidad de cuerdas
+		writeByte(chord.countStrings());
+		
+		//escribo el nombre
+		writeUnsignedByteString(chord.getName());
+		
+		//escribo el primer fret
+		writeByte(chord.getFirstFret());
+		
+		//escribo el valor de cada cuerda
+		for(int string = 0; string < chord.countStrings(); string ++){
+			writeByte(chord.getFretValue(string));
+		}
+	}
+	
+	private void writeText(TGText text){
+		//escribo el texto
+		writeUnsignedByteString(text.getValue());
+	}
+	
+	private void writeInstrumentString(TGString string){
+		//escribo el valor
+		writeByte(string.getValue());
+	}
+	
+	private void writeTempo(TGTempo tempo){
+		//escribo el valor
+		writeShort((short)tempo.getValue());
+	}
+	
+	private void writeTimeSignature(TGTimeSignature timeSignature){
+		//escribo el numerador
+		writeByte(timeSignature.getNumerator());
+		
+		//escribo el denominador
+		writeDuration(timeSignature.getDenominator());
+	}
+	
+	private void writeDuration(TGDuration duration){
+		int header = 0;
+		header = (duration.isDotted())?header |= DURATION_DOTTED:header;
+		header = (duration.isDoubleDotted())?header |= DURATION_DOUBLE_DOTTED:header;
+		header = (!duration.getDivision().isEqual(TGDivisionType.NORMAL))?header |= DURATION_NO_TUPLET:header;
+		writeHeader(header);
+		
+		//escribo el valor
+		writeByte(duration.getValue());
+		
+		//escribo el tipo de divisiones
+		if(((header & DURATION_NO_TUPLET) != 0)){
+			writeDivisionType(duration.getDivision());
+		}
+	}
+	
+	private void writeDivisionType(TGDivisionType divisionType){
+		//escribo los enters
+		writeByte(divisionType.getEnters());
+		
+		//escribo los tiempos
+		writeByte(divisionType.getTimes());
+	}
+	
+	private void writeNoteEffect(TGNoteEffect effect){
+		int header = 0;
+		
+		header = (effect.isBend())?header |= EFFECT_BEND:header;
+		header = (effect.isTremoloBar())?header |= EFFECT_TREMOLO_BAR:header;
+		header = (effect.isHarmonic())?header |= EFFECT_HARMONIC:header;
+		header = (effect.isGrace())?header |= EFFECT_GRACE:header;
+		header = (effect.isTrill())?header |= EFFECT_TRILL:header;
+		header = (effect.isTremoloPicking())?header |= EFFECT_TREMOLO_PICKING:header;
+		header = (effect.isVibrato())?header |= EFFECT_VIBRATO:header;
+		header = (effect.isDeadNote())?header |= EFFECT_DEAD:header;
+		header = (effect.isSlide())?header |= EFFECT_SLIDE:header;
+		header = (effect.isHammer())?header |= EFFECT_HAMMER:header;
+		header = (effect.isGhostNote())?header |= EFFECT_GHOST:header;
+		header = (effect.isAccentuatedNote())?header |= EFFECT_ACCENTUATED:header;
+		header = (effect.isHeavyAccentuatedNote())?header |= EFFECT_HEAVY_ACCENTUATED:header;
+		header = (effect.isPalmMute())?header |= EFFECT_PALM_MUTE:header;
+		header = (effect.isStaccato())?header |= EFFECT_STACCATO:header;
+		header = (effect.isTapping())?header |= EFFECT_TAPPING:header;
+		header = (effect.isSlapping())?header |= EFFECT_SLAPPING:header;
+		header = (effect.isPopping())?header |= EFFECT_POPPING:header;
+		header = (effect.isFadeIn())?header |= EFFECT_FADE_IN:header;
+		header = (effect.isLetRing())?header |= EFFECT_LET_RING:header;
+		
+		writeHeader(header,3);
+		
+		//escribo el bend
+		if(((header & EFFECT_BEND) != 0)){
+			writeBendEffect(effect.getBend());
+		}
+		
+		//leo el tremolo bar
+		if(((header & EFFECT_TREMOLO_BAR) != 0)){
+			writeTremoloBarEffect(effect.getTremoloBar());
+		}
+		
+		//leo el harmonic
+		if(((header & EFFECT_HARMONIC) != 0)){
+			writeHarmonicEffect(effect.getHarmonic());
+		}
+		
+		//leo el grace
+		if(((header & EFFECT_GRACE) != 0)){
+			writeGraceEffect(effect.getGrace());
+		}
+		
+		//leo el trill
+		if(((header & EFFECT_TRILL) != 0)){
+			writeTrillEffect(effect.getTrill());
+		}
+		
+		//leo el tremolo picking
+		if(((header & EFFECT_TREMOLO_PICKING) != 0)){
+			writeTremoloPickingEffect(effect.getTremoloPicking());
+		}
+	}
+	
+	private void writeBendEffect(TGEffectBend effect){
+		//escribo la cantidad de puntos
+		writeByte(effect.getPoints().size());
+		
+		Iterator it = effect.getPoints().iterator();
+		while(it.hasNext()){
+			TGEffectBend.BendPoint point = (TGEffectBend.BendPoint)it.next();
+			
+			//escribo la posicion
+			writeByte(point.getPosition());
+			
+			//escribo el valor
+			writeByte(point.getValue());
+		}
+	}
+	
+	private void writeTremoloBarEffect(TGEffectTremoloBar effect){
+		//escribo la cantidad de puntos
+		writeByte(effect.getPoints().size());
+		
+		Iterator it = effect.getPoints().iterator();
+		while(it.hasNext()){
+			TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint)it.next();
+			
+			//escribo la posicion
+			writeByte(point.getPosition());
+			
+			//escribo el valor
+			writeByte( (point.getValue() + TGEffectTremoloBar.MAX_VALUE_LENGTH) );
+		}
+	}
+	
+	private void writeHarmonicEffect(TGEffectHarmonic effect){
+		//excribo el tipo
+		writeByte(effect.getType());
+		
+		//excribo la data
+		if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){
+			writeByte(effect.getData());
+		}
+	}
+	
+	private void writeGraceEffect(TGEffectGrace effect){
+		int header = 0;
+		header = (effect.isDead())?header |= GRACE_FLAG_DEAD:header;
+		header = (effect.isOnBeat())?header |= GRACE_FLAG_ON_BEAT:header;
+		
+		//excribo el header
+		writeHeader(header);
+		
+		//excribo el fret
+		writeByte(effect.getFret());
+		
+		//excribo la duracion
+		writeByte(effect.getDuration());
+		
+		//excribo el velocity
+		writeByte(effect.getDynamic());
+		
+		//excribo la transicion
+		writeByte(effect.getTransition());
+	}
+	
+	private void writeTremoloPickingEffect(TGEffectTremoloPicking effect){
+		//excribo la duracion
+		writeByte(effect.getDuration().getValue());
+	}
+	
+	private void writeTrillEffect(TGEffectTrill effect){
+		//excribo el fret
+		writeByte(effect.getFret());
+		
+		//excribo la duracion
+		writeByte(effect.getDuration().getValue());
+	}
+	
+	private void writeMarker(TGMarker marker){
+		//escribo el titulo
+		writeUnsignedByteString(marker.getTitle());
+		
+		//escribo el color
+		writeRGBColor(marker.getColor());
+	}
+	
+	private void writeRGBColor(TGColor color){
+		//escribo el RGB
+		writeByte(color.getR());
+		writeByte(color.getG());
+		writeByte(color.getB());
+	}
+	
+	private void writeLyrics(TGLyric lyrics){
+		//escribo el compas de comienzo
+		writeShort((short)lyrics.getFrom());
+		
+		//escribo el texto
+		writeIntegerString(lyrics.getLyrics());
+	}
+	
+	public void writeByte(int v){
+		try {
+			this.dataOutputStream.write(v);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private void writeUnsignedByteString(String v){
+		try {
+			String byteString = (v == null ? new String() : ((v.length() > 0xFF)?v.substring(0, 0xFF):v) );
+			this.dataOutputStream.write(byteString.length());
+			this.dataOutputStream.writeChars(byteString);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private void writeIntegerString(String v){
+		try {
+			this.dataOutputStream.writeInt(v.length());
+			this.dataOutputStream.writeChars(v);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void writeHeader(int v){
+		try {
+			this.dataOutputStream.write(v);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void writeHeader(int v,int bCount){
+		for(int i = bCount; i > 0; i --){
+			writeHeader( (v >>> ( (8 * i) - 8 ) )  &  0xFF);
+		}
+	}
+	
+	public void writeShort(short v){
+		try {
+			this.dataOutputStream.writeShort(v);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private TGChannel getChannel( TGSong song, TGTrack track ){
+		TGSongManager tgSongManager = new TGSongManager(this.factory);
+		tgSongManager.setSong( song );
+		
+		TGChannel tgChannel = tgSongManager.getChannel( track.getChannelId() );
+		if( tgChannel == null ){
+			tgChannel = this.factory.newChannel();
+		}
+		
+		return tgChannel;
+	}
+	
+	private GMChannelRoute getChannelRoute( int channelId ){
+		GMChannelRoute gmChannelRoute = this.channelRouter.getRoute(channelId);
+		if( gmChannelRoute == null ){
+			gmChannelRoute = new GMChannelRoute(GMChannelRoute.NULL_VALUE);
+			gmChannelRoute.setChannel1(15);
+			gmChannelRoute.setChannel2(15);
+		}
+		
+		return gmChannelRoute;
+	}
+	
+	private void configureChannelRouter( TGSong song ){
+		this.channelRouter = new GMChannelRouter();
+		
+		GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(this.channelRouter);
+		gmChannelRouterConfigurator.configureRouter(song.getChannels());
+	}
+}
diff --git a/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGStream.java b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGStream.java
new file mode 100644
index 0000000..f845833
--- /dev/null
+++ b/TuxGuitar-compat/src/org/herac/tuxguitar/io/tg/v12/TGStream.java
@@ -0,0 +1,205 @@
+package org.herac.tuxguitar.io.tg.v12;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.util.TGVersion;
+
+public class TGStream {
+	
+	public static final String TG_FORMAT_NAME = ("TuxGuitar File Format");
+	
+	public static final String TG_FORMAT_VERSION = (TG_FORMAT_NAME + " - " + new TGVersion(1,2,0).getVersion() );
+	
+	public static final String TG_FORMAT_EXTENSION = (".tg");
+	
+	protected static final int TRACK_SOLO = 0x01;
+	
+	protected static final int TRACK_MUTE = 0x02;
+	
+	protected static final int TRACK_LYRICS = 0x04;
+	
+	protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01;
+	
+	protected static final int MEASURE_HEADER_TEMPO = 0x02;
+	
+	protected static final int MEASURE_HEADER_REPEAT_OPEN = 0x04;
+	
+	protected static final int MEASURE_HEADER_REPEAT_CLOSE = 0x08;
+	
+	protected static final int MEASURE_HEADER_REPEAT_ALTERNATIVE = 0x10;
+	
+	protected static final int MEASURE_HEADER_MARKER = 0x20;
+	
+	protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x40;
+	
+	protected static final int MEASURE_CLEF = 0x01;
+	
+	protected static final int MEASURE_KEYSIGNATURE = 0x02;
+	
+	protected static final int BEAT_HAS_NEXT = 0x01;
+	
+	protected static final int BEAT_HAS_STROKE = 0x02;
+	
+	protected static final int BEAT_HAS_CHORD = 0x04;
+	
+	protected static final int BEAT_HAS_TEXT = 0x08;
+	
+	protected static final int BEAT_HAS_VOICE = 0x10;
+	
+	protected static final int BEAT_HAS_VOICE_CHANGES = 0x20;
+	
+	protected static final int VOICE_HAS_NOTES = 0x01;
+	
+	protected static final int VOICE_NEXT_DURATION = 0x02;
+	
+	protected static final int VOICE_DIRECTION_UP = 0x04;
+	
+	protected static final int VOICE_DIRECTION_DOWN = 0x08;
+	
+	protected static final int NOTE_HAS_NEXT = 0x01;
+	
+	protected static final int NOTE_TIED = 0x02;
+	
+	protected static final int NOTE_EFFECT = 0x04;
+	
+	protected static final int NOTE_VELOCITY = 0x08;
+	
+	protected static final int DURATION_DOTTED = 0x01;
+	
+	protected static final int DURATION_DOUBLE_DOTTED = 0x02;
+	
+	protected static final int DURATION_NO_TUPLET = 0x04;
+	
+	protected static final int EFFECT_BEND = 0x000001;
+	
+	protected static final int EFFECT_TREMOLO_BAR = 0x000002;
+	
+	protected static final int EFFECT_HARMONIC = 0x000004;
+	
+	protected static final int EFFECT_GRACE = 0x000008;
+	
+	protected static final int EFFECT_TRILL = 0x000010;
+	
+	protected static final int EFFECT_TREMOLO_PICKING = 0x000020;
+	
+	protected static final int EFFECT_VIBRATO = 0x000040;
+	
+	protected static final int EFFECT_DEAD = 0x000080;
+	
+	protected static final int EFFECT_SLIDE = 0x000100;
+	
+	protected static final int EFFECT_HAMMER = 0x000200;
+	
+	protected static final int EFFECT_GHOST = 0x000400;
+	
+	protected static final int EFFECT_ACCENTUATED = 0x000800;
+	
+	protected static final int EFFECT_HEAVY_ACCENTUATED = 0x001000;
+	
+	protected static final int EFFECT_PALM_MUTE = 0x002000;
+	
+	protected static final int EFFECT_STACCATO = 0x004000;
+	
+	protected static final int EFFECT_TAPPING = 0x008000;
+	
+	protected static final int EFFECT_SLAPPING = 0x010000;
+	
+	protected static final int EFFECT_POPPING = 0x020000;
+	
+	protected static final int EFFECT_FADE_IN = 0x040000;
+	
+	protected static final int EFFECT_LET_RING = 0x080000;
+	
+	protected static final int GRACE_FLAG_DEAD = 0x01;
+	
+	protected static final int GRACE_FLAG_ON_BEAT = 0x02;
+	
+	protected class TGBeatData {
+		private long currentStart;
+		private TGVoiceData[] voices;
+		
+		protected TGBeatData(TGMeasure measure){
+			this.init(measure);
+		}
+		
+		private void init(TGMeasure measure){
+			this.currentStart = measure.getStart();
+			this.voices = new TGVoiceData[TGBeat.MAX_VOICES];
+			for(int i = 0 ; i < this.voices.length ; i ++ ){
+				this.voices[i] = new TGVoiceData(measure);
+			}
+		}
+		
+		protected TGVoiceData getVoice(int index){
+			return this.voices[index];
+		}
+		
+		public long getCurrentStart(){
+			long minimumStart = -1;
+			for(int i = 0 ; i < this.voices.length ; i ++ ){
+				if( this.voices[i].getStart() > this.currentStart ){
+					if( minimumStart < 0 || this.voices[i].getStart() < minimumStart ){
+						minimumStart = this.voices[i].getStart();
+					}
+				}
+			}
+			if( minimumStart > this.currentStart ){
+				this.currentStart = minimumStart;
+			}
+			return this.currentStart;
+		}
+	}
+	
+	protected class TGVoiceData {
+		private long start;
+		private int velocity;
+		private int flags;
+		private TGDuration duration;
+		
+		protected TGVoiceData(TGMeasure measure){
+			this.init(measure);
+		}
+		
+		private void init(TGMeasure measure){
+			this.flags = 0;
+			this.setStart(measure.getStart());
+			this.setVelocity(TGVelocities.DEFAULT);
+			this.setDuration(new TGFactory().newDuration());
+		}
+		
+		public TGDuration getDuration() {
+			return this.duration;
+		}
+		
+		public void setDuration(TGDuration duration) {
+			this.duration = duration;
+		}
+		
+		public long getStart() {
+			return this.start;
+		}
+		
+		public void setStart(long start) {
+			this.start = start;
+		}
+		
+		public int getVelocity() {
+			return this.velocity;
+		}
+		
+		public void setVelocity(int velocity) {
+			this.velocity = velocity;
+		}
+		
+		public int getFlags() {
+			return this.flags;
+		}
+		
+		public void setFlags(int flags) {
+			this.flags = flags;
+		}
+	}
+}
diff --git a/TuxGuitar-converter/GNUmakefile b/TuxGuitar-converter/GNUmakefile
deleted file mode 100644
index c5d64f0..0000000
--- a/TuxGuitar-converter/GNUmakefile
+++ /dev/null
@@ -1,79 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-converter
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.gui.tools.custom.converter.TGConverterPlugin
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# resources
-LANGUAGE?=./share/lang
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-	-rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/*
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-converter/build.properties b/TuxGuitar-converter/build.properties
index dba8bef..cbf31b5 100644
--- a/TuxGuitar-converter/build.properties
+++ b/TuxGuitar-converter/build.properties
@@ -4,5 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
-path.swt=../TuxGuitar/lib/swt.jar
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.swt=../TuxGuitar/lib/swt.jar
\ No newline at end of file
diff --git a/TuxGuitar-converter/build.xml b/TuxGuitar-converter/build.xml
index 0fad218..417a2ac 100644
--- a/TuxGuitar-converter/build.xml
+++ b/TuxGuitar-converter/build.xml
@@ -14,11 +14,8 @@
 	<property name="build.src.path" value="src" />
 	<property name="build.path" value="build" />
 	
-	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.gui.tools.custom.converter.TGConverterPlugin" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -37,14 +34,10 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}${file.separator}lang" />
-		<copy todir="${build.path}${file.separator}lang">
-			<fileset dir="${build.share.path}${file.separator}lang"/>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
 		</copy>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
-		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   L I B R A R Y      |</echo>
 		<echo>+-----------------------------------------------+</echo>
diff --git a/TuxGuitar-converter/pom.xml b/TuxGuitar-converter/pom.xml
new file mode 100644
index 0000000..f30831c
--- /dev/null
+++ b/TuxGuitar-converter/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-converter</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-converter/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-converter/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..0680d52
--- /dev/null
+++ b/TuxGuitar-converter/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.app.tools.custom.converter.TGConverterPlugin
diff --git a/TuxGuitar-converter/share/META-INF/tuxguitar-converter.info b/TuxGuitar-converter/share/META-INF/tuxguitar-converter.info
new file mode 100644
index 0000000..e74a8b4
--- /dev/null
+++ b/TuxGuitar-converter/share/META-INF/tuxguitar-converter.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=BatchConverter
+plugin.description=Converts folder containing various tab formats into wanted file format.\nDepending on your loaded file format plugins, you can read and write.
+plugin.author=Nikola Kolarovic & Julian Casadesus
+plugin.version=1.0
diff --git a/TuxGuitar-converter/share/lang/messages_zh_TW.properties b/TuxGuitar-converter/share/lang/messages_zh_TW.properties
new file mode 100644
index 0000000..119655f
--- /dev/null
+++ b/TuxGuitar-converter/share/lang/messages_zh_TW.properties
@@ -0,0 +1,17 @@
+batch.converter=\u6574\u6279\u6a94\u6848\u8f49\u63db\u5668
+batch.converter.settings=\u8a2d\u5b9a
+batch.converter.input.folder=\u4f86\u6e90\u76ee\u9304
+batch.converter.input.folder.invalid=\u8acb\u9078\u64c7\u4e00\u500b\u6709\u6548\u7684\u4f86\u6e90\u76ee\u9304
+batch.converter.output.folder=\u8f49\u51fa\u76ee\u9304
+batch.converter.output.folder.invalid=\u8acb\u9078\u64c7\u4e00\u500b\u6709\u6548\u7684\u8f49\u51fa\u76ee\u9304
+batch.converter.output.format=\u8f49\u51fa\u7684\u6a94\u6848\u683c\u5f0f
+batch.converter.output.format.invalid=\u8acb\u9078\u64c7\u4e00\u500b\u6709\u6548\u7684\u8f49\u51fa\u6a94\u6848\u683c\u5f0f
+
+batch.converter.messages.converting=\u8f49\u6a94\u4e2d: {0} 
+batch.converter.messages.ok=[Ok]
+batch.converter.messages.failed=[\u5931\u6557]
+batch.converter.messages.file-not-found=\u6a94\u6848 "{0}" \u4e0d\u5b58\u5728.
+batch.converter.messages.exporter-not-found=\u627e\u4e0d\u5230\u5408\u9069\u7684\u8f49\u63db\u5668 ({0}) ?!
+batch.converter.messages.couldnt-write=\u7121\u6cd5\u5beb\u5165\u6a94\u6848 "{0}".
+batch.converter.messages.bad-file=\u7121\u6cd5\u57f7\u884c\u8f49\u6a94 "{0}". \u6a94\u6848\u53d7\u640d\u55ce?
+batch.converter.messages.out-of-memory=\u8a18\u61b6\u9ad4\u4e0d\u8db3!!! \u7121\u6cd5\u5beb\u5165 "{0}".
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverter.java b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverter.java
new file mode 100644
index 0000000..700963c
--- /dev/null
+++ b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverter.java
@@ -0,0 +1,208 @@
+package org.herac.tuxguitar.app.tools.custom.converter;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.util.Iterator;
+
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.io.base.TGLocalFileExporter;
+import org.herac.tuxguitar.io.base.TGLocalFileImporter;
+import org.herac.tuxguitar.io.base.TGOutputStreamBase;
+import org.herac.tuxguitar.io.base.TGRawImporter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class TGConverter {
+	// This value will delay the process something like 1 minute for 3000 files.
+	public static final int SLEEP_TIME = 20;
+	
+	public static final int FILE_OK = 250;
+	public static final int FILE_BAD = 403;
+	public static final int FILE_COULDNT_WRITE = 401;
+	public static final int FILE_NOT_FOUND = 404;
+	public static final int OUT_OF_MEMORY = 500;
+	public static final int EXPORTER_NOT_FOUND = 590;
+	public static final int UNKNOWN_ERROR = 666;
+	
+	private String sourceFolder;
+	private String destinationFolder;
+	private TGConverterFormat format;
+	private TGConverterListener listener;
+	private boolean cancelled;
+	
+	public TGConverter(String sourceFolder,String destinationFolder){
+		this.sourceFolder = sourceFolder;
+		this.destinationFolder = destinationFolder;
+	}
+	
+	public void convert(String fileName, String convertFileName) {
+		try {
+			this.getListener().notifyFileProcess(convertFileName);
+			
+			TGSongManager manager = new TGSongManager();
+			TGSong song = null;
+			try {
+				song = TGFileFormatManager.instance().getLoader().load(manager.getFactory(),new FileInputStream(fileName));
+			} catch (TGFileFormatException e) {
+				song = importSong(manager.getFactory(), fileName);
+			}
+			
+			if (song != null){
+				manager.setSong(song);
+				manager.autoCompleteSilences();
+				manager.orderBeats();
+				
+				new File(new File(convertFileName).getParent()).mkdirs();
+				
+				if( this.format != null && this.format.getExporter() instanceof TGOutputStreamBase ){
+					TGOutputStreamBase exporter = (TGOutputStreamBase) this.format.getExporter();
+					exporter.init(manager.getFactory(), new BufferedOutputStream(new FileOutputStream(convertFileName)));
+					exporter.writeSong(song);
+				}
+				else if( this.format != null && this.format.getExporter() instanceof TGLocalFileExporter ){
+					TGLocalFileExporter exporter = (TGLocalFileExporter) this.format.getExporter();
+					exporter.configure(true);
+					exporter.init(manager.getFactory(), new BufferedOutputStream(new FileOutputStream(convertFileName)));
+					exporter.exportSong(manager.getSong());
+				}
+				this.getListener().notifyFileResult(convertFileName,FILE_OK);
+			}
+			else{
+				this.getListener().notifyFileResult(fileName,FILE_BAD);
+			}
+		} catch (TGFileFormatException e) {
+			this.getListener().notifyFileResult(fileName,FILE_COULDNT_WRITE); 
+		} catch (FileNotFoundException ex) {
+			this.getListener().notifyFileResult(fileName,FILE_NOT_FOUND);
+		} catch (OutOfMemoryError e) {
+			this.getListener().notifyFileResult(convertFileName,OUT_OF_MEMORY);
+		} catch (Throwable throwable) {
+			this.getListener().notifyFileResult(convertFileName,UNKNOWN_ERROR);
+		}
+	}
+	
+	private String checkIfExists(String convertFileName, int level) {
+		if (new File(convertFileName).exists()) {
+			String tmpName = convertFileName;
+			String tmpExtension = "";
+			String tmpLevel = "(" + (level + 1) + ")";
+			String lastLevel = "(" + (level ) + ")";
+			
+			int index = convertFileName.lastIndexOf( (level == 0 ? "." : lastLevel + ".") );
+			if (index!=-1) {
+				tmpExtension = tmpName.substring(index + ( level == 0 ? 0 : lastLevel.length() ), tmpName.length());
+				tmpName = tmpName.substring(0, index);
+			}
+			return checkIfExists( (tmpName + tmpLevel + tmpExtension)  , (level + 1) );
+		}
+		return convertFileName;
+	}
+	
+	public void process() {
+		this.getListener().notifyStart();
+		this.process(new File(this.sourceFolder));
+		this.getListener().notifyFinish();
+	}
+	
+	private void process(File folder) {
+		if(!isCancelled()){
+			String[] fileNames = folder.list();
+			if(fileNames != null){
+				for (int i = 0; i < fileNames.length; i++) {
+					File file = new File(folder.getPath() + "/" + fileNames[i]);
+					if (file.isDirectory()) {
+						process(file);
+					} else if(!isCancelled()){
+						String fileName = file.getAbsolutePath();
+						String convertFileName = getConvertFileName(fileName);
+						convert(fileName, convertFileName);
+						
+						// Just release the thread some milliseconds
+						sleep();
+					}
+					fileNames[i] = null;
+				}
+			}
+		}
+	}
+	
+	private String getConvertFileName(String path) {
+		String convertPath = (this.destinationFolder + File.separator +path.substring(this.sourceFolder.length()));
+		int lastDot = convertPath.lastIndexOf(".");
+		if (lastDot!=-1) {
+			convertPath = convertPath.substring(0, lastDot) + this.format.getExtension();
+		}
+		return checkIfExists( new File(convertPath).getAbsolutePath() , 0 );
+	}
+	
+	private TGSong importSong(TGFactory factory, String filename) {
+		Iterator importers = TGFileFormatManager.instance().getImporters();
+		while (importers.hasNext() ) {
+			try {
+				TGRawImporter rawImporter = (TGRawImporter)importers.next();
+				if( rawImporter instanceof TGLocalFileImporter ){
+					TGLocalFileImporter currentImporter = (TGLocalFileImporter)rawImporter;
+					currentImporter.configure(true);
+					if (isSupportedExtension(filename,currentImporter)) {
+						InputStream input = new BufferedInputStream(new FileInputStream(filename));
+						currentImporter.init(factory, input);
+						return currentImporter.importSong();
+					}
+				}
+			} catch (Throwable throwable) {
+				throwable.printStackTrace();
+			}
+		}
+		return null;
+	}
+	
+	private boolean isSupportedExtension(String filename, TGLocalFileImporter currentImporter) {
+		try {
+			String extension = filename.substring(filename.lastIndexOf("."),filename.length());
+			extension="*"+extension.toLowerCase();
+			String[] formats = currentImporter.getFileFormat().getSupportedFormats().split(";");
+			for (int i=0; i<formats.length; i++)
+				if (formats[i].toLowerCase().equals(extension))
+					return true;
+		} catch (Exception ex) {
+			return false;
+		}
+		
+		return false;
+	}
+	
+	private void sleep(){
+		try {
+			Thread.sleep( SLEEP_TIME );
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void setFormat( TGConverterFormat format ) {
+		this.format = format;
+	}
+	
+	public TGConverterListener getListener() {
+		return this.listener;
+	}
+	
+	public void setListener(TGConverterListener listener) {
+		this.listener = listener;
+	}
+	
+	public boolean isCancelled() {
+		return this.cancelled;
+	}
+	
+	public void setCancelled(boolean cancelled) {
+		this.cancelled = cancelled;
+	}
+}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterDialog.java b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterDialog.java
new file mode 100644
index 0000000..66bea0a
--- /dev/null
+++ b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterDialog.java
@@ -0,0 +1,254 @@
+package org.herac.tuxguitar.app.tools.custom.converter;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.io.base.TGLocalFileExporter;
+import org.herac.tuxguitar.io.base.TGOutputStreamBase;
+import org.herac.tuxguitar.io.base.TGRawExporter;
+
+public class TGConverterDialog implements LanguageLoader,IconLoader{
+	
+	private static final int SHELL_WIDTH = 500;
+	
+	protected Shell dialog;
+	protected Group group;
+	protected Label outputFormatLabel;
+	protected Label outputFolderLabel;
+	protected Label inputFolderLabel;
+	protected Button inputFolderChooser;
+	protected Button outputFolderChooser;
+	protected Button buttonOK;
+	protected Button buttonCancel;
+	
+	protected List outputFormats;
+	
+	public TGConverterDialog() {
+		this.outputFormats = new ArrayList();
+	}
+	
+	public void show() {
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setMinimumSize(SHELL_WIDTH,SWT.DEFAULT);
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				TuxGuitar.instance().getIconManager().removeLoader( TGConverterDialog.this );
+				TuxGuitar.instance().getLanguageManager().removeLoader( TGConverterDialog.this );
+			}
+		});
+		
+		// Settings
+		this.group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
+		this.group.setLayout(new GridLayout());
+		this.group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite composite = new Composite(this.group,SWT.NONE);
+		composite.setLayout(new GridLayout(3,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.outputFormatLabel = new Label(composite,SWT.LEFT);
+		this.outputFormatLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
+		
+		final Combo outputFormat = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		outputFormat.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,false,2,1));
+		addFileFormats(outputFormat);
+		
+		this.inputFolderLabel = new Label(composite,SWT.LEFT);
+		this.inputFolderLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
+		
+		final Text inputFolder = new Text(composite,SWT.BORDER);
+		inputFolder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,true,false));
+		
+		this.inputFolderChooser = new Button(composite,SWT.PUSH);
+		this.inputFolderChooser.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				DirectoryDialog directoryDialog = new DirectoryDialog(TGConverterDialog.this.dialog);
+				String selection = directoryDialog.open();
+				if(selection != null){
+					inputFolder.setText(selection);
+				}
+			}
+		});
+		
+		this.outputFolderLabel = new Label(composite,SWT.LEFT);
+		this.outputFolderLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
+		
+		final Text outputFolder = new Text(composite,SWT.BORDER);
+		outputFolder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,true,false));
+		
+		this.outputFolderChooser = new Button(composite,SWT.PUSH);
+		this.outputFolderChooser.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				DirectoryDialog directoryDialog = new DirectoryDialog(TGConverterDialog.this.dialog);
+				String selection = directoryDialog.open();
+				if(selection != null){
+					outputFolder.setText(selection);
+				}
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(this.dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false));
+		
+		this.buttonOK = new Button(buttons, SWT.PUSH);
+		this.buttonOK.setLayoutData(getGridData(80,25));
+		this.buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				String inputFolderValue = inputFolder.getText();
+				String outputFolderValue = outputFolder.getText();
+				TGConverterFormat outputFormatValue = getFileFormat( outputFormat.getSelectionIndex() );
+				
+				if(inputFolderValue == null || inputFolderValue.trim().length() == 0){
+					MessageDialog.errorMessage(TGConverterDialog.this.dialog,TuxGuitar.getProperty("batch.converter.input.folder.invalid"));
+				}
+				else if(outputFolderValue == null || outputFolderValue.trim().length() == 0){
+					MessageDialog.errorMessage(TGConverterDialog.this.dialog,TuxGuitar.getProperty("batch.converter.output.folder.invalid"));
+				}
+				else if(outputFormatValue == null){
+					MessageDialog.errorMessage(TGConverterDialog.this.dialog,TuxGuitar.getProperty("batch.converter.output.format.invalid"));
+				}
+				else{
+					TGConverterProcess process = new TGConverterProcess();
+					process.start(inputFolderValue.trim(), outputFolderValue.trim(), outputFormatValue );
+					TGConverterDialog.this.dialog.dispose();
+				}
+			}
+		});
+		
+		this.buttonCancel = new Button(buttons, SWT.PUSH);
+		this.buttonCancel.setLayoutData(getGridData(80,25));
+		this.buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TGConverterDialog.this.dialog.dispose();
+			}
+		});
+		
+		this.dialog.setDefaultButton( this.buttonOK );
+		
+		this.loadIcons(false);
+		this.loadProperties(false);
+		
+		TuxGuitar.instance().getIconManager().addLoader( this );
+		TuxGuitar.instance().getLanguageManager().addLoader( this );
+		
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	public boolean isDisposed(){
+		return (this.dialog == null || this.dialog.isDisposed());
+	}
+	
+	private GridData getGridData(int minimumWidth, int minimumHeight){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = minimumWidth;
+		data.minimumHeight = minimumHeight;
+		return data;
+	}
+	
+	private void addFileFormats(Combo combo){
+		this.outputFormats.clear();
+		
+		Iterator outputStreams = TGFileFormatManager.instance().getOutputStreams();
+		while(outputStreams.hasNext()){
+			TGOutputStreamBase stream = (TGOutputStreamBase)outputStreams.next();
+			addFileFormats(combo, stream.getFileFormat() , stream );
+		}
+		
+		Iterator exporters = TGFileFormatManager.instance().getExporters();
+		while (exporters.hasNext()) {
+			TGRawExporter exporter = (TGRawExporter)exporters.next();
+			if( exporter instanceof TGLocalFileExporter ){
+				addFileFormats(combo, ((TGLocalFileExporter)exporter).getFileFormat() , exporter );
+			}
+		}
+		if(this.outputFormats.size() > 0 ){
+			combo.select( 0 );
+		}
+	}
+	
+	private void addFileFormats(Combo combo, TGFileFormat format, Object exporter ){
+		if(format.getSupportedFormats() != null){
+			String[] extensions = format.getSupportedFormats().split(TGFileFormat.EXTENSION_SEPARATOR);
+			if(extensions != null && extensions.length > 0){
+				for(int i = 0; i < extensions.length; i ++){
+					int dotIndex = extensions[i].indexOf(".");
+					if(dotIndex >= 0){
+						String exportName = format.getName();
+						if( exporter instanceof TGLocalFileExporter ){
+							exportName = ( (TGLocalFileExporter) exporter ).getExportName();
+						}
+						combo.add( exportName + " (" + extensions[i] + ")");
+						this.outputFormats.add(new TGConverterFormat( (extensions[i].substring( dotIndex )).trim() , exporter ));
+					}
+				}
+			}
+		}
+	}
+	
+	protected TGConverterFormat getFileFormat(int index){
+		if(index >= 0 && index < this.outputFormats.size()){
+			return (TGConverterFormat)this.outputFormats.get(index);
+		}
+		return null;
+	}
+	
+	public void loadProperties(){
+		this.loadProperties(true);
+	}
+	
+	public void loadProperties(boolean layout){
+		if(!isDisposed()){
+			this.dialog.setText(TuxGuitar.getProperty("batch.converter"));
+			this.group.setText(TuxGuitar.getProperty("batch.converter.settings"));
+			this.inputFolderLabel.setText(TuxGuitar.getProperty("batch.converter.input.folder"));
+			this.outputFolderLabel.setText(TuxGuitar.getProperty("batch.converter.output.folder"));
+			this.outputFormatLabel.setText(TuxGuitar.getProperty("batch.converter.output.format"));
+			this.buttonOK.setText(TuxGuitar.getProperty("ok"));
+			this.buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			if(layout){
+				this.dialog.layout(true, true);
+			}
+		}
+	}
+	
+	public void loadIcons() {
+		this.loadIcons(true);
+	}
+	
+	public void loadIcons(boolean layout){
+		if(!isDisposed()){
+			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+			this.inputFolderChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
+			this.outputFolderChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
+			if(layout){
+				this.dialog.layout(true, true);
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterFormat.java b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterFormat.java
new file mode 100644
index 0000000..4a5bff0
--- /dev/null
+++ b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterFormat.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.app.tools.custom.converter;
+
+public class TGConverterFormat {
+	
+	private String extension;
+	private Object exporter;
+	
+	public TGConverterFormat(String extension, Object exporter){
+		this.extension = extension;
+		this.exporter = exporter;
+	}
+	
+	public String getExtension() {
+		return this.extension;
+	}
+	
+	public Object getExporter() {
+		return this.exporter;
+	}
+}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterListener.java b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterListener.java
new file mode 100644
index 0000000..3d501c4
--- /dev/null
+++ b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterListener.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.app.tools.custom.converter;
+
+public interface TGConverterListener {
+	
+	public void notifyStart();
+	
+	public void notifyFinish();
+	
+	public void notifyFileProcess( String filename );
+	
+	public void notifyFileResult( String filename, int errorCode );
+	
+}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterPlugin.java b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterPlugin.java
new file mode 100644
index 0000000..b0d68a5
--- /dev/null
+++ b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterPlugin.java
@@ -0,0 +1,19 @@
+package org.herac.tuxguitar.app.tools.custom.converter;
+
+
+public class TGConverterPlugin extends org.herac.tuxguitar.app.tools.custom.TGToolItemPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-converter";
+	
+	protected void doAction() {
+		new TGConverterDialog().show();
+	}
+	
+	protected String getItemName() {
+		return "File format batch converter";
+	}
+	
+	public String getModuleId(){
+		return MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterProcess.java b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterProcess.java
new file mode 100644
index 0000000..5ae6a2c
--- /dev/null
+++ b/TuxGuitar-converter/src/org/herac/tuxguitar/app/tools/custom/converter/TGConverterProcess.java
@@ -0,0 +1,261 @@
+package org.herac.tuxguitar.app.tools.custom.converter;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.StyleRange;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.ShellAdapter;
+import org.eclipse.swt.events.ShellEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class TGConverterProcess implements TGConverterListener,LanguageLoader,IconLoader{
+	
+	private static final int SHELL_WIDTH = 650;
+	private static final int SHELL_HEIGHT = 350;
+	
+	protected static final String EOL = ("\n");
+	
+	protected static final Color COLOR_INFO  = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_BLUE);
+	protected static final Color COLOR_ERROR = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_RED );
+	
+	protected Shell dialog;
+	protected StyledText output;
+	protected Button buttonCancel;
+	protected Button buttonClose;
+	protected TGConverter converter;
+	protected boolean finished;
+	
+	public void start(final String initFolder,String destFolder, TGConverterFormat format ){
+		this.converter = new TGConverter(initFolder,destFolder);
+		this.converter.setFormat(format);
+		this.converter.setListener(this);
+		
+		this.showProcess();
+		
+		new Thread(new Runnable() {
+			public void run() throws TGException {
+				TGConverterProcess.this.converter.process();
+			}
+		}).start();
+	}
+	
+	protected void showProcess() {
+		this.finished = false;
+		
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.SHELL_TRIM);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setSize( SHELL_WIDTH , SHELL_HEIGHT );
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				TuxGuitar.instance().getIconManager().removeLoader( TGConverterProcess.this );
+				TuxGuitar.instance().getLanguageManager().removeLoader( TGConverterProcess.this );
+			}
+		});
+		this.dialog.addShellListener(new ShellAdapter() {
+			public void shellClosed(ShellEvent e) {
+				e.doit = TGConverterProcess.this.finished;
+			}
+		});
+		
+		Composite composite = new Composite(this.dialog,SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.output = new StyledText(composite,SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
+		this.output.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		this.output.setEditable(false);
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(this.dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false));
+		
+		this.buttonCancel = new Button(buttons, SWT.PUSH);
+		this.buttonCancel.setEnabled( false );
+		this.buttonCancel.setLayoutData(getButtonsData());
+		this.buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TGConverterProcess.this.converter.setCancelled( true );
+			}
+		});
+		
+		this.buttonClose = new Button(buttons, SWT.PUSH);
+		this.buttonClose.setEnabled( false );
+		this.buttonClose.setLayoutData(getButtonsData());
+		this.buttonClose.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TGConverterProcess.this.dialog.dispose();
+			}
+		});
+		
+		this.loadIcons(false);
+		this.loadProperties(false);
+		
+		TuxGuitar.instance().getIconManager().addLoader( this );
+		TuxGuitar.instance().getLanguageManager().addLoader( this );
+		
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER);
+	}
+	
+	private GridData getButtonsData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	public boolean isDisposed(){
+		return (this.dialog == null || this.dialog.isDisposed() );
+	}
+	
+	public void loadProperties(){
+		this.loadProperties(true);
+	}
+	
+	public void loadProperties(boolean layout){
+		if(!isDisposed()){
+			this.dialog.setText(TuxGuitar.getProperty("batch.converter"));
+			this.buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			this.buttonClose.setText(TuxGuitar.getProperty("close"));
+			if(layout){
+				this.dialog.layout(true, true);
+			}
+		}
+	}
+	
+	public void loadIcons() {
+		this.loadIcons(true);
+	}
+	
+	public void loadIcons(boolean layout){
+		if(!isDisposed()){
+			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+			if(layout){
+				this.dialog.layout(true, true);
+			}
+		}
+	}
+	
+	//------------------------------------------------------------------------------------------------//
+	//---TGConverterListener Implementation ----------------------------------------------------------//
+	//------------------------------------------------------------------------------------------------//
+	
+	public void notifyFileProcess(final String filename) {
+		if(!isDisposed() ){
+			try {
+				TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
+						if(!isDisposed() ){
+							TGConverterProcess.this.output.append(TuxGuitar.getProperty("batch.converter.messages.converting", new String[] {filename}));
+							TGConverterProcess.this.output.setSelection( TGConverterProcess.this.output.getCharCount() );
+						}
+					}
+				});
+			} catch (Throwable e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	public void notifyFileResult(final String filename, final int result) {
+		if(!isDisposed() ){
+			try {
+				TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
+						if(!isDisposed() ){
+							TGConverterProcess.this.appendLogMessage(result, filename);
+							TGConverterProcess.this.output.setSelection( TGConverterProcess.this.output.getCharCount() );
+						}
+					}
+				});
+			} catch (Throwable e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	public void notifyStart() {
+		if(!isDisposed() ){
+			try {
+				TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
+						if(!isDisposed() ){
+							TGConverterProcess.this.finished = false;
+							TGConverterProcess.this.buttonClose.setEnabled( TGConverterProcess.this.finished );
+							TGConverterProcess.this.buttonCancel.setEnabled( !TGConverterProcess.this.finished );
+							TGConverterProcess.this.output.setCursor(TGConverterProcess.this.dialog.getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
+						}
+					}
+				});
+			} catch (Throwable e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	public void notifyFinish() {
+		if(!isDisposed() ){
+			try {
+				TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
+						if(!isDisposed() ){
+							TGConverterProcess.this.finished = true;
+							TGConverterProcess.this.buttonClose.setEnabled( TGConverterProcess.this.finished );
+							TGConverterProcess.this.buttonCancel.setEnabled( !TGConverterProcess.this.finished );
+							TGConverterProcess.this.output.setCursor(TGConverterProcess.this.dialog.getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
+						}
+					}
+				});
+			} catch (Throwable e) {
+				e.printStackTrace();
+			}
+		}
+	}
+	
+	protected void appendLogMessage(int result, String fileName) {
+		String message = (TuxGuitar.getProperty( "batch.converter.messages." + (result == TGConverter.FILE_OK ? "ok" : "failed") ) + EOL);
+		
+		switch (result) {
+			case TGConverter.FILE_COULDNT_WRITE :
+				message += ( TuxGuitar.getProperty("batch.converter.messages.couldnt-write", new String[] {fileName}) + EOL );
+				break;
+			case TGConverter.FILE_BAD :
+				message += ( TuxGuitar.getProperty("batch.converter.messages.bad-file", new String[] {fileName}) + EOL );
+				break;
+			case TGConverter.FILE_NOT_FOUND :
+				message += ( TuxGuitar.getProperty("batch.converter.messages.file-not-found", new String[] {fileName}) + EOL );
+				break;
+			case TGConverter.OUT_OF_MEMORY :
+				message += ( TuxGuitar.getProperty("batch.converter.messages.out-of-memory", new String[] {fileName}) + EOL );
+				break;
+			case TGConverter.EXPORTER_NOT_FOUND :
+				message += ( TuxGuitar.getProperty("batch.converter.messages.exporter-not-found", new String[] {fileName}) + EOL );
+				break;
+			case TGConverter.UNKNOWN_ERROR :
+				message += ( TuxGuitar.getProperty("batch.converter.messages.unknown-error", new String[] {fileName}) + EOL );
+				break;
+		}
+		
+		StyleRange range = new StyleRange();
+		range.foreground = ( result == TGConverter.FILE_OK ? TGConverterProcess.COLOR_INFO : TGConverterProcess.COLOR_ERROR );
+		range.start = TGConverterProcess.this.output.getCharCount();
+		range.length = message.length();
+		
+		TGConverterProcess.this.output.append( message );
+		TGConverterProcess.this.output.setStyleRange(range);
+	}
+}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverter.java b/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverter.java
deleted file mode 100644
index fd347b8..0000000
--- a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverter.java
+++ /dev/null
@@ -1,208 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.converter;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.util.Iterator;
-
-import org.herac.tuxguitar.io.base.TGFileFormatException;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.io.base.TGLocalFileExporter;
-import org.herac.tuxguitar.io.base.TGLocalFileImporter;
-import org.herac.tuxguitar.io.base.TGOutputStreamBase;
-import org.herac.tuxguitar.io.base.TGRawImporter;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGSong;
-
-public class TGConverter {
-	// This value will delay the process something like 1 minute for 3000 files.
-	public static final int SLEEP_TIME = 20;
-	
-	public static final int FILE_OK = 250;
-	public static final int FILE_BAD = 403;
-	public static final int FILE_COULDNT_WRITE = 401;
-	public static final int FILE_NOT_FOUND = 404;
-	public static final int OUT_OF_MEMORY = 500;
-	public static final int EXPORTER_NOT_FOUND = 590;
-	public static final int UNKNOWN_ERROR = 666;
-	
-	private String sourceFolder;
-	private String destinationFolder;
-	private TGConverterFormat format;
-	private TGConverterListener listener;
-	private boolean cancelled;
-	
-	public TGConverter(String sourceFolder,String destinationFolder){
-		this.sourceFolder = sourceFolder;
-		this.destinationFolder = destinationFolder;
-	}
-	
-	public void convert(String fileName, String convertFileName) {
-		try {
-			this.getListener().notifyFileProcess(convertFileName);
-			
-			TGSongManager manager = new TGSongManager();
-			TGSong song = null;
-			try {
-				song = TGFileFormatManager.instance().getLoader().load(manager.getFactory(),new FileInputStream(fileName));
-			} catch (TGFileFormatException e) {
-				song = importSong(manager.getFactory(), fileName);
-			}
-			
-			if (song != null){
-				manager.setSong(song);
-				manager.autoCompleteSilences();
-				manager.orderBeats();
-				
-				new File(new File(convertFileName).getParent()).mkdirs();
-				
-				if( this.format != null && this.format.getExporter() instanceof TGOutputStreamBase ){
-					TGOutputStreamBase exporter = (TGOutputStreamBase) this.format.getExporter();
-					exporter.init(manager.getFactory(), new BufferedOutputStream(new FileOutputStream(convertFileName)));
-					exporter.writeSong(song);
-				}
-				else if( this.format != null && this.format.getExporter() instanceof TGLocalFileExporter ){
-					TGLocalFileExporter exporter = (TGLocalFileExporter) this.format.getExporter();
-					exporter.configure(true);
-					exporter.init(manager.getFactory(), new BufferedOutputStream(new FileOutputStream(convertFileName)));
-					exporter.exportSong(manager.getSong());
-				}
-				this.getListener().notifyFileResult(convertFileName,FILE_OK);
-			}
-			else{
-				this.getListener().notifyFileResult(fileName,FILE_BAD);
-			}
-		} catch (TGFileFormatException e) {
-			this.getListener().notifyFileResult(fileName,FILE_COULDNT_WRITE); 
-		} catch (FileNotFoundException ex) {
-			this.getListener().notifyFileResult(fileName,FILE_NOT_FOUND);
-		} catch (OutOfMemoryError e) {
-			this.getListener().notifyFileResult(convertFileName,OUT_OF_MEMORY);
-		} catch (Throwable throwable) {
-			this.getListener().notifyFileResult(convertFileName,UNKNOWN_ERROR);
-		}
-	}
-	
-	private String checkIfExists(String convertFileName, int level) {
-		if (new File(convertFileName).exists()) {
-			String tmpName = convertFileName;
-			String tmpExtension = "";
-			String tmpLevel = "(" + (level + 1) + ")";
-			String lastLevel = "(" + (level ) + ")";
-			
-			int index = convertFileName.lastIndexOf( (level == 0 ? "." : lastLevel + ".") );
-			if (index!=-1) {
-				tmpExtension = tmpName.substring(index + ( level == 0 ? 0 : lastLevel.length() ), tmpName.length());
-				tmpName = tmpName.substring(0, index);
-			}
-			return checkIfExists( (tmpName + tmpLevel + tmpExtension)  , (level + 1) );
-		}
-		return convertFileName;
-	}
-	
-	public void process() {
-		this.getListener().notifyStart();
-		this.process(new File(this.sourceFolder));
-		this.getListener().notifyFinish();
-	}
-	
-	private void process(File folder) {
-		if(!isCancelled()){
-			String[] fileNames = folder.list();
-			if(fileNames != null){
-				for (int i = 0; i < fileNames.length; i++) {
-					File file = new File(folder.getPath() + "/" + fileNames[i]);
-					if (file.isDirectory()) {
-						process(file);
-					} else if(!isCancelled()){
-						String fileName = file.getAbsolutePath();
-						String convertFileName = getConvertFileName(fileName);
-						convert(fileName, convertFileName);
-						
-						// Just release the thread some milliseconds
-						sleep();
-					}
-					fileNames[i] = null;
-				}
-			}
-		}
-	}
-	
-	private String getConvertFileName(String path) {
-		String convertPath = (this.destinationFolder + File.separator +path.substring(this.sourceFolder.length()));
-		int lastDot = convertPath.lastIndexOf(".");
-		if (lastDot!=-1) {
-			convertPath = convertPath.substring(0, lastDot) + this.format.getExtension();
-		}
-		return checkIfExists( new File(convertPath).getAbsolutePath() , 0 );
-	}
-	
-	private TGSong importSong(TGFactory factory, String filename) {
-		Iterator importers = TGFileFormatManager.instance().getImporters();
-		while (importers.hasNext() ) {
-			try {
-				TGRawImporter rawImporter = (TGRawImporter)importers.next();
-				if( rawImporter instanceof TGLocalFileImporter ){
-					TGLocalFileImporter currentImporter = (TGLocalFileImporter)rawImporter;
-					currentImporter.configure(true);
-					if (isSupportedExtension(filename,currentImporter)) {
-						InputStream input = new BufferedInputStream(new FileInputStream(filename));
-						currentImporter.init(factory, input);
-						return currentImporter.importSong();
-					}
-				}
-			} catch (Throwable throwable) {
-				throwable.printStackTrace();
-			}
-		}
-		return null;
-	}
-	
-	private boolean isSupportedExtension(String filename, TGLocalFileImporter currentImporter) {
-		try {
-			String extension = filename.substring(filename.lastIndexOf("."),filename.length());
-			extension="*"+extension.toLowerCase();
-			String[] formats = currentImporter.getFileFormat().getSupportedFormats().split(";");
-			for (int i=0; i<formats.length; i++)
-				if (formats[i].toLowerCase().equals(extension))
-					return true;
-		} catch (Exception ex) {
-			return false;
-		}
-		
-		return false;
-	}
-	
-	private void sleep(){
-		try {
-			Thread.sleep( SLEEP_TIME );
-		} catch (Throwable throwable) {
-			throwable.printStackTrace();
-		}
-	}
-	
-	public void setFormat( TGConverterFormat format ) {
-		this.format = format;
-	}
-	
-	public TGConverterListener getListener() {
-		return this.listener;
-	}
-	
-	public void setListener(TGConverterListener listener) {
-		this.listener = listener;
-	}
-	
-	public boolean isCancelled() {
-		return this.cancelled;
-	}
-	
-	public void setCancelled(boolean cancelled) {
-		this.cancelled = cancelled;
-	}
-}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterDialog.java b/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterDialog.java
deleted file mode 100644
index e1d9e7b..0000000
--- a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterDialog.java
+++ /dev/null
@@ -1,254 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.converter;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.io.base.TGFileFormat;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.io.base.TGLocalFileExporter;
-import org.herac.tuxguitar.io.base.TGOutputStreamBase;
-import org.herac.tuxguitar.io.base.TGRawExporter;
-
-public class TGConverterDialog implements LanguageLoader,IconLoader{
-	
-	private static final int SHELL_WIDTH = 500;
-	
-	protected Shell dialog;
-	protected Group group;
-	protected Label outputFormatLabel;
-	protected Label outputFolderLabel;
-	protected Label inputFolderLabel;
-	protected Button inputFolderChooser;
-	protected Button outputFolderChooser;
-	protected Button buttonOK;
-	protected Button buttonCancel;
-	
-	protected List outputFormats;
-	
-	public TGConverterDialog() {
-		this.outputFormats = new ArrayList();
-	}
-	
-	public void show() {
-		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM);
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setMinimumSize(SHELL_WIDTH,SWT.DEFAULT);
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				TuxGuitar.instance().getIconManager().removeLoader( TGConverterDialog.this );
-				TuxGuitar.instance().getLanguageManager().removeLoader( TGConverterDialog.this );
-			}
-		});
-		
-		// Settings
-		this.group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
-		this.group.setLayout(new GridLayout());
-		this.group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Composite composite = new Composite(this.group,SWT.NONE);
-		composite.setLayout(new GridLayout(3,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.outputFormatLabel = new Label(composite,SWT.LEFT);
-		this.outputFormatLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
-		
-		final Combo outputFormat = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		outputFormat.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,false,2,1));
-		addFileFormats(outputFormat);
-		
-		this.inputFolderLabel = new Label(composite,SWT.LEFT);
-		this.inputFolderLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
-		
-		final Text inputFolder = new Text(composite,SWT.BORDER);
-		inputFolder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,true,false));
-		
-		this.inputFolderChooser = new Button(composite,SWT.PUSH);
-		this.inputFolderChooser.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				DirectoryDialog directoryDialog = new DirectoryDialog(TGConverterDialog.this.dialog);
-				String selection = directoryDialog.open();
-				if(selection != null){
-					inputFolder.setText(selection);
-				}
-			}
-		});
-		
-		this.outputFolderLabel = new Label(composite,SWT.LEFT);
-		this.outputFolderLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
-		
-		final Text outputFolder = new Text(composite,SWT.BORDER);
-		outputFolder.setLayoutData(new GridData(SWT.FILL, SWT.CENTER,true,false));
-		
-		this.outputFolderChooser = new Button(composite,SWT.PUSH);
-		this.outputFolderChooser.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				DirectoryDialog directoryDialog = new DirectoryDialog(TGConverterDialog.this.dialog);
-				String selection = directoryDialog.open();
-				if(selection != null){
-					outputFolder.setText(selection);
-				}
-			}
-		});
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(this.dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false));
-		
-		this.buttonOK = new Button(buttons, SWT.PUSH);
-		this.buttonOK.setLayoutData(getGridData(80,25));
-		this.buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				String inputFolderValue = inputFolder.getText();
-				String outputFolderValue = outputFolder.getText();
-				TGConverterFormat outputFormatValue = getFileFormat( outputFormat.getSelectionIndex() );
-				
-				if(inputFolderValue == null || inputFolderValue.trim().length() == 0){
-					MessageDialog.errorMessage(TGConverterDialog.this.dialog,TuxGuitar.getProperty("batch.converter.input.folder.invalid"));
-				}
-				else if(outputFolderValue == null || outputFolderValue.trim().length() == 0){
-					MessageDialog.errorMessage(TGConverterDialog.this.dialog,TuxGuitar.getProperty("batch.converter.output.folder.invalid"));
-				}
-				else if(outputFormat == null){
-					MessageDialog.errorMessage(TGConverterDialog.this.dialog,TuxGuitar.getProperty("batch.converter.output.format.invalid"));
-				}
-				else{
-					TGConverterProcess process = new TGConverterProcess();
-					process.start(inputFolderValue.trim(), outputFolderValue.trim(), outputFormatValue );
-					TGConverterDialog.this.dialog.dispose();
-				}
-			}
-		});
-		
-		this.buttonCancel = new Button(buttons, SWT.PUSH);
-		this.buttonCancel.setLayoutData(getGridData(80,25));
-		this.buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TGConverterDialog.this.dialog.dispose();
-			}
-		});
-		
-		this.dialog.setDefaultButton( this.buttonOK );
-		
-		this.loadIcons(false);
-		this.loadProperties(false);
-		
-		TuxGuitar.instance().getIconManager().addLoader( this );
-		TuxGuitar.instance().getLanguageManager().addLoader( this );
-		
-		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-	
-	public boolean isDisposed(){
-		return (this.dialog == null || this.dialog.isDisposed());
-	}
-	
-	private GridData getGridData(int minimumWidth, int minimumHeight){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = minimumWidth;
-		data.minimumHeight = minimumHeight;
-		return data;
-	}
-	
-	private void addFileFormats(Combo combo){
-		this.outputFormats.clear();
-		
-		Iterator outputStreams = TGFileFormatManager.instance().getOutputStreams();
-		while(outputStreams.hasNext()){
-			TGOutputStreamBase stream = (TGOutputStreamBase)outputStreams.next();
-			addFileFormats(combo, stream.getFileFormat() , stream );
-		}
-		
-		Iterator exporters = TGFileFormatManager.instance().getExporters();
-		while (exporters.hasNext()) {
-			TGRawExporter exporter = (TGRawExporter)exporters.next();
-			if( exporter instanceof TGLocalFileExporter ){
-				addFileFormats(combo, ((TGLocalFileExporter)exporter).getFileFormat() , exporter );
-			}
-		}
-		if(this.outputFormats.size() > 0 ){
-			combo.select( 0 );
-		}
-	}
-	
-	private void addFileFormats(Combo combo, TGFileFormat format, Object exporter ){
-		if(format.getSupportedFormats() != null){
-			String[] extensions = format.getSupportedFormats().split(TGFileFormat.EXTENSION_SEPARATOR);
-			if(extensions != null && extensions.length > 0){
-				for(int i = 0; i < extensions.length; i ++){
-					int dotIndex = extensions[i].indexOf(".");
-					if(dotIndex >= 0){
-						String exportName = format.getName();
-						if( exporter instanceof TGLocalFileExporter ){
-							exportName = ( (TGLocalFileExporter) exporter ).getExportName();
-						}
-						combo.add( exportName + " (" + extensions[i] + ")");
-						this.outputFormats.add(new TGConverterFormat( (extensions[i].substring( dotIndex )).trim() , exporter ));
-					}
-				}
-			}
-		}
-	}
-	
-	protected TGConverterFormat getFileFormat(int index){
-		if(index >= 0 && index < this.outputFormats.size()){
-			return (TGConverterFormat)this.outputFormats.get(index);
-		}
-		return null;
-	}
-	
-	public void loadProperties(){
-		this.loadProperties(true);
-	}
-	
-	public void loadProperties(boolean layout){
-		if(!isDisposed()){
-			this.dialog.setText(TuxGuitar.getProperty("batch.converter"));
-			this.group.setText(TuxGuitar.getProperty("batch.converter.settings"));
-			this.inputFolderLabel.setText(TuxGuitar.getProperty("batch.converter.input.folder"));
-			this.outputFolderLabel.setText(TuxGuitar.getProperty("batch.converter.output.folder"));
-			this.outputFormatLabel.setText(TuxGuitar.getProperty("batch.converter.output.format"));
-			this.buttonOK.setText(TuxGuitar.getProperty("ok"));
-			this.buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			if(layout){
-				this.dialog.layout(true, true);
-			}
-		}
-	}
-	
-	public void loadIcons() {
-		this.loadIcons(true);
-	}
-	
-	public void loadIcons(boolean layout){
-		if(!isDisposed()){
-			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-			this.inputFolderChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
-			this.outputFolderChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
-			if(layout){
-				this.dialog.layout(true, true);
-			}
-		}
-	}
-}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterFormat.java b/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterFormat.java
deleted file mode 100644
index e1c521a..0000000
--- a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterFormat.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.converter;
-
-public class TGConverterFormat {
-	
-	private String extension;
-	private Object exporter;
-	
-	public TGConverterFormat(String extension, Object exporter){
-		this.extension = extension;
-		this.exporter = exporter;
-	}
-	
-	public String getExtension() {
-		return this.extension;
-	}
-	
-	public Object getExporter() {
-		return this.exporter;
-	}
-}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterListener.java b/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterListener.java
deleted file mode 100644
index 3694c0c..0000000
--- a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterListener.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.converter;
-
-public interface TGConverterListener {
-	
-	public void notifyStart();
-	
-	public void notifyFinish();
-	
-	public void notifyFileProcess( String filename );
-	
-	public void notifyFileResult( String filename, int errorCode );
-	
-}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterPlugin.java b/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterPlugin.java
deleted file mode 100644
index cf34303..0000000
--- a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterPlugin.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.converter;
-
-public class TGConverterPlugin extends org.herac.tuxguitar.gui.system.plugins.base.TGToolItemPlugin {
-	
-	protected void doAction() {
-		new TGConverterDialog().show();
-	}
-	
-	protected String getItemName() {
-		return "File format batch converter";
-	}
-	
-	public String getName() {
-		return "BatchConverter";
-	}
-	
-	public String getAuthor() {
-		return "Nikola Kolarovic & Julian Casadesus";
-	}
-	
-	public String getDescription() {
-		return "Converts folder containing various tab formats into wanted file format.\n" +
-		       "Depending on your loaded file format plugins, you can read and write.";
-	}
-	
-	public String getVersion() {
-		return "1.0";
-	}
-}
diff --git a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterProcess.java b/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterProcess.java
deleted file mode 100644
index 9a05621..0000000
--- a/TuxGuitar-converter/src/org/herac/tuxguitar/gui/tools/custom/converter/TGConverterProcess.java
+++ /dev/null
@@ -1,260 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.converter;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.StyleRange;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.ShellAdapter;
-import org.eclipse.swt.events.ShellEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-public class TGConverterProcess implements TGConverterListener,LanguageLoader,IconLoader{
-	
-	private static final int SHELL_WIDTH = 650;
-	private static final int SHELL_HEIGHT = 350;
-	
-	protected static final String EOL = ("\n");
-	
-	protected static final Color COLOR_INFO  = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_BLUE);
-	protected static final Color COLOR_ERROR = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_RED );
-	
-	protected Shell dialog;
-	protected StyledText output;
-	protected Button buttonCancel;
-	protected Button buttonClose;
-	protected TGConverter converter;
-	protected boolean finished;
-	
-	public void start(final String initFolder,String destFolder, TGConverterFormat format ){
-		this.converter = new TGConverter(initFolder,destFolder);
-		this.converter.setFormat(format);
-		this.converter.setListener(this);
-		
-		this.showProcess();
-		
-		new Thread(new Runnable() {
-			public void run() {
-				TGConverterProcess.this.converter.process();
-			}
-		}).start();
-	}
-	
-	protected void showProcess() {
-		this.finished = false;
-		
-		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.SHELL_TRIM);
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setSize( SHELL_WIDTH , SHELL_HEIGHT );
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				TuxGuitar.instance().getIconManager().removeLoader( TGConverterProcess.this );
-				TuxGuitar.instance().getLanguageManager().removeLoader( TGConverterProcess.this );
-			}
-		});
-		this.dialog.addShellListener(new ShellAdapter() {
-			public void shellClosed(ShellEvent e) {
-				e.doit = TGConverterProcess.this.finished;
-			}
-		});
-		
-		Composite composite = new Composite(this.dialog,SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.output = new StyledText(composite,SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
-		this.output.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		this.output.setEditable(false);
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(this.dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false));
-		
-		this.buttonCancel = new Button(buttons, SWT.PUSH);
-		this.buttonCancel.setEnabled( false );
-		this.buttonCancel.setLayoutData(getButtonsData());
-		this.buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TGConverterProcess.this.converter.setCancelled( true );
-			}
-		});
-		
-		this.buttonClose = new Button(buttons, SWT.PUSH);
-		this.buttonClose.setEnabled( false );
-		this.buttonClose.setLayoutData(getButtonsData());
-		this.buttonClose.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TGConverterProcess.this.dialog.dispose();
-			}
-		});
-		
-		this.loadIcons(false);
-		this.loadProperties(false);
-		
-		TuxGuitar.instance().getIconManager().addLoader( this );
-		TuxGuitar.instance().getLanguageManager().addLoader( this );
-		
-		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER);
-	}
-	
-	private GridData getButtonsData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	public boolean isDisposed(){
-		return (this.dialog == null || this.dialog.isDisposed() );
-	}
-	
-	public void loadProperties(){
-		this.loadProperties(true);
-	}
-	
-	public void loadProperties(boolean layout){
-		if(!isDisposed()){
-			this.dialog.setText(TuxGuitar.getProperty("batch.converter"));
-			this.buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			this.buttonClose.setText(TuxGuitar.getProperty("close"));
-			if(layout){
-				this.dialog.layout(true, true);
-			}
-		}
-	}
-	
-	public void loadIcons() {
-		this.loadIcons(true);
-	}
-	
-	public void loadIcons(boolean layout){
-		if(!isDisposed()){
-			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-			if(layout){
-				this.dialog.layout(true, true);
-			}
-		}
-	}
-	
-	//------------------------------------------------------------------------------------------------//
-	//---TGConverterListener Implementation ----------------------------------------------------------//
-	//------------------------------------------------------------------------------------------------//
-	
-	public void notifyFileProcess(final String filename) {
-		if(!isDisposed() ){
-			try {
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-					public void run() {
-						if(!isDisposed() ){
-							TGConverterProcess.this.output.append(TuxGuitar.getProperty("batch.converter.messages.converting", new String[] {filename}));
-							TGConverterProcess.this.output.setSelection( TGConverterProcess.this.output.getCharCount() );
-						}
-					}
-				});
-			} catch (Throwable e) {
-				e.printStackTrace();
-			}
-		}
-	}
-	
-	public void notifyFileResult(final String filename, final int result) {
-		if(!isDisposed() ){
-			try {
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-					public void run() {
-						if(!isDisposed() ){
-							TGConverterProcess.this.appendLogMessage(result, filename);
-							TGConverterProcess.this.output.setSelection( TGConverterProcess.this.output.getCharCount() );
-						}
-					}
-				});
-			} catch (Throwable e) {
-				e.printStackTrace();
-			}
-		}
-	}
-	
-	public void notifyStart() {
-		if(!isDisposed() ){
-			try {
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-					public void run() {
-						if(!isDisposed() ){
-							TGConverterProcess.this.finished = false;
-							TGConverterProcess.this.buttonClose.setEnabled( TGConverterProcess.this.finished );
-							TGConverterProcess.this.buttonCancel.setEnabled( !TGConverterProcess.this.finished );
-							TGConverterProcess.this.output.setCursor(TGConverterProcess.this.dialog.getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
-						}
-					}
-				});
-			} catch (Throwable e) {
-				e.printStackTrace();
-			}
-		}
-	}
-	
-	public void notifyFinish() {
-		if(!isDisposed() ){
-			try {
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-					public void run() {
-						if(!isDisposed() ){
-							TGConverterProcess.this.finished = true;
-							TGConverterProcess.this.buttonClose.setEnabled( TGConverterProcess.this.finished );
-							TGConverterProcess.this.buttonCancel.setEnabled( !TGConverterProcess.this.finished );
-							TGConverterProcess.this.output.setCursor(TGConverterProcess.this.dialog.getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
-						}
-					}
-				});
-			} catch (Throwable e) {
-				e.printStackTrace();
-			}
-		}
-	}
-	
-	protected void appendLogMessage(int result, String fileName) {
-		String message = (TuxGuitar.getProperty( "batch.converter.messages." + (result == TGConverter.FILE_OK ? "ok" : "failed") ) + EOL);
-		
-		switch (result) {
-			case TGConverter.FILE_COULDNT_WRITE :
-				message += ( TuxGuitar.getProperty("batch.converter.messages.couldnt-write", new String[] {fileName}) + EOL );
-				break;
-			case TGConverter.FILE_BAD :
-				message += ( TuxGuitar.getProperty("batch.converter.messages.bad-file", new String[] {fileName}) + EOL );
-				break;
-			case TGConverter.FILE_NOT_FOUND :
-				message += ( TuxGuitar.getProperty("batch.converter.messages.file-not-found", new String[] {fileName}) + EOL );
-				break;
-			case TGConverter.OUT_OF_MEMORY :
-				message += ( TuxGuitar.getProperty("batch.converter.messages.out-of-memory", new String[] {fileName}) + EOL );
-				break;
-			case TGConverter.EXPORTER_NOT_FOUND :
-				message += ( TuxGuitar.getProperty("batch.converter.messages.exporter-not-found", new String[] {fileName}) + EOL );
-				break;
-			case TGConverter.UNKNOWN_ERROR :
-				message += ( TuxGuitar.getProperty("batch.converter.messages.unknown-error", new String[] {fileName}) + EOL );
-				break;
-		}
-		
-		StyleRange range = new StyleRange();
-		range.foreground = ( result == TGConverter.FILE_OK ? TGConverterProcess.COLOR_INFO : TGConverterProcess.COLOR_ERROR );
-		range.start = TGConverterProcess.this.output.getCharCount();
-		range.length = message.length();
-		
-		TGConverterProcess.this.output.append( message );
-		TGConverterProcess.this.output.setStyleRange(range);
-	}
-}
diff --git a/TuxGuitar-fluidsynth/GNUmakefile b/TuxGuitar-fluidsynth/GNUmakefile
deleted file mode 100644
index db6ac8e..0000000
--- a/TuxGuitar-fluidsynth/GNUmakefile
+++ /dev/null
@@ -1,94 +0,0 @@
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-fluidsynth
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_JNI?=lib$(PACKAGE)-jni.so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.player.impl.midiport.fluidsynth.MidiOutputPortProviderPlugin
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI)
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# resources
-LANGUAGE?=./share/lang
-
-# build paths
-JAVA_SOURCE_PATH?=./src/
-JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java")
-JAVA_OBJECTS?=$(PACKAGE).o
-JNI_SOURCE_PATH?=./jni/
-JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c")
-JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o)
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(JAVA_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) 
-
-CC=gcc
-CFLAGS=-fPIC -I $(shell $(GCJ) -print-file-name=include/)
-
-default: all
-
-all: objects library library_jni meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(JAVA_OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-library_jni: $(LIBRARY_JNI)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
-	-install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-	-rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/*
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-%.o: %.c
-	$(CC) $(CFLAGS) -c -o $(@F) $<
-
-$(PACKAGE).o: $(JAVA_SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(JAVA_OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-$(LIBRARY_JNI): $(JNI_OBJECTS)
-	$(GCJ) -shared -o $@ -lfluidsynth $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#------------------------------------------------------------------------------
diff --git a/TuxGuitar-fluidsynth/build.properties b/TuxGuitar-fluidsynth/build.properties
index dba8bef..94080dc 100644
--- a/TuxGuitar-fluidsynth/build.properties
+++ b/TuxGuitar-fluidsynth/build.properties
@@ -4,5 +4,7 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
 path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-fluidsynth/build.xml b/TuxGuitar-fluidsynth/build.xml
index b0e20ed..344d4a3 100644
--- a/TuxGuitar-fluidsynth/build.xml
+++ b/TuxGuitar-fluidsynth/build.xml
@@ -11,10 +11,9 @@
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-fluidsynth.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.player.impl.midiport.fluidsynth.MidiOutputPortProviderPlugin" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -39,14 +38,10 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}${file.separator}lang" />
-		<copy todir="${build.path}${file.separator}lang">
-			<fileset dir="${build.share.path}${file.separator}lang"/>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
 		</copy>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
-		
 		<echo>+----------------------------------------------------------------------+</echo>
 		<echo>|    P A C K A G I N G   T U X G U I T A R  -  F L U I D S Y N T H     |</echo>
 		<echo>+----------------------------------------------------------------------+</echo>
diff --git a/TuxGuitar-fluidsynth/jni/GNUmakefile b/TuxGuitar-fluidsynth/jni/GNUmakefile
index 81e00e8..e1f085b 100644
--- a/TuxGuitar-fluidsynth/jni/GNUmakefile
+++ b/TuxGuitar-fluidsynth/jni/GNUmakefile
@@ -1,13 +1,12 @@
-CFLAGS?=-I$(shell gcj -print-file-name=include/)
-CFLAGS+=-fPIC
+CFLAGS?=-I$(shell gcj -print-file-name=include/) -fPIC
 LDFLAGS?=
 LDLIBS?=-lfluidsynth
 LDPATH?=-L/usr/lib
-LIBRARY_PREFIX?=lib
 LIBRARY_NAME?=tuxguitar-fluidsynth-jni
-LIBRARY_EXTENSION?=.so
+LIBRARY_PREFIX?=lib
+LIBRARY_SUFFIX?=.so
 
-LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION)
+LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_SUFFIX)
 OBJECTS=org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth.o
 
 %.o: %.c
diff --git a/TuxGuitar-fluidsynth/jni/org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth.c b/TuxGuitar-fluidsynth/jni/org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth.c
index f8a4cba..f64b464 100644
--- a/TuxGuitar-fluidsynth/jni/org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth.c
+++ b/TuxGuitar-fluidsynth/jni/org_herac_tuxguitar_player_impl_midiport_fluidsynth_MidiSynth.c
@@ -369,7 +369,7 @@ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_player_impl_midiport_fluidsynth_
 	memcpy(&handle, &ptr, sizeof(handle));
 	if(handle != NULL && handle->settings != NULL){
 		const jbyte *jkey = (*env)->GetStringUTFChars(env, key, NULL);
-		fluid_settings_foreach_option_data* data = (fluid_settings_foreach_option_data *)malloc(sizeof(fluid_settings_foreach_option_data*));
+		fluid_settings_foreach_option_data* data = (fluid_settings_foreach_option_data *)malloc( sizeof(fluid_settings_foreach_option_data));
 		data->env = env;
 		data->options = options;
 		
diff --git a/TuxGuitar-fluidsynth/pom.xml b/TuxGuitar-fluidsynth/pom.xml
new file mode 100644
index 0000000..55588a5
--- /dev/null
+++ b/TuxGuitar-fluidsynth/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-fluidsynth</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-fluidsynth/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-fluidsynth/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..5af29e4
--- /dev/null
+++ b/TuxGuitar-fluidsynth/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,2 @@
+org.herac.tuxguitar.player.impl.midiport.fluidsynth.MidiOutputPortProviderPlugin
+org.herac.tuxguitar.player.impl.midiport.fluidsynth.MidiSettingsPlugin
diff --git a/TuxGuitar-fluidsynth/share/META-INF/tuxguitar-fluidsynth.info b/TuxGuitar-fluidsynth/share/META-INF/tuxguitar-fluidsynth.info
new file mode 100644
index 0000000..7acb33d
--- /dev/null
+++ b/TuxGuitar-fluidsynth/share/META-INF/tuxguitar-fluidsynth.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=FluidSynth output plugin
+plugin.description=FluidSynth output plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-fluidsynth/share/lang/messages.properties b/TuxGuitar-fluidsynth/share/lang/messages.properties
index a9d9ee9..24d838b 100644
--- a/TuxGuitar-fluidsynth/share/lang/messages.properties
+++ b/TuxGuitar-fluidsynth/share/lang/messages.properties
@@ -1,4 +1,4 @@
-fluidsynth.settings=Fluidsytnh Settings
+fluidsynth.settings=FluidSynth Settings
 
 fluidsynth.settings.audio=Audio
 fluidsynth.settings.audio.driver=Audio Driver
@@ -14,4 +14,4 @@ fluidsynth.settings.synth.reverb.active=Reverb Enabled
 fluidsynth.settings.synth.chorus.active=Chorus Enabled
 
 fluidsynth.settings.soundfonts=Soundfonts
-fluidsynth.settings.soundfonts.list=Available Soundfonts
\ No newline at end of file
+fluidsynth.settings.soundfonts.list=Available Soundfonts
diff --git a/TuxGuitar-fluidsynth/share/lang/messages_zh_TW.properties b/TuxGuitar-fluidsynth/share/lang/messages_zh_TW.properties
new file mode 100644
index 0000000..850c76c
--- /dev/null
+++ b/TuxGuitar-fluidsynth/share/lang/messages_zh_TW.properties
@@ -0,0 +1,17 @@
+fluidsynth.settings=Fluidsynth \u8a2d\u5b9a
+
+fluidsynth.settings.audio=\u8072\u97f3
+fluidsynth.settings.audio.driver=\u8072\u97f3\u9a45\u52d5\u7a0b\u5f0f
+fluidsynth.settings.audio.sample-format=\u53d6\u6a23\u683c\u5f0f
+fluidsynth.settings.audio.periods=\u7de9\u885d\u6578\u76ee
+fluidsynth.settings.audio.period-size=\u7de9\u885d\u5340\u5927\u5c0f
+
+fluidsynth.settings.synth=\u5408\u6210\u5668
+fluidsynth.settings.synth.gain=\u589e\u76ca
+fluidsynth.settings.synth.sample-rate=\u53d6\u6a23\u7387
+fluidsynth.settings.synth.polyphony=\u55ae\u97f3
+fluidsynth.settings.synth.reverb.active=\u555f\u7528Reverb
+fluidsynth.settings.synth.chorus.active=\u555f\u7528Chorus
+
+fluidsynth.settings.soundfonts=\u97f3\u578b\u6a94
+fluidsynth.settings.soundfonts.list=\u53ef\u7528\u7684\u97f3\u578b\u6a94
\ No newline at end of file
diff --git a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortImpl.java b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortImpl.java
index 6de8f67..606ad1c 100644
--- a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortImpl.java
+++ b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortImpl.java
@@ -2,10 +2,10 @@ package org.herac.tuxguitar.player.impl.midiport.fluidsynth;
 
 import java.io.File;
 
-import org.herac.tuxguitar.player.base.MidiOutputPort;
-import org.herac.tuxguitar.player.base.MidiReceiver;
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
 
-public class MidiOutputPortImpl implements MidiOutputPort{
+public class MidiOutputPortImpl extends GMOutputPort{
 	
 	private String key;
 	private String name;
@@ -33,7 +33,7 @@ public class MidiOutputPortImpl implements MidiOutputPort{
 		}
 	}
 	
-	public MidiReceiver getReceiver(){
+	public GMReceiver getReceiver(){
 		this.open();
 		return this.receiver;
 	}
diff --git a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortProviderPlugin.java b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortProviderPlugin.java
index c204227..bf5520e 100644
--- a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortProviderPlugin.java
+++ b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortProviderPlugin.java
@@ -1,11 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.fluidsynth;
 
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup;
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin;
 import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.plugin.TGMidiOutputPortProviderPlugin;
 
-public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin implements TGPluginSetup{
+public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin {
 	
 	private MidiOutputPortProviderImpl provider;
 	
@@ -13,27 +11,11 @@ public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin
 		return getProviderImpl();
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
+	public String getModuleId() {
+		return MidiSynthPlugin.MODULE_ID;
 	}
 	
-	public String getDescription() {
-		return "FluidSynth output plugin";
-	}
-	
-	public String getName() {
-		return "FluidSynth output plugin";
-	}
-	
-	public String getVersion() {
-		return "1.0";
-	}
-	
-	public void setupDialog(Shell parent) {
-		getProviderImpl().getSettings().configure(parent);
-	}
-	
-	private MidiOutputPortProviderImpl getProviderImpl() {
+	public MidiOutputPortProviderImpl getProviderImpl() {
 		if(this.provider == null){
 			this.provider = new MidiOutputPortProviderImpl();
 		}
diff --git a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortSettings.java b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortSettings.java
index 56971b3..7139e07 100644
--- a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortSettings.java
+++ b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiOutputPortSettings.java
@@ -24,8 +24,8 @@ import org.eclipse.swt.widgets.TabItem;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.TableItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
 
 public class MidiOutputPortSettings extends MidiSettings {
 	
diff --git a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiReceiverImpl.java b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiReceiverImpl.java
index b5377fc..45d5720 100644
--- a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiReceiverImpl.java
+++ b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiReceiverImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.fluidsynth;
 
+import org.herac.tuxguitar.gm.port.GMReceiver;
 import org.herac.tuxguitar.player.base.MidiControllers;
-import org.herac.tuxguitar.player.base.MidiReceiver;
 
-public class MidiReceiverImpl implements MidiReceiver{
+public class MidiReceiverImpl implements GMReceiver{
 	
 	private MidiSynth synth;
 	
diff --git a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettings.java b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettings.java
index 3f584e5..d6bd12b 100644
--- a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettings.java
+++ b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettings.java
@@ -3,8 +3,7 @@ package org.herac.tuxguitar.player.impl.midiport.fluidsynth;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
 
 public class MidiSettings {
 	
@@ -35,23 +34,22 @@ public class MidiSettings {
 	}
 	
 	public TGConfigManager getConfig(){
-		if(this.config == null){
-			this.config = new TGPluginConfigManager("tuxguitar-fluidsynth");
-			this.config.init();
+		if( this.config == null ){
+			this.config = new TGConfigManager("tuxguitar-fluidsynth");
 		}
 		return this.config;
 	}
 	
 	public double getDoubleValue( String property ){
-		return getConfig().getDoubleConfigValue(property, this.getSynth().getDoubleProperty( property ));
+		return getConfig().getDoubleValue(property, this.getSynth().getDoubleProperty( property ));
 	}
 	
 	public int getIntegerValue( String property ){
-		return getConfig().getIntConfigValue(property, this.getSynth().getIntegerProperty( property ));
+		return getConfig().getIntegerValue(property, this.getSynth().getIntegerProperty( property ));
 	}
 	
 	public String getStringValue( String property ){
-		return getConfig().getStringConfigValue(property, this.getSynth().getStringProperty( property ));
+		return getConfig().getStringValue(property, this.getSynth().getStringProperty( property ));
 	}
 	
 	public boolean getBooleanValue( String property ){
@@ -60,18 +58,18 @@ public class MidiSettings {
 	}
 	
 	public void setDoubleValue( String property , double value ){
-		getConfig().setProperty( property , value );
+		getConfig().setValue( property , value );
 	}
 	
 	public void setIntegerValue( String property , int value ){
-		getConfig().setProperty( property , value );
+		getConfig().setValue( property , value );
 	}
 		
 	public void setStringValue( String property , String value ){
 		if( value == null ){
-			getConfig().removeProperty( property );
+			getConfig().remove( property );
 		}else{
-			getConfig().setProperty( property , value );
+			getConfig().setValue( property , value );
 		}
 	}
 	
@@ -83,9 +81,9 @@ public class MidiSettings {
 		List ports = new ArrayList();
 		TGConfigManager config = getConfig();
 		
-		int count = config.getIntConfigValue("soundfont.count");
+		int count = config.getIntegerValue("soundfont.count");
 		for(int i = 0; i < count;i ++){
-			String path = config.getStringConfigValue("soundfont.path" + i);
+			String path = config.getStringValue("soundfont.path" + i);
 			if(path != null && path.length() > 0 ){
 				ports.add( path );
 			}
@@ -95,10 +93,10 @@ public class MidiSettings {
 	
 	public void setSoundfonts(List soundfonts){
 		TGConfigManager config = getConfig();
-		config.setProperty("soundfont.count", soundfonts.size() );
+		config.setValue("soundfont.count", soundfonts.size() );
 		for( int i = 0 ; i < soundfonts.size() ; i ++ ){
 			String path = (String)soundfonts.get( i );
-			config.setProperty("soundfont.path" + i, path );
+			config.setValue("soundfont.path" + i, path );
 		}
 	}
 	
diff --git a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettingsHandler.java b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettingsHandler.java
new file mode 100644
index 0000000..c25f333
--- /dev/null
+++ b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettingsHandler.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.player.impl.midiport.fluidsynth;
+
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+
+public class MidiSettingsHandler implements TGPluginSettingsHandler {
+	
+	private MidiSettingsPlugin midiSettingsPlugin;
+	
+	public MidiSettingsHandler(MidiSettingsPlugin midiSettingsPlugin){
+		this.midiSettingsPlugin = midiSettingsPlugin;
+	}
+	
+	public void openSettingsDialog(Shell parent) {
+		MidiOutputPortSettings midiSettings = this.midiSettingsPlugin.findMidiSettings();
+		if( midiSettings != null ){
+			midiSettings.configure(parent);
+		}
+	}
+}
diff --git a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettingsPlugin.java b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettingsPlugin.java
new file mode 100644
index 0000000..d4656a0
--- /dev/null
+++ b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSettingsPlugin.java
@@ -0,0 +1,35 @@
+package org.herac.tuxguitar.player.impl.midiport.fluidsynth;
+
+import java.util.List;
+
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsAdapter;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+import org.herac.tuxguitar.util.plugin.TGPluginManager;
+
+public class MidiSettingsPlugin extends TGPluginSettingsAdapter {
+
+	protected TGPluginSettingsHandler getHandler() throws TGPluginException {
+		return new MidiSettingsHandler(this);
+	}
+	
+	public String getModuleId() {
+		return MidiSynthPlugin.MODULE_ID;
+	}
+	
+	public MidiOutputPortSettings findMidiSettings(){
+		MidiOutputPortProviderPlugin plugin = findMidiOutputPortProviderPlugin();
+		if( plugin != null ){
+			return plugin.getProviderImpl().getSettings();
+		}
+		return null;
+	}
+	
+	private MidiOutputPortProviderPlugin findMidiOutputPortProviderPlugin(){
+		List pluginInstances = TGPluginManager.getInstance().getPluginInstances(MidiOutputPortProviderPlugin.class);
+		if( pluginInstances != null && !pluginInstances.isEmpty() ){
+			return ((MidiOutputPortProviderPlugin)pluginInstances.get(0));
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSynth.java b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSynth.java
index e8218d5..983f17f 100644
--- a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSynth.java
+++ b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSynth.java
@@ -169,7 +169,7 @@ public class MidiSynth {
 	public List getPropertyOptions( String key ){
 		List options = new ArrayList();
 		if(isInitialized()){
-			this.getPropertyOptions(instance, key, options);
+			this.getPropertyOptions(this.instance, key, options);
 		}
 		return options;
 	}
diff --git a/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSynthPlugin.java b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSynthPlugin.java
new file mode 100644
index 0000000..a5460f1
--- /dev/null
+++ b/TuxGuitar-fluidsynth/src/org/herac/tuxguitar/player/impl/midiport/fluidsynth/MidiSynthPlugin.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.player.impl.midiport.fluidsynth;
+
+public class MidiSynthPlugin {
+
+	public static final String MODULE_ID = "tuxguitar-fluidsynth";
+	
+}
diff --git a/TuxGuitar-gervill/build.properties b/TuxGuitar-gervill/build.properties
index d00d400..742ce20 100644
--- a/TuxGuitar-gervill/build.properties
+++ b/TuxGuitar-gervill/build.properties
@@ -4,6 +4,8 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
 path.gervill=../TuxGuitar/lib/gervill.jar
-path.swt=../TuxGuitar/lib/swt.jar
+path.swt=../TuxGuitar/lib/swt.jar
\ No newline at end of file
diff --git a/TuxGuitar-gervill/build.xml b/TuxGuitar-gervill/build.xml
index d383407..d0e9e17 100644
--- a/TuxGuitar-gervill/build.xml
+++ b/TuxGuitar-gervill/build.xml
@@ -7,13 +7,13 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-gervill.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.gervill.MidiToAudioPlugin" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.gervill}"/>
 		<pathelement location="${path.swt}"/>
@@ -33,8 +33,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
diff --git a/TuxGuitar-gervill/pom.xml b/TuxGuitar-gervill/pom.xml
new file mode 100644
index 0000000..1080fd1
--- /dev/null
+++ b/TuxGuitar-gervill/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-gervill</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-gervill/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-gervill/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..3976abc
--- /dev/null
+++ b/TuxGuitar-gervill/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.io.gervill.MidiToAudioPlugin
diff --git a/TuxGuitar-gervill/share/META-INF/tuxguitar-gervill.info b/TuxGuitar-gervill/share/META-INF/tuxguitar-gervill.info
new file mode 100644
index 0000000..2010d4e
--- /dev/null
+++ b/TuxGuitar-gervill/share/META-INF/tuxguitar-gervill.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Gervill Plugin
+plugin.description=The purpose of this plugin is to add gervill support to tuxguitar.\nThe current version of this plugin includes \"Export to Audio\" feature.\nSee more about Gervill: https://gervill.dev.java.net/\n\nThis plugin will only work if gervill synthesizer is installed in your JVM
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.1
diff --git a/TuxGuitar-gervill/share/lang/messages.properties b/TuxGuitar-gervill/share/lang/messages.properties
new file mode 100644
index 0000000..f86f3e1
--- /dev/null
+++ b/TuxGuitar-gervill/share/lang/messages.properties
@@ -0,0 +1,8 @@
+gervill.options=Options
+gervill.options.audio-format=Audio Format
+gervill.options.file-encoding=File Encoding
+gervill.options.file-type=File Type
+
+gervill.options.soundbank.tip=Soundbank Configuration
+gervill.options.soundbank.default=Use default soundbank
+gervill.options.soundbank.custom=Use custom soundbank (SF2 and DLS files)
diff --git a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiSequenceHandlerImpl.java b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiSequenceHandlerImpl.java
index 9c30df1..109df97 100644
--- a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiSequenceHandlerImpl.java
+++ b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiSequenceHandlerImpl.java
@@ -5,36 +5,61 @@ import java.util.List;
 
 import javax.sound.midi.MidiEvent;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
 import org.herac.tuxguitar.player.base.MidiSequenceHandler;
 import org.herac.tuxguitar.song.models.TGTimeSignature;
 
 public class MidiSequenceHandlerImpl extends MidiSequenceHandler{
 	
 	private List events;
+	private GMChannelRouter router;
 	
-	public MidiSequenceHandlerImpl(int tracks ){
+	public MidiSequenceHandlerImpl(int tracks, GMChannelRouter router){
 		super(tracks);
+		this.router = router;
 		this.events = new ArrayList();
 	}
 	
-	public void addControlChange(long tick,int track,int channel, int controller, int value) {
-		this.events.add(new MidiEvent(MidiMessageUtils.controlChange(channel, controller, value), tick ));
+	public void addNoteOff(long tick,int track,int channelId, int note, int velocity, int voice, boolean bendMode) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			this.events.add(new MidiEvent(MidiMessageUtils.noteOff(resolveChannel(gmChannel,bendMode), note, velocity), tick ));
+		}
 	}
 	
-	public void addNoteOff(long tick,int track,int channel, int note, int velocity) {
-		this.events.add(new MidiEvent(MidiMessageUtils.noteOff(channel, note, velocity), tick ));
+	public void addNoteOn(long tick,int track,int channelId, int note, int velocity, int voice, boolean bendMode) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			this.events.add(new MidiEvent(MidiMessageUtils.noteOn(resolveChannel(gmChannel,bendMode), note, velocity), tick ));
+		}
 	}
 	
-	public void addNoteOn(long tick,int track,int channel, int note, int velocity) {
-		this.events.add(new MidiEvent(MidiMessageUtils.noteOn(channel, note, velocity), tick ));
+	public void addPitchBend(long tick,int track,int channelId, int value, int voice, boolean bendMode) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			this.events.add(new MidiEvent(MidiMessageUtils.pitchBend(resolveChannel(gmChannel,bendMode), value), tick ));
+		}
 	}
 	
-	public void addPitchBend(long tick,int track,int channel, int value) {
-		this.events.add(new MidiEvent(MidiMessageUtils.pitchBend(channel, value), tick ));
+	public void addControlChange(long tick,int track,int channelId, int controller, int value) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			this.events.add(new MidiEvent(MidiMessageUtils.controlChange(gmChannel.getChannel1(), controller, value), tick ));
+			if( gmChannel.getChannel1() != gmChannel.getChannel2() ){
+				this.events.add(new MidiEvent(MidiMessageUtils.controlChange(gmChannel.getChannel2(), controller, value), tick ));
+			}
+		}
 	}
 	
-	public void addProgramChange(long tick,int track,int channel, int instrument) {
-		this.events.add(new MidiEvent(MidiMessageUtils.programChange(channel, instrument), tick ));
+	public void addProgramChange(long tick,int track,int channelId, int instrument) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			this.events.add(new MidiEvent(MidiMessageUtils.programChange(gmChannel.getChannel1(), instrument), tick ));
+			if( gmChannel.getChannel1() != gmChannel.getChannel2() ){
+				this.events.add(new MidiEvent(MidiMessageUtils.programChange(gmChannel.getChannel2(), instrument), tick ));
+			}
+		}
 	}
 	
 	public void addTempoInUSQ(long tick,int track,int usq) {
@@ -52,4 +77,8 @@ public class MidiSequenceHandlerImpl extends MidiSequenceHandler{
 	public List getEvents(){
 		return this.events;
 	}
+	
+	private int resolveChannel(GMChannelRoute gmChannel, boolean bendMode){
+		return (bendMode ? gmChannel.getChannel2() : gmChannel.getChannel1());
+	}
 }
diff --git a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioExporter.java b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioExporter.java
index 65633fd..343eeae 100644
--- a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioExporter.java
+++ b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioExporter.java
@@ -2,6 +2,8 @@ package org.herac.tuxguitar.io.gervill;
 
 import java.io.OutputStream;
 
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGLocalFileExporter;
@@ -41,15 +43,20 @@ public class MidiToAudioExporter implements TGLocalFileExporter{
 		this.stream = stream;
 	}
 	
-	public void exportSong(TGSong song) throws TGFileFormatException {
+	public void exportSong(TGSong tgSong) throws TGFileFormatException {
 		try{
 			if( this.stream != null ){
-				TGSongManager manager = new TGSongManager();
-				manager.setSong(song);
-				MidiSequenceParser parser = new MidiSequenceParser(manager,MidiSequenceParser.DEFAULT_EXPORT_FLAGS,100,0);
-				MidiSequenceHandlerImpl sequence = new MidiSequenceHandlerImpl( (song.countTracks() + 1) );
-				parser.parse(sequence);
-				MidiToAudioWriter.write(this.stream, sequence.getEvents(), this.settings );
+				TGSongManager tgSongManager = new TGSongManager();
+				tgSongManager.setSong(tgSong);
+				
+				GMChannelRouter gmChannelRouter = new GMChannelRouter();
+				GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(gmChannelRouter);
+				gmChannelRouterConfigurator.configureRouter(tgSong.getChannels());
+				
+				MidiSequenceParser midiSequenceParser = new MidiSequenceParser(tgSongManager,MidiSequenceParser.DEFAULT_EXPORT_FLAGS);
+				MidiSequenceHandlerImpl midiSequenceHandler = new MidiSequenceHandlerImpl((tgSong.countTracks() + 1), gmChannelRouter);
+				midiSequenceParser.parse(midiSequenceHandler);
+				MidiToAudioWriter.write(this.stream, midiSequenceHandler.getEvents(), this.settings );
 			}
 		}catch(Throwable throwable){
 			throw new TGFileFormatException( throwable.getMessage() , throwable );
diff --git a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioPlugin.java b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioPlugin.java
index 6f27bca..e4bd2f9 100644
--- a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioPlugin.java
+++ b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioPlugin.java
@@ -1,11 +1,13 @@
 package org.herac.tuxguitar.io.gervill;
 
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin;
 import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
 public class MidiToAudioPlugin extends TGExporterPlugin{
 	
+	public static final String MODULE_ID = "tuxguitar-gervill";
+	
 	private boolean available;
 	
 	public MidiToAudioPlugin(){
@@ -37,24 +39,7 @@ public class MidiToAudioPlugin extends TGExporterPlugin{
 		return null;
 	}
 	
-	public String getVersion() {
-		return "1.1";
-	}
-	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getName() {
-		return "Gervill Plugin";
-	}
-	
-	public String getDescription() {
-		String description = new String();
-		description += ("The purpose of this plugin is to add gervill support to tuxguitar.\n");
-		description += ("The current version of this plugin includes \"Export to Audio\" feature.\n");
-		description += ("See more about Gervill: https://gervill.dev.java.net/\n\n");
-		description += ("This plugin will only work if gervill synthesizer is installed in your JVM");
-		return description;
+	public String getModuleId(){
+		return MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettings.java b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettings.java
index 7bda278..d366f84 100644
--- a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettings.java
+++ b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettings.java
@@ -5,11 +5,13 @@ import javax.sound.sampled.AudioFormat;
 
 public class MidiToAudioSettings {
 	
+	public static final String DEFAULT_SOUNDBANK_PATH = null;
 	public static final AudioFormat DEFAULT_FORMAT = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100, 16, 2, 4, 44100, false);
 	public static final AudioFileFormat.Type DEFAULT_TYPE = AudioFileFormat.Type.WAVE;
 	
 	private AudioFileFormat.Type type;
 	private AudioFormat format;
+	private String soundbankPath;
 	
 	public AudioFileFormat.Type getType() {
 		return this.type;
@@ -27,8 +29,17 @@ public class MidiToAudioSettings {
 		this.format = format;
 	}
 	
+	public String getSoundbankPath() {
+		return this.soundbankPath;
+	}
+	
+	public void setSoundbankPath(String soundbankPath) {
+		this.soundbankPath = soundbankPath;
+	}
+	
 	public void setDefaults(){
-		this.setType( DEFAULT_TYPE );
-		this.setFormat( DEFAULT_FORMAT );
+		this.setType(DEFAULT_TYPE);
+		this.setFormat(DEFAULT_FORMAT);
+		this.setSoundbankPath(DEFAULT_SOUNDBANK_PATH);
 	}
 }
diff --git a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettingsDialog.java b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettingsDialog.java
index f3679f4..a487c25 100644
--- a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettingsDialog.java
+++ b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSettingsDialog.java
@@ -11,6 +11,7 @@ import javax.sound.sampled.AudioSystem;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.widgets.Button;
@@ -19,8 +20,11 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.FileChooser;
+import org.herac.tuxguitar.io.base.TGFileFormat;
 
 public class MidiToAudioSettingsDialog {
 	
@@ -34,30 +38,30 @@ public class MidiToAudioSettingsDialog {
 		this.success = false;
 		
 		final List formats = getAvailableFormats();
+		final List soundbankFormats = getSupportedSoundbankFormats();
 		
 		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
 		dialog.setLayout(new GridLayout());
-		dialog.setText("Options");
+		dialog.setText(TuxGuitar.getProperty("gervill.options"));
 		
-		//------------------TRACK SELECTION------------------
-		Group trackGroup = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		trackGroup.setLayout(new GridLayout(2,false));
-		trackGroup.setLayoutData(getGroupData());
-		trackGroup.setText("Audio Format");
+		//------------------AUDIO FORMAT------------------
+		Group audioFormatGroup = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		audioFormatGroup.setLayout(new GridLayout(2,false));
+		audioFormatGroup.setLayoutData(getGroupData());
+		audioFormatGroup.setText(TuxGuitar.getProperty("gervill.options.audio-format"));
 		
-		//------------------TRANSPOSE----------------------
-		Label eLabel = new Label(trackGroup, SWT.NONE);
-		eLabel.setText("File Encoding:");
+		Label eLabel = new Label(audioFormatGroup, SWT.NONE);
+		eLabel.setText(TuxGuitar.getProperty("gervill.options.file-encoding") + ":");
 		eLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
 		
-		final Combo eCombo = new Combo(trackGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		final Combo eCombo = new Combo(audioFormatGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
 		eCombo.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
 		
-		Label tLabel = new Label(trackGroup, SWT.NONE);
-		tLabel.setText("File Type:");
+		Label tLabel = new Label(audioFormatGroup, SWT.NONE);
+		tLabel.setText(TuxGuitar.getProperty("gervill.options.file-type") + ":");
 		tLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
 		
-		final Combo tCombo = new Combo(trackGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		final Combo tCombo = new Combo(audioFormatGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
 		tCombo.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
 		
 		int eSelectionIndex = 0;
@@ -80,6 +84,49 @@ public class MidiToAudioSettingsDialog {
 			}
 		});
 		
+		//------------------SOUNDBANK-----------------------
+		Group soundbankGroup = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		soundbankGroup.setLayout(new GridLayout());
+		soundbankGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		soundbankGroup.setText(TuxGuitar.getProperty("gervill.options.soundbank.tip"));
+		
+		final Button sbDefault = new Button(soundbankGroup,SWT.RADIO);
+		sbDefault.setText(TuxGuitar.getProperty("gervill.options.soundbank.default"));
+		sbDefault.setSelection( (settings.getSoundbankPath() == null) );
+		
+		final Button sbCustom = new Button(soundbankGroup,SWT.RADIO);
+		sbCustom.setText(TuxGuitar.getProperty("gervill.options.soundbank.custom"));
+		sbCustom.setSelection( (settings.getSoundbankPath() != null) );
+		
+		Composite chooser = new Composite(soundbankGroup,SWT.NONE);
+		chooser.setLayout(new GridLayout(2,false));
+		
+		final Text sbCustomPath = new Text(chooser,SWT.BORDER);
+		sbCustomPath.setLayoutData(new GridData(350,SWT.DEFAULT));
+		sbCustomPath.setText( (settings.getSoundbankPath() == null ? new String() : settings.getSoundbankPath())  );
+		sbCustomPath.setEnabled( (settings.getSoundbankPath() != null) );
+		
+		final Button sbCustomChooser = new Button(chooser,SWT.PUSH);
+		sbCustomChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
+		sbCustomChooser.setEnabled( (settings.getSoundbankPath() != null) );
+		sbCustomChooser.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				String fileName = FileChooser.instance().open(dialog, soundbankFormats);
+				if(fileName != null){
+					sbCustomPath.setText(fileName);
+				}
+			}
+		});
+		
+		SelectionListener sbRadioSelectionListener = new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				sbCustomPath.setEnabled(sbCustom.getSelection());
+				sbCustomChooser.setEnabled(sbCustom.getSelection());
+			}
+		};
+		sbDefault.addSelectionListener(sbRadioSelectionListener);
+		sbCustom.addSelectionListener(sbRadioSelectionListener);
+		
 		//------------------BUTTONS--------------------------
 		Composite buttons = new Composite(dialog, SWT.NONE);
 		buttons.setLayout(new GridLayout(2,false));
@@ -94,6 +141,7 @@ public class MidiToAudioSettingsDialog {
 		buttonOK.setLayoutData(data);
 		buttonOK.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent arg0) {
+				String soundbankPath = (sbCustom.getSelection() ? sbCustomPath.getText() : null);
 				int tIndex = tCombo.getSelectionIndex();
 				int eIndex = eCombo.getSelectionIndex();
 				if( eIndex >= 0 && eIndex < formats.size() ){
@@ -101,6 +149,7 @@ public class MidiToAudioSettingsDialog {
 					if( tIndex >= 0 && tIndex < format.getTypes().length ){
 						settings.setType( format.getTypes()[tIndex] );
 						settings.setFormat( format.getFormat() );
+						settings.setSoundbankPath( soundbankPath );
 						MidiToAudioSettingsDialog.this.success = true;
 					}
 				}
@@ -163,6 +212,13 @@ public class MidiToAudioSettingsDialog {
 		return list;
 	}
 	
+	private List getSupportedSoundbankFormats(){
+		List list = new ArrayList();
+		list.add(new TGFileFormat("SF2 files","*.sf2"));
+		list.add(new TGFileFormat("DLS files","*.dls"));
+		return list;
+	}
+	
 	public boolean isSameEncoding( AudioFormat f1, AudioFormat f2 ){
 		if( f1 == null || f2 == null || f1.getEncoding() == null || f2.getEncoding() == null ){
 			return false;
diff --git a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSynth.java b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSynth.java
index f9f1de2..37fd519 100644
--- a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSynth.java
+++ b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioSynth.java
@@ -1,13 +1,29 @@
 package org.herac.tuxguitar.io.gervill;
 
+import java.io.File;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.sound.midi.Instrument;
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.Patch;
 import javax.sound.midi.Receiver;
+import javax.sound.midi.Soundbank;
 import javax.sound.midi.Synthesizer;
 import javax.sound.sampled.AudioFormat;
 import javax.sound.sampled.AudioInputStream;
 
 public class MidiToAudioSynth {
 	
-	public static final AudioFormat	SRC_FORMAT = MidiToAudioSettings.DEFAULT_FORMAT;
+	private static final AudioFormat SRC_FORMAT = MidiToAudioSettings.DEFAULT_FORMAT;
+	
+	private static final String MODEL_PATCH_CLASSNAME = "com.sun.media.sound.ModelPatch";
+	private static final String SYNTHESIZER_CLASSNAME = "com.sun.media.sound.SoftSynthesizer";
+	private static final String SYNTHESIZER_OPEN_STREAM_METHOD = "openStream";
+	private static final String SYNTHESIZER_LOAD_DEFAULT_SOUNDBANK_PARAM = "load default soundbank";
 	
 	private static MidiToAudioSynth instance;
 	
@@ -38,9 +54,9 @@ public class MidiToAudioSynth {
 	
 	public void openSynth() throws Throwable {
 		if( this.synthesizer == null || !this.synthesizer.isOpen() ){
-			this.synthesizer = new com.sun.media.sound.SoftSynthesizer();
+			this.synthesizer = createSynthesizer();
 			this.receiver = this.synthesizer.getReceiver();
-			this.stream = ((com.sun.media.sound.AudioSynthesizer)this.synthesizer).openStream(SRC_FORMAT, null);
+			this.stream = invokeOpenStream(this.synthesizer, SRC_FORMAT, getDefaultInfo());
 		}
 	}
 	
@@ -56,12 +72,71 @@ public class MidiToAudioSynth {
 		this.synthesizer = null;
 	}
 	
+	private Map getDefaultInfo(){
+		Map map = new HashMap();
+		map.put(SYNTHESIZER_LOAD_DEFAULT_SOUNDBANK_PARAM, new Boolean(false));
+		return map;
+	}
+	
+	public void loadSoundbank(List patchList, String soundbankPath) throws Throwable {
+		Soundbank soundbank = null;
+		if( soundbankPath == null || soundbankPath.length() == 0 ){
+			soundbank = this.synthesizer.getDefaultSoundbank();
+		} else{
+			soundbank = MidiSystem.getSoundbank(new File(soundbankPath));
+		}
+		
+		Iterator it = patchList.iterator();
+		while( it.hasNext() ){
+			Patch patch = (Patch)it.next();
+			
+			boolean percussion = (patch.getBank() == 128);
+			int bank = (percussion ? 0 : patch.getBank());
+			int program = patch.getProgram();
+			
+			Instrument instrument = soundbank.getInstrument(createModelPatch(bank, program, percussion));
+			if( instrument != null ){
+				this.synthesizer.loadInstrument(instrument);
+			}
+		}
+	}
+	
 	public boolean isAvailable(){
 		try {
-			Class.forName("com.sun.media.sound.SoftSynthesizer", false, getClass().getClassLoader() );
+			Class.forName(SYNTHESIZER_CLASSNAME, false, getClass().getClassLoader() );
 			return true;
 		} catch (Throwable throwable) {
 			return false;
 		}
 	}
+	
+	private AudioInputStream invokeOpenStream(Synthesizer synthesizer, AudioFormat audioFormat, Map map) throws Throwable {
+		Class[] methodSignature = new Class[]{AudioFormat.class,Map.class};
+		Object[] methodArguments = new Object[]{audioFormat, map};
+		
+		Class classInstance = synthesizer.getClass();
+		Method method = classInstance.getMethod(SYNTHESIZER_OPEN_STREAM_METHOD, methodSignature);
+		Object returnValue = method.invoke(synthesizer, methodArguments);
+		
+		return (AudioInputStream)returnValue;
+	}
+	
+	private Synthesizer createSynthesizer() throws Throwable {
+		ClassLoader classLoader = getClass().getClassLoader();
+		Class classInstance = classLoader.loadClass(SYNTHESIZER_CLASSNAME);
+		Object objectInstance = classInstance.getConstructor(new Class[0]).newInstance(new Object[0]);
+		
+		return (Synthesizer) objectInstance;
+	}
+	
+	private Patch createModelPatch(int bank, int program, boolean percussion) throws Throwable {
+		Class[] constructorSignature = new Class[]{int.class, int.class, boolean.class};
+		Object[] constructorArguments = new Object[]{new Integer(bank), new Integer(program), new Boolean(percussion)};
+		
+		ClassLoader classLoader = getClass().getClassLoader();
+		Class classInstance = classLoader.loadClass(MODEL_PATCH_CLASSNAME);
+		Object objectInstance = classInstance.getConstructor(constructorSignature).newInstance(constructorArguments);
+		
+		return (Patch) objectInstance;
+	}
 }
diff --git a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioWriter.java b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioWriter.java
index 6518bd4..c52315e 100644
--- a/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioWriter.java
+++ b/TuxGuitar-gervill/src/org/herac/tuxguitar/io/gervill/MidiToAudioWriter.java
@@ -1,6 +1,7 @@
 package org.herac.tuxguitar.io.gervill;
 
 import java.io.OutputStream;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.Iterator;
@@ -9,16 +10,20 @@ import java.util.List;
 import javax.sound.midi.MetaMessage;
 import javax.sound.midi.MidiEvent;
 import javax.sound.midi.MidiMessage;
+import javax.sound.midi.Patch;
 import javax.sound.midi.Receiver;
+import javax.sound.midi.ShortMessage;
 import javax.sound.sampled.AudioInputStream;
 import javax.sound.sampled.AudioSystem;
 
+import org.herac.tuxguitar.player.base.MidiControllers;
 import org.herac.tuxguitar.song.models.TGDuration;
 
 public class MidiToAudioWriter {
 	
 	public static void write(OutputStream out, List events, MidiToAudioSettings settings) throws Throwable {
 		MidiToAudioSynth.instance().openSynth();
+		MidiToAudioSynth.instance().loadSoundbank(getPatchs(events), settings.getSoundbankPath());
 		
 		int usqTempo = 60000000 / 120;
 		long previousTick = 0;
@@ -74,4 +79,54 @@ public class MidiToAudioWriter {
 			}
 		});
 	}
+	
+	private static List getPatchs(List events){
+		Patch[] channels = new Patch[16];
+		
+		Iterator it = events.iterator();
+		while(it.hasNext()){
+			MidiEvent event = (MidiEvent)it.next();
+			MidiMessage msg = event.getMessage();
+			if( msg instanceof ShortMessage ){
+				ShortMessage shortMessage = (ShortMessage)msg;
+				
+				int channel = shortMessage.getChannel();
+				if( channel >= 0 && channel < channels.length ){
+					int command = shortMessage.getCommand();
+					int data1 = shortMessage.getData1();
+					int data2 = shortMessage.getData2();
+					int bank = (command == ShortMessage.CONTROL_CHANGE && data1 == MidiControllers.BANK_SELECT ? data2 : -1);
+					int program = (command == ShortMessage.PROGRAM_CHANGE ? data1 : -1);
+					if( bank >= 0 || program >= 0 ){
+						if( bank < 0 ){
+							bank = (channels[channel] != null ? channels[channel].getBank() : 0);
+						}
+						if( program < 0 ){
+							program = (channels[channel] != null ? channels[channel].getProgram() : 0);
+						}
+						channels[channel] = new Patch(bank, program);
+					}
+				}
+			}
+		}
+		List patchs = new ArrayList();
+		for( int i = 0 ; i < channels.length ; i ++ ){
+			if( channels[i] != null ){
+				boolean patchExists = false;
+				Iterator patchIt = patchs.iterator();
+				while( patchIt.hasNext() ){
+					Patch patch = (Patch) patchIt.next();
+					if( patch.getBank() == channels[i].getBank() && patch.getProgram() == channels[i].getProgram() ){
+						patchExists = true;
+					}
+				}
+				if(!patchExists ){
+					patchs.add(channels[i]);
+				}
+			}
+		}
+		patchs.add(new Patch(128, 0));
+		
+		return patchs;
+	}
 }
diff --git a/TuxGuitar-gm-settings/build.properties b/TuxGuitar-gm-settings/build.properties
new file mode 100644
index 0000000..b325829
--- /dev/null
+++ b/TuxGuitar-gm-settings/build.properties
@@ -0,0 +1,10 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
+
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
+path.swt=../TuxGuitar/lib/swt.jar
\ No newline at end of file
diff --git a/TuxGuitar-gm-settings/build.xml b/TuxGuitar-gm-settings/build.xml
new file mode 100644
index 0000000..d8ce2d9
--- /dev/null
+++ b/TuxGuitar-gm-settings/build.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-gm-settings" basedir="." default="all">
+	<description>
+		TuxGuitar GM Settings
+	</description>
+	
+	<property file="build.properties" />
+	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
+	<property name="build.path" value="build" />
+	<property name="build.jar" value="tuxguitar-gm-settings.jar" />
+	
+	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
+		<pathelement location="${path.tuxguitar}"/>
+		<pathelement location="${path.swt}"/>
+	</path >
+	
+	<target name="init" depends="clean">
+		<mkdir dir="${build.path}" />
+	</target>
+	
+	<target name="build" depends="init">
+		<echo>+-------------------------------------------------+</echo>
+		<echo>|          B U I L D I N G   P L U G I N          |</echo>
+		<echo>+-------------------------------------------------+</echo>
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<classpath refid="class.path"/>
+			<include name="**/*.java"/>
+		</javac>
+		
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
+		
+		<echo>+-----------------------------------------------+</echo>
+		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
+		<echo>+-----------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}" basedir="${build.path}" />
+		<delete quiet="true" dir="${build.path}" />
+	</target>
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
diff --git a/TuxGuitar-gm-settings/pom.xml b/TuxGuitar-gm-settings/pom.xml
new file mode 100644
index 0000000..65b4213
--- /dev/null
+++ b/TuxGuitar-gm-settings/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-gm-settings</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-gm-settings/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-gm-settings/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..62629fd
--- /dev/null
+++ b/TuxGuitar-gm-settings/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.gm.settings.GMChannelSettingsPlugin
diff --git a/TuxGuitar-gm-settings/share/META-INF/tuxguitar-gm-settings.info b/TuxGuitar-gm-settings/share/META-INF/tuxguitar-gm-settings.info
new file mode 100644
index 0000000..d7700ed
--- /dev/null
+++ b/TuxGuitar-gm-settings/share/META-INF/tuxguitar-gm-settings.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=General Midi Settings
+plugin.description=General Midi Settings
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-gm-settings/share/lang/messages.properties b/TuxGuitar-gm-settings/share/lang/messages.properties
new file mode 100644
index 0000000..4aab497
--- /dev/null
+++ b/TuxGuitar-gm-settings/share/lang/messages.properties
@@ -0,0 +1,6 @@
+gm.settings.dialog.title=Channel Settings
+gm.settings.dialog.tip=Channel Settings
+gm.settings.channel.label-1=Normal Channel
+gm.settings.channel.label-2=Effect Channel
+gm.settings.channel.value-1=CH #{0}
+gm.settings.channel.value-2=EC #{0}
diff --git a/TuxGuitar-gm-settings/src/org/herac/tuxguitar/gm/settings/GMChannelSettingsDialog.java b/TuxGuitar-gm-settings/src/org/herac/tuxguitar/gm/settings/GMChannelSettingsDialog.java
new file mode 100644
index 0000000..fdd7703
--- /dev/null
+++ b/TuxGuitar-gm-settings/src/org/herac/tuxguitar/gm/settings/GMChannelSettingsDialog.java
@@ -0,0 +1,180 @@
+package org.herac.tuxguitar.gm.settings;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsDialog;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+
+public class GMChannelSettingsDialog implements TGChannelSettingsDialog{
+	
+	private TGChannel channel;
+	private GMChannelRouter router;
+	private Combo gmChannel1Combo;
+	private Combo gmChannel2Combo;
+	
+	public GMChannelSettingsDialog(TGChannel channel){
+		this.channel = channel;
+		this.router = new GMChannelRouter();
+	}
+	
+	public void show(final Shell parent) {
+		this.configureRouter();
+		
+		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM);
+		dialog.setLayout(new GridLayout(1,false));
+		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		dialog.setText(TuxGuitar.getProperty("gm.settings.dialog.title"));
+		
+		// ----------------------------------------------------------------------
+		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout(2,false));
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setText(TuxGuitar.getProperty("gm.settings.dialog.tip"));
+		
+		Label gmChannel1Label = new Label(group, SWT.NULL);
+		gmChannel1Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
+		gmChannel1Label.setText(TuxGuitar.getProperty("gm.settings.channel.label-1") + ":");
+		
+		this.gmChannel1Combo = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.gmChannel1Combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
+		this.gmChannel1Combo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateChannel();
+			}
+		});
+		
+		Label gmChannel2Label = new Label(group, SWT.NULL);
+		gmChannel2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
+		gmChannel2Label.setText(TuxGuitar.getProperty("gm.settings.channel.label-2") + ":");
+		
+		this.gmChannel2Combo = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.gmChannel2Combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
+		this.gmChannel2Combo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateChannel();
+			}
+		});
+		
+		updateChannelCombos();
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private void configureRouter(){
+		GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(this.router);
+		gmChannelRouterConfigurator.configureRouter(TuxGuitar.instance().getSongManager().getSong().getChannels());
+	}
+	
+	private void updateChannelCombos(){
+		GMChannelRoute route = this.router.getRoute(this.channel.getChannelId());
+		
+		List channels = this.router.getFreeChannels(route);
+		
+		this.reloadChannelCombo(this.gmChannel1Combo, channels, route.getChannel1(), "gm.settings.channel.value-1");
+		this.reloadChannelCombo(this.gmChannel2Combo, channels, route.getChannel2(), "gm.settings.channel.value-2");
+		
+		boolean playerRunning = TuxGuitar.instance().getPlayer().isRunning();
+		
+		this.gmChannel1Combo.setEnabled(!playerRunning && !this.channel.isPercussionChannel() && this.gmChannel1Combo.getItemCount() > 0);
+		this.gmChannel2Combo.setEnabled(!playerRunning && !this.channel.isPercussionChannel() && this.gmChannel2Combo.getItemCount() > 0);
+	}
+	
+	private void reloadChannelCombo(Combo combo, List channels, int selected, String valueKey){
+		if(!(combo.getData() instanceof List) || isDifferentList(channels, (List)combo.getData())){
+			combo.removeAll();
+			combo.setData(channels);
+			for( int i = 0 ; i < channels.size() ; i ++ ){
+				combo.add(TuxGuitar.getProperty(valueKey, new String[]{channels.get(i).toString()}));
+			}
+		}
+		for( int i = 0 ; i < channels.size() ; i ++ ){
+			Integer channel = (Integer)channels.get(i);
+			if( channel.intValue() == selected ){
+				combo.select( i );
+			}
+		}
+	}
+	
+	public void updateChannel(){
+		int channel1 = -1;
+		int channel2 = -1;
+		int channel1Selection = this.gmChannel1Combo.getSelectionIndex();
+		
+		Object channel1Data = this.gmChannel1Combo.getData();
+		if( channel1Selection >= 0 && channel1Data instanceof List && ((List)channel1Data).size() > channel1Selection ){
+			channel1 = ((Integer)((List)channel1Data).get(channel1Selection)).intValue();
+		}
+		
+		int channel2Selection = this.gmChannel2Combo.getSelectionIndex();
+		Object channel2Data = this.gmChannel2Combo.getData();
+		if( channel2Selection >= 0 && channel2Data instanceof List && ((List)channel2Data).size() > channel2Selection ){
+			channel2 = ((Integer)((List)channel2Data).get(channel2Selection)).intValue();
+		}
+		
+		setChannelParameter(this.channel, GMChannelRoute.PARAMETER_GM_CHANNEL_1, Integer.toString(channel1));
+		setChannelParameter(this.channel, GMChannelRoute.PARAMETER_GM_CHANNEL_2, Integer.toString(channel2));
+		
+		configureRouter();
+	}
+	
+	private void setChannelParameter( TGChannel tgChannel, String key, String value ){
+		TGChannelParameter tgChannelParameter = findOrCreateChannelParameter(tgChannel, key);
+		tgChannelParameter.setValue(value);
+	}
+	
+	private TGChannelParameter findChannelParameter( TGChannel tgChannel, String key ){
+		Iterator it = tgChannel.getParameters();
+		while( it.hasNext() ){
+			TGChannelParameter parameter = (TGChannelParameter)it.next();
+			if( parameter.getKey().equals( key ) ){
+				return parameter;
+			}
+		}
+		return null;
+	}
+	
+	private TGChannelParameter findOrCreateChannelParameter( TGChannel tgChannel, String key ){
+		TGChannelParameter tgChannelParameter = findChannelParameter(tgChannel, key);
+		if( tgChannelParameter == null ){
+			tgChannelParameter = TuxGuitar.instance().getSongManager().getFactory().newChannelParameter();
+			tgChannelParameter.setKey(key);
+			tgChannel.addParameter(tgChannelParameter);
+		}
+		return tgChannelParameter;
+	}
+	
+	private boolean isDifferentList(List list1, List list2){
+		if( list1.size() != list2.size() ){
+			return true;
+		}
+		for( int i = 0 ; i < list1.size() ; i ++ ){
+			if(!list1.get(i).equals(list2.get(i)) ){
+				return true;
+			}
+		}
+		return false;
+	}
+}
diff --git a/TuxGuitar-gm-settings/src/org/herac/tuxguitar/gm/settings/GMChannelSettingsHandler.java b/TuxGuitar-gm-settings/src/org/herac/tuxguitar/gm/settings/GMChannelSettingsHandler.java
new file mode 100644
index 0000000..4b6d047
--- /dev/null
+++ b/TuxGuitar-gm-settings/src/org/herac/tuxguitar/gm/settings/GMChannelSettingsHandler.java
@@ -0,0 +1,21 @@
+package org.herac.tuxguitar.gm.settings;
+
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsDialog;
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsHandler;
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.player.base.MidiDevice;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class GMChannelSettingsHandler implements TGChannelSettingsHandler{
+	
+	public boolean isMidiDeviceSupported(MidiDevice midiDevice) {
+		return (midiDevice instanceof GMOutputPort);
+	}
+	
+	public TGChannelSettingsDialog createChannelSettingsDialog(MidiDevice midiDevice, TGChannel channel) {
+		if( isMidiDeviceSupported(midiDevice) ){
+			return new GMChannelSettingsDialog(channel);
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-gm-settings/src/org/herac/tuxguitar/gm/settings/GMChannelSettingsPlugin.java b/TuxGuitar-gm-settings/src/org/herac/tuxguitar/gm/settings/GMChannelSettingsPlugin.java
new file mode 100644
index 0000000..0b8f519
--- /dev/null
+++ b/TuxGuitar-gm-settings/src/org/herac/tuxguitar/gm/settings/GMChannelSettingsPlugin.java
@@ -0,0 +1,24 @@
+package org.herac.tuxguitar.gm.settings;
+
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsHandler;
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class GMChannelSettingsPlugin extends TGChannelSettingsPlugin{
+	
+	public static final String MODULE_ID = "tuxguitar-gm-settings";
+	
+	private TGChannelSettingsHandler tgChannelSettingsHandler;
+	
+	public GMChannelSettingsPlugin(){
+		this.tgChannelSettingsHandler = new GMChannelSettingsHandler();
+	}
+	
+	protected TGChannelSettingsHandler getHandler() throws TGPluginException {
+		return this.tgChannelSettingsHandler;
+	}
+	
+	public String getModuleId(){
+		return MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-gm-utils/build.properties b/TuxGuitar-gm-utils/build.properties
new file mode 100644
index 0000000..67a4fec
--- /dev/null
+++ b/TuxGuitar-gm-utils/build.properties
@@ -0,0 +1,7 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
+
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
diff --git a/TuxGuitar-gm-utils/build.xml b/TuxGuitar-gm-utils/build.xml
new file mode 100644
index 0000000..23fc9e2
--- /dev/null
+++ b/TuxGuitar-gm-utils/build.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-gm-utils" basedir="." default="all">
+	<description>
+		TuxGuitar GM Utils
+	</description>
+	
+	<property file="build.properties" />
+	<property name="build.src.path" value="src${file.separator}" />
+	<property name="build.path" value="build${file.separator}" />
+	<property name="build.jar" value="tuxguitar-gm-utils.jar" />
+	
+	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+	</path>
+	
+	<target name="init" depends="clean">
+		<mkdir dir="${build.path}" />
+	</target>
+	
+	<target name="build" depends="init">
+		<echo>+-------------------------------------------------+</echo>
+		<echo>|          B U I L D I N G   P L U G I N          |</echo>
+		<echo>+-------------------------------------------------+</echo>
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<classpath refid="class.path"/>
+			<include name="**/*.java"/>
+		</javac>
+		
+		<echo>+-----------------------------------------------+</echo>
+		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
+		<echo>+-----------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}" basedir="${build.path}" />
+		<delete quiet="true" dir="${build.path}" />
+	</target>
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
+<!-- eof "$Id: build.xml,v 1.5 2008/02/28 00:35:00 rzr Exp $" -->
diff --git a/TuxGuitar-gm-utils/pom.xml b/TuxGuitar-gm-utils/pom.xml
new file mode 100644
index 0000000..d26e60c
--- /dev/null
+++ b/TuxGuitar-gm-utils/pom.xml
@@ -0,0 +1,26 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-gm-utils</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/GMChannelRoute.java b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/GMChannelRoute.java
new file mode 100644
index 0000000..485892d
--- /dev/null
+++ b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/GMChannelRoute.java
@@ -0,0 +1,37 @@
+package org.herac.tuxguitar.gm;
+
+public class GMChannelRoute {
+	
+	public static final String PARAMETER_GM_CHANNEL_1 = "gm-channel-1";
+	public static final String PARAMETER_GM_CHANNEL_2 = "gm-channel-2";
+	
+	public static final int NULL_VALUE = -1;
+	
+	private int channelId;
+	private int channel1;
+	private int channel2;
+	
+	public GMChannelRoute(int channelId){
+		this.channelId = channelId;
+	}
+	
+	public int getChannelId() {
+		return this.channelId;
+	}
+	
+	public int getChannel1() {
+		return this.channel1;
+	}
+
+	public void setChannel1(int channel1) {
+		this.channel1 = channel1;
+	}
+
+	public int getChannel2() {
+		return this.channel2;
+	}
+
+	public void setChannel2(int channel2) {
+		this.channel2 = channel2;
+	}
+}
diff --git a/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/GMChannelRouter.java b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/GMChannelRouter.java
new file mode 100644
index 0000000..409e2aa
--- /dev/null
+++ b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/GMChannelRouter.java
@@ -0,0 +1,131 @@
+package org.herac.tuxguitar.gm;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class GMChannelRouter {
+	
+	public static final short MAX_CHANNELS = 16;
+	public static final short PERCUSSION_CHANNEL = 9;
+	
+	private List midiChannels;
+	
+	public GMChannelRouter(){
+		this.midiChannels = new ArrayList();
+	}
+	
+	public void resetRoutes(){
+		this.midiChannels.clear();
+	}
+	
+	public void removeRoute(GMChannelRoute route){
+		if( this.midiChannels.contains(route) ){
+			this.midiChannels.remove(route);
+		}
+	}
+	
+	public GMChannelRoute getRoute(int channelId){
+		Iterator channelIt = this.midiChannels.iterator();
+		while( channelIt.hasNext() ){
+			GMChannelRoute midiChannel = (GMChannelRoute) channelIt.next();
+			if( midiChannel.getChannelId() == channelId ){
+				return midiChannel;
+			}
+		}
+		return null;
+	}
+	
+	public void configureRoutes(GMChannelRoute route, boolean percussionChannel){
+		List conflictingRoutes = null;
+		
+		if( this.midiChannels.contains(route) ){
+			this.midiChannels.remove(route);
+		}
+		
+		// Allways channel 9 for percussions
+		if( percussionChannel ){
+			route.setChannel1(PERCUSSION_CHANNEL);
+			route.setChannel2(PERCUSSION_CHANNEL);
+		}
+		
+		else {
+			// Use custom routes 
+			if( route.getChannel1() >= 0 ){
+				if( route.getChannel2() < 0 ){
+					route.setChannel2( route.getChannel1() );
+				}
+				conflictingRoutes = findConflictingRoutes(route);
+			}
+			
+			// Add default routes
+			else {
+				List freeChannels = getFreeChannels();
+				route.setChannel1(( freeChannels.size() > 0 ? ((Integer)freeChannels.get(0)).intValue() : GMChannelRoute.NULL_VALUE ) );
+				route.setChannel2(( freeChannels.size() > 1 ? ((Integer)freeChannels.get(1)).intValue() : route.getChannel1() ) );
+			}
+		}
+		
+		this.midiChannels.add( route );
+		
+		// Reconfigure conflicting routes
+		if( conflictingRoutes != null ){
+			Iterator it = conflictingRoutes.iterator();
+			while( it.hasNext() ){
+				GMChannelRoute conflictingRoute = (GMChannelRoute)it.next();
+				conflictingRoute.setChannel1(GMChannelRoute.NULL_VALUE);
+				conflictingRoute.setChannel2(GMChannelRoute.NULL_VALUE);
+				configureRoutes(conflictingRoute, false);
+			}
+		}
+	}
+	
+	public List findConflictingRoutes(GMChannelRoute gmChannelRoute){
+		List routes = new ArrayList();
+		
+		Iterator it = this.midiChannels.iterator();
+		while( it.hasNext() ){
+			GMChannelRoute route = (GMChannelRoute) it.next();
+			if(!route.equals(gmChannelRoute) ){
+				if( route.getChannel1() == gmChannelRoute.getChannel1() || 
+					route.getChannel1() == gmChannelRoute.getChannel2() ||
+					route.getChannel2() == gmChannelRoute.getChannel1() || 
+					route.getChannel2() == gmChannelRoute.getChannel2() ){
+					
+					routes.add( route );
+				}
+			}
+		}
+		
+		return routes;
+	}
+	
+	public List getFreeChannels(){
+		return getFreeChannels(null);
+	}
+	
+	public List getFreeChannels(GMChannelRoute forRoute){
+		List freeChannels = new ArrayList();
+		
+		for( int ch = 0 ; ch < MAX_CHANNELS ; ch ++ ){
+			if( ch != PERCUSSION_CHANNEL ){
+				boolean isFreeChannel = true;
+				
+				Iterator channelIt = this.midiChannels.iterator();
+				while( channelIt.hasNext() ){
+					GMChannelRoute route = (GMChannelRoute) channelIt.next();
+					if( forRoute == null || !forRoute.equals( route ) ){
+						if( route.getChannel1() == ch || route.getChannel2() == ch){
+							isFreeChannel = false;
+						}
+					}
+				}
+				
+				if( isFreeChannel ){
+					freeChannels.add(new Integer(ch));
+				}
+			}
+		}
+		return freeChannels;
+	}
+}
diff --git a/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/GMChannelRouterConfigurator.java b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/GMChannelRouterConfigurator.java
new file mode 100644
index 0000000..64aae0b
--- /dev/null
+++ b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/GMChannelRouterConfigurator.java
@@ -0,0 +1,48 @@
+package org.herac.tuxguitar.gm;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+
+public class GMChannelRouterConfigurator {
+	
+	private GMChannelRouter router;
+	
+	public GMChannelRouterConfigurator(GMChannelRouter router){
+		this.router = router;
+	}
+	
+	public void configureRouter(Iterator tgChannels){
+		this.router.resetRoutes();
+		
+		while( tgChannels.hasNext() ){
+			TGChannel tgChannel = (TGChannel) tgChannels.next();
+			
+			GMChannelRoute cmChannelRoute = new GMChannelRoute(tgChannel.getChannelId());
+			cmChannelRoute.setChannel1(getIntegerChannelParameter(tgChannel, GMChannelRoute.PARAMETER_GM_CHANNEL_1, GMChannelRoute.NULL_VALUE));
+			cmChannelRoute.setChannel2(getIntegerChannelParameter(tgChannel, GMChannelRoute.PARAMETER_GM_CHANNEL_2, GMChannelRoute.NULL_VALUE));
+			
+			this.router.configureRoutes(cmChannelRoute, tgChannel.isPercussionChannel());
+		}
+	}
+	
+	private int getIntegerChannelParameter( TGChannel tgChannel, String key , int nullValue){
+		TGChannelParameter tgChannelParameter = findChannelParameter(tgChannel, key);
+		if( tgChannelParameter != null && tgChannelParameter.getValue() != null ){
+			return Integer.parseInt( tgChannelParameter.getValue() );
+		}
+		return nullValue;
+	}
+	
+	private TGChannelParameter findChannelParameter( TGChannel tgChannel, String key ){
+		Iterator it = tgChannel.getParameters();
+		while( it.hasNext() ){
+			TGChannelParameter parameter = (TGChannelParameter)it.next();
+			if( parameter.getKey().equals( key ) ){
+				return parameter;
+			}
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMChannel.java b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMChannel.java
new file mode 100644
index 0000000..9ecd9b0
--- /dev/null
+++ b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMChannel.java
@@ -0,0 +1,75 @@
+package org.herac.tuxguitar.gm.port;
+
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.player.base.MidiChannel;
+import org.herac.tuxguitar.player.base.MidiControllers;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+
+public class GMChannel implements MidiChannel{
+	
+	public static final short PERCUSSION_BANK = 128;
+	
+	private GMReceiver receiver;
+	private GMChannelRoute route;
+	private GMChannelRouter router;
+	
+	public GMChannel(int channelId, GMChannelRouter router, GMReceiver receiver){
+		this.receiver = receiver;
+		this.route = new GMChannelRoute(channelId);
+		this.router = router;
+		this.router.configureRoutes(this.route, false);
+	}
+	
+	public GMChannelRoute getRoute(){
+		return this.route;
+	}
+	
+	public void sendAllNotesOff() throws MidiPlayerException {
+		this.receiver.sendAllNotesOff();
+	}
+
+	public void sendNoteOn(int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		this.receiver.sendNoteOn(resolveChannel(bendMode), key, velocity);
+	}
+
+	public void sendNoteOff(int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		this.receiver.sendNoteOff(resolveChannel(bendMode), key, velocity);
+	}
+
+	public void sendPitchBend(int value, int voice, boolean bendMode) throws MidiPlayerException {
+		this.receiver.sendPitchBend(resolveChannel(bendMode), value);
+	}
+	
+	public void sendProgramChange(int value) throws MidiPlayerException {
+		this.receiver.sendProgramChange(this.route.getChannel1(), value);
+		if( this.route.getChannel1() != this.route.getChannel2() ){
+			this.receiver.sendProgramChange(this.route.getChannel2(), value);
+		}
+	}
+
+	public void sendControlChange(int controller, int value) throws MidiPlayerException {
+		if( controller == MidiControllers.BANK_SELECT && value == PERCUSSION_BANK ){
+			this.router.configureRoutes(this.route, true);
+		}
+		this.receiver.sendControlChange(this.route.getChannel1(), controller, value);
+		if( this.route.getChannel1() != this.route.getChannel2() ){
+			this.receiver.sendControlChange(this.route.getChannel2(), controller, value);
+		}
+	}
+	
+	public void sendParameter(String key, String value) throws MidiPlayerException{
+		if( key.equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+			this.route.setChannel1(Integer.parseInt(value));
+			this.router.configureRoutes(this.route, false);
+		}
+		if( key.equals(GMChannelRoute.PARAMETER_GM_CHANNEL_2) ){
+			this.route.setChannel2(Integer.parseInt(value));
+			this.router.configureRoutes(this.route, false);
+		}
+	}
+	
+	private int resolveChannel(boolean bendMode){
+		return (bendMode ? this.route.getChannel2() : this.route.getChannel1());
+	}
+}
diff --git a/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMOutputPort.java b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMOutputPort.java
new file mode 100644
index 0000000..206802b
--- /dev/null
+++ b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMOutputPort.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.gm.port;
+
+import org.herac.tuxguitar.player.base.MidiOutputPort;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.base.MidiSynthesizer;
+
+public abstract class GMOutputPort implements MidiOutputPort{
+	
+	private GMSynthesizer midiSynthesizer;
+	
+	public GMOutputPort(){
+		this.midiSynthesizer = new GMSynthesizer(this);
+	}
+	
+	public abstract GMReceiver getReceiver();
+	
+	public MidiSynthesizer getSynthesizer() throws MidiPlayerException{
+		return this.midiSynthesizer;
+	}
+}
diff --git a/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMReceiver.java b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMReceiver.java
new file mode 100644
index 0000000..2fa3150
--- /dev/null
+++ b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMReceiver.java
@@ -0,0 +1,19 @@
+package org.herac.tuxguitar.gm.port;
+
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+
+public interface GMReceiver {
+	
+	public void sendAllNotesOff() throws MidiPlayerException;
+	
+	public void sendNoteOn(int channel, int key, int velocity) throws MidiPlayerException;
+	
+	public void sendNoteOff(int channel, int key, int velocity) throws MidiPlayerException;
+	
+	public void sendProgramChange(int channel, int value) throws MidiPlayerException;
+	
+	public void sendControlChange(int channel, int controller, int value) throws MidiPlayerException;
+	
+	public void sendPitchBend(int channel, int value) throws MidiPlayerException;
+	
+}
diff --git a/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMSynthesizer.java b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMSynthesizer.java
new file mode 100644
index 0000000..c812ef9
--- /dev/null
+++ b/TuxGuitar-gm-utils/src/org/herac/tuxguitar/gm/port/GMSynthesizer.java
@@ -0,0 +1,31 @@
+package org.herac.tuxguitar.gm.port;
+
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.player.base.MidiChannel;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.base.MidiSynthesizer;
+
+public class GMSynthesizer implements MidiSynthesizer{
+	
+	private GMOutputPort midiOutputPort;
+	private GMChannelRouter gmChannelRouter;
+	
+	public GMSynthesizer(GMOutputPort midiOutputPort){
+		this.midiOutputPort = midiOutputPort;
+		this.gmChannelRouter = new GMChannelRouter();
+	}
+	
+	public void closeChannel(MidiChannel midiChannel){
+		if( midiChannel instanceof GMChannel ){
+			this.gmChannelRouter.removeRoute(((GMChannel) midiChannel).getRoute());
+		}
+	}
+	
+	public MidiChannel openChannel(int channelId){
+		return new GMChannel(channelId, this.gmChannelRouter, this.midiOutputPort.getReceiver());
+	}
+
+	public boolean isChannelOpen(MidiChannel midiChannel) throws MidiPlayerException {
+		return true;
+	}
+}
diff --git a/TuxGuitar-gpx/build.properties b/TuxGuitar-gpx/build.properties
new file mode 100644
index 0000000..6aff2c5
--- /dev/null
+++ b/TuxGuitar-gpx/build.properties
@@ -0,0 +1,9 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
+
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
diff --git a/TuxGuitar-gpx/build.xml b/TuxGuitar-gpx/build.xml
new file mode 100644
index 0000000..c7bc6ff
--- /dev/null
+++ b/TuxGuitar-gpx/build.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-gpx" basedir="." default="all">
+	<description>
+	TuxGuitar GPX File Format Support
+	</description>
+		
+	<property file="build.properties" />
+	<property name="build.src.path" value="src${file.separator}" />
+	<property name="build.share.path" value="share${file.separator}" />
+	<property name="build.path" value="build${file.separator}" />
+	<property name="build.jar" value="tuxguitar-gpx.jar" />
+	
+	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
+		<pathelement location="${path.tuxguitar}"/>
+	</path >
+	
+	<target name="init" depends="clean">
+		<mkdir dir="${build.path}" />
+	</target>
+	
+	<target name="build" depends="init">
+		<echo>+-------------------------------------------------+</echo>
+		<echo>|          B U I L D I N G   P L U G I N          |</echo>
+		<echo>+-------------------------------------------------+</echo>
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<classpath refid="class.path"/>
+			<include name="**/*.java"/>
+		</javac>
+		
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
+		
+		<echo>+-----------------------------------------------+</echo>
+		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
+		<echo>+-----------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}" basedir="${build.path}" />
+		<delete quiet="true" dir="${build.path}" />
+	</target>
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
diff --git a/TuxGuitar-gpx/pom.xml b/TuxGuitar-gpx/pom.xml
new file mode 100644
index 0000000..7767ca4
--- /dev/null
+++ b/TuxGuitar-gpx/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-gpx</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-gpx/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-gpx/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..f7ff75a
--- /dev/null
+++ b/TuxGuitar-gpx/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,2 @@
+# Add here the TGPlugin implementation class names.
+org.herac.tuxguitar.io.gpx.GPXInputStreamPlugin
\ No newline at end of file
diff --git a/TuxGuitar-gpx/share/META-INF/tuxguitar-gpx.info b/TuxGuitar-gpx/share/META-INF/tuxguitar-gpx.info
new file mode 100644
index 0000000..c1544e8
--- /dev/null
+++ b/TuxGuitar-gpx/share/META-INF/tuxguitar-gpx.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=GPX File Format plugin
+plugin.description=GPX File Format plugin based on code contributed by J.J\u00f8rgen von Bargen, updates by b4dc0d3r
+plugin.author=J.J\u00f8rgen von Bargen, Julian Casadesus <julian at casadesus.com.ar>, b4dc0d3r
+plugin.version=0.2
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXByteBuffer.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXByteBuffer.java
new file mode 100644
index 0000000..62648d2
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXByteBuffer.java
@@ -0,0 +1,61 @@
+package org.herac.tuxguitar.io.gpx;
+
+public class GPXByteBuffer {
+	
+	private static final int BUFFER_TYPE_BITS = 8;
+	
+	private int position;
+	private byte[] buffer;
+	
+	public GPXByteBuffer( byte[] buffer ){
+		this.buffer = buffer;
+		this.position = 0;
+	}
+	
+	public int length(){
+		return ( this.buffer.length );
+	}
+	
+	public int offset(){
+		return ( this.position / BUFFER_TYPE_BITS );
+	}
+	
+	public boolean end(){
+		return ( this.offset() >= this.length() );
+	}
+	
+	public int readBit(){
+		int bit = -1;
+		int byteIndex = ( this.position / BUFFER_TYPE_BITS );
+		int byteOffset = ( (BUFFER_TYPE_BITS - 1) - ( this.position % BUFFER_TYPE_BITS ) );
+		if( byteIndex >= 0 && byteIndex < this.buffer.length ){
+			bit = ( ((this.buffer[ byteIndex ] & 0xff) >> byteOffset ) & 0x01 );
+			this.position ++;
+		}
+		return bit;
+	}
+	
+	public int readBits(int count){
+		int bits = 0;
+		for( int i = (count - 1) ; i >= 0 ; i -- ){
+			bits |= ( readBit() << i  );
+		}
+		return bits;
+	}
+	
+	public int readBitsReversed(int count){
+		int bits = 0;
+		for( int i = 0 ; i < count ; i ++ ){
+			bits |= ( readBit() << i  );
+		}
+		return bits;
+	}
+	
+	public byte[] readBytes(int count){
+		byte[] bytes = new byte[count];
+		for( int i = 0 ; i < count ; i++ ){
+			bytes[i] = (byte)readBits(8);
+		}
+		return bytes;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXDocumentParser.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXDocumentParser.java
new file mode 100644
index 0000000..ea2ea35
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXDocumentParser.java
@@ -0,0 +1,617 @@
+package org.herac.tuxguitar.io.gpx;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.graphics.control.TGNoteImpl;
+import org.herac.tuxguitar.io.gpx.score.GPXAutomation;
+import org.herac.tuxguitar.io.gpx.score.GPXBar;
+import org.herac.tuxguitar.io.gpx.score.GPXBeat;
+import org.herac.tuxguitar.io.gpx.score.GPXDocument;
+import org.herac.tuxguitar.io.gpx.score.GPXDrumkit;
+import org.herac.tuxguitar.io.gpx.score.GPXMasterBar;
+import org.herac.tuxguitar.io.gpx.score.GPXNote;
+import org.herac.tuxguitar.io.gpx.score.GPXRhythm;
+import org.herac.tuxguitar.io.gpx.score.GPXTrack;
+import org.herac.tuxguitar.io.gpx.score.GPXVoice;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+public class GPXDocumentParser {
+	
+	private static final float GP_BEND_POSITION = 100f;
+	private static final float GP_BEND_SEMITONE =  25f;
+	private static final float GP_WHAMMY_BAR_POSITION = 100f;
+	private static final float GP_WHAMMY_BAR_SEMITONE =  50f;
+	
+	private TGFactory factory;
+	private GPXDocument document;
+	
+	public GPXDocumentParser(TGFactory factory, GPXDocument document){
+		this.factory = factory;
+		this.document = document;
+	}
+	
+	public TGSong parse(){
+		TGSong tgSong =  this.factory.newSong();
+		
+		this.parseScore(tgSong);
+		this.parseTracks(tgSong);
+		this.parseMasterBars(tgSong);
+		
+		return tgSong;
+	}
+	
+	private void parseScore(TGSong tgSong){
+		tgSong.setName(this.document.getScore().getTitle());
+		tgSong.setArtist(this.document.getScore().getArtist());
+		tgSong.setAlbum(this.document.getScore().getAlbum());
+		tgSong.setAuthor(this.document.getScore().getWordsAndMusic());
+		tgSong.setCopyright(this.document.getScore().getCopyright());
+		tgSong.setWriter(this.document.getScore().getTabber());
+		tgSong.setComments(this.document.getScore().getNotices());
+	}
+	
+	private void parseTracks(TGSong tgSong){
+		List tracks = this.document.getTracks();
+		for( int i = 0 ; i < tracks.size(); i ++ ){
+			GPXTrack gpTrack = (GPXTrack) this.document.getTracks().get(i);
+			
+			TGChannel tgChannel = this.factory.newChannel();
+			tgChannel.setProgram((short)gpTrack.getGmProgram());
+			tgChannel.setBank( gpTrack.getGmChannel1() == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+			
+			TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+			gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+			gmChannel1Param.setValue(Integer.toString(gpTrack.getGmChannel1()));
+			
+			TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+			gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+			gmChannel2Param.setValue(Integer.toString(gpTrack.getGmChannel1() != 9 ? gpTrack.getGmChannel2() : gpTrack.getGmChannel1()));
+			
+			for( int c = 0 ; c < tgSong.countChannels() ; c ++ ){
+				TGChannel tgChannelAux = tgSong.getChannel(c);
+				for( int n = 0 ; n < tgChannelAux.countParameters() ; n ++ ){
+					TGChannelParameter channelParameter = tgChannelAux.getParameter( n );
+					if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+						if( Integer.toString(gpTrack.getGmChannel1()).equals(channelParameter.getValue()) ){
+							tgChannel.setChannelId(tgChannelAux.getChannelId());
+						}
+					}
+				}
+			}
+			if( tgChannel.getChannelId() <= 0 ){
+				tgChannel.setChannelId( tgSong.countChannels() + 1 );
+				tgChannel.setName(("#" + tgChannel.getChannelId()));
+				tgChannel.addParameter(gmChannel1Param);
+				tgChannel.addParameter(gmChannel2Param);
+				tgSong.addChannel(tgChannel);
+			}
+			
+			TGTrack tgTrack = this.factory.newTrack();
+			tgTrack.setNumber( i + 1 );
+			tgTrack.setName(gpTrack.getName());
+			tgTrack.setChannelId(tgChannel.getChannelId());
+			
+			if( gpTrack.getTunningPitches() != null ){
+				for( int s = 1; s <= gpTrack.getTunningPitches().length ; s ++ ){
+					TGString tgString = this.factory.newString();
+					tgString.setNumber(s);
+					tgString.setValue(gpTrack.getTunningPitches()[ gpTrack.getTunningPitches().length - s ]);
+					tgTrack.getStrings().add(tgString);
+				}
+			}else if( tgChannel.isPercussionChannel() ){
+				for( int s = 1; s <= 6 ; s ++ ){
+					tgTrack.getStrings().add(TGSongManager.newString(this.factory, s, 0));
+				}
+			}else{
+				tgTrack.getStrings().add(TGSongManager.newString(this.factory,1, 64));
+				tgTrack.getStrings().add(TGSongManager.newString(this.factory,2, 59));
+				tgTrack.getStrings().add(TGSongManager.newString(this.factory,3, 55));
+				tgTrack.getStrings().add(TGSongManager.newString(this.factory,4, 50));
+				tgTrack.getStrings().add(TGSongManager.newString(this.factory,5, 45));
+				tgTrack.getStrings().add(TGSongManager.newString(this.factory,6, 40));
+			}
+			if( gpTrack.getColor() != null && gpTrack.getColor().length == 3 ){
+				tgTrack.getColor().setR(gpTrack.getColor()[0]);
+				tgTrack.getColor().setG(gpTrack.getColor()[1]);
+				tgTrack.getColor().setB(gpTrack.getColor()[2]);
+			}
+			tgSong.addTrack(tgTrack);
+		}
+	}
+	
+	private void parseMasterBars(TGSong tgSong){
+		long tgStart = TGDuration.QUARTER_TIME;
+		
+		List masterBars = this.document.getMasterBars();
+		for( int i = 0 ; i < masterBars.size() ; i ++ ){
+			GPXMasterBar mbar = (GPXMasterBar) masterBars.get(i);
+			GPXAutomation gpTempoAutomation = this.document.getAutomation("Tempo", i);
+			
+			TGMeasureHeader tgMeasureHeader = this.factory.newHeader();
+			tgMeasureHeader.setStart(tgStart);
+			tgMeasureHeader.setNumber( i + 1 );
+			tgMeasureHeader.setRepeatOpen(mbar.isRepeatStart());
+			tgMeasureHeader.setRepeatClose(mbar.getRepeatCount());
+			tgMeasureHeader.setTripletFeel(parseTripletFeel(mbar));
+			if( mbar.getTime() != null && mbar.getTime().length == 2){
+				tgMeasureHeader.getTimeSignature().setNumerator(mbar.getTime()[0]);
+				tgMeasureHeader.getTimeSignature().getDenominator().setValue(mbar.getTime()[1]);
+			}
+			if( gpTempoAutomation != null && gpTempoAutomation.getValue().length == 2 ){
+				int tgTempo = gpTempoAutomation.getValue()[0];
+				if( gpTempoAutomation.getValue()[1] == 1 ){
+					tgTempo = (tgTempo / 2);
+				}else if( gpTempoAutomation.getValue()[1] == 3 ){
+					tgTempo = (tgTempo + (tgTempo / 2));
+				}else if( gpTempoAutomation.getValue()[1] == 4 ){
+					tgTempo = (tgTempo * 2);
+				}else if( gpTempoAutomation.getValue()[1] == 5 ){
+					tgTempo = (tgTempo + (tgTempo * 2));
+				}
+				tgMeasureHeader.getTempo().setValue( tgTempo );
+			}
+			tgSong.addMeasureHeader(tgMeasureHeader);
+			
+			for( int t = 0 ; t < tgSong.countTracks() ; t ++ ){
+				TGTrack tgTrack = tgSong.getTrack(t);
+				TGMeasure tgMeasure = this.factory.newMeasure(tgMeasureHeader);
+				
+				int accidental = mbar.getAccidentalCount();
+				if( accidental < 0 ){
+					accidental = 7 - accidental; // translate -1 to 8, etc.
+				}
+				if( accidental >= 0 && accidental <= 14 ){
+					tgMeasure.setKeySignature(accidental);
+				}
+				
+				tgTrack.addMeasure(tgMeasure);
+				
+				int gpMasterBarIndex = i;
+				GPXBar gpBar = ( t < mbar.getBarIds().length ? this.document.getBar( mbar.getBarIds()[t] ) : null );
+				while( gpBar != null && gpBar.getSimileMark() != null ){
+					String gpMark = gpBar.getSimileMark();
+					if( gpMark.equals("Simple") ){
+						gpMasterBarIndex = (gpMasterBarIndex - 1);
+					}else if((gpMark.equals("FirstOfDouble") || gpMark.equals("SecondOfDouble")) ){
+						gpMasterBarIndex = (gpMasterBarIndex - 2);
+					}
+					if( gpMasterBarIndex >= 0 ){
+						GPXMasterBar gpMasterBarCopy = (GPXMasterBar) masterBars.get(gpMasterBarIndex);
+						gpBar = (t < gpMasterBarCopy.getBarIds().length ? this.document.getBar(gpMasterBarCopy.getBarIds()[t]) : null);
+					}else{
+						gpBar = null;
+					}
+				}
+				
+				if( gpBar != null ){
+					this.parseBar( gpBar , tgMeasure );
+				}
+			}
+			
+			tgStart += tgMeasureHeader.getLength();
+		}
+	}
+	
+	private void parseBar(GPXBar bar , TGMeasure tgMeasure){
+		if (bar.getClef() != null) {
+			String clef = bar.getClef();
+			if (clef.equals("F4")){
+				tgMeasure.setClef(TGMeasure.CLEF_BASS);
+			} else if (clef.equals("C3")){
+				tgMeasure.setClef(TGMeasure.CLEF_ALTO);
+			} else if (clef.equals("C4")){
+				tgMeasure.setClef(TGMeasure.CLEF_TENOR);
+			}
+		}
+		
+		int[] voiceIds = bar.getVoiceIds();
+		for( int v = 0; v < TGBeat.MAX_VOICES; v ++ ){
+			if( voiceIds.length > v ){
+				if( voiceIds[v] >= 0 ){
+					GPXVoice voice = this.document.getVoice( voiceIds[v] );
+					if( voice != null ){
+						long tgStart = tgMeasure.getStart();
+						for( int b = 0 ; b < voice.getBeatIds().length ; b ++){
+							GPXBeat beat = this.document.getBeat( voice.getBeatIds()[b] );
+							GPXRhythm gpRhythm = this.document.getRhythm( beat.getRhythmId() );
+							
+							TGBeat tgBeat = getBeat(tgMeasure, tgStart);
+							TGVoice tgVoice = tgBeat.getVoice( v % tgBeat.countVoices() );
+							tgVoice.setEmpty(false);
+							tgBeat.getStroke().setDirection( this.parseStroke(beat) );
+
+							if (beat.getText().length() > 0) {
+								TGText text = this.factory.newText();
+								text.setValue(beat.getText().trim());
+								text.setBeat(tgBeat);
+								tgBeat.setText(text);
+							}
+							
+							this.parseRhythm(gpRhythm, tgVoice.getDuration());
+							if( beat.getNoteIds() != null ){
+								int tgVelocity = this.parseDynamic(beat);
+								
+								for( int n = 0 ; n < beat.getNoteIds().length; n ++ ){
+									GPXNote gpNote = this.document.getNote( beat.getNoteIds()[n] );
+									if( gpNote != null ){
+										this.parseNote(gpNote, tgVoice, tgVelocity, beat);
+									}
+								}
+							}
+							
+							tgStart += tgVoice.getDuration().getTime();
+						}
+					}
+				}
+			}
+		}
+		
+		if( tgMeasure.getNumber() == 1 ){
+			this.fixFirstMeasureStartPositions(tgMeasure);
+		}
+	}
+	
+	private void parseNote(GPXNote gpNote, TGVoice tgVoice, int tgVelocity, GPXBeat gpBeat){
+		int tgValue = -1;
+		int tgString = -1;
+		
+		if( gpNote.getString() >= 0 && gpNote.getFret() >= 0 ){
+			tgValue = gpNote.getFret();
+			tgString = (tgVoice.getBeat().getMeasure().getTrack().stringCount() - gpNote.getString());
+		}else{
+			int gmValue = -1;
+			if( gpNote.getMidiNumber() >= 0 ){
+				gmValue = gpNote.getMidiNumber();
+			}else if( gpNote.getTone() >= 0 && gpNote.getOctave() >= 0 ){
+				gmValue = (gpNote.getTone() + ((12 * gpNote.getOctave()) - 12));
+			}else if( gpNote.getElement() >= 0 ){
+				for( int i = 0 ; i < GPXDrumkit.DRUMKITS.length ; i ++ ){
+					if( GPXDrumkit.DRUMKITS[i].getElement() == gpNote.getElement() && GPXDrumkit.DRUMKITS[i].getVariation() == gpNote.getVariation() ){
+						gmValue = GPXDrumkit.DRUMKITS[i].getMidiValue();
+					}
+				}
+			}
+			
+			if( gmValue >= 0 ){
+				TGString tgStringAlternative = getStringFor(tgVoice.getBeat(), gmValue );
+				if( tgStringAlternative != null ){
+					tgValue = (gmValue - tgStringAlternative.getValue());
+					tgString = tgStringAlternative.getNumber();
+				}
+			}
+		}
+		
+		if( tgValue >= 0 && tgString > 0 ){
+			TGNote tgNote = this.factory.newNote();
+			tgNote.setValue(tgValue);
+			tgNote.setString(tgString);
+			tgNote.setTiedNote(gpNote.isTieDestination());
+			tgNote.setVelocity(tgVelocity);
+			tgNote.getEffect().setFadeIn(gpBeat.isFadeIn());
+			tgNote.getEffect().setVibrato(gpNote.isVibrato());
+			tgNote.getEffect().setSlide(gpNote.isSlide());
+			tgNote.getEffect().setDeadNote(gpNote.isMutedEnabled());
+			tgNote.getEffect().setPalmMute(gpNote.isPalmMutedEnabled());
+			tgNote.getEffect().setTapping(gpNote.isTapped());
+			tgNote.getEffect().setHammer(gpNote.isHammer());
+			tgNote.getEffect().setGhostNote(gpNote.isGhost());
+			tgNote.getEffect().setSlapping(gpBeat.isSlapped());
+			tgNote.getEffect().setPopping(gpBeat.isPopped());
+			tgNote.getEffect().setStaccato(gpNote.getAccent() == 1);
+			tgNote.getEffect().setHeavyAccentuatedNote(gpNote.getAccent() == 4);
+			tgNote.getEffect().setAccentuatedNote(gpNote.getAccent() == 8);
+			tgNote.getEffect().setTrill(parseTrill(gpNote));
+			tgNote.getEffect().setTremoloPicking(parseTremoloPicking(gpBeat, gpNote));
+			tgNote.getEffect().setHarmonic(parseHarmonic( gpNote ) );
+			tgNote.getEffect().setBend(parseBend( gpNote ) );
+			tgNote.getEffect().setTremoloBar(parseTremoloBar( gpBeat ));
+			
+			tgVoice.addNote( tgNote );
+		}
+	}
+	
+	private TGEffectTrill parseTrill(GPXNote gpNote){
+		TGEffectTrill tr = null;
+		if( gpNote.getTrill() > 0 ){
+			// A trill from string E frets 3 to 4 returns : <Trill>68</Trill> and <XProperties><XProperty id="688062467"><Int>30</Int></XProperty></XProperties>
+			// gpNote.getTrill() returns the MIDI note to trill this note with, TG wants a duration as well.
+			tr = this.factory.newEffectTrill();
+			tr.setFret(gpNote.getTrill());
+			// TODO: add a duration
+		}
+		return tr;
+	}
+	
+	private TGEffectTremoloPicking parseTremoloPicking(GPXBeat gpBeat, GPXNote gpNote){
+		TGEffectTremoloPicking tp = null;
+		if (gpBeat.getTremolo() != null && gpBeat.getTremolo().length == 2) {
+			tp = this.factory.newEffectTremoloPicking();
+			tp.getDuration().setValue((TGDuration.QUARTER * gpBeat.getTremolo()[1]));
+		}
+		return tp;
+	}
+	
+	private TGEffectHarmonic parseHarmonic(GPXNote note){
+		TGEffectHarmonic harmonic = null;
+		if( note.getHarmonicType() != null && note.getHarmonicType().length() > 0 ){
+			harmonic = this.factory.newEffectHarmonic();
+			
+			String type = note.getHarmonicType();
+			if (type.equals("Artificial")){
+				harmonic.setType(TGEffectHarmonic.TYPE_ARTIFICIAL);
+			}else if (type.equals("Natural")){
+				harmonic.setType(TGEffectHarmonic.TYPE_NATURAL);
+			}else if (type.equals("Pinch")){
+				harmonic.setType(TGEffectHarmonic.TYPE_PINCH);
+			}else{
+				// Default type.
+				harmonic.setType(TGEffectHarmonic.TYPE_NATURAL);
+			}
+			
+			int hFret = note.getHarmonicFret();
+			
+			// midi export does this, but not for natural harmonics
+			// key = (orig + TGEffectHarmonic.NATURAL_FREQUENCIES[note.getEffect().getHarmonic().getData()][1]);
+			
+			if (hFret >= 0){
+				for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){
+					if(hFret == (TGEffectHarmonic.NATURAL_FREQUENCIES[i][0] ) ){
+						harmonic.setData(i);
+						break;
+					}
+				}
+			}
+		}
+		return harmonic;
+	}
+	
+	private TGEffectBend parseBend(GPXNote note){
+		TGEffectBend bend = null;
+		if( note.isBendEnabled() && note.getBendOriginValue() != null && note.getBendDestinationValue() != null ){
+			bend = this.factory.newEffectBend();
+			
+			// Add the first point
+			bend.addPoint(0, parseBendValue(note.getBendOriginValue()));
+			
+			if( note.getBendOriginOffset() != null ){
+				bend.addPoint(parseBendPosition(note.getBendOriginOffset()), parseBendValue(note.getBendOriginValue()));
+			}
+			if( note.getBendMiddleValue() != null ){
+				Integer defaultMiddleOffset = new Integer(Math.round(GP_BEND_POSITION / 2));
+				if( note.getBendMiddleOffset1() == null || note.getBendMiddleOffset1().intValue() != 12 ){
+					Integer offset = (note.getBendMiddleOffset1() != null ? note.getBendMiddleOffset1() : defaultMiddleOffset);
+					bend.addPoint(parseBendPosition(offset), parseBendValue(note.getBendMiddleValue()));
+				}
+				if( note.getBendMiddleOffset2() == null || note.getBendMiddleOffset2().intValue() != 12 ){
+					Integer offset = (note.getBendMiddleOffset2() != null ? note.getBendMiddleOffset2() : defaultMiddleOffset);
+					bend.addPoint(parseBendPosition(offset), parseBendValue(note.getBendMiddleValue()));
+				}
+			}
+			if( note.getBendDestinationOffset() != null && note.getBendDestinationOffset().intValue() < GP_BEND_POSITION ){
+				bend.addPoint(parseBendPosition(note.getBendDestinationOffset()), parseBendValue(note.getBendDestinationValue()));
+			}
+			
+			// Add last point
+			bend.addPoint(TGEffectBend.MAX_POSITION_LENGTH, parseBendValue(note.getBendDestinationValue()));
+		}
+		return bend;
+	}
+	
+	private int parseBendValue( Integer gpValue ){
+		return Math.round(gpValue.intValue() * (TGEffectBend.SEMITONE_LENGTH / GP_BEND_SEMITONE));
+	}
+	
+	private int parseBendPosition( Integer gpOffset ){
+		return Math.round(gpOffset.intValue() * (TGEffectBend.MAX_POSITION_LENGTH / GP_BEND_POSITION));
+	}
+	
+	private TGEffectTremoloBar parseTremoloBar(GPXBeat beat){
+		TGEffectTremoloBar tremoloBar = null;
+		if( beat.isWhammyBarEnabled() && beat.getWhammyBarOriginValue() != null && beat.getWhammyBarDestinationValue() != null){
+			tremoloBar = this.factory.newEffectTremoloBar();
+			
+			// Add the first point
+			tremoloBar.addPoint(0, parseTremoloBarValue(beat.getWhammyBarOriginValue()));
+			
+			if( beat.getWhammyBarOriginOffset() != null ){
+				tremoloBar.addPoint(parseTremoloBarPosition(beat.getWhammyBarOriginOffset()), parseTremoloBarValue(beat.getWhammyBarOriginValue()));
+			}
+			if( beat.getWhammyBarMiddleValue() != null ){
+				boolean hiddenPoint = false;
+				if( beat.getWhammyBarDestinationValue().intValue() != 0 ){
+					if( beat.getWhammyBarMiddleValue().intValue() == Math.round(beat.getWhammyBarDestinationValue().intValue() / 2f) ){
+						hiddenPoint = false;
+					}
+				}
+				if(!hiddenPoint ){
+					Integer defaultMiddleOffset = new Integer(Math.round(GP_WHAMMY_BAR_POSITION / 2));
+					Integer offset1 = (beat.getWhammyBarMiddleOffset1() != null ? beat.getWhammyBarMiddleOffset1() : defaultMiddleOffset);
+					if( beat.getWhammyBarOriginOffset() == null || offset1.intValue() >= beat.getWhammyBarOriginOffset().intValue() ){
+						tremoloBar.addPoint(parseTremoloBarPosition(offset1), parseTremoloBarValue(beat.getWhammyBarMiddleValue()));
+					}
+					
+					Integer offset2 = (beat.getWhammyBarMiddleOffset2() != null ? beat.getWhammyBarMiddleOffset2() : defaultMiddleOffset);
+					if( beat.getWhammyBarOriginOffset() == null || offset1.intValue() >= beat.getWhammyBarOriginOffset().intValue() && offset2.intValue() > offset1.intValue() ){
+						tremoloBar.addPoint(parseTremoloBarPosition(offset2), parseTremoloBarValue(beat.getWhammyBarMiddleValue()));
+					}
+				}
+			}
+			if( beat.getWhammyBarDestinationOffset() != null && beat.getWhammyBarDestinationOffset().intValue() < GP_WHAMMY_BAR_POSITION ){
+				tremoloBar.addPoint(parseTremoloBarPosition(beat.getWhammyBarDestinationOffset()), parseTremoloBarValue(beat.getWhammyBarDestinationValue()));
+			}
+			
+			// Add last point
+			tremoloBar.addPoint(TGEffectTremoloBar.MAX_POSITION_LENGTH, parseTremoloBarValue(beat.getWhammyBarDestinationValue()));
+		}
+		return tremoloBar;
+	}
+	
+	private int parseTremoloBarValue( Integer gpValue ){
+		int value = Math.round(gpValue.intValue() * (1f / GP_WHAMMY_BAR_SEMITONE));
+		if( value > TGEffectTremoloBar.MAX_VALUE_LENGTH ){
+			value = TGEffectTremoloBar.MAX_VALUE_LENGTH;
+		}
+		if( value < (TGEffectTremoloBar.MAX_VALUE_LENGTH * -1) ){
+			value = (TGEffectTremoloBar.MAX_VALUE_LENGTH * -1);
+		}
+		return value;
+	}
+	
+	private int parseTremoloBarPosition( Integer gpOffset ){
+		return Math.round(gpOffset.intValue() * (TGEffectTremoloBar.MAX_POSITION_LENGTH / GP_WHAMMY_BAR_POSITION));
+	}
+	
+	private void parseRhythm(GPXRhythm gpRhythm , TGDuration tgDuration){
+		tgDuration.setDotted(gpRhythm.getAugmentationDotCount() == 1);
+		tgDuration.setDoubleDotted(gpRhythm.getAugmentationDotCount() == 2);
+		tgDuration.getDivision().setTimes(gpRhythm.getPrimaryTupletDen());
+		tgDuration.getDivision().setEnters(gpRhythm.getPrimaryTupletNum());
+		if(gpRhythm.getNoteValue().equals("Whole")){
+			tgDuration.setValue(TGDuration.WHOLE);
+		}else if(gpRhythm.getNoteValue().equals("Half")){
+			tgDuration.setValue(TGDuration.HALF);
+		}else if(gpRhythm.getNoteValue().equals("Quarter")){
+			tgDuration.setValue(TGDuration.QUARTER);
+		}else if(gpRhythm.getNoteValue().equals("Eighth")){
+			tgDuration.setValue(TGDuration.EIGHTH);
+		}else if(gpRhythm.getNoteValue().equals("16th")){
+			tgDuration.setValue(TGDuration.SIXTEENTH);
+		}else if(gpRhythm.getNoteValue().equals("32nd")){
+			tgDuration.setValue(TGDuration.THIRTY_SECOND);
+		}else if(gpRhythm.getNoteValue().equals("64th")){
+			tgDuration.setValue(TGDuration.SIXTY_FOURTH);
+		}
+	}
+	
+	private int parseStroke(GPXBeat beat){
+		int tgStroke = TGStroke.STROKE_NONE;
+		String stroke = beat.getBrush(); 
+		if ( stroke.equals("Down")){
+			tgStroke = TGStroke.STROKE_DOWN;
+		}else if ( stroke.equals("Up")){
+			tgStroke = TGStroke.STROKE_UP;
+		}
+		return tgStroke;
+	}
+	
+	private int parseDynamic(GPXBeat beat){
+		int tgVelocity = TGVelocities.DEFAULT;
+		if( beat.getDynamic() != null ){
+			if( beat.getDynamic().equals("PPP")) {
+				tgVelocity = TGVelocities.PIANO_PIANISSIMO;
+			}else if( beat.getDynamic().equals("PP")) {
+				tgVelocity = TGVelocities.PIANISSIMO;
+			}else if( beat.getDynamic().equals("P")) {
+				tgVelocity = TGVelocities.PIANO;
+			}else if( beat.getDynamic().equals("MP")) {
+				tgVelocity = TGVelocities.MEZZO_PIANO;
+			}else if( beat.getDynamic().equals("MF")) {
+				tgVelocity = TGVelocities.MEZZO_FORTE;
+			}else if( beat.getDynamic().equals("F")) {
+				tgVelocity = TGVelocities.FORTE;
+			}else if( beat.getDynamic().equals("FF")) {
+				tgVelocity = TGVelocities.FORTISSIMO;
+			}else if( beat.getDynamic().equals("FFF")) {
+				tgVelocity = TGVelocities.FORTE_FORTISSIMO;
+			}
+		}
+		return tgVelocity;
+	}
+	
+	private int parseTripletFeel(GPXMasterBar gpMasterBar){
+		if( gpMasterBar.getTripletFeel() != null ){
+			if( gpMasterBar.getTripletFeel().equals("Triplet8th") ){
+				return TGMeasureHeader.TRIPLET_FEEL_EIGHTH; 
+			}
+			if( gpMasterBar.getTripletFeel().equals("Triplet16th") ){
+				return TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH;
+			}
+		}
+		return TGMeasureHeader.TRIPLET_FEEL_NONE;
+	}
+	
+	private TGBeat getBeat(TGMeasure measure, long start){
+		int count = measure.countBeats();
+		for(int i = 0 ; i < count ; i ++ ){
+			TGBeat beat = measure.getBeat( i );
+			if( beat.getStart() == start ){
+				return beat;
+			}
+		}
+		TGBeat beat = this.factory.newBeat();
+		beat.setStart(start);
+		measure.addBeat(beat);
+		return beat;
+	}
+	
+	private TGString getStringFor(TGBeat tgBeat, int value ){
+		List strings = tgBeat.getMeasure().getTrack().getStrings();
+		for(int i = 0;i < strings.size();i ++){
+			TGString string = (TGString)strings.get(i);
+			if(value >= string.getValue()){
+				boolean emptyString = true;
+				
+				for(int v = 0; v < tgBeat.countVoices(); v ++){
+					TGVoice voice = tgBeat.getVoice( v );
+					Iterator it = voice.getNotes().iterator();
+					while (it.hasNext()) {
+						TGNoteImpl note = (TGNoteImpl) it.next();
+						if (note.getString() == string.getNumber()) {
+							emptyString = false;
+							break;
+						}
+					}
+				}
+				if(emptyString){
+					return string;
+				}
+			}
+		}
+		return null;
+	}
+	
+	private void fixFirstMeasureStartPositions(TGMeasure tgMeasure){
+		if( tgMeasure.getNumber() == 1 ){
+			long measureEnd = (tgMeasure.getStart() + tgMeasure.getLength());
+			long maximumNoteEnd = 0;
+			for( int b = 0 ; b < tgMeasure.countBeats(); b ++ ){
+				TGBeat tgBeat = tgMeasure.getBeat(b);
+				for( int v = 0 ; v < tgBeat.countVoices() ; v ++ ){
+					TGVoice tgVoice = tgBeat.getVoice( v );
+					if(!tgVoice.isEmpty() ){
+						maximumNoteEnd = Math.max(maximumNoteEnd, (tgBeat.getStart() + tgVoice.getDuration().getTime()));
+					}
+				}
+			}
+			if( maximumNoteEnd < measureEnd ){
+				long movement = (measureEnd - maximumNoteEnd);
+				for( int b = 0 ; b < tgMeasure.countBeats(); b ++ ){
+					TGBeat tgBeat = tgMeasure.getBeat(b);
+					tgBeat.setStart( tgBeat.getStart() + movement );
+				}
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXDocumentReader.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXDocumentReader.java
new file mode 100644
index 0000000..5921d1e
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXDocumentReader.java
@@ -0,0 +1,466 @@
+package org.herac.tuxguitar.io.gpx;
+
+import java.io.InputStream;
+import java.math.BigDecimal;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.herac.tuxguitar.io.gpx.score.GPXAutomation;
+import org.herac.tuxguitar.io.gpx.score.GPXBar;
+import org.herac.tuxguitar.io.gpx.score.GPXBeat;
+import org.herac.tuxguitar.io.gpx.score.GPXDocument;
+import org.herac.tuxguitar.io.gpx.score.GPXMasterBar;
+import org.herac.tuxguitar.io.gpx.score.GPXNote;
+import org.herac.tuxguitar.io.gpx.score.GPXRhythm;
+import org.herac.tuxguitar.io.gpx.score.GPXTrack;
+import org.herac.tuxguitar.io.gpx.score.GPXVoice;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class GPXDocumentReader {
+	
+	private Document xmlDocument;
+	private GPXDocument gpxDocument;
+	
+	public GPXDocumentReader(InputStream stream){
+		this.xmlDocument = getDocument(stream);
+		this.gpxDocument = new GPXDocument();
+	}
+	
+	private Document getDocument(InputStream stream) {
+		try {
+			return DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(stream);
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	public GPXDocument read(){
+		if( this.xmlDocument != null ){
+			this.readScore();
+			this.readAutomations();
+			this.readTracks();
+			this.readMasterBars();
+			this.readBars();
+			this.readVoices();
+			this.readBeats();
+			this.readNotes();
+			this.readRhythms();
+		}
+		return this.gpxDocument;
+	}
+	
+	public void readScore(){
+		if( this.xmlDocument != null ){
+			Node scoreNode = getChildNode(this.xmlDocument.getFirstChild(), "Score");
+			if( scoreNode != null ){
+				this.gpxDocument.getScore().setTitle( getChildNodeContent(scoreNode, "Title"));
+				this.gpxDocument.getScore().setSubTitle( getChildNodeContent(scoreNode, "SubTitle"));
+				this.gpxDocument.getScore().setArtist( getChildNodeContent(scoreNode, "Artist"));
+				this.gpxDocument.getScore().setAlbum( getChildNodeContent(scoreNode, "Album"));
+				this.gpxDocument.getScore().setWords( getChildNodeContent(scoreNode, "Words"));
+				this.gpxDocument.getScore().setMusic( getChildNodeContent(scoreNode, "Music"));
+				this.gpxDocument.getScore().setWordsAndMusic( getChildNodeContent(scoreNode, "WordsAndMusic"));
+				this.gpxDocument.getScore().setCopyright( getChildNodeContent(scoreNode, "Copyright"));
+				this.gpxDocument.getScore().setTabber( getChildNodeContent(scoreNode, "Tabber"));
+				this.gpxDocument.getScore().setInstructions( getChildNodeContent(scoreNode, "Instructions"));
+				this.gpxDocument.getScore().setNotices( getChildNodeContent(scoreNode, "Notices"));
+			}
+		}
+	}
+	
+	public void readAutomations(){
+		if( this.xmlDocument != null ){
+			Node masterTrackNode = getChildNode(this.xmlDocument.getFirstChild(), "MasterTrack");
+			if( masterTrackNode != null ){
+				NodeList automationNodes = getChildNodeList(masterTrackNode, "Automations");
+				for( int i = 0 ; i < automationNodes.getLength() ; i ++ ){
+					Node automationNode = automationNodes.item( i );
+					if( automationNode.getNodeName().equals("Automation") ){
+						GPXAutomation automation = new GPXAutomation();
+						automation.setType( getChildNodeContent(automationNode, "Type"));
+						automation.setBarId( getChildNodeIntegerContent(automationNode, "Bar"));
+						automation.setValue( getChildNodeIntegerContentArray(automationNode, "Value"));
+						automation.setLinear( getChildNodeBooleanContent(automationNode, "Linear"));
+						automation.setPosition( getChildNodeIntegerContent(automationNode, "Position"));
+						automation.setVisible( getChildNodeBooleanContent(automationNode, "Visible"));
+						
+						this.gpxDocument.getAutomations().add( automation );
+					}
+				}
+			}
+		}
+	}
+	
+	public void readTracks(){
+		if( this.xmlDocument != null ){
+			NodeList trackNodes = getChildNodeList(this.xmlDocument.getFirstChild(), "Tracks");
+			for( int i = 0 ; i < trackNodes.getLength() ; i ++ ){
+				Node trackNode = trackNodes.item( i );
+				if( trackNode.getNodeName().equals("Track") ){
+					GPXTrack track = new GPXTrack();
+					track.setId( getAttributeIntegerValue(trackNode, "id") );
+					track.setName(getChildNodeContent(trackNode, "Name" ));
+					track.setColor(getChildNodeIntegerContentArray(trackNode, "Color"));
+					Node gmNode = getChildNode(trackNode, "GeneralMidi");
+					if( gmNode != null ){
+						track.setGmProgram(getChildNodeIntegerContent(gmNode, "Program"));
+						track.setGmChannel1(getChildNodeIntegerContent(gmNode, "PrimaryChannel"));
+						track.setGmChannel2(getChildNodeIntegerContent(gmNode, "SecondaryChannel"));
+					}
+					
+					NodeList propertyNodes = getChildNodeList(trackNode, "Properties");
+					if( propertyNodes != null ){
+						for( int p = 0 ; p < propertyNodes.getLength() ; p ++ ){
+							Node propertyNode = propertyNodes.item( p );
+							if (propertyNode.getNodeName().equals("Property") ){ 
+								if( getAttributeValue(propertyNode, "name").equals("Tuning") ){
+									track.setTunningPitches( getChildNodeIntegerContentArray(propertyNode, "Pitches") );
+								}
+							}
+						}
+					}
+					this.gpxDocument.getTracks().add( track );
+				}
+			}
+		}
+	}
+	
+	public void readMasterBars(){
+		if( this.xmlDocument != null ){
+			NodeList masterBarNodes = getChildNodeList(this.xmlDocument.getFirstChild(), "MasterBars");
+			for( int i = 0 ; i < masterBarNodes.getLength() ; i ++ ){
+				Node masterBarNode = masterBarNodes.item( i );
+				if( masterBarNode.getNodeName().equals("MasterBar") ){
+					GPXMasterBar masterBar = new GPXMasterBar();
+					masterBar.setBarIds( getChildNodeIntegerContentArray(masterBarNode, "Bars"));
+					masterBar.setTime( getChildNodeIntegerContentArray(masterBarNode, "Time", "/"));
+					masterBar.setTripletFeel(getChildNodeContent(masterBarNode, "TripletFeel"));
+					
+					Node repeatNode = getChildNode(masterBarNode, "Repeat");
+					if( repeatNode != null ){
+						masterBar.setRepeatStart(getAttributeBooleanValue(repeatNode, "start"));
+						if( getAttributeBooleanValue(repeatNode, "end") ){
+							masterBar.setRepeatCount( getAttributeIntegerValue(repeatNode, "count"));
+						}
+					}
+					
+					Node keyNode = getChildNode(masterBarNode, "Key");
+					if (keyNode != null) {
+						masterBar.setAccidentalCount(this.getChildNodeIntegerContent(keyNode, "AccidentalCount") ); 
+						masterBar.setMode(this.getChildNodeContent(keyNode, "Mode") ); 
+					}
+					
+					this.gpxDocument.getMasterBars().add( masterBar );
+				}
+			}
+		}
+	}
+	
+	public void readBars(){
+		if( this.xmlDocument != null ){
+			NodeList barNodes = getChildNodeList(this.xmlDocument.getFirstChild(), "Bars");
+			for( int i = 0 ; i < barNodes.getLength() ; i ++ ){
+				Node barNode = barNodes.item( i );
+				if( barNode.getNodeName().equals("Bar") ){
+					GPXBar bar = new GPXBar();
+					bar.setId(getAttributeIntegerValue(barNode, "id"));
+					bar.setVoiceIds( getChildNodeIntegerContentArray(barNode, "Voices"));
+					bar.setClef(getChildNodeContent(barNode, "Clef"));
+					bar.setSimileMark(getChildNodeContent(barNode,"SimileMark"));
+					
+					this.gpxDocument.getBars().add( bar );
+				}
+			}
+		}
+	}
+	
+	public void readVoices(){
+		if( this.xmlDocument != null ){
+			NodeList voiceNodes = getChildNodeList(this.xmlDocument.getFirstChild(), "Voices");
+			for( int i = 0 ; i < voiceNodes.getLength() ; i ++ ){
+				Node voiceNode = voiceNodes.item( i );
+				if( voiceNode.getNodeName().equals("Voice") ){
+					GPXVoice voice = new GPXVoice();
+					voice.setId(getAttributeIntegerValue(voiceNode, "id"));
+					voice.setBeatIds( getChildNodeIntegerContentArray(voiceNode, "Beats"));
+					
+					this.gpxDocument.getVoices().add( voice );
+				}
+			}
+		}
+	}
+	
+	public void readBeats(){
+		if( this.xmlDocument != null ){
+			NodeList beatNodes = getChildNodeList(this.xmlDocument.getFirstChild(), "Beats");
+			for( int i = 0 ; i < beatNodes.getLength() ; i ++ ){
+				Node beatNode = beatNodes.item( i );
+				if( beatNode.getNodeName().equals("Beat") ){
+					GPXBeat beat = new GPXBeat();
+					beat.setId(getAttributeIntegerValue(beatNode, "id"));
+					beat.setDynamic(getChildNodeContent(beatNode, "Dynamic"));
+					beat.setRhythmId(getAttributeIntegerValue(getChildNode(beatNode, "Rhythm"), "ref"));
+					beat.setTremolo( getChildNodeIntegerContentArray(beatNode, "Tremolo", "/"));
+					beat.setNoteIds( getChildNodeIntegerContentArray(beatNode, "Notes"));
+					
+					NodeList propertyNodes = getChildNodeList(beatNode, "Properties");
+					if( propertyNodes != null ){
+						for( int p = 0 ; p < propertyNodes.getLength() ; p ++ ){
+							Node propertyNode = propertyNodes.item( p );
+							if (propertyNode.getNodeName().equals("Property") ){ 
+								String propertyName = getAttributeValue(propertyNode, "name");
+								
+								if( propertyName.equals("WhammyBar") ){
+									beat.setWhammyBarEnabled( getChildNode(propertyNode, "Enable") != null );
+								}
+								if( propertyName.equals("WhammyBarOriginValue") ){
+									beat.setWhammyBarOriginValue( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("WhammyBarMiddleValue") ){
+									beat.setWhammyBarMiddleValue( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("WhammyBarDestinationValue") ){
+									beat.setWhammyBarDestinationValue( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("WhammyBarOriginOffset") ){
+									beat.setWhammyBarOriginOffset( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("WhammyBarMiddleOffset1") ){
+									beat.setWhammyBarMiddleOffset1( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("WhammyBarMiddleOffset2") ){
+									beat.setWhammyBarMiddleOffset2( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("WhammyBarDestinationOffset") ){
+									beat.setWhammyBarDestinationOffset( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+							}
+						}
+					}
+					
+					this.gpxDocument.getBeats().add( beat );
+				}
+			}
+		}
+	}
+	
+	public void readNotes(){
+		if( this.xmlDocument != null ){
+			NodeList noteNodes = getChildNodeList(this.xmlDocument.getFirstChild(), "Notes");
+			for( int i = 0 ; i < noteNodes.getLength() ; i ++ ){
+				Node noteNode = noteNodes.item( i );
+				if( noteNode.getNodeName().equals("Note") ){
+					GPXNote note = new GPXNote();
+					note.setId( getAttributeIntegerValue(noteNode, "id") );
+					
+					Node tieNode = getChildNode(noteNode, "Tie");
+					note.setTieDestination( tieNode != null ? getAttributeValue(tieNode, "destination").equals("true") : false);
+					
+					String ghostNodeContent = getChildNodeContent(noteNode, "AntiAccent");
+					if( ghostNodeContent != null ){
+						note.setGhost(ghostNodeContent.equals("Normal"));
+					}
+					
+					note.setAccent(getChildNodeIntegerContent(noteNode, "Accent"));
+					note.setTrill(getChildNodeIntegerContent(noteNode, "Trill"));
+
+					note.setVibrato( getChildNode(noteNode, "Vibrato") != null );
+					
+					NodeList propertyNodes = getChildNodeList(noteNode, "Properties");
+					if( propertyNodes != null ){
+						for( int p = 0 ; p < propertyNodes.getLength() ; p ++ ){
+							Node propertyNode = propertyNodes.item( p );
+							if (propertyNode.getNodeName().equals("Property") ){ 
+								String propertyName = getAttributeValue(propertyNode, "name");
+								if( propertyName.equals("String") ){
+									note.setString( getChildNodeIntegerContent(propertyNode, "String") );
+								}
+								if( propertyName.equals("Fret") ){
+									note.setFret( getChildNodeIntegerContent(propertyNode, "Fret") );
+								}
+								if( propertyName.equals("Midi") ){
+									note.setMidiNumber( getChildNodeIntegerContent(propertyNode, "Number") );
+								}
+								if( propertyName.equals("Tone") ){
+									note.setTone( getChildNodeIntegerContent(propertyNode, "Step") );
+								}
+								if( propertyName.equals("Octave") ){
+									note.setOctave( getChildNodeIntegerContent(propertyNode, "Number") );
+								}
+								if( propertyName.equals("Element") ){
+									note.setElement( getChildNodeIntegerContent(propertyNode, "Element") );
+								}
+								if( propertyName.equals("Variation") ){
+									note.setVariation( getChildNodeIntegerContent(propertyNode, "Variation") );
+								}
+								if( propertyName.equals("Muted") ){
+									note.setMutedEnabled( getChildNode(propertyNode, "Enable") != null );
+								}
+								if( propertyName.equals("PalmMuted") ){
+									note.setPalmMutedEnabled( getChildNode(propertyNode, "Enable") != null );
+								}
+								if( propertyName.equals("Slide") ){
+									note.setSlide( true );
+									note.setSlideFlags( getChildNodeIntegerContent(propertyNode, "Flags") );
+								}
+								if( propertyName.equals("Tapped") ){
+									note.setTapped( getChildNode(propertyNode, "Enable") != null );
+								}
+								if( propertyName.equals("Bended") ){
+									note.setBendEnabled( getChildNode(propertyNode, "Enable") != null );
+								}
+								if( propertyName.equals("BendOriginValue") ){
+									note.setBendOriginValue( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("BendMiddleValue") ){
+									note.setBendMiddleValue( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("BendDestinationValue") ){
+									note.setBendDestinationValue( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("BendOriginOffset") ){
+									note.setBendOriginOffset( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("BendMiddleOffset1") ){
+									note.setBendMiddleOffset1( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("BendMiddleOffset2") ){
+									note.setBendMiddleOffset2( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("BendDestinationOffset") ){
+									note.setBendDestinationOffset( new Integer(getChildNodeIntegerContent(propertyNode, "Float")) );
+								}
+								if( propertyName.equals("HopoOrigin") ){
+									note.setHammer(true);
+								}
+								if( propertyName.equals("HopoDestination") ){
+	//								this is a hammer-on or pull-off
+								}
+								if( propertyName.equals("HarmonicFret") ){
+									note.setHarmonicFret( ( getChildNodeIntegerContent(propertyNode, "HFret") ) );
+								}
+								if( propertyName.equals("HarmonicType") ){
+									note.setHarmonicType( getChildNodeContent (propertyNode, "HType"));
+								}
+							}
+						}
+					}
+					
+					this.gpxDocument.getNotes().add( note );
+				}
+			}
+		}
+	}
+	
+	public void readRhythms(){
+		if( this.xmlDocument != null ){
+			NodeList rhythmNodes = getChildNodeList(this.xmlDocument.getFirstChild(), "Rhythms");
+			for( int i = 0 ; i < rhythmNodes.getLength() ; i ++ ){
+				Node rhythmNode = rhythmNodes.item( i );
+				if( rhythmNode.getNodeName().equals("Rhythm") ){
+					Node primaryTupletNode = getChildNode(rhythmNode, "PrimaryTuplet");
+					Node augmentationDotNode = getChildNode(rhythmNode, "AugmentationDot");
+					
+					GPXRhythm rhythm = new GPXRhythm();
+					rhythm.setId( getAttributeIntegerValue(rhythmNode, "id") );
+					rhythm.setNoteValue(getChildNodeContent(rhythmNode, "NoteValue") );
+					rhythm.setPrimaryTupletDen(primaryTupletNode != null ? getAttributeIntegerValue(primaryTupletNode, "den") : 1);
+					rhythm.setPrimaryTupletNum(primaryTupletNode != null ? getAttributeIntegerValue(primaryTupletNode, "num") : 1);
+					rhythm.setAugmentationDotCount(augmentationDotNode != null ? getAttributeIntegerValue(augmentationDotNode, "count") : 0);
+					
+					this.gpxDocument.getRhythms().add( rhythm );
+				}
+			}
+		}
+	}
+	
+	private String getAttributeValue(Node node, String attribute ){
+		if( node != null ){
+			return node.getAttributes().getNamedItem( attribute ).getNodeValue();
+		}
+		return null;
+	}
+	
+	private int getAttributeIntegerValue(Node node, String attribute ){
+		try {
+			return new BigDecimal(this.getAttributeValue(node, attribute)).intValue();
+		} catch( Throwable throwable ){ 
+			return 0;
+		}
+	}
+	
+	private boolean getAttributeBooleanValue(Node node, String attribute ){
+		String value = this.getAttributeValue(node, attribute);
+		if( value != null ){
+			return value.equals("true");
+		}
+		return false;
+	}
+	
+	private Node getChildNode(Node node, String name ){
+		NodeList childNodes = node.getChildNodes();
+		for( int i = 0 ; i < childNodes.getLength() ; i ++ ){
+			Node childNode = childNodes.item( i );
+			if( childNode.getNodeName().equals( name ) ){
+				return childNode;
+			}
+		}
+		return null;
+	}
+	
+	private NodeList getChildNodeList(Node node, String name ){
+		Node childNode = getChildNode(node, name);
+		if( childNode != null ){
+			return childNode.getChildNodes();
+		}
+		return null;
+	}
+	
+	private String getChildNodeContent(Node node, String name ){
+		Node childNode = getChildNode(node, name);
+		if( childNode != null ){
+			return childNode.getTextContent();
+		}
+		return null;
+	}
+	
+	private boolean getChildNodeBooleanContent(Node node, String name ){
+		String value = this.getChildNodeContent(node, name);
+		if( value != null ){
+			return value.equals("true");
+		}
+		return false;
+	}
+	
+	private int getChildNodeIntegerContent(Node node, String name){
+		try {
+			return new BigDecimal(this.getChildNodeContent(node, name)).intValue();
+		} catch( Throwable throwable ){
+			return 0;
+		}
+	}
+	
+	private int[] getChildNodeIntegerContentArray(Node node, String name , String regex){
+		String rawContents = this.getChildNodeContent(node, name);
+		if( rawContents != null ){
+			String[] contents = rawContents.trim().split(regex);
+			int[] intContents = new int[contents.length];
+			for( int i = 0 ; i < intContents.length; i ++ ){
+				try {
+					intContents[i] = new BigDecimal( contents[i].trim() ).intValue();
+				} catch( Throwable throwable ){
+					intContents[i] = 0;
+				}
+			}
+			return intContents;
+		}
+		return null;
+	}
+	
+	private int[] getChildNodeIntegerContentArray(Node node, String name ){
+		return getChildNodeIntegerContentArray(node, name, (" ") );
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXFileSystem.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXFileSystem.java
new file mode 100644
index 0000000..5e76d8f
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXFileSystem.java
@@ -0,0 +1,207 @@
+package org.herac.tuxguitar.io.gpx;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class GPXFileSystem {
+	
+	private static final int HEADER_BCFS = 1397113666;
+	private static final int HEADER_BCFZ = 1514554178;
+	
+	private List fileSystem;
+	
+	public GPXFileSystem(){
+		this.fileSystem = new ArrayList();
+	}
+	
+	public List getFileNames(){
+		List gpxFileNames = new ArrayList();
+		
+		Iterator it = this.fileSystem.iterator();
+		while( it.hasNext() ){
+			GPXFile file = (GPXFile)it.next();
+			gpxFileNames.add( file.getFileName() );
+		}
+		
+		return gpxFileNames;
+	}
+	
+	public byte[] getFileContents( String fileName ){
+		Iterator it = this.fileSystem.iterator();
+		while( it.hasNext() ){
+			GPXFile file = (GPXFile)it.next();
+			if( file.getFileName().equals( fileName ) ){
+				return file.getFileContents();
+			}
+		}
+		return null;
+	}
+	
+	public String getFileContentsAsString( String fileName ){
+		byte[] fileContents = this.getFileContents(fileName);
+		if( fileContents != null ){
+			return getString(fileContents, 0, fileContents.length);
+		}
+		return null;
+	}
+	
+	public InputStream getFileContentsAsStream( String fileName ){
+		byte[] fileContents = this.getFileContents(fileName);
+		if( fileContents != null ){
+			return new ByteArrayInputStream( fileContents );
+		}
+		return null;
+	}
+	
+	public boolean isSupportedHeader( int header ){
+		return (header == HEADER_BCFS || header == HEADER_BCFZ);
+	}
+	
+	public int getHeader(InputStream in) throws Throwable{
+		return getInteger(in);
+	}
+	
+	public void load(InputStream in) throws Throwable {
+		this.load(getHeader(in), in);
+	}
+	
+	public void load(int header, InputStream in) throws Throwable {
+		this.load(header, new GPXByteBuffer( getBytes(in) ) );
+	}
+	
+	public void load(int header, GPXByteBuffer srcBuffer) throws Throwable {
+		if (header == HEADER_BCFS ) {
+			byte[] bcfsBytes = srcBuffer.readBytes( srcBuffer.length() );
+			
+			int sectorSize = 0x1000;
+			int offset = 0;
+			while ( (offset = (offset + sectorSize)) + 3 < bcfsBytes.length ) {
+				if (getInteger(bcfsBytes, offset) == 2) {					
+					int indexFileName = (offset + 4);
+					int indexFileSize = (offset + 0x8C);
+					int indexOfBlock  = (offset + 0x94);
+					
+					int block = 0;
+					int blockCount = 0;
+					ByteArrayOutputStream fileBytesStream = new ByteArrayOutputStream();
+					while( (block = (getInteger(bcfsBytes, (indexOfBlock + (4 * (blockCount ++)))))) != 0 ){
+						fileBytesStream.write( getBytes(bcfsBytes, (offset = (block * sectorSize)), sectorSize) );
+					}
+					
+					int fileSize = getInteger(bcfsBytes , indexFileSize);
+					byte[] fileBytes = fileBytesStream.toByteArray();
+					if ( fileBytes.length >= fileSize ){
+						this.fileSystem.add(new GPXFile(getString(bcfsBytes, indexFileName, 127), getBytes(fileBytes, 0, fileSize)));
+					}
+				}
+			}
+		} else if ( header == HEADER_BCFZ ) {
+			ByteArrayOutputStream bcfsBuffer = new ByteArrayOutputStream();
+			
+			int expectLength = getInteger(srcBuffer.readBytes(4),0);
+			while ( !srcBuffer.end() && srcBuffer.offset() < expectLength ){
+				int flag = srcBuffer.readBits(1);
+				if (flag == 1) {
+					int bits = srcBuffer.readBits(4);
+					int offs = srcBuffer.readBitsReversed(bits);
+					int size = srcBuffer.readBitsReversed(bits);
+					
+					byte[] bcfsBytes = bcfsBuffer.toByteArray();
+					int pos = ( bcfsBytes.length - offs );
+					for( int i = 0; i < (size > offs ? offs : size) ; i ++ ){
+						bcfsBuffer.write( bcfsBytes[pos + i] ) ;
+					}
+				} else {
+					int size = srcBuffer.readBitsReversed(2);
+					for(int i = 0; i < size; i ++ ){
+						bcfsBuffer.write( srcBuffer.readBits(8) );
+					}
+				}
+			}
+			this.load( new ByteArrayInputStream( bcfsBuffer.toByteArray() ) );
+		} else {
+			throw new Exception("This is not a GPX file");
+		}
+	}
+	
+	private int getInteger(InputStream in) throws Throwable{
+		byte[] bytes = new byte[4];
+		in.read( bytes );
+		return getInteger(bytes, 0);
+	}
+	
+	private byte[] getBytes(InputStream in) throws Throwable {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		int read = 0;
+		while((read = in.read()) != -1){
+			out.write(read);
+		}
+		byte[] bytes = out.toByteArray();
+		in.close();
+		out.close();
+		out.flush();
+		return bytes;
+	}
+	
+	private int getInteger(byte[] source, int offset)  {
+		byte[] bytes = new byte[4];
+		bytes[0] = source[ offset + 0];
+		bytes[1] = source[ offset + 1];
+		bytes[2] = source[ offset + 2];
+		bytes[3] = source[ offset + 3];
+		return ((bytes[3] & 0xff) << 24) | ((bytes[2] & 0xff) << 16) | ((bytes[1] & 0xff) << 8) | (bytes[0] & 0xff);
+	}
+	
+	private byte[] getBytes(byte[] source, int offset, int length ){
+		byte[] bytes = new byte[length];
+		for( int i = 0 ; i < length ; i ++ ){
+			if( source.length > offset + i ){
+				bytes[i] = source[ offset + i ];
+			}
+		}
+		return bytes;
+	}
+	
+	private String getString(byte[] source, int offset, int length ){
+		int charsLength = 0;
+		
+		char[] chars = new char[length];
+		for( int i = 0 ; i < length ; i ++ ){
+			int charValue = ((source[ offset + i ]) & 0xff);
+			if( charValue == 0 ){
+				break;
+			}
+			chars[i] = (char)charValue;
+			charsLength = (i + 1);
+		}
+		
+		char[] string = new char[ charsLength ];
+		for( int i = 0 ; i < charsLength ; i ++ ){
+			string[i] = chars[i];
+		}
+		
+		return new String( string );
+	}
+	
+	private class GPXFile {
+		private String fileName;
+		private byte[] fileContents;
+		
+		public GPXFile(String fileName, byte[] fileContents){
+			this.fileName = fileName;
+			this.fileContents = fileContents;
+		}
+		
+		public String getFileName() {
+			return this.fileName;
+		}
+		
+		public byte[] getFileContents() {
+			return this.fileContents;
+		}
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXInputStream.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXInputStream.java
new file mode 100644
index 0000000..17ceb14
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXInputStream.java
@@ -0,0 +1,51 @@
+package org.herac.tuxguitar.io.gpx;
+
+import java.io.InputStream;
+
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class GPXInputStream implements TGInputStreamBase{
+	
+	private int gpxHeader;
+	private InputStream gpxStream;
+	private GPXFileSystem gpxFileSystem;
+	private TGFactory factory;
+	
+	public TGFileFormat getFileFormat() {
+		return new TGFileFormat("Guitar Pro 6","*.gpx");
+	}
+	
+	public void init(TGFactory factory, InputStream stream) {
+		this.factory = factory;
+		this.gpxStream = stream;
+		this.gpxHeader = 0;
+		this.gpxFileSystem = new GPXFileSystem();
+	}
+	
+	public boolean isSupportedVersion() {
+		try {
+			this.gpxHeader = this.gpxFileSystem.getHeader( this.gpxStream );
+			
+			return this.gpxFileSystem.isSupportedHeader(this.gpxHeader);
+		} catch (Throwable throwable) {
+			return false;
+		}
+	}
+	
+	public TGSong readSong() throws TGFileFormatException {
+		try {
+			this.gpxFileSystem.load(this.gpxHeader, this.gpxStream);
+			
+			GPXDocumentReader gpxReader = new GPXDocumentReader( this.gpxFileSystem.getFileContentsAsStream("score.gpif"));
+			GPXDocumentParser gpxParser = new GPXDocumentParser( this.factory , gpxReader.read() );
+			
+			return gpxParser.parse();
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException( throwable );
+		}
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXInputStreamPlugin.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXInputStreamPlugin.java
new file mode 100644
index 0000000..714446f
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/GPXInputStreamPlugin.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.io.gpx;
+
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.io.plugin.TGInputStreamPlugin;
+
+public class GPXInputStreamPlugin extends TGInputStreamPlugin{
+	
+	public static final String MODULE_ID = "tuxguitar-gpx";
+	
+	protected TGInputStreamBase getInputStream() {
+		return new GPXInputStream();
+	}
+	
+	public String getModuleId() {
+		return MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXAutomation.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXAutomation.java
new file mode 100644
index 0000000..be49a8c
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXAutomation.java
@@ -0,0 +1,63 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXAutomation {
+	
+	private String type;
+	private int barId;
+	private int position;
+	private boolean linear;
+	private boolean visible;
+	private int[] value;
+	
+	public GPXAutomation(){
+		super();
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public int getBarId() {
+		return barId;
+	}
+
+	public void setBarId(int barId) {
+		this.barId = barId;
+	}
+
+	public int getPosition() {
+		return position;
+	}
+
+	public void setPosition(int position) {
+		this.position = position;
+	}
+
+	public boolean isLinear() {
+		return linear;
+	}
+
+	public void setLinear(boolean linear) {
+		this.linear = linear;
+	}
+
+	public boolean isVisible() {
+		return visible;
+	}
+
+	public void setVisible(boolean visible) {
+		this.visible = visible;
+	}
+
+	public int[] getValue() {
+		return value;
+	}
+
+	public void setValue(int[] value) {
+		this.value = value;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXBar.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXBar.java
new file mode 100644
index 0000000..a535fef
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXBar.java
@@ -0,0 +1,45 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXBar {
+	
+	private int id;
+	private int[] voiceIds;
+	private String clef;
+	private String simileMark;
+	
+	public GPXBar(){
+		super();
+	}
+	
+	public int getId() {
+		return this.id;
+	}
+	
+	public void setId(int id) {
+		this.id = id;
+	}
+	
+	public int[] getVoiceIds() {
+		return this.voiceIds;
+	}
+	
+	public void setVoiceIds(int[] voiceIds) {
+		this.voiceIds = voiceIds;
+	}
+	
+	public String getClef() {
+		return this.clef;
+	}
+	
+	public void setClef(String clef) {
+		this.clef = clef;
+	}
+
+	public String getSimileMark() {
+		return simileMark;
+	}
+
+	public void setSimileMark(String simileMark) {
+		this.simileMark = simileMark;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXBeat.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXBeat.java
new file mode 100644
index 0000000..84f63aa
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXBeat.java
@@ -0,0 +1,187 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXBeat {
+	
+	private int id;
+	private int rhythmId;
+	private int[] noteIds;
+	private String dynamic;
+	private boolean slapped;
+	private boolean popped;
+	private String brush;	// up stroke, down stroke
+	private int[] tremolo; // 1/8, 1/4, etc.
+	private boolean FadeIn;
+	private boolean FadeOut;
+	private String text;
+	
+	private boolean whammyBarEnabled;
+	private Integer whammyBarOriginValue;
+	private Integer whammyBarMiddleValue;
+	private Integer whammyBarDestinationValue;
+	private Integer whammyBarOriginOffset;
+	private Integer whammyBarMiddleOffset1;
+	private Integer whammyBarMiddleOffset2;
+	private Integer whammyBarDestinationOffset;
+	
+	public GPXBeat(){
+		this.slapped = false;
+		this.popped = false;
+		this.tremolo = null;
+		this.FadeIn = false;
+		this.FadeOut = false;
+		this.brush = new String();
+		this.text = new String();
+	}
+	
+	public int getId() {
+		return this.id;
+	}
+	
+	public void setId(int id) {
+		this.id = id;
+	}
+	
+	public int getRhythmId() {
+		return this.rhythmId;
+	}
+	
+	public void setRhythmId(int rhythmId) {
+		this.rhythmId = rhythmId;
+	}
+	
+	public int[] getNoteIds() {
+		return this.noteIds;
+	}
+	
+	public void setNoteIds(int[] noteIds) {
+		this.noteIds = noteIds;
+	}
+	
+	public String getDynamic() {
+		return this.dynamic;
+	}
+	
+	public void setDynamic(String dynamic) {
+		this.dynamic = dynamic;
+	}
+
+	public boolean isSlapped() {
+		return slapped;
+	}
+
+	public void setSlapped(boolean slapped) {
+		this.slapped = slapped;
+	}
+
+	public boolean isPopped() {
+		return popped;
+	}
+
+	public void setPopped(boolean popped) {
+		this.popped = popped;
+	}
+
+	public String getBrush() {
+		return brush;
+	}
+
+	public void setBrush(String brush) {
+		this.brush = brush;
+	}
+
+	public int[] getTremolo() {
+		return tremolo;
+	}
+
+	public void setTremolo(int[] tremolo) {
+		this.tremolo = tremolo;
+	}
+
+	public boolean isFadeIn() {
+		return FadeIn;
+	}
+
+	public void setFadeIn(boolean fadeIn) {
+		FadeIn = fadeIn;
+	}
+
+	public boolean isFadeOut() {
+		return FadeOut;
+	}
+
+	public void setFadeOut(boolean fadeOut) {
+		FadeOut = fadeOut;
+	}
+
+	public String getText() {
+		return text;
+	}
+
+	public void setText(String text) {
+		this.text = text;
+	}
+
+	public boolean isWhammyBarEnabled() {
+		return whammyBarEnabled;
+	}
+
+	public void setWhammyBarEnabled(boolean whammyBarEnabled) {
+		this.whammyBarEnabled = whammyBarEnabled;
+	}
+
+	public Integer getWhammyBarOriginValue() {
+		return whammyBarOriginValue;
+	}
+
+	public void setWhammyBarOriginValue(Integer whammyBarOriginValue) {
+		this.whammyBarOriginValue = whammyBarOriginValue;
+	}
+
+	public Integer getWhammyBarMiddleValue() {
+		return whammyBarMiddleValue;
+	}
+
+	public void setWhammyBarMiddleValue(Integer whammyBarMiddleValue) {
+		this.whammyBarMiddleValue = whammyBarMiddleValue;
+	}
+
+	public Integer getWhammyBarDestinationValue() {
+		return whammyBarDestinationValue;
+	}
+
+	public void setWhammyBarDestinationValue(Integer whammyBarDestinationValue) {
+		this.whammyBarDestinationValue = whammyBarDestinationValue;
+	}
+
+	public Integer getWhammyBarOriginOffset() {
+		return whammyBarOriginOffset;
+	}
+
+	public void setWhammyBarOriginOffset(Integer whammyBarOriginOffset) {
+		this.whammyBarOriginOffset = whammyBarOriginOffset;
+	}
+
+	public Integer getWhammyBarMiddleOffset1() {
+		return whammyBarMiddleOffset1;
+	}
+
+	public void setWhammyBarMiddleOffset1(Integer whammyBarMiddleOffset1) {
+		this.whammyBarMiddleOffset1 = whammyBarMiddleOffset1;
+	}
+
+	public Integer getWhammyBarMiddleOffset2() {
+		return whammyBarMiddleOffset2;
+	}
+
+	public void setWhammyBarMiddleOffset2(Integer whammyBarMiddleOffset2) {
+		this.whammyBarMiddleOffset2 = whammyBarMiddleOffset2;
+	}
+
+	public Integer getWhammyBarDestinationOffset() {
+		return whammyBarDestinationOffset;
+	}
+
+	public void setWhammyBarDestinationOffset(Integer whammyBarDestinationOffset) {
+		this.whammyBarDestinationOffset = whammyBarDestinationOffset;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXDocument.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXDocument.java
new file mode 100644
index 0000000..d9ce171
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXDocument.java
@@ -0,0 +1,136 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class GPXDocument {
+	
+	private GPXScore score;
+	private List tracks;
+	private List masterBars;
+	private List bars;
+	private List voices;
+	private List beats;
+	private List notes;
+	private List rhythms;
+	private List automations;
+	
+	public GPXDocument(){
+		this.score = new GPXScore();
+		this.tracks = new ArrayList();
+		this.masterBars = new ArrayList();
+		this.bars = new ArrayList();
+		this.voices = new ArrayList();
+		this.beats = new ArrayList();
+		this.notes = new ArrayList();
+		this.rhythms = new ArrayList();
+		this.automations = new ArrayList();
+	}
+	
+	public GPXScore getScore(){
+		return this.score;
+	}
+	
+	public List getTracks() {
+		return this.tracks;
+	}
+	
+	public List getMasterBars() {
+		return this.masterBars;
+	}
+	
+	public List getBars() {
+		return this.bars;
+	}
+	
+	public List getVoices() {
+		return this.voices;
+	}
+	
+	public List getBeats() {
+		return this.beats;
+	}
+	
+	public List getNotes() {
+		return this.notes;
+	}
+	
+	public List getRhythms() {
+		return this.rhythms;
+	}
+	
+	public List getAutomations() {
+		return this.automations;
+	}
+	
+	public GPXBar getBar( int id ){
+		Iterator it = this.bars.iterator();
+		while( it.hasNext() ){
+			GPXBar bar = (GPXBar)it.next();
+			if( bar.getId() == id ){
+				return bar;
+			}
+		}
+		return null;
+	}
+	
+	public GPXVoice getVoice( int id ){
+		Iterator it = this.voices.iterator();
+		while( it.hasNext() ){
+			GPXVoice voice = (GPXVoice)it.next();
+			if( voice.getId() == id ){
+				return voice;
+			}
+		}
+		return null;
+	}
+	
+	public GPXBeat getBeat( int id ){
+		Iterator it = this.beats.iterator();
+		while( it.hasNext() ){
+			GPXBeat beat = (GPXBeat)it.next();
+			if( beat.getId() == id ){
+				return beat;
+			}
+		}
+		return null;
+	}
+	
+	public GPXNote getNote( int id ){
+		Iterator it = this.notes.iterator();
+		while( it.hasNext() ){
+			GPXNote note = (GPXNote)it.next();
+			if( note.getId() == id ){
+				return note;
+			}
+		}
+		return null;
+	}
+	
+	public GPXRhythm getRhythm( int id ){
+		Iterator it = this.rhythms.iterator();
+		while( it.hasNext() ){
+			GPXRhythm rhythm = (GPXRhythm)it.next();
+			if( rhythm.getId() == id ){
+				return rhythm;
+			}
+		}
+		return null;
+	}
+	
+	public GPXAutomation getAutomation( String type, int untilBarId ){
+		GPXAutomation result = null;
+		
+		Iterator it = this.automations.iterator();
+		while( it.hasNext() ){
+			GPXAutomation automation = (GPXAutomation)it.next();
+			if( automation.getType() != null && automation.getType().equals( type ) ){
+				if( automation.getBarId() <= untilBarId  && ( result == null || automation.getBarId() > result.getBarId() )){
+					result = automation;
+				}
+			}
+		}
+		return result;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXDrumkit.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXDrumkit.java
new file mode 100644
index 0000000..01ffba7
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXDrumkit.java
@@ -0,0 +1,50 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXDrumkit {
+	
+	public static final GPXDrumkit[] DRUMKITS = new GPXDrumkit[]{
+		new GPXDrumkit(36, 0 , 0),
+		new GPXDrumkit(36, 0 , 0),
+		new GPXDrumkit(37, 1 , 2),
+		new GPXDrumkit(38, 1 , 0),
+		new GPXDrumkit(41, 5 ,0),
+		new GPXDrumkit(42, 10 ,0),
+		new GPXDrumkit(43, 6 ,0),
+		new GPXDrumkit(44, 11 ,0),
+		new GPXDrumkit(45, 7 ,0),
+		new GPXDrumkit(46, 10 ,2),
+		new GPXDrumkit(47, 8 ,0),
+		new GPXDrumkit(48, 9 ,0),
+		new GPXDrumkit(49, 12 ,0),
+		new GPXDrumkit(50, 9 ,0),
+		new GPXDrumkit(51, 15 ,0),
+		new GPXDrumkit(52, 16 ,0),
+		new GPXDrumkit(53, 15 ,2),
+		new GPXDrumkit(55, 14 ,0),
+		new GPXDrumkit(56, 3 ,0),
+		new GPXDrumkit(57, 13 ,0),
+		new GPXDrumkit(59, 15 ,1),
+	};
+	
+	private int element;
+	private int variation;
+	private int midiValue;
+	
+	public GPXDrumkit(int midiValue, int element, int variation){
+		this.midiValue = midiValue;
+		this.element = element;
+		this.variation = variation;
+	}
+
+	public int getElement() {
+		return element;
+	}
+
+	public int getVariation() {
+		return variation;
+	}
+
+	public int getMidiValue() {
+		return midiValue;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXMasterBar.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXMasterBar.java
new file mode 100644
index 0000000..13133ba
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXMasterBar.java
@@ -0,0 +1,74 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXMasterBar {
+	
+	private int[] barIds;
+	private int[] time;
+	
+	private int repeatCount;
+	private boolean repeatStart;
+	private int accidentalCount;
+	private String mode;
+	private String tripletFeel;
+	
+	public GPXMasterBar(){
+		this.accidentalCount = 0;
+		this.mode = null;
+	}
+	
+	public int[] getBarIds() {
+		return this.barIds;
+	}
+	
+	public void setBarIds(int[] barIds) {
+		this.barIds = barIds;
+	}
+	
+	public int[] getTime() {
+		return time;
+	}
+	
+	public void setTime(int[] time) {
+		this.time = time;
+	}
+
+	public int getRepeatCount() {
+		return repeatCount;
+	}
+
+	public void setRepeatCount(int repeatCount) {
+		this.repeatCount = repeatCount;
+	}
+
+	public boolean isRepeatStart() {
+		return repeatStart;
+	}
+
+	public void setRepeatStart(boolean repeatStart) {
+		this.repeatStart = repeatStart;
+	}
+
+	public int getAccidentalCount() {
+		return accidentalCount;
+	}
+
+	public void setAccidentalCount(int accidentalCount) {
+		this.accidentalCount = accidentalCount;
+	}
+
+	public String getMode() {
+		return mode;
+	}
+
+	public void setMode(String mode) {
+		this.mode = mode;
+	}
+
+	public String getTripletFeel() {
+		return this.tripletFeel;
+	}
+	
+	public void setTripletFeel(String tripletFeel) {
+		this.tripletFeel = tripletFeel;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXNote.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXNote.java
new file mode 100644
index 0000000..daa47b8
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXNote.java
@@ -0,0 +1,288 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXNote {
+	
+	private int id;
+	private int fret;
+	private int string;
+	private int tone;
+	private int octave;
+	private int element;
+	private int trill;
+	private int variation;
+	private int midiNumber;
+	// bends are measured in % of full step.  100 = full step, not 100 (cents) = half step
+	private boolean bendEnabled;
+	private Integer bendOriginValue;
+	private Integer bendMiddleValue;
+	private Integer bendDestinationValue;
+	private Integer bendOriginOffset;
+	private Integer bendMiddleOffset1;
+	private Integer bendMiddleOffset2;
+	private Integer bendDestinationOffset;
+	
+	private boolean hammer;
+	private boolean ghost;
+	private boolean slide;
+	private int slideFlags;	// 1, 2, 4, 8, 16 - 2 seems to be up, 4 seems to be down.
+	private boolean vibrato;
+	private int accent;
+	private boolean tapped;
+	private boolean tieDestination;
+	private boolean mutedEnabled;
+	private boolean palmMutedEnabled;
+	
+	private int harmonicFret;
+	private String harmonicType;
+
+	public GPXNote(){
+		super();
+		this.id = -1;
+		this.fret = -1;
+		this.string = -1;
+		this.tone = -1;
+		this.octave = -1;
+		this.element = -1;
+		this.variation = -1;
+		this.midiNumber = -1;
+		this.hammer = false;
+		this.ghost = false;
+		this.trill = 0;
+		this.accent = 0;
+		this.slideFlags = 0;
+		this.harmonicType = "";
+		this.harmonicFret = -1;
+	}
+	
+	public int getId() {
+		return this.id;
+	}
+	
+	public void setId(int id) {
+		this.id = id;
+	}
+	
+	public int getFret() {
+		return this.fret;
+	}
+	
+	public void setFret(int fret) {
+		this.fret = fret;
+	}
+	
+	public int getString() {
+		return this.string;
+	}
+	
+	public void setString(int string) {
+		this.string = string;
+	}
+	
+	public int getTone() {
+		return tone;
+	}
+	
+	public void setTone(int tone) {
+		this.tone = tone;
+	}
+	
+	public int getOctave() {
+		return octave;
+	}
+	
+	public void setOctave(int octave) {
+		this.octave = octave;
+	}
+	
+	public boolean isTieDestination() {
+		return tieDestination;
+	}
+	
+	public void setTieDestination(boolean tieDestination) {
+		this.tieDestination = tieDestination;
+	}
+
+	public boolean isMutedEnabled() {
+		return mutedEnabled;
+	}
+
+	public void setMutedEnabled(boolean mutedEnabled) {
+		this.mutedEnabled = mutedEnabled;
+	}
+
+	public boolean isPalmMutedEnabled() {
+		return palmMutedEnabled;
+	}
+
+	public void setPalmMutedEnabled(boolean palmMutedEnabled) {
+		this.palmMutedEnabled = palmMutedEnabled;
+	}
+
+	public boolean isSlide() {
+		return slide;
+	}
+
+	public void setSlide(boolean slide) {
+		this.slide = slide;
+	}
+
+	public boolean isVibrato() {
+		return vibrato;
+	}
+
+	public void setVibrato(boolean vibrato) {
+		this.vibrato = vibrato;
+	}
+
+	public int getElement() {
+		return element;
+	}
+
+	public void setElement(int element) {
+		this.element = element;
+	}
+
+	public int getVariation() {
+		return variation;
+	}
+
+	public void setVariation(int variation) {
+		this.variation = variation;
+	}
+
+	public int getMidiNumber() {
+		return midiNumber;
+	}
+
+	public void setMidiNumber(int midiNumber) {
+		this.midiNumber = midiNumber;
+	}
+
+	public int getTrill() {
+		return trill;
+	}
+
+	public void setTrill(int trill) {
+		this.trill = trill;
+	}
+
+	public boolean isBendEnabled() {
+		return bendEnabled;
+	}
+
+	public void setBendEnabled(boolean bendEnabled) {
+		this.bendEnabled = bendEnabled;
+	}
+
+	public Integer getBendOriginValue() {
+		return bendOriginValue;
+	}
+
+	public void setBendOriginValue(Integer bendOriginValue) {
+		this.bendOriginValue = bendOriginValue;
+	}
+
+	public Integer getBendMiddleValue() {
+		return bendMiddleValue;
+	}
+
+	public void setBendMiddleValue(Integer bendMiddleValue) {
+		this.bendMiddleValue = bendMiddleValue;
+	}
+
+	public Integer getBendDestinationValue() {
+		return bendDestinationValue;
+	}
+
+	public void setBendDestinationValue(Integer bendDestinationValue) {
+		this.bendDestinationValue = bendDestinationValue;
+	}
+
+	public Integer getBendOriginOffset() {
+		return bendOriginOffset;
+	}
+
+	public void setBendOriginOffset(Integer bendOriginOffset) {
+		this.bendOriginOffset = bendOriginOffset;
+	}
+
+	public Integer getBendMiddleOffset1() {
+		return bendMiddleOffset1;
+	}
+
+	public void setBendMiddleOffset1(Integer bendMiddleOffset1) {
+		this.bendMiddleOffset1 = bendMiddleOffset1;
+	}
+
+	public Integer getBendMiddleOffset2() {
+		return bendMiddleOffset2;
+	}
+
+	public void setBendMiddleOffset2(Integer bendMiddleOffset2) {
+		this.bendMiddleOffset2 = bendMiddleOffset2;
+	}
+
+	public Integer getBendDestinationOffset() {
+		return bendDestinationOffset;
+	}
+
+	public void setBendDestinationOffset(Integer bendDestinationOffset) {
+		this.bendDestinationOffset = bendDestinationOffset;
+	}
+
+	public boolean isHammer() {
+		return hammer;
+	}
+
+	public void setHammer(boolean hammer) {
+		this.hammer = hammer;
+	}
+
+	public boolean isGhost() {
+		return ghost;
+	}
+
+	public void setGhost(boolean ghost) {
+		this.ghost = ghost;
+	}
+
+	public int getSlideFlags() {
+		return slideFlags;
+	}
+
+	public void setSlideFlags(int slideFlags) {
+		this.slideFlags = slideFlags;
+	}
+
+	public int getAccent() {
+		return accent;
+	}
+
+	public void setAccent(int accent) {
+		this.accent = accent;
+	}
+
+	public boolean isTapped() {
+		return tapped;
+	}
+
+	public void setTapped(boolean tapped) {
+		this.tapped = tapped;
+	}
+	
+	public int getHarmonicFret() {
+		return harmonicFret;
+	}
+
+	public void setHarmonicFret(int harmonicFret) {
+		this.harmonicFret = harmonicFret;
+	}
+
+	public String getHarmonicType() {
+		return harmonicType;
+	}
+
+	public void setHarmonicType(String harmonicType) {
+		this.harmonicType = harmonicType;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXRhythm.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXRhythm.java
new file mode 100644
index 0000000..d585d9b
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXRhythm.java
@@ -0,0 +1,54 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXRhythm {
+	
+	private int id;
+	private int augmentationDotCount;
+	private int primaryTupletNum;
+	private int primaryTupletDen;
+	private String noteValue;
+	
+	public GPXRhythm(){
+		super();
+	}
+
+	public int getId() {
+		return id;
+	}
+
+	public void setId(int id) {
+		this.id = id;
+	}
+
+	public String getNoteValue() {
+		return noteValue;
+	}
+
+	public void setNoteValue(String noteValue) {
+		this.noteValue = noteValue;
+	}
+
+	public int getAugmentationDotCount() {
+		return augmentationDotCount;
+	}
+
+	public void setAugmentationDotCount(int augmentationDotCount) {
+		this.augmentationDotCount = augmentationDotCount;
+	}
+
+	public int getPrimaryTupletNum() {
+		return primaryTupletNum;
+	}
+
+	public void setPrimaryTupletNum(int primaryTupletNum) {
+		this.primaryTupletNum = primaryTupletNum;
+	}
+
+	public int getPrimaryTupletDen() {
+		return primaryTupletDen;
+	}
+
+	public void setPrimaryTupletDen(int primaryTupletDen) {
+		this.primaryTupletDen = primaryTupletDen;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXScore.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXScore.java
new file mode 100644
index 0000000..e654b78
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXScore.java
@@ -0,0 +1,108 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXScore {
+	
+	private String title;
+	private String subTitle;
+	private String artist;
+	private String album;
+	private String words;
+	private String music;
+	private String wordsAndMusic;
+	private String copyright;
+	private String tabber;
+	private String instructions;
+	private String notices;
+	
+	public GPXScore(){
+		super();
+	}
+
+	public String getTitle() {
+		return title;
+	}
+
+	public void setTitle(String title) {
+		this.title = title;
+	}
+
+	public String getSubTitle() {
+		return subTitle;
+	}
+
+	public void setSubTitle(String subTitle) {
+		this.subTitle = subTitle;
+	}
+
+	public String getArtist() {
+		return artist;
+	}
+
+	public void setArtist(String artist) {
+		this.artist = artist;
+	}
+
+	public String getAlbum() {
+		return album;
+	}
+
+	public void setAlbum(String album) {
+		this.album = album;
+	}
+
+	public String getWords() {
+		return words;
+	}
+
+	public void setWords(String words) {
+		this.words = words;
+	}
+
+	public String getMusic() {
+		return music;
+	}
+
+	public void setMusic(String music) {
+		this.music = music;
+	}
+
+	public String getWordsAndMusic() {
+		return wordsAndMusic;
+	}
+
+	public void setWordsAndMusic(String wordsAndMusic) {
+		this.wordsAndMusic = wordsAndMusic;
+	}
+
+	public String getCopyright() {
+		return copyright;
+	}
+
+	public void setCopyright(String copyright) {
+		this.copyright = copyright;
+	}
+
+	public String getTabber() {
+		return tabber;
+	}
+
+	public void setTabber(String tabber) {
+		this.tabber = tabber;
+	}
+
+	public String getInstructions() {
+		return instructions;
+	}
+
+	public void setInstructions(String instructions) {
+		this.instructions = instructions;
+	}
+
+	public String getNotices() {
+		return notices;
+	}
+
+	public void setNotices(String notices) {
+		this.notices = notices;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXTrack.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXTrack.java
new file mode 100644
index 0000000..3fd41f2
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXTrack.java
@@ -0,0 +1,73 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXTrack {
+	
+	private int id;
+	private int[] tunningPitches;
+	private int[] color;
+	private String name;
+	
+	private int gmProgram;
+	private int gmChannel1;
+	private int gmChannel2;
+	
+	public GPXTrack(){
+		super();
+	}
+	
+	public int getId() {
+		return this.id;
+	}
+	
+	public void setId(int id) {
+		this.id = id;
+	}
+	
+	public int[] getTunningPitches() {
+		return this.tunningPitches;
+	}
+	
+	public void setTunningPitches(int[] tunningPitches) {
+		this.tunningPitches = tunningPitches;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public int[] getColor() {
+		return color;
+	}
+	
+	public void setColor(int[] color) {
+		this.color = color;
+	}
+	
+	public int getGmProgram() {
+		return gmProgram;
+	}
+	
+	public void setGmProgram(int gmProgram) {
+		this.gmProgram = gmProgram;
+	}
+
+	public int getGmChannel1() {
+		return gmChannel1;
+	}
+
+	public void setGmChannel1(int gmChannel1) {
+		this.gmChannel1 = gmChannel1;
+	}
+
+	public int getGmChannel2() {
+		return gmChannel2;
+	}
+
+	public void setGmChannel2(int gmChannel2) {
+		this.gmChannel2 = gmChannel2;
+	}
+}
diff --git a/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXVoice.java b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXVoice.java
new file mode 100644
index 0000000..c22479e
--- /dev/null
+++ b/TuxGuitar-gpx/src/org/herac/tuxguitar/io/gpx/score/GPXVoice.java
@@ -0,0 +1,27 @@
+package org.herac.tuxguitar.io.gpx.score;
+
+public class GPXVoice {
+	
+	private int id;
+	private int[] beatIds;
+	
+	public GPXVoice(){
+		super();
+	}
+	
+	public int getId() {
+		return this.id;
+	}
+	
+	public void setId(int id) {
+		this.id = id;
+	}
+	
+	public int[] getBeatIds() {
+		return this.beatIds;
+	}
+	
+	public void setBeatIds(int[] beatIds) {
+		this.beatIds = beatIds;
+	}
+}
diff --git a/TuxGuitar-gtp/GNUmakefile b/TuxGuitar-gtp/GNUmakefile
deleted file mode 100644
index 43363bc..0000000
--- a/TuxGuitar-gtp/GNUmakefile
+++ /dev/null
@@ -1,89 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:24 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-gtp
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.io.gtp.GTPPluginList
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SETTINGS_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/
-INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# resources
-LANGUAGE?=./share/lang
-SETTINGS=$(PACKAGE).cfg
-DEFAULT_SETTINGS_CHARSET?="charset=ISO-8859-15"
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf settings
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SETTINGS_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR)
-	-install $(SETTINGS) $(DESTDIR)$(INSTALL_SETTINGS_DIR)/$(SETTINGS)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-	-rm $(DESTDIR)$(INSTALL_SETTINGS_DIR)/$(SETTINGS)
-	-rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/*
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-	- at rm $(SETTINGS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-settings:
-	echo $(DEFAULT_SETTINGS_CHARSET) > $(SETTINGS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:24 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-gtp/build.properties b/TuxGuitar-gtp/build.properties
index d6ee8be..94080dc 100644
--- a/TuxGuitar-gtp/build.properties
+++ b/TuxGuitar-gtp/build.properties
@@ -4,7 +4,7 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
 path.swt=../TuxGuitar/lib/swt.jar
-
-gtp.charset.default=ISO-8859-15
diff --git a/TuxGuitar-gtp/build.xml b/TuxGuitar-gtp/build.xml
index 744a53c..0e6f5d8 100644
--- a/TuxGuitar-gtp/build.xml
+++ b/TuxGuitar-gtp/build.xml
@@ -9,13 +9,11 @@
 	<property name="build.src.path" value="src${file.separator}" />
 	<property name="build.share.path" value="share${file.separator}" />
 	<property name="build.path" value="build${file.separator}" />
-	<property name="build.cfg" value="tuxguitar-gtp.cfg" />
 	<property name="build.jar" value="tuxguitar-gtp.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.gtp.GTPPluginList" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -34,16 +32,10 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}${file.separator}lang" />
-		<copy todir="${build.path}${file.separator}lang">
-			<fileset dir="${build.share.path}${file.separator}lang"/>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
 		</copy>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
-		
-		<echo file="${build.path}/${build.cfg}" append="false">charset=${gtp.charset.default}</echo>
-		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
 		<echo>+-----------------------------------------------+</echo>
diff --git a/TuxGuitar-gtp/pom.xml b/TuxGuitar-gtp/pom.xml
new file mode 100644
index 0000000..a08ef52
--- /dev/null
+++ b/TuxGuitar-gtp/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-gtp</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-gtp/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-gtp/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..dec8526
--- /dev/null
+++ b/TuxGuitar-gtp/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,9 @@
+org.herac.tuxguitar.io.gtp.GP1InputStreamPlugin
+org.herac.tuxguitar.io.gtp.GP2InputStreamPlugin
+org.herac.tuxguitar.io.gtp.GP3InputStreamPlugin
+org.herac.tuxguitar.io.gtp.GP3OutputStreamPlugin
+org.herac.tuxguitar.io.gtp.GP4InputStreamPlugin
+org.herac.tuxguitar.io.gtp.GP4OutputStreamPlugin
+org.herac.tuxguitar.io.gtp.GP5InputStreamPlugin
+org.herac.tuxguitar.io.gtp.GP5OutputStreamPlugin
+org.herac.tuxguitar.io.gtp.GTPSettingsPlugin
diff --git a/TuxGuitar-gtp/share/META-INF/tuxguitar-gtp.info b/TuxGuitar-gtp/share/META-INF/tuxguitar-gtp.info
new file mode 100644
index 0000000..80fd083
--- /dev/null
+++ b/TuxGuitar-gtp/share/META-INF/tuxguitar-gtp.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Guitar Pro File Format plugin
+plugin.description=Guitar Pro File Format plugin for TuxGuitar
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-gtp/share/tuxguitar-gtp.cfg b/TuxGuitar-gtp/share/tuxguitar-gtp.cfg
new file mode 100644
index 0000000..a13a72a
--- /dev/null
+++ b/TuxGuitar-gtp/share/tuxguitar-gtp.cfg
@@ -0,0 +1,3 @@
+## Default Settings ##
+
+charset=ISO-8859-15
\ No newline at end of file
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP1InputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP1InputStream.java
index 99ab2f1..db70c98 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP1InputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP1InputStream.java
@@ -3,9 +3,13 @@ package org.herac.tuxguitar.io.gtp;
 import java.io.IOException;
 import java.util.Iterator;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.song.managers.TGSongManager;
 import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
@@ -35,14 +39,14 @@ public class GP1InputStream extends GTPInputStream {
 	};
 	
 	private static final short TRACK_CHANNELS[][] = new short[][]{
-		new short[]{0,1},
-		new short[]{2,3},
-		new short[]{4,5},
-		new short[]{6,7},
-		new short[]{8,10},
-		new short[]{11,12},
-		new short[]{13,14},
-		new short[]{9,9},
+		new short[]{1,0,1},
+		new short[]{2,2,3},
+		new short[]{3,4,5},
+		new short[]{4,6,7},
+		new short[]{5,8,10},
+		new short[]{6,11,12},
+		new short[]{7,13,14},
+		new short[]{8,9,9},
 	};
 	
 	private int trackCount;
@@ -55,71 +59,91 @@ public class GP1InputStream extends GTPInputStream {
 		return new TGFileFormat("Guitar Pro","*.gtp");
 	}
 	
-	public TGSong readSong() throws GTPFormatException, IOException {
-		readVersion();
-		if (!isSupportedVersion(getVersion())) {
-			this.close();
-			throw new GTPFormatException("Unsupported Version");
-		}
-		this.trackCount = ((getVersionIndex() > 2)?8:1);
-		
-		TGSong song = getFactory().newSong();
-		
-		readInfo(song);
-		
-		int tempo = readInt();
-		int tripletFeel = ((readInt() == 1)?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE);
-		
-		if(getVersionIndex() > 2){
-			readInt(); //key
-		}
-		
-		for (int i = 0; i < this.trackCount; i++) {
-			TGTrack track = getFactory().newTrack();
-			track.setNumber( (i + 1) );
-			track.getChannel().setChannel(TRACK_CHANNELS[ i ][0]);
-			track.getChannel().setEffectChannel(TRACK_CHANNELS[ i ][1]);
-			TGColor.RED.copy(track.getColor());
+	public TGSong readSong() throws TGFileFormatException {
+		try{
+			readVersion();
+			if (!isSupportedVersion(getVersion())) {
+				this.close();
+				throw new GTPFormatException("Unsupported Version");
+			}
+			this.trackCount = ((getVersionIndex() > 2)?8:1);
+			
+			TGSong song = getFactory().newSong();
 			
-			int strings = ((getVersionIndex() > 1)?readInt():6);
-			for (int j = 0; j < strings; j++) {
-				TGString string = getFactory().newString();
-				string.setNumber( j + 1 );
-				string.setValue( readInt() );
-				track.getStrings().add( string  );
+			readInfo(song);
+			
+			int tempo = readInt();
+			int tripletFeel = ((readInt() == 1)?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE);
+			
+			if(getVersionIndex() > 2){
+				readInt(); //key
 			}
-			song.addTrack(track);
-		}
-		
-		int measureCount = readInt();
-		
-		for (int i = 0; i < this.trackCount; i++) {
-			readTrack(song.getTrack(i));
-		}
-		
-		if(getVersionIndex() > 2){
-			skip(10);
-		}
-		
-		TGMeasureHeader previous = null;
-		long[] lastReadedStarts = new long[this.trackCount];
-		for (int i = 0; i < measureCount; i++) {
-			TGMeasureHeader header = getFactory().newHeader();
-			header.setStart( (previous == null)?TGDuration.QUARTER_TIME:(previous.getStart() + previous.getLength()) );
-			header.setNumber( (previous == null)?1:previous.getNumber() + 1 );
-			header.getTempo().setValue( (previous == null)?tempo:previous.getTempo().getValue() );
-			header.setTripletFeel(tripletFeel);
-			readTrackMeasures(song,header,lastReadedStarts);
-			previous = header;
+			
+			for (int i = 0; i < this.trackCount; i++) {
+				TGChannel channel = getFactory().newChannel();
+				TGChannelParameter gmChannel1Param = getFactory().newChannelParameter();
+				TGChannelParameter gmChannel2Param = getFactory().newChannelParameter();
+				
+				gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+				gmChannel1Param.setValue(Integer.toString(TRACK_CHANNELS[ i ][1]));
+				gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+				gmChannel2Param.setValue(Integer.toString(TRACK_CHANNELS[ i ][2]));
+				
+				channel.setChannelId(TRACK_CHANNELS[ i ][0]);
+				channel.addParameter(gmChannel1Param);
+				channel.addParameter(gmChannel2Param);
+				song.addChannel(channel);
+			}
+			for (int i = 0; i < this.trackCount; i++) {
+				TGTrack track = getFactory().newTrack();
+				track.setNumber( (i + 1) );
+				track.setChannelId(TRACK_CHANNELS[ i ][0]);
+				TGColor.RED.copy(track.getColor());
+				
+				int strings = ((getVersionIndex() > 1)?readInt():6);
+				for (int j = 0; j < strings; j++) {
+					TGString string = getFactory().newString();
+					string.setNumber( j + 1 );
+					string.setValue( readInt() );
+					track.getStrings().add( string  );
+				}
+				song.addTrack(track);
+			}
+			
+			int measureCount = readInt();
+			
+			for (int i = 0; i < this.trackCount; i++) {
+				readTrack(song.getTrack(i), song.getChannel(i));
+			}
+			
+			if(getVersionIndex() > 2){
+				skip(10);
+			}
+			
+			TGMeasureHeader previous = null;
+			long[] lastReadedStarts = new long[this.trackCount];
+			for (int i = 0; i < measureCount; i++) {
+				TGMeasureHeader header = getFactory().newHeader();
+				header.setStart( (previous == null)?TGDuration.QUARTER_TIME:(previous.getStart() + previous.getLength()) );
+				header.setNumber( (previous == null)?1:previous.getNumber() + 1 );
+				header.getTempo().setValue( (previous == null)?tempo:previous.getTempo().getValue() );
+				header.setTripletFeel(tripletFeel);
+				readTrackMeasures(song,header,lastReadedStarts);
+				previous = header;
+			}
+			
+			TGSongManager manager = new TGSongManager(getFactory());
+			manager.setSong(song);
+			manager.autoCompleteSilences();
+			
+			this.close();
+			
+			return song;
+		} catch (GTPFormatException gtpFormatException) {
+			throw gtpFormatException;
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
 		}
-		
-		TGSongManager manager = new TGSongManager(getFactory());
-		manager.setSong(song);
-		manager.autoCompleteSilences();
-		
-		this.close();
-		
-		return song;
 	}
 	
 	private void readInfo(TGSong song) throws IOException{
@@ -310,17 +334,17 @@ public class GP1InputStream extends GTPInputStream {
 		skip(1);
 	}
 	
-	private void readTrack(TGTrack track) throws IOException {
+	private void readTrack(TGTrack track, TGChannel channel) throws IOException {
 		track.setName("Track 1");
-		track.getChannel().setInstrument((short)readInt());
+		channel.setProgram((short)readInt());
 		if (getVersionIndex() > 2) {
 			readInt(); // Number of frets
 			track.setName(readStringByteSizeOfByte());
 			track.setSolo(readBoolean());
-			track.getChannel().setVolume((short)readInt());
-			track.getChannel().setBalance((short)readInt());
-			track.getChannel().setChorus((short)readInt());
-			track.getChannel().setReverb((short)readInt());
+			channel.setVolume((short)readInt());
+			channel.setBalance((short)readInt());
+			channel.setChorus((short)readInt());
+			channel.setReverb((short)readInt());
 			track.setOffset(readInt());
 		}
 	}
@@ -376,7 +400,7 @@ public class GP1InputStream extends GTPInputStream {
 	}
 	
 	private int getClef( TGTrack track ){
-		if( !track.isPercussionTrack() ){
+		if(!isPercussionChannel(track.getSong(),track.getChannelId())){
 			Iterator it = track.getStrings().iterator();
 			while( it.hasNext() ){
 				TGString string = (TGString) it.next();
@@ -413,4 +437,15 @@ public class GP1InputStream extends GTPInputStream {
 		}
 		return null;
 	}
+	
+	private boolean isPercussionChannel( TGSong song, int channelId ){
+		Iterator it = song.getChannels();
+		while( it.hasNext() ){
+			TGChannel channel = (TGChannel)it.next();
+			if( channel.getChannelId() == channelId ){
+				return channel.isPercussionChannel();
+			}
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP1InputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP1InputStreamPlugin.java
new file mode 100644
index 0000000..d5ff2f6
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP1InputStreamPlugin.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.io.gtp;
+
+public class GP1InputStreamPlugin extends GTPInputStreamPlugin{
+
+	public GP1InputStreamPlugin() {
+		super(new GP1InputStream(GTPSettingsUtil.instance().getSettings()));
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP2InputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP2InputStream.java
index 32823d2..2d75fba 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP2InputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP2InputStream.java
@@ -3,9 +3,13 @@ package org.herac.tuxguitar.io.gtp;
 import java.io.IOException;
 import java.util.Iterator;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.song.managers.TGSongManager;
 import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
@@ -36,14 +40,14 @@ public class GP2InputStream extends GTPInputStream {
 	private static final int TRACK_COUNT = 8;
 	
 	private static final short TRACK_CHANNELS[][] = new short[][]{
-		new short[]{0,1},
-		new short[]{2,3},
-		new short[]{4,5},
-		new short[]{6,7},
-		new short[]{8,10},
-		new short[]{11,12},
-		new short[]{13,14},
-		new short[]{9,9},
+		new short[]{1,0,1},
+		new short[]{2,2,3},
+		new short[]{3,4,5},
+		new short[]{4,6,7},
+		new short[]{5,8,10},
+		new short[]{6,11,12},
+		new short[]{7,13,14},
+		new short[]{8,9,9},
 	};
 	
 	public GP2InputStream(GTPSettings settings){
@@ -54,65 +58,85 @@ public class GP2InputStream extends GTPInputStream {
 		return new TGFileFormat("Guitar Pro 2","*.gtp");
 	}
 	
-	public TGSong readSong() throws GTPFormatException, IOException {
-		readVersion();
-		if (!isSupportedVersion(getVersion())) {
-			this.close();
-			throw new GTPFormatException("Unsupported Version");
-		}
-		TGSong song = getFactory().newSong();
-		
-		readInfo(song);
-		
-		int tempo = readInt();
-		int tripletFeel = ((readInt() == 1)?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE);
-		
-		readInt(); //key
-		
-		for (int i = 0; i < TRACK_COUNT; i++) {
-			TGTrack track = getFactory().newTrack();
-			track.setNumber( (i + 1) );
-			track.getChannel().setChannel(TRACK_CHANNELS[ i ][0]);
-			track.getChannel().setEffectChannel(TRACK_CHANNELS[ i ][1]);
-			TGColor.RED.copy(track.getColor());
+	public TGSong readSong() throws TGFileFormatException {
+		try{
+			readVersion();
+			if (!isSupportedVersion(getVersion())) {
+				this.close();
+				throw new GTPFormatException("Unsupported Version");
+			}
+			TGSong song = getFactory().newSong();
+			
+			readInfo(song);
+			
+			int tempo = readInt();
+			int tripletFeel = ((readInt() == 1)?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE);
 			
-			int strings = readInt();
-			for (int j = 0; j < strings; j++) {
-				TGString string = getFactory().newString();
-				string.setNumber( j + 1 );
-				string.setValue( readInt() );
-				track.getStrings().add( string  );
+			readInt(); //key
+			
+			for (int i = 0; i < TRACK_COUNT; i++) {
+				TGChannel channel = getFactory().newChannel();
+				TGChannelParameter gmChannel1Param = getFactory().newChannelParameter();
+				TGChannelParameter gmChannel2Param = getFactory().newChannelParameter();
+				
+				gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+				gmChannel1Param.setValue(Integer.toString(TRACK_CHANNELS[ i ][1]));
+				gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+				gmChannel2Param.setValue(Integer.toString(TRACK_CHANNELS[ i ][2]));
+				
+				channel.setChannelId(TRACK_CHANNELS[ i ][0]);
+				channel.addParameter(gmChannel1Param);
+				channel.addParameter(gmChannel2Param);
+				song.addChannel(channel);
 			}
-			song.addTrack(track);
-		}
-		
-		int measureCount = readInt();
-		
-		for (int i = 0; i < TRACK_COUNT; i++) {
-			readTrack(song.getTrack(i));
-		}
-		
-		skip(10);
-		
-		TGMeasureHeader previous = null;
-		long[] lastReadedStarts = new long[TRACK_COUNT];
-		for (int i = 0; i < measureCount; i++) {
-			TGMeasureHeader header = getFactory().newHeader();
-			header.setStart( (previous == null)?TGDuration.QUARTER_TIME:(previous.getStart() + previous.getLength()) );
-			header.setNumber( (previous == null)?1:previous.getNumber() + 1 );
-			header.getTempo().setValue( (previous == null)?tempo:previous.getTempo().getValue() );
-			header.setTripletFeel(tripletFeel);
-			readTrackMeasures(song,header,lastReadedStarts);
-			previous = header;
+			for (int i = 0; i < TRACK_COUNT; i++) {
+				TGTrack track = getFactory().newTrack();
+				track.setNumber( (i + 1) );
+				track.setChannelId(TRACK_CHANNELS[ i ][0]);
+				TGColor.RED.copy(track.getColor());
+				
+				int strings = readInt();
+				for (int j = 0; j < strings; j++) {
+					TGString string = getFactory().newString();
+					string.setNumber( j + 1 );
+					string.setValue( readInt() );
+					track.getStrings().add( string  );
+				}
+				song.addTrack(track);
+			}
+			
+			int measureCount = readInt();
+			
+			for (int i = 0; i < TRACK_COUNT; i++) {
+				readTrack(song.getTrack(i), song.getChannel(i));
+			}
+			
+			skip(10);
+			
+			TGMeasureHeader previous = null;
+			long[] lastReadedStarts = new long[TRACK_COUNT];
+			for (int i = 0; i < measureCount; i++) {
+				TGMeasureHeader header = getFactory().newHeader();
+				header.setStart( (previous == null)?TGDuration.QUARTER_TIME:(previous.getStart() + previous.getLength()) );
+				header.setNumber( (previous == null)?1:previous.getNumber() + 1 );
+				header.getTempo().setValue( (previous == null)?tempo:previous.getTempo().getValue() );
+				header.setTripletFeel(tripletFeel);
+				readTrackMeasures(song,header,lastReadedStarts);
+				previous = header;
+			}
+			
+			TGSongManager manager = new TGSongManager(getFactory());
+			manager.setSong(song);
+			manager.autoCompleteSilences();
+			
+			this.close();
+			
+			return song;
+		} catch (GTPFormatException gtpFormatException) {
+			throw gtpFormatException;
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
 		}
-		
-		TGSongManager manager = new TGSongManager(getFactory());
-		manager.setSong(song);
-		manager.autoCompleteSilences();
-		
-		this.close();
-		
-		return song;
 	}
 	
 	private void readInfo(TGSong song) throws IOException{
@@ -324,15 +348,15 @@ public class GP2InputStream extends GTPInputStream {
 		read(bytes);
 	}
 	
-	private void readTrack(TGTrack track) throws IOException {
-		track.getChannel().setInstrument((short)readInt());
+	private void readTrack(TGTrack track, TGChannel channel) throws IOException {
+		channel.setProgram((short)readInt());
 		readInt(); // Number of frets
 		track.setName(readStringByteSizeOfByte());
 		track.setSolo(readBoolean());
-		track.getChannel().setVolume((short)readInt());
-		track.getChannel().setBalance((short)readInt());
-		track.getChannel().setChorus((short)readInt());
-		track.getChannel().setReverb((short)readInt());
+		channel.setVolume((short)readInt());
+		channel.setBalance((short)readInt());
+		channel.setChorus((short)readInt());
+		channel.setReverb((short)readInt());
 		track.setOffset(readInt());
 	}
 	
@@ -416,7 +440,7 @@ public class GP2InputStream extends GTPInputStream {
 	}
 	
 	private int getClef( TGTrack track ){
-		if( !track.isPercussionTrack() ){
+		if(!isPercussionChannel(track.getSong(),track.getChannelId())){
 			Iterator it = track.getStrings().iterator();
 			while( it.hasNext() ){
 				TGString string = (TGString) it.next();
@@ -453,4 +477,15 @@ public class GP2InputStream extends GTPInputStream {
 		}
 		return null;
 	}
+	
+	private boolean isPercussionChannel( TGSong song, int channelId ){
+		Iterator it = song.getChannels();
+		while( it.hasNext() ){
+			TGChannel channel = (TGChannel)it.next();
+			if( channel.getChannelId() == channelId ){
+				return channel.isPercussionChannel();
+			}
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP2InputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP2InputStreamPlugin.java
new file mode 100644
index 0000000..ce77c68
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP2InputStreamPlugin.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.io.gtp;
+
+public class GP2InputStreamPlugin extends GTPInputStreamPlugin{
+
+	public GP2InputStreamPlugin() {
+		super(new GP2InputStream(GTPSettingsUtil.instance().getSettings()));
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3InputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3InputStream.java
index 5bdb637..f347a7d 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3InputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3InputStream.java
@@ -5,9 +5,12 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.song.models.TGBeat;
 import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
@@ -41,6 +44,7 @@ public class GP3InputStream extends GTPInputStream {
 	private static final float GP_BEND_POSITION = 60f;
 	
 	private int tripletFeel;
+	private int keySignature;
 	
 	public GP3InputStream(GTPSettings settings){
 		super(settings, SUPPORTED_VERSIONS);
@@ -50,49 +54,58 @@ public class GP3InputStream extends GTPInputStream {
 		return new TGFileFormat("Guitar Pro 3","*.gp3");
 	}
 	
-	public TGSong readSong() throws GTPFormatException, IOException {
-		readVersion();
-		if (!isSupportedVersion(getVersion())) {
+	public TGSong readSong() throws TGFileFormatException {
+		try{
+			readVersion();
+			if (!isSupportedVersion(getVersion())) {
+				this.close();
+				throw new GTPFormatException("Unsupported Version");
+			}
+			TGSong song = getFactory().newSong();
+			
+			readInfo(song);
+			
+			this.tripletFeel = ((readBoolean())?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE);
+			
+			int tempoValue = readInt();
+					
+			this.keySignature = readKeySignature();
+			this.skip(3);
+			
+			List channels = readChannels();
+			
+			int measures = readInt();
+			int tracks = readInt();
+			
+			readMeasureHeaders(song, measures);
+			readTracks(song, tracks, channels);
+			readMeasures(song, measures, tracks, tempoValue);
+			
 			this.close();
-			throw new GTPFormatException("Unsupported Version");
+			
+			return song;
+		} catch (GTPFormatException gtpFormatException) {
+			throw gtpFormatException;
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
 		}
-		TGSong song = getFactory().newSong();
-		
-		readInfo(song);
-		
-		this.tripletFeel = ((readBoolean())?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE);
-		
-		int tempoValue = readInt();
-		
-		readInt(); //key
-		
-		List channels = readChannels();
-		
-		int measures = readInt();
-		int tracks = readInt();
-		
-		readMeasureHeaders(song, measures);
-		readTracks(song, tracks, channels);
-		readMeasures(song, measures, tracks, tempoValue);
-		
-		this.close();
-		
-		return song;
 	}
 	
 	private List readChannels() throws IOException{
 		List channels = new ArrayList();
 		for (int i = 0; i < 64; i++) {
 			TGChannel channel = getFactory().newChannel();
-			channel.setChannel((short)i);
-			channel.setEffectChannel((short)i);
-			channel.setInstrument((short)readInt());
+			channel.setProgram((short)readInt());
 			channel.setVolume(toChannelShort(readByte()));
 			channel.setBalance(toChannelShort(readByte()));
 			channel.setChorus(toChannelShort(readByte()));
 			channel.setReverb(toChannelShort(readByte()));
 			channel.setPhaser(toChannelShort(readByte()));
 			channel.setTremolo(toChannelShort(readByte()));
+			channel.setBank( i == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+			if (channel.getProgram() < 0) {
+				channel.setProgram((short)0);
+			}
 			channels.add(channel);
 			skip(2);
 		}
@@ -123,7 +136,7 @@ public class GP3InputStream extends GTPInputStream {
 	
 	private void readTracks(TGSong song, int count, List channels) throws IOException{
 		for (int number = 1; number <= count; number++) {
-			song.addTrack(readTrack(number, channels));
+			song.addTrack(readTrack(song,number, channels));
 		}
 	}
 	
@@ -137,6 +150,7 @@ public class GP3InputStream extends GTPInputStream {
 			for (int j = 0; j < tracks; j++) {
 				TGTrack track = song.getTrack(j);
 				TGMeasure measure = getFactory().newMeasure(header);
+				
 				track.addMeasure(measure);
 				readMeasure(measure, track, tempo);
 			}
@@ -250,8 +264,8 @@ public class GP3InputStream extends GTPInputStream {
 			header.setMarker(readMarker(number));
 		}
 		if ((flags & 0x40) != 0) {
-			readByte();
-			readByte();
+			this.keySignature = readKeySignature();
+			this.skip(1);
 		}
 		return header;
 	}
@@ -263,6 +277,7 @@ public class GP3InputStream extends GTPInputStream {
 			nextNoteStart += readBeat(nextNoteStart, measure, track, tempo);
 		}
 		measure.setClef( getClef(track) );
+		measure.setKeySignature(this.keySignature);
 	}
 	
 	private long readBeat(long start, TGMeasure measure,TGTrack track, TGTempo tempo) throws IOException{
@@ -340,7 +355,7 @@ public class GP3InputStream extends GTPInputStream {
 		return note;
 	}
 	
-	private TGTrack readTrack(int number, List channels) throws IOException {
+	private TGTrack readTrack(TGSong song, int number, List channels) throws IOException {
 		TGTrack track = getFactory().newTrack();
 		track.setNumber(number);
 		readUnsignedByte();
@@ -356,24 +371,48 @@ public class GP3InputStream extends GTPInputStream {
 			}
 		}
 		readInt();
-		readChannel(track.getChannel(),channels);
+		readChannel(song, track,channels);
 		readInt();
 		track.setOffset(readInt());
 		readColor(track.getColor());
 		return track;
 	}
 	
-	private void readChannel(TGChannel channel,List channels) throws IOException {
-		int index = (readInt() - 1);
-		int effectChannel = (readInt() - 1);
-		if(index >= 0 && index < channels.size()){
-			((TGChannel) channels.get(index)).copy(channel);
-			if (channel.getInstrument() < 0) {
-				channel.setInstrument((short)0);
+	private void readChannel(TGSong song, TGTrack track,List channels) throws IOException {
+		int gmChannel1 = (readInt() - 1);
+		int gmChannel2 = (readInt() - 1);
+		if( gmChannel1 >= 0 && gmChannel1 < channels.size()){
+			TGChannel channel = getFactory().newChannel();
+			TGChannelParameter gmChannel1Param = getFactory().newChannelParameter();
+			TGChannelParameter gmChannel2Param = getFactory().newChannelParameter();
+			
+			gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+			gmChannel1Param.setValue(Integer.toString(gmChannel1));
+			gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+			gmChannel2Param.setValue(Integer.toString(gmChannel1 != 9 ? gmChannel2 : gmChannel1));
+			
+			((TGChannel) channels.get(gmChannel1)).copy(channel);
+			
+			//------------------------------------------//
+			for( int i = 0 ; i < song.countChannels() ; i ++ ){
+				TGChannel channelAux = song.getChannel(i);
+				for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+					TGChannelParameter channelParameter = channelAux.getParameter( n );
+					if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+						if( Integer.toString(gmChannel1).equals(channelParameter.getValue()) ){
+							channel.setChannelId(channelAux.getChannelId());
+						}
+					}
+				}
 			}
-			if(!channel.isPercussionChannel()){
-				channel.setEffectChannel((short)effectChannel);
+			if( channel.getChannelId() <= 0 ){
+				channel.setChannelId( song.countChannels() + 1 );
+				channel.setName(("#" + channel.getChannelId()));
+				channel.addParameter(gmChannel1Param);
+				channel.addParameter(gmChannel2Param);
+				song.addChannel(channel);
 			}
+			track.setChannelId(channel.getChannelId());
 		}
 	}
 	
@@ -485,8 +524,9 @@ public class GP3InputStream extends GTPInputStream {
 	
 	private void readNoteEffects(TGNoteEffect effect) throws IOException {
 		int flags = readUnsignedByte();
-		effect.setSlide( ((flags & 0x04) != 0) );
 		effect.setHammer( ((flags & 0x02) != 0) );
+		effect.setSlide( ((flags & 0x04) != 0) );
+		effect.setLetRing(((flags & 0x08) != 0));
 		if ((flags & 0x01) != 0) {
 			readBend(effect);
 		}
@@ -567,6 +607,16 @@ public class GP3InputStream extends GTPInputStream {
 		}
 	}
 	
+	private int readKeySignature() throws IOException {
+		// 0: C 1: G, -1: F		
+		int keySignature = readByte();
+		if (keySignature < 0){
+			keySignature = 7 - keySignature; // translate -1 to 8, etc.
+		}
+		
+		return keySignature;
+	}
+	
 	private int toStrokeValue( int value ){
 		if( value == 1 || value == 2){
 			return TGDuration.SIXTY_FOURTH;
@@ -592,7 +642,7 @@ public class GP3InputStream extends GTPInputStream {
 	}
 	
 	private int getClef( TGTrack track ){
-		if( !track.isPercussionTrack() ){
+		if(!isPercussionChannel(track.getSong(),track.getChannelId())){
 			Iterator it = track.getStrings().iterator();
 			while( it.hasNext() ){
 				TGString string = (TGString) it.next();
@@ -603,4 +653,15 @@ public class GP3InputStream extends GTPInputStream {
 		}
 		return TGMeasure.CLEF_TREBLE;
 	}
+	
+	private boolean isPercussionChannel( TGSong song, int channelId ){
+		Iterator it = song.getChannels();
+		while( it.hasNext() ){
+			TGChannel channel = (TGChannel)it.next();
+			if( channel.getChannelId() == channelId ){
+				return channel.isPercussionChannel();
+			}
+		}
+		return false;
+	}
 }
\ No newline at end of file
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3InputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3InputStreamPlugin.java
new file mode 100644
index 0000000..0357c80
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3InputStreamPlugin.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.io.gtp;
+
+public class GP3InputStreamPlugin extends GTPInputStreamPlugin{
+
+	public GP3InputStreamPlugin() {
+		super(new GP3InputStream(GTPSettingsUtil.instance().getSettings()));
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3OutputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3OutputStream.java
index f44e696..3b6deae 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3OutputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3OutputStream.java
@@ -11,11 +11,13 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.song.models.TGBeat;
 import org.herac.tuxguitar.song.models.TGChannel;
 import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDivisionType;
 import org.herac.tuxguitar.song.models.TGDuration;
 import org.herac.tuxguitar.song.models.TGMarker;
 import org.herac.tuxguitar.song.models.TGMeasure;
@@ -29,7 +31,6 @@ import org.herac.tuxguitar.song.models.TGTempo;
 import org.herac.tuxguitar.song.models.TGText;
 import org.herac.tuxguitar.song.models.TGTimeSignature;
 import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGDivisionType;
 import org.herac.tuxguitar.song.models.TGVelocities;
 import org.herac.tuxguitar.song.models.TGVoice;
 import org.herac.tuxguitar.song.models.effects.TGEffectBend;
@@ -64,6 +65,7 @@ public class GP3OutputStream extends GTPOutputStream{
 			if(song.isEmpty()){
 				throw new TGFileFormatException("Empty Song!!!");
 			}
+			configureChannelRouter(song);
 			TGMeasureHeader header = song.getMeasureHeader(0);
 			writeStringByte(GP3_VERSION, 30, DEFAULT_VERSION_CHARSET);
 			writeInfo(song);
@@ -101,7 +103,7 @@ public class GP3OutputStream extends GTPOutputStream{
 	private void writeChannels(TGSong song) throws IOException{
 		TGChannel[] channels = makeChannels(song);
 		for (int i = 0; i < channels.length; i++) {
-			writeInt(channels[i].getInstrument());
+			writeInt(channels[i].getProgram());
 			writeByte(toChannelByte(channels[i].getVolume()));
 			writeByte(toChannelByte(channels[i].getBalance()));
 			writeByte(toChannelByte(channels[i].getChorus()));
@@ -177,8 +179,10 @@ public class GP3OutputStream extends GTPOutputStream{
 	}
 	
 	private void createTrack(TGTrack track) throws IOException {
+		GMChannelRoute channel = getChannelRoute(track.getChannelId());
+		
 		int flags = 0;
-		if (track.isPercussionTrack()) {
+		if (isPercussionChannel(track.getSong(),track.getChannelId())) {
 			flags |= 0x01;
 		}
 		writeUnsignedByte(flags);
@@ -194,8 +198,8 @@ public class GP3OutputStream extends GTPOutputStream{
 			writeInt(value);
 		}
 		writeInt(1);
-		writeInt(track.getChannel().getChannel() + 1);
-		writeInt(track.getChannel().getEffectChannel() + 1);
+		writeInt(channel.getChannel1() + 1);
+		writeInt(channel.getChannel2() + 1);
 		writeInt(24);
 		writeInt(Math.min(Math.max(track.getOffset(),0),12));
 		writeColor(track.getColor());
@@ -290,7 +294,7 @@ public class GP3OutputStream extends GTPOutputStream{
 		if(note.getEffect().isGhostNote()){
 			flags |= 0x04;
 		} 
-		if (note.getEffect().isBend() || note.getEffect().isGrace() || note.getEffect().isSlide() || note.getEffect().isHammer()) {
+		if (note.getEffect().isBend() || note.getEffect().isGrace() || note.getEffect().isSlide() || note.getEffect().isHammer() || note.getEffect().isLetRing()) {
 			flags |= 0x08;
 		}
 		writeUnsignedByte(flags);
@@ -403,6 +407,9 @@ public class GP3OutputStream extends GTPOutputStream{
 		if (effect.isSlide()) {
 			flags |= 0x04;
 		}
+		if (effect.isLetRing()) {
+			flags |= 0x08;
+		}
 		if (effect.isGrace()) {
 			flags |= 0x10;
 		}
@@ -475,9 +482,7 @@ public class GP3OutputStream extends GTPOutputStream{
 		TGChannel[] channels = new TGChannel[64];
 		for (int i = 0; i < channels.length; i++) {
 			channels[i] = getFactory().newChannel();
-			channels[i].setChannel((short)i);
-			channels[i].setEffectChannel((short)i);
-			channels[i].setInstrument((short)24);
+			channels[i].setProgram((short)24);
 			channels[i].setVolume((short)13);
 			channels[i].setBalance((short)8);
 			channels[i].setChorus((short)0);
@@ -486,15 +491,16 @@ public class GP3OutputStream extends GTPOutputStream{
 			channels[i].setTremolo((short)0);
 		}
 		
-		Iterator it = song.getTracks();
+		Iterator it = song.getChannels();
 		while (it.hasNext()) {
-			TGTrack track = (TGTrack) it.next();
-			channels[track.getChannel().getChannel()].setInstrument(track.getChannel().getInstrument());
-			channels[track.getChannel().getChannel()].setVolume(track.getChannel().getVolume());
-			channels[track.getChannel().getChannel()].setBalance(track.getChannel().getBalance());
-			channels[track.getChannel().getEffectChannel()].setInstrument(track.getChannel().getInstrument());
-			channels[track.getChannel().getEffectChannel()].setVolume(track.getChannel().getVolume());
-			channels[track.getChannel().getEffectChannel()].setBalance(track.getChannel().getBalance());
+			TGChannel tgChannel = (TGChannel) it.next();
+			GMChannelRoute gmChannelRoute = getChannelRoute(tgChannel.getChannelId());
+			channels[gmChannelRoute.getChannel1()].setProgram(tgChannel.getProgram());
+			channels[gmChannelRoute.getChannel1()].setVolume(tgChannel.getVolume());
+			channels[gmChannelRoute.getChannel1()].setBalance(tgChannel.getBalance());
+			channels[gmChannelRoute.getChannel2()].setProgram(tgChannel.getProgram());
+			channels[gmChannelRoute.getChannel2()].setVolume(tgChannel.getVolume());
+			channels[gmChannelRoute.getChannel2()].setBalance(tgChannel.getBalance());
 		}
 		
 		return channels;
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3OutputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3OutputStreamPlugin.java
new file mode 100644
index 0000000..275a934
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP3OutputStreamPlugin.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.io.gtp;
+
+public class GP3OutputStreamPlugin extends GTPOutputStreamPlugin{
+
+	public GP3OutputStreamPlugin() {
+		super(new GP3OutputStream(GTPSettingsUtil.instance().getSettings()));
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4InputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4InputStream.java
index b1168b4..8826319 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4InputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4InputStream.java
@@ -5,9 +5,12 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.song.models.TGBeat;
 import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
@@ -39,6 +42,7 @@ public class GP4InputStream extends GTPInputStream {
 	private static final float GP_BEND_POSITION = 60f;
 	
 	private int tripletFeel;
+	private int keySignature;
 	
 	public GP4InputStream(GTPSettings settings){
 		super(settings, SUPPORTED_VERSIONS);
@@ -48,39 +52,46 @@ public class GP4InputStream extends GTPInputStream {
 		return new TGFileFormat("Guitar Pro 4","*.gp4");
 	}
 	
-	public TGSong readSong() throws IOException, GTPFormatException {
-		readVersion();
-		if (!isSupportedVersion(getVersion())) {
+	public TGSong readSong() throws TGFileFormatException {
+		try{
+			readVersion();
+			if (!isSupportedVersion(getVersion())) {
+				this.close();
+				throw new GTPFormatException("Unsupported Version");
+			}
+			TGSong song = getFactory().newSong();
+			
+			readInfo(song);
+			
+			this.tripletFeel = ((readBoolean())?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE);
+			
+			int lyricTrack = readInt();
+			TGLyric lyric = readLyrics();
+			
+			int tempoValue = readInt();
+	
+			this.keySignature = readKeySignature();
+			this.skip(3);
+			
+			readByte(); //octave
+			
+			List channels = readChannels();
+			
+			int measures = readInt();
+			int tracks = readInt();
+			
+			readMeasureHeaders(song, measures);
+			readTracks(song, tracks, channels, lyric, lyricTrack);
+			readMeasures(song, measures, tracks, tempoValue);
+			
 			this.close();
-			throw new GTPFormatException("Unsupported Version");
+			
+			return song;
+		} catch (GTPFormatException gtpFormatException) {
+			throw gtpFormatException;
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
 		}
-		TGSong song = getFactory().newSong();
-		
-		readInfo(song);
-		
-		this.tripletFeel = ((readBoolean())?TGMeasureHeader.TRIPLET_FEEL_EIGHTH:TGMeasureHeader.TRIPLET_FEEL_NONE);
-		
-		int lyricTrack = readInt();
-		TGLyric lyric = readLyrics();
-		
-		int tempoValue = readInt();
-		
-		readInt(); //key
-		
-		readByte(); //octave
-		
-		List channels = readChannels();
-		
-		int measures = readInt();
-		int tracks = readInt();
-		
-		readMeasureHeaders(song, measures);
-		readTracks(song, tracks, channels, lyric, lyricTrack);
-		readMeasures(song, measures, tracks, tempoValue);
-		
-		this.close();
-		
-		return song;
 	}
 	
 	private void readInfo(TGSong song) throws IOException{
@@ -107,7 +118,7 @@ public class GP4InputStream extends GTPInputStream {
 	
 	private void readTracks(TGSong song, int count, List channels,TGLyric lyric, int lyricTrack) throws IOException{
 		for (int number = 1; number <= count; number++) {
-			song.addTrack(readTrack(number, channels,(number == lyricTrack)?lyric:getFactory().newLyric()));
+			song.addTrack(readTrack(song, number, channels,(number == lyricTrack)?lyric:getFactory().newLyric()));
 		}
 	}
 	
@@ -144,15 +155,17 @@ public class GP4InputStream extends GTPInputStream {
 		List channels = new ArrayList();
 		for (int i = 0; i < 64; i++) {
 			TGChannel channel = getFactory().newChannel();
-			channel.setChannel((short)i);
-			channel.setEffectChannel((short)i);
-			channel.setInstrument((short)readInt());
+			channel.setProgram((short)readInt());
 			channel.setVolume(toChannelShort(readByte()));
 			channel.setBalance(toChannelShort(readByte()));
 			channel.setChorus(toChannelShort(readByte()));
 			channel.setReverb(toChannelShort(readByte()));
 			channel.setPhaser(toChannelShort(readByte()));
 			channel.setTremolo(toChannelShort(readByte()));
+			channel.setBank( i == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+			if (channel.getProgram() < 0) {
+				channel.setProgram((short)0);
+			}
 			channels.add(channel);
 			skip(2);
 		}
@@ -307,8 +320,8 @@ public class GP4InputStream extends GTPInputStream {
 			header.setMarker(readMarker(number));
 		}
 		if ((flags & 0x40) != 0) {
-			readByte();
-			readByte();
+			this.keySignature = readKeySignature();
+			this.skip(1);
 		}
 		return header;
 	}
@@ -320,6 +333,7 @@ public class GP4InputStream extends GTPInputStream {
 			nextNoteStart += readBeat(nextNoteStart, measure, track, tempo);
 		}
 		measure.setClef( getClef(track) );
+		measure.setKeySignature(this.keySignature);
 	}
 	
 	private TGNote readNote(TGString string, TGTrack track,TGNoteEffect effect)throws IOException {
@@ -354,7 +368,7 @@ public class GP4InputStream extends GTPInputStream {
 		return note;
 	}
 	
-	private TGTrack readTrack(int number, List channels,TGLyric lyrics) throws IOException {
+	private TGTrack readTrack(TGSong song, int number, List channels,TGLyric lyrics) throws IOException {
 		TGTrack track = getFactory().newTrack();
 		track.setNumber(number);
 		track.setLyrics(lyrics);
@@ -371,24 +385,48 @@ public class GP4InputStream extends GTPInputStream {
 			}
 		}
 		readInt();
-		readChannel(track.getChannel(), channels);
+		readChannel(song, track, channels);
 		readInt();
 		track.setOffset(readInt());
 		readColor(track.getColor());
 		return track;
 	}
 	
-	private void readChannel(TGChannel channel,List channels) throws IOException {
-		int index = (readInt() - 1);
-		int effectChannel = (readInt() - 1);
-		if(index >= 0 && index < channels.size()){
-			((TGChannel) channels.get(index)).copy(channel);
-			if (channel.getInstrument() < 0) {
-				channel.setInstrument((short)0);
+	private void readChannel(TGSong song, TGTrack track,List channels) throws IOException {
+		int gmChannel1 = (readInt() - 1);
+		int gmChannel2 = (readInt() - 1);
+		if( gmChannel1 >= 0 && gmChannel1 < channels.size()){
+			TGChannel channel = getFactory().newChannel();
+			TGChannelParameter gmChannel1Param = getFactory().newChannelParameter();
+			TGChannelParameter gmChannel2Param = getFactory().newChannelParameter();
+			
+			gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+			gmChannel1Param.setValue(Integer.toString(gmChannel1));
+			gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+			gmChannel2Param.setValue(Integer.toString(gmChannel1 != 9 ? gmChannel2 : gmChannel1));
+			
+			((TGChannel) channels.get(gmChannel1)).copy(channel);
+			
+			//------------------------------------------//
+			for( int i = 0 ; i < song.countChannels() ; i ++ ){
+				TGChannel channelAux = song.getChannel(i);
+				for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+					TGChannelParameter channelParameter = channelAux.getParameter( n );
+					if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+						if( Integer.toString(gmChannel1).equals(channelParameter.getValue()) ){
+							channel.setChannelId(channelAux.getChannelId());
+						}
+					}
+				}
 			}
-			if(!channel.isPercussionChannel()){
-				channel.setEffectChannel((short)effectChannel);
+			if( channel.getChannelId() <= 0 ){
+				channel.setChannelId( song.countChannels() + 1 );
+				channel.setName(("#" + channel.getChannelId()));
+				channel.addParameter(gmChannel1Param);
+				channel.addParameter(gmChannel2Param);
+				song.addChannel(channel);
 			}
+			track.setChannelId(channel.getChannelId());
 		}
 	}
 	
@@ -526,6 +564,7 @@ public class GP4InputStream extends GTPInputStream {
 		int flags1 = readUnsignedByte();
 		int flags2 = readUnsignedByte();
 		noteEffect.setHammer(((flags1 & 0x02) != 0));
+		noteEffect.setLetRing(((flags1 & 0x08) != 0));
 		noteEffect.setVibrato(((flags2 & 0x40) != 0) || noteEffect.isVibrato());
 		noteEffect.setPalmMute(((flags2 & 0x02) != 0));
 		noteEffect.setStaccato(((flags2 & 0x01) != 0));
@@ -647,6 +686,16 @@ public class GP4InputStream extends GTPInputStream {
 		readByte();
 	}
 	
+	private int readKeySignature() throws IOException {
+		// 0: C 1: G, -1: F		
+		int keySignature = readByte();
+		if (keySignature < 0){
+			keySignature = 7 - keySignature; // translate -1 to 8, etc.
+		}
+		
+		return keySignature;
+	}
+	
 	private int toStrokeValue( int value ){
 		if( value == 1 || value == 2){
 			return TGDuration.SIXTY_FOURTH;
@@ -672,7 +721,7 @@ public class GP4InputStream extends GTPInputStream {
 	}
 	
 	private int getClef( TGTrack track ){
-		if( !track.isPercussionTrack() ){
+		if(!isPercussionChannel(track.getSong(),track.getChannelId())){
 			Iterator it = track.getStrings().iterator();
 			while( it.hasNext() ){
 				TGString string = (TGString) it.next();
@@ -683,4 +732,15 @@ public class GP4InputStream extends GTPInputStream {
 		}
 		return TGMeasure.CLEF_TREBLE;
 	}
+	
+	private boolean isPercussionChannel( TGSong song, int channelId ){
+		Iterator it = song.getChannels();
+		while( it.hasNext() ){
+			TGChannel channel = (TGChannel)it.next();
+			if( channel.getChannelId() == channelId ){
+				return channel.isPercussionChannel();
+			}
+		}
+		return false;
+	}
 }
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4InputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4InputStreamPlugin.java
new file mode 100644
index 0000000..d93ecba
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4InputStreamPlugin.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.io.gtp;
+
+public class GP4InputStreamPlugin extends GTPInputStreamPlugin{
+
+	public GP4InputStreamPlugin() {
+		super(new GP4InputStream(GTPSettingsUtil.instance().getSettings()));
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4OutputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4OutputStream.java
index 6c45f8e..b5b6ab9 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4OutputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4OutputStream.java
@@ -11,12 +11,14 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.song.models.TGBeat;
 import org.herac.tuxguitar.song.models.TGChannel;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDivisionType;
 import org.herac.tuxguitar.song.models.TGDuration;
 import org.herac.tuxguitar.song.models.TGMarker;
 import org.herac.tuxguitar.song.models.TGMeasure;
@@ -30,7 +32,6 @@ import org.herac.tuxguitar.song.models.TGTempo;
 import org.herac.tuxguitar.song.models.TGText;
 import org.herac.tuxguitar.song.models.TGTimeSignature;
 import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGDivisionType;
 import org.herac.tuxguitar.song.models.TGVelocities;
 import org.herac.tuxguitar.song.models.TGVoice;
 import org.herac.tuxguitar.song.models.effects.TGEffectBend;
@@ -67,6 +68,7 @@ public class GP4OutputStream extends GTPOutputStream{
 			if(song.isEmpty()){
 				throw new TGFileFormatException("Empty Song!!!");
 			}
+			configureChannelRouter(song);
 			TGMeasureHeader header = song.getMeasureHeader(0);
 			writeStringByte(GP4_VERSION, 30, DEFAULT_VERSION_CHARSET);
 			writeInfo(song);
@@ -106,7 +108,7 @@ public class GP4OutputStream extends GTPOutputStream{
 	private void writeChannels(TGSong song) throws IOException{
 		TGChannel[] channels = makeChannels(song);
 		for (int i = 0; i < channels.length; i++) {
-			writeInt(channels[i].getInstrument());
+			writeInt(channels[i].getProgram());
 			writeByte(toChannelByte(channels[i].getVolume()));
 			writeByte(toChannelByte(channels[i].getBalance()));
 			writeByte(toChannelByte(channels[i].getChorus()));
@@ -201,8 +203,10 @@ public class GP4OutputStream extends GTPOutputStream{
 	}
 	
 	private void writeTrack(TGTrack track) throws IOException {
+		GMChannelRoute channel = getChannelRoute(track.getChannelId());
+		
 		int flags = 0;
-		if (track.isPercussionTrack()) {
+		if (isPercussionChannel(track.getSong(),track.getChannelId())) {
 			flags |= 0x01;
 		}
 		writeUnsignedByte(flags);
@@ -217,8 +221,8 @@ public class GP4OutputStream extends GTPOutputStream{
 			writeInt(value);
 		}
 		writeInt(1);
-		writeInt(track.getChannel().getChannel() + 1);
-		writeInt(track.getChannel().getEffectChannel() + 1);
+		writeInt(channel.getChannel1() + 1);
+		writeInt(channel.getChannel2() + 1);
 		writeInt(24);
 		writeInt(Math.min(Math.max(track.getOffset(),0),12));
 		writeColor(track.getColor());
@@ -336,19 +340,20 @@ public class GP4OutputStream extends GTPOutputStream{
 		if(note.getEffect().isAccentuatedNote()){
 			flags |= 0x40;
 		}
-		if (note.getEffect().isVibrato()		||
-			note.getEffect().isBend()		   ||
-			note.getEffect().isGrace()		  ||
-			note.getEffect().isSlide()		  ||
-			note.getEffect().isHammer()		 ||
-			note.getEffect().isPalmMute()	   ||
-			note.getEffect().isStaccato()	   ||
-			note.getEffect().isTapping()		||
-			note.getEffect().isSlapping()	   ||
-			note.getEffect().isPopping()		||
-			note.getEffect().isHarmonic()	   ||
-			note.getEffect().isTremoloPicking() ||
-			note.getEffect().isTrill()) {
+		if (note.getEffect().isVibrato()  ||
+			note.getEffect().isBend()     ||
+			note.getEffect().isGrace()    ||
+			note.getEffect().isSlide()    ||
+			note.getEffect().isHammer()   ||
+			note.getEffect().isLetRing()  ||
+			note.getEffect().isPalmMute() ||
+			note.getEffect().isStaccato() ||
+			note.getEffect().isTapping()  ||
+			note.getEffect().isSlapping() ||
+			note.getEffect().isPopping()  ||
+			note.getEffect().isHarmonic() ||
+			note.getEffect().isTrill()    ||
+			note.getEffect().isTremoloPicking()) {
 			flags |= 0x08;
 		}
 		writeUnsignedByte(flags);
@@ -462,6 +467,9 @@ public class GP4OutputStream extends GTPOutputStream{
 		if (effect.isHammer()) {
 			flags1 |= 0x02;
 		}
+		if (effect.isLetRing()) {
+			flags1 |= 0x08;
+		}
 		if (effect.isGrace()) {
 			flags1 |= 0x10;
 		}
@@ -609,9 +617,7 @@ public class GP4OutputStream extends GTPOutputStream{
 		TGChannel[] channels = new TGChannel[64];
 		for (int i = 0; i < channels.length; i++) {
 			channels[i] = getFactory().newChannel();
-			channels[i].setChannel((short)i);
-			channels[i].setEffectChannel((short)i);
-			channels[i].setInstrument((short)24);
+			channels[i].setProgram((short)24);
 			channels[i].setVolume((short)13);
 			channels[i].setBalance((short)8);
 			channels[i].setChorus((short)0);
@@ -620,15 +626,16 @@ public class GP4OutputStream extends GTPOutputStream{
 			channels[i].setTremolo((short)0);
 		}
 		
-		Iterator it = song.getTracks();
+		Iterator it = song.getChannels();
 		while (it.hasNext()) {
-			TGTrack track = (TGTrack) it.next();
-			channels[track.getChannel().getChannel()].setInstrument(track.getChannel().getInstrument());
-			channels[track.getChannel().getChannel()].setVolume(track.getChannel().getVolume());
-			channels[track.getChannel().getChannel()].setBalance(track.getChannel().getBalance());
-			channels[track.getChannel().getEffectChannel()].setInstrument(track.getChannel().getInstrument());
-			channels[track.getChannel().getEffectChannel()].setVolume(track.getChannel().getVolume());
-			channels[track.getChannel().getEffectChannel()].setBalance(track.getChannel().getBalance());
+			TGChannel tgChannel = (TGChannel) it.next();
+			GMChannelRoute gmChannelRoute = getChannelRoute(tgChannel.getChannelId());
+			channels[gmChannelRoute.getChannel1()].setProgram(tgChannel.getProgram());
+			channels[gmChannelRoute.getChannel1()].setVolume(tgChannel.getVolume());
+			channels[gmChannelRoute.getChannel1()].setBalance(tgChannel.getBalance());
+			channels[gmChannelRoute.getChannel2()].setProgram(tgChannel.getProgram());
+			channels[gmChannelRoute.getChannel2()].setVolume(tgChannel.getVolume());
+			channels[gmChannelRoute.getChannel2()].setBalance(tgChannel.getBalance());
 		}
 		
 		return channels;
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4OutputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4OutputStreamPlugin.java
new file mode 100644
index 0000000..f4dacc8
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP4OutputStreamPlugin.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.io.gtp;
+
+public class GP4OutputStreamPlugin extends GTPOutputStreamPlugin{
+
+	public GP4OutputStreamPlugin() {
+		super(new GP4OutputStream(GTPSettingsUtil.instance().getSettings()));
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5InputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5InputStream.java
index e9ea851..889cd0c 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5InputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5InputStream.java
@@ -5,9 +5,12 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.song.models.TGBeat;
 import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
 import org.herac.tuxguitar.song.models.TGDuration;
@@ -37,6 +40,8 @@ public class GP5InputStream extends GTPInputStream {
 	private static final String supportedVersions[] = { "FICHIER GUITAR PRO v5.00","FICHIER GUITAR PRO v5.10"};
 	private static final float GP_BEND_SEMITONE = 25f;
 	private static final float GP_BEND_POSITION = 60f;
+
+	private int keySignature;
 	
 	public GP5InputStream(GTPSettings settings) {
 		super(settings, supportedVersions);
@@ -46,46 +51,53 @@ public class GP5InputStream extends GTPInputStream {
 		return new TGFileFormat("Guitar Pro 5","*.gp5");
 	}
 	
-	public TGSong readSong() throws IOException, GTPFormatException {
-		readVersion();
-		if (!isSupportedVersion(getVersion())) {
+	public TGSong readSong() throws TGFileFormatException {
+		try{
+			readVersion();
+			if (!isSupportedVersion(getVersion())) {
+				this.close();
+				throw new GTPFormatException("Unsupported Version");
+			}
+			TGSong song = getFactory().newSong();
+			
+			readInfo(song);
+			
+			//lyrics
+			int lyricTrack = readInt();
+			TGLyric lyric = readLyrics();
+			
+			readPageSetup();
+			
+			int tempoValue = readInt();
+			
+			if(getVersionIndex() > 0){
+				skip(1);
+			}
+			
+			this.keySignature = readKeySignature();
+			this.skip(3);
+			
+			readByte(); //octave
+			
+			List channels = readChannels();
+			
+			skip(42);
+			
+			int measures = readInt();
+			int tracks = readInt();
+			
+			readMeasureHeaders(song, measures);
+			readTracks(song, tracks, channels, lyric, lyricTrack);
+			readMeasures(song, measures, tracks, tempoValue);
+			
 			this.close();
-			throw new GTPFormatException("Unsupported Version");
-		}
-		TGSong song = getFactory().newSong();
-		
-		readInfo(song);
-		
-		//lyrics
-		int lyricTrack = readInt();
-		TGLyric lyric = readLyrics();
-		
-		readPageSetup();
-		
-		int tempoValue = readInt();
-		
-		if(getVersionIndex() > 0){
-			skip(1);
+			
+			return song;
+		} catch (GTPFormatException gtpFormatException) {
+			throw gtpFormatException;
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
 		}
-		
-		readInt(); //key
-		
-		readByte(); //octave
-		
-		List channels = readChannels();
-		
-		skip(42);
-		
-		int measures = readInt();
-		int tracks = readInt();
-		
-		readMeasureHeaders(song, measures);
-		readTracks(song, tracks, channels, lyric, lyricTrack);
-		readMeasures(song, measures, tracks, tempoValue);
-		
-		this.close();
-		
-		return song;
 	}
 	
 	private void readInfo(TGSong song) throws IOException{
@@ -124,7 +136,7 @@ public class GP5InputStream extends GTPInputStream {
 	
 	private void readTracks(TGSong song, int count, List channels,TGLyric lyric, int lyricTrack) throws IOException{
 		for (int number = 1; number <= count; number++) {
-			song.addTrack(readTrack(number, channels,(number == lyricTrack)?lyric:getFactory().newLyric()));
+			song.addTrack(readTrack(song,number, channels,(number == lyricTrack)?lyric:getFactory().newLyric()));
 		}
 		skip( (getVersionIndex() == 0 ? 2 : 1) );
 	}
@@ -207,15 +219,17 @@ public class GP5InputStream extends GTPInputStream {
 		List channels = new ArrayList();
 		for (int i = 0; i < 64; i++) {
 			TGChannel channel = getFactory().newChannel();
-			channel.setChannel((short)i);
-			channel.setEffectChannel((short)i);
-			channel.setInstrument((short)readInt());
+			channel.setProgram((short)readInt());
 			channel.setVolume(toChannelShort(readByte()));
 			channel.setBalance(toChannelShort(readByte()));
 			channel.setChorus(toChannelShort(readByte()));
 			channel.setReverb(toChannelShort(readByte()));
 			channel.setPhaser(toChannelShort(readByte()));
 			channel.setTremolo(toChannelShort(readByte()));
+			channel.setBank( i == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+			if (channel.getProgram() < 0) {
+				channel.setProgram((short)0);
+			}
 			channels.add(channel);
 			skip(2);
 		}
@@ -267,6 +281,10 @@ public class GP5InputStream extends GTPInputStream {
 				duration.getDivision().setEnters(12);
 				duration.getDivision().setTimes(8);
 				break;
+			case 13:
+				duration.getDivision().setEnters(13);
+				duration.getDivision().setTimes(8);
+				break;
 			}
 		}
 		return duration;
@@ -335,10 +353,10 @@ public class GP5InputStream extends GTPInputStream {
 			header.setRepeatAlternative(readUnsignedByte());
 		}
 		if ((flags & 0x40) != 0) {
-			readByte();
-			readByte();
+			this.keySignature = readKeySignature();
+			this.skip(1);
 		}
-		if ((flags & 0x01) != 0) {
+		if ((flags & 0x01) != 0 || (flags & 0x02) != 0) {
 			skip(4);
 		}
 		if ((flags & 0x10) == 0) {
@@ -383,6 +401,7 @@ public class GP5InputStream extends GTPInputStream {
 			measure.removeBeat( beat );
 		}
 		measure.setClef( getClef(track) );
+		measure.setKeySignature(this.keySignature);
 	}
 	
 	private TGNote readNote(TGString string,TGTrack track,TGNoteEffect effect)throws IOException {
@@ -419,7 +438,7 @@ public class GP5InputStream extends GTPInputStream {
 		return note;
 	}
 	
-	private TGTrack readTrack(int number, List channels,TGLyric lyrics) throws IOException {
+	private TGTrack readTrack(TGSong song, int number, List channels,TGLyric lyrics) throws IOException {
 		readUnsignedByte();
 		if(number ==  1 || getVersionIndex() == 0){
 			skip(1);
@@ -439,7 +458,7 @@ public class GP5InputStream extends GTPInputStream {
 			}
 		}
 		readInt();
-		readChannel(track.getChannel(), channels);
+		readChannel(song, track, channels);
 		readInt();
 		track.setOffset(readInt());
 		readColor(track.getColor());
@@ -451,17 +470,41 @@ public class GP5InputStream extends GTPInputStream {
 		return track;
 	}
 	
-	private void readChannel(TGChannel channel,List channels) throws IOException {
-		int index = (readInt() - 1);
-		int effectChannel = (readInt() - 1);
-		if(index >= 0 && index < channels.size()){
-			((TGChannel) channels.get(index)).copy(channel);
-			if (channel.getInstrument() < 0) {
-				channel.setInstrument((short)0);
+	private void readChannel(TGSong song, TGTrack track,List channels) throws IOException {
+		int gmChannel1 = (readInt() - 1);
+		int gmChannel2 = (readInt() - 1);
+		if( gmChannel1 >= 0 && gmChannel1 < channels.size()){
+			TGChannel channel = getFactory().newChannel();
+			TGChannelParameter gmChannel1Param = getFactory().newChannelParameter();
+			TGChannelParameter gmChannel2Param = getFactory().newChannelParameter();
+			
+			gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+			gmChannel1Param.setValue(Integer.toString(gmChannel1));
+			gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+			gmChannel2Param.setValue(Integer.toString(gmChannel1 != 9 ? gmChannel2 : gmChannel1));
+			
+			((TGChannel) channels.get(gmChannel1)).copy(channel);
+			
+			//------------------------------------------//
+			for( int i = 0 ; i < song.countChannels() ; i ++ ){
+				TGChannel channelAux = song.getChannel(i);
+				for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+					TGChannelParameter channelParameter = channelAux.getParameter( n );
+					if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+						if( Integer.toString(gmChannel1).equals(channelParameter.getValue()) ){
+							channel.setChannelId(channelAux.getChannelId());
+						}
+					}
+				}
 			}
-			if(!channel.isPercussionChannel()){
-				channel.setEffectChannel((short)effectChannel);
+			if( channel.getChannelId() <= 0 ){
+				channel.setChannelId( song.countChannels() + 1 );
+				channel.setName(("#" + channel.getChannelId()));
+				channel.addParameter(gmChannel1Param);
+				channel.addParameter(gmChannel2Param);
+				song.addChannel(channel);
 			}
+			track.setChannelId(channel.getChannelId());
 		}
 	}
 	
@@ -536,6 +579,7 @@ public class GP5InputStream extends GTPInputStream {
 			readTrill(noteEffect);
 		}
 		noteEffect.setHammer(((flags1 & 0x02) != 0));
+		noteEffect.setLetRing(((flags1 & 0x08) != 0));
 		noteEffect.setVibrato(((flags2 & 0x40) != 0) || noteEffect.isVibrato());
 		noteEffect.setPalmMute(((flags2 & 0x02) != 0));
 		noteEffect.setStaccato(((flags2 & 0x01) != 0));
@@ -705,6 +749,16 @@ public class GP5InputStream extends GTPInputStream {
 		}
 	}
 	
+	private int readKeySignature() throws IOException {
+		// 0: C 1: G, -1: F		
+		int keySignature = readByte();
+		if (keySignature < 0){
+			keySignature = 7 - keySignature; // translate -1 to 8, etc.
+		}
+		
+		return keySignature;
+	}
+	
 	private int toStrokeValue( int value ){
 		if( value == 1 || value == 2){
 			return TGDuration.SIXTY_FOURTH;
@@ -730,7 +784,7 @@ public class GP5InputStream extends GTPInputStream {
 	}
 	
 	private int getClef( TGTrack track ){
-		if( !track.isPercussionTrack() ){
+		if(!isPercussionChannel(track.getSong(),track.getChannelId())){
 			Iterator it = track.getStrings().iterator();
 			while( it.hasNext() ){
 				TGString string = (TGString) it.next();
@@ -755,4 +809,15 @@ public class GP5InputStream extends GTPInputStream {
 		measure.addBeat(beat);
 		return beat;
 	}
+	
+	private boolean isPercussionChannel( TGSong song, int channelId ){
+		Iterator it = song.getChannels();
+		while( it.hasNext() ){
+			TGChannel channel = (TGChannel)it.next();
+			if( channel.getChannelId() == channelId ){
+				return channel.isPercussionChannel();
+			}
+		}
+		return false;
+	}
 }
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5InputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5InputStreamPlugin.java
new file mode 100644
index 0000000..ae802c4
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5InputStreamPlugin.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.io.gtp;
+
+public class GP5InputStreamPlugin extends GTPInputStreamPlugin{
+
+	public GP5InputStreamPlugin() {
+		super(new GP5InputStream(GTPSettingsUtil.instance().getSettings()));
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5OutputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5OutputStream.java
index 604cf75..8064624 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5OutputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5OutputStream.java
@@ -11,12 +11,14 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.song.models.TGBeat;
 import org.herac.tuxguitar.song.models.TGChannel;
 import org.herac.tuxguitar.song.models.TGChord;
 import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDivisionType;
 import org.herac.tuxguitar.song.models.TGDuration;
 import org.herac.tuxguitar.song.models.TGMarker;
 import org.herac.tuxguitar.song.models.TGMeasure;
@@ -30,7 +32,6 @@ import org.herac.tuxguitar.song.models.TGTempo;
 import org.herac.tuxguitar.song.models.TGText;
 import org.herac.tuxguitar.song.models.TGTimeSignature;
 import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGDivisionType;
 import org.herac.tuxguitar.song.models.TGVelocities;
 import org.herac.tuxguitar.song.models.TGVoice;
 import org.herac.tuxguitar.song.models.effects.TGEffectBend;
@@ -81,6 +82,7 @@ public class GP5OutputStream extends GTPOutputStream {
 			if(song.isEmpty()){
 				throw new TGFileFormatException("Empty Song!!!");
 			}
+			configureChannelRouter(song);
 			TGMeasureHeader header = song.getMeasureHeader(0);
 			writeStringByte(GP5_VERSION, 30, DEFAULT_VERSION_CHARSET);
 			writeInfo(song);
@@ -162,7 +164,7 @@ public class GP5OutputStream extends GTPOutputStream {
 	private void writeChannels(TGSong song) throws IOException{
 		TGChannel[] channels = makeChannels(song);
 		for (int i = 0; i < channels.length; i++) {
-			writeInt(channels[i].getInstrument());
+			writeInt(channels[i].getProgram());
 			writeByte(toChannelByte(channels[i].getVolume()));
 			writeByte(toChannelByte(channels[i].getBalance()));
 			writeByte(toChannelByte(channels[i].getChorus()));
@@ -255,12 +257,14 @@ public class GP5OutputStream extends GTPOutputStream {
 	}
 	
 	private void writeTrack(TGTrack track) throws IOException {
+		GMChannelRoute channel = getChannelRoute(track.getChannelId());
+		
 		int flags = 0;
-		if (track.isPercussionTrack()) {
+		if (isPercussionChannel(track.getSong(),track.getChannelId())) {
 			flags |= 0x01;
 		}
 		writeUnsignedByte(flags);
-		writeByte((byte)8);
+		writeUnsignedByte((8 | flags));
 		writeStringByte(track.getName(), 40);
 		writeInt(track.getStrings().size());
 		for (int i = 0; i < 7; i++) {
@@ -272,8 +276,8 @@ public class GP5OutputStream extends GTPOutputStream {
 			writeInt(value);
 		}
 		writeInt(1);
-		writeInt(track.getChannel().getChannel() + 1);
-		writeInt(track.getChannel().getEffectChannel() + 1);
+		writeInt(channel.getChannel1() + 1);
+		writeInt(channel.getChannel2() + 1);
 		writeInt(24);
 		writeInt(track.getOffset());
 		writeColor(track.getColor());
@@ -435,6 +439,7 @@ public class GP5OutputStream extends GTPOutputStream {
 		    note.getEffect().isBend()     ||
 		    note.getEffect().isSlide()    ||
 		    note.getEffect().isHammer()   ||
+		    note.getEffect().isLetRing()  ||
 		    note.getEffect().isPalmMute() ||
 		    note.getEffect().isStaccato() ||
 		    note.getEffect().isTrill()    ||
@@ -560,6 +565,9 @@ public class GP5OutputStream extends GTPOutputStream {
 		if (effect.isHammer()) {
 			flags1 |= 0x02;
 		}
+		if (effect.isLetRing()) {
+			flags1 |= 0x08;
+		}
 		if (effect.isGrace()) {
 			flags1 |= 0x10;
 		}
@@ -718,9 +726,7 @@ public class GP5OutputStream extends GTPOutputStream {
 		TGChannel[] channels = new TGChannel[64];
 		for (int i = 0; i < channels.length; i++) {
 			channels[i] = getFactory().newChannel();
-			channels[i].setChannel((short)i);
-			channels[i].setEffectChannel((short)i);
-			channels[i].setInstrument((short)24);
+			channels[i].setProgram((short)24);
 			channels[i].setVolume((short)13);
 			channels[i].setBalance((short)8);
 			channels[i].setChorus((short)0);
@@ -729,15 +735,16 @@ public class GP5OutputStream extends GTPOutputStream {
 			channels[i].setTremolo((short)0);
 		}
 		
-		Iterator it = song.getTracks();
+		Iterator it = song.getChannels();
 		while (it.hasNext()) {
-			TGTrack track = (TGTrack) it.next();
-			channels[track.getChannel().getChannel()].setInstrument(track.getChannel().getInstrument());
-			channels[track.getChannel().getChannel()].setVolume(track.getChannel().getVolume());
-			channels[track.getChannel().getChannel()].setBalance(track.getChannel().getBalance());
-			channels[track.getChannel().getEffectChannel()].setInstrument(track.getChannel().getInstrument());
-			channels[track.getChannel().getEffectChannel()].setVolume(track.getChannel().getVolume());
-			channels[track.getChannel().getEffectChannel()].setBalance(track.getChannel().getBalance());
+			TGChannel tgChannel = (TGChannel) it.next();
+			GMChannelRoute gmChannelRoute = getChannelRoute(tgChannel.getChannelId());
+			channels[gmChannelRoute.getChannel1()].setProgram(tgChannel.getProgram());
+			channels[gmChannelRoute.getChannel1()].setVolume(tgChannel.getVolume());
+			channels[gmChannelRoute.getChannel1()].setBalance(tgChannel.getBalance());
+			channels[gmChannelRoute.getChannel2()].setProgram(tgChannel.getProgram());
+			channels[gmChannelRoute.getChannel2()].setVolume(tgChannel.getVolume());
+			channels[gmChannelRoute.getChannel1()].setBalance(tgChannel.getBalance());
 		}
 		
 		return channels;
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5OutputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5OutputStreamPlugin.java
new file mode 100644
index 0000000..5effb7e
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GP5OutputStreamPlugin.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.io.gtp;
+
+public class GP5OutputStreamPlugin extends GTPOutputStreamPlugin{
+
+	public GP5OutputStreamPlugin() {
+		super(new GP5OutputStream(GTPSettingsUtil.instance().getSettings()));
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPInputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPInputStream.java
index 701288c..a6ab7c1 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPInputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPInputStream.java
@@ -105,9 +105,9 @@ public abstract class GTPInputStream extends GTPFileFormat implements TGInputStr
 	}
 	
 	protected String readString(int size, int len, String charset) throws IOException{
-		byte[] bytes = new byte[ (size > 0?size:len) ];
+		byte[] bytes = new byte[ (size > 0 ? size : len ) ];
 		this.stream.read(bytes);
-		return newString(bytes,(len >= 0?len:size), charset);
+		return newString(bytes,(len >= 0 && len <= bytes.length ? len : size ), charset);
 	}
 	
 	protected String readString(int length, String charset) throws IOException{
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPInputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPInputStreamPlugin.java
new file mode 100644
index 0000000..951a9ad
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPInputStreamPlugin.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.io.gtp;
+
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.io.plugin.TGInputStreamPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class GTPInputStreamPlugin extends TGInputStreamPlugin{
+	
+	private TGInputStreamBase inputStreamBase;
+	
+	public GTPInputStreamPlugin(TGInputStreamBase inputStreamBase){
+		this.inputStreamBase = inputStreamBase;
+	}
+	
+	protected TGInputStreamBase getInputStream() throws TGPluginException {
+		return this.inputStreamBase;
+	}
+	
+	public String getModuleId(){
+		return GTPPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPOutputStream.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPOutputStream.java
index 52b7af5..aa9a863 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPOutputStream.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPOutputStream.java
@@ -2,12 +2,19 @@ package org.herac.tuxguitar.io.gtp;
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.Iterator;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
 import org.herac.tuxguitar.io.base.TGOutputStreamBase;
 import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGSong;
 
 public abstract class GTPOutputStream extends GTPFileFormat implements TGOutputStreamBase{
 	
+	private GMChannelRouter channelRouter;
 	private OutputStream outputStream;
 	
 	public GTPOutputStream(GTPSettings settings){
@@ -88,4 +95,33 @@ public abstract class GTPOutputStream extends GTPFileFormat implements TGOutputS
 		this.outputStream.flush();
 		this.outputStream.close();
 	}
+	
+	protected void configureChannelRouter( TGSong song ){
+		this.channelRouter = new GMChannelRouter();
+		
+		GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(this.channelRouter);
+		gmChannelRouterConfigurator.configureRouter(song.getChannels());
+	}
+	
+	protected GMChannelRoute getChannelRoute( int channelId ){
+		GMChannelRoute gmChannelRoute = this.channelRouter.getRoute(channelId);
+		if( gmChannelRoute == null ){
+			gmChannelRoute = new GMChannelRoute(GMChannelRoute.NULL_VALUE);
+			gmChannelRoute.setChannel1(15);
+			gmChannelRoute.setChannel2(15);
+		}
+		
+		return gmChannelRoute;
+	}
+	
+	protected boolean isPercussionChannel( TGSong song, int channelId ){
+		Iterator it = song.getChannels();
+		while( it.hasNext() ){
+			TGChannel channel = (TGChannel)it.next();
+			if( channel.getChannelId() == channelId ){
+				return channel.isPercussionChannel();
+			}
+		}
+		return false;
+	}
 }
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPOutputStreamPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPOutputStreamPlugin.java
new file mode 100644
index 0000000..52083c1
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPOutputStreamPlugin.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.io.gtp;
+
+import org.herac.tuxguitar.io.base.TGOutputStreamBase;
+import org.herac.tuxguitar.io.plugin.TGOutputStreamPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class GTPOutputStreamPlugin extends TGOutputStreamPlugin{
+	
+	private TGOutputStreamBase outputStreamBase;
+	
+	public GTPOutputStreamPlugin(TGOutputStreamBase outputStreamBase){
+		this.outputStreamBase = outputStreamBase;
+	}
+	
+	protected TGOutputStreamBase getOutputStream() throws TGPluginException {
+		return this.outputStreamBase;
+	}
+	
+	public String getModuleId(){
+		return GTPPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPPlugin.java
new file mode 100644
index 0000000..18768cd
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPPlugin.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.io.gtp;
+
+public class GTPPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-gtp";
+	
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPPluginList.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPPluginList.java
deleted file mode 100644
index e60794f..0000000
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPPluginList.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.herac.tuxguitar.io.gtp;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup;
-import org.herac.tuxguitar.gui.system.plugins.base.TGInputStreamPlugin;
-import org.herac.tuxguitar.gui.system.plugins.base.TGOutputStreamPlugin;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList;
-import org.herac.tuxguitar.io.base.TGInputStreamBase;
-import org.herac.tuxguitar.io.base.TGOutputStreamBase;
-
-public class GTPPluginList extends TGPluginList implements TGPluginSetup{
-	
-	protected List getPlugins() {
-		GTPSettingsUtil.instance().load();
-		
-		List plugins = new ArrayList();
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new GP5InputStream(GTPSettingsUtil.instance().getSettings());
-			}
-		});
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new GP4InputStream(GTPSettingsUtil.instance().getSettings());
-			}
-		});
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new GP3InputStream(GTPSettingsUtil.instance().getSettings());
-			}
-		});
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new GP2InputStream(GTPSettingsUtil.instance().getSettings());
-			}
-		});
-		plugins.add(new TGInputStreamPlugin() {
-			protected TGInputStreamBase getInputStream() {
-				return new GP1InputStream(GTPSettingsUtil.instance().getSettings());
-			}
-		});
-		plugins.add(new TGOutputStreamPlugin() {
-			protected TGOutputStreamBase getOutputStream() {
-				return new GP5OutputStream(GTPSettingsUtil.instance().getSettings());
-			}
-		});
-		plugins.add(new TGOutputStreamPlugin() {
-			protected TGOutputStreamBase getOutputStream() {
-				return new GP4OutputStream(GTPSettingsUtil.instance().getSettings());
-			}
-		});
-		plugins.add(new TGOutputStreamPlugin() {
-			protected TGOutputStreamBase getOutputStream() {
-				return new GP3OutputStream(GTPSettingsUtil.instance().getSettings());
-			}
-		});
-		return plugins;
-	}
-	
-	public void setupDialog(Shell parent) {
-		GTPSettingsUtil.instance().configure(parent);
-	}
-	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getName() {
-		return "GPx File Format plugin";
-	}
-	
-	public String getDescription() {
-		return "GPx File Format plugin for TuxGuitar";
-	}
-	
-	public String getVersion() {
-		return "1.0";
-	}
-}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsHandler.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsHandler.java
new file mode 100644
index 0000000..763d728
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsHandler.java
@@ -0,0 +1,11 @@
+package org.herac.tuxguitar.io.gtp;
+
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+
+public class GTPSettingsHandler implements TGPluginSettingsHandler {
+
+	public void openSettingsDialog(Shell parent) {
+		GTPSettingsUtil.instance().configure(parent);
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsPlugin.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsPlugin.java
new file mode 100644
index 0000000..3fd47f1
--- /dev/null
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsPlugin.java
@@ -0,0 +1,16 @@
+package org.herac.tuxguitar.io.gtp;
+
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsAdapter;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class GTPSettingsPlugin extends TGPluginSettingsAdapter {
+
+	protected TGPluginSettingsHandler getHandler() throws TGPluginException {
+		return new GTPSettingsHandler();
+	}
+	
+	public String getModuleId() {
+		return GTPPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsUtil.java b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsUtil.java
index d3ff78c..e211c71 100644
--- a/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsUtil.java
+++ b/TuxGuitar-gtp/src/org/herac/tuxguitar/io/gtp/GTPSettingsUtil.java
@@ -17,10 +17,9 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager;
-import org.herac.tuxguitar.gui.util.DialogUtils;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
 
 public class GTPSettingsUtil {
 	
@@ -49,8 +48,7 @@ public class GTPSettingsUtil {
 	
 	public TGConfigManager getConfig(){
 		if(this.config == null){ 
-			this.config = new TGPluginConfigManager("tuxguitar-gtp");
-			this.config.init();
+			this.config = new TGConfigManager("tuxguitar-gtp");
 		}
 		return this.config;
 	}
@@ -60,7 +58,7 @@ public class GTPSettingsUtil {
 		if( charsetDefault == null ){
 			charsetDefault = GTPSettings.DEFAULT_CHARSET;
 		}
-		this.settings.setCharset( getConfig().getStringConfigValue(KEY_CHARSET, charsetDefault) );
+		this.settings.setCharset( getConfig().getStringValue(KEY_CHARSET, charsetDefault) );
 	}
 	
 	public void configure(Shell parent) {
@@ -106,7 +104,7 @@ public class GTPSettingsUtil {
 				int selection = value.getSelectionIndex();
 				if(selection >= 0 && selection < charsets.size() ){
 					TGConfigManager config = getConfig();
-					config.setProperty(KEY_CHARSET, (String)charsets.get(selection));
+					config.setValue(KEY_CHARSET, (String)charsets.get(selection));
 					config.save();
 					load();
 				}
diff --git a/TuxGuitar-image/build.properties b/TuxGuitar-image/build.properties
new file mode 100644
index 0000000..717c2ef
--- /dev/null
+++ b/TuxGuitar-image/build.properties
@@ -0,0 +1,9 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
+
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-image/build.xml b/TuxGuitar-image/build.xml
new file mode 100644
index 0000000..43d0493
--- /dev/null
+++ b/TuxGuitar-image/build.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-image" basedir="." default="all">
+	<description>
+		TuxGuitar Image Exporter
+	</description>
+	
+	<property file="build.properties" />
+	<property name="build.src.path" value="src${file.separator}" />
+	<property name="build.share.path" value="share${file.separator}" />
+	<property name="build.path" value="build${file.separator}" />
+	<property name="build.jar" value="tuxguitar-image.jar" />
+	
+	<path id="class.path">
+		<pathelement location="${path.swt}"/>
+		<pathelement location="${path.tuxguitar}"/>
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
+	</path >
+	
+	<target name="init" depends="clean">
+		<mkdir dir="${build.path}" />
+	</target>
+	
+	<target name="build" depends="init">
+		<echo>+-------------------------------------------------+</echo>
+		<echo>|          B U I L D I N G   P L U G I N          |</echo>
+		<echo>+-------------------------------------------------+</echo>
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<classpath refid="class.path"/>
+			<include name="**/*.java"/>
+		</javac>
+		
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
+		
+		<echo>+-----------------------------------------------+</echo>
+		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
+		<echo>+-----------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}" basedir="${build.path}" />
+		<delete quiet="true" dir="${build.path}" />
+	</target>
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
diff --git a/TuxGuitar-image/pom.xml b/TuxGuitar-image/pom.xml
new file mode 100644
index 0000000..ef4f756
--- /dev/null
+++ b/TuxGuitar-image/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-image</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-image/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-image/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..66667ab
--- /dev/null
+++ b/TuxGuitar-image/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.io.image.ImageExporterPlugin
\ No newline at end of file
diff --git a/TuxGuitar-image/share/META-INF/tuxguitar-image.info b/TuxGuitar-image/share/META-INF/tuxguitar-image.info
new file mode 100644
index 0000000..96a0bf7
--- /dev/null
+++ b/TuxGuitar-image/share/META-INF/tuxguitar-image.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Image exporter
+plugin.description=Image exporter
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=0.1
diff --git a/TuxGuitar-image/share/lang/messages.properties b/TuxGuitar-image/share/lang/messages.properties
new file mode 100644
index 0000000..ba9c397
--- /dev/null
+++ b/TuxGuitar-image/share/lang/messages.properties
@@ -0,0 +1,4 @@
+tuxguitar-image.export-label=Create Image Folder
+
+tuxguitar-image.format=Image Format
+tuxguitar-image.directory-dialog.title=Choose a Folder
\ No newline at end of file
diff --git a/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageExporter.java b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageExporter.java
new file mode 100644
index 0000000..f901fa8
--- /dev/null
+++ b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageExporter.java
@@ -0,0 +1,183 @@
+package org.herac.tuxguitar.io.image;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.graphics.Image;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.editors.TGResourceFactoryImpl;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.printer.PrintController;
+import org.herac.tuxguitar.app.printer.PrintDocument;
+import org.herac.tuxguitar.app.printer.PrintLayout;
+import org.herac.tuxguitar.app.printer.PrintStyles;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.TGFactoryImpl;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class ImageExporter implements TGRawExporter{
+	
+	private static final int PAGE_WIDTH = 550;
+	private static final int PAGE_HEIGHT = 800;
+	
+	private PrintStyles styles;
+	private ImageFormat format;
+	private String path;
+	
+	public String getExportName() {
+		return TuxGuitar.getProperty("tuxguitar-image.export-label");
+	}
+	
+	public PrintStyles getStyles() {
+		return this.styles;
+	}
+	
+	public void setStyles(PrintStyles styles) {
+		this.styles = styles;
+	}
+	
+	public ImageFormat getFormat() {
+		return this.format;
+	}
+	
+	public void setFormat(ImageFormat format) {
+		this.format = format;
+	}
+	
+	public String getPath() {
+		return this.path;
+	}
+	
+	public void setPath(String path) {
+		this.path = path;
+	}
+	
+	public PrintStyles getDefaultStyles(TGSong song){
+		PrintStyles styles = new PrintStyles();
+		styles.setStyle(TGLayout.DISPLAY_TABLATURE);
+		styles.setFromMeasure(1);
+		styles.setToMeasure(song.countMeasureHeaders());
+		styles.setTrackNumber(1);
+		styles.setBlackAndWhite(false);
+		return styles;
+	}
+	
+	public void exportSong(final TGSong song) {
+		if( this.path != null ){
+			if( this.styles == null ){
+				this.styles = getDefaultStyles(song);
+			}
+			if( this.format == null ){
+				this.format = ImageFormat.IMAGE_FORMATS[0];
+			}
+			export(song);
+		}
+	}
+	
+	public void export(final TGSong song){
+		new Thread(new Runnable() {
+			public void run() {
+				try{
+					TGSongManager manager = new TGSongManager();
+					manager.setFactory(new TGFactoryImpl());
+					manager.setSong(song.clone(manager.getFactory()));
+					
+					export(manager);
+				}catch(Throwable throwable){
+					MessageDialog.errorMessage(throwable);
+				}
+			}
+		}).start();
+	}
+	
+	public void export(final TGSongManager manager){
+		new SyncThread(new Runnable() {
+			public void run() {
+				try{
+					TGResourceFactory factory = new TGResourceFactoryImpl(TuxGuitar.instance().getDisplay());
+					
+					PrintController controller = new PrintController(manager, factory);
+					PrintLayout layout = new PrintLayout(controller, getStyles());
+					
+					export(layout);
+				}catch(Throwable throwable){
+					MessageDialog.errorMessage(throwable);
+				}
+			}
+		}).start();
+	}
+	
+	public void export(final PrintLayout layout){
+		new Thread(new Runnable() {
+			public void run() {
+				try{
+					layout.loadStyles(1f);
+					layout.updateSong();
+					layout.makeDocument(new PrintDocumentImpl(new TGRectangle(25,25,PAGE_WIDTH,PAGE_HEIGHT), getFormat(), getPath() ));
+				}catch(Throwable throwable){
+					MessageDialog.errorMessage(throwable);
+				}
+			}
+		}).start();
+	}
+	
+	private class PrintDocumentImpl implements PrintDocument{
+		
+		private TGPainterImpl painter;
+		private TGRectangle bounds;
+		private String path;
+		private Image buffer;
+		private List pages;
+		private ImageFormat format;
+		
+		public PrintDocumentImpl(TGRectangle bounds, ImageFormat format, String path){
+			this.bounds = bounds;
+			this.path = path;
+			this.painter = new TGPainterImpl();
+			this.pages = new ArrayList();
+			this.format = format;
+		}
+		
+		public TGPainter getPainter() {
+			return this.painter;
+		}
+		
+		public TGRectangle getBounds(){
+			return this.bounds;
+		}
+		
+		public void pageStart() {
+			this.buffer = new Image(TuxGuitar.instance().getDisplay(),this.bounds.getWidth() + (this.bounds.getX() * 2), this.bounds.getHeight() + (this.bounds.getY() * 2) );
+			this.painter.init( this.buffer );
+		}
+		
+		public void pageFinish() {
+			this.pages.add( this.buffer.getImageData() );
+			this.painter.dispose();
+			this.buffer.dispose();
+		}
+		
+		public void start() {
+			// Not implemented
+		}
+		
+		public void finish() {
+			try {
+				ImageWriter.write(this.format, this.path, this.pages);
+			} catch (Throwable throwable) {
+				MessageDialog.errorMessage(throwable);
+			}
+		}
+		
+		public boolean isPaintable(int page) {
+			return true;
+		}
+	}
+}
diff --git a/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageExporterDialog.java b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageExporterDialog.java
new file mode 100644
index 0000000..9ce8bea
--- /dev/null
+++ b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageExporterDialog.java
@@ -0,0 +1,246 @@
+package org.herac.tuxguitar.io.image;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.printer.PrintStyles;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class ImageExporterDialog extends ImageExporter {
+	
+	public void exportSong(final TGSong song) {
+		new SyncThread(new Runnable() {
+			public void run() {
+				try{
+					exportSongDialog(song, TuxGuitar.instance().getShell());
+				}catch(Throwable throwable){
+					return;
+				}
+			}
+		}).start();
+	}
+	
+	public void exportSong(TGSong song, PrintStyles styles, ImageFormat format){
+		try{
+			DirectoryDialog dialog = new DirectoryDialog( TuxGuitar.instance().getShell() );
+			dialog.setText(TuxGuitar.getProperty("tuxguitar-image.directory-dialog.title"));
+			String path = dialog.open();
+			if( path != null ){
+				setPath( path );
+				setStyles( styles );
+				setFormat( format );
+				super.exportSong(song);
+			}
+		}catch(Throwable throwable){
+			return;
+		}
+	}
+	
+	public void exportSongDialog(final TGSong song, final Shell shell) {
+		final PrintStyles styles = getDefaultStyles(song) ;
+		
+		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("options"));
+		
+		//------------------FORMAT SELECTION------------------
+		Group formatGroup = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		formatGroup.setLayout(new GridLayout(2,false));
+		formatGroup.setLayoutData(getGroupData());
+		formatGroup.setText(TuxGuitar.getProperty("tuxguitar-image.format"));
+		
+		Label formatLabel = new Label(formatGroup, SWT.NULL);
+		formatLabel.setText(TuxGuitar.getProperty("tuxguitar-image.format"));
+		
+		final Combo formatCombo = new Combo(formatGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		formatCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		for(int i = 0; i < ImageFormat.IMAGE_FORMATS.length; i ++){
+			formatCombo.add( ImageFormat.IMAGE_FORMATS[i].getName() );
+		}
+		formatCombo.select(0);
+		
+		//------------------TRACK SELECTION------------------
+		Group track = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		track.setLayout(new GridLayout(2,false));
+		track.setLayoutData(getGroupData());
+		track.setText(TuxGuitar.getProperty("track"));
+		
+		Label trackLabel = new Label(track, SWT.NULL);
+		trackLabel.setText(TuxGuitar.getProperty("track"));
+		
+		final Combo tracks = new Combo(track, SWT.DROP_DOWN | SWT.READ_ONLY);
+		tracks.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){
+			tracks.add(TuxGuitar.instance().getSongManager().getTrack(number).getName());
+		}
+		tracks.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber() - 1);
+		
+		//------------------MEASURE RANGE------------------
+		Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		range.setLayout(new GridLayout(2,false));
+		range.setLayoutData(getGroupData());
+		range.setText(TuxGuitar.getProperty("print.range"));
+		
+		final int minSelection = 1;
+		final int maxSelection = TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders();
+		
+		Label fromLabel = new Label(range, SWT.NULL);
+		fromLabel.setText(TuxGuitar.getProperty("edit.from"));
+		final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
+		fromSpinner.setLayoutData(getSpinnerData());
+		fromSpinner.setMaximum(maxSelection);
+		fromSpinner.setMinimum(minSelection);
+		fromSpinner.setSelection(minSelection);
+		
+		Label toLabel = new Label(range, SWT.NULL);
+		toLabel.setText(TuxGuitar.getProperty("edit.to"));
+		final Spinner toSpinner = new Spinner(range, SWT.BORDER);
+		toSpinner.setLayoutData(getSpinnerData());
+		toSpinner.setMinimum(minSelection);
+		toSpinner.setMaximum(maxSelection);
+		toSpinner.setSelection(maxSelection);
+		
+		fromSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int fromSelection = fromSpinner.getSelection();
+				int toSelection = toSpinner.getSelection();
+				
+				if(fromSelection < minSelection){
+					fromSpinner.setSelection(minSelection);
+				}else if(fromSelection > toSelection){
+					fromSpinner.setSelection(toSelection);
+				}
+			}
+		});
+		toSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int toSelection = toSpinner.getSelection();
+				int fromSelection = fromSpinner.getSelection();
+				if(toSelection < fromSelection){
+					toSpinner.setSelection(fromSelection);
+				}else if(toSelection > maxSelection){
+					toSpinner.setSelection(maxSelection);
+				}
+			}
+		});
+		//------------------CHECK OPTIONS--------------------
+		Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		options.setLayout(new GridLayout());
+		options.setLayoutData(getGroupData());
+		options.setText(TuxGuitar.getProperty("options"));
+		
+		final Button tablatureEnabled = new Button(options,SWT.CHECK);
+		tablatureEnabled.setText(TuxGuitar.getProperty("export.tablature-enabled"));
+		tablatureEnabled.setSelection(true);
+		
+		final Button scoreEnabled = new Button(options,SWT.CHECK);
+		scoreEnabled.setText(TuxGuitar.getProperty("export.score-enabled"));
+		scoreEnabled.setSelection(true);
+		
+		final Button chordNameEnabled = new Button(options,SWT.CHECK);
+		chordNameEnabled.setText(TuxGuitar.getProperty("export.chord-name-enabled"));
+		chordNameEnabled.setSelection(true);
+		
+		final Button chordDiagramEnabled = new Button(options,SWT.CHECK);
+		chordDiagramEnabled.setText(TuxGuitar.getProperty("export.chord-diagram-enabled"));
+		chordDiagramEnabled.setSelection(true);
+		
+		final Button blackAndWhite = new Button(options,SWT.CHECK);
+		blackAndWhite.setText(TuxGuitar.getProperty("export.black-and-white"));
+		blackAndWhite.setSelection(true);
+		
+		tablatureEnabled.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!tablatureEnabled.getSelection()){
+					scoreEnabled.setSelection(true);
+				}
+			}
+		});
+		scoreEnabled.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!scoreEnabled.getSelection()){
+					tablatureEnabled.setSelection(true);
+				}
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				int format = formatCombo.getSelectionIndex();
+				if( format < 0 || format >= ImageFormat.IMAGE_FORMATS.length ){
+					format = 0;
+				}
+				
+				int style = 0;
+				style |= (scoreEnabled.getSelection() ? TGLayout.DISPLAY_SCORE : 0);
+				style |= (tablatureEnabled.getSelection() ? TGLayout.DISPLAY_TABLATURE : 0);
+				style |= (chordNameEnabled.getSelection() ? TGLayout.DISPLAY_CHORD_NAME : 0);
+				style |= (chordDiagramEnabled.getSelection() ? TGLayout.DISPLAY_CHORD_DIAGRAM : 0);
+				styles.setTrackNumber(tracks.getSelectionIndex() + 1);
+				styles.setFromMeasure(fromSpinner.getSelection());
+				styles.setToMeasure(toSpinner.getSelection());
+				styles.setBlackAndWhite(blackAndWhite.getSelection());
+				styles.setStyle(style);
+				
+				dialog.dispose();
+				
+				exportSong(song, styles, ImageFormat.IMAGE_FORMATS[ format ] );
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+	}
+	
+	private static GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private static GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 60;
+		return data;
+	}
+	
+	private static GridData getGroupData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 300;
+		return data;
+	}
+}
diff --git a/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageExporterPlugin.java b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageExporterPlugin.java
new file mode 100644
index 0000000..a39bb52
--- /dev/null
+++ b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageExporterPlugin.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.io.image;
+
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
+
+public class ImageExporterPlugin extends TGExporterPlugin{
+	
+	public static final String MODULE_ID = "tuxguitar-image";
+	
+	protected TGRawExporter getExporter() {
+		return new ImageExporterDialog();
+	}
+	
+	public String getModuleId(){
+		return MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageFormat.java b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageFormat.java
new file mode 100644
index 0000000..f83a1f3
--- /dev/null
+++ b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageFormat.java
@@ -0,0 +1,34 @@
+package org.herac.tuxguitar.io.image;
+
+import org.eclipse.swt.SWT;
+
+public class ImageFormat {
+	
+	public final static ImageFormat[] IMAGE_FORMATS = new ImageFormat[] {
+		new ImageFormat( SWT.IMAGE_PNG , "PNG" , ".png" ),
+		new ImageFormat( SWT.IMAGE_JPEG , "JPEG" , ".jpg" ),
+		new ImageFormat( SWT.IMAGE_BMP , "BMP", ".bmp" ),
+	};
+	
+	private int format;
+	private String name;
+	private String extension;
+	
+	public ImageFormat(int format, String name, String extension){
+		this.format = format;
+		this.name = name;
+		this.extension = extension;
+	}
+	
+	public int getFormat() {
+		return this.format;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public String getExtension() {
+		return this.extension;
+	}
+}
diff --git a/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageWriter.java b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageWriter.java
new file mode 100644
index 0000000..3f18fb2
--- /dev/null
+++ b/TuxGuitar-image/src/org/herac/tuxguitar/io/image/ImageWriter.java
@@ -0,0 +1,30 @@
+package org.herac.tuxguitar.io.image;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+
+public class ImageWriter {
+	
+	public static void write(ImageFormat format, String path, List pages) throws TGFileFormatException {
+		try {
+			for(int i = 0; i < pages.size() ; i ++ ) {
+				OutputStream stream = new FileOutputStream(new File(path + File.separator + "page-" + i + format.getExtension() ));
+				
+				ImageLoader loader = new ImageLoader();
+				loader.data = new ImageData[] { (ImageData)pages.get(i) };
+				loader.save(stream, format.getFormat() );
+				
+				stream.flush();
+				stream.close();
+			}
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException("Could not write song!.",throwable);
+		}
+	}
+}
diff --git a/TuxGuitar-jack-ui/build.properties b/TuxGuitar-jack-ui/build.properties
new file mode 100644
index 0000000..668c8d9
--- /dev/null
+++ b/TuxGuitar-jack-ui/build.properties
@@ -0,0 +1,12 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
+
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-jack=../TuxGuitar-jack/tuxguitar-jack.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
+path.swt=../TuxGuitar/lib/swt.jar
+
diff --git a/TuxGuitar-jack-ui/build.xml b/TuxGuitar-jack-ui/build.xml
new file mode 100644
index 0000000..3c50e5f
--- /dev/null
+++ b/TuxGuitar-jack-ui/build.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-jack-ui" basedir="." default="all">
+	<description>
+	TuxGuitar JACK Audio Connection Kit
+	</description>
+		
+	<property file="build.properties" />
+	<property name="build.src.path" value="src${file.separator}" />
+	<property name="build.share.path" value="share${file.separator}" />
+	<property name="build.path" value="build${file.separator}" />
+	<property name="build.jar" value="tuxguitar-jack-ui.jar" />
+	
+	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
+		<pathelement location="${path.tuxguitar-jack}"/>
+		<pathelement location="${path.tuxguitar}"/>
+		<pathelement location="${path.swt}"/>
+	</path >
+	
+	<target name="init" depends="clean">
+		<mkdir dir="${build.path}" />
+	</target>
+	
+	<target name="build" depends="init">
+		<echo>+-------------------------------------------------+</echo>
+		<echo>|          B U I L D I N G   P L U G I N          |</echo>
+		<echo>+-------------------------------------------------+</echo>
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<classpath refid="class.path"/>
+			<include name="**/*.java"/>
+		</javac>
+		
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
+		
+		<echo>+-----------------------------------------------+</echo>
+		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
+		<echo>+-----------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}" basedir="${build.path}" />
+		<delete quiet="true" dir="${build.path}" />
+	</target>
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
diff --git a/TuxGuitar-jack-ui/pom.xml b/TuxGuitar-jack-ui/pom.xml
new file mode 100644
index 0000000..c2cc837
--- /dev/null
+++ b/TuxGuitar-jack-ui/pom.xml
@@ -0,0 +1,51 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-jack-ui</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+	
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-jack</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-jack-ui/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-jack-ui/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..4f0701b
--- /dev/null
+++ b/TuxGuitar-jack-ui/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,2 @@
+org.herac.tuxguitar.jack.synthesizer.settings.JackChannelSettingsPlugin
+org.herac.tuxguitar.jack.console.JackConsolePlugin
diff --git a/TuxGuitar-jack-ui/share/lang/messages.properties b/TuxGuitar-jack-ui/share/lang/messages.properties
new file mode 100644
index 0000000..26ac295
--- /dev/null
+++ b/TuxGuitar-jack-ui/share/lang/messages.properties
@@ -0,0 +1,17 @@
+jack.settings.channel.dialog=Channel Settings
+jack.settings.channel.gm.tip=General Midi Settings
+jack.settings.channel.gm.channel.label-1=Normal Channel
+jack.settings.channel.gm.channel.label-2=Effect Channel
+jack.settings.channel.gm.channel.value-1=CH #{0}
+jack.settings.channel.gm.channel.value-2=EC #{0}
+jack.settings.channel.exclusive.port=Exclusive Jack Port
+
+
+jack.console.title=Jack Console
+jack.console.options=Options
+jack.console.autoconnect.ports=Automatically restore saved connections
+jack.console.store.connections=Store Jack Connections
+jack.console.store.connections.success=Connections successfully stored
+jack.console.restore.connections=Restore Jack Connections
+jack.console.restore.connections.success=Connections successfully restored
+jack.console.info.message.title=Information
\ No newline at end of file
diff --git a/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/console/JackConsoleDialog.java b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/console/JackConsoleDialog.java
new file mode 100644
index 0000000..83c8923
--- /dev/null
+++ b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/console/JackConsoleDialog.java
@@ -0,0 +1,176 @@
+package org.herac.tuxguitar.jack.console;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.jack.connection.JackConnectionManager;
+import org.herac.tuxguitar.util.error.TGErrorManager;
+
+public class JackConsoleDialog implements LanguageLoader,IconLoader{
+	
+	private static final int SHELL_WIDTH = 350;
+	
+	private JackConnectionManager jackConnectionManager;
+	
+	private Shell dialog;
+	private Group groupOptions;
+
+	private Button buttonAutoConnectPorts;
+	private Button buttonStoreConnections;
+	private Button buttonRestoreConnections;
+	
+	public JackConsoleDialog(JackConnectionManager jackConnectionManager) {
+		this.jackConnectionManager = jackConnectionManager;
+	}
+	
+	public void show() {
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setMinimumSize(SHELL_WIDTH,SWT.DEFAULT);
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				TuxGuitar.instance().getIconManager().removeLoader( JackConsoleDialog.this );
+				TuxGuitar.instance().getLanguageManager().removeLoader( JackConsoleDialog.this );
+			}
+		});
+		
+		// Options
+		this.groupOptions = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
+		this.groupOptions.setLayout(new GridLayout());
+		this.groupOptions.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		
+		Composite composite = new Composite(this.groupOptions, SWT.NONE);
+		composite.setLayout(new GridLayout(1,false));
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		
+		this.buttonAutoConnectPorts = new Button(composite,SWT.CHECK);
+		this.buttonAutoConnectPorts.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,false,false));
+		this.buttonAutoConnectPorts.setSelection(this.jackConnectionManager.isAutoConnectPorts());
+		this.buttonAutoConnectPorts.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				final boolean selection = ((Button) e.widget).getSelection();
+				new Thread(new Runnable() {
+					public void run() {
+						updateAutoConnectPorts(selection);
+					}
+				}).start();
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(this.dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(1,false));
+		buttons.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
+		
+		this.buttonStoreConnections = new Button(buttons, SWT.PUSH);
+		this.buttonStoreConnections.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		this.buttonStoreConnections.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				new Thread(new Runnable() {
+					public void run() {
+						storeConnections();
+					}
+				}).start();
+			}
+		});
+		
+		this.buttonRestoreConnections = new Button(buttons, SWT.PUSH);
+		this.buttonRestoreConnections.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		this.buttonRestoreConnections.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				new Thread(new Runnable() {
+					public void run() {
+						restoreConnections();
+					}
+				}).start();
+			}
+		});
+		
+		this.loadIcons(false);
+		this.loadProperties(false);
+		
+		TuxGuitar.instance().getIconManager().addLoader( this );
+		TuxGuitar.instance().getLanguageManager().addLoader( this );
+		
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	public boolean isDisposed(){
+		return (this.dialog == null || this.dialog.isDisposed());
+	}
+	
+	public void loadProperties(){
+		this.loadProperties(true);
+	}
+	
+	public void loadProperties(boolean layout){
+		if(!isDisposed()){
+			this.dialog.setText(TuxGuitar.getProperty("jack.console.title"));
+			this.groupOptions.setText(TuxGuitar.getProperty("jack.console.options"));
+			this.buttonAutoConnectPorts.setText(TuxGuitar.getProperty("jack.console.autoconnect.ports"));
+			this.buttonStoreConnections.setText(TuxGuitar.getProperty("jack.console.store.connections"));
+			this.buttonRestoreConnections.setText(TuxGuitar.getProperty("jack.console.restore.connections"));
+			if(layout){
+				this.dialog.layout(true, true);
+			}
+		}
+	}
+	
+	public void loadIcons() {
+		this.loadIcons(true);
+	}
+	
+	public void loadIcons(boolean layout){
+		if(!isDisposed()){
+			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+			if(layout){
+				this.dialog.layout(true, true);
+			}
+		}
+	}
+	
+	public void updateAutoConnectPorts( boolean autoConnectPorts ){
+		try {
+			this.jackConnectionManager.setAutoConnectPorts(autoConnectPorts);
+			this.jackConnectionManager.saveConfig();
+		} catch (Throwable throwable){
+			TGErrorManager.getInstance().handleError(throwable);
+		}
+	}
+	
+	public void storeConnections(){
+		try {
+			this.jackConnectionManager.loadExistingConnections();
+			this.jackConnectionManager.saveConfig();
+			this.showInfoMessage("jack.console.info.message.title", "jack.console.store.connections.success");
+		} catch (Throwable throwable){
+			TGErrorManager.getInstance().handleError(throwable);
+		}
+	}
+	
+	public void restoreConnections(){
+		try {
+			this.jackConnectionManager.connectAllPorts();
+			this.showInfoMessage("jack.console.info.message.title", "jack.console.restore.connections.success");
+		} catch (Throwable throwable){
+			TGErrorManager.getInstance().handleError(throwable);
+		}
+	}
+	
+	public void showInfoMessage(String title, String message){
+		MessageDialog.infoMessage(this.dialog, TuxGuitar.getProperty(title), TuxGuitar.getProperty(message));
+	}
+}
diff --git a/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/console/JackConsolePlugin.java b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/console/JackConsolePlugin.java
new file mode 100644
index 0000000..5c43ad9
--- /dev/null
+++ b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/console/JackConsolePlugin.java
@@ -0,0 +1,49 @@
+package org.herac.tuxguitar.jack.console;
+
+import java.util.List;
+
+import org.herac.tuxguitar.jack.JackPlugin;
+import org.herac.tuxguitar.jack.connection.JackConnectionManager;
+import org.herac.tuxguitar.jack.connection.JackConnectionPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginManager;
+
+public class JackConsolePlugin extends org.herac.tuxguitar.app.tools.custom.TGToolItemPlugin {
+	
+	private JackConsoleDialog jackConsoleDialog;
+	
+	protected String getItemName() {
+		return "Jack Console";
+	}
+	
+	protected void doAction() {
+		if( this.jackConsoleDialog == null ){
+			JackConnectionManager jackConnectionManager = findConnectionManager();
+			if( jackConnectionManager != null ){
+				 this.jackConsoleDialog = new JackConsoleDialog(jackConnectionManager);
+			}
+		}
+		if( this.jackConsoleDialog != null && this.jackConsoleDialog.isDisposed() ){
+			this.jackConsoleDialog.show();
+		}
+	}
+	
+	private JackConnectionManager findConnectionManager() {
+		JackConnectionPlugin plugin = findConnectionPlugin();
+		if( plugin != null ){
+			return plugin.getJackConnectionManager();
+		}
+		return null;
+	}
+	
+	private JackConnectionPlugin findConnectionPlugin(){
+		List pluginInstances = TGPluginManager.getInstance().getPluginInstances(JackConnectionPlugin.class);
+		if( pluginInstances != null && !pluginInstances.isEmpty() ){
+			return ((JackConnectionPlugin)pluginInstances.get(0));
+		}
+		return null;
+	}
+	
+	public String getModuleId(){
+		return JackPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackChannelSettingsDialog.java b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackChannelSettingsDialog.java
new file mode 100644
index 0000000..b0aed66
--- /dev/null
+++ b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackChannelSettingsDialog.java
@@ -0,0 +1,349 @@
+package org.herac.tuxguitar.jack.synthesizer.settings;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsDialog;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
+import org.herac.tuxguitar.jack.synthesizer.JackChannelParameter;
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.util.error.TGErrorManager;
+
+public class JackChannelSettingsDialog implements TGChannelSettingsDialog{
+	
+	public static final short MAX_CHANNELS = 16;
+	public static final short DEFAULT_INSTRUMENT_CHANNEL_1 = 0;
+	public static final short DEFAULT_INSTRUMENT_CHANNEL_2 = 1;
+	public static final short DEFAULT_PERCUSSION_CHANNEL = 9;
+	
+	private TGChannel channel;
+	private GMChannelRouter router;
+	private Shell dialog;
+	private Combo gmChannel1Combo;
+	private Combo gmChannel2Combo;
+	private Button exclusiveButton;
+	private JackMidiPlayerListener jackMidiPlayerListener;
+	
+	public JackChannelSettingsDialog(TGChannel channel){
+		this.channel = channel;
+		this.router = new GMChannelRouter();
+		this.jackMidiPlayerListener = new JackMidiPlayerListener(this);
+	}
+	
+	public void show(final Shell parent) {
+		this.configureRouter(true);
+		
+		this.dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM);
+		this.dialog.setLayout(new GridLayout(1,false));
+		this.dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.dialog.setText(TuxGuitar.getProperty("jack.settings.channel.dialog"));
+		
+		//-------------------- GM Channels -------------------------------
+		Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout(2,false));
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setText(TuxGuitar.getProperty("jack.settings.channel.gm.tip"));
+		
+		Label gmChannel1Label = new Label(group, SWT.NULL);
+		gmChannel1Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
+		gmChannel1Label.setText(TuxGuitar.getProperty("jack.settings.channel.gm.channel.label-1") + ":");
+		
+		this.gmChannel1Combo = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.gmChannel1Combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
+		this.gmChannel1Combo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateChannel();
+			}
+		});
+		
+		Label gmChannel2Label = new Label(group, SWT.NULL);
+		gmChannel2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
+		gmChannel2Label.setText(TuxGuitar.getProperty("jack.settings.channel.gm.channel.label-2") + ":");
+		
+		this.gmChannel2Combo = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.gmChannel2Combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
+		this.gmChannel2Combo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateChannel();
+			}
+		});
+		
+		//-------------------- Jack Options-------------------------------
+		Group optionsGroup = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
+		optionsGroup.setLayout(new GridLayout());
+		optionsGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		optionsGroup.setText(TuxGuitar.getProperty("options"));
+		
+		this.exclusiveButton = new Button(optionsGroup, SWT.CHECK);
+		this.exclusiveButton.setText(TuxGuitar.getProperty("jack.settings.channel.exclusive.port"));
+		this.exclusiveButton.setSelection(isExclusive());
+		this.exclusiveButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateExclusive();
+			}
+		});
+		
+		//-------------------- Jack Options-------------------------------
+		
+		this.updateDefaultExclusiveChannels();
+		this.updateChannelCombos();
+		this.updateControls();
+		
+		this.addMidiPlayerListener();
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent arg0) {
+				removeMidiPlayerListener();
+			}
+		});
+		
+		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	public void addMidiPlayerListener(){
+		MidiPlayer.getInstance().addListener(this.jackMidiPlayerListener);
+	}
+	
+	public void removeMidiPlayerListener(){
+		MidiPlayer.getInstance().removeListener(this.jackMidiPlayerListener);
+	}
+	
+	public void updateControls(){
+		if( this.dialog != null && !this.dialog.isDisposed() ){
+			boolean playerRunning = TuxGuitar.instance().getPlayer().isRunning();
+			
+			this.gmChannel1Combo.setEnabled(!playerRunning && !this.channel.isPercussionChannel() && this.gmChannel1Combo.getItemCount() > 0);
+			this.gmChannel2Combo.setEnabled(!playerRunning && !this.channel.isPercussionChannel() && this.gmChannel2Combo.getItemCount() > 0);
+			this.exclusiveButton.setEnabled(!playerRunning);
+		}
+	}
+	
+	private void configureRouter( boolean updateChannel ){
+		if(!this.isExclusive()){
+			GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(this.router);
+			gmChannelRouterConfigurator.configureRouter(findGmChannels());
+			if( updateChannel ){
+				this.updateChannelFromRouter();
+			}
+		}
+	}
+	
+	private void updateChannelCombos(){
+		if(this.isExclusive() ){
+			this.reloadExclusiveChannelCombos();
+		} else { 
+			this.reloadGMChannelCombos();
+		}
+		this.updateControls();
+	}
+	
+	private void reloadExclusiveChannelCombos(){
+		List channels = new ArrayList();
+		for(int i = 0 ; i < MAX_CHANNELS ; i ++){
+			channels.add(new Integer(i));
+		}
+		
+		int channel1 = getIntegerChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_1, -1);
+		int channel2 = getIntegerChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_2, -1);
+		
+		this.reloadChannelCombo(this.gmChannel1Combo, channels, channel1, "jack.settings.channel.gm.channel.value-1");
+		this.reloadChannelCombo(this.gmChannel2Combo, channels, channel2, "jack.settings.channel.gm.channel.value-2");
+	}
+	
+	private void reloadGMChannelCombos(){
+		GMChannelRoute route = this.router.getRoute(this.channel.getChannelId());
+		
+		List channels = this.router.getFreeChannels(route);
+		
+		this.reloadChannelCombo(this.gmChannel1Combo, channels, route.getChannel1(), "jack.settings.channel.gm.channel.value-1");
+		this.reloadChannelCombo(this.gmChannel2Combo, channels, route.getChannel2(), "jack.settings.channel.gm.channel.value-2");
+	}
+	
+	private void reloadChannelCombo(Combo combo, List channels, int selected, String valueKey){
+		if(!(combo.getData() instanceof List) || isDifferentList(channels, (List)combo.getData())){
+			combo.removeAll();
+			combo.setData(channels);
+			for( int i = 0 ; i < channels.size() ; i ++ ){
+				combo.add(TuxGuitar.getProperty(valueKey, new String[]{channels.get(i).toString()}));
+			}
+		}
+		for( int i = 0 ; i < channels.size() ; i ++ ){
+			Integer channel = (Integer)channels.get(i);
+			if( channel.intValue() == selected ){
+				combo.select( i );
+			}
+		}
+	}
+	
+	public void updateExclusive(){
+		boolean exclusive = this.exclusiveButton.getSelection();
+		
+		this.setChannelParameter(this.channel, JackChannelParameter.PARAMETER_EXCLUSIVE_PORT, Boolean.toString(exclusive));
+		this.removeChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_1);
+		this.removeChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_2);
+		
+		this.configureRouter(true);
+		this.updateDefaultExclusiveChannels();
+		this.updateChannelCombos();
+		this.updatePlayerChannels();
+	}
+	
+	public void updateChannel(){
+		int channel1 = -1;
+		int channel2 = -1;
+		int channel1Selection = this.gmChannel1Combo.getSelectionIndex();
+		
+		Object channel1Data = this.gmChannel1Combo.getData();
+		if( channel1Selection >= 0 && channel1Data instanceof List && ((List)channel1Data).size() > channel1Selection ){
+			channel1 = ((Integer)((List)channel1Data).get(channel1Selection)).intValue();
+		}
+		
+		int channel2Selection = this.gmChannel2Combo.getSelectionIndex();
+		Object channel2Data = this.gmChannel2Combo.getData();
+		if( channel2Selection >= 0 && channel2Data instanceof List && ((List)channel2Data).size() > channel2Selection ){
+			channel2 = ((Integer)((List)channel2Data).get(channel2Selection)).intValue();
+		}
+		
+		setChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_1, Integer.toString(channel1));
+		setChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_2, Integer.toString(channel2));
+		
+		this.configureRouter(false);
+		this.updatePlayerChannels();
+	}
+	
+	public void updateChannelFromRouter(){
+		GMChannelRoute route = this.router.getRoute(this.channel.getChannelId());
+		if( findChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_1) == null ){
+			setChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_1, Integer.toString(route.getChannel1()));
+		}
+		if( findChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_2) == null ){
+			setChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_2, Integer.toString(route.getChannel2()));
+		}
+	}
+	
+	public void updateDefaultExclusiveChannels() {
+		if( this.isExclusive() ){ 
+			int channel1 = ( this.channel.isPercussionChannel() ? DEFAULT_PERCUSSION_CHANNEL : DEFAULT_INSTRUMENT_CHANNEL_1);
+			int channel2 = ( this.channel.isPercussionChannel() ? DEFAULT_PERCUSSION_CHANNEL : DEFAULT_INSTRUMENT_CHANNEL_2);
+			
+			setChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_1, Integer.toString(channel1));
+			setChannelParameter(this.channel, JackChannelParameter.PARAMETER_GM_CHANNEL_2, Integer.toString(channel2));
+		}
+	}
+	
+	public void updatePlayerChannels() {
+		try {
+			if(!MidiPlayer.getInstance().isRunning()){
+				MidiPlayer.getInstance().updateChannels();
+			}
+		} catch(MidiPlayerException e){
+			TGErrorManager.getInstance().handleError(e);
+		}
+	}
+	
+	private void setChannelParameter( TGChannel tgChannel, String key, String value ){
+		TGChannelParameter tgChannelParameter = findOrCreateChannelParameter(tgChannel, key);
+		tgChannelParameter.setValue(value);
+	}
+	
+	private TGChannelParameter findChannelParameter( TGChannel tgChannel, String key ){
+		Iterator it = tgChannel.getParameters();
+		while( it.hasNext() ){
+			TGChannelParameter parameter = (TGChannelParameter)it.next();
+			if( parameter.getKey().equals( key ) ){
+				return parameter;
+			}
+		}
+		return null;
+	}
+	
+	private TGChannelParameter findOrCreateChannelParameter( TGChannel tgChannel, String key ){
+		TGChannelParameter tgChannelParameter = findChannelParameter(tgChannel, key);
+		if( tgChannelParameter == null ){
+			tgChannelParameter = TuxGuitar.instance().getSongManager().getFactory().newChannelParameter();
+			tgChannelParameter.setKey(key);
+			tgChannel.addParameter(tgChannelParameter);
+		}
+		return tgChannelParameter;
+	}
+	
+	private int getIntegerChannelParameter( TGChannel tgChannel, String key , int nullValue){
+		TGChannelParameter tgChannelParameter = findChannelParameter(tgChannel, key);
+		if( tgChannelParameter != null && tgChannelParameter.getValue() != null ){
+			return Integer.parseInt( tgChannelParameter.getValue() );
+		}
+		return nullValue;
+	}
+	
+	private void removeChannelParameter( TGChannel tgChannel, String key ){
+		int index = -1;
+		int count = tgChannel.countParameters();
+		for(int i = 0 ; i < count; i ++){
+			TGChannelParameter parameter = tgChannel.getParameter(i);
+			if( parameter.getKey().equals( key ) ){
+				index = i;
+			}
+		}
+		if( index >= 0 ){
+			tgChannel.removeParameter(index);
+		}
+	}
+	
+	private boolean isDifferentList(List list1, List list2){
+		if( list1.size() != list2.size() ){
+			return true;
+		}
+		for( int i = 0 ; i < list1.size() ; i ++ ){
+			if(!list1.get(i).equals(list2.get(i)) ){
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	private boolean isExclusive(TGChannel tgChannel) {
+		TGChannelParameter tgChannelParameter = findChannelParameter(tgChannel, JackChannelParameter.PARAMETER_EXCLUSIVE_PORT);
+		if( tgChannelParameter != null ){
+			return Boolean.TRUE.toString().equals( tgChannelParameter.getValue() );
+		}
+		return false;
+	}
+	
+	
+	private boolean isExclusive() {
+		return isExclusive(this.channel);
+	}
+	
+	private Iterator findGmChannels(){
+		List tgChannels = new ArrayList();
+		
+		int count = TuxGuitar.instance().getSongManager().getSong().countChannels();
+		for(int i = 0 ; i < count ; i ++) {
+			TGChannel tgChannel = TuxGuitar.instance().getSongManager().getSong().getChannel( i );
+			if(!this.isExclusive( tgChannel ) ){
+				tgChannels.add( tgChannel );
+			}
+		}
+		
+		return tgChannels.iterator();
+	}
+}
diff --git a/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackChannelSettingsHandler.java b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackChannelSettingsHandler.java
new file mode 100644
index 0000000..7333b9a
--- /dev/null
+++ b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackChannelSettingsHandler.java
@@ -0,0 +1,21 @@
+package org.herac.tuxguitar.jack.synthesizer.settings;
+
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsDialog;
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsHandler;
+import org.herac.tuxguitar.jack.synthesizer.JackSynthesizerPort;
+import org.herac.tuxguitar.player.base.MidiDevice;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class JackChannelSettingsHandler implements TGChannelSettingsHandler{
+	
+	public boolean isMidiDeviceSupported(MidiDevice midiDevice) {
+		return (midiDevice instanceof JackSynthesizerPort);
+	}
+	
+	public TGChannelSettingsDialog createChannelSettingsDialog(MidiDevice midiDevice, TGChannel channel) {
+		if( isMidiDeviceSupported(midiDevice) ){
+			return new JackChannelSettingsDialog(channel);
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackChannelSettingsPlugin.java b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackChannelSettingsPlugin.java
new file mode 100644
index 0000000..cc378e7
--- /dev/null
+++ b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackChannelSettingsPlugin.java
@@ -0,0 +1,23 @@
+package org.herac.tuxguitar.jack.synthesizer.settings;
+
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsHandler;
+import org.herac.tuxguitar.app.editors.channel.TGChannelSettingsPlugin;
+import org.herac.tuxguitar.jack.JackPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class JackChannelSettingsPlugin extends TGChannelSettingsPlugin{
+	
+	private TGChannelSettingsHandler tgChannelSettingsHandler;
+	
+	public JackChannelSettingsPlugin(){
+		this.tgChannelSettingsHandler = new JackChannelSettingsHandler();
+	}
+	
+	protected TGChannelSettingsHandler getHandler() throws TGPluginException {
+		return this.tgChannelSettingsHandler;
+	}
+	
+	public String getModuleId() {
+		return JackPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackMidiPlayerListener.java b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackMidiPlayerListener.java
new file mode 100644
index 0000000..d529b10
--- /dev/null
+++ b/TuxGuitar-jack-ui/src/org/herac/tuxguitar/jack/synthesizer/settings/JackMidiPlayerListener.java
@@ -0,0 +1,46 @@
+package org.herac.tuxguitar.jack.synthesizer.settings;
+
+import org.herac.tuxguitar.player.base.MidiPlayerListener;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class JackMidiPlayerListener implements MidiPlayerListener{
+	
+	private JackChannelSettingsDialog jackChannelSettingsDialog;
+	
+	public JackMidiPlayerListener(JackChannelSettingsDialog jackChannelSettingsDialog){
+		this.jackChannelSettingsDialog = jackChannelSettingsDialog;
+	}
+	
+	public void notifyStarted() {
+		this.updateControlsSynchronized();
+	}
+
+	public void notifyStopped() {
+		this.updateControlsSynchronized();
+	}
+
+	public void notifyCountDownStarted() {
+		// Not implemented
+	}
+
+	public void notifyCountDownStopped() {
+		// Not implemented
+	}
+
+	public void notifyLoop() {
+		// Not implemented
+	}
+	
+	public void updateControls(){
+		this.jackChannelSettingsDialog.updateControls();
+	}
+	
+	public void updateControlsSynchronized(){
+		TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				updateControls();
+			}
+		});
+	}
+}
diff --git a/TuxGuitar-jack/GNUmakefile b/TuxGuitar-jack/GNUmakefile
deleted file mode 100644
index a0fd975..0000000
--- a/TuxGuitar-jack/GNUmakefile
+++ /dev/null
@@ -1,94 +0,0 @@
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-jack
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_JNI?=lib$(PACKAGE)-jni.so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.jack.JackPluginImpl
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI)
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# resources
-LANGUAGE?=./share/lang
-
-# build paths
-JAVA_SOURCE_PATH?=./src/
-JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java")
-JAVA_OBJECTS?=$(PACKAGE).o
-JNI_SOURCE_PATH?=./jni/
-JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c")
-JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o)
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(JAVA_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) 
-
-CC=gcc
-CFLAGS=-fPIC -I $(shell $(GCJ) -print-file-name=include/)
-
-default: all
-
-all: objects library library_jni meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(JAVA_OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-library_jni: $(LIBRARY_JNI)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
-	-install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-	-rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/*
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-%.o: %.c
-	$(CC) $(CFLAGS) -c -o $(@F) $<
-
-$(PACKAGE).o: $(JAVA_SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(JAVA_OBJECTS)
-	${GCJ} -shared -o $@ $(^F) -ltuxguitar -L$(TG_LIBRARY_PATH)
-
-$(LIBRARY_JNI): $(JNI_OBJECTS)
-	$(GCJ) -shared -o $@ $(^F) `pkg-config --libs jack`
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#------------------------------------------------------------------------------
diff --git a/TuxGuitar-jack/build.properties b/TuxGuitar-jack/build.properties
index dba8bef..94080dc 100644
--- a/TuxGuitar-jack/build.properties
+++ b/TuxGuitar-jack/build.properties
@@ -4,5 +4,7 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
 path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-jack/build.xml b/TuxGuitar-jack/build.xml
index 88d6603..194146e 100644
--- a/TuxGuitar-jack/build.xml
+++ b/TuxGuitar-jack/build.xml
@@ -12,6 +12,8 @@
 	<property name="build.jar" value="tuxguitar-jack.jar" />
 	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
diff --git a/TuxGuitar-jack/jni/GNUmakefile b/TuxGuitar-jack/jni/GNUmakefile
index 595dd9d..155dbaa 100644
--- a/TuxGuitar-jack/jni/GNUmakefile
+++ b/TuxGuitar-jack/jni/GNUmakefile
@@ -1,13 +1,13 @@
-CFLAGS?=-I$(shell gcj -print-file-name=include/)
-CFLAGS+=-fPIC
+RM?=rm -f
+CFLAGS?=-I$(shell gcj -print-file-name=include/) -fPIC
 LDFLAGS?=
 LDLIBS?=`pkg-config --libs jack`
 LDPATH?=
-LIBRARY_PREFIX?=lib
 LIBRARY_NAME?=tuxguitar-jack-jni
-LIBRARY_EXTENSION?=.so
+LIBRARY_PREFIX?=lib
+LIBRARY_SUFFIX?=.so
 
-LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION)
+LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_SUFFIX)
 OBJECTS=org_herac_tuxguitar_jack_JackClient.o
 
 %.o: %.c
@@ -19,6 +19,6 @@ $(LIBRARY):	$(OBJECTS)
 	$(CC) $(LDFLAGS) -shared -o $(LIBRARY) $(OBJECTS) $(LDPATH) $(LDLIBS)
 
 clean: 
-	rm -f $(OBJECTS) $(LIBRARY)
+	$(RM) $(OBJECTS) $(LIBRARY)
 
 #eof "$Id: GNUmakefile,v 1.10 2008/04/17 20:06:34 rzr Exp $"
diff --git a/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.c b/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.c
index 06473a4..03cd3b3 100644
--- a/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.c
+++ b/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.c
@@ -9,37 +9,46 @@
 
 #define EVENT_BUFFER_SIZE 512
 
+static JavaVM* JNI_JVM = NULL;
+
 typedef struct {
-	int event_port;
 	int event_size;
+	jack_port_t *event_port;
 	jack_midi_data_t *event_data;
 } jack_jni_event_t;
 
 typedef struct {
-	jack_port_t **ports;
-	int port_count;
 	int event_count;
-	jack_jni_event_t event_queue[ EVENT_BUFFER_SIZE ];
+	int event_port_count;
+	jack_jni_event_t **event_queue;
+	jack_port_t **event_ports;
 } jack_jni_synth_t;
 
 typedef struct {
-	int running;
 	pthread_mutex_t lock;
 	jack_client_t *client;
 	jack_jni_synth_t *midi;
+	jobject jni_object;
 } jack_jni_handle_t;
 
 int  JackProcessCallbackImpl(jack_nframes_t nframes, void *ptr);
 void JackShutdownCallbackImpl(void *ptr);
+void JackPortRegistrationCallbackImpl(jack_port_id_t port, int registered, void *ptr);
+
+JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved)
+{
+	JNI_JVM = vm;
+	return JNI_VERSION_1_4;
+}
 
 JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_malloc(JNIEnv* env, jobject obj)
 {
 	jlong ptr = 0;
 	
 	jack_jni_handle_t *handle = (jack_jni_handle_t *) malloc( sizeof(jack_jni_handle_t) );
+	handle->jni_object = (*env)->NewGlobalRef(env, obj);
 	handle->client = NULL;
 	handle->midi = NULL;
-	handle->running = 0;
 	
 	pthread_mutex_init( &handle->lock , NULL );
 	
@@ -55,6 +64,11 @@ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_free(JNIEnv* env
 	if(handle != NULL){
 		
 		pthread_mutex_destroy( &handle->lock );
+		(*env)->DeleteGlobalRef(env, handle->jni_object);
+		
+		handle->jni_object = NULL;
+		handle->client = NULL;
+		handle->midi = NULL;
 		
 		free( handle );
 	}
@@ -74,12 +88,19 @@ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_open(JNIEnv* env
 				if( handle->client != NULL ){
 					jack_on_shutdown(handle->client, JackShutdownCallbackImpl, handle);
 					jack_set_process_callback (handle->client, JackProcessCallbackImpl , handle);
+					jack_set_port_registration_callback	(handle->client, JackPortRegistrationCallbackImpl, handle);
 					jack_activate (handle->client);
 				}
+				
+				handle->midi = (jack_jni_synth_t *) malloc( sizeof(jack_jni_synth_t) );
+				if( handle->midi != NULL ) {
+					handle->midi->event_port_count = 0;
+					handle->midi->event_ports = NULL;
+					handle->midi->event_count = 0;
+					handle->midi->event_queue = (jack_jni_event_t **) malloc( EVENT_BUFFER_SIZE * sizeof(jack_jni_event_t *) );
+				}
 			}
 			
-			handle->running = ( handle->client != NULL ? 1 : 0 );
-			
 			pthread_mutex_unlock( &handle->lock );
 		}
 	}
@@ -92,77 +113,143 @@ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_close(JNIEnv* en
 	if(handle != NULL){
 		if( pthread_mutex_lock( &handle->lock ) == 0 ){
 			
-			if(handle->client != NULL)
+			if( handle->client != NULL)
 			{
 				jack_deactivate (handle->client);
 				jack_client_close (handle->client);
 				handle->client = NULL;
 			}
-			
-			handle->running = 0;
+			if( handle->midi != NULL )
+			{
+				if( handle->midi->event_ports != NULL )
+				{
+					free( handle->midi->event_ports );
+					handle->midi->event_ports = NULL;
+					handle->midi->event_port_count = 0;
+				}
+				
+				if( handle->midi->event_queue != NULL )
+				{
+					int event_index = 0;
+					for(event_index = 0 ; event_index < handle->midi->event_count ; event_index ++){
+						free ( handle->midi->event_queue[ event_index ]->event_data );
+						free ( handle->midi->event_queue[ event_index ] );
+						handle->midi->event_queue[ event_index ] = NULL;
+					}
+					
+					free( handle->midi->event_queue );
+					handle->midi->event_queue = NULL;
+					handle->midi->event_count = 0;
+				}
+				
+				free( handle->midi );
+				handle->midi = NULL;
+			}
 			
 			pthread_mutex_unlock( &handle->lock );
 		}
 	}
 }
 
-JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_openPorts(JNIEnv* env, jobject obj, jlong ptr, jint ports)
+JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_openPort(JNIEnv* env, jobject obj, jlong ptr, jstring jack_port_name)
 {
+	jlong jack_port_id = 0;
+	
 	jack_jni_handle_t *handle = NULL;
 	memcpy(&handle, &ptr, sizeof(handle));
 	if(handle != NULL){
 		if( pthread_mutex_lock( &handle->lock ) == 0 ){
 			
-			if(handle->client != NULL && handle->midi == NULL )
-			{
-				int index = 0;
-				
-				handle->midi = (jack_jni_synth_t *) malloc( sizeof(jack_jni_synth_t) );
-				handle->midi->event_count = 0;
-				
-				handle->midi->port_count = ports;
-				handle->midi->ports = (jack_port_t **) malloc( sizeof( jack_port_t * ) * handle->midi->port_count );
-				
-				for( index = 0 ; index < handle->midi->port_count ; index ++ ){
-					char port_name[50];
-					sprintf( port_name , "Output Port %d", index );
-					handle->midi->ports[index] = jack_port_register(handle->client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
-				}
+			if( handle->client != NULL )
+			{				
+				char port_name[50];
+				const char *port_name_value = (*env)->GetStringUTFChars(env, jack_port_name, 0);
+				sprintf( port_name , "%s", port_name_value );
+				(*env)->ReleaseStringUTFChars(env, jack_port_name, port_name_value);
 				
-				for( index = 0 ; index < EVENT_BUFFER_SIZE ; index ++ ){
-					handle->midi->event_queue[ index ].event_data = NULL;
+				jack_port_t *jack_port = jack_port_register(handle->client, port_name, JACK_DEFAULT_MIDI_TYPE, JackPortIsOutput, 0);
+				if( jack_port != NULL ){
+					jack_port_t **event_ports_aux = handle->midi->event_ports;
+					int event_port_index = 0;
+					int event_port_count = handle->midi->event_port_count;
+					
+					handle->midi->event_ports = (jack_port_t **) malloc( (event_port_count + 1) * sizeof(jack_port_t *) );
+					handle->midi->event_port_count = 0;
+					for( event_port_index = 0 ; event_port_index < event_port_count ; event_port_index ++ ){
+						handle->midi->event_ports[handle->midi->event_port_count ++] = event_ports_aux[event_port_index];
+					}
+					handle->midi->event_ports[handle->midi->event_port_count ++] = jack_port;
+					
+					free( event_ports_aux );
+					event_ports_aux = NULL;
+					
+					memcpy(&jack_port_id, &jack_port, sizeof( jack_port ));
 				}
 			}
 			pthread_mutex_unlock( &handle->lock );
 		}
 	}
+	
+	return jack_port_id;
 }
 
-JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_closePorts(JNIEnv* env, jobject obj, jlong ptr)
+JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_closePort(JNIEnv* env, jobject obj, jlong ptr, jlong jack_port_id)
 {
 	jack_jni_handle_t *handle = NULL;
 	memcpy(&handle, &ptr, sizeof(handle));
 	if(handle != NULL){
 		if( pthread_mutex_lock( &handle->lock ) == 0 ){
 			
-			if(handle->client != NULL && handle->midi != NULL)
+			if(handle->client != NULL)
 			{
-				int index = 0;
-				
-				for( index = 0 ; index < handle->midi->port_count ; index ++ ){
-					jack_port_unregister(handle->client, handle->midi->ports[index] );
-				}
-				
-				for( index = 0 ; index < EVENT_BUFFER_SIZE ; index ++ ){
-					if( handle->midi->event_queue[ index ].event_data != NULL ) {
-						free ( handle->midi->event_queue[ index ].event_data );
+				jack_port_t *jack_port = NULL;
+				memcpy(&jack_port, &jack_port_id, sizeof(jack_port));
+				if( jack_port != NULL )
+				{
+					if( handle->midi->event_count > 0 )
+					{
+						jack_jni_event_t **event_queue_aux = (jack_jni_event_t **) malloc( EVENT_BUFFER_SIZE * sizeof(jack_jni_event_t *) );
+						int event_index = 0;
+						int event_count = handle->midi->event_count;
+						
+						for(event_index = 0 ; event_index < event_count ; event_index ++){
+							event_queue_aux[event_index] = handle->midi->event_queue[event_index];
+						}
+						
+						event_index = 0;
+						handle->midi->event_count = 0;
+						for(event_index = 0 ; event_index < event_count ; event_index ++){
+							if( event_queue_aux[ event_index ]->event_port != jack_port ) {
+								handle->midi->event_queue[handle->midi->event_count ++] = event_queue_aux[event_index];
+							} else {
+								free ( event_queue_aux[event_index]->event_data );
+								free ( event_queue_aux[event_index]);
+								event_queue_aux[event_index] = NULL;
+							}
+						}
+						
+						free( event_queue_aux );
+						event_queue_aux = NULL;
 					}
-					handle->midi->event_queue[ index ].event_data = NULL;
+					if( handle->midi->event_port_count > 0 )
+					{
+						jack_port_t **event_ports_aux = handle->midi->event_ports;
+						int event_port_index = 0;
+						int event_port_count = handle->midi->event_port_count;
+						
+						handle->midi->event_ports = (jack_port_t **) malloc( (event_port_count - 1) * sizeof(jack_port_t *) );
+						handle->midi->event_port_count = 0;
+						for(event_port_index = 0 ; event_port_index < event_port_count ; event_port_index ++){
+							if( event_ports_aux[event_port_index] != jack_port ) {
+								handle->midi->event_ports[handle->midi->event_port_count ++] = event_ports_aux[event_port_index];
+							}
+						}
+						free( event_ports_aux );
+						event_ports_aux = NULL;
+					}
+
+					jack_port_unregister(handle->client, jack_port );
 				}
-				
-				free( handle->midi->ports );
-				free( handle->midi );
-				handle->midi = NULL;
 			}
 			pthread_mutex_unlock( &handle->lock );
 		}
@@ -315,7 +402,7 @@ JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isTransportR
 	return result;
 }
 
-JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isServerRunning(JNIEnv* env, jobject obj, jlong ptr)
+JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isOpen(JNIEnv* env, jobject obj, jlong ptr)
 {
 	jboolean result = JNI_FALSE;
 	
@@ -324,7 +411,7 @@ JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isServerRunn
 	if(handle != NULL){
 		if( pthread_mutex_lock( &handle->lock ) == 0 ){
 			
-			if(handle->running > 0){
+			if( handle->client != NULL ){
 				result = JNI_TRUE;
 			}
 			
@@ -334,37 +421,199 @@ JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isServerRunn
 	return result;
 }
 
-JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_addEventToQueue(JNIEnv* env, jobject obj, jlong ptr, jint port, jbyteArray jdata)
+JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isPortOpen(JNIEnv * env, jobject obj, jlong ptr, jlong jack_port_id)
 {
+	jboolean result = JNI_FALSE;
+	
 	jack_jni_handle_t *handle = NULL;
 	memcpy(&handle, &ptr, sizeof(handle));
 	if(handle != NULL){
 		if( pthread_mutex_lock( &handle->lock ) == 0 ){
 			
-			if(handle->client != NULL && handle->midi != NULL && handle->midi->ports != NULL )
+			if( handle->client != NULL && handle->midi != NULL ) {
+				jack_port_t *jack_port = NULL;
+				memcpy(&jack_port, &jack_port_id, sizeof(jack_port));
+				
+				if( jack_port != NULL && handle->midi->event_ports != NULL ){
+					int index = 0;
+					int count = handle->midi->event_port_count;
+					
+					for( index = 0 ; index < count ; index ++ ){
+						if( handle->midi->event_ports[index] == jack_port ) {
+							result = JNI_TRUE;
+						}
+					}
+				}
+			}
+			
+			pthread_mutex_unlock( &handle->lock );
+		}
+	}
+	return result;
+}
+
+JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_connectPorts(JNIEnv* env, jobject obj, jlong ptr, jstring src_port_name, jstring dst_port_name)
+{
+	jack_jni_handle_t *handle = NULL;
+	memcpy(&handle, &ptr, sizeof(handle));
+	if(handle != NULL){
+		if( pthread_mutex_lock( &handle->lock ) == 0 ){
+			
+			if(handle->client != NULL)
 			{
+				const char* jack_src_port_name = (*env)->GetStringUTFChars(env, src_port_name, 0);
+				const char* jack_dst_port_name = (*env)->GetStringUTFChars(env, dst_port_name, 0);
+				
+				jack_connect(handle->client, jack_src_port_name, jack_dst_port_name);
+				
+				(*env)->ReleaseStringUTFChars(env, src_port_name, jack_src_port_name);
+				(*env)->ReleaseStringUTFChars(env, dst_port_name, jack_dst_port_name);
+			}
+			
+			pthread_mutex_unlock( &handle->lock );
+		}
+	}
+}
+
+JNIEXPORT jobject JNICALL Java_org_herac_tuxguitar_jack_JackClient_getPortNames(JNIEnv* env, jobject obj, jlong ptr, jstring type, jlong flags)
+{
+	jobject jlist = NULL;
+	
+	jack_jni_handle_t *handle = NULL;
+	memcpy(&handle, &ptr, sizeof(handle));
+	if(handle != NULL){
+		
+		if( pthread_mutex_trylock( &handle->lock ) == 0 ){
+			
+			if( handle->client != NULL ) {
+				
+				jclass jlistCls = NULL;
+				jmethodID jlistInit = NULL;
+				jmethodID jlistAddMid = NULL;
+				
+				jlistCls = (*env)->FindClass(env, "java/util/ArrayList");
+				if( jlistCls != NULL ) {
+					jlistInit = (*env)->GetMethodID(env, jlistCls, "<init>", "()V");
+					jlistAddMid = (*env)->GetMethodID(env, jlistCls, "add", "(Ljava/lang/Object;)Z");
+					if( jlistInit != NULL && jlistAddMid != NULL) {
+						jlist = (*env)->NewObject(env, jlistCls, jlistInit);
+					}
+				}
+				
+				if( jlist != NULL && jlistAddMid != NULL ){
+					const char* jack_port_type = (type != NULL ? (*env)->GetStringUTFChars(env, type, 0) : NULL);
+					const char** jack_ports = jack_get_ports(handle->client, NULL, jack_port_type, flags);
+					
+					if( jack_ports != NULL ){
+						
+						while( (*jack_ports) ) {
+							jstring jack_port_name = (*env)->NewStringUTF(env, (*jack_ports));
+							
+							(*env)->CallBooleanMethod( env, jlist , jlistAddMid , jack_port_name );
+							
+							jack_ports ++;
+						}
+					}
+					
+					if( type != NULL && jack_port_type != NULL ){
+						(*env)->ReleaseStringUTFChars(env, type, jack_port_type);
+					}
+				}
+			}
+			
+			pthread_mutex_unlock( &handle->lock );
+		}
+	}
+	return jlist;
+}
+
+JNIEXPORT jobject JNICALL Java_org_herac_tuxguitar_jack_JackClient_getPortConnections(JNIEnv* env, jobject obj, jlong ptr, jstring port_name)
+{
+	jobject jlist = NULL;
+	
+	jack_jni_handle_t *handle = NULL;
+	memcpy(&handle, &ptr, sizeof(handle));
+	if(handle != NULL){
+		
+		if( pthread_mutex_trylock( &handle->lock ) == 0 ){
+			
+			if( handle->client != NULL ) {
+				const char* jack_port_name = (*env)->GetStringUTFChars(env, port_name, 0);
+				jack_port_t* jack_port = jack_port_by_name(handle->client, jack_port_name);
+				if( jack_port != NULL ){
+					jclass jlistCls = NULL;
+					jmethodID jlistInit = NULL;
+					jmethodID jlistAddMid = NULL;
+					
+					jlistCls = (*env)->FindClass(env, "java/util/ArrayList");
+					if( jlistCls != NULL ) {
+						jlistInit = (*env)->GetMethodID(env, jlistCls, "<init>", "()V");
+						jlistAddMid = (*env)->GetMethodID(env, jlistCls, "add", "(Ljava/lang/Object;)Z");
+						if( jlistInit != NULL && jlistAddMid != NULL) {
+							jlist = (*env)->NewObject(env, jlistCls, jlistInit);
+						}
+					}
+					
+					if( jlist != NULL && jlistAddMid != NULL ){
+						const char** jack_ports = jack_port_get_all_connections(handle->client, jack_port);
+						
+						if( jack_ports != NULL ){
+							
+							while( (*jack_ports) ) {
+								jstring jack_port_name = (*env)->NewStringUTF(env, (*jack_ports));
+								
+								(*env)->CallBooleanMethod( env, jlist , jlistAddMid , jack_port_name );
+								
+								jack_ports ++;
+							}
+						}
+					}
+				}
+				(*env)->ReleaseStringUTFChars(env, port_name, jack_port_name);
+			}
+			
+			pthread_mutex_unlock( &handle->lock );
+		}
+	}
+	return jlist;
+}
+
+JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_addEventToQueue(JNIEnv* env, jobject obj, jlong ptr, jlong jack_port_id, jbyteArray jdata)
+{
+	
+	jack_jni_handle_t *handle = NULL;
+	memcpy(&handle, &ptr, sizeof(handle));
+	if(handle != NULL){
+		if( pthread_mutex_lock( &handle->lock ) == 0 ){
+			
+			if(handle->client != NULL && handle->midi != NULL )
+			{
+				jack_port_t *jack_port = NULL;
+				memcpy(&jack_port, &jack_port_id, sizeof(jack_port));
+				
 				if( handle->midi->event_count < EVENT_BUFFER_SIZE ) {
+					
 					int count = (*env)->GetArrayLength( env,  jdata  );
 					if( count > 0 ){
 						jbyte* jdataArray = (*env)->GetByteArrayElements( env , jdata, 0);
 						if( jdataArray != NULL ) {
-							if( handle->midi->event_queue[ handle->midi->event_count ].event_data != NULL ) {
-								free ( handle->midi->event_queue[ handle->midi->event_count ].event_data );
-								handle->midi->event_queue[ handle->midi->event_count ].event_data = NULL;
-							}
-							handle->midi->event_queue[ handle->midi->event_count ].event_port = port;
-							handle->midi->event_queue[ handle->midi->event_count ].event_size = count;
-							handle->midi->event_queue[ handle->midi->event_count ].event_data = (jack_midi_data_t *)malloc( sizeof( jack_midi_data_t ) * count );
-							if( handle->midi->event_queue[ handle->midi->event_count ].event_data != NULL ) {
-								int index = 0;
-								for( index = 0 ; index < count ; index ++ ){
-									handle->midi->event_queue[ handle->midi->event_count ].event_data[ index ] = (jack_midi_data_t)jdataArray[ index ];
+							handle->midi->event_queue[ handle->midi->event_count ] = (jack_jni_event_t *) malloc( sizeof(jack_jni_event_t) );
+							if( handle->midi->event_queue[ handle->midi->event_count ] != NULL ) {
+								handle->midi->event_queue[ handle->midi->event_count ]->event_port = jack_port;
+								handle->midi->event_queue[ handle->midi->event_count ]->event_size = count;
+								handle->midi->event_queue[ handle->midi->event_count ]->event_data = (jack_midi_data_t *)malloc( sizeof( jack_midi_data_t ) * count );
+								if( handle->midi->event_queue[ handle->midi->event_count ]->event_data != NULL ) {
+									int index = 0;
+									for( index = 0 ; index < count ; index ++ ){
+										handle->midi->event_queue[ handle->midi->event_count ]->event_data[ index ] = (jack_midi_data_t)jdataArray[ index ];
+									}
+									handle->midi->event_count ++;
+									(*env)->ReleaseByteArrayElements( env , jdata, jdataArray, 0);
 								}
-								handle->midi->event_count ++;
-								(*env)->ReleaseByteArrayElements( env , jdata, jdataArray, 0);
 							}
 						}
 					}
+					
 				}
 			}
 			pthread_mutex_unlock( &handle->lock );
@@ -379,32 +628,39 @@ int JackProcessCallbackImpl(jack_nframes_t nframes, void *ptr){
 		
 		if( pthread_mutex_trylock( &handle->lock ) == 0 ){
 			
-			if(handle->client != NULL && handle->midi != NULL  && handle->midi->ports != NULL )
+			if(handle->client != NULL && handle->midi != NULL )
 			{
-				int index = 0;
-				int count = handle->midi->event_count;
-				
-				for( index = 0 ; index < handle->midi->port_count ; index ++ ){
-					void *buffer = jack_port_get_buffer(handle->midi->ports[index], jack_get_buffer_size(handle->client) );
-					if( buffer != NULL ){
-						jack_midi_clear_buffer( buffer );
+				if( handle->midi->event_ports != NULL ){
+					int index = 0;
+					int count = handle->midi->event_port_count;
+					
+					for( index = 0 ; index < count ; index ++ ){
+						void *buffer = jack_port_get_buffer(handle->midi->event_ports[index], jack_get_buffer_size(handle->client) );
+						if( buffer != NULL ){
+							jack_midi_clear_buffer( buffer );
+						}
 					}
 				}
 				
-				for( index = 0 ; index < count ; index ++ ){
-					void *buffer = jack_port_get_buffer(handle->midi->ports[handle->midi->event_queue[index].event_port], jack_get_buffer_size(handle->client) );
-					
-					if( buffer != NULL ){
-						jack_midi_data_t *data = jack_midi_event_reserve ( buffer , 0, handle->midi->event_queue[index].event_size);
-						if( data != NULL ){
-							int data_index = 0;
-							for( data_index = 0 ; data_index < handle->midi->event_queue[index].event_size ; data_index ++ ){
-								data[ data_index ] = handle->midi->event_queue[index].event_data[ data_index ];
+				if( handle->midi->event_count > 0 ) {
+					int index = 0;
+					int count = handle->midi->event_count;
+					for( index = 0 ; index < count ; index ++ ){
+						void *buffer = jack_port_get_buffer(handle->midi->event_queue[index]->event_port, jack_get_buffer_size(handle->client) );
+						if( buffer != NULL ){
+							jack_midi_data_t *data = jack_midi_event_reserve ( buffer , 0, handle->midi->event_queue[index]->event_size);
+							if( data != NULL ){
+								int data_index = 0;
+								for( data_index = 0 ; data_index < handle->midi->event_queue[index]->event_size ; data_index ++ ){
+									data[ data_index ] = handle->midi->event_queue[index]->event_data[ data_index ];
+								}
 							}
 						}
 						
+						free ( handle->midi->event_queue[index]->event_data );
+						free ( handle->midi->event_queue[index] );
+						handle->midi->event_queue[index] = NULL;
 						handle->midi->event_count --;
-						handle->midi->event_queue[index].event_size = 0;
 					}
 				}
 			}
@@ -415,14 +671,51 @@ int JackProcessCallbackImpl(jack_nframes_t nframes, void *ptr){
 	return 0;
 }
 
+void JackPortRegistrationCallbackImpl(jack_port_id_t port, int registered, void *ptr)
+{
+	jack_jni_handle_t *handle = NULL;
+	memcpy(&handle, &ptr, sizeof(handle));
+	if(handle != NULL){
+		
+		if( pthread_mutex_trylock( &handle->lock ) == 0 ){
+			
+			if( handle->client != NULL && handle->jni_object != NULL ){
+				
+				JNIEnv* jni_env = NULL;
+				(*JNI_JVM)->AttachCurrentThread(JNI_JVM, (void **)&jni_env, 0);
+				if( jni_env != NULL ){
+					jclass cl = (*jni_env)->GetObjectClass(jni_env, handle->jni_object);
+					jmethodID mid = (*jni_env)->GetMethodID(jni_env, cl, "onPortRegistered", "()V");
+					if (mid != 0){
+						(*jni_env)->CallVoidMethod(jni_env, handle->jni_object, mid);
+					}
+				}
+				(*JNI_JVM)->DetachCurrentThread(JNI_JVM);
+			}
+			
+			pthread_mutex_unlock( &handle->lock );
+		}
+	}
+}
+
 void JackShutdownCallbackImpl(void *ptr)
 {
 	jack_jni_handle_t *handle = NULL;
 	memcpy(&handle, &ptr, sizeof(handle));
 	if(handle != NULL){
-		if( pthread_mutex_lock( &handle->lock ) == 0 ){
+		if( pthread_mutex_lock( &handle->lock ) == 0 ) {
 			
-			handle->running = 0;
+			handle->client = NULL;
+			
+			if( handle->midi != NULL ) {
+				if( handle->midi->event_ports != NULL ) {
+					free( handle->midi->event_ports );
+					handle->midi->event_ports = NULL;
+					handle->midi->event_port_count = 0;
+				}
+				free( handle->midi );
+				handle->midi = NULL;
+			}
 			
 			pthread_mutex_unlock( &handle->lock );
 		}
diff --git a/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.h b/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.h
index 7ed8f63..2b9c6ae 100644
--- a/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.h
+++ b/TuxGuitar-jack/jni/org_herac_tuxguitar_jack_JackClient.h
@@ -41,19 +41,19 @@ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_close
 
 /*
  * Class:     org_herac_tuxguitar_jack_JackClient
- * Method:    openPorts
- * Signature: (JI)V
+ * Method:    openPort
+ * Signature: (JLjava/lang/String;)J
  */
-JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_openPorts
-  (JNIEnv *, jobject, jlong, jint);
+JNIEXPORT jlong JNICALL Java_org_herac_tuxguitar_jack_JackClient_openPort
+  (JNIEnv *, jobject, jlong, jstring);
 
 /*
  * Class:     org_herac_tuxguitar_jack_JackClient
- * Method:    closePorts
- * Signature: (J)V
+ * Method:    closePort
+ * Signature: (JJ)V
  */
-JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_closePorts
-  (JNIEnv *, jobject, jlong);
+JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_closePort
+  (JNIEnv *, jobject, jlong, jlong);
 
 /*
  * Class:     org_herac_tuxguitar_jack_JackClient
@@ -105,27 +105,59 @@ JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_setTransportStop
 
 /*
  * Class:     org_herac_tuxguitar_jack_JackClient
- * Method:    isTransportRunning
+ * Method:    addEventToQueue
+ * Signature: (JJ[B)V
+ */
+JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_addEventToQueue
+  (JNIEnv *, jobject, jlong, jlong, jbyteArray);
+
+/*
+ * Class:     org_herac_tuxguitar_jack_JackClient
+ * Method:    isOpen
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isTransportRunning
+JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isOpen
   (JNIEnv *, jobject, jlong);
 
 /*
  * Class:     org_herac_tuxguitar_jack_JackClient
- * Method:    isServerRunning
+ * Method:    isPortOpen
+ * Signature: (JJ)Z
+ */
+JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isPortOpen
+  (JNIEnv *, jobject, jlong, jlong);
+
+/*
+ * Class:     org_herac_tuxguitar_jack_JackClient
+ * Method:    isTransportRunning
  * Signature: (J)Z
  */
-JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isServerRunning
+JNIEXPORT jboolean JNICALL Java_org_herac_tuxguitar_jack_JackClient_isTransportRunning
   (JNIEnv *, jobject, jlong);
 
 /*
  * Class:     org_herac_tuxguitar_jack_JackClient
- * Method:    addEventToQueue
- * Signature: (JI[B)V
+ * Method:    connectPorts
+ * Signature: (JLjava/lang/String;Ljava/lang/String;)V
  */
-JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_addEventToQueue
-  (JNIEnv *, jobject, jlong, jint, jbyteArray);
+JNIEXPORT void JNICALL Java_org_herac_tuxguitar_jack_JackClient_connectPorts
+  (JNIEnv *, jobject, jlong, jstring, jstring);
+
+/*
+ * Class:     org_herac_tuxguitar_jack_JackClient
+ * Method:    getPortNames
+ * Signature: (JLjava/lang/String;J)Ljava/util/List;
+ */
+JNIEXPORT jobject JNICALL Java_org_herac_tuxguitar_jack_JackClient_getPortNames
+  (JNIEnv *, jobject, jlong, jstring, jlong);
+
+/*
+ * Class:     org_herac_tuxguitar_jack_JackClient
+ * Method:    getPortConnections
+ * Signature: (JLjava/lang/String;)Ljava/util/List;
+ */
+JNIEXPORT jobject JNICALL Java_org_herac_tuxguitar_jack_JackClient_getPortConnections
+  (JNIEnv *, jobject, jlong, jstring);
 
 #ifdef __cplusplus
 }
diff --git a/TuxGuitar-jack/pom.xml b/TuxGuitar-jack/pom.xml
new file mode 100644
index 0000000..3c16f16
--- /dev/null
+++ b/TuxGuitar-jack/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-jack</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+	
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-jack/share/META-INF/services/org.herac.tuxguitar.gui.system.plugins.TGPlugin b/TuxGuitar-jack/share/META-INF/services/org.herac.tuxguitar.gui.system.plugins.TGPlugin
deleted file mode 100644
index 71d06cf..0000000
--- a/TuxGuitar-jack/share/META-INF/services/org.herac.tuxguitar.gui.system.plugins.TGPlugin
+++ /dev/null
@@ -1 +0,0 @@
-org.herac.tuxguitar.jack.JackPluginImpl
\ No newline at end of file
diff --git a/TuxGuitar-jack/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-jack/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..119a031
--- /dev/null
+++ b/TuxGuitar-jack/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,4 @@
+org.herac.tuxguitar.jack.singleton.JackSingletonPlugin
+org.herac.tuxguitar.jack.synthesizer.JackOutputPortProviderPlugin
+org.herac.tuxguitar.jack.sequencer.JackSequencerProviderPlugin
+org.herac.tuxguitar.jack.connection.JackConnectionPlugin
diff --git a/TuxGuitar-jack/share/META-INF/tuxguitar-jack.info b/TuxGuitar-jack/share/META-INF/tuxguitar-jack.info
new file mode 100644
index 0000000..8d9e2da
--- /dev/null
+++ b/TuxGuitar-jack/share/META-INF/tuxguitar-jack.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Jack Audio Connection Kit plugin support
+plugin.description=Jack Audio Connection Kit plugin support
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-jack/share/lang/messages.properties b/TuxGuitar-jack/share/lang/messages.properties
index 62ffbc2..6f2cb05 100644
--- a/TuxGuitar-jack/share/lang/messages.properties
+++ b/TuxGuitar-jack/share/lang/messages.properties
@@ -1,31 +1,7 @@
-jack.settings.dialog=Jack Settings
-jack.settings.dialog.options=Main Options
-
-jack.settings.dialog.options.midi-port=Jack Port Options
-jack.settings.dialog.options.midi-port.type.single=Create unique port
-jack.settings.dialog.options.midi-port.type.multiple-by-channel=Create multiple ports by channel
-jack.settings.dialog.options.midi-port.type.multiple-by-program=Create multiple ports by instruments
-
-jack.settings.dialog.options.midi-port.program-router.options=Instrument Routing Options
-jack.settings.dialog.options.midi-port.program-router.src-program=Source Instrument
-jack.settings.dialog.options.midi-port.program-router.dst-channel=To Channel
-jack.settings.dialog.options.midi-port.program-router.dst-program=To Program
-jack.settings.dialog.options.midi-port.program-router.dst-port=To Port
-jack.settings.dialog.options.midi-port.program-router.src-program.percussion=Percussion Kit
-jack.settings.dialog.options.midi-port.program-router.src-program.item=Ins#{0}
-jack.settings.dialog.options.midi-port.program-router.dst-program.item=Ins#{0}
-jack.settings.dialog.options.midi-port.program-router.dst-program.default=Default
-jack.settings.dialog.options.midi-port.program-router.dst-channel.item=Ch#{0}
-jack.settings.dialog.options.midi-port.program-router.dst-channel.default=Default
-jack.settings.dialog.options.midi-port.program-router.dst-port.default=Default Port
-jack.settings.dialog.options.midi-port.program-router.dst-port.dedicated=Dedicated Port
-
-jack.settings.dialog.options.midi-port.channel-router.options=Channel Routing Options
-jack.settings.dialog.options.midi-port.channel-router.src-channel=Source Channel
-jack.settings.dialog.options.midi-port.channel-router.dst-channel=To Channel
-jack.settings.dialog.options.midi-port.channel-router.dst-program=To Program
-jack.settings.dialog.options.midi-port.channel-router.src-channel.item=Channel#{0}
-jack.settings.dialog.options.midi-port.channel-router.dst-channel.item=Ch#{0}
-jack.settings.dialog.options.midi-port.channel-router.dst-channel.default=Default
-jack.settings.dialog.options.midi-port.channel-router.dst-program.item=Ins#{0}
-jack.settings.dialog.options.midi-port.channel-router.dst-program.default=Default
+jack.settings.channel.dialog=Channel Settings
+jack.settings.channel.gm.tip=General Midi Settings
+jack.settings.channel.gm.channel.label-1=Normal Channel
+jack.settings.channel.gm.channel.label-2=Effect Channel
+jack.settings.channel.gm.channel.value-1=CH #{0}
+jack.settings.channel.gm.channel.value-2=EC #{0}
+jack.settings.channel.exclusive.port=Exclusive Jack Port
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackClient.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackClient.java
index b88f835..b6eccd2 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackClient.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackClient.java
@@ -1,5 +1,9 @@
 package org.herac.tuxguitar.jack;
 
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
 public class JackClient{
 	
 	private static final String JNI_LIBRARY_NAME = new String("tuxguitar-jack-jni");
@@ -9,14 +13,14 @@ public class JackClient{
 	}
 	
 	private long instance;
-	private boolean open;
-	private boolean openPorts;
 	private boolean openTransport;
+	private List jackPorts;
+	private List jackPortRegisterListeners;
 	
 	public JackClient() {
 		this.instance = malloc();
-		this.open = false;
-		this.openPorts = false;
+		this.jackPorts = new ArrayList();
+		this.jackPortRegisterListeners = new ArrayList();
 	}
 	
 	public void finalize(){
@@ -26,54 +30,99 @@ public class JackClient{
 		}
 	}
 	
-	private void open(){
-		if(this.instance != 0 && !this.open){
+	public void open(){
+		if(this.instance != 0 && !this.isOpen() ){
 			this.open(this.instance);
-			this.open = true;
 		}
 	}
 	
-	private void close( boolean force ){
+	public void close(){
+		this.close( true );
+	}
+	
+	public void close( boolean force ){
 		if( force ){
 			this.closePorts();
 			this.closeTransport();
 		}
-		if( !this.isPortsOpen() && !this.isTransportOpen() ){
-			if(this.instance != 0 && this.open){
+		if( !this.isAnyJackPortOpen() && !this.isTransportOpen() ){
+			if( this.isOpen() ){
 				this.close(this.instance);
-				this.open = false;
 			}
 		}
 	}
 	
-	public void close(){
-		this.close( true );
+	public boolean isOpen(){
+		if( this.instance != 0 ){
+			return this.isOpen(this.instance);
+		}
+		return false;
 	}
 	
-	public boolean isOpen(){
-		return (this.instance != 0 && this.open);
+	public JackPort openPort(String jackPortName){
+		if( this.isOpen() ){
+			JackPort jackPort = this.findPort(jackPortName);
+			if( jackPort != null && !this.isPortOpen(jackPort) ){
+				this.closePort(jackPort);
+				
+				jackPort = null;
+			}
+			if( jackPort == null ){
+				long jackPortId = this.openPort(this.instance, jackPortName);
+				if( jackPortId != 0 ){
+					jackPort = new JackPort(jackPortId, jackPortName);
+					
+					this.jackPorts.add(jackPort);
+					this.onPortRegistered();
+				}
+			}
+			return jackPort;
+		}
+		return null;
 	}
 	
-	public boolean isPortsOpen(){
-		return (this.isOpen() && this.openPorts);
+	public void closePort(JackPort jackPort){
+		if( this.isOpen() ){
+			JackPort jackPortToClose = this.findPort(jackPort.getJackPortName());
+			if( jackPortToClose != null ) {
+				this.closePort(this.instance, jackPortToClose.getJackPortId());
+				this.jackPorts.remove( jackPortToClose );
+			}
+		}
 	}
 	
-	public void openPorts(int count){
-		if(!this.isOpen()){
-			this.open();
+	public void closePorts(){
+		if( this.isOpen() ) {
+			List jackPorts = new ArrayList(this.jackPorts);
+			Iterator it = jackPorts.iterator();
+			while( it.hasNext() ){
+				this.closePort((JackPort) it.next());
+			}
 		}
-		if(this.isOpen() && !this.openPorts){
-			this.openPorts(this.instance, count);
-			this.openPorts = true;
+	}
+	
+	public JackPort findPort(String jackPortName){
+		if( this.isOpen() ){
+			Iterator it = this.jackPorts.iterator();
+			while( it.hasNext() ){
+				JackPort jackPort = (JackPort) it.next();
+				if( jackPort.getJackPortName().equals(jackPortName) ){
+					return jackPort;
+				}
+			}
 		}
+		return null;
 	}
 	
-	public void closePorts(){
-		if(this.isOpen() && this.openPorts){
-			this.closePorts(this.instance);
-			this.openPorts = false;
+	public boolean isPortOpen(JackPort jackPort){
+		if( this.isOpen() ){
+			return this.isPortOpen(this.instance, jackPort.getJackPortId());
 		}
-		this.close( false );
+		return false;
+	}
+	
+	public boolean isAnyJackPortOpen(){
+		return (this.isOpen() && !this.jackPorts.isEmpty());
 	}
 	
 	public boolean isTransportOpen(){
@@ -81,9 +130,6 @@ public class JackClient{
 	}
 	
 	public void openTransport(){
-		if(!this.isOpen()){
-			this.open();
-		}
 		if(this.isOpen() && !this.openTransport){
 			this.openTransport = true;
 		}
@@ -96,68 +142,98 @@ public class JackClient{
 		this.close( false );
 	}
 	
-	public void addEventToQueue( int port , byte[] data){
-		if(this.instance != 0 && this.open){
-			this.addEventToQueue(this.instance, port, data );
+	public void addEventToQueue(JackPort jackPort , byte[] data){
+		if( this.isOpen() ){
+			this.addEventToQueue(this.instance, jackPort.getJackPortId(), data );
 		}
 	}
 	
 	public long getTransportUID(){
-		if(this.instance != 0 && this.open){
+		if( this.isOpen() ){
 			return this.getTransportUID(this.instance);
 		}
 		return 0;
 	}
 	
 	public long getTransportFrame(){
-		if(this.instance != 0 && this.open){
+		if( this.isOpen() ){
 			return this.getTransportFrame(this.instance);
 		}
 		return 0;
 	}
 	
 	public long getTransportFrameRate(){
-		if(this.instance != 0 && this.open){
+		if( this.isOpen() ){
 			return this.getTransportFrameRate(this.instance);
 		}
 		return 0;
 	}
 	
 	public void setTransportFrame( long frame ){
-		if(this.instance != 0 && this.open){
+		if( this.isOpen() ){
 			this.setTransportFrame(this.instance, frame );
 		}
 	}
 	
 	public void setTransportStart(){
-		if(this.instance != 0 && this.open){
+		if( this.isOpen() ){
 			this.setTransportStart(this.instance);
 		}
 	}
 	
 	public void setTransportStop(){
-		if(this.instance != 0 && this.open){
+		if( this.isOpen() ){
 			this.setTransportStop(this.instance);
 		}
 	}
 	
 	public boolean isTransportRunning(){
-		if(this.instance != 0 && this.open){
+		if( this.isOpen() ){
 			return this.isTransportRunning(this.instance);
 		}
 		return false;
 	}
 	
-	public boolean isServerRunning(){
-		if(this.instance != 0 && this.open){
-			if( this.isServerRunning(this.instance) ){
-				return true;
-			}
-			this.close( true );
+	public List getPortNames(String type, long flags) {
+		if( this.isOpen() ){
+			return this.getPortNames(this.instance, type, flags);
+		}
+		return null;
+	}
+	
+	public List getPortConnections(String portName){
+		if( this.isOpen() ){
+			return this.getPortConnections(this.instance, portName);
+		}
+		return null;
+	}
+	
+	public void connectPorts(String srcPortName, String dstPortName){
+		if( this.isOpen() ){
+			this.connectPorts(this.instance, srcPortName, dstPortName);
+		}
+	}
+	
+	public void onPortRegistered(){
+		Iterator it = this.jackPortRegisterListeners.iterator();
+		while( it.hasNext() ){
+			JackPortRegisterListener jackPortRegisterListener = (JackPortRegisterListener) it.next();
+			jackPortRegisterListener.onPortRegistered();
+		}
+	}
+	
+	public void addPortRegisterListener( JackPortRegisterListener listener ){
+		if(!this.jackPortRegisterListeners.contains( listener ) ){
+			this.jackPortRegisterListeners.add( listener );
 		}
-		return false;
 	}
 	
+	public void removePortRegisterListener( JackPortRegisterListener listener ){
+		if( this.jackPortRegisterListeners.contains( listener ) ){
+			this.jackPortRegisterListeners.remove( listener );
+		}
+	}
+
 	private native long malloc();
 	
 	private native void free(long instance);
@@ -166,9 +242,9 @@ public class JackClient{
 	
 	private native void close(long instance);
 	
-	private native void openPorts(long instance, int count);
+	private native long openPort(long instance, String portName);
 	
-	private native void closePorts(long instance);
+	private native void closePort(long instance, long portId);
 	
 	private native long getTransportUID(long instance);
 	
@@ -182,9 +258,18 @@ public class JackClient{
 	
 	private native void setTransportStop(long instance);
 	
+	private native void addEventToQueue(long instance, long portId, byte[] data);
+	
+	private native boolean isOpen(long instance);
+	
+	private native boolean isPortOpen(long instance, long portId);
+	
 	private native boolean isTransportRunning(long instance);
 	
-	private native boolean isServerRunning(long instance);
+	private native void connectPorts(long instance, String srcPortName, String dstPortName);
+	
+	private native List getPortNames(long instance, String type, long flags);
+	
+	private native List getPortConnections(long instance, String portName);
 	
-	private native void addEventToQueue(long instance, int port, byte[] data);
 }
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPlugin.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPlugin.java
new file mode 100644
index 0000000..424bcc9
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPlugin.java
@@ -0,0 +1,6 @@
+package org.herac.tuxguitar.jack;
+
+public class JackPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-jack";
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPluginImpl.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPluginImpl.java
deleted file mode 100644
index a2e175c..0000000
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPluginImpl.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package org.herac.tuxguitar.jack;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList;
-import org.herac.tuxguitar.jack.sequencer.JackSequencerProviderPlugin;
-import org.herac.tuxguitar.jack.settings.JackSettings;
-import org.herac.tuxguitar.jack.settings.JackSettingsDialog;
-import org.herac.tuxguitar.jack.synthesizer.JackOutputPortProviderPlugin;
-
-public class JackPluginImpl extends TGPluginList implements TGPluginSetup {
-	
-	private JackClient jackClient;
-	private JackSettings jackSettings;
-	
-	public JackPluginImpl(){
-		this.jackClient = new JackClient();
-		this.jackSettings = new JackSettings();
-	}
-	
-	protected List getPlugins() throws TGPluginException {
-		List plugins = new ArrayList();
-		plugins.add( new JackOutputPortProviderPlugin(this.jackClient , this.jackSettings) );
-		plugins.add( new JackSequencerProviderPlugin(this.jackClient) );
-		return plugins;
-	}
-	
-	public void closeAll(){
-		if(this.jackClient.isOpen()){
-			this.jackClient.close();
-			this.jackClient.finalize();
-		}
-	}
-	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "Jack Audio Connection Kit plugin support";
-	}
-	
-	public String getName() {
-		return "Jack Audio Connection Kit plugin support";
-	}
-	
-	public String getVersion() {
-		return "1.0";
-	}
-	
-	public void setupDialog(Shell parent){
-		JackSettingsDialog jackSettingsDialog = new JackSettingsDialog( this.jackSettings );
-		jackSettingsDialog.open( parent );
-	}
-}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPort.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPort.java
new file mode 100644
index 0000000..95692f9
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPort.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.jack;
+
+public class JackPort {
+	
+	private long jackPortId;
+	private String jackPortName;
+	
+	public JackPort(long jackPortId, String jackPortName) {
+		this.jackPortId = jackPortId;
+		this.jackPortName = jackPortName;
+	}
+
+	public long getJackPortId() {
+		return this.jackPortId;
+	}
+
+	public String getJackPortName() {
+		return this.jackPortName;
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPortFlags.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPortFlags.java
new file mode 100644
index 0000000..c339442
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPortFlags.java
@@ -0,0 +1,15 @@
+package org.herac.tuxguitar.jack;
+
+public class JackPortFlags {
+	
+	public static final int JACK_PORT_IS_INPUT = 0x1;
+	
+	public static final int JACK_PORT_IS_OUTPUT = 0x2;
+	
+	public static final int JACK_PORT_IS_PHYSICAL = 0x4;
+	
+	public static final int JACK_PORT_CAN_MONITOR = 0x8;
+	
+	public static final int JACK_PORT_IS_TERMINAL = 0x10;
+	
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPortRegisterListener.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPortRegisterListener.java
new file mode 100644
index 0000000..336b898
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPortRegisterListener.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.jack;
+
+public interface JackPortRegisterListener {
+	
+	public void onPortRegistered();
+	
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPortTypes.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPortTypes.java
new file mode 100644
index 0000000..09f16e1
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/JackPortTypes.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.jack;
+
+public class JackPortTypes {
+	
+	public static final String JACK_ALL_TYPES = null;
+	public static final String JACK_DEFAULT_AUDIO_TYPE = "32 bit float mono audio";
+	public static final String JACK_DEFAULT_MIDI_TYPE = "8 bit raw midi";
+	
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnection.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnection.java
new file mode 100644
index 0000000..67b4f25
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnection.java
@@ -0,0 +1,36 @@
+package org.herac.tuxguitar.jack.connection;
+
+public class JackConnection {
+	
+	private long srcPortId;
+	private long dstPortId;
+	
+	public JackConnection(long srcPortId, long dstPortId){
+		this.srcPortId = srcPortId;
+		this.dstPortId = dstPortId;
+	}
+
+	public long getSrcPortId() {
+		return srcPortId;
+	}
+
+	public void setSrcPortId(long srcPortId) {
+		this.srcPortId = srcPortId;
+	}
+
+	public long getDstPortId() {
+		return dstPortId;
+	}
+
+	public void setDstPortId(long dstPortId) {
+		this.dstPortId = dstPortId;
+	}
+
+	public boolean equals(Object obj){
+		return (this.hashCode() == obj.hashCode());
+	}
+	
+	public int hashCode(){
+		return (JackConnection.class.getName() + "-" + this.srcPortId + "-" + this.dstPortId).hashCode();
+	} 
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionConfig.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionConfig.java
new file mode 100644
index 0000000..86fd7e2
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionConfig.java
@@ -0,0 +1,60 @@
+package org.herac.tuxguitar.jack.connection;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
+
+public class JackConnectionConfig {
+	
+	private static final String JACK_CONFIG_ID = "tuxguitar-jack";
+	private static final String JACK_AUTOMATICALLY_RESTORE_CONNECTIONS = "jack.automatically.restore.connections";
+	private static final String JACK_CONNECTIONS = "jack.connections";
+	private static final String JACK_CONNECTIONS_SEPARATOR = ";";
+	private static final String JACK_CONNECTIONS_SRC_DST_SEPARATOR = "<->";
+	
+	private JackConnectionManager jackConnectionManager;
+	
+	public JackConnectionConfig(JackConnectionManager jackConnectionManager){
+		this.jackConnectionManager = jackConnectionManager;
+	}
+	
+	public void save(){
+		StringBuffer connectionsBuffer = new StringBuffer();
+		
+		Iterator it = this.jackConnectionManager.getJackConnections().iterator();
+		while( it.hasNext() ){
+			JackConnection jackConnection = (JackConnection) it.next();
+			if( connectionsBuffer.length() > 0 ){
+				connectionsBuffer.append(JACK_CONNECTIONS_SEPARATOR);
+			}
+			connectionsBuffer.append(jackConnection.getSrcPortId());
+			connectionsBuffer.append(JACK_CONNECTIONS_SRC_DST_SEPARATOR);
+			connectionsBuffer.append(jackConnection.getDstPortId());
+		}
+		
+		TGConfigManager tgConfigManager = new TGConfigManager(JACK_CONFIG_ID);
+		tgConfigManager.setValue(JACK_CONNECTIONS, connectionsBuffer.toString());
+		tgConfigManager.setValue(JACK_AUTOMATICALLY_RESTORE_CONNECTIONS, this.jackConnectionManager.isAutoConnectPorts());
+		tgConfigManager.save();
+	}
+	
+	public void load(){
+		TGConfigManager tgConfigManager = new TGConfigManager(JACK_CONFIG_ID);
+		
+		this.jackConnectionManager.setAutoConnectPorts(tgConfigManager.getBooleanValue(JACK_AUTOMATICALLY_RESTORE_CONNECTIONS, false));
+		this.jackConnectionManager.clearJackConnections();
+		
+		String jackConnectionsStr = tgConfigManager.getStringValue(JACK_CONNECTIONS);
+		if( jackConnectionsStr != null ){
+			String[] jackConnectionsArr = jackConnectionsStr.split(JACK_CONNECTIONS_SEPARATOR);
+			for( int i = 0 ; i < jackConnectionsArr.length ; i ++ ){
+				String[] jackConnectionArr = jackConnectionsArr[i].split(JACK_CONNECTIONS_SRC_DST_SEPARATOR);
+				if( jackConnectionArr.length == 2 ){
+					long srcPortId = Long.parseLong(jackConnectionArr[0]);
+					long dstPortId = Long.parseLong(jackConnectionArr[1]);
+					this.jackConnectionManager.addJackConnection(new JackConnection(srcPortId, dstPortId));
+				}
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionListener.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionListener.java
new file mode 100644
index 0000000..8c20359
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionListener.java
@@ -0,0 +1,16 @@
+package org.herac.tuxguitar.jack.connection;
+
+import org.herac.tuxguitar.jack.JackPortRegisterListener;
+
+public class JackConnectionListener implements JackPortRegisterListener {
+	
+	private JackConnectionProcess jackConnectionProcess;
+	
+	public JackConnectionListener(JackConnectionManager jackConnectionManager){
+		this.jackConnectionProcess = new JackConnectionProcess(jackConnectionManager);
+	}
+
+	public void onPortRegistered() {
+		this.jackConnectionProcess.process();
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionManager.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionManager.java
new file mode 100644
index 0000000..6a4668b
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionManager.java
@@ -0,0 +1,204 @@
+package org.herac.tuxguitar.jack.connection;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.jack.JackPortFlags;
+import org.herac.tuxguitar.jack.JackPortTypes;
+import org.herac.tuxguitar.jack.provider.JackClientProvider;
+import org.herac.tuxguitar.util.TGException;
+
+public class JackConnectionManager {
+	
+	private JackClient jackClient;
+	private JackClientProvider jackClientProvider;
+	private JackConnectionListener jackConnectionListener;
+	private JackConnectionConfig jackConnectionConfig;
+	
+	private List jackConnections;
+	private boolean autoConnectPorts;
+	
+	public JackConnectionManager(JackClientProvider jackClientProvider){
+		this.jackClientProvider = jackClientProvider;
+		this.jackConnectionConfig = new JackConnectionConfig(this);
+		this.jackConnectionListener = new JackConnectionListener(this);
+		this.jackConnections = new ArrayList();
+	}
+	
+	public void initialize(){
+		if( this.jackClient == null ){
+			this.jackConnections.clear();
+			this.jackClient = this.jackClientProvider.getJackClient();
+			this.jackClient.addPortRegisterListener(this.jackConnectionListener);
+			this.loadConfig();
+			this.openJackClient(true);
+			if( this.isAutoConnectPorts() && this.isJackClientOpen() ){
+				this.connectAllPorts();
+			}
+		}
+	}
+	
+	public void destroy(){
+		if( this.jackClient != null ){
+			this.jackConnections.clear();
+			this.jackClient.removePortRegisterListener(this.jackConnectionListener);
+			this.jackClient = null;
+		}
+	}
+	
+	public void openJackClient(boolean quiet) throws TGException {
+		if(!this.isJackClientOpen() ){
+			if( this.jackClient != null ){
+				this.jackClient.open();
+			}
+		}
+		if(!this.isJackClientOpen() && !quiet){
+			throw new TGException("Jack server not running?");
+		}
+	}
+	
+	public void loadConfig(){
+		this.jackConnectionConfig.load();
+	}
+	
+	public void saveConfig(){
+		this.jackConnectionConfig.save();
+	}
+	
+	public void connectAllPorts(){
+		this.openJackClient(false);
+		
+		Iterator it = this.jackConnections.iterator();
+		while( it.hasNext() ){
+			JackConnection jackConnection = (JackConnection) it.next();
+			
+			this.connectPorts(jackConnection);
+		}
+	}
+	
+	public void connectPorts(JackConnection jackConnection){
+		this.openJackClient(false);
+		
+		List portNames = this.jackClient.getPortNames(JackPortTypes.JACK_ALL_TYPES, 0);
+		String srcPortName = findPortNameById(jackConnection.getSrcPortId(), portNames);
+		String dstPortName = findPortNameById(jackConnection.getDstPortId(), portNames);
+		if( srcPortName != null && dstPortName != null ){
+			this.jackClient.connectPorts(srcPortName, dstPortName);
+		}
+	}
+	
+	public void loadExistingConnections(){
+		this.openJackClient(false);
+		
+		List existingConnections = new ArrayList();
+		List existingPortNames = this.jackClient.getPortNames(JackPortTypes.JACK_ALL_TYPES, 0);
+		
+		this.loadExistingConnections(existingConnections);
+		this.loadPreviousConnectionsToExistingList(existingConnections, existingPortNames);
+		this.jackConnections.clear();
+		this.jackConnections.addAll(existingConnections);
+	}
+	
+	public void loadExistingConnections(List existingConnections){
+		this.openJackClient(false);
+		
+		List srcPortNames = this.jackClient.getPortNames(JackPortTypes.JACK_ALL_TYPES, JackPortFlags.JACK_PORT_IS_OUTPUT);
+		if( srcPortNames != null ){
+			Iterator it = srcPortNames.iterator();
+			while( it.hasNext() ){
+				this.loadExistingConnections(existingConnections, (String) it.next());
+			}
+		}
+	}
+	
+	public void loadExistingConnections(List existingConnections, String srcPortName){
+		this.openJackClient(false);
+		
+		List dstPortNames = this.jackClient.getPortConnections(srcPortName);
+		if( dstPortNames != null ){
+			Iterator it = dstPortNames.iterator();
+			while( it.hasNext() ){
+				this.loadExistingConnection(existingConnections, srcPortName, (String) it.next());
+			}
+		}
+	}
+	
+	public void loadExistingConnection(List existingConnections, String srcPortName, String dstPortName){
+		this.openJackClient(false);
+		
+		JackConnection jackConnection = new JackConnection(createPortId(srcPortName), createPortId(dstPortName));
+		if(!existingConnections.contains(jackConnection)){
+			existingConnections.add(jackConnection);
+		}
+	}
+	
+	public void loadPreviousConnectionsToExistingList(List existingConnections, List existingPortNames){
+		this.openJackClient(false);
+		
+		Iterator it = this.jackConnections.iterator();
+		while( it.hasNext() ){
+			JackConnection jackConnection = (JackConnection) it.next();
+			
+			String srcPortName = findPortNameById(jackConnection.getSrcPortId(), existingPortNames);
+			String dstPortName = findPortNameById(jackConnection.getDstPortId(), existingPortNames);
+			// If both ports are not null means "ports were disconnected".
+			if( srcPortName == null || dstPortName == null ){
+				existingConnections.add( jackConnection );
+			}
+		}
+	}
+	
+	public String findPortNameById(long portId){
+		this.openJackClient(false);
+		
+		return findPortNameById(portId, this.jackClient.getPortNames(JackPortTypes.JACK_ALL_TYPES, 0));
+	}
+	
+	public String findPortNameById(long portId, List portNames){
+		this.openJackClient(false);
+		
+		if( portNames != null ){
+			Iterator it = portNames.iterator();
+			while( it.hasNext() ){
+				String portName = (String) it.next();
+				if( portId == createPortId(portName) ){
+					return portName;
+				}
+			}
+		}
+		
+		return null;
+	}
+	
+	public long createPortId(String portName){
+		return portName.hashCode();
+	}
+	
+	public boolean isJackClientOpen() {
+		return ( this.jackClient != null && this.jackClient.isOpen());
+	}
+	
+	public void clearJackConnections(){
+		this.jackConnections.clear();
+	}
+	
+	public void addJackConnection(JackConnection jackConnection){
+		if(!this.jackConnections.contains(jackConnection)){
+			this.jackConnections.add(jackConnection);
+		}
+	}
+	
+	public List getJackConnections() {
+		return this.jackConnections;
+	}
+	
+	public boolean isAutoConnectPorts() {
+		return autoConnectPorts;
+	}
+
+	public void setAutoConnectPorts(boolean autoConnectPorts) {
+		this.autoConnectPorts = autoConnectPorts;
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionPlugin.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionPlugin.java
new file mode 100644
index 0000000..3594062
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionPlugin.java
@@ -0,0 +1,39 @@
+package org.herac.tuxguitar.jack.connection;
+
+import org.herac.tuxguitar.jack.JackPlugin;
+import org.herac.tuxguitar.jack.singleton.JackClientInstanceProvider;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class JackConnectionPlugin implements TGPlugin{
+
+	private JackConnectionManager jackConnectionManager;
+	
+	public void init() throws TGPluginException {
+		this.jackConnectionManager = new JackConnectionManager(new JackClientInstanceProvider());
+	}
+	
+	public void close() throws TGPluginException {
+		this.jackConnectionManager = null;
+	}
+
+	public JackConnectionManager getJackConnectionManager() {
+		return this.jackConnectionManager;
+	}
+
+	public String getModuleId() {
+		return JackPlugin.MODULE_ID;
+	}
+
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		try {
+			if( enabled ){
+				this.jackConnectionManager.initialize();
+			} else {
+				this.jackConnectionManager.destroy();
+			}
+		} catch (Throwable throwable){
+			throw new TGPluginException(throwable);
+		}
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionProcess.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionProcess.java
new file mode 100644
index 0000000..ba4a519
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/connection/JackConnectionProcess.java
@@ -0,0 +1,39 @@
+package org.herac.tuxguitar.jack.connection;
+
+import org.herac.tuxguitar.util.error.TGErrorManager;
+
+public class JackConnectionProcess implements Runnable {
+	
+	private static final long WAIT_MILLIS = 500;
+	
+	private JackConnectionManager jackConnectionManager;
+	private boolean JackConnectionProcessWaiting;
+	
+	public JackConnectionProcess(JackConnectionManager jackConnectionManager){
+		this.jackConnectionManager = jackConnectionManager;
+		this.JackConnectionProcessWaiting = false;
+	}
+	
+	public void run() {
+		try {
+			Thread.sleep(WAIT_MILLIS);
+			
+			this.JackConnectionProcessWaiting = false;
+			
+			if( this.jackConnectionManager.isJackClientOpen() && this.jackConnectionManager.isAutoConnectPorts() ){
+				this.jackConnectionManager.connectAllPorts();
+			}
+		} catch (Throwable throwable) {
+			TGErrorManager.getInstance().handleError(throwable);
+		}
+	}
+	
+	public void process() {
+		if(!this.JackConnectionProcessWaiting ){
+			this.JackConnectionProcessWaiting = true;
+			
+			Thread thread = new Thread(this);
+			thread.start();
+		}
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/provider/JackClientProvider.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/provider/JackClientProvider.java
new file mode 100644
index 0000000..9bf254b
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/provider/JackClientProvider.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.jack.provider;
+
+import org.herac.tuxguitar.jack.JackClient;
+
+public interface JackClientProvider {
+	
+	public JackClient getJackClient();
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEvent.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEvent.java
index b18554b..1a6d4db 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEvent.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEvent.java
@@ -43,31 +43,31 @@ public class JackEvent {
 		return this.data;
 	}
 	
-	public static JackEvent systemReset(final long tick){
+	public static JackEvent systemReset(long tick){
 		return new JackEvent(tick,MIDI_SYSTEM_EVENT,ALL_TRACKS,null);
 	}
 	
-	public static JackEvent noteOn(final long tick,final int track,final int channel,final int key,final int velocity){
-		return new JackEvent(tick,MIDI_EVENT_NOTEON,track,new byte[]{(byte)channel,(byte)key,(byte)velocity});
+	public static JackEvent noteOn(long tick,int track,int channel,int key,int velocity,int voice,boolean bendMode){
+		return new JackEvent(tick,MIDI_EVENT_NOTEON,track,new byte[]{(byte)channel,(byte)key,(byte)velocity,(byte)voice,(byte)(bendMode?1:0)});
 	}
 	
-	public static JackEvent noteOff(final long tick,final int track,final int channel,final int key,final int velocity){
-		return new JackEvent(tick,MIDI_EVENT_NOTEOFF,track,new byte[]{(byte)channel,(byte)key,(byte)velocity});
+	public static JackEvent noteOff(long tick,int track,int channel,int key,int velocity,int voice,boolean bendMode){
+		return new JackEvent(tick,MIDI_EVENT_NOTEOFF,track,new byte[]{(byte)channel,(byte)key,(byte)velocity,(byte)voice,(byte)(bendMode?1:0)});
 	}
 	
-	public static JackEvent controlChange(final long tick,final int track,final int channel,final int controller,final int value){
-		return new JackEvent(tick,MIDI_EVENT_CONTROL_CHANGE,track,new byte[]{(byte)channel,(byte)controller,(byte)value});
+	public static JackEvent pitchBend(long tick,int track,int channel,int value,int voice,boolean bendMode){
+		return new JackEvent(tick,MIDI_EVENT_PITCH_BEND,track,new byte[]{(byte)channel,(byte)value,(byte)voice,(byte)(bendMode?1:0)});
 	}
 	
-	public static JackEvent programChange(final long tick,final int track,final int channel,final int value){
-		return new JackEvent(tick,MIDI_EVENT_PROGRAM_CHANGE,track,new byte[]{(byte)channel,(byte)value});
+	public static JackEvent controlChange(long tick,int track,int channel,int controller,int value){
+		return new JackEvent(tick,MIDI_EVENT_CONTROL_CHANGE,track,new byte[]{(byte)channel,(byte)controller,(byte)value});
 	}
 	
-	public static JackEvent pitchBend(final long tick,final int track,final int channel,final int value){
-		return new JackEvent(tick,MIDI_EVENT_PITCH_BEND,track,new byte[]{(byte)channel,(byte)value});
+	public static JackEvent programChange(long tick,int track,int channel,int value){
+		return new JackEvent(tick,MIDI_EVENT_PROGRAM_CHANGE,track,new byte[]{(byte)channel,(byte)value});
 	}
 	
-	public static JackEvent tempoInUSQ(final long tick,final int usq){
+	public static JackEvent tempoInUSQ(long tick,int usq){
 		return new JackEvent(tick,MIDI_SYSTEM_EVENT,new byte[]{0x51,(byte) (usq & 0xff),(byte) ((usq >> 8) & 0xff),(byte) ((usq >> 16) & 0xff)});
 	}
 }
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEventDispacher.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEventDispacher.java
index ed34854..2cbd428 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEventDispacher.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackEventDispacher.java
@@ -11,10 +11,13 @@ public class JackEventDispacher{
 	
 	public void dispatch(JackEvent event) throws MidiPlayerException{
 		if(event.getType() == JackEvent.MIDI_EVENT_NOTEON){
-			this.sequencer.getTransmitter().sendNoteOn(event.getData()[0],event.getData()[1],event.getData()[2]);
+			this.sequencer.getTransmitter().sendNoteOn(event.getData()[0],event.getData()[1],event.getData()[2],event.getData()[3],(event.getData()[4] == 1));
 		}
 		else if(event.getType() == JackEvent.MIDI_EVENT_NOTEOFF){
-			this.sequencer.getTransmitter().sendNoteOff(event.getData()[0],event.getData()[1],event.getData()[2]);
+			this.sequencer.getTransmitter().sendNoteOff(event.getData()[0],event.getData()[1],event.getData()[2],event.getData()[3],(event.getData()[4] == 1));
+		}
+		else if(event.getType() == JackEvent.MIDI_EVENT_PITCH_BEND){
+			this.sequencer.getTransmitter().sendPitchBend(event.getData()[0],event.getData()[1],event.getData()[2],(event.getData()[3] == 1));
 		}
 		else if(event.getType() == JackEvent.MIDI_EVENT_CONTROL_CHANGE){
 			this.sequencer.getTransmitter().sendControlChange(event.getData()[0],event.getData()[1],event.getData()[2]);
@@ -22,9 +25,6 @@ public class JackEventDispacher{
 		else if(event.getType() == JackEvent.MIDI_EVENT_PROGRAM_CHANGE){
 			this.sequencer.getTransmitter().sendProgramChange(event.getData()[0],event.getData()[1]);
 		}
-		else if(event.getType() == JackEvent.MIDI_EVENT_PITCH_BEND){
-			this.sequencer.getTransmitter().sendPitchBend(event.getData()[0],event.getData()[1]);
-		}
 		else if(event.getType() == JackEvent.MIDI_SYSTEM_EVENT){
 			if(event.getData()[0] == 0x51){
 				int usq = ((event.getData()[1] & 0xff) | ((event.getData()[2] & 0xff) << 8) | ((event.getData()[3] & 0xff) << 16));
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackMidiPlayerStarter.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackMidiPlayerStarter.java
new file mode 100644
index 0000000..e4daee3
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackMidiPlayerStarter.java
@@ -0,0 +1,57 @@
+package org.herac.tuxguitar.jack.sequencer;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.player.base.MidiPlayerListener;
+
+public class JackMidiPlayerStarter implements MidiPlayerListener{
+	
+	private JackSequencer jackSequencer;
+	private boolean countDownByPass;
+	
+	public JackMidiPlayerStarter(JackSequencer jackSequencer){
+		this.jackSequencer = jackSequencer;
+	}
+	
+	private MidiPlayer getPlayer(){
+		return MidiPlayer.getInstance();
+	}
+	
+	public void open(){
+		getPlayer().addListener(this);
+	}
+	
+	public void close(){
+		getPlayer().removeListener(this);
+	}
+	
+	public void start(){
+		TuxGuitar.instance().getTransport().play();
+	}
+	
+	public void notifyCountDownStarted() {
+		this.countDownByPass = (this.jackSequencer.getJackClient().isTransportRunning() && getPlayer().getCountDown().isEnabled());
+		if( this.countDownByPass ){
+			this.getPlayer().getCountDown().setEnabled( false );
+		}
+	}
+	
+	public void notifyCountDownStopped() {
+		if( this.countDownByPass ){
+			this.countDownByPass = false;
+			this.getPlayer().getCountDown().setEnabled( true );
+		}
+	}
+	
+	public void notifyStarted() {
+		// TODO Auto-generated method stub
+	}
+	
+	public void notifyStopped() {
+		// TODO Auto-generated method stub
+	}
+	
+	public void notifyLoop() {
+		// TODO Auto-generated method stub
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequenceHandler.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequenceHandler.java
index fa58af5..b5f4327 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequenceHandler.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequenceHandler.java
@@ -13,20 +13,20 @@ public class JackSequenceHandler extends MidiSequenceHandler{
 		this.seq.getJackTrackController().init(getTracks());
 	}
 	
-	public void addControlChange(long tick,int track,int channel, int controller, int value) {
-		this.seq.addEvent(JackEvent.controlChange(tick, track, channel, controller, value));
+	public void addNoteOff(long tick,int track,int channel, int note, int velocity,int voice,boolean bendMode) {
+		this.seq.addEvent(JackEvent.noteOff(tick, track, channel, note, velocity, voice, bendMode));
 	}
 	
-	public void addNoteOff(long tick,int track,int channel, int note, int velocity) {
-		this.seq.addEvent(JackEvent.noteOff(tick, track, channel, note, velocity));
+	public void addNoteOn(long tick,int track,int channel, int note, int velocity,int voice,boolean bendMode) {
+		this.seq.addEvent(JackEvent.noteOn(tick, track, channel, note, velocity, voice, bendMode));
 	}
 	
-	public void addNoteOn(long tick,int track,int channel, int note, int velocity) {
-		this.seq.addEvent(JackEvent.noteOn(tick, track, channel, note, velocity));
+	public void addPitchBend(long tick,int track,int channel, int value,int voice,boolean bendMode) {
+		this.seq.addEvent(JackEvent.pitchBend(tick, track, channel, value, voice, bendMode));
 	}
 	
-	public void addPitchBend(long tick,int track,int channel, int value) {
-		this.seq.addEvent(JackEvent.pitchBend(tick, track, channel, value));
+	public void addControlChange(long tick,int track,int channel, int controller, int value) {
+		this.seq.addEvent(JackEvent.controlChange(tick, track, channel, controller, value));
 	}
 	
 	public void addProgramChange(long tick,int track,int channel, int instrument) {
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencer.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencer.java
index d788f63..72104e0 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencer.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencer.java
@@ -1,6 +1,5 @@
 package org.herac.tuxguitar.jack.sequencer;
 
-import org.herac.tuxguitar.gui.TuxGuitar;
 import org.herac.tuxguitar.jack.JackClient;
 import org.herac.tuxguitar.player.base.MidiPlayerException;
 import org.herac.tuxguitar.player.base.MidiSequenceHandler;
@@ -18,12 +17,14 @@ public class JackSequencer implements MidiSequencer{
 	private boolean transportRunning;
 	private boolean transportLockTick;
 	private MidiTransmitter transmitter;
+	private Object jackLock;
 	private JackTickController jackTickController;
 	private JackEventController jackEventController;
 	private JackEventDispacher jackEventDispacher;
 	private JackTrackController jackTrackController;
 	private JackTimer jackTimer;
 	private JackClient jackClient;
+	private JackMidiPlayerStarter jackMidiPlayerStarter;
 	
 	public JackSequencer(JackClient jackClient){
 		this.stopped = true;
@@ -33,11 +34,13 @@ public class JackSequencer implements MidiSequencer{
 		this.transportTryCount = 10;
 		this.transportTryNumber = 0;
 		this.jackClient = jackClient;
+		this.jackLock = new Object();
 		this.jackTickController = new JackTickController(this);
 		this.jackEventController = new JackEventController(this);
 		this.jackEventDispacher = new JackEventDispacher(this);
 		this.jackTrackController = new JackTrackController(this);
 		this.jackTimer = new JackTimer(this);
+		this.jackMidiPlayerStarter = new JackMidiPlayerStarter(this);
 	}
 	
 	public JackClient getJackClient(){
@@ -89,6 +92,11 @@ public class JackSequencer implements MidiSequencer{
 		this.jackTickController.notifyTick(event.getTick());
 	}
 	
+	public void clearEvents() {
+		this.jackEventController.clearEvents();
+		this.jackTickController.clearTick();
+	}
+	
 	public boolean isRunning() {
 		return this.running;
 	}
@@ -98,11 +106,13 @@ public class JackSequencer implements MidiSequencer{
 	}
 	
 	public void start( boolean startTransport ) throws MidiPlayerException{
-		if(!this.running ){
-			this.setTempo(120);
-			this.running = true;
-			if( startTransport ){
-				this.jackClient.setTransportStart();
+		synchronized ( this.jackLock ) {
+			if(!this.running ){
+				this.setTempo(120);
+				this.running = true;
+				if( startTransport ){
+					this.jackClient.setTransportStart();
+				}
 			}
 		}
 	}
@@ -112,29 +122,35 @@ public class JackSequencer implements MidiSequencer{
 	}
 	
 	public void stop( boolean stopTransport ) throws MidiPlayerException{
-		if( this.running ){
-			this.running = false;
-			if( stopTransport ){
-				this.jackClient.setTransportStop();
+		synchronized ( this.jackLock ) {
+			if( this.running ){
+				this.running = false;
+				if( stopTransport ){
+					this.jackClient.setTransportStop();
+				}
 			}
 		}
 	}
 	
-	public void reset(boolean systemReset)  throws MidiPlayerException{
-		this.getTransmitter().sendAllNotesOff();
-		for(int channel = 0; channel < 16;channel ++){
-			this.getTransmitter().sendPitchBend(channel, 64);
-		}
-		if( systemReset ){
-			this.getTransmitter().sendSystemReset();
+	public void stopAndClearEvents() throws MidiPlayerException{
+		synchronized ( this.jackLock ) {
+			this.stop( true );
+			this.reset();
+			this.clearEvents();
+			this.stopped = true;
 		}
 	}
 	
+	public void reset()  throws MidiPlayerException{
+		this.getTransmitter().sendAllNotesOff();
+		this.getTransmitter().sendPitchBendReset();
+	}
+	
 	protected void startPlayer(){
 		// Make sure sequencer was already initialized.
 		if( this.transmitter != null ){
 			this.transportLockTick = true;
-			TuxGuitar.instance().getTransport().play();
+			this.jackMidiPlayerStarter.start();
 		}
 	}
 	
@@ -147,9 +163,13 @@ public class JackSequencer implements MidiSequencer{
 	}
 	
 	public void open() {
-		if( !this.jackClient.isTransportOpen() ){
+		if(!this.jackClient.isOpen()){
+			this.jackClient.open();
+		}
+		if(!this.jackClient.isTransportOpen() ){
 			this.jackClient.openTransport();
 		}
+		this.jackMidiPlayerStarter.open();
 		this.jackTimer.setRunning( true );
 	}
 	
@@ -158,21 +178,24 @@ public class JackSequencer implements MidiSequencer{
 		if(this.isRunning()){
 			this.stop();
 		}
+		this.jackMidiPlayerStarter.close();
 		if( this.jackClient.isTransportOpen() ){
 			this.jackClient.closeTransport();
 		}
 	}
 	
 	public void check() throws MidiPlayerException {
-		if( !this.jackClient.isServerRunning() || !this.jackClient.isTransportOpen() ){
+		if(!this.jackClient.isOpen() || !this.jackClient.isTransportOpen() ){
 			this.open();
-			if( !this.jackClient.isServerRunning() || !this.jackClient.isTransportOpen() ){
+			if(!this.jackClient.isOpen() || !this.jackClient.isTransportOpen() ){
 				throw new MidiPlayerException("Jack server not running?");
 			}
 		}
 	}
 	
 	public MidiSequenceHandler createSequence(int tracks) throws MidiPlayerException{
+		this.stopAndClearEvents();
+		
 		return new JackSequenceHandler(this,tracks);
 	}
 	
@@ -193,51 +216,45 @@ public class JackSequencer implements MidiSequencer{
 	}
 	
 	protected void process() throws MidiPlayerException{
-		boolean transportRunning = this.jackClient.isTransportRunning();
-		
-		// Check if state was changed
-		if(this.transportRunning != transportRunning ){
-			if( transportRunning && !this.running ){
-				// Transport was started
+		synchronized ( this.jackLock ) {
+			boolean transportRunning = this.jackClient.isTransportRunning();
+			
+			// Check if transport was started
+			if( transportRunning && !this.transportRunning && !this.running ){
 				this.startPlayer();
-			}else if( !transportRunning ){
-				// Transport was stopped.
-				this.running = false;
 			}
-		}
-		else{
-			if( this.running && transportRunning ){
-				long transportUID = this.jackClient.getTransportUID();
-				if( this.transportUID != transportUID ){
-					this.setTickPosition( 0 , false );
-				}
-				if(this.reset){
-					this.reset( false );
-					this.reset = false;
-					this.jackEventController.reset();
+			else{
+				if( this.running && transportRunning ){
+					long transportUID = this.jackClient.getTransportUID();
+					if( this.transportUID != transportUID ){
+						this.setTickPosition( 0 , false );
+					}
+					if(this.reset){
+						this.reset();
+						this.reset = false;
+						this.jackEventController.reset();
+					}
+					this.stopped = false;
+					this.jackTickController.process();
+					this.jackEventController.process();
+					if(this.getTickPosition() > this.getTickLength()){
+						this.stopAndClearEvents();
+					}
+					this.transportUID = transportUID;
 				}
-				this.stopped = false;
-				this.jackTickController.process();
-				this.jackEventController.process();
-				if(this.getTickPosition() > this.getTickLength()){
-					this.stop( true );
+				else if( this.running ){
+					// Check if transport was stopped.
+					if( this.transportTryNumber++ > this.transportTryCount ){
+						this.running = false;
+						this.transportTryNumber = 0;
+					}
 				}
-				this.transportUID = transportUID;
-			}
-			else if( !this.stopped ){
-				this.stopped = true;
-				this.jackEventController.clearEvents();
-				this.jackTickController.clearTick();
-				this.reset( true );
-			}
-			else if( this.running ){
-				if( this.transportTryNumber++ > this.transportTryCount ){
-					this.running = false;
-					this.transportTryNumber = 0;
+				else if(!this.stopped){
+					this.stopAndClearEvents();
 				}
 			}
+			this.transportRunning = transportRunning;
 		}
-		this.transportRunning = transportRunning;
 	}
 	
 	private class JackTimer implements Runnable{
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProvider.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProvider.java
index 64b777b..e4a0c21 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProvider.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProvider.java
@@ -5,25 +5,33 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.jack.provider.JackClientProvider;
 import org.herac.tuxguitar.player.base.MidiPlayerException;
 import org.herac.tuxguitar.player.base.MidiSequencer;
 import org.herac.tuxguitar.player.base.MidiSequencerProvider;
 
 public class JackSequencerProvider implements MidiSequencerProvider{
 	
-	private List jackSequencerProviders;
-	private JackClient jackClient;
+	private List jackSequencers;
+	private JackClientProvider jackClientProvider;
 	
-	public JackSequencerProvider(JackClient jackClient){
-		this.jackClient = jackClient;
+	public JackSequencerProvider(JackClientProvider jackClientProvider){
+		this.jackClientProvider = jackClientProvider;
+		this.jackSequencers = new ArrayList();
 	}
 	
 	public List listSequencers() throws MidiPlayerException {
-		if(this.jackSequencerProviders == null){
-			this.jackSequencerProviders = new ArrayList();
-			this.jackSequencerProviders.add(new JackSequencer(this.jackClient));
+		if( this.jackSequencers.isEmpty() ){
+			JackClient jackClient = this.jackClientProvider.getJackClient();
+			if( jackClient != null ){
+				this.jackSequencers.add(new JackSequencer(jackClient));
+			}
 		}
-		return this.jackSequencerProviders;
+		return this.jackSequencers;
+	}
+	
+	public void clearSequencers() throws MidiPlayerException {
+		this.jackSequencers.clear();
 	}
 	
 	public void closeAll() throws MidiPlayerException {
@@ -32,6 +40,6 @@ public class JackSequencerProvider implements MidiSequencerProvider{
 			MidiSequencer sequencer = (MidiSequencer)it.next();
 			sequencer.close();
 		}
+		clearSequencers();
 	}
-	
 }
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProviderPlugin.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProviderPlugin.java
index 0f848dd..7284554 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProviderPlugin.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackSequencerProviderPlugin.java
@@ -1,23 +1,24 @@
 package org.herac.tuxguitar.jack.sequencer;
 
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiSequencerProviderPlugin;
-import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.jack.JackPlugin;
+import org.herac.tuxguitar.jack.singleton.JackClientInstanceProvider;
 import org.herac.tuxguitar.player.base.MidiSequencerProvider;
+import org.herac.tuxguitar.player.plugin.TGMidiSequencerProviderPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
 
 public class JackSequencerProviderPlugin extends TGMidiSequencerProviderPlugin {
 	
 	private MidiSequencerProvider jackSequencerProvider;
 	
 	public JackSequencerProviderPlugin(){
-		this(new JackClient());
-	}
-	
-	public JackSequencerProviderPlugin(JackClient jackClient){
-		this.jackSequencerProvider = new JackSequencerProvider( jackClient );
+		this.jackSequencerProvider = new JackSequencerProvider( new JackClientInstanceProvider() );
 	}
 	
 	protected MidiSequencerProvider getProvider() throws TGPluginException {
 		return this.jackSequencerProvider;
 	}
+	
+	public String getModuleId() {
+		return JackPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackTickController.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackTickController.java
index a9ef3d5..c4b0640 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackTickController.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/sequencer/JackTickController.java
@@ -2,10 +2,14 @@ package org.herac.tuxguitar.jack.sequencer;
 
 import java.util.List;
 
+import org.herac.tuxguitar.jack.JackClient;
 import org.herac.tuxguitar.song.models.TGDuration;
 
 public class JackTickController {
 	
+	private static final int TRANSPORT_FRAME_WAIT_TIME = 10;
+	private static final int TRANSPORT_FRAME_WAIT_COUNT = 10;
+	
 	private int tempo;
 	private long frame;
 	private long lastFrame;
@@ -33,7 +37,7 @@ public class JackTickController {
 		synchronized (this.lock) {
 			long frameRate = this.sequencer.getJackClient().getTransportFrameRate();
 			if( updateTransport ){
-				this.sequencer.getJackClient().setTransportFrame( Math.round( tickToFrame(tick, frameRate )) );
+				this.setTransportFrame(Math.round( tickToFrame(tick, frameRate )));
 			}
 			this.frame = this.sequencer.getJackClient().getTransportFrame();
 			this.tick = this.frameToTick( this.frame , frameRate );
@@ -64,6 +68,24 @@ public class JackTickController {
 		return this.tempo;
 	}
 	
+	public void setTransportFrame( long frame ){
+		JackClient jackClient = this.sequencer.getJackClient();
+		jackClient.setTransportFrame( frame );
+		try{
+			Object transportFrameLock = new Object();
+			
+			int tryIndex = 0;
+			int tryCount = TRANSPORT_FRAME_WAIT_COUNT;
+			while(!jackClient.isTransportRunning() && jackClient.getTransportFrame() != frame && (tryIndex++ < tryCount)){
+				synchronized (transportFrameLock) {
+					transportFrameLock.wait(TRANSPORT_FRAME_WAIT_TIME);
+				}
+			}
+		}catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
 	public double frameToTick( long frame , long frameRate ){
 		double framePos = 0;
 		double tempo = 120;
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettings.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettings.java
deleted file mode 100644
index f2cdd01..0000000
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettings.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.herac.tuxguitar.jack.settings;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager;
-
-public class JackSettings {
-	
-	private List listeners;
-	private TGConfigManager config;
-	
-	public JackSettings(){
-		this.listeners = new ArrayList();
-		this.config = new TGPluginConfigManager("tuxguitar-jack");
-		this.config.init();
-	}
-	
-	public TGConfigManager getConfig(){
-		return this.config;
-	}
-	
-	public void notifyChanges(){
-		this.getConfig().save();
-		this.getConfig().load();
-		this.fireListeners();
-	}
-	
-	public void addListener(JackSettingsListener listener){
-		if( !this.listeners.contains( listener ) ){
-			this.listeners.add( listener );
-		}
-	}
-	
-	public void removeListener(JackSettingsListener listener){
-		if( this.listeners.contains( listener ) ){
-			this.listeners.remove( listener );
-		}
-	}
-	
-	public void fireListeners(){
-		Iterator it = this.listeners.iterator();
-		while( it.hasNext() ){
-			JackSettingsListener listener = (JackSettingsListener) it.next();
-			listener.loadSettings( getConfig() );
-		}
-	}
-}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettingsDialog.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettingsDialog.java
deleted file mode 100644
index 89bf182..0000000
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettingsDialog.java
+++ /dev/null
@@ -1,554 +0,0 @@
-package org.herac.tuxguitar.jack.settings;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.jack.synthesizer.JackOutputPortRouter;
-
-public class JackSettingsDialog {
-	
-	private static final int TAB_WIDTH = 550;
-	private static final int TAB_HEIGHT = 350;
-	
-	private JackSettings settings;
-	
-	public JackSettingsDialog( JackSettings settings ){
-		this.settings = settings;
-	}
-	
-	public void open( Shell parent ){
-		final int[][] channelRouting = getChannelRoutingSettings();
-		final int[][] programRouting = getProgramRoutingSettings();
-		
-		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setText(TuxGuitar.getProperty("jack.settings.dialog"));
-		dialog.setLayout(new GridLayout());
-		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		final TabFolder tabFolder = new TabFolder(dialog, SWT.TOP);
-		tabFolder.setLayout( new FormLayout() );
-		
-		final TabItem[] routingTabs = new TabItem[2];
-		
-		// ----------------------------------------------------------------------
-		int synthRouteType = this.settings.getConfig().getIntConfigValue("jack.midi.ports.type", JackOutputPortRouter.CREATE_UNIQUE_PORT );
-		
-		Composite tabControl = new Composite( tabFolder, SWT.NONE);
-		tabControl.setLayout(new GridLayout());
-		tabControl.setLayoutData(new FormData(TAB_WIDTH,TAB_HEIGHT));
-		
-		TabItem tabItem = new TabItem( tabFolder  , SWT.None ); 
-		tabItem.setText(TuxGuitar.getProperty("jack.settings.dialog.options"));
-		tabItem.setControl(tabControl);
-		
-		Group groupSynth = new Group(tabControl,SWT.SHADOW_ETCHED_IN);
-		groupSynth.setLayout(new GridLayout(1,false));
-		groupSynth.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		groupSynth.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port"));
-		
-		final Button buttonSynthRouteType1 = new Button(groupSynth, SWT.RADIO);
-		final Button buttonSynthRouteType2 = new Button(groupSynth, SWT.RADIO);
-		final Button buttonSynthRouteType3 = new Button(groupSynth, SWT.RADIO);
-		
-		buttonSynthRouteType1.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.type.single"));
-		buttonSynthRouteType2.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.type.multiple-by-channel") );
-		buttonSynthRouteType3.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.type.multiple-by-program") );
-		
-		if( synthRouteType == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_CHANNEL ){
-			buttonSynthRouteType2.setSelection( true );
-			routingTabs[0] = openChannelRoutingTab(tabFolder, channelRouting);
-		}else if( synthRouteType == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_PROGRAM ){
-			buttonSynthRouteType3.setSelection( true );
-			routingTabs[1] = openProgramRoutingTab(tabFolder, programRouting);
-		}else{
-			buttonSynthRouteType1.setSelection( true );
-		}
-		
-		final SelectionListener routeTypeListener = new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				boolean channelRoutingTabsEnabled = buttonSynthRouteType2.getSelection();
-				boolean programRoutingTabsEnabled = buttonSynthRouteType3.getSelection();
-				
-				if( channelRoutingTabsEnabled && routingTabs[0] == null ){
-					routingTabs[0] = openChannelRoutingTab(tabFolder, channelRouting);
-				}else if( !channelRoutingTabsEnabled && routingTabs[0] != null ){
-					routingTabs[0].dispose();
-					routingTabs[0] = null;
-				}
-				if( programRoutingTabsEnabled && routingTabs[1] == null ){
-					routingTabs[1] = openProgramRoutingTab(tabFolder, programRouting);
-				}else if( !programRoutingTabsEnabled && routingTabs[1] != null ){
-					routingTabs[1].dispose();
-					routingTabs[1] = null;
-				}
-			}
-		};
-		buttonSynthRouteType1.addSelectionListener(routeTypeListener);
-		buttonSynthRouteType2.addSelectionListener(routeTypeListener);
-		buttonSynthRouteType3.addSelectionListener(routeTypeListener);
-		
-		// ------------------BUTTONS--------------------------
-		Composite compositeButtons = new Composite(dialog, SWT.NONE);
-		compositeButtons.setLayout(new GridLayout(2,false));
-		compositeButtons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(compositeButtons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				int type = JackOutputPortRouter.CREATE_UNIQUE_PORT;
-				if( buttonSynthRouteType2.getSelection() ){
-					type = JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_CHANNEL;
-				}
-				else if( buttonSynthRouteType3.getSelection() ){
-					type = JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_PROGRAM;
-				}
-				saveChanges( type , channelRouting , programRouting );
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(compositeButtons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected void saveChanges( int type , int[][] channelRouting, int[][] programRouting){
-		if( type == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_CHANNEL ){
-			this.setChannelRoutingSettings(channelRouting);
-		}
-		else if( type == JackOutputPortRouter.CREATE_MULTIPLE_PORTS_BY_PROGRAM ){
-			this.setProgramRoutingSettings(programRouting);
-		}
-		this.settings.getConfig().setProperty("jack.midi.ports.type", type );
-		this.settings.notifyChanges();
-	}
-	
-	protected int[][] getChannelRoutingSettings(){
-		int[][] channelsRoute = new int[16][];
-		for( int i = 0 ; i < channelsRoute.length ; i ++ ){
-			channelsRoute[i] = new int[3];
-			channelsRoute[i][0] = i;
-			channelsRoute[i][1] = this.settings.getConfig().getIntConfigValue("jack.midi.port.channel-routing.to-channel-" + i , -1 );
-			channelsRoute[i][2] = this.settings.getConfig().getIntConfigValue("jack.midi.port.channel-routing.to-program-" + i , -1 );
-		}
-		return channelsRoute;
-	}
-	
-	protected void setChannelRoutingSettings(int[][] channelsRoute){
-		for( int i = 0 ; i < channelsRoute.length ; i ++ ){
-			if( channelsRoute[i].length == 3 ){
-				this.settings.getConfig().setProperty("jack.midi.port.channel-routing.to-channel-" + channelsRoute[i][0] , channelsRoute[i][1] );
-				this.settings.getConfig().setProperty("jack.midi.port.channel-routing.to-program-" + channelsRoute[i][0] , channelsRoute[i][2] );
-			}
-		}
-	}
-	
-	protected int[][] getProgramRoutingSettings(){
-		int[][] routing = new int[129][];
-		for( int i = 0 ; i < routing.length ; i ++ ){
-			routing[i] = new int[4];
-			routing[i][0] = i;
-			routing[i][1] = this.settings.getConfig().getIntConfigValue("jack.midi.port.program-routing.port-" + i , 0 );
-			routing[i][2] = this.settings.getConfig().getIntConfigValue("jack.midi.port.program-routing.to-channel-" + i , -1 );
-			routing[i][3] = this.settings.getConfig().getIntConfigValue("jack.midi.port.program-routing.to-program-" + i , -1 );
-		}
-		return routing;
-	}
-	
-	protected void setProgramRoutingSettings(int[][] routing){
-		for( int i = 0 ; i < routing.length ; i ++ ){
-			if( routing[i].length == 4 ){
-				this.settings.getConfig().setProperty("jack.midi.port.program-routing.port-" + routing[i][0] , routing[i][1] );
-				this.settings.getConfig().setProperty("jack.midi.port.program-routing.to-channel-" + routing[i][0] , routing[i][2] );
-				this.settings.getConfig().setProperty("jack.midi.port.program-routing.to-program-" + routing[i][0] , routing[i][3] );
-			}
-		}
-	}
-	
-	// ----------------------------------------------------------------------------------------------------//
-	// PROGRAM ROUTING ------------------------------------------------------------------------------------//
-	// ----------------------------------------------------------------------------------------------------//
-	
-	public TabItem openProgramRoutingTab( TabFolder tabFolder , int[][] routing ){
-		Composite tabControl = new Composite( tabFolder, SWT.NONE);
-		tabControl.setLayout(new GridLayout());
-		tabControl.setLayoutData(new FormData(TAB_WIDTH,TAB_HEIGHT));
-		
-		TabItem tabItem = new TabItem( tabFolder  , SWT.None ); 
-		tabItem.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.options"));
-		tabItem.setControl(tabControl);
-		
-		Composite composite = new Composite( tabControl, SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		
-		final Table table = new Table( composite, SWT.BORDER | SWT.FULL_SELECTION);
-		table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		table.setHeaderVisible(true);
-		
-		TableColumn srcChannelColumn = new TableColumn(table, SWT.LEFT);
-		TableColumn dstPortColumn = new TableColumn(table, SWT.LEFT);
-		TableColumn dstChannelColumn = new TableColumn(table, SWT.LEFT);
-		TableColumn dstProgramColumn = new TableColumn(table, SWT.LEFT);
-		
-		srcChannelColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program"));
-		dstPortColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port"));
-		dstChannelColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel"));
-		dstProgramColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program"));
-		
-		srcChannelColumn.setWidth(125);
-		dstPortColumn.setWidth(125);
-		dstChannelColumn.setWidth(125);
-		dstProgramColumn.setWidth(125);
-		
-		loadProgramRoutingItems( table , routing );
-		
-		//-------------------------------------------------------//
-		Composite buttons = new Composite( composite , SWT.NONE);
-		buttons.setLayout(new GridLayout(1,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("edit"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				int index = table.getSelectionIndex();
-				if( index >= 0 && index < table.getItemCount() ){
-					editProgramRoutingItem( table.getShell(),  table.getItem( index ) );
-				}
-			}
-		});
-		//-------------------------------------------------------//
-		return tabItem;
-	}
-	
-	protected void loadProgramRoutingItems( Table table , int[][] routing ){
-		for( int i = 0 ; i < routing.length ; i ++ ){
-			this.addProgramRoutingItem(table, routing[i]);
-		}
-	}
-	
-	protected void addProgramRoutingItem( Table table, int[] route){
-		TableItem item = new TableItem(table, SWT.NONE );
-		this.addProgramRoutingItem(item, route);
-	}
-	
-	protected void addProgramRoutingItem( TableItem item, int[] route){
-		if( route.length == 4 ){
-			String[] text = new String[4];
-			if( route[0] < 128 ){
-				text[0] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.item", new String[]{ Integer.toString(route[0]) }));
-			}else{
-				text[0] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.percussion"));
-			}
-			if( route[1] > 0 ){
-				text[1] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.dedicated"));
-			}else{
-				text[1] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.default"));
-			}
-			if( route[2] >= 0 ){
-				text[2] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.item", new String[]{ Integer.toString(route[2]) }));
-			}else{
-				text[2] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.default"));
-			}
-			if( route[3] >= 0 ){
-				text[3] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.item", new String[]{ Integer.toString(route[3]) }));
-			}else{
-				text[3] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.default"));
-			}
-			item.setText( text );
-			item.setData( route );
-		}
-	}
-	
-	public void editProgramRoutingItem( Shell parent , final TableItem item){
-		final int[] route = (int [])item.getData();
-		
-		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM);
-		dialog.setLayout(new GridLayout(1,false));
-		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		dialog.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.options"));
-		// ----------------------------------------------------------------------
-		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout(2,false));
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.options"));
-		
-		Label program = new Label(group, SWT.NULL);
-		program.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
-		program.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program") + ":");
-		
-		Label programValue = new Label(group, SWT.NULL);
-		programValue.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
-		if( route[0] < 128 ){
-			programValue.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.item", new String[]{ Integer.toString(route[0]) }));
-		}else{
-			programValue.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.src-program.percussion"));
-		}
-		
-		Label programPort = new Label(group, SWT.NULL);
-		programPort.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
-		programPort.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port") + ":");
-		
-		final Combo programPortValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
-		programPortValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-		programPortValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.default"));
-		programPortValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-port.dedicated"));
-		programPortValue.select( route[1] );
-		
-		Label channelRoute = new Label(group, SWT.NULL);
-		channelRoute.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
-		channelRoute.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel") + ":");
-		
-		final Combo channelRouteValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
-		channelRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-		channelRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.default"));
-		for( int i = 0 ; i < 16 ; i ++ ){
-			channelRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-channel.item", new String[]{Integer.toString(i)}));
-		}
-		channelRouteValue.select( route[2] + 1 );
-		
-		Label programRoute = new Label(group, SWT.NULL);
-		programRoute.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
-		programRoute.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program") + ":");
-		
-		final Combo programRouteValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
-		programRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-		programRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.default"));
-		for( int i = 0 ; i < 128 ; i ++ ){
-			programRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.program-router.dst-program.item", new String[]{Integer.toString(i)}));
-		}
-		programRouteValue.select( route[3] + 1 );
-		
-		// ------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				route[1] = programPortValue.getSelectionIndex();
-				route[2] = channelRouteValue.getSelectionIndex() - 1;
-				route[3] = programRouteValue.getSelectionIndex() - 1;
-				addProgramRoutingItem(item, route);
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonCancel );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-	
-	// ----------------------------------------------------------------------------------------------------//
-	// CHANNEL ROUTING ------------------------------------------------------------------------------------//
-	// ----------------------------------------------------------------------------------------------------//
-	
-	public TabItem openChannelRoutingTab( TabFolder tabFolder , int[][] routing ){
-		Composite tabControl = new Composite( tabFolder, SWT.NONE);
-		tabControl.setLayout(new GridLayout());
-		tabControl.setLayoutData(new FormData(TAB_WIDTH,TAB_HEIGHT));
-		
-		TabItem tabItem = new TabItem( tabFolder  , SWT.None ); 
-		tabItem.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.options"));
-		tabItem.setControl(tabControl);
-		
-		Composite composite = new Composite( tabControl, SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		
-		final Table table = new Table( composite, SWT.BORDER | SWT.FULL_SELECTION);
-		table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		table.setHeaderVisible(true);
-		
-		TableColumn srcChannelColumn = new TableColumn(table, SWT.LEFT);
-		TableColumn dstChannelColumn = new TableColumn(table, SWT.LEFT);
-		TableColumn dstProgramColumn = new TableColumn(table, SWT.LEFT);
-		
-		srcChannelColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel"));
-		dstChannelColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel"));
-		dstProgramColumn.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program"));
-		
-		srcChannelColumn.setWidth(166);
-		dstChannelColumn.setWidth(166);
-		dstProgramColumn.setWidth(166);
-		
-		loadChannelRoutingItems( table , routing );
-		
-		//-------------------------------------------------------//
-		Composite buttons = new Composite( composite , SWT.NONE);
-		buttons.setLayout(new GridLayout(1,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false));
-		
-		final Button buttonEdit = new Button(buttons, SWT.PUSH);
-		buttonEdit.setText(TuxGuitar.getProperty("edit"));
-		buttonEdit.setLayoutData(getButtonData());
-		buttonEdit.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				int index = table.getSelectionIndex();
-				if( index >= 0 && index < table.getItemCount() ){
-					editChannelRoutingItem( table.getShell(),  table.getItem( index ) );
-				}
-			}
-		});
-		//-------------------------------------------------------//
-		
-		return tabItem;
-	}
-	
-	protected void loadChannelRoutingItems( Table table , int[][] routing ){
-		for( int i = 0 ; i < routing.length ; i ++ ){
-			this.addChannelRoutingItem(table, routing[i]);
-		}
-	}
-	
-	protected void addChannelRoutingItem( Table table, int[] route){
-		TableItem item = new TableItem(table, SWT.NONE );
-		this.addChannelRoutingItem(item, route);
-	}
-	
-	protected void addChannelRoutingItem( TableItem item, int[] route){
-		if( route.length == 3 ){
-			String[] text = new String[3];
-			
-			text[0] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel.item", new String[]{ Integer.toString(route[0]) }));
-			if( route[1] >= 0 ){
-				text[1] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.item", new String[]{ Integer.toString(route[1]) }));
-			}else{
-				text[1] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.default"));
-			}
-			if( route[2] >= 0 ){
-				text[2] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.item", new String[]{ Integer.toString(route[2]) }));
-			}else{
-				text[2] = (TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.default"));
-			}
-			item.setText( text );
-			item.setData( route );
-		}
-	}
-	
-	public void editChannelRoutingItem( Shell parent , final TableItem item){
-		final int[] route = (int [])item.getData();
-		
-		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM);
-		dialog.setLayout(new GridLayout(1,false));
-		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		dialog.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.options"));
-		// ----------------------------------------------------------------------
-		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout(2,false));
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.options"));
-		
-		Label channel = new Label(group, SWT.NULL);
-		channel.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
-		channel.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel") + ":");
-		
-		Label channelValue = new Label(group, SWT.NULL);
-		channelValue.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
-		channelValue.setText( TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.src-channel.item", new String[]{ Integer.toString(route[0]) }) );
-		
-		Label channelRoute = new Label(group, SWT.NULL);
-		channelRoute.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
-		channelRoute.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel") + ":");
-		
-		final Combo channelRouteValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
-		channelRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-		channelRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.default"));
-		for( int i = 0 ; i < 16 ; i ++ ){
-			channelRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-channel.item", new String[]{Integer.toString(i)}));
-		} 
-		channelRouteValue.select( route[1] + 1 );
-		
-		Label programRoute = new Label(group, SWT.NULL);
-		programRoute.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
-		programRoute.setText(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program") + ":");
-		
-		final Combo programRouteValue = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
-		programRouteValue.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
-		programRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.default"));
-		for( int i = 0 ; i < 127 ; i ++ ){
-			programRouteValue.add(TuxGuitar.getProperty("jack.settings.dialog.options.midi-port.channel-router.dst-program.item", new String[]{Integer.toString(i)}));
-		}
-		programRouteValue.select( route[2] + 1 );
-		
-		// ------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				route[1] = channelRouteValue.getSelectionIndex() - 1;
-				route[2] = programRouteValue.getSelectionIndex() - 1;
-				addChannelRoutingItem(item, route);
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonCancel );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettingsListener.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettingsListener.java
deleted file mode 100644
index 55a4eee..0000000
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/settings/JackSettingsListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.herac.tuxguitar.jack.settings;
-
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-
-public interface JackSettingsListener {
-	
-	public void loadSettings( TGConfigManager config );
-	
-}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/singleton/JackClientInstanceProvider.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/singleton/JackClientInstanceProvider.java
new file mode 100644
index 0000000..d3d9a1c
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/singleton/JackClientInstanceProvider.java
@@ -0,0 +1,26 @@
+package org.herac.tuxguitar.jack.singleton;
+
+import java.util.List;
+
+import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.jack.provider.JackClientProvider;
+import org.herac.tuxguitar.util.plugin.TGPluginManager;
+
+public class JackClientInstanceProvider implements JackClientProvider {
+
+	public JackClient getJackClient() {
+		JackSingletonPlugin plugin = findSingletonPlugin();
+		if( plugin != null ){
+			return plugin.getJackClient();
+		}
+		return null;
+	}
+	
+	private JackSingletonPlugin findSingletonPlugin(){
+		List pluginInstances = TGPluginManager.getInstance().getPluginInstances(JackSingletonPlugin.class);
+		if( pluginInstances != null && !pluginInstances.isEmpty() ){
+			return ((JackSingletonPlugin)pluginInstances.get(0));
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/singleton/JackSingletonPlugin.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/singleton/JackSingletonPlugin.java
new file mode 100644
index 0000000..6c7874b
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/singleton/JackSingletonPlugin.java
@@ -0,0 +1,59 @@
+package org.herac.tuxguitar.jack.singleton;
+
+import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.jack.JackPlugin;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class JackSingletonPlugin implements TGPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-jack";
+	
+	private JackClient jackClient;
+	
+	public JackSingletonPlugin(){
+		super();
+	}
+	
+	public void init() throws TGPluginException {
+		this.jackClient = new JackClient();	
+	}
+	
+	public void close(){
+		if( this.jackClient != null ){
+			if( this.jackClient.isOpen() ){
+				this.jackClient.close();
+			}
+			this.jackClient.finalize();
+		}
+		this.jackClient = null;
+	}
+	
+	public JackClient getJackClient() {
+		return this.jackClient;
+	}
+
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		// Not implemented
+	}
+	
+	public String getModuleId() {
+		return JackPlugin.MODULE_ID;
+	}
+	
+	public String getAuthor() {
+		return "Julian Casadesus <julian at casadesus.com.ar>";
+	}
+	
+	public String getDescription() {
+		return "Jack Audio Connection Kit plugin support";
+	}
+	
+	public String getName() {
+		return "Jack Audio Connection Kit plugin support";
+	}
+	
+	public String getVersion() {
+		return "1.0";
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackChannel.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackChannel.java
new file mode 100644
index 0000000..a5f0633
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackChannel.java
@@ -0,0 +1,92 @@
+package org.herac.tuxguitar.jack.synthesizer;
+
+import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.jack.JackPort;
+import org.herac.tuxguitar.player.base.MidiChannel;
+import org.herac.tuxguitar.player.base.MidiControllers;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+
+public class JackChannel implements MidiChannel{
+	
+	private int channel1;
+	private int channel2;
+	private JackPort jackPort;
+	private JackClient jackClient;
+	
+	public JackChannel(JackClient jackClient, JackPort jackPort){
+		this.jackClient = jackClient;
+		this.jackPort = jackPort;
+		this.channel1 = 0;
+		this.channel2 = 0;
+	}
+	
+	public void sendAllNotesOff() throws MidiPlayerException {
+		this.sendControlChange(MidiControllers.ALL_NOTES_OFF,0);
+	}
+
+	public void sendNoteOn(int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		byte[] event = new byte[3];
+		event[0] = (byte)(0x90 | resolveChannel(bendMode) );
+		event[1] = (byte)key;
+		event[2] = (byte)velocity;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+
+	public void sendNoteOff(int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		byte[] event = new byte[3];
+		event[0] = (byte)(0x80 | resolveChannel(bendMode) );
+		event[1] = (byte)key;
+		event[2] = (byte)velocity;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+
+	public void sendPitchBend(int value, int voice, boolean bendMode) throws MidiPlayerException {
+		byte[] event = new byte[3];
+		event[0] = (byte)(0xE0 | resolveChannel(bendMode) );
+		event[1] = (byte)0;
+		event[2] = (byte)value;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+	
+	public void sendProgramChange(int value) throws MidiPlayerException {
+		this.sendProgramChange(value, this.channel1);
+		if( this.channel1 != this.channel2 ){
+			this.sendProgramChange(value, this.channel2);
+		}
+	}
+
+	public void sendProgramChange(int value, int channel) throws MidiPlayerException {
+		byte[] event = new byte[2];
+		event[0] = (byte)(0xC0 | channel );
+		event[1] = (byte)value;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+	
+	public void sendControlChange(int controller, int value) throws MidiPlayerException {
+		this.sendControlChange(controller, value, this.channel1);
+		if( this.channel1 != this.channel2 ){
+			this.sendControlChange(controller, value, this.channel2);
+		}
+	}
+	
+	public void sendControlChange(int controller, int value, int channel) throws MidiPlayerException {
+		byte[] event = new byte[3];
+		event[0] = (byte)(0xB0 | channel );
+		event[1] = (byte)controller;
+		event[2] = (byte)value;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+	
+	public void sendParameter(String key, String value) throws MidiPlayerException{
+		if( JackChannelParameter.PARAMETER_GM_CHANNEL_1.equals(key) ){
+			this.channel1 = Integer.parseInt(value);
+		}
+		if( JackChannelParameter.PARAMETER_GM_CHANNEL_2.equals(key) ){
+			this.channel2 = Integer.parseInt(value);
+		}
+	}
+	
+	private int resolveChannel(boolean bendMode){
+		return (bendMode ? this.channel2 : this.channel1);
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackChannelParameter.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackChannelParameter.java
new file mode 100644
index 0000000..d152971
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackChannelParameter.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.jack.synthesizer;
+
+public final class JackChannelParameter {
+	
+	public static final String PARAMETER_EXCLUSIVE_PORT = "jack-port-exclusive";
+	public static final String PARAMETER_GM_CHANNEL_1 = "gm-channel-1";
+	public static final String PARAMETER_GM_CHANNEL_2 = "gm-channel-2";
+	
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackChannelProxy.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackChannelProxy.java
new file mode 100644
index 0000000..b9bde3d
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackChannelProxy.java
@@ -0,0 +1,94 @@
+package org.herac.tuxguitar.jack.synthesizer;
+
+import org.herac.tuxguitar.jack.JackPort;
+import org.herac.tuxguitar.player.base.MidiChannel;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+
+public class JackChannelProxy implements MidiChannel {
+	
+	private int jackChannelId;
+	private JackSynthesizer jackSynthesizer;
+	private JackPort jackPort;
+	private MidiChannel midiChannel;
+	private boolean exclusive;
+	
+	public JackChannelProxy(int jackChannelId, JackSynthesizer jackSynthesizer) {
+		this.jackChannelId = jackChannelId;
+		this.jackSynthesizer = jackSynthesizer;
+	}
+	
+	public void sendNoteOn(int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		if( this.midiChannel != null ){
+			this.midiChannel.sendNoteOn(key, velocity, voice, bendMode);
+		}
+	}
+
+	public void sendNoteOff(int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		if( this.midiChannel != null ){
+			this.midiChannel.sendNoteOff(key, velocity, voice, bendMode);
+		}
+	}
+
+	public void sendPitchBend(int value, int voice, boolean bendMode) throws MidiPlayerException {
+		if( this.midiChannel != null ){
+			this.midiChannel.sendPitchBend(value, voice, bendMode);
+		}
+	}
+
+	public void sendProgramChange(int value) throws MidiPlayerException {
+		if( this.midiChannel != null ){
+			this.midiChannel.sendProgramChange(value);
+		}
+	}
+
+	public void sendControlChange(int controller, int value) throws MidiPlayerException {
+		if( this.midiChannel != null ){
+			this.midiChannel.sendControlChange(controller, value);
+		}
+	}
+	
+	public void sendAllNotesOff() throws MidiPlayerException {
+		if( this.midiChannel != null ){
+			this.midiChannel.sendAllNotesOff();
+		}
+	}
+
+	public void sendParameter(String key, String value) throws MidiPlayerException {
+		if( JackChannelParameter.PARAMETER_EXCLUSIVE_PORT.equals(key) ){
+			boolean exclusive = Boolean.TRUE.toString().equals(value);
+			if( this.exclusive != exclusive ){
+				this.jackSynthesizer.openChannel(getJackChannelId(), exclusive);
+			}
+		} else if( this.midiChannel != null ){
+			this.midiChannel.sendParameter(key, value);
+		}
+	}
+
+	public int getJackChannelId() {
+		return jackChannelId;
+	}
+	
+	public MidiChannel getMidiChannel() {
+		return midiChannel;
+	}
+	
+	public void setMidiChannel(MidiChannel midiChannel) {
+		this.midiChannel = midiChannel;
+	}
+	
+	public JackPort getJackPort() {
+		return jackPort;
+	}
+	
+	public void setJackPort(JackPort jackPort) {
+		this.jackPort = jackPort;
+	}
+	
+	public boolean isExclusive() {
+		return exclusive;
+	}
+	
+	public void setExclusive(boolean exclusive) {
+		this.exclusive = exclusive;
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackGmPort.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackGmPort.java
new file mode 100644
index 0000000..99e9220
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackGmPort.java
@@ -0,0 +1,46 @@
+package org.herac.tuxguitar.jack.synthesizer;
+
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
+import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.jack.JackPort;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+
+public class JackGmPort  extends GMOutputPort {
+	
+	private JackPort jackPort;
+	private JackGmReceiver jackReceiver;
+	
+	public JackGmPort(JackClient jackClient, JackPort jackPort){
+		this.jackPort = jackPort;
+		this.jackReceiver = new JackGmReceiver(jackClient, jackPort);
+	}
+	
+	public JackPort getJackPort(){
+		return this.jackPort;
+	}
+	
+	public GMReceiver getReceiver(){
+		return this.jackReceiver;
+	}
+	
+	public void open(){
+		// Not implemented
+	}
+	
+	public void close(){
+		// Not implemented
+	}
+	
+	public void check() throws MidiPlayerException {
+		// Not implemented
+	}
+	
+	public String getKey(){
+		return ("tuxguitar-jack");
+	}
+	
+	public String getName(){
+		return ("Jack Midi Port");
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackGmReceiver.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackGmReceiver.java
new file mode 100644
index 0000000..e8a46b4
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackGmReceiver.java
@@ -0,0 +1,66 @@
+package org.herac.tuxguitar.jack.synthesizer;
+
+import org.herac.tuxguitar.gm.port.GMReceiver;
+import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.jack.JackPort;
+import org.herac.tuxguitar.player.base.MidiControllers;
+
+public class JackGmReceiver implements GMReceiver{
+	
+	private JackClient jackClient;
+	private JackPort jackPort;
+	
+	public JackGmReceiver(JackClient jackClient, JackPort jackPort){
+		this.jackClient = jackClient;
+		this.jackPort = jackPort;
+	}
+	
+	public void sendAllNotesOff() {
+		for(int i = 0; i < 16; i ++){
+			sendControlChange(i,MidiControllers.ALL_NOTES_OFF,0);
+		}
+	}
+	
+	public void sendNoteOn(int channel, int key, int velocity) {
+		byte[] event = new byte[3];
+		event[0] = (byte)(0x90 | channel );
+		event[1] = (byte)key;
+		event[2] = (byte)velocity;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+	
+	public void sendNoteOff(int channel, int key, int velocity) {
+		byte[] event = new byte[3];
+		event[0] = (byte)(0x80 | channel );
+		event[1] = (byte)key;
+		event[2] = (byte)velocity;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+	
+	public void sendPitchBend(int channel, int value) {
+		byte[] event = new byte[3];
+		event[0] = (byte)(0xE0 | channel );
+		event[1] = (byte)0;
+		event[2] = (byte)value;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+	
+	public void sendProgramChange(int channel, int value) {
+		byte[] event = new byte[2];
+		event[0] = (byte)(0xC0 | channel );
+		event[1] = (byte)value;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+	
+	public void sendControlChange(int channel, int controller, int value) {
+		byte[] event = new byte[3];
+		event[0] = (byte)(0xB0 | channel );
+		event[1] = (byte)controller;
+		event[2] = (byte)value;
+		this.jackClient.addEventToQueue( this.jackPort , event);
+	}
+	
+	public void sendSystemReset() {
+		//not implemented
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPort.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPort.java
deleted file mode 100644
index bc23b3a..0000000
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPort.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.herac.tuxguitar.jack.synthesizer;
-
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.jack.JackClient;
-import org.herac.tuxguitar.jack.settings.JackSettings;
-import org.herac.tuxguitar.jack.settings.JackSettingsListener;
-import org.herac.tuxguitar.player.base.MidiOutputPort;
-import org.herac.tuxguitar.player.base.MidiPlayerException;
-import org.herac.tuxguitar.player.base.MidiReceiver;
-
-public class JackOutputPort implements JackSettingsListener, MidiOutputPort {
-	
-	private JackClient jackClient;
-	private JackSettings jackSettings;
-	private JackReceiver jackReceiver;
-	private JackOutputPortRouter jackOutputPortRouter;
-	
-	public JackOutputPort( JackClient jackClient , JackSettings jackSettings ){
-		this.jackOutputPortRouter = new JackOutputPortRouter();
-		this.jackReceiver = new JackReceiver(jackClient, this);
-		this.jackSettings = jackSettings;
-		this.jackClient = jackClient;
-	}
-	
-	public void open(){
-		if(!this.jackClient.isPortsOpen()){
-			this.loadSettings( this.jackSettings.getConfig() );
-			this.jackSettings.addListener( this );
-			this.jackClient.openPorts(this.jackOutputPortRouter.getPortCount());
-		}
-	}
-	
-	public void close(){
-		if(this.jackClient.isPortsOpen()){
-			this.jackClient.closePorts();
-			this.jackSettings.removeListener( this );
-		}
-	}
-	
-	public void check() throws MidiPlayerException {
-		if( !this.jackClient.isServerRunning() || !this.jackClient.isPortsOpen() ){
-			this.open();
-			if( !this.jackClient.isServerRunning() || !this.jackClient.isPortsOpen() ){
-				throw new MidiPlayerException("Jack server not running?");
-			}
-		}
-	}
-	
-	public MidiReceiver getReceiver(){
-		return this.jackReceiver;
-	}
-	
-	public JackOutputPortRouter getRouter(){
-		return this.jackOutputPortRouter;
-	}
-	
-	public void loadSettings(TGConfigManager config) {
-		boolean connected = this.jackClient.isPortsOpen();
-		if( connected ){
-			this.jackClient.closePorts();
-		}
-		this.jackOutputPortRouter.loadSettings(config);
-		if( connected ){
-			this.jackClient.openPorts(this.jackOutputPortRouter.getPortCount());
-		}
-	}
-	
-	public String getKey(){
-		return ("tuxguitar-jack");
-	}
-	
-	public String getName(){
-		return ("Jack Midi Port");
-	}
-}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProvider.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProvider.java
index 5435acb..a9091b3 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProvider.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProvider.java
@@ -4,32 +4,31 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.herac.tuxguitar.jack.JackClient;
-import org.herac.tuxguitar.jack.settings.JackSettings;
+import org.herac.tuxguitar.jack.provider.JackClientProvider;
 import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
 
 public class JackOutputPortProvider implements MidiOutputPortProvider{
 	
 	private List jackOutputPorts;
-	private JackClient jackClient;
-	private JackSettings jackSettings;
+	private JackClientProvider jackClientProvider;
 	
-	public JackOutputPortProvider(JackClient jackClient,JackSettings jackSettings){
-		this.jackClient = jackClient;
-		this.jackSettings = jackSettings;
+	public JackOutputPortProvider(JackClientProvider jackClientProvider){
+		this.jackClientProvider = jackClientProvider;
 	}
 	
 	public List listPorts() {
-		if(this.jackOutputPorts == null){
+		if( this.jackOutputPorts == null ){
 			this.jackOutputPorts = new ArrayList();
-			this.jackOutputPorts.add(new JackOutputPort( this.jackClient , this.jackSettings ));
+			
+			JackClient jackClient = this.jackClientProvider.getJackClient();
+			if( jackClient != null ){
+				this.jackOutputPorts.add(new JackSynthesizerPort(jackClient));
+			}
 		}
 		return this.jackOutputPorts;
 	}
 	
 	public void closeAll(){
-		if(this.jackClient.isPortsOpen()){
-			this.jackClient.closePorts();
-		}
+		// TODO
 	}
-	
 }
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProviderPlugin.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProviderPlugin.java
index c369884..ccb77b3 100644
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProviderPlugin.java
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortProviderPlugin.java
@@ -1,23 +1,23 @@
 package org.herac.tuxguitar.jack.synthesizer;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin;
-import org.herac.tuxguitar.jack.JackClient;
-import org.herac.tuxguitar.jack.settings.JackSettings;
+import org.herac.tuxguitar.jack.JackPlugin;
+import org.herac.tuxguitar.jack.singleton.JackClientInstanceProvider;
 import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.plugin.TGMidiOutputPortProviderPlugin;
 
 public class JackOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin {
 	
 	private JackOutputPortProvider jackOutputPortProvider;
 	
 	public JackOutputPortProviderPlugin(){
-		this(new JackClient(),new JackSettings());
-	}
-	
-	public JackOutputPortProviderPlugin(JackClient jackClient,JackSettings jackSettings){
-		this.jackOutputPortProvider = new JackOutputPortProvider( jackClient , jackSettings);
+		this.jackOutputPortProvider = new JackOutputPortProvider(new JackClientInstanceProvider() );
 	}
 	
 	protected MidiOutputPortProvider getProvider() {
 		return this.jackOutputPortProvider;
 	}
+	
+	public String getModuleId() {
+		return JackPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortRouter.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortRouter.java
deleted file mode 100644
index 3450e61..0000000
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackOutputPortRouter.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package org.herac.tuxguitar.jack.synthesizer;
-
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-
-public class JackOutputPortRouter {
-	
-	public static final int CREATE_UNIQUE_PORT = 0;
-	public static final int CREATE_MULTIPLE_PORTS_BY_CHANNEL = 1;
-	public static final int CREATE_MULTIPLE_PORTS_BY_PROGRAM = 2;
-	
-	private static final int PORT_INDEX = 0;
-	private static final int CHANNEL_INDEX = 1;
-	private static final int PROGRAM_INDEX = 2;
-	
-	private int ports;
-	private int[][] channels;
-	private int[][] programs;
-	
-	public JackOutputPortRouter(){
-		this.ports = 1;
-		this.channels = new int[16][3];
-		this.programs = new int[128][3];
-	}
-	
-	public int getPortCount(){
-		return this.ports;
-	}
-	
-	public int getPortRoute( int channel ){
-		if( channel >= 0 && channel < this.channels.length ){
-			int route = this.channels[ channel ][ PORT_INDEX ];
-			return ( route >= 0 ? route : 0 );
-		}
-		return 0;
-	}
-	
-	public int getChannelRoute( int channel ){
-		if( channel >= 0 && channel < this.channels.length ){
-			int route = this.channels[ channel ][ CHANNEL_INDEX ];
-			return ( route >= 0 ? route : channel );
-		}
-		return 0;
-	}
-	
-	public int getProgramRoute( int channel , int program ){
-		if( channel >= 0 && channel < this.channels.length ){
-			int route = this.channels[ channel ][ PROGRAM_INDEX ];
-			return ( route >= 0 ? route : program );
-		}
-		return 0;
-	}
-	
-	public void setProgram( int channel , int program ){
-		if( channel >= 0 && channel < this.channels.length && program >= 0 && program < this.programs.length ){
-			if( this.channels[ channel ][ PROGRAM_INDEX ] >= 0 ){
-				if( channel != 9 ){
-					int routePort = this.programs[ program ][ PORT_INDEX ];
-					int routeChannel = this.programs[ program ][ CHANNEL_INDEX ];
-					int routeProgram = this.programs[ program ][ PROGRAM_INDEX ];
-					if( routePort >= 0 ){
-						this.channels[ channel ][ PORT_INDEX ] = routePort;
-					}
-					if( routeChannel >= 0 ){
-						this.channels[ channel ][ CHANNEL_INDEX ] = routeChannel;
-					}
-					if( routeProgram >= 0 ){
-						this.channels[ channel ][ PROGRAM_INDEX ] = routeProgram;
-					}
-				}
-			}
-		}
-	}
-	
-	protected void createUniquePort(){
-		this.ports = 1;
-		for( int i = 0 ; i < this.channels.length ; i ++ ){
-			this.channels[i][ PORT_INDEX ] = 0;
-			this.channels[i][ CHANNEL_INDEX ] = i;
-			this.channels[i][ PROGRAM_INDEX ] = -1;
-		}
-		for( int i = 0 ; i < this.programs.length ; i ++ ){
-			this.programs[i][ PORT_INDEX ] = -1;
-			this.programs[i][ PROGRAM_INDEX ] = -1;
-			this.programs[i][ CHANNEL_INDEX ] = -1;
-		}
-	}
-	
-	protected void createMultiplePortsByChannel( int[][] routing ){
-		this.ports = this.channels.length;
-		
-		// Initialize default channel values
-		for( int i = 0 ; i < this.channels.length ; i ++ ){
-			this.channels[i][ PORT_INDEX ] = i;
-			this.channels[i][ CHANNEL_INDEX ] = i;
-			this.channels[i][ PROGRAM_INDEX ] = -1;
-		}
-		// Disable program routing
-		for( int i = 0 ; i < this.programs.length ; i ++ ){
-			this.programs[i][ PORT_INDEX ] = -1;
-			this.programs[i][ PROGRAM_INDEX ] = -1;
-			this.programs[i][ CHANNEL_INDEX ] = -1;
-		}
-		
-		// load new routing
-		for( int i = 0 ; i < routing.length ; i ++ ){
-			if( routing[i].length == 3 ){
-				int channel = routing[i][0];
-				if( channel >= 0 && channel < this.channels.length ){
-					this.channels[channel][ CHANNEL_INDEX ] = routing[i][1];
-					this.channels[channel][ PROGRAM_INDEX ] = routing[i][2];
-				}
-			}
-		}
-	}
-	
-	protected void createMultiplePortsByProgram( int[][] routing ){
-		this.ports = 1;
-		
-		// Initialize default channel values
-		for( int i = 0 ; i < this.channels.length ; i ++ ){
-			this.channels[i][ PORT_INDEX ] = -1;
-			this.channels[i][ CHANNEL_INDEX ] = -1;
-			this.channels[i][ PROGRAM_INDEX ] = 0;
-		}
-		
-		// Initialize default program values
-		for( int i = 0 ; i < this.programs.length ; i ++ ){
-			this.programs[i][ PORT_INDEX ] = 0;
-			this.programs[i][ PROGRAM_INDEX ] = i;
-			this.programs[i][ CHANNEL_INDEX ] = -1;
-		}
-		
-		// load new routing
-		for( int i = 0 ; i < routing.length ; i ++ ){
-			if( routing[i].length == 4 ){
-				int program = routing[i][0];
-				if( program >= 0 && program < this.programs.length ){
-					if( routing[i][1] > 0 ){
-						// Create a dedicated port
-						this.programs[program][ PORT_INDEX ] = this.ports ++ ;
-					}
-					this.programs[program][ CHANNEL_INDEX ] = routing[i][2];
-					this.programs[program][ PROGRAM_INDEX ] = (routing[i][3] >= 0 ? routing[i][3] : program );
-				}
-				// Percussion Kit
-				else if( program == 128 ){
-					if( routing[i][1] > 0 ){
-						// Create a dedicated port
-						this.channels[9][ PORT_INDEX ] = this.ports ++ ;
-					}
-					this.channels[9][ CHANNEL_INDEX ] = routing[i][2];
-					this.channels[9][ PROGRAM_INDEX ] = routing[i][3];
-				}
-			}
-		}
-	}
-	
-	public void loadSettings( TGConfigManager config ){
-		int type = config.getIntConfigValue("jack.midi.ports.type", CREATE_UNIQUE_PORT );
-		if( type == CREATE_MULTIPLE_PORTS_BY_PROGRAM ){
-			// 128 instruments + 1 percussion kit
-			int[][] routing = new int[129][];
-			for( int i = 0 ; i < routing.length ; i ++ ){
-				routing[i] = new int[4];
-				routing[i][0] = i;
-				routing[i][1] = config.getIntConfigValue("jack.midi.port.program-routing.port-" + i , 0 );
-				routing[i][2] = config.getIntConfigValue("jack.midi.port.program-routing.to-channel-" + i , -1 );
-				routing[i][3] = config.getIntConfigValue("jack.midi.port.program-routing.to-program-" + i , -1 );
-			}
-			this.createMultiplePortsByProgram( routing );
-		}else if( type == CREATE_MULTIPLE_PORTS_BY_CHANNEL ){
-			// 16 channels
-			int[][] routing = new int[16][];
-			for( int i = 0 ; i < routing.length ; i ++ ){
-				routing[i] = new int[3];
-				routing[i][0] = i;
-				routing[i][1] = config.getIntConfigValue("jack.midi.port.channel-routing.to-channel-" + i , -1 );
-				routing[i][2] = config.getIntConfigValue("jack.midi.port.channel-routing.to-program-" + i , -1 );
-			}
-			this.createMultiplePortsByChannel( routing );
-		}else{
-			this.createUniquePort();
-		}
-	}
-}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackReceiver.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackReceiver.java
deleted file mode 100644
index f6fd9d2..0000000
--- a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackReceiver.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.herac.tuxguitar.jack.synthesizer;
-
-import org.herac.tuxguitar.jack.JackClient;
-import org.herac.tuxguitar.player.base.MidiControllers;
-import org.herac.tuxguitar.player.base.MidiReceiver;
-
-public class JackReceiver implements MidiReceiver{
-	
-	private JackClient jackClient;
-	private JackOutputPort jackOutputPort;
-	
-	public JackReceiver(JackClient jackClient, JackOutputPort jackOutputPort){
-		this.jackClient = jackClient;
-		this.jackOutputPort = jackOutputPort;
-	}
-	
-	public void sendAllNotesOff() {
-		for(int i = 0; i < 16; i ++){
-			sendControlChange(i,MidiControllers.ALL_NOTES_OFF,0);
-		}
-	}
-	
-	public void sendNoteOn(int channel, int key, int velocity) {
-		byte[] event = new byte[3];
-		event[0] = (byte)(0x90 | this.jackOutputPort.getRouter().getChannelRoute(channel) );
-		event[1] = (byte)key;
-		event[2] = (byte)velocity;
-		this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event);
-	}
-	
-	public void sendNoteOff(int channel, int key, int velocity) {
-		byte[] event = new byte[3];
-		event[0] = (byte)(0x80 | this.jackOutputPort.getRouter().getChannelRoute(channel) );
-		event[1] = (byte)key;
-		event[2] = (byte)velocity;
-		this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event);
-	}
-	
-	public void sendPitchBend(int channel, int value) {
-		byte[] event = new byte[3];
-		event[0] = (byte)(0xE0 | this.jackOutputPort.getRouter().getChannelRoute(channel) );
-		event[1] = (byte)0;
-		event[2] = (byte)value;
-		this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event);
-	}
-	
-	public void sendControlChange(int channel, int controller, int value) {
-		byte[] event = new byte[3];
-		event[0] = (byte)(0xB0 | this.jackOutputPort.getRouter().getChannelRoute(channel) );
-		event[1] = (byte)controller;
-		event[2] = (byte)value;
-		this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event);
-	}
-	
-	public void sendProgramChange(int channel, int value) {
-		this.jackOutputPort.getRouter().setProgram(channel, value);
-		byte[] event = new byte[2];
-		event[0] = (byte)(0xC0 | this.jackOutputPort.getRouter().getChannelRoute(channel) );
-		event[1] = (byte)this.jackOutputPort.getRouter().getProgramRoute(channel , value);
-		this.jackClient.addEventToQueue( this.jackOutputPort.getRouter().getPortRoute(channel) , event);
-	}
-	
-	public void sendSystemReset() {
-		//not implemented
-	}
-}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackSynthesizer.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackSynthesizer.java
new file mode 100644
index 0000000..bcbe7a4
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackSynthesizer.java
@@ -0,0 +1,161 @@
+package org.herac.tuxguitar.jack.synthesizer;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.jack.JackPort;
+import org.herac.tuxguitar.player.base.MidiChannel;
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.base.MidiSynthesizer;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class JackSynthesizer implements MidiSynthesizer{
+	
+	private JackClient jackClient;
+	private JackGmPort jackGmPort;
+	private List jackChannelProxies;
+	
+	public JackSynthesizer(JackClient jackClient){
+		this.jackClient = jackClient;
+		this.jackChannelProxies = new ArrayList();
+	}
+	
+	public MidiChannel openChannel(int channelId) throws MidiPlayerException{
+		return this.openChannel(channelId, false);
+	}
+	
+	public MidiChannel openChannel(int channelId, boolean exclusive) throws MidiPlayerException{
+		JackChannelProxy jackChannelProxy = findChannel(channelId);
+		if( jackChannelProxy != null ){
+			if( jackChannelProxy.isExclusive() == exclusive ){
+				return jackChannelProxy;
+			}
+			
+			JackPort jackPort = jackChannelProxy.getJackPort();
+			if( jackPort != null ){
+				jackChannelProxy.setJackPort(null);
+				this.closeUnusedPort(jackPort);
+			}
+		}
+		
+		if( jackChannelProxy == null ){
+			jackChannelProxy = new JackChannelProxy(channelId, this);
+		}
+		jackChannelProxy.setMidiChannel(null);
+		jackChannelProxy.setJackPort(null);
+		jackChannelProxy.setExclusive(exclusive);
+		
+		boolean channelLoaded = ( exclusive ? this.loadExclusiveChannel(jackChannelProxy) : this.loadGmChannel(jackChannelProxy) );
+		
+		if( channelLoaded ){
+			if(!this.jackChannelProxies.contains(jackChannelProxy)){
+				this.jackChannelProxies.add( jackChannelProxy );
+			}
+			return jackChannelProxy;
+		}
+		return null;
+	}
+	
+	public boolean loadGmChannel(JackChannelProxy jackChannelProxy) throws MidiPlayerException{
+		if( this.jackGmPort != null && !this.jackClient.isPortOpen(this.jackGmPort.getJackPort()) ) {
+			this.jackGmPort = null;
+		}
+		if( this.jackGmPort == null ) {
+			JackPort jackPort = this.jackClient.openPort(createJackPortName(jackChannelProxy));
+			if( jackPort != null ){
+				this.jackGmPort = new JackGmPort(this.jackClient, jackPort);
+			}
+		}
+		
+		if( this.jackGmPort != null ){
+			jackChannelProxy.setExclusive(false);
+			jackChannelProxy.setMidiChannel(this.jackGmPort.getSynthesizer().openChannel(jackChannelProxy.getJackChannelId()));
+			jackChannelProxy.setJackPort(this.jackGmPort.getJackPort());
+			
+			return true;
+		}
+		return false;
+	}
+	
+	public boolean loadExclusiveChannel(JackChannelProxy jackChannelProxy) throws MidiPlayerException{
+		JackPort jackPort = this.jackClient.openPort(createJackPortName(jackChannelProxy));
+		if( jackPort != null ){
+			jackChannelProxy.setExclusive(true);
+			jackChannelProxy.setMidiChannel(new JackChannel(this.jackClient, jackPort));
+			jackChannelProxy.setJackPort(jackPort);
+			
+			return true;
+		}
+		return false;
+	}
+	
+	public void closeChannel(MidiChannel midiChannel){
+		JackChannelProxy jackChannelProxy = findChannel(((JackChannelProxy)midiChannel).getJackChannelId());
+		if( jackChannelProxy != null ){
+			this.jackChannelProxies.remove(jackChannelProxy);
+			if( jackChannelProxy.getJackPort() != null ){
+				this.closeUnusedPort( jackChannelProxy.getJackPort() );
+			}
+		}
+	}
+	
+	public void closeAllChannels(){
+		List jackChannelProxies = new ArrayList(this.jackChannelProxies);
+		Iterator it = jackChannelProxies.iterator();
+		while( it.hasNext() ){
+			this.closeChannel((JackChannelProxy) it.next());
+		}
+	}
+	
+	public boolean isChannelOpen(MidiChannel midiChannel) {
+		JackChannelProxy jackChannelProxy = findChannel(((JackChannelProxy)midiChannel).getJackChannelId());
+		if( jackChannelProxy != null && jackChannelProxy.getJackPort() != null && jackChannelProxy == midiChannel ){
+			if( this.jackClient.isPortOpen( jackChannelProxy.getJackPort() ) ){
+				return jackChannelProxy.getJackPort().getJackPortName().equals(createJackPortName(jackChannelProxy));
+			}
+		}
+		return false;
+	}
+	
+	public JackChannelProxy findChannel(int channelId){
+		Iterator it = this.jackChannelProxies.iterator();
+		while( it.hasNext() ){
+			JackChannelProxy jackChannelProxy = (JackChannelProxy) it.next();
+			if( jackChannelProxy.getJackChannelId() == channelId ){
+				return jackChannelProxy;
+			}
+		}
+		return null;
+	}
+	
+	public void closeUnusedPort(JackPort jackPort) {
+		if(!isJackPortInUse( jackPort )){
+			this.jackClient.closePort( jackPort );
+		}
+	}
+	
+	public boolean isJackPortInUse(JackPort jackPort){
+		Iterator it = this.jackChannelProxies.iterator();
+		while( it.hasNext() ){
+			JackChannelProxy jackChannelProxy = (JackChannelProxy) it.next();
+			if( jackChannelProxy.getJackPort() != null && jackChannelProxy.getJackPort().equals(jackPort) ){
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public String createJackPortName(JackChannelProxy jackChannelProxy){
+		if(!jackChannelProxy.isExclusive() ){
+			return ("GM Port");
+		}
+		TGChannel tgChannel = MidiPlayer.getInstance().getSongManager().getChannel(jackChannelProxy.getJackChannelId());
+		if( tgChannel != null ){
+			return tgChannel.getName();
+		}
+		return ("Channel-" + jackChannelProxy.getJackChannelId());
+	}
+}
diff --git a/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackSynthesizerPort.java b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackSynthesizerPort.java
new file mode 100644
index 0000000..074b9cf
--- /dev/null
+++ b/TuxGuitar-jack/src/org/herac/tuxguitar/jack/synthesizer/JackSynthesizerPort.java
@@ -0,0 +1,48 @@
+package org.herac.tuxguitar.jack.synthesizer;
+
+import org.herac.tuxguitar.jack.JackClient;
+import org.herac.tuxguitar.player.base.MidiOutputPort;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.base.MidiSynthesizer;
+
+public class JackSynthesizerPort implements MidiOutputPort{
+	
+	private JackClient jackClient;
+	private JackSynthesizer jackSynthesizer;
+	
+	public JackSynthesizerPort(JackClient jackClient){
+		this.jackClient = jackClient;
+		this.jackSynthesizer = new JackSynthesizer(this.jackClient);
+	}
+	
+	public MidiSynthesizer getSynthesizer() throws MidiPlayerException{
+		return this.jackSynthesizer;
+	}
+	
+	public void open(){
+		if(!this.jackClient.isOpen()){
+			this.jackClient.open();
+		}
+	}
+	
+	public void close(){
+		this.jackSynthesizer.closeAllChannels();
+	}
+	
+	public void check() throws MidiPlayerException {
+		if(!this.jackClient.isOpen() ){
+			this.open();
+			if(!this.jackClient.isOpen() ){
+				throw new MidiPlayerException("Jack server not running?");
+			}
+		}
+	}
+	
+	public String getKey(){
+		return ("tuxguitar-jack");
+	}
+	
+	public String getName(){
+		return ("Jack Midi Port");
+	}
+}
diff --git a/TuxGuitar-jsa/build.properties b/TuxGuitar-jsa/build.properties
index dba8bef..94080dc 100644
--- a/TuxGuitar-jsa/build.properties
+++ b/TuxGuitar-jsa/build.properties
@@ -4,5 +4,7 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
 path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-jsa/build.xml b/TuxGuitar-jsa/build.xml
index 260dcce..7d99602 100644
--- a/TuxGuitar-jsa/build.xml
+++ b/TuxGuitar-jsa/build.xml
@@ -11,10 +11,9 @@
 	<property name="build.path" value="build${file.separator}" />
 	<property name="build.jar" value="tuxguitar-jsa.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.player.impl.jsa.MidiPluginList" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -33,14 +32,10 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}${file.separator}lang" />
-		<copy todir="${build.path}${file.separator}lang">
-			<fileset dir="${build.share.path}${file.separator}lang"/>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
 		</copy>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
-		
 		<echo>+------------------------------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   T U X G U I T A R  -  J S A           |</echo>
 		<echo>+------------------------------------------------------------------+</echo>
diff --git a/TuxGuitar-jsa/pom.xml b/TuxGuitar-jsa/pom.xml
new file mode 100644
index 0000000..64bcfd2
--- /dev/null
+++ b/TuxGuitar-jsa/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-jsa</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-jsa/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-jsa/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..b3e086e
--- /dev/null
+++ b/TuxGuitar-jsa/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,3 @@
+org.herac.tuxguitar.player.impl.jsa.midiport.MidiOutputPortProviderPlugin
+org.herac.tuxguitar.player.impl.jsa.sequencer.MidiSequencerProviderPlugin
+org.herac.tuxguitar.player.impl.jsa.settings.MidiSettingsPlugin
diff --git a/TuxGuitar-jsa/share/META-INF/tuxguitar-jsa.info b/TuxGuitar-jsa/share/META-INF/tuxguitar-jsa.info
new file mode 100644
index 0000000..827a9dc
--- /dev/null
+++ b/TuxGuitar-jsa/share/META-INF/tuxguitar-jsa.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Java Sound Api plugin
+plugin.description=Java Sound Api plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/MidiPlugin.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/MidiPlugin.java
new file mode 100644
index 0000000..5d4efbe
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/MidiPlugin.java
@@ -0,0 +1,6 @@
+package org.herac.tuxguitar.player.impl.jsa;
+
+public class MidiPlugin {
+
+	public static final String MODULE_ID = "tuxguitar-jsa";
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/MidiPluginList.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/MidiPluginList.java
deleted file mode 100644
index 094f354..0000000
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/MidiPluginList.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.herac.tuxguitar.player.impl.jsa;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup;
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin;
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiSequencerProviderPlugin;
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList;
-import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
-import org.herac.tuxguitar.player.base.MidiSequencerProvider;
-import org.herac.tuxguitar.player.impl.jsa.midiport.MidiPortProviderImpl;
-import org.herac.tuxguitar.player.impl.jsa.sequencer.MidiSequencerProviderImpl;
-import org.herac.tuxguitar.player.impl.jsa.utils.MidiConfigUtils;
-
-public class MidiPluginList extends TGPluginList implements TGPluginSetup{
-	
-	protected List getPlugins() {
-		List plugins = new ArrayList();
-		plugins.add(new TGMidiOutputPortProviderPlugin() {
-			protected MidiOutputPortProvider getProvider() {
-				return new MidiPortProviderImpl();
-			}
-		});
-		plugins.add(new TGMidiSequencerProviderPlugin() {
-			protected MidiSequencerProvider getProvider() {
-				return new MidiSequencerProviderImpl();
-			}
-		});
-		return plugins;
-	}
-	
-	public void setupDialog(Shell parent) {
-		MidiConfigUtils.setupDialog(parent);
-	}
-	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "Java Sound Api plugin";
-	}
-	
-	public String getName() {
-		return "Java Sound Api plugin";
-	}
-	
-	public String getVersion() {
-		return "1.0";
-	}
-}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBAssistant.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBAssistant.java
index b59f504..b681035 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBAssistant.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBAssistant.java
@@ -12,10 +12,11 @@ import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-import org.herac.tuxguitar.gui.util.DialogUtils;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+import org.herac.tuxguitar.app.util.DialogUtils;
 import org.herac.tuxguitar.player.impl.jsa.midiport.MidiPortSynthesizer;
+import org.herac.tuxguitar.util.TGException;
 import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class SBAssistant {
@@ -34,10 +35,10 @@ public class SBAssistant {
 	
 	public void process(){
 		new Thread(new Runnable() {
-			public void run() {
+			public void run() throws TGException {
 				try {
-					TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-						public void run() {
+					TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+						public void run() throws TGException {
 							ConfirmDialog dialog = new ConfirmDialog(TuxGuitar.getProperty("jsa.soundbank-assistant.confirm-message"));
 							dialog.setDefaultStatus( ConfirmDialog.STATUS_NO );
 							if (dialog.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO , ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_YES){
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstaller.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstaller.java
index 0b7c441..7b6b8af 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstaller.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstaller.java
@@ -9,11 +9,11 @@ import java.net.URL;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipInputStream;
 
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
+import org.herac.tuxguitar.app.TuxGuitar;
 import org.herac.tuxguitar.player.base.MidiPlayerException;
 import org.herac.tuxguitar.player.impl.jsa.midiport.MidiPortSynthesizer;
 import org.herac.tuxguitar.player.impl.jsa.utils.MidiConfigUtils;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
 
 public class SBInstaller {
 
@@ -122,7 +122,7 @@ public class SBInstaller {
 			}
 			
 			TGConfigManager config = MidiConfigUtils.getConfig();
-			config.setProperty(MidiConfigUtils.SOUNDBANK_KEY,file.getAbsolutePath());
+			config.setValue(MidiConfigUtils.SOUNDBANK_KEY,file.getAbsolutePath());
 			config.save();
 		} catch (Throwable throwable) {
 			throwable.printStackTrace();
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstallerGui.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstallerGui.java
index a482617..85f420a 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstallerGui.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBInstallerGui.java
@@ -17,11 +17,12 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.ProgressBar;
 import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.app.util.TGFileUtils;
 import org.herac.tuxguitar.player.impl.jsa.midiport.MidiPortSynthesizer;
+import org.herac.tuxguitar.util.TGException;
 import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class SBInstallerGui implements SBInstallerlistener{
@@ -117,7 +118,7 @@ public class SBInstallerGui implements SBInstallerlistener{
 
 	private void process(){
 		new Thread(new Runnable() {
-			public void run() {				
+			public void run() throws TGException {				
 				if(!isDisposed()){
 					getInstaller().process();
 				}
@@ -128,8 +129,8 @@ public class SBInstallerGui implements SBInstallerlistener{
 	public void notifyProcess(final String process){
 		if(!isDisposed()){
 			try {
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-					public void run() {
+				TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
 						if(!isDisposed()){
 							getProgressLabel().setText(process);
 						}
@@ -144,8 +145,8 @@ public class SBInstallerGui implements SBInstallerlistener{
 	public void notifyFinish(){
 		if(!isDisposed()){
 			try {
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-					public void run() {
+				TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
 						if(!isDisposed()){
 							getDialog().dispose();
 						}
@@ -160,8 +161,8 @@ public class SBInstallerGui implements SBInstallerlistener{
 	public void notifyFailed(final Throwable throwable){
 		if(!isDisposed()){
 			try {
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-					public void run() {
+				TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
 						if(!isDisposed()){
 							getDialog().dispose();
 							MessageDialog.errorMessage( throwable );
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiControlChangeMessage.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiControlChangeMessage.java
new file mode 100644
index 0000000..11deb95
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiControlChangeMessage.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiControlChangeMessage extends MidiShortMessage{
+	
+	public MidiControlChangeMessage(int channel,int controller,int value) throws InvalidMidiDataException{
+		this.setChannel(channel);
+		this.setMessage(ShortMessage.CONTROL_CHANGE, controller, value);
+		this.setVoice(MidiShortMessage.DEFAULT_VOICE);
+		this.setBendMode(MidiShortMessage.DEFAULT_BEND_MODE);
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiMessageFactory.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiMessageFactory.java
new file mode 100644
index 0000000..83108bd
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiMessageFactory.java
@@ -0,0 +1,155 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.MidiMessage;
+import javax.sound.midi.ShortMessage;
+
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+
+public class MidiMessageFactory {
+	
+	private static int fixValue(int value){
+		int fixedValue = value;
+		fixedValue = Math.min(fixedValue,127);
+		fixedValue = Math.max(fixedValue,0);
+		return fixedValue;
+	}
+	
+	public static MidiMessage noteOn(int channel,int note,int velocity, int voice, boolean bendMode){
+		try {
+			return new MidiNoteOnMessage(channel, fixValue(note), fixValue(velocity), voice, bendMode);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public static MidiMessage noteOff(int channel,int note,int velocity, int voice, boolean bendMode){
+		try {
+			return new MidiNoteOffMessage(channel, fixValue(note), fixValue(velocity), voice, bendMode);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage pitchBend(int channel,int value, int voice, boolean bendMode){
+		try {
+			return new MidiPitchBendMessage(channel, fixValue(value), voice, bendMode);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public static MidiMessage controlChange(int channel,int controller,int value){
+		try {
+			return new MidiControlChangeMessage(channel, fixValue(controller), fixValue(value));
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public static MidiMessage programChange(int channel,int instrument){
+		try {
+			return new MidiProgramChangeMessage(channel, fixValue(instrument));
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage systemReset(){
+		try {
+			return new MidiSystemResetMessage();
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage tempoInUSQ(int usq){
+		try {
+			return new MidiTempoInUsqMessage(usq);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage timeSignature(TGTimeSignature tgTimeSignature){
+		try {
+			return new MidiTimeSignatureMessage(tgTimeSignature);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	public static MidiMessage noteOnGM(int channel,int note,int velocity){
+		try {
+			ShortMessage shortMessage = new ShortMessage();
+			shortMessage.setMessage(ShortMessage.NOTE_ON, channel, fixValue(note), fixValue(velocity));
+			return shortMessage;
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage noteOffGM(int channel,int note,int velocity){
+		try {
+			ShortMessage shortMessage = new ShortMessage();
+			shortMessage.setMessage(ShortMessage.NOTE_OFF, channel, fixValue(note), fixValue(velocity));
+			return shortMessage;
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage pitchBendGM(int channel,int value){
+		try {
+			ShortMessage shortMessage = new ShortMessage();
+			shortMessage.setMessage(ShortMessage.PITCH_BEND, channel, 0, fixValue(value));
+			return shortMessage;
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage controlChangeGM(int channel,int controller,int value){
+		try {
+			ShortMessage shortMessage = new ShortMessage();
+			shortMessage.setMessage(ShortMessage.CONTROL_CHANGE,channel, fixValue(controller), fixValue(value));
+			return shortMessage;
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage programChangeGM(int channel,int instrument){
+		try {
+			ShortMessage shortMessage = new ShortMessage();
+			shortMessage.setMessage(ShortMessage.PROGRAM_CHANGE, channel, fixValue(instrument), 0);
+			return shortMessage;
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage systemResetGM(){
+		try {
+			ShortMessage shortMessage = new ShortMessage();
+			shortMessage.setMessage(ShortMessage.SYSTEM_RESET);
+			return shortMessage;
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOffMessage.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOffMessage.java
new file mode 100644
index 0000000..3aee556
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOffMessage.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiNoteOffMessage extends MidiShortMessage{
+	
+	public MidiNoteOffMessage(int channel,int note,int velocity, int voice, boolean bendMode) throws InvalidMidiDataException{
+		this.setChannel(channel);
+		this.setMessage(ShortMessage.NOTE_OFF, note, velocity);
+		this.setVoice(voice);
+		this.setBendMode(bendMode);
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOnMessage.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOnMessage.java
new file mode 100644
index 0000000..abc0019
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOnMessage.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiNoteOnMessage extends MidiShortMessage{
+	
+	public MidiNoteOnMessage(int channel,int note,int velocity, int voice, boolean bendMode) throws InvalidMidiDataException{
+		this.setChannel(channel);
+		this.setMessage(ShortMessage.NOTE_ON, note, velocity);
+		this.setVoice(voice);
+		this.setBendMode(bendMode);
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiPitchBendMessage.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiPitchBendMessage.java
new file mode 100644
index 0000000..2aff589
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiPitchBendMessage.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiPitchBendMessage extends MidiShortMessage{
+	
+	public MidiPitchBendMessage(int channel,int value, int voice, boolean bendMode) throws InvalidMidiDataException{
+		this.setChannel(channel);
+		this.setMessage(ShortMessage.PITCH_BEND, 0, value);
+		this.setVoice(voice);
+		this.setBendMode(bendMode);
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiProgramChangeMessage.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiProgramChangeMessage.java
new file mode 100644
index 0000000..2667868
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiProgramChangeMessage.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiProgramChangeMessage extends MidiShortMessage{
+	
+	public MidiProgramChangeMessage(int channel,int instrument) throws InvalidMidiDataException{
+		this.setChannel(channel);
+		this.setMessage(ShortMessage.PROGRAM_CHANGE, instrument, 0);
+		this.setVoice(MidiShortMessage.DEFAULT_VOICE);
+		this.setBendMode(MidiShortMessage.DEFAULT_BEND_MODE);
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiShortMessage.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiShortMessage.java
new file mode 100644
index 0000000..948c0b2
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiShortMessage.java
@@ -0,0 +1,41 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.ShortMessage;
+
+public class MidiShortMessage extends ShortMessage{
+	
+	public static final int DEFAULT_VOICE = -1;
+	public static final boolean DEFAULT_BEND_MODE = false;
+	
+	private int channel;
+	private int voice;
+	private boolean bendMode;
+	
+	public MidiShortMessage(){
+		super();
+	}
+	
+	public int getChannel() {
+		return channel;
+	}
+
+	public void setChannel(int channel) {
+		this.channel = channel;
+	}
+
+	public int getVoice() {
+		return this.voice;
+	}
+
+	public void setVoice(int voice) {
+		this.voice = voice;
+	}
+
+	public boolean isBendMode() {
+		return this.bendMode;
+	}
+
+	public void setBendMode(boolean bendMode) {
+		this.bendMode = bendMode;
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiSystemResetMessage.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiSystemResetMessage.java
new file mode 100644
index 0000000..a9b92c0
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiSystemResetMessage.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiSystemResetMessage extends MidiShortMessage{
+	
+	public MidiSystemResetMessage() throws InvalidMidiDataException{
+		this.setChannel(0);
+		this.setMessage(ShortMessage.SYSTEM_RESET);
+		this.setVoice(MidiShortMessage.DEFAULT_VOICE);
+		this.setBendMode(MidiShortMessage.DEFAULT_BEND_MODE);
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTempoInUsqMessage.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTempoInUsqMessage.java
new file mode 100644
index 0000000..626dab9
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTempoInUsqMessage.java
@@ -0,0 +1,11 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.MetaMessage;
+
+public class MidiTempoInUsqMessage extends MetaMessage{
+	
+	public MidiTempoInUsqMessage(int usq) throws InvalidMidiDataException{
+		this.setMessage(0x51, new byte[]{ (byte)((usq >> 16) & 0x00FF),(byte)((usq >> 8) & 0x00FF),(byte)((usq) & 0x00FF) }, 3);
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTimeSignatureMessage.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTimeSignatureMessage.java
new file mode 100644
index 0000000..3818748
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTimeSignatureMessage.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.MetaMessage;
+
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+
+public class MidiTimeSignatureMessage extends MetaMessage{
+	
+	public MidiTimeSignatureMessage(TGTimeSignature ts) throws InvalidMidiDataException{
+		this.setMessage(0x58, new byte[]{  (byte)ts.getNumerator(),(byte)ts.getDenominator().getIndex(),(byte)(96 / ts.getDenominator().getValue()),8 }, 4);
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiOutputPortProviderPlugin.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiOutputPortProviderPlugin.java
new file mode 100644
index 0000000..9096808
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiOutputPortProviderPlugin.java
@@ -0,0 +1,16 @@
+package org.herac.tuxguitar.player.impl.jsa.midiport;
+
+import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.impl.jsa.MidiPlugin;
+import org.herac.tuxguitar.player.plugin.TGMidiOutputPortProviderPlugin;
+
+public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin{
+	
+	protected MidiOutputPortProvider getProvider() {
+		return new MidiPortProviderImpl();
+	}
+	
+	public String getModuleId() {
+		return MidiPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortOut.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortOut.java
index 583dc68..d22c24c 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortOut.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortOut.java
@@ -1,16 +1,18 @@
 package org.herac.tuxguitar.player.impl.jsa.midiport;
 
 import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiUnavailableException;
 import javax.sound.midi.Receiver;
 
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
 import org.herac.tuxguitar.player.base.MidiControllers;
-import org.herac.tuxguitar.player.base.MidiOutputPort;
 import org.herac.tuxguitar.player.base.MidiPlayerException;
-import org.herac.tuxguitar.player.base.MidiReceiver;
-import org.herac.tuxguitar.player.impl.jsa.utils.MidiMessageUtils;
+import org.herac.tuxguitar.player.impl.jsa.message.MidiMessageFactory;
+import org.herac.tuxguitar.util.TGException;
 import org.herac.tuxguitar.util.TGSynchronizer;
 
-public class MidiPortOut implements MidiOutputPort {
+public class MidiPortOut extends GMOutputPort {
 	
 	private String key;
 	private String name;
@@ -22,7 +24,7 @@ public class MidiPortOut implements MidiOutputPort {
 		this.receiver = new MidiReceiverImpl(device);
 	}
 	
-	public MidiReceiver getReceiver(){
+	public GMReceiver getReceiver(){
 		return this.receiver;
 	}
 	
@@ -59,7 +61,7 @@ public class MidiPortOut implements MidiOutputPort {
 	}
 }
 
-class MidiReceiverImpl implements MidiReceiver{
+class MidiReceiverImpl implements GMReceiver{
 	
 	private MidiDevice device;
 	private Receiver receiver;
@@ -71,17 +73,25 @@ class MidiReceiverImpl implements MidiReceiver{
 	protected synchronized void open() throws Throwable{
 		if(!this.device.isOpen()){
 			final MidiDevice device = this.device;
-			TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
-					device.open();
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					try{
+						device.open();
+					} catch(MidiUnavailableException e){
+						throw new TGException(e);
+					}
 				}
 			});
 		}
 		if(this.receiver == null){
 			final MidiDevice device = this.device;
-			TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
-					setReceiver(device.getReceiver());
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					try{
+						setReceiver(device.getReceiver());
+					} catch(MidiUnavailableException e){
+						throw new TGException(e);
+					}
 				}
 			});
 		}
@@ -90,8 +100,8 @@ class MidiReceiverImpl implements MidiReceiver{
 	protected synchronized void close() throws Throwable{
 		if(this.receiver != null){
 			final Receiver receiver = this.receiver;
-			TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
 					receiver.close();
 					setReceiver(null);
 				}
@@ -99,8 +109,8 @@ class MidiReceiverImpl implements MidiReceiver{
 		}
 		if(this.device.isOpen()){
 			final MidiDevice device = this.device;
-			TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
 					device.close();
 				}
 			});
@@ -114,48 +124,48 @@ class MidiReceiverImpl implements MidiReceiver{
 	protected Receiver getReceiver(){
 		return this.receiver;
 	}
-	
-	public void sendSystemReset(){
+
+	public void sendNoteOn(int channel, int key, int velocity) {
 		if(getReceiver() != null){
-			getReceiver().send(MidiMessageUtils.systemReset(),-1);
+			getReceiver().send(MidiMessageFactory.noteOnGM(channel, key, velocity),-1);
 		}
 	}
 	
-	public void sendAllNotesOff(){
+	public void sendNoteOff(int channel, int key, int velocity) {
 		if(getReceiver() != null){
-			for(int channel = 0; channel < 16; channel ++){
-				getReceiver().send(MidiMessageUtils.controlChange(channel, MidiControllers.ALL_NOTES_OFF,0),-1);
-			}
+			getReceiver().send(MidiMessageFactory.noteOffGM(channel, key, velocity),-1);
 		}
 	}
 	
-	public void sendNoteOn(int channel, int key, int velocity) {
+	public void sendControlChange(int channel, int controller, int value) {
 		if(getReceiver() != null){
-			getReceiver().send(MidiMessageUtils.noteOn(channel, key, velocity),-1);
+			getReceiver().send(MidiMessageFactory.controlChangeGM(channel,controller, value),-1);
 		}
 	}
 	
-	public void sendNoteOff(int channel, int key, int velocity) {
+	public void sendProgramChange(int channel, int value) {
 		if(getReceiver() != null){
-			getReceiver().send(MidiMessageUtils.noteOff(channel, key, velocity),-1);
+			getReceiver().send(MidiMessageFactory.programChangeGM(channel, value),-1);
 		}
 	}
 	
-	public void sendControlChange(int channel, int controller, int value) {
+	public void sendPitchBend(int channel, int value) {
 		if(getReceiver() != null){
-			getReceiver().send(MidiMessageUtils.controlChange(channel,controller, value),-1);
+			getReceiver().send(MidiMessageFactory.pitchBendGM(channel, value),-1);
 		}
 	}
 	
-	public void sendProgramChange(int channel, int value) {
+	public void sendSystemReset(){
 		if(getReceiver() != null){
-			getReceiver().send(MidiMessageUtils.programChange(channel, value),-1);
+			getReceiver().send(MidiMessageFactory.systemResetGM(),-1);
 		}
 	}
 	
-	public void sendPitchBend(int channel, int value) {
+	public void sendAllNotesOff(){
 		if(getReceiver() != null){
-			getReceiver().send(MidiMessageUtils.pitchBend(channel, value),-1);
+			for(int channel = 0; channel < 16; channel ++){
+				sendControlChange(channel, MidiControllers.ALL_NOTES_OFF,0);
+			}
 		}
 	}
 }
\ No newline at end of file
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortProviderImpl.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortProviderImpl.java
index c499add..af28b1a 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortProviderImpl.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortProviderImpl.java
@@ -10,10 +10,10 @@ import javax.sound.midi.MidiUnavailableException;
 import javax.sound.midi.Sequencer;
 import javax.sound.midi.Synthesizer;
 
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.app.TuxGuitar;
 import org.herac.tuxguitar.player.base.MidiOutputPort;
 import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
 
 public class MidiPortProviderImpl implements MidiOutputPortProvider{
 	
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortSynthesizer.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortSynthesizer.java
index 9e36251..774f0de 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortSynthesizer.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortSynthesizer.java
@@ -8,27 +8,27 @@ import javax.sound.midi.MidiSystem;
 import javax.sound.midi.Soundbank;
 import javax.sound.midi.Synthesizer;
 
-import org.herac.tuxguitar.gui.TuxGuitar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
 import org.herac.tuxguitar.player.base.MidiControllers;
-import org.herac.tuxguitar.player.base.MidiOutputPort;
 import org.herac.tuxguitar.player.base.MidiPlayerException;
-import org.herac.tuxguitar.player.base.MidiReceiver;
 import org.herac.tuxguitar.player.impl.jsa.assistant.SBAssistant;
 import org.herac.tuxguitar.player.impl.jsa.utils.MidiConfigUtils;
 
-public class MidiPortSynthesizer implements MidiOutputPort{
+public class MidiPortSynthesizer extends GMOutputPort{
 	
 	private String key;
 	private String name;
-	private Synthesizer synthesizer;
-	private MidiReceiver receiver;
+	private Synthesizer synth;
+	private GMReceiver receiver;
 	private boolean synthesizerLoaded;
 	private boolean soundbankLoaded;
 	
 	public MidiPortSynthesizer(Synthesizer synthesizer){
 		this.key = synthesizer.getDeviceInfo().getName();
 		this.name = synthesizer.getDeviceInfo().getName();
-		this.synthesizer = synthesizer;
+		this.synth = synthesizer;
 		this.receiver = new MidiPortSynthesizerReceiver(this);
 	}
 	
@@ -41,17 +41,17 @@ public class MidiPortSynthesizer implements MidiOutputPort{
 	}
 	
 	public void open(){
-		getSynthesizer();
+		getSynth();
 	}
 	
 	public void close(){
-		if(this.synthesizer != null && this.synthesizer.isOpen()){
+		if(this.synth != null && this.synth.isOpen()){
 			this.unloadSoundbank();
-			this.synthesizer.close();
+			this.synth.close();
 		}
 	}
 	
-	public MidiReceiver getReceiver(){
+	public GMReceiver getReceiver(){
 		return this.receiver;
 	}
 	
@@ -64,10 +64,10 @@ public class MidiPortSynthesizer implements MidiOutputPort{
 		}
 	}
 	
-	public Synthesizer getSynthesizer() {
+	public Synthesizer getSynth() {
 		try {
-			if(!this.synthesizer.isOpen()){
-				this.synthesizer.open();
+			if(!this.synth.isOpen()){
+				this.synth.open();
 				if(!isSoundbankLoaded( false )){
 					String path = MidiConfigUtils.getSoundbankPath();
 					if(path != null){
@@ -75,7 +75,7 @@ public class MidiPortSynthesizer implements MidiOutputPort{
 					}
 					
 					if(!isSoundbankLoaded( true )){
-						this.loadSoundbank( this.synthesizer.getDefaultSoundbank() );
+						this.loadSoundbank( this.synth.getDefaultSoundbank() );
 					}
 					
 					if(!isSoundbankLoaded( true )){
@@ -83,11 +83,11 @@ public class MidiPortSynthesizer implements MidiOutputPort{
 					}
 				}
 			}
-			this.synthesizerLoaded = this.synthesizer.isOpen();
+			this.synthesizerLoaded = this.synth.isOpen();
 		} catch (Throwable throwable) {
 			throwable.printStackTrace();
 		}
-		return this.synthesizer;
+		return this.synth;
 	}
 	
 	public boolean loadSoundbank(File file){
@@ -101,12 +101,12 @@ public class MidiPortSynthesizer implements MidiOutputPort{
 	
 	public boolean loadSoundbank(Soundbank sb) {
 		try {
-			if (sb != null && getSynthesizer().isSoundbankSupported(sb)){
+			if (sb != null && getSynth().isSoundbankSupported(sb)){
 				//unload the old soundbank
 				this.unloadSoundbank();
 				
 				//load all soundbank instruments
-				this.soundbankLoaded = getSynthesizer().loadAllInstruments(sb);
+				this.soundbankLoaded = getSynth().loadAllInstruments(sb);
 			}
 		}catch (Throwable throwable) {
 			throwable.printStackTrace();
@@ -119,18 +119,18 @@ public class MidiPortSynthesizer implements MidiOutputPort{
 			this.soundbankLoaded = false;
 			
 			//unload all available instruments
-			Instrument[] available = this.synthesizer.getAvailableInstruments();
+			Instrument[] available = this.synth.getAvailableInstruments();
 			if(available != null){
 				for(int i = 0; i < available.length; i++){
-					getSynthesizer().unloadInstrument(available[i]);
+					getSynth().unloadInstrument(available[i]);
 				}
 			}
 			
 			//unload all loaded instruments
-			Instrument[] loaded = this.synthesizer.getLoadedInstruments();
+			Instrument[] loaded = this.synth.getLoadedInstruments();
 			if(loaded != null){
 				for(int i = 0; i < loaded.length; i++){
-					getSynthesizer().unloadInstrument(loaded[i]);
+					getSynth().unloadInstrument(loaded[i]);
 				}
 			}
 		}catch (Throwable throwable) {
@@ -144,15 +144,15 @@ public class MidiPortSynthesizer implements MidiOutputPort{
 	
 	public boolean isSoundbankLoaded(boolean checkSynth){
 		if( checkSynth ){
-			Instrument[] loaded = this.synthesizer.getLoadedInstruments();
-			Instrument[] available = this.synthesizer.getAvailableInstruments();
+			Instrument[] loaded = this.synth.getLoadedInstruments();
+			Instrument[] available = this.synth.getAvailableInstruments();
 			this.soundbankLoaded = ( (loaded != null && loaded.length > 0) || (available != null && available.length > 0) );
 		}
 		return this.soundbankLoaded;
 	}
 }
 
-class MidiPortSynthesizerReceiver implements MidiReceiver{
+class MidiPortSynthesizerReceiver implements GMReceiver{
 	
 	private MidiPortSynthesizer port;
 	private MidiChannel[] channels;
@@ -162,8 +162,8 @@ class MidiPortSynthesizerReceiver implements MidiReceiver{
 	}
 	
 	private MidiChannel[] getChannels(){
-		if(this.channels == null && this.port.getSynthesizer() != null){
-			this.channels = this.port.getSynthesizer().getChannels();
+		if(this.channels == null && this.port.getSynth() != null){
+			this.channels = this.port.getSynth().getChannels();
 		}
 		return this.channels;
 	}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiReceiverImpl.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiReceiverImpl.java
index aa87fe2..6441dc2 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiReceiverImpl.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiReceiverImpl.java
@@ -5,6 +5,7 @@ import javax.sound.midi.Receiver;
 import javax.sound.midi.ShortMessage;
 
 import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.impl.jsa.message.MidiShortMessage;
 
 public class MidiReceiverImpl implements Receiver{
 	
@@ -17,7 +18,7 @@ public class MidiReceiverImpl implements Receiver{
 	public void send(MidiMessage message, long timeStamp) {
 		try {
 			if( this.sequencer.isRunning() ){
-				parseMessage(message.getMessage());
+				parseMessage(message);
 			}
 		} catch (MidiPlayerException e) {
 			e.printStackTrace();
@@ -28,66 +29,73 @@ public class MidiReceiverImpl implements Receiver{
 		//not implemented
 	}
 	
-	private void parseMessage(byte[] data) throws MidiPlayerException{
-		int length = data.length;
-		
-		//NOTE ON
-		if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.NOTE_ON){
-			parseNoteOn(data);
-		}
-		//NOTE OFF
-		else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.NOTE_OFF){
-			parseNoteOff(data);
-		}
-		//PROGRAM CHANGE
-		else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.PROGRAM_CHANGE){
-			parseProgramChange(data);
-		}
-		//CONTROL CHANGE
-		else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.CONTROL_CHANGE){
-			parseControlChange(data);
-		}
-		//PITCH BEND
-		else if((((length > 0)?(data[0] & 0xFF):0) & 0xF0) == ShortMessage.PITCH_BEND){
-			parsePitchBend(data);
+	private void parseMessage(MidiMessage message) throws MidiPlayerException{
+		byte[] data = message.getMessage();
+		if( data.length > 0 ){
+			//NOTE ON
+			if(((data[0] & 0xFF) & 0xF0) == ShortMessage.NOTE_ON){
+				parseNoteOn(data, findChannel(message), findVoice(message), findBendMode(message));
+			}
+			//NOTE OFF
+			else if(((data[0] & 0xFF) & 0xF0) == ShortMessage.NOTE_OFF){
+				parseNoteOff(data, findChannel(message), findVoice(message), findBendMode(message));
+			}
+			//PITCH BEND
+			else if(((data[0] & 0xFF) & 0xF0) == ShortMessage.PITCH_BEND){
+				parsePitchBend(data, findChannel(message), findVoice(message), findBendMode(message));
+			}
+			//PROGRAM CHANGE
+			else if(((data[0] & 0xFF) & 0xF0) == ShortMessage.PROGRAM_CHANGE){
+				parseProgramChange(data, findChannel(message));
+			}
+			//CONTROL CHANGE
+			else if(((data[0] & 0xFF) & 0xF0) == ShortMessage.CONTROL_CHANGE){
+				parseControlChange(data, findChannel(message));
+			}
 		}
 	}
 	
-	private void parseNoteOn(byte[] data) throws MidiPlayerException{
+	private void parseNoteOn(byte[] data, int channel, int voice, boolean bendMode) throws MidiPlayerException{
 		int length = data.length;
-		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0;
 		int value = (length > 1)?(data[1] & 0xFF):0;
 		int velocity = (length > 2)?(data[2] & 0xFF):0;
 		
-		if(velocity == 0){
-			parseNoteOff(data);
-		}else if(value > 0){
-			this.sequencer.getTransmitter().sendNoteOn(channel,value,velocity);
+		if( channel >= 0 ){
+			if( velocity == 0 ){
+				this.parseNoteOff(data, channel, voice, bendMode);
+			}else if(value > 0){
+				this.sequencer.getTransmitter().sendNoteOn(channel,value,velocity,voice,bendMode);
+			}
 		}
 	}
 	
-	private void parseNoteOff(byte[] data) throws MidiPlayerException{
+	private void parseNoteOff(byte[] data, int channel, int voice, boolean bendMode) throws MidiPlayerException{
 		int length = data.length;
-		
-		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0;
 		int value = (length > 1)?(data[1] & 0xFF):0;
 		int velocity = (length > 2)?(data[2] & 0xFF):0;
-		
-		this.sequencer.getTransmitter().sendNoteOff(channel,value,velocity);
+		if( channel >= 0 ){
+			this.sequencer.getTransmitter().sendNoteOff(channel,value,velocity,voice,bendMode);
+		}
 	}
 	
-	private void parseProgramChange(byte[] data) throws MidiPlayerException{
+	private void parsePitchBend(byte[] data, int channel, int voice, boolean bendMode) throws MidiPlayerException{
+		int length = data.length;
+		int value = (length > 2)?(data[2] & 0xFF):-1;
+		if(channel != -1 && value != -1){
+			this.sequencer.getTransmitter().sendPitchBend(channel,value,voice,bendMode);
+		}
+	}
+	
+	private void parseProgramChange(byte[] data, int channel) throws MidiPlayerException{
 		int length = data.length;
-		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1;
 		int instrument = (length > 1)?(data[1] & 0xFF):-1;
 		if(channel != -1 && instrument != -1){
 			this.sequencer.getTransmitter().sendProgramChange(channel,instrument);
 		}
 	}
 	
-	private void parseControlChange(byte[] data) throws MidiPlayerException{
+	private void parseControlChange(byte[] data, int channel) throws MidiPlayerException{
 		int length = data.length;
-		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1;
 		int control = (length > 1)?(data[1] & 0xFF):-1;
 		int value = (length > 2)?(data[2] & 0xFF):-1;
 		if(channel != -1 && control != -1 && value != -1){
@@ -95,12 +103,28 @@ public class MidiReceiverImpl implements Receiver{
 		}
 	}
 	
-	private void parsePitchBend(byte[] data) throws MidiPlayerException{
-		int length = data.length;
-		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1;
-		int value = (length > 2)?(data[2] & 0xFF):-1;
-		if(channel != -1 && value != -1){
-			this.sequencer.getTransmitter().sendPitchBend(channel,value);
+	private int findChannel(MidiMessage midiMessage){
+		if( midiMessage instanceof MidiShortMessage ){
+			return ((MidiShortMessage)midiMessage).getChannel();
+		}
+		byte[] data = midiMessage.getMessage();
+		if( data != null && data.length > 0){
+			return ((data[0] & 0xFF) & 0x0F);
+		}
+		return -1;
+	}
+	
+	private int findVoice(MidiMessage midiMessage){
+		if( midiMessage instanceof MidiShortMessage ){
+			return ((MidiShortMessage)midiMessage).getVoice();
+		}
+		return MidiShortMessage.DEFAULT_VOICE;
+	}
+	
+	private boolean findBendMode(MidiMessage midiMessage){
+		if( midiMessage instanceof MidiShortMessage ){
+			return ((MidiShortMessage)midiMessage).isBendMode();
 		}
+		return MidiShortMessage.DEFAULT_BEND_MODE;
 	}
 }
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceHandlerImpl.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceHandlerImpl.java
index 65bdc72..72cde5b 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceHandlerImpl.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceHandlerImpl.java
@@ -6,7 +6,7 @@ import javax.sound.midi.Sequence;
 import javax.sound.midi.Track;
 
 import org.herac.tuxguitar.player.base.MidiSequenceHandler;
-import org.herac.tuxguitar.player.impl.jsa.utils.MidiMessageUtils;
+import org.herac.tuxguitar.player.impl.jsa.message.MidiMessageFactory;
 import org.herac.tuxguitar.song.models.TGDuration;
 import org.herac.tuxguitar.song.models.TGTimeSignature;
 
@@ -44,32 +44,32 @@ public class MidiSequenceHandlerImpl extends MidiSequenceHandler{
 		}
 	}
 	
-	public void addControlChange(long tick,int track,int channel, int controller, int value) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.controlChange(channel, controller, value), tick ));
+	public void addNoteOff(long tick,int track,int channel, int note, int velocity,int voice,boolean bendMode) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.noteOff(channel, note, velocity, voice, bendMode), tick ));
 	}
 	
-	public void addNoteOff(long tick,int track,int channel, int note, int velocity) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.noteOff(channel, note, velocity), tick ));
+	public void addNoteOn(long tick,int track,int channel, int note, int velocity,int voice,boolean bendMode) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.noteOn(channel, note, velocity, voice, bendMode), tick ));
 	}
 	
-	public void addNoteOn(long tick,int track,int channel, int note, int velocity) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.noteOn(channel, note, velocity), tick ));
+	public void addPitchBend(long tick,int track,int channel, int value,int voice,boolean bendMode) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.pitchBend(channel, value, voice, bendMode), tick ));
 	}
 	
-	public void addPitchBend(long tick,int track,int channel, int value) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.pitchBend(channel, value), tick ));
+	public void addControlChange(long tick,int track,int channel, int controller, int value) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.controlChange(channel, controller, value), tick ));
 	}
 	
 	public void addProgramChange(long tick,int track,int channel, int instrument) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.programChange(channel, instrument), tick ));
+		addEvent(track,new MidiEvent(MidiMessageFactory.programChange(channel, instrument), tick ));
 	}
 	
 	public void addTempoInUSQ(long tick,int track,int usq) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.tempoInUSQ(usq), tick ));
+		addEvent(track,new MidiEvent(MidiMessageFactory.tempoInUSQ(usq), tick ));
 	}
 	
 	public void addTimeSignature(long tick,int track,TGTimeSignature ts) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.timeSignature(ts), tick ));
+		addEvent(track,new MidiEvent(MidiMessageFactory.timeSignature(ts), tick ));
 	}
 	
 	public void notifyFinish(){
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerImpl.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerImpl.java
index 496a895..d2aeff5 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerImpl.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerImpl.java
@@ -5,7 +5,7 @@ import javax.sound.midi.Sequencer;
 import javax.sound.midi.Track;
 import javax.sound.midi.Transmitter;
 
-import org.herac.tuxguitar.gui.TuxGuitar;
+import org.herac.tuxguitar.app.TuxGuitar;
 import org.herac.tuxguitar.player.base.MidiPlayerException;
 import org.herac.tuxguitar.player.base.MidiSequenceHandler;
 import org.herac.tuxguitar.player.base.MidiSequencer;
@@ -113,7 +113,7 @@ public class MidiSequencerImpl implements MidiSequencer,MidiSequenceLoader{
 	public void setTickPosition(long tickPosition) {
 		try {
 			this.getSequencer().setTickPosition(tickPosition - TICK_MOVE);
-			this.reset( false );
+			this.reset();
 		} catch (Throwable throwable) {
 			throwable.printStackTrace();
 		}
@@ -175,7 +175,7 @@ public class MidiSequencerImpl implements MidiSequencer,MidiSequenceLoader{
 					this.getSequencer().start();
 				}else if( !running && this.isRunning() ){
 					this.getSequencer().stop();
-					this.reset( true );
+					this.reset();
 				}
 			}
 		} catch (Throwable throwable) {
@@ -183,15 +183,10 @@ public class MidiSequencerImpl implements MidiSequencer,MidiSequenceLoader{
 		}
 	}
 	
-	public void reset(boolean systemReset){
+	public void reset(){
 		try {
 			this.getTransmitter().sendAllNotesOff();
-			for(int channel = 0; channel < 16;channel ++){
-				this.getTransmitter().sendPitchBend(channel, 64);
-			}
-			if( systemReset ){
-				this.getTransmitter().sendSystemReset();
-			}
+			this.getTransmitter().sendPitchBendReset();
 		} catch (Throwable throwable) {
 			throwable.printStackTrace();
 		}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderImpl.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderImpl.java
index 2740ef4..1b42af1 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderImpl.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderImpl.java
@@ -9,7 +9,7 @@ import javax.sound.midi.MidiSystem;
 import javax.sound.midi.MidiUnavailableException;
 import javax.sound.midi.Sequencer;
 
-import org.herac.tuxguitar.gui.TuxGuitar;
+import org.herac.tuxguitar.app.TuxGuitar;
 import org.herac.tuxguitar.player.base.MidiPlayerException;
 import org.herac.tuxguitar.player.base.MidiSequencer;
 import org.herac.tuxguitar.player.base.MidiSequencerProvider;
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderPlugin.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderPlugin.java
new file mode 100644
index 0000000..f5f87f8
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderPlugin.java
@@ -0,0 +1,16 @@
+package org.herac.tuxguitar.player.impl.jsa.sequencer;
+
+import org.herac.tuxguitar.player.base.MidiSequencerProvider;
+import org.herac.tuxguitar.player.impl.jsa.MidiPlugin;
+import org.herac.tuxguitar.player.plugin.TGMidiSequencerProviderPlugin;
+
+public class MidiSequencerProviderPlugin extends TGMidiSequencerProviderPlugin{
+
+	protected MidiSequencerProvider getProvider() {
+		return new MidiSequencerProviderImpl();
+	}
+	
+	public String getModuleId() {
+		return MidiPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/settings/MidiSettingsHandler.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/settings/MidiSettingsHandler.java
new file mode 100644
index 0000000..4bdbba6
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/settings/MidiSettingsHandler.java
@@ -0,0 +1,16 @@
+package org.herac.tuxguitar.player.impl.jsa.settings;
+
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+import org.herac.tuxguitar.player.impl.jsa.utils.MidiConfigUtils;
+
+public class MidiSettingsHandler implements TGPluginSettingsHandler {
+	
+	public MidiSettingsHandler(){
+		super();
+	}
+	
+	public void openSettingsDialog(Shell parent) {
+		MidiConfigUtils.setupDialog(parent);
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/settings/MidiSettingsPlugin.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/settings/MidiSettingsPlugin.java
new file mode 100644
index 0000000..dca432f
--- /dev/null
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/settings/MidiSettingsPlugin.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.player.impl.jsa.settings;
+
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsAdapter;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+import org.herac.tuxguitar.player.impl.jsa.MidiPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class MidiSettingsPlugin extends TGPluginSettingsAdapter {
+
+	protected TGPluginSettingsHandler getHandler() throws TGPluginException {
+		return new MidiSettingsHandler();
+	}
+	
+	public String getModuleId() {
+		return MidiPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiConfigUtils.java b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiConfigUtils.java
index 16352a7..efb397e 100644
--- a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiConfigUtils.java
+++ b/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiConfigUtils.java
@@ -10,21 +10,18 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.FileChooser;
-import org.herac.tuxguitar.gui.util.MessageDialog;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.FileChooser;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
 
 public class MidiConfigUtils {
 	
 	public static final String SOUNDBANK_KEY = "soundbank.custom.path";
 	
 	public static TGConfigManager getConfig(){
-		TGConfigManager config = new TGPluginConfigManager("tuxguitar-jsa");
-		config.init();
-		return config;
+		return new TGConfigManager("tuxguitar-jsa");
 	}
 	
 	public static String getSoundbankPath(){
@@ -32,7 +29,7 @@ public class MidiConfigUtils {
 	}
 	
 	public static String getSoundbankPath(final TGConfigManager config){
-		return config.getStringConfigValue(SOUNDBANK_KEY);
+		return config.getStringValue(SOUNDBANK_KEY);
 	}
 	
 	public static void setupDialog(Shell parent) {
@@ -101,9 +98,9 @@ public class MidiConfigUtils {
 				changed = changed || (selection != null && !selection.equals(soundbank) ) ;
 				if(changed){
 					if(selection != null){
-						config.setProperty(SOUNDBANK_KEY,selection);
+						config.setValue(SOUNDBANK_KEY,selection);
 					}else{
-						config.removeProperty(SOUNDBANK_KEY);
+						config.remove(SOUNDBANK_KEY);
 					}
 					config.save();
 					
diff --git a/TuxGuitar-jws/.classpath b/TuxGuitar-jws/.classpath
new file mode 100644
index 0000000..ac37fb2
--- /dev/null
+++ b/TuxGuitar-jws/.classpath
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/TuxGuitar-jws/.project b/TuxGuitar-jws/.project
new file mode 100644
index 0000000..f1e6091
--- /dev/null
+++ b/TuxGuitar-jws/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>TuxGuitar-jws</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/TuxGuitar-jws/build.properties b/TuxGuitar-jws/build.properties
index be70b0e..c517bc9 100644
--- a/TuxGuitar-jws/build.properties
+++ b/TuxGuitar-jws/build.properties
@@ -5,6 +5,7 @@ tuxguitar.share.path=../TuxGuitar/share
 
 tuxguitar.path=\
 ../TuxGuitar/src${path.separator}\
+../TuxGuitar-lib/src${path.separator}\
 ../TuxGuitar-ascii/src${path.separator}\
 ../TuxGuitar-compat/src${path.separator}\
 ../TuxGuitar-converter/src${path.separator}\
@@ -34,7 +35,7 @@ tuxguitar.locale.path=\
 tuxguitar.plugin-classes=\
 org.herac.tuxguitar.io.ascii.ASCIIPluginExporter${line.separator}\
 org.herac.tuxguitar.io.tg.TGPluginListImpl${line.separator}\
-org.herac.tuxguitar.gui.tools.custom.converter.TGConverterPlugin${line.separator}\
+org.herac.tuxguitar.app.tools.custom.converter.TGConverterPlugin${line.separator}\
 org.herac.tuxguitar.io.gtp.GTPPluginList${line.separator}\
 org.herac.tuxguitar.player.impl.jsa.MidiPluginList${line.separator}\
 org.herac.tuxguitar.io.lilypond.LilypondPluginExporter${line.separator}\
diff --git a/TuxGuitar-jws/build.xml b/TuxGuitar-jws/build.xml
index 01a3e9b..36c6d7a 100644
--- a/TuxGuitar-jws/build.xml
+++ b/TuxGuitar-jws/build.xml
@@ -12,7 +12,7 @@
 	<property name="build.dir" value="build" />
 	<property name="build.jar" value="./jws/files/tuxguitar-jws.jar" />
 	
-	<property name="plugin.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
+	<property name="plugin.class" value="org.herac.tuxguitar.app.system.plugins.TGPlugin" />
 	
 	<path id="class.path">
 		<pathelement location="${build.dir}"/>
@@ -45,6 +45,7 @@
 		<antcall target="build.skins" />
 		<antcall target="build.help" />
 		<antcall target="build.scales" />
+		<antcall target="build.templates" />
 		
 		<echo>+------------------------------------------------------------------+</echo>
 		<echo>|          P A C K A G I N G   T U X G U I T A R  -  J W S         |</echo>
@@ -101,6 +102,13 @@
 		</copy>
 	</target>
 	
+	<target name="build.templates" >
+		<mkdir dir="${build.dir}/templates" />
+		<copy todir="${build.dir}/templates">
+			<fileset dir="${tuxguitar.share.path}/templates"/>
+		</copy>
+	</target>
+	
 	<target name="build.locales" >
 		<mkdir dir="${build.dir}/lang" />
 		<touch file="${build.dir}/lang/list.properties" />
@@ -109,6 +117,12 @@
 			<param name="locale.file" value="messages.properties"/>
 		</antcall>
 		<antcall target="build.locale">
+			<param name="locale.file" value="messages_bg.properties"/>
+		</antcall>
+		<antcall target="build.locale">
+			<param name="locale.file" value="messages_el.properties"/>
+		</antcall>
+		<antcall target="build.locale">
 			<param name="locale.file" value="messages_en.properties"/>
 		</antcall>
 		<antcall target="build.locale">
@@ -160,6 +174,12 @@
 			<param name="locale.file" value="messages_ru.properties"/>
 		</antcall>
 		<antcall target="build.locale">
+			<param name="locale.file" value="messages_eu.properties"/>
+		</antcall>
+		<antcall target="build.locale">
+			<param name="locale.file" value="messages_fi.properties"/>
+		</antcall>
+		<antcall target="build.locale">
 			<param name="locale.file" value="messages_zh_TW.properties"/>
 		</antcall>
 		<antcall target="build.locale">
diff --git a/TuxGuitar-jws/jws/files/gnu-linux-x86-64/swt.jar b/TuxGuitar-jws/jws/files/gnu-linux-x86-64/swt.jar
new file mode 100644
index 0000000..0f1f8ac
Binary files /dev/null and b/TuxGuitar-jws/jws/files/gnu-linux-x86-64/swt.jar differ
diff --git a/TuxGuitar-jws/jws/files/gnu-linux-x86-64/tuxguitar-alsa-jni.jar b/TuxGuitar-jws/jws/files/gnu-linux-x86-64/tuxguitar-alsa-jni.jar
new file mode 100644
index 0000000..f58504e
Binary files /dev/null and b/TuxGuitar-jws/jws/files/gnu-linux-x86-64/tuxguitar-alsa-jni.jar differ
diff --git a/TuxGuitar-jws/jws/files/gnu-linux-x86-64/tuxguitar-alsa.jar b/TuxGuitar-jws/jws/files/gnu-linux-x86-64/tuxguitar-alsa.jar
new file mode 100644
index 0000000..c3e45c7
Binary files /dev/null and b/TuxGuitar-jws/jws/files/gnu-linux-x86-64/tuxguitar-alsa.jar differ
diff --git a/TuxGuitar-jws/jws/files/gnu-linux-x86-64/tuxguitar-dist.jar b/TuxGuitar-jws/jws/files/gnu-linux-x86-64/tuxguitar-dist.jar
new file mode 100644
index 0000000..950780c
Binary files /dev/null and b/TuxGuitar-jws/jws/files/gnu-linux-x86-64/tuxguitar-dist.jar differ
diff --git a/TuxGuitar-jws/jws/files/gnu-linux-x86/swt.jar b/TuxGuitar-jws/jws/files/gnu-linux-x86/swt.jar
new file mode 100644
index 0000000..d944ae7
Binary files /dev/null and b/TuxGuitar-jws/jws/files/gnu-linux-x86/swt.jar differ
diff --git a/TuxGuitar-jws/jws/files/gnu-linux-x86/tuxguitar-alsa-jni.jar b/TuxGuitar-jws/jws/files/gnu-linux-x86/tuxguitar-alsa-jni.jar
new file mode 100644
index 0000000..5ad3073
Binary files /dev/null and b/TuxGuitar-jws/jws/files/gnu-linux-x86/tuxguitar-alsa-jni.jar differ
diff --git a/TuxGuitar-jws/jws/files/gnu-linux-x86/tuxguitar-alsa.jar b/TuxGuitar-jws/jws/files/gnu-linux-x86/tuxguitar-alsa.jar
new file mode 100644
index 0000000..6386043
Binary files /dev/null and b/TuxGuitar-jws/jws/files/gnu-linux-x86/tuxguitar-alsa.jar differ
diff --git a/TuxGuitar-jws/jws/files/gnu-linux-x86/tuxguitar-dist.jar b/TuxGuitar-jws/jws/files/gnu-linux-x86/tuxguitar-dist.jar
new file mode 100644
index 0000000..da7da7a
Binary files /dev/null and b/TuxGuitar-jws/jws/files/gnu-linux-x86/tuxguitar-dist.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86/swt.jar b/TuxGuitar-jws/jws/files/macosx-x86/swt.jar
new file mode 100644
index 0000000..52e12f3
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86/swt.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-audiounit-jni.jar b/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-audiounit-jni.jar
new file mode 100644
index 0000000..0ebfddb
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-audiounit-jni.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-audiounit.jar b/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-audiounit.jar
new file mode 100644
index 0000000..be0fad1
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-audiounit.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-cocoa-integration.jar b/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-cocoa-integration.jar
new file mode 100644
index 0000000..ff04b76
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-cocoa-integration.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-dist.jar b/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-dist.jar
new file mode 100644
index 0000000..95e743d
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86/tuxguitar-dist.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86_64/swt.jar b/TuxGuitar-jws/jws/files/macosx-x86_64/swt.jar
new file mode 100644
index 0000000..bb60c63
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86_64/swt.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-audiounit-jni.jar b/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-audiounit-jni.jar
new file mode 100644
index 0000000..7b15237
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-audiounit-jni.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-audiounit.jar b/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-audiounit.jar
new file mode 100644
index 0000000..a58519e
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-audiounit.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-cocoa-integration.jar b/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-cocoa-integration.jar
new file mode 100644
index 0000000..9fec167
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-cocoa-integration.jar differ
diff --git a/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-dist.jar b/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-dist.jar
new file mode 100644
index 0000000..5aec119
Binary files /dev/null and b/TuxGuitar-jws/jws/files/macosx-x86_64/tuxguitar-dist.jar differ
diff --git a/TuxGuitar-jws/jws/files/tuxguitar-jws.jar b/TuxGuitar-jws/jws/files/tuxguitar-jws.jar
new file mode 100644
index 0000000..4477087
Binary files /dev/null and b/TuxGuitar-jws/jws/files/tuxguitar-jws.jar differ
diff --git a/TuxGuitar-jws/jws/files/windows-x86/swt.jar b/TuxGuitar-jws/jws/files/windows-x86/swt.jar
new file mode 100644
index 0000000..ad4daf2
Binary files /dev/null and b/TuxGuitar-jws/jws/files/windows-x86/swt.jar differ
diff --git a/TuxGuitar-jws/jws/files/windows-x86/tuxguitar-dist.jar b/TuxGuitar-jws/jws/files/windows-x86/tuxguitar-dist.jar
new file mode 100644
index 0000000..6c4ed5d
Binary files /dev/null and b/TuxGuitar-jws/jws/files/windows-x86/tuxguitar-dist.jar differ
diff --git a/TuxGuitar-jws/jws/tuxguitar.jnlp b/TuxGuitar-jws/jws/tuxguitar.jnlp
index c63d1d3..3dd5c5f 100644
--- a/TuxGuitar-jws/jws/tuxguitar.jnlp
+++ b/TuxGuitar-jws/jws/tuxguitar.jnlp
@@ -33,19 +33,27 @@
 		<j2se version="1.5+" />
 		<jar href="files/gnu-linux-x86-64/swt.jar" />
 		<jar href="files/gnu-linux-x86-64/tuxguitar-dist.jar" />
+		<jar href="files/gnu-linux-x86-64/tuxguitar-alsa.jar" />
+		<nativelib href="files/gnu-linux-x86-64/tuxguitar-alsa-jni.jar" />
 	</resources>
 	
 	<resources os="Mac\ OS\ X" arch="i386">
 		<j2se version="1.5+" java-vm-args="-XstartOnFirstThread"/>
 		<jar href="files/macosx-x86/swt.jar" />
 		<jar href="files/macosx-x86/tuxguitar-dist.jar" />
+		<jar href="files/macosx-x86/tuxguitar-cocoa-integration.jar" />
+		<jar href="files/macosx-x86/tuxguitar-audiounit.jar" />
+		<nativelib href="files/macosx-x86/tuxguitar-audiounit-jni.jar" />
 	</resources>
 	
 	<resources os="Mac\ OS\ X" arch="x86_64">
 		<j2se version="1.5+" java-vm-args="-XstartOnFirstThread"/>
 		<jar href="files/macosx-x86_64/swt.jar" />
 		<jar href="files/macosx-x86_64/tuxguitar-dist.jar" />
+		<jar href="files/macosx-x86_64/tuxguitar-cocoa-integration.jar" />
+		<jar href="files/macosx-x86_64/tuxguitar-audiounit.jar" />
+		<nativelib href="files/macosx-x86_64/tuxguitar-audiounit-jni.jar" />
 	</resources>
 	
-	<application-desc main-class="org.herac.tuxguitar.gui.TGMain" />
+	<application-desc main-class="org.herac.tuxguitar.app.TGMain" />
 </jnlp>
diff --git a/TuxGuitar-lib/build.properties b/TuxGuitar-lib/build.properties
new file mode 100644
index 0000000..7bf88f6
--- /dev/null
+++ b/TuxGuitar-lib/build.properties
@@ -0,0 +1,5 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
diff --git a/TuxGuitar-lib/build.xml b/TuxGuitar-lib/build.xml
new file mode 100644
index 0000000..0b86287
--- /dev/null
+++ b/TuxGuitar-lib/build.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-lib" basedir="." default="all">
+	<description>
+		TuxGuitar Library
+	</description>
+	
+	<property file="build.properties" />
+	<property name="build.src.path" value="src" />
+	<property name="build.path" value="build" />
+	<property name="build.jar" value="tuxguitar-lib.jar" />
+	
+	<target name="init" depends="clean">
+		<mkdir dir="${build.path}" />
+	</target>
+	
+	<target name="build" depends="init">
+		<echo>+-------------------------------------------------+</echo>
+		<echo>|         B U I L D I N G   L I B R A R Y         |</echo>
+		<echo>+-------------------------------------------------+</echo>
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<include name="**/*.java"/>
+		</javac>
+		
+		<echo>+-----------------------------------------------+</echo>
+		<echo>|       P A C K A G I N G   L I B R A R Y       |</echo>
+		<echo>+-----------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}" basedir="${build.path}" />
+		<delete quiet="true" dir="${build.path}" />
+	</target>
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
diff --git a/TuxGuitar-lib/pom.xml b/TuxGuitar-lib/pom.xml
new file mode 100644
index 0000000..5947e77
--- /dev/null
+++ b/TuxGuitar-lib/pom.xml
@@ -0,0 +1,28 @@
+<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/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>org.herac.tuxguitar</groupId>
+	<artifactId>tuxguitar-lib</artifactId>
+	<packaging>jar</packaging>
+	<version>1.3-SNAPSHOT</version>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>2.3.2</version>
+					<configuration>
+						<source>1.4</source>
+						<target>1.4</target>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+</project>
\ No newline at end of file
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGAction.java b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGAction.java
new file mode 100644
index 0000000..5496364
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGAction.java
@@ -0,0 +1,6 @@
+package org.herac.tuxguitar.action;
+
+public interface TGAction {
+	
+	public void execute(TGActionContext context) throws TGActionException;
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionContext.java b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionContext.java
new file mode 100644
index 0000000..c64c0b0
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionContext.java
@@ -0,0 +1,21 @@
+package org.herac.tuxguitar.action;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public abstract class TGActionContext {
+	
+	private Map attributes;
+	
+	public TGActionContext(){
+		this.attributes = new HashMap();
+	}
+	
+	public void setAttribute(String key, Object value){
+		this.attributes.put(key, value);
+	}
+	
+	public Object getAttribute(String key){
+		return this.attributes.get(key);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionContextFactory.java b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionContextFactory.java
new file mode 100644
index 0000000..fe204d4
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionContextFactory.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.action;
+
+public interface TGActionContextFactory {
+	
+	public TGActionContext createActionContext() throws TGActionException;
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionException.java b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionException.java
new file mode 100644
index 0000000..aba86a8
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionException.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.action;
+
+import org.herac.tuxguitar.util.TGException;
+
+public class TGActionException extends TGException {
+	
+	private static final long serialVersionUID = 8298443126251976034L;
+
+	public TGActionException(String message){
+		super(message);
+	}
+	
+	public TGActionException(Throwable cause){
+		super(cause);
+	}
+	
+	public TGActionException(String message, Throwable cause){
+		super(message, cause);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionInterceptor.java b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionInterceptor.java
new file mode 100644
index 0000000..59abe22
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionInterceptor.java
@@ -0,0 +1,6 @@
+package org.herac.tuxguitar.action;
+
+public interface TGActionInterceptor {
+	
+	public boolean intercept(String id, TGActionContext context) throws TGActionException;
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionManager.java
new file mode 100644
index 0000000..94c54ad
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionManager.java
@@ -0,0 +1,157 @@
+package org.herac.tuxguitar.action;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.herac.tuxguitar.util.TGLock;
+
+public class TGActionManager {
+	
+	private static TGActionManager instance;
+	
+	private TGLock lock;
+	private Map actions;
+	private List interceptors;
+	private List preExecutionListeners;
+	private List postExecutionListeners;
+	private TGActionContextFactory actionContextFactory;
+	
+	private TGActionManager(){
+		this.lock = new TGLock();
+		this.actions = new HashMap();
+		this.interceptors = new ArrayList();
+		this.preExecutionListeners = new ArrayList();
+		this.postExecutionListeners = new ArrayList();
+		this.actionContextFactory = null;
+	}
+	
+	public static TGActionManager getInstance(){
+		synchronized (TGActionManager.class) {
+			if( instance == null ){
+				instance = new TGActionManager();
+			}
+			return instance;
+		}
+	}
+	
+	public void mapAction(String id, TGAction action){
+		this.actions.put(id,action);
+	}
+	
+	public void unmapAction(String id){
+		if( this.actions.containsKey(id) ){
+			this.actions.remove(id);
+		}
+	}
+	
+	public TGAction getAction(String id){
+		if( this.actions.containsKey(id) ){
+			return (TGAction)this.actions.get(id);
+		}
+		return null;
+	}
+	
+	public Map getActions(){
+		return this.actions;
+	}
+	
+	public TGActionContext createActionContext() throws TGActionException{
+		if( this.actionContextFactory != null ){
+			return this.actionContextFactory.createActionContext();
+		}
+		return null;
+	}
+	
+	public void execute(String id) throws TGActionException{
+		this.execute(id, createActionContext());
+	}
+	
+	public void execute(String id, TGActionContext context) throws TGActionException{
+		try {
+			this.lock.lock();
+			
+			TGAction action = getAction(id);
+			if( action != null ){
+				if(!this.intercept(id, context)){
+					this.doPreExecution(id, context);
+					
+					action.execute(context);
+					
+					this.doPostExecution(id, context);
+				}
+			}
+		} finally {
+			this.lock.unlock();
+		}
+	}
+	
+	public boolean intercept(String id, TGActionContext context) throws TGActionException{
+		Iterator it = this.interceptors.iterator();
+		while( it.hasNext() ){
+			TGActionInterceptor interceptor = (TGActionInterceptor) it.next();
+			if( interceptor.intercept(id, context) ) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public void doPreExecution(String id, TGActionContext context) throws TGActionException{
+		Iterator it = this.preExecutionListeners.iterator();
+		while( it.hasNext() ){
+			TGActionPreExecutionListener listener = (TGActionPreExecutionListener) it.next();
+			listener.doPreExecution(id, context);
+		}
+	}
+	
+	public void doPostExecution(String id, TGActionContext context) throws TGActionException{
+		Iterator it = this.postExecutionListeners.iterator();
+		while( it.hasNext() ){
+			TGActionPostExecutionListener listener = (TGActionPostExecutionListener) it.next();
+			listener.doPostExecution(id, context);
+		}
+	}
+	
+	public void addInterceptor(TGActionInterceptor interceptor){
+		if(!this.interceptors.contains(interceptor)){
+			this.interceptors.add(interceptor);
+		}
+	}
+	
+	public void removeInterceptor(TGActionInterceptor interceptor){
+		if( this.interceptors.contains(interceptor) ){
+			this.interceptors.remove(interceptor);
+		}
+	}
+	
+	public void addPreExecutionListener(TGActionPreExecutionListener listener){
+		if(!this.preExecutionListeners.contains(listener)){
+			this.preExecutionListeners.add(listener);
+		}
+	}
+	
+	public void removePreExecutionListener(TGActionPreExecutionListener listener){
+		if( this.preExecutionListeners.contains(listener) ){
+			this.preExecutionListeners.remove(listener);
+		}
+	}
+	
+	public void addPostExecutionListener(TGActionPostExecutionListener listener){
+		if(!this.postExecutionListeners.contains(listener)){
+			this.postExecutionListeners.add(listener);
+		}
+	}
+	
+	public void removePostExecutionListener(TGActionPostExecutionListener listener){
+		if( this.postExecutionListeners.contains(listener) ){
+			this.postExecutionListeners.remove(listener);
+		}
+	}
+	
+	public void setActionContextFactory(TGActionContextFactory actionContextFactory) {
+		this.actionContextFactory = actionContextFactory;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionPostExecutionListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionPostExecutionListener.java
new file mode 100644
index 0000000..1ad97fd
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionPostExecutionListener.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.action;
+
+public interface TGActionPostExecutionListener {
+	
+	public void doPostExecution(String id, TGActionContext context) throws TGActionException;
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionPreExecutionListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionPreExecutionListener.java
new file mode 100644
index 0000000..5144716
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/action/TGActionPreExecutionListener.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.action;
+
+public interface TGActionPreExecutionListener {
+	
+	public void doPreExecution(String id, TGActionContext context) throws TGActionException;
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGColor.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGColor.java
new file mode 100644
index 0000000..27f28a8
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGColor.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGColor extends TGResource {
+	
+	public int getRed();
+	
+	public int getGreen();
+	
+	public int getBlue();
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGColorModel.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGColorModel.java
new file mode 100644
index 0000000..61143c5
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGColorModel.java
@@ -0,0 +1,42 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGColorModel {
+	
+	private int red;
+	private int green;
+	private int blue;
+	
+	public TGColorModel(){
+		this(0,0,0);
+	}
+	
+	public TGColorModel(int red, int green, int blue){
+		this.red = red;
+		this.green = green;
+		this.blue = blue;
+	}
+	
+	public int getRed() {
+		return this.red;
+	}
+	
+	public void setRed(int red) {
+		this.red = red;
+	}
+	
+	public int getGreen() {
+		return this.green;
+	}
+	
+	public void setGreen(int green) {
+		this.green = green;
+	}
+	
+	public int getBlue() {
+		return this.blue;
+	}
+	
+	public void setBlue(int blue) {
+		this.blue = blue;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGDimension.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGDimension.java
new file mode 100644
index 0000000..ea56542
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGDimension.java
@@ -0,0 +1,32 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGDimension {
+	
+	private int width;
+	private int height;
+	
+	public TGDimension(int width,int height){
+		this.width = width;
+		this.height = height;
+	}
+	
+	public TGDimension(){
+		this(0,0);
+	}
+	
+	public int getWidth() {
+		return this.width;
+	}
+	
+	public void setWidth(int width) {
+		this.width = width;
+	}
+	
+	public int getHeight() {
+		return this.height;
+	}
+	
+	public void setHeight(int height) {
+		this.height = height;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGFont.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGFont.java
new file mode 100644
index 0000000..5b66c35
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGFont.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGFont extends TGResource {
+	
+	public String getName();
+	
+	public int getHeight();
+	
+	public boolean isBold();
+	
+	public boolean isItalic();
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGFontModel.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGFontModel.java
new file mode 100644
index 0000000..80aedbd
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGFontModel.java
@@ -0,0 +1,52 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGFontModel {
+	
+	private String name;
+	private int height;
+	private boolean bold;
+	private boolean italic;
+	
+	public TGFontModel(){
+		this(null,0,false,false);
+	}
+	
+	public TGFontModel(String name, int height, boolean bold, boolean italic){
+		this.name = name;
+		this.height = height;
+		this.bold = bold;
+		this.italic = italic;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public int getHeight() {
+		return this.height;
+	}
+	
+	public void setHeight(int height) {
+		this.height = height;
+	}
+	
+	public boolean isBold() {
+		return this.bold;
+	}
+	
+	public void setBold(boolean bold) {
+		this.bold = bold;
+	}
+	
+	public boolean isItalic() {
+		return this.italic;
+	}
+	
+	public void setItalic(boolean italic) {
+		this.italic = italic;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGImage.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGImage.java
new file mode 100644
index 0000000..5048162
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGImage.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGImage extends TGResource,TGPainterFactory {
+	
+	public int getWidth();
+	
+	public int getHeight();
+	
+	public void applyTransparency( TGColor background );
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGPainter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGPainter.java
new file mode 100644
index 0000000..c53567f
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGPainter.java
@@ -0,0 +1,73 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGPainter extends TGResourceFactory, TGResource {
+	
+	public static final int PATH_DRAW = 0x01;
+	
+	public static final int PATH_FILL = 0x02;
+	
+	public void initPath(int style);
+	
+	public void initPath();
+	
+	public void closePath();
+	
+	public void drawString(String string, int x, int y);
+	
+	public void drawString(String string, int x, int y, boolean isTransparent);
+	
+	public void drawImage(TGImage image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight);
+	
+	public void drawImage(TGImage image, int x, int y);
+	
+	public void drawPolygon(int[] arg0);
+	
+	public void fillPolygon(int[] arg0);
+	
+	public void cubicTo(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5);
+	
+	public void lineTo(float arg0, float arg1);
+	
+	public void moveTo(float arg0, float arg1);
+	
+	public void addString(String arg0, float arg1, float arg2, TGFont arg3);
+	
+	public void addArc(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5);
+	
+	public void addOval(float arg0, float arg1, float arg2, float arg3);
+	
+	public void addRectangle(float x,float y,float width,float height);
+	
+	public void setFont(TGFont font);
+	
+	public void setForeground(TGColor color);
+	
+	public void setBackground(TGColor color);
+	
+	public void setLineWidth(int lineWidth);
+	
+	public void setLineStyleSolid();
+	
+	public void setLineStyleDot();
+	
+	public void setLineStyleDash();
+	
+	public void setLineStyleDashDot();
+	
+	public void setAlpha(int alpha);
+	
+	public void setAntialias(boolean enabled);
+	
+	public void setAdvanced(boolean advanced);
+	
+	public int getFontSize();
+	
+	public int getFMHeight();
+	
+	public int getFMAscent();
+	
+	public int getFMDescent();
+	
+	public int getFMWidth( String text );
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGPainterFactory.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGPainterFactory.java
new file mode 100644
index 0000000..7982d47
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGPainterFactory.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGPainterFactory {
+	
+	public TGPainter createPainter();
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGPoint.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGPoint.java
new file mode 100644
index 0000000..4cf4b83
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGPoint.java
@@ -0,0 +1,32 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGPoint {
+	
+	private int x;
+	private int y;
+	
+	public TGPoint(int x,int y){
+		this.x = x;
+		this.y = y;
+	}
+	
+	public TGPoint(){
+		this(0,0);
+	}
+	
+	public int getX() {
+		return this.x;
+	}
+	
+	public void setX(int x) {
+		this.x = x;
+	}
+	
+	public int getY() {
+		return this.y;
+	}
+	
+	public void setY(int y) {
+		this.y = y;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGRectangle.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGRectangle.java
new file mode 100644
index 0000000..ce461f6
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGRectangle.java
@@ -0,0 +1,48 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGRectangle {
+	
+	private TGPoint location;
+	private TGDimension size;
+	
+	public TGRectangle(int x, int y, int width, int height){
+		this.location = new TGPoint(x,y);
+		this.size = new TGDimension(width,height);
+	}
+	
+	public TGRectangle(){
+		this(0,0,0,0);
+	}
+	
+	public int getX() {
+		return this.location.getX();
+	}
+	
+	public void setX(int x) {
+		this.location.setX(x);
+	}
+	
+	public int getY() {
+		return this.location.getY();
+	}
+	
+	public void setY(int y) {
+		this.location.setY(y);
+	}
+	
+	public int getWidth() {
+		return this.size.getWidth();
+	}
+	
+	public void setWidth(int width) {
+		this.size.setWidth(width);
+	}
+	
+	public int getHeight() {
+		return this.size.getHeight();
+	}
+	
+	public void setHeight(int height) {
+		this.size.setHeight(height);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGResource.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGResource.java
new file mode 100644
index 0000000..bda9047
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGResource.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGResource {
+	
+	public void dispose();
+	
+	public boolean isDisposed();
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGResourceFactory.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGResourceFactory.java
new file mode 100644
index 0000000..7f69e6b
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/TGResourceFactory.java
@@ -0,0 +1,15 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGResourceFactory {
+	
+	public TGImage createImage( int width, int height );
+	
+	public TGColor createColor(TGColorModel colorModel);
+	
+	public TGColor createColor( int red, int green, int blue);
+	
+	public TGFont createFont(TGFontModel fontModel);
+	
+	public TGFont createFont(String name, int height, boolean bold, boolean italic);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGBeatGroup.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGBeatGroup.java
new file mode 100644
index 0000000..2e81cd8
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGBeatGroup.java
@@ -0,0 +1,202 @@
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class TGBeatGroup {
+	private static final int SCORE_MIDDLE_KEYS[] = new int[]{55,40,40,50};
+	private static final int SCORE_SHARP_POSITIONS[] = new int[]{7,7,6,6,5,4,4,3,3,2,2,1};
+	private static final int SCORE_FLAT_POSITIONS[] = new int[]{7,6,6,5,5,4,3,3,2,2,1,1};
+	
+	public static final int DIRECTION_NOT_SETTED = 0;
+	public static final int DIRECTION_UP = 1;
+	public static final int DIRECTION_DOWN = 2;
+	
+	private static final int UP_OFFSET = 28;
+	private static final int DOWN_OFFSET = 35;
+	
+	private int voice;
+	private int direction;
+	private List voices;
+	private TGNoteImpl firstMinNote;
+	private TGNoteImpl firstMaxNote;
+	private TGNoteImpl lastMinNote;
+	private TGNoteImpl lastMaxNote;
+	private TGNoteImpl maxNote;
+	private TGNoteImpl minNote;
+	
+	public TGBeatGroup(int voice){
+		this.voice = voice;
+		this.voices = new ArrayList();
+		this.direction = DIRECTION_NOT_SETTED;
+		this.firstMinNote = null;
+		this.firstMaxNote = null;
+		this.lastMinNote = null;
+		this.lastMaxNote = null;
+		this.maxNote = null;
+		this.minNote = null;
+	}
+	
+	public void check(TGVoiceImpl voice){
+		this.check(voice.getMaxNote());
+		this.check(voice.getMinNote());
+		this.voices.add( voice );
+		if( voice.getDirection() != TGVoice.DIRECTION_NONE ){
+			if( voice.getDirection() == TGVoice.DIRECTION_UP ){
+				this.direction = DIRECTION_UP;
+			}
+			else if( voice.getDirection() == TGVoice.DIRECTION_DOWN ){
+				this.direction = DIRECTION_DOWN;
+			}
+		}
+	}
+	
+	private void check(TGNoteImpl note){
+		int value = note.getRealValue();
+		
+		//FIRST MIN NOTE
+		if(this.firstMinNote == null || note.getVoice().getBeat().getStart() < this.firstMinNote.getVoice().getBeat().getStart()){
+			this.firstMinNote = note;
+		}else if(note.getVoice().getBeat().getStart() == this.firstMinNote.getVoice().getBeat().getStart()){
+			if(note.getRealValue() < this.firstMinNote.getRealValue()){
+				this.firstMinNote = note;
+			}
+		}
+		//FIRST MAX NOTE
+		if(this.firstMaxNote == null || note.getVoice().getBeat().getStart() < this.firstMaxNote.getVoice().getBeat().getStart()){
+			this.firstMaxNote = note;
+		}else if(note.getVoice().getBeat().getStart() == this.firstMaxNote.getVoice().getBeat().getStart()){
+			if(note.getRealValue() > this.firstMaxNote.getRealValue()){
+				this.firstMaxNote = note;
+			}
+		}
+		
+		//LAST MIN NOTE
+		if(this.lastMinNote == null || note.getVoice().getBeat().getStart() > this.lastMinNote.getVoice().getBeat().getStart()){
+			this.lastMinNote = note;
+		}else if(note.getVoice().getBeat().getStart() == this.lastMinNote.getVoice().getBeat().getStart()){
+			if(note.getRealValue() < this.lastMinNote.getRealValue()){
+				this.lastMinNote = note;
+			}
+		}
+		//LAST MIN NOTE
+		if(this.lastMaxNote == null || note.getVoice().getBeat().getStart() > this.lastMaxNote.getVoice().getBeat().getStart()){
+			this.lastMaxNote = note;
+		}else if(note.getVoice().getBeat().getStart() == this.lastMaxNote.getVoice().getBeat().getStart()){
+			if(note.getRealValue() > this.lastMaxNote.getRealValue()){
+				this.lastMaxNote = note;
+			}
+		}
+		
+		if(this.maxNote == null || value > this.maxNote.getRealValue()){
+			this.maxNote = note;
+		}
+		if(this.minNote == null || value < this.minNote.getRealValue()){
+			this.minNote = note;
+		}
+	}
+	
+	public void finish(TGLayout layout, TGMeasureImpl measure){
+		if( this.direction == DIRECTION_NOT_SETTED ){
+			if (measure.getNotEmptyVoices() > 1 ){
+				this.direction = this.voice == 0 ? DIRECTION_UP : DIRECTION_DOWN;
+			}else if ( (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+				this.direction = DIRECTION_DOWN;
+			}else{
+				int max = Math.abs(this.minNote.getRealValue() - (SCORE_MIDDLE_KEYS[measure.getClef() - 1] + 100));
+				int min = Math.abs(this.maxNote.getRealValue() - (SCORE_MIDDLE_KEYS[measure.getClef() - 1] - 100));
+				if(max > min){
+					this.direction = DIRECTION_UP;
+				}else{
+					this.direction = DIRECTION_DOWN;
+				}
+			}
+		}
+	}
+	
+	public List getVoices(){
+		return this.voices;
+	}
+	
+	public int getY1(TGLayout layout,TGNoteImpl note,int key,int clef){
+		double scale = (layout.getScoreLineSpacing() / 2.00);
+		int noteValue = note.getRealValue();
+		
+		int scoreLineY = 0;
+		if(key <= 7){
+			scoreLineY = (int)((SCORE_SHARP_POSITIONS[noteValue % 12]) * scale - (7 * (noteValue / 12)) * scale);
+		}else{
+			scoreLineY = (int)((SCORE_FLAT_POSITIONS[noteValue % 12]) * scale - (7 * (noteValue / 12)) * scale);
+		}
+		
+		scoreLineY += TGMeasureImpl.SCORE_KEY_OFFSETS[clef - 1] * scale;
+		
+		return scoreLineY;
+	}
+	
+	public int getY2(TGLayout layout,int x,int key,int clef){
+		int maxDistance = 10;
+		float upOffset = TGBeatGroup.getUpOffset(layout);
+		float downOffset = TGBeatGroup.getDownOffset(layout);
+		if(this.direction == DIRECTION_DOWN){
+			if(this.minNote != this.firstMinNote && this.minNote != this.lastMinNote){
+				return (int) (getY1(layout,this.minNote,key,clef) + downOffset);
+			}
+			
+			int y = 0;
+			int x1 = this.firstMinNote.getPosX() + this.firstMinNote.getBeatImpl().getSpacing();
+			int x2 = this.lastMinNote.getPosX() + this.lastMinNote.getBeatImpl().getSpacing();
+			int y1 =  (int) (getY1(layout,this.firstMinNote,key,clef) +  downOffset);
+			int y2 =  (int) (getY1(layout,this.lastMinNote,key,clef) +  downOffset);
+			
+			if(y1 > y2 && (y1 - y2) > maxDistance) y2 = (y1 - maxDistance);
+			if(y2 > y1 && (y2 - y1) > maxDistance) y1 = (y2 - maxDistance);
+			
+			//int y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x));
+			if( (y1 - y2) != 0 && (x1 - x2) != 0 && (x1 - x) != 0){
+				y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x));
+			}
+			return y1 - y;
+		}else if(this.maxNote != this.firstMaxNote && this.maxNote != this.lastMaxNote){
+			return (int)(getY1(layout,this.maxNote,key,clef) - upOffset);
+		}else{
+			int y = 0;
+			int x1 = this.firstMaxNote.getPosX() + this.firstMaxNote.getBeatImpl().getSpacing();
+			int x2 = this.lastMaxNote.getPosX() + this.lastMaxNote.getBeatImpl().getSpacing();
+			int y1 = (int)(getY1(layout,this.firstMaxNote,key,clef) - upOffset);
+			int y2 = (int)(getY1(layout,this.lastMaxNote,key,clef) - upOffset);
+			
+			if(y1 < y2 && (y2 - y1) > maxDistance) y2 = (y1 + maxDistance);
+			if(y2 < y1 && (y1 - y2) > maxDistance) y1 = (y2 + maxDistance);
+			
+			if( (y1 - y2) != 0 && (x1 - x2) != 0 && (x1 - x) != 0){
+				y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x));
+			}
+			return y1 - y;
+		}
+	}
+	
+	public int getDirection() {
+		return this.direction;
+	}
+	
+	public TGNoteImpl getMinNote(){
+		return this.minNote;
+	}
+	
+	public TGNoteImpl getMaxNote(){
+		return this.maxNote;
+	}
+	
+	public static float getUpOffset(TGLayout layout){
+		float scale = (layout.getScoreLineSpacing() / 8.0f);
+		return (UP_OFFSET * scale);
+	}
+	
+	public static float getDownOffset(TGLayout layout){
+		float scale = (layout.getScoreLineSpacing() / 8.0f);
+		return (DOWN_OFFSET * scale);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGBeatImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGBeatImpl.java
new file mode 100644
index 0000000..a7e19a9
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGBeatImpl.java
@@ -0,0 +1,393 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class TGBeatImpl extends TGBeat{
+	/**
+	 * desviacion a la izquierda
+	 */
+	public static final int JOINED_TYPE_NONE_LEFT = 1;
+	/**
+	 * desviacion a la derecha
+	 */
+	public static final int JOINED_TYPE_NONE_RIGHT = 2;
+	/**
+	 * Union a la izquierda
+	 */
+	public static final int JOINED_TYPE_LEFT = 3;
+	/**
+	 * Union a la derecha
+	 */
+	public static final int JOINED_TYPE_RIGHT = 4;
+	
+	private int posX;
+	private int width;
+	private TGNoteImpl maxNote;
+	private TGNoteImpl minNote;
+	private boolean[] usedStrings;
+	private int joinedType;
+	private boolean joinedGreaterThanQuarter;
+	private TGBeatImpl join1;
+	private TGBeatImpl join2;
+	private TGBeatImpl previous;
+	private TGBeatImpl next;
+	private TGBeatGroup group;
+	
+	private TGBeatSpacing bs;
+	
+	private boolean accentuated;
+	private boolean heavyAccentuated;
+	private boolean harmonic;
+	private boolean tapping;
+	private boolean slapping;
+	private boolean popping;
+	private boolean palmMute;
+	private boolean letRing;
+	private boolean vibrato;
+	private boolean trill;
+	private boolean fadeIn;
+	
+	public TGBeatImpl(TGFactory factory){
+		super(factory);
+	}
+	
+	public int getPosX() {
+		return this.posX;
+	}
+	
+	public void setPosX(int posX) {
+		this.posX = posX;
+	}
+	
+	public int getMinimumWidth() {
+		return this.width;
+	}
+	
+	public void setWidth(int width) {
+		this.width = width;
+	}
+	
+	public TGNoteImpl getMinNote(){
+		return this.minNote;
+	}
+	
+	public TGNoteImpl getMaxNote(){
+		return this.maxNote;
+	}
+	
+	public TGMeasureImpl getMeasureImpl() {
+		return (TGMeasureImpl)getMeasure();
+	}
+	
+	public boolean[] getUsedStrings() {
+		if(this.usedStrings == null){
+			this.usedStrings = new boolean[getMeasure().getTrack().stringCount()];
+		}
+		return this.usedStrings;
+	}
+	
+	public TGBeatImpl getJoin1() {
+		return this.join1;
+	}
+	
+	public void setJoin1(TGBeatImpl join1) {
+		this.join1 = join1;
+	}
+	
+	public TGBeatImpl getJoin2() {
+		return this.join2;
+	}
+	
+	public void setJoin2(TGBeatImpl join2) {
+		this.join2 = join2;
+	}
+	
+	public boolean isJoinedGreaterThanQuarter() {
+		return this.joinedGreaterThanQuarter;
+	}
+	
+	public void setJoinedGreaterThanQuarter(boolean joinedGreaterThanQuarter) {
+		this.joinedGreaterThanQuarter = joinedGreaterThanQuarter;
+	}
+	
+	public int getJoinedType() {
+		return this.joinedType;
+	}
+	
+	public void setJoinedType(int joinedType) {
+		this.joinedType = joinedType;
+	}
+	
+	public TGBeatImpl getPreviousBeat() {
+		return this.previous;
+	}
+
+	public void setPreviousBeat(TGBeatImpl previous) {
+		this.previous = previous;
+	}
+
+	public TGBeatImpl getNextBeat() {
+		return this.next;
+	}
+
+	public void setNextBeat(TGBeatImpl next) {
+		this.next = next;
+	}
+
+	public TGBeatGroup getBeatGroup() {
+		return this.group;
+	}
+	
+	public void setBeatGroup(TGBeatGroup group) {
+		this.group = group;
+	}
+	
+	public int getSpacing(){
+		return getMeasureImpl().getBeatSpacing(this);
+	}
+	
+	public boolean isPlaying(TGLayout layout){
+		return layout.getComponent().isRunning(this);
+	}
+	
+	public TGVoiceImpl getVoiceImpl(int index){
+		TGVoice voice = super.getVoice(index);
+		if(voice instanceof TGVoiceImpl){
+			return (TGVoiceImpl)voice;
+		}
+		return null;
+	}
+	
+	public void reset(){
+		this.maxNote = null;
+		this.minNote = null;
+		this.usedStrings = new boolean[getMeasure().getTrack().stringCount()];
+	}
+	
+	public void check( TGLayout layout , TGNoteImpl note){
+		int value = note.getRealValue();
+		if(this.maxNote == null || value > this.maxNote.getRealValue()){
+			this.maxNote = note;
+		}
+		if(this.minNote == null || value < this.minNote.getRealValue()){
+			this.minNote = note;
+		}
+		this.getUsedStrings();
+		this.usedStrings[note.getString() - 1] = true;
+	}
+	
+	public void resetEffectsSpacing( TGLayout layout ){
+		this.bs = new TGBeatSpacing( layout );
+		this.accentuated = false;
+		this.heavyAccentuated = false;
+		this.harmonic = false;
+		this.tapping = false;
+		this.slapping = false;
+		this.popping = false;
+		this.palmMute = false;
+		this.letRing = false;
+		this.fadeIn = false;
+		this.vibrato = false;
+		this.trill = false;
+	}
+	
+	public void updateEffectsSpacing(TGLayout layout,TGNoteEffect effect){
+		if(effect.isAccentuatedNote()){
+			this.accentuated = true;
+		}
+		if(effect.isHeavyAccentuatedNote()){
+			this.heavyAccentuated = true;
+		}
+		if(effect.isHarmonic() && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+			this.harmonic = true;
+		}
+		if(effect.isTapping()){
+			this.tapping = true;
+		}
+		if(effect.isSlapping()){
+			this.slapping = true;
+		}
+		if(effect.isPopping()){
+			this.popping = true;
+		}
+		if(effect.isPalmMute()){
+			this.palmMute = true;
+		}
+		if(effect.isLetRing()){
+			this.letRing = true;
+		}
+		if(effect.isFadeIn()){
+			this.fadeIn = true;
+		}
+		if(effect.isVibrato()){
+			this.vibrato = true;
+		}
+		if(effect.isTrill()){
+			this.trill = true;
+		}
+	}
+	
+	public int getEffectsSpacing(TGLayout layout){
+		if(this.accentuated){
+			this.bs.setSize(TGBeatSpacing.POSITION_ACCENTUATED_EFFECT,layout.getEffectSpacing());
+		}
+		if(this.heavyAccentuated){
+			this.bs.setSize(TGBeatSpacing.POSITION_HEAVY_ACCENTUATED_EFFECT,layout.getEffectSpacing());
+		}
+		if(this.harmonic){
+			this.bs.setSize(TGBeatSpacing.POSITION_HARMONIC_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.tapping){
+			this.bs.setSize(TGBeatSpacing.POSITION_TAPPING_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.slapping){
+			this.bs.setSize(TGBeatSpacing.POSITION_SLAPPING_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.popping){
+			this.bs.setSize(TGBeatSpacing.POSITION_POPPING_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.palmMute){
+			this.bs.setSize(TGBeatSpacing.POSITION_PALM_MUTE_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.letRing){
+			this.bs.setSize(TGBeatSpacing.POSITION_LET_RING_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.fadeIn){
+			this.bs.setSize(TGBeatSpacing.POSITION_FADE_IN,layout.getEffectSpacing());
+		}
+		if(this.vibrato){
+			this.bs.setSize(TGBeatSpacing.POSITION_VIBRATO_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.trill){
+			this.bs.setSize(TGBeatSpacing.POSITION_TRILL_EFFEC,layout.getEffectSpacing());
+		}
+		return this.bs.getSize();
+	}
+	
+	public void paint(TGLayout layout,TGPainter painter, int fromX, int fromY/*,boolean playMode*/) {
+		if(!layout.isPlayModeEnabled() && (layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+			paintExtraLines(painter, layout,fromX, fromY);
+		}
+		for(int v = 0; v < TGBeat.MAX_VOICES; v ++){
+			getVoiceImpl(v).paint(layout, painter, fromX, fromY);
+		}
+		if(!layout.isPlayModeEnabled()){
+			if(isChordBeat()){
+				TGChordImpl chord = (TGChordImpl)getChord();
+				chord.paint(layout,painter,fromX,fromY);
+			}
+			if(getStroke().getDirection() != TGStroke.STROKE_NONE){
+				paintStroke(layout, painter, fromX, fromY);
+			}
+		}
+	}
+	
+	public void paintExtraLines(TGPainter painter,TGLayout layout,int fromX, int fromY){
+		if(!isRestBeat()){
+			int scoreY = (fromY + getMeasureImpl().getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES));
+			paintExtraLines(painter,layout,getMinNote(), fromX, scoreY);
+			paintExtraLines(painter,layout,getMaxNote(), fromX, scoreY);
+		}
+	}
+	
+	private void paintExtraLines(TGPainter painter,TGLayout layout,TGNoteImpl note,int fromX,int fromY){
+		float scale = layout.getScale();
+		int y = fromY + note.getScorePosY();
+		int x = fromX + getPosX() + getSpacing();
+		float x1 = x - (4 * scale);
+		float x2 = x + (12 * scale);
+		
+		int scoreLineSpacing = layout.getScoreLineSpacing();
+		
+		layout.setLineStyle(painter);
+		if(y < fromY){
+			for(int i = fromY;i > y;i -= scoreLineSpacing){
+				painter.initPath();
+				painter.setAntialias(false);
+				painter.moveTo(x1,i);
+				painter.lineTo(x2,i);
+				painter.closePath();
+			}
+		}else if(y > (fromY + (scoreLineSpacing * 4))){
+			for(int i = (fromY +(scoreLineSpacing * 5));i < (y + scoreLineSpacing);i += scoreLineSpacing){
+				painter.initPath();
+				painter.setAntialias(false);
+				painter.moveTo(x1,i);
+				painter.lineTo(x2,i);
+				painter.closePath();
+			}
+		}
+	}
+	
+	public void paintStroke(TGLayout layout,TGPainter painter, int fromX, int fromY){
+		int style = layout.getStyle();
+		float scale = layout.getScale();
+		float x = (fromX + getPosX() + getSpacing() + ( 12f * scale ));
+		float y1 = 0;
+		float y2 = 0;
+		if((style & TGLayout.DISPLAY_SCORE) != 0){
+			float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); 
+			y1 = (y + layout.getScoreLineSpacing());
+			y2 = (y + (getMeasureImpl().getTrackImpl().getScoreHeight() - layout.getScoreLineSpacing()));
+		}
+		if((style & TGLayout.DISPLAY_TABLATURE) != 0){
+			float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE));
+			y1 = (y + layout.getStringSpacing());
+			y2 = (y + (getMeasureImpl().getTrackImpl().getTabHeight() - layout.getStringSpacing()));
+		}
+		else if((style & TGLayout.DISPLAY_SCORE) != 0){
+			float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); 
+			y1 = (y + layout.getScoreLineSpacing());
+			y2 = (y + (getMeasureImpl().getTrackImpl().getScoreHeight() - layout.getScoreLineSpacing()));
+		}else{
+			return;
+		}
+		if( getStroke().getDirection() == TGStroke.STROKE_UP ){
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo( x, y1 );
+			painter.lineTo( x, y2 );
+			painter.lineTo( x - (2.0f * scale), y2 - (5.0f * scale));
+			painter.moveTo( x , y2 );
+			painter.lineTo( x + (2.0f * scale), y2 - (5.0f * scale));
+			painter.closePath();
+		}else if( getStroke().getDirection() == TGStroke.STROKE_DOWN ){
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo( x, y2 );
+			painter.lineTo( x, y1 );
+			painter.lineTo( x - (2.0f * scale), y1 + (3.0f * scale));
+			painter.moveTo( x , y1 );
+			painter.lineTo( x + (2.0f * scale), y1 + (3.0f * scale));
+			painter.closePath();
+		}
+	}
+	
+	public int getPaintPosition(int index){
+		return getMeasureImpl().getTs().getPosition(index);
+	}
+	
+	public TGBeatSpacing getBs(){
+		return this.bs;
+	}
+	
+	public void removeChord(){
+		if(isChordBeat()){
+			TGChordImpl chord = (TGChordImpl)getChord();
+			chord.dispose();
+		}
+		super.removeChord();
+	}
+	
+	public void dispose(){
+		if(isChordBeat()){
+			TGChordImpl chord = (TGChordImpl)getChord();
+			chord.dispose();
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGBeatSpacing.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGBeatSpacing.java
new file mode 100644
index 0000000..798a444
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGBeatSpacing.java
@@ -0,0 +1,45 @@
+package org.herac.tuxguitar.graphics.control;
+
+
+public class TGBeatSpacing extends TGSpacing {
+	
+	/***     POSITIONS ARRAY INDICES     ***/
+	public static final int POSITION_ACCENTUATED_EFFECT = 0;
+	public static final int POSITION_HEAVY_ACCENTUATED_EFFECT = 1;
+	public static final int POSITION_HARMONIC_EFFEC = 2;
+	public static final int POSITION_TAPPING_EFFEC = 3;
+	public static final int POSITION_SLAPPING_EFFEC = 4;
+	public static final int POSITION_POPPING_EFFEC = 5;
+	public static final int POSITION_PALM_MUTE_EFFEC = 6;
+	public static final int POSITION_LET_RING_EFFEC = 7;
+	public static final int POSITION_VIBRATO_EFFEC = 8;
+	public static final int POSITION_TRILL_EFFEC = 9;
+	public static final int POSITION_FADE_IN = 10;
+	
+	private static final int[] EFFECT_POSITIONS = new int[]{
+		POSITION_ACCENTUATED_EFFECT,
+		POSITION_HEAVY_ACCENTUATED_EFFECT,
+		POSITION_HARMONIC_EFFEC,
+		POSITION_TAPPING_EFFEC,
+		POSITION_SLAPPING_EFFEC,
+		POSITION_POPPING_EFFEC,
+		POSITION_PALM_MUTE_EFFEC,
+		POSITION_LET_RING_EFFEC,
+		POSITION_VIBRATO_EFFEC,
+		POSITION_TRILL_EFFEC,
+		POSITION_FADE_IN,
+	};
+	
+	private static final int[][] POSITIONS = new int[][]{
+		/** SCORE **/
+		EFFECT_POSITIONS ,
+		/** TABLATURE **/
+		EFFECT_POSITIONS ,
+		/** SCORE | TABLATURE **/
+		EFFECT_POSITIONS ,
+	};
+	
+	public TGBeatSpacing(TGLayout layout) {
+		super(layout, POSITIONS, EFFECT_POSITIONS.length );
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGChordImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGChordImpl.java
new file mode 100644
index 0000000..dc82397
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGChordImpl.java
@@ -0,0 +1,435 @@
+/*
+ * Created on 01-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGString;
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGChordImpl extends TGChord {
+	
+	public static final int MAX_FRETS = 6;
+	
+	private int style;
+	private int posX;
+	private int posY;
+	private int width;
+	private int height;
+	private int tonic;
+	private int diagramWidth;
+	private int diagramHeight;
+	private int nameWidth;
+	private int nameHeight;
+	private TGImage diagram;
+	private TGColor foregroundColor;
+	private TGColor backgroundColor;
+	private TGColor noteColor;
+	private TGColor tonicColor;
+	private TGColor color;
+	private TGFont font;
+	private TGFont firstFretFont;
+	private int firstFretSpacing;
+	private int stringSpacing;
+	private int fretSpacing;
+	private int noteSize;
+	
+	private boolean editing;
+	
+	public TGChordImpl(int length) {
+		super(length);
+	}
+	
+	public boolean isEditing() {
+		return this.editing;
+	}
+	
+	public void setEditing(boolean editing) {
+		this.editing = editing;
+	}
+	
+	public void setPosX(int posX){
+		this.posX = posX;
+	}
+	
+	public void setPosY(int posY){
+		this.posY = posY;
+	}
+	
+	public int getPosY() {
+		return this.posY;
+	}
+	
+	public int getWidth(){
+		return this.width;
+	}
+	
+	public int getHeight(){
+		return this.height;
+	}
+	
+	public void setStyle(int style) {
+		this.style = style;
+	}
+	
+	public void setTonic(int tonic){
+		if(!isDisposed() && this.tonic != tonic){
+			this.dispose();
+		}
+		this.tonic = tonic;
+	}
+	
+	public TGColor getForegroundColor() {
+		return this.foregroundColor;
+	}
+	
+	public void setForegroundColor(TGColor foregroundColor) {
+		if(!isDisposed() && !isSameColor(this.foregroundColor, foregroundColor)){
+			this.dispose();
+		}
+		this.foregroundColor = foregroundColor;
+	}
+	
+	public TGColor getBackgroundColor() {
+		return this.backgroundColor;
+	}
+	
+	public void setBackgroundColor(TGColor backgroundColor) {
+		if(!isDisposed() && !isSameColor(this.backgroundColor, backgroundColor)){
+			this.dispose();
+		}
+		this.backgroundColor = backgroundColor;
+	}
+	
+	public TGColor getColor() {
+		return this.color;
+	}
+	
+	public void setColor(TGColor color) {
+		if(!isDisposed() && !isSameColor(this.color, color)){
+			this.dispose();
+		}
+		this.color = color;
+	}
+	
+	public TGColor getNoteColor() {
+		return this.noteColor;
+	}
+	
+	public void setNoteColor(TGColor noteColor) {
+		if(!isDisposed() && !isSameColor(this.noteColor, noteColor)){
+			this.dispose();
+		}
+		this.noteColor = noteColor;
+	}
+	
+	public TGColor getTonicColor() {
+		return this.tonicColor;
+	}
+	
+	public void setTonicColor(TGColor tonicColor) {
+		if(!isDisposed() && !isSameColor(this.tonicColor, tonicColor)){
+			this.dispose();
+		}
+		this.tonicColor = tonicColor;
+	}
+	
+	public int getFirstFretSpacing() {
+		return this.firstFretSpacing;
+	}
+	
+	public void setFirstFretSpacing(int firstFretSpacing) {
+		if(!isDisposed() && this.firstFretSpacing != firstFretSpacing){
+			this.dispose();
+		}
+		this.firstFretSpacing = firstFretSpacing;
+	}
+	
+	public int getFretSpacing() {
+		return this.fretSpacing;
+	}
+	
+	public void setFretSpacing(int fretSpacing) {
+		if(!isDisposed() && this.fretSpacing != fretSpacing){
+			this.dispose();
+		}
+		this.fretSpacing = fretSpacing;
+	}
+	
+	public int getStringSpacing() {
+		return this.stringSpacing;
+	}
+	
+	public void setStringSpacing(int stringSpacing) {
+		if(!isDisposed() && this.stringSpacing != stringSpacing){
+			this.dispose();
+		}
+		this.stringSpacing = stringSpacing;
+	}
+	
+	public int getNoteSize() {
+		return this.noteSize;
+	}
+	
+	public void setNoteSize(int noteSize) {
+		if(!isDisposed() && this.noteSize != noteSize){
+			this.dispose();
+		}
+		this.noteSize = noteSize;
+	}
+	
+	public TGFont getFont() {
+		return this.font;
+	}
+	
+	public void setFont(TGFont font) {
+		if(!isDisposed() && !isSameFont(this.font, font)){
+			this.dispose();
+		}
+		this.font = font;
+	}
+	
+	public TGFont getFirstFretFont() {
+		return this.firstFretFont;
+	}
+	
+	public void setFirstFretFont(TGFont firstFretFont) {
+		if(!isDisposed() && !isSameFont(this.firstFretFont, firstFretFont)){
+			this.dispose();
+		}
+		this.firstFretFont = firstFretFont;
+	}
+	
+	public void paint(TGLayout layout, TGPainter painter, int fromX, int fromY) {
+		layout.setChordStyle(this);
+		this.setPosY(getPaintPosition(TGTrackSpacing.POSITION_CHORD));
+		this.setEditing(false);
+		this.update(painter, layout.isBufferEnabled());
+		this.paint(painter,getBeatImpl().getSpacing() + fromX + Math.round(4f * layout.getScale()), fromY);
+	}
+	
+	public void paint(TGPainter painter, int fromX, int fromY){
+		int x = (fromX + getPosX());
+		int y = (fromY + getPosY());
+		if( (this.style & TGLayout.DISPLAY_CHORD_DIAGRAM) != 0 ){
+			if(this.diagram != null){
+				painter.drawImage(this.diagram,x - ( (this.diagramWidth - getFirstFretSpacing()) / 2) - getFirstFretSpacing() ,y);
+			}else{
+				paintDiagram(painter,x - ( (this.diagramWidth - getFirstFretSpacing()) / 2) - getFirstFretSpacing() ,y);
+			}
+		}
+		if( (this.style & TGLayout.DISPLAY_CHORD_NAME) != 0 && getName() != null && getName().length() > 0){
+			painter.setFont(getFont());
+			painter.setForeground(getForegroundColor());
+			painter.setBackground(getBackgroundColor());
+			painter.drawString(getName(),x - (this.nameWidth / 2) , y + (this.height - this.nameHeight ) );
+		}
+	}
+	
+	public void update(TGPainter painter, boolean makeBuffer) {
+		this.width = 0;
+		this.height = 0;
+		if(getFirstFret() <= 0 ){
+			this.calculateFirstFret();
+		}
+		if( (this.style & TGLayout.DISPLAY_CHORD_NAME) != 0 ){
+			this.updateName(painter);
+			this.width = Math.max(this.width,this.nameWidth);
+			this.height += this.nameHeight;
+		}
+		if( (this.style & TGLayout.DISPLAY_CHORD_DIAGRAM) != 0 ){
+			this.updateDiagram( (makeBuffer ? painter : null ) );
+			this.width = Math.max(this.width,this.diagramWidth);
+			this.height += this.diagramHeight;
+		}
+	}
+	
+	protected void updateName(TGPainter painter){
+		String name = getName();
+		if(painter == null || name == null || name.length() == 0){
+			this.nameWidth = 0;
+			this.nameHeight = 0;
+			return;
+		}
+		this.nameWidth = painter.getFMWidth(name);
+		this.nameHeight = painter.getFMHeight();
+	}
+	
+	protected void updateDiagram(TGResourceFactory bufferFactory){
+		TGFont font = getFirstFretFont();
+		this.diagramWidth = getStringSpacing() + (getStringSpacing() * countStrings()) + ((font != null)?getFirstFretSpacing():0);
+		this.diagramHeight = getFretSpacing() + (getFretSpacing() * MAX_FRETS);
+		if(bufferFactory != null && (this.diagram == null || this.diagram.isDisposed())){
+			this.diagram = bufferFactory.createImage(this.diagramWidth,this.diagramHeight);
+			TGPainter painterBuffer = this.diagram.createPainter();
+			paintDiagram(painterBuffer, 0, 0);
+			painterBuffer.dispose();
+		}
+	}
+	
+	protected void paintDiagram(TGPainter painter, int fromX, int fromY){
+		TGFont font = getFirstFretFont();
+		painter.setBackground(getBackgroundColor());
+		painter.initPath(TGPainter.PATH_FILL);
+		painter.addRectangle(fromX, fromY, this.diagramWidth, this.diagramHeight);
+		painter.closePath();
+		painter.setForeground(getColor());
+		
+		//dibujo las cuerdas
+		int x = fromX + getStringSpacing();
+		int y = fromY + getFretSpacing();
+		
+		if(font != null){
+			String firstFretString = Integer.toString(getFirstFret());
+			painter.setFont(font);
+			painter.drawString(firstFretString,fromX + (getFirstFretSpacing() - painter.getFMWidth(firstFretString)),Math.round(y + ((getFretSpacing() / 2f) - (painter.getFMHeight() / 2f))));
+			x += getFirstFretSpacing();
+		}
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		for(int i = 0;i < getStrings().length;i++){
+			int x1 = x + (i * getStringSpacing());
+			int x2 = x + (i * getStringSpacing());
+			int y1 = y;
+			int y2 = y + ((getFretSpacing() * (MAX_FRETS - 1)));
+			painter.moveTo(x1,y1);
+			painter.lineTo(x2,y2);
+		}
+		painter.closePath();
+		
+		//dibujo las cegillas
+		painter.initPath();
+		painter.setAntialias(false);
+		for(int i = 0;i < MAX_FRETS;i++){
+			int x1 = x;
+			int x2 = x + ((getStringSpacing() * (countStrings() - 1)));
+			int y1 = y + (i * getFretSpacing());
+			int y2 = y + (i * getFretSpacing());
+			painter.moveTo(x1,y1);
+			painter.lineTo(x2,y2);
+		}
+		painter.closePath();
+		
+		painter.setLineWidth(1);
+		//dibujo las notas
+		for(int i = 0;i < getStrings().length;i++){
+			int fret = getFretValue(i);
+			int noteX = x + ((getStringSpacing() * (countStrings() - 1)) - (getStringSpacing() * i));
+			if(fret < 0){
+				painter.initPath();
+				painter.moveTo((noteX - (getNoteSize() / 2)), fromY);
+				painter.lineTo((noteX + (getNoteSize() / 2)), fromY + getNoteSize());
+				painter.moveTo((noteX + (getNoteSize() / 2)), fromY);
+				painter.lineTo((noteX - (getNoteSize() / 2)), fromY + getNoteSize());
+				painter.closePath();
+			}
+			else if(fret == 0){
+				painter.initPath();
+				painter.addOval(noteX - (getNoteSize() / 2),fromY,getNoteSize(),getNoteSize());
+				painter.closePath();
+			}
+			else{
+				painter.setBackground( (this.tonic >= 0 && ( (getStringValue(i + 1) + fret) % 12) == this.tonic)?getTonicColor():getNoteColor());
+				painter.initPath(TGPainter.PATH_FILL);
+				fret -= (getFirstFret() - 1);
+				int noteY = y + ((getFretSpacing() * fret) - (getFretSpacing() / 2 ));
+				painter.addOval(noteX - (getNoteSize() / 2),noteY - (getNoteSize() / 2),(getNoteSize() + 1),(getNoteSize() + 1));
+				painter.closePath();
+			}
+		}
+	}
+	
+	public void calculateFirstFret(){
+		int minimum = -1;
+		int maximum = -1;
+		boolean zero = false;
+		for (int i = 0; i < getStrings().length; i++) {
+			int fretValue = getFretValue(i);
+			zero = (zero || fretValue == 0);
+			if(fretValue > 0){
+				minimum = (minimum < 0)?fretValue:Math.min(minimum,fretValue);
+				maximum = (Math.max(maximum,fretValue));
+			}
+		}
+		int firstFret = (zero && maximum < MAX_FRETS)?1:minimum;
+		setFirstFret( Math.max(firstFret,1) );
+	}
+	
+	private int getStringValue(int number){
+		TGString string = getBeat().getMeasure().getTrack().getString(number);
+		return string.getValue();
+	}
+	
+	public boolean isDisposed(){
+		return (this.diagram == null || this.diagram.isDisposed());
+	}
+	
+	public void dispose(){
+		if(!isDisposed()){
+			this.diagram.dispose();
+		}
+	}
+	
+	public int getPosX() {
+		return (isEditing())?this.posX:getBeatImpl().getPosX();
+	}
+	
+	public int getPaintPosition(int index){
+		return getBeatImpl().getMeasureImpl().getTs().getPosition(index);
+	}
+	
+	public TGBeatImpl getBeatImpl(){
+		return (TGBeatImpl)getBeat();
+	}
+	
+	private boolean isSameFont(TGFont f1, TGFont f2){
+		if( f1 == null && f2 == null ){
+			return true;
+		}
+		if( f1 != null && f2 != null && !f1.isDisposed() && !f2.isDisposed()){
+			boolean sameName = (f1.getName().equals(f2.getName()));
+			boolean sameBold = (f1.isBold() == f2.isBold());
+			boolean sameItalic = (f1.isItalic() == f2.isItalic());
+			boolean sameHeight = (f1.getHeight() == f2.getHeight());
+			
+			return (sameName && sameBold && sameItalic && sameHeight);
+		}
+		return false;
+	}
+	
+	private boolean isSameColor(TGColor c1, TGColor c2){
+		if( c1 == null && c2 == null ){
+			return true;
+		}
+		if( c1 != null && c2 != null && !c1.isDisposed() && !c2.isDisposed()){
+			return ( c1.getRed() == c2.getRed() && c1.getGreen() == c2.getGreen() && c1.getBlue() == c2.getBlue() );
+		}
+		return false;
+	}
+	
+	public void addFretValue(int string,int fret){
+		if(!isDisposed() && this.getFretValue(string) != fret){
+			this.dispose();
+		}
+		super.addFretValue(string, fret);
+	}
+	
+	public void setFirstFret(int firstFret) {
+		if(!isDisposed() && this.getFirstFret() != firstFret){
+			this.dispose();
+		}
+		super.setFirstFret(firstFret);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGController.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGController.java
new file mode 100644
index 0000000..f81763a
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGController.java
@@ -0,0 +1,26 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+public interface TGController {
+	
+	public TGResourceFactory getResourceFactory();
+	
+	public TGSongManager getSongManager();
+	
+	public void configureStyles( TGLayoutStyles styles );
+	
+	public int getTrackSelection();
+	
+	public boolean isRunning(TGBeat beat);
+	
+	public boolean isRunning(TGMeasure measure);
+	
+	public boolean isLoopSHeader(TGMeasureHeader measureHeader);
+	
+	public boolean isLoopEHeader(TGMeasureHeader measureHeader);
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGFactoryImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGFactoryImpl.java
new file mode 100644
index 0000000..a0d8d43
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGFactoryImpl.java
@@ -0,0 +1,55 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class TGFactoryImpl extends TGFactory{
+	
+	public TGFactoryImpl(){
+		super();
+	}
+	
+	public TGMeasureHeader newHeader(){
+		return new TGMeasureHeaderImpl(this);
+	}
+	
+	public TGTrack newTrack(){
+		return new TGTrackImpl(this);
+	}
+	
+	public TGMeasure newMeasure(TGMeasureHeader header){
+		return new TGMeasureImpl(header);
+	}
+	
+	public TGNote newNote(){
+		return new TGNoteImpl(this);
+	}
+	
+	public TGBeat newBeat(){
+		return new TGBeatImpl(this);
+	}
+	
+	public TGVoice newVoice(int index){
+		return new TGVoiceImpl(this, index);
+	}
+	
+	public TGLyric newLyric(){
+		return new TGLyricImpl();
+	}
+	
+	public TGChord newChord(int length){
+		return new TGChordImpl(length);
+	}
+	
+	public TGText newText(){
+		return new TGTextImpl();
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayout.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayout.java
new file mode 100644
index 0000000..3efaaec
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayout.java
@@ -0,0 +1,834 @@
+/*
+ * Created on 04-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public abstract class TGLayout {
+	
+	public static final int MODE_VERTICAL = 1;
+	public static final int MODE_HORIZONTAL = 2;
+	public static final int DEFAULT_MODE = MODE_HORIZONTAL;
+	
+	public static final int DISPLAY_COMPACT = 0x01;
+	public static final int DISPLAY_MULTITRACK = 0x02;
+	public static final int DISPLAY_SCORE = 0x04;
+	public static final int DISPLAY_TABLATURE = 0x08;
+	public static final int DISPLAY_CHORD_NAME = 0x10;
+	public static final int DISPLAY_CHORD_DIAGRAM = 0x20;
+	
+	private float scale;
+	private float fontScale;
+	private int style;
+	private int width;
+	private int height;
+	
+	private int minBufferSeparator;
+	private int minTopSpacing;
+	private int minScoreTabSpacing;
+	private int stringSpacing;
+	private int scoreLineSpacing;
+	private int trackSpacing;
+	private int firstTrackSpacing;
+	private int firstMeasureSpacing;
+	private int chordFretIndexSpacing;
+	private int chordStringSpacing;
+	private int chordFretSpacing;
+	private int chordNoteSize;
+	private int repeatEndingSpacing;
+	private int effectSpacing;
+	private int divisionTypeSpacing;
+	private int textSpacing;
+	private int markerSpacing;
+	private int loopMarkerSpacing;
+	private boolean bufferEnabled;
+	private boolean playModeEnabled;
+	
+	private List trackPositions;
+	
+	private TGController controller;
+	private TGResources resources;
+	private TGLayoutStyles styles;
+	
+	public TGLayout(TGController controller,int style){
+		this.controller = controller;
+		this.trackPositions = new ArrayList();
+		this.playModeEnabled = false;
+		this.resources = new TGResources(this);
+		this.styles = new TGLayoutStyles();
+		this.style = style;
+		if((this.style & DISPLAY_TABLATURE) == 0 && (this.style & DISPLAY_SCORE) == 0 ){
+			this.style |= DISPLAY_TABLATURE;
+		}
+	}
+	
+	public void loadStyles(){
+		this.loadStyles(1f);
+	}
+	
+	public void loadStyles(float scale){
+		this.setScale(scale);
+		this.setFontScale(scale);
+		this.getComponent().configureStyles(this.styles);
+		
+		this.setBufferEnabled( this.styles.isBufferEnabled() );
+		this.setStringSpacing( (int)(this.styles.getStringSpacing() * getScale() ) );
+		this.setScoreLineSpacing( (int)(this.styles.getScoreLineSpacing() * getScale() ) );
+		this.setFirstMeasureSpacing( Math.round( this.styles.getFirstMeasureSpacing() * getScale() ) );
+		this.setMinBufferSeparator( Math.round( this.styles.getMinBufferSeparator() * getScale() ) );
+		this.setMinTopSpacing( Math.round( this.styles.getMinTopSpacing() * getScale() ) );
+		this.setMinScoreTabSpacing( Math.round( this.styles.getMinScoreTabSpacing() * getScale() ) );
+		this.setFirstTrackSpacing( Math.round(this.styles.getFirstTrackSpacing() * getScale() ) );
+		this.setTrackSpacing( Math.round(this.styles.getTrackSpacing() * getScale() ) );
+		this.setChordFretIndexSpacing( Math.round( this.styles.getChordFretIndexSpacing() * getScale() ) );
+		this.setChordStringSpacing( Math.round( this.styles.getChordStringSpacing() * getScale() ) );
+		this.setChordFretSpacing( Math.round( this.styles.getChordFretSpacing() * getScale() ) );
+		this.setChordNoteSize( Math.round( this.styles.getChordNoteSize() * getScale() ) );
+		this.setRepeatEndingSpacing( Math.round( this.styles.getRepeatEndingSpacing() * getScale() ) );
+		this.setTextSpacing( Math.round( this.styles.getTextSpacing() * getScale() ) );
+		this.setMarkerSpacing( Math.round( this.styles.getMarkerSpacing() * getScale() ) );
+		this.setLoopMarkerSpacing( Math.round( this.styles.getLoopMarkerSpacing() * getScale() ) );
+		this.setDivisionTypeSpacing( Math.round( this.styles.getDivisionTypeSpacing() * getScale() ) );
+		this.setEffectSpacing( Math.round( this.styles.getEffectSpacing() * getScale() ) );
+		
+		this.getResources().load(this.styles);
+	}
+	
+	public abstract void paintSong(TGPainter painter,TGRectangle clientArea,int fromX,int fromY);
+	
+	public abstract int getMode();
+	
+	public void paint(TGPainter painter,TGRectangle clientArea,int fromX,int fromY){
+		this.playModeEnabled = false;
+		paintSong(painter,clientArea,fromX,fromY);
+	}
+	
+	public void paintMeasure(TGMeasureImpl measure,TGPainter painter,int spacing) {
+		measure.setSpacing(spacing);
+		measure.paintMeasure(this,painter);
+	}
+	
+	public void updateSong(){
+		updateMeasures();
+	}
+	
+	public void updateMeasures() {
+		int measureCount = getSongManager().getSong().countMeasureHeaders();
+		for (int measureIdx = 0; measureIdx < measureCount; measureIdx++) {
+			this.updateMeasureIndex( measureIdx );
+		}
+	}
+	
+	private void updateMeasureIndex(int index) {
+		if( index >= 0 && index < getSongManager().getSong().countMeasureHeaders() ){
+			((TGMeasureHeaderImpl)getSongManager().getSong().getMeasureHeader( index )).update(this, index);
+			
+			int trackCount = getSongManager().getSong().countTracks();
+			for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
+				TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx);
+				TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure( index );
+				measure.create(this);
+			}
+			for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
+				TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx);
+				TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure( index );
+				track.update(this);
+				measure.update(this);
+			}
+		}
+	}
+	
+	public void updateMeasureNumber(int number) {
+		TGMeasureHeader header = getSongManager().getMeasureHeader(number);
+		if( header != null ){
+			int index = getSongManager().getMeasureHeaderIndex( header );
+			if( index >= 0 ){
+				updateMeasureIndex(index);
+			}
+		}
+	}
+	
+	/**
+	 * Pinta las lineas
+	 */
+	public void paintLines(TGTrackImpl track,TGTrackSpacing ts,TGPainter painter,int x,int y,int width) {
+		if(width > 0){
+			setLineStyle(painter);
+			int tempX = ((x < 0)?0:x);
+			int tempY = y;
+			
+			//partitura
+			if( (this.style & DISPLAY_SCORE) != 0 ){
+				int posY = tempY + ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+				
+				painter.initPath();
+				painter.setAntialias(false);
+				for(int i = 1;i <= 5;i ++){
+					painter.moveTo(tempX, posY);
+					painter.lineTo(tempX + width,posY);
+					posY += getScoreLineSpacing();
+				}
+				painter.closePath();
+			}
+			//tablatura
+			if((this.style & DISPLAY_TABLATURE) != 0){
+				tempY += ts.getPosition(TGTrackSpacing.POSITION_TABLATURE);
+				
+				painter.initPath();
+				painter.setAntialias(false);
+				for(int i = 0; i < track.stringCount();i++){
+					painter.moveTo(tempX,tempY);
+					painter.lineTo(tempX + width,tempY);
+					tempY += getStringSpacing();
+				}
+				painter.closePath();
+			}
+		}
+	}
+	
+	/**
+	 * Pinta el compas y las notas que estan sonando
+	 */
+	public void paintPlayMode(TGPainter painter,TGMeasureImpl measure,TGBeatImpl beat,boolean paintMeasure){
+		this.playModeEnabled = true;
+		
+		//pinto el compas
+		if(paintMeasure){
+			measure.paintMeasure(this,painter);
+		}
+		//pinto el pulso
+		if( beat != null ){
+			beat.paint(this,painter,measure.getPosX()  + measure.getHeaderImpl().getLeftSpacing(this), measure.getPosY());
+		}
+		
+		//pinto los lyrics
+		((TGLyricImpl)measure.getTrackImpl().getLyrics()).paintCurrentNoteBeats(painter,this,measure,measure.getPosX(), measure.getPosY());
+		
+		this.playModeEnabled = false;
+	}
+	
+	protected float checkScale(){
+		float v1 = ((this.style & DISPLAY_SCORE) != 0 ? (getScoreLineSpacing() * 1.25f ) : 0 );
+		float v2 = ((this.style & DISPLAY_TABLATURE) != 0 ? getStringSpacing() : 0 );
+		float scale = (Math.max(v1,v2) / 10.0f);
+		return scale;
+	}
+	
+	protected void checkDefaultSpacing(TGTrackSpacing ts){
+		int checkPosition = -1;
+		int minBufferSeparator = getMinBufferSeparator();
+		if( (this.style & DISPLAY_SCORE) != 0 ){
+			int bufferSeparator = (ts.getPosition(TGTrackSpacing.POSITION_SCORE_UP_LINES) - ts.getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR));
+			if(bufferSeparator < minBufferSeparator ) {
+				ts.setSize(TGTrackSpacing.POSITION_BUFFER_SEPARATOR,minBufferSeparator - bufferSeparator);
+			}
+			checkPosition = ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+		}
+		else if((this.style & DISPLAY_TABLATURE) != 0){
+			int bufferSeparator = (ts.getPosition(TGTrackSpacing.POSITION_TABLATURE) - ts.getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR));
+			if(bufferSeparator < minBufferSeparator ) {
+				ts.setSize(TGTrackSpacing.POSITION_BUFFER_SEPARATOR,minBufferSeparator - bufferSeparator);
+			}
+			checkPosition = ts.getPosition(TGTrackSpacing.POSITION_TABLATURE);
+		}
+		
+		if(checkPosition >= 0 && checkPosition < getMinTopSpacing()){
+			ts.setSize(TGTrackSpacing.POSITION_TOP, (getMinTopSpacing() - checkPosition));
+		}
+	}
+	
+	/**
+	 * Calcula el espacio minimo entre negras, dependiendo de la duracion de la nota 
+	 */
+	public int getSpacingForQuarter(TGDuration duration){
+		double spacing = (((double)TGDuration.QUARTER_TIME / (double)duration.getTime()) * getMinSpacing(duration));
+		return  (int)spacing;
+	}
+	
+	/**
+	 * Calcula el Espacio minimo que quedara entre nota y nota
+	 */
+	protected float getMinSpacing(TGDuration duration){
+		float scale = getScale();
+		switch(duration.getValue()){
+			case TGDuration.WHOLE:
+				return (50.0f * scale);
+			case TGDuration.HALF:
+				return (30.0f * scale);
+			case TGDuration.QUARTER:
+				return (25.0f * scale);
+			case TGDuration.EIGHTH:
+				return (20.0f * scale);
+			default:
+				return (18.0f * scale);
+		}
+	}
+	
+	/**
+	 * Calcula el Espacio que ocupara el pulso
+	 */
+	public float getBeatWidth(TGVoice voice){
+		float scale = getScale();
+		TGDuration duration = voice.getDuration();
+		if(duration != null){
+			switch(duration.getValue()){
+				case TGDuration.WHOLE:
+					return (30.0f * scale);
+				case TGDuration.HALF:
+					return (25.0f * scale);
+				case TGDuration.QUARTER:
+					return (21.0f * scale);
+				case TGDuration.EIGHTH:
+					return (20.0f * scale);
+				case TGDuration.SIXTEENTH:
+					return (19.0f * scale);
+				case TGDuration.THIRTY_SECOND:
+					return (18.0f * scale);
+				default:
+					return (17.0f * scale);
+			}
+		}
+		return (20.0f * scale);
+	}
+	
+	/**
+	 * Calcula el Espacio que ocupara el pulso
+	 */
+	public float getVoiceWidth(TGVoiceImpl voice){
+		float scale = getScale();
+		TGDuration duration = voice.getDuration();
+		if(duration != null){
+			switch(duration.getValue()){
+				case TGDuration.WHOLE:
+					return (30.0f * scale);
+				case TGDuration.HALF:
+					return (25.0f * scale);
+				case TGDuration.QUARTER:
+					return (21.0f * scale);
+				case TGDuration.EIGHTH:
+					return (20.0f * scale);
+				case TGDuration.SIXTEENTH:
+					return (19.0f * scale);
+				case TGDuration.THIRTY_SECOND:
+					return (18.0f * scale);
+				default:
+					return (17.0f * scale);
+			}
+		}
+		return (20.0f * scale);
+	}
+	
+	public boolean isPlayModeEnabled(){
+		return this.playModeEnabled;
+	}
+	
+	public void setMeasureNumberStyle(TGPainter painter){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground(getResources().getColorRed());
+	}
+	
+	public void setDivisionsStyle(TGPainter painter, boolean fill){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setBackground( (fill ? getResources().getColorBlack() :getResources().getBackgroundColor() ));
+		painter.setForeground(getResources().getColorBlack());
+	}
+	
+	public void setTempoStyle(TGPainter painter, boolean fontStyle){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground( ( fontStyle ? getResources().getBackgroundColor() : getResources().getColorBlack() ));
+	}
+	
+	public void setTripletFeelStyle(TGPainter painter, boolean fontStyle){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground( ( fontStyle ? getResources().getBackgroundColor() : getResources().getColorBlack() ));
+	}
+	
+	public void setMeasurePlayingStyle(TGPainter painter){
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground(getResources().getColorBlack());
+	}
+	
+	public void setLyricStyle(TGPainter painter,boolean playMode){
+		painter.setFont(getResources().getLyricFont());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getColorBlack()) );
+	}
+	
+	public void setMarkerStyle(TGPainter painter, TGColor color){
+		painter.setFont(getResources().getMarkerFont());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground(color);
+	}
+	
+	public void setTextStyle(TGPainter painter){
+		painter.setFont(getResources().getTextFont());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground(getResources().getColorBlack());
+	}
+	
+	public void setTimeSignatureStyle(TGPainter painter){
+		painter.setFont(getResources().getTimeSignatureFont());
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getBackgroundColor());
+	}
+	
+	public void setKeySignatureStyle(TGPainter painter){
+		painter.setBackground(getResources().getColorBlack());
+	}
+	
+	public void setClefStyle(TGPainter painter){
+		painter.setBackground(getResources().getColorBlack());
+	}
+	
+	public void setLineStyle(TGPainter painter){
+		painter.setLineWidth(1);
+		painter.setForeground(getResources().getLineColor());
+	}
+	
+	public void setScoreSilenceStyle(TGPainter painter,boolean playMode){
+		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
+		painter.setBackground( (playMode ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
+	}
+	
+	public void setTabSilenceStyle(TGPainter painter,boolean playMode){
+		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() ));
+		painter.setBackground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() ));
+	}
+	
+	public void setScoreNoteStyle(TGPainter painter,boolean playing){
+		painter.setForeground( (playing ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
+		painter.setBackground( (playing ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
+	}
+	
+	public void setScoreNoteFooterStyle(TGPainter painter){
+		painter.setForeground( getResources().getScoreNoteColor());
+		painter.setBackground( getResources().getScoreNoteColor());
+	}
+	
+	public void setScoreEffectStyle(TGPainter painter){
+		painter.setForeground( getResources().getScoreNoteColor());
+		painter.setBackground( getResources().getScoreNoteColor());
+	}
+	
+	public void setTabNoteStyle(TGPainter painter,boolean playMode){
+		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() ));
+		painter.setBackground( getResources().getBackgroundColor() );
+		painter.setFont(getResources().getNoteFont());
+	}
+	
+	public void setTabNoteFooterStyle(TGPainter painter){
+		painter.setForeground( getResources().getTabNoteColor());
+		painter.setBackground( getResources().getTabNoteColor());
+	}
+	
+	public void setTabEffectStyle(TGPainter painter){
+		painter.setForeground( getResources().getTabNoteColor());
+		painter.setBackground( getResources().getTabNoteColor());
+	}
+	
+	public void setTabGraceStyle(TGPainter painter){
+		painter.setFont(getResources().getGraceFont());
+		painter.setForeground(getResources().getTabNoteColor());
+		painter.setBackground(getResources().getBackgroundColor());
+	}
+	
+	public void setPlayNoteColor(TGPainter painter){
+		painter.setForeground(getResources().getPlayNoteColor());
+		painter.setBackground(getResources().getPlayNoteColor());
+	}
+	
+	public void setOfflineEffectStyle(TGPainter painter){
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setFont(getResources().getDefaultFont());
+	}
+	
+	public void setDotStyle(TGPainter painter){
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getColorBlack());
+	}
+	
+	public void setDivisionTypeStyle(TGPainter painter){
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setFont(getResources().getDefaultFont());
+	}
+	
+	public void setRepeatEndingStyle(TGPainter painter){
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setFont(getResources().getDefaultFont());
+	}
+	
+	public void setChordStyle(TGChordImpl chord){
+		chord.setFont(getResources().getChordFont());
+		chord.setForegroundColor(getResources().getColorBlack());
+		chord.setBackgroundColor(getResources().getBackgroundColor());
+		chord.setColor(getResources().getLineColor());
+		chord.setNoteColor(getResources().getTabNoteColor());
+		chord.setTonicColor(getResources().getTabNoteColor());
+		chord.setStyle(this.style);
+		chord.setFretSpacing(getChordFretSpacing());
+		chord.setStringSpacing(getChordStringSpacing());
+		chord.setNoteSize(getChordNoteSize());
+		chord.setFirstFretSpacing(getChordFretIndexSpacing());
+		chord.setFirstFretFont(getResources().getChordFretFont());
+	}
+	
+	public void setLoopSMarkerStyle(TGPainter painter){
+		painter.setBackground(getResources().getLoopSMarkerColor());
+	}
+	
+	public void setLoopEMarkerStyle(TGPainter painter){
+		painter.setBackground(getResources().getLoopEMarkerColor());
+	}
+	
+	public TGRectangle getNoteOrientation(TGPainter painter,int x,int y,TGNote note){
+		String noteAsString = null;
+		if (note.isTiedNote()){
+			noteAsString = "L";
+			noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString;
+		}else if(note.getEffect().isDeadNote()){
+			noteAsString = "X";
+			noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString;
+		}else{
+			noteAsString = Integer.toString(note.getValue());
+			noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString;
+		}
+		return getOrientation(painter,x,y,noteAsString);
+	}
+	
+	public TGRectangle getOrientation(TGPainter painter,int x,int y,String s){
+		int fmWidth = painter.getFMWidth(s);
+		int fmAscent = painter.getFMAscent();
+		int fSize = painter.getFontSize();
+		return new TGRectangle((x - (fmWidth / 2)),(y - (fmAscent - fSize) - (fSize / 2)),fmWidth, fSize );
+		//TGDimension size = painter.getStringExtent(s);
+		//return new TGRectangle((x - (size.getWidth() / 2)),(y - (size.getHeight() / 2)),size.getWidth(), size.getHeight() );
+	}
+	
+	public TGSongManager getSongManager() {
+		return getComponent().getSongManager();
+	}
+	
+	public void setComponent(TGController controller){
+		this.controller = controller;
+	}
+	
+	public TGController getComponent(){
+		return this.controller;
+	}
+	
+	public TGResources getResources(){
+		return this.resources;
+	}
+	
+	public int getHeight() {
+		return this.height;
+	}
+	
+	public void setHeight(int height) {
+		this.height = height;
+	}
+	
+	public int getWidth() {
+		return this.width;
+	}
+	
+	public void setWidth(int width) {
+		this.width = width;
+	}
+	
+	public int getStyle(){
+		return this.style;
+	}
+	
+	public void setStyle(int style){
+		this.style = style;
+	}
+	
+	public float getScale() {
+		return this.scale;
+	}
+	
+	public void setScale(float scale) {
+		this.scale = scale;
+	}
+	
+	public float getFontScale() {
+		return this.fontScale;
+	}
+	
+	public void setFontScale(float fontScale) {
+		this.fontScale = fontScale;
+	}
+	
+	public boolean isBufferEnabled() {
+		return this.bufferEnabled;
+	}
+	
+	public void setBufferEnabled(boolean bufferEnabled) {
+		this.bufferEnabled = bufferEnabled;
+	}
+	
+	public int getFirstMeasureSpacing() {
+		return this.firstMeasureSpacing;
+	}
+	
+	public void setFirstMeasureSpacing(int firstMeasureSpacing) {
+		this.firstMeasureSpacing = firstMeasureSpacing;
+	}
+	
+	public int getMinBufferSeparator() {
+		return this.minBufferSeparator;
+	}
+	
+	public void setMinBufferSeparator(int minBufferSeparator) {
+		this.minBufferSeparator = minBufferSeparator;
+	}
+	
+	public int getMinTopSpacing() {
+		return this.minTopSpacing;
+	}
+	
+	public void setMinTopSpacing(int minTopSpacing) {
+		this.minTopSpacing = minTopSpacing;
+	}
+	
+	public int getMinScoreTabSpacing() {
+		return this.minScoreTabSpacing;
+	}
+	
+	public void setMinScoreTabSpacing(int minScoreTabSpacing) {
+		this.minScoreTabSpacing = minScoreTabSpacing;
+	}
+	
+	public int getScoreLineSpacing() {
+		return this.scoreLineSpacing;
+	}
+	
+	public void setScoreLineSpacing(int scoreLineSpacing) {
+		this.scoreLineSpacing = scoreLineSpacing;
+	}
+	
+	public int getFirstTrackSpacing() {
+		return this.firstTrackSpacing;
+	}
+	
+	public void setFirstTrackSpacing(int firstTrackSpacing) {
+		this.firstTrackSpacing = firstTrackSpacing;
+	}
+	
+	public int getTrackSpacing() {
+		return this.trackSpacing;
+	}
+	
+	public void setTrackSpacing(int trackSpacing) {
+		this.trackSpacing = trackSpacing;
+	}
+	
+	public int getStringSpacing() {
+		return this.stringSpacing;
+	}
+	
+	public void setStringSpacing(int stringSpacing) {
+		this.stringSpacing = stringSpacing;
+	}
+	
+	public int getChordFretIndexSpacing() {
+		return this.chordFretIndexSpacing;
+	}
+	
+	public void setChordFretIndexSpacing(int chordFretIndexSpacing) {
+		this.chordFretIndexSpacing = chordFretIndexSpacing;
+	}
+	
+	public int getChordStringSpacing() {
+		return this.chordStringSpacing;
+	}
+	
+	public void setChordStringSpacing(int chordStringSpacing) {
+		this.chordStringSpacing = chordStringSpacing;
+	}
+	
+	public int getChordFretSpacing() {
+		return this.chordFretSpacing;
+	}
+	
+	public void setChordFretSpacing(int chordFretSpacing) {
+		this.chordFretSpacing = chordFretSpacing;
+	}
+	
+	public int getChordNoteSize() {
+		return this.chordNoteSize;
+	}
+	
+	public void setChordNoteSize(int chordNoteSize) {
+		this.chordNoteSize = chordNoteSize;
+	}
+	
+	public int getRepeatEndingSpacing() {
+		return this.repeatEndingSpacing;
+	}
+	
+	public void setRepeatEndingSpacing(int repeatEndingSpacing) {
+		this.repeatEndingSpacing = repeatEndingSpacing;
+	}
+	
+	public int getDivisionTypeSpacing() {
+		return this.divisionTypeSpacing;
+	}
+	
+	public void setDivisionTypeSpacing(int divisionTypeSpacing) {
+		this.divisionTypeSpacing = divisionTypeSpacing;
+	}
+	
+	public int getTextSpacing() {
+		return this.textSpacing;
+	}
+	
+	public void setTextSpacing(int textSpacing) {
+		this.textSpacing = textSpacing;
+	}
+	
+	public int getMarkerSpacing() {
+		return this.markerSpacing;
+	}
+	
+	public void setMarkerSpacing(int markerSpacing) {
+		this.markerSpacing = markerSpacing;
+	}
+	
+	public int getLoopMarkerSpacing() {
+		return this.loopMarkerSpacing;
+	}
+	
+	public void setLoopMarkerSpacing(int loopMarkerSpacing) {
+		this.loopMarkerSpacing = loopMarkerSpacing;
+	}
+	
+	public int getEffectSpacing() {
+		return this.effectSpacing;
+	}
+	
+	public void setEffectSpacing(int effectSpacing) {
+		this.effectSpacing = effectSpacing;
+	}
+	
+	public int getDefaultChordSpacing(){
+		int spacing = 0;
+		if( (this.style & DISPLAY_CHORD_DIAGRAM) != 0 ){
+			spacing += ( (TGChordImpl.MAX_FRETS * getChordFretSpacing()) + getChordFretSpacing());
+		}
+		if( (this.style & DISPLAY_CHORD_NAME) != 0 ){
+			spacing += Math.round( (15f * getScale()) );
+		}
+		return spacing;
+	}
+	
+	public boolean isFirstMeasure(TGMeasureHeader mh){
+		return (mh.getNumber() == 1);
+	}
+	
+	public boolean isFirstMeasure(TGMeasure measure){
+		return (isFirstMeasure(measure.getHeader()));
+	}
+	
+	public boolean isLastMeasure(TGMeasureHeader mh){
+		return (mh.getNumber() == getSongManager().getSong().countMeasureHeaders());
+	}
+	
+	public boolean isLastMeasure(TGMeasure measure){
+		return (isLastMeasure(measure.getHeader()));
+	}
+	
+	public boolean hasLoopMarker(TGMeasureHeader mh){
+		return (getComponent().isLoopSHeader(mh) || getComponent().isLoopEHeader(mh));
+	}
+	
+	public boolean hasLoopMarker(TGMeasure measure){
+		return (hasLoopMarker(measure.getHeader()));
+	}
+	
+	protected void clearTrackPositions(){
+		this.trackPositions.clear();
+	}
+	
+	protected void addTrackPosition(int track,int posY,int height){
+		this.trackPositions.add(new TrackPosition(track,posY,height));
+	}
+	
+	public int getTrackNumberAt(int y){
+		TrackPosition trackPos = getTrackPositionAt(y);
+		return ((trackPos != null)?trackPos.getTrack():-1);
+	}
+	
+	public TrackPosition getTrackPositionAt(int y){
+		TrackPosition trackPos = null;
+		int minorDistance = 0;
+		
+		Iterator it = this.trackPositions.iterator();
+		while(it.hasNext()){
+			TrackPosition pos = (TrackPosition)it.next();
+			int distanceY = Math.min(Math.abs(y - (pos.getPosY())), Math.abs(y - (pos.getPosY() + pos.getHeight() - 10)));
+			if(trackPos == null || distanceY < minorDistance){
+				trackPos = pos;
+				minorDistance = distanceY;
+			}
+		}
+		return trackPos;
+	}
+	
+	public void disposeLayout(){
+		this.getResources().dispose();
+	}
+	
+	public class TrackPosition{
+		private int track;
+		private int posY;
+		private int height;
+		
+		public TrackPosition(int track,int posY,int height){
+			this.track = track;
+			this.posY = posY;
+			this.height = height;
+		}
+		
+		public int getPosY() {
+			return this.posY;
+		}
+		
+		public int getHeight() {
+			return this.height;
+		}
+		
+		public int getTrack() {
+			return this.track;
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayoutHorizontal.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayoutHorizontal.java
new file mode 100644
index 0000000..20a1ad4
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayoutHorizontal.java
@@ -0,0 +1,126 @@
+/*
+ * Created on 04-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGLayoutHorizontal extends TGLayout{
+	
+	public TGLayoutHorizontal(TGController controller,int style){
+		super(controller,style);
+	}
+	
+	public int getMode(){
+		return MODE_HORIZONTAL;
+	}
+	
+	public void paintSong(TGPainter painter,TGRectangle clientArea,int fromX,int fromY) {
+		this.setWidth(0);
+		this.setHeight(0);
+		this.clearTrackPositions();
+		
+		int style = getStyle();
+		int number = getComponent().getTrackSelection();
+		int posY = fromY + getFirstTrackSpacing();
+		int height = getFirstTrackSpacing();
+		int trackHeight;
+		Iterator tracks = getSongManager().getSong().getTracks();
+		while(tracks.hasNext()){
+			TGTrackImpl track = (TGTrackImpl) tracks.next();
+			if(number < 0 || track.getNumber() == number){
+				
+				TGTrackSpacing ts = new TGTrackSpacing(this) ;
+				ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0 ?( (getScoreLineSpacing() * 5) ):0));
+				((TGLyricImpl)track.getLyrics()).start();
+				
+				//------AUTO_SPACING---------------------------------------
+				int maxY = 0;
+				int minY = 0;
+				// Need to score extra-lines in edition mode
+				if( (style & DISPLAY_TABLATURE) == 0 && (style & DISPLAY_SCORE) != 0 ){
+					maxY = ((getScoreLineSpacing() * 4) + (getScoreLineSpacing() * 4));
+					minY = -(getScoreLineSpacing() * 3);
+				}
+				
+				Iterator measures = track.getMeasures();
+				while(measures.hasNext()){
+					TGMeasureImpl measure = (TGMeasureImpl)measures.next();
+					maxY = (measure.getMaxY() > maxY)?measure.getMaxY():maxY;
+					minY = (measure.getMinY() < minY)?measure.getMinY():minY;
+					measure.registerSpacing(this,ts);
+				}
+				ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, ( (style & DISPLAY_SCORE) != 0 ?Math.abs(minY):0));
+				if((style & DISPLAY_SCORE) != 0 && maxY > track.getScoreHeight()){
+					ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (maxY - track.getScoreHeight()) );
+				}
+				if((style & DISPLAY_TABLATURE) != 0){
+					ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(minY), getStringSpacing()) ));
+					ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ?  track.getTabHeight() + getStringSpacing() + 1 : Math.max(maxY, track.getTabHeight() + getStringSpacing() + 1) ));
+				}
+				ts.setSize(TGTrackSpacing.POSITION_LYRIC,10);
+				checkDefaultSpacing(ts);
+				
+				//----------------------------------------------------
+				paintMeasures(track,painter,fromX,posY,ts,clientArea);
+				paintLines(track,ts,painter,fromX + (getWidth() + 2),posY,(clientArea.getWidth() - (fromX + getWidth()) ));
+				
+				trackHeight = ts.getSize();
+				addTrackPosition(track.getNumber(),posY,trackHeight);
+				
+				posY += trackHeight + getTrackSpacing();
+				height += trackHeight + getTrackSpacing();
+			}
+		}
+		if(getWidth() > clientArea.getWidth()){
+			// solo para dar un espacio.
+			this.setWidth( getWidth() + getFirstMeasureSpacing());
+		}
+		this.setHeight(height);
+	}
+	
+	public void paintMeasures(TGTrackImpl track,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts,TGRectangle clientArea) {
+		int posX = (fromX + getFirstMeasureSpacing());
+		int posY = fromY;
+		int width = getFirstMeasureSpacing();
+		
+		Iterator measures = track.getMeasures();
+		while(measures.hasNext()){
+			TGMeasureImpl measure = (TGMeasureImpl)measures.next();
+			
+			//asigno la posicion dentro del compas
+			measure.setPosX(posX);
+			measure.setPosY(posY);
+			measure.setTs(ts);
+			
+			((TGLyricImpl)track.getLyrics()).setCurrentMeasure(measure);
+			
+			//Solo pinto lo que entre en pantalla
+			boolean isAtX = ((posX + measure.getWidth(this)) > clientArea.getX() - 100 && posX < clientArea.getX() + clientArea.getWidth() + measure.getWidth(this) + 100);
+			boolean isAtY = (posY + ts.getSize() > clientArea.getY() && posY < clientArea.getY() + clientArea.getHeight() + 80);
+			if(isAtX && isAtY){
+				paintMeasure(measure,painter,0);
+				((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,measure,posX, posY);
+			}else{
+				measure.setOutOfBounds(true);
+			}
+			
+			int measureWidth = measure.getWidth(this);
+			posX += measureWidth;
+			width += measureWidth;
+		}
+		this.setWidth(Math.max(getWidth(),width));
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayoutStyles.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayoutStyles.java
new file mode 100644
index 0000000..bb36d26
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayoutStyles.java
@@ -0,0 +1,323 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFontModel;
+
+public class TGLayoutStyles {
+	
+	private boolean bufferEnabled;
+	private int minBufferSeparator;
+	private int minTopSpacing;
+	private int minScoreTabSpacing;
+	private int stringSpacing;
+	private int scoreLineSpacing;
+	private int trackSpacing;
+	private int firstTrackSpacing;
+	private int firstMeasureSpacing;
+	private int chordFretIndexSpacing;
+	private int chordStringSpacing;
+	private int chordFretSpacing;
+	private int chordNoteSize;
+	private int repeatEndingSpacing;
+	private int effectSpacing;
+	private int divisionTypeSpacing;
+	private int textSpacing;
+	private int markerSpacing;
+	private int loopMarkerSpacing;
+	private TGFontModel defaultFont;
+	private TGFontModel noteFont;
+	private TGFontModel timeSignatureFont;
+	private TGFontModel lyricFont;
+	private TGFontModel textFont;
+	private TGFontModel markerFont;
+	private TGFontModel graceFont;
+	private TGFontModel chordFont;
+	private TGFontModel chordFretFont;
+	private TGColorModel backgroundColor;
+	private TGColorModel lineColor;
+	private TGColorModel scoreNoteColor;
+	private TGColorModel tabNoteColor;
+	private TGColorModel playNoteColor;
+	private TGColorModel loopSMarkerColor;
+	private TGColorModel loopEMarkerColor;
+	
+	public boolean isBufferEnabled() {
+		return this.bufferEnabled;
+	}
+	
+	public void setBufferEnabled(boolean bufferEnabled) {
+		this.bufferEnabled = bufferEnabled;
+	}
+	
+	public int getMinBufferSeparator() {
+		return this.minBufferSeparator;
+	}
+	
+	public void setMinBufferSeparator(int minBufferSeparator) {
+		this.minBufferSeparator = minBufferSeparator;
+	}
+	
+	public int getMinTopSpacing() {
+		return this.minTopSpacing;
+	}
+	
+	public void setMinTopSpacing(int minTopSpacing) {
+		this.minTopSpacing = minTopSpacing;
+	}
+	
+	public int getMinScoreTabSpacing() {
+		return this.minScoreTabSpacing;
+	}
+	
+	public void setMinScoreTabSpacing(int minScoreTabSpacing) {
+		this.minScoreTabSpacing = minScoreTabSpacing;
+	}
+	
+	public int getStringSpacing() {
+		return this.stringSpacing;
+	}
+	
+	public void setStringSpacing(int stringSpacing) {
+		this.stringSpacing = stringSpacing;
+	}
+	
+	public int getScoreLineSpacing() {
+		return this.scoreLineSpacing;
+	}
+	
+	public void setScoreLineSpacing(int scoreLineSpacing) {
+		this.scoreLineSpacing = scoreLineSpacing;
+	}
+	
+	public int getTrackSpacing() {
+		return this.trackSpacing;
+	}
+	
+	public void setTrackSpacing(int trackSpacing) {
+		this.trackSpacing = trackSpacing;
+	}
+	
+	public int getFirstTrackSpacing() {
+		return this.firstTrackSpacing;
+	}
+	
+	public void setFirstTrackSpacing(int firstTrackSpacing) {
+		this.firstTrackSpacing = firstTrackSpacing;
+	}
+	
+	public int getFirstMeasureSpacing() {
+		return this.firstMeasureSpacing;
+	}
+	
+	public void setFirstMeasureSpacing(int firstMeasureSpacing) {
+		this.firstMeasureSpacing = firstMeasureSpacing;
+	}
+	
+	public int getChordFretIndexSpacing() {
+		return this.chordFretIndexSpacing;
+	}
+	
+	public void setChordFretIndexSpacing(int chordFretIndexSpacing) {
+		this.chordFretIndexSpacing = chordFretIndexSpacing;
+	}
+	
+	public int getChordStringSpacing() {
+		return this.chordStringSpacing;
+	}
+	
+	public void setChordStringSpacing(int chordStringSpacing) {
+		this.chordStringSpacing = chordStringSpacing;
+	}
+	
+	public int getChordFretSpacing() {
+		return this.chordFretSpacing;
+	}
+	
+	public void setChordFretSpacing(int chordFretSpacing) {
+		this.chordFretSpacing = chordFretSpacing;
+	}
+	
+	public int getChordNoteSize() {
+		return this.chordNoteSize;
+	}
+	
+	public void setChordNoteSize(int chordNoteSize) {
+		this.chordNoteSize = chordNoteSize;
+	}
+	
+	public int getRepeatEndingSpacing() {
+		return this.repeatEndingSpacing;
+	}
+	
+	public void setRepeatEndingSpacing(int repeatEndingSpacing) {
+		this.repeatEndingSpacing = repeatEndingSpacing;
+	}
+	
+	public int getEffectSpacing() {
+		return this.effectSpacing;
+	}
+	
+	public void setEffectSpacing(int effectSpacing) {
+		this.effectSpacing = effectSpacing;
+	}
+	
+	public int getDivisionTypeSpacing() {
+		return this.divisionTypeSpacing;
+	}
+	
+	public void setDivisionTypeSpacing(int divisionTypeSpacing) {
+		this.divisionTypeSpacing = divisionTypeSpacing;
+	}
+	
+	public int getTextSpacing() {
+		return this.textSpacing;
+	}
+	
+	public void setTextSpacing(int textSpacing) {
+		this.textSpacing = textSpacing;
+	}
+	
+	public int getMarkerSpacing() {
+		return this.markerSpacing;
+	}
+	
+	public void setMarkerSpacing(int markerSpacing) {
+		this.markerSpacing = markerSpacing;
+	}
+	
+	public int getLoopMarkerSpacing() {
+		return this.loopMarkerSpacing;
+	}
+	
+	public void setLoopMarkerSpacing(int loopMarkerSpacing) {
+		this.loopMarkerSpacing = loopMarkerSpacing;
+	}
+	
+	public TGFontModel getDefaultFont() {
+		return this.defaultFont;
+	}
+	
+	public void setDefaultFont(TGFontModel defaultFont) {
+		this.defaultFont = defaultFont;
+	}
+	
+	public TGFontModel getNoteFont() {
+		return this.noteFont;
+	}
+	
+	public void setNoteFont(TGFontModel noteFont) {
+		this.noteFont = noteFont;
+	}
+	
+	public TGFontModel getTimeSignatureFont() {
+		return this.timeSignatureFont;
+	}
+	
+	public void setTimeSignatureFont(TGFontModel timeSignatureFont) {
+		this.timeSignatureFont = timeSignatureFont;
+	}
+	
+	public TGFontModel getLyricFont() {
+		return this.lyricFont;
+	}
+	
+	public void setLyricFont(TGFontModel lyricFont) {
+		this.lyricFont = lyricFont;
+	}
+	
+	public TGFontModel getTextFont() {
+		return this.textFont;
+	}
+	
+	public void setTextFont(TGFontModel textFont) {
+		this.textFont = textFont;
+	}
+	
+	public TGFontModel getMarkerFont() {
+		return this.markerFont;
+	}
+	
+	public void setMarkerFont(TGFontModel markerFont) {
+		this.markerFont = markerFont;
+	}
+	
+	public TGFontModel getGraceFont() {
+		return this.graceFont;
+	}
+	
+	public void setGraceFont(TGFontModel graceFont) {
+		this.graceFont = graceFont;
+	}
+	
+	public TGFontModel getChordFont() {
+		return this.chordFont;
+	}
+	
+	public void setChordFont(TGFontModel chordFont) {
+		this.chordFont = chordFont;
+	}
+	
+	public TGFontModel getChordFretFont() {
+		return this.chordFretFont;
+	}
+	
+	public void setChordFretFont(TGFontModel chordFretFont) {
+		this.chordFretFont = chordFretFont;
+	}
+	
+	public TGColorModel getBackgroundColor() {
+		return this.backgroundColor;
+	}
+	
+	public void setBackgroundColor(TGColorModel backgroundColor) {
+		this.backgroundColor = backgroundColor;
+	}
+	
+	public TGColorModel getLineColor() {
+		return this.lineColor;
+	}
+	
+	public void setLineColor(TGColorModel lineColor) {
+		this.lineColor = lineColor;
+	}
+	
+	public TGColorModel getScoreNoteColor() {
+		return this.scoreNoteColor;
+	}
+	
+	public void setScoreNoteColor(TGColorModel scoreNoteColor) {
+		this.scoreNoteColor = scoreNoteColor;
+	}
+	
+	public TGColorModel getTabNoteColor() {
+		return this.tabNoteColor;
+	}
+	
+	public void setTabNoteColor(TGColorModel tabNoteColor) {
+		this.tabNoteColor = tabNoteColor;
+	}
+	
+	public TGColorModel getPlayNoteColor() {
+		return this.playNoteColor;
+	}
+	
+	public void setPlayNoteColor(TGColorModel playNoteColor) {
+		this.playNoteColor = playNoteColor;
+	}
+	
+	public TGColorModel getLoopSMarkerColor() {
+		return this.loopSMarkerColor;
+	}
+	
+	public void setLoopSMarkerColor(TGColorModel loopSMarkerColor) {
+		this.loopSMarkerColor = loopSMarkerColor;
+	}
+	
+	public TGColorModel getLoopEMarkerColor() {
+		return this.loopEMarkerColor;
+	}
+	
+	public void setLoopEMarkerColor(TGColorModel loopEMarkerColor) {
+		this.loopEMarkerColor = loopEMarkerColor;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayoutVertical.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayoutVertical.java
new file mode 100644
index 0000000..debe68f
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLayoutVertical.java
@@ -0,0 +1,203 @@
+/*
+ * Created on 04-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGLayoutVertical extends TGLayout{
+	
+	private int maximumWidth;
+	private int marginLeft;
+	private int marginRight;
+	
+	public TGLayoutVertical(TGController controller,int style){
+		super(controller,style);
+	}
+	
+	public int getMode(){
+		return MODE_VERTICAL;
+	}
+	
+	public void paintSong(TGPainter painter,TGRectangle clientArea,int fromX,int fromY) {
+		this.marginLeft = getFirstMeasureSpacing();
+		this.marginRight = 10;
+		this.maximumWidth = (clientArea.getWidth() - (this.marginLeft + this.marginRight));
+		this.setHeight(0);
+		this.setWidth(0);
+		this.clearTrackPositions();
+		
+		int style = getStyle();
+		int number = getComponent().getTrackSelection();
+		int posY = fromY + getFirstTrackSpacing();
+		int height = getFirstTrackSpacing();
+		int lineHeight = 0;
+		
+		int measureCount = getSongManager().getSong().countMeasureHeaders();
+		int nextMeasureIndex = 0;
+		while(measureCount > nextMeasureIndex){
+			TempLine line = null;
+			Iterator tracks = getSongManager().getSong().getTracks();
+			while(tracks.hasNext()){
+				TGTrackImpl track = (TGTrackImpl) tracks.next();
+				if(number < 0 || track.getNumber() == number){
+					
+					TGTrackSpacing ts = new TGTrackSpacing(this) ;
+					ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0 ?( (getScoreLineSpacing() * 5) ):0));
+					
+					if(nextMeasureIndex == 0){
+						((TGLyricImpl)track.getLyrics()).start();
+					}
+					
+					line = getTempLines(track,nextMeasureIndex,ts);
+					if( (style & DISPLAY_SCORE) != 0 ){
+						ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, Math.abs(line.minY));
+						if(line.maxY > track.getScoreHeight()){
+							ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (line.maxY - track.getScoreHeight()) );
+						}
+					}
+					if((style & DISPLAY_TABLATURE) != 0){
+						ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(line.minY), getStringSpacing()) ));
+						ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ?  track.getTabHeight() + getStringSpacing() + 1 : Math.max( line.maxY, track.getTabHeight() + getStringSpacing() + 1) ));
+					}
+					ts.setSize(TGTrackSpacing.POSITION_LYRIC,10);
+					checkDefaultSpacing(ts);
+					
+					paintLine(track,line,painter,fromX,posY,ts,clientArea);
+					
+					lineHeight = ts.getSize();
+					addTrackPosition(track.getNumber(),posY,lineHeight);
+					
+					int emptyX = (this.marginLeft + fromX + line.tempWith + 2);
+					int emptyWith = ( this.maximumWidth - emptyX );
+					if((emptyWith - 20) > 0 && (line.lastIndex + 1) >= measureCount){
+						if(emptyX < (clientArea.getX() + clientArea.getWidth())){
+							emptyX = (emptyX < clientArea.getX() ? clientArea.getX() :emptyX);
+							emptyWith = ( emptyWith > clientArea.getWidth() ? clientArea.getWidth() : emptyWith );
+							paintLines(track,ts,painter, emptyX ,posY, emptyWith);
+						}
+					}
+					
+					posY += lineHeight + getTrackSpacing();
+					height += lineHeight + getTrackSpacing();
+				}
+			}
+			if(line != null){
+				nextMeasureIndex = line.lastIndex + 1;
+			}
+		}
+		
+		this.setHeight(height);
+		this.setWidth( getWidth() + this.marginRight );
+	}
+	
+	public void paintLine(TGTrackImpl track,TempLine line,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts,TGRectangle clientArea) {
+		int posX = (this.marginLeft + fromX);
+		int posY = fromY;
+		int width = this.marginLeft;
+		
+		//verifico si esta en el area de cliente
+		boolean isAtY = (posY + ts.getSize() > clientArea.getY() && posY < clientArea.getY() + clientArea.getHeight() + 80);
+		
+		int measureSpacing = 0;
+		if(line.fullLine){
+			int diff = ( this.maximumWidth - line.tempWith);
+			if(diff != 0 && line.measures.size() > 0){
+				measureSpacing = diff / line.measures.size();
+			}
+		}
+		
+		for(int i = 0;i < line.measures.size();i ++){
+			int index = ((Integer)line.measures.get(i)).intValue();
+			TGMeasureImpl currMeasure = (TGMeasureImpl)track.getMeasure(index);
+			
+			//asigno la posicion dentro del compas
+			currMeasure.setPosX(posX);
+			currMeasure.setPosY(posY);
+			currMeasure.setTs(ts);
+			
+			((TGLyricImpl)track.getLyrics()).setCurrentMeasure(currMeasure);
+			
+			currMeasure.setFirstOfLine(i == 0);
+			
+			int measureWidth = ( currMeasure.getWidth(this) + measureSpacing );
+			boolean isAtX = ( posX + measureWidth > clientArea.getX() && posX < clientArea.getX() + clientArea.getWidth());
+			if(isAtX && isAtY){
+				paintMeasure(currMeasure,painter,measureSpacing);
+				((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,currMeasure,posX, posY);
+			}else{
+				currMeasure.setOutOfBounds(true);
+			}
+			
+			posX += measureWidth;
+			width += measureWidth;
+		}
+		this.setWidth(Math.max(getWidth(),width));
+	}
+	
+	public TempLine getTempLines(TGTrack track,int fromIndex,TGTrackSpacing ts) {
+		int style = getStyle();
+		
+		TempLine line = new TempLine();
+		line.maxY = 0;
+		line.minY = 0;
+		
+		// Need to score extra-lines in edition mode
+		if( (style & DISPLAY_TABLATURE) == 0 && (style & DISPLAY_SCORE) != 0 ){
+			line.maxY = ((getScoreLineSpacing() * 4) + (getScoreLineSpacing() * 4));
+			line.minY = -(getScoreLineSpacing() * 3);
+		}
+		
+		int measureCount = track.countMeasures();
+		for (int measureIdx = fromIndex; measureIdx < measureCount; measureIdx++) {
+			TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure(measureIdx);
+			
+			//verifico si tengo que bajar de linea
+			if((line.tempWith + measure.getWidth(this)) >= this.maximumWidth && !line.measures.isEmpty()){
+				line.fullLine = true;
+				return line;
+			}
+			line.tempWith +=  measure.getWidth(this);
+			line.maxY = (measure.getMaxY() > line.maxY)?measure.getMaxY():line.maxY;
+			line.minY = (measure.getMinY() < line.minY)?measure.getMinY():line.minY;
+			
+			line.addMeasure(measureIdx);
+			measure.registerSpacing(this,ts);
+		}
+		
+		return line;
+	}
+	
+	private class TempLine{
+		protected int tempWith;
+		protected int lastIndex;
+		protected boolean fullLine;
+		protected int maxY = 0;
+		protected int minY = 0;
+		protected List measures;
+		
+		public TempLine(){
+			this.measures = new ArrayList();
+		}
+		
+		protected void addMeasure(int index){
+			this.measures.add(new Integer(index));
+			this.lastIndex = index;
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLyricImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLyricImpl.java
new file mode 100644
index 0000000..f39c3f1
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGLyricImpl.java
@@ -0,0 +1,72 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.song.models.TGLyric;
+
+public class TGLyricImpl extends TGLyric{
+	
+	private int height;
+	private int nextIndex = 0;
+	
+	public TGLyricImpl(){
+		this.height = 0;
+	}
+	
+	public void setFrom(int from) {
+		super.setFrom(from);
+		this.update();
+	}
+	
+	public void setLyrics(String lyrics) {
+		super.setLyrics(lyrics);
+		this.update();
+	}
+	
+	private void update(){
+		this.height = (this.isEmpty()?0:10);
+	}
+	
+	public void start(){
+		this.start(0);
+	}
+	
+	public void start(int index){
+		this.nextIndex = index;
+	}
+	
+	public void setCurrentMeasure(TGMeasureImpl measure){
+		if(measure.getNumber() >= getFrom()){
+			measure.setLyricBeatIndex(this.nextIndex);
+			this.nextIndex += (measure.getNotEmptyBeats());
+		}else{
+			measure.setLyricBeatIndex(-1);
+			this.start();
+		}
+	}
+	
+	public void paintCurrentNoteBeats(TGPainter painter,TGLayout layout,TGMeasureImpl currentMeasure ,int fromX,int fromY){
+		int from = currentMeasure.getLyricBeatIndex();
+		String[] beats = getLyricBeats();
+		if(beats != null && from >= 0 && from < beats.length){
+			int beatIndex = 0;
+			for(int i = 0;i < currentMeasure.countBeats();i ++){
+				TGBeatImpl beat = (TGBeatImpl)currentMeasure.getBeat(i);
+				if(!beat.isRestBeat()){
+					if((from + beatIndex) < beats.length){
+						String str = beats[from + beatIndex].trim();
+						if(str.length() > 0){
+							int x = (fromX + beat.getPosX() + beat.getSpacing() + 2);
+							layout.setLyricStyle(painter,(layout.isPlayModeEnabled() && beat.isPlaying(layout)));
+							painter.drawString(str,x + 13,(fromY + currentMeasure.getTs().getPosition(TGTrackSpacing.POSITION_LYRIC)));
+						}
+					}
+					beatIndex ++;
+				}
+			}
+		}
+	}
+	
+	public int getHeight(){
+		return this.height;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGMeasureBuffer.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGMeasureBuffer.java
new file mode 100644
index 0000000..fcb2a3c
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGMeasureBuffer.java
@@ -0,0 +1,78 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGMeasureBuffer {
+	
+	private TGImage buffer;
+	
+	private TGPainter painter;
+	
+	private int width;
+	
+	private int height;
+	
+	public TGMeasureBuffer(){
+		super();
+	}
+	
+	public void createBuffer(TGPainter painter, int width,int height,TGColor background){
+		this.dispose();
+		this.width = width;
+		this.height = height;
+		this.buffer = painter.createImage(this.width, this.height);
+		this.fillBuffer(background);
+	}
+	
+	public void disposeBuffer(){
+		if(this.buffer != null && !this.buffer.isDisposed()){
+			this.buffer.dispose();
+		}
+	}
+	
+	private void fillBuffer(TGColor background){
+		getPainter().setBackground(background);
+		getPainter().initPath(TGPainter.PATH_FILL);
+		getPainter().addRectangle(0,0,this.width,this.height);
+		getPainter().closePath();
+	}
+	
+	public void paintBuffer(TGPainter painter,int x,int y,int srcY){
+		painter.drawImage(this.buffer,0,srcY, this.width, (this.height - srcY), x, (y + srcY), this.width, (this.height - srcY));
+	}
+	
+	public void createPainter(){
+		this.disposePainter();
+		//this.painter = new TGPainterImpl(this.buffer);
+		this.painter = this.buffer.createPainter();
+	}
+	
+	public void disposePainter(){
+		if(this.painter != null && !this.painter.isDisposed()){
+			this.painter.dispose();
+			this.painter = null;
+		}
+	}
+	
+	public TGPainter getPainter(){
+		if(this.painter == null || this.painter.isDisposed()){
+			this.createPainter();
+		}
+		return this.painter;
+	}
+	
+	public TGImage getImage(){
+		return this.buffer;
+	}
+	
+	public void dispose(){
+		this.disposePainter();
+		this.disposeBuffer();
+	}
+	
+	public boolean isDisposed(){
+		return (this.buffer == null || this.buffer.isDisposed());
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGMeasureHeaderImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGMeasureHeaderImpl.java
new file mode 100644
index 0000000..c04ee27
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGMeasureHeaderImpl.java
@@ -0,0 +1,156 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+public class TGMeasureHeaderImpl extends TGMeasureHeader{
+	/**
+	 * Espacio por defecto del timeSignature
+	 */
+	private static final int DEFAULT_TIME_SIGNATURE_SPACING = 30;
+	/**
+	 * Espacio por defecto a la izquierda
+	 */
+	private static final int DEFAULT_LEFT_SPACING = 15;
+	/**
+	 * Espacio por defecto a la derecha
+	 */
+	private static final int DEFAULT_RIGHT_SPACING = 15;
+	
+	private static final int PAINT_TEMPO = 0x01;
+	
+	private static final int PAINT_TRIPLET_FEEL = 0x02;
+	
+	private static final int PAINT_TIME_SIGNATURE = 0x04;
+	
+	private int paintFlags;
+	
+	private int maxQuarterSpacing;
+	
+	private int maxClefSpacing;
+	
+	private int maxKeySignatureSpacing;
+	
+	private int maxWidth;
+	
+	public TGMeasureHeaderImpl(TGFactory factory){
+		super(factory);
+	}
+	
+	public void reset() {
+		this.maxWidth = 0;
+		this.paintFlags = 0;
+		this.maxQuarterSpacing = 0;
+		this.maxClefSpacing = 0;
+		this.maxKeySignatureSpacing = 0;
+	}
+	
+	public void update(TGLayout layout, int index) {
+		this.reset();
+		this.calculateMeasureChanges(layout);
+		
+		int trackCount = getSong().countTracks();
+		for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
+			TGTrackImpl track = (TGTrackImpl)getSong().getTrack(trackIdx);
+			TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure( index );
+			measure.calculateMeasureChanges(layout);
+		}
+	}
+	
+	public void calculateMeasureChanges(TGLayout layout) {
+		TGMeasureHeader previous = layout.getSongManager().getPrevMeasureHeader(this);
+		if(previous == null){
+			this.paintFlags |= PAINT_TEMPO; 
+			this.paintFlags |= ((this.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE)?PAINT_TRIPLET_FEEL:0);
+			this.paintFlags |= PAINT_TIME_SIGNATURE;
+		}else{
+			//Tempo
+			if(this.getTempo().getValue() != previous.getTempo().getValue()){
+				this.paintFlags |= PAINT_TEMPO; 
+			}
+			//Triplet Feel
+			if(this.getTripletFeel() != previous.getTripletFeel()){
+				this.paintFlags |= PAINT_TRIPLET_FEEL;
+			}
+			//Time Signature
+			int thisNumerator = this.getTimeSignature().getNumerator();
+			int thisValue = this.getTimeSignature().getDenominator().getValue();
+			int prevNumerator = previous.getTimeSignature().getNumerator();
+			int prevValue = previous.getTimeSignature().getDenominator().getValue();
+			if(thisNumerator != prevNumerator || thisValue != prevValue){
+				this.paintFlags |= PAINT_TIME_SIGNATURE;
+			}
+		}
+	}
+	
+	public boolean shouldPaintTempo(){
+		return ( (this.paintFlags & PAINT_TEMPO) != 0 );
+	}
+	
+	public boolean shouldPaintTripletFeel(){
+		return ( (this.paintFlags & PAINT_TRIPLET_FEEL) != 0 );
+	}
+	
+	public boolean shouldPaintTimeSignature(){
+		return ( (this.paintFlags & PAINT_TIME_SIGNATURE) != 0 );
+	}
+	
+	public int getMaxQuarterSpacing() {
+		return this.maxQuarterSpacing;
+	}
+	
+	public void notifyQuarterSpacing(int spacing) {
+		this.maxQuarterSpacing = ((spacing > this.maxQuarterSpacing) ? spacing : this.maxQuarterSpacing );
+	}
+	
+	public int getClefSpacing(TGLayout layout, TGMeasureImpl measure){
+		return (!measure.isPaintClef() && (layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) == 0 ? 0 : this.maxClefSpacing );
+	}
+	
+	public int getKeySignatureSpacing(TGLayout layout, TGMeasureImpl measure){
+		return (!measure.isPaintKeySignature() && (layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) == 0 ? 0 : this.maxKeySignatureSpacing );
+	}
+	
+	public int getTempoSpacing(TGLayout layout){
+		return (shouldPaintTempo()? Math.round( 45 * layout.getScale() ):0);
+	}
+	
+	public int getTripletFeelSpacing(TGLayout layout){
+		return (shouldPaintTripletFeel()? Math.round( 55 * layout.getScale() ):0);
+	}
+	
+	public int getTimeSignatureSpacing(TGLayout layout){
+		return (shouldPaintTimeSignature()? Math.round( DEFAULT_TIME_SIGNATURE_SPACING * layout.getScale() ):0);
+	}
+	
+	public int getLeftSpacing(TGLayout layout){
+		return Math.round( DEFAULT_LEFT_SPACING * layout.getScale() );
+	}
+	
+	public int getRightSpacing(TGLayout layout){
+		return Math.round( DEFAULT_RIGHT_SPACING * layout.getScale() );
+	}
+	
+	public int getFirstNoteSpacing(TGLayout layout, TGMeasureImpl measure){
+		int topSpacing = getTempoSpacing(layout) + getTripletFeelSpacing(layout);
+		int middleSpacing = getClefSpacing(layout,measure) + getKeySignatureSpacing(layout,measure) + getTimeSignatureSpacing(layout);
+		
+		return Math.round(Math.max( topSpacing , middleSpacing) + (10f * layout.getScale()));
+	}
+	
+	public void notifyClefSpacing(int spacing){
+		this.maxClefSpacing = ((spacing > this.maxClefSpacing)?spacing:this.maxClefSpacing);
+	}
+	
+	public void notifyKeySignatureSpacing(int spacing){
+		this.maxKeySignatureSpacing = ((spacing > this.maxKeySignatureSpacing) ? spacing : this.maxKeySignatureSpacing);
+	}
+	
+	public void notifyWidth(int width){
+		this.maxWidth = ((width > this.maxWidth)?width:this.maxWidth);
+	}
+	
+	public int getMaxWidth(){
+		return this.maxWidth;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGMeasureImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGMeasureImpl.java
new file mode 100644
index 0000000..4243926
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGMeasureImpl.java
@@ -0,0 +1,1326 @@
+/*
+ * Created on 26-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGClefPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGKeySignaturePainter;
+import org.herac.tuxguitar.graphics.control.painters.TGTempoPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGTripletFeelPainter;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGMeasureImpl extends TGMeasure{
+	
+	public static final int NATURAL = 1;
+	public static final int SHARP = 2;
+	public static final int FLAT = 3;
+	
+	public static final int KEY_SIGNATURES[][] = new int[][]{
+		//------------NATURAL------------------------------------
+		{NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL}, // NATURAL
+		//------------SHARPS------------------------------------
+		{NATURAL,NATURAL,NATURAL,SHARP,NATURAL,NATURAL,NATURAL},   // 1 SHARP
+		{SHARP,NATURAL,NATURAL,SHARP,NATURAL,NATURAL,NATURAL},     // 2 SHARPS
+		{SHARP,NATURAL,NATURAL,SHARP,SHARP,NATURAL,NATURAL},       // 3 SHARPS
+		{SHARP,SHARP,NATURAL,SHARP,SHARP,NATURAL,NATURAL},         // 4 SHARPS
+		{SHARP,SHARP,NATURAL,SHARP,SHARP,SHARP,NATURAL},           // 5 SHARPS
+		{SHARP,SHARP,SHARP,SHARP,SHARP,SHARP,NATURAL},             // 6 SHARPS
+		{SHARP,SHARP,SHARP,SHARP,SHARP,SHARP,SHARP},               // 7 SHARPS
+		//------------FLATS------------------------------------
+		{NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,FLAT},    // 1 FLAT
+		{NATURAL,NATURAL,FLAT,NATURAL,NATURAL,NATURAL,FLAT},       // 2 FLATS
+		{NATURAL,NATURAL,FLAT,NATURAL,NATURAL,FLAT,FLAT},          // 3 FLATS
+		{NATURAL,FLAT,FLAT,NATURAL,NATURAL,FLAT,FLAT},             // 4 FLATS
+		{NATURAL,FLAT,FLAT,NATURAL,FLAT,FLAT,FLAT},                // 5 FLATS
+		{FLAT,FLAT,FLAT,NATURAL,FLAT,FLAT,FLAT},                   // 6 FLATS
+		{FLAT,FLAT,FLAT,FLAT,FLAT,FLAT,FLAT},                      // 7 FLATS
+	};
+	
+	public static final int ACCIDENTAL_SHARP_NOTES[] = new int[]{0,0,1,1,2,3,3,4,4,5,5,6};
+	public static final int ACCIDENTAL_FLAT_NOTES [] = new int[]{0,1,1,2,2,3,4,4,5,5,6,6};
+	public static final boolean ACCIDENTAL_NOTES[] = new boolean[]{false,true,false,true,false,false,true,false,true,false,true,false};
+	
+	public static final int SCORE_KEY_OFFSETS[] = new int[]{30,18,22,24};
+	
+	public static final int SCORE_KEY_SHARP_POSITIONS[][] = new int[][]{ 
+		new int[] { 1 , 4, 0, 3, 6, 2 , 5 } ,
+		new int[] { 3 , 6, 2, 5, 8, 4 , 7 } ,
+		new int[] { 7 , 3, 6, 2, 5, 1 , 4 } ,
+		new int[] { 2 , 5, 1, 4, 7, 3 , 6 } ,
+	};
+	
+	public static final int SCORE_KEY_FLAT_POSITIONS[][] = new int[][]{ 
+		new int[] { 5, 2, 6, 3, 7, 4, 8 } ,
+		new int[] { 7, 4, 8, 5, 9, 6, 10 } ,
+		new int[] { 4, 1, 5, 2, 6, 3, 7 } ,
+		new int[] { 6, 3, 7, 4, 8, 5, 9 } ,
+	};
+	
+	/**
+	 * Espacio por defecto de la clave
+	 */
+	private static final int DEFAULT_CLEF_SPACING = 40;
+	/**
+	 * Espacio por defecto entre negra y negra
+	 */
+	private static final int DEFAULT_QUARTER_SPACING = 30;
+	/**
+	 * Posicion X
+	 */
+	private int posX;
+	/** 
+	 * Posicion Y
+	 */
+	private int posY;
+	/**
+	 * Espacio entre negras
+	 */
+	private int quarterSpacing;
+	/**
+	 * Espacio entre pulsos
+	 */
+	private long divisionLength;
+	/**
+	 * Boolean para saber si hay que pintar la clave
+	 */
+	private boolean paintClef = true;
+	/**
+	 * Boolean para saber si hay que pintar el KeySignature
+	 */
+	private boolean paintKeySignature = true;
+	/**
+	 * Compas anterior
+	 */
+	private TGMeasure prevMeasure;
+	/**
+	 * Boolean para saber si el compas esta en el area de pantalla
+	 */
+	private boolean outOfBounds;
+	/**
+	 * Boolean para saber si el compas es el primero de la linea
+	 */
+	private boolean firstOfLine;
+	
+	private boolean compactMode;
+	
+	private int spacing;
+	
+	private TGTrackSpacing ts;
+	
+	private int maxY;
+	
+	private int minY;
+	
+	private int notEmptyVoices;
+	
+	private int notEmptyBeats;
+	
+	private int widthBeats = 0;
+	
+	private List[] voiceGroups;
+	
+	private TGMeasureBuffer buffer;
+	
+	private boolean bufferCreated;
+	
+	private TGColor markerColor;
+	
+	private int lyricBeatIndex;
+	private int width;
+	
+	private int beatEffectSpacing;
+	private boolean text;
+	private boolean chord;
+	private boolean division;
+	
+	private boolean[][] registeredAccidentals;
+	
+	public TGMeasureImpl(TGMeasureHeader header) {
+		super(header);
+		this.registeredAccidentals = new boolean[11][7];
+		this.voiceGroups = new List[TGBeat.MAX_VOICES];
+		for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){
+			this.voiceGroups[v] = new ArrayList();
+		}
+	}
+	
+	/**
+	 * Crea los valores necesarios
+	 */
+	public void create(TGLayout layout) {
+		this.divisionLength = TGSongManager.getDivisionLength(getHeader());
+		this.resetSpacing();
+		this.autoCompleteSilences(layout.getSongManager());
+		this.orderBeats(layout.getSongManager());
+		this.checkCompactMode(layout);
+		this.clearRegisteredAccidentals();
+		this.calculateBeats(layout);
+		this.calculateWidth(layout);
+		this.setFirstOfLine(false);
+	}
+	
+	/**
+	 * Actualiza los valores para dibujar
+	 */
+	public void update(TGLayout layout) {
+		updateComponents(layout);
+		setOutOfBounds(true);
+		setBufferCreated(false);
+	}
+	
+	private void checkCompactMode(TGLayout layout){
+		boolean compactMode = ( (layout.getStyle() & TGLayout.DISPLAY_COMPACT) != 0 );
+		if(compactMode && (layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) != 0){
+			compactMode = (layout.getSongManager().getSong().countTracks() == 1);
+		}
+		this.compactMode = compactMode;
+	}
+	
+	private void clearRegisteredAccidentals(){
+		for( int i = 0 ; i < 11 ; i ++ ){
+			for( int n = 0 ; n < 7 ; n ++ ){
+				this.registeredAccidentals[i][n] = false;
+			}
+		}
+	}
+	
+	public void calculateWidth(TGLayout layout) {
+		if(this.compactMode){
+			this.width = this.widthBeats;
+		}
+		else{
+			double quartersInSignature = ((1.00 / this.getTimeSignature().getDenominator().getValue()) * 4.00) * this.getTimeSignature().getNumerator();
+			this.width = (int)(getQuarterSpacing() * quartersInSignature);
+		}
+		
+		this.width += getFirstNoteSpacing(layout);
+		this.width += (this.getRepeatClose() > 0)?20:0;
+		this.width += getHeaderImpl().getLeftSpacing(layout);
+		this.width += getHeaderImpl().getRightSpacing(layout);
+		
+		this.getHeaderImpl().notifyWidth(this.width);
+	}
+	
+	private void calculateBeats(TGLayout layout) {
+		TGChord previousChord = null;
+		TGDuration minDuration = null;
+		TGBeatImpl previousBeat = null;
+		TGVoiceImpl[] previousVoices = new TGVoiceImpl[TGBeat.MAX_VOICES];
+		TGBeatGroup[] groups = new TGBeatGroup[TGBeat.MAX_VOICES];
+		
+		int style = layout.getStyle();
+		int minimumChordLength = 0;
+		
+		boolean[] notEmptyVoicesChecked = new boolean[TGBeat.MAX_VOICES];
+		boolean chordEnabled = ((style & (TGLayout.DISPLAY_CHORD_DIAGRAM | TGLayout.DISPLAY_CHORD_NAME)) != 0);
+		this.widthBeats = 0;
+		this.notEmptyBeats = 0;
+		this.notEmptyVoices = 0;
+		for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){
+			this.voiceGroups[v].clear();
+		}
+		
+		for (int i = 0; i < countBeats(); i++) {
+			TGBeatImpl beat = (TGBeatImpl)getBeat(i);
+			beat.reset();
+			
+			if(chordEnabled && beat.getChord() != null){
+				if(previousChord != null){
+					int length = (int) (beat.getStart() - previousChord.getBeat().getStart());
+					minimumChordLength = (minimumChordLength > 0)?Math.min(minimumChordLength, Math.abs(length)):length;
+				}
+				previousChord = beat.getChord();
+			}
+			boolean emptyBeat = true;
+			for( int v = 0; v < TGBeat.MAX_VOICES; v ++){
+				TGVoiceImpl voice = (TGVoiceImpl)beat.getVoice(v);
+				if(!voice.isEmpty()){
+					emptyBeat = false;
+					
+					voice.reset();
+					if (minDuration == null || voice.getDuration().getTime() <= minDuration.getTime()) {
+						minDuration = voice.getDuration();
+					}
+					if( !notEmptyVoicesChecked[v] ){
+						notEmptyVoicesChecked[v] = true;
+						this.notEmptyVoices ++;
+					}
+					
+					Iterator it = voice.getNotes().iterator();
+					while(it.hasNext()){
+						TGNoteImpl note = (TGNoteImpl)it.next();
+						voice.check(note);
+					}
+					
+					if(!voice.isRestVoice()){
+						beat.check( layout, voice.getMinNote() );
+						beat.check( layout, voice.getMaxNote() );
+						if( ( groups[v] == null ) || !canJoin(layout.getSongManager(),voice,previousVoices[v]) ){
+							groups[v] = new TGBeatGroup(v);
+							this.voiceGroups[v].add(groups[v]);
+						}
+						groups[v].check(voice);
+					}else{
+						for( int v2 = 0; v2 < TGBeat.MAX_VOICES; v2 ++){
+							if(v2 != voice.getIndex()){
+								TGVoiceImpl voice2 = beat.getVoiceImpl(v2);
+								if( !voice2.isEmpty() && voice2.getDuration().isEqual(voice.getDuration())){
+									if(!voice2.isRestVoice() || !voice2.isHiddenSilence()){
+										voice.setHiddenSilence(true);
+										break;
+									}
+								}
+							}
+						}
+					}
+					makeVoice(layout, voice, previousVoices[v], groups[v]);
+					previousVoices[v] = voice;
+				}
+			}
+			if (emptyBeat){
+				System.out.println( "Empty Beat !!!!!! " + beat.getStart() + "  " + i);
+			}
+			
+			makeBeat(layout,beat,previousBeat,chordEnabled);
+			previousBeat = beat;
+		}
+		
+		for(int v = 0; v < this.voiceGroups.length; v ++){
+			Iterator voiceGroups = this.voiceGroups[v].iterator();
+			while (voiceGroups.hasNext()) {
+				TGBeatGroup group = (TGBeatGroup)voiceGroups.next();
+				group.finish(layout,this);
+			}
+		}
+		
+		if(!this.compactMode){
+			this.quarterSpacing = (minDuration != null)?layout.getSpacingForQuarter(minDuration): Math.round(DEFAULT_QUARTER_SPACING * layout.getScale());
+			if(chordEnabled && minimumChordLength > 0){
+				int chordWidth = (layout.getChordFretIndexSpacing() + layout.getChordStringSpacing() + (getTrack().stringCount() * layout.getChordStringSpacing()));
+				int minimumSpacing = (int)((TGDuration.QUARTER_TIME * chordWidth) / minimumChordLength);
+				this.quarterSpacing = Math.max(minimumSpacing,this.quarterSpacing);
+			}
+			this.getHeaderImpl().notifyQuarterSpacing(this.quarterSpacing);
+		}
+	}
+	
+	public boolean canJoin(TGSongManager manager,TGVoiceImpl b1,TGVoiceImpl b2){
+		if( b1 == null || b2 == null || b1.isRestVoice() || b2.isRestVoice() ){
+			return false;
+		}
+		
+		long divisionLength = getDivisionLength();
+		long start = getStart();
+		long start1 = (manager.getMeasureManager().getRealStart(this, b1.getBeat().getStart()) - start);
+		long start2 = (manager.getMeasureManager().getRealStart(this, b2.getBeat().getStart()) - start);
+		
+		if(b1.getDuration().getValue() < TGDuration.EIGHTH || b2.getDuration().getValue() < TGDuration.EIGHTH ){
+			return ( start1 == start2);
+		}
+		
+		long p1 = ((divisionLength + start1) / divisionLength);
+		long p2 = ((divisionLength + start2) / divisionLength);
+		
+		return  (   p1 == p2  );
+	}
+	
+	private void makeVoice(TGLayout layout,TGVoiceImpl voice,TGVoiceImpl previousVoice,TGBeatGroup group){
+		voice.setWidth((int)layout.getVoiceWidth(voice));
+		voice.setBeatGroup( group );
+		
+		if(previousVoice != null){
+			voice.setPreviousBeat(previousVoice);
+			previousVoice.setNextBeat(voice);
+		}
+	}
+	
+	private void makeBeat(TGLayout layout,TGBeatImpl beat,TGBeatImpl previousBeat, boolean chordEnabled){
+		int minimumWidth = -1;
+		boolean restBeat = true;
+		for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){
+			TGVoiceImpl voice = beat.getVoiceImpl(v);
+			if(!voice.isEmpty()){
+				if( minimumWidth < 0 || voice.getWidth() < minimumWidth ){
+					minimumWidth = voice.getWidth();
+				}
+				if( !voice.isRestVoice() ){
+					restBeat = false;
+				}
+			}
+		}
+		
+		beat.setWidth( minimumWidth );
+		this.notEmptyBeats += (restBeat ? 0 : 1);
+		this.widthBeats += beat.getMinimumWidth();
+		
+		if(previousBeat != null){
+			beat.setPreviousBeat(previousBeat);
+			previousBeat.setNextBeat(beat);
+			
+			if(chordEnabled && beat.isChordBeat() && previousBeat.isChordBeat()){
+				int previousWidth = previousBeat.getMinimumWidth();
+				int chordWidth = (layout.getChordFretIndexSpacing() + layout.getChordStringSpacing() + (getTrack().stringCount() * layout.getChordStringSpacing()));
+				previousBeat.setWidth(Math.max(chordWidth,previousWidth));
+				this.widthBeats -= previousWidth;
+				this.widthBeats += previousBeat.getMinimumWidth();
+			}
+		}
+	}
+	
+	/**
+	 * Calcula si debe pintar el TimeSignature
+	 */
+	public void calculateMeasureChanges(TGLayout layout) {
+		this.paintClef = false;
+		this.paintKeySignature = false;
+		this.prevMeasure = (layout.isFirstMeasure(this) ? null : (TGMeasureImpl)layout.getSongManager().getTrackManager().getPrevMeasure(this));
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+			if(this.prevMeasure == null || getClef() != this.prevMeasure.getClef()){
+				this.paintClef = true;
+				this.getHeaderImpl().notifyClefSpacing( Math.round(DEFAULT_CLEF_SPACING * layout.getScale()) );
+			}
+			if(this.prevMeasure == null || getKeySignature() != this.prevMeasure.getKeySignature()){
+				this.paintKeySignature = true;
+				this.getHeaderImpl().notifyKeySignatureSpacing(calculateKeySignatureSpacing(layout));
+			}
+		}
+	}
+	
+	/**
+	 * Calcula si hay espacios libres. y crea nuevos silencios
+	 */
+	private void autoCompleteSilences(TGSongManager manager){
+		manager.getMeasureManager().autoCompleteSilences(this);
+	}
+	
+	/**
+	 * Llama a update de todas las notas del compas
+	 */
+	private void updateComponents(TGLayout layout) {
+		this.maxY = 0;
+		this.minY = 0;
+		
+		int spacing = getFirstNoteSpacing(layout);
+		int tmpX = spacing;
+		for (int i = 0; i < countBeats(); i++) {
+			TGBeatImpl beat = (TGBeatImpl) getBeat(i);
+			beat.resetEffectsSpacing(layout);
+			
+			if(this.compactMode){
+				beat.setPosX(tmpX);
+				tmpX += beat.getMinimumWidth();
+			}
+			else{
+				int quarterWidth = getMaxQuarterSpacing(layout);
+				int x1 = (spacing + getDisplayPosition(beat.getStart(), quarterWidth));
+				int minimumWidth = -1;
+				for(int v = 0 ; v < beat.countVoices(); v ++){
+					TGVoiceImpl voice = beat.getVoiceImpl(v);
+					if(!voice.isEmpty()){
+						int x2 = (spacing + getDisplayPosition(beat.getStart() + voice.getDuration().getTime(), quarterWidth));
+						int width = ( x2 - x1 );
+						if( minimumWidth < 0 || width < minimumWidth ){
+							minimumWidth = width;
+						}
+						voice.setWidth( width );
+					}
+				}
+				beat.setPosX( x1 );
+				beat.setWidth( minimumWidth );
+			}
+			
+			for(int v = 0 ; v < beat.countVoices(); v ++){
+				TGVoiceImpl voice = beat.getVoiceImpl(v);
+				if(!voice.isEmpty()){
+					Iterator notes = voice.getNotes().iterator();
+					while(notes.hasNext()){
+						TGNoteImpl note = (TGNoteImpl)notes.next();
+						beat.updateEffectsSpacing(layout, note.getEffect());
+						note.update(layout);
+					}
+					voice.update(layout);
+					
+					if(!this.division && !voice.getDuration().getDivision().isEqual(TGDivisionType.NORMAL)){
+						this.division = true;
+					}
+					if( (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 || (voice.isRestVoice() && !voice.isHiddenSilence()) ){
+						if( voice.getMaxY() > this.maxY ){
+							this.maxY = voice.getMaxY();
+						}
+						if( voice.getMinY() < this.minY ){
+							this.minY = voice.getMinY();
+						}
+					}
+				}
+			}
+			
+			int bsSize = beat.getEffectsSpacing(layout);
+			if( bsSize > this.beatEffectSpacing ){
+				this.beatEffectSpacing = bsSize;
+			}
+			
+			if(!this.chord && beat.isChordBeat()){
+				this.chord = true;
+			}
+			
+			if(!this.text && beat.isTextBeat()){
+				this.text = true;
+			}
+		}
+		
+		if( (layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0){
+			for(int i = 0; i < this.voiceGroups.length; i ++){
+				Iterator groups = this.voiceGroups[i].iterator();
+				while (groups.hasNext()) {
+					TGBeatGroup group = (TGBeatGroup)groups.next();
+					checkValue(layout,group.getMinNote(),group.getDirection());
+					checkValue(layout,group.getMaxNote(),group.getDirection());
+				}
+			}
+		}
+	}
+	
+	public int getDisplayPosition(long start, int quarterWidth){
+		double newStart = (double)start - (double)this.getStart();
+		double displayPosition = 0.0;
+		if(newStart > 0){
+			double position = (newStart / TGDuration.QUARTER_TIME);
+			displayPosition = (position * quarterWidth);
+		}
+		return (int)displayPosition;
+	}
+	
+	public int getNoteAccidental(int noteValue){
+		if( noteValue >= 0 && noteValue < 128 ){
+			int key = getKeySignature();
+			int note = (noteValue % 12);
+			int octave = (noteValue / 12);
+			int accidentalValue = (key <= 7 ? SHARP : FLAT );
+			int [] accidentalNotes = (key <= 7 ? ACCIDENTAL_SHARP_NOTES : ACCIDENTAL_FLAT_NOTES );
+			boolean isAccidentalNote = ACCIDENTAL_NOTES[ note ];
+			boolean isAccidentalKey = KEY_SIGNATURES[key][accidentalNotes[ note ]] == accidentalValue;
+			
+			if(isAccidentalKey != isAccidentalNote && !this.registeredAccidentals[ octave ][ accidentalNotes[ note ] ]){
+				this.registeredAccidentals[ octave ][ accidentalNotes[note ]  ] = true;
+				return (isAccidentalNote ? accidentalValue : NATURAL);
+			}
+			
+			if(isAccidentalKey == isAccidentalNote && this.registeredAccidentals[ octave ][ accidentalNotes[ note ] ]){
+				this.registeredAccidentals[ octave ][ accidentalNotes[ note ]  ] = false;
+				return (isAccidentalNote ? accidentalValue : NATURAL);
+			}
+		}
+		return 0;
+	}
+	
+	private void checkValue(TGLayout layout,TGNoteImpl note,int direction){
+		int y = note.getScorePosY();
+		float upOffset = TGBeatGroup.getUpOffset(layout);
+		float downOffset = TGBeatGroup.getDownOffset(layout);
+		
+		if(direction == TGBeatGroup.DIRECTION_UP && y > this.maxY ){
+			this.maxY = y;
+		}else if(direction == TGBeatGroup.DIRECTION_DOWN && (y + downOffset) > this.maxY ){
+			this.maxY = (int)(y + downOffset + 2);
+		}
+		
+		if(direction == TGBeatGroup.DIRECTION_UP && (y - upOffset) < this.minY ){
+			this.minY = (int)(y - upOffset - 2);
+		}else if(direction == TGBeatGroup.DIRECTION_DOWN && y < this.minY ){
+			this.minY = y;
+		}
+	}
+	
+	private void resetSpacing(){
+		this.text = false;
+		this.chord = false;
+		this.division = false;
+		this.beatEffectSpacing = 0;
+	}
+	
+	public void registerSpacing(TGLayout layout,TGTrackSpacing ts){
+		if(layout.hasLoopMarker( this.getHeader() )){
+			ts.setSize(TGTrackSpacing.POSITION_LOOP_MARKER,layout.getLoopMarkerSpacing());
+		}
+		if(this.hasMarker()){
+			ts.setSize(TGTrackSpacing.POSITION_MARKER,layout.getMarkerSpacing());
+		}
+		if(this.chord){
+			ts.setSize(TGTrackSpacing.POSITION_CHORD,layout.getDefaultChordSpacing());
+		}
+		if(this.text){
+			ts.setSize(TGTrackSpacing.POSITION_TEXT,layout.getTextSpacing());
+		}
+		if(this.getHeader().getRepeatAlternative() > 0){
+			ts.setSize(TGTrackSpacing.POSITION_REPEAT_ENDING,layout.getRepeatEndingSpacing());
+		}
+		if(this.division){
+			ts.setSize(TGTrackSpacing.POSITION_DIVISION_TYPE,layout.getDivisionTypeSpacing());
+		}
+		if( this.beatEffectSpacing > 0 ){
+			ts.setSize(TGTrackSpacing.POSITION_EFFECTS, this.beatEffectSpacing );
+		}
+	}
+	
+	private void orderBeats(TGSongManager manager){
+		manager.getMeasureManager().orderBeats(this);
+	}
+	
+	public void paintMeasure(TGLayout layout,TGPainter painter) {
+		this.setOutOfBounds(false);
+		
+		boolean bufferEnabled = layout.isBufferEnabled();
+		
+		if(shouldRepaintBuffer() || !bufferEnabled ){
+			TGPainter bufferPainter = painter;
+			int x = (bufferEnabled ? 0 : getPosX());
+			int y = (bufferEnabled ? 0 : getPosY());
+			if(bufferEnabled){
+				getBuffer().createBuffer(painter,getWidth(layout) + getSpacing(), getTs().getSize(),layout.getResources().getBackgroundColor());
+				bufferPainter = getBuffer().getPainter();
+			}
+			layout.paintLines(getTrackImpl(),getTs(),bufferPainter,x,y, getWidth(layout) + getSpacing());
+			paintTimeSignature(layout,bufferPainter,x,y);
+			paintClef(layout,bufferPainter,x,y);
+			paintKeySignature(layout,bufferPainter,x,y);
+			paintComponents(layout,bufferPainter,x,y);
+			if(bufferEnabled){
+				getBuffer().disposePainter();
+			}
+			setBufferCreated(true);
+		}
+		if(bufferEnabled){
+			painter.setBackground(layout.getResources().getBackgroundColor());
+			getBuffer().paintBuffer(painter,getPosX(),getPosY(),getTs().getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR));
+		}
+		
+		this.paintMarker(layout, painter);
+		this.paintTexts(layout,painter);
+		this.paintTempo(layout,painter);
+		this.paintTripletFeel(layout,painter);
+		this.paintDivisions(layout,painter);
+		this.paintRepeatEnding(layout,painter);
+		this.paintPlayMode(layout,painter);
+		this.paintLoopMarker(layout, painter);
+	}
+	
+	private boolean shouldRepaintBuffer(){
+		return (isDisposed() || !isBufferCreated());
+	}
+	
+	public void paintRepeatEnding(TGLayout layout,TGPainter painter){
+		if(getHeader().getRepeatAlternative() > 0){
+			float scale = layout.getScale();
+			float x1 = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getFirstNoteSpacing(layout));
+			float x2 = (getPosX() + getWidth(layout) + getSpacing());
+			float y1 = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_REPEAT_ENDING));
+			float y2 = (y1 + (layout.getRepeatEndingSpacing() * 0.75f ));
+			String string = new String();
+			for(int i = 0; i < 8; i ++){
+				if((getHeader().getRepeatAlternative() & (1 << i)) != 0){
+					string += ((string.length() > 0)?(", ") + Integer.toString(i + 1):Integer.toString(i + 1));
+				}
+			}
+			layout.setRepeatEndingStyle(painter);
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo(x1, y2);
+			painter.lineTo(x1, y1);
+			painter.moveTo(x1, y1);
+			painter.lineTo(x2, y1);
+			painter.closePath();
+			painter.drawString(string,Math.round( x1 + (5.0f * scale) ),Math.round( y1 + (2.0f * scale) ));
+		}
+	}
+	
+	/**
+	 * Pinta las notas
+	 */
+	public void paintComponents(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		Iterator it = getBeats().iterator();
+		while(it.hasNext()){
+			TGBeatImpl beat = (TGBeatImpl)it.next();
+			beat.paint(layout, painter, fromX + getHeaderImpl().getLeftSpacing(layout) ,fromY);
+		}
+	}
+	
+	/**
+	 * Pinta las divisiones del compas
+	 */
+	private void paintDivisions(TGLayout layout,TGPainter painter) {
+		int x1 = getPosX();
+		int x2 = getPosX() + getWidth(layout);
+		int y1 = 0;
+		int y2 = 0;
+		int offsetY = 0;
+		int style = layout.getStyle();
+		boolean addInfo = false;
+		//-----SCORE ------------------------------------//
+		if((style & TGLayout.DISPLAY_SCORE) != 0 ){
+			y1 = getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+			y2 = y1 + (layout.getScoreLineSpacing() * 4);
+			addInfo = true;
+			if( (style & TGLayout.DISPLAY_TABLATURE) != 0 && (layout.isFirstMeasure(this) || isFirstOfLine())){
+				offsetY = ( getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE)) - y2;
+			}
+			paintDivisions(layout, painter, x1, y1, x2, y2, offsetY, addInfo );
+		}
+		//-----TABLATURE ------------------------------------//
+		if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+			y1 = getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE);
+			y2 = y1 + ((getTrack().getStrings().size() - 1 ) * layout.getStringSpacing());
+			addInfo = ( (style & TGLayout.DISPLAY_SCORE) == 0 );
+			offsetY = 0;
+			paintDivisions(layout, painter, x1, y1, x2, y2, offsetY, addInfo );
+		}
+	}
+	
+	private void paintDivisions(TGLayout layout,TGPainter painter,int x1, int y1, int x2, int y2, int offsetY, boolean addInfo) {
+		float scale = layout.getScale();
+		int lineWidthSmall = 1;
+		int lineWidthBig = Math.max(lineWidthSmall,Math.round(3f * scale));
+		
+		//numero de compas
+		if(addInfo){
+			String number = Integer.toString(this.getNumber());
+			layout.setMeasureNumberStyle(painter);
+			painter.drawString(number,getPosX() + Math.round(scale),(y1 - painter.getFMHeight()) - Math.round(scale));
+		}
+		
+		layout.setDivisionsStyle(painter,true);
+		
+		//principio
+		if(this.isRepeatOpen() || layout.isFirstMeasure(this)){
+			painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL);
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.addRectangle( x1, y1, lineWidthBig, (y2 + offsetY) - y1);
+			painter.closePath();
+			
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.moveTo(x1 + lineWidthBig + scale + lineWidthSmall, y1);
+			painter.lineTo(x1 + lineWidthBig + scale + lineWidthSmall, (y2 + offsetY));
+			painter.closePath();
+			
+			if(this.isRepeatOpen()){
+				int size = Math.max(1,Math.round(4f * scale));
+				float xMove = ((lineWidthBig + scale + lineWidthSmall) + (2f * scale));
+				float yMove = ((lineWidthBig + scale + lineWidthSmall) + (2f * scale));
+				
+				painter.setLineWidth(lineWidthSmall);
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.moveTo(x1 + xMove, y1 + ((y2 - y1) / 2) - (yMove + (size / 2)));
+				painter.addOval(x1 + xMove, y1 + ((y2 - y1) / 2) - (yMove + (size / 2)), size,size);
+				painter.moveTo(x1 + xMove, y1 + ((y2 - y1) / 2) + (yMove - (size / 2)));
+				painter.addOval(x1 + xMove, y1 + ((y2 - y1) / 2) + (yMove - (size / 2)), size, size);
+				painter.closePath();
+			}
+		}else{
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.moveTo(x1, y1);
+			painter.lineTo(x1, (y2 + offsetY));
+			painter.closePath();
+		}
+		
+		//fin
+		if(this.getRepeatClose() > 0 || layout.isLastMeasure(this)){
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.moveTo( (x2 + getSpacing()) - (lineWidthBig + scale + lineWidthSmall) , y1);
+			painter.lineTo( (x2 + getSpacing()) - (lineWidthBig + scale + lineWidthSmall) , y2);
+			painter.closePath();
+			
+			painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL);
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.addRectangle( (x2 + getSpacing()) - lineWidthBig, y1, lineWidthBig, y2 - y1);
+			painter.closePath();
+			
+			if(this.getRepeatClose() > 0){
+				int size = Math.max(1,Math.round(4f * scale));
+				float xMove = (((lineWidthBig + scale + lineWidthSmall) + (2f * scale)) + size);
+				float yMove = ( (lineWidthBig + scale + lineWidthSmall) + (2f * scale) );
+				
+				painter.setLineWidth(lineWidthSmall);
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.moveTo((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) - (yMove + (size / 2)));
+				painter.addOval((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) - (yMove + (size / 2)), size,size);
+				painter.moveTo((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) + (yMove - (size / 2)));
+				painter.addOval((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) + (yMove - (size / 2)), size, size);
+				painter.closePath();
+				if(addInfo){
+					layout.setDivisionsStyle(painter,false);
+					String repetitions = ("x" + this.getRepeatClose());
+					painter.drawString(repetitions,x2 - painter.getFMWidth(repetitions) + getSpacing() - size,(y1 - painter.getFMHeight()) - Math.round(scale));
+					//TGDimension numberSize = painter.getStringExtent(repetitions);
+					//painter.drawString(repetitions,x2 - numberSize.getWidth() + getSpacing() - size,(y1 - numberSize.getHeight()) - Math.round(scale));
+				}
+			}
+		}else{
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.moveTo(x2 + getSpacing(), y1);
+			painter.lineTo(x2 + getSpacing(), y2);
+			painter.closePath();
+		}
+		painter.setLineWidth(lineWidthSmall);
+	}
+	
+	/**
+	 * Pinta la Clave
+	 */
+	private void paintClef(TGLayout layout,TGPainter painter,int fromX, int fromY) {
+		//-----SCORE ------------------------------------//
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 && this.paintClef){
+			int x = fromX + Math.round( 14 * layout.getScale() ) ;
+			int y = fromY + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+			layout.setClefStyle(painter);
+			painter.initPath(TGPainter.PATH_FILL);
+			if(this.getClef() == TGMeasure.CLEF_TREBLE){
+				TGClefPainter.paintTreble(painter, x, y,layout.getScoreLineSpacing());
+			}
+			else if(this.getClef() == TGMeasure.CLEF_BASS){
+				TGClefPainter.paintBass(painter, x, y,layout.getScoreLineSpacing());
+			}
+			else if(this.getClef() == TGMeasure.CLEF_TENOR){
+				TGClefPainter.paintTenor(painter, x, y,layout.getScoreLineSpacing());
+			}
+			else if(this.getClef() == TGMeasure.CLEF_ALTO){
+				TGClefPainter.paintAlto(painter, x, y,layout.getScoreLineSpacing());
+			}
+			painter.closePath();
+		}
+	}
+	
+	/**
+	 * Pinta la Armadura de Clave
+	 */
+	private void paintKeySignature(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 && this.paintKeySignature){
+			float scale = layout.getScoreLineSpacing();
+			int x = fromX + getClefSpacing(layout) + 10;
+			int y = fromY + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+			int clefIndex = (this.getClef() - 1);
+			int currentKey = this.getKeySignature();
+			int previousKey = (this.prevMeasure != null ? this.prevMeasure.getKeySignature() : 0);
+			
+			layout.setKeySignatureStyle(painter);
+			
+			//natural
+			if(previousKey >= 1 && previousKey <= 7){
+				int naturalFrom =  (currentKey >= 1 && currentKey <= 7) ? currentKey : 0;
+				for(int i = naturalFrom; i < previousKey; i ++ ){
+					float offset =  ( ( (scale / 2) * SCORE_KEY_SHARP_POSITIONS[clefIndex][i] )  - (scale / 2) );
+					painter.initPath(TGPainter.PATH_FILL);
+					TGKeySignaturePainter.paintNatural(painter,x, (y +  offset  ), scale);
+					painter.closePath();
+					x += (scale - (scale / 4));
+				}
+			}
+			else if(previousKey >= 8 && previousKey <= 14){
+				int naturalFrom =  (currentKey >= 8 && currentKey <= 14) ? currentKey : 7;
+				for(int i = naturalFrom; i < previousKey; i ++ ){
+					float offset =  ( ( (scale / 2) * SCORE_KEY_FLAT_POSITIONS[clefIndex][i - 7] )  - (scale / 2) );
+					painter.initPath(TGPainter.PATH_FILL);
+					TGKeySignaturePainter.paintNatural(painter,x, (y +  offset  ), scale);
+					painter.closePath();
+					x += (scale - (scale / 4));
+				}
+			}
+			
+			//sharps
+			if(currentKey >= 1 && currentKey <= 7){
+				for(int i = 0; i < currentKey; i ++ ){
+					float offset =  ( ( (scale / 2) * SCORE_KEY_SHARP_POSITIONS[clefIndex][i] )  - (scale / 2) );
+					painter.initPath(TGPainter.PATH_FILL);
+					TGKeySignaturePainter.paintSharp(painter,x, (y +  offset  ), scale);
+					painter.closePath();
+					x += (scale - (scale / 4));
+				}
+			}
+			//flats
+			else if(currentKey >= 8 && currentKey <= 14){
+				for(int i = 7; i < currentKey; i ++ ){
+					float offset =  ( ( (scale / 2) * SCORE_KEY_FLAT_POSITIONS[clefIndex][i - 7] )  - (scale / 2) );
+					painter.initPath(TGPainter.PATH_FILL);
+					TGKeySignaturePainter.paintFlat(painter,x, (y +  offset  ), scale);
+					painter.closePath();
+					x += (scale - (scale / 4));
+				}
+			}
+		}
+	}
+	
+	private void paintTimeSignature(TGLayout layout,TGPainter painter, int fromX, int fromY){
+		if(this.getHeaderImpl().shouldPaintTimeSignature()){
+			layout.setTimeSignatureStyle(painter);
+			float scale = layout.getScale();
+			int style = layout.getStyle();
+			int leftSpacing = Math.round( 5.0f * scale );
+			int fSize = painter.getFontSize();
+			int fmAscent = painter.getFMAscent();
+			int x = (getClefSpacing(layout) + getKeySignatureSpacing(layout) + getHeaderImpl().getLeftSpacing(layout) + leftSpacing);
+			String numerator = Integer.toString(getTimeSignature().getNumerator());
+			String denominator = Integer.toString(getTimeSignature().getDenominator().getValue());
+			if( (style & TGLayout.DISPLAY_SCORE) != 0 ){
+				int y = getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+				int y1 = (int)(y - (fmAscent - fSize) + (1f * scale));
+				int y2 = (int)(y + getTrackImpl().getScoreHeight() - fmAscent - (1f * scale));
+				painter.drawString(numerator,fromX + x,fromY + y1,true);
+				painter.drawString(denominator,fromX + x,fromY + y2,true);
+			}else if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+				int y = getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE);
+				int y1 = (int)(y - (fmAscent - fSize) + (1f * scale));
+				int y2 = (int)(y + getTrackImpl().getTabHeight() - fmAscent - (1f * scale));
+				painter.drawString(numerator,fromX + x,fromY + y1,true);
+				painter.drawString(denominator,fromX + x,fromY + y2,true);
+			}
+		}
+	}
+	
+	private void paintTempo(TGLayout layout,TGPainter painter){
+		if(this.getHeaderImpl().shouldPaintTempo()){
+			float scale = 5f * layout.getScale(); 
+			int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout));
+			int y = getPosY();
+			int lineSpacing = (Math.max(layout.getScoreLineSpacing() , layout.getStringSpacing()));
+			int style = layout.getStyle();
+			if( (style & TGLayout.DISPLAY_SCORE) != 0 ){
+				y += ( getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - lineSpacing ) ;
+			}else if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+				y += ( getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - lineSpacing ) ;
+			}
+			
+			layout.setTempoStyle(painter, false);
+			int imgX = x;
+			int imgY = (y - (Math.round(scale * 3.5f ) + 2));
+			if( layout.isBufferEnabled() ){
+				painter.drawImage(layout.getResources().getTempoImage(),imgX , imgY );
+			} else {
+				TGTempoPainter.paintTempo(painter, imgX, imgY, scale);
+			}
+			
+			layout.setTempoStyle(painter, true);
+			String value = (" = " + getTempo().getValue());
+			int fontX = x + (Math.round( (1.33f * scale) ) + 1 );
+			int fontY = Math.round(y - painter.getFMHeight() - (1.0f * layout.getScale()));
+			painter.drawString(value , fontX, fontY, true);
+		}
+	}
+	
+	private void paintTripletFeel(TGLayout layout,TGPainter painter){
+		if(this.getHeaderImpl().shouldPaintTripletFeel()){
+			float scale = (5f * layout.getScale());
+			int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getHeaderImpl().getTempoSpacing(layout));
+			int y = (getPosY());
+			int lineSpacing = (Math.max(layout.getScoreLineSpacing() , layout.getStringSpacing()));
+			int style = layout.getStyle();
+			if( (style & TGLayout.DISPLAY_SCORE) != 0 ){
+				y += ( getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - lineSpacing );
+			}else if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+				y += ( getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - lineSpacing );
+			}
+			
+			layout.setTripletFeelStyle(painter, true);
+			String equal = (" = ");
+			int fontX = x + (Math.round( (1.33f * scale) + (1.5f * scale) ));
+			int fontY = Math.round(y - painter.getFMHeight() - (1.0f * layout.getScale()));
+			painter.drawString(equal, fontX , fontY, true);
+			
+			layout.setTripletFeelStyle(painter, false);
+			int x1 = x;
+			int x2 = x + (Math.round( (1.33f * scale) + (1.5f * scale) ) + painter.getFMWidth(equal));
+			int y1 = y - (Math.round( (1.0f * scale) + (2.5f * scale) ) + 2);
+			int y2 = y - (Math.round( (1.0f * scale) + (2.5f * scale) + (1.0f * scale)) + 2);
+			
+			if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_NONE && this.prevMeasure != null){
+				int previous = this.prevMeasure.getTripletFeel();
+				if(previous == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){
+					if( layout.isBufferEnabled() ){
+						painter.drawImage(layout.getResources().getTripletFeel8(), x1, y2 );
+						painter.drawImage(layout.getResources().getTripletFeelNone8(),x2 , y1 );
+					}
+					else{
+						TGTripletFeelPainter.paintTripletFeel8(painter, x1, y2, scale );
+						TGTripletFeelPainter.paintTripletFeelNone8(painter, x2 , y1, scale );
+					}
+				}
+				else if(previous == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){
+					if( layout.isBufferEnabled() ){
+						painter.drawImage(layout.getResources().getTripletFeel16(), x1, y2 );
+						painter.drawImage(layout.getResources().getTripletFeelNone16(),x2 , y1 );
+					}
+					else{
+						TGTripletFeelPainter.paintTripletFeel16(painter, x1, y2, scale );
+						TGTripletFeelPainter.paintTripletFeelNone16(painter, x2 , y1, scale );
+					}
+				}
+			}
+			else if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){
+				if( layout.isBufferEnabled() ){
+					painter.drawImage(layout.getResources().getTripletFeelNone8(), x1, y1 );
+					painter.drawImage(layout.getResources().getTripletFeel8(),x2 , y2 );
+				}
+				else{
+					TGTripletFeelPainter.paintTripletFeelNone8(painter, x1, y1, scale );
+					TGTripletFeelPainter.paintTripletFeel8(painter, x2 , y2, scale );
+				}
+			}
+			else if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){
+				if( layout.isBufferEnabled() ){
+					painter.drawImage(layout.getResources().getTripletFeelNone16(), x1, y1 );
+					painter.drawImage(layout.getResources().getTripletFeel16(),x2 , y2 );
+				}
+				else{
+					TGTripletFeelPainter.paintTripletFeelNone16(painter, x1, y1, scale );
+					TGTripletFeelPainter.paintTripletFeel16(painter, x2 , y2, scale );
+				}
+			}
+		}
+	}
+	
+	private void paintLoopMarker(TGLayout layout,TGPainter painter){
+		if( layout.hasLoopMarker( this ) ){
+			int size = Math.round( layout.getLoopMarkerSpacing() - (1f * layout.getScale()));
+			if( layout.getComponent().isLoopSHeader(this.getHeader())){
+				int x = (getPosX() + Math.round(size / 2f) );
+				int y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_LOOP_MARKER));
+				layout.setLoopSMarkerStyle(painter);
+				paintLoopMarker(painter, x, y, size);
+			}
+			if( layout.getComponent().isLoopEHeader(this.getHeader())){
+				float x = (getPosX() + getWidth(layout) + getSpacing() - size );
+				float y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_LOOP_MARKER));
+				layout.setLoopEMarkerStyle(painter);
+				paintLoopMarker(painter, x, y, size);
+			}
+		}
+	}
+	
+	private void paintLoopMarker(TGPainter painter, float x, float y, float size){
+		painter.initPath( TGPainter.PATH_FILL );
+		painter.addRectangle(x, y, size, size);
+		painter.closePath();
+	}
+	
+	private void paintMarker(TGLayout layout,TGPainter painter){
+		if( this.hasMarker() ){
+			int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getFirstNoteSpacing(layout));
+			int y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_MARKER));
+			
+			layout.setMarkerStyle(painter,getMarkerColor(painter));
+			painter.drawString(getMarker().getTitle(), x, y);
+		}
+	}
+	
+	private void paintTexts(TGLayout layout,TGPainter painter){
+		Iterator it = getBeats().iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			if( beat.isTextBeat() ){
+				TGTextImpl text = (TGTextImpl)beat.getText();
+				text.paint(layout, painter,(getPosX() + getHeaderImpl().getLeftSpacing(layout) ),getPosY());
+			}
+		}
+	}
+	
+	private void paintPlayMode(TGLayout layout,TGPainter painter){
+		if(layout.isPlayModeEnabled() && isPlaying(layout)){
+			float scale = layout.getScale();
+			int width = getWidth(layout) + getSpacing();
+			int y1 = getPosY();
+			int y2 = getPosY();
+			int style = layout.getStyle();
+			if( (style & (TGLayout.DISPLAY_SCORE | TGLayout.DISPLAY_TABLATURE)) == (TGLayout.DISPLAY_SCORE | TGLayout.DISPLAY_TABLATURE) ){
+				y1 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - layout.getScoreLineSpacing());
+				y2 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + getTrackImpl().getTabHeight() + layout.getStringSpacing());
+			}else if( (style & TGLayout.DISPLAY_SCORE) != 0 ){
+				y1 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - layout.getScoreLineSpacing());
+				y2 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) + (layout.getScoreLineSpacing() * 5));
+			} else if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+				y1 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - layout.getStringSpacing());
+				y2 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + getTrackImpl().getTabHeight() + layout.getStringSpacing());
+			}
+			layout.setMeasurePlayingStyle(painter);
+			// Don't uncomment "lineStyle" until be sure SWT bug has fixed.
+			// See bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=225725
+			//painter.setLineStyle(SWT.LINE_DASH);
+			painter.setLineWidth(1);
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.addRectangle(getPosX() + (5f * scale),y1,width - (10f * scale),(y2 - y1));
+			painter.closePath();
+			//painter.setLineStyle(SWT.LINE_SOLID);
+		}
+	}
+	
+	/**
+	 * Retorna true si se esta reproduciendo y la posicion del player esta en este compas.
+	 */
+	public boolean isPlaying(TGLayout layout){
+		return layout.getComponent().isRunning(this);
+	}
+	
+	public int getBeatSpacing(TGBeat beat){
+		return  (int)((beat.getStart() - getStart())  * getSpacing() / getLength());
+	}
+	
+	public boolean hasTrack(int number){
+		return (getTrack().getNumber() == number);
+	}
+	
+	/**
+	 * Retorna el ancho del Compas
+	 */
+	public int getWidth(TGLayout layout) {
+		return ((layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) != 0 ?this.getHeaderImpl().getMaxWidth():this.width);
+	}
+	
+	private int calculateKeySignatureSpacing(TGLayout layout){
+		int spacing = 0;
+		if(this.paintKeySignature){
+			if(this.getKeySignature() <= 7){
+				spacing += Math.round( ( 6f * layout.getScale() ) * this.getKeySignature() ) ;
+			}else{
+				spacing += Math.round( ( 6f * layout.getScale() ) * (this.getKeySignature() - 7) ) ;
+			}
+			if(this.prevMeasure != null ){
+				if(this.prevMeasure.getKeySignature() <= 7){
+					spacing += Math.round( ( 6f * layout.getScale() ) * this.prevMeasure.getKeySignature() ) ;
+				}else{
+					spacing += Math.round( ( 6f * layout.getScale() ) * (this.prevMeasure.getKeySignature() - 7) ) ;
+				}
+			}
+		}
+		return spacing;
+	}
+	
+	public int getFirstNoteSpacing(TGLayout layout){
+		return getHeaderImpl().getFirstNoteSpacing(layout,this);
+	}
+	
+	public int getClefSpacing(TGLayout layout){
+		return getHeaderImpl().getClefSpacing(layout, this);
+	}
+	
+	public int getKeySignatureSpacing(TGLayout layout){
+		return getHeaderImpl().getKeySignatureSpacing(layout, this);
+	}
+	
+	public long getDivisionLength(){
+		return this.divisionLength;
+	}
+	
+	public boolean isBufferCreated() {
+		return this.bufferCreated;
+	}
+	
+	public void setBufferCreated(boolean bufferCreated) {
+		this.bufferCreated = bufferCreated;
+	}
+	
+	/**
+	 * Retorna la posicion X dentro del compas
+	 */
+	public int getPosX() {
+		return this.posX;
+	}
+	
+	/**
+	 * Asigna la posicion X dentro del compas
+	 */
+	public void setPosX(int posX) {
+		this.posX = posX;
+	}
+	
+	/**
+	 * Retorna la posicion Y dentro del compas
+	 */
+	public int getPosY() {
+		return this.posY;
+	}
+	
+	/**
+	 * Asigna la posicion Y dentro del compas
+	 */
+	public void setPosY(int posY) {
+		this.posY = posY;
+	}
+	
+	/**
+	 * Retorna el spacing de negras
+	 */
+	private int getQuarterSpacing(){
+		return this.quarterSpacing;
+	}
+	
+	/**
+	 * Retorna el spacing de negras
+	 */
+	private int getMaxQuarterSpacing(TGLayout layout){
+		return (((layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) != 0)?getHeaderImpl().getMaxQuarterSpacing():this.quarterSpacing);
+	}
+	
+	public TGMeasureHeaderImpl getHeaderImpl(){
+		return (TGMeasureHeaderImpl)super.getHeader();
+	}
+	
+	public int getSpacing() {
+		return this.spacing;
+	}
+	
+	public void setSpacing(int spacing) {
+		if(spacing != this.spacing){
+			setBufferCreated(false);
+		}
+		this.spacing = spacing;
+	}
+	
+	public boolean isOutOfBounds() {
+		return this.outOfBounds;
+	}
+	
+	public void setOutOfBounds(boolean outOfBounds) {
+		this.outOfBounds = outOfBounds;
+	}
+	
+	public boolean isFirstOfLine() {
+		return this.firstOfLine;
+	}
+	
+	public void setFirstOfLine(boolean firstOfLine) {
+		this.firstOfLine = firstOfLine;
+	}
+	
+	public TGTrackImpl getTrackImpl(){
+		return (TGTrackImpl)super.getTrack();
+	}
+	
+	public TGTrackSpacing getTs() {
+		return this.ts;
+	}
+	
+	public void setTs(TGTrackSpacing ts) {
+		if(getTs() == null){
+			setBufferCreated(false);
+		}else if(getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) != ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)){
+			setBufferCreated(false);
+		}else if(getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) != ts.getPosition(TGTrackSpacing.POSITION_TABLATURE)){
+			setBufferCreated(false);
+		}else if(getTs().getPosition(TGTrackSpacing.POSITION_EFFECTS) != ts.getPosition(TGTrackSpacing.POSITION_EFFECTS)){
+			setBufferCreated(false);
+		}
+		this.ts = ts;
+	}
+	
+	public int getMaxY() {
+		return this.maxY;
+	}
+	
+	public int getMinY() {
+		return this.minY;
+	}
+	
+	public int getNotEmptyBeats(){
+		return this.notEmptyBeats;
+	}
+	
+	public int getNotEmptyVoices(){
+		return this.notEmptyVoices;
+	}
+	
+	public int getLyricBeatIndex() {
+		return this.lyricBeatIndex;
+	}
+	
+	public void setLyricBeatIndex(int lyricBeatIndex) {
+		this.lyricBeatIndex = lyricBeatIndex;
+	}
+	
+	public boolean isPaintClef() {
+		return this.paintClef;
+	}
+	
+	public boolean isPaintKeySignature() {
+		return this.paintKeySignature;
+	}
+	
+	public boolean isDisposed(){
+		return getBuffer().isDisposed();
+	}
+	
+	public TGMeasureBuffer getBuffer(){
+		if(this.buffer == null){
+			this.buffer = new TGMeasureBuffer();
+		}
+		return this.buffer;
+	}
+	
+	public void disposeBuffer(){
+		if(this.buffer != null && !this.buffer.isDisposed() ){
+			this.buffer.dispose();
+			this.buffer = null;
+		}
+	}
+	
+	public TGColor getMarkerColor( TGPainter painter ){
+		TGMarker m = getMarker();
+		if(this.markerColor != null && !this.markerColor.isDisposed()){
+			if( this.markerColor.getRed() != m.getColor().getR() || this.markerColor.getGreen() != m.getColor().getG() || this.markerColor.getBlue() != m.getColor().getB() ){
+				this.disposeMarkerColor();
+			}
+		}
+		if(this.markerColor == null || this.markerColor.isDisposed()){
+			this.markerColor = painter.createColor(m.getColor().getR(),m.getColor().getG(),m.getColor().getB());
+		}
+		return this.markerColor;
+	}
+	
+	public void disposeMarkerColor(){
+		if(this.markerColor != null && !this.markerColor.isDisposed()){
+			this.markerColor.dispose();
+			this.markerColor = null;
+		}
+	}
+	
+	public void disposeBeats(){
+		Iterator it = getBeats().iterator();
+		while(it.hasNext()){
+			TGBeatImpl beat = (TGBeatImpl)it.next();
+			beat.dispose();
+		}
+	}
+	
+	public void dispose(){
+		this.disposeBuffer();
+		this.disposeMarkerColor();
+		this.disposeBeats();
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGNoteImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGNoteImpl.java
new file mode 100644
index 0000000..197e358
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGNoteImpl.java
@@ -0,0 +1,665 @@
+/*
+ * Created on 29-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.control.painters.TGKeySignaturePainter;
+import org.herac.tuxguitar.graphics.control.painters.TGNotePainter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGNoteImpl extends TGNote {
+	
+	private TGRectangle noteOrientation;
+	
+	private int tabPosY;
+	
+	private int scorePosY;
+	
+	private int accidental;
+	
+	public TGNoteImpl(TGFactory factory) {
+		super(factory);
+		this.noteOrientation = new TGRectangle();
+	}
+	
+	/**
+	 * Actualiza los valores para dibujar
+	 */
+	public void update(TGLayout layout) {
+		this.accidental = getMeasureImpl().getNoteAccidental( getRealValue() );
+		this.tabPosY = ( (getString() * layout.getStringSpacing()) - layout.getStringSpacing() );
+		this.scorePosY = getVoiceImpl().getBeatGroup().getY1(layout,this,getMeasureImpl().getKeySignature(),getMeasureImpl().getClef());
+	}
+	
+	/**
+	 * Pinta la nota
+	 */
+	public void paint(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		int spacing = getBeatImpl().getSpacing();
+		paintScoreNote(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES),spacing);
+		if(!layout.isPlayModeEnabled()){
+			paintOfflineEffects(layout, painter,fromX,fromY, spacing);
+		}
+		paintTablatureNote(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE),spacing);
+	}
+	
+	private void paintOfflineEffects(TGLayout layout,TGPainter painter,int fromX, int fromY, int spacing){		
+		TGSpacing bs = getBeatImpl().getBs();
+		TGSpacing ts = getMeasureImpl().getTs();
+		TGNoteEffect effect = getEffect();
+		
+		int tsY = (fromY + ts.getPosition(TGTrackSpacing.POSITION_EFFECTS));
+		int bsY = (tsY + (ts.getSize(TGTrackSpacing.POSITION_EFFECTS) - bs.getSize( )));
+		
+		layout.setOfflineEffectStyle(painter);
+		if(effect.isAccentuatedNote()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_ACCENTUATED_EFFECT ));
+			paintAccentuated(layout, painter, x, y);
+		}
+		if(effect.isHeavyAccentuatedNote()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_HEAVY_ACCENTUATED_EFFECT ));
+			paintHeavyAccentuated(layout, painter, x, y);
+		}
+		if(effect.isFadeIn()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_FADE_IN ));
+			paintFadeIn(layout, painter, x, y);
+		}
+		if(effect.isHarmonic() && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_HARMONIC_EFFEC ));
+			String key = new String();
+			key = effect.getHarmonic().isNatural()?TGEffectHarmonic.KEY_NATURAL:key;
+			key = effect.getHarmonic().isArtificial()?TGEffectHarmonic.KEY_ARTIFICIAL:key;
+			key = effect.getHarmonic().isTapped()?TGEffectHarmonic.KEY_TAPPED:key;
+			key = effect.getHarmonic().isPinch()?TGEffectHarmonic.KEY_PINCH:key;
+			key = effect.getHarmonic().isSemi()?TGEffectHarmonic.KEY_SEMI:key;
+			painter.drawString(key,x, y);
+		}
+		if(effect.isTapping()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_TAPPING_EFFEC ));
+			painter.drawString("T",x, y);
+		}
+		if(effect.isSlapping()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_SLAPPING_EFFEC ));
+			painter.drawString("S",x, y);
+		}
+		if(effect.isPopping()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_POPPING_EFFEC ));
+			painter.drawString("P",x, y);
+		}
+		if(effect.isPalmMute()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_PALM_MUTE_EFFEC ));
+			painter.drawString("P.M",x, y);
+		}
+		if(effect.isLetRing()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_LET_RING_EFFEC ));
+			painter.drawString("L.R",x, y);
+		}
+		if(effect.isVibrato()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_VIBRATO_EFFEC ));
+			paintVibrato(layout, painter,x,y);
+		}
+		if(effect.isTrill()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_TRILL_EFFEC ));
+			paintTrill(layout, painter,x,y);
+		}
+	}
+	
+	/**
+	 * Pinta la nota en la tablatura
+	 */
+	public void paintTablatureNote(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing) {
+		int style = layout.getStyle();
+		if((style & TGLayout.DISPLAY_TABLATURE) != 0){
+			int stringSpacing = layout.getStringSpacing();
+			int x = fromX + getPosX() + spacing + 2;
+			int y = fromY + getTabPosY();
+			
+			this.noteOrientation.setX(x);
+			this.noteOrientation.setY(y);
+			this.noteOrientation.setWidth(1);
+			this.noteOrientation.setHeight(1);
+			
+			layout.setTabNoteStyle(painter, (layout.isPlayModeEnabled() && getBeatImpl().isPlaying(layout)));
+			//-------------ligadura--------------------------------------
+			if (isTiedNote() && (style & TGLayout.DISPLAY_SCORE) == 0) {
+				float tX = 0;
+				float tY = 0;
+				float tWidth = 0;
+				float tHeight = (stringSpacing * 3);
+				TGNoteImpl noteForTie = getNoteForTie();
+				if (noteForTie != null) {
+					tX = (fromX + noteForTie.getPosX() + noteForTie.getBeatImpl().getSpacing());
+					tY = (fromY + noteForTie.getTabPosY() + stringSpacing);
+					tWidth = (x - tX);
+				}else{
+					TGRectangle r = layout.getNoteOrientation(painter,x,y,this);
+					tX = r.getX() - (stringSpacing * 2);
+					tY = (fromY + getTabPosY() + stringSpacing);
+					tWidth = (stringSpacing * 2);
+				}
+				painter.initPath();
+				painter.addArc(tX, (tY - tHeight ), tWidth, tHeight, 225,90);
+				painter.closePath();
+				
+			//-------------nota--------------------------------------
+			} else if(!isTiedNote()){
+				TGRectangle r = layout.getNoteOrientation(painter,x,y,this);
+				this.noteOrientation.setX(r.getX());
+				this.noteOrientation.setY(r.getY());
+				this.noteOrientation.setWidth(r.getWidth());
+				this.noteOrientation.setHeight(r.getHeight());
+				String visualNote = (getEffect().isDeadNote())?"X":Integer.toString(getValue());
+				visualNote = (getEffect().isGhostNote())?"(" + visualNote + ")":visualNote;
+				painter.drawString(visualNote, this.noteOrientation.getX(), this.noteOrientation.getY());
+			}
+			
+			//-------------efectos--------------------------------------
+			if(! layout.isPlayModeEnabled() ){
+				
+				paintEffects(layout,painter,fromX,fromY,spacing);
+				
+				if((style & TGLayout.DISPLAY_SCORE) == 0){
+					int y1 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + (stringSpacing / 2));
+					int y2 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + ((stringSpacing / 2) * 5));
+					
+					//-------------tremolo picking--------------------------------------
+					if(getEffect().isTremoloPicking()){
+						layout.setTabEffectStyle(painter);
+						painter.initPath();
+						int posy = (y1 + ((y2 - y1) / 2));
+						for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){
+							painter.moveTo(x - 3, posy - 1);
+							painter.lineTo(x + 4,posy + 1);
+							posy += 4;
+						}
+						painter.setLineWidth(2);
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Pinta la nota en la partitura
+	 */
+	private void paintScoreNote(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing) {
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+			float scale = layout.getScoreLineSpacing();
+			int direction = getVoiceImpl().getBeatGroup().getDirection();
+			int key = getMeasureImpl().getKeySignature();
+			int clef = getMeasureImpl().getClef();
+			
+			int x = ( fromX + getPosX() + spacing );
+			int y1 = ( fromY + getScorePosY() ) ;
+			
+			//-------------foreground--------------------------------------
+			boolean playing = (layout.isPlayModeEnabled() && getBeatImpl().isPlaying(layout));
+			
+			layout.setScoreNoteStyle(painter,playing);
+			
+			//----------ligadura---------------------------------------
+			if (isTiedNote()) {
+				TGNoteImpl noteForTie = getNoteForTie();
+				float tScale = (scale / 8.0f);
+				float tX = x - (20.0f * tScale);
+				float tY = y1 - (2.0f * tScale);
+				float tWidth = (20.0f * tScale);
+				float tHeight = (30.0f * tScale);
+				if (noteForTie != null) {
+					int tNoteX = (fromX + noteForTie.getPosX() + noteForTie.getBeatImpl().getSpacing());
+					int tNoteY = (fromY + getScorePosY());
+					tX = tNoteX + (6.0f * tScale);
+					tY = tNoteY - (3.0f * tScale);
+					tWidth = (x - tNoteX) - (3.0f * tScale);
+					tHeight = (35.0f * tScale);
+				}
+				painter.initPath();
+				painter.addArc(tX,tY, tWidth, tHeight, 45, 90);
+				painter.closePath();
+			}
+			//----------sostenido--------------------------------------
+			if(this.accidental == TGMeasureImpl.NATURAL){
+				painter.initPath(TGPainter.PATH_FILL);
+				TGKeySignaturePainter.paintNatural(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale);
+				painter.closePath();
+			}
+			else if(this.accidental == TGMeasureImpl.SHARP){
+				painter.initPath(TGPainter.PATH_FILL);
+				TGKeySignaturePainter.paintSharp(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale);
+				painter.closePath();
+			}
+			else if(this.accidental == TGMeasureImpl.FLAT){
+				painter.initPath(TGPainter.PATH_FILL);
+				TGKeySignaturePainter.paintFlat(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale);
+				painter.closePath();
+			}
+			//----------fin sostenido--------------------------------------
+			if(getEffect().isHarmonic()){
+				if( layout.isBufferEnabled() ){
+					painter.drawImage(layout.getResources().getHarmonicNote(getVoice().getDuration().getValue(),playing),x,y1);
+				}else{
+					boolean full = (getVoice().getDuration().getValue() >= TGDuration.QUARTER);
+					painter.initPath((full ? TGPainter.PATH_DRAW | TGPainter.PATH_FILL : TGPainter.PATH_DRAW));
+					TGNotePainter.paintHarmonic(painter,x,y1+1,(layout.getScoreLineSpacing() - 2) );
+					painter.closePath();
+				}
+			}else{
+				if( layout.isBufferEnabled() ){
+					painter.drawImage(layout.getResources().getScoreNote(getVoice().getDuration().getValue(),playing),x,y1);
+				}else{
+					boolean full = (getVoice().getDuration().getValue() >= TGDuration.QUARTER);
+					painter.initPath((full ? TGPainter.PATH_FILL : TGPainter.PATH_DRAW));
+					TGNotePainter.paintNote(painter,x,y1+1, ((full ? layout.getScoreLineSpacing() + 1 : layout.getScoreLineSpacing() ) - 2) );
+					painter.closePath();
+				}
+			}
+			
+			if(! layout.isPlayModeEnabled() ){
+				
+				if(getEffect().isGrace()){
+					paintGrace(layout, painter,x ,y1);
+				}
+				
+				//PUNTILLO y DOBLE PUNTILLO
+				if (getVoice().getDuration().isDotted() || getVoice().getDuration().isDoubleDotted()) {
+					getVoiceImpl().paintDot(layout, painter,( x + (12.0f * (scale / 8.0f) ) ), ( y1 + (layout.getScoreLineSpacing()/ 2)), (scale / 10.0f) );
+				}
+				
+				//dibujo el pie
+				if(getVoice().getDuration().getValue() >= TGDuration.HALF){
+					layout.setScoreNoteFooterStyle(painter);
+					int xMove = (direction == TGBeatGroup.DIRECTION_UP ? layout.getResources().getScoreNoteWidth() : 0);
+					int y2 = fromY + getVoiceImpl().getBeatGroup().getY2(layout,getPosX() + spacing,key,clef);
+					
+					//staccato
+					if (getEffect().isStaccato()) {
+						int size = 3;
+						int sX = x + xMove;
+						int sY = (y2 + (4 * ((direction == TGBeatGroup.DIRECTION_UP)?-1:1)));
+						layout.setScoreEffectStyle(painter);
+						painter.initPath(TGPainter.PATH_FILL);
+						painter.moveTo(sX - (size / 2),sY - (size / 2));
+						painter.addOval(sX - (size / 2),sY - (size / 2),size,size);
+						painter.closePath();
+					}
+					//tremolo picking
+					if(getEffect().isTremoloPicking()){
+						layout.setScoreEffectStyle(painter);
+						painter.initPath();
+						int tpY = fromY;
+						if((direction == TGBeatGroup.DIRECTION_UP)){
+							tpY += (getVoiceImpl().getBeatGroup().getMaxNote().getScorePosY() - layout.getScoreLineSpacing() - 4);
+						}else{
+							tpY += (getVoiceImpl().getBeatGroup().getMinNote().getScorePosY() + layout.getScoreLineSpacing() + 4);
+						}
+						for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){
+							painter.moveTo(x + xMove - 3, tpY + 1);
+							painter.lineTo(x + xMove + 4,tpY - 1);
+							tpY += 4;
+						}
+						painter.setLineWidth(2);
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}else{
+					//staccato
+					if (getEffect().isStaccato()) {
+						int size = 3;
+						int sX = x + (layout.getResources().getScoreNoteWidth() / 2);
+						int sY = (fromY + getVoiceImpl().getBeatGroup().getMinNote().getScorePosY() + layout.getScoreLineSpacing()) + 2;
+						layout.setScoreEffectStyle(painter);
+						painter.initPath(TGPainter.PATH_FILL);
+						painter.moveTo(sX - (size / 2),sY - (size / 2));
+						painter.addOval(sX - (size / 2),sY - (size / 2),size,size);
+						painter.closePath();
+					}
+					//tremolo picking
+					if(getEffect().isTremoloPicking()){
+						layout.setScoreEffectStyle(painter);
+						painter.initPath();
+						int tpX = (x + (layout.getResources().getScoreNoteWidth() / 2));
+						int tpY = fromY + (getVoiceImpl().getBeatGroup().getMaxNote().getScorePosY() - layout.getScoreLineSpacing() - 4);
+						for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){
+							painter.moveTo(tpX - 3, tpY + 1);
+							painter.lineTo(tpX + 4,tpY - 1);
+							tpY += 4;
+						}
+						painter.setLineWidth(2);
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Encuentra la nota a la que esta ligada
+	 */
+	private TGNoteImpl getNoteForTie() {
+		for (int i = getMeasureImpl().countBeats() - 1; i >= 0; i--) {
+			TGBeat beat = getMeasureImpl().getBeat(i);
+			TGVoice voice = beat.getVoice( getVoice().getIndex() );
+			if (beat.getStart() < getBeatImpl().getStart() && !voice.isRestVoice()) {
+				Iterator it = voice.getNotes().iterator();
+				while(it.hasNext()){
+					TGNoteImpl note = (TGNoteImpl)it.next();
+					if (note.getString() == getString()) {
+						return note;
+					}
+				}
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Pinta los efectos
+	 */
+	private void paintEffects(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing){
+		int x = fromX + getPosX() + spacing;
+		int y = fromY + getTabPosY();
+		TGNoteEffect effect = getEffect();
+		if(effect.isGrace()){
+			layout.setTabGraceStyle(painter);
+			String value = Integer.toString(effect.getGrace().getFret());
+			painter.drawString(value, (this.noteOrientation.getX() - painter.getFMWidth(value) - 2), this.noteOrientation.getY() );
+		}
+		if(effect.isBend()){
+			paintBend(layout, painter,(this.noteOrientation.getX() + this.noteOrientation.getWidth()), y);
+		}else if(effect.isTremoloBar()){
+			paintTremoloBar(layout, painter,(this.noteOrientation.getX() + this.noteOrientation.getWidth()), y);
+		}else if(effect.isSlide() || effect.isHammer()){
+			int nextFromX = fromX;
+			TGNoteImpl nextNote = (TGNoteImpl)layout.getSongManager().getMeasureManager().getNextNote(getMeasureImpl(),getBeatImpl().getStart(),getVoice().getIndex(),getString());
+			if(effect.isSlide()){
+				paintSlide(layout, painter, nextNote, x, y, nextFromX);
+			}else if(effect.isHammer()){
+				paintHammer(layout, painter, nextNote, x, y, nextFromX);
+			}
+		}
+	}
+	
+	private void paintBend(TGLayout layout,TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = (fromX + (1.0f * scale));
+		float y = (fromY - (2.0f * scale));
+		
+		layout.setTabEffectStyle(painter);
+		
+		painter.initPath();
+		painter.moveTo( x, y );
+		painter.lineTo( x + (1.0f * scale), y );
+		painter.cubicTo(x + (1.0f * scale), y,  x + (3.0f * scale), y , x + (3.0f * scale), y - (2.0f * scale));
+		painter.moveTo( x + (3.0f * scale), y - (2.0f * scale) );
+		painter.lineTo( x + (3.0f * scale), y - (12.0f * scale));
+		painter.moveTo( x + (3.0f * scale), y - (12.0f * scale));
+		painter.lineTo( x + (1.0f * scale), y - (10.0f * scale));
+		painter.moveTo( x + (3.0f * scale), y - (12.0f * scale));
+		painter.lineTo( x + (5.0f * scale), y - (10.0f * scale));
+		painter.closePath();
+	}
+	
+	private void paintTremoloBar(TGLayout layout,TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x1 = fromX + (1.0f * scale);
+		float x2 = x1 + (8.0f * scale);
+		float y1 = fromY;
+		float y2 = y1 + (9.0f * scale);
+		layout.setTabEffectStyle(painter);
+		painter.initPath();
+		painter.moveTo(x1,y1);
+		painter.lineTo(x1 + ( (x2 - x1) / 2 ),y2);
+		painter.moveTo(x1 + ( (x2 - x1) / 2 ),y2);
+		painter.lineTo(x2,y1);
+		painter.closePath();
+	}
+	
+	private void paintSlide(TGLayout layout,TGPainter painter,TGNoteImpl nextNote,int fromX,int fromY,int nextFromX){
+		float xScale = layout.getScale();
+		float yScale = (layout.getStringSpacing() / 10.0f);
+		float yMove = (3.0f * yScale);
+		float x = fromX;
+		float y = fromY;
+		layout.setTabEffectStyle(painter);
+		if(nextNote != null){
+			float nextX = nextNote.getPosX() + nextFromX + nextNote.getBeatImpl().getSpacing();
+			float nextY = y;
+			
+			if(nextNote.getValue() < getValue()){
+				y -= yMove;
+				nextY += yMove;
+			}else if(nextNote.getValue() > getValue()){
+				y += yMove;
+				nextY -= yMove;
+			}else{
+				y -= yMove;
+				nextY -= yMove;
+			}
+			painter.initPath();
+			painter.moveTo(x + (6.0f * xScale),y);
+			painter.lineTo(nextX - (3.0f * xScale),nextY);
+			painter.closePath();
+		}else{
+			painter.initPath();
+			painter.moveTo(x + (6.0f * xScale),y - yMove);
+			painter.lineTo(x + (17.0f * xScale),y - yMove);
+			painter.closePath();
+		}
+	}
+	
+	private void paintHammer(TGLayout layout,TGPainter painter,TGNoteImpl nextNote,int fromX,int fromY,int nextFromX){
+		float xScale = layout.getScale();
+		float yScale = (layout.getStringSpacing() / 10.0f);
+		
+		float x = (fromX + (7.0f * xScale));
+		float y = (fromY - (5.0f * yScale));
+		
+		float width = (nextNote != null)?( (nextNote.getPosX() + nextFromX + nextNote.getBeatImpl().getSpacing()) - (4.0f * xScale) - x ):(10.0f * xScale);
+		float height = (15.0f * yScale);
+		layout.setTabEffectStyle(painter);
+		painter.initPath();
+		painter.addArc(x,y, width, height, 45,90);
+		painter.closePath();
+	}
+	
+	private void paintGrace(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = ( layout.getScoreLineSpacing() / 2.25f );
+		
+		float x = fromX - (2f * scale);
+		float y = fromY + (scale / 3);
+		
+		layout.setScoreEffectStyle(painter);
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintFooter(painter,x, y , -1 , scale);
+		painter.closePath();
+		
+		painter.initPath();
+		painter.moveTo(x, y - (2f * scale));
+		painter.lineTo(x, y + (2f * scale) - (scale / 4f));
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x - scale*1.33f, y + scale + (scale / 4f),  scale);
+		painter.closePath();
+		
+		painter.initPath();
+		painter.moveTo(x - scale, y );
+		painter.lineTo(x + scale, y - scale);
+		painter.closePath();
+	}
+	
+	private void paintVibrato(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = fromX;
+		float y = fromY + (2.0f * scale);
+		float width = ( getVoiceImpl().getWidth() - (2.0f * scale) );
+		
+		int loops = (int)(width / (6.0f * scale) );
+		if(loops > 0 ){
+			layout.setTabEffectStyle(painter);
+			painter.initPath(TGPainter.PATH_FILL);
+			painter.moveTo(( x + ((2.0f) * scale) ),( y + (1.0f * scale) ));
+			for( int i = 0; i < loops ; i ++ ){
+				x = (fromX + ( (6.0f * scale) * i ) );
+				painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+				painter.cubicTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ),( x + (3.0f * scale) ), y ,( x + (4.0f * scale) ),( y + (1.0f * scale) ));
+				painter.lineTo(( x + (6.0f * scale) ),( y + (3.0f * scale) ));
+			}
+			
+			painter.lineTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ));
+			painter.cubicTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ),( x + (8.0f * scale) ),( y + (2.0f * scale) ),( x + (7.0f * scale) ),( y + (3.0f * scale) ));
+			
+			for( int i = (loops - 1); i >= 0 ; i -- ){
+				x = (fromX + ( (6.0f * scale) * i ) );
+				painter.lineTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ));
+				painter.cubicTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ),( x + (5.0f * scale) ),( y + (5.0f * scale) ),( x + (4.0f * scale) ),( y + (4.0f * scale) ));
+				painter.lineTo(( x + (2.0f * scale) ),( y + (2.0f * scale) ));
+				painter.lineTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ));
+			}
+			painter.cubicTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ), x ,( y + (3.0f * scale) ),( x + (1.0f * scale) ),( y + (2.0f * scale) ));
+			painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+			painter.closePath();
+		}
+	}
+	
+	private void paintTrill(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		String string = "Tr";
+		int fmWidth = painter.getFMWidth( string );
+		int fmHeight = painter.getFMHeight();
+		float scale = layout.getScale();
+		float x = fromX + fmWidth;
+		float y = fromY + ( (fmHeight - (5.0f * scale)) / 2.0f );
+		float width = ( getVoiceImpl().getWidth() - fmWidth - (2.0f * scale) );
+		
+		int loops = (int)(width / (6.0f * scale) );
+		if(loops > 0 ){
+			painter.drawString(string, fromX, fromY);
+			
+			layout.setTabEffectStyle(painter);
+			painter.initPath(TGPainter.PATH_FILL);
+			painter.moveTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+			for( int i = 0; i < loops ; i ++ ){
+				x = (fromX + fmWidth + ( (6.0f * scale) * i ) );
+				painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+				painter.cubicTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ),( x + (3.0f * scale) ), y ,( x + (4.0f * scale) ),( y + (1.0f * scale) ));
+				painter.lineTo(( x + (6.0f * scale) ),( y + (3.0f * scale) ));
+			}
+			
+			painter.lineTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ));
+			painter.cubicTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ),( x + (8.0f * scale) ),( y + (2.0f * scale) ),( x + (7.0f * scale) ),( y + (3.0f * scale) ));
+			
+			for( int i = (loops - 1); i >= 0 ; i -- ){
+				x = (fromX + fmWidth + ( (6.0f * scale) * i ) );
+				painter.lineTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ));
+				painter.cubicTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ),( x + (5.0f * scale) ),( y + (5.0f * scale) ),( x + (4.0f * scale) ),( y + (4.0f * scale) ));
+				painter.lineTo(( x + (2.0f * scale) ),( y + (2.0f * scale) ));
+				painter.lineTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ));
+			}
+			painter.cubicTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ), x ,( y + (3.0f * scale) ),( x + (1.0f * scale) ),( y + (2.0f * scale) ));
+			painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+			painter.closePath();
+		}
+	}
+	
+	private void paintFadeIn(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = fromX;
+		float y = fromY + (4.0f * scale );
+		float width = getVoiceImpl().getWidth();
+		painter.initPath();
+		painter.moveTo ( x , y );
+		painter.cubicTo( x , y , x + width, y,  x + width, y - (4.0f * scale ));
+		painter.moveTo ( x , y );
+		painter.cubicTo( x , y , x + width, y,  x + width, y + (4.0f * scale ));
+		painter.moveTo ( x + width, y + (4.0f * scale ) );
+		painter.closePath();
+	}
+	
+	private void paintAccentuated(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = fromX;
+		float y = fromY + (2f * scale );
+		painter.initPath();
+		painter.moveTo( x , y );
+		painter.lineTo( x + (6.0f * scale ) , y + (2.5f * scale ));
+		painter.moveTo( x + (6.0f * scale ) , y + (2.5f * scale ));
+		painter.lineTo( x , y + (5.0f * scale ));
+		painter.closePath();
+	}
+	
+	private void paintHeavyAccentuated(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = fromX;
+		float y = fromY;
+		painter.initPath();
+		painter.moveTo( x , y + (5.0f * scale ) );
+		painter.lineTo( x + (3.0f * scale ) , y + (1.0f * scale ));
+		painter.moveTo( x + (3.0f * scale ) , y + (1.0f * scale ));
+		painter.lineTo( x + (6.0f * scale ) , y + (5.0f * scale ) );
+		painter.closePath();
+	}
+	
+	public int getRealValue(){
+		return (getValue() + getMeasureImpl().getTrack().getString(getString()).getValue());
+	}
+	
+	public int getScorePosY() {
+		return this.scorePosY;
+	}
+	
+	public int getTabPosY() {
+		return this.tabPosY;
+	}
+	
+	public TGMeasureImpl getMeasureImpl(){
+		return getBeatImpl().getMeasureImpl();
+	}
+	
+	public int getPaintPosition(int index){
+		return getMeasureImpl().getTs().getPosition(index);
+	}
+	
+	public TGBeatImpl getBeatImpl() {
+		return getVoiceImpl().getBeatImpl();
+	}
+	
+	public TGVoiceImpl getVoiceImpl() {
+		return (TGVoiceImpl)super.getVoice();
+	}
+	
+	public int getPosX() {
+		return getBeatImpl().getPosX();
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGResources.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGResources.java
new file mode 100644
index 0000000..2db7f8c
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGResources.java
@@ -0,0 +1,429 @@
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGFontModel;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGResource;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.painters.TGNotePainter;
+import org.herac.tuxguitar.graphics.control.painters.TGTempoPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGTripletFeelPainter;
+import org.herac.tuxguitar.song.models.TGDuration;
+
+public class TGResources {
+	
+	private static final int SCORE_NOTE_EMPTY_NORMAL_MODE = 0;
+	private static final int SCORE_NOTE_EMPTY_PLAY_MODE = 1;
+	private static final int SCORE_NOTE_FULL_NORMAL_MODE = 2;
+	private static final int SCORE_NOTE_FULL_PLAY_MODE = 3;
+	
+	private List resources;
+	private TGLayout layout;
+	
+	private TGFont defaultFont;
+	private TGFont noteFont;
+	private TGFont timeSignatureFont;
+	private TGFont lyricFont;
+	private TGFont textFont;
+	private TGFont markerFont;
+	private TGFont graceFont;
+	private TGFont chordFont;
+	private TGFont chordFretFont;
+	private TGColor backgroundColor;
+	private TGColor lineColor;
+	private TGColor scoreNoteColor;
+	private TGColor tabNoteColor;
+	private TGColor playNoteColor;
+	private TGColor colorWhite;
+	private TGColor colorBlack;
+	private TGColor colorRed;
+	private TGColor loopSMarkerColor;
+	private TGColor loopEMarkerColor;
+	private TGImage[] scoreNotes;
+	private TGImage[] harmonicNotes;
+	private TGImage tempoImage;
+	private TGImage tripletFeel8;
+	private TGImage tripletFeelNone8;
+	private TGImage tripletFeel16;
+	private TGImage tripletFeelNone16;
+	
+	private int scoreNoteWidth;
+	
+	public TGResources(TGLayout layout){
+		this.layout = layout;
+		this.resources = new ArrayList();
+	}
+	
+	public void load(TGLayoutStyles styles){
+		this.dispose();
+		this.initFonts(styles);
+		this.initColors(styles);
+		this.initImages();
+	}
+	
+	public TGLayout getLayout(){
+		return this.layout;
+	}
+	
+	public TGFont getDefaultFont() {
+		return this.defaultFont;
+	}
+	
+	public TGFont getNoteFont() {
+		return this.noteFont;
+	}
+	
+	public TGFont getTimeSignatureFont() {
+		return this.timeSignatureFont;
+	}
+	
+	public TGFont getLyricFont(){
+		return this.lyricFont;
+	}
+	
+	public TGFont getTextFont(){
+		return this.textFont;
+	}
+	
+	public TGFont getMarkerFont(){
+		return this.markerFont;
+	}
+	
+	public TGFont getChordFont(){
+		return this.chordFont;
+	}
+	
+	public TGFont getChordFretFont(){
+		return this.chordFretFont;
+	}
+	
+	public TGFont getGraceFont() {
+		return this.graceFont;
+	}
+	
+	public TGColor getBackgroundColor() {
+		return this.backgroundColor;
+	}
+	
+	public TGColor getLineColor() {
+		return this.lineColor;
+	}
+	
+	public TGColor getPlayNoteColor() {
+		return this.playNoteColor;
+	}
+	
+	public TGColor getScoreNoteColor() {
+		return this.scoreNoteColor;
+	}
+	
+	public TGColor getTabNoteColor() {
+		return this.tabNoteColor;
+	}
+	
+	public TGColor getColorWhite() {
+		return this.colorWhite;
+	}
+	
+	public TGColor getColorBlack() {
+		return this.colorBlack;
+	}
+	
+	public TGColor getColorRed() {
+		return this.colorRed;
+	}
+	
+	public TGColor getLoopSMarkerColor() {
+		return this.loopSMarkerColor;
+	}
+	
+	public TGColor getLoopEMarkerColor() {
+		return this.loopEMarkerColor;
+	}
+	
+	public TGImage getTempoImage() {
+		return this.tempoImage;
+	}
+	
+	public TGImage getTripletFeel8(){
+		return this.tripletFeel8;
+	}
+	
+	public TGImage getTripletFeelNone8(){
+		return this.tripletFeelNone8;
+	}
+	
+	public TGImage getTripletFeel16(){
+		return this.tripletFeel16;
+	}
+	
+	public TGImage getTripletFeelNone16(){
+		return this.tripletFeelNone16;
+	}
+	
+	public TGImage getScoreNote(int value,boolean playing) {
+		int index = 0;
+		index += ((playing)?1:0);
+		index += ((value >= TGDuration.QUARTER)?2:0);
+		return this.scoreNotes[index];
+	}
+	
+	public TGImage getHarmonicNote(int value,boolean playing) {
+		int index = 0;
+		index += ((playing)?1:0);
+		index += ((value >= TGDuration.QUARTER)?2:0);
+		return this.harmonicNotes[index];
+	}
+	
+	public int getScoreNoteWidth(){
+		return this.scoreNoteWidth;
+	}
+	
+	private void initFonts(TGLayoutStyles style){
+		float scale = this.layout.getFontScale() ;
+		this.defaultFont = getFont(style.getDefaultFont(),scale);
+		this.noteFont = getFont(style.getNoteFont(), scale);
+		this.timeSignatureFont = getFont(style.getTimeSignatureFont(), scale);
+		this.lyricFont = getFont(style.getLyricFont(), scale);
+		this.textFont =  getFont(style.getTextFont(), scale);
+		this.markerFont =  getFont(style.getMarkerFont(), scale);
+		this.graceFont = getFont(style.getGraceFont(), scale);
+		this.chordFont = getFont(style.getChordFont(), scale);
+		this.chordFretFont = getFont(style.getChordFretFont(), scale);
+	}
+	
+	private void initColors(TGLayoutStyles style){
+		this.backgroundColor = getColor(style.getBackgroundColor());
+		this.lineColor = getColor(style.getLineColor());
+		this.scoreNoteColor = getColor(style.getScoreNoteColor());
+		this.tabNoteColor = getColor(style.getTabNoteColor());
+		this.playNoteColor = getColor(style.getPlayNoteColor());
+		this.loopSMarkerColor = getColor(style.getLoopSMarkerColor());
+		this.loopEMarkerColor = getColor(style.getLoopEMarkerColor());
+		// Static colors
+		this.colorWhite = getColor(new TGColorModel(0xff,0xff,0xff));
+		this.colorBlack = getColor(new TGColorModel(0x00,0x00,0x00));
+		this.colorRed = getColor(new TGColorModel(0xff,0x00,0x00));
+	}
+	
+	private void initImages(){
+		this.scoreNotes = new TGImage[4];
+		this.scoreNotes[SCORE_NOTE_EMPTY_NORMAL_MODE] = getScoreNoteImage( getScoreNoteColor(),false);
+		this.scoreNotes[SCORE_NOTE_EMPTY_PLAY_MODE] = getScoreNoteImage( getPlayNoteColor(),false);
+		this.scoreNotes[SCORE_NOTE_FULL_NORMAL_MODE] = getScoreNoteImage( getScoreNoteColor(),true);
+		this.scoreNotes[SCORE_NOTE_FULL_PLAY_MODE] = getScoreNoteImage( getPlayNoteColor(),true);
+		
+		this.harmonicNotes = new TGImage[4];
+		this.harmonicNotes[SCORE_NOTE_EMPTY_NORMAL_MODE] = getHarmonicImage( getScoreNoteColor(),false);
+		this.harmonicNotes[SCORE_NOTE_EMPTY_PLAY_MODE] = getHarmonicImage( getPlayNoteColor(),false);
+		this.harmonicNotes[SCORE_NOTE_FULL_NORMAL_MODE] = getHarmonicImage( getScoreNoteColor(),true);
+		this.harmonicNotes[SCORE_NOTE_FULL_PLAY_MODE] = getHarmonicImage( getPlayNoteColor(),true);
+		
+		this.tempoImage = getTempoImage(this.getColorBlack());
+		
+		this.tripletFeel8 = getTripletFeel8(this.getColorBlack());
+		this.tripletFeelNone8 = getTripletFeelNone8(this.getColorBlack());
+		this.tripletFeel16 = getTripletFeel16(this.getColorBlack());
+		this.tripletFeelNone16 = getTripletFeelNone16(this.getColorBlack());
+	}
+	
+	private TGFont getFont(TGFontModel model, float scale){
+		TGResourceFactory factory = getLayout().getComponent().getResourceFactory();
+		TGFontModel fm = new TGFontModel();
+		if(model != null){
+			float height = ( model.getHeight() * scale );
+			
+			fm.setHeight( ( height > 1 ? Math.round(height) : 1 ) );
+			fm.setName( model.getName() );
+			fm.setBold( model.isBold() );
+			fm.setItalic( model.isItalic() );
+		}
+		
+		return (TGFont)addResource(factory.createFont(fm));
+	}
+	
+	private TGColor getColor(TGColorModel model){
+		TGResourceFactory factory = getLayout().getComponent().getResourceFactory();
+		TGColorModel cm = (model != null ? model : new TGColorModel() );
+		
+		return (TGColor)addResource(factory.createColor(cm));
+	}
+	
+	private TGImage getScoreNoteImage(TGColor color,boolean full) {
+		float scale = (full ? getLayout().getScoreLineSpacing() + 1 : getLayout().getScoreLineSpacing() ) - 2;
+		int width = Math.round(scale * 1.33f);
+		int height = Math.round(scale * 1.0f);
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		painter.initPath( (full ? TGPainter.PATH_FILL : TGPainter.PATH_DRAW) );
+		TGNotePainter.paintNote(painter,0,1, scale );
+		painter.closePath();
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		this.scoreNoteWidth = width;
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getHarmonicImage(TGColor color,boolean full) {
+		int size = getLayout().getScoreLineSpacing();
+		
+		int x = 0;
+		int y = 1;
+		int width = getScoreNoteWidth() - 1;
+		int height = size - 2;
+		
+		TGImage image = getImage(x + width + 2,y + height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setForeground(color);
+		painter.setBackground(color);
+		painter.initPath( ( full ? TGPainter.PATH_DRAW | TGPainter.PATH_FILL : TGPainter.PATH_DRAW )  );
+		TGNotePainter.paintHarmonic(painter, x, y, height);
+		painter.closePath();
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getTempoImage(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		int width = Math.round(scale * 1.33f);
+		int height = Math.round(scale * (1.0f + 2.5f));
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTempoPainter.paintTempo(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getTripletFeelNone8(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		float ovalHeight = (1.0f * scale);
+		
+		int width = Math.round( ovalWidth + horizontalSpacing );
+		int height = Math.round( ovalHeight + verticalSpacing );
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTripletFeelPainter.paintTripletFeelNone8(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getTripletFeel8(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		float topSpacing = (1.0f * scale);
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		float ovalHeight = (1.0f * scale);
+		
+		int width = Math.round( (ovalWidth * 2f) + horizontalSpacing );
+		int height = Math.round((topSpacing + ovalHeight + verticalSpacing));
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTripletFeelPainter.paintTripletFeel8(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}	
+	
+	private TGImage getTripletFeelNone16(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		float ovalHeight = (1.0f * scale);
+		
+		int width = Math.round( ovalWidth + horizontalSpacing );
+		int height = Math.round( ovalHeight + verticalSpacing );
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTripletFeelPainter.paintTripletFeelNone16(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getTripletFeel16(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		float topSpacing = (1.0f * scale);
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		float ovalHeight = (1.0f * scale);
+		
+		int width = Math.round( (ovalWidth * 2f) + horizontalSpacing );
+		int height = Math.round( topSpacing + ovalHeight + verticalSpacing );
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTripletFeelPainter.paintTripletFeel16(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getImage(int width, int height){
+		TGResourceFactory factory = getLayout().getComponent().getResourceFactory();
+		TGImage image = factory.createImage(width, height);
+		TGPainter painter = image.createPainter();
+		painter.setBackground( getBackgroundColor());
+		painter.initPath(TGPainter.PATH_FILL);
+		painter.addRectangle(0,0,width, height);
+		painter.closePath();
+		painter.dispose();
+		return image;
+	}
+	
+	private TGResource addResource(TGResource resource){
+		this.resources.add(resource);
+		return resource;
+	}
+	
+	public void dispose(){
+		Iterator it = this.resources.iterator();
+		while( it.hasNext() ){
+			TGResource resource = (TGResource)it.next();
+			resource.dispose();
+		}
+		this.resources.clear();
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGSpacing.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGSpacing.java
new file mode 100644
index 0000000..307ac9f
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGSpacing.java
@@ -0,0 +1,52 @@
+package org.herac.tuxguitar.graphics.control;
+
+
+public abstract class TGSpacing {
+	
+	public static final int SCORE = 0x01;
+	public static final int TABLATURE = 0x02;
+	
+	private int flags;
+	private int[] spacing;
+	private int[][] positions;
+	
+	public TGSpacing(TGLayout layout, int[][] positions, int len){
+		this.flags = 0;
+		this.flags |= ((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ? SCORE : 0 );
+		this.flags |= ((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0 ? TABLATURE : 0 );
+		this.positions = positions;
+		this.spacing = new int[len];
+	}
+	
+	public void clear(){
+		for(int i = 0; i < this.spacing.length; i ++){
+			this.spacing[i] = 0;
+		}
+	}
+	
+	public void setSize(int index,int size){
+		if( size > this.spacing[ this.positions [this.flags -1] [index] ] ){
+			this.spacing[ this.positions [this.flags -1] [index] ] = size;
+		}
+	}
+	
+	public int getSize(int index){
+		return this.spacing[ this.positions [this.flags -1] [index] ];
+	}
+	
+	public int getSize(){
+		int spacing = 0;
+		for(int i = 0;i < this.spacing.length; i ++){
+			spacing += this.spacing[i];
+		}
+		return spacing;
+	}
+	
+	public int getPosition(int index){
+		int spacing = 0;
+		for(int i = 0;i < this.positions[this.flags -1][index]; i ++){
+			spacing += this.spacing[i];
+		}
+		return spacing;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGTextImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGTextImpl.java
new file mode 100644
index 0000000..55d315b
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGTextImpl.java
@@ -0,0 +1,16 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.song.models.TGText;
+
+public class TGTextImpl extends TGText{
+	
+	public void paint(TGLayout layout,TGPainter painter,int fromX, int fromY){
+		TGBeatImpl beat = (TGBeatImpl)getBeat();
+		TGMeasureImpl measure = beat.getMeasureImpl();
+		int x = fromX + beat.getSpacing() + beat.getPosX();
+		int y = fromY + measure.getTs().getPosition(TGTrackSpacing.POSITION_TEXT);
+		layout.setTextStyle(painter);
+		painter.drawString(getValue(), x, y);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGTrackImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGTrackImpl.java
new file mode 100644
index 0000000..6bdf5e1
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGTrackImpl.java
@@ -0,0 +1,76 @@
+/*
+ * Created on 29-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGTrackImpl extends TGTrack{
+	
+	private int tabHeight;
+	private int scoreHeight;
+	
+	public TGTrackImpl(TGFactory factory) {
+		super(factory);
+	}
+	
+	public void update(TGLayout layout){
+		this.calculateTabHeight(layout);
+		this.calculateScoreHeight(layout);
+	}
+	/**
+	 * Calcula el el ancho de la tablatura
+	 */
+	public void calculateTabHeight(TGLayout layout) {
+		this.tabHeight = ((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0 ?((stringCount() - 1) * layout.getStringSpacing()):0);
+	}
+	
+	/**
+	 * Calcula el el ancho de la partitura
+	 */
+	public void calculateScoreHeight(TGLayout layout) {
+		this.scoreHeight = ((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ?(layout.getScoreLineSpacing() * 4):0);
+	}
+	
+	public int getTabHeight() {
+		return this.tabHeight;
+	}
+	
+	public int getScoreHeight() {
+		return this.scoreHeight;
+	}
+	
+	public void setTabHeight(int tabHeight) {
+		this.tabHeight = tabHeight;
+	}
+	
+	public void clear(){
+		Iterator measures = getMeasures();
+		while(measures.hasNext()){
+			TGMeasureImpl measure = (TGMeasureImpl)measures.next();
+			if(!measure.isDisposed()){
+				measure.dispose();
+			}
+		}
+		super.clear();
+	}
+	
+	public void removeMeasure(int index){
+		TGMeasureImpl measure = (TGMeasureImpl)getMeasure(index);
+		if(!measure.isDisposed()){
+			measure.dispose();
+		}
+		super.removeMeasure(index);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGTrackSpacing.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGTrackSpacing.java
new file mode 100644
index 0000000..4bceb5e
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGTrackSpacing.java
@@ -0,0 +1,89 @@
+package org.herac.tuxguitar.graphics.control;
+
+
+public class TGTrackSpacing extends TGSpacing {
+	
+	/***     POSITIONS ARRAY INDICES     ***/
+	public static final int POSITION_TOP = 0;
+	public static final int POSITION_LOOP_MARKER = 1;
+	public static final int POSITION_MARKER = 2;
+	public static final int POSITION_TEXT = 3;
+	public static final int POSITION_BUFFER_SEPARATOR = 4;
+	public static final int POSITION_REPEAT_ENDING = 5;
+	public static final int POSITION_CHORD = 6;
+	public static final int POSITION_SCORE_UP_LINES = 7;
+	public static final int POSITION_SCORE_MIDDLE_LINES = 8;
+	public static final int POSITION_SCORE_DOWN_LINES = 9;
+	public static final int POSITION_DIVISION_TYPE = 10;
+	public static final int POSITION_EFFECTS = 11;
+	public static final int POSITION_TABLATURE_TOP_SEPARATOR = 12;
+	public static final int POSITION_TABLATURE = 13;
+	public static final int POSITION_LYRIC = 14;
+	public static final int POSITION_BOTTOM = 15;
+	
+	private static final int[][] POSITIONS = new int[][]{
+		/** SCORE **/
+		new int[]{
+				0,  //POSITION_TOP
+				1,  //POSITION_LOOP_MARKER
+				2,  //POSITION_MARKER
+				3,  //POSITION_TEXT
+				4,  //POSITION_BUFFER_SEPARATOR
+				5,  //POSITION_REPEAT_ENDING
+				6,  //POSITION_CHORD
+				8,  //POSITION_SCORE_UP_LINES
+				9,  //POSITION_SCORE_MIDDLE_LINES
+				10, //POSITION_SCORE_DOWN_LINES
+				11, //POSITION_DIVISION_TYPE
+				7,  //POSITION_EFFECTS
+				12, //POSITION_TABLATURE_TOP_SEPARATOR
+				13, //POSITION_TABLATURE
+				14, //POSITION_LYRIC
+				15, //POSITION_BOTTOM
+			},
+			
+		/** TABLATURE **/
+		new int[]{
+				0,  //POSITION_TOP
+				1,  //POSITION_LOOP_MARKER
+				2,  //POSITION_MARKER
+				3,  //POSITION_TEXT
+				4,  //POSITION_BUFFER_SEPARATOR
+				5,  //POSITION_REPEAT_ENDING
+				6,  //POSITION_CHORD
+				13, //POSITION_SCORE_UP_LINES
+				14, //POSITION_SCORE_MIDDLE_LINES
+				15, //POSITION_SCORE_DOWN_LINES
+				10, //POSITION_DIVISION_TYPE
+				7,  //POSITION_EFFECTS
+				8,  //POSITION_TABLATURE_TOP_SEPARATOR
+				9,  //POSITION_TABLATURE
+				11, //POSITION_LYRIC
+				12, //POSITION_BOTTOM
+			},
+			
+		/** SCORE | TABLATURE **/
+		new int[]{
+				0,  //POSITION_TOP
+				1,  //POSITION_LOOP_MARKER
+				2,  //POSITION_MARKER
+				3,  //POSITION_TEXT
+				4,  //POSITION_BUFFER_SEPARATOR
+				5,  //POSITION_REPEAT_ENDING
+				6,  //POSITION_CHORD
+				7,  //POSITION_SCORE_UP_LINES
+				8,  //POSITION_SCORE_MIDDLE_LINES
+				9,  //POSITION_SCORE_DOWN_LINES
+				10, //POSITION_DIVISION_TYPE
+				11, //POSITION_EFFECTS
+				12, //POSITION_TABLATURE_TOP_SEPARATOR
+				13, //POSITION_TABLATURE
+				14, //POSITION_LYRIC
+				15, //POSITION_BOTTOM
+			},
+	};
+	
+	public TGTrackSpacing(TGLayout layout){
+		super( layout , POSITIONS , 16);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGVoiceImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGVoiceImpl.java
new file mode 100644
index 0000000..fc15026
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/TGVoiceImpl.java
@@ -0,0 +1,648 @@
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGNotePainter;
+import org.herac.tuxguitar.graphics.control.painters.TGSilencePainter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class TGVoiceImpl extends TGVoice{
+	/**
+	 * desviacion a la izquierda
+	 */
+	public static final int JOINED_TYPE_NONE_LEFT = 1;
+	/**
+	 * desviacion a la derecha
+	 */
+	public static final int JOINED_TYPE_NONE_RIGHT = 2;
+	/**
+	 * Union a la izquierda
+	 */
+	public static final int JOINED_TYPE_LEFT = 3;
+	/**
+	 * Union a la derecha
+	 */
+	public static final int JOINED_TYPE_RIGHT = 4;
+	
+	private int width;
+	private TGNoteImpl maxNote;
+	private TGNoteImpl minNote;
+	private boolean[] usedStrings;
+	private int joinedType;
+	private boolean joinedGreaterThanQuarter;
+	private TGVoiceImpl join1;
+	private TGVoiceImpl join2;
+	private TGVoiceImpl previous;
+	private TGVoiceImpl next;
+	private TGBeatGroup group;
+	
+	private boolean hiddenSilence;
+	
+	private int maxY;
+	private int minY;
+	private float silenceY;
+	private float silenceHeight;
+	
+	private int maxString;
+	private int minString;
+	
+	public TGVoiceImpl(TGFactory factory,int index){
+		super(factory, index);
+	}
+	
+	public int getPosX() {
+		return this.getBeatImpl().getPosX();
+	}
+	
+	public int getWidth() {
+		return this.width;
+	}
+	
+	public void setWidth(int width) {
+		this.width = width;
+	}
+	
+	public TGNoteImpl getMinNote(){
+		return this.minNote;
+	}
+	
+	public TGNoteImpl getMaxNote(){
+		return this.maxNote;
+	}
+	
+	public TGBeatImpl getBeatImpl() {
+		return (TGBeatImpl)getBeat();
+	}
+	
+	public TGMeasureImpl getMeasureImpl() {
+		return (TGMeasureImpl)getBeat().getMeasure();
+	}
+	
+	public boolean[] getUsedStrings() {
+		if(this.usedStrings == null){
+			this.usedStrings = new boolean[getBeat().getMeasure().getTrack().stringCount()];
+		}
+		return this.usedStrings;
+	}
+	
+	public TGVoiceImpl getJoin1() {
+		return this.join1;
+	}
+	
+	public void setJoin1(TGVoiceImpl join1) {
+		this.join1 = join1;
+	}
+	
+	public TGVoiceImpl getJoin2() {
+		return this.join2;
+	}
+	
+	public void setJoin2(TGVoiceImpl join2) {
+		this.join2 = join2;
+	}
+	
+	public boolean isJoinedGreaterThanQuarter() {
+		return this.joinedGreaterThanQuarter;
+	}
+	
+	public void setJoinedGreaterThanQuarter(boolean joinedGreaterThanQuarter) {
+		this.joinedGreaterThanQuarter = joinedGreaterThanQuarter;
+	}
+	
+	public int getJoinedType() {
+		return this.joinedType;
+	}
+	
+	public void setJoinedType(int joinedType) {
+		this.joinedType = joinedType;
+	}
+	
+	public void setPreviousBeat(TGVoiceImpl previous){
+		this.previous = previous;
+	}
+	
+	public void setNextBeat(TGVoiceImpl next){
+		this.next = next;
+	}
+	
+	public TGBeatGroup getBeatGroup() {
+		return this.group;
+	}
+	
+	public void setBeatGroup(TGBeatGroup group) {
+		this.group = group;
+	}
+	
+	public boolean isPlaying(TGLayout layout){
+		//return (getMeasureImpl().isPlaying(layout) && TuxGuitar.instance().getEditorCache().isPlaying(getBeat().getMeasure(),getBeat()));
+		return layout.getComponent().isRunning(this.getBeat());
+	}
+	
+	public void reset(){
+		this.maxNote = null;
+		this.minNote = null;
+		this.hiddenSilence = false;
+		this.usedStrings = new boolean[getBeat().getMeasure().getTrack().stringCount()];
+		this.maxString = 1;
+		this.minString = getBeat().getMeasure().getTrack().stringCount();
+		this.group = null;
+		this.previous = null;
+		this.next = null;
+	}
+	
+	public void check(TGNoteImpl note){
+		int value = note.getRealValue();
+		if(this.maxNote == null || value > this.maxNote.getRealValue()){
+			this.maxNote = note;
+		}
+		if(this.minNote == null || value < this.minNote.getRealValue()){
+			this.minNote = note;
+		}
+		this.getUsedStrings();
+		this.usedStrings[note.getString() - 1] = true;
+		
+		if( note.getString() > this.maxString ){
+			this.maxString = note.getString();
+		}
+		if( note.getString() < this.minString ){
+			this.minString = note.getString();
+		}
+	}
+	
+	public void update(TGLayout layout) {
+		this.minY = 0;
+		this.maxY = 0;
+		if(isRestVoice()){
+			this.updateSilenceSpacing(layout);
+		}
+		else{
+			this.updateNoteVoice(layout);
+		}
+	}
+	
+	public void updateNoteVoice(TGLayout layout) {
+		this.joinedType = JOINED_TYPE_NONE_RIGHT;
+		this.joinedGreaterThanQuarter = false;
+		this.setJoin1(this);
+		this.setJoin2(this);
+		
+		boolean noteJoined = false;
+		boolean withPrev = false;
+		
+		//trato de unir con el componente anterior
+		if (this.previous != null && !this.previous.isRestVoice()) {
+			if (getMeasureImpl().canJoin(layout.getSongManager(),this, this.previous)) {
+				withPrev = true;
+				if (this.previous.getDuration().getValue() >= getDuration().getValue()) {
+					this.setJoin1(this.previous);
+					this.setJoin2(this);
+					this.joinedType = JOINED_TYPE_LEFT;
+					noteJoined = true;
+				}
+				if (this.previous.getDuration().getValue() > TGDuration.QUARTER){
+					this.joinedGreaterThanQuarter = true;
+				}
+			}
+		}
+		
+		//trato de unir con el componente que le sigue
+		if (this.next != null && !this.next.isRestVoice() ) {
+			if (getMeasureImpl().canJoin(layout.getSongManager(),this, this.next)) {
+				if (this.next.getDuration().getValue() >= getDuration().getValue()) {
+					this.setJoin2(this.next);
+					if (this.previous == null || this.previous.isRestVoice() || this.previous.getDuration().getValue() < getDuration().getValue()) {
+						this.setJoin1(this);
+					}
+					noteJoined = true;
+					this.joinedType = JOINED_TYPE_RIGHT;
+				}
+				if (this.next.getDuration().getValue() > TGDuration.QUARTER){
+					this.joinedGreaterThanQuarter = true;
+				}
+			}
+		}
+		
+		//si no hubo union decido para que lado girar la figura
+		if (!noteJoined && withPrev) {
+			this.joinedType = JOINED_TYPE_NONE_LEFT;
+		}
+		
+		if( (layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0 && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0){
+			this.minY = 0;
+			this.maxY = getBeatImpl().getMeasureImpl().getTrackImpl().getTabHeight();
+			if( getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ){
+				this.maxY += (((layout.getStringSpacing() / 2) * 5) + 1);
+			}else{
+				this.minY -= (((layout.getStringSpacing() / 2) * 5) + 1);
+			}
+		}
+	}
+	
+	public void updateSilenceSpacing(TGLayout layout) {
+		this.silenceY = 0;
+		this.silenceHeight = 0;
+		
+		if(!isHiddenSilence()){
+			int style = layout.getStyle();
+			int lineSpacing = 0;
+			int lineCount = 0;
+			float scale = 0;
+			if((style & TGLayout.DISPLAY_SCORE) != 0 ){
+				lineSpacing = layout.getScoreLineSpacing();
+				lineCount = 5;
+				scale = (lineSpacing / 9.0f);
+			}else{
+				lineSpacing = layout.getStringSpacing();
+				lineCount = getBeat().getMeasure().getTrack().stringCount();
+				scale = (lineSpacing / 10.0f);
+			}
+			
+			int duration = getDuration().getValue();
+			if(duration == TGDuration.WHOLE){
+				this.silenceHeight = (scale * 3.6513581f);
+				this.silenceY = ( lineCount <= 5 ? lineSpacing : lineSpacing * 2 );
+			}
+			else if(duration == TGDuration.HALF){
+				this.silenceHeight = (scale * 3.6513581f);
+				this.silenceY = ( lineCount <= 5 ? lineSpacing * 2 : lineSpacing * 3 ) - this.silenceHeight;
+			}
+			else if(duration == TGDuration.QUARTER){
+				this.silenceHeight = (scale * 16);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			else if(duration == TGDuration.EIGHTH){
+				this.silenceHeight = (scale * 12);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			else if(duration == TGDuration.SIXTEENTH){
+				this.silenceHeight = (scale * 16);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			else if(duration == TGDuration.THIRTY_SECOND){
+				this.silenceHeight = (scale * 24);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			else if(duration == TGDuration.SIXTY_FOURTH){
+				this.silenceHeight = (scale * 28);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			
+			for( int v = 0; v < getBeat().countVoices(); v ++){
+				if( v != getIndex() ){
+					TGVoiceImpl voice = getBeatImpl().getVoiceImpl( v );
+					if( !voice.isEmpty() ){
+						if( voice.isRestVoice()){
+							if( !voice.isHiddenSilence() ){
+								float maxSilenceHeight = (lineSpacing * 3);
+								float firstPosition = (this.silenceY - (maxSilenceHeight / getBeat().countVoices()));
+								this.silenceY = (firstPosition + ( maxSilenceHeight * getIndex() ));
+							}
+						}
+						else if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+							int direction = voice.getBeatGroup().getDirection();
+							int y1 = voice.getBeatGroup().getY1(layout,voice.getMinNote(),getMeasureImpl().getKeySignature(),getMeasureImpl().getClef());
+							int y2 = voice.getBeatGroup().getY1(layout,voice.getMaxNote(),getMeasureImpl().getKeySignature(),getMeasureImpl().getClef());
+							
+							if(direction == TGBeatGroup.DIRECTION_UP){
+								float position = (y1 + (lineSpacing * 2));
+								if( position > this.silenceY ){
+									this.silenceY = position;
+								}
+							}else if(direction == TGBeatGroup.DIRECTION_DOWN){
+								float position = (y2 - (this.silenceHeight + lineSpacing));
+								if( position < this.silenceY ){
+									this.silenceY = position;
+								}
+							}
+						}else if((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0 ){
+							int direction = voice.getBeatGroup().getDirection();
+							if(direction == TGBeatGroup.DIRECTION_UP){
+								float position = (lineSpacing * voice.getMaxString() );
+								if( position > this.silenceY ){
+									this.silenceY = position;
+								}
+							}
+							else if(direction == TGBeatGroup.DIRECTION_DOWN){
+								float position = ((lineSpacing * (voice.getMinString() - 1) ) - (this.silenceHeight + lineSpacing));
+								if( position < this.silenceY ){
+									this.silenceY = position;
+								}
+							}
+						}
+					}
+				}
+			}
+			this.minY = (int)this.silenceY;
+			this.maxY = (int)(this.silenceY + this.silenceHeight);
+		}
+	}
+	
+	public void paint(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		if(!isEmpty()){
+			if(isRestVoice() && !isHiddenSilence()){
+				paintSilence(layout, painter, fromX, fromY);
+			}
+			else{
+				Iterator notes = getNotes().iterator();
+				while (notes.hasNext()) {
+					TGNoteImpl note = (TGNoteImpl)notes.next();
+					note.paint(layout,painter,fromX ,fromY);
+				}
+				if(!layout.isPlayModeEnabled()){
+					paintBeat(layout, painter, fromX, fromY) ;
+				}
+			}
+		}
+	}
+	
+	//----silence
+	public void paintSilence(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		int style = layout.getStyle();
+		int x = 0;
+		int lineSpacing = 0;
+		float y = 0;
+		float scale = 0;
+		
+		if((style & TGLayout.DISPLAY_SCORE) != 0 ){
+			x = fromX + getPosX() + getBeatImpl().getSpacing();
+			y = fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) + this.silenceY;
+			lineSpacing = layout.getScoreLineSpacing();
+			scale = (lineSpacing / 9.0f);
+		}else{
+			x = fromX + getPosX() + getBeatImpl().getSpacing() - 1;
+			y = fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE) + this.silenceY;
+			lineSpacing = layout.getStringSpacing();
+			scale = (lineSpacing / 10.0f);
+		}
+		
+		setStyle(layout, painter,(layout.isPlayModeEnabled() && isPlaying(layout)));
+		painter.initPath(TGPainter.PATH_FILL);
+		
+		int duration = getDuration().getValue();
+		if(duration == TGDuration.WHOLE){
+			TGSilencePainter.paintWhole(painter, x, y , scale);
+		}
+		else if(duration == TGDuration.HALF){
+			TGSilencePainter.paintHalf(painter, x, y , scale);
+		}
+		else if(duration == TGDuration.QUARTER){
+			TGSilencePainter.paintQuarter(painter, x, y, scale);
+		}
+		else if(duration == TGDuration.EIGHTH){
+			TGSilencePainter.paintEighth(painter, x, y, scale);
+		}
+		else if(duration == TGDuration.SIXTEENTH){
+			TGSilencePainter.paintSixteenth(painter, x, y, scale);
+		}
+		else if(duration == TGDuration.THIRTY_SECOND){
+			TGSilencePainter.paintThirtySecond(painter, x, y, scale);
+		}
+		else if(duration == TGDuration.SIXTY_FOURTH){
+			TGSilencePainter.paintSixtyFourth(painter, x, y, scale);
+		}
+		
+		painter.closePath();
+		
+		if(getDuration().isDotted() || getDuration().isDoubleDotted()){
+			layout.setDotStyle(painter);
+			painter.initPath();
+			painter.moveTo(x + 10,y +1);
+			painter.addOval(x + 10,y +1,1,1);
+			if(getDuration().isDoubleDotted()){
+				painter.moveTo(x + 13,y +1);
+				painter.addOval(x + 13,y +1,1,1);
+			}
+			painter.closePath();
+		}
+		if(!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)){
+			layout.setDivisionTypeStyle(painter);
+			if((style & TGLayout.DISPLAY_SCORE) != 0 ){
+				painter.drawString(Integer.toString(getDuration().getDivision().getEnters()), x,(fromY + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
+			}else{
+				painter.drawString(Integer.toString(getDuration().getDivision().getEnters()),x,(fromY + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
+			}
+		}
+	}
+	
+	public void setStyle(TGLayout layout, TGPainter painter, boolean playMode){
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+			layout.setScoreSilenceStyle(painter, playMode);
+		}else{
+			layout.setTabSilenceStyle(painter, playMode);
+		}
+	}
+	
+	public void paintBeat(TGLayout layout,TGPainter painter, int fromX, int fromY){
+		if(!isRestVoice() ){
+			int style = layout.getStyle();
+			int spacing = getBeatImpl().getSpacing();
+			
+			if((style & TGLayout.DISPLAY_SCORE) != 0){
+				paintScoreBeat(layout, painter, fromX, fromY+getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES), spacing);
+			}
+			if((style & TGLayout.DISPLAY_TABLATURE) != 0 && (style & TGLayout.DISPLAY_SCORE) == 0){
+				paintTablatureBeat(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE), spacing);
+			}
+		}
+	}
+	
+	public void paintTablatureBeat(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing){
+		if(!isRestVoice() ){
+			float scale = layout.getScale();
+			float xMove = (2 * scale);
+			float x = ( fromX + getPosX() + spacing + xMove );
+			float y1 = 0;
+			float y2 = 0;
+			float verticalLineWidth = scale;
+			float horizontalLineWidth = (2 * scale);
+			int stringSpacing = layout.getStringSpacing();
+			if( getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ){
+				y1 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + (stringSpacing / 2));
+				y2 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + ((stringSpacing / 2) * 5));
+			}else{
+				y1 = (fromY - (stringSpacing / 2) - horizontalLineWidth);
+				y2 = (fromY - ((stringSpacing / 2) * 5));
+			}
+			if (getDuration().getValue() >= TGDuration.QUARTER) {
+				layout.setTabNoteFooterStyle(painter);
+				painter.initPath();
+				painter.setAntialias(false);
+				painter.setLineWidth( (int)verticalLineWidth );
+				painter.moveTo(x, y1);
+				painter.lineTo(x, y2);
+				painter.closePath();
+				if (getDuration().getValue() >= TGDuration.EIGHTH) {
+					float x1 = 0;
+					float x2 = 0;
+					int joinedType = getJoinedType();
+					if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT){
+						x1 = getPosX() + xMove + spacing;
+						x2 = getPosX() + xMove + spacing + (6 * scale);
+					}else if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT){
+						x1 = getPosX() + xMove + spacing - (5 * scale);
+						x2 = getPosX() + xMove + spacing;
+					}else{
+						x1 = getJoin1().getPosX() + xMove + getJoin1().getBeatImpl().getSpacing();
+						x2 = getJoin2().getPosX() + xMove + getJoin2().getBeatImpl().getSpacing();
+					}
+					int index = ( getDuration().getIndex() - 2);
+					if(index > 0){
+						int height = (layout.getStringSpacing() / 2);
+						int direction = (getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ? 1 : -1);
+						painter.setLineWidth( (int)horizontalLineWidth );
+						painter.initPath();
+						for(int i = index; i > 0 ;i --){
+							painter.moveTo(fromX + x1, y2 + ((height - (i * height)) * direction));
+							painter.lineTo(fromX + x2, y2 + ((height - (i * height)) * direction));
+						}
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}
+			} else if (getDuration().getValue() == TGDuration.HALF) {
+				layout.setTabNoteFooterStyle(painter);
+				painter.initPath();
+				painter.setAntialias(false);
+				painter.setLineWidth( (int)verticalLineWidth );
+				painter.moveTo(x, (y1 + ((y2 - y1) / 2)));
+				painter.lineTo(x, y2);
+				painter.closePath();
+			}
+			
+			//-------------puntillo--------------------------------------
+			if (getDuration().isDotted() || getDuration().isDoubleDotted()) {
+				int joinedType = getJoinedType();
+				float posX = ((getDuration().getValue() > TGDuration.WHOLE)?((joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT || joinedType == TGVoiceImpl.JOINED_TYPE_RIGHT)?(x+ (4.0f * scale)):(x- (5.0f * scale))):x);
+				float posY = (y2 - ((getDuration().getValue() >= TGDuration.EIGHTH)? ((stringSpacing / 2) * (getDuration().getIndex() - 2)):(1.0f * scale)));
+				paintDot(layout, painter, posX, posY,scale);
+			}
+			
+			//-------------tresillo--------------------------------------
+			if (!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)) {
+				layout.setDivisionTypeStyle(painter);
+				painter.drawString(Integer.toString(getDuration().getDivision().getEnters()), (int)(x - 3),((fromY - getPaintPosition(TGTrackSpacing.POSITION_TABLATURE)) + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
+			}
+		}
+	}
+	
+	public void paintScoreBeat(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing){
+		int vX = ( fromX + getPosX() + spacing );
+		
+		//division type
+		if (!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)) {
+			layout.setDivisionTypeStyle(painter);
+			painter.drawString(Integer.toString(getDuration().getDivision().getEnters()),vX ,((fromY - getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)) + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
+		}
+		//dibujo el pie
+		if(getDuration().getValue() >= TGDuration.HALF){
+			layout.setScoreNoteFooterStyle(painter);
+			
+			float scale = layout.getScale();
+			float lineSpacing = layout.getScoreLineSpacing();
+			int direction = this.group.getDirection();
+			int key = getBeat().getMeasure().getKeySignature();
+			int clef = getBeat().getMeasure().getClef();
+			
+			int xMove = (direction == TGBeatGroup.DIRECTION_UP ? layout.getResources().getScoreNoteWidth() : 0);
+			int yMove = (direction == TGBeatGroup.DIRECTION_UP ? ((layout.getScoreLineSpacing() / 3) + 1) : ((layout.getScoreLineSpacing() / 3) * 2));
+			
+			int vY1 = fromY + ( direction == TGBeatGroup.DIRECTION_DOWN ? this.maxNote.getScorePosY() : this.minNote.getScorePosY() );
+			int vY2 = fromY + this.group.getY2(layout,getPosX() + spacing,key,clef);
+			
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo(vX + xMove, vY1 + yMove);
+			painter.lineTo(vX + xMove, vY2);
+			painter.closePath();
+			
+			if (getDuration().getValue() >= TGDuration.EIGHTH) {
+				int index =  ( getDuration().getIndex() - 3);
+				if(index >= 0){
+					int dir = (direction == TGBeatGroup.DIRECTION_DOWN)?1:-1;
+					int joinedType = getJoinedType();
+					boolean joinedGreaterThanQuarter = isJoinedGreaterThanQuarter();
+					
+					if((joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT || joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT) && !joinedGreaterThanQuarter){
+						float hX = (fromX + xMove + getPosX() + spacing);
+						float hY = ( (fromY + this.group.getY2(layout,getPosX() + spacing,key,clef)) - ( (lineSpacing * 2)* dir )) ;
+						for(int i = 0; i <= index; i ++){
+							painter.initPath(TGPainter.PATH_FILL);
+							TGNotePainter.paintFooter(painter,hX,(hY - ( (i * (lineSpacing / 2.0f)) * dir)),dir,lineSpacing);
+							painter.closePath();
+						}
+					}else{
+						int hX1 = 0;
+						int hX2 = 0;
+						if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT){
+							hX1 = getPosX() + spacing;
+							hX2 = getPosX() + spacing + 6;
+						}else if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT){
+							hX1 = getPosX() + spacing - 5;
+							hX2 = getPosX() + spacing;
+						}else{
+							hX1 = getJoin1().getPosX() + getJoin1().getBeatImpl().getSpacing();
+							hX2 = getJoin2().getPosX() + getJoin2().getBeatImpl().getSpacing();
+						}
+						int hY1 = fromY + this.group.getY2(layout,hX1,key,clef);
+						int hY2 = fromY + this.group.getY2(layout,hX2,key,clef);
+						painter.setLineWidth(Math.max(1,Math.round(3f * scale)));
+						painter.initPath();
+						for(int i = 0; i <= index; i ++){
+							painter.moveTo(fromX + xMove + hX1, hY1 - ( (i * (5f * scale)) * dir));
+							painter.lineTo(fromX + xMove + hX2, hY2 - ( (i * (5f * scale)) * dir));
+						}
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}
+			}
+		}
+	}
+	
+	public void paintDot(TGLayout layout,TGPainter painter,float fromX, float fromY,float scale){
+		float dotSize = (3.0f * scale);
+		float posX = fromX;
+		float posY = fromY;
+		layout.setDotStyle(painter);
+		painter.initPath(TGPainter.PATH_FILL);
+		painter.moveTo(posX - (dotSize / 2), posY - (dotSize / 2));
+		painter.addOval(posX - (dotSize / 2), posY - (dotSize / 2), dotSize,dotSize);
+		if(getDuration().isDoubleDotted()){
+			painter.moveTo(posX + (dotSize + 2) - (dotSize / 2), posY - (dotSize / 2));
+			painter.addOval(posX + (dotSize + 2) - (dotSize / 2), posY - (dotSize / 2), dotSize,dotSize);
+		}
+		painter.closePath();
+	}
+	
+	public int getPaintPosition(int index){
+		return getMeasureImpl().getTs().getPosition(index);
+	}
+	
+	public int getMaxString() {
+		return this.maxString;
+	}
+	
+	public int getMinString() {
+		return this.minString;
+	}
+	
+	public int getMaxY() {
+		return this.maxY;
+	}
+	
+	public int getMinY() {
+		return this.minY;
+	}
+	
+	public boolean isHiddenSilence() {
+		return this.hiddenSilence;
+	}
+	
+	public void setHiddenSilence(boolean hiddenSilence) {
+		this.hiddenSilence = hiddenSilence;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGClefPainter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGClefPainter.java
new file mode 100644
index 0000000..63a38fd
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGClefPainter.java
@@ -0,0 +1,345 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGClefPainter {
+	
+	public static void paintTreble(TGPainter painter, int x, int y,float scale){
+		painter.moveTo((x + (0.9706216f * scale)),(y + (-0.9855771f * scale)));
+		painter.cubicTo((x + (0.99023926f * scale)),(y + (-0.99538594f * scale)),(x + (0.99350905f * scale)),(y + (-0.99538594f * scale)),(x + (1.0131269f * scale)),(y + (-0.99538594f * scale)));
+		painter.cubicTo((x + (1.0392835f * scale)),(y + (-0.99211615f * scale)),(x + (1.055632f * scale)),(y + (-0.9823073f * scale)),(x + (1.0915977f * scale)),(y + (-0.9430719f * scale)));
+		painter.cubicTo((x + (1.3270102f * scale)),(y + (-0.7011198f * scale)),(x + (1.5231876f * scale)),(y + (-0.26953024f * scale)),(x + (1.572232f * scale)),(y + (0.09666765f * scale)));
+		painter.cubicTo((x + (1.578771f * scale)),(y + (0.1555208f * scale)),(x + (1.578771f * scale)),(y + (0.29284477f * scale)),(x + (1.572232f * scale)),(y + (0.35496712f * scale)));
+		painter.cubicTo((x + (1.5362663f * scale)),(y + (0.6917379f * scale)),(x + (1.3956721f * scale)),(y + (0.9990827f * scale)),(x + (1.0719799f * scale)),(y + (1.4404812f * scale)));
+		painter.lineTo((x + (1.0262054f * scale)),(y + (1.502604f * scale)));
+		painter.lineTo((x + (1.0523622f * scale)),(y + (1.577805f * scale)));
+		painter.cubicTo((x + (1.1144851f * scale)),(y + (1.7576342f * scale)),(x + (1.1864164f * scale)),(y + (1.9766989f * scale)),(x + (1.2321913f * scale)),(y + (2.1369102f * scale)));
+		painter.cubicTo((x + (1.24527f * scale)),(y + (2.1761456f * scale)),(x + (1.2550789f * scale)),(y + (2.208842f * scale)),(x + (1.2550789f * scale)),(y + (2.212112f * scale)));
+		painter.cubicTo((x + (1.2550789f * scale)),(y + (2.212112f * scale)),(x + (1.2779659f * scale)),(y + (2.212112f * scale)),(x + (1.3008534f * scale)),(y + (2.2153816f * scale)));
+		painter.cubicTo((x + (1.4152898f * scale)),(y + (2.22519f * scale)),(x + (1.5133789f * scale)),(y + (2.2513473f * scale)),(x + (1.6147372f * scale)),(y + (2.3003914f * scale)));
+		painter.cubicTo((x + (1.6964773f * scale)),(y + (2.3428962f * scale)),(x + (1.7684091f * scale)),(y + (2.3919404f * scale)),(x + (1.8370711f * scale)),(y + (2.457333f * scale)));
+		painter.cubicTo((x + (1.9122725f * scale)),(y + (2.5325344f * scale)),(x + (1.9613168f * scale)),(y + (2.601196f * scale)),(x + (2.0070913f * scale)),(y + (2.6960156f * scale)));
+		painter.cubicTo((x + (2.0757532f * scale)),(y + (2.8333395f * scale)),(x + (2.10518f * scale)),(y + (2.9772024f * scale)),(x + (2.10191f * scale)),(y + (3.121066f * scale)));
+		painter.cubicTo((x + (2.0986407f * scale)),(y + (3.2126155f * scale)),(x + (2.085562f * scale)),(y + (3.2812777f * scale)),(x + (2.0561357f * scale)),(y + (3.3662882f * scale)));
+		painter.cubicTo((x + (2.0169f * scale)),(y + (3.4905329f * scale)),(x + (1.9449685f * scale)),(y + (3.60497f * scale)),(x + (1.8468798f * scale)),(y + (3.7030587f * scale)));
+		painter.cubicTo((x + (1.7618695f * scale)),(y + (3.7880688f * scale)),(x + (1.6833986f * scale)),(y + (3.8403826f * scale)),(x + (1.578771f * scale)),(y + (3.8828878f * scale)));
+		painter.lineTo((x + (1.5395356f * scale)),(y + (3.8992357f * scale)));
+		painter.lineTo((x + (1.5395356f * scale)),(y + (4.016942f * scale)));
+		painter.cubicTo((x + (1.5395356f * scale)),(y + (4.183693f * scale)),(x + (1.5297267f * scale)),(y + (4.37987f * scale)),(x + (1.516648f * scale)),(y + (4.497576f * scale)));
+		painter.cubicTo((x + (1.50357f * scale)),(y + (4.6185517f * scale)),(x + (1.4708736f * scale)),(y + (4.732989f * scale)),(x + (1.4185596f * scale)),(y + (4.837617f * scale)));
+		painter.cubicTo((x + (1.2812357f * scale)),(y + (5.1155343f * scale)),(x + (1.0392835f * scale)),(y + (5.262667f * scale)),(x + (0.7679054f * scale)),(y + (5.2365108f * scale)));
+		painter.cubicTo((x + (0.46056065f * scale)),(y + (5.2070837f * scale)),(x + (0.21207006f * scale)),(y + (4.997828f * scale)),(x + (0.14994715f * scale)),(y + (4.716641f * scale)));
+		painter.cubicTo((x + (0.12052006f * scale)),(y + (4.589125f * scale)),(x + (0.13359922f * scale)),(y + (4.491037f * scale)),(x + (0.18591277f * scale)),(y + (4.409296f * scale)));
+		painter.cubicTo((x + (0.25457475f * scale)),(y + (4.3013988f * scale)),(x + (0.38535964f * scale)),(y + (4.2392764f * scale)),(x + (0.5128747f * scale)),(y + (4.2425456f * scale)));
+		painter.cubicTo((x + (0.6632773f * scale)),(y + (4.2490854f * scale)),(x + (0.78425336f * scale)),(y + (4.3667912f * scale)),(x + (0.80714035f * scale)),(y + (4.5302725f * scale)));
+		painter.cubicTo((x + (0.8234888f * scale)),(y + (4.661057f * scale)),(x + (0.7679054f * scale)),(y + (4.782033f * scale)),(x + (0.6632773f * scale)),(y + (4.8474255f * scale)));
+		painter.cubicTo((x + (0.6044242f * scale)),(y + (4.8833914f * scale)),(x + (0.52268356f * scale)),(y + (4.8997393f * scale)),(x + (0.46056065f * scale)),(y + (4.8899307f * scale)));
+		painter.cubicTo((x + (0.45075235f * scale)),(y + (4.8899307f * scale)),(x + (0.44094297f * scale)),(y + (4.8866606f * scale)),(x + (0.44094297f * scale)),(y + (4.8899307f * scale)));
+		painter.lineTo((x + (0.48017892f * scale)),(y + (4.929166f * scale)));
+		painter.cubicTo((x + (0.55211014f * scale)),(y + (5.0010977f * scale)),(x + (0.63385075f * scale)),(y + (5.0468726f * scale)),(x + (0.7384789f * scale)),(y + (5.06976f * scale)));
+		painter.cubicTo((x + (0.76136583f * scale)),(y + (5.0730295f * scale)),(x + (0.78098357f * scale)),(y + (5.0730295f * scale)),(x + (0.8332976f * scale)),(y + (5.0730295f * scale)));
+		painter.cubicTo((x + (0.89215076f * scale)),(y + (5.0730295f * scale)),(x + (0.8986898f * scale)),(y + (5.0730295f * scale)),(x + (0.9313861f * scale)),(y + (5.0664897f * scale)));
+		painter.cubicTo((x + (0.97716117f * scale)),(y + (5.0534115f * scale)),(x + (1.0163965f * scale)),(y + (5.0370636f * scale)),(x + (1.0523622f * scale)),(y + (5.0174456f * scale)));
+		painter.cubicTo((x + (1.2158434f * scale)),(y + (4.919357f * scale)),(x + (1.3270102f * scale)),(y + (4.716641f * scale)),(x + (1.3564366f * scale)),(y + (4.47142f * scale)));
+		painter.cubicTo((x + (1.3662455f * scale)),(y + (4.37987f * scale)),(x + (1.3760543f * scale)),(y + (4.183693f * scale)),(x + (1.3760543f * scale)),(y + (4.0398297f * scale)));
+		painter.cubicTo((x + (1.3760543f * scale)),(y + (3.9450107f * scale)),(x + (1.3760543f * scale)),(y + (3.9384713f * scale)),(x + (1.3695153f * scale)),(y + (3.9384713f * scale)));
+		painter.cubicTo((x + (1.3564366f * scale)),(y + (3.9450107f * scale)),(x + (1.2877747f * scale)),(y + (3.95155f * scale)),(x + (1.2387304f * scale)),(y + (3.9548192f * scale)));
+		painter.cubicTo((x + (1.1766075f * scale)),(y + (3.9580889f * scale)),(x + (1.0719799f * scale)),(y + (3.9580889f * scale)),(x + (1.0229356f * scale)),(y + (3.95155f * scale)));
+		painter.cubicTo((x + (0.8300278f * scale)),(y + (3.9286623f * scale)),(x + (0.65346843f * scale)),(y + (3.8632698f * scale)),(x + (0.4997966f * scale)),(y + (3.755372f * scale)));
+		painter.cubicTo((x + (0.2709232f * scale)),(y + (3.595161f * scale)),(x + (0.10744194f * scale)),(y + (3.3564782f * scale)),(x + (0.038779963f * scale)),(y + (3.0818305f * scale)));
+		painter.cubicTo((x + (-0.04949972f * scale)),(y + (2.7385209f * scale)),(x + (0.012623194f * scale)),(y + (2.3723233f * scale)),(x + (0.22841798f * scale)),(y + (1.9865077f * scale)));
+		painter.cubicTo((x + (0.31996745f * scale)),(y + (1.8262968f * scale)),(x + (0.40824714f * scale)),(y + (1.6955118f * scale)),(x + (0.6273117f * scale)),(y + (1.4045155f * scale)));
+		painter.lineTo((x + (0.751557f * scale)),(y + (1.2377651f * scale)));
+		painter.lineTo((x + (0.72866946f * scale)),(y + (1.1756423f * scale)));
+		painter.cubicTo((x + (0.5717278f * scale)),(y + (0.7604004f * scale)),(x + (0.51941377f * scale)),(y + (0.52171814f * scale)),(x + (0.5030659f * scale)),(y + (0.17513847f * scale)));
+		painter.cubicTo((x + (0.49652684f * scale)),(y + (0.024735928f * scale)),(x + (0.5030659f * scale)),(y + (-0.102779746f * scale)),(x + (0.52268356f * scale)),(y + (-0.2074073f * scale)));
+		painter.cubicTo((x + (0.5717278f * scale)),(y + (-0.48205525f * scale)),(x + (0.69924295f * scale)),(y + (-0.72727656f * scale)),(x + (0.8986898f * scale)),(y + (-0.92345417f * scale)));
+		painter.cubicTo((x + (0.9379252f * scale)),(y + (-0.9626896f * scale)),(x + (0.9542737f * scale)),(y + (-0.9757682f * scale)),(x + (0.9706216f * scale)),(y + (-0.9855771f * scale)));
+		painter.moveTo((x + (1.2289215f * scale)),(y + (-0.4264719f * scale)));
+		painter.cubicTo((x + (1.1962258f * scale)),(y + (-0.48205525f * scale)),(x + (1.2027647f * scale)),(y + (-0.478786f * scale)),(x + (1.1733383f * scale)),(y + (-0.45916772f * scale)));
+		painter.cubicTo((x + (1.0817888f * scale)),(y + (-0.40358436f * scale)),(x + (0.98697f * scale)),(y + (-0.3185745f * scale)),(x + (0.9183075f * scale)),(y + (-0.23356462f * scale)));
+		painter.cubicTo((x + (0.77771425f * scale)),(y + (-0.05373496f * scale)),(x + (0.69924295f * scale)),(y + (0.1555208f * scale)),(x + (0.68943465f * scale)),(y + (0.38112438f * scale)));
+		painter.cubicTo((x + (0.6861648f * scale)),(y + (0.4726739f * scale)),(x + (0.69597363f * scale)),(y + (0.5315269f * scale)),(x + (0.7384789f * scale)),(y + (0.6721202f * scale)));
+		painter.cubicTo((x + (0.77117467f * scale)),(y + (0.7865572f * scale)),(x + (0.8627241f * scale)),(y + (1.0644748f * scale)),(x + (0.86926377f * scale)),(y + (1.0710139f * scale)));
+		painter.cubicTo((x + (0.86926377f * scale)),(y + (1.0742836f * scale)),(x + (0.88888097f * scale)),(y + (1.0513968f * scale)),(x + (0.90849864f * scale)),(y + (1.0219696f * scale)));
+		painter.cubicTo((x + (1.1341028f * scale)),(y + (0.6982775f * scale)),(x + (1.2550789f * scale)),(y + (0.43343806f * scale)),(x + (1.3008534f * scale)),(y + (0.16859889f * scale)));
+		painter.cubicTo((x + (1.3106622f * scale)),(y + (0.09993696f * scale)),(x + (1.3172013f * scale)),(y + (0.044353604f * scale)),(x + (1.320471f * scale)),(y + (-0.03411722f * scale)));
+		painter.cubicTo((x + (1.3237408f * scale)),(y + (-0.2139464f * scale)),(x + (1.3041232f * scale)),(y + (-0.30222607f * scale)),(x + (1.2289215f * scale)),(y + (-0.4264719f * scale)));
+		painter.moveTo((x + (0.9477346f * scale)),(y + (1.7739828f * scale)));
+		painter.cubicTo((x + (0.9281169f * scale)),(y + (1.71186f * scale)),(x + (0.90849864f * scale)),(y + (1.6628156f * scale)),(x + (0.90849864f * scale)),(y + (1.6628156f * scale)));
+		painter.cubicTo((x + (0.9052294f * scale)),(y + (1.6628156f * scale)),(x + (0.7679054f * scale)),(y + (1.8459139f * scale)),(x + (0.7090518f * scale)),(y + (1.9276547f * scale)));
+		painter.cubicTo((x + (0.5161445f * scale)),(y + (2.1990333f * scale)),(x + (0.39843827f * scale)),(y + (2.4180977f * scale)),(x + (0.32977578f * scale)),(y + (2.6338923f * scale)));
+		painter.cubicTo((x + (0.2840013f * scale)),(y + (2.7679467f * scale)),(x + (0.26438358f * scale)),(y + (2.8921926f * scale)),(x + (0.25784454f * scale)),(y + (3.0295167f * scale)));
+		painter.cubicTo((x + (0.25784454f * scale)),(y + (3.1047182f * scale)),(x + (0.26111433f * scale)),(y + (3.1504927f * scale)),(x + (0.27419245f * scale)),(y + (3.2060761f * scale)));
+		painter.cubicTo((x + (0.34939402f * scale)),(y + (3.4970722f * scale)),(x + (0.6600081f * scale)),(y + (3.7357545f * scale)),(x + (1.0262054f * scale)),(y + (3.7880688f * scale)));
+		painter.cubicTo((x + (1.0817888f * scale)),(y + (3.7946076f * scale)),(x + (1.2387304f * scale)),(y + (3.7946076f * scale)),(x + (1.3073924f * scale)),(y + (3.7880688f * scale)));
+		painter.cubicTo((x + (1.3760543f * scale)),(y + (3.7782598f * scale)),(x + (1.3695153f * scale)),(y + (3.7815294f * scale)),(x + (1.3662455f * scale)),(y + (3.7521029f * scale)));
+		painter.cubicTo((x + (1.3466283f * scale)),(y + (3.4414887f * scale)),(x + (1.320471f * scale)),(y + (3.2518506f * scale)),(x + (1.2681575f * scale)),(y + (2.9706633f * scale)));
+		painter.cubicTo((x + (1.2485392f * scale)),(y + (2.8529572f * scale)),(x + (1.192956f * scale)),(y + (2.604466f * scale)),(x + (1.1896861f * scale)),(y + (2.601196f * scale)));
+		painter.cubicTo((x + (1.1864164f * scale)),(y + (2.5979269f * scale)),(x + (1.1242939f * scale)),(y + (2.604466f * scale)),(x + (1.0883284f * scale)),(y + (2.614275f * scale)));
+		painter.cubicTo((x + (1.0425533f * scale)),(y + (2.6240838f * scale)),(x + (1.0131269f * scale)),(y + (2.6338923f * scale)),(x + (0.9738914f * scale)),(y + (2.6535103f * scale)));
+		painter.cubicTo((x + (0.76136583f * scale)),(y + (2.7614079f * scale)),(x + (0.69924295f * scale)),(y + (3.0066295f * scale)),(x + (0.8332976f * scale)),(y + (3.2060761f * scale)));
+		painter.cubicTo((x + (0.85618514f * scale)),(y + (3.2387724f * scale)),(x + (0.9150382f * scale)),(y + (3.2976255f * scale)),(x + (0.9510039f * scale)),(y + (3.3205128f * scale)));
+		painter.cubicTo((x + (0.96408254f * scale)),(y + (3.3303218f * scale)),(x + (0.99350905f * scale)),(y + (3.3499393f * scale)),(x + (1.0131269f * scale)),(y + (3.3597484f * scale)));
+		painter.cubicTo((x + (1.0425533f * scale)),(y + (3.3760962f * scale)),(x + (1.0490924f * scale)),(y + (3.3826356f * scale)),(x + (1.055632f * scale)),(y + (3.3957143f * scale)));
+		painter.cubicTo((x + (1.0817888f * scale)),(y + (3.4382195f * scale)),(x + (1.0654408f * scale)),(y + (3.4905329f * scale)),(x + (1.0163965f * scale)),(y + (3.5134206f * scale)));
+		painter.cubicTo((x + (0.99023926f * scale)),(y + (3.5264988f * scale)),(x + (0.9706216f * scale)),(y + (3.5232296f * scale)),(x + (0.9183075f * scale)),(y + (3.4970722f * scale)));
+		painter.cubicTo((x + (0.79079294f * scale)),(y + (3.4349499f * scale)),(x + (0.69597363f * scale)),(y + (3.3499393f * scale)),(x + (0.6273117f * scale)),(y + (3.2453117f * scale)));
+		painter.cubicTo((x + (0.4997966f * scale)),(y + (3.0491343f * scale)),(x + (0.48344818f * scale)),(y + (2.7973735f * scale)),(x + (0.5880763f * scale)),(y + (2.5848482f * scale)));
+		painter.cubicTo((x + (0.67962575f * scale)),(y + (2.4017498f * scale)),(x + (0.84310645f * scale)),(y + (2.2775042f * scale)),(x + (1.0523622f * scale)),(y + (2.2317295f * scale)));
+		painter.cubicTo((x + (1.0719799f * scale)),(y + (2.22519f * scale)),(x + (1.0883284f * scale)),(y + (2.2219207f * scale)),(x + (1.0883284f * scale)),(y + (2.2219207f * scale)));
+		painter.cubicTo((x + (1.0915977f * scale)),(y + (2.2186508f * scale)),(x + (1.0000482f * scale)),(y + (1.9211154f * scale)),(x + (0.9477346f * scale)),(y + (1.7739828f * scale)));
+		painter.moveTo((x + (1.3924028f * scale)),(y + (2.617545f * scale)));
+		painter.cubicTo((x + (1.382594f * scale)),(y + (2.617545f * scale)),(x + (1.3727851f * scale)),(y + (2.614275f * scale)),(x + (1.3695153f * scale)),(y + (2.614275f * scale)));
+		painter.lineTo((x + (1.3597065f * scale)),(y + (2.611005f * scale)));
+		painter.lineTo((x + (1.3760543f * scale)),(y + (2.6796675f * scale)));
+		painter.cubicTo((x + (1.4512559f * scale)),(y + (3.0098987f * scale)),(x + (1.5068393f * scale)),(y + (3.369557f * scale)),(x + (1.526457f * scale)),(y + (3.6736321f * scale)));
+		painter.cubicTo((x + (1.5297267f * scale)),(y + (3.7063284f * scale)),(x + (1.5297267f * scale)),(y + (3.7324853f * scale)),(x + (1.5297267f * scale)),(y + (3.7324853f * scale)));
+		painter.cubicTo((x + (1.5329965f * scale)),(y + (3.7324853f * scale)),(x + (1.5755012f * scale)),(y + (3.7128677f * scale)),(x + (1.5983888f * scale)),(y + (3.6965194f * scale)));
+		painter.cubicTo((x + (1.6539721f * scale)),(y + (3.6638227f * scale)),(x + (1.7062862f * scale)),(y + (3.6147785f * scale)),(x + (1.7487912f * scale)),(y + (3.559195f * scale)));
+		painter.cubicTo((x + (1.8501498f * scale)),(y + (3.4251404f * scale)),(x + (1.8861152f * scale)),(y + (3.25839f * scale)),(x + (1.8468798f * scale)),(y + (3.0883694f * scale)));
+		painter.cubicTo((x + (1.8174533f * scale)),(y + (2.9510455f * scale)),(x + (1.7389826f * scale)),(y + (2.8235304f * scale)),(x + (1.6278152f * scale)),(y + (2.735251f * scale)));
+		painter.cubicTo((x + (1.5591533f * scale)),(y + (2.6829367f * scale)),(x + (1.4676039f * scale)),(y + (2.6371622f * scale)),(x + (1.3924028f * scale)),(y + (2.617545f * scale)));
+	}
+	
+	public static void paintBass(TGPainter painter, int x, int y,float scale){
+		painter.moveTo((x + (0.71937084f * scale)),(y + (0.16147426f * scale)));
+		painter.cubicTo((x + (0.75454587f * scale)),(y + (0.15827677f * scale)),(x + (0.8920496f * scale)),(y + (0.16147426f * scale)),(x + (0.94321334f * scale)),(y + (0.16467176f * scale)));
+		painter.cubicTo((x + (1.3429334f * scale)),(y + (0.20944051f * scale)),(x + (1.6147422f * scale)),(y + (0.4077018f * scale)),(x + (1.7042797f * scale)),(y + (0.72108173f * scale)));
+		painter.cubicTo((x + (1.7266634f * scale)),(y + (0.8074205f * scale)),(x + (1.7362571f * scale)),(y + (0.87137556f * scale)),(x + (1.7330583f * scale)),(y + (0.9800993f * scale)));
+		painter.cubicTo((x + (1.7330583f * scale)),(y + (1.1176031f * scale)),(x + (1.7170696f * scale)),(y + (1.2327217f * scale)),(x + (1.6723021f * scale)),(y + (1.3542367f * scale)));
+		painter.cubicTo((x + (1.5092158f * scale)),(y + (1.8370967f * scale)),(x + (1.0327508f * scale)),(y + (2.236817f * scale)),(x + (0.16296211f * scale)),(y + (2.6205468f * scale)));
+		painter.cubicTo((x + (0.12778586f * scale)),(y + (2.6365356f * scale)),(x + (0.095808364f * scale)),(y + (2.6525242f * scale)),(x + (0.092610866f * scale)),(y + (2.655722f * scale)));
+		painter.cubicTo((x + (0.073424615f * scale)),(y + (2.668513f * scale)),(x + (0.054238364f * scale)),(y + (2.6717105f * scale)),(x + (0.035052113f * scale)),(y + (2.6621182f * scale)));
+		painter.cubicTo((x + (0.019063365f * scale)),(y + (2.655722f * scale)),(x + (0.012667115f * scale)),(y + (2.6493268f * scale)),(x + (0.006272115f * scale)),(y + (2.633338f * scale)));
+		painter.cubicTo((x + (-0.0033216353f * scale)),(y + (2.6173494f * scale)),(x + (-1.2413526E-4f * scale)),(y + (2.6013606f * scale)),(x + (0.006272115f * scale)),(y + (2.5885694f * scale)));
+		painter.cubicTo((x + (0.012667115f * scale)),(y + (2.575778f * scale)),(x + (0.025458366f * scale)),(y + (2.5661855f * scale)),(x + (0.095808364f * scale)),(y + (2.5246143f * scale)));
+		painter.cubicTo((x + (0.3804096f * scale)),(y + (2.355133f * scale)),(x + (0.58826333f * scale)),(y + (2.2048392f * scale)),(x + (0.7641396f * scale)),(y + (2.0513468f * scale)));
+		painter.cubicTo((x + (0.8185009f * scale)),(y + (2.000183f * scale)),(x + (0.9208296f * scale)),(y + (1.8978542f * scale)),(x + (0.96559834f * scale)),(y + (1.8466904f * scale)));
+		painter.cubicTo((x + (1.1606609f * scale)),(y + (1.6196505f * scale)),(x + (1.2629896f * scale)),(y + (1.3990055f * scale)),(x + (1.2981646f * scale)),(y + (1.1431843f * scale)));
+		painter.cubicTo((x + (1.3045596f * scale)),(y + (1.0824268f * scale)),(x + (1.3045596f * scale)),(y + (0.93852806f * scale)),(x + (1.2981646f * scale)),(y + (0.87777054f * scale)));
+		painter.cubicTo((x + (1.2853733f * scale)),(y + (0.7850368f * scale)),(x + (1.2629896f * scale)),(y + (0.69869673f * scale)),(x + (1.2342097f * scale)),(y + (0.6219505f * scale)));
+		painter.cubicTo((x + (1.2118247f * scale)),(y + (0.5707868f * scale)),(x + (1.2054296f * scale)),(y + (0.554798f * scale)),(x + (1.1798471f * scale)),(y + (0.51322675f * scale)));
+		painter.cubicTo((x + (1.0871121f * scale)),(y + (0.35653678f * scale)),(x + (0.94641083f * scale)),(y + (0.27019802f * scale)),(x + (0.7897221f * scale)),(y + (0.27019802f * scale)));
+		painter.cubicTo((x + (0.63622963f * scale)),(y + (0.27019802f * scale)),(x + (0.5083196f * scale)),(y + (0.35653678f * scale)),(x + (0.42517713f * scale)),(y + (0.51962304f * scale)));
+		painter.cubicTo((x + (0.4123871f * scale)),(y + (0.5452043f * scale)),(x + (0.3804096f * scale)),(y + (0.6283468f * scale)),(x + (0.3804096f * scale)),(y + (0.63154423f * scale)));
+		painter.cubicTo((x + (0.3804096f * scale)),(y + (0.6347418f * scale)),(x + (0.39319962f * scale)),(y + (0.63154423f * scale)),(x + (0.40599087f * scale)),(y + (0.63154423f * scale)));
+		painter.cubicTo((x + (0.4795396f * scale)),(y + (0.6283468f * scale)),(x + (0.55948335f * scale)),(y + (0.65712553f * scale)),(x + (0.62024087f * scale)),(y + (0.705093f * scale)));
+		painter.cubicTo((x + (0.7353596f * scale)),(y + (0.80422306f * scale)),(x + (0.7673371f * scale)),(y + (0.9641105f * scale)),(x + (0.6969871f * scale)),(y + (1.1080092f * scale)));
+		painter.cubicTo((x + (0.64902085f * scale)),(y + (1.2135355f * scale)),(x + (0.54669213f * scale)),(y + (1.280688f * scale)),(x + (0.43477085f * scale)),(y + (1.2902818f * scale)));
+		painter.cubicTo((x + (0.27808085f * scale)),(y + (1.2998742f * scale)),(x + (0.12458836f * scale)),(y + (1.1975467f * scale)),(x + (0.073424615f * scale)),(y + (1.0504493f * scale)));
+		painter.cubicTo((x + (0.057435866f * scale)),(y + (1.002483f * scale)),(x + (0.054238364f * scale)),(y + (0.95451677f * scale)),(x + (0.060633365f * scale)),(y + (0.87777054f * scale)));
+		painter.cubicTo((x + (0.08941337f * scale)),(y + (0.55799556f * scale)),(x + (0.29406962f * scale)),(y + (0.28618675f * scale)),(x + (0.5754721f * scale)),(y + (0.19345176f * scale)));
+		painter.cubicTo((x + (0.62343836f * scale)),(y + (0.17746301f * scale)),(x + (0.6714046f * scale)),(y + (0.16786925f * scale)),(x + (0.71937084f * scale)),(y + (0.16147426f * scale)));
+		painter.moveTo((x + (1.9632971f * scale)),(y + (0.462063f * scale)));
+		painter.cubicTo((x + (2.0144608f * scale)),(y + (0.44607428f * scale)),(x + (2.0752184f * scale)),(y + (0.462063f * scale)),(x + (2.1167896f * scale)),(y + (0.5004368f * scale)));
+		painter.cubicTo((x + (2.1455696f * scale)),(y + (0.53241426f * scale)),(x + (2.1615584f * scale)),(y + (0.57398427f * scale)),(x + (2.1615584f * scale)),(y + (0.6155555f * scale)));
+		painter.cubicTo((x + (2.1615584f * scale)),(y + (0.7018943f * scale)),(x + (2.091207f * scale)),(y + (0.7722455f * scale)),(x + (2.0048683f * scale)),(y + (0.7722455f * scale)));
+		painter.cubicTo((x + (1.9153309f * scale)),(y + (0.7722455f * scale)),(x + (1.8449808f * scale)),(y + (0.7018943f * scale)),(x + (1.8449808f * scale)),(y + (0.6155555f * scale)));
+		painter.cubicTo((x + (1.8449808f * scale)),(y + (0.54200673f * scale)),(x + (1.8929471f * scale)),(y + (0.48124927f * scale)),(x + (1.9632971f * scale)),(y + (0.462063f * scale)));
+		painter.moveTo((x + (1.9632971f * scale)),(y + (1.2583042f * scale)));
+		painter.cubicTo((x + (2.0144608f * scale)),(y + (1.2423155f * scale)),(x + (2.0752184f * scale)),(y + (1.2583042f * scale)),(x + (2.1167896f * scale)),(y + (1.2966768f * scale)));
+		painter.cubicTo((x + (2.155162f * scale)),(y + (1.338248f * scale)),(x + (2.171151f * scale)),(y + (1.3958068f * scale)),(x + (2.155162f * scale)),(y + (1.4469718f * scale)));
+		painter.cubicTo((x + (2.1391733f * scale)),(y + (1.5205193f * scale)),(x + (2.0784159f * scale)),(y + (1.5684855f * scale)),(x + (2.0048683f * scale)),(y + (1.5684855f * scale)));
+		painter.cubicTo((x + (1.9153309f * scale)),(y + (1.5684855f * scale)),(x + (1.8449808f * scale)),(y + (1.4981354f * scale)),(x + (1.8449808f * scale)),(y + (1.4117955f * scale)));
+		painter.cubicTo((x + (1.8449808f * scale)),(y + (1.338248f * scale)),(x + (1.8929471f * scale)),(y + (1.2774905f * scale)),(x + (1.9632971f * scale)),(y + (1.2583042f * scale)));
+	}
+	
+	public static void paintAlto(TGPainter painter, int x, int y,float scale){
+		painter.moveTo((x + (0.026545623f * scale)),(y + (0.5470838f * scale)));
+		painter.cubicTo((x + (0.03553187f * scale)),(y + (0.5410925f * scale)),(x + (0.053504374f * scale)),(y + (0.5410925f * scale)),(x + (0.21525937f * scale)),(y + (0.5410925f * scale)));
+		painter.lineTo((x + (0.39498562f * scale)),(y + (0.5410925f * scale)));
+		painter.lineTo((x + (0.40397188f * scale)),(y + (0.55007875f * scale)));
+		painter.cubicTo((x + (0.40996313f * scale)),(y + (0.55607f * scale)),(x + (0.41595438f * scale)),(y + (0.56206f * scale)),(x + (0.41894937f * scale)),(y + (0.5680513f * scale)));
+		painter.cubicTo((x + (0.42494062f * scale)),(y + (0.5800325f * scale)),(x + (0.42494062f * scale)),(y + (0.69086504f * scale)),(x + (0.42494062f * scale)),(y + (2.038815f * scale)));
+		painter.cubicTo((x + (0.42494062f * scale)),(y + (3.386765f * scale)),(x + (0.42494062f * scale)),(y + (3.4975975f * scale)),(x + (0.41894937f * scale)),(y + (3.5095787f * scale)));
+		painter.cubicTo((x + (0.41595438f * scale)),(y + (3.51557f * scale)),(x + (0.40996313f * scale)),(y + (3.52156f * scale)),(x + (0.40397188f * scale)),(y + (3.5275512f * scale)));
+		painter.lineTo((x + (0.39498562f * scale)),(y + (3.5335424f * scale)));
+		painter.lineTo((x + (0.21226312f * scale)),(y + (3.5335424f * scale)));
+		painter.lineTo((x + (0.029541872f * scale)),(y + (3.5335424f * scale)));
+		painter.lineTo((x + (0.020554373f * scale)),(y + (3.5275512f * scale)));
+		painter.cubicTo((x + (0.014564373f * scale)),(y + (3.52156f * scale)),(x + (0.008573122f * scale)),(y + (3.51557f * scale)),(x + (0.0055781226f * scale)),(y + (3.5095787f * scale)));
+		painter.cubicTo((x + (-4.131275E-4f * scale)),(y + (3.4975975f * scale)),(x + (-4.131275E-4f * scale)),(y + (3.386765f * scale)),(x + (-4.131275E-4f * scale)),(y + (2.03582f * scale)));
+		painter.lineTo((x + (0.0025818725f * scale)),(y + (0.5710463f * scale)));
+		painter.lineTo((x + (0.008573122f * scale)),(y + (0.56206f * scale)));
+		painter.cubicTo((x + (0.014564373f * scale)),(y + (0.55607f * scale)),(x + (0.020554373f * scale)),(y + (0.55007875f * scale)),(x + (0.026545623f * scale)),(y + (0.5470838f * scale)));
+		painter.moveTo((x + (0.6016719f * scale)),(y + (0.5470838f * scale)));
+		painter.cubicTo((x + (0.6106581f * scale)),(y + (0.5410925f * scale)),(x + (0.6196444f * scale)),(y + (0.5410925f * scale)),(x + (0.6525944f * scale)),(y + (0.5410925f * scale)));
+		painter.cubicTo((x + (0.6915344f * scale)),(y + (0.5410925f * scale)),(x + (0.6945306f * scale)),(y + (0.5440875f * scale)),(x + (0.7035169f * scale)),(y + (0.55007875f * scale)));
+		painter.cubicTo((x + (0.72748065f * scale)),(y + (0.5680513f * scale)),(x + (0.7244844f * scale)),(y + (0.49915627f * scale)),(x + (0.7244844f * scale)),(y + (1.2779713f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (1.9759114f * scale)));
+		painter.lineTo((x + (0.74245685f * scale)),(y + (1.9609337f * scale)));
+		painter.cubicTo((x + (0.8173431f * scale)),(y + (1.8890426f * scale)),(x + (0.8862381f * scale)),(y + (1.7782114f * scale)),(x + (0.92517936f * scale)),(y + (1.6793613f * scale)));
+		painter.cubicTo((x + (0.9491431f * scale)),(y + (1.6074712f * scale)),(x + (0.9641206f * scale)),(y + (1.5265937f * scale)),(x + (0.9701106f * scale)),(y + (1.4397264f * scale)));
+		painter.cubicTo((x + (0.9701106f * scale)),(y + (1.400785f * scale)),(x + (0.97310686f * scale)),(y + (1.3947937f * scale)),(x + (0.97909814f * scale)),(y + (1.3858075f * scale)));
+		painter.cubicTo((x + (0.9850881f * scale)),(y + (1.3768213f * scale)),(x + (1.0060569f * scale)),(y + (1.36484f * scale)),(x + (1.0210332f * scale)),(y + (1.36484f * scale)));
+		painter.cubicTo((x + (1.0360106f * scale)),(y + (1.36484f * scale)),(x + (1.0539831f * scale)),(y + (1.3738263f * scale)),(x + (1.0629693f * scale)),(y + (1.3828125f * scale)));
+		painter.cubicTo((x + (1.0689607f * scale)),(y + (1.3947937f * scale)),(x + (1.0719569f * scale)),(y + (1.39779f * scale)),(x + (1.0749519f * scale)),(y + (1.4547038f * scale)));
+		painter.cubicTo((x + (1.0839381f * scale)),(y + (1.5775163f * scale)),(x + (1.1258744f * scale)),(y + (1.6793613f * scale)),(x + (1.1947694f * scale)),(y + (1.7512524f * scale)));
+		painter.cubicTo((x + (1.2636644f * scale)),(y + (1.8171525f * scale)),(x + (1.3445419f * scale)),(y + (1.8441112f * scale)),(x + (1.4433919f * scale)),(y + (1.8321288f * scale)));
+		painter.cubicTo((x + (1.5122869f * scale)),(y + (1.8231425f * scale)),(x + (1.5632094f * scale)),(y + (1.802175f * scale)),(x + (1.6021507f * scale)),(y + (1.7632337f * scale)));
+		painter.cubicTo((x + (1.6440868f * scale)),(y + (1.7212975f * scale)),(x + (1.6680493f * scale)),(y + (1.6733713f * scale)),(x + (1.6860231f * scale)),(y + (1.598485f * scale)));
+		painter.cubicTo((x + (1.7039956f * scale)),(y + (1.532585f * scale)),(x + (1.7099856f * scale)),(y + (1.466685f * scale)),(x + (1.7129818f * scale)),(y + (1.3318901f * scale)));
+		painter.cubicTo((x + (1.7189732f * scale)),(y + (0.86759627f * scale)),(x + (1.6321044f * scale)),(y + (0.67888254f * scale)),(x + (1.3894731f * scale)),(y + (0.6459325f * scale)));
+		painter.cubicTo((x + (1.2936194f * scale)),(y + (0.63395125f * scale)),(x + (1.2307143f * scale)),(y + (0.6519238f * scale)),(x + (1.2037556f * scale)),(y + (0.696855f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (0.7088375f * scale)),(x + (1.1977656f * scale)),(y + (0.7118325f * scale)),(x + (1.1977656f * scale)),(y + (0.7357963f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (0.76275504f * scale)),(x + (1.1977656f * scale)),(y + (0.76575124f * scale)),(x + (1.2067518f * scale)),(y + (0.7837238f * scale)));
+		painter.cubicTo((x + (1.2157382f * scale)),(y + (0.8016963f * scale)),(x + (1.2217281f * scale)),(y + (0.81068254f * scale)),(x + (1.2576743f * scale)),(y + (0.84662753f * scale)));
+		painter.cubicTo((x + (1.2936194f * scale)),(y + (0.8795775f * scale)),(x + (1.2996106f * scale)),(y + (0.89156f * scale)),(x + (1.3085968f * scale)),(y + (0.9065363f * scale)));
+		painter.cubicTo((x + (1.3295643f * scale)),(y + (0.95146877f * scale)),(x + (1.3205781f * scale)),(y + (1.0173688f * scale)),(x + (1.2876282f * scale)),(y + (1.0772775f * scale)));
+		painter.cubicTo((x + (1.2756469f * scale)),(y + (1.098245f * scale)),(x + (1.2337106f * scale)),(y + (1.1401813f * scale)),(x + (1.2127419f * scale)),(y + (1.1521637f * scale)));
+		painter.cubicTo((x + (1.1378556f * scale)),(y + (1.197095f * scale)),(x + (1.0509881f * scale)),(y + (1.197095f * scale)),(x + (0.9761019f * scale)),(y + (1.1521637f * scale)));
+		painter.cubicTo((x + (0.9551344f * scale)),(y + (1.1401813f * scale)),(x + (0.9131981f * scale)),(y + (1.098245f * scale)),(x + (0.9012156f * scale)),(y + (1.0772775f * scale)));
+		painter.cubicTo((x + (0.8712619f * scale)),(y + (1.026355f * scale)),(x + (0.8622756f * scale)),(y + (0.9724363f * scale)),(x + (0.8712619f * scale)),(y + (0.90354127f * scale)));
+		painter.cubicTo((x + (0.8862381f * scale)),(y + (0.81667376f * scale)),(x + (0.92517936f * scale)),(y + (0.74178755f * scale)),(x + (0.9880844f * scale)),(y + (0.6758875f * scale)));
+		painter.cubicTo((x + (1.0539831f * scale)),(y + (0.6129825f * scale)),(x + (1.1348606f * scale)),(y + (0.5710463f * scale)),(x + (1.2307143f * scale)),(y + (0.55007875f * scale)));
+		painter.cubicTo((x + (1.2876282f * scale)),(y + (0.53809625f * scale)),(x + (1.3984594f * scale)),(y + (0.53809625f * scale)),(x + (1.4943144f * scale)),(y + (0.55307376f * scale)));
+		painter.cubicTo((x + (1.8477769f * scale)),(y + (0.6039963f * scale)),(x + (2.0364895f * scale)),(y + (0.81966877f * scale)),(x + (2.0634482f * scale)),(y + (1.197095f * scale)));
+		painter.cubicTo((x + (2.0724356f * scale)),(y + (1.3139175f * scale)),(x + (2.0634482f * scale)),(y + (1.39779f * scale)),(x + (2.0364895f * scale)),(y + (1.4846575f * scale)));
+		painter.cubicTo((x + (1.9526169f * scale)),(y + (1.7302837f * scale)),(x + (1.7279594f * scale)),(y + (1.9070151f * scale)),(x + (1.4583694f * scale)),(y + (1.933975f * scale)));
+		painter.cubicTo((x + (1.3715006f * scale)),(y + (1.9429612f * scale)),(x + (1.3475369f * scale)),(y + (1.93697f * scale)),(x + (1.2666606f * scale)),(y + (1.8830512f * scale)));
+		painter.cubicTo((x + (1.2187331f * scale)),(y + (1.8501024f * scale)),(x + (1.1947694f * scale)),(y + (1.83812f * scale)),(x + (1.1708056f * scale)),(y + (1.8321288f * scale)));
+		painter.cubicTo((x + (1.1348606f * scale)),(y + (1.8231425f * scale)),(x + (1.0989156f * scale)),(y + (1.8321288f * scale)),(x + (1.0719569f * scale)),(y + (1.8560925f * scale)));
+		painter.cubicTo((x + (1.0390068f * scale)),(y + (1.8830512f * scale)),(x + (1.0240294f * scale)),(y + (1.939965f * scale)),(x + (1.0240294f * scale)),(y + (2.038815f * scale)));
+		painter.cubicTo((x + (1.0240294f * scale)),(y + (2.137665f * scale)),(x + (1.0390068f * scale)),(y + (2.194579f * scale)),(x + (1.0719569f * scale)),(y + (2.2215376f * scale)));
+		painter.cubicTo((x + (1.0989156f * scale)),(y + (2.2455013f * scale)),(x + (1.1348606f * scale)),(y + (2.2544875f * scale)),(x + (1.1708056f * scale)),(y + (2.2455013f * scale)));
+		painter.cubicTo((x + (1.1947694f * scale)),(y + (2.23951f * scale)),(x + (1.2187331f * scale)),(y + (2.2275276f * scale)),(x + (1.2666606f * scale)),(y + (2.194579f * scale)));
+		painter.cubicTo((x + (1.3475369f * scale)),(y + (2.14066f * scale)),(x + (1.3715006f * scale)),(y + (2.1346688f * scale)),(x + (1.4583694f * scale)),(y + (2.143655f * scale)));
+		painter.cubicTo((x + (1.7279594f * scale)),(y + (2.170615f * scale)),(x + (1.9526169f * scale)),(y + (2.3473463f * scale)),(x + (2.0364895f * scale)),(y + (2.5929725f * scale)));
+		painter.cubicTo((x + (2.0634482f * scale)),(y + (2.6798398f * scale)),(x + (2.0724356f * scale)),(y + (2.7637124f * scale)),(x + (2.0634482f * scale)),(y + (2.8775399f * scale)));
+		painter.cubicTo((x + (2.0334945f * scale)),(y + (3.2909112f * scale)),(x + (1.8178219f * scale)),(y + (3.5035875f * scale)),(x + (1.4044507f * scale)),(y + (3.5335424f * scale)));
+		painter.cubicTo((x + (1.3056006f * scale)),(y + (3.5395336f * scale)),(x + (1.2367057f * scale)),(y + (3.5335424f * scale)),(x + (1.1678107f * scale)),(y + (3.5095787f * scale)));
+		painter.cubicTo((x + (1.0330156f * scale)),(y + (3.4646475f * scale)),(x + (0.92218435f * scale)),(y + (3.3568113f * scale)),(x + (0.88324314f * scale)),(y + (3.2280061f * scale)));
+		painter.cubicTo((x + (0.8592794f * scale)),(y + (3.1381438f * scale)),(x + (0.8652706f * scale)),(y + (3.0662525f * scale)),(x + (0.9012156f * scale)),(y + (3.0003524f * scale)));
+		painter.cubicTo((x + (0.9131981f * scale)),(y + (2.979385f * scale)),(x + (0.9551344f * scale)),(y + (2.9374487f * scale)),(x + (0.9761019f * scale)),(y + (2.9254663f * scale)));
+		painter.cubicTo((x + (1.0509881f * scale)),(y + (2.880535f * scale)),(x + (1.1378556f * scale)),(y + (2.880535f * scale)),(x + (1.2127419f * scale)),(y + (2.9254663f * scale)));
+		painter.cubicTo((x + (1.2337106f * scale)),(y + (2.9374487f * scale)),(x + (1.2756469f * scale)),(y + (2.979385f * scale)),(x + (1.2876282f * scale)),(y + (3.0003524f * scale)));
+		painter.cubicTo((x + (1.3205781f * scale)),(y + (3.0602612f * scale)),(x + (1.3295643f * scale)),(y + (3.126161f * scale)),(x + (1.3085968f * scale)),(y + (3.1710937f * scale)));
+		painter.cubicTo((x + (1.2996106f * scale)),(y + (3.18607f * scale)),(x + (1.2936194f * scale)),(y + (3.1980524f * scale)),(x + (1.2576743f * scale)),(y + (3.2310026f * scale)));
+		painter.cubicTo((x + (1.2217281f * scale)),(y + (3.2669475f * scale)),(x + (1.2157382f * scale)),(y + (3.2759337f * scale)),(x + (1.2067518f * scale)),(y + (3.2939062f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (3.3118787f * scale)),(x + (1.1977656f * scale)),(y + (3.314875f * scale)),(x + (1.1977656f * scale)),(y + (3.3388388f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (3.3657975f * scale)),(x + (1.1977656f * scale)),(y + (3.3687925f * scale)),(x + (1.2037556f * scale)),(y + (3.380775f * scale)));
+		painter.cubicTo((x + (1.2307143f * scale)),(y + (3.4257061f * scale)),(x + (1.2936194f * scale)),(y + (3.4436786f * scale)),(x + (1.3894731f * scale)),(y + (3.4316974f * scale)));
+		painter.cubicTo((x + (1.5362506f * scale)),(y + (3.4107287f * scale)),(x + (1.6261132f * scale)),(y + (3.3328474f * scale)),(x + (1.6710457f * scale)),(y + (3.1770837f * scale)));
+		painter.cubicTo((x + (1.7009994f * scale)),(y + (3.0752387f * scale)),(x + (1.7159768f * scale)),(y + (2.9374487f * scale)),(x + (1.7129818f * scale)),(y + (2.74574f * scale)));
+		painter.cubicTo((x + (1.7099856f * scale)),(y + (2.610945f * scale)),(x + (1.7039956f * scale)),(y + (2.545045f * scale)),(x + (1.6860231f * scale)),(y + (2.47615f * scale)));
+		painter.cubicTo((x + (1.6500769f * scale)),(y + (2.3323689f * scale)),(x + (1.5751907f * scale)),(y + (2.2604775f * scale)),(x + (1.4433919f * scale)),(y + (2.2455013f * scale)));
+		painter.cubicTo((x + (1.3445419f * scale)),(y + (2.2335188f * scale)),(x + (1.2636644f * scale)),(y + (2.2604775f * scale)),(x + (1.1947694f * scale)),(y + (2.3263776f * scale)));
+		painter.cubicTo((x + (1.1258744f * scale)),(y + (2.3982687f * scale)),(x + (1.0839381f * scale)),(y + (2.5001137f * scale)),(x + (1.0749519f * scale)),(y + (2.6229262f * scale)));
+		painter.cubicTo((x + (1.0719569f * scale)),(y + (2.6798398f * scale)),(x + (1.0689607f * scale)),(y + (2.6828363f * scale)),(x + (1.0629693f * scale)),(y + (2.6948175f * scale)));
+		painter.cubicTo((x + (1.0539831f * scale)),(y + (2.7038038f * scale)),(x + (1.0360106f * scale)),(y + (2.71279f * scale)),(x + (1.0210332f * scale)),(y + (2.71279f * scale)));
+		painter.cubicTo((x + (1.0060569f * scale)),(y + (2.71279f * scale)),(x + (0.9850881f * scale)),(y + (2.7008088f * scale)),(x + (0.97909814f * scale)),(y + (2.6918225f * scale)));
+		painter.cubicTo((x + (0.97310686f * scale)),(y + (2.6828363f * scale)),(x + (0.9701106f * scale)),(y + (2.676845f * scale)),(x + (0.9701106f * scale)),(y + (2.6379037f * scale)));
+		painter.cubicTo((x + (0.9641206f * scale)),(y + (2.5180862f * scale)),(x + (0.9401569f * scale)),(y + (2.4282224f * scale)),(x + (0.8922294f * scale)),(y + (2.3233826f * scale)));
+		painter.cubicTo((x + (0.8562844f * scale)),(y + (2.2514913f * scale)),(x + (0.79637563f * scale)),(y + (2.170615f * scale)),(x + (0.74245685f * scale)),(y + (2.1166964f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (2.1017187f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (2.7996588f * scale)));
+		painter.cubicTo((x + (0.7244844f * scale)),(y + (3.5784738f * scale)),(x + (0.72748065f * scale)),(y + (3.5095787f * scale)),(x + (0.7035169f * scale)),(y + (3.5275512f * scale)));
+		painter.cubicTo((x + (0.6945306f * scale)),(y + (3.5335424f * scale)),(x + (0.6915344f * scale)),(y + (3.5335424f * scale)),(x + (0.6495981f * scale)),(y + (3.5335424f * scale)));
+		painter.cubicTo((x + (0.6076619f * scale)),(y + (3.5335424f * scale)),(x + (0.6046669f * scale)),(y + (3.5335424f * scale)),(x + (0.59568065f * scale)),(y + (3.5275512f * scale)));
+		painter.cubicTo((x + (0.5896894f * scale)),(y + (3.52156f * scale)),(x + (0.58369815f * scale)),(y + (3.51557f * scale)),(x + (0.58070314f * scale)),(y + (3.5095787f * scale)));
+		painter.cubicTo((x + (0.57471186f * scale)),(y + (3.4975975f * scale)),(x + (0.57471186f * scale)),(y + (3.386765f * scale)),(x + (0.57471186f * scale)),(y + (2.03582f * scale)));
+		painter.lineTo((x + (0.5777081f * scale)),(y + (0.5710463f * scale)));
+		painter.lineTo((x + (0.58369815f * scale)),(y + (0.56206f * scale)));
+		painter.cubicTo((x + (0.5896894f * scale)),(y + (0.55607f * scale)),(x + (0.59568065f * scale)),(y + (0.55007875f * scale)),(x + (0.6016719f * scale)),(y + (0.5470838f * scale)));
+	}
+	
+	public static void paintTenor(TGPainter painter, int x, int y,float scale){
+		painter.moveTo((x + (0.026545623f * scale)),(y + (-0.45291623f * scale)));
+		painter.cubicTo((x + (0.03553187f * scale)),(y + (-0.45890749f * scale)),(x + (0.053504374f * scale)),(y + (-0.45890749f * scale)),(x + (0.21525937f * scale)),(y + (-0.45890749f * scale)));
+		painter.lineTo((x + (0.39498562f * scale)),(y + (-0.45890749f * scale)));
+		painter.lineTo((x + (0.40397188f * scale)),(y + (-0.44992122f * scale)));
+		painter.cubicTo((x + (0.40996313f * scale)),(y + (-0.44392997f * scale)),(x + (0.41595438f * scale)),(y + (-0.43793997f * scale)),(x + (0.41894937f * scale)),(y + (-0.43194872f * scale)));
+		painter.cubicTo((x + (0.42494062f * scale)),(y + (-0.41996747f * scale)),(x + (0.42494062f * scale)),(y + (-0.30913496f * scale)),(x + (0.42494062f * scale)),(y + (1.038815f * scale)));
+		painter.cubicTo((x + (0.42494062f * scale)),(y + (2.386765f * scale)),(x + (0.42494062f * scale)),(y + (2.4975975f * scale)),(x + (0.41894937f * scale)),(y + (2.5095787f * scale)));
+		painter.cubicTo((x + (0.41595438f * scale)),(y + (2.51557f * scale)),(x + (0.40996313f * scale)),(y + (2.52156f * scale)),(x + (0.40397188f * scale)),(y + (2.5275512f * scale)));
+		painter.lineTo((x + (0.39498562f * scale)),(y + (2.5335424f * scale)));
+		painter.lineTo((x + (0.21226312f * scale)),(y + (2.5335424f * scale)));
+		painter.lineTo((x + (0.029541872f * scale)),(y + (2.5335424f * scale)));
+		painter.lineTo((x + (0.020554373f * scale)),(y + (2.5275512f * scale)));
+		painter.cubicTo((x + (0.014564373f * scale)),(y + (2.52156f * scale)),(x + (0.008573122f * scale)),(y + (2.51557f * scale)),(x + (0.0055781226f * scale)),(y + (2.5095787f * scale)));
+		painter.cubicTo((x + (-4.131275E-4f * scale)),(y + (2.4975975f * scale)),(x + (-4.131275E-4f * scale)),(y + (2.386765f * scale)),(x + (-4.131275E-4f * scale)),(y + (1.03582f * scale)));
+		painter.lineTo((x + (0.0025818725f * scale)),(y + (-0.42895374f * scale)));
+		painter.lineTo((x + (0.008573122f * scale)),(y + (-0.43793997f * scale)));
+		painter.cubicTo((x + (0.014564373f * scale)),(y + (-0.44392997f * scale)),(x + (0.020554373f * scale)),(y + (-0.44992122f * scale)),(x + (0.026545623f * scale)),(y + (-0.45291623f * scale)));
+		painter.moveTo((x + (0.6016719f * scale)),(y + (-0.45291623f * scale)));
+		painter.cubicTo((x + (0.6106581f * scale)),(y + (-0.45890749f * scale)),(x + (0.6196444f * scale)),(y + (-0.45890749f * scale)),(x + (0.6525944f * scale)),(y + (-0.45890749f * scale)));
+		painter.cubicTo((x + (0.6915344f * scale)),(y + (-0.45890749f * scale)),(x + (0.6945306f * scale)),(y + (-0.45591247f * scale)),(x + (0.7035169f * scale)),(y + (-0.44992122f * scale)));
+		painter.cubicTo((x + (0.72748065f * scale)),(y + (-0.43194872f * scale)),(x + (0.7244844f * scale)),(y + (-0.5008437f * scale)),(x + (0.7244844f * scale)),(y + (0.27797127f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (0.9759113f * scale)));
+		painter.lineTo((x + (0.74245685f * scale)),(y + (0.96093374f * scale)));
+		painter.cubicTo((x + (0.8173431f * scale)),(y + (0.88904256f * scale)),(x + (0.8862381f * scale)),(y + (0.7782113f * scale)),(x + (0.92517936f * scale)),(y + (0.6793613f * scale)));
+		painter.cubicTo((x + (0.9491431f * scale)),(y + (0.6074713f * scale)),(x + (0.9641206f * scale)),(y + (0.52659374f * scale)),(x + (0.9701106f * scale)),(y + (0.4397263f * scale)));
+		painter.cubicTo((x + (0.9701106f * scale)),(y + (0.40078503f * scale)),(x + (0.97310686f * scale)),(y + (0.39479375f * scale)),(x + (0.97909814f * scale)),(y + (0.3858075f * scale)));
+		painter.cubicTo((x + (0.9850881f * scale)),(y + (0.37682128f * scale)),(x + (1.0060569f * scale)),(y + (0.36484003f * scale)),(x + (1.0210332f * scale)),(y + (0.36484003f * scale)));
+		painter.cubicTo((x + (1.0360106f * scale)),(y + (0.36484003f * scale)),(x + (1.0539831f * scale)),(y + (0.37382627f * scale)),(x + (1.0629693f * scale)),(y + (0.3828125f * scale)));
+		painter.cubicTo((x + (1.0689607f * scale)),(y + (0.39479375f * scale)),(x + (1.0719569f * scale)),(y + (0.39779f * scale)),(x + (1.0749519f * scale)),(y + (0.45470375f * scale)));
+		painter.cubicTo((x + (1.0839381f * scale)),(y + (0.57751626f * scale)),(x + (1.1258744f * scale)),(y + (0.6793613f * scale)),(x + (1.1947694f * scale)),(y + (0.7512525f * scale)));
+		painter.cubicTo((x + (1.2636644f * scale)),(y + (0.81715256f * scale)),(x + (1.3445419f * scale)),(y + (0.84411126f * scale)),(x + (1.4433919f * scale)),(y + (0.8321288f * scale)));
+		painter.cubicTo((x + (1.5122869f * scale)),(y + (0.82314247f * scale)),(x + (1.5632094f * scale)),(y + (0.802175f * scale)),(x + (1.6021507f * scale)),(y + (0.7632337f * scale)));
+		painter.cubicTo((x + (1.6440868f * scale)),(y + (0.72129756f * scale)),(x + (1.6680493f * scale)),(y + (0.67337126f * scale)),(x + (1.6860231f * scale)),(y + (0.59848505f * scale)));
+		painter.cubicTo((x + (1.7039956f * scale)),(y + (0.532585f * scale)),(x + (1.7099856f * scale)),(y + (0.466685f * scale)),(x + (1.7129818f * scale)),(y + (0.33189005f * scale)));
+		painter.cubicTo((x + (1.7189732f * scale)),(y + (-0.13240373f * scale)),(x + (1.6321044f * scale)),(y + (-0.32111746f * scale)),(x + (1.3894731f * scale)),(y + (-0.35406747f * scale)));
+		painter.cubicTo((x + (1.2936194f * scale)),(y + (-0.36604872f * scale)),(x + (1.2307143f * scale)),(y + (-0.34807622f * scale)),(x + (1.2037556f * scale)),(y + (-0.303145f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (-0.2911625f * scale)),(x + (1.1977656f * scale)),(y + (-0.28816748f * scale)),(x + (1.1977656f * scale)),(y + (-0.26420373f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (-0.23724498f * scale)),(x + (1.1977656f * scale)),(y + (-0.23424873f * scale)),(x + (1.2067518f * scale)),(y + (-0.21627623f * scale)));
+		painter.cubicTo((x + (1.2157382f * scale)),(y + (-0.19830373f * scale)),(x + (1.2217281f * scale)),(y + (-0.18931746f * scale)),(x + (1.2576743f * scale)),(y + (-0.15337247f * scale)));
+		painter.cubicTo((x + (1.2936194f * scale)),(y + (-0.12042248f * scale)),(x + (1.2996106f * scale)),(y + (-0.10843998f * scale)),(x + (1.3085968f * scale)),(y + (-0.09346372f * scale)));
+		painter.cubicTo((x + (1.3295643f * scale)),(y + (-0.048531234f * scale)),(x + (1.3205781f * scale)),(y + (0.017368764f * scale)),(x + (1.2876282f * scale)),(y + (0.07727754f * scale)));
+		painter.cubicTo((x + (1.2756469f * scale)),(y + (0.098245025f * scale)),(x + (1.2337106f * scale)),(y + (0.14018124f * scale)),(x + (1.2127419f * scale)),(y + (0.15216374f * scale)));
+		painter.cubicTo((x + (1.1378556f * scale)),(y + (0.19709504f * scale)),(x + (1.0509881f * scale)),(y + (0.19709504f * scale)),(x + (0.9761019f * scale)),(y + (0.15216374f * scale)));
+		painter.cubicTo((x + (0.9551344f * scale)),(y + (0.14018124f * scale)),(x + (0.9131981f * scale)),(y + (0.098245025f * scale)),(x + (0.9012156f * scale)),(y + (0.07727754f * scale)));
+		painter.cubicTo((x + (0.8712619f * scale)),(y + (0.026355028f * scale)),(x + (0.8622756f * scale)),(y + (-0.027563721f * scale)),(x + (0.8712619f * scale)),(y + (-0.09645873f * scale)));
+		painter.cubicTo((x + (0.8862381f * scale)),(y + (-0.18332621f * scale)),(x + (0.92517936f * scale)),(y + (-0.25821248f * scale)),(x + (0.9880844f * scale)),(y + (-0.32411247f * scale)));
+		painter.cubicTo((x + (1.0539831f * scale)),(y + (-0.3870175f * scale)),(x + (1.1348606f * scale)),(y + (-0.42895374f * scale)),(x + (1.2307143f * scale)),(y + (-0.44992122f * scale)));
+		painter.cubicTo((x + (1.2876282f * scale)),(y + (-0.46190372f * scale)),(x + (1.3984594f * scale)),(y + (-0.46190372f * scale)),(x + (1.4943144f * scale)),(y + (-0.44692624f * scale)));
+		painter.cubicTo((x + (1.8477769f * scale)),(y + (-0.39600372f * scale)),(x + (2.0364895f * scale)),(y + (-0.18033123f * scale)),(x + (2.0634482f * scale)),(y + (0.19709504f * scale)));
+		painter.cubicTo((x + (2.0724356f * scale)),(y + (0.31391752f * scale)),(x + (2.0634482f * scale)),(y + (0.39779f * scale)),(x + (2.0364895f * scale)),(y + (0.48465753f * scale)));
+		painter.cubicTo((x + (1.9526169f * scale)),(y + (0.7302838f * scale)),(x + (1.7279594f * scale)),(y + (0.907015f * scale)),(x + (1.4583694f * scale)),(y + (0.93397504f * scale)));
+		painter.cubicTo((x + (1.3715006f * scale)),(y + (0.9429613f * scale)),(x + (1.3475369f * scale)),(y + (0.93697006f * scale)),(x + (1.2666606f * scale)),(y + (0.8830512f * scale)));
+		painter.cubicTo((x + (1.2187331f * scale)),(y + (0.8501025f * scale)),(x + (1.1947694f * scale)),(y + (0.83812004f * scale)),(x + (1.1708056f * scale)),(y + (0.8321288f * scale)));
+		painter.cubicTo((x + (1.1348606f * scale)),(y + (0.82314247f * scale)),(x + (1.0989156f * scale)),(y + (0.8321288f * scale)),(x + (1.0719569f * scale)),(y + (0.8560925f * scale)));
+		painter.cubicTo((x + (1.0390068f * scale)),(y + (0.8830512f * scale)),(x + (1.0240294f * scale)),(y + (0.93996507f * scale)),(x + (1.0240294f * scale)),(y + (1.038815f * scale)));
+		painter.cubicTo((x + (1.0240294f * scale)),(y + (1.137665f * scale)),(x + (1.0390068f * scale)),(y + (1.1945789f * scale)),(x + (1.0719569f * scale)),(y + (1.2215376f * scale)));
+		painter.cubicTo((x + (1.0989156f * scale)),(y + (1.2455013f * scale)),(x + (1.1348606f * scale)),(y + (1.2544875f * scale)),(x + (1.1708056f * scale)),(y + (1.2455013f * scale)));
+		painter.cubicTo((x + (1.1947694f * scale)),(y + (1.23951f * scale)),(x + (1.2187331f * scale)),(y + (1.2275276f * scale)),(x + (1.2666606f * scale)),(y + (1.1945789f * scale)));
+		painter.cubicTo((x + (1.3475369f * scale)),(y + (1.14066f * scale)),(x + (1.3715006f * scale)),(y + (1.1346688f * scale)),(x + (1.4583694f * scale)),(y + (1.1436551f * scale)));
+		painter.cubicTo((x + (1.7279594f * scale)),(y + (1.170615f * scale)),(x + (1.9526169f * scale)),(y + (1.3473463f * scale)),(x + (2.0364895f * scale)),(y + (1.5929725f * scale)));
+		painter.cubicTo((x + (2.0634482f * scale)),(y + (1.6798398f * scale)),(x + (2.0724356f * scale)),(y + (1.7637124f * scale)),(x + (2.0634482f * scale)),(y + (1.8775399f * scale)));
+		painter.cubicTo((x + (2.0334945f * scale)),(y + (2.2909112f * scale)),(x + (1.8178219f * scale)),(y + (2.5035875f * scale)),(x + (1.4044507f * scale)),(y + (2.5335424f * scale)));
+		painter.cubicTo((x + (1.3056006f * scale)),(y + (2.5395336f * scale)),(x + (1.2367057f * scale)),(y + (2.5335424f * scale)),(x + (1.1678107f * scale)),(y + (2.5095787f * scale)));
+		painter.cubicTo((x + (1.0330156f * scale)),(y + (2.4646475f * scale)),(x + (0.92218435f * scale)),(y + (2.3568113f * scale)),(x + (0.88324314f * scale)),(y + (2.2280061f * scale)));
+		painter.cubicTo((x + (0.8592794f * scale)),(y + (2.1381438f * scale)),(x + (0.8652706f * scale)),(y + (2.0662525f * scale)),(x + (0.9012156f * scale)),(y + (2.0003524f * scale)));
+		painter.cubicTo((x + (0.9131981f * scale)),(y + (1.9793849f * scale)),(x + (0.9551344f * scale)),(y + (1.9374487f * scale)),(x + (0.9761019f * scale)),(y + (1.9254663f * scale)));
+		painter.cubicTo((x + (1.0509881f * scale)),(y + (1.8805349f * scale)),(x + (1.1378556f * scale)),(y + (1.8805349f * scale)),(x + (1.2127419f * scale)),(y + (1.9254663f * scale)));
+		painter.cubicTo((x + (1.2337106f * scale)),(y + (1.9374487f * scale)),(x + (1.2756469f * scale)),(y + (1.9793849f * scale)),(x + (1.2876282f * scale)),(y + (2.0003524f * scale)));
+		painter.cubicTo((x + (1.3205781f * scale)),(y + (2.0602612f * scale)),(x + (1.3295643f * scale)),(y + (2.126161f * scale)),(x + (1.3085968f * scale)),(y + (2.1710937f * scale)));
+		painter.cubicTo((x + (1.2996106f * scale)),(y + (2.18607f * scale)),(x + (1.2936194f * scale)),(y + (2.1980524f * scale)),(x + (1.2576743f * scale)),(y + (2.2310026f * scale)));
+		painter.cubicTo((x + (1.2217281f * scale)),(y + (2.2669475f * scale)),(x + (1.2157382f * scale)),(y + (2.2759337f * scale)),(x + (1.2067518f * scale)),(y + (2.2939062f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (2.3118787f * scale)),(x + (1.1977656f * scale)),(y + (2.314875f * scale)),(x + (1.1977656f * scale)),(y + (2.3388388f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (2.3657975f * scale)),(x + (1.1977656f * scale)),(y + (2.3687925f * scale)),(x + (1.2037556f * scale)),(y + (2.380775f * scale)));
+		painter.cubicTo((x + (1.2307143f * scale)),(y + (2.4257061f * scale)),(x + (1.2936194f * scale)),(y + (2.4436786f * scale)),(x + (1.3894731f * scale)),(y + (2.4316974f * scale)));
+		painter.cubicTo((x + (1.5362506f * scale)),(y + (2.4107287f * scale)),(x + (1.6261132f * scale)),(y + (2.3328474f * scale)),(x + (1.6710457f * scale)),(y + (2.1770837f * scale)));
+		painter.cubicTo((x + (1.7009994f * scale)),(y + (2.0752387f * scale)),(x + (1.7159768f * scale)),(y + (1.9374487f * scale)),(x + (1.7129818f * scale)),(y + (1.7457399f * scale)));
+		painter.cubicTo((x + (1.7099856f * scale)),(y + (1.610945f * scale)),(x + (1.7039956f * scale)),(y + (1.5450449f * scale)),(x + (1.6860231f * scale)),(y + (1.47615f * scale)));
+		painter.cubicTo((x + (1.6500769f * scale)),(y + (1.3323689f * scale)),(x + (1.5751907f * scale)),(y + (1.2604775f * scale)),(x + (1.4433919f * scale)),(y + (1.2455013f * scale)));
+		painter.cubicTo((x + (1.3445419f * scale)),(y + (1.2335188f * scale)),(x + (1.2636644f * scale)),(y + (1.2604775f * scale)),(x + (1.1947694f * scale)),(y + (1.3263776f * scale)));
+		painter.cubicTo((x + (1.1258744f * scale)),(y + (1.3982687f * scale)),(x + (1.0839381f * scale)),(y + (1.5001137f * scale)),(x + (1.0749519f * scale)),(y + (1.6229262f * scale)));
+		painter.cubicTo((x + (1.0719569f * scale)),(y + (1.6798398f * scale)),(x + (1.0689607f * scale)),(y + (1.6828363f * scale)),(x + (1.0629693f * scale)),(y + (1.6948175f * scale)));
+		painter.cubicTo((x + (1.0539831f * scale)),(y + (1.7038038f * scale)),(x + (1.0360106f * scale)),(y + (1.71279f * scale)),(x + (1.0210332f * scale)),(y + (1.71279f * scale)));
+		painter.cubicTo((x + (1.0060569f * scale)),(y + (1.71279f * scale)),(x + (0.9850881f * scale)),(y + (1.7008088f * scale)),(x + (0.97909814f * scale)),(y + (1.6918225f * scale)));
+		painter.cubicTo((x + (0.97310686f * scale)),(y + (1.6828363f * scale)),(x + (0.9701106f * scale)),(y + (1.6768451f * scale)),(x + (0.9701106f * scale)),(y + (1.6379037f * scale)));
+		painter.cubicTo((x + (0.9641206f * scale)),(y + (1.5180862f * scale)),(x + (0.9401569f * scale)),(y + (1.4282224f * scale)),(x + (0.8922294f * scale)),(y + (1.3233826f * scale)));
+		painter.cubicTo((x + (0.8562844f * scale)),(y + (1.2514913f * scale)),(x + (0.79637563f * scale)),(y + (1.170615f * scale)),(x + (0.74245685f * scale)),(y + (1.1166964f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (1.1017187f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (1.7996588f * scale)));
+		painter.cubicTo((x + (0.7244844f * scale)),(y + (2.5784738f * scale)),(x + (0.72748065f * scale)),(y + (2.5095787f * scale)),(x + (0.7035169f * scale)),(y + (2.5275512f * scale)));
+		painter.cubicTo((x + (0.6945306f * scale)),(y + (2.5335424f * scale)),(x + (0.6915344f * scale)),(y + (2.5335424f * scale)),(x + (0.6495981f * scale)),(y + (2.5335424f * scale)));
+		painter.cubicTo((x + (0.6076619f * scale)),(y + (2.5335424f * scale)),(x + (0.6046669f * scale)),(y + (2.5335424f * scale)),(x + (0.59568065f * scale)),(y + (2.5275512f * scale)));
+		painter.cubicTo((x + (0.5896894f * scale)),(y + (2.52156f * scale)),(x + (0.58369815f * scale)),(y + (2.51557f * scale)),(x + (0.58070314f * scale)),(y + (2.5095787f * scale)));
+		painter.cubicTo((x + (0.57471186f * scale)),(y + (2.4975975f * scale)),(x + (0.57471186f * scale)),(y + (2.386765f * scale)),(x + (0.57471186f * scale)),(y + (1.03582f * scale)));
+		painter.lineTo((x + (0.5777081f * scale)),(y + (-0.42895374f * scale)));
+		painter.lineTo((x + (0.58369815f * scale)),(y + (-0.43793997f * scale)));
+		painter.cubicTo((x + (0.5896894f * scale)),(y + (-0.44392997f * scale)),(x + (0.59568065f * scale)),(y + (-0.44992122f * scale)),(x + (0.6016719f * scale)),(y + (-0.45291623f * scale)));
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGKeySignaturePainter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGKeySignaturePainter.java
new file mode 100644
index 0000000..5436c48
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGKeySignaturePainter.java
@@ -0,0 +1,144 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGKeySignaturePainter {
+	
+	public static void paintSharp(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.4330491f * scale)),(y + (-0.7961011300329119f * scale)));
+		painter.cubicTo((x + (0.44892004f * scale)),(y + (-0.8051702223718167f * scale)),(x + (0.47386006f * scale)),(y + (-0.7983684030594305f * scale)),(x + (0.48292914f * scale)),(y + (-0.7779629465192557f * scale)));
+		painter.cubicTo((x + (0.48746368f * scale)),(y + (-0.7688938558101654f * scale)),(x + (0.48746368f * scale)),(y + (-0.7620920382440091f * scale)),(x + (0.48746368f * scale)),(y + (-0.6033829182386399f * scale)));
+		painter.cubicTo((x + (0.48746368f * scale)),(y + (-0.5104247212409974f * scale)),(x + (0.48746368f * scale)),(y + (-0.435604739189148f * scale)),(x + (0.48973095f * scale)),(y + (-0.435604739189148f * scale)));
+		painter.cubicTo((x + (0.48973095f * scale)),(y + (-0.435604739189148f * scale)),(x + (0.51013637f * scale)),(y + (-0.4446738243103028f * scale)),(x + (0.5350764f * scale)),(y + (-0.45374290943145756f * scale)));
+		painter.cubicTo((x + (0.5872237f * scale)),(y + (-0.47414835095405583f * scale)),(x + (0.5940255f * scale)),(y + (-0.4764156520366669f * scale)),(x + (0.6076291f * scale)),(y + (-0.46507926583290105f * scale)));
+		painter.cubicTo((x + (0.62350005f * scale)),(y + (-0.45374290943145756f * scale)),(x + (0.62350005f * scale)),(y + (-0.45147563815116887f * scale)),(x + (0.62350005f * scale)),(y + (-0.36078472733497624f * scale)));
+		painter.cubicTo((x + (0.62350005f * scale)),(y + (-0.2836974740028382f * scale)),(x + (0.62350005f * scale)),(y + (-0.2768956303596497f * scale)),(x + (0.6189655f * scale)),(y + (-0.2700937867164612f * scale)));
+		painter.cubicTo((x + (0.6166982f * scale)),(y + (-0.26555924415588383f * scale)),(x + (0.61216366f * scale)),(y + (-0.26102470159530644f * scale)),(x + (0.6098964f * scale)),(y + (-0.25875746011734013f * scale)));
+		painter.cubicTo((x + (0.6053619f * scale)),(y + (-0.25649015903472905f * scale)),(x + (0.5781546f * scale)),(y + (-0.24288653135299687f * scale)),(x + (0.54641277f * scale)),(y + (-0.23155020475387578f * scale)));
+		painter.lineTo((x + (0.48973095f * scale)),(y + (-0.20661019086837773f * scale)));
+		painter.lineTo((x + (0.48746368f * scale)),(y + (-0.022961068153381392f * scale)));
+		painter.cubicTo((x + (0.48746368f * scale)),(y + (0.0767989873886108f * scale)),(x + (0.48746368f * scale)),(y + (0.16068805456161495f * scale)),(x + (0.48973095f * scale)),(y + (0.16068805456161495f * scale)));
+		painter.cubicTo((x + (0.48973095f * scale)),(y + (0.16068805456161495f * scale)),(x + (0.51013637f * scale)),(y + (0.15161896944046016f * scale)),(x + (0.5350764f * scale)),(y + (0.14254988431930538f * scale)));
+		painter.cubicTo((x + (0.5872237f * scale)),(y + (0.12214435338973995f * scale)),(x + (0.5940255f * scale)),(y + (0.11987711191177364f * scale)),(x + (0.6076291f * scale)),(y + (0.13121343851089473f * scale)));
+		painter.cubicTo((x + (0.62350005f * scale)),(y + (0.14254988431930538f * scale)),(x + (0.62350005f * scale)),(y + (0.14481712579727168f * scale)),(x + (0.62350005f * scale)),(y + (0.2355080366134643f * scale)));
+		painter.cubicTo((x + (0.62350005f * scale)),(y + (0.3125954389572143f * scale)),(x + (0.62350005f * scale)),(y + (0.31939716339111324f * scale)),(x + (0.6189655f * scale)),(y + (0.3261990070343017f * scale)));
+		painter.cubicTo((x + (0.6166982f * scale)),(y + (0.3307336091995239f * scale)),(x + (0.61216366f * scale)),(y + (0.3352680921554565f * scale)),(x + (0.6098964f * scale)),(y + (0.3375353336334228f * scale)));
+		painter.cubicTo((x + (0.6053619f * scale)),(y + (0.33980269432067867f * scale)),(x + (0.5781546f * scale)),(y + (0.35340626239776607f * scale)),(x + (0.54641277f * scale)),(y + (0.36474258899688716f * scale)));
+		painter.lineTo((x + (0.48973095f * scale)),(y + (0.3896826028823852f * scale)));
+		painter.lineTo((x + (0.48746368f * scale)),(y + (0.5801335096359252f * scale)));
+		painter.cubicTo((x + (0.48746368f * scale)),(y + (0.7524463653564453f * scale)),(x + (0.4851964f * scale)),(y + (0.7728516578674316f * scale)),(x + (0.48292914f * scale)),(y + (0.7796536207199096f * scale)));
+		painter.cubicTo((x + (0.4670582f * scale)),(y + (0.8068609952926635f * scale)),(x + (0.42851457f * scale)),(y + (0.8068609952926635f * scale)),(x + (0.4126437f * scale)),(y + (0.7796536207199096f * scale)));
+		painter.cubicTo((x + (0.41037643f * scale)),(y + (0.7728516578674316f * scale)),(x + (0.40810916f * scale)),(y + (0.754713487625122f * scale)),(x + (0.40810916f * scale)),(y + (0.5960044384002685f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (0.42142446041107173f * scale)));
+		painter.lineTo((x + (0.31061637f * scale)),(y + (0.4599680423736572f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (0.4985117435455322f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (0.6821606874465942f * scale)));
+		painter.cubicTo((x + (0.21539094f * scale)),(y + (0.8771464347839355f * scale)),(x + (0.21539094f * scale)),(y + (0.8726117134094238f * scale)),(x + (0.20405458f * scale)),(y + (0.8839481592178344f * scale)));
+		painter.cubicTo((x + (0.19952002f * scale)),(y + (0.8907500028610229f * scale)),(x + (0.18364911f * scale)),(y + (0.8975517272949218f * scale)),(x + (0.1768473f * scale)),(y + (0.8975517272949218f * scale)));
+		painter.cubicTo((x + (0.1677782f * scale)),(y + (0.8975517272949218f * scale)),(x + (0.15190728f * scale)),(y + (0.8907500028610229f * scale)),(x + (0.14737274f * scale)),(y + (0.8839481592178344f * scale)));
+		painter.cubicTo((x + (0.13603638f * scale)),(y + (0.8726117134094238f * scale)),(x + (0.13603638f * scale)),(y + (0.8771464347839355f * scale)),(x + (0.13603638f * scale)),(y + (0.7002989768981933f * scale)));
+		painter.cubicTo((x + (0.13603638f * scale)),(y + (0.6073408842086792f * scale)),(x + (0.13603638f * scale)),(y + (0.532520842552185f * scale)),(x + (0.1337691f * scale)),(y + (0.532520842552185f * scale)));
+		painter.cubicTo((x + (0.1337691f * scale)),(y + (0.532520842552185f * scale)),(x + (0.113363646f * scale)),(y + (0.5415899276733398f * scale)),(x + (0.08842365f * scale)),(y + (0.5506590127944946f * scale)));
+		painter.cubicTo((x + (0.036276367f * scale)),(y + (0.5710644245147705f * scale)),(x + (0.029474549f * scale)),(y + (0.5733317852020263f * scale)),(x + (0.01587091f * scale)),(y + (0.5619953393936157f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (0.5506590127944946f * scale)),(x + (0.0f * scale)),(y + (0.5483916521072387f * scale)),(x + (0.0f * scale)),(y + (0.4577008008956909f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (0.3806135177612304f * scale)),(x + (0.0f * scale)),(y + (0.3738117933273315f * scale)),(x + (0.004534546f * scale)),(y + (0.36700983047485347f * scale)));
+		painter.cubicTo((x + (0.0068018185f * scale)),(y + (0.36247534751892085f * scale)),(x + (0.011336365f * scale)),(y + (0.3579407453536987f * scale)),(x + (0.013603637f * scale)),(y + (0.3556735038757324f * scale)));
+		painter.cubicTo((x + (0.018138183f * scale)),(y + (0.35340626239776607f * scale)),(x + (0.04534546f * scale)),(y + (0.33980269432067867f * scale)),(x + (0.07708728f * scale)),(y + (0.328466248512268f * scale)));
+		painter.lineTo((x + (0.13603638f * scale)),(y + (0.30352623462677f * scale)));
+		painter.lineTo((x + (0.13603638f * scale)),(y + (0.11987711191177364f * scale)));
+		painter.cubicTo((x + (0.13603638f * scale)),(y + (0.020117175579071f * scale)),(x + (0.13603638f * scale)),(y + (-0.06377195119857793f * scale)),(x + (0.1337691f * scale)),(y + (-0.06377195119857793f * scale)));
+		painter.cubicTo((x + (0.1337691f * scale)),(y + (-0.06377195119857793f * scale)),(x + (0.113363646f * scale)),(y + (-0.054702806472778365f * scale)),(x + (0.08842365f * scale)),(y + (-0.04563372135162358f * scale)));
+		painter.cubicTo((x + (0.036276367f * scale)),(y + (-0.0252283096313477f * scale)),(x + (0.029474549f * scale)),(y + (-0.022961068153381392f * scale)),(x + (0.01587091f * scale)),(y + (-0.034297394752502486f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (-0.04563372135162358f * scale)),(x + (0.0f * scale)),(y + (-0.047901022434234664f * scale)),(x + (0.0f * scale)),(y + (-0.13859199285507207f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (-0.21567927598953252f * scale)),(x + (0.0f * scale)),(y + (-0.222481119632721f * scale)),(x + (0.004534546f * scale)),(y + (-0.2292829036712647f * scale)));
+		painter.cubicTo((x + (0.0068018185f * scale)),(y + (-0.23381744623184209f * scale)),(x + (0.011336365f * scale)),(y + (-0.23835204839706425f * scale)),(x + (0.013603637f * scale)),(y + (-0.2406192302703858f * scale)));
+		painter.cubicTo((x + (0.018138183f * scale)),(y + (-0.24288653135299687f * scale)),(x + (0.04534546f * scale)),(y + (-0.25649015903472905f * scale)),(x + (0.07708728f * scale)),(y + (-0.2678265452384949f * scale)));
+		painter.lineTo((x + (0.13603638f * scale)),(y + (-0.29276655912399296f * scale)));
+		painter.lineTo((x + (0.13603638f * scale)),(y + (-0.483217465877533f * scale)));
+		painter.cubicTo((x + (0.13603638f * scale)),(y + (-0.6555302023887635f * scale)),(x + (0.13830365f * scale)),(y + (-0.6759356662631035f * scale)),(x + (0.14057092f * scale)),(y + (-0.6827374875545502f * scale)));
+		painter.cubicTo((x + (0.15644182f * scale)),(y + (-0.7099447578191758f * scale)),(x + (0.19498548f * scale)),(y + (-0.7099447578191758f * scale)),(x + (0.2108564f * scale)),(y + (-0.6827374875545502f * scale)));
+		painter.cubicTo((x + (0.21312366f * scale)),(y + (-0.6759356662631035f * scale)),(x + (0.21539094f * scale)),(y + (-0.6577974885702134f * scale)),(x + (0.21539094f * scale)),(y + (-0.4990883648395539f * scale)));
+		painter.lineTo((x + (0.21765819f * scale)),(y + (-0.3245083570480347f * scale)));
+		painter.lineTo((x + (0.31288365f * scale)),(y + (-0.36305199861526494f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (-0.4015956103801728f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (-0.5852447479963303f * scale)));
+		painter.cubicTo((x + (0.40810916f * scale)),(y + (-0.7575574919581414f * scale)),(x + (0.40810916f * scale)),(y + (-0.7688938558101654f * scale)),(x + (0.4126437f * scale)),(y + (-0.7779629465192557f * scale)));
+		painter.cubicTo((x + (0.41717824f * scale)),(y + (-0.7870320381596685f * scale)),(x + (0.4217128f * scale)),(y + (-0.7915665844455362f * scale)),(x + (0.4330491f * scale)),(y + (-0.7961011300329119f * scale)));
+		painter.moveTo((x + (0.40810916f * scale)),(y + (0.008780729770660356f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (-0.1748683333396912f * scale)));
+		painter.lineTo((x + (0.31061637f * scale)),(y + (-0.13632469177246098f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (-0.09778105020523076f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (0.08813531398773189f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (0.27178437709808345f * scale)));
+		painter.lineTo((x + (0.22219275f * scale)),(y + (0.26951713562011714f * scale)));
+		painter.cubicTo((x + (0.22672729f * scale)),(y + (0.26724989414215083f * scale)),(x + (0.26980546f * scale)),(y + (0.24911172389984126f * scale)),(x + (0.3196855f * scale)),(y + (0.2309735536575317f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (0.19469715356826778f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (0.008780729770660356f * scale)));
+	}
+	
+	public static void paintFlat(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.036081146f * scale)),(y + (-1.2279010191746056f * scale)));
+		painter.cubicTo((x + (0.066563375f * scale)),(y + (-1.2334432420507073f * scale)),(x + (0.11644338f * scale)),(y + (-1.2279010191746056f * scale)),(x + (0.13584116f * scale)),(y + (-1.2140454626828432f * scale)));
+		painter.cubicTo((x + (0.14138338f * scale)),(y + (-1.2112743496149778f * scale)),(x + (0.14138338f * scale)),(y + (-1.1807921263575554f * scale)),(x + (0.13307005f * scale)),(y + (-0.729100923538208f * scale)));
+		painter.cubicTo((x + (0.12752782f * scale)),(y + (-0.4658453869819641f * scale)),(x + (0.12475671f * scale)),(y + (-0.24969867944717405f * scale)),(x + (0.12475671f * scale)),(y + (-0.24969867944717405f * scale)));
+		painter.cubicTo((x + (0.12475671f * scale)),(y + (-0.24692759990692137f * scale)),(x + (0.13584116f * scale)),(y + (-0.2524698185920715f * scale)),(x + (0.1469256f * scale)),(y + (-0.26078311681747435f * scale)));
+		painter.cubicTo((x + (0.20511894f * scale)),(y + (-0.29957870721817015f * scale)),(x + (0.27716786f * scale)),(y + (-0.32174758195877073f * scale)),(x + (0.34921673f * scale)),(y + (-0.3272898006439209f * scale)));
+		painter.cubicTo((x + (0.42403674f * scale)),(y + (-0.3300609993934631f * scale)),(x + (0.4850012f * scale)),(y + (-0.30789206504821776f * scale)),(x + (0.53765225f * scale)),(y + (-0.2552408981323242f * scale)));
+		painter.cubicTo((x + (0.5903034f * scale)),(y + (-0.2053608703613281f * scale)),(x + (0.6180146f * scale)),(y + (-0.13885424613952635f * scale)),(x + (0.6235568f * scale)),(y + (-0.06680534362792967f * scale)));
+		painter.cubicTo((x + (0.6263279f * scale)),(y + (-0.014154295921325666f * scale)),(x + (0.61524343f * scale)),(y + (0.03295471191406252f * scale)),(x + (0.5903034f * scale)),(y + (0.08283462047576906f * scale)));
+		painter.cubicTo((x + (0.55150783f * scale)),(y + (0.1576546621322632f * scale)),(x + (0.49608564f * scale)),(y + (0.21030582904815676f * scale)),(x + (0.32981896f * scale)),(y + (0.32392134189605715f * scale)));
+		painter.cubicTo((x + (0.2245167f * scale)),(y + (0.3959703636169434f * scale)),(x + (0.19680561f * scale)),(y + (0.41813923835754396f * scale)),(x + (0.16355227f * scale)),(y + (0.4569347095489502f * scale)));
+		painter.cubicTo((x + (0.1469256f * scale)),(y + (0.4735613059997559f * scale)),(x + (0.12752782f * scale)),(y + (0.49295916080474855f * scale)),(x + (0.12198559f * scale)),(y + (0.495730299949646f * scale)));
+		painter.cubicTo((x + (0.0970456f * scale)),(y + (0.5123568964004517f * scale)),(x + (0.06933448f * scale)),(y + (0.5095858764648438f * scale)),(x + (0.04716559f * scale)),(y + (0.4901880216598511f * scale)));
+		painter.cubicTo((x + (0.04162337f * scale)),(y + (0.48187472343444826f * scale)),(x + (0.036081146f * scale)),(y + (0.4735613059997559f * scale)),(x + (0.033310037f * scale)),(y + (0.4652481269836426f * scale)));
+		painter.cubicTo((x + (0.030538924f * scale)),(y + (0.4597058486938477f * scale)),(x + (0.024996702f * scale)),(y + (0.16319682121276857f * scale)),(x + (0.016683366f * scale)),(y + (-0.3051209259033203f * scale)));
+		painter.cubicTo((x + (0.0083700325f * scale)),(y + (-0.7235587048530578f * scale)),(x + (0.00282781f * scale)),(y + (-1.097658793926239f * scale)),(x + (5.669861E-5f * scale)),(y + (-1.1392254564166069f * scale)));
+		painter.lineTo((x + (5.669861E-5f * scale)),(y + (-1.2112743496149778f * scale)));
+		painter.lineTo((x + (0.011141145f * scale)),(y + (-1.2168165738880634f * scale)));
+		painter.cubicTo((x + (0.016683366f * scale)),(y + (-1.2195876850932836f * scale)),(x + (0.027767813f * scale)),(y + (-1.225129907503724f * scale)),(x + (0.036081146f * scale)),(y + (-1.2279010191746056f * scale)));
+		painter.moveTo((x + (0.32981896f * scale)),(y + (-0.21090314865112303f * scale)));
+		painter.cubicTo((x + (0.31042117f * scale)),(y + (-0.22198770523071287f * scale)),(x + (0.27993897f * scale)),(y + (-0.22475872516632078f * scale)),(x + (0.25499895f * scale)),(y + (-0.21644542694091795f * scale)));
+		painter.cubicTo((x + (0.20511894f * scale)),(y + (-0.2025898504257202f * scale)),(x + (0.16355227f * scale)),(y + (-0.15825198173522947f * scale)),(x + (0.1469256f * scale)),(y + (-0.10005865573883055f * scale)));
+		painter.cubicTo((x + (0.14138338f * scale)),(y + (-0.07234762191772459f * scale)),(x + (0.13584116f * scale)),(y + (0.16596796035766603f * scale)),(x + (0.14138338f * scale)),(y + (0.2574147176742554f * scale)));
+		painter.cubicTo((x + (0.14415449f * scale)),(y + (0.2962103080749512f * scale)),(x + (0.14415449f * scale)),(y + (0.33223464012146f * scale)),(x + (0.1469256f * scale)),(y + (0.3405479383468628f * scale)));
+		painter.lineTo((x + (0.14969671f * scale)),(y + (0.35163249492645265f * scale)));
+		painter.lineTo((x + (0.19126338f * scale)),(y + (0.3156080436706543f * scale)));
+		painter.cubicTo((x + (0.24945672f * scale)),(y + (0.2657280158996582f * scale)),(x + (0.30765006f * scale)),(y + (0.2075346899032593f * scale)),(x + (0.33536118f * scale)),(y + (0.1687390995025635f * scale)));
+		painter.cubicTo((x + (0.36307228f * scale)),(y + (0.12994362831115724f * scale)),(x + (0.39078343f * scale)),(y + (0.07729246139526369f * scale)),(x + (0.40186784f * scale)),(y + (0.03849699020385744f * scale)));
+		painter.cubicTo((x + (0.41849452f * scale)),(y + (-0.02523873329162596f * scale)),(x + (0.41018116f * scale)),(y + (-0.09728751659393309f * scale)),(x + (0.38524118f * scale)),(y + (-0.1527098226547241f * scale)));
+		painter.cubicTo((x + (0.37138563f * scale)),(y + (-0.18042085647583006f * scale)),(x + (0.35475895f * scale)),(y + (-0.19981859207153319f * scale)),(x + (0.32981896f * scale)),(y + (-0.21090314865112303f * scale)));
+	}
+	
+	public static void paintNatural(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.038880464f * scale)),(y + (-0.99784582760185f * scale)));
+		painter.cubicTo((x + (0.061049357f * scale)),(y + (-1.0033880504779518f * scale)),(x + (0.11092936f * scale)),(y + (-0.99784582760185f * scale)),(x + (0.13032715f * scale)),(y + (-0.9839902706444263f * scale)));
+		painter.cubicTo((x + (0.13309824f * scale)),(y + (-0.9812191594392061f * scale)),(x + (0.13309824f * scale)),(y + (-0.9396524876356125f * scale)),(x + (0.13032715f * scale)),(y + (-0.7429035902023315f * scale)));
+		painter.cubicTo((x + (0.12755603f * scale)),(y + (-0.6098902225494385f * scale)),(x + (0.12755603f * scale)),(y + (-0.5018168985843658f * scale)),(x + (0.12755603f * scale)),(y + (-0.5018168985843658f * scale)));
+		painter.cubicTo((x + (0.12755603f * scale)),(y + (-0.49904578924179077f * scale)),(x + (0.1968338f * scale)),(y + (-0.5101302564144135f * scale)),(x + (0.28273827f * scale)),(y + (-0.523985743522644f * scale)));
+		painter.cubicTo((x + (0.37141383f * scale)),(y + (-0.5406124293804169f * scale)),(x + (0.4406916f * scale)),(y + (-0.5489257574081421f * scale)),(x + (0.44346273f * scale)),(y + (-0.5489257574081421f * scale)));
+		painter.cubicTo((x + (0.4573183f * scale)),(y + (-0.546154648065567f * scale)),(x + (0.4684027f * scale)),(y + (-0.5350702106952667f * scale)),(x + (0.47671604f * scale)),(y + (-0.521214634180069f * scale)));
+		painter.lineTo((x + (0.48225826f * scale)),(y + (-0.5101302564144135f * scale)));
+		painter.lineTo((x + (0.49057162f * scale)),(y + (0.29072093963623047f * scale)));
+		painter.cubicTo((x + (0.49888495f * scale)),(y + (0.9336187839508057f * scale)),(x + (0.50165606f * scale)),(y + (1.0915722846984863f * scale)),(x + (0.49888495f * scale)),(y + (1.0915722846984863f * scale)));
+		painter.cubicTo((x + (0.49611384f * scale)),(y + (1.0943431854248047f * scale)),(x + (0.48780048f * scale)),(y + (1.0971143245697021f * scale)),(x + (0.47948715f * scale)),(y + (1.0998854637145996f * scale)));
+		painter.cubicTo((x + (0.4573183f * scale)),(y + (1.108198881149292f * scale)),(x + (0.4129805f * scale)),(y + (1.108198881149292f * scale)),(x + (0.3908116f * scale)),(y + (1.0998854637145996f * scale)));
+		painter.cubicTo((x + (0.3824983f * scale)),(y + (1.0971143245697021f * scale)),(x + (0.37418494f * scale)),(y + (1.0943431854248047f * scale)),(x + (0.37141383f * scale)),(y + (1.0915722846984863f * scale)));
+		painter.cubicTo((x + (0.36864272f * scale)),(y + (1.0888011455535889f * scale)),(x + (0.36864272f * scale)),(y + (1.0472345352172852f * scale)),(x + (0.37141383f * scale)),(y + (0.8504854440689087f * scale)));
+		painter.cubicTo((x + (0.37418494f * scale)),(y + (0.7174720764160156f * scale)),(x + (0.37418494f * scale)),(y + (0.6093987226486206f * scale)),(x + (0.37418494f * scale)),(y + (0.6093987226486206f * scale)));
+		painter.cubicTo((x + (0.37418494f * scale)),(y + (0.6066277027130127f * scale)),(x + (0.30490717f * scale)),(y + (0.617712140083313f * scale)),(x + (0.21900271f * scale)),(y + (0.6315675973892212f * scale)));
+		painter.cubicTo((x + (0.13032715f * scale)),(y + (0.6481943130493164f * scale)),(x + (0.061049357f * scale)),(y + (0.6565077304840088f * scale)),(x + (0.058278244f * scale)),(y + (0.6565077304840088f * scale)));
+		painter.cubicTo((x + (0.044422686f * scale)),(y + (0.6537365913391113f * scale)),(x + (0.033338238f * scale)),(y + (0.6426520347595215f * scale)),(x + (0.025024906f * scale)),(y + (0.6287965774536133f * scale)));
+		painter.lineTo((x + (0.019482683f * scale)),(y + (0.6149410009384155f * scale)));
+		painter.lineTo((x + (0.011169349f * scale)),(y + (-0.08060795068740845f * scale)));
+		painter.cubicTo((x + (0.005627127f * scale)),(y + (-0.46302133798599243f * scale)),(x + (0.002856015f * scale)),(y + (-0.8232658207416534f * scale)),(x + (8.490361E-5f * scale)),(y + (-0.8814591467380524f * scale)));
+		painter.lineTo((x + (8.490361E-5f * scale)),(y + (-0.9839902706444263f * scale)));
+		painter.lineTo((x + (0.01394046f * scale)),(y + (-0.9895324930548668f * scale)));
+		painter.cubicTo((x + (0.022253795f * scale)),(y + (-0.9923036047257483f * scale)),(x + (0.033338238f * scale)),(y + (-0.9950747163966298f * scale)),(x + (0.038880464f * scale)),(y + (-0.99784582760185f * scale)));
+		painter.moveTo((x + (0.38526937f * scale)),(y + (-0.22193467617034912f * scale)));
+		painter.cubicTo((x + (0.38526937f * scale)),(y + (-0.25241684913635254f * scale)),(x + (0.38526937f * scale)),(y + (-0.26073020696640015f * scale)),(x + (0.3824983f * scale)),(y + (-0.26073020696640015f * scale)));
+		painter.cubicTo((x + (0.37141383f * scale)),(y + (-0.26073020696640015f * scale)),(x + (0.12478492f * scale)),(y + (-0.21916353702545166f * scale)),(x + (0.12478492f * scale)),(y + (-0.2163923978805542f * scale)));
+		painter.cubicTo((x + (0.12201381f * scale)),(y + (-0.2163923978805542f * scale)),(x + (0.11647158f * scale)),(y + (0.3655409812927246f * scale)),(x + (0.11647158f * scale)),(y + (0.36831212043762207f * scale)));
+		painter.cubicTo((x + (0.1192427f * scale)),(y + (0.36831212043762207f * scale)),(x + (0.37418494f * scale)),(y + (0.3267453908920288f * scale)),(x + (0.37695605f * scale)),(y + (0.32397425174713135f * scale)));
+		painter.cubicTo((x + (0.37695605f * scale)),(y + (0.32397425174713135f * scale)),(x + (0.38526937f * scale)),(y + (-0.09446346759796143f * scale)),(x + (0.38526937f * scale)),(y + (-0.22193467617034912f * scale)));
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGNotePainter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGNotePainter.java
new file mode 100644
index 0000000..d60f119
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGNotePainter.java
@@ -0,0 +1,47 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGNotePainter {
+	
+	public static void paintFooter(TGPainter painter, float x, float y,int dir,float scale){
+		painter.moveTo(( x + (0.64375f * scale) ),( y + ((0.00625f * scale) * dir) ));
+		painter.cubicTo(( x + (0.659375f * scale) ),( y + ((0.0f * scale) * dir) ),( x + (0.69375f * scale) ),( y + ((0.00625f * scale) * dir) ),( x + (0.70625f * scale) ),( y + ((0.0125f * scale) * dir) ));
+		painter.cubicTo(( x + (0.725f * scale) ),( y + ((0.025f * scale) * dir) ),( x + (0.73125f * scale) ),( y + ((0.03125f * scale) * dir) ),( x + (0.75f * scale) ),( y + ((0.065625f * scale) * dir) ));
+		painter.cubicTo(( x + (0.815625f * scale) ),( y + ((0.1875f * scale) * dir) ),( x + (0.86875f * scale) ),( y + ((0.3375f * scale) * dir) ),( x + (0.890625f * scale) ),( y + ((0.4625f * scale) * dir) ));
+		painter.cubicTo(( x + (0.934375f * scale) ),( y + ((0.70937496f * scale) * dir) ),( x + (0.903125f * scale) ),( y + ((0.890625f * scale) * dir) ),( x + (0.778125f * scale) ),( y + ((1.096875f * scale) * dir) ));
+		painter.cubicTo(( x + (0.721875f * scale) ),( y + ((1.19375f * scale) * dir) ),( x + (0.653125f * scale) ),( y + ((1.28125f * scale) * dir) ),( x + (0.5f * scale) ),( y + ((1.453125f * scale) * dir) ));
+		painter.cubicTo(( x + (0.340625f * scale) ),( y + ((1.6375f * scale) * dir) ),( x + (0.290625f * scale) ),( y + ((1.703125f * scale) * dir) ),( x + (0.228125f * scale) ),( y + ((1.790625f * scale) * dir) ));
+		painter.cubicTo(( x + (0.165625f * scale) ),( y + ((1.8875f * scale) * dir) ),( x + (0.121875f * scale) ),( y + ((1.978125f * scale) * dir) ),( x + (0.09375f * scale) ),( y + ((2.06875f * scale) * dir) ));
+		painter.cubicTo(( x + (0.078125f * scale) ),( y + ((2.125f * scale) * dir) ),( x + (0.065625f * scale) ),( y + ((2.209375f * scale) * dir) ),( x + (0.065625f * scale) ),( y + ((2.25625f * scale) * dir) ));
+		painter.lineTo(( x + (0.065625f * scale) ),( y + ((2.271875f * scale) * dir) ));
+		painter.lineTo(( x + (0.034375f * scale) ),( y + ((2.271875f * scale) * dir) ));
+		painter.lineTo(( x + (0.0f * scale) ),( y + ((2.271875f * scale) * dir) ));
+		painter.lineTo(( x + (0.0f * scale) ),( y + ((1.88125f * scale) * dir) ));
+		painter.lineTo(( x + (0.0f * scale) ),( y + ((1.490625f * scale) * dir) ));
+		painter.lineTo(( x + (0.034375f * scale) ),( y + ((1.490625f * scale) * dir) ));
+		painter.lineTo(( x + (0.06875f * scale) ),( y + ((1.490625f * scale) * dir) ));
+		painter.lineTo(( x + (0.15f * scale) ),( y + ((1.434375f * scale) * dir) ));
+		painter.cubicTo(( x + (0.38125f * scale) ),( y + ((1.28125f * scale) * dir) ),( x + (0.521875f * scale) ),( y + ((1.15625f * scale) * dir) ),( x + (0.621875f * scale) ),( y + ((1.021875f * scale) * dir) ));
+		painter.cubicTo(( x + (0.74375f * scale) ),( y + ((0.85625f * scale) * dir) ),( x + (0.778125f * scale) ),( y + ((0.71874994f * scale) * dir) ),( x + (0.74375f * scale) ),( y + ((0.5124999f * scale) * dir) ));
+		painter.cubicTo(( x + (0.721875f * scale) ),( y + ((0.38125f * scale) * dir) ),( x + (0.66875f * scale) ),( y + ((0.246875f * scale) * dir) ),( x + (0.6f * scale) ),( y + ((0.128125f * scale) * dir) ));
+		painter.cubicTo(( x + (0.584375f * scale) ),( y + ((0.10625f * scale) * dir) ),( x + (0.58125f * scale) ),( y + ((0.096875f * scale) * dir) ),( x + (0.58125f * scale) ),( y + ((0.0875f * scale) * dir) ));
+		painter.cubicTo(( x + (0.58125f * scale) ),( y + ((0.05f * scale) * dir) ),( x + (0.60625f * scale) ),( y + ((0.01875f * scale) * dir) ),( x + (0.64375f * scale) ),( y + ((0.00625f * scale) * dir) ));
+	}
+	
+	public static void paintNote(TGPainter painter, float x, float y,float scale){
+		painter.moveTo( x ,( y + (0.66f * scale) ));
+		painter.cubicTo( x,( y + (0.83f * scale) ),( x + (0.166f * scale) ),( y + (1.0f * scale) ),( x + (0.33f * scale) ),( y + (1.0f * scale) ));
+		painter.cubicTo(( x + (0.83f * scale) ),( y + (1.0f * scale) ),( x + (1.33f * scale) ),( y + (0.66f * scale) ),( x + (1.33f * scale) ),( y + (0.33f * scale) ));
+		painter.cubicTo(( x + (1.33f * scale) ),( y + (0.166f * scale) ),( x + (1.16f * scale) ), y ,( x + (1.0f * scale) ), y );
+		painter.cubicTo(( x + (0.5f * scale) ), y , x ,( y + (0.33f * scale) ), x ,( y + (0.66f * scale) ));
+	}
+	
+	public static void paintHarmonic(TGPainter painter, float x, float y,float scale){
+		painter.moveTo(x ,(y + (0.5f * scale)));
+		painter.lineTo((x + (0.665f * scale )) ,(y + (1.0f * scale)));
+		painter.lineTo((x + (1.33f * scale)), (y + (0.5f*scale)));
+		painter.lineTo((x + (0.665f * scale)) ,y);
+		painter.lineTo(x ,(y + (0.5f * scale) ));
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGSilencePainter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGSilencePainter.java
new file mode 100644
index 0000000..17f965d
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGSilencePainter.java
@@ -0,0 +1,254 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGSilencePainter {
+	
+	public static void paintWhole(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
+		painter.lineTo((x + (0.1170311f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (4.3769493f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (8.6602745f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (8.730488f * scale)),(y + (0.046812057f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (0.11703062f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (1.8256791f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (3.5343275f * scale)));
+		painter.lineTo((x + (8.730488f * scale)),(y + (3.6045456f * scale)));
+		painter.lineTo((x + (8.6602745f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (4.3769493f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (0.1170311f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (0.04681015f * scale)),(y + (3.6045456f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (3.5343275f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (1.8256791f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (0.11703062f * scale)));
+		painter.lineTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
+	}
+	
+	public static void paintHalf(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
+		painter.lineTo((x + (0.1170311f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (4.3769493f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (8.6602745f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (8.730488f * scale)),(y + (0.046812057f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (0.11703062f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (1.8256791f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (3.5343275f * scale)));
+		painter.lineTo((x + (8.730488f * scale)),(y + (3.6045456f * scale)));
+		painter.lineTo((x + (8.6602745f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (4.3769493f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (0.1170311f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (0.04681015f * scale)),(y + (3.6045456f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (3.5343275f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (1.8256791f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (0.11703062f * scale)));
+		painter.lineTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
+	}
+	
+	public static void paintQuarter(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (2.1034088f * scale)),(y + (0.047267675f * scale)));
+		painter.cubicTo((x + (2.1979485f * scale)),(y + (0.0f * scale)),(x + (2.2924728f * scale)),(y + (0.0f * scale)),(x + (2.387024f * scale)),(y + (0.023633957f * scale)));
+		painter.cubicTo((x + (2.4579277f * scale)),(y + (0.070901394f * scale)),(x + (6.121151f * scale)),(y + (4.4195156f * scale)),(x + (6.2156906f * scale)),(y + (4.6085863f * scale)));
+		painter.cubicTo((x + (6.38113f * scale)),(y + (4.915825f * scale)),(x + (6.333866f * scale)),(y + (5.2230635f * scale)),(x + (6.0975113f * scale)),(y + (5.601205f * scale)));
+		painter.cubicTo((x + (5.9084587f * scale)),(y + (5.8611765f * scale)),(x + (5.5303154f * scale)),(y + (6.239316f * scale)),(x + (4.821308f * scale)),(y + (6.830161f * scale)));
+		painter.cubicTo((x + (4.4667816f * scale)),(y + (7.1137667f * scale)),(x + (4.1359215f * scale)),(y + (7.4210052f * scale)),(x + (4.065014f * scale)),(y + (7.491905f * scale)));
+		painter.cubicTo((x + (3.3323631f * scale)),(y + (8.271823f * scale)),(x + (3.166935f * scale)),(y + (9.453509f * scale)),(x + (3.5923424f * scale)),(y + (10.351589f * scale)));
+		painter.cubicTo((x + (3.73415f * scale)),(y + (10.65883f * scale)),(x + (3.8050346f * scale)),(y + (10.729736f * scale)),(x + (4.6322327f * scale)),(y + (11.675077f * scale)));
+		painter.cubicTo((x + (6.1447945f * scale)),(y + (13.447618f * scale)),(x + (6.0738907f * scale)),(y + (13.376713f * scale)),(x + (6.0738907f * scale)),(y + (13.518524f * scale)));
+		painter.cubicTo((x + (6.0738907f * scale)),(y + (13.66031f * scale)),(x + (5.9320793f * scale)),(y + (13.802121f * scale)),(x + (5.790291f * scale)),(y + (13.825765f * scale)));
+		painter.cubicTo((x + (5.6721115f * scale)),(y + (13.825765f * scale)),(x + (5.5775757f * scale)),(y + (13.778487f * scale)),(x + (5.4121437f * scale)),(y + (13.6130495f * scale)));
+		painter.cubicTo((x + (4.821308f * scale)),(y + (13.02221f * scale)),(x + (3.4741745f * scale)),(y + (12.5968f * scale)),(x + (2.7415237f * scale)),(y + (12.762231f * scale)));
+		painter.cubicTo((x + (2.387024f * scale)),(y + (12.833136f * scale)),(x + (2.1979485f * scale)),(y + (12.974947f * scale)),(x + (2.0325203f * scale)),(y + (13.305807f * scale)));
+		painter.cubicTo((x + (1.9379692f * scale)),(y + (13.542143f * scale)),(x + (1.8670654f * scale)),(y + (13.825765f * scale)),(x + (1.8434448f * scale)),(y + (14.203887f * scale)));
+		painter.cubicTo((x + (1.8198013f * scale)),(y + (14.7238455f * scale)),(x + (1.9143524f * scale)),(y + (15.267421f * scale)),(x + (2.0797806f * scale)),(y + (15.787354f * scale)));
+		painter.cubicTo((x + (2.1979485f * scale)),(y + (16.118237f * scale)),(x + (2.2688522f * scale)),(y + (16.307312f * scale)),(x + (2.4342842f * scale)),(y + (16.543648f * scale)));
+		painter.cubicTo((x + (2.5760956f * scale)),(y + (16.73272f * scale)),(x + (2.5760956f * scale)),(y + (16.803608f * scale)),(x + (2.4579277f * scale)),(y + (16.874508f * scale)));
+		painter.cubicTo((x + (2.3633804f * scale)),(y + (16.921787f * scale)),(x + (2.3161163f * scale)),(y + (16.898151f * scale)),(x + (2.1034088f * scale)),(y + (16.638172f * scale)));
+		painter.cubicTo((x + (1.2526054f * scale)),(y + (15.551019f * scale)),(x + (0.47267532f * scale)),(y + (13.991195f * scale)),(x + (0.21271515f * scale)),(y + (12.833136f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (12.005961f * scale)),(x + (0.09454727f * scale)),(y + (11.438742f * scale)),(x + (0.4254074f * scale)),(y + (11.202407f * scale)));
+		painter.cubicTo((x + (0.590847f * scale)),(y + (11.107882f * scale)),(x + (0.75629425f * scale)),(y + (11.084239f * scale)),(x + (1.1107941f * scale)),(y + (11.084239f * scale)));
+		painter.cubicTo((x + (1.7961845f * scale)),(y + (11.131502f * scale)),(x + (2.7651672f * scale)),(y + (11.3914795f * scale)),(x + (3.7105103f * scale)),(y + (11.793245f * scale)));
+		painter.lineTo((x + (4.01775f * scale)),(y + (11.935056f * scale)));
+		painter.lineTo((x + (2.7178802f * scale)),(y + (10.398851f * scale)));
+		painter.cubicTo((x + (0.73265076f * scale)),(y + (8.059115f * scale)),(x + (0.66174316f * scale)),(y + (7.9645834f * scale)),(x + (0.590847f * scale)),(y + (7.8227787f * scale)));
+		painter.cubicTo((x + (0.5199585f * scale)),(y + (7.63371f * scale)),(x + (0.496315f * scale)),(y + (7.4446383f * scale)),(x + (0.5672188f * scale)),(y + (7.2319345f * scale)));
+		painter.cubicTo((x + (0.68538666f * scale)),(y + (6.853795f * scale)),(x + (1.0162506f * scale)),(y + (6.4756536f * scale)),(x + (2.0088768f * scale)),(y + (5.648472f * scale)));
+		painter.cubicTo((x + (2.3633804f * scale)),(y + (5.3648667f * scale)),(x + (2.67062f * scale)),(y + (5.0812616f * scale)),(x + (2.7415237f * scale)),(y + (5.033994f * scale)));
+		painter.cubicTo((x + (3.2851028f * scale)),(y + (4.443149f * scale)),(x + (3.5450783f * scale)),(y + (3.6159673f * scale)),(x + (3.450531f * scale)),(y + (2.8360534f * scale)));
+		painter.cubicTo((x + (3.4032707f * scale)),(y + (2.5760818f * scale)),(x + (3.2851028f * scale)),(y + (2.1743064f * scale)),(x + (3.1432915f * scale)),(y + (1.9616027f * scale)));
+		painter.cubicTo((x + (3.0723915f * scale)),(y + (1.8434343f * scale)),(x + (2.7887878f * scale)),(y + (1.4889283f * scale)),(x + (2.505188f * scale)),(y + (1.1344206f * scale)));
+		painter.cubicTo((x + (2.2215881f * scale)),(y + (0.8035486f * scale)),(x + (1.9616127f * scale)),(y + (0.49630952f * scale)),(x + (1.9379692f * scale)),(y + (0.44904137f * scale)));
+		painter.cubicTo((x + (1.8670654f * scale)),(y + (0.30723906f * scale)),(x + (1.9379692f * scale)),(y + (0.11816859f * scale)),(x + (2.1034088f * scale)),(y + (0.047267675f * scale)));
+	}
+	
+	public static void paintEighth(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (1.6779978f * scale)),(y + (0.070901394f * scale)));
+		painter.cubicTo((x + (2.1979408f * scale)),(y + (0.0f * scale)),(x + (2.6469831f * scale)),(y + (0.14180231f * scale)),(x + (3.0014887f * scale)),(y + (0.47267532f * scale)));
+		painter.cubicTo((x + (3.214193f * scale)),(y + (0.7090125f * scale)),(x + (3.3087273f * scale)),(y + (0.89808273f * scale)),(x + (3.450531f * scale)),(y + (1.4652932f * scale)));
+		painter.cubicTo((x + (3.5214317f * scale)),(y + (1.7252648f * scale)),(x + (3.5923345f * scale)),(y + (1.9852359f * scale)),(x + (3.6159685f * scale)),(y + (2.0325048f * scale)));
+		painter.cubicTo((x + (3.7105024f * scale)),(y + (2.2452075f * scale)),(x + (3.8759398f * scale)),(y + (2.3870108f * scale)),(x + (4.0886426f * scale)),(y + (2.4106443f * scale)));
+		painter.cubicTo((x + (4.183178f * scale)),(y + (2.4106443f * scale)),(x + (4.2304454f * scale)),(y + (2.4106443f * scale)),(x + (4.348614f * scale)),(y + (2.3397439f * scale)));
+		painter.cubicTo((x + (4.6558537f * scale)),(y + (2.19794f * scale)),(x + (5.388501f * scale)),(y + (1.3234913f * scale)),(x + (5.6721063f * scale)),(y + (0.7799146f * scale)));
+		painter.cubicTo((x + (5.7430067f * scale)),(y + (0.6144779f * scale)),(x + (5.861175f * scale)),(y + (0.5435767f * scale)),(x + (5.979345f * scale)),(y + (0.5435767f * scale)));
+		painter.cubicTo((x + (6.073879f * scale)),(y + (0.5435767f * scale)),(x + (6.192049f * scale)),(y + (0.6144779f * scale)),(x + (6.239316f * scale)),(y + (0.6853788f * scale)));
+		painter.cubicTo((x + (6.26295f * scale)),(y + (0.7326472f * scale)),(x + (6.026612f * scale)),(y + (1.5598292f * scale)),(x + (4.7740216f * scale)),(y + (5.7430067f * scale)));
+		painter.cubicTo((x + (3.970474f * scale)),(y + (8.484522f * scale)),(x + (3.2850938f * scale)),(y + (10.776992f * scale)),(x + (3.2614603f * scale)),(y + (10.800634f * scale)));
+		painter.cubicTo((x + (3.2614603f * scale)),(y + (10.824278f * scale)),(x + (3.1669261f * scale)),(y + (10.895159f * scale)),(x + (3.0723903f * scale)),(y + (10.918801f * scale)));
+		painter.cubicTo((x + (2.9305882f * scale)),(y + (10.989707f * scale)),(x + (2.9069548f * scale)),(y + (10.989707f * scale)),(x + (2.7178838f * scale)),(y + (10.989707f * scale)));
+		painter.cubicTo((x + (2.528813f * scale)),(y + (10.989707f * scale)),(x + (2.481546f * scale)),(y + (10.989707f * scale)),(x + (2.3397446f * scale)),(y + (10.942445f * scale)));
+		painter.cubicTo((x + (2.2688415f * scale)),(y + (10.895159f * scale)),(x + (2.1743073f * scale)),(y + (10.847896f * scale)),(x + (2.1743073f * scale)),(y + (10.824278f * scale)));
+		painter.cubicTo((x + (2.1270401f * scale)),(y + (10.800634f * scale)),(x + (2.292475f * scale)),(y + (10.375227f * scale)),(x + (3.4977982f * scale)),(y + (6.94833f * scale)));
+		painter.cubicTo((x + (4.254079f * scale)),(y + (4.844924f * scale)),(x + (4.8685584f * scale)),(y + (3.0960243f * scale)),(x + (4.8449225f * scale)),(y + (3.0960243f * scale)));
+		painter.lineTo((x + (4.4431496f * scale)),(y + (3.2141926f * scale)));
+		painter.cubicTo((x + (3.5923345f * scale)),(y + (3.4977977f * scale)),(x + (3.0723903f * scale)),(y + (3.5923336f * scale)),(x + (2.4342787f * scale)),(y + (3.5923336f * scale)));
+		painter.cubicTo((x + (1.914336f * scale)),(y + (3.5923336f * scale)),(x + (1.7725322f * scale)),(y + (3.5687f * scale)),(x + (1.394393f * scale)),(y + (3.3796299f * scale)));
+		painter.cubicTo((x + (0.3545066f * scale)),(y + (2.88332f * scale)),(x + (0.0f * scale)),(y + (1.6779974f * scale)),(x + (0.5908443f * scale)),(y + (0.7799146f * scale)));
+		painter.cubicTo((x + (0.85081583f * scale)),(y + (0.4254074f * scale)),(x + (1.2525895f * scale)),(y + (0.14180231f * scale)),(x + (1.6779978f * scale)),(y + (0.070901394f * scale)));
+	}
+	
+	public static void paintSixteenth(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (3.5214243f * scale)),(y + (0.070901394f * scale)));
+		painter.cubicTo((x + (4.041381f * scale)),(y + (0.0f * scale)),(x + (4.490409f * scale)),(y + (0.14180231f * scale)),(x + (4.8449125f * scale)),(y + (0.4726758f * scale)));
+		painter.cubicTo((x + (5.0576286f * scale)),(y + (0.7090137f * scale)),(x + (5.152153f * scale)),(y + (0.89808273f * scale)),(x + (5.2939644f * scale)),(y + (1.4652946f * scale)));
+		painter.cubicTo((x + (5.36487f * scale)),(y + (1.725266f * scale)),(x + (5.435775f * scale)),(y + (1.9852376f * scale)),(x + (5.4593954f * scale)),(y + (2.032505f * scale)));
+		painter.cubicTo((x + (5.5775614f * scale)),(y + (2.3397436f * scale)),(x + (5.9084463f * scale)),(y + (2.4815469f * scale)),(x + (6.144781f * scale)),(y + (2.363377f * scale)));
+		painter.cubicTo((x + (6.4520226f * scale)),(y + (2.2215748f * scale)),(x + (7.090123f * scale)),(y + (1.394392f * scale)),(x + (7.421006f * scale)),(y + (0.7326474f * scale)));
+		painter.cubicTo((x + (7.4682703f * scale)),(y + (0.6144779f * scale)),(x + (7.6100817f * scale)),(y + (0.54357696f * scale)),(x + (7.704606f * scale)),(y + (0.54357696f * scale)));
+		painter.cubicTo((x + (7.7991533f * scale)),(y + (0.54357696f * scale)),(x + (7.917321f * scale)),(y + (0.6144779f * scale)),(x + (7.9645834f * scale)),(y + (0.6853788f * scale)));
+		painter.cubicTo((x + (7.988206f * scale)),(y + (0.7326474f * scale)),(x + (7.6100817f * scale)),(y + (2.150673f * scale)),(x + (5.861184f * scale)),(y + (8.6972275f * scale)));
+		painter.cubicTo((x + (4.6794825f * scale)),(y + (13.069472f * scale)),(x + (3.710497f * scale)),(y + (16.685432f * scale)),(x + (3.6868773f * scale)),(y + (16.709076f * scale)));
+		painter.cubicTo((x + (3.6632347f * scale)),(y + (16.73272f * scale)),(x + (3.592329f * scale)),(y + (16.803608f * scale)),(x + (3.4978046f * scale)),(y + (16.827246f * scale)));
+		painter.cubicTo((x + (3.3559942f * scale)),(y + (16.89815f * scale)),(x + (3.3323498f * scale)),(y + (16.89815f * scale)),(x + (3.143302f * scale)),(y + (16.89815f * scale)));
+		painter.cubicTo((x + (2.9542284f * scale)),(y + (16.89815f * scale)),(x + (2.9069443f * scale)),(y + (16.89815f * scale)),(x + (2.7651548f * scale)),(y + (16.850887f * scale)));
+		painter.cubicTo((x + (2.69425f * scale)),(y + (16.803608f * scale)),(x + (2.5997238f * scale)),(y + (16.75634f * scale)),(x + (2.5997238f * scale)),(y + (16.73272f * scale)));
+		painter.cubicTo((x + (2.5524387f * scale)),(y + (16.709076f * scale)),(x + (2.69425f * scale)),(y + (16.283669f * scale)),(x + (3.7341404f * scale)),(y + (12.856779f * scale)));
+		painter.cubicTo((x + (4.372241f * scale)),(y + (10.753368f * scale)),(x + (4.8921986f * scale)),(y + (9.028101f * scale)),(x + (4.8921986f * scale)),(y + (9.004459f * scale)));
+		painter.cubicTo((x + (4.868556f * scale)),(y + (9.004459f * scale)),(x + (4.6794825f * scale)),(y + (9.051743f * scale)),(x + (4.46679f * scale)),(y + (9.122626f * scale)));
+		painter.cubicTo((x + (3.6159725f * scale)),(y + (9.406247f * scale)),(x + (3.0723963f * scale)),(y + (9.500772f * scale)),(x + (2.43427f * scale)),(y + (9.500772f * scale)));
+		painter.cubicTo((x + (1.9143381f * scale)),(y + (9.500772f * scale)),(x + (1.7725258f * scale)),(y + (9.477153f * scale)),(x + (1.3943825f * scale)),(y + (9.28808f * scale)));
+		painter.cubicTo((x + (0.3545103f * scale)),(y + (8.791764f * scale)),(x + (0.0f * scale)),(y + (7.586442f * scale)),(x + (0.59084797f * scale)),(y + (6.6883574f * scale)));
+		painter.cubicTo((x + (1.1580448f * scale)),(y + (5.8611765f * scale)),(x + (2.3397465f * scale)),(y + (5.7193727f * scale)),(x + (3.0014915f * scale)),(y + (6.357486f * scale)));
+		painter.cubicTo((x + (3.2378254f * scale)),(y + (6.6174574f * scale)),(x + (3.3323498f * scale)),(y + (6.830161f * scale)),(x + (3.4741611f * scale)),(y + (7.4446383f * scale)));
+		painter.cubicTo((x + (3.5450668f * scale)),(y + (7.799144f * scale)),(x + (3.6395912f * scale)),(y + (8.059116f * scale)),(x + (3.7341404f * scale)),(y + (8.153648f * scale)));
+		painter.cubicTo((x + (3.805046f * scale)),(y + (8.224551f * scale)),(x + (3.9468327f * scale)),(y + (8.295452f * scale)),(x + (4.088643f * scale)),(y + (8.31909f * scale)));
+		painter.cubicTo((x + (4.1831684f * scale)),(y + (8.31909f * scale)),(x + (4.2304544f * scale)),(y + (8.31909f * scale)),(x + (4.3486233f * scale)),(y + (8.248187f * scale)));
+		painter.cubicTo((x + (4.608577f * scale)),(y + (8.130019f * scale)),(x + (5.152153f * scale)),(y + (7.515539f * scale)),(x + (5.4593954f * scale)),(y + (6.995596f * scale)));
+		painter.cubicTo((x + (5.5539417f * scale)),(y + (6.830161f * scale)),(x + (5.601205f * scale)),(y + (6.6883574f * scale)),(x + (5.766636f * scale)),(y + (6.144781f * scale)));
+		painter.cubicTo((x + (6.2865934f * scale)),(y + (4.4904165f * scale)),(x + (6.6883574f * scale)),(y + (3.119658f * scale)),(x + (6.6883574f * scale)),(y + (3.0960245f * scale)));
+		painter.cubicTo((x + (6.6883574f * scale)),(y + (3.0960245f * scale)),(x + (6.5229273f * scale)),(y + (3.1432915f * scale)),(x + (6.3574743f * scale)),(y + (3.2141924f * scale)));
+		painter.cubicTo((x + (5.9557085f * scale)),(y + (3.3323627f * scale)),(x + (5.4121323f * scale)),(y + (3.474164f * scale)),(x + (5.033985f * scale)),(y + (3.5450664f * scale)));
+		painter.cubicTo((x + (4.7740307f * scale)),(y + (3.5923338f * scale)),(x + (4.6322203f * scale)),(y + (3.5923338f * scale)),(x + (4.2777157f * scale)),(y + (3.5923338f * scale)));
+		painter.cubicTo((x + (3.757759f * scale)),(y + (3.5923338f * scale)),(x + (3.6159725f * scale)),(y + (3.5687003f * scale)),(x + (3.2378254f * scale)),(y + (3.3796296f * scale)));
+		painter.cubicTo((x + (2.197935f * scale)),(y + (2.8833203f * scale)),(x + (1.8434324f * scale)),(y + (1.6779971f * scale)),(x + (2.43427f * scale)),(y + (0.77991486f * scale)));
+		painter.cubicTo((x + (2.69425f * scale)),(y + (0.4254074f * scale)),(x + (3.096015f * scale)),(y + (0.14180231f * scale)),(x + (3.5214243f * scale)),(y + (0.070901394f * scale)));
+	}
+	
+	public static void paintThirtySecond(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (4.939474f * scale)),(y + (0.070901155f * scale)));
+		painter.cubicTo((x + (5.459408f * scale)),(y + (0.0f * scale)),(x + (5.9084606f * scale)),(y + (0.14180207f * scale)),(x + (6.2629623f * scale)),(y + (0.4726758f * scale)));
+		painter.cubicTo((x + (6.4756565f * scale)),(y + (0.70901346f * scale)),(x + (6.570204f * scale)),(y + (0.89808273f * scale)),(x + (6.7119904f * scale)),(y + (1.4652941f * scale)));
+		painter.cubicTo((x + (6.782896f * scale)),(y + (1.7252657f * scale)),(x + (6.8538036f * scale)),(y + (1.9852374f * scale)),(x + (6.877445f * scale)),(y + (2.0325048f * scale)));
+		painter.cubicTo((x + (6.9719696f * scale)),(y + (2.245209f * scale)),(x + (7.1373997f * scale)),(y + (2.3870108f * scale)),(x + (7.3501167f * scale)),(y + (2.4106443f * scale)));
+		painter.cubicTo((x + (7.444641f * scale)),(y + (2.4106443f * scale)),(x + (7.4919033f * scale)),(y + (2.4106443f * scale)),(x + (7.562809f * scale)),(y + (2.3633773f * scale)));
+		painter.cubicTo((x + (7.8227882f * scale)),(y + (2.19794f * scale)),(x + (8.34272f * scale)),(y + (1.4889283f * scale)),(x + (8.697241f * scale)),(y + (0.80354834f * scale)));
+		painter.cubicTo((x + (8.768129f * scale)),(y + (0.61447763f * scale)),(x + (8.862679f * scale)),(y + (0.54357696f * scale)),(x + (9.004465f * scale)),(y + (0.54357696f * scale)));
+		painter.cubicTo((x + (9.099014f * scale)),(y + (0.54357696f * scale)),(x + (9.217182f * scale)),(y + (0.61447763f * scale)),(x + (9.264444f * scale)),(y + (0.6853788f * scale)));
+		painter.cubicTo((x + (9.288086f * scale)),(y + (0.7326474f * scale)),(x + (8.815416f * scale)),(y + (2.7887857f * scale)),(x + (6.735634f * scale)),(y + (11.627814f * scale)));
+		painter.cubicTo((x + (5.3175983f * scale)),(y + (17.6308f * scale)),(x + (4.1359196f * scale)),(y + (22.57025f * scale)),(x + (4.1359196f * scale)),(y + (22.593893f * scale)));
+		painter.cubicTo((x + (4.112276f * scale)),(y + (22.641155f * scale)),(x + (4.041378f * scale)),(y + (22.688417f * scale)),(x + (3.946846f * scale)),(y + (22.73568f * scale)));
+		painter.cubicTo((x + (3.781416f * scale)),(y + (22.806585f * scale)),(x + (3.7577744f * scale)),(y + (22.806585f * scale)),(x + (3.5687008f * scale)),(y + (22.806585f * scale)));
+		painter.cubicTo((x + (3.3796272f * scale)),(y + (22.806585f * scale)),(x + (3.332365f * scale)),(y + (22.806585f * scale)),(x + (3.1905785f * scale)),(y + (22.759323f * scale)));
+		painter.cubicTo((x + (3.1196728f * scale)),(y + (22.71206f * scale)),(x + (3.0251236f * scale)),(y + (22.664799f * scale)),(x + (3.0251236f * scale)),(y + (22.641155f * scale)));
+		painter.cubicTo((x + (2.9778614f * scale)),(y + (22.617512f * scale)),(x + (3.0960293f * scale)),(y + (22.192102f * scale)),(x + (3.9941082f * scale)),(y + (18.765215f * scale)));
+		painter.cubicTo((x + (4.5376854f * scale)),(y + (16.661814f * scale)),(x + (4.986738f * scale)),(y + (14.936537f * scale)),(x + (5.0103607f * scale)),(y + (14.912916f * scale)));
+		painter.cubicTo((x + (5.0103607f * scale)),(y + (14.889275f * scale)),(x + (4.9158325f * scale)),(y + (14.889275f * scale)),(x + (4.6322346f * scale)),(y + (15.007441f * scale)));
+		painter.cubicTo((x + (3.7105122f * scale)),(y + (15.314682f * scale)),(x + (2.883337f * scale)),(y + (15.456493f * scale)),(x + (2.2688541f * scale)),(y + (15.43285f * scale)));
+		painter.cubicTo((x + (1.9379692f * scale)),(y + (15.409229f * scale)),(x + (1.6780167f * scale)),(y + (15.3383255f * scale)),(x + (1.3943939f * scale)),(y + (15.196516f * scale)));
+		painter.cubicTo((x + (0.35450363f * scale)),(y + (14.700201f * scale)),(x + (0.0f * scale)),(y + (13.49488f * scale)),(x + (0.59086037f * scale)),(y + (12.5968f * scale)));
+		painter.cubicTo((x + (1.1580582f * scale)),(y + (11.769626f * scale)),(x + (2.3397598f * scale)),(y + (11.627814f * scale)),(x + (3.001505f * scale)),(y + (12.265927f * scale)));
+		painter.cubicTo((x + (3.2378407f * scale)),(y + (12.525894f * scale)),(x + (3.332365f * scale)),(y + (12.738611f * scale)),(x + (3.4741764f * scale)),(y + (13.353088f * scale)));
+		painter.cubicTo((x + (3.5450802f * scale)),(y + (13.707598f * scale)),(x + (3.6396065f * scale)),(y + (13.967552f * scale)),(x + (3.7341537f * scale)),(y + (14.062099f * scale)));
+		painter.cubicTo((x + (3.8286781f * scale)),(y + (14.133005f * scale)),(x + (3.9704895f * scale)),(y + (14.203886f * scale)),(x + (4.112276f * scale)),(y + (14.22753f * scale)));
+		painter.cubicTo((x + (4.2068253f * scale)),(y + (14.22753f * scale)),(x + (4.2540874f * scale)),(y + (14.22753f * scale)),(x + (4.348612f * scale)),(y + (14.156624f * scale)));
+		painter.cubicTo((x + (4.679497f * scale)),(y + (13.991194f * scale)),(x + (5.3648834f * scale)),(y + (13.140376f * scale)),(x + (5.5775776f * scale)),(y + (12.667706f * scale)));
+		painter.cubicTo((x + (5.601219f * scale)),(y + (12.573157f * scale)),(x + (6.546562f * scale)),(y + (9.051743f * scale)),(x + (6.546562f * scale)),(y + (9.004459f * scale)));
+		painter.cubicTo((x + (6.546562f * scale)),(y + (8.980838f * scale)),(x + (6.404751f * scale)),(y + (9.0281f * scale)),(x + (6.2393208f * scale)),(y + (9.099006f * scale)));
+		painter.cubicTo((x + (5.7430058f * scale)),(y + (9.240808f * scale)),(x + (5.2939777f * scale)),(y + (9.382604f * scale)),(x + (4.8685703f * scale)),(y + (9.453508f * scale)));
+		painter.cubicTo((x + (4.561329f * scale)),(y + (9.5007715f * scale)),(x + (4.443161f * scale)),(y + (9.5007715f * scale)),(x + (4.065014f * scale)),(y + (9.5007715f * scale)));
+		painter.cubicTo((x + (3.5450802f * scale)),(y + (9.5007715f * scale)),(x + (3.4032707f * scale)),(y + (9.477151f * scale)),(x + (3.0251236f * scale)),(y + (9.288079f * scale)));
+		painter.cubicTo((x + (1.9852371f * scale)),(y + (8.791764f * scale)),(x + (1.6307297f * scale)),(y + (7.586441f * scale)),(x + (2.2215939f * scale)),(y + (6.6883574f * scale)));
+		painter.cubicTo((x + (2.7887878f * scale)),(y + (5.8611755f * scale)),(x + (3.9704895f * scale)),(y + (5.7193727f * scale)),(x + (4.6322346f * scale)),(y + (6.357485f * scale)));
+		painter.cubicTo((x + (4.8685703f * scale)),(y + (6.6174564f * scale)),(x + (4.9630947f * scale)),(y + (6.830161f * scale)),(x + (5.104904f * scale)),(y + (7.4446383f * scale)));
+		painter.cubicTo((x + (5.175812f * scale)),(y + (7.799144f * scale)),(x + (5.270336f * scale)),(y + (8.059115f * scale)),(x + (5.3648834f * scale)),(y + (8.153648f * scale)));
+		painter.cubicTo((x + (5.50667f * scale)),(y + (8.295452f * scale)),(x + (5.7666492f * scale)),(y + (8.366357f * scale)),(x + (5.9320793f * scale)),(y + (8.271823f * scale)));
+		painter.cubicTo((x + (6.168415f * scale)),(y + (8.177285f * scale)),(x + (6.4756565f * scale)),(y + (7.8227797f * scale)),(x + (6.782896f * scale)),(y + (7.3501034f * scale)));
+		painter.cubicTo((x + (7.113781f * scale)),(y + (6.877428f * scale)),(x + (7.0901375f * scale)),(y + (6.948329f * scale)),(x + (7.610079f * scale)),(y + (4.963092f * scale)));
+		painter.cubicTo((x + (7.8700504f * scale)),(y + (3.970473f * scale)),(x + (8.082766f * scale)),(y + (3.1432917f * scale)),(x + (8.082766f * scale)),(y + (3.1196578f * scale)));
+		painter.cubicTo((x + (8.082766f * scale)),(y + (3.1196578f * scale)),(x + (7.9173126f * scale)),(y + (3.1432917f * scale)),(x + (7.72826f * scale)),(y + (3.2141926f * scale)));
+		painter.cubicTo((x + (7.279211f * scale)),(y + (3.355996f * scale)),(x + (6.830158f * scale)),(y + (3.4741638f * scale)),(x + (6.452036f * scale)),(y + (3.545066f * scale)));
+		painter.cubicTo((x + (6.1920567f * scale)),(y + (3.592334f * scale)),(x + (6.050247f * scale)),(y + (3.592334f * scale)),(x + (5.6957436f * scale)),(y + (3.592334f * scale)));
+		painter.cubicTo((x + (5.175812f * scale)),(y + (3.592334f * scale)),(x + (5.0339985f * scale)),(y + (3.5687f * scale)),(x + (4.6558533f * scale)),(y + (3.3796294f * scale)));
+		painter.cubicTo((x + (3.6159801f * scale)),(y + (2.88332f * scale)),(x + (3.2614594f * scale)),(y + (1.6779974f * scale)),(x + (3.8523216f * scale)),(y + (0.7799146f * scale)));
+		painter.cubicTo((x + (4.112276f * scale)),(y + (0.4254074f * scale)),(x + (4.5140667f * scale)),(y + (0.14180207f * scale)),(x + (4.939474f * scale)),(y + (0.070901155f * scale)));
+	}
+	
+	public static void paintSixtyFourth(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (5.908436f * scale)),(y + (0.07090092f * scale)));
+		painter.cubicTo((x + (6.4283676f * scale)),(y + (0.0f * scale)),(x + (6.8774185f * scale)),(y + (0.14180303f * scale)),(x + (7.231926f * scale)),(y + (0.4726758f * scale)));
+		painter.cubicTo((x + (7.4446335f * scale)),(y + (0.70901346f * scale)),(x + (7.5391655f * scale)),(y + (0.8980839f * scale)),(x + (7.680977f * scale)),(y + (1.4652941f * scale)));
+		painter.cubicTo((x + (7.7991447f * scale)),(y + (1.9616034f * scale)),(x + (7.846405f * scale)),(y + (2.1034052f * scale)),(x + (7.9409294f * scale)),(y + (2.221575f * scale)));
+		painter.cubicTo((x + (8.082741f * scale)),(y + (2.3870103f * scale)),(x + (8.366341f * scale)),(y + (2.4579127f * scale)),(x + (8.531792f * scale)),(y + (2.3633769f * scale)));
+		painter.cubicTo((x + (8.72084f * scale)),(y + (2.2688425f * scale)),(x + (9.028084f * scale)),(y + (1.8434336f * scale)),(x + (9.382591f * scale)),(y + (1.1344209f * scale)));
+		painter.cubicTo((x + (9.642563f * scale)),(y + (0.61447763f * scale)),(x + (9.689827f * scale)),(y + (0.5672102f * scale)),(x + (9.855282f * scale)),(y + (0.5672102f * scale)));
+		painter.cubicTo((x + (9.949806f * scale)),(y + (0.5672102f * scale)),(x + (10.067974f * scale)),(y + (0.6381123f * scale)),(x + (10.115234f * scale)),(y + (0.70901346f * scale)));
+		painter.cubicTo((x + (10.138878f * scale)),(y + (0.75628066f * scale)),(x + (9.571659f * scale)),(y + (3.592333f * scale)),(x + (7.3264503f * scale)),(y + (14.605665f * scale)));
+		painter.cubicTo((x + (5.790268f * scale)),(y + (22.215736f * scale)),(x + (4.514042f * scale)),(y + (28.478699f * scale)),(x + (4.514042f * scale)),(y + (28.502335f * scale)));
+		painter.cubicTo((x + (4.4903984f * scale)),(y + (28.549604f * scale)),(x + (4.4195137f * scale)),(y + (28.596869f * scale)),(x + (4.3249702f * scale)),(y + (28.644129f * scale)));
+		painter.cubicTo((x + (4.1595383f * scale)),(y + (28.715034f * scale)),(x + (4.135895f * scale)),(y + (28.715034f * scale)),(x + (3.9468231f * scale)),(y + (28.715034f * scale)));
+		painter.cubicTo((x + (3.7577515f * scale)),(y + (28.715034f * scale)),(x + (3.7104874f * scale)),(y + (28.715034f * scale)),(x + (3.568699f * scale)),(y + (28.667772f * scale)));
+		painter.cubicTo((x + (3.497795f * scale)),(y + (28.62051f * scale)),(x + (3.403244f * scale)),(y + (28.573223f * scale)),(x + (3.403244f * scale)),(y + (28.549604f * scale)));
+		painter.cubicTo((x + (3.3559837f * scale)),(y + (28.525963f * scale)),(x + (3.450531f * scale)),(y + (28.100554f * scale)),(x + (4.230446f * scale)),(y + (24.65002f * scale)));
+		painter.cubicTo((x + (4.7031136f * scale)),(y + (22.522978f * scale)),(x + (5.0812607f * scale)),(y + (20.797724f * scale)),(x + (5.0812607f * scale)),(y + (20.77408f * scale)));
+		painter.cubicTo((x + (5.0812607f * scale)),(y + (20.77408f * scale)),(x + (4.892189f * scale)),(y + (20.821352f * scale)),(x + (4.679474f * scale)),(y + (20.892248f * scale)));
+		painter.cubicTo((x + (4.1595383f * scale)),(y + (21.081322f * scale)),(x + (3.7341309f * scale)),(y + (21.175869f * scale)),(x + (3.28508f * scale)),(y + (21.270393f * scale)));
+		painter.cubicTo((x + (2.954216f * scale)),(y + (21.317657f * scale)),(x + (2.836052f * scale)),(y + (21.317657f * scale)),(x + (2.4579048f * scale)),(y + (21.317657f * scale)));
+		painter.cubicTo((x + (1.9143257f * scale)),(y + (21.317657f * scale)),(x + (1.7725143f * scale)),(y + (21.294037f * scale)),(x + (1.3943901f * scale)),(y + (21.104965f * scale)));
+		painter.cubicTo((x + (0.35450363f * scale)),(y + (20.60865f * scale)),(x + (0.0f * scale)),(y + (19.40333f * scale)),(x + (0.5908394f * scale)),(y + (18.505249f * scale)));
+		painter.cubicTo((x + (1.1580353f * scale)),(y + (17.678051f * scale)),(x + (2.339737f * scale)),(y + (17.536264f * scale)),(x + (3.00148f * scale)),(y + (18.174364f * scale)));
+		painter.cubicTo((x + (3.2378159f * scale)),(y + (18.434345f * scale)),(x + (3.3323517f * scale)),(y + (18.647038f * scale)),(x + (3.4741516f * scale)),(y + (19.261518f * scale)));
+		painter.cubicTo((x + (3.5450554f * scale)),(y + (19.616022f * scale)),(x + (3.6395798f * scale)),(y + (19.876f * scale)),(x + (3.7341309f * scale)),(y + (19.970549f * scale)));
+		painter.cubicTo((x + (3.8050346f * scale)),(y + (20.04143f * scale)),(x + (3.9468231f * scale)),(y + (20.112335f * scale)),(x + (4.0886345f * scale)),(y + (20.135979f * scale)));
+		painter.cubicTo((x + (4.2540627f * scale)),(y + (20.1596f * scale)),(x + (4.395874f * scale)),(y + (20.065073f * scale)),(x + (4.6558533f * scale)),(y + (19.805096f * scale)));
+		painter.cubicTo((x + (5.010357f * scale)),(y + (19.450592f * scale)),(x + (5.459385f * scale)),(y + (18.812492f * scale)),(x + (5.577553f * scale)),(y + (18.505249f * scale)));
+		painter.cubicTo((x + (5.6011925f * scale)),(y + (18.434345f * scale)),(x + (5.790268f * scale)),(y + (17.60717f * scale)),(x + (6.00296f * scale)),(y + (16.661804f * scale)));
+		painter.cubicTo((x + (6.2156754f * scale)),(y + (15.716461f * scale)),(x + (6.3811073f * scale)),(y + (14.93655f * scale)),(x + (6.404751f * scale)),(y + (14.912907f * scale)));
+		painter.cubicTo((x + (6.404751f * scale)),(y + (14.889288f * scale)),(x + (6.333843f * scale)),(y + (14.889288f * scale)),(x + (6.0266037f * scale)),(y + (15.007456f * scale)));
+		painter.cubicTo((x + (5.1048813f * scale)),(y + (15.314692f * scale)),(x + (4.277706f * scale)),(y + (15.456482f * scale)),(x + (3.6632233f * scale)),(y + (15.432863f * scale)));
+		painter.cubicTo((x + (3.3323517f * scale)),(y + (15.409222f * scale)),(x + (3.0723839f * scale)),(y + (15.338314f * scale)),(x + (2.7887688f * scale)),(y + (15.19651f * scale)));
+		painter.cubicTo((x + (1.7488976f * scale)),(y + (14.700214f * scale)),(x + (1.3943901f * scale)),(y + (13.494894f * scale)),(x + (1.9852333f * scale)),(y + (12.59679f * scale)));
+		painter.cubicTo((x + (2.2688293f * scale)),(y + (12.17139f * scale)),(x + (2.7415009f * scale)),(y + (11.911427f * scale)),(x + (3.28508f * scale)),(y + (11.864165f * scale)));
+		painter.cubicTo((x + (3.7104874f * scale)),(y + (11.840521f * scale)),(x + (4.0886345f * scale)),(y + (11.982332f * scale)),(x + (4.395874f * scale)),(y + (12.289569f * scale)));
+		painter.cubicTo((x + (4.6085663f * scale)),(y + (12.525908f * scale)),(x + (4.7031136f * scale)),(y + (12.714971f * scale)),(x + (4.8449097f * scale)),(y + (13.282178f * scale)));
+		painter.cubicTo((x + (4.915806f * scale)),(y + (13.542156f * scale)),(x + (4.9867134f * scale)),(y + (13.802132f * scale)),(x + (5.010357f * scale)),(y + (13.849398f * scale)));
+		painter.cubicTo((x + (5.128525f * scale)),(y + (14.156637f * scale)),(x + (5.459385f * scale)),(y + (14.298426f * scale)),(x + (5.7193604f * scale)),(y + (14.180258f * scale)));
+		painter.cubicTo((x + (6.00296f * scale)),(y + (14.038469f * scale)),(x + (6.6647034f * scale)),(y + (13.187653f * scale)),(x + (6.8774185f * scale)),(y + (12.691338f * scale)));
+		painter.cubicTo((x + (6.9010506f * scale)),(y + (12.620433f * scale)),(x + (7.1137543f * scale)),(y + (11.745991f * scale)),(x + (7.3264503f * scale)),(y + (10.777008f * scale)));
+		painter.lineTo((x + (7.728237f * scale)),(y + (8.980829f * scale)));
+		painter.lineTo((x + (7.3028297f * scale)),(y + (9.122639f * scale)));
+		painter.cubicTo((x + (6.4283676f * scale)),(y + (9.406237f * scale)),(x + (5.8847923f * scale)),(y + (9.500785f * scale)),(x + (5.246689f * scale)),(y + (9.500785f * scale)));
+		painter.cubicTo((x + (4.726738f * scale)),(y + (9.500785f * scale)),(x + (4.5849457f * scale)),(y + (9.47714f * scale)),(x + (4.2067986f * scale)),(y + (9.288069f * scale)));
+		painter.cubicTo((x + (3.1669083f * scale)),(y + (8.791758f * scale)),(x + (2.8124046f * scale)),(y + (7.586441f * scale)),(x + (3.403244f * scale)),(y + (6.6883574f * scale)));
+		painter.cubicTo((x + (3.6868668f * scale)),(y + (6.26295f * scale)),(x + (4.1595383f * scale)),(y + (6.0029783f * scale)),(x + (4.7031136f * scale)),(y + (5.9557104f * scale)));
+		painter.cubicTo((x + (5.128525f * scale)),(y + (5.9320765f * scale)),(x + (5.506672f * scale)),(y + (6.07388f * scale)),(x + (5.8138924f * scale)),(y + (6.381119f * scale)));
+		painter.cubicTo((x + (6.0266037f * scale)),(y + (6.6174564f * scale)),(x + (6.121128f * scale)),(y + (6.806527f * scale)),(x + (6.2629395f * scale)),(y + (7.3737373f * scale)));
+		painter.cubicTo((x + (6.3811073f * scale)),(y + (7.8700476f * scale)),(x + (6.4283676f * scale)),(y + (8.0118475f * scale)),(x + (6.5229187f * scale)),(y + (8.130014f * scale)));
+		painter.cubicTo((x + (6.688347f * scale)),(y + (8.295459f * scale)),(x + (6.948326f * scale)),(y + (8.366352f * scale)),(x + (7.1137543f * scale)),(y + (8.271822f * scale)));
+		painter.cubicTo((x + (7.397354f * scale)),(y + (8.130014f * scale)),(x + (7.846405f * scale)),(y + (7.539174f * scale)),(x + (8.130005f * scale)),(y + (6.948328f * scale)));
+		painter.cubicTo((x + (8.224552f * scale)),(y + (6.759259f * scale)),(x + (8.271812f * scale)),(y + (6.5701895f * scale)),(x + (8.62632f * scale)),(y + (4.939458f * scale)));
+		painter.lineTo((x + (9.028084f * scale)),(y + (3.1196573f * scale)));
+		painter.cubicTo((x + (9.028084f * scale)),(y + (3.0960238f * scale)),(x + (8.886295f * scale)),(y + (3.1432912f * scale)),(x + (8.72084f * scale)),(y + (3.2141936f * scale)));
+		painter.cubicTo((x + (7.8227615f * scale)),(y + (3.4977987f * scale)),(x + (7.066494f * scale)),(y + (3.6396005f * scale)),(x + (6.4992714f * scale)),(y + (3.6159666f * scale)));
+		painter.cubicTo((x + (6.168415f * scale)),(y + (3.592333f * scale)),(x + (5.908436f * scale)),(y + (3.5214326f * scale)),(x + (5.624836f * scale)),(y + (3.379629f * scale)));
+		painter.cubicTo((x + (4.5849457f * scale)),(y + (2.8833196f * scale)),(x + (4.230446f * scale)),(y + (1.6779983f * scale)),(x + (4.8212814f * scale)),(y + (0.7799144f * scale)));
+		painter.cubicTo((x + (5.0812607f * scale)),(y + (0.42540812f * scale)),(x + (5.4830284f * scale)),(y + (0.14180303f * scale)),(x + (5.908436f * scale)),(y + (0.07090092f * scale)));
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGTempoPainter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGTempoPainter.java
new file mode 100644
index 0000000..e3942d0
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGTempoPainter.java
@@ -0,0 +1,21 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGTempoPainter {
+	
+	public static void paintTempo(TGPainter painter, int x, int y,float scale) {
+		int width = Math.round(scale * 1.33f);
+		int height = Math.round(scale * (1.0f + 2.5f));
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + (width - (scale * 1.33f)),y + ( height - (1.0f * scale) ), scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo(x + width,y);
+		painter.lineTo(x + width,y + (height - (0.66f * scale)) );
+		painter.closePath();
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGTripletFeelPainter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGTripletFeelPainter.java
new file mode 100644
index 0000000..4c86f61
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/graphics/control/painters/TGTripletFeelPainter.java
@@ -0,0 +1,124 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGTripletFeelPainter {
+	
+	public static void paintTripletFeel8(TGPainter painter, int x, int y,float scale) {
+		float topSpacing = (1.0f * scale);
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x, y + (topSpacing + verticalSpacing) , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo( x + Math.round(ovalWidth) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
+		painter.lineTo( x + Math.round(ovalWidth) ,y + topSpacing);
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + (topSpacing + verticalSpacing)  , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo(x + Math.round(ovalWidth + horizontalSpacing) ,y +Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y +topSpacing);
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintFooter(painter,x + Math.round(ovalWidth + horizontalSpacing),y + (topSpacing + (scale * 2.3f)), -1 , scale);
+		painter.closePath();
+		
+		painter.initPath();
+		painter.moveTo( x, y + (1.2f * scale) );
+		painter.cubicTo(x + (horizontalSpacing / 2f), y, x + ( (ovalWidth * 2f) + (horizontalSpacing / 2f)), y, x + ( (ovalWidth * 2f) + horizontalSpacing), y + (1.2f * scale));
+		painter.moveTo( x + ( (ovalWidth * 2f) + horizontalSpacing),y + (1.2f * scale) );
+		painter.closePath();
+	}
+	
+	public static void paintTripletFeelNone8(TGPainter painter, int x, int y,float scale) {
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x, y + verticalSpacing , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo( x + Math.round(ovalWidth) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
+		painter.lineTo( x + Math.round(ovalWidth) ,y);
+		painter.lineTo( x + Math.round(ovalWidth + horizontalSpacing) ,y);
+		painter.lineTo( x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + verticalSpacing , scale );
+		painter.closePath();
+	}
+	
+	public static int paintTripletFeel16(TGPainter painter, int x, int y,float scale) {
+		float topSpacing = (1.0f * scale);
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x,y + (topSpacing + verticalSpacing) , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
+		painter.lineTo(x + Math.round(ovalWidth) ,y + topSpacing);
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + topSpacing);
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
+		painter.moveTo(x + Math.round(ovalWidth + horizontalSpacing - (0.55f * scale) ) ,y + Math.round(topSpacing + (0.5f * scale)));
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(topSpacing + (0.5f * scale)));
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + (topSpacing + verticalSpacing) , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.moveTo( x, y + (1.2f * scale) );
+		painter.cubicTo(x + (horizontalSpacing / 2f), y, x + ( (ovalWidth * 2f) + (horizontalSpacing / 2f)), y, x + ( (ovalWidth * 2f) + horizontalSpacing), y + (1.2f * scale));
+		painter.moveTo( x + ( (ovalWidth * 2f) + horizontalSpacing),y + (1.2f * scale) );
+		painter.closePath();
+		
+		return Math.round( (ovalWidth * 2f) + horizontalSpacing );
+	}
+	
+	public static int paintTripletFeelNone16(TGPainter painter, int x, int y,float scale) {
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x,y + verticalSpacing , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
+		painter.lineTo(x + Math.round(ovalWidth) ,y);
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y);
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
+		painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(0.5f * scale));
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(0.5f * scale));
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + verticalSpacing , scale );
+		painter.closePath();
+		
+		return Math.round( ovalWidth + horizontalSpacing );
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormat.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGFileFormat.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormat.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGFileFormat.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormatException.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGFileFormatException.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormatException.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGFileFormatException.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGFileFormatManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGFileFormatManager.java
new file mode 100644
index 0000000..a8fe6d9
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGFileFormatManager.java
@@ -0,0 +1,185 @@
+package org.herac.tuxguitar.io.base;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.io.base.event.TGFileFormatEventManager;
+import org.herac.tuxguitar.io.tg.TGInputStream;
+import org.herac.tuxguitar.io.tg.TGOutputStream;
+import org.herac.tuxguitar.io.tg.TGStream;
+
+public class TGFileFormatManager {
+	
+	public static final String DEFAULT_EXTENSION = TGStream.TG_FORMAT_EXTENSION;
+	
+	private static TGFileFormatManager instance;
+	
+	private TGFileFormatEventManager eventManager;
+	private TGSongLoader loader;
+	private TGSongWriter writer;
+	private List inputStreams;
+	private List outputStreams;
+	private List exporters;
+	private List importers;
+	
+	private TGFileFormatManager(){
+		this.eventManager = new TGFileFormatEventManager();
+		this.loader = new TGSongLoader();
+		this.writer = new TGSongWriter();
+		this.inputStreams = new ArrayList();
+		this.outputStreams = new ArrayList();
+		this.exporters = new ArrayList();
+		this.importers = new ArrayList();
+		this.addDefaultStreams();
+	}
+	
+	public static TGFileFormatManager instance(){
+		if(instance == null){
+			instance = new TGFileFormatManager();
+		}
+		return instance;
+	}
+	
+	public TGFileFormatEventManager getEventManager() {
+		return this.eventManager;
+	}
+
+	public TGSongLoader getLoader(){
+		return this.loader;
+	}
+	
+	public TGSongWriter getWriter(){
+		return this.writer;
+	}
+	
+	public void addInputStream(TGInputStreamBase stream){
+		if(!this.inputStreams.contains(stream)){
+			this.inputStreams.add(stream);
+			this.eventManager.onInputStreamAdded(stream);
+		}
+	}
+	
+	public void removeInputStream(TGInputStreamBase stream){
+		if( this.inputStreams.contains(stream)){
+			this.inputStreams.remove(stream);
+			this.eventManager.onInputStreamRemoved(stream);
+		}
+	}
+	
+	public int countInputStreams(){
+		return this.inputStreams.size();
+	}
+	
+	public void addOutputStream(TGOutputStreamBase stream){
+		if(!this.outputStreams.contains(stream)){
+			this.outputStreams.add(stream);
+			this.eventManager.onOutputStreamAdded(stream);
+		}
+	}
+	
+	public void removeOutputStream(TGOutputStreamBase stream){
+		if( this.outputStreams.contains(stream)){
+			this.outputStreams.remove(stream);
+			this.eventManager.onOutputStreamRemoved(stream);
+		}
+	}
+	
+	public int countOutputStreams(){
+		return this.outputStreams.size();
+	}
+	
+	public void addImporter(TGRawImporter importer){
+		if(!this.importers.contains(importer)){
+			this.importers.add(importer);
+			this.eventManager.onRawImporterAdded(importer);
+		}
+	}
+	
+	public void removeImporter(TGRawImporter importer){
+		if( this.importers.contains(importer)){
+			this.importers.remove(importer);
+			this.eventManager.onRawImporterRemoved(importer);
+		}
+	}
+	
+	public int countImporters(){
+		return this.importers.size();
+	}
+	
+	public void addExporter(TGRawExporter exporter){
+		if(!this.exporters.contains(exporter)){
+			this.exporters.add(exporter);
+			this.eventManager.onRawExporterAdded(exporter);
+		}
+	}
+	
+	public void removeExporter(TGRawExporter exporter){
+		if( this.exporters.contains(exporter)){
+			this.exporters.remove(exporter);
+			this.eventManager.onRawExporterRemoved(exporter);
+		}
+	}
+	
+	public int countExporters(){
+		return this.exporters.size();
+	}
+	
+	public Iterator getInputStreams(){
+		return this.inputStreams.iterator();
+	}
+	
+	public Iterator getOutputStreams(){
+		return this.outputStreams.iterator();
+	}
+	
+	public Iterator getImporters(){
+		return this.importers.iterator();
+	}
+	
+	public Iterator getExporters(){
+		return this.exporters.iterator();
+	}
+	
+	public List getInputFormats(){
+		List formats = new ArrayList();
+		Iterator it = getInputStreams();
+		while(it.hasNext()){
+			TGInputStreamBase stream = (TGInputStreamBase)it.next();
+			TGFileFormat format = stream.getFileFormat();
+			if(!existsFormat(format, formats)){
+				formats.add(format);
+			}
+		}
+		return formats;
+	}
+	
+	public List getOutputFormats(){
+		List formats = new ArrayList();
+		Iterator it = getOutputStreams();
+		while(it.hasNext()){
+			TGOutputStreamBase stream = (TGOutputStreamBase)it.next();
+			TGFileFormat format = stream.getFileFormat();
+			if(!existsFormat(format, formats)){
+				formats.add(format);
+			}
+		}
+		return formats;
+	}
+	
+	private boolean existsFormat(TGFileFormat format,List formats){
+		Iterator it = formats.iterator();
+		while(it.hasNext()){
+			TGFileFormat comparator = (TGFileFormat)it.next();
+			if(comparator.getName().equals(format.getName()) || comparator.getSupportedFormats().equals(format.getSupportedFormats())){
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	private void addDefaultStreams(){
+		this.addInputStream(new TGInputStream());
+		this.addOutputStream(new TGOutputStream());
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGInputStreamBase.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGInputStreamBase.java
new file mode 100644
index 0000000..73f8bc8
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGInputStreamBase.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.io.base;
+
+import java.io.InputStream;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public interface TGInputStreamBase {
+	
+	public void init(TGFactory factory,InputStream stream);
+	
+	public boolean isSupportedVersion();
+	
+	public TGFileFormat getFileFormat();
+	
+	public TGSong readSong() throws TGFileFormatException;
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGLocalFileExporter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGLocalFileExporter.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/io/base/TGLocalFileExporter.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGLocalFileExporter.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGLocalFileImporter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGLocalFileImporter.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/io/base/TGLocalFileImporter.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGLocalFileImporter.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGOutputStreamBase.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGOutputStreamBase.java
new file mode 100644
index 0000000..285da81
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGOutputStreamBase.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.io.base;
+
+import java.io.OutputStream;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public interface TGOutputStreamBase {
+	
+	public void init(TGFactory factory,OutputStream stream);
+	
+	public boolean isSupportedExtension(String extension);
+	
+	public TGFileFormat getFileFormat();
+	
+	public void writeSong(TGSong song) throws TGFileFormatException;
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGRawExporter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGRawExporter.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/io/base/TGRawExporter.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGRawExporter.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGRawImporter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGRawImporter.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/io/base/TGRawImporter.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGRawImporter.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGSongLoader.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGSongLoader.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/io/base/TGSongLoader.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGSongLoader.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGSongWriter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGSongWriter.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/io/base/TGSongWriter.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/io/base/TGSongWriter.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGFileFormatEventManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGFileFormatEventManager.java
new file mode 100644
index 0000000..d00dce0
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGFileFormatEventManager.java
@@ -0,0 +1,193 @@
+package org.herac.tuxguitar.io.base.event;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.io.base.TGOutputStreamBase;
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.base.TGRawImporter;
+
+public class TGFileFormatEventManager {
+	
+	private List inputStreamAddedListeners;
+	private List inputStreamRemovedListeners;
+	private List outputStreamAddedListeners;
+	private List outputStreamRemovedListeners;	
+	private List rawImporterAddedListeners;
+	private List rawImporterRemovedListeners;
+	private List rawExporterAddedListeners;
+	private List rawExporterRemovedListeners;
+	
+	public TGFileFormatEventManager(){
+		this.inputStreamAddedListeners = new ArrayList();
+		this.inputStreamRemovedListeners = new ArrayList();
+		this.outputStreamAddedListeners = new ArrayList();
+		this.outputStreamRemovedListeners = new ArrayList();
+		this.rawImporterAddedListeners = new ArrayList();
+		this.rawImporterRemovedListeners = new ArrayList();
+		this.rawExporterAddedListeners = new ArrayList();
+		this.rawExporterRemovedListeners = new ArrayList();
+	}
+	
+	public void addInputStreamAddedListener(TGInputStreamAddedListener listener){
+		if(!this.inputStreamAddedListeners.contains(listener)){
+			this.inputStreamAddedListeners.add(listener);
+		}
+	}
+	
+	public void removeInputStreamAddedListener(TGInputStreamAddedListener listener){
+		if( this.inputStreamAddedListeners.contains(listener) ){
+			this.inputStreamAddedListeners.remove(listener);
+		}
+	}
+	
+	public void addInputStreamRemovedListener(TGInputStreamRemovedListener listener){
+		if(!this.inputStreamRemovedListeners.contains(listener)){
+			this.inputStreamRemovedListeners.add(listener);
+		}
+	}
+	
+	public void removeInputStreamRemovedListener(TGInputStreamRemovedListener listener){
+		if( this.inputStreamRemovedListeners.contains(listener) ){
+			this.inputStreamRemovedListeners.remove(listener);
+		}
+	}
+	
+	public void addOutputStreamAddedListener(TGOutputStreamAddedListener listener){
+		if(!this.outputStreamAddedListeners.contains(listener)){
+			this.outputStreamAddedListeners.add(listener);
+		}
+	}
+	
+	public void removeOutputStreamAddedListener(TGOutputStreamAddedListener listener){
+		if( this.outputStreamAddedListeners.contains(listener) ){
+			this.outputStreamAddedListeners.remove(listener);
+		}
+	}
+	
+	public void addOutputStreamRemovedListener(TGOutputStreamRemovedListener listener){
+		if(!this.outputStreamRemovedListeners.contains(listener)){
+			this.outputStreamRemovedListeners.add(listener);
+		}
+	}
+	
+	public void removeOutputStreamRemovedListener(TGOutputStreamRemovedListener listener){
+		if( this.outputStreamRemovedListeners.contains(listener) ){
+			this.outputStreamRemovedListeners.remove(listener);
+		}
+	}
+	
+	public void addRawImporterAddedListener(TGRawImporterAddedListener listener){
+		if(!this.rawImporterAddedListeners.contains(listener)){
+			this.rawImporterAddedListeners.add(listener);
+		}
+	}
+	
+	public void removeRawImporterAddedListener(TGRawImporterAddedListener listener){
+		if( this.rawImporterAddedListeners.contains(listener) ){
+			this.rawImporterAddedListeners.remove(listener);
+		}
+	}
+	
+	public void addRawImporterRemovedListener(TGRawImporterRemovedListener listener){
+		if(!this.rawImporterRemovedListeners.contains(listener)){
+			this.rawImporterRemovedListeners.add(listener);
+		}
+	}
+	
+	public void removeRawImporterRemovedListener(TGRawImporterRemovedListener listener){
+		if( this.rawImporterRemovedListeners.contains(listener) ){
+			this.rawImporterRemovedListeners.remove(listener);
+		}
+	}
+	
+	public void addRawExporterAddedListener(TGRawExporterAddedListener listener){
+		if(!this.rawExporterAddedListeners.contains(listener)){
+			this.rawExporterAddedListeners.add(listener);
+		}
+	}
+	
+	public void removeRawExporterAddedListener(TGRawExporterAddedListener listener){
+		if( this.rawExporterAddedListeners.contains(listener) ){
+			this.rawExporterAddedListeners.remove(listener);
+		}
+	}
+	
+	public void addRawExporterRemovedListener(TGRawExporterRemovedListener listener){
+		if(!this.rawExporterRemovedListeners.contains(listener)){
+			this.rawExporterRemovedListeners.add(listener);
+		}
+	}
+	
+	public void removeRawExporterRemovedListener(TGRawExporterRemovedListener listener){
+		if( this.rawExporterRemovedListeners.contains(listener) ){
+			this.rawExporterRemovedListeners.remove(listener);
+		}
+	}
+	
+	public void onInputStreamAdded(TGInputStreamBase stream) {
+		Iterator it = this.inputStreamAddedListeners.iterator();
+		while( it.hasNext() ){
+			TGInputStreamAddedListener listener = (TGInputStreamAddedListener) it.next();
+			listener.onInputStreamAdded(stream);
+		}
+	}
+	
+	public void onInputStreamRemoved(TGInputStreamBase stream) {
+		Iterator it = this.inputStreamRemovedListeners.iterator();
+		while( it.hasNext() ){
+			TGInputStreamRemovedListener listener = (TGInputStreamRemovedListener) it.next();
+			listener.onInputStreamRemoved(stream);
+		}
+	}
+	
+	public void onOutputStreamAdded(TGOutputStreamBase stream) {
+		Iterator it = this.outputStreamAddedListeners.iterator();
+		while( it.hasNext() ){
+			TGOutputStreamAddedListener listener = (TGOutputStreamAddedListener) it.next();
+			listener.onOutputStreamAdded(stream);
+		}
+	}
+	
+	public void onOutputStreamRemoved(TGOutputStreamBase stream) {
+		Iterator it = this.outputStreamRemovedListeners.iterator();
+		while( it.hasNext() ){
+			TGOutputStreamRemovedListener listener = (TGOutputStreamRemovedListener) it.next();
+			listener.onOutputStreamRemoved(stream);
+		}
+	}
+	
+	public void onRawImporterAdded(TGRawImporter importer) {
+		Iterator it = this.rawImporterAddedListeners.iterator();
+		while( it.hasNext() ){
+			TGRawImporterAddedListener listener = (TGRawImporterAddedListener) it.next();
+			listener.onRawImporterAdded(importer);
+		}
+	}
+	
+	public void onRawImporterRemoved(TGRawImporter importer) {
+		Iterator it = this.rawImporterRemovedListeners.iterator();
+		while( it.hasNext() ){
+			TGRawImporterRemovedListener listener = (TGRawImporterRemovedListener) it.next();
+			listener.onRawImporterRemoved(importer);
+		}
+	}
+	
+	public void onRawExporterAdded(TGRawExporter exporter) {
+		Iterator it = this.rawExporterAddedListeners.iterator();
+		while( it.hasNext() ){
+			TGRawExporterAddedListener listener = (TGRawExporterAddedListener) it.next();
+			listener.onRawExporterAdded(exporter);
+		}
+	}
+	
+	public void onRawExporterRemoved(TGRawExporter exporter) {
+		Iterator it = this.rawExporterRemovedListeners.iterator();
+		while( it.hasNext() ){
+			TGRawExporterRemovedListener listener = (TGRawExporterRemovedListener) it.next();
+			listener.onRawExporterRemoved(exporter);
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGInputStreamAddedListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGInputStreamAddedListener.java
new file mode 100644
index 0000000..8ebed40
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGInputStreamAddedListener.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.io.base.event;
+
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+
+public interface TGInputStreamAddedListener {
+	
+	public void onInputStreamAdded(TGInputStreamBase stream);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGInputStreamRemovedListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGInputStreamRemovedListener.java
new file mode 100644
index 0000000..388e3d2
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGInputStreamRemovedListener.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.io.base.event;
+
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+
+public interface TGInputStreamRemovedListener {
+	
+	public void onInputStreamRemoved(TGInputStreamBase stream);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGOutputStreamAddedListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGOutputStreamAddedListener.java
new file mode 100644
index 0000000..f254715
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGOutputStreamAddedListener.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.io.base.event;
+
+import org.herac.tuxguitar.io.base.TGOutputStreamBase;
+
+public interface TGOutputStreamAddedListener {
+	
+	public void onOutputStreamAdded(TGOutputStreamBase stream);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGOutputStreamRemovedListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGOutputStreamRemovedListener.java
new file mode 100644
index 0000000..6cbe50d
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGOutputStreamRemovedListener.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.io.base.event;
+
+import org.herac.tuxguitar.io.base.TGOutputStreamBase;
+
+public interface TGOutputStreamRemovedListener {
+	
+	public void onOutputStreamRemoved(TGOutputStreamBase stream);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawExporterAddedListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawExporterAddedListener.java
new file mode 100644
index 0000000..32cec4d
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawExporterAddedListener.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.io.base.event;
+
+import org.herac.tuxguitar.io.base.TGRawExporter;
+
+public interface TGRawExporterAddedListener {
+	
+	public void onRawExporterAdded(TGRawExporter exporter);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawExporterRemovedListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawExporterRemovedListener.java
new file mode 100644
index 0000000..d9de32d
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawExporterRemovedListener.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.io.base.event;
+
+import org.herac.tuxguitar.io.base.TGRawExporter;
+
+public interface TGRawExporterRemovedListener {
+	
+	public void onRawExporterRemoved(TGRawExporter exporter);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawImporterAddedListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawImporterAddedListener.java
new file mode 100644
index 0000000..2fe8643
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawImporterAddedListener.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.io.base.event;
+
+import org.herac.tuxguitar.io.base.TGRawImporter;
+
+public interface TGRawImporterAddedListener {
+	
+	public void onRawImporterAdded(TGRawImporter importer);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawImporterRemovedListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawImporterRemovedListener.java
new file mode 100644
index 0000000..532c972
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/base/event/TGRawImporterRemovedListener.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.io.base.event;
+
+import org.herac.tuxguitar.io.base.TGRawImporter;
+
+public interface TGRawImporterRemovedListener {
+	
+	public void onRawImporterRemoved(TGRawImporter importer);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGExporterPlugin.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGExporterPlugin.java
new file mode 100644
index 0000000..6e12109
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGExporterPlugin.java
@@ -0,0 +1,44 @@
+package org.herac.tuxguitar.io.plugin;
+
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGExporterPlugin implements TGPlugin{
+	
+	private boolean loaded;
+	private TGRawExporter exporter;
+	
+	protected abstract TGRawExporter getExporter() throws TGPluginException;
+	
+	public void init() throws TGPluginException {
+		this.exporter = getExporter();
+	}
+	
+	public void close() throws TGPluginException {
+		this.removePlugin();
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded && this.exporter != null){
+			TGFileFormatManager.instance().addExporter(this.exporter);
+			this.loaded = true;
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded && this.exporter != null){
+			TGFileFormatManager.instance().removeExporter(this.exporter);
+			this.loaded = false;
+		}
+	}	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGImporterPlugin.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGImporterPlugin.java
new file mode 100644
index 0000000..dd52063
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGImporterPlugin.java
@@ -0,0 +1,44 @@
+package org.herac.tuxguitar.io.plugin;
+
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.io.base.TGRawImporter;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGImporterPlugin implements TGPlugin{
+	
+	private boolean loaded;
+	private TGRawImporter importer;
+	
+	protected abstract TGRawImporter getImporter() throws TGPluginException;
+	
+	public void init() throws TGPluginException {
+		this.importer = getImporter();
+	}
+	
+	public void close() throws TGPluginException {
+		this.removePlugin();
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded){
+			TGFileFormatManager.instance().addImporter(this.importer);
+			this.loaded = true;
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded){
+			TGFileFormatManager.instance().removeImporter(this.importer);
+			this.loaded = false;
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGInputStreamPlugin.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGInputStreamPlugin.java
new file mode 100644
index 0000000..3bc6927
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGInputStreamPlugin.java
@@ -0,0 +1,44 @@
+package org.herac.tuxguitar.io.plugin;
+
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGInputStreamPlugin implements TGPlugin{
+	
+	private boolean loaded;
+	private TGInputStreamBase stream;
+	
+	protected abstract TGInputStreamBase getInputStream() throws TGPluginException ;
+	
+	public void init() throws TGPluginException {
+		this.stream = getInputStream();
+	}
+	
+	public void close() throws TGPluginException {
+		this.removePlugin();
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded){
+			TGFileFormatManager.instance().addInputStream(this.stream);
+			this.loaded = true;
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded){
+			TGFileFormatManager.instance().removeInputStream(this.stream);
+			this.loaded = false;
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGOutputStreamPlugin.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGOutputStreamPlugin.java
new file mode 100644
index 0000000..37aa2f1
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/plugin/TGOutputStreamPlugin.java
@@ -0,0 +1,44 @@
+package org.herac.tuxguitar.io.plugin;
+
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.io.base.TGOutputStreamBase;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGOutputStreamPlugin implements TGPlugin{
+	
+	private boolean loaded;
+	private TGOutputStreamBase stream;
+	
+	protected abstract TGOutputStreamBase getOutputStream() throws TGPluginException ;
+	
+	public void init() throws TGPluginException {
+		this.stream = getOutputStream();
+	}
+	
+	public void close() throws TGPluginException {
+		this.removePlugin();
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded){
+			TGFileFormatManager.instance().addOutputStream(this.stream);
+			this.loaded = true;
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded){
+			TGFileFormatManager.instance().removeOutputStream(this.stream);
+			this.loaded = false;
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/tg/TGInputStream.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/tg/TGInputStream.java
new file mode 100644
index 0000000..1f0d85d
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/tg/TGInputStream.java
@@ -0,0 +1,774 @@
+/*
+ * Created on 16-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.io.tg;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGInputStream extends TGStream implements TGInputStreamBase{
+	
+	private DataInputStream dataInputStream;
+	private String version;
+	private TGFactory factory;
+	
+	public TGInputStream() {
+		super();
+	}
+	
+	public void init(TGFactory factory,InputStream stream) {
+		this.factory = factory;
+		this.dataInputStream = new DataInputStream(stream);
+		this.version = null;
+	}
+	
+	public TGFileFormat getFileFormat(){
+		return new TGFileFormat("TuxGuitar","*.tg");
+	}
+	
+	public boolean isSupportedVersion(String version){
+		return (version.equals(TG_FORMAT_VERSION));
+	}
+	
+	public boolean isSupportedVersion(){
+		try{
+			readVersion();
+			return isSupportedVersion(this.version);
+		}catch(Throwable throwable){
+			return false;
+		}
+	}
+	
+	public TGSong readSong() throws TGFileFormatException{
+		try {
+			if(this.isSupportedVersion()){
+				TGSong song = this.read();
+				this.dataInputStream.close();
+				return song;
+			}
+			throw new TGFileFormatException("Unsupported Version");
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
+		}
+	}
+	
+	private void readVersion() throws IOException{
+		if(this.version == null){
+			this.version = readUnsignedByteString();
+		}
+	}
+	
+	private TGSong read() throws IOException{
+		TGSong song = this.factory.newSong();
+		
+		//leo el nombre
+		song.setName(readUnsignedByteString());
+		
+		//leo el artista
+		song.setArtist(readUnsignedByteString());
+		
+		//leo el album
+		song.setAlbum(readUnsignedByteString());
+		
+		//leo el autor
+		song.setAuthor(readUnsignedByteString());
+		
+		//leo la fecha
+		song.setDate(readUnsignedByteString());
+		
+		//leo el copyright
+		song.setCopyright(readUnsignedByteString());
+		
+		//leo el creador
+		song.setWriter(readUnsignedByteString());
+		
+		//leo el transcriptor
+		song.setTranscriber(readUnsignedByteString());
+		
+		//leo los comentarios
+		song.setComments(readIntegerString());
+		
+		//leo la cantidad de canales
+		int channelCount = readByte();
+		
+		//leo las canales
+		for(int i = 0;i < channelCount;i++){
+			TGChannel channel = this.factory.newChannel();
+			readChannel(channel);
+			song.addChannel(channel);
+		}
+		
+		//leo la cantidad de measure headers
+		int headerCount = readShort();
+		
+		//leo las pistas
+		TGMeasureHeader lastHeader = null;
+		long headerStart = TGDuration.QUARTER_TIME;
+		for(int i = 0;i < headerCount;i++){
+			TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader);
+			song.addMeasureHeader(header);
+			headerStart += header.getLength();
+			lastHeader = header;
+		}
+		
+		//leo la cantidad de pistas
+		int trackCount = readByte();
+		
+		//leo las pistas
+		for(int i = 0;i < trackCount;i++){
+			song.addTrack(readTrack(i + 1,song));
+		}
+		
+		return song;
+	}
+	
+	private TGTrack readTrack(int number,TGSong song) throws IOException{
+		//header
+		int header = readHeader();
+		
+		TGTrack track = this.factory.newTrack();
+		
+		track.setNumber(number);
+		
+		//leo el nombre
+		track.setName(readUnsignedByteString());
+		
+		//leo el solo
+		track.setSolo((header & TRACK_SOLO) != 0);
+		
+		//leo el mute
+		track.setMute((header & TRACK_MUTE) != 0);
+		
+		//leo el id del canal
+		track.setChannelId(readShort());
+		
+		//leo la cantidad de compases
+		int measureCount = song.countMeasureHeaders();
+		
+		//leo los compases
+		TGMeasure lastMeasure = null;
+		for(int i = 0;i < measureCount;i++){
+			TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure);
+			track.addMeasure(measure);
+			lastMeasure = measure;
+		}
+		
+		//leo la cantidad de cuerdas
+		int stringCount = readByte();
+		
+		//leo las cuerdas
+		for(int i = 0;i < stringCount;i++){
+			track.getStrings().add(readInstrumentString(i + 1));
+		}
+		
+		//leo el offset
+		track.setOffset(TGTrack.MIN_OFFSET + readByte());
+		
+		//leo el color
+		readRGBColor(track.getColor());
+		
+		//leo el lyrics
+		if(((header & TRACK_LYRICS) != 0)){
+			readLyrics(track.getLyrics());
+		}
+		
+		return track;
+	}
+	
+	private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader) throws IOException{
+		int header = readHeader();
+		
+		TGMeasureHeader measureHeader = this.factory.newHeader();
+		measureHeader.setNumber(number);
+		measureHeader.setStart(start);
+		
+		//leo el time signature
+		if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){
+			readTimeSignature(measureHeader.getTimeSignature());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature());
+		}
+		
+		//leo el tempo
+		if(((header & MEASURE_HEADER_TEMPO) != 0)){
+			readTempo(measureHeader.getTempo());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTempo().copy(measureHeader.getTempo());
+		}
+		
+		//leo el comienzo de la repeticion
+		measureHeader.setRepeatOpen((header & MEASURE_HEADER_REPEAT_OPEN) != 0);
+		
+		//leo el numero de repeticiones
+		if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){
+			 measureHeader.setRepeatClose(readShort());
+		}
+		
+		//leo los finales alternativos
+		if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){
+			 measureHeader.setRepeatAlternative(readByte());
+		}
+		
+		//leo el marker
+		if(((header & MEASURE_HEADER_MARKER) != 0)){
+			measureHeader.setMarker(readMarker(number));
+		}
+		
+		measureHeader.setTripletFeel((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE);
+		if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){
+			measureHeader.setTripletFeel(readByte());
+		}
+		
+		return measureHeader;
+	}
+	
+	private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure) throws IOException{
+		int header = readHeader();
+		
+		TGMeasure measure = this.factory.newMeasure(measureHeader);
+		TGBeatData data = new TGBeatData(measure);
+		
+		//leo la los beats
+		readBeats(measure, data);
+		
+		//leo la clave
+		measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef());
+		if(((header & MEASURE_CLEF) != 0)){
+			measure.setClef(readByte());
+		}
+		
+		//leo el key signature
+		measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature());
+		if(((header & MEASURE_KEYSIGNATURE) != 0)){
+			measure.setKeySignature(readByte());
+		}
+		
+		return measure;
+	}
+	
+	private void readChannel(TGChannel channel) throws IOException{
+		//leo el id
+		channel.setChannelId(readShort());
+		
+		//leo el banco de sonidos
+		channel.setBank((short)(readByte() & 0xff));
+		
+		//leo el programa
+		channel.setProgram((short)(readByte() & 0xff));
+		
+		//leo el volumen
+		channel.setVolume((short)(readByte() & 0xff));
+		
+		//leo el balance
+		channel.setBalance((short)(readByte() & 0xff));
+		
+		//leo el chorus
+		channel.setChorus((short)(readByte() & 0xff));
+		
+		//leo el reverb
+		channel.setReverb((short)(readByte() & 0xff));
+		
+		//leo el phaser
+		channel.setPhaser((short)(readByte() & 0xff));
+		
+		//leo el tremolo
+		channel.setTremolo((short)(readByte() & 0xff));
+
+		//leo el nombre
+		channel.setName(readUnsignedByteString());
+		
+		//leo los parametros
+		readChannelParameters(channel);
+	}
+	
+	private void readChannelParameters(TGChannel channel) throws IOException{
+		//leo la cantidad de parametros
+		int count = readShort();
+		
+		for(int i = 0 ; i < count ; i ++ ){
+			readChannelParameter(channel);
+		}
+	}
+	
+	private void readChannelParameter(TGChannel channel) throws IOException{
+		TGChannelParameter parameter = this.factory.newChannelParameter();
+			
+		//leo el key
+		parameter.setKey(readUnsignedByteString());
+		
+		//leo el value
+		parameter.setValue(readIntegerString());
+		
+		channel.addParameter(parameter);
+	}
+	
+	private void readBeats(TGMeasure measure,TGBeatData data) throws IOException{
+		int header = BEAT_HAS_NEXT;
+		while(((header & BEAT_HAS_NEXT) != 0)){
+			header = readHeader();
+			readBeat(header, measure, data);
+		}
+	}
+	
+	private void readBeat(int header, TGMeasure measure,TGBeatData data) throws IOException{
+		TGBeat beat = this.factory.newBeat();
+		
+		beat.setStart(data.getCurrentStart());
+		
+		readVoices(header, beat, data);
+		
+		//leo el stroke
+		if(((header & BEAT_HAS_STROKE) != 0)){
+			readStroke(beat.getStroke());
+		}
+		
+		//leo el acorde
+		if(((header & BEAT_HAS_CHORD) != 0)){
+			readChord(beat);
+		}
+		
+		//leo el texto
+		if(((header & BEAT_HAS_TEXT) != 0)){
+			readText(beat);
+		}
+		
+		measure.addBeat(beat);
+	}
+	
+	private void readVoices(int header, TGBeat beat, TGBeatData data) throws IOException{
+		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
+			int shift = (i * 2 );
+			
+			beat.getVoice(i).setEmpty(true);
+			
+			if(((header & (BEAT_HAS_VOICE << shift)) != 0)){
+				if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){
+					data.getVoice(i).setFlags( readHeader() );
+				}
+				
+				int flags = data.getVoice(i).getFlags();
+				
+				//leo la duracion
+				if(((flags & VOICE_NEXT_DURATION) != 0)){
+					readDuration(data.getVoice(i).getDuration());
+				}
+				
+				//leo las notas
+				if(((flags & VOICE_HAS_NOTES) != 0)){
+					readNotes(beat.getVoice(i), data);
+				}
+				
+				//leo la direccion
+				if(((flags & VOICE_DIRECTION_UP) != 0)){
+					beat.getVoice(i).setDirection( TGVoice.DIRECTION_UP );
+				}
+				else if(((flags & VOICE_DIRECTION_DOWN) != 0)){
+					beat.getVoice(i).setDirection( TGVoice.DIRECTION_DOWN );
+				}
+				data.getVoice(i).getDuration().copy(beat.getVoice(i).getDuration());
+				data.getVoice(i).setStart(data.getVoice(i).getStart() + beat.getVoice(i).getDuration().getTime());
+				
+				beat.getVoice(i).setEmpty(false);
+			}
+		}
+	}
+	
+	private void readNotes(TGVoice voice,TGBeatData data) throws IOException{
+		int header = NOTE_HAS_NEXT;
+		while(((header & NOTE_HAS_NEXT) != 0)){
+			header = readHeader();
+			readNote(header, voice, data);
+		}
+	}
+	
+	private void readNote(int header,TGVoice voice,TGBeatData data) throws IOException{
+		TGNote note = this.factory.newNote();
+		
+		//leo el valor
+		note.setValue(readByte());
+		
+		//leo la cuerda
+		note.setString(readByte());
+		
+		//leo la ligadura
+		note.setTiedNote((header & NOTE_TIED) != 0);
+		
+		//leo el velocity
+		if(((header & NOTE_VELOCITY) != 0)){
+			data.getVoice(voice.getIndex()).setVelocity(readByte());
+		}
+		note.setVelocity(data.getVoice(voice.getIndex()).getVelocity());
+		
+		//leo los efectos
+		if(((header & NOTE_EFFECT) != 0)){
+			readNoteEffect(note.getEffect());
+		}
+		
+		voice.addNote(note);
+	}
+	
+	private void readChord(TGBeat beat) throws IOException{
+		TGChord chord = this.factory.newChord(readByte());
+		
+		//leo el nombre
+		chord.setName( readUnsignedByteString() );
+		
+		//leo el primer fret
+		chord.setFirstFret(readByte());
+		
+		//leo las cuerdas
+		for(int string = 0; string < chord.countStrings(); string ++){
+			chord.addFretValue(string, readByte());
+		}
+		beat.setChord(chord);
+	}
+	
+	private void readText(TGBeat beat) throws IOException{
+		TGText text = this.factory.newText();
+		
+		//leo el texto
+		text.setValue(readUnsignedByteString());
+		
+		beat.setText(text);
+	}
+	
+	private TGString readInstrumentString(int number) throws IOException{
+		TGString string = this.factory.newString();
+		
+		string.setNumber(number);
+		
+		//leo el valor
+		string.setValue(readByte());
+		
+		return string;
+	}
+	
+	private void readTempo(TGTempo tempo) throws IOException{
+		//leo el valor
+		tempo.setValue(readShort());
+	}
+	
+	private void readTimeSignature(TGTimeSignature timeSignature) throws IOException{
+		//leo el numerador
+		timeSignature.setNumerator(readByte());
+		
+		//leo el denominador
+		readDuration(timeSignature.getDenominator());
+	}
+	
+	private void readDuration(TGDuration duration) throws IOException{
+		int header = readHeader();
+		
+		// leo el puntillo
+		duration.setDotted((header & DURATION_DOTTED) != 0);
+		
+		//leo el doble puntillo
+		duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0);
+		
+		//leo el valor
+		duration.setValue(readByte());
+		
+		//leo el tipo de divisiones
+		if(((header & DURATION_NO_TUPLET) != 0)){
+			readDivisionType(duration.getDivision());
+		}
+		else{
+			TGDivisionType.NORMAL.copy(duration.getDivision());
+		}
+	}
+	
+	private void readDivisionType(TGDivisionType divisionType) throws IOException{
+		//leo los enters
+		divisionType.setEnters(readByte());
+		
+		//leo los tiempos
+		divisionType.setTimes(readByte());
+	}
+	
+	private void readStroke(TGStroke stroke) throws IOException{
+		//leo la direccion
+		stroke.setDirection( readByte() );
+		
+		//leo el valor
+		stroke.setValue( readByte() );
+	}
+	
+	private void readNoteEffect(TGNoteEffect effect) throws IOException{
+		int header = readHeader(3);
+		
+		//leo el bend
+		if(((header & EFFECT_BEND) != 0)){
+			effect.setBend(readBendEffect());
+		}
+		
+		//leo el tremolo bar
+		if(((header & EFFECT_TREMOLO_BAR) != 0)){
+			effect.setTremoloBar(readTremoloBarEffect());
+		}
+		
+		//leo el harmonic
+		if(((header & EFFECT_HARMONIC) != 0)){
+			effect.setHarmonic(readHarmonicEffect());
+		}
+		
+		//leo el grace
+		if(((header & EFFECT_GRACE) != 0)){
+			effect.setGrace(readGraceEffect());
+		}
+		
+		//leo el trill
+		if(((header & EFFECT_TRILL) != 0)){
+			effect.setTrill(readTrillEffect());
+		}
+		
+		//leo el tremolo picking
+		if(((header & EFFECT_TREMOLO_PICKING) != 0)){
+			effect.setTremoloPicking(readTremoloPickingEffect());
+		}
+		
+		//vibrato
+		effect.setVibrato(((header & EFFECT_VIBRATO) != 0));
+		
+		//dead note
+		effect.setDeadNote(((header & EFFECT_DEAD) != 0));
+		
+		//slide
+		effect.setSlide(((header & EFFECT_SLIDE) != 0));
+		
+		//hammer-on/pull-off
+		effect.setHammer(((header & EFFECT_HAMMER) != 0));
+		
+		//ghost note
+		effect.setGhostNote(((header & EFFECT_GHOST) != 0));
+		
+		//accentuated note
+		effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0));
+		
+		//heavy accentuated note
+		effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0));
+		
+		//palm mute
+		effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0));
+		
+		//staccato
+		effect.setStaccato(((header & EFFECT_STACCATO) != 0));
+		
+		//tapping
+		effect.setTapping(((header & EFFECT_TAPPING) != 0));
+		
+		//slapping
+		effect.setSlapping(((header & EFFECT_SLAPPING) != 0));
+		
+		//popping
+		effect.setPopping(((header & EFFECT_POPPING) != 0));
+		
+		//fade in
+		effect.setFadeIn(((header & EFFECT_FADE_IN) != 0));
+		
+		//let ring
+		effect.setLetRing(((header & EFFECT_LET_RING) != 0));
+	}
+	
+	private TGEffectBend readBendEffect() throws IOException{
+		TGEffectBend bend = this.factory.newEffectBend();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value = readByte();
+			
+			//agrego el punto
+			bend.addPoint(position,value);
+		}
+		return bend;
+	}
+	
+	private TGEffectTremoloBar readTremoloBarEffect() throws IOException{
+		TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value =  (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH);
+			
+			//agrego el punto
+			tremoloBar.addPoint(position,value);
+		}
+		return tremoloBar;
+	}
+	
+	private TGEffectHarmonic readHarmonicEffect() throws IOException{
+		TGEffectHarmonic effect = this.factory.newEffectHarmonic();
+		
+		//leo el tipo
+		effect.setType(readByte());
+		
+		//leo la data
+		if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){
+			effect.setData(readByte());
+		}
+		return effect;
+	}
+	
+	private TGEffectGrace readGraceEffect() throws IOException{
+		int header = readHeader();
+		
+		TGEffectGrace effect = this.factory.newEffectGrace();
+		
+		effect.setDead((header & GRACE_FLAG_DEAD) != 0) ;
+		
+		effect.setOnBeat((header & GRACE_FLAG_ON_BEAT) != 0) ;
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.setDuration(readByte());
+		
+		//leo el velocity
+		effect.setDynamic(readByte());
+		
+		//leo la transicion
+		effect.setTransition(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTremoloPicking readTremoloPickingEffect() throws IOException{
+		TGEffectTremoloPicking effect = this.factory.newEffectTremoloPicking();
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTrill readTrillEffect() throws IOException{
+		TGEffectTrill effect = this.factory.newEffectTrill();
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGMarker readMarker(int measure) throws IOException{
+		TGMarker marker = this.factory.newMarker();
+		
+		marker.setMeasure(measure);
+		
+		//leo el titulo
+		marker.setTitle(readUnsignedByteString());
+		
+		//leo el color
+		readRGBColor(marker.getColor());
+		
+		return marker;
+	}
+	
+	private void readRGBColor(TGColor color) throws IOException{
+		//leo el RGB
+		color.setR((readByte() & 0xff));
+		color.setG((readByte() & 0xff));
+		color.setB((readByte() & 0xff));
+	}
+	
+	private void readLyrics(TGLyric lyrics) throws IOException{
+		//leo el compas de comienzo
+		lyrics.setFrom(readShort());
+		
+		//leo el texto
+		lyrics.setLyrics(readIntegerString());
+	}
+	
+	private byte readByte() throws IOException{
+		return (byte)this.dataInputStream.read();
+	}
+	
+	private int readHeader() throws IOException{
+		return this.dataInputStream.read();
+	}
+	
+	private int readHeader(int bCount) throws IOException{
+		int header = 0;
+		for(int i = bCount; i > 0; i --){
+			header += ( readHeader() << ( (8 * i) - 8 ) );
+		}
+		return header;
+	}
+	
+	private short readShort() throws IOException{
+		return this.dataInputStream.readShort();
+	}
+	
+	private String readUnsignedByteString() throws IOException{
+		return readString( (this.dataInputStream.read() & 0xFF ));
+	}
+	
+	private String readIntegerString() throws IOException{
+		return readString(this.dataInputStream.readInt());
+	}
+	
+	private String readString(int length) throws IOException{
+		char[] chars = new char[length];
+		for(int i = 0;i < chars.length; i++){
+			chars[i] = this.dataInputStream.readChar();
+		}
+		return String.copyValueOf(chars);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/tg/TGOutputStream.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/tg/TGOutputStream.java
new file mode 100644
index 0000000..57a89d0
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/tg/TGOutputStream.java
@@ -0,0 +1,725 @@
+/*
+ * Created on 16-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.io.tg;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Iterator;
+
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGOutputStreamBase;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGOutputStream extends TGStream implements TGOutputStreamBase{
+	
+	private DataOutputStream dataOutputStream;
+	
+	public boolean isSupportedExtension(String extension) {
+		return (extension.toLowerCase().equals(TG_FORMAT_EXTENSION));
+	}
+	
+	public void init(TGFactory factory,OutputStream stream) {
+		this.dataOutputStream = new DataOutputStream(stream);
+	}
+	
+	public TGFileFormat getFileFormat(){
+		return new TGFileFormat("TuxGuitar","*.tg");
+	}
+	
+	public void writeSong(TGSong song) throws TGFileFormatException{
+		try{
+			this.writeVersion();
+			this.write(song);
+			this.dataOutputStream.flush();
+			this.dataOutputStream.close();
+		}catch( Throwable throwable ){
+			throw new TGFileFormatException(throwable);
+		}
+	}
+	
+	private void writeVersion() throws IOException{
+		writeUnsignedByteString(TG_FORMAT_VERSION);
+	}
+	
+	private void write(TGSong song) throws IOException{
+		//escribo el nombre
+		writeUnsignedByteString(song.getName());
+		
+		//escribo el artista
+		writeUnsignedByteString(song.getArtist());
+		
+		//escribo el album
+		writeUnsignedByteString(song.getAlbum());
+		
+		//escribo el autor
+		writeUnsignedByteString(song.getAuthor());
+		
+		//escribo la fecha
+		writeUnsignedByteString(song.getDate());
+		
+		//escribo el copyright
+		writeUnsignedByteString(song.getCopyright());
+		
+		//escribo el creador
+		writeUnsignedByteString(song.getWriter());
+		
+		//escribo el transcriptor
+		writeUnsignedByteString(song.getTranscriber());
+		
+		//escribo los comentarios
+		writeIntegerString(song.getComments());
+		
+		//escribo la cantidad de canales
+		writeByte(song.countChannels());
+		
+		//escribo las canales
+		for(int i = 0;i < song.countChannels();i++){
+			writeChannel(song.getChannel(i));
+		}
+		
+		//escribo la cantidad de measure headers 
+		writeShort((short)song.countMeasureHeaders());
+		
+		//escribo las pistas
+		TGMeasureHeader lastHeader = null;
+		Iterator headers = song.getMeasureHeaders();
+		while(headers.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)headers.next();
+			writeMeasureHeader(header,lastHeader);
+			lastHeader = header;
+		}
+		
+		//escribo la cantidad de pistas
+		writeByte(song.countTracks());
+		
+		//escribo las pistas
+		for(int i = 0;i < song.countTracks();i++){
+			writeTrack(song.getTrack(i));
+		}
+	}
+	
+	private void writeTrack(TGTrack track) throws IOException{
+		//header
+		int header = 0;
+		if (track.isSolo()) {
+			header |= TRACK_SOLO;
+		}
+		if (track.isMute()) {
+			header |= TRACK_MUTE;
+		}
+		if(!track.getLyrics().isEmpty()){
+			header |= TRACK_LYRICS;
+		}
+		writeHeader(header);
+		
+		//escribo el nombre
+		writeUnsignedByteString(track.getName());
+		
+		//escribo el id del canal
+		writeShort((short)track.getChannelId());
+		
+		//escribo los compases
+		TGMeasure lastMeasure = null;
+		Iterator measures  = track.getMeasures();
+		while(measures.hasNext()){
+			TGMeasure measure = (TGMeasure)measures.next();
+			writeMeasure(measure,lastMeasure);
+			lastMeasure = measure;
+		}
+		
+		//escribo la cantidad de cuerdas 
+		writeByte(track.getStrings().size());
+		
+		//escribo las cuerdas
+		Iterator stringIt  = track.getStrings().iterator();
+		while(stringIt.hasNext()){
+			TGString string = (TGString)stringIt.next();
+			writeInstrumentString(string);
+		}
+		
+		//escribo el offset
+		writeByte(track.getOffset() - TGTrack.MIN_OFFSET);
+		
+		//escribo el color
+		writeRGBColor(track.getColor());
+		
+		//escribo el lyrics
+		if(((header & TRACK_LYRICS) != 0)){
+			writeLyrics(track.getLyrics());
+		}
+	}
+	
+	private void writeMeasureHeader(TGMeasureHeader measureheader,TGMeasureHeader lastMeasureHeader) throws IOException{
+		int header = 0;
+		if(lastMeasureHeader == null){
+			header |= MEASURE_HEADER_TIMESIGNATURE;
+			header |= MEASURE_HEADER_TEMPO;
+			if(measureheader.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE){
+				header |= MEASURE_HEADER_TRIPLET_FEEL;
+			}
+		}else{
+			//Time Signature
+			int numerator = measureheader.getTimeSignature().getNumerator();
+			int value = measureheader.getTimeSignature().getDenominator().getValue();
+			int prevNumerator = lastMeasureHeader.getTimeSignature().getNumerator();
+			int prevValue = lastMeasureHeader.getTimeSignature().getDenominator().getValue();
+			if(numerator != prevNumerator || value != prevValue){
+				header |= MEASURE_HEADER_TIMESIGNATURE;
+			}
+			//Tempo
+			if(measureheader.getTempo().getValue() != lastMeasureHeader.getTempo().getValue()){
+				header |= MEASURE_HEADER_TEMPO;
+			}
+			//Triplet Feel
+			if(measureheader.getTripletFeel() != lastMeasureHeader.getTripletFeel()){
+				header |= MEASURE_HEADER_TRIPLET_FEEL;
+			}
+		}
+		header = (measureheader.isRepeatOpen())?header |= MEASURE_HEADER_REPEAT_OPEN:header;
+		header = (measureheader.getRepeatClose() > 0)?header |= MEASURE_HEADER_REPEAT_CLOSE:header;
+		header = (measureheader.getRepeatAlternative() > 0)?header |= MEASURE_HEADER_REPEAT_ALTERNATIVE:header;
+		header = (measureheader.hasMarker())?header |= MEASURE_HEADER_MARKER:header;
+		
+		writeHeader(header);
+		
+		//escribo el timeSignature
+		if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){
+			writeTimeSignature(measureheader.getTimeSignature());
+		}
+		
+		//escribo el tempo
+		if(((header & MEASURE_HEADER_TEMPO) != 0)){
+			writeTempo(measureheader.getTempo());
+		}
+		
+		//escribo el numero de repeticiones
+		if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){
+			writeShort((short)measureheader.getRepeatClose());
+		}
+		
+		//escribo los finales alternativos
+		if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){
+			writeByte(measureheader.getRepeatAlternative());
+		}
+		
+		//escribo el marker
+		if(((header & MEASURE_HEADER_MARKER) != 0)){
+			writeMarker(measureheader.getMarker());
+		}
+		
+		//escribo el triplet feel
+		if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){
+			writeByte(measureheader.getTripletFeel());
+		}
+	}
+	
+	private void writeMeasure(TGMeasure measure,TGMeasure lastMeasure) throws IOException{
+		int header = 0;
+		if(lastMeasure == null){
+			header |= MEASURE_CLEF;
+			header |= MEASURE_KEYSIGNATURE;
+		}else{
+			//Clef
+			if(measure.getClef() != lastMeasure.getClef()){
+				header |= MEASURE_CLEF;
+			}
+			//KeySignature
+			if(measure.getKeySignature() != lastMeasure.getKeySignature()){
+				header |= MEASURE_KEYSIGNATURE;
+			}
+		}
+		//escribo la cabecera
+		writeHeader(header);
+		
+		//escribo los beats
+		TGBeatData data = new TGBeatData(measure);
+		writeBeats(measure, data);
+		
+		//escribo la clave
+		if(((header & MEASURE_CLEF) != 0)){
+			writeByte(measure.getClef());
+		}
+		
+		//escribo el key signature
+		if(((header & MEASURE_KEYSIGNATURE) != 0)){
+			writeByte(measure.getKeySignature());
+		}
+	}
+	
+	private void writeChannel(TGChannel channel) throws IOException{
+		//escribo el id
+		writeShort((short)channel.getChannelId());
+		
+		//escribo el banco de sonidos
+		writeByte(channel.getBank());
+		
+		//escribo el programa
+		writeByte(channel.getProgram());
+		
+		//escribo el volumen
+		writeByte(channel.getVolume());
+		
+		//escribo el balance
+		writeByte(channel.getBalance());
+		
+		//escribo el chorus
+		writeByte(channel.getChorus());
+		
+		//escribo el reverb
+		writeByte(channel.getReverb());
+		
+		//escribo el phaser
+		writeByte(channel.getPhaser());
+		
+		//escribo el tremolo
+		writeByte(channel.getTremolo());
+		
+		//escribo el nombre
+		writeUnsignedByteString(channel.getName());
+		
+		//escribo los parametros
+		writeChannelParameters(channel);
+	}
+	
+	private void writeChannelParameters(TGChannel channel) throws IOException{
+		//escribo la cantidad de parametros
+		writeShort((short)channel.countParameters());
+		
+		Iterator iterator = channel.getParameters();
+		while( iterator.hasNext() ){
+			writeChannelParameter( (TGChannelParameter)iterator.next() );
+		}
+	}
+	
+	private void writeChannelParameter(TGChannelParameter parameter) throws IOException{
+		//escribo el key
+		writeUnsignedByteString(parameter.getKey());
+		
+		//escribo el value
+		writeIntegerString(parameter.getValue());
+	}
+	
+	private void writeBeats(TGMeasure measure,TGBeatData data) throws IOException{
+		int count = measure.countBeats();
+		for(int i = 0; i < count; i ++){
+			TGBeat beat = measure.getBeat(i);
+			writeBeat(beat,data, (i + 1 < count ));
+		}
+	}
+	
+	private void writeBeat(TGBeat beat,TGBeatData data, boolean hasNext) throws IOException{
+		int header = hasNext ? BEAT_HAS_NEXT : 0;
+		
+		//Berifico si hay cambios en las voces
+		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
+			int shift = (i * 2 );
+			if(!beat.getVoice(i).isEmpty()){
+				header |= ( BEAT_HAS_VOICE << shift ); 
+				
+				int flags = ( beat.getVoice(i).isRestVoice() ? 0 : VOICE_HAS_NOTES );
+				if(!beat.getVoice(i).getDuration().isEqual(data.getVoice(i).getDuration())){
+					flags |= VOICE_NEXT_DURATION;
+					data.getVoice(i).setDuration(beat.getVoice(i).getDuration());
+				}
+				if(beat.getVoice(i).getDirection() != TGVoice.DIRECTION_NONE ){
+					if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_UP ){
+						flags |= VOICE_DIRECTION_UP;
+					}
+					else if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_DOWN ){
+						flags |= VOICE_DIRECTION_DOWN;
+					}
+				}
+				if( data.getVoice(i).getFlags() != flags ){
+					header |= ( BEAT_HAS_VOICE_CHANGES << shift ); 
+					data.getVoice(i).setFlags( flags );
+				}
+			}
+			
+		}
+		//Berifico si tiene stroke
+		if(beat.getStroke().getDirection() != TGStroke.STROKE_NONE){
+			header |= BEAT_HAS_STROKE;
+		}
+		//Berifico si tiene acorde
+		if(beat.getChord() != null){
+			header |= BEAT_HAS_CHORD;
+		}
+		//Berifico si tiene texto
+		if(beat.getText() != null){
+			header |= BEAT_HAS_TEXT;
+		}
+		
+		// escribo la cabecera
+		writeHeader(header);
+		
+		//escribo las voces
+		writeVoices(header, beat, data);
+		
+		//escribo el stroke
+		if(((header & BEAT_HAS_STROKE) != 0)){
+			writeStroke(beat.getStroke());
+		}
+		
+		//escribo el acorde
+		if(((header & BEAT_HAS_CHORD) != 0)){
+			writeChord(beat.getChord());
+		}
+		
+		//escribo el texto
+		if(((header & BEAT_HAS_TEXT) != 0)){
+			writeText(beat.getText());
+		}
+	}
+	
+	private void writeVoices(int header, TGBeat beat,TGBeatData data) throws IOException{
+		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
+			int shift = (i * 2 );
+			if((( header & (BEAT_HAS_VOICE << shift)) != 0)){
+				
+				if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){
+					writeHeader( data.getVoice(i).getFlags() );
+				}
+				
+				//escribo la duracion
+				if((( data.getVoice(i).getFlags() & VOICE_NEXT_DURATION) != 0)){
+					writeDuration(beat.getVoice(i).getDuration());
+				}
+				
+				//escribo las notas
+				if((( data.getVoice(i).getFlags() & VOICE_HAS_NOTES) != 0)){
+					writeNotes(beat.getVoice(i), data);
+				}
+			}
+		}
+	}
+	
+	private void writeNotes(TGVoice voice,TGBeatData data) throws IOException{
+		for( int i = 0 ; i < voice.countNotes() ; i ++){
+			TGNote note = voice.getNote(i);
+			
+			int header = ( i + 1 < voice.countNotes() ? NOTE_HAS_NEXT : 0 );
+			header = (note.isTiedNote())?header |= NOTE_TIED:header;
+			if(note.getVelocity() != data.getVoice(voice.getIndex()).getVelocity()){
+				data.getVoice(voice.getIndex()).setVelocity(note.getVelocity());
+				header |= NOTE_VELOCITY;
+			}
+			header = (note.getEffect().hasAnyEffect())?header |= NOTE_EFFECT:header;
+			
+			writeHeader(header);
+			
+			writeNote(header,note);
+		}
+	}
+	
+	private void writeNote(int header,TGNote note) throws IOException{
+		//escribo el valor
+		writeByte(note.getValue());
+		
+		//escribo la cuerda
+		writeByte(note.getString());
+		
+		//escribo el velocity
+		if(((header & NOTE_VELOCITY) != 0)){
+			writeByte(note.getVelocity());
+		}
+		
+		//escribo los efectos
+		if(((header & NOTE_EFFECT) != 0)){
+			writeNoteEffect(note.getEffect());
+		}
+	}
+	
+	private void writeStroke(TGStroke stroke) throws IOException{
+		//escribo la direccion
+		writeByte(stroke.getDirection());
+		
+		//escribo el valor
+		writeByte(stroke.getValue());
+	}
+	
+	private void writeChord(TGChord chord) throws IOException{
+		//escribo la cantidad de cuerdas
+		writeByte(chord.countStrings());
+		
+		//escribo el nombre
+		writeUnsignedByteString(chord.getName());
+		
+		//escribo el primer fret
+		writeByte(chord.getFirstFret());
+		
+		//escribo el valor de cada cuerda
+		for(int string = 0; string < chord.countStrings(); string ++){
+			writeByte(chord.getFretValue(string));
+		}
+	}
+	
+	private void writeText(TGText text) throws IOException{
+		//escribo el texto
+		writeUnsignedByteString(text.getValue());
+	}
+	
+	private void writeInstrumentString(TGString string) throws IOException{
+		//escribo el valor
+		writeByte(string.getValue());
+	}
+	
+	private void writeTempo(TGTempo tempo) throws IOException{
+		//escribo el valor
+		writeShort((short)tempo.getValue());
+	}
+	
+	private void writeTimeSignature(TGTimeSignature timeSignature) throws IOException{
+		//escribo el numerador
+		writeByte(timeSignature.getNumerator());
+		
+		//escribo el denominador
+		writeDuration(timeSignature.getDenominator());
+	}
+	
+	private void writeDuration(TGDuration duration) throws IOException{
+		int header = 0;
+		header = (duration.isDotted())?header |= DURATION_DOTTED:header;
+		header = (duration.isDoubleDotted())?header |= DURATION_DOUBLE_DOTTED:header;
+		header = (!duration.getDivision().isEqual(TGDivisionType.NORMAL))?header |= DURATION_NO_TUPLET:header;
+		writeHeader(header);
+		
+		//escribo el valor
+		writeByte(duration.getValue());
+		
+		//escribo el tipo de divisiones
+		if(((header & DURATION_NO_TUPLET) != 0)){
+			writeDivisionType(duration.getDivision());
+		}
+	}
+	
+	private void writeDivisionType(TGDivisionType divisionType) throws IOException{
+		//escribo los enters
+		writeByte(divisionType.getEnters());
+		
+		//escribo los tiempos
+		writeByte(divisionType.getTimes());
+	}
+	
+	private void writeNoteEffect(TGNoteEffect effect) throws IOException{
+		int header = 0;
+		
+		header = (effect.isBend())?header |= EFFECT_BEND:header;
+		header = (effect.isTremoloBar())?header |= EFFECT_TREMOLO_BAR:header;
+		header = (effect.isHarmonic())?header |= EFFECT_HARMONIC:header;
+		header = (effect.isGrace())?header |= EFFECT_GRACE:header;
+		header = (effect.isTrill())?header |= EFFECT_TRILL:header;
+		header = (effect.isTremoloPicking())?header |= EFFECT_TREMOLO_PICKING:header;
+		header = (effect.isVibrato())?header |= EFFECT_VIBRATO:header;
+		header = (effect.isDeadNote())?header |= EFFECT_DEAD:header;
+		header = (effect.isSlide())?header |= EFFECT_SLIDE:header;
+		header = (effect.isHammer())?header |= EFFECT_HAMMER:header;
+		header = (effect.isGhostNote())?header |= EFFECT_GHOST:header;
+		header = (effect.isAccentuatedNote())?header |= EFFECT_ACCENTUATED:header;
+		header = (effect.isHeavyAccentuatedNote())?header |= EFFECT_HEAVY_ACCENTUATED:header;
+		header = (effect.isPalmMute())?header |= EFFECT_PALM_MUTE:header;
+		header = (effect.isStaccato())?header |= EFFECT_STACCATO:header;
+		header = (effect.isTapping())?header |= EFFECT_TAPPING:header;
+		header = (effect.isSlapping())?header |= EFFECT_SLAPPING:header;
+		header = (effect.isPopping())?header |= EFFECT_POPPING:header;
+		header = (effect.isFadeIn())?header |= EFFECT_FADE_IN:header;
+		header = (effect.isLetRing())?header |= EFFECT_LET_RING:header;
+		
+		writeHeader(header,3);
+		
+		//escribo el bend
+		if(((header & EFFECT_BEND) != 0)){
+			writeBendEffect(effect.getBend());
+		}
+		
+		//leo el tremolo bar
+		if(((header & EFFECT_TREMOLO_BAR) != 0)){
+			writeTremoloBarEffect(effect.getTremoloBar());
+		}
+		
+		//leo el harmonic
+		if(((header & EFFECT_HARMONIC) != 0)){
+			writeHarmonicEffect(effect.getHarmonic());
+		}
+		
+		//leo el grace
+		if(((header & EFFECT_GRACE) != 0)){
+			writeGraceEffect(effect.getGrace());
+		}
+		
+		//leo el trill
+		if(((header & EFFECT_TRILL) != 0)){
+			writeTrillEffect(effect.getTrill());
+		}
+		
+		//leo el tremolo picking
+		if(((header & EFFECT_TREMOLO_PICKING) != 0)){
+			writeTremoloPickingEffect(effect.getTremoloPicking());
+		}
+	}
+	
+	private void writeBendEffect(TGEffectBend effect) throws IOException{
+		//escribo la cantidad de puntos
+		writeByte(effect.getPoints().size());
+		
+		Iterator it = effect.getPoints().iterator();
+		while(it.hasNext()){
+			TGEffectBend.BendPoint point = (TGEffectBend.BendPoint)it.next();
+			
+			//escribo la posicion
+			writeByte(point.getPosition());
+			
+			//escribo el valor
+			writeByte(point.getValue());
+		}
+	}
+	
+	private void writeTremoloBarEffect(TGEffectTremoloBar effect) throws IOException{
+		//escribo la cantidad de puntos
+		writeByte(effect.getPoints().size());
+		
+		Iterator it = effect.getPoints().iterator();
+		while(it.hasNext()){
+			TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint)it.next();
+			
+			//escribo la posicion
+			writeByte(point.getPosition());
+			
+			//escribo el valor
+			writeByte( (point.getValue() + TGEffectTremoloBar.MAX_VALUE_LENGTH) );
+		}
+	}
+	
+	private void writeHarmonicEffect(TGEffectHarmonic effect) throws IOException{
+		//excribo el tipo
+		writeByte(effect.getType());
+		
+		//excribo la data
+		if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){
+			writeByte(effect.getData());
+		}
+	}
+	
+	private void writeGraceEffect(TGEffectGrace effect) throws IOException{
+		int header = 0;
+		header = (effect.isDead())?header |= GRACE_FLAG_DEAD:header;
+		header = (effect.isOnBeat())?header |= GRACE_FLAG_ON_BEAT:header;
+		
+		//excribo el header
+		writeHeader(header);
+		
+		//excribo el fret
+		writeByte(effect.getFret());
+		
+		//excribo la duracion
+		writeByte(effect.getDuration());
+		
+		//excribo el velocity
+		writeByte(effect.getDynamic());
+		
+		//excribo la transicion
+		writeByte(effect.getTransition());
+	}
+	
+	private void writeTremoloPickingEffect(TGEffectTremoloPicking effect) throws IOException{
+		//excribo la duracion
+		writeByte(effect.getDuration().getValue());
+	}
+	
+	private void writeTrillEffect(TGEffectTrill effect) throws IOException{
+		//excribo el fret
+		writeByte(effect.getFret());
+		
+		//excribo la duracion
+		writeByte(effect.getDuration().getValue());
+	}
+	
+	private void writeMarker(TGMarker marker) throws IOException{
+		//escribo el titulo
+		writeUnsignedByteString(marker.getTitle());
+		
+		//escribo el color
+		writeRGBColor(marker.getColor());
+	}
+	
+	private void writeRGBColor(TGColor color) throws IOException{
+		//escribo el RGB
+		writeByte(color.getR());
+		writeByte(color.getG());
+		writeByte(color.getB());
+	}
+	
+	private void writeLyrics(TGLyric lyrics) throws IOException{
+		//escribo el compas de comienzo
+		writeShort((short)lyrics.getFrom());
+		
+		//escribo el texto
+		writeIntegerString(lyrics.getLyrics());
+	}
+	
+	public void writeByte(int v) throws IOException{
+		this.dataOutputStream.write(v);
+	}
+	
+	private void writeUnsignedByteString(String v) throws IOException{
+		String byteString = (v == null ? new String() : ((v.length() > 0xFF)?v.substring(0, 0xFF):v) );
+		this.dataOutputStream.write(byteString.length());
+		this.dataOutputStream.writeChars(byteString);
+	}
+	
+	private void writeIntegerString(String v) throws IOException{
+		this.dataOutputStream.writeInt(v.length());
+		this.dataOutputStream.writeChars(v);
+	}
+	
+	public void writeHeader(int v) throws IOException{
+		this.dataOutputStream.write(v);
+	}
+	
+	public void writeHeader(int v,int bCount) throws IOException{
+		for(int i = bCount; i > 0; i --){
+			writeHeader( (v >>> ( (8 * i) - 8 ) )  &  0xFF);
+		}
+	}
+	
+	public void writeShort(short v) throws IOException{
+		this.dataOutputStream.writeShort(v);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/io/tg/TGStream.java b/TuxGuitar-lib/src/org/herac/tuxguitar/io/tg/TGStream.java
new file mode 100644
index 0000000..f66486b
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/io/tg/TGStream.java
@@ -0,0 +1,205 @@
+package org.herac.tuxguitar.io.tg;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.util.TGVersion;
+
+public class TGStream {
+	
+	public static final String TG_FORMAT_NAME = ("TuxGuitar File Format");
+	
+	public static final String TG_FORMAT_VERSION = (TG_FORMAT_NAME + " - " + TGVersion.CURRENT.getVersion() );
+	
+	public static final String TG_FORMAT_EXTENSION = (".tg");
+	
+	protected static final int TRACK_SOLO = 0x01;
+	
+	protected static final int TRACK_MUTE = 0x02;
+	
+	protected static final int TRACK_LYRICS = 0x04;
+	
+	protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01;
+	
+	protected static final int MEASURE_HEADER_TEMPO = 0x02;
+	
+	protected static final int MEASURE_HEADER_REPEAT_OPEN = 0x04;
+	
+	protected static final int MEASURE_HEADER_REPEAT_CLOSE = 0x08;
+	
+	protected static final int MEASURE_HEADER_REPEAT_ALTERNATIVE = 0x10;
+	
+	protected static final int MEASURE_HEADER_MARKER = 0x20;
+	
+	protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x40;
+	
+	protected static final int MEASURE_CLEF = 0x01;
+	
+	protected static final int MEASURE_KEYSIGNATURE = 0x02;
+	
+	protected static final int BEAT_HAS_NEXT = 0x01;
+	
+	protected static final int BEAT_HAS_STROKE = 0x02;
+	
+	protected static final int BEAT_HAS_CHORD = 0x04;
+	
+	protected static final int BEAT_HAS_TEXT = 0x08;
+	
+	protected static final int BEAT_HAS_VOICE = 0x10;
+	
+	protected static final int BEAT_HAS_VOICE_CHANGES = 0x20;
+	
+	protected static final int VOICE_HAS_NOTES = 0x01;
+	
+	protected static final int VOICE_NEXT_DURATION = 0x02;
+	
+	protected static final int VOICE_DIRECTION_UP = 0x04;
+	
+	protected static final int VOICE_DIRECTION_DOWN = 0x08;
+	
+	protected static final int NOTE_HAS_NEXT = 0x01;
+	
+	protected static final int NOTE_TIED = 0x02;
+	
+	protected static final int NOTE_EFFECT = 0x04;
+	
+	protected static final int NOTE_VELOCITY = 0x08;
+	
+	protected static final int DURATION_DOTTED = 0x01;
+	
+	protected static final int DURATION_DOUBLE_DOTTED = 0x02;
+	
+	protected static final int DURATION_NO_TUPLET = 0x04;
+	
+	protected static final int EFFECT_BEND = 0x000001;
+	
+	protected static final int EFFECT_TREMOLO_BAR = 0x000002;
+	
+	protected static final int EFFECT_HARMONIC = 0x000004;
+	
+	protected static final int EFFECT_GRACE = 0x000008;
+	
+	protected static final int EFFECT_TRILL = 0x000010;
+	
+	protected static final int EFFECT_TREMOLO_PICKING = 0x000020;
+	
+	protected static final int EFFECT_VIBRATO = 0x000040;
+	
+	protected static final int EFFECT_DEAD = 0x000080;
+	
+	protected static final int EFFECT_SLIDE = 0x000100;
+	
+	protected static final int EFFECT_HAMMER = 0x000200;
+	
+	protected static final int EFFECT_GHOST = 0x000400;
+	
+	protected static final int EFFECT_ACCENTUATED = 0x000800;
+	
+	protected static final int EFFECT_HEAVY_ACCENTUATED = 0x001000;
+	
+	protected static final int EFFECT_PALM_MUTE = 0x002000;
+	
+	protected static final int EFFECT_STACCATO = 0x004000;
+	
+	protected static final int EFFECT_TAPPING = 0x008000;
+	
+	protected static final int EFFECT_SLAPPING = 0x010000;
+	
+	protected static final int EFFECT_POPPING = 0x020000;
+	
+	protected static final int EFFECT_FADE_IN = 0x040000;
+	
+	protected static final int EFFECT_LET_RING = 0x080000;
+	
+	protected static final int GRACE_FLAG_DEAD = 0x01;
+	
+	protected static final int GRACE_FLAG_ON_BEAT = 0x02;
+	
+	protected class TGBeatData {
+		private long currentStart;
+		private TGVoiceData[] voices;
+		
+		protected TGBeatData(TGMeasure measure){
+			this.init(measure);
+		}
+		
+		private void init(TGMeasure measure){
+			this.currentStart = measure.getStart();
+			this.voices = new TGVoiceData[TGBeat.MAX_VOICES];
+			for(int i = 0 ; i < this.voices.length ; i ++ ){
+				this.voices[i] = new TGVoiceData(measure);
+			}
+		}
+		
+		protected TGVoiceData getVoice(int index){
+			return this.voices[index];
+		}
+		
+		public long getCurrentStart(){
+			long minimumStart = -1;
+			for(int i = 0 ; i < this.voices.length ; i ++ ){
+				if( this.voices[i].getStart() > this.currentStart ){
+					if( minimumStart < 0 || this.voices[i].getStart() < minimumStart ){
+						minimumStart = this.voices[i].getStart();
+					}
+				}
+			}
+			if( minimumStart > this.currentStart ){
+				this.currentStart = minimumStart;
+			}
+			return this.currentStart;
+		}
+	}
+	
+	protected class TGVoiceData {
+		private long start;
+		private int velocity;
+		private int flags;
+		private TGDuration duration;
+		
+		protected TGVoiceData(TGMeasure measure){
+			this.init(measure);
+		}
+		
+		private void init(TGMeasure measure){
+			this.flags = 0;
+			this.setStart(measure.getStart());
+			this.setVelocity(TGVelocities.DEFAULT);
+			this.setDuration(new TGFactory().newDuration());
+		}
+		
+		public TGDuration getDuration() {
+			return this.duration;
+		}
+		
+		public void setDuration(TGDuration duration) {
+			this.duration = duration;
+		}
+		
+		public long getStart() {
+			return this.start;
+		}
+		
+		public void setStart(long start) {
+			this.start = start;
+		}
+		
+		public int getVelocity() {
+			return this.velocity;
+		}
+		
+		public void setVelocity(int velocity) {
+			this.velocity = velocity;
+		}
+		
+		public int getFlags() {
+			return this.flags;
+		}
+		
+		public void setFlags(int flags) {
+			this.flags = flags;
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiChannel.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiChannel.java
new file mode 100644
index 0000000..b81397d
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiChannel.java
@@ -0,0 +1,21 @@
+package org.herac.tuxguitar.player.base;
+
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+
+public interface MidiChannel {
+	
+	public void sendNoteOn(int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException;
+	
+	public void sendNoteOff(int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException;
+	
+	public void sendPitchBend(int value, int voice, boolean bendMode) throws MidiPlayerException;
+	
+	public void sendProgramChange(int value) throws MidiPlayerException;
+	
+	public void sendControlChange(int controller, int value) throws MidiPlayerException;
+	
+	public void sendParameter(String key, String value) throws MidiPlayerException;
+	
+	public void sendAllNotesOff() throws MidiPlayerException;
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiChannelRouter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiChannelRouter.java
new file mode 100644
index 0000000..8006ee5
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiChannelRouter.java
@@ -0,0 +1,110 @@
+package org.herac.tuxguitar.player.base;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+public class MidiChannelRouter implements MidiReceiver{
+	
+	private Map midiChannels;
+	
+	public MidiChannelRouter(){
+		this.midiChannels = new HashMap();
+	}
+	
+	public String getId(){
+		return MidiChannelRouter.class.getName();
+	}
+	
+	public void sendParameter(int channelId, String key, String value) throws MidiPlayerException{
+		MidiChannel midiChannel = getMidiChannel(channelId);
+		if( midiChannel != null ){
+			midiChannel.sendParameter(key, value);
+		}
+	}
+	
+	public void sendNoteOn(int channelId, int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		MidiChannel midiChannel = getMidiChannel(channelId);
+		if( midiChannel != null ){
+			midiChannel.sendNoteOn(key, velocity, voice, bendMode);
+		}
+	}
+
+	public void sendNoteOff(int channelId, int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		MidiChannel midiChannel = getMidiChannel(channelId);
+		if( midiChannel != null ){
+			midiChannel.sendNoteOff(key, velocity, voice, bendMode);
+		}
+	}
+	
+	public void sendPitchBend(int channelId, int value, int voice, boolean bendMode) throws MidiPlayerException {
+		MidiChannel midiChannel = getMidiChannel(channelId);
+		if( midiChannel != null ){
+			midiChannel.sendPitchBend(value, voice, bendMode);
+		}
+	}
+	
+	public void sendProgramChange(int channelId, int value) throws MidiPlayerException {
+		MidiChannel midiChannel = getMidiChannel(channelId);
+		if( midiChannel != null ){
+			midiChannel.sendProgramChange(value);
+		}
+	}
+
+	public void sendControlChange(int channelId, int controller, int value) throws MidiPlayerException {
+		MidiChannel midiChannel = getMidiChannel(channelId);
+		if( midiChannel != null ){
+			midiChannel.sendControlChange(controller, value);
+		}
+	}
+	
+	public void sendAllNotesOff() throws MidiPlayerException {
+		List midiChannelIds = getMidiChannelIds();
+		for(int i = 0; i < midiChannelIds.size(); i ++){
+			this.sendControlChange(((Integer)midiChannelIds.get(i)).intValue(),MidiControllers.ALL_NOTES_OFF,0);
+		}
+	}
+	
+	public void sendPitchBendReset() throws MidiPlayerException {
+		List midiChannelIds = getMidiChannelIds();
+		for(int i = 0; i < midiChannelIds.size(); i ++){
+			this.sendPitchBend(((Integer)midiChannelIds.get(i)).intValue(), 64, -1, false);
+		}
+	}
+	
+	public MidiChannel getMidiChannel(int channelId){
+		Integer key = new Integer(channelId);
+		if( this.midiChannels.containsKey(key) ){
+			return (MidiChannel)this.midiChannels.get(key);
+		}
+		return null;
+	}
+	
+	public void removeMidiChannel(int channelId){
+		Integer key = new Integer(channelId);
+		if( this.midiChannels.containsKey(key) ){
+			this.midiChannels.remove(key);
+		}
+	}
+	
+	public void addMidiChannel(int channelId, MidiChannel midiChannel){
+		Integer key = new Integer(channelId);
+		if( this.midiChannels.containsKey(key) ){
+			this.midiChannels.remove(key);
+		}
+		this.midiChannels.put(key, midiChannel);
+	}
+	
+	public List getMidiChannelIds(){
+		List midiChannelIds = new ArrayList();
+		
+		Iterator iterator = this.midiChannels.keySet().iterator();
+		while (iterator.hasNext()) {
+			midiChannelIds.add(iterator.next());
+		}
+		
+		return midiChannelIds;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiControllers.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiControllers.java
new file mode 100644
index 0000000..09871b0
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiControllers.java
@@ -0,0 +1,31 @@
+package org.herac.tuxguitar.player.base;
+
+public class MidiControllers {
+	
+	public static final int BANK_SELECT = 0x00;
+	
+	public static final int VOLUME = 0x07;
+	
+	public static final int BALANCE = 0x0A;
+	
+	public static final int EXPRESSION = 0x0B;
+	
+	public static final int REVERB = 0x5B;
+	
+	public static final int TREMOLO = 0x5C;
+	
+	public static final int CHORUS = 0x5D;
+	
+	public static final int PHASER = 0x5F;
+	
+	public static final int DATA_ENTRY_MSB = 0x06;
+	
+	public static final int DATA_ENTRY_LSB = 0x26;
+	
+	public static final int RPN_LSB = 0x64 ;
+	
+	public static final int RPN_MSB = 0x65 ;
+	
+	public static final int ALL_NOTES_OFF = 0x7B;
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiDevice.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiDevice.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/base/MidiDevice.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiDevice.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiInstrument.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiInstrument.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/base/MidiInstrument.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiInstrument.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiOutputPort.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiOutputPort.java
new file mode 100644
index 0000000..2b1a6fc
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiOutputPort.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.player.base;
+
+public interface MidiOutputPort extends MidiDevice {
+	
+	public MidiSynthesizer getSynthesizer() throws MidiPlayerException;
+	
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiOutputPortProvider.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiOutputPortProvider.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/base/MidiOutputPortProvider.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiOutputPortProvider.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPercussion.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPercussion.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPercussion.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPercussion.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayer.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayer.java
new file mode 100644
index 0000000..fe81284
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayer.java
@@ -0,0 +1,982 @@
+package org.herac.tuxguitar.player.base;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.util.TGLock;
+
+public class MidiPlayer{
+	
+	public static final int MAX_VOLUME = 10;
+	
+	private static final int TIMER_DELAY = 10;
+	
+	private static MidiPlayer instance;
+	
+	private TGSongManager songManager;
+	
+	private MidiSequencer sequencer;
+	
+	private MidiSynthesizerProxy synthesizerProxy;
+	
+	private MidiChannelRouter channelRouter;
+	
+	private MidiTransmitter outputTransmitter;
+	
+	private MidiOutputPort outputPort;
+	
+	private MidiPlayerMode mode;
+	
+	private MidiPlayerCountDown countDown;
+	
+	private String sequencerKey;
+	
+	private String outputPortKey;
+	
+	private List outputPortProviders;
+	
+	private List sequencerProviders;
+	
+	private List listeners;
+	
+	private int volume;
+	
+	private boolean running;
+	
+	private boolean paused;
+	
+	private boolean changeTickPosition;
+	
+	private boolean metronomeEnabled;
+	
+	private int metronomeTrack;
+	
+	private int infoTrack;
+	
+	private int loopSHeader;
+	
+	private int loopEHeader;
+	
+	private long loopSPosition;
+	
+	private boolean anySolo;
+	
+	protected long tickLength;
+	
+	protected long tickPosition;
+	
+	private boolean tryOpenFistDevice;
+	
+	protected TGLock lock = new TGLock();
+	
+	private MidiPlayer() {
+		this.lock = new TGLock();
+		this.volume = MAX_VOLUME;
+	}
+	
+	public static MidiPlayer getInstance(){
+		synchronized (MidiPlayer.class) {
+			if( instance == null ){
+				instance = new MidiPlayer();
+			}
+			return instance;
+		}
+	}
+	
+	public void init(TGSongManager songManager) {
+		this.songManager = songManager;
+		this.outputPortProviders = new ArrayList();
+		this.sequencerProviders = new ArrayList();
+		this.listeners = new ArrayList();
+		this.tryOpenFistDevice = false;
+		this.getSequencer();
+		this.getMode();
+		this.reset();
+	}
+	
+	public MidiInstrument[] getInstruments(){
+		return MidiInstrument.INSTRUMENT_LIST;
+	}
+	
+	public MidiPercussion[] getPercussions(){
+		return MidiPercussion.PERCUSSION_LIST;
+	}
+	
+	public void reset(){
+		this.stop();
+		this.lock.lock();
+		this.tickPosition = TGDuration.QUARTER_TIME;
+		this.setChangeTickPosition(false);
+		this.lock.unlock();
+	}
+	
+	public void close(){
+		try {
+			this.closeSequencer();
+			this.closeOutputPort();
+		} catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void stopSequencer() {
+		try{
+			if( this.getSequencer().isRunning() ){
+				this.getSequencer().stop();
+			}
+		}catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void stop(boolean paused) {
+		this.setPaused(paused);
+		this.stopSequencer();
+		this.setRunning(false);
+	}
+	
+	public void stop() {
+		this.stop(false);
+	}
+	
+	public void pause(){
+		this.stop(true);
+	}
+	
+	public synchronized void play() throws MidiPlayerException{
+		try {
+			this.lock.lock();
+			
+			final boolean notifyStarted = (!this.isRunning());
+			this.setRunning(true);
+			this.stopSequencer();
+			this.checkDevices();
+			this.updateLoop(true);
+			this.addSequence();
+			this.updateTracks();
+			this.updateChannels();
+			this.updatePrograms();
+			this.updateControllers();
+			this.updateDefaultControllers();
+			this.setMetronomeEnabled(isMetronomeEnabled());
+			this.getCountDown().setTempoPercent(getMode().getCurrentPercent());
+			this.changeTickPosition();
+			
+			new Thread(new Runnable() {
+				public synchronized void run() {
+					try {
+						MidiPlayer.this.lock.lock();
+						
+						if( notifyStarted ){
+							MidiPlayer.this.notifyStarted();
+						}
+						
+						if( MidiPlayer.this.getCountDown().isEnabled() ){
+							MidiPlayer.this.notifyCountDownStarted();
+							MidiPlayer.this.getCountDown().start();
+							MidiPlayer.this.notifyCountDownStopped();
+						}
+						
+						if( MidiPlayer.this.isRunning() ){
+							if( MidiPlayer.this.isChangeTickPosition() ){
+								MidiPlayer.this.changeTickPosition();
+							}
+							MidiPlayer.this.getSequencer().start();
+						}
+						
+						MidiPlayer.this.tickLength = getSequencer().getTickLength();
+						MidiPlayer.this.tickPosition = getSequencer().getTickPosition();
+						
+						Object sequencerLock = new Object();
+						while (getSequencer().isRunning() && isRunning()) {
+							synchronized(sequencerLock) {
+								if (isChangeTickPosition()) {
+									changeTickPosition();
+								}
+								MidiPlayer.this.tickPosition = getSequencer().getTickPosition();
+								
+								sequencerLock.wait( TIMER_DELAY );
+							}
+						}
+						
+						//FINISH
+						if(isRunning()){
+							if(MidiPlayer.this.tickPosition >= (MidiPlayer.this.tickLength - (TGDuration.QUARTER_TIME / 2) )){
+								finish();
+							}else {
+								stop(isPaused());
+							}
+						}
+						
+						if( !isRunning() ){
+							MidiPlayer.this.notifyStopped();
+						}
+					}catch (Throwable throwable) {
+						reset();
+						throwable.printStackTrace();
+					}finally{
+						MidiPlayer.this.lock.unlock();
+					}
+				}
+			}).start();
+		}catch (Throwable throwable) {
+			this.reset();
+			throw new MidiPlayerException(throwable.getMessage(),throwable);
+		}finally{
+			this.lock.unlock();
+		}
+	}
+	
+	protected void finish(){
+		try {
+			if(this.getMode().isLoop()){
+				this.stopSequencer();
+				this.setTickPosition(TGDuration.QUARTER_TIME);
+				this.getMode().notifyLoop();
+				this.notifyLoop();
+				this.play();
+				return;
+			}
+			this.reset();
+		} catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void updateLoop( boolean force ){
+		if( force || !this.isRunning() ){
+			this.loopSHeader = -1;
+			this.loopEHeader = -1;
+			this.loopSPosition = TGDuration.QUARTER_TIME;
+			if( getMode().isLoop() ){
+				int hCount = this.songManager.getSong().countMeasureHeaders();
+				this.loopSHeader = ( getMode().getLoopSHeader() <= hCount ? getMode().getLoopSHeader() : -1 ) ;
+				this.loopEHeader = ( getMode().getLoopEHeader() <= hCount ? getMode().getLoopEHeader() : -1 ) ;
+				if( this.loopSHeader > 0 && this.loopSHeader <= hCount ){
+					TGMeasureHeader header = this.songManager.getMeasureHeader( this.loopSHeader );
+					if( header != null ){
+						this.loopSPosition = header.getStart();
+					}
+				}
+			}
+		}
+	}
+	
+	public int getLoopSHeader() {
+		return this.loopSHeader;
+	}
+	
+	public int getLoopEHeader() {
+		return this.loopEHeader;
+	}
+	
+	public long getLoopSPosition() {
+		return this.loopSPosition;
+	}
+	
+	public boolean isTryOpenFistDevice() {
+		return tryOpenFistDevice;
+	}
+
+	public void setTryOpenFistDevice(boolean tryOpenFistDevice) {
+		this.tryOpenFistDevice = tryOpenFistDevice;
+	}
+
+	public void checkDevices() throws Throwable {
+		this.getSequencer().check();
+		if( this.getOutputPort() != null ){
+			this.getOutputPort().check();
+		}
+	}
+	
+	public int getVolume() {
+		return this.volume;
+	}
+	
+	public void setVolume(int volume) {
+		this.volume = volume;
+		if (this.isRunning()) {
+			this.updateControllers();
+		}
+	}
+	
+	public void setRunning(boolean running) {
+		this.running = running;
+	}
+	
+	public boolean isRunning() {
+		try {
+			return (this.running || this.getSequencer().isRunning());
+		} catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+		return false;
+	}
+	
+	public boolean isPaused() {
+		return this.paused;
+	}
+	
+	public void setPaused(boolean paused) {
+		this.paused = paused;
+	}
+	
+	protected boolean isChangeTickPosition() {
+		return this.changeTickPosition;
+	}
+	
+	private void setChangeTickPosition(boolean changeTickPosition) {
+		this.changeTickPosition = changeTickPosition;
+	}
+	
+	public void setTickPosition(long position) {
+		this.tickPosition = position;
+		this.setChangeTickPosition(true);
+	}
+	
+	public long getTickPosition() {
+		return this.tickPosition;
+	}
+	
+	protected void changeTickPosition(){
+		try{
+			if(isRunning()){
+				if( this.tickPosition < this.getLoopSPosition() ){
+					this.tickPosition = this.getLoopSPosition();
+				}
+				this.getSequencer().setTickPosition(this.tickPosition);
+			}
+			setChangeTickPosition(false);
+		} catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void addSequence() {
+		try{
+			MidiSequenceParser midiSequenceParser = new MidiSequenceParser(this.songManager,MidiSequenceParser.DEFAULT_PLAY_FLAGS);
+			midiSequenceParser.setTempoPercent(getMode().getCurrentPercent());
+			midiSequenceParser.setSHeader( getLoopSHeader() );
+			midiSequenceParser.setEHeader( getLoopEHeader() );
+			midiSequenceParser.setMetronomeChannelId(getPercussionChannelId());
+			midiSequenceParser.parse(getSequencer().createSequence(this.songManager.getSong().countTracks() + 2));
+			this.infoTrack = midiSequenceParser.getInfoTrack();
+			this.metronomeTrack = midiSequenceParser.getMetronomeTrack();
+		} catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void resetChannels() {
+		try{
+			this.closeChannels();
+			this.updateChannels();
+		} catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void closeChannels() throws MidiPlayerException{
+		// Remove all channels.
+		Iterator iterator = getChannelRouter().getMidiChannelIds().iterator();
+		while( iterator.hasNext() ){
+			int channelId = ((Integer) iterator.next()).intValue();
+			
+			this.getSynthesizerProxy().closeChannel(getChannelRouter().getMidiChannel(channelId));
+			this.getChannelRouter().removeMidiChannel(channelId);
+		}
+	}
+	
+	public void updateChannels() throws MidiPlayerException{
+		// Remove unused channels.
+		List oldChannelIds = getChannelRouter().getMidiChannelIds();
+		Iterator iterator = oldChannelIds.iterator();
+		while( iterator.hasNext() ){
+			int channelId = ((Integer) iterator.next()).intValue();
+			
+			boolean removableChannel = ( this.songManager.getChannel(channelId) == null );
+			if(!removableChannel ){
+				MidiChannel midiChannel = getChannelRouter().getMidiChannel(channelId);
+				if( midiChannel != null ){
+					removableChannel = (!this.getSynthesizerProxy().isChannelOpen(midiChannel));
+				}
+			}
+			
+			if( removableChannel ){
+				this.getSynthesizerProxy().closeChannel(getChannelRouter().getMidiChannel(channelId));
+				this.getChannelRouter().removeMidiChannel(channelId);
+			}
+		}
+		
+		// Add channels
+		List newChannelIds = getChannelRouter().getMidiChannelIds();
+		Iterator tgChannels = this.songManager.getSong().getChannels();
+		while( tgChannels.hasNext() ){
+			TGChannel tgChannel = (TGChannel) tgChannels.next();
+			if(!newChannelIds.contains(new Integer(tgChannel.getChannelId())) ){
+				MidiChannel midiChannel = this.getSynthesizerProxy().openChannel(tgChannel.getChannelId());
+				if( midiChannel != null ){
+					this.getChannelRouter().addMidiChannel(tgChannel.getChannelId(), midiChannel);
+				}
+			}
+		}
+		
+		this.updateParameters();
+	}
+	
+	public void updateParameters(){
+		Iterator tgChannels = this.songManager.getSong().getChannels();
+		while( tgChannels.hasNext() ){
+			TGChannel tgChannel = (TGChannel) tgChannels.next();
+			this.updateParameters(tgChannel);
+		}
+	}
+	
+	public void updateParameters(TGChannel tgChannel){
+		Iterator parameters = tgChannel.getParameters();
+		while( parameters.hasNext() ){
+			TGChannelParameter tgChannelParameter = (TGChannelParameter) parameters.next();
+			this.updateParameters(tgChannel, tgChannelParameter);
+		}
+	}
+	
+	public void updateParameters(TGChannel tgChannel, TGChannelParameter tgChannelParameter){
+		try {
+			getOutputTransmitter().sendParameter(tgChannel.getChannelId(), tgChannelParameter.getKey(), tgChannelParameter.getValue());
+		} catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private void updateDefaultControllers(){
+		try{
+			Iterator tgChannels = this.songManager.getSong().getChannels();
+			while( tgChannels.hasNext() ){
+				TGChannel tgChannel = (TGChannel) tgChannels.next();
+				getOutputTransmitter().sendControlChange(tgChannel.getChannelId(),MidiControllers.RPN_MSB,0);
+				getOutputTransmitter().sendControlChange(tgChannel.getChannelId(),MidiControllers.RPN_LSB,0);
+				getOutputTransmitter().sendControlChange(tgChannel.getChannelId(),MidiControllers.DATA_ENTRY_MSB,12);
+				getOutputTransmitter().sendControlChange(tgChannel.getChannelId(),MidiControllers.DATA_ENTRY_LSB, 0);
+			}
+		}
+		catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void updatePrograms() {
+		Iterator it = this.songManager.getSong().getChannels();
+		while(it.hasNext()){
+			updateProgram((TGChannel)it.next());
+		}
+	}
+	
+	private void updateProgram(TGChannel channel) {
+		this.updateProgram(channel.getChannelId(), channel.getBank(), channel.getProgram());
+	}
+	
+	private void updateProgram(int channelId, int bank, int program) {
+		try{
+			if( bank >= 0 && bank <= 128 ){
+				getOutputTransmitter().sendControlChange(channelId, MidiControllers.BANK_SELECT, bank);
+			}
+			if( program >= 0 && program <= 127 ){
+				getOutputTransmitter().sendProgramChange(channelId, program);
+			}
+		}catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void updateControllers() {
+		Iterator channelsIt = this.songManager.getSong().getChannels();
+		while( channelsIt.hasNext() ){
+			this.updateController( (TGChannel)channelsIt.next() );
+		}
+		this.afterUpdate();
+	}
+	
+	private void updateController(TGChannel channel) {
+		int volume = (int)((this.getVolume() / 10.00) * channel.getVolume());
+		int balance = channel.getBalance();
+		int chorus = channel.getChorus();
+		int reverb = channel.getReverb();
+		int phaser = channel.getPhaser();
+		int tremolo = channel.getTremolo();
+		
+		updateController(channel.getChannelId(),volume,balance,chorus,reverb,phaser,tremolo,127);
+	}
+	
+	private void updateController(int channelId,int volume,int balance,int chorus, int reverb,int phaser, int tremolo, int expression) {
+		try{
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.VOLUME,volume);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.BALANCE,balance);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.CHORUS,chorus);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.REVERB,reverb);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.PHASER,phaser);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.TREMOLO,tremolo);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.EXPRESSION,expression);
+		}catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void updateTracks() {
+		this.anySolo = false;
+		
+		Iterator tracksIt = this.songManager.getSong().getTracks();
+		while( tracksIt.hasNext() ){
+			TGTrack track = (TGTrack)tracksIt.next();
+			this.updateTrack(track);
+			this.anySolo = ((!this.anySolo)?track.isSolo():this.anySolo);
+		}
+		
+		this.afterUpdate();
+	}
+	
+	private void updateTrack(TGTrack track) {
+		try{
+			getSequencer().setMute(track.getNumber(),track.isMute());
+			getSequencer().setSolo(track.getNumber(),track.isSolo());
+		}catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private void afterUpdate(){
+		try{
+			getSequencer().setSolo(this.infoTrack,this.anySolo);
+			getSequencer().setSolo(this.metronomeTrack,(isMetronomeEnabled() && this.anySolo));
+		}catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public boolean isMetronomeEnabled() {
+		return this.metronomeEnabled;
+	}
+	
+	public void setMetronomeEnabled(boolean metronomeEnabled) {
+		try{
+			this.metronomeEnabled = metronomeEnabled;
+			this.getSequencer().setMute(this.metronomeTrack,!isMetronomeEnabled());
+			this.getSequencer().setSolo(this.metronomeTrack,(isMetronomeEnabled() && this.anySolo));
+		}catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void playBeat(TGBeat beat) {
+		List notes = new ArrayList();
+		for( int v = 0; v < beat.countVoices(); v ++){
+			notes.addAll( beat.getVoice(v).getNotes() );
+		}
+		playBeat(beat.getMeasure().getTrack(), notes);
+	}
+	
+	public void playBeat(TGTrack track,final List notes) {
+		TGChannel tgChannel = this.songManager.getChannel(track.getChannelId());
+		if( tgChannel != null ){
+			int channelId = tgChannel.getChannelId();
+			int bank = tgChannel.getBank();
+			int program = tgChannel.getProgram();
+			int volume = (int)((this.getVolume() / 10.00) * tgChannel.getVolume());
+			int balance = tgChannel.getBalance();
+			int chorus = tgChannel.getChorus();
+			int reverb = tgChannel.getReverb();
+			int phaser = tgChannel.getPhaser();
+			int tremolo = tgChannel.getTremolo();
+			int size = notes.size();
+			int[][] beat = new int[size][2];
+			for(int i = 0; i < size; i ++){
+				TGNote note = (TGNote)notes.get(i);
+				beat[i][0] = track.getOffset() + (note.getValue() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue());
+				beat[i][1] = note.getVelocity();
+			}
+			playBeat(channelId,bank,program,volume,balance,chorus,reverb,phaser,tremolo,beat);
+		}
+	}
+	
+	public void playBeat(int channelId,int bank,int program,int volume,int balance,int chorus, int reverb,int phaser,int tremolo,int[][] beat) {
+		playBeat(channelId, bank, program, volume, balance, chorus, reverb, phaser, tremolo, beat,500,0);
+	}
+	
+	public void playBeat(int channelId,int bank,int program,int volume,int balance,int chorus, int reverb,int phaser,int tremolo,int[][] beat,long duration,int interval) {
+		try {
+			updateChannels();
+			
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.BANK_SELECT,bank);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.VOLUME,volume);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.BALANCE,balance);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.CHORUS,chorus);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.REVERB,reverb);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.PHASER,phaser);
+			getOutputTransmitter().sendControlChange(channelId,MidiControllers.TREMOLO,tremolo);
+			getOutputTransmitter().sendProgramChange(channelId,program);
+			
+			for(int i = 0; i < beat.length; i ++){
+				getOutputTransmitter().sendNoteOn(channelId,beat[i][0], beat[i][1], -1, false);
+				if(interval > 0){
+					Thread.sleep(interval);
+				}
+			}
+			Thread.sleep(duration);
+			for(int i = 0; i < beat.length; i ++){
+				getOutputTransmitter().sendNoteOff(channelId,beat[i][0], beat[i][1], -1, false);
+			}
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public TGSongManager getSongManager(){
+		return this.songManager;
+	}
+	
+	public MidiPlayerMode getMode(){
+		if(this.mode == null){
+			this.mode = new MidiPlayerMode();
+		}
+		return this.mode;
+	}
+	
+	public MidiPlayerCountDown getCountDown(){
+		if( this.countDown == null ){
+			this.countDown = new MidiPlayerCountDown(this);
+		}
+		return this.countDown;
+	}
+	
+	public MidiTransmitter getOutputTransmitter(){
+		if (this.outputTransmitter == null) {
+			this.outputTransmitter = new MidiTransmitter();
+			this.outputTransmitter.addReceiver(getChannelRouter().getId(), getChannelRouter());
+		}
+		return this.outputTransmitter;
+	}
+	
+	public MidiOutputPort getOutputPort(){
+		return this.outputPort;
+	}
+	
+	public MidiChannelRouter getChannelRouter(){
+		if (this.channelRouter == null) {
+			this.channelRouter = new MidiChannelRouter();
+		}
+		return this.channelRouter;
+	}
+	
+	public MidiSynthesizerProxy getSynthesizerProxy(){
+		if (this.synthesizerProxy == null) {
+			this.synthesizerProxy = new MidiSynthesizerProxy();
+		}
+		return this.synthesizerProxy;
+	}
+	
+	public MidiSequencer getSequencer(){
+		if (this.sequencer == null) {
+			this.sequencer = new MidiSequencerEmpty();
+		}
+		return this.sequencer;
+	}
+	
+	public int getPercussionChannelId(){
+		Iterator tgChannels = this.songManager.getSong().getChannels();
+		while( tgChannels.hasNext() ){
+			TGChannel tgChannel = (TGChannel) tgChannels.next();
+			if( tgChannel.isPercussionChannel() ){
+				return tgChannel.getChannelId();
+			}
+		}
+		return -1;
+	}
+	
+	public boolean loadSequencer(MidiSequencer sequencer){
+		try{
+			this.closeSequencer();
+			this.sequencer = sequencer;
+			this.sequencer.open();
+			this.sequencer.setTransmitter( getOutputTransmitter() );
+		}catch(Throwable throwable){
+			this.sequencer = null;
+			return false;
+		}
+		return true;
+	}
+	
+	public boolean loadOutputPort(MidiOutputPort port){
+		try{
+			this.closeOutputPort();
+			this.outputPort = port;
+			this.outputPort.open();
+			this.getSynthesizerProxy().setMidiSynthesizer(this.outputPort.getSynthesizer());
+		}catch(Throwable throwable){
+			this.outputPort = null;
+			return false;
+		}
+		return true;
+	}
+	
+	public void openOutputPort(String key) {
+		this.openOutputPort(key, false);
+	}
+	
+	public void openOutputPort(String key, boolean tryFirst) {
+		this.outputPortKey = key;
+		this.openOutputPort(listOutputPorts(),tryFirst);
+	}
+	
+	public void openOutputPort(List ports, boolean tryFirst) {
+		try{
+			if(this.outputPortKey != null && !this.isOutputPortOpen(this.outputPortKey)){
+				this.closeOutputPort();
+				for(int i = 0; i < ports.size(); i ++){
+					MidiOutputPort port = (MidiOutputPort)ports.get(i);
+					if(port.getKey().equals(this.outputPortKey)){
+						if(this.loadOutputPort(port)){
+							return;
+						}
+					}
+				}
+			}
+			if(getOutputPort() == null && !ports.isEmpty() && tryFirst){
+				this.loadOutputPort( (MidiOutputPort)ports.get(0) );
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void openSequencer(String key) {
+		this.openSequencer(key, false);
+	}
+	
+	public void openSequencer(String key, boolean tryFirst) {
+		try{
+			this.sequencerKey = key;
+			this.openSequencer(listSequencers(),tryFirst);
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void openSequencer(List sequencers ,boolean tryFirst) throws MidiPlayerException {
+		try{
+			if(this.sequencerKey != null && !this.isSequencerOpen(this.sequencerKey)){
+				this.closeSequencer();
+				for(int i = 0; i < sequencers.size(); i ++){
+					MidiSequencer sequencer = (MidiSequencer)sequencers.get(i);
+					if(sequencer.getKey().equals(this.sequencerKey)){
+						if(this.loadSequencer(sequencer)){
+							return;
+						}
+					}
+				}
+			}
+			
+			if(getSequencer() instanceof MidiSequencerEmpty && !sequencers.isEmpty() && tryFirst){
+				this.loadSequencer( (MidiSequencer) sequencers.get(0));
+			}
+			
+		}catch(Throwable throwable){
+			throw new MidiPlayerException(throwable.getMessage(),throwable);
+		}
+	}
+	
+	public List listOutputPorts() {
+		List ports = new ArrayList();
+		Iterator it = this.outputPortProviders.iterator();
+		while(it.hasNext()){
+			try{
+				MidiOutputPortProvider provider = (MidiOutputPortProvider)it.next();
+				ports.addAll(provider.listPorts());
+			}catch(Throwable throwable){
+				throwable.printStackTrace();
+			}
+		}
+		return ports;
+	}
+	
+	public List listSequencers(){
+		List sequencers = new ArrayList();
+		Iterator it = this.sequencerProviders.iterator();
+		while(it.hasNext()){
+			try{
+				MidiSequencerProvider provider = (MidiSequencerProvider)it.next();
+				sequencers.addAll(provider.listSequencers());
+			}catch(Throwable throwable){
+				throwable.printStackTrace();
+			}
+		}
+		return sequencers;
+	}
+	
+	public void closeSequencer() throws MidiPlayerException{
+		try{
+			if(this.isRunning()){
+				this.stop();
+			}
+			this.lock.lock();
+			if (this.sequencer != null) {
+				this.sequencer.close();
+				this.sequencer = null;
+			}
+			this.lock.unlock();
+		}catch(Throwable throwable){
+			throw new MidiPlayerException(throwable.getMessage(),throwable);
+		}
+	}
+	
+	public void closeOutputPort(){
+		try{
+			if(this.isRunning()){
+				this.stop();
+			}
+			this.lock.lock();
+			if (this.outputPort != null) {
+				this.closeChannels();
+				this.getSynthesizerProxy().setMidiSynthesizer(null);
+				this.getOutputTransmitter().removeReceiver(this.outputPort.getKey());
+				this.outputPort.close();
+				this.outputPort = null;
+			}
+			this.lock.unlock();
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+	}
+	
+	public boolean isSequencerOpen(String key){
+		if(key != null){
+			String currentKey = getSequencer().getKey();
+			if(currentKey == null){
+				return false;
+			}
+			return currentKey.equals(key);
+		}
+		return false;
+	}
+	
+	public boolean isOutputPortOpen(String key){
+		if(key != null && getOutputPort() != null ){
+			String currentKey = getOutputPort().getKey();
+			if(currentKey == null){
+				return false;
+			}
+			return currentKey.equals(key);
+		}
+		return false;
+	}
+	
+	public void addOutputPortProvider(MidiOutputPortProvider provider) throws MidiPlayerException {
+		this.addOutputPortProvider(provider, this.isTryOpenFistDevice());
+	}
+	
+	public void addOutputPortProvider(MidiOutputPortProvider provider, boolean tryFirst) throws MidiPlayerException {
+		this.outputPortProviders.add(provider);
+		this.openOutputPort(provider.listPorts(),tryFirst);
+	}
+	
+	public void addSequencerProvider(MidiSequencerProvider provider) throws MidiPlayerException {
+		this.addSequencerProvider(provider, this.isTryOpenFistDevice());
+	}
+	
+	public void addSequencerProvider(MidiSequencerProvider provider, boolean tryFirst) throws MidiPlayerException {
+		this.sequencerProviders.add(provider);
+		this.openSequencer(provider.listSequencers(), tryFirst);
+	}
+	
+	public void removeOutputPortProvider(MidiOutputPortProvider provider) throws MidiPlayerException {
+		this.outputPortProviders.remove(provider);
+		
+		MidiOutputPort current = getOutputPort();
+		if( current != null ){
+			Iterator it = provider.listPorts().iterator();
+			while(it.hasNext()){
+				MidiOutputPort port = (MidiOutputPort)it.next();
+				if(port.getKey().equals(current.getKey())){
+					closeOutputPort();
+					break;
+				}
+			}
+		}
+	}
+	
+	public void removeSequencerProvider(MidiSequencerProvider provider) throws MidiPlayerException {
+		this.sequencerProviders.remove(provider);
+		
+		MidiSequencer current = getSequencer();
+		if(!(current instanceof MidiSequencerEmpty) && current != null){
+			Iterator it = provider.listSequencers().iterator();
+			while(it.hasNext()){
+				MidiSequencer sequencer = (MidiSequencer)it.next();
+				if(current.getKey().equals(sequencer.getKey())){
+					closeSequencer();
+					break;
+				}
+			}
+		}
+	}
+	
+	public void addListener( MidiPlayerListener listener ){
+		if( !this.listeners.contains( listener ) ){
+			this.listeners.add( listener );
+		}
+	}
+	
+	public void removeListener( MidiPlayerListener listener ){
+		if( this.listeners.contains( listener ) ){
+			this.listeners.remove( listener );
+		}
+	}
+	
+	public void notifyStarted(){
+		Iterator it = this.listeners.iterator();
+		while( it.hasNext() ){
+			MidiPlayerListener listener = (MidiPlayerListener) it.next();
+			listener.notifyStarted();
+		}
+	}
+	
+	public void notifyStopped(){
+		Iterator it = this.listeners.iterator();
+		while( it.hasNext() ){
+			MidiPlayerListener listener = (MidiPlayerListener) it.next();
+			listener.notifyStopped();
+		}
+	}
+	
+	public void notifyCountDownStarted(){
+		Iterator it = this.listeners.iterator();
+		while( it.hasNext() ){
+			MidiPlayerListener listener = (MidiPlayerListener) it.next();
+			listener.notifyCountDownStarted();
+		}
+	}
+	
+	public void notifyCountDownStopped(){
+		Iterator it = this.listeners.iterator();
+		while( it.hasNext() ){
+			MidiPlayerListener listener = (MidiPlayerListener) it.next();
+			listener.notifyCountDownStopped();
+		}
+	}
+	
+	public void notifyLoop(){
+		Iterator it = this.listeners.iterator();
+		while( it.hasNext() ){
+			MidiPlayerListener listener = (MidiPlayerListener) it.next();
+			listener.notifyLoop();
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerCountDown.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerCountDown.java
new file mode 100644
index 0000000..961abbd
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerCountDown.java
@@ -0,0 +1,111 @@
+package org.herac.tuxguitar.player.base;
+
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGVelocities;
+
+public class MidiPlayerCountDown {
+	
+	public static final int DEFAULT_TEMPO_PERCENT = 100;
+	
+	private MidiPlayer player;
+	private boolean enabled;
+	private boolean running;
+	private int tempoPercent;
+	
+	public MidiPlayerCountDown(MidiPlayer player){
+		this.player = player;
+		this.enabled = false;
+		this.tempoPercent = DEFAULT_TEMPO_PERCENT;
+	}
+	
+	public void start(){
+		try {
+			this.running = true;
+			
+			int channelId = this.player.getPercussionChannelId();
+			if( channelId >= 0 ){
+				TGMeasureHeader header = this.findMeasureHeader();
+				if( header != null ){
+					Object timerLock = new Object();
+					
+					int  tgTempo = ((header.getTempo().getValue() * this.getTempoPercent()) / DEFAULT_TEMPO_PERCENT);
+					long tgLength = header.getTimeSignature().getDenominator().getTime();
+					long tickLength = (long)(1000.00 * (60.00 / tgTempo * tgLength) / TGDuration.QUARTER_TIME);
+					long tickStart = System.currentTimeMillis();
+					
+					int tickIndex = 0;
+					int tickCount = header.getTimeSignature().getNumerator();
+					
+					while( this.isRunning() && tickIndex <= tickCount ){
+							long currentTime = System.currentTimeMillis();
+							if( tickStart <= currentTime ){
+								tickStart += tickLength;
+								tickIndex ++;
+								if( tickIndex <= tickCount ){
+									this.player.getOutputTransmitter().sendNoteOn(channelId, 37, TGVelocities.DEFAULT, -1, false);
+									synchronized (timerLock) {
+										timerLock.wait( 1 );
+									}
+									this.player.getOutputTransmitter().sendNoteOff(channelId, 37, TGVelocities.DEFAULT, -1, false);
+								}
+							}
+						synchronized (timerLock) {
+							timerLock.wait( 10 );
+						}
+					}
+				}
+			}
+			
+			this.running = false;
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public TGMeasureHeader findMeasureHeader(){
+		long tick = this.player.getTickPosition();
+		long startPoint = this.player.getLoopSPosition();
+		long start = startPoint;
+		long length = 0;
+		
+		TGSong song = this.player.getSongManager().getSong();
+		MidiRepeatController controller = new MidiRepeatController(song, this.player.getLoopSHeader() , this.player.getLoopEHeader() );
+		while(!controller.finished()){
+			TGMeasureHeader header = song.getMeasureHeader(controller.getIndex());
+			controller.process();
+			if(controller.shouldPlay()){
+				
+				start += length;
+				length = header.getLength();
+				
+				//verifico si es el compas correcto
+				if(tick >= start && tick < (start + length )){
+					return header;
+				}
+			}
+		}
+		return null;
+	}
+	
+	public boolean isRunning() {
+		return (this.enabled && this.running && this.player.isRunning() && !this.player.isChangeTickPosition());
+	}
+	
+	public boolean isEnabled() {
+		return this.enabled;
+	}
+	
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+
+	public int getTempoPercent() {
+		return tempoPercent;
+	}
+
+	public void setTempoPercent(int tempoPercent) {
+		this.tempoPercent = tempoPercent;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerException.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerException.java
new file mode 100644
index 0000000..6d91021
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerException.java
@@ -0,0 +1,18 @@
+package org.herac.tuxguitar.player.base;
+
+public class MidiPlayerException extends Exception{
+	
+	private static final long serialVersionUID = 1L;
+	
+	public MidiPlayerException(String message) {
+		super(message);
+	}
+	
+	public MidiPlayerException(String message, Throwable cause) {
+		super(message, cause);
+	}
+	
+	public MidiPlayerException(Throwable cause) {
+		super(cause);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerListener.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerListener.java
new file mode 100644
index 0000000..a7b0f2c
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerListener.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.player.base;
+
+public interface MidiPlayerListener {
+	
+	public void notifyStarted();
+	
+	public void notifyStopped();
+	
+	public void notifyCountDownStarted();
+	
+	public void notifyCountDownStopped();
+	
+	public void notifyLoop();
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerMode.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerMode.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerMode.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiPlayerMode.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiReceiver.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiReceiver.java
new file mode 100644
index 0000000..07aaaa3
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiReceiver.java
@@ -0,0 +1,21 @@
+package org.herac.tuxguitar.player.base;
+
+public interface MidiReceiver {
+	
+	public void sendNoteOn(int channel, int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException;
+	
+	public void sendNoteOff(int channel, int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException;
+	
+	public void sendPitchBend(int channel, int value, int voice, boolean bendMode) throws MidiPlayerException;
+	
+	public void sendProgramChange(int channel, int value) throws MidiPlayerException;
+	
+	public void sendControlChange(int channel, int controller, int value) throws MidiPlayerException;
+	
+	public void sendParameter(int channelId, String key, String value) throws MidiPlayerException;
+	
+	public void sendAllNotesOff() throws MidiPlayerException;
+	
+	public void sendPitchBendReset() throws MidiPlayerException;
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiRepeatController.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiRepeatController.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/base/MidiRepeatController.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiRepeatController.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequenceHandler.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequenceHandler.java
new file mode 100644
index 0000000..4c9a819
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequenceHandler.java
@@ -0,0 +1,32 @@
+package org.herac.tuxguitar.player.base;
+
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+
+public abstract class MidiSequenceHandler {
+	
+	private int tracks;
+	
+	public MidiSequenceHandler(int tracks){
+		this.tracks = tracks;
+	}
+	
+	public int getTracks() {
+		return this.tracks;
+	}
+	
+	public abstract void addNoteOn(long tick,int track,int channel,int note,int velocity,int voice,boolean bendMode);
+	
+	public abstract void addNoteOff(long tick,int track,int channel,int note,int velocity,int voice,boolean bendMode);
+	
+	public abstract void addPitchBend(long tick,int track,int channel,int value,int voice,boolean bendMode);
+	
+	public abstract void addControlChange(long tick,int track,int channel,int controller,int value);
+	
+	public abstract void addProgramChange(long tick,int track,int channel,int instrument);
+	
+	public abstract void addTempoInUSQ(long tick,int track,int usq);
+	
+	public abstract void addTimeSignature(long tick,int track,TGTimeSignature ts);
+	
+	public abstract void notifyFinish();
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequenceParser.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequenceParser.java
new file mode 100644
index 0000000..7f37fee
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequenceParser.java
@@ -0,0 +1,933 @@
+/*
+ * Created on 13-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.player.base;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MidiSequenceParser {
+	
+	private static final int DEFAULT_METRONOME_KEY = 37;
+	
+	private static final int DEFAULT_DURATION_PM = 60;
+	
+	private static final int DEFAULT_DURATION_DEAD = 30;
+	
+	private static final int DEFAULT_BEND = 64;
+	
+	private static final float DEFAULT_BEND_SEMI_TONE = 2.75f;
+	
+	/**
+	 * flag para agregar los controles por defecto, 
+	 * no se recomienda usar este flag si el reproductor asigna estos controles en tiempo real.
+	 */
+	public static final int ADD_DEFAULT_CONTROLS = 0x01;
+	/**
+	 * flag para agregar los valores del mixer (volumen, balance, instrumento),
+	 * no se recomienda usar este flag si el reproductor asigna estos valores en tiempo real.
+	 */
+	public static final int ADD_MIXER_MESSAGES = 0x02;
+	/**
+	 * flag para agregar la pista del metronomo,
+	 * en casos como la exportacion de midi, este flag no sera necesario
+	 */
+	public static final int ADD_METRONOME = 0x04;
+	/**
+	 * tuxguitar usa como primer tick el valor de la constante Duration.QUARTER_TIME
+	 * asignando este flag, es posible crear el primer tick en cero.
+	 */
+	public static final int ADD_FIRST_TICK_MOVE = 0x08;
+	
+	public static final int DEFAULT_PLAY_FLAGS = (ADD_METRONOME);
+	
+	public static final int DEFAULT_EXPORT_FLAGS = (ADD_FIRST_TICK_MOVE | ADD_DEFAULT_CONTROLS | ADD_MIXER_MESSAGES);
+	
+	/**
+	 * Song Manager
+	 */
+	private TGSongManager manager;
+	/**
+	 * flags
+	 */
+	private int flags;
+	/**
+	 * Index of info track
+	 */
+	private int infoTrack;
+	/**
+	 * Index of metronome track
+	 */
+	private int metronomeTrack;
+	
+	private int metronomeChannelId;
+	
+	private int firstTickMove;
+	
+	private int tempoPercent;
+	
+	private int transpose;
+	
+	private int sHeader;
+	
+	private int eHeader;
+	
+	public MidiSequenceParser(TGSongManager manager,int flags) {
+		this.manager = manager;
+		this.flags = flags;
+		this.tempoPercent = 100;
+		this.transpose = 0;
+		this.sHeader = -1;
+		this.eHeader = -1;
+		this.firstTickMove = (int)(((flags & ADD_FIRST_TICK_MOVE) != 0)?(-TGDuration.QUARTER_TIME):0);
+	}
+	
+	public int getInfoTrack(){
+		return this.infoTrack;
+	}
+	
+	public int getMetronomeTrack(){
+		return this.metronomeTrack;
+	}
+	
+	private long getTick(long tick){
+		return (tick + this.firstTickMove);
+	}
+	
+	public void setSHeader(int header) {
+		this.sHeader = header;
+	}
+	
+	public void setEHeader(int header) {
+		this.eHeader = header;
+	}
+	
+	public void setMetronomeChannelId(int metronomeChannelId) {
+		this.metronomeChannelId = metronomeChannelId;
+	}
+
+	public void setTempoPercent(int tempoPercent) {
+		this.tempoPercent = tempoPercent;
+	}
+
+	public void setTranspose(int transpose) {
+		this.transpose = transpose;
+	}
+
+	private int fix( int value ){
+		return ( value >= 0 ? value <= 127 ? value : 127 : 0 );
+	}
+	
+	/**
+	 * Crea la cancion
+	 */
+	public void parse(MidiSequenceHandler sequence) {
+		this.infoTrack = 0;
+		this.metronomeTrack = (sequence.getTracks() - 1);
+		
+		MidiSequenceHelper helper = new MidiSequenceHelper(sequence);
+		MidiRepeatController controller = new MidiRepeatController(this.manager.getSong(),this.sHeader,this.eHeader);
+		while(!controller.finished()){
+			int index = controller.getIndex();
+			long move = controller.getRepeatMove();
+			controller.process();
+			if(controller.shouldPlay()){
+				helper.addMeasureHelper( new MidiMeasureHelper(index,move) );
+			}
+		}
+		
+		this.addDefaultMessages(helper, this.manager.getSong());
+		
+		for (int i = 0; i < this.manager.getSong().countTracks(); i++) {
+			TGTrack songTrack = this.manager.getSong().getTrack(i);
+			createTrack(helper, songTrack);
+		}
+		sequence.notifyFinish();
+	}
+	
+	/**
+	 * Crea las pistas de la cancion
+	 */
+	private void createTrack(MidiSequenceHelper sh, TGTrack track) {
+		TGChannel tgChannel = this.manager.getChannel( track.getChannelId() );
+		if( tgChannel != null ){
+			TGMeasure previous = null;
+			
+			this.addBend(sh,track.getNumber(),TGDuration.QUARTER_TIME,DEFAULT_BEND, tgChannel.getChannelId(), -1, false);
+			this.makeChannel(sh, tgChannel, track.getNumber());
+			
+			int mCount = sh.getMeasureHelpers().size();
+			for( int mIndex = 0 ; mIndex < mCount ; mIndex++ ){
+				MidiMeasureHelper mh = sh.getMeasureHelper( mIndex );
+				
+				TGMeasure measure = track.getMeasure(mh.getIndex());
+				if(track.getNumber() == 1){
+					addTimeSignature(sh,measure, previous, mh.getMove());
+					addTempo(sh,measure, previous, mh.getMove());
+					addMetronome(sh,measure.getHeader(), mh.getMove() );
+				}
+				//agrego los pulsos
+				makeBeats( sh, tgChannel, track, measure, mIndex, mh.getMove() );
+				
+				previous = measure;
+			}
+		}
+	}
+	
+	private void makeBeats(MidiSequenceHelper sh, TGChannel channel, TGTrack track, TGMeasure measure, int mIndex, long startMove) {
+		int[] stroke = new int[track.stringCount()];
+		TGBeat previous = null;
+		for (int bIndex = 0; bIndex < measure.countBeats(); bIndex++) {
+			TGBeat beat = measure.getBeat(bIndex);
+			makeNotes( sh, channel, track, beat, measure.getTempo(), mIndex, bIndex, startMove, getStroke(beat, previous, stroke) );
+			previous = beat;
+		}
+	}
+	
+	/**
+	 * Crea las notas del compas
+	 */
+	private void makeNotes( MidiSequenceHelper sh, TGChannel tgChannel, TGTrack track, TGBeat beat, TGTempo tempo, int mIndex,int bIndex, long startMove, int[] stroke) {
+		for( int vIndex = 0; vIndex < beat.countVoices(); vIndex ++ ){
+			TGVoice voice = beat.getVoice(vIndex);
+			
+			MidiTickHelper th = checkTripletFeel(voice,bIndex);
+			for (int noteIdx = 0; noteIdx < voice.countNotes(); noteIdx++) {
+				TGNote note = voice.getNote(noteIdx);
+				if (!note.isTiedNote()) {
+					int key = (this.transpose + track.getOffset() + note.getValue() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue());
+					
+					long start = applyStrokeStart(note, (th.getStart() + startMove) , stroke);
+					long duration = applyStrokeDuration(note, getRealNoteDuration(sh, track, note, tempo, th.getDuration(), mIndex,bIndex), stroke);
+					
+					int velocity = getRealVelocity(sh, note, track, tgChannel, mIndex, bIndex);
+					int channel = tgChannel.getChannelId();
+					int midiVoice = note.getString();
+					boolean bendMode = false;
+					
+					boolean percussionChannel = tgChannel.isPercussionChannel();
+					//---Fade In---
+					if(note.getEffect().isFadeIn()){
+						makeFadeIn(sh,track.getNumber(), start, duration, tgChannel.getVolume(), channel);
+					}
+					//---Grace---
+					if(note.getEffect().isGrace() && !percussionChannel ){
+						bendMode = true;
+						int graceKey = track.getOffset() + note.getEffect().getGrace().getFret() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue();
+						int graceLength = note.getEffect().getGrace().getDurationTime();
+						int graceVelocity = note.getEffect().getGrace().getDynamic();
+						long graceDuration = ((note.getEffect().getGrace().isDead())?applyStaticDuration(tempo, DEFAULT_DURATION_DEAD, graceLength):graceLength);
+						
+						if(note.getEffect().getGrace().isOnBeat() || (start - graceLength) < TGDuration.QUARTER_TIME){
+							start += graceLength;
+							duration -= graceLength;
+						}
+						makeNote(sh,track.getNumber(), graceKey,start - graceLength,graceDuration,graceVelocity,channel,midiVoice, bendMode);
+						
+					}
+					//---Trill---
+					if(note.getEffect().isTrill() && !percussionChannel ){
+						int trillKey = track.getOffset() + note.getEffect().getTrill().getFret() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue();
+						long trillLength = note.getEffect().getTrill().getDuration().getTime();
+						
+						boolean realKey = true;
+						long tick = start;
+						while(true){
+							if(tick + 10 >= (start + duration)){
+								break ;
+							}else if( (tick + trillLength) >= (start + duration)){
+								trillLength = (((start + duration) - tick) - 1);
+							}
+							makeNote(sh,track.getNumber(),((realKey)?key:trillKey),tick,trillLength,velocity,channel,midiVoice,bendMode);
+							realKey = (!realKey);
+							tick += trillLength;
+						}
+						continue;
+					}
+					//---Tremolo Picking---
+					if(note.getEffect().isTremoloPicking()){
+						long tpLength = note.getEffect().getTremoloPicking().getDuration().getTime();
+						long tick = start;
+						while(true){
+							if(tick + 10 >= (start + duration)){
+								break ;
+							}else if( (tick + tpLength) >= (start + duration)){
+								tpLength = (((start + duration) - tick) - 1);
+							}
+							makeNote(sh,track.getNumber(),key,tick,tpLength,velocity,channel,midiVoice,bendMode);
+							tick += tpLength;
+						}
+						continue;
+					}
+					
+					//---Bend---
+					if( note.getEffect().isBend() && !percussionChannel ){
+						bendMode = true;
+						makeBend(sh,track.getNumber(),start,duration,note.getEffect().getBend(),channel,midiVoice,bendMode);
+					}
+					//---TremoloBar---
+					else if( note.getEffect().isTremoloBar() && !percussionChannel ){
+						bendMode = true;
+						makeTremoloBar(sh,track.getNumber(),start,duration,note.getEffect().getTremoloBar(),channel,midiVoice,bendMode);
+					}
+					//---Slide---
+					else if( note.getEffect().isSlide() && !percussionChannel){
+						bendMode = true;
+						makeSlide(sh, note, track, mIndex, bIndex, startMove, channel,midiVoice,bendMode);
+					}
+					//---Vibrato---
+					else if( note.getEffect().isVibrato() && !percussionChannel){
+						bendMode = true;
+						makeVibrato(sh,track.getNumber(),start,duration,channel,midiVoice,bendMode);
+					}
+					//---Harmonic---
+					if( note.getEffect().isHarmonic() && !percussionChannel){
+						int orig = key;
+						
+						//Natural
+						if(note.getEffect().getHarmonic().isNatural()){
+							for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){
+								if((note.getValue() % 12) ==  (TGEffectHarmonic.NATURAL_FREQUENCIES[i][0] % 12) ){
+									key = ((orig + TGEffectHarmonic.NATURAL_FREQUENCIES[i][1]) - note.getValue());
+									break;
+								}
+							}
+						}
+						//Artifical/Tapped/Pinch/Semi
+						else{
+							if( note.getEffect().getHarmonic().isSemi() && !percussionChannel ){
+								makeNote(sh,track.getNumber(),Math.min(127,orig), start, duration,Math.max(TGVelocities.MIN_VELOCITY,velocity - (TGVelocities.VELOCITY_INCREMENT * 3)),channel,midiVoice,bendMode);
+							}
+							key = (orig + TGEffectHarmonic.NATURAL_FREQUENCIES[note.getEffect().getHarmonic().getData()][1]);
+							
+						}
+						if( (key - 12) > 0 ){
+							int hVelocity = Math.max(TGVelocities.MIN_VELOCITY,velocity - (TGVelocities.VELOCITY_INCREMENT * 4));
+							makeNote(sh,track.getNumber(),(key - 12), start, duration,hVelocity,channel,midiVoice,bendMode);
+						}
+					}
+					
+					//---Normal Note---
+					makeNote(sh,track.getNumber(), Math.min(127,key), start, duration, velocity,channel,midiVoice,bendMode);
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Crea una nota en la posicion start
+	 */
+	private void makeNote(MidiSequenceHelper sh,int track, int key, long start, long duration, int velocity, int channel, int midiVoice, boolean bendMode) {
+		sh.getSequence().addNoteOn(getTick(start),track,channel,fix(key),fix(velocity), midiVoice, bendMode);
+		if( duration > 0 ){
+			sh.getSequence().addNoteOff(getTick(start + duration),track,channel,fix(key),fix(velocity), midiVoice, bendMode);
+		}
+	}
+	
+	private void makeChannel(MidiSequenceHelper sh,TGChannel channel,int track) {
+		if((this.flags & ADD_MIXER_MESSAGES) != 0){
+			int channelId = channel.getChannelId();
+			long tick = getTick(TGDuration.QUARTER_TIME);
+			sh.getSequence().addControlChange(tick,track,channelId,MidiControllers.VOLUME,fix(channel.getVolume()));
+			sh.getSequence().addControlChange(tick,track,channelId,MidiControllers.BALANCE,fix(channel.getBalance()));
+			sh.getSequence().addControlChange(tick,track,channelId,MidiControllers.CHORUS,fix(channel.getChorus()));
+			sh.getSequence().addControlChange(tick,track,channelId,MidiControllers.REVERB,fix(channel.getReverb()));
+			sh.getSequence().addControlChange(tick,track,channelId,MidiControllers.PHASER,fix(channel.getPhaser()));
+			sh.getSequence().addControlChange(tick,track,channelId,MidiControllers.TREMOLO,fix(channel.getTremolo()));
+			sh.getSequence().addControlChange(tick,track,channelId,MidiControllers.EXPRESSION, 127);
+			if(!channel.isPercussionChannel()){
+				sh.getSequence().addControlChange(tick,track,channelId,MidiControllers.BANK_SELECT, fix(channel.getBank()));
+			}
+			sh.getSequence().addProgramChange(tick,track,channelId,fix(channel.getProgram()));
+		}
+	}
+	
+	/**
+	 * Agrega un Time Signature si es distinto al anterior
+	 */
+	private void addTimeSignature(MidiSequenceHelper sh,TGMeasure currMeasure, TGMeasure prevMeasure,long startMove){
+		boolean addTimeSignature = false;
+		if (prevMeasure == null) {
+			addTimeSignature = true;
+		} else {
+			int currNumerator = currMeasure.getTimeSignature().getNumerator();
+			int currValue = currMeasure.getTimeSignature().getDenominator().getValue();
+			int prevNumerator = prevMeasure.getTimeSignature().getNumerator();
+			int prevValue = prevMeasure.getTimeSignature().getDenominator().getValue();
+			if (currNumerator != prevNumerator || currValue != prevValue) {
+				addTimeSignature = true;
+			}
+		}
+		if (addTimeSignature) {
+			sh.getSequence().addTimeSignature(getTick(currMeasure.getStart() + startMove), getInfoTrack(), currMeasure.getTimeSignature());
+		}
+	}
+	
+	/**
+	 * Agrega un Tempo si es distinto al anterior
+	 */
+	private void addTempo(MidiSequenceHelper sh,TGMeasure currMeasure, TGMeasure prevMeasure,long startMove){
+		boolean addTempo = false;
+		if (prevMeasure == null) {
+			addTempo = true;
+		} else {
+			if (currMeasure.getTempo().getInUSQ() != prevMeasure.getTempo().getInUSQ()) {
+				addTempo = true;
+			}
+		}
+		if (addTempo) {
+			int usq = (int)(currMeasure.getTempo().getInUSQ() * 100.00 / this.tempoPercent );
+			sh.getSequence().addTempoInUSQ(getTick(currMeasure.getStart() + startMove), getInfoTrack(), usq);
+		}
+	}
+	
+	/**
+	 * Retorna la Duracion real de una nota, verificando si tiene otras ligadas
+	 */
+	private long getRealNoteDuration(MidiSequenceHelper sh, TGTrack track, TGNote note, TGTempo tempo, long duration,int mIndex, int bIndex) {
+		boolean letRing = (note.getEffect().isLetRing());
+		boolean letRingBeatChanged = false;
+		long lastEnd = (note.getVoice().getBeat().getStart() + note.getVoice().getDuration().getTime() + sh.getMeasureHelper(mIndex).getMove());
+		long realDuration = duration;
+		int nextBIndex = (bIndex + 1);
+		int mCount = sh.getMeasureHelpers().size();
+		for (int m = mIndex; m < mCount; m++) {
+			MidiMeasureHelper mh = sh.getMeasureHelper( m );
+			TGMeasure measure = track.getMeasure( mh.getIndex() );
+			
+			int beatCount = measure.countBeats();
+			for (int b = nextBIndex; b < beatCount; b++) {
+				TGBeat beat = measure.getBeat(b);
+				TGVoice voice = beat.getVoice(note.getVoice().getIndex());
+				if(!voice.isEmpty()){
+					if(voice.isRestVoice()){
+						return applyDurationEffects(note, tempo, realDuration);
+					}
+					int noteCount = voice.countNotes();
+					for (int n = 0; n < noteCount; n++) {
+						TGNote nextNote = voice.getNote( n );
+						if (!nextNote.equals(note) || mIndex != m ) {
+							if (nextNote.getString() == note.getString()) {
+								if (nextNote.isTiedNote()) {
+									realDuration += (mh.getMove() + beat.getStart() - lastEnd) + (nextNote.getVoice().getDuration().getTime());
+									lastEnd = (mh.getMove() + beat.getStart() + voice.getDuration().getTime());
+									letRing = (nextNote.getEffect().isLetRing());
+									letRingBeatChanged = true;
+								} else {
+									return applyDurationEffects(note, tempo, realDuration);
+								}
+							}
+						}
+					}
+					if(letRing && !letRingBeatChanged){
+						realDuration += ( voice.getDuration().getTime() );
+					}
+					letRingBeatChanged = false;
+				}
+			}
+			nextBIndex = 0;
+		}
+		return applyDurationEffects(note, tempo, realDuration);
+	}
+	
+	private long applyDurationEffects(TGNote note, TGTempo tempo, long duration){
+		//dead note
+		if(note.getEffect().isDeadNote()){
+			return applyStaticDuration(tempo, DEFAULT_DURATION_DEAD, duration);
+		}
+		//palm mute
+		if(note.getEffect().isPalmMute()){
+			return applyStaticDuration(tempo, DEFAULT_DURATION_PM, duration);
+		}
+		//staccato
+		if(note.getEffect().isStaccato()){
+			return (long)(duration * 50.00 / 100.00);
+		}
+		return duration;
+	}
+	
+	private long applyStaticDuration(TGTempo tempo, long duration, long maximum ){
+		long value = ( tempo.getValue() * duration / 60 );
+		return (value < maximum ? value : maximum );
+	}
+	
+	private int getRealVelocity(MidiSequenceHelper sh, TGNote note, TGTrack tgTrack, TGChannel tgChannel, int mIndex,int bIndex){
+		int velocity = note.getVelocity();
+		
+		//Check for Hammer effect
+		if(!tgChannel.isPercussionChannel()){
+			MidiNoteHelper previousNote = getPreviousNote(sh, note,tgTrack,mIndex,bIndex,false);
+			if(previousNote != null && previousNote.getNote().getEffect().isHammer()){
+				velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity - 25));
+			}
+		}
+		
+		//Check for GhostNote effect
+		if(note.getEffect().isGhostNote()){
+			velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity - TGVelocities.VELOCITY_INCREMENT));
+		}else if(note.getEffect().isAccentuatedNote()){
+			velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity + TGVelocities.VELOCITY_INCREMENT));
+		}else if(note.getEffect().isHeavyAccentuatedNote()){
+			velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity + (TGVelocities.VELOCITY_INCREMENT * 2)));
+		}
+		
+		return ((velocity > 127)?127:velocity);
+	}
+	
+	public void addMetronome(MidiSequenceHelper sh,TGMeasureHeader header, long startMove){
+		if( (this.flags & ADD_METRONOME) != 0) {
+			if( this.metronomeChannelId >= 0 ){
+				long start = (startMove + header.getStart());
+				long length = header.getTimeSignature().getDenominator().getTime();
+				for(int i = 1; i <= header.getTimeSignature().getNumerator();i ++){
+					makeNote(sh,getMetronomeTrack(),DEFAULT_METRONOME_KEY,start,length,TGVelocities.DEFAULT,this.metronomeChannelId,-1,false);
+					start += length;
+				}
+			}
+		}
+	}
+	
+	public void addDefaultMessages(MidiSequenceHelper sh, TGSong tgSong) {
+		if( (this.flags & ADD_DEFAULT_CONTROLS) != 0) {
+			Iterator it = tgSong.getChannels();
+			while ( it.hasNext() ){
+				int channelId = ((TGChannel) it.next()).getChannelId();
+				sh.getSequence().addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),channelId,MidiControllers.RPN_MSB,0);
+				sh.getSequence().addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),channelId,MidiControllers.RPN_LSB,0);
+				sh.getSequence().addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),channelId,MidiControllers.DATA_ENTRY_MSB,12);
+				sh.getSequence().addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),channelId,MidiControllers.DATA_ENTRY_LSB, 0);
+			}
+		}
+	}
+	
+	private void addBend(MidiSequenceHelper sh,int track, long tick,int bend, int channel, int midiVoice, boolean bendMode) {
+		sh.getSequence().addPitchBend(getTick(tick),track,channel,fix(bend), midiVoice, bendMode);
+	}
+	
+	public void makeVibrato(MidiSequenceHelper sh,int track,long start, long duration,int channel, int midiVoice, boolean bendMode){
+		long nextStart = start;
+		long end = nextStart + duration;
+		
+		while(nextStart < end){
+			nextStart = ((nextStart + 160 > end)?end:nextStart + 160);
+			addBend(sh, track, nextStart, DEFAULT_BEND, channel, midiVoice, bendMode);
+			nextStart = ((nextStart + 160 > end)?end:nextStart + 160);
+			addBend(sh, track, nextStart, DEFAULT_BEND + (int)(DEFAULT_BEND_SEMI_TONE / 2.0f), channel, midiVoice, bendMode);
+		}
+		addBend(sh, track, nextStart, DEFAULT_BEND, channel, midiVoice, bendMode);
+	}
+	
+	public void makeBend(MidiSequenceHelper sh,int track,long start, long duration, TGEffectBend bend, int channel, int midiVoice, boolean bendMode){
+		List points = bend.getPoints();
+		for(int i=0;i<points.size();i++){
+			TGEffectBend.BendPoint point = (TGEffectBend.BendPoint)points.get(i);
+			long bendStart = start + point.getTime(duration);
+			int value = DEFAULT_BEND + (int)(point.getValue() * DEFAULT_BEND_SEMI_TONE / TGEffectBend.SEMITONE_LENGTH);
+			value = ((value <= 127)?value:127);
+			value = ((value >= 0)?value:0);
+			addBend(sh, track, bendStart, value, channel, midiVoice, bendMode);
+			
+			if(points.size() > i + 1){
+				TGEffectBend.BendPoint nextPoint = (TGEffectBend.BendPoint)points.get(i + 1);
+				int nextValue = DEFAULT_BEND + (int)(nextPoint.getValue() * DEFAULT_BEND_SEMI_TONE / TGEffectBend.SEMITONE_LENGTH);
+				long nextBendStart = start + nextPoint.getTime(duration);
+				if(nextValue != value){
+					double width = ( (nextBendStart - bendStart) / Math.abs(  (nextValue - value) ) );
+					//ascendente
+					if(value < nextValue){
+						while(value < nextValue){
+							value ++;
+							bendStart +=width;
+							addBend(sh, track, bendStart,((value <= 127) ? value : 127), channel, midiVoice, bendMode);
+						}
+						//descendente
+					}else if(value > nextValue){
+						while(value > nextValue){
+							value --;
+							bendStart +=width;
+							addBend(sh, track, bendStart,((value >= 0) ? value : 0), channel, midiVoice, bendMode);
+						}
+					}
+				}
+			}
+		}
+		addBend(sh, track, start + duration, DEFAULT_BEND, channel, midiVoice, bendMode);
+	}
+	
+	public void makeTremoloBar(MidiSequenceHelper sh,int track,long start, long duration, TGEffectTremoloBar effect, int channel, int midiVoice, boolean bendMode){
+		List points = effect.getPoints();
+		for(int i=0;i<points.size();i++){
+			TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint)points.get(i);
+			long pointStart = start + point.getTime(duration);
+			int value = DEFAULT_BEND + (int)(point.getValue() * (DEFAULT_BEND_SEMI_TONE * 2) );
+			value = ((value <= 127)?value:127);
+			value = ((value >= 0)?value:0);
+			addBend(sh, track, pointStart, value, channel, midiVoice, bendMode);
+			if(points.size() > i + 1){
+				TGEffectTremoloBar.TremoloBarPoint nextPoint = (TGEffectTremoloBar.TremoloBarPoint)points.get(i + 1);
+				int nextValue = DEFAULT_BEND + (int)(nextPoint.getValue() * (DEFAULT_BEND_SEMI_TONE * 2));
+				long nextPointStart = start + nextPoint.getTime(duration);
+				if(nextValue != value){
+					double width = ( (nextPointStart - pointStart) / Math.abs(  (nextValue - value) ) );
+					//ascendente
+					if(value < nextValue){
+						while(value < nextValue){
+							value ++;
+							pointStart +=width;
+							addBend(sh, track, pointStart,((value <= 127) ? value : 127), channel, midiVoice, bendMode);
+						}
+					//descendente
+					}else if(value > nextValue){
+						while(value > nextValue){
+							value --;
+							pointStart += width;
+							addBend(sh, track, pointStart,((value >= 0) ? value : 0), channel, midiVoice, bendMode);
+						}
+					}
+				}
+			}
+		}
+		addBend(sh, track, start + duration, DEFAULT_BEND, channel, midiVoice, bendMode);
+	}
+	
+	private void makeSlide(MidiSequenceHelper sh, TGNote note,TGTrack track, int mIndex, int bIndex, long startMove,int channel,int midiVoice,boolean bendMode){
+		MidiNoteHelper nextNote = this.getNextNote(sh, note, track, mIndex, bIndex, true);
+		if( nextNote != null ){
+			int value1 = note.getValue();
+			int value2 = nextNote.getNote().getValue();
+			
+			long tick1 = note.getVoice().getBeat().getStart() + startMove;
+			long tick2 = nextNote.getNote().getVoice().getBeat().getStart() + nextNote.getMeasure().getMove();
+			
+			// Make the Slide
+			this.makeSlide(sh, track.getNumber(), tick1, value1, tick2, value2, channel, midiVoice, bendMode);
+			// Normalize the Bend
+			this.addBend(sh,track.getNumber(), tick2 ,DEFAULT_BEND, channel, midiVoice, bendMode);
+		}
+	}
+	
+	public void makeSlide(MidiSequenceHelper sh,int track,long tick1,int value1,long tick2,int value2,int channel, int midiVoice, boolean bendMode){
+		long distance = (value2 - value1);
+		long length = (tick2 - tick1);
+		int points = (int)(length / (TGDuration.QUARTER_TIME / 8));
+		for(int i = 1;i <= points; i ++){
+			float tone = ((((length / points) * (float)i) * distance) / length);
+			int bend = (DEFAULT_BEND + (int)(tone * (DEFAULT_BEND_SEMI_TONE * 2)));
+			addBend(sh, track, tick1 + ( (length / points) * i), bend, channel, midiVoice, bendMode);
+		}
+	}
+	
+	private void makeFadeIn(MidiSequenceHelper sh,int track,long start,long duration,int volume3,int channel){
+		int expression = 31;
+		int expressionIncrement = 1;
+		long tick = start;
+		long tickIncrement = (duration / ((127 - expression) / expressionIncrement));
+		while( tick < (start + duration) && expression < 127 ) {
+			sh.getSequence().addControlChange(getTick(tick),track,channel,MidiControllers.EXPRESSION, fix(expression));
+			tick += tickIncrement;
+			expression += expressionIncrement;
+		}
+		sh.getSequence().addControlChange(getTick((start + duration)),track,channel, MidiControllers.EXPRESSION, 127);
+	}
+	
+	private int[] getStroke(TGBeat beat, TGBeat previous, int[] stroke){
+		int direction = beat.getStroke().getDirection();
+		if( previous == null || !(direction == TGStroke.STROKE_NONE && previous.getStroke().getDirection() == TGStroke.STROKE_NONE)){
+			if( direction == TGStroke.STROKE_NONE ){
+				for( int i = 0 ; i < stroke.length ; i ++ ){
+					stroke[ i ] = 0;
+				}
+			}else{
+				int stringUseds = 0;
+				int stringCount = 0;
+				for( int vIndex = 0; vIndex < beat.countVoices(); vIndex ++ ){
+					TGVoice voice = beat.getVoice(vIndex);
+					for (int nIndex = 0; nIndex < voice.countNotes(); nIndex++) {
+						TGNote note = voice.getNote(nIndex);
+						if( !note.isTiedNote() ){
+							stringUseds |= 0x01 << ( note.getString() - 1 );
+							stringCount ++;
+						}
+					}
+				}
+				if( stringCount > 0 ){
+					int strokeMove = 0;
+					int strokeIncrement = beat.getStroke().getIncrementTime(beat);
+					for( int i = 0 ; i < stroke.length ; i ++ ){
+						int index = ( direction == TGStroke.STROKE_DOWN ? (stroke.length - 1) - i : i );
+						if( (stringUseds & ( 0x01 << index ) ) != 0 ){
+							stroke[ index ] = strokeMove;
+							strokeMove += strokeIncrement;
+						}
+					}
+				}
+			}
+		}
+		return stroke;
+	}
+	
+	private long applyStrokeStart( TGNote note, long start , int[] stroke){
+		return (start + stroke[ note.getString() - 1 ]);
+	}
+	
+	private long applyStrokeDuration( TGNote note, long duration , int[] stroke){
+		return (duration > stroke[note.getString() - 1] ? (duration - stroke[ note.getString() - 1 ]) : duration );
+	}
+	
+	private MidiTickHelper checkTripletFeel(TGVoice voice,int bIndex){
+		long bStart = voice.getBeat().getStart();
+		long bDuration =  voice.getDuration().getTime();
+		if(voice.getBeat().getMeasure().getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){
+			if(voice.getDuration().isEqual(newDuration(TGDuration.EIGHTH))){
+				//first time
+				if( (bStart % TGDuration.QUARTER_TIME) == 0){
+					TGVoice v = getNextBeat(voice,bIndex);
+					if(v == null || ( v.getBeat().getStart() > (bStart + voice.getDuration().getTime()) || v.getDuration().isEqual(newDuration(TGDuration.EIGHTH)))  ){
+						TGDuration duration = newDuration(TGDuration.EIGHTH);
+						duration.getDivision().setEnters(3);
+						duration.getDivision().setTimes(2);
+						bDuration = (duration.getTime() * 2);
+					}
+				}
+				//second time
+				else if( (bStart % (TGDuration.QUARTER_TIME / 2)) == 0){
+					TGVoice v = getPreviousBeat(voice,bIndex);
+					if(v == null || ( v.getBeat().getStart() < (bStart - voice.getDuration().getTime())  || v.getDuration().isEqual(newDuration(TGDuration.EIGHTH)) )){
+						TGDuration duration = newDuration(TGDuration.EIGHTH);
+						duration.getDivision().setEnters(3);
+						duration.getDivision().setTimes(2);
+						bStart = ( (bStart - voice.getDuration().getTime()) + (duration.getTime() * 2));
+						bDuration = duration.getTime();
+					}
+				}
+			}
+		}else if(voice.getBeat().getMeasure().getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){
+			if(voice.getDuration().isEqual(newDuration(TGDuration.SIXTEENTH))){
+				//first time
+				if( (bStart % (TGDuration.QUARTER_TIME / 2)) == 0){
+					TGVoice v = getNextBeat(voice,bIndex);
+					if(v == null || ( v.getBeat().getStart() > (bStart + voice.getDuration().getTime()) || v.getDuration().isEqual(newDuration(TGDuration.SIXTEENTH)))  ){
+						TGDuration duration = newDuration(TGDuration.SIXTEENTH);
+						duration.getDivision().setEnters(3);
+						duration.getDivision().setTimes(2);
+						bDuration = (duration.getTime() * 2);
+					}
+				}
+				//second time
+				else if( (bStart % (TGDuration.QUARTER_TIME / 4)) == 0){
+					TGVoice v = getPreviousBeat(voice,bIndex);
+					if(v == null || ( v.getBeat().getStart() < (bStart - voice.getDuration().getTime())  || v.getDuration().isEqual(newDuration(TGDuration.SIXTEENTH)) )){
+						TGDuration duration = newDuration(TGDuration.SIXTEENTH);
+						duration.getDivision().setEnters(3);
+						duration.getDivision().setTimes(2);
+						bStart = ( (bStart - voice.getDuration().getTime()) + (duration.getTime() * 2));
+						bDuration = duration.getTime();
+					}
+				}
+			}
+		}
+		return new MidiTickHelper(bStart, bDuration);
+	}
+	
+	private TGDuration newDuration(int value){
+		TGDuration duration = this.manager.getFactory().newDuration();
+		duration.setValue(value);
+		return duration;
+	}
+	
+	private TGVoice getPreviousBeat(TGVoice beat,int bIndex){
+		TGVoice previous = null;
+		for (int b = bIndex - 1; b >= 0; b--) {
+			TGBeat current = beat.getBeat().getMeasure().getBeat( b );
+			if(current.getStart() < beat.getBeat().getStart() && !current.getVoice(beat.getIndex()).isEmpty()){
+				if(previous == null || current.getStart() > previous.getBeat().getStart()){
+					previous = current.getVoice(beat.getIndex());
+				}
+			}
+		}
+		return previous;
+	}
+	
+	private TGVoice getNextBeat(TGVoice beat,int bIndex){
+		TGVoice next = null;
+		for (int b = bIndex + 1; b < beat.getBeat().getMeasure().countBeats(); b++) {
+			TGBeat current = beat.getBeat().getMeasure().getBeat( b );
+			if(current.getStart() > beat.getBeat().getStart() && !current.getVoice(beat.getIndex()).isEmpty()){
+				if(next == null || current.getStart() < next.getBeat().getStart()){
+					next = current.getVoice(beat.getIndex());
+				}
+			}
+		}
+		return next;
+	}
+	
+	private MidiNoteHelper getNextNote(MidiSequenceHelper sh, TGNote note,TGTrack track, int mIndex, int bIndex, boolean breakAtRest){ 
+		int nextBIndex = (bIndex + 1);
+		int measureCount = sh.getMeasureHelpers().size();
+		for (int m = mIndex; m < measureCount; m++) {
+			MidiMeasureHelper mh = sh.getMeasureHelper( m );
+			
+			TGMeasure measure = track.getMeasure( mh.getIndex() );
+			int beatCount = measure.countBeats();
+			for (int b = nextBIndex; b < beatCount; b++) {
+				TGBeat beat = measure.getBeat( b );
+				TGVoice voice = beat.getVoice( note.getVoice().getIndex() );
+				if( !voice.isEmpty() ){
+					int noteCount = voice.countNotes();
+					for (int n = 0; n < noteCount; n++) {
+						TGNote nextNote = voice.getNote( n );
+						if(nextNote.getString() == note.getString()){
+							return new MidiNoteHelper(mh,nextNote);
+						}
+					}
+					if( breakAtRest ){
+						return null;
+					}
+				}
+			}
+			nextBIndex = 0;
+		}
+		return null;
+	}
+	
+	private MidiNoteHelper getPreviousNote(MidiSequenceHelper pHelper, TGNote note,TGTrack track, int mIndex, int bIndex, boolean breakAtRest){
+		int nextBIndex = bIndex;
+		for (int m = mIndex; m >= 0; m--) {
+			MidiMeasureHelper mh = pHelper.getMeasureHelper( m );
+			
+			TGMeasure measure = track.getMeasure( mh.getIndex() );
+			if( this.sHeader == -1 || this.sHeader <= measure.getNumber() ){
+				nextBIndex = (nextBIndex < 0 ? measure.countBeats() : nextBIndex);
+				for (int b = (nextBIndex - 1); b >= 0; b--) {
+					TGBeat beat = measure.getBeat( b );
+					TGVoice voice = beat.getVoice( note.getVoice().getIndex() );
+					if( !voice.isEmpty() ){
+						int noteCount = voice.countNotes();
+						for (int n = 0; n < noteCount; n ++) {
+							TGNote current = voice.getNote( n );
+							if(current.getString() == note.getString()){
+								return new MidiNoteHelper(mh,current);
+							}
+						}
+						if( breakAtRest ){
+							return null;
+						}
+					}
+				}
+			}
+			nextBIndex = -1;
+		}
+		return null;
+	}
+	
+	private class MidiTickHelper{
+		private long start;
+		private long duration;
+		
+		public MidiTickHelper(long start,long duration){
+			this.start = start;
+			this.duration = duration;
+		}
+		
+		public long getDuration() {
+			return this.duration;
+		}
+		
+		public long getStart() {
+			return this.start;
+		}
+	}
+	
+	private class MidiNoteHelper {
+		
+		private MidiMeasureHelper measure;
+		private TGNote note;
+		
+		public MidiNoteHelper(MidiMeasureHelper measure, TGNote note){
+			this.measure = measure;
+			this.note = note;
+		}
+		
+		public MidiMeasureHelper getMeasure() {
+			return this.measure;
+		}
+		
+		public TGNote getNote() {
+			return this.note;
+		}
+	}
+	
+	private class MidiMeasureHelper {
+		
+		private int index;
+		private long move;
+		
+		public MidiMeasureHelper(int index,long move){
+			this.index = index;
+			this.move = move;
+		}
+		
+		public int getIndex() {
+			return this.index;
+		}
+		
+		public long getMove() {
+			return this.move;
+		}
+	}
+	
+	private class MidiSequenceHelper {
+		
+		private List measureHeaderHelpers;
+		private MidiSequenceHandler sequence;
+		
+		public MidiSequenceHelper(MidiSequenceHandler sequence){
+			this.sequence = sequence;
+			this.measureHeaderHelpers = new ArrayList();
+		}
+		
+		public MidiSequenceHandler getSequence(){
+			return this.sequence;
+		}
+		
+		public void addMeasureHelper( MidiMeasureHelper helper ){
+			this.measureHeaderHelpers.add( helper );
+		}
+		
+		public List getMeasureHelpers(){
+			return this.measureHeaderHelpers;
+		}
+		
+		public MidiMeasureHelper getMeasureHelper( int index ){
+			return (MidiMeasureHelper)this.measureHeaderHelpers.get( index );
+		}
+
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencer.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequencer.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencer.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequencer.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequencerEmpty.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequencerEmpty.java
new file mode 100644
index 0000000..59481f4
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequencerEmpty.java
@@ -0,0 +1,102 @@
+package org.herac.tuxguitar.player.base;
+
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+
+public class MidiSequencerEmpty implements MidiSequencer{
+	
+	public void open() {
+		// Not implemented
+	}	
+	
+	public void close() {
+		// Not implemented
+	}
+	
+	public void check() {
+		// Not implemented
+	}
+	
+	public MidiSequenceHandler createSequence(int tracks) {
+		return new MidiSequenceHandler(tracks) {
+			
+			public void notifyFinish() {
+				// Not implemented
+			}
+			
+			public void addTimeSignature(long tick, int track, TGTimeSignature ts) {
+				// Not implemented
+			}
+			
+			public void addTempoInUSQ(long tick, int track, int usq) {
+				// Not implemented
+			}
+			
+			public void addProgramChange(long tick, int track, int channel,int instrument) {
+				// Not implemented
+			}
+			
+			public void addPitchBend(long tick, int track, int channel, int value, int voice, boolean bendMode) {
+				// Not implemented
+			}
+			
+			public void addNoteOn(long tick, int track, int channel, int note,int velocity, int voice, boolean bendMode) {
+				// Not implemented
+			}
+			
+			public void addNoteOff(long tick, int track, int channel, int note,int velocity, int voice, boolean bendMode) {
+				// Not implemented
+			}
+			
+			public void addControlChange(long tick, int track, int channel,int controller, int value) {
+				// Not implemented
+			}
+		};
+	}
+	
+	public void setTransmitter(MidiTransmitter transmitter) throws MidiPlayerException {
+		// Not implemented
+	}
+	
+	public long getTickLength() {
+		// Not implemented
+		return 0;
+	}
+	
+	public long getTickPosition() {
+		// Not implemented
+		return 0;
+	}
+	
+	public boolean isRunning() {
+		// Not implemented
+		return false;
+	}
+	
+	public void setMute(int index, boolean mute) {
+		//not implemented
+	}
+	
+	public void setSolo(int index, boolean solo) {
+		// Not implemented
+	}
+	
+	public void setTickPosition(long tickPosition) {
+		// Not implemented
+	}
+	
+	public void start() {
+		// Not implemented
+	}
+	
+	public void stop() {
+		// Not implemented
+	}
+	
+	public String getKey() {
+		return null;
+	}
+	
+	public String getName() {
+		return null;
+	}	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencerProvider.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequencerProvider.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencerProvider.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSequencerProvider.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSynthesizer.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSynthesizer.java
new file mode 100644
index 0000000..a1a615e
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSynthesizer.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.player.base;
+
+public interface MidiSynthesizer {
+	
+	public MidiChannel openChannel(int channelId) throws MidiPlayerException;
+	
+	public void closeChannel(MidiChannel midiChannel) throws MidiPlayerException;
+	
+	public boolean isChannelOpen(MidiChannel midiChannel) throws MidiPlayerException;
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSynthesizerProxy.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSynthesizerProxy.java
new file mode 100644
index 0000000..b3d342b
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiSynthesizerProxy.java
@@ -0,0 +1,38 @@
+package org.herac.tuxguitar.player.base;
+
+public class MidiSynthesizerProxy implements MidiSynthesizer{
+	
+	private MidiSynthesizer midiSynthesizer;
+	
+	public MidiSynthesizerProxy(){
+		super();
+	}
+	
+	public MidiChannel openChannel(int channelId) throws MidiPlayerException{
+		if( this.midiSynthesizer != null ){
+			return this.midiSynthesizer.openChannel(channelId);
+		}
+		return null;
+	}
+	
+	public void closeChannel(MidiChannel midiChannel) throws MidiPlayerException{
+		if( this.midiSynthesizer != null ){
+			this.midiSynthesizer.closeChannel(midiChannel);
+		}
+	}
+	
+	public boolean isChannelOpen(MidiChannel midiChannel) throws MidiPlayerException{
+		if( this.midiSynthesizer != null ){
+			return this.midiSynthesizer.isChannelOpen(midiChannel);
+		}
+		return false;
+	}
+	
+	public MidiSynthesizer getMidiSynthesizer() {
+		return this.midiSynthesizer;
+	}
+	
+	public void setMidiSynthesizer(MidiSynthesizer midiSynthesizer) {
+		this.midiSynthesizer = midiSynthesizer;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiTransmitter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiTransmitter.java
new file mode 100644
index 0000000..6db8fd3
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/base/MidiTransmitter.java
@@ -0,0 +1,113 @@
+package org.herac.tuxguitar.player.base;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MidiTransmitter {
+	
+	private List receivers;
+	
+	public MidiTransmitter(){
+		this.receivers = new ArrayList();
+	}
+	
+	public void sendNoteOn(int channel, int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
+			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
+			receiver.getReceiver().sendNoteOn(channel, key, velocity, voice, bendMode);
+		}
+	}
+	
+	public void sendNoteOff(int channel, int key, int velocity, int voice, boolean bendMode) throws MidiPlayerException {
+		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
+			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
+			receiver.getReceiver().sendNoteOff(channel, key, velocity, voice, bendMode);
+		}
+	}
+	
+	public void sendPitchBend(int channel, int value, int voice, boolean bendMode) throws MidiPlayerException {
+		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
+			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
+			receiver.getReceiver().sendPitchBend(channel, value, voice, bendMode);
+		}
+	}
+	
+	public void sendProgramChange(int channel, int value) throws MidiPlayerException {
+		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
+			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
+			receiver.getReceiver().sendProgramChange(channel, value);
+		}
+	}
+	
+	public void sendControlChange(int channel, int controller, int value) throws MidiPlayerException {
+		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
+			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
+			receiver.getReceiver().sendControlChange(channel, controller, value);
+		}
+	}
+	
+	public void sendParameter(int channel, String key, String value) throws MidiPlayerException{
+		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
+			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
+			receiver.getReceiver().sendParameter(channel, key, value);
+		}
+	}
+	
+	public void sendAllNotesOff() throws MidiPlayerException {
+		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
+			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
+			receiver.getReceiver().sendAllNotesOff();
+		}
+	}
+	
+	public void sendPitchBendReset() throws MidiPlayerException {
+		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
+			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
+			receiver.getReceiver().sendPitchBendReset();
+		}
+	}
+	
+	public void addReceiver(String id, MidiReceiver receiver){
+		MidiReceiverItem item = getReceiver( id );
+		if( item == null ){
+			this.receivers.add( new MidiReceiverItem( id , receiver ) );
+		}
+	}
+	
+	public void removeReceiver(String id){
+		MidiReceiverItem item = getReceiver( id );
+		if( item != null ){
+			this.receivers.remove( item );
+		}
+	}
+	
+	private MidiReceiverItem getReceiver(String id){
+		if( id != null ){
+			for( int i = 0 ; i < this.receivers.size() ; i ++ ){
+				MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
+				if( receiver.getId() != null && receiver.getId().equals( id ) ){
+					return receiver;
+				}
+			}
+		}
+		return null;
+	}
+	
+	private class MidiReceiverItem {
+		private String id;
+		private MidiReceiver receiver;
+		
+		public MidiReceiverItem(String id, MidiReceiver receiver){
+			this.id = id;
+			this.receiver = receiver;
+		}
+		
+		public String getId() {
+			return this.id;
+		}
+		
+		public MidiReceiver getReceiver() {
+			return this.receiver;
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiEvent.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiEvent.java
new file mode 100644
index 0000000..e10cee9
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiEvent.java
@@ -0,0 +1,73 @@
+package org.herac.tuxguitar.player.impl.sequencer;
+
+public class MidiEvent {
+	
+	public static final int ALL_TRACKS = -1;
+	
+	public static final int MIDI_SYSTEM_EVENT = 1;
+	public static final int MIDI_EVENT_NOTEON = 2;
+	public static final int MIDI_EVENT_NOTEOFF = 3;
+	public static final int MIDI_EVENT_PROGRAM_CHANGE = 4;
+	public static final int MIDI_EVENT_CONTROL_CHANGE = 5;
+	public static final int MIDI_EVENT_PITCH_BEND = 6;
+	
+	private long tick;
+	private int type;
+	private int track;
+	private byte[] data;
+	
+	public MidiEvent(long tick,int type,byte[] data){
+		this(tick,type,ALL_TRACKS,data);
+	}
+	
+	public MidiEvent(long tick,int type,int track,byte[] data){
+		this.tick = tick;
+		this.type = type;
+		this.track = track;
+		this.data = data;
+	}
+	
+	public long getTick() {
+		return this.tick;
+	}
+	
+	public int getType() {
+		return this.type;
+	}
+	
+	public int getTrack() {
+		return this.track;
+	}
+	
+	public byte[] getData() {
+		return this.data;
+	}
+	
+	public static MidiEvent systemReset(long tick){
+		return new MidiEvent(tick,MIDI_SYSTEM_EVENT,ALL_TRACKS,null);
+	}
+	
+	public static MidiEvent noteOn(long tick,int track,int channel,int key,int velocity,int voice,boolean bendMode){
+		return new MidiEvent(tick,MIDI_EVENT_NOTEON,track,new byte[]{(byte)channel,(byte)key,(byte)velocity,(byte)voice,(byte)(bendMode?1:0)});
+	}
+	
+	public static MidiEvent noteOff(long tick,int track,int channel,int key,int velocity,int voice,boolean bendMode){
+		return new MidiEvent(tick,MIDI_EVENT_NOTEOFF,track,new byte[]{(byte)channel,(byte)key,(byte)velocity,(byte)voice,(byte)(bendMode?1:0)});
+	}
+	
+	public static MidiEvent pitchBend(long tick,int track,int channel,int value,int voice,boolean bendMode){
+		return new MidiEvent(tick,MIDI_EVENT_PITCH_BEND,track,new byte[]{(byte)channel,(byte)value,(byte)voice,(byte)(bendMode?1:0)});
+	}
+	
+	public static MidiEvent controlChange(long tick,int track,int channel,int controller,int value){
+		return new MidiEvent(tick,MIDI_EVENT_CONTROL_CHANGE,track,new byte[]{(byte)channel,(byte)controller,(byte)value});
+	}
+	
+	public static MidiEvent programChange(long tick,int track,int channel,int value){
+		return new MidiEvent(tick,MIDI_EVENT_PROGRAM_CHANGE,track,new byte[]{(byte)channel,(byte)value});
+	}
+	
+	public static MidiEvent tempoInUSQ(long tick,int usq){
+		return new MidiEvent(tick,MIDI_SYSTEM_EVENT,new byte[]{0x51,(byte) (usq & 0xff),(byte) ((usq >> 8) & 0xff),(byte) ((usq >> 16) & 0xff)});
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventDispacher.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventDispacher.java
new file mode 100644
index 0000000..2fd19c0
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventDispacher.java
@@ -0,0 +1,35 @@
+package org.herac.tuxguitar.player.impl.sequencer;
+
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+
+public class MidiEventDispacher{
+	private MidiSequencerImpl sequencer;
+	
+	public MidiEventDispacher(MidiSequencerImpl sequencer){
+		this.sequencer = sequencer;
+	}
+	
+	public void dispatch(MidiEvent event) throws MidiPlayerException{
+		if(event.getType() == MidiEvent.MIDI_EVENT_NOTEON){
+			this.sequencer.getTransmitter().sendNoteOn(event.getData()[0],event.getData()[1],event.getData()[2],event.getData()[3],(event.getData()[4] == 1));
+		}
+		else if(event.getType() == MidiEvent.MIDI_EVENT_NOTEOFF){
+			this.sequencer.getTransmitter().sendNoteOff(event.getData()[0],event.getData()[1],event.getData()[2],event.getData()[3],(event.getData()[4] == 1));
+		}
+		else if(event.getType() == MidiEvent.MIDI_EVENT_PITCH_BEND){
+			this.sequencer.getTransmitter().sendPitchBend(event.getData()[0],event.getData()[1],event.getData()[2],(event.getData()[3] == 1));
+		}
+		else if(event.getType() == MidiEvent.MIDI_EVENT_CONTROL_CHANGE){
+			this.sequencer.getTransmitter().sendControlChange(event.getData()[0],event.getData()[1],event.getData()[2]);
+		}
+		else if(event.getType() == MidiEvent.MIDI_EVENT_PROGRAM_CHANGE){
+			this.sequencer.getTransmitter().sendProgramChange(event.getData()[0],event.getData()[1]);
+		}
+		else if(event.getType() == MidiEvent.MIDI_SYSTEM_EVENT){
+			if(event.getData()[0] == 0x51){
+				int usq = ((event.getData()[1] & 0xff) | ((event.getData()[2] & 0xff) << 8) | ((event.getData()[3] & 0xff) << 16));
+				this.sequencer.setTempo( (int)((60.00 * 1000.00) / (usq / 1000.00)) );
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventPlayer.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventPlayer.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventPlayer.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventPlayer.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequenceHandlerImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequenceHandlerImpl.java
new file mode 100644
index 0000000..075f25a
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequenceHandlerImpl.java
@@ -0,0 +1,47 @@
+package org.herac.tuxguitar.player.impl.sequencer;
+
+import org.herac.tuxguitar.player.base.MidiSequenceHandler;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+
+public class MidiSequenceHandlerImpl extends MidiSequenceHandler{
+	
+	private MidiSequencerImpl seq;
+	
+	public MidiSequenceHandlerImpl(MidiSequencerImpl seq,int tracks) {
+		super(tracks);
+		this.seq = seq;
+		this.seq.getMidiTrackController().init(getTracks());
+	}
+	
+	public void addControlChange(long tick,int track,int channel, int controller, int value) {
+		this.seq.addEvent(MidiEvent.controlChange(tick, track, channel, controller, value));
+	}
+	
+	public void addNoteOff(long tick,int track,int channel, int note, int velocity, int voice, boolean bendMode) {
+		this.seq.addEvent(MidiEvent.noteOff(tick, track, channel, note, velocity, voice, bendMode));
+	}
+	
+	public void addNoteOn(long tick,int track,int channel, int note, int velocity, int voice, boolean bendMode) {
+		this.seq.addEvent(MidiEvent.noteOn(tick, track, channel, note, velocity, voice, bendMode));
+	}
+	
+	public void addPitchBend(long tick,int track,int channel, int value, int voice, boolean bendMode) {
+		this.seq.addEvent(MidiEvent.pitchBend(tick, track, channel, value, voice, bendMode));
+	}
+	
+	public void addProgramChange(long tick,int track,int channel, int instrument) {
+		this.seq.addEvent(MidiEvent.programChange(tick, track, channel, instrument));
+	}
+	
+	public void addTempoInUSQ(long tick,int track,int usq) {
+		this.seq.addEvent(MidiEvent.tempoInUSQ(tick, usq));
+	}
+	
+	public void addTimeSignature(long tick,int track,TGTimeSignature ts) {
+		//not implemented
+	}
+	
+	public void notifyFinish(){
+		//not implemented
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerImpl.java
new file mode 100644
index 0000000..00a9e91
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerImpl.java
@@ -0,0 +1,176 @@
+package org.herac.tuxguitar.player.impl.sequencer;
+
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.base.MidiSequenceHandler;
+import org.herac.tuxguitar.player.base.MidiSequencer;
+import org.herac.tuxguitar.player.base.MidiTransmitter;
+
+public class MidiSequencerImpl implements MidiSequencer{
+	
+	private boolean reset;
+	private boolean running;
+	private boolean stopped;
+	private MidiTransmitter transmitter;
+	private MidiTickPlayer midiTickPlayer;
+	private MidiEventPlayer midiEventPlayer;
+	private MidiEventDispacher midiEventDispacher;
+	private MidiTrackController midiTrackController;
+	
+	public MidiSequencerImpl(){
+		this.running = false;
+		this.stopped = true;
+		this.midiTickPlayer = new MidiTickPlayer();
+		this.midiEventPlayer = new MidiEventPlayer(this);
+		this.midiEventDispacher = new MidiEventDispacher(this);
+		this.midiTrackController = new MidiTrackController(this);
+	}
+	
+	public synchronized MidiTrackController getMidiTrackController(){
+		return this.midiTrackController;
+	}
+	
+	public synchronized void setTempo(int tempo){
+		this.midiTickPlayer.setTempo(tempo);
+	}
+	
+	public synchronized long getTickPosition(){
+		return this.midiTickPlayer.getTick();
+	}
+	
+	public synchronized void setTickPosition(long tickPosition){
+		this.reset = true;
+		this.midiTickPlayer.setTick(tickPosition);
+	}
+	
+	public synchronized long getTickLength(){
+		return this.midiTickPlayer.getTickLength();
+	}
+	
+	public synchronized void sendEvent(MidiEvent event) throws MidiPlayerException{
+		if(!this.reset){
+			this.midiEventDispacher.dispatch(event);
+		}
+	}
+	
+	public synchronized void addEvent(MidiEvent event){
+		this.midiEventPlayer.addEvent(event);
+		this.midiTickPlayer.notifyTick(event.getTick());
+	}
+	
+	public synchronized boolean isRunning() {
+		return this.running;
+	}
+	
+	public synchronized void setRunning(boolean running) throws MidiPlayerException {
+		this.running = running;
+		if(this.running){
+			this.setTempo(120);
+			this.setTickPosition( this.getTickPosition() );
+			new MidiTimer(this).start();
+		}else{
+			this.process();
+		}
+	}
+	
+	public synchronized void stop() throws MidiPlayerException{
+		this.setRunning(false);
+	}
+	
+	public synchronized void start() throws MidiPlayerException{
+		this.setRunning(true);
+	}
+	
+	public synchronized void reset()  throws MidiPlayerException{
+		this.getTransmitter().sendAllNotesOff();
+		this.getTransmitter().sendPitchBendReset();
+	}
+	
+	protected synchronized boolean process() throws MidiPlayerException{
+		boolean running = this.isRunning();
+		if(running){
+			if(this.reset){
+				this.reset();
+				this.reset = false;
+				this.midiEventPlayer.reset();
+			}
+			this.stopped = false;
+			this.midiTickPlayer.process();
+			this.midiEventPlayer.process();
+			if(this.getTickPosition() > this.getTickLength()){
+				this.stop();
+			}
+		}
+		else if( !this.stopped ){
+			this.stopped = true;
+			this.midiEventPlayer.clearEvents();
+			this.midiTickPlayer.clearTick();
+			this.reset();
+		}
+		return running;
+	}
+	
+	public synchronized MidiTransmitter getTransmitter() {
+		return this.transmitter;
+	}
+	
+	public synchronized void setTransmitter(MidiTransmitter transmitter) {
+		this.transmitter = transmitter;
+	}
+	
+	public void check() {
+		// Not implemented
+	}
+	
+	public synchronized void open() {
+		//not implemented
+	}
+	
+	public synchronized void close() throws MidiPlayerException {
+		if(isRunning()){
+			this.stop();
+		}
+	}
+	
+	public synchronized MidiSequenceHandler createSequence(int tracks) throws MidiPlayerException{
+		return new MidiSequenceHandlerImpl(this,tracks);
+	}
+	
+	public synchronized void setSolo(int index,boolean solo) throws MidiPlayerException{
+		this.getMidiTrackController().setSolo(index, solo);
+	}
+	
+	public synchronized void setMute(int index,boolean mute) throws MidiPlayerException{
+		this.getMidiTrackController().setMute(index, mute);
+	}
+	
+	public String getKey() {
+		return "tuxguitar.sequencer";
+	}
+	
+	public String getName() {
+		return "TuxGuitar Sequencer";
+	}
+	
+	private class MidiTimer extends Thread{
+		
+		private static final int TIMER_DELAY = 15;
+		
+		private MidiSequencerImpl sequencer;
+		
+		public MidiTimer(MidiSequencerImpl sequencer){
+			this.sequencer = sequencer;
+		}
+		
+		public void run() {
+			try {
+				synchronized(this.sequencer) {
+					while( this.sequencer.process() ){
+						this.sequencer.wait( TIMER_DELAY );
+					}
+				}
+			} catch (Throwable throwable) {
+				throwable.printStackTrace();
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerProviderImpl.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerProviderImpl.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerProviderImpl.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerProviderImpl.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiTickPlayer.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiTickPlayer.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiTickPlayer.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiTickPlayer.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrack.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrack.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrack.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrack.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrackController.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrackController.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrackController.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/player/impl/sequencer/MidiTrackController.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/plugin/TGMidiOutputPortProviderPlugin.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/plugin/TGMidiOutputPortProviderPlugin.java
new file mode 100644
index 0000000..63e60cb
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/plugin/TGMidiOutputPortProviderPlugin.java
@@ -0,0 +1,57 @@
+package org.herac.tuxguitar.player.plugin;
+
+import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGMidiOutputPortProviderPlugin implements TGPlugin{
+	
+	private boolean loaded;
+	private MidiOutputPortProvider provider;
+	
+	protected abstract MidiOutputPortProvider getProvider() throws TGPluginException;
+	
+	public void init() throws TGPluginException {
+		this.provider = getProvider();
+		this.loaded = false;
+	}
+	
+	public void close() throws TGPluginException {
+		try {
+			this.provider.closeAll();
+		} catch (Throwable throwable) {
+			throw new TGPluginException(throwable.getMessage(),throwable);
+		}
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded){
+			try {
+				MidiPlayer.getInstance().addOutputPortProvider(this.provider);
+				this.loaded = true;
+			} catch (Throwable throwable) {
+				throw new TGPluginException(throwable.getMessage(),throwable);
+			}
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded){
+			try {
+				MidiPlayer.getInstance().removeOutputPortProvider(this.provider);
+				this.loaded = false;
+			} catch (Throwable throwable) {
+				throw new TGPluginException(throwable.getMessage(),throwable);
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/player/plugin/TGMidiSequencerProviderPlugin.java b/TuxGuitar-lib/src/org/herac/tuxguitar/player/plugin/TGMidiSequencerProviderPlugin.java
new file mode 100644
index 0000000..7e213a0
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/player/plugin/TGMidiSequencerProviderPlugin.java
@@ -0,0 +1,57 @@
+package org.herac.tuxguitar.player.plugin;
+
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.player.base.MidiSequencerProvider;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGMidiSequencerProviderPlugin implements TGPlugin{
+	
+	private boolean loaded;
+	private MidiSequencerProvider provider;
+	
+	protected abstract MidiSequencerProvider getProvider() throws TGPluginException;
+	
+	public void init() throws TGPluginException {
+		this.provider = getProvider();
+		this.loaded = false;
+	}
+	
+	public void close() throws TGPluginException {
+		try {
+			this.provider.closeAll();
+		} catch (Throwable throwable) {
+			throw new TGPluginException(throwable.getMessage(),throwable);
+		}
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded){
+			try {
+				MidiPlayer.getInstance().addSequencerProvider(this.provider);
+				this.loaded = true;
+			} catch (Throwable throwable) {
+				throw new TGPluginException(throwable.getMessage(),throwable);
+			}
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded){
+			try {
+				MidiPlayer.getInstance().removeSequencerProvider(this.provider);
+				this.loaded = false;
+			} catch (Throwable throwable) {
+				throw new TGPluginException(throwable.getMessage(),throwable);
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/factory/TGFactory.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/factory/TGFactory.java
new file mode 100644
index 0000000..410bd28
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/factory/TGFactory.java
@@ -0,0 +1,201 @@
+package org.herac.tuxguitar.song.factory;
+
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGScale;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+public class TGFactory {
+	
+	public TGSong newSong(){
+		return new TGSong() {
+			//TGSong Implementation
+		};
+	}
+	
+	public TGLyric newLyric(){
+		return new TGLyric(){
+			//TGLyric Implementation
+		};
+	}
+	
+	public TGMarker newMarker(){
+		return new TGMarker(this){
+			//TGMarker Implementation
+		};
+	}
+	
+	public TGChord newChord(int length){
+		return new TGChord(length){
+			//TGChord Implementation
+		};
+	}
+	
+	public TGScale newScale(){
+		return new TGScale(){
+			//TGScale Implementation
+		};
+	}
+	
+	public TGColor newColor(){
+		return new TGColor(){
+			//TGColor Implementation
+		};
+	}
+	
+	public TGDuration newDuration(){
+		return new TGDuration(this){
+			//TGDuration Implementation
+		};
+	}
+	
+	public TGDivisionType newDivisionType(){
+		return new TGDivisionType(){
+			//TGDivisionType Implementation
+		};
+	}
+	
+	public TGTimeSignature newTimeSignature(){
+		return new TGTimeSignature(this){
+			//TGTimeSignature Implementation
+		};
+	}
+	
+	public TGTempo newTempo(){
+		return new TGTempo(){
+			//TGTempo Implementation
+		};
+	}
+	
+	public TGChannel newChannel(){
+		return new TGChannel(){
+			//TGChannel Implementation
+		};
+	}
+	
+	public TGChannelParameter newChannelParameter(){
+		return new TGChannelParameter(){
+			//TGChannelParameter Implementation
+		};
+	}
+	
+	public TGTrack newTrack(){
+		return new TGTrack(this){
+			//TGTrack Implementation
+		};
+	}
+	
+	public TGMeasureHeader newHeader(){
+		return new TGMeasureHeader(this){
+			//TGMeasureHeader Implementation
+		};
+	}
+	
+	public TGMeasure newMeasure(TGMeasureHeader header){
+		return new TGMeasure(header){
+			//TGMeasure Implementation
+		};
+	}
+	
+	public TGBeat newBeat(){
+		return new TGBeat(this){
+			//TGBeat Implementation
+		};
+	}
+	
+	public TGVoice newVoice(int index){
+		return new TGVoice(this, index){
+			//TGVoice Implementation
+		};
+	}
+	
+	public TGNote newNote(){
+		return new TGNote(this){
+			//TGNote Implementation
+		};
+	}
+	
+	public TGString newString(){
+		return new TGString(){
+			//TGString Implementation
+		};
+	}
+	
+	public TGStroke newStroke(){
+		return new TGStroke(){
+			//TGString Implementation
+		};
+	}
+	
+	public TGText newText(){
+		return new TGText(){
+			//TGString Implementation
+		};
+	}
+	
+	public TGNoteEffect newEffect(){
+		return new TGNoteEffect(){
+			//TGNoteEffect Implementation
+		};
+	}
+	
+	public TGEffectBend newEffectBend(){
+		return new TGEffectBend(){
+			//TGEffectBend Implementation
+		};
+	}
+	
+	public TGEffectTremoloBar newEffectTremoloBar(){
+		return new TGEffectTremoloBar(){
+			//TGEffectTremoloBar Implementation
+		};
+	}
+	
+	public TGEffectGrace newEffectGrace(){
+		return new TGEffectGrace(){
+			//TGEffectGrace Implementation
+		};
+	}
+	
+	public TGEffectHarmonic newEffectHarmonic(){
+		return new TGEffectHarmonic(){
+			//TGEffectHarmonic Implementation
+		};
+	}
+	
+	public TGEffectTrill newEffectTrill(){
+		return new TGEffectTrill(this){
+			//TGEffectTrill Implementation
+		};
+	}
+	
+	public TGEffectTremoloPicking newEffectTremoloPicking(){
+		return new TGEffectTremoloPicking(this){
+			//TGEffectTremoloPicking Implementation
+		};
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/helpers/TGSongSegment.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/helpers/TGSongSegment.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/helpers/TGSongSegment.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/helpers/TGSongSegment.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/helpers/TGSongSegmentHelper.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/helpers/TGSongSegmentHelper.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/helpers/TGSongSegmentHelper.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/helpers/TGSongSegmentHelper.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/helpers/TGTrackSegment.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/helpers/TGTrackSegment.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/helpers/TGTrackSegment.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/helpers/TGTrackSegment.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/managers/TGMeasureManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/managers/TGMeasureManager.java
new file mode 100644
index 0000000..1d11fcc
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/managers/TGMeasureManager.java
@@ -0,0 +1,2411 @@
+package org.herac.tuxguitar.song.managers;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+public class TGMeasureManager {
+	private TGSongManager songManager;
+	
+	public TGMeasureManager(TGSongManager songManager){
+		this.songManager = songManager;
+	}
+	
+	public TGSongManager getSongManager(){
+		return this.songManager;
+	}
+	
+	public void orderBeats(TGMeasure measure){
+		for(int i = 0;i < measure.countBeats();i++){
+			TGBeat minBeat = null;
+			for(int j = i;j < measure.countBeats();j++){
+				TGBeat beat = measure.getBeat(j);
+				if(minBeat == null || beat.getStart() < minBeat.getStart()){
+					minBeat = beat;
+				}
+			}
+			measure.moveBeat(i, minBeat);
+		}
+	}
+	
+	/**
+	 * Agrega un beat al compas
+	 */
+	public void addBeat(TGMeasure measure,TGBeat beat){
+		//Verifico si entra en el compas
+		//if(validateDuration(measure,beat,false,false)){
+			
+			//Agrego el beat
+			measure.addBeat(beat);
+		//}
+	}
+	
+	public void removeBeat(TGBeat beat){
+		beat.getMeasure().removeBeat(beat);
+	}
+	
+	public void removeBeat(TGMeasure measure,long start,boolean moveNextComponents){
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			removeBeat(beat, moveNextComponents);
+		}
+	}
+	
+	/**
+	 * Elimina un silencio del compas.
+	 * si se asigna moveNextComponents = true. los componentes que le siguen
+	 * se moveran para completar el espacio vacio que dejo el silencio
+	 */
+	public void removeBeat(TGBeat beat,boolean moveNextBeats){
+		TGMeasure measure = beat.getMeasure();
+		
+		removeBeat(beat);
+		if(moveNextBeats){
+			TGDuration minimumDuration = getMinimumDuration(beat);
+			long start = beat.getStart();
+			long length = (minimumDuration != null ? minimumDuration.getTime() : 0);
+			
+			TGBeat next = getNextBeat(measure.getBeats(),beat);
+			if(next != null){
+				length = next.getStart() - start;
+			}
+			moveBeatsInMeasure(beat.getMeasure(),start + length,-length, minimumDuration);
+		}
+	}
+	
+	public void removeEmptyBeats(TGMeasure measure){
+		List beats = new ArrayList();
+		Iterator it = measure.getBeats().iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			boolean emptyBeat = true;
+			for( int v = 0; v < beat.countVoices() ; v ++){
+				TGVoice voice = beat.getVoice( v );
+				if(!voice.isEmpty()){
+					emptyBeat = false;
+				}
+			}
+			if( emptyBeat ){
+				beats.add( beat );
+			}
+		}
+		
+		it = beats.iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			this.removeBeat( beat );
+		}
+	}
+		
+	public void removeBeatsBeforeEnd(TGMeasure measure,long fromStart){
+		List beats = getBeatsBeforeEnd( measure.getBeats() , fromStart);
+		Iterator it = beats.iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat) it.next();
+			removeBeat(beat);
+		}
+	}
+	
+	public void removeBeatsBetween(TGMeasure measure,long p1, long p2){
+		List beats = getBeatsBeetween( measure.getBeats() , p1, p2 );
+		Iterator it = beats.iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat) it.next();
+			removeBeat(beat);
+		}
+	}
+	
+	public void addNote(TGMeasure measure,long start, TGNote note, TGDuration duration, int voice){
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			addNote(beat, note, duration, voice);
+		}
+	}
+	
+	public void addNote(TGBeat beat, TGNote note, TGDuration duration, int voice){
+		addNote(beat, note, duration, beat.getStart(),voice);
+	}
+	
+	public void addNote(TGBeat beat, TGNote note, TGDuration duration, long start, int voice){
+		boolean emptyVoice = beat.getVoice( voice ).isEmpty();
+		if( emptyVoice ){
+			beat.getVoice( voice ).setEmpty( false );
+		}
+		
+		//Verifico si entra en el compas
+		if(validateDuration(beat.getMeasure(),beat, voice, duration,true,true)){
+			//Borro lo que haya en la misma posicion
+			for( int v = 0 ; v < beat.countVoices() ; v ++ ){
+				removeNote(beat.getMeasure(),beat.getStart(), v, note.getString(), false);
+			}
+			
+			duration.copy(beat.getVoice(voice).getDuration());
+			
+			//trato de agregar un silencio similar al lado
+			tryChangeSilenceAfter(beat.getMeasure(),beat.getVoice(voice));
+			
+			// Despues de cambiar la duracion, verifico si hay un beat mejor para agregar la nota.
+			TGVoice realVoice = beat.getVoice(voice);
+			if(realVoice.getBeat().getStart() != start){
+				TGVoice beatIn = getVoiceIn(realVoice.getBeat().getMeasure(), start, voice);
+				if( beatIn != null ) {
+					realVoice = beatIn;
+				}
+			}
+			realVoice.addNote(note);
+		}else{
+			beat.getVoice( voice ).setEmpty( emptyVoice );
+		}
+	}
+	
+	public void removeNote(TGNote note, boolean checkRestBeat){
+		//note.getVoice().removeNote(note);
+		TGVoice voice = note.getVoice();
+		if( voice != null ){
+			// Remove the note
+			voice.removeNote(note);
+			
+			TGBeat beat = voice.getBeat();
+			if(checkRestBeat && beat.isRestBeat()){
+				//Anulo un posible stroke
+				beat.getStroke().setDirection( TGStroke.STROKE_NONE );
+				
+				//Borro un posible acorde
+				if( beat.getMeasure() != null ){
+					removeChord(beat.getMeasure(), beat.getStart());
+				}
+			}
+		}
+	}
+	
+	public void removeNote(TGNote note){
+		this.removeNote(note, true);
+	}
+	
+	public void removeNote(TGMeasure measure,long start, int voiceIndex,int string){
+		this.removeNote(measure, start, voiceIndex, string, true);
+	}
+	
+	/**
+	 * Elimina los Componentes que empiecen en Start y esten en la misma cuerda
+	 * Si hay un Silencio lo borra sin importar la cuerda
+	 */
+	public void removeNote(TGMeasure measure,long start, int voiceIndex,int string, boolean checkRestBeat){
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			TGVoice voice = beat.getVoice(voiceIndex);
+			for( int i = 0; i < voice.countNotes(); i ++){
+				TGNote note = voice.getNote(i);
+				if(note.getString() == string){
+					removeNote(note , checkRestBeat);
+					return;
+				}
+			}
+		}
+	}
+	
+	public void removeNotesAfterString(TGMeasure measure,int string){
+		List notesToRemove = new ArrayList();
+		
+		Iterator beats = measure.getBeats().iterator();
+		while(beats.hasNext()){
+			TGBeat beat = (TGBeat)beats.next();
+			for(int v = 0; v < beat.countVoices(); v ++){
+				TGVoice voice = beat.getVoice( v );
+				Iterator notes = voice.getNotes().iterator();
+				while(notes.hasNext()){
+					TGNote note = (TGNote)notes.next();
+					if(note.getString() > string){
+						notesToRemove.add(note);
+					}
+				}
+			}
+		}
+		Iterator it = notesToRemove.iterator();
+		while(it.hasNext()){
+			TGNote note = (TGNote)it.next();
+			removeNote(note);
+		}
+	}
+	
+	/**
+	 * Retorna Todas las Notas en la posicion Start
+	 */
+	public List getNotes(TGMeasure measure,long start){
+		List notes = new ArrayList();
+		
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			for(int v = 0 ; v < beat.countVoices(); v ++){
+				TGVoice voice = beat.getVoice( v );
+				Iterator it = voice.getNotes().iterator();
+				while(it.hasNext()){
+					TGNote note = (TGNote)it.next();
+					notes.add(note);
+				}
+			}
+		}
+		return notes;
+	}
+	
+	/**
+	 * Retorna Todas las Notas en el pulso
+	 */
+	public List getNotes(TGBeat beat){
+		List notes = new ArrayList();
+		
+		if(beat != null){
+			for(int v = 0 ; v < beat.countVoices(); v ++){
+				TGVoice voice = beat.getVoice( v );
+				if( !voice.isEmpty() && !voice.isRestVoice() ){
+					Iterator it = voice.getNotes().iterator();
+					while(it.hasNext()){
+						TGNote note = (TGNote)it.next();
+						notes.add(note);
+					}
+				}
+			}
+		}
+		return notes;
+	}
+	
+	/**
+	 * Retorna la Nota en la posicion y cuerda
+	 */
+	public TGNote getNote(TGMeasure measure,long start,int string) {
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			return getNote(beat, string);
+		}
+		return null;
+	}
+	
+	/**
+	 * Retorna la Nota en la cuerda
+	 */
+	public TGNote getNote(TGBeat beat,int string) {
+		for( int v = 0; v < beat.countVoices(); v ++){
+			TGVoice voice = beat.getVoice(v);
+			if(!voice.isEmpty()){
+				TGNote note = getNote(voice, string);
+				if(note != null){
+					return note;
+				}
+			}
+		}
+		return null;
+	}
+	
+	public TGNote getNote(TGVoice voice,int string) {
+		Iterator it = voice.getNotes().iterator();
+		while(it.hasNext()){
+			TGNote note = (TGNote)it.next();
+			if (note.getString() == string) {
+				return note;
+			}
+		}
+		return null;
+	}
+	
+	public TGNote getPreviousNote(TGMeasure measure,long start, int voiceIndex, int string) {
+		TGBeat beat = getBeat(measure, start);
+		if( beat != null ){
+			TGBeat previous = getPreviousBeat(measure.getBeats(),beat);
+			while(previous != null){
+				TGVoice voice = previous.getVoice(voiceIndex);
+				if(!voice.isEmpty()){
+					for (int i = 0; i < voice.countNotes(); i++) {
+						TGNote current = voice.getNote(i);
+						if (current.getString() == string) {
+							return current;
+						}
+					}
+				}
+				previous = getPreviousBeat(measure.getBeats(),previous);
+			}
+		}
+		return null;
+	}
+	
+	public TGNote getNextNote(TGMeasure measure,long start, int voiceIndex, int string) {
+		TGBeat beat = getBeat(measure, start);
+		if( beat != null ){
+			TGBeat next = getNextBeat(measure.getBeats(),beat);
+			while(next != null){
+				TGVoice voice = next.getVoice(voiceIndex);
+				if(!voice.isEmpty()){
+					for (int i = 0; i < voice.countNotes(); i++) {
+						TGNote current = voice.getNote(i);
+						if (current.getString() == string) {
+							return current;
+						}
+					}
+				}
+				next = getNextBeat(measure.getBeats(),next);
+			}
+		}
+		return null;
+	}
+	
+	public TGDuration getMinimumDuration(TGBeat beat){
+		TGDuration minimumDuration = null;
+		for(int v = 0; v < beat.countVoices(); v ++){
+			TGVoice voice = beat.getVoice( v );
+			if( !voice.isEmpty() ){
+				if(minimumDuration == null || voice.getDuration().getTime() < minimumDuration.getTime()){
+					minimumDuration = voice.getDuration();
+				}
+			}
+		}
+		return minimumDuration;
+	}
+	
+	public TGBeat getBeat(TGTrack track,long start) {
+		Iterator measures = track.getMeasures();
+		while( measures.hasNext() ){
+			TGMeasure measure = (TGMeasure)measures.next();
+			Iterator beats = measure.getBeats().iterator();
+			while(beats.hasNext()){
+				TGBeat beat = (TGBeat)beats.next();
+				if (beat.getStart() == start) {
+					return beat;
+				}
+			}
+		}
+		return null;
+	}
+	/**
+	 * Retorna las Nota en la posicion y cuerda
+	 */
+	public TGBeat getBeat(TGMeasure measure,long start) {
+		Iterator it = measure.getBeats().iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			if (beat.getStart() == start) {
+				return beat;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Retorna las Nota en la posicion y cuerda
+	 */
+	public TGBeat getBeatIn(TGMeasure measure,long start) {
+		TGBeat beatIn = null;
+		Iterator it = measure.getBeats().iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			TGDuration duration = getMinimumDuration(beat);
+			if (beat.getStart() <= start && (beat.getStart() + duration.getTime() > start)) {
+				if(beatIn == null || beat.getStart() > beatIn.getStart()){
+					beatIn = beat;
+				}
+			}
+		}
+		return beatIn;
+	}
+	
+	/**
+	 * Retorna las Nota en la posicion y cuerda
+	 */
+	public TGVoice getVoiceIn(TGMeasure measure,long start, int voiceIndex) {
+		Iterator it = measure.getBeats().iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			TGVoice voice = beat.getVoice(voiceIndex);
+			if (!voice.isEmpty() && beat.getStart() <= start && (beat.getStart() + voice.getDuration().getTime() > start)) {
+				return voice;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Retorna el Siguiente Componente
+	 */
+	public TGBeat getNextBeat(List beats,TGBeat beat) {
+		TGBeat next = null;
+		for (int i = 0; i < beats.size(); i++) {
+			TGBeat current = (TGBeat) beats.get(i);
+			if (current.getStart() > beat.getStart()) {
+				if (next == null) {
+					next = current;
+				} else if (current.getStart() < next.getStart()) {
+					next = current;
+				} /*else if (current.getStart() == next.getStart() && current.getDuration().getTime() <= next.getDuration().getTime()) {
+					next = current;
+				}*/
+			}
+		}
+		return next;
+	}
+	
+	/**
+	 * Retorna el Componente Anterior
+	 */
+	public TGBeat getPreviousBeat(List beats,TGBeat beat) {
+		TGBeat previous = null;
+		for (int i = 0; i < beats.size(); i++) {
+			TGBeat current = (TGBeat) beats.get(i);
+			if (current.getStart() < beat.getStart()) {
+				if (previous == null) {
+					previous = current;
+				} else if (current.getStart() > previous.getStart()) {
+					previous = current;
+				} /*else if (current.getStart() == previous.getStart() && current.getDuration().getTime() <= previous.getDuration().getTime()) {
+					previous = current;
+				}*/
+			}
+		}
+		return previous;
+	}
+	
+	/**
+	 * Retorna el Primer Componente
+	 */
+	public TGBeat getFirstBeat(List components) {
+		TGBeat first = null;
+		for (int i = 0; i < components.size(); i++) {
+			TGBeat component = (TGBeat) components.get(i);
+			if (first == null || component.getStart() < first.getStart()) {
+				first = component;
+			}
+		}
+		return first;
+	}
+	
+	/**
+	 * Retorna el Ultimo Componente
+	 */
+	public TGBeat getLastBeat(List components) {
+		TGBeat last = null;
+		for (int i = 0; i < components.size(); i++) {
+			TGBeat component = (TGBeat) components.get(i);
+			if (last == null || last.getStart() < component.getStart()) {
+				last = component;
+			}
+		}
+		return last;
+	}
+	
+	/**
+	 * Retorna el Siguiente Componente
+	 */
+	/*
+	public TGBeat getNextRestBeat(List beats,TGBeat component) {
+		TGBeat next = getNextBeat(beats, component);
+		while(next != null && !next.isRestBeat()){
+			next = getNextBeat(beats, next);
+		}
+		return next;
+	}
+	*/
+	
+	/**
+	 * Retorna Todos los desde Start hasta el final del compas
+	 */
+	public List getBeatsBeforeEnd(List beats,long fromStart) {
+		List list = new ArrayList();
+		Iterator it = beats.iterator();
+		while(it.hasNext()){
+			TGBeat current = (TGBeat)it.next();
+			if (current.getStart() >= fromStart) {
+				list.add(current);
+			}
+		}
+		return list;
+	}
+	
+	public List getBeatsBeetween(List beats,long p1, long p2) {
+		List list = new ArrayList();
+		Iterator it = beats.iterator();
+		while(it.hasNext()){
+			TGBeat current = (TGBeat)it.next();
+			if (current.getStart() >= p1 && current.getStart() < p2 ) {
+				list.add(current);
+			}
+		}
+		return list;
+	}
+	
+	public void locateBeat( TGBeat beat, TGTrack track , boolean newMeasureAlsoForRestBeats) {
+		if( beat.getMeasure() != null ){
+			beat.getMeasure().removeBeat(beat);
+			beat.setMeasure(null);
+		}
+		TGMeasure newMeasure = getSongManager().getTrackManager().getMeasureAt(track, beat.getStart() );
+		if( newMeasure == null ){
+			boolean createNewMeasure = newMeasureAlsoForRestBeats;
+			if( !createNewMeasure ){
+				createNewMeasure = ( !beat.isRestBeat() || beat.isTextBeat() );
+			}
+			if( createNewMeasure ){
+				
+				while( newMeasure == null && beat.getStart() >= TGDuration.QUARTER_TIME){
+					getSongManager().addNewMeasureBeforeEnd();
+					newMeasure = getSongManager().getTrackManager().getMeasureAt(track, beat.getStart() );
+				}
+			}
+		}
+		if( newMeasure != null ){
+			long mStart = newMeasure.getStart();
+			long mLength = newMeasure.getLength();
+			long bStart = beat.getStart();
+			for( int v = 0 ; v < beat.countVoices() ; v ++ ){
+				TGVoice voice = beat.getVoice( v );
+				long vDuration = voice.getDuration().getTime();
+				if(!voice.isEmpty() && (bStart + vDuration) > (mStart + mLength) ){
+					long vTiedDuration = ( (bStart + vDuration) - (mStart + mLength) );
+					vDuration -= vTiedDuration;
+					if( vDuration > 0 ){
+						TGDuration duration = TGDuration.fromTime(getSongManager().getFactory(), vDuration);
+						if( duration != null ){
+							duration.copy( voice.getDuration() );
+						}
+					}
+					if( vTiedDuration > 0 ) {
+						TGDuration newVoiceDuration = TGDuration.fromTime(getSongManager().getFactory(), vTiedDuration);
+						if( newVoiceDuration != null ){
+							long newBeatStart = (bStart + vDuration);
+							TGBeat newBeat = getBeat(track, newBeatStart);
+							if( newBeat == null ){
+								newBeat = getSongManager().getFactory().newBeat();
+								newBeat.setStart( (bStart + vDuration) );
+							}
+							TGVoice newVoice = newBeat.getVoice( v );
+							for( int n = 0 ; n < voice.countNotes() ; n ++ ){
+								TGNote note = voice.getNote( n );
+								TGNote newNote = getSongManager().getFactory().newNote();
+								newNote.setTiedNote( true );
+								newNote.setValue( note.getValue() );
+								newNote.setString( note.getString() );
+								newNote.setVelocity( note.getVelocity() );
+								newVoice.addNote( newNote );
+							}
+							newVoice.setEmpty( false );
+							newVoiceDuration.copy( newVoice.getDuration() );
+							
+							locateBeat(newBeat, track, newMeasureAlsoForRestBeats);
+						}
+					}
+				}
+			}
+			
+			newMeasure.addBeat(beat);
+		}
+	}
+	
+	public void moveOutOfBoundsBeatsToNewMeasure(TGMeasure measure){
+		this.moveOutOfBoundsBeatsToNewMeasure(measure, true );
+	}
+	
+	public void moveOutOfBoundsBeatsToNewMeasure(TGMeasure measure, boolean newMeasureAlsoForRestBeats ){
+		List beats = new ArrayList();
+		long mStart = measure.getStart();
+		long mLength = measure.getLength();
+		for( int i = 0; i < measure.countBeats() ; i ++ ){
+			TGBeat beat = measure.getBeat( i );
+			if( beat.getStart() < mStart || beat.getStart() >= mStart + mLength ){
+				beats.add( beat );
+			}
+			else{
+				long bStart = beat.getStart();
+				for( int v = 0 ; v < beat.countVoices() ; v ++ ){
+					TGVoice voice = beat.getVoice( v );
+					long vDuration = voice.getDuration().getTime();
+					if(!voice.isEmpty() && (bStart + vDuration) > (mStart + mLength) ){
+						beats.add( beat );
+					}
+				}
+			}
+		}
+		while( !beats.isEmpty() ){
+			TGBeat beat = (TGBeat)beats.get( 0 );
+			if( beat.getMeasure() != null ){
+				beat.getMeasure().removeBeat(beat);
+				beat.setMeasure(null);
+			}
+			this.locateBeat(beat, measure.getTrack(), newMeasureAlsoForRestBeats);
+			
+			beats.remove(0);
+		}
+	}
+	
+	public boolean moveBeatsInMeasure(TGMeasure measure,long start,long theMove, TGDuration fillDuration){
+		if( theMove == 0 ){
+			return false;
+		}
+		boolean success = true;
+		long measureStart = measure.getStart();
+		long measureEnd =  (measureStart + measure.getLength());
+		
+		// Muevo los componentes
+		List beatsToMove = getBeatsBeforeEnd(measure.getBeats(),start);
+		moveBeats(beatsToMove,theMove);
+		
+		if(success){
+			List beatsToRemove = new ArrayList();
+			List beats = new ArrayList(measure.getBeats());
+			
+			// Verifica los silencios a eliminar al principio del compas
+			TGBeat first = getFirstBeat( beats );
+			while(first != null && first.isRestBeat() && !first.isTextBeat() && first.getStart() < measureStart){
+				beats.remove(first);
+				beatsToRemove.add(first);
+				first = getNextBeat( beats,first);
+			}
+			
+			// Verifica los silencios a eliminar al final del compas
+			TGBeat last = getLastBeat(beats);
+			TGDuration lastDuration = (last != null ? getMinimumDuration(last) : null);
+			while(last != null && lastDuration != null && last.isRestBeat() && !last.isTextBeat()  && (last.getStart() + lastDuration.getTime() ) > measureEnd  ){
+				beats.remove(last);
+				beatsToRemove.add(last);
+				last = getPreviousBeat(beats,last);
+				lastDuration = (last != null ? getMinimumDuration(last) : null);
+			}
+			
+			// Si el primer o ultimo componente, quedan fuera del compas, entonces el movimiento no es satisfactorio
+			if(first != null && last != null && lastDuration != null){
+				if(first.getStart() < measureStart || (last.getStart() + lastDuration.getTime()) > measureEnd){
+					success = false;
+				}
+			}
+			
+			if(success){
+				// Elimino los silencios que quedaron fuera del compas.
+				Iterator it = beatsToRemove.iterator();
+				while( it.hasNext() ){
+					TGBeat beat = (TGBeat)it.next();
+					removeBeat(beat);
+				}
+				
+				// Se crean silencios en los espacios vacios, si la duracion fue especificada.
+				if( fillDuration != null ){
+					if( theMove < 0 ){
+						last = getLastBeat(measure.getBeats());
+						lastDuration = (last != null ? getMinimumDuration(last) : null);
+						TGBeat beat = getSongManager().getFactory().newBeat();
+						beat.setStart( (last != null && lastDuration != null ? last.getStart()  + lastDuration.getTime() : start  )  );
+						if( (beat.getStart() + fillDuration.getTime()) <= measureEnd ){
+							for(int v = 0; v < beat.countVoices(); v ++){
+								TGVoice voice = beat.getVoice(v);
+								voice.setEmpty(false);
+								fillDuration.copy( voice.getDuration() );
+							}
+							addBeat(measure, beat );
+						}
+					}
+					else{
+						first = getFirstBeat(getBeatsBeforeEnd(measure.getBeats(),start));
+						TGBeat beat = getSongManager().getFactory().newBeat();
+						beat.setStart( start );
+						if( (beat.getStart() + fillDuration.getTime()) <= (first != null ?first.getStart() : measureEnd ) ){
+							for(int v = 0; v < beat.countVoices(); v ++){
+								TGVoice voice = beat.getVoice(v);
+								voice.setEmpty(false);
+								fillDuration.copy( voice.getDuration() );
+							}
+							addBeat(measure, beat );
+						}
+					}
+				}
+			}
+		}
+		
+		// Si el movimiento no es satisfactorio, regreso todo como estaba
+		if(! success ){
+			moveBeats(beatsToMove,-theMove);
+		}
+		
+		return success;
+	}
+	
+	public void moveAllBeats(TGMeasure measure,long theMove){
+		moveBeats(measure.getBeats(),theMove);
+	}
+	
+	public void moveBeats(TGMeasure measure, long start, long theMove){
+		moveBeats(getBeatsBeforeEnd(measure.getBeats(), start),theMove);
+	}
+	
+	/**
+	 * Mueve los componentes
+	 */
+	private void moveBeats(List beats,long theMove){
+		Iterator it = beats.iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			moveBeat(beat,theMove);
+		}
+	}
+	
+	/**
+	 * Mueve el componente
+	 */
+	private void moveBeat(TGBeat beat,long theMove){
+		//obtengo el start viejo
+		long start = beat.getStart();
+		
+		//asigno el nuevo start
+		beat.setStart(start + theMove);
+	}
+	
+	public void cleanBeat(TGBeat beat){
+		beat.getStroke().setDirection( TGStroke.STROKE_NONE );
+		if( beat.getText() != null ){
+			beat.removeText();
+		}
+		if( beat.getChord() != null){
+			beat.removeChord();
+		}
+		
+		this.cleanBeatNotes(beat);
+	}
+	
+	public void cleanBeatNotes(TGBeat beat){
+		for(int v = 0; v < beat.countVoices(); v ++){
+			cleanVoiceNotes(beat.getVoice( v ));
+		}
+	}
+	
+	public void cleanBeatNotes(TGMeasure measure, long start){
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			cleanBeatNotes(beat);
+		}
+	}
+	
+	public void cleanVoiceNotes(TGVoice voice){
+		if(!voice.isEmpty()){
+			while(voice.countNotes() > 0 ){
+				TGNote note = voice.getNote(0);
+				removeNote(note);
+			}
+		}
+	}
+	/**
+	 * Agrega el acorde al compas
+	 */
+	public void addChord(TGMeasure measure,long start, TGChord chord){
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			addChord(beat, chord);
+		}
+	}
+	
+	/**
+	 * Agrega el acorde al compas
+	 */
+	public void addChord(TGBeat beat,TGChord chord){
+		beat.removeChord();
+		beat.setChord(chord);
+	}
+	
+	/**
+	 * Retorna el acorde en la position
+	 */
+	public TGChord getChord(TGMeasure measure,long start) {
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			return beat.getChord();
+		}
+		return null;
+	}
+	
+	/**
+	 * Borra el acorde en la position
+	 */
+	public void removeChord(TGMeasure measure,long start) {
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			beat.removeChord();
+		}
+	}
+	
+	/**
+	 * Agrega el texto al compas
+	 */
+	public void addText(TGMeasure measure,long start, TGText text){
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			addText(beat, text);
+		}
+	}
+	
+	/**
+	 * Agrega el texto al compas
+	 */
+	public void addText(TGBeat beat,TGText text){
+		beat.removeText();
+		if(!text.isEmpty()){
+			beat.setText(text);
+		}
+	}
+	
+	/**
+	 * Retorna el texto en la position
+	 */
+	public TGText getText(TGMeasure measure,long start) {
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			return beat.getText();
+		}
+		return null;
+	}
+	
+	/**
+	 * Borra el texto en el pulso
+	 */
+	public void removeText(TGBeat beat){
+		beat.removeText();
+	}
+	
+	/**
+	 * Borra el texto en la position
+	 */
+	public boolean removeText(TGMeasure measure,long start) {
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			removeText(beat);
+			return true;
+		}
+		return false;
+	}
+	
+	public void cleanMeasure(TGMeasure measure){
+		while( measure.countBeats() > 0){
+			removeBeat( measure.getBeat(0));
+		}
+	}
+	
+	/**
+	 * Mueve la nota a la cuerda de arriba
+	 */
+	public int shiftNoteUp(TGMeasure measure,long start,int string){
+		return shiftNote(measure, start, string,-1);
+	}
+	
+	/**
+	 * Mueve la nota a la cuerda de abajo
+	 */
+	public int shiftNoteDown(TGMeasure measure,long start,int string){
+		return shiftNote(measure, start, string,1);
+	}
+	
+	/**
+	 * Mueve la nota a la siguiente cuerda
+	 */
+	private int shiftNote(TGMeasure measure,long start,int string,int move){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			int nextStringNumber = (note.getString() + move);
+			while(getNote(measure,start,nextStringNumber) != null){
+				nextStringNumber += move;
+			}
+			if(nextStringNumber >= 1 && nextStringNumber <= measure.getTrack().stringCount()){
+				TGString currentString = measure.getTrack().getString(note.getString());
+				TGString nextString = measure.getTrack().getString(nextStringNumber);
+				int noteValue = (note.getValue() + currentString.getValue());
+				boolean percussionChannel = getSongManager().isPercussionChannel(measure.getTrack().getChannelId());
+				if(noteValue >= nextString.getValue() && ((nextString.getValue() + 30 > noteValue) || percussionChannel) ){
+					note.setValue(noteValue - nextString.getValue());
+					note.setString(nextString.getNumber());
+					return note.getString();
+				}
+			}
+		}
+		return 0;
+	}
+	
+	/**
+	 * Mueve la nota 1 semitono arriba
+	 */
+	public boolean moveSemitoneUp(TGMeasure measure,long start,int string){
+		return moveSemitone(measure, start, string,1);
+	}
+	
+	/**
+	 * Mueve la nota 1 semitono abajo
+	 */
+	public boolean moveSemitoneDown(TGMeasure measure,long start,int string){
+		return moveSemitone(measure, start, string,-1);
+	}
+	
+	/**
+	 * Mueve la nota los semitonos indicados
+	 */
+	private boolean moveSemitone(TGMeasure measure,long start,int string,int semitones){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			int newValue = (note.getValue() + semitones);
+			if( newValue >= 0 && (newValue < 30 || getSongManager().isPercussionChannel(measure.getTrack().getChannelId())) ){
+				note.setValue(newValue);
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	/**
+	 * Set the beat stroke
+	 */
+	public boolean setStroke(TGMeasure measure,long start,int value, int direction){
+		TGBeat beat = getBeat(measure, start);
+		if( beat != null ){
+			beat.getStroke().setValue(value);
+			beat.getStroke().setDirection(direction);
+			return true;
+		}
+		return false;
+	}
+	
+	/**
+	 * Verifica si el componente se puede insertar en el compas.
+	 * si no puede, con la opcion removeSilences, verifica si el motivo por el
+	 * cual no entra es que lo siguen silencios. de ser asi los borra. 
+	 */
+	/*
+	public boolean validateDuration(TGMeasure measure,TGBeat beat,boolean moveNextComponents, boolean setCurrentDuration){
+		return validateDuration(measure, beat, beat.getDuration(),moveNextComponents, setCurrentDuration);
+	}
+	
+	
+	public boolean validateDuration(TGMeasure measure,TGBeat beat,TGDuration duration,boolean moveNextBeats, boolean setCurrentDuration){
+		int errorMargin = 10;
+		this.orderBeats(measure);
+		long measureStart = measure.getStart();
+		long measureEnd =  (measureStart + measure.getLength());
+		long beatStart = beat.getStart();
+		long beatLength = duration.getTime();
+		long beatEnd = (beatStart + beatLength);
+		List beats = measure.getBeats();
+		
+		//Verifico si hay un beat en el mismo lugar, y comparo las duraciones.
+		TGBeat currentBeat = getBeat(measure,beatStart);
+		if(currentBeat != null && beatLength <= currentBeat.getDuration().getTime()){
+			return true;
+		}
+		
+		//Verifico si hay lugar para meter el beat
+		TGBeat nextComponent = getNextBeat(beats,beat);
+		if(currentBeat == null){
+			if(nextComponent == null && beatEnd < (measureEnd + errorMargin)){
+				return true;
+			}
+			if(nextComponent != null && beatEnd < (nextComponent.getStart() + errorMargin)){
+				return true;
+			}
+		}
+		
+		// Busca si hay espacio disponible de silencios entre el componente y el el que le sigue.. si encuentra lo borra
+		if(nextComponent != null && nextComponent.isRestBeat()){
+			//Verifico si lo que sigue es un silencio. y lo borro
+			long nextBeatEnd = 0;
+			List nextBeats = new ArrayList();
+			while(nextComponent != null && nextComponent.isRestBeat() && !nextComponent.isTextBeat()){
+				nextBeats.add(nextComponent);
+				nextBeatEnd = nextComponent.getStart() + nextComponent.getDuration().getTime();
+				nextComponent = getNextBeat(beats,nextComponent);
+			}
+			if(nextComponent == null){
+				nextBeatEnd = measureEnd;
+			}else if(!nextComponent.isRestBeat() || nextComponent.isTextBeat()){
+				nextBeatEnd = nextComponent.getStart();
+			}
+			if(beatEnd <= (nextBeatEnd + errorMargin)){
+				while(!nextBeats.isEmpty()){
+					TGBeat currBeat = (TGBeat)nextBeats.get(0);
+					nextBeats.remove(currBeat);
+					removeBeat(currBeat, false);
+				}
+				return true;
+			}
+		}
+		
+		// Busca si hay espacio disponible de silencios entre el componente y el final.. si encuentra mueve todo
+		if(moveNextBeats){
+			nextComponent = getNextBeat(beats,beat);
+			if(nextComponent != null){
+				long requiredLength = (beatLength  - (nextComponent.getStart() - beatStart));
+				long nextSilenceLength = 0;
+				TGBeat nextRestBeat = getNextRestBeat(beats, beat);
+				while(nextRestBeat != null && !nextRestBeat.isTextBeat()){ 
+					nextSilenceLength += nextRestBeat.getDuration().getTime();
+					nextRestBeat = getNextRestBeat(beats, nextRestBeat);
+				}
+				
+				if(requiredLength <= (nextSilenceLength + errorMargin)){
+					beats = getBeatsBeforeEnd(measure.getBeats(),nextComponent.getStart());
+					while(!beats.isEmpty()){
+						TGBeat current = (TGBeat)beats.get(0);
+						if(current.isRestBeat() && !current.isTextBeat()){
+							requiredLength -= current.getDuration().getTime();
+							removeBeat(current, false);
+						}else if(requiredLength > 0){
+							moveBeat(current,requiredLength);
+						}
+						beats.remove(0);
+					}
+					return true;
+				}
+			}
+		}
+		
+		// como ultimo intento, asigno la duracion de cualquier componente existente en el lugar.
+		if(setCurrentDuration && currentBeat != null){
+			currentBeat.getDuration().copy( duration );
+			return true;
+		}
+		return false;
+	}
+	*/
+	/**
+	 * Cambia la Duracion del pulso.
+	 */
+	/*
+	@Deprecated
+	public void changeDuration(TGMeasure measure,TGBeat beat,TGDuration duration,boolean tryMove){
+		//obtengo la duracion vieja
+		TGDuration oldDuration = beat.getDuration().clone(getSongManager().getFactory());
+		
+		//si no entra vuelvo a dejar la vieja
+		if(validateDuration(measure,beat, duration,tryMove,false)){
+			//se lo agrego a todas las notas en la posicion
+			beat.setDuration(duration.clone(getSongManager().getFactory()));
+			
+			//trato de agregar un silencio similar al lado
+			tryChangeSilenceAfter(measure,beat);
+		}else{
+			oldDuration.copy( beat.getDuration() );
+		}
+	}
+	*/
+	/*
+	@Deprecated
+	public void tryChangeSilenceAfter(TGMeasure measure,TGBeat beat){
+		autoCompleteSilences(measure);
+		TGBeat nextBeat = getNextBeat(measure.getBeats(),beat);
+		
+		long beatEnd = (beat.getStart() + beat.getDuration().getTime());
+		long measureEnd = (measure.getStart() + measure.getLength());
+		if(nextBeat != null && nextBeat.isRestBeat() && beatEnd <= measureEnd){
+			long theMove = (getRealStart(measure,beatEnd)) - getRealStart(measure,nextBeat.getStart());
+			if((nextBeat.getStart() + theMove) < measureEnd && (nextBeat.getStart() + nextBeat.getDuration().getTime() + theMove) <= measureEnd){
+				moveBeat(nextBeat,theMove);
+				changeDuration(measure,nextBeat,beat.getDuration().clone(getSongManager().getFactory()),false);
+			}
+		}
+	}
+	*/
+	/**
+	 * Calcula si hay espacios libres. y crea nuevos silencios
+	 */
+	/*
+	public void autoCompleteSilences(TGMeasure measure){
+		List components = measure.getBeats();
+		
+		for( int i = 0; i < TGBeat.MAX_VOICES; i ++ ){
+			//TGBeat component = getFirstBeat(components);
+			TGVoice component = getFirstVoice(components, i);
+			
+			long start = measure.getStart();
+			long end = 0;
+			long diff = 0;
+			
+			while (component != null) {
+				end = component.getBeat().getStart() + component.getDuration().getTime();
+				if(component.getBeat().getStart() > start){
+					diff = component.getBeat().getStart() - start;
+					if(diff > 0){
+						createSilences(measure,start,diff, i);
+					}
+				}
+				start = end;
+				component = getNextVoice(components,component.getBeat(), i);
+			}
+			end = measure.getStart() + measure.getLength();
+			diff = end - start;
+			if(diff > 0){
+				createSilences(measure,start,diff, i);
+			}
+		}
+	}
+	*/
+	public void autoCompleteSilences(TGMeasure measure){
+		TGBeat beat = getFirstBeat( measure.getBeats() );
+		if( beat == null ){
+			createSilences(measure, measure.getStart(), measure.getLength(), 0);
+			return;
+		}
+		for( int v = 0 ; v < TGBeat.MAX_VOICES ; v ++ ){
+			TGVoice voice = getFirstVoice( measure.getBeats() , v );
+			if( voice != null && voice.getBeat().getStart() > measure.getStart() ){
+				createSilences(measure, measure.getStart(), (voice.getBeat().getStart() - measure.getStart()), v);
+			}
+		}
+		
+		long[] start = new long[beat.countVoices()];
+		long[] uncompletedLength = new long[beat.countVoices()];
+		for( int v = 0; v < uncompletedLength.length; v ++ ){
+			start[v] = 0;
+			uncompletedLength[v] = 0;
+		}
+		
+		while (beat != null) {
+			for( int v = 0; v < beat.countVoices(); v ++ ){
+				TGVoice voice = beat.getVoice( v );
+				if( !voice.isEmpty() ){
+					long voiceEnd = (beat.getStart() + voice.getDuration().getTime());
+					long nextPosition = (measure.getStart() + measure.getLength());
+					
+					TGVoice nextVoice = getNextVoice(measure.getBeats(), beat, voice.getIndex());
+					if(nextVoice != null){
+						nextPosition = nextVoice.getBeat().getStart();
+					}
+					if( voiceEnd < nextPosition ){
+						start[v] = voiceEnd;
+						uncompletedLength[v] = (nextPosition - voiceEnd);
+					}
+				}
+			}
+			
+			for( int v = 0; v < uncompletedLength.length; v ++ ){
+				if( uncompletedLength[v] > 0 ){
+					createSilences(measure,start[v],uncompletedLength[v], v);
+				}
+				start[v] = 0;
+				uncompletedLength[v] = 0;
+			}
+			beat = getNextBeat(measure.getBeats(), beat );
+		}
+	}
+	
+	/**
+	 * Crea Silencios temporarios en base a length
+	 */
+	private void createSilences(TGMeasure measure,long start,long length, int voiceIndex){
+		long nextStart = start;
+		List durations = createDurations(getSongManager().getFactory(),length);
+		Iterator it = durations.iterator();
+		while(it.hasNext()){
+			TGDuration duration = (TGDuration)it.next();
+			
+			boolean isNew = false;
+			long beatStart = getRealStart(measure, nextStart);
+			TGBeat beat = getBeat(measure, beatStart);
+			if( beat == null ){
+				beat = getSongManager().getFactory().newBeat();
+				beat.setStart( getRealStart(measure, nextStart) );
+				isNew = true;
+			}
+			//TGBeat beat = getSongManager().getFactory().newBeat();
+			//beat.setStart( getRealStart(measure, nextStart) );
+			
+			TGVoice voice = beat.getVoice(voiceIndex);
+			voice.setEmpty(false);
+			duration.copy(voice.getDuration());
+			
+			if( isNew ){
+				addBeat(measure,beat);
+			}
+			// temporal
+			//beat.getVoice(0).setEmpty(false);
+			//beat.getVoice(1).setEmpty(false);
+			// /temporal
+			
+			nextStart += duration.getTime();
+		}
+	}
+	
+	public long getRealStart(TGMeasure measure,long currStart){
+		long beatLength = TGSongManager.getDivisionLength(measure.getHeader());
+		long start = currStart;
+		boolean startBeat = (start % beatLength == 0);
+		if(!startBeat){
+			TGDuration minDuration = getSongManager().getFactory().newDuration();
+			minDuration.setValue(TGDuration.SIXTY_FOURTH);
+			minDuration.getDivision().setEnters(3);
+			minDuration.getDivision().setTimes(2);
+			for(int i = 0;i < minDuration.getTime();i++){
+				start ++;
+				startBeat = (start % beatLength == 0);
+				if(startBeat){
+				   break;
+				}
+			}
+			if(!startBeat){
+				start = currStart;
+			}
+		}
+		return start;
+	}
+	
+	/** 
+	 * Liga la nota
+	 */
+	public void changeTieNote(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			changeTieNote(note);
+		}
+	}
+	
+	/** 
+	 * Liga la nota
+	 */
+	public void changeTieNote(TGNote note){
+		note.setTiedNote(!note.isTiedNote());
+		note.getEffect().setDeadNote(false);
+	}
+	
+	/** 
+	 * Agrega un vibrato
+	 */
+	public void changeVibratoNote(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setVibrato(!note.getEffect().isVibrato());
+		}
+	}
+	
+	/** 
+	 * Agrega una nota muerta
+	 */
+	public void changeDeadNote(TGNote note){
+		note.getEffect().setDeadNote(!note.getEffect().isDeadNote());
+		note.setTiedNote(false);
+	}
+	
+	/** 
+	 * Agrega un slide
+	 */
+	public void changeSlideNote(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setSlide(!note.getEffect().isSlide());
+		}
+	}
+	
+	/** 
+	 * Agrega un hammer
+	 */
+	public void changeHammerNote(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setHammer(!note.getEffect().isHammer());
+		}
+	}
+	
+	/** 
+	 * Agrega un palm-mute
+	 */
+	public void changePalmMute(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setPalmMute(!note.getEffect().isPalmMute());
+		}
+	}
+	
+	/** 
+	 * Agrega un staccato
+	 */
+	public void changeStaccato(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setStaccato(!note.getEffect().isStaccato());
+		}
+	}
+	
+	/** 
+	 * Agrega un let-ring
+	 */
+	public void changeLetRing(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setLetRing(!note.getEffect().isLetRing());
+		}
+	}
+	
+	/** 
+	 * Agrega un tapping
+	 */
+	public void changeTapping(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setTapping(!note.getEffect().isTapping());
+		}
+	}
+	
+	/** 
+	 * Agrega un slapping
+	 */
+	public void changeSlapping(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setSlapping(!note.getEffect().isSlapping());
+		}
+	}
+	
+	/** 
+	 * Agrega un popping
+	 */
+	public void changePopping(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setPopping(!note.getEffect().isPopping());
+		}
+	}
+	
+	/** 
+	 * Agrega un bend
+	 */
+	public void changeBendNote(TGMeasure measure,long start,int string,TGEffectBend bend){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setBend(bend);
+		}
+	}
+	
+	/** 
+	 * Agrega un tremoloBar
+	 */
+	public void changeTremoloBar(TGMeasure measure,long start,int string,TGEffectTremoloBar tremoloBar){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setTremoloBar(tremoloBar);
+		}
+	}
+	
+	/** 
+	 * Agrega un GhostNote
+	 */
+	public void changeGhostNote(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){ 
+			note.getEffect().setGhostNote(!note.getEffect().isGhostNote());
+		}
+	}
+	
+	/** 
+	 * Agrega un AccentuatedNote
+	 */
+	public void changeAccentuatedNote(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){ 
+			note.getEffect().setAccentuatedNote(!note.getEffect().isAccentuatedNote());
+		}
+	}
+	
+	/** 
+	 * Agrega un GhostNote
+	 */
+	public void changeHeavyAccentuatedNote(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setHeavyAccentuatedNote(!note.getEffect().isHeavyAccentuatedNote());
+		}
+	}
+	
+	/** 
+	 * Agrega un harmonic
+	 */
+	public void changeHarmonicNote(TGMeasure measure,long start,int string,TGEffectHarmonic harmonic){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setHarmonic(harmonic);
+		}
+	}
+	
+	/** 
+	 * Agrega un grace
+	 */
+	public void changeGraceNote(TGMeasure measure,long start,int string,TGEffectGrace grace){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setGrace(grace);
+		}
+	}
+	
+	/** 
+	 * Agrega un trill
+	 */
+	public void changeTrillNote(TGMeasure measure,long start,int string,TGEffectTrill trill){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setTrill(trill);
+		}
+	}
+	
+	/** 
+	 * Agrega un tremolo picking
+	 */
+	public void changeTremoloPicking(TGMeasure measure,long start,int string,TGEffectTremoloPicking tremoloPicking){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setTremoloPicking(tremoloPicking);
+		}
+	}
+	
+	/** 
+	 * Agrega un fadeIn
+	 */
+	public void changeFadeIn(TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.getEffect().setFadeIn(!note.getEffect().isFadeIn());
+		}
+	}
+	
+	/** 
+	 * Cambia el Velocity
+	 */
+	public void changeVelocity(int velocity,TGMeasure measure,long start,int string){
+		TGNote note = getNote(measure,start,string);
+		if(note != null){
+			note.setVelocity(velocity);
+		}
+	}
+	/*
+	public static List createDurations(TGFactory factory,long time){
+		List durations = new ArrayList();
+		TGDuration tempDuration = factory.newDuration();
+		tempDuration.setValue(TGDuration.WHOLE);
+		tempDuration.setDotted(true);
+		long tempTime = time;
+		boolean finish = false;
+		while(!finish){
+			long currentDurationTime = tempDuration.getTime();
+			if(currentDurationTime <= tempTime){
+				durations.add(tempDuration.clone(factory));
+				tempTime -= currentDurationTime;
+			}else{
+				if(tempDuration.isDotted()){
+					tempDuration.setDotted(false);
+				}else{
+					tempDuration.setValue(tempDuration.getValue() * 2);
+					tempDuration.setDotted(true);
+				}
+			}
+			if(tempDuration.getValue() > TGDuration.SIXTY_FOURTH){
+				finish = true;
+			}
+		}
+		return durations;
+	}
+	*/
+	
+	public static List createDurations(TGFactory factory,long time){
+		List durations = new ArrayList();
+		TGDuration minimum = factory.newDuration();
+		minimum.setValue(TGDuration.SIXTY_FOURTH);
+		minimum.setDotted(false);
+		minimum.setDoubleDotted(false);
+		minimum.getDivision().setEnters(3);
+		minimum.getDivision().setTimes(2);
+		
+		long missingTime = time;
+		while( missingTime > minimum.getTime() ){
+			TGDuration duration = TGDuration.fromTime(factory, missingTime, minimum ,  10);
+			durations.add( duration.clone(factory) );
+			missingTime -= duration.getTime();
+		}
+		return durations;
+	}
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	
+	/**
+	 * Retorna el Siguiente Componente
+	 */
+	public TGVoice getNextVoice(List beats,TGBeat beat, int index) {
+		TGVoice next = null;
+		for (int i = 0; i < beats.size(); i++) {
+			TGBeat current = (TGBeat) beats.get(i);
+			if (current.getStart() > beat.getStart() && !current.getVoice(index).isEmpty()) {
+				if (next == null) {
+					next = current.getVoice(index);
+				} else if (current.getStart() < next.getBeat().getStart()) {
+					next = current.getVoice(index);
+				} /*else if (current.getStart() == next.getBeat().getStart() && current.getDuration().getTime() <= next.getDuration().getTime()) {
+					next = current.getVoice(index);
+				}*/
+			}
+		}
+		return next;
+	}
+	
+	/**
+	 * Retorna el Componente Anterior
+	 */
+	public TGVoice getPreviousVoice(List beats,TGBeat beat, int index) {
+		TGVoice previous = null;
+		for (int i = 0; i < beats.size(); i++) {
+			TGBeat current = (TGBeat) beats.get(i);
+			if (current.getStart() < beat.getStart() && !current.getVoice(index).isEmpty()) {
+				if (previous == null) {
+					previous = current.getVoice(index);
+				} else if (current.getStart() > previous.getBeat().getStart()) {
+					previous = current.getVoice(index);
+				} /*else if (current.getStart() == previous.getBeat().getStart() && current.getDuration().getTime() <= previous.getDuration().getTime()) {
+					previous = current.getVoice(index);
+				}*/
+			}
+		}
+		return previous;
+	}
+	
+	/**
+	 * Retorna el Primer Componente
+	 */
+	public TGVoice getFirstVoice(List beats, int index) {
+		TGVoice first = null;
+		for (int i = 0; i < beats.size(); i++) {
+			TGBeat current = (TGBeat) beats.get(i);
+			if ( (first == null || current.getStart() < first.getBeat().getStart() ) && !current.getVoice(index).isEmpty()) {
+				first = current.getVoice(index);
+			}
+		}
+		return first;
+	}
+	
+	/**
+	 * Retorna el Ultimo Componente
+	 */
+	public TGVoice getLastVoice(List beats, int index) {
+		TGVoice last = null;
+		for (int i = 0; i < beats.size(); i++) {
+			TGBeat current = (TGBeat) beats.get(i);
+			if ( (last == null || last.getBeat().getStart() < current.getStart()) && !current.getVoice(index).isEmpty() ) {
+				last = current.getVoice(index);
+			}
+		}
+		return last;
+	}
+	
+	
+	/**
+	 * Retorna el Siguiente Componente
+	 */
+	public TGVoice getNextRestVoice(List beats,TGVoice voice) {
+		TGVoice next = getNextVoice(beats, voice.getBeat(), voice.getIndex());
+		while(next != null && !next.isRestVoice()){
+			next = getNextVoice(beats, next.getBeat(), next.getIndex());
+		}
+		return next;
+	}
+	
+	public List getVoicesBeforeEnd(List beats,long fromStart, int index) {
+		List list = new ArrayList();
+		Iterator it = beats.iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			if (beat.getStart() >= fromStart) {
+				TGVoice voice = beat.getVoice(index);
+				if(!voice.isEmpty()){
+					list.add(voice);
+				}
+			}
+		}
+		return list;
+	}
+	
+	public void addSilence(TGMeasure measure,long start, TGDuration duration, int voice){
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			addSilence(beat, duration, voice);
+		}
+	}
+	
+	public void addSilence(TGBeat beat, TGDuration duration, int voice){
+		addSilence(beat, duration, beat.getStart(),voice);
+	}
+	
+	public void addSilence(TGBeat beat, TGDuration duration, long start, int voice){
+		boolean emptyVoice = beat.getVoice( voice ).isEmpty();
+		if( emptyVoice ){
+			beat.getVoice( voice ).setEmpty( false );
+		}
+		
+		//Verifico si entra en el compas
+		if(validateDuration(beat.getMeasure(),beat, voice, duration,true,true)){
+			//Borro lo que haya en la misma posicion
+			//removeNote(beat.getMeasure(),beat.getStart(),voice, note.getString());
+			
+			duration.copy(beat.getVoice(voice).getDuration());
+			
+			//trato de agregar un silencio similar al lado
+			tryChangeSilenceAfter(beat.getMeasure(),beat.getVoice(voice));
+			
+			// Despues de cambiar la duracion, verifico si hay un beat mejor para agregar el silencio.
+			TGVoice realVoice = beat.getVoice(voice);
+			if(realVoice.getBeat().getStart() != start){
+				TGVoice beatIn = getVoiceIn(realVoice.getBeat().getMeasure(), start, voice);
+				if( beatIn != null ) {
+					realVoice = beatIn;
+				}
+			}
+			realVoice.setEmpty(false);
+		}else{
+			beat.getVoice( voice ).setEmpty( emptyVoice );
+		}
+	}
+	
+	public void removeVoice(TGVoice voice){
+		voice.setEmpty(true);
+		
+		// Remove the beat If all voices are empty 
+		TGBeat beat = voice.getBeat();
+		for(int i = 0; i < beat.countVoices(); i ++){
+			if( !beat.getVoice(i).isEmpty() ){
+				return;
+			}
+		}
+		this.removeBeat(beat);
+	}
+	
+	public void removeVoice(TGVoice voice,boolean moveNextVoices){
+		removeVoice(voice);
+		if(moveNextVoices){
+			long start = voice.getBeat().getStart();
+			long length = voice.getDuration().getTime();
+			TGVoice next = getNextVoice(voice.getBeat().getMeasure().getBeats(),voice.getBeat(),voice.getIndex());
+			if(next != null){
+				length = next.getBeat().getStart() - start;
+			}
+			moveVoices(voice.getBeat().getMeasure(),start + length,-length, voice.getIndex(), voice.getDuration());
+		}
+	}
+	
+	public void removeVoice(TGMeasure measure,long start,int index, boolean moveNextComponents){
+		TGBeat beat = getBeat(measure, start);
+		if(beat != null){
+			removeVoice(beat.getVoice(index), moveNextComponents);
+		}
+	}
+	
+	public void removeVoicesOutOfTime(TGMeasure measure){
+		List voicesToRemove = new ArrayList();
+		
+		long mStart = measure.getStart();
+		long mEnd = mStart + measure.getLength();
+		
+		Iterator beats = measure.getBeats().iterator();
+		while(beats.hasNext()){
+			TGBeat beat = (TGBeat)beats.next();
+			for( int v = 0; v < beat.countVoices() ; v ++){
+				TGVoice voice = beat.getVoice( v );
+				if(!voice.isEmpty()){
+					if( beat.getStart() < mStart || (beat.getStart() + voice.getDuration().getTime()) > mEnd){
+						voicesToRemove.add( voice );
+					}
+				}
+			}
+		}
+		Iterator it = voicesToRemove.iterator();
+		while(it.hasNext()){
+			TGVoice voice = (TGVoice)it.next();
+			this.removeVoice( voice );
+		}
+	}
+	
+	public void removeMeasureVoices(TGMeasure measure,int index){
+		boolean hasNotes = false;
+		
+		List voices = new ArrayList();
+		Iterator it = measure.getBeats().iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			TGVoice voice = beat.getVoice(index);
+			if(voice.isRestVoice()){
+				voices.add(voice);
+			}else if(!voice.isEmpty()){
+				hasNotes = true;
+				break;
+			}
+		}
+		
+		if( !hasNotes ){
+			it = voices.iterator();
+			while(it.hasNext()){
+				TGVoice voice = (TGVoice)it.next();
+				this.removeVoice( voice );
+			}
+		}
+	}
+	
+	public void changeVoiceDirection( TGVoice voice , int direction){
+		voice.setDirection( direction );
+	}
+	
+	public void changeDuration(TGMeasure measure,TGBeat beat,TGDuration duration,int voice, boolean tryMove){
+		//obtengo la duracion vieja
+		TGDuration oldDuration = beat.getVoice(voice).getDuration().clone(getSongManager().getFactory());
+		
+		//si no entra vuelvo a dejar la vieja
+		if(validateDuration(measure,beat, voice, duration,tryMove,false)){
+			//se lo agrego a todas las notas en la posicion
+			beat.getVoice(voice).setDuration(duration.clone(getSongManager().getFactory()));
+			
+			//trato de agregar un silencio similar al lado
+			tryChangeSilenceAfter(measure,beat.getVoice(voice));
+		}else{
+			oldDuration.copy( beat.getVoice(voice).getDuration() );
+		}
+	}
+	
+	public void tryChangeSilenceAfter(TGMeasure measure,TGVoice voice){
+		autoCompleteSilences(measure);
+		
+		TGVoice nextVoice = getNextVoice(measure.getBeats(),voice.getBeat(),voice.getIndex());
+		
+		long beatEnd = (voice.getBeat().getStart() + voice.getDuration().getTime());
+		long measureEnd = (measure.getStart() + measure.getLength());
+		if(nextVoice != null && !nextVoice.isEmpty() && nextVoice.isRestVoice() && beatEnd <= measureEnd){
+			long theMove = (getRealStart(measure,beatEnd)) - getRealStart(measure,nextVoice.getBeat().getStart());
+			if((nextVoice.getBeat().getStart() + theMove) < measureEnd && (nextVoice.getBeat().getStart() + nextVoice.getDuration().getTime() + theMove) <= measureEnd){
+				moveVoice(nextVoice,theMove);
+				changeDuration(measure,nextVoice.getBeat(),voice.getDuration().clone(getSongManager().getFactory()),nextVoice.getIndex(),false);
+			}
+		}
+	}
+	
+	private void moveVoices(List voices,long theMove){
+		/*
+		Iterator it = voices.iterator();
+		while(it.hasNext()){
+			TGVoice voice = (TGVoice)it.next();
+			moveVoice(voice,theMove);
+		}
+		*/
+		int count = voices.size();
+		for( int i = 0 ; i < count ; i ++ ){
+			TGVoice voice = (TGVoice)voices.get( (theMove < 0 ? i : ( (count - 1) - i ) ) );
+			moveVoice(voice,theMove);
+		}
+	}
+	
+	public void moveVoice(TGVoice voice, long theMove){
+		long newStart = (voice.getBeat().getStart() + theMove);
+		
+		TGBeat newBeat = getBeat(voice.getBeat().getMeasure(),newStart);
+		if( newBeat == null ){
+			newBeat = getSongManager().getFactory().newBeat();
+			newBeat.setStart( newStart );
+			addBeat(voice.getBeat().getMeasure(), newBeat);
+		}
+		
+		this.moveVoice(voice, newBeat);
+	}
+	
+	public void moveVoice(TGVoice voice, TGBeat beat){
+		TGBeat currentBeat = voice.getBeat();
+		if(!currentBeat.equals(beat)){
+			if(currentBeat.getVoice( voice.getIndex() ).equals( voice )){
+				if ( currentBeat.isTextBeat() && isUniqueVoice(voice, false) ){
+						beat.setText( currentBeat.getText() );
+						currentBeat.removeText();
+				}
+				if( isUniqueVoice(voice, true) ){
+					if( currentBeat.isChordBeat() ){
+						beat.setChord( currentBeat.getChord() );
+						currentBeat.removeChord();
+					}
+					if( currentBeat.getStroke().getDirection() != TGStroke.STROKE_NONE ){
+						currentBeat.getStroke().copy( beat.getStroke() );
+						currentBeat.getStroke().setDirection(TGStroke.STROKE_NONE);
+					}
+				}
+				// Make sure to remove another voice instance from old beat.
+				TGVoice newVoice = getSongManager().getFactory().newVoice(voice.getIndex());
+				currentBeat.setVoice( voice.getIndex(), newVoice);
+				this.removeVoice(newVoice);
+			}
+			beat.setVoice( voice.getIndex() , voice);
+		}
+	}
+	
+	public boolean validateDuration(TGMeasure measure,TGBeat beat,int voice, TGDuration duration,boolean moveNextBeats, boolean setCurrentDuration){
+		int errorMargin = 10;
+		this.orderBeats(measure);
+		long measureStart = measure.getStart();
+		long measureEnd =  (measureStart + measure.getLength());
+		long beatStart = beat.getStart();
+		long beatLength = duration.getTime();
+		long beatEnd = (beatStart + beatLength);
+		List beats = measure.getBeats();
+		
+		//Verifico si hay un beat en el mismo lugar, y comparo las duraciones.
+		TGBeat currentBeat = getBeat(measure,beatStart);
+		TGVoice currentVoice = null;
+		if(currentBeat != null){
+			currentVoice = currentBeat.getVoice(voice);
+			if(!currentVoice.isEmpty() && beatLength <= currentVoice.getDuration().getTime()){
+				return true;
+			}
+		}
+		
+		//Verifico si hay lugar para meter el beat
+		TGVoice nextVoice = getNextVoice(beats,beat, voice);
+		if(currentVoice == null || currentVoice.isEmpty()){
+			if((nextVoice == null || nextVoice.isEmpty()) && beatEnd < (measureEnd + errorMargin)){
+				return true;
+			}
+			if((nextVoice != null && !nextVoice.isEmpty()) && beatEnd < (nextVoice.getBeat().getStart() + errorMargin)){
+				return true;
+			}
+		}
+		
+		// Busca si hay espacio disponible de silencios entre el componente y el el que le sigue.. si encuentra lo borra
+		if(nextVoice != null && !nextVoice.isEmpty() && nextVoice.isRestVoice()){
+			//Verifico si lo que sigue es un silencio. y lo borro
+			long nextBeatEnd = 0;
+			List nextBeats = new ArrayList();
+			while(nextVoice != null && !nextVoice.isEmpty() && nextVoice.isRestVoice() && !nextVoice.getBeat().isTextBeat()){
+				nextBeats.add(nextVoice);
+				nextBeatEnd = nextVoice.getBeat().getStart() + nextVoice.getDuration().getTime();
+				nextVoice = getNextVoice(beats,nextVoice.getBeat(), voice);
+			}
+			if(nextVoice == null || nextVoice.isEmpty()){
+				nextBeatEnd = measureEnd;
+			}else if(!nextVoice.isRestVoice() || nextVoice.getBeat().isTextBeat()){
+				nextBeatEnd = nextVoice.getBeat().getStart();
+			}
+			if(beatEnd <= (nextBeatEnd + errorMargin)){
+				while(!nextBeats.isEmpty()){
+					TGVoice currVoice = (TGVoice)nextBeats.get(0);
+					nextBeats.remove(currVoice);
+					removeVoice(currVoice, false);
+				}
+				return true;
+			}
+		}
+		
+		// Busca si hay espacio disponible de silencios entre el componente y el final.. si encuentra mueve todo
+		
+		if(moveNextBeats){
+			nextVoice = getNextVoice(beats,beat, voice);
+			if(nextVoice != null){
+				long requiredLength = (beatLength  - (nextVoice.getBeat().getStart() - beatStart));
+				long nextSilenceLength = 0;
+				TGVoice nextRestBeat = getNextRestVoice(beats, beat.getVoice(voice));
+				while(nextRestBeat != null){ 
+					nextSilenceLength += nextRestBeat.getDuration().getTime();
+					nextRestBeat = getNextRestVoice(beats, nextRestBeat);
+				}
+				
+				if(requiredLength <= (nextSilenceLength + errorMargin)){
+					List voices = getVoicesBeforeEnd(measure.getBeats(),nextVoice.getBeat().getStart(), voice);
+					while(!voices.isEmpty()){
+						TGVoice currVoice = (TGVoice)voices.get(0);
+						if(currVoice.isRestVoice()){
+							requiredLength -= currVoice.getDuration().getTime();
+							removeVoice(currVoice, false);
+						}else if(requiredLength > 0){
+							moveVoice(currVoice,requiredLength);
+						}
+						voices.remove(0);
+					}
+					return true;
+				}
+			}
+		}
+		
+		
+		// como ultimo intento, asigno la duracion de cualquier componente existente en el lugar.
+		if(setCurrentDuration && currentVoice != null && !currentVoice.isEmpty()){
+			currentVoice.getDuration().copy( duration );
+			return true;
+		}
+		return false;
+	}
+	/*
+	public boolean moveVoices(TGMeasure measure,long start,long theMove, int voiceIndex, TGDuration fillDuration){
+		if( theMove == 0 ){
+			return false;
+		}
+		boolean success = true;
+		long measureStart = measure.getStart();
+		long measureEnd =  (measureStart + measure.getLength());
+		
+		// Muevo los componentes
+		List voicesToMove = getVoicesBeforeEnd(measure.getBeats(),start, voiceIndex);
+		moveVoices(voicesToMove,theMove);
+		
+		if(success){
+			List voicesToRemove = new ArrayList();
+			List beats = new ArrayList(measure.getBeats());
+			
+			// Verifica los silencios a eliminar al principio del compas
+			TGVoice first = getFirstVoice( beats, voiceIndex );
+			while(first != null && first.isRestVoice() && first.getBeat().getStart() < measureStart){
+				beats.remove(first);
+				voicesToRemove.add(first);
+				first = getNextVoice( beats,first.getBeat(), voiceIndex);
+			}
+			
+			// Verifica los silencios a eliminar al final del compas
+			TGVoice last = getLastVoice(beats, voiceIndex);
+			TGDuration lastDuration = (last != null ? last.getDuration() : null);
+			while(last != null && lastDuration != null && last.isRestVoice() && (last.getBeat().getStart() + lastDuration.getTime() ) > measureEnd  ){
+				beats.remove(last);
+				voicesToRemove.add(last);
+				last = getPreviousVoice(beats,last.getBeat(), voiceIndex);
+				lastDuration = (last != null ? last.getDuration() : null);
+			}
+			
+			// Si el primer o ultimo componente, quedan fuera del compas, entonces el movimiento no es satisfactorio
+			if(first != null && last != null && lastDuration != null){
+				if(first.getBeat().getStart() < measureStart || (last.getBeat().getStart() + lastDuration.getTime()) > measureEnd){
+					success = false;
+				}
+			}
+			
+			if(success){
+				// Elimino los silencios que quedaron fuera del compas.
+				Iterator it = voicesToRemove.iterator();
+				while( it.hasNext() ){
+					TGVoice beat = (TGVoice)it.next();
+					removeVoice(beat);
+				}
+				
+				// Se crean silencios en los espacios vacios, si la duracion fue especificada.
+				if( fillDuration != null ){
+					if( theMove < 0 ){
+						last = getLastVoice(measure.getBeats(), voiceIndex);
+						lastDuration = (last != null ? last.getDuration() : null);
+						long beatStart = ( (last != null && lastDuration != null ? last.getBeat().getStart()  + lastDuration.getTime() : start  )  );
+						if( (beatStart + fillDuration.getTime()) <= measureEnd ){
+							boolean beatNew = false;
+							TGBeat beat = getBeat(measure, beatStart);
+							if(beat == null){
+								beat = getSongManager().getFactory().newBeat();
+								beat.setStart( beatStart );
+								beatNew = true;
+							}
+							TGVoice voice = beat.getVoice(voiceIndex);
+							voice.setEmpty(false);
+							fillDuration.copy( voice.getDuration() );
+							if( beatNew ){
+								addBeat(measure, beat );
+							}
+						}
+					}
+					else{
+						first = getFirstVoice(getBeatsBeforeEnd(measure.getBeats(),start), voiceIndex);
+						if( (start + fillDuration.getTime()) <= (first != null ?first.getBeat().getStart() : measureEnd ) ){
+							boolean beatNew = false;
+							TGBeat beat = getBeat(measure, start);
+							if(beat == null){
+								beat = getSongManager().getFactory().newBeat();
+								beat.setStart( start );
+								beatNew = true;
+							}
+							TGVoice voice = beat.getVoice(voiceIndex);
+							voice.setEmpty(false);
+							fillDuration.copy( voice.getDuration() );
+							if( beatNew ){
+								addBeat(measure, beat );
+							}
+						}
+					}
+				}
+			}
+		}
+		
+		// Si el movimiento no es satisfactorio, regreso todo como estaba
+		if(! success ){
+			moveVoices(voicesToMove,-theMove);
+		}
+		this.removeEmptyBeats(measure);
+		
+		return success;
+	}
+	*/
+		
+	public boolean moveVoices(TGMeasure measure,long start,long theMove, int voiceIndex, TGDuration fillDuration){
+		if( theMove == 0 ){
+			return false;
+		}
+		boolean success = true;
+		long measureStart = measure.getStart();
+		long measureEnd =  (measureStart + measure.getLength());
+		
+		List voicesToMove = getVoicesBeforeEnd(measure.getBeats(),start, voiceIndex);
+		List voicesToRemove = new ArrayList();
+		List currentBeats = getBeatsBeforeEnd(measure.getBeats(), start);
+		
+		// Verifica los silencios a eliminar al principio del compas
+		TGVoice first = getFirstVoice( currentBeats, voiceIndex );
+		while(first != null && first.isRestVoice() && (!first.getBeat().isTextBeat() || !isUniqueVoice(first,false)) && (first.getBeat().getStart() + theMove) < measureStart){
+			currentBeats.remove(first.getBeat());
+			voicesToRemove.add(first);
+			first = getNextVoice( currentBeats,first.getBeat(), voiceIndex);
+		}
+		
+		// Verifica los silencios a eliminar al final del compas
+		TGVoice last = getLastVoice(currentBeats, voiceIndex);
+		TGDuration lastDuration = (last != null ? last.getDuration() : null);
+		while(last != null && lastDuration != null && last.isRestVoice() && (!last.getBeat().isTextBeat() || !isUniqueVoice(last,false)) && (last.getBeat().getStart() + lastDuration.getTime() + theMove) > measureEnd  ){
+			currentBeats.remove(last.getBeat());
+			voicesToRemove.add(last);
+			last = getPreviousVoice(currentBeats,last.getBeat(), voiceIndex);
+			lastDuration = (last != null ? last.getDuration() : null);
+		}
+		
+		// Si el primer o ultimo componente, quedan fuera del compas, entonces el movimiento no es satisfactorio
+		if(first != null && last != null && lastDuration != null){
+			if((first.getBeat().getStart() + theMove) < measureStart || (last.getBeat().getStart() + lastDuration.getTime() + theMove) > measureEnd){
+				success = false;
+			}
+		}
+		
+		if(success){
+			this.moveVoices(voicesToMove,theMove);
+			
+			// Elimino los silencios que quedaron fuera del compas.
+			Iterator it = voicesToRemove.iterator();
+			while( it.hasNext() ){
+				TGVoice beat = (TGVoice)it.next();
+				removeVoice(beat);
+			}
+			
+			// Se crean silencios en los espacios vacios, si la duracion fue especificada.
+			if( fillDuration != null ){
+				if( theMove < 0 ){
+					last = getLastVoice(measure.getBeats(), voiceIndex);
+					lastDuration = (last != null ? last.getDuration() : null);
+					long beatStart = ( (last != null && lastDuration != null ? last.getBeat().getStart()  + lastDuration.getTime() : start  )  );
+					if( (beatStart + fillDuration.getTime()) <= measureEnd ){
+						boolean beatNew = false;
+						TGBeat beat = getBeat(measure, beatStart);
+						if(beat == null){
+							beat = getSongManager().getFactory().newBeat();
+							beat.setStart( beatStart );
+							beatNew = true;
+						}
+						TGVoice voice = beat.getVoice(voiceIndex);
+						voice.setEmpty(false);
+						fillDuration.copy( voice.getDuration() );
+						if( beatNew ){
+							addBeat(measure, beat );
+						}
+					}
+				}
+				else{
+					first = getFirstVoice(getBeatsBeforeEnd(measure.getBeats(),start), voiceIndex);
+					if( (start + fillDuration.getTime()) <= (first != null ?first.getBeat().getStart() : measureEnd ) ){
+						boolean beatNew = false;
+						TGBeat beat = getBeat(measure, start);
+						if(beat == null){
+							beat = getSongManager().getFactory().newBeat();
+							beat.setStart( start );
+							beatNew = true;
+						}
+						TGVoice voice = beat.getVoice(voiceIndex);
+						voice.setEmpty(false);
+						fillDuration.copy( voice.getDuration() );
+						if( beatNew ){
+							addBeat(measure, beat );
+						}
+					}
+				}
+			}
+			
+			// Borro todos los beats que quedaron vacios.
+			this.removeEmptyBeats(measure);
+		}
+		
+		return success;
+	}
+	
+	public boolean isUniqueVoice(TGVoice voice, boolean ignoreRests){
+		TGBeat beat = voice.getBeat();
+		for( int v = 0 ; v < beat.countVoices() ; v ++ ){
+			if( v != voice.getIndex() ){
+				TGVoice currentVoice = beat.getVoice( v );
+				if( !currentVoice.isEmpty() && (!ignoreRests || !currentVoice.isRestVoice())){
+					return false;
+				}
+			}
+		}
+		return true;
+	}
+	
+	public void transposeNotes( TGMeasure measure, int transposition , boolean tryKeepString, boolean applyToChords, int applyToString){
+		if( transposition != 0 ){
+			if( measure != null ){
+				TGTrack track = measure.getTrack();
+				if( track != null ){
+					List strings = getSortedStringsByValue(track, ( transposition > 0 ? 1 : -1 ) ) ;
+					for( int i = 0 ; i < measure.countBeats() ; i ++ ){
+						TGBeat beat = measure.getBeat( i );
+						transposeNotes( beat, strings, transposition , tryKeepString, applyToChords, applyToString );
+					}
+				}
+			}
+		}
+	}
+	
+	public void transposeNotes( TGMeasure measure, int[] transpositionStrings , boolean tryKeepString , boolean applyToChords){
+		if( transpositionStrings != null && transpositionStrings.length > 0 ){
+			if( measure != null ){
+				TGTrack track = measure.getTrack();
+				if( track != null ){
+					TGNote[] notes = new TGNote[ transpositionStrings.length ];
+					
+					for( int b = 0 ; b < measure.countBeats() ; b ++ ){
+						TGBeat beat = measure.getBeat( b );
+						
+						for( int n = 0 ; n < notes.length ; n ++ ){
+							notes[ n ] = getNote( beat, (n + 1) );
+						}
+						
+						for( int i = 0 ; i < notes.length ; i ++ ){
+							if( notes[ i ] != null ){
+								int transposition = transpositionStrings[ i ];
+								if( transposition != 0 ){
+									int applyToString = notes[i].getString();
+									List strings = getSortedStringsByValue(track, ( transposition > 0 ? 1 : -1 ) ) ;
+									transposeNotes( beat, strings, transposition , tryKeepString, applyToChords, applyToString );
+								}
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	public void transposeNotes( TGBeat beat, List strings, int transposition , boolean tryKeepString, boolean applyToChord, int applyToString){
+		if( transposition != 0 ){
+			List notes = getNotes(beat);
+			
+			int stringCount = strings.size();
+			for( int i = 0 ; i < stringCount ; i ++ ){
+				TGString string = (TGString)strings.get( (stringCount - i) - 1 );
+				if( applyToString == -1 || string.getNumber() == applyToString ){
+					TGNote note = null;
+					for( int n = 0 ; n < notes.size() ; n ++ ){
+						TGNote current = (TGNote)notes.get( n );
+						if( current.getString() == string.getNumber() ){
+							note = current;
+						}
+					}
+					if( note != null ){
+						transposeNote(note, notes, strings, transposition, tryKeepString, false );
+					}
+					
+					if( applyToChord && beat.isChordBeat() ){
+						TGChord chord = beat.getChord();
+						int chordString = ( string.getNumber() - 1 );
+						if( chord.getFretValue( chordString ) >= 0 ){
+							transposeChordNote(chord, chordString, strings, transposition, tryKeepString, false);
+						}
+						chord.setFirstFret( -1 );
+					}
+				}
+			}
+		}
+	}
+	
+	private boolean transposeNote( TGNote note, List notes, List strings , int transposition , boolean tryKeepString, boolean forceChangeString ){
+		boolean canTransposeFret = false;
+		
+		int maximumFret = 29;
+		
+		int transposedFret = ( note.getValue() + transposition );
+		
+		// Check if transposition could be done without change the string
+		if( transposedFret >= 0 && transposedFret <= maximumFret ){
+			// Do it now if keep string is the priority
+			if( !forceChangeString && tryKeepString ){
+				note.setValue( transposedFret );
+				return true;
+			}
+			canTransposeFret = true;
+		}
+		
+		// Check the current string index for this note
+		int stringIndex = -1;
+		for( int i = 0 ; i < strings.size() ; i ++ ){
+			TGString string = ( TGString ) strings.get( i );
+			if( string.getNumber() == note.getString() ){
+				stringIndex = i;
+				break;
+			}
+		}
+		
+		// Try to change the string of the note
+		TGString string = ( TGString ) strings.get( stringIndex );
+		int transposedValue = ( string.getValue() + note.getValue() + transposition );
+		int nextStringIndex = ( stringIndex + 1 );
+		while( nextStringIndex >= 0 && nextStringIndex < strings.size() ){
+			TGString nextString = ( TGString ) strings.get( nextStringIndex );
+			TGNote nextOwner = null;
+			for( int i = 0 ; i < notes.size() ; i ++ ){
+				TGNote nextNote = (TGNote) notes.get( i );
+				if( nextNote.getString() == nextString.getNumber() ){
+					nextOwner = nextNote;
+				}
+			}
+			
+			int transposedStringFret = ( transposedValue - nextString.getValue() );
+			if( transposedStringFret >= 0 && transposedStringFret <= maximumFret ){
+				if( nextOwner != null ){
+					if( ! transposeNote(nextOwner, notes, strings, 0 , tryKeepString , !canTransposeFret ) ){
+						// Note was removed.
+						nextOwner = null ;
+					}
+				}
+				if( nextOwner == null || nextOwner.getString() != nextString.getNumber() ){
+					note.setValue( transposedStringFret );
+					note.setString( nextString.getNumber() );
+					
+					return true;
+				}
+			}
+			nextStringIndex ++;
+		}
+		
+		// Keep using same string if it's possible
+		if( !forceChangeString && canTransposeFret ){
+			note.setValue( transposedFret );
+			return true;
+		}
+		
+		// If note can't be transposed, it must be removed.
+		notes.remove( note );
+		removeNote(note);
+		
+		return false;
+	}
+	
+	private boolean transposeChordNote( TGChord chord, int chordString, List strings , int transposition , boolean tryKeepString, boolean forceChangeString ){
+		boolean canTransposeFret = false;
+		
+		int maximumFret = 24;
+		
+		int noteValue = chord.getFretValue( chordString );
+		int noteString = (chordString + 1 );
+		
+		int transposedFret = ( noteValue + transposition );
+		
+		// Check if transposition could be done without change the string
+		if( transposedFret >= 0 && transposedFret <= maximumFret ){
+			// Do it now if keep string is the priority
+			if( !forceChangeString && tryKeepString ){
+				chord.addFretValue(chordString, transposedFret);
+				return true;
+			}
+			canTransposeFret = true;
+		}
+		
+		// Check the current string index for this note
+		int stringIndex = -1;
+		for( int i = 0 ; i < strings.size() ; i ++ ){
+			TGString string = ( TGString ) strings.get( i );
+			if( string.getNumber() == noteString ){
+				stringIndex = i;
+				break;
+			}
+		}
+		
+		// Try to change the string of the note
+		TGString string = ( TGString ) strings.get( stringIndex );
+		int transposedValue = ( string.getValue() + noteValue + transposition );
+		int nextStringIndex = ( stringIndex + 1 );
+		while( nextStringIndex >= 0 && nextStringIndex < strings.size() ){
+			TGString nextString = ( TGString ) strings.get( nextStringIndex );
+			int nextChordString = -1;
+			for( int i = 0 ; i < chord.countStrings() ; i ++ ){
+				if( (i + 1) == nextString.getNumber() ){
+					if( chord.getFretValue( i ) >= 0 ){
+						nextChordString = i;
+					}
+				}
+			}
+			
+			int transposedStringFret = ( transposedValue - nextString.getValue() );
+			if( transposedStringFret >= 0 && transposedStringFret <= maximumFret ){
+				if( nextChordString >= 0 ){
+					transposeChordNote(chord, nextChordString , strings, 0 , tryKeepString , !canTransposeFret );
+				}
+				if( nextChordString < 0 || chord.getFretValue( nextChordString ) < 0 ){
+					chord.addFretValue( chordString , -1 );
+					chord.addFretValue( ( nextString.getNumber() - 1 ) , transposedStringFret );
+					
+					return true;
+				}
+			}
+			nextStringIndex ++;
+		}
+		
+		// Keep using same string if it's possible
+		if( !forceChangeString && canTransposeFret ){
+			chord.addFretValue( chordString , transposedFret );
+			return true;
+		}
+		
+		// If note can't be transposed, it must be removed.
+		chord.addFretValue( chordString , -1 );
+		
+		return false;
+	}
+	
+	public List getSortedStringsByValue( TGTrack track , final int direction ){
+		List strings = new ArrayList();
+		for( int number = 1 ; number <= track.stringCount() ; number ++ ){
+			strings.add( track.getString( number ) );
+		}
+		
+		Collections.sort( strings , new Comparator() {
+			public int compare(Object o1, Object o2) {
+				if( o1 != null && o2 != null && o1 instanceof TGString && o2 instanceof TGString ){
+					TGString s1 = (TGString)o1;
+					TGString s2 = (TGString)o2;
+					int status = ( s1.getValue() - s2.getValue() );
+					if( status == 0 ){
+						return 0;
+					}
+					return ( (status * direction) > 0 ? 1 : -1 );
+				}
+				return 0;
+			}
+		});
+		
+		return strings;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/managers/TGSongManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/managers/TGSongManager.java
new file mode 100644
index 0000000..a692701
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/managers/TGSongManager.java
@@ -0,0 +1,961 @@
+/*
+ * Created on 23-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.song.managers;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGSongManager {
+	public static final short MAX_CHANNELS = 16;
+	
+	private TGFactory factory;
+	private TGSong song;
+	private TGTrackManager trackManager;
+	private TGMeasureManager measureManager;
+	
+	public TGSongManager(){
+		this(new TGFactory());
+	}
+	
+	public TGSongManager(TGFactory factory){
+		this.factory = factory;
+	}
+	
+	public TGFactory getFactory(){
+		return this.factory;
+	}
+	
+	public void setFactory(TGFactory factory){
+		this.factory = factory;
+	}
+	
+	public TGTrackManager getTrackManager(){
+		if(this.trackManager == null){
+			this.trackManager = new TGTrackManager(this);
+		}
+		return this.trackManager;
+	}
+	
+	public TGMeasureManager getMeasureManager(){
+		if(this.measureManager == null){
+			this.measureManager = new TGMeasureManager(this);
+		}
+		return this.measureManager;
+	}
+	
+	public void setSongName(String name){
+		getSong().setName(name);
+	}
+	
+	public TGSong getSong(){
+		return this.song;
+	}
+	
+	public void clearSong(){
+		if(this.getSong() != null){
+			this.getSong().clear();
+		}
+	}
+	
+	public void setSong(TGSong song){
+		if(song != null){
+			this.clearSong();
+			this.song = song;
+		}
+	}
+	
+	public void setProperties(String name,String artist,String album,String author,String date,String copyright,String writer,String transcriber,String comments){
+		getSong().setName(name);
+		getSong().setArtist(artist);
+		getSong().setAlbum(album);
+		getSong().setAuthor(author);
+		getSong().setDate(date);
+		getSong().setCopyright(copyright);
+		getSong().setWriter(writer);
+		getSong().setTranscriber(transcriber);
+		getSong().setComments(comments);
+	}
+
+	public TGSong newSong(){
+		TGChannel channel = getFactory().newChannel();
+		channel.setChannelId(1);
+		channel.setName(getDefaultChannelName(channel));
+		
+		TGMeasureHeader header = getFactory().newHeader();
+		header.setNumber(1);
+		header.setStart(TGDuration.QUARTER_TIME);
+		header.getTimeSignature().setNumerator(4);
+		header.getTimeSignature().getDenominator().setValue(TGDuration.QUARTER);
+		
+		TGTrack track = getFactory().newTrack();
+		track.setNumber(1);
+		track.setName(getDefaultTrackName(track));
+		track.setChannelId(channel.getChannelId());
+		track.setStrings(createDefaultInstrumentStrings());
+		track.addMeasure(getFactory().newMeasure(header));
+		TGColor.RED.copy(track.getColor());
+		
+		TGSong song = getFactory().newSong();
+		song.addChannel(channel);
+		song.addMeasureHeader(header);
+		song.addTrack(track);
+		
+		return song;
+	}
+	
+	public TGChannel createChannel(){
+		return getFactory().newChannel();
+	}
+	
+	public TGChannel addChannel(){
+		TGChannel tgChannel = addChannel(createChannel());
+		tgChannel.setName(getDefaultChannelName(tgChannel));
+		return tgChannel;
+	}
+	
+	public TGChannel addChannel(TGChannel tgChannel){
+		if( tgChannel != null ){
+			if( tgChannel.getChannelId() <= 0 ){
+				tgChannel.setChannelId( getNextChannelId() );
+			}
+			getSong().addChannel(tgChannel);
+		}
+		return tgChannel;
+	}
+	
+	public void removeChannel(TGChannel channel){
+		if( channel != null ){
+			getSong().removeChannel(channel);
+		}
+	}
+	
+	public void removeChannel(int channelId){
+		TGChannel channel = getChannel(channelId);
+		if( channel != null ){
+			removeChannel(channel);
+		}
+	}
+	
+	public void removeAllChannels(){
+		while( getSong().countChannels() > 0 ){
+			removeChannel( getSong().getChannel(0) );
+		}
+	}
+	
+	public TGChannel getChannel(int channelId){
+		Iterator it = getSong().getChannels();
+		while( it.hasNext() ){
+			TGChannel channel = (TGChannel)it.next();
+			if( channel.getChannelId() == channelId ){
+				return channel;
+			}
+		}
+		return null;
+	}
+	
+	public List getChannels(){
+		List channels = new ArrayList();
+		
+		Iterator it = getSong().getChannels();
+		while( it.hasNext() ){
+			channels.add((TGChannel)it.next());
+		}
+		
+		return channels;
+	}
+	
+	public int getNextChannelId(){
+		int maximumId = 0;
+		
+		Iterator it = getSong().getChannels();
+		while( it.hasNext() ){
+			TGChannel channel = (TGChannel)it.next();
+			if( maximumId < channel.getChannelId() ){
+				maximumId = channel.getChannelId();
+			}
+		}
+		
+		return (maximumId + 1);
+	}
+	
+	public String getDefaultChannelName(TGChannel tgChannel){
+		if( tgChannel != null && tgChannel.getChannelId() > 0 ){
+			return new String("#" + tgChannel.getChannelId());
+		}
+		return new String();
+	}
+	
+	public TGChannel updateChannel(int id,short bnk,short prg,short vol,short bal,short cho,short rev,short pha,short tre,String name){
+		TGChannel channel = getChannel(id);
+		if( channel != null ){
+			channel.setBank(bnk);
+			channel.setProgram(prg);
+			channel.setVolume(vol);
+			channel.setBalance(bal);
+			channel.setChorus(cho);
+			channel.setReverb(rev);
+			channel.setPhaser(pha);
+			channel.setTremolo(tre);
+			channel.setName(name);
+		}
+		return channel;
+	}
+	
+	public boolean isPercussionChannel( int channelId ){
+		TGChannel channel = getChannel(channelId);
+		if( channel != null ){
+			return channel.isPercussionChannel();
+		}
+		return false;
+	}
+	
+	public boolean isAnyPercussionChannel(){
+		Iterator it = getSong().getChannels();
+		while( it.hasNext() ){
+			TGChannel channel = (TGChannel) it.next();
+			if( channel.isPercussionChannel() ){
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public boolean isAnyTrackConnectedToChannel( int channelId ){
+		Iterator it = getSong().getTracks();
+		while( it.hasNext() ){
+			TGTrack track = (TGTrack) it.next();
+			if( track.getChannelId() == channelId ){
+				return true;
+			}
+		}
+		return false;
+	}
+	// -------------------------------------------------------------- // 
+
+	private TGTrack createTrack(){
+		TGTrack tgTrack = getFactory().newTrack();
+		tgTrack.setNumber(getNextTrackNumber());
+		tgTrack.setName(getDefaultTrackName(tgTrack));
+		
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			TGMeasure measure = getFactory().newMeasure(header);
+			tgTrack.addMeasure(measure);
+		}
+		tgTrack.setStrings(createDefaultInstrumentStrings());
+		
+		TGColor.RED.copy(tgTrack.getColor());
+		
+		return tgTrack;
+	}
+	
+	public TGTrack addTrack(){
+		if(getSong().isEmpty()){
+			setSong(newSong());
+			return getLastTrack();
+		}
+		TGTrack tgTrack = createTrack();
+		tgTrack.setChannelId(addChannel().getChannelId());
+		addTrack(tgTrack);
+		return tgTrack;
+	}
+	
+	
+	public void addTrack(TGTrack trackToAdd){
+		this.orderTracks();
+		int addIndex = -1;
+		for(int i = 0;i < getSong().countTracks();i++){
+			TGTrack track = getSong().getTrack(i);
+			if(addIndex == -1 && track.getNumber() == trackToAdd.getNumber()){
+				addIndex = i;
+			}
+			if(addIndex >= 0){
+				track.setNumber(track.getNumber() + 1);
+			}
+		}
+		if(addIndex < 0){
+			addIndex = getSong().countTracks();
+		}
+		getSong().addTrack(addIndex,trackToAdd);
+	}
+	
+	public void removeTrack(TGTrack track){
+		removeTrack(track.getNumber());
+	}
+	
+	public void removeTrack(int number){
+		int nextNumber = number;
+		TGTrack trackToRemove = null;
+		orderTracks();
+		Iterator it = getSong().getTracks();
+		while(it.hasNext()){
+			TGTrack currTrack = (TGTrack)it.next();
+			if(trackToRemove == null && currTrack.getNumber() == nextNumber){
+				trackToRemove = currTrack;
+			}else if(currTrack.getNumber() == (nextNumber + 1)){
+				currTrack.setNumber(nextNumber);
+				nextNumber ++;
+			}
+			
+		}
+		getSong().removeTrack(trackToRemove);
+	}
+	
+	private void orderTracks(){
+		for(int i = 0;i < getSong().countTracks();i++){
+			TGTrack minTrack = null;
+			for(int trackIdx = i;trackIdx < getSong().countTracks();trackIdx++){
+				TGTrack track = getSong().getTrack(trackIdx);
+				if(minTrack == null || track.getNumber() < minTrack.getNumber()){
+					minTrack = track;
+				}
+			}
+			getSong().moveTrack(i,minTrack);
+		}
+	}
+	
+	public TGTrack getTrack(int number){
+		TGTrack track = null;
+		for (int i = 0; i < getSong().countTracks(); i++) {
+			TGTrack currTrack = getSong().getTrack(i);
+			if(currTrack.getNumber() == number){
+				track = currTrack;
+				break;
+			}
+		}
+		return track;
+	}
+	
+	public TGTrack getFirstTrack(){
+		TGTrack track = null;
+		if(!getSong().isEmpty()){
+			track = getSong().getTrack(0);
+		}
+		return track;
+	}
+	
+	public TGTrack getLastTrack(){
+		TGTrack track = null;
+		if(!getSong().isEmpty()){
+			track = getSong().getTrack(getSong().countTracks() - 1);
+		}
+		return track;
+	}
+	
+	public int getNextTrackNumber(){
+		return (getSong().countTracks() + 1);
+	}
+	
+	public String getDefaultTrackName(TGTrack tgTrack){
+		if( tgTrack != null && tgTrack.getNumber() > 0 ){
+			return new String("Track " + tgTrack.getNumber());
+		}
+		return new String();
+	}
+	
+	public TGTrack cloneTrack(TGTrack track){
+		TGTrack clone = track.clone(getFactory(),getSong());
+		clone.setNumber(getNextTrackNumber());
+		addTrack(clone);
+		return clone;
+	}
+	
+	public boolean moveTrackUp(TGTrack track){
+		if(track.getNumber() > 1){
+			TGTrack prevTrack = getTrack(track.getNumber() - 1);
+			prevTrack.setNumber(prevTrack.getNumber() + 1);
+			track.setNumber(track.getNumber() - 1);
+			orderTracks();
+			return true;
+		}
+		return false;
+	}
+	
+	public boolean moveTrackDown(TGTrack track){
+		if(track.getNumber() < getSong().countTracks()){
+			TGTrack nextTrack = getTrack(track.getNumber() + 1);
+			nextTrack.setNumber(nextTrack.getNumber() - 1);
+			track.setNumber(track.getNumber() + 1);
+			orderTracks();
+			return true;
+		}
+		return false;
+	}
+	
+	public void changeTimeSignature(long start,TGTimeSignature timeSignature,boolean toEnd){
+		changeTimeSignature(getMeasureHeaderAt(start),timeSignature,toEnd);
+	}
+	
+	public void changeTimeSignature(TGMeasureHeader header,TGTimeSignature timeSignature,boolean toEnd){
+		//asigno el nuevo ritmo
+		timeSignature.copy(header.getTimeSignature());
+		
+		long nextStart = header.getStart() + header.getLength();
+		List measures = getMeasureHeadersBeforeEnd(header.getStart() + 1);
+		Iterator it = measures.iterator();
+		while(it.hasNext()){
+			TGMeasureHeader nextHeader = (TGMeasureHeader)it.next();
+			
+			long theMove = nextStart - nextHeader.getStart();
+			
+			//moveMeasureComponents(nextHeader,theMove);
+			moveMeasureHeader(nextHeader,theMove,0);
+			
+			if(toEnd){
+				timeSignature.copy(nextHeader.getTimeSignature());
+			}
+			nextStart = nextHeader.getStart() + nextHeader.getLength();
+		}
+		moveOutOfBoundsBeatsToNewMeasure(header.getStart());
+	}
+	
+	public void moveOutOfBoundsBeatsToNewMeasure(long start){
+		Iterator it = getSong().getTracks();
+		while( it.hasNext() ){
+			TGTrack track = (TGTrack) it.next();
+			getTrackManager().moveOutOfBoundsBeatsToNewMeasure(track, start);
+		}
+	}
+	
+	public void changeTripletFeel(long start,int tripletFeel,boolean toEnd){
+		changeTripletFeel(getMeasureHeaderAt(start),tripletFeel,toEnd);
+	}
+	
+	public void changeTripletFeel(TGMeasureHeader header,int tripletFeel,boolean toEnd){
+		//asigno el nuevo tripletFeel
+		header.setTripletFeel(tripletFeel);
+		
+		if(toEnd){
+			List measures = getMeasureHeadersBeforeEnd(header.getStart() + 1);
+			Iterator it = measures.iterator();
+			while(it.hasNext()){
+				TGMeasureHeader nextHeader = (TGMeasureHeader)it.next();
+				nextHeader.setTripletFeel(tripletFeel); 
+			}
+		}
+	}
+	
+	public void changeTempos(long start,TGTempo tempo,boolean toEnd){
+		changeTempos(getMeasureHeaderAt(start),tempo,toEnd);
+	}
+	
+	public void changeTempos(TGMeasureHeader header,TGTempo tempo,boolean toEnd){
+		int oldValue = header.getTempo().getValue();
+		Iterator it = getMeasureHeadersAfter(header.getNumber() - 1).iterator();
+		while(it.hasNext()){
+			TGMeasureHeader nextHeader = (TGMeasureHeader)it.next();
+			if(toEnd || nextHeader.getTempo().getValue() == oldValue){
+				changeTempo(nextHeader,tempo);
+			}else{
+				break;
+			}
+		}
+	}
+	
+	public void changeTempo(TGMeasureHeader header,TGTempo tempo){
+		tempo.copy(header.getTempo());
+	}
+	
+	public void changeOpenRepeat(long start){
+		TGMeasureHeader header = getMeasureHeaderAt(start);
+		header.setRepeatOpen(!header.isRepeatOpen());
+	}
+	
+	public void changeCloseRepeat(long start,int repeatClose){
+		TGMeasureHeader header = getMeasureHeaderAt(start);
+		header.setRepeatClose(repeatClose);
+	}
+	
+	public void changeAlternativeRepeat(long start,int repeatAlternative){
+		TGMeasureHeader header = getMeasureHeaderAt(start);
+		header.setRepeatAlternative(repeatAlternative);
+	}
+	
+	public TGMeasureHeader addNewMeasureBeforeEnd(){
+		TGMeasureHeader lastHeader = getLastMeasureHeader();
+		TGMeasureHeader header = getFactory().newHeader();
+		header.setNumber((lastHeader.getNumber() + 1));
+		header.setStart((lastHeader.getStart() + lastHeader.getLength()));
+		header.setRepeatOpen(false);
+		header.setRepeatClose(0);
+		header.setTripletFeel(lastHeader.getTripletFeel());
+		lastHeader.getTimeSignature().copy(header.getTimeSignature());
+		lastHeader.getTempo().copy(header.getTempo());
+		getSong().addMeasureHeader(header);
+		
+		Iterator it = getSong().getTracks();
+		while(it.hasNext()){
+			TGTrack track = (TGTrack)it.next();
+			getTrackManager().addNewMeasureBeforeEnd(track,header);
+		}
+		return header;
+	}
+	
+	public void addNewMeasure(int number){
+		//Obtengo un clon para el nuevo Header.
+		TGMeasureHeader header = null;
+		if(number == 1){
+			header = getMeasureHeader(number).clone(getFactory());
+		}else{
+			header = getMeasureHeader((number - 1)).clone(getFactory());
+			header.setStart(header.getStart() + header.getLength());
+			header.setNumber(header.getNumber() + 1);
+		}
+		header.setMarker(null);
+		header.setRepeatOpen(false);
+		header.setRepeatAlternative(0);
+		header.setRepeatClose(0);
+		
+		//Si hay Headers siguientes los muevo
+		TGMeasureHeader nextHeader = getMeasureHeader(number);
+		if(nextHeader != null){
+			moveMeasureHeaders(getMeasureHeadersBeforeEnd(nextHeader.getStart()),header.getLength(),1,true);
+		}
+		
+		//Agrego el header a la lista
+		addMeasureHeader( (header.getNumber() - 1) ,header);
+		
+		//Agrego los compases en todas las pistas
+		Iterator it = getSong().getTracks();
+		while(it.hasNext()){
+			TGTrack track = (TGTrack)it.next();
+			getTrackManager().addNewMeasure(track,header);
+		}
+	}
+	
+	public List getMeasures(long start){
+		List measures = new ArrayList();
+		Iterator it = getSong().getTracks();
+		while(it.hasNext()){
+			TGTrack track = (TGTrack)it.next();
+			TGMeasure measure = getTrackManager().getMeasureAt(track,start);
+			if(measure != null){
+				measures.add(measure);
+			}
+		}
+		return measures;
+	}
+	
+	public TGTrack replaceTrack(TGTrack track){
+		TGTrack current = getTrack(track.getNumber());
+		if(current != null){
+			track.copy(getFactory(), getSong(), current);
+		}
+		return current;
+	}
+	
+	public TGMeasureHeader getFirstMeasureHeader(){
+		TGMeasureHeader firstHeader = null;
+		for(int i = 0;i < getSong().countMeasureHeaders();i++){
+			TGMeasureHeader currHeader = getSong().getMeasureHeader(i);
+			if(firstHeader == null || (currHeader.getStart() < firstHeader.getStart())){
+				firstHeader = currHeader;
+			}
+		}
+		return firstHeader;
+	}
+	
+	public TGMeasureHeader getLastMeasureHeader(){
+		int lastIndex = getSong().countMeasureHeaders() - 1;
+		return getSong().getMeasureHeader(lastIndex);
+	}
+	
+	public TGMeasureHeader getPrevMeasureHeader(TGMeasureHeader header){
+		int prevIndex = header.getNumber() - 1;
+		if(prevIndex > 0){
+			return getSong().getMeasureHeader(prevIndex - 1);
+		}
+		return null;
+	}
+	
+	public TGMeasureHeader getNextMeasureHeader(TGMeasureHeader header){
+		int nextIndex = header.getNumber();
+		if(nextIndex < getSong().countMeasureHeaders()){
+			return getSong().getMeasureHeader(nextIndex);
+		}
+		return null;
+	}
+	
+	public TGMeasureHeader getMeasureHeaderAt(long start){
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			long measureStart = header.getStart();
+			long measureLength = header.getLength();
+			if(start >= measureStart && start < measureStart + measureLength){
+				return header;
+			}
+		}
+		return null;
+	}
+	
+	public TGMeasureHeader getMeasureHeader(int number){
+		for (int i = 0; i < getSong().countMeasureHeaders(); i++) {
+			TGMeasureHeader header = getSong().getMeasureHeader(i);
+			if(header.getNumber() == number){
+				return header;
+			}
+		}
+		return null;
+	}
+	
+	public int getMeasureHeaderIndex(TGMeasureHeader mh){
+		for (int i = 0; i < getSong().countMeasureHeaders(); i++) {
+			TGMeasureHeader header = getSong().getMeasureHeader(i);
+			if(header.getNumber() == mh.getNumber()){
+				return i;
+			}
+		}
+		return -1;
+	}
+	
+	/**
+	 * Retorna Todos los desde Start hasta el final del compas
+	 */
+	public List getMeasureHeadersBeforeEnd(long fromStart) {
+		List headers = new ArrayList();
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if (header.getStart() >= fromStart) {
+				headers.add(header);
+			}
+		}
+		return headers;
+	}
+	
+	/**
+	 * Retorna Todos los desde Start hasta el final del compas
+	 */
+	public List getMeasureHeadersAfter(int number) {
+		List headers = new ArrayList();
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if (header.getNumber() > number) {
+				headers.add(header);
+			}
+		}
+		return headers;
+	}
+	
+	/**
+	 * Retorna Todos los desde Start hasta el final del compas
+	 */
+	public List getMeasureHeadersBetween(long p1,long p2) {
+		List headers = new ArrayList();
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if ((header.getStart() + header.getLength()) > p1  &&  header.getStart() < p2) {
+				headers.add(header);
+			}
+		}
+		return headers;
+	}
+	
+	public void removeLastMeasure(){
+		removeLastMeasureHeader();
+	}
+	
+	public void removeMeasure(long start){
+		removeMeasureHeader(start);
+	}
+	
+	public void removeMeasure(int number){
+		removeMeasureHeader(number);
+	}
+	
+	/**
+	 * Agrega un Compas
+	 */
+	public void addMeasureHeader(TGMeasureHeader measure){
+		getSong().addMeasureHeader(measure);
+	}
+	
+	/**
+	 * Agrega un Compas
+	 */
+	public void addMeasureHeader(int index,TGMeasureHeader measure){
+		getSong().addMeasureHeader(index,measure);
+	}
+	
+	public void removeMeasureHeaders(int n1,int n2){
+		for(int i = n1; i <= n2; i ++){
+			TGMeasureHeader measure = getMeasureHeader(n1);
+			removeMeasureHeader(measure);
+		}
+	}
+	
+	public void removeLastMeasureHeader(){
+		removeMeasureHeader(getLastMeasureHeader());
+	}
+	
+	public void removeMeasureHeader(long start){
+		removeMeasureHeader(getMeasureHeaderAt(start));
+	}
+	
+	public void removeMeasureHeader(int number){
+		removeMeasureHeader(getMeasureHeader(number));
+	}
+	
+	public void removeMeasureHeader(TGMeasureHeader header){
+		long start = header.getStart();
+		long length = header.getLength();
+		
+		Iterator it = getSong().getTracks();
+		while(it.hasNext()){
+			TGTrack track = (TGTrack)it.next();
+			getTrackManager().removeMeasure(track,start);
+		}
+		moveMeasureHeaders(getMeasureHeadersBeforeEnd(start + 1),-length,-1,true);
+		getSong().removeMeasureHeader(header.getNumber() - 1);
+	}
+	
+	public TGMeasureHeader replaceMeasureHeader(TGMeasureHeader newMeasure){
+		TGMeasureHeader header = getMeasureHeaderAt(newMeasure.getStart());
+		header.makeEqual(newMeasure.clone(getFactory()));
+		return header;
+	}
+	
+	public void moveMeasureHeaders(List headers,long theMove,int numberMove,boolean moveComponents) {
+		if(moveComponents){
+			Iterator it = headers.iterator();
+			while(it.hasNext()){
+				TGMeasureHeader header = (TGMeasureHeader) it.next();
+				moveMeasureComponents(header,theMove);
+			}
+		}
+		Iterator it = headers.iterator();
+		while (it.hasNext()) {
+			TGMeasureHeader header = (TGMeasureHeader) it.next();
+			moveMeasureHeader(header,theMove,numberMove);
+		}
+	}
+	
+	/**
+	 * Mueve el compas
+	 */
+	public void moveMeasureHeader(TGMeasureHeader header,long theMove,int numberMove){
+		header.setNumber(header.getNumber() + numberMove);
+		header.setStart(header.getStart() + theMove);
+	}
+	
+	/**
+	 * Mueve el compas
+	 */
+	public void moveMeasureComponents(TGMeasureHeader header,long theMove){
+		Iterator it = getSong().getTracks();
+		while(it.hasNext()){
+			TGTrack track = (TGTrack)it.next();
+			getTrackManager().moveMeasure(getTrackManager().getMeasure(track,header.getNumber()),theMove);
+		}
+	}
+	
+	/** 
+	 * Retorna true si el start esta en el rango del compas
+	 */
+	public boolean isAtPosition(TGMeasureHeader header,long start){
+		return (start >= header.getStart() && start < header.getStart() + header.getLength());
+	}
+	
+	public TGMarker updateMarker(int measure,String title,TGColor color){
+		TGMeasureHeader header = getMeasureHeader(measure);
+		if(header != null){
+			if(!header.hasMarker()){
+				header.setMarker(getFactory().newMarker());
+			}
+			header.getMarker().setMeasure(measure);
+			header.getMarker().setTitle(title);
+			header.getMarker().getColor().setR(color.getR());
+			header.getMarker().getColor().setG(color.getG());
+			header.getMarker().getColor().setB(color.getB());
+			return header.getMarker(); 
+		}
+		return null;
+	}
+	
+	public TGMarker updateMarker(TGMarker marker){
+		return updateMarker(marker.getMeasure(),marker.getTitle(),marker.getColor());
+	}
+	
+	public void removeMarker(TGMarker marker){
+		if(marker != null){
+			removeMarker(marker.getMeasure());
+		}
+	}
+	
+	public void removeMarker(int number){
+		TGMeasureHeader header = getMeasureHeader(number);
+		if(header != null && header.hasMarker()){
+			header.setMarker(null);
+		}
+	}
+	
+	public void removeAllMarkers(){
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if(header.hasMarker()){
+				header.setMarker(null);
+			}
+		}
+	}
+	
+	public List getMarkers(){
+		List markers = new ArrayList();
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if(header.hasMarker()){
+				markers.add(header.getMarker());
+			}
+		}
+		return markers;
+	}
+	
+	public TGMarker getMarker(int number){
+		TGMeasureHeader header = getMeasureHeader(number);
+		if(header != null && header.hasMarker()){
+			return header.getMarker();
+		}
+		return null;
+	}
+	
+	public TGMarker getPreviousMarker(int from){
+		TGMeasureHeader previous = null;
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if(header.hasMarker() && header.getNumber() < from){
+				if(previous == null || previous.getNumber() < header.getNumber()){
+					previous = header;
+				}
+			}
+		}
+		return (previous != null)?previous.getMarker():null;
+	}
+	
+	public TGMarker getNextMarker(int from){
+		TGMeasureHeader next = null;
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if(header.hasMarker() && header.getNumber() > from){
+				if(next == null || next.getNumber() > header.getNumber()){
+					next = header;
+				}
+			}
+		}
+		return (next != null)?next.getMarker():null;
+	}
+	
+	public TGMarker getFirstMarker(){
+		TGMeasureHeader first = null;
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if(header.hasMarker()){
+				if(first == null || header.getNumber() < first.getNumber()){
+					first = header;
+				}
+			}
+		}
+		return (first != null)?first.getMarker():null;
+	}
+	
+	public TGMarker getLastMarker(){
+		TGMeasureHeader next = null;
+		Iterator it = getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if(header.hasMarker()){
+				if(next == null || header.getNumber() > next.getNumber()){
+					next = header;
+				}
+			}
+		}
+		return (next != null)?next.getMarker():null;
+	}
+	
+	public void autoCompleteSilences(){
+		Iterator it = getSong().getTracks();
+		while(it.hasNext()){
+			TGTrack track = (TGTrack)it.next();
+			getTrackManager().autoCompleteSilences(track);
+		}
+	}
+	
+	public void orderBeats(){
+		Iterator it = getSong().getTracks();
+		while(it.hasNext()){
+			TGTrack track = (TGTrack)it.next();
+			getTrackManager().orderBeats(track);
+		}
+	}
+	
+	public List createDefaultInstrumentStrings(){
+		List strings = new ArrayList();
+		strings.add(newString(getFactory(),1, 64));
+		strings.add(newString(getFactory(),2, 59));
+		strings.add(newString(getFactory(),3, 55));
+		strings.add(newString(getFactory(),4, 50));
+		strings.add(newString(getFactory(),5, 45));
+		strings.add(newString(getFactory(),6, 40));
+		return strings;
+	}
+	
+	public static List createPercussionStrings(TGFactory factory,int stringCount){
+		List strings = new ArrayList();
+		for(int i = 1;i <= stringCount; i++){
+			strings.add(newString(factory,i, 0));
+		}
+		return strings;
+	}
+	
+	public static TGString newString(TGFactory factory,int number,int value){
+		TGString string = factory.newString();
+		string.setNumber(number);
+		string.setValue(value);
+		return string;
+	}
+	
+	public static long getDivisionLength(TGMeasureHeader header){
+		long defaultLength = TGDuration.QUARTER_TIME;
+		int denominator = header.getTimeSignature().getDenominator().getValue();
+		switch(denominator){
+			case TGDuration.EIGHTH:
+				if(header.getTimeSignature().getNumerator() % 3 == 0){
+					defaultLength += TGDuration.QUARTER_TIME / 2;
+				}
+				break;
+		}
+		return defaultLength;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/managers/TGTrackManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/managers/TGTrackManager.java
new file mode 100644
index 0000000..ccb5e4d
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/managers/TGTrackManager.java
@@ -0,0 +1,341 @@
+package org.herac.tuxguitar.song.managers;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class TGTrackManager {
+	private TGSongManager songManager;
+	
+	public TGTrackManager(TGSongManager songManager){
+		this.songManager = songManager;
+	}
+	
+	public TGSongManager getSongManager(){
+		return this.songManager;
+	}
+	
+	public TGMeasure getFirstMeasure(TGTrack track){
+		TGMeasure firstMeasure = null;
+		Iterator measures = track.getMeasures();
+		while(measures.hasNext()){
+			TGMeasure currMeasure = (TGMeasure)measures.next();
+			if(firstMeasure == null || (currMeasure.getStart() < firstMeasure.getStart())){
+				firstMeasure = currMeasure;
+			}
+		}
+		return firstMeasure;
+	}
+	
+	public TGMeasure getLastMeasure(TGTrack track){
+		return track.getMeasure(track.countMeasures() - 1);
+	}
+	
+	public TGMeasure getPrevMeasure(TGMeasure measure){
+		return measure.getTrack().getMeasure(measure.getNumber() - 2);
+	}
+	
+	public TGMeasure getNextMeasure(TGMeasure measure){
+		return measure.getTrack().getMeasure(measure.getNumber());
+	}
+	
+	public TGMeasure getMeasureAt(TGTrack track,long start){
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasure measure = (TGMeasure)it.next();
+			long measureStart = measure.getStart();
+			long measureLength = measure.getLength();
+			if(start >= measureStart && start < measureStart + measureLength){
+				return measure;
+			}
+		}
+		return null;
+	}
+	
+	public TGMeasure getMeasure(TGTrack track,int number){
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasure measure = (TGMeasure)it.next();
+			if(measure.getNumber() == number){
+				return measure;
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Retorna Todos los desde Start hasta el final del compas
+	 */
+	public List getMeasuresBeforeEnd(TGTrack track,long fromStart) {
+		List measures = new ArrayList();
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasure currMeasure = (TGMeasure)it.next();
+			if (currMeasure.getStart() >= fromStart) {
+				measures.add(currMeasure);
+			}
+		}
+		return measures;
+	}
+	
+	/**
+	 * Retorna Todos los desde Start hasta el final del compas
+	 */
+	public List getMeasuresBetween(TGTrack track,long p1,long p2) {
+		List measures = new ArrayList();
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasure measure = (TGMeasure)it.next();
+			if ((measure.getStart() + measure.getLength()) > p1  &&  measure.getStart() < p2) {
+				measures.add(measure);
+			}
+		}
+		return measures;
+	}
+	
+	public void addNewMeasureBeforeEnd(TGTrack track,TGMeasureHeader header){
+		addNewMeasureAfter(track,header,getLastMeasure(track));
+	}
+	
+	/**
+	 * Agrega un Compas
+	 */
+	public void addNewMeasureAfter(TGTrack track,TGMeasureHeader header,TGMeasure measure){
+		TGMeasure newMeasure = getSongManager().getFactory().newMeasure(header);
+		newMeasure.setClef(measure.getClef());
+		newMeasure.setKeySignature(measure.getKeySignature());
+		addMeasure(track,newMeasure);
+	}
+	
+	public void addNewMeasure(TGTrack track,TGMeasureHeader header){
+		TGMeasure previous = getMeasure(track, (header.getNumber() == 1)?(header.getNumber()+1):header.getNumber()-1);
+		TGMeasure newMeasure = getSongManager().getFactory().newMeasure(header);
+		newMeasure.setTrack(track);
+		newMeasure.setClef(previous.getClef());
+		newMeasure.setKeySignature(previous.getKeySignature());
+		addMeasure(track,header.getNumber() - 1,newMeasure);
+	}
+	/*
+	public List copyMeasures(TGTrack track,int m1,int m2){
+		List measures = new ArrayList();
+		int number1 = Math.max(1,m1);
+		int number2 = Math.min(track.countMeasures(),m2);
+		for(int number = number1; number <= number2;number ++){
+			measures.add(getMeasure(track, number));
+		}
+		return measures;
+	}
+	*/
+	/**
+	 * Agrega un Compas
+	 *//*
+	public void insertMeasures(TGTrack track,List measures){
+		if(!measures.isEmpty()){
+			Iterator it = measures.iterator();
+			while(it.hasNext()){
+				TGMeasure measure = (TGMeasure)it.next();
+				addMeasure(track,(measure.getNumber() - 1),measure);
+			}
+		}
+	}*/
+	
+	/**
+	 * Agrega un Compas
+	 */
+	public void addMeasure(TGTrack track,TGMeasure measure){
+		track.addMeasure(measure);
+	}
+	
+	/**
+	 * Agrega un Compas
+	 */
+	public void addMeasure(TGTrack track,int index,TGMeasure measure){
+		track.addMeasure(index,measure);
+	}
+	
+	public void removeLastMeasure(TGTrack track){
+		removeMeasure(getLastMeasure(track));
+	}
+	
+	public void removeMeasure(TGTrack track,long start){
+		removeMeasure(getMeasureAt(track,start));
+	}
+	
+	public void removeMeasure(TGMeasure measure){
+		measure.getTrack().removeMeasure(measure.getNumber() - 1);
+	}
+	
+	public TGMeasure replaceMeasure(TGTrack track,TGMeasure newMeasure){
+		TGMeasure measure = getMeasureAt(track,newMeasure.getStart());
+		measure.makeEqual(newMeasure);
+		return measure;
+	}
+	
+	/**
+	 * Mueve el compas
+	 */
+	public void moveMeasure(TGMeasure measure,long theMove){
+		//getSongManager().getMeasureManager().moveAllComponents(measure,theMove);
+		getSongManager().getMeasureManager().moveAllBeats(measure,theMove);
+	}
+	
+	public void moveOutOfBoundsBeatsToNewMeasure(TGTrack track, long start){
+		Iterator it = getMeasuresBeforeEnd(track,start).iterator();
+		while( it.hasNext() ){
+			TGMeasure measure = (TGMeasure)it.next();
+			getSongManager().getMeasureManager().moveOutOfBoundsBeatsToNewMeasure(measure);
+		}
+	}
+	
+	public void moveTrackBeats(TGTrack track, long measureStart, long moveStart, long theMove ){
+		List measures = getMeasuresBeforeEnd(track,measureStart);
+		for( int i = 0 ; i < measures.size() ; i ++ ){
+			TGMeasure measure = (TGMeasure)measures.get(i);
+			if( moveStart + theMove < moveStart ){
+				getSongManager().getMeasureManager().removeBeatsBetween(measure, moveStart, (moveStart + Math.abs(theMove)));
+			}
+			getSongManager().getMeasureManager().moveBeats(measure, moveStart, theMove);
+		}
+		for( int i = 0 ; i < measures.size() ; i ++ ){
+			TGMeasure measure = (TGMeasure)measures.get(i);
+			getSongManager().getMeasureManager().moveOutOfBoundsBeatsToNewMeasure(measure,false);
+		}
+	}
+	
+	public void changeKeySignature(TGTrack track,long start,int keySignature,boolean toEnd){
+		changeKeySignature(track,getMeasureAt(track,start),keySignature,toEnd);
+	}
+	
+	/**
+	 * Cambia el Key Signature
+	 */
+	public void changeKeySignature(TGTrack track,TGMeasure measure,int keySignature,boolean toEnd){
+		//asigno el nuevo Key
+		measure.setKeySignature(keySignature);
+		
+		if(toEnd){
+			List measures = getMeasuresBeforeEnd(track,measure.getStart() + 1);
+			Iterator it = measures.iterator();
+			while(it.hasNext()){
+				TGMeasure nextMeasure = (TGMeasure)it.next();
+				nextMeasure.setKeySignature(keySignature);
+			}
+		}
+	}
+	
+	public void changeClef(TGTrack track,long start,int clef,boolean toEnd){
+		changeClef(track,getMeasureAt(track,start),clef,toEnd);
+	}
+	
+	/**
+	 * Cambia el Clef
+	 */
+	public void changeClef(TGTrack track,TGMeasure measure,int clef,boolean toEnd){
+		//asigno el nuevo clef
+		measure.setClef(clef);
+		
+		if(toEnd){
+			List measures = getMeasuresBeforeEnd(track,measure.getStart() + 1);
+			Iterator it = measures.iterator();
+			while(it.hasNext()){
+				TGMeasure nextMeasure = (TGMeasure)it.next();
+				nextMeasure.setClef(clef);
+			}
+		}
+	}
+	
+	public void changeSolo(TGTrack track,boolean solo){
+		track.setSolo(solo);
+		track.setMute(track.isSolo() ? false : track.isMute());
+	}
+	
+	public void changeMute(TGTrack track,boolean mute){
+		track.setMute(mute);
+		track.setSolo(track.isMute() ? false : track.isSolo());
+	}
+	
+	public void changeInfo(TGTrack track,String name,TGColor color,int offset){
+		track.setName(name);
+		track.setOffset(offset);
+		track.getColor().setR(color.getR());
+		track.getColor().setG(color.getG());
+		track.getColor().setB(color.getB());
+	}
+	
+	public void changeInstrumentStrings(TGTrack track,List strings){
+		if(strings.size() < track.getStrings().size()){
+			removeNotesAfterString(track,strings.size());
+		}
+		track.setStrings(strings);
+	}
+	
+	public void removeNotesAfterString(TGTrack track,int string){
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasure measure = (TGMeasure)it.next();
+			getSongManager().getMeasureManager().removeNotesAfterString(measure,string);
+		}
+	}
+	
+	public void changeChannel(TGTrack track,int channelId){
+		TGChannel channel = getSongManager().getChannel(channelId);
+		
+		track.setChannelId( channelId );
+		
+		if( channel != null && channel.isPercussionChannel() ){
+			track.setStrings(TGSongManager.createPercussionStrings(getSongManager().getFactory(),track.getStrings().size()));
+		}
+	}
+	
+	public void autoCompleteSilences(TGTrack track){
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasure measure = (TGMeasure)it.next();
+			this.songManager.getMeasureManager().autoCompleteSilences(measure);
+		}
+	}
+	
+	public void orderBeats(TGTrack track){
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasure measure = (TGMeasure)it.next();
+			this.songManager.getMeasureManager().orderBeats(measure);
+		}
+	}
+	
+	public void transposeNotes(TGTrack track, int transposition , boolean tryKeepString, boolean applyToChords, int applyToString){
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasure measure = (TGMeasure)it.next();
+			this.songManager.getMeasureManager().transposeNotes(measure, transposition, tryKeepString, applyToChords, applyToString );
+		}
+	}
+	
+	public void transposeNotes(TGTrack track, int[] transpositionStrings , boolean tryKeepString , boolean applyToChords ){
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasure measure = (TGMeasure)it.next();
+			this.songManager.getMeasureManager().transposeNotes(measure, transpositionStrings, tryKeepString , applyToChords);
+		}
+	}
+	
+	/**
+	 * Retorna true si es el primer compas
+	 */
+	public boolean isFirstMeasure(TGMeasure measure){
+		return (measure.getNumber() == 1);
+	}
+	
+	/**
+	 * Retorna true si es el ultimo compas
+	 */
+	public boolean isLastMeasure(TGMeasure measure){
+		return (getSongManager().getSong().countMeasureHeaders() == measure.getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGBeat.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGBeat.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGBeat.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGBeat.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGChannel.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGChannel.java
new file mode 100644
index 0000000..ec6c8d3
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGChannel.java
@@ -0,0 +1,179 @@
+package org.herac.tuxguitar.song.models;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+
+public abstract class TGChannel {
+	
+	public static final short DEFAULT_PERCUSSION_CHANNEL = 9;
+	public static final short DEFAULT_PERCUSSION_PROGRAM = 0;
+	public static final short DEFAULT_PERCUSSION_BANK = 128;
+	
+	public static final short DEFAULT_BANK = 0;
+	public static final short DEFAULT_PROGRAM = 25;
+	public static final short DEFAULT_VOLUME = 127;
+	public static final short DEFAULT_BALANCE = 64;
+	public static final short DEFAULT_CHORUS = 0;
+	public static final short DEFAULT_REVERB = 0;
+	public static final short DEFAULT_PHASER = 0;
+	public static final short DEFAULT_TREMOLO = 0;
+	
+	private int channelId;
+	private short bank;
+	private short program;
+	private short volume;
+	private short balance;
+	private short chorus;
+	private short reverb;
+	private short phaser;
+	private short tremolo;
+	private String name;
+	private List parameters;
+	
+	public TGChannel() {
+		this.channelId = 0;
+		this.bank = DEFAULT_BANK;
+		this.program = DEFAULT_PROGRAM;
+		this.volume = DEFAULT_VOLUME;
+		this.balance = DEFAULT_BALANCE;
+		this.chorus = DEFAULT_CHORUS;
+		this.reverb = DEFAULT_REVERB;
+		this.phaser = DEFAULT_PHASER;
+		this.tremolo = DEFAULT_TREMOLO;
+		this.name = new String();
+		this.parameters = new ArrayList();
+	}
+	
+	public int getChannelId() {
+		return this.channelId;
+	}
+	
+	public void setChannelId(int channelId) {
+		this.channelId = channelId;
+	}
+	
+	public short getBalance() {
+		return this.balance;
+	}
+	
+	public void setBalance(short balance) {
+		this.balance = balance;
+	}
+	
+	public short getChorus() {
+		return this.chorus;
+	}
+	
+	public void setChorus(short chorus) {
+		this.chorus = chorus;
+	}
+	
+	public short getBank() {
+		return this.bank;
+	}
+	
+	public void setBank(short bank) {
+		this.bank = bank;
+	}
+	
+	public short getProgram() {
+		return this.program;
+	}
+	
+	public void setProgram(short program) {
+		this.program = program;
+	}
+	
+	public short getPhaser() {
+		return this.phaser;
+	}
+	
+	public void setPhaser(short phaser) {
+		this.phaser = phaser;
+	}
+	
+	public short getReverb() {
+		return this.reverb;
+	}
+	
+	public void setReverb(short reverb) {
+		this.reverb = reverb;
+	}
+	
+	public short getTremolo() {
+		return this.tremolo;
+	}
+	
+	public void setTremolo(short tremolo) {
+		this.tremolo = tremolo;
+	}
+	
+	public short getVolume() {
+		return this.volume;
+	}
+	
+	public void setVolume(short volume) {
+		this.volume = volume;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public Iterator getParameters() {
+		return this.parameters.iterator();
+	}
+	
+	public void addParameter(TGChannelParameter parameter){
+		this.parameters.add(parameter);
+	}
+	
+	public void addParameter(int index,TGChannelParameter parameter){
+		this.parameters.add(index,parameter);
+	}
+	
+	public TGChannelParameter getParameter(int index){
+		if(index >= 0 && index < countParameters()){
+			return (TGChannelParameter)this.parameters.get(index);
+		}
+		return null;
+	}
+	
+	public void removeParameter(int index){
+		this.parameters.remove(index);
+	}
+	
+	public int countParameters(){
+		return this.parameters.size();
+	}
+	
+	public boolean isPercussionChannel(){
+		return (this.getBank() == DEFAULT_PERCUSSION_BANK);
+	}
+	
+	public TGChannel clone(TGFactory factory){
+		TGChannel channel = factory.newChannel();
+		copy(channel);
+		return channel; 
+	}
+	
+	public void copy(TGChannel channel){
+		channel.setChannelId(getChannelId());
+		channel.setBank(getBank());
+		channel.setProgram(getProgram());
+		channel.setVolume(getVolume());
+		channel.setBalance(getBalance());
+		channel.setChorus(getChorus());
+		channel.setReverb(getReverb());
+		channel.setPhaser(getPhaser());
+		channel.setTremolo(getTremolo());
+		channel.setName(getName());
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGChannelParameter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGChannelParameter.java
new file mode 100644
index 0000000..e9ac213
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGChannelParameter.java
@@ -0,0 +1,40 @@
+package org.herac.tuxguitar.song.models;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+
+public abstract class TGChannelParameter {
+	
+	private String key;
+	private String value;
+	
+	public TGChannelParameter(){
+		super();
+	}
+	
+	public String getKey() {
+		return this.key;
+	}
+	
+	public void setKey(String key) {
+		this.key = key;
+	}
+	
+	public String getValue() {
+		return this.value;
+	}
+	
+	public void setValue(String value) {
+		this.value = value;
+	}
+	
+	public void copy(TGChannelParameter channelParameter){
+		channelParameter.setKey(getKey());
+		channelParameter.setValue(getValue());
+	}
+	
+	public TGChannelParameter clone(TGFactory factory){
+		TGChannelParameter tgChannelParameter = factory.newChannelParameter();
+		copy(tgChannelParameter);
+		return tgChannelParameter;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGChord.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGChord.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGChord.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGChord.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGColor.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGColor.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGColor.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGColor.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGDivisionType.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGDivisionType.java
new file mode 100644
index 0000000..91597f9
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGDivisionType.java
@@ -0,0 +1,91 @@
+/*
+ * Created on 05-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.song.models;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public abstract class TGDivisionType {
+	
+	public static final TGDivisionType NORMAL = newDivisionType(1,1);
+	
+	public static final TGDivisionType TRIPLET = newDivisionType(3,2);
+	
+	public static final TGDivisionType[] ALTERED_DIVISION_TYPES = new TGDivisionType[]{
+		newDivisionType(3,2),
+		newDivisionType(5,4),
+		newDivisionType(6,4),
+		newDivisionType(7,4),
+		newDivisionType(9,8),
+		newDivisionType(10,8),
+		newDivisionType(11,8),
+		newDivisionType(12,8),
+		newDivisionType(13,8),
+	};
+	
+	/**
+	 * Cantidad de Duraciones que entran en los tiempos
+	 */
+	private int enters;
+	/**
+	 * Tiempos
+	 */
+	private int times;
+	
+	public TGDivisionType(){
+		this.enters = 1;
+		this.times = 1;
+	}
+	
+	public int getEnters() {
+		return this.enters;
+	}
+	
+	public void setEnters(int enters) {
+		this.enters = enters;
+	}
+	
+	public int getTimes() {
+		return this.times;
+	}
+	
+	public void setTimes(int times) {
+		this.times = times;
+	}
+	
+	public long convertTime(long time){
+		return time * this.times / this.enters;
+	}
+	
+	public boolean isEqual(TGDivisionType divisionType){
+		return (divisionType.getEnters() == getEnters() && divisionType.getTimes() == getTimes());
+	}
+	
+	public TGDivisionType clone(TGFactory factory){
+		TGDivisionType divisionType = factory.newDivisionType();
+		copy(divisionType);
+		return divisionType;
+	}
+	
+	public void copy(TGDivisionType divisionType){
+		divisionType.setEnters(this.enters);
+		divisionType.setTimes(this.times);
+	}
+	
+	private static TGDivisionType newDivisionType(int enters,int times){
+		TGDivisionType divisionType = new TGFactory().newDivisionType();
+		divisionType.setEnters(enters);
+		divisionType.setTimes(times);
+		return divisionType;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGDuration.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGDuration.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGDuration.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGDuration.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGLyric.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGLyric.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGLyric.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGLyric.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGMarker.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGMarker.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGMarker.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGMarker.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGMeasure.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGMeasure.java
new file mode 100644
index 0000000..8b2244c
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGMeasure.java
@@ -0,0 +1,165 @@
+/*
+ * Created on 26-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.song.models;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public abstract class TGMeasure {
+	
+	public static final int CLEF_TREBLE = 1;
+	public static final int CLEF_BASS = 2;
+	public static final int CLEF_TENOR = 3;
+	public static final int CLEF_ALTO = 4;
+	
+	public static final int DEFAULT_CLEF = CLEF_TREBLE;
+	public static final int DEFAULT_KEY_SIGNATURE= 0;
+	
+	private TGMeasureHeader header;
+	private TGTrack track;
+	private int clef;
+	private int keySignature;
+	
+	private List beats;
+	
+	public TGMeasure(TGMeasureHeader header){
+		this.header = header;
+		this.clef = DEFAULT_CLEF;
+		this.keySignature = DEFAULT_KEY_SIGNATURE;
+		this.beats = new ArrayList();
+	}
+	
+	public TGTrack getTrack() {
+		return this.track;
+	}
+	
+	public void setTrack(TGTrack track) {
+		this.track = track;
+	}
+	
+	public int getClef() {
+		return this.clef;
+	}
+	
+	public void setClef(int clef) {
+		this.clef = clef;
+	}
+	
+	public int getKeySignature() {
+		return this.keySignature;
+	}
+	
+	public void setKeySignature(int keySignature) {
+		this.keySignature = keySignature;
+	}
+	
+	public List getBeats() {
+		return this.beats;
+	}
+	
+	public void addBeat(TGBeat beat){
+		beat.setMeasure(this);
+		this.beats.add(beat);
+	}
+	
+	public void moveBeat(int index,TGBeat beat){
+		this.beats.remove(beat);
+		this.beats.add(index,beat);
+	}
+	
+	public void removeBeat(TGBeat beat){
+		this.beats.remove(beat);
+	}
+	
+	public TGBeat getBeat(int index){
+		if(index >= 0 && index < countBeats()){
+			return (TGBeat)this.beats.get(index);
+		}
+		return null;
+	}
+	
+	public int countBeats(){
+		return this.beats.size();
+	}
+	
+	public TGMeasureHeader getHeader() {
+		return this.header;
+	}
+	
+	public void setHeader(TGMeasureHeader header) {
+		this.header = header;
+	}
+	
+	public int getNumber() {
+		return this.header.getNumber();
+	}
+	
+	public int getRepeatClose() {
+		return this.header.getRepeatClose();
+	}
+	
+	public long getStart() {
+		return this.header.getStart();
+	}
+	
+	public TGTempo getTempo() {
+		return this.header.getTempo();
+	}
+	
+	public TGTimeSignature getTimeSignature() {
+		return this.header.getTimeSignature();
+	}
+	
+	public boolean isRepeatOpen() {
+		return this.header.isRepeatOpen();
+	}
+	
+	public int getTripletFeel() {
+		return this.header.getTripletFeel();
+	}
+	
+	public long getLength() {
+		return this.header.getLength();
+	}
+	
+	public TGMarker getMarker(){
+		return this.header.getMarker();
+	}
+	
+	public boolean hasMarker() {
+		return this.header.hasMarker();
+	}
+	
+	public void makeEqual(TGMeasure measure){
+		this.clef = measure.getClef();
+		this.keySignature = measure.getKeySignature();
+		this.beats.clear();
+		for(int i = 0; i < measure.countBeats(); i ++){
+			TGBeat beat = measure.getBeat(i);
+			this.addBeat(beat);
+		}
+	}
+	
+	public TGMeasure clone(TGFactory factory,TGMeasureHeader header){
+		TGMeasure measure = factory.newMeasure(header);
+		measure.setClef(getClef());
+		measure.setKeySignature(getKeySignature());
+		for(int i = 0; i < countBeats(); i ++){
+			TGBeat beat = (TGBeat)this.beats.get(i);
+			measure.addBeat(beat.clone(factory));
+		}
+		return measure;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGMeasureHeader.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGMeasureHeader.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGMeasureHeader.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGMeasureHeader.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGNote.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGNote.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGNote.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGNote.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGNoteEffect.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGNoteEffect.java
new file mode 100644
index 0000000..9939555
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGNoteEffect.java
@@ -0,0 +1,416 @@
+/*
+ * Created on 26-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.song.models;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public abstract class TGNoteEffect {
+	private TGEffectBend bend;
+	private TGEffectTremoloBar tremoloBar;
+	private TGEffectHarmonic harmonic;
+	private TGEffectGrace grace;
+	private TGEffectTrill trill;
+	private TGEffectTremoloPicking tremoloPicking;
+	private boolean vibrato;
+	private boolean deadNote;
+	private boolean slide;
+	private boolean hammer;
+	private boolean ghostNote;
+	private boolean accentuatedNote;
+	private boolean heavyAccentuatedNote;
+	private boolean palmMute;
+	private boolean staccato;
+	private boolean tapping;
+	private boolean slapping;
+	private boolean popping;
+	private boolean fadeIn;
+	private boolean letRing;
+	
+	public TGNoteEffect(){
+		this.bend = null;
+		this.tremoloBar = null;
+		this.harmonic = null;
+		this.grace = null;
+		this.trill = null;
+		this.tremoloPicking = null;
+		this.vibrato = false;
+		this.deadNote = false;
+		this.slide = false;
+		this.hammer = false;
+		this.ghostNote = false;
+		this.accentuatedNote = false;
+		this.heavyAccentuatedNote = false;
+		this.palmMute = false;
+		this.staccato = false;
+		this.tapping = false;
+		this.slapping = false;
+		this.popping = false;
+		this.fadeIn = false;
+		this.letRing = false;
+	}
+	
+	public boolean isDeadNote() {
+		return this.deadNote;
+	}
+	
+	public void setDeadNote(boolean deadNote) {
+		this.deadNote = deadNote;
+		//si es true, quito los efectos incompatibles
+		if(this.isDeadNote()){
+			this.bend = null;
+			this.trill = null;
+			this.slide = false;
+			this.hammer = false;
+			this.tremoloBar = null;
+			this.tremoloPicking = null;
+		}
+	}
+	
+	public boolean isVibrato() {
+		return this.vibrato;
+	}
+	
+	public void setVibrato(boolean vibrato) {
+		this.vibrato = vibrato;
+		//si no es null quito los efectos incompatibles
+		if(this.isVibrato()){
+			this.trill = null;
+			this.tremoloPicking = null;
+		}
+	}
+	
+	public TGEffectBend getBend() {
+		return this.bend;
+	}
+	
+	public void setBend(TGEffectBend bend) {
+		this.bend = bend;
+		//si no es null quito los efectos incompatibles
+		if(this.isBend()){
+			this.trill = null;
+			this.deadNote = false;
+			this.slide = false;
+			this.hammer = false;
+			this.tremoloBar = null;
+			this.tremoloPicking = null;
+		}
+	}
+	
+	public boolean isBend() {
+		return (this.bend != null && !this.bend.getPoints().isEmpty());
+	}
+	
+	public TGEffectTremoloBar getTremoloBar() {
+		return this.tremoloBar;
+	}
+	
+	public void setTremoloBar(TGEffectTremoloBar tremoloBar) {
+		this.tremoloBar = tremoloBar;
+		//si no es null quito los efectos incompatibles
+		if(this.isTremoloBar()){
+			this.bend = null;
+			this.trill = null;
+			this.deadNote = false;
+			this.slide = false;
+			this.hammer = false;
+			this.tremoloPicking = null;
+		}
+	}
+	
+	public boolean isTremoloBar() {
+		return (this.tremoloBar != null);
+	}
+	
+	
+	public TGEffectTrill getTrill() {
+		return this.trill;
+	}
+	
+	public void setTrill(TGEffectTrill trill) {
+		this.trill = trill;
+		//si es true, quito los efectos incompatibles
+		if(this.isTrill()){
+			this.bend = null;
+			this.tremoloBar = null;
+			this.tremoloPicking = null;
+			this.slide = false;
+			this.hammer = false;
+			this.deadNote = false;
+			this.vibrato = false;
+		}
+	}
+	
+	public boolean isTrill() {
+		return (this.trill != null);
+	}
+	
+	public TGEffectTremoloPicking getTremoloPicking() {
+		return this.tremoloPicking;
+	}
+	
+	public void setTremoloPicking(TGEffectTremoloPicking tremoloPicking) {
+		this.tremoloPicking = tremoloPicking;
+		//si es true, quito los efectos incompatibles
+		if(this.isTremoloPicking()){
+			this.trill = null;
+			this.bend = null;
+			this.tremoloBar = null;
+			this.slide = false;
+			this.hammer = false;
+			this.deadNote = false;
+			this.vibrato = false;
+		}
+	}
+	
+	public boolean isTremoloPicking() {
+		return (this.tremoloPicking != null);
+	}
+	
+	public boolean isHammer() {
+		return this.hammer;
+	}
+	
+	public void setHammer(boolean hammer) {
+		this.hammer = hammer;
+		//si es true, quito los efectos incompatibles
+		if(this.isHammer()){
+			this.trill = null;
+			this.bend = null;
+			this.deadNote = false;
+			this.slide = false;
+			this.tremoloBar = null;
+			this.tremoloPicking = null;
+		}
+	}
+	
+	public boolean isSlide() {
+		return this.slide;
+	}
+	
+	public void setSlide(boolean slide) {
+		this.slide = slide;
+		//si es true, quito los efectos incompatibles
+		if(this.isSlide()){
+			this.trill = null;
+			this.bend = null;
+			this.deadNote = false;
+			this.hammer = false;
+			this.tremoloBar = null;
+			this.tremoloPicking = null;
+		}
+	}
+	
+	public boolean isGhostNote() {
+		return this.ghostNote;
+	}
+	
+	public void setGhostNote(boolean ghostNote) {
+		this.ghostNote = ghostNote;
+		//si es true, quito los efectos incompatibles
+		if(this.isGhostNote()){
+			this.accentuatedNote = false;
+			this.heavyAccentuatedNote = false;
+		}
+	}
+	
+	public boolean isAccentuatedNote() {
+		return this.accentuatedNote;
+	}
+	
+	public void setAccentuatedNote(boolean accentuatedNote) {
+		this.accentuatedNote = accentuatedNote;
+		//si es true, quito los efectos incompatibles
+		if(this.isAccentuatedNote()){
+			this.ghostNote = false;
+			this.heavyAccentuatedNote = false;
+		}
+	}
+	
+	public boolean isHeavyAccentuatedNote() {
+		return this.heavyAccentuatedNote;
+	}
+	
+	public void setHeavyAccentuatedNote(boolean heavyAccentuatedNote) {
+		this.heavyAccentuatedNote = heavyAccentuatedNote;
+		//si es true, quito los efectos incompatibles
+		if(this.isHeavyAccentuatedNote()){
+			this.ghostNote = false;
+			this.accentuatedNote = false;
+		}
+	}
+	
+	public void setHarmonic(TGEffectHarmonic harmonic) {
+		this.harmonic = harmonic;
+	}
+	
+	public TGEffectHarmonic getHarmonic() {
+		return this.harmonic;
+	}
+	
+	public boolean isHarmonic() {
+		return (this.harmonic != null);
+	}
+	
+	public TGEffectGrace getGrace() {
+		return this.grace;
+	}
+	
+	public void setGrace(TGEffectGrace grace) {
+		this.grace = grace;
+	}
+	
+	public boolean isGrace() {
+		return (this.grace != null);
+	}
+	
+	public boolean isPalmMute() {
+		return this.palmMute;
+	}
+	
+	public void setPalmMute(boolean palmMute) {
+		this.palmMute = palmMute;
+		//si es true, quito los efectos incompatibles
+		if(this.isPalmMute()){
+			this.staccato = false;
+			this.letRing = false;
+		}
+	}
+	
+	public boolean isStaccato() {
+		return this.staccato;
+	}
+	
+	public void setStaccato(boolean staccato) {
+		this.staccato = staccato;
+		//si es true, quito los efectos incompatibles
+		if(this.isStaccato()){
+			this.palmMute = false;
+			this.letRing = false;
+		}
+	}
+	
+	public boolean isLetRing() {
+		return this.letRing;
+	}
+	
+	public void setLetRing(boolean letRing) {
+		this.letRing = letRing;
+		//si es true, quito los efectos incompatibles
+		if(this.isLetRing()){
+			this.staccato = false;
+			this.palmMute = false;
+		}
+	}
+	
+	public boolean isPopping() {
+		return this.popping;
+	}
+	
+	public void setPopping(boolean popping) {
+		this.popping = popping;
+		//si es true, quito los efectos incompatibles
+		if(this.isPopping()){
+			this.tapping = false;
+			this.slapping = false;
+		}
+	}
+	
+	public boolean isSlapping() {
+		return this.slapping;
+	}
+	
+	public void setSlapping(boolean slapping) {
+		this.slapping = slapping;
+		//si es true, quito los efectos incompatibles
+		if(this.isSlapping()){
+			this.tapping = false;
+			this.popping = false;
+		}
+	}
+	
+	public boolean isTapping() {
+		return this.tapping;
+	}
+	
+	public void setTapping(boolean tapping) {
+		this.tapping = tapping;
+		//si es true, quito los efectos incompatibles
+		if(this.isTapping()){
+			this.slapping = false;
+			this.popping = false;
+		}
+	}
+	
+	public boolean isFadeIn() {
+		return this.fadeIn;
+	}
+	
+	public void setFadeIn(boolean fadeIn) {
+		this.fadeIn = fadeIn;
+	}
+	
+	public boolean hasAnyEffect(){
+		return (isBend() ||
+				isTremoloBar() ||
+				isHarmonic() ||
+				isGrace() ||
+				isTrill() ||
+				isTremoloPicking() ||
+				isVibrato() ||
+				isDeadNote() ||
+				isSlide() ||
+				isHammer() ||
+				isGhostNote() ||
+				isAccentuatedNote() ||
+				isHeavyAccentuatedNote() ||
+				isPalmMute() ||
+				isLetRing() ||
+				isStaccato() ||
+				isTapping() ||
+				isSlapping() ||
+				isPopping() ||
+				isFadeIn());
+	}
+	
+	public TGNoteEffect clone(TGFactory factory){
+		TGNoteEffect effect = factory.newEffect();
+		effect.setVibrato(isVibrato());
+		effect.setDeadNote(isDeadNote());
+		effect.setSlide(isSlide());
+		effect.setHammer(isHammer());
+		effect.setGhostNote(isGhostNote());
+		effect.setAccentuatedNote(isAccentuatedNote());
+		effect.setHeavyAccentuatedNote(isHeavyAccentuatedNote());
+		effect.setPalmMute(isPalmMute());
+		effect.setLetRing(isLetRing());
+		effect.setStaccato(isStaccato());
+		effect.setTapping(isTapping());
+		effect.setSlapping(isSlapping());
+		effect.setPopping(isPopping());
+		effect.setFadeIn(isFadeIn());
+		effect.setBend(isBend()?(TGEffectBend)this.bend.clone(factory):null);
+		effect.setTremoloBar(isTremoloBar()?(TGEffectTremoloBar)this.tremoloBar.clone(factory):null);
+		effect.setHarmonic(isHarmonic()?(TGEffectHarmonic)this.harmonic.clone(factory):null);
+		effect.setGrace(isGrace()?(TGEffectGrace)this.grace.clone(factory):null);
+		effect.setTrill(isTrill()?(TGEffectTrill)this.trill.clone(factory):null);
+		effect.setTremoloPicking(isTremoloPicking()?(TGEffectTremoloPicking)this.tremoloPicking.clone(factory):null);
+		return effect;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGScale.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGScale.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGScale.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGScale.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGSong.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGSong.java
new file mode 100644
index 0000000..a5edcf8
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGSong.java
@@ -0,0 +1,260 @@
+/*
+ * Created on 23-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.song.models;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public abstract class TGSong {
+	
+	private String name;
+	private String artist;
+	private String album;
+	private String author;
+	private String date;
+	private String copyright;
+	private String writer;
+	private String transcriber;
+	private String comments;
+	private List tracks;
+	private List measureHeaders;
+	private List channels;
+	
+	public TGSong() {
+		this.name = new String();
+		this.artist = new String();
+		this.album = new String();
+		this.author = new String();
+		this.date = new String();
+		this.copyright = new String();
+		this.writer = new String();
+		this.transcriber = new String();
+		this.comments = new String();
+		this.tracks = new ArrayList();
+		this.channels = new ArrayList();
+		this.measureHeaders = new ArrayList();
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public String getAlbum() {
+		return this.album;
+	}
+	
+	public void setAlbum(String album) {
+		this.album = album;
+	}
+	
+	public String getAuthor() {
+		return this.author;
+	}
+	
+	public void setAuthor(String author) {
+		this.author = author;
+	}
+	
+	public String getArtist() {
+		return this.artist;
+	}
+	
+	public void setArtist(String artist) {
+		this.artist = artist;
+	}
+	
+	public String getDate() {
+		return this.date;
+	}
+	
+	public void setDate(String date) {
+		this.date = date;
+	}
+	
+	public String getCopyright() {
+		return this.copyright;
+	}
+	
+	public void setCopyright(String copyright) {
+		this.copyright = copyright;
+	}
+	
+	public String getWriter() {
+		return this.writer;
+	}
+	
+	public void setWriter(String writer) {
+		this.writer = writer;
+	}
+	
+	public String getTranscriber() {
+		return this.transcriber;
+	}
+	
+	public void setTranscriber(String transcriber) {
+		this.transcriber = transcriber;
+	}
+	
+	public String getComments() {
+		return this.comments;
+	}
+	
+	public void setComments(String comments) {
+		this.comments = comments;
+	}
+	
+	public int countMeasureHeaders(){
+		return this.measureHeaders.size();
+	}
+	
+	public void addMeasureHeader(TGMeasureHeader measureHeader){
+		this.addMeasureHeader(countMeasureHeaders(),measureHeader);
+	}
+	
+	public void addMeasureHeader(int index,TGMeasureHeader measureHeader){
+		measureHeader.setSong(this);
+		this.measureHeaders.add(index,measureHeader);
+	}
+	
+	public void removeMeasureHeader(int index){
+		this.measureHeaders.remove(index);
+	}
+	
+	public void removeMeasureHeader(TGMeasureHeader measureHeader){
+		this.measureHeaders.remove(measureHeader);
+	}
+	
+	public TGMeasureHeader getMeasureHeader(int index){
+		return (TGMeasureHeader)this.measureHeaders.get(index);
+	}
+	
+	public Iterator getMeasureHeaders() {
+		return this.measureHeaders.iterator();
+	}
+	
+	public int countTracks(){
+		return this.tracks.size();
+	}
+	
+	public void addTrack(TGTrack track){
+		this.addTrack(countTracks(),track);
+	}
+	
+	public void addTrack(int index,TGTrack track){
+		track.setSong(this);
+		this.tracks.add(index,track);
+	}
+	
+	public void moveTrack(int index,TGTrack track){
+		this.tracks.remove(track);
+		this.tracks.add(index,track);
+	}
+	
+	public void removeTrack(TGTrack track){
+		this.tracks.remove(track);
+		track.clear();
+	}
+	
+	public TGTrack getTrack(int index){
+		return (TGTrack)this.tracks.get(index);
+	}
+	
+	public Iterator getTracks() {
+		return this.tracks.iterator();
+	}
+	
+	public int countChannels(){
+		return this.channels.size();
+	}
+	
+	public void addChannel(TGChannel channel){
+		this.addChannel(countChannels(),channel);
+	}
+	
+	public void addChannel(int index,TGChannel channel){
+		this.channels.add(index,channel);
+	}
+	
+	public void moveChannel(int index,TGChannel channel){
+		this.channels.remove(channel);
+		this.channels.add(index,channel);
+	}
+	
+	public void removeChannel(TGChannel channel){
+		this.channels.remove(channel);
+	}
+	
+	public TGChannel getChannel(int index){
+		return (TGChannel)this.channels.get(index);
+	}
+	
+	public Iterator getChannels() {
+		return this.channels.iterator();
+	}
+	
+	public boolean isEmpty(){
+		return (countMeasureHeaders() == 0 || countTracks() == 0);
+	}
+	
+	public void clear(){
+		Iterator tracks = getTracks();
+		while(tracks.hasNext()){
+			TGTrack track = (TGTrack)tracks.next();
+			track.clear();
+		}
+		this.tracks.clear();
+		this.channels.clear();
+		this.measureHeaders.clear();
+	}
+	
+	public TGSong clone(TGFactory factory){
+		TGSong song = factory.newSong();
+		copy(factory,song);
+		return song;
+	}
+	
+	public void copy(TGFactory factory,TGSong song){
+		song.clear();
+		song.setName(getName());
+		song.setArtist(getArtist());
+		song.setAlbum(getAlbum());
+		song.setAuthor(getAuthor());
+		song.setDate(getDate());
+		song.setCopyright(getCopyright());
+		song.setWriter(getWriter());
+		song.setTranscriber(getTranscriber());
+		song.setComments(getComments());
+		Iterator headers = getMeasureHeaders();
+		while(headers.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)headers.next();
+			song.addMeasureHeader(header.clone(factory));
+		}
+		Iterator channels = getChannels();
+		while(channels.hasNext()){
+			TGChannel channel = (TGChannel)channels.next();
+			song.addChannel(channel.clone(factory));
+		}
+		Iterator tracks = getTracks();
+		while(tracks.hasNext()){
+			TGTrack track = (TGTrack)tracks.next();
+			song.addTrack(track.clone(factory, song));
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGString.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGString.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGString.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGString.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGStroke.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGStroke.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGStroke.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGStroke.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGTempo.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGTempo.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGTempo.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGTempo.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGText.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGText.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGText.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGText.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGTimeSignature.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGTimeSignature.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGTimeSignature.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGTimeSignature.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGTrack.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGTrack.java
new file mode 100644
index 0000000..3ee6424
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGTrack.java
@@ -0,0 +1,197 @@
+/*
+ * Created on 23-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.song.models;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public abstract class TGTrack {
+	public static final int MAX_OFFSET = 24;
+	public static final int MIN_OFFSET = -24;
+	
+	private int number;
+	private int offset;
+	private int channelId;
+	private boolean solo;
+	private boolean mute;
+	private String name;
+	private List measures;
+	private List strings;
+	private TGColor color;
+	private TGLyric lyrics;
+	private TGSong song;
+	
+	public TGTrack(TGFactory factory) {
+		this.number = 0;
+		this.offset = 0;
+		this.channelId = -1;
+		this.solo = false;
+		this.mute = false;
+		this.name = new String();
+		this.measures = new ArrayList();
+		this.strings = new ArrayList();
+		this.color = factory.newColor();
+		this.lyrics = factory.newLyric();
+	}
+	
+	public int getNumber() {
+		return this.number;
+	}
+	
+	public void setNumber(int number) {
+		this.number = number;
+	}
+	
+	public Iterator getMeasures() {
+		return this.measures.iterator();
+	}
+	
+	public void addMeasure(TGMeasure measure){
+		measure.setTrack(this);
+		this.measures.add(measure);
+	}
+	
+	public void addMeasure(int index,TGMeasure measure){
+		measure.setTrack(this);
+		this.measures.add(index,measure);
+	}
+	
+	public TGMeasure getMeasure(int index){
+		if(index >= 0 && index < countMeasures()){
+			return (TGMeasure)this.measures.get(index);
+		}
+		return null;
+	}
+	
+	public void removeMeasure(int index){
+		this.measures.remove(index);
+	}
+	
+	public int countMeasures(){
+		return this.measures.size();
+	}
+	
+	public List getStrings() {
+		return this.strings;
+	}
+	
+	public void setStrings(List strings) {
+		this.strings = strings;
+	}
+	
+	public TGColor getColor() {
+		return this.color;
+	}
+	
+	public void setColor(TGColor color) {
+		this.color = color;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public int getOffset() {
+		return this.offset;
+	}
+	
+	public void setOffset(int offset) {
+		this.offset = offset;
+	}
+	
+	public boolean isSolo() {
+		return this.solo;
+	}
+	
+	public void setSolo(boolean solo) {
+		this.solo = solo;
+	}
+	
+	public boolean isMute() {
+		return this.mute;
+	}
+	
+	public void setMute(boolean mute) {
+		this.mute = mute;
+	}
+	
+	public int getChannelId() {
+		return this.channelId;
+	}
+	
+	public void setChannelId(int channelId) {
+		this.channelId = channelId;
+	}
+	
+	public TGLyric getLyrics() {
+		return this.lyrics;
+	}
+	
+	public void setLyrics(TGLyric lyrics) {
+		this.lyrics = lyrics;
+	}
+	
+	public TGString getString(int number){
+		return (TGString)this.strings.get(number - 1);
+	}
+	
+	public int stringCount(){
+		return this.strings.size();
+	}
+	
+	public TGSong getSong() {
+		return this.song;
+	}
+	
+	public void setSong(TGSong song) {
+		this.song = song;
+	}
+	
+	public void clear(){
+		this.strings.clear();
+		this.measures.clear();
+	}
+	
+	public TGTrack clone(TGFactory factory,TGSong song){
+		TGTrack track = factory.newTrack();
+		copy(factory, song, track);
+		return track;
+	}
+	
+	public void copy(TGFactory factory,TGSong song,TGTrack track){
+		track.clear();
+		track.setNumber(getNumber());
+		track.setName(getName());
+		track.setOffset(getOffset());
+		track.setSolo(isSolo());
+		track.setMute(isMute());
+		track.setChannelId(getChannelId());
+		getColor().copy(track.getColor());
+		getLyrics().copy(track.getLyrics());
+		for (int i = 0; i < getStrings().size(); i++) {
+			TGString string = (TGString) getStrings().get(i);
+			track.getStrings().add(string.clone(factory));
+		}
+		for (int i = 0; i < countMeasures(); i++) {
+			TGMeasure measure = getMeasure(i);
+			track.addMeasure(measure.clone(factory,song.getMeasureHeader(i)));
+		}
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGVelocities.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGVelocities.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGVelocities.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGVelocities.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGVoice.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGVoice.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/TGVoice.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/TGVoice.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectBend.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectBend.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectBend.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectBend.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectGrace.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectGrace.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectGrace.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectGrace.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectHarmonic.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectHarmonic.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectHarmonic.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectHarmonic.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloBar.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloBar.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloBar.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloBar.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloPicking.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloPicking.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloPicking.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectTremoloPicking.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectTrill.java b/TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectTrill.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/song/models/effects/TGEffectTrill.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/song/models/effects/TGEffectTrill.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/util/TGClassLoader.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGClassLoader.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/util/TGClassLoader.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/util/TGClassLoader.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGException.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGException.java
new file mode 100644
index 0000000..ca7aae8
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGException.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.util;
+
+public class TGException extends RuntimeException {
+	
+	private static final long serialVersionUID = 8298443126251976034L;
+
+	public TGException(){
+		super();
+	}
+	
+	public TGException(String message){
+		super(message);
+	}
+	
+	public TGException(Throwable cause){
+		super(cause);
+	}
+	
+	public TGException(String message, Throwable cause){
+		super(message, cause);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGLibraryLoader.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGLibraryLoader.java
new file mode 100644
index 0000000..252f8ee
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGLibraryLoader.java
@@ -0,0 +1,144 @@
+package org.herac.tuxguitar.util;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FilenameFilter;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.util.error.TGErrorManager;
+
+public class TGLibraryLoader {
+	
+	private static TGLibraryLoader instance;
+	
+	private TGLibraryLoader(){
+		super();
+	}
+	
+	public static TGLibraryLoader instance(){
+		if(instance == null){
+			instance = new TGLibraryLoader();
+		}
+		return instance;
+	}
+	
+	public void loadLibrary(File file){
+		try{
+			System.out.println("Loading: " + file.getAbsolutePath());
+			System.load(file.getAbsolutePath());
+		}catch(Throwable throwable){
+			TGErrorManager.getInstance().handleError(throwable);
+		}
+	}
+	
+	public void loadLibraries(File folder, String prefix, String extension){
+		if(folder != null && folder.exists()){
+			List libraries = findLibrariesToLoad(folder, prefix, extension);
+			for(int i = 0; i < libraries.size(); i ++){
+				String library = (String)libraries.get(i);
+				File file = new File(getLibraryFileName(folder, library));
+				if(file.exists() && !file.isDirectory()){
+					loadLibrary(file);
+				}
+			}
+		}
+	}
+	
+	private String getLibraryFileName(File folder, String library){
+		return (folder.getAbsolutePath() + File.separator + library);
+	}
+	
+	private String getLibraryDependenciesFileName(File folder, String library){
+		return (getLibraryFileName(folder, library) + ".deps");
+	}
+	
+	private List findLibrariesToLoad(File folder, String prefix, String extension){
+		List libraries = new ArrayList();
+		String[] files = folder.list(createFilenameFilter(prefix, extension));
+		String library = null;
+		while((library = findNextLibraryToLoad(libraries, folder, files)) != null){
+			libraries.add(library);
+		}
+		return libraries;
+	}
+	
+	private String findNextLibraryToLoad(List libraries, File folder, String[] files){
+		for(int i = 0; i < files.length; i ++){
+			if(!libraries.contains(files[i])){
+				return findNextLibraryToLoad(libraries, folder, files, files[i]);
+			}
+		}
+		return null;
+	}
+	
+	private String findNextLibraryToLoad(List libraries, File folder, String[] files, String expectedLib){		
+		List dependencies = findDependencyLibraries(folder, expectedLib);
+		if( dependencies != null ){
+			Iterator it = dependencies.iterator();
+			while(it.hasNext()){
+				String dependency = (String) it.next();
+				if(!libraries.contains(dependency)){
+					for(int i = 0; i < files.length; i ++){
+						if( dependency.equals(files[i]) ){
+							return findNextLibraryToLoad(libraries, folder, files, dependency);
+						}
+					}
+				}
+			}
+		}
+		return expectedLib;
+	}
+	
+	private List findDependencyLibraries(File folder, String library){
+		return findDependencyLibraries(new File(getLibraryDependenciesFileName(folder, library)));
+	}
+	
+	private List findDependencyLibraries(File file){
+		try {
+			List libraries = new ArrayList();
+			if( file.exists() ){
+				BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
+				String library = null;
+				while((library = reader.readLine()) != null){
+					libraries.add(library.trim());
+				}
+				reader.close();
+			}
+			return libraries;
+		} catch (UnsupportedEncodingException e) {
+			TGErrorManager.getInstance().handleError(e);
+		} catch (IOException e) {
+			TGErrorManager.getInstance().handleError(e);
+		}
+		return null;
+	}
+	
+	private FilenameFilter createFilenameFilter(final String prefix, final String extension){
+		return new FilenameFilter() {
+			public boolean accept(File dir, String name) {
+				if(name == null){
+					return false;
+				}
+				if(prefix != null && prefix.length() > 0){
+					int index = name.indexOf(prefix);
+					if(index != 0){
+						return false;
+					}
+				}
+				if(extension != null && extension.length() > 0){
+					int index = name.indexOf(extension);
+					if(index != ( name.length() - extension.length() ) ){
+						return false;
+					}
+				}
+				return true;
+			}
+		};
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/util/TGLock.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGLock.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/util/TGLock.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/util/TGLock.java
diff --git a/TuxGuitar/src/org/herac/tuxguitar/util/TGServiceReader.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGServiceReader.java
similarity index 100%
rename from TuxGuitar/src/org/herac/tuxguitar/util/TGServiceReader.java
rename to TuxGuitar-lib/src/org/herac/tuxguitar/util/TGServiceReader.java
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGSynchronizer.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGSynchronizer.java
new file mode 100644
index 0000000..1750998
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGSynchronizer.java
@@ -0,0 +1,75 @@
+package org.herac.tuxguitar.util;
+
+
+public class TGSynchronizer {
+	
+	private static TGSynchronizer instance;
+	
+	private TGSynchronizerController controller;
+	
+	private TGSynchronizer(){
+		super();
+	}
+	
+	public static TGSynchronizer instance(){
+		if (instance == null) {
+			synchronized (TGSynchronizer.class) {
+				instance = new TGSynchronizer();
+			}
+		}
+		return instance;
+	}
+	
+	public void execute(TGRunnable runnable) throws TGException {
+		TGSynchronizerTask task = new TGSynchronizerTask(runnable);
+		this.controller.execute(task);
+		if( task.getThrowable() != null ){
+			throw task.getThrowable();
+		}
+	}
+	
+	public void executeLater(TGRunnable runnable) throws TGException {
+		TGSynchronizerTask task = new TGSynchronizerTask(runnable);
+		this.controller.executeLater(task);
+		if( task.getThrowable() != null ){
+			throw task.getThrowable();
+		}
+	}
+	
+	public void setController(TGSynchronizerController controller){
+		this.controller = controller;
+	}
+	
+	public class TGSynchronizerTask{
+		private TGRunnable runnable;
+		private TGException throwable;
+		
+		public TGSynchronizerTask(TGRunnable runnable){
+			this.runnable = runnable;
+			this.throwable = null;
+		}
+		
+		public TGException getThrowable(){
+			return this.throwable;
+		}
+		
+		public void run(){
+			try{
+				this.runnable.run();
+			} catch(TGException tgException){
+				this.throwable = tgException;
+			} catch(Throwable throwable){
+				this.throwable = new TGException(throwable);
+			}
+		}
+	}
+	
+	public interface TGRunnable {
+		public void run() throws TGException;
+	}
+	
+	public interface TGSynchronizerController{
+		public void execute(TGSynchronizerTask task);
+		public void executeLater(TGSynchronizerTask task);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGVersion.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGVersion.java
new file mode 100644
index 0000000..021527d
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/TGVersion.java
@@ -0,0 +1,47 @@
+package org.herac.tuxguitar.util;
+
+public class TGVersion {
+	
+	public static final TGVersion CURRENT = new TGVersion(1,3,0);
+	
+	private int major;
+	private int minor;
+	private int revision;
+	
+	public TGVersion(int major,int minor, int revision){
+		this.major = major;
+		this.minor = minor;
+		this.revision = revision;
+	}
+	
+	public int getMajor() {
+		return this.major;
+	}
+	
+	public int getMinor() {
+		return this.minor;
+	}
+	
+	public int getRevision() {
+		return this.revision;
+	}
+	
+	public boolean isSameVersion(TGVersion version){
+		if( version == null ){
+			return false;
+		}
+		return ( version.getMajor() == getMajor() && version.getMinor() == getMinor() && version.getRevision() == getRevision());
+	}
+	
+	public String getVersion(){
+		String version = (getMajor() + "." + getMinor());
+		if( getRevision() > 0 ){
+			version += ("." + getRevision());
+		}
+		return version;
+	}
+	
+	public String toString(){
+		return getVersion();
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/configuration/TGConfigManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/configuration/TGConfigManager.java
new file mode 100644
index 0000000..a3c4390
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/configuration/TGConfigManager.java
@@ -0,0 +1,104 @@
+package org.herac.tuxguitar.util.configuration;
+
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesManager;
+import org.herac.tuxguitar.util.properties.TGPropertiesUtil;
+
+public class TGConfigManager {
+	
+	public static final String RESOURCE = "config";
+	
+	private String module;
+	
+	private TGProperties properties;
+	
+	public TGConfigManager(String module){
+		this.module = module;
+		this.initialize();
+	}
+	
+	public void initialize(){
+		this.properties = TGPropertiesManager.getInstance().createProperties();
+		this.load();
+	}
+	
+	public void save(){
+		TGPropertiesManager.getInstance().writeProperties(this.properties, RESOURCE, this.module);
+	}
+	
+	public void load(){
+		TGPropertiesManager.getInstance().readProperties(this.properties, RESOURCE, this.module);
+	}
+	
+	public TGProperties getProperties(){
+		return this.properties;
+	}
+	
+	public String getStringValue(String key) {
+		return TGPropertiesUtil.getStringValue(this.properties, key);
+	}
+	
+	public String getStringValue(String key, String defaultValue) {
+		return TGPropertiesUtil.getStringValue(this.properties, key, defaultValue);
+	}
+	
+	public int getIntegerValue(String key, int defaultValue) {
+		return TGPropertiesUtil.getIntegerValue(this.properties, key, defaultValue);
+	}
+	
+	public int getIntegerValue(String key) {
+		return TGPropertiesUtil.getIntegerValue(this.properties, key);
+	}
+	
+	public float getFloatValue(String key,float defaultValue) {
+		return TGPropertiesUtil.getFloatValue(this.properties, key, defaultValue);
+	}
+	
+	public float getFloatValue(String key) {
+		return TGPropertiesUtil.getFloatValue(this.properties, key);
+	}
+	
+	public double getDoubleValue(String key,double defaultValue) {
+		return TGPropertiesUtil.getDoubleValue(this.properties, key, defaultValue);
+	}
+	
+	public double getDoubleValue(String key) {
+		return TGPropertiesUtil.getDoubleValue(this.properties, key);
+	}
+	
+	public boolean getBooleanValue(String key) {
+		return TGPropertiesUtil.getBooleanValue(this.properties, key);
+	}
+	
+	public boolean getBooleanValue(String key, boolean defaultValue) {
+		return TGPropertiesUtil.getBooleanValue(this.properties, key, defaultValue);
+	}
+	
+	public void setValue(String key, String value) {
+		TGPropertiesUtil.setValue(this.properties, key, value);
+	}
+
+	public void setValue(String key,int value){
+		TGPropertiesUtil.setValue(this.properties, key, value);
+	}
+	
+	public void setValue(String key,float value){
+		TGPropertiesUtil.setValue(this.properties, key, value);
+	}
+	
+	public void setValue(String key,double value){
+		TGPropertiesUtil.setValue(this.properties, key, value);
+	}
+	
+	public void setValue(String key,boolean value){
+		TGPropertiesUtil.setValue(this.properties, key, value);
+	}
+	
+	public void remove(String key){
+		this.properties.remove(key);
+	}
+	
+	public void clear(){
+		this.properties.clear();
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/error/TGErrorHandler.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/error/TGErrorHandler.java
new file mode 100644
index 0000000..56a4685
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/error/TGErrorHandler.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.util.error;
+
+public interface TGErrorHandler {
+	
+	public void handleError(Throwable throwable);
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/error/TGErrorManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/error/TGErrorManager.java
new file mode 100644
index 0000000..8a02ab9
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/error/TGErrorManager.java
@@ -0,0 +1,49 @@
+package org.herac.tuxguitar.util.error;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class TGErrorManager {
+	
+	private static TGErrorManager instance;
+	
+	private List errorHandlers;
+	
+	private TGErrorManager(){
+		this.errorHandlers = new ArrayList();
+	}
+	
+	public static TGErrorManager getInstance(){
+		synchronized (TGErrorManager.class) {
+			if( instance == null ){
+				instance = new TGErrorManager();
+			}
+			return instance;
+		}
+	}
+	
+	public void handleError(Throwable throwable){
+		Iterator it = this.errorHandlers.iterator();
+		while(it.hasNext()){
+			TGErrorHandler tgErrorHandler = (TGErrorHandler)it.next();
+			tgErrorHandler.handleError(throwable);
+		}
+	}
+	
+	public void addErrorHandler(TGErrorHandler errorHandler){
+		if(!this.errorHandlers.contains(errorHandler) ){
+			this.errorHandlers.add(errorHandler);
+		}
+	}
+	
+	public void removeErrorHandler(TGErrorHandler errorHandler){
+		if( this.errorHandlers.contains(errorHandler) ){
+			this.errorHandlers.remove(errorHandler);
+		}
+	}
+	
+	public List getErrorHandlers() {
+		return this.errorHandlers;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPlugin.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPlugin.java
new file mode 100644
index 0000000..26b040b
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPlugin.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.util.plugin;
+
+public interface TGPlugin {
+	
+	public void init() throws TGPluginException;
+	
+	public void close() throws TGPluginException;
+	
+	public void setEnabled(boolean enabled) throws TGPluginException;
+	
+	public String getModuleId();
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginException.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginException.java
new file mode 100644
index 0000000..993711f
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginException.java
@@ -0,0 +1,24 @@
+package org.herac.tuxguitar.util.plugin;
+
+import org.herac.tuxguitar.util.TGException;
+
+public class TGPluginException extends TGException{
+	
+	private static final long serialVersionUID = 1L;
+	
+	public TGPluginException() {
+		super();
+	}
+	
+	public TGPluginException(String message, Throwable cause) {
+		super(message, cause);
+	}
+	
+	public TGPluginException(String message) {
+		super(message);
+	}
+	
+	public TGPluginException(Throwable cause) {
+		super(cause);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginInfo.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginInfo.java
new file mode 100644
index 0000000..741a0bd
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginInfo.java
@@ -0,0 +1,49 @@
+package org.herac.tuxguitar.util.plugin;
+
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesManager;
+import org.herac.tuxguitar.util.properties.TGPropertiesUtil;
+
+public class TGPluginInfo {
+	
+	public static final String RESOURCE = "plugin-info";
+	
+	private TGProperties properties;
+	
+	public TGPluginInfo(String moduleId){
+		this.initialize(moduleId);
+	}
+	
+	public void initialize(String moduleId){
+		this.properties = TGPropertiesManager.getInstance().createProperties();
+		this.loadPluginInfo(moduleId);
+	}
+	
+	public void loadPluginInfo(String moduleId){
+		TGPropertiesManager.getInstance().readProperties(this.properties, RESOURCE, moduleId);
+	}
+	
+	public TGProperties getProperties(){
+		return this.properties;
+	}
+	
+	public String getStringValue(String key) {
+		return TGPropertiesUtil.getStringValue(this.properties, key);
+	}
+	
+	public String getName(){
+		return TGPropertiesUtil.getStringValue(this.properties, "plugin.name");
+	}
+	
+	public String getDescription(){
+		return TGPropertiesUtil.getStringValue(this.properties, "plugin.description");
+	}
+	
+	public String getVersion(){
+		return TGPropertiesUtil.getStringValue(this.properties, "plugin.version");
+	}
+	
+	public String getAuthor(){
+		return TGPropertiesUtil.getStringValue(this.properties, "plugin.author");
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginManager.java
new file mode 100644
index 0000000..ac6ec6b
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginManager.java
@@ -0,0 +1,137 @@
+package org.herac.tuxguitar.util.plugin;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.util.TGClassLoader;
+import org.herac.tuxguitar.util.TGServiceReader;
+import org.herac.tuxguitar.util.error.TGErrorManager;
+
+public class TGPluginManager {
+	
+	private static final String PLUGIN_ERROR_ON_INIT = "An error ocurred when trying to init plugin";
+	private static final String PLUGIN_ERROR_ON_CLOSE = "An error ocurred when trying to close plugin";
+	private static final String PLUGIN_ERROR_ON_SET_STATUS = "An error ocurred when trying to set plugin status";
+	private static final String PLUGIN_ERROR_ON_GET_STATUS = "An error ocurred when trying to get plugin status";
+	
+	private static TGPluginManager instance;
+	
+	private List plugins;
+	
+	private TGPluginManager(){
+		this.plugins = new ArrayList();
+		this.initialize();
+	}
+	
+	public static TGPluginManager getInstance(){
+		synchronized (TGPluginManager.class) {
+			if( instance == null ){
+				instance = new TGPluginManager();
+			}
+			return instance;
+		}
+	}
+	
+	public void initialize(){
+		this.initPlugins();
+	}
+	
+	public List getPlugins(){
+		return this.plugins;
+	}
+
+	public void initPlugins(){
+		try{
+			//Search available providers
+			Iterator it = TGServiceReader.lookupProviders(TGPlugin.class,TGClassLoader.instance().getClassLoader());
+			while(it.hasNext()){
+				try{
+					TGPlugin tgPlugin = (TGPlugin)it.next();
+					if( tgPlugin.getModuleId() != null ){
+						tgPlugin.init();
+						this.plugins.add(tgPlugin);
+					}
+				}catch(TGPluginException exception){
+					TGErrorManager.getInstance().handleError(exception);
+				}catch(Throwable throwable){
+					TGErrorManager.getInstance().handleError(new TGPluginException(PLUGIN_ERROR_ON_INIT,throwable));
+				}
+			}
+		}catch(Throwable throwable){
+			TGErrorManager.getInstance().handleError(new TGPluginException(PLUGIN_ERROR_ON_INIT,throwable));
+		}
+	}
+	
+	public void closePlugins(){
+		Iterator it = this.plugins.iterator();
+		while(it.hasNext()){
+			try{
+				((TGPlugin)it.next()).close();
+			}catch(TGPluginException exception){
+				TGErrorManager.getInstance().handleError(exception);
+			}catch(Throwable throwable){
+				TGErrorManager.getInstance().handleError(new TGPluginException(PLUGIN_ERROR_ON_CLOSE,throwable));
+			}
+		}
+	}
+	
+	public void openPlugins(){
+		Iterator it = this.plugins.iterator();
+		while(it.hasNext()){
+			try{
+				TGPlugin tgPlugin = (TGPlugin)it.next();
+				tgPlugin.setEnabled( isEnabled(tgPlugin.getModuleId()) );
+			}catch(TGPluginException exception){
+				TGErrorManager.getInstance().handleError(exception);
+			}catch(Throwable throwable){
+				TGErrorManager.getInstance().handleError(new TGPluginException(PLUGIN_ERROR_ON_SET_STATUS,throwable));
+			}
+		}
+	}
+	
+	public void setEnabled(String moduleId, boolean enabled){
+		try{
+			TGPluginProperties.instance().setEnabled(moduleId, enabled);
+			
+			Iterator it = this.plugins.iterator();
+			while(it.hasNext()){
+				try{
+					TGPlugin tgPlugin = (TGPlugin)it.next();
+					if( tgPlugin.getModuleId().equals(moduleId) ){
+						tgPlugin.setEnabled(enabled);
+					}
+				}catch(TGPluginException exception){
+					TGErrorManager.getInstance().handleError(exception);
+				}catch(Throwable throwable){
+					TGErrorManager.getInstance().handleError(new TGPluginException(PLUGIN_ERROR_ON_SET_STATUS,throwable));
+				}
+			}
+		}catch(Throwable throwable){
+			TGErrorManager.getInstance().handleError(new TGPluginException(PLUGIN_ERROR_ON_SET_STATUS,throwable));
+		}
+	}
+	
+	public boolean isEnabled(String moduleId){
+		try{
+			return TGPluginProperties.instance().isEnabled(moduleId);
+		}catch(Throwable throwable){
+			TGErrorManager.getInstance().handleError(new TGPluginException(PLUGIN_ERROR_ON_GET_STATUS,throwable));
+		}
+		return false;
+	}
+	
+	public List getPluginInstances(Class pluginClass){
+		List pluginInstances = new ArrayList();
+				
+		Iterator it = this.plugins.iterator();
+		while(it.hasNext()){
+			TGPlugin pluginInstance = (TGPlugin)it.next();
+			if( pluginClass.isInstance(pluginInstance) ){
+				pluginInstances.add( pluginInstance );
+			}
+		}
+		
+		return pluginInstances;
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginProperties.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginProperties.java
new file mode 100644
index 0000000..16451e2
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/plugin/TGPluginProperties.java
@@ -0,0 +1,68 @@
+/*
+ * Created on 09-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.util.plugin;
+
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesManager;
+import org.herac.tuxguitar.util.properties.TGPropertiesUtil;
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGPluginProperties {
+	
+	public static final String MODULE = "tuxguitar";
+	public static final String RESOURCE = "plugin-settings";
+	
+	private static final String ENABLED_PROPERTY_SUFFIX = ".enabled";
+	
+	private static TGPluginProperties instance;
+	
+	private TGProperties properties;
+	
+	public static TGPluginProperties instance(){
+		if( instance == null ){
+			instance = new TGPluginProperties();
+		}
+		return instance;
+	}
+	
+	private TGPluginProperties(){
+		this.properties = TGPropertiesManager.getInstance().createProperties();
+		this.load();
+	}
+	
+	public void load(){
+		TGPropertiesManager.getInstance().readProperties(properties, RESOURCE, MODULE);
+	}
+	
+	public void save(){
+		TGPropertiesManager.getInstance().writeProperties(properties, RESOURCE, MODULE);
+	}
+	
+	public void setEnabled(String moduleId, boolean enabled){
+		this.setBooleanValue(createEnabledPropertyKey(moduleId),enabled);
+		this.save();
+	}
+	
+	public boolean isEnabled(String moduleId){
+		return this.getBooleanValue(createEnabledPropertyKey(moduleId), true);
+	}
+	
+	public String createEnabledPropertyKey(String moduleId){
+		return (moduleId + ENABLED_PROPERTY_SUFFIX);
+	}
+	
+	private boolean getBooleanValue(String key, boolean defaultValue) {
+		return TGPropertiesUtil.getBooleanValue(this.properties, key, defaultValue);
+	}
+	
+	private void setBooleanValue(String key,boolean value){
+		TGPropertiesUtil.setValue(this.properties, key, value);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGProperties.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGProperties.java
new file mode 100644
index 0000000..96ff847
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGProperties.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.util.properties;
+
+public interface TGProperties {
+	
+	public String getValue(String key);
+	
+	public void setValue(String key, String value);
+	
+	public void remove(String key);
+	
+	public void clear();
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesException.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesException.java
new file mode 100644
index 0000000..a4fc695
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesException.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.util.properties;
+
+import org.herac.tuxguitar.util.TGException;
+
+public class TGPropertiesException extends TGException {
+	
+	private static final long serialVersionUID = 8298443126251976034L;
+
+	public TGPropertiesException(String message){
+		super(message);
+	}
+	
+	public TGPropertiesException(Throwable cause){
+		super(cause);
+	}
+	
+	public TGPropertiesException(String message, Throwable cause){
+		super(message, cause);
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesFactory.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesFactory.java
new file mode 100644
index 0000000..543453b
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesFactory.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.util.properties;
+
+public interface TGPropertiesFactory {
+	
+	public TGProperties createProperties() throws TGPropertiesException;
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesManager.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesManager.java
new file mode 100644
index 0000000..21a9320
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesManager.java
@@ -0,0 +1,81 @@
+package org.herac.tuxguitar.util.properties;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class TGPropertiesManager {
+	
+	private static TGPropertiesManager instance;
+	
+	private TGPropertiesFactory propertiesFactory;
+	private Map propertiesReaders;
+	private Map propertiesWriters;
+	
+	private TGPropertiesManager(){
+		this.propertiesFactory = null;
+		this.propertiesReaders = new HashMap();
+		this.propertiesWriters = new HashMap();
+	}
+	
+	public static TGPropertiesManager getInstance(){
+		synchronized (TGPropertiesManager.class) {
+			if( instance == null ){
+				instance = new TGPropertiesManager();
+			}
+			return instance;
+		}
+	}
+	
+	public TGProperties createProperties() throws TGPropertiesException{
+		if( this.propertiesFactory != null ){
+			return this.propertiesFactory.createProperties();
+		}
+		return null;
+	}
+	
+	public void readProperties(TGProperties properties, String resource, String module){
+		if( this.propertiesReaders.containsKey(resource) ){
+			TGPropertiesReader tgPropertiesReader = (TGPropertiesReader)this.propertiesReaders.get(resource);
+			tgPropertiesReader.readProperties(properties, module);
+		}
+	}
+	
+	public void writeProperties(TGProperties properties, String resource, String module){
+		if( this.propertiesWriters.containsKey(resource) ){
+			TGPropertiesWriter tgPropertiesWriter = (TGPropertiesWriter)this.propertiesWriters.get(resource);
+			tgPropertiesWriter.writeProperties(properties, module);
+		}
+	}
+	
+	public TGPropertiesFactory getPropertiesFactory() {
+		return propertiesFactory;
+	}
+
+	public void setPropertiesFactory(TGPropertiesFactory propertiesFactory) {
+		this.propertiesFactory = propertiesFactory;
+	}
+
+	public void addPropertiesReader(String resource, TGPropertiesReader propertiesReader){
+		if(!this.propertiesReaders.containsKey(resource) ){
+			this.propertiesReaders.put(resource, propertiesReader);
+		}
+	}
+	
+	public void removePropertiesReader(String resource){
+		if( this.propertiesReaders.containsKey(resource) ){
+			this.propertiesReaders.remove(resource);
+		}
+	}
+	
+	public void addPropertiesWriter(String resource, TGPropertiesWriter propertiesWriter){
+		if(!this.propertiesWriters.containsKey(resource) ){
+			this.propertiesWriters.put(resource, propertiesWriter);
+		}
+	}
+	
+	public void removePropertiesWriter(String resource){
+		if( this.propertiesWriters.containsKey(resource) ){
+			this.propertiesWriters.remove(resource);
+		}
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesReader.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesReader.java
new file mode 100644
index 0000000..c9b0e45
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesReader.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.util.properties;
+
+public interface TGPropertiesReader {
+	
+	public void readProperties(TGProperties properties, String module) throws TGPropertiesException;
+	
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesUtil.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesUtil.java
new file mode 100644
index 0000000..7044f34
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesUtil.java
@@ -0,0 +1,89 @@
+package org.herac.tuxguitar.util.properties;
+
+public class TGPropertiesUtil {
+	
+	public static String getStringValue(TGProperties properties, String key,String defaultValue) {
+		try{
+			String property = properties.getValue(key);
+			return (property == null) ? defaultValue : property.trim();
+		}catch(Throwable throwable){
+			return defaultValue;
+		}
+	}
+	
+	public static String getStringValue(TGProperties properties, String key) {
+		return getStringValue(properties, key, null);
+	}
+	
+	public static int getIntegerValue(TGProperties properties, String key,int defaultValue) {
+		try{
+			String value = properties.getValue(key);
+			return (value == null) ? defaultValue : Integer.parseInt(value.trim());
+		}catch(Throwable throwable){
+			return defaultValue;
+		}
+	}
+	
+	public static int getIntegerValue(TGProperties properties, String key) {
+		return getIntegerValue(properties, key, 0);
+	}
+	
+	public static float getFloatValue(TGProperties properties, String key,float defaultValue) {
+		try{
+			String value = properties.getValue(key);
+			return (value == null) ? defaultValue : Float.parseFloat(value.trim());
+		}catch(Throwable throwable){
+			return defaultValue;
+		}
+	}
+	
+	public static float getFloatValue(TGProperties properties, String key) {
+		return getFloatValue(properties, key, 0f);
+	}
+	
+	public static double getDoubleValue(TGProperties properties, String key,double defaultValue) {
+		try{
+			String value = properties.getValue(key);
+			return (value == null) ? defaultValue : Double.parseDouble(value.trim());
+		}catch(Throwable throwable){
+			return defaultValue;
+		}
+	}
+	
+	public static double getDoubleValue(TGProperties properties, String key) {
+		return getDoubleValue(properties, key, 0.0);
+	}
+	
+	public static boolean getBooleanValue(TGProperties properties, String key,boolean defaultValue) {
+		try{
+			String value = properties.getValue(key);
+			return (value == null) ? defaultValue : Boolean.valueOf(value.trim()).booleanValue();
+		}catch(Throwable throwable){
+			return defaultValue;
+		}
+	}
+	
+	public static boolean getBooleanValue(TGProperties properties, String key) {
+		return getBooleanValue(properties, key,false);
+	}
+	
+	public static void setValue(TGProperties properties, String key,String value){
+		properties.setValue(key, (value != null ? value : new String()) );
+	}
+	
+	public static void setValue(TGProperties properties, String key,int value){
+		properties.setValue(key,Integer.toString(value));
+	}
+	
+	public static void setValue(TGProperties properties, String key,float value){
+		properties.setValue(key,Float.toString(value));
+	}
+	
+	public static void setValue(TGProperties properties, String key,double value){
+		properties.setValue(key,Double.toString(value));
+	}
+	
+	public static void setValue(TGProperties properties, String key,boolean value){
+		properties.setValue(key,Boolean.toString(value));
+	}
+}
diff --git a/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesWriter.java b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesWriter.java
new file mode 100644
index 0000000..c1e1745
--- /dev/null
+++ b/TuxGuitar-lib/src/org/herac/tuxguitar/util/properties/TGPropertiesWriter.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.util.properties;
+
+public interface TGPropertiesWriter {
+	
+	public void writeProperties(TGProperties properties, String module) throws TGPropertiesException;
+	
+}
diff --git a/TuxGuitar-lib/tuxguitar-lib.jar b/TuxGuitar-lib/tuxguitar-lib.jar
new file mode 100644
index 0000000..46de253
Binary files /dev/null and b/TuxGuitar-lib/tuxguitar-lib.jar differ
diff --git a/TuxGuitar-lilypond/GNUmakefile b/TuxGuitar-lilypond/GNUmakefile
deleted file mode 100644
index 76edb35..0000000
--- a/TuxGuitar-lilypond/GNUmakefile
+++ /dev/null
@@ -1,79 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:45 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-lilypond
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.io.lilypond.LilypondPluginExporter
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_LANGUAGE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/lang
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# resources
-LANGUAGE?=./share/lang
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(LANGUAGE)/* $(DESTDIR)$(INSTALL_LANGUAGE_DIR)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-	-rm $(DESTDIR)$(INSTALL_LANGUAGE_DIR)/*
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:45 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-lilypond/build.properties b/TuxGuitar-lilypond/build.properties
index dba8bef..cbf31b5 100644
--- a/TuxGuitar-lilypond/build.properties
+++ b/TuxGuitar-lilypond/build.properties
@@ -4,5 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
-path.swt=../TuxGuitar/lib/swt.jar
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.swt=../TuxGuitar/lib/swt.jar
\ No newline at end of file
diff --git a/TuxGuitar-lilypond/build.xml b/TuxGuitar-lilypond/build.xml
index e0b470d..9860609 100644
--- a/TuxGuitar-lilypond/build.xml
+++ b/TuxGuitar-lilypond/build.xml
@@ -11,10 +11,8 @@
 	<property name="build.path" value="build${file.separator}" />
 	<property name="build.jar" value="tuxguitar-lilypond.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.lilypond.LilypondPluginExporter" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -33,14 +31,10 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}${file.separator}lang" />
-		<copy todir="${build.path}${file.separator}lang">
-			<fileset dir="${build.share.path}${file.separator}lang"/>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
 		</copy>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
-		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
 		<echo>+-----------------------------------------------+</echo>
diff --git a/TuxGuitar-lilypond/pom.xml b/TuxGuitar-lilypond/pom.xml
new file mode 100644
index 0000000..d3cd4b7
--- /dev/null
+++ b/TuxGuitar-lilypond/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-lilypond</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-lilypond/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-lilypond/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..ddd7de3
--- /dev/null
+++ b/TuxGuitar-lilypond/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.io.lilypond.LilypondPluginExporter
diff --git a/TuxGuitar-lilypond/share/META-INF/tuxguitar-lilypond.info b/TuxGuitar-lilypond/share/META-INF/tuxguitar-lilypond.info
new file mode 100644
index 0000000..2bc5ff2
--- /dev/null
+++ b/TuxGuitar-lilypond/share/META-INF/tuxguitar-lilypond.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Lilypond exporter
+plugin.description=Lilypond exporter plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>, updates by b4dc0d3r
+plugin.version=1.1
diff --git a/TuxGuitar-lilypond/share/lang/messages.properties b/TuxGuitar-lilypond/share/lang/messages.properties
index 93d1b72..e2ac4a0 100644
--- a/TuxGuitar-lilypond/share/lang/messages.properties
+++ b/TuxGuitar-lilypond/share/lang/messages.properties
@@ -13,3 +13,4 @@ lilypond.options.layout.enable-track-names=Show track names
 lilypond.options.measure-range.tip=Measure range
 lilypond.options.measure-range.from=From
 lilypond.options.measure-range.to=To
+lilypond.options.format-version=Lilypond Version
diff --git a/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondOutputStream.java b/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondOutputStream.java
index 0fef2d1..077615e 100644
--- a/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondOutputStream.java
+++ b/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondOutputStream.java
@@ -26,8 +26,6 @@ import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
 
 public class LilypondOutputStream {
 	
-	private static final String LILYPOND_VERSION = "2.10.5";
-	
 	private static final String[] LILYPOND_SHARP_NOTES = new String[]{"c","cis","d","dis","e","f","fis","g","gis","a","ais","b"};
 	private static final String[] LILYPOND_FLAT_NOTES = new String[]{"c","des","d","ees","e","f","ges","g","aes","a","bes","b"};
 	
@@ -35,6 +33,9 @@ public class LilypondOutputStream {
 	
 	private static final String INDENT = new String("   ");
 	
+	// anything over high C should be printed 8vb
+	private static final int MAX_PITCH = 72;
+	
 	private TGSongManager manager;
 	
 	private PrintWriter writer;
@@ -66,7 +67,7 @@ public class LilypondOutputStream {
 	}
 	
 	private void addVersion(){
-		this.writer.println("\\version \"" + LILYPOND_VERSION + "\"");
+		this.writer.println("\\version \"" + this.settings.getLilypondVersion() + "\"");
 	}
 	
 	private void addFunctions(){
@@ -78,30 +79,36 @@ public class LilypondOutputStream {
 	}
 	
 	private void addCommands(){
-		// deadNote
-		this.writer.println("deadNote = #(define-music-function (parser location note) (ly:music?)");
-		this.writer.println(indent(1) + "(set! (ly:music-property note 'tweaks)");
-		this.writer.println(indent(2) + "(acons 'stencil ly:note-head::print");
-		this.writer.println(indent(3) + "(acons 'glyph-name \"2cross\"");
-		this.writer.println(indent(4) + "(acons 'style 'special");
-		this.writer.println(indent(5) + "(ly:music-property note 'tweaks)))))");
-		this.writer.println(indent(1) + "note)");
-		this.writer.println();
-		
-		// palmMute
-		this.writer.println("palmMute = #(define-music-function (parser location note) (ly:music?)");
-		this.writer.println(indent(1) + "(set! (ly:music-property note 'tweaks)");
-		this.writer.println(indent(2) + "(acons 'style 'do (ly:music-property note 'tweaks)))");
-		this.writer.println(indent(1) + "note)");
-		this.writer.println();
+		// TODO: use "ly:gulp-file name" to add a custom header
+		if ( this.settings.getLilypondVersion().compareTo("2.13.17") < 0 ){
+			this.writer.println("deadNote = #(define-music-function (parser location note) (ly:music?)");
+			this.writer.println(indent(1) + "(set! (ly:music-property note 'tweaks)");
+			this.writer.println(indent(2) + "(acons 'stencil ly:note-head::print");
+			this.writer.println(indent(3) + "(acons 'glyph-name \"2cross\"");
+			this.writer.println(indent(4) + "(acons 'style 'special");
+			this.writer.println(indent(5) + "(ly:music-property note 'tweaks)))))");
+			this.writer.println(indent(1) + "note)");
+			this.writer.println();
+	
+			// palmMute - native in 2.14
+			this.writer.println("palmMute = #(define-music-function (parser location note) (ly:music?)");
+			this.writer.println(indent(1) + "(set! (ly:music-property note 'tweaks)");
+			this.writer.println(indent(2) + "(acons 'style 'do (ly:music-property note 'tweaks)))");
+			this.writer.println(indent(1) + "note)");
+			this.writer.println();
+		}
 	}
 	
 	private void addPaper(TGSong song){
 		this.writer.println("\\paper {");
 		
 		this.writer.println(indent(1) + "indent = #" + (this.addTrackTitleOnGroup(song) ? 30 : 0));
-		this.writer.println(indent(1) + "printallheaders = #" + getLilypondBoolean(true));
-		this.writer.println(indent(1) + "print-all-headers = #" + getLilypondBoolean(true));
+
+		if ( this.settings.getLilypondVersion().compareTo("2.11.60") < 0) {
+			this.writer.println(indent(1) + "printallheaders = #" + getLilypondBoolean(true));
+		} else {
+			this.writer.println(indent(1) + "print-all-headers = #" + getLilypondBoolean(true));
+		}
 		this.writer.println(indent(1) + "ragged-right = #" + getLilypondBoolean(false));
 		this.writer.println(indent(1) + "ragged-bottom = #" + getLilypondBoolean(true));
 		this.writer.println("}");
@@ -455,7 +462,7 @@ public class LilypondOutputStream {
 			if( !voice.isEmpty() ){
 				TGDivisionType divisionType = voice.getDuration().getDivision();
 				
-				if(previous != null && this.temp.isDivisionTypeOpen() && !divisionType.isEqual( previous.getVoice(0).getDuration().getDivision() )){
+				if(previous != null && this.temp.isDivisionTypeOpen() && !divisionType.isEqual( previous.getVoice( vIndex ).getDuration().getDivision() )){
 					this.writer.print("} ");
 					this.temp.setDivisionTypeOpen(false);
 				}
@@ -499,10 +506,23 @@ public class LilypondOutputStream {
 		}
 		else{
 			this.addEffectsBeforeBeat(voice);
+
+			int size = voice.countNotes();
 			
+			int ottava = 0;
+			for(int i = 0 ; i < size ; i ++){
+				TGNote note = voice.getNote(i);
+				int thisnote = beat.getMeasure().getTrack().getString(note.getString()).getValue() + note.getValue();
+				if (thisnote > MAX_PITCH) {
+					ottava = 1;
+				}
+			}
+			if (ottava != 0) {
+				this.addOttava(ottava);
+			}
+
 			this.writer.print("<");
-			
-			int size = voice.countNotes();
+
 			for(int i = 0 ; i < size ; i ++){
 				TGNote note = voice.getNote(i);
 				
@@ -526,6 +546,9 @@ public class LilypondOutputStream {
 			this.addDuration( voice.getDuration() );
 			this.addEffectsOnDuration( voice );
 			this.addEffectsOnBeat( voice );
+			if (ottava != 0) {
+				this.addOttava(0);
+			}
 		}
 		
 		// Add Chord, if was not previously added in another voice
@@ -575,6 +598,12 @@ public class LilypondOutputStream {
 		this.writer.print("\\" + string);
 	}
 	
+	private void addOttava(int ottava){
+		this.writer.print(" \\ottava #" + ottava);
+		if (ottava != 0)
+			this.writer.print(" ");
+	}
+	
 	private void addDuration(TGDuration duration){
 		this.writer.print(getLilypondDuration(duration));
 	}
@@ -615,6 +644,8 @@ public class LilypondOutputStream {
 	}
 	
 	private void addEffectsOnBeat(TGVoice voice){
+		boolean hammer = false;
+		boolean slide = false;
 		boolean trill = false;
 		boolean vibrato = false;
 		boolean staccato = false;
@@ -624,12 +655,22 @@ public class LilypondOutputStream {
 		for( int i = 0 ; i < voice.countNotes() ; i ++ ){
 			TGNoteEffect effect = voice.getNote(i).getEffect();
 			
+			hammer = (hammer || effect.isHammer() );
+			slide = (slide || effect.isSlide() );
 			trill = (trill || effect.isTrill() );
 			vibrato = (vibrato || effect.isVibrato() );
 			staccato = (staccato || effect.isStaccato() );
 			accentuatedNote = (accentuatedNote || effect.isAccentuatedNote() );
 			heavyAccentuatedNote = (heavyAccentuatedNote || effect.isHeavyAccentuatedNote() );
 		}
+		if (hammer){
+			this.writer.print("_\"H\"");
+		}
+		if (slide){
+			// TODO: this is a workaround, when lilypond suppords slides version-protect this
+			// TODO: maybe this should be on the note instead of the beat but will work mostly
+			this.writer.print("\\glissando");
+		}
 		if( trill ){
 			this.writer.print("\\trill");
 		}
@@ -750,7 +791,7 @@ public class LilypondOutputStream {
 		TGBeat beat = this.manager.getMeasureManager().getNextBeat( measure.getBeats(), note.getVoice().getBeat());
 		while( measure != null){
 			while( beat != null ){
-				TGVoice voice = beat.getVoice(0);
+				TGVoice voice = beat.getVoice( note.getVoice().getIndex() );
 				
 				// If is a rest beat, all voice sounds must be stopped.
 				if(voice.isRestVoice()){
@@ -819,13 +860,49 @@ public class LilypondOutputStream {
 		return Integer.toString(value);
 	}
 	
+	private String getLilypondPitch(int value){
+		// ly:make-pitch octave note alter
+		// octave is specified by an integer, zero for the octave containing middle C. 
+		// note is a number indexing the global default scale, with 0 corresponding to 
+		// pitch C and 6 usually corresponding to pitch B. alter is a rational number 
+		// of 200-cent whole tones for alteration. 
+		//
+		// String retval = "(ly:make-pitch 1 5 0)";
+		int[] pitches = new int[]{0,0,1,1,2,3,3,4,4,5,5,6};
+		// "rational" in scheme is a fraction, like 1/2, instead of floating point 0.5 - so just use SHARP until that's fixed
+		// Also use NATURAL to match convert-ly output
+		String[] alters = new String[]{"NATURAL","SHARP","NATURAL","SHARP","NATURAL","NATURAL","SHARP","NATURAL","SHARP","NATURAL","SHARP","NATURAL"};
+		// int octave = (value-60)/12; // this rounds up, Java n00b mistake, also MOD can return a negative value
+		int octave = -1;
+		for(int i = 4; i < (value / 12); i ++){
+			octave += 1;
+		}
+		for(int i = (value / 12); i < 4; i ++){
+			octave -= 1;
+		}
+		int note = value % 12;
+		String retval = "(ly:make-pitch";
+		retval += " " + octave;
+		retval += " " + pitches[note];
+		retval += " " + alters[note];
+		return retval + ")";
+	}
+	
 	private String getLilypondTuning(TGTrack track){
-		String tuning = ("\\with { stringTunings = #'( ");
+		String tuning = ("\\with { stringTunings = #`( ");
 		Iterator strings = track.getStrings().iterator();
 		while(strings.hasNext()){
 			TGString string = (TGString)strings.next();
-			//Lilypond relates string tuning to MIDI middle C (note 60)
-			tuning += ( (string.getValue() - 60) + " ");
+			if ( this.settings.getLilypondVersion().compareTo("2.13.46") < 0) {
+				tuning += ( (string.getValue() - 60) + " ");
+			} else {
+				// 2.13.46: Change stringTunings from a list of semitones to a
+				// list of pitches (in scheme syntax).  There is the option of 
+				// pre-defining a custom tuning as follows instead.
+				// \makeStringTuning #'custom-tuning <c' g' d'' a''>
+				// TODO: if this is a normal guitar tuning, skip this whole thing
+				tuning += ("," + this.getLilypondPitch(string.getValue()) + " ");
+			}
 		}
 		tuning += (") }");
 		return tuning;
diff --git a/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondPluginExporter.java b/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondPluginExporter.java
index 033fff5..17444e7 100644
--- a/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondPluginExporter.java
+++ b/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondPluginExporter.java
@@ -1,27 +1,17 @@
 package org.herac.tuxguitar.io.lilypond;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin;
 import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
 
 public class LilypondPluginExporter extends TGExporterPlugin{
 	
+	public static final String MODULE_ID = "tuxguitar-lilypond";
+	
 	protected TGRawExporter getExporter() {
 		return new LilypondSongExporter();
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "Lilypond 2.10.5 exporter plugin";
-	}
-	
-	public String getName() {
-		return "Lilypond exporter";
-	}
-	
-	public String getVersion() {
-		return "1.0";
+	public String getModuleId(){
+		return MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettings.java b/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettings.java
index 55279cc..952055b 100644
--- a/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettings.java
+++ b/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettings.java
@@ -8,6 +8,8 @@ public class LilypondSettings {
 	
 	public static final int LAST_MEASURE = -1;
 	
+	private String lilypondVersion;
+
 	private int track;
 	private int measureFrom;	
 	private int measureTo;
@@ -24,6 +26,14 @@ public class LilypondSettings {
 		super();
 	}
 	
+	public String getLilypondVersion() {
+		return this.lilypondVersion;
+	}
+	
+	public void setLilypondVersion(String lilypondVersion) {
+		this.lilypondVersion = lilypondVersion;
+	}
+	
 	public int getMeasureFrom() {
 		return this.measureFrom;
 	}
@@ -123,6 +133,7 @@ public class LilypondSettings {
 		settings.setChordDiagramEnabled(true);
 		settings.setTrackNameEnabled(true);
 		settings.setTrackGroupEnabled(false);
+		settings.setLilypondVersion("2.14.0");
 		return settings;
 	}
 }
\ No newline at end of file
diff --git a/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettingsDialog.java b/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettingsDialog.java
index c927f01..63de915 100644
--- a/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettingsDialog.java
+++ b/TuxGuitar-lilypond/src/org/herac/tuxguitar/io/lilypond/LilypondSettingsDialog.java
@@ -12,8 +12,9 @@ import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
 
 public class LilypondSettingsDialog {
 	
@@ -121,6 +122,16 @@ public class LilypondSettingsDialog {
 			}
 		});
 		
+		//------------------VERSION OPTIONS------------------
+		Group versionGroup = new Group(columnRight,SWT.SHADOW_ETCHED_IN);
+		versionGroup.setLayout(new GridLayout());
+		versionGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		versionGroup.setText(TuxGuitar.getProperty("lilypond.options.format-version"));
+		
+		final Text lilyVersion = new Text(versionGroup, SWT.LEFT | SWT.BORDER);
+		lilyVersion.setText(settings.getLilypondVersion());
+		lilyVersion.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
 		//------------------LAYOUT OPTIONS------------------
 		Group layoutGroup = new Group(columnRight,SWT.SHADOW_ETCHED_IN);
 		layoutGroup.setLayout(new GridLayout());
@@ -207,6 +218,7 @@ public class LilypondSettingsDialog {
 				settings.setChordDiagramEnabled(chordDiagramsCheck.getSelection());
 				settings.setLyricsEnabled(lyricsCheck.getSelection());
 				settings.setTextEnabled(textsCheck.getSelection());
+				settings.setLilypondVersion(lilyVersion.getText());
 				settings.check();
 				
 				dialog.dispose();
diff --git a/TuxGuitar-midi-input/build.properties b/TuxGuitar-midi-input/build.properties
new file mode 100644
index 0000000..717c2ef
--- /dev/null
+++ b/TuxGuitar-midi-input/build.properties
@@ -0,0 +1,9 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
+
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-midi-input/build.xml b/TuxGuitar-midi-input/build.xml
new file mode 100644
index 0000000..da973d9
--- /dev/null
+++ b/TuxGuitar-midi-input/build.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-midi-input" basedir="." default="all">
+	<description>
+		TuxGuitar Midi-Input
+	</description>
+	
+	<property file="build.properties" />
+	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
+	<property name="build.path" value="build" />
+	<property name="build.jar" value="tuxguitar-midi-input.jar" />
+	
+	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar}"/>
+		<pathelement location="${path.swt}"/>
+	</path >
+	
+	<target name="init" depends="clean">
+		<mkdir dir="${build.path}" />
+	</target>
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="build" depends="init">
+		
+		<echo>+--------------------------------------------------------------------+</echo>
+		<echo>|          B U I L D I N G   P L U G I N   M I D I - I N P U T       |</echo>
+		<echo>+--------------------------------------------------------------------+</echo>
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<classpath refid="class.path"/>
+			<include name="**/*.java"/>
+		</javac>
+		
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
+		
+		<echo>+--------------------------------------------------------------------+</echo>
+		<echo>|        P A C K A G I N G   P L U G I N   M I D I - I N P U T       |</echo>
+		<echo>+--------------------------------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}" basedir="${build.path}" />
+		<delete quiet="true" dir="${build.path}" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
\ No newline at end of file
diff --git a/TuxGuitar-midi-input/pom.xml b/TuxGuitar-midi-input/pom.xml
new file mode 100644
index 0000000..d9a46fe
--- /dev/null
+++ b/TuxGuitar-midi-input/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-midi-input</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-midi-input/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-midi-input/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..11b7f3d
--- /dev/null
+++ b/TuxGuitar-midi-input/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,2 @@
+org.herac.tuxguitar.midiinput.MidiInputPlugin
+org.herac.tuxguitar.midiinput.MidiSettingsPlugin
diff --git a/TuxGuitar-midi-input/share/META-INF/tuxguitar-midi-input.info b/TuxGuitar-midi-input/share/META-INF/tuxguitar-midi-input.info
new file mode 100644
index 0000000..e8c485b
--- /dev/null
+++ b/TuxGuitar-midi-input/share/META-INF/tuxguitar-midi-input.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=MIDI input plugin
+plugin.description=Supports MIDI equipped guitars
+plugin.author=Amedeo Farello <afarello at tiscalinet.it>
+plugin.version=1.0
diff --git a/TuxGuitar-midi-input/share/lang/messages.properties b/TuxGuitar-midi-input/share/lang/messages.properties
new file mode 100644
index 0000000..1ec1daa
--- /dev/null
+++ b/TuxGuitar-midi-input/share/lang/messages.properties
@@ -0,0 +1,45 @@
+midiinput.error.unknown=Java Sound API cannot be loaded
+midiinput.error.midi.unavailable=MIDI System is unavailable
+midiinput.error.midi.port.open=Unable to open MIDI input port
+midiinput.error.midi.port.close=Unable to close MIDI input port
+
+# MiConfig dialog
+midiinput.config.title=MIDI input preferences
+
+midiinput.config.label.group.midi=MIDI
+midiinput.config.label.port=Input device
+midiinput.config.label.basechannel=Base channel (1-16)
+
+midiinput.config.label.group.input=General input
+midiinput.config.label.minvelocity=Minimum notes velocity (0-50)
+midiinput.config.label.minduration=Minimum notes duration (0-100) [msec]
+
+midiinput.config.label.group.echo=Echo / Chords / Scales
+midiinput.config.label.echotimeout=Echo time out (100-1500) [msec]
+midiinput.config.label.inputtimeout=Chord/scale input time out (100-1500) [msec]
+midiinput.config.label.chordmode=Chord insertion mode
+
+midiinput.chordmode.diagram=Insert diagram only
+midiinput.chordmode.all=Insert diagram and notes
+
+# RECORDING
+midiinput.config.label.group.rec=Recording
+midiinput.config.label.countdown=# of count down bars
+midiinput.config.label.metronome=Use metronome
+midiinput.config.label.playback=Playback tracks
+
+# MiPanel dialog
+midiinput.panel.title=MIDI input
+
+midiinput.panel.label.group.mode=Settings
+midiinput.panel.label.mode=Mode
+midiinput.mode.echo=Echo
+midiinput.mode.chords=Insert chords
+midiinput.mode.scales=Recognize scales
+midiinput.mode.record=Record
+midiinput.panel.button.config=Preferences
+
+# RECORDING
+midiinput.panel.label.group.rec=Recording
+midiinput.panel.button.start=Record
+midiinput.panel.button.stop=Stop
\ No newline at end of file
diff --git a/TuxGuitar-midi-input/share/lang/messages_sv.properties b/TuxGuitar-midi-input/share/lang/messages_sv.properties
new file mode 100644
index 0000000..35d82ff
--- /dev/null
+++ b/TuxGuitar-midi-input/share/lang/messages_sv.properties
@@ -0,0 +1,51 @@
+# Swedish translation for TuxGuitar's Midi Input plugin. 
+# Copyright (C) 2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the TuxGuitar software.
+# John Gustafsson <jamminjohn at users.sourceforge.net>, 2009.
+#
+
+midiinput.error.unknown=Javas ljud-API kan inte l\u00e4sas in
+midiinput.error.midi.unavailable=MIDI-systemet \u00e4r inte \u00e5tkomligt
+midiinput.error.midi.port.open=Kan inte \u00f6ppna MIDI-ing\u00e5ngsport
+midiinput.error.midi.port.close=Kan inte st\u00e4nga MIDI-ing\u00e5ngsport
+
+# MiConfig dialog
+midiinput.config.title=MIDI-ing\u00e5ngsinst\u00e4llningar
+
+midiinput.config.label.group.midi=MIDI
+midiinput.config.label.port=Ing\u00e5ngsenhet
+midiinput.config.label.basechannel=Grundkanaler (1-16)
+
+midiinput.config.label.group.input=Allm\u00e4n ing\u00e5ng
+midiinput.config.label.minvelocity=Minsta nothastighet (0-50)
+midiinput.config.label.minduration=Minsta notv\u00e4rde (0-100) [ms]
+
+midiinput.config.label.group.echo=Eko / Ackord / Skalor
+midiinput.config.label.echotimeout=Ekotidsgr\u00e4ns (100-1500) [ms]
+midiinput.config.label.inputtimeout=Ackord/skalinmatningstidsgr\u00e4ns (100-1500) [ms]
+midiinput.config.label.chordmode=Ackordinfogningsl\u00e4ge
+
+midiinput.chordmode.diagram=Infoga bara diagram
+midiinput.chordmode.all=Infoga diagram och noter
+
+# RECORDING
+midiinput.config.label.group.rec=Inspelning
+midiinput.config.label.countdown=Antal nedr\u00e4kningstakter
+midiinput.config.label.metronome=Anv\u00e4nd metronom
+midiinput.config.label.playback=Spela sp\u00e5r
+
+# MiPanel dialog
+midiinput.panel.title=MIDI-ing\u00e5ng
+
+midiinput.panel.label.group.mode=Inst\u00e4llningar
+midiinput.panel.label.mode=L\u00e4ge
+midiinput.mode.echo=Eko
+midiinput.mode.chords=Infoga ackord
+midiinput.mode.scales=K\u00e4nn igen skalor
+midiinput.mode.record=Spela in
+midiinput.panel.button.config=Inst\u00e4llningar
+
+# RECORDING
+midiinput.panel.label.group.rec=Inspelning
+midiinput.panel.button.start=Spela in
+midiinput.panel.button.stop=Stanna
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiBuffer.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiBuffer.java
new file mode 100644
index 0000000..40d0bbf
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiBuffer.java
@@ -0,0 +1,326 @@
+package org.herac.tuxguitar.midiinput;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.TreeSet;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGNote;
+
+
+class MiBuffer
+{
+	private ArrayList	f_Notes			= new ArrayList();	// time-ordered list of notes
+	private ArrayList	f_NoteOffMap	= new ArrayList();	// time-ordered map of NOTE_OFF events
+	private	long		f_StartTime		= -1;				// first MIDI time stamp [microseconds]
+	private	long		f_StopTime		= -1;				// last MIDI time stamp [microseconds]
+
+	private	boolean		s_TESTING = true;
+
+
+	public void startRecording(long inTimeStamp)
+	{
+	f_StartTime	= inTimeStamp;
+	f_StopTime	= -1;
+
+	f_Notes.clear();
+	f_NoteOffMap.clear();
+	}
+
+
+	public void stopRecording(long inTimeStamp)
+	{
+	f_StopTime	= inTimeStamp;
+	}
+
+
+	public void addEvent(byte inString, byte inFret, byte inPitch, byte inVelocity, long inTimeStamp)
+	{
+	if(inVelocity == 0)
+		f_NoteOffMap.add(new MiNote(inString, inFret, inPitch, inVelocity, inTimeStamp));
+	else
+		f_Notes.add(new MiNote(inString, inFret, inPitch, inVelocity, inTimeStamp));
+	}
+
+
+	static void	dump(ArrayList inList, String inTitle)
+	{
+	Iterator	it = inList.iterator();
+
+	System.out.println();
+	System.out.println("dumping " + inTitle + "...");
+	//System.out.println("Started at: " + f_StartTime);
+	//System.out.println("Stopped at: " + f_StopTime);
+	System.out.println();
+
+	while(it.hasNext())
+		{
+		MiNote	n = (MiNote)it.next();
+
+		System.out.println(
+			"str: "		+ n.getString() +
+			", fret: "	+ n.getFret() +
+			", pitch: "	+ n.getPitch() +
+			", vel: "	+ n.getVelocity() +
+			", on: "	+ n.getTimeOn() +
+			", off: "	+ n.getTimeOff() +
+			", dur: "	+ n.getDuration());
+		}
+	}
+
+
+	public int	finalize(byte inMinVelocity, long inMinDuration)
+	{
+	if(s_TESTING)
+		{
+		int	tempo = MiRecorder.instance().getTempo();
+
+		f_StartTime	= MiStaff.ticksToTimestamp(tempo, 0);
+		f_StopTime	= MiStaff.ticksToTimestamp(tempo, 15698);
+/*
+		// a very long note
+		addEventDebug(tempo,     0, 4, 50, 81);
+		addEventDebug(tempo, 15698, 4, 50, 0);
+*/
+		// a short piece
+		addEventDebug(tempo,   873, 1, 66, 96);
+		addEventDebug(tempo,  1054, 1, 66, 0);
+		addEventDebug(tempo,  1056, 1, 67, 81);
+		addEventDebug(tempo,  1307, 1, 67, 0);
+		addEventDebug(tempo,  1310, 1, 68, 67);
+		addEventDebug(tempo,  1369, 1, 68, 0);
+		addEventDebug(tempo,  2549, 1, 69, 78);
+		addEventDebug(tempo,  2841, 1, 69, 0);
+
+		addEventDebug(tempo,   852, 2, 62, 106);
+		addEventDebug(tempo,  1301, 2, 62, 0);
+		addEventDebug(tempo,  1304, 2, 61, 32);
+		addEventDebug(tempo,  1389, 2, 61, 0);
+		addEventDebug(tempo,  2545, 2, 62, 81);
+		addEventDebug(tempo,  2765, 2, 62, 0);
+		addEventDebug(tempo,  3418, 2, 65, 78);
+		addEventDebug(tempo,  4172, 2, 65, 0);
+		addEventDebug(tempo,  4281, 2, 67, 56);
+		addEventDebug(tempo,  4433, 2, 67, 0);
+		addEventDebug(tempo,  6027, 2, 59, 79);
+		addEventDebug(tempo,  6627, 2, 59, 0);
+		addEventDebug(tempo,  7657, 2, 60, 114);
+		addEventDebug(tempo,  7879, 2, 60, 0);
+		addEventDebug(tempo,  7881, 2, 59, 81);
+		addEventDebug(tempo,  8434, 2, 59, 0);
+		addEventDebug(tempo,  9780, 2, 62, 103);
+		addEventDebug(tempo, 10072, 2, 62, 0);
+		addEventDebug(tempo, 10074, 2, 63, 40);
+		addEventDebug(tempo, 10146, 2, 63, 0);
+		addEventDebug(tempo, 10266, 2, 66, 107);
+		addEventDebug(tempo, 11002, 2, 66, 0);
+		addEventDebug(tempo, 11535, 2, 64, 76);
+		addEventDebug(tempo, 13661, 2, 64, 0);
+
+		addEventDebug(tempo,   473, 3, 57, 51);
+		addEventDebug(tempo,  1241, 3, 57, 0);
+		addEventDebug(tempo,  1242, 3, 56, 9);
+		addEventDebug(tempo,  1424, 3, 56, 0);
+		addEventDebug(tempo,  2540, 3, 58, 68);
+		addEventDebug(tempo,  2772, 3, 58, 0);
+		addEventDebug(tempo,  3412, 3, 60, 73);
+		addEventDebug(tempo,  4227, 3, 60, 0);
+		addEventDebug(tempo,  6024, 3, 60, 58);
+		addEventDebug(tempo,  6427, 3, 60, 0);
+		addEventDebug(tempo,  6430, 3, 59, 17);
+		addEventDebug(tempo,  6591, 3, 59, 0);
+		addEventDebug(tempo,  6594, 3, 55, 1);
+		addEventDebug(tempo,  6612, 3, 55, 0);
+		addEventDebug(tempo,  7660, 3, 57, 103);
+		addEventDebug(tempo,  8096, 3, 57, 0);
+		addEventDebug(tempo,  8099, 3, 57, 107);
+		addEventDebug(tempo,  8200, 3, 57, 0);
+		addEventDebug(tempo,  8203, 3, 56, 79);
+		addEventDebug(tempo,  8230, 3, 56, 0);
+		addEventDebug(tempo,  8232, 3, 55, 77);
+		addEventDebug(tempo,  8491, 3, 55, 0);
+		addEventDebug(tempo,  9407, 3, 57, 87);
+		addEventDebug(tempo, 10048, 3, 57, 0);
+		addEventDebug(tempo, 10255, 3, 61, 74);
+		addEventDebug(tempo, 10874, 3, 61, 0);
+		addEventDebug(tempo, 10877, 3, 60, 23);
+		addEventDebug(tempo, 10973, 3, 60, 0);
+		addEventDebug(tempo, 10975, 3, 55, 17);
+		addEventDebug(tempo, 11084, 3, 55, 0);
+		addEventDebug(tempo, 11531, 3, 62, 70);
+		addEventDebug(tempo, 13649, 3, 62, 0);
+
+		addEventDebug(tempo,     0, 4, 50, 81);
+		addEventDebug(tempo,  1405, 4, 50, 0);
+		addEventDebug(tempo,  1750, 4, 53, 98);
+		addEventDebug(tempo,  2763, 4, 53, 0);
+		addEventDebug(tempo,  3884, 4, 50, 51);
+		addEventDebug(tempo,  4678, 4, 50, 0);
+		addEventDebug(tempo,  5597, 4, 55, 77);
+		addEventDebug(tempo,  6392, 4, 55, 0);
+		addEventDebug(tempo,  8975, 4, 50, 71);
+		addEventDebug(tempo, 11023, 4, 50, 0);
+		addEventDebug(tempo, 11081, 4, 50, 46);
+		addEventDebug(tempo, 11311, 4, 50, 0);
+		addEventDebug(tempo, 11524, 4, 55, 76);
+		addEventDebug(tempo, 14489, 4, 55, 0);
+
+		addEventDebug(tempo,  4783, 5, 45, 90);
+		addEventDebug(tempo,  8521, 5, 45, 0);
+
+		addEventDebug(tempo,  3430, 6, 46, 94);
+		addEventDebug(tempo,  4506, 6, 46, 0);
+		addEventDebug(tempo,  4509, 6, 40, 17);
+		addEventDebug(tempo,  6680, 6, 40, 0);
+		addEventDebug(tempo,  6868, 6, 41, 99);
+		addEventDebug(tempo,  8180, 6, 41, 0);
+		addEventDebug(tempo,  8182, 6, 40, 83);
+		addEventDebug(tempo,  8486, 6, 40, 0);
+		addEventDebug(tempo,  8587, 6, 43, 95);
+		addEventDebug(tempo, 10010, 6, 43, 0);
+		addEventDebug(tempo, 10275, 6, 46, 99);
+		addEventDebug(tempo, 10302, 6, 46, 0);
+		addEventDebug(tempo, 10304, 6, 47, 99);
+		addEventDebug(tempo, 10943, 6, 47, 0);
+		addEventDebug(tempo, 10946, 6, 40, 51);
+		addEventDebug(tempo, 11350, 6, 40, 0);
+		addEventDebug(tempo, 11492, 6, 45, 114);
+		addEventDebug(tempo, 15698, 6, 45, 0);
+
+		}
+
+	Iterator	onIt;
+
+	// determine notes duration
+	onIt = f_Notes.iterator();
+	while(onIt.hasNext())
+		{
+		MiNote	on = (MiNote)onIt.next();
+
+		Iterator	offIt = f_NoteOffMap.iterator();
+		boolean		found = false;
+
+		while(offIt.hasNext() && !found)
+			{
+			MiNote	off = (MiNote)offIt.next();
+
+			if(	on.getString()	== off.getString() &&
+				on.getFret()	== off.getFret())
+				{
+				on.setTimeOff(off.getTimeOn());
+				offIt.remove();
+				found = true;
+				}
+			}
+
+		// if a note is still playing, set its end time
+		if(!found)
+			on.setTimeOff(f_StopTime);
+		}
+
+	// remove notes with insufficient velocity or duration
+	onIt = f_Notes.iterator();
+	while(onIt.hasNext())
+		{
+		MiNote	on = (MiNote)onIt.next();
+/*
+		System.out.println(
+				"str: "		+ on.getString() +
+				", fret: "	+ on.getFret() +
+				", pitch: "	+ on.getPitch() +
+				", vel: "	+ on.getVelocity() +
+				", dur: "	+ on.getDuration());
+*/
+		if(	on.getVelocity() < inMinVelocity ||
+			on.getDuration() < inMinDuration)
+			{
+/*
+			System.out.println(
+					"removed "	+
+					"str: "		+ on.getString() +
+					", fret: "	+ on.getFret() +
+					", pitch: "	+ on.getPitch() +
+					", vel: "	+ on.getVelocity() +
+					", dur: "	+ on.getDuration());
+*/
+			onIt.remove();
+			}
+		}
+
+	return(f_Notes.size());
+	}
+
+
+	public TGChord	toChord(int inStringsCount)
+	{
+	TGSongManager	tgSongMgr	= TuxGuitar.instance().getSongManager();
+	TGChord			tgChord		= tgSongMgr.getFactory().newChord(inStringsCount);
+	Iterator		it			= f_Notes.iterator();
+
+	while(it.hasNext())
+		{
+		MiNote	note = (MiNote)it.next();
+
+		tgChord.addFretValue(note.getString() - 1, note.getFret());
+		}
+
+	return(tgChord);
+	}
+
+
+	public TGBeat	toBeat()
+	{
+	TGSongManager	tgSongMgr	= TuxGuitar.instance().getSongManager();
+	TGBeat			tgBeat		= tgSongMgr.getFactory().newBeat();
+	Iterator		it			= f_Notes.iterator();
+
+	while(it.hasNext())
+		{
+		MiNote	note	= (MiNote)it.next();
+		TGNote	tgNote	= tgSongMgr.getFactory().newNote();
+
+		tgNote.setString(note.getString());
+		tgNote.setValue(note.getFret());
+		tgBeat.getVoice(0).addNote(tgNote);
+		}
+
+	return(tgBeat);
+	}
+
+
+	public TreeSet	toPitchesSet()
+	{
+	TreeSet		pitches	= new TreeSet();
+	Iterator	it		= f_Notes.iterator();
+
+	while(it.hasNext())
+		{
+		MiNote	note = (MiNote)it.next();
+
+		pitches.add(new Byte(note.getPitch()));
+		}
+
+	return(pitches);
+	}
+
+
+	private	void	addEventDebug(int inTempo, long inTick, int inString, int inPitch, int inVelocity)
+	{
+	// to facilitate tests using output from Midi2Mtx
+	addEvent(
+		(byte)inString,
+		(byte)MiProvider.getFret(inPitch, inString),
+		(byte)inPitch,
+		(byte)inVelocity,
+		MiStaff.ticksToTimestamp(inTempo, inTick));
+	}
+
+
+	public void		toTrack(int inTempo, long inStartPosition, String inTrackName)
+	{
+	/*MiStaff	staff = */new MiStaff(f_Notes, inTempo, f_StartTime, f_StopTime, inStartPosition, inTrackName);
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiConfig.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiConfig.java
new file mode 100644
index 0000000..4378fde
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiConfig.java
@@ -0,0 +1,361 @@
+package org.herac.tuxguitar.midiinput;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
+
+class MiConfig
+{
+	private			TGConfigManager	f_Config;
+	static final	String			KEY_MIDI_INPUT_PORT		= "midi.input.port";
+	static final	String			KEY_MIDI_BASE_CHANNEL	= "midi.input.base.channel";
+	static final	String			KEY_MIN_VELOCITY		= "midi.input.min.velocity";
+	static final	String			KEY_MIN_DURATION		= "midi.input.min.duration";
+	static final	String			KEY_MODE				= "midi.input.mode";
+	static final	String			KEY_ECHO_TIMEOUT		= "midi.input.echo.timeout";
+	static final	String			KEY_INPUT_TIMEOUT		= "midi.input.input.timeout";
+	static final	String			KEY_CHORD_MODE			= "midi.input.chord.mode";
+	// mancano le chiavi per le preferenze di registrazione
+	static private	MiConfig		s_Instance;
+
+	static final int	MIN_VELOCITY_THRESHOLD	=    0;	// minimum allowed value for f_MinVelocityThreshold
+	static final int	MAX_VELOCITY_THRESHOLD	=   50;	// maximum allowed value for f_MinVelocityThreshold
+	static final int	DEF_VELOCITY_THRESHOLD	=   40;	// default value for f_MinVelocityThreshold
+
+	static final int	MIN_DURATION_THRESHOLD	=    0;	// minimum allowed value for f_MinDuration [msec]
+	static final int	MAX_DURATION_THRESHOLD	=  100;	// maximum allowed value for f_MinDuration [msec]
+	static final int	DEF_DURATION_THRESHOLD	=   25;	// default value for f_MinDuration [msec]
+
+	static final int	MIN_ECHO_TIMEOUT		=  100;	// minimum allowed value for f_EchoTimeOut
+	static final int	MAX_ECHO_TIMEOUT		= 1500;	// maximum allowed value for f_EchoTimeOut
+	static final int	DEF_ECHO_TIMEOUT		=  500;	// default value for f_EchoTimeOut
+
+	static final int	MIN_INPUT_TIMEOUT		=  100;	// minimum allowed value for f_InputTimeOut
+	static final int	MAX_INPUT_TIMEOUT		= 1500;	// maximum allowed value for f_InputTimeOut
+	static final int	DEF_INPUT_TIMEOUT		= 1000;	// default value for f_InputTimeOut
+
+	static final int	CHORD_MODE_DIAGRAM		=    0;	// insert chord diagram only
+	static final int	CHORD_MODE_ALL			=    1;	// insert chord diagram and modify staff
+
+	static final int	MIN_COUNTDOWN_BARS		=    0;	// minimum allowed value for the # of count down bars before recording
+	static final int	MAX_COUNTDOWN_BARS		=   16;	// maximum allowed value for the # of count down bars before recording
+	static final int	DEF_COUNTDOWN_BARS		=    2;	// default value for the # of count down bars before recording
+
+	static final int	MODE_FRETBOARD_ECHO		=    0;	// notes are simply echoed on TuxGuitar's fretboard, keyboard, etc.
+	static final int	MODE_CHORDS_RECORDING	=    1;	// notes are used to insert a chord at current position
+	static final int	MODE_SCALES_RECOGNITION	=    2;	// notes are used to identify a scale
+	static final int	MODE_SONG_RECORDING		=    3;	// notes are recorded with their actual timing
+
+
+	private	MiConfig()
+	{
+	f_Config = new TGConfigManager("tuxguitar-midi-input");
+	}
+
+
+	static MiConfig	instance()
+	{
+	if(s_Instance == null)
+		s_Instance = new MiConfig();
+
+	return s_Instance;
+	}
+
+
+	static TGConfigManager	getConfig()
+	{
+	return s_Instance.f_Config;
+	}
+
+
+	String	getMidiInputPortName()	{ return s_Instance.f_Config.getStringValue(KEY_MIDI_INPUT_PORT); }
+	int		getMidiBaseChannel()	{ return s_Instance.f_Config.getIntegerValue(KEY_MIDI_BASE_CHANNEL, 0); }
+	int		getMode()				{ return s_Instance.f_Config.getIntegerValue(KEY_MODE, MODE_FRETBOARD_ECHO); }
+	int		getMinVelocity()		{ return s_Instance.f_Config.getIntegerValue(KEY_MIN_VELOCITY, DEF_VELOCITY_THRESHOLD); }
+	int		getMinDuration()		{ return s_Instance.f_Config.getIntegerValue(KEY_MIN_DURATION, DEF_DURATION_THRESHOLD); }
+	int		getEchoTimeOut()		{ return s_Instance.f_Config.getIntegerValue(KEY_ECHO_TIMEOUT, DEF_INPUT_TIMEOUT); }
+	int		getInputTimeOut()		{ return s_Instance.f_Config.getIntegerValue(KEY_INPUT_TIMEOUT, DEF_INPUT_TIMEOUT); }
+	int		getChordMode()			{ return s_Instance.f_Config.getIntegerValue(KEY_CHORD_MODE, CHORD_MODE_DIAGRAM); }
+
+
+	void	showDialog(Shell parent)
+	{
+	try {
+		final List		portsNames			= MiPortProvider.listPortsNames();
+		final String	currPortName		= getMidiInputPortName();
+		final int		currBaseChannel		= getMidiBaseChannel();
+		final int		currMinVelocity		= getMinVelocity();
+		final int		currMinDuration		= getMinDuration();
+		final int		currEchoTimeOut		= getEchoTimeOut();
+		final int		currInputTimeOut	= getInputTimeOut();
+		//final int		currChordMode		= getChordMode();
+
+		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("midiinput.config.title"));
+
+		// MIDI
+		Group	groupMidi = new Group(dialog, SWT.SHADOW_ETCHED_IN);
+		groupMidi.setLayout(new GridLayout(2, false));
+		groupMidi.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		groupMidi.setText(TuxGuitar.getProperty("midiinput.config.label.group.midi"));
+
+		//------------------MIDI INPUT PORT------------------
+		Label	lblPort = new Label(groupMidi, SWT.LEFT);
+		lblPort.setText(TuxGuitar.getProperty("midiinput.config.label.port") + ":");
+
+		final Combo	cmbPort = new Combo(groupMidi, SWT.DROP_DOWN | SWT.READ_ONLY);
+		cmbPort.setLayoutData(new GridData(130, SWT.DEFAULT));
+
+		for(int i = 0 ; i < portsNames.size(); i++)
+			{
+			String	portName = (String)portsNames.get(i);
+
+			cmbPort.add(portName);
+
+			if(portName.equals(currPortName))
+				cmbPort.select(i);
+			}
+
+		//------------------MIDI BASE CHANNEL------------------
+		Label	lblChannel = new Label(groupMidi, SWT.LEFT);
+		lblChannel.setText(TuxGuitar.getProperty("midiinput.config.label.basechannel") + ":");
+
+		final Combo	cmbChannel = new Combo(groupMidi, SWT.DROP_DOWN | SWT.READ_ONLY);
+		cmbChannel.setLayoutData(new GridData(130, SWT.DEFAULT));
+
+		for(int i = 1 ; i <= 16; i++)
+			cmbChannel.add(Integer.toString(i));
+
+		cmbChannel.select(currBaseChannel);
+
+		// General input
+		Group	groupInput = new Group(dialog, SWT.SHADOW_ETCHED_IN);
+		groupInput.setLayout(new GridLayout(2, false));
+		groupInput.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		groupInput.setText(TuxGuitar.getProperty("midiinput.config.label.group.input"));
+
+		//------------------MIN VELOCITY THRESHOLD------------------
+		Label	lblVelocity = new Label(groupInput, SWT.LEFT);
+		lblVelocity.setText(TuxGuitar.getProperty("midiinput.config.label.minvelocity") + ":");
+
+		final Spinner	spnMinVelocity = new Spinner(groupInput, SWT.BORDER);
+		spnMinVelocity.setLayoutData(new GridData(130, SWT.DEFAULT));
+		spnMinVelocity.setMinimum(MIN_VELOCITY_THRESHOLD);
+		spnMinVelocity.setMaximum(MAX_VELOCITY_THRESHOLD);
+
+		spnMinVelocity.setSelection(currMinVelocity);
+
+		//------------------MIN VELOCITY DURATION------------------
+		Label	lblDuration = new Label(groupInput, SWT.LEFT);
+		lblDuration.setText(TuxGuitar.getProperty("midiinput.config.label.minduration") + ":");
+
+		final Spinner	spnMinDuration = new Spinner(groupInput, SWT.BORDER);
+		spnMinDuration.setLayoutData(new GridData(130, SWT.DEFAULT));
+		spnMinDuration.setMinimum(MIN_DURATION_THRESHOLD);
+		spnMinDuration.setMaximum(MAX_DURATION_THRESHOLD);
+
+		spnMinDuration.setSelection(currMinDuration);
+
+		// Echo/Chords/Scales
+		Group	groupEcho = new Group(dialog, SWT.SHADOW_ETCHED_IN);
+		groupEcho.setLayout(new GridLayout(2, false));
+		groupEcho.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		groupEcho.setText(TuxGuitar.getProperty("midiinput.config.label.group.echo"));
+
+		//------------------ECHO TIME OUT------------------
+		Label	lblEchoTimeOut = new Label(groupEcho, SWT.LEFT);
+		lblEchoTimeOut.setText(TuxGuitar.getProperty("midiinput.config.label.echotimeout") + ":");
+
+		final Spinner	spnEchoTimeOut = new Spinner(groupEcho, SWT.BORDER);
+		spnEchoTimeOut.setLayoutData(new GridData(130, SWT.DEFAULT));
+		spnEchoTimeOut.setMinimum(MIN_ECHO_TIMEOUT);
+		spnEchoTimeOut.setMaximum(MAX_ECHO_TIMEOUT);
+
+		spnEchoTimeOut.setSelection(currEchoTimeOut);
+
+		//------------------INPUT TIME OUT------------------
+		Label	lblInputTimeOut = new Label(groupEcho, SWT.LEFT);
+		lblInputTimeOut.setText(TuxGuitar.getProperty("midiinput.config.label.inputtimeout") + ":");
+
+		final Spinner	spnInputTimeOut = new Spinner(groupEcho, SWT.BORDER);
+		spnInputTimeOut.setLayoutData(new GridData(130, SWT.DEFAULT));
+		spnInputTimeOut.setMinimum(MIN_INPUT_TIMEOUT);
+		spnInputTimeOut.setMaximum(MAX_INPUT_TIMEOUT);
+
+		spnInputTimeOut.setSelection(currInputTimeOut);
+
+		//------------------CHORD MODE------------------
+		Label	lblMode = new Label(groupEcho, SWT.LEFT);
+		lblMode.setText(TuxGuitar.getProperty("midiinput.config.label.chordmode") + ":");
+
+		final Combo	cmbChordMode = new Combo(groupEcho, SWT.DROP_DOWN | SWT.READ_ONLY);
+		cmbChordMode.setLayoutData(new GridData(130, SWT.DEFAULT));
+
+		cmbChordMode.add(TuxGuitar.getProperty("midiinput.chordmode.diagram"));
+		cmbChordMode.add(TuxGuitar.getProperty("midiinput.chordmode.all"));
+
+		cmbChordMode.select(MiConfig.instance().getChordMode());
+
+	///* RECORDING
+		// Recording
+		Group	groupRec = new Group(dialog, SWT.SHADOW_ETCHED_IN);
+		groupRec.setLayout(new GridLayout(2, false));
+		groupRec.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		groupRec.setText(TuxGuitar.getProperty("midiinput.config.label.group.rec"));
+
+		//------------------REC COUNTDOWN BARS------------------
+		Label	lblCountdownBars = new Label(groupRec, SWT.LEFT);
+		lblCountdownBars.setText(TuxGuitar.getProperty("midiinput.config.label.countdown") + ":");
+
+		final Spinner	spnCountdownBars = new Spinner(groupRec, SWT.BORDER);
+		spnCountdownBars.setLayoutData(new GridData(130, SWT.DEFAULT));
+		spnCountdownBars.setMinimum(MIN_COUNTDOWN_BARS);
+		spnCountdownBars.setMaximum(MAX_COUNTDOWN_BARS);
+
+		//spnCountdownBars.setSelection(currInputTimeOut);
+
+		//------------------USE METRONOME------------------
+		final Button	chkMetronome = new Button(groupRec, SWT.CHECK);
+		chkMetronome.setText(TuxGuitar.getProperty("midiinput.config.label.metronome"));
+		chkMetronome.setSelection(true);
+
+		//------------------USE PLAYBACK------------------
+		final Button	chkPlayback = new Button(groupRec, SWT.CHECK);
+		chkPlayback.setText(TuxGuitar.getProperty("midiinput.config.label.playback"));
+		chkPlayback.setSelection(true);
+	 //*/
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2, false));
+		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
+
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(data);
+		buttonOK.addSelectionListener(new SelectionAdapter()
+			{
+			public void widgetSelected(SelectionEvent arg0)
+				{
+				int		portSelection = cmbPort.getSelectionIndex();
+
+				if(portSelection >= 0 && portSelection < portsNames.size())
+					{
+					String	portName = (String)portsNames.get(portSelection);
+
+					s_Instance.f_Config.setValue(KEY_MIDI_INPUT_PORT, portName);
+					s_Instance.f_Config.save();
+
+					try {
+						MiPort.setNotesPort(portName);
+						}
+					catch(MiException mie)
+						{
+						MessageDialog.errorMessage(mie);
+						}
+					}
+
+				int		baseChannel = cmbChannel.getSelectionIndex();
+
+				if(	baseChannel >= 0 &&
+					baseChannel < 16)
+					{
+					s_Instance.f_Config.setValue(KEY_MIDI_BASE_CHANNEL, baseChannel);
+					s_Instance.f_Config.save();
+
+					MiProvider.instance().setBaseChannel(baseChannel);
+					}
+
+				int		minVelocity = spnMinVelocity.getSelection();
+
+				if(	minVelocity >= MIN_VELOCITY_THRESHOLD &&
+					minVelocity <= MAX_VELOCITY_THRESHOLD)
+					{
+					s_Instance.f_Config.setValue(KEY_MIN_VELOCITY, minVelocity);
+					s_Instance.f_Config.save();
+
+					MiProvider.instance().setMinVelocity((byte)minVelocity);
+					}
+
+				int		minDuration = spnMinDuration.getSelection();
+
+				if(	minDuration >= MIN_DURATION_THRESHOLD &&
+					minDuration <= MAX_DURATION_THRESHOLD)
+					{
+					s_Instance.f_Config.setValue(KEY_MIN_DURATION, minDuration);
+					s_Instance.f_Config.save();
+
+					MiProvider.instance().setMinDuration(minDuration);
+					}
+
+				int		echoTimeOut = spnEchoTimeOut.getSelection();
+
+				if(	echoTimeOut >= MIN_ECHO_TIMEOUT &&
+					echoTimeOut <= MAX_ECHO_TIMEOUT)
+					{
+					s_Instance.f_Config.setValue(KEY_ECHO_TIMEOUT, echoTimeOut);
+					s_Instance.f_Config.save();
+
+					MiProvider.instance().setEchoTimeOut(echoTimeOut);
+					}
+
+				int		inputTimeOut = spnInputTimeOut.getSelection();
+
+				if(	inputTimeOut >= MIN_INPUT_TIMEOUT &&
+					inputTimeOut <= MAX_INPUT_TIMEOUT)
+					{
+					s_Instance.f_Config.setValue(KEY_INPUT_TIMEOUT, inputTimeOut);
+					s_Instance.f_Config.save();
+
+					MiProvider.instance().setInputTimeOut(inputTimeOut);
+					}
+
+				int		chordMode = cmbChordMode.getSelectionIndex();
+
+				s_Instance.f_Config.setValue(KEY_CHORD_MODE, chordMode);
+				s_Instance.f_Config.save();
+
+				MiProvider.instance().setChordMode(chordMode);
+
+				dialog.dispose();
+				}
+			});
+
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(data);
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+
+		dialog.setDefaultButton(buttonOK);
+
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	catch(Exception e)
+		{
+		MessageDialog.errorMessage(e);
+		}
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiException.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiException.java
new file mode 100644
index 0000000..5bffdb5
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiException.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.midiinput;
+
+public class MiException
+	extends Exception
+{
+	private static final long serialVersionUID = 1L;
+
+	public MiException(String message)
+	{
+	super(message);
+	}
+
+	public MiException(String message, Throwable cause)
+	{
+	super(message, cause);
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiNote.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiNote.java
new file mode 100644
index 0000000..17ea442
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiNote.java
@@ -0,0 +1,45 @@
+package org.herac.tuxguitar.midiinput;
+
+class MiNote
+{
+	private byte	f_String;		// 1-based string index
+	private byte	f_Fret;			// 0-based fret index
+	private byte	f_Pitch;		// MIDI note pitch
+	private byte	f_Velocity;		// MIDI note velocity
+	private long	f_TimeOn;		// MIDI NOTE_ON time [microsec]
+	private long	f_TimeOff;		// MIDI NOTE_OFF time [microsec]
+
+
+	public	MiNote(byte inString, byte inFret, byte inPitch, byte inVelocity, long inTime)
+	{
+	f_String	= inString;
+	f_Fret		= inFret;
+	f_Pitch		= inPitch;
+	f_Velocity	= inVelocity;
+	f_TimeOn	= inTime;
+	f_TimeOff	= -1;
+	}
+
+
+	public	MiNote(MiNote inNote)
+	{
+	f_String	= inNote.getString();
+	f_Fret		= inNote.getFret();
+	f_Pitch		= inNote.getPitch();
+	f_Velocity	= inNote.getVelocity();
+	f_TimeOn	= inNote.getTimeOn();
+	f_TimeOff	= inNote.getTimeOff();
+	}
+
+
+	byte	getString()		{ return(f_String); }
+	byte	getFret()		{ return(f_Fret); }
+	byte	getPitch()		{ return(f_Pitch); }
+	byte	getVelocity()	{ return(f_Velocity); }
+	long	getTimeOn()		{ return(f_TimeOn); }
+	long	getTimeOff()	{ return(f_TimeOff); }
+	long	getDuration()	{ return(f_TimeOff - f_TimeOn); }
+
+	void	setTimeOn	(long inTime)	{ f_TimeOn = inTime; }
+	void	setTimeOff	(long inTime)	{ f_TimeOff = inTime; }
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPanel.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPanel.java
new file mode 100644
index 0000000..ecd259f
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPanel.java
@@ -0,0 +1,161 @@
+package org.herac.tuxguitar.midiinput;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+
+class MiPanel
+{
+	private			Shell		f_Dialog = null;
+	private			Combo		f_CmbMode;
+	private			Button		f_BtnConfig;
+	private			Button		f_BtnRecord;
+	private			Button		f_BtnStop;
+	static private	MiPanel		s_Instance;
+
+
+	static MiPanel	instance()
+	{
+	if(s_Instance == null)
+		s_Instance = new MiPanel();
+
+	return s_Instance;
+	}
+
+
+	void	updateControls()
+	{
+	f_CmbMode.setEnabled(!MiRecorder.instance().isRecording());
+	f_BtnConfig.setEnabled(!MiRecorder.instance().isRecording());
+
+///* RECORDING
+	if(MiProvider.instance().getMode() != MiConfig.MODE_SONG_RECORDING)
+		{
+		f_BtnRecord.setEnabled(false);
+		f_BtnStop.setEnabled(false);
+		}
+	else
+		{
+		f_BtnRecord.setEnabled(!MiRecorder.instance().isRecording());
+		f_BtnStop.setEnabled(MiRecorder.instance().isRecording());
+		}
+//*/
+	}
+
+
+	void	showDialog(Shell parent)
+	{
+	if(f_Dialog != null)
+		f_Dialog.forceActive();
+	else
+		{
+		try {
+			f_Dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM);
+			f_Dialog.setLayout(new GridLayout());
+			f_Dialog.setText(TuxGuitar.getProperty("midiinput.panel.title"));
+
+			GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+			data.minimumWidth = 80;
+			data.minimumHeight = 25;
+
+			// MODE
+			Group	groupMode = new Group(f_Dialog, SWT.SHADOW_ETCHED_IN);
+			groupMode.setLayout(new GridLayout(3, false));
+			groupMode.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+			groupMode.setText(TuxGuitar.getProperty("midiinput.panel.label.group.mode"));
+
+			// MODE combo
+			Label	lblMode = new Label(groupMode, SWT.LEFT);
+			lblMode.setText(TuxGuitar.getProperty("midiinput.panel.label.mode") + ":");
+
+			f_CmbMode = new Combo(groupMode, SWT.DROP_DOWN | SWT.READ_ONLY);
+			f_CmbMode.setLayoutData(new GridData(130, SWT.DEFAULT));
+
+			f_CmbMode.add(TuxGuitar.getProperty("midiinput.mode.echo"));
+			f_CmbMode.add(TuxGuitar.getProperty("midiinput.mode.chords"));
+			f_CmbMode.add(TuxGuitar.getProperty("midiinput.mode.scales"));
+		///* RECORDING
+			f_CmbMode.add(TuxGuitar.getProperty("midiinput.mode.record"));
+		//*/
+			f_CmbMode.select(MiConfig.instance().getMode());
+
+			f_CmbMode.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					int		mode = f_CmbMode.getSelectionIndex();
+
+					if(mode != MiConfig.instance().getMode())
+						{
+						MiConfig.getConfig().setValue(MiConfig.KEY_MODE, mode);
+						MiConfig.getConfig().save();
+
+						MiProvider.instance().setMode(mode);
+						updateControls();
+						}
+				}
+			});
+
+			// CONFIGURE button
+			f_BtnConfig = new Button(groupMode, SWT.PUSH);
+			f_BtnConfig.setLayoutData(data);
+
+			f_BtnConfig.setText(TuxGuitar.getProperty("midiinput.panel.button.config"));
+			f_BtnConfig.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					MiConfig.instance().showDialog(f_Dialog);
+				}
+			});
+
+		///* RECORDING
+			// Recording
+			Group	groupRec = new Group(f_Dialog, SWT.SHADOW_ETCHED_IN);
+			groupRec.setLayout(new GridLayout(2, false));
+			groupRec.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+			groupRec.setText(TuxGuitar.getProperty("midiinput.panel.label.group.rec"));
+
+			// START button
+			f_BtnRecord = new Button(groupRec, SWT.PUSH);
+			f_BtnRecord.setLayoutData(data);
+
+			f_BtnRecord.setText(TuxGuitar.getProperty("midiinput.panel.button.start"));
+			f_BtnRecord.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					MiRecorder.instance().start();
+					updateControls();
+				}
+			});
+
+			// STOP button
+			f_BtnStop = new Button(groupRec, SWT.PUSH);
+			f_BtnStop.setLayoutData(data);
+
+			f_BtnStop.setText(TuxGuitar.getProperty("midiinput.panel.button.stop"));
+			f_BtnStop.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					MiRecorder.instance().stop();
+					updateControls();
+				}
+			});
+		//*/
+
+			updateControls();
+			DialogUtils.openDialog(f_Dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+			f_Dialog = null;
+			}
+		catch(Exception e)
+			{
+			MessageDialog.errorMessage(e);
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPlugin.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPlugin.java
new file mode 100644
index 0000000..03e098f
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPlugin.java
@@ -0,0 +1,6 @@
+package org.herac.tuxguitar.midiinput;
+
+public class MiPlugin {
+
+	public static final String MODULE_ID = "tuxguitar-midi-input";
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPort.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPort.java
new file mode 100644
index 0000000..9d4a902
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPort.java
@@ -0,0 +1,184 @@
+package org.herac.tuxguitar.midiinput;
+
+import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiUnavailableException;
+import javax.sound.midi.Transmitter;
+import javax.sound.midi.Receiver;
+import javax.sound.midi.MidiMessage;
+import javax.sound.midi.ShortMessage;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class MiPort
+	implements Receiver
+{
+	private MidiDevice	f_Device;
+	private Transmitter	f_Transmitter;
+	
+	private static MiPort	s_NotesPort;
+	private static MiPort	s_ControlPort;
+
+
+	private MiPort(MidiDevice inDevice)
+	{
+	f_Device = inDevice;
+	}
+
+
+	public String getName()
+	{
+	return f_Device.getDeviceInfo().getName();
+	}
+
+
+	protected void connectTransmitter(Transmitter inTransmitter)
+	{
+	f_Transmitter = inTransmitter;
+
+	if(f_Transmitter != null)
+		f_Transmitter.setReceiver(this);
+	}
+
+
+	protected synchronized void openPort()
+		throws MiException
+	{
+	try {
+		if(!f_Device.isOpen()) {
+			final MidiDevice device = f_Device;
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					try {
+						device.open();
+					} catch(MidiUnavailableException e){
+						throw new TGException(e);
+					}
+				}
+			});
+		}
+
+		if(f_Transmitter == null) {
+			final MidiDevice device = f_Device;
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					try {
+						connectTransmitter(device.getTransmitter());
+					} catch(MidiUnavailableException e){
+						throw new TGException(e);
+					}
+				}
+			});
+		}
+	}
+	catch(Throwable t) {
+		throw new MiException(TuxGuitar.getProperty("midiinput.error.midi.port.open"), t);
+		}
+	}
+
+
+	protected synchronized void closePort()
+		throws MiException
+	{
+	try {
+		if(f_Transmitter != null) {
+			final Transmitter transmitter = f_Transmitter;
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					transmitter.close();
+					connectTransmitter(null);
+					}
+				});
+			}
+
+		if(f_Device.isOpen()) {
+			final MidiDevice device = f_Device;
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					device.close();
+					}
+				});
+			}
+		}
+	catch(Throwable t) {
+		throw new MiException(TuxGuitar.getProperty("midiinput.error.midi.port.close"), t);
+		}
+	}
+
+	/*
+	 *	Notes port management
+	 */
+
+	public static void setNotesPort(String inDeviceName)
+		throws MiException
+	{
+	if(s_NotesPort != null)
+		s_NotesPort.closePort();
+
+	MidiDevice	device = MiPortProvider.getDevice(inDeviceName);
+
+	if(device != null)
+		{
+		s_NotesPort = new MiPort(device);
+		s_NotesPort.openPort();
+		}
+	}
+
+
+	public static long getNotesPortTimeStamp()
+	{
+	if(s_NotesPort != null)
+		return(s_NotesPort.f_Device.getMicrosecondPosition());
+	else
+		return(-1);
+	}
+
+	/*
+	 *	Control port management
+	 */
+
+	public static void setControlPort(String inDeviceName)
+		throws MiException
+	{
+	if(s_ControlPort != null)
+		s_ControlPort.closePort();
+
+	MidiDevice	device = MiPortProvider.getDevice(inDeviceName);
+
+	if(device != null)
+		{
+		s_ControlPort = new MiPort(device);
+		s_ControlPort.openPort();
+		}
+	}
+
+	/*
+	 *	javax.sound.midi.Receiver implementation
+	 */
+	
+	public void close()
+	{	
+	}
+
+
+	public void send(MidiMessage inMessage, long inTimeStamp)
+	{
+	if(inMessage instanceof ShortMessage)
+		{
+		ShortMessage	mm = (ShortMessage)inMessage;
+		
+		switch(mm.getCommand())
+			{
+			case ShortMessage.NOTE_ON:
+			case ShortMessage.NOTE_OFF:
+				MiProvider.instance().noteReceived(mm, inTimeStamp);
+				break;
+
+			case ShortMessage.CONTROL_CHANGE:
+				//System.err.println("Control change");
+				break;
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPortProvider.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPortProvider.java
new file mode 100644
index 0000000..e7c223c
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiPortProvider.java
@@ -0,0 +1,90 @@
+package org.herac.tuxguitar.midiinput;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.MidiUnavailableException;
+import javax.sound.midi.Sequencer;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+
+public class MiPortProvider
+{	
+	public static List listPortsNames() throws MiException
+	{
+	try {
+		ArrayList			portsNames	= new ArrayList();
+		MidiDevice.Info[]	infos		= MidiSystem.getMidiDeviceInfo();
+		
+		for(int i = 0; i < infos.length; i++)
+			{
+			try {
+				Iterator	it		= portsNames.iterator();
+				boolean		exists	= false;
+				
+				while(it.hasNext())
+					{
+					if(((String)it.next()).equals(infos[i].getName()))
+						{
+						exists = true;
+						break;
+						}
+					}
+
+				if(!exists)
+					{
+					MidiDevice	device = MidiSystem.getMidiDevice(infos[i]);
+
+					if(	device.getMaxTransmitters() == 0 ||
+						device instanceof Sequencer)
+						continue;
+
+					portsNames.add(infos[i].getName());
+					}
+
+				}
+			catch (MidiUnavailableException mue)
+				{
+				throw new MiException(TuxGuitar.getProperty("midiinput.error.midi.unavailable"), mue);
+				}
+			}
+		
+		return portsNames;
+		}
+	catch(Throwable t)
+		{
+		throw new MiException(TuxGuitar.getProperty("midiinput.error.unknown"), t);
+		}
+	}
+
+
+	public static MidiDevice getDevice(String inDeviceName) throws MiException
+	{
+	MidiDevice.Info[]	infos = MidiSystem.getMidiDeviceInfo();
+
+	for(int i = 0; i < infos.length; i++)
+		{
+		if(infos[i].getName().equals(inDeviceName))
+			{
+			try {
+				MidiDevice device = MidiSystem.getMidiDevice(infos[i]);
+
+				if(	device.getMaxTransmitters() == 0 ||
+					device instanceof Sequencer)
+					continue;
+
+				return(device);
+				}
+			catch(MidiUnavailableException mue)
+				{
+				throw new MiException(TuxGuitar.getProperty("midiinput.error.midi.unavailable"), mue);
+				}
+			}
+		}
+
+	return(null);
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiProvider.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiProvider.java
new file mode 100644
index 0000000..9f150d2
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiProvider.java
@@ -0,0 +1,461 @@
+package org.herac.tuxguitar.midiinput;
+
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+import java.util.Iterator;
+import java.util.TreeSet;
+
+import javax.sound.midi.ShortMessage;
+import javax.swing.Timer;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.editors.fretboard.FretBoard;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.tools.scale.ScaleManager;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class MiProvider
+{
+private final int	DEVICE_CHANNELS_COUNT	= 6;	// number of MIDI channels supported by the input device
+
+private int			f_Mode			= MiConfig.MODE_FRETBOARD_ECHO;		// current mode
+private int			f_ChordMode		= MiConfig.CHORD_MODE_DIAGRAM;		// current chord mode
+private int			f_BaseChannel	= 0;								// 0-based MIDI channel corresponding to the first string
+private byte		f_MinVelocity	= MiConfig.DEF_VELOCITY_THRESHOLD;	// notes with velocity lower than this threshold are considered unwanted noise
+private long		f_MinDuration	= MiConfig.DEF_DURATION_THRESHOLD;	// notes with duration lower than this threshold are considered unwanted noise
+
+private int[]		f_EchoNotes		= new int[6];					// list of notes for echo
+private	Timer		f_EchoTimer		= null;							// timer for echo rendering
+private int			f_EchoTimeOut	= MiConfig.DEF_ECHO_TIMEOUT;	// time out for echo rendering [msec]
+private boolean		f_EchoLastWasOn	= false;						// indicates if last note message was NOTE_ON
+private TGBeat		f_EchoBeat		= null;							// beat for echo rendering
+
+private	Timer		f_InputTimer	= null;							// timer for chord/scale input
+private int			f_InputTimeOut	= MiConfig.DEF_INPUT_TIMEOUT;	// time out for chord/scale input [msec]
+
+private	MiBuffer	f_Buffer		= new MiBuffer();				// input notes buffer
+
+static private	MiProvider	s_Instance;
+
+
+	private MiProvider()
+	{
+	echo_ResetNotes();
+	}
+
+
+	static public MiProvider instance()
+	{
+	if(s_Instance == null)
+		s_Instance = new MiProvider();
+
+	return s_Instance;
+	}
+
+
+	public void	setMode(int inValue)
+	{
+	f_Mode = inValue;
+	echo_ResetNotes();
+	}
+
+
+	int	getMode()	{ return f_Mode; }
+
+	public void	setBaseChannel	(int inValue)	{ f_BaseChannel = inValue; }
+	public void	setMinVelocity	(byte inValue)	{ f_MinVelocity = inValue; }
+	public void	setMinDuration	(long inValue)	{ f_MinDuration = inValue; }
+	public void	setEchoTimeOut	(int inValue)	{ f_EchoTimeOut = inValue; }
+	public void	setInputTimeOut	(int inValue)	{ f_InputTimeOut = inValue; }
+	public void	setChordMode	(int inValue)	{ f_ChordMode = inValue; }
+
+
+	public void	echo_ResetNotes()
+	{
+	f_EchoLastWasOn = false;
+		
+	for(int s = 0; s < f_EchoNotes.length; s++)
+		f_EchoNotes[s] = -1;
+	}
+
+
+	public void	noteReceived(ShortMessage inMessage, long inTimeStamp)
+	{
+	byte	pitch		= (byte)inMessage.getData1(),
+			velocity	= (byte)inMessage.getData2(),
+			stringIndex = (byte)getString(inMessage.getChannel());
+
+	if(stringIndex != -1)
+		{
+		byte	fretIndex = (byte)getFret(pitch, stringIndex);
+
+		if(fretIndex != -1)
+			{
+			switch(inMessage.getCommand())
+				{
+				case ShortMessage.NOTE_ON:
+					{
+					switch(f_Mode)
+						{
+						case MiConfig.MODE_FRETBOARD_ECHO:
+							if(velocity == 0 || velocity > f_MinVelocity)	// questo VA MODIFICATO!!!
+								echo(stringIndex, fretIndex, velocity > 0);
+							break;
+
+						case MiConfig.MODE_CHORDS_RECORDING:
+							if(velocity == 0 || velocity > f_MinVelocity)	// questo VA MODIFICATO!!!
+								echo(stringIndex, fretIndex, velocity > 0);
+
+							chord_AddNote(stringIndex, fretIndex, pitch, velocity, inTimeStamp);
+							break;
+
+						case MiConfig.MODE_SCALES_RECOGNITION:
+							if(velocity == 0 || velocity > f_MinVelocity)	// questo VA MODIFICATO!!!
+								echo(stringIndex, fretIndex, velocity > 0);
+
+							scale_AddNote(stringIndex, fretIndex, pitch, velocity, inTimeStamp);
+							break;
+
+						case MiConfig.MODE_SONG_RECORDING:
+							if(velocity == 0 || velocity > f_MinVelocity)	// questo VA MODIFICATO!!!
+								echo(stringIndex, fretIndex, velocity > 0);
+
+							MiRecorder.instance().addNote(stringIndex, fretIndex, pitch, velocity, inTimeStamp);
+							break;
+						}
+					}
+					break;
+
+				case ShortMessage.NOTE_OFF:
+					switch(f_Mode)
+						{
+						case MiConfig.MODE_FRETBOARD_ECHO:
+							echo(stringIndex, fretIndex, false);
+							break;
+	
+						case MiConfig.MODE_CHORDS_RECORDING:
+							echo(stringIndex, fretIndex, false);
+							chord_AddNote(stringIndex, fretIndex, pitch, (byte)0, inTimeStamp);
+							break;
+	
+						case MiConfig.MODE_SCALES_RECOGNITION:
+							echo(stringIndex, fretIndex, false);
+							scale_AddNote(stringIndex, fretIndex, pitch, (byte)0, inTimeStamp);
+							break;
+	
+						case MiConfig.MODE_SONG_RECORDING:
+							echo(stringIndex, fretIndex, false);
+							MiRecorder.instance().addNote(stringIndex, fretIndex, pitch, (byte)0, inTimeStamp);
+							break;
+						}
+					break;
+				}
+			}
+		}
+	}
+
+
+	private int	getString(int inChannel)
+	{
+	// returns the 1-based string index corresponding to the 0-based specified MIDI channel
+	// or -1 if the current track does not have such string
+
+	TGTrackImpl	track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
+
+	if(track != null)
+		{
+		int		stringsCount	= track.getStrings().size(),
+				stringIndex		= inChannel - (f_BaseChannel + (DEVICE_CHANNELS_COUNT - stringsCount)) + 1;
+
+		if(stringIndex > 0 && stringIndex <= stringsCount)
+			return(stringIndex);
+		}
+
+	return(-1);
+	}
+
+
+	static int	getStringFirstPitch(int inString)
+	{
+	// returns the note corresponding to the free vibrating string
+	// or -1 if the current track does not have such string
+
+	TGTrackImpl	track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
+
+	if(	track != null &&
+		track.getStrings().size() >= inString)
+		return(track.getString(inString).getValue());
+
+	return(-1);
+	}
+
+
+	static int	getFret(int inPitch, int inString)
+	{
+	// returns the 0-based fret index corresponding to the specified note and string
+	// or -1 if an error occurred
+
+	int		stringFirstPitch = getStringFirstPitch(inString);
+
+	if(stringFirstPitch != -1)
+		{
+		int		fret = inPitch - stringFirstPitch;
+
+		if(fret >= 0 && fret < FretBoard.MAX_FRETS)
+			return(fret);
+		}
+
+	return(-1);
+	}
+
+
+	private void	echo_UpdateExternalBeat(boolean inIsEmpty)
+	{
+	TGSynchronizer.TGRunnable	task;
+
+	if(inIsEmpty)
+		{
+		task = new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				TuxGuitar.instance().hideExternalBeat();
+				}
+			};
+		}
+	else
+		{
+		task = new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				TuxGuitar.instance().showExternalBeat(f_EchoBeat);
+				}
+			};
+		}
+
+	try {
+		TGSynchronizer.instance().executeLater(task);
+		}
+	catch(Throwable t)
+		{
+		MessageDialog.errorMessage(t);
+		}
+	}
+
+
+	private void	echo_BuildAndShowBeat(int inString, int inFret, boolean inIsOn)
+	{
+	if(f_Mode == MiConfig.MODE_SCALES_RECOGNITION && f_InputTimer == null)
+		return;
+
+	f_EchoNotes[inString - 1] = (inIsOn ? inFret : -1);
+	f_EchoLastWasOn = inIsOn;
+
+	TGSongManager	songMgr	= TuxGuitar.instance().getSongManager();
+	
+	f_EchoBeat = songMgr.getFactory().newBeat();
+
+	for(int s = 0; s < f_EchoNotes.length; s++)
+		{
+		if(f_EchoNotes[s] != -1)
+			{
+			TGNote	note = songMgr.getFactory().newNote();
+
+			note.setString(s + 1);
+			note.setValue(f_EchoNotes[s]);
+			f_EchoBeat.getVoice(0).addNote(note);
+			}
+		}
+
+	echo_UpdateExternalBeat(false);
+	}
+	
+
+	private void	echo(int inString, int inFret, boolean inIsNoteOn)
+	{
+	if(f_EchoTimer == null)
+		{
+		ActionListener taskPerformer = new ActionListener() {
+			public void actionPerformed(ActionEvent evt)
+				{
+				if(f_EchoLastWasOn)
+					{
+					f_EchoTimer.restart();
+					}
+				else
+					{
+					f_EchoTimer.stop();
+					f_EchoTimer = null;
+
+					if(f_Mode != MiConfig.MODE_SCALES_RECOGNITION)
+						echo_UpdateExternalBeat(true);
+					}
+				}
+			};
+
+		echo_ResetNotes();
+		echo_BuildAndShowBeat(inString, inFret, inIsNoteOn);
+		f_EchoTimer = new Timer(f_EchoTimeOut, taskPerformer);
+		f_EchoTimer.start();
+		}
+	else
+		{
+		echo_BuildAndShowBeat(inString, inFret, inIsNoteOn);
+		f_EchoTimer.restart();
+		}
+	}
+
+
+	private void	chord_AddNote(byte inString, byte inFret, byte inPitch, byte inVelocity, long inTimeStamp)
+	{
+	if(f_InputTimer == null)
+		{
+		ActionListener taskPerformer = new ActionListener() {
+			public void actionPerformed(ActionEvent evt) {
+				f_InputTimer.stop();
+				f_InputTimer = null;
+
+				f_Buffer.stopRecording(MiPort.getNotesPortTimeStamp());
+				//System.out.println("Chord ended");
+
+				if(f_Buffer.finalize(f_MinVelocity, f_MinDuration * 1000) > 0)
+					{
+					if(!TuxGuitar.instance().getPlayer().isRunning() && !TuxGuitar.instance().isLocked() && !TGActionLock.isLocked())
+						{
+						TablatureEditor	editor	= TuxGuitar.instance().getTablatureEditor();
+						Caret			caret	= editor.getTablature().getCaret();
+						TGTrackImpl		track	= caret.getTrack();
+						TGMeasureImpl	measure	= caret.getMeasure();
+						TGBeat			beat	= caret.getSelectedBeat();
+						TGSongManager	songMgr	= TuxGuitar.instance().getSongManager();
+
+						TGChord			chord	= f_Buffer.toChord(measure.getTrack().stringCount());
+						//TGBeat		_beat		= f_Buffer.toBeat();
+
+						// emulates InsertChordAction
+						TGActionLock.lock();
+
+						UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+
+						if(f_ChordMode == MiConfig.CHORD_MODE_ALL)
+							{
+							songMgr.getMeasureManager().cleanBeat(beat);
+
+							TGVoice		voice	= beat.getVoice(caret.getVoice());
+							Iterator	it		= track.getStrings().iterator();
+
+							while(it.hasNext())
+								{
+								TGString	string	= (TGString)it.next();
+								int			value	= chord.getFretValue(string.getNumber() - 1);
+
+								if(value >= 0)
+									{
+									TGNote note = songMgr.getFactory().newNote();
+									note.setValue(value);
+									note.setVelocity(editor.getTablature().getCaret().getVelocity());
+									note.setString(string.getNumber());
+
+									TGDuration duration = songMgr.getFactory().newDuration();
+									voice.getDuration().copy(duration);
+
+									songMgr.getMeasureManager().addNote(beat, note, duration, voice.getIndex());
+									}
+								}
+							}
+							
+						songMgr.getMeasureManager().addChord(beat, chord);
+						TuxGuitar.instance().getFileHistory().setUnsavedFile();
+						editor.getTablature().updateMeasure(measure.getNumber());
+
+						TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+
+						TGActionLock.unlock();
+						TuxGuitar.instance().updateCache(true);
+						}
+					}
+				}
+			};
+		
+		if(inVelocity > 0)
+			{
+			//System.out.println("New chord");
+
+			f_Buffer.startRecording(MiPort.getNotesPortTimeStamp());
+			f_Buffer.addEvent(inString, inFret, inPitch, inVelocity, inTimeStamp);
+
+			f_InputTimer = new Timer(f_InputTimeOut, taskPerformer);
+			f_InputTimer.start();
+			}
+		}
+	else
+		{
+		f_Buffer.addEvent(inString, inFret, inPitch, inVelocity, inTimeStamp);
+
+		if(inVelocity > 0)
+			f_InputTimer.restart();
+		}
+	}
+	
+
+	private void	scale_AddNote(byte inString, byte inFret, byte inPitch, byte inVelocity, long inTimeStamp)
+	{
+	if(f_InputTimer == null)
+		{
+		ActionListener taskPerformer = new ActionListener() {
+			public void actionPerformed(ActionEvent evt) {
+				f_InputTimer.stop();
+				f_InputTimer = null;
+
+				f_Buffer.stopRecording(MiPort.getNotesPortTimeStamp());
+				//System.out.println("Scale ended");
+
+				if(f_Buffer.finalize(f_MinVelocity, f_MinDuration * 1000) > 0)
+					{
+					TGBeat		beat		= f_Buffer.toBeat();
+					TreeSet		pitches		= f_Buffer.toPitchesSet();
+
+					MiScaleFinder.findMatchingScale(pitches);
+					TuxGuitar.instance().showExternalBeat(beat);
+					}
+				else
+					{
+					TuxGuitar.instance().hideExternalBeat();
+					MiScaleFinder.selectScale(ScaleManager.NONE_SELECTION, 0);
+					}
+
+				TuxGuitar.instance().updateCache(true);
+				}
+			};
+
+		if(inVelocity > 0)
+			{
+			//System.out.println("New scale");
+
+			f_Buffer.startRecording(MiPort.getNotesPortTimeStamp());
+			f_Buffer.addEvent(inString, inFret, inPitch, inVelocity, inTimeStamp);
+
+			f_InputTimer = new Timer(f_InputTimeOut, taskPerformer);
+			f_InputTimer.start();
+			}
+		}
+	else
+		{
+		f_Buffer.addEvent(inString, inFret, inPitch, inVelocity, inTimeStamp);
+
+		if(inVelocity > 0)
+			f_InputTimer.restart();
+		}
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiRecorder.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiRecorder.java
new file mode 100644
index 0000000..0624aaa
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiRecorder.java
@@ -0,0 +1,131 @@
+package org.herac.tuxguitar.midiinput;
+
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.impl.transport.TransportPlayAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportStopAction;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+class MiRecorder
+{
+static	private	MiRecorder	s_Instance;
+		private	boolean		f_IsRecording;
+		private	boolean		f_SavedMetronomeStatus;
+		private	TGTrack		f_TempTrack;				// temporary track
+		private	int			f_Tempo;					// recording tempo [bpm]
+		private	long		f_StartPosition;			// recording start position [ticks]
+		private	MiBuffer	f_Buffer = new MiBuffer();	// input notes buffer
+
+		private	boolean		s_TESTING = true;
+
+
+	private MiRecorder()
+	{
+	}
+
+
+	int	getTempo()	// just for DEBUG
+	{
+		return(f_Tempo);
+	}
+
+
+	static public MiRecorder instance()
+	{
+	if(s_Instance == null)
+		s_Instance = new MiRecorder();
+
+	return s_Instance;
+	}
+
+
+	public boolean	isRecording()	{ return(f_IsRecording); }
+
+
+	public void		addNote(byte inString, byte inFret, byte inPitch, byte inVelocity, long inTimeStamp)
+	{
+	f_Buffer.addEvent(inString, inFret, inPitch, inVelocity, inTimeStamp);
+	}
+
+
+	public void		start()
+	{
+	TGSongManager	tgSongMgr = TuxGuitar.instance().getSongManager();
+
+	if(s_TESTING)
+		{
+		TGTempo	tempo = tgSongMgr.getFactory().newTempo();
+
+		tempo.setValue(80);
+		tgSongMgr.changeTempos(TGDuration.QUARTER_TIME, tempo, true);
+		}
+
+	f_SavedMetronomeStatus = TuxGuitar.instance().getPlayer().isMetronomeEnabled();
+	TuxGuitar.instance().getPlayer().setMetronomeEnabled(true);
+
+	TablatureEditor	editor	= TuxGuitar.instance().getTablatureEditor();
+	Caret			caret	= editor.getTablature().getCaret();
+
+	f_Tempo			= caret.getMeasure().getTempo().getValue();
+	f_StartPosition = caret.getMeasure().getStart();
+
+	f_TempTrack = tgSongMgr.addTrack();
+
+	f_TempTrack.setName("Traccia temporanea input MIDI");
+/*
+	// allocate measures
+	int		requestedMeasuresCount = 10,
+			currMeasuresCount = tgSongMgr.getSong().countMeasureHeaders();
+
+	for(int m = currMeasuresCount + 1; m < requestedMeasuresCount; m++)
+		tgSongMgr.addNewMeasure(m);
+
+	TuxGuitar.instance().fireUpdate();
+	TuxGuitar.instance().getMixer().update();
+*/
+	TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+		public void run() throws TGException {
+			TGActionManager.getInstance().execute(TransportPlayAction.NAME);
+		}
+	});
+
+	// come si sincronizza il timestamp iniziale con il playback?
+	f_Buffer.startRecording(MiPort.getNotesPortTimeStamp());
+	f_IsRecording = true;
+	}
+
+
+	public void		stop()
+	{
+	TGSongManager	tgSongMgr = TuxGuitar.instance().getSongManager();
+
+	f_Buffer.stopRecording(MiPort.getNotesPortTimeStamp());
+	f_IsRecording = false;
+
+	TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+		public void run() throws TGException {
+			TGActionManager.getInstance().execute(TransportStopAction.NAME);
+		}
+	});
+	TuxGuitar.instance().getPlayer().setMetronomeEnabled(f_SavedMetronomeStatus);
+	
+	// qui deve cancellare la traccia di servizio...
+	tgSongMgr.removeTrack(f_TempTrack);
+
+	if(f_Buffer.finalize(
+		(byte)MiConfig.instance().getMinVelocity(),
+		(long)MiConfig.instance().getMinDuration() * 1000) > 0)
+		{
+		f_Buffer.toTrack(f_Tempo, f_StartPosition, "Nuovo input MIDI");
+		}
+
+	TuxGuitar.instance().fireUpdate();
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiScaleFinder.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiScaleFinder.java
new file mode 100644
index 0000000..ef55e0c
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiScaleFinder.java
@@ -0,0 +1,189 @@
+package org.herac.tuxguitar.midiinput;
+
+import java.util.Iterator;
+import java.util.TreeSet;
+//import java.util.Arrays;	// just for debugging
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.scale.ScaleManager;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+class MiScaleFinder
+{
+	static class TestScale
+	{
+		int		f_Key;
+		int		f_ScaleSize;
+		int[]	f_Sequence;
+	}
+
+
+	static private int[]	scaleDefToModel(String inScaleDefinition)
+	{
+	String[]	keys	= inScaleDefinition.split(",");
+	int[]		model	= new int[keys.length];
+
+	for(int i = 0; i < keys.length; i++)
+		model[i] = (Integer.parseInt(keys[i]) - 1);
+
+	return(model);
+	}
+
+
+	static private int[]	scaleModelToIntervals(int[] inModel)
+	{
+	int[]		intervals = new int[inModel.length];
+
+	for(int i = 1; i < inModel.length; i++)
+		intervals[i - 1] = inModel[i] - inModel[i - 1];
+
+	intervals[inModel.length - 1] = 12 - inModel[inModel.length - 1];
+
+	return(intervals);
+	}
+
+
+	static private TestScale[]	buildReferenceSequences(int inLoPitch, int inHiPitch, int inScaleIndex)
+	{
+	ScaleManager	scaleMgr	= TuxGuitar.instance().getScaleManager();
+	int[]			model		= scaleDefToModel(scaleMgr.getScaleKeys(inScaleIndex));
+	int[]			intervals	= scaleModelToIntervals(model);
+	TestScale[]		sequences	= new TestScale[12];
+
+	//System.out.println();
+	//System.out.println("Scale: "			+ scaleMgr.getScaleName(inScaleIndex));
+	//System.out.println("Lowest Pitch: "	+ inLoPitch);
+	//System.out.println("Highest Pitch: "	+ inHiPitch);
+	//System.out.println("Model: "			+ Arrays.toString(model));
+	//System.out.println("Intervals: "		+ Arrays.toString(intervals));
+
+	// build sequences, backwards, one per key
+	for(int key = 0; key < 12; key++)
+		{
+		// compute sequence length
+		int			sequenceLength = 0;
+
+		for(int pitch = inLoPitch - key, intervalsIndex = 0; pitch <= inHiPitch;)
+			{
+			sequenceLength++;
+			pitch += intervals[intervalsIndex];
+			intervalsIndex = (intervalsIndex + 1 >= intervals.length ? 0 : intervalsIndex + 1);
+			}
+
+		// initialize sequence
+		sequences[key]				= new TestScale();
+		sequences[key].f_Key		= (inLoPitch - key) % 12;
+		sequences[key].f_ScaleSize	= model.length;
+		sequences[key].f_Sequence	= new int[sequenceLength];
+
+		// fill sequence
+		for(int pitch = inLoPitch - key, intervalsIndex = 0, i = 0; pitch <= inHiPitch;)
+			{
+			sequences[key].f_Sequence[i++] = pitch;
+			pitch += intervals[intervalsIndex];
+			intervalsIndex = (intervalsIndex + 1 >= intervals.length ? 0 : intervalsIndex + 1);
+			}
+
+		//System.out.println("key: " + key + ", sequence: " + Arrays.toString(sequences[key].f_Sequence));
+		}
+
+	return(sequences);
+	}
+
+
+	static private int		countMatches(TreeSet inScale, int[] inRefSequence)
+	{
+	int			count	= 0;
+	Iterator	it		= inScale.iterator();
+
+	while(it.hasNext())
+		{
+		int		pitch = ((Byte)it.next()).intValue();
+		boolean	found = false;
+
+		for(int i = 0; i < inRefSequence.length && !found; i++)
+			if(pitch == inRefSequence[i])
+				found = true;
+
+		if(!found)
+			return(0);
+		else
+			count++;
+		}
+
+	return(count);
+	}
+
+
+	static public int		findMatchingScale(TreeSet inScale)
+	{
+	ScaleManager	scaleMgr		= TuxGuitar.instance().getScaleManager();
+	int				scalesCount		= scaleMgr.countScales(),
+					minScaleSize	= 12,
+					maxMatches		= 0,
+					scaleIndex		= ScaleManager.NONE_SELECTION,
+					scaleKey		= 0;
+
+	if(!inScale.isEmpty())
+		{
+		int		loPitch	= ((Byte)inScale.first()).intValue(),
+				hiPitch	= ((Byte)inScale.last()).intValue();
+
+		//System.out.println("Input: "	+ inScale);
+		//System.out.println("loPitch: "	+ loPitch);
+		//System.out.println("hiPitch: "	+ hiPitch);
+
+		for(int s = 0; s < scalesCount; s++)
+			{
+			TestScale[]	refSequences = buildReferenceSequences(loPitch, hiPitch, s);
+
+			for(int key = 0; key < 12; key++)
+				{
+				int		matches = countMatches(inScale, refSequences[key].f_Sequence);
+
+				if(	matches > maxMatches)
+					{
+					maxMatches		= matches;
+					scaleIndex		= s;
+					scaleKey		= refSequences[key].f_Key;
+					minScaleSize	= refSequences[key].f_ScaleSize;
+
+					//System.out.println();
+					//System.out.println("more matches: " + scaleMgr.getScaleName(scaleIndex));
+					//System.out.println("maxMatches: " + maxMatches + " minScaleSize: " + minScaleSize);
+					}
+				else if(maxMatches > 0 && matches == maxMatches && refSequences[key].f_ScaleSize < minScaleSize)
+					{
+					maxMatches		= matches;
+					scaleIndex		= s;
+					scaleKey		= refSequences[key].f_Key;
+					minScaleSize	= refSequences[key].f_ScaleSize;
+
+					//System.out.println();
+					//System.out.println("smaller scale: " + scaleMgr.getScaleName(scaleIndex));
+					//System.out.println("maxMatches: " + maxMatches + " minScaleSize: " + minScaleSize);
+					}
+				}
+			}
+		}
+
+	selectScale(scaleIndex, scaleKey);
+	return(scaleIndex);
+	}
+
+
+	static public void		selectScale(final int inIndex, final int inKey)
+	{
+	try	{
+		TGSynchronizer.instance().execute( new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				TuxGuitar.instance().getScaleManager().selectScale(inIndex, inKey);
+			}
+		});
+		}
+	catch(Throwable e) {
+		e.printStackTrace();
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiSettingsHandler.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiSettingsHandler.java
new file mode 100644
index 0000000..aa66d7a
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiSettingsHandler.java
@@ -0,0 +1,15 @@
+package org.herac.tuxguitar.midiinput;
+
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+
+public class MiSettingsHandler implements TGPluginSettingsHandler {
+	
+	public MiSettingsHandler(){
+		super();
+	}
+	
+	public void openSettingsDialog(Shell parent) {
+		MiConfig.instance().showDialog(parent);
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiStaff.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiStaff.java
new file mode 100644
index 0000000..f6caa96
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiStaff.java
@@ -0,0 +1,439 @@
+package org.herac.tuxguitar.midiinput;
+
+import java.util.Iterator;
+import java.util.TreeMap;
+import java.util.ArrayList;
+import java.util.Map;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.managers.TGTrackManager;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGNote;
+
+
+class MiStaff
+{
+	private TreeMap	f_Events				= new TreeMap();	// staff events map
+	private TGTrack	f_TgTrack				= null;				// work track
+	private	boolean	f_Dump_Input			= false;			// for debugging...
+	private	boolean	f_Dump_TrackGeneration	= false;			// for debugging...
+
+
+	MiStaff(
+		final ArrayList	inBufferNotes,		// MIDI input notes from buffer [microseconds]
+		int				inTempo,			// quarters per minute
+		long			inStartTime,		// first MIDI time stamp [microseconds]
+		long			inStopTime,			// last MIDI time stamp [microseconds]
+		long			inStartPosition,	// recording start position [ticks]
+		String			inTrackName)		// name for the TuxGuitar track to be created
+	{
+	ArrayList	midiNotes = new ArrayList();
+
+	// make a deep copy of input buffer notes
+	for(Iterator it = inBufferNotes.iterator(); it.hasNext();)
+		midiNotes.add(new MiNote((MiNote)it.next()));
+
+	// convert time stamps from absolute microseconds to song relative ticks
+	for(Iterator it = midiNotes.iterator(); it.hasNext();)
+		{
+		MiNote	note	= (MiNote)it.next();
+		long	timeOn	= note.getTimeOn(),
+				timeOff	= note.getTimeOff();
+
+		// absolute to relative time stamps
+		timeOn	-= inStartTime;
+		timeOff	-= inStartTime;
+
+		// time stamps to ticks
+		timeOn	= inStartPosition + timestampToTicks(inTempo, timeOn);
+		timeOff	= inStartPosition + timestampToTicks(inTempo, timeOff);
+
+		// update values
+		note.setTimeOn(timeOn);
+		note.setTimeOff(timeOff);
+		}
+
+	if(f_Dump_Input)
+		{
+		MiBuffer.dump(inBufferNotes, "input buffer MIDI notes");
+		MiBuffer.dump(midiNotes, "converted MIDI notes");
+		}
+
+	TGSongManager	tgSongMgr		= TuxGuitar.instance().getSongManager();
+	long			startTick		= inStartPosition,
+					stopTick		= inStartPosition + timestampToTicks(inTempo, inStopTime - inStartTime);
+	TGMeasureHeader	mh				= tgSongMgr.getMeasureHeaderAt(startTick);
+	long			firstBarTick	= mh.getStart();
+
+	// insert bars into staff
+	for(long tick = firstBarTick; tick <= stopTick; tick += 4 * TGDuration.QUARTER_TIME)
+		addBar(tick);
+
+	// insert note events into staff
+	for(Iterator it = midiNotes.iterator(); it.hasNext();)
+		addNote((MiNote)it.next());
+
+	// generate bars
+	createMeasures();
+
+	// generate beats
+	insertNotesIntoTrack(inTrackName);
+	}
+
+
+	static	long	timestampToTicks(int inTempo, long inTimeStamp)
+	{
+	long	ticks = (inTimeStamp * inTempo * TGDuration.QUARTER_TIME) / 60000000L;
+
+	return(ticks);
+	}
+
+
+	static	long	ticksToTimestamp(int inTempo, long inTicks)
+	{
+	long	timeStamp = (inTicks * 60000000L) / (inTempo * TGDuration.QUARTER_TIME);
+
+	return(timeStamp);
+	}
+
+
+	void	addBar(long inTime)
+	{
+	MiStaffEvent	se = (MiStaffEvent)f_Events.get( new Long(inTime) );
+
+	if(se == null)
+		{
+		se = new MiStaffEvent(inTime);
+		f_Events.put( new Long(inTime) , se);
+		}
+
+	se.markAsBar();
+	}
+
+
+	void	addNote(MiNote inNote)
+	{
+	MiStaffEvent	se;
+
+	se = (MiStaffEvent)f_Events.get( new Long(inNote.getTimeOn()) );
+
+	if(se == null)
+		{
+		se = new MiStaffEvent(inNote.getTimeOn());
+		f_Events.put( new Long(inNote.getTimeOn()) , se);
+		}
+
+	se.addNoteOn(inNote);
+	}
+
+
+	private void	mergeEvent(TreeMap inEventsMap, MiStaffEvent inSE)
+	{
+	MiStaffEvent	se = (MiStaffEvent)inEventsMap.get( new Long(inSE.getBeginTime()) );
+
+	if(se == null)
+		inEventsMap.put( new Long(inSE.getBeginTime()) , inSE);
+	else
+		se.merge(inSE);
+	}
+
+
+	private void	addTiedNote(long inTime, MiStaffNote inSN, long inResidualDuration)
+	{
+	MiStaffEvent	se = (MiStaffEvent)f_Events.get( new Long(inTime) );
+
+	if(se == null)
+		{
+		se = new MiStaffEvent(inTime);
+		f_Events.put( new Long(inTime), se);
+		}
+
+	MiStaffNote sn = new MiStaffNote(inSN);
+
+	sn.setDuration(inResidualDuration);
+	se.addTiedNote(sn);
+	}
+
+
+	private void	dump(String inTitle)
+	{
+	Iterator	it = f_Events.keySet().iterator();
+
+	System.out.println();
+	System.out.println("MiStaff dump " + inTitle + "...");
+	System.out.println();
+
+	while(it.hasNext())
+		{
+		Long			time	= (Long)it.next();
+		MiStaffEvent	se		= (MiStaffEvent)f_Events.get(time);
+
+		System.out.print(se);
+		}
+	}
+
+
+	void	createMeasures()
+	{
+	TGSongManager	tgSongMgr	= TuxGuitar.instance().getSongManager();
+	Iterator		it			= f_Events.keySet().iterator();
+
+	while(it.hasNext())
+		{
+		Long			key	= (Long)it.next();
+		MiStaffEvent	se	= (MiStaffEvent)f_Events.get(key);
+
+		if(	se.isBar() &&
+			tgSongMgr.getMeasureHeaderAt(key.longValue()) == null)
+			{
+			tgSongMgr.addNewMeasure(tgSongMgr.getSong().countMeasureHeaders() + 1);
+			}
+		}
+	}
+
+
+	private TGBeat	getEventBeat(long inTime)
+	{
+	MiStaffEvent	se		= (MiStaffEvent)f_Events.get( new Long(inTime) );
+	TGBeat			tgBeat	= se.getBeat();
+
+	// creates a TGBeat if needed
+	if(tgBeat == null)
+		{
+		TGSongManager	tgSongMgr	= TuxGuitar.instance().getSongManager();
+		TGTrackManager	tgTrackMgr	= tgSongMgr.getTrackManager();
+		TGMeasure		tgMeasure	= tgTrackMgr.getMeasureAt(f_TgTrack, inTime);
+		
+		if(tgMeasure != null)
+			{
+			tgBeat = tgSongMgr.getFactory().newBeat();
+
+			tgBeat.setStart(inTime);
+			tgMeasure.addBeat(tgBeat);
+			se.setBeat(tgBeat);
+			}
+		}
+
+	return(tgBeat);
+	}
+
+
+	private void	insertNoteIntoTrack(TGBeat inTgBeat, MiStaffNote inSN)
+	{
+	TGSongManager	tgSongMgr	= TuxGuitar.instance().getSongManager();
+	TGNote			tgNote		= tgSongMgr.getFactory().newNote();
+	TGDuration		tgDuration	= tgSongMgr.getFactory().newDuration();
+
+	tgNote.setString	(inSN.getString());
+	tgNote.setValue		(inSN.getFret());
+	tgNote.setVelocity	(inSN.getVelocity());
+	tgNote.setTiedNote	(inSN.isTied());
+
+	int		noteType = MiStaffNote.durationToNoteType(inSN.getNominalDuration());
+
+	tgDuration.setValue(noteType);
+	tgDuration.setDotted(inSN.getDotCount() == 1);
+	tgDuration.setDoubleDotted(inSN.getDotCount() == 2);
+
+	if(f_Dump_TrackGeneration)
+		{
+		System.out.println(
+				"" + inTgBeat.getMeasure().getNumber() + " " + inTgBeat.getStart() +
+				" (" + tgNote.getString() + "," + tgNote.getValue() + "," + tgNote.getVelocity() + ") " +
+				"1/"	+ tgDuration.getValue() +
+				", d: "	+ tgDuration.getTime() +
+				(tgNote.isTiedNote() ? " (tied)" : "") +
+				(tgDuration.getTime() != inSN.getOverallDuration() ? " snDur=" + inSN.getOverallDuration() : ""));
+		}
+
+	// here we probably should choose the voice
+	// it would be nice to have one voice for each string...
+	inTgBeat.getVoice(0).setDuration(tgDuration);
+	inTgBeat.getVoice(0).addNote(tgNote);
+	}
+	
+
+	private void	generateTrack(String inTrackName)
+	{
+	TGSongManager	tgSongMgr	= TuxGuitar.instance().getSongManager();
+	TGTrack			tgTrack		= tgSongMgr.addTrack();
+	Iterator		eventsIt;
+
+	if(f_Dump_TrackGeneration)
+		{
+		System.out.println();
+		System.out.println("generating track: " + inTrackName + "...");
+		System.out.println();
+		}
+
+	tgTrack.setName(inTrackName);
+
+	f_TgTrack = tgTrack;
+
+	// clears events TGBeats
+	for(eventsIt = f_Events.keySet().iterator(); eventsIt.hasNext();)
+		{
+		Long			time	= (Long)eventsIt.next();
+		MiStaffEvent	se		= (MiStaffEvent)f_Events.get(time);
+
+		se.setBeat(null);
+		}
+
+	// generate TuxGuitar track
+	for(eventsIt = f_Events.keySet().iterator(); eventsIt.hasNext();)
+		{
+		Long			time	= (Long)eventsIt.next();
+		MiStaffEvent	se		= (MiStaffEvent)f_Events.get(time);
+
+		if(se.isOnBeat() || se.isTieBeat())
+			{
+			TGBeat		tgBeat	= getEventBeat(se.getBeginTime());
+			Iterator	it		= se.getNotes().iterator();
+
+			while(it.hasNext())
+				{
+				MiStaffNote	sn = (MiStaffNote)it.next();
+
+				insertNoteIntoTrack(tgBeat, sn);
+				}
+			}
+		}
+	}
+
+
+	void	insertNotesIntoTrack(String inTrackName)
+	{
+	// normalize beats
+	TreeMap		normalizedEvents = new TreeMap();
+
+	for(Iterator eventsIt = f_Events.entrySet().iterator(); eventsIt.hasNext();)
+		{
+		Map.Entry		me	= (Map.Entry)eventsIt.next();
+		MiStaffEvent	se	= (MiStaffEvent)me.getValue();
+
+		se.normalizeBeat(TGDuration.SIXTY_FOURTH);
+		mergeEvent(normalizedEvents, se);
+		}
+
+	f_Events = normalizedEvents;
+
+	dump("after beat normalization");
+	generateTrack("after beat normalization");
+
+	// add tie events due to bar crossing at the beginning of each crossed bar
+	boolean	keepGoing = true;
+
+	while(keepGoing)
+		{
+		long	nextBarBeginTime = 0;
+
+		keepGoing = false;
+	
+		for(Iterator eventsIt = f_Events.entrySet().iterator(); eventsIt.hasNext();)
+			{
+			Map.Entry		me	= (Map.Entry)eventsIt.next();
+			MiStaffEvent	se	= (MiStaffEvent)me.getValue();
+
+			if(se.isBar())
+				nextBarBeginTime = se.getBeginTime() + 4 * TGDuration.QUARTER_TIME;	// bar length should be a MiStaff member
+
+			for(Iterator snIt = se.getNotes().iterator(); snIt.hasNext();)
+				{
+				MiStaffNote	sn = (MiStaffNote)snIt.next();
+
+				if(se.getBeginTime() + sn.getOverallDuration() > nextBarBeginTime)
+					{
+					long	limitedDuration		= (nextBarBeginTime - se.getBeginTime()),
+							residualDuration	= sn.getOverallDuration() - limitedDuration;
+
+					sn.setDuration(limitedDuration);
+					addTiedNote(nextBarBeginTime, sn, residualDuration);
+					keepGoing = true;
+					break;
+					}
+				}
+
+			if(keepGoing)
+				break;
+			}
+		}
+
+	dump("after tied due to bar crossing");
+	generateTrack("after tied due to bar crossing");
+
+	// normalize durations
+	for(Iterator eventsIt = f_Events.entrySet().iterator(); eventsIt.hasNext();)
+		{
+		Map.Entry		me	= (Map.Entry)eventsIt.next();
+		MiStaffEvent	se	= (MiStaffEvent)me.getValue();
+
+		se.normalizeDurations();
+		}
+
+	dump("after duration normalization");
+	generateTrack("after duration normalization");
+
+	// add tie events due to note crossing
+	keepGoing = true;
+
+	while(keepGoing)
+		{
+		keepGoing = false;
+
+		Iterator eventsIt2 = f_Events.keySet().iterator();
+
+		if(eventsIt2.hasNext())
+			eventsIt2.next();
+
+		for(Iterator eventsIt = f_Events.entrySet().iterator(); eventsIt.hasNext();)
+			{
+			Map.Entry		me	= (Map.Entry)eventsIt.next();
+			MiStaffEvent	se	= (MiStaffEvent)me.getValue();
+
+			if(eventsIt.hasNext() && eventsIt2.hasNext())
+				{
+				long	nextTime	= ((Long)eventsIt2.next()).longValue();
+
+				for(Iterator snIt = se.getNotes().iterator(); snIt.hasNext();)
+					{
+					MiStaffNote	sn = (MiStaffNote)snIt.next();
+
+					if(se.getBeginTime() + sn.getOverallDuration() > nextTime)
+						{
+						long	limitedDuration		= (nextTime - se.getBeginTime()),
+								residualDuration	= sn.getOverallDuration() - limitedDuration;
+
+						sn.setDuration(limitedDuration);
+						addTiedNote(nextTime, sn, residualDuration);
+						keepGoing = true;
+						break;
+						}
+					}
+
+				if(keepGoing)
+					break;
+				}
+			}
+		}
+
+	dump("after tied due to note crossing");
+	generateTrack("after tied due to note crossing");
+
+	// normalize durations
+	for(Iterator eventsIt = f_Events.entrySet().iterator(); eventsIt.hasNext();)
+		{
+		Map.Entry		me	= (Map.Entry)eventsIt.next();
+		MiStaffEvent	se	= (MiStaffEvent)me.getValue();
+
+		se.normalizeDurations();
+		}
+
+	dump("after duration normalization 2");
+	generateTrack("after duration normalization 2");
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiStaffEvent.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiStaffEvent.java
new file mode 100644
index 0000000..63ebf20
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiStaffEvent.java
@@ -0,0 +1,140 @@
+package org.herac.tuxguitar.midiinput;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.song.models.TGBeat;
+
+
+class MiStaffEvent
+{
+	static final byte	NONE		= 0;
+	static final byte	BAR			= 1;
+	static final byte	ON_BEAT		= 2;
+	static final byte	OFF_BEAT	= 4;
+	static final byte	TIE_BEAT	= 8;
+
+	private byte		f_Type		= NONE;				// event type
+	private ArrayList	f_Notes		= new ArrayList();	// note on list
+	private TGBeat		f_Beat;							// TuxGuitar beat (optional)
+	private long		f_BeginTime;					// begin time [ticks]
+
+
+	public	MiStaffEvent(long inBeginTime)
+	{
+	f_BeginTime = inBeginTime;
+	}
+
+
+	boolean		isBar()			{ return((f_Type & BAR) == BAR); }
+	boolean		isOnBeat()		{ return((f_Type & ON_BEAT) == ON_BEAT); }
+	boolean		isOffBeat()		{ return((f_Type & OFF_BEAT) == OFF_BEAT); }
+	boolean		isTieBeat()		{ return((f_Type & TIE_BEAT) == TIE_BEAT); }
+	ArrayList	getNotes()		{ return(f_Notes); }
+	long		getBeginTime()	{ return(f_BeginTime); }
+
+	void		setBeat(TGBeat inBeat)	{ f_Beat = inBeat; }
+	TGBeat		getBeat()				{ return(f_Beat); }
+
+
+	public String	toString()
+	{
+	String	out = Long.toString(f_BeginTime);
+
+	if(isBar())
+		out += " BAR";
+
+	out += System.getProperty("line.separator");
+
+	if(!f_Notes.isEmpty())
+		{
+		for(Iterator it = f_Notes.iterator(); it.hasNext();)
+			{
+			MiStaffNote	sn	= (MiStaffNote)it.next();
+
+			out += (sn.isTied() ? "   T: " : "   N: ");
+			out += sn;
+			out += " ->" + (f_BeginTime + sn.getOverallDuration());
+			out += System.getProperty("line.separator");
+			}
+		}
+
+	return(out);
+	}
+
+
+	void	markAsBar()
+	{
+	f_Type |= BAR;
+	}
+
+
+	void	addNoteOn(MiNote inNote)
+	{
+	MiStaffNote	sn = new MiStaffNote(inNote);
+
+	sn.setTied(false);
+	f_Type |= ON_BEAT;
+	f_Notes.add(sn);
+	}
+
+
+	void	addTiedNote(MiStaffNote inSN)
+	{
+	inSN.setTied(true);
+	f_Type |= TIE_BEAT;
+	f_Notes.add(inSN);
+	}
+
+
+	void	merge(MiStaffEvent inEvent)
+	{
+	try	{
+		if(f_Beat != null)
+			throw new Exception("f_Beat non � nullo!");
+
+		if(f_BeginTime != inEvent.f_BeginTime)
+			throw new Exception("f_BeginTime � diverso, old: " + f_BeginTime + " new: " + inEvent.f_BeginTime);
+/*
+		if(f_EndTime != inEvent.f_EndTime)
+			throw new Exception("f_EndTime � diverso, old: " + f_EndTime + " new: " + inEvent.f_EndTime);
+*/
+		f_Type |= inEvent.f_Type;
+		f_Notes.addAll(inEvent.f_Notes);
+		}
+	catch(Throwable throwable)
+		{
+		MessageDialog.errorMessage(throwable);
+		}
+	}
+
+
+	private long	normalize(long inTime, long inResolution)
+	{
+	long	time = (inTime  / inResolution) * inResolution;
+
+	if((inTime % inResolution) > inResolution / 2)
+		time += inResolution;
+
+	return(time);
+	}
+
+
+	void	normalizeBeat(int inNoteType)
+	{
+	long	resolution = MiStaffNote.noteToTicks(inNoteType);
+
+	f_BeginTime = normalize(f_BeginTime, resolution);
+	}
+
+
+	void	normalizeDurations()
+	{
+	for(Iterator it = f_Notes.iterator(); it.hasNext();)
+		{
+		MiStaffNote	sn	= (MiStaffNote)it.next();
+		sn.normalizeDuration();
+		}
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiStaffNote.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiStaffNote.java
new file mode 100644
index 0000000..cf48f3d
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MiStaffNote.java
@@ -0,0 +1,196 @@
+package org.herac.tuxguitar.midiinput;
+
+import org.herac.tuxguitar.song.models.TGDuration;
+
+class MiStaffNote
+{
+	static final int	SIXTY_FOURTH		= (int)TGDuration.QUARTER_TIME / 16;
+	static final int	SIXTY_FOURTH_d		= SIXTY_FOURTH + SIXTY_FOURTH / 2;
+	static final int	SIXTY_FOURTH_dd		= SIXTY_FOURTH_d + SIXTY_FOURTH / 4;
+	static final int	THIRTY_SECOND		= (int)TGDuration.QUARTER_TIME / 8;
+	static final int	THIRTY_SECOND_d		= THIRTY_SECOND + THIRTY_SECOND / 2;
+	static final int	THIRTY_SECOND_dd	= THIRTY_SECOND_d + THIRTY_SECOND / 4;
+	static final int	SIXTEENTH			= (int)TGDuration.QUARTER_TIME / 4;
+	static final int	SIXTEENTH_d			= SIXTEENTH + SIXTEENTH / 2;
+	static final int	SIXTEENTH_dd		= SIXTEENTH_d + SIXTEENTH / 4;
+	static final int	EIGHTH				= (int)TGDuration.QUARTER_TIME / 2;
+	static final int	EIGHTH_d			= EIGHTH + EIGHTH / 2;
+	static final int	EIGHTH_dd			= EIGHTH_d + EIGHTH / 4;
+	static final int	QUARTER				= (int)TGDuration.QUARTER_TIME;
+	static final int	QUARTER_d			= QUARTER + QUARTER / 2;
+	static final int	QUARTER_dd			= QUARTER_d + QUARTER / 4;
+	static final int	HALF				= (int)TGDuration.QUARTER_TIME * 2;
+	static final int	HALF_d				= HALF + HALF / 2;
+	static final int	HALF_dd				= HALF_d + HALF / 4;
+	static final int	WHOLE				= (int)TGDuration.QUARTER_TIME *  4;
+
+	private byte	f_String;		// 1-based string index
+	private byte	f_Fret;			// 0-based fret index
+	private byte	f_Pitch;		// MIDI note pitch
+	private byte	f_Velocity;		// MIDI note velocity
+	private long	f_Duration;		// nominal duration [ticks]
+	private byte	f_DotCount;		// number of dots
+	private boolean	f_IsTied;		// true if this is a tied note
+
+
+	public	MiStaffNote(MiNote inNote)
+	{
+	f_String	= inNote.getString();
+	f_Fret		= inNote.getFret();
+	f_Pitch		= inNote.getPitch();
+	f_Velocity	= inNote.getVelocity();
+	f_Duration	= inNote.getDuration();
+	f_DotCount	= 0;
+	f_IsTied	= false;
+	}
+
+
+	public	MiStaffNote(MiStaffNote inNote)
+	{
+	f_String	= inNote.f_String;
+	f_Fret		= inNote.f_Fret;
+	f_Pitch		= inNote.f_Pitch;
+	f_Velocity	= inNote.f_Velocity;
+	f_Duration	= inNote.f_Duration;
+	f_DotCount	= inNote.f_DotCount;
+	f_IsTied	= inNote.f_IsTied;
+	}
+
+
+	byte	getString()		{ return f_String; }
+	byte	getFret()		{ return f_Fret; }
+	byte	getPitch()		{ return f_Pitch; }
+	byte	getVelocity()	{ return f_Velocity; }
+
+	void	setTied(boolean	inTied)			{ f_IsTied = inTied; }
+	boolean	isTied()						{ return f_IsTied; }
+
+	void	setDuration	(long inDuration)	{ f_Duration = inDuration; f_DotCount = 0; }
+	long	getNominalDuration()			{ return f_Duration; }
+	byte	getDotCount()					{ return f_DotCount; }
+
+
+	long	getOverallDuration()
+	{
+	long	time = f_Duration;
+	
+	if(f_DotCount == 1)
+		time += time / 2;
+	else if(f_DotCount == 2)
+		time += ((time / 4) * 3);
+
+	return(time);
+	}
+
+
+	public String	toString()
+	{
+	String	out =
+		"(" + f_String + "," + f_Fret + ") " +
+		"("	+ f_Pitch  + "," + f_Velocity + ") " +
+		"d " + getOverallDuration();
+
+	if(f_DotCount == 1)
+		out += " (" + f_Duration + "*)";
+	else if(f_DotCount == 2)
+		out += " (" + f_Duration + "**)";
+
+	return(out);
+	}
+
+
+	private long	nd3(long inBottom, long inTop, long inTime)
+	{
+	long	mid = inBottom + (inTop - inBottom) / 2;
+
+	return(inTime <= mid ? inBottom : inTop);
+	}
+
+
+	private long	nd2(long inDuration)
+	{
+		 if(inDuration < SIXTY_FOURTH)		return(SIXTY_FOURTH);
+	else if(inDuration < SIXTY_FOURTH_d)	return(nd3(SIXTY_FOURTH,	SIXTY_FOURTH_d,		inDuration));
+	else if(inDuration < SIXTY_FOURTH_dd)	return(nd3(SIXTY_FOURTH_d,	SIXTY_FOURTH_dd,	inDuration));
+
+	else if(inDuration < THIRTY_SECOND)		return(nd3(SIXTY_FOURTH_dd,	THIRTY_SECOND,		inDuration));
+	else if(inDuration < THIRTY_SECOND_d)	return(nd3(THIRTY_SECOND,	THIRTY_SECOND_d,	inDuration));
+	else if(inDuration < THIRTY_SECOND_dd)	return(nd3(THIRTY_SECOND_d,	THIRTY_SECOND_dd,	inDuration));
+
+	else if(inDuration < SIXTEENTH)			return(nd3(THIRTY_SECOND_dd,SIXTEENTH,			inDuration));
+	else if(inDuration < SIXTEENTH_d)		return(nd3(SIXTEENTH, 		SIXTEENTH_d,		inDuration));
+	else if(inDuration < SIXTEENTH_dd)		return(nd3(SIXTEENTH_d, 	SIXTEENTH_dd,		inDuration));
+
+	else if(inDuration < EIGHTH)			return(nd3(SIXTEENTH_dd,	EIGHTH,				inDuration));
+	else if(inDuration < EIGHTH_d)			return(nd3(EIGHTH, 			EIGHTH_d,			inDuration));
+	else if(inDuration < EIGHTH_dd)			return(nd3(EIGHTH_d,		EIGHTH_dd,			inDuration));
+
+	else if(inDuration < QUARTER)			return(nd3(EIGHTH_dd,		QUARTER,			inDuration));
+	else if(inDuration < QUARTER_d)			return(nd3(QUARTER,			QUARTER_d,			inDuration));
+	else if(inDuration < QUARTER_dd)		return(nd3(QUARTER_d,		QUARTER_dd,			inDuration));
+
+	else if(inDuration < HALF)				return(nd3(QUARTER_dd,		HALF,				inDuration));
+	else if(inDuration < HALF_d)			return(nd3(HALF,			HALF_d,				inDuration));
+	else if(inDuration < HALF_dd)			return(nd3(HALF_d,			HALF_dd,			inDuration));
+
+	else if(inDuration < WHOLE)				return(nd3(HALF_dd,			WHOLE,				inDuration));
+	else									return(WHOLE);
+	}
+
+
+	void	normalizeDuration()
+	{
+	switch((int)nd2(getOverallDuration()))
+		{
+		case SIXTY_FOURTH:		f_Duration = SIXTY_FOURTH;	f_DotCount = 0;	break;
+		case SIXTY_FOURTH_d:	f_Duration = SIXTY_FOURTH;	f_DotCount = 1;	break;
+		case SIXTY_FOURTH_dd:	f_Duration = SIXTY_FOURTH;	f_DotCount = 2;	break;
+		case THIRTY_SECOND:		f_Duration = THIRTY_SECOND;	f_DotCount = 0;	break;
+		case THIRTY_SECOND_d:	f_Duration = THIRTY_SECOND;	f_DotCount = 1;	break;
+		case THIRTY_SECOND_dd:	f_Duration = THIRTY_SECOND;	f_DotCount = 2;	break;
+		case SIXTEENTH:			f_Duration = SIXTEENTH;		f_DotCount = 0;	break;
+		case SIXTEENTH_d:		f_Duration = SIXTEENTH;		f_DotCount = 1;	break;
+		case SIXTEENTH_dd:		f_Duration = SIXTEENTH;		f_DotCount = 2;	break;
+		case EIGHTH:			f_Duration = EIGHTH;		f_DotCount = 0;	break;
+		case EIGHTH_d:			f_Duration = EIGHTH;		f_DotCount = 1;	break;
+		case EIGHTH_dd:			f_Duration = EIGHTH;		f_DotCount = 2;	break;
+		case QUARTER:			f_Duration = QUARTER;		f_DotCount = 0;	break;
+		case QUARTER_d:			f_Duration = QUARTER;		f_DotCount = 1;	break;
+		case QUARTER_dd:		f_Duration = QUARTER;		f_DotCount = 2;	break;
+		case HALF:				f_Duration = HALF;			f_DotCount = 0;	break;
+		case HALF_d:			f_Duration = HALF;			f_DotCount = 1;	break;
+		case HALF_dd:			f_Duration = HALF;			f_DotCount = 2;	break;
+		case WHOLE:				f_Duration = WHOLE;			f_DotCount = 0;	break;
+		}
+	}
+
+
+	static	long	noteToTicks(int inNoteType)
+	{
+	switch(inNoteType)
+		{
+		case TGDuration.WHOLE:			return(TGDuration.QUARTER_TIME *  4);
+		case TGDuration.HALF:			return(TGDuration.QUARTER_TIME *  2);
+		case TGDuration.QUARTER:		return(TGDuration.QUARTER_TIME);
+		case TGDuration.EIGHTH:			return(TGDuration.QUARTER_TIME /  2);
+		case TGDuration.SIXTEENTH:		return(TGDuration.QUARTER_TIME /  4);
+		case TGDuration.THIRTY_SECOND:	return(TGDuration.QUARTER_TIME /  8);
+		case TGDuration.SIXTY_FOURTH:	return(TGDuration.QUARTER_TIME / 16);
+		default:						return(1L);
+		}
+	}
+
+
+	static int	durationToNoteType(long inDuration)
+	{
+	// converts duration [ticks] into note type
+		
+	if(inDuration >= noteToTicks(TGDuration.WHOLE))					return(TGDuration.WHOLE);
+	else if(inDuration >= noteToTicks(TGDuration.HALF))				return(TGDuration.HALF);
+	else if(inDuration >= noteToTicks(TGDuration.QUARTER))			return(TGDuration.QUARTER);
+	else if(inDuration >= noteToTicks(TGDuration.EIGHTH))			return(TGDuration.EIGHTH);
+	else if(inDuration >= noteToTicks(TGDuration.SIXTEENTH))		return(TGDuration.SIXTEENTH);
+	else if(inDuration >= noteToTicks(TGDuration.THIRTY_SECOND))	return(TGDuration.THIRTY_SECOND);
+	else															return(TGDuration.SIXTY_FOURTH);
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MidiInputPlugin.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MidiInputPlugin.java
new file mode 100644
index 0000000..7565300
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MidiInputPlugin.java
@@ -0,0 +1,77 @@
+package org.herac.tuxguitar.midiinput;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.custom.TGToolItemPlugin;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class MidiInputPlugin
+	extends TGToolItemPlugin
+{
+	public void setEnabled(boolean enabled)
+		throws TGPluginException
+	{
+	if(enabled)
+		{
+		// try to setup the environment according to the user's preferences
+
+		String	notesDeviceName = MiConfig.instance().getMidiInputPortName();
+
+		if(notesDeviceName != null)
+			{
+			try {
+				MiPort.setNotesPort(notesDeviceName);
+				}
+			catch(MiException mie)
+				{
+				MessageDialog.errorMessage(mie);
+				}
+			}
+
+		MiProvider.instance().setBaseChannel	(MiConfig.instance().getMidiBaseChannel());
+		MiProvider.instance().setMode			(MiConfig.instance().getMode());
+		MiProvider.instance().setMinVelocity	((byte)MiConfig.instance().getMinVelocity());
+		MiProvider.instance().setMinDuration	(MiConfig.instance().getMinDuration());
+		MiProvider.instance().setEchoTimeOut	(MiConfig.instance().getEchoTimeOut());
+		MiProvider.instance().setInputTimeOut	(MiConfig.instance().getInputTimeOut());
+		}
+	else
+		{
+		// try to cleanup the environment
+
+		try {
+			MiPort.setNotesPort(null);
+			MiPort.setControlPort(null);
+			}
+		catch(MiException mie)
+			{
+			MessageDialog.errorMessage(mie);
+			}
+		}
+
+	super.setEnabled(enabled);
+	}
+
+	/*
+	 *	TGPlugin implementation
+	 */
+	public String getModuleId()
+	{
+	return MiPlugin.MODULE_ID;
+	}
+
+	/*
+	 *	TGToolItemPlugin implementation
+	 */
+
+	protected void doAction()
+	{
+	MiPanel.instance().showDialog(TuxGuitar.instance().getShell());
+	}
+
+
+	protected String getItemName()
+	{
+	return "MIDI input";
+	}
+}
diff --git a/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MidiSettingsPlugin.java b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MidiSettingsPlugin.java
new file mode 100644
index 0000000..adda677
--- /dev/null
+++ b/TuxGuitar-midi-input/src/org/herac/tuxguitar/midiinput/MidiSettingsPlugin.java
@@ -0,0 +1,16 @@
+package org.herac.tuxguitar.midiinput;
+
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsAdapter;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class MidiSettingsPlugin extends TGPluginSettingsAdapter {
+
+	protected TGPluginSettingsHandler getHandler() throws TGPluginException {
+		return new MiSettingsHandler();
+	}
+	
+	public String getModuleId() {
+		return MiPlugin.MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-midi/GNUmakefile b/TuxGuitar-midi/GNUmakefile
deleted file mode 100644
index 39b64db..0000000
--- a/TuxGuitar-midi/GNUmakefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.3 2008/02/26 15:24:13 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-midi
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.io.midi.MidiPluginList
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.3 2008/02/26 15:24:13 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-midi/build.properties b/TuxGuitar-midi/build.properties
index dba8bef..b325829 100644
--- a/TuxGuitar-midi/build.properties
+++ b/TuxGuitar-midi/build.properties
@@ -4,5 +4,7 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
-path.swt=../TuxGuitar/lib/swt.jar
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
+path.swt=../TuxGuitar/lib/swt.jar
\ No newline at end of file
diff --git a/TuxGuitar-midi/build.xml b/TuxGuitar-midi/build.xml
index 652e234..546740f 100644
--- a/TuxGuitar-midi/build.xml
+++ b/TuxGuitar-midi/build.xml
@@ -7,13 +7,13 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-midi.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.midi.MidiPluginList" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -32,8 +32,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
diff --git a/TuxGuitar-midi/keyboard-bug/TEST_R25.mid b/TuxGuitar-midi/keyboard-bug/TEST_R25.mid
new file mode 100644
index 0000000..5965eaf
Binary files /dev/null and b/TuxGuitar-midi/keyboard-bug/TEST_R25.mid differ
diff --git a/TuxGuitar-midi/keyboard-bug/description b/TuxGuitar-midi/keyboard-bug/description
new file mode 100644
index 0000000..9503dd1
--- /dev/null
+++ b/TuxGuitar-midi/keyboard-bug/description
@@ -0,0 +1 @@
+http://www.tuxguitar.com.ar/rd.php/message_boards/forum_posts.do?wlang=en&tid=361&fid=4
\ No newline at end of file
diff --git a/TuxGuitar-midi/pom.xml b/TuxGuitar-midi/pom.xml
new file mode 100644
index 0000000..6b56551
--- /dev/null
+++ b/TuxGuitar-midi/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-midi</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-midi/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-midi/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..e82bac2
--- /dev/null
+++ b/TuxGuitar-midi/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,2 @@
+org.herac.tuxguitar.io.midi.MidiPluginImporter
+org.herac.tuxguitar.io.midi.MidiPluginExporter
diff --git a/TuxGuitar-midi/share/META-INF/tuxguitar-midi.info b/TuxGuitar-midi/share/META-INF/tuxguitar-midi.info
new file mode 100644
index 0000000..c70ae16
--- /dev/null
+++ b/TuxGuitar-midi/share/META-INF/tuxguitar-midi.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=Midi file format import-export plugin
+plugin.description=Midi file format import-export plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPlugin.java b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPlugin.java
new file mode 100644
index 0000000..6386edd
--- /dev/null
+++ b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPlugin.java
@@ -0,0 +1,6 @@
+package org.herac.tuxguitar.io.midi;
+
+public class MidiPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-midi";
+}
diff --git a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginExporter.java b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginExporter.java
index 1a749ee..3002b5d 100644
--- a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginExporter.java
+++ b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginExporter.java
@@ -1,11 +1,15 @@
 package org.herac.tuxguitar.io.midi;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin;
 import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
 
 public class MidiPluginExporter extends TGExporterPlugin{
 	
 	protected TGRawExporter getExporter() {
 		return new MidiSongExporter();
 	}
+	
+	public String getModuleId(){
+		return MidiPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginImporter.java b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginImporter.java
index ce6782a..2d2f3d3 100644
--- a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginImporter.java
+++ b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginImporter.java
@@ -1,11 +1,15 @@
 package org.herac.tuxguitar.io.midi;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin;
 import org.herac.tuxguitar.io.base.TGRawImporter;
+import org.herac.tuxguitar.io.plugin.TGImporterPlugin;
 
 public class MidiPluginImporter extends TGImporterPlugin{
 	
 	protected TGRawImporter getImporter() {
 		return new MidiSongImporter();
 	}
+	
+	public String getModuleId(){
+		return MidiPlugin.MODULE_ID;
+	}
 }
diff --git a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginList.java b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginList.java
deleted file mode 100644
index c1ec4d7..0000000
--- a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiPluginList.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.herac.tuxguitar.io.midi;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginList;
-
-public class MidiPluginList extends TGPluginList{
-	
-	protected List getPlugins() {
-		List plugins = new ArrayList();
-		plugins.add(new MidiPluginImporter());
-		plugins.add(new MidiPluginExporter());
-		return plugins;
-	}
-	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "Midi file format import-export plugin";
-	}
-	
-	public String getName() {
-		return "Midi file format import-export plugin";
-	}
-	
-	public String getVersion() {
-		return "1.0";
-	}
-}
diff --git a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSequenceHandlerImpl.java b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSequenceHandlerImpl.java
index 118d3e2..c797d55 100644
--- a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSequenceHandlerImpl.java
+++ b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSequenceHandlerImpl.java
@@ -3,6 +3,8 @@ package org.herac.tuxguitar.io.midi;
 import java.io.IOException;
 import java.io.OutputStream;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
 import org.herac.tuxguitar.io.midi.base.MidiEvent;
 import org.herac.tuxguitar.io.midi.base.MidiSequence;
 import org.herac.tuxguitar.io.midi.base.MidiTrack;
@@ -14,9 +16,11 @@ public class MidiSequenceHandlerImpl extends MidiSequenceHandler{
 	
 	private OutputStream stream;
 	private MidiSequence sequence;
+	private GMChannelRouter router;
 	
-	public MidiSequenceHandlerImpl(int tracks,OutputStream stream){
+	public MidiSequenceHandlerImpl(int tracks, GMChannelRouter router, OutputStream stream){
 		super(tracks);
+		this.router = router;
 		this.stream = stream;
 		this.init();
 	}
@@ -32,30 +36,55 @@ public class MidiSequenceHandlerImpl extends MidiSequenceHandler{
 		return this.sequence;
 	}
 	
+	private int resolveChannel(GMChannelRoute gmChannel, boolean bendMode){
+		return (bendMode ? gmChannel.getChannel2() : gmChannel.getChannel1());
+	}
+	
 	public void addEvent(int track, MidiEvent event) {
 		if(track >= 0 && track < getSequence().countTracks()){
 			getSequence().getTrack(track).add(event);
 		}
 	}
 	
-	public void addControlChange(long tick,int track,int channel, int controller, int value) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.controlChange(channel, controller, value), tick ));
+	public void addNoteOff(long tick,int track,int channelId, int note, int velocity, int voice, boolean bendMode) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			addEvent(track,new MidiEvent(MidiMessageUtils.noteOff(resolveChannel(gmChannel,bendMode), note, velocity), tick ));
+		}
 	}
 	
-	public void addNoteOff(long tick,int track,int channel, int note, int velocity) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.noteOff(channel, note, velocity), tick ));
+	public void addNoteOn(long tick,int track,int channelId, int note, int velocity, int voice, boolean bendMode) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			addEvent(track,new MidiEvent(MidiMessageUtils.noteOn(resolveChannel(gmChannel,bendMode), note, velocity), tick ));
+		}
 	}
 	
-	public void addNoteOn(long tick,int track,int channel, int note, int velocity) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.noteOn(channel, note, velocity), tick ));
+	public void addPitchBend(long tick,int track,int channelId, int value, int voice, boolean bendMode) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			addEvent(track,new MidiEvent(MidiMessageUtils.pitchBend(resolveChannel(gmChannel,bendMode), value), tick ));
+		}
 	}
 	
-	public void addPitchBend(long tick,int track,int channel, int value) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.pitchBend(channel, value), tick ));
+	public void addControlChange(long tick,int track,int channelId, int controller, int value) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			addEvent(track,new MidiEvent(MidiMessageUtils.controlChange(gmChannel.getChannel1(), controller, value), tick ));
+			if( gmChannel.getChannel1() != gmChannel.getChannel2() ){
+				addEvent(track,new MidiEvent(MidiMessageUtils.controlChange(gmChannel.getChannel2(), controller, value), tick ));
+			}
+		}
 	}
 	
-	public void addProgramChange(long tick,int track,int channel, int instrument) {
-		addEvent(track,new MidiEvent(MidiMessageUtils.programChange(channel, instrument), tick ));
+	public void addProgramChange(long tick,int track,int channelId, int instrument) {
+		GMChannelRoute gmChannel = this.router.getRoute(channelId);
+		if( gmChannel != null ){
+			addEvent(track,new MidiEvent(MidiMessageUtils.programChange(gmChannel.getChannel1(), instrument), tick ));
+			if( gmChannel.getChannel1() != gmChannel.getChannel2() ){
+				addEvent(track,new MidiEvent(MidiMessageUtils.programChange(gmChannel.getChannel2(), instrument), tick ));
+			}
+		}
 	}
 	
 	public void addTempoInUSQ(long tick,int track,int usq) {
diff --git a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSettingsDialog.java b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSettingsDialog.java
index 973416d..84ef5a7 100644
--- a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSettingsDialog.java
+++ b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSettingsDialog.java
@@ -11,8 +11,8 @@ import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
 
 public class MidiSettingsDialog {
 	
diff --git a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongExporter.java b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongExporter.java
index 06acced..a8a4f02 100644
--- a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongExporter.java
+++ b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongExporter.java
@@ -2,6 +2,8 @@ package org.herac.tuxguitar.io.midi;
 
 import java.io.OutputStream;
 
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGLocalFileExporter;
 import org.herac.tuxguitar.player.base.MidiSequenceParser;
@@ -31,13 +33,18 @@ public class MidiSongExporter implements TGLocalFileExporter{
 		this.stream = stream;
 	}
 	
-	public void exportSong(TGSong song) {
+	public void exportSong(TGSong tgSong) {
 		if( this.stream != null && this.settings != null ){
-			TGSongManager manager = new TGSongManager();
-			manager.setSong(song);
-			MidiSequenceParser parser = new MidiSequenceParser(manager,MidiSequenceParser.DEFAULT_EXPORT_FLAGS,100,this.settings.getTranspose());
-			MidiSequenceHandlerImpl sequence = new MidiSequenceHandlerImpl( (song.countTracks() + 1) , this.stream);
-			parser.parse(sequence);
+			TGSongManager tgSongManager = new TGSongManager();
+			tgSongManager.setSong(tgSong);
+
+			GMChannelRouter gmChannelRouter = new GMChannelRouter();
+			GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(gmChannelRouter);
+			gmChannelRouterConfigurator.configureRouter(tgSong.getChannels());
+			
+			MidiSequenceParser midiSequenceParser = new MidiSequenceParser(tgSongManager,MidiSequenceParser.DEFAULT_EXPORT_FLAGS);
+			midiSequenceParser.setTranspose(this.settings.getTranspose());
+			midiSequenceParser.parse(new MidiSequenceHandlerImpl((tgSong.countTracks() + 1), gmChannelRouter, this.stream));
 		}
 	}
 }
diff --git a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongImporter.java b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongImporter.java
index 1f7952c..aa4f3a2 100644
--- a/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongImporter.java
+++ b/TuxGuitar-midi/src/org/herac/tuxguitar/io/midi/MidiSongImporter.java
@@ -5,6 +5,8 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGLocalFileImporter;
@@ -33,11 +35,13 @@ public class MidiSongImporter implements TGLocalFileImporter{
 	private static final int MIN_DURATION_VALUE = TGDuration.SIXTY_FOURTH;
 	
 	private int resolution;
+	private List channels;
 	private List headers;
 	private List tracks;
 	private List tempNotes;
 	private List tempChannels;
 	private List trackTuningHelpers;
+	private GMChannelRouter channelRouter;
 	private MidiSettings settings;
 	protected TGFactory factory;
 	protected InputStream stream;
@@ -84,6 +88,10 @@ public class MidiSongImporter implements TGLocalFileImporter{
 			
 			TGSong song = this.factory.newSong();
 			
+			Iterator channels = this.channels.iterator();
+			while(channels.hasNext()){
+				song.addChannel((TGChannel)channels.next());
+			}
 			Iterator headers = this.headers.iterator();
 			while(headers.hasNext()){
 				song.addMeasureHeader((TGMeasureHeader)headers.next());
@@ -100,11 +108,13 @@ public class MidiSongImporter implements TGLocalFileImporter{
 	
 	private void initFields(MidiSequence sequence){
 		this.resolution = sequence.getResolution();
+		this.channels = new ArrayList();
 		this.headers = new ArrayList();
 		this.tracks = new ArrayList();
 		this.tempNotes = new ArrayList();
 		this.tempChannels = new ArrayList();
 		this.trackTuningHelpers = new ArrayList();
+		this.channelRouter = new GMChannelRouter();
 	}
 	
 	private int getNextTrackNumber(){
@@ -229,14 +239,10 @@ public class MidiSongImporter implements TGLocalFileImporter{
 				return track;
 			}
 		}
-		TGChannel channel = this.factory.newChannel();
-		channel.setChannel((short)-1);
-		channel.setEffectChannel((short)-1);
-		channel.setInstrument((short)0);
 		
 		TGTrack track = this.factory.newTrack();
 		track.setNumber(number);
-		track.setChannel(channel);
+		track.setChannelId(-1);
 		TGColor.RED.copy(track.getColor());
 		
 		this.tracks.add(track);
@@ -404,6 +410,7 @@ public class MidiSongImporter implements TGLocalFileImporter{
 	}
 	
 	private void checkAll()throws Exception{
+		checkChannels();
 		checkTracks();
 		
 		int headerCount = this.headers.size();
@@ -426,38 +433,79 @@ public class MidiSongImporter implements TGLocalFileImporter{
 		}
 	}
 	
+	private void checkChannels(){
+		for(int tc = 0 ; tc < this.tempChannels.size() ; tc ++ ){
+			TempChannel tempChannel = (TempChannel)this.tempChannels.get( tc );
+			if( tempChannel.getTrack() > 0 ){
+				boolean channelExists = false;
+				for(int c = 0 ; c < this.channels.size() ; c ++ ){
+					TGChannel tgChannel = (TGChannel) this.channels.get(c);
+					GMChannelRoute gmChannelRoute = this.channelRouter.getRoute(tgChannel.getChannelId());
+					if( gmChannelRoute != null ){
+						if( gmChannelRoute.getChannel1() == tempChannel.getChannel() || gmChannelRoute.getChannel2() == tempChannel.getChannel() ){
+							channelExists = true;
+						}
+					}
+				}
+				
+				if(!channelExists){
+					TGChannel tgChannel = this.factory.newChannel();
+					tgChannel.setChannelId(this.channels.size() + 1);
+					tgChannel.setProgram((short)tempChannel.getInstrument());
+					tgChannel.setVolume((short)tempChannel.getVolume());
+					tgChannel.setBalance((short)tempChannel.getBalance());
+					tgChannel.setName(("#" + tgChannel.getChannelId()));
+					tgChannel.setBank(tempChannel.getChannel() == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+					
+					GMChannelRoute gmChannelRoute = new GMChannelRoute(tgChannel.getChannelId());
+					gmChannelRoute.setChannel1(tempChannel.getChannel());
+					gmChannelRoute.setChannel2(tempChannel.getChannel());
+					
+					for(int tcAux = (tc + 1) ; tcAux < this.tempChannels.size() ; tcAux ++ ){
+						TempChannel tempChannelAux = (TempChannel)this.tempChannels.get( tcAux );
+						if( tempChannel.getTrack() == tempChannelAux.getTrack() ){
+							if( gmChannelRoute.getChannel2() == gmChannelRoute.getChannel1() ){
+								gmChannelRoute.setChannel2( tempChannelAux.getChannel() );
+							}else{
+								tempChannelAux.setTrack(-1);
+							}
+						}
+					}
+					
+					this.channelRouter.configureRoutes(gmChannelRoute, (tempChannel.getChannel() == 9));
+					this.channels.add( tgChannel );
+				}
+			}
+		}
+	}
+	
 	private void checkTracks(){
 		Iterator it = this.tracks.iterator();
 		while(it.hasNext()){
 			TGTrack track = (TGTrack)it.next();
+			TGChannel trackChannel = null;
+			
 			Iterator tcIt = this.tempChannels.iterator();
 			while(tcIt.hasNext()){
 				TempChannel tempChannel = (TempChannel)tcIt.next();
-				if(tempChannel.getTrack() == track.getNumber()){
-					if(track.getChannel().getChannel() < 0){
-						track.getChannel().setChannel((short)tempChannel.getChannel());
-						track.getChannel().setInstrument((short)tempChannel.getInstrument());
-						track.getChannel().setVolume((short)tempChannel.getVolume());
-						track.getChannel().setBalance((short)tempChannel.getBalance());
-					}else if(track.getChannel().getEffectChannel() < 0){
-						track.getChannel().setEffectChannel((short)tempChannel.getChannel());
+				if( tempChannel.getTrack() == track.getNumber() ){
+					Iterator channelIt = this.channels.iterator();
+					while( channelIt.hasNext() ){
+						TGChannel tgChannel = (TGChannel)channelIt.next();
+						GMChannelRoute gmChannelRoute = this.channelRouter.getRoute(tgChannel.getChannelId());
+						if( gmChannelRoute != null && tempChannel.getChannel() == gmChannelRoute.getChannel1() ){
+							trackChannel = tgChannel;
+						}
 					}
 				}
 			}
-			if(track.getChannel().getChannel() < 0){
-				track.getChannel().setChannel((short)(TGSongManager.MAX_CHANNELS - 1));
-				track.getChannel().setInstrument((short)0);
-				track.getChannel().setVolume((short)127);
-				track.getChannel().setBalance((short)64);
+			if( trackChannel != null ){
+				track.setChannelId( trackChannel.getChannelId() );
 			}
-			if(track.getChannel().getEffectChannel() < 0){
-				track.getChannel().setEffectChannel(track.getChannel().getChannel());
-			}
-			
-			if(!track.isPercussionTrack()){
-				track.setStrings(getTrackTuningHelper(track.getNumber()).getStrings());
-			}else{
+			if( trackChannel != null && trackChannel.isPercussionChannel() ){
 				track.setStrings(TGSongManager.createPercussionStrings(this.factory,6));
+			}else{
+				track.setStrings(getTrackTuningHelper(track.getNumber()).getStrings());
 			}
 		}
 	}
@@ -485,34 +533,17 @@ public class MidiSongImporter implements TGLocalFileImporter{
 			return this.channel;
 		}
 		
-		public void setChannel(int channel) {
-			this.channel = channel;
-		}
-		
 		public long getTick() {
 			return this.tick;
 		}
 		
-		public void setTick(long tick) {
-			this.tick = tick;
-		}
-		
 		public int getTrack() {
 			return this.track;
 		}
 		
-		public void setTrack(int track) {
-			this.track = track;
-		}
-		
 		public int getValue() {
 			return this.value;
 		}
-		
-		public void setValue(int value) {
-			this.value = value;
-		}
-		
 	}
 	
 	private class TempChannel{
@@ -542,10 +573,6 @@ public class MidiSongImporter implements TGLocalFileImporter{
 			return this.channel;
 		}
 		
-		public void setChannel(int channel) {
-			this.channel = channel;
-		}
-		
 		public int getInstrument() {
 			return this.instrument;
 		}
@@ -652,14 +679,6 @@ public class MidiSongImporter implements TGLocalFileImporter{
 			return strings;
 		}
 		
-		public int getMaxValue() {
-			return this.maxValue;
-		}
-		
-		public int getMinValue() {
-			return this.minValue;
-		}
-		
 		public int getTrack() {
 			return this.track;
 		}
diff --git a/TuxGuitar-musicxml/GNUmakefile b/TuxGuitar-musicxml/GNUmakefile
deleted file mode 100644
index 8adbb2f..0000000
--- a/TuxGuitar-musicxml/GNUmakefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:12 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-musicxml
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.io.musicxml.MusicXMLPluginExporter
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:12 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-musicxml/build.properties b/TuxGuitar-musicxml/build.properties
index 519fcc3..b325829 100644
--- a/TuxGuitar-musicxml/build.properties
+++ b/TuxGuitar-musicxml/build.properties
@@ -4,4 +4,7 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
+path.swt=../TuxGuitar/lib/swt.jar
\ No newline at end of file
diff --git a/TuxGuitar-musicxml/build.xml b/TuxGuitar-musicxml/build.xml
index dfbd7f3..ce5b748 100644
--- a/TuxGuitar-musicxml/build.xml
+++ b/TuxGuitar-musicxml/build.xml
@@ -7,13 +7,13 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-musicxml.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.musicxml.MusicXMLPluginExporter" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -32,8 +32,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
diff --git a/TuxGuitar-musicxml/pom.xml b/TuxGuitar-musicxml/pom.xml
new file mode 100644
index 0000000..9c877c4
--- /dev/null
+++ b/TuxGuitar-musicxml/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-musicxml</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-musicxml/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-musicxml/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..d482e82
--- /dev/null
+++ b/TuxGuitar-musicxml/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.io.musicxml.MusicXMLPluginExporter
diff --git a/TuxGuitar-musicxml/share/META-INF/tuxguitar-musicxml.info b/TuxGuitar-musicxml/share/META-INF/tuxguitar-musicxml.info
new file mode 100644
index 0000000..8d42ec5
--- /dev/null
+++ b/TuxGuitar-musicxml/share/META-INF/tuxguitar-musicxml.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=MusicXML exporter
+plugin.description=MusicXML exporter plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLPluginExporter.java b/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLPluginExporter.java
index b3c0b50..45c5e84 100644
--- a/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLPluginExporter.java
+++ b/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLPluginExporter.java
@@ -1,27 +1,17 @@
 package org.herac.tuxguitar.io.musicxml;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin;
 import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
 
 public class MusicXMLPluginExporter extends TGExporterPlugin{
 	
+	public static final String MODULE_ID = "tuxguitar-musicxml";
+	
 	protected TGRawExporter getExporter() {
 		return new MusicXMLSongExporter();
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "MusicXML exporter plugin";
-	}
-	
-	public String getName() {
-		return "MusicXML exporter";
-	}
-	
-	public String getVersion() {
-		return "1.0";
+	public String getModuleId(){
+		return MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLWriter.java b/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLWriter.java
index dd16ac4..57d06ca 100644
--- a/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLWriter.java
+++ b/TuxGuitar-musicxml/src/org/herac/tuxguitar/io/musicxml/MusicXMLWriter.java
@@ -13,11 +13,15 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamResult;
 
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.gm.GMChannelRouter;
+import org.herac.tuxguitar.gm.GMChannelRouterConfigurator;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
-import org.herac.tuxguitar.player.base.MidiInstrument;
 import org.herac.tuxguitar.song.factory.TGFactory;
 import org.herac.tuxguitar.song.managers.TGSongManager;
 import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGDivisionType;
 import org.herac.tuxguitar.song.models.TGDuration;
 import org.herac.tuxguitar.song.models.TGMeasure;
 import org.herac.tuxguitar.song.models.TGNote;
@@ -26,7 +30,6 @@ import org.herac.tuxguitar.song.models.TGString;
 import org.herac.tuxguitar.song.models.TGTempo;
 import org.herac.tuxguitar.song.models.TGTimeSignature;
 import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGDivisionType;
 import org.herac.tuxguitar.song.models.TGVoice;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
@@ -107,21 +110,30 @@ public class MusicXMLWriter {
 	private void writePartList(Node parent){
 		Node partList = this.addNode(parent,"part-list");
 		
+		GMChannelRouter gmChannelRouter = new GMChannelRouter();
+		GMChannelRouterConfigurator gmChannelRouterConfigurator = new GMChannelRouterConfigurator(gmChannelRouter);
+		gmChannelRouterConfigurator.configureRouter(this.manager.getSong().getChannels());
+		
 		Iterator tracks = this.manager.getSong().getTracks();
 		while(tracks.hasNext()){
 			TGTrack track = (TGTrack)tracks.next();
+			TGChannel channel = this.manager.getChannel(track.getChannelId());
 			
 			Node scoreParts = this.addNode(partList,"score-part");
 			this.addAttribute(scoreParts, "id", "P" + track.getNumber());
 			
 			this.addNode(scoreParts, "part-name", track.getName());
 			
-			Node scoreInstrument = this.addAttribute(this.addNode(scoreParts, "score-instrument"), "id", "P" + track.getNumber() + "-I1");
-			this.addNode(scoreInstrument, "instrument-name",MidiInstrument.INSTRUMENT_LIST[track.getChannel().getInstrument()].getName());
+			if( channel != null ){
+				GMChannelRoute gmChannelRoute = gmChannelRouter.getRoute(channel.getChannelId());
+				
+				Node scoreInstrument = this.addAttribute(this.addNode(scoreParts, "score-instrument"), "id", "P" + track.getNumber() + "-I1");
+				this.addNode(scoreInstrument, "instrument-name",channel.getName());
 			
-			Node midiInstrument = this.addAttribute(this.addNode(scoreParts, "midi-instrument"), "id", "P" + track.getNumber() + "-I1");
-			this.addNode(midiInstrument, "midi-channel",Integer.toString(track.getChannel().getChannel() + 1));
-			this.addNode(midiInstrument, "midi-program",Integer.toString(track.getChannel().getInstrument() + 1));
+				Node midiInstrument = this.addAttribute(this.addNode(scoreParts, "midi-instrument"), "id", "P" + track.getNumber() + "-I1");
+				this.addNode(midiInstrument, "midi-channel",Integer.toString(gmChannelRoute != null ? gmChannelRoute.getChannel1() + 1 : 16));
+				this.addNode(midiInstrument, "midi-program",Integer.toString(channel.getProgram() + 1));
+			}
 		}
 	}
 	
diff --git a/TuxGuitar-oss/GNUmakefile b/TuxGuitar-oss/GNUmakefile
deleted file mode 100644
index 6e9ab57..0000000
--- a/TuxGuitar-oss/GNUmakefile
+++ /dev/null
@@ -1,92 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.7 2008/02/26 15:24:15 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-oss
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_JNI?=lib$(PACKAGE)-jni.so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.player.impl.midiport.oss.MidiOutputPortProviderPlugin
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI)
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-JAVA_SOURCE_PATH?=./src/
-JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java")
-JAVA_OBJECTS?=$(PACKAGE).o
-JNI_SOURCE_PATH?=./jni/
-JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c")
-JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o)
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(JAVA_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-CC=gcc
-CFLAGS=-fPIC -I $(shell $(GCJ) -print-file-name=include/)
-
-default: all
-
-all: objects library library_jni meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(JAVA_OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-library_jni: $(LIBRARY_JNI)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-%.o: %.c
-	$(CC) $(CFLAGS) -c -o $(@F) $<
-
-$(PACKAGE).o: $(JAVA_SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(JAVA_OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-$(LIBRARY_JNI): $(JNI_OBJECTS)
-	$(GCJ) -shared -o $@ $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.7 2008/02/26 15:24:15 akdmia Exp $"
diff --git a/TuxGuitar-oss/build.properties b/TuxGuitar-oss/build.properties
index dba8bef..b325829 100644
--- a/TuxGuitar-oss/build.properties
+++ b/TuxGuitar-oss/build.properties
@@ -4,5 +4,7 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
-path.swt=../TuxGuitar/lib/swt.jar
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
+path.swt=../TuxGuitar/lib/swt.jar
\ No newline at end of file
diff --git a/TuxGuitar-oss/build.xml b/TuxGuitar-oss/build.xml
index b33d26d..42a72b8 100644
--- a/TuxGuitar-oss/build.xml
+++ b/TuxGuitar-oss/build.xml
@@ -7,15 +7,15 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-oss.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.player.impl.midiport.oss.MidiOutputPortProviderPlugin" />
-	
 	<path id="class.path">
 		<pathelement location="${path.swt}"/>
 		<pathelement location="${path.tuxguitar}"/>
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 	</path >
 	
 	<target name="init" depends="clean">
@@ -38,8 +38,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+--------------------------------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   T U X G U I T A R  -  O S S             |</echo>
diff --git a/TuxGuitar-oss/jni/GNUmakefile b/TuxGuitar-oss/jni/GNUmakefile
index 248465d..942d914 100644
--- a/TuxGuitar-oss/jni/GNUmakefile
+++ b/TuxGuitar-oss/jni/GNUmakefile
@@ -1,13 +1,12 @@
-CFLAGS?=-I$(shell gcj -print-file-name=include/)
-CFLAGS+=-fPIC
+CFLAGS?=-I$(shell gcj -print-file-name=include/) -fPIC
 LDFLAGS?=
 LDLIBS?=
 LDPATH?=
-LIBRARY_PREFIX?=lib
 LIBRARY_NAME?=tuxguitar-oss-jni
-LIBRARY_EXTENSION?=.so
+LIBRARY_PREFIX?=lib
+LIBRARY_SUFFIX?=.so
 
-LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION)
+LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_SUFFIX)
 OBJECTS=org_herac_tuxguitar_player_impl_midiport_oss_MidiSystem.o
 
 %.o: %.c
diff --git a/TuxGuitar-oss/pom.xml b/TuxGuitar-oss/pom.xml
new file mode 100644
index 0000000..205b6f8
--- /dev/null
+++ b/TuxGuitar-oss/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-oss</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+	
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-oss/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-oss/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..d3e0074
--- /dev/null
+++ b/TuxGuitar-oss/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,2 @@
+org.herac.tuxguitar.player.impl.midiport.oss.MidiOutputPortProviderPlugin
+org.herac.tuxguitar.player.impl.midiport.oss.MidiSettingsPlugin
diff --git a/TuxGuitar-oss/share/META-INF/tuxguitar-oss.info b/TuxGuitar-oss/share/META-INF/tuxguitar-oss.info
new file mode 100644
index 0000000..712d002
--- /dev/null
+++ b/TuxGuitar-oss/share/META-INF/tuxguitar-oss.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=OSS output plugin
+plugin.description=OSS output plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiConfigUtils.java b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiConfigUtils.java
index 53689b3..68079dd 100644
--- a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiConfigUtils.java
+++ b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiConfigUtils.java
@@ -11,10 +11,9 @@ import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginConfigManager;
-import org.herac.tuxguitar.gui.util.DialogUtils;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
 
 public class MidiConfigUtils {
 	
@@ -23,9 +22,7 @@ public class MidiConfigUtils {
 	public static final String DEVICE_DEFAULT = "/dev/sequencer";
 	
 	public static TGConfigManager getConfig(){
-		TGConfigManager config = new TGPluginConfigManager("tuxguitar-oss");
-		config.init();
-		return config;
+		return new TGConfigManager("tuxguitar-oss");
 	}
 	
 	public static String getDevice(){
@@ -33,7 +30,7 @@ public class MidiConfigUtils {
 	}
 	
 	public static String getDevice(final TGConfigManager config){
-		return config.getStringConfigValue(DEVICE_KEY,DEVICE_DEFAULT);
+		return config.getStringValue(DEVICE_KEY,DEVICE_DEFAULT);
 	}
 	
 	public static void setupDialog(Shell parent,final MidiOutputPortProviderImpl provider) {
@@ -80,9 +77,9 @@ public class MidiConfigUtils {
 				String value2 = (selection == null ? new String() : selection);
 				if(!value1.equals(value2)){
 					if(selection != null){
-						config.setProperty(DEVICE_KEY,selection);
+						config.setValue(DEVICE_KEY,selection);
 					}else{
-						config.removeProperty(DEVICE_KEY);
+						config.remove(DEVICE_KEY);
 					}
 					config.save();
 					provider.updateDevice(selection);
diff --git a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortImpl.java b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortImpl.java
index 1f43b08..736243b 100644
--- a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortImpl.java
+++ b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.oss;
 
-import org.herac.tuxguitar.player.base.MidiOutputPort;
-import org.herac.tuxguitar.player.base.MidiReceiver;
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
 
-public class MidiOutputPortImpl implements MidiOutputPort{
+public class MidiOutputPortImpl extends GMOutputPort{
 	
 	private int device;
 	private String name;
@@ -25,7 +25,7 @@ public class MidiOutputPortImpl implements MidiOutputPort{
 		this.receiver.disconnect();
 	}
 	
-	public MidiReceiver getReceiver(){
+	public GMReceiver getReceiver(){
 		this.open();
 		return this.receiver;
 	}
diff --git a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortProviderPlugin.java b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortProviderPlugin.java
index 235843c..284f4db 100644
--- a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortProviderPlugin.java
+++ b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiOutputPortProviderPlugin.java
@@ -1,38 +1,20 @@
 package org.herac.tuxguitar.player.impl.midiport.oss;
 
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup;
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin;
 import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.plugin.TGMidiOutputPortProviderPlugin;
 
-public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin implements TGPluginSetup{
+public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin {
 	
 	private MidiOutputPortProviderImpl portReader;
 	
-	protected MidiOutputPortProvider getProvider() {
-		if(this.portReader == null){
+	public MidiOutputPortProvider getProvider() {
+		if( this.portReader == null ){
 			this.portReader = new MidiOutputPortProviderImpl();
 		}
 		return this.portReader;
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "OSS output plugin";
-	}
-	
-	public String getName() {
-		return "OSS output plugin";
-	}
-	
-	public String getVersion() {
-		return "1.0";
-	}
-	
-	public void setupDialog(Shell parent) {
-		MidiConfigUtils.setupDialog(parent,(MidiOutputPortProviderImpl)getProvider());
+	public String getModuleId() {
+		return MidiPlugin.MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiPlugin.java b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiPlugin.java
new file mode 100644
index 0000000..49fab52
--- /dev/null
+++ b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiPlugin.java
@@ -0,0 +1,6 @@
+package org.herac.tuxguitar.player.impl.midiport.oss;
+
+public class MidiPlugin {
+
+	public static final String MODULE_ID = "tuxguitar-oss";
+}
diff --git a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiReceiverImpl.java b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiReceiverImpl.java
index b8c2d93..65aa190 100644
--- a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiReceiverImpl.java
+++ b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiReceiverImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.oss;
 
+import org.herac.tuxguitar.gm.port.GMReceiver;
 import org.herac.tuxguitar.player.base.MidiControllers;
-import org.herac.tuxguitar.player.base.MidiReceiver;
 
-public class MidiReceiverImpl implements MidiReceiver{
+public class MidiReceiverImpl implements GMReceiver{
 	
 	private boolean connected;
 	private MidiOutputPortImpl midiPort;
diff --git a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiSettingsHandler.java b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiSettingsHandler.java
new file mode 100644
index 0000000..70fefce
--- /dev/null
+++ b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiSettingsHandler.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.player.impl.midiport.oss;
+
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+
+public class MidiSettingsHandler implements TGPluginSettingsHandler {
+	
+	private MidiSettingsPlugin midiSettingsPlugin;
+	
+	public MidiSettingsHandler(MidiSettingsPlugin midiSettingsPlugin){
+		this.midiSettingsPlugin = midiSettingsPlugin;
+	}
+	
+	public void openSettingsDialog(Shell parent) {
+		MidiConfigUtils.setupDialog(parent, this.midiSettingsPlugin.findMidiOutputPortProvider());
+	}
+}
diff --git a/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiSettingsPlugin.java b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiSettingsPlugin.java
new file mode 100644
index 0000000..787be95
--- /dev/null
+++ b/TuxGuitar-oss/src/org/herac/tuxguitar/player/impl/midiport/oss/MidiSettingsPlugin.java
@@ -0,0 +1,35 @@
+package org.herac.tuxguitar.player.impl.midiport.oss;
+
+import java.util.List;
+
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsAdapter;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsHandler;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+import org.herac.tuxguitar.util.plugin.TGPluginManager;
+
+public class MidiSettingsPlugin extends TGPluginSettingsAdapter {
+
+	protected TGPluginSettingsHandler getHandler() throws TGPluginException {
+		return new MidiSettingsHandler(this);
+	}
+	
+	public String getModuleId() {
+		return MidiPlugin.MODULE_ID;
+	}
+	
+	public MidiOutputPortProviderImpl findMidiOutputPortProvider(){
+		MidiOutputPortProviderPlugin plugin = findMidiOutputPortProviderPlugin();
+		if( plugin != null ){
+			return (MidiOutputPortProviderImpl) plugin.getProvider();
+		}
+		return null;
+	}
+	
+	private MidiOutputPortProviderPlugin findMidiOutputPortProviderPlugin(){
+		List pluginInstances = TGPluginManager.getInstance().getPluginInstances(MidiOutputPortProviderPlugin.class);
+		if( pluginInstances != null && !pluginInstances.isEmpty() ){
+			return ((MidiOutputPortProviderPlugin)pluginInstances.get(0));
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-pdf/build.properties b/TuxGuitar-pdf/build.properties
index 57df7bd..f6c0c0d 100644
--- a/TuxGuitar-pdf/build.properties
+++ b/TuxGuitar-pdf/build.properties
@@ -4,6 +4,8 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
 path.itext=../TuxGuitar/lib/itext.jar
 path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-pdf/build.xml b/TuxGuitar-pdf/build.xml
index b5a50af..c5bd25c 100644
--- a/TuxGuitar-pdf/build.xml
+++ b/TuxGuitar-pdf/build.xml
@@ -7,16 +7,16 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-pdf.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.pdf.PDFPluginExporter" />
-	
 	<path id="class.path">
 		<pathelement location="${path.itext}"/>
 		<pathelement location="${path.swt}"/>
 		<pathelement location="${path.tuxguitar}"/>
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 	</path >
 	
 	<target name="init" depends="clean">
@@ -33,8 +33,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
diff --git a/TuxGuitar-pdf/pom.xml b/TuxGuitar-pdf/pom.xml
new file mode 100644
index 0000000..0268707
--- /dev/null
+++ b/TuxGuitar-pdf/pom.xml
@@ -0,0 +1,56 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-pdf</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>com.itextpdf</groupId>
+			<artifactId>itextpdf</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>com.itextpdf.tool</groupId>
+			<artifactId>xmlworker</artifactId>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-pdf/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-pdf/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..92ea254
--- /dev/null
+++ b/TuxGuitar-pdf/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.io.pdf.PDFPluginExporter
diff --git a/TuxGuitar-pdf/share/META-INF/tuxguitar-pdf.info b/TuxGuitar-pdf/share/META-INF/tuxguitar-pdf.info
new file mode 100644
index 0000000..d658cd0
--- /dev/null
+++ b/TuxGuitar-pdf/share/META-INF/tuxguitar-pdf.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=PDF file format exporter
+plugin.description=TuxGuitar-pdf is an \"iText\" based *.pdf exporter plugin.\niText Homepage: http://www.lowagie.com/iText/index.html
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFPluginExporter.java b/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFPluginExporter.java
index 773af31..d346919 100644
--- a/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFPluginExporter.java
+++ b/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFPluginExporter.java
@@ -1,30 +1,17 @@
 package org.herac.tuxguitar.io.pdf;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGExporterPlugin;
 import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
 
 public class PDFPluginExporter extends TGExporterPlugin{
 	
+	public static final String MODULE_ID = "tuxguitar-pdf";
+	
 	protected TGRawExporter getExporter() {
 		return new PDFSongExporter();
 	}
 	
-	public String getVersion() {
-		return "1.0";
-	}
-	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getName() {
-		return "PDF file format exporter";
-	}
-	
-	public String getDescription() {
-		String description = new String();
-		description += ("TuxGuitar-pdf is an \"iText\" based *.pdf exporter plugin.");
-		description += ("\niText Homepage: http://www.lowagie.com/iText/index.html");
-		return description;
+	public String getModuleId(){
+		return MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFSongExporter.java b/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFSongExporter.java
index 878dfe9..01b87cd 100644
--- a/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFSongExporter.java
+++ b/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFSongExporter.java
@@ -5,24 +5,26 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.TGFactoryImpl;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-import org.herac.tuxguitar.gui.editors.tab.layout.PrinterViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.printer.PrintDocument;
-import org.herac.tuxguitar.gui.printer.PrintStyles;
-import org.herac.tuxguitar.gui.printer.PrintStylesDialog;
-import org.herac.tuxguitar.gui.util.MessageDialog;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.editors.TGResourceFactoryImpl;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.printer.PrintController;
+import org.herac.tuxguitar.app.printer.PrintDocument;
+import org.herac.tuxguitar.app.printer.PrintLayout;
+import org.herac.tuxguitar.app.printer.PrintStyles;
+import org.herac.tuxguitar.app.printer.PrintStylesDialog;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.TGFactoryImpl;
+import org.herac.tuxguitar.graphics.control.TGLayout;
 import org.herac.tuxguitar.io.base.TGFileFormat;
 import org.herac.tuxguitar.io.base.TGLocalFileExporter;
 import org.herac.tuxguitar.song.factory.TGFactory;
 import org.herac.tuxguitar.song.managers.TGSongManager;
 import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.util.TGSynchronizer;
 
 public class PDFSongExporter implements TGLocalFileExporter{
 	
@@ -42,7 +44,7 @@ public class PDFSongExporter implements TGLocalFileExporter{
 	
 	public PrintStyles getDefaultStyles(TGSong song){
 		PrintStyles styles = new PrintStyles();
-		styles.setStyle(ViewLayout.DISPLAY_TABLATURE);
+		styles.setStyle(TGLayout.DISPLAY_TABLATURE);
 		styles.setFromMeasure(1);
 		styles.setToMeasure(song.countMeasureHeaders());
 		styles.setTrackNumber(1);
@@ -89,10 +91,10 @@ public class PDFSongExporter implements TGLocalFileExporter{
 		new SyncThread(new Runnable() {
 			public void run() {
 				try{
-					Tablature tablature = new Tablature(TuxGuitar.instance().getShell());
-					tablature.setSongManager(manager);
+					TGResourceFactory factory = new TGResourceFactoryImpl(TuxGuitar.instance().getDisplay());
 					
-					PrinterViewLayout layout = new PrinterViewLayout(tablature,data, 1f);
+					PrintController controller = new PrintController(manager, factory);
+					PrintLayout layout = new PrintLayout(controller,data);
 					
 					export(stream, layout);
 				}catch(Throwable throwable){
@@ -102,17 +104,13 @@ public class PDFSongExporter implements TGLocalFileExporter{
 		}).start();
 	}
 	
-	public void export(final OutputStream stream, final PrinterViewLayout layout){
+	public void export(final OutputStream stream, final PrintLayout layout){
 		new Thread(new Runnable() {
 			public void run() {
 				try{
-					layout.getTablature().updateTablature();
-					layout.makeDocument(new PrintDocumentImpl(layout,new Rectangle(0,0,PAGE_WIDTH,PAGE_HEIGHT), stream));
-					//new SyncThread(new Runnable() {
-					//	public void run() {
-					//		layout.makeDocument(new PrintDocumentImpl(layout,new Rectangle(0,0,PAGE_WIDTH,PAGE_HEIGHT), stream));
-					//	}
-					//}).start(); 
+					layout.loadStyles(1f);
+					layout.updateSong();
+					layout.makeDocument(new PrintDocumentImpl(new TGRectangle(0,0,PAGE_WIDTH,PAGE_HEIGHT), stream));
 				}catch(Throwable throwable){
 					MessageDialog.errorMessage(throwable);
 				}
@@ -122,18 +120,16 @@ public class PDFSongExporter implements TGLocalFileExporter{
 	
 	private class PrintDocumentImpl implements PrintDocument{
 		
-		private PrinterViewLayout layout;
-		private TGPainter painter;
-		private Rectangle bounds;
+		private TGPainterImpl painter;
+		private TGRectangle bounds;
 		private OutputStream stream;
 		private Image buffer;
 		private List pages;
 		
-		public PrintDocumentImpl(PrinterViewLayout layout, Rectangle bounds, OutputStream stream){
-			this.layout = layout;
+		public PrintDocumentImpl(TGRectangle bounds, OutputStream stream){
 			this.bounds = bounds;
 			this.stream = stream;
-			this.painter = new TGPainter();
+			this.painter = new TGPainterImpl();
 			this.pages = new ArrayList();
 		}
 		
@@ -141,12 +137,12 @@ public class PDFSongExporter implements TGLocalFileExporter{
 			return this.painter;
 		}
 		
-		public Rectangle getBounds(){
+		public TGRectangle getBounds(){
 			return this.bounds;
 		}
 		
 		public void pageStart() {
-			this.buffer = new Image(this.layout.getTablature().getDisplay(),this.bounds.width - this.bounds.x, this.bounds.height - this.bounds.y);
+			this.buffer = new Image(TuxGuitar.instance().getDisplay(),this.bounds.getWidth() - this.bounds.getX(), this.bounds.getHeight() - this.bounds.getY());
 			this.painter.init( this.buffer );
 		}
 		
@@ -161,23 +157,6 @@ public class PDFSongExporter implements TGLocalFileExporter{
 		}
 		
 		public void finish() {
-			try {
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-					public void run() {
-						dispose();
-					}
-				});
-			} catch (Throwable e) {
-				e.printStackTrace();
-			}
-			this.write();
-		}
-		
-		public boolean isPaintable(int page) {
-			return true;
-		}
-		
-		protected void write(){
 			try{
 				PDFWriter.write(this.stream,this.pages);
 			}catch(Throwable throwable){
@@ -185,8 +164,8 @@ public class PDFSongExporter implements TGLocalFileExporter{
 			}
 		}
 		
-		protected void dispose(){
-			this.layout.getTablature().dispose();
+		public boolean isPaintable(int page) {
+			return true;
 		}
 	}
 }
diff --git a/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFWriter.java b/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFWriter.java
index 2d8152e..ff0f3ba 100644
--- a/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFWriter.java
+++ b/TuxGuitar-pdf/src/org/herac/tuxguitar/io/pdf/PDFWriter.java
@@ -9,10 +9,10 @@ import org.eclipse.swt.graphics.PaletteData;
 import org.eclipse.swt.graphics.RGB;
 import org.herac.tuxguitar.io.base.TGFileFormatException;
 
-import com.lowagie.text.BadElementException;
-import com.lowagie.text.Document;
-import com.lowagie.text.Image;
-import com.lowagie.text.pdf.PdfWriter;
+import com.itextpdf.text.BadElementException;
+import com.itextpdf.text.Document;
+import com.itextpdf.text.Image;
+import com.itextpdf.text.pdf.PdfWriter;
 
 public class PDFWriter {
 	
diff --git a/TuxGuitar-ptb/GNUmakefile b/TuxGuitar-ptb/GNUmakefile
deleted file mode 100644
index 56b0a5d..0000000
--- a/TuxGuitar-ptb/GNUmakefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:16 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-ptb
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.io.ptb.PTInputStreamPlugin
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:24:16 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-ptb/build.properties b/TuxGuitar-ptb/build.properties
index 519fcc3..94080dc 100644
--- a/TuxGuitar-ptb/build.properties
+++ b/TuxGuitar-ptb/build.properties
@@ -4,4 +4,7 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
+path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-ptb/build.xml b/TuxGuitar-ptb/build.xml
index 645b3a3..9981690 100644
--- a/TuxGuitar-ptb/build.xml
+++ b/TuxGuitar-ptb/build.xml
@@ -7,13 +7,13 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-ptb.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.ptb.PTInputStreamPlugin" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -32,8 +32,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
diff --git a/TuxGuitar-ptb/pom.xml b/TuxGuitar-ptb/pom.xml
new file mode 100644
index 0000000..a6e614d
--- /dev/null
+++ b/TuxGuitar-ptb/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-ptb</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-ptb/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-ptb/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..af4e9bd
--- /dev/null
+++ b/TuxGuitar-ptb/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.io.ptb.PTInputStreamPlugin
diff --git a/TuxGuitar-ptb/share/META-INF/tuxguitar-ptb.info b/TuxGuitar-ptb/share/META-INF/tuxguitar-ptb.info
new file mode 100644
index 0000000..a51a920
--- /dev/null
+++ b/TuxGuitar-ptb/share/META-INF/tuxguitar-ptb.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=PTB File Format plugin
+plugin.description=PTB File Format plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStream.java b/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStream.java
index b7bb309..cf5cf15 100644
--- a/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStream.java
+++ b/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStream.java
@@ -4,6 +4,7 @@ import java.io.IOException;
 import java.io.InputStream;
 
 import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
 import org.herac.tuxguitar.io.base.TGInputStreamBase;
 import org.herac.tuxguitar.io.ptb.base.PTBar;
 import org.herac.tuxguitar.io.ptb.base.PTBeat;
@@ -64,18 +65,22 @@ public class PTInputStream implements TGInputStreamBase{
 		}
 	}
 	
-	public TGSong readSong() throws IOException{
-		this.readVersion();
-		if (!isSupportedVersion(this.version)) {
-			throw new IOException("Unsupported Version");
+	public TGSong readSong() throws TGFileFormatException{
+		try{
+			this.readVersion();
+			if (!isSupportedVersion(this.version)) {
+				throw new IOException("Unsupported Version");
+			}
+			this.song = new PTSong();
+			this.readSongInfo();
+			this.readDataInstruments(this.song.getTrack1());
+			this.readDataInstruments(this.song.getTrack2());
+			this.close();
+			
+			return this.parser.parseSong(this.song);
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
 		}
-		this.song = new PTSong();
-		this.readSongInfo();
-		this.readDataInstruments(this.song.getTrack1());
-		this.readDataInstruments(this.song.getTrack2());
-		this.close();
-		
-		return this.parser.parseSong(this.song);
 	}
 	
 	private void readSongInfo(){
diff --git a/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStreamPlugin.java b/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStreamPlugin.java
index 46cb136..4310387 100644
--- a/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStreamPlugin.java
+++ b/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTInputStreamPlugin.java
@@ -1,27 +1,17 @@
 package org.herac.tuxguitar.io.ptb;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGInputStreamPlugin;
 import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.io.plugin.TGInputStreamPlugin;
 
 public class PTInputStreamPlugin extends TGInputStreamPlugin{
 	
+	public static final String MODULE_ID = "tuxguitar-ptb";
+	
 	protected TGInputStreamBase getInputStream() {
 		return new PTInputStream();
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "PTB File Format plugin";
-	}
-	
-	public String getName() {
-		return "PTB File Format plugin";
-	}
-	
-	public String getVersion() {
-		return "1.0";
+	public String getModuleId(){
+		return MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTSongParser.java b/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTSongParser.java
index f89b547..66bf083 100644
--- a/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTSongParser.java
+++ b/TuxGuitar-ptb/src/org/herac/tuxguitar/io/ptb/PTSongParser.java
@@ -18,6 +18,7 @@ import org.herac.tuxguitar.io.ptb.helper.TrackHelper;
 import org.herac.tuxguitar.song.factory.TGFactory;
 import org.herac.tuxguitar.song.managers.TGSongManager;
 import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
 import org.herac.tuxguitar.song.models.TGDuration;
 import org.herac.tuxguitar.song.models.TGMeasure;
 import org.herac.tuxguitar.song.models.TGNote;
@@ -328,17 +329,20 @@ public class PTSongParser {
 	}
 	
 	private TGTrack createTrack(PTTrackInfo info){
-		TGTrack track = this.manager.createTrack();
+		TGTrack track = this.manager.addTrack();
 		this.helper.getInfoHelper().addStaffTrack( track );
 		this.setTrackInfo(track, info );
 		return track;
 	}
 	
 	private void setTrackInfo(TGTrack tgTrack , PTTrackInfo info){
+		TGChannel tgChannel = this.manager.addChannel();
+		tgChannel.setProgram((short) info.getInstrument() );
+		tgChannel.setVolume((short) info.getVolume() );
+		tgChannel.setBalance((short) info.getBalance() );
+		
 		tgTrack.setName( info.getName() );
-		tgTrack.getChannel().setInstrument((short) info.getInstrument() );
-		tgTrack.getChannel().setVolume((short) info.getVolume() );
-		tgTrack.getChannel().setBalance((short) info.getBalance() );
+		tgTrack.setChannelId(tgChannel.getChannelId());
 		tgTrack.getStrings().clear();
 		for(int i = 0; i < info.getStrings().length; i ++){
 			TGString string = this.manager.getFactory().newString();
@@ -349,16 +353,20 @@ public class PTSongParser {
 	}
 	
 	private boolean hasSameInfo(TGTrack track , PTTrackInfo info){
+		TGChannel tgChannel = this.manager.getChannel(track.getChannelId());
+		if( tgChannel == null ){
+			return false;
+		}
 		if( !info.getName().equals( track.getName() ) ){
 			return false;
 		}
-		if( info.getInstrument() != track.getChannel().getInstrument() ){
+		if( info.getInstrument() != tgChannel.getProgram() ){
 			return false;
 		}
-		if( info.getVolume() != track.getChannel().getVolume() ){
+		if( info.getVolume() != tgChannel.getVolume() ){
 			return false;
 		}
-		if( info.getBalance() != track.getChannel().getBalance() ){
+		if( info.getBalance() != tgChannel.getBalance() ){
 			return false;
 		}
 		if( info.getStrings().length != track.stringCount() ){
diff --git a/TuxGuitar-svg/build.properties b/TuxGuitar-svg/build.properties
new file mode 100644
index 0000000..717c2ef
--- /dev/null
+++ b/TuxGuitar-svg/build.properties
@@ -0,0 +1,9 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
+
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-svg/build.xml b/TuxGuitar-svg/build.xml
new file mode 100644
index 0000000..9a7bc6b
--- /dev/null
+++ b/TuxGuitar-svg/build.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-svg" basedir="." default="all">
+	<description>
+		TuxGuitar SVG Exporter
+	</description>
+	
+	<property file="build.properties" />
+	<property name="build.src.path" value="src${file.separator}" />
+	<property name="build.share.path" value="share${file.separator}" />
+	<property name="build.path" value="build${file.separator}" />
+	<property name="build.jar" value="tuxguitar-svg.jar" />
+	
+	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar}"/>
+		<pathelement location="${path.swt}"/>
+	</path >
+	
+	<target name="init" depends="clean">
+		<mkdir dir="${build.path}" />
+	</target>
+	
+	<target name="build" depends="init">
+		<echo>+-------------------------------------------------+</echo>
+		<echo>|          B U I L D I N G   P L U G I N          |</echo>
+		<echo>+-------------------------------------------------+</echo>
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<classpath refid="class.path"/>
+			<include name="**/*.java"/>
+		</javac>
+		
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
+		
+		<echo>+-----------------------------------------------+</echo>
+		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
+		<echo>+-----------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}" basedir="${build.path}" />
+		<delete quiet="true" dir="${build.path}" />
+	</target>
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
+<!-- eof "$Id: build.xml,v 1.5 2008/02/28 00:35:00 rzr Exp $" -->
diff --git a/TuxGuitar-svg/pom.xml b/TuxGuitar-svg/pom.xml
new file mode 100644
index 0000000..0230616
--- /dev/null
+++ b/TuxGuitar-svg/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-svg</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-svg/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-svg/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..98bca44
--- /dev/null
+++ b/TuxGuitar-svg/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1,2 @@
+# Add here the TGPlugin implementation class names.
+org.herac.tuxguitar.io.svg.SVGExporterPlugin
diff --git a/TuxGuitar-svg/share/META-INF/tuxguitar-svg.info b/TuxGuitar-svg/share/META-INF/tuxguitar-svg.info
new file mode 100644
index 0000000..3b27b6f
--- /dev/null
+++ b/TuxGuitar-svg/share/META-INF/tuxguitar-svg.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=SVG exporter
+plugin.description=SVG exporter plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGColor.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGColor.java
new file mode 100644
index 0000000..46ff4cf
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGColor.java
@@ -0,0 +1,49 @@
+package org.herac.tuxguitar.io.svg;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGColorModel;
+
+public class SVGColor implements TGColor{
+	
+	private TGColorModel handle;
+	
+	public SVGColor(int red, int green, int blue){
+		this.handle = new TGColorModel(red, green, blue);
+	}
+	
+	public void dispose() {
+		this.handle = null;
+	}
+	
+	public boolean isDisposed() {
+		return (this.handle == null);
+	}
+	
+	public TGColorModel getHandle(){
+		return this.handle;
+	}
+	
+	public int getRed() {
+		return this.handle.getRed();
+	}
+	
+	public int getGreen() {
+		return this.handle.getGreen();
+	}
+	
+	public int getBlue() {
+		return this.handle.getBlue();
+	}
+	
+	public String toHexString(){
+		return ("#" + getHexValue(getRed()) + getHexValue(getGreen()) + getHexValue(getBlue()));
+	}
+	
+	private String getHexValue( int value ){
+		String hexValue =  Integer.toHexString( value );
+		while( hexValue.length() < 2 ){
+			hexValue = ("0" + hexValue);
+		}
+		return hexValue;
+	}
+}
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGController.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGController.java
new file mode 100644
index 0000000..ec1414f
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGController.java
@@ -0,0 +1,140 @@
+package org.herac.tuxguitar.io.svg;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.TGController;
+import org.herac.tuxguitar.graphics.control.TGFactoryImpl;
+import org.herac.tuxguitar.graphics.control.TGLayoutStyles;
+import org.herac.tuxguitar.graphics.control.TGLayoutVertical;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class SVGController implements TGController {
+	
+	private SVGExporterStyles tgStyles;
+	
+	private TGSongManager tgSongManager;
+	private TGResourceFactory tgResourceFactory;
+	private TGLayoutVertical tgLayout;
+	
+	public SVGController(SVGExporterStyles tgStyles){
+		this.tgStyles = tgStyles;
+		this.tgSongManager = new TGSongManager();
+		this.tgSongManager.setFactory( new TGFactoryImpl() );
+		this.tgResourceFactory = new SVGResourceFactory();
+		this.tgLayout = new TGLayoutVertical(this, this.tgStyles.getFlags() );
+	}
+	
+	public TGSongManager getSongManager() {
+		return this.tgSongManager;
+	}
+	
+	public TGResourceFactory getResourceFactory() {
+		return this.tgResourceFactory;
+	}
+	
+	public void load(TGSong song) throws TGFileFormatException {
+		this.tgSongManager.setSong(song);
+		this.tgLayout.loadStyles();
+		this.tgLayout.updateSong();
+	}
+	
+	public void write(StringBuffer svgBuffer) throws Throwable {		
+		if( this.tgSongManager.getSong() != null ){
+			// Do a paint to calculate the document height.
+			TGRectangle svgBounds = new TGRectangle(0, 0, 960, 0 );
+			TGPainter svgPainter = new SVGPainter(new StringBuffer());
+			this.tgLayout.paint(svgPainter, svgBounds, 0, 0);
+			svgBounds.setHeight(this.tgLayout.getHeight());
+			
+			// Start of SVG document
+			svgBuffer.append("<svg width=\"" + svgBounds.getWidth() + "px\" height=\"" + svgBounds.getHeight() + "px\" xmlns=\"http://www.w3.org/2000/svg\" version=\"1.1\">");
+			svgBuffer.append("\r\n");
+			
+			// Open the painter
+			svgPainter = new SVGPainter(svgBuffer);
+			
+			// Fill the background.
+			TGColor svgBackground = svgPainter.createColor(this.tgStyles.getStyles().getBackgroundColor());
+			svgPainter.setBackground(svgBackground);
+			svgPainter.initPath(TGPainter.PATH_FILL);
+			svgPainter.addRectangle(0, 0, svgBounds.getWidth(), svgBounds.getHeight());
+			svgPainter.closePath();
+			svgBackground.dispose();
+			
+			// Paint the TGSong
+			this.tgLayout.paint(svgPainter, svgBounds, 0, 0);
+			
+			// Closes the painter
+			svgPainter.dispose();
+			
+			// End of SVG document
+			svgBuffer.append("\r\n");
+			svgBuffer.append("</svg>");
+		}
+	}
+	
+	public void configureStyles(TGLayoutStyles styles) {
+		styles.setBufferEnabled( false );
+		styles.setStringSpacing( this.tgStyles.getStyles().getStringSpacing() );
+		styles.setScoreLineSpacing( this.tgStyles.getStyles().getScoreLineSpacing() );
+		styles.setFirstMeasureSpacing( this.tgStyles.getStyles().getFirstMeasureSpacing() );
+		styles.setMinBufferSeparator( this.tgStyles.getStyles().getMinBufferSeparator() );
+		styles.setMinTopSpacing( this.tgStyles.getStyles().getMinTopSpacing() );
+		styles.setMinScoreTabSpacing( this.tgStyles.getStyles().getMinScoreTabSpacing() );
+		styles.setFirstTrackSpacing( this.tgStyles.getStyles().getFirstTrackSpacing() );
+		styles.setTrackSpacing( this.tgStyles.getStyles().getTrackSpacing() );
+		styles.setChordFretIndexSpacing( this.tgStyles.getStyles().getChordFretIndexSpacing() );
+		styles.setChordStringSpacing( this.tgStyles.getStyles().getChordStringSpacing() );
+		styles.setChordFretSpacing( this.tgStyles.getStyles().getChordFretSpacing() );
+		styles.setChordNoteSize( this.tgStyles.getStyles().getChordNoteSize() );
+		styles.setRepeatEndingSpacing( this.tgStyles.getStyles().getRepeatEndingSpacing() );
+		styles.setTextSpacing( this.tgStyles.getStyles().getTextSpacing() );
+		styles.setMarkerSpacing( this.tgStyles.getStyles().getMarkerSpacing() );
+		styles.setLoopMarkerSpacing( this.tgStyles.getStyles().getLoopMarkerSpacing() );
+		styles.setDivisionTypeSpacing( this.tgStyles.getStyles().getDivisionTypeSpacing() );
+		styles.setEffectSpacing( this.tgStyles.getStyles().getEffectSpacing() );
+		styles.setDefaultFont( this.tgStyles.getStyles().getDefaultFont());
+		styles.setNoteFont( this.tgStyles.getStyles().getNoteFont());
+		styles.setTimeSignatureFont( this.tgStyles.getStyles().getTimeSignatureFont());
+		styles.setLyricFont( this.tgStyles.getStyles().getLyricFont() );
+		styles.setTextFont( this.tgStyles.getStyles().getTextFont() );
+		styles.setMarkerFont( this.tgStyles.getStyles().getMarkerFont() );
+		styles.setGraceFont( this.tgStyles.getStyles().getGraceFont());
+		styles.setChordFont( this.tgStyles.getStyles().getChordFont() );
+		styles.setChordFretFont( this.tgStyles.getStyles().getChordFretFont());
+		styles.setBackgroundColor( this.tgStyles.getStyles().getBackgroundColor());
+		styles.setLineColor( this.tgStyles.getStyles().getLineColor());
+		styles.setScoreNoteColor( this.tgStyles.getStyles().getScoreNoteColor());
+		styles.setTabNoteColor( this.tgStyles.getStyles().getTabNoteColor());
+		styles.setPlayNoteColor( this.tgStyles.getStyles().getPlayNoteColor());
+		styles.setLoopSMarkerColor( this.tgStyles.getStyles().getLoopSMarkerColor());
+		styles.setLoopEMarkerColor( this.tgStyles.getStyles().getLoopEMarkerColor());
+	}
+	
+	public int getTrackSelection() {
+		return this.tgStyles.getTrack();
+	}
+	
+	public boolean isRunning(TGBeat beat) {
+		return false;
+	}
+	
+	public boolean isRunning(TGMeasure measure) {
+		return false;
+	}
+	
+	public boolean isLoopSHeader(TGMeasureHeader measureHeader) {
+		return false;
+	}
+	
+	public boolean isLoopEHeader(TGMeasureHeader measureHeader) {
+		return false;
+	}
+}
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporter.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporter.java
new file mode 100644
index 0000000..fbfad29
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporter.java
@@ -0,0 +1,60 @@
+package org.herac.tuxguitar.io.svg;
+
+import java.io.OutputStream;
+import java.io.PrintWriter;
+
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGLocalFileExporter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class SVGExporter implements TGLocalFileExporter {
+	
+	private OutputStream stream;
+	private SVGExporterStyles styles;
+	
+	public SVGExporter(SVGExporterStyles styles){
+		this.styles = styles;
+	}
+	
+	public String getExportName() {
+		return "SVG";
+	}
+	
+	public TGFileFormat getFileFormat() {
+		return new TGFileFormat("Scalable Vector Graphics","*.svg");
+	}
+	
+	public boolean configure(boolean setDefaults) {
+		if( setDefaults ){
+			this.styles.configureWithDefaults();
+		}else{
+			this.styles.configure();
+		}
+		return this.styles.isConfigured();
+	}
+	
+	public void init(TGFactory factory, OutputStream stream) {
+		this.stream = stream;
+	}
+	
+	public void exportSong(TGSong song) throws TGFileFormatException {
+		try {
+			if( this.styles.isConfigured() ){
+				StringBuffer svgBuffer = new StringBuffer();
+				
+				SVGController svgController = new SVGController(this.styles);
+				svgController.load(song.clone(svgController.getSongManager().getFactory()));
+				svgController.write(svgBuffer);
+				
+				PrintWriter svgWriter = new PrintWriter(this.stream);
+				svgWriter.write( svgBuffer.toString() );
+				svgWriter.flush();
+				svgWriter.close();
+			}
+		} catch( Throwable throwable ){
+			throw new TGFileFormatException(throwable);
+		}
+	}
+}
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporterPlugin.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporterPlugin.java
new file mode 100644
index 0000000..cce50c4
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporterPlugin.java
@@ -0,0 +1,18 @@
+package org.herac.tuxguitar.io.svg;
+
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.plugin.TGExporterPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public class SVGExporterPlugin extends TGExporterPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-svg";
+	
+	protected TGRawExporter getExporter() throws TGPluginException {
+		return new SVGExporter(new SVGExporterStylesDialog());
+	}
+	
+	public String getModuleId(){
+		return MODULE_ID;
+	}
+}
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporterStyles.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporterStyles.java
new file mode 100644
index 0000000..2cf96b0
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporterStyles.java
@@ -0,0 +1,106 @@
+package org.herac.tuxguitar.io.svg;
+
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFontModel;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.graphics.control.TGLayoutStyles;
+
+public class SVGExporterStyles {
+	
+	private int track;
+	private int flags;
+	private TGLayoutStyles styles;
+	
+	private boolean configured;
+	
+	public SVGExporterStyles(){
+		this.track = -1;
+		this.flags = 0;
+		this.styles = new TGLayoutStyles();
+		this.configured = false;
+	}
+	
+	public boolean isConfigured() {
+		return this.configured;
+	}
+	
+	public void setConfigured(boolean configured) {
+		this.configured = configured;
+	}
+	
+	public int getTrack() {
+		return this.track;
+	}
+	
+	public void setTrack(int track) {
+		this.track = track;
+	}
+	
+	public void setFlags(int flags){
+		this.flags = flags;
+	}
+	
+	public int getFlags(){
+		return this.flags;
+	}
+	
+	public TGLayoutStyles getStyles(){
+		return this.styles;
+	}
+	
+	public void configure() {
+		this.configureWithDefaults();
+	}
+	
+	public void configureWithDefaults(){
+		this.setTrack( -1 );
+		
+		this.setFlags( 0 );
+		this.setFlags( this.getFlags() | TGLayout.DISPLAY_SCORE );
+		this.setFlags( this.getFlags() | TGLayout.DISPLAY_TABLATURE );
+		this.setFlags( this.getFlags() | TGLayout.DISPLAY_MULTITRACK );
+		this.setFlags( this.getFlags() | TGLayout.DISPLAY_COMPACT );
+		this.setFlags( this.getFlags() | TGLayout.DISPLAY_CHORD_NAME );
+		this.setFlags( this.getFlags() | TGLayout.DISPLAY_CHORD_DIAGRAM );
+		
+		this.getStyles().setBufferEnabled(true);
+		this.getStyles().setStringSpacing(10);
+		this.getStyles().setScoreLineSpacing(8);
+		this.getStyles().setFirstMeasureSpacing(20);
+		this.getStyles().setMinBufferSeparator(20);
+		this.getStyles().setMinTopSpacing(30);
+		this.getStyles().setMinScoreTabSpacing(20);
+		this.getStyles().setFirstTrackSpacing(20);
+		this.getStyles().setTrackSpacing(10);
+		this.getStyles().setChordFretIndexSpacing(8);
+		this.getStyles().setChordStringSpacing(5);
+		this.getStyles().setChordFretSpacing(6);
+		this.getStyles().setChordNoteSize(4);
+		this.getStyles().setRepeatEndingSpacing(20);
+		this.getStyles().setTextSpacing(15);
+		this.getStyles().setMarkerSpacing(15);
+		this.getStyles().setLoopMarkerSpacing(5);
+		this.getStyles().setDivisionTypeSpacing(10);
+		this.getStyles().setEffectSpacing(8);
+		
+		this.getStyles().setDefaultFont(new TGFontModel("Default", 10, false, false) );
+		this.getStyles().setNoteFont(new TGFontModel("Default", 10, false, false) );
+		this.getStyles().setTimeSignatureFont(new TGFontModel("Default", 14, true, false) );
+		this.getStyles().setLyricFont(new TGFontModel("Default", 10, false, false) );
+		this.getStyles().setTextFont(new TGFontModel("Default", 10, false, false));
+		this.getStyles().setMarkerFont(new TGFontModel("Default", 10, false, false));
+		this.getStyles().setGraceFont(new TGFontModel("Default", 8, false, false));
+		this.getStyles().setChordFont(new TGFontModel("Default", 10, false, false));
+		this.getStyles().setChordFretFont(new TGFontModel("Default", 8, false, false));
+		
+		this.getStyles().setBackgroundColor( new TGColorModel(255,255,255) );
+		this.getStyles().setLineColor(  new TGColorModel(214,214,214)  );
+		this.getStyles().setScoreNoteColor( new TGColorModel(64,64,64));
+		this.getStyles().setTabNoteColor(new TGColorModel(64,64,64));
+		this.getStyles().setPlayNoteColor(new TGColorModel(64,64,64));
+		this.getStyles().setLoopSMarkerColor(new TGColorModel(0,0,0));
+		this.getStyles().setLoopEMarkerColor(new TGColorModel(0,0,0));
+		
+		this.setConfigured( true );
+	}
+}
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporterStylesDialog.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporterStylesDialog.java
new file mode 100644
index 0000000..1f011ab
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGExporterStylesDialog.java
@@ -0,0 +1,163 @@
+package org.herac.tuxguitar.io.svg;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+public class SVGExporterStylesDialog extends SVGExporterStyles {
+	
+	public SVGExporterStylesDialog(){
+		super();
+	}
+	
+	public void configure() {
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("options"));
+		
+		//------------------TRACK SELECTION------------------
+		Group trackGroup = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		trackGroup.setLayout(new GridLayout(2,false));
+		trackGroup.setLayoutData(getGroupData());
+		trackGroup.setText(TuxGuitar.getProperty("track"));
+		
+		final Label trackLabel = new Label(trackGroup, SWT.NULL);
+		trackLabel.setText(TuxGuitar.getProperty("track"));
+		
+		final Combo trackCombo = new Combo(trackGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		trackCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){
+			trackCombo.add(TuxGuitar.instance().getSongManager().getTrack(number).getName());
+		}
+		trackCombo.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber() - 1);
+		
+		final Button trackAllCheck = new Button(trackGroup,SWT.CHECK);
+		trackAllCheck.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true,2,1));
+		trackAllCheck.setText(TuxGuitar.getProperty("export.all-tracks"));
+		trackAllCheck.setSelection(false);
+		trackAllCheck.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				trackLabel.setEnabled( !trackAllCheck.getSelection() );
+				trackCombo.setEnabled( !trackAllCheck.getSelection() );
+			}
+		});
+		
+		//------------------CHECK OPTIONS--------------------
+		Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		options.setLayout(new GridLayout());
+		options.setLayoutData(getGroupData());
+		options.setText(TuxGuitar.getProperty("options"));
+		
+		final Button tablatureEnabled = new Button(options,SWT.CHECK);
+		tablatureEnabled.setText(TuxGuitar.getProperty("export.tablature-enabled"));
+		tablatureEnabled.setSelection(true);
+		
+		final Button scoreEnabled = new Button(options,SWT.CHECK);
+		scoreEnabled.setText(TuxGuitar.getProperty("export.score-enabled"));
+		scoreEnabled.setSelection(true);
+		
+		final Button chordNameEnabled = new Button(options,SWT.CHECK);
+		chordNameEnabled.setText(TuxGuitar.getProperty("export.chord-name-enabled"));
+		chordNameEnabled.setSelection(true);
+		
+		final Button chordDiagramEnabled = new Button(options,SWT.CHECK);
+		chordDiagramEnabled.setText(TuxGuitar.getProperty("export.chord-diagram-enabled"));
+		chordDiagramEnabled.setSelection(true);
+		
+		tablatureEnabled.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!tablatureEnabled.getSelection()){
+					scoreEnabled.setSelection(true);
+				}
+			}
+		});
+		scoreEnabled.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!scoreEnabled.getSelection()){
+					tablatureEnabled.setSelection(true);
+				}
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				int track = (!trackAllCheck.getSelection() ? (trackCombo.getSelectionIndex() + 1) : -1);
+				boolean showScore = scoreEnabled.getSelection();
+				boolean showTablature = tablatureEnabled.getSelection();
+				boolean showChordName = chordNameEnabled.getSelection();
+				boolean showChordDiagram = chordDiagramEnabled.getSelection();
+				
+				configure(track, showScore, showTablature, showChordName, showChordDiagram);
+				
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	public void configure(int track, boolean showScore,boolean showTablature,boolean showChordName,boolean showChordDiagram) {
+		this.configureWithDefaults();
+		this.setTrack( track );
+		this.setFlags( TGLayout.DISPLAY_COMPACT );
+		if( showScore ){
+			this.setFlags( this.getFlags() | TGLayout.DISPLAY_SCORE );
+		}
+		if( showTablature ){
+			this.setFlags( this.getFlags() | TGLayout.DISPLAY_TABLATURE );
+		}
+		if( showChordName ){
+			this.setFlags( this.getFlags() | TGLayout.DISPLAY_CHORD_NAME );
+		}
+		if( showChordDiagram ){
+			this.setFlags( this.getFlags() | TGLayout.DISPLAY_CHORD_DIAGRAM );
+		}
+		if( track < 0 ){
+			this.setFlags( this.getFlags() | TGLayout.DISPLAY_MULTITRACK );
+		}
+		this.setConfigured(true);
+	}
+	
+	private static GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private static GridData getGroupData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 300;
+		return data;
+	}
+}
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGFont.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGFont.java
new file mode 100644
index 0000000..40173c8
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGFont.java
@@ -0,0 +1,37 @@
+package org.herac.tuxguitar.io.svg;
+
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGFontModel;
+
+public class SVGFont implements TGFont {
+	
+	private TGFontModel handle;
+	
+	public SVGFont(String name, int height, boolean bold, boolean italic){
+		this.handle = new TGFontModel(name, height, bold, italic);
+	}
+	
+	public void dispose() {
+		this.handle = null;
+	}
+	
+	public boolean isDisposed() {
+		return (this.handle == null);
+	}
+	
+	public String getName() {
+		return this.handle.getName();
+	}
+	
+	public int getHeight() {
+		return this.handle.getHeight();
+	}
+	
+	public boolean isBold() {
+		return this.handle.isBold();
+	}
+	
+	public boolean isItalic() {
+		return this.handle.isItalic();
+	}
+}
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGImage.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGImage.java
new file mode 100644
index 0000000..a76a948
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGImage.java
@@ -0,0 +1,50 @@
+package org.herac.tuxguitar.io.svg;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class SVGImage implements TGImage{
+	
+	private StringBuffer buffer;
+	
+	private int width;
+	private int height;
+	
+	private boolean disposed;
+	
+	public SVGImage(int width, int height){
+		this.width = width;
+		this.height = height;
+		this.disposed = false;
+		this.buffer = new StringBuffer();
+	}
+	
+	public void dispose() {
+		this.disposed = true;
+	}
+	
+	public boolean isDisposed() {
+		return this.disposed;
+	}
+	
+	public int getWidth() {
+		return this.width;
+	}
+	
+	public int getHeight() {
+		return this.height;
+	}
+	
+	public StringBuffer getBuffer(){
+		return this.buffer;
+	}
+	
+	public TGPainter createPainter() {
+		return new SVGPainter( this.buffer );
+	}
+	
+	public void applyTransparency(TGColor background) {
+		// Not implemented
+	}
+}
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGPainter.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGPainter.java
new file mode 100644
index 0000000..698e293
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGPainter.java
@@ -0,0 +1,239 @@
+package org.herac.tuxguitar.io.svg;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class SVGPainter extends SVGResourceFactory implements TGPainter {
+	
+	private int svgStrokeWidth;
+	private int svgPathStyle;
+	private SVGFont svgFont;
+	private SVGColor svgBackground;
+	private SVGColor svgForeground;
+	private StringBuffer svgPath;
+	private StringBuffer svgBuffer;
+	
+	private boolean disposed;
+	
+	public SVGPainter( StringBuffer svgBuffer ){
+		this.svgBuffer = svgBuffer;
+		this.svgPath = null;
+		this.svgPathStyle = 0;
+		this.svgStrokeWidth = 1;
+		this.disposed = false;
+		this.svgFont = new SVGFont("none", 10, false, false);
+		this.svgBackground = new SVGColor(0xff, 0xff, 0xff);
+		this.svgForeground = new SVGColor(0x00, 0x00, 0x00);
+	}
+	
+	public void dispose(){
+		this.disposed = true;
+	}
+	
+	public boolean isDisposed(){
+		return this.disposed;
+	}
+	
+	public void initPath(int style){
+		this.svgPath = new StringBuffer();
+		this.svgPathStyle = style;
+		
+		this.setAntialias(true);
+	}
+	
+	public void initPath(){
+		this.initPath( PATH_DRAW );
+	}
+	
+	public void closePath(){
+		if( this.svgPath != null && this.svgPath.length() > 0 ){
+			this.svgBuffer.append("\r\n");
+			this.svgBuffer.append("<path ");
+			this.svgBuffer.append("d=\"" + this.svgPath.toString() + "Z\" ");
+			this.svgBuffer.append("fill=\"" + ((this.svgPathStyle & PATH_FILL) != 0 ? this.svgBackground.toHexString() : "none") +"\" ");
+			this.svgBuffer.append("stroke=\"" + ((this.svgPathStyle & PATH_DRAW) != 0 ? this.svgForeground.toHexString() : "none") +"\" ");
+			this.svgBuffer.append("stroke-width=\"" + this.svgStrokeWidth + "\" ");
+			this.svgBuffer.append("/>");
+		}
+		this.svgPath = null;
+		this.svgPathStyle = 0;
+		this.setAntialias(false);
+	}
+	
+	public void drawString(String string, int x, int y) {
+		this.setAdvanced(false);
+		this.svgBuffer.append("\r\n");
+		this.svgBuffer.append("<text ");
+		this.svgBuffer.append("x='" + x + "' ");
+		this.svgBuffer.append("y='" + (y + Math.round(0.75f * getFontSize())) + "' ");
+		this.svgBuffer.append("font-family=\""+ this.svgFont.getName() + "\" ");
+		this.svgBuffer.append("font-size=\"" + this.svgFont.getHeight() + "\" ");
+		this.svgBuffer.append("fill=\"" + this.svgForeground.toHexString() +"\" ");
+		this.svgBuffer.append(">");
+		this.svgBuffer.append( string );
+		this.svgBuffer.append("</text>");
+	}
+	
+	public void drawString(String string, int x, int y, boolean isTransparent) {
+		this.svgBuffer.append("\r\n");
+		this.svgBuffer.append("<text ");
+		this.svgBuffer.append("x='" + x + "' ");
+		this.svgBuffer.append("y='" + (y + Math.round(0.75f * getFontSize())) + "' ");
+		this.svgBuffer.append("font-family=\""+ this.svgFont.getName() + "\" ");
+		this.svgBuffer.append("font-size=\"" + this.svgFont.getHeight() + "\" ");
+		this.svgBuffer.append("fill=\"" + this.svgForeground.toHexString() +"\" ");
+		this.svgBuffer.append(">");
+		this.svgBuffer.append( string );
+		this.svgBuffer.append("</text>");
+	}
+	
+	public void drawImage(TGImage image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight) {
+		if( image instanceof SVGImage ){
+			this.svgBuffer.append("<g transform=\"translate(" + destX + "," + destY + ")\">");
+			this.svgBuffer.append( ((SVGImage)image).getBuffer() );
+			this.svgBuffer.append("</g>");
+		}
+	}
+	
+	public void drawImage(TGImage image, int x, int y) {
+		if( image instanceof SVGImage ){
+			this.svgBuffer.append("<g transform=\"translate(" + x + "," + y + ")\">");
+			this.svgBuffer.append( ((SVGImage)image).getBuffer() );
+			this.svgBuffer.append("</g>");
+		}
+	}
+	
+	public void cubicTo(float cx1, float cy1, float cx2, float cy2, float x, float y) {
+		this.svgPath.append("C " + cx1 + " " + cy1 + " " + cx2 + " " + cy2 + " "+ x + " " + y + " ");
+	}
+	
+	public void lineTo(float x, float y) {
+		this.svgPath.append("L " + x + " " + y + " ");
+	}
+	
+	public void moveTo(float x, float y) {
+		this.svgPath.append("M " + x + " " + y + " ");
+	}
+	
+	public void addArc(float x, float y, float width, float height, float startAngle, float arcLength) {
+		double angle1 = Math.toRadians(-startAngle);
+		double x1 = (x + (Math.cos(angle1) * 0.5 + 0.5) * width);
+		double y1 = (y + (Math.sin(angle1) * 0.5 + 0.5) * height);
+		
+		double angle2 = Math.toRadians(-startAngle - arcLength);
+		double x2 = (x + (Math.cos(angle2) * 0.5 + 0.5) * width);
+		double y2 = (y + (Math.sin(angle2) * 0.5 + 0.5) * height);
+		
+		this.svgPath.append("M " + x1 + " " + y1 + " ");
+		this.svgPath.append("A " + (width / 2) + " " + (height / 2) + " 0 ");
+		this.svgPath.append( ( arcLength > 180 || arcLength < -180 ? "1 " : "0 " ) );
+		this.svgPath.append( ( arcLength > 0 ? "0 " : "1 " ) );
+		this.svgPath.append(x2 + " " + y2 + " ");
+		this.svgPath.append("M " + x2 + " " + y2 + " ");
+	}
+	
+	public void addOval(float x, float y, float w, float h) {
+		this.svgPath.append("M " + x + " " + (y + (h / 2f)) + " a ");
+		this.svgPath.append((w / 2f) + " " + (h / 2f) + " 0 1 0 " + w + " 0 ");
+		this.svgPath.append((w / 2f) + " " + (h / 2f) + " 0 1 0 -" + w + " 0 ");
+	}
+	
+	public void addRectangle(float x,float y,float width,float height) {
+		this.svgPath.append("M " + x + " " + y + " ");
+		this.svgPath.append("L " + (x + width) + " " + y + " ");
+		this.svgPath.append("L " + (x + width) + " " + (y + height) + " ");
+		this.svgPath.append("L " + x + " " + (y + height) + " ");
+		this.svgPath.append("L " + x + " " + y + " ");
+	}
+	
+	public void addString(String text, float x, float y, TGFont font) {
+		TGFont currentFont = this.svgFont;
+		this.setFont(font);
+		this.drawString(text, Math.round(x), Math.round(y));
+		this.setFont(currentFont);
+	}
+	
+	public void setFont(TGFont font) {
+		if( font instanceof SVGFont ){
+			this.svgFont = (SVGFont)font;
+		}
+	}
+	
+	public void setBackground(TGColor color) {
+		if( color instanceof SVGColor ){
+			this.svgBackground = (SVGColor)color;
+		}
+	}
+	
+	public void setForeground(TGColor color) {
+		if( color instanceof SVGColor ){
+			this.svgForeground = (SVGColor)color;
+		}
+	}
+	
+	public void setLineWidth(int width) {
+		this.svgStrokeWidth = width;
+	}
+	
+	public void setLineStyleSolid(){
+		// Not Implemented
+	}
+	
+	public void setLineStyleDot(){
+		// Not Implemented
+	}
+	
+	public void setLineStyleDash(){
+		// Not Implemented
+	}
+	
+	public void setLineStyleDashDot(){
+		// Not Implemented
+	}
+	
+	public void setAntialias(boolean enabled){
+		// Not Implemented
+	}
+	
+	public void setAdvanced(boolean advanced){
+		// Not Implemented
+	}
+	
+	public int getFontSize(){
+		return this.svgFont.getHeight();
+	}
+	
+	public int getFMHeight(){
+		return (getFMAscent() + getFMDescent());
+	}
+	
+	public int getFMAscent(){
+		return getFontSize();
+	}
+	
+	public int getFMDescent(){
+		return 0;
+	}
+	
+	public int getFMWidth( String text ){
+		return ( text != null ? Math.round( text.length() * (0.75f * getFontSize() ) ) : 0 );
+	}
+	
+	public void setAlpha(int alpha) {
+		// Not Implemented
+	}
+	
+	public void drawPolygon(int[] arg0) {
+		// Not implemented
+	}
+	
+	public void fillPolygon(int[] arg0) {
+		// Not implemented
+	}
+	
+	public void copyArea(TGImage image, int x, int y) {
+		// Not Implemented
+	}
+}
diff --git a/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGResourceFactory.java b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGResourceFactory.java
new file mode 100644
index 0000000..7c51ce7
--- /dev/null
+++ b/TuxGuitar-svg/src/org/herac/tuxguitar/io/svg/SVGResourceFactory.java
@@ -0,0 +1,31 @@
+package org.herac.tuxguitar.io.svg;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGFontModel;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+
+public class SVGResourceFactory implements TGResourceFactory{
+	
+	public TGImage createImage(int width, int height) {
+		return new SVGImage(width, height);
+	}
+	
+	public TGColor createColor(TGColorModel colorModel) {
+		return this.createColor(colorModel.getRed(), colorModel.getGreen(), colorModel.getBlue());
+	}
+	
+	public TGColor createColor(int red, int green, int blue) {
+		return new SVGColor(red, green, blue);
+	}
+	
+	public TGFont createFont(TGFontModel fontModel) {
+		return createFont(fontModel.getName(), fontModel.getHeight(), fontModel.isBold(), fontModel.isItalic() );
+	}
+	
+	public TGFont createFont(String name, int height, boolean bold, boolean italic) {
+		return new SVGFont(name, height, bold, italic);
+	}
+}
diff --git a/TuxGuitar-tef/GNUmakefile b/TuxGuitar-tef/GNUmakefile
deleted file mode 100644
index 304624c..0000000
--- a/TuxGuitar-tef/GNUmakefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:23:54 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-tef
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.io.tef.TEPluginImporter
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:23:54 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-tef/build.properties b/TuxGuitar-tef/build.properties
index 519fcc3..717c2ef 100644
--- a/TuxGuitar-tef/build.properties
+++ b/TuxGuitar-tef/build.properties
@@ -4,4 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-tef/build.xml b/TuxGuitar-tef/build.xml
index 02248b8..038db9d 100644
--- a/TuxGuitar-tef/build.xml
+++ b/TuxGuitar-tef/build.xml
@@ -7,13 +7,12 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-tef.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.io.tef.TEPluginImporter" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -32,8 +31,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
diff --git a/TuxGuitar-tef/pom.xml b/TuxGuitar-tef/pom.xml
new file mode 100644
index 0000000..173b5cf
--- /dev/null
+++ b/TuxGuitar-tef/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-tef</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-tef/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-tef/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..f63b82c
--- /dev/null
+++ b/TuxGuitar-tef/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.io.tef.TEPluginImporter
diff --git a/TuxGuitar-tef/share/META-INF/tuxguitar-tef.info b/TuxGuitar-tef/share/META-INF/tuxguitar-tef.info
new file mode 100644
index 0000000..af39b4c
--- /dev/null
+++ b/TuxGuitar-tef/share/META-INF/tuxguitar-tef.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=TEF file format importer
+plugin.description=TEF file format importer
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TEPluginImporter.java b/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TEPluginImporter.java
index ce541be..250ff77 100644
--- a/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TEPluginImporter.java
+++ b/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TEPluginImporter.java
@@ -1,27 +1,17 @@
 package org.herac.tuxguitar.io.tef;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGImporterPlugin;
 import org.herac.tuxguitar.io.base.TGRawImporter;
+import org.herac.tuxguitar.io.plugin.TGImporterPlugin;
 
 public class TEPluginImporter extends TGImporterPlugin{
 	
+	public static final String MODULE_ID = "tuxguitar-tef";
+	
 	protected TGRawImporter getImporter() {
 		return new TESongImporter();
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getName() {
-		return "TEF file format importer";
-	}
-	
-	public String getDescription() {
-		return "TEF file format importer";
-	}
-	
-	public String getVersion() {
-		return "1.0";
+	public String getModuleId(){
+		return MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TESongImporter.java b/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TESongImporter.java
index d1ab957..61da176 100644
--- a/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TESongImporter.java
+++ b/TuxGuitar-tef/src/org/herac/tuxguitar/io/tef/TESongImporter.java
@@ -90,7 +90,7 @@ public class TESongImporter implements TGLocalFileImporter{
 		this.manager.getFirstMeasureHeader().getTempo().setValue(tempo);
 		
 		while(this.manager.getSong().countTracks() < tracks){
-			this.manager.createTrack();
+			this.manager.addTrack();
 		}
 		while(this.manager.getSong().countMeasureHeaders() < measures){
 			this.manager.addNewMeasureBeforeEnd();
@@ -111,12 +111,15 @@ public class TESongImporter implements TGLocalFileImporter{
 	private void addTrackValues(TETrack[] tracks){
 		for(int i = 0; i < tracks.length; i ++){
 			TGTrack track = this.manager.getSong().getTrack(i);
-			track.getChannel().setVolume((short)((  (15 - tracks[i].getVolume()) * 127) / 15));
-			track.getChannel().setBalance((short)(( tracks[i].getPan() * 127) / 15));
-			track.getChannel().setInstrument((short)tracks[i].getInstrument());
-			if(tracks[i].isPercussion()){
-				TGChannel.setPercussionChannel(track.getChannel());
-			}
+			
+			TGChannel tgChannel = this.manager.addChannel();
+			tgChannel.setVolume((short)((  (15 - tracks[i].getVolume()) * 127) / 15));
+			tgChannel.setBalance((short)(( tracks[i].getPan() * 127) / 15));
+			tgChannel.setProgram((short)tracks[i].getInstrument());
+			tgChannel.setBank( tracks[i].isPercussion() ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+			
+			track.setChannelId(tgChannel.getChannelId());
+			
 			track.getStrings().clear();
 			int strings[] = tracks[i].getStrings();
 			
diff --git a/TuxGuitar-testing/.project b/TuxGuitar-testing/.project
new file mode 100644
index 0000000..4556003
--- /dev/null
+++ b/TuxGuitar-testing/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>TuxGuitar-testing</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/TuxGuitar-testing/build.xml b/TuxGuitar-testing/build.xml
new file mode 100644
index 0000000..28d170a
--- /dev/null
+++ b/TuxGuitar-testing/build.xml
@@ -0,0 +1,200 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-testing" basedir="." default="all">
+	<description>
+		TuxGuitar Testing
+	</description>
+	
+	<property name="platform-all.path" value="platform-all" />
+	<property name="platform-all.share.path" value="platform-all/share" />
+	<property name="platform-all.doc.path" value="platform-all/doc" />
+	
+	<property name="platform-win32.share.path" value="platform-win32/share" />
+	<property name="platform-linux-x86.share.path" value="platform-linux-x86/share" />
+	<property name="platform-linux-x86_64.share.path" value="platform-linux-x86_64/share" />
+	
+	<target name="clean" >
+		<delete quiet="true">
+			<fileset file="${platform-all.path}${file.separator}tuxguitar.jar"/>
+			<fileset dir="${platform-all.doc.path}" excludes="**/.svn"/>
+			<fileset dir="${platform-all.share.path}" excludes="**/.svn"/>
+			<fileset dir="${platform-win32.share.path}" excludes="**/.svn"/>
+			<fileset dir="${platform-linux-x86.share.path}" excludes="**/.svn"/>
+			<fileset dir="${platform-linux-x86_64.share.path}" excludes="**/.svn"/>
+		</delete>
+	</target>
+	
+	<target name="build" depends="clean" >
+		<mkdir dir="${platform-all.doc.path}" />
+		<mkdir dir="${platform-all.share.path}" />
+		<mkdir dir="${platform-win32.share.path}" />
+		<mkdir dir="${platform-linux-x86.share.path}" />
+		<mkdir dir="${platform-linux-x86_64.share.path}" />
+		
+		
+		<!-- Build Application --> 
+		<ant dir="..${file.separator}TuxGuitar" >
+			<property name="dist.file" value="" />
+			<property name="build.dist.path" value="..${file.separator}TuxGuitar-testing${file.separator}/build_dist" />
+		</ant>
+		<ant dir="..${file.separator}TuxGuitar" target="install" >
+			<property name="dist.file" value="" />
+			<property name="dist.dst.path" value="..${file.separator}TuxGuitar-testing${file.separator}" />
+			<property name="dist.jar.path" value="${platform-all.path}" />
+			<property name="dist.share.path" value="${platform-all.share.path}" />
+			<property name="dist.doc.path" value="${platform-all.doc.path}" />
+		</ant>
+		<ant dir="..${file.separator}TuxGuitar" target="clean" >
+			<property name="dist.file" value="" />
+		</ant>
+		
+		<!-- Build Multiplatform Plugins -->
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-abc"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-ascii"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-browser-ftp"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-community"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-compat"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-converter"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-gervill"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-gpx"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-gtp"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-image"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-jsa"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-lilypond"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-midi"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-musicxml"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-pdf"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-ptb"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-svg"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-tef"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-tray"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-tuner"/>
+			<param name="plugin.dst.path" value="${platform-all.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<!-- Build Linux x86 Plugins -->
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-alsa"/>
+			<param name="plugin.dst.path" value="${platform-linux-x86.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-fluidsynth"/>
+			<param name="plugin.dst.path" value="${platform-linux-x86.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-jack"/>
+			<param name="plugin.dst.path" value="${platform-linux-x86.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<!-- Build Linux x86_64 Plugins -->
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-alsa"/>
+			<param name="plugin.dst.path" value="${platform-linux-x86_64.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<!-- Build Win 32 Plugins -->
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-fluidsynth"/>
+			<param name="plugin.dst.path" value="${platform-win32.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+		<antcall target="build-plugin">
+			<param name="plugin.src.path" value="..${file.separator}TuxGuitar-jack"/>
+			<param name="plugin.dst.path" value="${platform-win32.share.path}${file.separator}plugins"/>
+		</antcall>
+		
+	</target>
+	
+	<target name="build-plugin" >
+		<ant dir="${plugin.src.path}" target="build" >
+			<property name="path.tuxguitar" value="..${file.separator}TuxGuitar-testing${file.separator}${platform-all.path}${file.separator}tuxguitar.jar" />
+		</ant>
+		
+		<copy todir="${plugin.dst.path}">
+			<fileset dir="${plugin.src.path}" includes="tuxguitar-*.jar" />
+		</copy>
+		
+		<ant dir="${plugin.src.path}" target="clean" />
+	</target>
+	
+	<target name="all" depends="build" />
+</project>
diff --git a/TuxGuitar-testing/platform-all/doc/AUTHORS b/TuxGuitar-testing/platform-all/doc/AUTHORS
new file mode 100644
index 0000000..063ed71
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/doc/AUTHORS
@@ -0,0 +1,195 @@
+Julian Gabriel Casadesus
+
+    * Project Admin
+    * Developer
+    * Contact: <julian at casadesus.com.ar> http://www.herac.com.ar
+
+Hernan Andres Casadesus 
+
+    * Developer
+    * Contact: <hernan at casadesus.com.ar> http://www.herac.com.ar
+
+Nahuel Portilla 
+
+    * Developer
+    * Contact: <nahu51 at hotmail.com>
+
+Nikola Kolarovic
+
+    * Developer
+    * Documentation
+    * Serbian translation
+    * Contact: <nikola.kolarovic at gmail.com>
+
+Aaron Spike
+
+    * Developer
+    * Contact: <aaron at ekips.org> http://www.ekips.org
+
+Ersplus
+
+    * French translation
+    * Ersplus Icon Theme
+    * Contact: <ersplus at gmail.com> http://ersplus.free.fr
+
+Licnep
+
+    * Blue Serious Icon Theme
+    * Contact: <licnep at users.sourceforge.net>
+
+Sascha Riemer
+
+    * Lavender Icon Theme
+    * Contact: <saschariemer at compuserve.de>
+
+Auria
+
+    * CoreAudio Plugin for MacOS
+    * Contact: <auria at users.sourceforge.net>
+
+Herak
+
+    * Developer
+    * Contact: <herak.sen at gmail.com>
+
+Tomasz Bojczuk
+
+    * Polish translation
+    * Contact: <tomaszbojczuk at plusnet.pl>
+
+Jose Gato
+
+    * Mac version
+    * Contact: <jgato at gsyc.info>
+
+Benjamin Scherrer
+
+    * Deutsch translation
+
+Thomas Thiel
+
+    * Deutsch translation
+    * Contact: <kv at wolfchild.de> http://www.wolfchild.de
+
+Sergio Abreu
+
+    * Portuguese translation
+    * Contact: <dosergio at ubbi.com.br> http://sitedosergio.sitesbr.net
+
+Markon
+
+    * Italian translation
+    * Contact: <marco.buccini at alice.it>
+
+Zdenek Kunicky
+
+    * Czech translation
+    * Contact: <zdenekkunicky at seznam.cz>
+
+Máté Huszár
+
+    * Hungarian translation
+
+Tim Loo
+
+    * Chinese (Taiwan) translation
+    * Contact: http://www.sinan-melody.co.cc/wordpress_1/
+
+PTT Team
+
+    * Chinese (Taiwan) translation
+    * Contact: http://www.ptt.cc
+
+Shuo Huang
+
+    * Chinese (GB) translation
+    * Contact: <ucudbm at hotmail.com> http://www.cucum.cn
+
+Philippe Coval
+
+    * Debian/Ubuntu package maintainer ; Startup script
+    * French translation
+    * Contact: <rzr at users.sf.net> http://rzr.online.fr/contrib.htm
+
+Orcan Ogetbil
+
+    * Fedora package maintainer
+    * Contact: <orcanbahri at yahoo.com>
+
+John Gustafsson
+
+    * Swedish translation
+    * Contact: <jamminjohn at users.sourceforge.net>
+
+Pietro Cerutti
+
+    * FreeBSD port maintainer
+    * Contact: <gahr at gahr.ch> http://www.gahr.ch/
+
+Facundo Corradini
+
+    * Documentation
+    * Contact: <facundocorradini at gmail.com> http://www.exitoweb.com.ar
+
+Gabe Hargrave
+
+    * Documentation
+    * Contact: <rinkrinkerfink at gmail.com>
+
+Vadim Ipatov
+
+    * Russian translation
+    * Contact: <euphoria.vi at gmail.com> http://www.kmtn.ru/~euphoria
+
+Zoya Ignatova
+
+    * Russian translation
+    * Contact: <grotty at yandex.ru>
+
+Serge van Namen
+    * Dutch translation
+    * Contact: <serge at easyict.net>
+
+Yuriy Shakalov
+    * Ukrainian translation
+    * Contact: <yuriy.shakalov at gmail.com>
+
+Nguyen Dinh Trung
+    * Vietnamese translation
+    * Contact: <nguyendinhtrung141 at gmail.com>
+
+Keisuke Kato
+    * Japanese translation
+    * Contact: <kisk.kato at gmail.com> http://mingaku.selfip.org/
+
+Beat Weisskopf
+    * Deutsch translation
+    * Contact: <bweisskopf at gmail.com>
+
+Xevi Noe i Nogueiras
+    * Catalan translation
+    * Contact: <xevi.noe at gmail.com>
+
+Jean-Pierre POULIN
+	* Scales contributor
+	* Contact: <jeanpierre.poulin at free.fr> http://www.jeanpierrepoulin.com/
+
+Lobo
+	* Basque translation
+	* Contact: <lobo1985guitarrista at hotmail.es> http://www.myspace.com/lobotheguitardude
+
+Pekka Manninen
+	* Finnish translation
+	* Contact: <pekka.t.manninen at iki.fi>
+
+Rytis Umbrasas
+	* Lithuanian translation
+	* Contact: <rytumb at gmail.com>
+
+Periklis Ntanasis
+	* Greek translation
+	* Contact: <pntanasis at gmail.com> http://www.greekrocktabs.gr
+
+Svetoslav Stefanov
+	* Bulgarian translation
+	* Contact: <lfu.project at gmail.com> http://learnfree.eu
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/doc/CHANGES b/TuxGuitar-testing/platform-all/doc/CHANGES
new file mode 100644
index 0000000..5c04456
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/doc/CHANGES
@@ -0,0 +1,30 @@
+TuxGuitar Dev changes:
+
+* Add show/hide toolbars feature.
+* Add let ring support
+* Add count down support
+* Add bank selection support
+* Soundfont selection support in gervill plugin
+* New oxygen skin
+--* New abc exporter and importer plugin.
+--* New svg exporter plugin
+--* New image exporter plugin 
+
+
+TuxGuitar 1.2 changes:
+
+* Fix some bugs
+* Support measure range to loop
+* Transpose notes feature
+* Optionally transpose afected notes when change tuning
+* Move beats left|right support
+* More song properties options.
+* Add multiple measure support
+* Clean multiple measure support
+* Number of pastes support
+* Better lilypond plugin
+* Better fluidsynth plugin
+* New jack plugin
+* New community integration plugin
+* New cocoa integration plugin
+* New audio unit plugin
diff --git a/COPYING b/TuxGuitar-testing/platform-all/doc/LICENSE
similarity index 100%
rename from COPYING
rename to TuxGuitar-testing/platform-all/doc/LICENSE
diff --git a/TuxGuitar-testing/platform-all/doc/README b/TuxGuitar-testing/platform-all/doc/README
new file mode 100644
index 0000000..5098342
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/doc/README
@@ -0,0 +1,42 @@
+DESCRIPTION:
+TuxGuitar is a multitrack tablature editor and player written in Java-SWT.
+
+LICENSE:
+TuxGuitar is released under the GNU Lesser General Public License.
+
+REQUIREMENTS:
+Java Runtime Environment 1.4.X or later installed in your system.
+
+PROBLEMS:
+
+    * SWT:
+
+If you see an error like "java.lang.UnsatisfiedLinkError", you will need to replace your swt shared library files and jar 
+packages compiled for your system. TuxGuitar comes with SWT for linux-x86, linux-x86_64, mac and win32-x86. make sure download 
+the correct file. if you need another version, download your SWT and replace in lib folder.             
+If you don't have SWT installed in one of this locations: /lib, /usr/lib, /usr/local/lib or TuxGuitar/lib.  You will need to 
+add its path to the LD_LIBRARY_PATH and CLASSPATH environment vars.
+
+Export LD_LIBRARY_PATH and CLASSPATH:
+$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/your_swt_library_folder/
+$export CLASSPATH=$CLASSPATH:/your_swt_library_folder/swt.jar
+$/home/user/TuxGuitar-*/TuxGuitar
+
+    * UNSUPPORTED CLASS VERSION:
+
+java.lang.UnsupportedClassVersionError. This means that your JVM is not compatible with the JVM used to create the binaries.  
+If you see a message like this, you will need to rebuild TuxGuitar from sources.
+
+    * FAILDED TO LOAD PLUGINS:
+
+TuxGuitar 1.0 has better JVM compatibility than older releases. But some plugins (e.g: Java Sound Api plugin) still depends 
+on Sun Java(TM) Development Kit (JDK) 5.0. if you have installed more than one JVM in your system, you can use one of these 
+environment vars:  JAVA or JAVA_HOME to run TuxGuitar with a specified JVM.
+
+Export JAVA:
+$export JAVA=/usr/lib/jvm/java-1.5.0-sun/bin/java
+$/home/user/TuxGuitar-*/tuxguitar
+
+Export JAVA_HOME:
+$export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
+$/home/user/TuxGuitar-*/tuxguitar           
diff --git a/TuxGuitar-testing/platform-all/lib/gervill.jar b/TuxGuitar-testing/platform-all/lib/gervill.jar
new file mode 100644
index 0000000..a26da49
Binary files /dev/null and b/TuxGuitar-testing/platform-all/lib/gervill.jar differ
diff --git a/TuxGuitar-testing/platform-all/lib/itext.jar b/TuxGuitar-testing/platform-all/lib/itext.jar
new file mode 100644
index 0000000..3f2c188
Binary files /dev/null and b/TuxGuitar-testing/platform-all/lib/itext.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/help/about.html b/TuxGuitar-testing/platform-all/share/help/about.html
new file mode 100644
index 0000000..707466d
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/about.html
@@ -0,0 +1,313 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>TuxGuitar project: About</h1>
+						
+						<h2>Description:</h2>
+						
+						<p>
+						TuxGuitar is a multitrack tablature editor and player written in Java unsing SWT Graphic libraries.  
+						It is multi-platform application, available for Linux, Windows, MacOS, FreeBSD and other operating systems. 
+						TuxGuitar is open source software, released under the GNU Lesser General Public License.
+						</p>
+						
+						<h2>Website</h2>
+						
+						<p>
+						You should check TuxGuitar project website on <b>http://www.tuxguitar.com.ar</b><br/><br/>
+						On the website exists a forum where you can find answers for almost all of your TuxGuitar related questions.<br/><br/>
+						There is also a Wiki page on the webite.
+						</p>
+						
+						<h2>Source repository</h2>
+						<p>
+						TuxGuitar source repository can be browsed on  <b>http://tuxguitar.cvs.sourceforge.net</b>. From this CVS repository you can download and compile TuxGuitar "under development" version.
+						</p>
+						
+						
+						<h2>Contribution</h2>
+						
+						<p>
+						If you have sufficient skills and some ideas, you are free to join the project.<br/><br/>
+						You can also contribute by paying a small donation to the project. More details on the website (<b>http://www.tuxguitar.com.ar/donate.html</b>).
+						</p>
+						
+						
+						<h2>Authors</h2>
+						<br/>
+						<h4>Julián Gabriel Casadesús</h4>
+						<ul>
+							<li>Project Admin</li>
+							<li>Developer</li>  
+							<li>Web Page: <b>http://www.herac.com.ar</b></li>
+						</ul>
+						
+						<h4>Hernán Andrés Casadesús</h4>
+						<ul>
+							<li>Developer</li>  
+							<li>Web Page: <b>http://www.herac.com.ar</b></li>
+						</ul>
+						
+						<h4>Nahuel Portilla</h4>
+						<ul>
+							<li>Developer</li>
+						</ul>
+						
+						<h4>Nikola Kolarović</h4>
+						<ul>
+							<li>Developer</li>
+							<li>Documentation</li>
+							<li>Serbian translation</li>
+						</ul>
+						
+						<h4>Aaron Spike</h4>
+						<ul>
+							<li>Developer</li>
+							<li>Web Page: <b>http://www.ekips.org</b></li>
+						</ul>
+						
+						<h4>Ersplus</h4>
+						<ul>
+							<li>French translation</li>  
+							<li>Ersplus Icon Theme</li>
+							<li>Web Page: <b>http://ersplus.free.fr/</b></li>
+						</ul>
+						
+						<h4>Licnep</h4>
+						<ul>
+							<li>Blue Serious Icon Theme</li>
+						</ul>
+						
+						<h4>Sascha Riemer</h4>
+						<ul>
+							<li>Lavender Icon Theme</li>
+						</ul>
+						
+						<h4>Auria</h4>
+						<ul>
+							<li>CoreAudio service for MacOS</li>
+						</ul>
+						
+						<h4>Tomasz Bojczuk</h4>
+						<ul>
+							<li>Polish translation</li>
+						</ul>
+						
+						<h4>Jose Gato</h4>
+						<ul>
+							<li>Mac version</li>
+						</ul>
+						
+						<h4>Benjamin Scherrer</h4>
+						<ul>
+							<li>Deutsch translation</li>
+						</ul>
+						
+						<h4>Thomas Thiel</h4>
+						<ul>
+							<li>Deutsch translation</li>
+							<li>Web Page: <b>http://www.wolfchild.de</b></li>
+						</ul>
+						
+						<h4>Sergio Abreu</h4>
+						<ul>           
+							<li>Portuguese translation</li>
+							<li>Web Page: <b>http://sitedosergio.sitesbr.net</b></li>
+						</ul>
+						
+						<h4>Markon</h4>
+						<ul>
+							<li>Italian translation</li>
+						</ul>
+						
+						<h4>Zdenek Kunicky</h4>
+						<ul>
+							<li>Czech translation</li>
+						</ul>
+						
+						<h4>Máté Huszár</h4>
+						<ul>
+							<li>Hungarian translation</li>
+						</ul>
+						
+						<h4>Tim Loo</h4>
+						<ul>
+							<li>Chinese (Taiwan) translation</li>
+							<li>Web Page: <b>http://www.sinan-melody.co.cc/wordpress_1/</b></li>
+						</ul>    
+						
+						<h4>PTT Team</h4>
+						<ul>
+							<li>Chinese (Taiwan) translation</li>
+							<li>Web Page: <b>http://www.ptt.cc</b></li>
+						</ul>
+						
+						<h4>Shuo Huang</h4>
+						<ul>
+							<li>Chinese (GB) translation</li>
+							<li>Web Page: <b>http://www.cucum.cn</b></li>
+						</ul>
+						
+						<h4>Philippe Coval</h4>
+						<ul>
+							<li>Debian package maintainer</li>
+							<li>French translation</li>
+							<li>Web Page: <b>http://rzr.online.fr/contrib.htm</b></li>
+						</ul>
+						
+						<h4>Orcan Ogetbil</h4>
+						<ul>
+							<li>Fedora package maintainer</li>
+						</ul>
+						
+						<h4>John Gustafsson</h4>
+						<ul>
+							<li>Swedish translation</li>
+						</ul>
+						
+						<h4>Pietro Cerutti</h4>
+						<ul>
+							<li>FreeBSD port maintainer</li>
+							<li>Web Page: <b>http://www.gahr.ch/</b></li>
+						</ul>
+						
+						<h4>Facundo Corradini</h4>
+						<ul>
+							<li>Documentation</li>
+							<li>Web Page: <b>http://www.corradiniestudioweb.com.ar</b></li>
+						</ul>
+						
+						<h4>Gabe Hargrave</h4>
+						<ul>
+							<li>Documentation</li>
+						</ul>
+						
+						<h4>Vadim Ipatov</h4>
+						<ul>
+							<li>Russian translation</li>
+						</ul>
+						
+						<h4>Zoya Ignatova</h4>
+						<ul>
+							<li>Russian translation</li>
+						</ul>
+						
+						<h4>Serge van Namen</h4>
+						<ul>
+							<li>Dutch translation</li>
+						</ul>
+						
+						<h4>Yuriy Shakalov</h4>
+						<ul>
+							<li>Ukrainian translation</li>
+						</ul>
+						
+						<h4>Xevi Noe i Nogueiras</h4>
+						<ul>
+							<li>Catalan translation</li>
+						</ul>
+						
+						<h4>Jean-Pierre POULIN</h4>
+						<ul>
+							<li>Scales contributor</li>
+							<li>Web Page: <b>http://www.jeanpierrepoulin.com/</b></li>
+						</ul>
+						
+						<h4>Lobo</h4>
+						<ul>
+							<li>Basque translation</li>
+							<li>Web Page: <b>http://www.myspace.com/lobotheguitardude</b></li>
+						</ul>
+						
+						<h4>Pekka Manninen</h4>
+						<ul>
+							<li>Finnish translation</li>
+						</ul>
+						
+						<h4>Rytis Umbrasas</h4>
+						<ul>
+							<li>Lithuanian translation</li>
+						</ul>
+						
+						<h4>Periklis Ntanasis</h4>
+						<ul>
+							<li>Greek translation</li>
+							<li>Web Page: <b>http://www.greekrocktabs.gr</b></li>
+						</ul>
+						
+						<h4>Svetoslav Stefanov</h4>
+						<ul>
+							<li>Bulgarian translation</li>
+							<li>Web Page: <b>http://learnfree.eu</b></li>
+						</ul>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
+
diff --git a/TuxGuitar-testing/platform-all/share/help/css/styles.css b/TuxGuitar-testing/platform-all/share/help/css/styles.css
new file mode 100644
index 0000000..862be30
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/css/styles.css
@@ -0,0 +1,57 @@
+/* CSS Document */
+body {
+	color:#666666;
+	background:#ffffff;
+	font-size: small;
+	text-align: left;
+	margin:0;
+}
+
+h1{
+	margin: 0px 0px 10px 0px;
+	padding: 0px 0px 0px 0px;
+	color: #154374;
+	border-bottom: solid #d4d4d4 1px;
+}
+
+h2, h2 a, h2 a:hover{
+	margin: 0px 0px 4px 0px;
+	padding: 0px 0px 0px 0px;
+	color: #154374;
+	/*color: #cc6600;*/
+	font-size: 16px;
+}
+
+h3, h3 a, h3 a:hover{
+	margin: 0px 0px 4px 0px;
+	padding: 0px 0px 0px 0px;
+	color: #053364;
+	font-size: 12px;
+}
+
+h4, h4 a, h4 a:hover{
+	margin: 0px 0px 4px 0px;
+	padding: 0px 0px 0px 0px;
+	color: #053364;
+	font-size: 12px;
+}
+
+p{
+	margin: 0px 0px 15px 0px;
+	padding: 0px 0px 0px 0px;
+	color:#666666;
+}
+
+a, a:hover {
+	color: #154374;
+	text-decoration: none;
+}
+
+#PageMenu {
+	width: 250px;
+	margin-right: 10px;
+}
+
+#PageContent {
+	margin: 10px 0px 10px 0px;
+}
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/share/help/edit_chord.html b/TuxGuitar-testing/platform-all/share/help/edit_chord.html
new file mode 100644
index 0000000..664335f
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/edit_chord.html
@@ -0,0 +1,231 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Chord Editor dialog</h1>
+						
+						
+						<div class="level1">
+						
+						<p>
+						 This is a dialog that allows you to get a chord based on it’s theory, recognize a chord based on the tab, memorize or get a chord from a library, and few more things. This is also the only way to add a chord name or/and diagram in the tab.
+						</p>
+						
+						<p>
+						<img src="images/edit/chord_dialog.png" title=" The Dialog " alt=" The Dialog " />
+						</p>
+						
+						<p>
+						As you can see chord dialog consists of many things, but is still easy to use. Nevertheless, every feature of the dialog will be explained here.
+						</p>
+						</div>
+						
+						<h2><a name="opening_the_dialog" id="opening_the_dialog">Opening the dialog</a></h2>
+						<div class="level2">
+						
+						<p>
+						 When you open the dialog by clicking on it’s icon (or hitting “<strong>A</strong>” key as shortcut), the first thing you will notice is that the notes from your tab are now in the chord dialog <strong>editor</strong>, the chord is recognized according to the theory and you can hear the sound preview of it.
+						</p>
+						</div>
+						
+						<h2><a name="editor" id="editor">Editor</a></h2>
+						<div class="level2">
+						
+						<p>
+						 In <strong>editor</strong> you can compose your own chord by simple drawing. You should first choose the starting fret with the slider on the right side of the <strong>editor</strong> and then put the black dots on the frets. Clicking above the line on the editor changes the note between the “empty-string” (white dot) or “don’t play this string” sign (marked with <strong>X</strong>). The span of the editor is 5 frets, but you will have to admit that y [...]
+						</p>
+						
+						<p>
+						While you are “drawing” the chord, it will constantly be recognized, which can be seen in recognizer window.
+						</p>
+						
+						<p>
+						After composing your chord you can save it to library, or simply press OK and add it to tab.
+						</p>
+						</div>
+						
+						<h2><a name="chord" id="chord">Chord</a></h2>
+						<div class="level2">
+						
+						<p>
+						 This bunch of controls is used to compose a chord based on it’s name (theory).
+						</p>
+						
+						<p>
+						You should first choose chord root, either in sharp or flat. Then you should choose chord flavor (major, maj7, sus2, sus4...).
+						</p>
+						
+						<p>
+						Next, you can alterate the chord. You can make <strong>/9</strong> chord (adds b7 and 9 tones), <strong>/11</strong> chord (adds b7, 9 and 11 tones) and <strong>/13</strong> chord (adds b7, 9, 11 and 13 tones). By enabling the “add” checkbox you get the “<strong>add</strong>” chord (which means add13 chord has only 13 note, without b7, 9 and 11).
+						</p>
+						
+						<p>
+						 You can modify the selected alteration with <strong>+/-</strong> control, and other alterations with appropriate +/- box (rightmost of the <strong>Chord</strong> controls).
+						</p>
+						
+						<p>
+						On the bottom of <strong>chord</strong> controls is a bass note. If you choose a different bass note than the chord root you will get so-called inverted chord.
+						</p>
+						</div>
+						
+						<h2><a name="proposals" id="proposals">Proposals</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Based on the chosen chord theory, you will get proposals for the fingerings. On the proposal thumbnails you can see the chord position and the fingering. The chord proposals are generated and sorted, so don’t be too dissapointed if you don’t see your favourite chord on the second position.
+						</p>
+						
+						<p>
+						On the other hand, proposals are generated for any tunning and any criteria the same way. You may be surprised when it digs some convenient fingering for a chord you had trouble with.
+						</p>
+						
+						<p>
+						After you click on the proposal, it will appear in <strong>editor</strong>, it’s <strong>name</strong> would be written and you should hear the way it sounds.
+						</p>
+						</div>
+						
+						<h2><a name="name" id="name">Name</a></h2>
+						<div class="level2">
+						
+						<p>
+						 The title of the chord is changed every time you choose one of the proposals. The chord name isn’t displayed while you edit the chord because you would loose the chord name you typed in the first place.
+						</p>
+						</div>
+						
+						<h2><a name="recognized" id="recognized">Recognized</a></h2>
+						<div class="level2">
+						
+						<p>
+						 The <strong>recognized</strong> window contains the proposals of the chord title, according to the theory. Besides the chord name you will see the probability of a chord. The probability is less when a chord is missing some tone to be complete.
+						</p>
+						
+						<p>
+						When you click on an item in recognition window, the <strong>chord</strong> controls should change based on the chord you chose, it’s name will be displayed in title window, and the <strong>proposals</strong> of more fingering positions should be generated below.
+						</p>
+						</div>
+						
+						<h2><a name="library" id="library">Library</a></h2>
+						<div class="level2">
+						
+						<p>
+						 When you compose a convenient chord, you can add it into <strong>library</strong>. Once added, it can be accessed outside the chord dialog - by clicking on the arrow besides <strong>Chord Editor</strong> icon in the toolbar. When you add a chord to a tab that way, it’s name and/or diagram will be displayed in the tab.
+						</p>
+						
+						<p>
+						In Chord Editor dialog you can manipulate the library list: add, rename or remove chord from a library.
+						</p>
+						</div>
+						
+						<h2><a name="settings" id="settings">Settings</a></h2>
+						<div class="level2">
+						
+						<p>
+						 In the <strong>Settings dialog</strong> are some options which can customize and improve the chord proposal assembly process.
+						</p>
+						
+						<p>
+						<img src="images/edit/chord_settings_dialog.png" title=" Chord Settings " alt=" Chord Settings " />
+						</p>
+						
+						<p>
+						<strong>Chords to display</strong> is the number of the best chord proposals to be considered into proposal list. Note that this number of proposals wouldn’t be displayed, because the very similar fingerings (like x02210 and x0221x for <em>Am</em>) will not be included.
+						</p>
+						
+						<p>
+						 <strong>Chord type</strong> is a very important property. Besides the “<strong>Most common</strong>” chords, here you can choose between “<strong>Open-voiced chords</strong>“, “<strong>Closed-voiced chords</strong>” and “<strong>Chord inversions</strong>“. While chord inversions mean that the bass note isn’t the root note of the chord, open- and closed-voiced chords are a little bit more specific: closed voice have tones very c [...]
+						</p>
+						
+						<p>
+						<strong>Open chords</strong> include empty strings into chord composition, so you get “open chords”. For example, famous “Hendrix chord” is an open chord ( 076780 ). <strong>Open chords</strong> are another <strong>chord type</strong>, but can be used in combination with any of them.
+						</p>
+						
+						<p>
+						<strong>Search frets</strong> is an option for you if you are looking for a chord on a specific position. Normally all the chords from fret 0 to fret 15 will be proposed, but you can narrow (or expand!) the search by modifying the starting and ending fret. If <strong>open chords</strong> is selected, zero-fret will be included in the search, too.
+						</p>
+						
+						<p>
+						By clicking on the OK button your changes will be applied, but they won’t be remembered next time you run TuxGuitar.
+						</p>
+						</div>
+						
+						<h2><a name="chord_layout" id="chord_layout">Chord layout</a></h2>
+						<div class="level2">
+						
+						<p>
+						 When you insert a chord it will be displayed on the main tab view. There are two different views of a chord, plus mixed one. It is changed in the main menu, checking one or both of the items from <strong>Layout→Chord_Style</strong>.
+						</p>
+						
+						<p>
+						You can view the chord as a diagram (where to put the fingers), only its name (entered in the library), or both. 
+						</p>
+						
+						</div><br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/edit_effects.html b/TuxGuitar-testing/platform-all/share/help/edit_effects.html
new file mode 100644
index 0000000..908384d
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/edit_effects.html
@@ -0,0 +1,424 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Note effects</h1>
+						
+						
+						<div class="level1">
+						
+						<p>
+						 As you already know, playing guitar (and any other instrument) isn’t just playing the notes in the right duration and dynamics. There are several “tricks” that are unique for any instrument. TuxGuitar supports effects specific for guitar and bass guitar.
+						</p>
+						
+						<p>
+						Almost all note effects have an icon on the toolbar, but also can be accessed in <strong>Note→Effects</strong> menu. The effect is applied on the current cursor position.
+						</p>
+						<p> <img src="images/start/tb_effects.png" alt=" Effects toolbar" /></p>
+						</div>
+						
+						<h2><a name="dead_note" id="dead_note">Dead note</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Dead note (sometimes referred as rake) is a playing effect which produces more of a percussive effect than a regular note with it’s pitch. Dead note has short and “clicking” sound. It is used very often by guitar players. 
+						</p>
+						
+						<p>
+						Because of the MIDI standard, all MIDI tab editing applications (Guitar Pro, Tabledit, TuxGuitar...) have a little bit different dead note implementation - it is not exactly dead. It is short, it is percussive, but you can adjust the pitch of the dead note.
+						</p>
+						
+						<p>
+						So in TuxGuitar, if you put a dead note in the scores it will be heard like a muted zero-fret string. If you put a regular fret value and mark that note as dead, it will become a dead note, but will retain the previous pitch.
+						</p>
+						
+						<p>
+						Dead note is marked with “<strong>X</strong>” sign in the tab.
+						</p>
+						
+						</div>
+						
+						<h2><a name="ghost_note" id="ghost_note">Ghost note</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Ghost note is effect that changes note’s dynamics (loudness) to <strong>more quiet</strong>. The difference between the Ghost note and lesser dynamics is seen only visually, while it sounds the same.
+						</p>
+						
+						<p>
+						Ghost note is marked by a note between parentheses <strong>( )</strong>.
+						</p>
+						
+						</div>
+						
+						<h2><a name="accentuated_and_heavy_accentuated_note" id="accentuated_and_heavy_accentuated_note">Accentuated and heavy accentuated note</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Like Ghost note, these effects change note’s volume. Accentuated note gives it a little louder dynamics, and heavy accentuated note makes the note even louder.
+						</p>
+						
+						<p>
+						Accentuated note is marked with a “<strong>></strong>” sign, and heavy accentuated with “<strong>^</strong>” sign.
+						</p>
+						
+						</div>
+						
+						<h2><a name="harmonics" id="harmonics">Harmonics</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Guitar harmonics are somewhat special note effect, because the result is a note with different pitch.
+						</p>
+						
+						<p>
+						After you choose harmonics effect, a dialog would appear. You are able to choose between <strong>artificial</strong>, <strong>pinched</strong>, <strong>tapped</strong> and <strong>semi</strong> harmonics.
+						</p>
+						
+						<p>
+						If you wrote a note on fret 3,4,5,7,9,12,16,19... you will get the option to choose the <strong>Natural harmonic</strong> effect. It would sound like natural harmonic on the same fret and string.
+						</p>
+						
+						<p>
+						Otherwise, if you choose <strong>artificial</strong>, <strong>pinched</strong>, <strong>tapped</strong> or <strong>semi</strong> harmonics, you should choose a value from the combo box on the bottom of the dialog. If you chose artificial harmonic, you would be able to choose between these values:
+						</p>
+						<p align="center">
+						<table border="1px">
+							<tr>
+								<td> <strong>A.H(12)</strong> </td><td> artificial harmonic one octave (12 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(9)</strong>  </td><td> artificial harmonic two octaves+major third (28 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(5)</strong> </td><td> artificial harmonic two octaves (24 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(7)</strong> </td><td> artificial harmonic octave+fifth (19 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(4)</strong> </td><td> artificial harmonic two octaves+major third (28 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(3)</strong> </td><td> artificial harmonic two octaves+fifth (31 frets) higher than the original note </td>
+							</tr>
+						</table>
+						<br/>
+						</p>
+						
+						<p>
+						 Note that A.H(4) and A.H(9) sound the same... The number besides denotes the “fret offset” between the original note and the harmonic “hot spot”.
+						</p>
+						
+						<p>
+						The difference between <strong>artificial</strong>, <strong>pinched</strong> and <strong>tapped</strong> harmonics is only in the playing technique, but <strong>semi-harmonics</strong> even sound different on TuxGuitar - you can hear the original note along with the harmonic note.
+						</p>
+						
+						</div>
+						
+						<h2><a name="grace_note" id="grace_note">Grace note</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Grace note is a music ornament. You can hear it very often in music, and it sounds like an attempt to play a note as <strong>short</strong> as possible. Grace notes in tabs are displayed smaller than the regular notes, and seem to have no duration. In sheet music grace notes are represented as a small note before a regular note, sometimes with a slash through the note stem.
+						</p>
+						
+						<p>
+						In TuxGuitar grace note can be applied on a position where a note already exists. Choosing to insert a grace note brings you the grace note editor dialog.
+						</p>
+						
+						<p><img src="images/edit/effects_grace.png" title="Grace note editor dialog" alt="Grace note editor dialog"/></p>
+						<p>
+						On guitar, grace notes are most usually played on the same string as the ordinary note, so you will first want to enter the <strong>fret</strong> on which grace note is played. If you check a <span class="curid"><a href="#dead_note"> dead note</a></span>, muted percussive note will be played instead. Select the <strong>position</strong> of the grace note. “Before beat” places your grace note before the ordinary note, which is played in exact time it is displayed in tab/ [...]
+						</p>
+						
+						<p>
+						Next you can choose <strong>note duration</strong>. “As short as possible” is welcome, so 1/64 note is default, but you can also pick 1/32 and 1/16 note if it suits your needs. <strong>Dynamics</strong> of the grace note is also an important property. By default dynamics of a “normal” note is selected, but in editor dialog you can make grace note louder or more quiet than the succeeding note.
+						</p>
+						
+						<p>
+						At last, you can choose type of the <strong>transition</strong>, which marks the playing style. The default transition is <em>None</em>, which marks no distinct transition. Other available transitions are <em>Bend</em> and <em>Slide</em> (which also effect the way note is heard), and also a <em>Hammer</em> to mark that grace note is played by hammer on-pull off technique.
+						</p>
+						
+						<p>
+						If you have an existing grace note effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed.
+						</p>
+						
+						</div>
+						
+						<h2><a name="vibrato" id="vibrato">Vibrato</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Vibrato is a note playing technique which makes the frequency (pitch) of a note oscilate a little bit in either direction (lower or higher). It makes the tone more colourful and accentuated. On guitar vibrato is played by slightly moving the finger upside-down or in left-right direction, which playes the sound in slightly higher pitch according to your moves.
+						</p>
+						
+						<p>
+						In TuxGuitar vibrato effect has no special parameters - applying vibrato effect on a note will make a typical vibrato effect, and also mark the tone with the “vibrating waves” in the tab view.
+						</p>
+						
+						</div>
+						
+						<h2><a name="bend" id="bend">Bend</a></h2>
+						<div class="level2">
+						
+						<p>
+						 String bending effect modifies the pitch of the played tone, but much more than <span class="curid"><a href="#vibrato"> vibrato</a></span> effect. Most often the result of bending a note is gradual pitch shift to another note. By the nature of bending that note has higher frequency then the note on the same fret without bend, because you <strong>bend</strong> the string thus adding more tension to the string. 
+						</p>
+						
+						<p>
+						In TuxGuitar, applying a bend effect to the note opens the Bend Editor dialog, which allows you fine tuning of the bend, showing you exactly how much tension your finger should use. Of course, the result of your modification can be heard.
+						</p>
+						
+						<p><img src="images/edit/effects_bend.png" title="Bend editor" alt="Bend editor" /> </p>
+						<p>
+						First, notice the listbox on the right of the dialog. Those are the presets which are most often used: <em>bend, bend-release, bend-release-bend, prebend</em> and <em>prebend-release</em>. <em>Bend</em> only makes gradual transition to the target note, while <em>bend-release</em> also returns it to the beginning note. <em>Prebend</em> is played when you first bend (add tension) to the string, and <strong>after that</strong> pick the string, so the first tone heard has higher pitch, [...]
+						</p>
+						
+						<p>
+						The Editor allows you fine bend tuning by drawing a graphic function of the bending amount (or pitch modulation/string tension). It works by placing dots in a diagram which are automatically connected with lines. The higher the dot is placed, the greater the bending amount will be. Notice that the diagram is separated horizontally with gray and red lines. Each full red line represents the pitch shift by 1 tone (2 frets), and each dashed red line represents the pitch shift by a semi [...]
+						</p>
+						
+						<p>
+						So the bend represented on the picture above is a complex one: the first peak is almost a 2-tone bend-release (it is a slight <em>underbend</em>, because it bends for 3.5 frets), the second one is a slight bend shift to one higher half-tone (1 fret) and back, and the third bends one whole-tone (2 frets) and stays there for a little while.
+						</p>
+						
+						<p>
+						If you have an existing vibrato effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed.
+						</p>
+						
+						<p>
+						When any bend effect is applied to a note, in the note will be displayed with a curved arrow in the tab view.
+						</p>
+						
+						</div>
+						
+						<h2><a name="tremolo_bar" id="tremolo_bar">Tremolo bar</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Tremolo bar is a term in TuxGuitar for all the effects you can make with a guitar tremolo arm. It allows note pitch shift in both directions and with a higher range of modulation. With tremolo bar effect TuxGuitar can modify the original note very precisely with the modulation diagram, allowing the pitch change up and down whole octave (8 tones, 12 frets) from the original tone.
+						</p>
+						
+						<p>
+						When you apply tremolo bar effect on a note, Tremolo bar Editor dialog appears, very similar to the editor for the <span class="curid"><a href="#bend"> Bend effect</a></span>.
+						</p>
+						
+						<p><img src="images/edit/effects_tremolobar.png" title=" Tremolo bar editor" alt=" Tremolo bar editor" /></p>
+						<p>
+						 There are some presets in the listbox placed on the right side of the dialog. <em>Dip</em> effect slowly lowers the pitch, and after returns back. The oposite effect is <em>inverted dip</em> which increases the pitch and returns back. <em>Dive</em> slowly lowers the pitch, but doesn’t return back. Opposite effect is <em>return</em>. <em>Release up</em> starts from the lower pitch and gradually returns to the original tone. <em>Release down</em> also ends at the original tone [...]
+						</p>
+						
+						<p>
+						Tremolo bar diagram editor consists of red and gray horisontal lines. Each red line represents one whole tone pitch offset (2 frets), and gray one semitone offset (1 fret). It is important to notice the black horisontal line in the middle: that is frequency of your original tone (to which you applied the effect). There are 6 red lines in both directions from the black line, which means you can modify the original pitch up and down 8 tones (12 frets). Vertical blue lines separate th [...]
+						</p>
+						
+						<p>
+						So the tremolo bar represented on the picture above is a complex one: first tremolo bar increases the pitch by one tone (2 frets), returns back to the original tone, quickly increases to +2 tone offset (4 frets) and then dives and dives until the tone is one octave (12 frets) lower than the original one.
+						</p>
+						
+						<p>
+						If you have an existing tremolo arm effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed. 
+						</p>
+						
+						<p>
+						When tremolo arm effect is applied to a note, besides the note in the tab view will be displayed an “x” with an arrow pointing down.
+						</p>
+						
+						</div>
+						
+						<h2><a name="slide" id="slide">Slide</a></h2>
+						<div class="level2">
+						
+						<p>
+						 A slide is a guitar technique where the player sounds one note, and then moves (slides) their finger up or down the fretboard to another fret. If done properly, the notes between should also sound.
+						</p>
+						
+						<p>
+						In TuxGuitar slide connects the current note with the next note on the same string. Then in tab view you can see a line connecting two notes (upwards or downwards).
+						</p>
+						
+						 
+						</div>
+						
+						<h2><a name="hammer_on_pull_off" id="hammer_on_pull_off">Hammer on / Pull off</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Hammer on and pull off are playing techniques which assume playing another note on the same string but without picking a string again. Heavy usage of hammer on/pull off in a short period is often refered as legato style. Hammer on refers to the transition between a previous note and a note with a higher pitch. Pull off is exactly the opposite, transition between a previous note and a note with a lower pitch. 
+						</p>
+						
+						<p>
+						In TuxGuitar <strong>hammer on</strong> and <strong>pull off</strong> are treated and displayed as the same effect. When you apply the effect, a connecting arc will be displayed between the current note and the next note <strong>on the same string</strong>, which marks that notes should be played with hammer on/pull off technique.
+						</p>
+						
+						</div>
+						
+						<h2><a name="trill" id="trill">Trill</a></h2>
+						<div class="level2">
+						
+						<p>
+						 A rapid series of hammer-ons and pull-offs between a single pair of notes is called a trill. So you can write all the trills manually, but TuxGuitar has the trill editor, which sometimes reduces the writing time.
+						</p>
+						
+						<p>
+						Trill effect is applied on an existing note, which is considered the first note in a trill. Then the <strong>trill editor</strong> appears and allows you to choose the second note, and a duration between the hammer-ons and pull-offs. If there is existing trill effect and you select Clear on the trill editor, the effect will be removed.
+						</p>
+						
+						<p>
+						Trill effect is marked in a tab with “<strong>tr</strong>” mark and a wave along the note duration.
+						</p>
+						
+						</div>
+						
+						<h2><a name="tremolo_picking" id="tremolo_picking">Tremolo picking</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Tremolo picking means that the same note is picked in a rapid manner.
+						</p>
+						
+						<p>
+						So it would be the same if you write dozens of notes by yourself or use a tremolo picking effect, but if you apply the effect the tab will look nicer and it may save some time. Applying the tremolo picking effect on a current note will bring the tremolo picking editor, which allows you to choose how frequently it will be picked. If you already have a tremolo effect and click on “Clean” in the editor, the effect will be removed.
+						</p>
+						
+						<p>
+						Tremolo picking effect is marked with three diagonal lines (<em>≡</em>) in scores or tab.
+						</p>
+						
+						</div>
+						
+						<h2><a name="palm_mute" id="palm_mute">Palm mute</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Palm mute is an effect which is produced by placing the palm of a picking hand across the strings very close to the bridge. The strings retain their pitch, but the sound is more or less muted.
+						</p>
+						
+						<p>
+						In TuxGuitar you can apply a palm mute effect on any note. It is removed the same way.
+						</p>
+						
+						<p>
+						Palm mute effect is displayed with “<strong>P.M.</strong>” sign in scores or tab.
+						</p>
+						
+						</div>
+						
+						<h2><a name="staccato" id="staccato">Staccato</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Staccato is a playin technique where the player plays in a distinctive, “hopping” manner, trying to make note duration shorter than it should be normally.
+						</p>
+						
+						<p>
+						In TuxGuitar staccato effect makes the note duration 50% of its original duration. When staccato effect is applied, a dot shows up above the note in the scores view. When applied again, it is cleared.
+						</p>
+						
+						</div>
+						
+						<h2><a name="tapping" id="tapping">Tapping</a></h2>
+						<div class="level2">
+						
+						<p>
+						  Tapping is a guitar playing technique used more often on electric instruments. It is played using both hands on the fretboard, with a picking hand making hard hammer-ons and pull-offs.
+						</p>
+						
+						<p>
+						In TuxGuitar tapping has no effect on note. Instead, it just marks the tone which should be tapped with a picking hand. Tapped note is marked with a letter “<strong>T</strong>” above tapped note. Tapped notes can be combined with a slide, bend or hammer on/pull of if you need.
+						</p>
+						
+						</div>
+						
+						<h2><a name="slapping_and_popping" id="slapping_and_popping">Slapping and popping</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Slapping and popping are techniques most commonly used on bass guitar. Slapping assumes hitting a string with the thumb of the strumming hand near the base of the guitar’s neck. Popping is often combined with slapping, and assumes snapping the strings (usually) with the index or middle finger of the same hand.
+						</p>
+						
+						<p>
+						In TuxGuitar both slapping and popping don’t really affect the sound, but only mark the style of playing. Above the slapping notes letter “<strong>S</strong>” is placed, and above popping letter “<strong>P</strong>“.
+						</p>
+						
+						</div>
+						
+						<h2><a name="fade_in" id="fade_in">Fade in</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Fade in is an effect which gradually increases the volume of a note, from zero to the current volume (depends on note dynamics). The effect is applied to each note independantly, and cleared in the same way. Note with a fade in is marked with a “<strong><</strong>” sign above the tab. 
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/edit_matrix.html b/TuxGuitar-testing/platform-all/share/help/edit_matrix.html
new file mode 100644
index 0000000..0773470
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/edit_matrix.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Matrix Editor</h1>
+						<div class="level1">
+						
+						<p>
+						 Matrix Editor is a useful tool for editing the percussion tracks. It can alse edit the ordinary tracks, but it is much less useful. It is accessed by <strong>Layout→Show_Matrix</strong> menu.
+						</p>
+						
+						<p>
+						Basically, it divides the current measure into segments and displays the possible percussion sounds. Not only you can view the measure and the sounds in the matrix, but by clicking on one block of the matrix you add/remove the sound from the tab.
+						</p>
+						
+						<p>
+						<img src="images/edit/matrix_editor.png"/>
+						</p>
+						
+						<p>
+						It is very important to remember that Matrix Editor does not “lock” the main TuxGuitar window, which means you can use <strong>Note duration</strong> and <strong>Note dynamics</strong> icons from the toolbar, and change the current measure/instrument as well.
+						</p>
+						
+						<p>
+						You can also change the current measure with left/right arrows in the top-left corner of the dialog, and the note duration by the note duration up/down arrows (between the arrows is current note duration).
+						</p>
+						
+						<p>
+						<strong>Number of grids</strong> value in the dialog helps you to determine the position where you should click - it divides one basic duration (denominator of Time Signature) into <em>number</em> segments.
+						</p>
+						
+						<p>
+						Border on the top and the bottom of the Matrix Editor view component (black on the picture) marks your current cursor position - which does not affect your clicking, only writing the numbers in the tab.
+						</p>
+						
+						<p>
+						The hammer icon on the top-right corner of the dialog opens the settings for the Matrix Mixer. There you can adjust colours and font of the Matrix Editor dialog. 
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/editing_song.html b/TuxGuitar-testing/platform-all/share/help/editing_song.html
new file mode 100644
index 0000000..8d58133
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/editing_song.html
@@ -0,0 +1,264 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Editing a whole song</h1>
+						
+						<div class="level1">
+						
+						<p>
+						 Song is consisted out of tracks, so when you are editing a song most of the time you edit the tracks, one by one, which is explained in the <a class="PageLink" href="editing_track.html">Editing a track</a> section. But there are some options that affect the song as a whole.
+						</p>
+						
+						</div>
+						
+						<h2><a name="managing_the_tracks" id="managing_the_tracks">Managing the tracks</a></h2>
+						<div class="level2">
+						
+						<p>
+						 <img src="images/start/tb_add_track.png"/>
+						</p>
+						
+						<p>
+						Each song consists out of one or more tracks. In any moment you can add or remove track, create new one by copying contents of the selected one (clone track). If you want to add a percussion track, you have to check the <strong>Percussion Track</strong> box in the Track Properties.
+						</p>
+						
+						<p>
+						All the tracks are displayed in the instrument list, located on the bottom of the application window. You can rearrange the order of the instruments on that list by choosing <strong>Track/Move Up-Down</strong> from the main menu. If you double-click on the instrument name on the list, <strong>Track properties</strong> dialog will appear, where you can modify instrument, track name, colour and tunning.
+						</p>
+						
+						</div>
+						<!--
+						<h2><a name="choosing_the_channels" id="choosing_the_channels">Choosing the channels:</a></h2>
+						<div class="level2">
+						
+						<p>
+						<img src="images/edit/sed_instrument_list.jpg" title="" alt="" width="620" height="144" />
+						</p>
+						
+						<p>
+						There are some numbers in combo boxes on the instrument list - those are channels for the instrument.
+						</p>
+						
+						<p>
+						To understand the way of distributing channels properly, you have to know something about MIDI specification.
+						</p>
+						
+						<p>
+						MIDI uses channels to play music - each <strong>channel has currently assigned instrument (voice)</strong>. There are 16 different channels (marked 0..15) - channel 9 is reserved for drums and percussion.
+						</p>
+						
+						<p>
+						For example, to be able to play a <a href="edit_effects.html#dead_note">dead note</a> and a tone in the same time, TuxGuitar has to occupy two channels for a track, because dead note is one instrument (voice) and guitar tone is another instrument. So every track has its <strong>Channel</strong> (marked green on the picture above), but also needs the <strong>Effect channel</strong> (marked orange on the picture above). Because there are only 16 channels it leads you to conclusion th [...]
+						</p>
+						
+						<p>
+						It means that as long as you don’t have more than 7 instruments and a percussion, you don’t have to worry about distributing MIDI channels - TuxGuitar distributes the channels in order. But if you have more tracks you have to be careful. By overlapping MIDI channels you can achieve MIDI reproduction without any problems, but you have to understand the problem.
+						</p>
+						
+						</div>
+						
+						<h5><a name="effect_channel" id="effect_channel">Effect channel</a></h5>
+						<div class="level5">
+						
+						<p>
+						 <strong>Effect channel</strong> is used in certain occasions. One ocasion is when <strong>two different voices</strong> are played in the same time in the same track. In TuxGuitar that can happen if you play dead note or harmonic in the same time with an ordinary instrument tone. 
+						</p>
+						
+						<p>
+						The other occasion effect channel is used is when you apply some <strong>pitch effect</strong> (like bend, slide, vibrato or tremolo bar) on <em class="u"><strong>some of the notes</strong></em> played in the same time in same track/channel. The reason for this is because by MIDI specification effect can be applied only on channel, not on note. So TuxGuitar automatically moves note to Effect channel and apply pitch effect on him. That is also the reason why you cannot apply slide a [...]
+						</p>
+						
+						</div>
+						
+						<h4><a name="how_to_overlap_channels" id="how_to_overlap_channels">How to overlap channels?</a></h4>
+						<div class="level4">
+						
+						<p>
+						 The safest way is to overlap channels of two tracks that are never played in the same time. The only problem is that <strong>mixer settings</strong> (volume, pan and solo/mute) would have the same value for both the instruments (tracks).
+						</p>
+						
+						<p>
+						You can also try to assign the same channel for channel (CH) and effects channel (EC) if you don’t use effects like dead note, harmonics in the same time with an ordinary instrument note, or you don’t need to apply “pitch” effect on only some notes played in the same time with notes without pitch effect. If you do use effects but set the same CH and EC, dead note and harmonics probably wouldn’t be heard, and pitch effects would apply on all the notes i [...]
+						</p>
+						
+						</div>
+						-->
+						<h2><a name="mixer_dialog" id="mixer_dialog">Mixer dialog:</a></h2>
+						<div class="level2">
+						
+						<p>
+						<img src="images/edit/sed_mixer_dialog.png" title="" alt="" />
+						</p>
+						
+						<p>
+						Mixer dialog can be accessed by choosing <em>Layout/Show mixer</em> from the main menu, or by clicking on the icon in the toolbar (in the middle on the picture below).
+						</p>
+						
+						<p>
+						<img src="images/start/tb_view.png" width="91" height="27" />
+						</p>
+						
+						<p>
+						The most insteresting feature of the Mixer dialog is adjusting <strong>volume</strong> for each track (to be more precise: for each MIDI channel). 
+						</p>
+						
+						<p>
+						You can also set <strong>pan</strong> for each track - balance between left and right speaker.
+						</p>
+						
+						<p>
+						In Mixer dialog you can choose to <strong>Mute</strong> (turn off) a specific instrument, and also to play only single instrument by choosing <strong>Solo</strong>.
+						</p>
+						
+						<p>
+						<strong>Metronome</strong> is also placed in Mixer dialog. By clicking on the button you enable and disable it - it is played with each beat determined by denominator in song’s <a class="PageLink" href="editing_track.html#before_you_start_with_notes">time signature</a> (e.g. metronome will go in every 1/8 for 7/8 key signature).
+						</p>
+						
+						<p>
+						<em>Changing volume or instrument in the middle of a song is still unsupported by TuxGuitar, but it most probably will in some later versions.</em>
+						</p>
+						
+						<h4 name="choosing_the_channels" id="choosing_the_channels">Choosing the channels:</h4>
+						
+						<div class="level2">
+						
+						<p>
+						There are some numbers in combo boxes on the mixer dialog - those are channels for the track.
+						</p>
+						
+						<p>
+						To understand the way of distributing channels properly, you have to know something about MIDI specification.
+						</p>
+						
+						<p>
+						MIDI uses channels to play music - each <strong>channel has currently assigned instrument (voice)</strong>. There are 16 different channels (marked 0..15) - channel 9 is reserved for drums and percussion.
+						</p>
+						
+						<p>
+						For example, to be able to play a <a class="PageLink" href="edit_effects.html#dead_note">dead note</a> and a tone in the same time, TuxGuitar has to occupy two channels for a track, because dead note is one instrument (voice) and guitar tone is another instrument. So every track has its <strong>Channel</strong> (marked green on the picture above), but also needs the <strong>Effect channel</strong> (marked orange on the picture above). Because there are only 16 channels it leads you [...]
+						</p>
+						
+						<p>
+						It means that as long as you don’t have more than 7 instruments and a percussion, you don’t have to worry about distributing MIDI channels - TuxGuitar distributes the channels in order. But if you have more tracks you have to be careful. By overlapping MIDI channels you can achieve MIDI reproduction without any problems, but you have to understand the problem.
+						</p>
+						
+						</div>
+						
+						<h5 name="effect_channel" id="effect_channel">Effect channel</h5>
+						<div class="level4">
+						
+						<p>
+						 <strong>Effect channel</strong> is used in certain occasions. One ocasion is when <strong>two different voices</strong> are played in the same time in the same track. In TuxGuitar that can happen if you play dead note or harmonic in the same time with an ordinary instrument tone. 
+						</p>
+						
+						<p>
+						The other occasion effect channel is used is when you apply some <strong>pitch effect</strong> (like bend, slide, vibrato or tremolo bar) on <em class="u"><strong>some of the notes</strong></em> played in the same time in same track/channel. The reason for this is because by MIDI specification effect can be applied only on channel, not on note. So TuxGuitar automatically moves note to Effect channel and apply pitch effect on him. That is also the reason why you cannot apply slide a [...]
+						</p>
+						
+						</div>
+						
+						<h5 name="how_to_overlap_channels" id="how_to_overlap_channels">How to overlap channels?</h5>
+						<div class="level4">
+						
+						<p>
+						 The safest way is to overlap channels of two tracks that are never played in the same time. The only problem is that <strong>mixer settings</strong> (volume, pan and solo/mute) would have the same value for both the instruments (tracks).
+						</p>
+						
+						<p>
+						You can also try to assign the same channel for channel (CH) and effects channel (EC) if you don’t use effects like dead note, harmonics in the same time with an ordinary instrument note, or you don’t need to apply “pitch” effect on only some notes played in the same time with notes without pitch effect. If you do use effects but set the same CH and EC, dead note and harmonics probably wouldn’t be heard, and pitch effects would apply on all the notes i [...]
+						</p>
+						
+						</div>
+						
+						</div>
+						
+						<h2><a name="composition_properties" id="composition_properties">Composition properties:</a></h2>
+						<div class="level2">
+						
+						<p>
+						 You don’t want your transcription to be distributed in cyberspace without any credits. :)
+						</p>
+						
+						<p>
+						By selecting <em>Composition/Properties</em> from the main menu or clicking on appropriate icon you invoke dialog that containst information about the current song.
+						</p>
+						
+						<p>
+						<img src="images/start/tb_properties.png" class="media" title="" alt="" width="28" height="26" />
+						</p>
+						
+						<p>
+						Every song should have name, author and transcriber set, both for archiving and printing purpose. Read <a class="PageLink" href="start_toolbars.html#song_properties">more details</a>.
+						</p>
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/editing_track.html b/TuxGuitar-testing/platform-all/share/help/editing_track.html
new file mode 100644
index 0000000..4ce2d55
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/editing_track.html
@@ -0,0 +1,286 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Editing a track</h1>
+						
+						<p>
+						Each song consists of one or more tracks. 
+						</p>
+						
+						<p>
+						Each track is assigned to one instrument. Each instrument sounds the different way.
+						</p>
+						
+						<h2><a name="before_you_start_with_notes" id="before_you_start_with_notes">Before you start with notes:</a></h2>
+						
+						<p>
+						 Before you start inserting notes into a new song, you have to adjust some settings. These are accessed through <em>Composition</em> menu.
+						</p>
+						
+						<p>
+						<strong>Time signature</strong> has to be defined for each song. Usually it is 4/4, but sometimes it has some different value (3/4 for waltz, 7/8, etc.) Time signature applies for all the tracks. It can be changed in the middle of the song - when you change the value time signature will be changed <em class="u">from the current place in the song until the end</em>.
+						</p>
+						
+						<p>
+						<strong>Tempo</strong> is another value each song possess. It indicates how many beats (1/4 notes) song has in a minute - it is marked in BPM’s - Beats Per Minute. Tempo also applies for all the tracks in the song, and also can be changed. When you change the value tempo will be changed <em class="u">from the current place in the song until the end</em>.
+						</p>
+						
+						<p>
+						<strong>Clef</strong> affects the song display in scores. Clefs are used to mark the specific pitch of the note, so all other notes’ pitch can be determined. Clef is placed on the beginning of the scores. There are three types of clef supported in TuxGuitar: treble (default), bass, alto and tenor, which are the most usual clefs. Custom clefs are not supported. Clef can be changed in the middle of the song - when it’s changed the scores display changes from that position [...]
+						</p>
+						
+						<p>
+						<strong>Key signature</strong> affects the way the notes are written in scores. They represent the current scale the song is written in, so there’s no need to constantly write <em>sharp</em> and <em>flat</em> marks. When you choose to change the key signature, dialog appears with existing key signatures. <strong>Natural</strong>, for example, represents the C-major, <strong>one flat</strong> represents F-major, etc.
+						</p>
+						
+						<p>
+						<strong>Triplet feel</strong> (also: <em><strong>shuffle</strong> notes</em> or <em><strong>swung</strong> notes</em>) is the rhythmic device in which the duration of the initial note in a pair is augmented and that of the second is diminished. This effect is often used in jazz and blues music. TuxGuitar triplet feel divides the note par in 2:1 ratio. <em class="u"><strong>Triplet 8th</strong></em> divides a pair of 1/8 notes and <em class="u"><strong>Triplet 16th</strong></em> div [...]
+						
+						<h4><a name="track_properties" id="track_properties">Track properties</a></h4>
+						
+						<p>
+						<strong>Track properties</strong> are the most important and should be adjusted for each track: track name, display color, instrument (from the list of instruments), number of strings and tuning. You can access this dialog by choosing Track/Properties in the main menu.
+						</p>
+						
+						<h2><a name="putting_the_notes_in" id="putting_the_notes_in">Putting the notes in:</a></h2>
+						
+						
+						<h3><a name="note_and_measure_duration" id="note_and_measure_duration">Note and measure duration</a></h3>
+						
+						<p>
+						 The most important property of a note is its duration. The sum of duration of all the notes in a measure is determined by the measure’s time signature. TuxGuitar has a system that protects the user of making an irregular measure (longer or shorter).
+						</p>
+						
+						<p>
+						Therefore, every new 4/4 measure can contains only one whole note. When you select a duration of a note you want to enter, TuxGuitar adjusts all the pauses between the current position and the end of a measure (or the next note entered) so you can insert as many notes as possible.
+						</p>
+						
+						<p>
+						You can change time signature in Composition→Time signature (or on 4/4 icon), and note duration in menu Note→Duration→(wanted duration). Note duration icons are also located on the main application toolbar.
+						</p>
+						
+						<h3><a name="navigating" id="navigating">Navigating</a></h3>
+						
+						<p>
+						 You can change the current position of a note you want to enter by clicking on the desired location, or by navigating with arrows of a keyboard. Simply pressing the arrows left and right puts you on the next note in the current track, but Ctrl+(left or right) takes you to the previous or next measure.
+						</p>
+						
+						<p>
+						Arrows up and down navigate you through the strings in tablature editor.
+						</p>
+						
+						<h3><a name="writing_numbers" id="writing_numbers">Writing numbers</a></h3>
+						
+						<p>
+						 <img src="images/edit/typing.png"/>
+						</p>
+						
+						<p>
+						<strong>Tablature editor</strong> is represented by the number of the strings instrument possess. Each line is a string - when you type a number on a string <strong>[0 .. 29]</strong> editor puts on that string a note which is heard if you press a string on typed fret. The note has selected duration and dynamics you can modify afterwards. 
+						</p>
+						
+						<p>
+						If you navigate to an existing note (written as a number) and press Shift+(left or right) you will increase/decrease the pitch (fret) on the current string. If you press Shift+(up or down) you will move the fret value to the string up or down.
+						</p>
+						
+						<h3><a name="clicking_on_the_scores" id="clicking_on_the_scores">Clicking on the scores</a></h3>
+						
+						<p>
+						 To be able to insert notes by clicking on the scores, you should be in the <strong>Score Edition Mode</strong> (you can change mode in Edit menu). When Score Edition Mode is enabled, you can check and uncheck the <strong>Sharp/Flat mode</strong> (in Edit menu, also) by which you can insert sharp notes.
+						</p>
+						
+						<p>
+						Notes are inserted by left-clicking on the score’s line or between two lines. If you decide to write notes above or below five existing lines, aditional lines will appear. By clicking a note will appear on the selected place, and also in the tablature editor by appropriate number on appropriate string.
+						</p>
+						
+						<h3><a name="note_dynamics" id="note_dynamics">Note dynamics</a></h3>
+						
+						<p>
+						 Very important property of a note is it’s dynamics: the “loudness” of a note. For each note you can put wanted dynamics.
+						</p>
+						
+						<p>
+						<img src="images/start/tb_dynamics.png"/>
+						</p>
+						
+						<p>
+						When you create a note, it will have dynamics previously selected. If you click on other dynamics’ icon when positioned on existing note, the note will change its dynamics. In TuxGuitar dynamics is marked in standard manner (<strong><em>mp</em></strong> for <em>mezzo-piano</em>, <strong><em>fff</em></strong> for <em>forte fortissimo</em> etc.)
+						</p>
+						
+						<h3><a name="dotted_and_double-dotted_note" id="dotted_and_double-dotted_note">Dotted and double-dotted note</a></h3>
+						
+						<p>
+						 Dotted note has extended duration by 50%. It means that if you mark a 1/2 note as dotted, its duration will be 1/2 + 1/4 = 3/4. 
+						</p>
+						
+						<p>
+						Double dotted note has duration extended by 75%. That means that 1/4 double dotted note will have duration of 1/4 + 1/8 + 1/16 = 7/16.
+						</p>
+						
+						<h3><a name="tied_note" id="tied_note">Tied note</a></h3>
+						
+						<p>
+						 When a note is played on the end of one measure but lasts in the next measure also, you have to use a <strong>tied note</strong>. You achieve the effect by putting the note on the end of a first measure and then put the same note on the beginning of next measure. <u>Then you mark</u> the second note as a tied note.
+						</p>
+						
+						<p>
+						You can also use a tied note in the situation you need a note which has duration of a 5/16 note - a duration you cannot achieve by dotted or double dotted note. Then you tie a 1/4 and 1/16 note.
+						</p>
+						
+						<h3><a name="insert_chord" id="insert_chord">Insert chord</a></h3>
+						
+						<p>
+						 You can also put some notes into the song by inserting a chord. Chord’s duration and dynamics will be those currently selected.
+						</p>
+						
+						<p>
+						<img src="images/edit/insert_named_chord.png"/>
+						</p>
+						
+						<p>
+						You can insert a chord defined earlier (as on picture) or you can use chord wizard to generate a new chord (and even define a name for it for later use). Read more about <a class="PageLink" href="edit_chord.html">Chord Editor dialog</a> in other entry.
+						</p>
+						
+						<h2><a name="after_putting_the_notes" id="after_putting_the_notes">After putting the notes:</a></h2>
+						
+						<p>
+						 After writing the things you wanted, you will probably want to hear what’s done. After checking you will probably want to change something - listening and correction makes it perfect.
+						</p>
+						
+						<h3><a name="effects" id="effects">Effects</a></h3>
+						
+						<p>
+						 Playing guitar isn’t just playing a note in a right time. There are some little tricks we all use, like bend, palm mute etc. TuxGuitar supports most of them. Many effects are applied on the current note. Read more about <a class="PageLink" href="edit_effects.html">Note effects</a> in this help.
+						</p>
+						
+						<h3><a name="repeat" id="repeat">Repeat</a></h3>
+						
+						<p>
+						 Sometimes in a song all the instrument are played the same way several times (e.g. in chorus). It is more elegant to mark that segment of a song for repetition than to copy/paste that passage again.
+						</p>
+						
+						<p>
+						Repeat is set over one or more measures. It has a beginning, an end and information how many times <em class="u">to repeat</em>. So if you want a passage to be played twice, you start repeat and end it on appropriate place. When asked how many times to repeat you should set 1 if you want it to be played twice.
+						</p>
+						
+						<p>
+						Repeats are even more convenient to use with <strong>alternative endings</strong> - you define different ending measures for each repeat. So after you close a repeat and mark it as an alternative ending the editor will appear to select at which repeats this ending will play. It is a little hard to explain, but if you try the option you will find it self-explanatory.
+						</p>
+						
+						<p>
+						<img src="images/edit/repeats.png"/>
+						</p>
+						
+						<h3><a name="lyrics" id="lyrics">Lyrics</a></h3>
+						
+						<p>
+						 TuxGuitar supports writing lyrics in a track, so you can make a track which contains lyrics and the melody of singing. Lyrics editor is accessed by selecting <em>Track/Lyrics</em> from the main menu.
+						</p>
+						
+						<p>
+						The way the lyrics will be displayed <strong>depends on the content of the measure</strong>. Every word seperated by <em>space</em> or <em>enter</em> belongs to one note in a measure.
+						</p>
+						
+						<p>
+						<img src="images/edit/ed_lyrics.png"/>
+						</p>
+						
+						<p>
+						You have to select the number of a measure where lyrics start. When you type text, it starts below the first note in a measure you have set, and after each <em>space</em> or <em>enter</em> key the next word is displayed below the next <strong>note</strong>. Pauses are ignored. When you type text below every note in a measure, the text automatically move to the next measure.
+						</p>
+						
+						<p>
+						If you want to have some notes without a text below, you should put more <em>space</em> characters.
+						</p>
+						
+						<h3><a name="text" id="text">Text</a></h3>
+						
+						<p>
+						 Similar as lyrics, but the text is not tied to notes. It is most often used as a note to the player or a comment to tab. It is displayed above the note it is assigned to.
+						</p>
+						
+						<h3><a name="just_one_instrument" id="just_one_instrument">Just one instrument?</a></h3>
+						
+						<p>
+						 Well, probably not. But you have to write something to be able to write some more. You will probably want to add more instruments (tracks) and enter the wonderfull world of multi-track editing. :)
+						</p>
+						
+						<p>
+						But even if you have only one track in a song, it is still a song. Song have some of its own properties and editing, so you should check <a class="PageLink" href="editing_song.html">section about editing a song</a>.
+						</p>
+						
+						<h3><a name="the_percussion_track" id="the_percussion_track">The Percussion track</a></h3>
+						
+						<p>
+						 The track for drums and percussions is treated a little bit differently in TuxGuitar than the other, “ordinary” tracks. It always has to be on MIDI channel 9 - that is achieved by checking the <strong>Percussion Track</strong> option in the Track→Properties. There is a special tool for editing the percussion track - besides the usual editing (by entering numbers on the tab), you can also use the Matrix Editor from <strong>Layout→Show_Matrix menu</strong>. Rea [...]
+						</p>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/file_formats.html b/TuxGuitar-testing/platform-all/share/help/file_formats.html
new file mode 100644
index 0000000..30fb328
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/file_formats.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1><a name="supported_file_formats_in_tuxguitar" id="supported_file_formats_in_tuxguitar">Supported file formats in TuxGuitar</a></h1>
+						
+						
+						<div class="level1">
+						
+						<p>
+						 Besides TuxGuitar’s own file format (with *.tg extension), TuxGuitar can work with various tablature and music file formats.
+						</p>
+						
+						</div>
+						
+						<h2><a name="tablatures" id="tablatures">Tablatures</a></h2>
+						<div class="level2">
+						
+						<p>
+						 <strong>old Guitar Pro</strong> (.gtp) - load
+						</p>
+						
+						<p>
+						<strong>Guitar Pro 3</strong> (.gp3) - load and save
+						</p>
+						
+						<p>
+						<strong>Guitar Pro 4</strong> (.gp4) - load and save
+						</p>
+						
+						<p>
+						<strong>Guitar Pro 5</strong> (.gp5) - load and save
+						</p>
+						
+						<p>
+						<strong>PowerTab</strong> (.ptb) - load
+						</p>
+						
+						<p>
+						<strong>TableEdit</strong> (.tef) - load
+						</p>
+						
+						<p>
+						<strong>LilyPond</strong> (.ly) - export
+						</p>
+						</div>
+						
+						<h2><a name="music_and_sheet" id="music_and_sheet">Music and sheet</a></h2>
+						<div class="level2">
+						
+						<p>
+						 <strong>MIDI</strong> (.mid) - import and export
+						</p>
+						
+						<p>
+						<strong>ASCII</strong> (.txt) - export
+						</p>
+						
+						<p>
+						<strong>MusicXML</strong> (.xml) - export
+						</p>
+						
+						<p>
+						<strong>Adobe PDF</strong> (.pdf) - export
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/chord_dialog.png b/TuxGuitar-testing/platform-all/share/help/images/edit/chord_dialog.png
new file mode 100644
index 0000000..9e9d0bb
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/chord_dialog.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/chord_settings_dialog.png b/TuxGuitar-testing/platform-all/share/help/images/edit/chord_settings_dialog.png
new file mode 100644
index 0000000..74c4290
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/chord_settings_dialog.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/ed_lyrics.png b/TuxGuitar-testing/platform-all/share/help/images/edit/ed_lyrics.png
new file mode 100644
index 0000000..0ca3cf0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/ed_lyrics.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/effects_bend.png b/TuxGuitar-testing/platform-all/share/help/images/edit/effects_bend.png
new file mode 100644
index 0000000..ec500c0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/effects_bend.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/effects_grace.png b/TuxGuitar-testing/platform-all/share/help/images/edit/effects_grace.png
new file mode 100644
index 0000000..6c5f253
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/effects_grace.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/effects_tremolobar.png b/TuxGuitar-testing/platform-all/share/help/images/edit/effects_tremolobar.png
new file mode 100644
index 0000000..83d1490
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/effects_tremolobar.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/insert_named_chord.png b/TuxGuitar-testing/platform-all/share/help/images/edit/insert_named_chord.png
new file mode 100644
index 0000000..21b0b77
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/insert_named_chord.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/matrix_editor.png b/TuxGuitar-testing/platform-all/share/help/images/edit/matrix_editor.png
new file mode 100644
index 0000000..290cb28
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/matrix_editor.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/repeats.png b/TuxGuitar-testing/platform-all/share/help/images/edit/repeats.png
new file mode 100644
index 0000000..e0aef24
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/repeats.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/sed_mixer_dialog.png b/TuxGuitar-testing/platform-all/share/help/images/edit/sed_mixer_dialog.png
new file mode 100644
index 0000000..fd04e71
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/sed_mixer_dialog.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/edit/typing.png b/TuxGuitar-testing/platform-all/share/help/images/edit/typing.png
new file mode 100644
index 0000000..a1f8210
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/edit/typing.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/fs_new_file.png b/TuxGuitar-testing/platform-all/share/help/images/start/fs_new_file.png
new file mode 100644
index 0000000..4bab96a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/fs_new_file.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/fs_song_table.png b/TuxGuitar-testing/platform-all/share/help/images/start/fs_song_table.png
new file mode 100644
index 0000000..d1e678e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/fs_song_table.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/fs_track_properties.png b/TuxGuitar-testing/platform-all/share/help/images/start/fs_track_properties.png
new file mode 100644
index 0000000..5f2a93f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/fs_track_properties.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/p_mode.png b/TuxGuitar-testing/platform-all/share/help/images/start/p_mode.png
new file mode 100644
index 0000000..b081f11
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/p_mode.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_add_track.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_add_track.png
new file mode 100644
index 0000000..2c15a14
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_add_track.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_composition.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_composition.png
new file mode 100644
index 0000000..7923223
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_composition.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_duration.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_duration.png
new file mode 100644
index 0000000..2a01305
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_duration.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_dynamics.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_dynamics.png
new file mode 100644
index 0000000..88301a2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_dynamics.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_edit_menu.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_edit_menu.png
new file mode 100644
index 0000000..ab1a9ad
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_edit_menu.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_edit_mode.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_edit_mode.png
new file mode 100644
index 0000000..2c85800
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_edit_mode.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_effects.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_effects.png
new file mode 100644
index 0000000..7011100
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_effects.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_file_menu.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_file_menu.png
new file mode 100644
index 0000000..8fca751
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_file_menu.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_layout.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_layout.png
new file mode 100644
index 0000000..3e12a4d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_layout.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_markers.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_markers.png
new file mode 100644
index 0000000..3be92e2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_markers.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_note.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_note.png
new file mode 100644
index 0000000..e0d6ec4
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_note.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_properties.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_properties.png
new file mode 100644
index 0000000..357ed7b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_properties.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_props_diff.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_props_diff.png
new file mode 100644
index 0000000..23838cf
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_props_diff.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_transport.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_transport.png
new file mode 100644
index 0000000..407dad6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_transport.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/start/tb_view.png b/TuxGuitar-testing/platform-all/share/help/images/start/tb_view.png
new file mode 100644
index 0000000..5dad286
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/start/tb_view.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/tools/converter.png b/TuxGuitar-testing/platform-all/share/help/images/tools/converter.png
new file mode 100644
index 0000000..49a4203
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/tools/converter.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/tools/keybinding_editor.png b/TuxGuitar-testing/platform-all/share/help/images/tools/keybinding_editor.png
new file mode 100644
index 0000000..c81c04d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/tools/keybinding_editor.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/tools/plugins_dialog.png b/TuxGuitar-testing/platform-all/share/help/images/tools/plugins_dialog.png
new file mode 100644
index 0000000..9fac8d0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/tools/plugins_dialog.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/images/tools/settings_skin.png b/TuxGuitar-testing/platform-all/share/help/images/tools/settings_skin.png
new file mode 100644
index 0000000..dfd2037
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/help/images/tools/settings_skin.png differ
diff --git a/TuxGuitar-testing/platform-all/share/help/index.html b/TuxGuitar-testing/platform-all/share/help/index.html
new file mode 100644
index 0000000..c40fb4d
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/index.html
@@ -0,0 +1,6 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Refresh" content="0; URL=about.html" />
+	</head>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/license.html b/TuxGuitar-testing/platform-all/share/help/license.html
new file mode 100644
index 0000000..d4a6a7f
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/license.html
@@ -0,0 +1,645 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>GNU Lesser General Public License</h1>
+						
+						<h2>Version 2.1, February 1999</h2>
+						
+						  <p>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.</p>
+						
+						
+						  <p>[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.]</p>
+						
+						<h2>Preamble</h2>
+						
+						<p> 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. </p>
+						
+						
+						 
+						<p>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.
+						</p>
+						
+						<p> 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.</p>
+						
+						
+						 
+						<p>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.
+						</p>
+						
+						<p> 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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						<p>
+						 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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						 
+						<p>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.
+						</p>
+						
+						 
+						<p>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. </p>
+						
+						
+						<p> 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.
+						</p>
+						
+						 
+						<p>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. </p>
+						
+						
+						<h2>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</h2>
+						
+						<p><strong>0.</strong> 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".</p>
+						
+						
+						<p> 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. </p>
+						
+						
+						<p> 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".) </p>
+						
+						
+						<p> "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.</p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						<p><strong>1.</strong> 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.
+						</p>
+						
+						<p> 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. </p>
+						
+						
+						<p><strong>2.</strong> 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:
+						</p>
+						
+						
+						
+						  <p>a) The modified work must itself be a software library. </p>
+						
+						  <p>b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.</p>
+						
+						  <p>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. </p>
+						
+						  <p>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. </p>
+						
+						
+						
+						  <p> (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.) </p>
+						
+						  <p> 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.
+						  </p>
+						
+						   
+						  <p>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.
+						  </p>
+						
+						  <p> 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.
+						  </p>
+						
+						
+						<p><strong>3.</strong> 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. </p>
+						
+						
+						 
+						<p>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.
+						</p>
+						
+						<p> This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
+						</p>
+						
+						<p><strong>4.</strong> 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.
+						</p>
+						
+						
+						 
+						<p>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.</p>
+						
+						
+						<p><strong>5.</strong> 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. </p>
+						
+						
+						<p> 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. </p>
+						
+						
+						<p> 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. </p>
+						
+						
+						<p> 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.) </p>
+						
+						
+						<p>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. </p>
+						
+						
+						<p><strong>6.</strong> 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. </p>
+						
+						<p>
+						 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: </p>
+						
+						
+						
+						  <p>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.) </p>
+						
+						
+						  <p>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. </p>
+						
+						  <p>
+						  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. </p>
+						
+						
+						  <p>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. </p>
+						
+						
+						  <p>e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.</p>
+						
+						
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						<p> 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. </p>
+						
+						
+						<p><strong>7.</strong> 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: </p>
+						
+						
+						
+						  <p>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. </p>
+						
+						
+						  <p>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.</p>
+						
+						
+						
+						<p><strong>8.</strong> 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. </p>
+						
+						<p>
+						<strong>9.</strong> 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. </p>
+						
+						<p>
+						<strong>10.</strong> 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. </p>
+						
+						
+						<p><strong>11.</strong> 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. </p>
+						
+						<p>
+						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. </p>
+						
+						
+						<p>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. </p>
+						
+						
+						<p>This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. </p>
+						
+						<p>
+						<strong>12.</strong> 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. </p>
+						
+						<p>
+						<strong>13.</strong> 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.</p>
+						
+						
+						<p>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. </p>
+						
+						<p>
+						<strong>14.</strong> 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. </p>
+						
+						<p>
+						NO WARRANTY </p>
+						
+						<p>
+						<strong>15. </strong>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. </p>
+						
+						<p>
+						<strong>16.</strong> 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. </p>
+						
+						
+						<h2>END OF TERMS AND CONDITIONS</h2>
+						
+						<p>
+						TuxGuitar is a multitrack tablature editor and player.<br/>
+						Copyright (C) 2005, By Julián Gabriel Casadesús
+						</p>
+						<p>
+						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.
+						</p>
+						<p>
+						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.
+						</p>
+						<p>
+						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
+						</p>
+						
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/start_first_steps.html b/TuxGuitar-testing/platform-all/share/help/start_first_steps.html
new file mode 100644
index 0000000..21e1f9b
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/start_first_steps.html
@@ -0,0 +1,172 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>The First Steps</h1>
+						
+						<h2>Creating a new file:</h2>
+						
+						<p>
+						 The first thing you need to do is make sure you have a brand new file to work on. 
+						 When you launch TuxGuitar, you should already have a blank tablature document ready for editing. However, 
+						 if you need to start over with another blank document, all you have to do is click the “New” button (highlighted in red below).
+						</p>
+						
+						<p>
+						 <img src="images/start/fs_new_file.png" />
+						</p>
+						
+						<p>
+						 Wow. That was easy. Now that we have blank document, we just need to set up our first track. Then the real fun can begin.
+						</p>
+						<h2>Preparing your first track for playback:</h2>
+						
+						<p>
+						 At the bottom of the screen, you should see a track list window that will look like the one below. 
+						</p>
+						
+						<p>
+						 <img src="images/start/fs_song_table.png" />
+						</p>
+						
+						<p>
+						 The track list is a very useful yet compact information center which provides quick access to many of the most important aspects of your song. 
+						 There is a lot to be said about the track list, but we will not dig too deep into it right now, lest we should confuse newcomers. So for now, 
+						 let it suffice to say that the track window will help us stay organized while we edit our tablature.
+						</p>
+						
+						<p>
+						As you have probably noticed, there is already one track ready for you when you start a new tab document. You can just think of tracks as instruments. If you have a song with two guitars and one bassline that need transcribing, you will need three tracks. Fairly simple concept. It gets better though: as long as you have a soundbank installed for your Java Virtual Machine, each track will play back a sound when you play the file in TuxGuitar. Now, let’s get into setting this u [...]
+						</p>
+						
+						<p>
+						So: double-click anywhere on “Track 1” or “Piano” to open the track properties dialog, as seen below.
+						</p>
+						
+						<h2>Using The Track Properties Dialog:</h2>
+						
+						<p>
+						 <img src="images/start/fs_track_properties.png" />
+						</p>
+						
+						<p>
+						The Properties dialog is where we will go to setup how we want each track to playback. There are three main sections in the Properties box, 
+						and they are laid out as follows (red boxes added for clarity):
+						</p>
+						
+						<h3>#1: Name of the track:</h3>
+						
+						<p>
+						Whatever you type in the box here is what will show up in the track list we looked at earlier. As you can see, 
+						we have named our track “Rhythm Guitar,” but you can name it anything you like. 
+						You can also set the color the track will display in the track list.
+						</p>
+						
+						
+						<h3>#2: Instrument (i.e.-the sound the track will play back):</h3>
+						
+						
+						<p>
+						This is the sound that your track will play back from your jvm soundbank. Most soundbanks have a plethora of sounds which go far beyond just guitars, 
+						so be as creative as you want. Don’t expect the sound quality to be too superb, though. In most cases, 
+						these sounds will be less than “realistic”. This is really only for referencing purposes. 
+						(It is possible to have this trigger other, possibly better sounds via the tuxguitar-alsa plugin, 
+						but that is a lesson for another day, and perhaps another author.) 
+						</p>
+						
+						<p>
+						You can also check “Percussion Track” to have it play drum sounds if you wish to include them in the tabs.
+						</p>
+						
+						<p>
+						<em>
+						*A side note on the instrument settings section: If you are not able to change this setting, 
+						you probably have a soundbank problem. This issue has been covered in the TuxGuitar forums as well as in the main documentation, 
+						so check there for help.
+						</em>
+						</p>
+						
+						<h3>#3: Tuning:</h3>
+						
+						
+						<p>
+						This one is pretty self-explanatory. You can set the number of strings for your instrument (i.e. 4 if you’re a bass player, 
+						3 if you’re in The Presidents of The United States of America) and the tuning of the instrument, in case you use alternate tunings. 
+						It is important to make sure you have your tuning correct, or else the actual score staff of your tabs will be inaccurate, and nobody wants that.
+						</p>
+						
+						<p>
+						Once you have everything set to your liking, click OK. Now, if you look at your track list again, 
+						you will see that your changes have taken affect. And with that, you are ready to start editing tabs with sound.
+						</p>
+						<br/>
+						<br/>
+
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/start_playing.html b/TuxGuitar-testing/platform-all/share/help/start_playing.html
new file mode 100644
index 0000000..a2b9489
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/start_playing.html
@@ -0,0 +1,167 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Playing a song</h1>
+						
+						<h2><a name="opening_an_existing_song" id="opening_an_existing_song">Opening an existing song:</a></h2>
+						
+						<p>
+						 TuxGuitar currently supports several file formats. Besides its internal <em><strong>.tg</strong></em> format (which is recommended), 
+						 it can open and play all Guitar Pro formats (<strong><em>.gtp</em></strong>, <strong><em>.gp3</em></strong>, <strong><em>.gp4</em></strong>, <strong><em>.gp5</em></strong>) 
+						 and also a PowerTab format (<strong><em>.ptb</em></strong>).
+						</p>
+						
+						<p>
+						You can open a file through File/Open dialog in TuxGuitar, but you can also assign a file type association in your operating system.
+						</p>
+						
+						<p>
+						 Another way to open a file is directly from an online resource, by using the <strong>File→Open_URL</strong> dialog. If you enter the correct URL of an online file TuxGuitar is able to open, you can view and play the file in the same manner as it is open from one of your folders. Of course, you cannot save the file back on the same URL, you can save it only as a local file.
+						</p>
+						
+						
+						<h2><a name="playback" id="playback">Playback:</a></h2>
+						
+						<p>
+						<img src="images/start/tb_transport.png"/>
+						</p>
+						
+						<p>
+						Using playback controls you can play, stop and pause the playback, but also you can navigate through the song (next/previous measure, beginning/end of a song). During the playback currently played note will be coloured in red, so it is easier to see how the current note is played.
+						</p>
+						
+						<p>
+						You can also navigate through the song using the “transporter” in the bottom-right of the application window, which is the graphical represantation of a song’s tracks. It isn’t automatically scrolled during the playback, but using the scrollbar on the bottom of the screen you can view the whole song. You can access the wanted instrument and measure by clicking on the proper rectangle in the “transporter” widget.
+						</p>
+						
+						<p>
+						The song can be navigated also with a “Show transport” option in <em>Layout</em> menu by which you can navigate through internal representation of a song, quickly getting on any position.
+						</p>
+						
+						<p>
+						The current instrument can be changed by clicking on the instrument name in the bottom-left side of the application window. Display will be changed accordingly to view the wanted instrument’s notes.
+						</p>
+						
+						
+						<h2><a name="views" id="views">Views:</a></h2>
+						
+						<p>
+						 During the playback you can change the current view.
+						</p>
+						
+						<p>
+						<img src="images/start/tb_layout.png"/>
+						</p>
+						
+						<p>
+						There are two types of the view: <strong>page layout</strong> or <strong>linear layout</strong>.
+						</p>
+						
+						<p>
+						<strong>Linear layout</strong> displays a track in a single line. It means that on the current sheet  is read in the right direction, and the time is represented by the <strong>width</strong> of current display. <strong>Page layout</strong> displays a track as a page of a sheet - when the notes exceed width of the sheet display, they are displayed in the next line. So sheet is read in the direction from top to bottom, and time is represented by the <strong>heigth</strong> of the cu [...]
+						</p>
+						
+						<p>
+						By enabling <strong>Multitrack</strong> view, in the same line of a layout will be displayed all the instruments. So if you use Linear layout and enable Multitrack view all the instruments will be one beneath each other, and played in the right direction. <em>Using Multitrack view with Page layout can sometimes result in a pretty messy layout.</em>
+						</p>
+						
+						<p>
+						By enabling <strong>Show score</strong> options the scores will be displayed above the tabs.
+						</p>
+						
+						<p>
+						By enabling <strong>Compact</strong> view you can make your tablature view more compact, if you consider it too wide.
+						</p>
+						
+						
+						<h2><a name="play_mode" id="play_mode">Play Mode:</a></h2>
+						
+						<p><img src="images/start/p_mode.png"/></p>
+						
+						<h3><a name="play_mode_simple" id="play_mode_simple">Simple Mode:</a></h3>
+						
+						<p>
+						Simple mode allows the modified tempo during the playback. You can play and examine the song with half of the speed, 
+						1% of the original speed or even with the up-tempo. It is achieved by changing the playback percentage to an arbitrary 
+						value (50% is half of the speed; 200% doubles the tempo).
+						</p>
+						
+						<h3><a name="play_mode_trainer" id="play_mode_trainer">Training Mode:</a></h3>
+						
+						<p>
+						Training mode gives you the opportunity to practice with a gradual tempo incrementation. You can choose to start slowly, 
+						in only half of a tempo, but in every cycle of the tune to increase the tempo by 5%, getting to the full speed after 10 playbacks.  
+						You choose a <em>beginning tempo</em>, <em>ending tempo</em> and an <em>increment</em> (in percentage) that increases the tempo 
+						after each cycle.
+						</p>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/start_toolbars.html b/TuxGuitar-testing/platform-all/share/help/start_toolbars.html
new file mode 100644
index 0000000..734ab14
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/start_toolbars.html
@@ -0,0 +1,404 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Understanding the toolbars</h1>
+						
+						<p>
+						By default, you will notice quite a few toolbars lining the top of the screen, giving you one-click access to some of the most used options in TuxGuitar. While they can be a bit intimidating as a whole, they are actually quite simple when you break them down, and can save you a lot of time with some of the more common tasks associated with tablature editing. So let’s take a quick look at each of the toolbars. Pre-assigned keyboard shortcuts will be noted in parenthesis, but k [...]
+						</p>
+						
+						<p>
+						*A side note on the toolbars–not only can you select which toolbars are visible by going to Settings > Configure TuxGuitar > Tool Bars, you can also change the order of them to better fit your own needs by clicking and dragging on the “handle” on the left side of each individual toolbar. 
+						</p>
+						
+						<p>
+						One last thing before we begin: prior knowledge of music theory is assumed on this page. There are a couple of links in the “Note Duration” section which can help you if you don’t know much theory yet, but to cover the actual “musical meaning” of all of these options would require an entire manual unto itself. This page will only explain the TuxGuitar-related functionality of the toolbars in an effort to avoid any long-winded music theory discussions.
+						</p>
+						
+						
+						<h2><a name="file_management" id="file_management">File Management</a></h2>
+						
+						<p>
+						<img src="images/start/tb_file_menu.png"/>
+						</p>
+						
+						<p>
+						You have seen and used this menu a million times, so we will not spend too much time on it. Basically, the file menu toolbar gives you the following options:
+						</p>
+						<ul>
+							<li class="level2"><div class="li"> Create New File (Ctrl + N)</div>
+						</li>
+							<li class="level2"><div class="li"> Open File (Ctrl + O)</div>
+						</li>
+							<li class="level2"><div class="li"> Save File (Ctrl + S)</div>
+						</li>
+							<li class="level2"><div class="li"> Save File As... (F12)</div>
+						</li>
+							<li class="level2"><div class="li"> Print (Ctrl + P)</div>
+						</li>
+							<li class="level2"><div class="li"> Print Preview</div>
+						</li>
+						</ul>
+						
+						<p>
+						Nothing too complex here, so let’s move right along.
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “File” pulldown menu at the top of the screen.)
+						</p>
+						
+						<h2><a name="undo_redo" id="undo_redo">Undo/Redo</a></h2>
+						
+						<p><img src="images/start/tb_edit_menu.png"/>
+						</p>
+						
+						<p>
+						Another very common set of options that pretty much explain themselves. The icon on the left will undo your last action (Ctrl + Z), and the icon on the right will redo what you have undone (Ctrl + Y).
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Edit” pulldown menu at the top of the screen.)
+						</p>
+						
+						<h2><a name="edit_mode_applies_only_to_score_editing" id="edit_mode_applies_only_to_score_editing">Edit Mode (Applies only to Score Editing)</a></h2>
+						
+						<p><img src="images/start/tb_edit_mode.png"/>
+						</p>
+						
+						<p>
+						Now we’re getting a little more interesting. This menu lays down some options for those who prefer to edit via the score staff instead of using tablature. Keep in mind that these settings only affect the score staff (the upper set of lines with standard musical notation on them). If you only edit via the tablature staff, you can pretty ignore these settings, because they will not make any difference in your work flow.
+						</p>
+						
+						<p>
+						(If your score staff is not visible, scroll down on this page and see the “Layout” menu.)
+						</p>
+						
+						
+						<h3><a name="selection_mode" id="selection_mode">Selection Mode</a></h3>
+						
+						<p>
+						Clicking on the first icon with the wrench on it will put you in Selection Mode. With this mode selected, you can click your mouse anywhere in the score staff, and it will simply move your playback cursor to that location, without making any changes to the score itself. Good for quickly moving around in your score without worrying about accidently altering notes.
+						</p>
+						
+						
+						<h3><a name="score_edition_mode" id="score_edition_mode">Score Edition Mode</a></h3>
+						
+						<p>
+						Clicking on the middle icon with the pencil on it will put you into Score Edition Mode. With this mode selected, you can enter notes into the score staff simply by clicking where you want the note to go. You can insert notes into lines or spaces, and they will take on the duration you currently have selected in the note duration toolbar (detailed below). One note: this option alone will only insert natural-pitched notes (i.e. no flats or sharps). If you want to insert sharps/flats  [...]
+						</p>
+						
+						<h3><a name="sharp_flat_mode" id="sharp_flat_mode">Sharp/Flat Mode</a></h3>
+						
+						<p>
+						Clicking on the icon with the sharp/flat symbol on it will take you into Sharp/Flat Mode. As stated above, Sharp/Flat Mode is simply a sub-option of Score Edition Mode. You have to use Sharp/Flat Mode if you want to enter sharp or flat notes or change pre-existing notes to sharp or flat.
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Edit” pulldown menu at the top of the screen.)
+						</p>
+						
+						<h2><a name="song_properties" id="song_properties">Song Properties</a></h2>
+						
+						<p>
+						<img src="images/start/tb_properties.png"/>
+						</p>
+						
+						<p>
+						While the Properties toolbar only really has one icon, it is of particular importance if you plan on printing or exporting your tabs at any point. Clicking on this icon will bring up your song properties tab, wherein you can set the following options: 
+						</p>
+						<ul>
+						<li class="level2"><div class="li"> Name (of song)</div>
+						</li>
+						<li class="level2"><div class="li"> Artist (Performer)</div>
+						</li>
+						<li class="level2"><div class="li"> Author (Copyright owner)</div>
+						</li>
+						<li class="level2"><div class="li"> Album</div>
+						</li>
+						</ul>
+						
+						<p>
+						 The reason these settings are of such importance is that whatever you type in the Name and Author boxes will show up on the first page of your tabs when you print or export them, and if you leave them blank, you will simply get a big, fat “Untitled” by “Anonymous” instead. So make sure you set them if you plan viewing these tabs outside of TuxGuitar! The difference can be seen below.
+						</p>
+						
+						<p>
+						<img src="images/start/tb_props_diff.png"/>
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Composition” pulldown menu at the top of the screen.)
+						</p>
+						
+						<h2><a name="add_remove_track" id="add_remove_track">Add/Remove Track</a></h2>
+						
+						<p>
+						<img src="images/start/tb_add_track.png"/>
+						</p>
+						
+						<p>
+						There comes a point in almost any song when one guitar is not enough. When you are ready to start entering tabs for another instrument, simply click the icon with the “+” sign on it to add a new track.
+						</p>
+						
+						<p>
+						If you decide you don’t need a track, click on the icon with the “-” sign to remove it. The remove track button will remove the track that is currently selected (currently selected track will be highlighted gray in the track list at the bottom of the screen).
+						</p>
+						
+						<p>
+						(These options and more (including a handy “Clone Track” option) can be accessed via the “Track” pulldown menu at the top of the screen.)
+						</p>
+						
+						
+						<h2><a name="note_duration" id="note_duration">Note Duration</a></h2>
+						
+						<p>
+						<img src="images/start/tb_duration.png"/>
+						</p>
+						
+						<p>
+						This is another fairly straight-forward toolbar. The first seven icons simply change the note(s) at the current cursor position to whatever you select, ranging from whole-note to sixty-forth-note. This comes in handy if you need to make a change that is more than one note increment (i.e. quarter-note to sixteenth-note). You can alternately use the +/- keys on a standard numeric keypad to move one increment at a time.
+						</p>
+						
+						<p>
+						*A side note on the +/- keys: as of version .9, most laptop keyboards do not support the use of the =/+ key to decrease note duration. The developers are aware of this bug, and are working it out. The “-” key on laptop keyboards should work, just not the =/+ key.
+						</p>
+						
+						<p>
+						The last three icons will change a note’s value to dotted, double-dotted, and a wide variety of “division type” values.
+						</p>
+						
+						<p>
+						If you do not understand the difference between the various note durations, you may want to research it a bit before you begin editing tabs, as you may find yourself quickly getting lost. Any basic music theory guide should cover these topics. A good starting place (as always) is the wikipedia’s pages on music theory and music notation: 
+						</p>
+						<ul>
+						<li class="level1"><div class="li"> http://en.wikipedia.org/wiki/Music_theory</div>
+						</li>
+						<li class="level1"><div class="li"> http://en.wikipedia.org/wiki/Modern_musical_symbols</div>
+						</li>
+						</ul>
+						
+						<p>
+						 (These options and more can be accessed via the “Note” pulldown menu at the top of the screen.)
+						</p>
+						
+						
+						<h2><a name="note" id="note">Note</a></h2>
+						
+						<p>
+						<img src="images/start/tb_note.png"/>
+						</p>
+						
+						<p>
+						This menu provides you with two more options concerning note editing.
+						</p>
+						
+						<p>
+						Clicking on the first icon will “tie” the currently selected note to the one before it. This feature basically takes the value of two notes and combines them into one. The most common use for this feature is when you have a note that begins in one measure and ends in the next. Tying notes is really just a way of keeping the score clean and organized. If you need more information, you may want to research musical notation via the links above.
+						</p>
+						
+						<p>
+						Clicking on the second icon with the “A7” will bring up the chord editor. The chord editor is a handy time-saving tool used to search, build, and insert chord formations into your tablature. While the chord editor does deserve further exploration, it is a topic best left for another page and another day.
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Note” pulldown menu at the top of the screen.)
+						</p>
+						
+						
+						<h2><a name="composition" id="composition">Composition</a></h2>
+						
+						<p>
+						<img src="images/start/tb_composition.png"/>
+						</p>
+						
+						<p>
+						The Composition toolbar gives you a few options for setting the structure and meter of your song. Again, for a deeper explanation of what each of these means and how to fully utilize them, refer to the music theory links under the “Note Duration” section.
+						</p>
+						
+						<p>
+						Clicking on the first icon with the question mark will allow you to set the tempo of your song. New songs in TuxGuitar default to 100 beats/min, but you can set your own tempo to anything between 30-320 beats/min. TuxGuitar also supports tempo changes throughout the song, and creating them is as easy as placing your playback cursor in the measure at which you want the tempo to change, and clicking on the icon. Any tempo set in the first measure of the song will be the default tempo [...]
+						</p>
+						
+						<p>
+						Clicking on the next icon with the 4/4 graphic will bring up the time signature dialog, which is pretty straight-forward. You have a seperate pulldown menu for each half of the time signature, as well as a “To the end” check box. TuxGuitar supports multiple time signature changes throughout the song, and much like tempo changes, are as easy to create as clicking the icon and setting a new time signature in the measure where you wish it to change. Checking the “To  [...]
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Composition” pulldown menu at the top of the screen.)
+						</p>
+						
+						<p>
+						Next three icons are used for repeating control. Everyone familiar with music notation should be familiar with these - you can open and close repeating section. When closing, you will get a dialog to specify how many repeatings will occur. The last icon is used to mark alternative endings in the repeat. A special dialog will also occur, allowing you to choose in which cycle this ending will be played.
+						</p>
+						
+						<h2><a name="transport" id="transport">Transport</a></h2>
+						
+						<p>
+						<img src="images/start/tb_transport.png"/>
+						</p>
+						
+						<p>
+						These are song playback controls. Buttons are for play/pause, stop playing, previous measure, next measure, beginning of the song and end of the track.
+						</p>
+						
+						
+						<h2><a name="markers" id="markers">Markers</a></h2>
+						
+						<p>
+						<img src="images/start/tb_markers.png"/>
+						</p>
+						
+						<p>
+						It is very useful to add a marker in a song, to mark some part of the song (verse, chorus, solo, etc.)
+						</p>
+						
+						<p>
+						Marker controls on the toolbar allow you to create a marker, list the markers and navigate them (previous, next, first, last).
+						</p>
+						
+						
+						<h2><a name="layout" id="layout">Layout</a></h2>
+						
+						<p>
+						<img src="images/start/tb_layout.png"/>
+						</p>
+						
+						<p>
+						There are several layout types in TuxGuitar. They all change the view of tablature and scores in the main editor window.
+						</p>
+						
+						<p>
+						The first button on the left is <strong>Page layout</strong>. It’s alternative is the second button: <strong>Linear layout</strong>. Page layout displays the tablature and scores like on the paper sheets, with the line breaks. On the other side, linear view views the instrument in a single line, expanding to the right.
+						</p>
+						
+						<p>
+						The third button enables <strong>Multitrack</strong> view. When enabled, all the tracks will be displayed in the main window. Depending on your previous choice (Page or Linear layout) you will see different view. In personal experience, good combinations are Linear+Multitrack, and Page layout without multitrack (for single instrument view).
+						</p>
+						
+						<p>
+						The fourth button is <strong>Show scores</strong> button. It simply views the scores (notation) above your tab line.
+						</p>
+						
+						<p>
+						The fifth button is <strong>Compact</strong> view. You would like to enable it when you consider your view too wide.
+						</p>
+						
+						
+						<h2><a name="view" id="view">View</a></h2>
+						
+						<p>
+						<img src="images/start/tb_view.png"/>
+						</p>
+						
+						<p>
+						These three buttons show you various windows.
+						</p>
+						
+						<p>
+						The first button shows you the <strong>fretboard</strong> on the bottom of the main window. Fretboard is usefull to view the exact spots where you should put your fingers in each moment. You can even click on the fretboard to edit your tab. Fretboard view is available for both right- and left-handed guitars.
+						</p>
+						
+						<p>
+						Second button shows <strong>Mixer</strong>. Mixer dialog is very important - there you can change the volume of instruments in your tab, mute/solo single instrument, change panning and assign MIDI channel. Read <a class="PageLink" href="editing_song.html#mixer_dialog"> more about Mixer dialog</a>.
+						</p>
+						
+						<p>
+						The last button shows you player controller window, where you can control the song playback.
+						</p>
+						
+						
+						<h2><a name="effects" id="effects">Effects</a></h2>
+						
+						<p>
+						<img src="images/start/tb_effects.png" class="media" title="" alt="" />
+						</p>
+						
+						<p>
+						These effects are applied with editing cursor positioned on existing note in the tab. Selected effect is then applied to note.
+						</p>
+						
+						<p>
+						Read more about <a class="PageLink" href="edit_effects.html"> note effects</a>.
+						</p>
+						
+						
+						<h2><a name="dynamics" id="dynamics">Dynamics</a></h2>
+						
+						<p>
+						<img src="images/start/tb_dynamics.png"/>
+						</p>
+						
+						<p>
+						By selecting different icon than the current, you change the dynamics of the note you are editing. They gradually scale from <em>Piano Pianissimo</em> which is the most silent, to the <em>Forte Fortissimo</em> which is loudest. 
+						</p>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/tools_converter.html b/TuxGuitar-testing/platform-all/share/help/tools_converter.html
new file mode 100644
index 0000000..7953092
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/tools_converter.html
@@ -0,0 +1,134 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>TuxGuitar-converter</h1>
+						
+						
+						<div class="level1">
+						<pre class="code">
+						</pre>
+						
+						<h2><a name="what_is_tuxguitar-converter" id="what_is_tuxguitar-converter">What is tuxguitar-converter</a></h2>
+						<p>
+						 <strong>tuxguitar-converter</strong> is batch file format converter. It allows you to convert number of files from various file formats (*.gpX, *.ptb, *.tef, *.tg) into destination file format, keeping the file names but changing the format (and extension of a file).
+						</p>
+						
+						<p>
+						Converter simply tries to load every file and save/export it into destination file.
+						</p>
+						
+						<p>
+						So supported input formats are files TuxGuitar can load and import, and destination format is every format TuxGuitar can save into or export. You can check for <a class="PageLink" href="file_formats.html">supported file formats</a>. For some exporter plugins that have various exporting options, default options are used.
+						</p>
+						
+						
+						<h2><a name="how_to_install_tuxguitar-converter" id="how_to_install_tuxguitar-converter">How to install tuxguitar-converter</a></h2>
+						
+						<p>
+						 <strong>tuxguitar-converter</strong> plugin is included on all bytecode TuxGuitar distributions as default. If you downloaded a compiled TuxGuitar package, you shouldn’t bother to install it manually.<br/>
+						 Of course you may want rebuild and install the plugin.
+						</p>
+						
+						<p>
+						To install the plugin, you must copy <strong>tuxguitar-converter.jar</strong> into <strong>$TUXGUITAR_HOME\share\plugins</strong>
+						</p>
+						
+						
+						<h2><a name="using_batch_file_format_converter" id="using_batch_file_format_converter">Using batch file format converter</a></h2>
+						
+						<p>
+						 <img src="images/tools/converter.png"/>
+						</p>
+						
+						<p>
+						You access the converter dialog through Tools→“File format batch converter”.
+						</p>
+						
+						<p>
+						On the dialog you must specify <strong>input folder</strong>. Input folder <em class="u">and its subfolders</em> contain files that will be converted.
+						</p>
+						
+						<p>
+						<strong>Output folder</strong> is folder in which new files will be stored. If destination folder you specified doesn’t exist, it will be created.
+						</p>
+						
+						<p>
+						<strong>Output file format</strong> is used to specify file format of new created files. It will display all supported formats (which might depend on your installed plugins).
+						</p>
+						
+						<p>
+						After you confirm the converting new window will appear showing you the progress. You can cancel the process anytime. 
+						</p>
+						
+						</div>
+						<br/><br/>
+
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/tools_keybinding.html b/TuxGuitar-testing/platform-all/share/help/tools_keybinding.html
new file mode 100644
index 0000000..321fc21
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/tools_keybinding.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Key bindings editor</h1>
+						
+						<div class="level1">
+						
+						<p>
+						 Using key bindings editor you can change a shortcut for almost every action in TuxGuitar. It allows you to view and change default keybindings, as well to add new ones.
+						</p>
+						
+						<p>
+						Key bindings editor dialog is accessed through Tools→Shortcuts menu.
+						</p>
+						
+						<p>
+						<img src="images/tools/keybinding_editor.png"/>
+						</p>
+						
+						<p>
+						 The editor is a table you can modify. In the left column is the name and type of the action, and in the right one is the shortcut key combination. If you double-click on the combination cell, you will get the chance to insert or change the shortcut, or delete it with <strong>Clear</strong> button.
+						</p>
+						
+						<p>
+						By clicking the<strong> Default</strong> button all of your modifications are reverted to the default keybindings for TuxGuitar. You can see the <a class="PageLink" href="tools_shortcuts.html"> list of default keybindings</a>.
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/tools_plugins.html b/TuxGuitar-testing/platform-all/share/help/tools_plugins.html
new file mode 100644
index 0000000..faaf460
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/tools_plugins.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+											
+						<h1><a name="plugins_dialog" id="plugins_dialog">Plugins dialog</a></h1>
+						<div class="level1">
+						
+						<p>
+						 TuxGuitar supports plugins. Some of the plugins are delivered with the distribution, but there are plugins you can download and enable manually.
+						</p>
+						
+						<p>
+						There are several types of the plugins: 
+						</p>
+						<ol>
+						<li class="level1"><div class="li"> File Format plugins (PowerTab, Lilypond, MIDI, MusicXML) are included as default</div>
+						</li>
+						<li class="level1"><div class="li"> Sound plugins (ALSA, OSS, CoreAudio) are recommended depending of your OS.</div>
+						</li>
+						<li class="level1"><div class="li"> other plugins (like FTP browser, and any other)</div>
+						</li>
+						</ol>
+						
+						<p>
+						The plugins dialog is accessed through the Tools→Plugins menu. In the dialog is the list of all plugins, with the checkbox enabled if the plugin is working at the moment. Some of the plugins can be configured with the <strong>Configure</strong> button. All of the plugins have their author info.
+						</p>
+						
+						<p>
+						<img src="images/tools/plugins_dialog.png"/>
+						</p>
+						
+						<p>
+						Plugins are single *.jar files. You can install any TuxGuitar plugin by simply copying it to the <em>$TUXGUITAR_DIR</em>\share\plugins\ folder and enabling it in the dialog.
+						</p>
+						
+						<p>
+						Maybe the easiest way to contribute to TuxGuitar functionality is to write a plugin, because it doesn’t need synchronisation with the other TuxGuitar developers.
+						</p>
+						
+						<p>
+						You can check the list of available plugins on TuxGuitar download page (<i>other</i>). 
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/tools_shortcuts.html b/TuxGuitar-testing/platform-all/share/help/tools_shortcuts.html
new file mode 100644
index 0000000..3e58b97
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/tools_shortcuts.html
@@ -0,0 +1,515 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Default key-bindings (shortcuts)</h1>
+						
+						<ul class="toc">
+						<li class="level1"><div class="li"><span class="li"><a href="#default_key-bindings_shortcuts" class="toc">Default key-bindings (shortcuts)</a></span></div>
+						<ul>
+						<li class="level2"><div class="li"><span class="li"><a href="#edit" class="toc">Edit Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#track" class="toc">Track Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#measure" class="toc">Measure Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#beat" class="toc">Beat Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#note_effects" class="toc">Note Effects</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#marker" class="toc">Marker Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#playback_controls" class="toc">Playback Controls</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#dialogs" class="toc">Dialogs</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#application" class="toc">Application</a></span></div></li></ul>
+						</li></ul>
+						
+						
+						
+						<div class="level1">
+						
+						<p>
+						 This is the list of the default key bindings (keyboard shortcuts) in TuxGuitar 1.0.
+						</p>
+						
+						<p>
+						Of course, these key-bindings list can be modified in <a class="PageLink" href="tools_keybinding.html"> Tools->Shortcuts dialog</a>.
+						</p>
+						
+						</div>
+						
+						<h2><a name="edit" id="edit">Edit Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Undo action </td><td class="right"> Ctrl+<strong>Z</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Redo action </td><td class="right"> Ctrl+<strong>Y</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Song properties</td><td class="right"> <strong>F5</strong></td>
+							</tr>
+						</table>
+						</div>
+						
+						<h2><a name="track" id="tab_editor">Track Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"><u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > View next track </td><td class="right"> Ctrl+<strong>Down</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > View previous track </td><td class="right"> Ctrl+<strong>Up</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > View last track </td><td class="right"> Ctrl+Shift+<strong>Down</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > View first track</td><td class="right"> Ctrl+Shift+<strong>Up</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Add track </td><td class="right"> Ctrl+Shift+<strong>Ins</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Delete track</td><td class="right"> Ctrl+Shift+<strong>Del</strong></td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						<h2><a name="measure" id="tab_editor">Measure Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Go to next measure</td><td class="right"> Ctrl+<strong>Right</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Go to previous measure</td><td class="right"> Ctrl+<strong>Left</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Copy measure</td><td class="right"> Ctrl+<strong>C</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Paste measure </td><td class="right"> Ctrl+<strong>V</strong></td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						
+						<h2><a name="beat" id="tab_editor">Beat Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Clean beat</td><td class="right"> Ctrl+<strong>Del</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Insert beat </td><td class="right"> number 0-29 </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Delete beat/note </td><td class="right"> <strong>Del</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Tied note </td><td class="right"> <strong>L</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Dotted note </td><td class="right"> <strong></strong>* </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Triplet note</td><td class="right"> <strong>/</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Insert text </td><td class="right"> <strong>T</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Move note on string above </td><td class="right"> Shift+<strong>Up</strong></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Move note on string below </td><td class="right"> Shift+<strong>Down</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Increase note pitch </td><td class="right"> Shift+<strong>Right</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Decrease note pitch </td><td class="right"> Shift+<strong>Left</strong></td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						
+						
+						<h2><a name="note_effects" id="note_effects">Note Effects</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Can be applied only when your cursor is positioned on the existing note in a tablature 
+						</p>
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Bend note </td><td class="right"> <strong>B</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Ghost note</td><td class="right"> <strong>O</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Hammer on/Pull off</td><td class="right"> <strong>H</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Slide up/down </td><td class="right"> <strong>S</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Vibrato </td><td class="right"> <strong>V</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Dead note </td><td class="right"> <strong>X</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Palm mute </td><td class="right"> <strong>P</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Fade in </td><td class="right"> <strong>F</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Grace note</td><td class="right"> <strong>G</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						
+						<h2><a name="marker" id="marker">Marker Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Add marker</td><td class="right"> Shift+<strong>Ins</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Go to previous marker </td><td class="right"> Alt+<strong>Left</strong></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Go to next marker </td><td class="right"> Alt+<strong>Right</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						<!--
+						<h2><a name="tab_editor" id="tab_editor">Tab editor</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr>
+								<td><u><strong>Action</strong></u> </td><td> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Insert note </td><td> number 0-29 </td>
+							</tr>
+							<tr>
+								<td> Delete note </td><td> <strong>Del</strong> </td>
+							</tr>
+							<tr>
+								<td> Clean beat</td><td> Ctrl+<strong>Del</strong></td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Tied note </td><td> <strong>L</strong> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Go to next measure</td><td> Ctrl+<strong>Right</strong></td>
+							</tr>
+							<tr>
+								<td> Go to previous measure</td><td> Ctrl+<strong>Left</strong> </td>
+							</tr>
+							<tr>
+								<td> View next track </td><td> Ctrl+<strong>Down</strong> </td>
+							</tr>
+							<tr>
+								<td> View previous track </td><td> Ctrl+<strong>Up</strong> </td>
+							</tr>
+							<tr>
+								<td> View last track </td><td> Ctrl+Shift+<strong>Down</strong> </td>
+							</tr>
+							<tr>
+								<td> View first track</td><td> Ctrl+Shift+<strong>Up</strong> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Copy measure</td><td> Ctrl+<strong>C</strong></td>
+							</tr>
+							<tr>
+								<td> Paste measure </td><td> Ctrl+<strong>V</strong></td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Tab properties</td><td> <strong>F5</strong></td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Add track </td><td> Ctrl+Shift+<strong>Ins</strong></td>
+							</tr>
+							<tr>
+								<td> Delete track</td><td> Ctrl+Shift+<strong>Del</strong></td>
+							</tr>
+							<tr>
+								<td> Add marker</td><td> Shift+<strong>Ins</strong> </td>
+							</tr>
+							<tr>
+								<td> Go to previous marker </td><td> Alt+<strong>Left</strong></td>
+							</tr>
+							<tr>
+								<td> Go to next marker </td><td> Alt+<strong>Right</strong> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Insert text </td><td> <strong>T</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						-->
+						<h2><a name="playback_controls" id="playback_controls">Playback Controls</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Play / Pause</td><td class="right"> <strong>Space</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Go to start </td><td class="right"> Ctrl+Shift+<strong>Right</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Go to end </td><td class="right"> Ctrl+Shift+<strong>Left</strong></td>
+							</tr>
+						</table>
+						
+						</div>
+						<!--
+						<h2><a name="note_effects" id="note_effects">Note effects</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Can be applied only when your cursor is positioned on the existing note in a tablature 
+						</p>
+						<table class="inline">
+							<tr>
+								<td><u><strong>Action</strong></u> </td><td> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Bend note </td><td> <strong>B</strong> </td>
+							</tr>
+							<tr>
+								<td> Ghost note</td><td> <strong>O</strong> </td>
+							</tr>
+							<tr>
+								<td> Hammer on/Pull off</td><td> <strong>H</strong> </td>
+							</tr>
+							<tr>
+								<td> Slide up/down </td><td> <strong>S</strong> </td>
+							</tr>
+							<tr>
+								<td> Vibrato </td><td> <strong>V</strong> </td>
+							</tr>
+							<tr>
+								<td> Dead note </td><td> <strong>X</strong> </td>
+							</tr>
+							<tr>
+								<td> Palm mute </td><td> <strong>P</strong> </td>
+							</tr>
+							<tr>
+								<td> Fade in </td><td> <strong>F</strong> </td>
+							</tr>
+							<tr>
+								<td> Grace note</td><td> <strong>G</strong> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Move note on string above </td><td> Shift+<strong>Up</strong></td>
+							</tr>
+							<tr>
+								<td> Move note on string below </td><td> Shift+<strong>Down</strong></td>
+							</tr>
+							<tr>
+								<td> Increase note pitch </td><td> Shift+<strong>Right</strong> </td>
+							</tr>
+							<tr>
+								<td> Decrease note pitch </td><td> Shift+<strong>Left</strong></td>
+							</tr>
+							<tr>
+								<td> Dotted note </td><td> <strong></strong>* </td>
+							</tr>
+							<tr>
+								<td> Triplet note</td><td> <strong>/</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						-->
+						<h2><a name="dialogs" id="dialogs">Dialogs</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Custom chord dialog </td><td class="right"> <strong>A</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Settings</td><td class="right"> <strong>F7</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Mixer </td><td class="right"> Ctrl+<strong>M</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Transport </td><td class="right"> Ctrl+<strong>T</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Collection Browser</td><td class="right"> Ctrl+<strong>B</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Play Mode </td><td class="right"> <strong>F9</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Help</td><td class="right"> <strong>F1</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						<h2><a name="application" id="application">Application</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > New tablature </td><td class="right"> Ctrl+<strong>N</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Open file </td><td class="right"> Ctrl+<strong>O</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Save file </td><td class="right"> Crtl+<strong>S</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Save as </td><td class="right"> <strong>F12</strong></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Print tablature </td><td class="right"> Ctrl+<strong>P</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Exit TuxGuitar</td><td class="right"> Alt+<strong>F4</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/tools_skin.html b/TuxGuitar-testing/platform-all/share/help/tools_skin.html
new file mode 100644
index 0000000..319e06f
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/tools_skin.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Changing the skin</h1>
+						
+						
+						<div class="level1">
+						<pre class="code">
+						</pre>
+						
+						<p>
+						TuxGuitar supports custom skins. The skins modify toolbar icons and dialog buttons.
+						</p>
+						
+						<p>
+						The default skin for version 1.0 is Lavender, and currently there are 2 more skins: Ersplus and Blue_serious. You can change the current skin in Tools→Settings dialog, choosing the Skins tab. Preview of each skin should be available.
+						</p>
+						
+						<p>
+						<img src="images/tools/settings_skin.png"/>
+						</p>
+						
+						<p>
+						To add a new skin, create a new folder in <em>$TUXGUITAR_DIR</em>\share\skins\ and copy the <em class="u">files</em> into that folder. After that skin should be available in the dialog.
+						</p>
+						
+						<p>
+						Skins are contributed by TuxGuitar users, so if you are a talented designer, feel free to make your own skin or modify the existing one! 
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/tools_sound.html b/TuxGuitar-testing/platform-all/share/help/tools_sound.html
new file mode 100644
index 0000000..9218669
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/tools_sound.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1><a name="sound_in_tuxguitar" id="sound_in_tuxguitar">Sound in TuxGuitar</a></h1>
+						
+						<ul class="toc">
+						<li class="level1"><div class="li"><span class="li"><a href="#sound_in_tuxguitar" class="toc">Sound in TuxGuitar</a></span></div>
+						<ul class="toc">
+						<li class="level2"><div class="li"><span class="li"><a href="#java_sound" class="toc">Java Sound</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#platform-dependant_plugins" class="toc">Platform-dependant plugins</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#sequencer" class="toc">Sequencer</a></span></div></li></ul>
+						</li></ul>
+						
+						
+						
+						<div class="level1">
+						
+						<p>
+						 First to mention, TuxGuitar is written in Java programming language. There is dedicated layer in Java for MIDI sound, which uses “soundbanks”. In TuxGuitar prior to version 1.0, using the soundbanks was the only way to play the sound, and it was totally independent of your system MIDI settings.
+						</p>
+						
+						<p>
+						Since the version 1.0 there are some plugins that enable connection between TuxGuitar and the system MIDI devices. You need the plugin depending on your operating system and audio properties: 
+						</p>
+						<ul>
+						<li class="level2"><div class="li"> Linux (ALSA) - TuxGuitar-alsa</div>
+						</li>
+						<li class="level2"><div class="li"> Linux (OSS) - TuxGuitar-OSS</div>
+						</li>
+						<li class="level2"><div class="li"> MacOS - TuxGuitar-CoreAudio</div>
+						</li>
+						<li class="level2"><div class="li"> Microsoft Windows - <em>integrated in the application</em></div>
+						</li>
+						</ul>
+						
+						<p>
+						 These plugins are included in your distribution package, so there is no need to download them manually. Just be shure that plugins stay enabled in the <a class="PageLink" href="tools_plugins.html"> plugins dialog</a>.
+						</p>
+						
+						</div>
+						
+						<h3><a name="java_sound" id="java_sound">Java Sound</a></h3>
+						<div class="level3">
+						
+						<p>
+						 Java Sound plugin, relying on the soundbanks, is still available in the form of the “Java Sound Api plugin”. You can adjust and change the soundbank with <strong>Configure</strong> button in the <a class="PageLink" href="tools_plugins.html"> plugins dialog</a>.
+						</p>
+						
+						<p>
+						If the plugin is enabled, in the Sound tab of the Tools→Settings dialog you can choose “Java Sound Synthesizer” in the <strong>Midi Port</strong> list. That enables sound output using Java soundbanks.
+						</p>
+						
+						</div>
+						
+						<h3><a name="platform-dependant_plugins" id="platform-dependant_plugins">Platform-dependant plugins</a></h3>
+						<div class="level3">
+						
+						<p>
+						If you have TuxGuitar-alsa, TuxGuitar-OSS, TuxGuitar-CoreAudio plugin enabled or if you are running TuxGuitar on the Windows platform TuxGuitar detects your system MIDI ports (devices).
+						</p>
+						
+						<p>
+						So it depends of your system settings, but anyway, if the proper plugin is enabled and working you should see system ports in the <strong>Midi Port</strong> list in the Sound tab of the Tools→Settings dialog. Choosing the right one enables your native MIDI sound in TuxGuitar.
+						</p>
+						
+						<p>
+						If you experience problems using your native MIDI output, consult the help of the plugin you are using.
+						</p>
+						
+						</div>
+						
+						<h3><a name="sequencer" id="sequencer">Sequencer</a></h3>
+						<div class="level3">
+						
+						<p>
+						 Beside MIDI Port sound options in the Tools→Settings→Sound tab is also <strong>MIDI Sequencer</strong> options. In general, you should use <strong>“Real Time Sequencer”</strong> because it’s faster, but it needs Java Sound plugin to be enabled, which means it requires Sun Java to be installed. In case you use some other JVM, your only choice is <strong>“TuxGuitar Sequencer”</strong>. Don’t worry, it is not as bad as it sounds. :)
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/help/whatsnew.html b/TuxGuitar-testing/platform-all/share/help/whatsnew.html
new file mode 100644
index 0000000..dc2c294
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/help/whatsnew.html
@@ -0,0 +1,259 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
+	</head>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>What's new</h1>
+						
+						<h2>Version 1.1 (2009-xx-xx)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fix some bugs</div></li>
+							<li class="level2"><div class="li">Support measure range to loop</div></li>
+							<li class="level2"><div class="li">Transpose notes feature</div></li>
+							<li class="level2"><div class="li">Optionally transpose afected notes when change tuning</div></li>
+							<li class="level2"><div class="li">Move beats left|right support</div></li>
+							<li class="level2"><div class="li">More song properties options.</div></li>
+							<li class="level2"><div class="li">Add multiple measure support</div></li>
+							<li class="level2"><div class="li">Clean multiple measure support</div></li>
+							<li class="level2"><div class="li">Number of pastes support</div></li>
+							<li class="level2"><div class="li">Better lilypond plugin</div></li>
+							<li class="level2"><div class="li">Better fluidsynth plugin</div></li>
+							<li class="level2"><div class="li">New jack plugin</div></li>
+							<li class="level2"><div class="li">New community integration plugin</div></li>
+							<li class="level2"><div class="li">New cocoa integration plugin</div></li>
+							<li class="level2"><div class="li">New audio unit plugin</div></li>
+						</ul>
+						
+						<h2>Version 1.1 (2009-04-02)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fix mixer bug</div></li>
+							<li class="level2"><div class="li">Fix jre1.4 support bug</div></li>
+							<li class="level2"><div class="li">2 Voice support</div></li>
+							<li class="level2"><div class="li">Chorus/Reverb/Phaser/Tremolo MIDI Controls</div></li>
+							<li class="level2"><div class="li">Upstroke/Downstroke support</div></li>
+							<li class="level2"><div class="li">Stems Up/Down/Auto support</div></li>
+							<li class="level2"><div class="li">Display markers on the score</div></li>	
+							<li class="level2"><div class="li">Encoding option on GTP Plugin</div></li>
+							<li class="level2"><div class="li">FTP Browser plugin now can run on non sun's JVM</div></li>
+						</ul>
+						
+						<h2>Version 1.0 (2008-06-17)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fixed native MIDI Port connection bug under windows</div></li>
+							<li class="level2"><div class="li">Fixed mute/solo mixer bug</div></li>
+							<li class="level2"><div class="li">Fixed copy/paste measure beetween tracks with different strings count</div></li>
+							<li class="level2"><div class="li">Fixed other minor bugs</div></li>
+							<li class="level2"><div class="li">Vietnamese translation</div></li>
+						</ul>
+						
+						<h2>Version 1.0-rc4 (2008-05-05)</h2>
+						<ul>
+							<li class="level2"><div class="li">Bugs Fixed</div></li>
+							<li class="level2"><div class="li">File format converter plugin</div></li>
+							<li class="level2"><div class="li">Dutch translation</div></li>
+							<li class="level2"><div class="li">Russian translation</div></li>
+							<li class="level2"><div class="li">Ukrainian translation</div></li>
+						</ul>
+						
+						<h2>Version 1.0-rc3 (2008-03-25)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fix a several GTP exporter bug</div></li>
+							<li class="level2"><div class="li">Fix a printer bug</div></li>
+							<li class="level2"><div class="li">Fix other minor bugs</div></li>
+						</ul>
+						
+						<h2>Version 1.0-rc2 (2008-03-11)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fix some translation bugs</div></li>
+							<li class="level2"><div class="li">Fix duplicated beat/string notes on MIDI importer</div></li>
+							<li class="level2"><div class="li">Fix a GTP importer bug</div></li>
+							<li class="level2"><div class="li">Fix a PTB importer bug</div></li>
+							<li class="level2"><div class="li">Better Guitar/Bass synchronization on PTB importer</div></li>
+							<li class="level2"><div class="li">Documentation contents added</div></li>
+						</ul>
+						
+						<h2>Version 1.0-rc1 (2008-02-28)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Play mode option: ( Normal | Loop | Speed-Trainer )</div></li>
+							<li class="level2"><div class="li">Alternative endings added</div></li>
+							<li class="level2"><div class="li">Insert text</div></li>
+							<li class="level2"><div class="li">Show chords on the tab</div></li>
+							<li class="level2"><div class="li">Better chord editor</div></li>
+							<li class="level2"><div class="li">Open file from URL</div></li>
+							<li class="level2"><div class="li">Matrix editor</div></li>
+							<li class="level2"><div class="li">A song collection browser</div></li>
+							<li class="level2"><div class="li">Skin support was added</div></li>
+							<li class="level2"><div class="li">Better plugin support</div></li>
+							<li class="level2"><div class="li">Tabledit importer plugin</div></li>
+							<li class="level2"><div class="li">Lilypond exporter plugin</div></li>
+							<li class="level2"><div class="li">MusicXml exporter plugin</div></li>
+						</ul>
+						
+						<h2>Version 0.9 (2007-01-29)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Piano editor</div></li>
+							<li class="level2"><div class="li">Lyric editor</div></li>
+							<li class="level2"><div class="li">Music Scales</div></li>
+							<li class="level2"><div class="li">Simple Score edition</div></li>
+							<li class="level2"><div class="li">Custom Chords</div></li>
+							<li class="level2"><div class="li">Customize ToolBars</div></li>
+							<li class="level2"><div class="li">Metronome</div></li>
+							<li class="level2"><div class="li">Memory Optimization when song is playing</div></li>
+							<li class="level2"><div class="li">Print layout changes: Tablature and Score enabled/disabled options, Measure range.</div></li>
+							<li class="level2"><div class="li">Dynamics</div></li>
+							<li class="level2"><div class="li">Increment-Decrement Semitones.</div></li>
+							<li class="level2"><div class="li">Shift Up/Down</div></li>
+							<li class="level2"><div class="li">New Effects: Tremolo Bar, Harmonics, Grace note, Trill, Tremolo Picking, Ghost note, Accentuated, Heavy Accentuated, Palm mute, Staccato, </div></li>
+							<li class="level2"><div class="li">Tapping, Slapping, Popping, Fade In.</div></li>
+						</ul>
+						
+						<h2>Version 0.8 (2006-08-24)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Power-Tab 1.7 file format importer added</div></li>
+							<li class="level2"><div class="li">MIDI importer added</div></li>
+							<li class="level2"><div class="li">ASCII Tab exporter added</div></li>
+							<li class="level2"><div class="li">Show note played at fretboard</div></li>
+							<li class="level2"><div class="li">Triplet Feels added</div></li>
+							<li class="level2"><div class="li">Markers added</div></li>
+							<li class="level2"><div class="li">Fonts and colors config support added</div></li>
+							<li class="level2"><div class="li">Soundbank config support added</div></li>
+							<li class="level2"><div class="li">History files added</div></li>
+							<li class="level2"><div class="li">Simple plugin support added</div></li>
+						</ul>
+						
+						<h2>Version 0.7 (2006-07-17)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Score Viewer added</div></li>
+							<li class="level2"><div class="li">Transport added</div></li>
+							<li class="level2"><div class="li">Clone Track option added</div></li>
+							<li class="level2"><div class="li">Move track up and down option added</div></li>
+						</ul>
+						
+						<h2>Version 0.6 (2006-05-27)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">GP5 loader added</div></li>
+							<li class="level2"><div class="li">MIDI exporter added</div></li>
+							<li class="level2"><div class="li">PDF exporter added</div></li>
+							<li class="level2"><div class="li">Print option added</div></li>
+							<li class="level2"><div class="li">Print preview added</div></li>
+							<li class="level2"><div class="li">Undo/Redo added</div></li>
+							<li class="level2"><div class="li">Dead note added</div></li>
+							<li class="level2"><div class="li">Page layout upgraded</div></li>
+							<li class="level2"><div class="li">Copy-Paste and Delete upgraded</div></li>
+						</ul>
+						
+						
+						<h2>Version 0.5 (2006-04-07)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Config editor added</div></li>
+							<li class="level2"><div class="li">Key Binding editor added</div></li>
+							<li class="level2"><div class="li">Mixer added</div></li>
+							<li class="level2"><div class="li">Midi sound added, when you insert a note</div></li>
+							<li class="level2"><div class="li">Now can you see beat to beat when the song is playing</div></li>
+							<li class="level2"><div class="li">Now you can select the channel and effect channel for the track</div></li>
+							<li class="level2"><div class="li">Now you can run tuxguitar with arguments (eg.: ./TuxGuitar file.gp3)</div></li>
+						</ul>
+						
+						
+						<h2>Version 0.4.1 (2006-01-26)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Fixed a bug in tunning when you select a percussion track</div></li>
+						</ul>
+						
+						
+						<h2>Version 0.4 (2006-01-25)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Fretboard editor added</div></li>
+							<li class="level2"><div class="li">Song properties viewer added</div></li>
+							<li class="level2"><div class="li">Select instrument bug fixed</div></li>
+							<li class="level2"><div class="li">Change tempo bug fixed</div></li>
+							<li class="level2"><div class="li">Change tunning bug fixed</div></li>
+						</ul>
+						
+						
+						<h2>Version 0.3 (2006-01-11)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Now you can choose between linear and page layout view</div></li>
+							<li class="level2"><div class="li">Ability to show/hide multitrack view</div></li>
+							<li class="level2"><div class="li">Multilanguage support has been added</div></li>
+							<li class="level2"><div class="li">You can now export to gp3 and gp4 file formats</div></li>
+							<li class="level2"><div class="li">Double dotted note added</div></li>
+						</ul>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
+</html>
diff --git a/TuxGuitar-testing/platform-all/share/lang/last_additions b/TuxGuitar-testing/platform-all/share/lang/last_additions
new file mode 100644
index 0000000..32bb416
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/last_additions
@@ -0,0 +1,59 @@
+# 1.3
+
+action.caret.go-up=Move cursor up
+action.caret.go-down=Move cursor down
+action.caret.go-left=Move cursor left
+action.caret.go-right=Move cursor right
+
+beat.insert-rest=Insert Rest Beat
+beat.delete-note-or-rest=Delete Note or Rest
+
+action.beat.general.insert-rest=Insert rest beat
+action.beat.general.delete-note-or-rest=Delete note or rest
+
+action.note.general.set-fret-number-0=Set fret number 0
+action.note.general.set-fret-number-1=Set fret number 1
+action.note.general.set-fret-number-2=Set fret number 2
+action.note.general.set-fret-number-3=Set fret number 3
+action.note.general.set-fret-number-4=Set fret number 4
+action.note.general.set-fret-number-5=Set fret number 5
+action.note.general.set-fret-number-6=Set fret number 6
+action.note.general.set-fret-number-7=Set fret number 7
+action.note.general.set-fret-number-8=Set fret number 8
+action.note.general.set-fret-number-9=Set fret number 9
+
+
+transport.count-down=Count Down
+action.transport.count-down=Count Down
+
+
+track.short-solo-mute=S-M
+track.short-solo-mute.s=(S)
+track.short-solo-mute.m=(M)
+track.short-solo-mute.none=-
+
+action.track.change-solo=Set track solo
+action.track.change-mute=Set track mute
+
+instruments.dialog-title=Instruments
+instrument.percussion-channel=Percussion Channel
+instrument.program=Program
+instrument.bank=Bank
+
+
+
+track.instrument.default-select-option=--- Select ---
+
+export.all-tracks=Export all tracks
+
+view.show-toolbars=Show Toolbars
+view.show-instruments=Show Instruments
+
+
+
+effects.let-ring=Let Ring
+
+action.view.show-toolbars=Show Toolbars
+action.view.show-instruments=Show Instruments
+action.note.effect.change-let-ring=Add/Remove let ring
+
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages.properties b/TuxGuitar-testing/platform-all/share/lang/messages.properties
new file mode 100644
index 0000000..d5ff0a1
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages.properties
@@ -0,0 +1,866 @@
+
+###############################################################
+###                  Default language codes                 ###
+###############################################################
+locale.aa=Afar
+locale.ab=Abkhazian
+locale.af=Afrikaans
+locale.am=Amharic
+locale.ar=Arabic
+locale.as=Assamese
+locale.ay=Aymara
+locale.az=Azerbaijani
+locale.ba=Bashkir
+locale.be=Byelorussian
+locale.bg=Bulgarian
+locale.bh=Bihari
+locale.bi=Bislama
+locale.bn=Bengali
+locale.bo=Tibetan
+locale.br=Breton
+locale.ca=Catalan
+locale.co=Corsican
+locale.cs=Czech
+locale.cy=Welsh
+locale.da=Danish
+locale.de=German
+locale.dz=Bhutani
+locale.el=Greek
+locale.en=English
+locale.en_US=English (United States)
+locale.eo=Esperanto
+locale.es=Spanish
+locale.et=Estonian
+locale.eu=Basque
+locale.fa=Persian
+locale.fi=Finnish
+locale.fj=Fiji
+locale.fo=Faeroese
+locale.fr=French
+locale.fy=Frisian
+locale.ga=Irish
+locale.gd=Gaelic
+locale.gl=Galician
+locale.gn=Guarani
+locale.gu=Gujarati
+locale.ha=Hausa
+locale.hi=Hindi
+locale.hr=Croatian
+locale.hu=Hungarian
+locale.hy=Armenian
+locale.ia=Interlingua
+locale.ie=Interlingue
+locale.ik=Inupiak
+locale.in=Indonesian
+locale.is=Icelandic
+locale.it=Italian
+locale.iw=Hebrew
+locale.ja=Japanese
+locale.ji=Yiddish
+locale.jw=Javanese
+locale.ka=Georgian
+locale.kk=Kazakh
+locale.kl=Greenlandic
+locale.km=Cambodian
+locale.kn=Kannada
+locale.ko=Korean
+locale.ks=Kashmiri
+locale.ku=Kurdish
+locale.ky=Kirghiz
+locale.la=Latin
+locale.ln=Lingala
+locale.lo=Laothian
+locale.lt=Lithuanian
+locale.lv=Latvian
+locale.mg=Malagasy
+locale.mi=Maori
+locale.mk=Macedonian
+locale.ml=Malayalam
+locale.mn=Mongolian
+locale.mo=Moldavian
+locale.mr=Marathi
+locale.ms=Malay
+locale.mt=Maltese
+locale.my=Burmese
+locale.na=Nauru
+locale.ne=Nepali
+locale.nl=Dutch
+locale.no=Norwegian
+locale.oc=Occitan
+locale.om=Oromo
+locale.or=Oriya
+locale.pa=Punjabi
+locale.pl=Polish
+locale.ps=Pashto
+locale.pt=Portuguese
+locale.qu=Quechua
+locale.rm=Rhaeto-Romance
+locale.rn=Kirundi
+locale.ro=Romanian
+locale.ru=Russian
+locale.rw=Kinyarwanda
+locale.sa=Sanskrit
+locale.sd=Sindhi
+locale.sg=Sangro
+locale.sh=Serbo-Croatian
+locale.si=Singhalese
+locale.sk=Slovak
+locale.sl=Slovenian
+locale.sm=Samoan
+locale.sn=Shona
+locale.so=Somali
+locale.sq=Albanian
+locale.sr=Serbian
+locale.ss=Siswati
+locale.st=Sesotho
+locale.su=Sudanese
+locale.sv=Swedish
+locale.sw=Swahili
+locale.ta=Tamil
+locale.te=Tegulu
+locale.tg=Tajik
+locale.th=Thai
+locale.ti=Tigrinya
+locale.tk=Turkmen
+locale.tl=Tagalog
+locale.tn=Setswana
+locale.to=Tonga
+locale.tr=Turkish
+locale.ts=Tsonga
+locale.tt=Tatar
+locale.tw=Twi
+locale.uk=Ukrainian
+locale.ur=Urdu
+locale.uz=Uzbek
+locale.vi=Vietnamese
+locale.vo=Volapuk
+locale.wo=Wolof
+locale.xh=Xhosa
+locale.yo=Yoruba
+locale.zh=Chinese
+locale.zh_TW=Chinese (Taiwan)
+locale.zh_GB=Chinese (GB)
+locale.zu=Zulu
+
+locale.default=(Default System Language)
+###############################################################
+
+ok=Ok
+cancel=Cancel
+yes=Yes
+no=No
+add=Add
+edit=Edit
+remove=Remove
+save=Save
+exit=Exit
+close=Close
+choose=Choose
+color=Color
+title=Title
+go=Go
+warning=Warning
+error=Error
+plugins=Plugins
+options=Options
+defaults=Defaults
+clean=Clean
+rename=Rename
+fret=Fret
+position=Position
+name=Name
+author=Author
+version=Version
+description=Description
+info=Info
+configure=Configure
+url=URL
+
+file=File
+file.new=New
+file.new-song.default-template=New Song
+file.open=Open
+file.save=Save
+file.save-as=Save As
+file.save-changes-question=The song has unsaved changes.\nDo you want to save the changes?
+file.exit=Exit
+file.export=Export
+file.export-midi=Export MIDI
+file.export-pdf=Export PDF
+file.print=Print
+file.print-preview=Print Preview
+file.import=Import
+file.import-midi=Import MIDI
+file.export-ascii=Export ASCII
+file.history=History
+file.open-url=Open URL
+file.open.error=Cannot Open: {0}
+file.save.error=Cannot Save: {0}
+file.import.error=Cannot Import: {0}
+file.export.error=Cannot Export: {0}
+file.overwrite-question=This file already exists. Do you want to overwrite it?
+
+edit.menu=Edit
+edit.undo=Undo
+edit.redo=Redo
+edit.copy=Copy
+edit.from=From
+edit.to=To
+edit.all-tracks=All Tracks
+edit.paste=Paste
+edit.paste.count=Paste Count
+edit.paste.replace-mode=Paste at the Current Measure
+edit.paste.insert-mode=Paste in new Measure
+edit.delete=Delete
+edit.cut=Cut
+edit.mouse-mode-selection=Selection Mode
+edit.mouse-mode-edition=Score Edition Mode
+edit.not-natural-key=Sharp/Flat mode
+edit.voice-1=Select Voice 1
+edit.voice-2=Select Voice 2
+
+view=View
+view.layout=Layout
+view.layout.page=Page Layout
+view.layout.linear=Linear layout
+view.layout.compact=Compact
+view.layout.multitrack=Multitrack
+view.layout.chord-style=Chord Style
+view.layout.chord-name=Chord Name
+view.layout.chord-diagram=Chord Diagram
+view.layout.score-enabled=Show Score
+view.layout.tablature-enabled=Show Tablature
+view.show-toolbars=Show Toolbars
+view.show-instruments=Show Instruments
+view.show-fretboard=Show Fretboard
+view.show-piano=Show Piano
+view.show-matrix=Show Matrix
+view.show-transport=Show Player
+
+fretboard.direction=Direction
+fretboard.right-mode=Right mode
+fretboard.left-mode=Left mode
+fretboard.background-color=Background Color
+fretboard.display-note-text=Display Note Text
+fretboard.display-scale-text=Display Scale Text
+fretboard.font=Font
+fretboard.fretpoint-color=Fret Color
+fretboard.note-color=Note Color
+fretboard.scale-note-color=Scale Note Color
+fretboard.settings=Fretboard Settings
+fretboard.string-color=String Color
+fretboard.settings.options=Options
+
+piano.editor=Piano Editor
+piano.natural-key-color=Natural Key Color
+piano.not-natural-key-color=Unnatural Key Color
+piano.note-color=Note Color
+piano.scale-note-color=Scale Note Color
+piano.settings=Piano Settings
+
+matrix.editor=Matrix Editor
+matrix.grids=Number of Grids
+matrix.border-color=Border Color
+matrix.font=Font
+matrix.foreground-color=Foreground Color
+matrix.line-color-1=Odd Row Color
+matrix.line-color-2=Even Row Color
+matrix.line-color-over=Mouse Over Row Color
+matrix.note-color=Note Color
+matrix.play-note-color=Play Note Color
+matrix.position-color=Position Color
+matrix.settings=Matrix Settings
+
+composition=Composition
+composition.timesignature=Time Signature
+composition.timesignature.Numerator=Numerator
+composition.timesignature.denominator=Denominator
+composition.timesignature.to-the-end=To the end
+composition.tempo=Tempo
+composition.tempo-percent=Percent
+composition.tempo.invalid=Invalid Tempo
+composition.tempo.start-to-end=Apply this tempo in the whole song
+composition.tempo.position-to-end=Apply this tempo to the end
+composition.tempo.position-to-next=Apply this tempo to the next tempo marker
+composition.properties=Properties
+composition.name=Name
+composition.artist=Artist
+composition.album=Album
+composition.author=Author
+composition.date=Date
+composition.copyright=Copyright
+composition.writer=Tab Creator
+composition.transcriber=Transcribed By
+composition.comments=Comments
+composition.tripletfeel=Triplet Feel
+composition.clef=Clef
+composition.clef.treble=Treble
+composition.clef.bass=Bass
+composition.clef.tenor=Tenor
+composition.clef.alto=Alto
+composition.clef.to-the-end=Apply this clef to the end
+composition.keysignature=Key Signature
+composition.keysignature.natural=Natural
+composition.keysignature.sharp-1=1 Sharp
+composition.keysignature.sharp-2=2 Sharps
+composition.keysignature.sharp-3=3 Sharps
+composition.keysignature.sharp-4=4 Sharps
+composition.keysignature.sharp-5=5 Sharps
+composition.keysignature.sharp-6=6 Sharps
+composition.keysignature.sharp-7=7 Sharps
+composition.keysignature.flat-1=1 Flat
+composition.keysignature.flat-2=2 Flats
+composition.keysignature.flat-3=3 Flats
+composition.keysignature.flat-4=4 Flats
+composition.keysignature.flat-5=5 Flats
+composition.keysignature.flat-6=6 Flats
+composition.keysignature.flat-7=7 Flats
+composition.keysignature.to-the-end=Apply this key signature to the end
+composition.tripletfeel=Triplet Feel
+composition.tripletfeel.none=No Triplet Feel
+composition.tripletfeel.eighth=Triplet 8th
+composition.tripletfeel.sixteenth=Triplet 16th
+composition.tripletfeel.to-the-end=Apply this triplet feel to the end
+
+help=Help
+help.help=Help
+help.doc=Documentation
+help.about=About
+help.about.license=License
+help.about.authors=Authors
+help.about.description=Description
+
+track=Track
+track.number=N�
+track.name=Name
+track.color=Color
+track.first=First Track
+track.last=Last Track
+track.previous=Previous Track
+track.next=Next Track
+track.add=Add Track
+track.remove=Remove Track
+track.clone=Clone Track
+track.move-up=Move Up
+track.move-down=Move Down
+track.instrument=Instrument
+track.instrument.default-select-option=--- Select ---
+track.properties=Properties
+track.properties.general=General
+track.name.default-percussion-name=Percussion
+track.lyrics=Lyrics
+track.solo=Solo
+track.mute=Mute
+
+track.short-solo-mute=S-M
+track.short-solo-mute.s=(S)
+track.short-solo-mute.m=(M)
+track.short-solo-mute.none=-
+
+lyric.editor=Lyric Editor
+
+measure=Measure
+measure.first=First Measure
+measure.last=Last Measure
+measure.previous=Previous Measure
+measure.next=Next Measure
+measure.add=Add Measure
+measure.add.count=Add Count
+measure.add-before-current-position=Add measure before the current position
+measure.add-after-current-position=Add measure after the current position
+measure.add-at-end=Add measure at the end
+measure.remove=Remove Measure
+measure.copy=Copy Measure
+measure.paste=Paste Measure
+measure.clean=Clean Measure
+
+duration=Duration
+duration.whole=Whole
+duration.half=Half
+duration.quarter=Quarter
+duration.eighth=Eighth
+duration.sixteenth=Sixteenth
+duration.thirtysecond=Thirty-Second
+duration.sixtyfourth=Sixty-Fourth
+duration.dotted=Dotted
+duration.doubledotted=Double Dotted
+duration.division-type=Triplet
+
+dynamic=Dynamic
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Effects
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Dead Note
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Ghost Note
+effects.accentuatednote=Accentuated Note
+effects.heavyaccentuatednote=Heavy Accentuated Note
+effects.harmonic=Harmonic
+effects.grace=Grace Note
+effects.grace-editor=Grace Note Editor
+effects.grace.before-beat=Before beat
+effects.grace.on-beat=On beat
+effects.grace.transition=Transition
+effects.grace.transition-none=None
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Trill Editor
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=Palm Mute
+effects.let-ring=Let Ring
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Left Hand
+effects.harmonic.tapped.right-hand=Right Hand
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+
+bend.editor=Bend Editor
+bend.bend=Bend
+bend.bend-release=Bend/Release
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=Player
+transport.start=Start
+transport.stop=Stop
+transport.pause=Pause
+transport.first=First
+transport.last=Last
+transport.previous=Previous
+transport.next=Next
+transport.metronome=Metronome
+transport.count-down=Count Down
+transport.mode=Play Mode
+transport.mode.simple=Simple Mode
+transport.mode.simple.tempo-percent=Percentage of tempo
+transport.mode.simple.loop=Play looped
+transport.mode.trainer=Training Mode
+transport.mode.trainer.increment-description=Increment by
+transport.mode.loop-range=Loop Range
+transport.mode.loop-range.from=Play from measure
+transport.mode.loop-range.from-default=From the beginning
+transport.mode.loop-range.to=Play to measure
+transport.mode.loop-range.to-default=To the end
+transport.set-loop-start=Set loop start point
+transport.set-loop-end=Set loop end point
+
+
+instruments.dialog-title=Instruments
+instruments.volume=Gain
+instrument=Instrument
+instrument.percussion-channel=Percussion Channel
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.program=Program
+instrument.bank=Bank
+instrument.volume=Volume
+instrument.balance=Balance
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+
+
+repeat.open=Open Repeat
+repeat.close=Close Repeat
+repeat.alternative=Alternative Repeats
+repeat.alternative.editor=Edit Alternative Repeats
+repetitions=Repetitions
+repeat.number-of-repetitions=Number of Repetitions
+
+beat=Beat
+beat.clean=Clean Beat
+beat.insert-rest=Insert Rest Beat
+beat.delete-note-or-rest=Delete Note or Rest
+beat.voice.remove-unused=Remove Unused Voice
+beat.voice-up=Stems Up
+beat.voice-down=Stems Down
+beat.voice-auto=Auto Stems
+beat.stroke=Stroke
+beat.stroke-up=Upstroke
+beat.stroke-down=Downstroke
+beat.move-left=Move One Beat Left
+beat.move-right=Move One Beat Right
+beat.move-custom=Custom Beat Move
+beat.move-custom.dialog.title=Custom Move
+beat.move-custom.dialog.direction-tip=Move Direction
+beat.move-custom.dialog.move-1.tip=Major Move
+beat.move-custom.dialog.move-2.tip=Fine Move
+beat.move-custom.dialog.direction=Direction
+beat.move-custom.dialog.direction.right=Move To Right
+beat.move-custom.dialog.direction.left=Move To Left
+beat.move-custom.dialog.count=Count
+beat.move-custom.dialog.duration=Duration
+beat.move-custom.dialog.duration.type=Dotted/Double-Dotted
+beat.move-custom.dialog.duration.type.normal=None
+beat.move-custom.dialog.duration.division-type=Division Type
+beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet)
+
+note=Note
+note.semitone-up=Semitone Up
+note.semitone-down=Semitone Down
+note.shift-up=Shift Up
+note.shift-down=Shift Down
+note.tiednote=Tied Note
+note.deadnote=Dead Note
+
+insert.chord=Insert Chord
+chord.editor=Chord Editor
+chord=Chord
+chord.name=Name
+chord.bass=Bass
+chord.custom=Custom Chord
+chord.custom.name-empty-error=Chord name can not be empty.
+chord.custom.name-exist-error=Chord name already exists.
+chord.settings.tip=Custom Settings
+chord.settings.type=Type
+chord.settings.type.most-common=Most Common
+chord.settings.type.inversions=Inversions
+chord.settings.type.close-voiced=Close Voiced
+chord.settings.type.open-voiced=Open Voiced
+chord.settings.open-chords=Open Chords
+chord.settings.chords-to-display=Chords to Display
+chord.settings.search-frets=Search Frets
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+
+tuning=Tuning
+tuning.offset=Offset
+tuning.strings=Strings
+tuning.strings.transpose=Transpose afected notes.
+tuning.strings.transpose.try-keep-strings=Try keep notes at same string
+tuning.strings.transpose.apply-to-chords=Transpose Chords
+
+language=Language
+
+choose-color=Choose a color
+
+settings=Settings
+settings.config=Configure TuxGuitar
+settings.config.language=Language
+settings.config.language.choose=Choose Language
+settings.config.styles=Styles
+settings.config.styles.general=General Styles
+settings.config.styles.printer=Printer Styles
+settings.config.styles.font.default=Default Font
+settings.config.styles.font.note=Note Font
+settings.config.styles.font.lyric=Lyrics Font
+settings.config.styles.font.text=Text Font
+settings.config.styles.font.time-signature=Time Signature Font
+settings.config.styles.font.printer-default=Printer Default Font
+settings.config.styles.font.printer-note=Printer Note Font
+settings.config.styles.font.printer-time-signature=Printer Time Signature Font
+settings.config.styles.color.score-note=Score Note Color
+settings.config.styles.color.tab-note=Tab Note Color
+settings.config.styles.color.play-note=Play Note Color
+settings.config.apply-changes-question=Do you want to apply changes now?
+settings.config.sound=Sound
+settings.config.main=General
+settings.config.main.window-title=Window Title
+settings.config.main.window-title.help=The following variables will be replaced at the window title:
+settings.config.main.window-title.var.description.appname=This variable represents the Application Name: TuxGuitar
+settings.config.main.window-title.var.description.appversion=This variable represents the version of TuxGuitar.
+settings.config.main.window-title.var.description.filename=This variable represents the name of the opened file
+settings.config.main.window-title.var.description.filepath=This variable represents the path of the opened file
+settings.config.main.window-title.var.description.songname=This variable represents the name of the song
+settings.config.main.window-title.var.description.songauthor=This variable represents the author of the song
+settings.config.main.window-title.var.description.songalbum=This variable represents the album of the song
+settings.config.main.window-title.var.description.songartist=This variable represents the artist of the song
+settings.config.main.options=Options
+settings.config.main.splash-enabled=Launch splash screen on startup
+settings.config.main.table.auto-size.enabled=Enable Automatic Table resizing
+settings.config.styles.color.lines=Horizontal lines color
+settings.config.toolbars=Tool Bars
+settings.config.toolbars.tip=Customize Your ToolBars
+settings.config.toolbars.list=Available ToolBars
+settings.config.toolbars.move-up=Move Up
+settings.config.toolbars.move-down=Move Down
+settings.config.skin=Skins
+settings.config.skin.choose=Choose your skin
+settings.keybindings=Configure Key Bindings
+
+key-bindings-editor=Key Binding Editor
+key-bindings-editor-action-select=Select an Action
+key-bindings-editor-action-column=Actions
+key-bindings-editor-shortcut-column=Keys
+key-bindings-editor-push-a-key=Press a key
+key-bindings-editor-save-question=There are unsaved changes, do you want to exit without saving?
+key-bindings-editor-override=Shortcut already in use! Are you sure you want to use it?
+
+print.print=Print
+print.dialog=Print
+print.service=Service
+print.service.name=Name
+print.service.status=Status
+print.service.type=Type
+print.service.info=Info
+print.range=Range
+print.range.all-pages=All
+print.range.pages=Pages
+print.range.pages-to=To
+print.copies=Copies
+print.copies-number=Number of copies
+print.print-to-file=Print to file
+print.file-chooser=Choose
+print-header.default-song-name=Untitled
+print-header.default-song-author=Anonymous
+
+print.preview=Print Preview
+print.preview.page-of=Of
+
+marker=Marker
+marker.add=Add Marker
+marker.list=List Markers
+marker.first=Go First Marker
+marker.last=Go Last Marker
+marker.next=Go Next Marker
+marker.previous=Go Previous Marker
+
+export.tablature-enabled=Show Tablature
+export.score-enabled=Show Score
+export.chord-name-enabled=Show Chord Names
+export.chord-diagram-enabled=Show Chord Diagrams
+export.black-and-white=Black And White Mode
+export.all-tracks=Export all tracks
+
+scale=Scale
+scale.list=Scale List
+
+text.insert=Insert Text
+text.editor=Text Editor
+text.text=Text
+
+tools=Tools
+tools.scale=Scale list
+tools.browser=Browser
+tools.plugins=Plugins
+tools.shortcuts=Shortcuts
+tools.settings=Settings
+
+tools.transpose=Transpose
+tools.transpose.semitones=Transposition Semitones
+tools.transpose.apply-to-track=Transpose all measures
+tools.transpose.apply-to-measure=Transpose only this measure
+tools.transpose.apply-to-all-tracks=Apply to all tracks
+tools.transpose.try-keep-strings=Try keep notes at same string when it's possible
+tools.transpose.apply-to-chords=Transpose Chords
+
+browser.dialog=Browser
+browser.menu.file=File
+browser.open=Open
+browser.exit=Exit
+browser.menu.collection=Collection
+browser.menu.go=Go
+browser.collection.select=Select Collection
+browser.collection.open=Open
+browser.collection.remove=Remove
+browser.collection.close=Close
+browser.collection.new=New
+browser.go-root=Home
+browser.go-back=Back
+browser.refresh=Refresh
+browser.factory.fs.name=File System
+browser.collection.fs.name=Name
+browser.collection.fs.path=Folder
+browser.collection.fs.editor-title=File System Collection
+browser.collection.fs.editor-tip=Choose your collection folder
+browser.collection.fs.invalid-path=Please, select a valid folder
+
+midi.port=MIDI Port
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=Not available.
+plugin.column.name=Plugin Name
+plugin.column.enabled=Enabled
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=File Items
+edit.items=Edit Items
+property.items=Property Items
+track.items=Track Items
+duration.items=Duration Items
+beat.items=Beat Items
+composition.items=Composition Items
+repeat.items=Repeat Items
+transport.items=Player Items
+marker.items=Marker Items
+insert.items=Insert Items
+layout.items=Layout Items
+view.items=View Items
+effect.items=Effect Items
+dynamic.items=Dynamic Items
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=New File
+action.file.open=Open File
+action.file.open-url=Open URL
+action.file.save=Save
+action.file.save-as=Save As
+action.file.print=Print
+action.file.print-preview=Print Preview
+action.file.exit=Exit TuxGuitar
+action.edit.undo=Undo
+action.edit.redo=Redo
+action.edit.voice-1=Select Voice 1
+action.edit.voice-2=Select Voice 2
+action.caret.go-up=Move cursor up
+action.caret.go-down=Move cursor down
+action.caret.go-left=Move cursor left
+action.caret.go-right=Move cursor right
+action.composition.change-time-signature=Change Time Signature
+action.composition.change-tempo=Change Tempo
+action.composition.change-info=Change Song Information
+action.composition.change-clef=Change Clef
+action.composition.change-key-signature=Change Key Signature
+action.composition.change-triplet-feel=Change Triplet Feel
+action.view.layout-set-page=Show Page Layout
+action.view.layout-set-linear=Show Linear Layout
+action.view.layout-set-multitrack=Show Multitrack Mode
+action.view.layout-set-score-enabled=Show Score
+action.view.layout-set-tablature-enabled=Show Tablature
+action.view.layout-set-compact=Show Compact Mode
+action.view.layout-set-chord-diagram-enabled=Enable Chord Diagram
+action.view.layout-set-chord-name-enabled=Enable Chord Name
+action.view.show-toolbars=Show Toolbars
+action.view.show-fretboard=Show Fretboard
+action.view.show-piano=Show Piano
+action.view.show-matrix=Show Matrix
+action.view.show-instruments=Show Instruments
+action.view.show-transport=Show Player
+action.track.add=Add Track
+action.track.remove=Remove Track
+action.track.clone=Clone Track
+action.track.go-first=Go to first track
+action.track.go-last=Go to last track
+action.track.go-next=Go to next track
+action.track.go-previous=Go to previous track
+action.track.lyrics=Edit track lyrics
+action.track.properties=Change track properties
+action.track.move-down=Move track down
+action.track.move-up=Move track up
+action.track.change-solo=Set track solo
+action.track.change-mute=Set track mute
+action.measure.add=Add measure
+action.measure.remove=Remove measure
+action.measure.copy=Copy measure
+action.measure.paste=Paste measure
+action.measure.clean=Clean measure
+action.measure.go-first=Go to first measure
+action.measure.go-last=Go to last measure
+action.measure.go-next=Go to next measure
+action.measure.go-previous=Go to previous measure
+action.beat.general.remove-unused-voice=Remove Unused Voice
+action.beat.general.voice-up=Set Stems Up
+action.beat.general.voice-down=Set Stems Down
+action.beat.general.voice-auto=Set Auto Stems
+action.beat.general.set-stroke-up=Set Upstroke
+action.beat.general.set-stroke-down=Set Downstroke
+action.beat.general.move-left=Move One Beat Left
+action.beat.general.move-right=Move One Beat Right
+action.beat.general.move-custom=Custom Beat Move
+action.beat.general.insert-rest=Insert rest beat
+action.beat.general.delete-note-or-rest=Delete note or rest
+action.note.general.set-fret-number-0=Set fret number 0
+action.note.general.set-fret-number-1=Set fret number 1
+action.note.general.set-fret-number-2=Set fret number 2
+action.note.general.set-fret-number-3=Set fret number 3
+action.note.general.set-fret-number-4=Set fret number 4
+action.note.general.set-fret-number-5=Set fret number 5
+action.note.general.set-fret-number-6=Set fret number 6
+action.note.general.set-fret-number-7=Set fret number 7
+action.note.general.set-fret-number-8=Set fret number 8
+action.note.general.set-fret-number-9=Set fret number 9
+action.note.general.clean-beat=Clean beat
+action.note.general.decrement-semitone=Decrement semitone
+action.note.general.increment-semitone=Increment semitone
+action.note.general.shift-down=Shift down
+action.note.general.shift-up=Shift up
+action.note.general.tied=Add/Remove tied
+action.note.duration.set-whole=Set Whole Duration
+action.note.duration.set-half=Set Half Duration
+action.note.duration.set-quarter=Set Quarter Duration
+action.note.duration.set-eighth=Set Eighth Duration
+action.note.duration.set-sixteenth=Set Sixteenth Duration
+action.note.duration.set-thirty-second=Set Thirty Second Duration
+action.note.duration.set-sixty-fourth=Set Sixty Fourth Duration
+action.note.duration.change-dotted=Add/Remove dot
+action.note.duration.change-double-dotted=Add/Remove double dotted
+action.note.duration.change-division-type=Add/Remove triplet
+action.note.duration.decrement-duration=Decrement Duration
+action.note.duration.increment-duration=Increment Duration
+action.note.effect.change-vibrato=Add/Remove Vibrato
+action.note.effect.change-bend=Add/Remove bend
+action.note.effect.change-slide=Add/Remove Slide
+action.note.effect.change-hammer=Add/Remove hammer-on/pull-off
+action.note.effect.change-accentuated=Add/Remove accentuated
+action.note.effect.change-dead=Add/Remove dead note
+action.note.effect.change-fade-in=Add/Remove fade in
+action.note.effect.change-ghost=Add/Remove ghost
+action.note.effect.change-grace=Add/Remove grace
+action.note.effect.change-harmonic=Add/Remove harmonic
+action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated
+action.note.effect.change-palm-mute=Add/Remove palm mute
+action.note.effect.change-let-ring=Add/Remove let ring
+action.note.effect.change-popping=Add/Remove popping
+action.note.effect.change-slapping=Add/Remove slapping
+action.note.effect.change-staccato=Add/Remove staccato
+action.note.effect.change-tapping=Add/Remove tapping
+action.note.effect.change-tremolo-bar=Add/Remove tremolo bar
+action.note.effect.change-tremolo-picking=Add/Remove tremolo picking
+action.note.effect.change-trill=Add/Remove Trill
+action.insert.open-repeat=Open Repeat
+action.insert.close-repeat=Close Repeat
+action.insert.repeat-alternative=Repeat Alternative
+action.insert.chord=Insert Chord
+action.insert.text=Insert Text
+action.marker.add=Add Marker
+action.marker.go-next=Go Next Marker
+action.marker.go-previous=Go Previous Marker
+action.transport.play=Play Song
+action.transport.stop=Stop Playing
+action.transport.mode=Player Mode
+action.transport.metronome=Metrononome
+action.transport.count-down=Count Down
+action.transport.set-loop-start=Set loop start point
+action.transport.set-loop-end=Set loop end point
+action.tools.browser=Browser
+action.tools.transpose=Transpose Notes
+action.settings.configure=Settings
+action.help.doc=Help
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_bg.properties b/TuxGuitar-testing/platform-all/share/lang/messages_bg.properties
new file mode 100644
index 0000000..e91f517
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_bg.properties
@@ -0,0 +1,682 @@
+ok=\u0414\u043E\u0431\u0440\u0435
+cancel=\u041E\u0442\u043A\u0430\u0437
+yes=\u0414\u0430
+no=\u041D\u0435
+add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435
+edit=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435
+remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435
+save=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435
+exit=\u0418\u0437\u0445\u043E\u0434
+close=\u0417\u0430\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+choose=\u0418\u0437\u0431\u043E\u0440
+color=\u0426\u0432\u044F\u0442
+title=\u0417\u0430\u0433\u043B\u0430\u0432\u0438\u0435
+go=\u041D\u0430\u043F\u0440\u0435\u0434
+warning=\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435
+error=\u0413\u0440\u0435\u0448\u043A\u0430
+plugins=\u041F\u0440\u0438\u0441\u0442\u0430\u0432\u043A\u0438
+options=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+defaults=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438
+clean=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435
+rename=\u041F\u0440\u0435\u0438\u043C\u0435\u043D\u0443\u0432\u0430\u043D\u0435
+fret=\u041F\u0440\u0430\u0433\u0447\u0435
+position=\u041F\u043E\u0437\u0438\u0446\u0438\u044F
+name=\u0418\u043C\u0435
+author=\u0410\u0432\u0442\u043E\u0440
+version=\u0412\u0435\u0440\u0441\u0438\u044F
+description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+info=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F
+configure=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u0432\u0430\u043D\u0435
+url=\u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442 \u0430\u0434\u0440\u0435\u0441
+
+file=\u0424\u0430\u0439\u043B
+file.new=\u041D\u043E\u0432
+file.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+file.save=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435
+file.save-as=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u043A\u0430\u0442\u043E
+file.save-changes-question=\u041F\u0435\u0441\u0435\u043D\u0442\u0430 \u0438\u043C\u0430 \u043D\u0435\u0437\u0430\u043F\u0430\u0437\u0435\u043D\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u0438.\n\u0416\u0435\u043B\u0430\u0435\u0442\u0435 \u043B\u0438 \u0434\u0430 \u0433\u0438 \u0437\u0430\u043F\u0430\u0437\u0438\u0442\u0435?
+file.exit=\u0418\u0437\u0445\u043E\u0434
+file.export=\u0418\u0437\u043D\u0430\u0441\u044F\u043D\u0435
+file.export-midi=\u0418\u0437\u043D\u0430\u0441\u044F\u043D\u0435 \u0432 MIDI
+file.export-pdf=\u0418\u0437\u043D\u0430\u0441\u044F\u043D\u0435 \u0432 PDF
+file.print=\u041F\u0435\u0447\u0430\u0442
+file.print-preview=\u041F\u0440\u0435\u0433\u043B\u0435\u0434 \u0437\u0430 \u043F\u0435\u0447\u0430\u0442
+file.import=\u0412\u043D\u0430\u0441\u044F\u043D\u0435
+file.import-midi=\u0412\u043D\u0430\u0441\u044F\u043D\u0435 \u043E\u0442 MIDI
+file.export-ascii=\u0418\u0437\u043D\u0430\u0441\u044F\u043D\u0435 \u0432 ASCII
+file.history=\u0418\u0441\u0442\u043E\u0440\u0438\u044F
+file.open-url=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u0430\u0434\u0440\u0435\u0441
+file.open.error=\u041D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043E\u0442\u0432\u043E\u0440\u0438: {0}
+file.save.error=\u041D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0437\u0430\u043F\u0430\u0437\u0438: {0}
+file.import.error=\u041D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0432\u043D\u0435\u0441\u0435: {0}
+file.export.error=\u041D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043D\u0435\u0441\u0435: {0}
+file.overwrite-question=\u0422\u0430\u043A\u044A\u0432 \u0444\u0430\u0439\u043B \u0432\u0435\u0447\u0435 \u0441\u044A\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430. \u0416\u0435\u043B\u0430\u0435\u0442\u0435 \u043B\u0438 \u0434\u0430 \u0433\u043E \u043F\u0440\u0435\u0437\u0430\u043F\u0438\u0448\u0435\u0442\u0435?
+
+edit.menu=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435
+edit.undo=\u041E\u0442\u043C\u044F\u043D\u0430
+edit.redo=\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+edit.copy=\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u0435
+edit.from=\u041E\u0442
+edit.to=\u0414\u043E
+edit.all-tracks=\u0412\u0441\u0438\u0447\u043A\u0438 \u043F\u0438\u0441\u0442\u0438
+edit.paste=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435
+edit.paste.count=Paste Count
+edit.paste.replace-mode=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435 \u0432 \u0442\u0435\u043A\u0443\u0449\u0438\u044F \u0442\u0430\u043A\u0442
+edit.paste.insert-mode=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435 \u0432 \u043D\u043E\u0432 \u0442\u0430\u043A\u0442
+edit.delete=\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043D\u0435
+edit.cut=\u0418\u0437\u0440\u044F\u0437\u0432\u0430\u043D\u0435
+edit.mouse-mode-selection=\u0420\u0435\u0436\u0438\u043C \u043D\u0430 \u0438\u0437\u0431\u0438\u0440\u0430\u043D\u0435
+edit.mouse-mode-edition=Score Edition Mode
+edit.not-natural-key=\u0420\u0435\u0436\u0438\u043C \u0434\u0438\u0435\u0437/\u0431\u0435\u043C\u043E\u043B
+edit.voice-1=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0433\u043B\u0430\u0441 1
+edit.voice-2=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0433\u043B\u0430\u0441 2
+
+view=\u0418\u0437\u0433\u043B\u0435\u0434
+view.layout=\u041F\u043E\u0434\u0440\u0435\u0434\u0431\u0430
+view.layout.page=\u041F\u043E\u0434\u0440\u0435\u0434\u0431\u0430 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430
+view.layout.linear=\u041B\u0438\u043D\u0435\u0439\u043D\u0430 \u043F\u043E\u0434\u0440\u0435\u0434\u0431\u0430
+view.layout.compact=\u041A\u043E\u043C\u043F\u0430\u043A\u0442\u043D\u0430
+view.layout.multitrack=\u041C\u043D\u043E\u0433\u043E\u043F\u0438\u0441\u0442\u043E\u0432\u0430
+view.layout.chord-style=\u0421\u0442\u0438\u043B \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+view.layout.chord-name=\u0418\u043C\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+view.layout.chord-diagram=\u0414\u0438\u0430\u0433\u0440\u0430\u043C\u0430 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+view.layout.score-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0430
+view.layout.tablature-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u0431\u043B\u0430\u0442\u0443\u0440\u0430
+view.show-mixer=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0441\u043C\u0435\u0441\u0438\u0442\u0435\u043B
+view.show-fretboard=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0433\u0440\u0438\u0444
+view.show-piano=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0430\u043D\u043E
+view.show-matrix=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043C\u0430\u0442\u0440\u0438\u0446\u0430
+view.show-transport=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043B\u0435\u044A\u0440
+
+fretboard.direction=\u041F\u043E\u0441\u043E\u043A\u0430
+fretboard.right-mode=\u0414\u0435\u0441\u0435\u043D \u0440\u0435\u0436\u0438\u043C
+fretboard.left-mode=\u041B\u044F\u0432 \u0440\u0435\u0436\u0438\u043C
+fretboard.background-color=\u0424\u043E\u043D\u043E\u0432 \u0446\u0432\u044F\u0442
+fretboard.display-note-text=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u0442\u0435\u043A\u0441\u0442 \u043D\u0430 \u043D\u043E\u0442\u0430
+fretboard.display-scale-text=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u0442\u0435\u043A\u0441\u0442\u0430 \u043D\u0430 \u0433\u0430\u043C\u0430\u0442\u0430
+fretboard.font=\u0428\u0440\u0438\u0444\u0442
+fretboard.fretpoint-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u043F\u0440\u0430\u0433\u0447\u0435
+fretboard.note-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u043D\u043E\u0442\u0430
+fretboard.scale-note-color=Scale Note Color
+fretboard.settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043D\u0430 \u0433\u0440\u0438\u0444
+fretboard.string-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u0441\u0442\u0440\u0443\u043D\u0430
+fretboard.settings.options=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+
+piano.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u043F\u0438\u0430\u043D\u043E
+piano.natural-key-color=Natural Key Color
+piano.not-natural-key-color=Unnatural Key Color
+piano.note-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u043D\u043E\u0442\u0430
+piano.scale-note-color=Scale Note Color
+piano.settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043D\u0430 \u043F\u0438\u0430\u043D\u043E
+
+matrix.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u043C\u0430\u0442\u0440\u0438\u0446\u0430
+matrix.grids=\u0411\u0440\u043E\u0439 \u043C\u0440\u0435\u0436\u0438
+matrix.border-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0430
+matrix.font=\u0428\u0440\u0438\u0444\u0442
+matrix.foreground-color=\u0426\u0432\u044F\u0442 \u0437\u0430 \u043F\u0440\u0435\u0434\u0435\u043D \u043F\u043B\u0430\u043D
+matrix.line-color-1=\u0426\u0432\u044F\u0442 \u0437\u0430 \u043D\u0435\u0447\u0435\u0442\u0435\u043D \u0440\u0435\u0434
+matrix.line-color-2=\u0426\u0432\u044F\u0442 \u0437\u0430 \u0447\u0435\u0442\u0435\u043D \u0440\u0435\u0434
+matrix.line-color-over=\u0426\u0432\u044F\u0442 \u043F\u0440\u0438 \u043F\u0440\u0435\u043C\u0438\u043D\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u043C\u0438\u0448\u043A\u0430\u0442\u0430 \u043E\u0442\u0433\u043E\u0440\u0435
+matrix.note-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u043D\u043E\u0442\u0430
+matrix.play-note-color=\u0426\u0432\u044F\u0442 \u0437\u0430 \u0438\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435 \u043D\u0430 \u043D\u043E\u0442\u0430
+matrix.position-color=\u0426\u0432\u044F\u0442 \u0437\u0430 \u043F\u043E\u0437\u0438\u0446\u0438\u044F
+matrix.settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043D\u0430 \u043C\u0430\u0442\u0440\u0438\u0446\u0430
+
+composition=\u041A\u043E\u043C\u043F\u043E\u0437\u0438\u0446\u0438\u044F
+composition.timesignature=Time Signature
+composition.timesignature.Numerator=Numerator
+composition.timesignature.denominator=Denominator
+composition.timesignature.to-the-end=\u0414\u043E \u043A\u0440\u0430\u044F
+composition.tempo=\u0422\u0435\u043C\u043F\u043E
+composition.tempo-percent=\u041F\u0440\u043E\u0446\u0435\u043D\u0442
+composition.tempo.invalid=\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0442\u0435\u043C\u043F\u043E
+composition.tempo.start-to-end=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043D\u0430 \u0442\u043E\u0432\u0430 \u0442\u0435\u043C\u043F\u043E \u043A\u044A\u043C \u0446\u044F\u043B\u0430\u0442\u0430 \u043F\u0435\u0441\u0435\u043D
+composition.tempo.position-to-end=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043D\u0430 \u0442\u043E\u0432\u0430 \u0442\u0435\u043C\u043F\u043E \u0434\u043E \u043A\u0440\u0430\u044F
+composition.tempo.position-to-next=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043D\u0430 \u0442\u043E\u0432\u0430 \u0442\u0435\u043C\u043F\u043E \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+composition.properties=\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430
+composition.name=\u0418\u043C\u0435
+composition.artist=\u0418\u0437\u043F\u044A\u043B\u043D\u0438\u0442\u0435\u043B
+composition.album=\u0410\u043B\u0431\u0443\u043C
+composition.author=\u0410\u0432\u0442\u043E\u0440
+composition.date=\u0414\u0430\u0442\u0430
+composition.copyright=\u0410\u0432\u0442\u043E\u0440\u0441\u043A\u0438 \u043F\u0440\u0430\u0432\u0430
+composition.writer=Tab Creator
+composition.transcriber=\u0422\u0440\u0430\u043D\u0441\u043A\u0440\u0438\u0431\u0438\u0440\u0430\u043D\u043E \u043E\u0442
+composition.comments=\u041A\u043E\u043C\u0435\u043D\u0442\u0430\u0440\u0438
+composition.tripletfeel=Triplet Feel
+composition.clef=\u041A\u043B\u044E\u0447
+composition.clef.treble=\u0412\u0438\u0441\u043E\u043A\u0438
+composition.clef.bass=\u0411\u0430\u0441
+composition.clef.tenor=\u0422\u0435\u043D\u043E\u0440
+composition.clef.alto=\u0410\u043B\u0442
+composition.clef.to-the-end=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043D\u0430 \u0442\u043E\u0437\u0438 \u043A\u043B\u044E\u0447 \u0434\u043E \u043A\u0440\u0430\u044F
+composition.keysignature=Key Signature
+composition.keysignature.natural=\u041D\u0430\u0442\u0443\u0440\u0430\u043B\u0435\u043D
+composition.keysignature.sharp-1=1 \u0434\u0438\u0435\u0437
+composition.keysignature.sharp-2=2 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-3=3 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-4=4 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-5=5 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-6=6 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-7=7 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.flat-1=1 \u0431\u0435\u043C\u043E\u043B
+composition.keysignature.flat-2=3 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-3=3 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-4=4 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-5=5 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-6=6 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-7=7 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.to-the-end=Apply this key signature to the end
+composition.tripletfeel=Triplet Feel
+composition.tripletfeel.none=No Triplet Feel
+composition.tripletfeel.eighth=Triplet 8th
+composition.tripletfeel.sixteenth=Triplet 16th
+composition.tripletfeel.to-the-end=Apply this triplet feel to the end
+
+help=\u041F\u043E\u043C\u043E\u0449
+help.help=\u041F\u043E\u043C\u043E\u0449
+help.doc=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044F
+help.about=\u041E\u0442\u043D\u043E\u0441\u043D\u043E
+help.about.license=\u041B\u0438\u0446\u0435\u043D\u0437
+help.about.authors=\u0410\u0432\u0442\u043E\u0440\u0438
+help.about.description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+
+track=\u041F\u0438\u0441\u0442\u0430
+track.number=N\u00B0
+track.name=\u0418\u043C\u0435
+track.color=\u0426\u0432\u044F\u0442
+track.first=\u041F\u044A\u0440\u0432\u0430 \u043F\u0438\u0441\u0442\u0430
+track.last=\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.previous=\u041F\u0440\u0435\u0434\u0438\u0448\u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.next=\u0421\u043B\u0435\u0434\u0432\u0430\u0449\u0430 \u043F\u0438\u0441\u0442\u0430
+track.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.clone=\u0414\u0443\u0431\u043B\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.move-up=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0433\u043E\u0440\u0435
+track.move-down=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0434\u043E\u043B\u0443
+track.instrument=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442
+track.properties=\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430
+track.properties.general=\u041E\u0431\u0449\u0438
+track.name.default-percussion-name=\u041F\u0435\u0440\u043A\u0443\u0441\u0438\u044F
+track.lyrics=\u0421\u0442\u0438\u0445\u043E\u0432\u0435
+track.solo=\u0421\u043E\u043B\u043E
+track.mute=\u0411\u0435\u0437 \u0437\u0432\u0443\u043A
+
+lyric.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0441\u0442\u0438\u0445\u043E\u0432\u0435
+
+measure=\u0422\u0430\u043A\u0442
+measure.first=\u041F\u044A\u0440\u0432\u0438 \u0442\u0430\u043A\u0442
+measure.last=\u041F\u043E\u0441\u043B\u0435\u0434\u0435\u043D \u0442\u0430\u043A\u0442
+measure.previous=\u041F\u0440\u0435\u0434\u0438\u0448\u0435\u043D \u0442\u0430\u043A\u0442
+measure.next=\u0421\u043B\u0435\u0434\u0432\u0430\u0449 \u0442\u0430\u043A\u0442
+measure.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+measure.add.count=Add Count
+measure.add-before-current-position=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442 \u043F\u0440\u0435\u0434\u0438 \u0442\u0435\u043A\u0443\u0449\u0430\u0442\u0430 \u043F\u043E\u0437\u0438\u0446\u0438\u044F
+measure.add-after-current-position=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442 \u0441\u043B\u0435\u0434 \u0442\u0435\u043A\u0443\u0449\u0430\u0442\u0430 \u043F\u043E\u0437\u0438\u0446\u0438\u044F
+measure.add-at-end=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442 \u0432 \u043A\u0440\u0430\u044F
+measure.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+measure.copy=\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+measure.paste=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+measure.clean=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+
+duration=\u041F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+duration.whole=\u0426\u044F\u043B\u0430
+duration.half=\u041F\u043E\u043B\u043E\u0432\u0438\u043D\u0430
+duration.quarter=\u0427\u0435\u0442\u0432\u044A\u0440\u0442\u0438\u043D\u0430
+duration.eighth=\u041E\u0441\u043C\u0438\u043D\u0430
+duration.sixteenth=\u0428\u0435\u0441\u0442\u043D\u0430\u0439\u0441\u0435\u0442\u0438\u043D\u0430
+duration.thirtysecond=\u0422\u0440\u0438\u0434\u0435\u0441\u0435\u0442\u0438\u0432\u0442\u043E\u0440\u0438\u043D\u0430
+duration.sixtyfourth=\u0428\u0435\u0441\u0442\u0434\u0435\u0441\u0435\u0442\u0438\u0447\u0435\u0442\u0432\u044A\u0440\u0442\u0438\u043D\u0430
+duration.dotted=\u0423\u0434\u044A\u043B\u0436\u0435\u043D\u0430
+duration.doubledotted=\u0414\u0432\u043E\u0439\u043D\u043E \u0443\u0434\u044A\u043B\u0436\u0435\u043D\u0430
+duration.division-type=\u0422\u0440\u0438\u043E\u043B\u0430
+
+dynamic=\u0414\u0438\u043D\u0430\u043C\u0438\u043A\u0430
+dynamic.piano-pianissimo=\u041F\u0438\u0430\u043D\u043E-\u043F\u0438\u0430\u043D\u0438\u0441\u0438\u043C\u043E
+dynamic.pianissimo=\u041F\u0438\u0430\u043D\u0438\u0441\u0438\u043C\u043E
+dynamic.piano=\u041F\u0438\u0430\u043D\u043E
+dynamic.mezzo-piano=\u041C\u0435\u0446\u043E-\u043F\u0438\u0430\u043D\u043E
+dynamic.mezzo-forte=\u041C\u0435\u0446\u043E-\u0444\u043E\u0440\u0442\u0435
+dynamic.forte=\u0424\u043E\u0440\u0442\u0435
+dynamic.fortissimo=\u0424\u043E\u0440\u0442\u0438\u0441\u0438\u043C\u043E
+dynamic.forte-fortissimo=\u0424\u043E\u0440\u0442\u0435-\u0444\u043E\u0440\u0442\u0438\u0441\u0438\u043C\u043E
+
+effects=\u0415\u0444\u0435\u043A\u0442\u0438
+effects.vibrato=\u0412\u0438\u0431\u0440\u0430\u0442\u043E
+effects.bend=\u041F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+effects.deadnote=\u0413\u043B\u0443\u0445\u0430 \u043D\u043E\u0442\u0430
+effects.slide=\u0413\u043B\u0438\u0441\u0430\u043D\u0434\u043E
+effects.hammer=\u0424\u043E\u0440\u0448\u043B\u0430\u0433  (\u043F\u043E\u0447\u0443\u043A\u0432\u0430\u043D\u0435/\u0438\u0437\u0434\u044A\u0440\u043F\u0432\u0430\u043D\u0435)
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=\u041F\u0440\u0438\u0433\u043B\u0443\u0448\u0435\u043D\u0430 \u043D\u043E\u0442\u0430
+effects.accentuatednote=\u0410\u043A\u0446\u0435\u043D\u0442\u0438\u0440\u0430\u043D\u0430 \u043D\u043E\u0442\u0430
+effects.heavyaccentuatednote=\u0421\u0438\u043B\u043D\u043E \u0430\u043A\u0446\u0435\u043D\u0442\u0438\u0440\u0430\u043D\u0430 \u043D\u043E\u0442\u0430
+effects.harmonic=\u0424\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.grace=\u0424\u0438\u043E\u0440\u0438\u0442\u0443\u0440\u0430 
+effects.grace-editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0444\u0438\u043E\u0440\u0438\u0442\u0443\u0440\u0430
+effects.grace.before-beat=\u041F\u0440\u0435\u0434\u0438 \u0443\u0434\u0430\u0440
+effects.grace.on-beat=\u041F\u0440\u0438 \u0443\u0434\u0430\u0440
+effects.grace.transition=\u041F\u0440\u0435\u0445\u043E\u0434
+effects.grace.transition-none=\u0411\u0435\u0437
+effects.grace.transition-bend=\u041F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+effects.grace.transition-slide=\u0413\u043B\u0438\u0441\u0430\u043D\u0434\u043E
+effects.grace.transition-hammer=\u0424\u043E\u0440\u0448\u043B\u0430\u0433
+effects.trill=\u0422\u0440\u0438\u043B\u0435\u0440
+effects.trill-editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0442\u0440\u0438\u043B\u0435\u0440
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=\u0417\u0430\u0433\u043B\u0443\u0448\u0430\u0432\u0430\u043D\u0435 \u0441 \u0434\u043B\u0430\u043D
+effects.staccato=\u0421\u0442\u0430\u043A\u0430\u0442\u043E
+effects.tapping=\u041F\u043E\u0442\u0443\u043F\u0432\u0430\u043D\u0435
+effects.slapping=\u041F\u043B\u044F\u0441\u043A\u0430\u043D\u0435 (\u0441\u043B\u0430\u043F\u0438\u043D\u0433)
+effects.popping=\u041F\u043E\u043F\u0438\u043D\u0433
+effects.fade-in=Fade In  
+effects.harmonic-editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.harmonic.type-of-harmonic=\u0422\u0438\u043F \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.harmonic.natural=\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043D \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.harmonic.artificial=\u0418\u0437\u043A\u0443\u0441\u0442\u0432\u0435\u043D \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=\u0424\u043B\u0430\u0436\u043E\u043B\u0435\u0442 \u0441 \u043F\u043E\u0442\u0443\u043F\u0432\u0430\u043D\u0435
+effects.harmonic.tapped.left-hand=\u041B\u044F\u0432\u0430 \u0440\u044A\u043A\u0430
+effects.harmonic.tapped.right-hand=\u0414\u044F\u0441\u043D\u0430 \u0440\u044A\u043A\u0430
+effects.harmonic.pinch=\u0424\u043B\u0430\u0436\u043E\u043B\u0435\u0442 \u0441 \u043F\u043E\u0434\u0440\u044A\u043F\u0432\u0430\u043D\u0435
+effects.harmonic.semi=\u041F\u043E\u043B\u0443\u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+
+bend.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u043F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+bend.bend=\u041F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+bend.bend-release=\u041A\u0438\u0442\u0430\u0440\u043D\u043E \u0432\u0438\u0431\u0440\u0430\u0442\u043E
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=\u041F\u043B\u0435\u044A\u0440
+transport.start=\u0418\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435
+transport.stop=\u0421\u0442\u043E\u043F
+transport.pause=\u041F\u0430\u0443\u0437\u0430
+transport.first=\u041F\u044A\u0440\u0432\u0430
+transport.last=\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0430
+transport.previous=\u041F\u0440\u0435\u0434\u0438\u0448\u043D\u0430
+transport.next=\u0421\u043B\u0435\u0434\u0432\u0430\u0449\u0430
+transport.metronome=\u041C\u0435\u0442\u0440\u043E\u043D\u043E\u043C
+transport.mode=\u0420\u0435\u0436\u0438\u043C \u0434\u0430 \u0438\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435
+transport.mode.simple=\u041F\u0440\u043E\u0441\u0442 \u0440\u0435\u0436\u0438\u043C
+transport.mode.simple.tempo-percent=\u041F\u0440\u043E\u0446\u0435\u043D\u0442 \u043E\u0442 \u0442\u0435\u043C\u043F\u043E\u0442\u043E
+transport.mode.simple.loop=\u0426\u0438\u043A\u043B\u0438\u0447\u043D\u043E \u0438\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435
+transport.mode.trainer=\u0422\u0440\u0435\u043D\u0438\u0440\u043E\u0432\u044A\u0447\u0435\u043D \u0440\u0435\u0436\u0438\u043C
+transport.mode.trainer.increment-description=\u041D\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u043D\u0435 \u0441
+transport.mode.loop-range=\u041E\u0431\u0445\u0432\u0430\u0442 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+transport.mode.loop-range.from=\u0418\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435 \u043E\u0442 \u0442\u0430\u043A\u0442
+transport.mode.loop-range.from-default=\u041E\u0442 \u043D\u0430\u0447\u0430\u043B\u043E\u0442\u043E
+transport.mode.loop-range.to=\u0418\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435 \u0434\u043E \u0442\u0430\u043A\u0442
+transport.mode.loop-range.to-default=\u0414\u043E \u043A\u0440\u0430\u044F
+transport.set-loop-start=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430\u0447\u0430\u043B\u043E \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+transport.set-loop-end=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043A\u0440\u0430\u0439 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+
+instruments.volume=\u0423\u0441\u0438\u043B\u0432\u0430\u043D\u0435
+instrument=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=\u0421\u0438\u043B\u0430 \u043D\u0430 \u0437\u0432\u0443\u043A\u0430
+instrument.balance=\u0411\u0430\u043B\u0430\u043D\u0441
+instrument.chorus=\u0425\u043E\u0440
+instrument.reverb=\u0415\u0445\u043E
+instrument.phaser=\u0424\u0430\u0437\u0435\u0440
+instrument.tremolo=\u0422\u0440\u0435\u043C\u043E\u043B\u043E
+
+
+repeat.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+repeat.close=\u0417\u0430\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+repeat.alternative=\u0410\u043B\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F
+repeat.alternative.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0430\u043B\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F
+repetitions=\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F
+repeat.number-of-repetitions=\u0411\u0440\u043E\u0439 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F
+
+beat=\u0423\u0434\u0430\u0440
+beat.clean=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440
+beat.voice.remove-unused=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043D\u0435\u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u043D \u0433\u043B\u0430\u0441
+beat.voice-up=Stems Up
+beat.voice-down=Stems Down
+beat.voice-auto=Auto Stems
+beat.stroke=Stroke
+beat.stroke-up=\u0423\u0434\u0430\u0440 \u043D\u0430\u0433\u043E\u0440\u0435
+beat.stroke-down=\u0423\u0434\u0430\u0440 \u043D\u0430\u0434\u043E\u043B\u0443
+beat.move-left=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u0435\u0434\u0438\u043D \u0443\u0434\u0430\u0440 \u043D\u0430\u043B\u044F\u0432\u043E
+beat.move-right=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u0435\u0434\u0438\u043D \u0443\u0434\u0430\u0440 \u043D\u0430\u0434\u044F\u0441\u043D\u043E
+beat.move-custom=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u043F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440
+beat.move-custom.dialog.title=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u043F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435
+beat.move-custom.dialog.direction-tip=\u041F\u043E\u0441\u043E\u043A\u0430 \u043D\u0430 \u043F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435
+beat.move-custom.dialog.move-1.tip=Major Move
+beat.move-custom.dialog.move-2.tip=Fine Move
+beat.move-custom.dialog.direction=\u041F\u043E\u0441\u043E\u043A\u0430
+beat.move-custom.dialog.direction.right=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0434\u044F\u0441\u043D\u043E
+beat.move-custom.dialog.direction.left=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u043B\u044F\u0432\u043E
+beat.move-custom.dialog.count=\u0411\u0440\u043E\u0439
+beat.move-custom.dialog.duration=\u041F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+beat.move-custom.dialog.duration.type=Dotted/Double-Dotted
+beat.move-custom.dialog.duration.type.normal=\u0411\u0435\u0437
+beat.move-custom.dialog.duration.division-type=Division Type
+beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet)
+
+note=\u041D\u043E\u0442\u0430
+note.semitone-up=\u041F\u043E\u043B\u0443\u0442\u043E\u043D \u043D\u0430\u0433\u043E\u0440\u0435
+note.semitone-down=\u041F\u043E\u043B\u0443\u0442\u043E\u043D \u043D\u0430\u0434\u043E\u043B\u0443
+note.shift-up=\u041D\u0430\u0433\u043E\u0440\u0435
+note.shift-down=\u041D\u0430\u0434\u043E\u043B\u0443
+note.tiednote=Tied Note
+note.deadnote=\u0413\u043B\u0443\u0445\u0430 \u043D\u043E\u0442\u0430
+
+insert.chord=\u0412\u043C\u044A\u043A\u0432\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+chord.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+chord=\u0410\u043A\u043E\u0440\u0434
+chord.name=\u0418\u043C\u0435
+chord.bass=\u0411\u0430\u0441
+chord.custom=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u0438 \u0430\u043A\u043E\u0440\u0434
+chord.custom.name-empty-error=\u0418\u043C\u0435\u0442\u043E \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0430 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0435 \u043F\u0440\u0430\u0437\u043D\u043E.
+chord.custom.name-exist-error=\u0412\u0435\u0447\u0435 \u0441\u044A\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u0430\u043A\u043E\u0440\u0434 \u0441 \u0442\u043E\u0432\u0430 \u0438\u043C\u0435.
+chord.settings.tip=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+chord.settings.type=\u0422\u0438\u043F
+chord.settings.type.most-common=\u041D\u0430\u0439-\u0447\u0435\u0441\u0442\u043E \u0441\u0440\u0435\u0449\u0430\u043D\u0438
+chord.settings.type.inversions=Inversions
+chord.settings.type.close-voiced=Close Voiced
+chord.settings.type.open-voiced=Open Voiced
+chord.settings.open-chords=Open Chords
+chord.settings.chords-to-display=\u0410\u043A\u043E\u0440\u0434\u0438 \u0437\u0430 \u043F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435
+chord.settings.search-frets=\u0422\u044A\u0440\u0441\u0435\u043D\u0435 \u043D\u0430 \u043F\u0440\u0430\u0433\u0447\u0435\u0442\u0430
+chord.settings.minimum-fret=\u041C\u0438\u043D
+chord.settings.maximum-fret=\u041C\u0430\u043A\u0441
+
+
+tuning=\u0424\u0438\u043D\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+tuning.offset=\u041E\u0442\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435
+tuning.strings=\u0421\u0442\u0440\u0443\u043D\u0438
+tuning.strings.transpose=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0437\u0430\u0441\u0435\u0433\u043D\u0430\u0442\u0438\u0442\u0435 \u043D\u043E\u0442\u0438.
+tuning.strings.transpose.try-keep-strings=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043D\u043E\u0442\u0438\u0442\u0435 \u043D\u0430 \u0441\u044A\u0449\u0430\u0442\u0430 \u0441\u0442\u0440\u0443\u043D\u0430
+tuning.strings.transpose.apply-to-chords=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0438
+
+language=\u0415\u0437\u0438\u043A
+
+choose-color=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0446\u0432\u044F\u0442
+
+settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+settings.config=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u0432\u0430\u043D\u0435 \u043D\u0430 TuxGuitar
+settings.config.language=\u0415\u0437\u0438\u043A
+settings.config.language.choose=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0435\u0437\u0438\u043A
+settings.config.styles=\u0421\u0442\u0438\u043B\u043E\u0432\u0435
+settings.config.styles.general=\u041E\u0431\u0449\u0438 \u0441\u0442\u0438\u043B\u043E\u0432\u0435
+settings.config.styles.printer=\u0421\u0442\u0438\u043B\u043E\u0432\u0435 \u043D\u0430 \u043F\u0440\u0438\u043D\u0442\u0435\u0440
+settings.config.styles.font.default=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u0435\u043D \u0448\u0440\u0438\u0444\u0442
+settings.config.styles.font.note=\u0428\u0440\u0438\u0444\u0442 \u0437\u0430 \u043D\u043E\u0442\u0438\u0442\u0435
+settings.config.styles.font.lyric=\u0428\u0440\u0438\u0444\u0442 \u0437\u0430 \u0441\u0442\u0438\u0445\u043E\u0432\u0435\u0442\u0435
+settings.config.styles.font.text=\u0428\u0440\u0438\u0444\u0442 \u043D\u0430 \u0442\u0435\u043A\u0441\u0442\u0430
+settings.config.styles.font.time-signature=Time Signature Font
+settings.config.styles.font.printer-default=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u0435\u043D \u0448\u0440\u0438\u0444\u0442 \u0437\u0430 \u043F\u0440\u0438\u043D\u0442\u0435\u0440\u0430
+settings.config.styles.font.printer-note=Printer Note Font
+settings.config.styles.font.printer-time-signature=Printer Time Signature Font
+settings.config.styles.color.score-note=Score Note Color
+settings.config.styles.color.tab-note=Tab Note Color
+settings.config.styles.color.play-note=Play Note Color
+settings.config.apply-changes-question=\u0416\u0435\u043B\u0430\u0435\u0442\u0435 \u043B\u0438 \u0434\u0430 \u0441\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0430\u0442 \u043F\u0440\u043E\u043C\u0435\u043D\u0438\u0442\u0435?
+settings.config.sound=\u0417\u0432\u0443\u043A
+settings.config.main=\u041E\u0431\u0449\u0438
+settings.config.main.window-title=\u0417\u0430\u0433\u043B\u0430\u0432\u0438\u0435 \u043D\u0430 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446
+settings.config.main.window-title.help=\u0421\u043B\u0435\u0434\u043D\u0438\u0442\u0435 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0438 \u0449\u0435 \u0431\u044A\u0434\u0430\u0442 \u0437\u0430\u043C\u0435\u043D\u0435\u043D\u0438 \u0432 \u0437\u0430\u0433\u043B\u0430\u0432\u0438\u0435\u0442\u043E \u043D\u0430 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446\u0430:
+settings.config.main.window-title.var.description.appname=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0438\u043C\u0435\u0442\u043E \u043D\u0430 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0442\u043E: TuxGuitar
+settings.config.main.window-title.var.description.appversion=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0432\u0435\u0440\u0441\u0438\u044F\u0442\u0430 \u043D\u0430 TuxGuitar.
+settings.config.main.window-title.var.description.filename=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0438\u043C\u0435\u0442\u043E \u043D\u0430 \u043E\u0442\u0432\u043E\u0440\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B
+settings.config.main.window-title.var.description.filepath=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u043F\u044A\u0442\u044F \u043D\u0430 \u043E\u0442\u0432\u043E\u0440\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B
+settings.config.main.window-title.var.description.songname=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0438\u043C\u0435\u0442\u043E \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+settings.config.main.window-title.var.description.songauthor=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0430\u0432\u0442\u043E\u0440\u0430 \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+settings.config.main.window-title.var.description.songalbum=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0430\u043B\u0431\u0443\u043C\u0430 \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+settings.config.main.window-title.var.description.songartist=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0438\u0437\u043F\u044A\u043B\u043D\u0438\u0442\u0435\u043B\u044F \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+settings.config.main.options=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+settings.config.main.splash-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043B\u043E\u0433\u043E \u043F\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043D\u0435
+settings.config.main.table.auto-size.enabled=\u0412\u043A\u043B\u044E\u0447\u0432\u0430\u043D\u0435 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E \u043E\u0440\u0430\u0437\u043C\u0435\u0440\u044F\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u0431\u043B\u0438\u0446\u0430
+settings.config.styles.color.lines=\u0426\u0432\u044F\u0442 \u043D\u0430 \u0445\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u043D\u0438 \u043B\u0438\u043D\u0438\u0438
+settings.config.toolbars=\u041B\u0435\u043D\u0442\u0438 \u0441 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438
+settings.config.toolbars.tip=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u043D\u0430 \u043B\u0435\u043D\u0442\u0438\u0442\u0435 \u0441 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438
+settings.config.toolbars.list=\u041D\u0430\u043B\u0438\u0447\u043D\u0438 \u043B\u0435\u043D\u0442\u0438 \u0441 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438
+settings.config.toolbars.move-up=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0433\u043E\u0440\u0435
+settings.config.toolbars.move-down=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0434\u043E\u043B\u0443
+settings.config.skin=\u041E\u0431\u043B\u0438\u043A
+settings.config.skin.choose=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u043E\u0431\u043B\u0438\u043A
+settings.keybindings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u0432\u0430\u043D\u0435 \u043D\u0430 \u043A\u043B\u0430\u0432\u0438\u0448\u043D\u0438\u0442\u0435 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u0438...
+
+key-bindings-editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u043A\u043B\u0430\u0432\u0438\u0448\u043D\u0438 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u0438
+key-bindings-editor-action-select=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435
+key-bindings-editor-action-column=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F
+key-bindings-editor-shortcut-column=\u041A\u043B\u0430\u0432\u0438\u0448\u0438
+key-bindings-editor-push-a-key=\u041D\u0430\u0442\u0438\u0441\u043D\u0435\u0442\u0435 \u043A\u043B\u0430\u0432\u0438\u0448
+key-bindings-editor-save-question=\u0418\u043C\u0430 \u043D\u0435\u0437\u0430\u043F\u0430\u0437\u0435\u043D\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u0438, \u0436\u0435\u043B\u0430\u0435\u0442\u0435 \u043B\u0438 \u0434\u0430 \u0438\u0437\u043B\u0435\u0437\u0435\u0442\u0435 \u0431\u0435\u0437 \u0434\u0430 \u0433\u0438 \u0437\u0430\u043F\u0430\u0437\u0438\u0442\u0435?
+
+key-bindings-editor-override=\u0411\u044A\u0440\u0437\u0438\u044F\u0442 \u043A\u043B\u0430\u0432\u0438\u0448 \u0432\u0435\u0447\u0435 \u0441\u0435 \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430! \u0421\u0438\u0433\u0443\u0440\u043D\u0438 \u043B\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0436\u0435\u043B\u0430\u0435\u0442\u0435 \u0434\u0430 \u0433\u043E \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u0442\u0435?
+
+print.print=\u041F\u0435\u0447\u0430\u0442
+print.dialog=\u041F\u0435\u0447\u0430\u0442
+print.service=\u0423\u0441\u043B\u0443\u0433\u0430
+print.service.name=\u0418\u043C\u0435
+print.service.status=\u0421\u044A\u0441\u0442\u043E\u044F\u043D\u0438\u0435
+print.service.type=\u0422\u0438\u043F
+print.service.info=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F
+print.range=\u041E\u0431\u0445\u0432\u0430\u0442
+print.range.all-pages=\u0412\u0441\u0438\u0447\u043A\u043E
+print.range.pages=\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0438
+print.range.pages-to=\u0414\u043E
+print.copies=\u041A\u043E\u043F\u0438\u044F
+print.copies-number=\u0411\u0440\u043E\u0439 \u043A\u043E\u043F\u0438\u044F
+print.print-to-file=\u041F\u0435\u0447\u0430\u0442 \u043A\u044A\u043C \u0444\u0430\u0439\u043B
+print.file-chooser=\u0418\u0437\u0431\u043E\u0440
+print-header.default-song-name=\u041D\u0435\u043E\u0437\u0430\u0433\u043B\u0430\u0432\u0435\u043D\u043E
+print-header.default-song-author=\u0410\u043D\u043E\u043D\u0438\u043C\u043D\u043E
+
+print.preview=\u041F\u0440\u0435\u0433\u043B\u0435\u0434 \u0437\u0430 \u043F\u0435\u0447\u0430\u0442
+print.preview.page-of=Of
+
+marker=\u041C\u0430\u0440\u043A\u0435\u0440
+marker.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u043C\u0430\u0440\u043A\u0435\u0440
+marker.list=\u0421\u043F\u0438\u0441\u044A\u043A \u0441 \u043C\u0430\u0440\u043A\u0435\u0440\u0438
+marker.first=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u044A\u0440\u0432\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+marker.last=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+marker.next=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+marker.previous=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u0440\u0435\u0434\u0438\u0448\u043D\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+
+export.tablature-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u0431\u043B\u0430\u0442\u0443\u0440\u0430
+export.score-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0430
+export.chord-name-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0438\u043C\u0435\u043D\u0430 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0438
+export.chord-diagram-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u0438 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0438
+export.black-and-white=\u0427\u0435\u0440\u043D\u043E-\u0431\u044F\u043B \u0440\u0435\u0436\u0438\u043C
+
+scale=\u0413\u0430\u043C\u0430
+scale.list=\u0421\u043F\u0438\u0441\u044A\u043A \u0441 \u043C\u0430\u0440\u043A\u0435\u0440\u0438
+
+text.insert=\u0412\u043C\u044A\u043A\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0435\u043A\u0441\u0442
+text.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0442\u0435\u043A\u0441\u0442
+text.text=\u0422\u0435\u043A\u0441\u0442
+
+tools=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438
+tools.scale=\u0421\u043F\u0438\u0441\u044A\u043A \u0441 \u043C\u0430\u0440\u043A\u0435\u0440\u0438
+tools.browser=\u0411\u0440\u0430\u0443\u0437\u044A\u0440
+tools.plugins=\u041F\u0440\u0438\u0441\u0442\u0430\u0432\u043A\u0438
+tools.shortcuts=\u041F\u0440\u0435\u043F\u0440\u0430\u0442\u043A\u0438
+tools.settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+
+tools.transpose=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435
+tools.transpose.semitones=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043B\u0443\u0442\u043E\u043D\u043E\u0432\u0435
+tools.transpose.apply-to-track=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0432\u0441\u0438\u0447\u043A\u0438 \u0442\u0430\u043A\u0442\u043E\u0432\u0435
+tools.transpose.apply-to-measure=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u0441\u0430\u043C\u043E \u043D\u0430 \u0442\u043E\u0437\u0438 \u0442\u0430\u043A\u0442
+tools.transpose.apply-to-all-tracks=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043A\u044A\u043C \u0432\u0441\u0438\u0447\u043A\u0438 \u043F\u0438\u0441\u0442\u0438
+tools.transpose.try-keep-strings=\u041F\u0440\u0438 \u0432\u044A\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442 \u043D\u043E\u0442\u0438\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0437\u0430\u043F\u0430\u0437\u0432\u0430\u0442 \u043D\u0430 \u0441\u044A\u0449\u0430\u0442\u0430 \u0441\u0442\u0440\u0443\u043D\u0430
+tools.transpose.apply-to-chords=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0438
+
+browser.dialog=\u0411\u0440\u0430\u0443\u0437\u044A\u0440
+browser.menu.file=\u0424\u0430\u0439\u043B
+browser.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+browser.exit=\u0418\u0437\u0445\u043E\u0434
+browser.menu.collection=\u041A\u043E\u043B\u0435\u043A\u0446\u0438\u044F
+browser.menu.go=\u041E\u0442\u0438\u0432\u0430\u043D\u0435
+browser.collection.select=\u0418\u0437\u0431\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043A\u043E\u043B\u0435\u043A\u0446\u0438\u044F
+browser.collection.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+browser.collection.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435
+browser.collection.close=\u0417\u0430\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+browser.collection.new=\u041D\u043E\u0432
+browser.go-root=\u0414\u043E\u043C\u0430\u0448\u043D\u0430 \u043F\u0430\u043F\u043A\u0430
+browser.go-back=\u041D\u0430\u0437\u0430\u0434
+browser.refresh=\u041E\u0431\u043D\u043E\u0432\u044F\u0432\u0430\u043D\u0435
+browser.factory.fs.name=\u0424\u0430\u0439\u043B\u043E\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043C\u0430
+browser.collection.fs.name=\u0418\u043C\u0435
+browser.collection.fs.path=\u041F\u0430\u043F\u043A\u0430
+browser.collection.fs.editor-title=File System Collection
+browser.collection.fs.editor-tip=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043F\u0430\u043F\u043A\u0430 \u0441 \u0432\u0430\u0448\u0430\u0442\u0430 \u043A\u043E\u043B\u0435\u043A\u0446\u0438\u044F
+browser.collection.fs.invalid-path=\u041C\u043E\u043B\u044F \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043F\u0430\u043F\u043A\u0430
+
+midi.port=MIDI \u043F\u043E\u0440\u0442
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=\u041D\u0435 \u0435 \u043D\u0430\u043B\u0438\u0447\u0435\u043D.
+plugin.column.name=\u0418\u043C\u0435 \u043D\u0430 \u043F\u0440\u0438\u0441\u0442\u0430\u0432\u043A\u0430\u0442\u0430
+plugin.column.enabled=\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0444\u0430\u0439\u043B
+edit.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435
+property.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E
+track.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+duration.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+beat.items=Beat Items
+composition.items=Composition Items
+repeat.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+transport.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u043B\u0435\u044A\u0440
+marker.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043C\u0430\u0440\u043A\u0435\u0440
+insert.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0432\u043C\u044A\u043A\u0432\u0430\u043D\u0435
+layout.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u043E\u0434\u0440\u0435\u0434\u0431\u0430
+view.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0438\u0437\u0433\u043B\u0435\u0434
+effect.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0435\u0444\u0435\u043A\u0442
+dynamic.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0434\u0438\u043D\u0430\u043C\u0438\u043A\u0430
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=\u041D\u043E\u0432 \u0444\u0430\u0439\u043B
+action.file.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u0444\u0430\u0439\u043B
+action.file.open-url=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u0430\u0434\u0440\u0435\u0441
+action.file.save=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435
+action.file.save-as=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u043A\u0430\u0442\u043E
+action.file.print=\u041F\u0435\u0447\u0430\u0442
+action.file.print-preview=\u041F\u0440\u0435\u0433\u043B\u0435\u0434 \u0437\u0430 \u043F\u0435\u0447\u0430\u0442
+action.file.exit=\u0418\u0437\u0445\u043E\u0434 \u043E\u0442 TuxGuitar
+action.edit.undo=\u041E\u0442\u043C\u044F\u043D\u0430
+action.edit.redo=\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+action.edit.voice-1=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0433\u043B\u0430\u0441 1
+action.edit.voice-2=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0433\u043B\u0430\u0441 2
+action.composition.change-time-signature=Change Time Signature
+action.composition.change-tempo=\u041F\u0440\u043E\u043C\u044F\u043D\u0430 \u043D\u0430 \u0442\u0435\u043C\u043F\u043E\u0442\u043E
+action.composition.change-info=\u041F\u0440\u043E\u043C\u044F\u043D\u0430 \u043D\u0430 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u0437\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+action.composition.change-clef=\u041F\u0440\u043E\u043C\u044F\u043D\u0430 \u043D\u0430 \u043A\u043B\u044E\u0447
+action.composition.change-key-signature=Change Key Signature
+action.composition.change-triplet-feel=Change Triplet Feel
+action.view.layout-set-page=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043F\u043E\u0434\u0440\u0435\u0434\u0431\u0430 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430
+action.view.layout-set-linear=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043B\u0438\u043D\u0435\u0439\u043D\u0430 \u043F\u043E\u0434\u0440\u0435\u0434\u0431\u0430
+action.view.layout-set-multitrack=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043C\u043D\u043E\u0433\u043E\u043F\u0438\u0441\u0442\u043E\u0432 \u0440\u0435\u0436\u0438\u043C
+action.view.layout-set-score-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0430
+action.view.layout-set-tablature-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u0431\u043B\u0430\u0442\u0443\u0440\u0430
+action.view.layout-set-compact=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043A\u043E\u043C\u043F\u0430\u043A\u0442\u0435\u043D \u0440\u0435\u0436\u0438\u043C
+action.view.layout-set-chord-diagram-enabled=\u0412\u043A\u043B\u044E\u0447\u0432\u0430\u043D\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u0430 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+action.view.layout-set-chord-name-enabled=\u0412\u043A\u043B\u044E\u0447\u0432\u0430\u043D\u0435 \u0438\u043C\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+action.view.show-fretboard=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0433\u0440\u0438\u0444
+action.view.show-piano=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0430\u043D\u043E
+action.view.show-matrix=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043C\u0430\u0442\u0440\u0438\u0446\u0430
+action.view.show-mixer=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0441\u043C\u0435\u0441\u0438\u0442\u0435\u043B
+action.view.show-transport=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043B\u0435\u044A\u0440
+action.track.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.clone=\u041A\u043B\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.go-first=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u044A\u0440\u0432\u0430\u0442\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.go-last=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0430\u0442\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.go-next=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0430\u0442\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.go-previous=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u0440\u0435\u0434\u0438\u0448\u043D\u0430\u0442\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.lyrics=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435 \u0441\u0442\u0438\u0445\u043E\u0432\u0435\u0442\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.properties=\u041F\u0440\u043E\u043C\u044F\u043D\u0430 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430\u0442\u0430 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.move-down=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043F\u0438\u0441\u0442\u0430\u0442\u0430 \u043D\u0430\u0434\u043E\u043B\u0443
+action.track.move-up=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043F\u0438\u0441\u0442\u0430\u0442\u0430 \u043D\u0430\u0433\u043E\u0440\u0435
+action.measure.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.copy=\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.paste=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.clean=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.go-first=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u044A\u0440\u0432\u0438\u044F \u0442\u0430\u043A\u0442
+action.measure.go-last=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u044F \u0442\u0430\u043A\u0442
+action.measure.go-next=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0438\u044F \u0442\u0430\u043A\u0442
+action.measure.go-previous=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u0440\u0435\u0434\u0438\u0448\u0435\u043D \u0442\u0430\u043A\u0442
+action.beat.general.remove-unused-voice=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043D\u0435\u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u043D \u0433\u043B\u0430\u0441
+action.beat.general.voice-up=Set Stems Up
+action.beat.general.voice-down=Set Stems Down
+action.beat.general.voice-auto=Set Auto Stems
+action.beat.general.set-stroke-up=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440 \u043D\u0430\u0433\u043E\u0440\u0435
+action.beat.general.set-stroke-down=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440 \u043D\u0430\u0434\u043E\u043B\u0443
+action.beat.general.move-left=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u0435\u0434\u0438\u043D \u0443\u0434\u0430\u0440 \u043D\u0430\u043B\u044F\u0432\u043E
+action.beat.general.move-right=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0435\u0434\u0438\u043D \u0443\u0434\u0430\u0440 \u043D\u0430\u0434\u044F\u0441\u043D\u043E
+action.beat.general.move-custom=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u043F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440
+action.note.general.clean-beat=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440
+action.note.general.decrement-semitone=\u041D\u0430\u043C\u0430\u043B\u044F\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043B\u0443\u0442\u043E\u043D
+action.note.general.increment-semitone=\u041D\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043B\u0443\u0442\u043E\u043D
+action.note.general.shift-down=\u041D\u0430\u0434\u043E\u043B\u0443
+action.note.general.shift-up=\u041D\u0430\u0433\u043E\u0440\u0435
+action.note.general.tied=Add/Remove tied
+action.note.duration.set-whole=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0446\u044F\u043B\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-half=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043B\u043E\u0432\u0438\u043D\u043A\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-quarter=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0447\u0435\u0442\u0432\u044A\u0440\u0442\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-eighth=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u043E\u0441\u043C\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-sixteenth=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0448\u0435\u0441\u0442\u043D\u0430\u0439\u0441\u0435\u0442\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-thirty-second=\u0417\u0430\u0434\u0430\u0432\u0430 \u043D\u0430 \u0442\u0440\u0438\u0434\u0435\u0441\u0435\u0442\u0432\u0442\u043E\u0440\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-sixty-fourth=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0448\u0435\u0441\u0442\u0435\u0434\u0435\u0441\u0442\u0432\u0442\u043E\u0440\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.change-dotted=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u044A\u043B\u0436\u0435\u043D\u0430 \u043D\u043E\u0442\u0430
+action.note.duration.change-double-dotted=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0434\u0432\u043E\u0439\u043D\u043E \u0443\u0434\u044A\u043B\u0436\u0435\u043D\u0430 \u043D\u043E\u0442\u0430
+action.note.duration.change-division-type=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0440\u0438\u043E\u043B\u0430
+action.note.duration.decrement-duration=\u041D\u0430\u043C\u0430\u043B\u044F\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\u0442\u0430
+action.note.duration.increment-duration=\u041D\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\u0442\u0430
+action.note.effect.change-vibrato=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0432\u0438\u0431\u0440\u0430\u0442\u043E
+action.note.effect.change-bend=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+action.note.effect.change-slide=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0433\u043B\u0438\u0441\u0430\u043D\u0434\u043E
+action.note.effect.change-hammer=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0444\u043E\u0440\u0448\u043B\u0430\u0433
+action.note.effect.change-accentuated=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u0446\u0435\u043D\u0442\u0438\u0440\u0430\u043D\u0435
+action.note.effect.change-dead=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0433\u043B\u0443\u0445\u0430 \u043D\u043E\u0442\u0430
+action.note.effect.change-fade-in=Add/Remove fade in
+action.note.effect.change-ghost=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0440\u0438\u0433\u043B\u0443\u0448\u0435\u043D\u0430 \u043D\u043E\u0442\u0430
+action.note.effect.change-grace=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0444\u0438\u043E\u0440\u0438\u0442\u0443\u0440\u0430
+action.note.effect.change-harmonic=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated
+action.note.effect.change-palm-mute=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0437\u0430\u0433\u043B\u0443\u0448\u0430\u0432\u0430\u043D\u0435 \u0441 \u0434\u043B\u0430\u043D
+action.note.effect.change-popping=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043F\u0438\u043D\u0433
+action.note.effect.change-slapping=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043B\u044F\u0441\u043A\u0430\u043D\u0435
+action.note.effect.change-staccato=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0441\u0442\u0430\u043A\u0430\u0442\u043E
+action.note.effect.change-tapping=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u0442\u0443\u043F\u0432\u0430\u043D\u0435
+action.note.effect.change-tremolo-bar=Add/Remove tremolo bar
+action.note.effect.change-tremolo-picking=Add/Remove tremolo picking
+action.note.effect.change-trill=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0440\u0438\u043B\u0435\u0440
+action.insert.open-repeat=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u043F\u043E\u0432\u043E\u0440\u0435\u043D\u0438\u0435
+action.insert.close-repeat=\u0417\u0430\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+action.insert.repeat-alternative=Repeat Alternative
+action.insert.chord=\u0412\u043C\u044A\u043A\u0432\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+action.insert.text=\u0412\u043C\u044A\u043A\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0435\u043A\u0441\u0442
+action.marker.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u043C\u0430\u0440\u043A\u0435\u0440
+action.marker.go-next=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+action.marker.go-previous=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u0440\u0435\u0434\u0438\u0448\u043D\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+action.transport.play=\u0418\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435 \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+action.transport.stop=\u0421\u043F\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0438\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435\u0442\u043E
+action.transport.mode=\u0420\u0435\u0436\u0438\u043C \u043D\u0430 \u043F\u043B\u0435\u044A\u0440\u0430
+action.transport.metronome=\u041C\u0435\u0442\u0440\u043E\u043D\u043E\u043C
+action.transport.set-loop-start=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430\u0447\u0430\u043B\u043E \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+action.transport.set-loop-end=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043A\u0440\u0430\u0439 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+action.tools.browser=\u0411\u0440\u0430\u0443\u0437\u044A\u0440
+action.tools.transpose=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043D\u043E\u0442\u0438
+action.settings.configure=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+action.help.doc=\u041F\u043E\u043C\u043E\u0449
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_ca.properties b/TuxGuitar-testing/platform-all/share/lang/messages_ca.properties
new file mode 100644
index 0000000..3e1a7a0
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_ca.properties
@@ -0,0 +1,687 @@
+ok=Acceptar
+cancel=Cancel\u00B7lar
+yes=Si
+no=No
+add=Afegeix
+remove=Esborra
+save=Desa
+exit=Surt
+close=Tanca
+color=Color
+title=T\u00EDtol
+edit=Edita
+go=V\u00E9s
+error=Error
+warning=Av\u00EDs
+plugins=Connectors
+choose=Escull
+plugins=Connectors
+options=Opcions
+defaults=Predeterminats
+clean=Neteja
+rename=Reanomena
+fret=Celleta
+position=Posici\u00F3
+info=Informaci\u00F3
+name=Nom
+author=Autor
+version=Versi\u00F3
+description=Descripci\u00F3
+configure=Configura
+
+tuxguitar.title=TuxGuitar
+
+file=Fitxer
+file.new=Nou
+file.open=Obre
+file.open-url=Obre URL
+file.open.error=No s'ha pogut obrir l'arxiu: {0}
+file.save=Desa
+file.save-as=Desa com a
+file.save.error=No s'ha pogut dexar l'arxiu: {0}
+file.save-changes-question=L'arxiu t\u00E9 canvis sense desar.\nVoleu desar els canvis?
+file.exit=Sortir
+file.export=Exportar
+file.export-midi=Exporta com a Midi
+file.export-pdf=Exporta com a PDF
+file.print=Imprimeix
+file.print-preview=Previsualitzeu la impressi\u00F3
+file.import=Importa
+file.import.error=No s'ha pogut importar: {0}
+file.import-midi=Importa Midi
+file.export-ascii=Exporta com a ASCII
+file.export.error=No s'ha pogut exportar: {0}
+file.history=Hist\u00F2ric
+file.overwrite-question=L'arxiu ja existeix, desitgeu sobreescriure'l?
+
+edit.menu=Edici\u00F3
+edit.undo=Desf\u00E9s
+edit.redo=Ref\u00E9s
+edit.copy=Copia
+edit.from=Des de
+edit.to=Fins a
+edit.all-tracks=Totes les pistes
+edit.paste=Enganxa
+edit.paste.count=Enganxa comptador
+edit.paste.replace-mode=Enganxa al comp\u00E1s actual
+edit.paste.insert-mode=Enganxa a un nou comp\u00E1s
+edit.delete=Esborra
+edit.cut=Retalla
+edit.mouse-mode-selection=Canvia el punter a mode de selecci\u00F3
+edit.mouse-mode-edition=Canvia el punter a mode d'edici\u00F3
+edit.not-natural-key=Sostingut/Bemoll
+edit.voice-1=Tria veu 1
+edit.voice-2=Tria veu 2
+
+view=Veure
+view.layout=Veure
+view.layout.page=Mode P\u00E0gina
+view.layout.linear=Mode Liniar 
+view.layout.multitrack=Multipista
+view.layout.compact=Mode compacte
+view.layout.score-enabled=Mostra la partitura
+view.layout.tablature-enabled=Mostra la tabulatura
+view.layout.chord-style=Estil d'acords
+view.layout.chord-name=Mostra el nom
+view.layout.chord-diagram=Mostra el diagrama
+view.show-transport=Mostra el reproductor
+view.show-mixer=Mostra el mesclador
+view.show-piano=Mostra el piano
+view.show-matrix=Mostra l'editor de matrius
+view.show-fretboard=Mostra el m\u00E0stil
+
+fretboard.direction=Direcci\u00F3
+fretboard.background-color=Color de fons
+fretboard.font=Font
+fretboard.fretpoint-color=Color dels marcadors de posici\u00F3
+fretboard.note-color=Color de les notes
+fretboard.scale-note-color=Color de les notes d'escala
+fretboard.string-color=Color de cordes
+fretboard.settings=Prefer\u00E8ncies
+fretboard.settings.options=Opcions
+fretboard.display-note-text=Mostra les notes en mode text
+fretboard.display-scale-text=Mostrar les notes d'escala en mode text
+fretboard.right-mode=Cap a la dreta
+fretboard.left-mode=Cap a l'esquerra
+
+piano.editor=Piano
+piano.natural-key-color=Color de les tecles blanques
+piano.not-natural-key-color=Color de les tecles negres
+piano.note-color=Color de les notes
+piano.scale-note-color=Color de les notes d'escala
+piano.settings=Prefer\u00E8ncies
+
+matrix.editor=Editor de matrius
+matrix.grids=Graelles
+matrix.font=Font
+matrix.border-color=Color del contorn
+matrix.foreground-color=Color de la font i l\u00EDnies divis\u00F2ries
+matrix.line-color-1=Color de la l\u00EDnia #1
+matrix.line-color-2=Color de la l\u00EDnia #2
+matrix.line-color-over=Color de la l\u00EDnia seleccionada
+matrix.note-color=Color de les notes
+matrix.play-note-color=Color de les notes reproduint
+matrix.position-color=Color de posici\u00F3
+matrix.settings=Prefer\u00E8ncies
+
+composition=Composici\u00F3
+composition.timesignature=Signe de comp\u00E0s
+composition.timesignature.Numerator=Numerador
+composition.timesignature.denominator=Denominador
+composition.timesignature.to-the-end=Fins a la fi
+composition.tempo=Tempo
+composition.tempo-percent=Percentatge
+composition.tempo.start-to-end=Aplica a tots els compassos
+composition.tempo.position-to-end=Aplica fins a la fi
+composition.tempo.position-to-next=Aplica fins la propera marca de temps
+composition.tempo.invalid=Temps no v\u00E0lid
+composition.properties=Propietats
+composition.name=Nom
+composition.artist=Artista
+composition.album=\00C0lbum
+composition.author=Autor
+composition.date=Data
+composition.copyright=Copyright
+composition.writer=Creador de la tabulatura
+composition.transcriber=Transcrit per en/na
+composition.comments=Comentaris
+composition.clef=Clau
+composition.clef.treble=Agut
+composition.clef.bass=Baix
+composition.clef.tenor=Tenor
+composition.clef.alto=Alt
+composition.clef.to-the-end=Aplica aquesta clau fins a la fi
+composition.keysignature=Armadura
+composition.keysignature.natural=Natural
+composition.keysignature.sharp-1=1 Diesi
+composition.keysignature.sharp-2=2 Diesis
+composition.keysignature.sharp-3=3 Diesis
+composition.keysignature.sharp-4=4 Diesis
+composition.keysignature.sharp-5=5 Diesis
+composition.keysignature.sharp-6=6 Diesis
+composition.keysignature.sharp-7=7 Diesis
+composition.keysignature.flat-1=1 Bemoll
+composition.keysignature.flat-2=2 Bemolls
+composition.keysignature.flat-3=3 Bemolls
+composition.keysignature.flat-4=4 Bemolls
+composition.keysignature.flat-5=5 Bemolls
+composition.keysignature.flat-6=6 Bemolls
+composition.keysignature.flat-7=7 Bemolls
+composition.keysignature.to-the-end=Aplica aquesta armadura fins a la fi
+composition.tripletfeel=Aspecte de tresets
+composition.tripletfeel.none=Aspecte normal
+composition.tripletfeel.eighth=Aspecte de tresets en corxeres
+composition.tripletfeel.sixteenth=Aspecte de tresets en semicorxeres
+composition.tripletfeel.to-the-end=Aplica fins a la fi
+
+help=Ajuda
+help.help=Ajuda
+help.doc=Documentaci\u00F3
+help.about=Quan a
+help.about.license=Llic\u00E8ncia
+help.about.authors=Autors
+help.about.description=Descripci\u00F3
+
+mixer=Mesclador
+instruments.volume=Guany
+
+instrument=Instrument
+instrument.volume=Volum
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balan\u00E7
+instrument.free=Lliure
+instrument.link=Enlla\u00E7
+
+track=Pista
+track.number=Nombre
+track.name=Nom
+track.color=Color
+track.first=Primera
+track.last=Darrera
+track.previous=Anterior
+track.next=Seg\u00FCent
+track.add=Afegeix pista
+track.remove=Esborra pista
+track.instrument=Instrument
+track.properties=Propietats
+track.properties.general=General
+track.clone=Clona pista
+track.move-up=Mou amunt
+track.move-down=Mou avall
+track.name.default-percussion-name=Percussi\u00F3
+track.lyrics=Edita les lletres
+track.solo=Solo
+track.mute=Silenci
+
+lyric.editor=Editor de lletres
+
+measure=Comp\u00E0s
+measure.first=Primer
+measure.last=Darrer
+measure.previous=Anterior
+measure.next=Seg\u00FCent
+measure.add=Afegeix comp\u00E0s
+measure.add.count=Afegeix comptador
+measure.remove=Esborra comp\u00E0s
+measure.copy=Copia comp\u00E0s
+measure.paste=Enganxa comp\u00E0s
+measure.clean=Neteja comp\u00E0s
+measure.add-before-current-position=Afegeix comp\u00E0s abans de la posici\u00F3 actual
+measure.add-after-current-position=Afegeix comp\u00E0s despr\u00E9s de la posici\u00F3 actual
+measure.add-at-end=Afegeix comp\u00E0s a la fi
+
+beat=Beat
+beat.clean=Neteja beat
+beat.voice.remove-unused=Esborra veu no usada
+beat.voice-up=Stems amunt
+beat.voice-down=Stems avall
+beat.voice-auto=Auto Stems
+beat.stroke-up=Upstroke
+beat.stroke-down=Downstroke
+beat.move-left=Mou un bit a l'esquerra
+beat.move-right=Mou un bit a la dreta
+beat.move-custom=Personalitza el moviment del beat
+beat.move-custom.dialog.title=Moviment personalitzat
+beat.move-custom.dialog.direction-tip=Mou direcci\u00F3
+beat.move-custom.dialog.move-1.tip=Moviment primari
+beat.move-custom.dialog.move-2.tip=Moviment secundari
+beat.move-custom.dialog.direction=Direcci\u00F3
+beat.move-custom.dialog.direction.right=Mou a la dreta
+beat.move-custom.dialog.direction.left=Mou a l'esquerra
+beat.move-custom.dialog.count=Compta
+beat.move-custom.dialog.duration=Durada
+beat.move-custom.dialog.duration.type=Punt/Doble punt
+beat.move-custom.dialog.duration.type.normal=Cap
+beat.move-custom.dialog.duration.division-type=Tipus de divisi\u00F3
+beat.move-custom.dialog.duration.division-type.normal=Normal (grup excedent)
+
+note=Nota
+note.tiednote=Lliga nota
+note.deadnote=Dead Note
+note.semitone-up=Apuja un semit\u00F2
+note.semitone-down=Abaixa un semit\u00F2
+note.shift-up=Apuja una corda
+note.shift-down=Abaixa una corda
+
+duration=Durada
+duration.whole=Rodona
+duration.half=Blanca
+duration.quarter=Negra
+duration.eighth=Corxera
+duration.sixteenth=Semicorxera
+duration.thirtysecond=Fusa
+duration.sixtyfourth=Semifusa
+duration.dotted=Punt
+duration.doubledotted=Doble punt
+duration.division-type=Treset
+
+effects=Efectes
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Nota morta
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Editor de Tremolo Bar
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Nota fantasma
+effects.accentuatednote=Nota accentuada
+effects.heavyaccentuatednote=Nota molt accentuada
+effects.harmonic=Harm\u00F2nic
+effects.grace=Appoggiatura
+effects.grace-editor=Editor d'appoggiatures
+effects.grace.before-beat=abans del Beat
+effects.grace.on-beat=Al Beat
+effects.grace.transition=Transici\u00F3
+effects.grace.transition-none=Cap
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Editor de Trill
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Editor de Tremolo Picking
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Editor d'harm\u00F2nics
+effects.harmonic.type-of-harmonic=Tipus d'harm\u00F2nic
+effects.harmonic.natural=Harm\u00F2nic
+effects.harmonic.artificial=Harm\u00F2nic artifical
+effects.harmonic.artificial.key-offset=Key offset
+effects.harmonic.tapped=Tapped harm\u00F2nic
+effects.harmonic.tapped.left-hand=M\u00E0 esquerra
+effects.harmonic.tapped.right-hand=M\u00E0 dreta
+effects.harmonic.pinch=Pinch harm\u00F2nic
+effects.harmonic.semi=Semi-harm\u00F2nic
+
+bend.editor=Editor de Bend
+bend.bend=Bend
+bend.bend-release=bend/release
+bend.bend-release-bend=bend/release/bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+dynamic=Dynamic
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano
+dynamic.mezzo-forte=Mezzo Forte
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo
+dynamic.forte-fortissimo=Forte Fortissimo
+
+insert.chord=Insereix acord
+
+chord.editor=Editor d'acords
+chord=Acord
+chord.name=Nom
+chord.custom=Acord personalitzat
+chord.custom.name-empty-error=El nom de l'acord \u00E9s obligatori
+chord.custom.name-exist-error=Ja existeix un acord amb aquest nom
+chord.bass=Baix
+chord.settings.tip=Prefer\u00E8ncies
+chord.settings.type=Tipus
+chord.settings.type.most-common=M\u00E9s com\u00FA
+chord.settings.type.inversions=Inversions
+chord.settings.type.close-voiced=Close Voiced
+chord.settings.type.open-voiced=Open Voiced
+chord.settings.open-chords=Acords oberts
+chord.settings.chords-to-display=Acords a mostrar
+chord.settings.search-frets=Trasts
+chord.settings.minimum-fret=M\u00EDnim
+chord.settings.maximum-fret=M\u00E0xim
+
+transport=Reproductor
+transport.start=Reprodueix
+transport.pause=Pausa
+transport.stop=Atura
+transport.first=Primer comp\u00EDs
+transport.last=Darrer comp\u00EDs
+transport.previous=Comp\u00EDs anterior
+transport.next=Seg\u00FCent comp\u00EDs
+transport.metronome=Metr\u00F2nom
+transport.mode=Mode de reproducci\u00F3
+transport.mode.simple=Mode normal
+transport.mode.simple.tempo-percent=Percentatge de temps
+transport.mode.simple.loop=Repeteix infinitament
+transport.mode.trainer=Mode d'entrenament
+transport.mode.trainer.increment-description=Incrementa percentatge
+transport.mode.loop-range=Repeteix rang
+transport.mode.loop-range.from=Reprodueix des del comp\u00E0s
+transport.mode.loop-range.from-default=Des del principi
+transport.mode.loop-range.to=Reprodueix el comp\u00E0s
+transport.mode.loop-range.to-default=Fins a la fi
+transport.set-loop-start=Defineix el punt d'inici de la repetici\u00F3
+transport.set-loop-end=Defineix el punt final de la repetici\u00F3
+
+repetitions=Repeticions
+repeat.open=Obre repetici\u00F3
+repeat.close=Tanca repetici\u00F3
+repeat.number-of-repetitions=Nombre de repeticions
+repeat.alternative=Repetici\u00F3 alternativa
+repeat.alternative.editor=Edita repetici\u00F3 alternativa
+
+
+tuning=Afinaci\u00F3
+tuning.strings=Cordes
+tuning.offset=Offset
+tuning.strings.transpose=Transpose les notes afectades
+tuning.strings.transpose.try-keep-strings=Mira de mantindre les notes a la mateixa corda
+tuning.strings.transpose.apply-to-chords=Transposar acords
+
+language=Llengua
+
+choose-color=Seleccioneu un color
+
+settings=Opcions
+settings.config=Configura TuxGuitar
+settings.config.main=General
+settings.config.main.window-title=T\u00EDtol de la finestra
+settings.config.main.window-title.help=Les seg\u00FCents variables seran reempla\u00E7ades al t\u00EDtol:
+settings.config.main.window-title.var.description.appname=Mostra el nom de l'aplicaci\u00F3: TuxGuitar.
+settings.config.main.window-title.var.description.appversion=Mostra la versi\u00F3 actual de tuxguitar.
+settings.config.main.window-title.var.description.filename=Mostra el nom de l'arxiu que sou editant.
+settings.config.main.window-title.var.description.filepath=Mostra la ruta de l'arxiu que sou editant.
+settings.config.main.window-title.var.description.songname=Mostra el nom de la can\u00E7\u00F3 actual.
+settings.config.main.window-title.var.description.songauthor=Mostra l'autor de la can\u00E7\u00F3 actual.
+settings.config.main.window-title.var.description.songalbum=Mostra l'\u00E0lbum de la can\u00E7\u00F3 actual.
+settings.config.main.window-title.var.description.songartist=Mostra l'artista de la can\u00E7\u00F3 actual.
+settings.config.main.options=Opcions
+settings.config.main.splash-enabled=Mostra l'splash a l'inici.
+settings.config.main.table.auto-size.enabled=Ajusta autom\u00E0ticament la mida de la previsualizaci\u00F3 de pistes
+settings.config.view=Vista
+settings.config.view.mode=Mode de vista
+settings.config.view.size=Ajust de la finestra
+settings.config.view.size.maximized=Maximizada
+settings.config.view.size.width=Amplada
+settings.config.view.size.height=Al\u00E7ada
+settings.config.language=Llengua
+settings.config.language.choose=Seleccioneu la vostra llengua
+settings.config.styles=Estils
+settings.config.styles.general=Estils generals
+settings.config.styles.font.default=Font per defecte
+settings.config.styles.font.note=Font de les notes
+settings.config.styles.font.time-signature=Font de signe de comp\u00E0s
+settings.config.styles.font.lyric=Font de les lletres
+settings.config.styles.font.text=Font dels texts
+settings.config.styles.color.score-note=Color de les notes de la partitura
+settings.config.styles.color.tab-note=Color de les notes de la tabulatura
+settings.config.styles.color.play-note=Color de les notes en reproducci\u00F3
+settings.config.styles.color.lines=Color de les l\u00EDnies divis\u00F2ries
+settings.config.styles.printer=Estils d'impressi\u00F3
+settings.config.styles.font.printer-default=Font per defecte
+settings.config.styles.font.printer-note=Font de les notes
+settings.config.styles.font.printer-time-signature=Font del signe de comp\u00E0s
+settings.config.apply-changes-question=Voleu aplicar ara els canvis?
+settings.config.sound=So
+settings.config.skin=Tema d'icones
+settings.config.skin.choose=Seleccioneu el vostre tema d'icones
+settings.config.toolbars=Barra d'eines
+settings.config.toolbars.tip=Personalitzeu la vostra barra d'eines
+settings.config.toolbars.list=Eines disponibles
+settings.config.toolbars.move-up=Mou amunt
+settings.config.toolbars.move-down=Mou avall
+
+settings.keybindings=Configureu tecles
+key-bindings-editor=Editor de tecles
+key-bindings-editor-action-select=Seleccioneu una acci\u00F3
+key-bindings-editor-action-column=Accions
+key-bindings-editor-shortcut-column=Tecles
+key-bindings-editor-push-a-key=Premeu una tecla
+key-bindings-editor-save-question=S'han trobat canvis sense desar; tot i aix\u00F2 voleu sortir?
+key-bindings-editor-override=Ja hi ha una acci\u00F3 per a aquestes tecles, voleu sobreescriure-la?
+
+print.print=Imprimir
+print.dialog=Imprimeix
+print.service=Servei
+print.service.name=Nom
+print.service.status=Estat
+print.service.type=Tipus
+print.service.info=Informaci\u00F3
+print.range=Rang
+print.range.all-pages=Totes les p\u00E0gines
+print.range.pages=P\u00E0gines
+print.range.pages-to=Cap a
+print.copies=C\u00F2pies
+print.copies-number=Nombre de c\u00F2pies
+print.print-to-file=Imprimeix cap a arxiu
+print.file-chooser=Examina
+print-header.default-song-name=Sense t\u00EDtol
+print-header.default-song-author=An\u00F2nim
+print.preview=Previsualitzeu la impressi\u00F3
+print.preview.page-of=De
+
+marker=Marca
+marker.add=Afegeix marca
+marker.list=Mostra marques
+marker.first=Primera
+marker.last=Darrera
+marker.next=Seg\u00FCent
+marker.previous=Anterior
+
+export.tablature-enabled=Mostra la tabulatura
+export.score-enabled=Mostra la partitura
+export.chord-name-enabled=Mostra els noms dels acords
+export.chord-diagram-enabled=Mostra els diagrames d'acords
+export.black-and-white=Mode blanc i negre
+
+scale=Escala
+scale.list=Llista d'escales
+
+text.insert=Insereix text
+text.editor=Editor de text
+text.text=Text
+
+tools=Eines
+tools.scale=Llista d'escales
+tools.browser=Explorador de can\u00E7ons
+tools.plugins=Configura Plugins
+tools.shortcuts=Dreceres del teclat
+tools.settings=Prefer\u00E8ncies
+tools.transpose=Transposar
+tools.transpose.semitones=Transposar semitons
+tools.transpose.apply-to-track=Transposar tots els compasos
+tools.transpose.apply-to-measure=Transposar nom\u00E9s aquest comp\u00E0s
+tools.transpose.apply-to-all-tracks=Aplicar-ho a totes les pistes
+tools.transpose.try-keep-strings=Mira de deixar les notes a la mateixa corda quan sigui possible
+tools.transpose.apply-to-chords=Transposa acords
+
+browser.dialog=Explorador de can\u00E7ons
+browser.menu.file=Arxiu
+browser.open=Obre
+browser.exit=Surt
+browser.menu.collection=Col\u00B7lecci\u00F3
+browser.menu.go=V\u00E9s
+browser.collection.select=Selecciona col\u00B7lecci\u00F3
+browser.collection.open=Obre col\u00B7lecci\u00F3
+browser.collection.remove=Esborra col\u00B7lecci\u00F3
+browser.collection.close=Tanca col\u00B7lecci\u00F3
+browser.collection.new=Afegeix col\u00B7lecci\u00F3
+browser.go-root=Inici
+browser.go-back=Torna
+browser.refresh=Actualitza
+browser.factory.fs.name=Sistema d'arxius local
+browser.collection.fs.name=Nom
+browser.collection.fs.path=Ubicaci\u00F3
+browser.collection.fs.editor-title=Col\u00B7lecci\u00F3 d'arxius locals
+browser.collection.fs.editor-tip=Escolliu una carpeta
+browser.collection.fs.invalid-path=La carpeta escollida no \u00E9s v\u00E0lida.
+
+midi.port=Port MIDI
+midi.sequencer=Seq\u00FCenciador MIDI
+
+plugin.unknown-value=No disponible
+plugin.column.name=Nom del Plugin
+plugin.column.enabled=Actiu
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Eines d'arxiu
+edit.items=Eines d'edici\u00F3
+property.items=Propietats de la can\u00E7\u00F3
+track.items=Eines de pistes
+duration.items=Durades
+beat.items=Eines de Beat
+composition.items=Eines de composici\u00F3
+repeat.items=Accions de repetici\u00F3
+transport.items=Accions de reproducci\u00F3
+marker.items=Accions de marques
+insert.items=Accions d'inserci\u00F3
+layout.items=Vista de modes
+view.items=Vista de components
+effect.items=Efectes
+dynamic.items=Din\u00E0mics
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Nou arxiu
+action.file.open=Obre arxiu
+action.file.open-url=Obre URL
+
+action.file.save=Desa
+action.file.save-as=Desa com a
+action.file.print=Imprimeix
+action.file.print-preview=Previsualitzeu la impressi\u00F3
+action.file.exit=Tanca l'aplicaci\u00F3
+action.edit.undo=Desf\u00E9s
+action.edit.redo=Ref\u00E9s
+action.edit.voice-1=Tria veu 1
+action.edit.voice-2=Tria veu 2
+action.composition.change-time-signature=Canvia el signe de comp\u00E0s
+action.composition.change-tempo=Canvia temps
+action.composition.change-info=Canvia la informaci\u00F3 de la can\u00E7\u00F3
+action.composition.change-clef=Canvia la clau
+action.composition.change-key-signature=Canvia l'armadura
+action.composition.change-triplet-feel=Aspecte de tresets
+action.view.layout-set-page=Veure mode de p\u00E0gina
+action.view.layout-set-linear=Veure mode liniar
+action.view.layout-set-multitrack=Veure mode multipista
+action.view.layout-set-compact=Veure mode compacte
+action.view.layout-set-score-enabled=Mostra la partitura
+action.view.layout-set-tablature-enabled=Mostra la tabulatura
+action.view.layout-set-chord-diagram-enabled=Mostra el diagrama d'acords
+action.view.layout-set-chord-name-enabled=Mostra el nom dels acords
+action.view.show-fretboard=Mostra el m\u00E0stil
+action.view.show-piano=Mostra el piano
+action.view.show-matrix=Mostra l'editor de matrius
+action.view.show-mixer=Mostra el mesclador de sons
+action.view.show-transport=Mostra el reproductor
+action.track.add=Insereix pista
+action.track.remove=Esborra la pista
+action.track.clone=Clona la pista
+action.track.go-first=V\u00E9s a la primera pista
+action.track.go-last=V\u00E9s a la darrera pista
+action.track.go-next=V\u00E9s a la pista seg\u00FCent
+action.track.go-previous=V\u00E9s a l'anterior pista
+action.track.move-down=Mou avall
+action.track.move-up=Mou amunt
+action.track.lyrics=Edita les lletres
+action.track.properties=Edita les propietats de la pista
+action.measure.add=Afegeix comp\u00E0s
+action.measure.remove=Esborra el comp\u00E0s
+action.measure.copy=Copia el comp\u00E0s
+action.measure.paste=Enganxa el comp\u00E0s
+action.measure.clean=Neteja el comp\u00E0s
+action.measure.go-first=V\u00E9s al primer comp\u00E0s
+action.measure.go-last=V\u00E9s al darrer comp\u00E0s
+action.measure.go-next=V\u00E9s al comp\u00E0s seg\u00FCent
+action.measure.go-previous=V\u00E9s al comp\u00E0s anterior
+action.beat.general.remove-unused-voice=Esborra veu no usada
+action.beat.general.voice-up=Assigna stems amunt
+action.beat.general.voice-down=Assigna stems avall
+action.beat.general.voice-auto=Assigna stems autom\u00E0tics
+action.beat.general.set-stroke-up=Assigna Upstroke
+action.beat.general.set-stroke-down=Assigna Downstroke
+action.beat.general.move-left=Mou un bit a l'esquerra
+action.beat.general.move-right=Mou un bit a la dreta
+action.beat.general.move-custom=Personalitza el moviment del beat
+action.note.general.clean-beat=Neteja Beat
+action.note.general.decrement-semitone=Abaixa un semit\u00F2
+action.note.general.increment-semitone=Apuja un semit\u00F2
+action.note.general.shift-down=Abaixa una corda
+action.note.general.shift-up=Apuja una corda
+action.note.general.tied=Afegir/Treu un lligat
+action.note.duration.change-dotted=Afegeix/Treu un punt
+action.note.duration.change-double-dotted=Afegeix/Treu un doble punt
+action.note.duration.change-division-type=Afegeix/Treu un treset
+action.note.duration.set-whole=Assigna durada de rodona
+action.note.duration.set-half=Assigna durada de blanca
+action.note.duration.set-quarter=Assigna durada de negra
+action.note.duration.set-eighth=Assigna durada de corxera
+action.note.duration.set-sixteenth=Assigna durada de semicorxera
+action.note.duration.set-thirty-second=Assigna durada de fusa
+action.note.duration.set-sixty-fourth=Assigna durada de semifusa
+action.note.duration.decrement-duration=Disminueix durada
+action.note.duration.increment-duration=Augmenta durada
+action.note.effect.change-vibrato=Afegeix/Treu Vibrato
+action.note.effect.change-bend=Afegeix/Treu Bend
+action.note.effect.change-slide=Afegeix/Treu Slide
+action.note.effect.change-hammer=Afegeix/Treu Hammer
+action.note.effect.change-accentuated=Afegeix/Treu accent
+action.note.effect.change-dead=Afegeix/Treu nota morta
+action.note.effect.change-fade-in=Afegeix/Treu fade in
+action.note.effect.change-ghost=Afegeix/Treu nota fantasma
+action.note.effect.change-grace=Afegeix/Treu appoggiatura
+action.note.effect.change-harmonic=Afegeix/Treu harm\u00F2nic
+action.note.effect.change-heavy-accentuated=Afegeix/Treu nota molt accentuada
+action.note.effect.change-palm-mute=Afegeix/Treu Palm Mute
+action.note.effect.change-popping=Afegeix/Treu Popping
+action.note.effect.change-slapping=Afegeix/Treu Slapping
+action.note.effect.change-staccato=Afegeix/Treu Staccato
+action.note.effect.change-tapping=Afegeix/Treu Tapping
+action.note.effect.change-tremolo-bar=Afegeix/Treu Tremolo Bar
+action.note.effect.change-tremolo-picking=Afegeix/Treu Tremolo Picking
+action.note.effect.change-trill=Afegeix/Treu Trill
+action.insert.open-repeat=Obre repetici\u00F3
+action.insert.close-repeat=Tanca repetici\u00F3
+action.insert.chord=Insereix acord
+action.insert.text=Insereix text
+action.insert.repeat-alternative=Insereix repetici\u00F3 alternativa
+action.marker.add=Afegeix marca
+action.marker.go-next=V\u00E9s a la seg\u00FCent marca
+action.marker.go-previous=V\u00E9s a la marca anterior
+action.transport.play=Reprodueix tema
+action.transport.stop=Atura la reproducci\u00F3
+action.transport.metronome=Metr\u00F2nom
+action.transport.mode=Mode de reproducci\u00F3
+action.transport.set-loop-start=Defineix el punt d'inici de la repetici\u00F3
+action.transport.set-loop-end=Defineix el punt final de la repetici\u00F3
+action.tools.browser=Explorador de can\u00E7ons
+action.tools.transpose=Transposa notes
+action.settings.configure=Edita les prefer\u00E8ncies
+action.help.doc=Ajuda
+
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_cs.properties b/TuxGuitar-testing/platform-all/share/lang/messages_cs.properties
new file mode 100644
index 0000000..b260e83
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_cs.properties
@@ -0,0 +1,484 @@
+es=\u0160pan\u011blsky
+en=Anglicky
+fr=Francouzsky
+pl=Polsky
+de=N\u011bmecky
+pt=Portugalsky
+cz=\u010cesky
+
+ok=Ok
+cancel=Zru\u0161it
+yes=Ano
+no=Ne
+add=P\u0159idat
+edit=Editovat
+remove=Odebrat
+save=Ulo\u017eit
+exit=Odej\u00edt
+choose=Vybrat
+color=Barva
+title=N\u00e1zev
+go=Jdi
+warning=Varov\u00e1n\u00ed
+error=Chyba
+plugins=Pluginy
+options=Volby
+defaults=P\u016fvodn\u00ed
+clean=Smazat
+rename=P\u0159ejmenovat
+fret=Pra\u017eec
+position=Poloha
+
+tuxguitar.title=Tux-Guitar
+
+file=Soubor
+file.new=Nov\u00fd
+file.open=Otev\u0159\u00edt
+file.save=Ulo\u017eit
+file.save-as=Ulo\u017eit jako...
+file.exit=Konec
+file.export=Exportovat
+file.export-midi=Exportovat MIDI
+file.export-pdf=Exportovat PDF
+file.print=Tisk
+file.print-preview=N\u00e1hled tisku
+file.import=Importovat
+file.import-midi=Importovat MIDI
+file.export-ascii=Exportovat ASCII
+file.history=Historie
+file.overwrite-question=Tento soubor ji\u017e existuje, opravdu ho chcete p\u0159epsat??
+
+edit.menu=Editovat
+edit.undo=Zp\u011bt
+edit.redo=Vp\u0159ed
+edit.copy=Kop\u00edrovat
+edit.from=Od
+edit.to=Do
+edit.all-tracks=V\u0161echny stopy
+edit.paste=Vlo\u017eit
+edit.paste.replace-mode=Vlo\u017eit do tohoto taktu
+edit.paste.insert-mode=Vlo\u017eit do n\u00e1sleduj\u00edc\u00edho taktu
+edit.delete=Odstranit
+edit.cut=Vyjmout
+edit.mouse-mode-selection=M\u00f3d v\u00fdb\u011bru
+edit.mouse-mode-edition=M\u00f3d vkl\u00e1d\u00e1n\u00ed not
+edit.not-natural-key=M\u00f3d posuvek
+
+view=Pohled
+
+view.layout=Rozvr\u017een\u00ed
+view.layout.page=Rozvr\u017een\u00ed strany
+view.layout.linear=Line\u00e1rn\u00ed rozvr\u017een\u00ed
+view.layout.multitrack=V\u00edcestop\u00e9 rozvr\u017een\u00ed
+
+view.show-mixer=Zobrazit mix\u00e9r
+view.show-fretboard=Zobrazit hmatn\u00edk
+view.show-piano=Zobrazit klaviaturu
+fretboard.right-mode=Prav\u00fd m\u00f3d
+fretboard.left-mode=Lev\u00fd m\u00f3d
+
+composition=Skladba
+composition.timesignature=Hodnota taktu ...
+composition.timesignature.Numerator=\u010citatel
+composition.timesignature.denominator=Jmenovatel
+composition.timesignature.to-the-end=A\u017e na konec
+composition.tempo=Tempo ...
+composition.tempo-percent=Procent
+composition.properties=Mo\u017enosti ...
+composition.name=N\u00e1zev
+composition.artist=Interpret
+composition.album=Album
+composition.author=Autor
+composition.tempo.invalid=Neplatn\u00e9 tempo
+composition.tripletfeel=Triolov\u00e9 c\u00edt\u011bn\u00ed ...
+
+help=N\u00e1pov\u011bda
+help.help=N\u00e1pov\u011bda
+help.about=O aplikaci..
+
+instruments.volume=Hlasitost (gain)
+instrument.volume=Hlasitost
+instrument.channel=Kan\u00e1l
+instrument.effect-channel=EC
+instrument.balance=Vyv\u00e1\u017een\u00ed
+instrument.free=Voln\u00fd
+instrument.link=Propojit
+
+track=Stopa
+track.number=N
+track.name=Jm\u00e9no
+track.color=Barva
+track.first=Prvn\u00ed stopa
+track.last=Posledn\u00ed stopa
+track.previous=P\u0159edchoz\u00ed stopa
+track.next=N\u00e1sleduj\u00edc\u00ed stopa
+track.add=P\u0159idat stopu
+track.remove=Odebrat stopu
+track.instrument=N\u00e1stroj
+track.tunning=Lad\u011bn\u00ed
+track.instrument.empty=Zvukov\u00e1 banka nebyla nalezena ve Va\u0161em MIDI syst\u00e9mu. Zkuste znovu zkompilovat aplikaci Tuxguitar za pomoci Va\u0161\u00ed verze javy. 
+track.properties=Vlastnosti
+track.properties.general=Obecn\u00e9
+track.name.default-percussion-name=Perkuse
+track.lyrics=Text p\u00edsn\u011b
+track.solo=S\u00f3lo
+track.mute=Ztlumit
+
+tunning.offset=Offset
+lyric.editor=Editor textu p\u00edsn\u011b
+
+measure=Takt
+measure.first=Jdi na prvn\u00ed takt
+measure.last=Jdi na posledn\u00ed takt
+measure.previous=Jdi na p\u0159edchoz\u00ed takt
+measure.next=Jdi na n\u00e1slednuj\u00edc\u00ed takt
+measure.add=P\u0159idat takt
+measure.add-before-current-position=P\u0159idat takt p\u0159ed sou\u010dasnou pozici
+measure.add-after-current-position=P\u0159idat takt za sou\u010dasnou pozici
+measure.add-at-end=P\u0159idat takt na konec
+measure.remove=Odebrat takt
+measure.copy=Kop\u00edrovat takt
+measure.paste=Vlo\u017eit takt
+measure.clean=Vymazat obsah taktu
+
+duration=D\u00e9lka
+duration.whole=Cel\u00e1
+duration.half=P\u016flov\u00e1
+duration.quarter=\u010ctvr\u0165ov\u00e1
+duration.eighth=Osminov\u00e1
+duration.sixteenth=\u0160estn\u00e1ctinov\u00e1
+duration.thirtysecond=Dvaat\u0159icetinov\u00e1
+duration.sixtyfourth=\u010cty\u0159ia\u0161edes\u00e1tinov\u00e1
+duration.dotted=Nota s te\u010dkou
+duration.doubledotted=Nota se dv\u011bma te\u010dkami
+duration.division-type=n-ola
+
+dynamic=Dynamika
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Efekty
+effects.vibrato=Vibr\u00e1to
+effects.bend=Vyta\u017een\u00ed (bend)
+effects.deadnote=Zatlumen\u00e1 nota (dead note)
+effects.slide=Skluz (slide)
+effects.hammer=P\u0159\u00edraz/Odtrh
+effects.tremolo-bar=Tremolo...
+effects.tremolo-bar-editor=Tremolo Editor
+effects.tremolo-bar.dip=Pono\u0159it
+effects.tremolo-bar.dive=Potopit
+effects.tremolo-bar.release-up=Vytahnout
+effects.tremolo-bar.release-down=Zatahnout
+effects.tremolo-bar.inverted-dip=Vyno\u0159it
+effects.tremolo-bar.return=Vr\u00e1tit
+effects.ghostnote=N\u00e1znak noty
+effects.accentuatednote=Akcent
+effects.heavyaccentuatednote=Siln\u00fd akcent
+effects.harmonic=Fla\u017eolet
+effects.grace=P\u0159\u00edraz
+effects.grace-editor=Editor P\u0159\u00edrazu
+effects.grace.before-beat=P\u0159ed dobou
+effects.grace.on-beat=Na dobu
+effects.grace.transition=P\u0159echod
+effects.grace.transition-none=\u017d\u00e1dn\u00fd
+effects.grace.transition-bend=Vyta\u017een\u00ed
+effects.grace.transition-slide=Skluz
+effects.grace.transition-hammer=P\u0159\u00edklep
+effects.trill=Trylek
+effects.trill-editor=Editor Trylk\u016f
+effects.tremolo-picking=Soustavn\u00e9 tremolo
+effects.tremolo-picking-editor=Editor Soustavn\u00e9ho tremola
+effects.palm-mute=Tlumen\u00ed dlan\u00ed
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slap
+effects.popping=Trhnut\u00ed  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Editor Fla\u017eolet\u016f
+effects.harmonic.type-of-harmonic=Typ fla\u017eoletu
+effects.harmonic.natural=P\u0159irozen\u00fd fla\u017eolet
+effects.harmonic.artificial=Um\u011bl\u00fd fla\u017eolet
+effects.harmonic.artificial.key-offset=Rozd\u00edl v lad\u011bn\u00ed
+effects.harmonic.tapped=Fla\u017eolet tappingem
+effects.harmonic.tapped.left-hand=Levou rukou
+effects.harmonic.tapped.right-hand=Pravou rukou
+effects.harmonic.pinch=Pinch fla\u017eolet
+effects.harmonic.semi=Semi-fla\u017eolet
+
+bend.editor=Editor Vyta\u017een\u00ed
+bend.bend=Vyt\u00e1hnout
+bend.bend-release=Vyt\u00e1hnout/Pustit
+bend.bend-release-bend=Vyt\u00e1hnout/Pustit/Vyt\u00e1hnout
+bend.prebend=Dop\u0159edu Vyt\u00e1hnout
+bend.prebend-release=Dop\u0159edu vyt\u00e1hnout/Pustit
+
+transport=P\u0159ehr\u00e1va\u010d
+transport.start=Start
+transport.stop=Stop
+
+repeat.open=Za\u010d\u00e1tek repetice
+repeat.close=Konec repetice
+repetitions=Repetice
+repeat.number-of-repetitions=Po\u010det opakov\u00e1n\u00ed
+
+beat=Nota
+beat.clean=\u010cist\u00e1 doba
+
+note.semitone-up=O p\u016flt\u00f3n n\u00ed\u017e
+note.semitone-down=O p\u016flt\u00f3n v\u00fd\u0161
+note.shift-up=O strunu n\u00ed\u017e
+note.shift-down=O strunu v\u00fd\u0161
+note.tiednote=Ligatura
+note.deadnote=Zatlumen\u00e1 nota
+
+insert.chord=Vlo\u017eit akord
+chord.editor=Editor Akord\u016f
+chord=Akord
+chord.name=Jm\u00e9no akordu
+chord.custom.name-empty-error=Akord mus\u00ed m\u00edt jm\u00e9no!
+chord.custom.name-exist-error=Jm\u00e9no akordu ji\u017e existuje!
+
+instrument=N\u00e1stroj
+instrument.instrument=N\u00e1stroj
+instrument.percussion-track=Bic\u00ed/Perkuse
+
+tunning=Lad\u011bn\u00ed
+tunning.strings=Struny
+
+language=Jazyk
+
+choose-color=Zvolte barvu
+
+
+settings=Nastraven\u00ed
+settings.config=Nastavit TuxGuitar
+settings.config.view=Pohled
+settings.config.view.mode=M\u00f3d rozvr\u017een\u00ed
+settings.config.view.size=Velikost okna
+settings.config.view.size.maximized=Maximalizovan\u00e9
+settings.config.view.size.width=\u0160\u00ed\u0159ka
+settings.config.view.size.height=V\u00fd\u0161ka
+settings.config.language=Jazyk
+settings.config.language.choose=Zvolte V\u00e1\u0161 jazyk
+settings.config.styles=Styly
+settings.config.styles.font.default=V\u00fdchoz\u00ed font
+settings.config.styles.font.note=Notov\u00fd font
+settings.config.styles.font.time-signature=Font \u010dasov\u00e1n\u00ed taktu
+settings.config.styles.font.printer-default=Tisk\u00e1rna - v\u00fdchoz\u00ed font
+settings.config.styles.font.printer-note=Tisk\u00e1rna - notov\u00fd font
+settings.config.styles.font.printer-time-signature=Tisk\u00e1rna - font \u010dasov\u00e1n\u00ed taktu
+settings.config.styles.color.score-note=Barva not
+settings.config.styles.color.tab-note=Barva znak\u016f tabulatury
+settings.config.styles.color.play-note=Barva pr\u00e1v\u011b hran\u00e9 noty
+settings.config.apply-changes-question=P\u0159ejete si ulo\u017eit zm\u011bny?
+settings.config.sound=Zvuk
+settings.config.sound.soundbank=Zvukov\u00e1 banka
+settings.config.sound.default-soundbank=Pou\u017e\u00edt v\u00fdchoz\u00ed zvukovou banku
+settings.config.sound.custom-soundbank=Pou\u017e\u00edt vlastn\u00ed zvukovou banku
+settings.config.sound.soundbank-restart-message=Je t\u0159eba restartovat TuxGuitar aby se projevila zm\u011bna zvukov\u00e9 banky
+settings.config.main=Obecn\u00e9
+settings.config.main.window-title=Titulek okna
+settings.config.main.window-title.help=Tyto n\u00e1sleduj\u00edc\u00ed prom\u011bnn\u00e9 budou zobrazeny na titulku okna:
+settings.config.main.window-title.var.description.appname=Tato prom\u011bnn\u00e1 ozna\u010duje jm\u00e9no aplikace: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Tato prom\u011bnn\u00e1 ozna\u010duje aktu\u00e1ln\u00ed verzi aplikace TuxGuitar.
+settings.config.main.window-title.var.description.filename=Tato prom\u011bnn\u00e1 ozna\u010duje jm\u00e9no otev\u0159en\u00e9ho souboru 
+settings.config.main.window-title.var.description.filepath=Tato prom\u011bnn\u00e1 zna\u010d\u00ed cestu k pr\u00e1v\u011b otev\u0159en\u00e9mu souboru
+settings.config.main.window-title.var.description.songname=Tato prom\u011bnn\u00e1 ozna\u010duje jm\u00e9no skladby
+settings.config.main.window-title.var.description.songauthor=Tato prom\u011bnn\u00e1 ozna\u010duje autora skladby
+settings.config.main.window-title.var.description.songalbum=Tato prom\u011bnn\u00e1 ozna\u010duje album 
+settings.config.main.window-title.var.description.songartist=Tato prom\u011bnn\u00e1 ozna\u010duje interpreta skladby
+settings.config.main.options=Volby
+settings.config.main.splash-enabled=Uk\u00e1zat \u00favodn\u00ed obrazovku p\u0159i startu TuxGuitar
+settings.config.styles.color.lines=Barva notov\u00fdch \u010dar
+settings.config.toolbars=N\u00e1strojov\u00e9 li\u0161ty
+
+soundbank.error=Chyba zvukov\u00e9 banky!
+soundbank.error.unavailable=Chyba, zvukov\u00e1 banka nen\u00ed dostupn\u00e1!
+soundbank.error.custom=Selhalo otev\u0159en\u00ed vlastn\u00ed zvukov\u00e9 banky!
+
+settings.keybindings=Konfigurovat kl\u00e1vesov\u00e9 zkratky
+key-bindings-editor=Editor Kl\u00e1vesov\u00fdch zkratek
+key-bindings-editor-action-select=Zvolte akci
+key-bindings-editor-action-column=Akce
+key-bindings-editor-shortcut-column=Kl\u00e1vesy
+key-bindings-editor-push-a-key=Zm\u00e1\u010dkn\u011bte kl\u00e1vesu
+key-bindings-editor-save-question=N\u011bkter\u00e9 zm\u011bny nejsou ulo\u017eeny, opravdu chcete odej\u00edt bez ulo\u017een\u00ed zm\u011bn?
+key-bindings-editor-override=Zkratka ji\u017e pou\u017eita! Jste si jist(a), \u017ee ji chcete pou\u017e\u00edt ?
+
+
+
+print.print=Tisk
+print.dialog=Tisk
+print.service=Slu\u017eba
+print.service.name=Jm\u00e9no
+print.service.status=Status
+print.service.type=Typ
+print.service.info=Informace
+print.range=Rozsah
+print.range.all-pages=V\u0161echny
+print.range.pages=Str\u00e1nky
+print.range.pages-to=Do
+print.copies=Kopie
+print.copies-number=Po\u010det kopi\u00ed
+print.print-to-file=Tisk do souboru
+print.file-chooser=Zvolit
+print-header.default-song-name=Bez n\u00e1zvu
+print-header.default-song-author=Anonym
+print.preview=N\u00e1hled tisku
+
+
+
+
+view.layout.score-enabled=Uk\u00e1zat notaci
+view.show-transport=Uk\u00e1zat Transport
+
+composition.clef=Kl\u00ed\u010d ...
+composition.clef.treble=Houslov\u00fd
+composition.clef.bass=Basov\u00fd
+composition.clef.tenor=Tenorov\u00fd
+composition.clef.alto=Altov\u00fd
+composition.clef.to-the-end=Pou\u017e\u00edt tento kl\u00ed\u010d a\u017e do konce
+
+composition.keysignature=P\u0159edznamen\u00e1n\u00ed ...
+composition.keysignature.natural=Bez p\u0159edznamen\u00e1n\u00ed
+composition.keysignature.sharp-1=1 k\u0159\u00edzek
+composition.keysignature.sharp-2=2 k\u0159\u00ed\u017eky
+composition.keysignature.sharp-3=3 k\u0159\u00ed\u017eky
+composition.keysignature.sharp-4=4 k\u0159\u00ed\u017eky
+composition.keysignature.sharp-5=5 k\u0159\u00ed\u017ek\u016f
+composition.keysignature.sharp-6=6 k\u0159\u00ed\u017ek\u016f
+composition.keysignature.sharp-7=7 k\u0159\u00ed\u017ek\u016f
+composition.keysignature.flat-1=1 b\u00e9\u010dko
+composition.keysignature.flat-2=2 b\u00e9\u010dka
+composition.keysignature.flat-3=3 b\u00e9\u010dka
+composition.keysignature.flat-4=4 b\u00e9\u010dka
+composition.keysignature.flat-5=5 b\u00e9\u010dka
+composition.keysignature.flat-6=6 b\u00e9\u010dek
+composition.keysignature.flat-7=7 b\u00e9\u010dek
+composition.keysignature.to-the-end=Pou\u017e\u00edt toto p\u0159edznamen\u00e1n\u00ed a\u017e do konce
+
+composition.tripletfeel=Triolov\u00e9 c\u00edt\u011bn\u00ed ...
+composition.tripletfeel.none=\u017d\u00e1dn\u00e9 triolov\u00e9 c\u00edt\u011bn\u00ed
+composition.tripletfeel.eighth=Osminov\u00e9 trioly
+composition.tripletfeel.sixteenth=\u0160estn\u00e1ctinov\u00e9 trioly
+composition.tripletfeel.to-the-end=Pou\u017e\u00edt toto triolov\u00e9 c\u00edt\u011bn\u00ed a\u017e do konce
+
+track.clone=Klonovat stopu
+track.move-up=Posunout nahoru
+track.move-down=Posunout dol\u016f
+
+marker=Z\u00e1lo\u017eky
+marker.add=P\u0159idat z\u00e1lo\u017eku
+marker.list=Seznam z\u00e1lo\u017eek
+marker.first=Jdi na prvn\u00ed z\u00e1lo\u017eku
+marker.last=Jdi na posledn\u00ed z\u00e1lo\u017eku
+marker.next=Jdi na n\u00e1sleduj\u00edc\u00ed z\u00e1lo\u017eku
+marker.previous=Jdi na p\u0159edchoz\u00ed z\u00e1lo\u017eku
+
+export.tablature-enabled=Zobrazit tabulaturu
+export.score-enabled=Zobrazit notaci
+
+scale=Stupnice
+scale.list=Seznam stupnic
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Polo\u017eky Soubory
+edit.items=Polo\u017eky Editace
+property.items=Polo\u017eky Vlastnosti
+track.items=Polo\u017eky Stopa
+duration.items=Polo\u017eky D\u00e9lka
+beat.items=Polo\u017eky Noty
+composition.items=Polo\u017eky Skladba
+repeat.items=Polo\u017eky Opakovat
+transport.items=Polo\u017eky P\u0159ehr\u00e1va\u010d
+marker.items=Polo\u017eky Z\u00e1lo\u017eek
+insert.items=Polo\u017eky Vkl\u00e1d\u00e1n\u00ed
+layout.items=Polo\u017eky Rozlo\u017een\u00ed
+view.items=Polo\u017eky Vzhled
+effect.items=Polo\u017eky Efekt\u016f
+dynamic.items=Polo\u017eky Dynamika
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Nov\u00fd soubor
+action.file.open=Otev\u0159\u00edt soubor
+action.file.save=Ulo\u017eit
+action.file.save-as=Ulo\u017eit jako...
+action.file.print=Tisk
+action.file.print-preview=N\u00e1hled tisku
+action.edit.undo=Zp\u011bt
+action.edit.redo=Vp\u0159ed
+action.composition.change-time-signature=Zm\u011bnit \u010dasov\u00e1n\u00ed skladby
+action.composition.change-tempo=Zm\u011bnit tempo
+action.composition.change-info=Zm\u011bnit informace o skladb\u011b
+action.composition.change-clef=Zm\u011bnit kl\u00ed\u010d
+action.composition.change-key-signature=Zm\u011bnit p\u0159edznamen\u00e1n\u00ed
+action.view.layout-set-page=Zobrazit rozvr\u017een\u00ed str\u00e1nky
+action.view.layout-set-linear=Zobrazit line\u00e1rn\u00ed rozvr\u017een\u00ed
+action.view.layout-set-multitrack=Zobrazit v\u00edcestop\u00e9 rozvr\u017een\u00ed
+action.view.layout-set-score-enabled=Zobrazit notaci
+action.view.show-fretboard=Zobrazit hmatn\u00edk
+action.view.show-piano=Zobrazit klaviaturu
+action.view.show-mixer=Zobrazit mix\u00e9r
+action.view.show-transport=Zobrazit transport
+action.track.add=P\u0159idat stopu
+action.track.remove=Odebrat stopu
+action.track.clone=Klonovat stopu
+action.track.go-first=J\u00edt na prvn\u00ed stopu
+action.track.go-last=J\u00edt na posledn\u00ed stopu
+action.track.go-next=J\u00edt na n\u00e1sleduj\u00edc\u00ed stopu
+action.track.go-previous=J\u00edt na p\u0159edchoz\u00ed stopu
+action.track.lyrics=Editovat text p\u00edsn\u011b
+action.track.properties=Zm\u011bnit vlastnosti stopy
+action.measure.add=P\u0159idat takt
+action.measure.remove=Odebrat takt
+action.measure.copy=Kop\u00edrovat takt
+action.measure.paste=Vlo\u017eit takt
+action.measure.clean=Vy\u010distit takt
+action.measure.go-first=J\u00edt na prvn\u00ed takt
+action.measure.go-last=J\u00edt na posledn\u00ed takt
+action.measure.go-next=J\u00edt na n\u00e1slednuj\u00edc\u00ed takt
+action.measure.go-previous=J\u00edt na p\u0159edchoz\u00ed takt
+action.note.general.clean-beat=\u010cist\u00e1 doba
+action.note.general.decrement-semitone=O p\u016flt\u00f3n dol\u016f
+action.note.general.increment-semitone=O p\u016flt\u00f3n nahoru
+action.note.general.shift-down=Posunout dol\u016f
+action.note.general.shift-up=Posunout nahoru
+action.note.general.tied=P\u0159idat/Odebrat v\u00e1zanou notu
+action.note.duration.change-dotted=P\u0159idat/Odebrat te\u010dku
+action.note.duration.change-double-dotted=P\u0159idat/Odebrat dvoj\u00ed te\u010dku
+action.note.duration.change-division-type=P\u0159idat/Odebrat n-olu
+action.note.effect.change-vibrato=P\u0159idat/Odebrat Vibrato
+action.note.effect.change-bend=P\u0159idat/Odebrat vyta\u017een\u00ed
+action.note.effect.change-slide=P\u0159idat/Odebrat skluz
+action.note.effect.change-hammer=P\u0159idat/Odebrat p\u0159\u00edraz/odtrh
+action.note.effect.change-accentuated=P\u0159idat/Odebrat akcent
+action.note.effect.change-dead=P\u0159idat/Odebrat zatlumenou notu
+action.note.effect.change-fade-in=P\u0159idat/Odebrat fade in
+action.note.effect.change-ghost=P\u0159idat/Odebrat n\u00e1znak
+action.note.effect.change-grace=P\u0159idat/Odebrat p\u0159\u00edraz
+action.note.effect.change-harmonic=P\u0159idat/Odebrat fla\u017eolet
+action.note.effect.change-heavy-accentuated=P\u0159idat/Odebrat siln\u00fd akcent
+action.note.effect.change-palm-mute=P\u0159idat/Odebrat tlumen\u00ed z\u00e1p\u011bst\u00edm
+action.note.effect.change-popping=P\u0159idat/Odebrat trhnut\u00ed 
+action.note.effect.change-slapping=P\u0159idat/Odebrat slap
+action.note.effect.change-staccato=P\u0159idat/Odebrat staccato
+action.note.effect.change-tapping=P\u0159idat/Odebrat tapping
+action.note.effect.change-tremolo-bar=P\u0159idat/Odebrat tremolo
+action.note.effect.change-tremolo-picking=P\u0159idat/Odebrat soustavn\u00e9 tremolo
+action.note.effect.change-trill=P\u0159idat/Odebrat trylek
+action.insert.open-repeat=Za\u010d\u00e1tek repetice
+action.insert.close-repeat=Konec repetice
+action.insert.chord=Vlo\u017eit akord
+action.transport.play=P\u0159ehr\u00e1t skladbu
+action.transport.stop=Stop p\u0159ehr\u00e1v\u00e1n\u00ed
+
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_de.properties b/TuxGuitar-testing/platform-all/share/lang/messages_de.properties
new file mode 100644
index 0000000..4cc2e95
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_de.properties
@@ -0,0 +1,685 @@
+ok=Ok
+cancel=Abbrechen
+yes=Ja
+no=Nein
+add=Hinzuf\u00FCgen
+edit=Editieren
+remove=Entfernen
+save=Speicher
+exit=Beenden
+close=Schlie\u00DFen
+choose=Ausw\u00E4hlen
+color=Farbe
+title=Titel
+go=Start
+warning=Warnung
+error=Fehler
+plugins=Plugins
+options=Optionen
+defaults=Standardwerte
+clean=L\u00F6schen
+rename=Umbenennen
+fret=Bund
+position=Position
+name=Name
+author=Autor
+version=Version
+description=Beschreibung
+info=Info
+configure=Konfigurieren
+url=URL
+
+file=Datei
+file.new=Neu
+file.open=\u00d6ffnen
+file.save=Speichern
+file.save-as=Speichern unter
+file.save-changes-question=Das Lied wurde seit dem letzten Speichern ver\u00E4ndert.\nWollen Sie die \u00c4nderungen vor dem Beenden speichern?
+file.exit=Beenden
+file.export=Exportieren
+file.export-midi=Als MIDI exportieren
+file.export-pdf=Als PDF exportieren
+file.print=Drucken
+file.print-preview=Druckvorschau
+file.import=Importieren
+file.import-midi=MIDI importieren
+file.export-ascii=Als ASCII exportieren
+file.history=Zuletzt ge\u00F6ffnete Dateien
+file.open-url=URL \u00F6ffnen
+file.open.error=Kann folgende Datei nicht \u00F6ffnen: {0}
+file.save.error=Kann folgende Datei nicht speichern: {0}
+file.import.error=Kann folgende Datei nicht importieren: {0}
+file.export.error=Kann folgende Datei nicht exportieren: {0}
+file.overwrite-question=Diese Datei existiert bereits. Soll sie \u00FCberschrieben werden?
+
+edit.menu=Editieren
+edit.undo=R\u00FCckg\u00E4ngig
+edit.redo=Wiederherstellen
+edit.copy=Kopieren
+edit.from=von
+edit.to=bis
+edit.all-tracks=Alle Spuren
+edit.paste=Einf\u00FCgen
+edit.paste.count=Anzahl
+edit.paste.replace-mode=Einf\u00FCgen im aktuellen Takt
+edit.paste.insert-mode=Einf\u00FCgen in neuen Takt
+edit.delete=L\u00F6schen
+edit.cut=Ausschneiden
+edit.mouse-mode-selection=Selektionsmodus
+edit.mouse-mode-edition=Partitureditor Modus
+edit.not-natural-key=Erh\u00F6ht/Vermindert Modus
+edit.voice-1=Stimme 1 ausw\u00E4hlen
+edit.voice-2=Stimme 2 ausw\u00E4hlen
+
+view=Ansicht
+view.layout=Layout
+view.layout.page=Seitenlayout
+view.layout.linear=Lineares Layout
+view.layout.compact=Kompakte Anzeige
+view.layout.multitrack=Mehrspuransicht
+view.layout.chord-style=Akkordanzeige
+view.layout.chord-name=Akkordname
+view.layout.chord-diagram=Akkorddiagramm
+view.layout.score-enabled=Partitur anzeigen
+view.layout.tablature-enabled=Tabulatur anzeigen
+view.show-mixer=Mixer anzeigen
+view.show-fretboard=Griffbrett anzeigen
+view.show-piano=Klaviatur anzeigen
+view.show-matrix=Matrix Editor anzeigen
+view.show-transport=Transportfenster anzeigen
+
+fretboard.direction=Direction
+fretboard.right-mode=Rechtsh\u00E4nder
+fretboard.left-mode=Linksh\u00E4nder
+fretboard.background-color=Hintergrundfarbe
+fretboard.display-note-text=Notenwerte anzeigen
+fretboard.display-scale-text=Skalenwerte anzeigen
+fretboard.font=Schriftart
+fretboard.fretpoint-color=Bundfarbe
+fretboard.note-color=Notenfarbe
+fretboard.scale-note-color=Skalenfarbe
+fretboard.settings=Griffbretteinstellungen
+fretboard.string-color=Saitenfarbe
+fretboard.settings.options=Optionen
+
+piano.editor=Klaviatur
+piano.natural-key-color=Ganztonfarbe
+piano.not-natural-key-color=Halbtonfarbe
+piano.note-color=Notenfarbe
+piano.scale-note-color=Skalenfarbe
+piano.settings=Klaviatureinstellungen
+
+matrix.editor=Matrix Editor
+matrix.grids=Taktunterteilung
+matrix.border-color=Rahmenfarbe
+matrix.font=Schriftart
+matrix.foreground-color=Vordergrundfarbe
+matrix.line-color-1=Farbe der ungeraden Reihen
+matrix.line-color-2=Farbe der geraden Reihen
+matrix.line-color-over=Farbe der Reihe unter der Maus
+matrix.note-color=Notenfarbe
+matrix.play-note-color=Fabe der abgespielten Note
+matrix.position-color=Positionsfarbe
+matrix.settings=Matrix Einstellungen
+
+composition=Komposition
+composition.timesignature=Taktart
+composition.timesignature.Numerator=Z\u00E4hler
+composition.timesignature.denominator=Nenner
+composition.timesignature.to-the-end=Diese Taktart bis zum Liedende benutzen
+composition.tempo=Tempo
+composition.tempo-percent=Prozent
+composition.tempo.invalid=Unzul\u00E4ssiges Tempo
+composition.tempo.start-to-end=Dieses Tempo im ganzen Lied benutzen
+composition.tempo.position-to-end=Dieses Tempo bis zum Liedende benutzen
+composition.tempo.position-to-next=Dieses Tempo bis zum n\u00E4chsten Tempomarker benutzen
+composition.properties=Eigenschaften
+composition.name=Name
+composition.artist=K\u00FCnstler
+composition.album=Album
+composition.author=Autor
+composition.date=Datum
+composition.copyright=Copyright
+composition.writer=Tab Ersteller
+composition.transcriber=Transkribiert von
+composition.comments=Kommentare
+composition.tripletfeel=Triolenfeeling
+composition.clef=Notenschl\u00FCssel
+composition.clef.treble=Sopran
+composition.clef.bass=Bass
+composition.clef.tenor=Tenor
+composition.clef.alto=Alt
+composition.clef.to-the-end=Diesen Notenschl\u00FCssel bis zum Liedende verwenden
+composition.keysignature=Tonartenschl\u00FCssel
+composition.keysignature.natural=Nat\u00FCrlich
+composition.keysignature.sharp-1=1 Erh\u00F6hungszeichen
+composition.keysignature.sharp-2=2 Erh\u00F6hungszeichen
+composition.keysignature.sharp-3=3 Erh\u00F6hungszeichen
+composition.keysignature.sharp-4=4 Erh\u00F6hungszeichen
+composition.keysignature.sharp-5=5 Erh\u00F6hungszeichen
+composition.keysignature.sharp-6=6 Erh\u00F6hungszeichen
+composition.keysignature.sharp-7=7 Erh\u00F6hungszeichen
+composition.keysignature.flat-1=1 Verminderungszeichen
+composition.keysignature.flat-2=2 Verminderungszeichen
+composition.keysignature.flat-3=3 Verminderungszeichen
+composition.keysignature.flat-4=4 Verminderungszeichen
+composition.keysignature.flat-5=5 Verminderungszeichen
+composition.keysignature.flat-6=6 Verminderungszeichen
+composition.keysignature.flat-7=7 Verminderungszeichen
+composition.keysignature.to-the-end=Diesen Tonartenschl\u00FCssel bis zum Liedende verwenden
+composition.tripletfeel=Triolenfeeling
+composition.tripletfeel.none=Kein Triolenfeeling
+composition.tripletfeel.eighth=8el Triolenfeeling
+composition.tripletfeel.sixteenth=16tel Triolenfeeling
+composition.tripletfeel.to-the-end=Dieses Triolenfeeling bis zum Liedende verwenden
+
+help=Hilfe
+help.help=Hilfe
+help.doc=Dokumentation
+help.about=\u00dcber Tuxguitar
+help.about.license=Lizenz
+help.about.authors=Autoren
+help.about.description=Beschreibung
+
+track=Spur
+track.number=Nr.
+track.name=Name
+track.color=Farbe
+track.first=Erste Spur
+track.last=Letzte Spur
+track.previous=Vorherige Spur
+track.next=N\u00E4chste Spur
+track.add=Spur hinzuf\u00FCgen
+track.remove=Spur entfernen
+track.clone=Spur duplizieren
+track.move-up=Aufw\u00E4rts bewegen
+track.move-down=Abw\u00E4rts bewegen
+track.instrument=Instrument 
+track.properties=Eigenschaften
+track.properties.general=Allgemeines
+track.name.default-percussion-name=Schlagzeugspur
+track.lyrics=Liedtext
+track.solo=Solo
+track.mute=Mute
+
+lyric.editor=Liedtext-Editor
+
+measure=Takt
+measure.first=Erster Takt
+measure.last=Letzter Takt
+measure.previous=Vorheriger Takt
+measure.next=N\u00E4chster Takt
+measure.add=Takt hinzuf\u00FCgen
+measure.add.count=Anzahl
+measure.add-before-current-position=Takt(e) vor aktueller Position hinzuf\u00FCgen
+measure.add-after-current-position=Takt(e) nach aktueller Position hinzuf\u00FCgen
+measure.add-at-end=Takt(e) am Ende hinzuf\u00FCgen
+measure.remove=Takt l\u00F6schen
+measure.copy=Takt kopieren
+measure.paste=Takt einf\u00FCgen
+measure.clean=Takt leeren
+
+duration=Notenl\u00E4nge
+duration.whole=Ganz
+duration.half=Halb
+duration.quarter=Viertel
+duration.eighth=Achtel
+duration.sixteenth=Sechzehntel
+duration.thirtysecond=32tel
+duration.sixtyfourth=64tel
+duration.dotted=Punktiert
+duration.doubledotted=Doppelt punktiert
+duration.division-type=Triolisch
+
+dynamic=Dynamik
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Effekte
+effects.vibrato=Vibrato
+effects.bend=Bending
+effects.deadnote=Dead Note
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Ghost Note
+effects.accentuatednote=Akzentuierte Note
+effects.heavyaccentuatednote=Stark akzentuierte Note
+effects.harmonic=Harmonic
+effects.grace=Vorschlagsnote
+effects.grace-editor=Vorschlageditor
+effects.grace.before-beat=Vor dem Schlag
+effects.grace.on-beat=Auf dem Schlag
+effects.grace.transition=\u00dcbergang
+effects.grace.transition-none=Keiner
+effects.grace.transition-bend=Bending
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Trill Editor
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=Abged\u00E4mpft
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Nat\u00FCrlichhe Harmonie
+effects.harmonic.artificial=K\u00FCnstliche Harmonie
+effects.harmonic.artificial.key-offset=Schl\u00FCsselversatz
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Linke Hand
+effects.harmonic.tapped.right-hand=Rechte Hand
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+
+bend.editor=Bending Editor
+bend.bend=Bending
+bend.bend-release=Bend/Release
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=Wiedergabe
+transport.start=Start
+transport.stop=Stop
+transport.pause=Pause
+transport.first=Erster Takt
+transport.last=Letzter Takt
+transport.previous=Vorheriger Takt
+transport.next=N\u00E4chster Takt
+transport.metronome=Metronom
+transport.mode=Abspielmodus
+transport.mode.simple=Normaler Modus
+transport.mode.simple.tempo-percent=Prozent des Tempos
+transport.mode.simple.loop=In Schleife abspielen
+transport.mode.trainer=\u00dcbungsmodus
+transport.mode.trainer.increment-description=Erh\u00F6hen um
+transport.mode.loop-range=Schleife
+transport.mode.loop-range.from=Abspielen ab Takt
+transport.mode.loop-range.from-default=Vom Anfang
+transport.mode.loop-range.to=Abspielen bis Takt
+transport.mode.loop-range.to-default=Bis zum Liedende
+transport.set-loop-start=Anfang der Schleife setzen
+transport.set-loop-end=Ende der Schleife setzen
+
+instruments.volume=Gain
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=Volume
+instrument.balance=Balance
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Free
+instrument.link=Link
+
+
+repeat.open=Wiederholung \u00F6ffnen
+repeat.close=Wiederholung schlie\u00dfen
+repeat.alternative=Alternative Endungen
+repeat.alternative.editor=Alternative Endungen editieren
+repetitions=Wiederholungen
+repeat.number-of-repetitions=Anzahl Wiederholungen
+
+beat=Note
+beat.clean=Schlag leeren
+beat.voice.remove-unused=Ungenutzte Stimme entfernen
+beat.voice-up=Notenh\u00E4lse nach oben ausrichten
+beat.voice-down=Notenh\u00E4lse nach unten ausrichten
+beat.voice-auto=Notenh\u00E4lse automatisch ausrichten
+beat.stroke=Stroke
+beat.stroke-up=Aufschlag
+beat.stroke-down=Abschlag
+beat.move-left=Um einen Schlag nach links verschieben
+beat.move-right=Um einen Schlag nach rechts verschieben
+beat.move-custom=Benutzerdefiniert verschieben
+beat.move-custom.dialog.title=Note verschieben
+beat.move-custom.dialog.direction-tip=Richtung
+beat.move-custom.dialog.move-1.tip=Hauptverschiebung
+beat.move-custom.dialog.move-2.tip=Feinverschiebung
+beat.move-custom.dialog.direction=Richtung
+beat.move-custom.dialog.direction.right=Nach rechts verschieben
+beat.move-custom.dialog.direction.left=Nach links verschieben
+beat.move-custom.dialog.count=Anzahl
+beat.move-custom.dialog.duration=Notenwert
+beat.move-custom.dialog.duration.type=Punktiert/Doppelt punktiert
+beat.move-custom.dialog.duration.type.normal=Nicht punktiert
+beat.move-custom.dialog.duration.division-type=Aufteilung
+beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet)
+
+note=Note
+note.semitone-up=Halbton erh\u00F6hen
+note.semitone-down=Halbton vermindern
+note.shift-up=Saite nach oben
+note.shift-down=Saite nach unten
+note.tiednote=Gebundene Note
+note.deadnote=Dead Note
+
+insert.chord=Akkord einf\u00FCgen
+chord.editor=Akkordeditor
+chord=Akkord
+chord.name=Name
+chord.bass=Bass
+chord.custom=Benutzerdefinierter Akkord
+chord.custom.name-empty-error=Der Akkordname darf nicht leer sein.
+chord.custom.name-exist-error=Der Akkordname existiert bereits.
+chord.settings.tip=Benutzerdefinierte Einstellungen
+chord.settings.type=Typ
+chord.settings.type.most-common=Am h\u00E4ufigsten vorkommende
+chord.settings.type.inversions=Umkehrungen
+chord.settings.type.close-voiced=Geschlossenes Voicing
+chord.settings.type.open-voiced=Offenes Voicing
+chord.settings.open-chords=Offene Akkorde
+chord.settings.chords-to-display=Anzuzeigende Akkorde
+chord.settings.search-frets=Bundsuche
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+
+instrument=Instrument
+instrument.instrument=Instrument
+instrument.percussion-track=Schlagzeugspur
+
+tuning=Stimmung
+tuning.offset=Offset
+tuning.strings=Saiten
+tuning.strings.transpose=Betroffene Noten transponieren.
+tuning.strings.transpose.try-keep-strings=Versuche Noten auf der gleichen Saite zu lassen
+tuning.strings.transpose.apply-to-chords=Akkorde transponieren
+
+language=Sprache
+
+choose-color=Farbe w\u00E4hlen
+
+settings=Einstellungen
+settings.config=TuxGuitar konfigurieren
+settings.config.language=Sprache
+settings.config.language.choose=Bitte eine Sprache ausw\u00E4hlen:
+settings.config.styles=Styles
+settings.config.styles.general=General Styles
+settings.config.styles.printer=Printer Styles
+settings.config.styles.font.default=Standardschriftart
+settings.config.styles.font.note=Notenschriftart
+settings.config.styles.font.lyric=Schriftart des Liedtextes
+settings.config.styles.font.text=Textschriftart
+settings.config.styles.font.time-signature=Schriftart der Taktart
+settings.config.styles.font.printer-default=Drucker Standardschriftart
+settings.config.styles.font.printer-note=Drucker Notenschriftart
+settings.config.styles.font.printer-time-signature=Drucker Schriftart der Taktart
+settings.config.styles.color.score-note=Partiturfarbe
+settings.config.styles.color.tab-note=Tabulaturfarbe
+settings.config.styles.color.play-note=Farbe der aktuellen Note
+settings.config.apply-changes-question=Sollen die \u00C4nderungen jetzt angewendet werden?
+settings.config.sound=Sound
+settings.config.main=Allgemein
+settings.config.main.window-title=Fenstertitel
+settings.config.main.window-title.help=Die folgenden Variablen werden im Fenstertitel ersetzt:
+settings.config.main.window-title.var.description.appname=Diese Variable repr\u00E4sentiert den Programmnamen: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Diese Variable repr\u00E4sentiert die Versionsnummer
+settings.config.main.window-title.var.description.filename=Diese Variable repr\u00E4sentiert den Namen der ge\u00F6ffneten Datei
+settings.config.main.window-title.var.description.filepath=Diese Variable repr\u00E4sentiert den Pfad zur ge\u00F6ffneten Datei
+settings.config.main.window-title.var.description.songname=Diese Variable repr\u00E4sentiert den Liednamen
+settings.config.main.window-title.var.description.songauthor=Diese Variable repr\u00E4sentiert den Autor des Liedes
+settings.config.main.window-title.var.description.songalbum=Diese Variable repr\u00E4sentiert das Album des Liedes
+settings.config.main.window-title.var.description.songartist=Diese Variable repr\u00E4sentiert den Interpreten des Liedes
+settings.config.main.options=Optionen
+settings.config.main.splash-enabled=Er\u00F6ffnungsbildschirm beim Start anzeigen
+settings.config.main.table.auto-size.enabled=Enable Automatic Table resizing
+settings.config.styles.color.lines=Horizontallinienfarbe
+settings.config.toolbars=Werkzeugleisten
+settings.config.toolbars.tip=Ihre Werkzeugleisten anpassen
+settings.config.toolbars.list=Verf\u00FCgbare Werkzeugleisten
+settings.config.toolbars.move-up=Nach oben verschieben
+settings.config.toolbars.move-down=Nach unten verschieben
+settings.config.skin=Themen
+settings.config.skin.choose=W\u00E4hlen Sie Ihr Thema
+settings.keybindings=Tastenkombinationen konfigurieren
+
+key-bindings-editor=Tastaturbelegung
+key-bindings-editor-action-select=Aktion ausw\u00E4hlen:
+key-bindings-editor-action-column=Aktionen
+key-bindings-editor-shortcut-column=Tasten
+key-bindings-editor-push-a-key=Taste dr\u00FCcken
+key-bindings-editor-save-question=Es gibt ungesicherte \u00C4nderungen, sollen diese verworfen werden?
+key-bindings-editor-override=Diese Tastenkombination ist bereits belegt. Trotzdem benutzen?
+
+print.print=Drucken
+print.dialog=Drucken
+print.service=Service
+print.service.name=Name
+print.service.status=Status
+print.service.type=Typ
+print.service.info=Info
+print.range=Bereich
+print.range.all-pages=Alle
+print.range.pages=Seiten
+print.range.pages-to=Bis
+print.copies=Ausdrucke
+print.copies-number=Anzahl der Ausdrucke
+print.print-to-file=In Datei drucken
+print.file-chooser=Ausw\u00E4hlen
+print-header.default-song-name=Unbenannt
+print-header.default-song-author=Anonym
+
+print.preview=Druckvorschau
+print.preview.page-of=von
+
+marker=Markierung
+marker.add=Markierung hinzuf\u00FCgen
+marker.list=Markierungen auflisten
+marker.first=Gehe zur ersten Markierung
+marker.last=Gehe zur letzten Markierung
+marker.next=Gehe zur n\u00E4chsten Markierung
+marker.previous=Gehe zur vorherigen Markierung
+
+export.tablature-enabled=Tabulatur anzeigen
+export.score-enabled=Partitur anzeigen
+export.chord-name-enabled=Akkordnamen anzeigen
+export.chord-diagram-enabled=Akkorddiagramme anzeigen
+export.black-and-white=Schwarzwei\u00dfmodus
+
+scale=Skalen
+scale.list=Skalenliste
+
+text.insert=Text einf\u00FCgen
+text.editor=Texteditor
+text.text=Text
+
+tools=Tools
+tools.scale=Skalenliste
+tools.browser=Dateisammlungs-Browser
+tools.plugins=Plugins
+tools.shortcuts=Tastenkombinationen
+tools.settings=Einstellungen
+
+tools.transpose=Transponieren
+tools.transpose.semitones=Transponieren um Halbt\u00F6ne
+tools.transpose.apply-to-track=Alle Takte transponieren
+tools.transpose.apply-to-measure=Nur diesen Takt transponieren
+tools.transpose.apply-to-all-tracks=Alle Spuren transponieren
+tools.transpose.try-keep-strings=Versuche Noten auf der gleichen Saite zu lassen (wenn m\u00F6glich)
+tools.transpose.apply-to-chords=Akkorde transponieren
+
+browser.dialog=Dateisammlungs-Browser
+browser.menu.file=Datei
+browser.open=\u00d6ffnen
+browser.exit=Beenden
+browser.menu.collection=Sammlung
+browser.menu.go=Gehe nach
+browser.collection.select=Sammlung ausw\u00E4hlen
+browser.collection.open=\u00d6ffnen
+browser.collection.remove=Entfernen
+browser.collection.close=Schlie\u00dfen
+browser.collection.new=Neu
+browser.go-root=Home
+browser.go-back=Zur\u00FCck
+browser.refresh=Aktualisieren
+browser.factory.fs.name=Dateisystem
+browser.collection.fs.name=Name
+browser.collection.fs.path=Ordner
+browser.collection.fs.editor-title=Sammlung im Dateisystem
+browser.collection.fs.editor-tip=W\u00E4hlen Sie den Ordner Ihrer Dateisammlung
+browser.collection.fs.invalid-path=Bitte w\u00E4hlen Sie einen g\u00FCltigen Ordner aus
+
+midi.port=MIDI Port
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=Nicht verf\u00FCgbar.
+plugin.column.name=Plugin Name
+plugin.column.enabled=Aktiviert
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Dateiwerkzeuge
+edit.items=\u00C4nderungswerkzeuge
+property.items=Eigenschaftswerkzeuge
+track.items=Spurwerkzeuge
+duration.items=L\u00E4ngenwerkzeuge
+beat.items=Notenwerkzeuge
+composition.items=Kompositionswerkzeuge
+repeat.items=Wiederholungswerkzeuge
+transport.items=Kontrollwerkzeuge
+marker.items=Markierungswerkzeuge
+insert.items=Einf\u00FCgungswerkzeuge
+layout.items=Layoutwerkzeuge
+view.items=Anzeigewerkzeuge
+effect.items=Effektwerkzeuge
+dynamic.items=Dynamikwerkzeuge
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Neue Datei
+action.file.open=Datei \u00F6ffnen
+action.file.open-url=URL \u00F6ffnen
+action.file.save=Speichern
+action.file.save-as=Speichern unter
+action.file.print=Drucken
+action.file.print-preview=Druckvorschau
+action.file.exit=TuxGuitar beenden
+action.edit.undo=R\u00FCckg\u00E4ngig
+action.edit.redo=Wiederherstellen
+action.edit.voice-1=Stimme 1 ausw\u00E4hlen
+action.edit.voice-2=Stimme 2 ausw\u00E4hlen
+action.composition.change-time-signature=Taktart \u00E4ndern
+action.composition.change-tempo=Tempo \u00E4ndern
+action.composition.change-info=Liedinformationen \u00E4ndern
+action.composition.change-clef=Notenschl\u00FCssel \u00E4ndern
+action.composition.change-key-signature=Change Key Signature
+action.composition.change-triplet-feel=Triolenfeeling \u00E4ndern
+action.view.layout-set-page=Zeige Seitenlayout
+action.view.layout-set-linear=Zeige lineares Layout
+action.view.layout-set-multitrack=Zeige Mehrspuransicht
+action.view.layout-set-score-enabled=Zeige Partitur
+action.view.layout-set-tablature-enabled=Zeige Tabulatur
+action.view.layout-set-compact=Zeige den kompakten Modus
+action.view.layout-set-chord-diagram-enabled=Akkorddiagramm aktivieren
+action.view.layout-set-chord-name-enabled=Akkordname aktivieren
+action.view.show-fretboard=Griffbret anzeigen
+action.view.show-piano=Klaviatur anzeigen
+action.view.show-matrix=Matrix Editor anzeigen
+action.view.show-mixer=Mixer anzeigen
+action.view.show-transport=Transportfenster anzeigen
+action.track.add=Spur hinzuf\u00FCgen
+action.track.remove=Spur entfernen
+action.track.clone=Spur duplizieren
+action.track.go-first=Zur ersten Spur gehen
+action.track.go-last=Zur letzten Spur gehen
+action.track.go-next=Zur n\u00E4chsten Spur gehen
+action.track.go-previous=Zur vorherigen Spur gehen
+action.track.lyrics=Liedtext der Spur editieren
+action.track.properties=Spureigenschaften \u00E4ndern
+action.track.move-down=Spur nach unten verschieben
+action.track.move-up=Spur nach oben verschieben
+action.measure.add=Takt hinzuf\u00FCgen
+action.measure.remove=Takt entfernen
+action.measure.copy=Takt kopieren
+action.measure.paste=Takt einf\u00FCgen
+action.measure.clean=Takt leeren
+action.measure.go-first=Zum ersten Takt springen
+action.measure.go-last=Zum letzten Takt springen
+action.measure.go-next=Zum n\u00E4chsten Takt springen
+action.measure.go-previous=Zum vorherigen Takt springen
+action.beat.general.remove-unused-voice=Ungenutzte Stimme entfernen
+action.beat.general.voice-up=Notenh\u00E4lse nach oben ausrichten
+action.beat.general.voice-down=Notenh\u00E4lse nach unten ausrichten
+action.beat.general.voice-auto=Notenh\u00E4lse automatisch ausrichten
+action.beat.general.set-stroke-up=Set Upstroke
+action.beat.general.set-stroke-down=Set Downstroke
+action.beat.general.move-left=Um einen Schlag nach links verschieben
+action.beat.general.move-right=Um einen Schlag nach links verschieben
+action.beat.general.move-custom=Benutzerdefiniert verschieben
+action.note.general.clean-beat=Schlag leeren
+action.note.general.decrement-semitone=Um Halbton vermindern
+action.note.general.increment-semitone=Um Halbton erh\u00F6hen
+action.note.general.shift-down=Um eine Saiten nach unten verschieben
+action.note.general.shift-up=Um eine Saiten nach oben verschieben
+action.note.general.tied=Gebundene Note
+action.note.duration.set-whole=Ganze Note
+action.note.duration.set-half=Halbe Note
+action.note.duration.set-quarter=Viertelnote
+action.note.duration.set-eighth=Achtelnote
+action.note.duration.set-sixteenth=Sechzehntelnote
+action.note.duration.set-thirty-second=32tel Note
+action.note.duration.set-sixty-fourth=64tel Note
+action.note.duration.change-dotted=Punktiert
+action.note.duration.change-double-dotted=Doppelt punktiert
+action.note.duration.change-division-type=Triole
+action.note.duration.decrement-duration=Dauer veringern
+action.note.duration.increment-duration=Dauer erh\u00F6hen
+action.note.effect.change-vibrato=Vibrato
+action.note.effect.change-bend=Bending
+action.note.effect.change-slide=Slide
+action.note.effect.change-hammer=Hammer-on/pull-off
+action.note.effect.change-accentuated=Akzentuiert
+action.note.effect.change-dead=Dead note
+action.note.effect.change-fade-in=Fade in
+action.note.effect.change-ghost=Ghost Note
+action.note.effect.change-grace=Vorschlagsnote
+action.note.effect.change-harmonic=Harmonic
+action.note.effect.change-heavy-accentuated=Stark akzentuiert
+action.note.effect.change-palm-mute=Abged\u00E4mpft
+action.note.effect.change-popping=Popping
+action.note.effect.change-slapping=Slapping
+action.note.effect.change-staccato=Staccato
+action.note.effect.change-tapping=Tapping
+action.note.effect.change-tremolo-bar=Tremolo bar
+action.note.effect.change-tremolo-picking=Tremolo picking
+action.note.effect.change-trill=Add/Remove Trill
+action.insert.open-repeat=Wiederholung \u00F6ffnen
+action.insert.close-repeat=Wiederholung schlie\u00dfen
+action.insert.repeat-alternative=Alternative Endungen
+action.insert.chord=Akkord einf\u00FCgen
+action.insert.text=Text einf\u00FCgen
+action.marker.add=Markierung einf\u00FCgen
+action.marker.go-next=Zur n\u00E4chsten Markierung gehen
+action.marker.go-previous=Zur vorherigen Markierung gehen
+action.transport.play=Wiedergabe starten
+action.transport.stop=Wiedergabe stoppen
+action.transport.mode=Abspielmodus
+action.transport.metronome=Metrononom
+action.transport.set-loop-start=Anfang der Schleifen aktivieren
+action.transport.set-loop-end=Ende der Schleifen aktivieren
+action.tools.browser=Dateisammlungs-Browser
+action.tools.transpose=Noten transponieren
+action.settings.configure=Einstellungen
+action.help.doc=Hilfe
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_el.properties b/TuxGuitar-testing/platform-all/share/lang/messages_el.properties
new file mode 100644
index 0000000..31f2c5e
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_el.properties
@@ -0,0 +1,685 @@
+ok=\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9
+cancel=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7
+yes=\u039d\u03b1\u03b9
+no=\u038c\u03c7\u03b9
+add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7
+edit=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1
+remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+save=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
+exit=\u0388\u03be\u03bf\u03b4\u03bf\u03c2
+close=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf
+choose=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
+color=\u03a7\u03c1\u03ce\u03bc\u03b1
+title=\u03a4\u03af\u03c4\u03bb\u03bf\u03c2
+go=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5
+warning=\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
+error=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1
+plugins=Plugins
+options=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2
+defaults=\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1
+clean=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2
+rename=\u039c\u03b5\u03c4\u03bf\u03bd\u03bf\u03bc\u03b1\u03c3\u03af\u03b1
+fret=Fret
+position=\u0398\u03ad\u03c3\u03b7
+name=\u038c\u03bd\u03bf\u03bc\u03b1
+author=\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1\u03c2
+version=\u0388\u03ba\u03b4\u03bf\u03c3\u03b7
+description=\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae
+info=\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2
+configure=\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b5
+url=URL
+
+file=\u0391\u03c1\u03c7\u03b5\u03af\u03bf
+file.new=\u039d\u03ad\u03bf
+file.open=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1
+file.save=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
+file.save-as=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03a9\u03c2
+file.save-changes-question=\u03a4\u03bf \u03c4\u03c1\u03b1\u03b3\u03bf\u03cd\u03b4\u03b9 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9 \u03bc\u03b7 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2.\n\u0395\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\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;
+file.exit=\u0388\u03be\u03bf\u03b4\u03bf\u03c2
+file.export=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae
+file.export-midi=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae MIDI
+file.export-pdf=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae PDF
+file.print=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+file.print-preview=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u03b5\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7\u03c2
+file.import=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae
+file.import-midi=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae MIDI
+file.export-ascii=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae ASCII
+file.history=\u0399\u03c3\u03c4\u03bf\u03c1\u03b9\u03ba\u03cc
+file.open-url=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 URL
+file.open.error=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03bf \u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1: {0}
+file.save.error=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03b7 \u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7: {0}
+file.import.error=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03b7 \u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae: {0}
+file.export.error=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03b7 \u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae: {0}
+file.overwrite-question=\u0391\u03c5\u03c4\u03cc\u03c2 \u03bf \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7. \u0395\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03bf\u03bd \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5;
+
+edit.menu=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1
+edit.undo=\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+edit.redo=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1\u03c2
+edit.copy=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae
+edit.from=\u0391\u03c0\u03cc
+edit.to=\u0388\u03c9\u03c2
+edit.all-tracks=\u038c\u03bb\u03b1 \u03c4\u03b1 \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9\u03b1
+edit.paste=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2
+edit.paste.count=\u039c\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae\u03c2 \u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd
+edit.paste.replace-mode=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5\u03c5
+edit.paste.insert-mode=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03b5 \u03bd\u03ad\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+edit.delete=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae
+edit.cut=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae
+edit.mouse-mode-selection=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae\u03c2
+edit.mouse-mode-edition=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1\u03c2 \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+edit.not-natural-key=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0394\u03af\u03b5\u03c3\u03b7\u03c2/\u038e\u03c6\u03b5\u03c3\u03b7\u03c2
+edit.voice-1=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a6\u03c9\u03bd\u03ae\u03c2 1
+edit.voice-2=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a6\u03c9\u03bd\u03ae\u03c2 2
+
+view=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae
+view.layout=\u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7
+view.layout.page=\u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7 \u03a3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2
+view.layout.linear=\u0393\u03c1\u03b1\u03bc\u03bc\u03b9\u03ba\u03ae \u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7
+view.layout.compact=\u03a3\u03c5\u03bc\u03c0\u03b1\u03b3\u03ae\u03c2
+view.layout.multitrack=\u03a0\u03bf\u03bb\u03c5\u03ba\u03ac\u03bd\u03b1\u03bb\u03b7
+view.layout.chord-style=\u03a3\u03c4\u03c5\u03bb \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+view.layout.chord-name=\u039f\u03bd\u03bf\u03bc\u03b1\u03c3\u03af\u03b1 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+view.layout.chord-diagram=\u0394\u03b9\u03ac\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+view.layout.score-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+view.layout.tablature-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+view.show-mixer=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u039c\u03af\u03ba\u03c4\u03b7
+view.show-fretboard=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03c3\u03c4\u03b9\u03ad\u03c1\u03b1\u03c2
+view.show-piano=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b9\u03ac\u03bd\u03bf\u03c5
+view.show-matrix=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03af\u03bd\u03b1\u03ba\u03b1
+view.show-transport=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1
+
+fretboard.direction=\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7
+fretboard.right-mode=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03b1\u03c0\u03cc \u03b4\u03b5\u03be\u03b9\u03ac
+fretboard.left-mode=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03b1\u03c0\u03cc \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac
+fretboard.background-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a6\u03cc\u03bd\u03c4\u03bf\u03c5
+fretboard.display-note-text=Display Note \u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
+fretboard.display-scale-text=Display Scale \u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
+fretboard.font=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
+fretboard.fretpoint-color=Fret \u03a7\u03c1\u03ce\u03bc\u03b1
+fretboard.note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2
+fretboard.scale-note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2 \u039d\u03cc\u03c4\u03b1\u03c2
+fretboard.settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03a4\u03b1\u03c3\u03c4\u03b9\u03ad\u03c1\u03b1\u03c2
+fretboard.string-color=String \u03a7\u03c1\u03ce\u03bc\u03b1
+fretboard.settings.options=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2
+
+piano.editor=\u03a3\u03c5\u03bd\u03c4\u03ac\u03ba\u03c4\u03b7\u03c2 \u03a0\u03b9\u03ac\u03bd\u03bf\u03c5
+piano.natural-key-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a6\u03c5\u03c3\u03b9\u03ba\u03bf\u03cd \u039a\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd
+piano.not-natural-key-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a6\u03b1\u03bd\u03c4\u03b1\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd \u039a\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd
+piano.note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2
+piano.scale-note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2 \u039d\u03cc\u03c4\u03b1\u03c2
+piano.settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03a0\u03b9\u03ac\u03bd\u03bf\u03c5
+
+matrix.editor=\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a3\u03cd\u03bd\u03c4\u03b1\u03be\u03b7\u03c2
+matrix.grids=\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03a0\u03bb\u03b5\u03b3\u03bc\u03ac\u03c4\u03c9\u03bd
+matrix.border-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a0\u03bb\u03b1\u03b9\u03c3\u03af\u03bf\u03c5
+matrix.font=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
+matrix.foreground-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a0\u03c1\u03bf\u03c3\u03ba\u03b7\u03bd\u03af\u03bf\u03c5
+matrix.line-color-1=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039c\u03bf\u03bd\u03ae\u03c2 \u0393\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2
+matrix.line-color-2=\u03a7\u03c1\u03ce\u03bc\u03b1 \u0396\u03c5\u03b3\u03ae\u03c2 \u0393\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2
+matrix.line-color-over=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a0\u03bf\u03bd\u03c4\u03b9\u03ba\u03bf\u03cd \u03c0\u03ac\u03bd\u03c9 \u03b1\u03c0\u03cc \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae
+matrix.note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2
+matrix.play-note-color=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03a7\u03c1\u03c9\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7\u03c2 \u039d\u03cc\u03c4\u03b1\u03c2
+matrix.position-color=\u0398\u03ad\u03c3\u03b7 \u03a7\u03c1\u03ce\u03bc\u03b1
+matrix.settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03a0\u03af\u03bd\u03b1\u03ba\u03b1
+
+composition=\u03a3\u03cd\u03bd\u03b8\u03b5\u03c3\u03b7
+composition.timesignature=\u03a1\u03c5\u03b8\u03bc\u03cc\u03c2
+composition.timesignature.Numerator=\u0391\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03ae\u03c2
+composition.timesignature.denominator=\u03a0\u03b1\u03c1\u03bf\u03bd\u03bf\u03bc\u03b1\u03c3\u03c4\u03ae\u03c2
+composition.timesignature.to-the-end=\u03a3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+composition.tempo=\u03a4\u03ad\u03bc\u03c0\u03bf
+composition.tempo-percent=\u03a4\u03ad\u03bc\u03c0\u03bf
+composition.tempo.invalid=\u0386\u03ba\u03c5\u03c1\u03bf \u03a4\u03ad\u03bc\u03c0\u03bf
+composition.tempo.start-to-end=\u0395\u03c6\u03ac\u03c1\u03bc\u03bf\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c4\u03ad\u03bc\u03c0\u03bf \u03c3\u03b5 \u03bf\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03bf \u03c4\u03bf \u03c4\u03c1\u03b1\u03b3\u03bf\u03cd\u03b4\u03b9
+composition.tempo.position-to-end=\u0395\u03c6\u03ac\u03c1\u03bc\u03bf\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c4\u03ad\u03bc\u03c0\u03bf \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+composition.tempo.position-to-next=\u0395\u03c6\u03ac\u03c1\u03bc\u03bf\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c4\u03ad\u03bc\u03c0\u03bf \u03c3\u03c4\u03bf \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03c3\u03b7\u03bc\u03ac\u03b4\u03b9 \u03c4\u03ad\u03bc\u03c0\u03bf
+composition.properties=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2
+composition.name=\u038c\u03bd\u03bf\u03bc\u03b1
+composition.artist=\u039a\u03b1\u03bb\u03bb\u03b9\u03c4\u03ad\u03c7\u03bd\u03b7\u03c2
+composition.album=\u0386\u03bb\u03bc\u03c0\u03bf\u03c5\u03bc
+composition.author=\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1\u03c2
+composition.date=\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1
+composition.copyright=Copyright
+composition.writer=\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03cc\u03c2 \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+composition.transcriber=\u039c\u03b5\u03c4\u03b1\u03b3\u03c1\u03ac\u03c6\u03b7\u03ba\u03b5 \u03b1\u03c0\u03cc
+composition.comments=\u03a3\u03c7\u03cc\u03bb\u03b9\u03b1
+composition.tripletfeel=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+composition.clef=\u039a\u03bb\u03b5\u03b9\u03b4\u03af
+composition.clef.treble=\u03a3\u03bf\u03c0\u03c1\u03ac\u03bd\u03bf\u03c2 (Treble)
+composition.clef.bass=\u039c\u03c0\u03ac\u03c3\u03bf (Bass)
+composition.clef.tenor=\u03a4\u03b5\u03bd\u03cc\u03c1\u03bf\u03c2 (Tenor)
+composition.clef.alto=\u039a\u03bf\u03bd\u03c4\u03c1\u03ac\u03bb\u03c4\u03bf (Alto)
+composition.clef.to-the-end=\u0395\u03c6\u03ac\u03c1\u03bc\u03bf\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+composition.keysignature=\u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1
+composition.keysignature.natural=\u03a6\u03c5\u03c3\u03b9\u03ba\u03ae
+composition.keysignature.sharp-1=1 \u0394\u03af\u03b5\u03c3\u03b7
+composition.keysignature.sharp-2=2 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-3=3 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-4=4 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-5=5 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-6=6 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-7=7 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-1=1 \u038e\u03c6\u03b5\u03c3\u03b7
+composition.keysignature.flat-2=2 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-3=3 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-4=4 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-5=5 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-6=6 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-7=7 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.to-the-end=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03b1\u03c5\u03c4\u03ae\u03c2 \u03c4\u03b7\u03c2 \u03ba\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2 \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+composition.tripletfeel=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+composition.tripletfeel.none=\u03a7\u03c9\u03c1\u03af\u03c2 Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+composition.tripletfeel.eighth=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5 8\u03bf\u03c5
+composition.tripletfeel.sixteenth=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5 16\u03bf\u03c5
+composition.tripletfeel.to-the-end=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+
+help=\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1
+help.help=\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1
+help.doc=\u03a4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7 (Documentation)
+help.about=\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03bf TuxGuitar
+help.about.license=\u0386\u03b4\u03b5\u03b9\u03b1
+help.about.authors=\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03b5\u03af\u03c2
+help.about.description=\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae
+
+track=\u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.number=N�
+track.name=\u038c\u03bd\u03bf\u03bc\u03b1
+track.color=\u03a7\u03c1\u03ce\u03bc\u03b1
+track.first=\u03a0\u03c1\u03ce\u03c4\u03bf \u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.last=\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.previous=\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.next=\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+track.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+track.clone=\u039a\u03bb\u03c9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+track.move-up=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03c0\u03ac\u03bd\u03c9
+track.move-down=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03ba\u03ac\u03c4\u03c9
+track.instrument=\u038c\u03c1\u03b3\u03b1\u03bd\u03bf 
+track.properties=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2
+track.properties.general=\u0393\u03b5\u03bd\u03b9\u03ba\u03ac
+track.name.default-percussion-name=\u039a\u03c1\u03bf\u03c5\u03c3\u03c4\u03ac
+track.lyrics=\u03a3\u03c4\u03af\u03c7\u03bf\u03b9
+track.solo=Solo
+track.mute=Mute
+
+lyric.editor=\u03a3\u03c4\u03b9\u03c7\u03bf\u03b3\u03c1\u03ac\u03c6\u03bf\u03c2 
+
+measure=\u039c\u03ad\u03c4\u03c1\u03bf
+measure.first=\u03a0\u03c1\u03ce\u03c4\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+measure.last=\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+measure.previous=\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+measure.next=\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+measure.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+measure.add.count=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u039c\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae
+measure.add-before-current-position=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 \u03c0\u03c1\u03b9\u03bd \u03b1\u03c0\u03cc \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 \u03b8\u03ad\u03c3\u03b7
+measure.add-after-current-position=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 \u03bc\u03b5\u03c4\u03ac \u03b1\u03c0\u03cc \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 \u03b8\u03ad\u03c3\u03b7
+measure.add-at-end=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+measure.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+measure.copy=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+measure.paste=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+measure.clean=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+
+duration=\u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1
+duration.whole=\u039f\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03bf
+duration.half=\u039c\u03b9\u03c3\u03cc
+duration.quarter=\u03a4\u03ad\u03c4\u03b1\u03c1\u03c4\u03bf
+duration.eighth=\u038c\u03b3\u03b4\u03bf\u03bf
+duration.sixteenth=\u0394\u03ad\u03ba\u03b1\u03c4\u03bf \u03ad\u03ba\u03c4\u03bf
+duration.thirtysecond=\u03a4\u03c1\u03b9\u03b1\u03ba\u03bf\u03c3\u03c4\u03cc \u03b4\u03b5\u03cd\u03c4\u03b5\u03c1\u03bf
+duration.sixtyfourth=\u0395\u03be\u03b7\u03ba\u03bf\u03c3\u03c4\u03cc \u03c4\u03ad\u03c4\u03b1\u03c1\u03c4\u03bf
+duration.dotted=\u03a0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf
+duration.doubledotted=\u0394\u03b9\u03c0\u03bb\u03cc \u03a0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf
+duration.division-type=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+
+dynamic=\u0394\u03c5\u03bd\u03b1\u03bc\u03b9\u03ba\u03ad\u03c2
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=\u0395\u03c6\u03ad
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Dead Note
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Ghost Note
+effects.accentuatednote=Accentuated Note
+effects.heavyaccentuatednote=Heavy Accentuated Note
+effects.harmonic=Harmonic
+effects.grace=Grace Note
+effects.grace-editor=Grace Note Editor
+effects.grace.before-beat=Before beat
+effects.grace.on-beat=On beat
+effects.grace.transition=Transition
+effects.grace.transition-none=None
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Trill Editor
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Left Hand
+effects.harmonic.tapped.right-hand=Right Hand
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+
+bend.editor=Bend Editor
+bend.bend=Bend
+bend.bend-release=Bend/Release
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1\u03c2
+transport.start=\u0388\u03bd\u03b1\u03c1\u03be\u03b7
+transport.stop=\u039b\u03ae\u03be\u03b7
+transport.pause=\u03a0\u03b1\u03cd\u03c3\u03b7
+transport.first=\u03a0\u03c1\u03ce\u03c4\u03bf
+transport.last=\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf
+transport.previous=\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf
+transport.next=\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf
+transport.metronome=\u039c\u03b5\u03c4\u03c1\u03bf\u03bd\u03cc\u03bc\u03bf\u03c2
+transport.mode=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2
+transport.mode.simple=\u0391\u03c0\u03bb\u03ae \u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1
+transport.mode.simple.tempo-percent=\u0395\u03c0\u03af \u03c4\u03bf\u03b9\u03c2 \u03b5\u03ba\u03b1\u03c4\u03cc \u03c4\u03bf\u03c5 \u03c4\u03ad\u03bc\u03c0\u03bf
+transport.mode.simple.loop=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03bc\u03b5 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+transport.mode.trainer=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03a0\u03c1\u03bf\u03c0\u03cc\u03bd\u03b7\u03c3\u03b7\u03c2
+transport.mode.trainer.increment-description=\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03ba\u03b1\u03c4\u03ac
+transport.mode.loop-range=\u0395\u03cd\u03c1\u03bf\u03c2 \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+transport.mode.loop-range.from=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03b1\u03c0\u03cc \u03c4\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+transport.mode.loop-range.from-default=\u0391\u03c0\u03cc \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03ae
+transport.mode.loop-range.to=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03c4\u03bf\u03c5 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+transport.mode.loop-range.to-default=\u03a3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+transport.set-loop-start=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03ae \u03c4\u03b7\u03c2 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+transport.set-loop-end=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+
+instruments.volume=Gain
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=\u0388\u03bd\u03c4\u03b1\u03c3\u03b7
+instrument.balance=Balance
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Free
+instrument.link=Link
+
+
+repeat.open=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+repeat.close=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+repeat.alternative=\u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03b9\u03c2 \u03bc\u03b5 \u03b5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2
+repeat.alternative.editor=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03c9\u03bd \u03bc\u03b5 \u03b5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2
+repetitions=\u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03b9\u03c2
+repeat.number-of-repetitions=\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03c9\u03bd
+
+beat=Beat
+beat.clean=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 Beat
+beat.voice.remove-unused=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039c\u03b7 \u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7\u03c2 \u03a6\u03c9\u03bd\u03ae\u03c2
+beat.voice-up=Stems Up
+beat.voice-down=Stems Down
+beat.voice-auto=Auto Stems
+beat.stroke=Stroke
+beat.stroke-up=Upstroke
+beat.stroke-down=Downstroke
+beat.move-left=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b5 \u0388\u03bd\u03b1 Beat \u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac
+beat.move-right=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b5 \u0388\u03bd\u03b1 Beat \u0394\u03b5\u03be\u03b9\u03ac
+beat.move-custom=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5 Beat
+beat.move-custom.dialog.title=\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03b7 \u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2
+beat.move-custom.dialog.direction-tip=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b7 \u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7
+beat.move-custom.dialog.move-1.tip=\u039c\u03b5\u03af\u03b6\u03bf\u03bd \u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2
+beat.move-custom.dialog.move-2.tip=\u039a\u03bf\u03bc\u03c8\u03ae \u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2
+beat.move-custom.dialog.direction=\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7
+beat.move-custom.dialog.direction.right=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u0394\u03b5\u03be\u03b9\u03ac
+beat.move-custom.dialog.direction.left=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac
+beat.move-custom.dialog.count=\u039c\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae\u03c2
+beat.move-custom.dialog.duration=\u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1
+beat.move-custom.dialog.duration.type=\u03a0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf/\u0394\u03b9\u03c0\u03bb\u03cc-\u03a0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf
+beat.move-custom.dialog.duration.type.normal=\u039a\u03b1\u03b8\u03cc\u03bb\u03bf\u03c5
+beat.move-custom.dialog.duration.division-type=\u03a4\u03cd\u03c0\u03bf\u03c2 \u0394\u03b9\u03b1\u03af\u03c1\u03b5\u03c3\u03b7\u03c2
+beat.move-custom.dialog.duration.division-type.normal=\u039a\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03cc (Tuplet)
+
+note=\u039d\u03cc\u03c4\u03b1
+note.semitone-up=\u0397\u03bc\u03b9\u03c4\u03cc\u03bd\u03b9\u03bf \u03c0\u03ac\u03bd\u03c9
+note.semitone-down=\u0397\u03bc\u03b9\u03c4\u03cc\u03bd\u03b9\u03bf \u03ba\u03ac\u03c4\u03c9
+note.shift-up=\u039f\u03bb\u03af\u03c3\u03b8\u03b7\u03c3\u03b7 \u03c0\u03ac\u03bd\u03c9
+note.shift-down=\u039f\u03bb\u03af\u03c3\u03b8\u03b7\u03c3\u03b7 \u03ba\u03ac\u03c4\u03c9
+note.tiednote=\u03a3\u03cd\u03b6\u03b5\u03c5\u03be\u03b7
+note.deadnote=Dead Note
+
+insert.chord=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+chord.editor=\u03a3\u03c5\u03bd\u03b8\u03ad\u03c4\u03b7\u03c2 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+chord=\u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1
+chord.name=\u038c\u03bd\u03bf\u03bc\u03b1
+chord.bass=\u039c\u03c0\u03ac\u03c3\u03bf
+chord.custom=\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03b7 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1
+chord.custom.name-empty-error=\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2 \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03ba\u03b5\u03bd\u03cc.
+chord.custom.name-exist-error=\u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7.
+chord.settings.tip=\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03b5\u03c2 \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2
+chord.settings.type=\u03a4\u03cd\u03c0\u03bf\u03c2
+chord.settings.type.most-common=\u03a0\u03b9\u03bf \u03c3\u03c5\u03c7\u03bd\u03ac
+chord.settings.type.inversions=\u0391\u03bd\u03c4\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ad\u03c2
+chord.settings.type.close-voiced=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf Voiced
+chord.settings.type.open-voiced=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 Voiced
+chord.settings.open-chords=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 Chords
+chord.settings.chords-to-display=\u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b5\u03c2 \u03c0\u03c1\u03bf\u03c2 \u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae
+chord.settings.search-frets=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 Frets
+chord.settings.minimum-fret=\u0395\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf
+chord.settings.maximum-fret=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf
+
+instrument=\u038c\u03c1\u03b3\u03b1\u03bd\u03bf
+instrument.instrument=\u038c\u03c1\u03b3\u03b1\u03bd\u03bf
+instrument.percussion-track=\u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9 \u039a\u03c1\u03bf\u03c5\u03c3\u03c4\u03ce\u03bd
+
+tuning=\u039a\u03bf\u03cd\u03c1\u03b4\u03b9\u03c3\u03bc\u03b1
+tuning.offset=\u0391\u03bd\u03c4\u03b9\u03c3\u03c4\u03ac\u03b8\u03bc\u03b9\u03c3\u03bc\u03b1
+tuning.strings=\u03a7\u03bf\u03c1\u03b4\u03ad\u03c2
+tuning.strings.transpose=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03b5\u03c0\u03b7\u03c1\u03b5\u03b1\u03c3\u03bc\u03ad\u03bd\u03c9\u03bd \u03bd\u03cc\u03c4\u03c9\u03bd.
+tuning.strings.transpose.try-keep-strings=\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b5\u03b9\u03b1 \u03b4\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7\u03c2 \u03c4\u03c9\u03bd \u03bd\u03cc\u03c4\u03c9\u03bd \u03c3\u03c4\u03b7\u03bd \u03af\u03b4\u03b9\u03b1 \u03c7\u03bf\u03c1\u03b4\u03ae
+tuning.strings.transpose.apply-to-chords=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+
+language=Language
+
+choose-color=\u0395\u03c0\u03ad\u03bb\u03b5\u03be\u03b5 \u03ad\u03bd\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1
+
+settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2
+settings.config=\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b5 TuxGuitar
+settings.config.language=\u0393\u03bb\u03ce\u03c3\u03c3\u03b1
+settings.config.language.choose=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u0393\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2
+settings.config.styles=\u03a3\u03c4\u03c5\u03bb
+settings.config.styles.general=\u0393\u03b5\u03bd\u03b9\u03ba\u03ac \u03a3\u03c4\u03c5\u03bb
+settings.config.styles.printer=\u03a3\u03c4\u03c5\u03bb \u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7\u03c2
+settings.config.styles.font.default=\u03A0\u03C1\u03BF\u03BA\u03B1\u03B8\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B7 \u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
+settings.config.styles.font.note=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u039D\u03CC\u03C4\u03B1\u03C2
+settings.config.styles.font.lyric=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03A3\u03C4\u03AF\u03C7\u03C9\u03BD
+settings.config.styles.font.text=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u039A\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
+settings.config.styles.font.time-signature=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03A1\u03C5\u03B8\u03BC\u03BF\u03CD
+settings.config.styles.font.printer-default=\u03A0\u03C1\u03BF\u03BA\u03B1\u03B8\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B7 \u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u0395\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2
+settings.config.styles.font.printer-note=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u0395\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2 \u039D\u03CC\u03C4\u03B1\u03C2
+settings.config.styles.font.printer-time-signature=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u0395\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2 \u03A1\u03C5\u03B8\u03BC\u03BF\u03CD
+settings.config.styles.color.score-note=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2 \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+settings.config.styles.color.tab-note=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2 \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+settings.config.styles.color.play-note=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03a7\u03c1\u03c9\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7\u03c2 \u039d\u03cc\u03c4\u03b1\u03c2
+settings.config.apply-changes-question=\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03c4\u03c9\u03bd \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd \u03c4\u03ce\u03c1\u03b1;
+settings.config.sound=\u0389\u03c7\u03bf\u03c2
+settings.config.main=\u0393\u03b5\u03bd\u03b9\u03ba\u03ac
+settings.config.main.window-title=\u03a4\u03af\u03c4\u03bb\u03bf\u03c2 \u03a0\u03b1\u03c1\u03b1\u03b8\u03cd\u03c1\u03bf\u03c5
+settings.config.main.window-title.help=\u039f\u03b9 \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03b5\u03c2 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ad\u03c2 \u03b8\u03b1 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03b1\u03b8\u03bf\u03cd\u03bd \u03c3\u03c4\u03bf \u03c4\u03af\u03c4\u03bb\u03bf \u03c4\u03bf\u03c5 \u03c0\u03b1\u03c1\u03b1\u03b8\u03cd\u03c1\u03bf\u03c5:
+settings.config.main.window-title.var.description.appname=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2: TuxGuitar
+settings.config.main.window-title.var.description.appversion=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03b7\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03c4\u03bf\u03c5 TuxGuitar.
+settings.config.main.window-title.var.description.filename=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03bd\u03bf\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5
+settings.config.main.window-title.var.description.filepath=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03b7 \u03b8\u03ad\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b1\u03bd\u03bf\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5
+settings.config.main.window-title.var.description.songname=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+settings.config.main.window-title.var.description.songauthor=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03c3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1 \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+settings.config.main.window-title.var.description.songalbum=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03ac\u03bb\u03bc\u03c0\u03bf\u03c5\u03bc \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+settings.config.main.window-title.var.description.songartist=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03ba\u03b1\u03bb\u03bb\u03b9\u03c4\u03ad\u03c7\u03bd\u03b7 \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+settings.config.main.options=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2
+settings.config.main.splash-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03b9\u03ba\u03ae\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2 \u03c3\u03c4\u03b7\u03bd \u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7
+settings.config.main.table.auto-size.enabled=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7\u03c2 \u03c0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2 \u03bc\u03b5\u03b3\u03ad\u03b8\u03bf\u03c5\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1
+settings.config.styles.color.lines=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03bf\u03c1\u03b9\u03b6\u03bf\u03bd\u03c4\u03af\u03c9\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd
+settings.config.toolbars=\u0393\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2 \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd
+settings.config.toolbars.tip=\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b5 \u03c4\u03b9\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2 \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd \u03c3\u03bf\u03c5
+settings.config.toolbars.list=\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2 \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd
+settings.config.toolbars.move-up=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03c0\u03ac\u03bd\u03c9
+settings.config.toolbars.move-down=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03ba\u03ac\u03c4\u03c9
+settings.config.skin=Skins
+settings.config.skin.choose=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c4\u03bf\u03c5 skin \u03c3\u03bf\u03c5
+settings.keybindings=\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b5 \u03c0\u03b1\u03c4\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ce\u03bd
+
+key-bindings-editor=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 \u03b4\u03ad\u03c3\u03bc\u03b5\u03c5\u03c3\u03b7\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ce\u03bd
+key-bindings-editor-action-select=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bc\u03b9\u03b1\u03c2 \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1\u03c2
+key-bindings-editor-action-column=\u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b5\u03c2
+key-bindings-editor-shortcut-column=\u03a0\u03bb\u03ae\u03ba\u03c4\u03c1\u03b1
+key-bindings-editor-push-a-key=\u03a0\u03ac\u03c4\u03b1 \u03ad\u03bd\u03b1 \u03ba\u03bf\u03c5\u03bc\u03c0\u03af
+key-bindings-editor-save-question=\u03a5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03bc\u03b7 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2, \u03b5\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03ad\u03be\u03bf\u03b4\u03bf \u03c7\u03c9\u03c1\u03af\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7;
+key-bindings-editor-override=\u0397 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03ae\u03b4\u03b7! \u0395\u03af\u03c3\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03bf\u03b9 \u03c0\u03c9\u03c2 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03b7 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c3\u03b5\u03c4\u03b5;
+
+print.print=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+print.dialog=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+print.service=\u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1
+print.service.name=\u038c\u03bd\u03bf\u03bc\u03b1
+print.service.status=\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7
+print.service.type=\u03a4\u03cd\u03c0\u03bf\u03c2
+print.service.info=\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2
+print.range=\u0395\u03cd\u03c1\u03bf\u03c2
+print.range.all-pages=\u038c\u03bb\u03bf
+print.range.pages=\u03a3\u03b5\u03bb\u03af\u03b4\u03b5\u03c2
+print.range.pages-to=\u03a9\u03c2
+print.copies=\u0391\u03bd\u03c4\u03af\u03b3\u03c1\u03b1\u03c6\u03b1
+print.copies-number=\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03c9\u03bd
+print.print-to-file=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf
+print.file-chooser=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
+print-header.default-song-name=\u03a7\u03c9\u03c1\u03af\u03c2 \u03c4\u03af\u03c4\u03bb\u03bf
+print-header.default-song-author=\u0391\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf
+
+print.preview=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+print.preview.page-of=\u03c4\u03bf\u03c5
+
+marker=\u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+marker.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03a3\u03b7\u03bc\u03b1\u03b4\u03b9\u03bf\u03cd
+marker.list=\u039b\u03af\u03c3\u03c4\u03b1 \u03a3\u03b7\u03bc\u03b1\u03b4\u03b9\u03ce\u03bd
+marker.first=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03a0\u03c1\u03ce\u03c4\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+marker.last=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+marker.next=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+marker.previous=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+
+export.tablature-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+export.score-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+export.chord-name-enabled=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03bf\u03bd\u03bf\u03bc\u03ac\u03c4\u03c9\u03bd \u03c4\u03c9\u03bd \u03c3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+export.chord-diagram-enabled=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd \u03c4\u03c9\u03bd \u03c3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+export.black-and-white=\u0391\u03c3\u03c0\u03c1\u03cc\u03bc\u03b1\u03c5\u03c1\u03b7 \u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1
+
+scale=\u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1
+scale.list=\u039b\u03af\u03c3\u03c4\u03b1 \u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2
+
+text.insert=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+text.editor=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+text.text=\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
+
+tools=\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1
+tools.scale=\u039b\u03af\u03c3\u03c4\u03b1 \u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2
+tools.browser=\u03a0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2
+tools.plugins=Plugins
+tools.shortcuts=\u03a3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2
+tools.settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2
+
+tools.transpose=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac
+tools.transpose.semitones=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u0397\u03bc\u03b9\u03c4\u03bf\u03bd\u03af\u03c9\u03bd
+tools.transpose.apply-to-track=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03bc\u03ad\u03c4\u03c1\u03c9\u03bd
+tools.transpose.apply-to-measure=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03bc\u03cc\u03bd\u03bf \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+tools.transpose.apply-to-all-tracks=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03c3\u03b5 \u03cc\u03bb\u03b1 \u03c4\u03b1 \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9\u03b1
+tools.transpose.try-keep-strings=\u0394\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03c4\u03c9\u03bd \u03bd\u03cc\u03c4\u03c9\u03bd \u03c3\u03c4\u03b7\u03bd \u03af\u03b4\u03b9\u03b1 \u03c7\u03bf\u03c1\u03b4\u03ae \u03cc\u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc
+tools.transpose.apply-to-chords=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+
+browser.dialog=\u03a0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2
+browser.menu.file=\u0391\u03c1\u03c7\u03b5\u03af\u03bf
+browser.open=\u0386\u03bd\u03bf\u03b9\u03be\u03b5
+browser.exit=\u0388\u03be\u03bf\u03b4\u03bf\u03c2
+browser.menu.collection=\u03a3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ae
+browser.menu.go=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5
+browser.collection.select=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ae\u03c2
+browser.collection.open=\u0386\u03bd\u03bf\u03b9\u03be\u03b5
+browser.collection.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+browser.collection.close=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf
+browser.collection.new=\u039d\u03ad\u03bf
+browser.go-root=\u0391\u03c1\u03c7\u03b9\u03ba\u03ae
+browser.go-back=\u03a0\u03af\u03c3\u03c9
+browser.refresh=\u0391\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7
+browser.factory.fs.name=\u0391\u03c1\u03c7\u03b5\u03af\u03bf \u03a3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2
+browser.collection.fs.name=\u038c\u03bd\u03bf\u03bc\u03b1
+browser.collection.fs.path=\u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2
+browser.collection.fs.editor-title=\u0391\u03c1\u03c7\u03b5\u03af\u03bf \u03a3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ae\u03c2 \u03a3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2
+browser.collection.fs.editor-tip=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c4\u03bf \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ae\u03c2 \u03c3\u03b1\u03c2
+browser.collection.fs.invalid-path=\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce, \u03b4\u03b9\u03b1\u03bb\u03ad\u03be\u03c4\u03b5 \u03ad\u03bd\u03b1\u03bd \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf
+
+midi.port=\u0398\u03cd\u03c1\u03b1 MIDI
+midi.sequencer=\u0394\u03b9\u03b1\u03b4\u03bf\u03c7\u03ad\u03b1\u03c2 MIDI
+
+plugin.unknown-value=\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf.
+plugin.column.name=Plugin \u038c\u03bd\u03bf\u03bc\u03b1
+plugin.column.enabled=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=\u0391\u03c1\u03c7\u03b5\u03af\u03bf \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03b1
+edit.items=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+property.items=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+track.items=\u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+duration.items=\u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+beat.items=Beat \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+composition.items=\u03a3\u03cd\u03bd\u03b8\u03b5\u03c3\u03b7 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+repeat.items=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+transport.items=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1\u03c2 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+marker.items=\u03a3\u03b7\u03bc\u03ac\u03b4\u03b5\u03bc\u03b1 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+insert.items=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+layout.items=\u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+view.items=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+effect.items=\u0395\u03c6\u03ad \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+dynamic.items=\u0394\u03c5\u03bd\u03b1\u03bc\u03b9\u03ba\u03ad\u03c2 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03b1
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=\u039d\u03ad\u03bf \u0391\u03c1\u03c7\u03b5\u03af\u03bf
+action.file.open=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 \u0391\u03c1\u03c7\u03b5\u03af\u03bf
+action.file.open-url=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 URL
+action.file.save=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
+action.file.save-as=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03a9\u03c2
+action.file.print=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+action.file.print-preview=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7\u03c2
+action.file.exit=\u0388\u03be\u03bf\u03b4\u03bf\u03c2 TuxGuitar
+action.edit.undo=\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+action.edit.redo=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+action.edit.voice-1=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a6\u03c9\u03bd\u03ae\u03c2 1
+action.edit.voice-2=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a6\u03c9\u03bd\u03ae\u03c2 2
+action.composition.change-time-signature=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03a1\u03c5\u03b8\u03bc\u03bf\u03cd
+action.composition.change-tempo=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03a4\u03ad\u03bc\u03c0\u03bf
+action.composition.change-info=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03b9\u03ce\u03bd \u03a4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+action.composition.change-clef=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u039a\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd
+action.composition.change-key-signature=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03a1\u03c5\u03b8\u03bc\u03bf\u03cd
+action.composition.change-triplet-feel=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03c4\u03bf feeling \u03c4\u03bf\u03c5 \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+action.view.layout-set-page=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7\u03c2 \u03a3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2
+action.view.layout-set-linear=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0393\u03c1\u03b1\u03bc\u03bc\u03b9\u03ba\u03ae\u03c2 \u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7\u03c2
+action.view.layout-set-multitrack=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03bf\u03bb\u03c5\u03ba\u03ac\u03bd\u03b1\u03bb\u03b7\u03c2 \u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2
+action.view.layout-set-score-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+action.view.layout-set-tablature-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+action.view.layout-set-compact=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a3\u03c5\u03bc\u03c0\u03b1\u03b3\u03bf\u03cd\u03c2 \u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2
+action.view.layout-set-chord-diagram-enabled=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u0394\u03b9\u03b1\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+action.view.layout-set-chord-name-enabled=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u039f\u03bd\u03cc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+action.view.show-fretboard=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03c3\u03c4\u03b9\u03ad\u03c1\u03b1\u03c2
+action.view.show-piano=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b9\u03ac\u03bd\u03bf\u03c5
+action.view.show-matrix=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03af\u03bd\u03b1\u03ba\u03b1
+action.view.show-mixer=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u039c\u03af\u03ba\u03c4\u03b7
+action.view.show-transport=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1
+action.track.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+action.track.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+action.track.clone=\u039a\u03bb\u03c9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+action.track.go-first=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03c0\u03c1\u03ce\u03c4\u03bf \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+action.track.go-last=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+action.track.go-next=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+action.track.go-previous=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+action.track.lyrics=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd \u03c3\u03c4\u03bf\u03af\u03c7\u03c9\u03bd
+action.track.properties=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+action.track.move-down=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03ba\u03ac\u03c4\u03c9
+action.track.move-up=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03c0\u03ac\u03bd\u03c9
+action.measure.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.copy=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.paste=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.clean=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.go-first=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03ce\u03c4\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+action.measure.go-last=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+action.measure.go-next=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c3\u03c4\u03bf \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+action.measure.go-previous=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c3\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+action.beat.general.remove-unused-voice=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039c\u03b7 \u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7\u03c2 \u03a6\u03c9\u03bd\u03ae\u03c2
+action.beat.general.voice-up=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b1 \u03ac\u03bd\u03c9 \u03c3\u03c4\u03b5\u03bb\u03ad\u03c7\u03b7
+action.beat.general.voice-down=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b1 \u03ba\u03ac\u03c4\u03c9 \u03c3\u03c4\u03b5\u03bb\u03ad\u03c7\u03b7
+action.beat.general.voice-auto=\u038c\u03c1\u03b9\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 \u03c4\u03b1 \u03c3\u03c4\u03b5\u03bb\u03ad\u03c7\u03b7
+action.beat.general.set-stroke-up=Set Upstroke
+action.beat.general.set-stroke-down=Set Downstroke
+action.beat.general.move-left=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b5 \u0388\u03bd\u03b1 Beat \u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac
+action.beat.general.move-right=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b5 \u0388\u03bd\u03b1 Beat \u0394\u03b5\u03be\u03b9\u03ac
+action.beat.general.move-custom=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5 Beat
+action.note.general.clean-beat=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 beat
+action.note.general.decrement-semitone=\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u0397\u03bc\u03b9\u03c4\u03bf\u03bd\u03af\u03bf\u03c5
+action.note.general.increment-semitone=\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u0397\u03bc\u03b9\u03c4\u03bf\u03bd\u03af\u03bf\u03c5
+action.note.general.shift-down=\u039a\u03ac\u03c4\u03c9 \u03bf\u03bb\u03af\u03c3\u03b8\u03b7\u03c3\u03b7
+action.note.general.shift-up=\u03a0\u03ac\u03bd\u03c9 \u03bf\u03bb\u03af\u03c3\u03b8\u03b7\u03c3\u03b7
+action.note.general.tied=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03a3\u03cd\u03b6\u03b5\u03c5\u03be\u03b7\u03c2
+action.note.duration.set-whole=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03bf\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03bf\u03c5
+action.note.duration.set-half=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03bc\u03b9\u03c3\u03bf\u03cd
+action.note.duration.set-quarter=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03bf\u03c5
+action.note.duration.set-eighth=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u039f\u03b3\u03b4\u03cc\u03bf\u03c5
+action.note.duration.set-sixteenth=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u0394\u03b5\u03ba\u03ac\u03c4\u03bf\u03c5-\u0388\u03ba\u03c4\u03bf\u03c5
+action.note.duration.set-thirty-second=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03a4\u03c1\u03b9\u03b1\u03ba\u03bf\u03c3\u03c4\u03bf\u03cd-\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03bf\u03c5
+action.note.duration.set-sixty-fourth=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u0395\u03be\u03b7\u03ba\u03bf\u03c3\u03c4\u03bf\u03cd-\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03bf\u03c5
+action.note.duration.change-dotted=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf
+action.note.duration.change-double-dotted=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b4\u03b9\u03c0\u03bb\u03cc \u03b4\u03b9\u03c0\u03bb\u03bf\u03cd \u03c0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5
+action.note.duration.change-division-type=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+action.note.duration.decrement-duration=\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u0394\u03b9\u03b1\u03c1\u03ba\u03b5\u03af\u03b1\u03c2
+action.note.duration.increment-duration=\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03c4\u03b7\u03c2 \u0394\u03b9\u03b1\u03c1\u03ba\u03b5\u03af\u03b1\u03c2
+action.note.effect.change-vibrato=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 Vibrato
+action.note.effect.change-bend=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 bend
+action.note.effect.change-slide=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 Slide
+action.note.effect.change-hammer=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 hammer-on/pull-off
+action.note.effect.change-accentuated=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 accentuated
+action.note.effect.change-dead=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 dead note
+action.note.effect.change-fade-in=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 fade in
+action.note.effect.change-ghost=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 ghost
+action.note.effect.change-grace=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 grace
+action.note.effect.change-harmonic=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 harmonic
+action.note.effect.change-heavy-accentuated=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 heavy accentuated
+action.note.effect.change-palm-mute=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 palm mute
+action.note.effect.change-popping=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 popping
+action.note.effect.change-slapping=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 slapping
+action.note.effect.change-staccato=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 staccato
+action.note.effect.change-tapping=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 tapping
+action.note.effect.change-tremolo-bar=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 tremolo bar
+action.note.effect.change-tremolo-picking=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 tremolo picking
+action.note.effect.change-trill=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 Trill
+action.insert.open-repeat=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+action.insert.close-repeat=\u039a\u03bb\u03b5\u03af\u03c3\u03b5 \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+action.insert.repeat-alternative=\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+action.insert.chord=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+action.insert.text=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+action.marker.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03a3\u03b7\u03bc\u03b1\u03b4\u03b9\u03bf\u03cd
+action.marker.go-next=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+action.marker.go-previous=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+action.transport.play=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03a4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+action.transport.stop=\u039b\u03ae\u03be\u03b7 \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2
+action.transport.mode=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1
+action.transport.metronome=\u039c\u03b5\u03c4\u03c1\u03bf\u03bd\u03cc\u03bc\u03bf\u03c2
+action.transport.set-loop-start=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03ae \u03c4\u03b7\u03c2 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+action.transport.set-loop-end=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+action.tools.browser=\u03a0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2
+action.tools.transpose=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u039d\u03cc\u03c4\u03c9\u03bd
+action.settings.configure=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2
+action.help.doc=\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_en.properties b/TuxGuitar-testing/platform-all/share/lang/messages_en.properties
new file mode 100644
index 0000000..6bfa01d
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_en.properties
@@ -0,0 +1,686 @@
+ok=Ok
+cancel=Cancel
+yes=Yes
+no=No
+add=Add
+edit=Edit
+remove=Remove
+save=Save
+exit=Exit
+close=Close
+choose=Choose
+color=Color
+title=Title
+go=Go
+warning=Warning
+error=Error
+plugins=Plugins
+options=Options
+defaults=Defaults
+clean=Clean
+rename=Rename
+fret=Fret
+position=Position
+name=Name
+author=Author
+version=Version
+description=Description
+info=Info
+configure=Configure
+url=URL
+
+file=File
+file.new=New
+file.open=Open
+file.save=Save
+file.save-as=Save As
+file.save-changes-question=The song has unsaved changes.\nDo you want to save the changes?
+file.exit=Exit
+file.export=Export
+file.export-midi=Export MIDI
+file.export-pdf=Export PDF
+file.print=Print
+file.print-preview=Print Preview
+file.import=Import
+file.import-midi=Import MIDI
+file.export-ascii=Export ASCII
+file.history=History
+file.open-url=Open URL
+file.open.error=Cannot Open: {0}
+file.save.error=Cannot Save: {0}
+file.import.error=Cannot Import: {0}
+file.export.error=Cannot Export: {0}
+file.overwrite-question=This file already exists. Do you want to overwrite it?
+
+edit.menu=Edit
+edit.undo=Undo
+edit.redo=Redo
+edit.copy=Copy
+edit.from=From
+edit.to=To
+edit.all-tracks=All Tracks
+edit.paste=Paste
+edit.paste.count=Paste Count
+edit.paste.replace-mode=Paste at the Current Measure
+edit.paste.insert-mode=Paste in new Measure
+edit.delete=Delete
+edit.cut=Cut
+edit.mouse-mode-selection=Selection Mode
+edit.mouse-mode-edition=Score Edition Mode
+edit.not-natural-key=Sharp/Flat mode
+edit.voice-1=Select Voice 1
+edit.voice-2=Select Voice 2
+
+view=View
+view.layout=Layout
+view.layout.page=Page Layout
+view.layout.linear=Linear layout
+view.layout.compact=Compact
+view.layout.multitrack=Multitrack
+view.layout.chord-style=Chord Style
+view.layout.chord-name=Chord Name
+view.layout.chord-diagram=Chord Diagram
+view.layout.score-enabled=Show Score
+view.layout.tablature-enabled=Show Tablature
+view.show-mixer=Show Mixer
+view.show-fretboard=Show Fretboard
+view.show-piano=Show Piano
+view.show-matrix=Show Matrix
+view.show-transport=Show Player
+
+fretboard.direction=Direction
+fretboard.right-mode=Right mode
+fretboard.left-mode=Left mode
+fretboard.background-color=Background Color
+fretboard.display-note-text=Display Note Text
+fretboard.display-scale-text=Display Scale Text
+fretboard.font=Font
+fretboard.fretpoint-color=Fret Color
+fretboard.note-color=Note Color
+fretboard.scale-note-color=Scale Note Color
+fretboard.settings=Fretboard Settings
+fretboard.string-color=String Color
+fretboard.settings.options=Options
+
+piano.editor=Piano Editor
+piano.natural-key-color=Natural Key Color
+piano.not-natural-key-color=Unnatural Key Color
+piano.note-color=Note Color
+piano.scale-note-color=Scale Note Color
+piano.settings=Piano Settings
+
+matrix.editor=Matrix Editor
+matrix.grids=Number of Grids
+matrix.border-color=Border Color
+matrix.font=Font
+matrix.foreground-color=Foreground Color
+matrix.line-color-1=Odd Row Color
+matrix.line-color-2=Even Row Color
+matrix.line-color-over=Mouse Over Row Color
+matrix.note-color=Note Color
+matrix.play-note-color=Play Note Color
+matrix.position-color=Position Color
+matrix.settings=Matrix Settings
+
+composition=Composition
+composition.timesignature=Time Signature
+composition.timesignature.Numerator=Numerator
+composition.timesignature.denominator=Denominator
+composition.timesignature.to-the-end=To the end
+composition.tempo=Tempo
+composition.tempo-percent=Percent
+composition.tempo.invalid=Invalid Tempo
+composition.tempo.start-to-end=Apply this tempo in the whole song
+composition.tempo.position-to-end=Apply this tempo to the end
+composition.tempo.position-to-next=Apply this tempo to the next tempo marker
+composition.properties=Properties
+composition.name=Name
+composition.artist=Artist
+composition.album=Album
+composition.author=Author
+composition.date=Date
+composition.copyright=Copyright
+composition.writer=Tab Creator
+composition.transcriber=Transcribed By
+composition.comments=Comments
+composition.tripletfeel=Triplet Feel
+composition.clef=Clef
+composition.clef.treble=Treble
+composition.clef.bass=Bass
+composition.clef.tenor=Tenor
+composition.clef.alto=Alto
+composition.clef.to-the-end=Apply this clef to the end
+composition.keysignature=Key Signature
+composition.keysignature.natural=Natural
+composition.keysignature.sharp-1=1 Sharp
+composition.keysignature.sharp-2=2 Sharps
+composition.keysignature.sharp-3=3 Sharps
+composition.keysignature.sharp-4=4 Sharps
+composition.keysignature.sharp-5=5 Sharps
+composition.keysignature.sharp-6=6 Sharps
+composition.keysignature.sharp-7=7 Sharps
+composition.keysignature.flat-1=1 Flat
+composition.keysignature.flat-2=2 Flats
+composition.keysignature.flat-3=3 Flats
+composition.keysignature.flat-4=4 Flats
+composition.keysignature.flat-5=5 Flats
+composition.keysignature.flat-6=6 Flats
+composition.keysignature.flat-7=7 Flats
+composition.keysignature.to-the-end=Apply this key signature to the end
+composition.tripletfeel=Triplet Feel
+composition.tripletfeel.none=No Triplet Feel
+composition.tripletfeel.eighth=Triplet 8th
+composition.tripletfeel.sixteenth=Triplet 16th
+composition.tripletfeel.to-the-end=Apply this triplet feel to the end
+
+help=Help
+help.help=Help
+help.doc=Documentation
+help.about=About
+help.about.license=License
+help.about.authors=Authors
+help.about.description=Description
+
+track=Track
+track.number=N�
+track.name=Name
+track.color=Color
+track.first=First Track
+track.last=Last Track
+track.previous=Previous Track
+track.next=Next Track
+track.add=Add Track
+track.remove=Remove Track
+track.clone=Clone Track
+track.move-up=Move Up
+track.move-down=Move Down
+track.instrument=Instrument 
+track.properties=Properties
+track.properties.general=General
+track.name.default-percussion-name=Percussion
+track.lyrics=Lyrics
+track.solo=Solo
+track.mute=Mute
+
+lyric.editor=Lyric Editor
+
+measure=Measure
+measure.first=First Measure
+measure.last=Last Measure
+measure.previous=Previous Measure
+measure.next=Next Measure
+measure.add=Add Measure
+measure.add.count=Add Count
+measure.add-before-current-position=Add measure before the current position
+measure.add-after-current-position=Add measure after the current position
+measure.add-at-end=Add measure at the end
+measure.remove=Remove Measure
+measure.copy=Copy Measure
+measure.paste=Paste Measure
+measure.clean=Clean Measure
+
+duration=Duration
+duration.whole=Whole
+duration.half=Half
+duration.quarter=Quarter
+duration.eighth=Eighth
+duration.sixteenth=Sixteenth
+duration.thirtysecond=Thirty-Second
+duration.sixtyfourth=Sixty-Fourth
+duration.dotted=Dotted
+duration.doubledotted=Double Dotted
+duration.division-type=Triplet
+
+dynamic=Dynamic
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Effects
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Dead Note
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Ghost Note
+effects.accentuatednote=Accentuated Note
+effects.heavyaccentuatednote=Heavy Accentuated Note
+effects.harmonic=Harmonic
+effects.grace=Grace Note
+effects.grace-editor=Grace Note Editor
+effects.grace.before-beat=Before beat
+effects.grace.on-beat=On beat
+effects.grace.transition=Transition
+effects.grace.transition-none=None
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Trill Editor
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Left Hand
+effects.harmonic.tapped.right-hand=Right Hand
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+
+bend.editor=Bend Editor
+bend.bend=Bend
+bend.bend-release=Bend/Release
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=Player
+transport.start=Start
+transport.stop=Stop
+transport.pause=Pause
+transport.first=First
+transport.last=Last
+transport.previous=Previous
+transport.next=Next
+transport.metronome=Metronome
+transport.mode=Play Mode
+transport.mode.simple=Simple Mode
+transport.mode.simple.tempo-percent=Percentage of tempo
+transport.mode.simple.loop=Play looped
+transport.mode.trainer=Training Mode
+transport.mode.trainer.increment-description=Increment by
+transport.mode.loop-range=Loop Range
+transport.mode.loop-range.from=Play from measure
+transport.mode.loop-range.from-default=From the beginning
+transport.mode.loop-range.to=Play to measure
+transport.mode.loop-range.to-default=To the end
+transport.set-loop-start=Set loop start point
+transport.set-loop-end=Set loop end point
+
+instruments.volume=Gain
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=Volume
+instrument.balance=Balance
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Free
+instrument.link=Link
+
+
+repeat.open=Open Repeat
+repeat.close=Close Repeat
+repeat.alternative=Alternative Repeats
+repeat.alternative.editor=Edit Alternative Repeats
+repetitions=Repetitions
+repeat.number-of-repetitions=Number of Repetitions
+
+beat=Beat
+beat.clean=Clean Beat
+beat.voice.remove-unused=Remove Unused Voice
+beat.voice-up=Stems Up
+beat.voice-down=Stems Down
+beat.voice-auto=Auto Stems
+beat.stroke=Stroke
+beat.stroke-up=Upstroke
+beat.stroke-down=Downstroke
+beat.move-left=Move One Beat Left
+beat.move-right=Move One Beat Right
+beat.move-custom=Custom Beat Move
+beat.move-custom.dialog.title=Custom Move
+beat.move-custom.dialog.direction-tip=Move Direction
+beat.move-custom.dialog.move-1.tip=Major Move
+beat.move-custom.dialog.move-2.tip=Fine Move
+beat.move-custom.dialog.direction=Direction
+beat.move-custom.dialog.direction.right=Move To Right
+beat.move-custom.dialog.direction.left=Move To Left
+beat.move-custom.dialog.count=Count
+beat.move-custom.dialog.duration=Duration
+beat.move-custom.dialog.duration.type=Dotted/Double-Dotted
+beat.move-custom.dialog.duration.type.normal=None
+beat.move-custom.dialog.duration.division-type=Division Type
+beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet)
+
+note=Note
+note.semitone-up=Semitone Up
+note.semitone-down=Semitone Down
+note.shift-up=Shift Up
+note.shift-down=Shift Down
+note.tiednote=Tied Note
+note.deadnote=Dead Note
+
+insert.chord=Insert Chord
+chord.editor=Chord Editor
+chord=Chord
+chord.name=Name
+chord.bass=Bass
+chord.custom=Custom Chord
+chord.custom.name-empty-error=Chord name can not be empty.
+chord.custom.name-exist-error=Chord name already exists.
+chord.settings.tip=Custom Settings
+chord.settings.type=Type
+chord.settings.type.most-common=Most Common
+chord.settings.type.inversions=Inversions
+chord.settings.type.close-voiced=Close Voiced
+chord.settings.type.open-voiced=Open Voiced
+chord.settings.open-chords=Open Chords
+chord.settings.chords-to-display=Chords to Display
+chord.settings.search-frets=Search Frets
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+
+instrument=Instrument
+instrument.instrument=Instrument
+instrument.percussion-track=Percussion Track
+
+tuning=Tuning
+tuning.offset=Offset
+tuning.strings=Strings
+tuning.strings.transpose=Transpose afected notes.
+tuning.strings.transpose.try-keep-strings=Try keep notes at same string
+tuning.strings.transpose.apply-to-chords=Transpose Chords
+
+language=Language
+
+choose-color=Choose a color
+
+settings=Settings
+settings.config=Configure TuxGuitar
+settings.config.language=Language
+settings.config.language.choose=Choose Language
+settings.config.styles=Styles
+settings.config.styles.general=General Styles
+settings.config.styles.printer=Printer Styles
+settings.config.styles.font.default=Default Font
+settings.config.styles.font.note=Note Font
+settings.config.styles.font.lyric=Lyrics Font
+settings.config.styles.font.text=Text Font
+settings.config.styles.font.time-signature=Time Signature Font
+settings.config.styles.font.printer-default=Printer Default Font
+settings.config.styles.font.printer-note=Printer Note Font
+settings.config.styles.font.printer-time-signature=Printer Time Signature Font
+settings.config.styles.color.score-note=Score Note Color
+settings.config.styles.color.tab-note=Tab Note Color
+settings.config.styles.color.play-note=Play Note Color
+settings.config.apply-changes-question=Do you want to apply changes now?
+settings.config.sound=Sound
+settings.config.main=General
+settings.config.main.window-title=Window Title
+settings.config.main.window-title.help=The following variables will be replaced at the window title:
+settings.config.main.window-title.var.description.appname=This variable represents the Application Name: TuxGuitar
+settings.config.main.window-title.var.description.appversion=This variable represents the version of TuxGuitar.
+settings.config.main.window-title.var.description.filename=This variable represents the name of the opened file
+settings.config.main.window-title.var.description.filepath=This variable represents the path of the opened file
+settings.config.main.window-title.var.description.songname=This variable represents the name of the song
+settings.config.main.window-title.var.description.songauthor=This variable represents the author of the song
+settings.config.main.window-title.var.description.songalbum=This variable represents the album of the song
+settings.config.main.window-title.var.description.songartist=This variable represents the artist of the song
+settings.config.main.options=Options
+settings.config.main.splash-enabled=Launch splash screen on startup
+settings.config.main.table.auto-size.enabled=Enable Automatic Table resizing
+settings.config.styles.color.lines=Horizontal lines color
+settings.config.toolbars=Tool Bars
+settings.config.toolbars.tip=Customize Your ToolBars
+settings.config.toolbars.list=Available ToolBars
+settings.config.toolbars.move-up=Move Up
+settings.config.toolbars.move-down=Move Down
+settings.config.skin=Skins
+settings.config.skin.choose=Choose your skin
+settings.keybindings=Configure Key Bindings
+
+key-bindings-editor=Key Binding Editor
+key-bindings-editor-action-select=Select an Action
+key-bindings-editor-action-column=Actions
+key-bindings-editor-shortcut-column=Keys
+key-bindings-editor-push-a-key=Press a key
+key-bindings-editor-save-question=There are unsaved changes, do you want to exit without saving?
+
+key-bindings-editor-override=Shortcut already in use! Are you sure you want to use it?
+
+print.print=Print
+print.dialog=Print
+print.service=Service
+print.service.name=Name
+print.service.status=Status
+print.service.type=Type
+print.service.info=Info
+print.range=Range
+print.range.all-pages=All
+print.range.pages=Pages
+print.range.pages-to=To
+print.copies=Copies
+print.copies-number=Number of copies
+print.print-to-file=Print to file
+print.file-chooser=Choose
+print-header.default-song-name=Untitled
+print-header.default-song-author=Anonymous
+
+print.preview=Print Preview
+print.preview.page-of=Of
+
+marker=Marker
+marker.add=Add Marker
+marker.list=List Markers
+marker.first=Go First Marker
+marker.last=Go Last Marker
+marker.next=Go Next Marker
+marker.previous=Go Previous Marker
+
+export.tablature-enabled=Show Tablature
+export.score-enabled=Show Score
+export.chord-name-enabled=Show Chord Names
+export.chord-diagram-enabled=Show Chord Diagrams
+export.black-and-white=Black And White Mode
+
+scale=Scale
+scale.list=Scale List
+
+text.insert=Insert Text
+text.editor=Text Editor
+text.text=Text
+
+tools=Tools
+tools.scale=Scale list
+tools.browser=Browser
+tools.plugins=Plugins
+tools.shortcuts=Shortcuts
+tools.settings=Settings
+
+tools.transpose=Transpose
+tools.transpose.semitones=Transposition Semitones
+tools.transpose.apply-to-track=Transpose all measures
+tools.transpose.apply-to-measure=Transpose only this measure
+tools.transpose.apply-to-all-tracks=Apply to all tracks
+tools.transpose.try-keep-strings=Try keep notes at same string when it's possible
+tools.transpose.apply-to-chords=Transpose Chords
+
+browser.dialog=Browser
+browser.menu.file=File
+browser.open=Open
+browser.exit=Exit
+browser.menu.collection=Collection
+browser.menu.go=Go
+browser.collection.select=Select Collection
+browser.collection.open=Open
+browser.collection.remove=Remove
+browser.collection.close=Close
+browser.collection.new=New
+browser.go-root=Home
+browser.go-back=Back
+browser.refresh=Refresh
+browser.factory.fs.name=File System
+browser.collection.fs.name=Name
+browser.collection.fs.path=Folder
+browser.collection.fs.editor-title=File System Collection
+browser.collection.fs.editor-tip=Choose your collection folder
+browser.collection.fs.invalid-path=Please, select a valid folder
+
+midi.port=MIDI Port
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=Not available.
+plugin.column.name=Plugin Name
+plugin.column.enabled=Enabled
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=File Items
+edit.items=Edit Items
+property.items=Property Items
+track.items=Track Items
+duration.items=Duration Items
+beat.items=Beat Items
+composition.items=Composition Items
+repeat.items=Repeat Items
+transport.items=Player Items
+marker.items=Marker Items
+insert.items=Insert Items
+layout.items=Layout Items
+view.items=View Items
+effect.items=Effect Items
+dynamic.items=Dynamic Items
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=New File
+action.file.open=Open File
+action.file.open-url=Open URL
+action.file.save=Save
+action.file.save-as=Save As
+action.file.print=Print
+action.file.print-preview=Print Preview
+action.file.exit=Exit TuxGuitar
+action.edit.undo=Undo
+action.edit.redo=Redo
+action.edit.voice-1=Select Voice 1
+action.edit.voice-2=Select Voice 2
+action.composition.change-time-signature=Change Time Signature
+action.composition.change-tempo=Change Tempo
+action.composition.change-info=Change Song Information
+action.composition.change-clef=Change Clef
+action.composition.change-key-signature=Change Key Signature
+action.composition.change-triplet-feel=Change Triplet Feel
+action.view.layout-set-page=Show Page Layout
+action.view.layout-set-linear=Show Linear Layout
+action.view.layout-set-multitrack=Show Multitrack Mode
+action.view.layout-set-score-enabled=Show Score
+action.view.layout-set-tablature-enabled=Show Tablature
+action.view.layout-set-compact=Show Compact Mode
+action.view.layout-set-chord-diagram-enabled=Enable Chord Diagram
+action.view.layout-set-chord-name-enabled=Enable Chord Name
+action.view.show-fretboard=Show Fretboard
+action.view.show-piano=Show Piano
+action.view.show-matrix=Show Matrix
+action.view.show-mixer=Show Mixer
+action.view.show-transport=Show Player
+action.track.add=Add Track
+action.track.remove=Remove Track
+action.track.clone=Clone Track
+action.track.go-first=Go to first track
+action.track.go-last=Go to last track
+action.track.go-next=Go to next track
+action.track.go-previous=Go to previous track
+action.track.lyrics=Edit track lyrics
+action.track.properties=Change track properties
+action.track.move-down=Move track down
+action.track.move-up=Move track up
+action.measure.add=Add measure
+action.measure.remove=Remove measure
+action.measure.copy=Copy measure
+action.measure.paste=Paste measure
+action.measure.clean=Clean measure
+action.measure.go-first=Go to first measure
+action.measure.go-last=Go to last measure
+action.measure.go-next=Go to next measure
+action.measure.go-previous=Go to previous measure
+action.beat.general.remove-unused-voice=Remove Unused Voice
+action.beat.general.voice-up=Set Stems Up
+action.beat.general.voice-down=Set Stems Down
+action.beat.general.voice-auto=Set Auto Stems
+action.beat.general.set-stroke-up=Set Upstroke
+action.beat.general.set-stroke-down=Set Downstroke
+action.beat.general.move-left=Move One Beat Left
+action.beat.general.move-right=Move One Beat Right
+action.beat.general.move-custom=Custom Beat Move
+action.note.general.clean-beat=Clean beat
+action.note.general.decrement-semitone=Decrement semitone
+action.note.general.increment-semitone=Increment semitone
+action.note.general.shift-down=Shift down
+action.note.general.shift-up=Shift up
+action.note.general.tied=Add/Remove tied
+action.note.duration.set-whole=Set Whole Duration
+action.note.duration.set-half=Set Half Duration
+action.note.duration.set-quarter=Set Quarter Duration
+action.note.duration.set-eighth=Set Eighth Duration
+action.note.duration.set-sixteenth=Set Sixteenth Duration
+action.note.duration.set-thirty-second=Set Thirty Second Duration
+action.note.duration.set-sixty-fourth=Set Sixty Fourth Duration
+action.note.duration.change-dotted=Add/Remove dot
+action.note.duration.change-double-dotted=Add/Remove double dotted
+action.note.duration.change-division-type=Add/Remove triplet
+action.note.duration.decrement-duration=Decrement Duration
+action.note.duration.increment-duration=Increment Duration
+action.note.effect.change-vibrato=Add/Remove Vibrato
+action.note.effect.change-bend=Add/Remove bend
+action.note.effect.change-slide=Add/Remove Slide
+action.note.effect.change-hammer=Add/Remove hammer-on/pull-off
+action.note.effect.change-accentuated=Add/Remove accentuated
+action.note.effect.change-dead=Add/Remove dead note
+action.note.effect.change-fade-in=Add/Remove fade in
+action.note.effect.change-ghost=Add/Remove ghost
+action.note.effect.change-grace=Add/Remove grace
+action.note.effect.change-harmonic=Add/Remove harmonic
+action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated
+action.note.effect.change-palm-mute=Add/Remove palm mute
+action.note.effect.change-popping=Add/Remove popping
+action.note.effect.change-slapping=Add/Remove slapping
+action.note.effect.change-staccato=Add/Remove staccato
+action.note.effect.change-tapping=Add/Remove tapping
+action.note.effect.change-tremolo-bar=Add/Remove tremolo bar
+action.note.effect.change-tremolo-picking=Add/Remove tremolo picking
+action.note.effect.change-trill=Add/Remove Trill
+action.insert.open-repeat=Open Repeat
+action.insert.close-repeat=Close Repeat
+action.insert.repeat-alternative=Repeat Alternative
+action.insert.chord=Insert Chord
+action.insert.text=Insert Text
+action.marker.add=Add Marker
+action.marker.go-next=Go Next Marker
+action.marker.go-previous=Go Previous Marker
+action.transport.play=Play Song
+action.transport.stop=Stop Playing
+action.transport.mode=Player Mode
+action.transport.metronome=Metrononome
+action.transport.set-loop-start=Set loop start point
+action.transport.set-loop-end=Set loop end point
+action.tools.browser=Browser
+action.tools.transpose=Transpose Notes
+action.settings.configure=Settings
+action.help.doc=Help
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_es.properties b/TuxGuitar-testing/platform-all/share/lang/messages_es.properties
new file mode 100644
index 0000000..89b7be4
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_es.properties
@@ -0,0 +1,680 @@
+ok=Aceptar
+cancel=Cancelar
+yes=Si
+no=No
+add=Agregar
+remove=Borrar
+save=Guardar
+exit=Salir
+close=Cerrar
+color=Color
+title=T\u00EDtulo
+edit=Editar
+go=Ir
+error=Error
+warning=Aviso
+plugins=Plugins
+choose=Seleccionar
+plugins=Plugins
+options=Opciones
+defaults=Predeterminados
+clean=Limpiar
+rename=Renombrar
+fret=Cejilla
+position=Posici\u00F3n
+info=Informaci\u00F3n
+name=Nombre
+author=Autor
+version=Versi\u00F3n
+description=Descripci\u00F3n
+configure=Configurar
+
+tuxguitar.title=TuxGuitar
+
+file=Archivo
+file.new=Nuevo
+file.open=Abrir
+file.open-url=Abrir URL
+file.open.error=No se pudo abrir el archivo: {0}
+file.save=Guardar
+file.save-as=Guardar Como
+file.save.error=No se pudo guardar el archivo: {0}
+file.save-changes-question=El archivo tiene cambios sin guardar.\nDesea guardar los cambios?
+file.exit=Salir
+file.export=Exportar
+file.export-midi=Exportar Midi
+file.export-pdf=Exportar PDF
+file.print=Imprimir
+file.print-preview=Vista Preliminar
+file.import=Importar
+file.import.error=No se pudo importar: {0}
+file.export-ascii=Exportar ASCII
+file.export.error=No se pudo exportar: {0}
+file.history=Historial
+file.overwrite-question=El archivo ya existe, desea reemplazarlo?
+
+edit.menu=Edici\u00F3n
+edit.undo=Deshacer
+edit.redo=Rehacer
+edit.copy=Copiar
+edit.from=Desde
+edit.to=Hasta
+edit.all-tracks=Todas las pistas
+edit.paste=Pegar
+edit.paste.count=Cantidad de pegados
+edit.paste.replace-mode=Pegar en el comp\u00E1s actual
+edit.paste.insert-mode=Pegar en nuevo comp\u00E1s
+edit.delete=Borrar
+edit.cut=Cortar
+edit.mouse-mode-selection=Cambiar puntero a modo de selecci\u00F3n
+edit.mouse-mode-edition=Cambiar puntero a modo de edici\u00F3n
+edit.not-natural-key=Sostenido/Bemol
+edit.voice-1=Seleccionar Primer Voz
+edit.voice-2=Seleccionar Segunda Voz
+
+view=Ver
+view.layout=Ver
+view.layout.page=Modo P\u00E1gina
+view.layout.linear=Modo Linear 
+view.layout.multitrack=Multipista
+view.layout.compact=Modo Compacto
+view.layout.score-enabled=Mostrar Partitura
+view.layout.tablature-enabled=Mostrar Tablatura
+view.layout.chord-style=Estilo de Acordes
+view.layout.chord-name=Mostrar Nombre
+view.layout.chord-diagram=Mostrar Diagrama
+view.show-transport=Mostrar Reproductor
+view.show-mixer=Mostrar Mezclador
+view.show-piano=Mostrar Piano
+view.show-matrix=Mostrar Editor de Matrices
+view.show-fretboard=Mostrar M\u00E1stil
+
+fretboard.direction=Direcci\u00F3n
+fretboard.background-color=Color de fondo
+fretboard.font=Fuente
+fretboard.fretpoint-color=Color de marcadores de posici\u00F3n
+fretboard.note-color=Color de notas
+fretboard.scale-note-color=Color de notas de escala
+fretboard.string-color=Color de cuerdas
+fretboard.settings=Preferencias
+fretboard.settings.options=Opciones
+fretboard.display-note-text=Mostrar notas en modo de texto
+fretboard.display-scale-text=Mostrar notas de escala en modo de texto
+fretboard.right-mode=Hacia la derecha
+fretboard.left-mode=Hacia la izquierda
+
+piano.editor=Piano
+piano.natural-key-color=Color de teclas naturales
+piano.not-natural-key-color=Color de teclas Sostenido/Bemol
+piano.note-color=Color de notas
+piano.scale-note-color=Color de notas de escala
+piano.settings=Preferencias
+
+matrix.editor=Editor de Matrices
+matrix.grids=Grillas
+matrix.font=Fuente
+matrix.border-color=Color de bordes
+matrix.foreground-color=Color de fuente y lineas divisorias
+matrix.line-color-1=Color de linea #1
+matrix.line-color-2=Color de linea #2
+matrix.line-color-over=Color de linea seleccionada
+matrix.note-color=Color de notas
+matrix.play-note-color=Color de notas reproduciendo
+matrix.position-color=Color de pulso
+matrix.settings=Preferencias
+
+composition=Composici\u00F3n
+composition.timesignature=Time Signature
+composition.timesignature.Numerator=Numerador
+composition.timesignature.denominator=Denominador
+composition.timesignature.to-the-end=Hasta el final
+composition.tempo=Tiempo
+composition.tempo-percent=Porcentaje
+composition.tempo.start-to-end=Aplicar a todos los compases
+composition.tempo.position-to-end=Aplicar hasta el final
+composition.tempo.position-to-next=Aplicar hasta la pr\u00F3xima marca de tiempo
+composition.tempo.invalid=Tempo inv\u00E1lido
+composition.properties=Propiedades
+composition.name=Nombre
+composition.artist=Artista
+composition.album=Album
+composition.author=Autor
+composition.date=Fecha
+composition.copyright=Derechos de autor
+composition.writer=Creador
+composition.transcriber=Transcrito por
+composition.comments=Comentarios
+composition.clef=Clave
+composition.clef.treble=Treble
+composition.clef.bass=Bass
+composition.clef.tenor=Tenor
+composition.clef.alto=Alto
+composition.clef.to-the-end=Aplicar esta clave hasta el final
+composition.keysignature=Armadura
+composition.keysignature.natural=Natural
+composition.keysignature.sharp-1=1 Sostenido
+composition.keysignature.sharp-2=2 Sostenidos
+composition.keysignature.sharp-3=3 Sostenidos
+composition.keysignature.sharp-4=4 Sostenidos
+composition.keysignature.sharp-5=5 Sostenidos
+composition.keysignature.sharp-6=6 Sostenidos
+composition.keysignature.sharp-7=7 Sostenidos
+composition.keysignature.flat-1=1 Bemol
+composition.keysignature.flat-2=2 Bemoles
+composition.keysignature.flat-3=3 Bemoles
+composition.keysignature.flat-4=4 Bemoles
+composition.keysignature.flat-5=5 Bemoles
+composition.keysignature.flat-6=6 Bemoles
+composition.keysignature.flat-7=7 Bemoles
+composition.keysignature.to-the-end=Aplicar esta armadura hasta el final
+composition.tripletfeel=Aspecto de Tresillos
+composition.tripletfeel.none=Aspecto normal
+composition.tripletfeel.eighth=Aspecto de tresillos en corcheas
+composition.tripletfeel.sixteenth=Aspecto de tresillos en semi-corcheas
+composition.tripletfeel.to-the-end=Aplicar hasta el final
+
+help=Ayuda
+help.help=Ayuda
+help.doc=Documentaci\u00F3n
+help.about=Acerca de
+help.about.license=Licencia
+help.about.authors=Autores
+help.about.description=Descripci\u00F3n
+
+instruments.volume=Ganancia
+instrument.volume=Volumen
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balance
+instrument.free=Libre
+instrument.link=Ligado
+
+track=Pista
+track.number=N�
+track.name=Nombre
+track.color=Color
+track.first=Primera
+track.last=Ultima
+track.previous=Anterior
+track.next=Siguiente
+track.add=Agregar pista
+track.remove=Borrar pista
+track.instrument=Instrumento
+track.properties=Propiedades
+track.properties.general=General
+track.clone=Clonar Pista
+track.move-up=Mover Arriba
+track.move-down=Mover Abajo
+track.name.default-percussion-name=Percusi\u00F3n
+track.lyrics=Editar letras
+track.solo=Solo
+track.mute=Silencio
+
+lyric.editor=Editor de letras
+
+measure=Comp\u00E1s
+measure.first=Primero
+measure.last=\u00DAltimo
+measure.previous=Anterior
+measure.next=Siguiente
+measure.add=Agregar comp\u00E1s
+measure.add.count=Cantidad de compases
+measure.remove=Borrar comp\u00E1s
+measure.copy=Copiar comp\u00E1s
+measure.paste=Pegar comp\u00E1s
+measure.clean=Limpiar comp\u00E1s
+measure.add-before-current-position=Agregar comp\u00E1s antes de la posici\u00F3n actual
+measure.add-after-current-position=Agregar comp\u00E1s despues de la posici\u00F3n actual
+measure.add-at-end=Agregar comp\u00E1s al final
+
+beat=Pulso
+beat.clean=Limpiar Pulso
+beat.voice.remove-unused=Eliminar la voz no utilizada
+beat.voice-up=Notas hacia arriba
+beat.voice-down=Notas hacia abajo
+beat.voice-auto=Direcci\u00F3n de notas automatica
+beat.stroke=Rasgueo
+beat.stroke-up=Rasgueo ascendente
+beat.stroke-down=Rasgueo decendente
+beat.move-left=Mover un pulso hacia la izquierda
+beat.move-right=Mover un pulso hacia la derecha
+beat.move-custom=Movimiento de pulso personalizado
+beat.move-custom.dialog.title=Movimiento de pulso personalizado
+beat.move-custom.dialog.direction-tip=Direcci\u00F3n del movimiento
+beat.move-custom.dialog.move-1.tip=Movimiento primario
+beat.move-custom.dialog.move-2.tip=Movimiento secundario
+beat.move-custom.dialog.direction=Direcci\u00F3n
+beat.move-custom.dialog.direction.right=Mover hacia la derecha
+beat.move-custom.dialog.direction.left=Mover hacia la izquierda
+beat.move-custom.dialog.count=Cantidad
+beat.move-custom.dialog.duration=Duraci\u00F3n
+beat.move-custom.dialog.duration.type=Puntillo/Doble-Puntillo
+beat.move-custom.dialog.duration.type.normal=Normal
+beat.move-custom.dialog.duration.division-type=Tipo de divisiones
+beat.move-custom.dialog.duration.division-type.normal=Normal (Tupleto)
+
+note.tiednote=Ligar Nota
+note.semitone-up=Subir un semitono
+note.semitone-down=Bajar un semitono
+note.shift-up=Subir una cuerda
+note.shift-down=Bajar una cuerda
+
+duration=Duraci\u00F3n
+duration.whole=Redonda
+duration.half=Blanca
+duration.quarter=Negra
+duration.eighth=Corchea
+duration.sixteenth=Semi-Corchea
+duration.thirtysecond=Fusa
+duration.sixtyfourth=Semi-Fusa
+duration.dotted=Puntillo
+duration.doubledotted=Doble Puntillo
+duration.division-type=Tresillo
+
+effects=Efectos
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Nota Muerta
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Ghost Note
+effects.accentuatednote=Accentuated Note
+effects.heavyaccentuatednote=Heavy Accentuated Note
+effects.harmonic=Harmonic
+effects.grace=Grace Note
+effects.grace-editor=Grace Note Editor
+effects.grace.before-beat=Before beat
+effects.grace.on-beat=On beat
+effects.grace.transition=Transition
+effects.grace.transition-none=None
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Trill Editor
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key offset
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Left hand
+effects.harmonic.tapped.right-hand=Right hand
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+
+
+bend.editor=Editor de Bend
+bend.bend=Bend
+bend.bend-release=bend/release
+bend.bend-release-bend=bend/release/bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+dynamic=Dynamic
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+insert.chord=Insertar Acorde
+
+chord.editor=Editor de Acordes
+chord=Acorde
+chord.name=Nombre
+chord.custom=Acorde Personalizado
+chord.custom.name-empty-error=El nombre del acorde es obligatorio.
+chord.custom.name-exist-error=Ya existe un acorde con este nombre.
+chord.bass=Bajo
+chord.settings.tip=Preferencias
+chord.settings.type=Tipo
+chord.settings.type.most-common=Most Common
+chord.settings.type.inversions=Inversions
+chord.settings.type.close-voiced=Close Voiced
+chord.settings.type.open-voiced=Open Voiced
+chord.settings.open-chords=Open Chords
+chord.settings.chords-to-display=Acordes a mostrar
+chord.settings.search-frets=Trastes
+chord.settings.minimum-fret=M\u00EDnimo
+chord.settings.maximum-fret=M\u00E1ximo
+
+transport=Reproductor
+transport.start=Reproducir
+transport.pause=Pausar
+transport.stop=Parar
+transport.first=Primer Compas
+transport.last=\u00DAltimo Compas
+transport.previous=Compas Anterior
+transport.next=Siguiente Compas
+transport.mode=Modo de Reproducci\u00F3n
+transport.mode.simple=Modo Normal
+transport.mode.simple.tempo-percent=Porcentaje de tiempo
+transport.mode.simple.loop=Repetir infinitamente
+transport.mode.trainer=Modo de Entrenamiento
+transport.mode.trainer.increment-description=Incrementar porcentaje
+transport.mode.loop-range=Rango de Repeticiones
+transport.mode.loop-range.from=Reproducir desde el comp\u00E1s
+transport.mode.loop-range.from-default=Desde el principio
+transport.mode.loop-range.to=Reproducir hasta el comp\u00E1s
+transport.mode.loop-range.to-default=Hasta el final
+transport.set-loop-start=Marcar inicio de repetici\u00F3n
+transport.set-loop-end=Marcar final de repetici\u00F3n
+
+repetitions=Repeticiones
+repeat.open=Abrir Repetici\u00F3n
+repeat.close=Cerrar Repetici\u00F3n
+repeat.number-of-repetitions=N\u00FAmero de repeticiones
+repeat.alternative=Repetici\u00F3n Alternativa
+repeat.alternative.editor=Editar Repetici\u00F3n Alternativa
+
+instrument=Instrumento
+instrument.instrument=Instrumento
+instrument.percussion-track=Pista de percusi\u00F3n
+
+tuning=Afinaci\u00F3n
+tuning.offset=Offset
+tuning.strings=Cuerdas
+tuning.strings.transpose=Transponer notas afectadas
+tuning.strings.transpose.try-keep-strings=Mantener notas en la misma cuerda si es posible
+tuning.strings.transpose.apply-to-chords=Transponer acordes
+
+language=Idioma
+
+choose-color=Seleccione un color
+
+settings=Opciones
+settings.config=Configurar TuxGuitar
+settings.config.main=General
+settings.config.main.window-title=T\u00EDtulo de la ventana
+settings.config.main.window-title.help=Las siguientes variables seran reemplazadas en el t\u00EDtulo:
+settings.config.main.window-title.var.description.appname=Representa el nombre de la aplicaci\u00F3n: TuxGuitar.
+settings.config.main.window-title.var.description.appversion=Representa la versi\u00F3n actual de tuxguitar.
+settings.config.main.window-title.var.description.filename=Representa el nombre del archivo que se esta editando.
+settings.config.main.window-title.var.description.filepath=Representa la ruta del archivo que se esta editando.
+settings.config.main.window-title.var.description.songname=Representa el nombre de la canci\u00F3n actual.
+settings.config.main.window-title.var.description.songauthor=Representa el autor de la canci\u00F3n actual.
+settings.config.main.window-title.var.description.songalbum=Representa el album de la canci\u00F3n actual.
+settings.config.main.window-title.var.description.songartist=Representa el artista de la canci\u00F3n actual.
+settings.config.main.options=Opciones
+settings.config.main.splash-enabled=Mostrar el splash al inicio.
+settings.config.main.table.auto-size.enabled=Ajustar autom\u00E1ticamente el tama\u00F1o de la previsualizaci\u00F3n de pistas
+settings.config.view=Vista
+settings.config.view.mode=Modo de vista
+settings.config.view.size=Ajustes de la ventana
+settings.config.view.size.maximized=Maximizada
+settings.config.view.size.width=Ancho
+settings.config.view.size.height=Alto
+settings.config.language=Idioma
+settings.config.language.choose=Seleccione su idioma
+settings.config.styles=Estilos
+settings.config.styles.general=Estilos Generales
+settings.config.styles.font.default=Fuente por Defecto
+settings.config.styles.font.note=Fuente de Notas
+settings.config.styles.font.time-signature=Fuente de Time Signature
+settings.config.styles.font.lyric=Fuente de Letras
+settings.config.styles.font.text=Fuente de Textos
+settings.config.styles.color.score-note=Color de Notas de Partitura
+settings.config.styles.color.tab-note=Color de Notas de Tablatura
+settings.config.styles.color.play-note=Color de Notas en Reproduccion
+settings.config.styles.color.lines=Color de Lineas Divisorias
+settings.config.styles.printer=Estilos de Impresion
+settings.config.styles.font.printer-default=Fuente por Defecto
+settings.config.styles.font.printer-note=Fuente de Notas
+settings.config.styles.font.printer-time-signature=Fuente de Time Signature
+settings.config.apply-changes-question=Desea aplicar los cambios ahora?
+settings.config.sound=Sonido
+settings.config.skin=Tema de Iconos
+settings.config.skin.choose=Seleccione su Tema de Iconos
+settings.config.toolbars=Barra de Herramientas
+settings.config.toolbars.tip=Personalice su Barra de Herramientas
+settings.config.toolbars.list=Herramientas Disponibles
+settings.config.toolbars.move-up=Mover Arriba
+settings.config.toolbars.move-down=Mover Abajo
+
+settings.keybindings=Configurar Teclas
+key-bindings-editor=Editor de Teclas
+key-bindings-editor-action-select=Seleccione Una Acci\u00F3n
+key-bindings-editor-action-column=Acciones
+key-bindings-editor-shortcut-column=Teclas
+key-bindings-editor-push-a-key=Presione una Tecla
+key-bindings-editor-save-question=Se encontraron cambios sin guardar, desea salir de todos modos?
+key-bindings-editor-override=Ya existe una acci\u00F3n para estas teclas, desea sobreescibirla?
+
+
+print.print=Imprimir
+print.dialog=Imprimir
+print.service=Servicio
+print.service.name=Nombre
+print.service.status=Estado
+print.service.type=Tipo
+print.service.info=Informaci\u00F3n
+print.range=Rango
+print.range.all-pages=Todas las p\u00E1ginas
+print.range.pages=P\u00E1ginas
+print.range.pages-to=A
+print.copies=Copias
+print.copies-number=Numero de copias
+print.print-to-file=Imprimir a archivo
+print.file-chooser=Examinar
+print-header.default-song-name=Sin T\u00EDtulo
+print-header.default-song-author=An\u00F3nimo
+print.preview=Vista Preliminar
+
+marker=Marca
+marker.add=Agregar Marca
+marker.list=Mostrar Marcas
+marker.first=Primera
+marker.last=Ultima
+marker.next=Siguiente
+marker.previous=Anterior
+
+export.tablature-enabled=Mostrar tablatura
+export.score-enabled=Mostrar partitura
+export.black-and-white=Modo Blanco y Negro
+
+scale=Escala
+scale.list=Lista de escalas
+
+text.insert=Insertar Texto
+text.editor=Editor de Texto
+text.text=Texto
+
+tools=Herramientas
+tools.scale=Lista de Escalas
+tools.browser=Explorador de Canciones
+tools.plugins=Configurar Plugins
+tools.shortcuts=Atajos del Teclado
+tools.settings=Preferencias
+tools.transpose=Transponer
+tools.transpose.semitones=Transponer semitonos
+tools.transpose.apply-to-track=Transponer todos los compases
+tools.transpose.apply-to-measure=Transponer solo este compas
+tools.transpose.apply-to-all-tracks=Aplicar a todas las pistas
+tools.transpose.try-keep-strings=Mantener notas en la misma cuerda si es posible
+tools.transpose.apply-to-chords=Transponer acordes
+
+browser.dialog=Explorador de Canciones
+browser.menu.file=Archivo
+browser.open=Abrir
+browser.exit=Salir
+browser.menu.collection=Colecci\u00F3n
+browser.menu.go=Ir
+browser.collection.select=Seleccionar Colecci\u00F3n
+browser.collection.open=Arbir Colecci\u00F3n
+browser.collection.remove=Eliminar Colecci\u00F3n
+browser.collection.close=Cerrar Colecci\u00F3n
+browser.collection.new=A\u00F1adir Colecci\u00F3n
+browser.go-root=Inicio
+browser.go-back=Volver
+browser.refresh=Actualizar
+browser.factory.fs.name=Sistema de Archivos Local
+browser.collection.fs.name=Nombre
+browser.collection.fs.path=Ubicaci\u00F3n
+browser.collection.fs.editor-title=Colecci\u00F3n de Archivos Locales
+browser.collection.fs.editor-tip=Seleccione una Carpeta 
+browser.collection.fs.invalid-path=La carpeta seleccionada es inv\u00E1lida
+
+midi.port=Puerto MIDI
+midi.sequencer=Secuenciador MIDI
+
+plugin.unknown-value=No Disponible
+plugin.column.name=Nombre del Plugin
+plugin.column.enabled=Activo
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Herramientas de archivo
+edit.items=Herramientas de edici\u00F3n
+property.items=Propiedades de canci\u00F3n
+track.items=Herramientas de pistas
+duration.items=Duraciones
+beat.items=Herramientas de pulso
+composition.items=Herramientas de composici\u00F3n
+transport.items=Acciones de reproducci\u00F3n
+marker.items=Acciones de marcas
+layout.items=vista de modos
+view.items=vista de componentes
+effect.items=Effectos
+dynamic.items=Dynamics
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Nuevo archivo
+action.file.open=Abrir archivo
+action.file.open-url=Abrir URL
+
+action.file.save=Guardar
+action.file.save-as=Guardar como
+action.file.print=Imprimir
+action.file.print-preview=Vista Preliminar
+action.file.exit=Cerrar Aplicaci\u00F3n
+action.edit.undo=Deshacer
+action.edit.redo=Rehacer
+action.edit.voice-1=Seleccionar Primer Voz
+action.edit.voice-2=Seleccionar Segunda Voz
+action.composition.change-time-signature=Cambiar time-signature
+action.composition.change-tempo=Cambiar tiempo
+action.composition.change-info=Cambiar informaci\u00F3n de la canci\u00F3n
+action.composition.change-clef=Cambiar clave
+action.composition.change-key-signature=Cambiar armadura
+action.composition.change-triplet-feel=Aspecto de tresillos
+action.view.layout-set-page=Ver modo p\u00E1gina
+action.view.layout-set-linear=Ver modo linear
+action.view.layout-set-multitrack=Ver modo multipista
+action.view.layout-set-compact=Ver Modo compacto
+action.view.layout-set-score-enabled=Mostrar partitura
+action.view.layout-set-tablature-enabled=Mostrar tablatura
+action.view.layout-set-chord-diagram-enabled=Mostrar diagrama de acordes
+action.view.layout-set-chord-name-enabled=Mostrar nombre de acordes
+action.view.show-fretboard=Mostrar m\u00E1stil
+action.view.show-piano=Mostrar piano
+action.view.show-matrix=Mostrar Editor de Matrices
+action.view.show-mixer=Mostrar mezclador de sonidos
+action.view.show-transport=Mostrar Reproductor
+action.track.add=Insertar Pista
+action.track.remove=Borrar pista
+action.track.clone=Clonar Pista
+action.track.go-first=Ir a la primer pista
+action.track.go-last=Ir a la \u00FAltima pista
+action.track.go-next=Ir a la siguiente pista
+action.track.go-previous=Ir a la pista anterior
+action.track.move-down=Mover Abajo
+action.track.move-up=Mover Arriba
+action.track.lyrics=Editar letras
+action.track.properties=Editar propiedades de la pista
+action.measure.add=Agregar Comp\u00E1s
+action.measure.remove=Borrar comp\u00E1s
+action.measure.copy=Copiar comp\u00E1s
+action.measure.paste=Pegar comp\u00E1s
+action.measure.clean=Limpiar comp\u00E1s
+action.measure.go-first=Ir al primer comp\u00E1s
+action.measure.go-last=Ir al \u00FAltimo comp\u00E1s
+action.measure.go-next=Ir al siguiente comp\u00E1s
+action.measure.go-previous=Ir al comp\u00E1s anterior
+action.beat.general.remove-unused-voice=Eliminar la voz no utilizada
+action.beat.general.voice-up=Notas hacia arriba
+action.beat.general.voice-down=Notas hacia abajo
+action.beat.general.voice-auto=Direcci\u00F3n de notas automatica
+action.beat.general.set-stroke-up=Rasgueo ascendente
+action.beat.general.set-stroke-down=Rasgueo decendente
+action.beat.general.move-left=Mover un pulso hacia la izquierda
+action.beat.general.move-right=Mover un pulso hacia la derecha
+action.beat.general.move-custom=Movimiento de pulso personalizado
+action.note.general.clean-beat=Limpiar pulso
+action.note.general.decrement-semitone=Bajar un semitono
+action.note.general.increment-semitone=Subir un semitono
+action.note.general.shift-down=Bajar una cuerda
+action.note.general.shift-up=Subir una cuerda
+action.note.general.tied=Agregar/Quitar ligadura
+action.note.duration.change-dotted=Agregar/Quitar puntillo
+action.note.duration.change-double-dotted=Agregar/Quitar doble puntillo
+action.note.duration.change-division-type=Agregar/Quitar tresillo
+action.note.duration.set-whole=Asignar duraci\u00F3n de redonda
+action.note.duration.set-half=Asignar duraci\u00F3n de blanca
+action.note.duration.set-quarter=Asignar duraci\u00F3n de negra
+action.note.duration.set-eighth=Asignar duraci\u00F3n de corchea
+action.note.duration.set-sixteenth=Asignar duraci\u00F3n de semi-Corchea
+action.note.duration.set-thirty-second=Asignar duraci\u00F3n de fusa
+action.note.duration.set-sixty-fourth=Asignar duraci\u00F3n de semi-fusa
+action.note.duration.decrement-duration=Disminuir duraci\u00F3n
+action.note.duration.increment-duration=Aumentar duraci\u00F3n
+action.note.effect.change-vibrato=Agregar/Quitar vibrato
+action.note.effect.change-bend=Agregar/Quitar bend
+action.note.effect.change-slide=Agregar/Quitar slide
+action.note.effect.change-hammer=Agregar/Quitar martillo
+action.note.effect.change-accentuated=Agregar/Quitar accentuated
+action.note.effect.change-dead=Agregar/Quitar dead note
+action.note.effect.change-fade-in=Agregar/Quitar fade in
+action.note.effect.change-ghost=Agregar/Quitar ghost
+action.note.effect.change-grace=Agregar/Quitar grace
+action.note.effect.change-harmonic=Agregar/Quitar harmonic
+action.note.effect.change-heavy-accentuated=Agregar/Quitar heavy accentuated
+action.note.effect.change-palm-mute=Agregar/Quitar palm mute
+action.note.effect.change-popping=Agregar/Quitar popping
+action.note.effect.change-slapping=Agregar/Quitar slapping
+action.note.effect.change-staccato=Agregar/Quitar staccato
+action.note.effect.change-tapping=Agregar/Quitar tapping
+action.note.effect.change-tremolo-bar=Agregar/Quitar tremolo bar
+action.note.effect.change-tremolo-picking=Agregar/Quitar tremolo picking
+action.note.effect.change-trill=Agregar/Quitar trill
+action.insert.open-repeat=Abrir repetici\u00F3n
+action.insert.close-repeat=Cerrar repetici\u00F3n
+action.insert.chord=Insertar acorde
+action.insert.text=Insertar texto
+action.insert.repeat-alternative=Insertar repetici\u00F3n alternativa
+action.marker.add=Agregar marca
+action.marker.go-next=Ir a la siguiente marca
+action.marker.go-previous=Ir a la marca anterior
+action.transport.play=Reproducir tema
+action.transport.stop=Parar reproducci\u00F3n
+action.transport.metronome=Activar/Desactivar metr\u00F3nonomo
+action.transport.mode=Modo de reproducci\u00F3n
+action.transport.set-loop-start=Marcar inicio de repetici\u00F3n
+action.transport.set-loop-end=Marcar final de repetici\u00F3n
+action.tools.browser=Explorador de canciones
+action.tools.transpose=Transponer notas
+action.settings.configure=Editar preferencias
+action.help.doc=Ayuda
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_eu.properties b/TuxGuitar-testing/platform-all/share/lang/messages_eu.properties
new file mode 100644
index 0000000..65d3f82
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_eu.properties
@@ -0,0 +1,1101 @@
+transport.mode.loop-range=Errepikatu Range
+transport.mode.loop-range.from=Play from measure
+transport.mode.loop-range.from-default=Hasieratik
+transport.mode.loop-range.to=Play to measure
+transport.mode.loop-range.to-default=Bukaeraino
+edit.voice-1=1.go Ahotsa hautatu
+edit.voice-2=2. Ahotsa hautatu
+
+tools.transpose=Transpose
+tools.transpose.semitones=Transposition Semitones
+tools.transpose.apply-to-track=Transpose all measures
+tools.transpose.apply-to-measure=Transpose only this measure
+tools.transpose.apply-to-all-tracks=Apply to all tracks
+tools.transpose.try-keep-strings=Try keep notes at same string when it's possible
+tools.transpose.apply-to-chords=Transpose Chords
+
+action.tools.transpose=Transpose Notes
+
+tuning.strings.transpose=Transpose afected notes.
+tuning.strings.transpose.try-keep-strings=Try keep notes at same string
+tuning.strings.transpose.apply-to-chords=Transpose Chords
+
+composition.date=Data
+composition.copyright="Copyright"-a
+composition.writer=Tab Autorea
+composition.transcriber=Transkribatu duenak
+composition.comments=Iruzkinak
+
+beat.move-left=Move One Beat Left
+beat.move-right=Move One Beat Right
+beat.move-custom=Custom Beat Move
+beat.move-custom.dialog.title=Custom Move
+beat.move-custom.dialog.direction-tip=Move Norabidea
+beat.move-custom.dialog.move-1.tip=Primary Move
+beat.move-custom.dialog.move-2.tip=Secondary Move
+beat.move-custom.dialog.direction=Norabidea
+beat.move-custom.dialog.direction.right=Move To Right
+beat.move-custom.dialog.direction.left=Move To Left
+beat.move-custom.dialog.count=Zenbaketa
+beat.move-custom.dialog.duration=Duration
+beat.move-custom.dialog.duration.type=Dotted/Double-Dotted
+beat.move-custom.dialog.duration.type.normal=Ezer
+beat.move-custom.dialog.duration.division-type=Division Type
+beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet)
+
+action.beat.general.move-left=Move One Beat Left
+action.beat.general.move-right=Move One Beat Right
+action.beat.general.move-custom=Custom Beat Move
+
+measure.add.count=Add Count
+edit.paste.count=Paste Count
+
+export.black-and-white=Beltz-Txuri moduan
+
+fretboard.direction=Norabidea
+
+transport.set-loop-start=Set loop start point
+transport.set-loop-end=Set loop end point
+
+action.transport.set-loop-start=Set loop start point
+action.transport.set-loop-end=Set loop end point
+
+
+ok=Baieztatu
+
+cancel=Ezeztatu
+
+yes=Bai
+
+no=Ez
+
+add=Gehitu
+
+remove=Ezabatu
+
+save=Gorde
+
+exit=Irten
+
+close=Itxi
+
+color=Kolorea
+
+title=Izenburua
+edit=Edizio
+
+go=Joan
+
+error=Akatxa
+
+warning=Oharra
+
+plugins=Plugin-ak
+
+choose=Autatu
+
+plugins=Plugins
+
+options=Opzioak
+
+defaults=Predeterminatutak
+
+clean=Clean
+
+rename=Birnombratu
+
+fret=Cejilla
+
+position=Posizioa
+
+info=Informazioa
+
+name=Izena
+
+author=Autorea
+
+version=Bertsioa
+
+description=Deskribapena
+
+configure=Konfigurazioa
+
+
+tuxguitar.title=TuxGuitar
+
+
+file=Fitxategia
+
+file.new=Berria
+
+file.open=Ireki
+
+file.open-url=Ireki URL-a
+
+file.open.error=Fitxategia ezin da ireki: {0}
+
+file.save=Gorde
+
+file.save-as=Gorde beste izenarekin
+
+file.save.error=Fitxategia gortetzea ez da posible: {0}
+
+file.save-changes-question=Fitxategia aldaketak ditu, Gorde nahi al dituzu?
+
+file.exit=Irten
+
+file.export=Exportatu
+
+file.export-midi=Exportatu Midi
+
+file.export-pdf=Exportatu PDF
+
+file.print=imprimatu
+
+file.print-preview=Itxura Preliminarra
+file.import=Importatu
+
+file.import.error=Ez da posible izan: {0}
+
+file.export-ascii=Exportatu ASCII formatu-ra
+
+file.export.error=Ez da posible izan: {0}
+
+file.history=Historiala
+
+file.overwrite-question=Badago Fitxategi bat izen honekin, Ordezkatu nahi duzu?
+
+
+edit.menu=Edizio
+
+edit.undo=Desegin
+
+edit.redo=Berriro egin
+
+edit.copy=Kopiatu
+
+edit.from=-tik
+edit.to=-raino
+
+edit.all-tracks=Pista guztiak
+
+edit.paste=itsatsi
+
+edit.paste.replace-mode=itsatsi Kompas honetan
+
+edit.paste.insert-mode=itsatsi kompas berri batean
+edit.delete=Ezabatu
+
+edit.cut=Moztu
+edit.mouse-mode-selection=Aldatu punteroa hautatzeko modura
+
+edit.mouse-mode-edition=Aldatu punteroa edizio modura
+
+edit.not-natural-key=Diesi/Bemola
+
+
+view=Ikusi
+
+view.layout=Ikusi
+
+view.layout.page=Horri Moduan
+
+view.layout.linear=Modo Linealean 
+
+view.layout.multitrack=Multipista moduan
+
+view.layout.compact=Modu kompaktoan
+
+view.layout.score-enabled=Erakutsi Partitura
+
+view.layout.tablature-enabled=Erakutsi Tablatura
+
+view.layout.chord-style=Akordeen Estiloa
+
+view.layout.chord-name=Izena erakutsi
+
+view.layout.chord-diagram=Erakutsi Diagrama
+
+view.show-transport=Erakutsi Reproduktorea
+
+view.show-mixer=Erakutsi mixer-a
+
+view.show-piano=Erakutsi Pianoa
+
+view.show-matrix=Mostrar Editor de Matrices
+
+view.show-fretboard=Mastila erakutsi
+
+
+fretboard.background-color=Color de fondo
+
+fretboard.font=Fuente
+
+fretboard.fretpoint-color=Posizio markaren kolorea
+
+fretboard.note-color=Noten kolorea
+
+fretboard.scale-note-color=Eskalako Noten Koloreak
+
+fretboard.string-color=Harien Koloreak
+
+fretboard.settings=Preferencias
+
+fretboard.settings.options=Opzioak
+
+fretboard.display-note-text=Erakutsi notak textu moduan
+fretboard.display-scale-text=Erakutsi eskalen notak textu moduan
+
+fretboard.right-mode=Eskubira
+
+fretboard.left-mode=Ezkerrera
+
+
+piano.editor=Pianoa
+
+piano.natural-key-color=Color de teclas naturales
+
+piano.not-natural-key-color=Color de teclas Sostenido/Bemol
+
+piano.note-color=Color de notas
+
+piano.scale-note-color=Color de notas de escala
+
+piano.settings=Preferencias
+
+
+matrix.editor=Editor de Matrices
+
+matrix.grids=Grillas
+
+matrix.font=Fuente
+
+matrix.border-color=Color de bordes
+
+matrix.foreground-color=Color de fuente y lineas divisorias
+
+matrix.line-color-1=Color de linea #1
+
+matrix.line-color-2=Color de linea #2
+
+matrix.line-color-over=Color de linea seleccionada
+
+matrix.note-color=Color de notas
+
+matrix.play-note-color=Color de notas reproduciendo
+
+matrix.position-color=Color de pulso
+
+matrix.settings=Preferencias
+
+
+composition=Komposizioa
+
+composition.timesignature=Time Signature
+composition.timesignature.Numerator=Numerador
+composition.timesignature.denominator=Denominador
+composition.timesignature.to-the-end=Bukaera Arte
+composition.tempo=Tiempo
+composition.tempo-percent=Porzentaia
+composition.tempo.start-to-end=aplikatu kompas guztiei
+composition.tempo.position-to-end=aplikatu bukatu arte
+composition.tempo.position-to-next=aplikatu hurrengo dembora-markaraino
+
+composition.tempo.invalid=Tempo inv\u00E1lido
+composition.properties=Propietateak
+
+composition.name=Izena
+
+composition.artist=Artista
+
+composition.album=Albuma
+
+composition.author=Autorea
+
+composition.clef=Klavea
+
+composition.clef.treble=Treble
+
+composition.clef.bass=Bass
+
+composition.clef.tenor=Tenor
+
+composition.clef.alto=Alto
+
+composition.clef.to-the-end=aplikatu klave hau bukatu arte
+composition.keysignature=Armadura
+composition.keysignature.natural=Natural
+
+composition.keysignature.sharp-1=1 Sostenido
+composition.keysignature.sharp-2=2 Sostenido
+composition.keysignature.sharp-3=3 Sostenido
+composition.keysignature.sharp-4=4 Sostenido
+composition.keysignature.sharp-5=5 sostenido
+composition.keysignature.sharp-6=6 Sostenido
+composition.keysignature.sharp-7=7 Sostenido
+composition.keysignature.flat-1=1 Bemol
+
+composition.keysignature.flat-2=2 Bemol
+
+composition.keysignature.flat-3=3 Bemol
+
+composition.keysignature.flat-4=4 Bemol
+composition.keysignature.flat-5=5 Bemol
+
+composition.keysignature.flat-6=6 Bemol
+
+composition.keysignature.flat-7=7 Bemol
+composition.keysignature.to-the-end=aplikatu armadura hau bukatu arte
+composition.tripletfeel=Aspecto de Tresillos
+composition.tripletfeel.none=Aspecto normal
+composition.tripletfeel.eighth=Aspecto de tresillos en corcheas
+composition.tripletfeel.sixteenth=Aspecto de tresillos en semi-corcheas
+composition.tripletfeel.to-the-end=aplikatu bukaera arte
+
+
+help=Laguntza
+
+help.help=Laguntza
+
+help.doc=Dokumentazioa
+
+help.about=Honi Buruz
+
+help.about.license=Lizentziari buruz
+
+help.about.authors=Autoreak 
+
+
+help.about.description=Deskribapena
+
+
+instruments.volume=Ganancia
+
+instrument.volume=Bolumena
+
+instrument.channel=CH
+
+instrument.effect-channel=EC
+
+instrument.balance=Balance
+instrument.free=Libre
+instrument.link=Ligado
+
+
+track=Pista
+
+track.number=N�
+
+track.name=Izena
+
+track.color=Kolorea
+
+track.first=Lehengoa
+
+track.last=Azkena
+
+track.previous=Aurrekoa
+
+track.next=Hurrengoa
+
+track.add=Jarri pista
+
+track.remove=Kendu pista
+
+track.instrument=Instrumentua
+
+track.properties=Propietateak
+
+track.properties.general=General
+
+track.clone=Klonatu Pista
+
+track.move-up=Goruntz
+
+track.move-down=Beheruntz
+
+track.name.default-percussion-name=Perkusioa
+
+track.solo=Solo
+
+track.mute=Isildu
+
+track.lyrics=Letren Edizioa
+
+
+lyric.editor=Letren editorea
+
+
+measure=Kompasa
+
+measure.first=Lehenengoa
+
+measure.last=Azkena
+
+measure.previous=Aurrekoa
+measure.next=Hurrengoa
+
+measure.add=Jarri Kompas bat
+measure.remove=Kendu kompasa
+
+measure.copy=Kopiatu Kompasa
+
+measure.paste=itsatsi Kompasa
+measure.clean=Ezabatu Kompasa
+measure.add-before-current-position=Jarri kompasa/k Posizio hau baino lehen
+
+measure.add-after-current-position=Jarri kompasa/k Posizio hau eta gero
+measure.add-at-end=Jarri kompasa azkenean
+
+
+beat=Neurria
+
+beat.clean=Ezabatu neurria
+
+
+note.tiednote=Ligar Nota
+
+note.semitone-up=Subir un semitono
+
+note.semitone-down=Bajar un semitono
+
+note.shift-up=Hari bat goruntz
+note.shift-down=Hari bat beheruntz
+
+duration=Durazioa
+
+duration.whole=Biribila
+
+duration.half=Zuria
+duration.quarter=Beltza
+
+duration.eighth=Kortxea
+
+duration.sixteenth=Semi-Kortxea
+
+duration.thirtysecond=Fusa
+
+duration.sixtyfourth=Semi-Fusa
+
+duration.dotted=Puntiloa
+
+duration.doubledotted=Puntilo Doblea
+duration.tupleto=Tresiloa
+
+
+effects=Efektoak
+
+effects.vibrato=Bibrato
+
+effects.bend=Bend
+
+effects.deadnote=Nota muerta
+effects.slide=Slide
+
+effects.hammer=Hammer-on/Pull-off
+
+effects.tremolo-bar=Tremolo Bar
+
+effects.tremolo-bar-editor=Tremolo Bar Editor
+
+effects.tremolo-bar.dip=Dip
+
+effects.tremolo-bar.dive=Dive
+
+effects.tremolo-bar.release-up=Release Up
+
+effects.tremolo-bar.release-down=Release Down
+
+effects.tremolo-bar.inverted-dip=Inverted Dip
+
+effects.tremolo-bar.return=Return
+
+effects.ghostnote=Ghost Note
+
+effects.accentuatednote=Accentuated Note
+effects.heavyaccentuatednote=Heavy Accentuated Note
+effects.harmonic=armonikoa
+effects.grace=Grace Note
+
+effects.grace-editor=Grace Note Editor
+
+effects.grace.before-beat=Before beat
+
+effects.grace.on-beat=On beat
+
+effects.grace.transition=Transizioa
+
+effects.grace.transition-none=Ezer
+
+effects.grace.transition-bend=Bend
+
+effects.grace.transition-slide=Slide
+
+effects.grace.transition-hammer=Hammer
+
+effects.trill=Trill
+
+effects.trill-editor=Trill Editor
+
+effects.tremolo-picking=Tremolo Picking
+
+effects.tremolo-picking-editor=Tremolo Picking Editor
+
+effects.palm-mute=Palm Mute
+
+effects.staccato=Staccato
+
+effects.tapping=Tapping
+
+effects.slapping=Slapping
+
+effects.popping=Popping
+effects.fade-in=Fade In
+effects.harmonic-editor=Harmonic Editor
+
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key offset
+effects.harmonic.tapped=Tapped Harmonic
+
+effects.harmonic.tapped.left-hand=Left hand
+effects.harmonic.tapped.right-hand=Right hand
+effects.harmonic.pinch=Pinch Harmonic
+
+effects.harmonic.semi=Semi Harmonic
+
+
+
+bend.editor=Bend Editorea
+
+bend.bend=Bend
+
+bend.bend-release=bend/release
+
+bend.bend-release-bend=bend/release/bend
+
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+
+dynamic=Dinamika
+
+dynamic.piano-pianissimo=Piano Pianissimo
+
+dynamic.pianissimo=Pianissimo
+
+dynamic.piano=Piano
+
+dynamic.mezzo-piano=Mezzo Piano
+
+dynamic.mezzo-forte=Mezzo Forte
+
+dynamic.forte=Forte
+
+dynamic.fortissimo=Fortissimo
+dynamic.forte-fortissimo=Forte Fortissimo
+
+
+insert.chord=Jarri Akorde Bat
+
+chord.editor=Akorde Editorea
+
+chord=Akordea
+
+chord.name=Izena
+
+chord.custom=Acorde Personalizado
+
+chord.custom.name-empty-error=Izena Beharrezkoa da.
+
+chord.custom.name-exist-error=Badago akorde bat izen honekin.
+chord.bass=Baxua
+
+chord.settings.tip=Preferencias
+
+chord.settings.type=Tipoa
+
+chord.settings.type.most-common=Most Common
+chord.settings.type.inversions=Inbersioak
+
+chord.settings.type.close-voiced=Close Voiced
+
+chord.settings.type.open-voiced=Open Voiced
+
+chord.settings.open-chords=Open Chords
+
+chord.settings.chords-to-display=Erakusteko prest dauden Akordeak
+
+chord.settings.search-frets=Trasteak
+chord.settings.minimum-fret=Gutxienik
+chord.settings.maximum-fret=Gehienik
+
+transport=Reproduktorea
+
+transport.start=Reproducir
+
+transport.pause=Pausa egin
+
+transport.stop=Gelditu
+
+transport.first=Lehenengo neurria
+
+transport.last=Azken neurria
+
+transport.previous=Aurreko neurria
+
+transport.next=Hurrengo neurria
+transport.mode=Erreproduzio modua
+transport.mode.simple=Modu Normalean
+
+transport.mode.simple.tempo-percent=Denbora Porzentaia
+transport.mode.simple.loop=Errepikatu infinitoki
+transport.mode.trainer=Modo de Entrenamiento
+transport.mode.trainer.increment-description=Areagotu porzentaia 
+
+repetitions=Errepikapenak
+
+repeat.open=Ireki errepikapena
+
+repeat.close=Itxi errepikapena
+
+repeat.number-of-repetitions=Zenbat errepikapen
+repeat.alternative=Errepikapen Alternatiboa
+repeat.alternative.editor=Editar Repetici\u00F3n Alternativa
+
+instrument=Instrumentua
+instrument.instrument=Instrumentoa
+instrument.percussion-track=Perkusio pista
+
+
+tuning=Doinua
+tuning.strings=Hariak
+
+tuning.offset=Offset
+
+
+language=Hizkuntza
+
+
+choose-color=Kolore bat autatu
+
+
+settings=Opzioak
+
+settings.config=Configurar TuxGuitar
+
+settings.config.main=Generalak
+
+settings.config.main.window-title=Izenburua
+
+settings.config.main.window-title.help=Hurrengo Bariableak Izenburua aldazen dute :
+
+settings.config.main.window-title.var.description.appname=Representa el nombre de la aplicaci\u00F3n: TuxGuitar.
+
+settings.config.main.window-title.var.description.appversion=Representa la versi\u00F3n actual de tuxguitar.
+
+settings.config.main.window-title.var.description.filename=Representa el nombre del Fitxategia que se esta editando.
+
+settings.config.main.window-title.var.description.filepath=Representa la ruta del Fitxategia que se esta editando.
+
+settings.config.main.window-title.var.description.songname=Orain irekita dagoen abestiaren izena ordezkatzen du.
+
+settings.config.main.window-title.var.description.songauthor=Orain irekita dagoen abestiaren autorea ordezkatzen du.
+
+settings.config.main.window-title.var.description.songalbum=Orain irekita dagoen abestiaren albuma ordezkatzen du.
+
+settings.config.main.window-title.var.description.songartist=Representa el artista de la canci\u00F3n actual.
+
+settings.config.main.options=Opzioak
+
+settings.config.main.splash-enabled=Mostrar el splash al inicio.
+
+settings.config.main.table.auto-size.enabled=Ajustar autom\u00E1ticamente el tama\u00F1o de la previsualizaci\u00F3n de pistas
+
+settings.config.view=Vista
+
+settings.config.view.mode=Modo de vista
+
+settings.config.view.size=Ajustes de la ventana
+
+settings.config.view.size.maximized=Maximizada
+
+settings.config.view.size.width=Ancho
+
+settings.config.view.size.height=Alto
+
+settings.config.language=Hizkuntza
+
+settings.config.language.choose=Autatu Hizkuntza
+settings.config.styles=Estiloak
+
+settings.config.styles.general=Estilo Generalak
+settings.config.styles.font.default=Fuente por Defecto
+
+settings.config.styles.font.note=Fuente de Notas
+
+settings.config.styles.font.time-signature=Fuente de Time Signature
+
+settings.config.styles.font.lyric=Fuente de Letras
+
+settings.config.styles.font.text=Fuente de Textos
+
+settings.config.styles.color.score-note=Color de Notas de Partitura
+
+settings.config.styles.color.tab-note=Color de Notas de Tablatura
+
+settings.config.styles.color.play-note=Color de Notas en Reproduccion
+
+settings.config.styles.color.lines=Color de Lineas Divisorias
+
+settings.config.styles.printer=Estilos de Impresion
+
+settings.config.styles.font.printer-default=Fuente por Defecto
+
+settings.config.styles.font.printer-note=Fuente de Notas
+
+settings.config.styles.font.printer-time-signature=Fuente de Time Signature
+
+settings.config.apply-changes-question=Aldaketak orain aplikatu nahi al dituzu?
+
+settings.config.sound=Doinua
+
+settings.config.skin=Tema de Iconos
+
+settings.config.skin.choose=Seleccione su Tema de Iconos
+
+settings.config.toolbars=Tresna Barra
+
+settings.config.toolbars.tip=Personalice su Barra de Herramientas
+
+settings.config.toolbars.list=Herramientas Disponibles
+
+settings.config.toolbars.move-up=Mugi gora
+settings.config.toolbars.move-down=Mugi Behera
+
+
+settings.keybindings=Configurar Teclas
+
+key-bindings-editor=Editor de Teclas
+
+key-bindings-editor-action-select=Seleccione Una Acci\u00F3n
+
+key-bindings-editor-action-column=ekintzak
+
+key-bindings-editor-shortcut-column=Teclak
+key-bindings-editor-push-a-key=Sakatu tekla bat
+key-bindings-editor-save-question=Aldaketak aurkitu dira, irten nahi al duzu?
+
+key-bindings-editor-override=Badago ekintz bat tekla hauekin, aldatu nahi al duzu berri honekin?
+
+
+
+print.print=imprimatu
+print.dialog=imprimatu
+
+print.service=Servitzua
+
+print.service.name=Izena
+
+print.service.status=Egoera
+
+print.service.type=Tipoa
+
+print.service.info=Informazioa
+
+print.range=Rango
+
+print.range.all-pages=Horri guztiak
+
+print.range.pages=Horriak
+
+print.range.pages-to=A
+
+print.copies=Kopiak
+
+print.copies-number=Zenbat Kopiak
+
+print.print-to-file=imprimatu fitxategi batera
+
+print.file-chooser=Examinar
+
+print-header.default-song-name=Izenburu gabea
+
+print-header.default-song-author=Anonimoa
+
+print.preview=Vista Preliminar
+
+marker=Marka
+
+marker.add=Marka jarri
+
+marker.list=Erakutsi Markak
+
+marker.first=Lehengoa
+
+marker.last=Azkena
+
+marker.next=Hurrengoa
+
+marker.previous=Aurrekoa
+
+export.tablature-enabled=tablatura erakutsi
+export.score-enabled=partitura erakutsi
+
+scale=Eskalak
+scale.list=Eskalen lista
+
+
+text.insert=Textua idatzi
+
+text.editor=Textu editorea
+
+text.text=Textua
+
+
+tools=Tresnak
+
+tools.scale=Eskala Lista
+tools.browser=Abesti exploratzailea
+
+tools.plugins=Plugin-ak Konfiguratu
+tools.shortcuts=Atajos del Teclado
+
+tools.settings=Preferencias
+
+
+browser.dialog=Abestio Exploratzailea
+
+browser.menu.file=Fitxategia
+
+browser.open=Ireki
+
+browser.exit=Irten
+
+browser.menu.collection=Kolekzioa
+browser.menu.go=Joan
+browser.collection.select=Hautatu Kolekzioa
+
+browser.collection.open=Ireki Kolekzioa
+
+browser.collection.remove=Ezabatu Kolekzioa
+browser.collection.close=Itxi Kolekzioa
+
+browser.collection.new=Kolekzio berria
+browser.go-root=Hasiera
+
+browser.go-back=Itzuli
+
+browser.refresh=Actualizar
+
+browser.factory.fs.name=Fitxategi Sistema Lokala
+
+browser.collection.fs.name=Izena
+browser.collection.fs.path=Ubikazioa
+
+browser.collection.fs.editor-title=Colecci\u00F3n de Fitxategi Localak
+
+browser.collection.fs.editor-tip=Seleccione una Carpeta 
+browser.collection.fs.invalid-path=La carpeta seleccionada es inv\u00E1lida
+
+
+midi.port=Puerto MIDI
+
+midi.sequencer=Secuenciador MIDI
+
+
+plugin.unknown-value=Ez dago hautagai
+plugin.column.name=Plugin-aren Izena
+
+plugin.column.enabled=Martxan
+
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+
+file.items=Fitxategiatarako tresnak
+
+edit.items=Ediziorako tresnak
+
+property.items=abestiaren propietateak
+track.items=Pisteetarako tresnak
+
+duration.items=Duraciones
+
+beat.items=pultsu tresnak
+
+composition.items=Komposiziorako tresnak
+
+transport.items=Acciones de reproducci\u00F3n
+
+marker.items=Acciones de marcas
+
+layout.items=vista de modos
+
+view.items=vista de componentes
+
+effect.items=Efektoak
+
+dynamic.items=Dinamikak
+
+
+#########################
+###Key Binding Actions###
+#########################
+
+action.file.new=Fitxategi berria
+
+action.file.open=Ireki Fitxategia
+
+action.file.open-url=Ireki URL
+
+action.file.save=Gorde
+
+action.file.save-as=Gorde beste izenarekin
+action.file.print=imprimatu
+
+action.file.print-preview=Vista Preliminar
+
+action.file.exit=Itxi
+
+action.edit.undo=Desegin
+
+action.edit.redo=Beregin
+
+action.composition.change-time-signature=Cambiar time-signature
+
+action.composition.change-tempo=Aldatu Dembora
+
+action.composition.change-info=Abestiaren informazioa aldatu
+action.composition.change-clef=Klabea aldatu
+action.composition.change-key-signature=Cambiar armadura
+
+action.composition.change-triplet-feel=Aspecto de tresillos
+
+action.view.layout-set-page=Ikusi horri moduan
+
+action.view.layout-set-linear=Ikusi modu linealean
+
+action.view.layout-set-multitrack=Ikusi multipista moduan
+action.view.layout-set-compact=Ikusi modu kompaktoan
+
+action.view.layout-set-score-enabled=Erakutsi partitura
+
+action.view.layout-set-tablature-enabled=Erakutsi tablatura
+
+action.view.layout-set-chord-diagram-enabled=Erakutsi akordeen diagramak
+
+action.view.layout-set-chord-name-enabled=Erakutsi akordeen izenak
+action.view.show-fretboard=Erakutsi masta
+
+action.view.show-piano=Erakutsi pianoa
+action.view.show-matrix=Mostrar Editor de Matrices
+
+action.view.show-mixer=Mostrar mezclador de sonidos
+
+action.view.show-transport=Mostrar Reproductor
+
+action.track.add=Jarri Pista Berri bat
+action.track.remove=Ezabatu pista
+
+action.track.clone=Klonatu Pista
+
+action.track.go-first=Lehenengo pistaraino
+action.track.go-last=Azken pistaraino
+
+action.track.go-next=Hurrengo pistara
+
+action.track.go-previous=Aurreko pistaraino
+action.track.move-down=Mover Abajo
+
+action.track.move-up=Mover Arriba
+
+action.track.lyrics=Editar letras
+
+action.track.properties=Editatu Pistaren Propietateak
+action.measure.add=Jarri kompas berri bat
+
+action.measure.remove=Ezabatu kompasa
+
+action.measure.copy=Kopiatu kompasa
+
+action.measure.paste=itsatsi Kompasa
+
+action.measure.clean=Limpiar comp\u00E1s
+
+action.measure.go-first=Lehengo kompasaraino
+
+action.measure.go-last=Azken kompasaraino
+
+action.measure.go-next=Hurrengo kompasaraino
+
+action.measure.go-previous=Aurreko kompasera
+
+action.note.general.clean-beat=Limpiar pulso
+action.note.general.decrement-semitone=Semitono bat beheruntz
+action.note.general.increment-semitone=Semitono bat goruntz
+action.note.general.shift-down=Bajar una cuerda
+action.note.general.shift-up=Subir una cuerda
+action.note.general.tied=Jarri/Kendu ligadura
+action.note.duration.change-dotted=Jarri/Kendu puntillo
+action.note.duration.change-double-dotted=Jarri/Kendu doble puntillo
+action.note.duration.change-tupleto=Jarri/Kendu tresillo
+action.note.duration.set-whole=Biribilaren neurria jarri
+
+action.note.duration.set-half=Zuriaren neurria jarri
+
+action.note.duration.set-quarter=Beltzaren neurria jarri
+
+action.note.duration.set-eighth=Asignar duraci\u00F3n de corchea
+action.note.duration.set-sixteenth=Asignar duraci\u00F3n de semi-corchea
+
+action.note.duration.set-thirty-second=Asignar duraci\u00F3n de fusa
+
+action.note.duration.set-sixty-fourth=Asignar duraci\u00F3n de semi-fusa
+
+action.note.duration.decrement-duration=Disminuir duraci\u00F3n
+action.note.duration.increment-duration=Aumentar duraci\u00F3n
+action.note.effect.change-vibrato=Jarri/Kendu vibrato
+action.note.effect.change-bend=Jarri/Kendu bend
+action.note.effect.change-slide=Jarri/Kendu slide
+action.note.effect.change-hammer=Jarri/Kendu martillo
+action.note.effect.change-accentuated=Jarri/Kendu accentuated
+action.note.effect.change-dead=Jarri/Kendu dead note
+action.note.effect.change-fade-in=Jarri/Kendu fade in
+action.note.effect.change-ghost=Jarri/Kendu ghost
+action.note.effect.change-grace=Jarri/Kendu grace
+action.note.effect.change-harmonic=Jarri/Kendu harmonic
+action.note.effect.change-heavy-accentuated=Jarri/Kendu heavy accentuated
+
+action.note.effect.change-palm-mute=Jarri/Kendu palm mute
+action.note.effect.change-popping=Jarri/Kendu popping
+action.note.effect.change-slapping=Jarri/Kendu slapping
+action.note.effect.change-staccato=Jarri/Kendu staccato
+action.note.effect.change-tapping=Jarri/Kendu tapping
+action.note.effect.change-tremolo-bar=Jarri/Kendu tremolo bar
+action.note.effect.change-tremolo-picking=Jarri/Kendu tremolo picking
+action.note.effect.change-trill=Jarri/Kendu trill
+action.insert.open-repeat=Abrir repetici\u00F3n
+
+action.insert.close-repeat=Cerrar repetici\u00F3n
+action.insert.chord=Insertar acorde
+
+action.insert.text=Insertar texto
+
+action.insert.repeat-alternative=Insertar repetici\u00F3n alternativa
+action.marker.add=Kendu marka
+
+action.marker.go-next=Hurrengo markara
+
+action.marker.go-previous=Aurreko marka
+action.transport.play=Reproducir tema
+action.transport.stop=Gelditu
+action.transport.metronome=Activar/Desactivar metr\u00F3nonomo
+action.transport.mode=Modo de reproducci\u00F3n
+action.tools.browser=Abestien exploratzailea
+action.settings.configure=Editar preferencias
+
+action.help.doc=Laguntza
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_fi.properties b/TuxGuitar-testing/platform-all/share/lang/messages_fi.properties
new file mode 100644
index 0000000..0f1cbdf
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_fi.properties
@@ -0,0 +1,688 @@
+ok=Ok 
+cancel=Peruuta 
+yes=Kyll\u00e4 
+no=Ei 
+add=Lis\u00e4\u00e4 
+edit=Muokkaa
+remove=Poista 
+save=Tallenna 
+exit=Lopeta
+close=Sulje 
+choose=Valitse 
+color=V\u00e4ri
+title=Otsikko
+go=Siirry
+warning=Varoitus
+error=Virhe
+plugins=Liit\u00e4nn\u00e4iset 
+options=Valinnat 
+defaults=Oletusarvot
+clean=Tyhjenn\u00e4
+rename=Nime\u00e4 uudelleen
+fret=Otelauta
+position=Sijainti
+name=Nimi 
+author=Tekij\u00e4
+version=Versio
+description=Kuvaus
+info=Info
+configure=M\u00e4\u00e4rit\u00e4 
+url=URL 
+		
+file=Tiedosto 
+file.new=Uusi 
+file.open=Avaa
+file.save=Tallenna 
+file.save-as=Tallenna nimell\u00e4
+file.save-changes-question=Kappaleessa on tallentamattomia muutoksia. \nHaluatko tallentaa muutokset? 
+file.exit=Lopeta
+file.export=Vie
+file.export-midi=Vie MIDI-tiedostona
+file.export-pdf=Vie PDF-dokumenttina
+file.print=Tulosta
+file.print-preview=Tulostuksen esikatselu
+file.import=Tuo
+file.import-midi=Tuo MIDI-tiedosto
+file.export-ascii=Vie ASCII-tekstin\u00e4
+file.history=Viimeksi avatut tiedostot
+file.open-url=Avaa URL 
+file.open.error=Ei voi avata: (0) 
+file.save.error=Ei voi tallentaa: (0) 
+file.import.error=Ei voi tuoda: (0) 
+file.export.error=Ei voi vied\u00e4: (0) 
+file.overwrite-question=T\u00e4m\u00e4 tiedosto on jo olemassa. Haluatko korvata sen? 
+		
+edit.menu=Muokkaa
+edit.undo=Kumoa
+edit.redo=Tee uudelleen
+edit.copy=Kopioi
+edit.from=Mist\u00e4 
+edit.to=Mihin
+edit.all-tracks=Kaikki raidat
+edit.paste=Liit\u00e4 
+edit.paste.count=Liit\u00e4 useita kertoja
+edit.paste.replace-mode=Liit\u00e4 nykyiseen tahtiin
+edit.paste.insert-mode=Liit\u00e4 uutena tahtina
+edit.delete=Poista
+edit.cut=Leikkaa
+edit.mouse-mode-selection=Valintatila
+edit.mouse-mode-edition=Nuottien muokkaus -tila
+edit.not-natural-key=Ylennys/alennus-tila
+edit.voice-1=Valitse \u00e4\u00e4ni 1 
+edit.voice-2=Valitse \u00e4\u00e4ni 2 
+		
+view=N\u00e4yt\u00e4 
+view.layout=Asettelu
+view.layout.page=Sivun ulkoasu
+view.layout.linear=Lineaarinen ulkoasu 
+view.layout.compact=Tiivis ulkoasu
+view.layout.multitrack=Moniraitainen
+view.layout.chord-style=N\u00e4yt\u00e4 soinnusta
+view.layout.chord-name=Soinnun nimi
+view.layout.chord-diagram=Sointukuva
+view.layout.score-enabled=N\u00e4yt\u00e4 nuottiviivasto
+view.layout.tablature-enabled=N\u00e4yt\u00e4 tabulatuuri
+view.show-mixer=N\u00e4yt\u00e4 mikseri
+view.show-fretboard=N\u00e4yt\u00e4 otelauta
+view.show-piano=N\u00e4yt\u00e4 piano
+view.show-matrix=N\u00e4yt\u00e4 matriisi
+view.show-transport=N\u00e4yt\u00e4 soitin
+		
+fretboard.direction=Suunta
+fretboard.right-mode=Oikeak\u00e4tinen
+fretboard.left-mode=Vasenk\u00e4tinen
+fretboard.background-color=Taustav\u00e4ri
+fretboard.display-note-text=N\u00e4yt\u00e4 nuotin nimi
+fretboard.display-scale-text=N\u00e4yt\u00e4 s\u00e4velasteikko
+fretboard.font=Kirjaisinlaji
+fretboard.fretpoint-color=Otelaudan v\u00e4ri
+fretboard.note-color=Nuotin v\u00e4ri
+fretboard.scale-note-color=Soitettavan/valitun nuotin v\u00e4ri
+fretboard.settings=Otelaudan asetukset
+fretboard.string-color=Nauhan v\u00e4ri
+fretboard.settings.options=Valinnat 
+		
+piano.editor=Pianoeditori
+piano.natural-key-color=Valkoisen koskettimen v\u00e4ri
+piano.not-natural-key-color=Mustan koskettimen v\u00e4ri
+piano.note-color=Nuotin v\u00e4ri
+piano.scale-note-color=S\u00e4velasteikon v\u00e4ri
+piano.settings=Pianon asetukset
+		
+matrix.editor=Matriisieditori
+matrix.grids=Pystyviivojen lukum\u00e4\u00e4r\u00e4
+matrix.border-color=Reunan v\u00e4ri
+matrix.font=Kirjasinlaji
+matrix.foreground-color=Edustan v\u00e4ri
+matrix.line-color-1=Parittoman rivin v\u00e4ri
+matrix.line-color-2=Parillisen rivin v\u00e4ri
+matrix.line-color-over=Osoittimen alla olevan rivin v\u00e4ri
+matrix.note-color=Nuotin v\u00e4ri
+matrix.play-note-color=Nuotin v\u00e4ri soitettaessa 
+matrix.position-color=Paikan v\u00e4ri
+matrix.settings=Matriisin asetukset
+		
+composition=Nuottiviivasto
+composition.timesignature=Tahtilaji
+composition.timesignature.Numerator=Osoittaja 
+composition.timesignature.denominator=Nimitt\u00e4j\u00e4 
+composition.timesignature.to-the-end=Loppuun 
+composition.tempo=Tempo 
+composition.tempo-percent=Prosentti
+composition.tempo.invalid=Virheellinen Tempo 
+composition.tempo.start-to-end=Aseta t\u00e4m\u00e4 tempo koko kappaleelle
+composition.tempo.position-to-end=Aseta tempo kappaleen loppuun
+composition.tempo.position-to-next=Aseta tempo seuraavan merkin kohdalle
+composition.properties=Ominaisuudet 
+composition.name=Nimi 
+composition.artist=Esitt\u00e4j\u00e4
+composition.album=Albumi
+composition.author=Tekij\u00e4
+composition.date=P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4 
+composition.copyright=Tekij\u00e4noikeus
+composition.writer=Tabulatuurin luoja
+composition.transcriber=Tekstityksen tekij\u00e4 
+composition.comments=Kommentit 
+composition.tripletfeel=Trioli
+composition.clef=Nuottiavain 
+composition.clef.treble=G-avain
+composition.clef.bass=F-avain
+composition.clef.tenor=Tenori
+composition.clef.alto=Altto
+composition.clef.to-the-end=Aseta t\u00e4m\u00e4 nuottiavain kappaleen loppuun 
+composition.keysignature=S\u00e4vellaji
+composition.keysignature.natural=Palautus
+composition.keysignature.sharp-1=1 ylennys
+composition.keysignature.sharp-2=2 ylennyst\u00e4
+composition.keysignature.sharp-3=3 ylennyst\u00e4
+composition.keysignature.sharp-4=4 ylennyst\u00e4
+composition.keysignature.sharp-5=5 ylennyst\u00e4
+composition.keysignature.sharp-6=6 ylennyst\u00e4
+composition.keysignature.sharp-7=7 ylennyst\u00e4
+composition.keysignature.flat-1=1 alennus
+composition.keysignature.flat-2=2 alennusta
+composition.keysignature.flat-3=3 alennusta
+composition.keysignature.flat-4=4 alennusta
+composition.keysignature.flat-5=5 alennusta
+composition.keysignature.flat-6=6 alennusta
+composition.keysignature.flat-7=7 alennusta
+composition.keysignature.to-the-end=Aseta s\u00e4vellajimerkint\u00e4 kappaleen loppuun
+composition.tripletfeel=Trioli 
+composition.tripletfeel.none=Ei triolia
+composition.tripletfeel.eighth=8-tupletti
+composition.tripletfeel.sixteenth=16-tupletti
+composition.tripletfeel.to-the-end=Aseta trioli kappaleen loppuun
+		
+help=Ohjeet
+help.help=Ohjeet
+help.doc=Dokumentaatio
+help.about=Tietoja ohjelmasta
+help.about.license=Lisenssiehdot 
+help.about.authors=Tekij\u00e4t 
+help.about.description=Kuvaus
+		
+track=Raita 
+track.number=Nro
+track.name=Nimi 
+track.color=V\u00e4ri
+track.first=Ensimm\u00e4inen raita
+track.last=Viimeinen raita
+track.previous=Edellinen raita
+track.next=Seuraava raita
+track.add=Lis\u00e4\u00e4 raita
+track.remove=Poista raita
+track.clone=Kopioi raita
+track.move-up=Siirr\u00e4 yl\u00f6s 
+track.move-down=Siirr\u00e4 alas 
+track.instrument=Instrumentti
+track.properties=Ominaisuudet 
+track.properties.general=Yleiset 
+track.name.default-percussion-name=Ly\u00f6m\u00e4soittimet
+track.lyrics=Sanoitus
+track.solo=Soolo
+track.mute=Hiljenn\u00e4
+
+lyric.editor=Sanoituksen muokkaus
+		
+measure=Tahti
+measure.first=Ensimm\u00e4inen tahti
+measure.last=Viimeinen tahti
+measure.previous=Edellinen tahti
+measure.next=Seuraava tahti
+measure.add=Lis\u00e4\u00e4 tahti
+measure.add.count=Lis\u00e4yksen m\u00e4\u00e4r\u00e4
+measure.add-before-current-position=Lis\u00e4\u00e4 tahti ennen nykyist\u00e4 sijaintia
+measure.add-after-current-position=Lis\u00e4\u00e4 tahti nykyisen sijainnin j\u00e4lkeen
+measure.add-at-end=Lis\u00e4\u00e4 tahti kappaleen loppuun
+measure.remove=Poista tahti
+measure.copy=Kopioi tahti
+measure.paste=Liit\u00e4 tahti
+measure.clean=Tyhjenn\u00e4 tahti
+		
+duration=Kesto
+duration.whole=Kokonuotti
+duration.half=Puolinuotti
+duration.quarter=Nelj\u00e4sosanuotti
+duration.eighth=Kahdeksasosanuotti
+duration.sixteenth=Kuudestoistaosanuotti
+duration.thirtysecond=Kolmaskymmeneskahdesosanuotti
+duration.sixtyfourth=Kuudeskymmenesnelj\u00e4sosanuotti
+duration.dotted=Pisteellinen
+duration.doubledotted=Tuplapisteellinen
+duration.division-type=Trioli
+		
+dynamic=Dynamiikka
+dynamic.piano-pianissimo=Piano Pianissimo 
+dynamic.pianissimo=Pianissimo 
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano
+dynamic.mezzo-forte=Mezzo Forte
+dynamic.forte=Forte 
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo 
+		
+effects=Efektit
+effects.vibrato=Vibraatto
+effects.bend=Venytys (Bend)
+effects.deadnote=Kuollut nuotti (Dead Note)
+effects.slide=Liuku (Slide)
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Paluu
+effects.ghostnote=Haamunuotti (Ghost Note)
+effects.accentuatednote=Aksentti
+effects.heavyaccentuatednote=Voimakas aksentti
+effects.harmonic=Harmooninen
+effects.grace=Etuhele
+effects.grace-editor=Etuheleen muokkaus
+effects.grace.before-beat=Ennen iskua
+effects.grace.on-beat=Iskun kohdalla
+effects.grace.transition=Siirtym\u00e4
+effects.grace.transition-none=Ei mit\u00e4\u00e4n
+effects.grace.transition-bend=Venytys (Bend)
+effects.grace.transition-slide=Liuku (Slide)
+effects.grace.transition-hammer=Hammer
+effects.trill=Trilli
+effects.trill-editor=Trillin muokkaus
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Vasen k\u00e4si
+effects.harmonic.tapped.right-hand=Oikea k\u00e4si
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+		
+bend.editor=Taivutuksen (Bend) muokkaus
+bend.bend=Taivutus (Bend)
+bend.bend-release=Taivutus/Vapautus
+bend.bend-release-bend=Taivutus/Vapautus/Taivutus
+bend.prebend=Esitaivutus (PreBend)
+bend.prebend-release=Esitaivutus/Vapautus
+		
+transport=Soitin
+transport.start=Aloita soitto
+transport.stop=Lopeta soitto
+transport.pause=Keskeyt\u00e4
+transport.first=Ensimm\u00e4inen 
+transport.last=Viimeinen 
+transport.previous=Edellinen 
+transport.next=Seuraava 
+transport.metronome=Metronomi
+transport.mode=Valitse soittotila
+transport.mode.simple=Normaalitila
+transport.mode.simple.tempo-percent=Prosenttia temposta
+transport.mode.simple.loop=Jatkuva soitto 
+transport.mode.trainer=Harjoittelutila
+transport.mode.trainer.increment-description=Temmon kasvatus
+transport.mode.loop-range=Toistov\u00e4li
+transport.mode.loop-range.from=Soita tahdista
+transport.mode.loop-range.from-default=Alusta 
+transport.mode.loop-range.to=Soita tahtiin
+transport.mode.loop-range.to-default=Loppuun 
+transport.set-loop-start=Aseta toiston alkukohta
+transport.set-loop-end=Aseta toiston loppukohta
+		
+instruments.volume=Vahvistus
+instrument.channel=CH 
+instrument.effect-channel=EC
+instrument.volume=\u00c4\u00e4nenvoimakkuus
+instrument.balance=Tasapaino
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Free
+instrument.link=Link
+		
+		
+repeat.open=Kertauksen aloitusmerkki
+repeat.close=Kertauksen lopetusmerkki
+repeat.alternative=Kertauksen vaihtoeht. maalit
+repeat.alternative.editor=Muokkaa vaihtoehtoisia maaleja
+repetitions=Kertausmerkit
+repeat.number-of-repetitions=Kertausten m\u00e4\u00e4r\u00e4
+		
+beat=Isku
+beat.clean=Tyhjenn\u00e4 isku
+beat.voice.remove-unused=Remove Unused Voice
+beat.voice-up=Nuottien varret yl\u00f6s
+beat.voice-down=Nuottien varret alas
+beat.voice-auto=Nuottien varret autom.
+beat.stroke=Stroke
+beat.stroke-up=Upstroke
+beat.stroke-down=Downstroke
+beat.move-left=Siirr\u00e4 yksi isku vasemmalle
+beat.move-right=Siirr\u00e4 yksi isku oikealle
+beat.move-custom=Siirr\u00e4...
+beat.move-custom.dialog.title=Siirr\u00e4
+beat.move-custom.dialog.direction-tip=Move Direction
+beat.move-custom.dialog.move-1.tip=Major Move
+beat.move-custom.dialog.move-2.tip=Fine Move
+beat.move-custom.dialog.direction=Suunta
+beat.move-custom.dialog.direction.right=Siirr\u00e4 oikealle
+beat.move-custom.dialog.direction.left=Siirr\u00e4 vasemmalle
+beat.move-custom.dialog.count=Lukum\u00e4\u00e4r\u00e4
+beat.move-custom.dialog.duration=Kesto
+beat.move-custom.dialog.duration.type=Pisteellinen/tuplapisteellinen
+beat.move-custom.dialog.duration.type.normal=Ei mit\u00e4\u00e4n
+beat.move-custom.dialog.duration.division-type=Jakosuhde
+beat.move-custom.dialog.duration.division-type.normal=Normaali (Tuplet) 
+		
+note=Nuotti
+note.semitone-up=Puolis\u00e4velaskel yl\u00f6s
+note.semitone-down=Puolis\u00e4velaskel alas
+note.shift-up=Siirr\u00e4 yl\u00f6s 
+note.shift-down=Siirr\u00e4 alas 
+note.tiednote=Sidottu nuotti
+note.deadnote=Dead Note
+		
+insert.chord=Lis\u00e4\u00e4 sointu
+chord.editor=Sointueditori
+chord=Suintu
+chord.name=Nimi 
+chord.bass=Basso
+chord.custom=Muokautettu sointu
+chord.custom.name-empty-error=Sointu ei voi olla nimet\u00f6n.
+chord.custom.name-exist-error=Soinnun nimi on jo olemassa. 
+chord.settings.tip=Mukautetut asetukset 
+chord.settings.type=Tyyppi 
+chord.settings.type.most-common=Yleisimm\u00e4t
+chord.settings.type.inversions=Inversions 
+chord.settings.type.close-voiced=Suljettu \u00e4\u00e4ni
+chord.settings.type.open-voiced=Vapaa \u00e4\u00e4ni 
+chord.settings.open-chords=Avaa soinnut
+chord.settings.chords-to-display=N\u00e4yt\u00e4 sointuja (kpl)
+chord.settings.search-frets=Search Frets
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+		
+instrument=Instrumentti
+instrument.instrument=Instrumentti
+instrument.percussion-track=Ly\u00f6m\u00e4soittimien raita
+		
+tuning=Viritys
+tuning.offset=Vastapainona 
+tuning.strings=Kielet
+tuning.strings.transpose=Transponoi nuotit
+tuning.strings.transpose.try-keep-strings=Yrit\u00e4 pit\u00e4\u00e4 nuotit samalla kielell\u00e4
+tuning.strings.transpose.apply-to-chords=Transponoi soinnut
+		
+language=Kieli 
+		
+choose-color=Valitse v\u00e4ri 
+		
+settings=Asetukset
+settings.config=M\u00e4\u00e4rit\u00e4 TuxGuitar 
+settings.config.language=Kieli 
+settings.config.language.choose=Valitse kieli 
+settings.config.styles=Tyylit
+settings.config.styles.general=Yleiset tyylit
+settings.config.styles.printer=Tulostustyylit
+settings.config.styles.font.default=Oletuskirjaisinlaji
+settings.config.styles.font.note=Nuotin fontti
+settings.config.styles.font.lyric=Sanoituksen kirjaisinlaji
+settings.config.styles.font.text=Tekstin kirjaisinlaji
+settings.config.styles.font.time-signature=Tahtilajin kirjaisinlaji
+settings.config.styles.font.printer-default=Tulostuksen oletuskirjaisinlaji
+settings.config.styles.font.printer-note=Tulostuksen nuottien kirjaisinlaji
+settings.config.styles.font.printer-time-signature=Tulostuksen tahtilajin kirjaisinlaji
+settings.config.styles.color.score-note=Nuotin v\u00e4li nuottiviivastolla
+settings.config.styles.color.tab-note=Nuotin v\u00e4ri tabulatuurissa
+settings.config.styles.color.play-note=Soitettavan nuotin v\u00e4ri
+settings.config.apply-changes-question=Haluatko toteuttaa muutokset nyt? 
+settings.config.sound=\u00c4\u00e4ni
+settings.config.main=Yleiset 
+settings.config.main.window-title=Ikkunan otsikko 
+settings.config.main.window-title.help=The following variables will be replaced at the window title:
+settings.config.main.window-title.var.description.appname=This variable represents the Application Name: TuxGuitar
+settings.config.main.window-title.var.description.appversion=This variable represents the version of TuxGuitar.
+settings.config.main.window-title.var.description.filename=This variable represents the name of the opened file
+settings.config.main.window-title.var.description.filepath=This variable represents the path of the opened file
+settings.config.main.window-title.var.description.songname=This variable represents the name of the song
+settings.config.main.window-title.var.description.songauthor=This variable represents the author of the song
+settings.config.main.window-title.var.description.songalbum=This variable represents the album of the song
+settings.config.main.window-title.var.description.songartist=This variable represents the artist of the song
+settings.config.main.options=Valinnat 
+settings.config.main.splash-enabled=N\u00e4yt\u00e4 aloitusruutu k\u00e4ynnistett\u00e4ess\u00e4 
+settings.config.main.table.auto-size.enabled=Salli automaattinen taulukon koon muutos
+settings.config.styles.color.lines=Vaakaviivojen v\u00e4ri
+settings.config.toolbars=Ty\u00f6kalurivit
+settings.config.toolbars.tip=Mukauta ty\u00f6kalurivej\u00e4
+settings.config.toolbars.list=K\u00e4ytett\u00e4viss\u00e4 olevat ty\u00f6kalurivit 
+settings.config.toolbars.move-up=Siirr\u00e4 yl\u00f6s 
+settings.config.toolbars.move-down=Siirr\u00e4 alas 
+settings.config.skin=Teemat
+settings.config.skin.choose=Valitse teema
+settings.keybindings=M\u00e4\u00e4rit\u00e4 n\u00e4pp\u00e4imist\u00f6oikotiet
+		
+key-bindings-editor=N\u00e4pp\u00e4imist\u00f6oikoteiden muokkaus
+key-bindings-editor-action-select=Valitse toiminto
+key-bindings-editor-action-column=Toiminnot
+key-bindings-editor-shortcut-column=N\u00e4pp\u00e4imet
+key-bindings-editor-push-a-key=Paina n\u00e4pp\u00e4int\u00e4 
+key-bindings-editor-save-question=Muutokset ovat tallentamatta. Haluatko lopettaa ilman tallennusta? 
+
+ 
+key-bindings-editor-override=N\u00e4pp\u00e4imist\u00f6oikotie on jo k\u00e4yt\u00f6ss\u00e4. Oletko varma, ett\u00e4 haluat k\u00e4ytt\u00e4\u00e4 sit\u00e4?
+		
+print.print=Tulosta
+print.dialog=Tulosta
+print.service=Palvelu
+print.service.name=Nimi 
+print.service.status=Tila 
+print.service.type=Tyyppi 
+print.service.info=Tiedot
+print.range=Tulostusalue
+print.range.all-pages=Kaikki 
+print.range.pages=Sivut
+print.range.pages-to=Sivuun
+print.copies=Kopiota
+print.copies-number=Kopiom\u00e4\u00e4r\u00e4 
+print.print-to-file=Tulosta tiedostoon 
+print.file-chooser=Valitse 
+print-header.default-song-name=Nimet\u00f6n
+print-header.default-song-author=Nimett\u00f6m\u00e4n 
+		
+print.preview=Tulostuksen esikatselu
+print.preview.page-of=Of
+		
+marker=Merkki
+marker.add=Lis\u00e4\u00e4 merkki
+marker.list=Listaa merkit
+marker.first=Siirry ensimm\u00e4iseen merkkiin
+marker.last=Siirry viimeiseen merkkiin
+marker.next=Siirry seuraavaan merkkiin
+marker.previous=Siirry edelliseen merkkiin
+		
+export.tablature-enabled=N\u00e4yt\u00e4 tabulatuuri
+export.score-enabled=N\u00e4yt\u00e4 nuottiviivasto
+export.chord-name-enabled=N\u00e4yt\u00e4 sointujen nimet
+export.chord-diagram-enabled=N\u00e4yt\u00e4 sointujen kuvat
+export.black-and-white=Mustavalkoinen tila
+		
+scale=S\u00e4velasteikko
+scale.list=S\u00e4velasteikkojen luettelo
+		
+text.insert=Lis\u00e4\u00e4 teksti\u00e4
+text.editor=Tekstieditori
+text.text=Teksti
+		
+tools=Ty\u00f6kalut 
+tools.scale=S\u00e4velasteikkojen luettelo
+tools.browser=Selain
+tools.plugins=Liit\u00e4nn\u00e4iset 
+tools.shortcuts=Pikalinkit
+tools.settings=Asetukset
+		
+tools.transpose=Transponoi
+tools.transpose.semitones=Puolis\u00e4velaskelten m\u00e4\u00e4r\u00e4
+tools.transpose.apply-to-track=Transponoi kaikki tahdit
+tools.transpose.apply-to-measure=Transponoi vain t\u00e4m\u00e4 tahti
+tools.transpose.apply-to-all-tracks=Transponoi kaikki raidat
+tools.transpose.try-keep-strings=Yrit\u00e4 pit\u00e4\u00e4 nuotit samalla kielell\u00e4 jos se on mahdollista.
+tools.transpose.apply-to-chords=Transponoi soinnut
+		
+browser.dialog=Selain
+browser.menu.file=Tiedosto
+browser.open=Avaa
+browser.exit=Lopeta
+browser.menu.collection=Kokoelma
+browser.menu.go=Siirry
+browser.collection.select=Valitse kokoelma
+browser.collection.open=Avaa
+browser.collection.remove=Poista
+browser.collection.close=Sulje
+browser.collection.new=Uusi 
+browser.go-root=Koti 
+browser.go-back=Takaisin 
+browser.refresh=P\u00e4ivit\u00e4
+browser.factory.fs.name=Tiedostoj\u00e4rjestelm\u00e4st\u00e4
+browser.collection.fs.name=Nimi 
+browser.collection.fs.path=Kansio 
+browser.collection.fs.editor-title=Kokoelma tiedostoj\u00e4rjestelm\u00e4st\u00e4
+browser.collection.fs.editor-tip=Valitse kokoelman kansio
+browser.collection.fs.invalid-path=Ole hyv\u00e4 ja valitse kelvollinen kansio 
+		
+midi.port=MIDI-portti 
+midi.sequencer=MIDI-sekvensseri 
+		
+plugin.unknown-value=Ei ole saatavilla
+plugin.column.name=Liit\u00e4nn\u00e4isen nimi
+plugin.column.enabled=Aktiivinen
+		
+		
+#########################		
+###  Tool Bar Items   ###		
+#########################		
+file.items=Tiedosto
+edit.items=Muokkaus
+property.items=Asetukset
+track.items=Raidat
+duration.items=Kesto
+beat.items=Isku
+composition.items=Nuotinnos
+repeat.items=Kertausmerkit
+transport.items=Toisto
+marker.items=Merkit
+insert.items=Lis\u00e4ys
+layout.items=Asettelu
+view.items=N\u00e4kym\u00e4
+effect.items=Efektit
+dynamic.items=Dynamiikka
+		
+#########################		
+###Key Binding Actions###		
+#########################		
+action.file.new=Uusi tiedosto
+action.file.open=Avaa tiedosto 
+action.file.open-url=Avaa URL 
+action.file.save=Tallenna 
+action.file.save-as=Tallenna nimell\u00e4
+action.file.print=Tulosta
+action.file.print-preview=Tulostuksen esikatselu
+action.file.exit=Lopeta TuxGuitar
+action.edit.undo=Kumoa
+action.edit.redo=Tee uudelleen
+action.edit.voice-1=Valitse \u00c4\u00e4ni 1 
+action.edit.voice-2=Valitse \u00c4\u00e4ni 2
+action.composition.change-time-signature=Muuta tahtilajia
+action.composition.change-tempo=Muuta tempoa 
+action.composition.change-info=Muuta kappaleen informaatioa
+action.composition.change-clef=Muuta nuottiavainta
+action.composition.change-key-signature=Muuta s\u00e4vellajia
+action.composition.change-triplet-feel=Muuta triolia
+action.view.layout-set-page=N\u00e4yt\u00e4 sivuasetteluna
+action.view.layout-set-linear=N\u00e4yt\u00e4 jatkuvana asetteluna
+action.view.layout-set-multitrack=N\u00e4yt\u00e4 monta raitaa
+action.view.layout-set-score-enabled=N\u00e4yt\u00e4 nuottiviivasto
+action.view.layout-set-tablature-enabled=N\u00e4yt\u00e4 tabulatuuri
+action.view.layout-set-compact=N\u00e4yt\u00e4 tiiviiss\u00e4 muodossa
+action.view.layout-set-chord-diagram-enabled=N\u00e4yt\u00e4 sointukuvat
+action.view.layout-set-chord-name-enabled=N\u00e4yt\u00e4 sointujen nimet
+action.view.show-fretboard=N\u00e4yt\u00e4 otelauta
+action.view.show-piano=N\u00e4yt\u00e4 Piano 
+action.view.show-matrix=N\u00e4yt\u00e4 matriisi
+action.view.show-mixer=N\u00e4yt\u00e4 mikseri
+action.view.show-transport=N\u00e4yt\u00e4 soitin
+action.track.add=Lis\u00e4\u00e4 raita
+action.track.remove=Poista raita
+action.track.clone=Kopioi raita
+action.track.go-first=Siirry ensimm\u00e4iseen raitaan
+action.track.go-last=Siirry viimeiseen raitaan
+action.track.go-next=Siirry seuraavaan raitaan
+action.track.go-previous=Siirry edelliseen raitaan
+action.track.lyrics=Muokkaa raidan sanoitusta
+action.track.properties=Muokkaa raidan asetuksia
+action.track.move-down=Siirr\u00e4 raitaa alas
+action.track.move-up=Siirr\u00e4 raitaa yl\u00f6s
+action.measure.add=Lis\u00e4\u00e4 tahti
+action.measure.remove=Poista tahti
+action.measure.copy=Kopioi tahti
+action.measure.paste=Liit\u00e4 tahti
+action.measure.clean=Tyhjenn\u00e4 tahti
+action.measure.go-first=Siirry ensimm\u00e4iseen tahtiin
+action.measure.go-last=Siirry viimeiseen tahtiin
+action.measure.go-next=Siirry seuraavaan tahtiin
+action.measure.go-previous=Siirry edelliseen tahtiin
+action.beat.general.remove-unused-voice=Poista k\u00e4ytt\u00e4m\u00e4tt\u00f6m\u00e4t \u00e4\u00e4net
+action.beat.general.voice-up=Siirr\u00e4 varret yl\u00f6s
+action.beat.general.voice-down=Siirr\u00e4 varret alas
+action.beat.general.voice-auto=Aseta varret automaattisesti
+action.beat.general.set-stroke-up=Aseta palkki yl\u00f6s
+action.beat.general.set-stroke-down=Aseta palkki alas
+action.beat.general.move-left=Siirr\u00e4 yksi isku vasemmalle
+action.beat.general.move-right=Siirr\u00e4 yksi isku oikealle
+action.beat.general.move-custom=Siirr\u00e4 iskua
+action.note.general.clean-beat=Puhdas isku
+action.note.general.decrement-semitone=Siirr\u00e4 puolis\u00e4velaskel alas
+action.note.general.increment-semitone=Siirr\u00e4 puolis\u00e4velaskel yl\u00f6s
+action.note.general.shift-down=Siirr\u00e4 alas
+action.note.general.shift-up=Siirr\u00e4 yl\u00f6s
+action.note.general.tied=Lis\u00e4\u00e4 / poista sidottu 
+action.note.duration.set-whole=Aseta kokonuotiksi
+action.note.duration.set-half=Aseta puolinuotiksi
+action.note.duration.set-quarter=Aseta nelj\u00e4sosanuotiksi
+action.note.duration.set-eighth=Aseta kahdeksasosanuotiksi
+action.note.duration.set-sixteenth=Aseta kuudestoistaosanuotiksi
+action.note.duration.set-thirty-second=Aseta kolmaskymmeneskahdesosanuotiksi
+action.note.duration.set-sixty-fourth=Aseta kuudeskymmenesnelj\u00e4sosanuotiksi
+action.note.duration.change-dotted=Lis\u00e4\u00e4 / poista piste 
+action.note.duration.change-double-dotted=Lis\u00e4\u00e4 / poista kaksinkertainen piste
+action.note.duration.change-division-type=Lis\u00e4\u00e4 / poista trioli
+action.note.duration.decrement-duration=V\u00e4henn\u00e4 nuotin kestoa
+action.note.duration.increment-duration=Kasvata nuotin kestoa
+action.note.effect.change-vibrato=Lis\u00e4\u00e4 / poista vibraatto
+action.note.effect.change-bend=Lis\u00e4\u00e4 / poista taivutus (Bend)
+action.note.effect.change-slide=Lis\u00e4\u00e4 / Poista liuku (Slide)
+action.note.effect.change-hammer=Lis\u00e4\u00e4 / poista hammer-on/pull-off 
+action.note.effect.change-accentuated=Lis\u00e4\u00e4 / poista aksentti
+action.note.effect.change-dead=Lis\u00e4\u00e4 / poista kuollut nuotti
+action.note.effect.change-fade-in=Lis\u00e4\u00e4 / poista voimistus
+action.note.effect.change-ghost=Lis\u00e4\u00e4 / poista haamunuotti
+action.note.effect.change-grace=Lis\u00e4\u00e4 / poista etuhele
+action.note.effect.change-harmonic=Lis\u00e4\u00e4 / poista harmoninen 
+action.note.effect.change-heavy-accentuated=Lis\u00e4\u00e4 / poista voimakas aksentti 
+action.note.effect.change-palm-mute=Add/Remove palm mute
+action.note.effect.change-popping=Add/Remove popping
+action.note.effect.change-slapping=Add/Remove slapping
+action.note.effect.change-staccato=Add/Remove staccato
+action.note.effect.change-tapping=Add/Remove tapping
+action.note.effect.change-tremolo-bar=Add/Remove tremolo bar
+action.note.effect.change-tremolo-picking=Add/Remove tremolo picking
+action.note.effect.change-trill=Lis\u00e4\u00e4 / poista Trilli
+action.insert.open-repeat=Kertauksen aloitus
+action.insert.close-repeat=Kertauksen lopetus
+action.insert.repeat-alternative=Kertauksen 2-maali
+action.insert.chord=Lis\u00e4\u00e4 sointu
+action.insert.text=Lis\u00e4\u00e4 teksti\u00e4
+action.marker.add=Lis\u00e4\u00e4 merkki
+action.marker.go-next=Siirry seuraavaan merkkiin
+action.marker.go-previous=Siirry edelliseen merkkin
+action.transport.play=Soita kappale
+action.transport.stop=Lopeta soittaminen
+action.transport.mode=Soittotila 
+action.transport.metronome=Metronomi
+action.transport.set-loop-start=Aseta toiston alkukohta
+action.transport.set-loop-end=Aseta toiston loppukohta
+action.tools.browser=Selain
+action.tools.transpose=Transponoi nuotit
+action.settings.configure=Asetukset
+action.help.doc=Ohjeet
+
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_fr.properties b/TuxGuitar-testing/platform-all/share/lang/messages_fr.properties
new file mode 100644
index 0000000..ecce2f7
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_fr.properties
@@ -0,0 +1,638 @@
+es=Espagnol
+en=Anglais
+fr=Fran�ais
+pl=Polonais
+de=Allemand
+pt=Portuguais
+
+ok=Ok
+cancel=Annuler
+yes=Oui
+no=Non
+add=Ajouter
+remove=Supprimer
+save=Enregistrer
+exit=Quitter
+color=Couleur
+title=Titre
+edit=Editer
+go=Aller
+error=erreur
+warning=Attention
+plugins=Gr�ffons
+choose=Choisir
+options=Options
+defaults=D�fauts
+clean=Vider
+rename=Renommer
+fret=Frette
+position=Position
+
+tuxguitar.title=Tux-Guitar
+
+file=Fichier
+file.new=Nouveau
+file.open=Ouvrir
+file.save=Enregistrer
+file.save-as=Enregistrer sous...
+file.exit=Quitter
+file.export=Exporter
+file.export-midi=Exporter en Midi
+file.export-pdf=Exporter en PDF
+file.print=Imprimer
+file.print-preview=Aper�u avant impression
+file.import=Importer
+file.import-midi=Importer Midi
+file.export-ascii=Exporter ASCII
+file.history=Historique
+file.overwrite-question=Le fichier existe, voulez-vous le remplacer ?
+
+edit.undo=Annuler
+edit.redo=Refaire
+edit.copy=Copier
+edit.from=Depuis
+edit.to=A
+edit.all-tracks=Toutes les Pistes
+edit.paste=Coller
+edit.paste.replace-mode=Coller sur la mesure courante
+edit.paste.insert-mode=Coller dans un nouvelle mesure
+edit.delete=Effacer
+edit.cut=Couper 
+edit.menu=Editer
+edit.mouse-mode-selection=Mode s�lection
+edit.mouse-mode-edition=Mode �dition de partition
+edit.not-natural-key=Mode Sharp/Flat
+
+view=Affichage
+
+view.layout=Affichage
+view.layout.page=Page
+view.layout.linear=Lin�aire
+view.layout.multitrack=Multipiste
+view.layout.score-enabled=Afficher la partition
+
+view.show-transport=Afficher le lecteur
+view.show-mixer=Montrer la table de mixage
+view.show-piano=Afficher Piano
+view.show-fretboard=Montrer le manche
+fretboard.right-mode=Mode droitier
+fretboard.left-mode=Mode gaucher
+
+composition=Composition
+composition.timesignature=Signature rythmique
+composition.timesignature.Numerator=Num�rateur
+composition.timesignature.denominator=D�nominateur
+composition.timesignature.to-the-end=Renvois fin
+composition.tempo=Tempo
+composition.tempo-percent=Pourcent
+composition.properties=Propri�t�s
+composition.name=Nom
+composition.artist=Interpr�te
+composition.album=Album
+composition.author=Auteur
+composition.tempo.invalid=Tempo invalide
+composition.clef=Clef
+composition.clef.treble=Aigus
+composition.clef.bass=Grave
+composition.clef.tenor=T�nor
+composition.clef.alto=Alto
+composition.clef.to-the-end=Appliquer cette armure jusqu'� la fin
+composition.keysignature=Armure
+composition.keysignature.natural=Vierge
+composition.keysignature.sharp-1=1 Di�se
+composition.keysignature.sharp-2=2 Di�ses
+composition.keysignature.sharp-3=3 Di�ses
+composition.keysignature.sharp-4=4 Di�ses
+composition.keysignature.sharp-5=5 Di�ses
+composition.keysignature.sharp-6=6 Di�ses
+composition.keysignature.sharp-7=7 Di�ses
+composition.keysignature.flat-1=1 B�mol
+composition.keysignature.flat-2=2 B�mols
+composition.keysignature.flat-3=3 B�mols
+composition.keysignature.flat-4=4 B�mols
+composition.keysignature.flat-5=5 B�mols
+composition.keysignature.flat-6=6 B�mols
+composition.keysignature.flat-7=7 B�mols
+composition.keysignature.to-the-end=Appliquer cette armure jusqu'� la fin
+composition.tripletfeel=Syncope picking
+composition.tripletfeel.none=Pas de syncope picking
+composition.tripletfeel.eighth=Syncope picking 8th
+composition.tripletfeel.sixteenth=Syncope picking 16th
+composition.tripletfeel.to-the-end=Appliquer la syncope picking jusqu'� la fin
+
+help=Aide
+help.help=Aide
+help.about=A propos
+
+instruments.volume=Gain
+instrument.volume=Volume
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balance
+instrument.free=Free
+instrument.link=Link
+
+track=Piste
+track.number=N�
+track.name=Nom
+track.color=Couleur
+track.first=Premi�re piste
+track.last=Derni�re piste
+track.previous=Piste pr�c�dente
+track.next=Piste suivante
+track.add=Ajouter une piste
+track.remove=Supprimer une piste
+track.instrument=Instrument
+track.instrument.empty=Aucune banque de sons n'a �t� trouv� sur votre syst�me,\nessayez de recompiler Tuxguitar avec votre propre version Java.
+track.properties=Propri�t�s
+track.properties.general=G�n�ral
+track.clone=Dupliquer la piste
+track.move-up=Monter
+track.move-down=Descendre
+track.name.default-percussion-name=Percussion
+track.lyrics=Paroles
+track.solo=Solo
+track.mute=Muet
+
+lyric.editor=Editeur de paroles
+
+measure=Mesure
+measure.first=Premi�re mesure
+measure.last=Derni�re mesure
+measure.previous=Mesure pr�c�dente
+measure.next=Mesure suivante
+measure.add=Ajouter la mesure
+measure.add-before-current-position=Ajouter une mesure avant la position courante
+measure.add-after-current-position=Ajouter une mesure apres la position courante
+measure.add-at-end=Ajouter une mesure a la fin
+measure.remove=Supprimer la mesure
+measure.copy=Copier la mesure
+measure.paste=Coller la mesure
+measure.clean=Vider la mesure
+
+beat=Note
+beat.clean=Note naturelle
+
+note.semitone-up=Ajouter un di�se
+note.semitone-down=Ajouter un b�mol
+note.shift-up=Shift Up
+note.shift-down=Shift Down
+chord=Corde
+chord.name=Nom de la corde
+chord.custom.name-empty-error=La corde doit avoir un nom
+chord.custom.name-exist-error=Ce nom de corde est d�j� utilis�
+dynamic=Dynamic
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano
+dynamic.mezzo-forte=Mezzo Forte
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo
+dynamic.forte-fortissimo=Forte Fortissimo
+duration=Dur�e
+duration.whole=Ronde
+duration.half=Blanche
+duration.quarter=Noire
+duration.eighth=Croche
+duration.sixteenth=Double croche
+duration.thirtysecond=Triple croche
+duration.sixtyfourth=Quadruple croche
+duration.dotted=Point�e
+duration.doubledotted=Double point�e
+duration.division-type=N-tolet
+effects=Effets
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.deadnote=Dead Note
+effects.tremolo-bar=Ajouter un vibrato
+effects.tremolo-bar-editor=Editer le vibrato
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Note �ttouff�e
+effects.accentuatednote=Note accentu�e
+effects.heavyaccentuatednote=Note fortement accentu�e
+effects.harmonic=Note harmonique
+effects.grace=Grace Note
+effects.grace-editor=Editeur Grace Note
+effects.grace.before-beat=Avant le temps
+effects.grace.on-beat=Sur le temps
+effects.grace.transition=Transition
+effects.grace.transition-none=Aucun
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trille
+effects.trill-editor=Editeur de trille
+effects.tremolo-picking=tremolo
+effects.tremolo-picking-editor=Editeur de tremolo
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slap
+effects.popping=Popping
+effects.fade-in=Fade In
+effects.harmonic-editor=Editeur d'harmonique
+effects.harmonic.type-of-harmonic=Type d'harmonique
+effects.harmonic.natural=Harmonique naturelle
+effects.harmonic.artificial=Harmonique artificielle
+effects.harmonic.artificial.key-offset=Key offset
+effects.harmonic.tapped=Harmonique frapp�e
+effects.harmonic.tapped.left-hand=Main gauche
+effects.harmonic.tapped.right-hand=Main Droite
+effects.harmonic.pinch=Pinch Harmonique
+effects.harmonic.semi=Semi Harmonique
+
+bend.editor=Editeur Bend
+bend.bend=Bend
+bend.bend-release=bend/release
+bend.bend-release-bend=bend/release/bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=Lecteur
+transport.start=Jouer
+transport.stop=Stop
+
+repeat.open=Ouvrir r�p�titions
+repeat.close=Fermer r�p�titions
+repetitions=R�p�titions
+repeat.number-of-repetitions=Nombre de r�p�titions
+
+note.tiednote=Note li�e
+insert.chord=Ins�rer une note
+chord.editor=Editeur d'accord
+
+instrument=Instrument
+instrument.instrument=Instrument
+instrument.percussion-track=Piste de percussion
+
+tuning=Accordage
+tuning.strings=Cordes
+tuning.offset=Offset
+
+language=Langage
+
+choose-color=Choisir une couleur
+
+settings=R�glages
+settings.config=Configurer TuxGuitar
+settings.config.main=G�n�ral
+settings.config.main.window-title=Titre de fen�tre
+settings.config.main.window-title.help=The following vars will be replaced at the window title:
+settings.config.main.window-title.help=Les variables suivantes seront remplac�es dans le titre de la fen�tre:
+settings.config.main.window-title.var.description.appname=Variable repr�sentant le nom de l'application : Tuxguitar.
+settings.config.main.window-title.var.description.appversion=Variable repr�sentant la version de TuxGuitar.
+settings.config.main.window-title.var.description.filename=Variable repr�sentant le nom du fichier ouvert.
+settings.config.main.window-title.var.description.filepath=Variable repr�sentant le chemin du fichier ouvert.
+settings.config.main.window-title.var.description.songname=Variable repr�sentant le nom de la chanson.
+settings.config.main.window-title.var.description.songauthor=Variable repr�sentant l'auteur de la chanson.
+settings.config.main.window-title.var.description.songalbum=Variable repr�sentant l'album de la chanson.
+settings.config.main.window-title.var.description.songartist=Variable repr�sentant l'interpr�te de la chanson.
+settings.config.main.options=Options
+settings.config.main.splash-enabled=Afficher l'�cran de d�marrage
+settings.config.view=Affichage
+settings.config.view.mode=Mode d?affichage
+settings.config.view.size=Taille de fen�tre
+settings.config.view.size.maximized=Maximis�
+settings.config.view.size.width=Largeur
+settings.config.view.size.height=Hauteur
+settings.config.language=Langage
+settings.config.language.choose=Choisir une langue
+settings.config.styles=Styles
+settings.config.styles.font.default=Police par d�faut
+settings.config.styles.font.note=Police des notes
+settings.config.styles.font.time-signature=Time Signature Font
+settings.config.styles.font.printer-default=Impression couleur par d�faut
+settings.config.styles.font.printer-note=Impression couleur de note
+settings.config.styles.font.printer-time-signature= Impression Time Signature Font
+settings.config.styles.color.score-note=Partition couleur de note
+settings.config.styles.color.tab-note=Tablature couleur de note
+settings.config.styles.color.play-note=Lecture couleur de note
+settings.config.styles.color.lines=Couleur de lignes horizontales
+settings.config.toolbars=Barre d'outils
+settings.config.apply-changes-question=Appliquer les changements maintenant ?
+settings.config.sound=Son
+settings.config.sound.soundbank=Banque sonore
+settings.config.sound.default-soundbank=Utiliser la banque sonore par d�faut
+settings.config.sound.custom-soundbank= Utiliser la banque sonore alternative
+settings.config.sound.soundbank-restart-message=Vous devez red�marrer Tuxguitar pour que le changement de banque sonore prenne effet
+soundbank.error=Erreur de banque sonore
+soundbank.error.unavailable=Erreur, banque sonore non disponible.
+soundbank.error.custom=Ne peut ouvrir la banque sonore alternative.
+
+settings.keybindings=Configurer les raccourcis
+key-bindings-editor=Editeur de raccourcis
+key-bindings-editor-action-select=S�lectionner une action
+key-bindings-editor-action-column=Actions
+key-bindings-editor-shortcut-column=Raccourcis
+key-bindings-editor-push-a-key=Presser une touche
+key-bindings-editor-save-question=Des modifications ont �t� effectu�, quitter\nsans enregistrer ?
+
+key-bindings-editor-override=Raccourci d�j� utilis� ! Etes vous s�r d?utiliser\ncelui ci ?
+
+
+
+
+print.print=Imprimer
+print.dialog=Imprimer
+print.service=Service
+print.service.name=Nom
+print.service.status=Status
+print.service.type=Type
+print.service.info=Info
+print.range=Range
+print.range.all-pages=Toutes
+print.range.pages=Pages
+print.range.pages-to=A
+print.copies=Copies
+print.copies-number=Nombre de copies
+print.print-to-file=Imprimer dans un fichier
+print.file-chooser=Choisir
+print-header.default-song-name=Untitled
+print-header.default-song-author=Anonyme
+print.preview=Aper�u avant impression
+
+
+marker=Marqueur
+marker.add=Ajouter marqueur
+marker.list=Liste des marqueurs
+marker.first=Aller au premier marqueur
+marker.last= Aller au dernier marqueur
+marker.next= Aller au marqueur suivant
+marker.previous= Aller au marqueur pr�c�dent
+
+export.tablature-enabled=Afficher la tablature
+export.score-enabled=Afficher la partition
+
+scale=Gamme
+scale.list=List de Gammes
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=File Items
+edit.items=Edit Items
+property.items=Property Items
+track.items=Track Items
+duration.items=Duration Items
+beat.items=Note Items
+composition.items=Composition Items
+repeat.items=Repeat Items
+transport.items=Player Items
+marker.items=Marker Items
+insert.items=Ins�rer Items
+layout.items=Layout Items
+view.items=View Items
+effect.items=Effect Items
+dynamic.items=Dynamic Items
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Nouveau fichier
+action.file.open=Ouvrir un fichier
+action.file.save=Enregistrer
+action.file.save-as=Enregistrer sous...
+action.file.print=Imprimer
+action.file.print-preview=Aper�u avant impression
+action.edit.undo=Annuler
+action.edit.redo=Refaire
+action.composition.change-time-signature=Changer la signature rythmique
+action.composition.change-tempo=Changer le tempo
+action.composition.change-info=Changer les informations de la chanson
+action.composition.change-clef=Changer la Clef
+action.composition.change-key-signature=Changer la signature
+action.view.layout-set-page=Monter la mise en page
+action.view.layout-set-linear=Affichage lin�aire
+action.view.layout-set-multitrack=Afficher le mode multipiste
+action.view.layout-set-score-enabled=Afficher la partition
+action.view.show-fretboard=Montrer le manche
+action.view.show-mixer=Montrer la table de mixage
+action.view.show-transport=Afficher le lecteur
+action.view.show-piano=Afficher le clavier
+action.track.add=Ajouter une piste
+action.track.remove=Supprimer la piste
+action.track.clone=Dupliquer la piste
+action.track.go-first=Aller � la premi�re piste
+action.track.go-last=Aller � la derni�re piste
+action.track.go-next=Aller � la piste suivante
+action.track.go-previous=Aller � la piste pr�c�dente
+action.track.properties=Changer les propri�t�s de la piste
+action.track.lyrics=Editer les paroles
+action.measure.add=Ajouter une mesure
+action.measure.remove=Supprimer la mesure
+action.measure.copy=Copier le mesure
+action.measure.paste=Coller la mesure
+action.measure.clean=Vider la mesure
+action.measure.go-first=Aller � la premi�re mesure
+action.measure.go-last=Aller � la derni�re mesure
+action.measure.go-next=Aller � la mesure suivante
+action.measure.go-previous=Aller � la mesure pr�c�dente
+action.note.general.clean-beat=Vider le temps
+action.note.general.decrement-semitone=Baisser d'un demi ton
+action.note.general.increment-semitone=Augmenter d'un demi ton
+action.note.general.shift-down=Shift down
+action.note.general.shift-up=Shift up
+action.note.general.tied=Ajouter/Enlever tied
+action.note.duration.change-dotted=Ajouter/Supprimer point�e
+action.note.duration.change-double-dotted=Ajouter/Supprimer double point�e
+action.note.duration.change-division-type=Ajouter/Supprimer N-tolet
+action.note.effect.change-vibrato=Ajouter/Supprimer Vibrato
+action.note.effect.change-bend=Ajouter/Supprimer bend
+action.note.effect.change-slide=Ajouter/Supprimer Slide
+action.note.effect.change-hammer=Ajouter/Supprimer hammer-on/pull-off
+action.note.effect.change-accentuated=Ajouter/Enlever
+action.note.effect.change-dead=Ajouter/Enlever note morte
+action.note.effect.change-fade-in=Ajouter/Enlever fade in
+action.note.effect.change-ghost=Ajouter/Enlever note fant�me
+action.note.effect.change-grace=Ajouter/Enlever grace
+action.note.effect.change-harmonic=Ajouter/Enlever l'harmonique
+action.note.effect.change-heavy-accentuated=Ajouter/Enlever l'accent (fort)
+action.note.effect.change-palm-mute=Ajouter/Enlever palm mute
+action.note.effect.change-popping=Ajouter/Enlever popping
+action.note.effect.change-slapping=Ajouter/Enlever slap
+action.note.effect.change-staccato=Ajouter/Enlever staccato
+action.note.effect.change-tapping=Ajouter/Enlever tapping
+action.note.effect.change-tremolo-bar=Ajouter/Enlever vibrato
+action.note.effect.change-tremolo-picking=Ajouter/Enlever tr�molo
+action.note.effect.change-trill=Ajouter/Enlever trille
+
+
+
+action.insert.open-repeat=Ouvrir r�p�tition
+action.insert.close-repeat=Fermer r�p�tition
+action.insert.chord=Ins�rer accord
+action.transport.play=Jouer la chanson
+action.transport.stop=Arr�ter de jouer
+
+info=Info
+name=Nom
+author=Auteur
+version=Version
+description=Descripton
+configure=Configurer
+file.open-url=Ouvrir URL
+
+file.open.error=Erreur d'Ouverture : {0}
+file.save.error=Erreur de Sauvegarde : {0}
+file.import.error=Erreur d'Importation : {0}
+file.export.error=Erreur d'Exportation : {0}
+file.save-changes-question=La musique � des changements non sauv�s\nVoulez vous sauver les changements ?
+
+midi.port=Port Midi 
+midi.sequencer=S�quencer Midi
+
+browser.dialog=Navigateur
+browser.menu.file=Fichier
+browser.open=Ouvrir
+browser.exit=Quiter
+browser.menu.collection=Collection
+browser.menu.go=go
+browser.collection.select=Selectionner la Collection
+browser.collection.open=Ouvrir
+browser.collection.remove=Enlever
+browser.collection.close=Fermer
+browser.collection.new=Nouvelle
+browser.go-root=Repertoire Personnel
+browser.go-back=Arriere
+browser.refresh=Rafraichir
+browser.collection.fs.editor-title=Systeme de fichier, Titre de Collection
+browser.collection.fs.editor-tip=Choisir le repertoire de collection
+
+browser.collection.fs.invalid-path=Erreur, choisir un repertoire valide
+
+plugin.unknown-value=Non disponible
+plugin.column.name=Nom du greffon
+plugin.column.enabled=Activ�
+
+view.layout.compact=Compact
+view.layout.chord-style=Style Accord
+view.layout.chord-name=Nom de l'Accord
+view.layout.chord-diagram=Diagramme de l'Accord
+view.layout.tablature-enabled=Afficher la Tablature
+
+view.show-matrix=Afficher la Matrice
+
+matrix.editor=Editeur de la Matrice
+matrix.grids=Numbre de grille
+matrix.border-color=Couleur Bordure
+matrix.font=Fonte
+matrix.foreground-color=Couleur avant plan
+matrix.line-color-1=Couleur Ligne 1
+matrix.line-color-2=Couleur Ligne 2
+matrix.line-color-over=Couleur dessus
+matrix.note-color=Couleur Note
+matrix.play-note-color=Couleur Note jou�e
+matrix.position-color=Couleur Position
+matrix.settings=Param�tres Matrice
+
+help.doc=Documentation
+
+transport.first=Premier
+transport.last=Dernier
+transport.previous=Pr�c�dent
+transport.next=Suivant
+transport.pause=Pause
+transport.mode=Mode Lecture
+transport.mode.simple=Mode Lecture Simple
+transport.mode.simple.tempo-percent=Pourcentage Tempo
+transport.mode.simple.loop=Lecture Boucle
+transport.mode.trainer=Mode Apprentissage
+transport.mode.trainer.increment-description=Incr�ment
+
+repeat.alternative=Alternative r�p�tition
+repeat.alternative.editor=Editer les R�p�titions alternatives
+
+tools=Outils
+tools.scale=Liste gammes
+tools.browser=Navigateur
+tools.plugins=Gr�ffons
+tools.shortcuts=Raccourcis
+tools.settings=Param�tres
+
+text.insert=Ins�rer Texte
+
+settings.config.main.table.auto-size.enabled=Activer le redimentionnement automatique de la table
+settings.config.styles.general=Style General
+settings.config.styles.printer=Style Impression
+settings.config.styles.font.lyric=Fonte Paroles
+settings.config.styles.font.text=Fonte Texte
+settings.config.skin=Masques
+settings.config.skin.choose=Choisir votre masque
+settings.config.toolbars.tip=Personnaliser les barres d'outils
+settings.config.toolbars.list=Barres d'outils Disponibles
+settings.config.toolbars.move-up=D�placer en haut
+settings.config.toolbars.move-down=D�placer en bas
+
+action.file.open-url=Ouvir l'URL
+action.file.exit=Quitter TuxGuitar
+action.insert.text=Ins�rer le Texte
+action.insert.repeat-alternative=Rejouer l'Alternative
+action.composition.change-triplet-feel=Change Triplet Feel
+action.note.duration.set-whole=Whole Duration
+action.note.duration.set-half=Set Half Duration
+action.note.duration.set-quarter=Set Quarter Duration
+action.note.duration.set-eighth=Set Eighth Duration
+action.note.duration.set-sixteenth=Set Sixteenth Duration
+action.note.duration.set-thirty-second=Set Thirty Second Duration
+action.note.duration.set-sixty-fourth=Set Sixty Fourth Duration
+action.note.duration.decrement-duration=Decrementr la Duree
+action.note.duration.increment-duration=Incremente la Duree
+action.track.move-down=D�placer en bas
+action.track.move-up=D�placer en haut
+action.tools.browser=Browser
+action.transport.metronome=M�trononome
+action.transport.mode=Mode
+action.view.show-matrix=Afficher la Matrice
+action.view.layout-set-chord-diagram-enabled=Activer le diagramme d'accord
+action.view.layout-set-chord-name-enabled=Activer le nom de l'accord
+action.view.layout-set-compact=Afficher en mode compact
+action.view.layout-set-tablature-enabled=Afficher la Tablature
+action.marker.add=Ajouter un marker
+action.marker.go-next=Aller au prochain marqueur
+action.marker.go-previous=Aller au pr�c�dent marqueur
+action.settings.configure=Param�tres
+action.help.doc=Aide
+
+chord.bass=Basse
+chord.custom=Accord Personnel
+chord.settings.tip=Param�tre Personnel
+chord.settings.type=Type
+chord.settings.type.most-common=Les plus communs
+chord.settings.type.inversions=Inversions
+chord.settings.type.close-voiced=Fermer la Voie
+chord.settings.type.open-voiced=Ouvrir la Voie
+chord.settings.open-chords=Accords Ouverts
+chord.settings.chords-to-display=Accords � Afficher
+chord.settings.search-frets=Rechercher les Frettes
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+
+fretboard.background-color=Couleur Arriere plan
+fretboard.display-note-text=Afficher le texte de la note
+fretboard.display-scale-text=Afficher le texte de la gamme
+fretboard.font=Fonte
+fretboard.fretpoint-color=Couleur des frettes
+fretboard.note-color=Couleur de la Note
+fretboard.scale-note-color=Couleur de la Gamme
+fretboard.settings=Param�tres de la Fretboard
+fretboard.string-color=Couleur des cordes
+fretboard.settings.options=Options
+
+piano.editor=Editeur Piano
+piano.natural-key-color=Couleur touche naturele
+piano.not-natural-key-color=Couleur touche non naturele
+piano.note-color=Couleur Note
+piano.scale-note-color=Couleur de la note de gamme
+piano.settings=Parametre Piano
+
+mixer=Mixer
+
+#eof "$Id: messages_fr.properties,v 1.14 2008/03/31 18:40:38 rzr Exp $"
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_hu.properties b/TuxGuitar-testing/platform-all/share/lang/messages_hu.properties
new file mode 100644
index 0000000..17bb4a7
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_hu.properties
@@ -0,0 +1,482 @@
+es=Spanyol
+en=Angol
+fr=Francia
+pl=Lengyel
+de=N�met
+pt=Portug�l
+hu=Magyar
+
+ok=Ok
+cancel=M�gsem
+yes=Igen
+no=Nem
+add=Hozz�ad
+edit=Szerkeszt
+remove=Elt�vol�t
+save=Ment�s
+exit=Kil�p�s
+choose=V�lassz
+color=Sz�n
+title=C�mke
+go=Ugr�s
+warning=Figyelmeztet�s
+error=Hiba
+plugins=B�v�tm�nyek
+options=Be�ll�t�sok
+defaults=Alap�rtelmez�s
+clean=Elt�vol�t
+rename=�tnevez
+fret=Bund
+position=Poz�ci�
+
+tuxguitar.title=Tux-Guitar
+
+file=F�jl
+file.new=�j
+file.open=Megnyit�s...
+file.save=Ment�s
+file.save-as=Ment�s m�sk�nt...
+file.exit=Kil�p�s
+file.export=Export�l�s
+file.export-midi=Midi-be
+file.export-pdf=PDF-be
+file.print=Nyomtat�s
+file.print-preview=Nyomtat�si k�p
+file.import=Import�l�s
+file.import-midi=Midi-b�l
+file.export-ascii=ASCII-be
+file.history=El�zm�nyek
+file.overwrite-question=A f�jl m�r l�tezik, fel�l�rod ???
+
+edit.menu=Szerkeszt�s
+edit.undo=Visszavon�s
+edit.redo=�jra
+edit.copy=M�sol�s
+edit.from=Kezdete
+edit.to=V�ge
+edit.all-tracks=Minden S�v
+edit.paste=Beilleszt�s
+edit.paste.replace-mode=Beilleszt�s ebbe az �tembe
+edit.paste.insert-mode=�j �tem besz�r�sa a mostani el�
+edit.delete=T�rl�s
+edit.cut=Kiv�g�s
+edit.mouse-mode-selection=Kijel�l� m�d
+edit.mouse-mode-edition=Kottaszerkeszt� m�d
+edit.not-natural-key=M�dos�t�-szerkeszt� m�d
+
+view=N�zet
+
+view.layout=Elrendez�s
+view.layout.page=Lapszer�en
+view.layout.linear=Egy sorban
+view.layout.multitrack=T�bbs�vos
+
+view.show-mixer=Kever�pult l�tszik
+view.show-fretboard=Git�rnyak l�tszik
+view.show-piano=Billenty�zet l�tszik
+fretboard.right-mode=Jobbkezes
+fretboard.left-mode=Balkezes
+
+composition=Kompoz�ci�
+composition.timesignature=�temmutat�
+composition.timesignature.Numerator=Sz�ml�l�
+composition.timesignature.denominator=Nevez�
+composition.timesignature.to-the-end=A darab v�g�ig
+composition.tempo=Temp�
+composition.tempo-percent=Sz�zal�k
+composition.properties=Tulajdons�gok
+composition.name=C�m
+composition.artist=El�ad�
+composition.album=Album
+composition.author=Szerz�
+composition.tempo.invalid=Hib�s temp�
+composition.tripletfeel=Triol�s alapritmus
+
+help=Seg�ts�g
+help.help=Seg�ts�g
+help.about=N�vjegy
+
+instruments.volume=Er�s�t�s
+instrument.volume=Hanger�
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balansz
+instrument.free=Szabad
+instrument.link=K�z�s
+
+track=S�v
+track.number=N�
+track.name=N�v
+track.color=Sz�n
+track.first=Els� s�v
+track.last=Utols� s�v
+track.previous=El�z� s�v
+track.next=K�vetkez� s�v
+track.add=�j s�v
+track.remove=S�v elt�vol�t�sa
+track.instrument=Hangszer
+track.tunning=Hangol�s
+track.instrument.empty=Nem tal�lhat� midi hangszerk�szlet. Pr�b�ld hozz�ford�tani a TuxGuitar-t a java verzi�dhoz.
+track.properties=Tulajdons�gok
+track.properties.general=�ltal�nos
+track.name.default-percussion-name=Ritmusk�szlet
+track.lyrics=Dalsz�veg
+track.solo=Sz�l�
+track.mute=N�m�t
+
+tunning.offset=K�p�
+lyric.editor=Dalsz�veg szerkeszt�
+
+measure=�tem
+measure.first=Els� �tem
+measure.last=Utols� �tem
+measure.previous=El�z� �tem
+measure.next=K�vetkez� �tem
+measure.add=�j �tem
+measure.add-before-current-position=�tem besz�r�sa a mostani el�
+measure.add-after-current-position=�tem besz�r�sa a mostani ut�n
+measure.add-at-end=�j �tem hozz�ad�sa a darab v�g�hez
+measure.remove=�tem elt�vol�t�sa
+measure.copy=�tem m�sol�sa
+measure.paste=�tem beilleszt�se
+measure.clean=Csendes �tem
+
+duration=Hanghossz
+duration.whole=Eg�sz
+duration.half=F�l
+duration.quarter=Negyed
+duration.eighth=Nyolcad
+duration.sixteenth=Tizenhatod
+duration.thirtysecond=Harmincketted
+duration.sixtyfourth=Hatvannegyed
+duration.dotted=Ny�jtott
+duration.doubledotted=Dupl�n ny�jtott
+duration.division-type=Osztott ritmus
+
+dynamic=Dinamika
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Effektusok
+effects.vibrato=Vibr�t�
+effects.bend=Hajl�t�s
+effects.deadnote=Tomp�tott hang
+effects.slide=Cs�sztat�s
+effects.hammer=Kalap�cs/felenged�s
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Ghost Note
+effects.accentuatednote=Hangs�ly
+effects.heavyaccentuatednote=Er�sebb hangs�ly
+effects.harmonic=Harmonic
+effects.grace=D�sz�t�hang
+effects.grace-editor=D�sz�t�hang-szerkeszt�
+effects.grace.before-beat=�t�s el�tt
+effects.grace.on-beat=�t�sre
+effects.grace.transition=�tmenet
+effects.grace.transition-none=Nincs
+effects.grace.transition-bend=Hajl�t�s
+effects.grace.transition-slide=Cs�sztat�s
+effects.grace.transition-hammer=Kalap�cs
+effects.trill=Trilla
+effects.trill-editor=Trilla-szerkeszt�
+effects.tremolo-picking=Tremol� penget�s
+effects.tremolo-picking-editor=Tremol� penget�s szerkeszt�
+effects.palm-mute=Fojt�s teny�rrel
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Be�sztat�s
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key offset
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Bal k�z
+effects.harmonic.tapped.right-hand=Jobb k�z
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+
+bend.editor=Hajl�t�s Szerkeszt�
+bend.bend=Hajl�t�s
+bend.bend-release=Hajl�t�s/vissza
+bend.bend-release-bend=Hajl�t�s/vissza/hajl�t�s
+bend.prebend=El�k�sz�tett
+bend.prebend-release=El�k�sz�tett/vissza
+
+transport=Lej�tsz�
+transport.start=Lej�tsz�s/sz�net
+transport.stop=Le�ll�t�s
+
+repeat.open=Ism�tl�s kezdete
+repeat.close=Ism�tl�s v�ge
+repetitions=Ism�tl�sek
+repeat.number-of-repetitions=Ism�tl�sek sz�ma
+
+beat=Hangjegy
+beat.clean=Hang/akkord t�rl�se
+
+note.semitone-up=F�lhanggal feljebb
+note.semitone-down=F�lhanggal lejjebb
+note.shift-up=Magasabb h�ron
+note.shift-down=M�lyebb h�ron
+note.tiednote=�tk�t�tt hang
+note.deadnote=Tomp�tott hang
+
+insert.chord=Akkord besz�r�sa
+chord.editor=Akkordszerkeszt�
+chord=Akkord
+chord.name=Akkord neve
+chord.custom.name-empty-error=Nevezd el az akkordot.
+chord.custom.name-exist-error=M�r l�tezik ilyen nev� akkord.
+
+instrument=Hangszer
+instrument.instrument=Hangszer
+instrument.percussion-track=Ritmusk�szlet
+
+tunning=Hangol�s
+tunning.strings=H�rok
+
+language=Nyelv
+
+choose-color=V�lassz sz�nt
+
+
+settings=Be�ll�t�sok
+settings.config=TuxGuitar testreszab�sa
+settings.config.view=N�zet
+settings.config.view.mode=Elrendez�s m�dja
+settings.config.view.size=Ablakm�ret
+settings.config.view.size.maximized=Teljes m�ret�
+settings.config.view.size.width=Sz�less�g
+settings.config.view.size.height=Magass�g
+settings.config.language=Nyelv
+settings.config.language.choose=V�lassz nyelvet
+settings.config.styles=Kin�zet
+settings.config.styles.font.default=Alap bet�t�pus
+settings.config.styles.font.note=Hangjegy bet�t�pusa
+settings.config.styles.font.time-signature=�temmutat� bet�t�pusa
+settings.config.styles.font.printer-default=Nyomtat�si alap bet�t�pus
+settings.config.styles.font.printer-note=Nyomtat�si hangjegy bet�t�pusa
+settings.config.styles.font.printer-time-signature=Nyomtat�si �temmutat� bet�t�pusa
+settings.config.styles.color.score-note=Hangjegy sz�ne
+settings.config.styles.color.tab-note=Tabulat�ra sz�ne
+settings.config.styles.color.play-note=Lej�tszott hang sz�ne
+settings.config.apply-changes-question=Alkalmazod a be�ll�t�sokat?
+settings.config.sound=Hang
+settings.config.sound.soundbank=Hangszerk�szlet
+settings.config.sound.default-soundbank=Alap hangszerk�szlet
+settings.config.sound.custom-soundbank=Egy�ni hangszerk�szlet
+settings.config.sound.soundbank-restart-message=A v�ltoz�sok �rv�nybe l�p�s�hez �jra kell ind�tanod a TuxGuitar-t!
+settings.config.main=�ltal�nos
+settings.config.main.window-title=Ablak c�msora
+settings.config.main.window-title.help=Az al�bbi v�ltoz�k haszn�lhat�ak az ablak c�msor�ban:
+settings.config.main.window-title.var.description.appname=A program neve, teh�t: TuxGuitar
+settings.config.main.window-title.var.description.appversion=A program verzi�ja
+settings.config.main.window-title.var.description.filename=A megnyitott f�jl neve
+settings.config.main.window-title.var.description.filepath=A megnyitott f�jl el�r�si �tvonala
+settings.config.main.window-title.var.description.songname=A darab c�me
+settings.config.main.window-title.var.description.songauthor=A darab szerz�je
+settings.config.main.window-title.var.description.songalbum=Az album c�me
+settings.config.main.window-title.var.description.songartist=A darab el�ad�ja
+settings.config.main.options=Be�ll�t�sok
+settings.config.main.splash-enabled=Ind�t�k�p megjelen�t�se
+settings.config.styles.color.lines=V�zszintes vonalak sz�ne
+settings.config.toolbars=Eszk�zt�rak
+
+soundbank.error=Hangszerk�szlet Hiba
+soundbank.error.unavailable=Nincs hangszerk�szlet Hiba.
+soundbank.error.custom=Nem siker�lt megnyitni az egy�ni hangszerk�szlet f�jlt.
+
+settings.keybindings=Gyorsbillenty�k be�ll�t�sa
+key-bindings-editor=Gyorsbillenty� szerkeszt�
+key-bindings-editor-action-select=< V�lassz m�veletet >
+key-bindings-editor-action-column=M�veletek
+key-bindings-editor-shortcut-column=Billenty�k
+key-bindings-editor-push-a-key=Nyomj egy billenty�t
+key-bindings-editor-save-question=Vannak m�g nem mentett v�ltoztat�sok. Biztosan kil�psz ment�s n�lk�l?
+key-bindings-editor-override=A kombin�ci� m�r foglalt! Biztos ezt szeretn�d haszn�lni ?
+
+
+
+print.print=Nyomtat�s
+print.dialog=Nyomtat�s
+print.service=Szolg�ltat�s
+print.service.name=Eszk�zn�v
+print.service.status=�llapot
+print.service.type=T�pus
+print.service.info=Inform�ci�
+print.range=Tartom�ny
+print.range.all-pages=Minden oldal
+print.range.pages=Oldalak
+print.range.pages-to= - 
+print.copies=M�solatok
+print.copies-number=P�ld�nysz�m
+print.print-to-file=F�jlba nyomtat�s
+print.file-chooser=Tall�z�s
+print-header.default-song-name=Nincs c�m
+print-header.default-song-author=Anonymous
+print.preview=Nyomtat�si k�p
+
+
+
+
+view.layout.score-enabled=Kotta l�tszik
+view.show-transport=Lej�tsz� l�tszik
+
+composition.clef=Kulcs
+composition.clef.treble=Violin
+composition.clef.bass=Basszus
+composition.clef.tenor=Tenor
+composition.clef.alto=Alt
+composition.clef.to-the-end=Maradjon ez a darab v�g�ig
+
+composition.keysignature=El�jegyz�s
+composition.keysignature.natural=Nincs
+composition.keysignature.sharp-1=1 kereszt
+composition.keysignature.sharp-2=2 kereszt
+composition.keysignature.sharp-3=3 kereszt
+composition.keysignature.sharp-4=4 kereszt
+composition.keysignature.sharp-5=5 kereszt
+composition.keysignature.sharp-6=6 kereszt
+composition.keysignature.sharp-7=7 kereszt
+composition.keysignature.flat-1=1 b�
+composition.keysignature.flat-2=2 b�
+composition.keysignature.flat-3=3 b�
+composition.keysignature.flat-4=4 b�
+composition.keysignature.flat-5=5 b�
+composition.keysignature.flat-6=6 b�
+composition.keysignature.flat-7=7 b�
+composition.keysignature.to-the-end=Maradjon ez a darab v�g�ig
+composition.tripletfeel=Triol�s alapritmus
+composition.tripletfeel.none=Nincs triol�s alapritmus
+composition.tripletfeel.eighth=Triol�s 8-adok
+composition.tripletfeel.sixteenth=Triol�s 16-odok
+composition.tripletfeel.to-the-end=Maradjon ez a darab v�g�ig
+
+track.clone=S�v kl�noz�sa
+track.move-up=Mozgat�s fel
+track.move-down=Mozgat�s le
+
+marker=Jelz�
+marker.add=�j jelz�
+marker.list=Jelz�lista
+marker.first=Els� jelz�h�z
+marker.last=Utols� jelz�h�z
+marker.next=K�vetkez� jelz�h�z
+marker.previous=El�z� jelz�h�z
+
+export.tablature-enabled=Tabulat�ra l�tszik
+export.score-enabled=Kotta l�tszik
+
+scale=Sk�la
+scale.list=Sk�l�k list�ja
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=F�jl eszk�zt�r
+edit.items=Szerkeszt�s eszk�zt�r
+property.items=Tulajdons�gok eszk�zt�r
+track.items=S�vok eszk�zt�r
+duration.items=Hanghossz eszk�zt�r
+beat.items=Hangjegy eszk�zt�r
+composition.items=Kompoz�ci� eszk�zt�r
+repeat.items=Ism�tl�sek eszk�zt�r
+player.items=Lej�tsz� eszk�zt�r
+marker.items=Jelz�k eszk�zt�r
+insert.items=Besz�r�s eszk�zt�r
+layout.items=Elrendez�s eszk�zt�r
+view.items=N�zet eszk�zt�r
+effect.items=Effektusok eszk�zt�r
+dynamic.items=Dinamika eszk�zt�r
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=�j f�jl
+action.file.open=F�jl megnyit�sa
+action.file.save=Ment�s
+action.file.save-as=Ment�s m�sk�nt
+action.file.print=Nyomtat�s
+action.file.print-preview=Nyomtat�si k�p
+action.edit.undo=Visszavon�s
+action.edit.redo=�jra
+action.composition.change-time-signature=�temmutat� v�ltoztat�sa
+action.composition.change-tempo=Temp� v�ltoztat�sa
+action.composition.change-info=Dal tulajdons�gainak szerkeszt�se
+action.composition.change-clef=Kulcs v�ltoztat�sa
+action.composition.change-key-signature=El�jegyz�s v�ltoztat�sa
+action.view.layout-set-page=Lapszer� elrendez�s
+action.view.layout-set-linear=Egysoros elrendez�s
+action.view.layout-set-multitrack=T�bbs�vos m�d
+action.view.layout-set-score-enabled=Kotta megjelen�t�se
+action.view.show-fretboard=Git�rnyak megjelen�t�se
+action.view.show-piano=Billenty�zet megjelen�t�se
+action.view.show-mixer=Kever�pult megjelen�t�se
+action.view.show-transport=Lej�tsz� megjelen�t�se
+action.track.add=�j s�v
+action.track.remove=S�v elt�vol�t�sa
+action.track.clone=S�v kl�noz�sa
+action.track.go-first=Els� s�v
+action.track.go-last=Utols� s�v
+action.track.go-next=K�vetkez� s�v
+action.track.go-previous=El�z� s�v
+action.track.lyrics=S�v dalsz�veg�nek szerkeszt�se
+action.track.properties=S�v tulajdons�gainak szerkeszt�se
+action.measure.add=�j �tem
+action.measure.remove=�tem elt�vol�t�sa
+action.measure.copy=�tem m�sol�sa
+action.measure.paste=�tem beilleszt�se
+action.measure.clean=Csendes �tem
+action.measure.go-first=Ugr�s az els� �temre
+action.measure.go-last=Ugr�s az utols� �temre
+action.measure.go-next=Ugr�s a k�vetkez� �temre
+action.measure.go-previous=Ugr�s az el�z� �temre
+action.note.general.clean-beat=Hang/akkord t�rl�se
+action.note.general.decrement-semitone=F�lhanggal lejjebb
+action.note.general.increment-semitone=F�lhanggal feljebb
+action.note.general.shift-down=M�lyebb h�ron
+action.note.general.shift-up=Magasabb h�ron
+action.note.general.tied=�tk�t�tt hang
+action.note.duration.change-dotted=Ny�jtott hang
+action.note.duration.change-double-dotted=Dupl�n ny�jtott hang
+action.note.duration.change-division-type=Osztott ritmus
+action.note.effect.change-vibrato=Vibr�t�
+action.note.effect.change-bend=Hajl�t�s
+action.note.effect.change-slide=Cs�sztat�s
+action.note.effect.change-hammer=Kalap�cs/felenged�s
+action.note.effect.change-accentuated=Hangs�ly
+action.note.effect.change-dead=Tomp�tott hang
+action.note.effect.change-fade-in=Be�sztat�s
+action.note.effect.change-ghost=Add/Remove ghost
+action.note.effect.change-grace=D�sz�t�hang
+action.note.effect.change-harmonic=Add/Remove harmonic
+action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated
+action.note.effect.change-palm-mute=Fojt�s teny�rrel
+action.note.effect.change-popping=Add/Remove popping
+action.note.effect.change-slapping=Add/Remove slapping
+action.note.effect.change-staccato=Staccato
+action.note.effect.change-tapping=Add/Remove tapping
+action.note.effect.change-tremolo-bar=Add/Remove tremolo bar
+action.note.effect.change-tremolo-picking=Tremol� penget�s
+action.note.effect.change-trill=Trilla
+action.insert.open-repeat=Ism�tl�s kezdete
+action.insert.close-repeat=Ism�tl�s v�ge
+action.insert.chord=Akkord besz�r�sa
+action.transport.play=Lej�tsz�s/sz�net
+action.transport.stop=Le�ll�t�s
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_it.properties b/TuxGuitar-testing/platform-all/share/lang/messages_it.properties
new file mode 100644
index 0000000..607efbb
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_it.properties
@@ -0,0 +1,646 @@
+ok=Ok
+cancel=Annulla
+yes=S\u00ec
+no=No
+add=Aggiungi
+edit=Modifica
+remove=Rimuovi
+save=Salva
+exit=Esci
+choose=Scegli
+color=Colore
+title=Titolo
+go=Vai
+warning=Attenzione
+error=Errore
+plugins=Plugin
+options=Opzioni
+defaults=Predefinito
+clean=Elimina
+rename=Rinomina
+fret=Tasto
+position=Posizione
+close=Chiudi
+author=Autore
+version=Versione
+description=Descrizione
+name=Nome
+configure=Configura
+info=Informazioni
+
+tuxguitar.title=Tux-Guitar
+
+file=File
+file.new=Nuovo
+file.open=Apri
+file.open-url=Apri URL
+file.open.error=Impossibile Aprire: {0}
+file.save=Salva
+file.save-changes-question=La canzone \u00e8 stata modificata.\nVuoi salvare le modifiche?
+file.save-as=Salva come
+file.save.error=Impossibile Salvare: {0}
+file.exit=Esci
+file.export=Esporta
+file.export-midi=Esporta Midi
+file.export-pdf=Esporta PDF
+file.export.error=Impossibile Esportare: {0}
+file.print=Stampa
+file.print-preview=Anteprima di Stampa
+file.import=Importa
+file.import-midi=Importa Midi
+file.import.error=Impossibile Importare: {0}
+file.export-ascii=Esporta ASCII
+file.history=Cronologia
+file.overwrite-question=Questo file esiste gi\u00e0, vuoi sovrascriverlo??
+
+edit.menu=Modifica
+edit.undo=Annulla
+edit.redo=Ripeti
+edit.copy=Copia
+edit.from=Da
+edit.to=A
+edit.all-tracks=Tutte le tracce
+edit.paste=Incolla
+edit.paste.replace-mode=Incolla nella Misura corrente
+edit.paste.insert-mode=Incolla in una nuova Misura
+edit.delete=Elimina
+edit.cut=Taglia
+edit.mouse-mode-selection=Modalit\u00e0 Selezione
+edit.mouse-mode-edition=Modalit\u00e0 Modifica Pentagramma
+edit.not-natural-key=Modalit\u00e0 Diesis/Bemolle
+
+view=Vista
+
+view.layout=Struttura
+view.layout.page=Struttura a Pagina
+view.layout.linear=Struttura Lineare
+view.layout.multitrack=Multitraccia
+view.layout.compact=Compatto
+view.layout.chord-style=Stile Accordo
+view.layout.chord-name=Nome Accordo
+view.layout.chord-diagram=Schema Accordo
+view.layout.score-enabled=Mostra Valore
+view.layout.tablature-enabled=Mostra Tablatura
+
+view.show-mixer=Mostra Mixer
+view.show-fretboard=Mostra Tastiera Chitarra
+view.show-piano=Mostra Piano
+
+fretboard.right-mode=Modo destro
+fretboard.left-mode=Modo sinistro
+fretboard.background-color=Colore Sfondo
+fretboard.display-note-text=Mostra Nome Nota
+fretboard.display-scale-text=Mostra Nome Scala
+fretboard.font=Carattere
+fretboard.fretpoint-color=Colore Manico
+fretboard.note-color=Colore Nota
+fretboard.scale-note-color=Colore Nota Scala
+fretboard.settings=Impostazioni Manico
+fretboard.string-color=Colore Stringa
+fretboard.settings.options=Opzioni
+
+piano.editor=Editor Piano
+piano.natural-key-color=Colore Scala Naturale
+piano.not-natural-key-color=Colore Scala Non-Naturale
+piano.note-color=Colore Nota
+piano.scale-note-color=Colore Nota Scala
+piano.settings=Impostazioni Piano
+
+composition=Composizione
+composition.timesignature=Tempo
+composition.timesignature.Numerator=Numeratore
+composition.timesignature.denominator=Denominatore
+composition.timesignature.to-the-end=Fino alla Fine
+composition.tempo=Velocit\u00e0 Tempo
+composition.tempo-percent=Percentuale
+composition.tempo.start-to-end=Applica questo tempo all'intera canzone
+composition.tempo.position-to-end=Applica questo tempo alla fine
+composition.tempo.position-to-next=Applica questo tempo fino al prossimo indicatore
+composition.properties=Propriet\u00e0
+composition.name=Nome
+composition.artist=Artista
+composition.album=Album
+composition.author=Autore
+composition.tempo.invalid=Tempo non valido
+composition.tripletfeel=Suona come terzina
+
+help=Aiuto
+help.help=Aiuto
+help.about=Informazioni
+help.about.license=Licenza
+help.about.authors=Autori
+help.about.description=Descrizione
+
+instruments.volume=Gain
+instrument.volume=Volume
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Bilanciamento
+instrument.free=Libero
+instrument.link=Link
+
+track=Traccia
+track.number=N\u00b0
+track.name=Nome
+track.color=Colore
+track.first=Prima traccia
+track.last=Ultima traccia
+track.previous=Traccia Precedente 
+track.next=Traccia Successiva
+track.add=Aggiungi traccia
+track.remove=Rimuovi traccia
+track.instrument=Strumento
+track.instrument.empty=Non \u00e8 stato trovato alcun database di suoni nel tuo sistema midi, prova a ricompilare Tuxguitar nella tua versioe Java. 
+track.properties=Propriet\u00e0
+track.properties.general=Generale
+track.name.default-percussion-name=Percussioni
+track.lyrics=Testo
+track.solo=Solo
+track.mute=Mute
+
+lyric.editor=Modifica Testo
+
+measure=Misura
+measure.first=Prima misura
+measure.last=Ultima misura
+measure.previous=Misura precedente
+measure.next=Misura successiva
+measure.add=Aggiungi misura
+measure.add-before-current-position=Aggiungi misura prima della posizione corrente
+measure.add-after-current-position=Aggiungi misura dopo la posizione corrente
+measure.add-at-end=Aggiungi misura alla fine
+measure.remove=Rimuovi misura
+measure.copy=Copia misura
+measure.paste=Incolla Misura
+measure.clean=Elimina misura
+
+duration=Durata
+duration.whole=Semibreve
+duration.half=Minima
+duration.quarter=Semiminima
+duration.eighth=Croma
+duration.sixteenth=Semicroma
+duration.thirtysecond=Biscroma
+duration.sixtyfourth=Semibiscroma
+duration.dotted=Punto
+duration.doubledotted=Doppio Punto
+duration.division-type=Tupleto
+
+dynamic=Dinamica
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Effetti
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Nota stoppata
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Whammy Bar     
+effects.tremolo-bar-editor=Modifica Whammy Bar
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Nota Fantasma
+effects.accentuatednote=Nota accentuata
+effects.heavyaccentuatednote=Nota fortemente accentuata
+effects.harmonic=Armonico
+effects.grace=Appoggiatura
+effects.grace-editor=Modifica Appoggiatura
+effects.grace.before-beat=Prima della battuta
+effects.grace.on-beat=Durante la battuta
+effects.grace.transition=Appoggiatura
+effects.grace.transition-none=Nessuna
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Modifica Trill
+effects.tremolo-picking=Leva Tremolo
+effects.tremolo-picking-editor=Modifica Leva Tremolo
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Modifica Armonico
+effects.harmonic.type-of-harmonic=Tipo di Armonico
+effects.harmonic.natural=Armonico Naturale
+effects.harmonic.artificial=Armonico artificiale
+effects.harmonic.artificial.key-offset=Bilanciamento
+effects.harmonic.tapped=Armonico con Tapping
+effects.harmonic.tapped.left-hand=Mano Sinistra
+effects.harmonic.tapped.right-hand=Mano Destra
+effects.harmonic.pinch=Armonico Pizzicato
+effects.harmonic.semi=Semi Armonico
+
+bend.editor=Modifica Bend
+bend.bend=Bend
+bend.bend-release=bend/release
+bend.bend-release-bend=bend/release/bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=Suona
+transport.start=Inizia
+transport.stop=Ferma
+
+repeat.open=Ripeti Apri
+repeat.close=Ripeti Chiudi
+repetitions=Ripetizioni
+repeat.number-of-repetitions=Numero di ripetizioni
+
+beat=Nota
+beat.clean=Elimina Battuta
+
+note=Note
+note.semitone-up=Semitono su
+note.semitone-down=Semitono Gi\u00f9
+note.shift-up=Sposta su
+note.shift-down=Sposta gi\u00f9
+note.tiednote=Nota Legata
+note.deadnote=Nota Stoppata
+
+insert.chord=Inserisci accordo
+chord.editor=Modifica accordo
+chord=Accordo
+chord.name=Nome Accordo
+chord.custom.name-empty-error=L'accordo non pu\u00f2 essere vuoto.
+chord.custom.name-exist-error=Il nome dell'accordo esiste gi\ufffd.
+chord.bass=Basso
+chord.custom=Accordo Personalizzato
+chord.settings.tip=Impostazioni Personalizzate
+chord.settings.type=Tipo
+chord.settings.type.most-common=Pi\u00f9 Comuni
+chord.settings.type.inversions=Inversioni
+chord.settings.type.close-voiced=Close Voiced
+chord.settings.type.open-voiced=Open Voiced
+chord.settings.open-chords=Apri Accordi
+chord.settings.chords-to-display=Accordi da Mostrare
+chord.settings.search-frets=Cerca Tasti
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+
+instrument=Strumento
+instrument.instrument=Strumento
+instrument.percussion-track=Traccia Percussioni
+
+tuning=Accordatura
+tuning.strings=Corde
+tuning.offset=Bilanciamento
+
+language=Lingua
+
+choose-color=Scegli un colore
+
+
+settings=Impostazioni
+settings.config=Configura TuxGuitar
+settings.config.view=Vista
+settings.config.view.mode=Modalit\u00e0
+settings.config.view.size=Dimensione finestra
+settings.config.view.size.maximized=Massimizzata
+settings.config.view.size.width=Larghezza
+settings.config.view.size.height=Altezza
+settings.config.language=Lingua
+settings.config.language.choose=Scegli la tua lingua
+settings.config.styles=Stile
+settings.config.styles.font.default=Font predefinito
+settings.config.styles.font.note=Font della Nota
+settings.config.styles.font.time-signature=Font del Tempo
+settings.config.styles.font.printer-default=Font Predefinito per la Stampante
+settings.config.styles.font.printer-note=Font della Nota per la Stampante
+settings.config.styles.font.printer-time-signature=Font del Tempo per la Stampante
+settings.config.styles.color.score-note=Colore del valore della Nota
+settings.config.styles.color.tab-note=Colore della Nota sulla Tablatura
+settings.config.styles.color.play-note=Colore della Nota Suonata
+settings.config.apply-changes-question=Vuoi applicare i cambiamenti ora?
+settings.config.sound=Suono
+settings.config.sound.soundbank=Database dei suoni
+settings.config.sound.default-soundbank=Usa Database dei suoni predefinto
+settings.config.sound.custom-soundbank=Usa Database dei suoni personalizzato
+settings.config.sound.soundbank-restart-message=Devi riavviare TuxGuitar per applicare le modifiche al database dei suoni
+settings.config.main=Generale
+settings.config.main.window-title=Titolo Finestra
+settings.config.main.window-title.help=Le seguenti variabili saranno ricollocate nel titolo della finestra:
+settings.config.main.window-title.var.description.appname=Questa variabile rappresenta il Nome dell'Applicazione: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Questa variabile rappresenta la versione di TuxGuitar
+settings.config.main.window-title.var.description.filename=Questa variabile rappresenta il nome del file aperto
+settings.config.main.window-title.var.description.filepath=Questa variabile rappresenta il percorso del file aperto
+settings.config.main.window-title.var.description.songname=Questa variabile rappresenta il nome della canzone
+settings.config.main.window-title.var.description.songauthor=Questa variabile rappresenta l'autore della canzone
+settings.config.main.window-title.var.description.songalbum=Questa variabile rappresenta l'album della canzone
+settings.config.main.window-title.var.description.songartist=Questa variabile rappresenta il cantante della canzone
+settings.config.main.options=Opzioni
+settings.config.main.splash-enabled=Lancia lo splash screen all'avvio  Launch splash screen on startup
+settings.config.styles.color.lines=Colore linee orizzontali
+settings.config.toolbars=Barre degli Strumenti
+
+soundbank.error=Errore Database dei Suoni
+soundbank.error.unavailable=Errore:Database dei Suoni non disponibile.
+soundbank.error.custom=Errore nell'apertura del database dei suoni personalizzati.
+
+settings.keybindings=Configura Tasti di scelta rapida
+key-bindings-editor=Modifica Tasti di scelta rapida
+key-bindings-editor-action-select=Scegli un'Azione
+key-bindings-editor-action-column=Azioni
+key-bindings-editor-shortcut-column=Tasti
+key-bindings-editor-push-a-key=Premi un Tasto
+key-bindings-editor-save-question=Ci sono modifiche non salvate, vuoi uscire senza salvare?
+
+key-bindings-editor-override=Scelta rapida gi\u00e0 in uso! Sicuro di volerla usare?
+
+
+
+print.print=Stampa
+print.dialog=Stampa
+print.service=Servizio
+print.service.name=Nome
+print.service.status=Stato
+print.service.type=Tipo
+print.service.info=Informazioni
+print.range=Misura
+print.range.all-pages=Tutta
+print.range.pages=Pagine
+print.range.pages-to=A
+print.copies=Copie
+print.copies-number=Numero di copie
+print.print-to-file=Stampa al file
+print.file-chooser=Scegli
+print-header.default-song-name=Senza Titolo
+print-header.default-song-author=Anonimo
+print.preview=Anteprima Stampa
+print.preview.page-of=Di
+
+
+
+
+view.layout.score-enabled=Mostra Pentagramma
+view.show-transport=Mostra Trasporto
+
+composition.clef=Chiave
+composition.clef.treble=Chiave di Sol
+composition.clef.bass=Chiave di Basso
+composition.clef.tenor=Chiave di Tenore
+composition.clef.alto=Chiave di Contralto
+composition.clef.to-the-end=Applica questa Chiave fino alla fine
+
+composition.keysignature=Tonalit\u00e0
+composition.keysignature.natural=Naturale
+composition.keysignature.sharp-1=1 Diesis
+composition.keysignature.sharp-2=2 Diesis
+composition.keysignature.sharp-3=3 Diesis
+composition.keysignature.sharp-4=4 Diesis
+composition.keysignature.sharp-5=5 Diesis
+composition.keysignature.sharp-6=6 Diesis
+composition.keysignature.sharp-7=7 Diesis
+composition.keysignature.flat-1=1 Bemolle
+composition.keysignature.flat-2=2 Bemolli
+composition.keysignature.flat-3=3 Bemolli
+composition.keysignature.flat-4=4 Bemolli
+composition.keysignature.flat-5=5 Bemolli
+composition.keysignature.flat-6=6 Bemolli
+composition.keysignature.flat-7=7 Bemolli
+composition.keysignature.to-the-end=Applica questa tonalit\u00e0 fino alla fine
+composition.tripletfeel=Suona come Terzina
+composition.tripletfeel.none=Non suonare come Terzina
+composition.tripletfeel.eighth=Terzina 8th
+composition.tripletfeel.sixteenth=Terzina 16th
+composition.tripletfeel.to-the-end=Applica "Suona come Terzina" fino alla fine 
+
+track.clone=Duplica Traccia
+track.move-up=Muovi su
+track.move-down=Muovi gi\u00f9
+
+marker=Indicatore
+marker.add=Aggiungi Indicatore
+marker.list=Elenco degli Indicatori
+marker.first=Vai al Primo Indicatore
+marker.last=Vai all'Ultimo Indicatore
+marker.next=Vai al Prossimo Indicatore
+marker.previous=Vai al Precedente Indicatore
+
+export.tablature-enabled=Mostra Tablatura
+export.score-enabled=Mostra Pentagramma
+
+scale=Scala
+scale.list=Elenco delle Scale
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=File
+edit.items=Modifica
+property.items=value
+track.items=Traccia
+duration.items=Durata
+beat.items=Note
+composition.items=Composizione
+repeat.items=Ripeti
+transport.items=Suona
+marker.items=Indicatore
+insert.items=Inserisci
+layout.items=Struttura
+view.items=Vista
+effect.items=Effetti
+dynamic.items=Dinamica
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Nuovo File
+action.file.open=Apri File
+action.file.save=Salva
+action.file.save-as=Salva come
+action.file.print=Stampa
+action.file.print-preview=Anteprima di stampa
+action.edit.undo=Annulla
+action.edit.redo=Ripeti
+action.composition.change-time-signature=Modifica Tempo
+action.composition.change-tempo=Modifica velocit\u00e0 Tempo
+action.composition.change-info=Cambia informazioni sulla canzone
+action.composition.change-clef=Change Chiave
+action.composition.change-key-signature=Cambia Tonalit\u00e0
+action.view.layout-set-page=Mostra Struttura a Pagina
+action.view.layout-set-linear=Mostra Struttura Lineare
+action.view.layout-set-multitrack=Mostra Modalit\u00e0 Multitraccia
+action.view.layout-set-score-enabled=Mostra Pentagramma
+action.view.show-fretboard=Mostra Tastiera Chitarra
+action.view.show-piano=Mostra Piano
+action.view.show-mixer=Mostra Mixer
+action.view.show-transport=Mostra Trasporto
+action.track.add=Aggiungi Traccia
+action.track.remove=Rimuovi Traccia
+action.track.clone=Duplica Traccia
+action.track.go-first=Vai alla prima Traccia
+action.track.go-last=Vai all'ultima Traccia
+action.track.go-next=Vai alla prossima Traccia
+action.track.go-previous=Vai alla Traccia precedente
+action.track.lyrics=Modifica Testo Traccia
+action.track.properties=Cambia Propriet\u00e0 Traccia
+action.measure.add=Aggiungi Misura
+action.measure.remove=Rimuovi Misura
+action.measure.copy=Copia Misura
+action.measure.paste=Incolla Misura
+action.measure.clean=Pulisci Misura
+action.measure.go-first=Vai alla Prima Misura
+action.measure.go-last=Vai all'Ultima Misura
+action.measure.go-next=Vai alla Prossima Misura
+action.measure.go-previous=Vai alla Misura Precedente
+action.note.general.clean-beat=Elimina Battuta
+action.note.general.decrement-semitone=Abbassa di un semitono
+action.note.general.increment-semitone=Aumenta di un semitono
+action.note.general.shift-down=Sposta in gi\u00f9
+action.note.general.shift-up=Sposta in su
+action.note.general.tied=Aggiungi/Rimuovi nota legata
+action.note.duration.change-dotted=Aggiungi/Rimuovi punto
+action.note.duration.change-double-dotted=Aggiungi/Rimuovi doppio punto
+action.note.duration.change-division-type=Aggiungi/Rimuovi Tupleto 
+action.note.effect.change-vibrato=Aggiungi/Rimuovi vibrato
+action.note.effect.change-bend=Aggiungi/Rimuovi bend
+action.note.effect.change-slide=Aggiungi/Rimuovi slide
+action.note.effect.change-hammer=Aggiungi/Rimuovi hammer-on/pull-off
+action.note.effect.change-accentuated=Aggiungi/Rimuovi nota accentuata
+action.note.effect.change-dead=Aggiungi/Rimuovi nota stoppata
+action.note.effect.change-fade-in=Aggiungi/Rimuovi fade in
+action.note.effect.change-ghost=Aggiungi/Rimuovi nota fantasma
+action.note.effect.change-grace=Aggiungi/Rimuovi appoggiatura
+action.note.effect.change-harmonic=Aggiungi/Rimuovi armonico
+action.note.effect.change-heavy-accentuated=Aggiungi/Rimuovi nota fortemente accentuata
+action.note.effect.change-palm-mute=Aggiungi/Rimuovi palm mute
+action.note.effect.change-popping=Aggiungi/Rimuovi popping
+action.note.effect.change-slapping=Aggiungi/Rimuovi slapping
+action.note.effect.change-staccato=Aggiungi/Rimuovi staccato
+action.note.effect.change-tapping=Aggiungi/Rimuovi tapping
+action.note.effect.change-tremolo-bar=Aggiungi/Rimuovi Whammy bar
+action.note.effect.change-tremolo-picking=Aggiungi/Rimuovi Leva tremolo
+action.note.effect.change-trill=Aggiungi/Rimuovi Trill
+action.insert.open-repeat=Apri ripetizione
+action.insert.close-repeat=Chiudi ripetizione
+action.insert.chord=Inserisci accordo
+action.transport.play=Suona la canzone
+action.transport.stop=Ferma il suono
+
+view.show-matrix=Mostra Matrice
+
+matrix.editor=Editor Matrice
+matrix.grids=Numero di Colonne
+matrix.border-color=Colore Bordo
+matrix.font=Carattere
+matrix.foreground-color=Colore Primo piano
+matrix.line-color-1=Colore Linea 1
+matrix.line-color-2=Colore Linea 2
+matrix.line-color-over=Colore Sovrapposto
+matrix.note-color=Colore Nota
+matrix.play-note-color=Colore Nota Attiva
+matrix.position-color=Colore Posizione
+matrix.settings=Impostazioni Matrice
+
+help.doc=Documentazione
+
+transport.first=Primo
+transport.last=Ultimo
+transport.previous=Precedente
+transport.next=Prossimo
+transport.pause=Pausa
+transport.metronome=Metronomo
+transport.mode=Modalit\u00e0 Player
+transport.mode.simple=Modalit\u00e0 Player Singolo
+transport.mode.simple.tempo-percent=Tempo Percentuale
+transport.mode.simple.loop=Suona Ciclo Singolo
+transport.mode.trainer=Modalit\u00e0 Allenamento
+transport.mode.trainer.increment-description=Incrementa di 
+
+repeat.alternative=Ripeti Alternative
+repeat.alternative.editor=Modifica Ripeti Alternative
+
+tools=Strumenti
+tools.scale=Lista Scale
+tools.browser=Browser
+tools.plugins=Plugin
+tools.shortcuts=Scorciatoie
+tools.settings=Impostazioni
+
+browser.dialog=Browser
+browser.menu.file=File
+browser.open=Apri
+browser.exit=Esci
+browser.menu.collection=Collezione
+browser.menu.go=Vai
+browser.collection.select=Seleziona Collezione
+browser.collection.open=Apri
+browser.collection.remove=Rimuovi
+browser.collection.close=Chiudi
+browser.collection.new=Nuovo
+browser.go-root=Home
+browser.go-back=Indietro
+browser.refresh=Pulisci
+browser.factory.fs.name=File System
+browser.collection.fs.path=Cartella
+browser.collection.fs.name=Nome
+browser.collection.fs.editor-title=Collezione File System 
+browser.collection.fs.editor-tip=Scegli la cartella della collezione
+browser.collection.fs.invalid-path=Per favore, seleziona una cartella valida
+
+midi.port=Porta MIDI
+midi.sequencer=Sequencer MIDI
+
+text.editor=Editor di testo
+text.insert=Inserisci Testo
+text.text=Testo
+
+plugin.column.name=Nome Plugin
+plugin.column.enabled=Abilitato
+plugin.unknown-value=Non disponibile.
+
+settings.config.main.table.auto-size.enabled=Abilita ridimensionamento Automatico Tabella
+settings.config.styles.general=Stile Generale
+settings.config.styles.printer=Stile Stampante
+settings.config.styles.font.lyric=Caratteri Testi
+settings.config.styles.font.text=Carattere di Testo
+settings.config.skin=Temi
+settings.config.skin.choose=Scegli il tuo Tema
+settings.config.toolbars.tip=Personalizza la Barra degli Strumenti
+settings.config.toolbars.list=Barre degli Strumenti Disponibili
+settings.config.toolbars.move-up=Muovi Su
+settings.config.toolbars.move-down=Muovi Gi\u00f9
+
+action.file.open-url=Apri URL
+action.file.exit=Esci da TuxGuitar
+action.insert.text=Inserisci Testo
+action.insert.repeat-alternative=Ripeti Alternativa
+action.composition.change-triplet-feel=Modifica Terzina
+action.note.duration.set-whole=Imposta Durata Semibreve
+action.note.duration.set-half=Imposta Durata Minima
+action.note.duration.set-quarter=Imposta Durata Semiminima
+action.note.duration.set-eighth=Imposta Durata Croma
+action.note.duration.set-sixteenth=Imposta Durata SemiCroma
+action.note.duration.set-thirty-second=Imposta Durata Biscroma
+action.note.duration.set-sixty-fourth=Imposta Durata Semibiscroma
+action.note.duration.decrement-duration=Decrementa Durata
+action.note.duration.increment-duration=Incrementa Durata
+action.track.move-down=Sposta gi\u00f9
+action.track.move-up=Sposta su
+action.tools.browser=Browser
+action.transport.metronome=Metrononomo
+action.transport.mode=Modalit\u00e0
+action.view.show-matrix=Mostra Matrice
+action.view.layout-set-chord-diagram-enabled=Abilita Diagramma Accordo
+action.view.layout-set-chord-name-enabled=Abilita Nome Accordo
+action.view.layout-set-compact=Mostra Modalit\u00e0 Compatta
+action.view.layout-set-tablature-enabled=Mostra Tablatura
+action.marker.add=Aggiungi Indicatore
+action.marker.go-next=Vai al Prossimo Indicatore
+action.marker.go-previous=Vai al Precedente Indicatore
+action.settings.configure=Impostazioni
+action.help.doc=Aiuto
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_ja.properties b/TuxGuitar-testing/platform-all/share/lang/messages_ja.properties
new file mode 100644
index 0000000..a5a048b
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_ja.properties
@@ -0,0 +1,682 @@
+ok=Ok
+cancel=\u30ad\u30e3\u30f3\u30bb\u30eb
+yes=\u306f\u3044
+no=\u3044\u3044\u3048
+add=\u8ffd\u52a0
+edit=\u7de8\u96c6
+remove=\u524a\u9664
+save=\u4fdd\u5b58
+exit=\u7d42\u4e86
+close=\u9589\u3058\u308b
+choose=\u9078\u629e
+color=\u8272
+title=\u30bf\u30a4\u30c8\u30eb
+go=\u79fb\u52d5
+warning=\u8b66\u544a
+error=\u30a8\u30e9\u30fc
+plugins=\u30d7\u30e9\u30b0\u30a4\u30f3
+options=\u30aa\u30d7\u30b7\u30e7\u30f3
+defaults=\u30c7\u30d5\u30a9\u30eb\u30c8
+clean=\u9664\u53bb
+rename=\u540d\u79f0\u5909\u66f4
+fret=\u30d5\u30ec\u30c3\u30c8
+position=\u30dd\u30b8\u30b7\u30e7\u30f3
+name=\u540d\u524d
+author=\u8457\u4f5c\u8005
+version=\u30d0\u30fc\u30b8\u30e7\u30f3
+description=\u8a73\u7d30
+info=\u60c5\u5831
+configure=\u8a2d\u5b9a
+url=URL
+
+file=\u30d5\u30a1\u30a4\u30eb
+file.new=\u65b0\u898f
+file.open=\u958b\u304f
+file.save=\u4fdd\u5b58
+file.save-as=\u5225\u540d\u4fdd\u5b58
+file.save-changes-question=\u30d5\u30a1\u30a4\u30eb\u304c\u5909\u66f4\u3055\u308c\u3066\u3044\u307e\u3059.\n\u5909\u66f4\u3092\u4fdd\u5b58\u3057\u307e\u3059\u304b?
+file.exit=\u7d42\u4e86
+file.export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
+file.export-midi=MIDI
+file.export-pdf=PDF
+file.print=\u5370\u5237
+file.print-preview=\u5370\u5237\u30d7\u30ec\u30d3\u30e5
+file.import=\u30a4\u30f3\u30dd\u30fc\u30c8
+file.import-midi=MIDI
+file.export-ascii=ASCII
+file.history=\u5c65\u6b74
+file.open-url=URL\u3092\u958b\u304f
+file.open.error=\u958b\u3051\u307e\u305b\u3093: {0}
+file.save.error=\u4fdd\u5b58\u3067\u304d\u307e\u305b\u3093: {0}
+file.import.error=\u30a4\u30f3\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093: {0}
+file.export.error=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3067\u304d\u307e\u305b\u3093: {0}
+file.overwrite-question=\u540c\u540d\u306e\u30d5\u30a1\u30a4\u30eb\u304c\u5b58\u5728\u3057\u307e\u3059.\n\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b?
+
+edit.menu=\u7de8\u96c6
+edit.undo=\u5143\u306b\u623b\u3059
+edit.redo=\u3084\u308a\u76f4\u3059
+edit.copy=\u30b3\u30d4\u30fc
+edit.from=\u958b\u59cb
+edit.to=\u7d42\u4e86
+edit.all-tracks=\u3059\u3079\u3066\u306e\u30c8\u30e9\u30c3\u30af
+edit.paste=\u8cbc\u308a\u4ed8\u3051
+edit.paste.count=\u8cbc\u308a\u4ed8\u3051\u308b\u7dcf\u6570
+edit.paste.replace-mode=\u73fe\u5728\u306e\u5c0f\u7bc0\u304b\u3089\u8cbc\u308a\u4ed8\u308b
+edit.paste.insert-mode=\u65b0\u3057\u3044\u5c0f\u7bc0\u304b\u3089\u8cbc\u308a\u4ed8\u308b
+edit.delete=\u524a\u9664
+edit.cut=\u30ab\u30c3\u30c8
+edit.mouse-mode-selection=\u9078\u629e\u30fb\u30e2\u30fc\u30c9
+edit.mouse-mode-edition=\u30b9\u30b3\u30a2\u7de8\u96c6\u30fb\u30e2\u30fc\u30c9
+edit.not-natural-key=\u30b7\u30e3\u30fc\u30d7/\u30d5\u30e9\u30c3\u30c8\u30fb\u30e2\u30fc\u30c9
+edit.voice-1=\u97f3\u58f0\u9078\u629e 1
+edit.voice-2=\u97f3\u58f0\u9078\u629e 2
+
+view=\u8868\u793a
+view.layout=\u8868\u793a
+view.layout.page=\u7e26\u30da\u30fc\u30b8
+view.layout.linear=\u6a2a\u30b9\u30af\u30ed\u30fc\u30eb
+view.layout.compact=\u30b3\u30f3\u30d1\u30af\u30c8
+view.layout.multitrack=\u30de\u30eb\u30c1\u30c8\u30e9\u30c3\u30af
+view.layout.chord-style=\u30b3\u30fc\u30c9\u30b9\u30bf\u30a4\u30eb
+view.layout.chord-name=\u30b3\u30fc\u30c9\u540d\u3092\u8868\u793a
+view.layout.chord-diagram=\u30b3\u30fc\u30c9\u30c0\u30a4\u30a2\u30b0\u30e9\u30e0\u3092\u8868\u793a
+view.layout.score-enabled=\u4e94\u7dda\u8868\u8a18
+view.layout.tablature-enabled=TAB\u8b5c
+view.show-mixer=\u30df\u30ad\u30b5
+view.show-fretboard=\u30d5\u30ec\u30c3\u30c8\u30dc\u30fc\u30c9
+view.show-piano=\u30d4\u30a2\u30ce
+view.show-matrix=\u30de\u30c8\u30ea\u30c3\u30af\u30b9
+view.show-transport=\u30d7\u30ec\u30fc\u30e4
+
+fretboard.direction=\u65b9\u5411
+fretboard.right-mode=\u30e9\u30a4\u30c8
+fretboard.left-mode=\u30ec\u30d5\u30c8
+fretboard.background-color=\u80cc\u666f
+fretboard.display-note-text=\u97f3\u540d\u3092\u8868\u793a\u3059\u308b
+fretboard.display-scale-text=\u30b9\u30b1\u30fc\u30eb\u3092\u8868\u793a\u3059\u308b
+fretboard.font=\u30d5\u30a9\u30f3\u30c8
+fretboard.fretpoint-color=\u30dd\u30b8\u30b7\u30e7\u30f3\u30fb\u30de\u30fc\u30af
+fretboard.note-color=\u97f3\u540d
+fretboard.scale-note-color=\u30b9\u30b1\u30fc\u30eb
+fretboard.settings=\u30d5\u30ec\u30c3\u30c8\u30dc\u30fc\u30c9\u8a2d\u5b9a
+fretboard.string-color=\u5f26
+fretboard.settings.options=\u30aa\u30d7\u30b7\u30e7\u30f3
+
+piano.editor=\u30d4\u30a2\u30ce\u30fb\u30a8\u30c7\u30a3\u30bf
+piano.natural-key-color=\u767d\u9375
+piano.not-natural-key-color=\u9ed2\u9375
+piano.note-color=\u6f14\u594f\u4e2d\u306e\u9375\u76e4
+piano.scale-note-color=\u30b9\u30b1\u30fc\u30eb
+piano.settings=\u30d4\u30a2\u30ce\u8a2d\u5b9a
+
+matrix.editor=\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u30fb\u30a8\u30c7\u30a3\u30bf
+matrix.grids=\u30b0\u30ea\u30c3\u30c8\u306e\u6570
+matrix.border-color=\u5883\u754c\u7dda
+matrix.font=\u30d5\u30a9\u30f3\u30c8
+matrix.foreground-color=\u8868\u9762
+matrix.line-color-1=\u5947\u6570\u5217
+matrix.line-color-2=\u5076\u6570\u5217
+matrix.line-color-over=\u30de\u30a6\u30b9\u30aa\u30fc\u30d0
+matrix.note-color=\u97f3\u7b26
+matrix.play-note-color=\u6f14\u594f\u4e2d\u306e\u30b0\u30ea\u30c3\u30c9
+matrix.position-color=\u30dd\u30b8\u30b7\u30e7\u30f3
+matrix.settings=\u30de\u30c8\u30ea\u30c3\u30af\u30b9\u8a2d\u5b9a
+
+composition=\u62cd\u5b50
+composition.timesignature=\u62cd\u5b50\u8a18\u53f7
+composition.timesignature.Numerator=\u5206\u5b50
+composition.timesignature.denominator=\u5206\u6bcd
+composition.timesignature.to-the-end=\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b
+composition.tempo=\u30c6\u30f3\u30dd
+composition.tempo-percent=\u30d1\u30fc\u30bb\u30f3\u30c8
+composition.tempo.invalid=\u7121\u52b9\u306a\u30c6\u30f3\u30dd\u3067\u3059
+composition.tempo.start-to-end=\u5168\u4f53\u306b\u9069\u7528\u3059\u308b
+composition.tempo.position-to-end=\u73fe\u5c0f\u7bc0\u304b\u3089\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b
+composition.tempo.position-to-next=\u6b21\u306e\u30c6\u30f3\u30dd\u30c1\u30a7\u30f3\u30b8\u307e\u3067\u9069\u7528\u3059\u308b
+composition.properties=\u30b9\u30b3\u30a2\u60c5\u5831\u306e\u7de8\u96c6
+composition.name=\u66f2\u540d
+composition.artist=\u30a2\u30fc\u30c6\u30a3\u30b9\u30c8
+composition.album=\u30a2\u30eb\u30d0\u30e0
+composition.author=\u8457\u4f5c\u8005
+composition.date=\u4f5c\u6210\u65e5
+composition.copyright=\u8457\u4f5c\u6a29
+composition.writer=TAB\u8b5c
+composition.transcriber=\u7de8\u66f2
+composition.comments=\u30b3\u30e1\u30f3\u30c8
+composition.tripletfeel=\u9023\u7b26
+composition.clef=\u97f3\u90e8\u8a18\u53f7
+composition.clef.treble=\u30c8\u97f3\u8a18\u53f7 - G - \u30c8\u30ec\u30d6\u30eb
+composition.clef.bass=\u30d8\u97f3\u8a18\u53f7 - F - \u30d0\u30b9
+composition.clef.tenor=\u30cf\u97f3\u8a18\u53f7 - C - \u30c6\u30ce\u30fc\u30eb
+composition.clef.alto=\u30cf\u97f3\u8a18\u53f7 - C -  \u30a2\u30eb\u30c8
+composition.clef.to-the-end=\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b
+composition.keysignature=\u8abf\u5b50\u8a18\u53f7
+composition.keysignature.natural=\u266e
+composition.keysignature.sharp-1=\u266f
+composition.keysignature.sharp-2=\u266f\u266f
+composition.keysignature.sharp-3=\u266f\u266f\u266f
+composition.keysignature.sharp-4=\u266f\u266f\u266f\u266f
+composition.keysignature.sharp-5=\u266f\u266f\u266f\u266f\u266f
+composition.keysignature.sharp-6=\u266f\u266f\u266f\u266f\u266f\u266f
+composition.keysignature.sharp-7=\u266f\u266f\u266f\u266f\u266f\u266f\u266f
+composition.keysignature.flat-1=\u266d
+composition.keysignature.flat-2=\u266d\u266d
+composition.keysignature.flat-3=\u266d\u266d\u266d
+composition.keysignature.flat-4=\u266d\u266d\u266d\u266d
+composition.keysignature.flat-5=\u266d\u266d\u266d\u266d\u266d
+composition.keysignature.flat-6=\u266d\u266d\u266d\u266d\u266d\u266d
+composition.keysignature.flat-7=\u266d\u266d\u266d\u266d\u266d\u266d\u266d
+composition.keysignature.to-the-end=\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b
+composition.tripletfeel=\u30b9\u30a6\u30a3\u30f3\u30b0\u30fb\u30d5\u30a3\u30fc\u30eb
+composition.tripletfeel.none=\u7121\u52b9\u306b\u3059\u308b
+composition.tripletfeel.eighth=8\u9023\u7b26
+composition.tripletfeel.sixteenth=16\u9023\u7b26
+composition.tripletfeel.to-the-end=\u6700\u5f8c\u307e\u3067\u9069\u7528\u3059\u308b
+
+help=\u30d8\u30eb\u30d7
+help.help=\u30d8\u30eb\u30d7
+help.doc=\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8
+help.about=TuxGuitar \u306b\u3064\u3044\u3066
+help.about.license=\u30e9\u30a4\u30bb\u30f3\u30b9
+help.about.authors=\u8457\u4f5c\u8005
+help.about.description=\u8a73\u7d30
+
+track=\u30c8\u30e9\u30c3\u30af
+track.number=No
+track.name=\u30c8\u30e9\u30c3\u30af\u540d
+track.color=\u8272
+track.first=\u5148\u982d\u30c8\u30e9\u30c3\u30af
+track.last=\u6700\u7d42\u30c8\u30e9\u30c3\u30af
+track.previous=\u524d\u30c8\u30e9\u30c3\u30af
+track.next=\u6b21\u30c8\u30e9\u30c3\u30af
+track.add=\u30c8\u30e9\u30c3\u30af\u8ffd\u52a0
+track.remove=\u30c8\u30e9\u30c3\u30af\u524a\u9664
+track.clone=\u30c8\u30e9\u30c3\u30af\u8907\u88fd
+track.move-up=\u30c8\u30e9\u30c3\u30af\u3092\u4e0a\u306b\u79fb\u52d5\u3055\u305b\u308b
+track.move-down=\u30c8\u30e9\u30c3\u30af\u3092\u4e0b\u306b\u79fb\u52d5\u3055\u305b\u308b
+track.instrument=\u697d\u5668
+track.properties=\u30c8\u30e9\u30c3\u30af\u306e\u30d7\u30ed\u30d1\u30c6\u30a3
+track.properties.general=\u4e00\u822c
+track.name.default-percussion-name=Drums
+track.lyrics=\u6b4c\u8a5e\u30a8\u30c7\u30a3\u30bf\u3092\u958b\u304f
+track.solo=\u30bd\u30ed
+track.mute=\u30df\u30e5\u30fc\u30c8
+
+lyric.editor=\u6b4c\u8a5e\u30a8\u30c7\u30a3\u30bf
+
+measure=\u5c0f\u7bc0
+measure.first=\u5148\u982d\u306e\u5c0f\u7bc0\u3078
+measure.last=\u6700\u5f8c\u306e\u5c0f\u7bc0\u3078
+measure.previous=\u524d\u306e\u5c0f\u7bc0\u3078
+measure.next=\u6b21\u306e\u5c0f\u7bc0\u3078
+measure.add=\u8ffd\u52a0 (\u7a7a\u5c0f\u7bc0)
+measure.add.count=\u8ffd\u52a0\u3059\u308b\u7dcf\u6570
+measure.add-before-current-position=\u9078\u629e\u7b87\u6240\u306e\u524d\u306b\u8ffd\u52a0
+measure.add-after-current-position=\u9078\u629e\u7b87\u6240\u306e\u5f8c\u306b\u8ffd\u52a0
+measure.add-at-end=\u6700\u5f8c\u306b\u8ffd\u52a0
+measure.remove=\u524a\u9664 (\u7bc4\u56f2\u6307\u5b9a)
+measure.copy=\u30b3\u30d4\u30fc (\u7bc4\u56f2\u6307\u5b9a)
+measure.paste=\u8cbc\u308a\u4ed8\u3051
+measure.clean=\u30af\u30ea\u30a2 (\u9078\u629e\u5c0f\u7bc0)
+
+duration=\u97f3\u4fa1
+duration.whole=\u5168\u97f3\u7b26
+duration.half=2\u5206\u97f3\u7b26
+duration.quarter=4\u5206\u97f3\u7b26
+duration.eighth=8\u5206\u97f3\u7b26
+duration.sixteenth=16\u5206\u97f3\u7b26
+duration.thirtysecond=32\u5206\u97f3\u7b26
+duration.sixtyfourth=64\u5206\u97f3\u7b26
+duration.dotted=\u4ed8\u70b9
+duration.doubledotted=\u8907\u4ed8\u70b9
+duration.division-type=\u9023\u7b26
+
+dynamic=\u5f37\u5f31\u8a18\u53f7
+dynamic.piano-pianissimo=ppp - \u30d4\u30a2\u30ce\u30fb\u30d4\u30a2\u30cb\u30c3\u30b7\u30e2
+dynamic.pianissimo=pp - \u30d4\u30a2\u30cb\u30c3\u30b7\u30e2
+dynamic.piano=p - \u30d4\u30a2\u30ce
+dynamic.mezzo-piano=mp - \u30e1\u30c3\u30be\u30fb\u30d4\u30a2\u30ce
+dynamic.mezzo-forte=mf - \u30e1\u30c3\u30be\u30fb\u30d5\u30a9\u30eb\u30c6
+dynamic.forte=f - \u30d5\u30a9\u30eb\u30c6
+dynamic.fortissimo=ff - \u30d5\u30a9\u30eb\u30c6\u30a3\u30c3\u30b7\u30e2 
+dynamic.forte-fortissimo=fff - \u30d5\u30a9\u30eb\u30c6\u30fb\u30d5\u30a9\u30eb\u30c6\u30a3\u30c3\u30b7\u30e2
+
+effects=\u30a8\u30d5\u30a7\u30af\u30c8/\u30c6\u30af\u30cb\u30c3\u30af  
+effects.vibrato=\uff5e - \u30f4\u30a3\u30d6\u30e9\u30fc\u30c8
+effects.bend=C - \u30c1\u30e7\u30fc\u30ad\u30f3\u30b0
+effects.deadnote=x - \u30c7\u30c3\u30c9\u30ce\u30fc\u30c8/\u30d6\u30e9\u30c3\u30b7\u30f3\u30b0
+effects.slide=S - \u30b9\u30e9\u30a4\u30c9
+effects.hammer=H / P - \u30cf\u30f3\u30de\u30ea\u30f3\u30b0\u30fb\u30aa\u30f3/\u30d7\u30ea\u30f3\u30b0\u30fb\u30aa\u30d5
+effects.tremolo-bar=Arm. - \u30c8\u30ec\u30e2\u30ed\u30a2\u30fc\u30e0
+effects.tremolo-bar-editor=\u30c8\u30ec\u30e2\u30ed\u30a2\u30fc\u30e0\u30fb\u30a8\u30c7\u30a3\u30bf
+effects.tremolo-bar.dip=\uff3c\uff0f
+effects.tremolo-bar.dive=\uff3c
+effects.tremolo-bar.release-up=\uff3f\uff0f
+effects.tremolo-bar.release-down=\uffe3\uff3c
+effects.tremolo-bar.inverted-dip=\uff0f\uff3c
+effects.tremolo-bar.return=\uff0f
+effects.ghostnote=( ) - \u30b4\u30fc\u30b9\u30c8\u30ce\u30fc\u30c8
+effects.accentuatednote=^ - \u30a2\u30af\u30bb\u30f3\u30c8
+effects.heavyaccentuatednote=^^ - \u91cd\u30a2\u30af\u30bb\u30f3\u30c8
+effects.harmonic=Harm. - \u30cf\u30fc\u30e2\u30cb\u30af\u30b9
+effects.grace=\u2669 - \u88c5\u98fe\u97f3\u7b26
+effects.grace-editor=\u88c5\u98fe\u97f3\u7b26\u30fb\u30a8\u30c7\u30a3\u30bf
+effects.grace.before-beat=\u62cd\u306e\u524d
+effects.grace.on-beat=\u62cd\u306e\u4f4d\u7f6e
+effects.grace.transition=\u63a5\u7d9a\u52b9\u679c
+effects.grace.transition-none=\u306a\u3057
+effects.grace.transition-bend=C - \u30c1\u30e7\u30fc\u30ad\u30f3\u30b0
+effects.grace.transition-slide=S - \u30b9\u30e9\u30a4\u30c9
+effects.grace.transition-hammer=H - \u30cf\u30f3\u30de\u30ea\u30f3\u30b0\u30fb\u30aa\u30f3
+effects.trill=tr. - \u30c8\u30ea\u30eb
+effects.trill-editor=\u30c8\u30ea\u30eb\u30fb\u30a8\u30c7\u30a3\u30bf
+effects.tremolo-picking=Picking Tr. - \u30d4\u30c3\u30ad\u30f3\u30b0\u30fb\u30c8\u30ea\u30eb
+effects.tremolo-picking-editor=\u30d4\u30c3\u30ad\u30f3\u30b0\u30fb\u30c8\u30ea\u30eb\u30fb\u30a8\u30c7\u30a3\u30bf
+effects.palm-mute=M - \u30d6\u30ea\u30c3\u30b8\u30fb\u30df\u30e5\u30fc\u30c8
+effects.staccato= \uff0e - \u30b9\u30bf\u30c3\u30ab\u30fc\u30c8
+effects.tapping=Tapping - \u30bf\u30c3\u30d4\u30f3\u30b0
+effects.slapping=\u30b9\u30e9\u30c3\u30d4\u30f3\u30b0/\u30c1\u30e7\u30c3\u30d1
+effects.popping=\u30dd\u30c3\u30d4\u30f3\u30b0
+effects.fade-in=\uff1c - \u30d5\u30a7\u30fc\u30c9\u30a4\u30f3
+effects.harmonic-editor=\u30cf\u30fc\u30e2\u30cb\u30af\u30b9\u30fb\u30a8\u30c7\u30a3\u30bf
+effects.harmonic.type-of-harmonic=\u7a2e\u985e
+effects.harmonic.natural=Harm. - \u30cf\u30fc\u30e2\u30cb\u30af\u30b9
+effects.harmonic.artificial=A.h - \u4eba\u53e3\u30cf\u30fc\u30e2\u30cb\u30af\u30b9
+effects.harmonic.artificial.key-offset=\u30ab\u30dd
+effects.harmonic.tapped=Both Hand Tapping Harm. - \u30bf\u30c3\u30d4\u30f3\u30b0\u30fb\u30cf\u30fc\u30e2\u30cb\u30af\u30b9
+effects.harmonic.tapped.left-hand=Left Hand Tapping - \u30ec\u30d5\u30c8\u30cf\u30f3\u30c9
+effects.harmonic.tapped.right-hand=Right Hand Tapping - \u30e9\u30a4\u30c8\u30cf\u30f3\u30c9
+effects.harmonic.pinch=P.h - \u30d4\u30c3\u30ad\u30f3\u30b0\u30fb\u30cf\u30fc\u30e2\u30cb\u30af\u30b9
+effects.harmonic.semi=S.h - \u30bb\u30df\u30fb\u30cf\u30fc\u30e2\u30cb\u30af\u30b9
+
+bend.editor=\u30c1\u30e7\u30fc\u30ad\u30f3\u30b0\u30fb\u30a8\u30c7\u30a3\u30bf
+bend.bend=\uff3f\u2191
+bend.bend-release=\uff3f\u2191\uffe3\u2193
+bend.bend-release-bend=\uff3f\u2191\uffe3\u2193\uff3f\u2191
+bend.prebend=\uffe3\uffe3
+bend.prebend-release=\uffe3\u2193
+
+transport=\u30d7\u30ec\u30fc\u30e4
+transport.start=\u518d\u751f
+transport.stop=\u505c\u6b62
+transport.pause=\u4e00\u6642\u505c\u6b62
+transport.first=\u66f2\u306e\u5148\u982d
+transport.last=\u66f2\u306e\u6700\u5f8c
+transport.previous=\u524d\u306e\u5c0f\u7bc0
+transport.next=\u6b21\u306e\u5c0f\u7bc0
+transport.metronome=\u30e1\u30c8\u30ed\u30ce\u30fc\u30e0 ON/OFF
+transport.mode=\u518d\u751f\u8a2d\u5b9a
+transport.mode.simple=\u30b7\u30f3\u30d7\u30eb\u30fb\u30e2\u30fc\u30c9
+transport.mode.simple.tempo-percent=\u30c6\u30f3\u30dd [%]
+transport.mode.simple.loop=\u30ea\u30d4\u30fc\u30c8
+transport.mode.trainer=\u30c8\u30ec\u30a4\u30cb\u30f3\u30b0\u30fb\u30e2\u30fc\u30c9
+transport.mode.trainer.increment-description=\u30ea\u30d4\u30fc\u30c8\u6bce\u306e\u901f\u5ea6\u5897\u52a0 [%]
+transport.mode.loop-range=\u30eb\u30fc\u30d7\u8abf\u6574
+transport.mode.loop-range.from=\u518d\u751f\u3092\u958b\u59cb\u3059\u308b\u5c0f\u7bc0
+transport.mode.loop-range.from-default=\u6700\u521d\u304b\u3089
+transport.mode.loop-range.to=\u518d\u751f\u3092\u7d42\u4e86\u3059\u308b\u5c0f\u7bc0
+transport.mode.loop-range.to-default=\u6700\u5f8c\u307e\u3067
+transport.set-loop-start=\u30eb\u30fc\u30d7\u306e\u958b\u59cb\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a
+transport.set-loop-end=\u30eb\u30fc\u30d7\u306e\u7d42\u4e86\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a
+
+instruments.volume=\u30b2\u30a4\u30f3
+instrument.volume=\u30dc\u30ea\u30e5\u30fc\u30e0
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=\u30d0\u30e9\u30f3\u30b9
+instrument.free=\u672a\u4f7f\u7528
+instrument.link=\u4f7f\u7528\u4e2d
+
+
+repeat.open=\u30ea\u30d4\u30fc\u30c8\u958b\u59cb
+repeat.close=\u30ea\u30d4\u30fc\u30c8\u7d42\u4e86
+repeat.alternative=\u30ab\u30c3\u30b3
+repeat.alternative.editor=\u30ab\u30c3\u30b3\u306e\u7de8\u96c6
+repetitions=\u30ea\u30d4\u30fc\u30c8
+repeat.number-of-repetitions=\u30ea\u30d4\u30fc\u30c8\u6570
+
+beat=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8
+beat.clean=1\u62cd\u9664\u53bb
+beat.voice.remove-unused=\u672a\u4f7f\u7528\u97f3\u58f0\u306e\u9664\u53bb
+beat.voice-up=\u7b26\u5c3e\u306e\u5411\u304d\u3092\u4e0a\u306b\u3059\u308b
+beat.voice-down=\u7b26\u5c3e\u306e\u5411\u304d\u3092\u4e0b\u306b\u3059\u308b
+beat.voice-auto=\u7b26\u5c3e\u306e\u5411\u304d\u306e\u81ea\u52d5\u8abf\u6574
+beat.stroke-up=\u2193\u30a2\u30c3\u30d7\u30b9\u30c8\u30ed\u30fc\u30af
+beat.stroke-down=\u2191\u30c0\u30a6\u30f3\u30b9\u30c8\u30ed\u30fc\u30af
+beat.move-left=1\u62cd\u5de6\u3078\u79fb\u52d5\u3059\u308b
+beat.move-right=1\u62cd\u53f3\u3078\u79fb\u52d5\u3059\u308b
+beat.move-custom=\u62cd\u79fb\u52d5\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba
+beat.move-custom.dialog.title=\u79fb\u52d5\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba
+beat.move-custom.dialog.direction-tip=\u79fb\u52d5\u306e\u65b9\u5411
+beat.move-custom.dialog.move-1.tip=\u7b2c\u4e00\u79fb\u52d5
+beat.move-custom.dialog.move-2.tip=\u7b2c\u4e8c\u79fb\u52d5
+beat.move-custom.dialog.direction=\u65b9\u5411
+beat.move-custom.dialog.direction.right=\u53f3\u3078\u79fb\u52d5
+beat.move-custom.dialog.direction.left=\u5de6\u3078\u79fb\u52d5
+beat.move-custom.dialog.count=\u8ffd\u52a0\u3059\u308b\u7dcf\u6570
+beat.move-custom.dialog.duration=\u97f3\u4fa1
+beat.move-custom.dialog.duration.type=\u4ed8\u70b9/\u8907\u4ed8\u70b9
+beat.move-custom.dialog.duration.type.normal=\u306a\u3057
+beat.move-custom.dialog.duration.division-type=\u9023\u7b26
+beat.move-custom.dialog.duration.division-type.normal=\u6a19\u6e96 (\u9023\u7b26)
+
+note=\u97f3\u7b26
+note.semitone-up=\u534a\u97f3\u4e0a\u3052\u308b
+note.semitone-down=\u534a\u97f3\u4e0b\u3052\u308b
+note.shift-up=\u4e0a\u5f26\u306b\u30b7\u30d5\u30c8
+note.shift-down=\u4e0b\u5f26\u306b\u30b7\u30d5\u30c8
+note.tiednote=\u30bf\u30a4
+note.deadnote=x - \u30c7\u30c3\u30c9\u30ce\u30fc\u30c8/\u30d6\u30e9\u30c3\u30b7\u30f3\u30b0
+
+insert.chord=\u30b3\u30fc\u30c9\u633f\u5165
+chord.editor=\u30b3\u30fc\u30c9\u30fb\u30a8\u30c7\u30a3\u30bf
+chord=\u30b3\u30fc\u30c9
+chord.name=\u30b3\u30fc\u30c9\u540d
+chord.bass=\u30d9\u30fc\u30b9\u97f3
+chord.custom=\u30ab\u30b9\u30bf\u30e0\u30fb\u30b3\u30fc\u30c9
+chord.custom.name-empty-error=\u30b3\u30fc\u30c9\u540d\u304c\u672a\u5165\u529b\u3067\u3059.
+chord.custom.name-exist-error=\u30b3\u30fc\u30c9\u540d\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059.
+chord.settings.tip=\u30ab\u30b9\u30bf\u30e0\u8a2d\u5b9a
+chord.settings.type=\u30bf\u30a4\u30d7
+chord.settings.type.most-common=\u30e2\u30b9\u30c8\u30fb\u30b3\u30e2\u30f3/\u5171\u901a\u5f8b
+chord.settings.type.inversions=\u30a4\u30f3\u30f4\u30a1\u30fc\u30b8\u30e7\u30f3/\u8ee2\u56de\u5f62
+chord.settings.type.close-voiced=\u30af\u30ed\u30fc\u30ba\u30fb\u30f4\u30a9\u30a4\u30b7\u30f3\u30b0/\u5bc6\u96c6\u548c\u58f0\u914d\u7f6e
+chord.settings.type.open-voiced=\u30aa\u30fc\u30d7\u30f3\u30fb\u30f4\u30a9\u30a4\u30b7\u30f3\u30b0/\u958b\u653e\u548c\u58f0\u914d\u7f6e
+chord.settings.open-chords=\u30aa\u30fc\u30d7\u30f3\u30fb\u30b3\u30fc\u30c9/\u958b\u653e\u5f26\u3092\u542b\u3081\u308b
+chord.settings.chords-to-display=\u8868\u793a\u3059\u308b\u30b3\u30fc\u30c9\u6570
+chord.settings.search-frets=\u691c\u7d22\u3059\u308b\u30d5\u30ec\u30c3\u30c8\u306e\u7bc4\u56f2
+chord.settings.minimum-fret=\u6700\u5c0f
+chord.settings.maximum-fret=\u6700\u5927
+
+instrument=\u6f14\u594f\u697d\u5668
+instrument.instrument=\u697d\u5668
+instrument.percussion-track=\u30c9\u30e9\u30e0 / \u30d1\u30fc\u30ab\u30c3\u30b7\u30e7\u30f3
+
+tuning=\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0
+tuning.strings=\u5f26\u306e\u6570
+tuning.offset=\u30ab\u30dd
+tuning.strings.transpose=\u97f3\u7b26\u3092\u79fb\u8abf\u3059\u308b
+tuning.strings.transpose.try-keep-strings=\u97f3\u7b26\u306f\u540c\u3058\u5f26\u3092\u7dad\u6301\u3059\u308b
+tuning.strings.transpose.apply-to-chords=\u30b3\u30fc\u30c9\u3092\u79fb\u8abf\u3059\u308b
+
+language=\u8a00\u8a9e/Language
+
+choose-color=\u8272\u306e\u9078\u629e
+
+settings=\u8a2d\u5b9a
+settings.config=TuxGuitar \u74b0\u5883\u8a2d\u5b9a
+settings.config.language=\u8a00\u8a9e/Language
+settings.config.language.choose=\u8a00\u8a9e\u306e\u9078\u629e/Choose Language
+settings.config.styles=\u30b9\u30bf\u30a4\u30eb
+settings.config.styles.general=\u4e00\u822c
+settings.config.styles.printer=\u5370\u5237
+settings.config.styles.font.default=\u30c7\u30d5\u30a9\u30eb\u30c8
+settings.config.styles.font.note=\u97f3\u7b26
+settings.config.styles.font.lyric=\u6b4c\u8a5e
+settings.config.styles.font.text=\u30c6\u30ad\u30b9\u30c8
+settings.config.styles.font.time-signature=\u62cd\u5b50\u8a18\u53f7
+settings.config.styles.font.printer-default=\u5370\u5237\u30c7\u30d5\u30a9\u30eb\u30c8
+settings.config.styles.font.printer-note=\u5370\u5237\u7528\u306e\u97f3\u7b26
+settings.config.styles.font.printer-time-signature=\u5370\u5237\u7528\u306e\u62cd\u5b50\u8a18\u53f7
+settings.config.styles.color.score-note=\u4e94\u7dda\u8b5c\u306e\u6f14\u594f\u8a18\u53f7
+settings.config.styles.color.tab-note=TAB\u8b5c\u306e\u6f14\u594f\u8a18\u53f7
+settings.config.styles.color.play-note=\u518d\u751f\u4e2d\u306e\u97f3\u7b26
+settings.config.apply-changes-question=\u8a2d\u5b9a\u5909\u66f4\u3092\u9069\u7528\u3057\u307e\u3059\u304b?\n Do you want to apply changes now?
+settings.config.sound=\u30b5\u30a6\u30f3\u30c9
+settings.config.main=\u4e00\u822c
+settings.config.main.window-title=\u30a6\u30a3\u30f3\u30c9\u30a6\u30fb\u30bf\u30a4\u30c8\u30eb
+settings.config.main.window-title.help=\u30a6\u30a3\u30f3\u30c9\u30a6\u30fb\u30bf\u30a4\u30c8\u30eb\u3092\u4ee5\u4e0b\u306e\u5909\u6570\u306b\u66f8\u304d\u63db\u3048\u307e\u3059.
+settings.config.main.window-title.var.description.appname=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u540d\u3092\u8868\u793a\u3057\u307e\u3059 (TuxGuitar)
+settings.config.main.window-title.var.description.appversion=\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u8868\u793a\u3057\u307e\u3059 (TuxGuitar)
+settings.config.main.window-title.var.description.filename=\u30d5\u30a1\u30a4\u30eb\u540d\u3092\u8868\u793a\u3057\u307e\u3059
+settings.config.main.window-title.var.description.filepath=\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u3092\u8868\u793a\u3057\u307e\u3059
+settings.config.main.window-title.var.description.songname=\u30d5\u30a1\u30a4\u30eb\u306e\u66f2\u540d\u3092\u8868\u793a\u3057\u307e\u3059
+settings.config.main.window-title.var.description.songauthor=\u30d5\u30a1\u30a4\u30eb\u306e\u8457\u4f5c\u8005\u3092\u8868\u793a\u3057\u307e\u3059
+settings.config.main.window-title.var.description.songalbum=\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30eb\u30d0\u30e0\u540d\u3092\u8868\u793a\u3057\u307e\u3059
+settings.config.main.window-title.var.description.songartist=\u30d5\u30a1\u30a4\u30eb\u306e\u30a2\u30fc\u30c6\u30a3\u30b9\u30c8\u540d\u3092\u8868\u793a\u3057\u307e\u3059
+settings.config.main.options=\u30aa\u30d7\u30b7\u30e7\u30f3
+settings.config.main.splash-enabled=\u8d77\u52d5\u6642\u306b\u30b9\u30d7\u30e9\u30c3\u30b7\u30e5\u753b\u9762\u3092\u8868\u793a\u3059\u308b
+settings.config.main.table.auto-size.enabled=\u81ea\u52d5\u3067\u30c6\u30fc\u30d6\u30eb\u3092\u30ea\u30b5\u30a4\u30ba\u3059\u308b
+settings.config.styles.color.lines=\u4e94\u7dda
+settings.config.toolbars=\u30c4\u30fc\u30eb\u30d0\u30fc
+settings.config.toolbars.tip=\u30c4\u30fc\u30eb\u30d0\u30fc\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba
+settings.config.toolbars.list=\u30c4\u30fc\u30eb\u30d0\u30fc\u3092\u8868\u793a\u3059\u308b
+settings.config.toolbars.move-up=\u4e0a\u3078\u79fb\u52d5
+settings.config.toolbars.move-down=\u4e0b\u3078\u79fb\u52d5
+settings.config.skin=\u30b9\u30ad\u30f3
+settings.config.skin.choose=\u30b9\u30ad\u30f3\u306e\u9078\u629e
+settings.keybindings=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u30ad\u30fc\u8a2d\u5b9a
+
+key-bindings-editor=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u30ad\u30fc\u30fb\u30a8\u30c7\u30a3\u30bf
+key-bindings-editor-action-select=\u52d5\u4f5c\u306e\u9078\u629e
+key-bindings-editor-action-column=\u52d5\u4f5c
+key-bindings-editor-shortcut-column=\u30ad\u30fc
+key-bindings-editor-push-a-key=\u30ad\u30fc\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044
+key-bindings-editor-save-question=\u5909\u66f4\u304c\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093, \u4fdd\u5b58\u3057\u306a\u3044\u3067\u7d42\u4e86\u3057\u307e\u3059\u304b?
+
+key-bindings-editor-override=\u5165\u529b\u3055\u308c\u305f\u30ad\u30fc\u306f\u3059\u3067\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u307e\u3059! \u672c\u5f53\u306b\u4f7f\u3063\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
+
+print.print=\u5370\u5237
+print.dialog=\u5370\u5237
+print.service=\u30b5\u30fc\u30d3\u30b9
+print.service.name=\u540d\u79f0
+print.service.status=\u30b9\u30c6\u30fc\u30bf\u30b9
+print.service.type=\u30bf\u30a4\u30d7
+print.service.info=\u60c5\u5831
+print.range=\u7bc4\u56f2
+print.range.all-pages=\u3059\u3079\u3066
+print.range.pages=\u30da\u30fc\u30b8
+print.range.pages-to=\u307e\u3067
+print.copies=\u30b3\u30d4\u30fc
+print.copies-number=\u30b3\u30d4\u30fc\u90e8\u6570
+print.print-to-file=\u30d5\u30a1\u30a4\u30eb\u306b\u5370\u5237
+print.file-chooser=\u9078\u629e
+print-header.default-song-name= 
+print-header.default-song-author= 
+
+print.preview=\u5370\u5237\u30d7\u30ec\u30d3\u30e5
+print.preview.page-of=/
+
+marker=\u30de\u30fc\u30ab
+marker.add=\u30de\u30fc\u30ab\u8ffd\u52a0
+marker.list=\u30de\u30fc\u30ab\u4e00\u89a7
+marker.first=\u5148\u982d\u306e\u30de\u30fc\u30ab\u3078
+marker.last=\u6700\u5f8c\u306e\u30de\u30fc\u30ab\u3078
+marker.next=\u6b21\u306e\u30de\u30fc\u30ab\u3078
+marker.previous=\u524d\u306e\u30de\u30fc\u30ab\u3078
+
+export.tablature-enabled=TAB\u8b5c\u3092\u8868\u793a
+export.score-enabled=\u4e94\u7dda\u8b5c\u3092\u8868\u793a
+export.chord-name-enabled=\u30b3\u30fc\u30c9\u540d\u3092\u8868\u793a
+export.chord-diagram-enabled=\u30b3\u30fc\u30c9\u30fb\u30c0\u30a4\u30a2\u30b0\u30e9\u30e0\u3092\u8868\u793a
+export.black-and-white=\u767d\u9ed2\u30e2\u30fc\u30c9
+
+scale=\u30b9\u30b1\u30fc\u30eb\u8868
+scale.list=\u30b9\u30b1\u30fc\u30eb\u8868
+
+text.insert=\u30c6\u30ad\u30b9\u30c8\u633f\u5165
+text.editor=\u30c6\u30ad\u30b9\u30c8\u30fb\u30a8\u30c7\u30a3\u30bf
+text.text=\u30c6\u30ad\u30b9\u30c8
+
+tools=\u30c4\u30fc\u30eb
+tools.scale=\u30b9\u30b1\u30fc\u30eb\u8868
+tools.browser=\u30d6\u30e9\u30a6\u30b6
+tools.batch=\u30d0\u30c3\u30c1\u51e6\u7406/\u4e00\u62ec\u30d5\u30a1\u30a4\u30eb\u5909\u63db
+tools.plugins=\u30d7\u30e9\u30b0\u30a4\u30f3
+tools.shortcuts=\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u30ad\u30fc
+tools.settings=\u74b0\u5883\u8a2d\u5b9a/Settings
+tools.transpose=\u79fb\u8abf
+tools.transpose.semitones=\u534a\u97f3\u79fb\u8abf
+tools.transpose.apply-to-track=\u5168\u5c0f\u7bc0\u3092\u79fb\u8abf\u3059\u308b
+tools.transpose.apply-to-measure=\u73fe\u5c0f\u7bc0\u306e\u307f\u79fb\u8abf\u3059\u308b
+tools.transpose.apply-to-all-tracks=\u5168\u30c8\u30e9\u30c3\u30af\u306b\u9069\u5fdc\u3059\u308b
+tools.transpose.try-keep-strings=\u97f3\u7b26\u306f\u540c\u3058\u5f26\u3092\u53ef\u80fd\u306a\u9650\u308a\u7dad\u6301\u3059\u308b
+tools.transpose.apply-to-chords=\u30b3\u30fc\u30c9\u3092\u79fb\u8abf\u3059\u308b
+
+browser.dialog=\u30d6\u30e9\u30a6\u30b6
+browser.menu.file=\u30d5\u30a1\u30a4\u30eb
+browser.open=\u958b\u304f
+browser.exit=\u7d42\u4e86
+browser.menu.collection=\u30b3\u30ec\u30af\u30b7\u30e7\u30f3
+browser.menu.go=Go
+browser.collection.select=\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u306e\u9078\u629e
+browser.collection.open=\u958b\u304f
+browser.collection.remove=\u524a\u9664
+browser.collection.close=\u9589\u3058\u308b
+browser.collection.new=\u65b0\u898f
+browser.go-root=\u30db\u30fc\u30e0
+browser.go-back=\u623b\u308b
+browser.refresh=\u66f4\u65b0
+browser.factory.fs.name=\u30d5\u30a1\u30a4\u30eb\u30fb\u30b7\u30b9\u30c6\u30e0
+browser.collection.fs.name=\u540d\u524d
+browser.collection.fs.path=\u30d5\u30a9\u30eb\u30c0
+browser.collection.fs.editor-title=\u30d5\u30a1\u30a4\u30eb\u30fb\u30b7\u30b9\u30c6\u30e0\u30fb\u30b3\u30ec\u30af\u30b7\u30e7\u30f3
+browser.collection.fs.editor-tip=\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u30fb\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e
+browser.collection.fs.invalid-path=\u6709\u52b9\u306a\u30d5\u30a9\u30eb\u30c0\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
+
+midi.port=MIDI\u30dd\u30fc\u30c8
+midi.sequencer=MIDI\u30b7\u30fc\u30b1\u30f3\u30b5
+
+plugin.unknown-value=\u7121\u52b9.
+plugin.column.name=\u30d7\u30e9\u30b0\u30a4\u30f3\u540d
+plugin.column.enabled=\u6709\u52b9
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=\u30d5\u30a1\u30a4\u30eb
+edit.items=\u7de8\u96c6
+property.items=\u30b9\u30b3\u30a2\u60c5\u5831\u306e\u7de8\u96c6
+track.items=\u30c8\u30e9\u30c3\u30af
+duration.items=\u97f3\u7b26
+beat.items=\u30bf\u30a4/\u30b3\u30fc\u30c9\u633f\u5165
+composition.items=\u30c6\u30f3\u30dd\u30fb\u62cd\u5b50\u8a18\u53f7
+repeat.items=\u30ea\u30d4\u30fc\u30c8\u8a18\u53f7
+transport.items=\u30d7\u30ec\u30fc\u30e4
+marker.items=\u30de\u30fc\u30ab
+insert.items=\u8ffd\u52a0
+layout.items=\u30ec\u30a4\u30a2\u30a6\u30c8
+view.items=\u30d5\u30ec\u30c3\u30c8\u30dc\u30fc\u30c9/\u30d4\u30a2\u30ce/\u30df\u30ad\u30b5
+effect.items=\u30a8\u30d5\u30a7\u30af\u30c8/\u30c6\u30af\u30cb\u30c3\u30af
+dynamic.items=\u5f37\u5f31\u8a18\u53f7
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=\u30d5\u30a1\u30a4\u30eb: \u65b0\u898f
+action.file.open=\u30d5\u30a1\u30a4\u30eb: \u958b\u304f
+action.file.open-url=\u30d5\u30a1\u30a4\u30eb: URL\u3092\u958b\u304f
+action.file.save=\u30d5\u30a1\u30a4\u30eb: \u4fdd\u5b58
+action.file.save-as=\u30d5\u30a1\u30a4\u30eb: \u5225\u540d\u4fdd\u5b58
+action.file.print=\u30d5\u30a1\u30a4\u30eb: \u5370\u5237
+action.file.print-preview=\u30d5\u30a1\u30a4\u30eb: \u5370\u5237\u30d7\u30ec\u30d3\u30e5
+action.file.exit=\u30d5\u30a1\u30a4\u30eb: \u7d42\u4e86
+action.edit.undo=\u7de8\u96c6: \u5143\u306b\u623b\u3059
+action.edit.redo=\u7de8\u96c6: \u3084\u308a\u76f4\u3059
+action.edit.voice-1=\u7de8\u96c6: \u97f3\u58f0\u9078\u629e 1
+action.edit.voice-2=\u7de8\u96c6: \u97f3\u58f0\u9078\u629e 2
+action.composition.change-time-signature=\u62cd\u5b50: \u62cd\u5b50\u8a18\u53f7
+action.composition.change-tempo=\u62cd\u5b50: \u30c6\u30f3\u30dd
+action.composition.change-info=\u62cd\u5b50: \u30b9\u30b3\u30a2\u60c5\u5831\u306e\u7de8\u96c6
+action.composition.change-clef=\u62cd\u5b50: \u97f3\u90e8\u8a18\u53f7
+action.composition.change-key-signature=\u62cd\u5b50: \u8abf\u5b50\u8a18\u53f7
+action.composition.change-triplet-feel=\u62cd\u5b50: \u30b9\u30a6\u30a3\u30f3\u30b0\u30fb\u30d5\u30a3\u30fc\u30eb
+action.view.layout-set-page=\u8868\u793a: \u7e26\u30da\u30fc\u30b8
+action.view.layout-set-linear=\u8868\u793a: \u6a2a\u30b9\u30af\u30ed\u30fc\u30eb
+action.view.layout-set-multitrack=\u8868\u793a: \u30de\u30eb\u30c1\u30c8\u30e9\u30c3\u30af\u30fb\u30e2\u30fc\u30c9
+action.view.layout-set-score-enabled=\u8868\u793a: \u4e94\u7dda\u8868\u8a18
+action.view.layout-set-tablature-enabled=\u8868\u793a: TAB\u8b5c
+action.view.layout-set-compact=\u8868\u793a: \u30b3\u30f3\u30d1\u30af\u30c8
+action.view.layout-set-chord-diagram-enabled=\u8868\u793a: \u30b3\u30fc\u30c9\u30c0\u30a4\u30a2\u30b0\u30e9\u30e0
+action.view.layout-set-chord-name-enabled=\u8868\u793a: \u30b3\u30fc\u30c9\u540d
+action.view.show-fretboard=\u8868\u793a: \u30d5\u30ec\u30c3\u30c8\u30dc\u30fc\u30c9
+action.view.show-piano=\u8868\u793a: \u30d4\u30a2\u30ce
+action.view.show-matrix=\u8868\u793a: \u30de\u30c8\u30ea\u30c3\u30af\u30b9
+action.view.show-mixer=\u8868\u793a: \u30df\u30ad\u30b5
+action.view.show-transport=\u8868\u793a: \u30d7\u30ec\u30fc\u30e4
+action.track.add=\u30c8\u30e9\u30c3\u30af: \u8ffd\u52a0
+action.track.remove=\u30c8\u30e9\u30c3\u30af: \u524a\u9664
+action.track.clone=\u30c8\u30e9\u30c3\u30af: \u8907\u88fd
+action.track.go-first=\u30c8\u30e9\u30c3\u30af: \u5148\u982d\u3078
+action.track.go-last=\u30c8\u30e9\u30c3\u30af: \u6700\u7d42\u3078
+action.track.go-next=\u30c8\u30e9\u30c3\u30af: \u6b21\u3078
+action.track.go-previous=\u30c8\u30e9\u30c3\u30af: \u524d\u3078
+action.track.lyrics=\u30c8\u30e9\u30c3\u30af: \u6b4c\u8a5e\u30a8\u30c7\u30a3\u30bf\u3092\u958b\u304f
+action.track.properties=\u30c8\u30e9\u30c3\u30af: \u30c8\u30e9\u30c3\u30af\u306e\u30d7\u30ed\u30d1\u30c6\u30a3
+action.track.move-down=\u30c8\u30e9\u30c3\u30af: \u4e0b\u3078\u79fb\u52d5\u3055\u305b\u308b
+action.track.move-up=\u30c8\u30e9\u30c3\u30af: \u4e0a\u3078\u79fb\u52d5\u3055\u305b\u308b
+action.measure.add=\u5c0f\u7bc0: \u8ffd\u52a0 (\u7a7a\u5c0f\u7bc0)
+action.measure.remove=\u5c0f\u7bc0: \u524a\u9664 (\u9078\u629e\u7bc4\u56f2)
+action.measure.copy=\u5c0f\u7bc0: \u30b3\u30d4\u30fc (\u9078\u629e\u7bc4\u56f2)
+action.measure.paste=\u5c0f\u7bc0: \u8cbc\u308a\u4ed8\u3051
+action.measure.clean=\u5c0f\u7bc0: \u9664\u53bb
+action.measure.go-first=\u5c0f\u7bc0: \u5148\u982d\u3078
+action.measure.go-last=\u5c0f\u7bc0: \u6700\u5f8c\u3078
+action.measure.go-next=\u5c0f\u7bc0: \u6b21\u3078
+action.measure.go-previous=\u5c0f\u7bc0: \u524d\u3078
+action.beat.general.remove-unused-voice=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u672a\u4f7f\u7528\u97f3\u58f0\u306e\u9664\u53bb
+action.beat.general.voice-up=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u7b26\u5c3e\u306e\u5411\u304d\u3092\u4e0a\u306b\u3059\u308b
+action.beat.general.voice-down=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u7b26\u5c3e\u306e\u5411\u304d\u3092\u4e0b\u306b\u3059\u308b
+action.beat.general.voice-auto=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u7b26\u5c3e\u306e\u5411\u304d\u306e\u81ea\u52d5\u8abf\u6574
+action.beat.general.set-stroke-up=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u2193\u30a2\u30c3\u30d7\u30b9\u30c8\u30ed\u30fc\u30af
+action.beat.general.set-stroke-down=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u2191\u30c0\u30a6\u30f3\u30b9\u30c8\u30ed\u30fc\u30af
+action.beat.general.move-left=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: 1\u62cd\u5de6\u3078\u79fb\u52d5\u3059\u308b
+action.beat.general.move-right=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: 1\u62cd\u53f3\u3078\u79fb\u52d5\u3059\u308b
+action.beat.general.move-custom=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u62cd\u79fb\u52d5\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba
+action.note.general.clean-beat=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: 1\u62cd\u9664\u53bb
+action.note.general.decrement-semitone=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u534a\u97f3\u4e0b\u3052\u308b
+action.note.general.increment-semitone=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u534a\u97f3\u4e0a\u3052\u308b
+action.note.general.shift-down=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u4e0b\u5f26\u306b\u30b7\u30d5\u30c8
+action.note.general.shift-up=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u4e0a\u5f26\u306b\u30b7\u30d5\u30c8
+action.note.general.tied=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u2040 - \u30bf\u30a4
+action.note.duration.set-whole=\u97f3\u7b26: \u5168\u97f3\u7b26
+action.note.duration.set-half=\u97f3\u7b26: 2\u5206\u97f3\u7b26
+action.note.duration.set-quarter=\u97f3\u7b26: 4\u5206\u97f3\u7b26
+action.note.duration.set-eighth=\u97f3\u7b26: 8\u5206\u97f3\u7b26
+action.note.duration.set-sixteenth=\u97f3\u7b26: 16\u5206\u97f3\u7b26
+action.note.duration.set-thirty-second=\u97f3\u7b26: 32\u5206\u97f3\u7b26
+action.note.duration.set-sixty-fourth=\u97f3\u7b26: 64\u5206\u97f3\u7b26
+action.note.duration.change-dotted=\u97f3\u7b26: \u4ed8\u70b9
+action.note.duration.change-double-dotted=\u97f3\u7b26: \u8907\u4ed8\u70b9
+action.note.duration.change-division-type=\u97f3\u7b26: \u9023\u7b26
+action.note.duration.decrement-duration=\u97f3\u7b26: \u97f3\u4fa1\u3092\u4e0b\u3052\u308b
+action.note.duration.increment-duration=\u97f3\u7b26: \u97f3\u4fa1\u3092\u4e0a\u3052\u308b
+action.note.effect.change-vibrato=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \uff5e - \u30f4\u30a3\u30d6\u30e9\u30fc\u30c8
+action.note.effect.change-bend=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: C - \u30c1\u30e7\u30fc\u30ad\u30f3\u30b0
+action.note.effect.change-slide=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: S - \u30b9\u30e9\u30a4\u30c9
+action.note.effect.change-hammer=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: H/P - \u30cf\u30f3\u30de\u30ea\u30f3\u30b0\u30fb\u30aa\u30f3/\u30d7\u30ea\u30f3\u30b0\u30fb\u30aa\u30d5
+action.note.effect.change-accentuated=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: ^ - \u30a2\u30af\u30bb\u30f3\u30c8
+action.note.effect.change-dead=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: x - \u30c7\u30c3\u30c9\u30ce\u30fc\u30c8/\u30d6\u30e9\u30c3\u30b7\u30f3\u30b0
+action.note.effect.change-fade-in=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \uff1c - \u30d5\u30a7\u30fc\u30c9\u30a4\u30f3
+action.note.effect.change-ghost=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: ( ) - \u30b4\u30fc\u30b9\u30c8\u30ce\u30fc\u30c8
+action.note.effect.change-grace=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u2669 - \u88c5\u98fe\u8a18\u53f7
+action.note.effect.change-harmonic=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: Harm. - \u30cf\u30fc\u30e2\u30cb\u30af\u30b9
+action.note.effect.change-heavy-accentuated=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: ^^ - \u91cd\u30a2\u30af\u30bb\u30f3\u30c8
+action.note.effect.change-palm-mute=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: M - \u30d6\u30ea\u30c3\u30b8\u30fb\u30df\u30e5\u30fc\u30c8
+action.note.effect.change-popping=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u30dd\u30c3\u30d4\u30f3\u30b0
+action.note.effect.change-slapping=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \u30b9\u30e9\u30c3\u30d4\u30f3\u30b0/\u30c1\u30e7\u30c3\u30d1
+action.note.effect.change-staccato=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: \uff0e - \u30b9\u30bf\u30c3\u30ab\u30fc\u30c8
+action.note.effect.change-tapping=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: Tapping - \u30bf\u30c3\u30d4\u30f3\u30b0
+action.note.effect.change-tremolo-bar=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: tr. - \u30c8\u30ea\u30eb
+action.note.effect.change-tremolo-picking=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: Picking Tr. - \u30d4\u30c3\u30ad\u30f3\u30b0\u30fb\u30c8\u30ea\u30eb
+action.note.effect.change-trill=\u97f3\u7b26/\u30a8\u30d5\u30a7\u30af\u30c8: tr. - \u30c8\u30ea\u30eb
+action.insert.open-repeat=\u62cd\u5b50: \u30ea\u30d4\u30fc\u30c8\u958b\u59cb
+action.insert.close-repeat=\u62cd\u5b50: \u30ea\u30d4\u30fc\u30c8\u7d42\u4e86
+action.insert.repeat-alternative=\u62cd\u5b50: \u30ab\u30c3\u30b3(\u30ea\u30d4\u30fc\u30c8)
+action.insert.chord=\u97f3\u7b26: \u30b3\u30fc\u30c9\u633f\u5165
+action.insert.text=\u97f3\u7b26: \u30c6\u30ad\u30b9\u30c8\u633f\u5165
+action.marker.add=\u30de\u30fc\u30ab: \u8ffd\u52a0
+action.marker.go-next=\u30de\u30fc\u30ab: \u6b21\u3078
+action.marker.go-previous=\u30de\u30fc\u30ab: \u524d\u3078
+action.transport.play=\u30d7\u30ec\u30fc\u30e4: \u518d\u751f
+action.transport.stop=\u30d7\u30ec\u30fc\u30e4: \u505c\u6b62
+action.transport.mode=\u30d7\u30ec\u30fc\u30e4: \u518d\u751f\u8a2d\u5b9a
+action.transport.metronome=\u30d7\u30ec\u30fc\u30e4: \u30e1\u30c8\u30ed\u30ce\u30fc\u30e0 ON/OFF
+action.transport.set-loop-start=\u30d7\u30ec\u30fc\u30e4: \u30eb\u30fc\u30d7\u306e\u958b\u59cb\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a
+action.transport.set-loop-end=\u30d7\u30ec\u30fc\u30e4: \u30eb\u30fc\u30d7\u306e\u7d42\u4e86\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a
+action.tools.batch=\u30c4\u30fc\u30eb: \u30d0\u30c3\u30c1\u51e6\u7406/\u4e00\u62ec\u30d5\u30a1\u30a4\u30eb\u5909\u63db
+action.tools.browser=\u30c4\u30fc\u30eb: \u30d6\u30e9\u30a6\u30b6
+action.tools.transpose=\u30c4\u30fc\u30eb: \u79fb\u8abf
+action.settings.configure=\u74b0\u5883\u8a2d\u5b9a/Settings
+action.help.doc=\u30d8\u30eb\u30d7: \u30c9\u30ad\u30e5\u30e1\u30f3\u30c8
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_lt.properties b/TuxGuitar-testing/platform-all/share/lang/messages_lt.properties
new file mode 100644
index 0000000..3c5e8a1
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_lt.properties
@@ -0,0 +1,687 @@
+
+ok=Gerai
+cancel=Atsisakyti
+yes=Taip
+no=Ne
+add=Prid\u0117ti
+edit=Redaguoti
+remove=Pa\u0161alinti
+save=\u012Era\u0161yti
+exit=Baigti
+close=U\u017Everti
+choose=Pasirinkti
+color=Spalva
+title=Pavadinimas
+go=Eiti
+warning=\u012Esp\u0117jimas
+error=Klaida
+plugins=Priedai
+options=Parinktys
+defaults=Numatytai
+clean=Nuimti
+rename=Pervardyti
+fret=Skirsnis
+position=Pozicija
+name=Vardas
+author=Autorius
+version=Versija
+description=Apra\u0161ymas
+info=Informacija
+configure=Konfig\u016Bravimas
+url=URL
+
+file=Failas
+file.new=Naujas
+file.open=Atverti
+file.save=\u012Era\u0161yti
+file.save-as=\u012Era\u0161yti taip
+file.save-changes-question=K\u016Brinyje yra ne\u012Fra\u0161yt\u0173 pakeitim\u0173.\nAr dabar juos \u012Fra\u0161yti?
+file.exit=Baigti
+file.export=Eksportuoti
+file.export-midi=Eksportuoti \u012F MIDI
+file.export-pdf=Eksportuoti \u012F PDF
+file.print=Spausdinti
+file.print-preview=Spaudinio per\u017Ei\u016Bra
+file.import=Importuoti
+file.import-midi=Importuoti MIDI
+file.export-ascii=Eksportuoti \u012F ASCII
+file.history=Istorija
+file.open-url=Atverti URL
+file.open.error=Nepavyko atverti: {0}
+file.save.error=Nepavyko \u012Fra\u0161yti: {0}
+file.import.error=Nepavyko importuoti: {0}
+file.export.error=Nepavyko eksportuoti: {0}
+file.overwrite-question=Toks failas jau yra. Ar j\u012F perra\u0161yti?
+
+edit.menu=Taisymas
+edit.undo=At\u0161aukti
+edit.redo=Atstatyti
+edit.copy=Kopijuoti
+edit.from=Nuo
+edit.to=Iki
+edit.all-tracks=Visi takeliai
+edit.paste=\u012Ed\u0117ti
+edit.paste.count=\u012Ed\u0117ti kiek\u012F
+edit.paste.replace-mode=\u012Ed\u0117ti esamam takte
+edit.paste.insert-mode=Id\u0117ti naujam takte
+edit.delete=Pa\u0161alinti
+edit.cut=I\u0161kirpti
+edit.mouse-mode-selection=\u017Dym\u0117jimo pele veiksena
+edit.mouse-mode-edition=Partit\u016Bros redagavimo veiksena
+edit.not-natural-key=Diezai/bemoliai
+edit.voice-1=Parinkti bals\u0105 1
+edit.voice-2=Parinkti bals\u0105 2
+
+view=Rodymas
+view.layout=Maketas
+view.layout.page=Lape
+view.layout.linear=Linijoje
+view.layout.compact=Glaustai
+view.layout.multitrack=Daug takeli\u0173
+view.layout.chord-style=Akord\u0173 vaizdavimo b\u016Bdas
+view.layout.chord-name=Akordo pavadinimas
+view.layout.chord-diagram=Akordo diagrama
+view.layout.score-enabled=Natos
+view.layout.tablature-enabled=Tabulat\u016Bra
+view.show-mixer=Gars\u0173 mai\u0161iklis
+view.show-fretboard=Grifas
+view.show-piano=Pianino klaviat\u016Bra
+view.show-matrix=Grafin\u0117 gars\u0173 lentel\u0117
+view.show-transport=Grotuvas
+
+fretboard.direction=Kryptis
+fretboard.right-mode=De\u0161niarankiams
+fretboard.left-mode=Kairiarankiams
+fretboard.background-color=Fono spalva
+fretboard.display-note-text=Natos pavadinimas
+fretboard.display-scale-text=Rodyti partit\u016Bros pavadinim\u0105
+fretboard.font=\u0160riftas
+fretboard.fretpoint-color=Grifo spalva
+fretboard.note-color=Natos spalva
+fretboard.scale-note-color=Penklin\u0117s lapo spalva
+fretboard.settings=Grifo nuostatos
+fretboard.string-color=Styg\u0173 spalva
+fretboard.settings.options=Parinktys
+
+piano.editor=Redaguoti pianino klaviat\u016Bra
+piano.natural-key-color=\u012Eprasta klavi\u0161\u0173 spalva
+piano.not-natural-key-color=Ne\u012Fprasta klavi\u0161\u0173 spalva
+piano.note-color=Natos spalva
+piano.scale-note-color=Nat\u0173 spalva partit\u016Broje
+piano.settings=Pianino klaviat\u016Bros nuostatos
+
+matrix.editor=Grafinis gars\u0173 redaktorius
+matrix.grids=Gardeli\u0173 tankis
+matrix.border-color=R\u0117melio spalva
+matrix.font=\u0160riftas
+matrix.foreground-color=Priekio spalva
+matrix.line-color-1=Nelygini\u0173 linij\u0173 spalva
+matrix.line-color-2=Lygini\u0173 linij\u0173 spalva
+matrix.line-color-over=Linijos po \u017Eymekliu spalva
+matrix.note-color=Natos spalva
+matrix.play-note-color=Grojamos natos spalva
+matrix.position-color=Pozicijos spalva
+matrix.settings=Lentel\u0117s nuostatos
+
+composition=K\u016Brinys
+composition.timesignature=Metras
+composition.timesignature.Numerator=Skaitiklis
+composition.timesignature.denominator=Vardiklis
+composition.timesignature.to-the-end=Iki pabaigos
+composition.tempo=Tempas
+composition.tempo-percent=Tempas procentais
+composition.tempo.invalid=Neteisingas tempas
+composition.tempo.start-to-end=\u0160\u012F temp\u0105 taikyti visam k\u016Briniui
+composition.tempo.position-to-end=\u0160\u012F temp\u0105 taikyti iki pabaigos
+composition.tempo.position-to-next=\u0160\u012F temp\u0105 taikyti iki tempo pakeitimo \u017Eenklo
+composition.properties=Apie k\u016Brin\u012F
+composition.name=Pavadinimas
+composition.artist=Atlik\u0117jas
+composition.album=Albumas
+composition.author=Autorius
+composition.date=Data
+composition.copyright=Autoryst\u0117s teis\u0117s
+composition.writer=TAB'\u0173 k\u016Brimas
+composition.transcriber=Transkribuota
+composition.comments=Komentarai
+composition.tripletfeel=Triol\u0117mis
+composition.clef=Raktas
+composition.clef.treble=Smuiko
+composition.clef.bass=Boso
+composition.clef.tenor=Tenoro
+composition.clef.alto=Alto
+composition.clef.to-the-end=Taikyti \u0161\u012F rakt\u0105 iki pabaigos
+composition.keysignature=Tonacija
+composition.keysignature.natural=Be prieraktini\u0173 \u017Eenkl\u0173
+composition.keysignature.sharp-1=1 diezas
+composition.keysignature.sharp-2=2 diezai
+composition.keysignature.sharp-3=3 diezai
+composition.keysignature.sharp-4=4 diezai
+composition.keysignature.sharp-5=5 diezai
+composition.keysignature.sharp-6=6 diezai
+composition.keysignature.sharp-7=7 diezai
+composition.keysignature.flat-1=1 bemolis
+composition.keysignature.flat-2=2 bemoliai
+composition.keysignature.flat-3=3 bemoliai
+composition.keysignature.flat-4=4 bemoliai
+composition.keysignature.flat-5=5 bemoliai
+composition.keysignature.flat-6=6 bemoliai
+composition.keysignature.flat-7=7 bemoliai
+composition.keysignature.to-the-end=Taikyti \u0161\u012F rakt\u0105 iki pabaigos
+composition.tripletfeel=Triol\u0117mis
+composition.tripletfeel.none=Be trioli\u0173 \u201ETriplet Feel\u201C
+composition.tripletfeel.eighth=A\u0161tuntini\u0173 triol\u0117s
+composition.tripletfeel.sixteenth=\u0160e\u0161ioliktini\u0173 triol\u0117s
+composition.tripletfeel.to-the-end=Taikyti trioles \u201Etriplet feel\u201C iki pabaigos
+
+help=Pagalba
+help.help=Pagalba
+help.doc=\u017Dinynas
+help.about=Apie
+help.about.license=Licencijos
+help.about.authors=Autoriai
+help.about.description=Apra\u0161ymas
+
+track=Takeliai
+track.number=Nr.
+track.name=Pavadinimas
+track.color=Spalva
+track.first=Pirmas takelis
+track.last=Paskiausias takelis
+track.previous=Ankstesnis takelis
+track.next=Kitas takelis
+track.add=Prid\u0117ti takel\u012F
+track.remove=Pa\u0161alinti takel\u012F
+track.clone=Klonuoti takel\u012F
+track.move-up=Auk\u0161tyn
+track.move-down=\u017Demyn
+track.instrument=Instrumentas 
+track.properties=Takeli\u0173 nuostatos
+track.properties.general=Bendra
+track.name.default-percussion-name=Mu\u0161amieji
+track.lyrics=\u017Dod\u017Eiai
+track.solo=Solo
+track.mute=Tildymas
+
+lyric.editor=\u017Dod\u017Ei\u0173 redaktorius
+
+measure=Taktai
+measure.first=Pirmas taktas
+measure.last=Paskiausias taktas
+measure.previous=Ankstesnis taktas
+measure.next=Kitas taktas
+measure.add=Prid\u0117ti takt\u0105
+measure.add.count=Prid\u0117ti skai\u010Diavim\u0105
+measure.add-before-current-position=Prid\u0117ti takt\u0105 prie\u0161 esam\u0105 pozicij\u0105
+measure.add-after-current-position=Prid\u0117ti takt\u0105 u\u017E esamos pozicijos
+measure.add-at-end=Prid\u0117ti takt\u0105 gale
+measure.remove=Pa\u0161alinti takt\u0105
+measure.copy=Kopijuoti takt\u0105
+measure.paste=\u012Ed\u0117ti takt\u0105
+measure.clean=Nuimti takto \u017Eenkl\u0105
+
+duration=Trukm\u0117
+duration.whole=Pilna
+duration.half=Pusin\u0117
+duration.quarter=Ketvirtin\u0117
+duration.eighth=A\u0161tuntin\u0117
+duration.sixteenth=\u0160e\u0161ioliktin\u0117
+duration.thirtysecond=Trisde\u0161imt antrin\u0117
+duration.sixtyfourth=\u0160e\u0161iasde\u0161imt ketvirtin\u0117
+duration.dotted=Su ta\u0161ku
+duration.doubledotted=Su dviem ta\u0161kais
+duration.division-type=Triol\u0117
+
+dynamic=Dinamika
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano
+dynamic.mezzo-forte=Mezzo Forte
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Melizmai ir efektai
+effects.vibrato=Vibrato
+effects.bend=Tempimas
+effects.deadnote=Nuslopintoji nata
+effects.slide=Glisando
+effects.hammer=Legato (Hammer-on/Pull-off)
+effects.tremolo-bar=Rankena (tremolo bar)
+effects.tremolo-bar-editor=Tremolo rankena redagavimas
+effects.tremolo-bar.dip=Nuleisti ranken\u0105 (dip)
+effects.tremolo-bar.dive=Nuleisti ir atleisti (dive)
+effects.tremolo-bar.release-up=Atleisti auk\u0161tyn
+effects.tremolo-bar.release-down=Atleisti \u017Eemyn
+effects.tremolo-bar.inverted-dip=Atbulas nuleidimas (inverted dip) 
+effects.tremolo-bar.return=Gr\u0105\u017Einimas
+effects.ghostnote=Prislopintoji nata
+effects.accentuatednote=Akcentuotoji nata
+effects.heavyaccentuatednote=Stipriai akcentuota nata
+effects.harmonic=Fla\u017Eoletas
+effects.grace=For\u0161lagas
+effects.grace-editor=For\u0161lago redagavimas
+effects.grace.before-beat=Silpnoji ritmo dalis
+effects.grace.on-beat=Stiprioji ritmo dalis
+effects.grace.transition=Artikuliavimas
+effects.grace.transition-none=N\u0117ra
+effects.grace.transition-bend=Tempimas
+effects.grace.transition-slide=Glisando
+effects.grace.transition-hammer=Legato
+effects.trill=Trel\u0117
+effects.trill-editor=Treli\u0173 redagavimas
+effects.tremolo-picking=Skambinimas tremolo
+effects.tremolo-picking-editor=Tremolo redagavimas
+effects.palm-mute=Slopinimas delnu
+effects.staccato=Stakato
+effects.tapping=Tapping (legato de\u0161ine ranka)
+effects.slapping=Slapping (sm\u016Bgiavimas \u012F styg\u0105)
+effects.popping=Popping (stygos kabinimas nuo grifo pus\u0117s)
+effects.fade-in=Laipsni\u0161kas atsiradimas
+effects.harmonic-editor=Fla\u017Eolet\u0173 redagavimas
+effects.harmonic.type-of-harmonic=Fla\u017Eoleto tipas
+effects.harmonic.natural=Paprastasis fla\u017Eoletas
+effects.harmonic.artificial=Dirbtinis fla\u017Eoletas
+effects.harmonic.artificial.key-offset=Tonacijos poslinkis
+effects.harmonic.tapped=Fla\u017Eoletas \u201Etapped\u201C
+effects.harmonic.tapped.left-hand=Kairioji ranka
+effects.harmonic.tapped.right-hand=De\u0161inioji ranka
+effects.harmonic.pinch=Obertoninis fla\u017Eoletas (squealie)
+effects.harmonic.semi=Pusiau fla\u017Eoletas
+
+bend.editor=Stygos patempim\u0173 redagavimas
+bend.bend=Tempimas
+bend.bend-release=Tempimas/Atleidimas
+bend.bend-release-bend=Tempimas/Atleidimas/Tempimas
+bend.prebend=Patempimas prie\u0161 laikym\u0105
+bend.prebend-release=Patempimas prie\u0161 laikym\u0105/atleidimas
+
+transport=Grotuvas
+transport.start=Groti
+transport.stop=Stabdyti
+transport.pause=Pauz\u0117
+transport.first=Pirmiausias
+transport.last=Paskiausias
+transport.previous=Ankstesnis
+transport.next=Kitas
+transport.metronome=Metronomas
+transport.mode=Kaip groti
+transport.mode.simple=\u012Eprastai
+transport.mode.simple.tempo-percent=Tempo pakeitimas procentais
+transport.mode.simple.loop=Groti kartojant
+transport.mode.trainer=Mokymosi veiksena
+transport.mode.trainer.increment-description=Padidinti per
+transport.mode.loop-range=Pakartojimo r\u0117\u017Eis
+transport.mode.loop-range.from=Groti nuo takto
+transport.mode.loop-range.from-default=Groti nuo prad\u017Ei\u0173
+transport.mode.loop-range.to=Groti iki takto
+transport.mode.loop-range.to-default=Iki galo
+transport.set-loop-start=Nustatyti pakartojimo prad\u017Ei\u0105
+transport.set-loop-end=Nustatyti pakartojimo pabaig\u0105
+
+instruments.volume=Stiprinimas
+instrument.channel=Kanalas
+instrument.effect-channel=Kanalo efektas
+instrument.volume=Garsumas
+instrument.balance=Balansas
+instrument.chorus=Kvadratas (chorus)
+instrument.reverb=Reverberacija
+instrument.phaser=Fazeris
+instrument.tremolo=Tremolo
+instrument.free=Laisvas
+instrument.link=Nuoroda
+
+
+repeat.open=Kartojimo prad\u017Eia
+repeat.close=Kartojimo pabaiga
+repeat.alternative=Alternatyv\u016Bs kartojimai
+repeat.alternative.editor=Alternatyvi\u0173j\u0173 kartojim\u0173 redagavimas
+repetitions=Pakartojimai
+repeat.number-of-repetitions=Kartojim\u0173 skai\u010Dius
+
+beat=Natos
+beat.clean=Akcentavimo nu\u0117mimas
+beat.voice.remove-unused=Nenaudojamo balso pa\u0161alinimas
+beat.voice-up=Linija vir\u0161 penklin\u0117s
+beat.voice-down=Linija po penkline
+beat.voice-auto=Automatinis penklin\u0117s papildymas linijomis
+beat.stroke=Braukti
+beat.stroke-up=Braukimas auk\u0161tyn
+beat.stroke-down=Braukimas \u017Eemyn
+beat.move-left=Perkelti per takto dal\u012F kair\u0117n
+beat.move-right=Perkelti per takto dal\u012F de\u0161in\u0117n
+beat.move-custom=Pasirinktinis perk\u0117limas
+beat.move-custom.dialog.title=Pasirinktinis perk\u0117limas
+beat.move-custom.dialog.direction-tip=Perk\u0117limo kryptis
+beat.move-custom.dialog.move-1.tip=Perk\u0117limas
+beat.move-custom.dialog.move-2.tip=Perk\u0117limas tiksliau
+beat.move-custom.dialog.direction=Kryptis
+beat.move-custom.dialog.direction.right=Perk\u0117limas de\u0161in\u0117n
+beat.move-custom.dialog.direction.left=Perk\u0117limas kair\u0117n
+beat.move-custom.dialog.count=Per kiek
+beat.move-custom.dialog.duration=Trukm\u0117
+beat.move-custom.dialog.duration.type=Su ta\u0161ku/Su dviem ta\u0161kais
+beat.move-custom.dialog.duration.type.normal=Nepakeista
+beat.move-custom.dialog.duration.division-type=Dalinimo b\u016Bdas
+beat.move-custom.dialog.duration.division-type.normal=Normalus (tupletas)
+
+note=Nata
+note.semitone-up=Pustoniu auk\u0161tyn
+note.semitone-down=Pustoniu \u017Eemyn
+note.shift-up=Perstumti auk\u0161tyn
+note.shift-down=Perstumti \u017Eemyn
+note.tiednote=Ligat\u016Bra
+note.deadnote=Nuslopinta nata
+
+insert.chord=\u012Eterpti akord\u0105
+chord.editor=Akord\u0173 redaktorius
+chord=Akordas
+chord.name=Pavadinimas
+chord.bass=Bosas
+chord.custom=Susikurtas akordas
+chord.custom.name-empty-error=Koks nors akordo vardas turi b\u016Bti.
+chord.custom.name-exist-error=Toks akordo pavadinimas jau yra.
+chord.settings.tip=Parinktys
+chord.settings.type=Tipas
+chord.settings.type.most-common=Populiarieji
+chord.settings.type.inversions=Inversijos
+chord.settings.type.close-voiced=Glaustai
+chord.settings.type.open-voiced=I\u0161skleistai
+chord.settings.open-chords=Atviri akordai
+chord.settings.chords-to-display=Akordai, kuriuos rodyti
+chord.settings.search-frets=Surasti skirsn\u012F
+chord.settings.minimum-fret=Minimalus skirsnis
+chord.settings.maximum-fret=Maksimalus skirsnis
+
+instrument=Instrumentas
+instrument.instrument=Instrumentas
+instrument.percussion-track=Mu\u0161am\u0173j\u0173 takelis
+
+tuning=Derinimas
+tuning.offset=Derinimo schema
+tuning.strings=Stygos
+tuning.strings.transpose=Transponuoti veikiam\u0105sias natas
+tuning.strings.transpose.try-keep-strings=Pagal galimyb\u0119 laikyti natas toje pa\u010Dioje stygoje
+tuning.strings.transpose.apply-to-chords=Transponuoti akordus
+
+language=Kalba
+
+choose-color=Spalvos parinkimas
+
+settings=Parinktys
+settings.config=\u201ETuxGuitar\u201C konfig\u016Bravimas
+settings.config.language=Kalba
+settings.config.language.choose=Pasirinkite kalb\u0105
+settings.config.styles=Apipavidalinimo stilius 
+settings.config.styles.general=Bendras stilius
+settings.config.styles.printer=Spausdinimo stilius
+settings.config.styles.font.default=Numatytasis \u0161riftas
+settings.config.styles.font.note=Nat\u0173 \u0161riftas
+settings.config.styles.font.lyric=Dainos \u017Eod\u017Ei\u0173 \u0161riftas
+settings.config.styles.font.text=Teksto \u0161riftas
+settings.config.styles.font.time-signature=Metro \u0161riftas
+settings.config.styles.font.printer-default=Numatytasis spausdinimo \u0161riftas
+settings.config.styles.font.printer-note=Nat\u0173 \u0161riftas spausdinimui
+settings.config.styles.font.printer-time-signature=Metro \u0161riftas spausdinimui
+settings.config.styles.color.score-note=Penklin\u0117s nat\u0173 spalva
+settings.config.styles.color.tab-note=Tab\u0173 natos spalva
+settings.config.styles.color.play-note=Grojamos natos spalva
+settings.config.apply-changes-question=Ar tikrai norite priimti pakeitimus?
+settings.config.sound=Garso \u012Frenginiai
+settings.config.main=Bendra
+settings.config.main.window-title=Lango pavadinimas
+settings.config.main.window-title.help=Lango pavadinime bus rodomos \u0161i\u0173 kintam\u0173j\u0173 reik\u0161m\u0117s:
+settings.config.main.window-title.var.description.appname=\u0160io kintamojo reik\u0161m\u0117 yra programos pavadinimas: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Kintamojo reik\u0161m\u0117 parodo \u201ETuxGuitar\u201C laidos numer\u012F
+settings.config.main.window-title.var.description.filename=\u0160io kintamojo reik\u0161m\u0117 yra atverto failo vardas
+settings.config.main.window-title.var.description.filepath=\u0160io kintamojo reik\u0161m\u0117 yra kelias iki atverto failo
+settings.config.main.window-title.var.description.songname=\u0160io kintamojo reik\u0161m\u0117 yra k\u016Brinio pavadinimas
+settings.config.main.window-title.var.description.songauthor=\u0160io kintamojo reik\u0161m\u0117 yra k\u016Brinio autorius
+settings.config.main.window-title.var.description.songalbum=\u0160io kintamojo reik\u0161m\u0117 yra albumo, kuriame yra k\u016Brinys, pavadinimas
+settings.config.main.window-title.var.description.songartist=\u0160io kintamojo reik\u0161m\u0117 yra k\u016Brinio atlik\u0117jas
+settings.config.main.options=Parinktys
+settings.config.main.splash-enabled=Rodyti informacin\u012F ekran\u0105 programos starto metu
+settings.config.main.table.auto-size.enabled=Automatinio takt\u0173 dyd\u017Eio parinkimo \u012Fjungimas
+settings.config.styles.color.lines=Horizontali\u0173 linij\u0173 spalva
+settings.config.toolbars=\u012Erankin\u0117s
+settings.config.toolbars.tip=Susid\u0117lioti \u012Frankines
+settings.config.toolbars.list=Jums prieinamos \u012Frankin\u0117s
+settings.config.toolbars.move-up=Auk\u0161tyn
+settings.config.toolbars.move-down=\u017Demyn
+settings.config.skin=Apipavidalinimai
+settings.config.skin.choose=Pasirinkite apipavidalinim\u0105
+settings.keybindings=Klavi\u0161\u0173 susiejimo konfig\u016Bravimas
+
+key-bindings-editor=Klavi\u0161\u0173 susiejim\u0173 redagavimas
+key-bindings-editor-action-select=Veiksmo parinkimas
+key-bindings-editor-action-column=Veiksmai
+key-bindings-editor-shortcut-column=Klavi\u0161ai
+key-bindings-editor-push-a-key=Spauskite klavi\u0161\u0105
+key-bindings-editor-save-question=Lik\u0119 nei\u0161saugot\u0173 pakeitim\u0173. Ar tikrai j\u0173 nesaugoj\u0119 baigsite darb\u0105?
+
+key-bindings-editor-override=Spartusis klavi\u0161as jau panaudotas! Ar vis tiek j\u012F naudosite?
+
+print.print=Spausdinti
+print.dialog=Spausdinti
+print.service=Paslauga
+print.service.name=Pavadinimas
+print.service.status=Statusas
+print.service.type=Tipas
+print.service.info=Informacija
+print.range=R\u0117\u017Eiai
+print.range.all-pages=Visi
+print.range.pages=Lapai
+print.range.pages-to=Iki
+print.copies=Kopijos
+print.copies-number=Kopij\u0173 skai\u010Dius
+print.print-to-file=Spausdinti \u012F fail\u0105
+print.file-chooser=Pasir
+print-header.default-song-name=Be pavadinimo
+print-header.default-song-author=Anonimas
+
+print.preview=Spaudinio per\u017Ei\u016Bra
+print.preview.page-of=i\u0161
+
+marker=Gairel\u0117s
+marker.add=Prid\u0117ti gairel\u0119
+marker.list=Gaireli\u0173 s\u0105ra\u0161as
+marker.first=Eiti prie pirmiausios gairel\u0117s
+marker.last=Eiti prie paskiausios gairel\u0117s
+marker.next=Eiti prie kitos gairel\u0117s
+marker.previous=Eiti prie ankstesn\u0117s gairel\u0117s
+
+export.tablature-enabled=Rodyti tabulat\u016Br\u0105
+export.score-enabled=Rodyti penklin\u0119
+export.chord-name-enabled=Rodyti akordus
+export.chord-diagram-enabled=Rodyti akord\u0173 diagram\u0105
+export.black-and-white=Juodai balta
+
+scale=Tonacija
+scale.list=Tonacij\u0173 s\u0105ra\u0161as
+
+text.insert=\u012Eterpti tekst\u0105
+text.editor=Teksto redaktorius
+text.text=Tekstas
+
+tools=\u012Erankiai
+tools.scale=Tonacij\u0173 s\u0105ra\u0161as
+tools.browser=Nar\u0161ykl\u0117
+tools.plugins=Priedai
+tools.shortcuts=Spartieji klavi\u0161ai
+tools.settings=Nuostatos
+
+tools.transpose=Transponavimas
+tools.transpose.semitones=Transponavimas pustoniais
+tools.transpose.apply-to-track=Transponuoti visuose taktuose
+tools.transpose.apply-to-measure=Transponuoti tik \u0161\u012F takt\u0105
+tools.transpose.apply-to-all-tracks=Taikyti visiems takeliams
+tools.transpose.try-keep-strings=Stenkit\u0117s laikyti natas vienoje stygoje, jei tik tai \u012Fmanoma
+tools.transpose.apply-to-chords=Akord\u0173 transponavimas
+
+browser.dialog=Nar\u0161ykl\u0117
+browser.menu.file=Failas
+browser.open=Atverti
+browser.exit=Baigti
+browser.menu.collection=Kolekcija
+browser.menu.go=Eiti
+browser.collection.select=Parinkti kolekcij\u0105
+browser.collection.open=Atverti
+browser.collection.remove=Pa\u0161alinti
+browser.collection.close=U\u017Everti
+browser.collection.new=Naujas
+browser.go-root=Prad\u017Eia
+browser.go-back=Atgal
+browser.refresh=Atnaujinti
+browser.factory.fs.name=Fail\u0173 sistema
+browser.collection.fs.name=Pavadinimas
+browser.collection.fs.path=Aplankas
+browser.collection.fs.editor-title=Kolekcija fail\u0173 sistemoje
+browser.collection.fs.editor-tip=Pasirinkite numatyt\u0105j\u012F aplank\u0105 savo k\u016Briniams
+browser.collection.fs.invalid-path=Pasirinkite teising\u0105 aplank\u0105
+
+midi.port=MIDI prievadas
+midi.sequencer=MIDI sekvenceris
+
+plugin.unknown-value=Neprieinama.
+plugin.column.name=Priedo pavadinimas
+plugin.column.enabled=\u012Ejungta
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Failai
+edit.items=Redakcijos
+property.items=Savyb\u0117s
+track.items=Takeliai
+duration.items=Trukm\u0117s
+beat.items=Ritminiai sm\u016Bgiai
+composition.items=K\u016Briniai
+repeat.items=Pakartojimai
+transport.items=Elementai grotuvui
+marker.items=Gairel\u0117s
+insert.items=\u012Eterpiniai
+layout.items=Maketai
+view.items=Rodiniai
+effect.items=Melizmai
+dynamic.items=Dinamikos \u017Eenklai
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Naujas failas
+action.file.open=Atverti fail\u0105
+action.file.open-url=Atverti URL
+action.file.save=\u012Era\u0161yti
+action.file.save-as=\u012Era\u0161yti kaip
+action.file.print=Spausdinti
+action.file.print-preview=Spaudinio per\u017Ei\u016Bra
+action.file.exit=Baigti darb\u0105 su \u201ETuxGuitar\u201C
+action.edit.undo=At\u0161aukti
+action.edit.redo=Atstatyti
+action.edit.voice-1=Parinkti bals\u0105 1
+action.edit.voice-2=Parinkti bals\u0105 2
+action.composition.change-time-signature=Keisti metr\u0105
+action.composition.change-tempo=Keisti temp\u0105
+action.composition.change-info=Keisti informacij\u0105 apie k\u016Brin\u012F
+action.composition.change-clef=Keisti rakt\u0105
+action.composition.change-key-signature=Keisti tonacij\u0105
+action.composition.change-triplet-feel=Trioli\u0173 keitimas
+action.view.layout-set-page=Penklin\u0117s i\u0161d\u0117stymas lape
+action.view.layout-set-linear=Linijinis penklin\u0117s i\u0161d\u0117stymas
+action.view.layout-set-multitrack=Daugelio takeli\u0173 rodymas
+action.view.layout-set-score-enabled=Rodyti partit\u016Br\u0105
+action.view.layout-set-tablature-enabled=Rodyti tablat\u016Br\u0105
+action.view.layout-set-compact=Rodyti suspaustai
+action.view.layout-set-chord-diagram-enabled=\u012Ejungti akordo diagram\u0105
+action.view.layout-set-chord-name-enabled=\u012Ejungti akordo pavadinim\u0105
+action.view.show-fretboard=Rodyti grif\u0105
+action.view.show-piano=Rodyti pianino klaviat\u016Br\u0105
+action.view.show-matrix=Rodyti gars\u0173 lentele
+action.view.show-mixer=Rodyti gars\u0173 mai\u0161ikl\u012F
+action.view.show-transport=Rodyti grotuv\u0105
+action.track.add=Prid\u0117ti takel\u012F
+action.track.remove=Pa\u0161alinti takel\u012F
+action.track.clone=Klonuoti takel\u012F
+action.track.go-first=Eiti \u012F pirm\u0105 takel\u012F
+action.track.go-last=Eiti \u012F paskutin\u012F takel\u012F
+action.track.go-next=Eiti \u012F kit\u0105 takel\u012F
+action.track.go-previous=Eiti \u012F ankstesn\u012F takel\u012F
+action.track.lyrics=Redaguoti \u017Eod\u017Eius
+action.track.properties=Keisti takelio nuostatas
+action.track.move-down=Takel\u012F perkelti \u017Eemyn
+action.track.move-up=Takel\u012F perkelti auk\u0161tyn
+action.measure.add=Prid\u0117ti takt\u0105
+action.measure.remove=Pa\u0161alinti takt\u0105
+action.measure.copy=Kopijuoti takt\u0105
+action.measure.paste=\u012Ed\u0117ti takt\u0105
+action.measure.clean=Pa\u0161alinti takto \u017Eenkl\u0105
+action.measure.go-first=Eiti \u012F pirm\u0105 takt\u0105
+action.measure.go-last=Eiti \u012F paskutin\u012F takt\u0105
+action.measure.go-next=Eiti \u012F kit\u0105 takt\u0105
+action.measure.go-previous=Eiti \u012F ankstesn\u012F takt\u0105
+action.beat.general.remove-unused-voice=Nenaudojamo balso pa\u0161alinimas
+action.beat.general.voice-up=Penklin\u0119 papildyti auk\u0161tyn
+action.beat.general.voice-down=Penklin\u0119 papildyti \u017Eemyn
+action.beat.general.voice-auto=Automatinis penklin\u0117s papildymas linijomis
+action.beat.general.set-stroke-up=Nustatyti braukim\u0105 auk\u0161tyn
+action.beat.general.set-stroke-down=Nustatyti braukim\u0105 \u017Eemyn
+action.beat.general.move-left=Vienas ritmo sm\u016Bgis kair\u0117n
+action.beat.general.move-right=Vienas ritmo sm\u016Bgis de\u0161in\u0117n
+action.beat.general.move-custom=Susikurti ritmo pie\u0161in\u012F
+action.note.general.clean-beat=Nuimti akcentus
+action.note.general.decrement-semitone=Suma\u017Einti pustoniu
+action.note.general.increment-semitone=Padidinti pustoniu
+action.note.general.shift-down=Poslinkis \u017Eemyn
+action.note.general.shift-up=Poslinkis auk\u0161tyn
+action.note.general.tied=Prid\u0117ti/nuimti jungiam\u0105j\u012F lankel\u012F
+action.note.duration.set-whole=Pilnos natos trukm\u0117
+action.note.duration.set-half=Pusin\u0117s natos trukm\u0117
+action.note.duration.set-quarter=Ketvirtin\u0117s natos trukm\u0117
+action.note.duration.set-eighth=A\u0161tuntin\u0117s natos trukm\u0117
+action.note.duration.set-sixteenth=\u0160e\u0161ioliktin\u0117s natos trukm\u0117
+action.note.duration.set-thirty-second=Trisde\u0161imt antrin\u0117s natos trukm\u0117
+action.note.duration.set-sixty-fourth=\u0160e\u0161iasde\u0161imt ketvirtin\u0117s natos trukm\u0117
+action.note.duration.change-dotted=Prid\u0117ti/nuimti ta\u0161k\u0105
+action.note.duration.change-double-dotted=Prid\u0117ti/nuimti du ta\u0161kus
+action.note.duration.change-division-type=Prid\u0117ti/nuimti triol\u0119
+action.note.duration.decrement-duration=Sutrumpinti trukm\u0119
+action.note.duration.increment-duration=Pailginti trukm\u0119
+action.note.effect.change-vibrato=Prid\u0117ti/nuimti vibrato
+action.note.effect.change-bend=Prid\u0117ti/nuimti tempim\u0105
+action.note.effect.change-slide=Prid\u0117ti/nuimti glisando
+action.note.effect.change-hammer=Prid\u0117ti/nuimti legato
+action.note.effect.change-accentuated=Prid\u0117ti/nuimti akcent\u0105
+action.note.effect.change-dead=Prid\u0117ti/nuimti nuslopint\u0105 nat\u0105
+action.note.effect.change-fade-in=Prid\u0117ti/nuimti gars\u0117jim\u0105
+action.note.effect.change-ghost=Prid\u0117ti/nuimti prislopint\u0105j\u0105 nat\u0105
+action.note.effect.change-grace=Prid\u0117ti/nuimti for\u0161lag\u0105
+action.note.effect.change-harmonic=Prid\u0117ti/nuimti fla\u017Eolet\u0105
+action.note.effect.change-heavy-accentuated=Prid\u0117ti/nuimti ry\u0161k\u0173 akcent\u0105
+action.note.effect.change-palm-mute=Prid\u0117ti/nuimti slopinim\u0105 delnu
+action.note.effect.change-popping=Prid\u0117ti/nuimti \u201Epopping\u201C
+action.note.effect.change-slapping=Prid\u0117ti/nuimti \u201Eslapping\u201C
+action.note.effect.change-staccato=Prid\u0117ti/nuimti stakato
+action.note.effect.change-tapping=Prid\u0117ti/nuimti sm\u016Bgiavim\u0105 (tapping)
+action.note.effect.change-tremolo-bar=Prid\u0117ti/nuimti tremolo rankena
+action.note.effect.change-tremolo-picking=Prid\u0117ti/nuimti tremolo mediatoriumi
+action.note.effect.change-trill=Prid\u0117ti/nuimti trel\u0119
+action.insert.open-repeat=Pakartojimo pabaiga
+action.insert.close-repeat=Pakartojimo pabaiga
+action.insert.repeat-alternative=Volta
+action.insert.chord=\u012Eterpti akord\u0105
+action.insert.text=\u012Eterpti tekst\u0105
+action.marker.add=Prid\u0117ti gairel\u0119
+action.marker.go-next=Eiti iki kitos gairel\u0117s
+action.marker.go-previous=Eiti iki ankstesn\u0117s gairel\u0117s
+action.transport.play=Groti k\u016Brin\u012F
+action.transport.stop=Stabdyti grojim\u0105
+action.transport.mode=Grotuvo veiksena
+action.transport.metronome=Metronomas
+action.transport.set-loop-start=Nustatyti pakartojimo prad\u017Ei\u0105
+action.transport.set-loop-end=Nustatyti pakartojimo pabaig\u0105
+action.tools.browser=K\u016Brini\u0173 nar\u0161ykl\u0117
+action.tools.transpose=Nat\u0173 transponavimas
+action.settings.configure=Nuostatos
+action.help.doc=\u017Dinynas
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_nl.properties b/TuxGuitar-testing/platform-all/share/lang/messages_nl.properties
new file mode 100644
index 0000000..f37b8ff
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_nl.properties
@@ -0,0 +1,616 @@
+ok=Ok
+cancel=Annuleren
+yes=Ja
+no=Nee
+add=Toevoegen
+edit=Bewerk
+remove=Verwijderen
+save=Opslaan
+exit=Afsluiten
+close=Sluiten
+choose=Selecteer
+color=Kleur
+title=Titel
+go=Ga
+warning=Waarschuwing
+error=Fout
+plugins=Plugins
+options=Opties
+defaults=Defaults
+clean=Wissen
+rename=Hernoem
+fret=Fret
+position=Positie
+name=Naam
+author=Auteur
+version=Versie
+description=Omschrijving
+info=Info
+configure=Configureer
+
+tuxguitar.title=TuxGuitar
+
+file=Bestand
+file.new=Nieuw
+file.open=Open
+file.save=Opslaan
+file.save-as=Opslaan Als
+file.save-changes-question=De track heeft niet opgeslagen wijzigingen.\nWilt u dit alsnog opslaan?
+file.exit=Afsluiten
+file.export=Exporteren
+file.export-midi=Exporteer MIDI
+file.export-pdf=Exporteer PDF
+file.print=Afdrukken
+file.print-preview=Afdruk Voorbeeld
+file.import=Importeren
+file.import-midi=Importeer MIDI
+file.export-ascii=Exporteer ASCII
+file.history=Geschiedenis
+file.open-url=Open URL
+file.open.error=Kan bestand niet openen: {0}
+file.save.error=Kan bestand niet openen: {0}
+file.import.error=Kan bestand niet Importeren: {0}
+file.export.error=Kan bestand niet Exporteren: {0}
+file.overwrite-question=Dit bestand bestaat al, wilt u dit overschrijven?
+
+edit.menu=Bewerken
+edit.undo=Ongedaan maken
+edit.redo=Opnieuw
+edit.copy=Kopieer
+edit.from=Van
+edit.to=Naar
+edit.all-tracks=Alle Tracks
+edit.paste=Plakken
+edit.paste.replace-mode=Plak in huidige maat
+edit.paste.insert-mode=Plak in nieuwe maat
+edit.delete=Verwijder
+edit.cut=Knippen
+edit.mouse-mode-selection=Selectie Modus
+edit.mouse-mode-edition=Score Bewerk Modus
+edit.not-natural-key=Sharp/Flat Modus
+
+view=Beeld
+view.layout=Layout
+view.layout.page=Pagina Layout
+view.layout.linear=Lineare Layout
+view.layout.compact=Compacte Layout
+view.layout.multitrack=Multitrack
+view.layout.chord-style=Akkoord Stijl
+view.layout.chord-name=Akkoord Naam 
+view.layout.chord-diagram=Akkoord Diagram
+view.layout.score-enabled=Laat Score zien
+view.layout.tablature-enabled=Bekijk TAB
+view.show-mixer=Bekijk Mixer
+view.show-fretboard=Bekijk Fretboard
+view.show-piano=Bekijk Piano
+view.show-matrix=Bekijk Matrix
+view.show-transport=Bekijk Speler
+
+fretboard.right-mode=Rechter modus
+fretboard.left-mode=Linker modus
+fretboard.background-color=Achtergrond Kleur
+fretboard.display-note-text=Tekst Noot Weergeven
+fretboard.display-scale-text=Tekst Scale Weergeven
+fretboard.font=Lettertype
+fretboard.fretpoint-color=Fret Kleur
+fretboard.note-color=Noot Kleur
+fretboard.scale-note-color=Noten Scale Kleur
+fretboard.settings=Fretboard Voorkeuren
+fretboard.string-color=String Kleur
+fretboard.settings.options=Opties
+
+piano.editor=Piano Editor
+piano.natural-key-color=Natuurlijke Key Kleur
+piano.not-natural-key-color=Onnatuurlijke Key Kleur
+piano.note-color=Noot Kleur
+piano.scale-note-color=Noten Scale Kleur
+piano.settings=Piano Voorkeuren
+
+matrix.editor=Matrix Editor
+matrix.grids=Aantal Grids
+matrix.border-color=Rand Kleur
+matrix.font=Lettertype
+matrix.foreground-color=Voorgrond Kleur
+matrix.line-color-1=Kleur Oneven Rij
+matrix.line-color-2=Kleur Even Rij
+matrix.line-color-over=Muis Over Rij Kleur
+matrix.note-color=Noot Kleur
+matrix.play-note-color=Afspeel Note Kleur
+matrix.position-color=Positie Kleur
+matrix.settings=Matrix Voorkeuren
+
+composition=Compositie
+composition.timesignature=Tijd Signature
+composition.timesignature.Numerator=Numerator
+composition.timesignature.denominator=Denominator
+composition.timesignature.to-the-end=Tot het eind
+composition.tempo=Tempo
+composition.tempo-percent=Percentage
+composition.tempo.invalid=Ongeldig Tempo
+composition.tempo.start-to-end=Voeg dit tempo toe op de hele track
+composition.tempo.position-to-end=Voeg dit tempo tot het eind toe
+composition.tempo.position-to-next=Voeg dit tempo toe tot de volgende tempo markering
+composition.properties=Eigenschappen
+composition.name=Naam
+composition.artist=Artiest
+composition.album=Album
+composition.author=Auteur
+composition.tripletfeel=Triplet Feel
+composition.clef=Clef
+composition.clef.treble=Treble
+composition.clef.bass=Bass
+composition.clef.tenor=Tenor
+composition.clef.alto=Alto
+composition.clef.to-the-end=Voeg deze clef toe tot het einde
+composition.keysignature=Key Signature
+composition.keysignature.natural=Natural
+composition.keysignature.sharp-1=1 Sharp
+composition.keysignature.sharp-2=2 Sharps
+composition.keysignature.sharp-3=3 Sharps
+composition.keysignature.sharp-4=4 Sharps
+composition.keysignature.sharp-5=5 Sharps
+composition.keysignature.sharp-6=6 Sharps
+composition.keysignature.sharp-7=7 Sharps
+composition.keysignature.flat-1=1 Flat
+composition.keysignature.flat-2=2 Flats
+composition.keysignature.flat-3=3 Flats
+composition.keysignature.flat-4=4 Flats
+composition.keysignature.flat-5=5 Flats
+composition.keysignature.flat-6=6 Flats
+composition.keysignature.flat-7=7 Flats
+composition.keysignature.to-the-end=Voeg deze key signature toe tot het einde
+composition.tripletfeel=Triplet Feel
+composition.tripletfeel.none=Geen Triplet Feel
+composition.tripletfeel.eighth=Triplet 8e
+composition.tripletfeel.sixteenth=Triplet 16e
+composition.tripletfeel.to-the-end=Voeg deze triplet feel toe tot het einde
+
+help=Help
+help.help=Help
+help.doc=Documentatie
+help.about=Info
+help.about.license=Licentie
+help.about.authors=Auteurs
+help.about.description=Omschrijving
+
+track=Track
+track.number=N�
+track.name=Naam
+track.color=Kleur
+track.first=Eerste Track
+track.last=Laatste Track
+track.previous=Vorige Track
+track.next=Volgende Track
+track.add=Voeg Track toe
+track.remove=Verwijder Track
+track.clone=Kloon Track
+track.move-up=Omhoog
+track.move-down=Omlaag
+track.instrument=Instrument 
+track.properties=Eigenschappen
+track.properties.general=Algemeen
+track.name.default-percussion-name=Slagwerk
+track.lyrics=Lyrics
+track.solo=Solo
+track.mute=Mute
+
+lyric.editor=Lyric Editor
+
+measure=Maat
+measure.first=Eerste maat
+measure.last=Laatste maat
+measure.previous=Vorige maat
+measure.next=Volgende maat
+measure.add=Voeg maat Toe
+measure.add-before-current-position=Voeg maat toe VOOR de huidige positie
+measure.add-after-current-position=Voeg maat toe NA de huidige positie
+measure.add-at-end=Voeg maat toe aan het einde
+measure.remove=Verwijder maat
+measure.copy=Kopieer maat
+measure.paste=Plak maat
+measure.clean=Wis maat
+
+duration=Duratie
+duration.whole=Helemaal
+duration.half=Half
+duration.quarter=Kwart
+duration.eighth=8e
+duration.sixteenth=16e
+duration.thirtysecond=32e
+duration.sixtyfourth=64e
+duration.dotted=Dotted
+duration.doubledotted=Dubbel Dotted
+duration.division-type=Tupleto
+
+dynamic=Dynamisch
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Effecten
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Dode Noot
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Terug
+effects.ghostnote=Ghost Note
+effects.accentuatednote=Geaccentueerde Noot
+effects.heavyaccentuatednote=Sterk Geaccentueerde Noot
+effects.harmonic=Harmonisch
+effects.grace=Grace Noot
+effects.grace-editor=Grace Noot Editor
+effects.grace.before-beat=Before beat
+effects.grace.on-beat=On beat
+effects.grace.transition=Transition
+effects.grace.transition-none=Geen
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Trill Editor
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Left Hand
+effects.harmonic.tapped.right-hand=Right Hand
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+
+bend.editor=Bend Editor
+bend.bend=Bend
+bend.bend-release=Bend/Release
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=Speler
+transport.start=Start
+transport.stop=Stop
+transport.pause=Pauze
+transport.first=Eerste
+transport.last=Laatste
+transport.previous=Vorige
+transport.next=Volgende
+transport.metronome=Metronome
+transport.mode=Afspeel Modus
+transport.mode.simple=Simple Modus
+transport.mode.simple.tempo-percent=Percentage van tempo
+transport.mode.simple.loop=Speel looped
+transport.mode.trainer=Training Modus
+transport.mode.trainer.increment-description=Geincrementeerd door
+
+instruments.volume=Gain
+instrument.volume=Volume
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balance
+instrument.free=Free
+instrument.link=Link
+
+
+repeat.open=Open Repeat
+repeat.close=Sluit Repeat
+repeat.alternative=Alternatieve Repeats
+repeat.alternative.editor=Bewerk Alternatieve Repeats
+repetitions=Repetities
+repeat.number-of-repetitions=Aantal Repetities
+
+beat=Beat
+beat.clean=Wis Beat
+
+note=Noot
+note.semitone-up=Semitone Omhoog
+note.semitone-down=Semitone Omlaag
+note.shift-up=Shift Omhoog
+note.shift-down=Shift Omlaag
+note.tiednote=Gekoppelde Noot
+note.deadnote=Dode Noot
+
+insert.chord=Voeg Akkoord toe
+chord.editor=Akkoord Editor
+chord=Akkoord
+chord.name=Naam
+chord.bass=Bass
+chord.custom=Handmatig Akkoord
+chord.custom.name-empty-error=Akkoord naam mag niet leeg zijn
+chord.custom.name-exist-error=Akkoord naam bestaat al
+chord.settings.tip=Handmatige Instellingen
+chord.settings.type=Type
+chord.settings.type.most-common=Meest Voorkomende
+chord.settings.type.inversions=Inversies
+chord.settings.type.close-voiced=Sluit Voiced
+chord.settings.type.open-voiced=Open Voiced
+chord.settings.open-chords=Open Akkoorden
+chord.settings.chords-to-display=Zichtbare Akkoorden
+chord.settings.search-frets=Zoek Frets
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+
+instrument=Instrument
+instrument.instrument=Instrument
+instrument.percussion-track=Percussion Track
+
+tuning=Tuning
+tuning.strings=Strings
+tuning.offset=Offset
+
+language=Taal
+
+choose-color=Kies een kleur
+
+settings=Instellingen
+settings.config=Instellingen TuxGuitar
+settings.config.language=Taal
+settings.config.language.choose=Kies Taal
+settings.config.styles=Stijlen
+settings.config.styles.general=Algemene Stijlen
+settings.config.styles.printer=Printer Stijlen
+settings.config.styles.font.default=Standaard Lettertype
+settings.config.styles.font.note=Noot Lettertype
+settings.config.styles.font.lyric=Lyrics Lettertype
+settings.config.styles.font.text=Tekst Lettertype
+settings.config.styles.font.time-signature=Tijd Signature Lettertype
+settings.config.styles.font.printer-default=Printer Standaard Lettertype
+settings.config.styles.font.printer-note=Printer Noot Lettertype
+settings.config.styles.font.printer-time-signature=Printer Tijd Signature Lettertype
+settings.config.styles.color.score-note=Score Noot Kleur
+settings.config.styles.color.tab-note=Tab Noot Kleur
+settings.config.styles.color.play-note=Afspeel Noot Kleur
+settings.config.apply-changes-question=Wilt u deze instellingen nu toepassen?
+settings.config.sound=Geluid
+settings.config.main=Algemeen
+settings.config.main.window-title=Venster Titel
+settings.config.main.window-title.help=De volgende variabelen worden in de venster titel geplaatst:
+settings.config.main.window-title.var.description.appname=Applicatie Naam: TuxGuitar
+settings.config.main.window-title.var.description.appversion=In deze variabele staat de versie van TuxGuitar
+settings.config.main.window-title.var.description.filename=In deze variabele staat de naam van de geopende file
+settings.config.main.window-title.var.description.filepath=In deze variabele staat het pad van de geopende file
+settings.config.main.window-title.var.description.songname=In deze variabele staat de naam van het Nummer
+settings.config.main.window-title.var.description.songauthor=In deze variabele staat de naam van de Auteur van het Nummer
+settings.config.main.window-title.var.description.songalbum=In deze variabele staat de naam van het Album
+settings.config.main.window-title.var.description.songartist=In deze variabele staat de naam van de Artiest
+settings.config.main.options=Opties
+settings.config.main.splash-enabled=Laat opstart animatie (splash) zien
+settings.config.main.table.auto-size.enabled=Automatisch tabellen resizen 
+settings.config.styles.color.lines=Horizontale Lijn Kleur
+settings.config.toolbars=Werkbalken
+settings.config.toolbars.tip=Werkbalk Aanpassen
+settings.config.toolbars.list=Beschikbare Werkbalken
+settings.config.toolbars.move-up=Omhoog
+settings.config.toolbars.move-down=Omlaag
+settings.config.skin=Thema
+settings.config.skin.choose=Kies een Thema
+settings.keybindings=Configureer Sneltoetsen
+
+key-bindings-editor=Sneltoest Editor
+key-bindings-editor-action-select=Selecteer een Actie
+key-bindings-editor-action-column=Acties
+key-bindings-editor-shortcut-column=Toetsen
+key-bindings-editor-push-a-key=Druk op een Toets
+key-bindings-editor-save-question=Er zijn wijzigingen aangebracht, wilt u deze Opslaan?
+
+key-bindings-editor-override=Snelkoppeling is al in gebruik! Wilt u deze wijziging toch doorvoeren?
+
+print.print=Print
+print.dialog=Print
+print.service=Service
+print.service.name=Naam
+print.service.status=Status
+print.service.type=Type
+print.service.info=Info
+print.range=Bereik
+print.range.all-pages=Alle
+print.range.pages=Paginas
+print.range.pages-to=Naar
+print.copies=Kopieen
+print.copies-number=Aantal Kopieen
+print.print-to-file=Print naar bestand
+print.file-chooser=Kies
+print-header.default-song-name=Naamloos
+print-header.default-song-author=Anoniem
+
+print.preview=Afdruk Voorbeeld
+print.preview.page-of=Of
+
+marker=Aanwijzer
+marker.add=Aanwijzer Toevoegen
+marker.list=Aanwijzer Lijst
+marker.first=Ga naar eerst Aanwijzer
+marker.last=Ga naar laatste Aanwijzer
+marker.next=Ga naar volgende Aanwijzer
+marker.previous=Ga naar vorige Aanwijzer
+
+export.tablature-enabled=Laat Tablature zien
+export.score-enabled=Laat Score zien
+
+scale=Scale
+scale.list=Scale Lijst
+
+text.insert=Tekst Invoegen
+text.editor=Tekst Editor
+text.text=Tekst
+
+tools=Extra's
+tools.scale=Scale Lijst
+tools.browser=Browser
+tools.plugins=Plugins
+tools.shortcuts=Snelkoppelingen
+tools.settings=Instellingen
+
+browser.dialog=Browser
+browser.menu.file=Bestand
+browser.open=Open
+browser.exit=Sluit
+browser.menu.collection=Collectie
+browser.menu.go=Ga
+browser.collection.select=Selecteer Collectie
+browser.collection.open=Open
+browser.collection.remove=Verwijder
+browser.collection.close=Sluit
+browser.collection.new=Nieuw
+browser.go-root=Home
+browser.go-back=Terug
+browser.refresh=Ververs
+browser.factory.fs.name=Bestandssysteem
+browser.collection.fs.name=Naam
+browser.collection.fs.path=Map
+browser.collection.fs.editor-title=Bestandssysteem Collectie
+browser.collection.fs.editor-tip=Kies een Collectie Map
+browser.collection.fs.invalid-path=Selecteer een correcte Map
+
+midi.port=MIDI Port
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=Niet beschikbaar
+plugin.column.name=Plugin Naam
+plugin.column.enabled=Ingschakeld
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Bestand Items
+edit.items=Bewerk Items
+property.items=Eigenschappen Items
+track.items=Track Items
+duration.items=Duratie Items
+beat.items=Noot Items
+composition.items=Compositie Items
+repeat.items=Herhaal Items
+transport.items=Speel Items Af
+marker.items=Aanwijzer Items
+insert.items=Voeg Items Toe
+layout.items=Layout Items
+view.items=Bekijk Items
+effect.items=Effecten Items
+dynamic.items=Dynamische Items
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Nieuw Bestand
+action.file.open=Open Bestand
+action.file.open-url=Open URL
+action.file.save=Opslaan
+action.file.save-as=Opslaan Als
+action.file.print=Print
+action.file.print-preview=Afdruk Voorbeeld
+action.file.exit=Sluit TuxGuitar Af
+action.edit.undo=Ongedaan Maken
+action.edit.redo=Opnieuw
+action.composition.change-time-signature=Wijzig Tijd Signature
+action.composition.change-tempo=Wijzig Tempo
+action.composition.change-info=Wijzig Nummer Informatie
+action.composition.change-clef=Wijzig Clef
+action.composition.change-key-signature=Wijzig Key Signature
+action.composition.change-triplet-feel=Wijzig Triplet Feel
+action.view.layout-set-page=Pagina Layout
+action.view.layout-set-linear=Lineare Layout
+action.view.layout-set-multitrack=Multitrack Mode
+action.view.layout-set-score-enabled=Score
+action.view.layout-set-tablature-enabled=Tablature
+action.view.layout-set-compact=Compacte Modus
+action.view.layout-set-chord-diagram-enabled=Akkoord Diagram Aanzetten
+action.view.layout-set-chord-name-enabled=Akkoord Naam Aanzetten
+action.view.show-fretboard=Fretboard
+action.view.show-piano=Piano
+action.view.show-matrix=Matrix
+action.view.show-mixer=Mixer
+action.view.show-transport=Player
+action.track.add=Track Toevoegen
+action.track.remove=Track Verwijderen
+action.track.clone=Track Klonen
+action.track.go-first=Ga naar eerste Track
+action.track.go-last=Go naar laatste Track
+action.track.go-next=Ga naar volgende Track
+action.track.go-previous=Ga naar vorige Track
+action.track.lyrics=Bewerk Track lyrics
+action.track.properties=Wijzig Track Eigenschappen
+action.track.move-down=Omlaag
+action.track.move-up=Omhoog
+action.measure.add=Maat Toevoegen
+action.measure.remove=Maat Verwijderen
+action.measure.copy=Maat Kopieeren
+action.measure.paste=Maat Plakken
+action.measure.clean=Maat Wissen
+action.measure.go-first=Ga naar eerst maat
+action.measure.go-last=Ga naar laatste maat
+action.measure.go-next=Ga naar volgende maat
+action.measure.go-previous=Ga naar vorige maat
+action.note.general.clean-beat=Wis Beat
+action.note.general.decrement-semitone=Decrementeer Semitone
+action.note.general.increment-semitone=Incrementeer Semitone
+action.note.general.shift-down=Schuif Omloog
+action.note.general.shift-up=Schuif Omhoog
+action.note.general.tied=Toevoegen/Verwijderen Koppeling
+action.note.duration.set-whole=Stel Hele Duratie in
+action.note.duration.set-half=Stel 1/2 Duratie in
+action.note.duration.set-quarter=Stel 1/4 Duratie in
+action.note.duration.set-eighth=Stel 1/8 Duratie in
+action.note.duration.set-sixteenth=Stel 1/16 Duratie in
+action.note.duration.set-thirty-second=Zet Duratie op 30 sec
+action.note.duration.set-sixty-fourth=Zet Duratie op 64 sec
+action.note.duration.change-dotted=Toevoegen/Verwijderen Stip
+action.note.duration.change-double-dotted=Toevoegen/Verwijderen Dubbele Stip
+action.note.duration.change-division-type=Toevoegen/Verwijderen Tupleto
+action.note.duration.decrement-duration=Decrementeer Duratie
+action.note.duration.increment-duration=Incrementeer Duratie
+action.note.effect.change-vibrato=Toevoegen/Verwijderen Vibrato
+action.note.effect.change-bend=Toevoegen/Verwijderen Bend
+action.note.effect.change-slide=Toevoegen/Verwijderen Slide
+action.note.effect.change-hammer=Toevoegen/Verwijderen hammer-on/pull-off
+action.note.effect.change-accentuated=Toevoegen/Verwijderen Accent
+action.note.effect.change-dead=Toevoegen/Verwijderen Dode Noten
+action.note.effect.change-fade-in=Toevoegen/Verwijderen Fade In
+action.note.effect.change-ghost=Toevoegen/Verwijderen Ghost
+action.note.effect.change-grace=Toevoegen/Verwijderen Grace
+action.note.effect.change-harmonic=Toevoegen/Verwijderen Harmonisch
+action.note.effect.change-heavy-accentuated=Toevoegen/Verwijderen Sterk Geaccentueerd
+action.note.effect.change-palm-mute=Toevoegen/Verwijderen Palm Mute
+action.note.effect.change-popping=Toevoegen/Verwijderen Popping
+action.note.effect.change-slapping=Toevoegen/Verwijderen Slapping
+action.note.effect.change-staccato=Toevoegen/Verwijderen Staccato
+action.note.effect.change-tapping=Toevoegen/Verwijderen Tapping
+action.note.effect.change-tremolo-bar=Toevoegen/Verwijderen tremolo balk
+action.note.effect.change-tremolo-picking=Toevoegen/Verwijderen Tremolo Picking
+action.note.effect.change-trill=Toevoegen/Verwijderen Trill
+action.insert.open-repeat=Open Repeat
+action.insert.close-repeat=Sluit Repeat
+action.insert.repeat-alternative=Repeat Alternatief
+action.insert.chord=Akkoord Toevoegen
+action.insert.text=Tekst Toevoegen
+action.marker.add=Aanwijzer Toevoegen
+action.marker.go-next=Volgende Aanwijzer
+action.marker.go-previous=Vorige Aanwijzer
+action.transport.play=Speel Nummer
+action.transport.stop=Stop Spelen
+action.transport.mode=Player Modus
+action.transport.metronome=Metrononome
+action.tools.browser=Browser
+action.settings.configure=Instellingen
+action.help.doc=Help
+
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_pl.properties b/TuxGuitar-testing/platform-all/share/lang/messages_pl.properties
new file mode 100644
index 0000000..b7a9c94
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_pl.properties
@@ -0,0 +1,702 @@
+es=hiszpa\u0144ski
+en=angielski
+fr=francuski
+pl=polski
+de=niemiecki
+pt=portugalski
+
+ok=Ok
+cancel=Anuluj
+yes=Tak
+no=Nie
+add=Dodaj
+remove=Usu\u0144
+save=Zapisz
+exit=Wyj\u015bcie
+color=Kolor	
+title=Tytu\u0142
+edit=Edycja
+go=Id\u017a
+error=B\u0142\u0105d
+warning=Uwaga
+plugins=Wtyczki
+choose=Wyb\u00f3r
+options=Opcje
+defaults=Domy\u015blne
+clean=Wyczy\u015b\u0107
+rename=Zmie\u0144 nazw\u0119
+fret=Pr\u00f3g
+position=Pozycja
+
+tuxguitar.title=Tux-Guitar
+
+file=Plik
+file.new=Nowy
+file.open=Otw\u00f3rz
+file.save=Zapisz
+file.save-as=Zapisz jako
+file.exit=Wyj\u015bcie
+file.export=Eksport
+file.export-midi=Eksport do midi
+file.export-pdf=Eksport do pdf
+file.export-ascii=Eksport do ASCII
+file.print=Drukuj
+file.print-preview=Podgl\u0105d wydruku
+file.import=Import
+file.import-midi=Import z Midi
+file.history=Historia
+file.overwrite-question=Plik istnieje, nadpisa\u0107 go ??
+
+edit.undo=Cofnij
+edit.redo=Przywr\u00f3\u0107
+edit.copy=Kopiuj
+edit.from=Od
+edit.to=Do
+edit.all-tracks=Wszystkie \u015bcie\u017cki
+edit.paste=Wstaw
+edit.paste.count=Ilo\u015b\u0107 wstawianych
+edit.paste.replace-mode=Wstaw w bie\u017c\u0105cym takcie
+edit.paste.insert-mode=Wstaw w nowym takcie
+edit.delete=Usu\u0144
+edit.cut=Wytnij
+edit.menu=Edycja
+edit.mouse-mode-selection=Tryb zaznaczania
+edit.mouse-mode-edition=Tryb edycji
+edit.not-natural-key=Krzy\u017cyk/Bemol
+edit.voice-1=Wybierz g\u0142os 1
+edit.voice-2=Wybierz g\u0142os 2
+
+view=Podgl\u0105d
+
+view.layout=Widok
+view.layout.page=Uk\u0142ad strony
+view.layout.linear=Uk\u0142ad liniowy
+view.layout.multitrack=Wielo\u015bcie\u017ckowy
+view.layout.score-enabled=Poka\u017c zapis nutowy
+
+view.show-transport=Poka\u017c odtwarzacz
+view.show-mixer=Poka\u017c mikser
+view.show-piano=Poka\u017c klawiatur\u0119
+view.show-fretboard=Poka\u017c podstrunnic\u0119
+fretboard.right-mode=Prawor\u0119czna
+fretboard.left-mode=Lewor\u0119czna
+
+composition=Kompozycja
+composition.timesignature=Metrum
+composition.timesignature.Numerator=Liczba warto\u015bci
+composition.timesignature.denominator=Podstawa metryczna
+composition.timesignature.to-the-end=Do ko\u0144ca
+composition.tempo=Tempo
+composition.tempo-percent=Procent
+composition.properties=W\u0142a\u015bciwo\u015bci
+
+
+composition.album=Album
+composition.author=Autor
+composition.date=Data
+composition.copyright=Prawa autorskie
+composition.writer=Tw\u00f3rca tabulatury
+composition.transcriber=Autor transkrypcji
+composition.comments=Komentarz
+composition.tempo.invalid=Niepoprawne tempo
+composition.clef=Klucz
+composition.clef.treble=Wiolinowy
+composition.clef.bass=Basowy
+composition.clef.tenor=Tenorowy
+composition.clef.alto=Altowy
+composition.clef.to-the-end=U\u017cywaj tego klucza do ko\u0144ca
+composition.keysignature=Tonacja
+composition.keysignature.natural=Bez znak\u00f3w
+composition.keysignature.sharp-1=1 Krzy\u017cyk
+composition.keysignature.sharp-2=2 Krzy\u017cyki
+composition.keysignature.sharp-3=3 Krzy\u017cyki
+composition.keysignature.sharp-4=4 Krzy\u017cyki
+composition.keysignature.sharp-5=5 Krzy\u017cyki
+composition.keysignature.sharp-6=6 Krzy\u017cyki
+composition.keysignature.sharp-7=7 Krzy\u017cyki
+composition.keysignature.flat-1=1 Bemol
+composition.keysignature.flat-2=2 Bemole
+composition.keysignature.flat-3=3 Bemole
+composition.keysignature.flat-4=4 Bemole
+composition.keysignature.flat-5=5 Bemole
+composition.keysignature.flat-6=6 Bemole
+composition.keysignature.flat-7=7 Bemole
+composition.keysignature.to-the-end=U\u017cywaj tej tonacji do ko\u0144ca
+composition.tripletfeel=Rytm triolowy
+composition.tripletfeel.none=R\u00f3wny rytm
+composition.tripletfeel.eighth=Triole \u00f3semkowe
+composition.tripletfeel.sixteenth=Triole szesnastkowe
+composition.tripletfeel.to-the-end=U\u017cywaj rytmu triolowego do ko\u0144ca
+
+help=Pomoc
+help.help=Pomoc
+help.about=O programie
+
+instruments.volume=Nat\u0119\u017cenie
+instrument.volume=G\u0142o\u015bno\u015b\u0107
+instrument.channel=Kana\u0142
+instrument.effect-channel=Efekty
+instrument.balance=Balans
+instrument.free=Wolny
+instrument.link=Link
+
+track=\u015acie\u017cka
+track.number=Nr
+track.name=Nazwa
+track.color=Kolor
+track.first=Pierwsza \u015bcie\u017cka
+track.last=Ostatnia \u015bcie\u017cka
+track.previous=Poprzednia \u015bcie\u017cka
+track.next=Nast\u0119pna \u015bcie\u017cka
+track.add=Dodaj \u015bcie\u017ck\u0119
+track.remove=Usu\u0144 \u015bcie\u017ck\u0119
+track.instrument=Instrument
+track.instrument.empty=Nie znaleziono banku brzmie\u0144 w Twoim systemie. Spr\u00f3buj przekompilowa\u0107 TuxGuitar u\u017cywaj\u0105 Twojej wersji Java-y.
+track.properties=W\u0142a\u015bciwo\u015bci
+track.properties.general=Og\u00f3lne
+track.clone=Powiel \u015bcie\u017ck\u0119
+track.move-up=Przesu\u0144 w g\u00f3r\u0119
+track.move-down=Przesu\u0144 w d\u00f3\u0142
+track.name.default-percussion-name=Perkusja
+track.lyrics=S\u0142owa
+track.solo=Solo
+track.mute=Wycisz
+
+lyric.editor=Edytor s\u0142\u00f3w
+
+measure=Takt
+measure.first=Pierwszy takt
+measure.last=Ostatni takt
+measure.previous=Poprzedni takt
+measure.next=Nast\u0119pny takt
+measure.remove=Usu\u0144 takt
+measure.copy=Kopiuj takt
+measure.paste=Wstaw takt
+measure.add=Dodaj takt
+measure.add.count=Ilo\u015b\u0107 dodanych
+measure.add-before-current-position=Dodaj takt przed bie\u017c\u0105cym
+measure.add-after-current-position=Dodaj takt za bie\u017c\u0105cym
+measure.add-at-end=Dodaj takt na ko\u0144cu
+measure.clean=Wyczy\u015b\u0107 takt
+
+beat=Nuta
+beat.clean=Wyczy\u015b\u0107 warto\u015b\u0107
+beat.voice.remove-unused=Usu\u0144 nieu\u017cywany g\u0142os
+beat.voice-up=Laski nut do g\u00f3ry
+beat.voice-down=Laski nut w d\u00f3\u0142
+beat.voice-auto=Automatyczny kierunek u\u0142o\u017cenia lasek
+beat.stroke-up=Uderzenie strun w g\u00f3r\u0119
+beat.stroke-down=Uderzenie strun w d\u00f3\u0142
+beat.move-left=Przesu\u0144 jedno uderzenie w lewo
+beat.move-right=Przesu\u0144 jedno uderzenie w prawo
+beat.move-custom=Zaawansowane przesuni\u0119cie
+beat.move-custom.dialog.title=Zaawansowane przesuni\u0119cie
+beat.move-custom.dialog.direction-tip=Kierunek przesuni\u0119cia
+beat.move-custom.dialog.move-1.tip=Pierwsze przesuni\u0119cie
+beat.move-custom.dialog.move-2.tip=Drugie przesuni\u0119cie
+beat.move-custom.dialog.direction=Kierunek
+beat.move-custom.dialog.direction.right=Przesu\u0144 w prawo
+beat.move-custom.dialog.direction.left=Przesu\u0144 w lewo
+beat.move-custom.dialog.count=Ilo\u015b\u0107
+beat.move-custom.dialog.duration=Kierunek
+beat.move-custom.dialog.duration.type=Kropka/podw\u00f3jna kropka
+beat.move-custom.dialog.duration.type.normal=Brak
+beat.move-custom.dialog.duration.division-type=Rodzaj podzia\u0142u
+beat.move-custom.dialog.duration.division-type.normal=Normalny(triolowy)
+
+note.semitone-up=P\u00f3\u0142 tonu w g\u00f3r\u0119
+note.semitone-down=P\u00f3\u0142 tonu w d\u00f3\u0142
+note.shift-up=Oktaw\u0119 w g\u00f3r\u0119
+note.shift-down=Oktaw\u0119 w d\u00f3\u0142
+chord=Akord
+chord.name=Nazwa akordu
+chord.custom.name-empty-error=Musisz zdefiniowa\u0107 jak\u0105\u015b nazw\u0119 dla akordu
+chord.custom.name-exist-error=Taka nazwa akordu ju\u017c istnieje.
+dynamic=Dynamika
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano
+dynamic.mezzo-forte=Mezzo Forte
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo
+dynamic.forte-fortissimo=Forte Fortissimo
+duration=Warto\u015b\u0107
+duration.whole=ca\u0142a nuta
+duration.half=p\u00f3\u0142nuta
+duration.quarter=\u0107wier\u0107nuta
+duration.eighth=\u00f3semka
+duration.sixteenth=szestnastka
+duration.thirtysecond=trzydziestodw\u00f3jka
+duration.sixtyfourth=sze\u015b\u0107dziesi\u0119cioczw\u00f3rka
+duration.dotted=kropka
+duration.doubledotted=Podw\u00f3jna kropka
+duration.division-type=Triola
+effects=Efekty
+effects.vibrato=Wibrato
+effects.bend=Podci\u0105ganie
+effects.deadnote=St\u0142umiona nuta
+effects.slide=Glissando (Slide)
+effects.hammer=Legato (Hammer-on/Pull-off)
+
+effects.tremolo-bar-editor=Edytor efekt\u00f3w tremola
+effects.tremolo-bar.dip=Obni\u017cenie
+effects.tremolo-bar.dive=Opuszczenie w d\u00f3\u0142
+effects.tremolo-bar.release-up=Zwolnienie z g\u00f3ry
+effects.tremolo-bar.release-down=Zwolnienie z do\u0142u
+effects.tremolo-bar.inverted-dip=Podci\u0105gni\u0119cie
+effects.tremolo-bar.return=Powr\u00f3t
+effects.ghostnote=Cicha nuta("duch")
+effects.accentuatednote=Akcent
+effects.heavyaccentuatednote=Mocny akcent
+effects.harmonic=Floa\u017colet
+effects.grace=Przednutka
+effects.grace-editor=Edytor przednutek
+effects.grace.before-beat=Przed g\u0142\u00f3wn\u0105 warto\u015bci\u0105
+effects.grace.on-beat=Na g\u0142\u00f3wnej warto\u015bci
+effects.grace.transition=Artykulacja
+effects.grace.transition-none=Naturalnie
+effects.grace.transition-bend=Podci\u0105gni\u0119cie
+effects.grace.transition-slide=Glissando
+effects.grace.transition-hammer=Legato
+effects.trill=Ozdobnik
+effects.trill-editor=Edytor ozdobnik\u00f3w
+effects.tremolo-picking=Uderzenie tremolo
+effects.tremolo-picking-editor=Edytor uderze\u0144 tremolo
+effects.palm-mute=T\u0142umienie d\u0142oni\u0105(pizzicato)
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slap("klang")
+effects.popping=Popping(Bartok pizz.)
+effects.fade-in=Zg\u0142a\u015bniane
+effects.harmonic-editor=Edytor fla\u017colet\u00f3w
+effects.harmonic.type-of-harmonic=Rodzeje fla\u017colet\u00f3w
+effects.harmonic.natural=Fla\u017colety naturalne
+effects.harmonic.artificial=Sztuczne fla\u017colety
+effects.harmonic.artificial.key-offset=Przesuni\u0119cie
+effects.harmonic.tapped=Fla\u017colety tapping
+effects.harmonic.tapped.left-hand=Lewa r\u0119ka
+effects.harmonic.tapped.right-hand=Prawa r\u0119ka
+effects.harmonic.pinch=Fla\u017colety wyciskane
+effects.harmonic.semi=P\u00f3\u0142-fla\u017colety
+
+bend.editor=Typ podci\u0105gania
+bend.bend=podci\u0105ganie
+bend.bend-release=podci\u0105ganie/powr\u00f3t
+bend.bend-release-bend=podci\u0105ganie/powr\u00f3t/podci\u0105ganie
+bend.prebend=podci\u0105ganie przed uderzeniem
+bend.prebend-release=podci\u0105ganie przed uderzeniem/powr\u00f3t
+
+transport=Odtwarzanie
+transport.start=Start
+transport.stop=Stop
+transport.mode.loop-range=Zakres powtarzania
+transport.mode.loop-range.from=Odtwarzaj od taktu
+transport.mode.loop-range.from-default=Odtwarzaj od pocz\u0105tku
+transport.mode.loop-range.to=Odtwarzaj do taktu
+transport.mode.loop-range.to-default=Do ko\u0144ca
+transport.set-loop-start=Ustaw pocz\u0105tkowe miejsce powt\u00f3rki
+transport.set-loop-end=Ustaw ko\u0144cowe miejsce powt\u00f3rki
+
+repeat.open=Pocz\u0105tek repetycji
+repeat.close=Koniec repetycji
+repetitions=Repetycje
+repeat.number-of-repetitions=Ilo\u015b\u0107 powt\u00f3rek
+
+note.tiednote=Ligatura
+note.deadnote=T\u0142umiona nuta
+insert.chord=Wstaw akord
+chord.editor=Eytor akord\u00f3w
+
+instrument=Instrument
+instrument.instrument=Instrument
+instrument.percussion-track=\u015acie\u017cka perkusyjna
+
+tuning=Strojenie
+tuning.strings=Struny
+tuning.offset=Przesuni\u0119cie
+tuning.strings.transpose=Transpose afected notes.
+tuning.strings.transpose.try-keep-strings=Pr\u00f3buj zachowa\u0107 d\u017awi\u0119ki na tej samej strunie
+tuning.strings.transpose.apply-to-chords=Transponuj akordy
+
+language=J\u0119zyk
+
+choose-color=Wybie\u017c kolor
+
+
+settings=Ustawienia
+settings.config=Konfiguracja TuxGuitar
+settings.config.main=Og\u00f3lne
+settings.config.main.window-title=Tytu\u0142 okna
+settings.config.main.window-title.help=Poni\u017csze wyra\u017cenia b\u0119d\u0105 pokazywane w tytule okna:
+settings.config.main.window-title.var.description.appname=Ta zmienna reprezentuje nazw\u0119 programu: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Ta zmienna reprezentuje wersj\u0119 TuxGuitar
+settings.config.main.window-title.var.description.filename=Ta zmienna reprezentuje nazw\u0119 otwartego pliku
+settings.config.main.window-title.var.description.filepath=Ta zmienna reprezentuje \u015bcie\u017ck\u0119 do pliku
+settings.config.main.window-title.var.description.songname=Ta zmienna reprezentuje tytu\u0142 utworu
+settings.config.main.window-title.var.description.songauthor=Ta zmienna reprezentuje kompozytora utworu
+settings.config.main.window-title.var.description.songalbum=Ta zmienna reprezentuje album utworu
+settings.config.main.window-title.var.description.songartist=Ta zmienna reprezentuje autora opracowania
+settings.config.main.options=Opcje
+settings.config.main.splash-enabled=Poka\u017c obrazek podczas uruchamiania programu
+settings.config.view=Widok
+settings.config.view.mode=Tryb widoku
+settings.config.view.size=Wielko\u015b\u0107 okna
+settings.config.view.size.maximized=Maksymalny
+settings.config.view.size.width=Szeroko\u015b\u0107
+settings.config.view.size.height=Wysoko\u015b\u0107
+settings.config.language=J\u0119zyk
+settings.config.language.choose=Wybierz sw\u00f3j j\u0119zyk
+settings.config.styles=Style
+settings.config.styles.font.default=Domy\u015blna czcionka
+settings.config.styles.font.note=Czcionka dla nut
+settings.config.styles.font.time-signature=Czcionka dla metrum
+settings.config.styles.font.printer-default=Domy\u015blna czcionka dla wydruku
+settings.config.styles.font.printer-note=Czcionka dla nut na wydruku
+settings.config.styles.font.printer-time-signature=Czcionka dla metrum na wydruku
+settings.config.styles.color.score-note=Kolor nut na pi\u0119ciolini
+settings.config.styles.color.tab-note=Kolor cyfr w tabulaturze
+settings.config.styles.color.play-note=Kolor podczas odtwarzania
+settings.config.styles.color.lines=Kolor linii tabulatury i pieciolinii
+settings.config.toolbars=Paski narz\u0119dzi
+settings.config.apply-changes-question=Czy chcesz zatwierdzi\u0107 teraz zmiany?
+settings.config.sound=D\u017awi\u0119k
+settings.config.sound.soundbank=Bank d\u017awi\u0119k\u00f3w
+settings.config.sound.default-soundbank=U\u017cywaj domy\u015blnego banku d\u017awi\u0119k\u00f3w
+settings.config.sound.custom-soundbank=U\u017cywaj w\u0142asnego banku d\u017awi\u0119k\u00f3w
+settings.config.sound.soundbank-restart-message=Uruchom ponownie TuxGuitar aby zmiany przynios\u0142y efekt.
+soundbank.error=B\u0142\u0105d banku d\u017awi\u0119k\u00f3w
+soundbank.error.unavailable=B\u0142\u0105d banku d\u017awi\u0119k\u00f3w
+soundbank.error.custom=Nie mog\u0119 otworzy\u0107 wskazanego pliku z bankiem d\u017awi\u0119k\u00f3w.
+
+settings.keybindings=Konfiguracja skr\u00f3t\u00f3w
+key-bindings-editor=Edytor skr\u00f3t\u00f3w klawaiturowych
+key-bindings-editor-action-select=Wybierz akcj\u0119
+key-bindings-editor-action-column=Akcje
+key-bindings-editor-shortcut-column=Klawisze
+key-bindings-editor-push-a-key=Naci\u015bnij klawisz
+key-bindings-editor-save-question=Zmiany nie zosta\u0142y zachowane, checesz wyj\u015b\u0107 bez zapisywania ??
+
+key-bindings-editor-override=Ten skr\u00f3t jest ju\u017c w u\u017cyciu. Czy na pewno chcesz przypisa\u0107 do niego inn\u0105 akcj\u0119 ?
+
+
+
+print.print=Drukuj
+print.dialog=Drukuj
+print.service=Drukarka
+print.service.name=Nazwa
+print.service.status=Status
+print.service.type=Typ
+print.service.info=Informacja
+print.range=Zakres
+print.range.all-pages=Wszystkie
+print.range.pages=Strony
+print.range.pages-to=Do
+print.copies=Kopie
+print.copies-number=Liczba kopii
+print.print-to-file=Drukuj do pliku
+print.file-chooser=Wybierz
+print-header.default-song-name=Tabulaturka
+print-header.default-song-author=Anonim
+print.preview=Podgl\u0105d wydruku
+
+marker=Znacznik
+marker.add=Dodaj Znacznik
+marker.list=Poka\u017c Znaczniki
+marker.first=Id\u017a do pierwszego znacznika
+marker.last=Id\u017a do ostatniego znacznika
+marker.next=Id\u017a do nast\u0119pnego znacznika
+marker.previous=Id\u017a do poprzedniego znacznika
+
+export.tablature-enabled=Poka\u017c tabulatur\u0119
+export.score-enabled=Poka\u017c zapis nutowy
+export.black-and-white=Tryb czarno-bia\u0142y
+
+scale=Skala
+scale.list=Lista skal
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Pasek dzia\u0142a\u0144 na plikach
+edit.items=Pasek edycji
+property.items=Pasek w\u0142a\u015bciwo\u015bci
+track.items=Pasek \u015bcie\u017cek
+duration.items=Pasek warto\u015bci rytm.
+beat.items=Pasek nut
+composition.items=Pasek utworu
+repeat.items=Pasek repetycji
+transport.items=Pasek odtwarzania
+marker.items=Pasek wstawiania znacznik\u00f3w
+insert.items=Pasek znacznik\u00f3w
+layout.items=Pasek wygl\u0105du
+view.items=Pasek widoku
+effect.items=Pasek efekt\u00f3w
+dynamic.items=Pasek dynamiki
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Nowy plik
+action.file.open=Otw\u00f3rz plik
+action.file.save=Zapisz
+action.file.save-as=Zapisz jako
+action.file.print=Drukuj
+action.file.print-preview=Podgl\u0105d wydruku
+action.edit.undo=Cofnij
+action.edit.redo=Pon\u00f3w
+action.edit.voice-1=Wybierz g\u0142os 1
+action.edit.voice-2=Wybierz g\u0142os 2
+action.composition.change-time-signature=Zmie\u0144 metrum
+action.composition.change-tempo=Zmie\u0144 tempo
+action.composition.change-info=Zmie\u0144 informacje o utworze
+action.composition.change-clef=Zmie\u0144 klucz
+action.composition.change-key-signature=Zmie\u0144 tonacj\u0119
+action.view.layout-set-page=Poka\u017c wygl\u0105d strony
+action.view.layout-set-linear=Poka\u017c tryb liliowy 
+action.view.layout-set-score-enabled=Poka\u017c zapis nutowy
+action.view.show-piano=Poka\u017c klawiatur\u0119
+action.view.show-fretboard=Poka\u017c podstrunnic\u0119
+action.view.show-mixer=Poka\u017c mikser
+action.view.show-transport=Poka\u017c odtwarzacz
+action.track.add=Dodaj \u015bcie\u017ck\u0119
+action.track.remove=Usu\u0144 \u015bcie\u017ck\u0119
+action.track.clone=Powiel \u015bcie\u017ck\u0119
+action.track.go-first=Przenie\u015b do pierwszej scie\u017cki
+action.track.go-last=Przejd\u017a do ostatniej \u015bcie\u017cki
+action.track.go-next=Przenie\u015b do nast\u0119pnej \u015bcie\u017cki
+action.track.go-previous=Przejd\u017a do poprzedniej \u015bcie\u017cki
+action.track.properties=Zmie\u0144 w\u0142a\u015bciwo\u015bci \u015bcie\u017cki
+action.track.lyrics=Edycja s\u0142\u00f3w dla \u015bcie\u017cki
+action.measure.add=Dodaj takt
+action.measure.remove=Usu\u0144 takt
+action.measure.copy=Kopiuj takt
+action.measure.paste=Wstaw takt
+action.measure.clean=Wyczy\u015b\u0107 takt
+action.measure.go-first=Przejd\u017a do pierwszego taku
+action.measure.go-last=Przejd\u017a do ostatniego taku
+action.measure.go-next=Przejd\u017a do nast\u0119pnego taktu
+action.measure.go-previous=Przejd\u017a do poprzedniego taktu
+action.beat.general.remove-unused-voice=Usu\u0144 nieu\u017cywany g\u0142os
+action.beat.general.voice-up=Ustaw laseczki nut do g\u00f3ry
+action.beat.general.voice-down=Ustaw laseczki nut w d\u00f3\u0142
+action.beat.general.voice-auto=Ustaw automatyczny kierunek laseczek nutowych
+action.beat.general.move-left=Przesu\u0144 jedno uderzenie w lewo
+action.beat.general.move-right=Przesu\u0144 jedno uderzenie w prawo
+action.beat.general.move-custom=Zaawansowane przesuni\u0119cie
+action.beat.general.set-stroke-up=Ustaw kierunek uderzenia w g\u00f3r\u0119
+action.beat.general.set-stroke-down=Ustaw kierunek uderzenia w d\u00f3\u0142
+action.note.general.clean-beat=Wyczy\u015b\u0107 warto\u015b\u0107
+action.note.general.decrement-semitone=P\u00f3\u0142 tonu w d\u00f3\u0142
+action.note.general.increment-semitone=P\u00f3\u0142 tonu w g\u00f3r\u0119
+action.note.general.shift-down=Oktaw\u0119 w d\u00f3\u0142
+action.note.general.shift-up=Oktaw\u0119 w g\u00f3re
+action.note.general.tied=Dodaj/Usu\u0144 ligatur\u0119
+action.note.duration.change-dotted=Dodaj/Usu\u0144 kropk\u0119
+action.note.duration.change-double-dotted=Dodaj/Usu\u0144 podw\u00f3jn\u0105 kropk\u0119
+action.note.duration.change-division-type=Dodaj/Usu\u0144 triol\u0119
+action.note.effect.change-vibrato=Dodaj/Usu\u0144 Wibrato
+action.note.effect.change-bend=Dodaj/Usu\u0144 podci\u0105gni\u0119cie struny
+action.note.effect.change-slide=Dodaj/Usu\u0144 glissando (slide)
+action.note.effect.change-hammer=Dodaj/Usu\u0144 legato (hammer-on/pull-off )
+action.note.effect.change-accentuated=Dodaj/Usu\u0144 akcenty
+action.note.effect.change-dead=Dodaj/Usu\u0144 st\u0142umion\u0105 nut\u0119
+action.note.effect.change-fade-in=Dodaj/Usu\u0144 zg\u0142a\u015bnianie
+action.note.effect.change-ghost=Dodaj/Usu\u0144 nut\u0119-duch
+action.note.effect.change-grace=Dodaj/Usu\u0144 przednutk\u0119
+action.note.effect.change-harmonic=Dodaj/Usu\u0144 fla\u017colet
+action.note.effect.change-heavy-accentuated=Dodaj/Usu\u0144 mocne akcenty
+action.note.effect.change-palm-mute=Dodaj/Usu\u0144 t\u0142umienie d\u0142oni\u0105
+action.note.effect.change-popping=Dodaj/Usu\u0144 papping
+action.note.effect.change-slapping=Dodaj/Usu\u0144 slap
+action.note.effect.change-staccato=Dodaj/Usu\u0144 staccato
+action.note.effect.change-tapping=Dodaj/Usu\u0144 tapping
+action.note.effect.change-tremolo-bar=Dodaj/Usu\u0144 tremolo
+action.note.effect.change-tremolo-picking=Dodaj/Usu\u0144 uderzenie tremolo
+action.note.effect.change-trill=Dodaj/Usu\u0144 ozdobnik
+action.insert.open-repeat=Otw\u00f3rz repetycj\u0119
+action.insert.close-repeat=Zamknij repetycj\u0119
+action.insert.chord=Wstaw akord
+action.transport.play=Odtwarzaj
+action.transport.stop=Zatrzymaj odtwarzanie
+action.transport.set-loop-start=Ustaw pocz\u0105tkowe miejsce powt\u00f3rki
+action.transport.set-loop-end=Ustaw ko\u0144cowe miejsce powt\u00f3rki
+action.tools.transpose=Transponuj d\u017awi\u0119ki
+#######################OLD MISTAKES##################
+effects.tremolo-bar=Tremolo ("wajcha")
+settings.config.language.choose=Wybierz sw\u00f3j j\u0119zyk
+composition.artist=Kompozytor
+composition.name=Tytu\u0142
+action.view.layout-set-multitrack=Poka\u017c tryb wielo\u015bcie\u017ckowy
+#########################################################
+info=Opis
+name=Nazwa
+author=Autor
+version=Wersja
+description=Opis
+configure=Ustawienia
+
+file.open-url=Otw\u00f3rz adres URL
+file.open.error=Nie da si\u0119 otworzy\u0107: {0}
+file.save.error=Nie da si\u0119 zapisa\u0107: {0}
+file.import.error=Nie da si\u0119 zaimportowa\u0107 : {0}
+file.export.error=Nie da si\u0119 wyeksportowa\u0107: {0}
+file.save-changes-question=Utw\u00f3r zosta\u0142 zmieniony\n Czy chcesz zachowa\u0107 zmiany?
+
+midi.port=Port Midi
+midi.sequencer=Sekwencer Midi
+
+browser.dialog=Przegl\u0105darka
+browser.menu.file=Plik
+browser.open=Otw\u00f3rz
+browser.exit=Wyj\u015bcie
+browser.menu.collection=Kolekcja
+browser.menu.go=Id\u017a
+browser.collection.select=Wybierz kolekcj\u0119
+browser.collection.open=Otw\u00f3rz
+browser.collection.remove=Usu\u0144
+browser.collection.close=Zamknij
+browser.collection.new=Nowy
+browser.go-root=Home
+browser.go-back=Powr\u00f3t
+browser.refresh=Od\u015bwie\u017c
+browser.collection.fs.editor-title=Kolekcja lokalna
+browser.collection.fs.editor-tip=Wybierz katalog dla swojej kolekcji
+browser.collection.fs.invalid-path=Wybierz prosz\u0119 poprawny katalog
+
+plugin.unknown-value=Niedost\u0119pny
+plugin.column.name=Nazwa wtyczki
+plugin.column.enabled=Dost\u0119pno\u015b\u0107
+
+view.layout.compact=Kompaktowy
+view.layout.chord-style=Wygl\u0105d akord\u00f3w
+view.layout.chord-name=Nazwa akordu
+view.layout.chord-diagram=Diagram akordu
+view.layout.tablature-enabled=Poka\u017c tabulatur\u0119
+
+view.show-matrix=Graficzny edytor d\u017awi\u0119k\u00f3w
+
+matrix.editor=Graficzny edytor d\u017awi\u0119k\u00f3w
+matrix.grids=Liczba linii siatki
+matrix.border-color=Kolor obramowania
+matrix.font=Czcionka
+matrix.foreground-color=Kolor g\u0142\u00f3wny
+matrix.line-color-1=Kolor 1 linii
+matrix.line-color-2=Kolor 2 linii
+matrix.line-color-over=Kolor linii pod kursorem
+matrix.note-color=Kolor nuty
+matrix.play-note-color=Kolor odtwarzanej nuty
+matrix.position-color=Kolor pozycji
+matrix.settings=Ustawienia edytora
+
+help.doc=Dokumentacja
+
+transport.first=Pierwszy
+transport.last=Ostatni
+transport.previous=Poprzedni
+transport.next=Nast\u0119pny
+transport.pause=Pauza
+transport.mode=Tryb odtwarzania
+transport.mode.simple=Tryb odtwarzania
+transport.mode.simple.tempo-percent=Tempo w procentach
+transport.mode.simple.loop=Odtwarzaj w p\u0119tli
+transport.mode.trainer=Tryb \u0107wiczenia
+transport.mode.trainer.increment-description=Zwi\u0119kszaj o
+
+repeat.alternative=Volta (alternatywne powt\u00f3rzenie)
+repeat.alternative.editor=Edytuj powt\u00f3rki
+
+tools=Narz\u0119dzia
+tools.scale=Skale/gamy
+tools.browser=Przegl\u0105darka
+tools.plugins=Wtyczki
+tools.shortcuts=Skr\u00f3ty
+tools.settings=Ustawienia
+tools.transpose=Transpozycja
+tools.transpose.semitones=Transponuj o (p\u00f3\u0142tony)
+tools.transpose.apply-to-track=Transponuj wszystkie takty
+tools.transpose.apply-to-measure=Transponuj tylko ten takt
+tools.transpose.apply-to-all-tracks=Transponuj wszystkie \u015bcie\u017cki
+tools.transpose.try-keep-strings=Je\u017celi to mo\u017cliwe, pr\u00f3buj zachowa\u0107 d\u017awi\u0119ki na tej samej strunie
+tools.transpose.apply-to-chords=Transponuj akordy
+
+text.insert=Wprowad\u017a tekst
+
+settings.config.main.table.auto-size.enabled=Automatycznie dopasuj tabulatur\u0119
+settings.config.styles.general=Wygl\u0105d og\u00f3lny
+settings.config.styles.printer=Wygl\u0105d wydruku
+settings.config.styles.font.lyric=Czcionka tekstu utworu
+settings.config.styles.font.text=Czcionka tekstu
+settings.config.skin=Sk\u00f3rki
+settings.config.skin.choose=Wybierz sk\u00f3r\u0119
+settings.config.toolbars.tip=Dopasuj pasek narz\u0119dzi
+settings.config.toolbars.list=Dost\u0119pne paski narz\u0119dzi
+settings.config.toolbars.move-up=Przesu\u0144 w g\u00f3r\u0119
+settings.config.toolbars.move-down=Przesu\u0144 w d\u00f3\u0142
+
+action.file.open-url=Otw\u00f3rz adres URL
+action.file.exit=Zako\u0144cz prac\u0119 z TuxGuitar
+action.insert.text=Wstaw tekst
+action.insert.repeat-alternative=Volta (Alternatywna repetycja)
+action.composition.change-triplet-feel=Zmie\u0144 rytm triolowy
+action.note.duration.set-whole=Ca\u0142e nuty
+action.note.duration.set-half=P\u00f3\u0142 nuty
+action.note.duration.set-quarter=\u0106wier\u0107nuty
+action.note.duration.set-eighth=\u00d3semki
+action.note.duration.set-sixteenth=Szesnastki
+action.note.duration.set-thirty-second=Trzydziestodw\u00f3jki
+action.note.duration.set-sixty-fourth=Sze\u015b\u0107dziesi\u0119cioczw\u00f3rki
+action.note.duration.decrement-duration=Zmiejsz warto\u015bci rytmiczne
+action.note.duration.increment-duration=Zwi\u0119ksz warto\u015bci rytmiczne
+action.track.move-down=Przesu\u0144 w d\u00f3\u0142
+action.track.move-up=Przesu\u0144 w g\u00f3r\u0119
+action.tools.browser=Przegl\u0105darka
+action.transport.metronome=Metronom
+action.transport.mode=Tryb
+action.view.show-matrix=Poka\u017c graficzny edytor nut
+action.view.layout-set-chord-diagram-enabled=Akord jako diagram
+action.view.layout-set-chord-name-enabled=Akord jako nazwa 
+action.view.layout-set-compact=Poka\u017c widok kompaktowy
+action.view.layout-set-tablature-enabled=Poka\u017c tabulatur\u0119
+action.marker.add=Dodaj znacznik
+action.marker.go-next=Id\u017a do nast\u0119pnego znacznika
+action.marker.go-previous=Id\u017a do poprzedniego znacznika
+action.settings.configure=Ustawienia
+action.help.doc=Pomoc
+
+chord.bass=Bas
+chord.custom=W\u0142asny akord
+chord.settings.tip=W\u0142asne ustawienia
+chord.settings.type=Typ
+chord.settings.type.most-common=Podstawowe
+chord.settings.type.inversions=W przewrotach
+chord.settings.type.close-voiced=W uk\u0142adzie skupionym
+chord.settings.type.open-voiced=W uk\u0142adzie rozleg\u0142ym
+chord.settings.open-chords=Z pustymi strunami
+chord.settings.chords-to-display=Liczba pokazywanych akord\u00f3w
+chord.settings.search-frets=Zakres prog\u00f3w
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+
+fretboard.direction=Kierunek
+fretboard.background-color=Kolor t\u0142a
+fretboard.display-note-text=Poka\u017c nazw\u0119 d\u017awi\u0119ku
+fretboard.display-scale-text=Poka\u017c nazwy d\u017awi\u0119k\u00f3w skali
+fretboard.font=Czcionka
+fretboard.fretpoint-color=Kolor progu
+fretboard.note-color=Kolor d\u017awi\u0119ku
+fretboard.scale-note-color=Kolor d\u017awi\u0119ku skali
+fretboard.settings=Ustawienia podstrunnicy
+fretboard.string-color=Kolor struny
+fretboard.settings.options=Opcje
+
+piano.editor=Klawiatura
+piano.natural-key-color=Kolor klawiszy "bia\u0142ych"
+piano.not-natural-key-color=Kolor klawiszy "czarnych"
+piano.note-color=Kolor d\u017awi\u0119ku
+piano.scale-note-color=Kolor d\u017awi\u0119ku skali
+piano.settings=Ustawienia klawiatury
+
+mixer=Mikser
+browser.collection.fs.name=Nazwa
+browser.collection.fs.path=\u015acie\u017ck
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_pt.properties b/TuxGuitar-testing/platform-all/share/lang/messages_pt.properties
new file mode 100644
index 0000000..1d048f0
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_pt.properties
@@ -0,0 +1,722 @@
+es=Spanish
+en=English
+fr=French
+pl=Polish
+de=Deutsch
+pt=Portugu�s
+
+ok=Ok
+cancel=Cancel
+yes=Sim
+no=N�o
+add=Adicionar
+edit=Editar
+remove=Remover
+save=Salvar
+exit=Sair
+choose=Escolha
+color=Cor
+title=T�tulo
+go=Ir
+warning=Aviso
+error=erro
+plugins=Plugins
+options=Op��es
+defaults=Padr�es
+clean=Limpar
+rename=Renomear
+fret=Bra�o
+position=Posi��o
+
+tuxguitar.title=Tux-Guitar
+
+file=Arquivo
+file.new=Novo
+file.open=Abrir
+file.save=Salvar
+file.save-as=Salvar Como
+file.exit=Sair
+file.export=Exportar
+file.export-midi=Exportar Midi
+file.export-pdf=Exportar PDF
+file.print=Imprimir
+file.print-preview=Visualizar Impress�o
+file.import=Importar
+file.import-midi=Importar Midi
+file.export-ascii=Exportar ASCII
+file.history=Hist�rico
+file.overwrite-question=Este arquivo j� existe, voc� deseja salvar sobre ele??
+
+edit.undo=Desfazer
+edit.redo=Refazer
+edit.copy=Copiar
+edit.from=De
+edit.to=At�
+edit.all-tracks=Todas Pistas
+edit.paste=Colar
+edit.paste.count=Quantidade a colar
+edit.paste.replace-mode=Colar no Compasso Atual
+edit.paste.insert-mode=Colar em Novo Compasso
+edit.delete=Excluir
+edit.cut=Recortar
+edit.menu=Editar
+edit.mouse-mode-selection=Modo de Sele��o
+edit.mouse-mode-edition=Modo Partitura
+edit.not-natural-key=Modo Sustenido/Bemol
+edit.voice-1=Selecionar Voz 1
+edit.voice-2=Selecionar Voz 2
+
+view=Visualizar
+
+view.layout=Layout
+view.layout.page=Layout da P�gina
+view.layout.linear=Layout Linear
+view.layout.multitrack=Multi-Pistas
+view.layout.score-enabled=Exibir Partitura
+
+view.show-mixer=Exibir Mixer
+view.show-fretboard=Exibir Bra�o da Guitarra
+view.show-piano=Exibir Piano
+view.show-transport=Exibir Player
+
+fretboard.right-mode=Modo Destro
+fretboard.left-mode=Modo Canhoto
+
+composition=Composi��o
+composition.timesignature=Assinatura de Tempo
+composition.timesignature.Numerator=Numerador
+composition.timesignature.denominator=Denominador
+composition.timesignature.to-the-end=At� o Fim
+composition.tempo=Tempo
+composition.tempo-percent=Porcentagem
+composition.properties=Propriedades
+composition.name=Nome
+composition.artist=Int�rprete
+composition.album=�lbum
+composition.author=Autor
+composition.date=Data
+composition.copyright=Copyright
+composition.writer=Autor
+composition.transcriber=Transcrito por
+composition.comments=Coment�rios
+composition.tempo.invalid=Tempo Inv�lido
+composition.clef=Clave
+composition.clef.treble=de Sol
+composition.clef.bass=de F�
+composition.clef.tenor=Tenor
+composition.clef.alto=Alto
+composition.clef.to-the-end=Aplicar esta Clave at� o fim
+composition.keysignature=Arma��o da Clave
+composition.keysignature.natural=Natural
+composition.keysignature.sharp-1=1 Sustenido
+composition.keysignature.sharp-2=2 Sustenido
+composition.keysignature.sharp-3=3 Sustenido
+composition.keysignature.sharp-4=4 Sustenido
+composition.keysignature.sharp-5=5 Sustenido
+composition.keysignature.sharp-6=6 Sustenido
+composition.keysignature.sharp-7=7 Sustenido
+composition.keysignature.flat-1=1 Bemol
+composition.keysignature.flat-2=2 Bemol
+composition.keysignature.flat-3=3 Bemol
+composition.keysignature.flat-4=4 Bemol
+composition.keysignature.flat-5=5 Bemol
+composition.keysignature.flat-6=6 Bemol
+composition.keysignature.flat-7=7 Bemol
+composition.keysignature.to-the-end= Aplicar esta Arma��o da Clave at� o fim
+composition.tripletfeel=Modo Triplet
+composition.tripletfeel.none=Sem modo Triplet
+composition.tripletfeel.eighth=Triplet em Colcheias
+composition.tripletfeel.sixteenth=Triplet em Semicolcheias
+composition.tripletfeel.to-the-end=Aplicar modo triplet at� o final
+
+
+help=Ajuda
+help.help=Ajuda
+help.about=Sobre
+
+instruments.volume=Ganho
+instrument.volume=Volume
+instrument.channel=CN
+instrument.effect-channel=CE
+instrument.balance=Balan�o
+instrument.free=Livre
+instrument.link=Ligado
+
+track=Pista
+track.number=N�
+track.name=Nome
+track.color=Cor
+track.first=Primeira Pista
+track.last=�ltima Pista
+track.previous=Pista Anterior
+track.next=Pr�xima Pista
+track.add=Adicionar Pista
+track.remove=Remover Pista
+track.instrument=Instrumento
+track.tunning=Afina��o
+track.instrument.empty=N�o encontramos um banco de sons no seu sistema midi, tente recompilar tuxguitar na sua vers�o do Java.
+track.properties=Propriedades
+track.properties.general=Geral
+track.clone=Duplicar Pista
+track.move-up=Mover Para Cima
+track.move-down=Mover Para Baixo
+track.name.default-percussion-name=Percuss�o
+track.lyrics=Letras
+track.solo=Solo
+track.mute=Mudo
+
+lyric.editor=Editor de Letras
+
+tunning.offset=Offset
+tuning.strings.transpose=Transpor notas afetadas.
+tuning.strings.transpose.try-keep-strings=Tentar manter as notas na mesma corda
+tuning.strings.transpose.apply-to-chords=Transpor acordes
+
+measure=Compasso
+measure.first=Primeiro Compasso
+measure.last=�ltimo Compasso
+measure.previous=Compasso anterior
+measure.next=Pr�ximo Compasso
+measure.add=Adicionar Compasso
+measure.add.count=Quantidade
+measure.clean=Limpar Compasso
+measure.remove=Remover Compasso
+measure.copy=Copiar Compasso
+measure.paste=Colar Compasso
+measure.add-before-current-position=Adicionar antes da Posi��o Atual
+measure.add-after-current-position=Adicionar depois da Posi��o Atual
+measure.add-at-end=Adicionar no Final
+
+
+beat=Nota
+beat.clean=Limpar batida
+beat.voice.remove-unused=Remover Voz n�o utilizada
+beat.voice-up=Bast�es para cima
+beat.voice-down=Bast�es para baixo
+beat.voice-auto=Bast�es Autom�ticos
+beat.stroke-up=Toca para cima
+beat.stroke-down=Toca para baixo
+beat.move-left=Mover um tempo para Esquerda
+beat.move-right=Mover um tempo para Direita
+beat.move-custom=Mover tempo Personalizado
+beat.move-custom.dialog.title=Mover Personalizado
+beat.move-custom.dialog.direction-tip=Dire��o do Movimento 
+beat.move-custom.dialog.move-1.tip=Movimento Maior
+beat.move-custom.dialog.move-2.tip=Movimento Refinado
+beat.move-custom.dialog.direction=Dire��o
+beat.move-custom.dialog.direction.right=Mover para Direita
+beat.move-custom.dialog.direction.left=Mover para Esquerda
+beat.move-custom.dialog.count=Quantos
+beat.move-custom.dialog.duration=Dura��o
+beat.move-custom.dialog.duration.type=Ponto/Ponto Duplo
+beat.move-custom.dialog.duration.type.normal=Nenhum
+beat.move-custom.dialog.duration.division-type=Tipo de divis�o
+beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet)
+
+note.semitone-up=Semitom Acima
+note.semitone-down=Semitom Abaixo
+note.shift-up=Deslizar acima
+note.shift-down=Deslizar abaixo
+note.tiednote=Nota Ligada
+note.deadnote=Dead Note
+chord=Acorde
+chord.name=Nome do Acorde
+chord.custom.name-empty-error=Nome do acorde n�o definido!
+chord.custom.name-exist-error=J� existe esse nome de arcorde.
+chord.editor=Editor de Acordes
+duration=Dura��o
+duration.whole=Semibreve
+duration.half=M�nima
+duration.quarter=Sem�nima
+duration.eighth=Colcheia
+duration.sixteenth=Semicolcheia
+duration.thirtysecond=Fusa
+duration.sixtyfourth=Semifusa
+duration.dotted=Ponto
+duration.doubledotted=Duplo Ponto
+duration.division-type=Qui�ltera
+dynamic=Din�mico
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano
+dynamic.mezzo-forte=Mezzo Forte
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo
+dynamic.forte-fortissimo=Forte Fortissimo
+insert.chord=Inserir Acorde
+
+effects=Efeitos
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Dead Note
+effects.slide=Slide
+effects.hammer=Hammer on/Pull off
+effects.tremolo-bar=Tr�molo
+effects.tremolo-bar-editor=Barra de Tr�molo
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Soltar Acima
+effects.tremolo-bar.release-down=Soltar Abaixo
+effects.tremolo-bar.inverted-dip=Dip Invertido
+effects.tremolo-bar.return=Volta da Barra de Tr�molo
+effects.ghostnote=Ghost Note
+effects.accentuatednote=Nota Acentuada
+effects.heavyaccentuatednote=Nota Muito Acentuada
+effects.harmonic=Harmonico
+effects.grace=Grace Note
+effects.grace-editor=Editor de Grace Note
+effects.grace.before-beat=Antes da batida
+effects.grace.on-beat=Durante a batida
+effects.grace.transition=Transi��o
+effects.grace.transition-none=Nenhum
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Editor de Trill
+effects.tremolo-picking=Tr�molo Picking
+effects.tremolo-picking-editor=Editor de Tr�molo Picking
+effects.palm-mute=Nota Abafada
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping
+effects.fade-in=Fade In
+effects.harmonic-editor=Editor de Harm�nico
+effects.harmonic.type-of-harmonic=Tipo de Harm�nico
+effects.harmonic.natural=Harm�nico Natural
+effects.harmonic.artificial=Harm�nico Artificial
+effects.harmonic.artificial.key-offset=Offset de Clave
+effects.harmonic.tapped=Tapped Harm�nico
+effects.harmonic.tapped.left-hand=M�o Esquerda
+effects.harmonic.tapped.right-hand=M�o Direita
+effects.harmonic.pinch=Harm�nico Pinch
+effects.harmonic.semi=Semi Harm�nico
+
+bend.editor=Editor de Bend
+bend.bend=Bend
+bend.bend-release=bend/release
+bend.bend-release-bend=bend/release/bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=Tocar
+transport.start=Iniciar
+transport.stop=Parar
+transport.mode.loop-range=Tamanho do loop
+transport.mode.loop-range.from=Tocar a partir do compasso
+transport.mode.loop-range.from-default=Desde o in�cio
+transport.mode.loop-range.to=Tocar at� esse compasso
+transport.mode.loop-range.to-default=At� o fim
+transport.set-loop-start=Configurar in�cio do loop
+transport.set-loop-end=Configurar final do loop
+
+repeat.open=Abrir repeti��o
+repeat.close=Fechar repeti��o
+repetitions=Repeti��es
+repeat.number-of-repetitions=N�mero de repeti��es
+
+
+
+
+
+instrument=Instrumento
+instrument.instrument=Instrumento
+instrument.percussion-track=Pista de Percuss�o
+
+tunning=Afina��o
+tunning.strings=Cordas
+
+language=Idioma
+
+choose-color=Esculha uma cor
+
+
+settings=Configura��es
+settings.config=Configure o TuxGuitar
+settings.config.main=Geral
+settings.config.main.window-title=T�tulo da Janela
+settings.config.main.window-title.help=As seguintes vari�veis ser�o substituidas no T�tulo da Janela:
+settings.config.main.window-title.var.description.appname=Nome do Aplicativo: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Vers�o
+settings.config.main.window-title.var.description.filename=Nome do Arquivo
+settings.config.main.window-title.var.description.filepath=Caminho do Arquivo
+settings.config.main.window-title.var.description.songname=Nome da M�sica
+settings.config.main.window-title.var.description.songauthor=Autor da M�sica
+settings.config.main.window-title.var.description.songalbum=Nome do �lbum
+settings.config.main.window-title.var.description.songartist=Nome do Int�rprete
+settings.config.main.options=Op��es
+settings.config.main.splash-enabled=Mostrar Splash Screen do Tux Guitar ao iniciar
+settings.config.view=Visualizar
+settings.config.view.mode=Modo Layout
+settings.config.view.size=Tamanho da Janela
+settings.config.view.size.maximized=Maximizado
+settings.config.view.size.width=Largura
+settings.config.view.size.height=Altura
+settings.config.language=Idioma
+settings.config.language.choose=Escolha o seu Idioma
+settings.config.styles=Estilos
+settings.config.styles.font.default=Fonte Padr�o
+settings.config.styles.font.note=Fonte das notas
+settings.config.styles.font.time-signature=Fonte da Assinatura de Tempo
+settings.config.styles.font.printer-default=Fonte Padr�o para Imprimir
+settings.config.styles.font.printer-note=Fonte para Imprimir notas
+settings.config.styles.font.printer-time-signature=Fonte para imprimir a Assinatura de Tempo
+settings.config.styles.color.score-note=Cor das notas da Partitura
+settings.config.styles.color.tab-note=Cor das notas da Tablatura
+settings.config.styles.color.play-note=Cor da nota tocando
+settings.config.styles.color.lines=Cor das Linhas Horizontais
+settings.config.toolbars=Barras de Ferramentas
+settings.config.apply-changes-question=Aplicar as mudan�as agora?
+settings.config.sound=Som
+settings.config.sound.soundbank=Banco de Sons
+settings.config.sound.default-soundbank=Usar Banco de Sons padr�o
+settings.config.sound.custom-soundbank=Usar Banco de Sons personalizado
+settings.config.sound.soundbank-restart-message=Voc� precisa reiniciar o TuxGuitar para que o Banco de Sons seja aplicado.
+soundbank.error=Erro no Banco de Sons
+soundbank.error.unavailable=Banco de Sons Indispon�vel.
+soundbank.error.custom=Falhou ao abrir Banco de Sons personalizado.
+
+settings.keybindings=Configure as Teclas do Programa
+key-bindings-editor=Editor das Teclas do Programa
+key-bindings-editor-action-select=Selecione uma A��o
+key-bindings-editor-action-column=A��es
+key-bindings-editor-shortcut-column=Teclas
+key-bindings-editor-push-a-key=Pressione uma tecla
+key-bindings-editor-save-question=Existem mudan�as n�o salvas, voc� deseja exibir sem salvar?
+
+key-bindings-editor-override=Atalho j� definido! Deseja mud�-lo?
+
+
+
+
+print.print=Imprimir
+print.dialog=Imprimir
+print.service=Servi�o
+print.service.name=Nome
+print.service.status=Status
+print.service.type=Tipo
+print.service.info=Informa��o
+print.range=Faixa
+print.range.all-pages=Todas
+print.range.pages=P�ginas
+print.range.pages-to=At�
+print.copies=C�pias
+print.copies-number=N�mero de c�pias
+print.print-to-file=Imprimir em Arquivo
+print.file-chooser=Escolha
+print-header.default-song-name=tuxguitar_file
+print-header.default-song-author=An�nimo
+print.preview=Visualizar impress�o
+
+
+
+marker=Marcador
+marker.add=Adicionar Marcador
+marker.list=Listar Marcadores
+marker.first=Ir para o primeiro Marcador
+marker.last=Ir para o �ltimo Marcador
+marker.next=Ir para o Pr�ximo Marcador
+marker.previous=Ir para o Marcador Anterior
+
+
+
+export.tablature-enabled=Exibir Tablatura
+export.score-enabled=Mostrar Partitura
+export.black-and-white=Modo Preto e Branco
+
+scale=Escala
+scale.list=Lista de Escalas
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Itens de Arquivo
+edit.items=Itens de Editar
+property.items=Itens de Propriedades
+track.items=Itens de Pistas
+duration.items=Itens de Dura��o
+beat.items=Itens de Notas
+composition.items=Itens de Composi��o
+repeat.items=Itens de Repeti��o
+transport.items=Itens de Player
+marker.items=Itens de Marcadores
+insert.items=Itens de Inserir
+layout.items=Itens de Layout
+view.items=Itens de Visualizar
+effect.items=Itens de Efeitos
+dynamic.items=Itens de Din�mico
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Novo Arquivo
+action.file.open=Abrir arquivo
+action.file.save=Salvar
+action.file.save-as=Salvar como
+action.file.print=Imprimir
+action.file.print-preview=Visualizar Impress�o
+action.edit.undo=Desfazer
+action.edit.redo=Refazer
+action.edit.voice-1=Selecionar voz 1
+action.edit.voice-2=Selecionar voz 2
+action.composition.change-time-signature=Mudar a assinatura de tempo
+action.composition.change-tempo=Mudar o tempo
+action.composition.change-info=Alterar informa��es da m�sica
+action.composition.change-clef=Alterar Clave
+action.composition.change-key-signature=Alterar Arma��o da Clave
+action.view.layout-set-page=Exibir o Layout da P�gina
+action.view.layout-set-linear=Exibir layout linear
+action.view.layout-set-multitrack=Exibir modo multi-pista
+action.view.layout-set-score-enabled=Exibir Partitura
+action.view.show-piano=Mostrar Piano
+action.view.show-fretboard=Exibir Bra�o da Guitarra
+action.view.show-mixer=Exibir mixer
+action.view.show-transport=Exibir Player
+action.track.add=Adicionar Pista
+action.track.remove=Remover Pista
+action.track.clone=Duplicar a Pista
+action.track.go-first=Ir para a primeira pista
+action.track.go-last=Ir para a �ltima Pista
+action.track.go-next=Ir para a pr�xima pista
+action.track.go-previous=Ir para a Pista anterior
+action.track.lyrics=Editar Letras
+action.track.properties=Mudar as propriedades da pista
+action.measure.add=Adicionar Compasso
+action.measure.clean=Limpar Compasso
+action.measure.remove=Remover Compasso
+action.measure.copy=Copiar Compasso
+action.measure.paste=Colar compasso
+action.measure.go-first=Ir para o primeiro compasso
+action.measure.go-last=Ir para o �ltimo compasso
+action.measure.go-next=Ir para o pr�ximo compasso
+action.measure.go-previous=Ir para o compasso anterior
+action.beat.general.remove-unused-voice=Remover voz n�o usada
+action.beat.general.voice-up=Configura bast�es para cima
+action.beat.general.voice-down=Configura bast�es para baixo
+action.beat.general.voice-auto=Configura bast�es autom�ticos
+action.beat.general.set-stroke-up=Configura tocar para cima
+action.beat.general.set-stroke-down=Configura tocar para baixo
+action.beat.general.move-left=Mover um tempo para Esquerda
+action.beat.general.move-right=Mover um tempo para Direita
+action.beat.general.move-custom=Mover tempo Personalizado
+action.note.general.clean-beat=Schlag leeren
+action.note.general.decrement-semitone=Decrementar Semitom
+action.note.general.increment-semitone=Incrementar Semitom
+action.note.general.shift-down=Deslizar abaixo
+action.note.general.shift-up=Deslizar acima
+action.note.general.tied=Adicionar/Remover Ligado
+action.note.duration.change-dotted=Adicionar/Remover ponto
+action.note.duration.change-double-dotted=Adicionar/Remover duplo Ponto
+action.note.duration.change-division-type=Adicionar/Remover qui�ltera
+action.note.effect.change-vibrato=Adicionar/Remover Vibrato
+action.note.effect.change-bend=Adicionar/Remover bend
+action.note.effect.change-slide=Adicionar/Remover Slide
+action.note.effect.change-hammer=Adicionar/Remover Hammer on/Pull off
+action.note.effect.change-accentuated=
+action.note.effect.change-dead=
+action.note.effect.change-fade-in=Fade-In
+action.note.effect.change-ghost=Adicionar/Remover Ghost Note
+action.note.effect.change-grace=Adicionar/Remover Grace Note
+action.note.effect.change-harmonic=Adicionar/Remover Harm�nico
+action.note.effect.change-heavy-accentuated=Adicionar/Remover Nota Muito Acentuada
+action.note.effect.change-palm-mute=Adicionar/Remover Nota Abafada
+action.note.effect.change-popping=Adicionar/Remover Popping
+action.note.effect.change-slapping=Adicionar/Remover Slapping
+action.note.effect.change-staccato=Adicionar/Remover Staccato
+action.note.effect.change-tapping=Adicionar/Remover Tapping
+action.note.effect.change-tremolo-bar=Adicionar/Remover Barra de tr�molo
+action.note.effect.change-tremolo-picking=Adicionar/Remover Tr�molo Picking
+action.note.effect.change-trill=Adicionar/Remover Trill
+action.insert.open-repeat=Abrir repeti��o
+action.insert.close-repeat=Fechar repeti��o
+action.insert.chord=Inserir acorde
+action.transport.play=Tocar m�sica
+action.transport.stop=Parar de tocar
+action.transport.set-loop-start=Configurar in�cio do loop
+action.transport.set-loop-end=Configurar final do loop
+
+info=Info
+name=Nome
+author=Autor
+version=Vers�o
+description=Descri��o
+configure=Configurar
+
+file.open-url=Abrir URL
+file.open.error=N�o p�de abrir: {0}
+file.save.error=N�o p�de salvar: {0}
+file.import.error=N�o p�de importar: {0}
+file.export.error=N�o p�de exportar: {0}
+file.save-changes-question=A m�sica tem altera��es n�o salvas.\nDeseja salvar as mudan�as?
+
+midi.port=Midi Port
+midi.sequencer=Midi Sequencer
+
+browser.dialog=Navegador
+browser.menu.file=Arquivo
+browser.open=Abrir
+browser.exit=Sair
+browser.menu.collection=Cole��o
+browser.menu.go=Ir
+browser.collection.select=Selecionar cole��o
+browser.collection.open=Abrir
+browser.collection.remove=Remover
+browser.collection.close=Fechar
+browser.collection.new=Abrir
+browser.go-root=Inicial
+browser.go-back=Voltar
+browser.refresh=Atualizar
+browser.collection.fs.editor-title=Arquivos de cole��o
+browser.collection.fs.editor-tip=Escolha a pasta da sua cole��o
+browser.collection.fs.invalid-path=Por favor, selecione uma pasta v�lida
+
+plugin.unknown-value=Indispon�vel
+plugin.column.name=Nome do Plugin
+plugin.column.enabled=Habilitado
+
+view.layout.compact=Compacto
+view.layout.chord-style=Estilo de acorde
+view.layout.chord-name=Nome do acorde
+view.layout.chord-diagram=Diagrama de acorde
+view.layout.tablature-enabled=Mostrar tablatura
+
+view.show-matrix=Mostrar matriz
+
+matrix.editor=Editor de matriz
+matrix.grids=N�mero de grades
+matrix.border-color=Cor da borda
+matrix.font=Fonte
+matrix.foreground-color=Cor da fonte
+matrix.line-color-1=Cor da linha 1
+matrix.line-color-2=Cor da linha 2
+matrix.line-color-over=Cor de cima
+matrix.note-color=Cor da nota
+matrix.play-note-color=Cor da nota a tocar
+matrix.position-color=Cor da posi��o
+matrix.settings=Configura��es da matriz
+
+help.doc=Documenta��o
+
+transport.first=Primeiro
+transport.last=�ltimo
+transport.previous=Anterior
+transport.next=Pr�ximo
+transport.pause=Pausar
+transport.mode=Modo Tocador
+transport.mode.simple=Modo Tocador Simples
+transport.mode.simple.tempo-percent=Percentual de tempo
+transport.mode.simple.loop=Tocar um Loop
+transport.mode.trainer=Modo de Treinamento
+transport.mode.trainer.increment-description=Incrementar em
+
+repeat.alternative=Repeti��o Alternativa
+repeat.alternative.editor=Editar Repeti��o Alternativa
+
+tools=Ferramentas
+tools.scale=Lista de escalas
+tools.browser=Navegador
+tools.plugins=Plugins
+tools.shortcuts=Atalhos
+tools.settings=Configura��es
+tools.transpose=Transposi��o
+tools.transpose.semitones=Transposi��o Semitons
+tools.transpose.apply-to-track=Transpor todos os compassos
+tools.transpose.apply-to-measure=Transpor apenas este compasso
+tools.transpose.apply-to-all-tracks=Aplicar em todas as pistas
+tools.transpose.try-keep-strings=Tentar manter as notas na mesma corda
+tools.transpose.apply-to-chords=Transpor acordes
+
+text.insert=Inserir Texto
+
+settings.config.main.table.auto-size.enabled=Habilitar ajuste de tamanho autom�tico
+settings.config.styles.general=Estilos Gerais
+settings.config.styles.printer=Estilos de Impressora
+settings.config.styles.font.lyric=Fonte das letras
+settings.config.styles.font.text=Fonte do texto
+settings.config.skin=Skins
+settings.config.skin.choose=Escolha uma skin
+settings.config.toolbars.tip=Personalize suas barras
+settings.config.toolbars.list=Barras dispon�veis
+settings.config.toolbars.move-up=Mover para cima
+settings.config.toolbars.move-down=Mover para baixo
+
+action.file.open-url=Abrir URL
+action.file.exit=Sair do TuxGuitar
+action.insert.text=Inserir Texto
+action.insert.repeat-alternative=Repeti��o Alternativa
+action.composition.change-triplet-feel=Alterar Triplet Feel
+action.note.duration.set-whole=Usar dura��o total
+action.note.duration.set-half=Usar 1/2 da dura��o
+action.note.duration.set-quarter=Usar 1/4 da dura��o
+action.note.duration.set-eighth=Usar 1/8 da dura��o
+action.note.duration.set-sixteenth=Usar 1/16 da dura��o
+action.note.duration.set-thirty-second=Set 1/32 da dura��o
+action.note.duration.set-sixty-fourth=Set 1/64 da dura��o
+action.note.duration.decrement-duration=Decrementar dura��o
+action.note.duration.increment-duration=Incrementar dura��o
+action.track.move-down=Mover para baixo
+action.track.move-up=Mover para cima
+action.tools.browser=Navegador
+action.tools.transpose=Transpor notas
+action.transport.metronome=Metr�nomo
+
+transport.metronome=Metr�nomo
+action.transport.mode=Modo
+action.view.show-matrix=Mostrar Matriz
+action.view.layout-set-chord-diagram-enabled=Habilitar Diagrama de Acorde
+action.view.layout-set-chord-name-enabled=Habilitar Nome de Acorde
+action.view.layout-set-compact=Mostrar em Modo Compacto
+action.view.layout-set-tablature-enabled=Mostrar Tablatura
+action.marker.add=Adicionar Marcador
+action.marker.go-next=Ir para o pr�ximo Marcador
+action.marker.go-previous=Ir para o Marcador anterior
+action.settings.configure=Configura��es
+action.help.doc=Ajuda
+
+chord.bass=Baixo
+chord.custom=Acorde personalizado
+chord.settings.tip=Configura��es personalizadas
+chord.settings.type=Tipo
+chord.settings.type.most-common=Mais comuns
+chord.settings.type.inversions=Invers�es
+chord.settings.type.close-voiced=Soar fechado
+chord.settings.type.open-voiced=Soar aberto
+chord.settings.open-chords=Acordes abertos
+chord.settings.chords-to-display=Acordes para mostrar
+chord.settings.search-frets=Localizar Frets
+chord.settings.minimum-fret=M�nimo
+chord.settings.maximum-fret=M�ximo
+
+fretboard.direction=Dire��o
+fretboard.background-color=Cor de fundo
+fretboard.display-note-text=Mostrar texto da nota
+fretboard.display-scale-text=Mostrar texto da escala
+fretboard.font=Fonte
+fretboard.fretpoint-color=Cor dos Frets
+fretboard.note-color=Cor das notas
+fretboard.scale-note-color=Cor das notas de escala
+fretboard.settings=Configura��es do bra�o
+fretboard.string-color=Cor das cordas
+fretboard.settings.options=Op��es
+
+piano.editor=Editor de piano
+piano.natural-key-color=Cor de chave natural
+piano.not-natural-key-color=Cor de chave n�o natural
+piano.note-color=Cor da nota
+piano.scale-note-color=Cor da nota da escala
+piano.settings=Configura��es do piano
+
+mixer=Mixer
+
+
+composition.tempo.start-to-end=Aplicar este tempo na m�sica inteira
+composition.tempo.position-to-end=Aplicar este tempo at� o final da m�sica
+composition.tempo.position-to-next=Aplicar este tempo at� o pr�ximo marcador de tempo
+
+help.about.license=Licensa
+help.about.authors=Autores
+help.about.description=Descri��o
+
+browser.collection.fs.name=Nome
+browser.collection.fs.path=Pasta
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_ru.properties b/TuxGuitar-testing/platform-all/share/lang/messages_ru.properties
new file mode 100644
index 0000000..fa0ebc1
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_ru.properties
@@ -0,0 +1,615 @@
+ok=\u041e\u043a
+cancel=\u041e\u0442\u043c\u0435\u043d\u0430
+yes=\u0414\u0430
+no=\u041d\u0435\u0442
+add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c
+edit=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
+exit=\u0412\u044b\u0445\u043e\u0434
+close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
+choose=\u0412\u044b\u0431\u043e\u0440
+color=\u0426\u0432\u0435\u0442
+title=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a
+go=\u041f\u0435\u0440\u0435\u0439\u0442\u0438
+warning=\u041f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435
+error=\u041e\u0448\u0438\u0431\u043a\u0430
+plugins=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f
+options=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+defaults=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
+clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c
+rename=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c
+fret=\u041b\u0430\u0434
+position=\u041f\u043e\u0437\u0438\u0446\u0438\u044f
+name=\u0418\u043c\u044f
+author=\u0410\u0432\u0442\u043e\u0440
+version=\u0412\u0435\u0440\u0441\u0438\u044f
+description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
+info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
+configure=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f
+url=URL
+
+
+file=\u0424\u0430\u0439\u043b
+file.new=\u041d\u043e\u0432\u044b\u0439
+file.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c
+file.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
+file.save-as=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a
+file.save-changes-question=\u0412 \u043c\u0435\u043b\u043e\u0434\u0438\u0438 \u0431\u044b\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.\n\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f?
+file.exit=\u0412\u044b\u0445\u043e\u0434
+file.export=\u042d\u043a\u0441\u043f\u043e\u0440\u0442
+file.export-midi=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 MIDI
+file.export-pdf=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 PDF
+file.print=\u041f\u0435\u0447\u0430\u0442\u044c
+file.print-preview=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
+file.import=\u0418\u043c\u043f\u043e\u0440\u0442
+file.import-midi=\u0418\u043c\u043f\u043e\u0440\u0442 \u0438\u0437 MIDI
+file.export-ascii=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 ASCII
+file.history=\u0418\u0441\u0442\u043e\u0440\u0438\u044f
+file.open-url=\u041e\u0442\u043a\u0440\u044b\u0442\u044c URL
+file.open.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c: {0}
+file.save.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c: {0}
+file.import.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: {0}
+file.export.error=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: {0}
+
+edit.menu=\u041f\u0440\u0430\u0432\u043a\u0430
+edit.undo=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
+edit.redo=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c
+edit.copy=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c
+edit.from=\u041e\u0442
+edit.to=\u0414\u043e
+edit.all-tracks=\u0412\u0441\u0435 \u0442\u0440\u0435\u043a\u0438
+edit.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c
+edit.paste.replace-mode=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0442\u0430\u043a\u0442
+edit.paste.insert-mode=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u043e\u0432\u044b\u0439 \u0442\u0430\u043a\u0442
+edit.delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+edit.cut=\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c
+edit.mouse-mode-selection=\u0420\u0435\u0436\u0438\u043c \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f
+edit.mouse-mode-edition=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u044b
+edit.not-natural-key=\u0414\u0438\u0435\u0437/\u0411\u0435\u043c\u043e\u043b\u044c
+
+view=\u0412\u0438\u0434
+
+view.layout=\u0424\u043e\u0440\u043c\u0430\u0442
+view.layout.page=\u0424\u043e\u0440\u043c\u0430\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b
+view.layout.linear=\u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442
+view.layout.compact=\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439
+view.layout.multitrack=\u041c\u0443\u043b\u044c\u0442\u0438\u0442\u0440\u0435\u043a
+view.layout.chord-style=\u0421\u0442\u0438\u043b\u044c \u0430\u043a\u043a\u043e\u0440\u0434\u0430
+view.layout.chord-name=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0430\u043a\u043a\u043e\u0440\u0434\u0430
+view.layout.chord-diagram=\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432
+view.layout.score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443
+view.layout.tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443
+view.show-mixer=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0438\u043a\u0448\u0435\u0440
+view.show-fretboard=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0433\u0438\u0442\u0430\u0440\u043d\u044b\u0439 \u0433\u0440\u0438\u0444
+view.show-piano=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0438
+view.show-matrix=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443
+view.show-transport=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c
+
+fretboard.right-mode=\u041f\u0440\u0430\u0432\u0448\u0430
+fretboard.left-mode=\u041b\u0435\u0432\u0448\u0430
+fretboard.background-color=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430
+fretboard.display-note-text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043d\u043e\u0442\u0443
+fretboard.display-scale-text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0433\u0430\u043c\u043c\u0443
+fretboard.font=\u0428\u0440\u0438\u0444\u0442
+fretboard.fretpoint-color=\u0426\u0432\u0435\u0442 \u043b\u0430\u0434\u0430
+fretboard.note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b
+fretboard.scale-note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b \u0433\u0430\u043c\u043c\u044b
+fretboard.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0433\u0438\u0442\u0430\u0440\u043d\u043e\u0433\u043e \u0433\u0440\u0438\u0444\u0430
+fretboard.string-color=\u0426\u0432\u0435\u0442 \u0441\u0442\u0440\u0443\u043d
+fretboard.settings.options=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+
+piano.editor=\u041a\u043b\u0430\u0432\u0438\u0448\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440
+piano.natural-key-color=\u0426\u0432\u0435\u0442 \u0431\u0435\u043b\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448
+piano.not-natural-key-color=\u0426\u0432\u0435\u0442 \u0447\u0435\u0440\u043d\u044b\u0445 \u043a\u043b\u0430\u0432\u0438\u0448
+piano.note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b
+piano.scale-note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b \u0433\u0430\u043c\u043c\u044b
+piano.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u043b\u0430\u0432\u0438\u0448
+
+matrix.editor=\u041c\u0430\u0442\u0440\u0438\u0447\u043d\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440
+matrix.grids=\u0427\u0438\u0441\u043b\u043e \u0441\u0435\u0442\u043e\u043a
+matrix.border-color=\u0426\u0432\u0435\u0442 \u0440\u0430\u043c\u043a\u0438
+matrix.font=\u0428\u0440\u0438\u0444\u0442
+matrix.foreground-color=\u0426\u0432\u0435\u0442 \u043f\u0435\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u043f\u043b\u0430\u043d\u0430
+matrix.line-color-1=\u0426\u0432\u0435\u0442 \u043d\u0435\u0447\u0451\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438
+matrix.line-color-2=\u0426\u0432\u0435\u0442 \u0447\u0451\u0442\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438
+matrix.line-color-over=\u0426\u0432\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u0438 \u043f\u043e\u0434 \u043a\u0443\u0440\u0441\u043e\u0440\u043e\u043c
+matrix.note-color=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b
+matrix.play-note-color=\u0426\u0432\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u043d\u043e\u0442\u044b
+matrix.position-color=\u0426\u0432\u0435\u0442 \u043f\u043e\u0437\u0438\u0446\u0438\u0438
+matrix.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044b
+
+composition=\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f
+composition.timesignature=\u041e\u0442\u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438
+composition.timesignature.Numerator=\u0427\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c
+composition.timesignature.denominator=\u0417\u043d\u0430\u043c\u0435\u043d\u0430\u0442\u0435\u043b\u044c
+composition.timesignature.to-the-end=\u0412 \u043a\u043e\u043d\u0435\u0446
+composition.tempo=\u0422\u0435\u043c\u043f
+composition.tempo-percent=\u041f\u0440\u043e\u0446\u0435\u043d\u0442
+composition.tempo.invalid=\u041d\u0435\u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0442\u0435\u043c\u043f
+composition.tempo.start-to-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0435\u043c\u043f \u043a\u043e \u0432\u0441\u0435\u0439 \u043c\u0435\u043b\u043e\u0434\u0438\u0438
+composition.tempo.position-to-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0435\u043c\u043f \u043a \u043a\u043e\u043d\u0446\u0443
+composition.tempo.position-to-next=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0442\u0435\u043c\u043f \u0434\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0438
+composition.properties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430
+composition.name=\u0418\u043c\u044f
+composition.artist=\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c
+composition.album=\u0410\u043b\u044c\u0431\u043e\u043c
+composition.author=\u0410\u0432\u0442\u043e\u0440
+composition.tripletfeel=\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a \u0442\u0440\u0438\u043e\u043b\u044f\u043c
+composition.clef=\u041a\u043b\u044e\u0447
+composition.clef.treble=\u0421\u043a\u0440\u0438\u043f\u0438\u0447\u043d\u044b\u0439
+composition.clef.bass=\u0411\u0430\u0441\u043e\u0432\u044b\u0439
+composition.clef.tenor=\u0422\u0435\u043d\u043e\u0440\u043d\u044b\u0439
+composition.clef.alto=\u0410\u043b\u044c\u0442\u043e\u0432\u044b\u0439
+composition.clef.to-the-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043a\u043b\u044e\u0447 \u043a \u043a\u043e\u043d\u0446\u0443
+composition.keysignature=\u041e\u0442\u043c\u0435\u0442\u043a\u0438 \u0437\u043d\u0430\u043a\u043e\u0432
+composition.keysignature.natural=\u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b
+composition.keysignature.sharp-1=1 \u0434\u0438\u0435\u0437
+composition.keysignature.sharp-2=2 \u0434\u0438\u0435\u0437
+composition.keysignature.sharp-3=3 \u0434\u0438\u0435\u0437
+composition.keysignature.sharp-4=4 \u0434\u0438\u0435\u0437
+composition.keysignature.sharp-5=5 \u0434\u0438\u0435\u0437
+composition.keysignature.sharp-6=6 \u0434\u0438\u0435\u0437
+composition.keysignature.sharp-7=7 \u0434\u0438\u0435\u0437
+composition.keysignature.flat-1=1 \u0431\u0435\u043c\u043e\u043b\u044c
+composition.keysignature.flat-2=2 \u0431\u0435\u043c\u043e\u043b\u044c
+composition.keysignature.flat-3=3 \u0431\u0435\u043c\u043e\u043b\u044c
+composition.keysignature.flat-4=4 \u0431\u0435\u043c\u043e\u043b\u044c
+composition.keysignature.flat-5=5 \u0431\u0435\u043c\u043e\u043b\u044c
+composition.keysignature.flat-6=6 \u0431\u0435\u043c\u043e\u043b\u044c
+composition.keysignature.flat-7=7 \u0431\u0435\u043c\u043e\u043b\u044c
+composition.keysignature.to-the-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0437\u043d\u0430\u043a \u043a \u043a\u043e\u043d\u0446\u0443
+composition.tripletfeel=\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a \u0442\u0440\u0438\u043e\u043b\u044f\u043c
+composition.tripletfeel.none=\u0411\u0435\u0437 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043a \u0442\u0440\u0438\u043e\u043b\u044f\u043c
+composition.tripletfeel.eighth=\u0422\u0440\u0438\u043e\u043b\u044c \u0432\u043e\u0441\u044c\u043c\u044b\u043c\u0438
+composition.tripletfeel.sixteenth=\u0422\u0440\u0438\u043e\u043b\u044c \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u044b\u043c\u0438
+composition.tripletfeel.to-the-end=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u044d\u0442\u0443 \u0442\u0440\u0438\u043e\u043b\u044c \u043a \u043a\u043e\u043d\u0446\u0443
+
+help=\u041f\u043e\u043c\u043e\u0449\u044c
+help.help=\u041f\u043e\u043c\u043e\u0449\u044c
+help.doc=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f
+help.about=\u041e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0435
+help.about.license=\u041b\u0438\u0446\u0435\u043d\u0437\u0438\u044f
+help.about.authors=\u0410\u0432\u0442\u043e\u0440\u044b
+help.about.description=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435
+
+track=\u0422\u0440\u0435\u043a
+track.number=\u2116
+track.name=\u0418\u043c\u044f
+track.color=\u0426\u0432\u0435\u0442
+track.first=\u041f\u0435\u0440\u0432\u044b\u0439 \u0442\u0440\u0435\u043a
+track.last=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0442\u0440\u0435\u043a
+track.previous=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0442\u0440\u0435\u043a
+track.next=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0442\u0440\u0435\u043a
+track.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0435\u043a
+track.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043a
+track.clone=\u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u043a
+track.move-up=\u0412\u044b\u0448\u0435
+track.move-down=\u041d\u0438\u0436\u0435
+track.instrument=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442
+track.properties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430
+track.properties.general=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435
+track.name.default-percussion-name=\u041f\u0435\u0440\u043a\u0443\u0441\u0441\u0438\u044f
+track.lyrics=\u041b\u0438\u0440\u0438\u043a\u0430
+track.solo=\u0421\u043e\u043b\u043e
+track.mute=\u0417\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u044c
+
+lyric.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043b\u0438\u0440\u0438\u043a\u0438
+
+measure=\u0422\u0430\u043a\u0442
+measure.first=\u041f\u0435\u0440\u0432\u044b\u0439 \u0442\u0430\u043a\u0442
+measure.last=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0442\u0430\u043a\u0442
+measure.previous=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0442\u0430\u043a\u0442
+measure.next=\u0421\u043b\u0435\u0434\u0439\u044e\u0449\u0438\u0439 \u0442\u0430\u043a\u0442
+measure.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442
+measure.add-before-current-position=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 \u043f\u0435\u0440\u0435\u0434 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439
+measure.add-after-current-position=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 \u043f\u043e\u0441\u043b\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438
+measure.add-at-end=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442 \u0432 \u043a\u043e\u043d\u0435\u0446
+measure.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u043a\u0442
+measure.copy=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0442
+measure.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442
+measure.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u0442
+
+duration=\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+duration.whole=\u0426\u0435\u043b\u0430\u044f
+duration.half=\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0430\u044f
+duration.quarter=\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u043d\u0430\u044f
+duration.eighth=\u0412\u043e\u0441\u044c\u043c\u0430\u044f
+duration.sixteenth=\u0428\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0430\u044f
+duration.thirtysecond=\u0422\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f
+duration.sixtyfourth=\u0428\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f
+duration.dotted=\u0422\u043e\u0447\u043a\u0430
+duration.doubledotted=\u0414\u0432\u043e\u0439\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430
+duration.division-type=\u0422\u0443\u043f\u043b\u0435\u0442\u043e
+
+dynamic=\u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430
+dynamic.piano-pianissimo=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0442\u0438\u0445\u043e
+dynamic.pianissimo=\u041e\u0447\u0435\u043d\u044c \u0442\u0438\u0445\u043e
+dynamic.piano=\u0422\u0438\u0445\u043e
+dynamic.mezzo-piano=\u0421\u0434\u0435\u0440\u0436\u0430\u043d\u043d\u043e
+dynamic.mezzo-forte=\u0423\u043c\u0435\u0440\u0435\u043d\u043d\u043e
+dynamic.forte=\u0413\u0440\u043e\u043c\u043a\u043e
+dynamic.fortissimo=\u041e\u0447\u0435\u043d\u044c \u0433\u0440\u043e\u043c\u043a\u043e
+dynamic.forte-fortissimo=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0433\u0440\u043e\u043c\u043a\u043e
+
+effects=\u042d\u0444\u0444\u0435\u043a\u0442\u044b
+effects.vibrato=\u0412\u0438\u0431\u0440\u0430\u0442\u043e
+effects.bend=\u0411\u044d\u043d\u0434
+effects.deadnote=\u041f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u0430\u044f \u043d\u043e\u0442\u0430
+effects.slide=\u0421\u043b\u0430\u0439\u0434
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=\u0422\u0440\u0435\u043c\u043e\u043b\u043e
+effects.tremolo-bar-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0432\u0438\u0431\u0440\u0430\u0442\u043e
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=\u0412\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f
+effects.ghostnote=\u041f\u043e\u0432\u0442\u043e\u0440 \u043d\u043e\u0442\u044b
+effects.accentuatednote=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u043d\u043e\u0442\u0443
+effects.heavyaccentuatednote=\u0421\u0438\u043b\u044c\u043d\u043e \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043d\u043e\u0442\u0430
+effects.harmonic=\u041e\u0431\u0435\u0440\u0442\u043e\u043d
+effects.grace=\u041f\u043b\u0430\u0432\u043d\u0430\u044f \u043d\u043e\u0442\u0430
+effects.grace-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u043b\u0430\u0432\u043d\u043e\u0439 \u043d\u043e\u0442\u044b
+effects.grace.before-beat=\u0414\u043e \u0443\u0434\u0430\u0440\u0430
+effects.grace.on-beat=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0443\u0434\u0430\u0440\u0430
+effects.grace.transition=\u041c\u043e\u0434\u0443\u043b\u044f\u0446\u0438\u044f
+effects.grace.transition-none=\u041d\u0438\u0447\u0435\u0433\u043e
+effects.grace.transition-bend=\u0411\u044d\u043d\u0434
+effects.grace.transition-slide=\u0421\u043b\u0430\u0439\u0434
+effects.grace.transition-hammer=\u0425\u0430\u043c\u043c\u0435\u0440
+effects.trill=\u0422\u0440\u0435\u043b\u044c
+effects.trill-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0442\u0440\u0435\u043b\u0438
+effects.tremolo-picking=\u0412\u0438\u0431\u0440\u0430\u0442\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u043e\u0440\u043e\u043c
+effects.tremolo-picking-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0432\u0438\u0431\u0440\u0430\u0442\u043e \u043c\u0435\u0434\u0438\u0430\u0442\u043e\u0440\u043e\u043c
+effects.palm-mute=\u0413\u043b\u0443\u0448\u0435\u043d\u0438\u0435 \u043b\u0430\u0434\u043e\u043d\u044c\u044e
+effects.staccato=\u0421\u0442\u0430\u043a\u043a\u0430\u0442\u043e
+effects.tapping=\u0422\u044d\u043f\u043f\u0438\u043d\u0433
+effects.slapping=\u0421\u043b\u044d\u043f
+effects.popping=Popping
+effects.fade-in=\u041f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435 \u0437\u0432\u0443\u043a\u0430
+effects.harmonic-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0438
+effects.harmonic.type-of-harmonic=\u0422\u0438\u043f \u043e\u0431\u0435\u0440\u0442\u043e\u043d\u0430
+effects.harmonic.natural=\u041e\u0431\u0435\u0440\u0442\u043e\u043d \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u0430
+effects.harmonic.artificial=\u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442
+effects.harmonic.artificial.key-offset=\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u043a\u0430
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=\u041b\u0435\u0432\u0448\u0430
+effects.harmonic.tapped.right-hand=\u041f\u0440\u0430\u0432\u0448\u0430
+effects.harmonic.pinch=\u0417\u0430\u0436\u0438\u043c\u0430\u043d\u0438\u0435 \u043e\u0431\u0435\u0440\u0442\u043e\u043d\u0430
+effects.harmonic.semi=\u041f\u043e\u043b\u0443\u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442
+
+bend.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0431\u044d\u043d\u0434\u043e\u0432
+bend.bend=\u0411\u044d\u043d\u0434
+bend.bend-release=\u0411\u044d\u043d\u0434/\u041e\u0442\u043f\u0443\u0441\u0442\u0438\u0442\u044c
+bend.bend-release-bend=\u0411\u044d\u043d\u0434/\u041e\u0442\u043f\u0443\u0441\u0442\u0438\u0442\u044c/\u0411\u044d\u043d\u0434
+bend.prebend=\u041f\u0440\u0435\u0431\u044d\u043d\u0434
+bend.prebend-release=\u041f\u0440\u0435\u0431\u044d\u043d\u0434/\u041e\u0442\u043f\u0443\u0441\u0442\u0438\u0442\u044c
+
+transport=\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c
+transport.start=\u0417\u0430\u043f\u0443\u0441\u043a
+transport.stop=\u0421\u0442\u043e\u043f
+transport.pause=\u041f\u0430\u0443\u0437\u0430
+transport.first=\u041f\u0435\u0440\u0432\u044b\u0439
+transport.last=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439
+transport.previous=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439
+transport.next=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439
+transport.metronome=\u041c\u0435\u0442\u0440\u043e\u043d\u043e\u043c
+transport.mode=\u0412\u0438\u0434 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f
+transport.mode.simple=\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0440\u0435\u0436\u0438\u043c
+transport.mode.simple.tempo-percent=\u0422\u0435\u043c\u043f \u0432 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430\u0445
+transport.mode.simple.loop=\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435
+transport.mode.trainer=\u0422\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c
+transport.mode.trainer.increment-description=\u0428\u0430\u0433 \u0432
+
+instruments.volume=\u0423\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c
+instrument.volume=\u0417\u0432\u0443\u043a
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=\u0411\u0430\u043b\u0430\u043d\u0441
+instrument.free=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c
+instrument.link=\u041a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438
+
+repeat.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440
+repeat.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440
+repeat.alternative=\u0412\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0430
+repeat.alternative.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0430
+repetitions=\u041f\u043e\u0432\u0442\u043e\u0440\u044b
+repeat.number-of-repetitions=\u0427\u0438\u0441\u043b\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432
+
+beat=\u0411\u0438\u0442
+beat.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c
+
+note=\u041d\u043e\u0442\u0430
+note.semitone-up=\u0412\u0432\u0435\u0440\u0445 \u043d\u0430 \u043f\u043e\u043b\u0443\u0442\u043e\u043d
+note.semitone-down=\u0412\u043d\u0438\u0437 \u043d\u0430 \u043f\u043e\u043b\u0443\u0442\u043e\u043d
+note.shift-up=\u0421\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u043e\u0442\u0443 \u043d\u0430\u0432\u0435\u0440\u0445
+note.shift-down=\u0421\u0434\u0432\u0438\u043d\u0443\u0442\u044c \u043d\u0430 \u043d\u043e\u0442\u0443 \u0432\u043d\u0438\u0437
+note.tiednote=\u041b\u0438\u0433\u0430
+note.deadnote=\u041f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u0430\u044f \u043d\u043e\u0442\u0430
+
+insert.chord=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434
+chord.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434
+chord=\u0410\u043a\u043a\u043e\u0440\u0434
+chord.name=\u0418\u043c\u044f
+chord.bass=\u0411\u0430\u0441
+chord.custom=\u041e\u0431\u044b\u0447\u043d\u044b\u0439/\u0441\u0432\u043e\u0439 \u0430\u043a\u043a\u043e\u0440\u0434
+chord.custom.name-empty-error=\u0414\u0430\u043d\u043d\u044b\u0439 \u0430\u043a\u043a\u043e\u0440\u0434 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d
+chord.custom.name-exist-error=\u0422\u0430\u043a\u043e\u0439 \u0430\u043a\u043a\u043e\u0440\u0434 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442
+chord.settings.tip=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+chord.settings.type=\u0422\u0438\u043f
+chord.settings.type.most-common=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435
+chord.settings.type.inversions=\u041e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u0430\u043a\u043a\u043e\u0440\u0434\u0430
+chord.settings.type.close-voiced=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0440\u0442\u0438\u044e
+chord.settings.type.open-voiced=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u043f\u0430\u0440\u0442\u0438\u044e
+chord.settings.open-chords=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434\u044b
+chord.settings.chords-to-display=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434\u044b
+chord.settings.search-frets=\u041d\u0430\u0439\u0442\u0438 \u043b\u0430\u0434
+chord.settings.minimum-fret=\u041c\u0438\u043d\u0438\u043c\u0443\u043c
+chord.settings.maximum-fret=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c
+
+instrument=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442
+instrument.instrument=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442
+instrument.percussion-track=\u0423\u0434\u0430\u0440\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b
+
+tuning=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+tuning.strings=\u0421\u0442\u0440\u0443\u043d\u044b
+tuning.offset=\u0421\u043c\u0435\u0449\u0435\u043d\u0438\u0435
+
+language=\u042f\u0437\u044b\u043a
+replace-file-question=\u0422\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e?
+choose-color=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0446\u0432\u0435\u0442
+
+settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+settings.config=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 TuxGuitar
+settings.config.language=\u042f\u0437\u044b\u043a
+settings.config.language.choose=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u044f\u0437\u044b\u043a
+settings.config.styles=\u0421\u0442\u0438\u043b\u044c
+settings.config.styles.general=\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0448\u0440\u0438\u0444\u0442
+settings.config.styles.printer=\u0428\u0440\u0438\u0444\u0442 \u043f\u0440\u0438 \u043f\u0435\u0447\u0430\u0442\u0438
+settings.config.styles.font.default=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e
+settings.config.styles.font.note=\u0428\u0440\u0438\u0444\u0442 \u043d\u043e\u0442\u044b
+settings.config.styles.font.lyric=\u0428\u0440\u0438\u0444\u0442 \u0432\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043b\u0438\u043d\u0438\u0438
+settings.config.styles.font.text=\u0428\u0440\u0438\u0444\u0442 \u0442\u0435\u043a\u0441\u0442\u0430
+settings.config.styles.font.time-signature=\u0428\u0440\u0438\u0444\u0442 \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438
+settings.config.styles.font.printer-default=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e-\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0438 \u043f\u0435\u0447\u0430\u0442\u0438
+settings.config.styles.font.printer-note=\u0428\u0440\u0438\u0444\u0442 \u043d\u043e\u0442\u044b \u043f\u0440\u0438 \u043f\u0435\u0447\u0430\u0442\u0438
+settings.config.styles.font.printer-time-signature=\u0428\u0440\u0438\u0444\u0442 \u043e\u0442\u043c\u0435\u0442\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043f\u0440\u0438 \u043f\u0435\u0447\u0430\u0442\u0438
+settings.config.styles.color.score-note=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u044b
+settings.config.styles.color.tab-note=\u0426\u0432\u0435\u0442 \u043d\u043e\u0442\u044b \u0442\u0430\u0431\u0430
+settings.config.styles.color.play-note=\u0426\u0432\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u043d\u043e\u0442\u044b
+settings.config.apply-changes-question=\u041f\u0440\u0438\u043d\u044f\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0435\u0439\u0447\u0430\u0441?
+settings.config.sound=\u041f\u0435\u0441\u043d\u044f
+settings.config.main=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435
+settings.config.main.window-title=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043e\u043a\u043d\u0430
+settings.config.main.window-title.help=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0435 \u043e\u043a\u043d\u0430:
+settings.config.main.window-title.var.description.appname=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f: TuxGuitar
+settings.config.main.window-title.var.description.appversion=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e TuxGuitar
+settings.config.main.window-title.var.description.filename=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430
+settings.config.main.window-title.var.description.filepath=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0443\u0442\u044c \u043a \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443
+settings.config.main.window-title.var.description.songname=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043c\u044f \u043c\u0435\u043b\u043e\u0434\u0438\u0438
+settings.config.main.window-title.var.description.songauthor=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u0432\u0442\u043e\u0440\u0430 \u043c\u0435\u043b\u043e\u0434\u0438\u0438
+settings.config.main.window-title.var.description.songalbum=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0430\u043b\u044c\u0431\u043e\u043c \u043c\u0435\u043b\u043e\u0434\u0438\u0438
+settings.config.main.window-title.var.description.songartist=\u042d\u0442\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044f \u043c\u0435\u043b\u043e\u0434\u0438\u0438
+settings.config.main.options=\u041e\u043f\u0446\u0438\u0438
+settings.config.main.splash-enabled=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435
+settings.config.main.table.auto-size.enabled=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u043a\u043d\u0430
+settings.config.styles.color.lines=\u0426\u0432\u0435\u0442 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u043b\u0438\u043d\u0438\u0439
+settings.config.toolbars=\u041f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432
+settings.config.toolbars.tip=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0412\u0430\u0448\u0438 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432
+settings.config.toolbars.list=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u0430\u043d\u0435\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432
+settings.config.toolbars.move-up=\u0412\u044b\u0448\u0435
+settings.config.toolbars.move-down=\u041d\u0438\u0436\u0435
+settings.config.skin=\u0421\u043a\u0438\u043d\u044b
+settings.config.skin.choose=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0432\u043e\u0439 \u0441\u043a\u0438\u043d
+settings.keybindings=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f \u043a\u043b\u0430\u0432\u0438\u0448
+
+key-bindings-editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u0439 \u043a\u043b\u0430\u0432\u0438\u0448
+key-bindings-editor-action-select=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435
+key-bindings-editor-action-column=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044f
+key-bindings-editor-shortcut-column=\u041a\u043b\u0430\u0432\u0438\u0448\u0438
+key-bindings-editor-push-a-key=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443
+key-bindings-editor-save-question=\u0418\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0439\u0442\u0438 \u0431\u0435\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f?
+
+key-bindings-editor-override=\u042d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f! \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?
+
+print.print=\u041f\u0435\u0447\u0430\u0442\u044c
+print.dialog=\u041f\u0435\u0447\u0430\u0442\u044c
+print.service=\u0421\u043b\u0443\u0436\u0431\u0430
+print.service.name=\u0418\u043c\u044f
+print.service.status=\u0421\u0442\u0430\u0442\u0443\u0441
+print.service.type=\u0422\u0438\u043f
+print.service.info=\u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f
+print.range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d
+print.range.all-pages=\u0412\u0441\u0451
+print.range.pages=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u044b
+print.range.pages-to=\u0414\u043e
+print.copies=\u041a\u043e\u043f\u0438\u0438
+print.copies-number=\u0427\u0438\u0441\u043b\u043e \u043a\u043e\u043f\u0438\u0439
+print.print-to-file=\u041f\u0435\u0447\u0430\u0442\u044c \u0432 \u0444\u0430\u0439\u043b
+print.file-chooser=\u0412\u044b\u0431\u043e\u0440
+print-header.default-song-name=\u0411\u0435\u0437 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f
+print-header.default-song-author=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0430\u0432\u0442\u043e\u0440
+
+print.preview=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
+print.preview.page-of=\u041e\u0442
+
+marker=\u041c\u0435\u0442\u043a\u0430
+marker.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0443
+marker.list=\u0421\u043f\u0438\u0441\u043e\u043a \u043c\u0435\u0442\u043e\u043a
+marker.first=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0435\u0440\u0432\u043e\u0439 \u043c\u0435\u0442\u043a\u0435
+marker.last=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043c\u0435\u0442\u043a\u0435
+marker.next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0435
+marker.previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0435
+
+export.tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443
+export.score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443
+export.chord-name-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432
+export.chord-diagram-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0445\u0435\u043c\u044b \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432
+
+scale=\u0421\u0442\u0440\u043e\u0439
+scale.list=\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u0435\u0432
+
+text.insert=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442
+text.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0442\u0435\u043a\u0441\u0442\u0430
+text.text=\u0422\u0435\u043a\u0441\u0442
+
+tools=\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b
+tools.scale=\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u043e\u0435\u0432
+tools.browser=\u0411\u0440\u0430\u0443\u0437\u0435\u0440
+tools.plugins=\u0414\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f
+tools.shortcuts=\u041a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448
+tools.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+
+browser.dialog=\u0411\u0440\u0430\u0443\u0437\u0435\u0440
+browser.menu.file=\u0424\u0430\u0439\u043b
+browser.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c
+browser.exit=\u0412\u044b\u0445\u043e\u0434
+browser.menu.collection=\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f
+browser.menu.go=\u041f\u0435\u0440\u0435\u0439\u0442\u0438
+browser.collection.select=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044e
+browser.collection.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c
+browser.collection.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c
+browser.collection.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c
+browser.collection.new=\u041d\u043e\u0432\u044b\u0439
+browser.go-root=\u0414\u043e\u043c\u043e\u0439
+browser.go-back=\u041d\u0430\u0437\u0430\u0434
+browser.refresh=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c
+browser.factory.fs.name=\u0424\u0430\u0439\u043b\u043e\u0432\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430
+browser.collection.fs.name=\u0418\u043c\u044f
+browser.collection.fs.path=\u0414\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044f
+browser.collection.fs.editor-title=\u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u043d\u0430 \u0424\u0421
+browser.collection.fs.editor-tip=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0441 \u0412\u0430\u0448\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0435\u0439
+browser.collection.fs.invalid-path=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u0432\u0435\u0440\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e
+
+midi.port=MIDI \u043f\u043e\u0440\u0442
+midi.sequencer=MIDI \u0441\u0438\u043d\u0442\u0435\u0437\u0430\u0442\u043e\u0440
+
+plugin.unknown-value=\u041d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d
+plugin.column.name=\u0418\u043c\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f
+plugin.column.enabled=\u0412\u043a\u043b\u044e\u0447\u0435\u043d\u043e
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=\u0424\u0430\u0439\u043b
+edit.items=\u041f\u0440\u0430\u0432\u043a\u0430
+property.items=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430
+track.items=\u0422\u0440\u0435\u043a
+duration.items=\u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+note.items=\u041d\u043e\u0442\u0430
+composition.items=\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u044f
+repeat.items=\u041f\u043e\u0432\u0442\u043e\u0440
+transport.items=\u041f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c
+marker.items=\u041c\u0435\u0442\u043a\u0438
+insert.items=\u0412\u0441\u0442\u0430\u0432\u043a\u0430
+layout.items=\u0424\u043e\u0440\u043c\u0430\u0442
+view.items=\u0412\u0438\u0434
+effect.items=\u042d\u0444\u0444\u0435\u043a\u0442\u044b
+dynamic.items=\u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=\u041d\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b
+action.file.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b
+action.file.open-url=\u041e\u0442\u043a\u0440\u044b\u0442\u044c URL
+action.file.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c
+action.file.save-as=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a
+action.file.print=\u041f\u0435\u0447\u0430\u0442\u044c
+action.file.print-preview=\u041f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440
+action.file.exit=\u0412\u044b\u0439\u0442\u0438 \u0438\u0437 TuxGuitar
+action.edit.undo=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c
+action.edit.redo=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c
+action.composition.change-time-signature=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438
+action.composition.change-tempo=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043c\u043f
+action.composition.change-info=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043c\u0435\u043b\u043e\u0434\u0438\u0438
+action.composition.change-clef=Change Clef
+action.composition.change-key-signature=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043e\u0442\u043c\u0435\u0442\u043a\u0443 \u0437\u043d\u0430\u043a\u0430
+action.composition.change-triplet-feel=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a \u0442\u0440\u0438\u043e\u043b\u044f\u043c
+action.view.layout-set-page=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b
+action.view.layout-set-linear=\u041b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442
+action.view.layout-set-multitrack=\u041c\u0443\u043b\u044c\u0442\u0438\u0442\u0440\u0435\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0436\u0438\u043c
+action.view.layout-set-score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443
+action.view.layout-set-tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443
+action.view.layout-set-compact=\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c
+action.view.layout-set-chord-diagram-enabled=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432
+action.view.layout-set-chord-name-enabled=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0430\u043a\u043a\u043e\u0440\u0434\u043e\u0432
+action.view.show-fretboard=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0433\u0438\u0442\u0430\u0440\u043d\u044b\u0439 \u0433\u0440\u0438\u0444
+action.view.show-piano=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043b\u0430\u0432\u0438\u0448\u0438
+action.view.show-matrix=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0430\u0442\u0440\u0438\u0446\u0443
+action.view.show-mixer=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043c\u0438\u043a\u0448\u0435\u0440
+action.view.show-transport=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044c
+action.track.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0440\u0435\u043a
+action.track.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043a
+action.track.clone=\u041a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u043a
+action.track.go-first=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0442\u0440\u0435\u043a\u0443
+action.track.go-last=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u0442\u0440\u0435\u043a\u0443
+action.track.go-next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0442\u0440\u0435\u043a\u0443
+action.track.go-previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0442\u0440\u0435\u043a\u0443
+action.track.lyrics=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0440\u0438\u043a\u0443 \u0442\u0440\u0435\u043a\u0430
+action.track.properties=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0442\u0440\u0435\u043a\u0430
+action.track.move-down=\u041d\u0438\u0436\u0435
+action.track.move-up=\u0412\u044b\u0448\u0435
+action.measure.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442
+action.measure.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0430\u043a\u0442
+action.measure.copy=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0442
+action.measure.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0430\u043a\u0442
+action.measure.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0442\u0430\u043a\u0442
+action.measure.go-first=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0435\u0440\u0432\u044b\u0439 \u0442\u0430\u043a\u0442\u0443
+action.measure.go-last=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0443
+action.measure.go-next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0443
+action.measure.go-previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c\u0443 \u0442\u0430\u043a\u0442\u0443
+action.note.general.clean-beat=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0440\u0438\u0442\u043c
+action.note.general.decrement-semitone=\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0442\u043e\u043d
+action.note.general.increment-semitone=\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u043e\u043b\u0443\u0442\u043e\u043d
+action.note.general.shift-down=\u0421\u0434\u0432\u0438\u0433 \u0432\u043d\u0438\u0437
+action.note.general.shift-up=\u0421\u0434\u0432\u0438\u0433 \u0432\u0432\u0435\u0440\u0445
+action.note.general.tied=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043b\u0438\u0433\u0443
+action.note.duration.set-whole=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0446\u0435\u043b\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+action.note.duration.set-half=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+action.note.duration.set-quarter=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u043d\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+action.note.duration.set-eighth=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0432\u043e\u0441\u044c\u043c\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+action.note.duration.set-sixteenth=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0448\u0435\u0441\u0442\u043d\u0430\u0434\u0446\u0430\u0442\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+action.note.duration.set-thirty-second=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0440\u0438\u0434\u0446\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+action.note.duration.set-sixty-fourth=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0448\u0435\u0441\u0442\u044c\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0443\u044e \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+action.note.duration.change-dotted=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u043e\u0447\u043a\u0443
+action.note.duration.change-double-dotted=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0434\u0432\u043e\u0439\u043d\u0443\u044e \u0442\u043e\u0447\u043a\u0443
+action.note.duration.change-division-type=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0443\u043f\u043b\u0435\u0442\u043e
+action.note.duration.decrement-duration=\u0423\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+action.note.duration.increment-duration=\u0423\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c
+action.note.effect.change-vibrato=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0438\u0431\u0440\u0430\u0442\u043e
+action.note.effect.change-bend=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u044d\u043d\u0434
+action.note.effect.change-slide=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043b\u0430\u0439\u0434
+action.note.effect.change-hammer=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c hammer-on/pull-off
+action.note.effect.change-accentuated=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
+action.note.effect.change-=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u0443\u044e \u043d\u043e\u0442\u0443
+action.note.effect.change-fade-in=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e\u0435 \u043d\u0430\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435 \u0437\u0432\u0443\u043a\u0430
+action.note.effect.change-ghost=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u043e\u0442\u0443-\u043f\u0440\u0438\u0437\u0440\u0430\u043a\u0430
+action.note.effect.change-grace=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043f\u043b\u0430\u0432\u043d\u0443\u044e \u043d\u043e\u0442\u0443
+action.note.effect.change-harmonic=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0433\u0430\u0440\u043c\u043e\u043d\u0438\u043a\u0443
+action.note.effect.change-heavy-accentuated=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0438\u043b\u044c\u043d\u043e\u0435 \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435
+action.note.effect.change-palm-mute=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0433\u043b\u0443\u0448\u0435\u043d\u0438\u0435 \u043b\u0430\u0434\u043e\u043d\u044c\u044e
+action.note.effect.change-popping=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c popping
+action.note.effect.change-slapping=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043b\u044d\u043f
+action.note.effect.change-staccato=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u0430\u043a\u043a\u0430\u0442\u043e
+action.note.effect.change-tapping=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u044d\u043f\u043f\u0438\u043d\u0433
+action.note.effect.change-tremolo-bar=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043c\u043e\u043b\u043e
+action.note.effect.change-tremolo-picking=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c tremolo picking
+action.note.effect.change-trill=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c/\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0442\u0440\u0435\u043b\u044c
+action.insert.open-repeat=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440
+action.insert.close-repeat=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440
+action.insert.repeat-alternative=Repeat Alternative
+action.insert.chord=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u043a\u043a\u043e\u0440\u0434
+action.insert.text=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442
+action.marker.add=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043c\u0435\u0442\u043a\u0443
+action.marker.go-next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0435
+action.marker.go-previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u043c\u0435\u0442\u043a\u0435
+action.transport.play=\u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c \u043c\u0435\u043b\u043e\u0434\u0438\u044e
+action.transport.stop=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u043d\u0438\u0435
+action.transport.mode=\u0420\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0442\u0435\u043b\u044f
+action.transport.metronome=\u041c\u0435\u0442\u0440\u043e\u043d\u043e\u043c
+action.tools.browser=\u0411\u0440\u0430\u0443\u0437\u0435\u0440
+action.settings.configure=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438
+action.help.doc=\u041f\u043e\u043c\u043e\u0449\u044c
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_sr.properties b/TuxGuitar-testing/platform-all/share/lang/messages_sr.properties
new file mode 100644
index 0000000..2046a33
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_sr.properties
@@ -0,0 +1,618 @@
+ok=Ok
+cancel=Otka\u017ei
+yes=Da
+no=Ne
+add=Dodaj
+edit=Obrada
+remove=Ukloni
+save=Snimi
+exit=Izlaz
+choose=Biraj
+color=Boja
+title=Naslov
+go=Idi
+warning=Upozorenje
+error=gre\u0161ka
+plugins=Plugini
+options=Opcije
+defaults=Default
+clean=O\u010disti
+rename=Promeni ime
+fret=Prag
+position=Pozicija
+info=Info
+name=Naziv
+author=Autor
+version=Verzija
+description=Opis
+configure=Konfiguri\u0161i
+close=Zatvori
+
+tuxguitar.title=Tux-Guitar
+
+file=Datoteka
+file.new=Nova
+file.open=Otvori
+file.open-url=Otvori URL
+file.open.error=Ne mogu da otvorim: {0}
+file.save=Snimi
+file.save-as=Snimi kao
+file.save.error=Ne mogu da snimim: {0}
+file.save-changes-question=Izmene koje ste izvr\u0161ili nisu snimljene.\n\u017delite li da ih snimite?
+file.exit=Iza\u0111i
+file.export=Eksportuj
+file.export-midi=Midi eksport
+file.export-pdf=PDF eksport
+file.print=\u0160tampaj
+file.print-preview=Pregled pre \u0161tampe
+file.import=Import
+file.import.error=Ne mogu da importujem: {0}
+file.import-midi=Midi import
+file.export-ascii=Snimi kao tekst
+file.export.error=Ne mogu da eksportujem: {0}
+file.history=Istorija
+file.overwrite-question=Navedena datoteka ve\u0107 postoji, da li \u017eelite da je prepi\u0161ete??
+
+edit.menu=Obrada
+edit.undo=Undo
+edit.redo=Redo
+edit.copy=Kopiraj
+edit.from=Od
+edit.to=Do
+edit.all-tracks=Sve staze
+edit.paste=Zalepi
+edit.paste.replace-mode=Zalepi u teku\u0107i takt
+edit.paste.insert-mode=Zalepi u novi takt
+edit.delete=Obri\u0161i
+edit.cut=Izre\u017ei
+edit.mouse-mode-selection=Re\u017eim selekcije
+edit.mouse-mode-edition=Re\u017eim prepravljanja
+edit.not-natural-key=Re\u017eim povisilica-snizilica
+
+view=Pregled
+
+view.layout=Izgled
+view.layout.page=Pregled strane
+view.layout.linear=Pregled u liniji
+view.layout.multitrack=Vi\u0161e instrumenata
+view.layout.compact=Kompaktan prikaz
+view.layout.chord-style=Prikaz akorda
+view.layout.chord-name=Naziv akorda
+view.layout.chord-diagram=Dijagram akorda
+view.layout.tablature-enabled=Prika\u017ei tablaturu
+view.layout.score-enabled=Prika\u017ei note
+
+view.show-transport=Prika\u017ei navigator
+view.show-matrix=Prika\u017ei Matricu
+view.show-mixer=Prika\u017ei mikser
+view.show-fretboard=Prika\u017ei gitaru
+view.show-piano=Prika\u017ei klavir
+
+fretboard.right-mode=Desnoruka
+fretboard.left-mode=Levoruka
+fretboard.background-color=Boja pozadine
+fretboard.display-note-text=Tekst prikaza note
+fretboard.display-scale-text=Tekst prikaza skale
+fretboard.font=Font
+fretboard.fretpoint-color=Boja praga
+fretboard.note-color=Boja note
+fretboard.scale-note-color=Boja skale
+fretboard.settings=Pode\u0161avanje prikaza gitare
+fretboard.string-color=Boja \u017eice
+fretboard.settings.options=Opcije
+
+piano.natural-key-color=Boja belih dirki
+piano.not-natural-key-color=Boja crnih dirki
+piano.note-color=Boja note
+piano.scale-note-color=Boja skale
+piano.settings=Pode\u0161avanje klavira
+
+matrix.editor=Editor Matrice
+matrix.grids=Broj separatora
+matrix.border-color=Boja ivice
+matrix.font=Font
+matrix.foreground-color=Boja radne povr\u0161ine
+matrix.line-color-1=Boja linije 1
+matrix.line-color-2=Boja linije 2
+matrix.line-color-over=Boja teku\u0107eg instrumenta
+matrix.note-color=Boja note
+matrix.play-note-color=Boja teku\u0107e note
+matrix.position-color=Boja pozicije
+matrix.settings=Podesi izgled Matrice
+
+transport=Pesma
+transport.start=Sviraj
+transport.stop=Zaustavi
+transport.first=Prvi
+transport.last=Poslednji
+transport.previous=Prethodni
+transport.next=Slede\u0107i
+transport.pause=Pauza
+transport.mode=Re\u017eim pu\u0161tanja
+transport.mode.simple=Pusti celu pesmu
+transport.mode.simple.tempo-percent=Brzina pu\u0161tanja
+transport.mode.simple.loop=Pu\u0161taj pesmu u krug
+transport.mode.trainer=Trening brzine
+transport.mode.trainer.increment-description=Ubrzavaj svaki takt
+
+
+composition=Kompozicija
+composition.timesignature=Vrsta takta
+composition.timesignature.Numerator=Brojilac takta
+composition.timesignature.denominator=Imenilac takta
+composition.timesignature.to-the-end=Do kraja
+composition.tempo=Tempo
+composition.tempo-percent=U procentima
+composition.properties=Informacije o pesmi
+composition.name=Naziv
+composition.artist=Interpretacija
+composition.album=Album
+composition.author=Autor
+composition.tempo.invalid=Pogre\u0161an tempo
+composition.tripletfeel=Utisak tripleta
+
+help=Pomo\u0107
+help.help=Pomo\u0107
+help.about=TuxGuitar
+help.doc=Dokumentacija
+
+instruments.volume=Volume
+instrument.volume=Volume
+instrument.channel=Kanal
+instrument.effect-channel=Ef.kanal
+instrument.balance=Levo-desno
+instrument.free=slobodan
+instrument.link=povezan
+
+track=Staza
+track.number=Br.
+track.name=Naziv
+track.color=Boja
+track.first=Prva staza
+track.last=Poslednja staza
+track.previous=Prethodna staza
+track.next=Slede\u0107a staza
+track.add=Dodaj stazu
+track.remove=Ukloni stazu
+track.instrument=Instrument
+track.instrument.empty=Nije prona\u0111en MIDI soundbank, probajte da opet kompajlirate tuxguitar u va\u0161oj verziji jave.
+track.properties=Osobine
+track.properties.general=Osnovno
+track.name.default-percussion-name=Bubnjevi i perkusije
+track.lyrics=Tekst na stazi
+track.solo=Solo
+track.mute=Isklju\u010di
+
+lyric.editor=Pisanje stihova
+
+measure=Takt
+measure.first=Prvi takt
+measure.last=Poslednji takt
+measure.previous=Prethodni takt
+measure.next=Sledeci takt
+measure.add=Dodaj takt
+measure.add-before-current-position=Dodaj takt pre teku\u0107e pozicije
+measure.add-after-current-position=Dodaj takt posle teku\u0107e pozicije
+measure.add-at-end=Dodaj takt na kraj
+measure.remove=Obri\u0161i takt
+measure.copy=Kopiraj takt
+measure.paste=Zalepi takt
+measure.clean=Obri\u0161i sve iz takta
+
+duration=Trajanje
+duration.whole=Cela
+duration.half=Polovina
+duration.quarter=\u010cetvrtina
+duration.eighth=Osmina
+duration.sixteenth=\u0160esnaestina
+duration.thirtysecond=Trideset-dvojka
+duration.sixtyfourth=\u0160esdeset-\u010detvrtina
+duration.dotted=Sa ta\u010dkom
+duration.doubledotted=Sa dve ta\u010dke
+duration.division-type=Triplet
+
+dynamic=Dinamika
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Efekti
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Mrtva nota
+effects.slide=Slajd
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo ru\u010dka
+effects.tremolo-bar-editor=Tremolo Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release up
+effects.tremolo-bar.release-down=Release down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Tiha nota
+effects.accentuatednote=Nagla\u0161ena nota
+effects.heavyaccentuatednote=Veoma nagla\u0161ena nota
+effects.harmonic=Harmonik
+effects.grace=Gratis nota
+effects.grace-editor=Editor Gratis Note
+effects.grace.before-beat=Pre udarca
+effects.grace.on-beat=Tokom udarca
+effects.grace.transition=Vrsta
+effects.grace.transition-none=Obi\u010dna
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slajd
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Trill Editor
+effects.tremolo-picking=Tremolo trzanje
+effects.tremolo-picking-editor=Editor Tremolo Trzanja
+effects.palm-mute=Palm Mute
+effects.staccato=Odse\u010dno (staccato)
+effects.tapping=Taping
+effects.slapping=Slep (bas)
+effects.popping=Pop (bas)
+effects.fade-in=Fade in
+effects.harmonic-editor=Editor Harmonika
+effects.harmonic.type-of-harmonic=Tip harmonika
+effects.harmonic.natural=Prirodni harmonik
+effects.harmonic.artificial=Ve\u0161ta\u010dki harmonik
+effects.harmonic.artificial.key-offset=Ton razlika
+effects.harmonic.tapped=Taping harmonik
+effects.harmonic.tapped.left-hand=Leva ruka
+effects.harmonic.tapped.right-hand=Desna ruka
+effects.harmonic.pinch=Pinch harmonik
+effects.harmonic.semi=Polu-harmonik
+
+bend.editor=Bend Editor
+bend.bend=Bend
+bend.bend-release=bend/release
+bend.bend-release-bend=bend/release/bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+repeat.open=Otvori ponavljanje
+repeat.close=Zatvori ponavljanje
+repetitions=Ponavljanja
+repeat.number-of-repetitions=Broj ponavljanja
+repeat.alternative=Alternativni zavr\u0161eci
+repeat.alternative.editor=Defini\u0161i alternativne zavr\u0161etke
+
+beat=Nota
+beat.clean=O\u010disti notu
+
+note.semitone-up=Poluton vi\u0161lje
+note.semitone-down=Poluton ni\u017ee
+note.shift-up=Na \u017eicu gore
+note.shift-down=Na \u017eicu dole
+note.tiednote=Ligatura
+note.deadnote=Mrtva nota
+
+insert.chord=Ubaci akord
+chord.editor=Editor akorda
+chord=Akord
+chord.name=Naziv akorda
+chord.custom.name-empty-error=Naziv akorda ne mo\u017ee biti prazan.
+chord.custom.name-exist-error=Naziv akorda vec postoji.
+chord.bass=Bas
+chord.custom=Podesi parametre
+chord.settings.tip=Custom Settings
+chord.settings.type=Tip
+chord.settings.type.most-common=Obi\u010dni
+chord.settings.type.inversions=Inverzije
+chord.settings.type.close-voiced=Blok akordi
+chord.settings.type.open-voiced="Voicing"
+chord.settings.open-chords=Otvoreni akordi
+chord.settings.chords-to-display=Filtriraj koliko akorda
+chord.settings.search-frets=Pretra\u017euj pragove
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+
+instrument=Instrument
+instrument.instrument=Instrument
+instrument.percussion-track=Staza za perkusije
+
+tuning=Stim
+tuning.strings=Broj \u017eica
+tuning.offset=Pomeraj \u0161tima (u polutonovima)
+
+language=Jezik
+
+choose-color=Izaberite boju
+
+
+settings=Pode\u0161avanja
+settings.config=TuxGuitar konfiguracija
+settings.config.view=Pregled
+settings.config.view.mode=Na\u010din pregleda
+settings.config.view.size=Veli\u010dina prozora
+settings.config.view.size.maximized=Preko celog ekrana
+settings.config.view.size.width=\u0160irina
+settings.config.view.size.height=Visina
+settings.config.language=Jezik
+settings.config.language.choose=Izaberite jezik
+settings.config.styles=Izgled
+settings.config.styles.font.default=Glavni font
+settings.config.styles.font.note=Font za note
+settings.config.styles.font.time-signature=Font za oznaku takta
+settings.config.styles.font.printer-default=Font za \u0161tampanje
+settings.config.styles.font.printer-note=Font za \u0161tampanje nota
+settings.config.styles.font.printer-time-signature=Font za \u0161tampanje oznake takta
+settings.config.styles.color.score-note=Boja nota
+settings.config.styles.color.tab-note=Boja tablatura
+settings.config.styles.color.play-note=Boja sviraju\u0107e note
+settings.config.styles.general=Stilovi prikaza
+settings.config.styles.printer=Stilovi \u0161tampanja
+settings.config.styles.font.lyric=Font za tekst pesme
+settings.config.styles.font.text=Font za tekst
+settings.config.apply-changes-question=Da li \u017eelite da primenite na\u010dinjene promene?
+settings.config.sound=Zvuk
+settings.config.sound.soundbank=Soundbank (Banka zvukova)
+settings.config.sound.default-soundbank=Koristi default Soundbank
+settings.config.sound.custom-soundbank=Navedi drugi Soundbank
+settings.config.sound.soundbank-restart-message=Morate restartovati TuxGuitar da bi se promenio Soundbank
+settings.config.main=Program
+settings.config.main.window-title=Naslov aplikacije
+settings.config.main.window-title.help=Slede\u0107e promenljive su na raspolaganju:
+settings.config.main.window-title.var.description.appname=Predstavlja naziv aplikacije: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Predstavlja trenutnu verziju TuxGuitar
+settings.config.main.window-title.var.description.filename=Predstavlja naziv otvorene datoteke
+settings.config.main.window-title.var.description.filepath=Predstavlja putanju do otvorene datoteke
+settings.config.main.window-title.var.description.songname=Predstavlja naziv teku\u0107e pesme
+settings.config.main.window-title.var.description.songauthor=Predstavlja autora teku\u0107e pesme
+settings.config.main.window-title.var.description.songalbum=Predstavlja album teku\u0107e pesme
+settings.config.main.window-title.var.description.songartist=Predstavlja interpretatora teku\u0107e pesme
+settings.config.main.table.auto-size.enabled=Uklju\u010di automatsku veli\u010dinu tabele
+settings.config.main.options=Opcije
+settings.config.main.splash-enabled=Prika\u017ei uvodni ekran prilikom pokretanja
+settings.config.styles.color.lines=Boja horizontalnih linija
+settings.config.toolbars=Toolbar
+settings.config.toolbars.tip=Preuredite Toolbar
+settings.config.toolbars.list=Dostupni Toolbar-ovi
+settings.config.toolbars.move-up=Pomeri gore
+settings.config.toolbars.move-down=Pomeri dole
+settings.config.skin=Skinovi
+settings.config.skin.choose=Izaberite skin
+
+
+soundbank.error=Soundbank gre\u0161ka
+soundbank.error.unavailable=Soundbank (banka zvukova) nije dostupna.
+soundbank.error.custom=Gre\u0161ka prilikom otvaranja navedenog soundbank-a (banke zvukova).
+
+settings.keybindings=Pre\u010dice na tastaturi
+key-bindings-editor=Editor Pre\u010dica
+key-bindings-editor-action-select=Izaberi akciju
+key-bindings-editor-action-column=Akcije
+key-bindings-editor-shortcut-column=Tastatura
+key-bindings-editor-push-a-key=Kombinacija?
+key-bindings-editor-save-question=Postoje izmene koje nisu snimljene, izlazite bez snimanja?
+
+key-bindings-editor-override=Pre\u010dica se vec koristi! Da li ste sigurni?
+
+
+
+print.print=\u0160tampanje
+print.dialog=\u0160tampanje
+print.service=Servis
+print.service.name=Naziv
+print.service.status=Status
+print.service.type=Tip
+print.service.info=Info
+print.range=Opseg
+print.range.all-pages=Sve
+print.range.pages=Strane
+print.range.pages-to=Do
+print.copies=Kopije
+print.copies-number=Broj kopija
+print.print-to-file=\u0160tampaj u datoteku
+print.file-chooser=Izaberi
+print-header.default-song-name=Nema_ime
+print-header.default-song-author=Anoniman
+print.preview=Pregled pre \u0161tampe
+
+composition.clef=Klju\u010d
+composition.clef.treble=Violinski
+composition.clef.bass=Bas
+composition.clef.tenor=Tenor
+composition.clef.alto=Alt
+composition.clef.to-the-end=Primeni klju\u010d na kraj pesme
+
+composition.keysignature=Tonalitet
+composition.keysignature.natural=Prirodni (C-dur)
+composition.keysignature.sharp-1=1 povisilica
+composition.keysignature.sharp-2=2 povisilice
+composition.keysignature.sharp-3=3 povisilice
+composition.keysignature.sharp-4=4 povisilice
+composition.keysignature.sharp-5=5 povisilica
+composition.keysignature.sharp-6=6 povisilica
+composition.keysignature.sharp-7=7 povisilica
+composition.keysignature.flat-1=1 snizilica
+composition.keysignature.flat-2=2 snizilice
+composition.keysignature.flat-3=3 snizilice
+composition.keysignature.flat-4=4 snizilice
+composition.keysignature.flat-5=5 snizilica
+composition.keysignature.flat-6=6 snizilica
+composition.keysignature.flat-7=7 snizilica
+composition.keysignature.to-the-end=Primeni skalu na poslednji takt
+composition.tripletfeel=Utisak tripleta
+composition.tripletfeel.none=Bez utiska tripleta
+composition.tripletfeel.eighth=Triplet osmina
+composition.tripletfeel.sixteenth=Triplet \u0161esnaestina
+composition.tripletfeel.to-the-end=Primeni utisak tripleta na kraj
+
+track.clone=Kloniraj stazu
+track.move-up=Pomeri gore
+track.move-down=Pomeri dole
+
+marker=Marker
+marker.add=Dodaj marker
+marker.list=Prika\u017ei markere
+marker.first=Idi na prvi marker
+marker.last=Idi na poslednji marker
+marker.next=Idi na slede\u0107i marker
+marker.previous=Idi na prethodni marker
+
+export.tablature-enabled=Uvrsti tablaturu
+export.score-enabled=Uvrsti note
+
+scale=Skale
+scale.list=Lista skala
+
+text.insert=Ubaci tekst
+
+tools=Alati
+tools.scale=Spisak skala
+tools.browser=Browser
+tools.plugins=Plugin-ovi
+tools.shortcuts=Pre\u010dice
+tools.settings=Pode\u0161avanja
+
+browser.dialog=Browser
+browser.menu.file=Fajl
+browser.open=Otvori
+browser.exit=Iza\u0111i
+browser.menu.collection=Kolekcija
+browser.menu.location=Lokacija
+browser.menu.go=Po\u010dni
+browser.collection.select=Izaberi kolekciju
+browser.collection.fs.editor-title=Kolekcija sa lokalnog diska
+browser.collection.fs.editor-tip=Izaberite folder u kom se nalazi kolekcija.
+browser.collection.fs.invalid-path=Izabrani folder ne postoji.
+browser.location.select=Izaberi lokaciju
+browser.location.open=Otvori
+browser.location.remove=Obri\u0161i
+browser.location.close=Zatvori
+browser.location.new=Nova
+browser.go-root=Po\u010detna
+browser.go-back=Nazad
+browser.refresh=Osve\u017ei
+
+midi.port=Midi Port
+midi.sequencer=Midi Sekvencer
+
+plugin.unknown-value=Nije dostupan.
+plugin.column.name=Nazi plugina
+plugin.column.enabled=Uklju\u010den
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Datoteka komande
+edit.items=Obrade komande
+property.items=Osobina komande
+track.items=Staze komande
+duration.items=Du\u017eine nota komande
+beat.items=Nota komande
+composition.items=Kompozicije komande
+repeat.items=Ponavljanja komande
+transport.items=Pesme komande
+marker.items=Markera komande
+insert.items=Ubacivanja komande
+layout.items=Pregleda komande
+view.items=Izgleda komande
+effect.items=Efekata komande
+dynamic.items=Dinamike komande
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Nova datoteka
+action.file.open=Otvori datoteku
+action.file.open-url=Otvori URL
+action.file.save=Snimi
+action.file.save-as=Snimi kao
+action.file.print=\u0160tampaj
+action.file.print-preview=Pregled pre \u0161tampe
+action.edit.undo=Undo
+action.edit.redo=Redo
+action.composition.change-time-signature=Promeni vrstu takta
+action.composition.change-tempo=Promeni tempo
+action.composition.change-info=Promeni informacije o pesmi
+action.composition.change-clef=Promeni klju\u010d
+action.composition.change-key-signature=Promeni tonalitet
+action.composition.change-triplet-feel=Promeni Utisak tripleta
+action.view.layout-set-page=Pregled strane
+action.view.layout-set-linear=Pregled u liniji
+action.view.layout-set-multitrack=Vi\u0161e instrumenata
+action.view.layout-set-score-enabled=Prika\u017ei note
+action.view.show-fretboard=Prika\u017ei gitaru
+action.view.show-piano=Prika\u017ei klavir
+action.view.show-mixer=Prika\u017ei mikser
+action.view.show-transport=Prika\u017ei navigator
+action.view.show-matrix=Prika\u017ei Matricu
+action.view.layout-set-chord-diagram-enabled=Prika\u017ei dijagram akorda
+action.view.layout-set-chord-name-enabled=Prika\u017ei naziv akorda
+action.view.layout-set-compact=Kompaktan prikaz
+action.view.layout-set-tablature-enabled=Prika\u017ei tablaturu
+action.track.add=Dodaj stazu
+action.track.remove=Obri\u0161i stazu
+action.track.clone=Kloniraj stazu
+action.track.go-first=Idi na prvu stazu
+action.track.go-last=Idi na poslednju stazu
+action.track.go-next=Idi na sledecu stazu
+action.track.go-previous=Idi na prethodnu stazu
+action.track.lyrics=Napisi tekst iznad staze
+action.track.properties=Promeni osobine staze
+action.track.move-down=Pomeri dole
+action.track.move-up=Pomeri gore
+action.measure.add=Dodaj takt
+action.measure.remove=Obri\u0161i takt
+action.measure.copy=Kopiraj takt
+action.measure.paste=Zalepi takt
+action.measure.clean=Obri\u0161i sve iz takta
+action.measure.go-first=Idi na prvi takt
+action.measure.go-last=Idi na poslednji takt
+action.measure.go-next=Idi na slede\u0107i takt
+action.measure.go-previous=Idi na prethodni takt
+action.note.general.clean-beat=Obri\u0161i notu
+action.note.general.decrement-semitone=Poluton ni\u017ee
+action.note.general.increment-semitone=Poluton vi\u0161lje
+action.note.general.shift-down=Na \u017eicu gore
+action.note.general.shift-up=Na \u017eicu dole
+action.note.general.tied=Dodaj/ukloni ligaturu
+action.note.duration.change-dotted=Dodaj/ukloni ta\u010dku
+action.note.duration.change-double-dotted=Dodaj/ukloni duplu ta\u010dku
+action.note.duration.change-division-type=Dodaj/ukloni triplet
+action.note.duration.set-whole=Trajanje note: cela nota
+action.note.duration.set-half=Trajanje note: polovina
+action.note.duration.set-quarter=Trajanje note: \u010detvrtina
+action.note.duration.set-eighth=Trajanje note: osmina
+action.note.duration.set-sixteenth=Trajanje note: \u0161esnaestina
+action.note.duration.set-thirty-second=Trajanje note: trideset-dvojka
+action.note.duration.set-sixty-fourth=Trajanje note: \u0161esdeset-\u010detvorka
+action.note.duration.decrement-duration=Prepolovi trajanje
+action.note.duration.increment-duration=Udvostru\u010di trajanje
+action.note.effect.change-vibrato=Dodaj/ukloni vibrato
+action.note.effect.change-bend=Dodaj/ukloni bend
+action.note.effect.change-slide=Dodaj/ukloni slajd
+action.note.effect.change-hammer=Dodaj/ukloni hammer-on/pull-off
+action.note.effect.change-accentuated=Dodaj/ukloni nagla\u0161avanje
+action.note.effect.change-dead=Dodaj/ukloni mrtvu notu
+action.note.effect.change-fade-in=Dodaj/ukloni fade in
+action.note.effect.change-ghost=Dodaj/ukloni tihu notu
+action.note.effect.change-grace=Dodaj/ukloni gratis notu
+action.note.effect.change-harmonic=Dodaj/ukloni harmonik
+action.note.effect.change-heavy-accentuated=Dodaj/ukloni jako nagla\u0161avanje
+action.note.effect.change-palm-mute=Dodaj/ukloni palm mute
+action.note.effect.change-popping=Dodaj/ukloni poping
+action.note.effect.change-slapping=Dodaj/ukloni sleping
+action.note.effect.change-staccato=Dodaj/ukloni odse\u010dnu notu
+action.note.effect.change-tapping=Dodaj/ukloni taping
+action.note.effect.change-tremolo-bar=Dodaj/ukloni tremolo ru\u010dku
+action.note.effect.change-tremolo-picking=Dodaj/ukloni tremolo trzanje
+action.note.effect.change-trill=Dodaj/ukloni trill
+action.insert.open-repeat=Otvori ponavljanje
+action.insert.close-repeat=Zatvori ponavljanje
+action.insert.text=Ubaci tekst
+action.insert.repeat-alternative=Alternativni zavr\u0161etak
+action.insert.chord=Ubaci akord
+action.transport.play=Sviraj pesmu
+action.transport.stop=Zaustavi pesmu
+action.transport.metronome=Metrononom
+action.transport.mode=Mod
+action.tools.browser=Browser
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_sv.properties b/TuxGuitar-testing/platform-all/share/lang/messages_sv.properties
new file mode 100644
index 0000000..4c46cd8
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_sv.properties
@@ -0,0 +1,692 @@
+# Swedish translation for TuxGuitar. 
+# Copyright (C) 2008-2009 Free Software Foundation, Inc.
+# This file is distributed under the same license as the TuxGuitar software.
+# John Gustafsson <jamminjohn at users.sourceforge.net>, 2008-2009.
+#
+
+ok=Ok
+cancel=Avbryt
+yes=Ja
+no=Nej
+add=L\u00e4gg till
+edit=\u00c4ndra
+remove=Ta bort
+save=Spara
+exit=Avsluta
+close=St\u00e4ng
+choose=V\u00e4lj
+color=F\u00e4rg
+title=Titel
+go=G\u00e5
+warning=Varning
+error=fel
+plugins=Insticksmoduler
+options=Alternativ
+defaults=Standardv\u00e4rden
+clean=Rensa
+rename=Byt namn
+fret=Band
+position=Position
+name=Namn
+author=Upphovsman
+version=Version
+description=Beskrivning
+info=Info
+configure=Konfigurera
+url=URL
+
+file=Arkiv
+file.new=Ny
+file.open=\u00d6ppna
+file.save=Spara
+file.save-as=Spara som
+file.save-changes-question=S\u00e5ngen har osparade \u00e4ndringar.\nVill du spara \u00e4ndringarna?
+file.exit=Avsluta
+file.export=Exportera
+file.export-midi=Exportera MIDI
+file.export-pdf=Exportera PDF
+file.print=Skriv ut
+file.print-preview=F\u00f6rhandsgranska utskrift
+file.import=Importera
+file.import-midi=Importera MIDI
+file.export-ascii=Exportera ASCII
+file.history=Tidigare
+file.open-url=\u00d6ppna webbadress
+file.open.error=Kan inte \u00f6ppna: {0}
+file.save.error=Kan inte spara: {0}
+file.import.error=Kan inte importera: {0}
+file.export.error=Kan inte exportera: {0}
+file.overwrite-question=Denna fil finns redan. Vill du skriva \u00f6ver den?
+
+edit.menu=Redigera
+edit.undo=\u00c5ngra
+edit.redo=G\u00f6r om
+edit.copy=Kopiera
+edit.from=Fr\u00e5n
+edit.to=Till
+edit.all-tracks=Alla sp\u00e5r
+edit.paste=Klistra in
+edit.paste.count=Klistra in r\u00e4knande
+edit.paste.replace-mode=Klistra in vid aktuell takt
+edit.paste.insert-mode=Klistra in i ny takt
+edit.delete=Ta bort
+edit.cut=Klipp ut
+edit.mouse-mode-selection=Markeringsl\u00e4ge
+edit.mouse-mode-edition=Partiturredigeringsl\u00e4ge
+edit.not-natural-key=H\u00f6jnings/S\u00e4nkningsl\u00e4ge
+edit.voice-1=V\u00e4lj st\u00e4mma 1
+edit.voice-2=V\u00e4lj st\u00e4mma 2
+
+view=Visa
+view.layout=Layout
+view.layout.page=Sidlayout
+view.layout.linear=Linj\u00e4r layout
+view.layout.compact=Kompakt
+view.layout.multitrack=Flera sp\u00e5r
+view.layout.chord-style=Ackordutseende
+view.layout.chord-name=Ackordnamn
+view.layout.chord-diagram=Ackorddiagram
+view.layout.score-enabled=Visa partitur
+view.layout.tablature-enabled=Visa tabulatur
+view.show-mixer=Visa mixer
+view.show-fretboard=Visa greppbr\u00e4da
+view.show-piano=Visa klaviatur
+view.show-matrix=Visa matris
+view.show-transport=Visa spelare
+
+fretboard.direction=Riktning
+fretboard.right-mode=H\u00f6gerh\u00e4nt l\u00e4ge
+fretboard.left-mode=V\u00e4nsterh\u00e4nt l\u00e4ge
+fretboard.background-color=Bakgrundsf\u00e4rg
+fretboard.display-note-text=Visa nottext
+fretboard.display-scale-text=Visa skaltext
+fretboard.font=Typsnitt
+fretboard.fretpoint-color=F\u00e4rg p\u00e5 greppband
+fretboard.note-color=Notf\u00e4rg
+fretboard.scale-note-color=F\u00e4rg p\u00e5 not i skala
+fretboard.settings=Inst\u00e4llningar f\u00f6r greppbr\u00e4da
+fretboard.string-color=Str\u00e4ngf\u00e4rg
+fretboard.settings.options=Alternativ
+
+piano.editor=Redigering med klaviatur
+piano.natural-key-color=F\u00e4rg p\u00e5 "vita" tangenter
+piano.not-natural-key-color=F\u00e4rg p\u00e5 "svarta" tangenter
+piano.note-color=Notf\u00e4rg
+piano.scale-note-color=F\u00e4rg p\u00e5 not i skala
+piano.settings=Inst\u00e4llningar f\u00f6r klaviatur
+
+matrix.editor=Redigering med matris
+matrix.grids=Antal rutn\u00e4t
+matrix.border-color=Kantf\u00e4rg
+matrix.font=Typsnitt
+matrix.foreground-color=F\u00f6rgrundsf\u00e4rg
+matrix.line-color-1=Udda raders f\u00e4rg
+matrix.line-color-2=J\u00e4mna raders f\u00e4rg
+matrix.line-color-over=Radf\u00e4rg d\u00e5 muspekaren \u00e4r \u00f6ver
+matrix.note-color=Notf\u00e4rg
+matrix.play-note-color=F\u00e4rg p\u00e5 spelad not
+matrix.position-color=Positionsf\u00e4rg
+matrix.settings=Inst\u00e4llningar f\u00f6r matris
+
+composition=Komposition
+composition.timesignature=Taktartssignatur
+composition.timesignature.Numerator=Antal slag
+composition.timesignature.denominator=Pulsv\u00e4rde
+composition.timesignature.to-the-end=Till slutet
+composition.tempo=Tempo
+composition.tempo-percent=Procent
+composition.tempo.invalid=Ogiltigt tempo
+composition.tempo.start-to-end=Till\u00e4mpa detta tempo i hela s\u00e5ngen
+composition.tempo.position-to-end=Till\u00e4mpa detta tempo till slutet
+composition.tempo.position-to-next=Till\u00e4mpa detta tempo till n\u00e4sta tempomark\u00f6r
+composition.properties=Egenskaper
+composition.name=Namn
+composition.artist=Artist
+composition.album=Album
+composition.author=Upphovsman
+composition.date=Datum
+composition.copyright=Copyright
+composition.writer=Skapare av tabulatur
+composition.transcriber=Transkriberad av
+composition.comments=Kommentarer
+composition.tripletfeel=Triolk\u00e4nsla
+composition.clef=Klav
+composition.clef.treble=Diskant
+composition.clef.bass=Bas
+composition.clef.tenor=Tenor
+composition.clef.alto=Alt
+composition.clef.to-the-end=Till\u00e4mpa denna klaven till slutet
+composition.keysignature=F\u00f6rtecken
+composition.keysignature.natural=Inga
+composition.keysignature.sharp-1=1 h\u00f6jd
+composition.keysignature.sharp-2=2 h\u00f6jda
+composition.keysignature.sharp-3=3 h\u00f6jda
+composition.keysignature.sharp-4=4 h\u00f6jda
+composition.keysignature.sharp-5=5 h\u00f6jda
+composition.keysignature.sharp-6=6 h\u00f6jda
+composition.keysignature.sharp-7=7 h\u00f6jda
+composition.keysignature.flat-1=1 s\u00e4nkt
+composition.keysignature.flat-2=2 s\u00e4nkta
+composition.keysignature.flat-3=3 s\u00e4nkta
+composition.keysignature.flat-4=4 s\u00e4nkta
+composition.keysignature.flat-5=5 s\u00e4nkta
+composition.keysignature.flat-6=6 s\u00e4nkta
+composition.keysignature.flat-7=7 s\u00e4nkta
+composition.keysignature.to-the-end=Till\u00e4mpa dessa f\u00f6rtecken till slutet
+composition.tripletfeel=Triolk\u00e4nsla
+composition.tripletfeel.none=Ingen triolk\u00e4nsla
+composition.tripletfeel.eighth=8-dels trioler
+composition.tripletfeel.sixteenth=16-dels trioler
+composition.tripletfeel.to-the-end=Till\u00e4mpa denna triolk\u00e4nsla till slutet
+
+help=Hj\u00e4lp
+help.help=Hj\u00e4lp
+help.doc=Dokumentation
+help.about=Om
+help.about.license=Licens
+help.about.authors=Upphovsm\u00e4n
+help.about.description=Beskrivning
+
+track=Sp\u00e5r
+track.number=Nr
+track.name=Namn
+track.color=F\u00e4rg
+track.first=F\u00f6rsta sp\u00e5ret
+track.last=Sista sp\u00e5ret
+track.previous=F\u00f6reg\u00e5ende sp\u00e5r
+track.next=N\u00e4sta sp\u00e5r
+track.add=L\u00e4gg till sp\u00e5r
+track.remove=Ta bort sp\u00e5r
+track.clone=Klona sp\u00e5r
+track.move-up=Flytta upp
+track.move-down=Flytta ner
+track.instrument=Instrument
+track.properties=Egenskaper
+track.properties.general=Allm\u00e4nt
+track.name.default-percussion-name=Slagverk
+track.lyrics=S\u00e5ngtext
+track.solo=Solo
+track.mute=Tysta
+
+lyric.editor=Redigering av s\u00e5ngtext
+
+measure=Takt
+measure.first=F\u00f6rsta takten
+measure.last=Sista takten
+measure.previous=F\u00f6reg\u00e5ende takt
+measure.next=N\u00e4sta takt
+measure.add=L\u00e4gg till takt
+measure.add.count=L\u00e4gg till r\u00e4knande
+measure.add-before-current-position=L\u00e4gg till takt innan den aktuella positionen
+measure.add-after-current-position=L\u00e4gg till takt efter den aktuella positionen
+measure.add-at-end=L\u00e4gg till takt i slutet
+measure.remove=Ta bort takt
+measure.copy=Kopiera takt
+measure.paste=Klistra in takt
+measure.clean=Rensa takt
+
+duration=Notv\u00e4rde
+duration.whole=Hel
+duration.half=Halv
+duration.quarter=Fj\u00e4rdedel
+duration.eighth=\u00c5ttondel
+duration.sixteenth=Sextondel
+duration.thirtysecond=Trettioandradel
+duration.sixtyfourth=Sextiofj\u00e4rdedel
+duration.dotted=Punkterad
+duration.doubledotted=Dubbelpunkterad
+duration.division-type=Tuplet
+
+dynamic=Dynamik
+dynamic.piano-pianissimo=Piano pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo piano    
+dynamic.mezzo-forte=Mezzo forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte fortissimo
+
+effects=Effekter
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=D\u00f6d not
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Svajarm
+effects.tremolo-bar-editor=Redigering av svajarm
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release up
+effects.tremolo-bar.release-down=Release down
+effects.tremolo-bar.inverted-dip=Inverted dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Sp\u00f6knot
+effects.accentuatednote=Betonad not
+effects.heavyaccentuatednote=Starkt betonad not
+effects.harmonic=Harmonic
+effects.grace=F\u00f6ranslagsnot
+effects.grace-editor=Redigering av f\u00f6ranslagsnot
+effects.grace.before-beat=F\u00f6re slag
+effects.grace.on-beat=P\u00e5 slag
+effects.grace.transition=\u00d6verg\u00e5ng
+effects.grace.transition-none=Ingen
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Redigering av trill
+effects.tremolo-picking=Tremolo picking
+effects.tremolo-picking-editor=Redigering av tremolo picking
+effects.palm-mute=Palm mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Upptoning
+effects.harmonic-editor=Redigering av harmonic
+effects.harmonic.type-of-harmonic=Typ av harmonic
+effects.harmonic.natural=Natural harmonic
+effects.harmonic.artificial=Artifical harmonic
+effects.harmonic.artificial.key-offset=Ton-offset
+effects.harmonic.tapped=Tapped harmonic
+effects.harmonic.tapped.left-hand=V\u00e4nster hand
+effects.harmonic.tapped.right-hand=H\u00f6ger hand
+effects.harmonic.pinch=Pinch harmonic
+effects.harmonic.semi=Semi harmonic
+
+bend.editor=Redigering av bend
+bend.bend=Bend
+bend.bend-release=Bend/Release
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=Pre-bend
+bend.prebend-release=Pre-bend/Release
+
+transport=Spelare
+transport.start=Spela upp
+transport.stop=Stoppa
+transport.pause=Paus
+transport.first=F\u00f6rsta
+transport.last=Sista
+transport.previous=F\u00f6reg\u00e5ende
+transport.next=N\u00e4sta
+transport.metronome=Metronom
+transport.mode=Uppspelningsl\u00e4ge
+transport.mode.simple=Enkelt uppspelningsl\u00e4ge
+transport.mode.simple.tempo-percent=Tempoprocentandel
+transport.mode.simple.loop=Spela enkel slinga
+transport.mode.trainer=Tr\u00e4ningsl\u00e4ge
+transport.mode.trainer.increment-description=\u00d6ka med
+transport.mode.loop-range=Slingans omf\u00e5ng
+transport.mode.loop-range.from=Spela fr\u00e5n takt
+transport.mode.loop-range.from-default=Fr\u00e5n b\u00f6rjan
+transport.mode.loop-range.to=Spela till takt
+transport.mode.loop-range.to-default=Till slutet
+transport.set-loop-start=S\u00e4tt slingans startpunkt
+transport.set-loop-end=S\u00e4tt slingans slutpunkt
+
+instruments.volume=Volym
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=Volym
+instrument.balance=Balans
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Ledig
+instrument.link=L\u00e4nk
+
+
+repeat.open=\u00d6ppna repris
+repeat.close=St\u00e4ng repris
+repeat.alternative=Alternativa repriser
+repeat.alternative.editor=Redigera alternativa repriser
+repetitions=Repriser
+repeat.number-of-repetitions=Antal repriser
+
+beat=Slag
+beat.clean=Rensa slag
+beat.voice.remove-unused=Ta bort oanv\u00e4nd st\u00e4mma
+beat.voice-up=Notskaft upp\u00e5t
+beat.voice-down=Notskaft ned\u00e5t
+beat.voice-auto=Automatiska notskaft
+beat.stroke=Anslag
+beat.stroke-up=Upp\u00e5tslag
+beat.stroke-down=Ned\u00e5tslag
+beat.move-left=Flytta ett slag \u00e5t v\u00e4nster
+beat.move-right=Flytta ett slag \u00e5t h\u00f6ger
+beat.move-custom=Anpassa flytt av slag
+beat.move-custom.dialog.title=Anpassa flytt
+beat.move-custom.dialog.direction-tip=Flyttriktning
+beat.move-custom.dialog.move-1.tip=Stor flytt
+beat.move-custom.dialog.move-2.tip=Liten flytt
+beat.move-custom.dialog.direction=Riktning
+beat.move-custom.dialog.direction.right=Flytta till h\u00f6ger
+beat.move-custom.dialog.direction.left=Flytta till v\u00e4nster
+beat.move-custom.dialog.count=R\u00e4knande
+beat.move-custom.dialog.duration=Notv\u00e4rde
+beat.move-custom.dialog.duration.type=Punkterad/Dubbelpunkterad
+beat.move-custom.dialog.duration.type.normal=Ingen
+beat.move-custom.dialog.duration.division-type=Typ av uppdelning
+beat.move-custom.dialog.duration.division-type.normal=Vanlig (Tuplet)
+
+note=Not
+note.semitone-up=Halvton upp
+note.semitone-down=Halvton ner
+note.shift-up=Skifta upp\u00e5t
+note.shift-down=Skifta ned\u00e5t
+note.tiednote=Sammanbunden not
+note.deadnote=D\u00f6d not
+
+insert.chord=Infoga ackord
+chord.editor=Redigering av ackord
+chord=Ackord
+chord.name=Namn
+chord.bass=Bas
+chord.custom=Anpassa ackord
+chord.custom.name-empty-error=Ackordnamnet kan inte vara tomt.
+chord.custom.name-exist-error=Ackordnamnet finns redan.
+chord.settings.tip=Anpassa inst\u00e4llningar
+chord.settings.type=Typ
+chord.settings.type.most-common=Vanligaste
+chord.settings.type.inversions=Omv\u00e4ndningar
+chord.settings.type.close-voiced=St\u00e4ngda ljudande
+chord.settings.type.open-voiced=\u00d6ppna ljudande
+chord.settings.open-chords=\u00d6ppna ackord
+chord.settings.chords-to-display=Antal ackord att visa
+chord.settings.search-frets=S\u00f6k band
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+
+instrument=Instrument
+instrument.instrument=Instrument
+instrument.percussion-track=Slagverkssp\u00e5r
+
+tuning=St\u00e4mning
+tuning.offset=Offset
+tuning.strings=Str\u00e4ngar
+tuning.strings.transpose=Transponera p\u00e5verkade noter
+tuning.strings.transpose.try-keep-strings=F\u00f6rs\u00f6k beh\u00e5lla noter p\u00e5 samma str\u00e4ng
+tuning.strings.transpose.apply-to-chords=Transponera ackord
+
+language=Spr\u00e5k
+
+choose-color=V\u00e4lj en f\u00e4rg
+
+settings=Inst\u00e4llningar
+settings.config=Konfigurera TuxGuitar
+settings.config.language=Spr\u00e5k
+settings.config.language.choose=V\u00e4lj ditt spr\u00e5k
+settings.config.styles=Utseende
+settings.config.styles.general=Allm\u00e4nt utseende
+settings.config.styles.printer=Utskriftsutseende
+settings.config.styles.font.default=Standardtypsnitt
+settings.config.styles.font.note=Nottypsnitt
+settings.config.styles.font.lyric=S\u00e5ngtexttypsnitt
+settings.config.styles.font.text=Texttypsnitt
+settings.config.styles.font.time-signature=Taktarttypsnitt
+settings.config.styles.font.printer-default=Standardtypsnitt vid utskrift
+settings.config.styles.font.printer-note=Nottypsnitt vid utskrift
+settings.config.styles.font.printer-time-signature=Taktarttypsnitt vid utskrift
+settings.config.styles.color.score-note=Notf\u00e4rg i partitur
+settings.config.styles.color.tab-note=Notf\u00e4rg i tabulatur
+settings.config.styles.color.play-note=F\u00e4rg p\u00e5 spelad not
+settings.config.apply-changes-question=Vill du verkst\u00e4lla \u00e4ndringarna nu?
+settings.config.sound=Ljud
+settings.config.main=Allm\u00e4nt
+settings.config.main.window-title=F\u00f6nstertitel
+settings.config.main.window-title.help=F\u00f6ljande variabler kommer placeras i f\u00f6nstertiteln:
+settings.config.main.window-title.var.description.appname=Denna variabel representerar programnamnet: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Denna variabel representerar versionen av TuxGuitar
+settings.config.main.window-title.var.description.filename=Denna variabel representerar namnet p\u00e5 den \u00f6ppnade filen
+settings.config.main.window-title.var.description.filepath=Denna variabel representerar s\u00f6kv\u00e4gen till den \u00f6ppnade filen
+settings.config.main.window-title.var.description.songname=Denna variabel representerar s\u00e5ngens namn
+settings.config.main.window-title.var.description.songauthor=Denna variabel representerar s\u00e5ngens upphovsman
+settings.config.main.window-title.var.description.songalbum=Denna variabel representerar s\u00e5ngens album
+settings.config.main.window-title.var.description.songartist=Denna variabel representerar s\u00e5ngens artist
+settings.config.main.options=Alternativ
+settings.config.main.splash-enabled=Visa startbild vid uppstart
+settings.config.main.table.auto-size.enabled=Aktivera automatisk tabellstorlek
+settings.config.styles.color.lines=V\u00e5gr\u00e4ta linjers f\u00e4rg
+settings.config.toolbars=Verktygsrader
+settings.config.toolbars.tip=Anpassa dina verktygsrader
+settings.config.toolbars.list=Tillg\u00e4ngliga verktygsrader
+settings.config.toolbars.move-up=Flytta upp
+settings.config.toolbars.move-down=Flytta ner
+settings.config.skin=Skal
+settings.config.skin.choose=V\u00e4lj ditt skal
+settings.keybindings=Konfigurera tangenbordgenv\u00e4gar
+
+key-bindings-editor=Redigera tangentbordgensv\u00e4gar
+key-bindings-editor-action-select=Markera en \u00e5tg\u00e4rd
+key-bindings-editor-action-column=\u00c5tg\u00e4rd
+key-bindings-editor-shortcut-column=Genv\u00e4g
+key-bindings-editor-push-a-key=Tryck in en snabbtangent
+key-bindings-editor-save-question=Det finns osparade \u00e4ndringar. Vill du avsluta utan att spara?
+
+key-bindings-editor-override=Genv\u00e4gen anv\u00e4nds redan! \u00c4r du s\u00e4ker p\u00e5 att du vill anv\u00e4nda den?
+
+print.print=Skriv ut
+print.dialog=Skriv ut
+print.service=Service
+print.service.name=Namn
+print.service.status=Tillst\u00e5nd
+print.service.type=Typ
+print.service.info=Info
+print.range=Sidintervall
+print.range.all-pages=Allt
+print.range.pages=Sidor
+print.range.pages-to=Till
+print.copies=Kopior
+print.copies-number=Antal kopior
+print.print-to-file=Skriv till fil
+print.file-chooser=V\u00e4lj
+print-header.default-song-name=Utan titel
+print-header.default-song-author=Anonym
+
+print.preview=F\u00f6rhandskgranska utskrift
+print.preview.page-of=Av
+
+marker=Mark\u00f6r
+marker.add=L\u00e4gg till mark\u00f6r
+marker.list=Lista mark\u00f6rer
+marker.first=G\u00e5 till f\u00f6rsta mark\u00f6ren
+marker.last=G\u00e5 till sista mark\u00f6ren
+marker.next=G\u00e5 till n\u00e4sta mark\u00f6ren
+marker.previous=G\u00e5 till f\u00f6reg\u00e5ende mark\u00f6r
+
+export.tablature-enabled=Visa tabulatur
+export.score-enabled=Visa partitur
+export.chord-name-enabled=Visa ackordnamn
+export.chord-diagram-enabled=Visa ackorddiagram
+export.black-and-white=Svartvitt l\u00e4ge
+
+scale=Skala
+scale.list=Lista med skalor
+
+text.insert=Infoga text
+text.editor=Textredigerare
+text.text=Text
+
+tools=Verktyg
+tools.scale=Lista med skalor
+tools.browser=Bl\u00e4ddrare
+tools.plugins=Insticksmoduler
+tools.shortcuts=Genv\u00e4gar
+tools.settings=Inst\u00e4llningar
+
+tools.transpose=Transponering
+tools.transpose.semitones=Transponera halvtoner
+tools.transpose.apply-to-track=Transponera alla takter
+tools.transpose.apply-to-measure=Transponera bara denna takt
+tools.transpose.apply-to-all-tracks=Till\u00e4mpa p\u00e5 alla sp\u00e5r
+tools.transpose.try-keep-strings=F\u00f6rs\u00f6k beh\u00e5lla noter p\u00e5 samma str\u00e4ng n\u00e4r det \u00e4r m\u00f6jligt
+tools.transpose.apply-to-chords=Transponera ackord
+
+browser.dialog=Bl\u00e4ddrare
+browser.menu.file=Fil
+browser.open=\u00d6ppna
+browser.exit=Avsluta
+browser.menu.collection=Samling
+browser.menu.go=G\u00e5
+browser.collection.select=V\u00e4lj samling
+browser.collection.open=\u00d6ppna
+browser.collection.remove=Ta bort
+browser.collection.close=St\u00e4ng
+browser.collection.new=Ny
+browser.go-root=Hem
+browser.go-back=Tillbaka
+browser.refresh=Uppdatera
+browser.factory.fs.name=Filsystem
+browser.collection.fs.name=Namn
+browser.collection.fs.path=Mapp
+browser.collection.fs.editor-title=Samling i filsystemet
+browser.collection.fs.editor-tip=V\u00e4lj din samlingsmapp
+browser.collection.fs.invalid-path=V\u00e4lj en giltig mapp
+
+midi.port=MIDI-port
+midi.sequencer=MIDI-sequencer
+
+plugin.unknown-value=Inte tillg\u00e4nglig.
+plugin.column.name=Namn
+plugin.column.enabled=Aktiverad
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Arkivobjekt
+edit.items=Redigeringsobjekt
+property.items=Egenskapsobjekt
+track.items=Sp\u00e5robjekt
+duration.items=Notv\u00e4rdesobjekt
+beat.items=Notobjekt
+composition.items=Kompositionsobjekt
+repeat.items=Repetionsobjekt
+transport.items=Transportobjekt
+marker.items=Mark\u00f6robjekt
+insert.items=Infogningsobjekt
+layout.items=Layoutobjekt
+view.items=Visningsobjekt
+effect.items=Effektobjekt
+dynamic.items=Dynamikobjekt
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Ny fil
+action.file.open=\u00d6ppna fil
+action.file.open-url=\u00d6ppna webbadress
+action.file.save=Spara
+action.file.save-as=Spara som
+action.file.print=Skriv ut
+action.file.print-preview=F\u00f6rhandsgranska utskrift
+action.file.exit=Avsluta TuxGuitar
+action.edit.undo=\u00c5ngra
+action.edit.redo=G\u00f6r om
+action.edit.voice-1=V\u00e4lj st\u00e4mma 1
+action.edit.voice-2=V\u00e4lj st\u00e4mma 2
+action.composition.change-time-signature=\u00c4ndra taktart
+action.composition.change-tempo=\u00c4ndra tempo
+action.composition.change-info=\u00c4ndra s\u00e5nginformation
+action.composition.change-clef=\u00c4ndra klav
+action.composition.change-key-signature=\u00c4ndra f\u00f6rtecken
+action.composition.change-triplet-feel=\u00c4ndra triolk\u00e4nsla
+action.view.layout-set-page=Visa sidlayout
+action.view.layout-set-linear=Visa linj\u00e4r layout
+action.view.layout-set-multitrack=Visa flera sp\u00e5r
+action.view.layout-set-score-enabled=Visa partitur
+action.view.layout-set-tablature-enabled=Visa tabulatur
+action.view.layout-set-compact=Visa kompakt l\u00e4ge
+action.view.layout-set-chord-diagram-enabled=Aktivera ackorddiagram
+action.view.layout-set-chord-name-enabled=Aktivera ackordnamn
+action.view.show-fretboard=Visa greppbr\u00e4da
+action.view.show-piano=Visa klaviatur
+action.view.show-matrix=Visa matris
+action.view.show-mixer=Visa mixer
+action.view.show-transport=Visa spelare
+action.track.add=L\u00e4gg till sp\u00e5r
+action.track.remove=Ta bort sp\u00e5r
+action.track.clone=Klona sp\u00e5r
+action.track.go-first=G\u00e5 till f\u00f6rsta sp\u00e5ret
+action.track.go-last=G\u00e5 till sista sp\u00e5ret
+action.track.go-next=G\u00e5 till n\u00e4sta sp\u00e5r
+action.track.go-previous=G\u00e5 till f\u00f6reg\u00e5ende sp\u00e5r
+action.track.lyrics=Redigera sp\u00e5rets s\u00e5ngtext
+action.track.properties=\u00c4ndra sp\u00e5regenskaper
+action.track.move-down=Flytta ner
+action.track.move-up=Flytta upp
+action.measure.add=L\u00e4gg till takt
+action.measure.remove=Ta bort takt
+action.measure.copy=Kopiera takt
+action.measure.paste=Klistra in takt
+action.measure.clean=Rensa takt
+action.measure.go-first=G\u00e5 till f\u00f6rsta takten
+action.measure.go-last=G\u00e5 till sista takten
+action.measure.go-next=G\u00e5 till n\u00e4sta takt
+action.measure.go-previous=G\u00e5 till f\u00f6reg\u00e5ende takt
+action.beat.general.remove-unused-voice=Ta bort oanv\u00e4nd st\u00e4mma
+action.beat.general.voice-up=S\u00e4tt notskaft upp\u00e5t
+action.beat.general.voice-down=S\u00e4tt notskaft ned\u00e5t
+action.beat.general.voice-auto=S\u00e4tt notskaft automatiskt
+action.beat.general.set-stroke-up=S\u00e4tt upp\u00e5tslag
+action.beat.general.set-stroke-down=S\u00e4tt ned\u00e5tslag
+action.beat.general.move-left=Flytta ett slag \u00e5t v\u00e4nster
+action.beat.general.move-right=Flytta ett slag \u00e5t h\u00f6ger
+action.beat.general.move-custom=Anpassa flytt av slag
+action.note.general.clean-beat=Rensa slag
+action.note.general.decrement-semitone=S\u00e4nk halvton
+action.note.general.increment-semitone=H\u00f6j halvton
+action.note.general.shift-down=Skifta upp
+action.note.general.shift-up=Skifta ner
+action.note.general.tied=L\u00e4gg till/Ta bort sammanbunden
+action.note.duration.set-whole=S\u00e4tt helnot
+action.note.duration.set-half=S\u00e4tt halvnot
+action.note.duration.set-quarter=S\u00e4tt fj\u00e4rdedelsnot
+action.note.duration.set-eighth=S\u00e4tt \u00e5ttondelsnot
+action.note.duration.set-sixteenth=S\u00e4tt sextondelsnot
+action.note.duration.set-thirty-second=S\u00e4tt trettiofj\u00e4rdedelsnot
+action.note.duration.set-sixty-fourth=S\u00e4tt sextiofj\u00e4rdedelsnot
+action.note.duration.decrement-duration=Minska notv\u00e4rde
+action.note.duration.increment-duration=\u00d6ka notv\u00e4rde
+action.note.duration.change-dotted=L\u00e4gg till/Ta bort punkterad
+action.note.duration.change-double-dotted=L\u00e4gg till/Ta bort dubbelpunkterad
+action.note.duration.change-division-type=L\u00e4gg till/Ta bort tuplet
+action.note.effect.change-vibrato=L\u00e4gg till/Ta bort vibrato
+action.note.effect.change-bend=L\u00e4gg till/Ta bort bend
+action.note.effect.change-slide=L\u00e4gg till/Ta bort slide
+action.note.effect.change-hammer=L\u00e4gg till/Ta bort hammer-on/pull-off
+action.note.effect.change-accentuated=L\u00e4gg till/Ta bort betonad
+action.note.effect.change-dead=L\u00e4gg till/Ta bort d\u00f6d not
+action.note.effect.change-fade-in=L\u00e4gg till/Ta bort upptoning
+action.note.effect.change-ghost=L\u00e4gg till/Ta bort sp\u00f6knot
+action.note.effect.change-grace=L\u00e4gg till/Ta bort f\u00f6ranslagsnot
+action.note.effect.change-harmonic=L\u00e4gg till/Ta bort harmonic
+action.note.effect.change-heavy-accentuated=L\u00e4gg till/Ta bort starkt betonad
+action.note.effect.change-palm-mute=L\u00e4gg till/Ta bort palm mute
+action.note.effect.change-popping=L\u00e4gg till/Ta bort popping
+action.note.effect.change-slapping=L\u00e4gg till/Ta bort slapping
+action.note.effect.change-staccato=L\u00e4gg till/Ta bort staccato
+action.note.effect.change-tapping=L\u00e4gg till/Ta bort tapping
+action.note.effect.change-tremolo-bar=L\u00e4gg till/Ta bort svajarm
+action.note.effect.change-tremolo-picking=L\u00e4gg till/Ta bort tremolo picking
+action.note.effect.change-trill=L\u00e4gg till/Ta bort trill
+action.insert.open-repeat=\u00d6ppna repris
+action.insert.close-repeat=St\u00e4ng repris
+action.insert.repeat-alternative=Reprisalternativ
+action.insert.chord=Infoga ackord
+action.insert.text=Infoga text
+action.marker.add=L\u00e4gg till mark\u00f6r
+action.marker.go-next=G\u00e5 till n\u00e4sta mark\u00f6r
+action.marker.go-previous=G\u00e5 till f\u00f6reg\u00e5ende mark\u00f6r
+action.transport.play=Spela upp s\u00e5ng
+action.transport.stop=Stanna uppspelning
+action.transport.mode=L\u00e4ge
+action.transport.metronome=Metrononom
+action.transport.set-loop-start=S\u00e4tt slingans startpunkt
+action.transport.set-loop-end=S\u00e4tt slingans slutpunkt
+action.tools.browser=Bl\u00e4ddrare
+action.tools.transpose=Transponera noter
+action.settings.configure=Inst\u00e4llningar
+action.help.doc=Hj\u00e4lp
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_uk.properties b/TuxGuitar-testing/platform-all/share/lang/messages_uk.properties
new file mode 100644
index 0000000..811826b
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_uk.properties
@@ -0,0 +1,614 @@
+ok=\u0414\u043e\u0431\u0440\u0435
+cancel=\u0412\u0456\u0434\u043c\u0456\u043d\u0430
+yes=\u0422\u0430\u043a
+no=\u041d\u0456
+add=\u0414\u043e\u0434\u0430\u0442\u0438
+edit=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438
+remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438
+save=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438
+exit=\u0412\u0438\u0439\u0442\u0438
+choose=\u0412\u0438\u0431\u0440\u0430\u0442\u0438
+color=\u041a\u043e\u043b\u0456\u0440
+title=\u041d\u0430\u0437\u0432\u0430
+go=\u0419\u0442\u0438
+warning=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f
+error=\u041f\u043e\u043c\u0438\u043b\u043a\u0430
+plugins=\u0412\u0442\u0443\u043b\u043a\u0438
+options=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f
+defaults=\u0417\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f
+clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438
+rename=\u041f\u0435\u0440\u0435\u0439\u043c\u0435\u043d\u0443\u0432\u0430\u0442\u0438
+fret=\u041b\u0430\u0434
+position=\u041f\u043e\u0437\u0438\u0446\u0456\u044f
+name=\u0406\u043c'\u044f
+author=\u0410\u0432\u0442\u043e\u0440
+version=\u0412\u0435\u0440\u0441\u0456\u044f
+description=\u041e\u043f\u0438\u0441
+info=\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f
+configure=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f
+
+tuxguitar.title=Tux-Guitar
+
+file=\u0424\u0430\u0439\u043b
+file.new=\u041d\u043e\u0432\u0438\u0439
+file.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438
+file.save=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438
+file.save-as=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u044f\u043a
+file.save-changes-question=\u0417\u043c\u0456\u043d\u0438 \u0434\u043e \u043f\u0456\u0441\u043d\u0456 \u043d\u0435 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456.\n\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438?
+file.exit=\u0412\u0438\u0445\u0456\u0434
+file.export=\u0415\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438
+file.export-midi=\u0415\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 MIDI
+file.export-pdf=\u0415\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 PDF
+file.print=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438
+file.print-preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434
+file.import=\u0406\u043c\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438
+file.import-midi=\u0406\u043c\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 MIDI
+file.export-ascii=\u0415\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 ASCII
+file.history=\u0406\u0441\u0442\u043e\u0440\u0456\u044f
+file.open-url=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 URL
+file.open.error=\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438: {0}
+file.save.error=\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438: {0}
+file.import.error=\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0456\u043c\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438: {0}
+file.export.error=\u041d\u0435\u043c\u043e\u0436\u043b\u0438\u0432\u043e \u0435\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438: {0}
+file.overwrite-question=\u0426\u0435\u0439 \u0444\u0430\u0439\u043b \u0432\u0436\u0435 \u0456\u0441\u043d\u0443\u0454, \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u0438?
+
+edit.menu=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f
+edit.undo=\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438
+edit.redo=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438
+edit.copy=\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438
+edit.from=\u0406\u0437
+edit.to=\u0414\u043e
+edit.all-tracks=\u0412\u0441\u0456\u0445 \u0442\u0440\u0435\u043a\u0456\u0432
+edit.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438
+edit.paste.replace-mode=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0443 \u043f\u043e\u0442\u043e\u0447\u043d\u0438\u0439 \u0442\u0430\u043a\u0442
+edit.paste.insert-mode=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0443 \u043d\u043e\u0432\u0438\u0439 \u0442\u0430\u043a\u0442
+edit.delete=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438
+edit.cut=\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438
+edit.mouse-mode-selection=\u0420\u0435\u0436\u0438\u043c \u0432\u0438\u0431\u043e\u0440\u0443
+edit.mouse-mode-edition=\u0420\u0435\u0436\u0438\u043c \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f
+edit.not-natural-key=\u0414\u0456\u0454\u0437/\u0411\u0435\u043c\u043e\u043b\u044c
+
+view=\u0412\u0438\u0433\u043b\u044f\u0434
+view.layout=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f
+view.layout.page=\u042f\u043a \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430
+view.layout.linear=\u041b\u0456\u043d\u0456\u0439\u043d\u043e
+view.layout.compact=\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e
+view.layout.multitrack=\u0411\u0430\u0433\u0430\u0442\u043e \u0434\u043e\u0440\u0456\u0436\u043e\u043a
+view.layout.chord-style=\u0412\u0438\u0433\u043b\u044f\u0434 \u0430\u043a\u043e\u0440\u0434\u0456\u0432
+view.layout.chord-name=\u0406\u043c'\u044f
+view.layout.chord-diagram=\u0414\u0456\u0430\u0433\u0440\u0430\u043c\u0430
+view.layout.score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443
+view.layout.tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443
+view.show-mixer=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043c\u0456\u043a\u0448\u0435\u0440
+view.show-fretboard=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0433\u0440\u0438\u0444
+view.show-piano=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043a\u043b\u0430\u0432\u0456\u0448\u0456
+view.show-matrix=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044e
+view.show-transport=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0447
+
+fretboard.right-mode=\u041f\u0440\u0430\u0432\u0448\u0430
+fretboard.left-mode=\u041b\u0456\u0432\u0448\u0430
+fretboard.background-color=\u041a\u043e\u043b\u0456\u0440 \u0444\u043e\u043d\u0443
+fretboard.display-note-text=\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0438 \u043d\u043e\u0442
+fretboard.display-scale-text=\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0438 \u043d\u043e\u0442 \u043b\u0430\u0434\u0456\u0432
+fretboard.font=\u0428\u0440\u0438\u0444\u0442
+fretboard.fretpoint-color=\u041a\u043e\u043b\u0456\u0440 \u043b\u0430\u0434\u0456\u0432
+fretboard.note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442
+fretboard.scale-note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 \u043b\u0430\u0434\u0456\u0432
+fretboard.settings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0433\u0440\u0438\u0444\u0443
+fretboard.string-color=\u041a\u043e\u043b\u0456\u0440 \u0441\u0442\u0440\u0443\u043d
+fretboard.settings.options=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f
+
+piano.editor=\u041a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0430
+piano.natural-key-color=\u041a\u043e\u043b\u0456\u0440 \u043a\u043b\u0430\u0432\u0456\u0448 \u0442\u043e\u043d\u0456\u0432
+piano.not-natural-key-color=\u041a\u043e\u043b\u0456\u0440 \u043a\u043b\u0430\u0432\u0456\u0448 \u043d\u0430\u043f\u0456\u0432\u0442\u043e\u043d\u0456\u0432
+piano.note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442
+piano.scale-note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 \u043b\u0430\u0434\u0456\u0432
+piano.settings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0438
+
+matrix.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0456
+matrix.grids=\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u0440\u043e\u0437\u0434\u0456\u043b\u044e\u0432\u0430\u0447\u0456\u0432
+matrix.border-color=\u041a\u043e\u043b\u0456\u0440 \u0433\u0440\u0430\u043d\u0438\u0446\u0456
+matrix.font=\u0428\u0440\u0438\u0444\u0442
+matrix.foreground-color=\u041a\u043e\u043b\u0456\u0440 \u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0443
+matrix.line-color-1=\u041a\u043e\u043b\u0456\u0440 \u043f\u0430\u0440\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u043a\u0430
+matrix.line-color-2=\u041a\u043e\u043b\u0456\u0440 \u043d\u0435\u043f\u0430\u0440\u043d\u043e\u0433\u043e \u0440\u044f\u0434\u043a\u0430
+matrix.line-color-over=\u041a\u043e\u043b\u0456\u0440 \u0440\u044f\u0434\u043a\u0430, \u043d\u0430 \u044f\u043a\u0438\u0439 \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0430 \u043c\u0438\u0448\u0430
+matrix.note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442
+matrix.play-note-color=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442\u0438, \u0449\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u0454\u0442\u044c\u0441\u044f
+matrix.position-color=\u041a\u043e\u043b\u0456\u0440 \u043f\u043e\u0437\u0438\u0446\u0456\u0457
+matrix.settings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0456
+
+composition=\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0456\u044f
+composition.timesignature=\u0420\u043e\u0437\u043c\u0456\u0440
+composition.timesignature.Numerator=\u0427\u0438\u0441\u0435\u043b\u044c\u043d\u0438\u043a
+composition.timesignature.denominator=\u0417\u043d\u0430\u043c\u0435\u043d\u043d\u0438\u043a
+composition.timesignature.to-the-end=\u0414\u043e \u043a\u0456\u043d\u0446\u044f
+composition.tempo=\u0422\u0435\u043c\u043f
+composition.tempo-percent=\u0412\u0456\u0434\u0441\u043e\u0442\u043e\u043a
+composition.tempo.invalid=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0438\u0439 \u0442\u0435\u043c\u043f
+composition.tempo.start-to-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u0442\u0435\u043c\u043f \u0434\u043e \u0432\u0441\u0456\u0454\u0457 \u043f\u0456\u0441\u043d\u0456
+composition.tempo.position-to-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u0442\u0435\u043c\u043f \u0434\u043e \u043a\u0456\u043d\u0446\u044f
+composition.tempo.position-to-next=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u0442\u0435\u043c\u043f \u0434\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 \u0442\u0435\u043c\u043f\u0443
+composition.properties=\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456
+composition.name=\u0406\u043c'\u044f
+composition.artist=\u0412\u0438\u043a\u043e\u043d\u0430\u0432\u0435\u0446\u044c
+composition.album=\u0410\u043b\u044c\u0431\u043e\u043c
+composition.author=\u0410\u0432\u0442\u043e\u0440
+composition.tripletfeel=\u0422\u0440\u0456\u043e\u043b\u0456
+composition.clef=\u041a\u043b\u044e\u0447
+composition.clef.treble=\u0421\u043a\u0440\u0438\u043f\u043a\u043e\u0432\u0438\u0439
+composition.clef.bass=\u0411\u0430\u0441\u043e\u0432\u0438\u0439
+composition.clef.tenor=\u0422\u0435\u043d\u043e\u0440
+composition.clef.alto=\u0410\u043b\u044c\u0442
+composition.clef.to-the-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u0439 \u043a\u043b\u044e\u0447 \u0434\u043e \u043a\u0456\u043d\u0446\u044f
+composition.keysignature=\u0422\u043e\u043d\u0430\u043b\u044c\u043d\u0456\u0441\u0442\u044c
+composition.keysignature.natural=\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u0430
+composition.keysignature.sharp-1=1 \u0434\u0456\u0454\u0437
+composition.keysignature.sharp-2=2 \u0434\u0456\u0454\u0437\u0438
+composition.keysignature.sharp-3=3 \u0434\u0456\u0454\u0437\u0438
+composition.keysignature.sharp-4=4 \u0434\u0456\u0454\u0437\u0438
+composition.keysignature.sharp-5=5 \u0434\u0456\u0454\u0437\u0438
+composition.keysignature.sharp-6=6 \u0434\u0456\u0454\u0437\u0438
+composition.keysignature.sharp-7=7 \u0434\u0456\u0454\u0437\u0438
+composition.keysignature.flat-1=1 \u0431\u0435\u043c\u043e\u043b\u044c
+composition.keysignature.flat-2=2 \u0431\u0435\u043c\u043e\u043b\u0456
+composition.keysignature.flat-3=3 \u0431\u0435\u043c\u043e\u043b\u0456
+composition.keysignature.flat-4=4 \u0431\u0435\u043c\u043e\u043b\u0456
+composition.keysignature.flat-5=5 \u0431\u0435\u043c\u043e\u043b\u0456
+composition.keysignature.flat-6=6 \u0431\u0435\u043c\u043e\u043b\u0456
+composition.keysignature.flat-7=7 \u0431\u0435\u043c\u043e\u043b\u0456
+composition.keysignature.to-the-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u044e \u0442\u043e\u043d\u0430\u043b\u044c\u043d\u0456\u0441\u0442\u044c \u0434\u043e \u043a\u0456\u043d\u0446\u044f
+composition.tripletfeel=\u0422\u0440\u0456\u043e\u043b\u0456
+composition.tripletfeel.none=\u0411\u0435\u0437 \u0442\u0440\u0456\u043e\u043b\u0435\u0439
+composition.tripletfeel.eighth=\u0422\u0440\u0456\u043e\u043b\u0456 8\u043c\u0456
+composition.tripletfeel.sixteenth=\u0422\u0440\u0456\u043e\u043b\u0456 16\u0442\u0456
+composition.tripletfeel.to-the-end=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u0446\u0456 \u0442\u0440\u0456\u043e\u043b\u0456 \u0434\u043e \u043a\u0456\u043d\u0446\u044f
+
+help=\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430
+help.help=\u0414\u043e\u043f\u043e\u043c\u043e\u0433\u0430
+help.doc=\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u044f
+help.about=\u041f\u0440\u043e
+help.about.license=\u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f
+help.about.authors=\u0410\u0432\u0442\u043e\u0440\u0438
+help.about.description=\u041e\u043f\u0438\u0441
+
+track=\u0414\u043e\u0440\u0456\u0436\u043a\u0430
+track.number=\u2116
+track.name=\u0406\u043c'\u044f
+track.color=\u041a\u043e\u043b\u0456\u0440
+track.first=\u041f\u0435\u0440\u0448\u0430 \u0434\u043e\u0440\u0456\u0436\u043a\u0430
+track.last=\u041e\u0441\u0442\u0430\u043d\u043d\u044f \u0434\u043e\u0440\u0456\u0436\u043a\u0430
+track.previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044f \u0434\u043e\u0440\u0456\u0436\u043a\u0430
+track.next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043e\u0440\u0456\u0436\u043a\u0430
+track.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443
+track.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443
+track.clone=\u0414\u0443\u0431\u043b\u044e\u0432\u0430\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443
+track.move-up=\u041f\u0435\u0440\u0435\u0441\u0443\u043d\u0443\u0442\u0438 \u0432\u0433\u043e\u0440\u0443
+track.move-down=\u041f\u0435\u0440\u0435\u0441\u0443\u043d\u0443\u0442\u0438 \u0432\u043d\u0438\u0437
+track.instrument=\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 
+track.properties=\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456
+track.properties.general=\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456
+track.name.default-percussion-name=\u0423\u0434\u0430\u0440\u043d\u0456
+track.lyrics=\u0422\u0435\u043a\u0441\u0442 \u043f\u0456\u0441\u043d\u0456
+track.solo=\u0421\u043e\u043b\u043e
+track.mute=\u041c\u043e\u0432\u0447\u0430\u043d\u043d\u044f
+
+lyric.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443
+
+measure=\u0422\u0430\u043a\u0442
+measure.first=\u041f\u0435\u0440\u0448\u0438\u0439 \u0442\u0430\u043a\u0442
+measure.last=\u041e\u0441\u0442\u0430\u043d\u043d\u0456\u0439 \u0442\u0430\u043a\u0442
+measure.previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u0442\u0430\u043a\u0442
+measure.next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0442\u0430\u043a\u0442
+measure.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442
+measure.add-before-current-position=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 \u043f\u0435\u0440\u0435\u0434 \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u044e \u043f\u043e\u0437\u0438\u0446\u0456\u0454\u044e
+measure.add-after-current-position=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 \u043f\u0456\u0441\u043b\u044f \u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0457 \u043f\u043e\u0437\u0438\u0446\u0456\u0457
+measure.add-at-end=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442 \u0443 \u043a\u0456\u043d\u0435\u0446\u044c
+measure.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u043a\u0442
+measure.copy=\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0442\u0430\u043a\u0442
+measure.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0430\u043a\u0442
+measure.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0442\u0430\u043a\u0442
+
+duration=\u0422\u0440\u0438\u0432\u0430\u043b\u0456\u0441\u0442\u044c
+duration.whole=\u0426\u0456\u043b\u0430
+duration.half=\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0430
+duration.quarter=\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u043d\u0430
+duration.eighth=\u0412\u043e\u0441\u044c\u043c\u0430
+duration.sixteenth=\u0428\u0456\u0441\u0442\u043d\u0430\u0434\u0446\u044f\u0442\u0430
+duration.thirtysecond=\u0422\u0440\u0438\u0434\u0446\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0430
+duration.sixtyfourth=\u0428\u0456\u0441\u0442\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430
+duration.dotted=\u0406\u0437 \u043a\u0440\u0430\u043f\u043a\u043e\u044e
+duration.doubledotted=\u0406\u0437 \u043f\u043e\u0434\u0432\u0456\u0439\u043d\u043e\u044e \u043a\u0440\u0430\u043f\u043a\u043e\u044e
+duration.division-type=\u0422\u0440\u0438\u043f\u043b\u0435\u0442
+
+dynamic=\u0414\u0438\u043d\u0430\u043c\u0456\u0447\u043d\u0456 \u0432\u0456\u0434\u0442\u0456\u043d\u043a\u0438
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=\u0415\u0444\u0435\u043a\u0442\u0438
+effects.vibrato=\u0412\u0456\u0431\u0440\u0430\u0442\u043e
+effects.bend=\u041f\u0456\u0434\u0442\u044f\u0436\u043a\u0430 (\u0411\u0435\u043d\u0434)
+effects.deadnote=\u0417\u0430\u0433\u043b\u0443\u0448\u0435\u043d\u0430 \u043d\u043e\u0442\u0430
+effects.slide=\u041a\u043e\u0432\u0437\u0430\u043d\u043d\u044f (\u0413\u043b\u0456\u0441\u0430\u043d\u0434\u043e)
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=\u0412\u0430\u0436\u0456\u043b\u044c \u0442\u0440\u0435\u043c\u043e\u043b\u043e     
+effects.tremolo-bar-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0435\u0444\u0435\u043a\u0442\u0456\u0432 \u0432\u0430\u0436\u0435\u043b\u044f
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=\u041d\u043e\u0442\u0430-\u043f\u0440\u0438\u043c\u0430\u0440\u0430
+effects.accentuatednote=\u0410\u043a\u0446\u0435\u043d\u0442\u043e\u0432\u0430\u043d\u0430 \u043d\u043e\u0442\u0430
+effects.heavyaccentuatednote=\u0421\u0438\u043b\u044c\u043d\u043e \u0430\u043a\u0446\u0435\u043d\u0442\u043e\u0432\u0430\u043d\u0430 \u043d\u043e\u0442\u0430
+effects.harmonic=\u0424\u043b\u0430\u0436\u043e\u043b\u0435\u0442
+effects.grace=\u0424\u043e\u0440\u0448\u043b\u0430\u0433
+effects.grace-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0444\u043e\u0440\u0448\u043b\u0430\u0433\u0443
+effects.grace.before-beat=\u041f\u0435\u0440\u0435\u0434 \u0434\u043e\u043b\u0435\u044e
+effects.grace.on-beat=\u041d\u0430 \u0434\u043e\u043b\u0456
+effects.grace.transition=\u041f\u0435\u0440\u0435\u0445\u0456\u0434
+effects.grace.transition-none=\u041d\u0435\u043c\u0430
+effects.grace.transition-bend=\u041f\u0456\u0434\u0442\u044f\u0436\u043a\u0430
+effects.grace.transition-slide=\u041a\u043e\u0432\u0437\u0430\u043d\u043d\u044f
+effects.grace.transition-hammer=Hammer
+effects.trill=\u0422\u0440\u0435\u043b\u044c
+effects.trill-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0440\u0435\u043b\u0456
+effects.tremolo-picking=\u0422\u0440\u0435\u043c\u043e\u043b\u043e
+effects.tremolo-picking-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0440\u0435\u043c\u043e\u043b\u043e
+effects.palm-mute=\u041f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u044f \u0434\u043e\u043b\u043e\u043d\u0435\u044e
+effects.staccato=\u0423\u0440\u0438\u0432\u0447\u0430\u0441\u0442\u043e (\u0421\u0442\u0430\u043a\u0430\u0442\u043e)
+effects.tapping=\u0422\u0435\u043f\u0456\u043d\u0433
+effects.slapping=Slap
+effects.popping=Pop  
+effects.fade-in=\u041d\u0430\u0440\u043e\u0441\u0442\u0430\u043d\u043d\u044f \u0433\u0443\u0447\u043d\u043e\u0441\u0442\u0456
+effects.harmonic-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442\u0456\u0432
+effects.harmonic.type-of-harmonic=\u0422\u0438\u043f \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442\u0430
+effects.harmonic.natural=\u041d\u0430\u0442\u0443\u0440\u0430\u043b\u044c\u043d\u0438\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442
+effects.harmonic.artificial=\u0428\u0442\u0443\u0447\u043d\u0438\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442
+effects.harmonic.artificial.key-offset=\u0417\u043c\u0456\u0449\u0435\u043d\u043d\u044f
+effects.harmonic.tapped=\u0422\u0435\u043f\u0456\u043d\u0433\u043e\u0432\u0438\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442
+effects.harmonic.tapped.left-hand=\u041b\u0456\u0432\u043e\u0457 \u0440\u0443\u043a\u0438
+effects.harmonic.tapped.right-hand=\u041f\u0440\u0430\u0432\u043e\u0457 \u0440\u0443\u043a\u0438
+effects.harmonic.pinch=\u041c\u0435\u0434\u0456\u0430\u0442\u043e\u0440\u043d\u0438\u0439 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442
+effects.harmonic.semi=\u041d\u0430\u043f\u0456\u0432\u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442
+
+bend.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u043f\u0456\u0434\u0442\u044f\u0436\u043a\u0438
+bend.bend=Bend
+bend.bend-release=Bend/Release
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=\u041f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0447
+transport.start=\u0413\u0440\u0430\u0442\u0438
+transport.stop=\u0417\u0443\u043f\u0438\u043d\u0438\u0442\u0438
+transport.pause=\u041f\u0430\u0443\u0437\u0430
+transport.first=\u041d\u0430 \u043f\u043e\u0447\u0430\u0442\u043e\u043a
+transport.last=\u0412 \u043a\u0456\u043d\u0435\u0446\u044c
+transport.previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439
+transport.next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439
+transport.metronome=\u041c\u0435\u0442\u0440\u043e\u043d\u043e\u043c
+transport.mode=\u0420\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u043d\u043d\u044f
+transport.mode.simple=\u041f\u0440\u043e\u0441\u0442\u0438\u0439
+transport.mode.simple.tempo-percent=\u0412\u0456\u0434\u0441\u043e\u0442\u043e\u043a \u0442\u0435\u043c\u043f\u0443
+transport.mode.simple.loop=\u0417\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u0438
+transport.mode.trainer=\u0422\u0440\u0435\u043d\u0443\u0432\u0430\u043d\u043d\u044f
+transport.mode.trainer.increment-description=\u0417\u0431\u0456\u043b\u044c\u0448\u0443\u0432\u0430\u0442\u0438 \u043d\u0430
+
+instruments.volume=\u041f\u0456\u0434\u0441\u0438\u043b\u0435\u043d\u043d\u044f
+instrument.volume=\u0413\u0443\u0447\u043d\u0456\u0441\u0442\u044c
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=\u0411\u0430\u043b\u0430\u043d\u0441
+instrument.free=\u0412\u0456\u043b\u044c\u043d\u0438\u0439
+instrument.link=\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f
+
+
+repeat.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0440\u0435\u043f\u0440\u0438\u0437\u0443
+repeat.close=\u0417\u0430\u043a\u0440\u0438\u0442\u0438 \u0440\u0435\u043f\u0440\u0438\u0437\u0443
+repeat.alternative=\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0456 \u043a\u0456\u043d\u0446\u0456\u0432\u043a\u0438
+repeat.alternative.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0456 \u043a\u0456\u043d\u0446\u0456\u0432\u043a\u0438
+repetitions=\u041f\u043e\u0432\u0442\u043e\u0440\u0438
+repeat.number-of-repetitions=\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440\u0456\u0432
+
+beat=\u0414\u043e\u043b\u044f
+beat.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0434\u043e\u043b\u044e
+
+note=\u041d\u043e\u0442\u0430
+note.semitone-up=\u041f\u0456\u0432\u0442\u043e\u043d\u043e\u043c \u0432\u0438\u0449\u0435
+note.semitone-down=\u041f\u0456\u0432\u0442\u043e\u043d\u043e\u043c \u043d\u0438\u0436\u0447\u0435
+note.shift-up=\u0421\u0442\u0440\u0443\u043d\u043e\u044e \u0432\u0438\u0449\u0435
+note.sfift-down=\u0421\u0442\u0440\u0443\u043d\u043e\u044e \u043d\u0438\u0436\u0447\u0435
+note.tiednote=\u0417\u0432'\u044f\u0437\u0430\u0442\u0438 \u043d\u043e\u0442\u0438
+note.deadnote=\u0417\u0430\u0433\u043b\u0443\u0448\u0435\u043d\u0430 \u043d\u043e\u0442\u0430
+
+insert.chord=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0430\u043a\u043e\u0440\u0434
+chord.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0430\u043a\u043e\u0440\u0434\u0430
+chord=\u0410\u043a\u043e\u0440\u0434
+chord.name=\u0406\u043c'\u044f
+chord.bass=\u0411\u0430\u0441
+chord.custom=\u0417\u0430\u0434\u0430\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443
+chord.custom.name-empty-error=\u0410\u043a\u043e\u0440\u0434 \u043f\u043e\u0432\u0438\u043d\u0435\u043d \u043c\u0430\u0442\u0438 \u0456\u043c'\u044f.
+chord.custom.name-exist-error=\u0422\u0430\u043a\u0435 \u0456\u043c'\u044f \u0432\u0436\u0435 \u0456\u0441\u043d\u0443\u0454.
+chord.settings.tip=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f
+chord.settings.type=\u0422\u0438\u043f
+chord.settings.type.most-common=\u041d\u0430\u0439\u0431\u0456\u043b\u044c\u0448 \u0432\u0436\u0438\u0432\u0430\u043d\u0456
+chord.settings.type.inversions=\u041e\u0431\u0435\u0440\u043d\u0435\u043d\u043d\u044f
+chord.settings.type.close-voiced=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0456
+chord.settings.type.open-voiced=\u0417\u0430\u043a\u0440\u0438\u0442\u0456
+chord.settings.open-chords=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0456 \u0430\u043a\u043e\u0440\u0434\u0438
+chord.settings.chords-to-display=\u041f\u043e\u043a\u0430\u0437\u0443\u0432\u0430\u0442\u0438
+chord.settings.search-frets=\u0428\u0443\u043a\u0430\u0442\u0438 \u043b\u0430\u0434\u0438
+chord.settings.minimum-fret=\u0417
+chord.settings.maximum-fret=\u041f\u043e
+
+instrument=\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442
+instrument.instrument=\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442
+instrument.percussion-track=\u0414\u043e\u0440\u0456\u0436\u043a\u0430 \u0443\u0434\u0430\u0440\u043d\u0438\u0445
+
+tuning=\u0421\u0442\u0440\u0456\u0439
+tuning.strings=\u0421\u0442\u0440\u0443\u043d\u0438
+tuning.offset=\u0417\u043c\u0456\u0449\u0435\u043d\u043d\u044f
+
+language=\u041c\u043e\u0432\u0430
+
+choose-color=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043a\u043e\u043b\u0456\u0440
+
+settings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f
+settings.config=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 TuxGuitar
+settings.config.language=\u041c\u043e\u0432\u0430
+settings.config.language.choose=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u043c\u043e\u0432\u0443
+settings.config.styles=\u0421\u0442\u0438\u043b\u0456
+settings.config.styles.general=\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456 \u0441\u0442\u0438\u043b\u0456
+settings.config.styles.printer=\u0414\u043b\u044f \u0434\u0440\u0443\u043a\u0443
+settings.config.styles.font.default=\u0428\u0440\u0438\u0444\u0442 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c
+settings.config.styles.font.note=\u0428\u0440\u0438\u0444\u0442 \u043d\u043e\u0442
+settings.config.styles.font.lyric=\u0428\u0440\u0438\u0444\u0442 \u0442\u0435\u043a\u0441\u0442\u0456\u0432 \u043f\u0456\u0441\u0435\u043d\u044c
+settings.config.styles.font.text=\u0428\u0440\u0438\u0444\u0442 \u0442\u0435\u043a\u0441\u0442\u0443
+settings.config.styles.font.time-signature=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e\u0437\u043d\u0430\u0447\u043e\u043a \u0447\u0430\u0441\u0443
+settings.config.styles.font.printer-default=\u0428\u0440\u0438\u0444\u0442 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c \u0434\u043b\u044f \u0434\u0440\u0443\u043a\u0443
+settings.config.styles.font.printer-note=\u0428\u0440\u0438\u0444\u0442 \u043d\u043e\u0442 \u0434\u043b\u044f \u0434\u0440\u0443\u043a\u0443
+settings.config.styles.font.printer-time-signature=\u0428\u0440\u0438\u0444\u0442 \u043f\u043e\u0437\u043d\u0430\u0447\u043e\u043a \u0447\u0430\u0441\u0443 \u0434\u043b\u044f \u0434\u0440\u0443\u043a\u0443
+settings.config.styles.color.score-note=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0438
+settings.config.styles.color.tab-note=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442 \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0438
+settings.config.styles.color.play-note=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442\u0438, \u0449\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u0454\u0442\u044c\u0441\u044f
+settings.config.apply-changes-question=\u0417\u0430\u0441\u0442\u043e\u0441\u0443\u0432\u0430\u0442\u0438 \u043d\u043e\u0432\u0456 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0430\u0440\u0430\u0437?
+settings.config.sound=\u0417\u0432\u0443\u043a
+settings.config.main=\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456
+settings.config.main.window-title=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0432\u0456\u043a\u043d\u0430
+settings.config.main.window-title.help=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0456 \u0437\u043c\u0456\u043d\u043d\u0456 \u0431\u0443\u0434\u0443\u0442\u044c \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0456 \u044f\u043a:
+settings.config.main.window-title.var.description.appname=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0456\u043c'\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u0438: TuxGuitar
+settings.config.main.window-title.var.description.appversion=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0432\u0435\u0440\u0441\u0456\u044e TuxGuitar
+settings.config.main.window-title.var.description.filename=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0456\u043c'\u044f \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430
+settings.config.main.window-title.var.description.filepath=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0448\u043b\u044f\u0445 \u0434\u043e \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430
+settings.config.main.window-title.var.description.songname=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0456\u043c'\u044f \u043f\u0456\u0441\u043d\u0456
+settings.config.main.window-title.var.description.songauthor=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0430\u0432\u0442\u043e\u0440\u0430 \u043f\u0456\u0441\u043d\u0456
+settings.config.main.window-title.var.description.songalbum=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0430\u043b\u044c\u0431\u043e\u043c, \u0456\u0437 \u044f\u043a\u043e\u0433\u043e \u043f\u0456\u0441\u043d\u044f
+settings.config.main.window-title.var.description.songartist=\u0426\u044f \u0437\u043c\u0456\u043d\u043d\u0430 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0454 \u0432\u0438\u043a\u043e\u043d\u0430\u0432\u0446\u044f \u043f\u0456\u0441\u043d\u0456
+settings.config.main.options=\u041e\u043f\u0446\u0456\u0457
+settings.config.main.splash-enabled=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u0438 \u0437\u0430\u0441\u0442\u0430\u0432\u043a\u0443 \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0443
+settings.config.main.table.auto-size.enabled=\u0414\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0443 \u0437\u043c\u0456\u043d\u0443 \u0440\u043e\u0437\u043c\u0456\u0440\u0456\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0456
+settings.config.styles.color.lines=\u041a\u043e\u043b\u0456\u0440 \u043d\u043e\u0442\u043d\u043e\u0433\u043e \u0441\u0442\u0430\u043d\u0443
+settings.config.toolbars=\u041f\u0430\u043d\u0435\u043b\u0456
+settings.config.toolbars.tip=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0432\u0430\u0448\u0456 \u043f\u0430\u043d\u0435\u043b\u0456
+settings.config.toolbars.list=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u043f\u0430\u043d\u0435\u043b\u0456
+settings.config.toolbars.move-up=\u041f\u0456\u0434\u043d\u044f\u0442\u0438
+settings.config.toolbars.move-down=\u041e\u043f\u0443\u0441\u0442\u0438\u0442\u0438
+settings.config.skin=\u0416\u0443\u043f\u0430\u043d\u0438
+settings.config.skin.choose=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0432\u0430\u0448 \u0436\u0443\u043f\u0430\u043d
+settings.keybindings=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f
+
+key-bindings-editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f
+key-bindings-editor-action-select=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0434\u0456\u044e
+key-bindings-editor-action-column=\u0414\u0456\u0457
+key-bindings-editor-shortcut-column=\u041a\u043b\u0430\u0432\u0456\u0448\u0456
+key-bindings-editor-push-a-key=\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u043a\u043b\u0430\u0432\u0456\u0448\u0443
+key-bindings-editor-save-question=\u0417\u043c\u0456\u043d\u0438 \u043d\u0435\u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456, \u0432\u0438\u0439\u0442\u0438 \u043d\u0435 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u044e\u0447\u0438?
+
+key-bindings-editor-override=\u0421\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f \u0432\u0436\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f! \u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0439\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438?
+
+print.print=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438
+print.dialog=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438
+print.service=\u0421\u0435\u0440\u0432\u0456\u0441
+print.service.name=\u0406\u043c'\u044f
+print.service.status=\u0421\u0442\u0430\u0442\u0443\u0441
+print.service.type=\u0422\u0438\u043f
+print.service.info=\u0406\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044f
+print.range=\u0414\u0456\u0430\u043f\u0430\u0437\u043e\u043d
+print.range.all-pages=\u0412\u0441\u0435
+print.range.pages=\u0421\u0442\u043e\u0440\u0456\u043d\u043a\u0438
+print.range.pages-to=\u0414\u043e
+print.copies=\u041a\u043e\u043f\u0456\u0457
+print.copies-number=\u041a\u0456\u043b\u044c\u043a\u0456\u0441\u0442\u044c \u043a\u043e\u043f\u0456\u0439
+print.print-to-file=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438 \u0443 \u0444\u0430\u0439\u043b
+print.file-chooser=\u0412\u0438\u0431\u0440\u0430\u0442\u0438
+print-header.default-song-name=\u041d\u0435\u043d\u0430\u0437\u0432\u0430\u043d\u0430
+print-header.default-song-author=\u041d\u0435\u0432\u0456\u0434\u043e\u043c\u0438\u0439
+
+print.preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434
+print.preview.page-of=
+
+marker=\u041f\u043e\u0437\u043d\u0430\u0447\u043a\u0438
+marker.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0443
+marker.list=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438
+marker.first=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u043f\u0435\u0440\u0448\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438
+marker.last=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u043e\u0441\u0442\u0430\u043d\u043d\u044c\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438
+marker.next=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438
+marker.previous=\u041f\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043e \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044c\u043e\u0457 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438
+
+export.tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443
+export.score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443
+
+scale=\u041b\u0430\u0434
+scale.list=\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0430\u0434\u0456\u0432
+
+text.insert=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0435\u043a\u0441\u0442
+text.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443
+text.text=\u0422\u0435\u043a\u0441\u0442
+
+tools=\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0438
+tools.scale=\u0421\u043f\u0438\u0441\u043e\u043a \u043b\u0430\u0434\u0456\u0432
+tools.browser=\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447
+tools.plugins=\u0412\u0442\u0443\u043b\u043a\u0438
+tools.shortcuts=\u0421\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f
+tools.settings=\u041d\u0430\u043b\u0430\u0448\u0443\u0432\u0430\u043d\u043d\u044f
+
+browser.dialog=\u041f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0430\u0447
+browser.menu.file=\u0424\u0430\u0439\u043b
+browser.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438
+browser.exit=\u0412\u0438\u0445\u0456\u0434
+browser.menu.collection=\u0417\u0431\u0456\u0440\u043a\u0430
+browser.menu.go=\u041f\u0435\u0440\u0435\u0439\u0442\u0438
+browser.collection.select=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0437\u0431\u0456\u0440\u043a\u0443
+browser.collection.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438
+browser.collection.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438
+browser.collection.close=\u0417\u0430\u043a\u0440\u0438\u0442\u0438
+browser.collection.new=\u041d\u043e\u0432\u0430
+browser.go-root=\u0414\u043e\u0434\u043e\u043c\u0443
+browser.go-back=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u0441\u044c
+browser.refresh=\u041e\u043d\u043e\u0432\u0438\u0442\u0438
+browser.factory.fs.name=\u0424\u0430\u0439\u043b\u043e\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0430
+browser.collection.fs.name=\u0406\u043c'\u044f
+browser.collection.fs.path=\u0422\u0435\u043a\u0430
+browser.collection.fs.editor-title=\u0417\u0431\u0456\u0440\u043a\u0430 \u0456\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0457 \u0441\u0438\u0441\u0442\u0435\u043c\u0438
+browser.collection.fs.editor-tip=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u0442\u0435\u043a\u0443 \u0432\u0430\u0448\u043e\u0457 \u0437\u0431\u0456\u0440\u043a\u0438
+browser.collection.fs.invalid-path=\u0411\u0443\u0434\u044c \u043b\u0430\u0441\u043a\u0430, \u0432\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u0443 \u0442\u0435\u043a\u0443
+
+midi.port=MIDI \u043f\u043e\u0440\u0442
+midi.sequencer=MIDI \u0441\u0435\u043a\u0432\u0435\u043d\u0441\u0435\u0440
+
+plugin.unknown-value=\u041d\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0438\u0439
+plugin.column.name=\u0406\u043c'\u044f \u0432\u0442\u0443\u043b\u043a\u0430
+plugin.column.enabled=\u0412\u0432\u0456\u043c\u043a\u043d\u0435\u043d\u0438\u0439
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=\u0424\u0430\u0439\u043b\u043e\u0432\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438
+edit.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f
+property.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0432\u043b\u0430\u0441\u043d\u043e\u0441\u0442\u0456
+track.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043e\u043a
+duration.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0442\u0440\u0438\u0432\u0430\u043b\u043e\u0441\u0442\u0456
+beat.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043d\u043e\u0442
+composition.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0456\u0457
+repeat.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0443
+transport.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0447\u0430 
+marker.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043e\u043a
+insert.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0432\u0441\u0442\u0430\u0432\u043a\u0438
+layout.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0440\u043e\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043d\u043d\u044f
+view.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434\u0443
+effect.items=\u0415\u043b\u0435\u043c\u0435\u043d\u0442\u0438 \u0435\u0444\u0435\u043a\u0442\u0456\u0432
+dynamic.items=\u0414\u0438\u043d\u0430\u043c\u0456\u0447\u043d\u0456 \u0435\u043b\u0435\u043c\u0435\u043d\u0442\u0438
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=\u041d\u043e\u0432\u0438\u0439 \u0444\u0430\u0439\u043b
+action.file.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0444\u0430\u0439\u043b
+action.file.open-url=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 URL
+action.file.save=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438
+action.file.save-as=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u044f\u043a
+action.file.print=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438
+action.file.print-preview=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u043f\u0435\u0440\u0435\u0433\u043b\u044f\u0434
+action.file.exit=\u0412\u0438\u0439\u0442\u0438 \u0456\u0437 TuxGuitar
+action.edit.undo=\u0412\u0456\u0434\u043c\u0456\u043d\u0438\u0442\u0438
+action.edit.redo=\u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0438
+action.composition.change-time-signature=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0438 \u0447\u0430\u0441\u0443
+action.composition.change-tempo=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0442\u0435\u043c\u043f
+action.composition.change-info=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0456\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0456\u044e \u043f\u0440\u043e \u043f\u0456\u0441\u043d\u044e
+action.composition.change-clef=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u043a\u043b\u044e\u0447
+action.composition.change-key-signature=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0443 \u043a\u043b\u044e\u0447\u0430
+action.composition.change-triplet-feel=\u0417\u043c\u0456\u043d\u0438\u0442\u0438 \u0442\u0440\u0456\u043e\u043b\u0456
+action.view.layout-set-page=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u044f\u043a \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0443
+action.view.layout-set-linear=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u043b\u0456\u043d\u0456\u0439\u043d\u043e
+action.view.layout-set-multitrack=\u0412\u0456\u0434\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u0431\u0430\u0433\u0430\u0442\u043e \u0434\u043e\u0440\u0456\u0436\u043e\u043a
+action.view.layout-set-score-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0443
+action.view.layout-set-tablature-enabled=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0442\u0430\u0431\u0443\u043b\u0430\u0442\u0443\u0440\u0443
+action.view.layout-set-compact=\u041a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e
+action.view.layout-set-chord-diagram-enabled=\u0412\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0434\u0456\u0430\u0433\u0440\u0430\u043c\u0438 \u0430\u043a\u043e\u0440\u0434\u0456\u0432
+action.view.layout-set-chord-name-enabled=\u0412\u0432\u0456\u043c\u043a\u043d\u0443\u0442\u0438 \u0456\u043c\u0435\u043d\u0430 \u0430\u043a\u043e\u0440\u0434\u0456\u0432
+action.view.show-fretboard=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u0433\u0440\u0438\u0444
+action.view.show-piano=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043a\u043b\u0430\u0432\u0456\u0430\u0442\u0443\u0440\u0443
+action.view.show-matrix=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043c\u0430\u0442\u0440\u0438\u0446\u044e
+action.view.show-mixer=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043c\u0456\u043a\u0448\u0435\u0440
+action.view.show-transport=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438 \u043f\u043e\u0433\u0440\u0430\u0432\u0430\u0447
+action.track.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443
+action.track.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443
+action.track.clone=\u0414\u0443\u0431\u043b\u044e\u0432\u0430\u0442\u0438 \u0434\u043e\u0440\u0456\u0436\u043a\u0443
+action.track.go-first=\u041f\u0435\u0440\u0448\u0430 \u0434\u043e\u0440\u0456\u0436\u043a\u0430
+action.track.go-last=\u041e\u0441\u0442\u0430\u043d\u043d\u044f \u0434\u043e\u0440\u0456\u0436\u043a\u0430
+action.track.go-next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u0434\u043e\u0440\u0456\u0436\u043a\u0430
+action.track.go-previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044f \u0434\u043e\u0440\u0456\u0436\u043a\u0430
+action.track.lyrics=\u0422\u0435\u043a\u0441\u0442 \u043f\u0456\u0441\u043d\u0456
+action.track.properties=\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0456 \u0434\u043e\u0440\u0456\u0436\u043a\u0438
+action.track.move-down=\u041f\u0435\u0440\u0435\u0441\u0443\u043d\u0443\u0442\u0438 \u0432\u0433\u043e\u0440\u0443
+action.track.move-up=\u041f\u0435\u0440\u0435\u0441\u0443\u043d\u0443\u0442\u0438 \u0432\u043d\u0438\u0437
+action.measure.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u0442\u0430\u043a\u0442
+action.measure.remove=\u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0430\u043a\u0442
+action.measure.copy=\u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u0442\u0430\u043a\u0442
+action.measure.paste=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0430\u043a\u0442
+action.measure.clean=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0442\u0430\u043a\u0442
+action.measure.go-first=\u041f\u0435\u0440\u0448\u0438\u0439 \u0442\u0430\u043a\u0442
+action.measure.go-last=\u041e\u0441\u0442\u0430\u043d\u043d\u0456\u0439 \u0442\u0430\u043a\u0442
+action.measure.go-next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0442\u0430\u043a\u0442
+action.measure.go-previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u0456\u0439 \u0442\u0430\u043a\u0442
+action.note.general.clean-beat=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0434\u043e\u043b\u044e
+action.note.general.decrement-semitone=\u041f\u0456\u0432\u0442\u043e\u043d\u043e\u043c \u0432\u0438\u0449\u0435
+action.note.general.increment-semitone=\u041f\u0456\u0432\u0442\u043e\u043d\u043e\u043c \u043d\u0438\u0436\u0447\u0435
+action.note.general.shift-down=\u0421\u0442\u0440\u0443\u043d\u043e\u044e \u0432\u0438\u0449\u0435
+action.note.general.shift-up=\u0421\u0442\u0440\u0443\u043d\u043e\u044e \u043d\u0438\u0436\u0447\u0435
+action.note.general.tied=\u0417\u0432'\u044f\u0437\u0430\u043d\u0456/\u041d\u0435\u0437\u0432'\u044f\u0437\u0430\u043d\u0456 \u043d\u043e\u0442\u0438
+action.note.duration.set-whole=\u0426\u0456\u043b\u0430
+action.note.duration.set-half=\u041f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u0430
+action.note.duration.set-quarter=\u0427\u0435\u0442\u0432\u0435\u0440\u0442\u043d\u0430
+action.note.duration.set-eighth=\u0412\u043e\u0441\u044c\u043c\u0430
+action.note.duration.set-sixteenth=\u0428\u0456\u0441\u0442\u043d\u0430\u0434\u0446\u044f\u0442\u0430
+action.note.duration.set-thirty-second=\u0422\u0440\u0438\u0434\u0446\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0430
+action.note.duration.set-sixty-fourth=\u0428\u0456\u0441\u0442\u0434\u0435\u0441\u044f\u0442 \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430
+action.note.duration.change-dotted=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043a\u0440\u0430\u043f\u043a\u0443
+action.note.duration.change-double-dotted=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u043e\u0434\u0432\u0456\u0439\u043d\u0443 \u043a\u0440\u0430\u043f\u043a\u0443
+action.note.duration.change-division-type=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0440\u0438\u043f\u043b\u0435\u0442
+action.note.duration.decrement-duration=\u0417\u043c\u0435\u043d\u0448\u0438\u0442\u0438 \u0442\u0440\u0438\u0432\u0430\u043b\u0456\u0441\u0442\u044c
+action.note.duration.increment-duration=\u0417\u0431\u0456\u043b\u044c\u0448\u0438\u0442\u0438 \u0442\u0440\u0438\u0432\u0430\u043b\u0456\u0441\u0442\u044c
+action.note.effect.change-vibrato=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0432\u0456\u0431\u0440\u0430\u0442\u043e
+action.note.effect.change-bend=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u0434\u0456\u0442\u044f\u0436\u043a\u0443
+action.note.effect.change-slide=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043a\u043e\u0432\u0437\u0430\u043d\u043d\u044f
+action.note.effect.change-hammer=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 hammer-on/pull-off
+action.note.effect.change-accentuated=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0430\u043a\u0446\u0435\u043d\u0442
+action.note.effect.change-dead=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0437\u0430\u0433\u043b\u0443\u0448\u0435\u043d\u0443 \u043d\u043e\u0442\u0443
+action.note.effect.change-fade-in=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 fade in
+action.note.effect.change-ghost=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u0440\u0438\u043c\u0430\u0440\u0443
+action.note.effect.change-grace=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0444\u043e\u0440\u0448\u043b\u0430\u0433
+action.note.effect.change-harmonic=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0444\u043b\u0430\u0436\u043e\u043b\u0435\u0442
+action.note.effect.change-heavy-accentuated=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0441\u0438\u043b\u044c\u043d\u0438\u0439 \u0430\u043a\u0446\u0435\u043d\u0442
+action.note.effect.change-palm-mute=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043f\u0440\u0438\u0433\u043b\u0443\u0448\u0435\u043d\u043d\u044f \u0434\u043e\u043b\u043e\u043d\u0435\u044e
+action.note.effect.change-popping=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 popping
+action.note.effect.change-slapping=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 slapping
+action.note.effect.change-staccato=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0443\u0440\u0438\u0432\u0447\u0430\u0441\u0442\u0456\u0441\u0442\u044c
+action.note.effect.change-tapping=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0435\u043f\u043f\u0456\u043d\u0433
+action.note.effect.change-tremolo-bar=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0432\u0430\u0436\u0456\u043b\u044c \u0442\u0440\u0435\u043c\u043e\u043b\u043e
+action.note.effect.change-tremolo-picking=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0442\u0440\u0435\u043c\u043e\u043b\u043e
+action.note.effect.change-trill=\u0414\u043e\u0434\u0430\u0442\u0438/\u0432\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0422\u0440\u0435\u043b\u044c
+action.insert.open-repeat=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0440\u0435\u043f\u0440\u0438\u0437\u0443
+action.insert.close-repeat=\u0417\u0430\u043a\u0440\u0438\u0442\u0438 \u0440\u0435\u043f\u0440\u0438\u0437\u0443
+action.insert.repeat-alternative=\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430 \u043a\u0456\u043d\u0446\u0456\u0432\u043a\u0430
+action.insert.chord=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0430\u043a\u043e\u0440\u0434
+action.insert.text=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0442\u0435\u043a\u0441\u0442
+action.marker.add=\u0414\u043e\u0434\u0430\u0442\u0438 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0443
+action.marker.go-next=\u041d\u0430\u0441\u0442\u0443\u043f\u043d\u0430 \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0430
+action.marker.go-previous=\u041f\u043e\u043f\u0435\u0440\u0435\u0434\u043d\u044f \u043f\u043e\u0437\u043d\u0430\u0447\u043a\u0430
+action.transport.play=\u0413\u0440\u0430\u0442\u0438 \u043f\u0456\u0441\u043d\u044e
+action.transport.stop=\u0417\u0443\u043f\u0438\u043d\u0438\u0442\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u043d\u043d\u044f
+action.transport.mode=\u0420\u0435\u0436\u0438\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u0432\u0430\u0447\u0430
+action.transport.metronome=\u041c\u0435\u0442\u0440\u043e\u043d\u043e\u043c
+action.tools.browser=\u041f\u0435\u0440\u0433\u043b\u044f\u0434\u0430\u0447
+action.settings.configure=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f
+action.help.doc=\u0414\u043e\u043f\u043e\u043c\u043e\u0433
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_vi.properties b/TuxGuitar-testing/platform-all/share/lang/messages_vi.properties
new file mode 100644
index 0000000..cadfffe
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_vi.properties
@@ -0,0 +1,617 @@
+ok=Ok
+cancel=Th\u00F4i
+yes=C\u00F3
+no=Kh\u00F4ng
+add=Th\u00EAm
+edit=S\u1EEDa
+remove=Xo\u00E1
+save=L\u01B0u
+exit=Tho\u00E1t
+close=\u0110\u00F3ng
+choose=Ch\u1ECDn
+color=M\u00E0u s\u1EAFc
+title=Ti\u00EAu \u0111\u1EC1
+go=Chuy\u1EC3n \u0111\u1EBFn
+warning=C\u1EA3nh b\u00E1o
+error=L\u1ED7i
+plugins=Tr\u00ECnh b\u1ED5 sung
+options=Tu\u1EF3 ch\u1ECDn
+defaults=M\u1EB7c \u0111\u1ECBnh
+clean=D\u1ECDn
+rename=\u0110\u1ED5i t\u00EAn
+fret=Ph\u00EDm \u0111\u00E0n
+position=V\u1ECB tr\u00ED
+name=T\u00EAn
+author=T\u00E1c gi\u1EA3
+version=Phi\u00EAn b\u1EA3n
+description=M\u00F4 t\u1EA3
+info=Th\u00F4ng tin
+configure=C\u1EA5u h\u00ECnh
+
+tuxguitar.title=Tux-Guitar
+
+file=T\u1EADp tin
+file.new=M\u1EDBi
+file.open=M\u1EDF
+file.save=L\u01B0u
+file.save-as=L\u01B0u d\u1EA1ng
+file.save-changes-question=C\u00F3 nhi\u1EC1u thay \u0111\u1ED5i ch\u01B0a l\u01B0u, b\u1EA1n c\u00F3 mu\u1ED1n tho\u00E1t m\u00E0 kh\u00F4ng l\u01B0u ch\u00FAng l\u1EA1i kh\u00F4ng?
+file.exit=Tho\u00E1t
+file.export=Xu\u1EA5t
+file.export-midi=Xu\u1EA5t MIDI
+file.export-pdf=Xu\u1EA5t PDF
+file.print=In
+file.print-preview=Xem th\u1EED
+file.import=Nh\u1EADp
+file.import-midi=Nh\u1EADp Midi
+file.export-ascii=Xu\u1EA5t ASCII
+file.history=\u0110\u00E3 l\u00E0m
+file.open-url=M\u1EDF URL
+file.open.error=Kh\u00F4ng m\u1EDF \u0111\u01B0\u1EE3c: {0}
+file.save.error=Kh\u00F4ng l\u01B0u \u0111\u01B0\u1EE3c: {0}
+file.import.error=Kh\u00F4ng nh\u1EADp \u0111\u01B0\u1EE3c: {0}
+file.export.error=Kh\u00F4ng xu\u1EA5t \u0111\u01B0\u1EE3c: {0}
+file.overwrite-question=T\u1EADp tin n\u00E0y c\u00F3 r\u1ED3i, B\u1EA1n c\u00F3 mu\u1ED1n ghi \u0111\u00E8 l\u00EAn n\u00F3 kh\u00F4ng??
+
+edit.menu=S\u1EEDa
+edit.undo=Hu\u1EF7 b\u01B0\u1EDBc
+edit.redo=L\u00E0m l\u1EA1i
+edit.copy=Ch\u00E9p
+edit.from=T\u1EEB
+edit.to=\u0110\u1EBFn
+edit.all-tracks=M\u1ECDi d\u1EA3i
+edit.paste=D\u00E1n
+edit.paste.replace-mode=D\u00E1n v\u00E0o \u00F4 nh\u1ECBp hi\u1EC7n t\u1EA1i
+edit.paste.insert-mode=D\u00E1n v\u00E0o \u00F4 nh\u1ECBp m\u1EDBi
+edit.delete=Xo\u00E1
+edit.cut=C\u1EAFt
+edit.mouse-mode-selection=Ch\u1EBF \u0111\u1ED9 ch\u1ECDn
+edit.mouse-mode-edition=Ch\u1EBF \u0111\u1ED9 so\u1EA1n th\u1EA3o
+edit.not-natural-key=Ch\u1EBF \u0111\u1ED9 th\u0103ng/gi\u00E1ng
+
+view=Xem
+view.layout=B\u1ED1 tr\u00ED
+view.layout.page=B\u1ED1 tr\u00ED trang
+view.layout.linear=B\u1ED1 tr\u00ED cu\u1ED9n ngang
+view.layout.compact=Thu g\u1ECDn
+view.layout.multitrack=Nhi\u1EC1u d\u1EA3i
+view.layout.chord-style=Ki\u1EC3u h\u1EE3p \u00E2m
+view.layout.chord-name=T\u00EAn h\u1EE3p \u00E2m
+view.layout.chord-diagram=S\u01A1 \u0111\u1ED3 h\u1EE3p \u00E2m
+view.layout.score-enabled=Hi\u1EC7n n\u1ED1t nh\u1EA1c
+view.layout.tablature-enabled=Hi\u1EC7n tab
+view.show-mixer=Hi\u1EC7n b\u1ED9 tr\u1ED9n \u00E2m
+view.show-fretboard=Hi\u1EC7n c\u1EA7n \u0111\u00E0n
+view.show-piano=Hi\u1EC7n piano
+view.show-matrix=Hi\u1EC7n ma tr\u1EADn
+view.show-transport=Hi\u1EC7n b\u1ED9 ph\u00E1t
+
+fretboard.right-mode=Tay ph\u1EA3i
+fretboard.left-mode=Tay tr\u00E1i
+fretboard.background-color=M\u00E0u n\u1EC1n
+fretboard.display-note-text=Hi\u1EC7n t\u00EAn n\u1ED1t
+fretboard.display-scale-text=Hi\u1EC7n t\u00EAn n\u1ED1t tr\u00EAn \u00E2m giai
+fretboard.font=Ph\u00F4ng ch\u1EEF
+fretboard.fretpoint-color=M\u00E0u ph\u00EDm \u0111\u00E0n
+fretboard.note-color=M\u00E0u n\u1ED1t
+fretboard.scale-note-color=M\u00E0u n\u1ED1t thu\u1ED9c \u00E2m giai
+fretboard.settings=Thi\u1EBFt l\u1EADp c\u1EA7n \u0111\u00E0n
+fretboard.string-color=M\u00E0u d\u00E2y
+fretboard.settings.options=Tu\u1EF3 ch\u1ECDn
+
+piano.editor=Ch\u1EC9nh s\u1EEDa piano
+piano.natural-key-color=Natural Key Color
+piano.not-natural-key-color=Unnatural Key Color
+piano.note-color=M\u00E0u n\u1ED1t
+piano.scale-note-color=M\u00E0u n\u1ED1t thu\u1ED9c \u00E2m giai
+piano.settings=Thi\u1EBFt l\u1EADp cho piano
+
+matrix.editor=Ch\u1EC9nh s\u1EEDa ma tr\u1EADn
+matrix.grids=S\u1ED1 \u00F4 \u0111\u1ECBnh v\u1ECB
+matrix.border-color=M\u00E0u vi\u1EC1n
+matrix.font=Ph\u00F4ng ch\u1EEF
+matrix.foreground-color=M\u00E0u tr\u01B0\u1EDBc
+matrix.line-color-1=M\u00E0u h\u00E0ng l\u1EBB
+matrix.line-color-2=M\u00E0u h\u00E0ng ch\u1EB5n
+matrix.line-color-over=M\u00E0u h\u00E0ng d\u01B0\u1EDBi chu\u1ED9t
+matrix.note-color=M\u00E0u n\u1ED1t
+matrix.play-note-color=M\u00E0u n\u1ED1t \u0111ang ph\u00E1t
+matrix.position-color=Position Color
+matrix.settings=Thi\u1EBFt l\u1EADp ma tr\u1EADn
+
+composition=S\u00E1ng t\u00E1c
+composition.timesignature=S\u1ED1 nh\u1ECBp
+composition.timesignature.Numerator=Ch\u1EC9 s\u1ED1 tr\u00EAn
+composition.timesignature.denominator=Ch\u1EC9 s\u1ED1 d\u01B0\u1EDBi
+composition.timesignature.to-the-end=\u0110\u1EBFn h\u1EBFt
+composition.tempo=Nh\u1ECBp \u0111\u1ED9
+composition.tempo-percent=Ph\u1EA7n tr\u0103m
+composition.tempo.invalid=Nh\u1ECBp \u0111\u1ED9 kh\u00F4ng h\u1EE3p l\u1EC7
+composition.tempo.start-to-end=D\u00F9ng nh\u1ECBp \u0111\u1ED9 n\u00E0y \u0111\u1EBFn h\u1EBFt
+composition.tempo.position-to-end=D\u00F9ng nh\u1ECBp \u0111\u1ED9 n\u00E0y t\u1EDBi h\u1EBFt
+composition.tempo.position-to-next=D\u00F9ng nh\u1ECBp \u0111\u1ED9 n\u00E0y \u0111\u1EBFn \u0111\u00E1nh d\u1EA5u nh\u1ECBp \u0111\u1ED9 k\u1EBF ti\u1EBFp
+composition.properties=Thu\u1ED9c t\u00EDnh
+composition.name=T\u00EAn
+composition.artist=Ngh\u1EC7 s\u0129
+composition.album=\u0110\u0129a
+composition.author=T\u00E1c gi\u1EA3
+composition.tripletfeel=Nh\u1ECBp li\u00EAn ba
+composition.clef=Kho\u00E1
+composition.clef.treble=\u00C2m b\u1ED5ng
+composition.clef.bass=Bass
+composition.clef.tenor=Tenor
+composition.clef.alto=Alto
+composition.clef.to-the-end=D\u00F9ng kho\u00E1 n\u00E0y t\u1EDBi h\u1EBFt
+composition.keysignature=K\u00FD hi\u1EC7u kho\u00E1
+composition.keysignature.natural=T\u1EF1 nhi\u00EAn
+composition.keysignature.sharp-1=1 d\u1EA5u th\u0103ng
+composition.keysignature.sharp-2=2 d\u1EA5u th\u0103ng
+composition.keysignature.sharp-3=3 d\u1EA5u th\u0103ng
+composition.keysignature.sharp-4=4 d\u1EA5u th\u0103ng
+composition.keysignature.sharp-5=5 d\u1EA5u th\u0103ng
+composition.keysignature.sharp-6=6 d\u1EA5u th\u0103ng
+composition.keysignature.sharp-7=7 d\u1EA5u th\u0103ng
+composition.keysignature.flat-1=1 d\u1EA5u gi\u00E1ng
+composition.keysignature.flat-2=2 d\u1EA5u gi\u00E1ng
+composition.keysignature.flat-3=3 d\u1EA5u gi\u00E1ng
+composition.keysignature.flat-4=4 d\u1EA5u gi\u00E1ng
+composition.keysignature.flat-5=5 d\u1EA5u gi\u00E1ng
+composition.keysignature.flat-6=6 d\u1EA5u gi\u00E1ng
+composition.keysignature.flat-7=7 d\u1EA5u gi\u00E1ng
+composition.keysignature.to-the-end=D\u00F9ng k\u00FD hi\u1EC7u kho\u00E1 n\u00E0y t\u1EDBi h\u1EBFt
+composition.tripletfeel=Nh\u1ECBp li\u00EAn ba
+composition.tripletfeel.none=Kh\u00F4ng c\u00F3
+composition.tripletfeel.eighth=Li\u00EAn ba \u0111\u01A1n
+composition.tripletfeel.sixteenth=Li\u00EAn ba k\u00E9p
+composition.tripletfeel.to-the-end=D\u00F9ng ki\u1EC3u nh\u1ECBp n\u00E0y t\u1EDBi h\u1EBFt
+
+help=Tr\u1EE3 gi\u00FAp
+help.help=Tr\u1EE3 gi\u00FAp
+help.doc=T\u00E0i li\u1EC7u
+help.about=Gi\u1EDBi thi\u1EC7u
+help.about.license=Gi\u1EA5y ph\u00E9p
+help.about.authors=T\u00E1c gi\u1EA3
+help.about.description=M\u00F4 t\u1EA3
+
+track=D\u1EA3i
+track.number=S\u1ED1
+track.name=T\u00EAn
+track.color=M\u00E0u s\u1EAFc
+track.first=D\u1EA3i \u0111\u1EA7u
+track.last=D\u1EA3i cu\u1ED1i
+track.previous=D\u1EA3i tr\u01B0\u1EDBc
+track.next=D\u1EA3i k\u1EBF
+track.add=Th\u00EAm d\u1EA3i
+track.remove=Xo\u00E1 d\u1EA3i
+track.clone=Nh\u00E2n \u0111\u00F4i d\u1EA3i
+track.move-up=\u0110\u01B0a l\u00EAn
+track.move-down=\u0110\u01B0a xu\u1ED1ng
+track.instrument=Nh\u1EA1c c\u1EE5
+track.properties=Thu\u1ED9c t\u00EDnh
+track.properties.general=Chung
+track.name.default-percussion-name=B\u1ED9 g\u00F5
+track.lyrics=L\u1EDDi
+track.solo=\u0110\u1ED9c t\u1EA5u
+track.mute=C\u00E2m
+
+lyric.editor=So\u1EA1n l\u1EDDi
+
+measure=\u00D4 nh\u1ECBp
+measure.first=\u00D4 nh\u1ECBp \u0111\u1EA7u ti\u00EAn
+measure.last=\u00D4 nh\u1ECBp cu\u1ED1i c\u00F9ng
+measure.previous=\u00D4 nh\u1ECBp tr\u01B0\u1EDBc
+measure.next=\u00D4 nh\u1ECBp k\u1EBF
+measure.add=Th\u00EAm \u00F4 nh\u1ECBp
+measure.add-before-current-position=Th\u00EAm \u00F4 nh\u1ECBp v\u00E0o tr\u01B0\u1EDBc v\u1ECB tr\u00ED hi\u1EC7n t\u1EA1i
+measure.add-after-current-position=Th\u00EAm \u00F4 nh\u1ECBp v\u00E0o sau v\u1ECB tr\u00ED hi\u1EC7n t\u1EA1i
+measure.add-at-end=Th\u00EAm \u00F4 nh\u1ECBp v\u00E0o cu\u1ED1i
+measure.remove=B\u1ECF \u00F4 nh\u1ECBp
+measure.copy=Ch\u00E9p \u00F4 nh\u1ECBp
+measure.paste=D\u00E1n \u00F4 nh\u1ECBp
+measure.clean=Xo\u00E1 \u00F4 nh\u1ECBp
+
+duration=Tr\u01B0\u1EDDng \u0111\u1ED9
+duration.whole=N\u1ED1t tr\u00F2n
+duration.half=N\u1ED1t tr\u1EAFng
+duration.quarter=N\u1ED1t \u0111en
+duration.eighth=M\u00F3c \u0111\u01A1n
+duration.sixteenth=M\u00F3c k\u00E9p
+duration.thirtysecond=M\u00F3c ba
+duration.sixtyfourth=M\u00F3c b\u1ED1n
+duration.dotted=Ch\u1EA5m
+duration.doubledotted=Hai ch\u1EA5m
+duration.division-type=Ch\u00F9m ba
+
+dynamic=C\u01B0\u1EDDng \u0111\u1ED9
+dynamic.piano-pianissimo=C\u1EF1c nh\u1EB9 (ppp)
+dynamic.pianissimo=R\u1EA5t nh\u1EB9 (pp)
+dynamic.piano=Nh\u1EB9 (p)
+dynamic.mezzo-piano=Nh\u1EB9 v\u1EEBa (mp)
+dynamic.mezzo-forte=M\u1EA1nh v\u1EEBa (mf)
+dynamic.forte=M\u1EA1nh (f)
+dynamic.fortissimo=R\u1EA5t m\u1EA1nh (ff)
+dynamic.forte-fortissimo=C\u1EF1c m\u1EA1nh (fff)
+
+effects=Hi\u1EC7u \u1EE9ng
+effects.vibrato=Rung d\u00E2y
+effects.bend=Nh\u00EDu d\u00E2y
+effects.deadnote=N\u1ED1t c\u00E2m
+effects.slide=L\u01B0\u1EDBt
+effects.hammer=G\u00F5/nh\u1EA5c ng\u00F3n
+effects.tremolo-bar=D\u00F9ng c\u1EA7n nh\u00FAn
+effects.tremolo-bar-editor=C\u00E1ch d\u00F9ng c\u1EA7n nh\u00FAn
+effects.tremolo-bar.dip=Xu\u1ED1ng-L\u00EAn
+effects.tremolo-bar.dive=Ch\u1EC9 xu\u1ED1ng
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=L\u00EAn-Xu\u1ED1ng
+effects.tremolo-bar.return=Return
+effects.ghostnote=N\u1ED1t \u0111\u00E1nh nh\u1EB9
+effects.accentuatednote=N\u1ED1t \u0111\u00E1nh r\u00F5
+effects.heavyaccentuatednote=N\u1ED1t \u0111\u00E1nh r\u1EA5t r\u00F5
+effects.harmonic=\u00C2m b\u1ED3i
+effects.grace=N\u1ED1t chuy\u1EC3n
+effects.grace-editor=So\u1EA1n n\u1ED1t chuy\u1EC3n
+effects.grace.before-beat=Before beat
+effects.grace.on-beat=On beat
+effects.grace.transition=Chuy\u1EC3n tay
+effects.grace.transition-none=Kh\u00F4ng
+effects.grace.transition-bend=Nh\u00EDu d\u00E2y
+effects.grace.transition-slide=L\u01B0\u1EDBt d\u00E2y
+effects.grace.transition-hammer=G\u00F5
+effects.trill=L\u00E1y r\u1EC1n
+effects.trill-editor=So\u1EA1n l\u00E1y r\u1EC1n
+effects.tremolo-picking=V\u00EA 1 n\u1ED1t
+effects.tremolo-picking-editor=C\u00E1ch v\u00EA 1 n\u1ED1t
+effects.palm-mute=Ch\u1EB7t tay
+effects.staccato=N\u1ED1t ng\u1EAFt \u00E2m
+effects.tapping=Ch\u1EA5m ng\u00F3n
+effects.slapping=V\u1ED7 d\u00E2y
+effects.popping=M\u00F3c d\u00E2y
+effects.fade-in=To d\u1EA7n
+effects.harmonic-editor=S\u1EEDa \u00E2m b\u1ED3i
+effects.harmonic.type-of-harmonic=Ki\u1EC3u \u00E2m b\u1ED3i
+effects.harmonic.natural=\u00C2m b\u1ED3i t\u1EF1 nhi\u00EAn
+effects.harmonic.artificial=\u00C2m b\u1ED3i nh\u00E2n t\u1EA1o
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=\u00C2m b\u1ED3i do ch\u1EA5m ng\u00F3n
+effects.harmonic.tapped.left-hand=Tay tr\u00E1i
+effects.harmonic.tapped.right-hand=Tay ph\u1EA3i
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=\u00C2m b\u1ED3i n\u1EEDa
+
+bend.editor=S\u1EEDa nh\u00EDu d\u00E2y
+bend.bend=Nh\u00EDu d\u00E2y
+bend.bend-release=Nh\u00EDu/Nh\u1EA3
+bend.bend-release-bend=Nh\u00EDu/Nh\u1EA3/Nh\u00EDu
+bend.prebend=Nh\u00EDu tr\u01B0\u1EDBc
+bend.prebend-release=Nh\u00EDu tr\u01B0\u1EDBc/nh\u1EA3
+
+transport=B\u1ED9 ph\u00E1t
+transport.start=B\u1EAFt \u0111\u1EA7u
+transport.stop=D\u1EEBng
+transport.pause=T\u1EA1m d\u1EEBng
+transport.first=\u0110\u1EA7u
+transport.last=Cu\u1ED1i
+transport.previous=Tr\u01B0\u1EDBc
+transport.next=K\u1EBF
+transport.metronome=D\u1EADm nh\u1ECBp
+transport.mode=Ch\u1EBF \u0111\u1ED9 ph\u00E1t
+transport.mode.simple=Ch\u1EBF \u0111\u1ED9 \u0111\u01A1n gi\u1EA3n
+transport.mode.simple.tempo-percent=Ph\u1EA7n tr\u0103m nh\u1ECBp \u0111\u1ED9
+transport.mode.simple.loop=Ph\u00E1t l\u1EB7p l\u1EA1i
+transport.mode.trainer=T\u1EADp theo
+transport.mode.trainer.increment-description=T\u0103ng l\u00EAn
+
+instruments.volume=Khu\u1EBFch \u0111\u1EA1i
+instrument.volume=\u00C2m l\u01B0\u1EE3ng
+instrument.channel=K\u00EAnh
+instrument.effect-channel=Hi\u1EC7u\u1EE8ng
+instrument.balance=C\u00E2n b\u1EB1ng
+instrument.free=Free
+instrument.link=Li\u00EAn k\u1EBFt
+
+
+repeat.open=M\u1EDF d\u1EA5u l\u1EB7p
+repeat.close=\u0110\u00F3ng d\u1EA5u l\u1EB7p
+repeat.alternative=L\u1EB7p kh\u00E1c \u0111i
+repeat.alternative.editor=S\u1EEDa d\u1EA5u l\u1EB7p kh\u00E1c
+repetitions=Kho\u00E1 l\u1EB7p
+repeat.number-of-repetitions=S\u1ED1 l\u1EA7n l\u1EB7p
+
+beat=Ph\u00E1ch
+beat.clean=Xo\u00E1 nh\u1ECBp
+
+note=N\u1ED1t
+note.semitone-up=L\u00EAn n\u1EEDa cung
+note.semitone-down=Xu\u1ED1ng n\u1EEDa cung
+note.shift-up=D\u1ECBch l\u00EAn
+note.shift-down=D\u1ECBch xu\u1ED1ng
+note.tiednote=N\u1ED1t luy\u1EBFn
+note.deadnote=N\u1ED1t c\u00E2m
+
+insert.chord=Ch\u00E8n h\u1EE3p \u00E2m
+chord.editor=So\u1EA1n h\u1EE3p \u00E2m
+chord=H\u1EE3p \u00E2m
+chord.name=T\u00EAn
+chord.bass=Bass
+chord.custom=H\u1EE3p \u00E2m t\u1EF1 \u0111\u1EB7t
+chord.custom.name-empty-error=Kh\u00F4ng \u0111\u01B0\u1EE3c \u0111\u1EC3 tr\u1ED1ng t\u00EAn h\u1EE3p \u00E2m.
+chord.custom.name-exist-error=T\u00EAn n\u00E0y \u0111\u00E3 \u0111\u01B0\u1EE3c d\u00F9ng r\u1ED3i.
+chord.settings.tip=Thi\u1EBFt l\u1EADp t\u1EF1 ch\u1ECDn
+chord.settings.type=Ki\u1EC3u
+chord.settings.type.most-common=Chung nh\u1EA5t
+chord.settings.type.inversions=Inversions
+chord.settings.type.close-voiced=H\u1EE3p \u00E2m c\u00F3 3 n\u1ED1t c\u00F9ng tr\u00EAn 1 b\u00E1t \u0111\u1ED9
+chord.settings.type.open-voiced=Open Voiced
+chord.settings.open-chords=Open Chords
+chord.settings.chords-to-display=H\u1EE3p \u00E2m s\u1EBD \u0111\u01B0\u1EE3c bi\u1EC3u di\u1EC5n
+chord.settings.search-frets=Search Frets
+chord.settings.minimum-fret=Nh\u1ECF nh\u1EA5t
+chord.settings.maximum-fret=L\u1EDBn nh\u1EA5t
+
+instrument=Nh\u1EA1c c\u1EE5
+instrument.instrument=Nh\u1EA1c c\u1EE5
+instrument.percussion-track=D\u1EA3i cho b\u1ED9 g\u00F5
+
+tuning=L\u00EAn d\u00E2y
+tuning.strings=D\u00E2y
+tuning.offset=Offset
+
+language=Ng\u00F4n ng\u1EEF
+
+choose-color=Ch\u1ECDn m\u00E0u
+
+settings=Thi\u1EBFt l\u1EADp
+settings.config=C\u1EA5u h\u00ECnh TuxGuitar
+settings.config.language=Ng\u00F4n ng\u1EEF
+settings.config.language.choose=Ch\u1ECDn ng\u00F4n ng\u1EEF
+settings.config.styles=Ki\u1EC3u d\u00E1ng
+settings.config.styles.general=Ki\u1EC3u d\u00E1ng chung
+settings.config.styles.printer=Ki\u1EC3u d\u00E1ng in ra
+settings.config.styles.font.default=Ph\u00F4ng m\u1EB7c \u0111\u1ECBnh
+settings.config.styles.font.note=Ph\u00F4ng n\u1ED1t nh\u1EA1c
+settings.config.styles.font.lyric=Ph\u00F4ng cho ph\u1EA7n l\u1EDDi
+settings.config.styles.font.text=Ph\u00F4ng v\u0103n b\u1EA3n
+settings.config.styles.font.time-signature=Ph\u00F4ng cho s\u1ED1 nh\u1ECBp
+settings.config.styles.font.printer-default=Ph\u00F4ng m\u1EB7c \u0111\u1ECBnh d\u00F9ng \u0111\u1EC3 in
+settings.config.styles.font.printer-note=Ph\u00F4ng d\u00F9ng \u0111\u1EC3 in n\u1ED1t
+settings.config.styles.font.printer-time-signature=Ph\u00F4ng d\u00F9ng \u0111\u1EC3 in s\u1ED1 nh\u1ECBp
+settings.config.styles.color.score-note=M\u00E0u n\u1ED1t tr\u00EAn b\u1EA3n nh\u1EA1c
+settings.config.styles.color.tab-note=M\u00E0u n\u1ED1t tr\u00EAn Tab
+settings.config.styles.color.play-note=M\u00E0u n\u1ED1t \u0111ang ph\u00E1t
+settings.config.apply-changes-question=B\u1EA1n c\u00F3 d\u00F9ng c\u00E1c thay \u0111\u1ED5i lu\u00F4n kh\u00F4ng?
+settings.config.sound=\u00C2m thanh
+settings.config.main=Chung
+settings.config.main.window-title=Ti\u00EAu \u0111\u1EC1 c\u1EEDa s\u1ED5
+settings.config.main.window-title.help=C\u00E1c bi\u1EBFn sau t\u01B0\u01A1ng \u0111\u01B0\u01A1ng v\u1EDBi n\u1ED9i dung hi\u1EC3n th\u1ECB tr\u00EAn thanh ti\u00EAu \u0111\u1EC1:
+settings.config.main.window-title.var.description.appname=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi t\u00EAn \u1EE9ng d\u1EE5ng: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi phi\u00EAn b\u1EA3n TuxGuitar
+settings.config.main.window-title.var.description.filename=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi t\u00EAn t\u1EADp tin \u0111ang m\u1EDF
+settings.config.main.window-title.var.description.filepath=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi \u0111\u01B0\u1EDDng d\u1EABn c\u1EE7a t\u1EADp tin \u0111ang m\u1EDF
+settings.config.main.window-title.var.description.songname=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi t\u00EAn b\u00E0i h\u00E1t
+settings.config.main.window-title.var.description.songauthor=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi t\u00E1c gi\u1EA3 b\u00E0i h\u00E1t
+settings.config.main.window-title.var.description.songalbum=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi \u0111\u0129a nh\u1EA1c c\u00F3 b\u00E0i h\u00E1t
+settings.config.main.window-title.var.description.songartist=Bi\u1EBFn n\u00E0y \u1EE9ng v\u1EDBi ngh\u1EC7 s\u0129 tr\u00ECnh b\u00E0y b\u00E0i h\u00E1t
+settings.config.main.options=Tu\u1EF3 ch\u1ECDn
+settings.config.main.splash-enabled=Hi\u1EC3n th\u1ECB m\u00E0n h\u00ECnh ch\u00E0o khi kh\u1EDFi \u0111\u1ED9ng
+settings.config.main.table.auto-size.enabled=Cho ph\u00E9p t\u1EF1 \u0111\u1ED9ng \u0111\u1ECBnh l\u1EA1i k\u00EDch c\u1EE1 b\u1EA3ng
+settings.config.styles.color.lines=M\u00E0u c\u00E1c \u0111\u01B0\u1EDDng k\u1EBB ngang
+settings.config.toolbars=C\u00E1c thanh c\u00F4ng c\u1EE5
+settings.config.toolbars.tip=\u0110\u1EB7t thanh c\u00F4ng c\u1EE5
+settings.config.toolbars.list=C\u00E1c thanh c\u00F4ng c\u1EE5 c\u00F3 s\u1EB5n
+settings.config.toolbars.move-up=\u0110\u01B0a l\u00EAn
+settings.config.toolbars.move-down=\u0110\u01B0a xu\u1ED1ng
+settings.config.skin=Giao di\u1EC7n
+settings.config.skin.choose=Ch\u1ECDn s\u1EAFc th\u00E1i giao di\u1EC7n
+settings.keybindings=C\u1EA5u h\u00ECnh ph\u00EDm t\u1EAFt
+
+key-bindings-editor=So\u1EA1n ph\u00EDm t\u1EAFt
+key-bindings-editor-action-select=Ch\u1ECDn h\u00E0nh \u0111\u1ED9ng
+key-bindings-editor-action-column=H\u00E0nh \u0111\u1ED9ng
+key-bindings-editor-shortcut-column=Ph\u00EDm t\u1EAFt
+key-bindings-editor-push-a-key=Nh\u1EA5n m\u1ED9t ph\u00EDm
+key-bindings-editor-save-question=C\u00F3 nhi\u1EC1u thay \u0111\u1ED5i ch\u01B0a l\u01B0u, b\u1EA1n c\u00F3 mu\u1ED1n tho\u00E1t m\u00E0 kh\u00F4ng l\u01B0u ch\u00FAng l\u1EA1i kh\u00F4ng?
+
+key-bindings-editor-override=\u0110\u00E3 g\u00E1n ph\u00EDm t\u1EAFt n\u00E0y cho h\u00E0nh \u0111\u1ED9ng kh\u00E1c! B\u1EA1n c\u00F3 s\u1EEDa l\u1EA1i kh\u00F4ng?
+
+print.print=In
+print.dialog=In
+print.service=D\u1ECBch v\u1EE5
+print.service.name=T\u00EAn
+print.service.status=Tr\u1EA1ng th\u00E1i
+print.service.type=Ki\u1EC3u
+print.service.info=Th\u00F4ng tin
+print.range=Ph\u1EA1m vi
+print.range.all-pages=T\u1EA5t c\u1EA3
+print.range.pages=Trang
+print.range.pages-to=\u0110\u1EBFn
+print.copies=B\u1EA3n sao
+print.copies-number=S\u1ED1 b\u1EA3n sao
+print.print-to-file=In ra t\u1EADp tin
+print.file-chooser=Ch\u1ECDn
+print-header.default-song-name=V\u00F4 \u0111\u1EC1
+print-header.default-song-author=V\u00F4 danh
+
+print.preview=Xem th\u1EED
+print.preview.page-of=Of
+
+marker=\u0110\u00E1nh d\u1EA5u
+marker.add=Th\u00EAm \u0111\u00E1nh d\u1EA5u
+marker.list=Li\u1EC7t k\u00EA c\u00E1c d\u1EA5u
+marker.first=T\u1EDBi d\u1EA5u \u0111\u1EA7u ti\u00EAn
+marker.last=T\u1EDBi d\u1EA5u cu\u1ED1i c\u00F9ng
+marker.next=T\u1EDBi \u0111\u00E1nh d\u1EA5u k\u1EBF ti\u1EBFp
+marker.previous=T\u1EDBi \u0111\u00E1nh d\u1EA5u tr\u01B0\u1EDBc
+
+export.tablature-enabled=Hi\u1EC7n tab
+export.score-enabled=Hi\u1EC7n b\u1EA3n nh\u1EA1c
+export.chord-name-enabled=Hi\u1EC7n t\u00EAn h\u1EE3p \u00E2m
+export.chord-diagram-enabled=Hi\u1EC7n s\u01A1 \u0111\u1ED3 h\u1EE3p \u00E2m
+
+scale=\u00C2m giai
+scale.list=Li\u1EC7t k\u00EA \u00E2m giai
+
+text.insert=Ch\u00E8n v\u0103n b\u1EA3n
+text.editor=So\u1EA1n th\u1EA3o v\u0103n b\u1EA3n
+text.text=V\u0103n b\u1EA3n
+
+tools=C\u00F4ng c\u1EE5
+tools.scale=Danh s\u00E1ch \u00E2m giai
+tools.browser=B\u1ED9 duy\u1EC7t
+tools.plugins=Tr\u00ECnh b\u1ED5 sung
+tools.shortcuts=C\u00E1c ph\u00EDm t\u1EAFt
+tools.settings=Thi\u1EBFt l\u1EADp
+
+browser.dialog=B\u1ED9 duy\u1EC7t
+browser.menu.file=T\u1EADp tin
+browser.open=M\u1EDF
+browser.exit=Tho\u00E1t
+browser.menu.collection=Tuy\u1EC3n t\u1EADp
+browser.menu.go=Chuy\u1EC3n \u0111\u1EBFn
+browser.collection.select=Ch\u1ECDn th\u01B0 vi\u1EC7n
+browser.collection.open=M\u1EDF
+browser.collection.remove=Xo\u00E1
+browser.collection.close=\u0110\u00F3ng
+browser.collection.new=M\u1EDBi
+browser.go-root=Nh\u00E0
+browser.go-back=L\u00F9i
+browser.refresh=C\u1EADp nh\u1EADt
+browser.factory.fs.name=H\u1EC7 t\u1EADp tin
+browser.collection.fs.name=T\u00EAn
+browser.collection.fs.path=Th\u01B0 m\u1EE5c
+browser.collection.fs.editor-title=L\u1EA5y t\u1EEB h\u1EC7 t\u1EADp tin
+browser.collection.fs.editor-tip=Ch\u1ECDn th\u01B0 m\u1EE5c ch\u1EE9a th\u01B0 vi\u1EC7n b\u1EA3n nh\u1EA1c
+browser.collection.fs.invalid-path=Xin h\u00E3y ch\u1ECDn m\u1ED9t th\u01B0 m\u1EE5c h\u1EE3p l\u1EC7
+
+midi.port=C\u1ED5ng MIDI
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=Kh\u00F4ng c\u00F3.
+plugin.column.name=T\u00EAn tr\u00ECnh b\u1ED5 sung
+plugin.column.enabled=B\u1EADt
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=T\u1EADp tin
+edit.items=S\u1EEDa
+property.items=Thu\u1ED9c t\u00EDnh
+track.items=D\u1EA3i
+duration.items=Tr\u01B0\u1EDDng \u0111\u1ED9
+beat.items=Beat Items
+composition.items=So\u1EA1n nh\u1EA1c
+repeat.items=\u0110\u00E1nh d\u1EA5u l\u1EB7p
+transport.items=Ph\u00E1t l\u1EA1i
+marker.items=\u0110\u00E1nh d\u1EA5u
+insert.items=Ch\u00E8n
+layout.items=B\u1ED1 tr\u00ED
+view.items=Xem
+effect.items=Hi\u1EC7u \u1EE9ng
+dynamic.items=C\u01B0\u1EDDng \u0111\u1ED9
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=T\u1EADp tin m\u1EDBi
+action.file.open=M\u1EDF t\u1EADp tin
+action.file.open-url=M\u1EDF URL
+action.file.save=L\u01B0u
+action.file.save-as=L\u01B0u d\u1EA1ng
+action.file.print=In
+action.file.print-preview=Xem th\u1EED
+action.file.exit=Tho\u00E1t kh\u1ECFi Tux-Guitar
+action.edit.undo=Hu\u1EF7 b\u01B0\u1EDBc
+action.edit.redo=L\u00E0m l\u1EA1i
+action.composition.change-time-signature=\u0110\u1ED5i s\u1ED1 nh\u1ECBp
+action.composition.change-tempo=\u0110\u1ED5i nh\u1ECBp \u0111\u1ED9
+action.composition.change-info=\u0110\u1ED5i th\u00F4ng tin b\u00E0i h\u00E1t
+action.composition.change-clef=\u0110\u1ED5i kho\u00E1
+action.composition.change-key-signature=\u0110\u1ED5i k\u00FD hi\u1EC7u kho\u00E1
+action.composition.change-triplet-feel=\u0110\u1ED5i nh\u1ECBp li\u00EAn ba
+action.view.layout-set-page=B\u1ED1 tr\u00ED trang
+action.view.layout-set-linear=B\u1ED1 tr\u00ED th\u1EB3ng
+action.view.layout-set-multitrack=Hi\u1EC7n nhi\u1EC1u d\u1EA3i
+action.view.layout-set-score-enabled=Hi\u1EC7n n\u1ED1t nh\u1EA1c
+action.view.layout-set-tablature-enabled=Hi\u1EC7n tab
+action.view.layout-set-compact=Ch\u1EBF \u0111\u1ED9 thu g\u1ECDn
+action.view.layout-set-chord-diagram-enabled=B\u1EADt s\u01A1 \u0111\u1ED3 h\u1EE3p \u00E2m
+action.view.layout-set-chord-name-enabled=T\u00EAn h\u1EE3p \u00E2m
+action.view.show-fretboard=Hi\u1EC7n c\u1EA7n \u0111\u00E0n
+action.view.show-piano=Hi\u1EC7n piano
+action.view.show-matrix=Hi\u1EC7n ma tr\u1EADn
+action.view.show-mixer=Hi\u1EC7n b\u1ED9 tr\u1ED9n \u00E2m
+action.view.show-transport=Hi\u1EC7n B\u1ED9 ph\u00E1t
+action.track.add=Th\u00EAm d\u1EA3i
+action.track.remove=Xo\u00E1 d\u1EA3i
+action.track.clone=Sao nguy\u00EAn d\u1EA3i
+action.track.go-first=T\u1EDBi d\u1EA3i \u0111\u1EA7u ti\u00EAn
+action.track.go-last=T\u1EDBi d\u1EA3i cu\u1ED1i c\u00F9ng
+action.track.go-next=T\u1EDBi d\u1EA3i k\u1EBF ti\u1EBFp
+action.track.go-previous=T\u1EDBi d\u1EA3i tr\u01B0\u1EDBc
+action.track.lyrics=So\u1EA1n l\u1EDDi
+action.track.properties=\u0110\u1ED5i thu\u1ED9c t\u00EDnh d\u1EA3i
+action.track.move-down=\u0110\u01B0a d\u1EA3i xu\u1ED1ng
+action.track.move-up=\u0110\u01B0a d\u1EA3i l\u00EAn
+action.measure.add=Th\u00EAm \u00F4 nh\u1ECBp
+action.measure.remove=B\u1ECF \u00F4 nh\u1ECBp
+action.measure.copy=Ch\u00E9p \u00F4 nh\u1ECBp
+action.measure.paste=D\u00E1n \u00F4 nh\u1ECBp
+action.measure.clean=Xo\u00E1 \u00F4 nh\u1ECBp
+action.measure.go-first=T\u1EDBi \u00F4 nh\u1ECBp \u0111\u1EA7u ti\u00EAn
+action.measure.go-last=T\u1EDBi \u00F4 nh\u1ECBp cu\u1ED1i c\u00F9ng
+action.measure.go-next=T\u1EDBi \u00F4 nh\u1ECBp k\u1EBF
+action.measure.go-previous=T\u1EDBi \u00F4 nh\u1ECBp tr\u01B0\u1EDBc
+action.note.general.clean-beat=Xo\u00E1 ph\u00E1ch
+action.note.general.decrement-semitone=Gi\u1EA3m n\u1EEDa cung
+action.note.general.increment-semitone=T\u0103ng n\u1EEDa cung
+action.note.general.shift-down=D\u1ECBch xu\u1ED1ng
+action.note.general.shift-up=D\u1ECBch l\u00EAn
+action.note.general.tied=Th\u00EAm/Xo\u00E1 n\u1ED1t luy\u1EBFn
+action.note.duration.set-whole=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 n\u1ED1t tr\u00F2n
+action.note.duration.set-half=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 n\u1ED1t tr\u1EAFng
+action.note.duration.set-quarter=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 n\u1ED1t \u0111en
+action.note.duration.set-eighth=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 m\u00F3c \u0111\u01A1n
+action.note.duration.set-sixteenth=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 m\u00F3c k\u00E9p
+action.note.duration.set-thirty-second=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 m\u00F3c ba
+action.note.duration.set-sixty-fourth=\u0110\u1EB7t tr\u01B0\u1EDDng \u0111\u1ED9 l\u00E0 m\u00F3c b\u1ED1n
+action.note.duration.change-dotted=Th\u00EAm/Xo\u00E1 ch\u1EA5m
+action.note.duration.change-double-dotted=Th\u00EAm/Xo\u00E1 ch\u1EA5m \u0111\u00F4i
+action.note.duration.change-division-type=Th\u00EAm/Xo\u00E1 ch\u00F9m ba
+action.note.duration.decrement-duration=Gi\u1EA3m tr\u01B0\u1EDDng \u0111\u1ED9
+action.note.duration.increment-duration=T\u0103ng tr\u01B0\u1EDDng \u0111\u1ED9
+action.note.effect.change-vibrato=Th\u00EAm/Xo\u00E1 rung d\u00E2y
+action.note.effect.change-bend=Th\u00EAm/Xo\u00E1 nh\u00EDu d\u00E2y
+action.note.effect.change-slide=Th\u00EAm/Xo\u00E1 l\u01B0\u1EDBt d\u00E2y
+action.note.effect.change-hammer=Th\u00EAm/Xo\u00E1 g\u00F5/nh\u1EA5c ng\u00F3n
+action.note.effect.change-accentuated=Add/Remove accentuated
+action.note.effect.change-dead=Th\u00EAm/Xo\u00E1 n\u1ED1t c\u00E2m
+action.note.effect.change-fade-in=Th\u00EAm/Xo\u00E1 \u0111\u00E1nh to d\u1EA7n
+action.note.effect.change-ghost=Add/Remove ghost
+action.note.effect.change-grace=Th\u00EAm/Xo\u00E1 n\u1ED1t chuy\u1EC3n
+action.note.effect.change-harmonic=Add/Remove harmonic
+action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated
+action.note.effect.change-palm-mute=Add/Remove palm mute
+action.note.effect.change-popping=Th\u00EAm/Xo\u00E1 m\u00F3c d\u00E2y
+action.note.effect.change-slapping=Th\u00EAm/Xo\u00E1 v\u1ED7 d\u00E2y
+action.note.effect.change-staccato=Th\u00EAm/Xo\u00E1 n\u1ED1t ng\u1EAFt \u00E2m
+action.note.effect.change-tapping=Th\u00EAm/Xo\u00E1 ch\u1EA5m ng\u00F3n
+action.note.effect.change-tremolo-bar=D\u00F9ng/Kh\u00F4ng d\u00F9ng c\u1EA7n nh\u00FAn
+action.note.effect.change-tremolo-picking=Th\u00EAm/Xo\u00E1 v\u00EA 1 n\u1ED1t
+action.note.effect.change-trill=Th\u00EAm/Xo\u00E1 l\u00E1y r\u1EC1n
+action.insert.open-repeat=M\u1EDF d\u1EA5u l\u1EB7p
+action.insert.close-repeat=\u0110\u00F3ng d\u1EA5u l\u1EB7p
+action.insert.repeat-alternative=L\u1EB7p kh\u00E1c \u0111i
+action.insert.chord=Ch\u00E8n h\u1EE3p \u00E2m
+action.insert.text=Ch\u00E8n v\u0103n b\u1EA3n
+action.marker.add=Th\u00EAm d\u1EA5u
+action.marker.go-next=T\u1EDBi \u0111\u00E1nh d\u1EA5u k\u1EBF
+action.marker.go-previous=T\u1EDBi \u0111\u00E1nh d\u1EA5u tr\u01B0\u1EDBc
+action.transport.play=Ph\u00E1t
+action.transport.stop=Ng\u1EEBng ph\u00E1t
+action.transport.mode=Ch\u1EBF \u0111\u1ED9 ph\u00E1t
+action.transport.metronome=\u0110\u00E1nh nh\u1ECBp
+action.tools.browser=B\u1ED9 duy\u1EC7t
+action.settings.configure=Thi\u1EBFt l\u1EADp
+action.help.doc=Tr\u1EE3 gi\u00FAp
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_zh_GB.properties b/TuxGuitar-testing/platform-all/share/lang/messages_zh_GB.properties
new file mode 100644
index 0000000..a4847cb
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_zh_GB.properties
@@ -0,0 +1,1237 @@
+###############################################################
+###                  Defaul language codes                  ###
+###############################################################
+zh=\u7B80\u4F53\u4E2D\u6587
+###############################################################
+
+action.composition.change-clef=\u66F4\u6539\u8C31\u53F7
+
+action.composition.change-info=\u4FEE\u6539\u6B4C\u8C31\u4FE1\u606F
+
+action.composition.change-key-signature=\u66F4\u6539\u8C03\u53F7
+
+action.composition.change-tempo=\u66F4\u6539\u8282\u62CD
+
+action.composition.change-time-signature=\u53D8\u6362\u62CD\u5B50
+
+action.composition.change-triplet-feel=\u6539\u53D8\u4E09\u8FDE\u97F3
+
+action.edit.redo=\u91CD\u505A
+
+action.edit.undo=\u53D6\u6D88
+
+action.file.exit=\u9000\u51FATuxGuitar
+
+# ########################
+# ##Key Binding Actions###
+# ########################
+action.file.new=\u65B0\u5EFA
+
+action.file.open=\u6253\u5F00
+
+action.file.open-url=\u6253\u5F00URL
+
+action.file.print=\u6253\u5370
+
+action.file.print-preview=\u6253\u5370\u9884\u89C8
+
+action.file.save=\u4FDD\u5B58
+
+action.file.save-as=\u53E6\u5B58\u4E3A
+
+action.help.doc=\u5E2E\u52A9
+
+action.insert.chord=\u63D2\u5165\u548C\u5F26
+
+action.insert.close-repeat=\u5173\u95ED\u91CD\u590D
+
+action.insert.open-repeat=\u6253\u5F00\u91CD\u590D
+
+action.insert.repeat-alternative=\u91CD\u590D\u9009\u62E9
+
+action.insert.text=\u63D2\u5165\u6587\u672C
+
+action.marker.add=\u52A0\u5165\u6807\u8BB0
+
+action.marker.go-next=\u4E0B\u4E00\u6807\u8BB0
+
+action.marker.go-previous=\u4E0A\u4E00\u6807\u8BB0
+
+action.measure.add=\u6DFB\u52A0\u5C0F\u8282
+
+action.measure.clean=\u6E05\u9664\u5C0F\u8282
+
+action.measure.copy=\u590D\u5236\u5C0F\u8282
+
+action.measure.go-first=\u7B2C\u4E00\u5C0F\u8282
+
+action.measure.go-last=\u6700\u540E\u4E00\u5C0F\u8282
+
+action.measure.go-next=\u4E0B\u4E00\u5C0F\u8282
+
+action.measure.go-previous=\u524D\u4E00\u5C0F\u8282
+
+action.measure.paste=\u7C98\u8D34\u5C0F\u8282
+
+action.measure.remove=\u5220\u9664\u5C0F\u8282
+
+action.note.duration.change-dotted=\u6DFB\u52A0/\u5220\u9664\u9644\u70B9
+
+action.note.duration.change-double-dotted=\u6DFB\u52A0/\u5220\u9664\u53CC\u9644\u70B9
+
+action.note.duration.change-division-type=\u6DFB\u52A0/\u5220\u9664 tupleto
+
+action.note.duration.decrement-duration=\u51CF\u5C11\u65F6\u503C
+
+action.note.duration.increment-duration=\u589E\u52A0\u65F6\u503C
+
+action.note.duration.set-eighth=\u8BBE\u7F6E\u516B\u5206\u97F3\u65F6\u503C
+
+action.note.duration.set-half=\u8BBE\u7F6E\u4E8C\u5206\u97F3\u65F6\u503C
+
+action.note.duration.set-quarter=\u8BBE\u7F6E\u56DB\u5206\u97F3\u65F6\u503C
+
+action.note.duration.set-sixteenth=\u8BBE\u7F6E16\u5206\u97F3\u65F6\u503C
+
+action.note.duration.set-sixty-fourth=\u8BBE\u7F6E64\u5206\u97F3\u65F6\u503C
+
+action.note.duration.set-thirty-second=\u8BBE\u7F6E32\u5206\u97F3\u65F6\u503C
+
+action.note.duration.set-whole=\u8BBE\u7F6E\u5168\u97F3\u65F6\u503C
+
+action.note.effect.change-accentuated=\u6DFB\u52A0/\u79FB\u9664\u91CD\u97F3
+
+action.note.effect.change-bend=\u6DFB\u52A0/\u79FB\u9664\u63A8\u5F26
+
+action.note.effect.change-dead=\u6DFB\u52A0/\u79FB\u9664\u5236\u97F3
+
+action.note.effect.change-fade-in=\u6DFB\u52A0/\u79FB\u9664\u6DE1\u5165
+
+action.note.effect.change-ghost=\u6DFB\u52A0/\u79FB\u9664\u5E7D\u7075\u97F3
+
+action.note.effect.change-grace=\u6DFB\u52A0/\u79FB\u9664\u88C5\u9970\u97F3
+
+action.note.effect.change-hammer=\u6DFB\u52A0/\u79FB\u9664\u5782\u5F26/\u94A9\u5F26
+
+action.note.effect.change-harmonic=\u6DFB\u52A0/\u79FB\u9664\u6CDB\u97F3
+
+action.note.effect.change-heavy-accentuated=\u6DFB\u52A0/\u79FB\u9664\u5F3A\u91CD\u97F3
+
+action.note.effect.change-palm-mute=\u6DFB\u52A0/\u79FB\u9664\u624B\u638C\u5236\u97F3
+
+action.note.effect.change-popping=\u6DFB\u52A0/\u79FB\u9664\u52FE\u5F26
+
+action.note.effect.change-slapping=\u6DFB\u52A0/\u79FB\u9664\u51FB\u5F26
+
+action.note.effect.change-slide=\u6DFB\u52A0/\u79FB\u9664\u6ED1\u5F26
+
+action.note.effect.change-staccato=\u6DFB\u52A0/\u79FB\u9664\u65AD\u97F3
+
+action.note.effect.change-tapping=\u589E\u52A0/\u5220\u9664\u70B9\u5F26
+
+action.note.effect.change-tremolo-bar=\u589E\u52A0/\u5220\u9664\u6447\u6746
+
+action.note.effect.change-tremolo-picking=\u589E\u52A0/\u5220\u9664\u6447\u6746\u62E8\u5F26
+
+action.note.effect.change-trill=\u589E\u52A0/\u5220\u9664\u98A4\u97F3
+
+action.note.effect.change-vibrato=\u589E\u52A0/\u5220\u9664\u632F\u52A8
+
+action.note.general.clean-beat=\u6E05\u9664\u8282\u62CD
+
+action.note.general.decrement-semitone=\u51CF\u5C11\u534A\u97F3
+
+action.note.general.increment-semitone=\u589E\u52A0\u534A\u97F3
+
+action.note.general.shift-down=\u4E0B\u79FB
+
+action.note.general.shift-up=\u4E0A\u79FB
+
+action.note.general.tied=\u589E\u52A0/\u5220\u9664\u8FDE\u97F3
+
+action.settings.configure=\u8BBE\u7F6E
+
+action.tools.browser=\u6D4F\u89C8
+
+action.track.add=\u589E\u52A0
+
+action.track.clone=\u514B\u9686\u58F0\u90E8
+
+action.track.go-first=\u7B2C\u4E00\u58F0\u90E8
+
+action.track.go-last=\u6700\u540E\u58F0\u90E8
+
+action.track.go-next=\u4E0B\u4E00\u58F0\u90E8
+
+action.track.go-previous=\u524D\u4E00\u58F0\u90E8
+
+action.track.lyrics=\u7F16\u8F91\u6B4C\u8BCD
+
+action.track.move-down=\u58F0\u90E8\u4E0B\u79FB
+
+action.track.move-up=\u58F0\u90E8\u4E0A\u79FB
+
+action.track.properties=\u66F4\u6539\u58F0\u90E8\u5C5E\u6027
+
+action.track.remove=\u5220\u9664\u58F0\u90E8
+
+action.transport.metronome=\u8282\u62CD\u5668
+
+action.transport.mode=\u64AD\u653E\u6A21\u5F0F
+
+action.transport.play=\u64AD\u653E
+
+action.transport.stop=\u505C\u6B62
+
+action.view.layout-set-chord-diagram-enabled=\u7F16\u8F91\u548C\u5F26\u56FE
+
+action.view.layout-set-chord-name-enabled=\u7F16\u8F91\u548C\u5F26\u540D
+
+action.view.layout-set-compact=\u7D27\u7F29\u6A21\u5F0F
+
+action.view.layout-set-linear=\u6A2A\u5411\u663E\u793A
+
+action.view.layout-set-multitrack=\u591A\u8F68
+
+action.view.layout-set-page=\u4E50\u8C31\u81EA\u52A8\u6362\u884C
+
+action.view.layout-set-score-enabled=\u663E\u793A\u4E94\u7EBF\u8C31
+
+action.view.layout-set-tablature-enabled=\u663E\u793A\u516D\u7EBF\u8C31
+
+action.view.show-fretboard=\u5409\u5B83\u6307\u677F
+
+action.view.show-matrix=\u97F3\u7B26\u77E9\u9635
+
+action.view.show-mixer=\u58F0\u90E8\u63A7\u5236
+
+action.view.show-piano=\u7434\u952E
+
+action.view.show-transport=\u64AD\u653E\u63A7\u5236
+
+add=\u6DFB\u52A0
+
+author=\u4F5C\u8005
+
+beat=\u97F3\u7B26
+
+beat.clean=\u6E05\u9664
+
+beat.items=\u97F3\u7B26
+
+bend.bend=\u63A8\u5F26
+
+bend.bend-release=\u63A8/\u653E
+
+bend.bend-release-bend=\u63A8/\u653E/\u63A8
+
+bend.editor=\u63A8\u5F26\u7F16\u8F91\u5668
+
+bend.prebend=\u9884\u63A8
+
+bend.prebend-release=\u9884\u63A8/\u653E
+
+browser.collection.close=\u5173\u95ED
+
+browser.collection.fs.editor-tip=\u9009\u62E9\u6587\u4EF6\u5939
+
+browser.collection.fs.editor-title=\u6587\u4EF6\u7CFB\u7EDF
+
+browser.collection.fs.invalid-path=\u8BF7\u8F93\u5165\u6B63\u786E\u7684\u6587\u4EF6\u5939
+
+browser.collection.fs.name=\u540D\u5B57
+
+browser.collection.fs.path=\u6587\u4EF6\u8DEF\u5F84
+
+browser.collection.new=\u65B0\u5EFA
+
+browser.collection.open=\u6253\u5F00
+
+browser.collection.remove=\u5220\u9664
+
+browser.collection.select=\u9009\u62E9\u5E38\u7528\u8DEF\u5F84
+
+browser.dialog=\u6D4F\u89C8
+
+browser.exit=\u9000\u51FA
+
+browser.factory.fs.name=\u6587\u4EF6\u7CFB\u7EDF
+
+browser.go-back=\u540E\u9000
+
+browser.go-root=\u6839\u76EE\u5F55
+
+browser.menu.collection=\u5E38\u7528\u76EE\u5F55
+
+browser.menu.file=\u6587\u4EF6
+
+browser.menu.go=Go
+
+browser.open=\u6253\u5F00
+
+browser.refresh=\u5237\u65B0
+
+cancel=\u53D6\u6D88
+
+choose=\u9009\u62E9
+
+choose-color=\u9009\u62E9\u989C\u8272
+
+chord=\u548C\u5F26
+
+chord.bass=\u8D1D\u53F8
+
+chord.custom=\u81EA\u5B9A\u548C\u5F26
+
+chord.custom.name-empty-error=\u548C\u5F26\u540D\u4E0D\u80FD\u4E3A\u7A7A
+
+chord.custom.name-exist-error=\u548C\u5F26\u660E\u5DF2\u5B58\u5728
+
+chord.editor=\u548C\u5F26\u7F16\u8F91\u5668
+
+chord.name=\u548C\u5F26\u540D\u79F0
+
+chord.settings.chords-to-display=\u548C\u5F26\u663E\u793A
+
+chord.settings.maximum-fret=\u6700\u5927
+
+chord.settings.minimum-fret=\u6700\u5C0F
+
+chord.settings.open-chords=\u6253\u5F00\u548C\u5F26
+
+chord.settings.search-frets=\u67E5\u627E\u54C1
+
+chord.settings.tip=\u81EA\u5B9A\u4E49\u8BBE\u7F6E
+
+chord.settings.type=\u7C7B\u578B
+
+chord.settings.type.close-voiced=Close Voiced
+
+chord.settings.type.inversions=\u56DE\u8F6C
+
+chord.settings.type.most-common=Most Common
+
+chord.settings.type.open-voiced=Open Voiced
+
+clean=\u6E05\u9664
+
+close=\u5173\u95ED
+
+color=\u989C\u8272
+
+composition=\u4E50\u66F2
+
+composition.album=\u4E13\u8F91
+
+composition.artist=\u827A\u672F\u5BB6
+
+composition.author=\u4F5C\u8005
+
+composition.clef=\u8C31\u53F7
+
+composition.clef.alto=\u4E2D\u97F3
+
+composition.clef.bass=\u4F4E\u97F3
+
+composition.clef.tenor=\u6B21\u4E2D\u97F3
+
+composition.clef.to-the-end=\u5E94\u7528\u5F53\u524D\u8C31\u53F7\u5230\u7ED3\u5C3E
+
+composition.clef.treble=\u9AD8\u97F3
+
+composition.items=\u66F2\u76EE
+
+composition.keysignature=\u8C03\u53F7
+
+composition.keysignature.flat-1=\u964D1
+
+composition.keysignature.flat-2=\u964D2
+
+composition.keysignature.flat-3=\u964D3
+
+composition.keysignature.flat-4=\u964D4
+
+composition.keysignature.flat-5=\u964D5
+
+composition.keysignature.flat-6=\u964D6
+
+composition.keysignature.flat-7=\u964D7
+
+composition.keysignature.natural=\u8FD8\u539F
+
+composition.keysignature.sharp-1=\u53471
+
+composition.keysignature.sharp-2=\u53472
+
+composition.keysignature.sharp-3=\u53473
+
+composition.keysignature.sharp-4=\u53474
+
+composition.keysignature.sharp-5=\u53475
+
+composition.keysignature.sharp-6=\u53476
+
+composition.keysignature.sharp-7=\u53477
+
+composition.keysignature.to-the-end=\u5E94\u7528\u5F53\u524D\u8C31\u53F7\u5230\u7ED3\u5C3E
+
+composition.name=\u540D\u5B57
+
+composition.properties=\u5C5E\u6027
+
+composition.tempo=\u8282\u594F
+
+composition.tempo-percent=\u767E\u5206\u6BD4
+
+composition.tempo.invalid=\u9519\u8BEF\u8282\u594F
+
+composition.tempo.position-to-end=\u5E94\u7528\u5F53\u524D\u8282\u594F\u5230\u7ED3\u5C3E
+
+composition.tempo.position-to-next=\u5E94\u7528\u5F53\u524D\u8282\u594F\u5230\u6807\u8BB0
+
+composition.tempo.start-to-end=\u5E94\u7528\u5F53\u524D\u8282\u594F\u5230\u6574\u9996\u4E50\u66F2
+
+composition.timesignature=\u62CD\u5B50
+
+composition.timesignature.Numerator=\u5206\u5B50
+
+composition.timesignature.denominator=\u5206\u6BCD
+
+composition.timesignature.to-the-end=\u5230\u7ED3\u5C3E
+
+composition.tripletfeel=\u8FDE\u97F3
+
+composition.tripletfeel.eighth=\u516B\u5206\u8FDE\u97F3
+
+composition.tripletfeel.none=\u53D6\u6D88\u8FDE\u97F3
+
+composition.tripletfeel.sixteenth=16\u5206\u8FDE\u97F3
+
+composition.tripletfeel.to-the-end=\u5E94\u7528\u8FDE\u97F3\u5230\u7ED3\u5C3E
+
+configure=\u8BBE\u7F6E
+
+defaults=\u9ED8\u8BA4
+
+description=\u63CF\u8FF0
+
+duration=\u97F3\u957F
+
+duration.dotted=\u9644\u70B9
+
+duration.doubledotted=\u53CC\u9644\u70B9
+
+duration.eighth=8\u5206\u97F3\u7B26
+
+duration.half=\u4E8C\u5206\u97F3\u7B26
+
+duration.items=\u97F3\u957F
+
+duration.quarter=\u56DB\u5206\u97F3\u7B26
+
+duration.sixteenth=16\u5206\u97F3\u7B26
+
+duration.sixtyfourth=64\u5206\u97F3\u7B26
+
+duration.thirtysecond=30\u5206\u97F3\u7B26
+
+duration.division-type=\u4E09\u8FDE\u97F3
+
+duration.whole=\u5168\u97F3\u7B26
+
+dynamic=\u529B\u5EA6
+
+dynamic.forte=\u5F3A
+
+dynamic.forte-fortissimo=\u6700\u5F3A
+
+dynamic.fortissimo=\u6781\u5F3A
+
+dynamic.items=\u529B\u5EA6
+
+dynamic.mezzo-forte=\u4E2D\u5F3A
+
+dynamic.mezzo-piano=\u4E2D\u5F31
+
+dynamic.pianissimo=\u6781\u5F31
+
+dynamic.piano=\u5F31
+
+dynamic.piano-pianissimo=\u6700\u5F31
+
+edit=\u7F16\u8F91
+
+edit.all-tracks=\u6240\u6709\u58F0\u90E8
+
+edit.copy=\u62F7\u8D1D
+
+edit.cut=\u526A\u5207
+
+edit.delete=\u5220\u9664
+
+edit.from=\u4ECE
+
+edit.items=\u7F16\u8F91
+
+edit.menu=\u7F16\u8F91
+
+edit.mouse-mode-edition=\u4E50\u8C31\u7F16\u8F91\u6A21\u5F0F
+
+edit.mouse-mode-selection=\u9009\u62E9\u6A21\u5F0F
+
+edit.not-natural-key=\u5347\u8C03/\u964D\u8C03\u6A21\u5F0F
+
+edit.paste=\u7C98\u8D34
+
+edit.paste.insert-mode=\u7C98\u8D34\u5230\u4E0B\u4E00\u62CD
+
+edit.paste.replace-mode=\u7C98\u8D34\u5230\u5F53\u524D\u62CD
+
+edit.redo=\u91CD\u505A
+
+edit.to=\u5230
+
+edit.undo=\u64A4\u9500
+
+effect.items=\u6548\u679C
+
+effects=\u6548\u679C
+
+effects.accentuatednote=\u91CD\u97F3
+
+effects.bend=\u63A8\u5F26
+
+effects.deadnote=\u95F7\u97F3
+
+effects.fade-in=\u6DE1\u5165
+
+effects.ghostnote=\u5E7D\u7075\u97F3
+
+effects.grace=\u88C5\u9970\u97F3
+
+effects.grace-editor=\u88C5\u9970\u97F3\u7F16\u8F91\u5668
+
+effects.grace.before-beat=\u62CD\u524D\u88C5\u9970\u97F3
+
+effects.grace.on-beat=\u62CD\u4E0A\u88C5\u9970\u97F3
+
+effects.grace.transition=\u8FC7\u5EA6\u88C5\u9970\u97F3
+
+effects.grace.transition-bend=\u63A8\u5F26
+
+effects.grace.transition-hammer=\u6376\u5F26
+
+effects.grace.transition-none=\u65E0\u88C5\u9970\u97F3
+
+effects.grace.transition-slide=\u6ED1\u5F26
+
+effects.hammer=\u6376\u5F26/\u94A9\u5F26
+
+effects.harmonic=\u6CDB\u97F3
+
+effects.harmonic-editor=\u6CDB\u97F3\u7F16\u8F91\u5668
+
+effects.harmonic.artificial=\u4EBA\u5DE5\u6CDB\u97F3
+
+effects.harmonic.artificial.key-offset=\u504F\u79FB
+
+effects.harmonic.natural=\u81EA\u7136\u6CDB\u97F3
+
+effects.harmonic.pinch=\u5C16\u53EB(\u62E8\u7247)\u6CDB\u97F3
+
+effects.harmonic.semi=\u534A\u6CDB\u97F3
+
+effects.harmonic.tapped=\u62CD\u5F26\u6CDB\u97F3
+
+effects.harmonic.tapped.left-hand=\u5DE6\u624B\u70B9\u5F26
+
+effects.harmonic.tapped.right-hand=\u53F3\u624B\u70B9\u5F26
+
+effects.harmonic.type-of-harmonic=\u6CDB\u97F3\u7C7B\u578B
+
+effects.heavyaccentuatednote=\u5F3A\u91CD\u97F3
+
+effects.palm-mute=\u624B\u638C\u95F7\u97F3
+
+effects.popping=\u53F3\u624B\u94A9\u5F26
+
+effects.slapping=\u53F3\u624B\u94A9\u5F26
+
+effects.slide=\u6ED1\u5F26
+
+effects.staccato=\u65AD\u97F3
+
+effects.tapping=\u70B9\u5F26
+
+effects.tremolo-bar=\u6447\u6746
+
+effects.tremolo-bar-editor=\u6447\u6746\u7F16\u8F91\u5668
+
+effects.tremolo-bar.dip=\u4E0B\u538B
+
+effects.tremolo-bar.dive=\u538B\u5230\u5E95
+
+effects.tremolo-bar.inverted-dip=\u63D0\u8D77
+
+effects.tremolo-bar.release-down=\u4E0B\u538B\u91CA\u653E
+
+effects.tremolo-bar.release-up=\u62AC\u8D77\u91CA\u653E
+
+effects.tremolo-bar.return=\u6447\u6746\u5F52\u4F4D
+
+effects.tremolo-picking=\u6447\u6746\u98A4\u97F3\u5F39\u594F
+
+effects.tremolo-picking-editor=\u6447\u6746\u98A4\u97F3\u7F16\u8F91\u5668
+
+effects.trill=\u98A4\u97F3
+
+effects.trill-editor=\u98A4\u97F3\u7F16\u8F91\u5668
+
+effects.vibrato=\u632F\u52A8
+
+error=\u9519\u8BEF
+
+exit=\u9000\u51FA
+
+export.chord-diagram-enabled=\u663E\u793A\u548C\u5F26\u56FE
+
+export.chord-name-enabled=\u663E\u793A\u548C\u5F26\u540D
+
+export.score-enabled=\u663E\u793A\u4E94\u7EBF\u8C31
+
+export.tablature-enabled=\u663E\u793A\u516D\u7EBF\u8C31
+
+file=\u6587\u4EF6
+
+file.exit=\u9000\u51FA
+
+file.export=\u5BFC\u51FA
+
+file.export-ascii=\u5BFC\u51FAASCII
+
+file.export-midi=\u5BFC\u51FAMIDI
+
+file.export-pdf=\u5BFC\u51FAPDF
+
+file.export.error=\u4E0D\u80FD\u5BFC\u51FA\: {0}
+
+file.history=\u6700\u8FD1\u6587\u4EF6
+
+file.import=\u5BFC\u5165
+
+file.import-midi=\u5BFC\u5165MIDI
+
+file.import.error=\u4E0D\u80FD\u5BFC\u5165\: {0}
+
+# ########################
+# ##  Tool Bar Items   ###
+# ########################
+file.items=File Items
+
+file.new=\u65B0\u5EFA
+
+file.open=\u6253\u5F00
+
+file.open-url=\u6253\u5F00URL
+
+file.open.error=\u4E0D\u80FD\u6253\u5F00\: {0}
+
+file.overwrite-question=\u6587\u4EF6\u5DF2\u5B58\u5728.\u662F\u5426\u8986\u76D6\u73B0\u6709\u6587\u4EF6?
+
+file.print=\u6253\u5370
+
+file.print-preview=\u6253\u5370\u9884\u89C8
+
+file.save=\u4FDD\u5B58
+
+file.save-as=\u53E6\u5B58\u4E3A
+
+file.save-changes-question=\u66F2\u8C31\u8FD8\u672A\u4FDD\u5B58.\n\u5E0C\u671B\u4FDD\u5B58\u6240\u505A\u4FEE\u6539\u5417?
+
+file.save.error=\u4E0D\u80FD\u4FDD\u5B58\: {0}
+
+fret=\u54C1
+
+fretboard.background-color=\u6307\u677F\u989C\u8272
+
+fretboard.display-note-text=\u663E\u793A\u6CE8\u91CA\u6587\u672C
+
+fretboard.display-scale-text=\u663E\u793A\u97F3\u9636\u6587\u5B57
+
+fretboard.font=\u5B57\u4F53
+
+fretboard.fretpoint-color=\u54C1\u989C\u8272
+
+fretboard.left-mode=\u5DE6\u624B
+
+fretboard.note-color=\u97F3\u7B26\u989C\u8272
+
+fretboard.right-mode=\u53F3\u624B
+
+fretboard.scale-note-color=\u97F3\u9636\u97F3\u7B26\u989C\u8272
+
+fretboard.settings=\u6307\u677F\u8BBE\u7F6E
+
+fretboard.settings.options=\u9009\u9879
+
+fretboard.string-color=\u7434\u5F26\u989C\u8272
+
+go=Go
+
+help=\u5E2E\u52A9
+
+help.about=\u5173\u4E8E
+
+help.about.authors=\u4F5C\u8005
+
+help.about.description=\u63CF\u8FF0
+
+help.about.license=\u8BB8\u53EF\u8BC1
+
+help.doc=\u6587\u6863
+
+help.help=\u5E2E\u52A9
+
+info=\u4FE1\u606F
+
+insert.chord=\u63D2\u5165\u548C\u5F26
+
+insert.items=\u63D2\u5165
+
+instrument=\u4E50\u5668
+
+instrument.instrument=\u4E50\u5668
+
+instrument.percussion-track=\u6253\u51FB\u4E50\u58F0\u90E8
+
+key-bindings-editor=\u5FEB\u6377\u952E\u7F16\u8F91\u5668
+
+key-bindings-editor-action-column=\u52A8\u4F5C
+
+key-bindings-editor-action-select=\u9009\u62E9\u52A8\u4F5C
+
+key-bindings-editor-override=\u5FEB\u6377\u952E\u51B2\u7A81\!\u786E\u5B9A\u4F7F\u7528?
+
+key-bindings-editor-push-a-key=\u8BF7\u6309\u952E
+
+key-bindings-editor-save-question=\u4FEE\u6539\u8FD8\u672A\u4FDD\u5B58,\u73B0\u5728\u4FDD\u5B58\u4E48?
+
+key-bindings-editor-shortcut-column=\u6309\u952E
+
+language=\u8BED\u8A00
+
+layout.items=\u5E03\u5C40
+
+lyric.editor=\u6B4C\u8BCD\u7F16\u8F91\u5668
+
+marker=\u7F16\u8F91
+
+marker.add=\u52A0\u5165\u6807\u8BB0
+
+marker.first=\u5230\u7B2C\u4E00\u4E2A\u6807\u8BB0
+
+marker.items=\u6807\u8BB0
+
+marker.last=\u5230\u6700\u540E\u4E00\u4E2A\u6807\u8BB0
+
+marker.list=\u6807\u8BB0\u5217\u8868
+
+marker.next=\u5230\u4E0B\u4E00\u4E2A\u6807\u8BB0
+
+marker.previous=\u5230\u524D\u4E00\u4E2A\u6807\u8BB0
+
+matrix.border-color=\u8FB9\u6846\u989C\u8272
+
+matrix.editor=\u7F16\u8F91\u5668
+
+matrix.font=\u5B57\u4F53
+
+matrix.foreground-color=\u524D\u666F\u8272
+
+matrix.grids=\u683C\u5B50\u6570
+
+matrix.line-color-1=\u5076\u6570\u884C\u989C\u8272
+
+matrix.line-color-2=\u5947\u6570\u884C\u989C\u8272
+
+matrix.line-color-over=\u9F20\u6807\u4E0B\u9762\u884C\u989C\u8272
+
+matrix.note-color=\u97F3\u7B26\u989C\u8272
+
+matrix.play-note-color=\u5F53\u524D\u97F3\u7B26\u989C\u8272
+
+matrix.position-color=\u5F53\u524D\u4F4D\u7F6E\u989C\u8272
+
+matrix.settings=\u8BBE\u7F6E
+
+measure=\u5C0F\u8282
+
+measure.add=\u65B0\u589E\u5C0F\u8282
+
+measure.add-after-current-position=\u5F53\u524D\u5C0F\u8282\u540E\u65B0\u589E
+
+measure.add-at-end=\u58F0\u90E8\u672B\u5C3E\u6DFB\u52A0
+
+measure.add-before-current-position=\u5F53\u524D\u5C0F\u8282\u524D\u65B0\u589E
+
+measure.clean=\u6E05\u9664\u5C0F\u8282
+
+measure.copy=\u62F7\u8D1D\u5C0F\u8282
+
+measure.first=\u7B2C\u4E00\u5C0F\u8282
+
+measure.last=\u6700\u540E\u4E00\u5C0F\u8282
+
+measure.next=\u4E0B\u4E00\u5C0F\u8282
+
+measure.paste=\u7C98\u8D34\u4E00\u5C0F\u8282
+
+measure.previous=\u524D\u9762\u5C0F\u8282
+
+measure.remove=\u5220\u9664\u5C0F\u8282
+
+midi.port=MIDI \u7AEF\u53E3
+
+midi.sequencer=MIDI \u97F3\u5E8F\u5668
+
+mixer=\u6DF7\u97F3\u5668
+
+instrument.balance=\u5E73\u8861
+
+instrument.channel=CH
+
+instrument.effect-channel=EC
+
+instrument.free=\u7A7A\u95F2
+
+instrument.link=\u8FDE\u63A5
+
+instrument.volume=\u97F3\u91CF
+
+instruments.volume=\u4E3B\u97F3\u91CF
+
+name=\u540D\u5B57
+
+no=\u5426
+
+note=\u97F3\u7B26
+
+note.deadnote=\u95F7\u97F3
+
+note.semitone-down=\u964D\u534A\u97F3
+
+note.semitone-up=\u5347\u534A\u97F3
+
+note.shift-down=\u4E0B\u79FB
+
+note.shift-up=\u4E0A\u79FB
+
+note.tiednote=\u8FDE\u97F3
+
+ok=\u786E\u5B9A
+
+options=\u9009\u9879
+
+piano.editor=\u94A2\u7434\u7F16\u8F91\u5668
+
+piano.natural-key-color=\u767D\u952E\u989C\u8272
+
+piano.not-natural-key-color=\u9ED1\u952E\u989C\u8272
+
+piano.note-color=\u97F3\u7B26\u989C\u8272
+
+piano.scale-note-color=\u97F3\u9636\u7B26\u53F7\u989C\u8272
+
+piano.settings=\u94A2\u7434\u8BBE\u7F6E
+
+plugin.column.enabled=\u5141\u8BB8
+
+plugin.column.name=\u63D2\u4EF6\u540D\u79F0
+
+plugin.unknown-value=\u4E0D\u53EF\u7528
+
+plugins=\u63D2\u4EF6
+
+position=\u4F4D\u7F6E
+
+print-header.default-song-author=\u533F\u540D
+
+print-header.default-song-name=\u672A\u547D\u540D
+
+print.copies=\u6253\u5370
+
+print.copies-number=\u6253\u5370\u4EFD\u6570
+
+print.dialog=\u6253\u5370
+
+print.file-chooser=\u9009\u62E9
+
+print.preview=\u6253\u5370\u9884\u89C8
+
+print.preview.page-of=\u5171
+
+print.print=\u6253\u5370
+
+print.print-to-file=\u6253\u5370\u5230\u6587\u4EF6
+
+print.range=\u8303\u56F4
+
+print.range.all-pages=\u5168\u90E8
+
+print.range.pages=\u9875\u9762
+
+print.range.pages-to=\u5230
+
+print.service=\u670D\u52A1
+
+print.service.info=\u4FE1\u606F
+
+print.service.name=\u540D\u79F0
+
+print.service.status=\u72B6\u6001
+
+print.service.type=\u7C7B\u578B
+
+property.items=\u5C5E\u6027
+
+remove=\u5220\u9664
+
+rename=\u6539\u540D
+
+repeat.alternative=\u53EF\u53D8\u53CD\u590D\u6807\u8BB0
+
+repeat.alternative.editor=\u7F16\u8F91\u53EF\u53D8\u53CD\u590D
+
+repeat.close=\u53CD\u590D\u7ED3\u675F
+
+repeat.items=\u53CD\u590D
+
+repeat.number-of-repetitions=\u53CD\u590D\u6B21\u6570
+
+repeat.open=\u53CD\u590D\u5F00\u59CB
+
+repetitions=\u53CD\u590D
+
+save=\u4FDD\u5B58
+
+scale=\u97F3\u9636
+
+scale.list=\u97F3\u9636\u5217\u8868
+
+settings=\u8BBE\u7F6E
+
+settings.config=\u8BBE\u7F6ETuxGuitar
+
+settings.config.apply-changes-question=\u73B0\u5728\u5E94\u7528\u8BBE\u7F6E?
+
+settings.config.language=\u8BED\u8A00
+
+settings.config.language.choose=\u9009\u62E9\u8BED\u8A00\u5305
+
+settings.config.main=\u5E38\u7528\u4FE1\u606F
+
+settings.config.main.options=\u9009\u9879
+
+settings.config.main.splash-enabled=\u663E\u793A\u6B22\u8FCE\u754C\u9762
+
+settings.config.main.table.auto-size.enabled=\u5141\u8BB8\u81EA\u52A8\u62C9\u4F38
+
+settings.config.main.window-title=\u7A97\u53E3\u6807\u9898
+
+settings.config.main.window-title.help=\u4E0B\u9762\u7684\u4FE1\u606F\u4F1A\u663E\u793A\u5728\u7A97\u53E3\u6807\u9898\:
+
+settings.config.main.window-title.var.description.appname=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u672C\u7A0B\u5E8F\u540D\u5B57\:TuxGuitar
+
+settings.config.main.window-title.var.description.appversion=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u672C\u7A0B\u5E8F\u7248\u672C\u53F7
+
+settings.config.main.window-title.var.description.filename=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u6587\u4EF6\u540D
+
+settings.config.main.window-title.var.description.filepath=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u8DEF\u5F84
+
+settings.config.main.window-title.var.description.songalbum=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u6B4C\u66F2\u540D
+
+settings.config.main.window-title.var.description.songartist=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u827A\u672F\u5BB6
+
+settings.config.main.window-title.var.description.songauthor=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u8C31\u4F5C\u8005
+
+settings.config.main.window-title.var.description.songname=\u8FD9\u4E2A\u53D8\u91CF\u8868\u793A\u5F53\u524D\u4E50\u66F2\u540D\u5B57
+
+settings.config.skin=\u76AE\u80A4
+
+settings.config.skin.choose=\u9009\u62E9\u76AE\u80A4
+
+settings.config.sound=\u58F0\u97F3
+
+settings.config.styles=\u98CE\u683C
+
+settings.config.styles.color.lines=\u6C34\u5E73\u7EBF\u989C\u8272
+
+settings.config.styles.color.play-note=\u64AD\u653E\u4E2D\u7684\u97F3\u7B26\u989C\u8272
+
+settings.config.styles.color.score-note=\u4E94\u7EBF\u8C31\u97F3\u7B26\u989C\u8272
+
+settings.config.styles.color.tab-note=\u516D\u7EBF\u8C31\u97F3\u7B26\u989C\u8272
+
+settings.config.styles.font.default=\u9ED8\u8BA4\u5B57\u4F53
+
+settings.config.styles.font.lyric=\u6B4C\u8BCD\u5B57\u4F53
+
+settings.config.styles.font.note=\u97F3\u7B26\u5B57\u4F53
+
+settings.config.styles.font.printer-default=\u6253\u5370\u9ED8\u8BA4\u5B57\u4F53
+
+settings.config.styles.font.printer-note=\u6253\u5370\u97F3\u7B26\u5B57\u4F53
+
+settings.config.styles.font.printer-time-signature=\u6253\u5370\u62CD\u5B50\u5B57\u4F53
+
+settings.config.styles.font.text=\u6587\u672C\u5B57\u4F53
+
+settings.config.styles.font.time-signature=\u62CD\u5B50\u5B57\u4F53
+
+settings.config.styles.general=\u9ED8\u8BA4\u6837\u5F0F
+
+settings.config.styles.printer=\u6253\u5370\u6837\u5F0F
+
+settings.config.toolbars=\u5DE5\u5177\u680F
+
+settings.config.toolbars.list=\u53EF\u7528\u5DE5\u5177\u680F\u5217\u8868
+
+settings.config.toolbars.move-down=\u4E0B\u79FB
+
+settings.config.toolbars.move-up=\u4E0A\u79FB
+
+settings.config.toolbars.tip=\u81EA\u5B9A\u4E49\u5DE5\u5177\u680F
+
+settings.keybindings=\u5FEB\u6377\u952E\u8BBE\u7F6E
+
+text.editor=\u6587\u672C\u7F16\u8F91\u5668
+
+text.insert=\u63D2\u5165\u6587\u672C
+
+text.text=\u6587\u672C
+
+title=\u6807\u9898
+
+tools=\u5DE5\u5177
+
+tools.browser=\u6D4F\u89C8\u5E38\u7528\u6587\u4EF6\u5939
+
+tools.plugins=\u63D2\u4EF6
+
+tools.scale=\u97F3\u9636\u5217\u8868
+
+tools.settings=\u8BBE\u7F6E
+
+tools.shortcuts=\u5FEB\u6377\u952E
+
+track=\u591A\u8F68
+
+track.add=\u6DFB\u52A0\u58F0\u90E8
+
+track.clone=\u58F0\u90E8\u62F7\u8D1D
+
+track.color=\u989C\u8272
+
+track.first=\u7B2C\u4E00\u58F0\u90E8
+
+track.instrument=\u5668\u4E50 
+
+track.items=\u58F0\u90E8
+
+track.last=\u6700\u672B\u58F0\u90E8
+
+track.lyrics=\u6B4C\u8BCD
+
+track.move-down=\u4E0B\u79FB
+
+track.move-up=\u4E0A\u79FB
+
+track.name=\u540D\u79F0
+
+track.name.default-percussion-name=\u6253\u51FB\u4E50\u5668
+
+track.next=\u4E0B\u4E00\u58F0\u90E8
+
+track.number=\u58F0\u90E8\u7F16\u53F7
+
+track.previous=\u524D\u4E00\u58F0\u90E8
+
+track.properties=\u5C5E\u6027
+
+track.properties.general=\u5E38\u7528
+
+track.remove=\u5220\u9664\u58F0\u90E8
+
+track.mute=\u65E0\u58F0
+
+track.solo=\u72EC\u594F
+
+transport=\u64AD\u653E\u5668
+
+transport.first=\u7B2C\u4E00\u5C0F\u8282
+
+transport.items=\u64AD\u653E\u5668
+
+transport.last=\u6700\u540E\u5C0F\u8282
+
+transport.metronome=\u8282\u62CD\u5668
+
+transport.mode=\u6F14\u594F\u6A21\u5F0F
+
+transport.mode.simple=\u7B80\u5355\u91CD\u590D
+
+transport.mode.simple.loop=\u91CD\u590D\u64AD\u653E
+
+transport.mode.simple.tempo-percent=\u901F\u5EA6\u53D8\u5316
+
+transport.mode.trainer=\u7EC3\u4E60\u6A21\u5F0F
+
+transport.mode.trainer.increment-description=\u6BCF\u6B21\u589E\u52A0
+
+transport.next=\u4E0B\u4E00\u5C0F\u8282
+
+transport.pause=\u6682\u505C
+
+transport.previous=\u524D\u4E00\u5C0F\u8282
+
+transport.start=\u64AD\u653E
+
+transport.stop=\u505C\u6B62
+
+tuning=\u5B9A\u8C03
+
+tuning.offset=\u53D8\u8C03\u5939
+
+tuning.strings=\u5F26\u6570
+
+url=URL
+
+version=\u7248\u672C
+
+view=\u67E5\u770B
+
+view.items=\u67E5\u770B
+
+view.layout=\u5E03\u5C40
+
+view.layout.chord-diagram=\u548C\u5F26\u56FE
+
+view.layout.chord-name=\u548C\u5F26\u540D
+
+view.layout.chord-style=\u548C\u5F26\u6837\u5F0F
+
+view.layout.compact=\u7D27\u7F29\u6A21\u5F0F
+
+view.layout.linear=\u6A2A\u5411\u6EDA\u52A8
+
+view.layout.multitrack=\u591A\u8F68
+
+view.layout.page=\u9875\u5E03\u5C40
+
+view.layout.score-enabled=\u663E\u793A\u4E94\u7EBF\u8C31
+
+view.layout.tablature-enabled=\u663E\u793A\u516D\u7EBF\u8C31
+
+view.show-fretboard=\u663E\u793A\u6307\u677F
+
+view.show-matrix=\u663E\u793A\u97F3\u7B26\u77E9\u9635
+
+view.show-mixer=\u663E\u793A\u6DF7\u97F3\u5668
+
+view.show-piano=\u663E\u793A\u7434\u952E
+
+view.show-transport=\u663E\u793A\u65F6\u95F4\u8F74
+
+warning=\u8B66\u544A
+
+yes=\u662F
+
+###############################
+### Changes from 1.0 to 1.1 ###
+###############################
+edit.voice-1=\u9009\u62E9\u4EA4\u9519\u62CD\u5B501
+edit.voice-2=\u9009\u62E9\u4EA4\u9519\u62CD\u5B502
+
+beat.voice.remove-unused=\u5220\u9664\u672A\u7528\u4EA4\u9519\u62CD\u5B50
+beat.voice-up=\u5347\u9AD8
+beat.voice-down=\u964D\u4F4E
+beat.voice-auto=\u81EA\u52A8
+
+beat.stroke-up=\u4E0A\u63A8\u5F26
+beat.stroke-down=\u4E0B\u63A8\u5F26
+
+## Shortcut Names
+action.edit.voice-1=\u9009\u62E9\u4EA4\u9519\u62CD\u5B501
+action.edit.voice-2=\u9009\u62E9\u4EA4\u9519\u62CD\u5B502
+
+action.beat.general.remove-unused-voice=\u5220\u9664\u672A\u7528\u4EA4\u9519\u62CD\u5B50
+action.beat.general.voice-up=\u8BBE\u7F6E\u5347\u9AD8
+action.beat.general.voice-down=\u8BBE\u7F6E\u964D\u4F4E
+action.beat.general.voice-auto=\u81EA\u52A8
+
+action.beat.general.set-stroke-up=\u8BBE\u7F6E\u4E0A\u63A8\u5F26
+action.beat.general.set-stroke-down=\u8BBE\u7F6E\u4E0B\u63A8\u5F26
+
+###############################
+### Changes from 1.1 to 1.2 ###
+###############################
+transport.mode.loop-range=\u5FAA\u73AF\u533A\u95F4
+transport.mode.loop-range.from=\u4ECE\u5F53\u524D\u5C0F\u8282\u5F00\u59CB\u64AD\u653E
+transport.mode.loop-range.from-default=\u4ECE\u5934\u64AD\u653E
+transport.mode.loop-range.to=\u64AD\u653E\u5230\u5F53\u524D\u5C0F\u8282
+transport.mode.loop-range.to-default=\u4E00\u76F4\u5230\u7ED3\u675F
+
+
+tools.transpose=\u53D8\u8C03
+tools.transpose.semitones=\u8F6C\u6362\u534A\u97F3
+tools.transpose.apply-to-track=\u8F6C\u6362\u6240\u6709\u5C0F\u8282
+tools.transpose.apply-to-measure=\u53EA\u8F6C\u6362\u5F53\u524D\u5C0F\u8282
+tools.transpose.apply-to-all-tracks=\u5E94\u7528\u6240\u6709\u97F3\u8F68
+tools.transpose.try-keep-strings=\u5C3D\u91CF\u4FDD\u6301\u6240\u6709\u97F3\u7B26\u5728\u540C\u4E00\u5F26\u4E0A
+tools.transpose.apply-to-chords=\u8F6C\u6362\u548C\u5F26
+
+action.tools.transpose=\u97F3\u7B26\u53D8\u8C03
+
+tuning.strings.transpose=\u8F6C\u6362\u53D7\u5F71\u54CD\u97F3\u7B26
+tuning.strings.transpose.try-keep-strings=\u4FDD\u6301\u6240\u6709\u97F3\u7B26\u5728\u540C\u4E00\u5F26\u4E0A
+tuning.strings.transpose.apply-to-chords=\u8F6C\u6362\u548C\u5F26
+
+composition.date=\u65E5\u671F
+composition.copyright=\u7248\u6743\u4FE1\u606F
+composition.writer=\u66F2\u8C31\u4F5C\u8005
+composition.transcriber=\u6539\u7F16
+composition.comments=\u6CE8\u91CA
+
+beat.move-left=\u5DE6\u79FB\u4E00\u62CD
+beat.move-right=\u53F3\u79FB\u4E00\u62CD
+beat.move-custom=\u81EA\u5B9A\u4E49\u62CD\u5B50\u79FB\u52A8
+beat.move-custom.dialog.title=\u81EA\u5B9A\u4E49
+beat.move-custom.dialog.direction-tip=\u79FB\u52A8\u65B9\u5411
+beat.move-custom.dialog.move-1.tip=\u79FB\u52A8\u65B9\u5F0F\u4E00
+beat.move-custom.dialog.move-2.tip=\u79FB\u52A8\u65B9\u5F0F\u4E8C
+beat.move-custom.dialog.direction=\u65B9\u5411
+beat.move-custom.dialog.direction.right=\u53F3\u79FB
+beat.move-custom.dialog.direction.left=\u5DE6\u79FB
+beat.move-custom.dialog.count=\u6570\u91CF
+beat.move-custom.dialog.duration=\u65F6\u503C
+beat.move-custom.dialog.duration.type=\u7B26\u70B9/\u53CC\u7B26\u70B9
+beat.move-custom.dialog.duration.type.normal=\u65E0
+beat.move-custom.dialog.duration.division-type=\u5207\u5206\u65B9\u5F0F
+beat.move-custom.dialog.duration.division-type.normal=\u666E\u901A(\u4E09\u8FDE\u97F3)
+
+action.beat.general.move-left=\u5DE6\u79FB\u4E00\u62CD
+action.beat.general.move-right=\u53F3\u79FB\u4E00\u62CD
+action.beat.general.move-custom=\u81EA\u5B9A\u4E49\u62CD\u5B50\u79FB\u52A8
+
+measure.add.count=\u6DFB\u52A0\u5C0F\u8282\u6570
+edit.paste.count=\u7C98\u8D34\u5C0F\u8282\u6570
+
+export.black-and-white=\u5355\u8272\u6A21\u5F0F
+
+fretboard.direction=\u65B9\u5411
+
+transport.set-loop-start=\u8BBE\u7F6E\u5FAA\u73AF\u8D77\u59CB\u70B9
+transport.set-loop-end=\u8BBE\u7F6E\u5FAA\u73AF\u7ED3\u675F\u70B9
+
+action.transport.set-loop-start=\u8BBE\u7F6E\u5FAA\u73AF\u8D77\u59CB\u70B9
+action.transport.set-loop-end=\u8BBE\u7F6E\u5FAA\u73AF\u7ED3\u675F\u70B9
diff --git a/TuxGuitar-testing/platform-all/share/lang/messages_zh_TW.properties b/TuxGuitar-testing/platform-all/share/lang/messages_zh_TW.properties
new file mode 100644
index 0000000..75514ef
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/messages_zh_TW.properties
@@ -0,0 +1,719 @@
+ok=\u78ba\u5b9a
+cancel=\u53d6\u6d88
+yes=\u662f
+no=\u5426
+add=\u65b0\u589e
+edit=\u7de8\u8f2f
+remove=\u79fb\u9664
+save=\u5132\u5b58
+exit=\u96e2\u958b
+close=\u95dc\u9589
+choose=\u9078\u64c7
+color=\u984f\u8272
+title=\u6a19\u984c
+go=\u524d\u5f80
+warning=\u8b66\u544a
+error=\u932f\u8aa4
+plugins=\u5916\u639b
+options=\u9078\u9805
+defaults=\u9810\u8a2d
+clean=\u6e05\u9664
+rename=\u91cd\u65b0\u547d\u540d
+fret=\u7434\u683c
+position=\u4f4d\u7f6e
+name=\u59d3\u540d
+author=\u4f5c\u8005
+version=\u7248\u672c
+description=\u8aaa\u660e
+info=\u8cc7\u8a0a
+configure=\u7d44\u614b
+url=\u8d85\u9023\u7d50(URL)
+metronome=\u7bc0\u62cd\u5668
+
+tuxguitar.title=Tux-Guitar\u4f01\u9d5d\u5f48\u5409\u4ed6
+
+file=\u6a94\u6848
+file.new=\u958b\u65b0\u6a94\u6848
+file.open=\u958b\u555f\u820a\u6a94
+file.save=\u5132\u5b58\u6a94\u6848
+file.save-as=\u53e6\u5b58\u65b0\u6a94
+file.save-changes-question=\u9019\u9996\u66f2\u5b50\u6709\u5c1a\u672a\u5132\u5b58\u7684\u4fee\u6539.\n\u4f60\u8981\u5132\u5b58\u9019\u4e9b\u6539\u8b8a\u55ce?
+file.exit=\u96e2\u958b
+file.export=\u8f38\u51fa
+file.export-midi=\u8f38\u51fa\u6210MIDI
+file.export-pdf=\u8f38\u51fa\u6210 PDF
+file.print=\u5217\u5370
+file.print-preview=\u9810\u89bd\u5217\u5370
+file.import=\u8f38\u5165
+file.import-midi=\u8f38\u5165MIDI
+file.export-ascii=\u8f38\u51fa\u6210ASCII
+file.history=\u6b77\u53f2\u7d00\u9304
+file.open-url=\u958b\u555f\u8d85\u9023\u7d50 URL
+file.open.error=\u7121\u6cd5 \u958b\u555f: {0}
+file.save.error=\u7121\u6cd5 \u5132\u5b58: {0}
+file.import.error=\u7121\u6cd5 \u8f38\u5165: {0}
+file.export.error=\u7121\u6cd5 \u8f38\u51fa: {0}
+
+file.overwrite-question=\u6a94\u6848\u5df2\u5b58\u5728\uff0c\u662f\u5426\u8986\u5beb\uff1f
+
+edit.menu=\u7de8\u8f2f
+edit.undo=\u4e0a\u4e00\u6b65
+edit.redo=\u4e0b\u4e00\u6b65
+edit.copy=\u8907\u88fd
+edit.from=\u5f9e
+edit.to=\u5230
+edit.all-tracks=\u5168\u90e8\u97f3\u8ecc
+edit.paste=\u8cbc\u4e0a
+edit.paste.count=\u8cbc\u4e0a\u7684\u6578\u76ee
+edit.paste.replace-mode=\u8cbc\u5728\u9019\u500b\u5c0f\u7bc0
+edit.paste.insert-mode=\u8cbc\u5230\u65b0\u7684\u5c0f\u7bc0
+edit.delete=\u522a\u9664
+edit.cut=\u526a\u4e0b
+edit.mouse-mode-selection=\u9078\u64c7\u6a21\u5f0f
+edit.mouse-mode-edition=\u4e94\u7dda\u8b5c\u7de8\u8f2f\u6a21\u5f0f
+edit.not-natural-key=\u5347/\u964d\u6a21\u5f0f
+edit.voice-1=\u9078\u64c7 \u8072\u9053 1
+edit.voice-2=\u9078\u64c7 \u8072\u9053 2
+
+view=\u6aa2\u8996
+
+view.layout=\u7248\u9762
+view.layout.page=\u7e31\u5411\u5ef6\u4f38
+view.layout.linear=\u6a6b\u5411\u5ef6\u4f38
+view.layout.compact=\u7cbe\u7c21\u7248
+view.layout.multitrack=\u591a\u8ecc
+view.layout.chord-style=\u548c\u5f26\u98a8\u683c
+view.layout.chord-name=\u548c\u5f26\u540d\u7a31
+view.layout.chord-diagram=\u548c\u5f26\u5716\u8868
+view.layout.score-enabled=\u986f\u793a\u7e3d\u8b5c
+view.layout.tablature-enabled=\u986f\u793a\u5409\u4ed6\u8b5c
+view.show-mixer=\u986f\u793a\u6df7\u97f3\u5668
+view.show-fretboard=\u986f\u793a\u6307\u677f
+view.show-piano=\u986f\u793a\u7434\u9375
+view.show-matrix=\u986f\u793a\u77e9\u9663\u6a21\u5f0f
+view.show-transport=\u986f\u793a\u64ad\u653e\u6a21\u5f0f
+fretboard.direction=\u65b9\u5f0f
+fretboard.right-mode=\u53f3\u624b\u7434
+fretboard.left-mode=\u5de6\u624b\u7434
+fretboard.background-color=\u80cc\u666f\u984f\u8272
+fretboard.display-note-text=\u986f\u793a\u97f3\u7b26\u7684\u6587\u5b57
+fretboard.display-scale-text=\u986f\u793a\u97f3\u968e\u7684\u6587\u5b57
+fretboard.font=\u5b57\u578b
+fretboard.fretpoint-color=\u7434\u683c\u984f\u8272
+fretboard.note-color=\u97f3\u7b26\u984f\u8272
+fretboard.scale-note-color=\u97f3\u968e\u7684\u97f3\u7b26\u984f\u8272
+fretboard.settings=\u7434\u683c\u8a2d\u5b9a
+fretboard.string-color=\u7434\u7d43\u7684\u984f\u8272
+fretboard.settings.options=\u9078\u9805
+piano.editor=\u92fc\u7434\u7de8\u7ddd\u5668
+piano.natural-key-color=\u81ea\u7136\u7434\u9375\u984f\u8272(\u9ed1/\u767d\u9375)
+piano.not-natural-key-color=\u4e0d\u81ea\u7136\u7434\u9375\u984f\u8272
+piano.note-color=\u97f3\u7b26\u984f\u8272
+piano.scale-note-color=\u97f3\u968e\u97f3\u7b26\u984f\u8272
+piano.settings=\u92fc\u7434\u8a2d\u5b9a
+
+matrix.editor=\u77e9\u9663\u6a21\u5f0f\u7de8\u8f2f\u5668
+matrix.grids=\u683c\u5b50\u7684\u6578\u76ee
+matrix.border-color=\u908a\u7dda\u984f\u8272
+matrix.font=\u5b57\u578b
+matrix.foreground-color=\u524d\u666f\u984f\u8272
+matrix.line-color-1=\u5947\u6578\u5217\u984f\u8272
+matrix.line-color-2=\u5076\u6578\u5217\u984f\u8272
+matrix.line-color-over=\u6ed1\u9f20\u6ed1\u904e\u5217\u7684\u984f\u8272
+matrix.note-color=\u97f3\u7b26\u984f\u8272
+matrix.play-note-color=\u5f48\u594f\u97f3\u7b26\u7684\u984f\u8272
+matrix.position-color=\u4f4d\u7f6e\u7684\u984f\u8272
+matrix.settings=\u77e9\u9663\u6a21\u5f0f\u7684\u8a2d\u5b9a
+
+composition=\u66f2\u76ee
+composition.timesignature=\u62cd\u5b50\u8a18\u865f
+composition.timesignature.Numerator=\u5206\u5b50
+composition.timesignature.denominator=\u5206\u6bcd
+composition.timesignature.to-the-end=\u5230\u7d50\u5c3e
+composition.tempo=\u7bc0\u594f
+composition.tempo-percent=\u7bc0\u594f(\u767e\u5206\u6bd4)
+composition.tempo.invalid=\u4e0d\u5408\u7406\u7684\u7bc0\u594f
+composition.tempo.start-to-end=\u5c07\u9019\u500b\u901f\u5ea6\u7528\u65bc\u6574\u9996\u6b4c
+composition.tempo.position-to-end=\u5c07\u9019\u500b\u901f\u5ea6\u7528\u5230\u7d50\u675f
+composition.tempo.position-to-next=\u5c07\u9019\u500b\u901f\u5ea6\u7528\u5728\u4e0b\u4e00\u500b\u901f\u5ea6\u6bb5\u843d(tempo marker)
+composition.properties=\u8cc7\u8a0a
+composition.name=\u540d\u7a31
+composition.artist=\u6f14\u594f\u8005
+composition.album=\u5c08\u8f2f
+composition.author=\u4f5c\u8005
+composition.date=\u65e5\u671f
+composition.copyright=\u7248\u6b0a
+composition.writer=\u5409\u4ed6\u8b5c\u4f5c\u8005
+composition.transcriber=\u6539\u7de8
+composition.comments=\u8a3b\u89e3
+composition.clef=(\u9ad8/\u4f4e)\u97f3\u8b5c\u865f
+composition.clef.treble=\u9ad8\u97f3\u90e8
+composition.clef.bass=\u4f4e\u97f3\u90e8
+composition.clef.tenor=\u6b21\u4e2d\u97f3\u90e8(\u7537\u9ad8\u97f3\u90e8)
+composition.clef.alto=\u4e2d\u97f3\u90e8
+composition.clef.to-the-end=\u5c07\u9019\u500b(\u9ad8/\u4f4e)\u97f3\u8b5c\u865f\u7528\u5230\u7d50\u675f
+composition.clef=\u8b5c\u865f
+composition.clef.treble=\u9ad8\u97f3\u8b5c\u8a18\u865f
+composition.clef.bass=\u4f4e\u97f3\u8b5c\u8a18\u865f
+composition.clef.tenor=\u6b21\u4e2d\u97f3\u8b5c\u8a18\u865f
+composition.clef.alto=\u4e2d\u97f3\u8b5c\u8a18\u865f
+composition.clef.to-the-end=\u5957\u7528\u9019\u500b\u8b5c\u865f\u5230\u7d50\u5c3e
+
+composition.keysignature=\u8abf\u865f
+composition.keysignature.natural=\u9084\u539f
+composition.keysignature.sharp-1=\u53471
+composition.keysignature.sharp-2=\u53472
+composition.keysignature.sharp-3=\u53473
+composition.keysignature.sharp-4=\u53474
+composition.keysignature.sharp-5=\u53475
+composition.keysignature.sharp-6=\u53476
+composition.keysignature.sharp-7=\u53477
+composition.keysignature.flat-1=\u964d1
+composition.keysignature.flat-2=\u964d2
+composition.keysignature.flat-3=\u964d3
+composition.keysignature.flat-4=\u964d4
+composition.keysignature.flat-5=\u964d5
+composition.keysignature.flat-6=\u964d6
+composition.keysignature.flat-7=\u964d7
+composition.keysignature.to-the-end=\u5957\u7528\u9019\u500b\u8abf\u865f\u5230\u7d50\u5c3e
+composition.tripletfeel=\u4e09\u9023\u97f3\u7684\u611f\u53d7
+composition.tripletfeel.none=\u975e\u4e09\u9023\u97f3\u7684\u611f\u53d7
+composition.tripletfeel.eighth=\u4e09\u9023\u97f3 8\u5206\u97f3\u7b26
+composition.tripletfeel.sixteenth=\u4e09\u9023\u97f3 16\u5206\u97f3\u7b26
+composition.tripletfeel.to-the-end=\u5957\u7528\u9019\u500btriplet feel\u5230\u7d50\u5c3e
+
+help=\u5e6b\u52a9
+help.help=\u5e6b\u52a9
+help.doc=\u6587\u4ef6
+help.about=\u95dc\u65bc
+help.about.license=\u7248\u6b0a
+help.about.authors=\u4f5c\u8005
+help.about.description=\u8aaa\u660e
+
+track=\u97f3\u8ecc
+track.number=\u7de8\u865f
+track.name=\u540d\u7a31
+track.color=\u984f\u8272
+track.first=\u7b2c\u4e00\u8ecc
+track.last=\u6700\u672b\u8ecc
+track.previous=\u524d\u4e00\u8ecc
+track.next=\u4e0b\u4e00\u8ecc
+track.add=\u65b0\u589e\u97f3\u8ecc
+track.remove=\u79fb\u9664\u97f3\u8ecc
+track.clone=\u8907\u88fd\u97f3\u8ecc
+track.move-up=\u4e0a\u79fb
+track.move-down=\u4e0b\u79fb
+track.instrument=\u6a02\u5668
+track.tunning=\u8abf\u5f26\u6cd5
+track.instrument.empty=\u5728\u4f60\u7684Midi\u7cfb\u7d71\u88e1\u627e\u4e0d\u5230\u97f3\u6e90\uff0c\u8acb\u5617\u8a66\u91cd\u65b0\u7de8\u8b6fTuxGuitar
+track.properties=\u5c6c\u6027
+track.properties.general=\u4e00\u822c
+track.name.default-percussion-name=\u6253\u64ca\u6a02\u5668
+track.lyrics=\u6b4c\u8a5e
+track.solo=\u7368\u594f
+track.mute=\u975c\u97f3
+
+lyric.editor=\u6b4c\u8a5e\u7de8\u8f2f\u5668
+
+measure=\u5c0f\u7bc0
+measure.first=\u7b2c\u4e00\u5c0f\u7bc0
+measure.last=\u6700\u5f8c\u5c0f\u7bc0
+measure.previous=\u4e0a\u500b\u5c0f\u7bc0
+measure.next=\u4e0b\u500b\u5c0f\u7bc0
+measure.add=\u65b0\u589e\u5c0f\u7bc0
+measure.add.count=\u52a0\u6578\u500b\u5c0f\u7bc0
+measure.add-before-current-position=\u5728\u7576\u524d\u4f4d\u7f6e\u4e4b\u524d\u65b0\u589e\u5c0f\u7bc0
+measure.add-after-current-position=\u5728\u7576\u524d\u4f4d\u7f6e\u4e4b\u5f8c\u65b0\u589e\u5c0f\u7bc0
+measure.add-at-end=\u5728\u7d50\u5c3e\u65b0\u589e\u5c0f\u7bc0
+measure.remove=\u79fb\u9664\u5c0f\u7bc0
+measure.copy=\u8907\u88fd\u5c0f\u7bc0
+measure.paste=\u8cbc\u4e0a\u5c0f\u7bc0
+measure.clean=\u6e05\u9664\u5c0f\u7bc0
+
+duration=\u97f3\u9577
+duration.whole=\u5168\u97f3\u7b26
+duration.half=\u4e8c\u5206\u97f3\u7b26
+duration.quarter=\u56db\u5206\u97f3\u7b26
+duration.eighth=\u516b\u5206\u97f3\u7b26
+duration.sixteenth=\u5341\u516d\u5206\u97f3\u7b26
+duration.thirtysecond=\u4e09\u5341\u4e8c\u5206\u97f3\u7b26
+duration.sixtyfourth=\u516d\u5341\u56db\u5206\u97f3\u7b26
+duration.dotted=\u9644\u9ede
+duration.doubledotted=\u96d9\u9644\u9ede
+duration.division-type=\u4e09\u9023\u97f3
+
+dynamic=\u529b\u5ea6
+dynamic.piano-pianissimo=\u6700\u5f31
+dynamic.pianissimo=\u751a\u5f31
+dynamic.piano=\u5f31
+dynamic.mezzo-piano=\u4e2d\u5f31
+dynamic.mezzo-forte=\u4e2d\u5f37   
+dynamic.forte=\u5f37
+dynamic.fortissimo=\u751a\u5f37
+dynamic.forte-fortissimo=\u6700\u5f37
+
+effects=\u6548\u679c
+effects.vibrato=\u9707\u97f3
+effects.bend=\u63a8\u5f26
+effects.deadnote=\u60b6\u97f3
+effects.slide=\u6ed1\u5f26
+effects.hammer=\u69cc\u5f26/\u52fe\u5f26
+effects.tremolo-bar=\u6416\u687f\u986b\u97f3\u63a7\u5236\u689d
+effects.tremolo-bar-editor=\u6416\u687f\u986b\u97f3\u7de8\u8f2f\u5668
+effects.tremolo-bar.dip=\u4e0b\u6c89\u6416\u687f 
+effects.tremolo-bar.dive=\u8fc5\u901f\u79fb\u52d5\u6416\u687f
+effects.tremolo-bar.release-up=\u653e\u6389\u6416\u687f(Release Up)
+effects.tremolo-bar.release-down=\u653e\u6389\u6416\u687f(Release Down)
+effects.tremolo-bar.inverted-dip=\u6416\u687f\u6416\u4f86\u6416\u53bb(Inverted Dip)
+effects.tremolo-bar.return=\u9084\u539f\u6416\u687f
+effects.ghostnote=\u5e7d\u9748\u97f3
+effects.accentuatednote=\u91cd\u97f3
+effects.heavyaccentuatednote=\u5f37\u91cd\u97f3
+effects.harmonic=\u6cdb\u97f3
+effects.grace=\u88dd\u98fe\u97f3
+effects.grace-editor=\u88dd\u98fe\u97f3\u7de8\u8f2f\u5668
+effects.grace.before-beat=\u62cd\u524d\u88dd\u98fe\u97f3
+effects.grace.on-beat=\u62cd\u9ede\u88dd\u98fe\u97f3
+effects.grace.transition=\u904e\u6e21\u88dd\u98fe\u97f3
+effects.grace.transition-none=\u7121
+effects.grace.transition-bend=\u63a8\u5f26
+effects.grace.transition-slide=\u6ed1\u97f3
+effects.grace.transition-hammer=\u69cc\u97f3
+effects.trill=\u986b\u97f3
+effects.trill-editor=\u986b\u97f3\u7de8\u8f2f\u5668
+effects.tremolo-picking=\u6416\u687f\u986b\u97f3\u64a5\u594f
+effects.tremolo-picking-editor=\u6416\u687f\u986b\u97f3\u64a5\u594f\u7de8\u8f2f\u5668
+effects.palm-mute=\u624b\u638c\u60b6\u97f3
+effects.staccato=\u65b7\u97f3
+effects.tapping=\u9ede\u5f26
+effects.slapping=\u53f3\u624b\u64ca\u5f26
+effects.popping=\u53f3\u624b\u52fe\u5f26
+effects.fade-in=\u6de1\u5165
+effects.harmonic-editor=\u6cdb\u97f3\u7de8\u8f2f\u5668
+effects.harmonic.type-of-harmonic=\u6cdb\u97f3\u985e\u578b
+effects.harmonic.natural=\u81ea\u7136\u6cdb\u97f3
+effects.harmonic.artificial=\u4eba\u5de5\u6cdb\u97f3
+effects.harmonic.artificial.key-offset=\u97f3\u968e\u5c0d\u4f4d\u504f\u79fb\u91cf(Key offset)
+effects.harmonic.tapped=\u62cd\u5f26\u6cdb\u97f3
+effects.harmonic.tapped.left-hand=\u5de6\u624b\u9ede\u5f26
+effects.harmonic.tapped.right-hand=\u53f3\u624b\u9ede\u5f26
+effects.harmonic.pinch=\u624b\u6307\u6cdb\u97f3
+effects.harmonic.semi=\u534a\u6cdb\u97f3
+
+bend.editor=\u63a8\u5f26\u7de8\u8f2f\u5668
+bend.bend=\u63a8\u5f26
+bend.bend-release=\u63a8/\u653e
+bend.bend-release-bend=\u63a8/\u653e/\u63a8
+bend.prebend=\u5148\u63a8
+bend.prebend-release=\u5148\u63a8/\u518d\u653e
+
+transport=\u64ad\u653e\u5668
+transport.start=\u958b\u59cb
+transport.stop=\u505c\u6b62
+transport.pause=\u66ab\u505c
+transport.first=\u6700\u524d\u9762
+transport.last=\u6700\u5f8c\u9762
+transport.previous=\u5f80\u524d
+transport.next=\u5f80\u5f8c
+transport.metronome=\u7bc0\u62cd\u5668
+transport.mode=\u653e\u97f3\u6a21\u5f0f
+transport.mode.simple=\u7c21\u55ae\u6a21\u5f0f
+transport.mode.simple.tempo-percent=\u6578\u5ea6\u7684\u767e\u5206\u6bd4
+transport.mode.simple.loop=\u5faa\u74b0\u64ad\u653e
+transport.mode.trainer=\u7df4\u7fd2\u6a21\u5f0f
+transport.mode.trainer.increment-description=\u6f38\u5feb
+transport.mode.loop-range=\u53cd\u8986\u7684\u6bb5\u843d
+transport.mode.loop-range.from=\u5f9e\u67d0\u5c0f\u7bc0\u64ad\u653e
+transport.mode.loop-range.from-default=\u5f9e\u982d
+transport.mode.loop-range.to=\u64ad\u653e\u5230\u5c0f\u7bc0
+transport.mode.loop-range.to-default=\u64ad\u5230\u7d50\u675f
+transport.set-loop-start=\u8a2d\u5b9a\u53cd\u8986\u64ad\u653e\u7684\u8d77\u9ede
+transport.set-loop-end=\u8a2d\u5b9a\u53cd\u8986\u64ad\u653e\u7684\u7d42\u9ede
+
+
+instruments.volume=\u589e\u76ca
+instrument.channel=\u983b\u9053
+instrument.effect-channel=\u6548\u679c\u983b\u9053
+instrument.volume=\u97f3\u91cf
+instrument.balance=\u5e73\u8861
+instrument.chorus=\u4e00\u8d77\u767c\u8072
+instrument.reverb=\u6df7\u97ff\u6548\u679c
+instrument.phaser=\u79fb\u76f8\u5668 
+instrument.tremolo=\u986b\u97f3/\u9707\u97f3
+instrument.free=\u91cb\u653e
+instrument.link=\u9023\u7d50
+
+
+repeat.open=\u958b\u59cb\u53cd\u8986\u5340\u6bb5
+repeat.close=\u7d50\u675f\u53cd\u8986\u5340\u6bb5
+repeat.alternative=\u4efb\u610f\u7684\u53cd\u8986
+repeat.alternative.editor=\u7de8\u8f2f\u4efb\u610f\u7684\u53cd\u8986
+repetitions=\u53cd\u8907
+repeat.number-of-repetitions=\u53cd\u8907\u6b21\u6578
+
+beat=\u97f3\u7b26
+beat.clean=\u6e05\u9664\u62cd\u9ede
+beat.voice.remove-unused=\u79fb\u9664\u6c92\u7528\u5230\u7684\u8072\u9053
+beat.voice-up=\u4e0a\u9ede(Stems Up)
+beat.voice-down=\u4e0b\u9ede(Stems Down)
+beat.voice-auto=\u81ea\u52d5\u9ede(Auto Stems)
+beat.stroke=\u7528\u529b\u6572(Stroke)
+beat.stroke-up=\u4e0a\u64ca(Upstroke)
+beat.stroke-down=\u4e0b\u64ca(Downstroke)
+beat.move-left=\u628a\u9f13\u9ede\u5411\u5de6\u79fb(Move One Beat Left)
+beat.move-right=\u628a\u9f13\u9ede\u5411\u53f3\u79fb(Move One Beat Right)
+beat.move-custom=\u81ea\u5b9a\u9f13\u9ede\u7684\u79fb\u52d5(Custom Beat Move)
+beat.move-custom.dialog.title=\u81ea\u5b9a\u79fb\u52d5(Custom Move)
+beat.move-custom.dialog.direction-tip=\u79fb\u52d5\u65b9\u5411(Move Direction)
+beat.move-custom.dialog.move-1.tip=\u4e3b\u8981\u79fb\u52d5(Major Move)
+beat.move-custom.dialog.move-2.tip=\u5e73\u79fb(Fine Move)
+beat.move-custom.dialog.direction=\u65b9\u5411
+beat.move-custom.dialog.direction.right=\u5411\u53f3\u79fb
+beat.move-custom.dialog.direction.left=\u5411\u5de6\u79fb
+beat.move-custom.dialog.count=\u6578\u76ee
+beat.move-custom.dialog.duration=\u97f3\u9577
+beat.move-custom.dialog.duration.type=\u4e00\u9ede/\u5169\u9ede
+beat.move-custom.dialog.duration.type.normal=\u6c92\u6709
+beat.move-custom.dialog.duration.division-type=\u5206\u5c0f\u7bc0\u65b9\u5f0f(2/4\uff0c3/4\uff0c4/4)
+beat.move-custom.dialog.duration.division-type.normal=\u4e00\u822c (Tuplet)
+
+note=\u97f3\u7b26
+note.semitone-up=\u5347\u534a\u97f3
+note.semitone-down=\u964d\u534a\u97f3
+note.shift-up=\u4e0a\u79fb
+note.shift-down=\u4e0b\u79fb
+note.tiednote=\u9023\u7d50\u97f3
+note.deadnote=\u60b6\u97f3
+
+insert.chord=\u63d2\u5165\u548c\u5f26
+chord.editor=\u548c\u5f26\u7de8\u8f2f\u5668
+chord=\u548c\u5f26
+chord.name=\u548c\u5f26\u540d\u7a31
+chord.custom.name-empty-error=\u548c\u5f26\u540d\u7a31\u4e0d\u53ef\u7a7a\u767d
+chord.custom.name-exist-error=\u548c\u5f26\u540d\u7a31\u5df2\u5b58\u5728
+chord.bass=\u4f4e\u97f3
+chord.custom=\u81ea\u5b9a\u548c\u5f26
+chord.settings.tip=\u81ea\u5b9a\u7684\u8a2d\u5b9a
+chord.settings.type=\u7a2e\u985e
+chord.settings.type.most-common=\u6700\u4e00\u822c
+chord.settings.type.inversions=\u91cd\u6392(Inversions)
+chord.settings.type.close-voiced=\u9589\u8072\u9053(Close Voiced)
+chord.settings.type.open-voiced=\u958b\u8072\u9053(Open Voiced)
+chord.settings.open-chords=\u958b\u653e\u548c\u5f26(Open Chords)
+chord.settings.chords-to-display=\u79c0\u51fa\u4f86\u7684\u548c\u5f26(Chords to Display)
+chord.settings.search-frets=\u641c\u5c0b\u6307\u677f(Search Frets)
+chord.settings.minimum-fret=\u6700\u5c0f
+chord.settings.maximum-fret=\u6700\u5927
+
+instrument=\u6a02\u5668
+instrument.instrument=\u6a02\u5668
+instrument.percussion-track=\u6253\u64ca\u6a02\u5668\u8ecc
+
+tunning=\u8abf\u5f26\u6cd5
+tunning.offset=\u4f4d\u79fb
+tunning.strings=\u5f26
+tuning.strings.transpose=\u56e0\u79fb\u8abf\u53d7\u5f71\u97ff\u7684\u97f3\u7b26
+tuning.strings.transpose.try-keep-strings=\u8a66\u8457\u4fdd\u7559\u97f3\u7b26\u5728\u540c\u4e00\u6839\u5f26\u4e0a
+tuning.strings.transpose.apply-to-chords=\u79fb\u8abf\u548c\u5f26
+
+
+language=\u8a9e\u8a00
+
+choose-color=\u9078\u64c7\u4e00\u500b\u984f\u8272
+
+
+settings=\u8a2d\u5b9a
+settings.config=\u8a2d\u5b9aTuxGuitar
+settings.config.language=\u8a9e\u8a00
+settings.config.language.choose=\u9078\u64c7\u8a9e\u8a00
+settings.config.styles=\u98a8\u683c
+settings.config.styles.general=\u4e00\u822c\u98a8\u683c
+settings.config.styles.printer=\u5370\u8868\u6a5f\u98a8\u683c
+
+settings.config.styles.font.default=\u9810\u8a2d\u5b57\u578b
+settings.config.styles.font.note=\u97f3\u7b26\u5b57\u578b
+settings.config.styles.font.lyric=\u6b4c\u8a5e\u5b57\u578b
+settings.config.styles.font.text=\u6587\u5b57\u5b57\u578b
+
+settings.config.styles.font.time-signature=\u62cd\u5b50\u8a18\u865f\u5b57\u578b
+settings.config.styles.font.printer-default=\u5217\u5370\u7528\u9810\u8a2d\u5b57\u578b
+settings.config.styles.font.printer-note=\u5217\u5370\u7528\u97f3\u7b26\u5b57\u578b
+settings.config.styles.font.printer-time-signature=\u5217\u5370\u7528\u62cd\u5b50\u8a18\u865f\u5b57\u578b
+settings.config.styles.color.score-note=\u4e94\u7dda\u8b5c\u97f3\u7b26\u984f\u8272
+settings.config.styles.color.tab-note=\u516d\u7dda\u8b5c\u97f3\u7b26\u984f\u8272
+settings.config.styles.color.play-note=\u64ad\u653e\u4e2d\u7684\u97f3\u7b26\u984f\u8272
+settings.config.apply-changes-question=\u60a8\u8981\u73fe\u5728\u5957\u7528\u8b8a\u66f4\u55ce?
+
+settings.config.sound=\u8072\u97f3
+
+settings.config.main=\u4e00\u822c
+settings.config.main.window-title=\u8996\u7a97\u6a19\u984c
+settings.config.main.window-title.help=\u4e0b\u5217\u8b8a\u6578\u6703\u986f\u793a\u5728\u8996\u7a97\u6a19\u984c
+settings.config.main.window-title.var.description.appname=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u9019\u500b\u7a0b\u5f0f\u7684\u540d\u7a31:TuxGuitar
+settings.config.main.window-title.var.description.appversion=\u9019\u500b\u8b8a\u6578\u4ee3\u8868TuxGuitar\u7684\u7248\u672c\u865f
+settings.config.main.window-title.var.description.filename=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u958b\u555f\u6a94\u6848\u7684\u6a94\u540d
+settings.config.main.window-title.var.description.filepath=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u958b\u555f\u6a94\u6848\u7684\u8def\u5f91
+settings.config.main.window-title.var.description.songname=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u540d\u7a31
+settings.config.main.window-title.var.description.songauthor=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u4f5c\u8005
+settings.config.main.window-title.var.description.songalbum=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u5c08\u8f2f
+settings.config.main.window-title.var.description.songartist=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u6f14\u594f\u8005
+settings.config.main.options=\u9078\u9805
+settings.config.main.splash-enabled=\u986f\u793a\u555f\u52d5\u6b61\u8fce\u756b\u9762
+settings.config.main.table.auto-size.enabled=\u555f\u7528\u81ea\u52d5\u8868\u683c\u5c3a\u5bf8
+
+settings.config.styles.color.lines=\u6c34\u5e73\u7dda\u984f\u8272
+settings.config.toolbars=\u5de5\u5177\u5217
+settings.config.toolbars.tip=\u81ea\u8a02\u4f60\u7684\u5de5\u5177\u5217
+settings.config.toolbars.list=\u53ef\u7528\u7684\u5de5\u5177\u5217
+settings.config.toolbars.move-up=\u4e0a\u79fb
+settings.config.toolbars.move-down=\u4e0b\u79fb
+settings.config.skin=\u76ae\u819a(Skins)
+settings.config.skin.choose=\u9078\u4f60\u7684\u76ae\u819a
+settings.keybindings=\u71b1\u9375\u8a2d\u5b9a
+key-bindings-editor=\u71b1\u9375\u7de8\u8f2f\u5668
+
+key-bindings-editor-action-select=\u9078\u64c7\u52d5\u4f5c
+key-bindings-editor-action-column=\u52d5\u4f5c
+key-bindings-editor-shortcut-column=\u6309\u9375
+key-bindings-editor-push-a-key=\u8acb\u6309\u9375
+key-bindings-editor-save-question=\u6709\u672a\u5132\u5b58\u7684\u8b8a\u66f4\uff0c\u662f\u5426\u5132\u5b58\uff1f
+
+key-bindings-editor-override=\u9019\u500b\u71b1\u9375\u5df2\u88ab\u4f7f\u7528\uff0c\u78ba\u5b9a\u8981\u4f7f\u7528\uff1f
+
+print.print=\u5217\u5370
+print.dialog=\u5217\u5370
+print.service=\u670d\u52d9
+print.service.name=\u540d\u7a31
+print.service.status=\u72c0\u614b
+print.service.type=\u985e\u578b
+print.service.info=\u8cc7\u8a0a
+print.range=\u7bc4\u570d
+print.range.all-pages=\u5168\u90e8
+print.range.pages=\u9801\u9762
+print.range.pages-to=\u5230
+print.copies=\u8907\u5370
+print.copies-number=\u4efd\u6578
+print.print-to-file=\u5217\u5370\u5230\u6a94\u6848
+print.file-chooser=\u9078\u64c7
+print-header.default-song-name=\u672a\u547d\u540d
+print-header.default-song-author=\u4e0d\u8a73
+print.preview=\u9810\u89bd\u5217\u5370
+print.preview.page-of=\u4e4b
+
+
+
+marker=\u6a19\u8a18
+marker.add=\u52a0\u5165\u6a19\u8a18
+marker.list=\u6a19\u8a18\u5217\u8868
+marker.first=\u81f3\u9996\u6a19\u8a18
+marker.last=\u81f3\u672b\u6a19\u8a18
+marker.next=\u4e0b\u4e00\u500b\u6a19\u8a18
+marker.previous=\u524d\u4e00\u500b\u6a19\u8a18
+
+export.tablature-enabled=\u986f\u793a\u516d\u7dda\u8b5c
+export.score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c
+export.chord-name-enabled=\u986f\u793a\u548c\u7d43\u540d\u7a31
+export.chord-diagram-enabled=\u986f\u793a\u548c\u7d43\u6307\u5716
+export.black-and-white=\u9ed1\u548c\u767d\u7684\u6a21\u5f0f
+
+scale=\u97f3\u968e
+scale.list=\u97f3\u968e\u5217\u8868
+
+text.insert=\u63d2\u5165\u6587\u5b57
+text.editor=\u6587\u5b57\u7de8\u8f2f\u5668
+text.text=\u6587\u5b57
+
+tools=\u5de5\u5177
+tools.scale=\u7434\u8b5c\u7684\u6e05\u55ae
+tools.browser=\u700f\u89bd
+tools.plugins=\u5916\u639b
+tools.shortcuts=\u6377\u5f91
+tools.settings=\u8a2d\u5b9a
+
+tools.transpose=\u79fb\u8abf
+tools.transpose.semitones=\u79fb\u8abf \u534a\u97f3
+tools.transpose.apply-to-track=\u6240\u6709\u7684\u5c0f\u7bc0\u90fd\u79fb\u8abf
+tools.transpose.apply-to-measure=\u53ea\u9019\u500b\u5c0f\u7bc0\u79fb\u8abf
+tools.transpose.apply-to-all-tracks=\u7528\u5728\u6240\u6709\u7684\u97f3\u8ecc
+tools.transpose.try-keep-strings=\u76e1\u53ef\u80fd\u8a66\u8457\u4fdd\u7559\u97f3\u7b26\u5728\u540c\u4e00\u6839\u5f26\u4e0a
+tools.transpose.apply-to-chords=\u5c07\u548c\u5f26\u79fb\u8abf
+
+browser.dialog=\u700f\u89bd
+browser.menu.file=\u6a94\u6848
+browser.open=\u958b\u555f
+browser.exit=\u96e2\u958b
+browser.menu.collection=\u5c0f\u66f2\u96c6
+browser.menu.go=Go
+browser.collection.select=\u9078\u66f2\u96c6
+browser.collection.open=\u958b\u555f
+browser.collection.remove=\u79fb\u9664
+browser.collection.close=\u95dc\u9589
+browser.collection.new=\u65b0\u589e
+browser.go-root=Home
+browser.go-back=\u56de\u4f86
+browser.refresh=\u66f4\u65b0
+browser.factory.fs.name=\u6a94\u6848\u7e3d\u7ba1
+browser.collection.fs.name=\u6a94\u540d
+browser.collection.fs.path=\u76ee\u9304
+browser.collection.fs.editor-title=\u6a94\u6848\u7e3d\u7ba1\u7684\u66f2\u96c6
+browser.collection.fs.editor-tip=\u9078\u64c7\u4f60\u7684\u66f2\u96c6\u7684\u76ee\u9304
+browser.collection.fs.invalid-path=\u8acb\u9078\u4e00\u500b\u6709\u6548\u7684\u76ee\u9304
+
+midi.port=MIDI Port
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=\u4e0d\u5b58\u5728\u7684
+plugin.column.name=\u5916\u639b\u540d
+plugin.column.enabled=\u555f\u7528\u7684
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=\u6a94\u6848
+edit.items=\u7de8\u8f2f
+property.items=\u5c6c\u6027
+track.items=\u97f3\u8ecc
+duration.items=\u97f3\u9577
+beat.items=\u97f3\u7b26
+composition.items=\u66f2\u76ee
+repeat.items=\u53cd\u8986
+transport.items=\u64ad\u653e\u5668
+marker.items=\u6a19\u8a18
+insert.items=\u63d2\u5165
+layout.items=\u7248\u9762
+view.items=\u6aa2\u8996
+effect.items=\u6548\u679c
+dynamic.items=\u529b\u5ea6
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=\u958b\u65b0\u6a94\u6848
+action.file.open=\u958b\u555f\u820a\u6a94
+action.file.open-url=Open URL
+action.file.save=\u5132\u5b58\u6a94\u6848
+action.file.save-as=\u53e6\u5b58\u65b0\u6a94
+action.file.print=\u5217\u5370
+action.file.print-preview=\u9810\u89bd\u5217\u5370
+action.file.exit=\u96e2\u958b\u4f01\u9d5d\u5409\u4ed6(TuxGuitar)
+action.edit.undo=\u4e0a\u4e00\u6b65
+action.edit.redo=\u4e0b\u4e00\u6b65
+action.edit.voice-1=\u9078\u8072\u9053 1
+action.edit.voice-2=\u9078\u8072\u9053 2
+action.composition.change-time-signature=\u8b8a\u66f4\u62cd\u5b50\u8a18\u865f
+action.composition.change-tempo=\u8b8a\u66f4\u7bc0\u62cd
+action.composition.change-info=\u8b8a\u66f4\u6b4c\u66f2\u8a0a\u606f
+action.composition.change-clef=\u8b8a\u66f4\u8b5c\u865f
+action.composition.change-key-signature=\u8b8a\u66f4\u8abf\u865f
+action.composition.change-triplet-feel=\u6539\u8b8a\u4e09\u9023\u97f3\u7684\u611f\u89ba
+
+action.view.layout-set-page=\u7e31\u5411\u5ef6\u4f38\u7248\u9762
+action.view.layout-set-linear=\u6a6b\u5411\u5ef6\u4f38\u7248\u9762
+action.view.layout-set-multitrack=\u591a\u8ecc\u7248\u9762
+action.view.layout-set-score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c
+action.view.layout-set-tablature-enabled=\u986f\u793a\u5409\u4ed6\u8b5c
+action.view.layout-set-compact=\u986f\u793a\u7cbe\u7c21\u6a21\u5f0f
+action.view.layout-set-chord-diagram-enabled=\u555f\u7528\u548c\u5f26\u6307\u5716
+action.view.layout-set-chord-name-enabled=\u555f\u7528\u548c\u5f26\u540d\u7a31
+
+action.view.show-fretboard=\u986f\u793a\u6307\u677f
+action.view.show-piano=\u986f\u793a\u7434\u9375
+action.view.show-matrix=\u986f\u793a\u77e9\u9663
+action.view.show-mixer=\u986f\u793a\u6df7\u97f3\u5668
+action.view.show-transport=\u986f\u793a\u6642\u9593\u8ef8
+
+action.track.add=\u65b0\u589e\u97f3\u8ecc
+action.track.remove=\u79fb\u9664\u97f3\u8ecc
+action.track.clone=\u8907\u88fd\u97f3\u8ecc
+action.track.go-first=\u5230\u7b2c\u4e00\u8ecc
+action.track.go-last=\u5230\u6700\u672b\u8ecc
+action.track.go-next=\u5230\u4e0b\u4e00\u8ecc
+action.track.go-previous=\u5230\u4e0a\u4e00\u8ecc
+action.track.lyrics=\u7de8\u8f2f\u97f3\u8ecc\u6b4c\u8a5e
+action.track.properties=\u8b8a\u66f4\u97f3\u8ecc\u5c6c\u6027
+action.track.move-down=\u4e0b\u79fb\u97f3\u8ecc
+action.track.move-up=\u4e0a\u79fb\u97f3\u8ecc
+
+action.measure.add=\u589e\u52a0\u5c0f\u7bc0
+action.measure.remove=\u79fb\u9664\u5c0f\u7bc0
+action.measure.copy=\u8907\u88fd\u5c0f\u7bc0
+action.measure.paste=\u8cbc\u4e0a\u5c0f\u7bc0
+action.measure.clean=\u6e05\u9664\u5c0f\u7bc0
+action.measure.go-first=\u5230\u7b2c\u4e00\u5c0f\u7bc0
+action.measure.go-last=\u5230\u6700\u5f8c\u5c0f\u7bc0
+action.measure.go-next=\u5230\u4e0b\u4e00\u5c0f\u7bc0
+action.measure.go-previous=\u5230\u4e0a\u4e00\u5c0f\u7bc0
+
+action.beat.general.remove-unused-voice=\u79fb\u9664\u6c92\u7528\u5230\u7684\u8072\u9053
+action.beat.general.voice-up=\u8a2d\u5b9a\u4e0a\u9ede(Set Stems Up)
+action.beat.general.voice-down=\u8a2d\u5b9a\u4e0b\u9ede(Set Stems Down)
+action.beat.general.voice-auto=\u8a2d\u5b9a\u81ea\u52d5\u9ede(Set Auto Stems)
+action.beat.general.set-stroke-up=\u8a2d\u5b9a\u4e0a\u64ca(Set Upstroke)
+action.beat.general.set-stroke-down=\u8a2d\u5b9a\u4e0b\u64ca(Set Downstroke)
+action.beat.general.move-left=\u5de6\u79fb\u4e00\u62cd(Move One Beat Left)
+action.beat.general.move-right=\u53f3\u79fb\u4e00\u62cd(Move One Beat Right)
+action.beat.general.move-custom=\u81ea\u8a02\u79fb\u62cd(Custom Beat Move)
+
+action.note.general.clean-beat=\u6e05\u9664\u62cd\u9ede
+action.note.general.decrement-semitone=\u6e1b\u5c11\u534a\u97f3
+action.note.general.increment-semitone=\u589e\u52a0\u534a\u97f3
+action.note.general.shift-down=\u4e0b\u79fb
+action.note.general.shift-up=\u4e0a\u79fb
+action.note.general.tied=\u589e\u52a0/\u79fb\u9664 \u9023\u7d50\u97f3
+
+action.note.duration.set-whole=\u8a2d\u5b9a\u4e00\u62cd(Set Whole Duration)
+action.note.duration.set-half=\u8a2d\u5b9a\u534a\u62cd(Set Half Duration)
+action.note.duration.set-quarter=\u8a2d\u5b9a\u56db\u5206\u4e4b\u4e00\u62cd(Set Quarter Duration)
+action.note.duration.set-eighth=\u8a2d\u5b9a\u516b\u5206\u4e4b\u4e00\u62cd
+action.note.duration.set-sixteenth=\u8a2d\u5b9a\u5341\u516d\u5206\u4e4b\u4e00\u62cd
+action.note.duration.set-thirty-second=\u8a2d\u5b9a\u4e09\u5341\u4e8c\u5206\u4e4b\u4e00\u62cd
+action.note.duration.set-sixty-fourth=\u8a2d\u5b9a\u516d\u5341\u56db\u5206\u4e4b\u4e00\u62cd
+action.note.duration.change-dotted=\u589e\u52a0/\u79fb\u9664 \u9644\u9ede
+action.note.duration.change-double-dotted=\u589e\u52a0/\u79fb\u9664 \u96d9\u9644\u9ede
+action.note.duration.change-division-type=\u589e\u52a0/\u79fb\u9664 tupleto
+action.note.duration.decrement-duration=\u6e1b\u5c11\u62cd\u9577(Decrement Duration)
+action.note.duration.increment-duration=\u589e\u52a0\u62cd\u9577(Increment Duration)
+
+action.note.effect.change-vibrato=\u589e\u52a0/\u79fb\u9664 \u9707\u97f3
+action.note.effect.change-bend=\u589e\u52a0/\u79fb\u9664 \u63a8\u5f26
+action.note.effect.change-slide=\u589e\u52a0/\u79fb\u9664 \u6ed1\u5f26
+action.note.effect.change-hammer=\u589e\u52a0/\u79fb\u9664 \u5782/\u52fe\u5f26
+action.note.effect.change-accentuated=\u589e\u52a0/\u79fb\u9664 \u91cd\u97f3
+action.note.effect.change-dead=\u589e\u52a0/\u79fb\u9664 \u60b6\u97f3
+action.note.effect.change-fade-in=\u589e\u52a0/\u79fb\u9664 \u6de1\u5165
+action.note.effect.change-ghost=\u589e\u52a0/\u79fb\u9664 \u5e7d\u9748\u97f3
+action.note.effect.change-grace=\u589e\u52a0/\u79fb\u9664 \u88dd\u98fe\u97f3
+action.note.effect.change-harmonic=\u589e\u52a0/\u79fb\u9664 \u6cdb\u97f3
+action.note.effect.change-heavy-accentuated=\u589e\u52a0/\u79fb\u9664 \u5f37\u91cd\u97f3
+action.note.effect.change-palm-mute=\u589e\u52a0/\u79fb\u9664 \u624b\u638c\u60b6\u97f3
+action.note.effect.change-popping=\u589e\u52a0/\u79fb\u9664 \u53f3\u624b\u52fe\u5f26
+action.note.effect.change-slapping=\u589e\u52a0/\u79fb\u9664 \u53f3\u624b\u64ca\u5f26
+action.note.effect.change-staccato=\u589e\u52a0/\u79fb\u9664 \u65b7\u97f3
+action.note.effect.change-tapping=\u589e\u52a0/\u79fb\u9664 \u9ede\u5f26
+action.note.effect.change-tremolo-bar=\u589e\u52a0/\u79fb\u9664 \u6416\u687f\u986b\u97f3\u63a7\u5236\u689d
+action.note.effect.change-tremolo-picking=\u589e\u52a0/\u79fb\u9664 \u6416\u687f\u986b\u97f3\u64a5\u594f
+action.note.effect.change-trill=\u589e\u52a0/\u79fb\u9664 \u986b\u97f3
+
+action.insert.open-repeat=\u958b\u59cb\u53cd\u8986\u5340\u6bb5
+action.insert.close-repeat=\u7d50\u675f\u53cd\u8986\u5340\u6bb5
+action.insert.repeat-alternative=\u4efb\u610f\u53cd\u8986
+action.insert.chord=\u63d2\u5165\u5408\u5f26
+action.insert.text=\u63d2\u5165\u6587\u5b57
+
+action.marker.add=\u52a0\u4e0a\u4e00\u500b\u6a19\u8a18
+action.marker.go-next=\u5230\u4e0b\u4e00\u500b\u6a19\u8a18
+action.marker.go-previous=\u5230\u4e0a\u4e00\u500b\u6a19\u8a18
+
+action.transport.play=\u64ad\u653e
+action.transport.stop=\u505c\u6b62
+action.transport.mode=\u64ad\u653e\u6a21\u5f0f
+action.transport.metronome=\u7bc0\u62cd\u5668
+action.transport.set-loop-start=\u8a2d\u5b9a\u91cd\u64ad\u7684\u8d77\u9ede
+action.transport.set-loop-end=\u8a2d\u5b9a\u91cd\u64ad\u7684\u7d42\u9ede
+
+action.tools.browser=\u700f\u89bd
+action.tools.transpose=\u79fb\u8abf\u97f3\u7b26
+action.settings.configure=\u8a2d\u5b9a
+action.help.doc=\u5e6b\u52a9
+
diff --git a/TuxGuitar-testing/platform-all/share/lang/toutf.pl b/TuxGuitar-testing/platform-all/share/lang/toutf.pl
new file mode 100644
index 0000000..490a638
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/lang/toutf.pl
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+
+use strict;
+
+if ($#ARGV < 0){
+	print "** Please, specify a file to convert\n\n";
+	exit 1;
+}
+
+my $file = $ARGV[0];
+
+open(IN, "<:utf8", $file);
+my @data = <IN>;
+close(IN);
+
+my ($i)=0;
+my $line;
+
+foreach (@data){
+	chop;
+
+	my @chars = unpack ("U*", $_);
+	my $line = "";
+
+	foreach my $c (@chars){
+		if ($c > 128){
+			$line .= "\\u".sprintf("%04x",$c);
+		}
+		else {
+			$line .= pack ("U*", $c);
+		}
+	}
+
+	print "$line\n";
+}
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-abc.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-abc.jar
new file mode 100644
index 0000000..edad756
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-abc.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-ascii.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-ascii.jar
new file mode 100644
index 0000000..62abb7d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-ascii.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-browser-ftp.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-browser-ftp.jar
new file mode 100644
index 0000000..35f1858
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-browser-ftp.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-community.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-community.jar
new file mode 100644
index 0000000..baee9f9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-community.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-compat.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-compat.jar
new file mode 100644
index 0000000..5105408
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-compat.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-converter.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-converter.jar
new file mode 100644
index 0000000..1464099
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-converter.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-gervill.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-gervill.jar
new file mode 100644
index 0000000..b52007f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-gervill.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-gpx.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-gpx.jar
new file mode 100644
index 0000000..5dd7ffa
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-gpx.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-gtp.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-gtp.jar
new file mode 100644
index 0000000..3535cbf
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-gtp.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-image.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-image.jar
new file mode 100644
index 0000000..08dc908
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-image.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-jsa.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-jsa.jar
new file mode 100644
index 0000000..5bae473
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-jsa.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-lilypond.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-lilypond.jar
new file mode 100644
index 0000000..4b701b3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-lilypond.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-midi.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-midi.jar
new file mode 100644
index 0000000..3314e08
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-midi.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-musicxml.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-musicxml.jar
new file mode 100644
index 0000000..ecff9d7
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-musicxml.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-pdf.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-pdf.jar
new file mode 100644
index 0000000..7103fb7
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-pdf.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-ptb.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-ptb.jar
new file mode 100644
index 0000000..6845fb5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-ptb.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-svg.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-svg.jar
new file mode 100644
index 0000000..0ecab7d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-svg.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-tef.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-tef.jar
new file mode 100644
index 0000000..182b310
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-tef.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-tray.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-tray.jar
new file mode 100644
index 0000000..a5a68a2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-tray.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-tuner.jar b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-tuner.jar
new file mode 100644
index 0000000..c8bafe9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/plugins/tuxguitar-tuner.jar differ
diff --git a/TuxGuitar-testing/platform-all/share/scales/scales.xml b/TuxGuitar-testing/platform-all/share/scales/scales.xml
new file mode 100644
index 0000000..20da1ce
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/scales/scales.xml
@@ -0,0 +1,278 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<scales>
+	<scale name="Major Scale" keys="1,3,5,6,8,10,12" />
+	<scale name="Pentatonic Major Scale" keys="1,3,5,8,10" />
+	<scale name="Blues Major Scale" keys="1,4,6,7,8,10" />
+	<scale name="Minor Scale" keys="1,3,4,6,8,9,11" />
+	<scale name="Melodic Minor Scale" keys="1,3,4,6,8,10,12" />
+	<scale name="Harmonic Minor Scale" keys="1,3,4,6,8,9,12" />
+	<scale name="Pentatonic Minor Scale" keys="1,4,6,8,11" />
+	<scale name="Blues Minor Scale" keys="1,4,6,7,8,11" />
+	<scale name="Augmented Scale" keys="1,4,5,8,9,12" />
+	<scale name="Be-Bop Scale" keys="1,3,5,6,8,10,11,12" />
+	<scale name="Chromatic Scale" keys="1,2,3,4,5,6,7,8,9,10,11,12" />
+	<scale name="Whole-Half Scale" keys="1,3,4,6,7,9,10,12" />
+	<scale name="Half-Whole Scale" keys="1,2,4,5,7,8,10,11" />
+	<scale name="Whole Tone Scale" keys="1,3,5,7,9,11" />
+	<scale name="Augmented fifth Scale" keys="1,3,5,6,8,9,10,12" />
+	<scale name="Algerian Scale" keys="1,3,4,7,8,9,12"  />
+	<scale name="Arabian Scale" keys="1,3,5,6,7,9,11" />
+	<scale name="Balinese Scale" keys="1,2,4,8,9" />
+	<scale name="Bartok Scale" keys="1,3,5,7,8,10,11" />
+	<scale name="Byzantine Scale" keys="1,2,5,6,8,9,12" />
+	<scale name="Chinese Scale" keys="1,3,5,8,10" />
+	<scale name="Egyptian Scale" keys="1,3,6,8,11" />
+	<scale name="Enigmatic Scale" keys="1,2,5,7,9,11,12" />
+	<scale name="Spanish Scale" keys="1,2,5,6,8,9,11" />
+	<scale name="Spanish 8 Tone Scale" keys="1,2,4,5,6,7,9,11" />
+	<scale name="Ethiopian Scale" keys="1,3,4,6,8,9,11" />
+	<scale name="Gypsy Scale" keys="1,2,5,6,8,10,11" />
+	<scale name="Hungarian Gypsy Scale" keys="1,3,4,7,8,9,11" />
+	<scale name="Hindu Scale" keys="1,3,5,6,8,9,11" />
+	<scale name="Iwato Scale" keys="1,2,6,7,11" />
+	<scale name="Japanese Scale" keys="1,2,6,8,9" />
+	<scale name="Javanese Scale" keys="1,2,4,6,8,10,11" />
+	<scale name="Jewish Scale" keys="1,2,5,6,8,9,11" />
+	<scale name="Hawaiian Scale" keys="1,3,4,6,8,10,12" />
+	<scale name="Hirajoshi Scale" keys="1,3,4,8,9" />
+	<scale name="Hungarian Minor Scale" keys="1,3,4,7,8,9,12" />
+	<scale name="Hungarian Major Scale" keys="1,4,5,7,8,10,11" />
+	<scale name="Kumoi Scale" keys="1,2,6,8,9" />
+	<scale name="Leading Whole Tone Scale" keys="1,3,5,7,9,11,12" />
+	<scale name="Mohammedan Scale" keys="1,3,4,6,8,9,12" />
+	<scale name="Mongolian Scale" keys="1,3,5,8,10" />
+	<scale name="Neapolitan Minor Scale" keys="1,2,4,6,8,9,12" />
+	<scale name="Neapolitan Major Scale" keys="1,2,4,6,8,10,12" />
+	<scale name="Oriental Scale" keys="1,2,5,6,7,10,11" />
+	<scale name="Overtone Scale" keys="1,3,5,7,8,10,11" />
+	<scale name="Pelog Scale" keys="1,2,4,8,11" />
+	<scale name="Persian Scale" keys="1,2,5,6,7,9,12" />
+	<scale name="Ionian Mode" keys="1,3,5,6,8,10,12" />
+	<scale name="Dorian Mode" keys="1,3,4,6,8,10,11" />
+	<scale name="Phrygian Mode" keys="1,2,4,6,8,9,11" />
+	<scale name="Lydian Mode" keys="1,3,5,7,8,10,12" />
+	<scale name="Mixolydian Mode" keys="1,3,5,6,8,10,11" />
+	<scale name="Aeolian Mode" keys="1,3,4,6,8,9,11" />
+	<scale name="Locrian Mode" keys="1,2,4,6,7,9,11" />
+	<scale name="Aeolian Harmonic Mode" keys="1,3,4,6,8,9,12" />
+	<scale name="Locrian Sharp 6 Mode" keys="1,2,4,6,7,10,11" />
+	<scale name="Major Sharp 5 Mode" keys="1,3,5,6,9,10,12" />
+	<scale name="Dorian Sharp 4 Mode" keys="1,3,4,7,8,10,11" />
+	<scale name="Phrygian Major Mode" keys="1,2,5,6,8,9,11" />
+	<scale name="Lydian Sharp 2 mode" keys="1,4,5,7,8,10,12" />
+	<scale name="Superlocrian Double Flat 7 Mode" keys="1,2,4,5,7,9,10" />
+	<scale name="Jazz Minor Mode" keys="1,3,4,6,8,10,12" />
+	<scale name="Dorian b2 Minor Mode" keys="1,2,4,6,8,10,12" />
+	<scale name="Lydian Augmented Minor Mode" keys="1,3,5,7,9,10,12" />
+	<scale name="Lydian Flat 7 Minor Mode" keys="1,3,5,7,8,10,11" />
+	<scale name="Mixolydian Flat 6 Minor Mode" keys="1,3,5,6,8,9,11" />
+	<scale name="Locrian Sharp 2 Minor Mode" keys="1,3,4,6,7,9,11" />
+	<scale name="Superlocrian Minor Mode" keys="1,2,4,5,7,9,11" />
+	<scale name="Pentatonic Majeur Mode" keys="1,3,5,8,10" />
+	<scale name="Pentatonic Mode 2" keys="1,3,6,8,11" />
+	<scale name="Pentatonic Mode 3" keys="1,4,6,9,11" />
+	<scale name="Pentatonic Mode 4" keys="1,3,6,8,10" />
+	<scale name="Pentatonic Dominant Mode" keys="1,3,5,8,11" />
+	<scale name="Pentatonic Minor Mode" keys="1,4,6,8,11" />
+	<scale name="Altered Pentatonic Mode" keys="1,2,5,8,10" />
+	<scale name="Blues Mode" keys="1,4,6,7,8,10" />
+	<scale name="Major Arpeggio" keys="1,5,8" />
+	<scale name="Minor Arpeggio" keys="1,4,8" />
+	<scale name="Major 7th Major Arpeggio" keys="1,5,8,12" />
+	<scale name="Major 7th Minor Arpeggio" keys="1,5,8,11" />
+	<scale name="Minor 7th Major Arpeggio" keys="1,4,8,12" />
+	<scale name="Minor 7th Minor Arpeggio" keys="1,4,8,11" />
+	<scale name="Major 9th Arpeggio" keys="1,3,5,8,11" />
+	<scale name="Minor 9th Arpeggio" keys="1,3,4,8,11" />
+	<scale name="Major 11th Arpeggio" keys="1,3,5,6,8,11" />
+	<scale name="Minor 11th Arpeggio" keys="1,3,4,6,8,11" />
+	<scale name="Major 13th Arpeggio" keys="1,3,5,6,8,10,11" />
+	<scale name="Minor 13th Arpeggio" keys="1,3,4,6,8,10,11" />
+	<scale name="Augmented Arpeggio" keys="1,5,9" />
+	<scale name="Diminished Arpeggio" keys="1,4,7,10" />
+	<scale name="Gb SCALE: Ionian b5 (Nicolas SLONIMSKY n°1074)" keys="1,3,5,6,7,10,12" />
+	<scale name="Gb SCALE: Dorian b4" keys="1,3,4,5,8,10,11" />
+	<scale name="Gb SCALE: Phrygian b3 (Purva Melakarta n° 2)" keys="1,2,3,6,8,9,11" />
+	<scale name="Gb SCALE: Lydian b2 (Uttara Melakarta n° 17, Nicolas SLONIMSKY n°1058)" keys="1,2,5,7,8,10,12" />
+	<scale name="Gb SCALE: Mixolydian b1" keys="1,4,6,7,9,11,12" />
+	<scale name="Gb SCALE: Aeolian b7 (Purva Melakarta n° 19)" keys="1,3,4,6,8,9,10" />
+	<scale name="Gb SCALE: Locian b6" keys="1,2,4,6,7,8,11" />
+	<scale name="Db SCALE: Ionian b2 (Purva Melakarta n° 17, Nicolas SLONIMSKY n°1055)" keys="1,2,5,6,8,10,12" />
+	<scale name="Db SCALE: Dorian b1" keys="1,4,5,7,9,11,12" />
+	<scale name="Db SCALE: Phrygian b7 (Purva Melakarta n° 7)" keys="1,2,4,6,8,9,10" />
+	<scale name="Db SCALE: Lydian b6 (Uttara Melakarta n° 27)" keys="1,3,5,7,8,9,12" />
+	<scale name="Db SCALE: Mixolydian b5 (Nicolas SLONIMSKY n°1073)" keys="1,3,5,6,7,10,11" />
+	<scale name="Db SCALE: Aeolian b4" keys="1,3,4,5,8,9,11" />
+	<scale name="Db SCALE: Locian b3" keys="1,2,3,6,7,9,11" />
+	<scale name="Ab SCALE: Ionian b6 (Purva Melakarta n° 27, Nicolas SLONIMSKY n°1079)" keys="1,3,5,6,8,9,12" />
+	<scale name="Ab SCALE: Dorian b5 (Nicolas SLONIMSKY n°1072)" keys="1,3,4,6,7,10,11" />
+	<scale name="Ab SCALE: Phrygian b4 (Nicolas SLONIMSKY n°1066)" keys="1,2,4,5,8,9,11" />
+	<scale name="Ab SCALE: Lydian b3 (Uttara Melakarta n° 23, Nicolas SLONIMSKY n°1065)" keys="1,3,4,7,8,10,12" />
+	<scale name="Ab SCALE: Mixolydian b2 (Purva Melakarta n° 16, Nicolas SLONIMSKY n°1054)" keys="1,2,5,6,8,10,11" />
+	<scale name="Ab SCALE: Aeolian b1" keys="1,4,5,7,9,10,12" />
+	<scale name="Ab SCALE: Locian b7" keys="1,2,4,6,7,9,10" />
+	<scale name="Eb SCALE: Ionian b3 (Purva Melakarta n° 23, Nicolas SLONIMSKY n°1042, Melodic Minor Scale,)" keys="1,3,4,6,8,10,12" />
+	<scale name="Eb SCALE: Dorian b2 (Purva Melakarta n° 10, Nicolas SLONIMSKY n°1037)" keys="1,2,4,6,8,10,11" />
+	<scale name="Eb SCALE: Phrygian b1 (Nicolas SLONIMSKY n°1066, Lydien Augmenté)" keys="1,3,5,7,9,10,12" />
+	<scale name="Eb SCALE: Lydian b7 (Uttara Melakarta n° 28, Nicolas SLONIMSKY n°1046, Bartok Scale)" keys="1,3,5,7,8,10,11" />
+	<scale name="Eb SCALE: Mixolydian b6 (Purva Melakarta n° 26, Nicolas SLONIMSKY n°1043)" keys="1,3,5,6,8,9,11" />
+	<scale name="Eb SCALE: Aeolian b5 (Nicolas SLONIMSKY n°1039)" keys="1,3,4,6,7,9,11" />
+	<scale name="Eb SCALE: Locian b4 (Nicolas SLONIMSKY n°1034, Altéré)" keys="1,2,4,5,7,9,11" />
+	<scale name="G# SCALE: Ionian #5" keys="1,3,5,6,9,10,12" />
+	<scale name="G# SCALE: Dorian #4 (Uttara Melakarta n° 22, Nicolas SLONIMSKY n°1064)" keys="1,3,4,7,8,10,11" />
+	<scale name="G# SCALE: Phrygian #3 (Purva Melakarta n°14, Nicolas SLONIMSKY n°1053, Spanish Scale, Jewish Scale)" keys="1,2,5,6,8,9,11" />
+	<scale name="G# SCALE: Lydian #2 (Uttara Melakarta n° 35)" keys="1,4,5,7,8,10,12" />
+	<scale name="G# SCALE: Mixolydian #1" keys="1,2,4,5,7,9,10" />
+	<scale name="G# SCALE: Aeolian #7 (Purva Melakarta n° 21, Nicolas SLONIMSKY n°1078, Harmonic Minor Scale)" keys="1,3,4,6,8,9,12" />
+	<scale name="G# SCALE: Locian #6 (Nicolas SLONIMSKY n°1070)" keys="1,2,4,6,7,10,11" />
+	<scale name="D# SCALE: Ionian #2 (Purva Melakarta n° 35, Nicolas SLONIMSKY n°1052)" keys="1,4,5,6,8,10,12" />
+	<scale name="D# SCALE: Dorian #1" keys="1,2,3,5,7,9,10" />
+	<scale name="D# SCALE: Phrygian #7 (Purva Melakarta n° 9, Napolitain Mineur)" keys="1,2,4,6,8,9,12" />
+	<scale name="D# SCALE: Lydian #6 (Uttara Melakarta n° 30)" keys="1,3,5,7,8,11,12" />
+	<scale name="D# SCALE: Mixolydian #5" keys="1,3,5,6,9,10,11" />
+	<scale name="D# SCALE: Aeolian #4 (Uttara Melakarta n° 20, Nicolas SLONIMSKY n°1063)" keys="1,3,4,7,8,9,11" />
+	<scale name="D# SCALE: Locian #3" keys="1,2,5,6,7,9,11" />
+	<scale name="A# SCALE: Ionian #6 (Purva Melakarta n° 30)" keys="1,3,5,6,8,11,12" />
+	<scale name="A# SCALE: Dorian #5" keys="1,3,4,6,9,10,11" />
+	<scale name="A# SCALE: Phrygian #4 (Uttara Melakarta n° 8, Nicolas SLONIMSKY n°1060)" keys="1,2,4,7,8,9,11" />
+	<scale name="A# SCALE: Lydian #3" keys="1,3,6,7,8,10,12" />
+	<scale name="A# SCALE: Mixolydian #2 (Purva Melakarta n° 34, Nicolas SLONIMSKY n°1051)" keys="1,4,5,6,8,10,11" />
+	<scale name="A# SCALE: Aeolian #1" keys="1,2,3,5,7,8,10" />
+	<scale name="A# SCALE: Locian #7 (Nicolas SLONIMSKY n°1076)" keys="1,2,4,6,7,9,12" />
+	<scale name="C#Eb SCALE: Ionian #1b3" keys="1,2,3,5,7,9,11" />
+	<scale name="C#Eb SCALE: Dorian #7b2 (Purva Melakarta n° 11, Nicolas SLONIMSKY n°1038, Napolitain Majeur)" keys="1,2,4,6,8,10,12" />
+	<scale name="C#Eb SCALE: Phrygian #6b1 (Leading Whole Tone)" keys="1,3,5,7,9,11,12" />
+	<scale name="C#Eb SCALE: Lydian #5b7" keys="1,3,5,7,9,10,11" />
+	<scale name="C#Eb SCALE: Mixolydian #4b6 (Uttara Melakarta n° 26, Lydien Mineur)" keys="1,3,5,7,8,9,11" />
+	<scale name="C#Eb SCALE: Aeolian #3b5(Locrien Majeur)" keys="1,3,5,6,7,9,11" />
+	<scale name="C#Eb SCALE: Locrian #2b4" keys="1,3,4,5,7,9,11" />
+	<scale name="GbAb SCALE: Ionian b5b6" keys="1,3,5,6,7,9,12" />
+	<scale name="GbAb SCALE: Dorian b4b5" keys="1,3,4,5,7,10,11" />
+	<scale name="GbAb SCALE: Phrygian b3b4" keys="1,2,3,5,8,9,11" />
+	<scale name="GbAb SCALE: Lydian b2b3 (Uttara Melakarta n° 11, Nicolas SLONIMSKY n°1062)" keys="1,2,4,7,8,10,12" />
+	<scale name="GbAb SCALE: Mixolydian b1b2" keys="1,3,6,7,9,11,12" />
+	<scale name="GbAb SCALE: Aeolian b7b1" keys="1,4,5,7,9,10,11" />
+	<scale name="GbAb SCALE: Locrian b6b7" keys="1,2,4,6,7,8,10" />
+	<scale name="C#Gb SCALE: Ionian #1b5" keys="1,2,4,5,6,9,11" />
+	<scale name="C#Gb SCALE: Dorian #7b4" keys="1,3,4,5,8,10,12" />
+	<scale name="C#Gb SCALE: Phrygian #6b3 (Purva Melakarta n° 4)" keys="1,2,3,6,8,10,11" />
+	<scale name="C#Gb SCALE: Lydian #5b2" keys="1,2,5,7,9,10,12" />
+	<scale name="C#Gb SCALE: Mixolydian #4b1" keys="1,4,6,8,9,11,12" />
+	<scale name="C#Gb SCALE: Aeolian #3b7 (Purva Melakarta n° 25)" keys="1,3,5,6,8,9,10" />
+	<scale name="C#Gb SCALE: Locrian #2b6" keys="1,3,4,6,7,8,11" />
+	<scale name="AbD# SCALE: Ionian #2b6 (Purva Melakarta n° 33)" keys="1,4,5,6,8,9,12" />
+	<scale name="AbD# SCALE: Dorian #1b5" keys="1,2,3,5,6,9,10" />
+	<scale name="AbD# SCALE: Phrygian #7b4 (Nicolas SLONIMSKY n°1086)" keys="1,2,4,5,8,9,12" />
+	<scale name="AbD# SCALE: Lydian #6b3 (Uttara Melakarta n° 24)" keys="1,3,4,7,8,11,12" />
+	<scale name="AbD# SCALE: Mixolydian #5b2 (Nicolas SLONIMSKY n°1080)" keys="1,2,5,6,9,10,11" />
+	<scale name="AbD# SCALE: Aeolian #4b1" keys="1,4,5,8,9,10,12" />
+	<scale name="AbD# SCALE: Locrian #3b7" keys="1,2,5,6,7,9,10" />
+	<scale name="A#Eb SCALE: Ionian #6b3 (Purva Melakarta n° 24)" keys="1,3,4,6,8,11,12" />
+	<scale name="A#Eb SCALE: Dorian #5b2" keys="1,2,4,6,9,10,11" />
+	<scale name="A#Eb SCALE: Phrygian #4b1" keys="1,3,5,8,9,10,12" />
+	<scale name="A#Eb SCALE: Lydian #3b7" keys="1,3,6,7,8,10,11" />
+	<scale name="A#Eb SCALE: Mixolydian #2b6 (Purva Melakarta n° 32, Nicolas SLONIMSKY n°1050)" keys="1,4,5,6,8,9,11" />
+	<scale name="A#Eb SCALE: Aeolian #1b5" keys="1,2,3,5,6,8,10" />
+	<scale name="A#Eb SCALE: Locrian #7b4 (Superlocrien Harmonique, Nicolas SLONIMSKY n°1075)" keys="1,2,4,5,7,9,12" />
+	<scale name="G#Db SCALE: Ionian #5b2 (Nicolas SLONIMSKY n°1081)" keys="1,2,5,6,9,10,12" />
+	<scale name="G#Db SCALE: Dorian #4b1" keys="1,4,5,8,9,11,12" />
+	<scale name="G#Db SCALE: Phrygian #3b7 (Purva Melakarta n° 13)" keys="1,2,5,6,8,9,10" />
+	<scale name="G#Db SCALE: Lydian #2b6 (Uttara Melakarta n° 33)" keys="1,4,5,7,8,9,12" />
+	<scale name="G#Db SCALE: Mixolydian #1b5" keys="1,2,4,5,6,9,10" />
+	<scale name="G#Db SCALE: Aeolian #7b4 (Nicolas SLONIMSKY n°1087)" keys="1,3,4,5,8,9,12" />
+	<scale name="G#Db SCALE: Locrian #6b3" keys="1,2,3,6,7,10,11" />
+	<scale name="G#Eb SCALE: Ionian #5b3 (Nohkan)" keys="1,3,4,6,9,10,12" />
+	<scale name="G#Eb SCALE: Dorian #4b2 (Uttara Melakarta n° 10, Nicolas SLONIMSKY n°1061)" keys="1,2,4,7,8,10,11" />
+	<scale name="G#Eb SCALE: Phrygian #3b1" keys="1,3,6,7,9,10,12" />
+	<scale name="G#Eb SCALE: Lydian #2b7 (Uttara Melakarta n° 34, Hongrois Majeur)" keys="1,4,5,7,8,10,11" />
+	<scale name="G#Eb SCALE: Mixolydian #1b6" keys="1,2,4,5,7,8,10" />
+	<scale name="G#Eb SCALE: Aeolian #7b5 (Nicolas SLONIMSKY n°1077)" keys="1,3,4,6,7,9,12" />
+	<scale name="G#Eb SCALE: Locrian #6b4 (Nicolas SLONIMSKY n°1069)" keys="1,2,4,5,7,10,11" />
+	<scale name="G#D# SCALE: Ionian #5#2" keys="1,4,5,6,9,10,12" />
+	<scale name="G#D# SCALE: Dorian #4#1" keys="1,2,3,6,7,9,10" />
+	<scale name="G#D# SCALE: Phrygian #3#7 (Purva Melakarta n° 15, Nicolas SLONIMSKY n°1082)" keys="1,2,5,6,8,9,12" />
+	<scale name="G#D# SCALE: Lydian #2#6 (Uttara Melakarta n° 36)" keys="1,4,5,7,8,11,12" />
+	<scale name="G#D# SCALE: Mixolydian #1#5" keys="1,2,4,5,8,9,10" />
+	<scale name="G#D# SCALE: Aeolian #7#4 (Uttara Melakarta n° 21, Nicolas SLONIMSKY n°1085)" keys="1,3,4,7,8,9,12" />
+	<scale name="G#D# SCALE: Locrian #6#3" keys="1,2,5,6,7,10,11" />
+	<scale name="AbC# SCALE: Ionian b6#1 (Absidioles 4)" keys="1,2,4,5,7,8,11" />
+	<scale name="AbC# SCALE: Dorian b5#7" keys="1,3,4,6,7,10,12" />
+	<scale name="AbC# SCALE: Phrygian b4#6 (Nicolas SLONIMSKY n°1067, Absidioles 3)" keys="1,2,4,5,8,10,11" />
+	<scale name="AbC# SCALE: Lydian b3#5" keys="1,3,4,7,9,10,12" />
+	<scale name="AbC# SCALE: Mixolydian b2#4 (Uttara Melakarta n° 16, Nicolas SLONIMSKY n°1057)" keys="1,2,5,7,8,10,11" />
+	<scale name="AbC# SCALE: Aeolian b1#3" keys="1,4,6,7,9,10,12" />
+	<scale name="AbC# SCALE: Locrian b7#2 (Blue Scale)" keys="1,3,4,6,7,9,10" />
+	<scale name="G#A# SCALE: Ionian #5#6" keys="1,3,5,6,9,11,12" />
+	<scale name="G#A# SCALE: Dorian #4#5" keys="1,3,4,7,9,10,11" />
+	<scale name="G#A# SCALE: Phrygian #3#4 (Uttara Melakarta n° 14, Nicolas SLONIMSKY n°1056)" keys="1,2,5,7,8,9,11" />
+	<scale name="G#A# SCALE: Lydian #2#3" keys="1,4,6,7,8,10,12" />
+	<scale name="G#A# SCALE: Mixolydian #1#2" keys="1,3,4,5,7,9,10" />
+	<scale name="G#A# SCALE: Aeolian #7#1" keys="1,2,3,5,7,8,11" />
+	<scale name="G#A# SCALE: Locrian #6#5 (Nicolas SLONIMSKY n°1071)" keys="1,2,4,6,7,10,12" />
+	<scale name="DbGb SCALE: Ionian b2b5" keys="1,2,5,6,7,10,12" />
+	<scale name="DbGb SCALE: Dorian b1b4" keys="1,4,5,6,9,11,12" />
+	<scale name="DbGb SCALE: Phrygian b7b3 (Purva Melakarta n° 1)" keys="1,2,3,6,8,9,10" />
+	<scale name="DbGb SCALE: Lydian b6b2 (Uttara Melakarta n° 15, Nicolas SLONIMSKY n°1083, Composite)" keys="1,2,5,7,8,9,12" />
+	<scale name="DbGb SCALE: Mixolydian b5b1" keys="1,4,6,7,8,11,12" />
+	<scale name="DbGb SCALE: Aeolian b4b7" keys="1,3,4,5,8,9,10" />
+	<scale name="DbGb SCALE: Locrian b3b6" keys="1,2,3,6,7,8,11" />
+	<scale name="D#A# SCALE: Ionian #2#6 (Purva Melakarta n° 36)" keys="1,4,5,6,8,11,12" />
+	<scale name="D#A# SCALE: Dorian #1#5" keys="1,2,3,5,8,9,10" />
+	<scale name="D#A# SCALE: Phrygian #7#4 (Uttara Melakarta n° 9, Nicolas SLONIMSKY n°1084, Todî)" keys="1,2,4,7,8,9,12" />
+	<scale name="D#A# SCALE: Lydian #6#3" keys="1,3,6,7,8,11,12" />
+	<scale name="D#A# SCALE: Mixolydian #5#2" keys="1,4,5,6,9,10,11" />
+	<scale name="D#A# SCALE: Aeolian #4#1" keys="1,2,3,6,7,8,10" />
+	<scale name="D#A# SCALE: Locrian #3#7" keys="1,2,5,6,7,9,12" />
+	<scale name="GbD# SCALE: Ionian b5#2" keys="1,4,5,6,7,10,12" />
+	<scale name="GbD# SCALE: Dorian b4#1" keys="1,2,3,4,7,9,10" />
+	<scale name="GbD# SCALE: Phrygian b3#7 (Purva Melakarta n° 3)" keys="1,2,3,6,8,9,12" />
+	<scale name="GbD# SCALE: Lydian b2#6 (Uttara Melakarta n° 18)" keys="1,2,5,7,8,11,12" />
+	<scale name="GbD# SCALE: Mixolydian b1#5" keys="1,4,6,7,10,11,12" />
+	<scale name="GbD# SCALE: Aeolian b7#4 (Uttara Melakarta n° 19)" keys="1,3,4,7,8,9,10" />
+	<scale name="GbD# SCALE: Locrian b6#3" keys="1,2,5,6,7,8,11" />
+	<scale name="A#Db SCALE: Ionian #6b2 (Purva Melakarta n° 18)" keys="1,2,5,6,8,11,12" />
+	<scale name="A#Db SCALE: Dorian #5b1" keys="1,4,5,7,10,11,12" />
+	<scale name="A#Db SCALE: Phrygian #4b7 (Uttara Melakarta n° 7)" keys="1,2,4,7,8,9,10" />
+	<scale name="A#Db SCALE: Lydian #3b6" keys="1,3,6,7,8,9,12" />
+	<scale name="A#Db SCALE: Mixolydian #2b5" keys="1,4,5,6,7,10,11" />
+	<scale name="A#Db SCALE: Aeolian #1b4" keys="1,2,3,4,7,8,10" />
+	<scale name="A#Db SCALE: Locrian #7b3" keys="1,2,3,6,7,9,12" />
+	<scale name="A#Gb SCALE: Ionian #6b5" keys="1,3,5,6,7,11,12" />
+	<scale name="A#Gb SCALE: Dorian #5b4" keys="1,3,4,5,9,10,11" />
+	<scale name="A#Gb SCALE: Phrygian #4b3 (Uttara Melakarta n° 2)" keys="1,2,3,7,8,9,11" />
+	<scale name="A#Gb SCALE: Lydian #3b2" keys="1,2,6,7,8,10,12" />
+	<scale name="A#Gb SCALE: Mixolydian #2b1" keys="1,5,6,7,9,11,12" />
+	<scale name="A#Gb SCALE: Aeolian #1b7" keys="1,2,3,5,7,8,9" />
+	<scale name="A#Gb SCALE: Locrian #7b6" keys="1,2,4,6,7,8,12" />
+	<scale name="GbA#C# SCALE: Phrygian b3#4#6 (Uttara Melakarta n° 4)" keys="1,2,3,7,8,10,11" />
+	<scale name="GbA#C# SCALE: Locrian b6#7#3" keys="1,3,4,6,7,8,12" />
+	<scale name="D omitted Ab added SCALE: Ionian omit2 addb6" keys="1,5,6,8,9,10,12" />
+	<scale name="GbA#D# SCALE: Phrygian b3#4#7 (Uttara Melakarta n° 3)" keys="1,2,3,7,8,9,12" />
+	<scale name="EbGbA# SCALE: Aeolian b5b7#1" keys="1,2,3,5,6,8,9" />
+	<scale name="GbA#Db SCALE: Phrygian b3#4b7" keys="1,2,3,7,8,9,10" />
+	<scale name="B#C#Gb SCALE: Dorian #6#7b4" keys="1,3,4,5,8,11,12" />
+	<scale name="B#C#Gb SCALE: Aeolian #2#3b7" keys="1,4,5,6,8,9,10" />
+	<scale name="DbEbb SCALE: Ionian b2bb3 (Purva Melakarta n° 5)" keys="1,2,3,6,8,10,12" />
+	<scale name="DbEbb SCALE: Dorian b1bb2 (Enigmatic) " keys="1,2,5,7,9,11,12" />
+	<scale name="DbEbb SCALE: Phrygian b7bb1" keys="1,4,6,8,10,11,12" />
+	<scale name="DbEbb SCALE: Lydian b6bb7 (Uttara Melakarta n° 25)" keys="1,3,5,7,8,9,10" />
+	<scale name="DbEbb SCALE: Mixolydian b5bb6" keys="1,3,5,6,7,8,11" />
+	<scale name="C#D#Ab SCALE: Ionian #1#2b6" keys="1,3,4,5,7,8,11" />
+	<scale name="C#D#Ab SCALE: Phrygian 6#7#4b (Nicolas SLONIMSKY n°1068)" keys="1,2,4,5,8,10,12" />
+	<scale name="C#D#Ab SCALE: Aeolian #3#4b1" keys="1,4,6,8,9,10,12" />
+	<scale name="GbAbC# SCALE: Ionian b5b6#1" keys="1,2,4,5,6,8,11" />
+	<scale name="GbAbC# SCALE: Locrian b6b7#2" keys="1,3,4,6,7,8,10" />
+	<scale name="G#A#Eb SCALE: Lydian #2#3b7" keys="1,4,6,7,8,10,11" />
+	<scale name="G#A#Db SCALE: Phrygian #3#4b7 (Uttara Melakarta n° 13)" keys="1,2,5,7,8,9,10" />
+	<scale name="G#A#Db SCALE: Lydian #2#3b6" keys="1,4,6,7,8,9,12" />
+	<scale name="D#GbAb SCALE: Lydian #6b2b3 (Uttara Melakarta n° 12)" keys="1,2,4,7,8,11,12" />
+	<scale name="D#GbAb SCALE: Aeolian #4b7b1" keys="1,4,5,8,9,10,11" />
+	<scale name="A#C#Eb SCALE: Mixolydian #2#4b6 (Uttara Melakarta n° 32)" keys="1,4,5,7,8,9,11" />
+	<scale name="A#DbEb SCALE: Ionian #6b2b3 (Purva Melakarta n° 12)" keys="1,2,4,6,8,11,12" />
+	<scale name="A#DbEb SCALE: Aeolian #1b4b5" keys="1,2,3,4,6,8,10" />
+	<scale name="A#B#C#Eb SCALE: Mixolydian #2#3#4b6" keys="1,4,6,7,8,9,11" />
+	<scale name="C#D#GbAb SCALE: Locrian #2#3b6b7" keys="1,3,5,6,7,8,10" />
+	<scale name="GbA#C#D# SCALE: Locrian b6#7#2#3"  keys="1,3,5,6,7,8,12" />
+	<scale name="GbA#C#D# SCALE: Phrygian b3#4#6#7 (Uttara Melakarta n° 5)"  keys="1,2,3,7,8,10,12" />
+	<scale name="EbFbGbb SCALE: Aeolian b5b6bb7" keys="1,3,4,6,7,8,9" />
+</scales>
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/1.png
new file mode 100644
index 0000000..f371f7b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/16.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/16.png
new file mode 100644
index 0000000..05473ef
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/16.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/2.png
new file mode 100644
index 0000000..b04bb5d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/32.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/32.png
new file mode 100644
index 0000000..cbb56ac
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/32.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/4.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/4.png
new file mode 100644
index 0000000..06dfd1a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/4.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/64.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/64.png
new file mode 100644
index 0000000..78c7a38
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/64.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/8.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/8.png
new file mode 100644
index 0000000..ef81b9a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/8.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/about_authors.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/about_authors.png
new file mode 100644
index 0000000..dd00e76
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/about_authors.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/about_description.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/about_description.png
new file mode 100644
index 0000000..0936ccd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/about_description.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/about_license.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/about_license.png
new file mode 100644
index 0000000..95eebbe
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/about_license.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_back.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_back.png
new file mode 100644
index 0000000..8a36e09
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_back.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_file.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_file.png
new file mode 100644
index 0000000..5088217
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_file.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_folder.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_folder.png
new file mode 100644
index 0000000..1b19b3c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_folder.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_new.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_new.png
new file mode 100644
index 0000000..1d22a4e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_new.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_refresh.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_refresh.png
new file mode 100644
index 0000000..42d0872
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_refresh.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_root.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_root.png
new file mode 100644
index 0000000..db0d5a5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/browser_root.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/chord.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/chord.png
new file mode 100644
index 0000000..11019a7
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/chord.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/closerepeat.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/closerepeat.png
new file mode 100644
index 0000000..223ce00
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/closerepeat.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/division-type.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/division-type.png
new file mode 100644
index 0000000..aa18421
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/division-type.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/dotted.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/dotted.png
new file mode 100644
index 0000000..f5b0ddd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/dotted.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/doubledotted.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/doubledotted.png
new file mode 100644
index 0000000..1ce6450
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/doubledotted.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_f.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_f.png
new file mode 100644
index 0000000..a547941
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_f.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_ff.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_ff.png
new file mode 100644
index 0000000..0a22c7f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_ff.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_fff.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_fff.png
new file mode 100644
index 0000000..b265522
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_fff.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_mf.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_mf.png
new file mode 100644
index 0000000..a03c125
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_mf.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_mp.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_mp.png
new file mode 100644
index 0000000..af9c9f2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_mp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_p.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_p.png
new file mode 100644
index 0000000..029512d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_p.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_pp.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_pp.png
new file mode 100644
index 0000000..c2a7d59
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_pp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_ppp.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_ppp.png
new file mode 100644
index 0000000..e335a53
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/dynamic_ppp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_mode_edition.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_mode_edition.png
new file mode 100644
index 0000000..334bb11
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_mode_edition.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_mode_edition_no_natural.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_mode_edition_no_natural.png
new file mode 100644
index 0000000..c04448e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_mode_edition_no_natural.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_mode_selection.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_mode_selection.png
new file mode 100644
index 0000000..ca18245
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_mode_selection.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_redo.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_redo.png
new file mode 100644
index 0000000..e3eaa19
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_redo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_undo.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_undo.png
new file mode 100644
index 0000000..6fcdb7c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_undo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_voice_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_voice_1.png
new file mode 100644
index 0000000..3338d3c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_voice_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_voice_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_voice_2.png
new file mode 100644
index 0000000..f54d928
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/edit_voice_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_accentuated.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_accentuated.png
new file mode 100644
index 0000000..8740222
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_accentuated.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_bend.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_bend.png
new file mode 100644
index 0000000..ed05356
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_bend.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_dead.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_dead.png
new file mode 100644
index 0000000..5c3e07c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_dead.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_fade_in.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_fade_in.png
new file mode 100644
index 0000000..ebf9fd0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_fade_in.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_ghost.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_ghost.png
new file mode 100644
index 0000000..3a9eaf8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_ghost.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_grace.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_grace.png
new file mode 100644
index 0000000..29d5695
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_grace.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_hammer.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_hammer.png
new file mode 100644
index 0000000..d3eca5f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_hammer.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_harmonic.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_harmonic.png
new file mode 100644
index 0000000..6fe19a9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_harmonic.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_heavy_accentuated.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_heavy_accentuated.png
new file mode 100644
index 0000000..75ed1ef
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_heavy_accentuated.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_palm_mute.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_palm_mute.png
new file mode 100644
index 0000000..d4ef755
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_palm_mute.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_popping.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_popping.png
new file mode 100644
index 0000000..4964783
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_popping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_slapping.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_slapping.png
new file mode 100644
index 0000000..e49fd96
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_slapping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_slide.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_slide.png
new file mode 100644
index 0000000..ea63a1b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_slide.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_staccato.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_staccato.png
new file mode 100644
index 0000000..524dbbe
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_staccato.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_tapping.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_tapping.png
new file mode 100644
index 0000000..dec8537
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_tapping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_tremolo_bar.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_tremolo_bar.png
new file mode 100644
index 0000000..f3a3939
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_tremolo_bar.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_tremolo_picking.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_tremolo_picking.png
new file mode 100644
index 0000000..b72f5da
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_tremolo_picking.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_trill.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_trill.png
new file mode 100644
index 0000000..1ccc4d0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_trill.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_vibrato.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_vibrato.png
new file mode 100644
index 0000000..19f4860
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/effect_vibrato.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/firstfret.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/firstfret.png
new file mode 100644
index 0000000..a89fa4f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/firstfret.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/fret.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/fret.png
new file mode 100644
index 0000000..801b86d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/fret.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/fretboard.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/fretboard.png
new file mode 100644
index 0000000..3813fb4
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/fretboard.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/grace.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/grace.png
new file mode 100644
index 0000000..29d5695
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/grace.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-16x16.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-16x16.png
new file mode 100644
index 0000000..c617291
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-16x16.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-24x24.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-24x24.png
new file mode 100644
index 0000000..30e43cc
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-24x24.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-32x32.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-32x32.png
new file mode 100644
index 0000000..cebffe0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-32x32.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-48x48.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-48x48.png
new file mode 100644
index 0000000..c6a172b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-48x48.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-64x64.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-64x64.png
new file mode 100644
index 0000000..8341806
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-64x64.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-96x96.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-96x96.png
new file mode 100644
index 0000000..296c49b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon-96x96.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/icon.icns b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon.icns
new file mode 100644
index 0000000..d05a1ce
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon.icns differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/icon.ico b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon.ico
new file mode 100644
index 0000000..f43d9ca
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon.ico differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/icon.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon.png
new file mode 100644
index 0000000..296c49b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/icon.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_compact.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_compact.png
new file mode 100644
index 0000000..e29a92b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_compact.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_linear.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_linear.png
new file mode 100644
index 0000000..89fcd60
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_linear.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_multitrack.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_multitrack.png
new file mode 100644
index 0000000..204ce3a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_multitrack.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_page.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_page.png
new file mode 100644
index 0000000..387c8de
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_page.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_score.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_score.png
new file mode 100644
index 0000000..19a5746
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/layout_score.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/logo.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/logo.png
new file mode 100644
index 0000000..f52b54b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/logo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_add.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_add.png
new file mode 100644
index 0000000..2068746
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_add.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_first.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_first.png
new file mode 100644
index 0000000..d7b388f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_first.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_last.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_last.png
new file mode 100644
index 0000000..59449dd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_last.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_list.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_list.png
new file mode 100644
index 0000000..9f5603a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_list.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_next.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_next.png
new file mode 100644
index 0000000..1a1dbb2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_next.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_previous.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_previous.png
new file mode 100644
index 0000000..ff95a7a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_previous.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_remove.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_remove.png
new file mode 100644
index 0000000..21c25e5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/marker_remove.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/mixer.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/mixer.png
new file mode 100644
index 0000000..921e8fb
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/mixer.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/new.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/new.png
new file mode 100644
index 0000000..1d22a4e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/new.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/open.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/open.png
new file mode 100644
index 0000000..62f47b5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/open.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/openrepeat.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/openrepeat.png
new file mode 100644
index 0000000..1f36f92
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/openrepeat.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/option_language.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_language.png
new file mode 100644
index 0000000..c5bfc73
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_language.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/option_skin.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_skin.png
new file mode 100644
index 0000000..1e09075
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_skin.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/option_sound.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_sound.png
new file mode 100644
index 0000000..905186e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_sound.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/option_style.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_style.png
new file mode 100644
index 0000000..a3131c9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_style.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/option_toolbars.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_toolbars.png
new file mode 100644
index 0000000..91a2831
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_toolbars.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/option_view.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_view.png
new file mode 100644
index 0000000..0936ccd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/option_view.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/print-preview.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/print-preview.png
new file mode 100644
index 0000000..9ef1ca9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/print-preview.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/print.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/print.png
new file mode 100644
index 0000000..0b67729
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/print.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/repeat_alternative.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/repeat_alternative.png
new file mode 100644
index 0000000..5611647
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/repeat_alternative.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/save-as.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/save-as.png
new file mode 100644
index 0000000..8675596
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/save-as.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/save.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/save.png
new file mode 100644
index 0000000..f98cc8a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/save.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/settings.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/settings.png
new file mode 100644
index 0000000..29b25cb
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/settings.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/skin-preview.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/skin-preview.png
new file mode 100644
index 0000000..363e620
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/skin-preview.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/skin.properties b/TuxGuitar-testing/platform-all/share/skins/Lavender/skin.properties
new file mode 100644
index 0000000..e497ce5
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/skins/Lavender/skin.properties
@@ -0,0 +1,6 @@
+name=Lavender
+author=Sascha <saschariemer at compuserve.de>
+description=Simple, elegant theme with lavender color.
+date=2007-12-10
+version=0.1
+preview=skin-preview.png
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/song_properties.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/song_properties.png
new file mode 100644
index 0000000..8ecd995
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/song_properties.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/splash.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/splash.png
new file mode 100644
index 0000000..87f71e9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/splash.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/tempo.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/tempo.png
new file mode 100644
index 0000000..ea62c52
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/tempo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/tempoicon.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/tempoicon.png
new file mode 100644
index 0000000..c230998
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/tempoicon.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/tgdoc.icns b/TuxGuitar-testing/platform-all/share/skins/Lavender/tgdoc.icns
new file mode 100644
index 0000000..2060a6e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/tgdoc.icns differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/tiednote.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/tiednote.png
new file mode 100644
index 0000000..d87c292
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/tiednote.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/timesignature.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/timesignature.png
new file mode 100644
index 0000000..603f1a2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/timesignature.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/track_add.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/track_add.png
new file mode 100644
index 0000000..22fbe5b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/track_add.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/track_remove.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/track_remove.png
new file mode 100644
index 0000000..68cfa6c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/track_remove.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport.png
new file mode 100644
index 0000000..b7f4baf
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_first_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_first_1.png
new file mode 100644
index 0000000..215c71d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_first_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_first_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_first_2.png
new file mode 100644
index 0000000..215c71d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_first_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_first_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_first_1.png
new file mode 100644
index 0000000..a1b02c4
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_first_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_first_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_first_2.png
new file mode 100644
index 0000000..a1b02c4
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_first_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_last_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_last_1.png
new file mode 100644
index 0000000..0a50f09
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_last_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_last_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_last_2.png
new file mode 100644
index 0000000..ab889ad
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_last_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_next_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_next_1.png
new file mode 100644
index 0000000..fef2cc2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_next_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_next_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_next_2.png
new file mode 100644
index 0000000..fef2cc2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_next_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_pause.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_pause.png
new file mode 100644
index 0000000..0b9b752
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_pause.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_play_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_play_1.png
new file mode 100644
index 0000000..36f807e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_play_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_play_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_play_2.png
new file mode 100644
index 0000000..36f807e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_play_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_previous_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_previous_1.png
new file mode 100644
index 0000000..2310628
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_previous_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_previous_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_previous_2.png
new file mode 100644
index 0000000..2310628
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_previous_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_stop_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_stop_1.png
new file mode 100644
index 0000000..6f43c45
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_stop_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_stop_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_stop_2.png
new file mode 100644
index 0000000..6f43c45
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_icon_stop_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_last_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_last_1.png
new file mode 100644
index 0000000..a630f1f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_last_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_last_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_last_2.png
new file mode 100644
index 0000000..a630f1f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_last_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_metronome.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_metronome.png
new file mode 100644
index 0000000..beb3226
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_metronome.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_mode.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_mode.png
new file mode 100644
index 0000000..1d09462
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_mode.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_next_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_next_1.png
new file mode 100644
index 0000000..2c39dac
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_next_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_next_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_next_2.png
new file mode 100644
index 0000000..2c39dac
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_next_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_pause.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_pause.png
new file mode 100644
index 0000000..c927b28
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_pause.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_play_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_play_1.png
new file mode 100644
index 0000000..b70f11e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_play_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_play_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_play_2.png
new file mode 100644
index 0000000..b70f11e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_play_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_previous_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_previous_1.png
new file mode 100644
index 0000000..ad15c27
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_previous_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_previous_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_previous_2.png
new file mode 100644
index 0000000..ad15c27
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_previous_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_stop_1.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_stop_1.png
new file mode 100644
index 0000000..0d1fe93
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_stop_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_stop_2.png b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_stop_2.png
new file mode 100644
index 0000000..0d1fe93
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Lavender/transport_stop_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/1.png
new file mode 100644
index 0000000..f371f7b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/16.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/16.png
new file mode 100644
index 0000000..05473ef
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/16.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/2.png
new file mode 100644
index 0000000..b04bb5d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/32.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/32.png
new file mode 100644
index 0000000..cbb56ac
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/32.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/4.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/4.png
new file mode 100644
index 0000000..06dfd1a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/4.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/64.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/64.png
new file mode 100644
index 0000000..78c7a38
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/64.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/8.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/8.png
new file mode 100644
index 0000000..ef81b9a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/8.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/README b/TuxGuitar-testing/platform-all/share/skins/Oxygen/README
new file mode 100644
index 0000000..9a63314
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/skins/Oxygen/README
@@ -0,0 +1,9 @@
+This theme as been made using the default TuxGuitar theme "Lavender"
+and using icons from the Oxygen Icons project.
+
+http://www.oxygen-icons.org/
+
+Please respect the Oxygen Icons licenses:
+
+http://creativecommons.org/licenses/by-sa/3.0/
+http://www.gnu.org/licenses/lgpl.html
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/about_authors.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/about_authors.png
new file mode 100644
index 0000000..a6c1740
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/about_authors.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/about_description.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/about_description.png
new file mode 100644
index 0000000..0936ccd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/about_description.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/about_license.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/about_license.png
new file mode 100644
index 0000000..e2fca98
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/about_license.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_back.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_back.png
new file mode 100644
index 0000000..4459024
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_back.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_file.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_file.png
new file mode 100644
index 0000000..73a85ae
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_file.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_folder.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_folder.png
new file mode 100644
index 0000000..9c46c79
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_folder.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_new.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_new.png
new file mode 100644
index 0000000..fbb4ce0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_new.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_refresh.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_refresh.png
new file mode 100644
index 0000000..45b5535
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_refresh.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_root.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_root.png
new file mode 100644
index 0000000..aab6a88
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/browser_root.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/chord.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/chord.png
new file mode 100644
index 0000000..11019a7
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/chord.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/closerepeat.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/closerepeat.png
new file mode 100644
index 0000000..223ce00
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/closerepeat.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/division-type.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/division-type.png
new file mode 100644
index 0000000..aa18421
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/division-type.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/dotted.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dotted.png
new file mode 100644
index 0000000..f5b0ddd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dotted.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/doubledotted.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/doubledotted.png
new file mode 100644
index 0000000..1ce6450
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/doubledotted.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_f.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_f.png
new file mode 100644
index 0000000..a547941
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_f.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_ff.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_ff.png
new file mode 100644
index 0000000..0a22c7f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_ff.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_fff.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_fff.png
new file mode 100644
index 0000000..b265522
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_fff.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_mf.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_mf.png
new file mode 100644
index 0000000..a03c125
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_mf.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_mp.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_mp.png
new file mode 100644
index 0000000..af9c9f2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_mp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_p.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_p.png
new file mode 100644
index 0000000..029512d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_p.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_pp.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_pp.png
new file mode 100644
index 0000000..c2a7d59
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_pp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_ppp.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_ppp.png
new file mode 100644
index 0000000..e335a53
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/dynamic_ppp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_mode_edition.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_mode_edition.png
new file mode 100644
index 0000000..334bb11
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_mode_edition.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_mode_edition_no_natural.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_mode_edition_no_natural.png
new file mode 100644
index 0000000..c04448e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_mode_edition_no_natural.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_mode_selection.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_mode_selection.png
new file mode 100644
index 0000000..ca18245
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_mode_selection.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_redo.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_redo.png
new file mode 100644
index 0000000..45f0450
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_redo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_undo.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_undo.png
new file mode 100644
index 0000000..57abbe1
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_undo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_voice_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_voice_1.png
new file mode 100644
index 0000000..3338d3c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_voice_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_voice_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_voice_2.png
new file mode 100644
index 0000000..f54d928
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/edit_voice_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_accentuated.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_accentuated.png
new file mode 100644
index 0000000..8740222
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_accentuated.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_bend.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_bend.png
new file mode 100644
index 0000000..ed05356
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_bend.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_dead.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_dead.png
new file mode 100644
index 0000000..5c3e07c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_dead.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_fade_in.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_fade_in.png
new file mode 100644
index 0000000..ebf9fd0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_fade_in.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_ghost.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_ghost.png
new file mode 100644
index 0000000..3a9eaf8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_ghost.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_grace.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_grace.png
new file mode 100644
index 0000000..29d5695
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_grace.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_hammer.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_hammer.png
new file mode 100644
index 0000000..d3eca5f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_hammer.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_harmonic.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_harmonic.png
new file mode 100644
index 0000000..6fe19a9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_harmonic.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_heavy_accentuated.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_heavy_accentuated.png
new file mode 100644
index 0000000..75ed1ef
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_heavy_accentuated.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_palm_mute.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_palm_mute.png
new file mode 100644
index 0000000..d4ef755
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_palm_mute.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_popping.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_popping.png
new file mode 100644
index 0000000..4964783
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_popping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_slapping.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_slapping.png
new file mode 100644
index 0000000..e49fd96
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_slapping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_slide.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_slide.png
new file mode 100644
index 0000000..ea63a1b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_slide.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_staccato.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_staccato.png
new file mode 100644
index 0000000..524dbbe
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_staccato.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_tapping.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_tapping.png
new file mode 100644
index 0000000..dec8537
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_tapping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_tremolo_bar.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_tremolo_bar.png
new file mode 100644
index 0000000..f3a3939
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_tremolo_bar.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_tremolo_picking.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_tremolo_picking.png
new file mode 100644
index 0000000..b72f5da
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_tremolo_picking.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_trill.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_trill.png
new file mode 100644
index 0000000..1ccc4d0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_trill.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_vibrato.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_vibrato.png
new file mode 100644
index 0000000..19f4860
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/effect_vibrato.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/firstfret.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/firstfret.png
new file mode 100644
index 0000000..b2ceba8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/firstfret.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/fret.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/fret.png
new file mode 100644
index 0000000..c575c7a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/fret.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/fretboard.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/fretboard.png
new file mode 100644
index 0000000..8335367
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/fretboard.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/grace.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/grace.png
new file mode 100644
index 0000000..29d5695
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/grace.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-16x16.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-16x16.png
new file mode 100644
index 0000000..c617291
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-16x16.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-24x24.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-24x24.png
new file mode 100644
index 0000000..30e43cc
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-24x24.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-32x32.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-32x32.png
new file mode 100644
index 0000000..cebffe0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-32x32.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-48x48.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-48x48.png
new file mode 100644
index 0000000..c6a172b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-48x48.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-64x64.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-64x64.png
new file mode 100644
index 0000000..8341806
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-64x64.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-96x96.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-96x96.png
new file mode 100644
index 0000000..296c49b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon-96x96.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon.icns b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon.icns
new file mode 100644
index 0000000..d05a1ce
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon.icns differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon.ico b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon.ico
new file mode 100644
index 0000000..f43d9ca
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon.ico differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon.png
new file mode 100644
index 0000000..296c49b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/icon.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_compact.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_compact.png
new file mode 100644
index 0000000..e29a92b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_compact.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_linear.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_linear.png
new file mode 100644
index 0000000..89fcd60
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_linear.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_multitrack.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_multitrack.png
new file mode 100644
index 0000000..204ce3a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_multitrack.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_page.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_page.png
new file mode 100644
index 0000000..387c8de
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_page.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_score.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_score.png
new file mode 100644
index 0000000..19a5746
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/layout_score.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/logo.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/logo.png
new file mode 100644
index 0000000..f52b54b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/logo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_add.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_add.png
new file mode 100644
index 0000000..62436bd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_add.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_first.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_first.png
new file mode 100644
index 0000000..cb66e6d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_first.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_last.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_last.png
new file mode 100644
index 0000000..3a6557b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_last.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_list.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_list.png
new file mode 100644
index 0000000..b37b97a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_list.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_next.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_next.png
new file mode 100644
index 0000000..e8bb6b2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_next.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_previous.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_previous.png
new file mode 100644
index 0000000..646ead3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_previous.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_remove.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_remove.png
new file mode 100644
index 0000000..a661a31
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/marker_remove.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/mixer.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/mixer.png
new file mode 100644
index 0000000..99d35c3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/mixer.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/new.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/new.png
new file mode 100644
index 0000000..a7f3411
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/new.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/open.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/open.png
new file mode 100644
index 0000000..317a357
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/open.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/openrepeat.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/openrepeat.png
new file mode 100644
index 0000000..1f36f92
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/openrepeat.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_language.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_language.png
new file mode 100644
index 0000000..5c5246e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_language.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_skin.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_skin.png
new file mode 100644
index 0000000..eddffb6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_skin.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_sound.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_sound.png
new file mode 100644
index 0000000..5bc5c23
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_sound.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_style.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_style.png
new file mode 100644
index 0000000..5abdf6c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_style.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_toolbars.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_toolbars.png
new file mode 100644
index 0000000..f072ad0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_toolbars.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_view.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_view.png
new file mode 100644
index 0000000..0936ccd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/option_view.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/print-preview.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/print-preview.png
new file mode 100644
index 0000000..03a3edf
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/print-preview.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/print.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/print.png
new file mode 100644
index 0000000..8eb1c67
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/print.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/repeat_alternative.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/repeat_alternative.png
new file mode 100644
index 0000000..5611647
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/repeat_alternative.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/save-as.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/save-as.png
new file mode 100644
index 0000000..0ecb79e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/save-as.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/save.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/save.png
new file mode 100644
index 0000000..a81e70d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/save.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/settings.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/settings.png
new file mode 100644
index 0000000..45b8fae
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/settings.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/skin-preview.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/skin-preview.png
new file mode 100644
index 0000000..c498778
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/skin-preview.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/skin.properties b/TuxGuitar-testing/platform-all/share/skins/Oxygen/skin.properties
new file mode 100644
index 0000000..2557cb1
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/skins/Oxygen/skin.properties
@@ -0,0 +1,6 @@
+name=Oxygen
+author=The Chakra Project 
+description=http://www.oxygen-icons.org
+date=2011-8-19
+version=0.1
+preview=skin-preview.png
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/song_properties.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/song_properties.png
new file mode 100644
index 0000000..8f76c51
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/song_properties.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/splash.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/splash.png
new file mode 100644
index 0000000..87f71e9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/splash.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/tempo.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/tempo.png
new file mode 100644
index 0000000..ea62c52
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/tempo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/tempoicon.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/tempoicon.png
new file mode 100644
index 0000000..1c6cb4e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/tempoicon.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/tgdoc.icns b/TuxGuitar-testing/platform-all/share/skins/Oxygen/tgdoc.icns
new file mode 100644
index 0000000..2060a6e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/tgdoc.icns differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/tiednote.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/tiednote.png
new file mode 100644
index 0000000..d87c292
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/tiednote.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/timesignature.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/timesignature.png
new file mode 100644
index 0000000..603f1a2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/timesignature.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/track_add.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/track_add.png
new file mode 100644
index 0000000..c106701
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/track_add.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/track_remove.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/track_remove.png
new file mode 100644
index 0000000..90ba109
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/track_remove.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport.png
new file mode 100644
index 0000000..cdfbf63
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_first_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_first_1.png
new file mode 100644
index 0000000..dc15969
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_first_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_first_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_first_2.png
new file mode 100644
index 0000000..dc15969
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_first_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_first_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_first_1.png
new file mode 100644
index 0000000..120c1e0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_first_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_first_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_first_2.png
new file mode 100644
index 0000000..120c1e0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_first_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_last_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_last_1.png
new file mode 100644
index 0000000..7392432
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_last_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_last_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_last_2.png
new file mode 100644
index 0000000..7392432
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_last_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_next_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_next_1.png
new file mode 100644
index 0000000..0a33f97
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_next_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_next_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_next_2.png
new file mode 100644
index 0000000..0a33f97
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_next_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_pause.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_pause.png
new file mode 100644
index 0000000..d133bdc
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_pause.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_play_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_play_1.png
new file mode 100644
index 0000000..2820368
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_play_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_play_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_play_2.png
new file mode 100644
index 0000000..2820368
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_play_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_previous_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_previous_1.png
new file mode 100644
index 0000000..6f9d9b9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_previous_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_previous_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_previous_2.png
new file mode 100644
index 0000000..6f9d9b9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_previous_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_stop_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_stop_1.png
new file mode 100644
index 0000000..4ecbdf6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_stop_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_stop_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_stop_2.png
new file mode 100644
index 0000000..4ecbdf6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_icon_stop_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_last_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_last_1.png
new file mode 100644
index 0000000..c8d2393
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_last_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_last_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_last_2.png
new file mode 100644
index 0000000..c8d2393
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_last_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_metronome.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_metronome.png
new file mode 100644
index 0000000..beb3226
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_metronome.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_mode.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_mode.png
new file mode 100644
index 0000000..1d09462
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_mode.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_next_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_next_1.png
new file mode 100644
index 0000000..670df9b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_next_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_next_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_next_2.png
new file mode 100644
index 0000000..670df9b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_next_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_pause.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_pause.png
new file mode 100644
index 0000000..cb58bfd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_pause.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_play_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_play_1.png
new file mode 100644
index 0000000..23e3d29
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_play_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_play_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_play_2.png
new file mode 100644
index 0000000..23e3d29
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_play_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_previous_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_previous_1.png
new file mode 100644
index 0000000..29cc2f0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_previous_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_previous_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_previous_2.png
new file mode 100644
index 0000000..29cc2f0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_previous_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_stop_1.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_stop_1.png
new file mode 100644
index 0000000..ebf5f88
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_stop_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_stop_2.png b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_stop_2.png
new file mode 100644
index 0000000..ebf5f88
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/Oxygen/transport_stop_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/1.png
new file mode 100644
index 0000000..e5d1bf3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/16.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/16.png
new file mode 100644
index 0000000..c2ab703
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/16.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/2.png
new file mode 100644
index 0000000..f7fa1cf
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/32.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/32.png
new file mode 100644
index 0000000..a88e284
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/32.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/4.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/4.png
new file mode 100644
index 0000000..603799d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/4.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/64.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/64.png
new file mode 100644
index 0000000..f91b54f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/64.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/8.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/8.png
new file mode 100644
index 0000000..42a3efd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/8.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/about_authors.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/about_authors.png
new file mode 100644
index 0000000..69f5b04
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/about_authors.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/about_description.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/about_description.png
new file mode 100644
index 0000000..59b0268
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/about_description.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/about_license.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/about_license.png
new file mode 100644
index 0000000..c3262c5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/about_license.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_back.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_back.png
new file mode 100644
index 0000000..8a36e09
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_back.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_file.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_file.png
new file mode 100644
index 0000000..5088217
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_file.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_folder.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_folder.png
new file mode 100644
index 0000000..1b19b3c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_folder.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_new.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_new.png
new file mode 100644
index 0000000..72a6ea2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_new.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_refresh.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_refresh.png
new file mode 100644
index 0000000..42d0872
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_refresh.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_root.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_root.png
new file mode 100644
index 0000000..db0d5a5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/browser_root.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/chord.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/chord.png
new file mode 100644
index 0000000..5c23bb6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/chord.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/closerepeat.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/closerepeat.png
new file mode 100644
index 0000000..cd0810a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/closerepeat.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/division-type.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/division-type.png
new file mode 100644
index 0000000..eb47b50
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/division-type.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/dotted.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dotted.png
new file mode 100644
index 0000000..d963a7e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dotted.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/doubledotted.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/doubledotted.png
new file mode 100644
index 0000000..0ae9081
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/doubledotted.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_f.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_f.png
new file mode 100644
index 0000000..042cf3d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_f.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_ff.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_ff.png
new file mode 100644
index 0000000..dc16cd8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_ff.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_fff.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_fff.png
new file mode 100644
index 0000000..94dedd5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_fff.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_mf.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_mf.png
new file mode 100644
index 0000000..6a2d108
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_mf.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_mp.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_mp.png
new file mode 100644
index 0000000..acb0077
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_mp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_p.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_p.png
new file mode 100644
index 0000000..8560e07
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_p.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_pp.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_pp.png
new file mode 100644
index 0000000..b5f3145
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_pp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_ppp.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_ppp.png
new file mode 100644
index 0000000..1c14f87
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/dynamic_ppp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_mode_edition.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_mode_edition.png
new file mode 100644
index 0000000..f230bd1
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_mode_edition.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_mode_edition_no_natural.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_mode_edition_no_natural.png
new file mode 100644
index 0000000..277f7ba
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_mode_edition_no_natural.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_mode_selection.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_mode_selection.png
new file mode 100644
index 0000000..9e56aa3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_mode_selection.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_redo.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_redo.png
new file mode 100644
index 0000000..5e1717e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_redo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_undo.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_undo.png
new file mode 100644
index 0000000..c439e9d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_undo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_voice_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_voice_1.png
new file mode 100644
index 0000000..9595714
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_voice_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_voice_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_voice_2.png
new file mode 100644
index 0000000..f9a90d4
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/edit_voice_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_accentuated.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_accentuated.png
new file mode 100644
index 0000000..ccbac08
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_accentuated.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_bend.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_bend.png
new file mode 100644
index 0000000..a49c960
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_bend.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_dead.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_dead.png
new file mode 100644
index 0000000..6811144
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_dead.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_fade_in.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_fade_in.png
new file mode 100644
index 0000000..0b48773
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_fade_in.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_ghost.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_ghost.png
new file mode 100644
index 0000000..af04c4e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_ghost.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_grace.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_grace.png
new file mode 100644
index 0000000..079f345
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_grace.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_hammer.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_hammer.png
new file mode 100644
index 0000000..5eec73a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_hammer.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_harmonic.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_harmonic.png
new file mode 100644
index 0000000..2923933
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_harmonic.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_heavy_accentuated.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_heavy_accentuated.png
new file mode 100644
index 0000000..c62fac9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_heavy_accentuated.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_palm_mute.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_palm_mute.png
new file mode 100644
index 0000000..7714436
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_palm_mute.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_popping.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_popping.png
new file mode 100644
index 0000000..8012eef
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_popping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_slapping.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_slapping.png
new file mode 100644
index 0000000..dc64d57
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_slapping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_slide.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_slide.png
new file mode 100644
index 0000000..731a67f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_slide.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_staccato.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_staccato.png
new file mode 100644
index 0000000..f3adff7
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_staccato.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_tapping.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_tapping.png
new file mode 100644
index 0000000..c624cf1
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_tapping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_tremolo_bar.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_tremolo_bar.png
new file mode 100644
index 0000000..ed7fd9d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_tremolo_bar.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_tremolo_picking.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_tremolo_picking.png
new file mode 100644
index 0000000..f3daa7d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_tremolo_picking.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_trill.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_trill.png
new file mode 100644
index 0000000..f9524f8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_trill.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_vibrato.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_vibrato.png
new file mode 100644
index 0000000..ae5dcca
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/effect_vibrato.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/firstfret.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/firstfret.png
new file mode 100644
index 0000000..2313352
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/firstfret.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/fret.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/fret.png
new file mode 100644
index 0000000..479d6a7
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/fret.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/fretboard.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/fretboard.png
new file mode 100644
index 0000000..32996e9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/fretboard.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/grace.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/grace.png
new file mode 100644
index 0000000..6c67a4c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/grace.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-16x16.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-16x16.png
new file mode 100644
index 0000000..536ed53
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-16x16.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-24x24.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-24x24.png
new file mode 100644
index 0000000..9465961
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-24x24.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-32x32.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-32x32.png
new file mode 100644
index 0000000..414c1a3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-32x32.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-48x48.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-48x48.png
new file mode 100644
index 0000000..323124d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-48x48.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-64x64.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-64x64.png
new file mode 100644
index 0000000..253a826
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-64x64.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-96x96.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-96x96.png
new file mode 100644
index 0000000..a973496
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon-96x96.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon.icns b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon.icns
new file mode 100644
index 0000000..0a37970
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon.icns differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon.ico b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon.ico
new file mode 100644
index 0000000..3f978be
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon.ico differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon.png
new file mode 100644
index 0000000..253a826
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/icon.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_compact.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_compact.png
new file mode 100644
index 0000000..d765101
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_compact.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_linear.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_linear.png
new file mode 100644
index 0000000..3f98e43
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_linear.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_multitrack.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_multitrack.png
new file mode 100644
index 0000000..5d82d5e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_multitrack.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_page.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_page.png
new file mode 100644
index 0000000..a564159
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_page.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_score.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_score.png
new file mode 100644
index 0000000..356dc02
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/layout_score.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/logo.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/logo.png
new file mode 100644
index 0000000..06e6deb
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/logo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_add.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_add.png
new file mode 100644
index 0000000..cd747a5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_add.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_first.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_first.png
new file mode 100644
index 0000000..f48dc2c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_first.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_last.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_last.png
new file mode 100644
index 0000000..82890a6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_last.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_list.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_list.png
new file mode 100644
index 0000000..687ac51
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_list.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_next.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_next.png
new file mode 100644
index 0000000..37af476
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_next.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_previous.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_previous.png
new file mode 100644
index 0000000..967968e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_previous.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_remove.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_remove.png
new file mode 100644
index 0000000..81db28f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/marker_remove.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/mixer.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/mixer.png
new file mode 100644
index 0000000..20f0804
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/mixer.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/new.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/new.png
new file mode 100644
index 0000000..0ae7d44
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/new.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/open.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/open.png
new file mode 100644
index 0000000..49aed35
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/open.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/openrepeat.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/openrepeat.png
new file mode 100644
index 0000000..680d64f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/openrepeat.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_language.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_language.png
new file mode 100644
index 0000000..2470001
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_language.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_skin.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_skin.png
new file mode 100644
index 0000000..7a19c68
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_skin.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_sound.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_sound.png
new file mode 100644
index 0000000..c903331
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_sound.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_style.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_style.png
new file mode 100644
index 0000000..45f6c7a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_style.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_toolbars.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_toolbars.png
new file mode 100644
index 0000000..d8c71e5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_toolbars.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_view.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_view.png
new file mode 100644
index 0000000..9fbe7d4
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/option_view.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/print-preview.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/print-preview.png
new file mode 100644
index 0000000..39df137
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/print-preview.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/print.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/print.png
new file mode 100644
index 0000000..08404f2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/print.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/repeat_alternative.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/repeat_alternative.png
new file mode 100644
index 0000000..bdceba2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/repeat_alternative.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/save-as.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/save-as.png
new file mode 100644
index 0000000..66f2e73
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/save-as.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/save.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/save.png
new file mode 100644
index 0000000..45ab2fc
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/save.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/settings.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/settings.png
new file mode 100644
index 0000000..83af57d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/settings.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/skin-preview.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/skin-preview.png
new file mode 100644
index 0000000..c8e1368
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/skin-preview.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/skin.properties b/TuxGuitar-testing/platform-all/share/skins/blue_serious/skin.properties
new file mode 100644
index 0000000..ee57c23
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/skins/blue_serious/skin.properties
@@ -0,0 +1,6 @@
+name=blue_serious
+author=licnep <licnep at users.sourceforge.net>
+description=A more serious theme, where blue dominates.
+date=2007-07-17
+version=0.1
+preview=skin-preview.png
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/skin.svg b/TuxGuitar-testing/platform-all/share/skins/blue_serious/skin.svg
new file mode 100644
index 0000000..78fe369
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/skins/blue_serious/skin.svg
@@ -0,0 +1,8639 @@
+<?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="744.09448819"
+   height="1052.3622047"
+   id="svg4934"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docbase="C:\Documents and Settings\Bruno Preziosi\Desktop"
+   sodipodi:docname="skin.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4936">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective1371" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient34716">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop34718" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop34720" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient23605">
+      <stop
+         style="stop-color:#0100ff;stop-opacity:1;"
+         offset="0"
+         id="stop23607" />
+      <stop
+         style="stop-color:#00a7ff;stop-opacity:1;"
+         offset="1"
+         id="stop23609" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14515">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop14517" />
+      <stop
+         id="stop14603"
+         offset="0.5"
+         style="stop-color:#4c4c4c;stop-opacity:1;" />
+      <stop
+         style="stop-color:#444444;stop-opacity:1;"
+         offset="1"
+         id="stop14519" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient8897">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop8899" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop8901" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7257">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop7259" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7261" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5204">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop5206" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop5208" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4884">
+      <stop
+         style="stop-color:#e7e7e7;stop-opacity:1;"
+         offset="0"
+         id="stop4886" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4888" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29570">
+      <stop
+         style="stop-color:#7f7f7f;stop-opacity:1;"
+         offset="0"
+         id="stop29572" />
+      <stop
+         id="stop29578"
+         offset="0.5"
+         style="stop-color:#999999;stop-opacity:0.68932039;" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:0;"
+         offset="1"
+         id="stop29574" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29560">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop29562" />
+      <stop
+         style="stop-color:#fffa00;stop-opacity:0;"
+         offset="1"
+         id="stop29564" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient26619">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop26621" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop26623" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24651">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop24653" />
+      <stop
+         style="stop-color:#ececec;stop-opacity:1;"
+         offset="1"
+         id="stop24655" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24639">
+      <stop
+         style="stop-color:#cccccc;stop-opacity:1;"
+         offset="0"
+         id="stop24641" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop24643" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient23660">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop23662" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop23664" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient22671">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop22673" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop22675" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21690">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop21692" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop21694" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient20702">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop20704" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop20706" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient19703">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop19705" />
+      <stop
+         style="stop-color:#d8a588;stop-opacity:0;"
+         offset="1"
+         id="stop19707" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient13756">
+      <stop
+         style="stop-color:#916f6f;stop-opacity:1;"
+         offset="0"
+         id="stop13758" />
+      <stop
+         style="stop-color:#372929;stop-opacity:1;"
+         offset="1"
+         id="stop13760" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12721">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop12723" />
+      <stop
+         style="stop-color:#5c5c5c;stop-opacity:1;"
+         offset="1"
+         id="stop12725" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient12711">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop12713" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop12715" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11707">
+      <stop
+         style="stop-color:#ffcc00;stop-opacity:1;"
+         offset="0"
+         id="stop11709" />
+      <stop
+         style="stop-color:#e5b804;stop-opacity:1;"
+         offset="1"
+         id="stop11711" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11689">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop11691" />
+      <stop
+         style="stop-color:#e0a01c;stop-opacity:0;"
+         offset="1"
+         id="stop11693" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient56561">
+      <stop
+         id="stop56563"
+         offset="0"
+         style="stop-color:#9cffff;stop-opacity:1;" />
+      <stop
+         id="stop56565"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient48382">
+      <stop
+         style="stop-color:#34a7f6;stop-opacity:1;"
+         offset="0"
+         id="stop48384" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop48386" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4856">
+      <stop
+         style="stop-color:white;stop-opacity:0.84536082"
+         offset="0"
+         id="stop4858" />
+      <stop
+         style="stop-color:#6898f1;stop-opacity:0.46391752"
+         offset="1"
+         id="stop4860" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4791">
+      <stop
+         style="stop-color:#5696f6;stop-opacity:1"
+         offset="0"
+         id="stop4793" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop4795" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient22002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.920046,0,0,1.086901,0,13.71543)"
+       x1="313.19742"
+       y1="886.34753"
+       x2="399.59286"
+       y2="886.34753" />
+    <linearGradient
+       id="linearGradient33795">
+      <stop
+         style="stop-color:#ff9e00;stop-opacity:1"
+         offset="0"
+         id="stop33801" />
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0.5"
+         id="stop33803" />
+      <stop
+         style="stop-color:#ffffa0;stop-opacity:1"
+         offset="1"
+         id="stop33799" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3974">
+      <stop
+         style="stop-color:#dd9600;stop-opacity:1"
+         offset="0"
+         id="stop3976" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop3978" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11729">
+      <stop
+         style="stop-color:#806805;stop-opacity:1"
+         offset="0"
+         id="stop11731" />
+      <stop
+         style="stop-color:#e1e2ce;stop-opacity:1"
+         offset="0.44999999"
+         id="stop11735" />
+      <stop
+         style="stop-color:#b4a66d;stop-opacity:1"
+         offset="1"
+         id="stop11733" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9900">
+      <stop
+         style="stop-color:#ffd988;stop-opacity:1"
+         offset="0"
+         id="stop9902" />
+      <stop
+         style="stop-color:#97812c;stop-opacity:1"
+         offset="1"
+         id="stop9904" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9009">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop9011" />
+      <stop
+         style="stop-color:#d3bc5f;stop-opacity:1"
+         offset="1"
+         id="stop9013" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23057"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,982.7389,22.5298)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23061"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,643.9049,22.52983)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23063"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,530.9602,22.52986)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23065"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-167.3496,22.52986)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient3567"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4133997,0.4055754,-0.3422418,-0.3488223,10.276589,-74.784609)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24213"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient24211"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24217"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient24215"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient24229"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       id="linearGradient32988">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop32990" />
+      <stop
+         style="stop-color:#cbcbcb;stop-opacity:1"
+         offset="0.5"
+         id="stop32994" />
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="1"
+         id="stop32992" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24227"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96906,0.184773,-0.740436,0.719541,-2,53.11273)"
+       x1="1029.5582"
+       y1="283.05643"
+       x2="1054.2062"
+       y2="283.05643" />
+    <linearGradient
+       id="linearGradient6462">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop6464" />
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="1"
+         id="stop6466" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient24225"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       id="linearGradient9267">
+      <stop
+         style="stop-color:#ffd428;stop-opacity:1;"
+         offset="0"
+         id="stop9269" />
+      <stop
+         id="stop10163"
+         offset="0.5"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffd322;stop-opacity:1;"
+         offset="1"
+         id="stop9271" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9267"
+       id="linearGradient24251"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.105702,-0.132634,0.122908,0.142271,-123.5758,437.4912)"
+       x1="205.4043"
+       y1="464.48911"
+       x2="207.19127"
+       y2="498.23825" />
+    <linearGradient
+       id="linearGradient7463">
+      <stop
+         style="stop-color:lime;stop-opacity:1;"
+         offset="0"
+         id="stop7465" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop7467" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7463"
+       id="linearGradient24249"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.120379,0.139344,-0.171115,0.214715,20.77584,293.7269)"
+       x1="331.695"
+       y1="486.6479"
+       x2="399.73358"
+       y2="486.6479" />
+    <linearGradient
+       id="linearGradient19203">
+      <stop
+         style="stop-color:#a49e88;stop-opacity:1;"
+         offset="0"
+         id="stop19205" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop19207" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19203"
+       id="linearGradient24247"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.463664,0.283515,-0.266017,0.432012,-24.98543,167.9069)"
+       x1="209.59592"
+       y1="469.32986"
+       x2="228.7281"
+       y2="494.3299" />
+    <linearGradient
+       id="linearGradient14138">
+      <stop
+         style="stop-color:#afc6e9;stop-opacity:1;"
+         offset="0"
+         id="stop14140" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop14142" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient20139">
+      <stop
+         style="stop-color:#5696f6;stop-opacity:1"
+         offset="0"
+         id="stop20141" />
+      <stop
+         style="stop-color:#5696f6;stop-opacity:0"
+         offset="1"
+         id="stop20143" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21032">
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0"
+         id="stop21034" />
+      <stop
+         style="stop-color:red;stop-opacity:0"
+         offset="1"
+         id="stop21036" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18353">
+      <stop
+         style="stop-color:yellow;stop-opacity:1"
+         offset="0"
+         id="stop18355" />
+      <stop
+         style="stop-color:yellow;stop-opacity:0"
+         offset="1"
+         id="stop18357" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient19246">
+      <stop
+         style="stop-color:#f95;stop-opacity:1"
+         offset="0"
+         id="stop19248" />
+      <stop
+         style="stop-color:#f95;stop-opacity:0"
+         offset="1"
+         id="stop19250" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.825015,0,0,1.061238,849.253,-79.37844)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.806533,0,0,1.26326,841.2684,-279.0187)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.840938,0,0,1.038796,100.9157,-57.20348)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <linearGradient
+       id="linearGradient5684">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop5686" />
+      <stop
+         style="stop-color:black;stop-opacity:0"
+         offset="1"
+         id="stop5688" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4548"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.820084,0,0,1.263148,109.9248,-278.9086)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient4546"
+       gradientUnits="userSpaceOnUse"
+       x1="811.92737"
+       y1="467.36218"
+       x2="1052.3584"
+       y2="467.36218" />
+    <linearGradient
+       id="linearGradient4644">
+      <stop
+         style="stop-color:#f5f5f5;stop-opacity:1"
+         offset="0"
+         id="stop4646" />
+      <stop
+         style="stop-color:#9e9e9e;stop-opacity:1"
+         offset="1"
+         id="stop4648" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4644"
+       id="radialGradient4544"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       id="linearGradient4672">
+      <stop
+         style="stop-color:#9b9b9b;stop-opacity:1"
+         offset="0"
+         id="stop4674" />
+      <stop
+         style="stop-color:#2f2f2f;stop-opacity:1"
+         offset="1"
+         id="stop4676" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient4542"
+       gradientUnits="userSpaceOnUse"
+       x1="818"
+       y1="467.36218"
+       x2="1046.2856"
+       y2="467.36218" />
+    <linearGradient
+       id="linearGradient7720">
+      <stop
+         style="stop-color:#f5f5f5;stop-opacity:1"
+         offset="0"
+         id="stop7722" />
+      <stop
+         style="stop-color:#81baff;stop-opacity:1;"
+         offset="1"
+         id="stop7724" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7720"
+       id="radialGradient4540"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       id="linearGradient5880">
+      <stop
+         style="stop-color:#6d91d4;stop-opacity:1"
+         offset="0"
+         id="stop5882" />
+      <stop
+         style="stop-color:black;stop-opacity:0.02061856"
+         offset="1"
+         id="stop5884" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6814">
+      <stop
+         style="stop-color:blue;stop-opacity:1"
+         offset="0"
+         id="stop6816" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6820" />
+      <stop
+         style="stop-color:blue;stop-opacity:1"
+         offset="1"
+         id="stop6818" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6798">
+      <stop
+         style="stop-color:lime;stop-opacity:1"
+         offset="0"
+         id="stop6800" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6804" />
+      <stop
+         style="stop-color:lime;stop-opacity:1"
+         offset="1"
+         id="stop6802" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6830">
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0"
+         id="stop6832" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6836" />
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="1"
+         id="stop6834" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6846">
+      <stop
+         style="stop-color:aqua;stop-opacity:1"
+         offset="0"
+         id="stop6848" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6852" />
+      <stop
+         style="stop-color:aqua;stop-opacity:1"
+         offset="1"
+         id="stop6850" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9201">
+      <stop
+         style="stop-color:#007d00;stop-opacity:1;"
+         offset="0"
+         id="stop9203" />
+      <stop
+         style="stop-color:#00d900;stop-opacity:0;"
+         offset="1"
+         id="stop9205" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9201"
+       id="linearGradient16401"
+       gradientUnits="userSpaceOnUse"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <linearGradient
+       id="linearGradient10979">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop10981" />
+      <stop
+         style="stop-color:#fff2d7;stop-opacity:1;"
+         offset="1"
+         id="stop10983" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient16399"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.510756,8.596396e-3,-9.491026e-3,0.563911,199.3096,272.8201)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient21760"
+       gradientUnits="userSpaceOnUse"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       id="linearGradient15469">
+      <stop
+         style="stop-color:#25a2e3;stop-opacity:1;"
+         offset="0"
+         id="stop15471" />
+      <stop
+         style="stop-color:#dfdfdf;stop-opacity:1;"
+         offset="1"
+         id="stop15473" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient3382"
+       gradientUnits="userSpaceOnUse"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient21493"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <linearGradient
+       id="linearGradient9644">
+      <stop
+         style="stop-color:#f8e70a;stop-opacity:1;"
+         offset="0"
+         id="stop9646" />
+      <stop
+         style="stop-color:#ffa021;stop-opacity:0;"
+         offset="1"
+         id="stop9648" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient21491"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="repeat"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695" />
+    <linearGradient
+       id="linearGradient1315">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop1317" />
+      <stop
+         style="stop-color:black;stop-opacity:0.73958325"
+         offset="1"
+         id="stop1319" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient22911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4134002,0.4055758,-0.3422416,-0.3488226,336.05906,-255.33691)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInM"
+       style="overflow:visible">
+      <path
+         id="path4538"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(-0.4)" />
+    </marker>
+    <linearGradient
+       id="linearGradient43975">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop43977" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop43979" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient40035">
+      <stop
+         style="stop-color:#3c3c3c;stop-opacity:1;"
+         offset="0"
+         id="stop40037" />
+      <stop
+         style="stop-color:#9a8d8d;stop-opacity:1;"
+         offset="1"
+         id="stop40039" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient34131">
+      <stop
+         style="stop-color:#006e0b;stop-opacity:1;"
+         offset="0"
+         id="stop34133" />
+      <stop
+         style="stop-color:#07ff00;stop-opacity:1;"
+         offset="1"
+         id="stop34135" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11686">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop11688" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop11690" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient30048">
+      <stop
+         style="stop-color:#007100;stop-opacity:1;"
+         offset="0"
+         id="stop30050" />
+      <stop
+         style="stop-color:#00d100;stop-opacity:0.70873785;"
+         offset="1"
+         id="stop30052" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24170">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop24172" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop24174" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4552">
+      <stop
+         style="stop-color:#ffcd1d;stop-opacity:1"
+         offset="0"
+         id="stop4554" />
+      <stop
+         style="stop-color:#ffe691;stop-opacity:1"
+         offset="0.67500001"
+         id="stop6334" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop4556" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3661">
+      <stop
+         style="stop-color:#ffd74f;stop-opacity:1"
+         offset="0"
+         id="stop3663" />
+      <stop
+         style="stop-color:#795d00;stop-opacity:0"
+         offset="1"
+         id="stop3665" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient19023">
+      <stop
+         style="stop-color:#fff6f6;stop-opacity:1;"
+         offset="0"
+         id="stop19025" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop19027" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18995">
+      <stop
+         style="stop-color:#7887b6;stop-opacity:1;"
+         offset="0"
+         id="stop18997" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop18999" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18969">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop18971" />
+      <stop
+         id="stop18977"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop18973" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18960">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.79611653;"
+         offset="0"
+         id="stop18962" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop18964" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient17829">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop17831" />
+      <stop
+         id="stop17837"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop17833" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient16852">
+      <stop
+         style="stop-color:#d3bc5f;stop-opacity:1;"
+         offset="0"
+         id="stop16854" />
+      <stop
+         style="stop-color:#d38d5f;stop-opacity:1;"
+         offset="1"
+         id="stop16856" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14070">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop14072" />
+      <stop
+         style="stop-color:#8e8e8e;stop-opacity:1"
+         offset="1"
+         id="stop14074" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21068">
+      <stop
+         style="stop-color:#999;stop-opacity:1"
+         offset="0"
+         id="stop21070" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop21072" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient16226">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop16228" />
+      <stop
+         style="stop-color:#e85700;stop-opacity:1"
+         offset="1"
+         id="stop16230" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient34131"
+       id="linearGradient43969"
+       gradientUnits="userSpaceOnUse"
+       x1="315.21429"
+       y1="601.46936"
+       x2="334.42856"
+       y2="601.46936" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16852"
+       id="linearGradient46199"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(32.857143,-92.857143)"
+       x1="330.38367"
+       y1="341.9724"
+       x2="335.30689"
+       y2="341.9724" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16852"
+       id="linearGradient46291"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(32.857143,-92.857143)"
+       x1="330.38367"
+       y1="341.9724"
+       x2="335.30689"
+       y2="341.9724" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient30048"
+       id="linearGradient46308"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-47.5,-58.214286)"
+       x1="394.7171"
+       y1="463.6958"
+       x2="387.64603"
+       y2="456.62473" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24170"
+       id="linearGradient46322"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.9152246,0,39.62588)"
+       x1="327.79449"
+       y1="446.52319"
+       x2="310.87445"
+       y2="448.03842" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24170"
+       id="linearGradient46324"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.9152246,0,39.62588)"
+       x1="333.21429"
+       y1="452.49219"
+       x2="334.64285"
+       y2="475.23166" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient46350"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1573476,0,0,0.1985639,254.36744,448.40529)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient40035"
+       id="linearGradient46352"
+       gradientUnits="userSpaceOnUse"
+       x1="332.07446"
+       y1="565.65918"
+       x2="318.41772"
+       y2="569.03137" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient34131"
+       id="linearGradient46354"
+       gradientUnits="userSpaceOnUse"
+       x1="315.21429"
+       y1="601.46936"
+       x2="334.42856"
+       y2="601.46936" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient46382"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1573476,0,0,0.1985639,254.36744,448.40529)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient40035"
+       id="linearGradient46384"
+       gradientUnits="userSpaceOnUse"
+       x1="332.07446"
+       y1="565.65918"
+       x2="318.41772"
+       y2="569.03137" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient43975"
+       id="linearGradient46386"
+       gradientUnits="userSpaceOnUse"
+       x1="332.5"
+       y1="642.36218"
+       x2="346.98233"
+       y2="656.62982"
+       gradientTransform="translate(31.071397,-471.8956)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56421"
+       gradientUnits="userSpaceOnUse"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56423"
+       gradientUnits="userSpaceOnUse"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56425"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="168.01244"
+       y1="765.50165"
+       x2="172.57751"
+       y2="783.052" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56427"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56429"
+       gradientUnits="userSpaceOnUse"
+       x1="146.07144"
+       y1="773.9693"
+       x2="138.39285"
+       y2="763.61218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56431"
+       gradientUnits="userSpaceOnUse"
+       x1="156.07143"
+       y1="768.25507"
+       x2="141.96428"
+       y2="758.255" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56433"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9553524,0,0,0.9553524,6.3805055,33.68767)"
+       x1="131.91823"
+       y1="757.63336"
+       x2="156.74184"
+       y2="786.12646" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9553524,0,0,0.9553524,6.3805055,33.68767)"
+       x1="156.07143"
+       y1="768.25507"
+       x2="141.96428"
+       y2="758.255" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56437"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56439"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56441"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.9095867,0,69.541934)"
+       x1="226.12527"
+       y1="767.38849"
+       x2="229.06473"
+       y2="779.35138" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56445"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56447"
+       gradientUnits="userSpaceOnUse"
+       x1="224.28571"
+       y1="767.7193"
+       x2="228.0826"
+       y2="779.06696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56449"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56451"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56453"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.9095867,0,69.541934)"
+       x1="226.12527"
+       y1="767.38849"
+       x2="229.06473"
+       y2="779.35138" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56455"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56457"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56459"
+       gradientUnits="userSpaceOnUse"
+       x1="224.28571"
+       y1="767.7193"
+       x2="228.0826"
+       y2="779.06696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56511"
+       gradientUnits="userSpaceOnUse"
+       x1="175.71429"
+       y1="787.12646"
+       x2="171.60715"
+       y2="767.1731" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56527"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56533"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56549"
+       x1="218.45901"
+       y1="770.17187"
+       x2="237.88474"
+       y2="770.17187"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56551"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56553"
+       x1="162.91429"
+       y1="770.93361"
+       x2="180.3"
+       y2="770.93361"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56555"
+       x1="135.39285"
+       y1="770.755"
+       x2="153.53571"
+       y2="770.755"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56557"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56559"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56577"
+       gradientUnits="userSpaceOnUse"
+       x1="162.91429"
+       y1="770.93361"
+       x2="174.23909"
+       y2="780.53003" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56579"
+       gradientUnits="userSpaceOnUse"
+       x1="162.91429"
+       y1="770.93361"
+       x2="171.60715"
+       y2="767.1731" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56582"
+       gradientUnits="userSpaceOnUse"
+       x1="162.91429"
+       y1="770.93361"
+       x2="174.23909"
+       y2="780.53003"
+       gradientTransform="translate(-0.2550204,29.247583)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56584"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,6.8094052,110.6955)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56607"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56615"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(227.41176,-673.03754)"
+       x1="156.3483"
+       y1="774.46912"
+       x2="171.60715"
+       y2="768.18323" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56669"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(227.41176,-673.03754)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="171.60715"
+       y2="768.18323" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56671"
+       gradientUnits="userSpaceOnUse"
+       x1="135.39285"
+       y1="770.755"
+       x2="153.53571"
+       y2="770.755" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56673"
+       gradientUnits="userSpaceOnUse"
+       x1="135.39285"
+       y1="770.755"
+       x2="153.53571"
+       y2="770.755" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56675"
+       gradientUnits="userSpaceOnUse"
+       x1="156.07143"
+       y1="768.25507"
+       x2="141.96428"
+       y2="758.255" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56677"
+       gradientUnits="userSpaceOnUse"
+       x1="136.38519"
+       y1="765.59845"
+       x2="152.59634"
+       y2="778.37634" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56679"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9553524,0,0,0.9553524,6.3805055,33.68767)"
+       x1="156.07143"
+       y1="768.25507"
+       x2="141.96428"
+       y2="758.255" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56681"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56683"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56685"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56687"
+       gradientUnits="userSpaceOnUse"
+       x1="220.6384"
+       y1="776.77808"
+       x2="234.15274"
+       y2="757.90942" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56689"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56691"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56693"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56695"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56697"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56699"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56701"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56703"
+       gradientUnits="userSpaceOnUse"
+       x1="220.6384"
+       y1="776.77808"
+       x2="234.15274"
+       y2="757.90942" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56705"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56707"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56709"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56711"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient3722"
+       x1="-484.87323"
+       y1="170.99902"
+       x2="-480.08008"
+       y2="156.60942"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(849.99998,-63.999998)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient3738"
+       x1="-482.34784"
+       y1="168.47871"
+       x2="-489.41891"
+       y2="163.93301"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(849.99998,-63.999998)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient6854"
+       gradientUnits="userSpaceOnUse"
+       x1="-484.87323"
+       y1="170.99902"
+       x2="-480.08008"
+       y2="156.60942"
+       gradientTransform="translate(859.59643,-63.999998)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient6856"
+       gradientUnits="userSpaceOnUse"
+       x1="-482.34784"
+       y1="168.47871"
+       x2="-489.41891"
+       y2="163.93301"
+       gradientTransform="translate(859.59643,-63.999998)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient6883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(8.955585e-2,-9.4442571e-2,9.3098111e-2,9.0849027e-2,220.18116,469.85854)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient6899"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(8.955585e-2,-9.4442571e-2,9.3098111e-2,9.0849027e-2,219.81213,516.8131)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient34131"
+       id="linearGradient6901"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1321943,0,0,1.1321943,-46.203278,-70.99291)"
+       x1="339.28571"
+       y1="539.14789"
+       x2="341.78571"
+       y2="551.64789" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient8039"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7526038,0.6083978,-0.5733311,0.5393683,798.58831,284.04424)"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13756"
+       id="linearGradient13762"
+       x1="450.78058"
+       y1="666.98901"
+       x2="461.38718"
+       y2="681.48468"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13756"
+       id="linearGradient14783"
+       gradientUnits="userSpaceOnUse"
+       x1="450.78058"
+       y1="666.98901"
+       x2="461.38718"
+       y2="681.48468" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient29570"
+       id="radialGradient29636"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.103689,5.2299076e-7,-1.9780151e-7,0.1370966,-46.037807,651.99982)"
+       cx="439.46976"
+       cy="757.58337"
+       fx="439.46976"
+       fy="757.58337"
+       r="62" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21690"
+       id="linearGradient29638"
+       gradientUnits="userSpaceOnUse"
+       x1="595.5"
+       y1="696.36218"
+       x2="596.75"
+       y2="767.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11707"
+       id="linearGradient29640"
+       gradientUnits="userSpaceOnUse"
+       x1="634.88086"
+       y1="751.11469"
+       x2="634.88086"
+       y2="742.24536" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11689"
+       id="linearGradient29642"
+       gradientUnits="userSpaceOnUse"
+       x1="616.4325"
+       y1="739.86218"
+       x2="616.81653"
+       y2="768.41132" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11707"
+       id="linearGradient29644"
+       gradientUnits="userSpaceOnUse"
+       x1="634.88086"
+       y1="751.11469"
+       x2="634.88086"
+       y2="742.24536" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11689"
+       id="linearGradient29646"
+       gradientUnits="userSpaceOnUse"
+       x1="616.4325"
+       y1="739.86218"
+       x2="616.81653"
+       y2="768.41132" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12721"
+       id="linearGradient29648"
+       gradientUnits="userSpaceOnUse"
+       x1="575"
+       y1="712.7193"
+       x2="529.9032"
+       y2="696.14789" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12711"
+       id="linearGradient29650"
+       gradientUnits="userSpaceOnUse"
+       x1="538.57141"
+       y1="699.14789"
+       x2="562.85712"
+       y2="719.50507" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13756"
+       id="linearGradient29652"
+       gradientUnits="userSpaceOnUse"
+       x1="450.78058"
+       y1="666.98901"
+       x2="461.38718"
+       y2="681.48468" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19703"
+       id="linearGradient29654"
+       gradientUnits="userSpaceOnUse"
+       x1="660.5"
+       y1="643.11218"
+       x2="647"
+       y2="681.86218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient20702"
+       id="radialGradient29656"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7877615,-0.3068366,0.2750567,1.6025984,-339.57925,-281.42543)"
+       cx="392"
+       cy="682.68359"
+       fx="392"
+       fy="682.68359"
+       r="11" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient22671"
+       id="radialGradient29658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4334045,-0.7857037,2.2183534,1.2236733,-1042.1562,234.44432)"
+       cx="474.38373"
+       cy="659.97424"
+       fx="474.38373"
+       fy="659.97424"
+       r="15.8" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient23660"
+       id="linearGradient29660"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9699248,0,0,1,173.57519,6)"
+       x1="434.75"
+       y1="609.86218"
+       x2="434.75"
+       y2="641.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24639"
+       id="linearGradient29662"
+       gradientUnits="userSpaceOnUse"
+       x1="441.00461"
+       y1="648.47522"
+       x2="403.06418"
+       y2="645.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24639"
+       id="linearGradient29664"
+       gradientUnits="userSpaceOnUse"
+       x1="457.867"
+       y1="648.99261"
+       x2="407.80673"
+       y2="645.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24651"
+       id="linearGradient29666"
+       gradientUnits="userSpaceOnUse"
+       x1="434.68118"
+       y1="653.64905"
+       x2="408.33368"
+       y2="651.57947" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient26619"
+       id="linearGradient29668"
+       gradientUnits="userSpaceOnUse"
+       x1="590"
+       y1="636.34375"
+       x2="578"
+       y2="651.84375" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24651"
+       id="linearGradient29670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9488566,0,0,0.9664004,179.5499,26.675505)"
+       x1="434.68118"
+       y1="653.64905"
+       x2="408.33368"
+       y2="651.57947" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient23660"
+       id="linearGradient29672"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8989058,0,0,0.863818,225.09145,95.352673)"
+       x1="419.85327"
+       y1="633.24628"
+       x2="434.31531"
+       y2="653.70087" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient29560"
+       id="linearGradient29674"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9721378,0,0,0.9641253,16.310943,23.529189)"
+       x1="607.40472"
+       y1="666.98901"
+       x2="588.66638"
+       y2="657.79657" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient29690"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2029204,0.186021,-0.1860214,0.2029204,422.55483,563.24879)"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient29692"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2029204,0.186021,-0.1860214,0.2029204,422.55483,563.24879)"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient29708"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2029202,0.1860211,-0.1860211,0.2029202,415.50085,608.72154)"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient29710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2029202,0.1860211,-0.1860211,0.2029202,415.50085,608.72154)"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient29749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.510756,8.596396e-3,-9.491026e-3,0.563911,199.3096,272.8201)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9201"
+       id="linearGradient29751"
+       gradientUnits="userSpaceOnUse"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient29763"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.510756,8.596396e-3,-9.491026e-3,0.563911,199.3096,272.8201)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9201"
+       id="linearGradient29765"
+       gradientUnits="userSpaceOnUse"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient30770"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.347396,5.8469281e-3,-6.45542e-3,0.3835499,278.79698,446.0576)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient30772"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6801604,0,0,0.6801604,143.23448,260.49617)"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4884"
+       id="linearGradient4986"
+       gradientUnits="userSpaceOnUse"
+       x1="468.45825"
+       y1="368.94348"
+       x2="460.32651"
+       y2="332.88104"
+       gradientTransform="translate(-50.622053,-134.67858)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8558"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(1.0606601,-0.3535534)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8560"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(1.0606601,-0.3535534)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8562"
+       gradientUnits="userSpaceOnUse"
+       x1="279.66074"
+       y1="951.953"
+       x2="280.72137"
+       y2="935.68958" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8564"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(65.15738,0)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8566"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(65.15738,0)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8568"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,1,597.96234,0.3535534)"
+       x1="279.66074"
+       y1="951.953"
+       x2="280.72137"
+       y2="935.68958" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8570"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,1,741.85857,-1.4142136)"
+       x1="279.66074"
+       y1="951.953"
+       x2="280.72137"
+       y2="935.68958" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8572"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(213.29625,-1.4142136)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8574"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(213.29625,-1.4142136)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8576"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.7071068,0)"
+       x1="476.58997"
+       y1="953.36725"
+       x2="476.23642"
+       y2="936.50024" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8578"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(146.11366,-1.4142134)"
+       x1="279.66074"
+       y1="951.953"
+       x2="280.72137"
+       y2="935.68958" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8580"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(142.93168,-1.4142134)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8582"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(142.93168,-1.4142134)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8584"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-887.26512,-4.4513212e-7)"
+       x1="476.58997"
+       y1="953.36725"
+       x2="476.23642"
+       y2="936.50024" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8586"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(250.41936,-1.767767)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8588"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(250.41936,-1.767767)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8590"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(298.50262,-1.767767)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8592"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(298.50262,-1.767767)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8594"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(104.75536,-1.4142136)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8596"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(104.75536,-1.4142136)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient8903"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9082"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9084"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9086"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9088"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9090"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9092"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10632"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0002987,0,0,0.9606692,-0.1380491,15.912347)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10634"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2485904,0,0,0.9568426,-107.4476,25.962975)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10636"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0180271,0,0,0.9603807,-13.103176,33.000931)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10638"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0002987,0,0,0.9606692,0.2155043,67.177589)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10640"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2485904,0,0,0.9568426,-107.09405,77.228217)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10642"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0180271,0,0,0.9603807,-12.749623,84.266173)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient12422"
+       gradientUnits="userSpaceOnUse"
+       x1="448.76281"
+       y1="542.00787"
+       x2="465.87982"
+       y2="542.00787" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient12424"
+       gradientUnits="userSpaceOnUse"
+       x1="462.80139"
+       y1="548.90216"
+       x2="454.3161"
+       y2="539.00269" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient14671"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4620139,0,0,0.3894886,57.182807,0.9387358)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient14673"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,301.3571,283.759)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient14675"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,320.3571,312.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient14677"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,339.3571,294.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient14679"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4620139,0,0,0.3894886,57.182807,0.9387358)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14515"
+       id="linearGradient14681"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6887344,0,0,0.6887344,123.12631,180.07568)"
+       x1="504.69748"
+       y1="581.25232"
+       x2="504.69748"
+       y2="592.21246" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14515"
+       id="linearGradient14683"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6887344,0,0,0.6887344,123.12631,180.07568)"
+       x1="504.69748"
+       y1="581.25232"
+       x2="504.69748"
+       y2="592.21246" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14515"
+       id="linearGradient14685"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6887344,0,0,0.6887344,123.12631,180.07568)"
+       x1="504.69748"
+       y1="581.25232"
+       x2="504.69748"
+       y2="592.21246" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient16699"
+       gradientUnits="userSpaceOnUse"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient16701"
+       gradientUnits="userSpaceOnUse"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient16703"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="168.01244"
+       y1="765.50165"
+       x2="172.57751"
+       y2="783.052" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient16705"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient20674"
+       x1="550.44476"
+       y1="253.6601"
+       x2="617.09191"
+       y2="253.6601"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4884"
+       id="linearGradient20676"
+       x1="550.45654"
+       y1="279.77587"
+       x2="617.10101"
+       y2="279.77587"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient23605"
+       id="linearGradient23611"
+       x1="671.5"
+       y1="273.36218"
+       x2="642"
+       y2="258.36218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.5,-1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32738"
+       gradientUnits="userSpaceOnUse"
+       x1="657.81122"
+       y1="561.36737"
+       x2="667.31006"
+       y2="509.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32740"
+       gradientUnits="userSpaceOnUse"
+       x1="698.62152"
+       y1="559.50873"
+       x2="637.10321"
+       y2="525.56763" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32742"
+       gradientUnits="userSpaceOnUse"
+       x1="661.5"
+       y1="522.48663"
+       x2="668.9314"
+       y2="568.8941" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32744"
+       gradientUnits="userSpaceOnUse"
+       x1="657.81122"
+       y1="561.36737"
+       x2="667.31006"
+       y2="509.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32746"
+       gradientUnits="userSpaceOnUse"
+       x1="698.62152"
+       y1="559.50873"
+       x2="637.10321"
+       y2="525.56763" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32748"
+       gradientUnits="userSpaceOnUse"
+       x1="661.5"
+       y1="522.48663"
+       x2="668.9314"
+       y2="568.8941" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32750"
+       gradientUnits="userSpaceOnUse"
+       x1="657.81122"
+       y1="561.36737"
+       x2="667.31006"
+       y2="509.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32752"
+       gradientUnits="userSpaceOnUse"
+       x1="698.62152"
+       y1="559.50873"
+       x2="637.10321"
+       y2="525.56763" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32754"
+       gradientUnits="userSpaceOnUse"
+       x1="661.5"
+       y1="522.48663"
+       x2="668.9314"
+       y2="568.8941" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4884"
+       id="linearGradient34698"
+       x1="631.90344"
+       y1="523.90344"
+       x2="698.16439"
+       y2="547.48794"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient34716"
+       id="linearGradient34722"
+       x1="692.96466"
+       y1="529.10315"
+       x2="636.39612"
+       y2="571.07245"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient34743"
+       x1="551.61316"
+       y1="604.48474"
+       x2="574.93854"
+       y2="619.33398"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-237.34822,100.04162)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient35720"
+       x1="560.02856"
+       y1="633.04785"
+       x2="530.33008"
+       y2="597.6925"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-237.34822,100.04162)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient23605"
+       id="linearGradient4519"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.5,-1)"
+       x1="671.5"
+       y1="273.36218"
+       x2="642"
+       y2="258.36218" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="579.49621"
+     inkscape:cy="593.75733"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="1280"
+     inkscape:window-height="931"
+     inkscape:window-x="0"
+     inkscape:window-y="33"
+     showgrid="false" />
+  <metadata
+     id="metadata4939">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Livello 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       id="text22931"
+       style="font-size:27.52882576px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.39196366px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931228)"
+       y="569.82336"
+       x="102.38081"><tspan
+         id="tspan22933"
+         style="stroke-width:0.39196366"
+         y="569.82336"
+         x="102.38081">Windows dialogs  icons</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text13940"
+       style="font-size:22.53170586px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.32081166px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931229)"
+       y="66.432938"
+       x="104.47573"><tspan
+         id="tspan13942"
+         style="stroke-width:0.32081166"
+         y="66.432938"
+         x="104.47573">TuxGuitar Player 0.8 Version</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text14708"
+       style="font-size:7.94642401px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.11314224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931229)"
+       y="79.741409"
+       x="104.01778"><tspan
+         id="tspan14710"
+         style="stroke-width:0.11314226"
+         y="79.741409"
+         x="104.01778">Buttons defaut</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text14712"
+       style="font-size:7.94658947px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.1131442px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931229)"
+       y="80.345016"
+       x="270.76242"><tspan
+         id="tspan14714"
+         style="stroke-width:0.1131442"
+         y="80.345016"
+         x="270.76242">Buttons is on</tspan></text>
+    <rect
+       id="rect2827"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="389.56476"
+       x="104.71769"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_accentuated.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect2837"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="389.56476"
+       x="153.22922"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_fade_in.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect6548"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="389.35748"
+       x="201.66434"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_ghost.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect6595"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.02417"
+       x="249.47281"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_grace.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect7500"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.02417"
+       x="297.9993"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_hammer.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect7533"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.66095"
+       x="346.74661"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_harmonic.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3143"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.66095"
+       x="395.84604"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_heavy_accentuated.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3182"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.66095"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_palm_mute.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <text
+       xml:space="preserve"
+       id="text17219"
+       style="font-size:23.18305969px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.33008549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931228)"
+       y="137.11647"
+       x="103.68752"><tspan
+         id="tspan17221"
+         style="stroke-width:0.33008549"
+         y="137.11647"
+         x="103.68752">Toolbar  icons</tspan></text>
+    <rect
+       id="rect34943"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.37198"
+       x="104.68711"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect37863"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.14096"
+       x="201.2482"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect37847"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.37198"
+       x="154.58469"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect49778"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="247.90994"
+       x="248.60471"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52722"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path49780"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 338.50001,696.12549 L 406.50001,696.12549" />
+      <path
+         id="path50667"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(-6.499994,7.263308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path50669"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 369.35853,695.26143 L 369.35853,634.48955" />
+      <path
+         id="path50671"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 338.50001,675.62549 L 406.50001,675.62549" />
+    </g>
+    <rect
+       id="rect50689"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.14096"
+       x="295.96121"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect52500"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="247.90994"
+       x="345.85873"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52715"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path50709"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 473.56682,634.97014 C 491.05994,635.4857 491.47546,647.90583 491.48512,663.18131 C 486.73449,647.1487 488.86877,643.70599 473.61907,643.74026 C 473.53193,630.54852 473.6402,648.16276 473.56682,634.97014 z " />
+      <path
+         id="path52546"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 441.00001,696.62549 L 509.00001,696.62549" />
+      <path
+         id="path52548"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(96.00001,7.763308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52550"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 471.85853,695.76143 L 471.85853,634.98955" />
+      <path
+         id="path52552"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 441.00001,676.12549 L 509.00001,676.12549" />
+    </g>
+    <g
+       id="g52707"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path52519"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 581.65647,634.49305 C 599.14959,634.96367 599.56511,646.30103 599.57477,660.24482 C 594.82414,645.6099 596.95842,642.46732 581.70872,642.4986 C 581.62158,630.4569 581.72985,646.53556 581.65647,634.49305 z " />
+      <path
+         id="path52570"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 549.00001,696.12549 L 617.00001,696.12549" />
+      <path
+         id="path52572"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(204,7.263308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52574"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 579.85853,695.26143 L 579.85853,634.48955" />
+      <path
+         id="path52576"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 549.00001,675.62549 L 617.00001,675.62549" />
+      <path
+         id="path52578"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 581.51919,644.69678 C 599.01231,645.1674 599.42783,656.50476 599.43749,670.44855 C 594.68686,655.81363 596.82114,652.67105 581.57144,652.70233 C 581.4843,640.66063 581.59257,656.73929 581.51919,644.69678 z " />
+    </g>
+    <rect
+       id="rect52589"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.14096"
+       x="393.67725"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52697"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path52593"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 685.15647,634.99305 C 702.64959,635.46096 703.06511,646.7332 703.07477,660.59689 C 698.32414,646.04604 700.45842,642.92151 685.20872,642.95261 C 685.12158,630.98009 685.22985,646.96638 685.15647,634.99305 z " />
+      <path
+         id="path52597"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 652.50001,696.62549 L 720.50001,696.62549" />
+      <path
+         id="path52599"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(307.5,7.763308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52601"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 683.35853,695.76143 L 683.35853,634.98955" />
+      <path
+         id="path52603"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 652.50001,676.12549 L 720.50001,676.12549" />
+      <path
+         id="path52605"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 685.15647,644.55268 C 702.64959,645.02059 703.06511,656.29283 703.07477,670.15652 C 698.32414,655.60567 700.45842,652.48114 685.20872,652.51224 C 685.12158,640.53972 685.22985,656.52601 685.15647,644.55268 z " />
+      <path
+         id="path52614"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 685.15647,654.60879 C 702.64959,655.07671 703.06511,666.34894 703.07477,680.21263 C 698.32414,665.66178 700.45842,662.53726 685.20872,662.56836 C 685.12158,650.59583 685.22985,666.58212 685.15647,654.60879 z " />
+      <path
+         id="path52629"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 685.15647,664.55689 C 702.64959,665.02481 703.06511,676.29704 703.07477,690.16073 C 698.32414,675.60988 700.45842,672.48536 685.20872,672.51646 C 685.12158,660.54393 685.22985,676.53022 685.15647,664.55689 z " />
+    </g>
+    <rect
+       id="rect52728"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="298.03989"
+       x="104.41618"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52730"
+       style="display:inline"
+       transform="matrix(0.4620139,0,0,0.4620139,-47.017263,8.9897668)">
+      <path
+         id="path52732"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 338.50001,696.12549 L 406.50001,696.12549" />
+      <path
+         id="path52734"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(-6.499994,7.263308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52736"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 369.35853,695.26143 L 369.35853,634.48955" />
+      <path
+         id="path52738"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 338.50001,675.62549 L 406.50001,675.62549" />
+    </g>
+    <rect
+       id="rect52740"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,0,0)"
+       y="137.10782"
+       x="319.00745"
+       height="4.6201973"
+       width="4.8512053" />
+    <rect
+       id="rect52758"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="298.50052"
+       x="154.8157"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52774"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <g
+         id="g52760"
+         style="display:inline"
+         transform="translate(-203,109.5)">
+        <path
+           id="path52762"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 338.50001,696.12549 L 406.50001,696.12549" />
+        <path
+           id="path52764"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="translate(-6.499994,7.263308)"
+           d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+        <path
+           id="path52766"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 369.35853,695.26143 L 369.35853,634.48955" />
+        <path
+           id="path52768"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 338.50001,675.62549 L 406.50001,675.62549" />
+      </g>
+      <rect
+         id="rect52770"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="matrix(0.707107,0.707107,-0.707107,0.707107,0,0)"
+         y="431.48001"
+         x="683.43604"
+         height="10.000011"
+         width="10.500011" />
+      <rect
+         id="rect52772"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="matrix(0.707107,0.707107,-0.707107,0.707107,0,0)"
+         y="420.75739"
+         x="694.15863"
+         height="10.00004"
+         width="10.50004" />
+    </g>
+    <rect
+       id="rect52783"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="297.80753"
+       x="203.09622"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52910"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path52789"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 240.00001,804.12549 L 308.00001,804.12549" />
+      <path
+         id="path52795"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 240.00001,783.62549 L 308.00001,783.62549" />
+      <path
+         id="path52791"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(0.571633,0,0,1,45.35674,115.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52793"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 260.01295,803.45836 L 260.01295,758.79263" />
+      <path
+         id="path52812"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="matrix(0.571633,0,0,1,62.29158,115.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52814"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 277.14348,803.45838 L 277.14348,758.79265" />
+      <path
+         id="path52826"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="matrix(0.571633,0,0,1,79.44058,115.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52828"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 294.49064,803.45838 L 294.49064,758.79265" />
+      <rect
+         id="rect52830"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         y="758.36218"
+         x="258.86331"
+         height="9.6007662"
+         width="36.69611" />
+      <text
+         xml:space="preserve"
+         id="text52858"
+         style="font-size:25.4596386px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         transform="scale(1.099156,0.909789)"
+         y="832.28827"
+         x="243.78136"><tspan
+           id="tspan52860"
+           style="font-family:Arial Black"
+           y="832.28827"
+           x="243.78136">3</tspan></text>
+    </g>
+    <rect
+       id="rect52923"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="298.26956"
+       x="249.2977"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\timesignature.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       id="g16732"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\timesignature.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(849.99998,-63.999998)">
+      <path
+         id="path52961"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.68045378;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -590.64703,394.71663 L -568.46504,371.86246" />
+      <text
+         xml:space="preserve"
+         id="text53848"
+         style="font-size:28.30521774px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+         transform="scale(1.1990521,0.8339921)"
+         y="479.10339"
+         x="-485.94577"><tspan
+           id="tspan53850"
+           y="479.10339"
+           x="-485.94577">4</tspan></text>
+      <text
+         xml:space="preserve"
+         id="text54737"
+         style="font-size:28.30520058px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+         transform="scale(1.1990521,0.8339921)"
+         y="459.57449"
+         x="-498.8335"><tspan
+           id="tspan54739"
+           y="459.57449"
+           x="-498.8335">4</tspan></text>
+    </g>
+    <rect
+       id="rect54748"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="298.73154"
+       x="297.34726"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g57494"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <g
+         id="g56568"
+         transform="translate(4.064981,5.555418)">
+        <g
+           id="g56560">
+          <rect
+             id="rect54762"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             y="738.49548"
+             x="460.12595"
+             ry="0"
+             height="72.622528"
+             width="10.422997" />
+          <rect
+             id="rect54764"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             y="738.49548"
+             x="473.64929"
+             height="72.622528"
+             width="2.5666234" />
+        </g>
+        <g
+           id="g56564"
+           transform="translate(0,-0.109804)">
+          <path
+             id="path55655"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             transform="matrix(0.762121,0,0,0.762121,113.6812,182.3594)"
+             d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+          <path
+             id="path55657"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+             transform="matrix(0.762121,0,0,0.762121,113.6813,197.2904)"
+             d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+        </g>
+      </g>
+      <g
+         id="g57487">
+        <path
+           id="path55661"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 440.47831,744.01169 L 515.5217,743.84996" />
+        <path
+           id="path55663"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,816.87437 L 515.5217,816.71263" />
+        <path
+           id="path55665"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,798.65871 L 515.52169,798.49697" />
+        <path
+           id="path55667"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,780.44305 L 515.52169,780.28131" />
+        <path
+           id="path55669"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,762.22737 L 515.5217,762.06564" />
+      </g>
+    </g>
+    <rect
+       id="rect61934"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="scale(-1,1)"
+       y="298.26956"
+       x="-388.11679"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g61936"
+       style="display:inline"
+       transform="matrix(-0.4620139,0,0,0.4620139,588.29285,-41.602207)">
+      <g
+         id="g61938"
+         transform="translate(4.064981,5.555418)">
+        <g
+           id="g61940">
+          <rect
+             id="rect61942"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             y="738.49548"
+             x="460.12595"
+             ry="0"
+             height="72.622528"
+             width="10.422997" />
+          <rect
+             id="rect61944"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             y="738.49548"
+             x="473.64929"
+             height="72.622528"
+             width="2.5666234" />
+        </g>
+        <g
+           id="g61946"
+           transform="translate(0,-0.109804)">
+          <path
+             id="path61948"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             transform="matrix(0.762121,0,0,0.762121,113.6812,182.3594)"
+             d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+          <path
+             id="path61950"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+             transform="matrix(0.762121,0,0,0.762121,113.6813,197.2904)"
+             d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+        </g>
+      </g>
+      <g
+         id="g61952">
+        <path
+           id="path61954"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 440.47831,744.01169 L 515.5217,743.84996" />
+        <path
+           id="path61956"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,816.87437 L 515.5217,816.71263" />
+        <path
+           id="path61958"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,798.65871 L 515.52169,798.49697" />
+        <path
+           id="path61960"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,780.44305 L 515.52169,780.28131" />
+        <path
+           id="path61962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,762.22737 L 515.5217,762.06564" />
+      </g>
+    </g>
+    <rect
+       id="rect2795"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="297.34549"
+       x="395.29428"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g2826"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path2799"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 656.00001,803.12549 L 724.00001,803.12549" />
+      <path
+         id="path2801"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(311,114.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path2803"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 686.85853,802.26143 L 686.85853,741.48955" />
+      <path
+         id="path2805"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 656.00001,782.62549 L 724.00001,782.62549" />
+    </g>
+    <rect
+       id="rect2811"
+       style="opacity:0;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="296.91403"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\chord.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       id="g2829"
+       style="display:inline"
+       transform="matrix(0.4620139,0,0,0.4620139,432.20283,-140.79809)">
+      <path
+         id="path2831"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 29.00003,909.12551 L 97.00003,909.12551" />
+      <path
+         id="path2833"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="translate(-316,220.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path2835"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 29.00003,888.62551 L 97.00003,888.62551" />
+    </g>
+    <g
+       id="g16721"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\chord.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(849.99998,-63.999998)">
+      <text
+         xml:space="preserve"
+         id="text6554"
+         style="font-size:33.25069046px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+         transform="scale(0.9879705,1.012176)"
+         y="389.72214"
+         x="-392.5192"><tspan
+           id="tspan6556"
+           y="389.72214"
+           x="-392.5192">7</tspan></text>
+      <text
+         xml:space="preserve"
+         id="text6567"
+         style="font-size:31.83207703px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans Mono"
+         transform="scale(1.0055344,0.9944961)"
+         y="395.96545"
+         x="-405.44424"><tspan
+           id="tspan6569"
+           y="395.96545"
+           x="-405.44424">G</tspan></text>
+    </g>
+    <path
+       id="path6599"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.84805834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 109.94912,280.07177 L 141.36612,280.07177" />
+    <path
+       id="path6601"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.84805799;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       d="M 124.04047,271.1779 C 124.04047,273.53817 121.7134,275.45154 118.84281,275.45154 C 115.97222,275.45154 113.64515,273.53817 113.64515,271.1779 C 113.64515,268.81764 115.97222,266.90426 118.84281,266.90426 C 121.7134,266.90426 124.04047,268.81764 124.04047,271.1779 z " />
+    <path
+       id="path6603"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.42819726;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 124.20621,270.06859 L 124.20621,251.30528" />
+    <path
+       id="path6605"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.84805834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 109.94912,270.60047 L 141.36612,270.60047" />
+    <path
+       id="path6613"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.75689816;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 123.72752,273.79496 C 132.43241,281.53816 140.30826,273.79496 140.30826,273.79496 L 140.30826,273.79496" />
+    <g
+       id="g7524"
+       transform="matrix(0.4620139,0,0,0.4620139,-96.715983,-138.41685)">
+      <path
+         id="path7504"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 585.0017,844.15855 C 602.49482,844.62917 602.91034,855.96653 602.92,869.91032 C 598.16937,855.2754 600.30365,852.13282 585.05395,852.1641 C 584.96681,840.1224 585.07508,856.20106 585.0017,844.15855 z " />
+      <path
+         id="path7506"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 552.34524,905.79099 L 620.34524,905.79099" />
+      <path
+         id="path7508"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(207.3452,216.9288)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path7510"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 583.20376,904.92693 L 583.20376,844.15505" />
+      <path
+         id="path7512"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 552.34524,885.29099 L 620.34524,885.29099" />
+      <path
+         id="path7514"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 584.86442,854.36228 C 602.35754,854.8329 602.77306,866.17026 602.78272,880.11405 C 598.03209,865.47913 600.16637,862.33655 584.91667,862.36783 C 584.82953,850.32613 584.9378,866.40479 584.86442,854.36228 z " />
+      <path
+         id="path7522"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 584.74905,864.74215 C 602.24217,865.21277 602.65769,876.55013 602.66735,890.49392 C 597.91672,875.859 600.051,872.71642 584.8013,872.7477 C 584.71416,860.706 584.82243,876.78466 584.74905,864.74215 z " />
+    </g>
+    <text
+       xml:space="preserve"
+       id="text7535"
+       style="font-size:43.93042374px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans Mono"
+       y="284.18216"
+       x="209.71799"><tspan
+         id="tspan7537"
+         y="284.18216"
+         x="209.71799">X</tspan></text>
+    <rect
+       id="rect3132"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="247.76437"
+       x="441.0032"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect3703"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="147.76259"
+       x="394.47055"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g7499"
+       transform="matrix(0.4373357,0,0,0.4683741,65.447487,-49.039827)">
+      <g
+         id="g7361"
+         style="display:inline"
+         transform="matrix(0.518198,0.328578,-0.328578,0.518198,562.3445,-50.07558)">
+        <path
+           id="path7363"
+           style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 799.9099,425.55908 C 817.40302,426.0297 817.81854,437.36706 817.8282,451.31085 C 813.07757,436.67593 815.21185,433.53335 799.96215,433.56463 C 799.87501,421.52293 799.98328,437.60159 799.9099,425.55908 z " />
+        <path
+           id="path7365"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 798.11196,486.32746 L 798.11196,425.55558" />
+        <path
+           id="path7367"
+           style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 799.77262,435.76281 C 817.26574,436.23343 817.68126,447.57079 817.69092,461.51458 C 812.94029,446.87966 815.07457,443.73708 799.82487,443.76836 C 799.73773,431.72666 799.846,447.80532 799.77262,435.76281 z " />
+        <path
+           id="path7369"
+           style="fill:url(#radialGradient24225);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="matrix(1.090643,0,0,1.062011,390.5269,-245.3025)"
+           d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      </g>
+      <path
+         id="rect3745"
+         style="color:#000000;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.945538,0.325513,0,1,0,0)"
+         d="M 822.72691,174.61087 L 889.276,169.13496 L 889.276,199.72689 L 823.4895,199.72689 L 822.72691,174.61087 z " />
+      <path
+         id="rect3739"
+         style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.945538,0.325513,0,1,0,0)"
+         d="M 800.22229,188.70871 L 866.00876,188.70871 L 866.00876,219.30063 L 800.49191,214.62408 L 800.22229,188.70871 z " />
+      <rect
+         id="rect3741"
+         style="opacity:1;color:#000000;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.882353,-0.470588,0,1,0,0)"
+         y="907.16882"
+         x="927.44476"
+         height="30.591925"
+         width="26.003122" />
+      <path
+         id="rect3743"
+         style="color:#000000;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.701289,-0.712877,0.945817,0.324701,0,0)"
+         d="M -198.67545,947.41547 L -177.04075,950.94075 L -171.02987,1011.6918 L -199.05916,1012.7404 L -198.67545,947.41547 z " />
+      <path
+         id="rect3753"
+         style="color:#000000;fill:url(#linearGradient24227);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 788.37444,442.41233 C 790.98554,441.49944 800.28366,439.76223 810.12708,450.22181 C 809.39758,451.00304 806.96255,454.45726 805.25704,455.95851 C 798.77005,448.84021 786.55315,444.31821 781.43076,448.7918 C 782.36313,447.56946 787.21848,443.63946 788.37444,442.41233 z " />
+      <g
+         id="g7353"
+         transform="matrix(0.996519,0,0,0.996519,3.974373,5.043832)">
+        <path
+           id="path4656"
+           style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 799.9099,425.55908 C 817.40302,426.0297 817.81854,437.36706 817.8282,451.31085 C 813.07757,436.67593 815.21185,433.53335 799.96215,433.56463 C 799.87501,421.52293 799.98328,437.60159 799.9099,425.55908 z " />
+        <path
+           id="path4662"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 798.11196,486.32746 L 798.11196,425.55558" />
+        <path
+           id="path4666"
+           style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 799.77262,435.76281 C 817.26574,436.23343 817.68126,447.57079 817.69092,461.51458 C 812.94029,446.87966 815.07457,443.73708 799.82487,443.76836 C 799.73773,431.72666 799.846,447.80532 799.77262,435.76281 z " />
+        <path
+           id="path4660"
+           style="fill:url(#radialGradient24229);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="matrix(1.090643,0,0,1.062011,390.5269,-245.3025)"
+           d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      </g>
+    </g>
+    <rect
+       id="rect23627"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.17255"
+       x="104.5211"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23629"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="152.85513"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23631"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="200.99265"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23633"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="249.13016"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23635"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="297.26773"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23637"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="345.40518"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23639"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="393.54269"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23685"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect4189"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="479.92548"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g4191"
+       transform="matrix(0.8455204,0,0,0.7937234,6.5663167,-153.69652)">
+      <path
+         id="path4193"
+         style="color:#000000;fill:url(#radialGradient4540);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4542);stroke-width:19.88428688;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.253681,-2.501311e-2,2.459378e-2,0.246667,229.9229,877.6432)"
+         d="M 1044.2857,467.36218 C 1044.3227,533.26967 994.10381,586.71913 932.14286,586.71913 C 870.18191,586.71913 819.96301,533.26967 820.00002,467.36218 C 819.96301,401.45469 870.18191,348.00523 932.14286,348.00523 C 994.10381,348.00523 1044.3227,401.45469 1044.2857,467.36218 L 1044.2857,467.36218 z " />
+      <path
+         id="path4195"
+         style="color:#000000;fill:url(#radialGradient4544);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4546);stroke-width:24.22555733;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(7.590656e-2,-7.48444e-3,8.865423e-3,8.891693e-2,402.9419,934.5995)"
+         d="M 1044.2857,467.36218 C 1044.3227,533.26967 994.10381,586.71913 932.14286,586.71913 C 870.18191,586.71913 819.96301,533.26967 820.00002,467.36218 C 819.96301,401.45469 870.18191,348.00523 932.14286,348.00523 C 994.10381,348.00523 1044.3227,401.45469 1044.2857,467.36218 L 1044.2857,467.36218 z " />
+      <path
+         id="path4198"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,281.3689,848.9056)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4200"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,302.3878,837.0276)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4202"
+         style="color:#000000;fill:#000000;fill-opacity:0.44495413;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,325.3773,845.8586)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4204"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,275.7409,869.832)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4206"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,332.8209,863.8999)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4208"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,326.1424,885.6138)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4210"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,287.9716,890.5937)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4212"
+         style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4548);stroke-width:3.50856757;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 451.50995,943.25668 C 435.78414,960.38604 437.18199,983.78233 452.90778,996.73372" />
+      <path
+         id="path4214"
+         style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4550);stroke-width:2.95746279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 468.42158,952.25773 C 454.79821,963.2013 456.00919,978.14862 469.63254,986.42309" />
+      <path
+         id="path4216"
+         style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4552);stroke-width:3.47961354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 505.32732,943.2543 C 520.79326,960.38517 519.4185,983.78352 503.95255,996.73612" />
+      <path
+         id="path4218"
+         style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4554);stroke-width:2.96080017;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 488.70524,951.88864 C 502.07067,963.06859 500.88263,978.33881 487.51722,986.79199" />
+      <path
+         id="path4220"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 465.49828,937.54255 C 475.04316,934.00456 478.02606,940.68448 481.42441,949.00956 C 475.30206,941.30677 475.6879,938.96409 467.47456,942.31203 C 464.4973,935.13979 468.46833,944.71828 465.49828,937.54255 z " />
+      <path
+         id="path4222"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(0.539089,-0.218317,0.243345,0.597197,109.4028,645.3595)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path4224"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.31586146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 479.31673,974.22578 L 464.52817,937.93298" />
+      <path
+         id="path4226"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 467.90731,943.66616 C 477.45219,940.12817 480.43507,946.80809 483.83344,955.13317 C 477.71109,947.43038 478.09693,945.08769 469.88359,948.43564 C 466.90632,941.2634 470.87734,950.8419 467.90731,943.66616 z " />
+      <path
+         id="path4228"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 470.37101,949.89018 C 479.91589,946.35219 482.89878,953.03211 486.29715,961.3572 C 480.1748,953.6544 480.56062,951.31171 472.34729,954.65967 C 469.37002,947.48741 473.34105,957.06591 470.37101,949.89018 z " />
+      <path
+         id="path4230"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 505.72899,950.50171 C 520.25906,957.10155 515.96029,967.3979 510.25127,979.88426 C 512.25344,965.10468 515.33826,963.04516 502.49058,957.68701 C 507.35452,946.87609 500.85315,961.30851 505.72899,950.50171 z " />
+      <path
+         id="path4232"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(0.841647,0.353197,-0.410015,0.895235,445.2498,255.6813)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path4234"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.58397031;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 479.29983,1004.2686 L 504.21719,949.86355" />
+    </g>
+    <rect
+       id="rect4236"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.43713"
+       x="104.5211"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\tempoicon.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       id="rect4248"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.63367"
+       x="393.54269"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\edit_mode_selection.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       id="rect4250"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.63367"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g16749"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\tempoicon.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(849.99998,-63.999998)">
+      <path
+         id="path4256"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.84805679;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         d="M -728.72109,529.74258 C -728.72109,532.10284 -731.04817,534.01621 -733.91875,534.01621 C -736.78934,534.01621 -739.11641,532.10284 -739.11641,529.74258 C -739.11641,527.38232 -736.78934,525.46895 -733.91875,525.46895 C -731.04817,525.46895 -728.72109,527.38232 -728.72109,529.74258 z " />
+      <path
+         id="path4258"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.74707758;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M -728.6706,529.70396 L -728.6706,501.62649" />
+      <g
+         transform="translate(5.6568542,-1.4142136)"
+         id="g16745">
+        <path
+           d="M -729.88064,528.4216 L -719.96388,528.4216"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.11852527;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4254" />
+        <path
+           d="M -729.88064,521.49842 L -719.96388,521.49842"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.11852527;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path4260" />
+      </g>
+    </g>
+    <g
+       id="g2988"
+       transform="matrix(0.5633612,0,0,0.5633612,94.016587,27.970368)">
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path4570"
+         d="M 48.485517,575.51074 C 47.057601,575.53345 40.824521,575.50157 39.272311,589.79823 L 35.150004,589.79823 L 35.150004,592.07556 L 39.134654,592.07556 C 38.761213,596.18447 35.172599,613.87811 32.848466,613.95576 C 30.453707,614.03577 33.091056,614.04051 33.113086,611.43574 C 33.135117,608.83094 29.615875,608.89369 29.548583,611.44041 C 29.479763,614.04493 29.820497,616.0356 34.173133,616.00346 C 38.572698,615.97098 41.807204,603.64647 43.628053,592.07556 L 47.598261,592.07556 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path2984"
+         d="M 62.485517,575.51074 C 61.057601,575.53345 54.824521,575.50157 53.272311,589.79823 L 49.150004,589.79823 L 49.150004,592.07556 L 53.134654,592.07556 C 52.761213,596.18447 49.172599,613.87811 46.848466,613.95576 C 44.453707,614.03577 47.091056,614.04051 47.113086,611.43574 C 47.135117,608.83094 43.615875,608.89369 43.548583,611.44041 C 43.479763,614.04493 43.820497,616.0356 48.173133,616.00346 C 52.572698,615.97098 55.807204,603.64647 57.628053,592.07556 L 61.598261,592.07556 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path2986"
+         d="M 76.485517,575.51074 C 75.057601,575.53345 68.824521,575.50157 67.272311,589.79823 L 63.150004,589.79823 L 63.150004,592.07556 L 67.134654,592.07556 C 66.761213,596.18447 63.172599,613.87811 60.848466,613.95576 C 58.453707,614.03577 61.091056,614.04051 61.113086,611.43574 C 61.135117,608.83094 57.615875,608.89369 57.548583,611.44041 C 57.479763,614.04493 57.820497,616.0356 62.173133,616.00346 C 66.572698,615.97098 69.807204,603.64647 71.628053,592.07556 L 75.598261,592.07556 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <g
+       id="g3012"
+       transform="matrix(0.5633612,0,0,0.5633612,98.523477,27.970368)">
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path2995"
+         d="M 136.48552,575.51074 C 135.0576,575.53345 128.82452,575.50157 127.27231,589.79823 L 123.15,589.79823 L 123.15,592.07556 L 127.13465,592.07556 C 126.76121,596.18447 123.1726,613.87811 120.84847,613.95576 C 118.45371,614.03577 121.09106,614.04051 121.11309,611.43574 C 121.13512,608.83094 117.61588,608.89369 117.54858,611.44041 C 117.47976,614.04493 117.8205,616.0356 122.17313,616.00346 C 126.5727,615.97098 129.8072,603.64647 131.62805,592.07556 L 135.59826,592.07556 L 135.5982 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path2997"
+         d="M 150.48552,575.51074 C 149.0576,575.53345 142.82452,575.50157 141.27231,589.79823 L 137.15,589.79823 L 137.15,592.07556 L 141.13465,592.07556 C 140.76121,596.18447 137.1726,613.87811 134.84847,613.95576 C 132.45371,614.03577 135.09106,614.04051 135.11309,611.43574 C 135.13512,608.83094 131.61588,608.89369 131.54858,611.44041 C 131.47976,614.04493 131.8205,616.0356 136.17313,616.00346 C 140.5727,615.97098 143.8072,603.64647 145.62805,592.07556 L 149.59826,592.07556 L 149.5982 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <path
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 229.49687,352.191 C 228.69245,352.20379 225.18097,352.18583 224.30651,360.24001 L 221.98416,360.24001 L 221.98416,361.52298 L 224.22896,361.52298 C 224.01858,363.83778 221.9969,373.8057 220.68757,373.84944 C 219.33845,373.89451 220.82423,373.89719 220.83664,372.42975 C 220.84906,370.96232 218.86645,370.99766 218.82854,372.43239 C 218.78977,373.89968 218.98172,375.02114 221.43383,375.00303 C 223.91238,374.98474 225.73457,368.04158 226.76037,361.52298 L 228.99703,361.52298 L 22 [...]
+       id="path3005"
+       sodipodi:nodetypes="cccccszzzcccczszzz" />
+    <path
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 279.07269,352.191 C 278.26826,352.20379 274.75678,352.18583 273.88232,360.24001 L 271.55998,360.24001 L 271.55998,361.52298 L 273.80477,361.52298 C 273.59439,363.83778 271.57271,373.8057 270.26339,373.84944 C 268.91427,373.89451 270.40005,373.89719 270.41246,372.42975 C 270.42487,370.96232 268.44226,370.99766 268.40435,372.43239 C 268.36558,373.89968 268.55754,375.02114 271.00964,375.00303 C 273.4882,374.98474 275.31039,368.04158 276.33618,361.52298 L 278.57285,361.52298 L 27 [...]
+       id="path3019"
+       sodipodi:nodetypes="cccccszzzcccczszzz" />
+    <text
+       xml:space="preserve"
+       style="font-size:16.14900208px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="343.08582"
+       y="342.56519"
+       id="text3036"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3038"
+         x="343.08582"
+         y="342.56519"
+         style="font-size:16.14901543px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">m</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16.14931297px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="395.86255"
+       y="342.57013"
+       id="text3044"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3046"
+         x="395.86255"
+         y="342.57013"
+         style="font-size:16.14933777px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">mp</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16.14957619px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="445.04129"
+       y="342.5744"
+       id="text3048"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3050"
+         x="445.04129"
+         y="342.5744"
+         style="font-size:16.14960098px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">ppp</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16.14987183px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="500.21811"
+       y="342.5791"
+       id="text3052"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3054"
+         x="500.21811"
+         y="342.5791"
+         style="font-size:16.14989853px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">pp</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16.15017509px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="555.39612"
+       y="342.58392"
+       id="text3056"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3058"
+         x="555.39612"
+         y="342.58392"
+         style="font-size:16.1502018px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">p</tspan></text>
+    <path
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       d="M 134.6265,410.19998 L 118.81885,420.77364 L 118.81885,416.97306 L 129.21871,410.19998 L 118.81885,403.49058 L 118.81885,399.69 L 134.6265,410.19998 z "
+       id="text3060"
+       sodipodi:nodetypes="ccccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:30.45602417px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+       x="186.68878"
+       y="468.9649"
+       id="text3065"
+       transform="scale(1.1209993,0.8920612)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3067"
+         x="186.68878"
+         y="468.9649">()</tspan></text>
+    <path
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       d="M 165.0145,410.19998 L 180.82214,420.77364 L 180.82214,416.97306 L 170.4223,410.19998 L 180.82214,403.49058 L 180.82214,399.69 L 165.0145,410.19998 z "
+       id="path3069"
+       sodipodi:nodetypes="ccccccc" />
+    <g
+       id="g3104"
+       transform="matrix(0.5633612,0,0,0.5633612,94.016587,27.970368)">
+      <path
+         id="path3073"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 312.30593,647.99065 C 323.97335,648.37311 324.2505,657.58689 324.25694,668.9189 C 321.0884,657.02522 322.5119,654.47127 312.34078,654.4967 C 312.28266,644.71049 312.35487,657.77749 312.30593,647.99065 z " />
+      <path
+         id="path3077"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.8136487;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         d="M 310.92742,694.2856 C 310.92742,698.0754 307.56802,701.14764 303.42398,701.14764 C 299.27995,701.14764 295.92055,698.0754 295.92055,694.2856 C 295.92055,690.49579 299.27995,687.42354 303.42398,687.42354 C 307.56802,687.42354 310.92742,690.49579 310.92742,694.2856 z " />
+      <path
+         id="path3075"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.83327127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 293.82309,681.8583 L 327.47426,657.4004" />
+      <path
+         id="path3079"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.65990877;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 311.16655,693.08823 L 311.16655,648.00504" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:34.65638351px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+       x="-414.60809"
+       y="337.56183"
+       id="text3110"
+       transform="matrix(0,-1.024355,0.976224,0,0,0)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3112"
+         x="-414.60809"
+         y="337.56183">)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:15.52974701px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="331.20074"
+       y="380.70523"
+       id="text3114"
+       transform="scale(0.9278539,1.0777559)"><tspan
+         sodipodi:role="line"
+         id="tspan3116"
+         x="331.20074"
+         y="380.70523">HO</tspan></text>
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 367.82984,407.43075 L 375.7702,415.72262 L 367.82984,423.56851 L 359.48734,415.72262 L 367.82984,407.43075 z "
+       id="rect3126"
+       sodipodi:nodetypes="ccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:14.66517448px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="401.82806"
+       y="361.38586"
+       id="text3133"
+       transform="scale(0.8879582,1.1261792)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3135"
+         x="401.82806"
+         y="361.38586"
+         style="font-size:14.66517448px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">NH</tspan></text>
+    <path
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       d="M 416.54259,399.29957 L 406.74589,420.03662 L 408.54392,420.03662 L 414.57313,408.35804 L 420.05098,420.03662 L 426.28028,420.03662 L 416.54259,399.29957 z "
+       id="path3141"
+       sodipodi:nodetypes="ccccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:21.2996788px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="570.43744"
+       y="328.33853"
+       id="text3143"
+       transform="scale(0.7835739,1.2762038)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3145"
+         x="570.43744"
+         y="328.33853"
+         style="font-size:21.2996788px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">P.M</tspan></text>
+    <rect
+       id="rect3147"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.54208785;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.63367"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_left.png"
+       inkscape:export-xdpi="35.083145"
+       inkscape:export-ydpi="35.083145" />
+    <rect
+       id="rect3149"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.29358"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_right.png"
+       inkscape:export-xdpi="35.083145"
+       inkscape:export-ydpi="35.083145" />
+    <rect
+       id="rect3151"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="479.52423"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_up.png"
+       inkscape:export-xdpi="35.083145"
+       inkscape:export-ydpi="35.083145" />
+    <rect
+       id="rect3153"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="479.52423"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_down.png"
+       inkscape:export-xdpi="35.083145"
+       inkscape:export-ydpi="35.083145" />
+    <rect
+       id="rect3155"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="342.13184"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_bend.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3157"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="342.13184"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_dead.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3159"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="387.0224"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_vibrato.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3161"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="387.0224"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/repeat_alternative.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3163"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.26968"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slide.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3165"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.26968"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_staccato.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3167"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="294.5206"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_popping.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3169"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="294.5206"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3171"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="148.96628"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_picking.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3173"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="148.96628"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_trill.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3175"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.29816"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tapping.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3177"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.29816"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_bar.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <g
+       id="g4068"
+       transform="matrix(0.6801604,0,0,0.6801604,92.878547,36.861792)">
+      <path
+         sodipodi:nodetypes="cc"
+         id="path3179"
+         d="M 594.00003,497.36216 C 617.85953,497.555 627.69114,488.66969 628.00003,460.36216"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         transform="matrix(0.749399,0,0,0.807087,168.8359,92.77775)"
+         d="M 622.22856,466.26925 L 611.6474,466.26925 L 601.06624,466.26925 L 606.35682,457.1057 L 611.6474,447.94215 L 616.93798,457.1057 L 622.22856,466.26925 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5707963"
+         sodipodi:arg1="0.52359878"
+         sodipodi:r2="6.1090355"
+         sodipodi:r1="12.218071"
+         sodipodi:cy="460.16022"
+         sodipodi:cx="611.6474"
+         sodipodi:sides="3"
+         id="path4066"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="star" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.44790959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 549.9004,372.99053 L 566.96245,356.41925"
+       id="path4072"
+       sodipodi:nodetypes="cc" />
+    <g
+       id="g5882"
+       transform="matrix(1.0269525,0,0,0.9790352,-142.70822,-105.10055)">
+      <path
+         sodipodi:nodetypes="cc"
+         id="path4074"
+         d="M 674.43107,471.32979 L 691.12154,488.11001"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.94400001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="469.35751"
+         x="672.41663"
+         height="6"
+         width="6"
+         id="rect4961"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="469.35751"
+         x="687.11115"
+         height="6"
+         width="6"
+         id="rect4963"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="483.72479"
+         x="687.11115"
+         height="6"
+         width="6"
+         id="rect4965"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="483.72479"
+         x="672.41663"
+         height="6"
+         width="6"
+         id="rect4967"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:23.50349617px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="485.84433"
+       y="333.74701"
+       id="text5893"
+       transform="scale(1.0327709,0.9682689)"
+       sodipodi:linespacing="125%"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_popping.png"
+       inkscape:export-xdpi="71.751251"
+       inkscape:export-ydpi="71.751251"><tspan
+         sodipodi:role="line"
+         id="tspan5895"
+         x="485.84433"
+         y="333.74701"
+         style="font-size:23.50349617px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">P</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:31.86540413px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="527.66418"
+       y="335.72772"
+       id="text5897"
+       transform="scale(1.0413973,0.9602483)"
+       sodipodi:linespacing="125%"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+       inkscape:export-xdpi="61.67075"
+       inkscape:export-ydpi="61.67075"><tspan
+         sodipodi:role="line"
+         id="tspan5899"
+         x="527.66418"
+         y="335.72772"
+         style="font-size:31.86540413px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">s</tspan></text>
+    <g
+       id="g5911"
+       transform="matrix(0.9778313,0,0,1.3442636,-87.783773,-189.18239)">
+      <text
+         transform="scale(0.902157,1.108454)"
+         id="text5901"
+         y="312.95807"
+         x="662.24274"
+         style="font-size:13.23942089px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+         xml:space="preserve"><tspan
+           y="312.95807"
+           x="662.24274"
+           id="tspan5903"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         transform="scale(0.902157,1.108454)"
+         id="text5905"
+         y="312.87729"
+         x="682.92804"
+         style="font-size:13.23942089px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+         xml:space="preserve"><tspan
+           y="312.87729"
+           x="682.92804"
+           id="tspan5907"
+           sodipodi:role="line">3</tspan></text>
+      <path
+         id="path5909"
+         d="M 605.35606,346.58166 L 615.29346,336.53376"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.20514083px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <g
+       id="g5948"
+       transform="matrix(0.6801604,0,0,0.6801604,92.878547,36.861792)">
+      <g
+         transform="matrix(0.83334,0,0,1,120.4233,-6.810365)"
+         id="g5932">
+        <path
+           d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path5922" />
+        <path
+           d="M 683.05261,356.83776 L 683.05261,326.03045"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path5924" />
+      </g>
+      <path
+         transform="translate(0.645704,6.4635e-2)"
+         d="M 684.625 362.17465 A 2.0625 2.0625 0 1 1  680.5,362.17465 A 2.0625 2.0625 0 1 1  684.625 362.17465 z"
+         sodipodi:ry="2.0625"
+         sodipodi:rx="2.0625"
+         sodipodi:cy="362.17465"
+         sodipodi:cx="682.5625"
+         id="path5936"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.44400001;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:25.10733032px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="452.36047"
+       y="250.97691"
+       id="text5954"
+       transform="scale(1.1044258,0.9054479)"
+       sodipodi:linespacing="125%"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tapping.png"
+       inkscape:export-xdpi="68.070755"
+       inkscape:export-ydpi="68.070755"><tspan
+         sodipodi:role="line"
+         id="tspan5956"
+         x="452.36047"
+         y="250.97691"
+         style="font-size:25.10733032px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">T</tspan></text>
+    <g
+       id="g6849"
+       transform="matrix(0.8038258,0,0,0.8952428,8.6184267,-25.377783)">
+      <path
+         sodipodi:nodetypes="ccc"
+         id="path5958"
+         d="M 667.00003,271.36215 L 683.00003,284.86215 L 698.00003,271.36215"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <text
+         sodipodi:linespacing="125%"
+         transform="scale(1.077771,0.927841)"
+         id="text6845"
+         y="293.27463"
+         x="627.5741"
+         style="font-size:17.07377625px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+         xml:space="preserve"><tspan
+           y="293.27463"
+           x="627.5741"
+           id="tspan6847"
+           sodipodi:role="line">X</tspan></text>
+    </g>
+    <g
+       id="g6860"
+       transform="matrix(0.6037383,0,0,0.7722113,145.67626,19.685128)">
+      <rect
+         transform="matrix(0.880153,-0.474689,0,1,0,0)"
+         y="507.96887"
+         x="671.18982"
+         height="5.25"
+         width="25.279688"
+         id="rect6854"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         transform="matrix(0.880153,-0.474689,0,1,0,0)"
+         y="515.96887"
+         x="671.18945"
+         height="5.25"
+         width="25.279675"
+         id="rect6856"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         transform="matrix(0.880153,-0.474689,0,1,0,0)"
+         y="523.96887"
+         x="671.18945"
+         height="5.25"
+         width="25.279675"
+         id="rect6858"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:11.30146599px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="554.96161"
+       y="173.9628"
+       id="text6865"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.9705969,0,3.6240001e-2,1.0302939,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan6867"
+         x="554.96161"
+         y="173.9628"
+         style="font-size:30.13725471px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Vivaldi">tr</tspan></text>
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 499.14904,409.23966 C 499.14904,409.23966 503.10919,403.91788 505.09545,406.7731 C 506.77868,409.19273 507.2044,410.42046 508.34068,410.09152 C 509.45783,409.76811 510.19933,405.92246 513.65472,405.9502 C 516.22932,405.97125 515.73893,410.62861 519.95582,411.5253 C 518.46198,412.69577 515.8624,412.79055 514.47433,412.04608 C 513.15991,411.34111 512.59281,408.68166 511.12865,409.3599 C 509.70073,410.02135 509.44825,412.4489 506.56495,412.39759 C 503.73012,412.34628 503.85063,4 [...]
+       id="path6878"
+       sodipodi:nodetypes="cszscszzzc" />
+    <g
+       id="g21770"
+       transform="matrix(0.6801604,0,0,0.6801604,92.878547,36.861792)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\edit_mode_selection.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51">
+      <text
+         sodipodi:linespacing="125%"
+         transform="matrix(0,-1.06756,0.936716,0,0,0)"
+         id="text21766"
+         y="508.78696"
+         x="-580.42908"
+         style="font-size:44.71162415px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+         xml:space="preserve"><tspan
+           y="508.78696"
+           x="-580.42908"
+           id="tspan21768"
+           sodipodi:role="line">)</tspan></text>
+      <g
+         transform="translate(2.828427,-2.65165)"
+         id="g21749">
+        <g
+           id="g16378"
+           transform="matrix(0.83334,0,0,1.26493,-81.035,178.0078)">
+          <path
+             id="path16380"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z " />
+          <path
+             id="path16382"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+             d="M 683.05261,356.83776 L 683.05261,326.03045" />
+        </g>
+        <g
+           id="g15477"
+           transform="matrix(0.289054,1.22178,-1.331968,1.944028e-2,1154.889,24.19248)"
+           style="stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             id="path12800"
+             d="M 465.23106,595.7336 L 469.25,601.1875 L 469.09375,605.9375 L 465.65625,609.15625 L 460.65058,608.73406 L 455.28461,602.10158 C 455.28461,607.26321 459.09018,613.67006 463.85601,614.20682 L 469.22834,614.81189 L 479.5625,626.8125 L 483.71875,623.0625 L 474.22873,610.90263 L 473.66914,604.8712 C 473.19295,599.73852 470.29389,597.28414 465.23106,595.7336 z "
+             style="fill:#999999;stroke:#000000;stroke-width:0.60881829;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+             sodipodi:nodetypes="ccccccsccccsc" />
+          <path
+             transform="matrix(0.742775,-0.669541,0.636786,0.77104,0,0)"
+             style="fill:url(#linearGradient21760);fill-opacity:1;stroke-width:1.00046873"
+             d="M -30.319248,775.35716 C -29.236086,771.94908 -25.270866,771.78557 -23.146393,774.91204 L -22.971837,801.60352 L -30.244144,801.60352 L -30.319248,775.35716 z "
+             id="rect14581"
+             sodipodi:nodetypes="ccccc" />
+        </g>
+        <path
+           sodipodi:type="arc"
+           style="fill:#cccccc;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path16432"
+           sodipodi:cx="449.8125"
+           sodipodi:cy="637.17468"
+           sodipodi:rx="4.3707523"
+           sodipodi:ry="4.0625"
+           d="M 454.18325 637.17468 A 4.3707523 4.0625 0 1 1  445.44175,637.17468 A 4.3707523 4.0625 0 1 1  454.18325 637.17468 z"
+           transform="matrix(0.819316,0.899502,-0.550332,0.501274,431.3845,-87.32081)" />
+        <path
+           style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 484.50072,592.19035 L 477.27498,598.81948 L 478.13677,604.94037 L 479.88494,606.41213 L 478.88807,599.72546 L 484.41233,593.98021 L 484.50072,592.19035 z "
+           id="path16435"
+           sodipodi:nodetypes="ccccccc" />
+        <path
+           style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 491.96404,614.17206 C 487.52149,616.98813 481.99224,615.61946 480.03711,615.85633 C 478.33,616.06315 476.50158,617.62409 476.50158,617.62409 L 476.3248,615.10502 L 478.79969,613.73501 C 478.79969,613.73501 480.86422,613.06577 485.56139,613.46984 C 489.14203,613.77787 492.60171,611.64036 493.64891,609.31558 L 495.85862,604.41003 C 495.35966,607.74069 493.83974,612.98308 491.96404,614.17206 z "
+           id="path17322"
+           sodipodi:nodetypes="cscccsscs" />
+      </g>
+      <text
+         inkscape:transform-center-x="11"
+         inkscape:transform-center-y="-10.103847"
+         transform="matrix(0.717341,-0.596996,0.540854,0.94392,0,0)"
+         sodipodi:linespacing="100%"
+         id="text21762"
+         y="709.63062"
+         x="105.70007"
+         style="font-size:14.4750843px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;ma [...]
+         xml:space="preserve"><tspan
+           style="font-size:14.47510719px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook"
+           y="709.63062"
+           x="105.70007"
+           id="tspan21764"
+           sodipodi:role="line">pp</tspan></text>
+    </g>
+    <g
+       id="g3407"
+       transform="matrix(9.7000401e-2,8.1066758e-3,-1.1753914e-2,0.1240388,298.45948,558.24877)">
+      <g
+         id="g3296"
+         transform="matrix(3.608871,12.53273,-16.62977,0.199414,8930.251,-5616.342)"
+         style="stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+        <path
+           id="path3298"
+           d="M 465.23106,595.7336 L 469.25,601.1875 L 469.09375,605.9375 L 465.65625,609.15625 L 460.65058,608.73406 L 455.28461,602.10158 C 455.28461,607.26321 459.09018,613.67006 463.85601,614.20682 L 469.22834,614.81189 L 479.5625,626.8125 L 483.71875,623.0625 L 474.22873,610.90263 L 473.66914,604.8712 C 473.19295,599.73852 470.29389,597.28414 465.23106,595.7336 z "
+           style="fill:#999999;stroke:#000000;stroke-width:0.60881829;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           sodipodi:nodetypes="ccccccsccccsc" />
+        <path
+           transform="matrix(0.742775,-0.669541,0.636786,0.77104,0,0)"
+           style="fill:url(#linearGradient3382);fill-opacity:1;stroke-width:1.00046873"
+           d="M -30.319248,775.35716 C -29.236086,771.94908 -25.270866,771.78557 -23.146393,774.91204 L -22.971837,801.60352 L -30.244144,801.60352 L -30.319248,775.35716 z "
+           id="path3300"
+           sodipodi:nodetypes="ccccc" />
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:#cccccc;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path3302"
+         sodipodi:cx="449.8125"
+         sodipodi:cy="637.17468"
+         sodipodi:rx="4.3707523"
+         sodipodi:ry="4.0625"
+         d="M 454.18325 637.17468 A 4.3707523 4.0625 0 1 1  445.44175,637.17468 A 4.3707523 4.0625 0 1 1  454.18325 637.17468 z"
+         transform="matrix(10.22925,9.226876,-6.870956,5.141948,-102.7821,-6760.219)" />
+      <path
+         style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:2.26335382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 560.37978,210.04348 L 470.16563,278.04351 L 480.92517,340.83013 L 502.75126,355.92709 L 490.30523,287.33683 L 559.27623,228.40344 L 560.37978,210.04348 z "
+         id="path3304"
+         sodipodi:nodetypes="ccccccc" />
+      <path
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.39503074;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 653.56016,435.52659 C 598.09443,464.41316 529.06114,450.37367 504.65112,452.80343 C 483.33767,454.92494 460.50964,470.93669 460.50964,470.93669 L 458.30252,445.09667 L 489.2018,431.04344 C 489.2018,431.04344 514.97768,424.17853 573.62237,428.32339 C 618.32705,431.48308 661.52154,409.55702 674.59594,385.70998 L 702.18442,335.39003 C 695.95484,369.55514 676.97848,423.33032 653.56016,435.52659 z "
+         id="path3306"
+         sodipodi:nodetypes="cscccsscs" />
+    </g>
+    <g
+       id="g21483"
+       transform="matrix(0.6801604,0,0,0.6801604,97.639667,38.222112)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/option_skin.png"
+       inkscape:export-xdpi="54.250492"
+       inkscape:export-ydpi="54.250492">
+      <a
+         style="fill:url(#linearGradient21491);fill-opacity:1"
+         transform="matrix(1.0935538,0,0,0.9875559,-81.605798,-98.323313)"
+         id="a3635">
+        <path
+           style="fill:url(#linearGradient21493);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.40568686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 573.46809,989.25496 C 561.43446,918.49524 637.03499,915.96748 645.83589,919.79716 C 674.43146,931.00974 654.3464,985.51774 650.05535,987.75336 C 644.89956,990.4395 620.42002,988.48086 620.50756,989.43376 C 620.52581,989.44042 615.71426,1009.4048 598.77641,1009.9117 C 590.46857,1010.1603 574.46337,997.70295 573.46809,989.25496 z "
+           id="path3633"
+           sodipodi:nodetypes="ccscsc" />
+      </a>
+      <path
+         transform="matrix(0.2599889,1.1741624e-2,-1.2264639e-2,0.2489019,425.79798,629.67088)"
+         d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="-0.66417817"
+         sodipodi:arg1="-1.2924967"
+         sodipodi:r2="7.7217226"
+         sodipodi:r1="3.8608613"
+         sodipodi:cy="839.52301"
+         sodipodi:cx="566.39252"
+         sodipodi:sides="5"
+         id="path3644"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#d22d2d;stroke-width:35.29999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.2599889,1.1741624e-2,-1.2264639e-2,0.2489019,443.91514,614.48309)"
+         d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="-0.66417817"
+         sodipodi:arg1="-1.2924967"
+         sodipodi:r2="7.7217226"
+         sodipodi:r1="3.8608613"
+         sodipodi:cy="839.52301"
+         sodipodi:cx="566.39252"
+         sodipodi:sides="5"
+         id="path3646"
+         style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#00a100;stroke-width:35.29906464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.272574,1.2309989e-2,-1.2858322e-2,0.2609503,464.35714,598.38051)"
+         d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="-0.66417817"
+         sodipodi:arg1="-1.2924967"
+         sodipodi:r2="7.7217226"
+         sodipodi:r1="3.8608613"
+         sodipodi:cy="839.52301"
+         sodipodi:cx="566.39252"
+         sodipodi:sides="5"
+         id="path3648"
+         style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#4b4bff;stroke-width:35.29906464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.1668918,0.1065936,-0.1502726,0.1897914,624.05104,651.11923)"
+         d="M 559.81399 897.85938 A 44.686672 47.620178 0 1 1  470.44065,897.85938 A 44.686672 47.620178 0 1 1  559.81399 897.85938 z"
+         sodipodi:ry="47.620178"
+         sodipodi:rx="44.686672"
+         sodipodi:cy="897.85938"
+         sodipodi:cx="515.12732"
+         id="path4681"
+         style="fill:#ffffff;fill-opacity:0.96703342;fill-rule:nonzero;stroke:#090303;stroke-width:8.73597431;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98360656"
+         sodipodi:type="arc" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 557.56346,455.06672 L 539.02909,455.06672"
+       id="path5612"
+       inkscape:connector-type="polyline" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 509.06904,455.06672 L 527.60341,455.06672"
+       id="path5617"
+       inkscape:connector-type="polyline" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 509.64684,499.7196 L 509.64684,518.25397"
+       id="path5619"
+       inkscape:connector-type="polyline" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 557.76819,500.87519 L 557.76819,482.34082"
+       id="path5621"
+       inkscape:connector-type="polyline" />
+    <g
+       id="g5456"
+       transform="matrix(0.6801604,0,0,0.6801604,92.397597,36.982022)">
+      <path
+         inkscape:connector-type="polyline"
+         id="path3479"
+         d="M 660.56485,524.48896 L 711.90839,524.46219"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.57923365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+      <g
+         id="g5451">
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.78366613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 658.18058,522.19705 L 658.18058,550.37123"
+           id="path3481"
+           inkscape:connector-type="polyline" />
+        <text
+           xml:space="preserve"
+           style="font-size:21.18201256px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+           x="664.1015"
+           y="546.73944"
+           id="text3483"><tspan
+             sodipodi:role="line"
+             id="tspan3485"
+             x="664.1015"
+             y="546.73944">*</tspan></text>
+      </g>
+    </g>
+    <rect
+       id="rect3503"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="342.15051"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_dead.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3505"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="387.04108"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/repeat_alternative.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3507"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.28836"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_staccato.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3509"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="294.53928"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3511"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="148.98497"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_trill.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3513"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.31683"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_bar.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <g
+       id="g4645"
+       transform="matrix(2.1169218e-2,0,0,-2.1169218e-2,598.752,175.85533)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_treble.png"
+       inkscape:export-xdpi="112.41393"
+       inkscape:export-ydpi="112.41393">
+      <path
+         id="path4647"
+         d="M 297,1245 C 303,1248 304,1248 310,1248 C 318,1247 323,1244 334,1232 C 406,1158 466,1026 481,914 C 483,896 483,854 481,835 C 470,732 427,638 328,503 L 314,484 L 322,461 C 341,406 363,339 377,290 C 381,278 384,268 384,267 C 384,267 391,267 398,266 C 433,263 463,255 494,240 C 519,227 541,212 562,192 C 585,169 600,148 614,119 C 635,77 644,33 643,-11 C 642,-39 638,-60 629,-86 C 617,-124 595,-159 565,-189 C 539,-215 515,-231 483,-244 L 471,-249 L 471,-285 C 471,-336 468,-396 464,- [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g4687"
+       transform="matrix(2.5582031e-2,0,0,-2.5582031e-2,597.33302,216.29795)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_bass.png"
+       inkscape:export-xdpi="88.486824"
+       inkscape:export-ydpi="88.486824">
+      <path
+         id="path4689"
+         d="M 207,266 C 218,267 261,266 277,265 C 402,251 487,189 515,91 C 522,64 525,44 524,10 C 524,-33 519,-69 505,-107 C 454,-258 305,-383 33,-503 C 22,-508 12,-513 11,-514 C 5,-518 -1,-519 -7,-516 C -12,-514 -14,-512 -16,-507 C -19,-502 -18,-497 -16,-493 C -14,-489 -10,-486 12,-473 C 101,-420 166,-373 221,-325 C 238,-309 270,-277 284,-261 C 345,-190 377,-121 388,-41 C 390,-22 390,23 388,42 C 384,71 377,98 368,122 C 361,138 359,143 351,156 C 322,205 278,232 229,232 C 181,232 141,205  [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g4729"
+       transform="matrix(2.3963563e-2,0,0,-2.3963563e-2,597.45916,268.7724)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_alto.png"
+       inkscape:export-xdpi="92.514755"
+       inkscape:export-ydpi="92.514755">
+      <path
+         id="path4731"
+         d="M 9,498 C 12,500 18,500 72,500 L 132,500 L 135,497 C 137,495 139,493 140,491 C 142,487 142,450 142,0 C 142,-450 142,-487 140,-491 C 139,-493 137,-495 135,-497 L 132,-499 L 71,-499 L 10,-499 L 7,-497 C 5,-495 3,-493 2,-491 C 0,-487 0,-450 0,1 L 1,490 L 3,493 C 5,495 7,497 9,498 z M 201,498 C 204,500 207,500 218,500 C 231,500 232,499 235,497 C 243,491 242,514 242,254 L 242,21 L 248,26 C 273,50 296,87 309,120 C 317,144 322,171 324,200 C 324,213 325,215 327,218 C 329,221 336,225  [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g3548"
+       transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,602.52128,370.85889)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_flat.png"
+       inkscape:export-xdpi="40.069347"
+       inkscape:export-ydpi="40.069347">
+      <path
+         id="path3550"
+         d="M -12,469 C -1,471 17,469 24,464 C 26,463 26,452 23,289 C 21,194 20,116 20,116 C 20,115 24,117 28,120 C 49,134 75,142 101,144 C 128,145 150,137 169,118 C 188,100 198,76 200,50 C 201,31 197,14 188,-4 C 174,-31 154,-50 94,-91 C 56,-117 46,-125 34,-139 C 28,-145 21,-152 19,-153 C 10,-159 0,-158 -8,-151 C -10,-148 -12,-145 -13,-142 C -14,-140 -16,-33 -19,136 C -22,287 -24,422 -25,437 L -25,463 L -21,465 C -19,466 -15,468 -12,469 z M 94,102 C 87,106 76,107 67,104 C 49,99 34,83 28, [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g3590"
+       transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,601.62143,408.04533)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_natural.png"
+       inkscape:export-xdpi="40.012753"
+       inkscape:export-ydpi="40.012753">
+      <path
+         id="path3592"
+         d="M 7,380 C 15,382 33,380 40,375 C 41,374 41,359 40,288 C 39,240 39,201 39,201 C 39,200 64,204 95,209 C 127,215 152,218 153,218 C 158,217 162,213 165,208 L 167,204 L 170,-85 C 173,-317 174,-374 173,-374 C 172,-375 169,-376 166,-377 C 158,-380 142,-380 134,-377 C 131,-376 128,-375 127,-374 C 126,-373 126,-358 127,-287 C 128,-239 128,-200 128,-200 C 128,-199 103,-203 72,-208 C 40,-214 15,-217 14,-217 C 9,-216 5,-212 2,-207 L 0,-202 L -3,49 C -5,187 -6,317 -7,338 L -7,375 L -2,377 [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g3632"
+       transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,598.54322,315.09834)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_sharp.png"
+       inkscape:export-xdpi="32.806053"
+       inkscape:export-ydpi="32.806053">
+      <path
+         id="path3634"
+         d="M 191,373 C 198,377 209,374 213,365 C 215,361 215,358 215,288 C 215,247 215,214 216,214 C 216,214 225,218 236,222 C 259,231 262,232 268,227 C 275,222 275,221 275,181 C 275,147 275,144 273,141 C 272,139 270,137 269,136 C 267,135 255,129 241,124 L 216,113 L 215,32 C 215,-12 215,-49 216,-49 C 216,-49 225,-45 236,-41 C 259,-32 262,-31 268,-36 C 275,-41 275,-42 275,-82 C 275,-116 275,-119 273,-122 C 272,-124 270,-126 269,-127 C 267,-128 255,-134 241,-139 L 216,-150 L 215,-234 C 21 [...]
+         style="fill:currentColor" />
+    </g>
+    <rect
+       id="rect46109"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="147.69514"
+       x="105.04722"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\fretboard.png"
+       inkscape:export-xdpi="51.581112"
+       inkscape:export-ydpi="51.581112" />
+    <g
+       id="g46111"
+       transform="translate(-239.97292,-93.208822)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\fretboard.png"
+       inkscape:export-xdpi="51.581112"
+       inkscape:export-ydpi="51.581112">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#312e2e;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 356.78571,244.32647 C 353.66319,246.47578 354.37107,249.39116 354.46428,252.18361 C 355.58661,255.37224 356.79093,258.66335 356.60714,260.21933 C 355.07725,264.44552 351.99862,268.67171 353.21428,272.8979 C 354.19924,277.32599 360.76555,278.9478 362.5,279.1479 C 366.65572,279.50067 368.87789,279.08001 371.42857,278.79076 C 375.1921,277.79337 376.7561,276.58639 377.57397,274.45274 C 377.83672,273.33968 378.09947,272.07293 377.85714,270.75504 C 375.54249,264.60725 374.45744,2 [...]
+         id="path46113"
+         sodipodi:nodetypes="cccccccccccccccc" />
+      <path
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#d6d6d6;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 359.38895,267.92936 C 362.0294,270.76601 365.91542,269.08474 368.85913,269.19205 C 374.03586,269.61356 373.85893,272.66115 376.56155,272.34877 C 377.31917,272.09624 377.40333,271.33862 376.81408,270.07593 C 376.44181,268.23522 373.40705,263.38032 373.40482,260.60575 C 373.43341,258.94466 375.75999,256.44195 375.80393,253.28214 C 375.69313,252.48244 375.49215,251.17766 375.04632,250.88303 C 374.34436,251.14843 374.64966,254.43708 371.76332,255.55499 C 369.69466,256.98962 361 [...]
+         id="path46115"
+         sodipodi:nodetypes="ccccccccccc" />
+      <rect
+         style="fill:url(#linearGradient46199);fill-opacity:1;stroke:#d38d5f;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
+         id="rect46117"
+         width="4.7982244"
+         height="13.637059"
+         x="363.30331"
+         y="242.29672"
+         rx="0.2"
+         ry="0.2" />
+      <g
+         id="g46119"
+         transform="translate(0.911069,-92.225798)">
+        <rect
+           ry="0.69999999"
+           rx="0.69999999"
+           y="348.91721"
+           x="361.76089"
+           height="1.6414979"
+           width="6.4397225"
+           id="rect46121"
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
+        <g
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)"
+           id="g46123">
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46125"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-9.8489873,-11.237947)" />
+          <path
+             transform="translate(-4.4194174,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46127"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46129"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(1.1364216,-11.237947)" />
+          <path
+             transform="translate(6.8185297,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46131"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46133"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(12.2481,-11.237947)" />
+          <path
+             transform="translate(17.803939,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46135"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+        </g>
+      </g>
+      <g
+         transform="translate(0.911069,-87.427573)"
+         id="g46137">
+        <rect
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect46139"
+           width="6.4397225"
+           height="1.6414979"
+           x="361.76089"
+           y="348.91721"
+           rx="0.69999999"
+           ry="0.69999999" />
+        <g
+           id="g46141"
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)">
+          <path
+             transform="translate(-9.8489873,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46143"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46145"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-4.4194174,-11.237947)" />
+          <path
+             transform="translate(1.1364216,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46147"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46149"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(6.8185297,-11.237947)" />
+          <path
+             transform="translate(12.2481,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46151"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46153"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(17.803939,-11.237947)" />
+        </g>
+      </g>
+      <g
+         id="g46155"
+         transform="matrix(0.9818469,0.189675,-0.189675,0.9818469,73.746857,-146.26586)">
+        <rect
+           ry="0.69999999"
+           rx="0.69999999"
+           y="348.91721"
+           x="361.76089"
+           height="1.6414979"
+           width="6.4397225"
+           id="rect46157"
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
+        <g
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)"
+           id="g46159">
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46161"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-9.8489873,-11.237947)" />
+          <path
+             transform="translate(-4.4194174,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46163"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46165"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(1.1364216,-11.237947)" />
+          <path
+             transform="translate(6.8185297,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46167"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46169"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(12.2481,-11.237947)" />
+          <path
+             transform="translate(17.803939,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46171"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+        </g>
+      </g>
+      <g
+         id="g46173"
+         transform="translate(-9.9084e-2,-86.669959)">
+        <rect
+           style="fill:#333333;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect46175"
+           width="6.4397225"
+           height="1.1364216"
+           x="362.77106"
+           y="354.97812"
+           rx="0.2"
+           ry="0.13846155" />
+        <g
+           style="fill:#666666"
+           id="g46177"
+           transform="matrix(0.1606529,0,0,0.1606529,307.82015,299.98093)">
+          <path
+             transform="translate(-9.8489873,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46179"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46181"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-4.4194174,-11.237947)" />
+          <path
+             transform="translate(1.1364216,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46183"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46185"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(6.8185297,-11.237947)" />
+          <path
+             transform="translate(12.2481,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46187"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46189"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(17.803939,-11.237947)" />
+        </g>
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:#808080;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path46191"
+         sodipodi:cx="364.9176"
+         sodipodi:cy="356.17767"
+         sodipodi:rx="0.75761443"
+         sodipodi:ry="0.69447988"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         transform="translate(8.234675,-87.427573)" />
+      <path
+         transform="translate(10.633787,-85.280999)"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         sodipodi:ry="0.69447988"
+         sodipodi:rx="0.75761443"
+         sodipodi:cy="356.17767"
+         sodipodi:cx="364.9176"
+         id="path46193"
+         style="fill:#808080;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#4d4d4d;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path46195"
+         sodipodi:cx="364.9176"
+         sodipodi:cy="356.17767"
+         sodipodi:rx="0.75761443"
+         sodipodi:ry="0.69447988"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         transform="translate(5.583024,-89.069071)" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 372.01586,263.88874 L 373.65736,266.03532"
+         id="path46197" />
+    </g>
+    <rect
+       id="rect46201"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="-192.80984"
+       x="147.69516"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <g
+       id="g46203"
+       transform="matrix(0,1,-1,0,432.78378,-197.77037)">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#312e2e;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 356.78571,244.32647 C 353.66319,246.47578 354.37107,249.39116 354.46428,252.18361 C 355.58661,255.37224 356.79093,258.66335 356.60714,260.21933 C 355.07725,264.44552 351.99862,268.67171 353.21428,272.8979 C 354.19924,277.32599 360.76555,278.9478 362.5,279.1479 C 366.65572,279.50067 368.87789,279.08001 371.42857,278.79076 C 375.1921,277.79337 376.7561,276.58639 377.57397,274.45274 C 377.83672,273.33968 378.09947,272.07293 377.85714,270.75504 C 375.54249,264.60725 374.45744,2 [...]
+         id="path46205"
+         sodipodi:nodetypes="cccccccccccccccc" />
+      <path
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#d6d6d6;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 359.38895,267.92936 C 362.0294,270.76601 365.91542,269.08474 368.85913,269.19205 C 374.03586,269.61356 373.85893,272.66115 376.56155,272.34877 C 377.31917,272.09624 377.40333,271.33862 376.81408,270.07593 C 376.44181,268.23522 373.40705,263.38032 373.40482,260.60575 C 373.43341,258.94466 375.75999,256.44195 375.80393,253.28214 C 375.69313,252.48244 375.49215,251.17766 375.04632,250.88303 C 374.34436,251.14843 374.64966,254.43708 371.76332,255.55499 C 369.69466,256.98962 361 [...]
+         id="path46207"
+         sodipodi:nodetypes="ccccccccccc" />
+      <rect
+         style="fill:url(#linearGradient46291);fill-opacity:1;stroke:#d38d5f;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
+         id="rect46209"
+         width="4.7982244"
+         height="13.637059"
+         x="363.30331"
+         y="242.29672"
+         rx="0.2"
+         ry="0.2" />
+      <g
+         id="g46211"
+         transform="translate(0.911069,-92.225798)">
+        <rect
+           ry="0.69999999"
+           rx="0.69999999"
+           y="348.91721"
+           x="361.76089"
+           height="1.6414979"
+           width="6.4397225"
+           id="rect46213"
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
+        <g
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)"
+           id="g46215">
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46217"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-9.8489873,-11.237947)" />
+          <path
+             transform="translate(-4.4194174,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46219"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46221"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(1.1364216,-11.237947)" />
+          <path
+             transform="translate(6.8185297,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46223"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46225"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(12.2481,-11.237947)" />
+          <path
+             transform="translate(17.803939,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46227"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+        </g>
+      </g>
+      <g
+         transform="translate(0.911069,-87.427573)"
+         id="g46229">
+        <rect
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect46231"
+           width="6.4397225"
+           height="1.6414979"
+           x="361.76089"
+           y="348.91721"
+           rx="0.69999999"
+           ry="0.69999999" />
+        <g
+           id="g46233"
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)">
+          <path
+             transform="translate(-9.8489873,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46235"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46237"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-4.4194174,-11.237947)" />
+          <path
+             transform="translate(1.1364216,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46239"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46241"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(6.8185297,-11.237947)" />
+          <path
+             transform="translate(12.2481,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46243"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46245"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(17.803939,-11.237947)" />
+        </g>
+      </g>
+      <g
+         id="g46247"
+         transform="matrix(0.9818469,0.189675,-0.189675,0.9818469,73.746857,-146.26586)">
+        <rect
+           ry="0.69999999"
+           rx="0.69999999"
+           y="348.91721"
+           x="361.76089"
+           height="1.6414979"
+           width="6.4397225"
+           id="rect46249"
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
+        <g
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)"
+           id="g46251">
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46253"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-9.8489873,-11.237947)" />
+          <path
+             transform="translate(-4.4194174,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46255"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46257"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(1.1364216,-11.237947)" />
+          <path
+             transform="translate(6.8185297,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46259"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46261"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(12.2481,-11.237947)" />
+          <path
+             transform="translate(17.803939,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46263"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+        </g>
+      </g>
+      <g
+         id="g46265"
+         transform="translate(-9.9084e-2,-86.669959)">
+        <rect
+           style="fill:#333333;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect46267"
+           width="6.4397225"
+           height="1.1364216"
+           x="362.77106"
+           y="354.97812"
+           rx="0.2"
+           ry="0.13846155" />
+        <g
+           style="fill:#666666"
+           id="g46269"
+           transform="matrix(0.1606529,0,0,0.1606529,307.82015,299.98093)">
+          <path
+             transform="translate(-9.8489873,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46271"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46273"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-4.4194174,-11.237947)" />
+          <path
+             transform="translate(1.1364216,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46275"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46277"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(6.8185297,-11.237947)" />
+          <path
+             transform="translate(12.2481,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46279"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46281"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(17.803939,-11.237947)" />
+        </g>
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:#808080;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path46283"
+         sodipodi:cx="364.9176"
+         sodipodi:cy="356.17767"
+         sodipodi:rx="0.75761443"
+         sodipodi:ry="0.69447988"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         transform="translate(8.234675,-87.427573)" />
+      <path
+         transform="translate(10.633787,-85.280999)"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         sodipodi:ry="0.69447988"
+         sodipodi:rx="0.75761443"
+         sodipodi:cy="356.17767"
+         sodipodi:cx="364.9176"
+         id="path46285"
+         style="fill:#808080;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#4d4d4d;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path46287"
+         sodipodi:cx="364.9176"
+         sodipodi:cy="356.17767"
+         sodipodi:rx="0.75761443"
+         sodipodi:ry="0.69447988"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         transform="translate(5.583024,-89.069071)" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 372.01586,263.88874 L 373.65736,266.03532"
+         id="path46289" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="199.33298"
+       y="147.69514"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect46298" />
+    <g
+       id="g46300"
+       transform="translate(-112.68645,-233.57666)">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path46302"
+         d="M 319.5425,392.25851 L 326.77266,385.82994 L 347.57424,385.82994 L 347.57424,417.14467 L 319.5425,417.14467 L 319.5425,392.25851 z "
+         style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path46304"
+         d="M 319.77466,392.18383 L 327.03272,392.53521 L 326.45668,386.17002 L 319.77466,392.18383 z "
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.46774149;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path46306"
+         d="M 340.16186,394.29247 L 340.16186,399.14094 L 335.34158,399.14094 L 335.34158,403.82028 L 340.16186,403.82028 L 340.16186,408.64056 L 344.8412,408.64056 L 344.8412,403.79209 L 349.66148,403.79209 L 349.66148,399.11275 L 344.8412,399.11275 L 344.8412,394.29247 L 340.16186,394.29247 z "
+         style="opacity:1;fill:url(#linearGradient46308);fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="247.90439"
+       y="147.69516"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect46310" />
+    <g
+       id="g46312"
+       transform="translate(-64.273873,-282.45416)">
+      <path
+         id="path46314"
+         d="M 317.14286,466.38665 L 313.92857,441.8717 L 316.60714,437.29558 L 326.96429,436.80528 L 331.07143,440.72767 L 343.57143,440.07394 L 348.39286,464.91575 L 317.14286,466.38665 z "
+         style="opacity:0.8;fill:url(#linearGradient46322);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.47833687;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path46316"
+         d="M 318.39286,466.22321 L 317.5,442.19857 L 343.21429,441.05454 L 346.42857,464.91575 L 318.39286,466.22321 z "
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path46318"
+         d="M 319.10714,466.38665 L 320.53571,443.99633 L 347.32143,442.68887 L 345.89286,464.91575 L 319.10714,466.38665 z "
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path46320"
+         d="M 321.71428,446.93812 L 351.14285,445.46723 C 351.69685,445.46723 352.14285,445.87542 352.14285,446.38245 L 348.57142,464.32739 C 348.57142,464.83442 348.12542,465.24261 347.57142,465.24261 L 318.14285,466.71351 C 317.58885,466.71351 317.14285,466.30532 317.14285,465.79828 L 320.71428,447.85335 C 320.71428,447.34631 321.16028,446.93812 321.71428,446.93812 z "
+         style="opacity:0.78719991;fill:url(#linearGradient46324);fill-opacity:1;stroke:#000000;stroke-width:0.47833687;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="295.04727"
+       y="147.69516"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect46326" />
+    <g
+       id="g46328"
+       transform="translate(-17.500033,-425.42856)">
+      <path
+         d="M 329.89237,582.19858 L 346.57124,582.19858 L 341.38263,594.53987 L 324.70377,594.53987 L 329.89237,582.19858 z "
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path46330" />
+      <path
+         d="M 325.36076,590.2392 C 320.8422,590.51315 316.91065,594.47845 316.23949,597.10206 C 315.58524,599.65962 316.99792,605.95711 317.27166,607.24633 C 317.32233,607.48495 335.3486,609.7667 337.50068,609.7667 C 337.32165,608.47808 337.11719,602.34738 337.12299,600.45896 C 337.14863,592.19968 342.92469,590.59289 342.92469,590.59289 L 325.36076,590.2392 z "
+         style="fill:url(#linearGradient46350);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path46332" />
+      <path
+         d="M 350.31616,596.3078 C 350.31616,601.59804 350.16747,603.31024 349.87749,606.18941 C 349.70035,606.42297 338.12735,609.61157 337.95243,609.71086 C 337.62091,607.25452 337.32158,604.09884 337.16024,601.47186 C 336.90347,597.29055 338.38209,591.07056 343.89828,590.59603 C 347.56257,590.27771 350.31616,591.01756 350.31616,596.3078 z "
+         style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path46334" />
+      <path
+         d="M 335.53485,576.99555 L 347.60259,577.30259 C 347.60259,577.30259 343.00827,581.4236 340.40363,590.46128 C 336.76593,590.45942 331.00119,590.04235 328.33589,590.15425 C 331.05325,580.93901 335.53485,576.99555 335.53485,576.99555 z "
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path46336" />
+      <path
+         d="M 323.04971,594.62001 C 323.04971,594.62001 332.88394,595.31498 333.04129,595.31498 C 333.19864,595.31498 334.85079,592.83294 334.85079,592.83294 L 325.25258,592.43581 L 323.04971,594.62001 z "
+         style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path46338" />
+      <rect
+         width="13.617006"
+         height="2.6806109"
+         x="321.83487"
+         y="566.54987"
+         transform="matrix(0.993753,0.111602,0,1,0,0)"
+         style="fill:url(#linearGradient46352);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50156909;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect46340" />
+      <path
+         d="M 335.59969,580.34416 L 343.01028,580.42532"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path46342" />
+      <path
+         d="M 333.25408,583.54052 L 340.66467,583.62168"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path46344" />
+      <path
+         d="M 331.74,586.86786 L 339.1506,587.03017"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path46346" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path46348"
+         d="M 315.71428,591.6479 L 315.71428,611.29075 L 333.92857,600.57647 L 315.71428,591.6479 z "
+         style="fill:url(#linearGradient46354);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <rect
+       id="rect46356"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="147.69516"
+       x="343.61868"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g46358"
+       transform="translate(31.071397,-425.42859)">
+      <path
+         id="path46360"
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 329.89237,582.19858 L 346.57124,582.19858 L 341.38263,594.53987 L 324.70377,594.53987 L 329.89237,582.19858 z " />
+      <path
+         id="path46362"
+         style="fill:url(#linearGradient46382);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 325.36076,590.2392 C 320.8422,590.51315 316.91065,594.47845 316.23949,597.10206 C 315.58524,599.65962 316.99792,605.95711 317.27166,607.24633 C 317.32233,607.48495 335.3486,609.7667 337.50068,609.7667 C 337.32165,608.47808 337.11719,602.34738 337.12299,600.45896 C 337.14863,592.19968 342.92469,590.59289 342.92469,590.59289 L 325.36076,590.2392 z " />
+      <path
+         id="path46364"
+         style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 350.31616,596.3078 C 350.31616,601.59804 350.16747,603.31024 349.87749,606.18941 C 349.70035,606.42297 338.12735,609.61157 337.95243,609.71086 C 337.62091,607.25452 337.32158,604.09884 337.16024,601.47186 C 336.90347,597.29055 338.38209,591.07056 343.89828,590.59603 C 347.56257,590.27771 350.31616,591.01756 350.31616,596.3078 z " />
+      <path
+         id="path46366"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 335.53485,576.99555 L 347.60259,577.30259 C 347.60259,577.30259 343.00827,581.4236 340.40363,590.46128 C 336.76593,590.45942 331.00119,590.04235 328.33589,590.15425 C 331.05325,580.93901 335.53485,576.99555 335.53485,576.99555 z " />
+      <path
+         id="path46368"
+         style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 323.04971,594.62001 C 323.04971,594.62001 332.88394,595.31498 333.04129,595.31498 C 333.19864,595.31498 334.85079,592.83294 334.85079,592.83294 L 325.25258,592.43581 L 323.04971,594.62001 z " />
+      <rect
+         id="rect46370"
+         style="fill:url(#linearGradient46384);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50156909;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.993753,0.111602,0,1,0,0)"
+         y="566.54987"
+         x="321.83487"
+         height="2.6806109"
+         width="13.617006" />
+      <path
+         id="path46372"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 335.59969,580.34416 L 343.01028,580.42532" />
+      <path
+         id="path46374"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 333.25408,583.54052 L 340.66467,583.62168" />
+      <path
+         id="path46376"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 331.74,586.86786 L 339.1506,587.03017" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.82480014;fill:#e6e6e6;fill-opacity:1;stroke:#333333;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path46378"
+       sodipodi:cx="326.40555"
+       sodipodi:cy="634.53784"
+       sodipodi:rx="9.4701805"
+       sodipodi:ry="7.7024131"
+       d="M 335.87573 634.53784 A 9.4701805 7.7024131 0 1 1  316.93537,634.53784 A 9.4701805 7.7024131 0 1 1  335.87573 634.53784 z"
+       transform="translate(31.071397,-471.8956)" />
+    <path
+       style="fill:url(#linearGradient46386);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 362.1489,169.58703 C 362.4574,174.46944 371.82691,179.35184 377.55372,184.23425 C 373.26295,178.67127 370.28614,169.16642 364.67428,167.56673 L 362.1489,169.58703 z "
+       id="path46380"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56373"
+       width="24.642857"
+       height="24.642857"
+       x="187.7767"
+       y="84.759689"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_play_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56375"
+       transform="translate(28.490947,-673.6739)"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_play_1.png">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path56377"
+         d="M 163.21429,762.8979 L 163.21429,778.96933 C 169.18918,776.60095 175.46615,774.07658 180,770.75504 C 174.66202,767.10698 169.02779,764.64388 163.21429,762.8979 z "
+         style="fill:url(#linearGradient56421);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56423);stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56379"
+         d="M 171.79136,769.68303 C 168.72709,769.68303 165.85828,770.1268 163.49554,770.88459 L 163.49554,777.98214 C 169.16989,775.88352 175.12269,773.64741 179.45825,770.71693 C 177.21614,770.06809 174.60773,769.68302 171.79136,769.68303 z "
+         style="fill:url(#linearGradient56425);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56427);stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <rect
+       y="84.759689"
+       x="160.50253"
+       height="24.642857"
+       width="24.642857"
+       id="rect56381"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_stop_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56383"
+       transform="translate(28.490947,-673.6739)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_stop_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <rect
+         y="762.005"
+         x="135.89285"
+         height="17.5"
+         width="17.142857"
+         id="rect56385"
+         style="opacity:1;fill:url(#linearGradient56429);fill-opacity:1;stroke:url(#linearGradient56431);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         id="path56387"
+         d="M 150.86476,765.59848 C 142.86027,765.59848 136.3852,770.59601 136.3852,776.76416 C 136.3852,777.31124 136.43575,777.85021 136.53447,778.37632 L 152.59634,778.37632 L 152.59634,765.68805 C 152.03048,765.63628 151.44859,765.59848 150.86476,765.59848 z "
+         style="opacity:1;fill:url(#linearGradient56433);fill-opacity:1;stroke:url(#linearGradient56435);stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       y="84.402573"
+       x="214.91953"
+       height="24.642857"
+       width="24.642857"
+       id="rect56389"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_next_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56391"
+       transform="translate(-1.8136333,-673.16882)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_next_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         id="path56393"
+         d="M 225.71875,761.8125 L 225.71875,764.9375 C 223.92957,763.86297 222.12721,762.94975 220.28125,762.1875 L 220.28125,778.25 C 222.09355,777.2623 223.93792,776.24471 225.71875,775.15625 L 225.71875,777.90625 C 230.06444,775.53788 234.63991,773.00904 237.9375,769.6875 C 234.05505,766.03946 229.94705,763.55848 225.71875,761.8125 z "
+         style="fill:url(#linearGradient56437);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56439);stroke-width:0.51170009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56395"
+         d="M 232.98708,769.15625 C 228.10674,769.15625 223.72025,770.07248 220.63839,771.51353 L 220.63839,776.7781 C 222.36821,775.95027 224.12864,775.09738 225.82843,774.1851 L 225.82843,776.48998 C 229.97633,774.50496 234.34356,772.38544 237.49107,769.60151 C 237.40259,769.5285 237.31136,769.46388 237.22262,769.39198 C 235.86564,769.2389 234.45375,769.15625 232.98708,769.15625 z "
+         style="fill:url(#linearGradient56441);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56397"
+       width="24.642857"
+       height="24.642857"
+       x="243.20383"
+       y="84.402573"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_last_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56399"
+       transform="translate(28.490947,-673.6739)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_last_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         id="path56401"
+         d="M 228,761.8125 L 228,765.8125 C 226.29186,764.39766 224.55769,763.24818 222.78125,762.3125 L 222.78125,764.90625 C 221.43999,763.89862 220.06869,763.03999 218.6875,762.3125 L 218.6875,778.53125 C 220.05005,777.58403 221.4374,776.59951 222.78125,775.5625 L 222.78125,778.53125 C 224.53493,777.31213 226.31217,776.04329 228,774.65625 L 228,778.03125 C 231.43626,775.64245 235.04875,773.1002 237.65625,769.75 C 234.58628,766.07047 231.34344,763.57354 228,761.8125 z "
+         style="fill:url(#linearGradient56443);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56445);stroke-width:0.45697752;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56403"
+         d="M 231.25598,768.78125 C 226.36683,768.78125 221.96919,770.19175 218.86607,772.43189 L 218.86607,777.28125 C 220.19014,776.45547 221.53831,775.59717 222.8442,774.69311 L 222.8442,777.28125 C 224.54835,776.21843 226.2754,775.11226 227.91556,773.90304 L 227.91556,776.84535 C 231.25478,774.76281 234.76525,772.54649 237.29911,769.6258 C 237.27089,769.59547 237.23625,769.57422 237.208,769.54407 C 235.3508,769.07203 233.3556,768.78125 231.25598,768.78125 z "
+         style="fill:url(#linearGradient56447);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56405"
+       width="24.642857"
+       height="24.642857"
+       x="-157.74002"
+       y="84.402573"
+       transform="scale(-1,1)"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_previous_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       transform="matrix(-1,0,0,1,374.47318,-673.16882)"
+       id="g56407"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_previous_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         style="fill:url(#linearGradient56449);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56451);stroke-width:0.51170009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 225.71875,761.8125 L 225.71875,764.9375 C 223.92957,763.86297 222.12721,762.94975 220.28125,762.1875 L 220.28125,778.25 C 222.09355,777.2623 223.93792,776.24471 225.71875,775.15625 L 225.71875,777.90625 C 230.06444,775.53788 234.63991,773.00904 237.9375,769.6875 C 234.05505,766.03946 229.94705,763.55848 225.71875,761.8125 z "
+         id="path56409" />
+      <path
+         style="fill:url(#linearGradient56453);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 232.98708,769.15625 C 228.10674,769.15625 223.72025,770.07248 220.63839,771.51353 L 220.63839,776.7781 C 222.36821,775.95027 224.12864,775.09738 225.82843,774.1851 L 225.82843,776.48998 C 229.97633,774.50496 234.34356,772.38544 237.49107,769.60151 C 237.40259,769.5285 237.31136,769.46388 237.22262,769.39198 C 235.86564,769.2389 234.45375,769.15625 232.98708,769.15625 z "
+         id="path56411" />
+    </g>
+    <rect
+       y="84.402573"
+       x="-129.45572"
+       height="24.642857"
+       width="24.642857"
+       id="rect56413"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       transform="scale(-1,1)"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_first_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56415"
+       transform="matrix(-1,0,0,1,344.1686,-673.6739)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_first_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         style="fill:url(#linearGradient56455);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56457);stroke-width:0.45697752;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 228,761.8125 L 228,765.8125 C 226.29186,764.39766 224.55769,763.24818 222.78125,762.3125 L 222.78125,764.90625 C 221.43999,763.89862 220.06869,763.03999 218.6875,762.3125 L 218.6875,778.53125 C 220.05005,777.58403 221.4374,776.59951 222.78125,775.5625 L 222.78125,778.53125 C 224.53493,777.31213 226.31217,776.04329 228,774.65625 L 228,778.03125 C 231.43626,775.64245 235.04875,773.1002 237.65625,769.75 C 234.58628,766.07047 231.34344,763.57354 228,761.8125 z "
+         id="path56417" />
+      <path
+         style="fill:url(#linearGradient56459);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 231.25598,768.78125 C 226.36683,768.78125 221.96919,770.19175 218.86607,772.43189 L 218.86607,777.28125 C 220.19014,776.45547 221.53831,775.59717 222.8442,774.69311 L 222.8442,777.28125 C 224.54835,776.21843 226.2754,775.11226 227.91556,773.90304 L 227.91556,776.84535 C 231.25478,774.76281 234.76525,772.54649 237.29911,769.6258 C 237.27089,769.59547 237.23625,769.57422 237.208,769.54407 C 235.3508,769.07203 233.3556,768.78125 231.25598,768.78125 z "
+         id="path56419" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56623"
+       width="24.642857"
+       height="24.642857"
+       x="386.69745"
+       y="85.396027"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_play_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <path
+       style="fill:url(#linearGradient56667);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56669);stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 390.62605,89.860362 L 390.62605,105.93179 C 396.60094,103.56341 402.87791,101.03904 407.41176,97.717502 C 402.07378,94.069442 396.43955,91.606342 390.62605,89.860362 z "
+       id="path56625"
+       sodipodi:nodetypes="cccc"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_play_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <rect
+       y="85.396027"
+       x="331.13913"
+       height="24.642857"
+       width="24.642857"
+       id="rect56627"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_stop_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <g
+       id="g56629"
+       transform="translate(199.12749,-673.03754)"
+       style="fill:url(#linearGradient56671)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_stop_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321">
+      <rect
+         y="762.005"
+         x="135.89285"
+         height="17.5"
+         width="17.142857"
+         id="rect56631"
+         style="opacity:1;fill:url(#linearGradient56673);fill-opacity:1;stroke:url(#linearGradient56675);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         id="path56633"
+         d="M 150.86476,765.59848 C 142.86027,765.59848 136.3852,770.59601 136.3852,776.76416 C 136.3852,777.31124 136.43575,777.85021 136.53447,778.37632 L 152.59634,778.37632 L 152.59634,765.68805 C 152.03048,765.63628 151.44859,765.59848 150.86476,765.59848 z "
+         style="opacity:1;fill:url(#linearGradient56677);fill-opacity:1;stroke:url(#linearGradient56679);stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56635"
+       width="24.642857"
+       height="24.642857"
+       x="-328.37662"
+       y="85.03891"
+       transform="scale(-1,1)"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_previous_2.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       transform="matrix(-1,0,0,1,545.10972,-672.53246)"
+       id="g56637"
+       style="fill:url(#linearGradient56681)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_previous_2.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         style="fill:url(#linearGradient56683);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56685);stroke-width:0.51170009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 225.71875,761.8125 L 225.71875,764.9375 C 223.92957,763.86297 222.12721,762.94975 220.28125,762.1875 L 220.28125,778.25 C 222.09355,777.2623 223.93792,776.24471 225.71875,775.15625 L 225.71875,777.90625 C 230.06444,775.53788 234.63991,773.00904 237.9375,769.6875 C 234.05505,766.03946 229.94705,763.55848 225.71875,761.8125 z "
+         id="path56639" />
+      <path
+         style="fill:url(#linearGradient56687);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 232.98708,769.15625 C 228.10674,769.15625 223.72025,770.07248 220.63839,771.51353 L 220.63839,776.7781 C 222.36821,775.95027 224.12864,775.09738 225.82843,774.1851 L 225.82843,776.48998 C 229.97633,774.50496 234.34356,772.38544 237.49107,769.60151 C 237.40259,769.5285 237.31136,769.46388 237.22262,769.39198 C 235.86564,769.2389 234.45375,769.15625 232.98708,769.15625 z "
+         id="path56641" />
+    </g>
+    <rect
+       y="85.03891"
+       x="-300.09232"
+       height="24.642857"
+       width="24.642857"
+       id="rect56643"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       transform="scale(-1,1)"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_first_2.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56645"
+       transform="matrix(-1,0,0,1,514.80514,-673.03754)"
+       style="fill:url(#linearGradient56689)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_first_2.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         style="fill:url(#linearGradient56691);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56693);stroke-width:0.45697752;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 228,761.8125 L 228,765.8125 C 226.29186,764.39766 224.55769,763.24818 222.78125,762.3125 L 222.78125,764.90625 C 221.43999,763.89862 220.06869,763.03999 218.6875,762.3125 L 218.6875,778.53125 C 220.05005,777.58403 221.4374,776.59951 222.78125,775.5625 L 222.78125,778.53125 C 224.53493,777.31213 226.31217,776.04329 228,774.65625 L 228,778.03125 C 231.43626,775.64245 235.04875,773.1002 237.65625,769.75 C 234.58628,766.07047 231.34344,763.57354 228,761.8125 z "
+         id="path56647" />
+      <path
+         style="fill:url(#linearGradient56695);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 231.25598,768.78125 C 226.36683,768.78125 221.96919,770.19175 218.86607,772.43189 L 218.86607,777.28125 C 220.19014,776.45547 221.53831,775.59717 222.8442,774.69311 L 222.8442,777.28125 C 224.54835,776.21843 226.2754,775.11226 227.91556,773.90304 L 227.91556,776.84535 C 231.25478,774.76281 234.76525,772.54649 237.29911,769.6258 C 237.27089,769.59547 237.23625,769.57422 237.208,769.54407 C 235.3508,769.07203 233.3556,768.78125 231.25598,768.78125 z "
+         id="path56649" />
+    </g>
+    <rect
+       y="85.03891"
+       x="414.34537"
+       height="24.642857"
+       width="24.642857"
+       id="rect56651"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_next_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <g
+       style="fill:url(#linearGradient56697)"
+       id="g56653"
+       transform="translate(197.61224,-672.53246)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_next_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321">
+      <path
+         id="path56655"
+         d="M 225.71875,761.8125 L 225.71875,764.9375 C 223.92957,763.86297 222.12721,762.94975 220.28125,762.1875 L 220.28125,778.25 C 222.09355,777.2623 223.93792,776.24471 225.71875,775.15625 L 225.71875,777.90625 C 230.06444,775.53788 234.63991,773.00904 237.9375,769.6875 C 234.05505,766.03946 229.94705,763.55848 225.71875,761.8125 z "
+         style="fill:url(#linearGradient56699);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56701);stroke-width:0.51170009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56657"
+         d="M 232.98708,769.15625 C 228.10674,769.15625 223.72025,770.07248 220.63839,771.51353 L 220.63839,776.7781 C 222.36821,775.95027 224.12864,775.09738 225.82843,774.1851 L 225.82843,776.48998 C 229.97633,774.50496 234.34356,772.38544 237.49107,769.60151 C 237.40259,769.5285 237.31136,769.46388 237.22262,769.39198 C 235.86564,769.2389 234.45375,769.15625 232.98708,769.15625 z "
+         style="fill:url(#linearGradient56703);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56659"
+       width="24.642857"
+       height="24.642857"
+       x="442.62967"
+       y="85.03891"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_last_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <g
+       style="fill:url(#linearGradient56705)"
+       transform="translate(227.91682,-673.03754)"
+       id="g56661"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_last_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321">
+      <path
+         id="path56663"
+         d="M 228,761.8125 L 228,765.8125 C 226.29186,764.39766 224.55769,763.24818 222.78125,762.3125 L 222.78125,764.90625 C 221.43999,763.89862 220.06869,763.03999 218.6875,762.3125 L 218.6875,778.53125 C 220.05005,777.58403 221.4374,776.59951 222.78125,775.5625 L 222.78125,778.53125 C 224.53493,777.31213 226.31217,776.04329 228,774.65625 L 228,778.03125 C 231.43626,775.64245 235.04875,773.1002 237.65625,769.75 C 234.58628,766.07047 231.34344,763.57354 228,761.8125 z "
+         style="fill:url(#linearGradient56707);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56709);stroke-width:0.45697752;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56665"
+         d="M 231.25598,768.78125 C 226.36683,768.78125 221.96919,770.19175 218.86607,772.43189 L 218.86607,777.28125 C 220.19014,776.45547 221.53831,775.59717 222.8442,774.69311 L 222.8442,777.28125 C 224.54835,776.21843 226.2754,775.11226 227.91556,773.90304 L 227.91556,776.84535 C 231.25478,774.76281 234.76525,772.54649 237.29911,769.6258 C 237.27089,769.59547 237.23625,769.57422 237.208,769.54407 C 235.3508,769.07203 233.3556,768.78125 231.25598,768.78125 z "
+         style="fill:url(#linearGradient56711);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       transform="scale(-1,1)"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56713"
+       width="24.642857"
+       height="24.642857"
+       x="-383.42987"
+       y="85.03891"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_pause.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <rect
+       style="fill:url(#linearGradient3722);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3738);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect3714"
+       width="6.060915"
+       height="17.67767"
+       x="363.35898"
+       y="88.82135"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_pause.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <rect
+       y="88.82135"
+       x="372.95541"
+       height="17.67767"
+       width="6.060915"
+       id="rect6852"
+       style="fill:url(#linearGradient6854);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6856);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_pause.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="200.76157"
+       y="199.48087"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect6871" />
+    <g
+       id="g6873"
+       transform="translate(-111.78574,-276.14284)">
+      <rect
+         id="rect6875"
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50002563;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.6880851,-0.72563,0.7156989,0.698409,0,0)"
+         y="579.13556"
+         x="-139.53285"
+         height="8.1236973"
+         width="9.9346428" />
+      <path
+         id="path6877"
+         style="fill:url(#linearGradient6883);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 322.15549,498.51581 L 331.24526,507.386 L 345.19505,492.67507 L 345.18921,492.66938 C 348.9382,488.60428 349.98666,483.41283 347.51339,480.99931 C 345.04012,478.58579 339.96998,479.8527 336.11111,483.81057 L 336.10527,483.80488 L 322.15549,498.51581 z " />
+      <path
+         id="path6879"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38604188;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 345.24279,485.51892 C 345.24279,486.79461 344.29483,487.82876 343.12545,487.82876 C 341.95607,487.82876 341.0081,486.79461 341.0081,485.51892 C 341.0081,484.24324 341.95607,483.20909 343.12545,483.20909 C 344.29483,483.20909 345.24279,484.24324 345.24279,485.51892 z " />
+      <path
+         id="path6881"
+         d="M 322.22677,504.05281 L 326.70179,508.17154"
+         style="fill:#b3b3b3;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.6, 1.6;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="248.9758"
+       y="199.4809"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect6885" />
+    <g
+       id="g6887"
+       transform="translate(-63.202443,-323.09743)">
+      <rect
+         id="rect6889"
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50002563;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.6880851,-0.72563,0.7156989,0.698409,0,0)"
+         y="611.17981"
+         x="-173.39938"
+         height="8.1236973"
+         width="9.9346428" />
+      <path
+         id="path6891"
+         style="fill:url(#linearGradient6899);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 321.78646,545.47037 L 330.87623,554.34056 L 344.82602,539.62963 L 344.82018,539.62394 C 348.56917,535.55884 349.61763,530.36739 347.14436,527.95387 C 344.67109,525.54035 339.60095,526.80726 335.74208,530.76513 L 335.73624,530.75944 L 321.78646,545.47037 z " />
+      <path
+         id="path6893"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38604188;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 344.87376,532.47348 C 344.87376,533.74917 343.9258,534.78332 342.75642,534.78332 C 341.58704,534.78332 340.63907,533.74917 340.63907,532.47348 C 340.63907,531.1978 341.58704,530.16365 342.75642,530.16365 C 343.9258,530.16365 344.87376,531.1978 344.87376,532.47348 z " />
+      <path
+         id="path6895"
+         d="M 321.85774,551.00737 L 326.33276,555.1261"
+         style="fill:#b3b3b3;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.6, 1.6;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccc"
+         id="path6897"
+         d="M 319.20536,530.05615 C 328.00186,533.54983 339.28994,534.71803 337.21846,548.35518 L 330.64224,550.92847 L 340.3636,561.22168 L 349.22719,545.21003 L 343.79467,546.35372 C 341.83779,536.76149 334.86363,530.51411 319.20536,530.05615 z "
+         style="opacity:0.82480014;fill:url(#linearGradient6901);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       id="g29580"
+       transform="translate(-110.00002,83.999995)">
+      <path
+         transform="translate(158.5,4)"
+         d="M 503.5 755.86218 A 62 8.5 0 1 1  379.5,755.86218 A 62 8.5 0 1 1  503.5 755.86218 z"
+         sodipodi:ry="8.5"
+         sodipodi:rx="62"
+         sodipodi:cy="755.86218"
+         sodipodi:cx="441.5"
+         id="path29568"
+         style="opacity:1;fill:url(#radialGradient29636);fill-opacity:1;stroke:#ff6600;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path20696"
+         d="M 594.5,614.86218 C 552.40848,617.69466 561.64571,666.64838 554.5,676.36218 L 539.5,707.86218 L 580.5,759.36218 C 584.76589,759.73453 585.4146,760.70975 597,759.86218 C 607.4517,760.21727 615.73083,754.05466 625,750.86218 C 645.93916,739.72991 650.56211,719.35832 651.5,710.86218 C 646.92624,680.73098 638.84915,671.11644 635,656.86218 C 628.41474,635.94744 621.90069,614.96149 594.5,614.86218 z "
+         style="opacity:1;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="csssc"
+         id="path21679"
+         d="M 636.98486,720.02026 C 636.98486,744.1619 618.95964,758.34702 596.75,758.34702 C 574.54036,758.34702 556.51515,738.7538 556.51515,714.61216 C 556.51515,690.47052 574.54036,670.87731 596.75,670.87731 C 618.95964,670.87731 636.98486,695.87862 636.98486,720.02026 z "
+         style="opacity:1;fill:url(#linearGradient29638);fill-opacity:1;stroke:#e6e6e6;stroke-width:1.63029492;stroke-linecap:round;stroke-miterlimit:4" />
+      <g
+         id="g11715">
+        <path
+           style="fill:url(#linearGradient29640);fill-opacity:1;fill-rule:evenodd;stroke:#d4aa00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 621.78571,738.07647 C 601.4768,738.83145 597.50087,758.48065 602.14286,761.6479 C 603.92524,764.7448 612.14769,764.08596 621.42857,764.1479 C 632.20032,764.09863 642.79369,764.76381 643.21428,760.21933 C 644.26956,741.64371 627.94331,737.79123 621.78571,738.07647 z "
+           id="path9717"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           transform="matrix(0.9300312,0,0,1.1125113,46.341387,-82.861238)"
+           style="opacity:1;fill:url(#linearGradient29642);fill-opacity:1;stroke:#d4aa00;stroke-width:0;stroke-miterlimit:4"
+           d="M 637.14287,750.75507 C 637.14287,756.76792 628.98287,759.72178 618.92859,759.72178 C 608.8743,759.72178 600.7143,756.76792 600.7143,750.75507 C 600.7143,744.74221 608.8743,739.86221 618.92859,739.86221 C 628.98287,739.86221 637.14287,744.74221 637.14287,750.75507 z "
+           id="path10700"
+           sodipodi:nodetypes="csssc" />
+      </g>
+      <g
+         transform="translate(-50.5,0)"
+         id="g20684">
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path20686"
+           d="M 621.78571,738.07647 C 601.4768,738.83145 597.50087,758.48065 602.14286,761.6479 C 603.92524,764.7448 612.14769,764.08596 621.42857,764.1479 C 632.20032,764.09863 642.79369,764.76381 643.21428,760.21933 C 644.26956,741.64371 627.94331,737.79123 621.78571,738.07647 z "
+           style="fill:url(#linearGradient29644);fill-opacity:1;fill-rule:evenodd;stroke:#d4aa00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="csssc"
+           id="path20688"
+           d="M 637.14287,750.75507 C 637.14287,756.76792 628.98287,759.72178 618.92859,759.72178 C 608.8743,759.72178 600.7143,756.76792 600.7143,750.75507 C 600.7143,744.74221 608.8743,739.86221 618.92859,739.86221 C 628.98287,739.86221 637.14287,744.74221 637.14287,750.75507 z "
+           style="opacity:1;fill:url(#linearGradient29646);fill-opacity:1;stroke:#d4aa00;stroke-width:0;stroke-miterlimit:4"
+           transform="matrix(0.9300312,0,0,1.1125113,46.341387,-82.861238)" />
+      </g>
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path11731"
+         d="M 587.5,719.1479 C 594.71083,712.39959 632.2891,710.86762 631.07143,703.07647 C 630.43514,700.13312 598.26051,705.27759 593.57143,697.00504 C 586.65564,692.01313 591.68263,668.84065 587.5,668.79076 C 582.61905,668.31457 572.7381,689.37796 567.5,693.07647 C 562.15456,695.41451 542.57403,691.61453 526.78571,703.07647 C 519.40952,709.86219 528.1022,727.36219 533.92857,736.29076 C 540.40541,746.90851 555.37198,758.40393 562.85714,754.50504 C 577.09461,747.71461 577.19406,729.7105 [...]
+         style="opacity:1;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccc"
+         id="path12719"
+         d="M 587.85714,693.79076 C 569.43249,693.87082 549.3787,697.64018 547.85714,703.07647 C 546.0789,712.01712 552.26025,716.18721 557.85714,722.36218 C 566.19665,734.93551 564.0273,742.73593 566.78571,746.29076 C 570.94368,749.66757 579.61904,725.67171 586.28571,718.29076 C 593.21644,712.1663 628.8104,710.01122 626.78571,705.21933 C 625.55648,701.93191 594.22137,709.76003 587.85714,693.79076 z "
+         style="opacity:1;fill:url(#linearGradient29648);fill-opacity:1;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <g
+         id="g13736"
+         transform="matrix(1.0602134,2.043068e-2,-1.8607258e-2,0.9655901,140.14006,26.920654)">
+        <rect
+           style="opacity:1;fill:#ffffff;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect12733"
+           width="23.300003"
+           height="4.743"
+           x="797.07562"
+           y="105.04495"
+           transform="matrix(0.6199037,0.7846779,-0.7846779,0.6199037,0,0)"
+           rx="2"
+           ry="2" />
+        <g
+           id="g13718"
+           transform="matrix(0.1525646,0.2012171,-0.1780037,0.1640598,473.69043,481.42722)"
+           style="fill:#b3b3b3">
+          <path
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z"
+             sodipodi:ry="3.7123106"
+             sodipodi:rx="4.2426405"
+             sodipodi:cy="738.58356"
+             sodipodi:cx="458.91229"
+             id="path13704"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             transform="translate(12.374369,0)"
+             sodipodi:type="arc"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path13706"
+             sodipodi:cx="458.91229"
+             sodipodi:cy="738.58356"
+             sodipodi:rx="4.2426405"
+             sodipodi:ry="3.7123106"
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z" />
+          <path
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z"
+             sodipodi:ry="3.7123106"
+             sodipodi:rx="4.2426405"
+             sodipodi:cy="738.58356"
+             sodipodi:cx="458.91229"
+             id="path13708"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc"
+             transform="translate(25.102291,-0.3535534)" />
+          <path
+             transform="translate(36.769553,-0.3535534)"
+             sodipodi:type="arc"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path13712"
+             sodipodi:cx="458.91229"
+             sodipodi:cy="738.58356"
+             sodipodi:rx="4.2426405"
+             sodipodi:ry="3.7123106"
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z" />
+          <path
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z"
+             sodipodi:ry="3.7123106"
+             sodipodi:rx="4.2426405"
+             sodipodi:cy="738.58356"
+             sodipodi:cx="458.91229"
+             id="path13714"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc"
+             transform="translate(49.143922,-0.3535534)" />
+          <path
+             transform="translate(61.871844,-0.7071068)"
+             sodipodi:type="arc"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path13716"
+             sodipodi:cx="458.91229"
+             sodipodi:cy="738.58356"
+             sodipodi:rx="4.2426405"
+             sodipodi:ry="3.7123106"
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z" />
+        </g>
+      </g>
+      <path
+         id="path11735"
+         d="M 585.45075,671.63811 C 580.80949,671.17901 571.41375,691.48149 566.43287,695.04715 C 561.34992,697.30119 542.72667,693.63772 527.71366,704.68793 C 520.69968,711.22989 528.97823,728.10558 534.51849,736.71343 C 536.96434,740.77861 540.69955,744.96297 544.7406,748.3125 C 547.43682,721.1535 555.12632,714.3442 560.99494,705.38087 C 569.15679,693.56381 577.98981,685.60747 587.26339,678.14564 C 587.15269,674.4087 586.83461,671.65484 585.45075,671.63811 z "
+         style="opacity:0.68999999;fill:url(#linearGradient29650);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <g
+         transform="translate(0,-0.5)"
+         id="g16761">
+        <g
+           id="g14799"
+           transform="translate(160.51324,6.0104076)">
+          <path
+             style="opacity:1;fill:url(#linearGradient29652);fill-opacity:1;fill-rule:evenodd;stroke:#483e37;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="M 481.18617,646.12934 L 487.19657,652.84685 L 429.92092,695.62681 L 424.26407,688.9093 L 481.18617,646.12934 z "
+             id="path13746" />
+          <g
+             transform="matrix(0.999936,-1.1314943e-2,1.1314943e-2,0.999936,-7.5687352,5.1956633)"
+             style="opacity:0.79999994"
+             id="g14773">
+            <path
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+               d="M 427.92536,685.74952 L 434.09846,692.73328"
+               id="path13766" />
+            <path
+               id="path14737"
+               d="M 434.42536,681.24952 L 440.59846,688.23328"
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+               d="M 441.92536,675.74952 L 448.09846,682.73328"
+               id="path14739" />
+            <path
+               id="path14763"
+               d="M 450.67536,668.74952 L 456.84846,675.73328"
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+               d="M 465.92536,658.24952 L 472.09846,665.23328"
+               id="path14765" />
+            <path
+               id="path14767"
+               d="M 469.67536,655.74952 L 475.84846,662.73328"
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+               d="M 473.17536,652.99952 L 479.34846,659.98328"
+               id="path14769" />
+            <path
+               id="path14771"
+               d="M 476.67536,650.24952 L 482.84846,657.23328"
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+        </g>
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#502d16;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 583.00954,694.2126 L 591.14127,703.75854"
+           id="path14813" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 642.40651,652.4933 L 585.13086,695.98036"
+           id="path15784" />
+        <path
+           id="path16755"
+           d="M 643.82072,653.90751 L 586.54507,697.39457"
+           style="fill:none;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 645.58849,655.32172 L 588.31284,698.80878"
+           id="path16757" />
+        <path
+           id="path16759"
+           d="M 646.64915,657.08949 L 589.3735,700.57655"
+           style="fill:none;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      </g>
+      <g
+         id="g20680">
+        <path
+           style="fill:#d4ab6f;fill-opacity:1;fill-rule:evenodd;stroke:#deaa87;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 640.75,652.61218 L 647,659.61218 C 650.61861,657.21802 654.54024,656.73289 658.5,657.11218 C 668.26157,644.34434 672.64366,645.3023 677.75,644.61218 C 678.94606,641.73657 674.14673,641.17174 671.25,639.86218 C 668.59028,639.35871 646.03414,647.30344 643.25,648.86218 C 641.2211,650.36218 640.72443,651.36218 640.75,652.61218 z "
+           id="path16789"
+           sodipodi:nodetypes="ccccccc" />
+        <path
+           style="opacity:0.56999978;fill:url(#linearGradient29654);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 670.53125,639.875 C 665.85142,640.33869 645.86013,647.41368 643.25,648.875 C 641.2211,650.375 640.72443,651.375 640.75,652.625 L 644.03125,656.3125 C 644.56084,653.98048 645.91603,651.76579 648,650.375 C 666.38569,640.51108 671.1161,642.39764 677.65625,642.875 C 676.69517,641.42388 673.43462,640.86263 671.25,639.875 C 671.08377,639.84353 670.84324,639.84409 670.53125,639.875 z "
+           id="path17760" />
+      </g>
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path20698"
+         d="M 557,665.36218 C 527.34482,673.09896 530.01507,708.03337 534,708.36218 C 539.29883,707.83157 551.63196,693.22095 559.5,684.36218 C 567.28411,674.58187 569.13882,667.17332 557,665.36218 z "
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path20700"
+         d="M 557.5,680.36218 C 551.729,689.36218 546.15502,698.36218 536.5,707.36218"
+         style="opacity:0.65959999;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient29656);stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path21698"
+         d="M 616,668.86218 C 610.37322,671.44501 636.33333,685.19551 646.5,705.36218 C 651.5796,702.96354 656.16927,700.19747 656,693.86218 C 658.40083,684.11256 636.49233,664.46841 616,668.86218 z "
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path21700"
+         d="M 625.5,670.86218 C 638.79868,674.06424 652.41351,683.70961 654,693.36218"
+         style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient29658);stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="csssc"
+         id="path22680"
+         d="M 627.49999,653.11218 C 627.49999,673.67418 613.05199,690.36218 595.24999,690.36218 C 577.448,690.36218 563,673.67418 563,653.11218 C 563,632.55018 577.448,615.86218 595.24999,615.86218 C 613.05199,615.86218 627,629.55018 627.49999,653.11218 z "
+         style="opacity:1;fill:url(#linearGradient29660);fill-opacity:1;stroke:#ff0000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:1;fill:url(#linearGradient29662);fill-opacity:1;stroke:#ececec;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path24647"
+         sodipodi:cx="426.25"
+         sodipodi:cy="645.11218"
+         sodipodi:rx="14.25"
+         sodipodi:ry="14.25"
+         d="M 440.5 645.11218 A 14.25 14.25 0 1 1  412,645.11218 A 14.25 14.25 0 1 1  440.5 645.11218 z"
+         transform="matrix(0.8989058,0,0,0.863818,225.09145,95.352673)" />
+      <path
+         transform="matrix(0.9488566,0,0,0.9664004,179.5499,26.675505)"
+         d="M 440.5 645.11218 A 14.25 14.25 0 1 1  412,645.11218 A 14.25 14.25 0 1 1  440.5 645.11218 z"
+         sodipodi:ry="14.25"
+         sodipodi:rx="14.25"
+         sodipodi:cy="645.11218"
+         sodipodi:cx="426.25"
+         id="path23668"
+         style="opacity:1;fill:url(#linearGradient29664);fill-opacity:1;stroke:url(#linearGradient29666);stroke-width:0.62657404;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         id="path25630"
+         d="M 584,636.34375 C 579.45462,636.34375 575.42051,638.61872 572.96875,642.125 C 574.27536,641.94885 575.62359,641.875 577,641.875 C 586.22185,641.875 594.13713,645.98706 597.40625,651.84375 C 597.47588,651.27787 597.53125,650.71 597.53125,650.125 C 597.53125,642.52329 591.46373,636.34378 584,636.34375 z "
+         style="opacity:1;fill:url(#linearGradient29668);fill-opacity:1;stroke:url(#linearGradient29670);stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         id="path26629"
+         d="M 608.25,640.3125 C 601.17921,640.3125 595.43753,645.83021 595.4375,652.625 C 595.4375,655.41646 596.43095,657.96552 598.0625,660.03125 C 597.71257,658.95525 597.5,657.81393 597.5,656.625 C 597.49999,650.415 602.652,645.375 609,645.375 C 615.21911,645.375 620.2654,650.21418 620.46875,656.25 C 620.83739,655.10209 621.0625,653.88871 621.0625,652.625 C 621.0625,645.83021 615.32078,640.31248 608.25,640.3125 z "
+         style="fill:url(#linearGradient29672);fill-opacity:1;stroke:#ececec;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         transform="translate(159,5)"
+         d="M 450.5 645.86218 A 5.75 5.5 0 1 1  439,645.86218 A 5.75 5.5 0 1 1  450.5 645.86218 z"
+         sodipodi:ry="5.5"
+         sodipodi:rx="5.75"
+         sodipodi:cy="645.86218"
+         sodipodi:cx="444.75"
+         id="path27607"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:nodetypes="csssc"
+         id="path27612"
+         d="M 595.38391,651.96296 C 595.38391,653.57375 594.00787,655.49849 590.96449,655.67527 C 587.74974,655.862 585.01473,653.39698 585.01473,650.37197 C 585.01473,647.34697 587.28157,644.41243 590.43416,645.06867 C 593.8311,645.77578 594.85358,649.29151 595.38391,651.96296 z "
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path27615"
+         d="M 584,660.86218 L 598.5,674.86218 L 611.5,660.86218 C 602.9585,654.61053 593.87379,653.79099 584,660.86218 z "
+         style="fill:#f6c43e;fill-opacity:1;fill-rule:evenodd;stroke:#d4aa00;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccccccc"
+         id="path28586"
+         d="M 598.52978,655.87446 C 594.54135,655.78487 589.71993,657.83674 585.41421,660.92844 L 598.06041,674.87499 L 610.08579,660.2467 C 606.36104,657.51331 602.51821,655.96403 598.52978,655.87446 z M 593.40589,658.27918 C 596.07686,658.20257 599.05726,659.15366 602.20917,663.11595 C 603.32559,665.69232 601.18947,670.65906 599.04159,673.23541 L 587.2176,659.09897 C 588.59482,658.74535 591.80331,658.32516 593.40589,658.27918 z "
+         style="opacity:0.76000001;fill:url(#linearGradient29674);fill-opacity:1;fill-rule:evenodd;stroke:#d4aa00;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <rect
+       id="rect29676"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.0701"
+       x="104.5485"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g29678"
+       transform="translate(-207.12462,-513.41685)">
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29680"
+         style="fill:url(#radialGradient29690);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient29692);stroke-width:2.39153099;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+         d="M 344.35143,743.67873 C 340.21628,748.18954 333.20733,748.49407 328.69652,744.35893 C 324.18571,740.22378 323.88118,733.21485 328.01634,728.70404 C 332.15149,724.19323 339.16043,723.88869 343.67125,728.02384 C 348.18206,732.15898 348.48659,739.16792 344.35143,743.67873 L 344.35143,743.67873 z " />
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29682"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.14639039;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 336.759,736.16388 L 335.60872,736.16388 L 336.18386,726.55584 L 336.759,736.16388 z " />
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29684"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.12551381;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 336.14185,736.77701 L 336.14185,735.60586 L 343.079,736.19144 L 336.14185,736.77701 z " />
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29686"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.354114;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 337.21677,736.19141 C 337.21711,736.7621 336.75457,737.22489 336.18389,737.22489 C 335.61321,737.22489 335.15067,736.7621 335.151,736.19141 C 335.15067,735.62072 335.61321,735.15793 336.18389,735.15793 C 336.75457,735.15793 337.21711,735.62072 337.21677,736.19141 L 337.21677,736.19141 z " />
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29688"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.41645598;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+         d="M 348.42952,738.63306 C 350.08245,729.37578 338.87704,717.35529 327.49667,726.29396 C 321.29287,731.16672 331.29558,732.08792 331.29558,732.08792 L 316.92219,742.0067 L 315.52061,724.65302 C 315.52061,724.65302 319.65768,729.86092 323.61398,723.6396 C 329.2821,714.72642 351.70848,716.2692 348.42952,738.63306 z " />
+    </g>
+    <rect
+       id="rect29694"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.0701"
+       x="152.63174"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\redo.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g29696"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\redo.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-159.20122,-559.05369)">
+      <path
+         id="path29698"
+         style="fill:url(#radialGradient29708);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient29710);stroke-width:2.39152908;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+         d="M 337.29761,789.15137 C 333.16246,793.66217 326.15353,793.9667 321.64272,789.83155 C 317.13191,785.69641 316.82738,778.68747 320.96253,774.17667 C 325.09768,769.66586 332.10661,769.36133 336.61742,773.49648 C 341.12822,777.63163 341.43275,784.64056 337.29761,789.15137 L 337.29761,789.15137 z " />
+      <path
+         id="path29700"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.14639021;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 329.70508,781.63644 L 328.5548,781.63644 L 329.12994,772.02841 L 329.70508,781.63644 z " />
+      <path
+         id="path29702"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.12551373;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 329.08793,782.24954 L 329.08793,781.07839 L 336.02508,781.66397 L 329.08793,782.24954 z " />
+      <path
+         id="path29704"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.35411379;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 330.16285,781.66407 C 330.16318,782.23476 329.70064,782.69755 329.12996,782.69755 C 328.55928,782.69755 328.09674,782.23476 328.09708,781.66407 C 328.09674,781.09338 328.55928,780.63059 329.12996,780.63059 C 329.70064,780.63059 330.16318,781.09338 330.16285,781.66407 L 330.16285,781.66407 z " />
+      <path
+         id="path29706"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.41645515;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+         d="M 316.46797,784.21365 C 314.81504,774.95637 326.02044,762.93589 337.40081,771.87455 C 343.60461,776.7473 333.6019,777.6685 333.6019,777.6685 L 347.97528,787.58728 L 349.37686,770.23361 C 349.37686,770.23361 345.23979,775.44151 341.28349,769.22019 C 335.61537,760.30701 313.18901,761.84979 316.46797,784.21365 z " />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="347.33295"
+       y="434.19516"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect30754" />
+    <g
+       style="display:inline"
+       id="g30756"
+       transform="translate(-46.804983,-232.72995)">
+      <g
+         id="g30758"
+         transform="matrix(0.5668049,0,0,0.8603553,21.508226,389.93057)">
+        <path
+           id="path30760"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z " />
+        <path
+           id="path30762"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 683.05261,356.83776 L 683.05261,326.03045" />
+      </g>
+      <g
+         id="g30764">
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path30766"
+           d="M 420.31951,679.88826 L 409.67858,694.61724 L 426.69205,688.54529 L 420.31951,679.88826 z "
+           style="fill:url(#radialGradient30770);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.6801604px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path30768"
+           d="M 420.37963,679.64779 L 431.38127,669.66816 L 431.38127,683.91619 L 426.93252,688.42505 L 420.37963,679.64779 z "
+           style="fill:url(#linearGradient30772);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.6801604px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      </g>
+    </g>
+    <path
+       id="path4972"
+       style="opacity:1;fill:#929292;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96170586;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 392.78269,198.7959 L 392.78269,199.07759 L 392.78269,240.39663 L 392.78269,240.67831 L 393.04677,240.67831 L 434.38342,240.67831 L 434.6475,240.67831 L 434.6475,240.39663 L 434.6475,199.07759 L 434.6475,198.7959 L 434.38342,198.7959 L 393.04677,198.7959 L 392.78269,198.7959 z M 393.31084,199.34166 L 434.10174,199.34166 L 434.10174,240.13255 L 393.31084,240.13255 L 393.31084,199.34166 z "
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       style="fill:url(#linearGradient4986);fill-opacity:1;stroke:#000000;stroke-width:0.50995189;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;display:inline"
+       id="rect4974"
+       width="31.809853"
+       height="36.052494"
+       x="398.04214"
+       y="201.03586"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.18971634px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Arial"
+       x="431.22424"
+       y="195.04681"
+       id="text4976"
+       transform="scale(0.9261728,1.0797122)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"><tspan
+         sodipodi:role="line"
+         id="tspan4978"
+         x="431.22424"
+         y="195.04681"
+         style="font-weight:bold;font-family:Book Antiqua">AUTH</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 402.98695,216.58722 L 424.55371,216.58722"
+       id="path4980"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <path
+       id="path4982"
+       d="M 402.98695,220.82987 L 424.55371,220.82987"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 402.98695,225.42606 L 424.55371,225.42606"
+       id="path4984"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="104.37174"
+       y="481.91278"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect8482"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_previous.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       id="rect8484"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="481.5592"
+       x="152.80856"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_next.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g8486"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_previous.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         id="path8488"
+         d="M 266.92706,936.40242 L 266.58501,962.20032"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path8490"
+         d="M 260.2153,928.26495 L 266.93281,937.10378 L 273.65032,928.26495 L 260.2153,928.26495 z "
+         style="fill:url(#linearGradient8558);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8560);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path8492"
+         d="M 266.93281,946.64972 L 286.7318,933.56824 L 286.7318,958.67053 L 266.93281,946.64972 z "
+         style="fill:url(#linearGradient8562);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       style="display:inline"
+       id="g8494"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 331.03528,936.75597 L 331.37733,962.55387"
+         id="path8496" />
+      <path
+         style="fill:url(#linearGradient8564);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8566);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 324.31202,928.6185 L 331.02953,937.45733 L 337.74704,928.6185 L 324.31202,928.6185 z "
+         id="path8498" />
+      <path
+         style="fill:url(#linearGradient8568);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 331.02953,947.00327 L 311.23054,933.92179 L 311.23054,959.02408 L 331.02953,947.00327 z "
+         id="path8500"
+         sodipodi:nodetypes="cccc" />
+    </g>
+    <rect
+       inkscape:export-ydpi="51"
+       inkscape:export-xdpi="51"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_last.png"
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="297.76541"
+       y="480.49854"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect8502" />
+    <g
+       style="display:inline"
+       id="g8504"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_last.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path8506"
+         d="M 474.92576,945.2355 L 455.12677,932.15402 L 455.12677,957.25631 L 474.92576,945.2355 z "
+         style="fill:url(#linearGradient8570);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path8508"
+         d="M 479.17415,935.34176 L 479.5162,961.13966"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path8510"
+         d="M 472.45089,927.20429 L 479.1684,936.04312 L 485.88591,927.20429 L 472.45089,927.20429 z "
+         style="fill:url(#linearGradient8572);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8574);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <rect
+         y="936.75024"
+         x="474.46863"
+         height="17.324116"
+         width="4.9497476"
+         id="rect8512"
+         style="opacity:1;fill:url(#linearGradient8576);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none" />
+    </g>
+    <rect
+       id="rect8514"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="480.49854"
+       x="-289.95554"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_first.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="scale(-1,1)" />
+    <g
+       style="display:inline"
+       id="g8516"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_first.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         style="fill:url(#linearGradient8578);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 413.04647,945.2355 L 432.84546,932.15402 L 432.84546,957.25628 L 413.04647,945.2355 z "
+         id="path8518"
+         sodipodi:nodetypes="cccc" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 408.79808,935.34176 L 408.45603,961.13968"
+         id="path8520" />
+      <path
+         style="fill:url(#linearGradient8580);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8582);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 402.08632,927.20429 L 408.80383,936.04312 L 415.52134,927.20429 L 402.08632,927.20429 z "
+         id="path8522" />
+      <rect
+         transform="scale(-1,1)"
+         style="opacity:1;fill:url(#linearGradient8584);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         id="rect8524"
+         width="4.9497476"
+         height="17.324116"
+         x="-413.5036"
+         y="936.75024" />
+    </g>
+    <rect
+       transform="scale(-1,1)"
+       inkscape:export-ydpi="51"
+       inkscape:export-xdpi="51"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_add.png"
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="-387.88983"
+       y="480.49854"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect8526" />
+    <g
+       style="display:inline"
+       id="g8528"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_add.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         id="path8530"
+         d="M 516.29726,934.9882 L 516.63931,960.7861"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path8532"
+         d="M 509.574,926.85073 L 516.29151,935.68956 L 523.00902,926.85073 L 509.574,926.85073 z "
+         style="fill:url(#linearGradient8586);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8588);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path8534"
+         d="M 523.39422,945.83963 L 523.39422,950.6881 L 518.57394,950.6881 L 518.57394,955.36744 L 523.39422,955.36744 L 523.39422,960.18772 L 528.07356,960.18772 L 528.07356,955.33925 L 532.89384,955.33925 L 532.89384,950.65991 L 528.07356,950.65991 L 528.07356,945.83963 L 523.39422,945.83963 z "
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
+    </g>
+    <rect
+       id="rect8536"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="480.49854"
+       x="-435.97308"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_remove.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="scale(-1,1)" />
+    <g
+       style="display:inline"
+       id="g8538"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_remove.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 564.38052,934.9882 L 564.72257,960.7861"
+         id="path8540" />
+      <path
+         style="fill:url(#linearGradient8590);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8592);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 557.65726,926.85073 L 564.37477,935.68956 L 571.09228,926.85073 L 557.65726,926.85073 z "
+         id="path8542" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+         d="M 571.47748,950.6881 L 566.6572,950.6881 L 566.6572,955.36744 L 571.47748,955.36744 L 576.15682,955.33925 L 580.9771,955.33925 L 580.9771,950.65991 L 576.15682,950.65991 L 571.47748,950.6881 z "
+         id="path8544" />
+    </g>
+    <rect
+       id="rect8546"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="480.85211"
+       x="-242.2258"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_list.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="scale(-1,1)" />
+    <g
+       style="display:inline"
+       id="g8548"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_list.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 370.63326,935.34175 L 370.97531,961.13965"
+         id="path8550" />
+      <path
+         style="fill:url(#linearGradient8594);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8596);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 363.91,927.20428 L 370.62751,936.04311 L 377.34502,927.20428 L 363.91,927.20428 z "
+         id="path8552" />
+      <path
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+         d="M 358.63833,946.19318 L 358.63833,951.04165 L 353.81805,951.04165 L 353.81805,955.72099 L 358.63833,955.72099 L 358.63833,960.54127 L 363.31767,960.54127 L 363.31767,955.6928 L 368.13795,955.6928 L 368.13795,951.01346 L 363.31767,951.01346 L 363.31767,946.19318 L 358.63833,946.19318 z "
+         id="path8554" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+         d="M 378.08377,950.68811 L 373.26349,950.68811 L 373.26349,955.36745 L 378.08377,955.36745 L 382.76311,955.33926 L 387.58339,955.33926 L 387.58339,950.65992 L 382.76311,950.65992 L 378.08377,950.68811 z "
+         id="path8556" />
+    </g>
+    <rect
+       id="rect8964"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="435.24377"
+       x="153.08762"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_page.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="201.67343"
+       y="435.24377"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect8966"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_linear.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g8968"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_linear.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-246.15952,-306.45138)">
+      <g
+         style="fill-opacity:1;stroke:url(#linearGradient9082)"
+         id="g8970"
+         transform="matrix(0.5415254,0,0,0.1703656,391.14724,651.90036)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9084);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path8972" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9086);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path8974" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9088);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path8976" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9090);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path8978" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9092);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path8980" />
+      </g>
+      <g
+         id="g8982"
+         transform="matrix(0.1244078,0,0,0.1397183,394.52898,645.2736)">
+        <rect
+           id="rect8984"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect8986"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g8988"
+         transform="matrix(0.1508028,0,0,0.1460898,467.77752,664.93465)">
+        <path
+           id="path8990"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path8992"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g8994"
+         transform="matrix(0.1508028,0,0,0.1460898,463.33954,662.15996)">
+        <path
+           id="path8996"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path8998"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+    </g>
+    <g
+       style="display:inline"
+       id="g9000"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_page.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-244.74532,-306.45138)">
+      <g
+         transform="matrix(0.5338832,0,0,0.1703656,342.00081,669.11726)"
+         id="g9002">
+        <path
+           id="path9004"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 111.87488,566.71352 L 173.41819,566.58088" />
+        <path
+           id="path9006"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,626.46842 L 173.41819,626.33578" />
+        <path
+           id="path9008"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,611.5297 L 173.41818,611.39706" />
+        <path
+           id="path9010"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,596.59099 L 173.41818,596.45834" />
+        <path
+           id="path9012"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,581.65225 L 173.41819,581.51962" />
+      </g>
+      <g
+         transform="matrix(0.1244078,0,0,0.1397183,344.52898,662.49057)"
+         id="g9014">
+        <rect
+           width="10.422997"
+           height="72.622528"
+           ry="0"
+           x="460.12595"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect9016" />
+        <rect
+           width="2.5666234"
+           height="72.622528"
+           x="473.64929"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect9018" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,417.77752,682.15163)"
+         id="g9020">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9022" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9024" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,413.33954,679.37694)"
+         id="g9026">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9028" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9030" />
+      </g>
+      <g
+         transform="matrix(0.5415254,0,0,0.1703656,341.14724,651.90036)"
+         id="g9032">
+        <path
+           id="path9034"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 111.87488,566.71352 L 173.41819,566.58088" />
+        <path
+           id="path9036"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,626.46842 L 173.41819,626.33578" />
+        <path
+           id="path9038"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,611.5297 L 173.41818,611.39706" />
+        <path
+           id="path9040"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,596.59099 L 173.41818,596.45834" />
+        <path
+           id="path9042"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,581.65225 L 173.41819,581.51962" />
+      </g>
+      <g
+         transform="matrix(0.1244078,0,0,0.1397183,344.52898,645.2736)"
+         id="g9044">
+        <rect
+           width="10.422997"
+           height="72.622528"
+           ry="0"
+           x="460.12595"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect9046" />
+        <rect
+           width="2.5666234"
+           height="72.622528"
+           x="473.64929"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect9048" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,417.77752,664.93465)"
+         id="g9050">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9052" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9054" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,413.33954,662.15996)"
+         id="g9056">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9058" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9060" />
+      </g>
+      <rect
+         width="0.31930798"
+         height="10.146696"
+         x="434.70465"
+         y="748.70496"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="rect9062" />
+      <g
+         id="g9064"
+         transform="matrix(0.1508028,0,0,0.1460898,424.52752,664.93465)">
+        <path
+           id="path9066"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path9068"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,431.27752,667.43465)"
+         id="g9070">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9072" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9074" />
+      </g>
+      <g
+         id="g9076"
+         transform="matrix(-0.1244078,0,0,0.1397183,491.76721,662.2736)">
+        <rect
+           id="rect9078"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect9080"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="440.95456"
+       y="147.27452"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect10556"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\track_add.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g10558"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\track_add.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-2.2404833,-253.78593)">
+      <path
+         id="path10560"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.69704974px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 446.48376,404.46465 L 446.48376,438.99017" />
+      <path
+         id="path10562"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 452.22135,404.83883 L 452.22135,439.10134" />
+      <path
+         id="path10564"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 457.16922,404.83883 L 457.16922,439.10134" />
+      <path
+         id="path10566"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 462.1171,404.83883 L 462.1171,439.10134" />
+      <path
+         id="path10568"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 467.06498,404.83883 L 467.06498,439.10134" />
+      <path
+         id="path10570"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 472.01285,404.83883 L 472.01285,439.10134" />
+      <path
+         id="path10572"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 476.96073,404.83883 L 476.96073,439.10134" />
+      <path
+         id="path10574"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.90861,404.83883 L 481.90861,439.10134" />
+      <path
+         id="path10576"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 481.94255,404.62435 L 447.34974,404.62435" />
+      <path
+         id="path10578"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.94255,413.17627 L 447.34974,413.17627" />
+      <path
+         id="path10580"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.94255,421.7282 L 447.34974,421.7282" />
+      <path
+         id="path10582"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.94255,430.28013 L 447.34974,430.28013" />
+      <path
+         id="path10584"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.94255,438.83205 L 447.34974,438.83205" />
+      <rect
+         y="404.64941"
+         x="452.19183"
+         height="8.4911966"
+         width="19.804905"
+         id="rect10586"
+         style="opacity:1;fill:url(#linearGradient10632);fill-opacity:1;stroke:#000000;stroke-width:0.29408514;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:url(#linearGradient10634);fill-opacity:1;stroke:#000000;stroke-width:0.32790762;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect10588"
+         width="24.720829"
+         height="8.4573736"
+         x="457.15851"
+         y="413.15164" />
+      <rect
+         y="421.62128"
+         x="447.24338"
+         height="8.4886465"
+         width="20.155907"
+         id="rect10590"
+         style="opacity:1;fill:url(#linearGradient10636);fill-opacity:1;stroke:#000000;stroke-width:0.29663515;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path10592"
+         d="M 469.30055,421.51995 L 469.30055,426.36842 L 464.48027,426.36842 L 464.48027,431.04776 L 469.30055,431.04776 L 469.30055,435.86804 L 473.97989,435.86804 L 473.97989,431.01957 L 478.80017,431.01957 L 478.80017,426.34023 L 473.97989,426.34023 L 473.97989,421.51995 L 469.30055,421.51995 z "
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
+    </g>
+    <rect
+       id="rect10594"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="198.53976"
+       x="441.30811"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\track_remove.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g10596"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\track_remove.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-2.2404833,-253.78593)">
+      <path
+         d="M 446.83731,455.72989 L 446.83731,490.25541"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.69704974px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path10598" />
+      <path
+         d="M 452.5749,456.10407 L 452.5749,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10600" />
+      <path
+         d="M 457.52277,456.10407 L 457.52277,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10602" />
+      <path
+         d="M 462.47065,456.10407 L 462.47065,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10604" />
+      <path
+         d="M 467.41853,456.10407 L 467.41853,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10606" />
+      <path
+         d="M 472.3664,456.10407 L 472.3664,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10608" />
+      <path
+         d="M 477.31428,456.10407 L 477.31428,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10610" />
+      <path
+         d="M 482.26216,456.10407 L 482.26216,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10612" />
+      <path
+         d="M 482.2961,455.88959 L 447.70329,455.88959"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path10614" />
+      <path
+         d="M 482.2961,464.44151 L 447.70329,464.44151"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10616" />
+      <path
+         d="M 482.2961,472.99344 L 447.70329,472.99344"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10618" />
+      <path
+         d="M 482.2961,481.54537 L 447.70329,481.54537"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10620" />
+      <path
+         d="M 482.2961,490.09729 L 447.70329,490.09729"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10622" />
+      <rect
+         style="fill:url(#linearGradient10638);fill-opacity:1;stroke:#000000;stroke-width:0.29408514;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect10624"
+         width="19.804905"
+         height="8.4911966"
+         x="452.54538"
+         y="455.91464" />
+      <rect
+         y="464.41687"
+         x="457.51205"
+         height="8.4573736"
+         width="24.720829"
+         id="rect10626"
+         style="fill:url(#linearGradient10640);fill-opacity:1;stroke:#000000;stroke-width:0.32790762;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="fill:url(#linearGradient10642);fill-opacity:1;stroke:#000000;stroke-width:0.29663515;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect10628"
+         width="20.155907"
+         height="8.4886465"
+         x="447.59692"
+         y="472.88651" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+         d="M 468.6541,479.13366 L 463.83382,479.13366 L 463.83382,483.813 L 468.6541,483.813 L 473.33344,483.78481 L 478.15372,483.78481 L 478.15372,479.10547 L 473.33344,479.10547 L 468.6541,479.13366 z "
+         id="path10630" />
+    </g>
+    <rect
+       inkscape:export-ydpi="51"
+       inkscape:export-xdpi="51"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_multitrack.png"
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="249.15182"
+       y="435.07074"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect11028" />
+    <g
+       style="display:inline"
+       id="g11030"
+       transform="translate(-254.74712,-300.96752)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_multitrack.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51">
+      <g
+         id="g11032"
+         transform="matrix(0.4447275,0,0,0.1703656,464.02114,641.74351)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path11034" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11036" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11038" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11040" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11042" />
+      </g>
+      <g
+         id="g11044"
+         transform="matrix(0.1244078,0,0,0.1397183,456.595,635.11675)">
+        <rect
+           id="rect11046"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect11048"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g11050"
+         transform="matrix(0.1508028,0,0,0.1460898,529.84354,654.7778)">
+        <path
+           id="path11052"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11054"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g11056"
+         transform="matrix(0.1508028,0,0,0.1460898,525.40556,652.00311)">
+        <path
+           id="path11058"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11060"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,536.59354,654.7778)"
+         id="g11062">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path11064" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path11066" />
+      </g>
+      <text
+         id="text11068"
+         y="746.97223"
+         x="506.70752"
+         style="font-size:11px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="746.97223"
+           x="506.70752"
+           id="tspan11070"
+           sodipodi:role="line">1</tspan><tspan
+           id="tspan11072"
+           y="760.72223"
+           x="506.70752"
+           sodipodi:role="line">2</tspan><tspan
+           id="tspan11074"
+           y="774.47223"
+           x="506.70752"
+           sodipodi:role="line">3</tspan></text>
+      <g
+         transform="matrix(0.4447275,0,0,0.1703656,464.02114,655.24351)"
+         id="g11076">
+        <path
+           id="path11078"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 111.87488,566.71352 L 173.41819,566.58088" />
+        <path
+           id="path11080"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,626.46842 L 173.41819,626.33578" />
+        <path
+           id="path11082"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,611.5297 L 173.41818,611.39706" />
+        <path
+           id="path11084"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,596.59099 L 173.41818,596.45834" />
+        <path
+           id="path11086"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,581.65225 L 173.41819,581.51962" />
+      </g>
+      <g
+         transform="matrix(0.1244078,0,0,0.1397183,456.595,648.61675)"
+         id="g11088">
+        <rect
+           width="10.422997"
+           height="72.622528"
+           ry="0"
+           x="460.12595"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect11090" />
+        <rect
+           width="2.5666234"
+           height="72.622528"
+           x="473.64929"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect11092" />
+      </g>
+      <g
+         id="g11094"
+         transform="matrix(0.4447275,0,0,0.1703656,464.02114,668.49351)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path11096" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11098" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11100" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11102" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11104" />
+      </g>
+      <g
+         id="g11106"
+         transform="matrix(0.1244078,0,0,0.1397183,456.595,661.86675)">
+        <rect
+           id="rect11108"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect11110"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,529.84354,668.21283)"
+         id="g11112">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path11114" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path11116" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,525.40556,665.43814)"
+         id="g11118">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path11120" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path11122" />
+      </g>
+      <g
+         id="g11124"
+         transform="matrix(0.1508028,0,0,0.1460898,536.59354,668.21283)">
+        <path
+           id="path11126"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11128"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g11130"
+         transform="matrix(0.1508028,0,0,0.1460898,529.66676,681.47108)">
+        <path
+           id="path11132"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11134"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g11136"
+         transform="matrix(0.1508028,0,0,0.1460898,525.22878,678.69639)">
+        <path
+           id="path11138"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11140"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,536.41676,681.47108)"
+         id="g11142">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path11144" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path11146" />
+      </g>
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="298.33298"
+       y="433.69519"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect12376" />
+    <g
+       style="display:inline"
+       id="g12378"
+       transform="matrix(0.5700447,0,0,0.2618828,237.50828,292.61349)">
+      <path
+         d="M 111.87488,566.71352 L 173.41819,566.58088"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path12380" />
+      <path
+         d="M 111.87488,626.46842 L 173.41819,626.33578"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path12382" />
+      <path
+         d="M 111.87488,611.5297 L 173.41818,611.39706"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path12384" />
+      <path
+         d="M 111.87488,596.59099 L 173.41818,596.45834"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path12386" />
+      <path
+         d="M 111.87488,581.65225 L 173.41819,581.51962"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path12388" />
+    </g>
+    <g
+       style="display:inline"
+       id="g12390"
+       transform="matrix(0.1912374,0,0,0.2147724,213.41104,282.42696)">
+      <rect
+         id="rect12392"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         y="738.49548"
+         x="460.12595"
+         ry="0"
+         height="72.622528"
+         width="10.422997" />
+      <rect
+         id="rect12394"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         y="738.49548"
+         x="473.64929"
+         height="72.622528"
+         width="2.5666234" />
+    </g>
+    <g
+       style="display:inline"
+       id="g12396"
+       transform="matrix(0.2318113,0,0,0.2245665,326.00734,312.64956)">
+      <path
+         id="path12398"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+      <path
+         id="path12400"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M -7.156011,622.3181 L -7.156011,572.4789" />
+    </g>
+    <g
+       style="display:inline"
+       id="g12402"
+       transform="matrix(0.2318113,0,0,0.2245665,319.18536,308.38436)">
+      <path
+         id="path12404"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+      <path
+         id="path12406"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M -7.156011,622.3181 L -7.156011,572.4789" />
+    </g>
+    <g
+       style="display:inline"
+       transform="matrix(0.2318113,0,0,0.2245665,336.38332,312.64956)"
+       id="g12408">
+      <path
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path12410" />
+      <path
+         d="M -7.156011,622.3181 L -7.156011,572.4789"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path12412" />
+    </g>
+    <g
+       style="display:inline"
+       id="g12414"
+       transform="translate(-140.61944,-77.569368)">
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path12416"
+         d="M 440.58819,540.43464 C 448.06239,535.50357 447.97881,533.31371 454.73032,532.65647 C 460.92638,533.06006 463.18552,536.33993 469.22601,540.08109 C 465.1484,542.83292 461.92696,547.38979 455.08387,547.85926 C 448.23806,547.45201 446.00644,543.32344 440.58819,540.43464 z "
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         transform="translate(-2.0606602,-1.75)"
+         d="M 465.62982 542.00787 A 8.3085051 7.2478447 0 1 1  449.01281,542.00787 A 8.3085051 7.2478447 0 1 1  465.62982 542.00787 z"
+         sodipodi:ry="7.2478447"
+         sodipodi:rx="8.3085051"
+         sodipodi:cy="542.00787"
+         sodipodi:cx="457.32132"
+         id="path12418"
+         style="fill:url(#linearGradient12422);fill-opacity:1;stroke:url(#linearGradient12424);stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(-1,-1.75)"
+         d="M 458.91229 542.00787 A 2.8284271 3.0052037 0 1 1  453.25544,542.00787 A 2.8284271 3.0052037 0 1 1  458.91229 542.00787 z"
+         sodipodi:ry="3.0052037"
+         sodipodi:rx="2.8284271"
+         sodipodi:cy="542.00787"
+         sodipodi:cx="456.08386"
+         id="path12420"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="344.33295"
+       y="199.69516"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect14627" />
+    <rect
+       id="rect14629"
+       style="fill:url(#linearGradient14671);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="203.6138"
+       x="348.25156"
+       height="33.496006"
+       width="33.496006" />
+    <g
+       style="display:inline"
+       id="g14631"
+       transform="matrix(0.4620139,0,0,0.3894886,57.644817,0.1596858)">
+      <path
+         id="path14633"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 646.25,601.61218 L 646.25,529.11218" />
+      <rect
+         id="rect14635"
+         style="fill:url(#linearGradient14673);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="535.61218"
+         x="639"
+         height="27"
+         width="14.5" />
+      <path
+         id="path14637"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 665.25,601.61218 L 665.25,529.11218" />
+      <rect
+         id="rect14639"
+         style="fill:url(#linearGradient14675);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="564.11218"
+         x="658"
+         height="27"
+         width="14.5" />
+      <path
+         id="path14641"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 684.25,601.61218 L 684.25,529.11218" />
+      <rect
+         id="rect14643"
+         style="fill:url(#linearGradient14677);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="546.11218"
+         x="677"
+         height="27"
+         width="14.5" />
+    </g>
+    <rect
+       id="rect14645"
+       style="fill:url(#linearGradient14679);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="203.6138"
+       x="348.25156"
+       height="33.496006"
+       width="33.496006" />
+    <path
+       id="path14647"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.27261233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 356.22131,235.25979 L 356.22131,207.02187" />
+    <path
+       id="path14649"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.27261233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 364.99957,235.25979 L 364.99957,207.02187" />
+    <path
+       id="path14651"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.27261233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 373.77784,235.25979 L 373.77784,207.02187" />
+    <g
+       style="display:inline"
+       id="g14653"
+       transform="translate(-96.729733,-365.93933)">
+      <rect
+         y="578.69958"
+         x="467.31976"
+         height="10.957698"
+         width="6.6963706"
+         id="rect14655"
+         style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.34436721;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="580.40417"
+         x="468.41556"
+         height="7.5486355"
+         width="4.6265831"
+         id="rect14657"
+         style="opacity:1;fill:url(#linearGradient14681);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       style="display:inline"
+       transform="translate(-105.74534,-360.63603)"
+       id="g14659">
+      <rect
+         style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.34436721;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect14661"
+         width="6.6963706"
+         height="10.957698"
+         x="467.31976"
+         y="578.69958" />
+      <rect
+         style="opacity:1;fill:url(#linearGradient14683);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect14663"
+         width="4.6265831"
+         height="7.5486355"
+         x="468.41556"
+         y="580.40417" />
+    </g>
+    <g
+       style="display:inline"
+       id="g14665"
+       transform="translate(-114.4074,-363.11091)">
+      <rect
+         y="578.69958"
+         x="467.31976"
+         height="10.957698"
+         width="6.6963706"
+         id="rect14667"
+         style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.34436721;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="580.40417"
+         x="468.41556"
+         height="7.5486355"
+         width="4.6265831"
+         id="rect14669"
+         style="opacity:1;fill:url(#linearGradient14685);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="296.17447"
+       y="198.36298"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect16681" />
+    <g
+       id="g16707"
+       transform="translate(849.99998,-63.999998)">
+      <rect
+         y="269.53003"
+         x="-549.65851"
+         height="22.5"
+         width="33.5"
+         id="rect16683"
+         style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+      <rect
+         y="273.03003"
+         x="-546.15851"
+         height="9"
+         width="26"
+         id="rect16685"
+         style="opacity:1;fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+      <text
+         id="text16687"
+         y="280.08209"
+         x="-539.21191"
+         style="font-size:7.89853191px;font-style:normal;font-weight:normal;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="280.08209"
+           x="-539.21191"
+           id="tspan16689"
+           sodipodi:role="line">1234</tspan></text>
+      <path
+         id="path16691"
+         d="M -546.15852,286.03003 L -520.65852,286.03003"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+      <g
+         transform="translate(-703.26566,-480.40358)"
+         id="g16693"
+         style="display:inline">
+        <path
+           style="fill:url(#linearGradient16699);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient16701);stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 163.21429,762.8979 L 163.21429,778.96933 C 169.18918,776.60095 175.46615,774.07658 180,770.75504 C 174.66202,767.10698 169.02779,764.64388 163.21429,762.8979 z "
+           id="path16695"
+           sodipodi:nodetypes="cccc" />
+        <path
+           style="fill:url(#linearGradient16703);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient16705);stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 171.79136,769.68303 C 168.72709,769.68303 165.85828,770.1268 163.49554,770.88459 L 163.49554,777.98214 C 169.16989,775.88352 175.12269,773.64741 179.45825,770.71693 C 177.21614,770.06809 174.60773,769.68302 171.79136,769.68303 z "
+           id="path16697" />
+      </g>
+    </g>
+    <rect
+       style="opacity:0;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect17763"
+       width="66.5"
+       height="60"
+       x="202.50003"
+       y="587.36218"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_style.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85" />
+    <g
+       id="g24597"
+       transform="translate(-438.00002,341.99999)">
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="5.250133"
+         height="5.3034863"
+         rx="1.6616579"
+         ry="1.6616576"
+         x="596.60822"
+         y="247.18004"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.03204477;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17729" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="65.647148"
+         height="15.808088"
+         rx="3.6109443"
+         ry="3.6109436"
+         x="550.94476"
+         y="245.75606"
+         style="color:#000000;fill:url(#linearGradient20674);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17731" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="65.644463"
+         height="51.361164"
+         rx="0"
+         x="550.95654"
+         y="254.09529"
+         style="color:#000000;fill:url(#linearGradient20676);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17733" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         d="M 610.62428,248.50849 L 610.19569,248.93253 L 611.09722,249.83176 L 610.19569,250.72369 L 610.62428,251.15503 L 611.52581,250.25579 L 612.43473,251.15503 L 612.86333,250.72369 L 611.9618,249.83176 L 612.86333,248.93253 L 612.43473,248.50849 L 611.52581,249.40773 L 610.62428,248.50849 z "
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.2487205;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="path17735" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="3.0691075"
+         height="3.0364239"
+         x="603.8468"
+         y="248.31357"
+         style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.70561117;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17737" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="3.3248663"
+         height="0.33738044"
+         x="597.57086"
+         y="249.66309"
+         style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.70561117;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17739" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="10.912381"
+         height="9.4466524"
+         x="558.87445"
+         y="268.24072"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17741" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="10.912381"
+         height="9.4466524"
+         x="558.87445"
+         y="287.42447"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17743" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         id="path18734"
+         d="M 559,271.36218 L 563.5,276.36218 L 569.5,266.86218"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         id="path20678"
+         d="M 576,272.36218 L 607.5,272.36218"
+         style="fill:#4d4d4d;fill-rule:evenodd;stroke:#333333;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         style="fill:#4d4d4d;fill-rule:evenodd;stroke:#333333;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 576,291.86218 L 607.5,291.86218"
+         id="path21649" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         id="path21651"
+         d="M 576,276.86218 L 607.5,276.86218"
+         style="fill:#4d4d4d;fill-rule:evenodd;stroke:#333333;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       id="g24582"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_style.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85"
+       transform="translate(-420.00002,341.99999)">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path21665"
+         d="M 650,249.36218 L 631,267.86218 C 685.26159,262.68371 667.38995,281.08726 654.5,297.86218 C 691.93444,270.67633 683.07012,256.59391 650,249.36218 z "
+         style="fill:url(#linearGradient23611);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <text
+         id="text21661"
+         y="296.36218"
+         x="628.5"
+         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="font-size:36px;font-weight:normal;font-family:Century"
+           y="296.36218"
+           x="628.5"
+           id="tspan21663"
+           sodipodi:role="line">Aa</tspan></text>
+    </g>
+    <rect
+       inkscape:export-ydpi="85"
+       inkscape:export-xdpi="85"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_style.png"
+       y="587.36218"
+       x="202.50003"
+       height="60"
+       width="66.5"
+       id="rect24587"
+       style="opacity:0;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       inkscape:export-ydpi="85"
+       inkscape:export-xdpi="85"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_style.png"
+       id="g24589"
+       transform="translate(-420.00002,341.99999)">
+      <path
+         style="fill:url(#linearGradient4519);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 650,249.36218 L 631,267.86218 C 685.26159,262.68371 667.38995,281.08726 654.5,297.86218 C 691.93444,270.67633 683.07012,256.59391 650,249.36218 z "
+         id="path24591"
+         sodipodi:nodetypes="cccc" />
+      <text
+         xml:space="preserve"
+         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         x="628.5"
+         y="296.36218"
+         id="text24593"><tspan
+           sodipodi:role="line"
+           id="tspan24595"
+           x="628.5"
+           y="296.36218"
+           style="font-size:36px;font-weight:normal;font-family:Century">Aa</tspan></text>
+    </g>
+    <rect
+       style="opacity:0;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect31683"
+       width="66.5"
+       height="60"
+       x="107.91422"
+       y="684.28351"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_authors.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85" />
+    <g
+       id="g32727"
+       transform="matrix(0.6116588,0,0,0.6116588,-276.80752,381.33365)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_authors.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85">
+      <g
+         id="g32699">
+        <path
+           style="fill:url(#linearGradient32738);fill-opacity:1;stroke:url(#linearGradient32740);stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1"
+           d="M 660.78125,510 C 650.82801,510 642.75003,517.45241 642.75,526.625 C 642.75,531.03542 644.64187,535.0241 647.6875,538 C 642.01881,543.0774 636.5037,549.9304 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 687.01058,550.47601 680.87321,543.03088 674.21875,537.6875 C 677.07541,534.74701 678.81249,530.87939 678.8125,526.625 C 678.8125,517.45241 670.73449,510 660.78125,510 z "
+           id="path31685" />
+        <path
+           style="fill:url(#linearGradient32742);fill-opacity:1;stroke:#333333;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 659.71875,539.71875 C 653.11193,539.71875 647.00854,541.33674 641.96875,544.09375 C 638.51984,548.56832 635.48631,554.46212 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 688.34092,557.75226 686.47331,552.96151 684.15625,549 C 678.45679,543.34318 669.61983,539.71876 659.71875,539.71875 z "
+           id="path31710" />
+      </g>
+      <g
+         id="g32715"
+         transform="translate(43.84062,1.4142136)">
+        <path
+           style="fill:url(#linearGradient32744);fill-opacity:1;stroke:url(#linearGradient32746);stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1"
+           d="M 660.78125,510 C 650.82801,510 642.75003,517.45241 642.75,526.625 C 642.75,531.03542 644.64187,535.0241 647.6875,538 C 642.01881,543.0774 636.5037,549.9304 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 687.01058,550.47601 680.87321,543.03088 674.21875,537.6875 C 677.07541,534.74701 678.81249,530.87939 678.8125,526.625 C 678.8125,517.45241 670.73449,510 660.78125,510 z "
+           id="path32717" />
+        <path
+           style="fill:url(#linearGradient32748);fill-opacity:1;stroke:#333333;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 659.71875,539.71875 C 653.11193,539.71875 647.00854,541.33674 641.96875,544.09375 C 638.51984,548.56832 635.48631,554.46212 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 688.34092,557.75226 686.47331,552.96151 684.15625,549 C 678.45679,543.34318 669.61983,539.71876 659.71875,539.71875 z "
+           id="path32719" />
+      </g>
+      <g
+         transform="translate(22.627417,9.1923882)"
+         id="g32703">
+        <path
+           id="path32705"
+           d="M 660.78125,510 C 650.82801,510 642.75003,517.45241 642.75,526.625 C 642.75,531.03542 644.64187,535.0241 647.6875,538 C 642.01881,543.0774 636.5037,549.9304 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 687.01058,550.47601 680.87321,543.03088 674.21875,537.6875 C 677.07541,534.74701 678.81249,530.87939 678.8125,526.625 C 678.8125,517.45241 670.73449,510 660.78125,510 z "
+           style="fill:url(#linearGradient32750);fill-opacity:1;stroke:url(#linearGradient32752);stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1" />
+        <path
+           id="path32707"
+           d="M 659.71875,539.71875 C 653.11193,539.71875 647.00854,541.33674 641.96875,544.09375 C 638.51984,548.56832 635.48631,554.46212 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 688.34092,557.75226 686.47331,552.96151 684.15625,549 C 678.45679,543.34318 669.61983,539.71876 659.71875,539.71875 z "
+           style="fill:url(#linearGradient32754);fill-opacity:1;stroke:#333333;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      </g>
+    </g>
+    <rect
+       inkscape:export-ydpi="85"
+       inkscape:export-xdpi="85"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_license.png"
+       y="676.3252"
+       x="205.0513"
+       height="60"
+       width="66.5"
+       id="rect32756"
+       style="opacity:0;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g34724"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_license.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85"
+       transform="translate(-434.00002,159.99999)">
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path32758"
+         d="M 649.12402,524.15342 C 650.92972,539.70977 646.70505,555.26611 656.9022,570.82246 L 697.91439,570.11536 C 685.57145,554.79471 690.25808,539.47407 688.0149,524.15342 L 649.12402,524.15342 z "
+         style="fill:url(#linearGradient34698);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient34722);stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path34700"
+         d="M 655.48799,530.51738 L 667.5088,530.51738"
+         style="fill:#666666;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path34702"
+         d="M 656.19509,536.88134 L 683.06515,536.88134"
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 656.19509,541.12398 L 683.06515,541.12398"
+         id="path34706" />
+      <path
+         id="path34708"
+         d="M 656.19509,545.36662 L 683.06515,545.36662"
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 656.19509,549.60926 L 683.06515,549.60926"
+         id="path34710" />
+      <path
+         id="path34712"
+         d="M 657.6093,553.8519 L 684.47936,553.8519"
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:0.68351835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 661.58554,561.63007 L 674.13916,561.63007"
+         id="path34714" />
+    </g>
+    <rect
+       style="opacity:0;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect34734"
+       width="66.5"
+       height="60"
+       x="288.56601"
+       y="675.0567"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_description.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85" />
+    <path
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:url(#linearGradient34743);fill-opacity:1;stroke:url(#linearGradient35720);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       d="M 314.26497,681.62011 L 326.98372,681.62011 L 326.98372,690.27636 L 314.26497,690.27636 L 314.26497,681.62011 z M 314.26497,694.24511 L 326.98372,694.24511 L 326.98372,727.43261 L 314.26497,727.43261 L 314.26497,694.24511 z "
+       id="text34736"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_description.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85" />
+    <rect
+       id="rect6511"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.30661"
+       x="584.61633"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus/edit_voice_1.png"
+       inkscape:export-xdpi="51.581074"
+       inkscape:export-ydpi="51.581074" />
+    <rect
+       id="rect6513"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="479.68161"
+       x="584.61633"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus/edit_voice_2.png"
+       inkscape:export-xdpi="51.581074"
+       inkscape:export-ydpi="51.581074" />
+    <text
+       xml:space="preserve"
+       style="font-size:22px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="779.29431"
+       y="358.28033"
+       id="text3736"
+       transform="scale(0.7694351,1.2996548)"
+       inkscape:label="#text3736"><tspan
+         sodipodi:role="line"
+         id="tspan3738"
+         x="779.29431"
+         y="358.28033">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:22px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="779.29431"
+       y="393.19342"
+       id="text3740"
+       transform="scale(0.7694351,1.2996548)"><tspan
+         sodipodi:role="line"
+         id="tspan3742"
+         x="779.29431"
+         y="393.19342">2</tspan></text>
+  </g>
+</svg>
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/song_properties.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/song_properties.png
new file mode 100644
index 0000000..dfdf04c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/song_properties.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/splash.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/splash.png
new file mode 100644
index 0000000..28885f3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/splash.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/tempo.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/tempo.png
new file mode 100644
index 0000000..a06586e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/tempo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/tempoicon.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/tempoicon.png
new file mode 100644
index 0000000..922047c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/tempoicon.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/tiednote.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/tiednote.png
new file mode 100644
index 0000000..f1a7631
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/tiednote.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/timesignature.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/timesignature.png
new file mode 100644
index 0000000..657c757
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/timesignature.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/track_add.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/track_add.png
new file mode 100644
index 0000000..68703b5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/track_add.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/track_remove.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/track_remove.png
new file mode 100644
index 0000000..00f3b5a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/track_remove.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport.png
new file mode 100644
index 0000000..84ba4ce
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_first_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_first_1.png
new file mode 100644
index 0000000..0df6449
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_first_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_first_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_first_2.png
new file mode 100644
index 0000000..bf6f597
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_first_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_first_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_first_1.png
new file mode 100644
index 0000000..ec9f68b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_first_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_first_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_first_2.png
new file mode 100644
index 0000000..9b1c98e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_first_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_last_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_last_1.png
new file mode 100644
index 0000000..58308c9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_last_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_last_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_last_2.png
new file mode 100644
index 0000000..6f99530
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_last_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_next_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_next_1.png
new file mode 100644
index 0000000..153ecf4
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_next_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_next_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_next_2.png
new file mode 100644
index 0000000..af395e0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_next_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_pause.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_pause.png
new file mode 100644
index 0000000..6d01ef3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_pause.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_play_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_play_1.png
new file mode 100644
index 0000000..bae4b68
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_play_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_play_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_play_2.png
new file mode 100644
index 0000000..2a0fcd9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_play_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_previous_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_previous_1.png
new file mode 100644
index 0000000..648de6b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_previous_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_previous_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_previous_2.png
new file mode 100644
index 0000000..9dc2973
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_previous_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_stop_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_stop_1.png
new file mode 100644
index 0000000..c9c7d9e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_stop_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_stop_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_stop_2.png
new file mode 100644
index 0000000..586d3df
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_icon_stop_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_last_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_last_1.png
new file mode 100644
index 0000000..415edb9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_last_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_last_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_last_2.png
new file mode 100644
index 0000000..3afb923
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_last_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_metronome.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_metronome.png
new file mode 100644
index 0000000..be8f411
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_metronome.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_mode.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_mode.png
new file mode 100644
index 0000000..b572004
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_mode.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_next_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_next_1.png
new file mode 100644
index 0000000..7fcfe81
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_next_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_next_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_next_2.png
new file mode 100644
index 0000000..e687766
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_next_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_pause.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_pause.png
new file mode 100644
index 0000000..da2f542
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_pause.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_play_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_play_1.png
new file mode 100644
index 0000000..e73beb0
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_play_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_play_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_play_2.png
new file mode 100644
index 0000000..38573cc
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_play_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_previous_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_previous_1.png
new file mode 100644
index 0000000..b89f471
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_previous_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_previous_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_previous_2.png
new file mode 100644
index 0000000..c3d41af
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_previous_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_stop_1.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_stop_1.png
new file mode 100644
index 0000000..a6c28e8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_stop_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_stop_2.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_stop_2.png
new file mode 100644
index 0000000..0a2355b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/transport_stop_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/blue_serious/tupleto.png b/TuxGuitar-testing/platform-all/share/skins/blue_serious/tupleto.png
new file mode 100644
index 0000000..eb47b50
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/blue_serious/tupleto.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/1.png
new file mode 100644
index 0000000..e5d1bf3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/16.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/16.png
new file mode 100644
index 0000000..c2ab703
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/16.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/2.png
new file mode 100644
index 0000000..f7fa1cf
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/32.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/32.png
new file mode 100644
index 0000000..a88e284
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/32.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/4.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/4.png
new file mode 100644
index 0000000..603799d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/4.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/64.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/64.png
new file mode 100644
index 0000000..f91b54f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/64.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/8.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/8.png
new file mode 100644
index 0000000..42a3efd
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/8.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/about_authors.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/about_authors.png
new file mode 100644
index 0000000..7c1a345
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/about_authors.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/about_description.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/about_description.png
new file mode 100644
index 0000000..d308294
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/about_description.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/about_license.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/about_license.png
new file mode 100644
index 0000000..dbdd97a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/about_license.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_back.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_back.png
new file mode 100644
index 0000000..8a36e09
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_back.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_file.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_file.png
new file mode 100644
index 0000000..5088217
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_file.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_folder.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_folder.png
new file mode 100644
index 0000000..1b19b3c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_folder.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_new.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_new.png
new file mode 100644
index 0000000..72a6ea2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_new.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_refresh.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_refresh.png
new file mode 100644
index 0000000..42d0872
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_refresh.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_root.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_root.png
new file mode 100644
index 0000000..db0d5a5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/browser_root.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/chord.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/chord.png
new file mode 100644
index 0000000..97fbd00
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/chord.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/closerepeat.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/closerepeat.png
new file mode 100644
index 0000000..cd0810a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/closerepeat.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/division-type.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/division-type.png
new file mode 100644
index 0000000..eb47b50
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/division-type.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/dotted.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/dotted.png
new file mode 100644
index 0000000..d963a7e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/dotted.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/doubledotted.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/doubledotted.png
new file mode 100644
index 0000000..0ae9081
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/doubledotted.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_f.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_f.png
new file mode 100644
index 0000000..042cf3d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_f.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_ff.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_ff.png
new file mode 100644
index 0000000..dc16cd8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_ff.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_fff.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_fff.png
new file mode 100644
index 0000000..94dedd5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_fff.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_mf.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_mf.png
new file mode 100644
index 0000000..6a2d108
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_mf.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_mp.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_mp.png
new file mode 100644
index 0000000..acb0077
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_mp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_p.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_p.png
new file mode 100644
index 0000000..8560e07
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_p.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_pp.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_pp.png
new file mode 100644
index 0000000..b5f3145
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_pp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_ppp.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_ppp.png
new file mode 100644
index 0000000..1c14f87
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/dynamic_ppp.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_mode_edition.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_mode_edition.png
new file mode 100644
index 0000000..4ad565a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_mode_edition.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_mode_edition_no_natural.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_mode_edition_no_natural.png
new file mode 100644
index 0000000..277f7ba
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_mode_edition_no_natural.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_mode_selection.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_mode_selection.png
new file mode 100644
index 0000000..957b5ef
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_mode_selection.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_redo.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_redo.png
new file mode 100644
index 0000000..117501f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_redo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_undo.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_undo.png
new file mode 100644
index 0000000..ecc4266
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_undo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_voice_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_voice_1.png
new file mode 100644
index 0000000..9595714
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_voice_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_voice_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_voice_2.png
new file mode 100644
index 0000000..f9a90d4
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/edit_voice_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_accentuated.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_accentuated.png
new file mode 100644
index 0000000..ccbac08
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_accentuated.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_bend.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_bend.png
new file mode 100644
index 0000000..a49c960
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_bend.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_dead.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_dead.png
new file mode 100644
index 0000000..6811144
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_dead.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_fade_in.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_fade_in.png
new file mode 100644
index 0000000..0b48773
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_fade_in.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_ghost.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_ghost.png
new file mode 100644
index 0000000..af04c4e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_ghost.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_grace.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_grace.png
new file mode 100644
index 0000000..079f345
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_grace.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_hammer.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_hammer.png
new file mode 100644
index 0000000..5eec73a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_hammer.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_harmonic.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_harmonic.png
new file mode 100644
index 0000000..2923933
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_harmonic.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_heavy_accentuated.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_heavy_accentuated.png
new file mode 100644
index 0000000..c62fac9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_heavy_accentuated.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_palm_mute.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_palm_mute.png
new file mode 100644
index 0000000..7714436
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_palm_mute.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_popping.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_popping.png
new file mode 100644
index 0000000..8012eef
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_popping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_slapping.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_slapping.png
new file mode 100644
index 0000000..dc64d57
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_slapping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_slide.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_slide.png
new file mode 100644
index 0000000..731a67f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_slide.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_staccato.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_staccato.png
new file mode 100644
index 0000000..f3adff7
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_staccato.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_tapping.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_tapping.png
new file mode 100644
index 0000000..c624cf1
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_tapping.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_tremolo_bar.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_tremolo_bar.png
new file mode 100644
index 0000000..ed7fd9d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_tremolo_bar.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_tremolo_picking.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_tremolo_picking.png
new file mode 100644
index 0000000..f3daa7d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_tremolo_picking.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_trill.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_trill.png
new file mode 100644
index 0000000..f9524f8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_trill.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_vibrato.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_vibrato.png
new file mode 100644
index 0000000..ae5dcca
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/effect_vibrato.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/firstfret.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/firstfret.png
new file mode 100644
index 0000000..2313352
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/firstfret.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/fret.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/fret.png
new file mode 100644
index 0000000..479d6a7
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/fret.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/fretboard.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/fretboard.png
new file mode 100644
index 0000000..703cc16
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/fretboard.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/grace.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/grace.png
new file mode 100644
index 0000000..6c67a4c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/grace.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-16x16.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-16x16.png
new file mode 100644
index 0000000..4ba40d8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-16x16.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-24x24.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-24x24.png
new file mode 100644
index 0000000..e86a3e3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-24x24.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-32x32.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-32x32.png
new file mode 100644
index 0000000..ff0884f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-32x32.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-48x48.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-48x48.png
new file mode 100644
index 0000000..39267cf
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-48x48.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-64x64.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-64x64.png
new file mode 100644
index 0000000..6835210
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-64x64.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-96x96.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-96x96.png
new file mode 100644
index 0000000..5941ec3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon-96x96.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/icon.icns b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon.icns
new file mode 100644
index 0000000..430239d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon.icns differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/icon.ico b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon.ico
new file mode 100644
index 0000000..5a7b85f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon.ico differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/icon.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon.png
new file mode 100644
index 0000000..6835210
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/icon.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_compact.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_compact.png
new file mode 100644
index 0000000..d765101
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_compact.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_linear.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_linear.png
new file mode 100644
index 0000000..cce67ef
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_linear.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_multitrack.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_multitrack.png
new file mode 100644
index 0000000..ce963dc
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_multitrack.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_page.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_page.png
new file mode 100644
index 0000000..b7d11f7
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_page.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_score.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_score.png
new file mode 100644
index 0000000..6f4c454
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/layout_score.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/logo.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/logo.png
new file mode 100644
index 0000000..06e6deb
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/logo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_add.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_add.png
new file mode 100644
index 0000000..627c7a3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_add.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_first.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_first.png
new file mode 100644
index 0000000..94383cb
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_first.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_last.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_last.png
new file mode 100644
index 0000000..6d4f662
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_last.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_list.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_list.png
new file mode 100644
index 0000000..cd216ea
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_list.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_next.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_next.png
new file mode 100644
index 0000000..f501f5b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_next.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_previous.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_previous.png
new file mode 100644
index 0000000..4617902
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_previous.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_remove.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_remove.png
new file mode 100644
index 0000000..bb6b6f6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/marker_remove.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/mixer.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/mixer.png
new file mode 100644
index 0000000..8407d19
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/mixer.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/new.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/new.png
new file mode 100644
index 0000000..72a6ea2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/new.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/open.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/open.png
new file mode 100644
index 0000000..6bb147a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/open.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/openrepeat.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/openrepeat.png
new file mode 100644
index 0000000..680d64f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/openrepeat.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/option_language.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_language.png
new file mode 100644
index 0000000..88435cc
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_language.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/option_skin.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_skin.png
new file mode 100644
index 0000000..7a19c68
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_skin.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/option_sound.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_sound.png
new file mode 100644
index 0000000..c025de6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_sound.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/option_style.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_style.png
new file mode 100644
index 0000000..4f02fb5
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_style.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/option_toolbars.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_toolbars.png
new file mode 100644
index 0000000..ac2721d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_toolbars.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/option_view.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_view.png
new file mode 100644
index 0000000..3bed1f1
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/option_view.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/print-preview.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/print-preview.png
new file mode 100644
index 0000000..37b2d65
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/print-preview.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/print.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/print.png
new file mode 100644
index 0000000..9eedd7c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/print.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/repeat_alternative.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/repeat_alternative.png
new file mode 100644
index 0000000..bdceba2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/repeat_alternative.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/save-as.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/save-as.png
new file mode 100644
index 0000000..bc4de63
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/save-as.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/save.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/save.png
new file mode 100644
index 0000000..2655790
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/save.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/settings.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/settings.png
new file mode 100644
index 0000000..f077d28
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/settings.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/skin-preview.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/skin-preview.png
new file mode 100644
index 0000000..a14bd93
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/skin-preview.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/skin.properties b/TuxGuitar-testing/platform-all/share/skins/ersplus/skin.properties
new file mode 100644
index 0000000..496578c
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/skins/ersplus/skin.properties
@@ -0,0 +1,6 @@
+name=Ersplus
+author=Ersplus <ersplus at gmail.com> http://ersplus.free.fr
+description=Default tuxguitar theme.
+date=2007-01-29
+version=0.9
+preview=skin-preview.png
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/skin.svg b/TuxGuitar-testing/platform-all/share/skins/ersplus/skin.svg
new file mode 100644
index 0000000..8f9e43f
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/skins/ersplus/skin.svg
@@ -0,0 +1,8660 @@
+<?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"
+   version="1.0"
+   width="210mm"
+   height="297mm"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docname="skin.svg"
+   sodipodi:docbase="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata21859">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     inkscape:window-height="931"
+     inkscape:window-width="1280"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:zoom="1"
+     inkscape:cx="402.19652"
+     inkscape:cy="712.44342"
+     inkscape:window-x="0"
+     inkscape:window-y="33"
+     inkscape:current-layer="svg2"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     showgrid="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3751" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective1361" />
+    <marker
+       inkscape:stockid="CurveIn"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="CurveIn"
+       style="overflow:visible">
+      <path
+         id="path5615"
+         d="M 4.6254930,-5.0456926 C 1.8654930,-5.0456926 -0.37450702,-2.8056926 -0.37450702,-0.045692580 C -0.37450702,2.7143074 1.8654930,4.9543074 4.6254930,4.9543074"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none;fill:none"
+         transform="scale(0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path4606"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Sstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Sstart"
+       style="overflow:visible">
+      <path
+         id="path4600"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.3) translate(-2.3,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInM"
+       style="overflow:visible">
+      <path
+         id="path4538"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(-0.4)" />
+    </marker>
+    <linearGradient
+       id="linearGradient9644">
+      <stop
+         style="stop-color:#f8e70a;stop-opacity:1;"
+         offset="0"
+         id="stop9646" />
+      <stop
+         style="stop-color:#ffa021;stop-opacity:0;"
+         offset="1"
+         id="stop9648" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient3382"
+       gradientUnits="userSpaceOnUse"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       id="linearGradient15469">
+      <stop
+         style="stop-color:#e40000;stop-opacity:1;"
+         offset="0"
+         id="stop15471" />
+      <stop
+         style="stop-color:#ffa700;stop-opacity:1;"
+         offset="1"
+         id="stop15473" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient10979">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop10981" />
+      <stop
+         style="stop-color:yellow;stop-opacity:1;"
+         offset="1"
+         id="stop10983" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9201">
+      <stop
+         style="stop-color:#007d00;stop-opacity:1;"
+         offset="0"
+         id="stop9203" />
+      <stop
+         style="stop-color:#00d900;stop-opacity:0;"
+         offset="1"
+         id="stop9205" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient16486">
+      <stop
+         style="stop-color:#008930;stop-opacity:1;"
+         offset="0"
+         id="stop16488" />
+      <stop
+         style="stop-color:black;stop-opacity:0.37113401;"
+         offset="1"
+         id="stop16490" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient10211">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop10213" />
+      <stop
+         style="stop-color:#1e9f9f;stop-opacity:1;"
+         offset="1"
+         id="stop10215" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6102">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6104" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6106" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5207">
+      <stop
+         id="stop5209"
+         offset="0"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop5211"
+         offset="1"
+         style="stop-color:#3764ff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5199">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5201" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5203" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5941">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop5943" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop5945" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14138">
+      <stop
+         style="stop-color:#afc6e9;stop-opacity:1;"
+         offset="0"
+         id="stop14140" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop14142" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9152">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop9154" />
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="1"
+         id="stop9156" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4809">
+      <stop
+         id="stop4811"
+         offset="0"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop4813"
+         offset="1"
+         style="stop-color:black;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6481">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6483" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6485" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9267">
+      <stop
+         style="stop-color:#ffd428;stop-opacity:1;"
+         offset="0"
+         id="stop9269" />
+      <stop
+         id="stop10163"
+         offset="0.5"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffd322;stop-opacity:1;"
+         offset="1"
+         id="stop9271" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9267"
+       id="linearGradient20340"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.105702,-0.132634,0.122908,0.142271,-123.5758,437.4912)"
+       x1="205.4043"
+       y1="464.48911"
+       x2="207.19127"
+       y2="498.23825" />
+    <linearGradient
+       id="linearGradient7463">
+      <stop
+         style="stop-color:lime;stop-opacity:1;"
+         offset="0"
+         id="stop7465" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop7467" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7463"
+       id="linearGradient20338"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.120379,0.139344,-0.171115,0.214715,20.77584,293.7269)"
+       x1="331.695"
+       y1="486.6479"
+       x2="399.73358"
+       y2="486.6479" />
+    <linearGradient
+       id="linearGradient19203">
+      <stop
+         style="stop-color:#a49e88;stop-opacity:1;"
+         offset="0"
+         id="stop19205" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop19207" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19203"
+       id="linearGradient20336"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.463664,0.283515,-0.266017,0.432012,-24.98543,167.9069)"
+       x1="209.59592"
+       y1="469.32986"
+       x2="228.7281"
+       y2="494.3299" />
+    <linearGradient
+       id="linearGradient14711">
+      <stop
+         style="stop-color:#f4e3d7;stop-opacity:1"
+         offset="0"
+         id="stop14713" />
+      <stop
+         style="stop-color:#f4e3d7;stop-opacity:0"
+         offset="1"
+         id="stop14715" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12779">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop12781" />
+      <stop
+         style="stop-color:black;stop-opacity:0"
+         offset="1"
+         id="stop12783" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7720">
+      <stop
+         style="stop-color:#f5f5f5;stop-opacity:1"
+         offset="0"
+         id="stop7722" />
+      <stop
+         style="stop-color:#81ed9e;stop-opacity:1"
+         offset="1"
+         id="stop7724" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5684">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop5686" />
+      <stop
+         style="stop-color:black;stop-opacity:0"
+         offset="1"
+         id="stop5688" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4672">
+      <stop
+         style="stop-color:#9b9b9b;stop-opacity:1"
+         offset="0"
+         id="stop4674" />
+      <stop
+         style="stop-color:#2f2f2f;stop-opacity:1"
+         offset="1"
+         id="stop4676" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4644">
+      <stop
+         style="stop-color:#f5f5f5;stop-opacity:1"
+         offset="0"
+         id="stop4646" />
+      <stop
+         style="stop-color:#9e9e9e;stop-opacity:1"
+         offset="1"
+         id="stop4648" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6846">
+      <stop
+         style="stop-color:aqua;stop-opacity:1"
+         offset="0"
+         id="stop6848" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6852" />
+      <stop
+         style="stop-color:aqua;stop-opacity:1"
+         offset="1"
+         id="stop6850" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6830">
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0"
+         id="stop6832" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6836" />
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="1"
+         id="stop6834" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6814">
+      <stop
+         style="stop-color:blue;stop-opacity:1"
+         offset="0"
+         id="stop6816" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6820" />
+      <stop
+         style="stop-color:blue;stop-opacity:1"
+         offset="1"
+         id="stop6818" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6798">
+      <stop
+         style="stop-color:lime;stop-opacity:1"
+         offset="0"
+         id="stop6800" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6804" />
+      <stop
+         style="stop-color:lime;stop-opacity:1"
+         offset="1"
+         id="stop6802" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11729">
+      <stop
+         style="stop-color:#806805;stop-opacity:1"
+         offset="0"
+         id="stop11731" />
+      <stop
+         style="stop-color:#e1e2ce;stop-opacity:1"
+         offset="0.44999999"
+         id="stop11735" />
+      <stop
+         style="stop-color:#b4a66d;stop-opacity:1"
+         offset="1"
+         id="stop11733" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9900">
+      <stop
+         style="stop-color:#ffd988;stop-opacity:1"
+         offset="0"
+         id="stop9902" />
+      <stop
+         style="stop-color:#97812c;stop-opacity:1"
+         offset="1"
+         id="stop9904" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9009">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop9011" />
+      <stop
+         style="stop-color:#d3bc5f;stop-opacity:1"
+         offset="1"
+         id="stop9013" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3974">
+      <stop
+         style="stop-color:#dd9600;stop-opacity:1"
+         offset="0"
+         id="stop3976" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop3978" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4856">
+      <stop
+         style="stop-color:white;stop-opacity:0.84536082"
+         offset="0"
+         id="stop4858" />
+      <stop
+         style="stop-color:#6898f1;stop-opacity:0.46391752"
+         offset="1"
+         id="stop4860" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4791">
+      <stop
+         style="stop-color:#5696f6;stop-opacity:1"
+         offset="0"
+         id="stop4793" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop4795" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient33795">
+      <stop
+         style="stop-color:#ff9e00;stop-opacity:1"
+         offset="0"
+         id="stop33801" />
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0.5"
+         id="stop33803" />
+      <stop
+         style="stop-color:#ffffa0;stop-opacity:1"
+         offset="1"
+         id="stop33799" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21032">
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0"
+         id="stop21034" />
+      <stop
+         style="stop-color:red;stop-opacity:0"
+         offset="1"
+         id="stop21036" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient20139">
+      <stop
+         style="stop-color:#5696f6;stop-opacity:1"
+         offset="0"
+         id="stop20141" />
+      <stop
+         style="stop-color:#5696f6;stop-opacity:0"
+         offset="1"
+         id="stop20143" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient19246">
+      <stop
+         style="stop-color:#f95;stop-opacity:1"
+         offset="0"
+         id="stop19248" />
+      <stop
+         style="stop-color:#f95;stop-opacity:0"
+         offset="1"
+         id="stop19250" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18353">
+      <stop
+         style="stop-color:yellow;stop-opacity:1"
+         offset="0"
+         id="stop18355" />
+      <stop
+         style="stop-color:yellow;stop-opacity:0"
+         offset="1"
+         id="stop18357" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6462">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop6464" />
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="1"
+         id="stop6466" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5880">
+      <stop
+         style="stop-color:#6d91d4;stop-opacity:1"
+         offset="0"
+         id="stop5882" />
+      <stop
+         style="stop-color:black;stop-opacity:0.02061856"
+         offset="1"
+         id="stop5884" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient32988">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop32990" />
+      <stop
+         style="stop-color:#cbcbcb;stop-opacity:1"
+         offset="0.5"
+         id="stop32994" />
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="1"
+         id="stop32992" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11686">
+      <stop
+         style="stop-color:#ffc602;stop-opacity:1"
+         offset="0"
+         id="stop11688" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop11690" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4552">
+      <stop
+         style="stop-color:#ffcd1d;stop-opacity:1"
+         offset="0"
+         id="stop4554" />
+      <stop
+         style="stop-color:#ffe691;stop-opacity:1"
+         offset="0.67500001"
+         id="stop6334" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop4556" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3661">
+      <stop
+         style="stop-color:#ffd74f;stop-opacity:1"
+         offset="0"
+         id="stop3663" />
+      <stop
+         style="stop-color:#795d00;stop-opacity:0"
+         offset="1"
+         id="stop3665" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21068">
+      <stop
+         style="stop-color:#999;stop-opacity:1"
+         offset="0"
+         id="stop21070" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop21072" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient16226">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop16228" />
+      <stop
+         style="stop-color:#e85700;stop-opacity:1"
+         offset="1"
+         id="stop16230" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14070">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop14072" />
+      <stop
+         style="stop-color:#8e8e8e;stop-opacity:1"
+         offset="1"
+         id="stop14074" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1315">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop1317" />
+      <stop
+         style="stop-color:black;stop-opacity:0.73958325"
+         offset="1"
+         id="stop1319" />
+    </linearGradient>
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14528"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.654622,1.623305,-1.369812,-1.396152,926.1889,-533.1723)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14544"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,758.4821,146.9962)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14557"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,984.3714,146.9961)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14565"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-168.9821,146.9962)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14573"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,532.5927,146.9962)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14577"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,645.5374,146.9961)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14698"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-167.3496,22.52986)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14700"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,530.9602,22.52986)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14702"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,643.9049,22.52983)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14704"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,982.7389,22.5298)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient1673"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.615848,0.604192,-0.509843,-0.519646,23.07442,-120.0138)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient1688"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.615848,0.604192,-0.509843,-0.519646,411.4735,-120.7104)" />
+    <linearGradient
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218"
+       id="linearGradient31977"
+       xlink:href="#linearGradient21068"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)" />
+    <linearGradient
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311"
+       id="linearGradient31979"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)" />
+    <radialGradient
+       cx="552.50104"
+       cy="862.58081"
+       r="43.5"
+       fx="552.50104"
+       fy="862.58081"
+       id="radialGradient31999"
+       xlink:href="#linearGradient16226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect" />
+    <radialGradient
+       cx="552.50104"
+       cy="862.58081"
+       r="43.5"
+       fx="552.50104"
+       fy="862.58081"
+       id="radialGradient32063"
+       xlink:href="#linearGradient16226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect" />
+    <linearGradient
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218"
+       id="linearGradient32065"
+       xlink:href="#linearGradient21068"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)" />
+    <linearGradient
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311"
+       id="linearGradient32067"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)" />
+    <linearGradient
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218"
+       id="linearGradient34916"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)" />
+    <linearGradient
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218"
+       id="linearGradient34918"
+       xlink:href="#linearGradient32988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,301.3571,283.759)" />
+    <linearGradient
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218"
+       id="linearGradient34920"
+       xlink:href="#linearGradient32988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,320.3571,312.259)" />
+    <linearGradient
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218"
+       id="linearGradient34922"
+       xlink:href="#linearGradient32988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,339.3571,294.259)" />
+    <linearGradient
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218"
+       id="linearGradient34924"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)" />
+    <linearGradient
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847"
+       id="linearGradient42567"
+       xlink:href="#linearGradient11686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)" />
+    <linearGradient
+       x1="277.07773"
+       y1="733.53235"
+       x2="278.26602"
+       y2="793.7782"
+       id="linearGradient45285"
+       xlink:href="#linearGradient4552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640794,0,-0.129638,0.698173,95.93458,46.3081)" />
+    <linearGradient
+       x1="117.67873"
+       y1="688.06342"
+       x2="116.00877"
+       y2="771.71283"
+       id="linearGradient45290"
+       xlink:href="#linearGradient3661"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640077,0,0,0.78567,90.88485,-10.2088)" />
+    <linearGradient
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218"
+       id="linearGradient45308"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)" />
+    <radialGradient
+       cx="209.83412"
+       cy="683.00934"
+       r="42.25"
+       fx="209.83412"
+       fy="683.00934"
+       id="radialGradient6540"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218"
+       id="linearGradient6542"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       cx="209.83412"
+       cy="683.00934"
+       r="42.25"
+       fx="209.83412"
+       fy="683.00934"
+       id="radialGradient6544"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218"
+       id="linearGradient6546"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218"
+       id="linearGradient5922"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)" />
+    <linearGradient
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321"
+       id="linearGradient5940"
+       xlink:href="#linearGradient5880"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="1029.5582"
+       y1="283.05643"
+       x2="1054.2062"
+       y2="283.05643"
+       id="linearGradient4651"
+       xlink:href="#linearGradient32988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96906,0.184773,-0.740436,0.719541,-2,53.11273)" />
+    <radialGradient
+       cx="360.55887"
+       cy="686.36542"
+       r="13.25"
+       fx="360.55887"
+       fy="686.36542"
+       id="radialGradient7371"
+       xlink:href="#linearGradient6462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)" />
+    <radialGradient
+       cx="360.55887"
+       cy="686.36542"
+       r="13.25"
+       fx="360.55887"
+       fy="686.36542"
+       id="radialGradient7497"
+       xlink:href="#linearGradient6462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)" />
+    <linearGradient
+       x1="445.06726"
+       y1="987.36212"
+       x2="517.55859"
+       y2="987.36212"
+       id="linearGradient21090"
+       xlink:href="#linearGradient21032"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="341.58902"
+       y1="987.36212"
+       x2="414.08035"
+       y2="987.36212"
+       id="linearGradient21092"
+       xlink:href="#linearGradient20139"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212"
+       id="linearGradient21096"
+       xlink:href="#linearGradient19246"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105"
+       id="linearGradient21098"
+       xlink:href="#linearGradient18353"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105"
+       id="linearGradient21120"
+       xlink:href="#linearGradient18353"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(524.0663,-56)" />
+    <linearGradient
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212"
+       id="linearGradient22896"
+       xlink:href="#linearGradient19246"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(523.8557,-56)" />
+    <linearGradient
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847"
+       id="linearGradient22916"
+       xlink:href="#linearGradient11686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)" />
+    <linearGradient
+       x1="236.75435"
+       y1="987.36212"
+       x2="309.24567"
+       y2="987.36212"
+       id="linearGradient22929"
+       xlink:href="#linearGradient11686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,-56)" />
+    <linearGradient
+       x1="212.87547"
+       y1="991.43274"
+       x2="348.82919"
+       y2="991.43274"
+       id="linearGradient4813"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,19.86901)" />
+    <linearGradient
+       x1="212.15625"
+       y1="1068.7657"
+       x2="349.5625"
+       y2="1068.7657"
+       id="linearGradient4815"
+       xlink:href="#linearGradient33795"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.701288,0,0,0.704615,92.93315,227.5991)" />
+    <linearGradient
+       x1="313.19742"
+       y1="886.34753"
+       x2="399.59286"
+       y2="886.34753"
+       id="linearGradient4817"
+       xlink:href="#linearGradient4791"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.920046,0,0,1.086901,0,13.71543)" />
+    <radialGradient
+       cx="964.30762"
+       cy="803.47638"
+       r="91.57444"
+       fx="964.30762"
+       fy="803.47638"
+       id="radialGradient12168"
+       xlink:href="#linearGradient4856"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.735963,-0.187801,0.156725,0.614181,134.2038,527.9897)" />
+    <radialGradient
+       cx="760.87744"
+       cy="895.59747"
+       r="39.191177"
+       fx="760.87744"
+       fy="895.59747"
+       id="radialGradient12897"
+       xlink:href="#linearGradient9009"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.134715,0,774.947)" />
+    <linearGradient
+       x1="722.29547"
+       y1="892.55151"
+       x2="800.47473"
+       y2="892.55151"
+       id="linearGradient12899"
+       xlink:href="#linearGradient9900"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       cx="760.87744"
+       cy="895.59747"
+       r="39.191177"
+       fx="760.87744"
+       fy="895.59747"
+       id="radialGradient12901"
+       xlink:href="#linearGradient9009"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.134715,0,774.947)" />
+    <linearGradient
+       x1="722.29547"
+       y1="892.55151"
+       x2="800.47473"
+       y2="892.55151"
+       id="linearGradient12903"
+       xlink:href="#linearGradient9900"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="594.95349"
+       y1="966.4024"
+       x2="737.51599"
+       y2="966.4024"
+       id="linearGradient12905"
+       xlink:href="#linearGradient11729"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="441.73926"
+       y1="882.7417"
+       x2="520.36261"
+       y2="882.7417"
+       id="linearGradient12907"
+       xlink:href="#linearGradient3974"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="276.34375"
+       y1="958.8125"
+       x2="357.34375"
+       y2="958.8125"
+       id="linearGradient12909"
+       xlink:href="#linearGradient3974"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="474.60648"
+       y1="964.74359"
+       x2="474.72397"
+       y2="939.47852"
+       id="linearGradient12911"
+       xlink:href="#linearGradient3974"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.678923,0,0,0.512431,92.02415,441.1433)" />
+    <linearGradient
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741"
+       id="linearGradient6961"
+       xlink:href="#linearGradient6814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894"
+       id="linearGradient6964"
+       xlink:href="#linearGradient6798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186"
+       id="linearGradient6967"
+       xlink:href="#linearGradient6830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127"
+       id="linearGradient6970"
+       xlink:href="#linearGradient6846"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127"
+       id="linearGradient8122"
+       xlink:href="#linearGradient6846"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186"
+       id="linearGradient8124"
+       xlink:href="#linearGradient6830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894"
+       id="linearGradient8126"
+       xlink:href="#linearGradient6798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741"
+       id="linearGradient8128"
+       xlink:href="#linearGradient6814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <radialGradient
+       cx="902.47498"
+       cy="488.31769"
+       r="114.14286"
+       fx="902.47498"
+       fy="488.31769"
+       id="radialGradient9889"
+       xlink:href="#linearGradient7720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)" />
+    <linearGradient
+       x1="818"
+       y1="467.36218"
+       x2="1046.2856"
+       y2="467.36218"
+       id="linearGradient9891"
+       xlink:href="#linearGradient4672"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       cx="902.47498"
+       cy="488.31769"
+       r="114.14286"
+       fx="902.47498"
+       fy="488.31769"
+       id="radialGradient9893"
+       xlink:href="#linearGradient4644"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)" />
+    <linearGradient
+       x1="811.92737"
+       y1="467.36218"
+       x2="1052.3584"
+       y2="467.36218"
+       id="linearGradient9895"
+       xlink:href="#linearGradient4672"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       cx="410.888"
+       cy="988.72253"
+       r="29.571283"
+       fx="410.888"
+       fy="988.72253"
+       id="radialGradient9897"
+       xlink:href="#linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.820084,0,0,1.263148,109.9248,-278.9086)" />
+    <radialGradient
+       cx="410.888"
+       cy="988.72253"
+       r="29.571283"
+       fx="410.888"
+       fy="988.72253"
+       id="radialGradient9899"
+       xlink:href="#linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.840938,0,0,1.038796,100.9157,-57.20348)" />
+    <radialGradient
+       cx="410.888"
+       cy="988.72253"
+       r="29.571283"
+       fx="410.888"
+       fy="988.72253"
+       id="radialGradient9901"
+       xlink:href="#linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.806533,0,0,1.26326,841.2684,-279.0187)" />
+    <radialGradient
+       cx="410.888"
+       cy="988.72253"
+       r="29.571283"
+       fx="410.888"
+       fy="988.72253"
+       id="radialGradient9903"
+       xlink:href="#linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.825015,0,0,1.061238,849.253,-79.37844)" />
+    <linearGradient
+       x1="645.98792"
+       y1="748.92639"
+       x2="699.22064"
+       y2="748.92639"
+       id="linearGradient11879"
+       xlink:href="#linearGradient16226"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12789"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12791"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12793"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12795"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12797"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12799"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12801"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12803"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13807"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13809"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13811"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13813"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13815"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13817"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13819"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="573.87781"
+       y1="850.04034"
+       x2="670.98364"
+       y2="850.04034"
+       id="linearGradient14719"
+       xlink:href="#linearGradient14711"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="573.87781"
+       y1="850.04034"
+       x2="670.98364"
+       y2="850.04034"
+       id="linearGradient14721"
+       xlink:href="#linearGradient14711"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="573.87781"
+       y1="850.04034"
+       x2="670.98364"
+       y2="850.04034"
+       id="linearGradient14738"
+       xlink:href="#linearGradient14711"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="573.87781"
+       y1="850.04034"
+       x2="670.98364"
+       y2="850.04034"
+       id="linearGradient14740"
+       xlink:href="#linearGradient14711"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9009"
+       id="radialGradient21982"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.134715,0,774.947)"
+       cx="760.87744"
+       cy="895.59747"
+       fx="760.87744"
+       fy="895.59747"
+       r="39.191177" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9900"
+       id="linearGradient21984"
+       gradientUnits="userSpaceOnUse"
+       x1="722.29547"
+       y1="892.55151"
+       x2="800.47473"
+       y2="892.55151" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9009"
+       id="radialGradient21986"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.134715,0,774.947)"
+       cx="760.87744"
+       cy="895.59747"
+       fx="760.87744"
+       fy="895.59747"
+       r="39.191177" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9900"
+       id="linearGradient21988"
+       gradientUnits="userSpaceOnUse"
+       x1="722.29547"
+       y1="892.55151"
+       x2="800.47473"
+       y2="892.55151" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11729"
+       id="linearGradient21990"
+       gradientUnits="userSpaceOnUse"
+       x1="594.95349"
+       y1="966.4024"
+       x2="737.51599"
+       y2="966.4024" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3974"
+       id="linearGradient21992"
+       gradientUnits="userSpaceOnUse"
+       x1="441.73926"
+       y1="882.7417"
+       x2="520.36261"
+       y2="882.7417" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3974"
+       id="linearGradient21994"
+       gradientUnits="userSpaceOnUse"
+       x1="276.34375"
+       y1="958.8125"
+       x2="357.34375"
+       y2="958.8125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3974"
+       id="linearGradient21996"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.678923,0,0,0.512431,92.02415,441.1433)"
+       x1="474.60648"
+       y1="964.74359"
+       x2="474.72397"
+       y2="939.47852" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="linearGradient21998"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,19.86901)"
+       x1="212.87547"
+       y1="991.43274"
+       x2="348.82919"
+       y2="991.43274" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient33795"
+       id="linearGradient22000"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.701288,0,0,0.704615,92.93315,227.5991)"
+       x1="212.15625"
+       y1="1068.7657"
+       x2="349.5625"
+       y2="1068.7657" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient22002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.920046,0,0,1.086901,0,13.71543)"
+       x1="313.19742"
+       y1="886.34753"
+       x2="399.59286"
+       y2="886.34753" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4856"
+       id="radialGradient22004"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.735963,-0.187801,0.156725,0.614181,134.2038,527.9897)"
+       cx="964.30762"
+       cy="803.47638"
+       fx="964.30762"
+       fy="803.47638"
+       r="91.57444" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23057"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,982.7389,22.5298)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23061"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,643.9049,22.52983)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23063"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,530.9602,22.52986)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23065"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-167.3496,22.52986)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23067"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.654622,1.623305,-1.369812,-1.396152,926.1889,-533.1723)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23069"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,984.3714,146.9961)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23071"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,758.4821,146.9962)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23073"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,645.5374,146.9961)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23075"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,532.5927,146.9962)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23077"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-168.9821,146.9962)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16226"
+       id="radialGradient23079"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect"
+       cx="552.50104"
+       cy="862.58081"
+       fx="552.50104"
+       fy="862.58081"
+       r="43.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21068"
+       id="linearGradient23081"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)"
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23083"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)"
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3661"
+       id="linearGradient23087"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640077,0,0,0.78567,90.88485,-10.2088)"
+       x1="117.67873"
+       y1="688.06342"
+       x2="116.00877"
+       y2="771.71283" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4552"
+       id="linearGradient23089"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640794,0,-0.129638,0.698173,95.93458,46.3081)"
+       x1="277.07773"
+       y1="733.53235"
+       x2="278.26602"
+       y2="793.7782" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient23091"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23093"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16226"
+       id="radialGradient23095"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect"
+       cx="552.50104"
+       cy="862.58081"
+       fx="552.50104"
+       fy="862.58081"
+       r="43.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21068"
+       id="linearGradient23097"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)"
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23099"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)"
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23101"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient23103"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,301.3571,283.759)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient23105"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,320.3571,312.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient23107"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,339.3571,294.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient23111"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23113"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient23115"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23117"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient23119"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23121"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient23123"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient23125"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient23127"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96906,0.184773,-0.740436,0.719541,-2,53.11273)"
+       x1="1029.5582"
+       y1="283.05643"
+       x2="1054.2062"
+       y2="283.05643" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient23129"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient23145"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient23147"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient23149"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient23151"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient23153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient23155"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient23157"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient23159"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23561"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.615848,0.604192,-0.509843,-0.519646,23.07442,-120.0138)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23621"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.615848,0.604192,-0.509843,-0.519646,411.4735,-120.7104)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient18353"
+       id="linearGradient23731"
+       gradientUnits="userSpaceOnUse"
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19246"
+       id="linearGradient23733"
+       gradientUnits="userSpaceOnUse"
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient23735"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,-56)"
+       x1="236.75435"
+       y1="987.36212"
+       x2="309.24567"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient20139"
+       id="linearGradient23737"
+       gradientUnits="userSpaceOnUse"
+       x1="341.58902"
+       y1="987.36212"
+       x2="414.08035"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21032"
+       id="linearGradient23739"
+       gradientUnits="userSpaceOnUse"
+       x1="445.06726"
+       y1="987.36212"
+       x2="517.55859"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient18353"
+       id="linearGradient23741"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(524.0663,-56)"
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19246"
+       id="linearGradient23743"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(523.8557,-56)"
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7720"
+       id="radialGradient23745"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient23747"
+       gradientUnits="userSpaceOnUse"
+       x1="818"
+       y1="467.36218"
+       x2="1046.2856"
+       y2="467.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4644"
+       id="radialGradient23749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient23751"
+       gradientUnits="userSpaceOnUse"
+       x1="811.92737"
+       y1="467.36218"
+       x2="1052.3584"
+       y2="467.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient23753"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.820084,0,0,1.263148,109.9248,-278.9086)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient23755"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.840938,0,0,1.038796,100.9157,-57.20348)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient23757"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.806533,0,0,1.26326,841.2684,-279.0187)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient23759"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.825015,0,0,1.061238,849.253,-79.37844)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16226"
+       id="radialGradient24181"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect"
+       cx="552.50104"
+       cy="862.58081"
+       fx="552.50104"
+       fy="862.58081"
+       r="43.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21068"
+       id="linearGradient24183"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)"
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24185"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)"
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3661"
+       id="linearGradient24187"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640077,0,0,0.78567,90.88485,-10.2088)"
+       x1="117.67873"
+       y1="688.06342"
+       x2="116.00877"
+       y2="771.71283" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4552"
+       id="linearGradient24189"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640794,0,-0.129638,0.698173,95.93458,46.3081)"
+       x1="277.07773"
+       y1="733.53235"
+       x2="278.26602"
+       y2="793.7782" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient24191"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24193"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16226"
+       id="radialGradient24195"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect"
+       cx="552.50104"
+       cy="862.58081"
+       fx="552.50104"
+       fy="862.58081"
+       r="43.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21068"
+       id="linearGradient24197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)"
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24199"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)"
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24201"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24203"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,301.3571,283.759)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24205"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,320.3571,312.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24207"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,339.3571,294.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24209"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient24211"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24213"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient24215"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24217"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient24219"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient24225"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24227"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96906,0.184773,-0.740436,0.719541,-2,53.11273)"
+       x1="1029.5582"
+       y1="283.05643"
+       x2="1054.2062"
+       y2="283.05643" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient24229"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient24231"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient24233"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient24235"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient24237"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient24239"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient24241"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient24243"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient24245"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19203"
+       id="linearGradient24247"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.463664,0.283515,-0.266017,0.432012,-24.98543,167.9069)"
+       x1="209.59592"
+       y1="469.32986"
+       x2="228.7281"
+       y2="494.3299" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7463"
+       id="linearGradient24249"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.120379,0.139344,-0.171115,0.214715,20.77584,293.7269)"
+       x1="331.695"
+       y1="486.6479"
+       x2="399.73358"
+       y2="486.6479" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9267"
+       id="linearGradient24251"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.105702,-0.132634,0.122908,0.142271,-123.5758,437.4912)"
+       x1="205.4043"
+       y1="464.48911"
+       x2="207.19127"
+       y2="498.23825" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient13239"
+       gradientUnits="userSpaceOnUse"
+       x1="514.1665"
+       y1="770.00311"
+       x2="552.85059"
+       y2="770.00311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient13241"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,1,1104.701,0.426478)"
+       x1="514.1665"
+       y1="770.00311"
+       x2="552.85059"
+       y2="770.00311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14138"
+       id="linearGradient14144"
+       x1="682.19747"
+       y1="742.489"
+       x2="749.28423"
+       y2="742.489"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5941"
+       id="radialGradient6081"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.238095,0,630.1944)"
+       cx="595.61743"
+       cy="827.13019"
+       fx="595.61743"
+       fy="827.13019"
+       r="10.991182" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient6085"
+       gradientUnits="userSpaceOnUse"
+       x1="514.1665"
+       y1="770.00311"
+       x2="552.85059"
+       y2="770.00311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient6087"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,1,1104.701,0.426478)"
+       x1="514.1665"
+       y1="770.00311"
+       x2="552.85059"
+       y2="770.00311" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5941"
+       id="radialGradient6115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.238095,0,630.1944)"
+       cx="595.61743"
+       cy="827.13019"
+       fx="595.61743"
+       fy="827.13019"
+       r="10.991182" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14138"
+       id="linearGradient7977"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.999435,-3.359396e-2,2.090913e-2,0.999781,-74.89763,93.16569)"
+       x1="682.19747"
+       y1="742.489"
+       x2="749.28423"
+       y2="742.489" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5941"
+       id="radialGradient7982"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.238095,0,630.1944)"
+       cx="595.61743"
+       cy="827.13019"
+       fx="595.61743"
+       fy="827.13019"
+       r="10.991182" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5941"
+       id="radialGradient9764"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.238095,0,630.1944)"
+       cx="595.61743"
+       cy="827.13019"
+       fx="595.61743"
+       fy="827.13019"
+       r="10.991182" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient3109"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321"
+       gradientTransform="matrix(-0.326639,-0.315927,0.325985,-0.316561,303.7813,371.9517)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient3121"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.279302,0,0,0.352463,339.8541,-9.09588)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient3242"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient2953"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.326639,-0.315927,0.325985,-0.316561,303.7813,371.9517)"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient2965"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.279302,0,0,0.352463,339.8541,-9.09588)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient2973"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.326639,-0.315927,0.325985,-0.316561,303.7813,371.9517)"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient2976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.394857,-0.381908,0.394066,-0.382674,272.3576,400.6259)"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient18353"
+       id="linearGradient4526"
+       gradientUnits="userSpaceOnUse"
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19246"
+       id="linearGradient4528"
+       gradientUnits="userSpaceOnUse"
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient4530"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,-56)"
+       x1="236.75435"
+       y1="987.36212"
+       x2="309.24567"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient20139"
+       id="linearGradient4532"
+       gradientUnits="userSpaceOnUse"
+       x1="341.58902"
+       y1="987.36212"
+       x2="414.08035"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21032"
+       id="linearGradient4534"
+       gradientUnits="userSpaceOnUse"
+       x1="445.06726"
+       y1="987.36212"
+       x2="517.55859"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient18353"
+       id="linearGradient4536"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(524.0663,-56)"
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19246"
+       id="linearGradient4538"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(523.8557,-56)"
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7720"
+       id="radialGradient4540"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient4542"
+       gradientUnits="userSpaceOnUse"
+       x1="818"
+       y1="467.36218"
+       x2="1046.2856"
+       y2="467.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4644"
+       id="radialGradient4544"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient4546"
+       gradientUnits="userSpaceOnUse"
+       x1="811.92737"
+       y1="467.36218"
+       x2="1052.3584"
+       y2="467.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4548"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.820084,0,0,1.263148,109.9248,-278.9086)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.840938,0,0,1.038796,100.9157,-57.20348)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.806533,0,0,1.26326,841.2684,-279.0187)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.825015,0,0,1.061238,849.253,-79.37844)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient4556"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient4558"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient4560"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient4562"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient4564"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient4566"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient4568"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15286"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15288"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,719.1127,73.72802)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15290"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15292"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15294"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,757.1127,83.30868)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15296"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15416"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.226661,-2.698342e-3,1.91067e-3,0.160496,490.7324,83.30868)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15420"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,719.1127,73.72802)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15424"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15426"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15428"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,757.1127,83.30868)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15430"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.226661,-2.698342e-3,1.91067e-3,0.160496,490.7324,83.30868)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15442"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15472"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15474"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,719.1127,73.72802)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15476"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3661"
+       id="radialGradient18282"
+       cx="590.40625"
+       cy="17.705935"
+       fx="590.40625"
+       fy="17.705935"
+       r="9.96875"
+       gradientTransform="matrix(1,0,0,0.862069,0,2.442198)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient16399"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.510756,8.596396e-3,-9.491026e-3,0.563911,199.3096,272.8201)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9201"
+       id="linearGradient16401"
+       gradientUnits="userSpaceOnUse"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient21760"
+       gradientUnits="userSpaceOnUse"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient9650"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient18524"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20472"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695"
+       spreadMethod="repeat" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20484"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="repeat"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20486"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20502"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="repeat"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20504"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient21491"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="repeat"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient21493"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient3567"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4133997,0.4055754,-0.3422418,-0.3488223,10.276589,-74.784609)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient17059"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,869.7944,22.52976)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient21912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4133997,0.4055754,-0.3422418,-0.3488223,-42.950333,-257.45813)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient21932"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4134002,0.4055758,-0.3422416,-0.3488226,336.05906,-255.33691)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient21936"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.3941246,0.3788101,-0.3262839,-0.3258024,186.88118,-258.82238)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient22911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4134002,0.4055758,-0.3422416,-0.3488226,336.05906,-255.33691)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+  </defs>
+  <g
+     id="g13090"
+     transform="matrix(0.4319372,0,0,0.4498758,-158.61068,263.50967)">
+    <path
+       id="path1949"
+       style="fill:#faf8e5"
+       d="M 502.36734,1001.8219 C 500.85685,1000.9055 500.86123,1000.8106 502.69092,994.79585 C 503.71105,991.44235 505.20419,987.4402 506.00902,985.90219 L 507.47234,983.10574 L 503.68786,983.52174 C 501.05428,983.81116 499.20561,983.64401 497.60893,982.97209 C 495.61939,982.13482 494.31862,982.12303 487.82076,982.8834 C 481.32764,983.64319 479.69511,983.62878 475.59419,982.77505 C 468.03486,981.2015 463.1967,978.13448 460.12905,972.97152 C 457.96582,969.33067 457.53667,967.85991 457.49 [...]
+    <path
+       id="path1947"
+       style="fill:#ede3d4"
+       d="M 502.59942,1001.6069 C 501.4642,1000.5616 501.54276,999.87292 503.51273,993.60057 C 504.69819,989.82604 506.27613,985.78205 507.01925,984.61369 C 508.51473,982.26266 508.4069,982.20689 504.22677,983.16887 C 501.94662,983.69355 500.66128,983.61723 498.36009,982.82058 C 495.80822,981.93713 494.38751,981.90643 487.75947,982.59186 C 478.45722,983.55376 473.14726,982.78619 467.52056,979.66627 C 460.91983,976.00627 456.17912,967.16156 457.45754,960.89186 C 457.90458,958.69948 457.77 [...]
+    <path
+       id="path1945"
+       style="fill:#e5dac8"
+       d="M 502.76271,1001.725 C 501.90983,1000.8734 502.04684,999.62422 503.56917,994.37217 C 504.57781,990.89227 506.12854,986.80152 507.01523,985.28169 C 508.82224,982.18436 508.50572,981.36225 505.9436,982.49842 C 504.87476,982.97242 502.96023,983.09664 500.94597,982.8228 C 497.13262,982.30426 491.63571,982.21925 482.29908,982.53421 C 474.65809,982.79201 470.65178,981.69146 465.4461,977.90428 C 460.1932,974.08287 456.2939,965.40525 457.83238,960.96056 C 458.53393,958.93373 458.46304, [...]
+    <path
+       id="path1943"
+       style="fill:#d8c9b6"
+       d="M 502.81458,1001.7768 C 502.03045,1000.9939 502.18949,999.61512 503.62508,994.75074 C 504.60741,991.42203 506.24395,987.12057 507.26183,985.19177 L 509.11252,981.68491 L 507.34076,982.1214 C 503.03335,983.18231 499.81742,983.2479 497.61208,982.31981 C 495.62594,981.48395 494.30333,981.46945 487.8557,982.21237 C 479.06505,983.22522 475.18705,982.73468 469.05881,979.83464 C 461.75571,976.3788 457.40865,969.30813 457.97066,961.79943 L 458.24034,958.19642 L 455.19336,957.32303 C 45 [...]
+    <path
+       id="path1941"
+       style="fill:#c9b6a0"
+       d="M 503.27677,1001.7384 C 502.30579,1000.9339 502.30768,1000.2552 503.29075,996.71415 C 504.89423,990.93863 505.8141,988.49423 507.72071,984.9425 C 508.63672,983.23602 509.2234,981.70497 509.02443,981.54004 C 508.82546,981.37519 507.09913,981.68663 505.18814,982.2322 C 502.04725,983.12883 501.39149,983.12211 498.35865,982.16242 C 495.45408,981.24335 494.14122,981.20527 488.57911,981.87916 C 474.32079,983.60659 465.21988,980.22592 460.32233,971.38266 C 458.73189,968.51094 458.3159 [...]
+    <path
+       id="path1987"
+       style="fill:#951313"
+       d="M 579.32288,945.23537 C 579.32288,944.87589 579.87627,944.58178 580.55264,944.58178 C 581.22902,944.58178 581.56304,944.87589 581.2949,945.23537 C 581.02677,945.59484 580.47337,945.88894 580.06513,945.88894 C 579.65688,945.88894 579.32288,945.59484 579.32288,945.23537 z " />
+    <path
+       id="path1985"
+       style="fill:#951313"
+       d="M 630.65789,937.66469 C 630.69574,936.9033 630.88264,936.74844 631.13446,937.26982 C 631.36232,937.74163 631.3343,938.30533 631.07218,938.52252 C 630.81006,938.7397 630.62364,938.35367 630.65789,937.66469 z " />
+    <path
+       id="path1983"
+       style="fill:#951313"
+       d="M 523.31007,937.07276 C 524.29532,936.08913 525.6837,936.29864 525.6837,937.43094 C 525.6837,937.76919 524.93032,938.04595 524.0095,938.04595 C 522.61626,938.04595 522.49887,937.88263 523.31007,937.07276 z " />
+    <path
+       id="path1981"
+       style="fill:#951313"
+       d="M 630.74939,931.18333 C 630.76546,930.10491 630.94225,929.74286 631.14224,930.37878 C 631.34224,931.0147 631.32909,931.89704 631.11303,932.33953 C 630.89694,932.78203 630.73331,932.26173 630.74939,931.18333 z " />
+    <path
+       id="path1979"
+       style="fill:#951313"
+       d="M 443.77187,930.85653 C 443.77187,929.95785 443.95092,929.59021 444.16974,930.03955 C 444.38857,930.4889 444.38857,931.22417 444.16974,931.67351 C 443.95092,932.12285 443.77187,931.7552 443.77187,930.85653 z " />
+    <path
+       id="path1977"
+       style="fill:#951313"
+       d="M 487.88057,930.66005 C 486.94971,928.63146 487.72551,925.62787 489.18033,925.62787 C 490.01372,925.62787 490.17289,925.96083 489.72704,926.77163 C 489.38112,927.40071 489.07691,928.87127 489.05103,930.03955 C 488.99519,932.56033 488.80001,932.66381 487.88057,930.66005 z " />
+    <path
+       id="path1975"
+       style="fill:#951313"
+       d="M 444.49842,925.9002 C 444.53627,925.13881 444.72318,924.98394 444.97499,925.50532 C 445.20285,925.97712 445.17483,926.54084 444.91272,926.75802 C 444.6506,926.9752 444.46417,926.58918 444.49842,925.9002 z " />
+    <path
+       id="path1973"
+       style="fill:#951313"
+       d="M 472.85843,922.015 C 472.90098,920.93725 475.15085,918.83364 475.73941,919.3213 C 476.04519,919.57464 475.5164,920.42734 474.56435,921.21618 C 473.6123,922.00501 472.84463,922.36448 472.85843,922.015 z " />
+    <path
+       id="path1971"
+       style="fill:#951313"
+       d="M 444.56068,920.3992 C 444.56068,919.50052 444.73973,919.13288 444.95855,919.58222 C 445.17738,920.03156 445.17738,920.76684 444.95855,921.21618 C 444.73973,921.66551 444.56068,921.29788 444.56068,920.3992 z " />
+    <path
+       id="path1969"
+       style="fill:#951313"
+       d="M 550.98795,914.78928 C 551.02579,914.02789 551.2127,913.87302 551.46451,914.3944 C 551.69238,914.8662 551.66436,915.42993 551.40224,915.64711 C 551.14012,915.86429 550.9537,915.47827 550.98795,914.78928 z " />
+    <path
+       id="path1967"
+       style="fill:#951313"
+       d="M 529.43056,872.87995 C 530.40671,872.72417 532.00406,872.72417 532.98021,872.87995 C 533.95637,873.03573 533.15769,873.16319 531.20538,873.16319 C 529.25308,873.16319 528.4544,873.03573 529.43056,872.87995 z " />
+    <path
+       id="path1965"
+       style="fill:#951313"
+       d="M 540.47391,872.90835 C 541.01623,872.72704 541.90364,872.72704 542.44595,872.90835 C 542.98825,873.08966 542.54455,873.23801 541.45993,873.23801 C 540.37531,873.23801 539.93161,873.08966 540.47391,872.90835 z " />
+    <path
+       id="path1963"
+       style="fill:#951313"
+       d="M 553.1442,872.89473 C 553.71363,872.70594 554.39397,872.72915 554.65609,872.94633 C 554.91821,873.16351 554.45231,873.31798 553.62078,873.2896 C 552.70185,873.25824 552.51494,873.10337 553.1442,872.89473 z " />
+    <path
+       id="path1937"
+       style="fill:#951313"
+       d="M 545.99559,872.22636 C 546.97175,872.07057 548.56909,872.07057 549.54525,872.22636 C 550.5214,872.38215 549.72273,872.50961 547.77043,872.50961 C 545.81812,872.50961 545.01944,872.38215 545.99559,872.22636 z " />
+    <path
+       id="path3961"
+       style="fill:url(#radialGradient22004);fill-opacity:1;stroke:#000000;stroke-width:3.67062211;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(1.244123,0,0,0.954503,-693.7876,116.3065)"
+       d="M 1081.5879,860.56061 C 1081.5879,902.77296 1040.5886,936.99283 990.01345,936.99283 C 939.43827,936.99283 898.43899,902.77296 898.43899,860.56061 C 898.43899,818.34826 939.43827,784.12839 990.01345,784.12839 C 1040.5886,784.12839 1081.5879,818.34826 1081.5879,860.56061 L 1081.5879,860.56061 z " />
+    <text
+       xml:space="preserve"
+       id="text6648"
+       style="font-size:68.54483795px;font-style:normal;font-weight:normal;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(0.630603,1.585784)"
+       y="615.23743"
+       x="713.86377"><tspan
+         id="tspan6650"
+         style="fill:#808080;font-family:Arial Black"
+         y="615.23743"
+         x="713.86377">Authors</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text6644"
+       style="font-size:68.54482269px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.88828206;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.3853211;font-family:Bitstream Vera Sans"
+       transform="scale(0.630603,1.585784)"
+       y="612.98938"
+       x="707.52148"><tspan
+         id="tspan6646"
+         style="fill:#ffffff;stroke:#000000;stroke-width:1.88828206;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.3853211;font-family:Arial Black"
+         y="612.98938"
+         x="707.52148">Authors</tspan></text>
+  </g>
+  <text
+     xml:space="preserve"
+     id="text22931"
+     style="font-size:27.52882576px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.39196366px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931228)"
+     y="544.15887"
+     x="24.405096"><tspan
+       id="tspan22933"
+       style="stroke-width:0.39196366"
+       y="544.15887"
+       x="24.405096">Windows dialogs  icons</tspan></text>
+  <g
+     id="g12170"
+     transform="matrix(0.4319372,0,0,0.4498758,18.231026,171.00785)">
+    <rect
+       id="rect23834"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.03204477;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="875.74768"
+       x="126.0412"
+       ry="3.6935918"
+       rx="3.8469896"
+       height="11.788779"
+       width="12.154853" />
+    <rect
+       id="rect22941"
+       style="color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="872.5824"
+       x="20.323393"
+       ry="8.0265341"
+       rx="8.3598824"
+       height="35.138783"
+       width="151.98308" />
+    <rect
+       id="rect22945"
+       style="color:#000000;fill:#f8faee;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4.00652599;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="891.11914"
+       x="20.350714"
+       rx="0"
+       height="114.16743"
+       width="151.97687" />
+    <path
+       id="rect23842"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.56422842;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 158.49055,878.70062 L 157.49829,879.64318 L 159.58546,881.64203 L 157.49829,883.62464 L 158.49055,884.58344 L 160.57772,882.58458 L 162.682,884.58344 L 163.67427,883.62464 L 161.58709,881.64203 L 163.67427,879.64318 L 162.682,878.70062 L 160.57772,880.69948 L 158.49055,878.70062 z " />
+    <rect
+       id="rect23847"
+       style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60069585;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="878.26733"
+       x="142.79971"
+       height="6.7494717"
+       width="7.1054482" />
+    <rect
+       id="rect24736"
+       style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60069585;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="881.26709"
+       x="128.26984"
+       height="0.74994129"
+       width="7.6975689" />
+    <rect
+       id="rect24738"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="922.56213"
+       x="38.681862"
+       height="20.998356"
+       width="25.263815" />
+    <rect
+       id="rect24740"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="965.20441"
+       x="38.681862"
+       height="20.998356"
+       width="25.263815" />
+    <path
+       id="path24753"
+       style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.89635372;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 40.809598,911.37143 C 41.671713,912.1272 50.069084,939.85801 52.909465,934.84078 C 55.749848,929.8236 62.671602,907.39677 65.284628,901.91556 C 65.284628,901.91556 85.426303,899.02152 85.300786,899.09789 C 83.258501,901.01303 63.116189,930.65337 58.376025,938.85439 C 53.746942,946.86326 51.343507,956.45969 46.494131,945.8154 C 41.64475,935.17112 31.623529,922.50006 30.793189,922.56258 L 40.809598,911.37143 z " />
+  </g>
+  <g
+     id="g4797"
+     transform="matrix(0.4319372,0,0,0.4498758,18.911187,161.30876)">
+    <path
+       id="path32874"
+       style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 222.9139,971.83763 C 224.31188,984.37252 231.43303,979.98107 235.52407,980.16963 C 248.05036,979.31895 302.15353,957.8916 314.34608,969.18834 C 328.07467,981.9082 309.77123,985.26097 314.15627,994.98106 C 318.83077,1005.3427 362.97638,979.65533 372.0669,986.77687 C 380.11625,993.08276 365.01248,1003.6742 374.14148,1007.1155 L 421.92941,1025.1302 C 419.64367,1024.2843 371.28014,1026.1402 359.90159,1021.5514 C 348.52305,1016.9625 367.90754,1007.4422 356.01446,1002.2013 C 343.72 [...]
+    <g
+       id="g31971"
+       style="stroke:#000000;stroke-width:5.69030762;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.647295,-0.271121,0.269841,0.650366,-46.38199,391.29)">
+      <path
+         id="rect31968"
+         style="color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030762;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 217.03863,1016.6698 C 225.90296,1002.2057 241.91515,1002.0683 250.20732,1016.6698 C 258.49949,1031.2712 240.83356,1054.7056 249.84679,1078.6808 C 210.77979,1064.0771 208.1743,1031.1339 217.03863,1016.6698 z " />
+      <path
+         id="path31966"
+         style="color:#000000;fill:#ffd42a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030762;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 220.174,985.51775 C 220.75236,998.84302 225.21669,1008.8408 225.21669,1008.8408 C 225.21669,1008.8408 241.10352,1008.8408 241.10352,1008.8408 C 241.10352,1008.8408 245.77889,998.84302 246.35725,985.51775 L 220.174,985.51775 z " />
+      <path
+         id="path31065"
+         style="color:#000000;fill:#f4eed7;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030762;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 220.05246,985.21867 L 246.47869,985.21867 C 247.88454,957.15577 249.63979,907.26755 245.36077,886.16681 C 239.30506,856.30492 227.195,856.30489 221.13932,886.16681 C 216.86029,907.26758 218.6466,957.15578 220.05246,985.21867 z " />
+    </g>
+    <g
+       id="g35698"
+       transform="translate(0,4.724942)">
+      <path
+         id="path31976"
+         style="color:#000000;fill:url(#linearGradient21998);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030905;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.701288,0,0,0.704615,92.93315,213.5991)"
+         d="M 346.82919,991.43274 C 346.82919,1005.5699 317.29034,1017.0303 280.85233,1017.0303 C 244.41432,1017.0303 214.87547,1005.5699 214.87547,991.43274 C 214.87547,977.29559 244.41432,965.83516 280.85233,965.83516 C 317.29034,965.83516 346.82919,977.29559 346.82919,991.43274 L 346.82919,991.43274 z " />
+      <path
+         id="path33846"
+         style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030905;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.701288,0,0,0.704615,92.93315,229.1006)"
+         d="M 346.82919,991.43274 C 346.82919,1005.5699 317.29034,1017.0303 280.85233,1017.0303 C 244.41432,1017.0303 214.87547,1005.5699 214.87547,991.43274 C 214.87547,977.29559 244.41432,965.83516 280.85233,965.83516 C 317.29034,965.83516 346.82919,977.29559 346.82919,991.43274 L 346.82919,991.43274 z " />
+      <path
+         id="rect31978"
+         style="color:#000000;fill:url(#linearGradient22000);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 243.11836,912.92949 L 243.11836,1003.3844 L 243.71007,1003.3844 C 245.06363,1012.8683 265.22012,1020.4053 289.8855,1020.4053 C 314.55089,1020.4053 334.72928,1012.8683 336.08285,1003.3844 L 336.67456,1003.3844 L 336.67456,912.92949 L 336.12668,912.92949 C 335.11525,922.53769 314.78034,930.21461 289.8855,930.21461 C 264.99067,930.21454 244.67767,922.53769 243.66624,912.92949 L 243.11836,912.92949 z " />
+    </g>
+    <g
+       id="g33816"
+       style="stroke:#000000;stroke-width:5.24876118;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.277598,-0.646844,0.807082,0.211518,-689.7975,708.6869)">
+      <path
+         id="path33812"
+         style="opacity:1;color:#000000;fill:#f6cc00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.24876118;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="translate(-321.2316,177.7409)"
+         d="M 346.82919,991.43274 C 346.82919,1005.5699 317.29034,1017.0303 280.85233,1017.0303 C 244.41432,1017.0303 214.87547,1005.5699 214.87547,991.43274 C 214.87547,977.29559 244.41432,965.83516 280.85233,965.83516 C 317.29034,965.83516 346.82919,977.29559 346.82919,991.43274 L 346.82919,991.43274 z " />
+      <path
+         id="path32868"
+         style="color:#000000;fill:#f6cc00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.60145378;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.844693,0,0,0.748403,-277.6133,427.1824)"
+         d="M 346.82919,991.43274 C 346.82919,1005.5699 317.29034,1017.0303 280.85233,1017.0303 C 244.41432,1017.0303 214.87547,1005.5699 214.87547,991.43274 C 214.87547,977.29559 244.41432,965.83516 280.85233,965.83516 C 317.29034,965.83516 346.82919,977.29559 346.82919,991.43274 L 346.82919,991.43274 z " />
+    </g>
+    <text
+       xml:space="preserve"
+       id="text34758"
+       style="font-size:154.30929565px;font-style:normal;font-weight:normal;fill:url(#linearGradient22002);fill-opacity:1;stroke:#000000;stroke-width:4.33082438;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(0.979674,1.020748)"
+       y="1001.9447"
+       x="282.5267"><tspan
+         id="tspan34760"
+         style="fill:url(#linearGradient22002);fill-opacity:1;stroke:#000000;stroke-width:4.33082438;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Benguiat Bk BT"
+         y="1001.9447"
+         x="282.5267">a</tspan></text>
+  </g>
+  <g
+     id="g12864"
+     transform="matrix(0.4010001,0,0,0.4010001,-84.566987,294.76916)">
+    <g
+       id="g4195"
+       transform="matrix(0.55729,0.197335,-0.177243,0.494042,299.7619,400.7691)">
+      <path
+         id="path4211"
+         style="fill:#f8fcf7"
+         d="M 812.02557,795.05377 L 812.02557,663.55377 L 904.02557,663.55377 L 996.02557,663.55377 L 996.02557,795.05377 L 996.02557,926.55377 L 904.02557,926.55377 L 812.02557,926.55377 L 812.02557,795.05377 z " />
+      <path
+         id="path4209"
+         style="fill:#e6e9e5"
+         d="M 818.76986,923.74306 C 815.86924,923.5031 814.6967,922.81848 813.61986,920.7361 C 812.08668,917.77125 811.73311,910.85255 813.07249,910.02477 C 813.53829,909.73689 813.93352,886.53599 813.95076,858.46721 C 813.96801,830.39844 814.16052,807.12273 814.37856,806.74342 C 814.5966,806.36411 814.4355,803.57877 814.02057,800.55377 C 813.60564,797.52877 813.64889,792.62704 814.11667,789.66104 C 814.58445,786.69504 814.73639,783.89489 814.45432,783.43849 C 814.17225,782.98209 813.969 [...]
+      <path
+         id="path4207"
+         style="fill:#d7d9d5"
+         d="M 900.92189,923.55556 C 899.99848,923.0158 884.3034,922.65348 863.92189,922.70142 C 844.45392,922.74722 826.95057,922.77684 825.02557,922.76726 C 818.03454,922.73246 815.02017,921.99107 813.5946,919.95579 C 811.97756,917.64714 811.77627,911.70133 813.25204,909.83706 C 813.78178,909.16788 814.09866,906.46788 813.95623,903.83706 C 813.8138,901.20625 813.77114,878.46627 813.86142,853.30377 C 814.00468,813.37673 814.21649,807.55377 815.52557,807.55377 C 817.44738,807.55377 817.42 [...]
+      <path
+         id="path4205"
+         style="fill:#e7d4c9"
+         d="M 900.92189,923.55556 C 899.99848,923.0158 884.3034,922.65348 863.92189,922.70142 C 844.45392,922.74722 826.95057,922.77684 825.02557,922.76726 C 818.03454,922.73246 815.02017,921.99107 813.5946,919.95579 C 811.97756,917.64714 811.77627,911.70133 813.25204,909.83706 C 813.78178,909.16788 814.09866,906.46788 813.95623,903.83706 C 813.8138,901.20625 813.77114,878.46627 813.86142,853.30377 C 814.00468,813.37673 814.21649,807.55377 815.52557,807.55377 C 817.44738,807.55377 817.42 [...]
+      <path
+         id="path4203"
+         style="fill:#dec6b7"
+         d="M 900.15318,922.69278 C 899.39836,922.1932 884.34447,921.7118 866.70009,921.623 C 845.18008,921.5147 834.18561,921.10156 833.3017,920.36798 C 832.57698,919.76651 831.4877,917.30335 830.8811,914.8943 C 829.98732,911.34478 829.51719,910.7308 828.40187,911.65643 C 826.70192,913.06727 826.63293,915.9522 828.23771,918.52186 C 829.82031,921.056 828.77123,921.97128 824.42525,921.84809 C 820.04052,921.7238 819.2617,921.00657 820.81342,918.52186 C 822.42038,915.94872 822.34862,913.066 [...]
+      <path
+         id="path4201"
+         style="fill:#d9b6a7"
+         d="M 891.52557,921.4949 C 886.02557,921.04221 870.99197,920.71013 858.11756,920.75695 C 831.67968,920.8531 832.03147,920.95614 832.01925,913.11264 C 832.01382,909.63005 831.57637,908.8053 828.93821,907.30377 C 824.94173,905.02914 823.56294,905.0966 819.98508,907.74183 C 817.76813,909.38089 817.02557,910.74036 817.02557,913.16004 C 817.02557,918.11524 816.15361,919.69266 814.03984,918.5614 C 812.03696,917.4895 811.9235,911.42113 813.89405,910.76428 C 814.71611,910.49026 815.02557 [...]
+      <path
+         id="path4199"
+         style="fill:#d2a89a"
+         d="M 901.02557,921.55858 C 900.20057,921.02278 896.40457,920.5775 892.59002,920.56908 C 886.85168,920.55641 885.25369,920.17726 883.33273,918.37261 C 881.11952,916.29341 880.94947,916.27558 879.69486,917.99136 C 878.56335,919.53879 878.08481,919.60771 876.28335,918.48269 C 874.67574,917.47871 873.86025,917.44608 872.78013,918.34251 C 871.70524,919.23458 870.62179,919.22763 868.19893,918.3131 C 865.76472,917.39429 864.30463,917.38742 861.93042,918.28358 C 859.55222,919.18125 858. [...]
+      <path
+         id="path4197"
+         style="fill:#cda394"
+         d="M 885.65451,919.03985 C 884.75859,918.14394 884.02557,917.06529 884.02557,916.64286 C 884.02557,914.82206 879.41445,913.77528 877.02557,915.05377 C 872.38042,917.53978 867.60267,912.80948 871.49556,909.57868 C 874.44114,907.13406 878.97724,907.73976 882.6043,911.06202 C 884.486,912.78559 886.02557,914.71775 886.02557,915.35572 C 886.02557,915.99369 887.26307,916.78134 888.77557,917.10605 C 890.28807,917.43077 892.42557,918.08389 893.52557,918.55743 C 895.31699,919.32862 895.2 [...]
+    </g>
+    <g
+       id="g9933"
+       transform="translate(-126.2218,-1.22947)">
+      <rect
+         id="rect9935"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-0.985935,0.167129,0.16871,0.985666,0,0)"
+         y="1029.7926"
+         x="-565.01947"
+         height="116.82966"
+         width="2.5678744" />
+      <rect
+         id="rect9937"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.981474,0.191593,-0.19145,0.981502,0,0)"
+         y="763.79895"
+         x="890.80157"
+         height="117.90984"
+         width="2.8053782" />
+      <g
+         id="g9939"
+         transform="matrix(0.571057,0,0,0.646281,293.2046,457.7222)">
+        <path
+           id="path9941"
+           style="opacity:1;color:#000000;fill:url(#radialGradient21982);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           d="M 800.06862,895.59747 C 800.06862,898.51334 782.52213,900.87711 760.87744,900.87711 C 739.23275,900.87711 721.68626,898.51334 721.68626,895.59747 C 721.68626,892.6816 739.23275,890.31783 760.87744,890.31783 C 782.52213,890.31783 800.06862,892.6816 800.06862,895.59747 z " />
+        <path
+           id="path9943"
+           style="color:#000000;fill:url(#linearGradient21984);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           transform="translate(-2.027946e-7,12.18378)"
+           d="M 799.86556,884.22593 C 793.36754,893.23219 782.51097,900.87711 760.87744,900.87711 C 739.24391,900.87711 727.66931,891.94233 721.68626,883.81981 C 756.92502,889.9117 765.34483,889.4341 799.86556,884.22593 z " />
+      </g>
+      <rect
+         id="rect9945"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.999488,-3.199729e-2,-6.823932e-2,0.997669,0,0)"
+         y="948.75696"
+         x="793.65533"
+         height="119.00449"
+         width="2.421216" />
+    </g>
+    <g
+       id="g9925">
+      <rect
+         id="rect8100"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-0.985935,0.167129,0.16871,0.985666,0,0)"
+         y="1029.7926"
+         x="-565.01947"
+         height="116.82966"
+         width="2.5678744" />
+      <rect
+         id="rect8102"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.981474,0.191593,-0.19145,0.981502,0,0)"
+         y="763.79895"
+         x="890.80157"
+         height="117.90984"
+         width="2.8053782" />
+      <g
+         id="g9911"
+         transform="matrix(0.571057,0,0,0.646281,293.2046,457.7222)">
+        <path
+           id="path8109"
+           style="opacity:1;color:#000000;fill:url(#radialGradient21986);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           d="M 800.06862,895.59747 C 800.06862,898.51334 782.52213,900.87711 760.87744,900.87711 C 739.23275,900.87711 721.68626,898.51334 721.68626,895.59747 C 721.68626,892.6816 739.23275,890.31783 760.87744,890.31783 C 782.52213,890.31783 800.06862,892.6816 800.06862,895.59747 z " />
+        <path
+           id="path8111"
+           style="color:#000000;fill:url(#linearGradient21988);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           transform="translate(-2.027946e-7,12.18378)"
+           d="M 799.86556,884.22593 C 793.36754,893.23219 782.51097,900.87711 760.87744,900.87711 C 739.24391,900.87711 727.66931,891.94233 721.68626,883.81981 C 756.92502,889.9117 765.34483,889.4341 799.86556,884.22593 z " />
+      </g>
+      <rect
+         id="rect8098"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.999488,-3.199729e-2,-6.823932e-2,0.997669,0,0)"
+         y="948.75696"
+         x="793.65533"
+         height="119.00449"
+         width="2.421216" />
+    </g>
+    <path
+       id="path7172"
+       style="color:#000000;fill:url(#linearGradient21990);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 666.98477,874.01151 C 661.91215,874.01154 657.79726,877.03628 657.79727,880.76151 C 657.7973,883.28322 659.69239,885.47812 662.48477,886.63651 L 662.48477,915.10526 L 596.45352,915.10526 L 596.73477,922.57401 L 662.23477,928.01151 L 662.48477,928.01151 L 662.48477,1033.7303 C 659.87852,1037.3812 648.16738,1048.352 634.76602,1050.9491 C 622.71362,1053.2844 649.18306,1058.8524 667.45352,1058.7928 C 685.7232,1058.7333 709.07681,1053.1347 697.79727,1050.9491 C 688.57051,1049.161  [...]
+    <path
+       id="path11769"
+       style="color:#000000;fill:url(#linearGradient21992);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(-0.134374,0.335517,-0.340315,-0.132479,1032.981,877.1416)"
+       d="M 507.72468,916.81576 L 484.07619,918.83319 L 460.36885,919.96576 L 451.14238,898.09813 L 442.73927,875.90109 L 460.68548,860.36872 L 479.19942,845.51763 L 499.51726,857.78573 L 519.36261,870.80429 L 513.97352,893.91875 L 507.72468,916.81576 z " />
+    <g
+       id="g4054"
+       style="stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.649307,0.410145,-0.289594,0.919597,699.6512,1.482277)">
+      <g
+         id="g3996"
+         style="stroke:#000000;stroke-width:4.76802254;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.576811,0,0,0.686329,128.7083,280.1342)">
+        <path
+           id="rect3032"
+           style="fill:url(#linearGradient21994);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.76802254;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 276.84375,911.0625 L 276.84375,989.28125 L 277.09375,989.28125 C 276.92316,989.86231 276.84375,990.46384 276.84375,991.0625 C 276.84375,999.6226 294.76374,1006.5625 316.84375,1006.5625 C 338.92375,1006.5625 356.84374,999.62261 356.84375,991.0625 C 356.84375,990.46304 356.73354,989.86305 356.5625,989.28125 L 356.84375,989.28125 L 356.84375,911.0625 L 276.84375,911.0625 z " />
+        <path
+           id="path3034"
+           style="fill:#f2d8a1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.74592447;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           transform="matrix(1.009334,0,0,1,-3.743411,21.52787)"
+           d="M 357.2452,887.52399 C 357.25372,896.09086 339.50823,903.03745 317.61511,903.03745 C 295.72199,903.03745 277.9765,896.09086 277.98502,887.52399 C 277.9765,878.95712 295.72199,872.01053 317.61511,872.01053 C 339.50823,872.01053 357.25372,878.95712 357.2452,887.52399 L 357.2452,887.52399 z " />
+      </g>
+      <path
+         id="rect3932"
+         style="fill:url(#linearGradient21996);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.99999976;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 334.9799,922.80826 C 330.15845,922.80826 326.25154,927.12009 326.25154,932.42554 C 326.25154,937.731 330.15845,942.02679 334.9799,942.02678 C 335.41809,942.02678 335.83965,941.98324 336.26058,941.91458 L 465.5309,941.91458 L 465.5309,922.92046 L 336.26058,922.92046 C 335.83965,922.8518 335.41809,922.80826 334.9799,922.80826 z " />
+      <path
+         id="path3934"
+         style="color:#000000;fill:#dd9600;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:9.71709728;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0,0.24316,-0.391992,0,813.2404,855.1861)"
+         d="M 357.2452,887.52399 C 357.25372,896.09086 339.50823,903.03745 317.61511,903.03745 C 295.72199,903.03745 277.9765,896.09086 277.98502,887.52399 C 277.9765,878.95712 295.72199,872.01053 317.61511,872.01053 C 339.50823,872.01053 357.25372,878.95712 357.2452,887.52399 L 357.2452,887.52399 z " />
+    </g>
+  </g>
+  <g
+     style="display:inline"
+     id="layer1" />
+  <rect
+     id="rect19117"
+     style="fill:#ddddd3;fill-opacity:1;stroke:black;stroke-width:1.29999995;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     y="809.36218"
+     x="295"
+     ry="10.456966"
+     rx="10.456965"
+     height="19"
+     width="0" />
+  <text
+     xml:space="preserve"
+     id="text13940"
+     style="font-size:22.53170586px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.32081166px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931229)"
+     y="40.768425"
+     x="26.500059"><tspan
+       id="tspan13942"
+       style="stroke-width:0.32081166"
+       y="40.768425"
+       x="26.500059">TuxGuitar Player 0.8 Version</tspan></text>
+  <text
+     xml:space="preserve"
+     id="text14708"
+     style="font-size:7.94642258px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.11314224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931229)"
+     y="54.076897"
+     x="26.042126"><tspan
+       id="tspan14710"
+       style="stroke-width:0.11314224"
+       y="54.076897"
+       x="26.042126">Buttons defaut</tspan></text>
+  <text
+     xml:space="preserve"
+     id="text14712"
+     style="font-size:7.94658804px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.11314419px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931229)"
+     y="54.680504"
+     x="192.78673"><tspan
+       id="tspan14714"
+       style="stroke-width:0.11314419"
+       y="54.680504"
+       x="192.78673">Buttons is on</tspan></text>
+  <g
+     id="g14668"
+     transform="matrix(0.2437635,0,0,0.2437635,21.28266,-45.301701)">
+    <rect
+       id="rect11961"
+       style="fill:url(#radialGradient23057);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="423.20502"
+       x="468.68112"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path11963"
+       style="fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.3790741;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 486.4644,431.15917 L 486.4644,473.09596 L 486.4644,515.03274 L 507.773,494.07524 L 508.08182,493.77025 L 508.08182,506.6236 L 529.39041,489.87067 L 550.67971,473.09596 L 529.39041,456.32124 L 508.08182,439.56831 L 508.08182,452.42167 L 507.773,452.11667 L 486.4644,431.15917 z " />
+  </g>
+  <g
+     id="g14680"
+     transform="matrix(0.2437635,0,0,0.2437635,21.28266,-45.301701)">
+    <rect
+       id="rect11977"
+       style="fill:url(#radialGradient23061);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="423.20511"
+       x="129.84697"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path11979"
+       style="fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.3790741;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 211.84556,431.15928 L 211.84556,473.09605 L 211.84556,515.03284 L 190.53697,494.07534 L 190.22814,493.77035 L 190.22814,506.6237 L 168.91955,489.87077 L 147.63025,473.09605 L 168.91955,456.32135 L 190.22814,439.56842 L 190.22814,452.42178 L 190.53697,452.11678 L 211.84556,431.15928 z " />
+  </g>
+  <g
+     id="g14672"
+     transform="matrix(0.2437635,0,0,0.2437635,21.28266,-45.301701)">
+    <rect
+       id="rect11983"
+       style="fill:url(#radialGradient23063);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="423.20508"
+       x="16.902269"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path11985"
+       style="fill:#aa4400;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.37930822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 107.04162,430.81066 L 90.746186,446.99717 L 90.746186,431.15923 L 69.44012,452.11673 L 69.135125,452.42172 L 69.135125,439.56837 L 47.829059,456.3213 L 26.544777,473.09601 L 47.829059,489.87073 L 69.135125,506.62366 L 69.135125,493.7703 L 69.44012,494.0753 L 90.746186,515.0328 L 90.746186,499.19485 L 107.04162,515.38136 L 107.04162,473.09601 L 107.04162,430.81066 z " />
+  </g>
+  <g
+     id="g14656"
+     transform="matrix(0.2437635,0,0,0.2437635,21.28266,-45.301701)">
+    <rect
+       id="rect11989"
+       style="fill:url(#radialGradient23065);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="scale(-1,1)"
+       y="423.20508"
+       x="-681.40753"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path11991"
+       style="fill:#aa4400;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.37930822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 591.26818,430.81066 L 607.56361,446.99717 L 607.56361,431.15923 L 628.86968,452.11673 L 629.17467,452.42172 L 629.17467,439.56837 L 650.48074,456.3213 L 671.76502,473.09601 L 650.48074,489.87073 L 629.17467,506.62366 L 629.17467,493.7703 L 628.86968,494.0753 L 607.56361,515.0328 L 607.56361,499.19485 L 591.26818,515.38136 L 591.26818,473.09601 L 591.26818,430.81066 z " />
+  </g>
+  <g
+     id="g14488"
+     style="fill-rule:evenodd;display:inline"
+     transform="matrix(0.1699352,0,0,0.1699352,278.84004,51.405169)">
+    <rect
+       id="rect14490"
+       style="fill:url(#radialGradient23067);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="41.576488"
+       x="188.79814"
+       ry="31.803694"
+       rx="31.803694"
+       height="143.13216"
+       width="143.13216" />
+    <path
+       id="path14492"
+       style="opacity:1;fill:#56ff00;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:3.62562513;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="matrix(0.648516,0,0,0.694809,486.9305,19.37587)"
+       d="M -418.05177,221.55162 L -418.05177,134.95318 L -418.05177,48.354749 L -343.05532,91.653969 L -268.05888,134.95319 L -343.05532,178.25241 L -418.05177,221.55162 z " />
+  </g>
+  <g
+     id="g14664"
+     transform="matrix(0.2437635,0,0,0.2437635,223.81,-75.031711)">
+    <rect
+       id="rect14496"
+       style="fill:url(#radialGradient23069);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="547.67133"
+       x="470.31363"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path14498"
+       style="fill:#ffdd55;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.3790741;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 488.0969,555.62547 L 488.0969,597.56226 L 488.0969,639.49904 L 509.4055,618.54154 L 509.71432,618.23655 L 509.71432,631.0899 L 531.02291,614.33697 L 552.31221,597.56226 L 531.02291,580.78754 L 509.71432,564.03461 L 509.71432,576.88797 L 509.4055,576.58297 L 488.0969,555.62547 z " />
+  </g>
+  <g
+     id="g14688"
+     transform="matrix(0.2437635,0,0,0.2437635,223.81,-75.031711)">
+    <rect
+       id="rect14502"
+       style="fill:url(#radialGradient23071);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="547.67133"
+       x="244.42415"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <g
+       id="g14504"
+       style="fill:#2a7fff;fill-opacity:0.75;fill-rule:evenodd"
+       transform="matrix(0.697131,0,0,0.697131,114.7389,494.0779)">
+      <rect
+         id="rect14506"
+         style="opacity:1;fill:#2a7fff;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.43374991;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="86.419327"
+         x="214.01666"
+         ry="31.803694"
+         rx="31.803694"
+         height="124.04787"
+         width="38.168575" />
+      <rect
+         id="rect14508"
+         style="opacity:1;fill:#2a7fff;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.43374991;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="86.419327"
+         x="263.00107"
+         ry="31.803694"
+         rx="31.803694"
+         height="124.04787"
+         width="38.168575" />
+    </g>
+  </g>
+  <g
+     id="g14684"
+     transform="matrix(0.2437635,0,0,0.2437635,194.95323,-74.069821)">
+    <rect
+       id="rect14512"
+       style="fill:url(#radialGradient23073);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="547.67139"
+       x="131.47948"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path14514"
+       style="fill:#ffdd55;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.3790741;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 213.47806,555.62558 L 213.47806,597.56235 L 213.47806,639.49914 L 192.16947,618.54164 L 191.86064,618.23665 L 191.86064,631.09 L 170.55205,614.33707 L 149.26275,597.56235 L 170.55205,580.78765 L 191.86064,564.03472 L 191.86064,576.88808 L 192.16947,576.58308 L 213.47806,555.62558 z " />
+  </g>
+  <g
+     id="g14676"
+     transform="matrix(0.2437635,0,0,0.2437635,195.43418,-74.550761)">
+    <rect
+       id="rect14518"
+       style="fill:url(#radialGradient23075);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="547.67139"
+       x="18.534769"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path14520"
+       style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.37930822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 108.67412,555.27696 L 92.378686,571.46347 L 92.378686,555.62553 L 71.07262,576.58303 L 70.767625,576.88802 L 70.767625,564.03467 L 49.461559,580.7876 L 28.177277,597.56231 L 49.461559,614.33703 L 70.767625,631.08996 L 70.767625,618.2366 L 71.07262,618.5416 L 92.378686,639.4991 L 92.378686,623.66115 L 108.67412,639.84766 L 108.67412,597.56231 L 108.67412,555.27696 z " />
+  </g>
+  <g
+     id="g14660"
+     transform="matrix(0.2437635,0,0,0.2437635,223.81,-75.031711)">
+    <rect
+       id="rect14524"
+       style="fill:url(#radialGradient23077);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="scale(-1,1)"
+       y="547.67139"
+       x="-683.04004"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path14526"
+       style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.37930822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 592.90068,555.27696 L 609.19611,571.46347 L 609.19611,555.62553 L 630.50218,576.58303 L 630.80717,576.88802 L 630.80717,564.03467 L 652.11324,580.7876 L 673.39752,597.56231 L 652.11324,614.33703 L 630.80717,631.08996 L 630.80717,618.2366 L 630.50218,618.5416 L 609.19611,639.4991 L 609.19611,623.66115 L 592.90068,639.84766 L 592.90068,597.56231 L 592.90068,555.27696 z " />
+  </g>
+  <g
+     id="g3617"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/transport_stop_1.png"
+     inkscape:export-xdpi="93.671768"
+     inkscape:export-ydpi="93.671768"
+     transform="matrix(0.6801604,0,0,0.6801604,-12.570086,11.373789)">
+    <rect
+       width="35.760925"
+       height="35.760925"
+       rx="7.9460096"
+       ry="7.9460096"
+       x="-173.95715"
+       y="68.81382"
+       transform="scale(-1,1)"
+       style="fill:url(#radialGradient3567);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74953651;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect1657" />
+    <rect
+       width="26.976021"
+       height="30.992802"
+       rx="22.477581"
+       ry="7.9460096"
+       x="142.58868"
+       y="71.306572"
+       style="fill:#722a2d;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.02269864;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect1692" />
+  </g>
+  <rect
+     id="rect32996"
+     style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     y="525.36218"
+     x="687.5"
+     height="0"
+     width="2" />
+  <rect
+     id="rect2827"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="364.07678"
+     x="26.202015"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_accentuated.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect2837"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="364.07678"
+     x="74.713554"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_fade_in.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect6548"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="363.86951"
+     x="123.14871"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_ghost.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect6595"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="362.53619"
+     x="170.95718"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_grace.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect7500"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="362.53619"
+     x="219.48363"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_hammer.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect7533"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="363.17297"
+     x="268.23099"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_harmonic.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3143"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="363.17297"
+     x="317.33041"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_heavy_accentuated.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3182"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="363.17297"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_palm_mute.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <text
+     xml:space="preserve"
+     id="text17219"
+     style="font-size:23.18305969px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.33008549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931228)"
+     y="111.45198"
+     x="25.711828"><tspan
+       id="tspan17221"
+       style="stroke-width:0.33008549"
+       y="111.45198"
+       x="25.711828">Toolbar  icons</tspan></text>
+  <rect
+     id="rect4097"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.2746"
+     x="264.20929"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect14867"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.48258"
+     x="26.252657"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect15996"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.25077"
+     x="74.015976"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g32002"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path17175"
+       style="fill:url(#radialGradient24181);fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 145.47587,425.69429 C 133.63167,425.69429 124.02417,438.17757 124.02415,453.55736 C 124.02415,468.93714 133.63253,481.2776 145.47587,481.42044 C 158.43256,481.58056 162.04794,467.44225 166.22497,467.54379 C 170.40896,467.64549 173.39835,473.20864 179.66248,473.20863 C 181.97807,473.20861 184.16425,472.36905 186.07384,470.92513 C 182.71696,470.14458 180.23335,467.46246 180.23335,464.27224 C 180.23335,461.8528 181.65978,459.7477 183.8123,458.51958 L 178.63051,458.51958 L 178.63 [...]
+    <g
+       id="g31944">
+      <rect
+         id="rect17179"
+         style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-178.47929"
+         x="445.22119"
+         height="7.0455441"
+         width="15.051844" />
+      <rect
+         id="rect17181"
+         style="fill:#ececec;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-177.67867"
+         x="446.82245"
+         height="5.444284"
+         width="11.849324" />
+    </g>
+    <g
+       id="g31940">
+      <rect
+         id="rect17185"
+         style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-165.349"
+         x="445.22119"
+         height="7.0455441"
+         width="15.051844" />
+      <rect
+         id="rect17187"
+         style="fill:#ececec;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-164.54837"
+         x="446.82245"
+         height="5.444284"
+         width="11.849324" />
+    </g>
+    <rect
+       id="rect17189"
+       style="fill:#50211b;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-205.54079"
+       x="447.94327"
+       height="26.741035"
+       width="10.568314" />
+    <path
+       id="path17191"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,0.46582,-0.445568,0,522.2851,232.6176)"
+       d="M 462.5,843.48718 C 462.5,845.075 461.21282,846.36218 459.625,846.36218 C 458.03718,846.36218 456.75,845.075 456.75,843.48718 C 456.75,841.89936 458.03718,840.61218 459.625,840.61218 C 461.21282,840.61218 462.5,841.89936 462.5,843.48718 z " />
+    <path
+       id="path17193"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,0.46582,-0.445568,0,522.5079,232.6176)"
+       d="M 489.75,843.98718 C 489.75,845.575 488.46282,846.86218 486.875,846.86218 C 485.28718,846.86218 484,845.575 484,843.98718 C 484,842.39936 485.28718,841.11218 486.875,841.11218 C 488.46282,841.11218 489.75,842.39936 489.75,843.98718 L 489.75,843.98718 z " />
+    <rect
+       id="rect17197"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-154.30049"
+       x="444.74075"
+       ry="4.4671021"
+       rx="4.4671021"
+       height="3.0423932"
+       width="16.172722" />
+    <g
+       id="g17199"
+       transform="matrix(0,0.414685,-0.450725,0,527.3259,253.3075)">
+      <rect
+         id="rect17201"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="831.05066"
+         x="466.6709"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17203"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="471.80353"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17205"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="476.93613"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17207"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="482.06876"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17209"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="487.20135"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17211"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="492.33401"
+         height="1.7859424"
+         width="3.2650242" />
+    </g>
+    <rect
+       id="rect17195"
+       style="fill:url(#linearGradient24183);fill-opacity:1;stroke:url(#linearGradient24185);stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-147.45714"
+       x="446.52585"
+       height="2.0050554"
+       width="13.102184" />
+  </g>
+  <rect
+     id="rect22848"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.2508"
+     x="121.7793"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect26806"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.25077"
+     x="169.5426"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect26904"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.25077"
+     x="217.30595"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect2675"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="174.02025"
+     x="74.221016"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g45292"
+     transform="matrix(0.4620139,0,0,0.4620139,114.26669,-118.59787)">
+    <path
+       id="rect2755"
+       style="fill:url(#linearGradient24187);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:round;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 138.73058,531.2239 C 133.41154,531.2239 129.12943,536.48003 129.12943,543.00896 L 128.99617,587.91492 C 128.99617,594.44385 128.69562,599.14377 129.68196,599.88538 L 179.81549,599.69998 C 185.13453,599.69998 189.41664,594.44383 189.41664,587.91492 L 189.41664,551.89685 C 189.41664,545.36793 185.13453,540.11179 179.81549,540.11179 L 163.71357,540.11179 C 162.66613,534.99411 158.91569,531.2239 154.41245,531.2239 L 138.73058,531.2239 z " />
+    <rect
+       id="rect5447"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.74023503;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="matrix(1,0,-7.419016e-2,0.997244,0,0)"
+       y="544.21033"
+       x="176.32399"
+       height="54.450268"
+       width="46.882996" />
+    <rect
+       id="rect4560"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.74563318;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(1,0,-0.181321,0.983424,0,0)"
+       y="554.75165"
+       x="242.48486"
+       height="55.214611"
+       width="46.882996" />
+    <path
+       id="rect2762"
+       style="fill:url(#linearGradient24189);fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 152.00486,552.73763 L 193.00752,552.73763 C 198.33252,552.73763 201.84799,556.89227 200.88974,562.05297 L 195.6123,590.47494 C 194.65405,595.63564 193.79374,599.79028 189.34611,599.79028 L 129.79758,599.97568 C 134.8901,598.97255 136.08684,585.60303 137.3379,580.01541 L 140.66326,562.05297 C 141.62151,556.89227 146.67986,552.73763 152.00486,552.73763 z " />
+  </g>
+  <rect
+     id="rect14372"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="174.02025"
+     x="121.90878"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g43463"
+     transform="matrix(0.4620139,0,0,0.4620139,18.988746,-66.628171)">
+    <rect
+       id="rect11694"
+       style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4.00020504;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.688085,-0.72563,0.715699,0.698409,0,0)"
+       y="574.77551"
+       x="-255.44737"
+       height="17.583229"
+       width="21.502913" />
+    <path
+       id="path11681"
+       style="fill:url(#linearGradient24191);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 243.56035,571.18984 L 263.2346,590.38882 L 293.42803,558.54794 L 293.4154,558.53561 C 301.52985,549.73696 303.79917,538.50041 298.44593,533.27648 C 293.09269,528.05257 282.1187,530.79473 273.76641,539.36129 L 273.75378,539.34896 L 243.56035,571.18984 z " />
+    <g
+       id="g13472"
+       style="stroke:none;stroke-width:10.65287209;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.193838,-0.204415,0.201505,0.196637,23.43035,509.7359)">
+      <rect
+         id="rect13468"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.65287209;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="772.02551"
+         x="349.14398"
+         height="13.878055"
+         width="13.878055" />
+      <rect
+         id="rect13470"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.65287209;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="746.92316"
+         x="349.14398"
+         height="13.878055"
+         width="13.878055" />
+    </g>
+    <path
+       id="path16173"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.60036874;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.833248,0,0,0.833248,129.3815,-26.35132)"
+       d="M 197,683.36218 C 197,686.67589 194.53757,689.36218 191.5,689.36218 C 188.46243,689.36218 186,686.67589 186,683.36218 C 186,680.04847 188.46243,677.36218 191.5,677.36218 C 194.53757,677.36218 197,680.04847 197,683.36218 z " />
+  </g>
+  <rect
+     id="rect18957"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="174.02025"
+     x="169.59654"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g27239"
+     style="stroke:#000000;stroke-width:4.48613548;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     transform="matrix(0.4119487,0,0,0.4119487,84.557559,-38.340731)">
+    <path
+       id="path18941"
+       style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 360.92803,523.51862 L 360.92803,541.25088 L 360.92803,558.98314 L 351.90518,550.12162 L 351.77441,549.99266 L 351.77441,555.42748 L 342.75156,548.34378 L 333.73689,541.25088 L 342.75156,534.15798 L 351.77441,527.07428 L 351.77441,532.50911 L 351.90518,532.38015 L 360.92803,523.51862 z " />
+    <path
+       id="path18943"
+       style="fill:#ffdd55;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 381.93992,524.38097 L 381.93992,542.11324 L 381.93992,559.8455 L 390.96277,550.98397 L 391.09354,550.85501 L 391.09354,556.28983 L 400.11638,549.20614 L 409.13106,542.11324 L 400.11638,535.02033 L 391.09354,527.93663 L 391.09354,533.37145 L 390.96277,533.2425 L 381.93992,524.38097 z " />
+    <rect
+       id="rect18947"
+       style="fill:#5696f6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="571.25983"
+       x="382.67221"
+       ry="14.159336"
+       rx="14.159328"
+       height="36.565613"
+       width="11.267021" />
+    <rect
+       id="rect18949"
+       style="fill:#5696f6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="571.25983"
+       x="397.13196"
+       ry="14.159336"
+       rx="14.159328"
+       height="36.565613"
+       width="11.267021" />
+    <path
+       id="path18951"
+       style="fill:#ffdd55;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 360.92806,571.81035 L 360.92806,589.54262 L 360.92806,607.27489 L 351.90521,598.41336 L 351.77444,598.2844 L 351.77444,603.71922 L 342.7516,596.63553 L 333.73692,589.54262 L 342.7516,582.44972 L 351.77444,575.36601 L 351.77444,580.80084 L 351.90521,580.67188 L 360.92806,571.81035 z " />
+    <path
+       id="path18953"
+       style="fill:#54fb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:11.65600395;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="matrix(0.37892,0,0,0.390929,505.6404,512.6397)"
+       d="M -418.05177,221.55162 L -418.05177,134.95318 L -418.05177,48.354749 L -343.05532,91.653969 L -268.05888,134.95319 L -343.05532,178.25241 L -418.05177,221.55162 z " />
+  </g>
+  <rect
+     id="rect22612"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="174.02025"
+     x="217.2843"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g46196"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-118.59787)">
+    <path
+       id="rect19917"
+       style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.90116501;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 467.50855,540.94367 L 503.60891,540.94367 L 492.37849,567.65561 L 456.27815,567.65561 L 467.50855,540.94367 z " />
+    <path
+       id="path19910"
+       style="fill:url(#linearGradient24193);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.90116501;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 457.70016,558.34707 C 447.92002,558.94002 439.41043,567.52267 437.95776,573.2013 C 436.54168,578.73699 439.59933,592.36751 440.19183,595.15793 C 440.30149,595.67442 479.31823,600.61312 483.97626,600.61312 C 483.58877,597.82398 483.14623,584.55447 483.15878,580.4671 C 483.21427,562.59041 495.7162,559.11261 495.7162,559.11261 L 457.70016,558.34707 z " />
+    <path
+       id="path19914"
+       style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.90116501;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 511.71457,571.48217 C 511.71457,582.93257 511.39274,586.63852 510.76509,592.8703 C 510.38168,593.37582 485.33265,600.27736 484.95405,600.49226 C 484.23649,595.17567 483.5886,588.3454 483.23941,582.65947 C 482.68363,573.60927 485.88401,560.14651 497.82346,559.11941 C 505.75458,558.43043 511.71457,560.03179 511.71457,571.48217 z " />
+    <path
+       id="path19922"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 479.72135,529.68203 L 505.84121,530.3466 C 505.84121,530.3466 495.8971,539.26626 490.25951,558.82776 C 482.38594,558.82373 469.90852,557.92101 464.13966,558.1632 C 470.0212,538.21741 479.72135,529.68203 479.72135,529.68203 z " />
+    <path
+       id="path21721"
+       style="fill:#00ff00;fill-rule:evenodd;stroke:#000000;stroke-width:0.93912643;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 452.69804,567.82906 C 452.69804,567.82906 473.98361,569.33328 474.32419,569.33328 C 474.66476,569.33328 478.24075,563.96106 478.24075,563.96106 L 457.46601,563.1015 L 452.69804,567.82906 z " />
+    <rect
+       id="rect21723"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.87049818;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.993753,0.111602,0,1,0,0)"
+       y="534.75836"
+       x="448.51889"
+       height="5.8020134"
+       width="29.473152" />
+    <path
+       id="path22677"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.97529125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 479.86168,536.92989 L 495.90144,537.10555" />
+    <path
+       id="path22679"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.97529125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 474.78476,543.84821 L 490.82452,544.02386" />
+    <path
+       id="path22681"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.97529125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 471.50763,551.05002 L 487.5474,551.40133" />
+  </g>
+  <rect
+     id="rect23611"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.91042"
+     x="26.171482"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g7666"
+     transform="matrix(0.4620139,0,0,0.4620139,114.26669,-118.59787)">
+    <path
+       id="rect26292"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.91859531;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 47.833889,531.14138 L 26.403966,550.01861 L 26.403966,599.84603 L 93.939784,599.84603 L 93.939784,531.14138 L 47.833889,531.14138 z " />
+    <path
+       id="rect24514"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 78.23077,548.38599 L 78.23077,558.60577 L 68.01099,558.60577 L 68.01099,568.14423 L 78.23077,568.14423 L 78.23077,578.36401 L 87.76923,578.36401 L 87.76923,568.14423 L 97.98901,568.14423 L 97.98901,558.60577 L 87.76923,558.60577 L 87.76923,548.38599 L 78.23077,548.38599 z " />
+    <path
+       id="path26307"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 47.234451,548.9744 L 26.127061,549.11157 L 46.937686,531.35609 L 47.234451,548.9744 z " />
+  </g>
+  <g
+     id="g32023"
+     style="display:inline"
+     transform="matrix(0,-0.4620139,0.4620139,0,-162.63077,218.93502)">
+    <path
+       id="path32025"
+       style="fill:url(#radialGradient24195);fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 145.47587,425.69429 C 133.63167,425.69429 124.02417,438.17757 124.02415,453.55736 C 124.02415,468.93714 133.63253,481.2776 145.47587,481.42044 C 158.43256,481.58056 162.04794,467.44225 166.22497,467.54379 C 170.40896,467.64549 173.39835,473.20864 179.66248,473.20863 C 181.97807,473.20861 184.16425,472.36905 186.07384,470.92513 C 182.71696,470.14458 180.23335,467.46246 180.23335,464.27224 C 180.23335,461.8528 181.65978,459.7477 183.8123,458.51958 L 178.63051,458.51958 L 178.63 [...]
+    <g
+       id="g32027">
+      <rect
+         id="rect32029"
+         style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-178.47929"
+         x="445.22119"
+         height="7.0455441"
+         width="15.051844" />
+      <rect
+         id="rect32031"
+         style="fill:#ececec;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-177.67867"
+         x="446.82245"
+         height="5.444284"
+         width="11.849324" />
+    </g>
+    <g
+       id="g32033">
+      <rect
+         id="rect32035"
+         style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-165.349"
+         x="445.22119"
+         height="7.0455441"
+         width="15.051844" />
+      <rect
+         id="rect32037"
+         style="fill:#ececec;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-164.54837"
+         x="446.82245"
+         height="5.444284"
+         width="11.849324" />
+    </g>
+    <rect
+       id="rect32039"
+       style="fill:#50211b;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-205.54079"
+       x="447.94327"
+       height="26.741035"
+       width="10.568314" />
+    <path
+       id="path32041"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,0.46582,-0.445568,0,522.2851,232.6176)"
+       d="M 462.5,843.48718 C 462.5,845.075 461.21282,846.36218 459.625,846.36218 C 458.03718,846.36218 456.75,845.075 456.75,843.48718 C 456.75,841.89936 458.03718,840.61218 459.625,840.61218 C 461.21282,840.61218 462.5,841.89936 462.5,843.48718 z " />
+    <path
+       id="path32043"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,0.46582,-0.445568,0,522.5079,232.6176)"
+       d="M 489.75,843.98718 C 489.75,845.575 488.46282,846.86218 486.875,846.86218 C 485.28718,846.86218 484,845.575 484,843.98718 C 484,842.39936 485.28718,841.11218 486.875,841.11218 C 488.46282,841.11218 489.75,842.39936 489.75,843.98718 L 489.75,843.98718 z " />
+    <rect
+       id="rect32045"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-154.30049"
+       x="444.74075"
+       ry="4.4671021"
+       rx="4.4671021"
+       height="3.0423932"
+       width="16.172722" />
+    <g
+       id="g32047"
+       transform="matrix(0,0.414685,-0.450725,0,527.3259,253.3075)">
+      <rect
+         id="rect32049"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="831.05066"
+         x="466.6709"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32051"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="471.80353"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32053"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="476.93613"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32055"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="482.06876"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32057"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="487.20135"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32059"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="492.33401"
+         height="1.7859424"
+         width="3.2650242" />
+    </g>
+    <rect
+       id="rect32061"
+       style="fill:url(#linearGradient24197);fill-opacity:1;stroke:url(#linearGradient24199);stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-147.45714"
+       x="446.52585"
+       height="2.0050554"
+       width="13.102184" />
+  </g>
+  <rect
+     id="rect32069"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.91042"
+     x="265.26404"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g34880"
+     transform="matrix(0.4620139,0,0,0.4267007,18.65561,-46.663401)">
+    <rect
+       id="rect33907"
+       style="fill:url(#linearGradient24201);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="526.11218"
+       x="542.25"
+       height="78.5"
+       width="72.5" />
+    <g
+       id="g33899"
+       transform="matrix(1,0,0,0.912791,-86.75002,49.30465)">
+      <path
+         id="path33885"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 646.25,601.61218 L 646.25,529.11218" />
+      <rect
+         id="rect32093"
+         style="fill:url(#linearGradient24203);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="535.61218"
+         x="639"
+         height="27"
+         width="14.5" />
+      <path
+         id="path33887"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 665.25,601.61218 L 665.25,529.11218" />
+      <rect
+         id="rect33889"
+         style="fill:url(#linearGradient24205);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="564.11218"
+         x="658"
+         height="27"
+         width="14.5" />
+      <path
+         id="path33893"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 684.25,601.61218 L 684.25,529.11218" />
+      <rect
+         id="rect33895"
+         style="fill:url(#linearGradient24207);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="546.11218"
+         x="677"
+         height="27"
+         width="14.5" />
+    </g>
+    <rect
+       id="rect34810"
+       style="fill:url(#linearGradient24209);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="526.11218"
+       x="542.25"
+       height="78.5"
+       width="72.5" />
+    <path
+       id="path34814"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.86620283;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 559.49998,600.27658 L 559.49998,534.09924" />
+    <rect
+       id="rect34816"
+       style="fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="540.03241"
+       x="552.25"
+       height="24.645357"
+       width="14.5" />
+    <path
+       id="path34818"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.86620283;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 578.49998,600.27658 L 578.49998,534.09924" />
+    <rect
+       id="rect34820"
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="566.04694"
+       x="571.25"
+       height="24.645357"
+       width="14.5" />
+    <path
+       id="path34822"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.86620283;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 597.49998,600.27658 L 597.49998,534.09924" />
+    <rect
+       id="rect34824"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="549.6167"
+       x="590.25"
+       height="24.645357"
+       width="14.5" />
+  </g>
+  <rect
+     id="rect34943"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.88399"
+     x="26.171482"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect37863"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.65297"
+     x="122.73254"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect37847"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.88399"
+     x="76.069054"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect49778"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.42195"
+     x="170.08907"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52722"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path49780"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 338.50001,696.12549 L 406.50001,696.12549" />
+    <path
+       id="path50667"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(-6.499994,7.263308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path50669"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 369.35853,695.26143 L 369.35853,634.48955" />
+    <path
+       id="path50671"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 338.50001,675.62549 L 406.50001,675.62549" />
+  </g>
+  <rect
+     id="rect50689"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.65297"
+     x="217.44554"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect52500"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.42195"
+     x="267.34311"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52715"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path50709"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 473.56682,634.97014 C 491.05994,635.4857 491.47546,647.90583 491.48512,663.18131 C 486.73449,647.1487 488.86877,643.70599 473.61907,643.74026 C 473.53193,630.54852 473.6402,648.16276 473.56682,634.97014 z " />
+    <path
+       id="path52546"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 441.00001,696.62549 L 509.00001,696.62549" />
+    <path
+       id="path52548"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(96.00001,7.763308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52550"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 471.85853,695.76143 L 471.85853,634.98955" />
+    <path
+       id="path52552"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 441.00001,676.12549 L 509.00001,676.12549" />
+  </g>
+  <g
+     id="g52707"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path52519"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 581.65647,634.49305 C 599.14959,634.96367 599.56511,646.30103 599.57477,660.24482 C 594.82414,645.6099 596.95842,642.46732 581.70872,642.4986 C 581.62158,630.4569 581.72985,646.53556 581.65647,634.49305 z " />
+    <path
+       id="path52570"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 549.00001,696.12549 L 617.00001,696.12549" />
+    <path
+       id="path52572"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(204,7.263308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52574"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 579.85853,695.26143 L 579.85853,634.48955" />
+    <path
+       id="path52576"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 549.00001,675.62549 L 617.00001,675.62549" />
+    <path
+       id="path52578"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 581.51919,644.69678 C 599.01231,645.1674 599.42783,656.50476 599.43749,670.44855 C 594.68686,655.81363 596.82114,652.67105 581.57144,652.70233 C 581.4843,640.66063 581.59257,656.73929 581.51919,644.69678 z " />
+  </g>
+  <rect
+     id="rect52589"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.65297"
+     x="315.16162"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52697"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path52593"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 685.15647,634.99305 C 702.64959,635.46096 703.06511,646.7332 703.07477,660.59689 C 698.32414,646.04604 700.45842,642.92151 685.20872,642.95261 C 685.12158,630.98009 685.22985,646.96638 685.15647,634.99305 z " />
+    <path
+       id="path52597"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 652.50001,696.62549 L 720.50001,696.62549" />
+    <path
+       id="path52599"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(307.5,7.763308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52601"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 683.35853,695.76143 L 683.35853,634.98955" />
+    <path
+       id="path52603"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 652.50001,676.12549 L 720.50001,676.12549" />
+    <path
+       id="path52605"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 685.15647,644.55268 C 702.64959,645.02059 703.06511,656.29283 703.07477,670.15652 C 698.32414,655.60567 700.45842,652.48114 685.20872,652.51224 C 685.12158,640.53972 685.22985,656.52601 685.15647,644.55268 z " />
+    <path
+       id="path52614"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 685.15647,654.60879 C 702.64959,655.07671 703.06511,666.34894 703.07477,680.21263 C 698.32414,665.66178 700.45842,662.53726 685.20872,662.56836 C 685.12158,650.59583 685.22985,666.58212 685.15647,654.60879 z " />
+    <path
+       id="path52629"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 685.15647,664.55689 C 702.64959,665.02481 703.06511,676.29704 703.07477,690.16073 C 698.32414,675.60988 700.45842,672.48536 685.20872,672.51646 C 685.12158,660.54393 685.22985,676.53022 685.15647,664.55689 z " />
+  </g>
+  <rect
+     id="rect52728"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="272.55188"
+     x="25.900524"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52730"
+     style="display:inline"
+     transform="matrix(0.4620139,0,0,0.4620139,-125.53291,-16.498231)">
+    <path
+       id="path52732"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 338.50001,696.12549 L 406.50001,696.12549" />
+    <path
+       id="path52734"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(-6.499994,7.263308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52736"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 369.35853,695.26143 L 369.35853,634.48955" />
+    <path
+       id="path52738"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 338.50001,675.62549 L 406.50001,675.62549" />
+  </g>
+  <rect
+     id="rect52740"
+     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+     transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,0,0)"
+     y="174.604"
+     x="245.46577"
+     height="4.6201973"
+     width="4.8512053" />
+  <rect
+     id="rect52758"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="273.01251"
+     x="76.300064"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52774"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <g
+       id="g52760"
+       style="display:inline"
+       transform="translate(-203,109.5)">
+      <path
+         id="path52762"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 338.50001,696.12549 L 406.50001,696.12549" />
+      <path
+         id="path52764"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(-6.499994,7.263308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52766"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 369.35853,695.26143 L 369.35853,634.48955" />
+      <path
+         id="path52768"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 338.50001,675.62549 L 406.50001,675.62549" />
+    </g>
+    <rect
+       id="rect52770"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="matrix(0.707107,0.707107,-0.707107,0.707107,0,0)"
+       y="431.48001"
+       x="683.43604"
+       height="10.000011"
+       width="10.500011" />
+    <rect
+       id="rect52772"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="matrix(0.707107,0.707107,-0.707107,0.707107,0,0)"
+       y="420.75739"
+       x="694.15863"
+       height="10.00004"
+       width="10.50004" />
+  </g>
+  <rect
+     id="rect52783"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="272.31952"
+     x="124.58059"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52910"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path52789"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 240.00001,804.12549 L 308.00001,804.12549" />
+    <path
+       id="path52795"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 240.00001,783.62549 L 308.00001,783.62549" />
+    <path
+       id="path52791"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="matrix(0.571633,0,0,1,45.35674,115.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52793"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 260.01295,803.45836 L 260.01295,758.79263" />
+    <path
+       id="path52812"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="matrix(0.571633,0,0,1,62.29158,115.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52814"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 277.14348,803.45838 L 277.14348,758.79265" />
+    <path
+       id="path52826"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="matrix(0.571633,0,0,1,79.44058,115.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52828"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 294.49064,803.45838 L 294.49064,758.79265" />
+    <rect
+       id="rect52830"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       y="758.36218"
+       x="258.86331"
+       height="9.6007662"
+       width="36.69611" />
+    <text
+       xml:space="preserve"
+       id="text52858"
+       style="font-size:25.4596386px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.099156,0.909789)"
+       y="832.28827"
+       x="243.78136"><tspan
+         id="tspan52860"
+         style="font-family:Arial Black"
+         y="832.28827"
+         x="243.78136">3</tspan></text>
+  </g>
+  <rect
+     id="rect52923"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="272.78156"
+     x="170.78207"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g54741"
+     transform="matrix(0.4620139,0,0,0.4620139,19.579651,-67.321181)">
+    <path
+       id="path52961"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 339,814.86218 L 405,746.86218" />
+    <text
+       xml:space="preserve"
+       id="text53848"
+       style="font-size:61.26486969px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+       transform="scale(1.199052,0.833992)"
+       y="979.46033"
+       x="305.48175"><tspan
+         id="tspan53850"
+         y="979.46033"
+         x="305.48175">4</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text54737"
+       style="font-size:61.26483154px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+       transform="scale(1.199052,0.833992)"
+       y="937.19122"
+       x="277.58707"><tspan
+         id="tspan54739"
+         y="937.19122"
+         x="277.58707">4</tspan></text>
+  </g>
+  <rect
+     id="rect54748"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="273.24353"
+     x="218.8316"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g57494"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <g
+       id="g56568"
+       transform="translate(4.064981,5.555418)">
+      <g
+         id="g56560">
+        <rect
+           id="rect54762"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect54764"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g56564"
+         transform="translate(0,-0.109804)">
+        <path
+           id="path55655"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="matrix(0.762121,0,0,0.762121,113.6812,182.3594)"
+           d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+        <path
+           id="path55657"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+           transform="matrix(0.762121,0,0,0.762121,113.6813,197.2904)"
+           d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+      </g>
+    </g>
+    <g
+       id="g57487">
+      <path
+         id="path55661"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 440.47831,744.01169 L 515.5217,743.84996" />
+      <path
+         id="path55663"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,816.87437 L 515.5217,816.71263" />
+      <path
+         id="path55665"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,798.65871 L 515.52169,798.49697" />
+      <path
+         id="path55667"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,780.44305 L 515.52169,780.28131" />
+      <path
+         id="path55669"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,762.22737 L 515.5217,762.06564" />
+    </g>
+  </g>
+  <rect
+     id="rect61934"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     transform="scale(-1,1)"
+     y="272.78156"
+     x="-309.60117"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g61936"
+     style="display:inline"
+     transform="matrix(-0.4620139,0,0,0.4620139,509.7772,-67.090201)">
+    <g
+       id="g61938"
+       transform="translate(4.064981,5.555418)">
+      <g
+         id="g61940">
+        <rect
+           id="rect61942"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect61944"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g61946"
+         transform="translate(0,-0.109804)">
+        <path
+           id="path61948"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="matrix(0.762121,0,0,0.762121,113.6812,182.3594)"
+           d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+        <path
+           id="path61950"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+           transform="matrix(0.762121,0,0,0.762121,113.6813,197.2904)"
+           d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+      </g>
+    </g>
+    <g
+       id="g61952">
+      <path
+         id="path61954"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 440.47831,744.01169 L 515.5217,743.84996" />
+      <path
+         id="path61956"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,816.87437 L 515.5217,816.71263" />
+      <path
+         id="path61958"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,798.65871 L 515.52169,798.49697" />
+      <path
+         id="path61960"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,780.44305 L 515.52169,780.28131" />
+      <path
+         id="path61962"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,762.22737 L 515.5217,762.06564" />
+    </g>
+  </g>
+  <rect
+     id="rect2795"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="271.85748"
+     x="316.77866"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g2826"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path2799"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 656.00001,803.12549 L 724.00001,803.12549" />
+    <path
+       id="path2801"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(311,114.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path2803"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 686.85853,802.26143 L 686.85853,741.48955" />
+    <path
+       id="path2805"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 656.00001,782.62549 L 724.00001,782.62549" />
+  </g>
+  <rect
+     id="rect2811"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="271.42603"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g2829"
+     style="display:inline"
+     transform="matrix(0.4620139,0,0,0.4620139,353.68718,-166.28609)">
+    <path
+       id="path2831"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 29.00003,909.12551 L 97.00003,909.12551" />
+    <path
+       id="path2833"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="translate(-316,220.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path2835"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 29.00003,888.62551 L 97.00003,888.62551" />
+  </g>
+  <g
+     id="g6505"
+     transform="matrix(0.354114,0,0,0.354114,-33.453263,-158.43119)">
+    <path
+       id="path3732"
+       style="fill:url(#radialGradient24211);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24213);stroke-width:8.68754482;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       transform="matrix(0.573037,0.525314,-0.525315,0.573037,481.5014,517.0748)"
+       d="M 233.5,675.11218 C 233.5,697.34164 215.47946,715.36218 193.25,715.36218 C 171.02054,715.36218 153,697.34164 153,675.11218 C 153,652.88272 171.02054,634.86218 193.25,634.86218 C 215.47946,634.86218 233.5,652.88272 233.5,675.11218 L 233.5,675.11218 z " />
+    <path
+       id="path3764"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(3.327811e-2,0,0,0.320967,240.7223,764.1587)"
+       d="M -45.194263,751.54019 L -142.80574,751.54019 L -94,667.00617 L -45.194263,751.54019 z " />
+    <path
+       id="path3766"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0,3.388209e-2,-0.231743,0,411.6397,1008.641)"
+       d="M -45.194263,751.54019 L -142.80574,751.54019 L -94,667.00617 L -45.194263,751.54019 z " />
+    <path
+       id="path3768"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="translate(0.978643,0.558407)"
+       d="M 239.53242,1004.8976 C 239.53336,1006.5092 238.22718,1007.8161 236.61561,1007.8161 C 235.00403,1007.8161 233.69785,1006.5092 233.69879,1004.8976 C 233.69785,1003.286 235.00403,1001.9791 236.61561,1001.9791 C 238.22718,1001.9791 239.53336,1003.286 239.53242,1004.8976 L 239.53242,1004.8976 z " />
+    <path
+       id="path4655"
+       style="fill:#ff9955;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+       d="M 272.1753,1012.3511 C 276.84309,986.20902 245.19958,952.26377 213.06198,977.50611 C 195.54275,991.26653 223.78991,993.86796 223.78991,993.86796 L 183.20018,1021.8781 L 179.24219,972.87219 C 179.24219,972.87219 190.92506,987.57904 202.09746,970.01034 C 218.10395,944.83997 281.43491,949.19669 272.1753,1012.3511 z " />
+  </g>
+  <g
+     id="g3157"
+     transform="matrix(0.4620139,0,0,0.4620139,-30.982179,-213.54269)">
+    <path
+       id="path4657"
+       style="fill:url(#radialGradient24215);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24217);stroke-width:8.68754482;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       transform="matrix(0.439208,0.402631,-0.402631,0.439208,452.0883,515.4839)"
+       d="M 233.5,675.11218 C 233.5,697.34164 215.47946,715.36218 193.25,715.36218 C 171.02054,715.36218 153,697.34164 153,675.11218 C 153,652.88272 171.02054,634.86218 193.25,634.86218 C 215.47946,634.86218 233.5,652.88272 233.5,675.11218 L 233.5,675.11218 z " />
+    <path
+       id="path4659"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(2.550624e-2,0,0,0.246007,267.5415,704.8631)"
+       d="M -45.194263,751.54019 L -142.80574,751.54019 L -94,667.00617 L -45.194263,751.54019 z " />
+    <path
+       id="path4661"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0,2.596917e-2,-0.177621,0,398.5423,892.248)"
+       d="M -45.194263,751.54019 L -142.80574,751.54019 L -94,667.00617 L -45.194263,751.54019 z " />
+    <path
+       id="path4663"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.766457,0,0,0.766457,83.78826,119.5963)"
+       d="M 239.53242,1004.8976 C 239.53336,1006.5092 238.22718,1007.8161 236.61561,1007.8161 C 235.00403,1007.8161 233.69785,1006.5092 233.69879,1004.8976 C 233.69785,1003.286 235.00403,1001.9791 236.61561,1001.9791 C 238.22718,1001.9791 239.53336,1003.286 239.53242,1004.8976 L 239.53242,1004.8976 z " />
+    <path
+       id="path6522"
+       style="fill:#00ff00;fill-rule:evenodd;stroke:#000000;stroke-width:3.06582808;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+       d="M 237.73786,895.32552 C 234.1602,875.28872 258.41359,849.27115 283.04568,868.61832 C 296.47341,879.16509 274.82318,881.15897 274.82318,881.15897 L 305.93346,902.62755 L 308.96709,865.06662 C 308.96709,865.06662 300.01267,876.33878 291.44951,862.87313 C 279.18122,843.58112 230.64077,846.92036 237.73786,895.32552 z " />
+  </g>
+  <g
+     id="g6581"
+     transform="matrix(0.4620139,0,0,0.4620139,209.47582,-116.03325)">
+    <text
+       xml:space="preserve"
+       id="text6554"
+       style="font-size:83.65219116px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+       transform="scale(0.849987,1.176489)"
+       y="781.05951"
+       x="441.81683"><tspan
+         id="tspan6556"
+         y="781.05951"
+         x="441.81683">7</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text6567"
+       style="font-size:85.42720032px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans Mono"
+       transform="scale(0.865098,1.155939)"
+       y="794.94482"
+       x="392.89487"><tspan
+         id="tspan6569"
+         y="794.94482"
+         x="392.89487">A</tspan></text>
+  </g>
+  <path
+     id="path6599"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.84805834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 31.433469,254.58377 L 62.850463,254.58377" />
+  <path
+     id="path6601"
+     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.84805799;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+     d="M 45.524822,245.6899 C 45.524822,248.05017 43.197748,249.96354 40.327159,249.96354 C 37.456571,249.96354 35.129496,248.05017 35.129496,245.6899 C 35.129496,243.32964 37.456571,241.41626 40.327159,241.41626 C 43.197748,241.41626 45.524822,243.32964 45.524822,245.6899 z " />
+  <path
+     id="path6603"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.42819726;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     d="M 45.690556,244.58059 L 45.690556,225.81728" />
+  <path
+     id="path6605"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.84805834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     d="M 31.433469,245.11247 L 62.850463,245.11247" />
+  <path
+     id="path6613"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.75689816;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 45.211872,248.30696 C 53.916759,256.05016 61.792607,248.30696 61.792607,248.30696 L 61.792607,248.30696" />
+  <g
+     id="g7524"
+     transform="matrix(0.4620139,0,0,0.4620139,-175.23163,-163.90485)">
+    <path
+       id="path7504"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 585.0017,844.15855 C 602.49482,844.62917 602.91034,855.96653 602.92,869.91032 C 598.16937,855.2754 600.30365,852.13282 585.05395,852.1641 C 584.96681,840.1224 585.07508,856.20106 585.0017,844.15855 z " />
+    <path
+       id="path7506"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 552.34524,905.79099 L 620.34524,905.79099" />
+    <path
+       id="path7508"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(207.3452,216.9288)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path7510"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 583.20376,904.92693 L 583.20376,844.15505" />
+    <path
+       id="path7512"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 552.34524,885.29099 L 620.34524,885.29099" />
+    <path
+       id="path7514"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 584.86442,854.36228 C 602.35754,854.8329 602.77306,866.17026 602.78272,880.11405 C 598.03209,865.47913 600.16637,862.33655 584.91667,862.36783 C 584.82953,850.32613 584.9378,866.40479 584.86442,854.36228 z " />
+    <path
+       id="path7522"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 584.74905,864.74215 C 602.24217,865.21277 602.65769,876.55013 602.66735,890.49392 C 597.91672,875.859 600.051,872.71642 584.8013,872.7477 C 584.71416,860.706 584.82243,876.78466 584.74905,864.74215 z " />
+  </g>
+  <text
+     xml:space="preserve"
+     id="text7535"
+     style="font-size:43.93042374px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans Mono"
+     y="258.69415"
+     x="131.20235"><tspan
+       id="tspan7537"
+       y="258.69415"
+       x="131.20235">X</tspan></text>
+  <rect
+     id="rect3132"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.27638"
+     x="362.48758"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g22906"
+     transform="matrix(0.4620139,0,0,0.4620139,-128.59214,-40.755341)">
+    <g
+       id="g3134"
+       style="display:inline"
+       transform="translate(420,-56)">
+      <rect
+         id="rect3136"
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4.00020504;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.688085,-0.72563,0.715699,0.698409,0,0)"
+         y="574.77551"
+         x="-255.44737"
+         height="17.583229"
+         width="21.502913" />
+      <path
+         id="path3138"
+         style="fill:url(#linearGradient24219);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 243.56035,571.18984 L 263.2346,590.38882 L 293.42803,558.54794 L 293.4154,558.53561 C 301.52985,549.73696 303.79917,538.50041 298.44593,533.27648 C 293.09269,528.05257 282.1187,530.79473 273.76641,539.36129 L 273.75378,539.34896 L 243.56035,571.18984 z " />
+      <g
+         id="g3140"
+         style="stroke:none;stroke-width:10.65287209;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.193838,-0.204415,0.201505,0.196637,23.43035,509.7359)">
+        <rect
+           id="rect3142"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.65287209;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           y="772.02551"
+           x="349.14398"
+           height="13.878055"
+           width="13.878055" />
+        <rect
+           id="rect3144"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.65287209;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           y="746.92316"
+           x="349.14398"
+           height="13.878055"
+           width="13.878055" />
+      </g>
+      <path
+         id="path3146"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.60036874;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.833248,0,0,0.833248,129.3815,-26.35132)"
+         d="M 197,683.36218 C 197,686.67589 194.53757,689.36218 191.5,689.36218 C 188.46243,689.36218 186,686.67589 186,683.36218 C 186,680.04847 188.46243,677.36218 191.5,677.36218 C 194.53757,677.36218 197,680.04847 197,683.36218 z " />
+    </g>
+    <path
+       id="path3155"
+       style="opacity:0.77999998;fill:#54fb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.06582808;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 654.67947,481.30948 C 671.50634,485.47105 691.20183,476.90604 703.07467,498.55094 C 710.65078,512.36265 691.10137,509.32277 691.10137,509.32277 L 710.70966,541.63785 L 728.84064,508.60311 C 728.84064,508.60311 713.68537,511.93526 713.75245,499.43667 C 713.85441,480.43967 677.04539,468.19461 654.67947,481.30948 z " />
+  </g>
+  <g
+     id="g2984"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,2.4823692)">
+    <path
+       d="M 473.91549,228.39543 L 503.52151,228.39543 L 494.31141,250.30197 L 464.70541,250.30197 L 473.91549,228.39543 z "
+       style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.19935703;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4077" />
+    <path
+       d="M 465.8716,242.66801 C 457.85088,243.15429 450.87214,250.19294 449.6808,254.85001 C 448.51947,259.38984 451.02706,270.56827 451.51297,272.8567 C 451.6029,273.28028 483.60065,277.33052 487.42071,277.33052 C 487.10293,275.04314 486.74,264.16077 486.75029,260.80871 C 486.7958,246.14798 497.04867,243.29583 497.04867,243.29583 L 465.8716,242.66801 z "
+       style="fill:url(#linearGradient2965);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.19935703;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4079" />
+    <path
+       d="M 510.16898,253.44014 C 510.16898,262.83065 509.90505,265.86991 509.39031,270.98061 C 509.07588,271.39519 488.53309,277.05516 488.2226,277.2314 C 487.63413,272.87125 487.10279,267.26973 486.81642,262.60668 C 486.36062,255.18458 488.98526,244.14373 498.77684,243.30141 C 505.28118,242.73637 510.16898,244.04965 510.16898,253.44014 z "
+       style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.19935703;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="path4081" />
+    <path
+       d="M 483.93125,219.15972 L 505.35222,219.70474 C 505.35222,219.70474 497.19703,227.01978 492.57362,243.06222 C 486.11649,243.05892 475.88372,242.31859 471.15266,242.51721 C 475.97613,226.15961 483.93125,219.15972 483.93125,219.15972 z "
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.64020598;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="path4083" />
+    <path
+       d="M 461.76935,250.44422 C 461.76935,250.44422 479.22571,251.67783 479.50502,251.67783 C 479.78432,251.67783 482.717,247.27206 482.717,247.27206 L 465.67958,246.56713 L 461.76935,250.44422 z "
+       style="fill:#00ff00;fill-rule:evenodd;stroke:#000000;stroke-width:0.7701804;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4085" />
+    <rect
+       width="24.171026"
+       height="4.7582488"
+       x="458.91107"
+       y="213.1582"
+       transform="matrix(0.993753,0.111602,0,1,0,0)"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.35410452;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4087" />
+    <path
+       d="M 484.04633,225.10371 L 497.20059,225.24777"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.79983926px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path4089" />
+    <path
+       d="M 479.88274,230.77745 L 493.03699,230.9215"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.79983926px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path4091" />
+    <path
+       d="M 477.19515,236.68367 L 490.34942,236.97178"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.79983926px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path4093" />
+    <g
+       transform="matrix(0.870386,0,0,0.870386,65.82635,34.20091)"
+       id="g2980">
+      <rect
+         id="rect5886"
+         style="color:#000000;fill:#ff9955;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.87870872;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="-160.10472"
+         x="518.27454"
+         height="9.4662237"
+         width="33.064384"
+         transform="matrix(0.718795,0.695222,-0.7174,0.696661,0,0)" />
+      <path
+         id="rect5888"
+         style="color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.89792925;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 481.88591,246.17093 L 487.69785,248.42527 L 480.23833,255.66914 L 477.45311,250.64427 L 481.88591,246.17093 z " />
+    </g>
+    <path
+       d="M 454.79288,222.68432 C 462.78239,214.92578 475.74896,214.91317 483.75449,222.65618 C 491.76003,230.3992 491.77304,242.96569 483.78352,250.72423 C 475.79401,258.48277 462.82745,258.49537 454.8219,250.75237 C 446.81637,243.00936 446.80337,230.44285 454.79288,222.68432 L 454.79288,222.68432 z "
+       style="opacity:0.77999998;color:#000000;fill:url(#linearGradient2976);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.74589944;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path4100" />
+  </g>
+  <rect
+     id="rect3703"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.2746"
+     x="315.95493"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g7499"
+     transform="matrix(0.4373357,0,0,0.4683741,-13.068161,-74.527821)">
+    <g
+       id="g7361"
+       style="display:inline"
+       transform="matrix(0.518198,0.328578,-0.328578,0.518198,562.3445,-50.07558)">
+      <path
+         id="path7363"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 799.9099,425.55908 C 817.40302,426.0297 817.81854,437.36706 817.8282,451.31085 C 813.07757,436.67593 815.21185,433.53335 799.96215,433.56463 C 799.87501,421.52293 799.98328,437.60159 799.9099,425.55908 z " />
+      <path
+         id="path7365"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 798.11196,486.32746 L 798.11196,425.55558" />
+      <path
+         id="path7367"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 799.77262,435.76281 C 817.26574,436.23343 817.68126,447.57079 817.69092,461.51458 C 812.94029,446.87966 815.07457,443.73708 799.82487,443.76836 C 799.73773,431.72666 799.846,447.80532 799.77262,435.76281 z " />
+      <path
+         id="path7369"
+         style="fill:url(#radialGradient24225);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(1.090643,0,0,1.062011,390.5269,-245.3025)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    </g>
+    <path
+       id="rect3745"
+       style="color:#000000;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.945538,0.325513,0,1,0,0)"
+       d="M 822.72691,174.61087 L 889.276,169.13496 L 889.276,199.72689 L 823.4895,199.72689 L 822.72691,174.61087 z " />
+    <path
+       id="rect3739"
+       style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.945538,0.325513,0,1,0,0)"
+       d="M 800.22229,188.70871 L 866.00876,188.70871 L 866.00876,219.30063 L 800.49191,214.62408 L 800.22229,188.70871 z " />
+    <rect
+       id="rect3741"
+       style="opacity:1;color:#000000;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.882353,-0.470588,0,1,0,0)"
+       y="907.16882"
+       x="927.44476"
+       height="30.591925"
+       width="26.003122" />
+    <path
+       id="rect3743"
+       style="color:#000000;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.701289,-0.712877,0.945817,0.324701,0,0)"
+       d="M -198.67545,947.41547 L -177.04075,950.94075 L -171.02987,1011.6918 L -199.05916,1012.7404 L -198.67545,947.41547 z " />
+    <path
+       id="rect3753"
+       style="color:#000000;fill:url(#linearGradient24227);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 788.37444,442.41233 C 790.98554,441.49944 800.28366,439.76223 810.12708,450.22181 C 809.39758,451.00304 806.96255,454.45726 805.25704,455.95851 C 798.77005,448.84021 786.55315,444.31821 781.43076,448.7918 C 782.36313,447.56946 787.21848,443.63946 788.37444,442.41233 z " />
+    <g
+       id="g7353"
+       transform="matrix(0.996519,0,0,0.996519,3.974373,5.043832)">
+      <path
+         id="path4656"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 799.9099,425.55908 C 817.40302,426.0297 817.81854,437.36706 817.8282,451.31085 C 813.07757,436.67593 815.21185,433.53335 799.96215,433.56463 C 799.87501,421.52293 799.98328,437.60159 799.9099,425.55908 z " />
+      <path
+         id="path4662"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 798.11196,486.32746 L 798.11196,425.55558" />
+      <path
+         id="path4666"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 799.77262,435.76281 C 817.26574,436.23343 817.68126,447.57079 817.69092,461.51458 C 812.94029,446.87966 815.07457,443.73708 799.82487,443.76836 C 799.73773,431.72666 799.846,447.80532 799.77262,435.76281 z " />
+      <path
+         id="path4660"
+         style="fill:url(#radialGradient24229);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(1.090643,0,0,1.062011,390.5269,-245.3025)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    </g>
+  </g>
+  <path
+     id="rect3184"
+     style="fill:#929292;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96170586;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     d="M 314.45226,173.63294 L 314.45226,173.91463 L 314.45226,215.23367 L 314.45226,215.51535 L 314.71634,215.51535 L 356.05299,215.51535 L 356.31707,215.51535 L 356.31707,215.23367 L 356.31707,173.91463 L 356.31707,173.63294 L 356.05299,173.63294 L 314.71634,173.63294 L 314.45226,173.63294 z M 314.98041,174.1787 L 355.77131,174.1787 L 355.77131,214.96959 L 314.98041,214.96959 L 314.98041,174.1787 z " />
+  <rect
+     id="rect3190"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.40111"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect3192"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.69855"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g8022"
+     transform="matrix(0.5633612,0,0,0.5633612,16.18383,2.0513492)">
+    <g
+       id="g6989"
+       transform="translate(-211.5918,-4.873514)">
+      <path
+         id="path4086"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.01236534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 833.34122,225.07216 L 833.34122,286.35703" />
+      <path
+         id="path4088"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 843.52579,225.73634 L 843.52579,286.55437" />
+      <path
+         id="path4090"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 852.30857,225.73634 L 852.30857,286.55437" />
+      <path
+         id="path4092"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 861.09135,225.73634 L 861.09135,286.55437" />
+      <path
+         id="path4094"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 869.87413,225.73634 L 869.87413,286.55437" />
+      <path
+         id="path4096"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 878.6569,225.73634 L 878.6569,286.55437" />
+      <path
+         id="path4098"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 887.43968,225.73634 L 887.43968,286.55437" />
+      <path
+         id="path4101"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.22246,225.73634 L 896.22246,286.55437" />
+      <rect
+         id="rect4115"
+         style="color:#000000;fill:url(#linearGradient24231);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83745855;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="270.90326"
+         x="870.24017"
+         height="15.065637"
+         width="25.749367" />
+      <rect
+         id="rect3198"
+         style="color:#000000;fill:url(#linearGradient24233);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85693413;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="255.7885"
+         x="834.93457"
+         height="15.699371"
+         width="25.872597" />
+      <rect
+         id="rect3194"
+         style="color:#000000;fill:url(#linearGradient24235);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.77284241;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="225.60927"
+         x="843.66455"
+         height="15.549897"
+         width="35.031761" />
+      <rect
+         id="rect3196"
+         style="color:#000000;fill:url(#linearGradient24237);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83925015;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="240.99434"
+         x="852.5072"
+         height="14.594875"
+         width="43.547024" />
+      <path
+         id="path6856"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 896.28272,225.35563 L 834.8784,225.35563" />
+      <path
+         id="path6858"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,240.53581 L 834.8784,240.53581" />
+      <path
+         id="path6860"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,255.71599 L 834.8784,255.71599" />
+      <path
+         id="path6862"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,270.89618 L 834.8784,270.89618" />
+      <path
+         id="path6864"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,286.07636 L 834.8784,286.07636" />
+      <rect
+         id="rect6880"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.53349"
+         x="843.96301"
+         height="2.1720431"
+         width="8.6314974" />
+      <rect
+         id="rect6882"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.22321"
+         x="857.89111"
+         height="2.7926269"
+         width="7.2583046" />
+      <rect
+         id="rect6884"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.34735"
+         x="852.98682"
+         height="3.1029184"
+         width="13.928099" />
+      <rect
+         id="rect6886"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="871.03455"
+         height="2.7926269"
+         width="2.7463856" />
+      <rect
+         id="rect6888"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="886.11169"
+         height="2.7926269"
+         width="9.2200089" />
+      <g
+         id="g6896"
+         transform="matrix(0.665193,0,0,1.080499,302.4562,-1.363347)">
+        <rect
+           id="rect6890"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect6892"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect6894"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+      <g
+         id="g6901"
+         style="display:inline"
+         transform="matrix(-0.665193,0,0,1.080499,1428.48,13.68581)">
+        <rect
+           id="rect6903"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect6905"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect6907"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+    </g>
+    <path
+       id="rect7021"
+       style="opacity:1;color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 663.20513,248.15279 L 663.20513,258.18327 L 653.17465,258.18327 L 653.17465,266.32173 L 663.20513,266.32173 L 663.20513,276.35221 L 671.34359,276.35221 L 671.34359,266.32173 L 681.37407,266.32173 L 681.37407,258.18327 L 671.34359,258.18327 L 671.34359,248.15279 L 663.20513,248.15279 z " />
+  </g>
+  <g
+     id="g8088"
+     transform="matrix(0.5633612,0,0,0.5633612,16.18383,2.0513492)">
+    <g
+       id="g7916"
+       style="display:inline"
+       transform="translate(-211.5918,85.12649)">
+      <path
+         id="path7918"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.01236534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 833.34122,225.07216 L 833.34122,286.35703" />
+      <path
+         id="path7920"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 843.52579,225.73634 L 843.52579,286.55437" />
+      <path
+         id="path7922"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 852.30857,225.73634 L 852.30857,286.55437" />
+      <path
+         id="path7924"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 861.09135,225.73634 L 861.09135,286.55437" />
+      <path
+         id="path7926"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 869.87413,225.73634 L 869.87413,286.55437" />
+      <path
+         id="path7928"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 878.6569,225.73634 L 878.6569,286.55437" />
+      <path
+         id="path7930"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 887.43968,225.73634 L 887.43968,286.55437" />
+      <path
+         id="path7932"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.22246,225.73634 L 896.22246,286.55437" />
+      <rect
+         id="rect7934"
+         style="color:#000000;fill:url(#linearGradient24239);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83745855;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="270.90326"
+         x="870.24017"
+         height="15.065637"
+         width="25.749367" />
+      <rect
+         id="rect7936"
+         style="color:#000000;fill:url(#linearGradient24241);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85693413;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="255.7885"
+         x="834.93457"
+         height="15.699371"
+         width="25.872597" />
+      <rect
+         id="rect7938"
+         style="color:#000000;fill:url(#linearGradient24243);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.77284241;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="225.60927"
+         x="843.66455"
+         height="15.549897"
+         width="35.031761" />
+      <rect
+         id="rect7940"
+         style="color:#000000;fill:url(#linearGradient24245);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83925015;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="240.99434"
+         x="852.5072"
+         height="14.594875"
+         width="43.547024" />
+      <path
+         id="path7942"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 896.28272,225.35563 L 834.8784,225.35563" />
+      <path
+         id="path7944"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,240.53581 L 834.8784,240.53581" />
+      <path
+         id="path7946"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,255.71599 L 834.8784,255.71599" />
+      <path
+         id="path7948"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,270.89618 L 834.8784,270.89618" />
+      <path
+         id="path7950"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,286.07636 L 834.8784,286.07636" />
+      <rect
+         id="rect7952"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.53349"
+         x="843.96301"
+         height="2.1720431"
+         width="8.6314974" />
+      <rect
+         id="rect7954"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.22321"
+         x="857.89111"
+         height="2.7926269"
+         width="7.2583046" />
+      <rect
+         id="rect7956"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.34735"
+         x="852.98682"
+         height="3.1029184"
+         width="13.928099" />
+      <rect
+         id="rect7958"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="871.03455"
+         height="2.7926269"
+         width="2.7463856" />
+      <rect
+         id="rect7960"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="886.11169"
+         height="2.7926269"
+         width="9.2200089" />
+      <g
+         id="g7962"
+         transform="matrix(0.665193,0,0,1.080499,302.4562,-1.363347)">
+        <rect
+           id="rect7964"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect7966"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect7968"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+      <g
+         id="g7970"
+         style="display:inline"
+         transform="matrix(-0.665193,0,0,1.080499,1428.48,13.68581)">
+        <rect
+           id="rect7972"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect7974"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect7976"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+    </g>
+    <rect
+       id="rect7913"
+       style="color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4.24493694;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="347.35495"
+       x="653.5304"
+       height="8.7881775"
+       width="27.46998" />
+  </g>
+  <g
+     id="g20319"
+     transform="matrix(0.4655032,0,0,0.4314278,354.03978,-4.4490608)">
+    <g
+       id="g20300">
+      <path
+         style="fill:url(#linearGradient24247);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -75.575296,431.90521 C -73.937648,432.42571 -29.496247,420.64933 -29.496247,420.64933 C -34.637534,448.2407 -15.25247,459.98469 -8.1305811,479.65236 L -58.396477,498.5955 C -69.087342,473.32972 -80.466399,465.44724 -75.575296,431.90521 z "
+         id="path10175"
+         sodipodi:nodetypes="ccccc" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -71.027778,449.99442 C -70.009501,447.53999 -68.398618,441.37472 -66.969552,437.93014 C -65.946608,435.46446 -65.237025,431.67221 -63.993519,434.66952 C -63.084799,436.85988 -62.911325,441.30405 -62.911325,443.47319 C -62.911325,444.79542 -62.636319,446.10316 -62.370228,447.38592"
+         id="path19269" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -58.853099,439.23438 C -58.853099,440.64638 -59.715197,444.76223 -57.500357,445.42956 C -57.025146,445.57274 -55.050818,440.65767 -54.794872,439.88651"
+         id="path19271" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -49.925001,429.45254 C -48.979735,429.73734 -50.352286,444.55483 -50.736646,446.40774 C -50.826829,446.84249 -50.917011,445.53824 -51.007194,445.10349"
+         id="path19273" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -50.736646,438.58226 C -51.021829,439.95706 -48.592058,437.30188 -47.760613,436.29983"
+         id="path19275" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -43.972935,438.58226 C -45.10834,444.05576 -35.210389,422.24755 -41.808548,424.23555 C -43.159642,424.64263 -43.033905,437.5076 -43.702387,443.14712 C -43.767419,443.69575 -43.882752,442.06025 -43.972935,441.51682"
+         id="path19277" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -39.914709,437.93014 C -40.051984,439.08824 -38.611318,432.0897 -37.750321,437.27802 C -37.588459,438.25339 -37.479773,446.95305 -37.479773,443.14712"
+         id="path19279" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.18195009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -60.782843,484.92628 C -54.577716,469.84232 -40.969952,454.28974 -30.680157,448.6469"
+         id="path20180" />
+      <g
+         id="g20290"
+         transform="matrix(1,-0.116962,0.135948,0.984099,-62.09387,4.364348)">
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="rect9275"
+           d="M -49.982767,486.1569 L -39.137026,471.65336 L -34.873557,476.58849 L -46.697446,486.95336 L -49.982767,486.1569 z "
+           style="color:#000000;fill:#241f1c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.00000095;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+        <path
+           sodipodi:nodetypes="ccccccccc"
+           id="rect4009"
+           d="M -2.7603501,424.87027 L 1.0377747,429.26675 C 1.5585103,429.86953 0.97082956,431.61824 -0.27989515,433.18765 L -14.302519,453.07614 C -15.553233,454.64553 -32.240422,475.73483 -32.76115,475.13207 L -39.414996,467.42998 C -39.935728,466.82721 -23.123949,445.88214 -21.873234,444.31274 L -5.957931,426.6151 C -4.7072063,425.04569 -3.2810857,424.2675 -2.7603501,424.87027 z "
+           style="color:#000000;fill:url(#linearGradient24249);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+        <path
+           sodipodi:nodetypes="czcczzc"
+           id="path8380"
+           d="M -52.721673,489.88632 C -52.721673,489.88632 -47.18516,478.65824 -45.320698,475.65775 C -43.451737,472.65001 -40.499168,469.76234 -40.499168,469.76234 L -36.773772,474.21779 C -36.773772,474.21779 -37.426884,475.05544 -38.182951,478.38207 C -38.930141,481.66963 -42.073061,481.41261 -44.158348,482.0615 C -46.243634,482.71038 -52.25841,489.68578 -52.721673,489.88632 z "
+           style="fill:url(#linearGradient24251);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.8796891;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <rect
+           transform="matrix(0.66655,-0.74546,0.663245,0.748402,0,0)"
+           y="281.93237"
+           x="-345.08524"
+           height="14.299413"
+           width="2.7105966"
+           id="rect8378"
+           style="color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.65272236;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      </g>
+    </g>
+    <path
+       id="path20317"
+       d="M -69.85298,443.99975 C -70.332761,443.63992 -66.057745,443.13276 -62.012339,440.43582 C -61.570288,440.14112 -61.061958,439.96063 -60.586768,439.72304"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+  <rect
+     id="rect23627"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.68457"
+     x="26.005444"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23629"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="74.339523"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23631"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="122.47703"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23633"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="170.61453"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23635"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="218.75206"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23637"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="266.88956"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23639"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="315.02707"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23685"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g9766"
+     transform="matrix(0.6801604,0,0,0.6801604,-159.07802,125.64074)">
+    <path
+       sodipodi:nodetypes="cscscssc"
+       id="path12302"
+       d="M 690.29712,806.33899 C 696.73115,809.91842 713.17167,819.01654 707.91834,831.53579 C 703.26078,842.63527 700.72452,845.85918 700.72452,845.85918 C 700.72452,845.85918 699.44562,841.814 697.414,840.56405 C 695.42042,839.33751 693.67845,839.19193 693.67845,839.19193 C 694.47719,836.67574 698.83819,830.56582 698.32224,826.59934 C 697.59598,821.01469 684.02284,817.86365 683.7315,812.80058 C 683.44016,807.7375 684.69006,805.11665 690.29712,806.33899 z "
+       style="fill:#ffda5c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       inkscape:transform-center-y="-1.3957057"
+       inkscape:transform-center-x="-2.2680218"
+       transform="matrix(-0.972446,-0.834234,0.747504,-1.033058,657.2054,2164.879)"
+       d="M 606.60861 827.13019 A 10.991182 2.6169484 0 1 1  584.62625,827.13019 A 10.991182 2.6169484 0 1 1  606.60861 827.13019 z"
+       sodipodi:ry="2.6169484"
+       sodipodi:rx="10.991182"
+       sodipodi:cy="827.13019"
+       sodipodi:cx="595.61743"
+       id="path5951"
+       style="fill:url(#radialGradient6081);fill-opacity:1;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:nodetypes="csssssz"
+       id="path12291"
+       d="M 688.00688,782.73476 C 681.28413,779.25117 636.10673,778.4231 623.43682,783.90136 C 610.7669,789.37962 601.34418,795.50064 598.80599,803.20934 C 596.26779,810.91805 591.53198,823.47835 597.77932,831.12638 C 604.02665,838.7744 614.16395,843.81797 625.80657,844.09786 C 637.44919,844.37775 687.99759,843.58515 690.71721,840.07417 C 693.43684,836.56318 694.54874,786.12462 688.00688,782.73476 z "
+       style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="czzzz"
+       id="rect12289"
+       d="M 626.64537,790.62125 C 632.05743,782.1495 680.48654,782.60978 684.9113,788.66276 C 689.23278,794.57446 689.9078,830.0134 685.86504,834.26646 C 681.77401,838.57032 631.7887,841.09821 627.59911,836.22495 C 623.21793,831.12883 621.35549,798.90174 626.64537,790.62125 z "
+       style="fill:url(#linearGradient7977);fill-opacity:1;stroke:#000000;stroke-width:1.29999948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="ccc"
+       id="path12298"
+       d="M 644.62512,816.02125 C 653.16596,828.20399 670.13139,826.24078 675.81727,813.32745 C 666.29419,818.61805 649.49978,817.30747 644.62512,816.02125 z "
+       style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       transform="matrix(1.045493,-5.786072e-2,-0.131469,1.028004,178.2572,93.9675)"
+       id="g13235"
+       style="stroke:#000000;stroke-width:1.25842619;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+      <path
+         style="fill:url(#linearGradient6085);fill-opacity:1;stroke:#000000;stroke-width:1.25842619;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 514.6665,745.65582 C 514.6665,745.65582 532.11281,743.73672 541.53383,745.65582 C 550.95484,747.57491 552.35056,753.3322 552.35056,753.3322 L 552.35056,795.20338 C 552.35056,795.20338 550.60591,789.70778 541.1849,787.87592 C 531.76388,786.04405 514.6665,787.87592 514.6665,787.87592 L 514.6665,745.65582 z "
+         id="rect12334"
+         sodipodi:nodetypes="czcczcc" />
+      <path
+         style="fill:url(#linearGradient6087);fill-opacity:1;stroke:#000000;stroke-width:1.25842619;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 590.03462,746.0823 C 590.03462,746.0823 572.58831,744.1632 563.16729,746.0823 C 553.74628,748.00139 552.35056,753.75868 552.35056,753.75868 L 552.35056,795.62986 C 552.35056,795.62986 554.09521,790.13426 563.51622,788.3024 C 572.93724,786.47053 590.03462,788.3024 590.03462,788.3024 L 590.03462,746.0823 z "
+         id="path13231"
+         sodipodi:nodetypes="czcczcc" />
+    </g>
+    <path
+       sodipodi:nodetypes="csssccczc"
+       id="path12332"
+       d="M 695.41019,838.62042 C 700.14569,841.15924 700.88837,843.47237 700.32054,848.50081 C 699.91686,852.0756 697.61441,855.10314 694.13438,856.67894 C 691.47288,857.8841 687.41491,857.32238 684.23254,856.09748 C 682.29552,855.35192 683.08837,852.66442 684.31205,852.58794 C 683.36498,851.99335 683.02181,849.44083 684.83359,849.02147 C 683.26668,848.4213 684.19241,845.40115 685.54978,845.44861 C 684.52439,844.51298 684.51889,841.35152 686.74802,841.75345 C 688.85054,842.13256 695.536 [...]
+       style="fill:#f4d7d7;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cssscccsc"
+       id="path12327"
+       d="M 616.47306,842.59642 C 609.11971,841.85248 608.289,842.5384 606.36072,847.21702 C 604.54093,851.63234 602.80301,855.13257 605.57704,857.75909 C 608.26763,860.30661 611.06,861.66953 615.97938,862.18413 C 619.3229,862.53389 619.44445,859.85288 618.55719,858.94771 C 619.41319,858.74371 621.21149,857.26159 620.00408,855.5157 C 621.66781,855.41218 621.94956,852.3917 620.74187,851.47597 C 622.117,850.9917 625.27655,846.97293 615.7578,846.89124 C 614.59263,846.88124 615.68265,844.972 [...]
+       style="fill:#f4d7d7;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cscscssc"
+       id="path12300"
+       d="M 601.98808,811.38003 C 593.42745,816.90941 572.79691,830.36838 583.46745,841.45089 C 594.13798,852.53338 603.50388,855.77314 603.50388,855.77314 C 603.50388,855.77314 603.63238,852.67913 606.26744,847.43369 C 608.15568,843.6749 611.44568,842.47821 611.44568,842.47821 C 609.43579,840.29378 595.22475,838.91411 596.36391,833.59398 C 597.52277,828.18182 616.19414,825.80432 613.95955,815.54536 C 612.86556,810.52288 610.0553,808.40088 601.98808,811.38003 z "
+       style="fill:#ffda5c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       transform="matrix(0.64065,-7.819027e-2,8.137048e-2,0.615612,182.9143,353.6568)"
+       d="M 632.25471 802.35638 A 5.2338967 5.40836 0 1 1  621.78692,802.35638 A 5.2338967 5.40836 0 1 1  632.25471 802.35638 z"
+       sodipodi:ry="5.40836"
+       sodipodi:rx="5.2338967"
+       sodipodi:cy="802.35638"
+       sodipodi:cx="627.02081"
+       id="path12294"
+       style="fill:#000000;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.745485,-9.468581e-2,9.468581e-2,0.745485,107.8102,266.4833)"
+       d="M 630.39072 795.33301 A 2.2205544 2.2822363 0 1 1  625.94961,795.33301 A 2.2205544 2.2822363 0 1 1  630.39072 795.33301 z"
+       sodipodi:ry="2.2822363"
+       sodipodi:rx="2.2205544"
+       sodipodi:cy="795.33301"
+       sodipodi:cx="628.17017"
+       id="path13247"
+       style="fill:#ffffff;stroke:none;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.64065,-7.819027e-2,8.137048e-2,0.615612,203.1678,353.6921)"
+       d="M 632.25471 802.35638 A 5.2338967 5.40836 0 1 1  621.78692,802.35638 A 5.2338967 5.40836 0 1 1  632.25471 802.35638 z"
+       sodipodi:ry="5.40836"
+       sodipodi:rx="5.2338967"
+       sodipodi:cy="802.35638"
+       sodipodi:cx="627.02081"
+       id="path4998"
+       style="fill:#000000;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.738859,-9.589021e-2,9.384422e-2,0.754968,132.7997,259.5372)"
+       d="M 630.39072 795.33301 A 2.2205544 2.2822363 0 1 1  625.94961,795.33301 A 2.2205544 2.2822363 0 1 1  630.39072 795.33301 z"
+       sodipodi:ry="2.2822363"
+       sodipodi:rx="2.2205544"
+       sodipodi:cy="795.33301"
+       sodipodi:cx="628.17017"
+       id="path5000"
+       style="fill:#ffffff;stroke:none;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.117288,-1.501864,1.255807,-0.260356,-349.076,1925.719)"
+       d="M 606.60861 827.13019 A 10.991182 2.6169484 0 1 1  584.62625,827.13019 A 10.991182 2.6169484 0 1 1  606.60861 827.13019 z"
+       sodipodi:ry="2.6169484"
+       sodipodi:rx="10.991182"
+       sodipodi:cy="827.13019"
+       sodipodi:cx="595.61743"
+       id="path5027"
+       style="fill:url(#radialGradient7982);fill-opacity:1;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(1.133228,-0.787475,0.869641,1.065272,-780.3416,382.5937)"
+       d="M 606.60861 827.13019 A 10.991182 2.6169484 0 1 1  584.62625,827.13019 A 10.991182 2.6169484 0 1 1  606.60861 827.13019 z"
+       sodipodi:ry="2.6169484"
+       sodipodi:rx="10.991182"
+       sodipodi:cy="827.13019"
+       sodipodi:cx="595.61743"
+       id="path6113"
+       style="fill:url(#radialGradient6115);fill-opacity:1;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <g
+       style="opacity:0.67000002"
+       transform="translate(-2.351629e-6,-2.093557)"
+       id="g5050">
+      <path
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3220526;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 634.41022,795.67887 C 634.41022,801.40692 632.13944,806.95204 640.51512,817.50771 C 625.71185,808.81231 615.76813,815.5429 609.09378,815.5429 C 595.11911,815.5429 583.77735,806.64381 583.77735,795.67887 C 583.77735,784.71392 595.11911,775.81484 609.09378,775.81484 C 623.06845,775.81484 634.41022,784.71392 634.41022,795.67887 z "
+         id="path4026"
+         sodipodi:nodetypes="ccsssc" />
+      <text
+         xml:space="preserve"
+         style="font-size:43.05487061px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         x="534.76764"
+         y="902.87823"
+         id="text4029"
+         transform="scale(1.11482,0.897006)"><tspan
+           sodipodi:role="line"
+           id="tspan4031"
+           x="534.76764"
+           y="902.87823">?</tspan></text>
+    </g>
+    <path
+       transform="matrix(1.202308,-0.907638,0.895676,0.917932,-862.0372,601.6811)"
+       d="M 606.60861 827.13019 A 10.991182 2.6169484 0 1 1  584.62625,827.13019 A 10.991182 2.6169484 0 1 1  606.60861 827.13019 z"
+       sodipodi:ry="2.6169484"
+       sodipodi:rx="10.991182"
+       sodipodi:cy="827.13019"
+       sodipodi:cx="595.61743"
+       id="path9762"
+       style="fill:url(#radialGradient9764);fill-opacity:1;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+  </g>
+  <rect
+     id="rect4131"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="455.34137"
+     x="26.202015"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4133"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="455.34137"
+     x="74.713554"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4135"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="455.13403"
+     x="123.14871"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4137"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="453.80078"
+     x="170.95718"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4139"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="453.80078"
+     x="219.48363"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4141"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.4375"
+     x="268.23099"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4143"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.4375"
+     x="317.33041"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g4145"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,20.576369)">
+    <path
+       id="path4147"
+       style="fill:url(#linearGradient4526);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 28.033255,951.24411 L 38.230475,967.49704 L 28.033255,967.49704 L 45.156086,994.76755 L 62.278917,1022.038 L 79.401751,994.76755 L 96.524582,967.49704 L 86.327363,967.49704 L 96.524582,951.24411 L 62.278917,951.24411 L 28.033255,951.24411 z " />
+    <path
+       id="path4149"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 68.907579,979.062 L 53.232542,988.3243 L 37.557505,997.5866 L 53.232542,1006.8488 L 68.907579,1016.1261 L 68.907579,1003.9374 L 88.442449,1003.9374 L 88.442449,991.2508 L 68.907579,991.2508 L 68.907579,979.062 z " />
+  </g>
+  <g
+     id="g4151"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,20.576369)">
+    <path
+       id="path4153"
+       style="fill:url(#linearGradient4528);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 133.75435,951.96518 L 143.95157,968.21811 L 133.75435,968.21811 L 150.87718,995.48862 L 168.00001,1022.7591 L 185.12284,995.48862 L 202.24567,968.21811 L 192.04845,968.21811 L 202.24567,951.96518 L 168.00001,951.96518 L 133.75435,951.96518 z " />
+    <path
+       id="path4155"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 162.09241,979.062 L 177.76744,988.3243 L 193.44248,997.5866 L 177.76744,1006.8488 L 162.09241,1016.1261 L 162.09241,1003.9374 L 142.55754,1003.9374 L 142.55754,991.2508 L 162.09241,991.2508 L 162.09241,979.062 z " />
+  </g>
+  <g
+     id="g4157"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,46.449199)">
+    <path
+       id="path4159"
+       style="fill:url(#linearGradient4530);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 238.75435,895.9652 L 248.95157,912.21813 L 238.75435,912.21813 L 255.87718,939.48864 L 273.00001,966.7591 L 290.12284,939.48864 L 307.24567,912.21813 L 297.04845,912.21813 L 307.24567,895.9652 L 273.00001,895.9652 L 238.75435,895.9652 z " />
+    <path
+       id="path4161"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 245.46663,926.60502 L 245.46663,936.8248 L 235.24685,936.8248 L 235.24685,946.3632 L 245.46663,946.3632 L 245.46663,956.5831 L 255.00509,956.5831 L 255.00509,946.3632 L 265.22487,946.3632 L 265.22487,936.8248 L 255.00509,936.8248 L 255.00509,926.60502 L 245.46663,926.60502 z " />
+    <rect
+       id="rect4163"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:4.23082352;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="937.00116"
+       x="285.13812"
+       height="9.1857538"
+       width="27.285976" />
+  </g>
+  <g
+     id="g4165"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,20.576369)">
+    <path
+       id="path4167"
+       style="fill:url(#linearGradient4532);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 343.58903,951.96517 L 353.78625,968.2181 L 343.58903,968.2181 L 360.71186,995.48861 L 377.8347,1022.7591 L 394.95753,995.48861 L 412.08036,968.2181 L 401.88314,968.2181 L 412.08036,951.96517 L 377.8347,951.96517 L 343.58903,951.96517 z " />
+    <path
+       id="path4169"
+       style="opacity:1;color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.43875265;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 351.24094,977.84406 L 351.24094,1017.3441 L 362.80344,1017.3441 L 362.80344,1003.0629 L 369.20969,1006.8441 L 384.89719,1016.1254 L 384.89719,1003.9379 L 404.42844,1003.9379 L 404.42844,991.25031 L 384.89719,991.25031 L 384.89719,979.06281 L 369.20969,988.31281 L 362.80344,992.12531 L 362.80344,977.84406 L 351.24094,977.84406 z " />
+  </g>
+  <g
+     id="g4171"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,20.576369)">
+    <path
+       id="path4173"
+       style="fill:url(#linearGradient4534);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 447.06727,951.96518 L 457.26449,968.21811 L 447.06727,968.21811 L 464.1901,995.48862 L 481.31293,1022.7591 L 498.43576,995.48862 L 515.55859,968.21811 L 505.36137,968.21811 L 515.55859,951.96518 L 481.31293,951.96518 L 447.06727,951.96518 z " />
+    <path
+       id="path4175"
+       style="opacity:1;color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.43875265;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 507.90668,977.84406 L 507.90668,1017.3441 L 496.34418,1017.3441 L 496.34418,1003.0629 L 489.93793,1006.8441 L 474.25043,1016.1254 L 474.25043,1003.9379 L 454.71918,1003.9379 L 454.71918,991.25031 L 474.25043,991.25031 L 474.25043,979.06281 L 489.93793,988.31281 L 496.34418,992.12531 L 496.34418,977.84406 L 507.90668,977.84406 z " />
+  </g>
+  <g
+     id="g4177"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,46.449199)">
+    <path
+       id="path4179"
+       style="fill:url(#linearGradient4536);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 552.09953,895.24411 L 562.29675,911.49704 L 552.09953,911.49704 L 569.22236,938.76755 L 586.34519,966.038 L 603.46802,938.76755 L 620.59085,911.49704 L 610.39363,911.49704 L 620.59085,895.24411 L 586.34519,895.24411 L 552.09953,895.24411 z " />
+    <path
+       id="path4181"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 596.42552,926.94358 L 596.42552,938.53032 L 584.10133,938.53032 L 584.10133,949.34454 L 596.42552,949.34454 L 596.42552,960.93142 L 607.9281,960.93142 L 607.9281,949.34454 L 620.25229,949.34454 L 620.25229,938.53032 L 607.9281,938.53032 L 607.9281,926.94358 L 596.42552,926.94358 z " />
+  </g>
+  <g
+     id="g4183"
+     transform="matrix(0.4620139,0,0,0.4620139,18.349914,45.009029)">
+    <path
+       id="path4185"
+       style="fill:url(#linearGradient4538);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 657.61003,895.96518 L 667.80725,912.21811 L 657.61003,912.21811 L 674.73286,939.48862 L 691.85569,966.7591 L 708.97852,939.48862 L 726.10135,912.21811 L 715.90413,912.21811 L 726.10135,895.96518 L 691.85569,895.96518 L 657.61003,895.96518 z " />
+    <rect
+       id="rect4187"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:4.21595383;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="939.37506"
+       x="689.06104"
+       height="11.648645"
+       width="35.517338" />
+  </g>
+  <rect
+     id="rect4189"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.4375"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g4191"
+     transform="matrix(0.8455204,0,0,0.7937234,-71.949331,-179.18452)">
+    <path
+       id="path4193"
+       style="color:#000000;fill:url(#radialGradient4540);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4542);stroke-width:19.88428688;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.253681,-2.501311e-2,2.459378e-2,0.246667,229.9229,877.6432)"
+       d="M 1044.2857,467.36218 C 1044.3227,533.26967 994.10381,586.71913 932.14286,586.71913 C 870.18191,586.71913 819.96301,533.26967 820.00002,467.36218 C 819.96301,401.45469 870.18191,348.00523 932.14286,348.00523 C 994.10381,348.00523 1044.3227,401.45469 1044.2857,467.36218 L 1044.2857,467.36218 z " />
+    <path
+       id="path4195"
+       style="color:#000000;fill:url(#radialGradient4544);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4546);stroke-width:24.22555733;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(7.590656e-2,-7.48444e-3,8.865423e-3,8.891693e-2,402.9419,934.5995)"
+       d="M 1044.2857,467.36218 C 1044.3227,533.26967 994.10381,586.71913 932.14286,586.71913 C 870.18191,586.71913 819.96301,533.26967 820.00002,467.36218 C 819.96301,401.45469 870.18191,348.00523 932.14286,348.00523 C 994.10381,348.00523 1044.3227,401.45469 1044.2857,467.36218 L 1044.2857,467.36218 z " />
+    <path
+       id="path4198"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,281.3689,848.9056)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4200"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,302.3878,837.0276)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4202"
+       style="color:#000000;fill:#000000;fill-opacity:0.44495413;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,325.3773,845.8586)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4204"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,275.7409,869.832)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4206"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,332.8209,863.8999)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4208"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,326.1424,885.6138)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4210"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,287.9716,890.5937)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4212"
+       style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4548);stroke-width:3.50856757;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 451.50995,943.25668 C 435.78414,960.38604 437.18199,983.78233 452.90778,996.73372" />
+    <path
+       id="path4214"
+       style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4550);stroke-width:2.95746279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 468.42158,952.25773 C 454.79821,963.2013 456.00919,978.14862 469.63254,986.42309" />
+    <path
+       id="path4216"
+       style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4552);stroke-width:3.47961354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 505.32732,943.2543 C 520.79326,960.38517 519.4185,983.78352 503.95255,996.73612" />
+    <path
+       id="path4218"
+       style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4554);stroke-width:2.96080017;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 488.70524,951.88864 C 502.07067,963.06859 500.88263,978.33881 487.51722,986.79199" />
+    <path
+       id="path4220"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 465.49828,937.54255 C 475.04316,934.00456 478.02606,940.68448 481.42441,949.00956 C 475.30206,941.30677 475.6879,938.96409 467.47456,942.31203 C 464.4973,935.13979 468.46833,944.71828 465.49828,937.54255 z " />
+    <path
+       id="path4222"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="matrix(0.539089,-0.218317,0.243345,0.597197,109.4028,645.3595)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path4224"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.31586146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 479.31673,974.22578 L 464.52817,937.93298" />
+    <path
+       id="path4226"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 467.90731,943.66616 C 477.45219,940.12817 480.43507,946.80809 483.83344,955.13317 C 477.71109,947.43038 478.09693,945.08769 469.88359,948.43564 C 466.90632,941.2634 470.87734,950.8419 467.90731,943.66616 z " />
+    <path
+       id="path4228"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 470.37101,949.89018 C 479.91589,946.35219 482.89878,953.03211 486.29715,961.3572 C 480.1748,953.6544 480.56062,951.31171 472.34729,954.65967 C 469.37002,947.48741 473.34105,957.06591 470.37101,949.89018 z " />
+    <path
+       id="path4230"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 505.72899,950.50171 C 520.25906,957.10155 515.96029,967.3979 510.25127,979.88426 C 512.25344,965.10468 515.33826,963.04516 502.49058,957.68701 C 507.35452,946.87609 500.85315,961.30851 505.72899,950.50171 z " />
+    <path
+       id="path4232"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="matrix(0.841647,0.353197,-0.410015,0.895235,445.2498,255.6813)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path4234"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.58397031;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 479.29983,1004.2686 L 504.21719,949.86355" />
+  </g>
+  <rect
+     id="rect4236"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="408.94916"
+     x="26.005444"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4238"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="74.339523"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4240"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="122.47703"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4242"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="170.61453"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4244"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="218.75206"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4246"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="266.88956"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4248"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="315.02707"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4250"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;opacity:1"
+     y="409.14569"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/blue_serious/layout_compact.png"
+     inkscape:export-xdpi="51.581036"
+     inkscape:export-ydpi="51.581036" />
+  <g
+     id="g4252"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,93.746929)">
+    <path
+       id="path4254"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.76050973;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 46.333943,612.72709 L 63.936792,612.72709" />
+    <path
+       id="path4256"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       d="M 40.861277,617.58222 C 40.861277,621.77182 36.730582,625.16817 31.635118,625.16817 C 26.539654,625.16817 22.408959,621.77182 22.408959,617.58222 C 22.408959,613.39261 26.539654,609.99626 31.635118,609.99626 C 36.730582,609.99626 40.861277,613.39261 40.861277,617.58222 z " />
+    <path
+       id="path4258"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 40.950899,616.25852 L 40.950899,566.41932" />
+    <path
+       id="path4260"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.76050973;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 46.333943,600.43803 L 63.936792,600.43803" />
+    <text
+       transform="scale(0.978716,1.021747)"
+       id="text4262"
+       y="613.46783"
+       x="50.292049"
+       style="font-size:83.26845551px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       xml:space="preserve"><tspan
+         y="613.46783"
+         x="50.292049"
+         id="tspan4264"
+         sodipodi:role="line">?</tspan></text>
+  </g>
+  <g
+     id="g4266"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,93.746929)">
+    <g
+       id="g4268">
+      <g
+         id="g4270"
+         transform="matrix(1.022343,0,0,0.225964,-3.639687,485.0216)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path4272" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4274" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4276" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4278" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4280" />
+      </g>
+      <g
+         id="g4282"
+         transform="matrix(0.165008,0,0,0.185315,34.80966,476.2322)">
+        <rect
+           id="rect4284"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect4286"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g4288"
+         transform="matrix(0.200017,0,0,0.193766,131.9627,502.3096)">
+        <path
+           id="path4290"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4292"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4294"
+         transform="matrix(0.200017,0,0,0.193766,126.0764,498.6294)">
+        <path
+           id="path4296"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4298"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4300"
+         transform="matrix(1.022343,0,0,0.225964,-3.639687,462.1859)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path4302" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4304" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4306" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4308" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4310" />
+      </g>
+      <g
+         id="g4312"
+         transform="matrix(0.165008,0,0,0.185315,34.80966,453.3966)">
+        <rect
+           id="rect4314"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect4316"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g4318"
+         transform="matrix(0.200017,0,0,0.193766,131.9627,479.474)">
+        <path
+           id="path4320"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4322"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4324"
+         transform="matrix(0.200017,0,0,0.193766,126.0764,475.7938)">
+        <path
+           id="path4326"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4328"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4330"
+         transform="matrix(1.022343,0,0,0.225964,-3.639687,439.3503)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path4332" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4334" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4336" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4338" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4340" />
+      </g>
+      <g
+         id="g4342"
+         transform="matrix(0.165008,0,0,0.185315,34.80966,430.5609)">
+        <rect
+           id="rect4344"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect4346"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g4348"
+         transform="matrix(0.200017,0,0,0.193766,131.9627,456.6383)">
+        <path
+           id="path4350"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4352"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4354"
+         transform="matrix(0.200017,0,0,0.193766,126.0764,452.9581)">
+        <path
+           id="path4356"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4358"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+    </g>
+    <g
+       inkscape:transform-center-y="-249.13318"
+       inkscape:transform-center-x="-414.5246"
+       id="g4360"
+       transform="matrix(0.326639,0.315927,-0.325985,0.316561,52.01311,186.7728)">
+      <rect
+         id="rect4362"
+         style="color:#000000;fill:#ff9955;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.56066203;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="499.875"
+         x="797.08252"
+         height="17.941612"
+         width="62.664028" />
+      <path
+         id="path4364"
+         style="opacity:1;color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70223784;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 786.26355,503.58129 L 797.00751,498.99201 L 797.00751,518.69962 L 786.493,515.52242 L 786.26355,503.58129 z " />
+      <path
+         id="path4366"
+         style="opacity:0.77999998;color:#000000;fill:url(#linearGradient4556);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-1,0,0,-1,715.286,971.8034)"
+         d="M 1.0197296,463.97751 C 1.0197298,484.25205 -15.416035,500.68782 -35.690579,500.68782 C -55.965122,500.68782 -72.400887,484.25205 -72.400887,463.97751 C -72.400887,443.70297 -55.965122,427.2672 -35.690579,427.2672 C -15.416035,427.2672 1.0197298,443.70297 1.0197296,463.97751 L 1.0197296,463.97751 z " />
+    </g>
+  </g>
+  <g
+     id="g4368"
+     transform="matrix(0.5633612,0,0,0.5633612,-32.215099,93.570219)">
+    <g
+       transform="matrix(1.090844,0,0,1.73063,158.8704,-417.9589)"
+       id="g4370">
+      <g
+         id="g4372"
+         transform="matrix(0.957878,0,0,0.55144,3.319204,256.4117)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path4374" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4376" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4378" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4380" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4382" />
+      </g>
+      <g
+         id="g4384"
+         transform="matrix(0.427741,0,0,0.452238,-86.33369,234.9625)">
+        <rect
+           id="rect4386"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect4388"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+    </g>
+    <g
+       transform="matrix(0.635101,0,0,0.818349,307.0637,112.2701)"
+       id="g4390">
+      <path
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path4392" />
+      <path
+         d="M -7.156011,622.3181 L -7.156011,572.4789"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path4394" />
+    </g>
+    <g
+       transform="matrix(0.635101,0,0,0.818349,328.2121,96.72718)"
+       id="g4396">
+      <path
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path4398" />
+      <path
+         d="M -7.156011,622.3181 L -7.156011,572.4789"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path4400" />
+    </g>
+    <g
+       inkscape:transform-center-y="-249.13318"
+       inkscape:transform-center-x="-414.52458"
+       id="g4402"
+       transform="matrix(0.326639,0.315927,-0.325985,0.316561,221.3609,188.6469)">
+      <rect
+         id="rect4404"
+         style="color:#000000;fill:#ff9955;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.56066203;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="499.875"
+         x="797.08252"
+         height="17.941612"
+         width="62.664028" />
+      <path
+         id="path4406"
+         style="opacity:1;color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70223784;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 786.26355,503.58129 L 797.00751,498.99201 L 797.00751,518.69962 L 786.493,515.52242 L 786.26355,503.58129 z " />
+      <path
+         id="path4408"
+         style="opacity:0.77999998;color:#000000;fill:url(#linearGradient4558);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-1,0,0,-1,715.286,971.8034)"
+         d="M 1.0197296,463.97751 C 1.0197298,484.25205 -15.416035,500.68782 -35.690579,500.68782 C -55.965122,500.68782 -72.400887,484.25205 -72.400887,463.97751 C -72.400887,443.70297 -55.965122,427.2672 -35.690579,427.2672 C -15.416035,427.2672 1.0197298,443.70297 1.0197296,463.97751 L 1.0197296,463.97751 z " />
+    </g>
+  </g>
+  <g
+     id="g4410"
+     transform="matrix(0.5633612,0,0,0.5633612,63.747173,93.040039)">
+    <g
+       id="g4412"
+       style="display:inline"
+       transform="translate(-636.6883,341.6475)">
+      <path
+         id="path4414"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.01236534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 833.34122,225.07216 L 833.34122,286.35703" />
+      <path
+         id="path4416"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 843.52579,225.73634 L 843.52579,286.55437" />
+      <path
+         id="path4418"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 852.30857,225.73634 L 852.30857,286.55437" />
+      <path
+         id="path4420"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 861.09135,225.73634 L 861.09135,286.55437" />
+      <path
+         id="path4422"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 869.87413,225.73634 L 869.87413,286.55437" />
+      <path
+         id="path4424"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 878.6569,225.73634 L 878.6569,286.55437" />
+      <path
+         id="path4426"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 887.43968,225.73634 L 887.43968,286.55437" />
+      <path
+         id="path4428"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.22246,225.73634 L 896.22246,286.55437" />
+      <rect
+         id="rect4430"
+         style="color:#000000;fill:url(#linearGradient4560);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83745855;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="270.90326"
+         x="870.24017"
+         height="15.065637"
+         width="25.749367" />
+      <rect
+         id="rect4432"
+         style="color:#000000;fill:url(#linearGradient4562);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85693413;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="255.7885"
+         x="834.93457"
+         height="15.699371"
+         width="25.872597" />
+      <rect
+         id="rect4434"
+         style="color:#000000;fill:url(#linearGradient4564);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.77284241;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="225.60927"
+         x="843.66455"
+         height="15.549897"
+         width="35.031761" />
+      <rect
+         id="rect4436"
+         style="color:#000000;fill:url(#linearGradient4566);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83925015;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="240.99434"
+         x="852.5072"
+         height="14.594875"
+         width="43.547024" />
+      <path
+         id="path4438"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 896.28272,225.35563 L 834.8784,225.35563" />
+      <path
+         id="path4440"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,240.53581 L 834.8784,240.53581" />
+      <path
+         id="path4442"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,255.71599 L 834.8784,255.71599" />
+      <path
+         id="path4444"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,270.89618 L 834.8784,270.89618" />
+      <path
+         id="path4446"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,286.07636 L 834.8784,286.07636" />
+      <rect
+         id="rect4448"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.53349"
+         x="843.96301"
+         height="2.1720431"
+         width="8.6314974" />
+      <rect
+         id="rect4450"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.22321"
+         x="857.89111"
+         height="2.7926269"
+         width="7.2583046" />
+      <rect
+         id="rect4452"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.34735"
+         x="852.98682"
+         height="3.1029184"
+         width="13.928099" />
+      <rect
+         id="rect4454"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="871.03455"
+         height="2.7926269"
+         width="2.7463856" />
+      <rect
+         id="rect4456"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="886.11169"
+         height="2.7926269"
+         width="9.2200089" />
+      <g
+         id="g4458"
+         transform="matrix(0.665193,0,0,1.080499,302.4562,-1.363347)">
+        <rect
+           id="rect4460"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect4462"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect4464"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+      <g
+         id="g4466"
+         style="display:inline"
+         transform="matrix(-0.665193,0,0,1.080499,1428.48,13.68581)">
+        <rect
+           id="rect4468"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect4470"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect4472"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+    </g>
+    <g
+       inkscape:transform-center-y="-249.13318"
+       inkscape:transform-center-x="-414.52458"
+       id="g4474"
+       transform="matrix(0.326639,0.315927,-0.325985,0.316561,137.3191,188.96)">
+      <rect
+         id="rect4476"
+         style="color:#000000;fill:#ff9955;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.56066203;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="499.875"
+         x="797.08252"
+         height="17.941612"
+         width="62.664028" />
+      <path
+         id="path4478"
+         style="opacity:1;color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70223784;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 786.26355,503.58129 L 797.00751,498.99201 L 797.00751,518.69962 L 786.493,515.52242 L 786.26355,503.58129 z " />
+      <path
+         id="path4480"
+         style="opacity:0.77999998;color:#000000;fill:url(#linearGradient4568);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-1,0,0,-1,715.286,971.8034)"
+         d="M 1.0197296,463.97751 C 1.0197298,484.25205 -15.416035,500.68782 -35.690579,500.68782 C -55.965122,500.68782 -72.400887,484.25205 -72.400887,463.97751 C -72.400887,443.70297 -55.965122,427.2672 -35.690579,427.2672 C -15.416035,427.2672 1.0197298,443.70297 1.0197296,463.97751 L 1.0197296,463.97751 z " />
+    </g>
+  </g>
+  <g
+     id="g4482"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,93.746929)">
+    <g
+       id="g4484">
+      <g
+         id="g4486"
+         transform="matrix(1.090844,0,0,1.73063,245.4128,-416.8902)">
+        <g
+           transform="matrix(0.957878,0,0,0.55144,3.319204,256.4117)"
+           id="g4488">
+          <path
+             id="path4490"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="M 111.87488,566.71352 L 173.41819,566.58088" />
+          <path
+             id="path4492"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 111.87488,626.46842 L 173.41819,626.33578" />
+          <path
+             id="path4494"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 111.87488,611.5297 L 173.41818,611.39706" />
+          <path
+             id="path4496"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 111.87488,596.59099 L 173.41818,596.45834" />
+          <path
+             id="path4498"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 111.87488,581.65225 L 173.41819,581.51962" />
+        </g>
+        <g
+           transform="matrix(0.427741,0,0,0.452238,-86.33369,234.9625)"
+           id="g4500">
+          <rect
+             width="10.422997"
+             height="72.622528"
+             ry="0"
+             x="460.12595"
+             y="738.49548"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             id="rect4502" />
+          <rect
+             width="2.5666234"
+             height="72.622528"
+             x="473.64929"
+             y="738.49548"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             id="rect4504" />
+        </g>
+      </g>
+      <g
+         id="g4506"
+         transform="matrix(0.635101,0,0,0.818349,393.6061,113.3388)">
+        <path
+           id="path4508"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4510"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4512"
+         transform="matrix(0.635101,0,0,0.818349,414.7545,97.79592)">
+        <path
+           id="path4514"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4516"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+    </g>
+    <path
+       sodipodi:nodetypes="czczczc"
+       id="path4518"
+       d="M 411.78985,624.6666 C 411.78985,624.6666 400.16655,624.17722 392.02482,616.70732 C 383.88308,609.23742 377.16967,600.9919 377.16967,600.9919 C 377.16967,600.9919 381.93058,591.7906 389.99449,583.72289 C 398.05841,575.65517 410.05022,571.58486 410.05022,571.58486 C 410.05022,571.58486 415.66282,582.34945 415.74064,597.88706 C 415.81847,613.42468 411.78985,624.6666 411.78985,624.6666 z "
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       transform="matrix(2.115244,0,0,1.423109,-586.4825,-238.9625)"
+       d="M 478.70496 588.40106 A 7.5287805 18.194553 0 1 1  463.6474,588.40106 A 7.5287805 18.194553 0 1 1  478.70496 588.40106 z"
+       sodipodi:ry="18.194553"
+       sodipodi:rx="7.5287805"
+       sodipodi:cy="588.40106"
+       sodipodi:cx="471.17618"
+       id="path4520"
+       style="fill:#3771c8;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(1.163385,0,0,0.936892,-135.6486,46.23215)"
+       d="M 478.70496 588.40106 A 7.5287805 18.194553 0 1 1  463.6474,588.40106 A 7.5287805 18.194553 0 1 1  478.70496 588.40106 z"
+       sodipodi:ry="18.194553"
+       sodipodi:rx="7.5287805"
+       sodipodi:cy="588.40106"
+       sodipodi:cx="471.17618"
+       id="path4522"
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.474681,0,0,0.282167,191.8461,422.9515)"
+       d="M 478.70496 588.40106 A 7.5287805 18.194553 0 1 1  463.6474,588.40106 A 7.5287805 18.194553 0 1 1  478.70496 588.40106 z"
+       sodipodi:ry="18.194553"
+       sodipodi:rx="7.5287805"
+       sodipodi:cy="588.40106"
+       sodipodi:cx="471.17618"
+       id="path4524"
+       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     id="g2988"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,2.4823692)">
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path4570"
+       d="M 48.485517,575.51074 C 47.057601,575.53345 40.824521,575.50157 39.272311,589.79823 L 35.150004,589.79823 L 35.150004,592.07556 L 39.134654,592.07556 C 38.761213,596.18447 35.172599,613.87811 32.848466,613.95576 C 30.453707,614.03577 33.091056,614.04051 33.113086,611.43574 C 33.135117,608.83094 29.615875,608.89369 29.548583,611.44041 C 29.479763,614.04493 29.820497,616.0356 34.173133,616.00346 C 38.572698,615.97098 41.807204,603.64647 43.628053,592.07556 L 47.598261,592.07556 L [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path2984"
+       d="M 62.485517,575.51074 C 61.057601,575.53345 54.824521,575.50157 53.272311,589.79823 L 49.150004,589.79823 L 49.150004,592.07556 L 53.134654,592.07556 C 52.761213,596.18447 49.172599,613.87811 46.848466,613.95576 C 44.453707,614.03577 47.091056,614.04051 47.113086,611.43574 C 47.135117,608.83094 43.615875,608.89369 43.548583,611.44041 C 43.479763,614.04493 43.820497,616.0356 48.173133,616.00346 C 52.572698,615.97098 55.807204,603.64647 57.628053,592.07556 L 61.598261,592.07556 L [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path2986"
+       d="M 76.485517,575.51074 C 75.057601,575.53345 68.824521,575.50157 67.272311,589.79823 L 63.150004,589.79823 L 63.150004,592.07556 L 67.134654,592.07556 C 66.761213,596.18447 63.172599,613.87811 60.848466,613.95576 C 58.453707,614.03577 61.091056,614.04051 61.113086,611.43574 C 61.135117,608.83094 57.615875,608.89369 57.548583,611.44041 C 57.479763,614.04493 57.820497,616.0356 62.173133,616.00346 C 66.572698,615.97098 69.807204,603.64647 71.628053,592.07556 L 75.598261,592.07556 L [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+  <g
+     id="g3012"
+     transform="matrix(0.5633612,0,0,0.5633612,20.007825,2.4823692)">
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path2995"
+       d="M 136.48552,575.51074 C 135.0576,575.53345 128.82452,575.50157 127.27231,589.79823 L 123.15,589.79823 L 123.15,592.07556 L 127.13465,592.07556 C 126.76121,596.18447 123.1726,613.87811 120.84847,613.95576 C 118.45371,614.03577 121.09106,614.04051 121.11309,611.43574 C 121.13512,608.83094 117.61588,608.89369 117.54858,611.44041 C 117.47976,614.04493 117.8205,616.0356 122.17313,616.00346 C 126.5727,615.97098 129.8072,603.64647 131.62805,592.07556 L 135.59826,592.07556 L 135.59826, [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path2997"
+       d="M 150.48552,575.51074 C 149.0576,575.53345 142.82452,575.50157 141.27231,589.79823 L 137.15,589.79823 L 137.15,592.07556 L 141.13465,592.07556 C 140.76121,596.18447 137.1726,613.87811 134.84847,613.95576 C 132.45371,614.03577 135.09106,614.04051 135.11309,611.43574 C 135.13512,608.83094 131.61588,608.89369 131.54858,611.44041 C 131.47976,614.04493 131.8205,616.0356 136.17313,616.00346 C 140.5727,615.97098 143.8072,603.64647 145.62805,592.07556 L 149.59826,592.07556 L 149.59826, [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+  <path
+     style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 150.98122,326.703 C 150.1768,326.71579 146.66532,326.69783 145.79086,334.75201 L 143.46851,334.75201 L 143.46851,336.03498 L 145.71331,336.03498 C 145.50293,338.34978 143.48125,348.3177 142.17192,348.36144 C 140.8228,348.40651 142.30858,348.40919 142.32099,346.94175 C 142.33341,345.47432 140.3508,345.50966 140.31289,346.94439 C 140.27412,348.41168 140.46607,349.53314 142.91818,349.51503 C 145.39673,349.49674 147.21892,342.55358 148.24472,336.03498 L 150.48138,336.03498 L 150.48 [...]
+     id="path3005"
+     sodipodi:nodetypes="cccccszzzcccczszzz" />
+  <path
+     style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 200.55704,326.703 C 199.75261,326.71579 196.24113,326.69783 195.36667,334.75201 L 193.04433,334.75201 L 193.04433,336.03498 L 195.28912,336.03498 C 195.07874,338.34978 193.05706,348.3177 191.74774,348.36144 C 190.39862,348.40651 191.8844,348.40919 191.89681,346.94175 C 191.90922,345.47432 189.92661,345.50966 189.8887,346.94439 C 189.84993,348.41168 190.04189,349.53314 192.49399,349.51503 C 194.97255,349.49674 196.79474,342.55358 197.82053,336.03498 L 200.0572,336.03498 L 200.05 [...]
+     id="path3019"
+     sodipodi:nodetypes="cccccszzzcccczszzz" />
+  <text
+     xml:space="preserve"
+     style="font-size:16.14900208px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="254.68269"
+     y="318.62085"
+     id="text3036"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3038"
+       x="254.68269"
+       y="318.62085"
+       style="font-size:16.14901543px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">m</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:16.14931297px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="307.45944"
+     y="318.62579"
+     id="text3044"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3046"
+       x="307.45944"
+       y="318.62579"
+       style="font-size:16.14933777px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">mp</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:16.14957619px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="356.63824"
+     y="318.63007"
+     id="text3048"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3050"
+       x="356.63824"
+       y="318.63007"
+       style="font-size:16.14960098px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">ppp</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:16.14987183px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="411.81506"
+     y="318.63477"
+     id="text3052"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3054"
+       x="411.81506"
+       y="318.63477"
+       style="font-size:16.14989853px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">pp</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:16.15017509px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="466.99307"
+     y="318.63959"
+     id="text3056"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3058"
+       x="466.99307"
+       y="318.63959"
+       style="font-size:16.1502018px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">p</tspan></text>
+  <path
+     style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     d="M 56.110843,384.71198 L 40.303198,395.28564 L 40.303198,391.48506 L 50.703054,384.71198 L 40.303198,378.00258 L 40.303198,374.202 L 56.110843,384.71198 z "
+     id="text3060"
+     sodipodi:nodetypes="ccccccc" />
+  <text
+     xml:space="preserve"
+     style="font-size:30.45602417px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+     x="116.64803"
+     y="440.39285"
+     id="text3065"
+     transform="scale(1.1209993,0.8920612)"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3067"
+       x="116.64803"
+       y="440.39285">()</tspan></text>
+  <path
+     style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     d="M 86.498845,384.71198 L 102.30649,395.28564 L 102.30649,391.48506 L 91.906645,384.71198 L 102.30649,378.00258 L 102.30649,374.202 L 86.498845,384.71198 z "
+     id="path3069"
+     sodipodi:nodetypes="ccccccc" />
+  <g
+     id="g3104"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,2.4823692)">
+    <path
+       id="path3073"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 312.30593,647.99065 C 323.97335,648.37311 324.2505,657.58689 324.25694,668.9189 C 321.0884,657.02522 322.5119,654.47127 312.34078,654.4967 C 312.28266,644.71049 312.35487,657.77749 312.30593,647.99065 z " />
+    <path
+       id="path3077"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.8136487;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       d="M 310.92742,694.2856 C 310.92742,698.0754 307.56802,701.14764 303.42398,701.14764 C 299.27995,701.14764 295.92055,698.0754 295.92055,694.2856 C 295.92055,690.49579 299.27995,687.42354 303.42398,687.42354 C 307.56802,687.42354 310.92742,690.49579 310.92742,694.2856 z " />
+    <path
+       id="path3075"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.83327127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 293.82309,681.8583 L 327.47426,657.4004" />
+    <path
+       id="path3079"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.65990877;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 311.16655,693.08823 L 311.16655,648.00504" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:34.65638351px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+     x="-389.72617"
+     y="257.13391"
+     id="text3110"
+     transform="matrix(0,-1.024355,0.976224,0,0,0)"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3112"
+       x="-389.72617"
+       y="257.13391">)</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:15.52974701px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="246.58002"
+     y="357.05609"
+     id="text3114"
+     transform="scale(0.9278539,1.0777559)"><tspan
+       sodipodi:role="line"
+       id="tspan3116"
+       x="246.58002"
+       y="357.05609">HO</tspan></text>
+  <path
+     style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+     d="M 289.31419,381.94275 L 297.25455,390.23462 L 289.31419,398.08051 L 280.97169,390.23462 L 289.31419,381.94275 z "
+     id="rect3126"
+     sodipodi:nodetypes="ccccc" />
+  <text
+     xml:space="preserve"
+     style="font-size:14.66517448px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="313.40533"
+     y="338.75354"
+     id="text3133"
+     transform="scale(0.8879582,1.1261792)"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3135"
+       x="313.40533"
+       y="338.75354"
+       style="font-size:14.66517448px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">NH</tspan></text>
+  <path
+     style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     d="M 338.02694,373.81157 L 328.23024,394.54862 L 330.02827,394.54862 L 336.05748,382.87004 L 341.53533,394.54862 L 347.76463,394.54862 L 338.02694,373.81157 z "
+     id="path3141"
+     sodipodi:nodetypes="ccccccc" />
+  <text
+     xml:space="preserve"
+     style="font-size:21.2996788px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="470.23547"
+     y="308.36682"
+     id="text3143"
+     transform="scale(0.7835739,1.2762038)"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3145"
+       x="470.23547"
+       y="308.36682"
+       style="font-size:21.2996788px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">P.M</tspan></text>
+  <rect
+     id="rect3147"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.54208785;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_left.png"
+     inkscape:export-xdpi="35.083145"
+     inkscape:export-ydpi="35.083145" />
+  <rect
+     id="rect3149"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="408.8056"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_right.png"
+     inkscape:export-xdpi="35.083145"
+     inkscape:export-ydpi="35.083145" />
+  <rect
+     id="rect3151"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.03625"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_up.png"
+     inkscape:export-xdpi="35.083145"
+     inkscape:export-ydpi="35.083145" />
+  <rect
+     id="rect3153"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.03625"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_down.png"
+     inkscape:export-xdpi="35.083145"
+     inkscape:export-ydpi="35.083145" />
+  <rect
+     id="rect3155"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="316.64386"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_bend.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3157"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="316.64386"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_dead.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3159"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="361.53442"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_vibrato.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3161"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="361.53442"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/repeat_alternative.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3163"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.78169"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slide.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3165"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.78169"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_staccato.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3167"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="269.03259"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_popping.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3169"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="269.03259"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3171"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="123.47828"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_picking.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3173"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="123.47828"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_trill.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3175"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.81017"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tapping.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3177"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.81017"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_bar.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <g
+     id="g4068"
+     transform="matrix(0.6801604,0,0,0.6801604,14.362893,11.373789)">
+    <path
+       sodipodi:nodetypes="cc"
+       id="path3179"
+       d="M 594.00003,497.36216 C 617.85953,497.555 627.69114,488.66969 628.00003,460.36216"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       transform="matrix(0.749399,0,0,0.807087,168.8359,92.77775)"
+       d="M 622.22856,466.26925 L 611.6474,466.26925 L 601.06624,466.26925 L 606.35682,457.1057 L 611.6474,447.94215 L 616.93798,457.1057 L 622.22856,466.26925 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="1.5707963"
+       sodipodi:arg1="0.52359878"
+       sodipodi:r2="6.1090355"
+       sodipodi:r1="12.218071"
+       sodipodi:cy="460.16022"
+       sodipodi:cx="611.6474"
+       sodipodi:sides="3"
+       id="path4066"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       sodipodi:type="star" />
+  </g>
+  <path
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.44790959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 471.38475,347.50253 L 488.4468,330.93125"
+     id="path4072"
+     sodipodi:nodetypes="cc" />
+  <g
+     id="g5882"
+     transform="matrix(1.0269525,0,0,0.9790352,-221.22387,-130.58855)">
+    <path
+       sodipodi:nodetypes="cc"
+       id="path4074"
+       d="M 674.43107,471.32979 L 691.12154,488.11001"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.94400001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       y="469.35751"
+       x="672.41663"
+       height="6"
+       width="6"
+       id="rect4961"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       y="469.35751"
+       x="687.11115"
+       height="6"
+       width="6"
+       id="rect4963"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       y="483.72479"
+       x="687.11115"
+       height="6"
+       width="6"
+       id="rect4965"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       y="483.72479"
+       x="672.41663"
+       height="6"
+       width="6"
+       id="rect4967"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:23.50349617px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="409.8201"
+     y="307.42377"
+     id="text5893"
+     transform="scale(1.0327709,0.9682689)"
+     sodipodi:linespacing="125%"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_popping.png"
+     inkscape:export-xdpi="71.751251"
+     inkscape:export-ydpi="71.751251"><tspan
+       sodipodi:role="line"
+       id="tspan5895"
+       x="409.8201"
+       y="307.42377"
+       style="font-size:23.50349617px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">P</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:31.86540413px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="452.26965"
+     y="309.18457"
+     id="text5897"
+     transform="scale(1.0413973,0.9602483)"
+     sodipodi:linespacing="125%"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+     inkscape:export-xdpi="61.67075"
+     inkscape:export-ydpi="61.67075"><tspan
+       sodipodi:role="line"
+       id="tspan5899"
+       x="452.26965"
+       y="309.18457"
+       style="font-size:31.86540413px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">s</tspan></text>
+  <g
+     id="g5911"
+     transform="matrix(0.9778313,0,0,1.3442636,-166.29942,-214.67039)">
+    <text
+       transform="scale(0.902157,1.108454)"
+       id="text5901"
+       y="312.95807"
+       x="662.24274"
+       style="font-size:13.23942089px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       xml:space="preserve"><tspan
+         y="312.95807"
+         x="662.24274"
+         id="tspan5903"
+         sodipodi:role="line">1</tspan></text>
+    <text
+       transform="scale(0.902157,1.108454)"
+       id="text5905"
+       y="312.87729"
+       x="682.92804"
+       style="font-size:13.23942089px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       xml:space="preserve"><tspan
+         y="312.87729"
+         x="682.92804"
+         id="tspan5907"
+         sodipodi:role="line">3</tspan></text>
+    <path
+       id="path5909"
+       d="M 605.35606,346.58166 L 615.29346,336.53376"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.20514083px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+  <g
+     id="g5948"
+     transform="matrix(0.6801604,0,0,0.6801604,14.362893,11.373789)">
+    <g
+       transform="matrix(0.83334,0,0,1,120.4233,-6.810365)"
+       id="g5932">
+      <path
+         d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path5922" />
+      <path
+         d="M 683.05261,356.83776 L 683.05261,326.03045"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path5924" />
+    </g>
+    <path
+       transform="translate(0.645704,6.4635e-2)"
+       d="M 684.625 362.17465 A 2.0625 2.0625 0 1 1  680.5,362.17465 A 2.0625 2.0625 0 1 1  684.625 362.17465 z"
+       sodipodi:ry="2.0625"
+       sodipodi:rx="2.0625"
+       sodipodi:cy="362.17465"
+       sodipodi:cx="682.5625"
+       id="path5936"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.44400001;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       sodipodi:type="arc" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:25.10733032px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="381.26865"
+     y="222.82732"
+     id="text5954"
+     transform="scale(1.1044258,0.9054479)"
+     sodipodi:linespacing="125%"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tapping.png"
+     inkscape:export-xdpi="68.070755"
+     inkscape:export-ydpi="68.070755"><tspan
+       sodipodi:role="line"
+       id="tspan5956"
+       x="381.26865"
+       y="222.82732"
+       style="font-size:25.10733032px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">T</tspan></text>
+  <g
+     id="g6849"
+     transform="matrix(0.8038258,0,0,0.8952428,-69.897219,-50.865781)">
+    <path
+       sodipodi:nodetypes="ccc"
+       id="path5958"
+       d="M 667.00003,271.36215 L 683.00003,284.86215 L 698.00003,271.36215"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       sodipodi:linespacing="125%"
+       transform="scale(1.077771,0.927841)"
+       id="text6845"
+       y="293.27463"
+       x="627.5741"
+       style="font-size:17.07377625px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+       xml:space="preserve"><tspan
+         y="293.27463"
+         x="627.5741"
+         id="tspan6847"
+         sodipodi:role="line">X</tspan></text>
+  </g>
+  <g
+     id="g6860"
+     transform="matrix(0.6037383,0,0,0.7722113,67.160612,-5.8028708)">
+    <rect
+       transform="matrix(0.880153,-0.474689,0,1,0,0)"
+       y="507.96887"
+       x="671.18982"
+       height="5.25"
+       width="25.279688"
+       id="rect6854"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       transform="matrix(0.880153,-0.474689,0,1,0,0)"
+       y="515.96887"
+       x="671.18945"
+       height="5.25"
+       width="25.279675"
+       id="rect6856"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       transform="matrix(0.880153,-0.474689,0,1,0,0)"
+       y="523.96887"
+       x="671.18945"
+       height="5.25"
+       width="25.279675"
+       id="rect6858"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:11.30146599px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="474.99112"
+     y="149.22421"
+     id="text6865"
+     sodipodi:linespacing="125%"
+     transform="matrix(0.9705969,0,3.6240004e-2,1.0302939,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan6867"
+       x="474.99112"
+       y="149.22421"
+       style="font-size:30.13724899px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Vivaldi">tr</tspan></text>
+  <path
+     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 420.63339,383.75166 C 420.63339,383.75166 424.59354,378.42988 426.5798,381.2851 C 428.26303,383.70473 428.68875,384.93246 429.82503,384.60352 C 430.94218,384.28011 431.68368,380.43446 435.13907,380.4622 C 437.71367,380.48325 437.22328,385.14061 441.44017,386.0373 C 439.94633,387.20777 437.34675,387.30255 435.95868,386.55808 C 434.64426,385.85311 434.07716,383.19366 432.613,383.8719 C 431.18508,384.53335 430.9326,386.9609 428.0493,386.90959 C 425.21447,386.85828 425.33498,385.27 [...]
+     id="path6878"
+     sodipodi:nodetypes="cszscszzzc" />
+  <g
+     id="g16418"
+     transform="matrix(0.6801604,0,0,0.6801604,14.362893,11.373789)">
+    <g
+       style="stroke:#000000;stroke-width:1.60443127;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(1.052881,0,0,1.752712,-2.969829,-445.0024)"
+       id="g8293">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.60443127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 380.60127,591.32856 L 394.60485,591.32856 L 394.60485,591.32856"
+         id="path7402" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.60443127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 387.60306,591.68211 L 387.60306,618.11023"
+         id="path7404" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.60443127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 380.58984,618.11023 L 394.61628,618.11023"
+         id="path7406" />
+    </g>
+    <g
+       transform="matrix(0.83334,0,0,1.26493,-176.5805,177.5719)"
+       id="g11878">
+      <path
+         d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path11880" />
+      <path
+         d="M 683.05261,356.83776 L 683.05261,326.03045"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path11882" />
+    </g>
+    <g
+       transform="translate(2.386486,-12.72792)"
+       id="g11890">
+      <path
+         style="fill:url(#radialGradient16399);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 407.38189,616.60763 L 391.73716,638.26278 L 416.75106,629.33555 L 407.38189,616.60763 z "
+         id="path8312"
+         sodipodi:nodetypes="cccc" />
+      <path
+         style="fill:url(#linearGradient16401);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 407.47028,616.25408 L 423.64535,601.58161 L 423.64535,622.52965 L 417.10461,629.15877 L 407.47028,616.25408 z "
+         id="path8314"
+         sodipodi:nodetypes="ccccc" />
+    </g>
+  </g>
+  <g
+     id="g21770"
+     transform="matrix(0.6801604,0,0,0.6801604,14.362893,11.373789)">
+    <text
+       sodipodi:linespacing="125%"
+       transform="matrix(0,-1.06756,0.936716,0,0,0)"
+       id="text21766"
+       y="508.78696"
+       x="-580.42908"
+       style="font-size:44.71162415px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+       xml:space="preserve"><tspan
+         y="508.78696"
+         x="-580.42908"
+         id="tspan21768"
+         sodipodi:role="line">)</tspan></text>
+    <g
+       transform="translate(2.828427,-2.65165)"
+       id="g21749">
+      <g
+         id="g16378"
+         transform="matrix(0.83334,0,0,1.26493,-81.035,178.0078)">
+        <path
+           id="path16380"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z " />
+        <path
+           id="path16382"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 683.05261,356.83776 L 683.05261,326.03045" />
+      </g>
+      <g
+         id="g15477"
+         transform="matrix(0.289054,1.22178,-1.331968,1.944028e-2,1154.889,24.19248)"
+         style="stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+        <path
+           id="path12800"
+           d="M 465.23106,595.7336 L 469.25,601.1875 L 469.09375,605.9375 L 465.65625,609.15625 L 460.65058,608.73406 L 455.28461,602.10158 C 455.28461,607.26321 459.09018,613.67006 463.85601,614.20682 L 469.22834,614.81189 L 479.5625,626.8125 L 483.71875,623.0625 L 474.22873,610.90263 L 473.66914,604.8712 C 473.19295,599.73852 470.29389,597.28414 465.23106,595.7336 z "
+           style="fill:#999999;stroke:#000000;stroke-width:0.60881829;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           sodipodi:nodetypes="ccccccsccccsc" />
+        <path
+           transform="matrix(0.742775,-0.669541,0.636786,0.77104,0,0)"
+           style="fill:url(#linearGradient21760);fill-opacity:1;stroke-width:1.00046873"
+           d="M -30.319248,775.35716 C -29.236086,771.94908 -25.270866,771.78557 -23.146393,774.91204 L -22.971837,801.60352 L -30.244144,801.60352 L -30.319248,775.35716 z "
+           id="rect14581"
+           sodipodi:nodetypes="ccccc" />
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:#cccccc;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path16432"
+         sodipodi:cx="449.8125"
+         sodipodi:cy="637.17468"
+         sodipodi:rx="4.3707523"
+         sodipodi:ry="4.0625"
+         d="M 454.18325 637.17468 A 4.3707523 4.0625 0 1 1  445.44175,637.17468 A 4.3707523 4.0625 0 1 1  454.18325 637.17468 z"
+         transform="matrix(0.819316,0.899502,-0.550332,0.501274,431.3845,-87.32081)" />
+      <path
+         style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 484.50072,592.19035 L 477.27498,598.81948 L 478.13677,604.94037 L 479.88494,606.41213 L 478.88807,599.72546 L 484.41233,593.98021 L 484.50072,592.19035 z "
+         id="path16435"
+         sodipodi:nodetypes="ccccccc" />
+      <path
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 491.96404,614.17206 C 487.52149,616.98813 481.99224,615.61946 480.03711,615.85633 C 478.33,616.06315 476.50158,617.62409 476.50158,617.62409 L 476.3248,615.10502 L 478.79969,613.73501 C 478.79969,613.73501 480.86422,613.06577 485.56139,613.46984 C 489.14203,613.77787 492.60171,611.64036 493.64891,609.31558 L 495.85862,604.41003 C 495.35966,607.74069 493.83974,612.98308 491.96404,614.17206 z "
+         id="path17322"
+         sodipodi:nodetypes="cscccsscs" />
+    </g>
+    <text
+       inkscape:transform-center-x="11"
+       inkscape:transform-center-y="-10.103847"
+       transform="matrix(0.717341,-0.596996,0.540854,0.94392,0,0)"
+       sodipodi:linespacing="100%"
+       id="text21762"
+       y="709.63062"
+       x="105.70007"
+       style="font-size:14.4750843px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mark [...]
+       xml:space="preserve"><tspan
+         style="font-size:14.47510719px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook"
+         y="709.63062"
+         x="105.70007"
+         id="tspan21764"
+         sodipodi:role="line">pp</tspan></text>
+  </g>
+  <g
+     id="g3407"
+     transform="matrix(9.7000401e-2,8.1066758e-3,-1.1753914e-2,0.1240388,219.94383,532.76077)">
+    <g
+       id="g3296"
+       transform="matrix(3.608871,12.53273,-16.62977,0.199414,8930.251,-5616.342)"
+       style="stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+      <path
+         id="path3298"
+         d="M 465.23106,595.7336 L 469.25,601.1875 L 469.09375,605.9375 L 465.65625,609.15625 L 460.65058,608.73406 L 455.28461,602.10158 C 455.28461,607.26321 459.09018,613.67006 463.85601,614.20682 L 469.22834,614.81189 L 479.5625,626.8125 L 483.71875,623.0625 L 474.22873,610.90263 L 473.66914,604.8712 C 473.19295,599.73852 470.29389,597.28414 465.23106,595.7336 z "
+         style="fill:#999999;stroke:#000000;stroke-width:0.60881829;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:nodetypes="ccccccsccccsc" />
+      <path
+         transform="matrix(0.742775,-0.669541,0.636786,0.77104,0,0)"
+         style="fill:url(#linearGradient3382);fill-opacity:1;stroke-width:1.00046873"
+         d="M -30.319248,775.35716 C -29.236086,771.94908 -25.270866,771.78557 -23.146393,774.91204 L -22.971837,801.60352 L -30.244144,801.60352 L -30.319248,775.35716 z "
+         id="path3300"
+         sodipodi:nodetypes="ccccc" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="fill:#cccccc;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3302"
+       sodipodi:cx="449.8125"
+       sodipodi:cy="637.17468"
+       sodipodi:rx="4.3707523"
+       sodipodi:ry="4.0625"
+       d="M 454.18325 637.17468 A 4.3707523 4.0625 0 1 1  445.44175,637.17468 A 4.3707523 4.0625 0 1 1  454.18325 637.17468 z"
+       transform="matrix(10.22925,9.226876,-6.870956,5.141948,-102.7821,-6760.219)" />
+    <path
+       style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:2.26335382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 560.37978,210.04348 L 470.16563,278.04351 L 480.92517,340.83013 L 502.75126,355.92709 L 490.30523,287.33683 L 559.27623,228.40344 L 560.37978,210.04348 z "
+       id="path3304"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.39503074;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 653.56016,435.52659 C 598.09443,464.41316 529.06114,450.37367 504.65112,452.80343 C 483.33767,454.92494 460.50964,470.93669 460.50964,470.93669 L 458.30252,445.09667 L 489.2018,431.04344 C 489.2018,431.04344 514.97768,424.17853 573.62237,428.32339 C 618.32705,431.48308 661.52154,409.55702 674.59594,385.70998 L 702.18442,335.39003 C 695.95484,369.55514 676.97848,423.33032 653.56016,435.52659 z "
+       id="path3306"
+       sodipodi:nodetypes="cscccsscs" />
+  </g>
+  <g
+     id="g21483"
+     transform="matrix(0.6801604,0,0,0.6801604,19.124016,12.734109)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/option_skin.png"
+     inkscape:export-xdpi="54.250492"
+     inkscape:export-ydpi="54.250492">
+    <a
+       style="fill:url(#linearGradient21491);fill-opacity:1"
+       transform="matrix(1.0935538,0,0,0.9875559,-81.605798,-98.323313)"
+       id="a3635">
+      <path
+         style="fill:url(#linearGradient21493);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.40568686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 573.46809,989.25496 C 561.43446,918.49524 637.03499,915.96748 645.83589,919.79716 C 674.43146,931.00974 654.3464,985.51774 650.05535,987.75336 C 644.89956,990.4395 620.42002,988.48086 620.50756,989.43376 C 620.52581,989.44042 615.71426,1009.4048 598.77641,1009.9117 C 590.46857,1010.1603 574.46337,997.70295 573.46809,989.25496 z "
+         id="path3633"
+         sodipodi:nodetypes="ccscsc" />
+    </a>
+    <path
+       transform="matrix(0.2599889,1.1741624e-2,-1.2264639e-2,0.2489019,425.79798,629.67088)"
+       d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="-0.66417817"
+       sodipodi:arg1="-1.2924967"
+       sodipodi:r2="7.7217226"
+       sodipodi:r1="3.8608613"
+       sodipodi:cy="839.52301"
+       sodipodi:cx="566.39252"
+       sodipodi:sides="5"
+       id="path3644"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#d22d2d;stroke-width:35.29999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="star" />
+    <path
+       transform="matrix(0.2599889,1.1741624e-2,-1.2264639e-2,0.2489019,443.91514,614.48309)"
+       d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="-0.66417817"
+       sodipodi:arg1="-1.2924967"
+       sodipodi:r2="7.7217226"
+       sodipodi:r1="3.8608613"
+       sodipodi:cy="839.52301"
+       sodipodi:cx="566.39252"
+       sodipodi:sides="5"
+       id="path3646"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#00a100;stroke-width:35.29906464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="star" />
+    <path
+       transform="matrix(0.272574,1.2309989e-2,-1.2858322e-2,0.2609503,464.35714,598.38051)"
+       d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="-0.66417817"
+       sodipodi:arg1="-1.2924967"
+       sodipodi:r2="7.7217226"
+       sodipodi:r1="3.8608613"
+       sodipodi:cy="839.52301"
+       sodipodi:cx="566.39252"
+       sodipodi:sides="5"
+       id="path3648"
+       style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#4b4bff;stroke-width:35.29906464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="star" />
+    <path
+       transform="matrix(0.1668918,0.1065936,-0.1502726,0.1897914,624.05104,651.11923)"
+       d="M 559.81399 897.85938 A 44.686672 47.620178 0 1 1  470.44065,897.85938 A 44.686672 47.620178 0 1 1  559.81399 897.85938 z"
+       sodipodi:ry="47.620178"
+       sodipodi:rx="44.686672"
+       sodipodi:cy="897.85938"
+       sodipodi:cx="515.12732"
+       id="path4681"
+       style="fill:#ffffff;fill-opacity:0.96703342;fill-rule:nonzero;stroke:#090303;stroke-width:8.73597431;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98360656"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     style="display:inline"
+     id="g17053"
+     transform="matrix(0.2445295,0,0,0.2430948,131.58122,35.384719)">
+    <rect
+       ry="29.257792"
+       rx="29.086124"
+       y="423.20496"
+       x="355.73645"
+       height="99.78186"
+       width="99.78186"
+       id="rect17055"
+       style="fill:url(#radialGradient17059);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+    <path
+       transform="matrix(0.452101,0,0,0.484373,563.5737,407.7282)"
+       d="M -418.05177,221.55162 L -418.05177,134.95318 L -418.05177,48.354749 L -343.05532,91.653969 L -268.05888,134.95319 L -343.05532,178.25241 L -418.05177,221.55162 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="3.1415927"
+       sodipodi:arg1="2.0943951"
+       sodipodi:r2="49.997631"
+       sodipodi:r1="99.995262"
+       sodipodi:cy="134.95319"
+       sodipodi:cx="-368.05414"
+       sodipodi:sides="3"
+       id="path17057"
+       style="fill:#008033;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:3.62562513;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       sodipodi:type="star" />
+  </g>
+  <g
+     id="g21908"
+     transform="matrix(0.6801604,0,0,0.6801604,124.49954,136.41977)">
+    <rect
+       width="35.760925"
+       height="35.760925"
+       rx="7.9460096"
+       ry="7.9460096"
+       x="-227.18408"
+       y="-113.8597"
+       transform="scale(-1,1)"
+       style="fill:url(#radialGradient21912);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74953651;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect19956" />
+    <rect
+       width="26.976021"
+       height="30.992802"
+       rx="22.477581"
+       ry="7.9460096"
+       x="195.81561"
+       y="-111.36695"
+       style="fill:#f95557;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.02269864;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect19958" />
+  </g>
+  <g
+     id="g22907"
+     transform="matrix(0.6801604,0,0,0.6801604,5.2249174,134.01503)">
+    <rect
+       id="rect21916"
+       style="fill:url(#radialGradient22911);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74953711;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="-111.7384"
+       x="151.82515"
+       ry="7.9460163"
+       rx="7.9460163"
+       height="35.760952"
+       width="35.760952" />
+    <path
+       id="path21918"
+       style="fill:#008033;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.60806185;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 158.57577,-78.824867 L 158.57577,-93.857923 L 158.57577,-108.89098 L 170.72736,-101.37445 L 182.87895,-93.857921 L 170.72736,-86.341393 L 158.57577,-78.824867 z " />
+  </g>
+  <path
+     style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 479.04781,429.57872 L 460.51344,429.57872"
+     id="path5612"
+     inkscape:connector-type="polyline" />
+  <path
+     style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 430.55339,429.57872 L 449.08776,429.57872"
+     id="path5617"
+     inkscape:connector-type="polyline" />
+  <path
+     style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 431.13119,474.2316 L 431.13119,492.76597"
+     id="path5619"
+     inkscape:connector-type="polyline" />
+  <path
+     style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 479.25254,475.38719 L 479.25254,456.85282"
+     id="path5621"
+     inkscape:connector-type="polyline" />
+  <g
+     id="g5456"
+     transform="matrix(0.6801604,0,0,0.6801604,13.881947,11.494019)">
+    <path
+       inkscape:connector-type="polyline"
+       id="path3479"
+       d="M 660.56485,524.48896 L 711.90839,524.46219"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.57923365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+    <g
+       id="g5451">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.78366613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 658.18058,522.19705 L 658.18058,550.37123"
+         id="path3481"
+         inkscape:connector-type="polyline" />
+      <text
+         xml:space="preserve"
+         style="font-size:21.18201256px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         x="664.1015"
+         y="546.73944"
+         id="text3483"><tspan
+           sodipodi:role="line"
+           id="tspan3485"
+           x="664.1015"
+           y="546.73944">*</tspan></text>
+    </g>
+  </g>
+  <rect
+     id="rect3499"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.54178809999999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="408.77814"
+     x="505"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus/edit_voice_1.png"
+     inkscape:export-xdpi="51.581074"
+     inkscape:export-ydpi="51.581074" />
+  <rect
+     id="rect3501"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.54178809999999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.15314"
+     x="505"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus/edit_voice_2.png"
+     inkscape:export-xdpi="51.581074"
+     inkscape:export-ydpi="51.581074" />
+  <rect
+     id="rect3503"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="316.66254"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_dead.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3505"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="361.5531"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/repeat_alternative.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3507"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.80037"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_staccato.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3509"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="269.05127"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3511"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="123.49697"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_trill.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3513"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.82884"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_bar.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <g
+     id="g4645"
+     transform="matrix(2.1169218e-2,0,0,-2.1169218e-2,520.23635,150.36733)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_treble.png"
+     inkscape:export-xdpi="112.41393"
+     inkscape:export-ydpi="112.41393">
+    <path
+       id="path4647"
+       d="M 297,1245 C 303,1248 304,1248 310,1248 C 318,1247 323,1244 334,1232 C 406,1158 466,1026 481,914 C 483,896 483,854 481,835 C 470,732 427,638 328,503 L 314,484 L 322,461 C 341,406 363,339 377,290 C 381,278 384,268 384,267 C 384,267 391,267 398,266 C 433,263 463,255 494,240 C 519,227 541,212 562,192 C 585,169 600,148 614,119 C 635,77 644,33 643,-11 C 642,-39 638,-60 629,-86 C 617,-124 595,-159 565,-189 C 539,-215 515,-231 483,-244 L 471,-249 L 471,-285 C 471,-336 468,-396 464,-43 [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g4687"
+     transform="matrix(2.5582031e-2,0,0,-2.5582031e-2,518.81737,190.80995)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_bass.png"
+     inkscape:export-xdpi="88.486824"
+     inkscape:export-ydpi="88.486824">
+    <path
+       id="path4689"
+       d="M 207,266 C 218,267 261,266 277,265 C 402,251 487,189 515,91 C 522,64 525,44 524,10 C 524,-33 519,-69 505,-107 C 454,-258 305,-383 33,-503 C 22,-508 12,-513 11,-514 C 5,-518 -1,-519 -7,-516 C -12,-514 -14,-512 -16,-507 C -19,-502 -18,-497 -16,-493 C -14,-489 -10,-486 12,-473 C 101,-420 166,-373 221,-325 C 238,-309 270,-277 284,-261 C 345,-190 377,-121 388,-41 C 390,-22 390,23 388,42 C 384,71 377,98 368,122 C 361,138 359,143 351,156 C 322,205 278,232 229,232 C 181,232 141,205 11 [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g4729"
+     transform="matrix(2.3963563e-2,0,0,-2.3963563e-2,518.94351,243.2844)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_alto.png"
+     inkscape:export-xdpi="92.514755"
+     inkscape:export-ydpi="92.514755">
+    <path
+       id="path4731"
+       d="M 9,498 C 12,500 18,500 72,500 L 132,500 L 135,497 C 137,495 139,493 140,491 C 142,487 142,450 142,0 C 142,-450 142,-487 140,-491 C 139,-493 137,-495 135,-497 L 132,-499 L 71,-499 L 10,-499 L 7,-497 C 5,-495 3,-493 2,-491 C 0,-487 0,-450 0,1 L 1,490 L 3,493 C 5,495 7,497 9,498 z M 201,498 C 204,500 207,500 218,500 C 231,500 232,499 235,497 C 243,491 242,514 242,254 L 242,21 L 248,26 C 273,50 296,87 309,120 C 317,144 322,171 324,200 C 324,213 325,215 327,218 C 329,221 336,225 34 [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g3548"
+     transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,524.00563,345.37089)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_flat.png"
+     inkscape:export-xdpi="40.069347"
+     inkscape:export-ydpi="40.069347">
+    <path
+       id="path3550"
+       d="M -12,469 C -1,471 17,469 24,464 C 26,463 26,452 23,289 C 21,194 20,116 20,116 C 20,115 24,117 28,120 C 49,134 75,142 101,144 C 128,145 150,137 169,118 C 188,100 198,76 200,50 C 201,31 197,14 188,-4 C 174,-31 154,-50 94,-91 C 56,-117 46,-125 34,-139 C 28,-145 21,-152 19,-153 C 10,-159 0,-158 -8,-151 C -10,-148 -12,-145 -13,-142 C -14,-140 -16,-33 -19,136 C -22,287 -24,422 -25,437 L -25,463 L -21,465 C -19,466 -15,468 -12,469 z M 94,102 C 87,106 76,107 67,104 C 49,99 34,83 28,62 [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g3590"
+     transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,523.10578,382.55733)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_natural.png"
+     inkscape:export-xdpi="40.012753"
+     inkscape:export-ydpi="40.012753">
+    <path
+       id="path3592"
+       d="M 7,380 C 15,382 33,380 40,375 C 41,374 41,359 40,288 C 39,240 39,201 39,201 C 39,200 64,204 95,209 C 127,215 152,218 153,218 C 158,217 162,213 165,208 L 167,204 L 170,-85 C 173,-317 174,-374 173,-374 C 172,-375 169,-376 166,-377 C 158,-380 142,-380 134,-377 C 131,-376 128,-375 127,-374 C 126,-373 126,-358 127,-287 C 128,-239 128,-200 128,-200 C 128,-199 103,-203 72,-208 C 40,-214 15,-217 14,-217 C 9,-216 5,-212 2,-207 L 0,-202 L -3,49 C -5,187 -6,317 -7,338 L -7,375 L -2,377 C [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g3632"
+     transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,520.02757,289.61034)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_sharp.png"
+     inkscape:export-xdpi="32.806053"
+     inkscape:export-ydpi="32.806053">
+    <path
+       id="path3634"
+       d="M 191,373 C 198,377 209,374 213,365 C 215,361 215,358 215,288 C 215,247 215,214 216,214 C 216,214 225,218 236,222 C 259,231 262,232 268,227 C 275,222 275,221 275,181 C 275,147 275,144 273,141 C 272,139 270,137 269,136 C 267,135 255,129 241,124 L 216,113 L 215,32 C 215,-12 215,-49 216,-49 C 216,-49 225,-45 236,-41 C 259,-32 262,-31 268,-36 C 275,-41 275,-42 275,-82 C 275,-116 275,-119 273,-122 C 272,-124 270,-126 269,-127 C 267,-128 255,-134 241,-139 L 216,-150 L 215,-234 C 215, [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g4514"
+     transform="translate(0.7071068,2.4748737)">
+    <g
+       transform="matrix(0.5668049,0,0,0.8603553,-3.5065048,130.39104)"
+       id="g3515">
+      <path
+         d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path3517" />
+      <path
+         d="M 683.05261,356.83776 L 683.05261,326.03045"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path3519" />
+    </g>
+    <path
+       sodipodi:nodetypes="ccccccc"
+       id="path3541"
+       d="M 387.957,426.78352 L 398.26464,437.35718 L 398.26464,433.5566 L 391.48325,426.78352 L 398.26464,420.07412 L 398.26464,416.27354 L 387.957,426.78352 z "
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black" />
+    <path
+       sodipodi:nodetypes="ccccccc"
+       id="path3543"
+       d="M 378.09836,426.89402 L 367.79072,416.32036 L 367.79072,420.12094 L 374.57211,426.89402 L 367.79072,433.60342 L 367.79072,437.404 L 378.09836,426.89402 z "
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:22px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="675.8205"
+     y="338.63779"
+     id="text3736"
+     transform="scale(0.7694351,1.2996548)"
+     inkscape:label="#text3736"><tspan
+       sodipodi:role="line"
+       id="tspan3738"
+       x="675.8205"
+       y="338.63779">1</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:22px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="675.8205"
+     y="373.55087"
+     id="text3740"
+     transform="scale(0.7694351,1.2996548)"><tspan
+       sodipodi:role="line"
+       id="tspan3742"
+       x="675.8205"
+       y="373.55087">2</tspan></text>
+</svg>
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/song_properties.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/song_properties.png
new file mode 100644
index 0000000..bbb0e9c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/song_properties.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/splash.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/splash.png
new file mode 100644
index 0000000..4f0383a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/splash.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/tempo.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/tempo.png
new file mode 100644
index 0000000..a06586e
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/tempo.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/tempoicon.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/tempoicon.png
new file mode 100644
index 0000000..922047c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/tempoicon.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/tiednote.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/tiednote.png
new file mode 100644
index 0000000..f1a7631
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/tiednote.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/timesignature.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/timesignature.png
new file mode 100644
index 0000000..c047cdf
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/timesignature.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/track_add.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/track_add.png
new file mode 100644
index 0000000..5fae2a9
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/track_add.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/track_remove.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/track_remove.png
new file mode 100644
index 0000000..b7c4a74
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/track_remove.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport.png
new file mode 100644
index 0000000..7dd0649
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_first_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_first_1.png
new file mode 100644
index 0000000..0611b44
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_first_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_first_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_first_2.png
new file mode 100644
index 0000000..4b95286
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_first_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_first_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_first_1.png
new file mode 100644
index 0000000..0ba109b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_first_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_first_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_first_2.png
new file mode 100644
index 0000000..aaf03e6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_first_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_last_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_last_1.png
new file mode 100644
index 0000000..2e038f6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_last_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_last_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_last_2.png
new file mode 100644
index 0000000..7007064
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_last_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_next_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_next_1.png
new file mode 100644
index 0000000..2ce4d78
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_next_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_next_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_next_2.png
new file mode 100644
index 0000000..31cef80
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_next_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_pause.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_pause.png
new file mode 100644
index 0000000..841e0d6
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_pause.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_play_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_play_1.png
new file mode 100644
index 0000000..2d744db
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_play_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_play_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_play_2.png
new file mode 100644
index 0000000..f2b8ad3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_play_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_previous_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_previous_1.png
new file mode 100644
index 0000000..7e37f19
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_previous_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_previous_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_previous_2.png
new file mode 100644
index 0000000..65fa720
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_previous_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_stop_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_stop_1.png
new file mode 100644
index 0000000..60351a8
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_stop_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_stop_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_stop_2.png
new file mode 100644
index 0000000..61b7be2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_icon_stop_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_last_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_last_1.png
new file mode 100644
index 0000000..4df5a1c
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_last_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_last_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_last_2.png
new file mode 100644
index 0000000..4408e75
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_last_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_metronome.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_metronome.png
new file mode 100644
index 0000000..be8f411
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_metronome.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_mode.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_mode.png
new file mode 100644
index 0000000..b572004
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_mode.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_next_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_next_1.png
new file mode 100644
index 0000000..76d960b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_next_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_next_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_next_2.png
new file mode 100644
index 0000000..35fc6c2
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_next_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_pause.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_pause.png
new file mode 100644
index 0000000..55d0aff
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_pause.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_play_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_play_1.png
new file mode 100644
index 0000000..a1975f3
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_play_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_play_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_play_2.png
new file mode 100644
index 0000000..5dd5843
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_play_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_previous_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_previous_1.png
new file mode 100644
index 0000000..5fe8efb
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_previous_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_previous_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_previous_2.png
new file mode 100644
index 0000000..0a2008a
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_previous_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_stop_1.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_stop_1.png
new file mode 100644
index 0000000..bf0010f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_stop_1.png differ
diff --git a/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_stop_2.png b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_stop_2.png
new file mode 100644
index 0000000..9ab8e3b
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/skins/ersplus/transport_stop_2.png differ
diff --git a/TuxGuitar-testing/platform-all/share/templates/template-1.tg b/TuxGuitar-testing/platform-all/share/templates/template-1.tg
new file mode 100644
index 0000000..f0feb3d
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/templates/template-1.tg differ
diff --git a/TuxGuitar-testing/platform-all/share/templates/template-2.tg b/TuxGuitar-testing/platform-all/share/templates/template-2.tg
new file mode 100644
index 0000000..09c8dd4
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/templates/template-2.tg differ
diff --git a/TuxGuitar-testing/platform-all/share/templates/template-default.tg b/TuxGuitar-testing/platform-all/share/templates/template-default.tg
new file mode 100644
index 0000000..4edb043
Binary files /dev/null and b/TuxGuitar-testing/platform-all/share/templates/template-default.tg differ
diff --git a/TuxGuitar-testing/platform-all/share/templates/templates.xml b/TuxGuitar-testing/platform-all/share/templates/templates.xml
new file mode 100644
index 0000000..f0ece2f
--- /dev/null
+++ b/TuxGuitar-testing/platform-all/share/templates/templates.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<templates>
+	<template resource="template-1.tg" name="Blues Trio"/>
+	<template resource="template-2.tg" name="Classical Guitar Duo"/>
+</templates>
\ No newline at end of file
diff --git a/TuxGuitar-testing/platform-all/tuxguitar.jar b/TuxGuitar-testing/platform-all/tuxguitar.jar
new file mode 100644
index 0000000..febf64f
Binary files /dev/null and b/TuxGuitar-testing/platform-all/tuxguitar.jar differ
diff --git a/TuxGuitar-testing/platform-linux-x86/lib/libtuxguitar-alsa-jni.so b/TuxGuitar-testing/platform-linux-x86/lib/libtuxguitar-alsa-jni.so
new file mode 100755
index 0000000..6e3d41c
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86/lib/libtuxguitar-alsa-jni.so differ
diff --git a/TuxGuitar-testing/platform-linux-x86/lib/libtuxguitar-fluidsynth-jni.so b/TuxGuitar-testing/platform-linux-x86/lib/libtuxguitar-fluidsynth-jni.so
new file mode 100755
index 0000000..ec81a7b
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86/lib/libtuxguitar-fluidsynth-jni.so differ
diff --git a/TuxGuitar-testing/platform-linux-x86/lib/libtuxguitar-jack-jni.so b/TuxGuitar-testing/platform-linux-x86/lib/libtuxguitar-jack-jni.so
new file mode 100755
index 0000000..78d52e7
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86/lib/libtuxguitar-jack-jni.so differ
diff --git a/TuxGuitar-testing/platform-linux-x86/lib/swt.jar b/TuxGuitar-testing/platform-linux-x86/lib/swt.jar
new file mode 100644
index 0000000..dc48467
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86/lib/swt.jar differ
diff --git a/TuxGuitar-testing/platform-linux-x86/lib/tuxguitar-dist.jar b/TuxGuitar-testing/platform-linux-x86/lib/tuxguitar-dist.jar
new file mode 100644
index 0000000..6127c08
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86/lib/tuxguitar-dist.jar differ
diff --git a/TuxGuitar-testing/platform-linux-x86/share/plugins/tuxguitar-alsa.jar b/TuxGuitar-testing/platform-linux-x86/share/plugins/tuxguitar-alsa.jar
new file mode 100644
index 0000000..121dc98
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86/share/plugins/tuxguitar-alsa.jar differ
diff --git a/TuxGuitar-testing/platform-linux-x86/share/plugins/tuxguitar-fluidsynth.jar b/TuxGuitar-testing/platform-linux-x86/share/plugins/tuxguitar-fluidsynth.jar
new file mode 100644
index 0000000..0b08c68
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86/share/plugins/tuxguitar-fluidsynth.jar differ
diff --git a/TuxGuitar-testing/platform-linux-x86/share/plugins/tuxguitar-jack.jar b/TuxGuitar-testing/platform-linux-x86/share/plugins/tuxguitar-jack.jar
new file mode 100644
index 0000000..fb565cf
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86/share/plugins/tuxguitar-jack.jar differ
diff --git a/TuxGuitar-testing/platform-linux-x86_64/lib/libtuxguitar-alsa-jni.so b/TuxGuitar-testing/platform-linux-x86_64/lib/libtuxguitar-alsa-jni.so
new file mode 100644
index 0000000..6141daa
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86_64/lib/libtuxguitar-alsa-jni.so differ
diff --git a/TuxGuitar-testing/platform-linux-x86_64/lib/swt.jar b/TuxGuitar-testing/platform-linux-x86_64/lib/swt.jar
new file mode 100644
index 0000000..314da6a
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86_64/lib/swt.jar differ
diff --git a/TuxGuitar-testing/platform-linux-x86_64/lib/tuxguitar-dist.jar b/TuxGuitar-testing/platform-linux-x86_64/lib/tuxguitar-dist.jar
new file mode 100644
index 0000000..e1b68ee
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86_64/lib/tuxguitar-dist.jar differ
diff --git a/TuxGuitar-testing/platform-linux-x86_64/share/plugins/tuxguitar-alsa.jar b/TuxGuitar-testing/platform-linux-x86_64/share/plugins/tuxguitar-alsa.jar
new file mode 100644
index 0000000..10a896b
Binary files /dev/null and b/TuxGuitar-testing/platform-linux-x86_64/share/plugins/tuxguitar-alsa.jar differ
diff --git a/TuxGuitar-testing/platform-win32/fluidsynth.dll b/TuxGuitar-testing/platform-win32/fluidsynth.dll
new file mode 100755
index 0000000..3b6694e
Binary files /dev/null and b/TuxGuitar-testing/platform-win32/fluidsynth.dll differ
diff --git a/TuxGuitar-testing/platform-win32/lib/swt.jar b/TuxGuitar-testing/platform-win32/lib/swt.jar
new file mode 100644
index 0000000..4511b30
Binary files /dev/null and b/TuxGuitar-testing/platform-win32/lib/swt.jar differ
diff --git a/TuxGuitar-testing/platform-win32/lib/tuxguitar-dist.jar b/TuxGuitar-testing/platform-win32/lib/tuxguitar-dist.jar
new file mode 100644
index 0000000..d59cc73
Binary files /dev/null and b/TuxGuitar-testing/platform-win32/lib/tuxguitar-dist.jar differ
diff --git a/TuxGuitar-testing/platform-win32/lib/tuxguitar-fluidsynth-jni.dll b/TuxGuitar-testing/platform-win32/lib/tuxguitar-fluidsynth-jni.dll
new file mode 100755
index 0000000..3a3e6f2
Binary files /dev/null and b/TuxGuitar-testing/platform-win32/lib/tuxguitar-fluidsynth-jni.dll differ
diff --git a/TuxGuitar-testing/platform-win32/lib/tuxguitar-jack-jni.dll b/TuxGuitar-testing/platform-win32/lib/tuxguitar-jack-jni.dll
new file mode 100755
index 0000000..75e767c
Binary files /dev/null and b/TuxGuitar-testing/platform-win32/lib/tuxguitar-jack-jni.dll differ
diff --git a/TuxGuitar-testing/platform-win32/pthreadVC2.dll b/TuxGuitar-testing/platform-win32/pthreadVC2.dll
new file mode 100755
index 0000000..93f562b
Binary files /dev/null and b/TuxGuitar-testing/platform-win32/pthreadVC2.dll differ
diff --git a/TuxGuitar-testing/platform-win32/share/plugins/tuxguitar-fluidsynth.jar b/TuxGuitar-testing/platform-win32/share/plugins/tuxguitar-fluidsynth.jar
new file mode 100644
index 0000000..f2cd681
Binary files /dev/null and b/TuxGuitar-testing/platform-win32/share/plugins/tuxguitar-fluidsynth.jar differ
diff --git a/TuxGuitar-testing/platform-win32/share/plugins/tuxguitar-jack.jar b/TuxGuitar-testing/platform-win32/share/plugins/tuxguitar-jack.jar
new file mode 100644
index 0000000..b733aa5
Binary files /dev/null and b/TuxGuitar-testing/platform-win32/share/plugins/tuxguitar-jack.jar differ
diff --git a/TuxGuitar-testing/tuxguitar.bat b/TuxGuitar-testing/tuxguitar.bat
new file mode 100755
index 0000000..3a216bf
--- /dev/null
+++ b/TuxGuitar-testing/tuxguitar.bat
@@ -0,0 +1,17 @@
+cd "platform-win32"
+
+SET "JAVA=java"
+
+SET "JAVA_LIBRARY_PATH=%JAVA_LIBRARY_PATH%;lib\"
+
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;..\platform-all\tuxguitar.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;..\platform-all\lib\itext.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;..\platform-all\lib\gervill.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;..\platform-all\share\"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;lib\tuxguitar-dist.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;lib\swt.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;share\"
+
+SET "TG_MAIN_CLASS=org.herac.tuxguitar.app.TGMain"
+
+%JAVA% -cp %JAVA_CLASSPATH% -Djava.library.path=%JAVA_LIBRARY_PATH% %TG_MAIN_CLASS% %1 %2 %3 %4 %5 %6 %7 %8 %9 %10
diff --git a/TuxGuitar-testing/tuxguitar_x86.sh b/TuxGuitar-testing/tuxguitar_x86.sh
new file mode 100755
index 0000000..32e4de4
--- /dev/null
+++ b/TuxGuitar-testing/tuxguitar_x86.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+##SCRIPT DIR
+DIR_NAME=`dirname "$0"`
+DIR_NAME=`cd "$DIR_NAME"; pwd`
+cd "${DIR_NAME}"
+
+##JAVA
+if [ -z $JAVA ]; then
+	JAVA=${JAVA_HOME}/bin/java
+	[ ! -f ${JAVA} ] && JAVA=/usr/bin/java
+	[ ! -f ${JAVA} ] && JAVA=java
+fi
+
+##PLATFORM_HOME
+PLATFORM_OS=./platform-linux-x86
+PLATFORM_ALL=./platform-all
+
+##LIBRARY_PATH
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PLATFORM_OS}/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
+
+##CLASSPATH
+CLASSPATH=${CLASSPATH}:${PLATFORM_ALL}/tuxguitar.jar
+CLASSPATH=${CLASSPATH}:${PLATFORM_ALL}/share
+CLASSPATH=${CLASSPATH}:${PLATFORM_OS}/lib/tuxguitar-dist.jar
+CLASSPATH=${CLASSPATH}:${PLATFORM_OS}/lib/swt.jar
+CLASSPATH=${CLASSPATH}:${PLATFORM_OS}/share
+
+##MAINCLASS
+MAINCLASS=org.herac.tuxguitar.app.TGMain
+
+##JVM ARGUMENTS
+VM_ARGS="-Xmx512m"
+
+##EXPORT VARS
+export CLASSPATH
+export LD_LIBRARY_PATH
+export MOZILLA_FIVE_HOME
+
+##LAUNCH
+${JAVA} ${VM_ARGS} -cp :${CLASSPATH} -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"
diff --git a/TuxGuitar-testing/tuxguitar_x86_64.sh b/TuxGuitar-testing/tuxguitar_x86_64.sh
new file mode 100755
index 0000000..5810ec8
--- /dev/null
+++ b/TuxGuitar-testing/tuxguitar_x86_64.sh
@@ -0,0 +1,45 @@
+#!/bin/sh
+
+##SCRIPT DIR
+DIR_NAME=`dirname "$0"`
+DIR_NAME=`cd "$DIR_NAME"; pwd`
+cd "${DIR_NAME}"
+
+##JAVA
+if [ -z $JAVA ]; then
+	JAVA=${JAVA_HOME}/bin/java
+	[ ! -f ${JAVA} ] && JAVA=/usr/bin/java
+	[ ! -f ${JAVA} ] && JAVA=java
+fi
+
+##PLATFORM_HOME
+PLATFORM_OS=./platform-linux-x86_64
+PLATFORM_ALL=./platform-all
+
+##LIBRARY_PATH
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${PLATFORM_OS}/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
+
+##CLASSPATH
+CLASSPATH=${CLASSPATH}:${PLATFORM_ALL}/tuxguitar.jar
+CLASSPATH=${CLASSPATH}:${PLATFORM_ALL}/share
+CLASSPATH=${CLASSPATH}:${PLATFORM_OS}/lib/tuxguitar-dist.jar
+CLASSPATH=${CLASSPATH}:${PLATFORM_OS}/lib/swt.jar
+CLASSPATH=${CLASSPATH}:${PLATFORM_OS}/share
+
+##MAINCLASS
+MAINCLASS=org.herac.tuxguitar.app.TGMain
+
+##JVM ARGUMENTS
+VM_ARGS="-Xmx512m"
+
+##EXPORT VARS
+export CLASSPATH
+export LD_LIBRARY_PATH
+export MOZILLA_FIVE_HOME
+
+##LAUNCH
+${JAVA} ${VM_ARGS} -cp :${CLASSPATH} -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"
diff --git a/TuxGuitar-tray/GNUmakefile b/TuxGuitar-tray/GNUmakefile
deleted file mode 100644
index b63ba30..0000000
--- a/TuxGuitar-tray/GNUmakefile
+++ /dev/null
@@ -1,72 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:23:52 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-PACKAGE?=tuxguitar-tray
-LIBRARY?=lib$(PACKAGE).so
-LIBRARY_PROVIDER?=org.herac.tuxguitar.tray.TGTrayPlugin
-
-PREFIX?=/usr
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# tuxguitar paths
-TG_SERVICE_CLASS?=org.herac.tuxguitar.gui.system.plugins.TGPlugin
-TG_PREFIX?=$(PREFIX)
-TG_SOURCE_PATH?=$(TG_PREFIX)/src
-TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
-TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
-
-# install paths
-INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
-INSTALL_SERVICE_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)/META-INF/services
-
-# build paths
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-OBJECTS?=$(PACKAGE).o
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH)
-
-default: all
-
-all: objects library meta-inf
-
-objects: tmp.classes.tmp
-
-tmp.classes.tmp: $(OBJECTS)
-	@touch $@
-
-library: $(LIBRARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
-	-install -d $(DESTDIR)$(INSTALL_SERVICE_DIR)/
-	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-install $(TG_SERVICE_CLASS) $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-uninstall:
-	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
-	-rm $(DESTDIR)$(INSTALL_SERVICE_DIR)/$(TG_SERVICE_CLASS)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-	- at rm $(TG_SERVICE_CLASS)
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	${GCJ} -shared -o $@ -ltuxguitar -L$(TG_LIBRARY_PATH) $(^F)
-
-meta-inf:
-	echo $(LIBRARY_PROVIDER) > $(TG_SERVICE_CLASS)
-
-#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:23:52 akdmia Exp $"
\ No newline at end of file
diff --git a/TuxGuitar-tray/build.properties b/TuxGuitar-tray/build.properties
index dba8bef..717c2ef 100644
--- a/TuxGuitar-tray/build.properties
+++ b/TuxGuitar-tray/build.properties
@@ -4,5 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
 path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-tray/build.xml b/TuxGuitar-tray/build.xml
index f8c0ca6..aa2a7a9 100644
--- a/TuxGuitar-tray/build.xml
+++ b/TuxGuitar-tray/build.xml
@@ -7,13 +7,15 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-tray.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
+	<property name="service.class" value="org.herac.tuxguitar.app.system.plugins.TGPlugin" />
 	<property name="service.provider" value="org.herac.tuxguitar.tray.TGTrayPlugin" />
 	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -32,8 +34,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   P L U G I N        |</echo>
diff --git a/TuxGuitar-tray/pom.xml b/TuxGuitar-tray/pom.xml
new file mode 100644
index 0000000..2b4a6b4
--- /dev/null
+++ b/TuxGuitar-tray/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-tray</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-tray/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-tray/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..a6ccd6d
--- /dev/null
+++ b/TuxGuitar-tray/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.tray.TGTrayPlugin
diff --git a/TuxGuitar-tray/share/META-INF/tuxguitar-tray.info b/TuxGuitar-tray/share/META-INF/tuxguitar-tray.info
new file mode 100644
index 0000000..b41eb32
--- /dev/null
+++ b/TuxGuitar-tray/share/META-INF/tuxguitar-tray.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=System Tray plugin
+plugin.description=System Tray plugin for tuxguitar
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTray.java b/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTray.java
index 3412940..cfc44ee 100644
--- a/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTray.java
+++ b/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTray.java
@@ -7,9 +7,9 @@ import org.eclipse.swt.widgets.Listener;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Tray;
 import org.eclipse.swt.widgets.TrayItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
 
 public class TGTray implements IconLoader,LanguageLoader{
 	
@@ -35,7 +35,6 @@ public class TGTray implements IconLoader,LanguageLoader{
 			for(int i = 0; i < items.length; i ++){
 				items[i].dispose();
 			}
-			this.icon.dispose();
 			this.menu.dispose();
 		}
 	}
diff --git a/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayIcon.java b/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayIcon.java
index 878a6e7..cba7d2d 100644
--- a/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayIcon.java
+++ b/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayIcon.java
@@ -1,12 +1,10 @@
 package org.herac.tuxguitar.tray;
 
-import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.TrayItem;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
+import org.herac.tuxguitar.app.TuxGuitar;
 
 public class TGTrayIcon {
 	
-	private Image image;
 	private TrayItem item;
 	
 	public TGTrayIcon(){
@@ -18,16 +16,8 @@ public class TGTrayIcon {
 	}
 	
 	public void loadImage(){
-		this.dispose();
-		if(this.item != null && !this.item.isDisposed()){
-			this.image = TGFileUtils.loadImage("icon-24x24.png");
-			this.item.setImage(this.image);
-		}
-	}
-	
-	public void dispose(){
-		if(this.image != null && !this.image.isDisposed()){
-			this.image.dispose();
+		if( this.item != null && !this.item.isDisposed() ){
+			this.item.setImage(TuxGuitar.instance().getIconManager().getAppIcon24());
 		}
 	}
 }
diff --git a/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayMenu.java b/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayMenu.java
index 6b3ff3c..fec857e 100644
--- a/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayMenu.java
+++ b/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayMenu.java
@@ -3,10 +3,11 @@ package org.herac.tuxguitar.tray;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.MenuItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.file.ExitAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportPlayAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportStopAction;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.file.ExitAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportPlayAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportStopAction;
 
 public class TGTrayMenu {
 	
@@ -19,16 +20,16 @@ public class TGTrayMenu {
 		this.menu = new Menu (TuxGuitar.instance().getShell(), SWT.POP_UP);
 		
 		this.play = new MenuItem(this.menu,SWT.PUSH);
-		this.play.addSelectionListener(TuxGuitar.instance().getAction(TransportPlayAction.NAME));
+		this.play.addSelectionListener(new TGActionProcessor(TransportPlayAction.NAME));
 		
 		this.stop = new MenuItem(this.menu, SWT.PUSH);
-		this.stop.addSelectionListener(TuxGuitar.instance().getAction(TransportStopAction.NAME));
+		this.stop.addSelectionListener(new TGActionProcessor(TransportStopAction.NAME));
 		
 		//--SEPARATOR--
 		new MenuItem(this.menu, SWT.SEPARATOR);
 		
 		this.exit = new MenuItem(this.menu, SWT.PUSH);
-		this.exit.addSelectionListener(TuxGuitar.instance().getAction(ExitAction.NAME));
+		this.exit.addSelectionListener(new TGActionProcessor(ExitAction.NAME));
 		
 		this.loadProperties();
 		this.loadIcons();
diff --git a/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayPlugin.java b/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayPlugin.java
index 4f8be12..bfd43d5 100644
--- a/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayPlugin.java
+++ b/TuxGuitar-tray/src/org/herac/tuxguitar/tray/TGTrayPlugin.java
@@ -1,8 +1,10 @@
 package org.herac.tuxguitar.tray;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGPluginAdapter;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
 
-public class TGTrayPlugin extends TGPluginAdapter {
+public class TGTrayPlugin implements TGPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-tray";
 	
 	private boolean loaded;
 	private TGTray tray;
@@ -41,19 +43,7 @@ public class TGTrayPlugin extends TGPluginAdapter {
 		}
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getName() {
-		return "System Tray plugin";
-	}
-	
-	public String getDescription() {
-		return "System Tray plugin for tuxguitar";
-	}
-	
-	public String getVersion() {
-		return "1.0";
+	public String getModuleId(){
+		return MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-tuner/build.properties b/TuxGuitar-tuner/build.properties
index dba8bef..717c2ef 100644
--- a/TuxGuitar-tuner/build.properties
+++ b/TuxGuitar-tuner/build.properties
@@ -4,5 +4,6 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
 path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-tuner/build.xml b/TuxGuitar-tuner/build.xml
index 81b9276..92273b3 100644
--- a/TuxGuitar-tuner/build.xml
+++ b/TuxGuitar-tuner/build.xml
@@ -7,13 +7,12 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-tuner.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.gui.tools.custom.tuner.TGTunerPlugin" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -32,10 +31,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}${file.separator}lang" />
-		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+-----------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   L I B R A R Y      |</echo>
diff --git a/TuxGuitar-tuner/pom.xml b/TuxGuitar-tuner/pom.xml
new file mode 100644
index 0000000..562e176
--- /dev/null
+++ b/TuxGuitar-tuner/pom.xml
@@ -0,0 +1,46 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-tuner</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-tuner/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-tuner/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..367902d
--- /dev/null
+++ b/TuxGuitar-tuner/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.app.tools.custom.tuner.TGTunerPlugin
diff --git a/TuxGuitar-tuner/share/META-INF/tuxguitar-tuner.info b/TuxGuitar-tuner/share/META-INF/tuxguitar-tuner.info
new file mode 100644
index 0000000..41f1159
--- /dev/null
+++ b/TuxGuitar-tuner/share/META-INF/tuxguitar-tuner.info
@@ -0,0 +1,6 @@
+### Plugin Information ###
+plugin.name=GuitarTuner
+plugin.description=Visual tuner that analyses the most dominant frequency from your microphone and displays it on the tuner scale.
+plugin.author=Nikola Kolarovic
+plugin.version=0.01b
+	
\ No newline at end of file
diff --git a/TuxGuitar-tuner/share/lang/messages.properties b/TuxGuitar-tuner/share/lang/messages.properties
new file mode 100644
index 0000000..0fee22e
--- /dev/null
+++ b/TuxGuitar-tuner/share/lang/messages.properties
@@ -0,0 +1,12 @@
+tuner.instrument-tuner=Instrument tuner
+tuner.tuner=Tuner
+tuner.settings=Settings
+tuner.device-settings=Device settings
+tuner.sound-format=Sound format
+tuner.sample-rate=Sample rate
+tuner.sample-size=Sample size
+tuner.sampling-and-analyze=Sampling and analyze
+tuner.sampling-buffer-size=Sampling buffersize
+tuner.fourier-buffer-size=Fourier buffersize
+tuner.noise-gate=Noise gate
+tuner.info=Info
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTuner.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTuner.java
new file mode 100644
index 0000000..03f49d9
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTuner.java
@@ -0,0 +1,312 @@
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+import javax.sound.sampled.LineUnavailableException;
+import javax.sound.sampled.TargetDataLine;
+
+import craigl.spectrumanalyzer.FFT;
+
+
+/**
+ * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
+ * 
+ * 
+ * Having great help analizyng project:
+ * 
+ * GuitarTuner developed by OpenStudio
+ * www.openstudio.fr
+ * Copyright (2005) Arnault Pachot.
+ * Project URL: http://sourceforge.net/projects/guitartuner
+ *
+ */
+public class TGTuner extends Thread {
+	protected TGTunerListener mainWindow = null;
+	protected boolean canceled;
+	protected boolean paused;
+	protected TGTunerSettings settings;
+	protected TargetDataLine dataLine;
+	protected TGTunerQueue queue;
+	
+	//static final int LOG2_FFTSIZE = 14;
+	//protected int FFT_SIZE; 
+	protected FFT fft;
+	protected double[] ar;
+	protected double[] ai;
+	protected byte[] data;
+	protected double rate;
+	
+	protected double maximumFrequency;
+	protected double minimumFrequency;
+	
+	TGTuner(TGTunerListener mainWindow) {
+		this.mainWindow = mainWindow;
+		this.canceled = false;
+		this.paused = false;
+		this.queue = new TGTunerQueue();
+		try {
+			this.settings = TGTunerSettings.loadTuxGuitarSettings();
+			this.dataLine = TGTunerSettings.getDataLine(this.settings);
+		} catch (Exception ex) {
+			this.mainWindow.fireException(ex);
+		}
+
+		this.setWantedRange();
+		
+	}
+
+
+	public void run() {
+		
+		// TODO: remove this benchmark
+		int cycles=0;
+		long timePassed=0;
+		
+		
+		if (this.dataLine!=null) {
+			this.openDataLine();
+		}
+
+		while (!this.canceled) {
+		  if (this.dataLine!=null)
+			if (!this.paused && this.dataLine.isOpen()) {
+				 synchronized(this) {
+				
+					// read from the input
+					this.dataLine.read(this.data,0,this.settings.getBufferSize());
+					
+					// preapare the arrays for FFT
+					for (int i=0; i<this.settings.getBufferSize(); i++) {
+						this.ar[i] = this.data[i]; // implicit cast to double
+						this.ai[i] = 0.0f;
+					}
+					
+					// when buffer size is smaller than FFT_SIZE 
+					for (int i=this.settings.getBufferSize(); i<this.settings.getFFTSize(); i++) {
+						this.ar[i] = 0.0f;
+						this.ai[i] = 0.0f;
+					}
+					
+					/////////////////////////////////////////////////////////////
+					// TODO: look at the benchmark, uncoment the other one and comment the first one
+					cycles++;
+					long startTime = System.currentTimeMillis();
+					
+					if (this.fft!=null)
+						this.fft.doFFT(this.ar, this.ai, false);
+					//TGTuner.computeFFT(1, this.settings.getFFTSize(), this.ar, this.ai);
+					
+					timePassed+=System.currentTimeMillis()-startTime;
+					/////////////////////////////////////////////////////////////
+					
+					
+					// ------ determine the dominant frequency -------
+					double frequency = -1;
+					double maxAmplitude = this.settings.getThreshold(); // noise gate
+					
+					
+					// TODO: maybe to analyze only the data around the area of interest
+					// start has to be at least 1, because we want to skip the DC component!
+					
+					//for (int i=0; i<this.settings.getFFTSize(); i++) {
+					for (int i=(int)Math.round(this.minimumFrequency / this.rate); i < Math.round(this.maximumFrequency / this.rate); i++) {
+						double curFreq = i * this.rate;
+						// z = x*i + y*j  // power = |z| = sqrt(x^2 + y^2)
+						double power = Math.sqrt(Math.pow(this.ar[i], 2) + Math.pow(this.ai[i], 2));
+						
+						if (power > maxAmplitude) {
+							maxAmplitude = power;
+							frequency = curFreq;
+						}
+						
+					}
+					
+					//System.out.println("Max Amplitude: "+maxAmplitude);
+					
+					//** buffer the frequency
+					this.queue.add(frequency);
+					
+					// fire the frequency event on GUI
+					this.mainWindow.fireFrequency(this.queue.getFreqApproximation());
+					
+					// flush the dataline, so the new data is received
+					this.dataLine.flush();
+			
+				 }  // end of synchronized block
+			}
+		  
+			// sleep thread to get better app response
+		  	try {
+				Thread.sleep(this.settings.getWaitPeriod());
+			} catch (InterruptedException e) {
+				// do nothing?
+			}
+		}
+		
+		
+		this.closeDataLine();
+		System.out.println(" Average FFT time: "+(double)timePassed/(double)cycles);
+		
+	}
+	
+	
+	protected void computeFFTParams() {
+		if (this.settings!=null) {
+			
+			    int number = this.settings.getFFTSize(), log=0;
+				for (int i=0; i<20; i++) { // count log2
+					number/=2;
+					if (number < 1) {
+						this.fft = new FFT(log); // instantiate proper FFT alrgorithm
+						break;
+					}
+					log++;
+				}
+				this.data = new byte[this.settings.getBufferSize()]; // data buffer
+				this.ar = new double[this.settings.getFFTSize()]; // create real array for FFT
+				this.ai = new double[this.settings.getFFTSize()]; // create imaginary array for FFT
+				
+				// TODO: rate is maybe not the best /2 ?
+				this.rate = ((double) this.settings.getSampleRate()) / this.settings.getFFTSize();
+		}
+	}
+
+	public void setCanceled(boolean canceled) {
+			this.canceled = canceled;
+	}
+
+	public void pause() {
+			this.paused = true;
+		
+	}
+
+	public void resumeFromPause() {
+			this.paused = false;
+			this.queue.clear();
+	}
+
+
+	public void setSettings(TGTunerSettings settings) {
+		this.closeDataLine();
+		synchronized(this) {
+			this.settings = settings;
+			try {
+				this.dataLine = TGTunerSettings.getDataLine(settings);
+			} catch (Exception ex) {
+				this.mainWindow.fireException(ex);
+			}
+		}
+		this.openDataLine();
+
+	}
+
+	public TGTunerSettings getSettings() {
+			return this.settings;
+	}
+	
+	public void setWantedNote(int note) {
+		// TODO: maybe too restrictive? But eliminates fifths harmonics...
+		this.minimumFrequency = getNoteFrequency(note-3);
+		this.maximumFrequency = getNoteFrequency(note+3);
+	}
+	
+	public void setWantedRange() {
+		// TODO: maybe to restrict only to 1 or 2 octaves!!!!!!!!!
+		int[] tuning = this.mainWindow.getTuning();
+		this.maximumFrequency = getNoteFrequency(tuning[0]+3); // 3 frets higher that the thiniest string
+		this.minimumFrequency = getNoteFrequency(tuning[tuning.length-1]-3); // 3 frets lower that the thickest string
+	}
+	
+	
+	public void openDataLine() {
+     if (this.dataLine!=null) {
+   	  synchronized(this) {
+			this.computeFFTParams();
+			try {
+				this.dataLine.open();
+				this.dataLine.start();
+				//this.dataLine.open(this.settings.getAudioFormat(), this.settings.getBufferSize());
+			} catch (LineUnavailableException e) {
+				System.out.println("------- TGTuner: openDataLine() exception -------");
+				e.printStackTrace();
+			}
+		}
+	  }
+	}
+	
+	public void closeDataLine() {
+	  synchronized(this) {
+		if (this.dataLine!=null) {
+				this.dataLine.stop();
+				this.dataLine.close();
+			}
+	  }
+	}
+	
+	public double getNoteFrequency(int midiNote) {
+		// A = 110Hz = MidiNote(45)
+		return 110 * Math.pow(2.0, (midiNote-45)/12.0 );
+	}
+	
+	
+	 public static void computeFFT(int sign, int n, double[] ar, double[] ai)
+	   {
+	      double scale = 2.0 / n;
+	      int i, j;
+	      for(i = j = 0; i < n; ++i)
+	      {
+	         if (j >= i)
+	         {
+	            double tempr = ar[j] * scale;
+	            double tempi = ai[j] * scale;
+	            ar[j] = ar[i] * scale;
+	            ai[j] = ai[i] * scale;
+	            ar[i] = tempr;
+	            ai[i] = tempi;
+	         }
+	         int m = n/2;
+	         while ((m >= 1) && (j >= m))
+	         {
+	            j -= m;
+	            m /= 2;
+	         }
+	         j += m;
+	      }
+	      int mmax, istep;
+	      for(mmax = 1, istep = 2 * mmax; mmax < n; mmax = istep, istep = 2 * mmax)
+	      {
+	         double delta = sign * Math.PI / mmax;
+	         for(int m = 0; m < mmax; ++m)
+	         {
+	            double w = m * delta;
+	            double wr = Math.cos(w);
+	            double wi = Math.sin(w);
+	            for(i = m; i < n; i += istep)
+	            {
+	               j = i + mmax;
+	               double tr = wr * ar[j] - wi * ai[j];
+	               double ti = wr * ai[j] + wi * ar[j];
+	               ar[j] = ar[i] - tr;
+	               ai[j] = ai[i] - ti;
+	               ar[i] += tr;
+	               ai[i] += ti;
+	            }
+	         }
+	         mmax = istep;
+	      }
+	   }
+	
+
+	 
+	 
+	 
+	 static class TGTunerException extends Exception {
+
+		private static final long serialVersionUID = -1860514279319403845L;
+
+		public TGTunerException(String string) {
+			super(string);
+		}
+		 
+	 }
+
+	
+}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerDialog.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerDialog.java
new file mode 100644
index 0000000..ce768b8
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerDialog.java
@@ -0,0 +1,206 @@
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Label;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
+ *
+ */
+public class TGTunerDialog implements TGTunerListener {
+	
+	private static final int SHELL_WIDTH = 400;
+	protected TGTuner tuner = null;
+	protected int[] tuning = null;
+	protected Label currentFrequency = null;
+	protected Shell dialog = null;
+	protected TGTunerRoughWidget roughTuner = null;
+	protected ArrayList allStringButtons = null;
+	protected TGTunerFineWidget fineTuner = null;
+	
+	TGTunerDialog(int[] tuning) {
+		this.tuning = tuning;
+	}
+
+
+	public void show() {
+
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+		this.dialog.setText(TuxGuitar.getProperty("tuner.instrument-tuner"));
+		this.dialog.setMinimumSize(SHELL_WIDTH,SWT.DEFAULT);
+		this.dialog.setSize(700, 400);
+		
+		Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);            
+		group.setLayout(new GridLayout());
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setText(TuxGuitar.getProperty("tuner.tuner"));
+		
+		Composite specialComposite = new Composite(group,SWT.NONE);
+		specialComposite.setLayout(new GridLayout(2,false));
+		specialComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.allStringButtons = new ArrayList(this.tuning.length);
+		
+		this.fineTuner = new TGTunerFineWidget(specialComposite);
+		
+		
+		Composite buttonsComposite = new Composite (specialComposite,SWT.NONE);
+		buttonsComposite.setLayout(new GridLayout(1,false));
+		buttonsComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		for (int i=0; i<this.tuning.length; i++)
+			createTuningString(this.tuning[i],buttonsComposite);
+
+		Composite tunComposite = new Composite(group,SWT.NONE);
+		tunComposite.setLayout(new GridLayout(1,false));
+		tunComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.currentFrequency = new Label(tunComposite,SWT.LEFT);
+		this.currentFrequency.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.roughTuner = new TGTunerRoughWidget(group);
+		
+		Composite btnComposite = new Composite(group,SWT.NONE);
+		btnComposite.setLayout(new GridLayout(2,false));
+		btnComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+        final Button buttonSettings = new Button(btnComposite, SWT.PUSH);
+        buttonSettings.setText(TuxGuitar.getProperty("settings"));
+        buttonSettings.setLayoutData(getGridData(80,25));
+        buttonSettings.addSelectionListener(new SelectionAdapter() {
+            public void widgetSelected(SelectionEvent arg0) {
+            	TGTunerDialog.this.getTuner().pause();
+            	new TGTunerSettingsDialog(TGTunerDialog.this).show();
+            }
+        });
+        
+        final Button buttonExit = new Button(btnComposite, SWT.PUSH);
+        buttonExit.setText(TuxGuitar.getProperty("close"));
+        buttonExit.setLayoutData(getGridData(80,25));
+        buttonExit.addSelectionListener(new SelectionAdapter() {
+            public void widgetSelected(SelectionEvent arg0) {
+            	TGTunerDialog.this.getTuner().setCanceled(true);
+            	TGTunerDialog.this.dialog.dispose();
+            }
+        });
+
+        
+        // if closed on [X], set this.tuner.setCanceled(true);
+        this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent arg0) {
+            	TGTunerDialog.this.getTuner().setCanceled(true);
+            	TGTunerDialog.this.dialog.dispose();
+			}
+        });
+
+        DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+
+        // start the tuner thread
+        this.tuner = new TGTuner(this);
+        this.getTuner().start();
+        
+	}
+
+	static GridData getGridData(int minimumWidth, int minimumHeight){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = minimumWidth;
+		data.minimumHeight = minimumHeight;
+		return data;
+	}
+
+	
+	public void fireFrequency(final double freq) {
+		if (!this.dialog.isDisposed()) {
+			 try {
+				 TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {				
+					 public void run() throws TGException {
+						if (!TGTunerDialog.this.dialog.isDisposed() && !TGTunerDialog.this.roughTuner.isDisposed()) {
+							TGTunerDialog.this.currentFrequency.setText(Math.floor(freq)+" Hz");
+							TGTunerDialog.this.roughTuner.setCurrentFrequency(freq);
+						}
+						if (!TGTunerDialog.this.dialog.isDisposed() && !TGTunerDialog.this.fineTuner.isDisposed())
+								TGTunerDialog.this.fineTuner.setCurrentFrequency(freq);
+					 }
+				 });
+			 } catch (Throwable e) {
+				 e.printStackTrace();
+			 }
+		}
+	}
+
+	
+	public TGTuner getTuner() {
+		return this.tuner;
+	}
+	
+	public int[] getTuning() {
+		return this.tuning;
+	}
+
+
+	public void fireException(final Exception ex) {
+		try {
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					if (!TGTunerDialog.this.dialog.isDisposed())
+						MessageDialog.errorMessage(ex);
+				}
+			});
+		} catch (Throwable e) {
+			 e.printStackTrace();
+		}
+	}
+
+	
+	public void fireCurrentString(final int string) {
+		this.tuner.pause();
+		if (string == 0) { // TODO: it never happens
+			this.tuner.setWantedRange();
+			this.fineTuner.setEnabled(false);
+		}
+		else {
+			this.tuner.setWantedNote(string);
+			this.fineTuner.setWantedTone(string);
+		}
+		this.tuner.resumeFromPause();
+	}
+	
+	
+	
+	protected void createTuningString(int midiNote, Composite parent) {
+		TGTuningString tempString = new TGTuningString(midiNote,parent,this);
+		this.allStringButtons.add(tempString);
+		tempString.getStringButton().addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				// disable all others
+				TGTunerDialog.this.fineTuner.setCurrentFrequency(-1);
+				Iterator it = TGTunerDialog.this.allStringButtons.iterator();
+				while (it.hasNext()) {
+					TGTuningString tmp = (TGTuningString)it.next();
+					tmp.getStringButton().setSelection(false);
+				}
+			}
+		});
+		tempString.addListener();
+		
+	}
+	
+}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerFineWidget.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerFineWidget.java
new file mode 100644
index 0000000..a27a04e
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerFineWidget.java
@@ -0,0 +1,150 @@
+/**
+ * 
+ */
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGFontImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+
+/**
+ * @author Nikola Kolarovic <johnny47ns at yahoo.com>
+ *
+ */
+public class TGTunerFineWidget extends Composite {
+
+	private static final int MIN_HEIGHT = 60;
+	private static final int MIN_WIDTH = 80;
+	private final float bottomY = 10.0f;
+	
+	private Composite composite = null;
+	protected String currentNoteString = null;
+	protected int currentNoteValue = -1;
+	protected double currentFrequency = 0.0f;
+	protected Font letterFont = null;
+	protected final float FINE_TUNING_RANGE = 1.5f;
+
+	public TGTunerFineWidget(Composite parent) {
+		super(parent, SWT.NONE);
+		this.setEnabled(false);
+		this.init();
+	}
+
+	protected void init() {
+		this.setLayout(new GridLayout(1,true));
+		this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		
+		
+		this.composite = new Composite(this,SWT.BORDER | SWT.DOUBLE_BUFFERED);
+		this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+		this.composite.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				TGPainterImpl painter = new TGPainterImpl(e.gc);
+				TGTunerFineWidget.this.paintWidget(painter);
+			}
+		});
+		
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumHeight = MIN_HEIGHT;
+		data.minimumWidth = MIN_WIDTH;
+		data.grabExcessHorizontalSpace=true;
+		data.grabExcessVerticalSpace=true;
+		this.composite.setLayoutData(data);
+		this.letterFont = new Font(this.getDisplay(),
+							TuxGuitar.instance().getConfig().getFontDataConfigValue(TGConfigKeys.MATRIX_FONT).getName(),
+							14,
+							SWT.BOLD
+							);
+
+	}
+	
+	
+	public void paintWidget(TGPainterImpl painter) {
+		Point compositeSize = this.composite.getSize();
+		
+		// margins & stuff
+		
+		painter.setForeground(new TGColorImpl(getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		painter.initPath();
+		painter.setLineWidth(2);
+		float height = compositeSize.y-this.bottomY-25;
+		painter.moveTo(compositeSize.x/2, compositeSize.y-this.bottomY);
+		painter.lineTo(compositeSize.x/2, 25);
+		painter.closePath();
+		painter.initPath();
+		height = Math.min(height, compositeSize.x/2);
+		painter.moveTo(compositeSize.x/2-height, compositeSize.y-this.bottomY);
+		painter.lineTo(compositeSize.x/2+height, compositeSize.y-this.bottomY);
+		painter.closePath();
+		
+		if (this.isEnabled()) {
+			// tone name
+			painter.setForeground(new TGColorImpl(getDisplay().getSystemColor(SWT.COLOR_BLUE)));
+			painter.setFont(new TGFontImpl(this.letterFont));
+			painter.drawString(this.currentNoteString, compositeSize.x*12/15, 10);
+
+			// pointer
+			if (this.currentFrequency!=-1) {
+				painter.setLineWidth(3);
+				painter.setForeground(new TGColorImpl(getDisplay().getSystemColor(SWT.COLOR_RED)));
+				painter.initPath();
+				painter.moveTo(compositeSize.x/2, compositeSize.y-this.bottomY);
+				painter.lineTo((float)(compositeSize.x/2 + height*Math.cos(this.getAngleRad())),(float)( compositeSize.y-this.bottomY-height*Math.sin(this.getAngleRad())));
+			painter.closePath();
+			}
+		}
+		
+		
+		
+	
+	}
+	
+	
+	public void setWantedTone(int tone) {
+		this.setEnabled(true);
+		this.currentNoteValue = tone;
+		this.currentNoteString = TGTunerRoughWidget.TONESSTRING[tone%12]+(int)Math.floor(tone/12);
+		this.redraw();
+		
+	}
+	
+	public void setCurrentFrequency(double freq) {
+		this.currentFrequency = freq;
+		this.redraw();
+	}
+
+	public void redraw(){
+		super.redraw();
+		this.composite.redraw();
+	}
+	
+	protected double getAngleRad() {
+		return Math.PI*( 1 - (this.stickDistance(this.getTone(this.currentFrequency) - this.currentNoteValue) + this.FINE_TUNING_RANGE  )/(2*this.FINE_TUNING_RANGE) );
+	}
+
+	
+	private float getTone(double frequency) {
+		return (float)(45+12*(Math.log(frequency/110)/Math.log(2)));
+	}
+	
+	private double stickDistance(double diff) {
+		if (Math.abs(diff) > this.FINE_TUNING_RANGE)
+			if (diff > 0)
+				return this.FINE_TUNING_RANGE;
+			else
+				return -this.FINE_TUNING_RANGE;
+		return diff;
+	}
+
+	
+}
\ No newline at end of file
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerListener.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerListener.java
new file mode 100644
index 0000000..befb2f6
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerListener.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+public interface TGTunerListener {
+
+	public void fireFrequency(double freq);
+	
+	public int[] getTuning();
+	
+	public void fireException(Exception ex);
+	
+	public void fireCurrentString(int string);
+	
+}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerPlugin.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerPlugin.java
new file mode 100644
index 0000000..3939c6c
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerPlugin.java
@@ -0,0 +1,39 @@
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.song.models.TGString;
+
+/**
+ * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
+ *
+ */
+public class TGTunerPlugin extends org.herac.tuxguitar.app.tools.custom.TGToolItemPlugin {
+	
+	public static final String MODULE_ID = "tuxguitar-tuner";
+	
+	protected void doAction() {
+		List strings = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getStrings();
+		Iterator it = strings.iterator();
+		int[] tuning = new int[strings.size()];
+		int i=0;
+		while (it.hasNext()) {
+			TGString current = (TGString)it.next();
+			tuning[i] = current.getValue();
+			i++;
+		}
+		TGTunerDialog dialog = new TGTunerDialog(tuning);
+		dialog.show();
+		
+	}
+
+	public String getModuleId(){
+		return MODULE_ID;
+	}
+	
+	protected String getItemName() {
+		return "Guitar Tuner";
+	}
+}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerQueue.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerQueue.java
new file mode 100644
index 0000000..ed4f970
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerQueue.java
@@ -0,0 +1,105 @@
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+/**
+ * Class that represents a frequency buffer that eliminates large frequency fluctuations.
+ * 
+ * It is implemented as a queue list, where you put each frequency, and based on QUEUE_SIZE
+ * last frequencies it determines what current dominant frequency should be.
+ * 
+ * @author Nikola Kolarovic <johnny47ns at yahoo.com>
+ *
+ */
+public class TGTunerQueue {
+	
+	/** size of the queue */
+	int QUEUE_SIZE = 5;
+	
+	/** pointer to index of the newest element */
+	protected int head = 0;
+	
+	/** the frequency queue itself */
+	protected double[] queue;
+	
+	private double[] similars;
+	
+	
+	// TODO: tweak the tollerances
+	private final double upperTolerance = 1.05; // +5%
+	private final double lowerTolerance = 0.95; // -5%
+	
+	
+	public TGTunerQueue() {
+		this.queue = new double[this.QUEUE_SIZE];
+		this.similars = new double[this.QUEUE_SIZE];
+		this.clear();
+	}
+
+	/** add new frequency to a queue */
+	public void add(double newValue) {
+		this.head = (++this.head) % this.QUEUE_SIZE;
+		this.queue[this.head] = newValue;
+	}
+	
+	/** 
+	 * 
+	 * @return approximated frequency 
+	 */
+	public double getFreqApproximation() {
+		
+		for (int i=0; i<this.QUEUE_SIZE; i++)
+			this.similars[i]=-2; // -2, because it will always find 1 exact frequency when i==j
+		
+		for (int i=0; i<this.QUEUE_SIZE; i++) {
+			if (this.queue[i]!=-1)
+				for (int j=0; j<this.QUEUE_SIZE; j++) {
+					// exact frequency with tollerance
+					if (this.queue[i] > (this.queue[j]*this.lowerTolerance) && 
+						this.queue[i] < (this.queue[j]*this.upperTolerance) )
+							this.similars[i]=this.similars[i]+2;
+					
+					// half frequency with tollerance
+					if (this.queue[i]/2 > (this.queue[j]*this.lowerTolerance) &&
+						this.queue[i]/2 < (this.queue[j]*this.upperTolerance) )
+							this.similars[i]++;
+					
+					// double frequency with tollerance
+					if (this.queue[i]*2 > (this.queue[j]*this.lowerTolerance) &&
+						this.queue[i]*2 < (this.queue[j]*this.upperTolerance) )
+							this.similars[i]++;
+				}
+		}
+		
+		
+		// find one with max similars
+		int maxIndex = 0;
+		for (int i=1; i<this.QUEUE_SIZE; i++)
+			if (this.similars[i]>=this.similars[maxIndex])
+				maxIndex=i;
+		
+		
+		
+/*		
+		int test=(this.head+1)%this.QUEUE_SIZE;
+		System.out.print(Math.floor(queue[head])+ " ");
+		while (test!=this.head) {
+			System.out.print(Math.floor(queue[test])+ " ");
+			test = (++test)%this.QUEUE_SIZE;
+		
+		}
+		System.out.println(" =  "+queue[maxIndex]%110+" **");
+*/
+		
+		return this.queue[maxIndex];
+		//return this.queue[head];
+		
+	}
+	
+	
+	/** clears the queue data */
+	public void clear() {
+		for (int i=0; i<this.QUEUE_SIZE; i++)
+			this.queue[i]=-1;
+		this.head = 0;
+	}
+	
+}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerRoughWidget.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerRoughWidget.java
new file mode 100644
index 0000000..e92e638
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerRoughWidget.java
@@ -0,0 +1,113 @@
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.SWT;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+
+/**
+ * @author Nikola Kolarovic <johnny47ns at yahoo.com>
+ *
+ */
+public class TGTunerRoughWidget extends Composite {
+
+	private static final int MIN_HEIGHT = 25;
+	protected Composite composite = null;
+	protected float currentFrequency = 0;
+	
+	/** constants for drawing */
+	private final int startA = 20;
+	private final int endAb = 20;
+	private final int boundaryHeight = 16;
+	private final int markerHeight = 12;
+	private final int markerWidth = 4;
+	static String[] TONESSTRING = {"C","C#","D","D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"};
+	
+	
+	public TGTunerRoughWidget(Composite parent) {
+		super(parent, SWT.NONE);
+		this.init();
+	}
+	
+	public void init() {
+		this.setLayout(new GridLayout(1,true));
+		this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		((GridData)this.getLayoutData()).widthHint = 600;
+		
+		
+		this.composite = new Composite(this,SWT.BORDER | SWT.DOUBLE_BUFFERED);
+		this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+		this.composite.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				TGPainterImpl painter = new TGPainterImpl(e.gc);
+				TGTunerRoughWidget.this.paintWidget(painter);
+			}
+
+		});
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumHeight = MIN_HEIGHT;
+		data.grabExcessHorizontalSpace = true;
+		this.composite.setLayoutData(data);
+
+	}
+	
+	
+	private void paintWidget(TGPainterImpl painter) {
+		
+		Point compositeSize = this.composite.getSize();
+		
+		// lines and tones
+		painter.setForeground(new TGColorImpl(getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		painter.initPath();
+		painter.moveTo(this.startA, compositeSize.y/2);
+		painter.lineTo(compositeSize.x-this.endAb, compositeSize.y/2);
+		painter.closePath();
+		int increment = (int)Math.round((compositeSize.x-this.startA-this.endAb) / 12.0);
+		int currentTone = 0;
+		for (int i=this.startA; i<compositeSize.x+1-this.endAb; i+=increment) {
+			painter.initPath();
+			painter.moveTo(i,compositeSize.y/2-this.boundaryHeight/2);
+			painter.lineTo(i, compositeSize.y/2+this.boundaryHeight/2);
+			painter.closePath();
+			painter.drawString(TONESSTRING[currentTone%12], i, compositeSize.y/2-this.boundaryHeight/2-20);
+			currentTone++;
+		}
+		
+		// marker
+		if (this.currentFrequency>0) {
+			painter.setForeground(new TGColorImpl(getDisplay().getSystemColor(SWT.COLOR_BLUE)));
+			painter.initPath();
+			int markerPos = this.markerWidth/2 + this.startA+(int)Math.round(((compositeSize.x-this.startA-this.endAb) / 240.0) * (this.getTone(this.currentFrequency)));
+			painter.moveTo(markerPos, compositeSize.y/2-this.markerHeight/2);
+			painter.setLineWidth(this.markerWidth);
+			painter.lineTo(markerPos, compositeSize.y/2+this.markerHeight/2);
+			painter.closePath();
+		}
+		
+	}
+
+	public void setCurrentFrequency(double currentFrequency) {
+		this.currentFrequency = (float)currentFrequency;
+		this.redraw();
+	}
+
+	public void redraw(){
+		super.redraw();
+		this.composite.redraw();
+	}
+
+	
+	/** formula which gets fine tone position (on scale 0-240)
+	 * in fact, it's inverse formula of inverse of TGTuner::getNoteFrequency() 
+	 */
+	protected int getTone(float frequency) {
+		float midiTone = (float)(45+12*(Math.log(frequency/110)/Math.log(2)));
+		return Math.round(  20 *   (midiTone % 12));
+	}
+	
+}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerSettings.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerSettings.java
new file mode 100644
index 0000000..82ea5fd
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerSettings.java
@@ -0,0 +1,172 @@
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+import javax.sound.sampled.AudioFormat;
+import javax.sound.sampled.AudioSystem;
+import javax.sound.sampled.DataLine;
+import javax.sound.sampled.TargetDataLine;
+
+import org.herac.tuxguitar.app.util.MessageDialog;
+
+/**
+ * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
+ *
+ */
+public class TGTunerSettings {
+	
+	protected int sampleSize;
+	protected float sampleRate;
+	protected String deviceName;
+	protected double threshold;
+	protected int bufferSize;
+	protected int fftSize;
+	protected int waitPeriod;
+	static final int DEFAULT_BUFFER_SIZE = 4096; // 2^12
+	static final int DEFAULT_FFT_SIZE = 16384; // 2^14
+	static final int CHANNELS_NUMBER = 1;
+	
+	
+	
+	/** default settings, if faild to load from properties */
+	public static TGTunerSettings getDefaults() {
+		TGTunerSettings retValue = new TGTunerSettings();
+		retValue.setSampleRate(11025);
+		retValue.setSampleSize(8);
+		retValue.setBufferSize(DEFAULT_BUFFER_SIZE);
+		retValue.setFFTSize(DEFAULT_FFT_SIZE);
+		retValue.setThreshold(0.03);
+		retValue.setWaitPeriod(100);
+		return retValue;
+	}
+
+	
+	
+	/** gets dataline from format specification */
+	protected static TargetDataLine getDataLine(TGTunerSettings settings) throws TGTuner.TGTunerException {
+		TargetDataLine	targetDataLine = null;
+
+		if (settings!=null) {
+			// get info for initialization
+			DataLine.Info info = settings.getDataLineInfo();
+			
+			try {
+				
+				targetDataLine = (TargetDataLine)AudioSystem.getLine(info);
+				
+			} catch (Exception ex) {
+				MessageDialog.errorMessage(ex);
+			}
+		}
+		else 
+			throw new TGTuner.TGTunerException("Could not retrieve data from the input. Check your system device settings.");
+		
+		return targetDataLine;
+	}
+
+	/** Creates DataLine.Info based on settings */
+	protected DataLine.Info getDataLineInfo() {
+				return new DataLine.Info(TargetDataLine.class,
+													this.getAudioFormat(), this.getBufferSize());
+				
+	}
+
+	/** creates AudioFormat based on settings */
+	public AudioFormat getAudioFormat() {
+		return new AudioFormat(this.getSampleRate(),this.getSampleSize(),1,true,false);
+		// TODO: this is changed!!!!
+		/* return new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, // PCM encoding
+				this.getSampleRate(), // sample rate
+				this.getSampleSize(), // sample size (8-bit, 16-bit)
+				1, // mono
+				this.getFrameSize(), // 16-bit frame (was:4)
+				this.getSampleRate(), // frame rate
+				false // big-endian
+				); */
+	}
+
+	/*
+	private int getFrameSize() {
+		return (this.sampleSize / 8) * CHANNELS_NUMBER;
+	}
+	*/
+
+
+	public int getBufferSize() {
+		return this.bufferSize;
+	}
+	public void setBufferSize(int bufferSize) {
+		// TODO: adjust size in TGTuner also then
+		this.bufferSize = bufferSize;
+	}
+	
+	public int getFFTSize() {
+		return this.fftSize;
+	}
+	public void setFFTSize(int size) {
+		this.fftSize = size;
+	}
+	
+	
+	
+	public float getSampleRate() {
+		return this.sampleRate;
+	}
+	
+	public double getThreshold() {
+		return this.threshold;
+	}
+	
+	public void setThreshold(double nt) {
+		this.threshold = nt;
+	}
+	
+	public void setSampleRate(float sampleRate) {
+		this.sampleRate = sampleRate;
+	}
+	public int getSampleSize() {
+		return this.sampleSize;
+	}
+	public void setSampleSize(int sampleSize) {
+		this.sampleSize = sampleSize;
+	}
+
+	public int getWaitPeriod() {
+		return this.waitPeriod;
+	}
+	public void setWaitPeriod(int time) {
+		this.waitPeriod = time;
+	}
+
+
+	public static TGTunerSettings loadTuxGuitarSettings() throws TGTuner.TGTunerException {
+		// TODO: load system properties and throw exception if failed to load
+		return TGTunerSettings.getDefaults();
+		//return null;
+	}
+
+	
+	
+	
+	/* MAYBE USEFUL CODE
+	 * 
+	 * Port lineIn;
+FloatControl volCtrl;
+try {
+  mixer = AudioSystem.getMixer(null);
+  lineIn = (Port)mixer.getLine(Port.Info.LINE_IN);
+  lineIn.open();
+  volCtrl = (FloatControl) lineIn.getControl(
+      FloatControl.Type.VOLUME);
+  // Assuming getControl call succeeds, 
+  // we now have our LINE_IN VOLUME control.
+} catch (Exception e) {
+  System.out.println("Failed trying to find LINE_IN"
+    + " VOLUME control: exception = " + e);
+}
+float newValue = 2.0F;
+if (volCtrl != null)
+  // This changes the volume of the signal flowing though the line that "owns" the control.
+  volCtrl.setValue(newValue); 
+	 * 
+	 */
+	
+}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerSettingsDialog.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerSettingsDialog.java
new file mode 100644
index 0000000..528df88
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTunerSettingsDialog.java
@@ -0,0 +1,334 @@
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+
+
+/**
+ * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
+ *
+ */
+public class TGTunerSettingsDialog {
+
+	private static final int SHELL_WIDTH = 350;
+	protected TGTunerDialog tunerDialog = null;
+	// protected Combo deviceCombo = null;
+	protected Combo sampleRateCombo = null;
+	protected Combo sampleSizeCombo = null;
+	protected Combo bufferSizeCombo = null;
+	protected Combo FFTSizeCombo = null;
+	protected Scale noiseGate = null;
+	protected Label noiseGateValue = null;
+	protected Text settingsInfo = null;
+	protected boolean updated;
+	
+	public TGTunerSettingsDialog(TGTunerDialog dialog) {
+		this.tunerDialog = dialog;
+		this.updated=false;
+	}
+
+	public void show() {
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE);
+		dialog.setLayout(new GridLayout());
+		dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+		dialog.setText(TuxGuitar.getProperty("tuner.settings"));
+		dialog.setMinimumSize(SHELL_WIDTH,SWT.DEFAULT);
+		
+		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);            
+		group.setLayout(new GridLayout());
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setText(TuxGuitar.getProperty("tuner.device-settings"));
+		
+/*		this.deviceCombo = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.deviceCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,false,2,1));
+		this.fillDeviceCombo(dialog);
+		this.deviceCombo.addSelectionListener(new UpdatedListener());
+*/
+		
+		Composite sampleComposite = this.createGroup(TuxGuitar.getProperty("tuner.sound-format"), group);
+
+		
+		new Label(sampleComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.sample-rate"));
+		this.sampleRateCombo = new Combo(sampleComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.sampleRateCombo.add("48000");
+		this.sampleRateCombo.add("44100");
+		this.sampleRateCombo.add("22050");
+		this.sampleRateCombo.add("11025");
+		this.sampleRateCombo.add("8000");
+		this.sampleRateCombo.addSelectionListener(new UpdatedListener());
+
+		
+		new Label(sampleComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.sample-size"));
+		this.sampleSizeCombo = new Combo(sampleComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.sampleSizeCombo.add("16");
+		this.sampleSizeCombo.add("8");
+		this.sampleSizeCombo.addSelectionListener(new UpdatedListener());
+
+
+		Composite analyzeComposite = this.createGroup(TuxGuitar.getProperty("tuner.sampling-and-analyze"), group);
+
+		// buffer size
+		new Label(analyzeComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.sampling-buffer-size"));
+		this.bufferSizeCombo = new Combo(analyzeComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.bufferSizeCombo.add(new Integer(512).toString());
+		this.bufferSizeCombo.add(new Integer(1024).toString());
+		this.bufferSizeCombo.add(new Integer(2048).toString());
+		this.bufferSizeCombo.add(new Integer(4096).toString());
+		this.bufferSizeCombo.add(new Integer(8192).toString());
+		this.bufferSizeCombo.add(new Integer(16348).toString());
+		this.bufferSizeCombo.addSelectionListener(new UpdatedListener());
+
+		
+		// FFT buffer size
+		new Label(analyzeComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.fourier-buffer-size"));
+		this.FFTSizeCombo = new Combo(analyzeComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.FFTSizeCombo.add(new Integer(1024).toString());
+		this.FFTSizeCombo.add(new Integer(2048).toString());
+		this.FFTSizeCombo.add(new Integer(4096).toString());
+		this.FFTSizeCombo.add(new Integer(8192).toString());
+		this.FFTSizeCombo.add(new Integer(16384).toString());
+		this.FFTSizeCombo.add(new Integer(32768).toString());
+		this.FFTSizeCombo.addSelectionListener(new UpdatedListener());
+		
+		Composite noiseGateComposite = this.createGroup(TuxGuitar.getProperty("tuner.noise-gate"), group);
+		this.noiseGate = new Scale(noiseGateComposite, SWT.BORDER);
+		this.noiseGate.setMaximum(100);
+		this.noiseGate.setIncrement(5);
+		this.noiseGate.setPageIncrement(10);
+		this.noiseGate.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TGTunerSettingsDialog.this.noiseGateValue.setText(
+						new Integer(TGTunerSettingsDialog.this.noiseGate.getSelection()).toString()+"%");
+			}
+		});
+		this.noiseGate.addSelectionListener(new UpdatedListener());
+		this.noiseGate.setLayoutData(new GridData(SWT.None, SWT.NONE, true,false,1,1));
+		((GridData)this.noiseGate.getLayoutData()).widthHint=270;
+		((GridData)this.noiseGate.getLayoutData()).grabExcessHorizontalSpace=true;
+		this.noiseGateValue = new Label(noiseGateComposite,SWT.LEFT);
+		this.noiseGateValue.setText("                       ");
+		
+		Composite infoComposite = this.createGroup(TuxGuitar.getProperty("tuner.info"), group);
+		
+		this.settingsInfo = new Text(infoComposite, SWT.READ_ONLY | SWT.MULTI );
+		this.settingsInfo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,false,2,1));
+		((GridData)this.settingsInfo.getLayoutData()).heightHint=30;
+		((GridData)this.settingsInfo.getLayoutData()).grabExcessHorizontalSpace=true;
+		((GridData)this.settingsInfo.getLayoutData()).grabExcessVerticalSpace=true;
+		((GridData)this.settingsInfo.getLayoutData()).widthHint=300;
+		//// buttons ok/cancel
+		Composite btnComposite = new Composite(dialog,SWT.NONE);
+		btnComposite.setLayout(new GridLayout(2,false));
+		btnComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(btnComposite, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(TGTunerDialog.getGridData(80,25));
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+            public void widgetSelected(SelectionEvent arg0) {
+            	TGTunerSettingsDialog.this.dispose(dialog,true);
+            }
+        });
+		final Button buttonExit = new Button(btnComposite, SWT.PUSH);
+        buttonExit.setText(TuxGuitar.getProperty("close"));
+        buttonExit.setLayoutData(TGTunerDialog.getGridData(80,25));
+        buttonExit.addSelectionListener(new SelectionAdapter() {
+            public void widgetSelected(SelectionEvent arg0) {
+            	TGTunerSettingsDialog.this.dispose(dialog,false);
+            }
+        });
+        
+        this.loadSettings(this.tunerDialog.getTuner().getSettings(), dialog);
+        
+        DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+
+
+	protected void loadSettings(TGTunerSettings settings, Shell dialog) {
+		
+		// TODO: this is no good! vvvvvvvvv
+		
+		boolean loadedDefaults=false;
+		if (settings==null) {
+			settings = TGTunerSettings.getDefaults();
+			loadedDefaults=true;
+		}
+		// TODO: this is no good! ^^^^^^^^^
+		
+		boolean found = false;
+		int i = 0;
+		
+		try {
+			while (!found) {
+				if ( Float.parseFloat(this.sampleRateCombo.getItem(i)) == settings.getSampleRate()  ) {
+						this.sampleRateCombo.select(i);
+						found=true;
+				}
+				i++;
+			}
+			i=0; found=false;
+		
+			while (!found) {
+				if ( Integer.parseInt(this.sampleSizeCombo.getItem(i)) == settings.getSampleSize()  ) {
+							this.sampleSizeCombo.select(i);
+							found=true;
+				}
+				i++;
+			}
+
+			i=0; found=false;
+			while (!found) {
+				if ( Integer.parseInt(this.FFTSizeCombo.getItem(i)) == settings.getFFTSize()  ) {
+							this.FFTSizeCombo.select(i);
+							found=true;
+				}
+				i++;
+			}
+			
+			this.bufferSizeCombo.setText(new Integer(settings.getBufferSize()).toString());
+			this.noiseGate.setSelection((int)Math.round(settings.getThreshold()*100));
+			this.noiseGateValue.setText(new Integer(this.noiseGate.getSelection()).toString()+"%");
+
+/*			i=0; found=false;
+			if (settings.deviceName==null)
+				found=true;
+			while (!found) {
+				if ( this.deviceCombo.getItem(i).equals(settings.getDeviceName())  ) {
+							this.deviceCombo.select(i);
+							found=true;
+				}
+				i++;
+			}
+*/		} catch (Exception ex) {
+			if (!loadedDefaults) {
+				MessageDialog.errorMessage(dialog,"Failed to load TuxGuitar settings.\nLoading defaults.");
+				loadSettings(TGTunerSettings.getDefaults(),dialog);
+			}
+		}
+		
+	}
+
+	
+/*	
+	*//** cycles through available SourceData audio devices *//*
+	private void fillDeviceCombo(Shell dialog) {
+		Mixer.Info[] aInfos = AudioSystem.getMixerInfo();
+		for (int i = 0; i < aInfos.length; i++)
+		{
+			Mixer mixer = AudioSystem.getMixer(aInfos[i]);
+			Line.Info lineInfo = new Line.Info(SourceDataLine.class);
+			if (mixer.isLineSupported(lineInfo))
+			{
+				this.deviceCombo.add(aInfos[i].getName());
+			}
+		}
+		if (aInfos.length == 0)
+		{
+			MessageDialog.errorMessage(dialog,"No input sound devices available.");
+		}
+	}
+
+*/	
+	protected void dispose(Shell dialog, boolean saveWanted) {
+		try {
+			if (this.updated & saveWanted) {
+				TGTunerSettings settings = new TGTunerSettings();
+				settings.setSampleRate(this.getSampleRate());
+				settings.setSampleSize(Integer.parseInt(this.sampleSizeCombo.getItem(this.sampleSizeCombo.getSelectionIndex())));
+	
+				settings.setBufferSize(this.getBufferSize());
+				settings.setFFTSize(this.getFFTSize());
+				settings.setThreshold((float)this.noiseGate.getSelection()/100);
+				settings.setWaitPeriod(100); // TODO: hard coded?
+				
+				this.checkBufferValues(settings); // check if they are divisable with buffer size
+				
+	
+	/*			if (this.deviceCombo.getSelectionIndex()<0) {
+					MessageDialog.errorMessage(dialog,"You didn't set the input device.");
+					return;
+				}
+				settings.setDeviceName(this.deviceCombo.getItem(this.deviceCombo.getSelectionIndex()));
+	*/			
+				this.tunerDialog.getTuner().setSettings(settings);
+				// TODO: save the settings in the system
+			}
+			
+	    	this.tunerDialog.getTuner().resumeFromPause();
+			dialog.dispose();
+		} catch (Exception ex) {
+			ex.printStackTrace();
+			MessageDialog.errorMessage(dialog,ex.getMessage());
+		}
+	}
+	
+	
+	
+	
+	private float getSampleRate() {
+		return Float.parseFloat(this.sampleRateCombo.getItem(this.sampleRateCombo.getSelectionIndex()));
+	}
+	private int getFFTSize() {
+		return Integer.parseInt(this.FFTSizeCombo.getItem(this.FFTSizeCombo.getSelectionIndex()));
+	}
+	private int getBufferSize() {
+		return Integer.parseInt(this.bufferSizeCombo.getText());
+	}
+	
+	
+
+	/** adapter class which sets update flag */
+	protected class UpdatedListener extends SelectionAdapter {
+		public void widgetSelected(SelectionEvent arg0) {
+        	TGTunerSettingsDialog.this.updated=true;
+        	TGTunerSettingsDialog.this.settingsInfo.setText(" Minimal freq diff = "+this.getMinimalFrequencyDiff()+"Hz   \n Time to fill the buffer = "+ this.getTimeToFillBuffer()+" sec");
+        }
+		
+    	private double getMinimalFrequencyDiff() {
+    		return ((double) TGTunerSettingsDialog.this.getSampleRate()) / TGTunerSettingsDialog.this.getFFTSize();
+    	}
+    	
+    	private double getTimeToFillBuffer() {
+    		return TGTunerSettingsDialog.this.getBufferSize() / TGTunerSettingsDialog.this.getSampleRate();
+    	}
+
+	}
+	
+	
+	
+
+	/** because there are many groups */
+	protected Composite createGroup(String groupCaption, Composite parent) {
+		Group tempGroup = new Group(parent,SWT.SHADOW_ETCHED_IN);            
+		tempGroup.setLayout(new GridLayout());
+		tempGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		tempGroup.setText(groupCaption);
+		Composite groupComposite = new Composite(tempGroup,SWT.NONE);
+		groupComposite.setLayout(new GridLayout(2,false));
+		groupComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		return groupComposite;
+	}
+	
+	protected void checkBufferValues(TGTunerSettings settings) throws Exception {
+		if (settings.bufferSize % settings.sampleSize != 0 ||
+			settings.bufferSize > settings.fftSize	)
+			throw new Exception("Invalid sampling buffer size");
+	}
+
+
+}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTuningString.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTuningString.java
new file mode 100644
index 0000000..ca7672c
--- /dev/null
+++ b/TuxGuitar-tuner/src/org/herac/tuxguitar/app/tools/custom/tuner/TGTuningString.java
@@ -0,0 +1,52 @@
+/**
+ * 
+ */
+package org.herac.tuxguitar.app.tools.custom.tuner;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+
+/**
+ * @author Nikola Kolarovic <johnny47ns at yahoo.com>
+ *
+ */
+public class TGTuningString {
+
+	private int string;
+	private Button stringButton = null;
+	private TGTunerListener listener = null;
+	
+	
+	
+	TGTuningString(int string, Composite parent, TGTunerListener listener) {
+		this.string = string;
+		this.listener = listener;
+		
+		this.stringButton = new Button(parent,SWT.TOGGLE);
+		this.stringButton.setText("--------- "+TGTunerRoughWidget.TONESSTRING[string%12]+(int)Math.floor(string/12)+" ---------");
+	}
+
+	
+	
+	void addListener() {
+		this.stringButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+					TGTuningString.this.stringButton.setSelection(true);
+					TGTuningString.this.listener.fireCurrentString(TGTuningString.this.string);
+			}
+			
+		});
+	}
+	
+	public int getString() {
+		return this.string;
+	}
+	
+	public Button getStringButton() {
+		return this.stringButton;
+	}
+	
+}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTuner.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTuner.java
deleted file mode 100644
index 17694f3..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTuner.java
+++ /dev/null
@@ -1,312 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-import javax.sound.sampled.LineUnavailableException;
-import javax.sound.sampled.TargetDataLine;
-
-import craigl.spectrumanalyzer.FFT;
-
-
-/**
- * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
- * 
- * 
- * Having great help analizyng project:
- * 
- * GuitarTuner developed by OpenStudio
- * www.openstudio.fr
- * Copyright (2005) Arnault Pachot.
- * Project URL: http://sourceforge.net/projects/guitartuner
- *
- */
-public class TGTuner extends Thread {
-	protected TGTunerListener mainWindow = null;
-	protected boolean canceled;
-	protected boolean paused;
-	protected TGTunerSettings settings;
-	protected TargetDataLine dataLine;
-	protected TGTunerQueue queue;
-	
-	//static final int LOG2_FFTSIZE = 14;
-	//protected int FFT_SIZE; 
-	protected FFT fft;
-	protected double[] ar;
-	protected double[] ai;
-	protected byte[] data;
-	protected double rate;
-	
-	protected double maximumFrequency;
-	protected double minimumFrequency;
-	
-	TGTuner(TGTunerListener mainWindow) {
-		this.mainWindow = mainWindow;
-		this.canceled = false;
-		this.paused = false;
-		this.queue = new TGTunerQueue();
-		try {
-			this.settings = TGTunerSettings.loadTuxGuitarSettings();
-			this.dataLine = TGTunerSettings.getDataLine(this.settings);
-		} catch (Exception ex) {
-			this.mainWindow.fireException(ex);
-		}
-
-		this.setWantedRange();
-		
-	}
-
-
-	public void run() {
-		
-		// TODO: remove this benchmark
-		int cycles=0;
-		long timePassed=0;
-		
-		
-		if (this.dataLine!=null) {
-			this.openDataLine();
-		}
-
-		while (!this.canceled) {
-		  if (this.dataLine!=null)
-			if (!this.paused && this.dataLine.isOpen()) {
-				 synchronized(this) {
-				
-					// read from the input
-					this.dataLine.read(this.data,0,this.settings.getBufferSize());
-					
-					// preapare the arrays for FFT
-					for (int i=0; i<this.settings.getBufferSize(); i++) {
-						this.ar[i] = this.data[i]; // implicit cast to double
-						this.ai[i] = 0.0f;
-					}
-					
-					// when buffer size is smaller than FFT_SIZE 
-					for (int i=this.settings.getBufferSize(); i<this.settings.getFFTSize(); i++) {
-						this.ar[i] = 0.0f;
-						this.ai[i] = 0.0f;
-					}
-					
-					/////////////////////////////////////////////////////////////
-					// TODO: look at the benchmark, uncoment the other one and comment the first one
-					cycles++;
-					long startTime = System.currentTimeMillis();
-					
-					if (this.fft!=null)
-						this.fft.doFFT(this.ar, this.ai, false);
-					//TGTuner.computeFFT(1, this.settings.getFFTSize(), this.ar, this.ai);
-					
-					timePassed+=System.currentTimeMillis()-startTime;
-					/////////////////////////////////////////////////////////////
-					
-					
-					// ------ determine the dominant frequency -------
-					double frequency = -1;
-					double maxAmplitude = this.settings.getTreshold(); // noise gate
-					
-					
-					// TODO: maybe to analyze only the data around the area of interest
-					// start has to be at least 1, because we want to skip the DC component!
-					
-					//for (int i=0; i<this.settings.getFFTSize(); i++) {
-					for (int i=(int)Math.round(this.minimumFrequency / this.rate); i < Math.round(this.maximumFrequency / this.rate); i++) {
-						double curFreq = i * this.rate;
-						// z = x*i + y*j  // power = |z| = sqrt(x^2 + y^2)
-						double power = Math.sqrt(Math.pow(this.ar[i], 2) + Math.pow(this.ai[i], 2));
-						
-						if (power > maxAmplitude) {
-							maxAmplitude = power;
-							frequency = curFreq;
-						}
-						
-					}
-					
-					//System.out.println("Max Amplitude: "+maxAmplitude);
-					
-					//** buffer the frequency
-					this.queue.add(frequency);
-					
-					// fire the frequency event on GUI
-					this.mainWindow.fireFrequency(this.queue.getFreqApproximation());
-					
-					// flush the dataline, so the new data is received
-					this.dataLine.flush();
-			
-				 }  // end of synchronized block
-			}
-		  
-			// sleep thread to get better app response
-		  	try {
-				Thread.sleep(this.settings.getWaitPeriod());
-			} catch (InterruptedException e) {
-				// do nothing?
-			}
-		}
-		
-		
-		this.closeDataLine();
-		System.out.println(" Average FFT time: "+(double)timePassed/(double)cycles);
-		
-	}
-	
-	
-	protected void computeFFTParams() {
-		if (this.settings!=null) {
-			
-			    int number = this.settings.getFFTSize(), log=0;
-				for (int i=0; i<20; i++) { // count log2
-					number/=2;
-					if (number < 1) {
-						this.fft = new FFT(log); // instantiate proper FFT alrgorithm
-						break;
-					}
-					log++;
-				}
-				this.data = new byte[this.settings.getBufferSize()]; // data buffer
-				this.ar = new double[this.settings.getFFTSize()]; // create real array for FFT
-				this.ai = new double[this.settings.getFFTSize()]; // create imaginary array for FFT
-				
-				// TODO: rate is maybe not the best /2 ?
-				this.rate = ((double) this.settings.getSampleRate()) / this.settings.getFFTSize();
-		}
-	}
-
-	public void setCanceled(boolean canceled) {
-			this.canceled = canceled;
-	}
-
-	public void pause() {
-			this.paused = true;
-		
-	}
-
-	public void resumeFromPause() {
-			this.paused = false;
-			this.queue.clear();
-	}
-
-
-	public void setSettings(TGTunerSettings settings) {
-		this.closeDataLine();
-		synchronized(this) {
-			this.settings = settings;
-			try {
-				this.dataLine = TGTunerSettings.getDataLine(settings);
-			} catch (Exception ex) {
-				this.mainWindow.fireException(ex);
-			}
-		}
-		this.openDataLine();
-
-	}
-
-	public TGTunerSettings getSettings() {
-			return this.settings;
-	}
-	
-	public void setWantedNote(int note) {
-		// TODO: maybe too restrictive? But eliminates fifths harmonics...
-		this.minimumFrequency = getNoteFrequency(note-3);
-		this.maximumFrequency = getNoteFrequency(note+3);
-	}
-	
-	public void setWantedRange() {
-		// TODO: maybe to restrict only to 1 or 2 octaves!!!!!!!!!
-		int[] tuning = this.mainWindow.getTuning();
-		this.maximumFrequency = getNoteFrequency(tuning[0]+3); // 3 frets higher that the thiniest string
-		this.minimumFrequency = getNoteFrequency(tuning[tuning.length-1]-3); // 3 frets lower that the thickest string
-	}
-	
-	
-	public void openDataLine() {
-     if (this.dataLine!=null) {
-   	  synchronized(this) {
-			this.computeFFTParams();
-			try {
-				this.dataLine.open();
-				this.dataLine.start();
-				//this.dataLine.open(this.settings.getAudioFormat(), this.settings.getBufferSize());
-			} catch (LineUnavailableException e) {
-				System.out.println("------- TGTuner: openDataLine() exception -------");
-				e.printStackTrace();
-			}
-		}
-	  }
-	}
-	
-	public void closeDataLine() {
-	  synchronized(this) {
-		if (this.dataLine!=null) {
-				this.dataLine.stop();
-				this.dataLine.close();
-			}
-	  }
-	}
-	
-	public double getNoteFrequency(int midiNote) {
-		// A = 110Hz = MidiNote(45)
-		return 110 * Math.pow(2.0, (midiNote-45)/12.0 );
-	}
-	
-	
-	 public static void computeFFT(int sign, int n, double[] ar, double[] ai)
-	   {
-	      double scale = 2.0 / n;
-	      int i, j;
-	      for(i = j = 0; i < n; ++i)
-	      {
-	         if (j >= i)
-	         {
-	            double tempr = ar[j] * scale;
-	            double tempi = ai[j] * scale;
-	            ar[j] = ar[i] * scale;
-	            ai[j] = ai[i] * scale;
-	            ar[i] = tempr;
-	            ai[i] = tempi;
-	         }
-	         int m = n/2;
-	         while ((m >= 1) && (j >= m))
-	         {
-	            j -= m;
-	            m /= 2;
-	         }
-	         j += m;
-	      }
-	      int mmax, istep;
-	      for(mmax = 1, istep = 2 * mmax; mmax < n; mmax = istep, istep = 2 * mmax)
-	      {
-	         double delta = sign * Math.PI / mmax;
-	         for(int m = 0; m < mmax; ++m)
-	         {
-	            double w = m * delta;
-	            double wr = Math.cos(w);
-	            double wi = Math.sin(w);
-	            for(i = m; i < n; i += istep)
-	            {
-	               j = i + mmax;
-	               double tr = wr * ar[j] - wi * ai[j];
-	               double ti = wr * ai[j] + wi * ar[j];
-	               ar[j] = ar[i] - tr;
-	               ai[j] = ai[i] - ti;
-	               ar[i] += tr;
-	               ai[i] += ti;
-	            }
-	         }
-	         mmax = istep;
-	      }
-	   }
-	
-
-	 
-	 
-	 
-	 static class TGTunerException extends Exception {
-
-		private static final long serialVersionUID = -1860514279319403845L;
-
-		public TGTunerException(String string) {
-			super(string);
-		}
-		 
-	 }
-
-	
-}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerDialog.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerDialog.java
deleted file mode 100644
index 3e7a344..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerDialog.java
+++ /dev/null
@@ -1,205 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Label;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
- *
- */
-public class TGTunerDialog implements TGTunerListener {
-	
-	private static final int SHELL_WIDTH = 400;
-	protected TGTuner tuner = null;
-	protected int[] tuning = null;
-	protected Label currentFrequency = null;
-	protected Shell dialog = null;
-	protected TGTunerRoughWidget roughTuner = null;
-	protected ArrayList allStringButtons = null;
-	protected TGTunerFineWidget fineTuner = null;
-	
-	TGTunerDialog(int[] tuning) {
-		this.tuning = tuning;
-	}
-
-
-	public void show() {
-
-		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE);
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-		this.dialog.setText(TuxGuitar.getProperty("tuner.instrument-tuner"));
-		this.dialog.setMinimumSize(SHELL_WIDTH,SWT.DEFAULT);
-		this.dialog.setSize(700, 400);
-		
-		Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);            
-		group.setLayout(new GridLayout());
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setText(TuxGuitar.getProperty("tuner.tuner"));
-		
-		Composite specialComposite = new Composite(group,SWT.NONE);
-		specialComposite.setLayout(new GridLayout(2,false));
-		specialComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.allStringButtons = new ArrayList(this.tuning.length);
-		
-		this.fineTuner = new TGTunerFineWidget(specialComposite);
-		
-		
-		Composite buttonsComposite = new Composite (specialComposite,SWT.NONE);
-		buttonsComposite.setLayout(new GridLayout(1,false));
-		buttonsComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		for (int i=0; i<this.tuning.length; i++)
-			createTuningString(this.tuning[i],buttonsComposite);
-
-		Composite tunComposite = new Composite(group,SWT.NONE);
-		tunComposite.setLayout(new GridLayout(1,false));
-		tunComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.currentFrequency = new Label(tunComposite,SWT.LEFT);
-		this.currentFrequency.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.roughTuner = new TGTunerRoughWidget(group);
-		
-		Composite btnComposite = new Composite(group,SWT.NONE);
-		btnComposite.setLayout(new GridLayout(2,false));
-		btnComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-        final Button buttonSettings = new Button(btnComposite, SWT.PUSH);
-        buttonSettings.setText(TuxGuitar.getProperty("settings"));
-        buttonSettings.setLayoutData(getGridData(80,25));
-        buttonSettings.addSelectionListener(new SelectionAdapter() {
-            public void widgetSelected(SelectionEvent arg0) {
-            	TGTunerDialog.this.getTuner().pause();
-            	new TGTunerSettingsDialog(TGTunerDialog.this).show();
-            }
-        });
-        
-        final Button buttonExit = new Button(btnComposite, SWT.PUSH);
-        buttonExit.setText(TuxGuitar.getProperty("close"));
-        buttonExit.setLayoutData(getGridData(80,25));
-        buttonExit.addSelectionListener(new SelectionAdapter() {
-            public void widgetSelected(SelectionEvent arg0) {
-            	TGTunerDialog.this.getTuner().setCanceled(true);
-            	TGTunerDialog.this.dialog.dispose();
-            }
-        });
-
-        
-        // if closed on [X], set this.tuner.setCanceled(true);
-        this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent arg0) {
-            	TGTunerDialog.this.getTuner().setCanceled(true);
-            	TGTunerDialog.this.dialog.dispose();
-			}
-        });
-
-        DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-
-        // start the tuner thread
-        this.tuner = new TGTuner(this);
-        this.getTuner().start();
-        
-	}
-
-	static GridData getGridData(int minimumWidth, int minimumHeight){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = minimumWidth;
-		data.minimumHeight = minimumHeight;
-		return data;
-	}
-
-	
-	public void fireFrequency(final double freq) {
-		if (!this.dialog.isDisposed()) {
-			 try {
-				 TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {				
-					 public void run() {
-						if (!TGTunerDialog.this.dialog.isDisposed() && !TGTunerDialog.this.roughTuner.isDisposed()) {
-							TGTunerDialog.this.currentFrequency.setText(Math.floor(freq)+" Hz");
-							TGTunerDialog.this.roughTuner.setCurrentFrequency(freq);
-						}
-						if (!TGTunerDialog.this.dialog.isDisposed() && !TGTunerDialog.this.fineTuner.isDisposed())
-								TGTunerDialog.this.fineTuner.setCurrentFrequency(freq);
-					 }
-				 });
-			 } catch (Throwable e) {
-				 e.printStackTrace();
-			 }
-		}
-	}
-
-	
-	public TGTuner getTuner() {
-		return this.tuner;
-	}
-	
-	public int[] getTuning() {
-		return this.tuning;
-	}
-
-
-	public void fireException(final Exception ex) {
-		try {
-			TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-				public void run() {
-					if (!TGTunerDialog.this.dialog.isDisposed())
-						MessageDialog.errorMessage(ex);
-				}
-			});
-		} catch (Throwable e) {
-			 e.printStackTrace();
-		}
-	}
-
-	
-	public void fireCurrentString(final int string) {
-		this.tuner.pause();
-		if (string == 0) { // TODO: it never happens
-			this.tuner.setWantedRange();
-			this.fineTuner.setEnabled(false);
-		}
-		else {
-			this.tuner.setWantedNote(string);
-			this.fineTuner.setWantedTone(string);
-		}
-		this.tuner.resumeFromPause();
-	}
-	
-	
-	
-	protected void createTuningString(int midiNote, Composite parent) {
-		TGTuningString tempString = new TGTuningString(midiNote,parent,this);
-		this.allStringButtons.add(tempString);
-		tempString.getStringButton().addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				// disable all others
-				TGTunerDialog.this.fineTuner.setCurrentFrequency(-1);
-				Iterator it = TGTunerDialog.this.allStringButtons.iterator();
-				while (it.hasNext()) {
-					TGTuningString tmp = (TGTuningString)it.next();
-					tmp.getStringButton().setSelection(false);
-				}
-			}
-		});
-		tempString.addListener();
-		
-	}
-	
-}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerFineWidget.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerFineWidget.java
deleted file mode 100644
index 9017f25..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerFineWidget.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/**
- * 
- */
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-
-/**
- * @author Nikola Kolarovic <johnny47ns at yahoo.com>
- *
- */
-public class TGTunerFineWidget extends Composite {
-
-	private static final int MIN_HEIGHT = 60;
-	private static final int MIN_WIDTH = 80;
-	private final float bottomY = 10.0f;
-	
-	private Composite composite = null;
-	protected String currentNoteString = null;
-	protected int currentNoteValue = -1;
-	protected double currentFrequency = 0.0f;
-	protected Font letterFont = null;
-	protected final float FINE_TUNING_RANGE = 1.5f;
-
-	public TGTunerFineWidget(Composite parent) {
-		super(parent, SWT.NONE);
-		this.setEnabled(false);
-		this.init();
-	}
-
-	protected void init() {
-		this.setLayout(new GridLayout(1,true));
-		this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		
-		
-		this.composite = new Composite(this,SWT.BORDER | SWT.DOUBLE_BUFFERED);
-		this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE));
-		this.composite.addPaintListener(new PaintListener() {
-			public void paintControl(PaintEvent e) {
-				TGPainter painter = new TGPainter(e.gc);
-				TGTunerFineWidget.this.paintWidget(painter);
-			}
-		});
-		
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumHeight = MIN_HEIGHT;
-		data.minimumWidth = MIN_WIDTH;
-		data.grabExcessHorizontalSpace=true;
-		data.grabExcessVerticalSpace=true;
-		this.composite.setLayoutData(data);
-		this.letterFont = new Font(this.getDisplay(),
-							TuxGuitar.instance().getConfig().getFontDataConfigValue(TGConfigKeys.MATRIX_FONT).getName(),
-							14,
-							SWT.BOLD
-							);
-
-	}
-	
-	
-	public void paintWidget(TGPainter painter) {
-		Point compositeSize = this.composite.getSize();
-		
-		// margins & stuff
-		
-		painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		painter.initPath();
-		painter.setLineWidth(2);
-		float height = compositeSize.y-this.bottomY-25;
-		painter.moveTo(compositeSize.x/2, compositeSize.y-this.bottomY);
-		painter.lineTo(compositeSize.x/2, 25);
-		painter.closePath();
-		painter.initPath();
-		height = Math.min(height, compositeSize.x/2);
-		painter.moveTo(compositeSize.x/2-height, compositeSize.y-this.bottomY);
-		painter.lineTo(compositeSize.x/2+height, compositeSize.y-this.bottomY);
-		painter.closePath();
-		
-		if (this.isEnabled()) {
-			// tone name
-			painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLUE));
-			painter.setFont(this.letterFont);
-			painter.drawString(this.currentNoteString, compositeSize.x*12/15, 10);
-
-			// pointer
-			if (this.currentFrequency!=-1) {
-				painter.setLineWidth(3);
-				painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_RED));
-				painter.initPath();
-				painter.moveTo(compositeSize.x/2, compositeSize.y-this.bottomY);
-				painter.lineTo((float)(compositeSize.x/2 + height*Math.cos(this.getAngleRad())),(float)( compositeSize.y-this.bottomY-height*Math.sin(this.getAngleRad())));
-			painter.closePath();
-			}
-		}
-		
-		
-		
-	
-	}
-	
-	
-	public void setWantedTone(int tone) {
-		this.setEnabled(true);
-		this.currentNoteValue = tone;
-		this.currentNoteString = TGTunerRoughWidget.TONESSTRING[tone%12]+(int)Math.floor(tone/12);
-		this.redraw();
-		
-	}
-	
-	public void setCurrentFrequency(double freq) {
-		this.currentFrequency = freq;
-		this.redraw();
-	}
-
-	public void redraw(){
-		super.redraw();
-		this.composite.redraw();
-	}
-	
-	protected double getAngleRad() {
-		return Math.PI*( 1 - (this.stickDistance(this.getTone(this.currentFrequency) - this.currentNoteValue) + this.FINE_TUNING_RANGE  )/(2*this.FINE_TUNING_RANGE) );
-	}
-
-	
-	private float getTone(double frequency) {
-		return (float)(45+12*(Math.log(frequency/110)/Math.log(2)));
-	}
-	
-	private double stickDistance(double diff) {
-		if (Math.abs(diff) > this.FINE_TUNING_RANGE)
-			if (diff > 0)
-				return this.FINE_TUNING_RANGE;
-			else
-				return -this.FINE_TUNING_RANGE;
-		return diff;
-	}
-
-	
-}
\ No newline at end of file
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerListener.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerListener.java
deleted file mode 100644
index ae344fe..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerListener.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-public interface TGTunerListener {
-
-	public void fireFrequency(double freq);
-	
-	public int[] getTuning();
-	
-	public void fireException(Exception ex);
-	
-	public void fireCurrentString(int string);
-	
-}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerPlugin.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerPlugin.java
deleted file mode 100644
index 848c1c2..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerPlugin.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.song.models.TGString;
-
-/**
- * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
- *
- */
-public class TGTunerPlugin extends org.herac.tuxguitar.gui.system.plugins.base.TGToolItemPlugin {
-
-	
-	protected void doAction() {
-		List strings = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getStrings();
-		Iterator it = strings.iterator();
-		int[] tuning = new int[strings.size()];
-		int i=0;
-		while (it.hasNext()) {
-			TGString current = (TGString)it.next();
-			tuning[i] = current.getValue();
-			i++;
-		}
-		TGTunerDialog dialog = new TGTunerDialog(tuning);
-		dialog.show();
-		
-	}
-
-	protected String getItemName() {
-		return "Guitar Tuner";
-	}
-
-	public String getName() {
-		return "GuitarTuner";
-	}
-	
-	public String getAuthor() {
-		return "Nikola Kolarovic";
-	}
-
-	public String getDescription() {
-		return "Visual tuner that analyses the most dominant frequency from your microphone" +
-			   " and displays it on the tuner scale.";
-	}
-
-	public String getVersion() {
-		return "0.01b";
-	}	
-	
-
-}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerQueue.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerQueue.java
deleted file mode 100644
index 9c5abf1..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerQueue.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-/**
- * Class that represents a frequency buffer that eliminates large frequency fluctuations.
- * 
- * It is implemented as a queue list, where you put each frequency, and based on QUEUE_SIZE
- * last frequencies it determines what current dominant frequency should be.
- * 
- * @author Nikola Kolarovic <johnny47ns at yahoo.com>
- *
- */
-public class TGTunerQueue {
-	
-	/** size of the queue */
-	int QUEUE_SIZE = 5;
-	
-	/** pointer to index of the newest element */
-	protected int head = 0;
-	
-	/** the frequency queue itself */
-	protected double[] queue;
-	
-	private double[] similars;
-	
-	
-	// TODO: tweak the tollerances
-	private final double upperTollerance = 1.05; // +5%
-	private final double lowerTollerance = 0.95; // -5%
-	
-	
-	public TGTunerQueue() {
-		this.queue = new double[this.QUEUE_SIZE];
-		this.similars = new double[this.QUEUE_SIZE];
-		this.clear();
-	}
-
-	/** add new frequency to a queue */
-	public void add(double newValue) {
-		this.head = (++this.head) % this.QUEUE_SIZE;
-		this.queue[this.head] = newValue;
-	}
-	
-	/** 
-	 * 
-	 * @return approximated frequency 
-	 */
-	public double getFreqApproximation() {
-		
-		for (int i=0; i<this.QUEUE_SIZE; i++)
-			this.similars[i]=-2; // -2, because it will always find 1 exact frequency when i==j
-		
-		for (int i=0; i<this.QUEUE_SIZE; i++) {
-			if (this.queue[i]!=-1)
-				for (int j=0; j<this.QUEUE_SIZE; j++) {
-					// exact frequency with tollerance
-					if (this.queue[i] > (this.queue[j]*this.lowerTollerance) && 
-						this.queue[i] < (this.queue[j]*this.upperTollerance) )
-							this.similars[i]=this.similars[i]+2;
-					
-					// half frequency with tollerance
-					if (this.queue[i]/2 > (this.queue[j]*this.lowerTollerance) &&
-						this.queue[i]/2 < (this.queue[j]*this.upperTollerance) )
-							this.similars[i]++;
-					
-					// double frequency with tollerance
-					if (this.queue[i]*2 > (this.queue[j]*this.lowerTollerance) &&
-						this.queue[i]*2 < (this.queue[j]*this.upperTollerance) )
-							this.similars[i]++;
-				}
-		}
-		
-		
-		// find one with max similars
-		int maxIndex = 0;
-		for (int i=1; i<this.QUEUE_SIZE; i++)
-			if (this.similars[i]>=this.similars[maxIndex])
-				maxIndex=i;
-		
-		
-		
-/*		
-		int test=(this.head+1)%this.QUEUE_SIZE;
-		System.out.print(Math.floor(queue[head])+ " ");
-		while (test!=this.head) {
-			System.out.print(Math.floor(queue[test])+ " ");
-			test = (++test)%this.QUEUE_SIZE;
-		
-		}
-		System.out.println(" =  "+queue[maxIndex]%110+" **");
-*/
-		
-		return this.queue[maxIndex];
-		//return this.queue[head];
-		
-	}
-	
-	
-	/** clears the queue data */
-	public void clear() {
-		for (int i=0; i<this.QUEUE_SIZE; i++)
-			this.queue[i]=-1;
-		this.head = 0;
-	}
-	
-}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerRoughWidget.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerRoughWidget.java
deleted file mode 100644
index e2270d9..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerRoughWidget.java
+++ /dev/null
@@ -1,112 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.SWT;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-/**
- * @author Nikola Kolarovic <johnny47ns at yahoo.com>
- *
- */
-public class TGTunerRoughWidget extends Composite {
-
-	private static final int MIN_HEIGHT = 25;
-	protected Composite composite = null;
-	protected float currentFrequency = 0;
-	
-	/** constants for drawing */
-	private final int startA = 20;
-	private final int endAb = 20;
-	private final int boundaryHeight = 16;
-	private final int markerHeight = 12;
-	private final int markerWidth = 4;
-	static String[] TONESSTRING = {"C","C#","D","D#", "E", "F", "F#", "G", "G#", "A", "A#", "B"};
-	
-	
-	public TGTunerRoughWidget(Composite parent) {
-		super(parent, SWT.NONE);
-		this.init();
-	}
-	
-	public void init() {
-		this.setLayout(new GridLayout(1,true));
-		this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		((GridData)this.getLayoutData()).widthHint = 600;
-		
-		
-		this.composite = new Composite(this,SWT.BORDER | SWT.DOUBLE_BUFFERED);
-		this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE));
-		this.composite.addPaintListener(new PaintListener() {
-			public void paintControl(PaintEvent e) {
-				TGPainter painter = new TGPainter(e.gc);
-				TGTunerRoughWidget.this.paintWidget(painter);
-			}
-
-		});
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumHeight = MIN_HEIGHT;
-		data.grabExcessHorizontalSpace = true;
-		this.composite.setLayoutData(data);
-
-	}
-	
-	
-	private void paintWidget(TGPainter painter) {
-		
-		Point compositeSize = this.composite.getSize();
-		
-		// lines and tones
-		painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		painter.initPath();
-		painter.moveTo(this.startA, compositeSize.y/2);
-		painter.lineTo(compositeSize.x-this.endAb, compositeSize.y/2);
-		painter.closePath();
-		int increment = (int)Math.round((compositeSize.x-this.startA-this.endAb) / 12.0);
-		int currentTone = 0;
-		for (int i=this.startA; i<compositeSize.x+1-this.endAb; i+=increment) {
-			painter.initPath();
-			painter.moveTo(i,compositeSize.y/2-this.boundaryHeight/2);
-			painter.lineTo(i, compositeSize.y/2+this.boundaryHeight/2);
-			painter.closePath();
-			painter.drawString(TONESSTRING[currentTone%12], i, compositeSize.y/2-this.boundaryHeight/2-20);
-			currentTone++;
-		}
-		
-		// marker
-		if (this.currentFrequency>0) {
-			painter.setForeground(getDisplay().getSystemColor(SWT.COLOR_BLUE));
-			painter.initPath();
-			int markerPos = this.markerWidth/2 + this.startA+(int)Math.round(((compositeSize.x-this.startA-this.endAb) / 240.0) * (this.getTone(this.currentFrequency)));
-			painter.moveTo(markerPos, compositeSize.y/2-this.markerHeight/2);
-			painter.setLineWidth(this.markerWidth);
-			painter.lineTo(markerPos, compositeSize.y/2+this.markerHeight/2);
-			painter.closePath();
-		}
-		
-	}
-
-	public void setCurrentFrequency(double currentFrequency) {
-		this.currentFrequency = (float)currentFrequency;
-		this.redraw();
-	}
-
-	public void redraw(){
-		super.redraw();
-		this.composite.redraw();
-	}
-
-	
-	/** formula which gets fine tone position (on scale 0-240)
-	 * in fact, it's inverse formula of inverse of TGTuner::getNoteFrequency() 
-	 */
-	protected int getTone(float frequency) {
-		float midiTone = (float)(45+12*(Math.log(frequency/110)/Math.log(2)));
-		return Math.round(  20 *   (midiTone % 12));
-	}
-	
-}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettings.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettings.java
deleted file mode 100644
index 5433e2d..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettings.java
+++ /dev/null
@@ -1,172 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-import javax.sound.sampled.AudioFormat;
-import javax.sound.sampled.AudioSystem;
-import javax.sound.sampled.DataLine;
-import javax.sound.sampled.TargetDataLine;
-
-import org.herac.tuxguitar.gui.util.MessageDialog;
-
-/**
- * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
- *
- */
-public class TGTunerSettings {
-	
-	protected int sampleSize;
-	protected float sampleRate;
-	protected String deviceName;
-	protected double treshold;
-	protected int bufferSize;
-	protected int fftSize;
-	protected int waitPeriod;
-	static final int DEFAULT_BUFFER_SIZE = 4096; // 2^12
-	static final int DEFAULT_FFT_SIZE = 16384; // 2^14
-	static final int CHANNELS_NUMBER = 1;
-	
-	
-	
-	/** default settings, if faild to load from properties */
-	public static TGTunerSettings getDefaults() {
-		TGTunerSettings retValue = new TGTunerSettings();
-		retValue.setSampleRate(11025);
-		retValue.setSampleSize(8);
-		retValue.setBufferSize(DEFAULT_BUFFER_SIZE);
-		retValue.setFFTSize(DEFAULT_FFT_SIZE);
-		retValue.setTreshold(0.03);
-		retValue.setWaitPeriod(100);
-		return retValue;
-	}
-
-	
-	
-	/** gets dataline from format specification */
-	protected static TargetDataLine getDataLine(TGTunerSettings settings) throws TGTuner.TGTunerException {
-		TargetDataLine	targetDataLine = null;
-
-		if (settings!=null) {
-			// get info for initialization
-			DataLine.Info info = settings.getDataLineInfo();
-			
-			try {
-				
-				targetDataLine = (TargetDataLine)AudioSystem.getLine(info);
-				
-			} catch (Exception ex) {
-				MessageDialog.errorMessage(ex);
-			}
-		}
-		else 
-			throw new TGTuner.TGTunerException("Could not retrieve data from the input. Check your system device settings.");
-		
-		return targetDataLine;
-	}
-
-	/** Creates DataLine.Info based on settings */
-	protected DataLine.Info getDataLineInfo() {
-				return new DataLine.Info(TargetDataLine.class,
-													this.getAudioFormat(), this.getBufferSize());
-				
-	}
-
-	/** creates AudioFormat based on settings */
-	public AudioFormat getAudioFormat() {
-		return new AudioFormat(this.getSampleRate(),this.getSampleSize(),1,true,false);
-		// TODO: this is changed!!!!
-		/* return new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, // PCM encoding
-				this.getSampleRate(), // sample rate
-				this.getSampleSize(), // sample size (8-bit, 16-bit)
-				1, // mono
-				this.getFrameSize(), // 16-bit frame (was:4)
-				this.getSampleRate(), // frame rate
-				false // big-endian
-				); */
-	}
-
-	/*
-	private int getFrameSize() {
-		return (this.sampleSize / 8) * CHANNELS_NUMBER;
-	}
-	*/
-
-
-	public int getBufferSize() {
-		return this.bufferSize;
-	}
-	public void setBufferSize(int bufferSize) {
-		// TODO: adjust size in TGTuner also then
-		this.bufferSize = bufferSize;
-	}
-	
-	public int getFFTSize() {
-		return this.fftSize;
-	}
-	public void setFFTSize(int size) {
-		this.fftSize = size;
-	}
-	
-	
-	
-	public float getSampleRate() {
-		return this.sampleRate;
-	}
-	
-	public double getTreshold() {
-		return this.treshold;
-	}
-	
-	public void setTreshold(double nt) {
-		this.treshold = nt;
-	}
-	
-	public void setSampleRate(float sampleRate) {
-		this.sampleRate = sampleRate;
-	}
-	public int getSampleSize() {
-		return this.sampleSize;
-	}
-	public void setSampleSize(int sampleSize) {
-		this.sampleSize = sampleSize;
-	}
-
-	public int getWaitPeriod() {
-		return this.waitPeriod;
-	}
-	public void setWaitPeriod(int time) {
-		this.waitPeriod = time;
-	}
-
-
-	public static TGTunerSettings loadTuxGuitarSettings() throws TGTuner.TGTunerException {
-		// TODO: load system properties and throw exception if failed to load
-		return TGTunerSettings.getDefaults();
-		//return null;
-	}
-
-	
-	
-	
-	/* MAYBE USEFUL CODE
-	 * 
-	 * Port lineIn;
-FloatControl volCtrl;
-try {
-  mixer = AudioSystem.getMixer(null);
-  lineIn = (Port)mixer.getLine(Port.Info.LINE_IN);
-  lineIn.open();
-  volCtrl = (FloatControl) lineIn.getControl(
-      FloatControl.Type.VOLUME);
-  // Assuming getControl call succeeds, 
-  // we now have our LINE_IN VOLUME control.
-} catch (Exception e) {
-  System.out.println("Failed trying to find LINE_IN"
-    + " VOLUME control: exception = " + e);
-}
-float newValue = 2.0F;
-if (volCtrl != null)
-  // This changes the volume of the signal flowing though the line that "owns" the control.
-  volCtrl.setValue(newValue); 
-	 * 
-	 */
-	
-}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettingsDialog.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettingsDialog.java
deleted file mode 100644
index a58e414..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTunerSettingsDialog.java
+++ /dev/null
@@ -1,334 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Scale;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-
-
-/**
- * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
- *
- */
-public class TGTunerSettingsDialog {
-
-	private static final int SHELL_WIDTH = 350;
-	protected TGTunerDialog tunerDialog = null;
-	// protected Combo deviceCombo = null;
-	protected Combo sampleRateCombo = null;
-	protected Combo sampleSizeCombo = null;
-	protected Combo bufferSizeCombo = null;
-	protected Combo FFTSizeCombo = null;
-	protected Scale noiseGate = null;
-	protected Label noiseGateValue = null;
-	protected Text settingsInfo = null;
-	protected boolean updated;
-	
-	public TGTunerSettingsDialog(TGTunerDialog dialog) {
-		this.tunerDialog = dialog;
-		this.updated=false;
-	}
-
-	public void show() {
-		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE);
-		dialog.setLayout(new GridLayout());
-		dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-		dialog.setText(TuxGuitar.getProperty("tuner.settings"));
-		dialog.setMinimumSize(SHELL_WIDTH,SWT.DEFAULT);
-		
-		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);            
-		group.setLayout(new GridLayout());
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setText(TuxGuitar.getProperty("tuner.device-settings"));
-		
-/*		this.deviceCombo = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.deviceCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,false,2,1));
-		this.fillDeviceCombo(dialog);
-		this.deviceCombo.addSelectionListener(new UpdatedListener());
-*/
-		
-		Composite sampleComposite = this.createGroup(TuxGuitar.getProperty("tuner.sound-format"), group);
-
-		
-		new Label(sampleComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.sample-rate"));
-		this.sampleRateCombo = new Combo(sampleComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.sampleRateCombo.add("48000");
-		this.sampleRateCombo.add("44100");
-		this.sampleRateCombo.add("22050");
-		this.sampleRateCombo.add("11025");
-		this.sampleRateCombo.add("8000");
-		this.sampleRateCombo.addSelectionListener(new UpdatedListener());
-
-		
-		new Label(sampleComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.sample-size"));
-		this.sampleSizeCombo = new Combo(sampleComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.sampleSizeCombo.add("16");
-		this.sampleSizeCombo.add("8");
-		this.sampleSizeCombo.addSelectionListener(new UpdatedListener());
-
-
-		Composite analyzeComposite = this.createGroup(TuxGuitar.getProperty("tuner.sampling-and-analyze"), group);
-
-		// buffer size
-		new Label(analyzeComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.sampling-buffer-size"));
-		this.bufferSizeCombo = new Combo(analyzeComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.bufferSizeCombo.add(new Integer(512).toString());
-		this.bufferSizeCombo.add(new Integer(1024).toString());
-		this.bufferSizeCombo.add(new Integer(2048).toString());
-		this.bufferSizeCombo.add(new Integer(4096).toString());
-		this.bufferSizeCombo.add(new Integer(8192).toString());
-		this.bufferSizeCombo.add(new Integer(16348).toString());
-		this.bufferSizeCombo.addSelectionListener(new UpdatedListener());
-
-		
-		// FFT buffer size
-		new Label(analyzeComposite,SWT.LEFT).setText(TuxGuitar.getProperty("tuner.fourier-buffer-size"));
-		this.FFTSizeCombo = new Combo(analyzeComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.FFTSizeCombo.add(new Integer(1024).toString());
-		this.FFTSizeCombo.add(new Integer(2048).toString());
-		this.FFTSizeCombo.add(new Integer(4096).toString());
-		this.FFTSizeCombo.add(new Integer(8192).toString());
-		this.FFTSizeCombo.add(new Integer(16384).toString());
-		this.FFTSizeCombo.add(new Integer(32768).toString());
-		this.FFTSizeCombo.addSelectionListener(new UpdatedListener());
-		
-		Composite noiseGateComposite = this.createGroup(TuxGuitar.getProperty("tuner.noise-gate"), group);
-		this.noiseGate = new Scale(noiseGateComposite, SWT.BORDER);
-		this.noiseGate.setMaximum(100);
-		this.noiseGate.setIncrement(5);
-		this.noiseGate.setPageIncrement(10);
-		this.noiseGate.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TGTunerSettingsDialog.this.noiseGateValue.setText(
-						new Integer(TGTunerSettingsDialog.this.noiseGate.getSelection()).toString()+"%");
-			}
-		});
-		this.noiseGate.addSelectionListener(new UpdatedListener());
-		this.noiseGate.setLayoutData(new GridData(SWT.None, SWT.NONE, true,false,1,1));
-		((GridData)this.noiseGate.getLayoutData()).widthHint=270;
-		((GridData)this.noiseGate.getLayoutData()).grabExcessHorizontalSpace=true;
-		this.noiseGateValue = new Label(noiseGateComposite,SWT.LEFT);
-		this.noiseGateValue.setText("                       ");
-		
-		Composite infoComposite = this.createGroup(TuxGuitar.getProperty("tuner.info"), group);
-		
-		this.settingsInfo = new Text(infoComposite, SWT.READ_ONLY | SWT.MULTI );
-		this.settingsInfo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,false,2,1));
-		((GridData)this.settingsInfo.getLayoutData()).heightHint=30;
-		((GridData)this.settingsInfo.getLayoutData()).grabExcessHorizontalSpace=true;
-		((GridData)this.settingsInfo.getLayoutData()).grabExcessVerticalSpace=true;
-		((GridData)this.settingsInfo.getLayoutData()).widthHint=300;
-		//// buttons ok/cancel
-		Composite btnComposite = new Composite(dialog,SWT.NONE);
-		btnComposite.setLayout(new GridLayout(2,false));
-		btnComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(btnComposite, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(TGTunerDialog.getGridData(80,25));
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-            public void widgetSelected(SelectionEvent arg0) {
-            	TGTunerSettingsDialog.this.dispose(dialog,true);
-            }
-        });
-		final Button buttonExit = new Button(btnComposite, SWT.PUSH);
-        buttonExit.setText(TuxGuitar.getProperty("close"));
-        buttonExit.setLayoutData(TGTunerDialog.getGridData(80,25));
-        buttonExit.addSelectionListener(new SelectionAdapter() {
-            public void widgetSelected(SelectionEvent arg0) {
-            	TGTunerSettingsDialog.this.dispose(dialog,false);
-            }
-        });
-        
-        this.loadSettings(this.tunerDialog.getTuner().getSettings(), dialog);
-        
-        DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-
-
-	protected void loadSettings(TGTunerSettings settings, Shell dialog) {
-		
-		// TODO: this is no good! vvvvvvvvv
-		
-		boolean loadedDefaults=false;
-		if (settings==null) {
-			settings = TGTunerSettings.getDefaults();
-			loadedDefaults=true;
-		}
-		// TODO: this is no good! ^^^^^^^^^
-		
-		boolean found = false;
-		int i = 0;
-		
-		try {
-			while (!found) {
-				if ( Float.parseFloat(this.sampleRateCombo.getItem(i)) == settings.getSampleRate()  ) {
-						this.sampleRateCombo.select(i);
-						found=true;
-				}
-				i++;
-			}
-			i=0; found=false;
-		
-			while (!found) {
-				if ( Integer.parseInt(this.sampleSizeCombo.getItem(i)) == settings.getSampleSize()  ) {
-							this.sampleSizeCombo.select(i);
-							found=true;
-				}
-				i++;
-			}
-
-			i=0; found=false;
-			while (!found) {
-				if ( Integer.parseInt(this.FFTSizeCombo.getItem(i)) == settings.getFFTSize()  ) {
-							this.FFTSizeCombo.select(i);
-							found=true;
-				}
-				i++;
-			}
-			
-			this.bufferSizeCombo.setText(new Integer(settings.getBufferSize()).toString());
-			this.noiseGate.setSelection((int)Math.round(settings.getTreshold()*100));
-			this.noiseGateValue.setText(new Integer(this.noiseGate.getSelection()).toString()+"%");
-
-/*			i=0; found=false;
-			if (settings.deviceName==null)
-				found=true;
-			while (!found) {
-				if ( this.deviceCombo.getItem(i).equals(settings.getDeviceName())  ) {
-							this.deviceCombo.select(i);
-							found=true;
-				}
-				i++;
-			}
-*/		} catch (Exception ex) {
-			if (!loadedDefaults) {
-				MessageDialog.errorMessage(dialog,"Failed to load TuxGuitar settings.\nLoading defaults.");
-				loadSettings(TGTunerSettings.getDefaults(),dialog);
-			}
-		}
-		
-	}
-
-	
-/*	
-	*//** cycles through available SourceData audio devices *//*
-	private void fillDeviceCombo(Shell dialog) {
-		Mixer.Info[] aInfos = AudioSystem.getMixerInfo();
-		for (int i = 0; i < aInfos.length; i++)
-		{
-			Mixer mixer = AudioSystem.getMixer(aInfos[i]);
-			Line.Info lineInfo = new Line.Info(SourceDataLine.class);
-			if (mixer.isLineSupported(lineInfo))
-			{
-				this.deviceCombo.add(aInfos[i].getName());
-			}
-		}
-		if (aInfos.length == 0)
-		{
-			MessageDialog.errorMessage(dialog,"No input sound devices available.");
-		}
-	}
-
-*/	
-	protected void dispose(Shell dialog, boolean saveWanted) {
-		try {
-			if (this.updated & saveWanted) {
-				TGTunerSettings settings = new TGTunerSettings();
-				settings.setSampleRate(this.getSampleRate());
-				settings.setSampleSize(Integer.parseInt(this.sampleSizeCombo.getItem(this.sampleSizeCombo.getSelectionIndex())));
-	
-				settings.setBufferSize(this.getBufferSize());
-				settings.setFFTSize(this.getFFTSize());
-				settings.setTreshold((float)this.noiseGate.getSelection()/100);
-				settings.setWaitPeriod(100); // TODO: hard coded?
-				
-				this.checkBufferValues(settings); // check if they are divisable with buffer size
-				
-	
-	/*			if (this.deviceCombo.getSelectionIndex()<0) {
-					MessageDialog.errorMessage(dialog,"You didn't set the input device.");
-					return;
-				}
-				settings.setDeviceName(this.deviceCombo.getItem(this.deviceCombo.getSelectionIndex()));
-	*/			
-				this.tunerDialog.getTuner().setSettings(settings);
-				// TODO: save the settings in the system
-			}
-			
-	    	this.tunerDialog.getTuner().resumeFromPause();
-			dialog.dispose();
-		} catch (Exception ex) {
-			ex.printStackTrace();
-			MessageDialog.errorMessage(dialog,ex.getMessage());
-		}
-	}
-	
-	
-	
-	
-	private float getSampleRate() {
-		return Float.parseFloat(this.sampleRateCombo.getItem(this.sampleRateCombo.getSelectionIndex()));
-	}
-	private int getFFTSize() {
-		return Integer.parseInt(this.FFTSizeCombo.getItem(this.FFTSizeCombo.getSelectionIndex()));
-	}
-	private int getBufferSize() {
-		return Integer.parseInt(this.bufferSizeCombo.getText());
-	}
-	
-	
-
-	/** adapter class which sets update flag */
-	protected class UpdatedListener extends SelectionAdapter {
-		public void widgetSelected(SelectionEvent arg0) {
-        	TGTunerSettingsDialog.this.updated=true;
-        	TGTunerSettingsDialog.this.settingsInfo.setText(" Minimal freq diff = "+this.getMinimalFrequencyDiff()+"Hz   \n Time to fill the buffer = "+ this.getTimeToFillBuffer()+" sec");
-        }
-		
-    	private double getMinimalFrequencyDiff() {
-    		return ((double) TGTunerSettingsDialog.this.getSampleRate()) / TGTunerSettingsDialog.this.getFFTSize();
-    	}
-    	
-    	private double getTimeToFillBuffer() {
-    		return TGTunerSettingsDialog.this.getBufferSize() / TGTunerSettingsDialog.this.getSampleRate();
-    	}
-
-	}
-	
-	
-	
-
-	/** because there are many groups */
-	protected Composite createGroup(String groupCaption, Composite parent) {
-		Group tempGroup = new Group(parent,SWT.SHADOW_ETCHED_IN);            
-		tempGroup.setLayout(new GridLayout());
-		tempGroup.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		tempGroup.setText(groupCaption);
-		Composite groupComposite = new Composite(tempGroup,SWT.NONE);
-		groupComposite.setLayout(new GridLayout(2,false));
-		groupComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		return groupComposite;
-	}
-	
-	protected void checkBufferValues(TGTunerSettings settings) throws Exception {
-		if (settings.bufferSize % settings.sampleSize != 0 ||
-			settings.bufferSize > settings.fftSize	)
-			throw new Exception("Invalid sampling buffer size");
-	}
-
-
-}
diff --git a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTuningString.java b/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTuningString.java
deleted file mode 100644
index da0f37c..0000000
--- a/TuxGuitar-tuner/src/org/herac/tuxguitar/gui/tools/custom/tuner/TGTuningString.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/**
- * 
- */
-package org.herac.tuxguitar.gui.tools.custom.tuner;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-
-/**
- * @author Nikola Kolarovic <johnny47ns at yahoo.com>
- *
- */
-public class TGTuningString {
-
-	private int string;
-	private Button stringButton = null;
-	private TGTunerListener listener = null;
-	
-	
-	
-	TGTuningString(int string, Composite parent, TGTunerListener listener) {
-		this.string = string;
-		this.listener = listener;
-		
-		this.stringButton = new Button(parent,SWT.TOGGLE);
-		this.stringButton.setText("--------- "+TGTunerRoughWidget.TONESSTRING[string%12]+(int)Math.floor(string/12)+" ---------");
-	}
-
-	
-	
-	void addListener() {
-		this.stringButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-					TGTuningString.this.stringButton.setSelection(true);
-					TGTuningString.this.listener.fireCurrentString(TGTuningString.this.string);
-			}
-			
-		});
-	}
-	
-	public int getString() {
-		return this.string;
-	}
-	
-	public Button getStringButton() {
-		return this.stringButton;
-	}
-	
-}
diff --git a/TuxGuitar-viewer/build.properties b/TuxGuitar-viewer/build.properties
new file mode 100644
index 0000000..17c4a2c
--- /dev/null
+++ b/TuxGuitar-viewer/build.properties
@@ -0,0 +1,8 @@
+### ANT Flags
+#
+# build.compiler=gcj
+ant.build.javac.source=1.4
+ant.build.javac.target=1.4
+
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
diff --git a/TuxGuitar-viewer/build.xml b/TuxGuitar-viewer/build.xml
new file mode 100644
index 0000000..c16342c
--- /dev/null
+++ b/TuxGuitar-viewer/build.xml
@@ -0,0 +1,83 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar-viewer" basedir="." default="all">
+	<description>
+		TuxGuitar-viewer
+	</description>
+	
+	<property file="build.properties" />
+	<property name="ant.build.javac.source" value="1.4" />
+	<property name="ant.build.javac.target" value="1.4" />
+	
+	<property name="build.src.path" value="src${file.separator}" />
+	<property name="build.resource.path" value="resources${file.separator}" />
+	<property name="build.path" value="build${file.separator}" />
+	<property name="build.jar" value="tuxguitar-viewer.jar" />
+	
+	<property name="dist.dst.path" value="" />
+	<property name="dist.jar.path" value="." />
+	
+	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
+	</path >
+	
+	<target name="all" depends="package" />
+	
+	<target name="clean">
+		<delete quiet="true" dir="${build.path}" />
+		<delete quiet="true" file="${build.jar}" />
+	</target>
+	
+	<target name="build" depends="clean">
+		<echo>+--------------------------------------------------------------------+</echo>
+		<echo>|                B U I L D I N G   T U X G U I T A R                 |</echo>
+		<echo>+--------------------------------------------------------------------+</echo>
+		
+		<mkdir dir="${build.path}" />
+		
+		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
+			<classpath refid="class.path"/>
+			<include name="**/*.java"/>
+		</javac>
+		
+		<copy todir="${build.path}">
+			<fileset dir="${build.resource.path}"/>
+		</copy>
+		
+	</target>
+	
+	<target name="package" depends="build">
+		<echo>+--------------------------------------------------------------------+</echo>
+		<echo>|              P A C K A G I N G   T U X G U I T A R                 |</echo>
+		<echo>+--------------------------------------------------------------------+</echo>
+		
+		<jar destfile="${build.jar}">
+			<fileset dir="${build.path}" />
+		</jar>
+		
+		<genkey alias="tuxguitar" storepass="tuxguitar" keystore="${build.path}/tuxguitar-keystore" >
+			<dname>
+				<param name="CN" value="TuxGuitar"/>
+				<param name="OU" value="TuxGuitar"/>
+				<param name="O"  value="Herac"/>
+				<param name="C"  value="AR"/>
+			</dname>
+		</genkey>
+		<signjar alias="tuxguitar" keystore="${build.path}/tuxguitar-keystore" storepass="tuxguitar" keypass="tuxguitar">
+			<fileset file="${build.jar}" />
+		</signjar>
+	</target>
+	
+	<target name="install" depends="all">
+		<echo>+--------------------------------------------------------------------+</echo>
+		<echo>|              I N S T A L L I N G   T U X G U I T A R               |</echo>
+		<echo>+--------------------------------------------------------------------+</echo>
+		
+		<mkdir dir="${dist.dst.path}${dist.jar.path}" />
+		<copy todir="${dist.dst.path}${dist.jar.path}">
+			<fileset file="${build.jar}"/>
+		</copy>
+	</target>
+	
+</project>
diff --git a/TuxGuitar-viewer/resources/skin/scroll_down.png b/TuxGuitar-viewer/resources/skin/scroll_down.png
new file mode 100644
index 0000000..b54bfad
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/scroll_down.png differ
diff --git a/TuxGuitar-viewer/resources/skin/scroll_down_pressed.png b/TuxGuitar-viewer/resources/skin/scroll_down_pressed.png
new file mode 100644
index 0000000..ccf56b7
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/scroll_down_pressed.png differ
diff --git a/TuxGuitar-viewer/resources/skin/scroll_up.png b/TuxGuitar-viewer/resources/skin/scroll_up.png
new file mode 100644
index 0000000..fab40c0
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/scroll_up.png differ
diff --git a/TuxGuitar-viewer/resources/skin/scroll_up_pressed.png b/TuxGuitar-viewer/resources/skin/scroll_up_pressed.png
new file mode 100644
index 0000000..bfc71ed
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/scroll_up_pressed.png differ
diff --git a/TuxGuitar-viewer/resources/skin/setup.png b/TuxGuitar-viewer/resources/skin/setup.png
new file mode 100644
index 0000000..e1baeec
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/setup.png differ
diff --git a/TuxGuitar-viewer/resources/skin/setup_over.png b/TuxGuitar-viewer/resources/skin/setup_over.png
new file mode 100644
index 0000000..f32b771
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/setup_over.png differ
diff --git a/TuxGuitar-viewer/resources/skin/setup_pressed.png b/TuxGuitar-viewer/resources/skin/setup_pressed.png
new file mode 100644
index 0000000..d93da79
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/setup_pressed.png differ
diff --git a/TuxGuitar-viewer/resources/skin/transport_play.png b/TuxGuitar-viewer/resources/skin/transport_play.png
new file mode 100644
index 0000000..9f87188
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/transport_play.png differ
diff --git a/TuxGuitar-viewer/resources/skin/transport_play_over.png b/TuxGuitar-viewer/resources/skin/transport_play_over.png
new file mode 100644
index 0000000..d809064
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/transport_play_over.png differ
diff --git a/TuxGuitar-viewer/resources/skin/transport_play_pressed.png b/TuxGuitar-viewer/resources/skin/transport_play_pressed.png
new file mode 100644
index 0000000..5c04341
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/transport_play_pressed.png differ
diff --git a/TuxGuitar-viewer/resources/skin/transport_play_selected.png b/TuxGuitar-viewer/resources/skin/transport_play_selected.png
new file mode 100644
index 0000000..81cccb4
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/transport_play_selected.png differ
diff --git a/TuxGuitar-viewer/resources/skin/transport_play_selected_over.png b/TuxGuitar-viewer/resources/skin/transport_play_selected_over.png
new file mode 100644
index 0000000..a7b17f3
Binary files /dev/null and b/TuxGuitar-viewer/resources/skin/transport_play_selected_over.png differ
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/TGApplet.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/TGApplet.java
new file mode 100644
index 0000000..fb69f2b
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/TGApplet.java
@@ -0,0 +1,169 @@
+package org.herac.tuxguitar.app;
+
+import java.applet.Applet;
+import java.awt.BorderLayout;
+import java.awt.Container;
+import java.awt.Frame;
+import java.awt.Graphics;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.net.URL;
+
+import javax.swing.SwingUtilities;
+
+import org.herac.tuxguitar.app.system.config.TGConfig;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.util.TGSynchronizer;
+import org.herac.tuxguitar.util.TGSynchronizer.TGSynchronizerTask;
+
+public class TGApplet extends Applet{
+	
+	private static final long serialVersionUID = -5282932001028049828L;
+
+	public TGApplet(){
+		super();
+	}
+	
+	public void init(){
+		applicationInit();
+	}
+	
+	public void destroy(){
+		applicationDestroy();
+	}
+	
+	public void start(){
+		this.setFocus();
+		this.repaint();
+	}
+	
+	public void repaint(){
+		super.repaint();
+	}
+	
+	public void update(Graphics g){
+		this.paint(g);
+	}
+	
+	public void applicationInit() {
+		this.initConfig();
+		this.initSynchronizer();
+		
+		TuxGuitar.instance().setShell(this);
+		
+	    this.setLayout(new BorderLayout());
+	    this.add( TuxGuitar.instance().getToolBar().getPanel() ,BorderLayout.NORTH);
+	    this.add( TuxGuitar.instance().getTablatureEditor().getPanel(),BorderLayout.CENTER);
+	    this.add( TuxGuitar.instance().getTablatureEditor().getScrollBar(),BorderLayout.EAST);
+	    this.setVisible(true);
+	    this.setFocus();
+	    
+	    this.load();
+	}
+	
+	public void applicationDestroy(){
+		TuxGuitar.instance().lock();
+		TuxGuitar.instance().getPlayer().close();
+		TuxGuitar.instance().getTablatureEditor().dispose();
+		TuxGuitar.instance().getSongManager().clearSong();
+		TuxGuitar.instance().unlock();
+		this.removeAll();
+	}
+	
+	public Frame getFrame(){ 
+		Container parent = this;
+		while(parent != null){
+			if (parent instanceof Frame){
+				return (Frame)parent;
+			}
+			parent = parent.getParent();
+		}
+		return null;
+	}
+	
+	public void setFocus(){
+		this.setFocusable(true);
+		this.requestFocus();
+	}
+	
+	private void initSynchronizer(){
+		TGSynchronizer.instance().setController(new TGSynchronizer.TGSynchronizerController() {
+			public void execute(final TGSynchronizer.TGSynchronizerTask task) {
+				try{
+					// Just excecute the task if it is on the same thread.
+					if( SwingUtilities.isEventDispatchThread() ){
+						task.run();
+					}else{
+						SwingUtilities.invokeAndWait(new Runnable() {
+							public void run() {
+								task.run();
+							}
+						});
+					}
+				}catch(Throwable throwable){
+					throwable.printStackTrace();
+				}
+			}
+			public void executeLater(final TGSynchronizerTask task) {
+				SwingUtilities.invokeLater(new Runnable() {
+					public void run() {
+						task.run();
+					}
+				});
+			}
+		});
+	}
+	
+	private void initConfig(){
+		TGConfig.SONG_URL = getParameter("song_url_download");
+		TGConfig.SOUNDBANK_URL = getParameter("soundbank_url_download");
+		TGConfig.LOOK_FEEL = getParameter("look_and_feel");
+		TGConfig.MIDI_PORT = getParameter("midi_port");
+	}
+	
+	public void load(){
+		new Thread(new Runnable() {
+			public void run() {
+				TuxGuitar.instance().getTablatureEditor().loadTablature();
+				TuxGuitar.instance().getkeyBindingManager().appendListenersTo( TGApplet.this );
+				
+				loadSong();
+				
+				TuxGuitar.instance().getTablatureEditor().start();
+			}
+		}).start();
+	}
+	
+	public void loadSong(){
+		try{
+			if(TGConfig.SONG_URL != null){
+				TGFileFormatManager.instance().addInputStream(new org.herac.tuxguitar.io.tg10.TGInputStream());
+				TGFileFormatManager.instance().addInputStream(new org.herac.tuxguitar.io.tg11.TGInputStream());
+				TGFileFormatManager.instance().addInputStream(new org.herac.tuxguitar.io.tg12.TGInputStream());
+				
+				URL url = new URL(TGConfig.SONG_URL);
+				InputStream stream = getInputStream(url.openStream());
+				TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream);
+				TuxGuitar.instance().fireNewSong(song);
+			}
+		}catch(Throwable t){
+			t.printStackTrace();
+			TuxGuitar.instance().newSong();
+		}
+	}
+	
+	private InputStream getInputStream(InputStream in)throws Throwable {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		int read = 0;
+		while((read = in.read()) != -1){
+			out.write(read);
+		}
+		byte[] bytes = out.toByteArray();
+		in.close();
+		out.close();
+		out.flush();
+		return new ByteArrayInputStream(bytes);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/TuxGuitar.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/TuxGuitar.java
new file mode 100644
index 0000000..0c7b864
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/TuxGuitar.java
@@ -0,0 +1,220 @@
+/*
+ * Created on 25-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app;
+
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.app.actions.ActionManager;
+import org.herac.tuxguitar.app.editors.EditorCache;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingActionManager;
+import org.herac.tuxguitar.app.toolbar.TGToolBar;
+import org.herac.tuxguitar.app.transport.TGTransport;
+import org.herac.tuxguitar.graphics.control.TGFactoryImpl;
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.impl.sequencer.MidiSequencerProviderImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.util.TGLock;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TuxGuitar {
+	
+	private static TuxGuitar instance;
+	
+	private TGLock lock;
+	
+	private TGApplet shell;
+	
+	private MidiPlayer player;
+	
+	private TGSongManager songManager;
+	
+	private KeyBindingActionManager keyBindingManager;
+	
+	private EditorCache editorCache;
+	
+	private TablatureEditor tablatureEditor;
+	
+	private TGToolBar toolBar;
+	
+	private TGTransport transport;
+	
+	private ActionManager actionManager;
+	
+	private TuxGuitar() {
+		this.lock = new TGLock();
+	}
+	
+	public static TuxGuitar instance() {
+		if (instance == null) {
+			synchronized (TuxGuitar.class) {
+				instance = new TuxGuitar();
+			}
+		}
+		return instance;
+	}
+	
+	public TablatureEditor getTablatureEditor(){
+		if(this.tablatureEditor == null){
+			this.tablatureEditor = new TablatureEditor();
+		}
+		return this.tablatureEditor;
+	}
+	
+	public TGToolBar getToolBar(){
+		if(this.toolBar == null){
+			this.toolBar = new TGToolBar();
+		}
+		return this.toolBar;
+	}
+	
+	public TGSongManager getSongManager(){
+		if(this.songManager == null){
+			this.songManager = new TGSongManager(new TGFactoryImpl());
+			this.songManager.setSong(this.songManager.newSong());
+		}
+		return this.songManager;
+	}
+	
+	public TGTransport getTransport(){
+		if(this.transport == null){
+			this.transport = new TGTransport();
+		}
+		return this.transport;
+	}
+	
+	public EditorCache getEditorCache(){
+		if(this.editorCache == null){
+			this.editorCache = new EditorCache();
+		}
+		return this.editorCache;
+	}
+	
+	public ActionManager getActionManager() {
+		if(this.actionManager == null){
+			this.actionManager = new ActionManager();
+		}
+		return this.actionManager;
+	}
+	
+	public KeyBindingActionManager getkeyBindingManager(){
+		if(this.keyBindingManager == null){
+			this.keyBindingManager = new KeyBindingActionManager();
+		}
+		return this.keyBindingManager;
+	}
+	
+	public MidiPlayer getPlayer(){
+		if(this.player == null){
+			this.player = MidiPlayer.getInstance();
+			this.player.init(getSongManager());
+			try {
+				getPlayer().addSequencerProvider(new MidiSequencerProviderImpl());
+				getPlayer().addSequencerProvider(new org.herac.tuxguitar.player.impl.jsa.sequencer.MidiSequencerProviderImpl());
+				getPlayer().addOutputPortProvider(new org.herac.tuxguitar.player.impl.jsa.midiport.MidiPortProviderImpl());
+				
+				//check midi sequencer
+				getPlayer().openSequencer(TGConfig.MIDI_SEQUENCER, true);
+				
+				//check midi port
+				getPlayer().openOutputPort(TGConfig.MIDI_PORT, true);
+			} catch (MidiPlayerException e) {
+				e.printStackTrace();
+			}
+		}
+		return this.player;
+	}
+	
+	public void updateCache(boolean updateItems){
+		this.lock();
+		this.getEditorCache().updateEditMode();
+		if( updateItems ){
+			this.getToolBar().updateItems();
+		}
+		this.redraw();
+	}
+	
+	protected void redraw(){
+		this.lock();
+		this.getTablatureEditor().repaint();
+		this.unlock();
+	}
+	
+	public void redrawPayingMode(){
+		this.lock();
+		this.getEditorCache().updatePlayMode();
+		if(this.getEditorCache().shouldRedraw()){
+			this.getTablatureEditor().getTablature().redrawPlayingMode();
+		}
+		this.unlock();
+	}
+	
+	public Action getAction(String name) {
+		return this.getActionManager().getAction(name);
+	}
+	
+	public void newSong(){
+		fireNewSong(getSongManager().newSong());
+	}
+	
+	public void fireNewSong(TGSong song){
+		this.lock();
+		
+		getSongManager().setSong(song);
+
+		getPlayer().reset();
+		getEditorCache().reset();
+		getTablatureEditor().getTablature().updateTablature();
+		getTablatureEditor().getTablature().resetScroll();
+		getTablatureEditor().getTablature().initCaret();
+		
+		this.unlock();
+		
+		updateCache(true);
+	}
+	
+	public void fireUpdate(){
+		this.lock();
+		
+		this.getEditorCache().reset();
+		this.getTablatureEditor().getTablature().updateTablature();
+		
+		this.unlock();
+	}
+	
+	public void setFocus(){
+		if(getShell() != null ){
+			getShell().setFocus();
+		}
+	}
+	
+	public TGApplet getShell() {
+		return this.shell;
+	}
+
+	public void setShell(TGApplet shell) {
+		this.shell = shell;
+	}
+	
+	public void lock(){
+		this.lock.lock();
+	}
+	
+	public void unlock(){
+		this.lock.unlock();
+	}
+	
+	public boolean isLocked(){
+		return this.lock.isLocked();
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/Action.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/Action.java
new file mode 100644
index 0000000..2059aea
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/Action.java
@@ -0,0 +1,106 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions;
+
+import java.awt.AWTEvent;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.util.SyncThread;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window 
+ * Preferences - Java - Code Style - Code Templates
+ */
+public abstract class Action extends ActionAdapter {
+	
+	protected static final int AUTO_LOCK = 0x01;
+	
+	protected static final int AUTO_UNLOCK = 0x02;
+	
+	protected static final int AUTO_UPDATE = 0x04;
+	
+	protected static final int KEY_BINDING_AVAILABLE = 0x08;
+	
+	protected static final int DISABLE_ON_PLAYING = 0x10;
+	
+	private String name;
+	
+	private int flags;
+	
+	public Action(String name, int flags) {
+		this.name = name;
+		this.flags = flags;
+	}
+	
+	protected abstract int execute(AWTEvent e);
+	
+	public synchronized void process(final AWTEvent e) {
+		if (!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()) {
+			if( !TuxGuitar.instance().getTablatureEditor().isStarted() ){
+				return;
+			}
+			
+			final int flags = getFlags();
+			
+			if ((flags & DISABLE_ON_PLAYING) != 0 && TuxGuitar.instance().getPlayer().isRunning()) {
+				TuxGuitar.instance().updateCache(((flags & AUTO_UPDATE) != 0));
+				return;
+			}
+			
+			if ((flags & AUTO_LOCK) != 0) {
+				ActionLock.lock();
+			}
+			
+			new SyncThread(new TGSynchronizer.TGRunnable() {
+				public void run() {
+					int result = execute(e);
+					
+					TuxGuitar.instance().updateCache((((flags | result) & AUTO_UPDATE) != 0));
+					
+					if (((flags | result) & AUTO_UNLOCK) != 0) {
+						ActionLock.unlock();
+					}
+					
+					TuxGuitar.instance().setFocus();
+				}
+			}).start();
+		}
+	}
+	
+	protected int getFlags() {
+		return this.flags;
+	}
+	
+	public TGSongManager getSongManager() {
+		return TuxGuitar.instance().getSongManager();
+	}
+	
+	public TablatureEditor getEditor() {
+		return TuxGuitar.instance().getTablatureEditor();
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public boolean isKeyBindingAvailable() {
+		return ((getFlags() & KEY_BINDING_AVAILABLE) != 0);
+	}
+	
+	public synchronized void updateTablature() {
+		TuxGuitar.instance().fireUpdate();
+	}
+	
+	public void fireUpdate(int measureNumber) {
+		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().updateMeasureNumber(measureNumber);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionAdapter.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionAdapter.java
new file mode 100644
index 0000000..2e13354
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionAdapter.java
@@ -0,0 +1,44 @@
+package org.herac.tuxguitar.app.actions;
+
+import java.awt.AWTEvent;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+
+public abstract class ActionAdapter implements ActionListener, MouseListener{
+	
+	public abstract void process(AWTEvent e);
+	
+	private void doProcess(final AWTEvent e){
+		new Thread(new Runnable() {
+			public void run() {
+				process(e);
+			}
+		}).start();
+	}
+	
+	public void actionPerformed(final ActionEvent e){
+		this.doProcess(e);
+	}
+	
+    public void mouseClicked(final MouseEvent e){
+    	this.doProcess(e);
+    }
+    
+    public void mousePressed(final MouseEvent e){
+		// Not Implemented
+    }
+    
+    public void mouseReleased(final MouseEvent e){
+		// Not Implemented
+    }
+    
+    public void mouseEntered(final MouseEvent e){
+		// Not Implemented
+    }
+    
+    public void mouseExited(final MouseEvent e){
+		// Not Implemented
+    }
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionDialog.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionDialog.java
new file mode 100644
index 0000000..80cca21
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionDialog.java
@@ -0,0 +1,72 @@
+package org.herac.tuxguitar.app.actions;
+
+import java.awt.AWTEvent;
+import java.awt.GridBagConstraints;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.JFrame;
+
+public abstract class ActionDialog extends Action{
+	
+	public static final int DEFAULT_MARGIN = 2;
+	
+	public static final int BUTTON_WIDTH = 80;
+	public static final int BUTTON_HEIGHT = 35;
+	
+	public static final int H_GAP = 5;
+	public static final int V_GAP = 5;
+	
+	private JFrame dialog;
+	
+	public ActionDialog(String name, int flags) {
+		super(name, flags);
+	}
+	
+	protected abstract void openDialog();
+	
+	protected int execute(AWTEvent e){
+		if( this.dialog != null && this.dialog.isDisplayable() ){
+			this.dialog.toFront();
+		}else{
+			this.openDialog();
+		}
+		return 0;
+	}
+	
+	protected JFrame createDialog(){
+		this.dialog = new JFrame();
+		this.dialog.setDefaultCloseOperation( JFrame.DISPOSE_ON_CLOSE );
+		this.dialog.addWindowListener( new WindowAdapter() {
+			public void windowOpened(WindowEvent e) {
+				e.getWindow().toFront();
+			}
+		} );
+		return this.dialog;
+	}
+	
+	protected GridBagConstraints getConstraints(int column, int row, float weightx, float weighty, int fill ){
+		return getConstraints(column, row, weightx, weighty, fill, 1);
+	}
+	
+	protected GridBagConstraints getConstraints(int column, int row, float weightx, float weighty, int fill , int colspan){
+		return getConstraints(column, row, weightx, weighty, fill, colspan, 1);
+	}
+	
+	protected GridBagConstraints getConstraints(int column, int row, float weightx, float weighty, int fill , int colspan, int rowspan){
+		return getConstraints(column, row, weightx, weighty, fill, colspan, rowspan, DEFAULT_MARGIN);
+	}
+	
+	protected GridBagConstraints getConstraints(int column, int row, float weightx, float weighty, int fill , int colspan, int rowspan, int margin){
+		GridBagConstraints c = new GridBagConstraints();
+		c.fill = fill;
+		c.weightx = weightx;
+		c.weighty = weighty;
+		c.gridx = column;
+		c.gridy = row;
+		c.gridwidth = colspan;
+		c.gridheight = rowspan;
+		c.insets.set(margin, margin, margin, margin);
+		return c;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionLock.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionLock.java
new file mode 100644
index 0000000..e286c05
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionLock.java
@@ -0,0 +1,30 @@
+package org.herac.tuxguitar.app.actions;
+
+public class ActionLock {
+	
+	private static boolean working;
+	
+	public synchronized static boolean isLocked(){
+		return working;
+	}
+	
+	public synchronized static void lock(){
+		working = true;
+	}
+	
+	public synchronized static void unlock(){
+		working = false;
+	}
+	
+	public synchronized static void waitFor(){
+		try {
+			while(isLocked()){
+				synchronized( ActionLock.class ) {
+					ActionLock.class.wait(1);
+				}
+			}
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionManager.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionManager.java
new file mode 100644
index 0000000..144a601
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/ActionManager.java
@@ -0,0 +1,92 @@
+/*
+ * Created on 18-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.herac.tuxguitar.app.actions.layout.SetChordDiagramEnabledAction;
+import org.herac.tuxguitar.app.actions.layout.SetChordNameEnabledAction;
+import org.herac.tuxguitar.app.actions.layout.SetScoreEnabledAction;
+import org.herac.tuxguitar.app.actions.layout.SetTablatureEnabledAction;
+import org.herac.tuxguitar.app.actions.measure.GoNextMeasureAction;
+import org.herac.tuxguitar.app.actions.measure.GoPreviousMeasureAction;
+import org.herac.tuxguitar.app.actions.measure.SelectMeasureAction;
+import org.herac.tuxguitar.app.actions.settings.SettingsAction;
+import org.herac.tuxguitar.app.actions.track.SelectTrackAction;
+import org.herac.tuxguitar.app.actions.transport.TransportMixerAction;
+import org.herac.tuxguitar.app.actions.transport.TransportPlayAction;
+import org.herac.tuxguitar.app.actions.transport.TransportSetupAction;
+import org.herac.tuxguitar.app.actions.transport.TransportStopAction;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ActionManager {
+	
+	private Map actions;
+	
+	public ActionManager(){
+		this.actions = new HashMap();
+		this.init();
+	}
+	
+	public void init(){
+		//layout actions
+		addAction(new SetScoreEnabledAction());
+		addAction(new SetTablatureEnabledAction());
+		addAction(new SetChordNameEnabledAction());
+		addAction(new SetChordDiagramEnabledAction());
+		
+		//track actions	
+		addAction(new SelectTrackAction());
+		
+		//measure actions
+		addAction(new SelectMeasureAction());
+		addAction(new GoNextMeasureAction());
+		addAction(new GoPreviousMeasureAction());
+		
+		//player actions
+		addAction(new TransportPlayAction());
+		addAction(new TransportStopAction());
+		addAction(new TransportMixerAction());
+		addAction(new TransportSetupAction());
+		
+		//Settings
+		addAction(new SettingsAction());
+	}
+	
+	public void addAction(Action action){
+		this.actions.put(action.getName(),action);
+	}
+	
+	public void removeAction(String name){
+		this.actions.remove(name);
+	}
+	
+	public Action getAction(String name){
+		return (Action)this.actions.get(name);
+	}
+	
+	public List getAvailableKeyBindingActions(){
+		List availableKeyBindingActions = new ArrayList();
+		Iterator it = this.actions.keySet().iterator();
+		while(it.hasNext()){
+			String actionName = (String)it.next();
+			if(getAction(actionName).isKeyBindingAvailable()){
+				availableKeyBindingActions.add(actionName);
+			}
+		}
+		return availableKeyBindingActions;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetChordDiagramEnabledAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetChordDiagramEnabledAction.java
new file mode 100644
index 0000000..6f03689
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetChordDiagramEnabledAction.java
@@ -0,0 +1,33 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.layout;
+
+import java.awt.AWTEvent;
+
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetChordDiagramEnabledAction extends Action{
+	public static final String NAME = "action.view.layout-set-chord-diagram-enabled";
+	
+	public SetChordDiagramEnabledAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected int execute(AWTEvent e){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_CHORD_DIAGRAM) );
+		updateTablature();
+		return 0;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetChordNameEnabledAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetChordNameEnabledAction.java
new file mode 100644
index 0000000..ffcaf8a
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetChordNameEnabledAction.java
@@ -0,0 +1,33 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.layout;
+
+import java.awt.AWTEvent;
+
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetChordNameEnabledAction extends Action{
+	public static final String NAME = "action.view.layout-set-chord-name-enabled";
+	
+	public SetChordNameEnabledAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected int execute(AWTEvent e){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_CHORD_NAME ) );
+		updateTablature();
+		return 0;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetScoreEnabledAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetScoreEnabledAction.java
new file mode 100644
index 0000000..77fd5f1
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetScoreEnabledAction.java
@@ -0,0 +1,36 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.layout;
+
+import java.awt.AWTEvent;
+
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetScoreEnabledAction extends Action{
+	public static final String NAME = "action.view.layout-set-score-enabled";
+	
+	public SetScoreEnabledAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected int execute(AWTEvent e){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_SCORE ) );
+		if((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) == 0 && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+			layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_TABLATURE) );
+		}
+		updateTablature();
+		return 0;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetTablatureEnabledAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetTablatureEnabledAction.java
new file mode 100644
index 0000000..645d9fa
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/layout/SetTablatureEnabledAction.java
@@ -0,0 +1,36 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.layout;
+
+import java.awt.AWTEvent;
+
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetTablatureEnabledAction extends Action{
+	public static final String NAME = "action.view.layout-set-tablature-enabled";
+	
+	public SetTablatureEnabledAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected int execute(AWTEvent e){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_TABLATURE ) );
+		if((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) == 0 && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+			layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_SCORE ) );
+		}
+		updateTablature();
+		return 0;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/measure/GoNextMeasureAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/measure/GoNextMeasureAction.java
new file mode 100644
index 0000000..ef89c87
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/measure/GoNextMeasureAction.java
@@ -0,0 +1,44 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.measure;
+
+import java.awt.AWTEvent;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoNextMeasureAction extends Action{
+	public static final String NAME = "action.measure.go-next";
+	
+	public GoNextMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected int execute(AWTEvent e){
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			TuxGuitar.instance().getTransport().gotoNext();
+		}
+		else{
+			Caret caret = getEditor().getTablature().getCaret();
+			TGTrackImpl track = caret.getTrack();
+			TGMeasure measure = getSongManager().getTrackManager().getNextMeasure(caret.getMeasure());
+			if(track != null && measure != null){
+				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
+			}
+		}
+		return 0;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/measure/GoPreviousMeasureAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/measure/GoPreviousMeasureAction.java
new file mode 100644
index 0000000..f848335
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/measure/GoPreviousMeasureAction.java
@@ -0,0 +1,44 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.measure;
+
+import java.awt.AWTEvent;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoPreviousMeasureAction extends Action{
+	public static final String NAME = "action.measure.go-previous";
+	
+	public GoPreviousMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected int execute(AWTEvent e){
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			TuxGuitar.instance().getTransport().gotoPrevious();
+		}
+		else{
+			Caret caret = getEditor().getTablature().getCaret();
+			TGTrackImpl track = caret.getTrack();
+			TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getPrevMeasure(caret.getMeasure());
+			if(track != null && measure != null){
+				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
+			}
+		}
+		return 0;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/measure/SelectMeasureAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/measure/SelectMeasureAction.java
new file mode 100644
index 0000000..472e8ed
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/measure/SelectMeasureAction.java
@@ -0,0 +1,78 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.measure;
+
+import java.awt.AWTEvent;
+import java.awt.Point;
+import java.awt.event.MouseEvent;
+import java.util.Iterator;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.app.editors.tab.Tablature;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.models.TGBeat;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SelectMeasureAction extends Action{
+	public static final String NAME = "action.measure.select";
+	
+	public SelectMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK );
+	}
+	
+	protected int execute(AWTEvent e){
+		if( e instanceof MouseEvent){
+			Point p = ((MouseEvent)e).getPoint();
+			Tablature tablature = getEditor().getTablature();
+			if(p.x >= 0 && p.y >= 0){
+				TGTrackImpl track = tablature.getCaret().getTrack();
+				if (track != null) {
+					TGMeasureImpl measure = findSelectedMeasure(track, p.x, p.y);
+					if (measure != null) {
+						TGBeat beat = tablature.getSongManager().getMeasureManager().getFirstBeat( measure.getBeats() );
+						if( beat != null ){
+							tablature.getCaret().moveTo(track, measure, beat,  1);
+							TuxGuitar.instance().setFocus();
+							return AUTO_UPDATE;
+						}
+					}
+				}
+			}
+		}
+		return 0;
+	}
+	
+	public TGMeasureImpl findSelectedMeasure(TGTrackImpl track,int x,int y){
+		Tablature tablature = getEditor().getTablature();
+		TGMeasureImpl measure = null;
+		int minorDistance = 0;
+		
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasureImpl m = (TGMeasureImpl)it.next();
+			if(!m.isOutOfBounds() && m.getTs() != null){
+				boolean isAtX = (x >= m.getPosX() && x <= m.getPosX() + m.getWidth(tablature.getViewLayout()) + m.getSpacing());
+				if(isAtX){
+					int measureHeight = m.getTs().getSize();
+					int distanceY = Math.min(Math.abs(y - (m.getPosY())),Math.abs(y - ( m.getPosY() + measureHeight - 10)));
+					if(measure == null || distanceY < minorDistance){
+						measure = m;
+						minorDistance = distanceY;
+					}
+				}
+			}
+		}
+		return measure;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/settings/SettingsAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/settings/SettingsAction.java
new file mode 100644
index 0000000..721a6c4
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/settings/SettingsAction.java
@@ -0,0 +1,98 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.settings;
+
+import java.awt.AWTEvent;
+
+import javax.swing.JButton;
+import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JMenu;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.app.actions.layout.SetChordDiagramEnabledAction;
+import org.herac.tuxguitar.app.actions.layout.SetChordNameEnabledAction;
+import org.herac.tuxguitar.app.actions.layout.SetScoreEnabledAction;
+import org.herac.tuxguitar.app.actions.layout.SetTablatureEnabledAction;
+import org.herac.tuxguitar.app.actions.transport.TransportMixerAction;
+import org.herac.tuxguitar.app.actions.transport.TransportSetupAction;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SettingsAction extends Action{
+	public static final String NAME = "action.settings.settings";
+	
+	public SettingsAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK );
+	}
+	
+	protected int execute(AWTEvent e){
+		JButton button = (JButton) e.getSource();
+		JPopupMenu menu = new JPopupMenu();
+		
+		this.addViewMenu( menu );
+		this.addSoundMenu( menu );
+		
+		menu.show(button, 0, button.getHeight() );
+		
+		return 0;
+	}
+	
+	protected void addViewMenu( JPopupMenu parent ){
+		int style = getEditor().getTablature().getViewLayout().getStyle();
+		
+		JMenu showMenu = new JMenu("View");
+		showMenu.setFont( TGConfig.FONT_WIDGETS );
+		
+		JMenuItem showScore = new JCheckBoxMenuItem("Show Score", ( style & TGLayout.DISPLAY_SCORE) != 0 );
+		showScore.addActionListener( TuxGuitar.instance().getAction( SetScoreEnabledAction.NAME ) );
+		showScore.setFont( TGConfig.FONT_WIDGETS );
+		showMenu.add( showScore );
+		
+		JMenuItem showTablature = new JCheckBoxMenuItem("Show Tablature", ( style & TGLayout.DISPLAY_TABLATURE) != 0 );
+		showTablature.addActionListener( TuxGuitar.instance().getAction( SetTablatureEnabledAction.NAME ) );
+		showTablature.setFont( TGConfig.FONT_WIDGETS );
+		showMenu.add( showTablature );
+		
+		JMenuItem showChordName = new JCheckBoxMenuItem("Show Chord Names", ( style & TGLayout.DISPLAY_CHORD_NAME) != 0 );
+		showChordName.addActionListener( TuxGuitar.instance().getAction( SetChordNameEnabledAction.NAME ) );
+		showChordName.setFont( TGConfig.FONT_WIDGETS );
+		showMenu.add( showChordName );
+		
+		JMenuItem showChordDiagram = new JCheckBoxMenuItem("Show Chord Diagrams", ( style & TGLayout.DISPLAY_CHORD_DIAGRAM) != 0 );
+		showChordDiagram.addActionListener( TuxGuitar.instance().getAction( SetChordDiagramEnabledAction.NAME ) );
+		showChordDiagram.setFont( TGConfig.FONT_WIDGETS );
+		showMenu.add( showChordDiagram );
+		
+		parent.add( showMenu );
+	}
+	
+	protected void addSoundMenu( JPopupMenu parent ){
+		JMenu soundMenu = new JMenu("Sound");
+		soundMenu.setFont( TGConfig.FONT_WIDGETS );
+		
+		JMenuItem soundMixer = new JMenuItem("Open Mixer");
+		soundMixer.addActionListener( TuxGuitar.instance().getAction( TransportMixerAction.NAME ) );
+		soundMixer.setFont( TGConfig.FONT_WIDGETS );
+		soundMenu.add( soundMixer );
+		
+		JMenuItem soundSetup = new JMenuItem("Sound Settings");
+		soundSetup.addActionListener( TuxGuitar.instance().getAction( TransportSetupAction.NAME ) );
+		soundSetup.setFont( TGConfig.FONT_WIDGETS );
+		soundMenu.add( soundSetup );
+		
+		parent.add( soundMenu );
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/track/SelectTrackAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/track/SelectTrackAction.java
new file mode 100644
index 0000000..6f7f3d1
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/track/SelectTrackAction.java
@@ -0,0 +1,59 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.track;
+
+import java.awt.AWTEvent;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.Iterator;
+
+import javax.swing.JButton;
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SelectTrackAction extends Action{
+	public static final String NAME = "action.track.select";
+	
+	public SelectTrackAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK );
+	}
+	
+	protected int execute(AWTEvent e){
+		final Caret caret = getEditor().getTablature().getCaret();
+		final JButton button = (JButton) e.getSource();
+		final JPopupMenu menu = new JPopupMenu();
+		Iterator it = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getSong().getTracks();
+		while( it.hasNext() ){
+			final TGTrack track = (TGTrack) it.next();
+			JMenuItem item = new JRadioButtonMenuItem( track.getName() , (track.getNumber() == caret.getTrack().getNumber()) );
+			item.setFont( TGConfig.FONT_WIDGETS );
+			item.addActionListener( new ActionListener() {
+				public void actionPerformed(ActionEvent e) {
+					caret.update( track.getNumber() );
+					TuxGuitar.instance().updateCache( true );
+				}
+			});
+			menu.add( item );
+		}
+		menu.show(button, 0, button.getHeight() );
+		
+		return 0;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportMixerAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportMixerAction.java
new file mode 100644
index 0000000..911603e
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportMixerAction.java
@@ -0,0 +1,400 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.transport;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.WindowAdapter;
+import java.awt.event.WindowEvent;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JCheckBox;
+import javax.swing.JFrame;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JSlider;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.ActionDialog;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TransportMixerAction extends ActionDialog {
+	public static final String NAME = "action.transport.mixer";
+	
+	public static final int MUTE = 0x01;
+	public static final int SOLO = 0x02;
+	public static final int VOLUME = 0x04;
+	public static final int BALANCE = 0x08;
+	public static final int CHANGE_ALL = (MUTE | SOLO | VOLUME | BALANCE );
+	
+	private boolean locked;
+	
+	public TransportMixerAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE );
+	}
+	
+	public void setLocked( boolean locked){
+		this.locked = locked;
+	}
+	
+	public boolean isLocked(){
+		return this.locked;
+	}
+	
+	protected void openDialog(){
+		final JFrame dialog = createDialog();
+		
+		final TrackPanel[] trackPanels = new TrackPanel[getSongManager().getSong().countTracks()];
+		for( int i = 0 ; i < trackPanels.length ; i ++ ){
+			trackPanels[i] = new TrackPanel(getSongManager().getSong().getTrack(i));
+			trackPanels[i].init();
+			
+			ChangeVolumeListener volumeListener = new ChangeVolumeListener(trackPanels[i],trackPanels);
+			ChangeBalanceListener balanceListener = new ChangeBalanceListener(trackPanels[i],trackPanels);
+			
+			trackPanels[i].getTrackVolume().addChangeListener(volumeListener);
+			trackPanels[i].getTrackBalance().addChangeListener(balanceListener);
+			trackPanels[i].getTrackSolo().addActionListener(new ChangeSoloListener(trackPanels[i],trackPanels));
+			trackPanels[i].getTrackMute().addActionListener(new ChangeMuteListener(trackPanels[i],trackPanels));
+		}
+		
+		//---Player things--------------------------------------
+		final JSlider playerVolume = new JSlider(JSlider.VERTICAL);
+		playerVolume.setMinimum(1);
+		playerVolume.setMaximum(10);
+		playerVolume.setPaintTicks(false);
+		playerVolume.setPaintLabels(false);
+		playerVolume.setValue( TuxGuitar.instance().getPlayer().getVolume() );
+		playerVolume.setAlignmentX( JSlider.CENTER_ALIGNMENT );
+		
+		JPanel playerVolumePanel = new JPanel();
+		playerVolumePanel.setLayout(new BoxLayout(playerVolumePanel,BoxLayout.X_AXIS));
+		playerVolumePanel.add( Box.createHorizontalGlue());
+		playerVolumePanel.add( playerVolume );
+		playerVolumePanel.add( Box.createHorizontalGlue());
+		
+		JLabel playerVolumeLabel = new JLabel("Gain:");
+		playerVolumeLabel.setFont( TGConfig.FONT_WIDGETS );
+		
+		final JLabel playerVolumeValue = new JLabel(Integer.toString(TuxGuitar.instance().getPlayer().getVolume()));
+		playerVolumeValue.setFont( TGConfig.FONT_WIDGETS );
+		playerVolumeValue.setBackground(Color.WHITE);
+		
+		JPanel playerVolumeValuePanel = new JPanel();
+		playerVolumeValuePanel.setLayout(new GridBagLayout());
+		playerVolumeValuePanel.setBorder(BorderFactory.createEtchedBorder());
+		playerVolumeValuePanel.add(playerVolumeLabel, getConstraints(0,0,0f,0f,GridBagConstraints.BOTH,1,1,4));
+		playerVolumeValuePanel.add(playerVolumeValue , getConstraints(1,0,1f,0f,GridBagConstraints.BOTH,1,1,4));
+		
+		JPanel playerPanel = new JPanel();
+		playerPanel.setLayout(new BorderLayout());
+		playerPanel.setBorder(BorderFactory.createEtchedBorder());
+		playerPanel.add( playerVolumePanel , BorderLayout.CENTER);
+		playerPanel.add( playerVolumeValuePanel , BorderLayout.SOUTH);
+		
+		playerVolume.addChangeListener(new ChangeListener() {
+			public void stateChanged(ChangeEvent e) {
+				int value = playerVolume.getValue();
+				playerVolumeValue.setText( Integer.toString( value ) );
+				TuxGuitar.instance().getPlayer().setVolume( value );
+			}
+		});
+		
+		//-----------------------------------------
+		JPanel container = new JPanel();
+		container.setLayout(new GridLayout());
+		for( int i = 0 ; i < trackPanels.length ; i ++ ){
+			container.add( trackPanels[i] );
+		}
+		container.add(playerPanel);
+		container.setBorder(BorderFactory.createEtchedBorder());
+		
+		dialog.addWindowListener( new WindowAdapter() {
+			public void windowClosed(WindowEvent e) {
+				TuxGuitar.instance().updateCache( true );
+			}
+		} );
+		dialog.setTitle("Mixer");
+		dialog.getContentPane().setLayout(new GridLayout());
+		dialog.getContentPane().add(container);
+		dialog.pack();
+		dialog.setLocationRelativeTo(TuxGuitar.instance().getShell());
+		dialog.setResizable(false);
+		dialog.setVisible(true);
+	}
+	
+	
+	public void fireChannelChanges(TrackPanel[] trackPanels, int channelId){
+		TGChannel channel = getSongManager().getChannel(channelId);
+		if( channel != null ){
+			this.fireChannelChanges(trackPanels, channel);
+		}
+	}
+	
+	public void fireChannelChanges(TrackPanel[] trackPanels, TGChannel channel){
+		if (TuxGuitar.instance().getPlayer().isRunning()) {
+			TuxGuitar.instance().getPlayer().updateControllers();
+		}
+	}
+	
+	public void fireTrackChanges(TrackPanel[] trackPanels){
+		if (TuxGuitar.instance().getPlayer().isRunning()) {
+			TuxGuitar.instance().getPlayer().updateTracks();
+		}
+	}
+	
+	protected void xxfireUpdate(TrackPanel[] trackPanels, int type){
+		for(int i = 0 ; i < trackPanels.length ; i ++){
+			xxfireUpdate(trackPanels[i], type);
+		}
+	}
+	
+	private void xxfireUpdate(TrackPanel track, int type){
+		TGChannel channel = getSongManager().getChannel(track.getTrack().getChannelId());
+		if( channel != null ){
+			if((type & SOLO) != 0 || (type & MUTE) != 0){
+				track.getTrackSolo().setSelected( track.getTrack().isSolo() );
+				track.getTrackMute().setSelected( track.getTrack().isMute() );
+			}
+			if((type & VOLUME) != 0){
+				track.getTrackVolume().setValue( channel.getVolume() );
+				track.getTrackVolumeValue().setText( Integer.toString( channel.getVolume() ) );
+			}
+			if((type & BALANCE) != 0){
+				track.getTrackBalance().setValue( channel.getBalance() );
+			}
+		}
+	}
+	
+	private class TrackPanel extends JPanel{
+		
+		private static final long serialVersionUID = 3290312295563628800L;
+
+		private TGTrack track;
+		
+		private JCheckBox trackSolo;
+		private JCheckBox trackMute;
+		
+		private JSlider trackBalance;
+		private JSlider trackVolume;
+		private JLabel trackVolumeValue;
+		
+		public TrackPanel(TGTrack track){
+			this.track = track;
+		}
+		
+		public void init(){
+			this.trackSolo = new JCheckBox("Solo");
+			this.trackSolo.setFont( TGConfig.FONT_WIDGETS );
+			this.trackSolo.setSelected( this.track.isSolo() );
+			
+			this.trackMute = new JCheckBox("Mute");
+			this.trackMute.setFont( TGConfig.FONT_WIDGETS );
+			this.trackMute.setSelected( this.track.isMute() );
+			
+			this.trackBalance = new JSlider(JSlider.HORIZONTAL);
+			this.trackBalance.setMinimum(0);
+			this.trackBalance.setMaximum(127);
+			this.trackBalance.setExtent(1);
+			this.trackBalance.setPaintTicks(false);
+			this.trackBalance.setPaintLabels(false);
+			
+			JPanel northPanel = new JPanel();
+			northPanel.setLayout(new GridBagLayout());
+			northPanel.add( this.trackSolo , getConstraints(0,0,1f,0f,GridBagConstraints.BOTH));
+			northPanel.add( this.trackMute , getConstraints(0,1,1f,0f,GridBagConstraints.BOTH));
+			northPanel.add( this.trackBalance , getConstraints(0,2,1f,0f,GridBagConstraints.BOTH));
+			
+			this.trackVolume = new JSlider(JSlider.VERTICAL);
+			this.trackVolume.setMinimum(0);
+			this.trackVolume.setMaximum(127);
+			this.trackVolume.setExtent(1);
+			this.trackVolume.setPaintTicks(false);
+			this.trackVolume.setPaintLabels(false);
+			
+			JPanel trackVolumePanel = new JPanel();
+			trackVolumePanel.setLayout(new BoxLayout(trackVolumePanel,BoxLayout.X_AXIS));
+			trackVolumePanel.add( Box.createHorizontalGlue());
+			trackVolumePanel.add( this.trackVolume );
+			trackVolumePanel.add( Box.createHorizontalGlue());
+			
+			JLabel trackVolumeLabel = new JLabel("Volume:");
+			trackVolumeLabel.setFont( TGConfig.FONT_WIDGETS );
+			
+			this.trackVolumeValue = new JLabel();
+			this.trackVolumeValue.setFont( TGConfig.FONT_WIDGETS );
+			this.trackVolumeValue.setBackground(Color.WHITE);
+			
+			JPanel trackVolumeValuePanel = new JPanel();
+			trackVolumeValuePanel.setLayout(new GridBagLayout());
+			trackVolumeValuePanel.setBorder(BorderFactory.createEtchedBorder());
+			trackVolumeValuePanel.add(trackVolumeLabel, getConstraints(0,0,0f,0f,GridBagConstraints.BOTH,1,1,4));
+			trackVolumeValuePanel.add(this.trackVolumeValue , getConstraints(1,0,1f,0f,GridBagConstraints.BOTH,1,1,4));
+			
+			this.setLayout(new BorderLayout());
+			this.setBorder(BorderFactory.createEtchedBorder());
+			this.setPreferredSize(new Dimension(100,300));
+			this.add(northPanel, BorderLayout.NORTH);
+			this.add(trackVolumePanel, BorderLayout.CENTER);
+			this.add(trackVolumeValuePanel, BorderLayout.SOUTH);
+			
+			TGChannel channel = getSongManager().getChannel(this.track.getChannelId());
+			if( channel != null ){
+				this.trackVolume.setValue( channel.getVolume() );
+				this.trackVolumeValue.setText( Integer.toString( channel.getVolume() ) );
+				this.trackBalance.setValue( channel.getBalance() );
+			}
+		}
+		
+		public TGTrack getTrack(){
+			return this.track;
+		}
+		
+		public JCheckBox getTrackSolo() {
+			return this.trackSolo;
+		}
+
+		public JCheckBox getTrackMute() {
+			return this.trackMute;
+		}
+
+		public JSlider getTrackBalance() {
+			return this.trackBalance;
+		}
+
+		public JSlider getTrackVolume() {
+			return this.trackVolume;
+		}
+
+		public JLabel getTrackVolumeValue() {
+			return this.trackVolumeValue;
+		}
+	}
+	
+	private class ChangeVolumeListener implements ChangeListener{
+		
+		private TrackPanel track;
+		private TrackPanel[] tracks;
+		
+		public ChangeVolumeListener(TrackPanel track, TrackPanel[] tracks){
+			this.track = track;
+			this.tracks = tracks;
+		}
+		
+		public void stateChanged(ChangeEvent e) {
+			if(!isLocked()){
+				setLocked(true);
+				
+				int value = this.track.getTrackVolume().getValue();
+				TGChannel channel = getSongManager().getChannel(this.track.getTrack().getChannelId());
+				if( channel != null ){
+					if(value != channel.getVolume()){
+						channel.setVolume((short)value );
+						fireChannelChanges(this.tracks, channel);
+					}
+				}
+				setLocked(false);
+			}
+		}
+	}
+	
+	private class ChangeBalanceListener implements ChangeListener{
+		
+		private TrackPanel track;
+		private TrackPanel[] tracks;
+		
+		public ChangeBalanceListener(TrackPanel track, TrackPanel[] tracks){
+			this.track = track;
+			this.tracks = tracks;
+		}
+		
+		public void stateChanged(ChangeEvent e) {
+			if(!isLocked()){
+				setLocked(true);
+				
+				int value = this.track.getTrackBalance().getValue();
+				TGChannel channel = getSongManager().getChannel(this.track.getTrack().getChannelId());
+				if( channel != null ){
+					if(value != channel.getBalance()){
+						channel.setBalance((short)value );
+						fireChannelChanges(this.tracks, channel);
+					}
+				}
+				setLocked(false);
+			}
+		}
+	}
+	
+	private class ChangeSoloListener implements ActionListener{
+		
+		private TrackPanel track;
+		private TrackPanel[] tracks;
+		
+		public ChangeSoloListener(TrackPanel track, TrackPanel[] tracks){
+			this.track = track;
+			this.tracks = tracks;
+		}
+		
+		public void actionPerformed(ActionEvent e) {
+			if(!isLocked()){
+				setLocked(true);
+				
+				TGTrack track = this.track.getTrack();
+				track.setSolo(this.track.getTrackSolo().isSelected());
+				if( track.isSolo() ){
+					track.setMute(false);
+				}
+				fireTrackChanges(this.tracks);
+				
+				setLocked(false);
+			}
+		}
+	}
+	
+	private class ChangeMuteListener implements ActionListener{
+		
+		private TrackPanel track;
+		private TrackPanel[] tracks;
+		
+		public ChangeMuteListener(TrackPanel track, TrackPanel[] tracks){
+			this.track = track;
+			this.tracks = tracks;
+		}
+		
+		public void actionPerformed(ActionEvent e) {
+			if(!isLocked()){
+				setLocked(true);
+				
+				TGTrack track = this.track.getTrack();
+				track.setMute(this.track.getTrackMute().isSelected());
+				if( track.isMute() ){
+					track.setSolo(false);
+				}
+				fireTrackChanges(this.tracks);
+				
+				setLocked(false);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportPlayAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportPlayAction.java
new file mode 100644
index 0000000..eb84655
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportPlayAction.java
@@ -0,0 +1,77 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.transport;
+
+import java.awt.AWTEvent;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.app.util.MidiTickUtil;
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TransportPlayAction extends Action {
+	public static final String NAME = "action.transport.play";
+	
+	public TransportPlayAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected int execute(AWTEvent e){
+		MidiPlayer player = TuxGuitar.instance().getPlayer();
+		if(!player.isRunning()){
+			try{
+				updateTransportPosition();
+				player.getMode().reset();
+				player.play();
+				playThread();
+			}catch(MidiPlayerException exception){
+				exception.printStackTrace();
+			}
+		}else{
+			player.pause();
+			updateCaretPosition();
+		}
+		return 0;
+	}
+	
+	protected void playThread() {
+		new Thread(new Runnable() {
+			public void run() {
+				try {
+					while (TuxGuitar.instance().getPlayer().isRunning()) {
+						if(TuxGuitar.instance().getPlayer().isRunning()){
+							synchronized( TuxGuitar.instance() ){
+								TuxGuitar.instance().redrawPayingMode();
+								TuxGuitar.instance().wait(25);
+							}
+						}
+					}
+					updateCaretPosition();
+				} catch (Throwable throwable) {
+					throwable.printStackTrace();
+				}
+			}
+		}).start();
+	}
+	
+	protected void updateCaretPosition(){
+		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition()));
+		TuxGuitar.instance().getTransport().gotoMeasure(header, true);
+	}
+	
+	protected void updateTransportPosition(){
+		TGMeasureHeader header = getEditor().getTablature().getCaret().getMeasure().getHeader();
+		TuxGuitar.instance().getTransport().gotoMeasure(header, false);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportSetupAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportSetupAction.java
new file mode 100644
index 0000000..a585f00
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportSetupAction.java
@@ -0,0 +1,123 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.transport;
+
+import java.awt.Dimension;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.List;
+
+import javax.swing.BorderFactory;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JFrame;
+import javax.swing.JList;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.border.TitledBorder;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.ActionDialog;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+import org.herac.tuxguitar.player.base.MidiOutputPort;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TransportSetupAction extends ActionDialog{
+	public static final String NAME = "action.transport.setup";
+	
+	public TransportSetupAction() {
+		super( NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE );
+	}
+	
+	protected void openDialog(){
+		final List ports = TuxGuitar.instance().getPlayer().listOutputPorts();
+		final String[] listData = new String[ ports.size() ];
+		
+		int selectedIndex = -1;
+		for( int i = 0 ; i < ports.size() ; i ++ ){
+			MidiOutputPort port = (MidiOutputPort)ports.get( i );
+			listData[ i ] = port.getName();
+			if(TuxGuitar.instance().getPlayer().isOutputPortOpen( port.getKey() )){
+				selectedIndex = i;
+			}
+		}
+		
+		final JFrame dialog = createDialog();
+		
+		final JList list = new JList();
+		list.setFont( TGConfig.FONT_WIDGETS );
+		list.setListData(listData);
+		if(selectedIndex >= 0){
+			list.setSelectedIndex(selectedIndex);
+		}
+		
+		JPanel panel = new JPanel();
+		panel.setLayout(new BoxLayout(panel,BoxLayout.Y_AXIS));
+		panel.setBorder(BorderFactory.createTitledBorder(null, "MIDI Port", TitledBorder.LEADING, TitledBorder.TOP , TGConfig.FONT_WIDGETS));
+		panel.add(new JScrollPane(list));
+		
+		//-----------------------------------------
+		JButton buttonOk = new JButton("Ok");
+		buttonOk.setFont( TGConfig.FONT_WIDGETS );
+		buttonOk.setPreferredSize(new Dimension(BUTTON_WIDTH,BUTTON_HEIGHT));
+		buttonOk.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				int index = list.getSelectedIndex();
+				final MidiOutputPort port = (MidiOutputPort)ports.get( index );
+				// Load the new MIDI Port
+				new Thread(new Runnable() {
+					public void run() {
+						TuxGuitar.instance().getPlayer().reset();
+						TuxGuitar.instance().getPlayer().loadOutputPort(port);
+						TuxGuitar.instance().updateCache( true );
+					}
+				}).start();
+				
+				dialog.dispose();
+			}
+		});
+		
+		JButton buttonCancel = new JButton("Cancel");
+		buttonCancel.setFont( TGConfig.FONT_WIDGETS );
+		buttonCancel.setPreferredSize(new Dimension(BUTTON_WIDTH,BUTTON_HEIGHT));
+		buttonCancel.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				dialog.dispose();
+				TuxGuitar.instance().updateCache( true );
+			}
+		});
+		
+		JPanel buttons = new JPanel();
+		buttons.setLayout(new BoxLayout(buttons, BoxLayout.LINE_AXIS));
+		buttons.add(Box.createHorizontalGlue());
+		buttons.add(buttonOk);
+		buttons.add(buttonCancel);
+		
+		//-----------------------------------------
+		JPanel container = new JPanel();
+		container.setLayout(new GridBagLayout());
+		container.add( panel, getConstraints(0,0,1f,1f,GridBagConstraints.BOTH));
+		container.add( buttons, getConstraints(0,1,1f,0f,GridBagConstraints.BOTH));
+		
+		dialog.setTitle("MIDI Setup");
+		dialog.getContentPane().setLayout(new GridBagLayout());
+		dialog.getContentPane().add(container, getConstraints(0,0,1f,1f,GridBagConstraints.BOTH));
+		dialog.setMinimumSize(new Dimension(350,0));
+		dialog.pack();
+		dialog.setLocationRelativeTo(TuxGuitar.instance().getShell());
+		dialog.setResizable(false);
+		dialog.setVisible(true);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportStopAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportStopAction.java
new file mode 100644
index 0000000..597ca9e
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/actions/transport/TransportStopAction.java
@@ -0,0 +1,39 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.actions.transport;
+
+import java.awt.AWTEvent;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.app.util.MidiTickUtil;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TransportStopAction extends Action{
+	public static final String NAME = "action.transport.stop";
+	
+	public TransportStopAction() {
+		super( NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected int execute(AWTEvent e){
+		TuxGuitar.instance().getPlayer().reset();
+		updateCaretPosition();
+		return 0;
+	}
+	
+	protected void updateCaretPosition(){
+		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition()));
+		TuxGuitar.instance().getTransport().gotoMeasure(header, true);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/EditorCache.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/EditorCache.java
new file mode 100644
index 0000000..d359513
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/EditorCache.java
@@ -0,0 +1,144 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.util.MidiTickUtil;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class EditorCache {
+	
+	//Modo edition
+	private boolean editUpdate;
+	private TGBeatImpl editBeat;
+	
+	//Modo reproduccion
+	private int playTrack;
+	private long playTick;
+	private long playStart;
+	private long playBeatEnd;
+	private boolean playChanges;
+	private boolean playUpdate;
+	private TGBeatImpl playBeat;
+	private TGMeasureImpl playMeasure;
+	
+	public EditorCache(){
+		this.reset();
+	}
+	
+	public void reset(){
+		this.resetEditMode();
+		this.resetPlayMode();
+	}
+	
+	private void resetEditMode(){
+		this.editBeat = null;
+		this.editUpdate = false;
+	}
+	
+	private void resetPlayMode(){
+		this.playBeat = null;
+		this.playMeasure = null;
+		this.playUpdate = false;
+		this.playChanges = false;
+		this.playTrack =  0;
+		this.playTick = 0;
+		this.playStart = 0;
+		this.playBeatEnd = 0;
+	}
+	
+	public void updateEditMode(){
+		this.editUpdate = true;
+		this.resetPlayMode();
+		this.getEditBeat();
+	}
+	
+	public void updatePlayMode(){
+		this.playUpdate = true;
+		this.resetEditMode();
+		this.getPlayBeat();
+	}
+	
+	public TGBeatImpl getEditBeat() {
+		if(this.editUpdate){
+			this.editBeat =  TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedBeat();
+			this.editUpdate = false;
+		}
+		return this.editBeat;
+	}
+	
+	public TGBeatImpl getPlayBeat(){
+		if(this.playUpdate){
+			this.playChanges = false;
+			
+			TGSongManager manager = TuxGuitar.instance().getSongManager();
+			if(TuxGuitar.instance().getPlayer().isRunning()){
+				Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+				TGTrack track = caret.getTrack();
+				
+				long tick = TuxGuitar.instance().getPlayer().getTickPosition();
+				long start = this.playStart + (tick - this.playTick);
+				if(this.playMeasure == null || start < this.playMeasure.getStart() || start > (this.playMeasure.getStart() + this.playMeasure.getLength())){
+					this.playMeasure = null;
+					start = MidiTickUtil.getStart(tick);
+				}
+				
+				if(this.playMeasure == null || this.playBeatEnd == 0 || start > this.playBeatEnd || start < this.playStart || track.getNumber() != this.playTrack){
+					this.playBeat = null;
+					this.playBeatEnd = 0;
+					this.playChanges = true;
+					
+					if(this.playMeasure == null || !this.playMeasure.hasTrack(track.getNumber())  || !isPlaying(this.playMeasure)){
+						this.playMeasure = (TGMeasureImpl)manager.getTrackManager().getMeasureAt(track,start);
+					}
+					if (this.playMeasure != null) {
+						this.playBeat = (TGBeatImpl)manager.getMeasureManager().getBeatIn(this.playMeasure, start);
+						if(this.playBeat != null){
+							TGBeat next = manager.getMeasureManager().getNextBeat(this.playMeasure.getBeats(), this.playBeat);
+							if( next != null ){
+								this.playBeatEnd = next.getStart();
+							}else{
+								TGDuration duration = manager.getMeasureManager().getMinimumDuration(this.playBeat);
+								this.playBeatEnd = (this.playBeat.getStart() + duration.getTime());
+							}
+						}
+					}
+				}
+				this.playTrack = track.getNumber();
+				this.playTick = tick;
+				this.playStart = start;
+			}
+			this.playUpdate = false;
+		}
+		return this.playBeat;
+	}
+	
+	public long getPlayTick(){
+		return this.playTick;
+	}
+	
+	public long getPlayStart(){
+		return this.playStart;
+	}
+	
+	public TGMeasureImpl getPlayMeasure(){
+		return this.playMeasure;
+	}
+	
+	public boolean shouldRedraw(){
+		return this.playChanges;
+	}
+	
+	public boolean isPlaying(TGMeasure measure){
+		return (TuxGuitar.instance().getPlayer().isRunning() && this.playMeasure != null && measure.equals(this.playMeasure));
+	}
+	
+	public boolean isPlaying(TGMeasure measure,TGBeat b){
+		return (isPlaying(measure) && this.playBeat != null && this.playBeat.getStart() == b.getStart());
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGColorImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGColorImpl.java
new file mode 100644
index 0000000..f22c8e3
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGColorImpl.java
@@ -0,0 +1,42 @@
+package org.herac.tuxguitar.app.editors;
+
+import java.awt.Color;
+
+import org.herac.tuxguitar.graphics.TGColor;
+
+public class TGColorImpl implements TGColor{
+	
+	private Color handle;
+	
+	public TGColorImpl( Color handle ){
+		this.handle = handle;
+	}
+	
+	public TGColorImpl(int red, int green, int blue ){
+		this( new Color(red,green,blue) );
+	}
+	
+	public Color getHandle(){
+		return this.handle;
+	}
+	
+	public int getRed() {
+		return this.handle.getRed();
+	}
+	
+	public int getGreen() {
+		return this.handle.getGreen();
+	}
+	
+	public int getBlue() {
+		return this.handle.getBlue();
+	}
+	
+	public boolean isDisposed(){
+		return (this.handle == null); 
+	}
+	
+	public void dispose(){
+		this.handle = null;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGFontImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGFontImpl.java
new file mode 100644
index 0000000..16cc1f8
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGFontImpl.java
@@ -0,0 +1,47 @@
+package org.herac.tuxguitar.app.editors;
+
+import java.awt.Font;
+
+import org.herac.tuxguitar.graphics.TGFont;
+
+public class TGFontImpl implements TGFont {
+	
+	private Font handle;
+	
+	public TGFontImpl( Font handle ){
+		this.handle = handle;
+	}
+	
+	public TGFontImpl(String name, int height, boolean bold, boolean italic){
+		this( new Font(name, ( (bold ? Font.BOLD : 0) | (italic ? Font.ITALIC : 0)) , height) );
+	}
+	
+	public Font getHandle(){
+		return this.handle;
+	}
+	
+	public String getName() {
+		return this.handle.getName();
+	}
+	
+	public int getHeight() {
+		return this.handle.getSize();
+	}
+	
+	public boolean isBold() {
+		return this.handle.isBold();
+	}
+	
+	public boolean isItalic() {
+		return this.handle.isItalic();
+	}
+	
+	public boolean isDisposed(){
+		return (this.handle == null); 
+	}
+	
+	public void dispose(){
+		this.handle = null;
+	}
+	
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGImageImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGImageImpl.java
new file mode 100644
index 0000000..e16936b
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGImageImpl.java
@@ -0,0 +1,64 @@
+package org.herac.tuxguitar.app.editors;
+
+import java.awt.Image;
+import java.awt.Toolkit;
+import java.awt.image.BufferedImage;
+import java.awt.image.FilteredImageSource;
+import java.awt.image.ImageFilter;
+import java.awt.image.RGBImageFilter;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGImageImpl implements TGImage {
+	
+	private Image handle;
+	
+	public TGImageImpl( Image handle ){
+		this.handle = handle;
+	}
+	
+	public TGImageImpl(int width , int height ){
+		this(new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB));
+	}
+	
+	public TGPainter createPainter() {
+		return new org.herac.tuxguitar.app.editors.TGPainterImpl(this.handle);
+	}
+	
+	public int getWidth() {
+		return this.handle.getWidth(null);
+	}
+	
+	public int getHeight() {
+		return this.handle.getHeight(null);
+	}
+	
+	public Image getHandle(){
+		return this.handle;
+	}
+	
+	public boolean isDisposed(){
+		return (this.handle == null); 
+	}
+	
+	public void dispose(){
+		this.handle = null;
+	}
+	
+	public void applyTransparency( final TGColor background ){
+		ImageFilter filter = new RGBImageFilter() {
+			public int markerRGB = (((TGColorImpl)background).getHandle().getRGB() | 0xFF000000);
+			
+			public final int filterRGB(int x, int y, int rgb) {
+				if ( ( rgb | 0xFF000000 ) == markerRGB ) {
+					return 0x00FFFFFF & rgb;
+				}
+				return rgb;
+			}
+		};
+		this.handle = Toolkit.getDefaultToolkit().createImage(new FilteredImageSource(this.handle.getSource(), filter));
+	}
+	
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGPainterImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGPainterImpl.java
new file mode 100644
index 0000000..a955ddd
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGPainterImpl.java
@@ -0,0 +1,273 @@
+package org.herac.tuxguitar.app.editors;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Point;
+import java.awt.RenderingHints;
+import java.awt.geom.Arc2D;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Rectangle2D;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGPainterImpl extends TGResourceFactoryImpl implements TGPainter{
+	
+	public static final int PATH_DRAW = 0x01;
+	
+	public static final int PATH_FILL = 0x02;
+	
+	private boolean pathEmpty;
+	
+	private int style;
+	
+	private Graphics2D gc;
+	
+	private GeneralPath path;
+	
+	private BasicStroke stroke;
+	
+	private Color background;
+	
+	private Color foreground;
+	
+	public TGPainterImpl(){
+		super();
+	}
+	
+	public TGPainterImpl(Graphics2D gc){
+		this.init(gc);
+	}
+	
+	public TGPainterImpl(Image image){
+		this.init((Graphics2D)image.getGraphics());
+	}
+	
+	public void init(Graphics2D gc){
+		if(this.gc != null){
+			this.gc.dispose();
+		}
+		this.gc = gc;
+		this.background = Color.WHITE;
+		this.foreground = Color.BLACK;
+		this.stroke = new BasicStroke(1f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);
+	}
+	
+	public void initPath(int style){
+		this.style = style;
+		this.path = new GeneralPath();
+		this.pathEmpty = true;
+		this.setAntialias( true );
+	}
+	
+	public void initPath(){
+		this.initPath( PATH_DRAW );
+	}
+	
+	public void closePath(){
+		if(this.pathEmpty){
+			System.out.println("Warning: Empty Path!");
+		}
+		if( (this.style & PATH_DRAW) != 0){
+			//this.gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+			this.gc.setColor(this.foreground);
+			this.gc.draw(this.path);
+		}
+		if( (this.style & PATH_FILL) != 0){
+			//this.gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+			this.gc.setColor(this.background);
+			this.gc.fill(this.path);
+		}
+		this.style = 0;
+		this.path = null;
+		this.pathEmpty = true;
+		this.setAntialias( false );
+	}
+	
+	public Graphics2D getGC(){
+		return this.gc;
+	}
+	
+	public void dispose(){
+		this.gc.dispose();
+		this.gc = null;
+	}
+	
+	public void setFont(Font arg0) {
+		this.gc.setFont(arg0);
+	}
+	
+	public void setFont(TGFont font) {
+		this.gc.setFont( ((TGFontImpl)font).getHandle() );
+	}
+	
+	/** @Deprecated	**/ 
+	public void setBackground(Color background) {
+		this.background = background;
+	}
+	
+	public void setBackground(TGColor color) {
+		this.background = ((TGColorImpl)color).getHandle();
+	}
+	
+	/** @Deprecated	**/
+	public void setForeground(Color foreground) {
+		this.foreground = foreground;
+	}
+	
+	public void setForeground(TGColor color) {
+		this.foreground = ((TGColorImpl)color).getHandle();
+	}
+	
+	public void setLineWidth(int lineWidth) {
+		this.stroke = new BasicStroke(lineWidth, this.stroke.getEndCap(), this.stroke.getLineJoin(), this.stroke.getMiterLimit(), this.stroke.getDashArray(), this.stroke.getDashPhase());
+		this.gc.setStroke(this.stroke);
+	}
+	
+	public void setLineStyleSolid() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void setLineStyleDot() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void setLineStyleDash() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	public void setLineStyleDashDot() {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public void setAlpha(int alpha) {
+		// TODO Auto-generated method stub
+	}
+	
+	public void setAntialias(boolean enabled){
+		this.gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING, (enabled ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF));
+	}
+	
+	public void setAdvanced(boolean advanced) {
+		this.gc.setRenderingHint(RenderingHints.KEY_ANTIALIASING, (advanced ? RenderingHints.VALUE_ANTIALIAS_ON : RenderingHints.VALUE_ANTIALIAS_OFF));
+		this.gc.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, (advanced ? RenderingHints.VALUE_TEXT_ANTIALIAS_ON : RenderingHints.VALUE_TEXT_ANTIALIAS_OFF));
+	}
+	
+	public Point getStringExtent(String string) {
+		return new Point(this.gc.getFontMetrics().stringWidth(string),this.gc.getFontMetrics().getHeight());
+	}
+	
+	public void drawString(String string, int x, int y) {
+		this.setAntialias(true);
+		this.gc.setColor(this.foreground);
+		this.gc.drawString(string, x, (y + this.gc.getFont().getSize()) );
+	}
+	
+	public void drawString(String string, int x, int y, boolean isTransparent) {
+		this.setAntialias(true);
+		this.gc.setColor(this.foreground);
+		this.gc.drawString(string, x, (y + this.gc.getFont().getSize()) /*, isTransparent*/);
+	}
+	
+	/** @Deprecated	**/
+	public void drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight) {
+		this.setAntialias(false);
+		this.gc.drawImage(image, destX, destY, (destX + destWidth), (destY + destHeight), srcX, srcY, (srcX + srcWidth), (srcY + srcHeight), null);
+	}
+	
+	/** @Deprecated	**/
+	public void drawImage(Image image, int x, int y) {
+		int width = image.getWidth(null);
+		int height = image.getHeight(null);
+		this.setAntialias(false);
+		this.gc.drawImage(image, x, y, (x + width), (y + height), 0, 0, width, height, null);
+	}
+	
+	public void drawImage(TGImage image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight) {
+		this.setAntialias(false);
+		this.gc.drawImage(((TGImageImpl)image).getHandle(), destX, destY, (destX + destWidth), (destY + destHeight), srcX, srcY, (srcX + srcWidth), (srcY + srcHeight), null);		
+	}
+
+	public void drawImage(TGImage image, int x, int y) {
+		int width = image.getWidth();
+		int height = image.getHeight();
+		this.setAntialias(false);
+		this.gc.drawImage(((TGImageImpl)image).getHandle(), x, y, (x + width), (y + height), 0, 0, width, height, null);		
+	}
+	
+	public void cubicTo(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5) {
+		this.path.curveTo(arg0, arg1, arg2, arg3, arg4, arg5);
+		this.pathEmpty = false;
+	}
+	
+	public void lineTo(float arg0, float arg1) {
+		this.path.lineTo(arg0, arg1);
+		this.pathEmpty = false;
+	}
+	
+	public void moveTo(float arg0, float arg1) {
+		this.path.moveTo(arg0, arg1);
+		this.pathEmpty = false;
+	}
+	
+	public void addArc(float x, float y, float width, float height, float startAngle, float arcAngle) {
+		this.path.append(new Arc2D.Float(x, y, width, height, startAngle,arcAngle, Arc2D.OPEN), true);
+		this.pathEmpty = false;
+	}
+	
+	public void addOval(float x, float y, float width, float height) {
+		this.path.append(new Arc2D.Float(x, y, width, height, 0,360, Arc2D.OPEN), true);
+		this.pathEmpty = false;
+	}
+	
+	public void addRectangle(float x,float y,float width,float height) {
+		this.path.append(new Rectangle2D.Float(x, y, width, height), true);
+		this.pathEmpty = false;
+	}
+	
+	public void addString(String arg0, float arg1, float arg2, TGFont arg3) {
+		// TODO Auto-generated method stub
+	}
+
+	public void drawPolygon(int[] arg0) {
+		// TODO Auto-generated method stub
+	}
+
+	public void fillPolygon(int[] arg0) {
+		// TODO Auto-generated method stub
+		
+	}
+	
+	public int getFontSize() {
+		return this.gc.getFont().getSize();
+	}
+
+	public int getFMHeight() {
+		return this.gc.getFontMetrics().getHeight();
+	}
+
+	public int getFMAscent() {
+		return this.gc.getFontMetrics().getAscent();
+	}
+
+	public int getFMDescent() {
+		return this.gc.getFontMetrics().getDescent();
+	}
+
+	public int getFMWidth(String text) {
+		return this.gc.getFontMetrics().stringWidth(text);
+	}
+
+	public boolean isDisposed() {
+		return (this.gc == null);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGResourceFactoryImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGResourceFactoryImpl.java
new file mode 100644
index 0000000..6602eaa
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGResourceFactoryImpl.java
@@ -0,0 +1,35 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGFontModel;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+
+public class TGResourceFactoryImpl implements TGResourceFactory {
+	
+	public TGResourceFactoryImpl(){
+		super();
+	}
+	
+	public TGImage createImage( int width, int height ){
+		return new TGImageImpl( width, height );
+	}
+	
+	public TGColor createColor( int red, int green, int blue ){
+		return new TGColorImpl( red, green , blue );
+	}
+	
+	public TGColor createColor( TGColorModel cm ){
+		return this.createColor(cm.getRed(), cm.getGreen(), cm.getBlue());
+	}
+	
+	public TGFont createFont( String name, int height, boolean bold, boolean italic ){
+		return new TGFontImpl( name , height , bold , italic );
+	}
+	
+	public TGFont createFont( TGFontModel fm ){
+		return this.createFont(fm.getName(), fm.getHeight(), fm.isBold(), fm.isItalic());
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGScrollBar.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGScrollBar.java
new file mode 100644
index 0000000..504e493
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TGScrollBar.java
@@ -0,0 +1,134 @@
+package org.herac.tuxguitar.app.editors;
+
+import java.awt.Component;
+import java.awt.Insets;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.ImageIcon;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+
+public class TGScrollBar {
+	
+	public static final int DEFAULT_INCREMENT = 50;
+	
+	private int value;
+	private int maximum;
+	
+	private JButton buttonUp;
+	private JButton buttonDown;
+	
+	public TGScrollBar(){
+		
+	}
+	
+	public Component getComponent(){
+		this.buttonUp = new JButton();
+		this.buttonUp.setIcon( new ImageIcon( getClass().getClassLoader().getResource("skin/scroll_up.png") ) );
+		this.buttonUp.setPressedIcon( new ImageIcon( getClass().getClassLoader().getResource("skin/scroll_up_pressed.png") ) );
+		this.buttonUp.setBorderPainted( false );
+		this.buttonUp.setContentAreaFilled( false );
+		this.buttonUp.setFocusPainted( false );
+		this.buttonUp.setMargin( new Insets(0,0,0,0) );
+		this.buttonUp.addMouseListener( new TGScrollBarAction( this, -1) );
+		
+		this.buttonDown = new JButton();
+		this.buttonDown.setIcon( new ImageIcon( getClass().getClassLoader().getResource("skin/scroll_down.png") ) );
+		this.buttonDown.setPressedIcon( new ImageIcon( getClass().getClassLoader().getResource("skin/scroll_down_pressed.png") ) );
+		this.buttonDown.setBorderPainted( false );
+		this.buttonDown.setContentAreaFilled( false );
+		this.buttonDown.setFocusPainted( false );
+		this.buttonDown.setMargin( new Insets(0,0,0,0) );
+		this.buttonDown.addMouseListener( new TGScrollBarAction( this, 1) );
+		
+		JPanel panel = new JPanel();
+		panel.setBackground( TGConfig.COLOR_WIDGET_BACKGROUND );
+		panel.setLayout( new BoxLayout( panel, BoxLayout.PAGE_AXIS) );
+		panel.add( Box.createVerticalStrut( 100 ));
+		panel.add( this.buttonUp );
+		panel.add( Box.createVerticalGlue());
+		panel.add( this.buttonDown );
+		panel.add( Box.createVerticalStrut( 100 ));
+		
+		return panel;
+	}
+	
+	public int getValue() {
+		return value;
+	}
+
+	public void setValue(int value) {
+		this.value = value;
+		if( this.value < 0 ){
+			this.value = 0;
+		} else if( this.value > this.maximum ){
+			this.value = this.maximum;
+		}
+	}
+	
+	public int getMaximum() {
+		return maximum;
+	}
+	
+	public void setMaximum(int maximum) {
+		this.maximum = maximum;
+	}
+	
+	private class TGScrollBarAction extends MouseAdapter implements Runnable {
+		
+		private boolean pressed;
+		private int direction;
+		private TGScrollBar scrollBar;
+		
+		public TGScrollBarAction(TGScrollBar scrollBar, int direction){
+			this.scrollBar = scrollBar;
+			this.direction = direction;
+		}
+		
+		public void process() {
+			if( TuxGuitar.instance().getTablatureEditor().isStarted() ){
+				this.scrollBar.setValue( this.scrollBar.getValue() + ( this.direction * DEFAULT_INCREMENT ) );
+				TuxGuitar.instance().getTablatureEditor().repaint();
+			}
+		}
+		
+	    public void mousePressed(MouseEvent e) {
+	    	synchronized ( this ) {
+	    		if( TuxGuitar.instance().getTablatureEditor().isStarted() ){
+		    		if( !this.pressed ){
+		    			this.pressed = true;
+		    			new Thread( this ).start();
+		    		}
+	    		}
+	    	}
+	    }
+	    
+	    public void mouseReleased(MouseEvent e) {
+	    	synchronized ( this ) {
+	    		if( TuxGuitar.instance().getTablatureEditor().isStarted() ){
+		    		this.pressed = false;
+		    		this.notifyAll();
+	    		}
+	    	}
+	    }
+	    
+		public void run() {
+			try {
+				synchronized ( this ) {
+					while( this.pressed ){
+						this.process();
+						this.wait( 50 );
+					}
+				}
+			} catch (InterruptedException e) {
+				e.printStackTrace();
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TablatureEditor.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TablatureEditor.java
new file mode 100644
index 0000000..1fe3c8b
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/TablatureEditor.java
@@ -0,0 +1,121 @@
+package org.herac.tuxguitar.app.editors;
+
+import java.awt.Canvas;
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.Point;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.measure.SelectMeasureAction;
+import org.herac.tuxguitar.app.editors.tab.Tablature;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+
+public class TablatureEditor extends Canvas{
+	
+	private static final long serialVersionUID = 3033840631768147247L;
+	
+	private Tablature tablature;
+	private TGScrollBar scrollBar;
+	private Dimension size;
+	private Image bufferImage;
+	private Graphics2D bufferGraphics;
+	private boolean loaded;
+	private boolean started;
+	
+	public TablatureEditor(){
+		this.loaded = false;
+		this.started = false;
+		this.size = new Dimension();
+		this.setFocusable(false);
+	}
+	
+	public Component getPanel(){
+		this.scrollBar = new TGScrollBar();
+		this.tablature = new Tablature(this, this.scrollBar);
+		this.addMouseListener( TuxGuitar.instance().getAction(SelectMeasureAction.NAME) );
+		return this;
+	}
+	
+	public Component getScrollBar(){
+		return this.scrollBar.getComponent();
+	}
+	
+	public Tablature getTablature(){		
+		return this.tablature;
+	}
+	
+	public void repaint(){
+		if(this.loaded && this.tablature != null){
+			this.tablature.beforeRedraw();
+		}
+		super.repaint();
+	}
+	
+	public void paint(Graphics g){
+		// Check the offcreen buffer.
+		Dimension size = getSize();
+		if(this.bufferImage == null || this.size.width != size.width || this.size.height != size.height){
+			this.size.setSize(size);
+			this.bufferImage = createImage(this.size.width,this.size.height);
+			this.bufferGraphics = (Graphics2D)this.bufferImage.getGraphics();
+		}
+
+		// Paint the tablature into the buffer.
+		if(this.loaded && this.started){
+			this.bufferGraphics.setBackground( ((TGColorImpl)this.tablature.getViewLayout().getResources().getBackgroundColor()).getHandle());
+			this.bufferGraphics.clearRect(0, 0, this.size.width, this.size.height);
+			this.tablature.paintTablature(new TGPainterImpl( this.bufferGraphics ));
+		}
+
+		// Paint a "loading" message.
+		else{
+			this.bufferGraphics.setBackground( Color.WHITE );
+			this.bufferGraphics.clearRect(0, 0, this.size.width, this.size.height);
+			this.paintLoading(new TGPainterImpl( this.bufferGraphics ));
+		}
+		
+		// Draw the buffer image
+		g.drawImage(this.bufferImage,0,0,this);
+	}
+	
+	public void update(Graphics g){
+		this.paint(g);
+	}
+	
+	public void loadTablature(){
+		this.tablature.setSongManager( TuxGuitar.instance().getSongManager() );
+		this.tablature.initDefaults();
+		this.tablature.reloadViewLayout();
+		this.tablature.updateTablature();
+		this.tablature.initCaret();
+		this.loaded = true;
+	}
+	
+	public void dispose(){
+		if(this.loaded && this.tablature != null){
+			this.loaded = false;
+			this.tablature.dispose();
+		}
+	}
+	
+	public void start(){
+		this.started = true;
+		this.repaint();
+	}
+	
+	public boolean isStarted(){
+		return this.started;
+	}
+	
+	private void paintLoading(TGPainterImpl painter){
+		painter.setFont( TGConfig.FONT_LOADING_MESSAGE );
+		painter.setForeground( TGConfig.COLOR_LOADING_MESSAGE );
+		String msg = "Loading ...";
+		Point p = painter.getStringExtent( msg );
+		painter.drawString(msg, ((this.size.width / 2) - (p.x / 2)), (this.size.height / 2) - (p.y / 2));
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/tab/Caret.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/tab/Caret.java
new file mode 100644
index 0000000..6a1b4e5
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/tab/Caret.java
@@ -0,0 +1,355 @@
+/*
+ * Created on 30-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.tab;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.util.MidiTickUtil;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackSpacing;
+import org.herac.tuxguitar.song.managers.TGMeasureManager;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class Caret {
+	private Tablature tablature;
+	private TGTrackImpl selectedTrack;
+	private TGMeasureImpl selectedMeasure;
+	private TGBeat selectedBeat;
+	private TGNote selectedNote;
+	private TGDuration selectedDuration;
+	private long position;
+	private int string;
+	private int voice;
+	private int velocity;
+	private boolean restBeat;
+	private boolean changes;
+	
+	public Caret(Tablature tablature) {
+		this.tablature = tablature;
+		this.selectedDuration = getSongManager().getFactory().newDuration();
+		this.string = 1;
+		this.velocity = TGVelocities.DEFAULT;
+		this.changes = false;
+	}
+	
+	public synchronized void update(){
+		int trackNumber = (this.selectedTrack != null)?this.selectedTrack.getNumber():1;
+		update(trackNumber,this.position,this.string);
+	}
+	
+	public synchronized void update(int trackNumber){
+		update(trackNumber,this.position,this.string);
+	}
+	
+	public synchronized void update(int trackNumber,long position,int string){
+		update(trackNumber, position, string,getVelocity());
+	}
+	
+	public synchronized void update(int trackNumber,long position,int string,int velocity) {
+		long realPosition = ((TuxGuitar.instance().getPlayer().isRunning())?MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition()):position);
+		TGTrackImpl track = findTrack(trackNumber); 
+		TGMeasureImpl measure = findMeasure(realPosition,track);
+		TGBeat beat = findBeat(realPosition,measure);
+		if(track != null && measure != null && beat != null){
+			moveTo(track, measure, beat,string);
+		}
+		setVelocity(velocity);
+	}
+	
+	public void moveTo(TGTrackImpl selectedTrack, TGMeasureImpl selectedMeasure, TGBeat selectedBeat,int string) {
+		this.selectedTrack = selectedTrack;
+		this.selectedMeasure = selectedMeasure;
+		this.selectedBeat = selectedBeat;
+		this.string = string;
+		this.updatePosition();
+		this.updateDuration();
+		this.updateString();
+		this.updateNote();
+		this.updateBeat();
+		this.checkTransport();
+		this.setChanges(true);
+	}
+	
+	private TGTrackImpl findTrack(int number){
+		TGTrackImpl track = (TGTrackImpl)getSongManager().getTrack(number);
+		if(track == null){
+			track = (TGTrackImpl)getSongManager().getFirstTrack();
+		}
+		return track;
+	}
+	
+	private TGMeasureImpl findMeasure(long position,TGTrackImpl track){
+		TGMeasureImpl measure = null;
+		if(track != null){
+			measure = (TGMeasureImpl)getSongManager().getTrackManager().getMeasureAt(track,position);
+			if(measure == null){
+				measure = (TGMeasureImpl)getSongManager().getTrackManager().getFirstMeasure(track);
+			}
+		}
+		return measure;
+	}
+	
+	private TGBeat findBeat(long position,TGMeasureImpl measure){
+		TGBeat beat = null;
+		if(measure != null){
+			TGMeasureManager manager = getSongManager().getMeasureManager();
+			TGVoice voice = manager.getVoiceIn(measure, position, getVoice());
+			if( voice != null ){
+				beat = voice.getBeat();
+			}
+			if (beat == null) {
+				beat = manager.getFirstBeat(measure.getBeats());
+			}
+		}
+		return beat;
+	}
+	
+	public synchronized void goToTickPosition(){
+		long start = MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition());
+		this.update(this.selectedTrack.getNumber(),start,this.string);
+		this.setChanges(true);
+	}
+	
+	public void paintCaret(TGLayout layout,TGPainterImpl painter) {
+		if(!TuxGuitar.instance().getPlayer().isRunning()){
+			if (this.selectedMeasure != null && this.selectedBeat instanceof TGBeatImpl) {
+				org.herac.tuxguitar.graphics.control.TGBeatImpl beat = (TGBeatImpl)this.selectedBeat;
+				if( (layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0){
+					boolean expectedVoice = (getSelectedNote() == null || getSelectedNote().getVoice().getIndex() == getVoice());
+					int stringSpacing = this.tablature.getViewLayout().getStringSpacing();
+					int leftSpacing = beat.getMeasureImpl().getHeaderImpl().getLeftSpacing(layout);
+					int x = this.selectedMeasure.getPosX() + beat.getPosX() + beat.getSpacing() + leftSpacing - 5;
+					int y = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + ((this.string * stringSpacing) - stringSpacing) - 7;
+					int width = 14;
+					int height = 14;
+					painter.setForeground( expectedVoice ? layout.getResources().getLineColor() : layout.getResources().getColorRed());
+					painter.initPath();
+					painter.setAntialias(false);
+					painter.addRectangle(x, y, width, height);
+					painter.closePath();
+				}
+				else if( (layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0){
+					int line = this.tablature.getViewLayout().getScoreLineSpacing();
+					int leftSpacing = beat.getMeasureImpl().getHeaderImpl().getLeftSpacing(layout);
+					float xMargin = (2.0f * layout.getScale());
+					float x1 = this.selectedMeasure.getPosX() + beat.getPosX() + beat.getSpacing() + leftSpacing - xMargin;
+					float x2 = (x1 + layout.getResources().getScoreNoteWidth() + xMargin);
+					float y1 = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_TOP) - line;
+					float y2 = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_BOTTOM);
+					painter.setForeground(layout.getResources().getLineColor());
+					painter.initPath();
+					painter.moveTo(x1, y1);
+					painter.lineTo(x1 + ((x2 - x1) / 2f), y1 + (line / 2f));
+					painter.lineTo(x2, y1);
+					painter.moveTo(x1, y2 + line);
+					painter.lineTo(x1 + ((x2 - x1) / 2f), y2 + (line / 2f));
+					painter.lineTo(x2, y2 + line);
+					painter.closePath();
+				}
+			}
+		}
+	}
+	
+	public boolean moveRight() {
+		if (getSelectedBeat() != null) {
+			TGMeasureImpl measure = getMeasure();
+			TGVoice voice = getSongManager().getMeasureManager().getNextVoice(measure.getBeats(),getSelectedBeat(), getVoice());
+			TGBeat beat = (voice != null ? voice.getBeat() : null );
+			if (beat == null){
+				//si no habia mas componentes. busco el siguiente compas
+				measure = (TGMeasureImpl)getSongManager().getTrackManager().getNextMeasure(getMeasure());
+				if (measure == null) {
+					return false;
+				}
+				voice = getSongManager().getMeasureManager().getFirstVoice(measure.getBeats(), getVoice());
+				beat = (voice != null ? voice.getBeat() : null );
+				if( beat == null ){
+					beat = getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
+				}
+			}
+			if(beat != null){
+				moveTo(getTrack(), measure, beat, getStringNumber());
+			}
+		}
+		return true;
+	}
+	
+	public void moveLeft() {
+		if (getSelectedBeat() != null) {
+			TGMeasureImpl measure = getMeasure();
+			TGVoice voice = getSongManager().getMeasureManager().getPreviousVoice(measure.getBeats(),getSelectedBeat(), getVoice());
+			TGBeat beat = (voice != null ? voice.getBeat() : null );
+			if (beat == null) {
+				//si no habia mas componentes. busco el compas anterior
+				measure = (TGMeasureImpl)getSongManager().getTrackManager().getPrevMeasure(getMeasure());
+				if (measure == null) {
+					return;
+				}
+				voice = getSongManager().getMeasureManager().getLastVoice(measure.getBeats(), getVoice());
+				beat = (voice != null ? voice.getBeat() : null );
+				if( beat == null ){
+					beat = getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
+				}
+			}
+			if(beat != null){
+				moveTo(getTrack(), measure, beat, getStringNumber());
+			}
+		}
+	}
+	
+	/**
+	 * Luego de mover el Caret. cambia la duracion seleccionada por la del componente. solo si lo que resta del compas no esta vacio
+	 */
+	private void updateDuration() {
+		if (this.selectedBeat != null && !this.selectedBeat.getVoice(getVoice()).isRestVoice()) {
+			this.selectedBeat.getVoice(getVoice()).getDuration().copy(this.selectedDuration);
+		}
+	}
+	
+	public void moveUp() {
+		int stringCount = this.selectedTrack.stringCount() ;
+		int nextString = (( (this.string - 2 + stringCount) % stringCount) + 1);
+		setStringNumber(nextString);
+	}
+	
+	public void moveDown() {
+		int stringCount = this.selectedTrack.stringCount() ;
+		int nextString = ( (this.string  % stringCount) + 1);
+		setStringNumber(nextString);
+	}
+	
+	public void setStringNumber(int number){
+		this.string = number;
+		this.updateNote();
+	}
+	
+	public int getStringNumber(){
+		return this.string;
+	}
+	
+	public long getPosition() {
+		return this.position;
+	}
+	
+	public TGMeasureImpl getMeasure() {
+		return this.selectedMeasure;
+	}
+	
+	public TGTrackImpl getTrack() {
+		return this.selectedTrack;
+	}
+	
+	public TGDuration getDuration() {
+		return this.selectedDuration;
+	}
+	
+	public void setSelectedDuration(TGDuration selectedDuration) {
+		this.selectedDuration = selectedDuration;
+	}
+	
+	public TGString getSelectedString() {
+		List strings = this.selectedTrack.getStrings();
+		Iterator it = strings.iterator();
+		while (it.hasNext()) {
+			TGString instrumentString = (TGString) it.next();
+			if (instrumentString.getNumber() == this.string) {
+				return instrumentString;
+			}
+		}
+		return null;
+	}
+	
+	public void changeDuration(TGDuration duration){
+		getSongManager().getMeasureManager().changeDuration(getMeasure(),getSelectedBeat(),duration,getVoice(), true);
+		setChanges(true);
+	}
+	
+	private void updatePosition(){
+		this.position = getSelectedBeat().getStart();
+	}
+	
+	private void updateString(){
+		if(this.string < 1 || this.string > getTrack().stringCount() ){
+			this.string = 1;
+		}
+	}
+	
+	private void checkTransport(){
+		TuxGuitar.instance().getTransport().gotoMeasure(getMeasure().getHeader());
+	}
+	
+	public boolean hasChanges() {
+		return this.changes;
+	}
+	
+	public void setChanges(boolean changes) {
+		this.changes = changes;
+	}
+	
+	public int getVelocity() {
+		return this.velocity;
+	}
+	
+	public void setVelocity(int velocity) {
+		this.velocity = velocity;
+	}
+	
+	private void updateNote(){
+		this.selectedNote = null;
+		
+		TGString string = getSelectedString();
+		if( string != null ){
+			this.selectedNote = getSongManager().getMeasureManager().getNote(getMeasure(),getPosition(),string.getNumber());
+		}
+	}
+	
+	public TGNote getSelectedNote(){
+		return this.selectedNote;
+	}
+	
+	private void updateBeat(){
+		this.restBeat = this.selectedBeat.isRestBeat();
+	}
+	
+	public TGBeatImpl getSelectedBeat(){
+		return (TGBeatImpl)this.selectedBeat;
+	}
+	
+	public TGSongManager getSongManager(){
+		return this.tablature.getSongManager();
+	}
+	
+	public int getVoice() {
+		return this.voice;
+	}
+	
+	public void setVoice(int voice) {
+		this.voice = voice;
+		this.update();
+	}
+	
+	public boolean isRestBeatSelected(){
+		return this.restBeat;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/tab/Tablature.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/tab/Tablature.java
new file mode 100644
index 0000000..d2adb10
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/editors/tab/Tablature.java
@@ -0,0 +1,331 @@
+/*
+ * Created on 29-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.tab;
+
+import java.awt.Component;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.editors.TGResourceFactoryImpl;
+import org.herac.tuxguitar.app.editors.TGScrollBar;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.graphics.control.TGController;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.graphics.control.TGLayoutStyles;
+import org.herac.tuxguitar.graphics.control.TGLayoutVertical;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class Tablature implements TGController {
+	
+	private Component component;
+	private TGScrollBar scroll;
+	
+	private TGSongManager songManager;
+	private Caret caret;
+	//private int width;
+	private int height;
+	private TGLayout viewLayout;
+	
+	private TGBeatImpl playedBeat;
+	private TGMeasureImpl playedMeasure;
+	
+	//private int scrollX;
+	private int scrollY;
+	private boolean resetScroll;
+	protected long lastVScrollTime;
+	protected long lastHScrollTime;
+	
+	private boolean painting;
+	
+	public Tablature(Component component,TGScrollBar scroll) {
+		this.component = component;
+		this.scroll = scroll;
+	}
+	
+	public void initDefaults(){
+		this.caret = new Caret(this);
+	}
+	
+	public void updateTablature(){
+		this.playedBeat = null;
+		this.playedMeasure = null;
+		getViewLayout().updateSong();
+	}
+	
+	public void initCaret(){
+		this.caret.update(1,TGDuration.QUARTER_TIME,1);
+	}
+	
+	public synchronized void paintTablature(TGPainterImpl painter){
+		TuxGuitar.instance().lock();
+		this.setPainting(true);
+		try{
+			this.checkScroll();
+			
+			Rectangle area = this.component.getBounds();
+			
+			this.scrollY = this.scroll.getValue();
+			
+			this.getViewLayout().paint(painter, createRectangle(area) , 0, -this.scrollY );
+			
+			//this.width = this.viewLayout.getWidth();
+			this.height = this.viewLayout.getHeight();
+			
+			this.updateScroll();
+			
+			if(TuxGuitar.instance().getPlayer().isRunning()){
+				redrawPlayingMode(painter,true);
+			}
+			// Si no estoy reproduciendo y hay cambios
+			// muevo el scroll al compas que tiene el caret
+			else if(getCaret().hasChanges()){
+				// Mover el scroll puede necesitar redibujar
+				// por eso es importante desmarcar los cambios antes de hacer el moveScrollTo
+				getCaret().setChanges(false);
+					
+				moveScrollTo(getCaret().getMeasure() , area);
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		this.setPainting(false);
+		TuxGuitar.instance().unlock();
+	}
+	
+	public void resetScroll(){
+		this.resetScroll = true;
+	}
+	
+	public void checkScroll(){
+		if(this.resetScroll){
+			this.scroll.setValue(0);
+			this.resetScroll = false;
+		}
+	}
+	
+	public void updateScroll(){
+		this.scroll.setMaximum((int)Math.max(0, (this.height - this.component.getSize().getHeight()) ) );
+	}
+	
+	public boolean moveScrollTo(TGMeasureImpl measure){
+		return this.moveScrollTo(measure, this.component.getBounds());
+	}
+	
+	public boolean moveScrollTo(TGMeasureImpl measure, Rectangle area){
+		boolean success = false;
+		if(measure != null && measure.getTs() != null){
+			int mX = measure.getPosY();
+			int mWidth = measure.getTs().getSize();
+			int marginWidth = getViewLayout().getFirstTrackSpacing();
+			boolean forceRedraw = false;
+			
+			//Solo se ajusta si es necesario
+			//si el largo del compas es mayor al de la pantalla. nunca se puede ajustar a la medida.
+			if( mX < 0 || ( (mX + mWidth ) > area.height && (area.height >= mWidth + marginWidth || mX > marginWidth) )  ){
+				this.scroll.setValue((this.scrollY + mX) - marginWidth );
+				success = true;
+			}
+			
+			if(!success){
+				// Si la seleccion "real" del scroll es distinta a la anterior, se fuerza el redraw
+				forceRedraw = (this.scrollY != this.scroll.getValue() );
+			}
+			
+			if(forceRedraw || success){
+				this.component.repaint();
+			}
+		}
+		return success;
+	}
+	
+	public void beforeRedraw(){
+		TuxGuitar.instance().lock();
+		this.playedBeat = null;
+		this.playedMeasure = null;
+		this.setPainting(true);
+		TuxGuitar.instance().unlock();
+	}
+	
+	public void redrawPlayingMode(){
+		if(!isPainting() && !TuxGuitar.instance().isLocked()){
+			TuxGuitar.instance().lock();
+			if(TuxGuitar.instance().getPlayer().isRunning()){
+				this.setPainting(true);
+				
+				TGPainterImpl painter = new TGPainterImpl((Graphics2D)this.component.getGraphics());
+				redrawPlayingMode(painter,false);
+				painter.dispose();
+				
+				this.setPainting(false);
+			}
+			TuxGuitar.instance().unlock();
+		}
+	}
+	
+	private void redrawPlayingMode(TGPainterImpl painter,boolean force){
+		if(!TuxGuitar.instance().isLocked()){
+			try{
+				org.herac.tuxguitar.graphics.control.TGMeasureImpl measure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
+				TGBeatImpl beat = TuxGuitar.instance().getEditorCache().getPlayBeat();
+				if(measure != null && beat != null && measure.hasTrack(getCaret().getTrack().getNumber())){
+					if(!moveScrollTo(measure) || force){
+						boolean paintMeasure = (force || this.playedMeasure == null || !this.playedMeasure.equals(measure));
+						if(this.playedMeasure != null && this.playedBeat != null && !this.playedMeasure.isOutOfBounds() && this.playedMeasure.hasTrack(getCaret().getTrack().getNumber())){
+							getViewLayout().paintPlayMode(painter, this.playedMeasure, this.playedBeat,paintMeasure);
+						}
+						if(!measure.isOutOfBounds()){
+							getViewLayout().paintPlayMode(painter, measure, beat,paintMeasure);
+						}
+						this.playedBeat = beat;
+						this.playedMeasure =  measure;
+					}
+				}
+			}catch(Throwable throwable){
+				throwable.printStackTrace();
+			}
+		}
+	}
+	
+	public boolean isPainting() {
+		return this.painting;
+	}
+	
+	public void setPainting(boolean painting) {
+		this.painting = painting;
+	}
+	
+	public Caret getCaret(){
+		return this.caret;
+	}
+	
+	public TGSongManager getSongManager() {
+		return this.songManager;
+	}
+	
+	public void setSongManager(TGSongManager songManager) {
+		this.songManager = songManager;
+	}
+	
+	public TGLayout getViewLayout(){
+		return this.viewLayout;
+	}
+	
+	public void setViewLayout(TGLayout viewLayout){
+		if(getViewLayout() != null){
+			getViewLayout().disposeLayout();
+		}
+		this.viewLayout = viewLayout;
+		/*
+		if(this.getHorizontalBar() != null){
+			this.getHorizontalBar().setSelection(0);
+		}
+		if(this.getVerticalBar() != null){
+			this.getVerticalBar().setSelection(0);
+		}*/
+		this.reloadStyles();
+	}
+	
+	public void reloadStyles(){
+		if(this.getViewLayout() != null){
+			this.getViewLayout().loadStyles(1.0f);
+			this.component.setBackground(((TGColorImpl)getViewLayout().getResources().getBackgroundColor()).getHandle() );
+		}
+	}
+	
+	public TGRectangle createRectangle( Rectangle rectangle ){
+		return new TGRectangle(rectangle.x,rectangle.y,rectangle.width,rectangle.height);
+	}
+	
+	public void reloadViewLayout(){
+		setViewLayout(new TGLayoutVertical(this,TGConfig.LAYOUT_STYLE));
+	}
+	
+	public void dispose(){
+		this.getViewLayout().disposeLayout();
+	}
+
+	public TGResourceFactory getResourceFactory() {
+		return new TGResourceFactoryImpl();
+	}
+	
+	public void configureStyles(TGLayoutStyles styles) {
+		styles.setBufferEnabled(true);
+		styles.setStringSpacing( TGConfig.TAB_LINE_SPACING );
+		styles.setScoreLineSpacing( TGConfig.SCORE_LINE_SPACING );
+		styles.setFirstMeasureSpacing(0);
+		styles.setMinBufferSeparator(20);
+		styles.setMinTopSpacing(30);
+		styles.setMinScoreTabSpacing(TGConfig.MIN_SCORE_TABLATURE_SPACING);
+		styles.setFirstTrackSpacing(TGConfig.FIRST_TRACK_SPACING);
+		styles.setTrackSpacing(TGConfig.TRACK_SPACING);
+		
+		styles.setChordFretIndexSpacing(8);
+		styles.setChordStringSpacing(5);
+		styles.setChordFretSpacing(6);
+		styles.setChordNoteSize(4);
+		styles.setRepeatEndingSpacing(20);
+		styles.setTextSpacing(15);
+		styles.setMarkerSpacing(15);
+		styles.setDivisionTypeSpacing(10);
+		styles.setEffectSpacing(8);
+		
+		styles.setDefaultFont(TGConfig.FONT_DEFAULT);
+		styles.setNoteFont(TGConfig.FONT_NOTE);
+		styles.setTimeSignatureFont(TGConfig.FONT_TIME_SIGNATURE);
+		styles.setLyricFont(TGConfig.FONT_LYRIC);
+		styles.setTextFont(TGConfig.FONT_TEXT);
+		styles.setMarkerFont(TGConfig.FONT_MARKER);
+		styles.setGraceFont(TGConfig.FONT_GRACE);
+		styles.setChordFont(TGConfig.FONT_CHORD);
+		styles.setChordFretFont(TGConfig.FONT_CHORD_FRET);
+		styles.setBackgroundColor(TGConfig.COLOR_BACKGROUND);
+		styles.setLineColor(TGConfig.COLOR_LINE);
+		styles.setScoreNoteColor(TGConfig.COLOR_SCORE_NOTE);
+		styles.setTabNoteColor(TGConfig.COLOR_TAB_NOTE);
+		styles.setPlayNoteColor(TGConfig.COLOR_PLAY_NOTE);
+	}
+
+	public int getTrackSelection(){
+		if( (getViewLayout().getStyle() & TGLayout.DISPLAY_MULTITRACK) == 0 ){
+			return getCaret().getTrack().getNumber();
+		}
+		return -1;
+	}
+	
+	public boolean isRunning(TGBeat beat) {
+		return ( isRunning( beat.getMeasure() ) && TuxGuitar.instance().getEditorCache().isPlaying(beat.getMeasure(),beat) );
+	}
+	
+	public boolean isRunning(TGMeasure measure) {
+		return ( measure.getTrack().equals(getCaret().getTrack()) && TuxGuitar.instance().getEditorCache().isPlaying( measure ) );
+	}
+
+	public boolean isLoopSHeader(TGMeasureHeader measureHeader) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+	public boolean isLoopEHeader(TGMeasureHeader measureHeader) {
+		// TODO Auto-generated method stub
+		return false;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/config/TGConfig.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/config/TGConfig.java
new file mode 100644
index 0000000..be96371
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/config/TGConfig.java
@@ -0,0 +1,64 @@
+/*
+ * Created on 27-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.system.config;
+
+import java.awt.Color;
+import java.awt.Font;
+
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFontModel;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGConfig{
+	
+	private static final String DEFAULT_FONT_NAME = "Arial";
+	
+	public static final String LANGUAGE = "";
+	
+	public static final int LAYOUT_STYLE = (TGLayout.DISPLAY_TABLATURE | TGLayout.DISPLAY_COMPACT | TGLayout.DISPLAY_CHORD_NAME);
+	public static final int MIN_SCORE_TABLATURE_SPACING = 20;
+	public static final int SCORE_LINE_SPACING = 8;
+	public static final int TAB_LINE_SPACING = 10;
+	public static final int FIRST_TRACK_SPACING = 0;//20;
+	public static final int TRACK_SPACING = 10;
+	
+	public static final Font FONT_WIDGETS = new Font(DEFAULT_FONT_NAME, Font.BOLD, 12);
+	public static final Font FONT_LOADING_MESSAGE = new Font(DEFAULT_FONT_NAME, Font.BOLD ,18);
+	public static final Color COLOR_WIDGET_BACKGROUND = new Color(255,255,255);
+	public static final Color COLOR_LOADING_MESSAGE = new Color(200,200,200);
+	
+	public static final TGFontModel FONT_DEFAULT = new TGFontModel(DEFAULT_FONT_NAME, 9, false, false);
+	public static final TGFontModel FONT_NOTE = new TGFontModel(DEFAULT_FONT_NAME, 9, false, false);
+	public static final TGFontModel FONT_TIME_SIGNATURE = new TGFontModel(DEFAULT_FONT_NAME, 14, true, false);
+	public static final TGFontModel FONT_LYRIC = new TGFontModel(DEFAULT_FONT_NAME, 7, false, true);
+	public static final TGFontModel FONT_TEXT = new TGFontModel(DEFAULT_FONT_NAME, 9, false, false);
+	public static final TGFontModel FONT_MARKER = new TGFontModel(DEFAULT_FONT_NAME, 9, false, false);
+	public static final TGFontModel FONT_CHORD = new TGFontModel(DEFAULT_FONT_NAME, 9, false, false);
+	public static final TGFontModel FONT_CHORD_FRET = new TGFontModel(DEFAULT_FONT_NAME, 7, false, false);
+	public static final TGFontModel FONT_GRACE = new TGFontModel(DEFAULT_FONT_NAME, 6, false, false);
+	
+	public static final TGColorModel COLOR_BACKGROUND = new TGColorModel(255,255,255);
+	public static final TGColorModel COLOR_LINE = new TGColorModel(225,225,225);
+	public static final TGColorModel COLOR_SCORE_NOTE = new TGColorModel(0,0,0);
+	public static final TGColorModel COLOR_TAB_NOTE = new TGColorModel(0,0,0);
+	public static final TGColorModel COLOR_PLAY_NOTE = new TGColorModel(255,0,0);
+	public static final TGColorModel COLOR_LOOP_S_MARKER = new TGColorModel(0,255,0);
+	public static final TGColorModel COLOR_LOOP_E_MARKER = new TGColorModel(255,0,0);
+	
+	public static String LOOK_FEEL = null;
+	public static String SONG_URL = null;
+	public static String SOUNDBANK_URL = null;
+	
+	public static String MIDI_PORT = null;
+	public static String MIDI_SEQUENCER = "tuxguitar.sequencer";
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBinding.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBinding.java
new file mode 100644
index 0000000..28f57a9
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBinding.java
@@ -0,0 +1,177 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+import java.util.StringTokenizer;
+
+public class KeyBinding {
+	
+	public static final String MASK_SEPARATOR = "+";
+	
+	private int mask;
+	private int key;
+	
+	public KeyBinding(int key,int mask){
+		this.key = key;
+		this.mask = mask;
+	}
+	
+	public KeyBinding(){
+		this(0,0);
+	}
+	
+	public int getKey() {
+		return this.key;
+	}
+	
+	public void setKey(int key) {
+		this.key = key;
+	}
+	
+	public int getMask() {
+		return this.mask;
+	}
+	
+	public void setMask(int mask) {
+		this.mask = mask;
+	}
+	
+	private String getSpecialKey(){
+		for(int i = 0; i < KeyConversion.relations.length; i++){
+			if (this.key == KeyConversion.relations[i].getCode()){
+				return KeyConversion.relations[i].getKey();
+			}
+		}
+		
+		return null;
+	}
+	
+	private String getSpecialMask(){
+		String mask = new String();
+		for(int i = 0; i < KeyConversion.relations.length; i++){
+			if ( (this.mask & KeyConversion.relations[i].getCode()) == KeyConversion.relations[i].getCode()){
+				mask += KeyConversion.relations[i].getKey() + MASK_SEPARATOR;
+			}
+		}
+		return mask;
+	}
+	
+	public boolean isSameAs(KeyBinding kb){
+		if( kb != null ){
+			return (this.key == kb.key && this.mask == kb.mask);
+		}
+		return false;
+	}
+	
+	public String toString(){
+		String mask = getSpecialMask();
+		String key = getSpecialKey();
+		return (key != null ? (mask + key) : (mask + (char)this.key) );
+	}
+	
+	public Object clone(){
+		return new KeyBinding(getKey(),getMask());
+	}
+	
+	public static KeyBinding parse(String keyString){
+		KeyBinding keybinding = new KeyBinding();
+		
+		// process mask
+		int maskCode=0;
+		String key = keyString;
+		if (keyString.indexOf(MASK_SEPARATOR)!= -1){
+			StringTokenizer st = new StringTokenizer(keyString,MASK_SEPARATOR);
+			while(st.hasMoreTokens()){
+				String token = st.nextToken();
+				
+				// only process if this is not the last token
+				if (st.hasMoreTokens()){
+					// add the mask
+					maskCode |= getSpecialCode(token);
+				}
+				else {
+					key = token;
+				}
+			}
+		}
+		
+		keybinding.setMask(maskCode);
+		
+		// process key
+		int keycode = getSpecialCode(key);
+		if (keycode == 0)
+			keycode = getKeyCode(key);
+		
+		keybinding.setKey(keycode);
+		
+		return keybinding;
+	}
+	
+	private static int getKeyCode(String key){
+		return key.charAt(0);
+	}
+	
+	private static int getSpecialCode(String key){
+		for(int i = 0; i < KeyConversion.relations.length; i++){
+			if (KeyConversion.relations[i].getKey().equals(key)){
+				return KeyConversion.relations[i].getCode();
+			}
+		}
+		return 0;
+	}
+	
+}
+
+class KeyConversion {
+	
+	protected static final KeyConversion[] relations = new KeyConversion[]{
+		new KeyConversion("F1",KeyBindingConstants.F1),
+		new KeyConversion("F2",KeyBindingConstants.F2),
+		new KeyConversion("F3",KeyBindingConstants.F3),
+		new KeyConversion("F4",KeyBindingConstants.F4),
+		new KeyConversion("F5",KeyBindingConstants.F5),
+		new KeyConversion("F6",KeyBindingConstants.F6),
+		new KeyConversion("F7",KeyBindingConstants.F7),
+		new KeyConversion("F8",KeyBindingConstants.F8),
+		new KeyConversion("F9",KeyBindingConstants.F9),
+		new KeyConversion("F10",KeyBindingConstants.F10),
+		new KeyConversion("F11",KeyBindingConstants.F11),
+		new KeyConversion("F12",KeyBindingConstants.F12),
+		new KeyConversion("Esc",KeyBindingConstants.ESC),
+		new KeyConversion("Pause",KeyBindingConstants.PAUSE),
+		new KeyConversion("Print",KeyBindingConstants.PRINT_SCREEN),
+		new KeyConversion("Ins",KeyBindingConstants.INSERT),
+		new KeyConversion("Del",KeyBindingConstants.DELETE),
+		new KeyConversion("Home",KeyBindingConstants.HOME),
+		new KeyConversion("PgUp",KeyBindingConstants.PAGE_UP),
+		new KeyConversion("PgDn",KeyBindingConstants.PAGE_DOWN),
+		new KeyConversion("End",KeyBindingConstants.END),
+		new KeyConversion("Up",KeyBindingConstants.UP),
+		new KeyConversion("Down",KeyBindingConstants.DOWN),
+		new KeyConversion("Left",KeyBindingConstants.LEFT),
+		new KeyConversion("Right",KeyBindingConstants.RIGHT),
+		new KeyConversion("Control",KeyBindingConstants.CONTROL),
+		new KeyConversion("Shift",KeyBindingConstants.SHIFT),
+		new KeyConversion("Alt",KeyBindingConstants.ALT),
+		new KeyConversion("Tab",KeyBindingConstants.TAB),
+		new KeyConversion("Space",KeyBindingConstants.SPACE),
+		new KeyConversion("Enter",KeyBindingConstants.ENTER),
+		new KeyConversion("*",KeyBindingConstants.KEYPAD_MULTIPLY),
+		new KeyConversion("/",KeyBindingConstants.KEYPAD_DIVIDE),
+		new KeyConversion(".",KeyBindingConstants.KEYPAD_DECIMAL),
+	};
+	
+	private String key;
+	private int code;
+	
+	private KeyConversion(String key,int code){
+		this.key = key;
+		this.code = code;
+	}
+	
+	public String getKey(){
+		return this.key;
+	}
+	
+	public int getCode(){
+		return this.code;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingAction.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingAction.java
new file mode 100644
index 0000000..7541702
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingAction.java
@@ -0,0 +1,28 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+public class KeyBindingAction {
+	
+	private String action;
+	private KeyBinding keyBinding;
+	
+	public KeyBindingAction(String action,KeyBinding keyBinding){
+		this.action = action;
+		this.keyBinding = keyBinding;
+	}
+	
+	public String getAction() {
+		return this.action;
+	}
+	
+	public void setAction(String action) {
+		this.action = action;
+	}
+	
+	public KeyBinding getKeyBinding() {
+		return this.keyBinding;
+	}
+	
+	public void setKeyBinding(KeyBinding keyBinding) {
+		this.keyBinding = keyBinding;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionList.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionList.java
new file mode 100644
index 0000000..640074f
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionList.java
@@ -0,0 +1,44 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.Action;
+import org.herac.tuxguitar.app.actions.measure.GoNextMeasureAction;
+import org.herac.tuxguitar.app.actions.measure.GoPreviousMeasureAction;
+import org.herac.tuxguitar.app.actions.transport.TransportPlayAction;
+
+public class KeyBindingActionList {
+	
+	private static KeyBindingAction[] KB_ACTIONS = new KeyBindingAction[]{
+		new KeyBindingAction(GoPreviousMeasureAction.NAME,new KeyBinding(KeyBindingConstants.LEFT,0)),
+		new KeyBindingAction(GoNextMeasureAction.NAME,new KeyBinding(KeyBindingConstants.RIGHT,0)),
+		new KeyBindingAction(TransportPlayAction.NAME,new KeyBinding(KeyBindingConstants.SPACE,0)),
+
+	};
+	
+	public static boolean isReserved(KeyBinding kb){
+		for(int i = 0;i < KB_ACTIONS.length;i++){
+			if(kb.isSameAs(KB_ACTIONS[i].getKeyBinding())){
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public static Action getActionForKeyBinding(KeyBinding kb){
+		for(int i = 0;i < KB_ACTIONS.length;i++){
+			if(kb.isSameAs(KB_ACTIONS[i].getKeyBinding())){
+				return TuxGuitar.instance().getAction(KB_ACTIONS[i].getAction());
+			}
+		}
+		return null;
+	}
+	
+	public static KeyBinding getKeyBindingForAction(String action){
+		for(int i = 0;i < KB_ACTIONS.length;i++){
+			if(action.equals(KB_ACTIONS[i].getAction())){
+				return KB_ACTIONS[i].getKeyBinding();
+			}
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionManager.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionManager.java
new file mode 100644
index 0000000..ef6a8b2
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionManager.java
@@ -0,0 +1,45 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+import java.awt.Component;
+import java.awt.event.KeyAdapter;
+import java.awt.event.KeyEvent;
+
+import org.herac.tuxguitar.app.actions.Action;
+
+public class KeyBindingActionManager {
+	
+	private KeyBindingListener listener;
+	
+	public KeyBindingActionManager(){
+		this.init();
+	}
+	
+	public void init(){
+		this.listener = new KeyBindingListener();
+	}
+	
+	public Action getActionForKeyBinding(KeyBinding kb){
+		return KeyBindingActionList.getActionForKeyBinding(kb);
+	}
+	
+	public KeyBinding getKeyBindingForAction(String action){
+		return KeyBindingActionList.getKeyBindingForAction(action);
+	}
+	
+	public void appendListenersTo(Component control){
+		control.addKeyListener(this.listener);
+	}
+	
+	protected class KeyBindingListener extends KeyAdapter {
+		
+		public void keyPressed(KeyEvent event) {
+			KeyBinding kb = new KeyBinding();
+			kb.setKey(event.getKeyCode());
+			kb.setMask(event.getModifiersEx());
+			Action action = getActionForKeyBinding(kb);
+			if (action != null){
+				action.process(event);
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingConstants.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingConstants.java
new file mode 100644
index 0000000..2d34a5f
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingConstants.java
@@ -0,0 +1,89 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+import java.awt.event.KeyEvent;
+
+public class KeyBindingConstants{
+	public static final int F1 = KeyEvent.VK_F1;
+	public static final int F2 = KeyEvent.VK_F2;
+	public static final int F3 = KeyEvent.VK_F3;
+	public static final int F4 = KeyEvent.VK_F4;
+	public static final int F5 = KeyEvent.VK_F5;
+	public static final int F6 = KeyEvent.VK_F6;
+	public static final int F7 = KeyEvent.VK_F7;
+	public static final int F8 = KeyEvent.VK_F8;
+	public static final int F9 = KeyEvent.VK_F9;
+	public static final int F10 = KeyEvent.VK_F10;
+	public static final int F11 = KeyEvent.VK_F11;
+	public static final int F12 = KeyEvent.VK_F12;
+	public static final int ESC = KeyEvent.VK_ESCAPE;
+	public static final int PAUSE = KeyEvent.VK_PAUSE;
+	public static final int PRINT_SCREEN = KeyEvent.VK_PRINTSCREEN;
+	public static final int INSERT = KeyEvent.VK_INSERT;
+	public static final int DELETE = KeyEvent.VK_DELETE;
+	public static final int HOME = KeyEvent.VK_HOME;
+	public static final int PAGE_UP = KeyEvent.VK_PAGE_UP;
+	public static final int PAGE_DOWN = KeyEvent.VK_PAGE_DOWN;
+	public static final int END = KeyEvent.VK_END;
+	public static final int ALT = KeyEvent.ALT_DOWN_MASK;
+	public static final int CONTROL = KeyEvent.CTRL_DOWN_MASK;
+	public static final int SHIFT = KeyEvent.SHIFT_DOWN_MASK;
+	public static final int TAB = KeyEvent.VK_TAB;
+	public static final int BACKSPACE = KeyEvent.VK_BACK_SPACE;
+	public static final int SPACE = KeyEvent.VK_SPACE;
+	public static final int ENTER = KeyEvent.VK_ENTER;
+	public static final int UP = KeyEvent.VK_UP;
+	public static final int DOWN = KeyEvent.VK_DOWN;
+	public static final int LEFT = KeyEvent.VK_LEFT;
+	public static final int RIGHT = KeyEvent.VK_RIGHT;
+	public static final int PLUS = KeyEvent.VK_ADD;
+	public static final int MINUS = KeyEvent.VK_SUBTRACT;
+    public static final int KEY_A = KeyEvent.VK_A;
+    public static final int KEY_B = KeyEvent.VK_B;
+    public static final int KEY_C = KeyEvent.VK_C;
+    public static final int KEY_D = KeyEvent.VK_D;
+    public static final int KEY_E = KeyEvent.VK_E;
+    public static final int KEY_F = KeyEvent.VK_F;
+    public static final int KEY_G = KeyEvent.VK_G;
+    public static final int KEY_H = KeyEvent.VK_H;
+    public static final int KEY_I = KeyEvent.VK_I;
+    public static final int KEY_J = KeyEvent.VK_J;
+    public static final int KEY_K = KeyEvent.VK_K;
+    public static final int KEY_L = KeyEvent.VK_L;
+    public static final int KEY_M = KeyEvent.VK_M;
+    public static final int KEY_N = KeyEvent.VK_N;
+    public static final int KEY_O = KeyEvent.VK_O;
+    public static final int KEY_P = KeyEvent.VK_P;
+    public static final int KEY_Q = KeyEvent.VK_Q;
+    public static final int KEY_R = KeyEvent.VK_R;
+    public static final int KEY_S = KeyEvent.VK_S;
+    public static final int KEY_T = KeyEvent.VK_T;
+    public static final int KEY_U = KeyEvent.VK_U;
+    public static final int KEY_V = KeyEvent.VK_V;
+    public static final int KEY_W = KeyEvent.VK_W;
+    public static final int KEY_X = KeyEvent.VK_X;
+    public static final int KEY_Y = KeyEvent.VK_Y;
+    public static final int KEY_Z = KeyEvent.VK_Z;
+	public static final int NUMBER_0 = KeyEvent.VK_0;
+	public static final int NUMBER_1 = KeyEvent.VK_1;
+	public static final int NUMBER_2 = KeyEvent.VK_2;
+	public static final int NUMBER_3 = KeyEvent.VK_3;
+	public static final int NUMBER_4 = KeyEvent.VK_4;
+	public static final int NUMBER_5 = KeyEvent.VK_5;
+	public static final int NUMBER_6 = KeyEvent.VK_6;
+	public static final int NUMBER_7 = KeyEvent.VK_7;
+	public static final int NUMBER_8 = KeyEvent.VK_8;
+	public static final int NUMBER_9 = KeyEvent.VK_9;
+	public static final int KEYPAD_0 = KeyEvent.VK_NUMPAD0;
+	public static final int KEYPAD_1 = KeyEvent.VK_NUMPAD1;
+	public static final int KEYPAD_2 = KeyEvent.VK_NUMPAD2;
+	public static final int KEYPAD_3 = KeyEvent.VK_NUMPAD3;
+	public static final int KEYPAD_4 = KeyEvent.VK_NUMPAD4;
+	public static final int KEYPAD_5 = KeyEvent.VK_NUMPAD5;
+	public static final int KEYPAD_6 = KeyEvent.VK_NUMPAD6;
+	public static final int KEYPAD_7 = KeyEvent.VK_NUMPAD7;
+	public static final int KEYPAD_8 = KeyEvent.VK_NUMPAD8;
+	public static final int KEYPAD_9 = KeyEvent.VK_NUMPAD9;
+	public static final int KEYPAD_MULTIPLY = KeyEvent.VK_MULTIPLY;
+	public static final int KEYPAD_DIVIDE = KeyEvent.VK_DIVIDE;
+	public static final int KEYPAD_DECIMAL = KeyEvent.VK_DECIMAL;
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/toolbar/TGToolBar.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/toolbar/TGToolBar.java
new file mode 100644
index 0000000..bc6eaf4
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/toolbar/TGToolBar.java
@@ -0,0 +1,106 @@
+package org.herac.tuxguitar.app.toolbar;
+
+import java.awt.Color;
+import java.awt.Component;
+import java.awt.Graphics;
+import java.awt.Insets;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+
+import javax.swing.AbstractButton;
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JToggleButton;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.actions.settings.SettingsAction;
+import org.herac.tuxguitar.app.actions.track.SelectTrackAction;
+import org.herac.tuxguitar.app.actions.transport.TransportPlayAction;
+import org.herac.tuxguitar.app.editors.tab.Tablature;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+import org.herac.tuxguitar.app.util.TGResourceUtils;
+
+public class TGToolBar {
+	
+	private JPanel buttons;
+	private AbstractButton buttonPlay;
+	private AbstractButton buttonTrack;
+	private AbstractButton buttonSetup;
+	
+	public void init() {
+		this.buttonPlay = getImageButton(new JToggleButton(), "transport_play", ".png");
+		this.buttonPlay.addActionListener( TuxGuitar.instance().getAction( TransportPlayAction.NAME ) );
+		
+		this.buttonTrack = getLinkButton ( getImageButton(new JButton(), null,null) );
+		this.buttonTrack.addActionListener( TuxGuitar.instance().getAction( SelectTrackAction.NAME ) );
+		
+		this.buttonSetup = getImageButton(new JButton(), "setup", ".png");
+		this.buttonSetup.addActionListener( TuxGuitar.instance().getAction( SettingsAction.NAME ) );
+	}
+	
+	public Component getPanel(){
+		if( this.buttons == null ){
+			this.init();
+			
+			this.buttons = new JPanel(){
+				
+				private static final long serialVersionUID = 9136810316642761074L;
+
+				public void update( Graphics g ){
+					this.paint( g );
+				}
+			};
+			this.buttons.setLayout( new BoxLayout( this.buttons, BoxLayout.LINE_AXIS ) );
+			this.buttons.add( this.buttonPlay  );
+			this.buttons.add( Box.createHorizontalGlue() );
+			this.buttons.add( this.buttonTrack  );
+			this.buttons.add( Box.createHorizontalGlue() );
+			this.buttons.add( this.buttonSetup  );
+			this.buttons.setBackground( TGConfig.COLOR_WIDGET_BACKGROUND );
+		}
+		return this.buttons;
+	}
+	
+	public void updateItems(){
+		Tablature tablature = TuxGuitar.instance().getTablatureEditor().getTablature();
+		this.buttonTrack.setForeground( Color.BLACK );
+		if(this.buttonTrack.getText() == null || !this.buttonTrack.getText().equals( tablature.getCaret().getTrack().getName() )){
+			this.buttonTrack.setText( tablature.getCaret().getTrack().getName());
+			this.buttonTrack.getParent().invalidate();
+			this.buttonTrack.getParent().validate();
+			this.buttonTrack.getParent().doLayout();
+		}
+		this.buttonPlay.setSelected( TuxGuitar.instance().getPlayer().isRunning() );
+	}
+	
+	private AbstractButton getImageButton( AbstractButton button, String iconPrefix, String iconSuffix ){
+		button.setHorizontalTextPosition(JButton.CENTER);
+		button.setVerticalTextPosition(JButton.CENTER);
+		button.setBorderPainted( false );
+		button.setContentAreaFilled( false );
+		button.setFocusPainted( false );
+		button.setMargin( new Insets(0,0,0,0) );
+		button.setIcon( TGResourceUtils.loadIcon( iconPrefix + iconSuffix ) );
+		button.setPressedIcon( TGResourceUtils.loadIcon( iconPrefix + "_pressed" + iconSuffix ) );
+		button.setRolloverIcon( TGResourceUtils.loadIcon( iconPrefix + "_over" + iconSuffix ) );
+		button.setSelectedIcon( TGResourceUtils.loadIcon( iconPrefix + "_selected" + iconSuffix ) );
+		button.setRolloverSelectedIcon( TGResourceUtils.loadIcon( iconPrefix + "_selected_over" + iconSuffix ) );
+		return button;
+	}
+	
+	private AbstractButton getLinkButton( final AbstractButton button  ){
+		button.setFont( TGConfig.FONT_WIDGETS );
+		button.setForeground( Color.BLACK );
+		button.addMouseListener( new MouseAdapter() {
+			public void mouseExited(MouseEvent e) {
+				button.setForeground( Color.BLACK );
+			}
+			public void mouseEntered(MouseEvent e) {
+				button.setForeground( Color.LIGHT_GRAY );
+			}
+		});
+		return button;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/transport/TGTransport.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/transport/TGTransport.java
new file mode 100644
index 0000000..fc19052
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/transport/TGTransport.java
@@ -0,0 +1,76 @@
+/*
+ * Created on 20-mar-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.transport;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.MidiTickUtil;
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class TGTransport{
+	
+	public TGTransport() {
+		super();
+	}
+	
+	protected TGSongManager getSongManager(){
+		return TuxGuitar.instance().getSongManager();
+	}
+	
+	public void gotoFirst(){
+		gotoMeasure(getSongManager().getFirstMeasureHeader(),true);
+	}
+	
+	public void gotoLast(){
+		gotoMeasure(getSongManager().getLastMeasureHeader(),true) ;
+	}
+	
+	public void gotoNext(){
+		MidiPlayer player = TuxGuitar.instance().getPlayer();
+		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition()));
+		if(header != null){
+			gotoMeasure(getSongManager().getNextMeasureHeader(header),true);
+		}
+	}
+	
+	public void gotoPrevious(){
+		MidiPlayer player = TuxGuitar.instance().getPlayer();
+		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition()));
+		if(header != null){
+			gotoMeasure(getSongManager().getPrevMeasureHeader(header),true);
+		}
+	}
+	
+	public void gotoMeasure(TGMeasureHeader header){
+		gotoMeasure(header,false);
+	}
+	
+	public void gotoMeasure(TGMeasureHeader header,boolean moveCaret){
+		if(header != null){
+			TGMeasure playingMeasure = null;
+			if( TuxGuitar.instance().getPlayer().isRunning() ){
+				TuxGuitar.instance().getEditorCache().updatePlayMode();
+				playingMeasure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
+			}
+			if( playingMeasure == null || playingMeasure.getHeader().getNumber() != header.getNumber() ){
+				TuxGuitar.instance().getPlayer().setTickPosition(MidiTickUtil.getTick(header.getStart()));
+				if(moveCaret){
+					TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().goToTickPosition();
+					TuxGuitar.instance().updateCache(true);
+				}
+			}
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/util/MidiTickUtil.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/util/MidiTickUtil.java
new file mode 100644
index 0000000..55b9e27
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/util/MidiTickUtil.java
@@ -0,0 +1,70 @@
+package org.herac.tuxguitar.app.util;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.player.base.MidiRepeatController;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+public class MidiTickUtil {
+	
+	public static long getStart(long tick){
+		long startPoint = getStartPoint();
+		long start = startPoint;
+		long length = 0;
+		
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		MidiRepeatController controller = new MidiRepeatController(manager.getSong(), getSHeader() , getEHeader() );
+		while(!controller.finished()){
+			TGMeasureHeader header = manager.getSong().getMeasureHeader(controller.getIndex());
+			controller.process();
+			if(controller.shouldPlay()){
+				
+				start += length;
+				length = header.getLength();
+				
+				//verifico si es el compas correcto
+				if(tick >= start && tick < (start + length )){
+					return header.getStart() + (tick - start);
+				}
+			}
+		}
+		return ( tick < startPoint ? startPoint : start );
+	}
+	
+	public static long getTick(long start){
+		long startPoint = getStartPoint();
+		long tick = startPoint;
+		long length = 0;
+		
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		MidiRepeatController controller = new MidiRepeatController(manager.getSong(), getSHeader() , getEHeader() );
+		while(!controller.finished()){
+			TGMeasureHeader header = manager.getSong().getMeasureHeader(controller.getIndex());
+			controller.process();
+			if(controller.shouldPlay()){
+				
+				tick += length;
+				length = header.getLength();
+				
+				//verifico si es el compas correcto
+				if(start >= header.getStart() && start < (header.getStart() + length )){
+					return tick;
+				}
+			}
+		}
+		return ( start < startPoint ? startPoint : tick );
+	}
+	
+	private static long getStartPoint(){
+		TuxGuitar.instance().getPlayer().updateLoop( false );
+		return TuxGuitar.instance().getPlayer().getLoopSPosition();
+	}
+	
+	public static int getSHeader() {
+		return TuxGuitar.instance().getPlayer().getLoopSHeader();
+	}
+	
+	public static int getEHeader() {
+		return TuxGuitar.instance().getPlayer().getLoopEHeader();
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/util/SyncThread.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/util/SyncThread.java
new file mode 100644
index 0000000..155ae31
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/util/SyncThread.java
@@ -0,0 +1,40 @@
+/*
+ * Created on 09-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.util;
+
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SyncThread extends Thread {
+	
+	private TGSynchronizer.TGRunnable runnable;
+	
+	public SyncThread(TGSynchronizer.TGRunnable runnable) {
+		this.runnable = runnable;
+	}
+	
+	public SyncThread(final Runnable runnable) {
+		this(new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException{
+				runnable.run();
+			}
+		});
+	}
+	
+	public void run() {
+		try {
+			TGSynchronizer.instance().execute(this.runnable);
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/app/util/TGResourceUtils.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/util/TGResourceUtils.java
new file mode 100644
index 0000000..ee10987
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/app/util/TGResourceUtils.java
@@ -0,0 +1,24 @@
+package org.herac.tuxguitar.app.util;
+
+import java.net.URL;
+
+import javax.swing.Icon;
+import javax.swing.ImageIcon;
+
+public class TGResourceUtils {
+	
+	public static Icon loadIcon(String resource){
+		try{
+			if( resource != null ){
+				URL url = TGResourceUtils.class.getClassLoader().getResource("skin/" + resource );
+				if( url != null ){
+					return new ImageIcon( url );
+				}
+			}
+		}catch( Throwable throwable ){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGColor.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGColor.java
new file mode 100644
index 0000000..27f28a8
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGColor.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGColor extends TGResource {
+	
+	public int getRed();
+	
+	public int getGreen();
+	
+	public int getBlue();
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGColorModel.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGColorModel.java
new file mode 100644
index 0000000..61143c5
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGColorModel.java
@@ -0,0 +1,42 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGColorModel {
+	
+	private int red;
+	private int green;
+	private int blue;
+	
+	public TGColorModel(){
+		this(0,0,0);
+	}
+	
+	public TGColorModel(int red, int green, int blue){
+		this.red = red;
+		this.green = green;
+		this.blue = blue;
+	}
+	
+	public int getRed() {
+		return this.red;
+	}
+	
+	public void setRed(int red) {
+		this.red = red;
+	}
+	
+	public int getGreen() {
+		return this.green;
+	}
+	
+	public void setGreen(int green) {
+		this.green = green;
+	}
+	
+	public int getBlue() {
+		return this.blue;
+	}
+	
+	public void setBlue(int blue) {
+		this.blue = blue;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGDimension.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGDimension.java
new file mode 100644
index 0000000..ea56542
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGDimension.java
@@ -0,0 +1,32 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGDimension {
+	
+	private int width;
+	private int height;
+	
+	public TGDimension(int width,int height){
+		this.width = width;
+		this.height = height;
+	}
+	
+	public TGDimension(){
+		this(0,0);
+	}
+	
+	public int getWidth() {
+		return this.width;
+	}
+	
+	public void setWidth(int width) {
+		this.width = width;
+	}
+	
+	public int getHeight() {
+		return this.height;
+	}
+	
+	public void setHeight(int height) {
+		this.height = height;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGFont.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGFont.java
new file mode 100644
index 0000000..5b66c35
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGFont.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGFont extends TGResource {
+	
+	public String getName();
+	
+	public int getHeight();
+	
+	public boolean isBold();
+	
+	public boolean isItalic();
+	
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGFontModel.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGFontModel.java
new file mode 100644
index 0000000..80aedbd
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGFontModel.java
@@ -0,0 +1,52 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGFontModel {
+	
+	private String name;
+	private int height;
+	private boolean bold;
+	private boolean italic;
+	
+	public TGFontModel(){
+		this(null,0,false,false);
+	}
+	
+	public TGFontModel(String name, int height, boolean bold, boolean italic){
+		this.name = name;
+		this.height = height;
+		this.bold = bold;
+		this.italic = italic;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public void setName(String name) {
+		this.name = name;
+	}
+	
+	public int getHeight() {
+		return this.height;
+	}
+	
+	public void setHeight(int height) {
+		this.height = height;
+	}
+	
+	public boolean isBold() {
+		return this.bold;
+	}
+	
+	public void setBold(boolean bold) {
+		this.bold = bold;
+	}
+	
+	public boolean isItalic() {
+		return this.italic;
+	}
+	
+	public void setItalic(boolean italic) {
+		this.italic = italic;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGImage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGImage.java
new file mode 100644
index 0000000..5048162
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGImage.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGImage extends TGResource,TGPainterFactory {
+	
+	public int getWidth();
+	
+	public int getHeight();
+	
+	public void applyTransparency( TGColor background );
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGPainter.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGPainter.java
new file mode 100644
index 0000000..c53567f
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGPainter.java
@@ -0,0 +1,73 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGPainter extends TGResourceFactory, TGResource {
+	
+	public static final int PATH_DRAW = 0x01;
+	
+	public static final int PATH_FILL = 0x02;
+	
+	public void initPath(int style);
+	
+	public void initPath();
+	
+	public void closePath();
+	
+	public void drawString(String string, int x, int y);
+	
+	public void drawString(String string, int x, int y, boolean isTransparent);
+	
+	public void drawImage(TGImage image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight);
+	
+	public void drawImage(TGImage image, int x, int y);
+	
+	public void drawPolygon(int[] arg0);
+	
+	public void fillPolygon(int[] arg0);
+	
+	public void cubicTo(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5);
+	
+	public void lineTo(float arg0, float arg1);
+	
+	public void moveTo(float arg0, float arg1);
+	
+	public void addString(String arg0, float arg1, float arg2, TGFont arg3);
+	
+	public void addArc(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5);
+	
+	public void addOval(float arg0, float arg1, float arg2, float arg3);
+	
+	public void addRectangle(float x,float y,float width,float height);
+	
+	public void setFont(TGFont font);
+	
+	public void setForeground(TGColor color);
+	
+	public void setBackground(TGColor color);
+	
+	public void setLineWidth(int lineWidth);
+	
+	public void setLineStyleSolid();
+	
+	public void setLineStyleDot();
+	
+	public void setLineStyleDash();
+	
+	public void setLineStyleDashDot();
+	
+	public void setAlpha(int alpha);
+	
+	public void setAntialias(boolean enabled);
+	
+	public void setAdvanced(boolean advanced);
+	
+	public int getFontSize();
+	
+	public int getFMHeight();
+	
+	public int getFMAscent();
+	
+	public int getFMDescent();
+	
+	public int getFMWidth( String text );
+	
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGPainterFactory.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGPainterFactory.java
new file mode 100644
index 0000000..7982d47
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGPainterFactory.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGPainterFactory {
+	
+	public TGPainter createPainter();
+	
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGPoint.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGPoint.java
new file mode 100644
index 0000000..4cf4b83
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGPoint.java
@@ -0,0 +1,32 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGPoint {
+	
+	private int x;
+	private int y;
+	
+	public TGPoint(int x,int y){
+		this.x = x;
+		this.y = y;
+	}
+	
+	public TGPoint(){
+		this(0,0);
+	}
+	
+	public int getX() {
+		return this.x;
+	}
+	
+	public void setX(int x) {
+		this.x = x;
+	}
+	
+	public int getY() {
+		return this.y;
+	}
+	
+	public void setY(int y) {
+		this.y = y;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGRectangle.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGRectangle.java
new file mode 100644
index 0000000..ce461f6
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGRectangle.java
@@ -0,0 +1,48 @@
+package org.herac.tuxguitar.graphics;
+
+public class TGRectangle {
+	
+	private TGPoint location;
+	private TGDimension size;
+	
+	public TGRectangle(int x, int y, int width, int height){
+		this.location = new TGPoint(x,y);
+		this.size = new TGDimension(width,height);
+	}
+	
+	public TGRectangle(){
+		this(0,0,0,0);
+	}
+	
+	public int getX() {
+		return this.location.getX();
+	}
+	
+	public void setX(int x) {
+		this.location.setX(x);
+	}
+	
+	public int getY() {
+		return this.location.getY();
+	}
+	
+	public void setY(int y) {
+		this.location.setY(y);
+	}
+	
+	public int getWidth() {
+		return this.size.getWidth();
+	}
+	
+	public void setWidth(int width) {
+		this.size.setWidth(width);
+	}
+	
+	public int getHeight() {
+		return this.size.getHeight();
+	}
+	
+	public void setHeight(int height) {
+		this.size.setHeight(height);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGResource.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGResource.java
new file mode 100644
index 0000000..bda9047
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGResource.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGResource {
+	
+	public void dispose();
+	
+	public boolean isDisposed();
+	
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGResourceFactory.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGResourceFactory.java
new file mode 100644
index 0000000..7f69e6b
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/TGResourceFactory.java
@@ -0,0 +1,15 @@
+package org.herac.tuxguitar.graphics;
+
+public interface TGResourceFactory {
+	
+	public TGImage createImage( int width, int height );
+	
+	public TGColor createColor(TGColorModel colorModel);
+	
+	public TGColor createColor( int red, int green, int blue);
+	
+	public TGFont createFont(TGFontModel fontModel);
+	
+	public TGFont createFont(String name, int height, boolean bold, boolean italic);
+	
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGBeatGroup.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGBeatGroup.java
new file mode 100644
index 0000000..2e81cd8
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGBeatGroup.java
@@ -0,0 +1,202 @@
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class TGBeatGroup {
+	private static final int SCORE_MIDDLE_KEYS[] = new int[]{55,40,40,50};
+	private static final int SCORE_SHARP_POSITIONS[] = new int[]{7,7,6,6,5,4,4,3,3,2,2,1};
+	private static final int SCORE_FLAT_POSITIONS[] = new int[]{7,6,6,5,5,4,3,3,2,2,1,1};
+	
+	public static final int DIRECTION_NOT_SETTED = 0;
+	public static final int DIRECTION_UP = 1;
+	public static final int DIRECTION_DOWN = 2;
+	
+	private static final int UP_OFFSET = 28;
+	private static final int DOWN_OFFSET = 35;
+	
+	private int voice;
+	private int direction;
+	private List voices;
+	private TGNoteImpl firstMinNote;
+	private TGNoteImpl firstMaxNote;
+	private TGNoteImpl lastMinNote;
+	private TGNoteImpl lastMaxNote;
+	private TGNoteImpl maxNote;
+	private TGNoteImpl minNote;
+	
+	public TGBeatGroup(int voice){
+		this.voice = voice;
+		this.voices = new ArrayList();
+		this.direction = DIRECTION_NOT_SETTED;
+		this.firstMinNote = null;
+		this.firstMaxNote = null;
+		this.lastMinNote = null;
+		this.lastMaxNote = null;
+		this.maxNote = null;
+		this.minNote = null;
+	}
+	
+	public void check(TGVoiceImpl voice){
+		this.check(voice.getMaxNote());
+		this.check(voice.getMinNote());
+		this.voices.add( voice );
+		if( voice.getDirection() != TGVoice.DIRECTION_NONE ){
+			if( voice.getDirection() == TGVoice.DIRECTION_UP ){
+				this.direction = DIRECTION_UP;
+			}
+			else if( voice.getDirection() == TGVoice.DIRECTION_DOWN ){
+				this.direction = DIRECTION_DOWN;
+			}
+		}
+	}
+	
+	private void check(TGNoteImpl note){
+		int value = note.getRealValue();
+		
+		//FIRST MIN NOTE
+		if(this.firstMinNote == null || note.getVoice().getBeat().getStart() < this.firstMinNote.getVoice().getBeat().getStart()){
+			this.firstMinNote = note;
+		}else if(note.getVoice().getBeat().getStart() == this.firstMinNote.getVoice().getBeat().getStart()){
+			if(note.getRealValue() < this.firstMinNote.getRealValue()){
+				this.firstMinNote = note;
+			}
+		}
+		//FIRST MAX NOTE
+		if(this.firstMaxNote == null || note.getVoice().getBeat().getStart() < this.firstMaxNote.getVoice().getBeat().getStart()){
+			this.firstMaxNote = note;
+		}else if(note.getVoice().getBeat().getStart() == this.firstMaxNote.getVoice().getBeat().getStart()){
+			if(note.getRealValue() > this.firstMaxNote.getRealValue()){
+				this.firstMaxNote = note;
+			}
+		}
+		
+		//LAST MIN NOTE
+		if(this.lastMinNote == null || note.getVoice().getBeat().getStart() > this.lastMinNote.getVoice().getBeat().getStart()){
+			this.lastMinNote = note;
+		}else if(note.getVoice().getBeat().getStart() == this.lastMinNote.getVoice().getBeat().getStart()){
+			if(note.getRealValue() < this.lastMinNote.getRealValue()){
+				this.lastMinNote = note;
+			}
+		}
+		//LAST MIN NOTE
+		if(this.lastMaxNote == null || note.getVoice().getBeat().getStart() > this.lastMaxNote.getVoice().getBeat().getStart()){
+			this.lastMaxNote = note;
+		}else if(note.getVoice().getBeat().getStart() == this.lastMaxNote.getVoice().getBeat().getStart()){
+			if(note.getRealValue() > this.lastMaxNote.getRealValue()){
+				this.lastMaxNote = note;
+			}
+		}
+		
+		if(this.maxNote == null || value > this.maxNote.getRealValue()){
+			this.maxNote = note;
+		}
+		if(this.minNote == null || value < this.minNote.getRealValue()){
+			this.minNote = note;
+		}
+	}
+	
+	public void finish(TGLayout layout, TGMeasureImpl measure){
+		if( this.direction == DIRECTION_NOT_SETTED ){
+			if (measure.getNotEmptyVoices() > 1 ){
+				this.direction = this.voice == 0 ? DIRECTION_UP : DIRECTION_DOWN;
+			}else if ( (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+				this.direction = DIRECTION_DOWN;
+			}else{
+				int max = Math.abs(this.minNote.getRealValue() - (SCORE_MIDDLE_KEYS[measure.getClef() - 1] + 100));
+				int min = Math.abs(this.maxNote.getRealValue() - (SCORE_MIDDLE_KEYS[measure.getClef() - 1] - 100));
+				if(max > min){
+					this.direction = DIRECTION_UP;
+				}else{
+					this.direction = DIRECTION_DOWN;
+				}
+			}
+		}
+	}
+	
+	public List getVoices(){
+		return this.voices;
+	}
+	
+	public int getY1(TGLayout layout,TGNoteImpl note,int key,int clef){
+		double scale = (layout.getScoreLineSpacing() / 2.00);
+		int noteValue = note.getRealValue();
+		
+		int scoreLineY = 0;
+		if(key <= 7){
+			scoreLineY = (int)((SCORE_SHARP_POSITIONS[noteValue % 12]) * scale - (7 * (noteValue / 12)) * scale);
+		}else{
+			scoreLineY = (int)((SCORE_FLAT_POSITIONS[noteValue % 12]) * scale - (7 * (noteValue / 12)) * scale);
+		}
+		
+		scoreLineY += TGMeasureImpl.SCORE_KEY_OFFSETS[clef - 1] * scale;
+		
+		return scoreLineY;
+	}
+	
+	public int getY2(TGLayout layout,int x,int key,int clef){
+		int maxDistance = 10;
+		float upOffset = TGBeatGroup.getUpOffset(layout);
+		float downOffset = TGBeatGroup.getDownOffset(layout);
+		if(this.direction == DIRECTION_DOWN){
+			if(this.minNote != this.firstMinNote && this.minNote != this.lastMinNote){
+				return (int) (getY1(layout,this.minNote,key,clef) + downOffset);
+			}
+			
+			int y = 0;
+			int x1 = this.firstMinNote.getPosX() + this.firstMinNote.getBeatImpl().getSpacing();
+			int x2 = this.lastMinNote.getPosX() + this.lastMinNote.getBeatImpl().getSpacing();
+			int y1 =  (int) (getY1(layout,this.firstMinNote,key,clef) +  downOffset);
+			int y2 =  (int) (getY1(layout,this.lastMinNote,key,clef) +  downOffset);
+			
+			if(y1 > y2 && (y1 - y2) > maxDistance) y2 = (y1 - maxDistance);
+			if(y2 > y1 && (y2 - y1) > maxDistance) y1 = (y2 - maxDistance);
+			
+			//int y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x));
+			if( (y1 - y2) != 0 && (x1 - x2) != 0 && (x1 - x) != 0){
+				y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x));
+			}
+			return y1 - y;
+		}else if(this.maxNote != this.firstMaxNote && this.maxNote != this.lastMaxNote){
+			return (int)(getY1(layout,this.maxNote,key,clef) - upOffset);
+		}else{
+			int y = 0;
+			int x1 = this.firstMaxNote.getPosX() + this.firstMaxNote.getBeatImpl().getSpacing();
+			int x2 = this.lastMaxNote.getPosX() + this.lastMaxNote.getBeatImpl().getSpacing();
+			int y1 = (int)(getY1(layout,this.firstMaxNote,key,clef) - upOffset);
+			int y2 = (int)(getY1(layout,this.lastMaxNote,key,clef) - upOffset);
+			
+			if(y1 < y2 && (y2 - y1) > maxDistance) y2 = (y1 + maxDistance);
+			if(y2 < y1 && (y1 - y2) > maxDistance) y1 = (y2 + maxDistance);
+			
+			if( (y1 - y2) != 0 && (x1 - x2) != 0 && (x1 - x) != 0){
+				y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x));
+			}
+			return y1 - y;
+		}
+	}
+	
+	public int getDirection() {
+		return this.direction;
+	}
+	
+	public TGNoteImpl getMinNote(){
+		return this.minNote;
+	}
+	
+	public TGNoteImpl getMaxNote(){
+		return this.maxNote;
+	}
+	
+	public static float getUpOffset(TGLayout layout){
+		float scale = (layout.getScoreLineSpacing() / 8.0f);
+		return (UP_OFFSET * scale);
+	}
+	
+	public static float getDownOffset(TGLayout layout){
+		float scale = (layout.getScoreLineSpacing() / 8.0f);
+		return (DOWN_OFFSET * scale);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGBeatImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGBeatImpl.java
new file mode 100644
index 0000000..b6fac8f
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGBeatImpl.java
@@ -0,0 +1,394 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class TGBeatImpl extends TGBeat{
+	/**
+	 * desviacion a la izquierda
+	 */
+	public static final int JOINED_TYPE_NONE_LEFT = 1;
+	/**
+	 * desviacion a la derecha
+	 */
+	public static final int JOINED_TYPE_NONE_RIGHT = 2;
+	/**
+	 * Union a la izquierda
+	 */
+	public static final int JOINED_TYPE_LEFT = 3;
+	/**
+	 * Union a la derecha
+	 */
+	public static final int JOINED_TYPE_RIGHT = 4;
+	
+	private int posX;
+	private int width;
+	private TGNoteImpl maxNote;
+	private TGNoteImpl minNote;
+	private boolean[] usedStrings;
+	private int joinedType;
+	private boolean joinedGreaterThanQuarter;
+	private TGBeatImpl join1;
+	private TGBeatImpl join2;
+	private TGBeatImpl previous;
+	private TGBeatImpl next;
+	private TGBeatGroup group;
+	
+	private TGBeatSpacing bs;
+	
+	private boolean accentuated;
+	private boolean heavyAccentuated;
+	private boolean harmonic;
+	private boolean tapping;
+	private boolean slapping;
+	private boolean popping;
+	private boolean palmMute;
+	private boolean letRing;
+	private boolean vibrato;
+	private boolean trill;
+	private boolean fadeIn;
+	
+	public TGBeatImpl(TGFactory factory){
+		super(factory);
+	}
+	
+	public int getPosX() {
+		return this.posX;
+	}
+	
+	public void setPosX(int posX) {
+		this.posX = posX;
+	}
+	
+	public int getMinimumWidth() {
+		return this.width;
+	}
+	
+	public void setWidth(int width) {
+		this.width = width;
+	}
+	
+	public TGNoteImpl getMinNote(){
+		return this.minNote;
+	}
+	
+	public TGNoteImpl getMaxNote(){
+		return this.maxNote;
+	}
+	
+	public TGMeasureImpl getMeasureImpl() {
+		return (TGMeasureImpl)getMeasure();
+	}
+	
+	public boolean[] getUsedStrings() {
+		if(this.usedStrings == null){
+			this.usedStrings = new boolean[getMeasure().getTrack().stringCount()];
+		}
+		return this.usedStrings;
+	}
+	
+	public TGBeatImpl getJoin1() {
+		return this.join1;
+	}
+	
+	public void setJoin1(TGBeatImpl join1) {
+		this.join1 = join1;
+	}
+	
+	public TGBeatImpl getJoin2() {
+		return this.join2;
+	}
+	
+	public void setJoin2(TGBeatImpl join2) {
+		this.join2 = join2;
+	}
+	
+	public boolean isJoinedGreaterThanQuarter() {
+		return this.joinedGreaterThanQuarter;
+	}
+	
+	public void setJoinedGreaterThanQuarter(boolean joinedGreaterThanQuarter) {
+		this.joinedGreaterThanQuarter = joinedGreaterThanQuarter;
+	}
+	
+	public int getJoinedType() {
+		return this.joinedType;
+	}
+	
+	public void setJoinedType(int joinedType) {
+		this.joinedType = joinedType;
+	}
+	
+	public TGBeatImpl getPreviousBeat() {
+		return this.previous;
+	}
+
+	public void setPreviousBeat(TGBeatImpl previous) {
+		this.previous = previous;
+	}
+
+	public TGBeatImpl getNextBeat() {
+		return this.next;
+	}
+
+	public void setNextBeat(TGBeatImpl next) {
+		this.next = next;
+	}
+
+	public TGBeatGroup getBeatGroup() {
+		return this.group;
+	}
+	
+	public void setBeatGroup(TGBeatGroup group) {
+		this.group = group;
+	}
+	
+	public int getSpacing(){
+		return getMeasureImpl().getBeatSpacing(this);
+	}
+	
+	public boolean isPlaying(TGLayout layout){
+		//return (getMeasureImpl().isPlaying(layout) && TuxGuitar.instance().getEditorCache().isPlaying(getMeasure(),this));
+		return layout.getComponent().isRunning(this);
+	}
+	
+	public TGVoiceImpl getVoiceImpl(int index){
+		TGVoice voice = super.getVoice(index);
+		if(voice instanceof TGVoiceImpl){
+			return (TGVoiceImpl)voice;
+		}
+		return null;
+	}
+	
+	public void reset(){
+		this.maxNote = null;
+		this.minNote = null;
+		this.usedStrings = new boolean[getMeasure().getTrack().stringCount()];
+	}
+	
+	public void check( TGLayout layout , TGNoteImpl note){
+		int value = note.getRealValue();
+		if(this.maxNote == null || value > this.maxNote.getRealValue()){
+			this.maxNote = note;
+		}
+		if(this.minNote == null || value < this.minNote.getRealValue()){
+			this.minNote = note;
+		}
+		this.getUsedStrings();
+		this.usedStrings[note.getString() - 1] = true;
+	}
+	
+	public void resetEffectsSpacing( TGLayout layout ){
+		this.bs = new TGBeatSpacing( layout );
+		this.accentuated = false;
+		this.heavyAccentuated = false;
+		this.harmonic = false;
+		this.tapping = false;
+		this.slapping = false;
+		this.popping = false;
+		this.palmMute = false;
+		this.letRing = false;
+		this.fadeIn = false;
+		this.vibrato = false;
+		this.trill = false;
+	}
+	
+	public void updateEffectsSpacing(TGLayout layout,TGNoteEffect effect){
+		if(effect.isAccentuatedNote()){
+			this.accentuated = true;
+		}
+		if(effect.isHeavyAccentuatedNote()){
+			this.heavyAccentuated = true;
+		}
+		if(effect.isHarmonic() && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+			this.harmonic = true;
+		}
+		if(effect.isTapping()){
+			this.tapping = true;
+		}
+		if(effect.isSlapping()){
+			this.slapping = true;
+		}
+		if(effect.isPopping()){
+			this.popping = true;
+		}
+		if(effect.isPalmMute()){
+			this.palmMute = true;
+		}
+		if(effect.isLetRing()){
+			this.letRing = true;
+		}
+		if(effect.isFadeIn()){
+			this.fadeIn = true;
+		}
+		if(effect.isVibrato()){
+			this.vibrato = true;
+		}
+		if(effect.isTrill()){
+			this.trill = true;
+		}
+	}
+	
+	public int getEffectsSpacing(TGLayout layout){
+		if(this.accentuated){
+			this.bs.setSize(TGBeatSpacing.POSITION_ACCENTUATED_EFFECT,layout.getEffectSpacing());
+		}
+		if(this.heavyAccentuated){
+			this.bs.setSize(TGBeatSpacing.POSITION_HEAVY_ACCENTUATED_EFFECT,layout.getEffectSpacing());
+		}
+		if(this.harmonic){
+			this.bs.setSize(TGBeatSpacing.POSITION_HARMONIC_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.tapping){
+			this.bs.setSize(TGBeatSpacing.POSITION_TAPPING_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.slapping){
+			this.bs.setSize(TGBeatSpacing.POSITION_SLAPPING_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.popping){
+			this.bs.setSize(TGBeatSpacing.POSITION_POPPING_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.palmMute){
+			this.bs.setSize(TGBeatSpacing.POSITION_PALM_MUTE_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.letRing){
+			this.bs.setSize(TGBeatSpacing.POSITION_LET_RING_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.fadeIn){
+			this.bs.setSize(TGBeatSpacing.POSITION_FADE_IN,layout.getEffectSpacing());
+		}
+		if(this.vibrato){
+			this.bs.setSize(TGBeatSpacing.POSITION_VIBRATO_EFFEC,layout.getEffectSpacing());
+		}
+		if(this.trill){
+			this.bs.setSize(TGBeatSpacing.POSITION_TRILL_EFFEC,layout.getEffectSpacing());
+		}
+		return this.bs.getSize();
+	}
+	
+	public void paint(TGLayout layout,TGPainter painter, int fromX, int fromY/*,boolean playMode*/) {
+		if(!layout.isPlayModeEnabled() && (layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+			paintExtraLines(painter, layout,fromX, fromY);
+		}
+		for(int v = 0; v < TGBeat.MAX_VOICES; v ++){
+			getVoiceImpl(v).paint(layout, painter, fromX, fromY);
+		}
+		if(!layout.isPlayModeEnabled()){
+			if(isChordBeat()){
+				TGChordImpl chord = (TGChordImpl)getChord();
+				chord.paint(layout,painter,fromX,fromY);
+			}
+			if(getStroke().getDirection() != TGStroke.STROKE_NONE){
+				paintStroke(layout, painter, fromX, fromY);
+			}
+		}
+	}
+	
+	public void paintExtraLines(TGPainter painter,TGLayout layout,int fromX, int fromY){
+		if(!isRestBeat()){
+			int scoreY = (fromY + getMeasureImpl().getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES));
+			paintExtraLines(painter,layout,getMinNote(), fromX, scoreY);
+			paintExtraLines(painter,layout,getMaxNote(), fromX, scoreY);
+		}
+	}
+	
+	private void paintExtraLines(TGPainter painter,TGLayout layout,TGNoteImpl note,int fromX,int fromY){
+		float scale = layout.getScale();
+		int y = fromY + note.getScorePosY();
+		int x = fromX + getPosX() + getSpacing();
+		float x1 = x - (4 * scale);
+		float x2 = x + (12 * scale);
+		
+		int scoreLineSpacing = layout.getScoreLineSpacing();
+		
+		layout.setLineStyle(painter);
+		if(y < fromY){
+			for(int i = fromY;i > y;i -= scoreLineSpacing){
+				painter.initPath();
+				painter.setAntialias(false);
+				painter.moveTo(x1,i);
+				painter.lineTo(x2,i);
+				painter.closePath();
+			}
+		}else if(y > (fromY + (scoreLineSpacing * 4))){
+			for(int i = (fromY +(scoreLineSpacing * 5));i < (y + scoreLineSpacing);i += scoreLineSpacing){
+				painter.initPath();
+				painter.setAntialias(false);
+				painter.moveTo(x1,i);
+				painter.lineTo(x2,i);
+				painter.closePath();
+			}
+		}
+	}
+	
+	public void paintStroke(TGLayout layout,TGPainter painter, int fromX, int fromY){
+		int style = layout.getStyle();
+		float scale = layout.getScale();
+		float x = (fromX + getPosX() + getSpacing() + ( 12f * scale ));
+		float y1 = 0;
+		float y2 = 0;
+		if((style & TGLayout.DISPLAY_SCORE) != 0){
+			float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); 
+			y1 = (y + layout.getScoreLineSpacing());
+			y2 = (y + (getMeasureImpl().getTrackImpl().getScoreHeight() - layout.getScoreLineSpacing()));
+		}
+		if((style & TGLayout.DISPLAY_TABLATURE) != 0){
+			float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE));
+			y1 = (y + layout.getStringSpacing());
+			y2 = (y + (getMeasureImpl().getTrackImpl().getTabHeight() - layout.getStringSpacing()));
+		}
+		else if((style & TGLayout.DISPLAY_SCORE) != 0){
+			float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); 
+			y1 = (y + layout.getScoreLineSpacing());
+			y2 = (y + (getMeasureImpl().getTrackImpl().getScoreHeight() - layout.getScoreLineSpacing()));
+		}else{
+			return;
+		}
+		if( getStroke().getDirection() == TGStroke.STROKE_UP ){
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo( x, y1 );
+			painter.lineTo( x, y2 );
+			painter.lineTo( x - (2.0f * scale), y2 - (5.0f * scale));
+			painter.moveTo( x , y2 );
+			painter.lineTo( x + (2.0f * scale), y2 - (5.0f * scale));
+			painter.closePath();
+		}else if( getStroke().getDirection() == TGStroke.STROKE_DOWN ){
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo( x, y2 );
+			painter.lineTo( x, y1 );
+			painter.lineTo( x - (2.0f * scale), y1 + (3.0f * scale));
+			painter.moveTo( x , y1 );
+			painter.lineTo( x + (2.0f * scale), y1 + (3.0f * scale));
+			painter.closePath();
+		}
+	}
+	
+	public int getPaintPosition(int index){
+		return getMeasureImpl().getTs().getPosition(index);
+	}
+	
+	public TGBeatSpacing getBs(){
+		return this.bs;
+	}
+	
+	public void removeChord(){
+		if(isChordBeat()){
+			TGChordImpl chord = (TGChordImpl)getChord();
+			chord.dispose();
+		}
+		super.removeChord();
+	}
+	
+	public void dispose(){
+		if(isChordBeat()){
+			TGChordImpl chord = (TGChordImpl)getChord();
+			chord.dispose();
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGBeatSpacing.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGBeatSpacing.java
new file mode 100644
index 0000000..798a444
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGBeatSpacing.java
@@ -0,0 +1,45 @@
+package org.herac.tuxguitar.graphics.control;
+
+
+public class TGBeatSpacing extends TGSpacing {
+	
+	/***     POSITIONS ARRAY INDICES     ***/
+	public static final int POSITION_ACCENTUATED_EFFECT = 0;
+	public static final int POSITION_HEAVY_ACCENTUATED_EFFECT = 1;
+	public static final int POSITION_HARMONIC_EFFEC = 2;
+	public static final int POSITION_TAPPING_EFFEC = 3;
+	public static final int POSITION_SLAPPING_EFFEC = 4;
+	public static final int POSITION_POPPING_EFFEC = 5;
+	public static final int POSITION_PALM_MUTE_EFFEC = 6;
+	public static final int POSITION_LET_RING_EFFEC = 7;
+	public static final int POSITION_VIBRATO_EFFEC = 8;
+	public static final int POSITION_TRILL_EFFEC = 9;
+	public static final int POSITION_FADE_IN = 10;
+	
+	private static final int[] EFFECT_POSITIONS = new int[]{
+		POSITION_ACCENTUATED_EFFECT,
+		POSITION_HEAVY_ACCENTUATED_EFFECT,
+		POSITION_HARMONIC_EFFEC,
+		POSITION_TAPPING_EFFEC,
+		POSITION_SLAPPING_EFFEC,
+		POSITION_POPPING_EFFEC,
+		POSITION_PALM_MUTE_EFFEC,
+		POSITION_LET_RING_EFFEC,
+		POSITION_VIBRATO_EFFEC,
+		POSITION_TRILL_EFFEC,
+		POSITION_FADE_IN,
+	};
+	
+	private static final int[][] POSITIONS = new int[][]{
+		/** SCORE **/
+		EFFECT_POSITIONS ,
+		/** TABLATURE **/
+		EFFECT_POSITIONS ,
+		/** SCORE | TABLATURE **/
+		EFFECT_POSITIONS ,
+	};
+	
+	public TGBeatSpacing(TGLayout layout) {
+		super(layout, POSITIONS, EFFECT_POSITIONS.length );
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGChordImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGChordImpl.java
new file mode 100644
index 0000000..dc82397
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGChordImpl.java
@@ -0,0 +1,435 @@
+/*
+ * Created on 01-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGString;
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGChordImpl extends TGChord {
+	
+	public static final int MAX_FRETS = 6;
+	
+	private int style;
+	private int posX;
+	private int posY;
+	private int width;
+	private int height;
+	private int tonic;
+	private int diagramWidth;
+	private int diagramHeight;
+	private int nameWidth;
+	private int nameHeight;
+	private TGImage diagram;
+	private TGColor foregroundColor;
+	private TGColor backgroundColor;
+	private TGColor noteColor;
+	private TGColor tonicColor;
+	private TGColor color;
+	private TGFont font;
+	private TGFont firstFretFont;
+	private int firstFretSpacing;
+	private int stringSpacing;
+	private int fretSpacing;
+	private int noteSize;
+	
+	private boolean editing;
+	
+	public TGChordImpl(int length) {
+		super(length);
+	}
+	
+	public boolean isEditing() {
+		return this.editing;
+	}
+	
+	public void setEditing(boolean editing) {
+		this.editing = editing;
+	}
+	
+	public void setPosX(int posX){
+		this.posX = posX;
+	}
+	
+	public void setPosY(int posY){
+		this.posY = posY;
+	}
+	
+	public int getPosY() {
+		return this.posY;
+	}
+	
+	public int getWidth(){
+		return this.width;
+	}
+	
+	public int getHeight(){
+		return this.height;
+	}
+	
+	public void setStyle(int style) {
+		this.style = style;
+	}
+	
+	public void setTonic(int tonic){
+		if(!isDisposed() && this.tonic != tonic){
+			this.dispose();
+		}
+		this.tonic = tonic;
+	}
+	
+	public TGColor getForegroundColor() {
+		return this.foregroundColor;
+	}
+	
+	public void setForegroundColor(TGColor foregroundColor) {
+		if(!isDisposed() && !isSameColor(this.foregroundColor, foregroundColor)){
+			this.dispose();
+		}
+		this.foregroundColor = foregroundColor;
+	}
+	
+	public TGColor getBackgroundColor() {
+		return this.backgroundColor;
+	}
+	
+	public void setBackgroundColor(TGColor backgroundColor) {
+		if(!isDisposed() && !isSameColor(this.backgroundColor, backgroundColor)){
+			this.dispose();
+		}
+		this.backgroundColor = backgroundColor;
+	}
+	
+	public TGColor getColor() {
+		return this.color;
+	}
+	
+	public void setColor(TGColor color) {
+		if(!isDisposed() && !isSameColor(this.color, color)){
+			this.dispose();
+		}
+		this.color = color;
+	}
+	
+	public TGColor getNoteColor() {
+		return this.noteColor;
+	}
+	
+	public void setNoteColor(TGColor noteColor) {
+		if(!isDisposed() && !isSameColor(this.noteColor, noteColor)){
+			this.dispose();
+		}
+		this.noteColor = noteColor;
+	}
+	
+	public TGColor getTonicColor() {
+		return this.tonicColor;
+	}
+	
+	public void setTonicColor(TGColor tonicColor) {
+		if(!isDisposed() && !isSameColor(this.tonicColor, tonicColor)){
+			this.dispose();
+		}
+		this.tonicColor = tonicColor;
+	}
+	
+	public int getFirstFretSpacing() {
+		return this.firstFretSpacing;
+	}
+	
+	public void setFirstFretSpacing(int firstFretSpacing) {
+		if(!isDisposed() && this.firstFretSpacing != firstFretSpacing){
+			this.dispose();
+		}
+		this.firstFretSpacing = firstFretSpacing;
+	}
+	
+	public int getFretSpacing() {
+		return this.fretSpacing;
+	}
+	
+	public void setFretSpacing(int fretSpacing) {
+		if(!isDisposed() && this.fretSpacing != fretSpacing){
+			this.dispose();
+		}
+		this.fretSpacing = fretSpacing;
+	}
+	
+	public int getStringSpacing() {
+		return this.stringSpacing;
+	}
+	
+	public void setStringSpacing(int stringSpacing) {
+		if(!isDisposed() && this.stringSpacing != stringSpacing){
+			this.dispose();
+		}
+		this.stringSpacing = stringSpacing;
+	}
+	
+	public int getNoteSize() {
+		return this.noteSize;
+	}
+	
+	public void setNoteSize(int noteSize) {
+		if(!isDisposed() && this.noteSize != noteSize){
+			this.dispose();
+		}
+		this.noteSize = noteSize;
+	}
+	
+	public TGFont getFont() {
+		return this.font;
+	}
+	
+	public void setFont(TGFont font) {
+		if(!isDisposed() && !isSameFont(this.font, font)){
+			this.dispose();
+		}
+		this.font = font;
+	}
+	
+	public TGFont getFirstFretFont() {
+		return this.firstFretFont;
+	}
+	
+	public void setFirstFretFont(TGFont firstFretFont) {
+		if(!isDisposed() && !isSameFont(this.firstFretFont, firstFretFont)){
+			this.dispose();
+		}
+		this.firstFretFont = firstFretFont;
+	}
+	
+	public void paint(TGLayout layout, TGPainter painter, int fromX, int fromY) {
+		layout.setChordStyle(this);
+		this.setPosY(getPaintPosition(TGTrackSpacing.POSITION_CHORD));
+		this.setEditing(false);
+		this.update(painter, layout.isBufferEnabled());
+		this.paint(painter,getBeatImpl().getSpacing() + fromX + Math.round(4f * layout.getScale()), fromY);
+	}
+	
+	public void paint(TGPainter painter, int fromX, int fromY){
+		int x = (fromX + getPosX());
+		int y = (fromY + getPosY());
+		if( (this.style & TGLayout.DISPLAY_CHORD_DIAGRAM) != 0 ){
+			if(this.diagram != null){
+				painter.drawImage(this.diagram,x - ( (this.diagramWidth - getFirstFretSpacing()) / 2) - getFirstFretSpacing() ,y);
+			}else{
+				paintDiagram(painter,x - ( (this.diagramWidth - getFirstFretSpacing()) / 2) - getFirstFretSpacing() ,y);
+			}
+		}
+		if( (this.style & TGLayout.DISPLAY_CHORD_NAME) != 0 && getName() != null && getName().length() > 0){
+			painter.setFont(getFont());
+			painter.setForeground(getForegroundColor());
+			painter.setBackground(getBackgroundColor());
+			painter.drawString(getName(),x - (this.nameWidth / 2) , y + (this.height - this.nameHeight ) );
+		}
+	}
+	
+	public void update(TGPainter painter, boolean makeBuffer) {
+		this.width = 0;
+		this.height = 0;
+		if(getFirstFret() <= 0 ){
+			this.calculateFirstFret();
+		}
+		if( (this.style & TGLayout.DISPLAY_CHORD_NAME) != 0 ){
+			this.updateName(painter);
+			this.width = Math.max(this.width,this.nameWidth);
+			this.height += this.nameHeight;
+		}
+		if( (this.style & TGLayout.DISPLAY_CHORD_DIAGRAM) != 0 ){
+			this.updateDiagram( (makeBuffer ? painter : null ) );
+			this.width = Math.max(this.width,this.diagramWidth);
+			this.height += this.diagramHeight;
+		}
+	}
+	
+	protected void updateName(TGPainter painter){
+		String name = getName();
+		if(painter == null || name == null || name.length() == 0){
+			this.nameWidth = 0;
+			this.nameHeight = 0;
+			return;
+		}
+		this.nameWidth = painter.getFMWidth(name);
+		this.nameHeight = painter.getFMHeight();
+	}
+	
+	protected void updateDiagram(TGResourceFactory bufferFactory){
+		TGFont font = getFirstFretFont();
+		this.diagramWidth = getStringSpacing() + (getStringSpacing() * countStrings()) + ((font != null)?getFirstFretSpacing():0);
+		this.diagramHeight = getFretSpacing() + (getFretSpacing() * MAX_FRETS);
+		if(bufferFactory != null && (this.diagram == null || this.diagram.isDisposed())){
+			this.diagram = bufferFactory.createImage(this.diagramWidth,this.diagramHeight);
+			TGPainter painterBuffer = this.diagram.createPainter();
+			paintDiagram(painterBuffer, 0, 0);
+			painterBuffer.dispose();
+		}
+	}
+	
+	protected void paintDiagram(TGPainter painter, int fromX, int fromY){
+		TGFont font = getFirstFretFont();
+		painter.setBackground(getBackgroundColor());
+		painter.initPath(TGPainter.PATH_FILL);
+		painter.addRectangle(fromX, fromY, this.diagramWidth, this.diagramHeight);
+		painter.closePath();
+		painter.setForeground(getColor());
+		
+		//dibujo las cuerdas
+		int x = fromX + getStringSpacing();
+		int y = fromY + getFretSpacing();
+		
+		if(font != null){
+			String firstFretString = Integer.toString(getFirstFret());
+			painter.setFont(font);
+			painter.drawString(firstFretString,fromX + (getFirstFretSpacing() - painter.getFMWidth(firstFretString)),Math.round(y + ((getFretSpacing() / 2f) - (painter.getFMHeight() / 2f))));
+			x += getFirstFretSpacing();
+		}
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		for(int i = 0;i < getStrings().length;i++){
+			int x1 = x + (i * getStringSpacing());
+			int x2 = x + (i * getStringSpacing());
+			int y1 = y;
+			int y2 = y + ((getFretSpacing() * (MAX_FRETS - 1)));
+			painter.moveTo(x1,y1);
+			painter.lineTo(x2,y2);
+		}
+		painter.closePath();
+		
+		//dibujo las cegillas
+		painter.initPath();
+		painter.setAntialias(false);
+		for(int i = 0;i < MAX_FRETS;i++){
+			int x1 = x;
+			int x2 = x + ((getStringSpacing() * (countStrings() - 1)));
+			int y1 = y + (i * getFretSpacing());
+			int y2 = y + (i * getFretSpacing());
+			painter.moveTo(x1,y1);
+			painter.lineTo(x2,y2);
+		}
+		painter.closePath();
+		
+		painter.setLineWidth(1);
+		//dibujo las notas
+		for(int i = 0;i < getStrings().length;i++){
+			int fret = getFretValue(i);
+			int noteX = x + ((getStringSpacing() * (countStrings() - 1)) - (getStringSpacing() * i));
+			if(fret < 0){
+				painter.initPath();
+				painter.moveTo((noteX - (getNoteSize() / 2)), fromY);
+				painter.lineTo((noteX + (getNoteSize() / 2)), fromY + getNoteSize());
+				painter.moveTo((noteX + (getNoteSize() / 2)), fromY);
+				painter.lineTo((noteX - (getNoteSize() / 2)), fromY + getNoteSize());
+				painter.closePath();
+			}
+			else if(fret == 0){
+				painter.initPath();
+				painter.addOval(noteX - (getNoteSize() / 2),fromY,getNoteSize(),getNoteSize());
+				painter.closePath();
+			}
+			else{
+				painter.setBackground( (this.tonic >= 0 && ( (getStringValue(i + 1) + fret) % 12) == this.tonic)?getTonicColor():getNoteColor());
+				painter.initPath(TGPainter.PATH_FILL);
+				fret -= (getFirstFret() - 1);
+				int noteY = y + ((getFretSpacing() * fret) - (getFretSpacing() / 2 ));
+				painter.addOval(noteX - (getNoteSize() / 2),noteY - (getNoteSize() / 2),(getNoteSize() + 1),(getNoteSize() + 1));
+				painter.closePath();
+			}
+		}
+	}
+	
+	public void calculateFirstFret(){
+		int minimum = -1;
+		int maximum = -1;
+		boolean zero = false;
+		for (int i = 0; i < getStrings().length; i++) {
+			int fretValue = getFretValue(i);
+			zero = (zero || fretValue == 0);
+			if(fretValue > 0){
+				minimum = (minimum < 0)?fretValue:Math.min(minimum,fretValue);
+				maximum = (Math.max(maximum,fretValue));
+			}
+		}
+		int firstFret = (zero && maximum < MAX_FRETS)?1:minimum;
+		setFirstFret( Math.max(firstFret,1) );
+	}
+	
+	private int getStringValue(int number){
+		TGString string = getBeat().getMeasure().getTrack().getString(number);
+		return string.getValue();
+	}
+	
+	public boolean isDisposed(){
+		return (this.diagram == null || this.diagram.isDisposed());
+	}
+	
+	public void dispose(){
+		if(!isDisposed()){
+			this.diagram.dispose();
+		}
+	}
+	
+	public int getPosX() {
+		return (isEditing())?this.posX:getBeatImpl().getPosX();
+	}
+	
+	public int getPaintPosition(int index){
+		return getBeatImpl().getMeasureImpl().getTs().getPosition(index);
+	}
+	
+	public TGBeatImpl getBeatImpl(){
+		return (TGBeatImpl)getBeat();
+	}
+	
+	private boolean isSameFont(TGFont f1, TGFont f2){
+		if( f1 == null && f2 == null ){
+			return true;
+		}
+		if( f1 != null && f2 != null && !f1.isDisposed() && !f2.isDisposed()){
+			boolean sameName = (f1.getName().equals(f2.getName()));
+			boolean sameBold = (f1.isBold() == f2.isBold());
+			boolean sameItalic = (f1.isItalic() == f2.isItalic());
+			boolean sameHeight = (f1.getHeight() == f2.getHeight());
+			
+			return (sameName && sameBold && sameItalic && sameHeight);
+		}
+		return false;
+	}
+	
+	private boolean isSameColor(TGColor c1, TGColor c2){
+		if( c1 == null && c2 == null ){
+			return true;
+		}
+		if( c1 != null && c2 != null && !c1.isDisposed() && !c2.isDisposed()){
+			return ( c1.getRed() == c2.getRed() && c1.getGreen() == c2.getGreen() && c1.getBlue() == c2.getBlue() );
+		}
+		return false;
+	}
+	
+	public void addFretValue(int string,int fret){
+		if(!isDisposed() && this.getFretValue(string) != fret){
+			this.dispose();
+		}
+		super.addFretValue(string, fret);
+	}
+	
+	public void setFirstFret(int firstFret) {
+		if(!isDisposed() && this.getFirstFret() != firstFret){
+			this.dispose();
+		}
+		super.setFirstFret(firstFret);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGController.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGController.java
new file mode 100644
index 0000000..f81763a
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGController.java
@@ -0,0 +1,26 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+public interface TGController {
+	
+	public TGResourceFactory getResourceFactory();
+	
+	public TGSongManager getSongManager();
+	
+	public void configureStyles( TGLayoutStyles styles );
+	
+	public int getTrackSelection();
+	
+	public boolean isRunning(TGBeat beat);
+	
+	public boolean isRunning(TGMeasure measure);
+	
+	public boolean isLoopSHeader(TGMeasureHeader measureHeader);
+	
+	public boolean isLoopEHeader(TGMeasureHeader measureHeader);
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGFactoryImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGFactoryImpl.java
new file mode 100644
index 0000000..a0d8d43
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGFactoryImpl.java
@@ -0,0 +1,55 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class TGFactoryImpl extends TGFactory{
+	
+	public TGFactoryImpl(){
+		super();
+	}
+	
+	public TGMeasureHeader newHeader(){
+		return new TGMeasureHeaderImpl(this);
+	}
+	
+	public TGTrack newTrack(){
+		return new TGTrackImpl(this);
+	}
+	
+	public TGMeasure newMeasure(TGMeasureHeader header){
+		return new TGMeasureImpl(header);
+	}
+	
+	public TGNote newNote(){
+		return new TGNoteImpl(this);
+	}
+	
+	public TGBeat newBeat(){
+		return new TGBeatImpl(this);
+	}
+	
+	public TGVoice newVoice(int index){
+		return new TGVoiceImpl(this, index);
+	}
+	
+	public TGLyric newLyric(){
+		return new TGLyricImpl();
+	}
+	
+	public TGChord newChord(int length){
+		return new TGChordImpl(length);
+	}
+	
+	public TGText newText(){
+		return new TGTextImpl();
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayout.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayout.java
new file mode 100644
index 0000000..f115b38
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayout.java
@@ -0,0 +1,832 @@
+/*
+ * Created on 04-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public abstract class TGLayout {
+	
+	public static final int MODE_VERTICAL = 1;
+	public static final int MODE_HORIZONTAL = 2;
+	public static final int DEFAULT_MODE = MODE_HORIZONTAL;
+	
+	public static final int DISPLAY_COMPACT = 0x01;
+	public static final int DISPLAY_MULTITRACK = 0x02;
+	public static final int DISPLAY_SCORE = 0x04;
+	public static final int DISPLAY_TABLATURE = 0x08;
+	public static final int DISPLAY_CHORD_NAME = 0x10;
+	public static final int DISPLAY_CHORD_DIAGRAM = 0x20;
+	
+	private float scale;
+	private float fontScale;
+	private int style;
+	private int width;
+	private int height;
+	
+	private int minBufferSeparator;
+	private int minTopSpacing;
+	private int minScoreTabSpacing;
+	private int stringSpacing;
+	private int scoreLineSpacing;
+	private int trackSpacing;
+	private int firstTrackSpacing;
+	private int firstMeasureSpacing;
+	private int chordFretIndexSpacing;
+	private int chordStringSpacing;
+	private int chordFretSpacing;
+	private int chordNoteSize;
+	private int repeatEndingSpacing;
+	private int effectSpacing;
+	private int divisionTypeSpacing;
+	private int textSpacing;
+	private int markerSpacing;
+	private int loopMarkerSpacing;
+	private boolean bufferEnabled;
+	private boolean playModeEnabled;
+	
+	private List trackPositions;
+	
+	private TGController controller;
+	private TGResources resources;
+	private TGLayoutStyles styles;
+	
+	public TGLayout(TGController controller,int style){
+		this.controller = controller;
+		this.trackPositions = new ArrayList();
+		this.playModeEnabled = false;
+		this.resources = new TGResources(this);
+		this.styles = new TGLayoutStyles();
+		this.style = style;
+		if((this.style & DISPLAY_TABLATURE) == 0 && (this.style & DISPLAY_SCORE) == 0 ){
+			this.style |= DISPLAY_TABLATURE;
+		}
+	}
+	
+	public void loadStyles(){
+		this.loadStyles(1f);
+	}
+	
+	public void loadStyles(float scale){
+		this.setScale(scale);
+		this.setFontScale(scale);
+		this.getComponent().configureStyles(this.styles);
+		
+		this.setBufferEnabled( this.styles.isBufferEnabled() );
+		this.setStringSpacing( (int)(this.styles.getStringSpacing() * getScale() ) );
+		this.setScoreLineSpacing( (int)(this.styles.getScoreLineSpacing() * getScale() ) );
+		this.setFirstMeasureSpacing( Math.round( this.styles.getFirstMeasureSpacing() * getScale() ) );
+		this.setMinBufferSeparator( Math.round( this.styles.getMinBufferSeparator() * getScale() ) );
+		this.setMinTopSpacing( Math.round( this.styles.getMinTopSpacing() * getScale() ) );
+		this.setMinScoreTabSpacing( Math.round( this.styles.getMinScoreTabSpacing() * getScale() ) );
+		this.setFirstTrackSpacing( Math.round(this.styles.getFirstTrackSpacing() * getScale() ) );
+		this.setTrackSpacing( Math.round(this.styles.getTrackSpacing() * getScale() ) );
+		this.setChordFretIndexSpacing( Math.round( this.styles.getChordFretIndexSpacing() * getScale() ) );
+		this.setChordStringSpacing( Math.round( this.styles.getChordStringSpacing() * getScale() ) );
+		this.setChordFretSpacing( Math.round( this.styles.getChordFretSpacing() * getScale() ) );
+		this.setChordNoteSize( Math.round( this.styles.getChordNoteSize() * getScale() ) );
+		this.setRepeatEndingSpacing( Math.round( this.styles.getRepeatEndingSpacing() * getScale() ) );
+		this.setTextSpacing( Math.round( this.styles.getTextSpacing() * getScale() ) );
+		this.setMarkerSpacing( Math.round( this.styles.getMarkerSpacing() * getScale() ) );
+		this.setLoopMarkerSpacing( Math.round( this.styles.getLoopMarkerSpacing() * getScale() ) );
+		this.setDivisionTypeSpacing( Math.round( this.styles.getDivisionTypeSpacing() * getScale() ) );
+		this.setEffectSpacing( Math.round( this.styles.getEffectSpacing() * getScale() ) );
+		
+		this.getResources().load(this.styles);
+	}
+	
+	public abstract void paintSong(TGPainter painter,TGRectangle clientArea,int fromX,int fromY);
+	
+	public abstract int getMode();
+	
+	public void paint(TGPainter painter,TGRectangle clientArea,int fromX,int fromY){
+		this.playModeEnabled = false;
+		paintSong(painter,clientArea,fromX,fromY);
+	}
+	
+	public void paintMeasure(TGMeasureImpl measure,TGPainter painter,int spacing) {
+		measure.setSpacing(spacing);
+		measure.paintMeasure(this,painter);
+	}
+	
+	public void updateSong(){
+		updateMeasures();
+	}
+	
+	public void updateMeasures() {
+		int measureCount = getSongManager().getSong().countMeasureHeaders();
+		for (int measureIdx = 0; measureIdx < measureCount; measureIdx++) {
+			this.updateMeasureIndex( measureIdx );
+		}
+	}
+	
+	private void updateMeasureIndex(int index) {
+		if( index >= 0 && index < getSongManager().getSong().countMeasureHeaders() ){
+			((TGMeasureHeaderImpl)getSongManager().getSong().getMeasureHeader( index )).update(this, index);
+			
+			int trackCount = getSongManager().getSong().countTracks();
+			for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
+				TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx);
+				TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure( index );
+				measure.create(this);
+			}
+			for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
+				TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx);
+				TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure( index );
+				track.update(this);
+				measure.update(this);
+			}
+		}
+	}
+	
+	public void updateMeasureNumber(int number) {
+		TGMeasureHeader header = getSongManager().getMeasureHeader(number);
+		if( header != null ){
+			int index = getSongManager().getMeasureHeaderIndex( header );
+			if( index >= 0 ){
+				updateMeasureIndex(index);
+			}
+		}
+	}
+	
+	/**
+	 * Pinta las lineas
+	 */
+	public void paintLines(TGTrackImpl track,TGTrackSpacing ts,TGPainter painter,int x,int y,int width) {
+		if(width > 0){
+			setLineStyle(painter);
+			int tempX = ((x < 0)?0:x);
+			int tempY = y;
+			
+			//partitura
+			if( (this.style & DISPLAY_SCORE) != 0 ){
+				int posY = tempY + ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+				
+				painter.initPath();
+				painter.setAntialias(false);
+				for(int i = 1;i <= 5;i ++){
+					painter.moveTo(tempX, posY);
+					painter.lineTo(tempX + width,posY);
+					posY += getScoreLineSpacing();
+				}
+				painter.closePath();
+			}
+			//tablatura
+			if((this.style & DISPLAY_TABLATURE) != 0){
+				tempY += ts.getPosition(TGTrackSpacing.POSITION_TABLATURE);
+				
+				painter.initPath();
+				painter.setAntialias(false);
+				for(int i = 0; i < track.stringCount();i++){
+					painter.moveTo(tempX,tempY);
+					painter.lineTo(tempX + width,tempY);
+					tempY += getStringSpacing();
+				}
+				painter.closePath();
+			}
+		}
+	}
+	
+	/**
+	 * Pinta el compas y las notas que estan sonando
+	 */
+	public void paintPlayMode(TGPainter painter,TGMeasureImpl measure,TGBeatImpl beat,boolean paintMeasure){
+		this.playModeEnabled = true;
+		
+		//pinto el compas
+		if(paintMeasure){
+			measure.paintMeasure(this,painter);
+		}
+		//pinto el pulso
+		beat.paint(this,painter,measure.getPosX()  + measure.getHeaderImpl().getLeftSpacing(this), measure.getPosY());
+		
+		//pinto los lyrics
+		((TGLyricImpl)measure.getTrackImpl().getLyrics()).paintCurrentNoteBeats(painter,this,measure,measure.getPosX(), measure.getPosY());
+		
+		this.playModeEnabled = false;
+	}
+	
+	protected float checkScale(){
+		float v1 = ((this.style & DISPLAY_SCORE) != 0 ? (getScoreLineSpacing() * 1.25f ) : 0 );
+		float v2 = ((this.style & DISPLAY_TABLATURE) != 0 ? getStringSpacing() : 0 );
+		float scale = (Math.max(v1,v2) / 10.0f);
+		return scale;
+	}
+	
+	protected void checkDefaultSpacing(TGTrackSpacing ts){
+		int checkPosition = -1;
+		int minBufferSeparator = getMinBufferSeparator();
+		if( (this.style & DISPLAY_SCORE) != 0 ){
+			int bufferSeparator = (ts.getPosition(TGTrackSpacing.POSITION_SCORE_UP_LINES) - ts.getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR));
+			if(bufferSeparator < minBufferSeparator ) {
+				ts.setSize(TGTrackSpacing.POSITION_BUFFER_SEPARATOR,minBufferSeparator - bufferSeparator);
+			}
+			checkPosition = ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+		}
+		else if((this.style & DISPLAY_TABLATURE) != 0){
+			int bufferSeparator = (ts.getPosition(TGTrackSpacing.POSITION_TABLATURE) - ts.getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR));
+			if(bufferSeparator < minBufferSeparator ) {
+				ts.setSize(TGTrackSpacing.POSITION_BUFFER_SEPARATOR,minBufferSeparator - bufferSeparator);
+			}
+			checkPosition = ts.getPosition(TGTrackSpacing.POSITION_TABLATURE);
+		}
+		
+		if(checkPosition >= 0 && checkPosition < getMinTopSpacing()){
+			ts.setSize(TGTrackSpacing.POSITION_TOP, (getMinTopSpacing() - checkPosition));
+		}
+	}
+	
+	/**
+	 * Calcula el espacio minimo entre negras, dependiendo de la duracion de la nota 
+	 */
+	public int getSpacingForQuarter(TGDuration duration){
+		double spacing = (((double)TGDuration.QUARTER_TIME / (double)duration.getTime()) * getMinSpacing(duration));
+		return  (int)spacing;
+	}
+	
+	/**
+	 * Calcula el Espacio minimo que quedara entre nota y nota
+	 */
+	protected float getMinSpacing(TGDuration duration){
+		float scale = getScale();
+		switch(duration.getValue()){
+			case TGDuration.WHOLE:
+				return (50.0f * scale);
+			case TGDuration.HALF:
+				return (30.0f * scale);
+			case TGDuration.QUARTER:
+				return (25.0f * scale);
+			case TGDuration.EIGHTH:
+				return (20.0f * scale);
+			default:
+				return (18.0f * scale);
+		}
+	}
+	
+	/**
+	 * Calcula el Espacio que ocupara el pulso
+	 */
+	public float getBeatWidth(TGVoice voice){
+		float scale = getScale();
+		TGDuration duration = voice.getDuration();
+		if(duration != null){
+			switch(duration.getValue()){
+				case TGDuration.WHOLE:
+					return (30.0f * scale);
+				case TGDuration.HALF:
+					return (25.0f * scale);
+				case TGDuration.QUARTER:
+					return (21.0f * scale);
+				case TGDuration.EIGHTH:
+					return (20.0f * scale);
+				case TGDuration.SIXTEENTH:
+					return (19.0f * scale);
+				case TGDuration.THIRTY_SECOND:
+					return (18.0f * scale);
+				default:
+					return (17.0f * scale);
+			}
+		}
+		return (20.0f * scale);
+	}
+	
+	/**
+	 * Calcula el Espacio que ocupara el pulso
+	 */
+	public float getVoiceWidth(TGVoiceImpl voice){
+		float scale = getScale();
+		TGDuration duration = voice.getDuration();
+		if(duration != null){
+			switch(duration.getValue()){
+				case TGDuration.WHOLE:
+					return (30.0f * scale);
+				case TGDuration.HALF:
+					return (25.0f * scale);
+				case TGDuration.QUARTER:
+					return (21.0f * scale);
+				case TGDuration.EIGHTH:
+					return (20.0f * scale);
+				case TGDuration.SIXTEENTH:
+					return (19.0f * scale);
+				case TGDuration.THIRTY_SECOND:
+					return (18.0f * scale);
+				default:
+					return (17.0f * scale);
+			}
+		}
+		return (20.0f * scale);
+	}
+	
+	public boolean isPlayModeEnabled(){
+		return this.playModeEnabled;
+	}
+	
+	public void setMeasureNumberStyle(TGPainter painter){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground(getResources().getColorRed());
+	}
+	
+	public void setDivisionsStyle(TGPainter painter, boolean fill){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setBackground( (fill ? getResources().getColorBlack() :getResources().getBackgroundColor() ));
+		painter.setForeground(getResources().getColorBlack());
+	}
+	
+	public void setTempoStyle(TGPainter painter, boolean fontStyle){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground( ( fontStyle ? getResources().getBackgroundColor() : getResources().getColorBlack() ));
+	}
+	
+	public void setTripletFeelStyle(TGPainter painter, boolean fontStyle){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground( ( fontStyle ? getResources().getBackgroundColor() : getResources().getColorBlack() ));
+	}
+	
+	public void setMeasurePlayingStyle(TGPainter painter){
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground(getResources().getColorBlack());
+	}
+	
+	public void setLyricStyle(TGPainter painter,boolean playMode){
+		painter.setFont(getResources().getLyricFont());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getColorBlack()) );
+	}
+	
+	public void setMarkerStyle(TGPainter painter, TGColor color){
+		painter.setFont(getResources().getMarkerFont());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground(color);
+	}
+	
+	public void setTextStyle(TGPainter painter){
+		painter.setFont(getResources().getTextFont());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setForeground(getResources().getColorBlack());
+	}
+	
+	public void setTimeSignatureStyle(TGPainter painter){
+		painter.setFont(getResources().getTimeSignatureFont());
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getBackgroundColor());
+	}
+	
+	public void setKeySignatureStyle(TGPainter painter){
+		painter.setBackground(getResources().getColorBlack());
+	}
+	
+	public void setClefStyle(TGPainter painter){
+		painter.setBackground(getResources().getColorBlack());
+	}
+	
+	public void setLineStyle(TGPainter painter){
+		painter.setLineWidth(1);
+		painter.setForeground(getResources().getLineColor());
+	}
+	
+	public void setScoreSilenceStyle(TGPainter painter,boolean playMode){
+		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
+		painter.setBackground( (playMode ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
+	}
+	
+	public void setTabSilenceStyle(TGPainter painter,boolean playMode){
+		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() ));
+		painter.setBackground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() ));
+	}
+	
+	public void setScoreNoteStyle(TGPainter painter,boolean playing){
+		painter.setForeground( (playing ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
+		painter.setBackground( (playing ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
+	}
+	
+	public void setScoreNoteFooterStyle(TGPainter painter){
+		painter.setForeground( getResources().getScoreNoteColor());
+		painter.setBackground( getResources().getScoreNoteColor());
+	}
+	
+	public void setScoreEffectStyle(TGPainter painter){
+		painter.setForeground( getResources().getScoreNoteColor());
+		painter.setBackground( getResources().getScoreNoteColor());
+	}
+	
+	public void setTabNoteStyle(TGPainter painter,boolean playMode){
+		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() ));
+		painter.setBackground( getResources().getBackgroundColor() );
+		painter.setFont(getResources().getNoteFont());
+	}
+	
+	public void setTabNoteFooterStyle(TGPainter painter){
+		painter.setForeground( getResources().getTabNoteColor());
+		painter.setBackground( getResources().getTabNoteColor());
+	}
+	
+	public void setTabEffectStyle(TGPainter painter){
+		painter.setForeground( getResources().getTabNoteColor());
+		painter.setBackground( getResources().getTabNoteColor());
+	}
+	
+	public void setTabGraceStyle(TGPainter painter){
+		painter.setFont(getResources().getGraceFont());
+		painter.setForeground(getResources().getTabNoteColor());
+		painter.setBackground(getResources().getBackgroundColor());
+	}
+	
+	public void setPlayNoteColor(TGPainter painter){
+		painter.setForeground(getResources().getPlayNoteColor());
+		painter.setBackground(getResources().getPlayNoteColor());
+	}
+	
+	public void setOfflineEffectStyle(TGPainter painter){
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setFont(getResources().getDefaultFont());
+	}
+	
+	public void setDotStyle(TGPainter painter){
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getColorBlack());
+	}
+	
+	public void setDivisionTypeStyle(TGPainter painter){
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setFont(getResources().getDefaultFont());
+	}
+	
+	public void setRepeatEndingStyle(TGPainter painter){
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground(getResources().getBackgroundColor());
+		painter.setFont(getResources().getDefaultFont());
+	}
+	
+	public void setChordStyle(TGChordImpl chord){
+		chord.setFont(getResources().getChordFont());
+		chord.setForegroundColor(getResources().getColorBlack());
+		chord.setBackgroundColor(getResources().getBackgroundColor());
+		chord.setColor(getResources().getLineColor());
+		chord.setNoteColor(getResources().getTabNoteColor());
+		chord.setTonicColor(getResources().getTabNoteColor());
+		chord.setStyle(this.style);
+		chord.setFretSpacing(getChordFretSpacing());
+		chord.setStringSpacing(getChordStringSpacing());
+		chord.setNoteSize(getChordNoteSize());
+		chord.setFirstFretSpacing(getChordFretIndexSpacing());
+		chord.setFirstFretFont(getResources().getChordFretFont());
+	}
+	
+	public void setLoopSMarkerStyle(TGPainter painter){
+		painter.setBackground(getResources().getLoopSMarkerColor());
+	}
+	
+	public void setLoopEMarkerStyle(TGPainter painter){
+		painter.setBackground(getResources().getLoopEMarkerColor());
+	}
+	
+	public TGRectangle getNoteOrientation(TGPainter painter,int x,int y,TGNote note){
+		String noteAsString = null;
+		if (note.isTiedNote()){
+			noteAsString = "L";
+			noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString;
+		}else if(note.getEffect().isDeadNote()){
+			noteAsString = "X";
+			noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString;
+		}else{
+			noteAsString = Integer.toString(note.getValue());
+			noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString;
+		}
+		return getOrientation(painter,x,y,noteAsString);
+	}
+	
+	public TGRectangle getOrientation(TGPainter painter,int x,int y,String s){
+		int fmWidth = painter.getFMWidth(s);
+		int fmAscent = painter.getFMAscent();
+		int fSize = painter.getFontSize();
+		return new TGRectangle((x - (fmWidth / 2)),(y - (fmAscent - fSize) - (fSize / 2)),fmWidth, fSize );
+		//TGDimension size = painter.getStringExtent(s);
+		//return new TGRectangle((x - (size.getWidth() / 2)),(y - (size.getHeight() / 2)),size.getWidth(), size.getHeight() );
+	}
+	
+	public TGSongManager getSongManager() {
+		return getComponent().getSongManager();
+	}
+	
+	public void setComponent(TGController controller){
+		this.controller = controller;
+	}
+	
+	public TGController getComponent(){
+		return this.controller;
+	}
+	
+	public TGResources getResources(){
+		return this.resources;
+	}
+	
+	public int getHeight() {
+		return this.height;
+	}
+	
+	public void setHeight(int height) {
+		this.height = height;
+	}
+	
+	public int getWidth() {
+		return this.width;
+	}
+	
+	public void setWidth(int width) {
+		this.width = width;
+	}
+	
+	public int getStyle(){
+		return this.style;
+	}
+	
+	public void setStyle(int style){
+		this.style = style;
+	}
+	
+	public float getScale() {
+		return this.scale;
+	}
+	
+	public void setScale(float scale) {
+		this.scale = scale;
+	}
+	
+	public float getFontScale() {
+		return this.fontScale;
+	}
+	
+	public void setFontScale(float fontScale) {
+		this.fontScale = fontScale;
+	}
+	
+	public boolean isBufferEnabled() {
+		return this.bufferEnabled;
+	}
+	
+	public void setBufferEnabled(boolean bufferEnabled) {
+		this.bufferEnabled = bufferEnabled;
+	}
+	
+	public int getFirstMeasureSpacing() {
+		return this.firstMeasureSpacing;
+	}
+	
+	public void setFirstMeasureSpacing(int firstMeasureSpacing) {
+		this.firstMeasureSpacing = firstMeasureSpacing;
+	}
+	
+	public int getMinBufferSeparator() {
+		return this.minBufferSeparator;
+	}
+	
+	public void setMinBufferSeparator(int minBufferSeparator) {
+		this.minBufferSeparator = minBufferSeparator;
+	}
+	
+	public int getMinTopSpacing() {
+		return this.minTopSpacing;
+	}
+	
+	public void setMinTopSpacing(int minTopSpacing) {
+		this.minTopSpacing = minTopSpacing;
+	}
+	
+	public int getMinScoreTabSpacing() {
+		return this.minScoreTabSpacing;
+	}
+	
+	public void setMinScoreTabSpacing(int minScoreTabSpacing) {
+		this.minScoreTabSpacing = minScoreTabSpacing;
+	}
+	
+	public int getScoreLineSpacing() {
+		return this.scoreLineSpacing;
+	}
+	
+	public void setScoreLineSpacing(int scoreLineSpacing) {
+		this.scoreLineSpacing = scoreLineSpacing;
+	}
+	
+	public int getFirstTrackSpacing() {
+		return this.firstTrackSpacing;
+	}
+	
+	public void setFirstTrackSpacing(int firstTrackSpacing) {
+		this.firstTrackSpacing = firstTrackSpacing;
+	}
+	
+	public int getTrackSpacing() {
+		return this.trackSpacing;
+	}
+	
+	public void setTrackSpacing(int trackSpacing) {
+		this.trackSpacing = trackSpacing;
+	}
+	
+	public int getStringSpacing() {
+		return this.stringSpacing;
+	}
+	
+	public void setStringSpacing(int stringSpacing) {
+		this.stringSpacing = stringSpacing;
+	}
+	
+	public int getChordFretIndexSpacing() {
+		return this.chordFretIndexSpacing;
+	}
+	
+	public void setChordFretIndexSpacing(int chordFretIndexSpacing) {
+		this.chordFretIndexSpacing = chordFretIndexSpacing;
+	}
+	
+	public int getChordStringSpacing() {
+		return this.chordStringSpacing;
+	}
+	
+	public void setChordStringSpacing(int chordStringSpacing) {
+		this.chordStringSpacing = chordStringSpacing;
+	}
+	
+	public int getChordFretSpacing() {
+		return this.chordFretSpacing;
+	}
+	
+	public void setChordFretSpacing(int chordFretSpacing) {
+		this.chordFretSpacing = chordFretSpacing;
+	}
+	
+	public int getChordNoteSize() {
+		return this.chordNoteSize;
+	}
+	
+	public void setChordNoteSize(int chordNoteSize) {
+		this.chordNoteSize = chordNoteSize;
+	}
+	
+	public int getRepeatEndingSpacing() {
+		return this.repeatEndingSpacing;
+	}
+	
+	public void setRepeatEndingSpacing(int repeatEndingSpacing) {
+		this.repeatEndingSpacing = repeatEndingSpacing;
+	}
+	
+	public int getDivisionTypeSpacing() {
+		return this.divisionTypeSpacing;
+	}
+	
+	public void setDivisionTypeSpacing(int divisionTypeSpacing) {
+		this.divisionTypeSpacing = divisionTypeSpacing;
+	}
+	
+	public int getTextSpacing() {
+		return this.textSpacing;
+	}
+	
+	public void setTextSpacing(int textSpacing) {
+		this.textSpacing = textSpacing;
+	}
+	
+	public int getMarkerSpacing() {
+		return this.markerSpacing;
+	}
+	
+	public void setMarkerSpacing(int markerSpacing) {
+		this.markerSpacing = markerSpacing;
+	}
+	
+	public int getLoopMarkerSpacing() {
+		return this.loopMarkerSpacing;
+	}
+	
+	public void setLoopMarkerSpacing(int loopMarkerSpacing) {
+		this.loopMarkerSpacing = loopMarkerSpacing;
+	}
+	
+	public int getEffectSpacing() {
+		return this.effectSpacing;
+	}
+	
+	public void setEffectSpacing(int effectSpacing) {
+		this.effectSpacing = effectSpacing;
+	}
+	
+	public int getDefaultChordSpacing(){
+		int spacing = 0;
+		if( (this.style & DISPLAY_CHORD_DIAGRAM) != 0 ){
+			spacing += ( (TGChordImpl.MAX_FRETS * getChordFretSpacing()) + getChordFretSpacing());
+		}
+		if( (this.style & DISPLAY_CHORD_NAME) != 0 ){
+			spacing += Math.round( (15f * getScale()) );
+		}
+		return spacing;
+	}
+	
+	public boolean isFirstMeasure(TGMeasureHeader mh){
+		return (mh.getNumber() == 1);
+	}
+	
+	public boolean isFirstMeasure(TGMeasure measure){
+		return (isFirstMeasure(measure.getHeader()));
+	}
+	
+	public boolean isLastMeasure(TGMeasureHeader mh){
+		return (mh.getNumber() == getSongManager().getSong().countMeasureHeaders());
+	}
+	
+	public boolean isLastMeasure(TGMeasure measure){
+		return (isLastMeasure(measure.getHeader()));
+	}
+	
+	public boolean hasLoopMarker(TGMeasureHeader mh){
+		return (getComponent().isLoopSHeader(mh) || getComponent().isLoopEHeader(mh));
+	}
+	
+	public boolean hasLoopMarker(TGMeasure measure){
+		return (hasLoopMarker(measure.getHeader()));
+	}
+	
+	protected void clearTrackPositions(){
+		this.trackPositions.clear();
+	}
+	
+	protected void addTrackPosition(int track,int posY,int height){
+		this.trackPositions.add(new TrackPosition(track,posY,height));
+	}
+	
+	public int getTrackNumberAt(int y){
+		TrackPosition trackPos = getTrackPositionAt(y);
+		return ((trackPos != null)?trackPos.getTrack():-1);
+	}
+	
+	public TrackPosition getTrackPositionAt(int y){
+		TrackPosition trackPos = null;
+		int minorDistance = 0;
+		
+		Iterator it = this.trackPositions.iterator();
+		while(it.hasNext()){
+			TrackPosition pos = (TrackPosition)it.next();
+			int distanceY = Math.min(Math.abs(y - (pos.getPosY())), Math.abs(y - (pos.getPosY() + pos.getHeight() - 10)));
+			if(trackPos == null || distanceY < minorDistance){
+				trackPos = pos;
+				minorDistance = distanceY;
+			}
+		}
+		return trackPos;
+	}
+	
+	public void disposeLayout(){
+		this.getResources().dispose();
+	}
+	
+	public class TrackPosition{
+		private int track;
+		private int posY;
+		private int height;
+		
+		public TrackPosition(int track,int posY,int height){
+			this.track = track;
+			this.posY = posY;
+			this.height = height;
+		}
+		
+		public int getPosY() {
+			return this.posY;
+		}
+		
+		public int getHeight() {
+			return this.height;
+		}
+		
+		public int getTrack() {
+			return this.track;
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayoutHorizontal.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayoutHorizontal.java
new file mode 100644
index 0000000..20a1ad4
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayoutHorizontal.java
@@ -0,0 +1,126 @@
+/*
+ * Created on 04-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGLayoutHorizontal extends TGLayout{
+	
+	public TGLayoutHorizontal(TGController controller,int style){
+		super(controller,style);
+	}
+	
+	public int getMode(){
+		return MODE_HORIZONTAL;
+	}
+	
+	public void paintSong(TGPainter painter,TGRectangle clientArea,int fromX,int fromY) {
+		this.setWidth(0);
+		this.setHeight(0);
+		this.clearTrackPositions();
+		
+		int style = getStyle();
+		int number = getComponent().getTrackSelection();
+		int posY = fromY + getFirstTrackSpacing();
+		int height = getFirstTrackSpacing();
+		int trackHeight;
+		Iterator tracks = getSongManager().getSong().getTracks();
+		while(tracks.hasNext()){
+			TGTrackImpl track = (TGTrackImpl) tracks.next();
+			if(number < 0 || track.getNumber() == number){
+				
+				TGTrackSpacing ts = new TGTrackSpacing(this) ;
+				ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0 ?( (getScoreLineSpacing() * 5) ):0));
+				((TGLyricImpl)track.getLyrics()).start();
+				
+				//------AUTO_SPACING---------------------------------------
+				int maxY = 0;
+				int minY = 0;
+				// Need to score extra-lines in edition mode
+				if( (style & DISPLAY_TABLATURE) == 0 && (style & DISPLAY_SCORE) != 0 ){
+					maxY = ((getScoreLineSpacing() * 4) + (getScoreLineSpacing() * 4));
+					minY = -(getScoreLineSpacing() * 3);
+				}
+				
+				Iterator measures = track.getMeasures();
+				while(measures.hasNext()){
+					TGMeasureImpl measure = (TGMeasureImpl)measures.next();
+					maxY = (measure.getMaxY() > maxY)?measure.getMaxY():maxY;
+					minY = (measure.getMinY() < minY)?measure.getMinY():minY;
+					measure.registerSpacing(this,ts);
+				}
+				ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, ( (style & DISPLAY_SCORE) != 0 ?Math.abs(minY):0));
+				if((style & DISPLAY_SCORE) != 0 && maxY > track.getScoreHeight()){
+					ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (maxY - track.getScoreHeight()) );
+				}
+				if((style & DISPLAY_TABLATURE) != 0){
+					ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(minY), getStringSpacing()) ));
+					ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ?  track.getTabHeight() + getStringSpacing() + 1 : Math.max(maxY, track.getTabHeight() + getStringSpacing() + 1) ));
+				}
+				ts.setSize(TGTrackSpacing.POSITION_LYRIC,10);
+				checkDefaultSpacing(ts);
+				
+				//----------------------------------------------------
+				paintMeasures(track,painter,fromX,posY,ts,clientArea);
+				paintLines(track,ts,painter,fromX + (getWidth() + 2),posY,(clientArea.getWidth() - (fromX + getWidth()) ));
+				
+				trackHeight = ts.getSize();
+				addTrackPosition(track.getNumber(),posY,trackHeight);
+				
+				posY += trackHeight + getTrackSpacing();
+				height += trackHeight + getTrackSpacing();
+			}
+		}
+		if(getWidth() > clientArea.getWidth()){
+			// solo para dar un espacio.
+			this.setWidth( getWidth() + getFirstMeasureSpacing());
+		}
+		this.setHeight(height);
+	}
+	
+	public void paintMeasures(TGTrackImpl track,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts,TGRectangle clientArea) {
+		int posX = (fromX + getFirstMeasureSpacing());
+		int posY = fromY;
+		int width = getFirstMeasureSpacing();
+		
+		Iterator measures = track.getMeasures();
+		while(measures.hasNext()){
+			TGMeasureImpl measure = (TGMeasureImpl)measures.next();
+			
+			//asigno la posicion dentro del compas
+			measure.setPosX(posX);
+			measure.setPosY(posY);
+			measure.setTs(ts);
+			
+			((TGLyricImpl)track.getLyrics()).setCurrentMeasure(measure);
+			
+			//Solo pinto lo que entre en pantalla
+			boolean isAtX = ((posX + measure.getWidth(this)) > clientArea.getX() - 100 && posX < clientArea.getX() + clientArea.getWidth() + measure.getWidth(this) + 100);
+			boolean isAtY = (posY + ts.getSize() > clientArea.getY() && posY < clientArea.getY() + clientArea.getHeight() + 80);
+			if(isAtX && isAtY){
+				paintMeasure(measure,painter,0);
+				((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,measure,posX, posY);
+			}else{
+				measure.setOutOfBounds(true);
+			}
+			
+			int measureWidth = measure.getWidth(this);
+			posX += measureWidth;
+			width += measureWidth;
+		}
+		this.setWidth(Math.max(getWidth(),width));
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayoutStyles.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayoutStyles.java
new file mode 100644
index 0000000..bb36d26
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayoutStyles.java
@@ -0,0 +1,323 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFontModel;
+
+public class TGLayoutStyles {
+	
+	private boolean bufferEnabled;
+	private int minBufferSeparator;
+	private int minTopSpacing;
+	private int minScoreTabSpacing;
+	private int stringSpacing;
+	private int scoreLineSpacing;
+	private int trackSpacing;
+	private int firstTrackSpacing;
+	private int firstMeasureSpacing;
+	private int chordFretIndexSpacing;
+	private int chordStringSpacing;
+	private int chordFretSpacing;
+	private int chordNoteSize;
+	private int repeatEndingSpacing;
+	private int effectSpacing;
+	private int divisionTypeSpacing;
+	private int textSpacing;
+	private int markerSpacing;
+	private int loopMarkerSpacing;
+	private TGFontModel defaultFont;
+	private TGFontModel noteFont;
+	private TGFontModel timeSignatureFont;
+	private TGFontModel lyricFont;
+	private TGFontModel textFont;
+	private TGFontModel markerFont;
+	private TGFontModel graceFont;
+	private TGFontModel chordFont;
+	private TGFontModel chordFretFont;
+	private TGColorModel backgroundColor;
+	private TGColorModel lineColor;
+	private TGColorModel scoreNoteColor;
+	private TGColorModel tabNoteColor;
+	private TGColorModel playNoteColor;
+	private TGColorModel loopSMarkerColor;
+	private TGColorModel loopEMarkerColor;
+	
+	public boolean isBufferEnabled() {
+		return this.bufferEnabled;
+	}
+	
+	public void setBufferEnabled(boolean bufferEnabled) {
+		this.bufferEnabled = bufferEnabled;
+	}
+	
+	public int getMinBufferSeparator() {
+		return this.minBufferSeparator;
+	}
+	
+	public void setMinBufferSeparator(int minBufferSeparator) {
+		this.minBufferSeparator = minBufferSeparator;
+	}
+	
+	public int getMinTopSpacing() {
+		return this.minTopSpacing;
+	}
+	
+	public void setMinTopSpacing(int minTopSpacing) {
+		this.minTopSpacing = minTopSpacing;
+	}
+	
+	public int getMinScoreTabSpacing() {
+		return this.minScoreTabSpacing;
+	}
+	
+	public void setMinScoreTabSpacing(int minScoreTabSpacing) {
+		this.minScoreTabSpacing = minScoreTabSpacing;
+	}
+	
+	public int getStringSpacing() {
+		return this.stringSpacing;
+	}
+	
+	public void setStringSpacing(int stringSpacing) {
+		this.stringSpacing = stringSpacing;
+	}
+	
+	public int getScoreLineSpacing() {
+		return this.scoreLineSpacing;
+	}
+	
+	public void setScoreLineSpacing(int scoreLineSpacing) {
+		this.scoreLineSpacing = scoreLineSpacing;
+	}
+	
+	public int getTrackSpacing() {
+		return this.trackSpacing;
+	}
+	
+	public void setTrackSpacing(int trackSpacing) {
+		this.trackSpacing = trackSpacing;
+	}
+	
+	public int getFirstTrackSpacing() {
+		return this.firstTrackSpacing;
+	}
+	
+	public void setFirstTrackSpacing(int firstTrackSpacing) {
+		this.firstTrackSpacing = firstTrackSpacing;
+	}
+	
+	public int getFirstMeasureSpacing() {
+		return this.firstMeasureSpacing;
+	}
+	
+	public void setFirstMeasureSpacing(int firstMeasureSpacing) {
+		this.firstMeasureSpacing = firstMeasureSpacing;
+	}
+	
+	public int getChordFretIndexSpacing() {
+		return this.chordFretIndexSpacing;
+	}
+	
+	public void setChordFretIndexSpacing(int chordFretIndexSpacing) {
+		this.chordFretIndexSpacing = chordFretIndexSpacing;
+	}
+	
+	public int getChordStringSpacing() {
+		return this.chordStringSpacing;
+	}
+	
+	public void setChordStringSpacing(int chordStringSpacing) {
+		this.chordStringSpacing = chordStringSpacing;
+	}
+	
+	public int getChordFretSpacing() {
+		return this.chordFretSpacing;
+	}
+	
+	public void setChordFretSpacing(int chordFretSpacing) {
+		this.chordFretSpacing = chordFretSpacing;
+	}
+	
+	public int getChordNoteSize() {
+		return this.chordNoteSize;
+	}
+	
+	public void setChordNoteSize(int chordNoteSize) {
+		this.chordNoteSize = chordNoteSize;
+	}
+	
+	public int getRepeatEndingSpacing() {
+		return this.repeatEndingSpacing;
+	}
+	
+	public void setRepeatEndingSpacing(int repeatEndingSpacing) {
+		this.repeatEndingSpacing = repeatEndingSpacing;
+	}
+	
+	public int getEffectSpacing() {
+		return this.effectSpacing;
+	}
+	
+	public void setEffectSpacing(int effectSpacing) {
+		this.effectSpacing = effectSpacing;
+	}
+	
+	public int getDivisionTypeSpacing() {
+		return this.divisionTypeSpacing;
+	}
+	
+	public void setDivisionTypeSpacing(int divisionTypeSpacing) {
+		this.divisionTypeSpacing = divisionTypeSpacing;
+	}
+	
+	public int getTextSpacing() {
+		return this.textSpacing;
+	}
+	
+	public void setTextSpacing(int textSpacing) {
+		this.textSpacing = textSpacing;
+	}
+	
+	public int getMarkerSpacing() {
+		return this.markerSpacing;
+	}
+	
+	public void setMarkerSpacing(int markerSpacing) {
+		this.markerSpacing = markerSpacing;
+	}
+	
+	public int getLoopMarkerSpacing() {
+		return this.loopMarkerSpacing;
+	}
+	
+	public void setLoopMarkerSpacing(int loopMarkerSpacing) {
+		this.loopMarkerSpacing = loopMarkerSpacing;
+	}
+	
+	public TGFontModel getDefaultFont() {
+		return this.defaultFont;
+	}
+	
+	public void setDefaultFont(TGFontModel defaultFont) {
+		this.defaultFont = defaultFont;
+	}
+	
+	public TGFontModel getNoteFont() {
+		return this.noteFont;
+	}
+	
+	public void setNoteFont(TGFontModel noteFont) {
+		this.noteFont = noteFont;
+	}
+	
+	public TGFontModel getTimeSignatureFont() {
+		return this.timeSignatureFont;
+	}
+	
+	public void setTimeSignatureFont(TGFontModel timeSignatureFont) {
+		this.timeSignatureFont = timeSignatureFont;
+	}
+	
+	public TGFontModel getLyricFont() {
+		return this.lyricFont;
+	}
+	
+	public void setLyricFont(TGFontModel lyricFont) {
+		this.lyricFont = lyricFont;
+	}
+	
+	public TGFontModel getTextFont() {
+		return this.textFont;
+	}
+	
+	public void setTextFont(TGFontModel textFont) {
+		this.textFont = textFont;
+	}
+	
+	public TGFontModel getMarkerFont() {
+		return this.markerFont;
+	}
+	
+	public void setMarkerFont(TGFontModel markerFont) {
+		this.markerFont = markerFont;
+	}
+	
+	public TGFontModel getGraceFont() {
+		return this.graceFont;
+	}
+	
+	public void setGraceFont(TGFontModel graceFont) {
+		this.graceFont = graceFont;
+	}
+	
+	public TGFontModel getChordFont() {
+		return this.chordFont;
+	}
+	
+	public void setChordFont(TGFontModel chordFont) {
+		this.chordFont = chordFont;
+	}
+	
+	public TGFontModel getChordFretFont() {
+		return this.chordFretFont;
+	}
+	
+	public void setChordFretFont(TGFontModel chordFretFont) {
+		this.chordFretFont = chordFretFont;
+	}
+	
+	public TGColorModel getBackgroundColor() {
+		return this.backgroundColor;
+	}
+	
+	public void setBackgroundColor(TGColorModel backgroundColor) {
+		this.backgroundColor = backgroundColor;
+	}
+	
+	public TGColorModel getLineColor() {
+		return this.lineColor;
+	}
+	
+	public void setLineColor(TGColorModel lineColor) {
+		this.lineColor = lineColor;
+	}
+	
+	public TGColorModel getScoreNoteColor() {
+		return this.scoreNoteColor;
+	}
+	
+	public void setScoreNoteColor(TGColorModel scoreNoteColor) {
+		this.scoreNoteColor = scoreNoteColor;
+	}
+	
+	public TGColorModel getTabNoteColor() {
+		return this.tabNoteColor;
+	}
+	
+	public void setTabNoteColor(TGColorModel tabNoteColor) {
+		this.tabNoteColor = tabNoteColor;
+	}
+	
+	public TGColorModel getPlayNoteColor() {
+		return this.playNoteColor;
+	}
+	
+	public void setPlayNoteColor(TGColorModel playNoteColor) {
+		this.playNoteColor = playNoteColor;
+	}
+	
+	public TGColorModel getLoopSMarkerColor() {
+		return this.loopSMarkerColor;
+	}
+	
+	public void setLoopSMarkerColor(TGColorModel loopSMarkerColor) {
+		this.loopSMarkerColor = loopSMarkerColor;
+	}
+	
+	public TGColorModel getLoopEMarkerColor() {
+		return this.loopEMarkerColor;
+	}
+	
+	public void setLoopEMarkerColor(TGColorModel loopEMarkerColor) {
+		this.loopEMarkerColor = loopEMarkerColor;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayoutVertical.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayoutVertical.java
new file mode 100644
index 0000000..debe68f
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLayoutVertical.java
@@ -0,0 +1,203 @@
+/*
+ * Created on 04-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGLayoutVertical extends TGLayout{
+	
+	private int maximumWidth;
+	private int marginLeft;
+	private int marginRight;
+	
+	public TGLayoutVertical(TGController controller,int style){
+		super(controller,style);
+	}
+	
+	public int getMode(){
+		return MODE_VERTICAL;
+	}
+	
+	public void paintSong(TGPainter painter,TGRectangle clientArea,int fromX,int fromY) {
+		this.marginLeft = getFirstMeasureSpacing();
+		this.marginRight = 10;
+		this.maximumWidth = (clientArea.getWidth() - (this.marginLeft + this.marginRight));
+		this.setHeight(0);
+		this.setWidth(0);
+		this.clearTrackPositions();
+		
+		int style = getStyle();
+		int number = getComponent().getTrackSelection();
+		int posY = fromY + getFirstTrackSpacing();
+		int height = getFirstTrackSpacing();
+		int lineHeight = 0;
+		
+		int measureCount = getSongManager().getSong().countMeasureHeaders();
+		int nextMeasureIndex = 0;
+		while(measureCount > nextMeasureIndex){
+			TempLine line = null;
+			Iterator tracks = getSongManager().getSong().getTracks();
+			while(tracks.hasNext()){
+				TGTrackImpl track = (TGTrackImpl) tracks.next();
+				if(number < 0 || track.getNumber() == number){
+					
+					TGTrackSpacing ts = new TGTrackSpacing(this) ;
+					ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0 ?( (getScoreLineSpacing() * 5) ):0));
+					
+					if(nextMeasureIndex == 0){
+						((TGLyricImpl)track.getLyrics()).start();
+					}
+					
+					line = getTempLines(track,nextMeasureIndex,ts);
+					if( (style & DISPLAY_SCORE) != 0 ){
+						ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, Math.abs(line.minY));
+						if(line.maxY > track.getScoreHeight()){
+							ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (line.maxY - track.getScoreHeight()) );
+						}
+					}
+					if((style & DISPLAY_TABLATURE) != 0){
+						ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(line.minY), getStringSpacing()) ));
+						ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ?  track.getTabHeight() + getStringSpacing() + 1 : Math.max( line.maxY, track.getTabHeight() + getStringSpacing() + 1) ));
+					}
+					ts.setSize(TGTrackSpacing.POSITION_LYRIC,10);
+					checkDefaultSpacing(ts);
+					
+					paintLine(track,line,painter,fromX,posY,ts,clientArea);
+					
+					lineHeight = ts.getSize();
+					addTrackPosition(track.getNumber(),posY,lineHeight);
+					
+					int emptyX = (this.marginLeft + fromX + line.tempWith + 2);
+					int emptyWith = ( this.maximumWidth - emptyX );
+					if((emptyWith - 20) > 0 && (line.lastIndex + 1) >= measureCount){
+						if(emptyX < (clientArea.getX() + clientArea.getWidth())){
+							emptyX = (emptyX < clientArea.getX() ? clientArea.getX() :emptyX);
+							emptyWith = ( emptyWith > clientArea.getWidth() ? clientArea.getWidth() : emptyWith );
+							paintLines(track,ts,painter, emptyX ,posY, emptyWith);
+						}
+					}
+					
+					posY += lineHeight + getTrackSpacing();
+					height += lineHeight + getTrackSpacing();
+				}
+			}
+			if(line != null){
+				nextMeasureIndex = line.lastIndex + 1;
+			}
+		}
+		
+		this.setHeight(height);
+		this.setWidth( getWidth() + this.marginRight );
+	}
+	
+	public void paintLine(TGTrackImpl track,TempLine line,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts,TGRectangle clientArea) {
+		int posX = (this.marginLeft + fromX);
+		int posY = fromY;
+		int width = this.marginLeft;
+		
+		//verifico si esta en el area de cliente
+		boolean isAtY = (posY + ts.getSize() > clientArea.getY() && posY < clientArea.getY() + clientArea.getHeight() + 80);
+		
+		int measureSpacing = 0;
+		if(line.fullLine){
+			int diff = ( this.maximumWidth - line.tempWith);
+			if(diff != 0 && line.measures.size() > 0){
+				measureSpacing = diff / line.measures.size();
+			}
+		}
+		
+		for(int i = 0;i < line.measures.size();i ++){
+			int index = ((Integer)line.measures.get(i)).intValue();
+			TGMeasureImpl currMeasure = (TGMeasureImpl)track.getMeasure(index);
+			
+			//asigno la posicion dentro del compas
+			currMeasure.setPosX(posX);
+			currMeasure.setPosY(posY);
+			currMeasure.setTs(ts);
+			
+			((TGLyricImpl)track.getLyrics()).setCurrentMeasure(currMeasure);
+			
+			currMeasure.setFirstOfLine(i == 0);
+			
+			int measureWidth = ( currMeasure.getWidth(this) + measureSpacing );
+			boolean isAtX = ( posX + measureWidth > clientArea.getX() && posX < clientArea.getX() + clientArea.getWidth());
+			if(isAtX && isAtY){
+				paintMeasure(currMeasure,painter,measureSpacing);
+				((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,currMeasure,posX, posY);
+			}else{
+				currMeasure.setOutOfBounds(true);
+			}
+			
+			posX += measureWidth;
+			width += measureWidth;
+		}
+		this.setWidth(Math.max(getWidth(),width));
+	}
+	
+	public TempLine getTempLines(TGTrack track,int fromIndex,TGTrackSpacing ts) {
+		int style = getStyle();
+		
+		TempLine line = new TempLine();
+		line.maxY = 0;
+		line.minY = 0;
+		
+		// Need to score extra-lines in edition mode
+		if( (style & DISPLAY_TABLATURE) == 0 && (style & DISPLAY_SCORE) != 0 ){
+			line.maxY = ((getScoreLineSpacing() * 4) + (getScoreLineSpacing() * 4));
+			line.minY = -(getScoreLineSpacing() * 3);
+		}
+		
+		int measureCount = track.countMeasures();
+		for (int measureIdx = fromIndex; measureIdx < measureCount; measureIdx++) {
+			TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure(measureIdx);
+			
+			//verifico si tengo que bajar de linea
+			if((line.tempWith + measure.getWidth(this)) >= this.maximumWidth && !line.measures.isEmpty()){
+				line.fullLine = true;
+				return line;
+			}
+			line.tempWith +=  measure.getWidth(this);
+			line.maxY = (measure.getMaxY() > line.maxY)?measure.getMaxY():line.maxY;
+			line.minY = (measure.getMinY() < line.minY)?measure.getMinY():line.minY;
+			
+			line.addMeasure(measureIdx);
+			measure.registerSpacing(this,ts);
+		}
+		
+		return line;
+	}
+	
+	private class TempLine{
+		protected int tempWith;
+		protected int lastIndex;
+		protected boolean fullLine;
+		protected int maxY = 0;
+		protected int minY = 0;
+		protected List measures;
+		
+		public TempLine(){
+			this.measures = new ArrayList();
+		}
+		
+		protected void addMeasure(int index){
+			this.measures.add(new Integer(index));
+			this.lastIndex = index;
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLyricImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLyricImpl.java
new file mode 100644
index 0000000..f39c3f1
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGLyricImpl.java
@@ -0,0 +1,72 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.song.models.TGLyric;
+
+public class TGLyricImpl extends TGLyric{
+	
+	private int height;
+	private int nextIndex = 0;
+	
+	public TGLyricImpl(){
+		this.height = 0;
+	}
+	
+	public void setFrom(int from) {
+		super.setFrom(from);
+		this.update();
+	}
+	
+	public void setLyrics(String lyrics) {
+		super.setLyrics(lyrics);
+		this.update();
+	}
+	
+	private void update(){
+		this.height = (this.isEmpty()?0:10);
+	}
+	
+	public void start(){
+		this.start(0);
+	}
+	
+	public void start(int index){
+		this.nextIndex = index;
+	}
+	
+	public void setCurrentMeasure(TGMeasureImpl measure){
+		if(measure.getNumber() >= getFrom()){
+			measure.setLyricBeatIndex(this.nextIndex);
+			this.nextIndex += (measure.getNotEmptyBeats());
+		}else{
+			measure.setLyricBeatIndex(-1);
+			this.start();
+		}
+	}
+	
+	public void paintCurrentNoteBeats(TGPainter painter,TGLayout layout,TGMeasureImpl currentMeasure ,int fromX,int fromY){
+		int from = currentMeasure.getLyricBeatIndex();
+		String[] beats = getLyricBeats();
+		if(beats != null && from >= 0 && from < beats.length){
+			int beatIndex = 0;
+			for(int i = 0;i < currentMeasure.countBeats();i ++){
+				TGBeatImpl beat = (TGBeatImpl)currentMeasure.getBeat(i);
+				if(!beat.isRestBeat()){
+					if((from + beatIndex) < beats.length){
+						String str = beats[from + beatIndex].trim();
+						if(str.length() > 0){
+							int x = (fromX + beat.getPosX() + beat.getSpacing() + 2);
+							layout.setLyricStyle(painter,(layout.isPlayModeEnabled() && beat.isPlaying(layout)));
+							painter.drawString(str,x + 13,(fromY + currentMeasure.getTs().getPosition(TGTrackSpacing.POSITION_LYRIC)));
+						}
+					}
+					beatIndex ++;
+				}
+			}
+		}
+	}
+	
+	public int getHeight(){
+		return this.height;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGMeasureBuffer.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGMeasureBuffer.java
new file mode 100644
index 0000000..fcb2a3c
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGMeasureBuffer.java
@@ -0,0 +1,78 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGMeasureBuffer {
+	
+	private TGImage buffer;
+	
+	private TGPainter painter;
+	
+	private int width;
+	
+	private int height;
+	
+	public TGMeasureBuffer(){
+		super();
+	}
+	
+	public void createBuffer(TGPainter painter, int width,int height,TGColor background){
+		this.dispose();
+		this.width = width;
+		this.height = height;
+		this.buffer = painter.createImage(this.width, this.height);
+		this.fillBuffer(background);
+	}
+	
+	public void disposeBuffer(){
+		if(this.buffer != null && !this.buffer.isDisposed()){
+			this.buffer.dispose();
+		}
+	}
+	
+	private void fillBuffer(TGColor background){
+		getPainter().setBackground(background);
+		getPainter().initPath(TGPainter.PATH_FILL);
+		getPainter().addRectangle(0,0,this.width,this.height);
+		getPainter().closePath();
+	}
+	
+	public void paintBuffer(TGPainter painter,int x,int y,int srcY){
+		painter.drawImage(this.buffer,0,srcY, this.width, (this.height - srcY), x, (y + srcY), this.width, (this.height - srcY));
+	}
+	
+	public void createPainter(){
+		this.disposePainter();
+		//this.painter = new TGPainterImpl(this.buffer);
+		this.painter = this.buffer.createPainter();
+	}
+	
+	public void disposePainter(){
+		if(this.painter != null && !this.painter.isDisposed()){
+			this.painter.dispose();
+			this.painter = null;
+		}
+	}
+	
+	public TGPainter getPainter(){
+		if(this.painter == null || this.painter.isDisposed()){
+			this.createPainter();
+		}
+		return this.painter;
+	}
+	
+	public TGImage getImage(){
+		return this.buffer;
+	}
+	
+	public void dispose(){
+		this.disposePainter();
+		this.disposeBuffer();
+	}
+	
+	public boolean isDisposed(){
+		return (this.buffer == null || this.buffer.isDisposed());
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGMeasureHeaderImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGMeasureHeaderImpl.java
new file mode 100644
index 0000000..c04ee27
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGMeasureHeaderImpl.java
@@ -0,0 +1,156 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+public class TGMeasureHeaderImpl extends TGMeasureHeader{
+	/**
+	 * Espacio por defecto del timeSignature
+	 */
+	private static final int DEFAULT_TIME_SIGNATURE_SPACING = 30;
+	/**
+	 * Espacio por defecto a la izquierda
+	 */
+	private static final int DEFAULT_LEFT_SPACING = 15;
+	/**
+	 * Espacio por defecto a la derecha
+	 */
+	private static final int DEFAULT_RIGHT_SPACING = 15;
+	
+	private static final int PAINT_TEMPO = 0x01;
+	
+	private static final int PAINT_TRIPLET_FEEL = 0x02;
+	
+	private static final int PAINT_TIME_SIGNATURE = 0x04;
+	
+	private int paintFlags;
+	
+	private int maxQuarterSpacing;
+	
+	private int maxClefSpacing;
+	
+	private int maxKeySignatureSpacing;
+	
+	private int maxWidth;
+	
+	public TGMeasureHeaderImpl(TGFactory factory){
+		super(factory);
+	}
+	
+	public void reset() {
+		this.maxWidth = 0;
+		this.paintFlags = 0;
+		this.maxQuarterSpacing = 0;
+		this.maxClefSpacing = 0;
+		this.maxKeySignatureSpacing = 0;
+	}
+	
+	public void update(TGLayout layout, int index) {
+		this.reset();
+		this.calculateMeasureChanges(layout);
+		
+		int trackCount = getSong().countTracks();
+		for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
+			TGTrackImpl track = (TGTrackImpl)getSong().getTrack(trackIdx);
+			TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure( index );
+			measure.calculateMeasureChanges(layout);
+		}
+	}
+	
+	public void calculateMeasureChanges(TGLayout layout) {
+		TGMeasureHeader previous = layout.getSongManager().getPrevMeasureHeader(this);
+		if(previous == null){
+			this.paintFlags |= PAINT_TEMPO; 
+			this.paintFlags |= ((this.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE)?PAINT_TRIPLET_FEEL:0);
+			this.paintFlags |= PAINT_TIME_SIGNATURE;
+		}else{
+			//Tempo
+			if(this.getTempo().getValue() != previous.getTempo().getValue()){
+				this.paintFlags |= PAINT_TEMPO; 
+			}
+			//Triplet Feel
+			if(this.getTripletFeel() != previous.getTripletFeel()){
+				this.paintFlags |= PAINT_TRIPLET_FEEL;
+			}
+			//Time Signature
+			int thisNumerator = this.getTimeSignature().getNumerator();
+			int thisValue = this.getTimeSignature().getDenominator().getValue();
+			int prevNumerator = previous.getTimeSignature().getNumerator();
+			int prevValue = previous.getTimeSignature().getDenominator().getValue();
+			if(thisNumerator != prevNumerator || thisValue != prevValue){
+				this.paintFlags |= PAINT_TIME_SIGNATURE;
+			}
+		}
+	}
+	
+	public boolean shouldPaintTempo(){
+		return ( (this.paintFlags & PAINT_TEMPO) != 0 );
+	}
+	
+	public boolean shouldPaintTripletFeel(){
+		return ( (this.paintFlags & PAINT_TRIPLET_FEEL) != 0 );
+	}
+	
+	public boolean shouldPaintTimeSignature(){
+		return ( (this.paintFlags & PAINT_TIME_SIGNATURE) != 0 );
+	}
+	
+	public int getMaxQuarterSpacing() {
+		return this.maxQuarterSpacing;
+	}
+	
+	public void notifyQuarterSpacing(int spacing) {
+		this.maxQuarterSpacing = ((spacing > this.maxQuarterSpacing) ? spacing : this.maxQuarterSpacing );
+	}
+	
+	public int getClefSpacing(TGLayout layout, TGMeasureImpl measure){
+		return (!measure.isPaintClef() && (layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) == 0 ? 0 : this.maxClefSpacing );
+	}
+	
+	public int getKeySignatureSpacing(TGLayout layout, TGMeasureImpl measure){
+		return (!measure.isPaintKeySignature() && (layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) == 0 ? 0 : this.maxKeySignatureSpacing );
+	}
+	
+	public int getTempoSpacing(TGLayout layout){
+		return (shouldPaintTempo()? Math.round( 45 * layout.getScale() ):0);
+	}
+	
+	public int getTripletFeelSpacing(TGLayout layout){
+		return (shouldPaintTripletFeel()? Math.round( 55 * layout.getScale() ):0);
+	}
+	
+	public int getTimeSignatureSpacing(TGLayout layout){
+		return (shouldPaintTimeSignature()? Math.round( DEFAULT_TIME_SIGNATURE_SPACING * layout.getScale() ):0);
+	}
+	
+	public int getLeftSpacing(TGLayout layout){
+		return Math.round( DEFAULT_LEFT_SPACING * layout.getScale() );
+	}
+	
+	public int getRightSpacing(TGLayout layout){
+		return Math.round( DEFAULT_RIGHT_SPACING * layout.getScale() );
+	}
+	
+	public int getFirstNoteSpacing(TGLayout layout, TGMeasureImpl measure){
+		int topSpacing = getTempoSpacing(layout) + getTripletFeelSpacing(layout);
+		int middleSpacing = getClefSpacing(layout,measure) + getKeySignatureSpacing(layout,measure) + getTimeSignatureSpacing(layout);
+		
+		return Math.round(Math.max( topSpacing , middleSpacing) + (10f * layout.getScale()));
+	}
+	
+	public void notifyClefSpacing(int spacing){
+		this.maxClefSpacing = ((spacing > this.maxClefSpacing)?spacing:this.maxClefSpacing);
+	}
+	
+	public void notifyKeySignatureSpacing(int spacing){
+		this.maxKeySignatureSpacing = ((spacing > this.maxKeySignatureSpacing) ? spacing : this.maxKeySignatureSpacing);
+	}
+	
+	public void notifyWidth(int width){
+		this.maxWidth = ((width > this.maxWidth)?width:this.maxWidth);
+	}
+	
+	public int getMaxWidth(){
+		return this.maxWidth;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGMeasureImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGMeasureImpl.java
new file mode 100644
index 0000000..4243926
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGMeasureImpl.java
@@ -0,0 +1,1326 @@
+/*
+ * Created on 26-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGClefPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGKeySignaturePainter;
+import org.herac.tuxguitar.graphics.control.painters.TGTempoPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGTripletFeelPainter;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGMeasureImpl extends TGMeasure{
+	
+	public static final int NATURAL = 1;
+	public static final int SHARP = 2;
+	public static final int FLAT = 3;
+	
+	public static final int KEY_SIGNATURES[][] = new int[][]{
+		//------------NATURAL------------------------------------
+		{NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL}, // NATURAL
+		//------------SHARPS------------------------------------
+		{NATURAL,NATURAL,NATURAL,SHARP,NATURAL,NATURAL,NATURAL},   // 1 SHARP
+		{SHARP,NATURAL,NATURAL,SHARP,NATURAL,NATURAL,NATURAL},     // 2 SHARPS
+		{SHARP,NATURAL,NATURAL,SHARP,SHARP,NATURAL,NATURAL},       // 3 SHARPS
+		{SHARP,SHARP,NATURAL,SHARP,SHARP,NATURAL,NATURAL},         // 4 SHARPS
+		{SHARP,SHARP,NATURAL,SHARP,SHARP,SHARP,NATURAL},           // 5 SHARPS
+		{SHARP,SHARP,SHARP,SHARP,SHARP,SHARP,NATURAL},             // 6 SHARPS
+		{SHARP,SHARP,SHARP,SHARP,SHARP,SHARP,SHARP},               // 7 SHARPS
+		//------------FLATS------------------------------------
+		{NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,FLAT},    // 1 FLAT
+		{NATURAL,NATURAL,FLAT,NATURAL,NATURAL,NATURAL,FLAT},       // 2 FLATS
+		{NATURAL,NATURAL,FLAT,NATURAL,NATURAL,FLAT,FLAT},          // 3 FLATS
+		{NATURAL,FLAT,FLAT,NATURAL,NATURAL,FLAT,FLAT},             // 4 FLATS
+		{NATURAL,FLAT,FLAT,NATURAL,FLAT,FLAT,FLAT},                // 5 FLATS
+		{FLAT,FLAT,FLAT,NATURAL,FLAT,FLAT,FLAT},                   // 6 FLATS
+		{FLAT,FLAT,FLAT,FLAT,FLAT,FLAT,FLAT},                      // 7 FLATS
+	};
+	
+	public static final int ACCIDENTAL_SHARP_NOTES[] = new int[]{0,0,1,1,2,3,3,4,4,5,5,6};
+	public static final int ACCIDENTAL_FLAT_NOTES [] = new int[]{0,1,1,2,2,3,4,4,5,5,6,6};
+	public static final boolean ACCIDENTAL_NOTES[] = new boolean[]{false,true,false,true,false,false,true,false,true,false,true,false};
+	
+	public static final int SCORE_KEY_OFFSETS[] = new int[]{30,18,22,24};
+	
+	public static final int SCORE_KEY_SHARP_POSITIONS[][] = new int[][]{ 
+		new int[] { 1 , 4, 0, 3, 6, 2 , 5 } ,
+		new int[] { 3 , 6, 2, 5, 8, 4 , 7 } ,
+		new int[] { 7 , 3, 6, 2, 5, 1 , 4 } ,
+		new int[] { 2 , 5, 1, 4, 7, 3 , 6 } ,
+	};
+	
+	public static final int SCORE_KEY_FLAT_POSITIONS[][] = new int[][]{ 
+		new int[] { 5, 2, 6, 3, 7, 4, 8 } ,
+		new int[] { 7, 4, 8, 5, 9, 6, 10 } ,
+		new int[] { 4, 1, 5, 2, 6, 3, 7 } ,
+		new int[] { 6, 3, 7, 4, 8, 5, 9 } ,
+	};
+	
+	/**
+	 * Espacio por defecto de la clave
+	 */
+	private static final int DEFAULT_CLEF_SPACING = 40;
+	/**
+	 * Espacio por defecto entre negra y negra
+	 */
+	private static final int DEFAULT_QUARTER_SPACING = 30;
+	/**
+	 * Posicion X
+	 */
+	private int posX;
+	/** 
+	 * Posicion Y
+	 */
+	private int posY;
+	/**
+	 * Espacio entre negras
+	 */
+	private int quarterSpacing;
+	/**
+	 * Espacio entre pulsos
+	 */
+	private long divisionLength;
+	/**
+	 * Boolean para saber si hay que pintar la clave
+	 */
+	private boolean paintClef = true;
+	/**
+	 * Boolean para saber si hay que pintar el KeySignature
+	 */
+	private boolean paintKeySignature = true;
+	/**
+	 * Compas anterior
+	 */
+	private TGMeasure prevMeasure;
+	/**
+	 * Boolean para saber si el compas esta en el area de pantalla
+	 */
+	private boolean outOfBounds;
+	/**
+	 * Boolean para saber si el compas es el primero de la linea
+	 */
+	private boolean firstOfLine;
+	
+	private boolean compactMode;
+	
+	private int spacing;
+	
+	private TGTrackSpacing ts;
+	
+	private int maxY;
+	
+	private int minY;
+	
+	private int notEmptyVoices;
+	
+	private int notEmptyBeats;
+	
+	private int widthBeats = 0;
+	
+	private List[] voiceGroups;
+	
+	private TGMeasureBuffer buffer;
+	
+	private boolean bufferCreated;
+	
+	private TGColor markerColor;
+	
+	private int lyricBeatIndex;
+	private int width;
+	
+	private int beatEffectSpacing;
+	private boolean text;
+	private boolean chord;
+	private boolean division;
+	
+	private boolean[][] registeredAccidentals;
+	
+	public TGMeasureImpl(TGMeasureHeader header) {
+		super(header);
+		this.registeredAccidentals = new boolean[11][7];
+		this.voiceGroups = new List[TGBeat.MAX_VOICES];
+		for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){
+			this.voiceGroups[v] = new ArrayList();
+		}
+	}
+	
+	/**
+	 * Crea los valores necesarios
+	 */
+	public void create(TGLayout layout) {
+		this.divisionLength = TGSongManager.getDivisionLength(getHeader());
+		this.resetSpacing();
+		this.autoCompleteSilences(layout.getSongManager());
+		this.orderBeats(layout.getSongManager());
+		this.checkCompactMode(layout);
+		this.clearRegisteredAccidentals();
+		this.calculateBeats(layout);
+		this.calculateWidth(layout);
+		this.setFirstOfLine(false);
+	}
+	
+	/**
+	 * Actualiza los valores para dibujar
+	 */
+	public void update(TGLayout layout) {
+		updateComponents(layout);
+		setOutOfBounds(true);
+		setBufferCreated(false);
+	}
+	
+	private void checkCompactMode(TGLayout layout){
+		boolean compactMode = ( (layout.getStyle() & TGLayout.DISPLAY_COMPACT) != 0 );
+		if(compactMode && (layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) != 0){
+			compactMode = (layout.getSongManager().getSong().countTracks() == 1);
+		}
+		this.compactMode = compactMode;
+	}
+	
+	private void clearRegisteredAccidentals(){
+		for( int i = 0 ; i < 11 ; i ++ ){
+			for( int n = 0 ; n < 7 ; n ++ ){
+				this.registeredAccidentals[i][n] = false;
+			}
+		}
+	}
+	
+	public void calculateWidth(TGLayout layout) {
+		if(this.compactMode){
+			this.width = this.widthBeats;
+		}
+		else{
+			double quartersInSignature = ((1.00 / this.getTimeSignature().getDenominator().getValue()) * 4.00) * this.getTimeSignature().getNumerator();
+			this.width = (int)(getQuarterSpacing() * quartersInSignature);
+		}
+		
+		this.width += getFirstNoteSpacing(layout);
+		this.width += (this.getRepeatClose() > 0)?20:0;
+		this.width += getHeaderImpl().getLeftSpacing(layout);
+		this.width += getHeaderImpl().getRightSpacing(layout);
+		
+		this.getHeaderImpl().notifyWidth(this.width);
+	}
+	
+	private void calculateBeats(TGLayout layout) {
+		TGChord previousChord = null;
+		TGDuration minDuration = null;
+		TGBeatImpl previousBeat = null;
+		TGVoiceImpl[] previousVoices = new TGVoiceImpl[TGBeat.MAX_VOICES];
+		TGBeatGroup[] groups = new TGBeatGroup[TGBeat.MAX_VOICES];
+		
+		int style = layout.getStyle();
+		int minimumChordLength = 0;
+		
+		boolean[] notEmptyVoicesChecked = new boolean[TGBeat.MAX_VOICES];
+		boolean chordEnabled = ((style & (TGLayout.DISPLAY_CHORD_DIAGRAM | TGLayout.DISPLAY_CHORD_NAME)) != 0);
+		this.widthBeats = 0;
+		this.notEmptyBeats = 0;
+		this.notEmptyVoices = 0;
+		for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){
+			this.voiceGroups[v].clear();
+		}
+		
+		for (int i = 0; i < countBeats(); i++) {
+			TGBeatImpl beat = (TGBeatImpl)getBeat(i);
+			beat.reset();
+			
+			if(chordEnabled && beat.getChord() != null){
+				if(previousChord != null){
+					int length = (int) (beat.getStart() - previousChord.getBeat().getStart());
+					minimumChordLength = (minimumChordLength > 0)?Math.min(minimumChordLength, Math.abs(length)):length;
+				}
+				previousChord = beat.getChord();
+			}
+			boolean emptyBeat = true;
+			for( int v = 0; v < TGBeat.MAX_VOICES; v ++){
+				TGVoiceImpl voice = (TGVoiceImpl)beat.getVoice(v);
+				if(!voice.isEmpty()){
+					emptyBeat = false;
+					
+					voice.reset();
+					if (minDuration == null || voice.getDuration().getTime() <= minDuration.getTime()) {
+						minDuration = voice.getDuration();
+					}
+					if( !notEmptyVoicesChecked[v] ){
+						notEmptyVoicesChecked[v] = true;
+						this.notEmptyVoices ++;
+					}
+					
+					Iterator it = voice.getNotes().iterator();
+					while(it.hasNext()){
+						TGNoteImpl note = (TGNoteImpl)it.next();
+						voice.check(note);
+					}
+					
+					if(!voice.isRestVoice()){
+						beat.check( layout, voice.getMinNote() );
+						beat.check( layout, voice.getMaxNote() );
+						if( ( groups[v] == null ) || !canJoin(layout.getSongManager(),voice,previousVoices[v]) ){
+							groups[v] = new TGBeatGroup(v);
+							this.voiceGroups[v].add(groups[v]);
+						}
+						groups[v].check(voice);
+					}else{
+						for( int v2 = 0; v2 < TGBeat.MAX_VOICES; v2 ++){
+							if(v2 != voice.getIndex()){
+								TGVoiceImpl voice2 = beat.getVoiceImpl(v2);
+								if( !voice2.isEmpty() && voice2.getDuration().isEqual(voice.getDuration())){
+									if(!voice2.isRestVoice() || !voice2.isHiddenSilence()){
+										voice.setHiddenSilence(true);
+										break;
+									}
+								}
+							}
+						}
+					}
+					makeVoice(layout, voice, previousVoices[v], groups[v]);
+					previousVoices[v] = voice;
+				}
+			}
+			if (emptyBeat){
+				System.out.println( "Empty Beat !!!!!! " + beat.getStart() + "  " + i);
+			}
+			
+			makeBeat(layout,beat,previousBeat,chordEnabled);
+			previousBeat = beat;
+		}
+		
+		for(int v = 0; v < this.voiceGroups.length; v ++){
+			Iterator voiceGroups = this.voiceGroups[v].iterator();
+			while (voiceGroups.hasNext()) {
+				TGBeatGroup group = (TGBeatGroup)voiceGroups.next();
+				group.finish(layout,this);
+			}
+		}
+		
+		if(!this.compactMode){
+			this.quarterSpacing = (minDuration != null)?layout.getSpacingForQuarter(minDuration): Math.round(DEFAULT_QUARTER_SPACING * layout.getScale());
+			if(chordEnabled && minimumChordLength > 0){
+				int chordWidth = (layout.getChordFretIndexSpacing() + layout.getChordStringSpacing() + (getTrack().stringCount() * layout.getChordStringSpacing()));
+				int minimumSpacing = (int)((TGDuration.QUARTER_TIME * chordWidth) / minimumChordLength);
+				this.quarterSpacing = Math.max(minimumSpacing,this.quarterSpacing);
+			}
+			this.getHeaderImpl().notifyQuarterSpacing(this.quarterSpacing);
+		}
+	}
+	
+	public boolean canJoin(TGSongManager manager,TGVoiceImpl b1,TGVoiceImpl b2){
+		if( b1 == null || b2 == null || b1.isRestVoice() || b2.isRestVoice() ){
+			return false;
+		}
+		
+		long divisionLength = getDivisionLength();
+		long start = getStart();
+		long start1 = (manager.getMeasureManager().getRealStart(this, b1.getBeat().getStart()) - start);
+		long start2 = (manager.getMeasureManager().getRealStart(this, b2.getBeat().getStart()) - start);
+		
+		if(b1.getDuration().getValue() < TGDuration.EIGHTH || b2.getDuration().getValue() < TGDuration.EIGHTH ){
+			return ( start1 == start2);
+		}
+		
+		long p1 = ((divisionLength + start1) / divisionLength);
+		long p2 = ((divisionLength + start2) / divisionLength);
+		
+		return  (   p1 == p2  );
+	}
+	
+	private void makeVoice(TGLayout layout,TGVoiceImpl voice,TGVoiceImpl previousVoice,TGBeatGroup group){
+		voice.setWidth((int)layout.getVoiceWidth(voice));
+		voice.setBeatGroup( group );
+		
+		if(previousVoice != null){
+			voice.setPreviousBeat(previousVoice);
+			previousVoice.setNextBeat(voice);
+		}
+	}
+	
+	private void makeBeat(TGLayout layout,TGBeatImpl beat,TGBeatImpl previousBeat, boolean chordEnabled){
+		int minimumWidth = -1;
+		boolean restBeat = true;
+		for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){
+			TGVoiceImpl voice = beat.getVoiceImpl(v);
+			if(!voice.isEmpty()){
+				if( minimumWidth < 0 || voice.getWidth() < minimumWidth ){
+					minimumWidth = voice.getWidth();
+				}
+				if( !voice.isRestVoice() ){
+					restBeat = false;
+				}
+			}
+		}
+		
+		beat.setWidth( minimumWidth );
+		this.notEmptyBeats += (restBeat ? 0 : 1);
+		this.widthBeats += beat.getMinimumWidth();
+		
+		if(previousBeat != null){
+			beat.setPreviousBeat(previousBeat);
+			previousBeat.setNextBeat(beat);
+			
+			if(chordEnabled && beat.isChordBeat() && previousBeat.isChordBeat()){
+				int previousWidth = previousBeat.getMinimumWidth();
+				int chordWidth = (layout.getChordFretIndexSpacing() + layout.getChordStringSpacing() + (getTrack().stringCount() * layout.getChordStringSpacing()));
+				previousBeat.setWidth(Math.max(chordWidth,previousWidth));
+				this.widthBeats -= previousWidth;
+				this.widthBeats += previousBeat.getMinimumWidth();
+			}
+		}
+	}
+	
+	/**
+	 * Calcula si debe pintar el TimeSignature
+	 */
+	public void calculateMeasureChanges(TGLayout layout) {
+		this.paintClef = false;
+		this.paintKeySignature = false;
+		this.prevMeasure = (layout.isFirstMeasure(this) ? null : (TGMeasureImpl)layout.getSongManager().getTrackManager().getPrevMeasure(this));
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+			if(this.prevMeasure == null || getClef() != this.prevMeasure.getClef()){
+				this.paintClef = true;
+				this.getHeaderImpl().notifyClefSpacing( Math.round(DEFAULT_CLEF_SPACING * layout.getScale()) );
+			}
+			if(this.prevMeasure == null || getKeySignature() != this.prevMeasure.getKeySignature()){
+				this.paintKeySignature = true;
+				this.getHeaderImpl().notifyKeySignatureSpacing(calculateKeySignatureSpacing(layout));
+			}
+		}
+	}
+	
+	/**
+	 * Calcula si hay espacios libres. y crea nuevos silencios
+	 */
+	private void autoCompleteSilences(TGSongManager manager){
+		manager.getMeasureManager().autoCompleteSilences(this);
+	}
+	
+	/**
+	 * Llama a update de todas las notas del compas
+	 */
+	private void updateComponents(TGLayout layout) {
+		this.maxY = 0;
+		this.minY = 0;
+		
+		int spacing = getFirstNoteSpacing(layout);
+		int tmpX = spacing;
+		for (int i = 0; i < countBeats(); i++) {
+			TGBeatImpl beat = (TGBeatImpl) getBeat(i);
+			beat.resetEffectsSpacing(layout);
+			
+			if(this.compactMode){
+				beat.setPosX(tmpX);
+				tmpX += beat.getMinimumWidth();
+			}
+			else{
+				int quarterWidth = getMaxQuarterSpacing(layout);
+				int x1 = (spacing + getDisplayPosition(beat.getStart(), quarterWidth));
+				int minimumWidth = -1;
+				for(int v = 0 ; v < beat.countVoices(); v ++){
+					TGVoiceImpl voice = beat.getVoiceImpl(v);
+					if(!voice.isEmpty()){
+						int x2 = (spacing + getDisplayPosition(beat.getStart() + voice.getDuration().getTime(), quarterWidth));
+						int width = ( x2 - x1 );
+						if( minimumWidth < 0 || width < minimumWidth ){
+							minimumWidth = width;
+						}
+						voice.setWidth( width );
+					}
+				}
+				beat.setPosX( x1 );
+				beat.setWidth( minimumWidth );
+			}
+			
+			for(int v = 0 ; v < beat.countVoices(); v ++){
+				TGVoiceImpl voice = beat.getVoiceImpl(v);
+				if(!voice.isEmpty()){
+					Iterator notes = voice.getNotes().iterator();
+					while(notes.hasNext()){
+						TGNoteImpl note = (TGNoteImpl)notes.next();
+						beat.updateEffectsSpacing(layout, note.getEffect());
+						note.update(layout);
+					}
+					voice.update(layout);
+					
+					if(!this.division && !voice.getDuration().getDivision().isEqual(TGDivisionType.NORMAL)){
+						this.division = true;
+					}
+					if( (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 || (voice.isRestVoice() && !voice.isHiddenSilence()) ){
+						if( voice.getMaxY() > this.maxY ){
+							this.maxY = voice.getMaxY();
+						}
+						if( voice.getMinY() < this.minY ){
+							this.minY = voice.getMinY();
+						}
+					}
+				}
+			}
+			
+			int bsSize = beat.getEffectsSpacing(layout);
+			if( bsSize > this.beatEffectSpacing ){
+				this.beatEffectSpacing = bsSize;
+			}
+			
+			if(!this.chord && beat.isChordBeat()){
+				this.chord = true;
+			}
+			
+			if(!this.text && beat.isTextBeat()){
+				this.text = true;
+			}
+		}
+		
+		if( (layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0){
+			for(int i = 0; i < this.voiceGroups.length; i ++){
+				Iterator groups = this.voiceGroups[i].iterator();
+				while (groups.hasNext()) {
+					TGBeatGroup group = (TGBeatGroup)groups.next();
+					checkValue(layout,group.getMinNote(),group.getDirection());
+					checkValue(layout,group.getMaxNote(),group.getDirection());
+				}
+			}
+		}
+	}
+	
+	public int getDisplayPosition(long start, int quarterWidth){
+		double newStart = (double)start - (double)this.getStart();
+		double displayPosition = 0.0;
+		if(newStart > 0){
+			double position = (newStart / TGDuration.QUARTER_TIME);
+			displayPosition = (position * quarterWidth);
+		}
+		return (int)displayPosition;
+	}
+	
+	public int getNoteAccidental(int noteValue){
+		if( noteValue >= 0 && noteValue < 128 ){
+			int key = getKeySignature();
+			int note = (noteValue % 12);
+			int octave = (noteValue / 12);
+			int accidentalValue = (key <= 7 ? SHARP : FLAT );
+			int [] accidentalNotes = (key <= 7 ? ACCIDENTAL_SHARP_NOTES : ACCIDENTAL_FLAT_NOTES );
+			boolean isAccidentalNote = ACCIDENTAL_NOTES[ note ];
+			boolean isAccidentalKey = KEY_SIGNATURES[key][accidentalNotes[ note ]] == accidentalValue;
+			
+			if(isAccidentalKey != isAccidentalNote && !this.registeredAccidentals[ octave ][ accidentalNotes[ note ] ]){
+				this.registeredAccidentals[ octave ][ accidentalNotes[note ]  ] = true;
+				return (isAccidentalNote ? accidentalValue : NATURAL);
+			}
+			
+			if(isAccidentalKey == isAccidentalNote && this.registeredAccidentals[ octave ][ accidentalNotes[ note ] ]){
+				this.registeredAccidentals[ octave ][ accidentalNotes[ note ]  ] = false;
+				return (isAccidentalNote ? accidentalValue : NATURAL);
+			}
+		}
+		return 0;
+	}
+	
+	private void checkValue(TGLayout layout,TGNoteImpl note,int direction){
+		int y = note.getScorePosY();
+		float upOffset = TGBeatGroup.getUpOffset(layout);
+		float downOffset = TGBeatGroup.getDownOffset(layout);
+		
+		if(direction == TGBeatGroup.DIRECTION_UP && y > this.maxY ){
+			this.maxY = y;
+		}else if(direction == TGBeatGroup.DIRECTION_DOWN && (y + downOffset) > this.maxY ){
+			this.maxY = (int)(y + downOffset + 2);
+		}
+		
+		if(direction == TGBeatGroup.DIRECTION_UP && (y - upOffset) < this.minY ){
+			this.minY = (int)(y - upOffset - 2);
+		}else if(direction == TGBeatGroup.DIRECTION_DOWN && y < this.minY ){
+			this.minY = y;
+		}
+	}
+	
+	private void resetSpacing(){
+		this.text = false;
+		this.chord = false;
+		this.division = false;
+		this.beatEffectSpacing = 0;
+	}
+	
+	public void registerSpacing(TGLayout layout,TGTrackSpacing ts){
+		if(layout.hasLoopMarker( this.getHeader() )){
+			ts.setSize(TGTrackSpacing.POSITION_LOOP_MARKER,layout.getLoopMarkerSpacing());
+		}
+		if(this.hasMarker()){
+			ts.setSize(TGTrackSpacing.POSITION_MARKER,layout.getMarkerSpacing());
+		}
+		if(this.chord){
+			ts.setSize(TGTrackSpacing.POSITION_CHORD,layout.getDefaultChordSpacing());
+		}
+		if(this.text){
+			ts.setSize(TGTrackSpacing.POSITION_TEXT,layout.getTextSpacing());
+		}
+		if(this.getHeader().getRepeatAlternative() > 0){
+			ts.setSize(TGTrackSpacing.POSITION_REPEAT_ENDING,layout.getRepeatEndingSpacing());
+		}
+		if(this.division){
+			ts.setSize(TGTrackSpacing.POSITION_DIVISION_TYPE,layout.getDivisionTypeSpacing());
+		}
+		if( this.beatEffectSpacing > 0 ){
+			ts.setSize(TGTrackSpacing.POSITION_EFFECTS, this.beatEffectSpacing );
+		}
+	}
+	
+	private void orderBeats(TGSongManager manager){
+		manager.getMeasureManager().orderBeats(this);
+	}
+	
+	public void paintMeasure(TGLayout layout,TGPainter painter) {
+		this.setOutOfBounds(false);
+		
+		boolean bufferEnabled = layout.isBufferEnabled();
+		
+		if(shouldRepaintBuffer() || !bufferEnabled ){
+			TGPainter bufferPainter = painter;
+			int x = (bufferEnabled ? 0 : getPosX());
+			int y = (bufferEnabled ? 0 : getPosY());
+			if(bufferEnabled){
+				getBuffer().createBuffer(painter,getWidth(layout) + getSpacing(), getTs().getSize(),layout.getResources().getBackgroundColor());
+				bufferPainter = getBuffer().getPainter();
+			}
+			layout.paintLines(getTrackImpl(),getTs(),bufferPainter,x,y, getWidth(layout) + getSpacing());
+			paintTimeSignature(layout,bufferPainter,x,y);
+			paintClef(layout,bufferPainter,x,y);
+			paintKeySignature(layout,bufferPainter,x,y);
+			paintComponents(layout,bufferPainter,x,y);
+			if(bufferEnabled){
+				getBuffer().disposePainter();
+			}
+			setBufferCreated(true);
+		}
+		if(bufferEnabled){
+			painter.setBackground(layout.getResources().getBackgroundColor());
+			getBuffer().paintBuffer(painter,getPosX(),getPosY(),getTs().getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR));
+		}
+		
+		this.paintMarker(layout, painter);
+		this.paintTexts(layout,painter);
+		this.paintTempo(layout,painter);
+		this.paintTripletFeel(layout,painter);
+		this.paintDivisions(layout,painter);
+		this.paintRepeatEnding(layout,painter);
+		this.paintPlayMode(layout,painter);
+		this.paintLoopMarker(layout, painter);
+	}
+	
+	private boolean shouldRepaintBuffer(){
+		return (isDisposed() || !isBufferCreated());
+	}
+	
+	public void paintRepeatEnding(TGLayout layout,TGPainter painter){
+		if(getHeader().getRepeatAlternative() > 0){
+			float scale = layout.getScale();
+			float x1 = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getFirstNoteSpacing(layout));
+			float x2 = (getPosX() + getWidth(layout) + getSpacing());
+			float y1 = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_REPEAT_ENDING));
+			float y2 = (y1 + (layout.getRepeatEndingSpacing() * 0.75f ));
+			String string = new String();
+			for(int i = 0; i < 8; i ++){
+				if((getHeader().getRepeatAlternative() & (1 << i)) != 0){
+					string += ((string.length() > 0)?(", ") + Integer.toString(i + 1):Integer.toString(i + 1));
+				}
+			}
+			layout.setRepeatEndingStyle(painter);
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo(x1, y2);
+			painter.lineTo(x1, y1);
+			painter.moveTo(x1, y1);
+			painter.lineTo(x2, y1);
+			painter.closePath();
+			painter.drawString(string,Math.round( x1 + (5.0f * scale) ),Math.round( y1 + (2.0f * scale) ));
+		}
+	}
+	
+	/**
+	 * Pinta las notas
+	 */
+	public void paintComponents(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		Iterator it = getBeats().iterator();
+		while(it.hasNext()){
+			TGBeatImpl beat = (TGBeatImpl)it.next();
+			beat.paint(layout, painter, fromX + getHeaderImpl().getLeftSpacing(layout) ,fromY);
+		}
+	}
+	
+	/**
+	 * Pinta las divisiones del compas
+	 */
+	private void paintDivisions(TGLayout layout,TGPainter painter) {
+		int x1 = getPosX();
+		int x2 = getPosX() + getWidth(layout);
+		int y1 = 0;
+		int y2 = 0;
+		int offsetY = 0;
+		int style = layout.getStyle();
+		boolean addInfo = false;
+		//-----SCORE ------------------------------------//
+		if((style & TGLayout.DISPLAY_SCORE) != 0 ){
+			y1 = getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+			y2 = y1 + (layout.getScoreLineSpacing() * 4);
+			addInfo = true;
+			if( (style & TGLayout.DISPLAY_TABLATURE) != 0 && (layout.isFirstMeasure(this) || isFirstOfLine())){
+				offsetY = ( getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE)) - y2;
+			}
+			paintDivisions(layout, painter, x1, y1, x2, y2, offsetY, addInfo );
+		}
+		//-----TABLATURE ------------------------------------//
+		if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+			y1 = getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE);
+			y2 = y1 + ((getTrack().getStrings().size() - 1 ) * layout.getStringSpacing());
+			addInfo = ( (style & TGLayout.DISPLAY_SCORE) == 0 );
+			offsetY = 0;
+			paintDivisions(layout, painter, x1, y1, x2, y2, offsetY, addInfo );
+		}
+	}
+	
+	private void paintDivisions(TGLayout layout,TGPainter painter,int x1, int y1, int x2, int y2, int offsetY, boolean addInfo) {
+		float scale = layout.getScale();
+		int lineWidthSmall = 1;
+		int lineWidthBig = Math.max(lineWidthSmall,Math.round(3f * scale));
+		
+		//numero de compas
+		if(addInfo){
+			String number = Integer.toString(this.getNumber());
+			layout.setMeasureNumberStyle(painter);
+			painter.drawString(number,getPosX() + Math.round(scale),(y1 - painter.getFMHeight()) - Math.round(scale));
+		}
+		
+		layout.setDivisionsStyle(painter,true);
+		
+		//principio
+		if(this.isRepeatOpen() || layout.isFirstMeasure(this)){
+			painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL);
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.addRectangle( x1, y1, lineWidthBig, (y2 + offsetY) - y1);
+			painter.closePath();
+			
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.moveTo(x1 + lineWidthBig + scale + lineWidthSmall, y1);
+			painter.lineTo(x1 + lineWidthBig + scale + lineWidthSmall, (y2 + offsetY));
+			painter.closePath();
+			
+			if(this.isRepeatOpen()){
+				int size = Math.max(1,Math.round(4f * scale));
+				float xMove = ((lineWidthBig + scale + lineWidthSmall) + (2f * scale));
+				float yMove = ((lineWidthBig + scale + lineWidthSmall) + (2f * scale));
+				
+				painter.setLineWidth(lineWidthSmall);
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.moveTo(x1 + xMove, y1 + ((y2 - y1) / 2) - (yMove + (size / 2)));
+				painter.addOval(x1 + xMove, y1 + ((y2 - y1) / 2) - (yMove + (size / 2)), size,size);
+				painter.moveTo(x1 + xMove, y1 + ((y2 - y1) / 2) + (yMove - (size / 2)));
+				painter.addOval(x1 + xMove, y1 + ((y2 - y1) / 2) + (yMove - (size / 2)), size, size);
+				painter.closePath();
+			}
+		}else{
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.moveTo(x1, y1);
+			painter.lineTo(x1, (y2 + offsetY));
+			painter.closePath();
+		}
+		
+		//fin
+		if(this.getRepeatClose() > 0 || layout.isLastMeasure(this)){
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.moveTo( (x2 + getSpacing()) - (lineWidthBig + scale + lineWidthSmall) , y1);
+			painter.lineTo( (x2 + getSpacing()) - (lineWidthBig + scale + lineWidthSmall) , y2);
+			painter.closePath();
+			
+			painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL);
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.addRectangle( (x2 + getSpacing()) - lineWidthBig, y1, lineWidthBig, y2 - y1);
+			painter.closePath();
+			
+			if(this.getRepeatClose() > 0){
+				int size = Math.max(1,Math.round(4f * scale));
+				float xMove = (((lineWidthBig + scale + lineWidthSmall) + (2f * scale)) + size);
+				float yMove = ( (lineWidthBig + scale + lineWidthSmall) + (2f * scale) );
+				
+				painter.setLineWidth(lineWidthSmall);
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.moveTo((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) - (yMove + (size / 2)));
+				painter.addOval((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) - (yMove + (size / 2)), size,size);
+				painter.moveTo((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) + (yMove - (size / 2)));
+				painter.addOval((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) + (yMove - (size / 2)), size, size);
+				painter.closePath();
+				if(addInfo){
+					layout.setDivisionsStyle(painter,false);
+					String repetitions = ("x" + this.getRepeatClose());
+					painter.drawString(repetitions,x2 - painter.getFMWidth(repetitions) + getSpacing() - size,(y1 - painter.getFMHeight()) - Math.round(scale));
+					//TGDimension numberSize = painter.getStringExtent(repetitions);
+					//painter.drawString(repetitions,x2 - numberSize.getWidth() + getSpacing() - size,(y1 - numberSize.getHeight()) - Math.round(scale));
+				}
+			}
+		}else{
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.setLineWidth(lineWidthSmall);
+			painter.moveTo(x2 + getSpacing(), y1);
+			painter.lineTo(x2 + getSpacing(), y2);
+			painter.closePath();
+		}
+		painter.setLineWidth(lineWidthSmall);
+	}
+	
+	/**
+	 * Pinta la Clave
+	 */
+	private void paintClef(TGLayout layout,TGPainter painter,int fromX, int fromY) {
+		//-----SCORE ------------------------------------//
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 && this.paintClef){
+			int x = fromX + Math.round( 14 * layout.getScale() ) ;
+			int y = fromY + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+			layout.setClefStyle(painter);
+			painter.initPath(TGPainter.PATH_FILL);
+			if(this.getClef() == TGMeasure.CLEF_TREBLE){
+				TGClefPainter.paintTreble(painter, x, y,layout.getScoreLineSpacing());
+			}
+			else if(this.getClef() == TGMeasure.CLEF_BASS){
+				TGClefPainter.paintBass(painter, x, y,layout.getScoreLineSpacing());
+			}
+			else if(this.getClef() == TGMeasure.CLEF_TENOR){
+				TGClefPainter.paintTenor(painter, x, y,layout.getScoreLineSpacing());
+			}
+			else if(this.getClef() == TGMeasure.CLEF_ALTO){
+				TGClefPainter.paintAlto(painter, x, y,layout.getScoreLineSpacing());
+			}
+			painter.closePath();
+		}
+	}
+	
+	/**
+	 * Pinta la Armadura de Clave
+	 */
+	private void paintKeySignature(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 && this.paintKeySignature){
+			float scale = layout.getScoreLineSpacing();
+			int x = fromX + getClefSpacing(layout) + 10;
+			int y = fromY + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+			int clefIndex = (this.getClef() - 1);
+			int currentKey = this.getKeySignature();
+			int previousKey = (this.prevMeasure != null ? this.prevMeasure.getKeySignature() : 0);
+			
+			layout.setKeySignatureStyle(painter);
+			
+			//natural
+			if(previousKey >= 1 && previousKey <= 7){
+				int naturalFrom =  (currentKey >= 1 && currentKey <= 7) ? currentKey : 0;
+				for(int i = naturalFrom; i < previousKey; i ++ ){
+					float offset =  ( ( (scale / 2) * SCORE_KEY_SHARP_POSITIONS[clefIndex][i] )  - (scale / 2) );
+					painter.initPath(TGPainter.PATH_FILL);
+					TGKeySignaturePainter.paintNatural(painter,x, (y +  offset  ), scale);
+					painter.closePath();
+					x += (scale - (scale / 4));
+				}
+			}
+			else if(previousKey >= 8 && previousKey <= 14){
+				int naturalFrom =  (currentKey >= 8 && currentKey <= 14) ? currentKey : 7;
+				for(int i = naturalFrom; i < previousKey; i ++ ){
+					float offset =  ( ( (scale / 2) * SCORE_KEY_FLAT_POSITIONS[clefIndex][i - 7] )  - (scale / 2) );
+					painter.initPath(TGPainter.PATH_FILL);
+					TGKeySignaturePainter.paintNatural(painter,x, (y +  offset  ), scale);
+					painter.closePath();
+					x += (scale - (scale / 4));
+				}
+			}
+			
+			//sharps
+			if(currentKey >= 1 && currentKey <= 7){
+				for(int i = 0; i < currentKey; i ++ ){
+					float offset =  ( ( (scale / 2) * SCORE_KEY_SHARP_POSITIONS[clefIndex][i] )  - (scale / 2) );
+					painter.initPath(TGPainter.PATH_FILL);
+					TGKeySignaturePainter.paintSharp(painter,x, (y +  offset  ), scale);
+					painter.closePath();
+					x += (scale - (scale / 4));
+				}
+			}
+			//flats
+			else if(currentKey >= 8 && currentKey <= 14){
+				for(int i = 7; i < currentKey; i ++ ){
+					float offset =  ( ( (scale / 2) * SCORE_KEY_FLAT_POSITIONS[clefIndex][i - 7] )  - (scale / 2) );
+					painter.initPath(TGPainter.PATH_FILL);
+					TGKeySignaturePainter.paintFlat(painter,x, (y +  offset  ), scale);
+					painter.closePath();
+					x += (scale - (scale / 4));
+				}
+			}
+		}
+	}
+	
+	private void paintTimeSignature(TGLayout layout,TGPainter painter, int fromX, int fromY){
+		if(this.getHeaderImpl().shouldPaintTimeSignature()){
+			layout.setTimeSignatureStyle(painter);
+			float scale = layout.getScale();
+			int style = layout.getStyle();
+			int leftSpacing = Math.round( 5.0f * scale );
+			int fSize = painter.getFontSize();
+			int fmAscent = painter.getFMAscent();
+			int x = (getClefSpacing(layout) + getKeySignatureSpacing(layout) + getHeaderImpl().getLeftSpacing(layout) + leftSpacing);
+			String numerator = Integer.toString(getTimeSignature().getNumerator());
+			String denominator = Integer.toString(getTimeSignature().getDenominator().getValue());
+			if( (style & TGLayout.DISPLAY_SCORE) != 0 ){
+				int y = getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+				int y1 = (int)(y - (fmAscent - fSize) + (1f * scale));
+				int y2 = (int)(y + getTrackImpl().getScoreHeight() - fmAscent - (1f * scale));
+				painter.drawString(numerator,fromX + x,fromY + y1,true);
+				painter.drawString(denominator,fromX + x,fromY + y2,true);
+			}else if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+				int y = getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE);
+				int y1 = (int)(y - (fmAscent - fSize) + (1f * scale));
+				int y2 = (int)(y + getTrackImpl().getTabHeight() - fmAscent - (1f * scale));
+				painter.drawString(numerator,fromX + x,fromY + y1,true);
+				painter.drawString(denominator,fromX + x,fromY + y2,true);
+			}
+		}
+	}
+	
+	private void paintTempo(TGLayout layout,TGPainter painter){
+		if(this.getHeaderImpl().shouldPaintTempo()){
+			float scale = 5f * layout.getScale(); 
+			int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout));
+			int y = getPosY();
+			int lineSpacing = (Math.max(layout.getScoreLineSpacing() , layout.getStringSpacing()));
+			int style = layout.getStyle();
+			if( (style & TGLayout.DISPLAY_SCORE) != 0 ){
+				y += ( getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - lineSpacing ) ;
+			}else if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+				y += ( getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - lineSpacing ) ;
+			}
+			
+			layout.setTempoStyle(painter, false);
+			int imgX = x;
+			int imgY = (y - (Math.round(scale * 3.5f ) + 2));
+			if( layout.isBufferEnabled() ){
+				painter.drawImage(layout.getResources().getTempoImage(),imgX , imgY );
+			} else {
+				TGTempoPainter.paintTempo(painter, imgX, imgY, scale);
+			}
+			
+			layout.setTempoStyle(painter, true);
+			String value = (" = " + getTempo().getValue());
+			int fontX = x + (Math.round( (1.33f * scale) ) + 1 );
+			int fontY = Math.round(y - painter.getFMHeight() - (1.0f * layout.getScale()));
+			painter.drawString(value , fontX, fontY, true);
+		}
+	}
+	
+	private void paintTripletFeel(TGLayout layout,TGPainter painter){
+		if(this.getHeaderImpl().shouldPaintTripletFeel()){
+			float scale = (5f * layout.getScale());
+			int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getHeaderImpl().getTempoSpacing(layout));
+			int y = (getPosY());
+			int lineSpacing = (Math.max(layout.getScoreLineSpacing() , layout.getStringSpacing()));
+			int style = layout.getStyle();
+			if( (style & TGLayout.DISPLAY_SCORE) != 0 ){
+				y += ( getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - lineSpacing );
+			}else if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+				y += ( getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - lineSpacing );
+			}
+			
+			layout.setTripletFeelStyle(painter, true);
+			String equal = (" = ");
+			int fontX = x + (Math.round( (1.33f * scale) + (1.5f * scale) ));
+			int fontY = Math.round(y - painter.getFMHeight() - (1.0f * layout.getScale()));
+			painter.drawString(equal, fontX , fontY, true);
+			
+			layout.setTripletFeelStyle(painter, false);
+			int x1 = x;
+			int x2 = x + (Math.round( (1.33f * scale) + (1.5f * scale) ) + painter.getFMWidth(equal));
+			int y1 = y - (Math.round( (1.0f * scale) + (2.5f * scale) ) + 2);
+			int y2 = y - (Math.round( (1.0f * scale) + (2.5f * scale) + (1.0f * scale)) + 2);
+			
+			if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_NONE && this.prevMeasure != null){
+				int previous = this.prevMeasure.getTripletFeel();
+				if(previous == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){
+					if( layout.isBufferEnabled() ){
+						painter.drawImage(layout.getResources().getTripletFeel8(), x1, y2 );
+						painter.drawImage(layout.getResources().getTripletFeelNone8(),x2 , y1 );
+					}
+					else{
+						TGTripletFeelPainter.paintTripletFeel8(painter, x1, y2, scale );
+						TGTripletFeelPainter.paintTripletFeelNone8(painter, x2 , y1, scale );
+					}
+				}
+				else if(previous == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){
+					if( layout.isBufferEnabled() ){
+						painter.drawImage(layout.getResources().getTripletFeel16(), x1, y2 );
+						painter.drawImage(layout.getResources().getTripletFeelNone16(),x2 , y1 );
+					}
+					else{
+						TGTripletFeelPainter.paintTripletFeel16(painter, x1, y2, scale );
+						TGTripletFeelPainter.paintTripletFeelNone16(painter, x2 , y1, scale );
+					}
+				}
+			}
+			else if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){
+				if( layout.isBufferEnabled() ){
+					painter.drawImage(layout.getResources().getTripletFeelNone8(), x1, y1 );
+					painter.drawImage(layout.getResources().getTripletFeel8(),x2 , y2 );
+				}
+				else{
+					TGTripletFeelPainter.paintTripletFeelNone8(painter, x1, y1, scale );
+					TGTripletFeelPainter.paintTripletFeel8(painter, x2 , y2, scale );
+				}
+			}
+			else if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){
+				if( layout.isBufferEnabled() ){
+					painter.drawImage(layout.getResources().getTripletFeelNone16(), x1, y1 );
+					painter.drawImage(layout.getResources().getTripletFeel16(),x2 , y2 );
+				}
+				else{
+					TGTripletFeelPainter.paintTripletFeelNone16(painter, x1, y1, scale );
+					TGTripletFeelPainter.paintTripletFeel16(painter, x2 , y2, scale );
+				}
+			}
+		}
+	}
+	
+	private void paintLoopMarker(TGLayout layout,TGPainter painter){
+		if( layout.hasLoopMarker( this ) ){
+			int size = Math.round( layout.getLoopMarkerSpacing() - (1f * layout.getScale()));
+			if( layout.getComponent().isLoopSHeader(this.getHeader())){
+				int x = (getPosX() + Math.round(size / 2f) );
+				int y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_LOOP_MARKER));
+				layout.setLoopSMarkerStyle(painter);
+				paintLoopMarker(painter, x, y, size);
+			}
+			if( layout.getComponent().isLoopEHeader(this.getHeader())){
+				float x = (getPosX() + getWidth(layout) + getSpacing() - size );
+				float y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_LOOP_MARKER));
+				layout.setLoopEMarkerStyle(painter);
+				paintLoopMarker(painter, x, y, size);
+			}
+		}
+	}
+	
+	private void paintLoopMarker(TGPainter painter, float x, float y, float size){
+		painter.initPath( TGPainter.PATH_FILL );
+		painter.addRectangle(x, y, size, size);
+		painter.closePath();
+	}
+	
+	private void paintMarker(TGLayout layout,TGPainter painter){
+		if( this.hasMarker() ){
+			int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getFirstNoteSpacing(layout));
+			int y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_MARKER));
+			
+			layout.setMarkerStyle(painter,getMarkerColor(painter));
+			painter.drawString(getMarker().getTitle(), x, y);
+		}
+	}
+	
+	private void paintTexts(TGLayout layout,TGPainter painter){
+		Iterator it = getBeats().iterator();
+		while(it.hasNext()){
+			TGBeat beat = (TGBeat)it.next();
+			if( beat.isTextBeat() ){
+				TGTextImpl text = (TGTextImpl)beat.getText();
+				text.paint(layout, painter,(getPosX() + getHeaderImpl().getLeftSpacing(layout) ),getPosY());
+			}
+		}
+	}
+	
+	private void paintPlayMode(TGLayout layout,TGPainter painter){
+		if(layout.isPlayModeEnabled() && isPlaying(layout)){
+			float scale = layout.getScale();
+			int width = getWidth(layout) + getSpacing();
+			int y1 = getPosY();
+			int y2 = getPosY();
+			int style = layout.getStyle();
+			if( (style & (TGLayout.DISPLAY_SCORE | TGLayout.DISPLAY_TABLATURE)) == (TGLayout.DISPLAY_SCORE | TGLayout.DISPLAY_TABLATURE) ){
+				y1 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - layout.getScoreLineSpacing());
+				y2 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + getTrackImpl().getTabHeight() + layout.getStringSpacing());
+			}else if( (style & TGLayout.DISPLAY_SCORE) != 0 ){
+				y1 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - layout.getScoreLineSpacing());
+				y2 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) + (layout.getScoreLineSpacing() * 5));
+			} else if( (style & TGLayout.DISPLAY_TABLATURE) != 0 ){
+				y1 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - layout.getStringSpacing());
+				y2 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + getTrackImpl().getTabHeight() + layout.getStringSpacing());
+			}
+			layout.setMeasurePlayingStyle(painter);
+			// Don't uncomment "lineStyle" until be sure SWT bug has fixed.
+			// See bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=225725
+			//painter.setLineStyle(SWT.LINE_DASH);
+			painter.setLineWidth(1);
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.addRectangle(getPosX() + (5f * scale),y1,width - (10f * scale),(y2 - y1));
+			painter.closePath();
+			//painter.setLineStyle(SWT.LINE_SOLID);
+		}
+	}
+	
+	/**
+	 * Retorna true si se esta reproduciendo y la posicion del player esta en este compas.
+	 */
+	public boolean isPlaying(TGLayout layout){
+		return layout.getComponent().isRunning(this);
+	}
+	
+	public int getBeatSpacing(TGBeat beat){
+		return  (int)((beat.getStart() - getStart())  * getSpacing() / getLength());
+	}
+	
+	public boolean hasTrack(int number){
+		return (getTrack().getNumber() == number);
+	}
+	
+	/**
+	 * Retorna el ancho del Compas
+	 */
+	public int getWidth(TGLayout layout) {
+		return ((layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) != 0 ?this.getHeaderImpl().getMaxWidth():this.width);
+	}
+	
+	private int calculateKeySignatureSpacing(TGLayout layout){
+		int spacing = 0;
+		if(this.paintKeySignature){
+			if(this.getKeySignature() <= 7){
+				spacing += Math.round( ( 6f * layout.getScale() ) * this.getKeySignature() ) ;
+			}else{
+				spacing += Math.round( ( 6f * layout.getScale() ) * (this.getKeySignature() - 7) ) ;
+			}
+			if(this.prevMeasure != null ){
+				if(this.prevMeasure.getKeySignature() <= 7){
+					spacing += Math.round( ( 6f * layout.getScale() ) * this.prevMeasure.getKeySignature() ) ;
+				}else{
+					spacing += Math.round( ( 6f * layout.getScale() ) * (this.prevMeasure.getKeySignature() - 7) ) ;
+				}
+			}
+		}
+		return spacing;
+	}
+	
+	public int getFirstNoteSpacing(TGLayout layout){
+		return getHeaderImpl().getFirstNoteSpacing(layout,this);
+	}
+	
+	public int getClefSpacing(TGLayout layout){
+		return getHeaderImpl().getClefSpacing(layout, this);
+	}
+	
+	public int getKeySignatureSpacing(TGLayout layout){
+		return getHeaderImpl().getKeySignatureSpacing(layout, this);
+	}
+	
+	public long getDivisionLength(){
+		return this.divisionLength;
+	}
+	
+	public boolean isBufferCreated() {
+		return this.bufferCreated;
+	}
+	
+	public void setBufferCreated(boolean bufferCreated) {
+		this.bufferCreated = bufferCreated;
+	}
+	
+	/**
+	 * Retorna la posicion X dentro del compas
+	 */
+	public int getPosX() {
+		return this.posX;
+	}
+	
+	/**
+	 * Asigna la posicion X dentro del compas
+	 */
+	public void setPosX(int posX) {
+		this.posX = posX;
+	}
+	
+	/**
+	 * Retorna la posicion Y dentro del compas
+	 */
+	public int getPosY() {
+		return this.posY;
+	}
+	
+	/**
+	 * Asigna la posicion Y dentro del compas
+	 */
+	public void setPosY(int posY) {
+		this.posY = posY;
+	}
+	
+	/**
+	 * Retorna el spacing de negras
+	 */
+	private int getQuarterSpacing(){
+		return this.quarterSpacing;
+	}
+	
+	/**
+	 * Retorna el spacing de negras
+	 */
+	private int getMaxQuarterSpacing(TGLayout layout){
+		return (((layout.getStyle() & TGLayout.DISPLAY_MULTITRACK) != 0)?getHeaderImpl().getMaxQuarterSpacing():this.quarterSpacing);
+	}
+	
+	public TGMeasureHeaderImpl getHeaderImpl(){
+		return (TGMeasureHeaderImpl)super.getHeader();
+	}
+	
+	public int getSpacing() {
+		return this.spacing;
+	}
+	
+	public void setSpacing(int spacing) {
+		if(spacing != this.spacing){
+			setBufferCreated(false);
+		}
+		this.spacing = spacing;
+	}
+	
+	public boolean isOutOfBounds() {
+		return this.outOfBounds;
+	}
+	
+	public void setOutOfBounds(boolean outOfBounds) {
+		this.outOfBounds = outOfBounds;
+	}
+	
+	public boolean isFirstOfLine() {
+		return this.firstOfLine;
+	}
+	
+	public void setFirstOfLine(boolean firstOfLine) {
+		this.firstOfLine = firstOfLine;
+	}
+	
+	public TGTrackImpl getTrackImpl(){
+		return (TGTrackImpl)super.getTrack();
+	}
+	
+	public TGTrackSpacing getTs() {
+		return this.ts;
+	}
+	
+	public void setTs(TGTrackSpacing ts) {
+		if(getTs() == null){
+			setBufferCreated(false);
+		}else if(getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) != ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)){
+			setBufferCreated(false);
+		}else if(getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) != ts.getPosition(TGTrackSpacing.POSITION_TABLATURE)){
+			setBufferCreated(false);
+		}else if(getTs().getPosition(TGTrackSpacing.POSITION_EFFECTS) != ts.getPosition(TGTrackSpacing.POSITION_EFFECTS)){
+			setBufferCreated(false);
+		}
+		this.ts = ts;
+	}
+	
+	public int getMaxY() {
+		return this.maxY;
+	}
+	
+	public int getMinY() {
+		return this.minY;
+	}
+	
+	public int getNotEmptyBeats(){
+		return this.notEmptyBeats;
+	}
+	
+	public int getNotEmptyVoices(){
+		return this.notEmptyVoices;
+	}
+	
+	public int getLyricBeatIndex() {
+		return this.lyricBeatIndex;
+	}
+	
+	public void setLyricBeatIndex(int lyricBeatIndex) {
+		this.lyricBeatIndex = lyricBeatIndex;
+	}
+	
+	public boolean isPaintClef() {
+		return this.paintClef;
+	}
+	
+	public boolean isPaintKeySignature() {
+		return this.paintKeySignature;
+	}
+	
+	public boolean isDisposed(){
+		return getBuffer().isDisposed();
+	}
+	
+	public TGMeasureBuffer getBuffer(){
+		if(this.buffer == null){
+			this.buffer = new TGMeasureBuffer();
+		}
+		return this.buffer;
+	}
+	
+	public void disposeBuffer(){
+		if(this.buffer != null && !this.buffer.isDisposed() ){
+			this.buffer.dispose();
+			this.buffer = null;
+		}
+	}
+	
+	public TGColor getMarkerColor( TGPainter painter ){
+		TGMarker m = getMarker();
+		if(this.markerColor != null && !this.markerColor.isDisposed()){
+			if( this.markerColor.getRed() != m.getColor().getR() || this.markerColor.getGreen() != m.getColor().getG() || this.markerColor.getBlue() != m.getColor().getB() ){
+				this.disposeMarkerColor();
+			}
+		}
+		if(this.markerColor == null || this.markerColor.isDisposed()){
+			this.markerColor = painter.createColor(m.getColor().getR(),m.getColor().getG(),m.getColor().getB());
+		}
+		return this.markerColor;
+	}
+	
+	public void disposeMarkerColor(){
+		if(this.markerColor != null && !this.markerColor.isDisposed()){
+			this.markerColor.dispose();
+			this.markerColor = null;
+		}
+	}
+	
+	public void disposeBeats(){
+		Iterator it = getBeats().iterator();
+		while(it.hasNext()){
+			TGBeatImpl beat = (TGBeatImpl)it.next();
+			beat.dispose();
+		}
+	}
+	
+	public void dispose(){
+		this.disposeBuffer();
+		this.disposeMarkerColor();
+		this.disposeBeats();
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGNoteImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGNoteImpl.java
new file mode 100644
index 0000000..197e358
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGNoteImpl.java
@@ -0,0 +1,665 @@
+/*
+ * Created on 29-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.control.painters.TGKeySignaturePainter;
+import org.herac.tuxguitar.graphics.control.painters.TGNotePainter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGNoteImpl extends TGNote {
+	
+	private TGRectangle noteOrientation;
+	
+	private int tabPosY;
+	
+	private int scorePosY;
+	
+	private int accidental;
+	
+	public TGNoteImpl(TGFactory factory) {
+		super(factory);
+		this.noteOrientation = new TGRectangle();
+	}
+	
+	/**
+	 * Actualiza los valores para dibujar
+	 */
+	public void update(TGLayout layout) {
+		this.accidental = getMeasureImpl().getNoteAccidental( getRealValue() );
+		this.tabPosY = ( (getString() * layout.getStringSpacing()) - layout.getStringSpacing() );
+		this.scorePosY = getVoiceImpl().getBeatGroup().getY1(layout,this,getMeasureImpl().getKeySignature(),getMeasureImpl().getClef());
+	}
+	
+	/**
+	 * Pinta la nota
+	 */
+	public void paint(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		int spacing = getBeatImpl().getSpacing();
+		paintScoreNote(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES),spacing);
+		if(!layout.isPlayModeEnabled()){
+			paintOfflineEffects(layout, painter,fromX,fromY, spacing);
+		}
+		paintTablatureNote(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE),spacing);
+	}
+	
+	private void paintOfflineEffects(TGLayout layout,TGPainter painter,int fromX, int fromY, int spacing){		
+		TGSpacing bs = getBeatImpl().getBs();
+		TGSpacing ts = getMeasureImpl().getTs();
+		TGNoteEffect effect = getEffect();
+		
+		int tsY = (fromY + ts.getPosition(TGTrackSpacing.POSITION_EFFECTS));
+		int bsY = (tsY + (ts.getSize(TGTrackSpacing.POSITION_EFFECTS) - bs.getSize( )));
+		
+		layout.setOfflineEffectStyle(painter);
+		if(effect.isAccentuatedNote()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_ACCENTUATED_EFFECT ));
+			paintAccentuated(layout, painter, x, y);
+		}
+		if(effect.isHeavyAccentuatedNote()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_HEAVY_ACCENTUATED_EFFECT ));
+			paintHeavyAccentuated(layout, painter, x, y);
+		}
+		if(effect.isFadeIn()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_FADE_IN ));
+			paintFadeIn(layout, painter, x, y);
+		}
+		if(effect.isHarmonic() && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_HARMONIC_EFFEC ));
+			String key = new String();
+			key = effect.getHarmonic().isNatural()?TGEffectHarmonic.KEY_NATURAL:key;
+			key = effect.getHarmonic().isArtificial()?TGEffectHarmonic.KEY_ARTIFICIAL:key;
+			key = effect.getHarmonic().isTapped()?TGEffectHarmonic.KEY_TAPPED:key;
+			key = effect.getHarmonic().isPinch()?TGEffectHarmonic.KEY_PINCH:key;
+			key = effect.getHarmonic().isSemi()?TGEffectHarmonic.KEY_SEMI:key;
+			painter.drawString(key,x, y);
+		}
+		if(effect.isTapping()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_TAPPING_EFFEC ));
+			painter.drawString("T",x, y);
+		}
+		if(effect.isSlapping()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_SLAPPING_EFFEC ));
+			painter.drawString("S",x, y);
+		}
+		if(effect.isPopping()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_POPPING_EFFEC ));
+			painter.drawString("P",x, y);
+		}
+		if(effect.isPalmMute()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_PALM_MUTE_EFFEC ));
+			painter.drawString("P.M",x, y);
+		}
+		if(effect.isLetRing()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_LET_RING_EFFEC ));
+			painter.drawString("L.R",x, y);
+		}
+		if(effect.isVibrato()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_VIBRATO_EFFEC ));
+			paintVibrato(layout, painter,x,y);
+		}
+		if(effect.isTrill()){
+			int x = fromX + getPosX() + spacing;
+			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_TRILL_EFFEC ));
+			paintTrill(layout, painter,x,y);
+		}
+	}
+	
+	/**
+	 * Pinta la nota en la tablatura
+	 */
+	public void paintTablatureNote(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing) {
+		int style = layout.getStyle();
+		if((style & TGLayout.DISPLAY_TABLATURE) != 0){
+			int stringSpacing = layout.getStringSpacing();
+			int x = fromX + getPosX() + spacing + 2;
+			int y = fromY + getTabPosY();
+			
+			this.noteOrientation.setX(x);
+			this.noteOrientation.setY(y);
+			this.noteOrientation.setWidth(1);
+			this.noteOrientation.setHeight(1);
+			
+			layout.setTabNoteStyle(painter, (layout.isPlayModeEnabled() && getBeatImpl().isPlaying(layout)));
+			//-------------ligadura--------------------------------------
+			if (isTiedNote() && (style & TGLayout.DISPLAY_SCORE) == 0) {
+				float tX = 0;
+				float tY = 0;
+				float tWidth = 0;
+				float tHeight = (stringSpacing * 3);
+				TGNoteImpl noteForTie = getNoteForTie();
+				if (noteForTie != null) {
+					tX = (fromX + noteForTie.getPosX() + noteForTie.getBeatImpl().getSpacing());
+					tY = (fromY + noteForTie.getTabPosY() + stringSpacing);
+					tWidth = (x - tX);
+				}else{
+					TGRectangle r = layout.getNoteOrientation(painter,x,y,this);
+					tX = r.getX() - (stringSpacing * 2);
+					tY = (fromY + getTabPosY() + stringSpacing);
+					tWidth = (stringSpacing * 2);
+				}
+				painter.initPath();
+				painter.addArc(tX, (tY - tHeight ), tWidth, tHeight, 225,90);
+				painter.closePath();
+				
+			//-------------nota--------------------------------------
+			} else if(!isTiedNote()){
+				TGRectangle r = layout.getNoteOrientation(painter,x,y,this);
+				this.noteOrientation.setX(r.getX());
+				this.noteOrientation.setY(r.getY());
+				this.noteOrientation.setWidth(r.getWidth());
+				this.noteOrientation.setHeight(r.getHeight());
+				String visualNote = (getEffect().isDeadNote())?"X":Integer.toString(getValue());
+				visualNote = (getEffect().isGhostNote())?"(" + visualNote + ")":visualNote;
+				painter.drawString(visualNote, this.noteOrientation.getX(), this.noteOrientation.getY());
+			}
+			
+			//-------------efectos--------------------------------------
+			if(! layout.isPlayModeEnabled() ){
+				
+				paintEffects(layout,painter,fromX,fromY,spacing);
+				
+				if((style & TGLayout.DISPLAY_SCORE) == 0){
+					int y1 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + (stringSpacing / 2));
+					int y2 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + ((stringSpacing / 2) * 5));
+					
+					//-------------tremolo picking--------------------------------------
+					if(getEffect().isTremoloPicking()){
+						layout.setTabEffectStyle(painter);
+						painter.initPath();
+						int posy = (y1 + ((y2 - y1) / 2));
+						for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){
+							painter.moveTo(x - 3, posy - 1);
+							painter.lineTo(x + 4,posy + 1);
+							posy += 4;
+						}
+						painter.setLineWidth(2);
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Pinta la nota en la partitura
+	 */
+	private void paintScoreNote(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing) {
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+			float scale = layout.getScoreLineSpacing();
+			int direction = getVoiceImpl().getBeatGroup().getDirection();
+			int key = getMeasureImpl().getKeySignature();
+			int clef = getMeasureImpl().getClef();
+			
+			int x = ( fromX + getPosX() + spacing );
+			int y1 = ( fromY + getScorePosY() ) ;
+			
+			//-------------foreground--------------------------------------
+			boolean playing = (layout.isPlayModeEnabled() && getBeatImpl().isPlaying(layout));
+			
+			layout.setScoreNoteStyle(painter,playing);
+			
+			//----------ligadura---------------------------------------
+			if (isTiedNote()) {
+				TGNoteImpl noteForTie = getNoteForTie();
+				float tScale = (scale / 8.0f);
+				float tX = x - (20.0f * tScale);
+				float tY = y1 - (2.0f * tScale);
+				float tWidth = (20.0f * tScale);
+				float tHeight = (30.0f * tScale);
+				if (noteForTie != null) {
+					int tNoteX = (fromX + noteForTie.getPosX() + noteForTie.getBeatImpl().getSpacing());
+					int tNoteY = (fromY + getScorePosY());
+					tX = tNoteX + (6.0f * tScale);
+					tY = tNoteY - (3.0f * tScale);
+					tWidth = (x - tNoteX) - (3.0f * tScale);
+					tHeight = (35.0f * tScale);
+				}
+				painter.initPath();
+				painter.addArc(tX,tY, tWidth, tHeight, 45, 90);
+				painter.closePath();
+			}
+			//----------sostenido--------------------------------------
+			if(this.accidental == TGMeasureImpl.NATURAL){
+				painter.initPath(TGPainter.PATH_FILL);
+				TGKeySignaturePainter.paintNatural(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale);
+				painter.closePath();
+			}
+			else if(this.accidental == TGMeasureImpl.SHARP){
+				painter.initPath(TGPainter.PATH_FILL);
+				TGKeySignaturePainter.paintSharp(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale);
+				painter.closePath();
+			}
+			else if(this.accidental == TGMeasureImpl.FLAT){
+				painter.initPath(TGPainter.PATH_FILL);
+				TGKeySignaturePainter.paintFlat(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale);
+				painter.closePath();
+			}
+			//----------fin sostenido--------------------------------------
+			if(getEffect().isHarmonic()){
+				if( layout.isBufferEnabled() ){
+					painter.drawImage(layout.getResources().getHarmonicNote(getVoice().getDuration().getValue(),playing),x,y1);
+				}else{
+					boolean full = (getVoice().getDuration().getValue() >= TGDuration.QUARTER);
+					painter.initPath((full ? TGPainter.PATH_DRAW | TGPainter.PATH_FILL : TGPainter.PATH_DRAW));
+					TGNotePainter.paintHarmonic(painter,x,y1+1,(layout.getScoreLineSpacing() - 2) );
+					painter.closePath();
+				}
+			}else{
+				if( layout.isBufferEnabled() ){
+					painter.drawImage(layout.getResources().getScoreNote(getVoice().getDuration().getValue(),playing),x,y1);
+				}else{
+					boolean full = (getVoice().getDuration().getValue() >= TGDuration.QUARTER);
+					painter.initPath((full ? TGPainter.PATH_FILL : TGPainter.PATH_DRAW));
+					TGNotePainter.paintNote(painter,x,y1+1, ((full ? layout.getScoreLineSpacing() + 1 : layout.getScoreLineSpacing() ) - 2) );
+					painter.closePath();
+				}
+			}
+			
+			if(! layout.isPlayModeEnabled() ){
+				
+				if(getEffect().isGrace()){
+					paintGrace(layout, painter,x ,y1);
+				}
+				
+				//PUNTILLO y DOBLE PUNTILLO
+				if (getVoice().getDuration().isDotted() || getVoice().getDuration().isDoubleDotted()) {
+					getVoiceImpl().paintDot(layout, painter,( x + (12.0f * (scale / 8.0f) ) ), ( y1 + (layout.getScoreLineSpacing()/ 2)), (scale / 10.0f) );
+				}
+				
+				//dibujo el pie
+				if(getVoice().getDuration().getValue() >= TGDuration.HALF){
+					layout.setScoreNoteFooterStyle(painter);
+					int xMove = (direction == TGBeatGroup.DIRECTION_UP ? layout.getResources().getScoreNoteWidth() : 0);
+					int y2 = fromY + getVoiceImpl().getBeatGroup().getY2(layout,getPosX() + spacing,key,clef);
+					
+					//staccato
+					if (getEffect().isStaccato()) {
+						int size = 3;
+						int sX = x + xMove;
+						int sY = (y2 + (4 * ((direction == TGBeatGroup.DIRECTION_UP)?-1:1)));
+						layout.setScoreEffectStyle(painter);
+						painter.initPath(TGPainter.PATH_FILL);
+						painter.moveTo(sX - (size / 2),sY - (size / 2));
+						painter.addOval(sX - (size / 2),sY - (size / 2),size,size);
+						painter.closePath();
+					}
+					//tremolo picking
+					if(getEffect().isTremoloPicking()){
+						layout.setScoreEffectStyle(painter);
+						painter.initPath();
+						int tpY = fromY;
+						if((direction == TGBeatGroup.DIRECTION_UP)){
+							tpY += (getVoiceImpl().getBeatGroup().getMaxNote().getScorePosY() - layout.getScoreLineSpacing() - 4);
+						}else{
+							tpY += (getVoiceImpl().getBeatGroup().getMinNote().getScorePosY() + layout.getScoreLineSpacing() + 4);
+						}
+						for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){
+							painter.moveTo(x + xMove - 3, tpY + 1);
+							painter.lineTo(x + xMove + 4,tpY - 1);
+							tpY += 4;
+						}
+						painter.setLineWidth(2);
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}else{
+					//staccato
+					if (getEffect().isStaccato()) {
+						int size = 3;
+						int sX = x + (layout.getResources().getScoreNoteWidth() / 2);
+						int sY = (fromY + getVoiceImpl().getBeatGroup().getMinNote().getScorePosY() + layout.getScoreLineSpacing()) + 2;
+						layout.setScoreEffectStyle(painter);
+						painter.initPath(TGPainter.PATH_FILL);
+						painter.moveTo(sX - (size / 2),sY - (size / 2));
+						painter.addOval(sX - (size / 2),sY - (size / 2),size,size);
+						painter.closePath();
+					}
+					//tremolo picking
+					if(getEffect().isTremoloPicking()){
+						layout.setScoreEffectStyle(painter);
+						painter.initPath();
+						int tpX = (x + (layout.getResources().getScoreNoteWidth() / 2));
+						int tpY = fromY + (getVoiceImpl().getBeatGroup().getMaxNote().getScorePosY() - layout.getScoreLineSpacing() - 4);
+						for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){
+							painter.moveTo(tpX - 3, tpY + 1);
+							painter.lineTo(tpX + 4,tpY - 1);
+							tpY += 4;
+						}
+						painter.setLineWidth(2);
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}
+			}
+		}
+	}
+	
+	/**
+	 * Encuentra la nota a la que esta ligada
+	 */
+	private TGNoteImpl getNoteForTie() {
+		for (int i = getMeasureImpl().countBeats() - 1; i >= 0; i--) {
+			TGBeat beat = getMeasureImpl().getBeat(i);
+			TGVoice voice = beat.getVoice( getVoice().getIndex() );
+			if (beat.getStart() < getBeatImpl().getStart() && !voice.isRestVoice()) {
+				Iterator it = voice.getNotes().iterator();
+				while(it.hasNext()){
+					TGNoteImpl note = (TGNoteImpl)it.next();
+					if (note.getString() == getString()) {
+						return note;
+					}
+				}
+			}
+		}
+		return null;
+	}
+	
+	/**
+	 * Pinta los efectos
+	 */
+	private void paintEffects(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing){
+		int x = fromX + getPosX() + spacing;
+		int y = fromY + getTabPosY();
+		TGNoteEffect effect = getEffect();
+		if(effect.isGrace()){
+			layout.setTabGraceStyle(painter);
+			String value = Integer.toString(effect.getGrace().getFret());
+			painter.drawString(value, (this.noteOrientation.getX() - painter.getFMWidth(value) - 2), this.noteOrientation.getY() );
+		}
+		if(effect.isBend()){
+			paintBend(layout, painter,(this.noteOrientation.getX() + this.noteOrientation.getWidth()), y);
+		}else if(effect.isTremoloBar()){
+			paintTremoloBar(layout, painter,(this.noteOrientation.getX() + this.noteOrientation.getWidth()), y);
+		}else if(effect.isSlide() || effect.isHammer()){
+			int nextFromX = fromX;
+			TGNoteImpl nextNote = (TGNoteImpl)layout.getSongManager().getMeasureManager().getNextNote(getMeasureImpl(),getBeatImpl().getStart(),getVoice().getIndex(),getString());
+			if(effect.isSlide()){
+				paintSlide(layout, painter, nextNote, x, y, nextFromX);
+			}else if(effect.isHammer()){
+				paintHammer(layout, painter, nextNote, x, y, nextFromX);
+			}
+		}
+	}
+	
+	private void paintBend(TGLayout layout,TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = (fromX + (1.0f * scale));
+		float y = (fromY - (2.0f * scale));
+		
+		layout.setTabEffectStyle(painter);
+		
+		painter.initPath();
+		painter.moveTo( x, y );
+		painter.lineTo( x + (1.0f * scale), y );
+		painter.cubicTo(x + (1.0f * scale), y,  x + (3.0f * scale), y , x + (3.0f * scale), y - (2.0f * scale));
+		painter.moveTo( x + (3.0f * scale), y - (2.0f * scale) );
+		painter.lineTo( x + (3.0f * scale), y - (12.0f * scale));
+		painter.moveTo( x + (3.0f * scale), y - (12.0f * scale));
+		painter.lineTo( x + (1.0f * scale), y - (10.0f * scale));
+		painter.moveTo( x + (3.0f * scale), y - (12.0f * scale));
+		painter.lineTo( x + (5.0f * scale), y - (10.0f * scale));
+		painter.closePath();
+	}
+	
+	private void paintTremoloBar(TGLayout layout,TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x1 = fromX + (1.0f * scale);
+		float x2 = x1 + (8.0f * scale);
+		float y1 = fromY;
+		float y2 = y1 + (9.0f * scale);
+		layout.setTabEffectStyle(painter);
+		painter.initPath();
+		painter.moveTo(x1,y1);
+		painter.lineTo(x1 + ( (x2 - x1) / 2 ),y2);
+		painter.moveTo(x1 + ( (x2 - x1) / 2 ),y2);
+		painter.lineTo(x2,y1);
+		painter.closePath();
+	}
+	
+	private void paintSlide(TGLayout layout,TGPainter painter,TGNoteImpl nextNote,int fromX,int fromY,int nextFromX){
+		float xScale = layout.getScale();
+		float yScale = (layout.getStringSpacing() / 10.0f);
+		float yMove = (3.0f * yScale);
+		float x = fromX;
+		float y = fromY;
+		layout.setTabEffectStyle(painter);
+		if(nextNote != null){
+			float nextX = nextNote.getPosX() + nextFromX + nextNote.getBeatImpl().getSpacing();
+			float nextY = y;
+			
+			if(nextNote.getValue() < getValue()){
+				y -= yMove;
+				nextY += yMove;
+			}else if(nextNote.getValue() > getValue()){
+				y += yMove;
+				nextY -= yMove;
+			}else{
+				y -= yMove;
+				nextY -= yMove;
+			}
+			painter.initPath();
+			painter.moveTo(x + (6.0f * xScale),y);
+			painter.lineTo(nextX - (3.0f * xScale),nextY);
+			painter.closePath();
+		}else{
+			painter.initPath();
+			painter.moveTo(x + (6.0f * xScale),y - yMove);
+			painter.lineTo(x + (17.0f * xScale),y - yMove);
+			painter.closePath();
+		}
+	}
+	
+	private void paintHammer(TGLayout layout,TGPainter painter,TGNoteImpl nextNote,int fromX,int fromY,int nextFromX){
+		float xScale = layout.getScale();
+		float yScale = (layout.getStringSpacing() / 10.0f);
+		
+		float x = (fromX + (7.0f * xScale));
+		float y = (fromY - (5.0f * yScale));
+		
+		float width = (nextNote != null)?( (nextNote.getPosX() + nextFromX + nextNote.getBeatImpl().getSpacing()) - (4.0f * xScale) - x ):(10.0f * xScale);
+		float height = (15.0f * yScale);
+		layout.setTabEffectStyle(painter);
+		painter.initPath();
+		painter.addArc(x,y, width, height, 45,90);
+		painter.closePath();
+	}
+	
+	private void paintGrace(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = ( layout.getScoreLineSpacing() / 2.25f );
+		
+		float x = fromX - (2f * scale);
+		float y = fromY + (scale / 3);
+		
+		layout.setScoreEffectStyle(painter);
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintFooter(painter,x, y , -1 , scale);
+		painter.closePath();
+		
+		painter.initPath();
+		painter.moveTo(x, y - (2f * scale));
+		painter.lineTo(x, y + (2f * scale) - (scale / 4f));
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x - scale*1.33f, y + scale + (scale / 4f),  scale);
+		painter.closePath();
+		
+		painter.initPath();
+		painter.moveTo(x - scale, y );
+		painter.lineTo(x + scale, y - scale);
+		painter.closePath();
+	}
+	
+	private void paintVibrato(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = fromX;
+		float y = fromY + (2.0f * scale);
+		float width = ( getVoiceImpl().getWidth() - (2.0f * scale) );
+		
+		int loops = (int)(width / (6.0f * scale) );
+		if(loops > 0 ){
+			layout.setTabEffectStyle(painter);
+			painter.initPath(TGPainter.PATH_FILL);
+			painter.moveTo(( x + ((2.0f) * scale) ),( y + (1.0f * scale) ));
+			for( int i = 0; i < loops ; i ++ ){
+				x = (fromX + ( (6.0f * scale) * i ) );
+				painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+				painter.cubicTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ),( x + (3.0f * scale) ), y ,( x + (4.0f * scale) ),( y + (1.0f * scale) ));
+				painter.lineTo(( x + (6.0f * scale) ),( y + (3.0f * scale) ));
+			}
+			
+			painter.lineTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ));
+			painter.cubicTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ),( x + (8.0f * scale) ),( y + (2.0f * scale) ),( x + (7.0f * scale) ),( y + (3.0f * scale) ));
+			
+			for( int i = (loops - 1); i >= 0 ; i -- ){
+				x = (fromX + ( (6.0f * scale) * i ) );
+				painter.lineTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ));
+				painter.cubicTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ),( x + (5.0f * scale) ),( y + (5.0f * scale) ),( x + (4.0f * scale) ),( y + (4.0f * scale) ));
+				painter.lineTo(( x + (2.0f * scale) ),( y + (2.0f * scale) ));
+				painter.lineTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ));
+			}
+			painter.cubicTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ), x ,( y + (3.0f * scale) ),( x + (1.0f * scale) ),( y + (2.0f * scale) ));
+			painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+			painter.closePath();
+		}
+	}
+	
+	private void paintTrill(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		String string = "Tr";
+		int fmWidth = painter.getFMWidth( string );
+		int fmHeight = painter.getFMHeight();
+		float scale = layout.getScale();
+		float x = fromX + fmWidth;
+		float y = fromY + ( (fmHeight - (5.0f * scale)) / 2.0f );
+		float width = ( getVoiceImpl().getWidth() - fmWidth - (2.0f * scale) );
+		
+		int loops = (int)(width / (6.0f * scale) );
+		if(loops > 0 ){
+			painter.drawString(string, fromX, fromY);
+			
+			layout.setTabEffectStyle(painter);
+			painter.initPath(TGPainter.PATH_FILL);
+			painter.moveTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+			for( int i = 0; i < loops ; i ++ ){
+				x = (fromX + fmWidth + ( (6.0f * scale) * i ) );
+				painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+				painter.cubicTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ),( x + (3.0f * scale) ), y ,( x + (4.0f * scale) ),( y + (1.0f * scale) ));
+				painter.lineTo(( x + (6.0f * scale) ),( y + (3.0f * scale) ));
+			}
+			
+			painter.lineTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ));
+			painter.cubicTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ),( x + (8.0f * scale) ),( y + (2.0f * scale) ),( x + (7.0f * scale) ),( y + (3.0f * scale) ));
+			
+			for( int i = (loops - 1); i >= 0 ; i -- ){
+				x = (fromX + fmWidth + ( (6.0f * scale) * i ) );
+				painter.lineTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ));
+				painter.cubicTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ),( x + (5.0f * scale) ),( y + (5.0f * scale) ),( x + (4.0f * scale) ),( y + (4.0f * scale) ));
+				painter.lineTo(( x + (2.0f * scale) ),( y + (2.0f * scale) ));
+				painter.lineTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ));
+			}
+			painter.cubicTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ), x ,( y + (3.0f * scale) ),( x + (1.0f * scale) ),( y + (2.0f * scale) ));
+			painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
+			painter.closePath();
+		}
+	}
+	
+	private void paintFadeIn(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = fromX;
+		float y = fromY + (4.0f * scale );
+		float width = getVoiceImpl().getWidth();
+		painter.initPath();
+		painter.moveTo ( x , y );
+		painter.cubicTo( x , y , x + width, y,  x + width, y - (4.0f * scale ));
+		painter.moveTo ( x , y );
+		painter.cubicTo( x , y , x + width, y,  x + width, y + (4.0f * scale ));
+		painter.moveTo ( x + width, y + (4.0f * scale ) );
+		painter.closePath();
+	}
+	
+	private void paintAccentuated(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = fromX;
+		float y = fromY + (2f * scale );
+		painter.initPath();
+		painter.moveTo( x , y );
+		painter.lineTo( x + (6.0f * scale ) , y + (2.5f * scale ));
+		painter.moveTo( x + (6.0f * scale ) , y + (2.5f * scale ));
+		painter.lineTo( x , y + (5.0f * scale ));
+		painter.closePath();
+	}
+	
+	private void paintHeavyAccentuated(TGLayout layout, TGPainter painter,int fromX,int fromY){
+		float scale = layout.getScale();
+		float x = fromX;
+		float y = fromY;
+		painter.initPath();
+		painter.moveTo( x , y + (5.0f * scale ) );
+		painter.lineTo( x + (3.0f * scale ) , y + (1.0f * scale ));
+		painter.moveTo( x + (3.0f * scale ) , y + (1.0f * scale ));
+		painter.lineTo( x + (6.0f * scale ) , y + (5.0f * scale ) );
+		painter.closePath();
+	}
+	
+	public int getRealValue(){
+		return (getValue() + getMeasureImpl().getTrack().getString(getString()).getValue());
+	}
+	
+	public int getScorePosY() {
+		return this.scorePosY;
+	}
+	
+	public int getTabPosY() {
+		return this.tabPosY;
+	}
+	
+	public TGMeasureImpl getMeasureImpl(){
+		return getBeatImpl().getMeasureImpl();
+	}
+	
+	public int getPaintPosition(int index){
+		return getMeasureImpl().getTs().getPosition(index);
+	}
+	
+	public TGBeatImpl getBeatImpl() {
+		return getVoiceImpl().getBeatImpl();
+	}
+	
+	public TGVoiceImpl getVoiceImpl() {
+		return (TGVoiceImpl)super.getVoice();
+	}
+	
+	public int getPosX() {
+		return getBeatImpl().getPosX();
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGResources.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGResources.java
new file mode 100644
index 0000000..2db7f8c
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGResources.java
@@ -0,0 +1,429 @@
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGFontModel;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGResource;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.painters.TGNotePainter;
+import org.herac.tuxguitar.graphics.control.painters.TGTempoPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGTripletFeelPainter;
+import org.herac.tuxguitar.song.models.TGDuration;
+
+public class TGResources {
+	
+	private static final int SCORE_NOTE_EMPTY_NORMAL_MODE = 0;
+	private static final int SCORE_NOTE_EMPTY_PLAY_MODE = 1;
+	private static final int SCORE_NOTE_FULL_NORMAL_MODE = 2;
+	private static final int SCORE_NOTE_FULL_PLAY_MODE = 3;
+	
+	private List resources;
+	private TGLayout layout;
+	
+	private TGFont defaultFont;
+	private TGFont noteFont;
+	private TGFont timeSignatureFont;
+	private TGFont lyricFont;
+	private TGFont textFont;
+	private TGFont markerFont;
+	private TGFont graceFont;
+	private TGFont chordFont;
+	private TGFont chordFretFont;
+	private TGColor backgroundColor;
+	private TGColor lineColor;
+	private TGColor scoreNoteColor;
+	private TGColor tabNoteColor;
+	private TGColor playNoteColor;
+	private TGColor colorWhite;
+	private TGColor colorBlack;
+	private TGColor colorRed;
+	private TGColor loopSMarkerColor;
+	private TGColor loopEMarkerColor;
+	private TGImage[] scoreNotes;
+	private TGImage[] harmonicNotes;
+	private TGImage tempoImage;
+	private TGImage tripletFeel8;
+	private TGImage tripletFeelNone8;
+	private TGImage tripletFeel16;
+	private TGImage tripletFeelNone16;
+	
+	private int scoreNoteWidth;
+	
+	public TGResources(TGLayout layout){
+		this.layout = layout;
+		this.resources = new ArrayList();
+	}
+	
+	public void load(TGLayoutStyles styles){
+		this.dispose();
+		this.initFonts(styles);
+		this.initColors(styles);
+		this.initImages();
+	}
+	
+	public TGLayout getLayout(){
+		return this.layout;
+	}
+	
+	public TGFont getDefaultFont() {
+		return this.defaultFont;
+	}
+	
+	public TGFont getNoteFont() {
+		return this.noteFont;
+	}
+	
+	public TGFont getTimeSignatureFont() {
+		return this.timeSignatureFont;
+	}
+	
+	public TGFont getLyricFont(){
+		return this.lyricFont;
+	}
+	
+	public TGFont getTextFont(){
+		return this.textFont;
+	}
+	
+	public TGFont getMarkerFont(){
+		return this.markerFont;
+	}
+	
+	public TGFont getChordFont(){
+		return this.chordFont;
+	}
+	
+	public TGFont getChordFretFont(){
+		return this.chordFretFont;
+	}
+	
+	public TGFont getGraceFont() {
+		return this.graceFont;
+	}
+	
+	public TGColor getBackgroundColor() {
+		return this.backgroundColor;
+	}
+	
+	public TGColor getLineColor() {
+		return this.lineColor;
+	}
+	
+	public TGColor getPlayNoteColor() {
+		return this.playNoteColor;
+	}
+	
+	public TGColor getScoreNoteColor() {
+		return this.scoreNoteColor;
+	}
+	
+	public TGColor getTabNoteColor() {
+		return this.tabNoteColor;
+	}
+	
+	public TGColor getColorWhite() {
+		return this.colorWhite;
+	}
+	
+	public TGColor getColorBlack() {
+		return this.colorBlack;
+	}
+	
+	public TGColor getColorRed() {
+		return this.colorRed;
+	}
+	
+	public TGColor getLoopSMarkerColor() {
+		return this.loopSMarkerColor;
+	}
+	
+	public TGColor getLoopEMarkerColor() {
+		return this.loopEMarkerColor;
+	}
+	
+	public TGImage getTempoImage() {
+		return this.tempoImage;
+	}
+	
+	public TGImage getTripletFeel8(){
+		return this.tripletFeel8;
+	}
+	
+	public TGImage getTripletFeelNone8(){
+		return this.tripletFeelNone8;
+	}
+	
+	public TGImage getTripletFeel16(){
+		return this.tripletFeel16;
+	}
+	
+	public TGImage getTripletFeelNone16(){
+		return this.tripletFeelNone16;
+	}
+	
+	public TGImage getScoreNote(int value,boolean playing) {
+		int index = 0;
+		index += ((playing)?1:0);
+		index += ((value >= TGDuration.QUARTER)?2:0);
+		return this.scoreNotes[index];
+	}
+	
+	public TGImage getHarmonicNote(int value,boolean playing) {
+		int index = 0;
+		index += ((playing)?1:0);
+		index += ((value >= TGDuration.QUARTER)?2:0);
+		return this.harmonicNotes[index];
+	}
+	
+	public int getScoreNoteWidth(){
+		return this.scoreNoteWidth;
+	}
+	
+	private void initFonts(TGLayoutStyles style){
+		float scale = this.layout.getFontScale() ;
+		this.defaultFont = getFont(style.getDefaultFont(),scale);
+		this.noteFont = getFont(style.getNoteFont(), scale);
+		this.timeSignatureFont = getFont(style.getTimeSignatureFont(), scale);
+		this.lyricFont = getFont(style.getLyricFont(), scale);
+		this.textFont =  getFont(style.getTextFont(), scale);
+		this.markerFont =  getFont(style.getMarkerFont(), scale);
+		this.graceFont = getFont(style.getGraceFont(), scale);
+		this.chordFont = getFont(style.getChordFont(), scale);
+		this.chordFretFont = getFont(style.getChordFretFont(), scale);
+	}
+	
+	private void initColors(TGLayoutStyles style){
+		this.backgroundColor = getColor(style.getBackgroundColor());
+		this.lineColor = getColor(style.getLineColor());
+		this.scoreNoteColor = getColor(style.getScoreNoteColor());
+		this.tabNoteColor = getColor(style.getTabNoteColor());
+		this.playNoteColor = getColor(style.getPlayNoteColor());
+		this.loopSMarkerColor = getColor(style.getLoopSMarkerColor());
+		this.loopEMarkerColor = getColor(style.getLoopEMarkerColor());
+		// Static colors
+		this.colorWhite = getColor(new TGColorModel(0xff,0xff,0xff));
+		this.colorBlack = getColor(new TGColorModel(0x00,0x00,0x00));
+		this.colorRed = getColor(new TGColorModel(0xff,0x00,0x00));
+	}
+	
+	private void initImages(){
+		this.scoreNotes = new TGImage[4];
+		this.scoreNotes[SCORE_NOTE_EMPTY_NORMAL_MODE] = getScoreNoteImage( getScoreNoteColor(),false);
+		this.scoreNotes[SCORE_NOTE_EMPTY_PLAY_MODE] = getScoreNoteImage( getPlayNoteColor(),false);
+		this.scoreNotes[SCORE_NOTE_FULL_NORMAL_MODE] = getScoreNoteImage( getScoreNoteColor(),true);
+		this.scoreNotes[SCORE_NOTE_FULL_PLAY_MODE] = getScoreNoteImage( getPlayNoteColor(),true);
+		
+		this.harmonicNotes = new TGImage[4];
+		this.harmonicNotes[SCORE_NOTE_EMPTY_NORMAL_MODE] = getHarmonicImage( getScoreNoteColor(),false);
+		this.harmonicNotes[SCORE_NOTE_EMPTY_PLAY_MODE] = getHarmonicImage( getPlayNoteColor(),false);
+		this.harmonicNotes[SCORE_NOTE_FULL_NORMAL_MODE] = getHarmonicImage( getScoreNoteColor(),true);
+		this.harmonicNotes[SCORE_NOTE_FULL_PLAY_MODE] = getHarmonicImage( getPlayNoteColor(),true);
+		
+		this.tempoImage = getTempoImage(this.getColorBlack());
+		
+		this.tripletFeel8 = getTripletFeel8(this.getColorBlack());
+		this.tripletFeelNone8 = getTripletFeelNone8(this.getColorBlack());
+		this.tripletFeel16 = getTripletFeel16(this.getColorBlack());
+		this.tripletFeelNone16 = getTripletFeelNone16(this.getColorBlack());
+	}
+	
+	private TGFont getFont(TGFontModel model, float scale){
+		TGResourceFactory factory = getLayout().getComponent().getResourceFactory();
+		TGFontModel fm = new TGFontModel();
+		if(model != null){
+			float height = ( model.getHeight() * scale );
+			
+			fm.setHeight( ( height > 1 ? Math.round(height) : 1 ) );
+			fm.setName( model.getName() );
+			fm.setBold( model.isBold() );
+			fm.setItalic( model.isItalic() );
+		}
+		
+		return (TGFont)addResource(factory.createFont(fm));
+	}
+	
+	private TGColor getColor(TGColorModel model){
+		TGResourceFactory factory = getLayout().getComponent().getResourceFactory();
+		TGColorModel cm = (model != null ? model : new TGColorModel() );
+		
+		return (TGColor)addResource(factory.createColor(cm));
+	}
+	
+	private TGImage getScoreNoteImage(TGColor color,boolean full) {
+		float scale = (full ? getLayout().getScoreLineSpacing() + 1 : getLayout().getScoreLineSpacing() ) - 2;
+		int width = Math.round(scale * 1.33f);
+		int height = Math.round(scale * 1.0f);
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		painter.initPath( (full ? TGPainter.PATH_FILL : TGPainter.PATH_DRAW) );
+		TGNotePainter.paintNote(painter,0,1, scale );
+		painter.closePath();
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		this.scoreNoteWidth = width;
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getHarmonicImage(TGColor color,boolean full) {
+		int size = getLayout().getScoreLineSpacing();
+		
+		int x = 0;
+		int y = 1;
+		int width = getScoreNoteWidth() - 1;
+		int height = size - 2;
+		
+		TGImage image = getImage(x + width + 2,y + height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setForeground(color);
+		painter.setBackground(color);
+		painter.initPath( ( full ? TGPainter.PATH_DRAW | TGPainter.PATH_FILL : TGPainter.PATH_DRAW )  );
+		TGNotePainter.paintHarmonic(painter, x, y, height);
+		painter.closePath();
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getTempoImage(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		int width = Math.round(scale * 1.33f);
+		int height = Math.round(scale * (1.0f + 2.5f));
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTempoPainter.paintTempo(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getTripletFeelNone8(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		float ovalHeight = (1.0f * scale);
+		
+		int width = Math.round( ovalWidth + horizontalSpacing );
+		int height = Math.round( ovalHeight + verticalSpacing );
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTripletFeelPainter.paintTripletFeelNone8(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getTripletFeel8(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		float topSpacing = (1.0f * scale);
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		float ovalHeight = (1.0f * scale);
+		
+		int width = Math.round( (ovalWidth * 2f) + horizontalSpacing );
+		int height = Math.round((topSpacing + ovalHeight + verticalSpacing));
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTripletFeelPainter.paintTripletFeel8(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}	
+	
+	private TGImage getTripletFeelNone16(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		float ovalHeight = (1.0f * scale);
+		
+		int width = Math.round( ovalWidth + horizontalSpacing );
+		int height = Math.round( ovalHeight + verticalSpacing );
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTripletFeelPainter.paintTripletFeelNone16(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getTripletFeel16(TGColor color) {
+		float scale = 5f * getLayout().getScale();
+		float topSpacing = (1.0f * scale);
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		float ovalHeight = (1.0f * scale);
+		
+		int width = Math.round( (ovalWidth * 2f) + horizontalSpacing );
+		int height = Math.round( topSpacing + ovalHeight + verticalSpacing );
+		
+		TGImage image = getImage(width + 1, height + 2);
+		TGPainter painter = image.createPainter();
+		painter.setBackground(color);
+		painter.setForeground(color);
+		TGTripletFeelPainter.paintTripletFeel16(painter,0,0, scale);
+		painter.dispose();
+		image.applyTransparency(getBackgroundColor());
+		
+		return ((TGImage)addResource(image));
+	}
+	
+	private TGImage getImage(int width, int height){
+		TGResourceFactory factory = getLayout().getComponent().getResourceFactory();
+		TGImage image = factory.createImage(width, height);
+		TGPainter painter = image.createPainter();
+		painter.setBackground( getBackgroundColor());
+		painter.initPath(TGPainter.PATH_FILL);
+		painter.addRectangle(0,0,width, height);
+		painter.closePath();
+		painter.dispose();
+		return image;
+	}
+	
+	private TGResource addResource(TGResource resource){
+		this.resources.add(resource);
+		return resource;
+	}
+	
+	public void dispose(){
+		Iterator it = this.resources.iterator();
+		while( it.hasNext() ){
+			TGResource resource = (TGResource)it.next();
+			resource.dispose();
+		}
+		this.resources.clear();
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGSpacing.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGSpacing.java
new file mode 100644
index 0000000..307ac9f
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGSpacing.java
@@ -0,0 +1,52 @@
+package org.herac.tuxguitar.graphics.control;
+
+
+public abstract class TGSpacing {
+	
+	public static final int SCORE = 0x01;
+	public static final int TABLATURE = 0x02;
+	
+	private int flags;
+	private int[] spacing;
+	private int[][] positions;
+	
+	public TGSpacing(TGLayout layout, int[][] positions, int len){
+		this.flags = 0;
+		this.flags |= ((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ? SCORE : 0 );
+		this.flags |= ((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0 ? TABLATURE : 0 );
+		this.positions = positions;
+		this.spacing = new int[len];
+	}
+	
+	public void clear(){
+		for(int i = 0; i < this.spacing.length; i ++){
+			this.spacing[i] = 0;
+		}
+	}
+	
+	public void setSize(int index,int size){
+		if( size > this.spacing[ this.positions [this.flags -1] [index] ] ){
+			this.spacing[ this.positions [this.flags -1] [index] ] = size;
+		}
+	}
+	
+	public int getSize(int index){
+		return this.spacing[ this.positions [this.flags -1] [index] ];
+	}
+	
+	public int getSize(){
+		int spacing = 0;
+		for(int i = 0;i < this.spacing.length; i ++){
+			spacing += this.spacing[i];
+		}
+		return spacing;
+	}
+	
+	public int getPosition(int index){
+		int spacing = 0;
+		for(int i = 0;i < this.positions[this.flags -1][index]; i ++){
+			spacing += this.spacing[i];
+		}
+		return spacing;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGTextImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGTextImpl.java
new file mode 100644
index 0000000..55d315b
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGTextImpl.java
@@ -0,0 +1,16 @@
+package org.herac.tuxguitar.graphics.control;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.song.models.TGText;
+
+public class TGTextImpl extends TGText{
+	
+	public void paint(TGLayout layout,TGPainter painter,int fromX, int fromY){
+		TGBeatImpl beat = (TGBeatImpl)getBeat();
+		TGMeasureImpl measure = beat.getMeasureImpl();
+		int x = fromX + beat.getSpacing() + beat.getPosX();
+		int y = fromY + measure.getTs().getPosition(TGTrackSpacing.POSITION_TEXT);
+		layout.setTextStyle(painter);
+		painter.drawString(getValue(), x, y);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGTrackImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGTrackImpl.java
new file mode 100644
index 0000000..6bdf5e1
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGTrackImpl.java
@@ -0,0 +1,76 @@
+/*
+ * Created on 29-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGTrackImpl extends TGTrack{
+	
+	private int tabHeight;
+	private int scoreHeight;
+	
+	public TGTrackImpl(TGFactory factory) {
+		super(factory);
+	}
+	
+	public void update(TGLayout layout){
+		this.calculateTabHeight(layout);
+		this.calculateScoreHeight(layout);
+	}
+	/**
+	 * Calcula el el ancho de la tablatura
+	 */
+	public void calculateTabHeight(TGLayout layout) {
+		this.tabHeight = ((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0 ?((stringCount() - 1) * layout.getStringSpacing()):0);
+	}
+	
+	/**
+	 * Calcula el el ancho de la partitura
+	 */
+	public void calculateScoreHeight(TGLayout layout) {
+		this.scoreHeight = ((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ?(layout.getScoreLineSpacing() * 4):0);
+	}
+	
+	public int getTabHeight() {
+		return this.tabHeight;
+	}
+	
+	public int getScoreHeight() {
+		return this.scoreHeight;
+	}
+	
+	public void setTabHeight(int tabHeight) {
+		this.tabHeight = tabHeight;
+	}
+	
+	public void clear(){
+		Iterator measures = getMeasures();
+		while(measures.hasNext()){
+			TGMeasureImpl measure = (TGMeasureImpl)measures.next();
+			if(!measure.isDisposed()){
+				measure.dispose();
+			}
+		}
+		super.clear();
+	}
+	
+	public void removeMeasure(int index){
+		TGMeasureImpl measure = (TGMeasureImpl)getMeasure(index);
+		if(!measure.isDisposed()){
+			measure.dispose();
+		}
+		super.removeMeasure(index);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGTrackSpacing.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGTrackSpacing.java
new file mode 100644
index 0000000..4bceb5e
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGTrackSpacing.java
@@ -0,0 +1,89 @@
+package org.herac.tuxguitar.graphics.control;
+
+
+public class TGTrackSpacing extends TGSpacing {
+	
+	/***     POSITIONS ARRAY INDICES     ***/
+	public static final int POSITION_TOP = 0;
+	public static final int POSITION_LOOP_MARKER = 1;
+	public static final int POSITION_MARKER = 2;
+	public static final int POSITION_TEXT = 3;
+	public static final int POSITION_BUFFER_SEPARATOR = 4;
+	public static final int POSITION_REPEAT_ENDING = 5;
+	public static final int POSITION_CHORD = 6;
+	public static final int POSITION_SCORE_UP_LINES = 7;
+	public static final int POSITION_SCORE_MIDDLE_LINES = 8;
+	public static final int POSITION_SCORE_DOWN_LINES = 9;
+	public static final int POSITION_DIVISION_TYPE = 10;
+	public static final int POSITION_EFFECTS = 11;
+	public static final int POSITION_TABLATURE_TOP_SEPARATOR = 12;
+	public static final int POSITION_TABLATURE = 13;
+	public static final int POSITION_LYRIC = 14;
+	public static final int POSITION_BOTTOM = 15;
+	
+	private static final int[][] POSITIONS = new int[][]{
+		/** SCORE **/
+		new int[]{
+				0,  //POSITION_TOP
+				1,  //POSITION_LOOP_MARKER
+				2,  //POSITION_MARKER
+				3,  //POSITION_TEXT
+				4,  //POSITION_BUFFER_SEPARATOR
+				5,  //POSITION_REPEAT_ENDING
+				6,  //POSITION_CHORD
+				8,  //POSITION_SCORE_UP_LINES
+				9,  //POSITION_SCORE_MIDDLE_LINES
+				10, //POSITION_SCORE_DOWN_LINES
+				11, //POSITION_DIVISION_TYPE
+				7,  //POSITION_EFFECTS
+				12, //POSITION_TABLATURE_TOP_SEPARATOR
+				13, //POSITION_TABLATURE
+				14, //POSITION_LYRIC
+				15, //POSITION_BOTTOM
+			},
+			
+		/** TABLATURE **/
+		new int[]{
+				0,  //POSITION_TOP
+				1,  //POSITION_LOOP_MARKER
+				2,  //POSITION_MARKER
+				3,  //POSITION_TEXT
+				4,  //POSITION_BUFFER_SEPARATOR
+				5,  //POSITION_REPEAT_ENDING
+				6,  //POSITION_CHORD
+				13, //POSITION_SCORE_UP_LINES
+				14, //POSITION_SCORE_MIDDLE_LINES
+				15, //POSITION_SCORE_DOWN_LINES
+				10, //POSITION_DIVISION_TYPE
+				7,  //POSITION_EFFECTS
+				8,  //POSITION_TABLATURE_TOP_SEPARATOR
+				9,  //POSITION_TABLATURE
+				11, //POSITION_LYRIC
+				12, //POSITION_BOTTOM
+			},
+			
+		/** SCORE | TABLATURE **/
+		new int[]{
+				0,  //POSITION_TOP
+				1,  //POSITION_LOOP_MARKER
+				2,  //POSITION_MARKER
+				3,  //POSITION_TEXT
+				4,  //POSITION_BUFFER_SEPARATOR
+				5,  //POSITION_REPEAT_ENDING
+				6,  //POSITION_CHORD
+				7,  //POSITION_SCORE_UP_LINES
+				8,  //POSITION_SCORE_MIDDLE_LINES
+				9,  //POSITION_SCORE_DOWN_LINES
+				10, //POSITION_DIVISION_TYPE
+				11, //POSITION_EFFECTS
+				12, //POSITION_TABLATURE_TOP_SEPARATOR
+				13, //POSITION_TABLATURE
+				14, //POSITION_LYRIC
+				15, //POSITION_BOTTOM
+			},
+	};
+	
+	public TGTrackSpacing(TGLayout layout){
+		super( layout , POSITIONS , 16);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGVoiceImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGVoiceImpl.java
new file mode 100644
index 0000000..fc15026
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/TGVoiceImpl.java
@@ -0,0 +1,648 @@
+package org.herac.tuxguitar.graphics.control;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.control.painters.TGNotePainter;
+import org.herac.tuxguitar.graphics.control.painters.TGSilencePainter;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class TGVoiceImpl extends TGVoice{
+	/**
+	 * desviacion a la izquierda
+	 */
+	public static final int JOINED_TYPE_NONE_LEFT = 1;
+	/**
+	 * desviacion a la derecha
+	 */
+	public static final int JOINED_TYPE_NONE_RIGHT = 2;
+	/**
+	 * Union a la izquierda
+	 */
+	public static final int JOINED_TYPE_LEFT = 3;
+	/**
+	 * Union a la derecha
+	 */
+	public static final int JOINED_TYPE_RIGHT = 4;
+	
+	private int width;
+	private TGNoteImpl maxNote;
+	private TGNoteImpl minNote;
+	private boolean[] usedStrings;
+	private int joinedType;
+	private boolean joinedGreaterThanQuarter;
+	private TGVoiceImpl join1;
+	private TGVoiceImpl join2;
+	private TGVoiceImpl previous;
+	private TGVoiceImpl next;
+	private TGBeatGroup group;
+	
+	private boolean hiddenSilence;
+	
+	private int maxY;
+	private int minY;
+	private float silenceY;
+	private float silenceHeight;
+	
+	private int maxString;
+	private int minString;
+	
+	public TGVoiceImpl(TGFactory factory,int index){
+		super(factory, index);
+	}
+	
+	public int getPosX() {
+		return this.getBeatImpl().getPosX();
+	}
+	
+	public int getWidth() {
+		return this.width;
+	}
+	
+	public void setWidth(int width) {
+		this.width = width;
+	}
+	
+	public TGNoteImpl getMinNote(){
+		return this.minNote;
+	}
+	
+	public TGNoteImpl getMaxNote(){
+		return this.maxNote;
+	}
+	
+	public TGBeatImpl getBeatImpl() {
+		return (TGBeatImpl)getBeat();
+	}
+	
+	public TGMeasureImpl getMeasureImpl() {
+		return (TGMeasureImpl)getBeat().getMeasure();
+	}
+	
+	public boolean[] getUsedStrings() {
+		if(this.usedStrings == null){
+			this.usedStrings = new boolean[getBeat().getMeasure().getTrack().stringCount()];
+		}
+		return this.usedStrings;
+	}
+	
+	public TGVoiceImpl getJoin1() {
+		return this.join1;
+	}
+	
+	public void setJoin1(TGVoiceImpl join1) {
+		this.join1 = join1;
+	}
+	
+	public TGVoiceImpl getJoin2() {
+		return this.join2;
+	}
+	
+	public void setJoin2(TGVoiceImpl join2) {
+		this.join2 = join2;
+	}
+	
+	public boolean isJoinedGreaterThanQuarter() {
+		return this.joinedGreaterThanQuarter;
+	}
+	
+	public void setJoinedGreaterThanQuarter(boolean joinedGreaterThanQuarter) {
+		this.joinedGreaterThanQuarter = joinedGreaterThanQuarter;
+	}
+	
+	public int getJoinedType() {
+		return this.joinedType;
+	}
+	
+	public void setJoinedType(int joinedType) {
+		this.joinedType = joinedType;
+	}
+	
+	public void setPreviousBeat(TGVoiceImpl previous){
+		this.previous = previous;
+	}
+	
+	public void setNextBeat(TGVoiceImpl next){
+		this.next = next;
+	}
+	
+	public TGBeatGroup getBeatGroup() {
+		return this.group;
+	}
+	
+	public void setBeatGroup(TGBeatGroup group) {
+		this.group = group;
+	}
+	
+	public boolean isPlaying(TGLayout layout){
+		//return (getMeasureImpl().isPlaying(layout) && TuxGuitar.instance().getEditorCache().isPlaying(getBeat().getMeasure(),getBeat()));
+		return layout.getComponent().isRunning(this.getBeat());
+	}
+	
+	public void reset(){
+		this.maxNote = null;
+		this.minNote = null;
+		this.hiddenSilence = false;
+		this.usedStrings = new boolean[getBeat().getMeasure().getTrack().stringCount()];
+		this.maxString = 1;
+		this.minString = getBeat().getMeasure().getTrack().stringCount();
+		this.group = null;
+		this.previous = null;
+		this.next = null;
+	}
+	
+	public void check(TGNoteImpl note){
+		int value = note.getRealValue();
+		if(this.maxNote == null || value > this.maxNote.getRealValue()){
+			this.maxNote = note;
+		}
+		if(this.minNote == null || value < this.minNote.getRealValue()){
+			this.minNote = note;
+		}
+		this.getUsedStrings();
+		this.usedStrings[note.getString() - 1] = true;
+		
+		if( note.getString() > this.maxString ){
+			this.maxString = note.getString();
+		}
+		if( note.getString() < this.minString ){
+			this.minString = note.getString();
+		}
+	}
+	
+	public void update(TGLayout layout) {
+		this.minY = 0;
+		this.maxY = 0;
+		if(isRestVoice()){
+			this.updateSilenceSpacing(layout);
+		}
+		else{
+			this.updateNoteVoice(layout);
+		}
+	}
+	
+	public void updateNoteVoice(TGLayout layout) {
+		this.joinedType = JOINED_TYPE_NONE_RIGHT;
+		this.joinedGreaterThanQuarter = false;
+		this.setJoin1(this);
+		this.setJoin2(this);
+		
+		boolean noteJoined = false;
+		boolean withPrev = false;
+		
+		//trato de unir con el componente anterior
+		if (this.previous != null && !this.previous.isRestVoice()) {
+			if (getMeasureImpl().canJoin(layout.getSongManager(),this, this.previous)) {
+				withPrev = true;
+				if (this.previous.getDuration().getValue() >= getDuration().getValue()) {
+					this.setJoin1(this.previous);
+					this.setJoin2(this);
+					this.joinedType = JOINED_TYPE_LEFT;
+					noteJoined = true;
+				}
+				if (this.previous.getDuration().getValue() > TGDuration.QUARTER){
+					this.joinedGreaterThanQuarter = true;
+				}
+			}
+		}
+		
+		//trato de unir con el componente que le sigue
+		if (this.next != null && !this.next.isRestVoice() ) {
+			if (getMeasureImpl().canJoin(layout.getSongManager(),this, this.next)) {
+				if (this.next.getDuration().getValue() >= getDuration().getValue()) {
+					this.setJoin2(this.next);
+					if (this.previous == null || this.previous.isRestVoice() || this.previous.getDuration().getValue() < getDuration().getValue()) {
+						this.setJoin1(this);
+					}
+					noteJoined = true;
+					this.joinedType = JOINED_TYPE_RIGHT;
+				}
+				if (this.next.getDuration().getValue() > TGDuration.QUARTER){
+					this.joinedGreaterThanQuarter = true;
+				}
+			}
+		}
+		
+		//si no hubo union decido para que lado girar la figura
+		if (!noteJoined && withPrev) {
+			this.joinedType = JOINED_TYPE_NONE_LEFT;
+		}
+		
+		if( (layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0 && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0){
+			this.minY = 0;
+			this.maxY = getBeatImpl().getMeasureImpl().getTrackImpl().getTabHeight();
+			if( getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ){
+				this.maxY += (((layout.getStringSpacing() / 2) * 5) + 1);
+			}else{
+				this.minY -= (((layout.getStringSpacing() / 2) * 5) + 1);
+			}
+		}
+	}
+	
+	public void updateSilenceSpacing(TGLayout layout) {
+		this.silenceY = 0;
+		this.silenceHeight = 0;
+		
+		if(!isHiddenSilence()){
+			int style = layout.getStyle();
+			int lineSpacing = 0;
+			int lineCount = 0;
+			float scale = 0;
+			if((style & TGLayout.DISPLAY_SCORE) != 0 ){
+				lineSpacing = layout.getScoreLineSpacing();
+				lineCount = 5;
+				scale = (lineSpacing / 9.0f);
+			}else{
+				lineSpacing = layout.getStringSpacing();
+				lineCount = getBeat().getMeasure().getTrack().stringCount();
+				scale = (lineSpacing / 10.0f);
+			}
+			
+			int duration = getDuration().getValue();
+			if(duration == TGDuration.WHOLE){
+				this.silenceHeight = (scale * 3.6513581f);
+				this.silenceY = ( lineCount <= 5 ? lineSpacing : lineSpacing * 2 );
+			}
+			else if(duration == TGDuration.HALF){
+				this.silenceHeight = (scale * 3.6513581f);
+				this.silenceY = ( lineCount <= 5 ? lineSpacing * 2 : lineSpacing * 3 ) - this.silenceHeight;
+			}
+			else if(duration == TGDuration.QUARTER){
+				this.silenceHeight = (scale * 16);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			else if(duration == TGDuration.EIGHTH){
+				this.silenceHeight = (scale * 12);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			else if(duration == TGDuration.SIXTEENTH){
+				this.silenceHeight = (scale * 16);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			else if(duration == TGDuration.THIRTY_SECOND){
+				this.silenceHeight = (scale * 24);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			else if(duration == TGDuration.SIXTY_FOURTH){
+				this.silenceHeight = (scale * 28);
+				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
+			}
+			
+			for( int v = 0; v < getBeat().countVoices(); v ++){
+				if( v != getIndex() ){
+					TGVoiceImpl voice = getBeatImpl().getVoiceImpl( v );
+					if( !voice.isEmpty() ){
+						if( voice.isRestVoice()){
+							if( !voice.isHiddenSilence() ){
+								float maxSilenceHeight = (lineSpacing * 3);
+								float firstPosition = (this.silenceY - (maxSilenceHeight / getBeat().countVoices()));
+								this.silenceY = (firstPosition + ( maxSilenceHeight * getIndex() ));
+							}
+						}
+						else if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+							int direction = voice.getBeatGroup().getDirection();
+							int y1 = voice.getBeatGroup().getY1(layout,voice.getMinNote(),getMeasureImpl().getKeySignature(),getMeasureImpl().getClef());
+							int y2 = voice.getBeatGroup().getY1(layout,voice.getMaxNote(),getMeasureImpl().getKeySignature(),getMeasureImpl().getClef());
+							
+							if(direction == TGBeatGroup.DIRECTION_UP){
+								float position = (y1 + (lineSpacing * 2));
+								if( position > this.silenceY ){
+									this.silenceY = position;
+								}
+							}else if(direction == TGBeatGroup.DIRECTION_DOWN){
+								float position = (y2 - (this.silenceHeight + lineSpacing));
+								if( position < this.silenceY ){
+									this.silenceY = position;
+								}
+							}
+						}else if((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0 ){
+							int direction = voice.getBeatGroup().getDirection();
+							if(direction == TGBeatGroup.DIRECTION_UP){
+								float position = (lineSpacing * voice.getMaxString() );
+								if( position > this.silenceY ){
+									this.silenceY = position;
+								}
+							}
+							else if(direction == TGBeatGroup.DIRECTION_DOWN){
+								float position = ((lineSpacing * (voice.getMinString() - 1) ) - (this.silenceHeight + lineSpacing));
+								if( position < this.silenceY ){
+									this.silenceY = position;
+								}
+							}
+						}
+					}
+				}
+			}
+			this.minY = (int)this.silenceY;
+			this.maxY = (int)(this.silenceY + this.silenceHeight);
+		}
+	}
+	
+	public void paint(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		if(!isEmpty()){
+			if(isRestVoice() && !isHiddenSilence()){
+				paintSilence(layout, painter, fromX, fromY);
+			}
+			else{
+				Iterator notes = getNotes().iterator();
+				while (notes.hasNext()) {
+					TGNoteImpl note = (TGNoteImpl)notes.next();
+					note.paint(layout,painter,fromX ,fromY);
+				}
+				if(!layout.isPlayModeEnabled()){
+					paintBeat(layout, painter, fromX, fromY) ;
+				}
+			}
+		}
+	}
+	
+	//----silence
+	public void paintSilence(TGLayout layout,TGPainter painter, int fromX, int fromY) {
+		int style = layout.getStyle();
+		int x = 0;
+		int lineSpacing = 0;
+		float y = 0;
+		float scale = 0;
+		
+		if((style & TGLayout.DISPLAY_SCORE) != 0 ){
+			x = fromX + getPosX() + getBeatImpl().getSpacing();
+			y = fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) + this.silenceY;
+			lineSpacing = layout.getScoreLineSpacing();
+			scale = (lineSpacing / 9.0f);
+		}else{
+			x = fromX + getPosX() + getBeatImpl().getSpacing() - 1;
+			y = fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE) + this.silenceY;
+			lineSpacing = layout.getStringSpacing();
+			scale = (lineSpacing / 10.0f);
+		}
+		
+		setStyle(layout, painter,(layout.isPlayModeEnabled() && isPlaying(layout)));
+		painter.initPath(TGPainter.PATH_FILL);
+		
+		int duration = getDuration().getValue();
+		if(duration == TGDuration.WHOLE){
+			TGSilencePainter.paintWhole(painter, x, y , scale);
+		}
+		else if(duration == TGDuration.HALF){
+			TGSilencePainter.paintHalf(painter, x, y , scale);
+		}
+		else if(duration == TGDuration.QUARTER){
+			TGSilencePainter.paintQuarter(painter, x, y, scale);
+		}
+		else if(duration == TGDuration.EIGHTH){
+			TGSilencePainter.paintEighth(painter, x, y, scale);
+		}
+		else if(duration == TGDuration.SIXTEENTH){
+			TGSilencePainter.paintSixteenth(painter, x, y, scale);
+		}
+		else if(duration == TGDuration.THIRTY_SECOND){
+			TGSilencePainter.paintThirtySecond(painter, x, y, scale);
+		}
+		else if(duration == TGDuration.SIXTY_FOURTH){
+			TGSilencePainter.paintSixtyFourth(painter, x, y, scale);
+		}
+		
+		painter.closePath();
+		
+		if(getDuration().isDotted() || getDuration().isDoubleDotted()){
+			layout.setDotStyle(painter);
+			painter.initPath();
+			painter.moveTo(x + 10,y +1);
+			painter.addOval(x + 10,y +1,1,1);
+			if(getDuration().isDoubleDotted()){
+				painter.moveTo(x + 13,y +1);
+				painter.addOval(x + 13,y +1,1,1);
+			}
+			painter.closePath();
+		}
+		if(!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)){
+			layout.setDivisionTypeStyle(painter);
+			if((style & TGLayout.DISPLAY_SCORE) != 0 ){
+				painter.drawString(Integer.toString(getDuration().getDivision().getEnters()), x,(fromY + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
+			}else{
+				painter.drawString(Integer.toString(getDuration().getDivision().getEnters()),x,(fromY + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
+			}
+		}
+	}
+	
+	public void setStyle(TGLayout layout, TGPainter painter, boolean playMode){
+		if((layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0 ){
+			layout.setScoreSilenceStyle(painter, playMode);
+		}else{
+			layout.setTabSilenceStyle(painter, playMode);
+		}
+	}
+	
+	public void paintBeat(TGLayout layout,TGPainter painter, int fromX, int fromY){
+		if(!isRestVoice() ){
+			int style = layout.getStyle();
+			int spacing = getBeatImpl().getSpacing();
+			
+			if((style & TGLayout.DISPLAY_SCORE) != 0){
+				paintScoreBeat(layout, painter, fromX, fromY+getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES), spacing);
+			}
+			if((style & TGLayout.DISPLAY_TABLATURE) != 0 && (style & TGLayout.DISPLAY_SCORE) == 0){
+				paintTablatureBeat(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE), spacing);
+			}
+		}
+	}
+	
+	public void paintTablatureBeat(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing){
+		if(!isRestVoice() ){
+			float scale = layout.getScale();
+			float xMove = (2 * scale);
+			float x = ( fromX + getPosX() + spacing + xMove );
+			float y1 = 0;
+			float y2 = 0;
+			float verticalLineWidth = scale;
+			float horizontalLineWidth = (2 * scale);
+			int stringSpacing = layout.getStringSpacing();
+			if( getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ){
+				y1 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + (stringSpacing / 2));
+				y2 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + ((stringSpacing / 2) * 5));
+			}else{
+				y1 = (fromY - (stringSpacing / 2) - horizontalLineWidth);
+				y2 = (fromY - ((stringSpacing / 2) * 5));
+			}
+			if (getDuration().getValue() >= TGDuration.QUARTER) {
+				layout.setTabNoteFooterStyle(painter);
+				painter.initPath();
+				painter.setAntialias(false);
+				painter.setLineWidth( (int)verticalLineWidth );
+				painter.moveTo(x, y1);
+				painter.lineTo(x, y2);
+				painter.closePath();
+				if (getDuration().getValue() >= TGDuration.EIGHTH) {
+					float x1 = 0;
+					float x2 = 0;
+					int joinedType = getJoinedType();
+					if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT){
+						x1 = getPosX() + xMove + spacing;
+						x2 = getPosX() + xMove + spacing + (6 * scale);
+					}else if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT){
+						x1 = getPosX() + xMove + spacing - (5 * scale);
+						x2 = getPosX() + xMove + spacing;
+					}else{
+						x1 = getJoin1().getPosX() + xMove + getJoin1().getBeatImpl().getSpacing();
+						x2 = getJoin2().getPosX() + xMove + getJoin2().getBeatImpl().getSpacing();
+					}
+					int index = ( getDuration().getIndex() - 2);
+					if(index > 0){
+						int height = (layout.getStringSpacing() / 2);
+						int direction = (getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ? 1 : -1);
+						painter.setLineWidth( (int)horizontalLineWidth );
+						painter.initPath();
+						for(int i = index; i > 0 ;i --){
+							painter.moveTo(fromX + x1, y2 + ((height - (i * height)) * direction));
+							painter.lineTo(fromX + x2, y2 + ((height - (i * height)) * direction));
+						}
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}
+			} else if (getDuration().getValue() == TGDuration.HALF) {
+				layout.setTabNoteFooterStyle(painter);
+				painter.initPath();
+				painter.setAntialias(false);
+				painter.setLineWidth( (int)verticalLineWidth );
+				painter.moveTo(x, (y1 + ((y2 - y1) / 2)));
+				painter.lineTo(x, y2);
+				painter.closePath();
+			}
+			
+			//-------------puntillo--------------------------------------
+			if (getDuration().isDotted() || getDuration().isDoubleDotted()) {
+				int joinedType = getJoinedType();
+				float posX = ((getDuration().getValue() > TGDuration.WHOLE)?((joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT || joinedType == TGVoiceImpl.JOINED_TYPE_RIGHT)?(x+ (4.0f * scale)):(x- (5.0f * scale))):x);
+				float posY = (y2 - ((getDuration().getValue() >= TGDuration.EIGHTH)? ((stringSpacing / 2) * (getDuration().getIndex() - 2)):(1.0f * scale)));
+				paintDot(layout, painter, posX, posY,scale);
+			}
+			
+			//-------------tresillo--------------------------------------
+			if (!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)) {
+				layout.setDivisionTypeStyle(painter);
+				painter.drawString(Integer.toString(getDuration().getDivision().getEnters()), (int)(x - 3),((fromY - getPaintPosition(TGTrackSpacing.POSITION_TABLATURE)) + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
+			}
+		}
+	}
+	
+	public void paintScoreBeat(TGLayout layout,TGPainter painter, int fromX, int fromY, int spacing){
+		int vX = ( fromX + getPosX() + spacing );
+		
+		//division type
+		if (!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)) {
+			layout.setDivisionTypeStyle(painter);
+			painter.drawString(Integer.toString(getDuration().getDivision().getEnters()),vX ,((fromY - getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)) + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
+		}
+		//dibujo el pie
+		if(getDuration().getValue() >= TGDuration.HALF){
+			layout.setScoreNoteFooterStyle(painter);
+			
+			float scale = layout.getScale();
+			float lineSpacing = layout.getScoreLineSpacing();
+			int direction = this.group.getDirection();
+			int key = getBeat().getMeasure().getKeySignature();
+			int clef = getBeat().getMeasure().getClef();
+			
+			int xMove = (direction == TGBeatGroup.DIRECTION_UP ? layout.getResources().getScoreNoteWidth() : 0);
+			int yMove = (direction == TGBeatGroup.DIRECTION_UP ? ((layout.getScoreLineSpacing() / 3) + 1) : ((layout.getScoreLineSpacing() / 3) * 2));
+			
+			int vY1 = fromY + ( direction == TGBeatGroup.DIRECTION_DOWN ? this.maxNote.getScorePosY() : this.minNote.getScorePosY() );
+			int vY2 = fromY + this.group.getY2(layout,getPosX() + spacing,key,clef);
+			
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo(vX + xMove, vY1 + yMove);
+			painter.lineTo(vX + xMove, vY2);
+			painter.closePath();
+			
+			if (getDuration().getValue() >= TGDuration.EIGHTH) {
+				int index =  ( getDuration().getIndex() - 3);
+				if(index >= 0){
+					int dir = (direction == TGBeatGroup.DIRECTION_DOWN)?1:-1;
+					int joinedType = getJoinedType();
+					boolean joinedGreaterThanQuarter = isJoinedGreaterThanQuarter();
+					
+					if((joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT || joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT) && !joinedGreaterThanQuarter){
+						float hX = (fromX + xMove + getPosX() + spacing);
+						float hY = ( (fromY + this.group.getY2(layout,getPosX() + spacing,key,clef)) - ( (lineSpacing * 2)* dir )) ;
+						for(int i = 0; i <= index; i ++){
+							painter.initPath(TGPainter.PATH_FILL);
+							TGNotePainter.paintFooter(painter,hX,(hY - ( (i * (lineSpacing / 2.0f)) * dir)),dir,lineSpacing);
+							painter.closePath();
+						}
+					}else{
+						int hX1 = 0;
+						int hX2 = 0;
+						if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT){
+							hX1 = getPosX() + spacing;
+							hX2 = getPosX() + spacing + 6;
+						}else if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT){
+							hX1 = getPosX() + spacing - 5;
+							hX2 = getPosX() + spacing;
+						}else{
+							hX1 = getJoin1().getPosX() + getJoin1().getBeatImpl().getSpacing();
+							hX2 = getJoin2().getPosX() + getJoin2().getBeatImpl().getSpacing();
+						}
+						int hY1 = fromY + this.group.getY2(layout,hX1,key,clef);
+						int hY2 = fromY + this.group.getY2(layout,hX2,key,clef);
+						painter.setLineWidth(Math.max(1,Math.round(3f * scale)));
+						painter.initPath();
+						for(int i = 0; i <= index; i ++){
+							painter.moveTo(fromX + xMove + hX1, hY1 - ( (i * (5f * scale)) * dir));
+							painter.lineTo(fromX + xMove + hX2, hY2 - ( (i * (5f * scale)) * dir));
+						}
+						painter.closePath();
+						painter.setLineWidth(1);
+					}
+				}
+			}
+		}
+	}
+	
+	public void paintDot(TGLayout layout,TGPainter painter,float fromX, float fromY,float scale){
+		float dotSize = (3.0f * scale);
+		float posX = fromX;
+		float posY = fromY;
+		layout.setDotStyle(painter);
+		painter.initPath(TGPainter.PATH_FILL);
+		painter.moveTo(posX - (dotSize / 2), posY - (dotSize / 2));
+		painter.addOval(posX - (dotSize / 2), posY - (dotSize / 2), dotSize,dotSize);
+		if(getDuration().isDoubleDotted()){
+			painter.moveTo(posX + (dotSize + 2) - (dotSize / 2), posY - (dotSize / 2));
+			painter.addOval(posX + (dotSize + 2) - (dotSize / 2), posY - (dotSize / 2), dotSize,dotSize);
+		}
+		painter.closePath();
+	}
+	
+	public int getPaintPosition(int index){
+		return getMeasureImpl().getTs().getPosition(index);
+	}
+	
+	public int getMaxString() {
+		return this.maxString;
+	}
+	
+	public int getMinString() {
+		return this.minString;
+	}
+	
+	public int getMaxY() {
+		return this.maxY;
+	}
+	
+	public int getMinY() {
+		return this.minY;
+	}
+	
+	public boolean isHiddenSilence() {
+		return this.hiddenSilence;
+	}
+	
+	public void setHiddenSilence(boolean hiddenSilence) {
+		this.hiddenSilence = hiddenSilence;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGClefPainter.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGClefPainter.java
new file mode 100644
index 0000000..63a38fd
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGClefPainter.java
@@ -0,0 +1,345 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGClefPainter {
+	
+	public static void paintTreble(TGPainter painter, int x, int y,float scale){
+		painter.moveTo((x + (0.9706216f * scale)),(y + (-0.9855771f * scale)));
+		painter.cubicTo((x + (0.99023926f * scale)),(y + (-0.99538594f * scale)),(x + (0.99350905f * scale)),(y + (-0.99538594f * scale)),(x + (1.0131269f * scale)),(y + (-0.99538594f * scale)));
+		painter.cubicTo((x + (1.0392835f * scale)),(y + (-0.99211615f * scale)),(x + (1.055632f * scale)),(y + (-0.9823073f * scale)),(x + (1.0915977f * scale)),(y + (-0.9430719f * scale)));
+		painter.cubicTo((x + (1.3270102f * scale)),(y + (-0.7011198f * scale)),(x + (1.5231876f * scale)),(y + (-0.26953024f * scale)),(x + (1.572232f * scale)),(y + (0.09666765f * scale)));
+		painter.cubicTo((x + (1.578771f * scale)),(y + (0.1555208f * scale)),(x + (1.578771f * scale)),(y + (0.29284477f * scale)),(x + (1.572232f * scale)),(y + (0.35496712f * scale)));
+		painter.cubicTo((x + (1.5362663f * scale)),(y + (0.6917379f * scale)),(x + (1.3956721f * scale)),(y + (0.9990827f * scale)),(x + (1.0719799f * scale)),(y + (1.4404812f * scale)));
+		painter.lineTo((x + (1.0262054f * scale)),(y + (1.502604f * scale)));
+		painter.lineTo((x + (1.0523622f * scale)),(y + (1.577805f * scale)));
+		painter.cubicTo((x + (1.1144851f * scale)),(y + (1.7576342f * scale)),(x + (1.1864164f * scale)),(y + (1.9766989f * scale)),(x + (1.2321913f * scale)),(y + (2.1369102f * scale)));
+		painter.cubicTo((x + (1.24527f * scale)),(y + (2.1761456f * scale)),(x + (1.2550789f * scale)),(y + (2.208842f * scale)),(x + (1.2550789f * scale)),(y + (2.212112f * scale)));
+		painter.cubicTo((x + (1.2550789f * scale)),(y + (2.212112f * scale)),(x + (1.2779659f * scale)),(y + (2.212112f * scale)),(x + (1.3008534f * scale)),(y + (2.2153816f * scale)));
+		painter.cubicTo((x + (1.4152898f * scale)),(y + (2.22519f * scale)),(x + (1.5133789f * scale)),(y + (2.2513473f * scale)),(x + (1.6147372f * scale)),(y + (2.3003914f * scale)));
+		painter.cubicTo((x + (1.6964773f * scale)),(y + (2.3428962f * scale)),(x + (1.7684091f * scale)),(y + (2.3919404f * scale)),(x + (1.8370711f * scale)),(y + (2.457333f * scale)));
+		painter.cubicTo((x + (1.9122725f * scale)),(y + (2.5325344f * scale)),(x + (1.9613168f * scale)),(y + (2.601196f * scale)),(x + (2.0070913f * scale)),(y + (2.6960156f * scale)));
+		painter.cubicTo((x + (2.0757532f * scale)),(y + (2.8333395f * scale)),(x + (2.10518f * scale)),(y + (2.9772024f * scale)),(x + (2.10191f * scale)),(y + (3.121066f * scale)));
+		painter.cubicTo((x + (2.0986407f * scale)),(y + (3.2126155f * scale)),(x + (2.085562f * scale)),(y + (3.2812777f * scale)),(x + (2.0561357f * scale)),(y + (3.3662882f * scale)));
+		painter.cubicTo((x + (2.0169f * scale)),(y + (3.4905329f * scale)),(x + (1.9449685f * scale)),(y + (3.60497f * scale)),(x + (1.8468798f * scale)),(y + (3.7030587f * scale)));
+		painter.cubicTo((x + (1.7618695f * scale)),(y + (3.7880688f * scale)),(x + (1.6833986f * scale)),(y + (3.8403826f * scale)),(x + (1.578771f * scale)),(y + (3.8828878f * scale)));
+		painter.lineTo((x + (1.5395356f * scale)),(y + (3.8992357f * scale)));
+		painter.lineTo((x + (1.5395356f * scale)),(y + (4.016942f * scale)));
+		painter.cubicTo((x + (1.5395356f * scale)),(y + (4.183693f * scale)),(x + (1.5297267f * scale)),(y + (4.37987f * scale)),(x + (1.516648f * scale)),(y + (4.497576f * scale)));
+		painter.cubicTo((x + (1.50357f * scale)),(y + (4.6185517f * scale)),(x + (1.4708736f * scale)),(y + (4.732989f * scale)),(x + (1.4185596f * scale)),(y + (4.837617f * scale)));
+		painter.cubicTo((x + (1.2812357f * scale)),(y + (5.1155343f * scale)),(x + (1.0392835f * scale)),(y + (5.262667f * scale)),(x + (0.7679054f * scale)),(y + (5.2365108f * scale)));
+		painter.cubicTo((x + (0.46056065f * scale)),(y + (5.2070837f * scale)),(x + (0.21207006f * scale)),(y + (4.997828f * scale)),(x + (0.14994715f * scale)),(y + (4.716641f * scale)));
+		painter.cubicTo((x + (0.12052006f * scale)),(y + (4.589125f * scale)),(x + (0.13359922f * scale)),(y + (4.491037f * scale)),(x + (0.18591277f * scale)),(y + (4.409296f * scale)));
+		painter.cubicTo((x + (0.25457475f * scale)),(y + (4.3013988f * scale)),(x + (0.38535964f * scale)),(y + (4.2392764f * scale)),(x + (0.5128747f * scale)),(y + (4.2425456f * scale)));
+		painter.cubicTo((x + (0.6632773f * scale)),(y + (4.2490854f * scale)),(x + (0.78425336f * scale)),(y + (4.3667912f * scale)),(x + (0.80714035f * scale)),(y + (4.5302725f * scale)));
+		painter.cubicTo((x + (0.8234888f * scale)),(y + (4.661057f * scale)),(x + (0.7679054f * scale)),(y + (4.782033f * scale)),(x + (0.6632773f * scale)),(y + (4.8474255f * scale)));
+		painter.cubicTo((x + (0.6044242f * scale)),(y + (4.8833914f * scale)),(x + (0.52268356f * scale)),(y + (4.8997393f * scale)),(x + (0.46056065f * scale)),(y + (4.8899307f * scale)));
+		painter.cubicTo((x + (0.45075235f * scale)),(y + (4.8899307f * scale)),(x + (0.44094297f * scale)),(y + (4.8866606f * scale)),(x + (0.44094297f * scale)),(y + (4.8899307f * scale)));
+		painter.lineTo((x + (0.48017892f * scale)),(y + (4.929166f * scale)));
+		painter.cubicTo((x + (0.55211014f * scale)),(y + (5.0010977f * scale)),(x + (0.63385075f * scale)),(y + (5.0468726f * scale)),(x + (0.7384789f * scale)),(y + (5.06976f * scale)));
+		painter.cubicTo((x + (0.76136583f * scale)),(y + (5.0730295f * scale)),(x + (0.78098357f * scale)),(y + (5.0730295f * scale)),(x + (0.8332976f * scale)),(y + (5.0730295f * scale)));
+		painter.cubicTo((x + (0.89215076f * scale)),(y + (5.0730295f * scale)),(x + (0.8986898f * scale)),(y + (5.0730295f * scale)),(x + (0.9313861f * scale)),(y + (5.0664897f * scale)));
+		painter.cubicTo((x + (0.97716117f * scale)),(y + (5.0534115f * scale)),(x + (1.0163965f * scale)),(y + (5.0370636f * scale)),(x + (1.0523622f * scale)),(y + (5.0174456f * scale)));
+		painter.cubicTo((x + (1.2158434f * scale)),(y + (4.919357f * scale)),(x + (1.3270102f * scale)),(y + (4.716641f * scale)),(x + (1.3564366f * scale)),(y + (4.47142f * scale)));
+		painter.cubicTo((x + (1.3662455f * scale)),(y + (4.37987f * scale)),(x + (1.3760543f * scale)),(y + (4.183693f * scale)),(x + (1.3760543f * scale)),(y + (4.0398297f * scale)));
+		painter.cubicTo((x + (1.3760543f * scale)),(y + (3.9450107f * scale)),(x + (1.3760543f * scale)),(y + (3.9384713f * scale)),(x + (1.3695153f * scale)),(y + (3.9384713f * scale)));
+		painter.cubicTo((x + (1.3564366f * scale)),(y + (3.9450107f * scale)),(x + (1.2877747f * scale)),(y + (3.95155f * scale)),(x + (1.2387304f * scale)),(y + (3.9548192f * scale)));
+		painter.cubicTo((x + (1.1766075f * scale)),(y + (3.9580889f * scale)),(x + (1.0719799f * scale)),(y + (3.9580889f * scale)),(x + (1.0229356f * scale)),(y + (3.95155f * scale)));
+		painter.cubicTo((x + (0.8300278f * scale)),(y + (3.9286623f * scale)),(x + (0.65346843f * scale)),(y + (3.8632698f * scale)),(x + (0.4997966f * scale)),(y + (3.755372f * scale)));
+		painter.cubicTo((x + (0.2709232f * scale)),(y + (3.595161f * scale)),(x + (0.10744194f * scale)),(y + (3.3564782f * scale)),(x + (0.038779963f * scale)),(y + (3.0818305f * scale)));
+		painter.cubicTo((x + (-0.04949972f * scale)),(y + (2.7385209f * scale)),(x + (0.012623194f * scale)),(y + (2.3723233f * scale)),(x + (0.22841798f * scale)),(y + (1.9865077f * scale)));
+		painter.cubicTo((x + (0.31996745f * scale)),(y + (1.8262968f * scale)),(x + (0.40824714f * scale)),(y + (1.6955118f * scale)),(x + (0.6273117f * scale)),(y + (1.4045155f * scale)));
+		painter.lineTo((x + (0.751557f * scale)),(y + (1.2377651f * scale)));
+		painter.lineTo((x + (0.72866946f * scale)),(y + (1.1756423f * scale)));
+		painter.cubicTo((x + (0.5717278f * scale)),(y + (0.7604004f * scale)),(x + (0.51941377f * scale)),(y + (0.52171814f * scale)),(x + (0.5030659f * scale)),(y + (0.17513847f * scale)));
+		painter.cubicTo((x + (0.49652684f * scale)),(y + (0.024735928f * scale)),(x + (0.5030659f * scale)),(y + (-0.102779746f * scale)),(x + (0.52268356f * scale)),(y + (-0.2074073f * scale)));
+		painter.cubicTo((x + (0.5717278f * scale)),(y + (-0.48205525f * scale)),(x + (0.69924295f * scale)),(y + (-0.72727656f * scale)),(x + (0.8986898f * scale)),(y + (-0.92345417f * scale)));
+		painter.cubicTo((x + (0.9379252f * scale)),(y + (-0.9626896f * scale)),(x + (0.9542737f * scale)),(y + (-0.9757682f * scale)),(x + (0.9706216f * scale)),(y + (-0.9855771f * scale)));
+		painter.moveTo((x + (1.2289215f * scale)),(y + (-0.4264719f * scale)));
+		painter.cubicTo((x + (1.1962258f * scale)),(y + (-0.48205525f * scale)),(x + (1.2027647f * scale)),(y + (-0.478786f * scale)),(x + (1.1733383f * scale)),(y + (-0.45916772f * scale)));
+		painter.cubicTo((x + (1.0817888f * scale)),(y + (-0.40358436f * scale)),(x + (0.98697f * scale)),(y + (-0.3185745f * scale)),(x + (0.9183075f * scale)),(y + (-0.23356462f * scale)));
+		painter.cubicTo((x + (0.77771425f * scale)),(y + (-0.05373496f * scale)),(x + (0.69924295f * scale)),(y + (0.1555208f * scale)),(x + (0.68943465f * scale)),(y + (0.38112438f * scale)));
+		painter.cubicTo((x + (0.6861648f * scale)),(y + (0.4726739f * scale)),(x + (0.69597363f * scale)),(y + (0.5315269f * scale)),(x + (0.7384789f * scale)),(y + (0.6721202f * scale)));
+		painter.cubicTo((x + (0.77117467f * scale)),(y + (0.7865572f * scale)),(x + (0.8627241f * scale)),(y + (1.0644748f * scale)),(x + (0.86926377f * scale)),(y + (1.0710139f * scale)));
+		painter.cubicTo((x + (0.86926377f * scale)),(y + (1.0742836f * scale)),(x + (0.88888097f * scale)),(y + (1.0513968f * scale)),(x + (0.90849864f * scale)),(y + (1.0219696f * scale)));
+		painter.cubicTo((x + (1.1341028f * scale)),(y + (0.6982775f * scale)),(x + (1.2550789f * scale)),(y + (0.43343806f * scale)),(x + (1.3008534f * scale)),(y + (0.16859889f * scale)));
+		painter.cubicTo((x + (1.3106622f * scale)),(y + (0.09993696f * scale)),(x + (1.3172013f * scale)),(y + (0.044353604f * scale)),(x + (1.320471f * scale)),(y + (-0.03411722f * scale)));
+		painter.cubicTo((x + (1.3237408f * scale)),(y + (-0.2139464f * scale)),(x + (1.3041232f * scale)),(y + (-0.30222607f * scale)),(x + (1.2289215f * scale)),(y + (-0.4264719f * scale)));
+		painter.moveTo((x + (0.9477346f * scale)),(y + (1.7739828f * scale)));
+		painter.cubicTo((x + (0.9281169f * scale)),(y + (1.71186f * scale)),(x + (0.90849864f * scale)),(y + (1.6628156f * scale)),(x + (0.90849864f * scale)),(y + (1.6628156f * scale)));
+		painter.cubicTo((x + (0.9052294f * scale)),(y + (1.6628156f * scale)),(x + (0.7679054f * scale)),(y + (1.8459139f * scale)),(x + (0.7090518f * scale)),(y + (1.9276547f * scale)));
+		painter.cubicTo((x + (0.5161445f * scale)),(y + (2.1990333f * scale)),(x + (0.39843827f * scale)),(y + (2.4180977f * scale)),(x + (0.32977578f * scale)),(y + (2.6338923f * scale)));
+		painter.cubicTo((x + (0.2840013f * scale)),(y + (2.7679467f * scale)),(x + (0.26438358f * scale)),(y + (2.8921926f * scale)),(x + (0.25784454f * scale)),(y + (3.0295167f * scale)));
+		painter.cubicTo((x + (0.25784454f * scale)),(y + (3.1047182f * scale)),(x + (0.26111433f * scale)),(y + (3.1504927f * scale)),(x + (0.27419245f * scale)),(y + (3.2060761f * scale)));
+		painter.cubicTo((x + (0.34939402f * scale)),(y + (3.4970722f * scale)),(x + (0.6600081f * scale)),(y + (3.7357545f * scale)),(x + (1.0262054f * scale)),(y + (3.7880688f * scale)));
+		painter.cubicTo((x + (1.0817888f * scale)),(y + (3.7946076f * scale)),(x + (1.2387304f * scale)),(y + (3.7946076f * scale)),(x + (1.3073924f * scale)),(y + (3.7880688f * scale)));
+		painter.cubicTo((x + (1.3760543f * scale)),(y + (3.7782598f * scale)),(x + (1.3695153f * scale)),(y + (3.7815294f * scale)),(x + (1.3662455f * scale)),(y + (3.7521029f * scale)));
+		painter.cubicTo((x + (1.3466283f * scale)),(y + (3.4414887f * scale)),(x + (1.320471f * scale)),(y + (3.2518506f * scale)),(x + (1.2681575f * scale)),(y + (2.9706633f * scale)));
+		painter.cubicTo((x + (1.2485392f * scale)),(y + (2.8529572f * scale)),(x + (1.192956f * scale)),(y + (2.604466f * scale)),(x + (1.1896861f * scale)),(y + (2.601196f * scale)));
+		painter.cubicTo((x + (1.1864164f * scale)),(y + (2.5979269f * scale)),(x + (1.1242939f * scale)),(y + (2.604466f * scale)),(x + (1.0883284f * scale)),(y + (2.614275f * scale)));
+		painter.cubicTo((x + (1.0425533f * scale)),(y + (2.6240838f * scale)),(x + (1.0131269f * scale)),(y + (2.6338923f * scale)),(x + (0.9738914f * scale)),(y + (2.6535103f * scale)));
+		painter.cubicTo((x + (0.76136583f * scale)),(y + (2.7614079f * scale)),(x + (0.69924295f * scale)),(y + (3.0066295f * scale)),(x + (0.8332976f * scale)),(y + (3.2060761f * scale)));
+		painter.cubicTo((x + (0.85618514f * scale)),(y + (3.2387724f * scale)),(x + (0.9150382f * scale)),(y + (3.2976255f * scale)),(x + (0.9510039f * scale)),(y + (3.3205128f * scale)));
+		painter.cubicTo((x + (0.96408254f * scale)),(y + (3.3303218f * scale)),(x + (0.99350905f * scale)),(y + (3.3499393f * scale)),(x + (1.0131269f * scale)),(y + (3.3597484f * scale)));
+		painter.cubicTo((x + (1.0425533f * scale)),(y + (3.3760962f * scale)),(x + (1.0490924f * scale)),(y + (3.3826356f * scale)),(x + (1.055632f * scale)),(y + (3.3957143f * scale)));
+		painter.cubicTo((x + (1.0817888f * scale)),(y + (3.4382195f * scale)),(x + (1.0654408f * scale)),(y + (3.4905329f * scale)),(x + (1.0163965f * scale)),(y + (3.5134206f * scale)));
+		painter.cubicTo((x + (0.99023926f * scale)),(y + (3.5264988f * scale)),(x + (0.9706216f * scale)),(y + (3.5232296f * scale)),(x + (0.9183075f * scale)),(y + (3.4970722f * scale)));
+		painter.cubicTo((x + (0.79079294f * scale)),(y + (3.4349499f * scale)),(x + (0.69597363f * scale)),(y + (3.3499393f * scale)),(x + (0.6273117f * scale)),(y + (3.2453117f * scale)));
+		painter.cubicTo((x + (0.4997966f * scale)),(y + (3.0491343f * scale)),(x + (0.48344818f * scale)),(y + (2.7973735f * scale)),(x + (0.5880763f * scale)),(y + (2.5848482f * scale)));
+		painter.cubicTo((x + (0.67962575f * scale)),(y + (2.4017498f * scale)),(x + (0.84310645f * scale)),(y + (2.2775042f * scale)),(x + (1.0523622f * scale)),(y + (2.2317295f * scale)));
+		painter.cubicTo((x + (1.0719799f * scale)),(y + (2.22519f * scale)),(x + (1.0883284f * scale)),(y + (2.2219207f * scale)),(x + (1.0883284f * scale)),(y + (2.2219207f * scale)));
+		painter.cubicTo((x + (1.0915977f * scale)),(y + (2.2186508f * scale)),(x + (1.0000482f * scale)),(y + (1.9211154f * scale)),(x + (0.9477346f * scale)),(y + (1.7739828f * scale)));
+		painter.moveTo((x + (1.3924028f * scale)),(y + (2.617545f * scale)));
+		painter.cubicTo((x + (1.382594f * scale)),(y + (2.617545f * scale)),(x + (1.3727851f * scale)),(y + (2.614275f * scale)),(x + (1.3695153f * scale)),(y + (2.614275f * scale)));
+		painter.lineTo((x + (1.3597065f * scale)),(y + (2.611005f * scale)));
+		painter.lineTo((x + (1.3760543f * scale)),(y + (2.6796675f * scale)));
+		painter.cubicTo((x + (1.4512559f * scale)),(y + (3.0098987f * scale)),(x + (1.5068393f * scale)),(y + (3.369557f * scale)),(x + (1.526457f * scale)),(y + (3.6736321f * scale)));
+		painter.cubicTo((x + (1.5297267f * scale)),(y + (3.7063284f * scale)),(x + (1.5297267f * scale)),(y + (3.7324853f * scale)),(x + (1.5297267f * scale)),(y + (3.7324853f * scale)));
+		painter.cubicTo((x + (1.5329965f * scale)),(y + (3.7324853f * scale)),(x + (1.5755012f * scale)),(y + (3.7128677f * scale)),(x + (1.5983888f * scale)),(y + (3.6965194f * scale)));
+		painter.cubicTo((x + (1.6539721f * scale)),(y + (3.6638227f * scale)),(x + (1.7062862f * scale)),(y + (3.6147785f * scale)),(x + (1.7487912f * scale)),(y + (3.559195f * scale)));
+		painter.cubicTo((x + (1.8501498f * scale)),(y + (3.4251404f * scale)),(x + (1.8861152f * scale)),(y + (3.25839f * scale)),(x + (1.8468798f * scale)),(y + (3.0883694f * scale)));
+		painter.cubicTo((x + (1.8174533f * scale)),(y + (2.9510455f * scale)),(x + (1.7389826f * scale)),(y + (2.8235304f * scale)),(x + (1.6278152f * scale)),(y + (2.735251f * scale)));
+		painter.cubicTo((x + (1.5591533f * scale)),(y + (2.6829367f * scale)),(x + (1.4676039f * scale)),(y + (2.6371622f * scale)),(x + (1.3924028f * scale)),(y + (2.617545f * scale)));
+	}
+	
+	public static void paintBass(TGPainter painter, int x, int y,float scale){
+		painter.moveTo((x + (0.71937084f * scale)),(y + (0.16147426f * scale)));
+		painter.cubicTo((x + (0.75454587f * scale)),(y + (0.15827677f * scale)),(x + (0.8920496f * scale)),(y + (0.16147426f * scale)),(x + (0.94321334f * scale)),(y + (0.16467176f * scale)));
+		painter.cubicTo((x + (1.3429334f * scale)),(y + (0.20944051f * scale)),(x + (1.6147422f * scale)),(y + (0.4077018f * scale)),(x + (1.7042797f * scale)),(y + (0.72108173f * scale)));
+		painter.cubicTo((x + (1.7266634f * scale)),(y + (0.8074205f * scale)),(x + (1.7362571f * scale)),(y + (0.87137556f * scale)),(x + (1.7330583f * scale)),(y + (0.9800993f * scale)));
+		painter.cubicTo((x + (1.7330583f * scale)),(y + (1.1176031f * scale)),(x + (1.7170696f * scale)),(y + (1.2327217f * scale)),(x + (1.6723021f * scale)),(y + (1.3542367f * scale)));
+		painter.cubicTo((x + (1.5092158f * scale)),(y + (1.8370967f * scale)),(x + (1.0327508f * scale)),(y + (2.236817f * scale)),(x + (0.16296211f * scale)),(y + (2.6205468f * scale)));
+		painter.cubicTo((x + (0.12778586f * scale)),(y + (2.6365356f * scale)),(x + (0.095808364f * scale)),(y + (2.6525242f * scale)),(x + (0.092610866f * scale)),(y + (2.655722f * scale)));
+		painter.cubicTo((x + (0.073424615f * scale)),(y + (2.668513f * scale)),(x + (0.054238364f * scale)),(y + (2.6717105f * scale)),(x + (0.035052113f * scale)),(y + (2.6621182f * scale)));
+		painter.cubicTo((x + (0.019063365f * scale)),(y + (2.655722f * scale)),(x + (0.012667115f * scale)),(y + (2.6493268f * scale)),(x + (0.006272115f * scale)),(y + (2.633338f * scale)));
+		painter.cubicTo((x + (-0.0033216353f * scale)),(y + (2.6173494f * scale)),(x + (-1.2413526E-4f * scale)),(y + (2.6013606f * scale)),(x + (0.006272115f * scale)),(y + (2.5885694f * scale)));
+		painter.cubicTo((x + (0.012667115f * scale)),(y + (2.575778f * scale)),(x + (0.025458366f * scale)),(y + (2.5661855f * scale)),(x + (0.095808364f * scale)),(y + (2.5246143f * scale)));
+		painter.cubicTo((x + (0.3804096f * scale)),(y + (2.355133f * scale)),(x + (0.58826333f * scale)),(y + (2.2048392f * scale)),(x + (0.7641396f * scale)),(y + (2.0513468f * scale)));
+		painter.cubicTo((x + (0.8185009f * scale)),(y + (2.000183f * scale)),(x + (0.9208296f * scale)),(y + (1.8978542f * scale)),(x + (0.96559834f * scale)),(y + (1.8466904f * scale)));
+		painter.cubicTo((x + (1.1606609f * scale)),(y + (1.6196505f * scale)),(x + (1.2629896f * scale)),(y + (1.3990055f * scale)),(x + (1.2981646f * scale)),(y + (1.1431843f * scale)));
+		painter.cubicTo((x + (1.3045596f * scale)),(y + (1.0824268f * scale)),(x + (1.3045596f * scale)),(y + (0.93852806f * scale)),(x + (1.2981646f * scale)),(y + (0.87777054f * scale)));
+		painter.cubicTo((x + (1.2853733f * scale)),(y + (0.7850368f * scale)),(x + (1.2629896f * scale)),(y + (0.69869673f * scale)),(x + (1.2342097f * scale)),(y + (0.6219505f * scale)));
+		painter.cubicTo((x + (1.2118247f * scale)),(y + (0.5707868f * scale)),(x + (1.2054296f * scale)),(y + (0.554798f * scale)),(x + (1.1798471f * scale)),(y + (0.51322675f * scale)));
+		painter.cubicTo((x + (1.0871121f * scale)),(y + (0.35653678f * scale)),(x + (0.94641083f * scale)),(y + (0.27019802f * scale)),(x + (0.7897221f * scale)),(y + (0.27019802f * scale)));
+		painter.cubicTo((x + (0.63622963f * scale)),(y + (0.27019802f * scale)),(x + (0.5083196f * scale)),(y + (0.35653678f * scale)),(x + (0.42517713f * scale)),(y + (0.51962304f * scale)));
+		painter.cubicTo((x + (0.4123871f * scale)),(y + (0.5452043f * scale)),(x + (0.3804096f * scale)),(y + (0.6283468f * scale)),(x + (0.3804096f * scale)),(y + (0.63154423f * scale)));
+		painter.cubicTo((x + (0.3804096f * scale)),(y + (0.6347418f * scale)),(x + (0.39319962f * scale)),(y + (0.63154423f * scale)),(x + (0.40599087f * scale)),(y + (0.63154423f * scale)));
+		painter.cubicTo((x + (0.4795396f * scale)),(y + (0.6283468f * scale)),(x + (0.55948335f * scale)),(y + (0.65712553f * scale)),(x + (0.62024087f * scale)),(y + (0.705093f * scale)));
+		painter.cubicTo((x + (0.7353596f * scale)),(y + (0.80422306f * scale)),(x + (0.7673371f * scale)),(y + (0.9641105f * scale)),(x + (0.6969871f * scale)),(y + (1.1080092f * scale)));
+		painter.cubicTo((x + (0.64902085f * scale)),(y + (1.2135355f * scale)),(x + (0.54669213f * scale)),(y + (1.280688f * scale)),(x + (0.43477085f * scale)),(y + (1.2902818f * scale)));
+		painter.cubicTo((x + (0.27808085f * scale)),(y + (1.2998742f * scale)),(x + (0.12458836f * scale)),(y + (1.1975467f * scale)),(x + (0.073424615f * scale)),(y + (1.0504493f * scale)));
+		painter.cubicTo((x + (0.057435866f * scale)),(y + (1.002483f * scale)),(x + (0.054238364f * scale)),(y + (0.95451677f * scale)),(x + (0.060633365f * scale)),(y + (0.87777054f * scale)));
+		painter.cubicTo((x + (0.08941337f * scale)),(y + (0.55799556f * scale)),(x + (0.29406962f * scale)),(y + (0.28618675f * scale)),(x + (0.5754721f * scale)),(y + (0.19345176f * scale)));
+		painter.cubicTo((x + (0.62343836f * scale)),(y + (0.17746301f * scale)),(x + (0.6714046f * scale)),(y + (0.16786925f * scale)),(x + (0.71937084f * scale)),(y + (0.16147426f * scale)));
+		painter.moveTo((x + (1.9632971f * scale)),(y + (0.462063f * scale)));
+		painter.cubicTo((x + (2.0144608f * scale)),(y + (0.44607428f * scale)),(x + (2.0752184f * scale)),(y + (0.462063f * scale)),(x + (2.1167896f * scale)),(y + (0.5004368f * scale)));
+		painter.cubicTo((x + (2.1455696f * scale)),(y + (0.53241426f * scale)),(x + (2.1615584f * scale)),(y + (0.57398427f * scale)),(x + (2.1615584f * scale)),(y + (0.6155555f * scale)));
+		painter.cubicTo((x + (2.1615584f * scale)),(y + (0.7018943f * scale)),(x + (2.091207f * scale)),(y + (0.7722455f * scale)),(x + (2.0048683f * scale)),(y + (0.7722455f * scale)));
+		painter.cubicTo((x + (1.9153309f * scale)),(y + (0.7722455f * scale)),(x + (1.8449808f * scale)),(y + (0.7018943f * scale)),(x + (1.8449808f * scale)),(y + (0.6155555f * scale)));
+		painter.cubicTo((x + (1.8449808f * scale)),(y + (0.54200673f * scale)),(x + (1.8929471f * scale)),(y + (0.48124927f * scale)),(x + (1.9632971f * scale)),(y + (0.462063f * scale)));
+		painter.moveTo((x + (1.9632971f * scale)),(y + (1.2583042f * scale)));
+		painter.cubicTo((x + (2.0144608f * scale)),(y + (1.2423155f * scale)),(x + (2.0752184f * scale)),(y + (1.2583042f * scale)),(x + (2.1167896f * scale)),(y + (1.2966768f * scale)));
+		painter.cubicTo((x + (2.155162f * scale)),(y + (1.338248f * scale)),(x + (2.171151f * scale)),(y + (1.3958068f * scale)),(x + (2.155162f * scale)),(y + (1.4469718f * scale)));
+		painter.cubicTo((x + (2.1391733f * scale)),(y + (1.5205193f * scale)),(x + (2.0784159f * scale)),(y + (1.5684855f * scale)),(x + (2.0048683f * scale)),(y + (1.5684855f * scale)));
+		painter.cubicTo((x + (1.9153309f * scale)),(y + (1.5684855f * scale)),(x + (1.8449808f * scale)),(y + (1.4981354f * scale)),(x + (1.8449808f * scale)),(y + (1.4117955f * scale)));
+		painter.cubicTo((x + (1.8449808f * scale)),(y + (1.338248f * scale)),(x + (1.8929471f * scale)),(y + (1.2774905f * scale)),(x + (1.9632971f * scale)),(y + (1.2583042f * scale)));
+	}
+	
+	public static void paintAlto(TGPainter painter, int x, int y,float scale){
+		painter.moveTo((x + (0.026545623f * scale)),(y + (0.5470838f * scale)));
+		painter.cubicTo((x + (0.03553187f * scale)),(y + (0.5410925f * scale)),(x + (0.053504374f * scale)),(y + (0.5410925f * scale)),(x + (0.21525937f * scale)),(y + (0.5410925f * scale)));
+		painter.lineTo((x + (0.39498562f * scale)),(y + (0.5410925f * scale)));
+		painter.lineTo((x + (0.40397188f * scale)),(y + (0.55007875f * scale)));
+		painter.cubicTo((x + (0.40996313f * scale)),(y + (0.55607f * scale)),(x + (0.41595438f * scale)),(y + (0.56206f * scale)),(x + (0.41894937f * scale)),(y + (0.5680513f * scale)));
+		painter.cubicTo((x + (0.42494062f * scale)),(y + (0.5800325f * scale)),(x + (0.42494062f * scale)),(y + (0.69086504f * scale)),(x + (0.42494062f * scale)),(y + (2.038815f * scale)));
+		painter.cubicTo((x + (0.42494062f * scale)),(y + (3.386765f * scale)),(x + (0.42494062f * scale)),(y + (3.4975975f * scale)),(x + (0.41894937f * scale)),(y + (3.5095787f * scale)));
+		painter.cubicTo((x + (0.41595438f * scale)),(y + (3.51557f * scale)),(x + (0.40996313f * scale)),(y + (3.52156f * scale)),(x + (0.40397188f * scale)),(y + (3.5275512f * scale)));
+		painter.lineTo((x + (0.39498562f * scale)),(y + (3.5335424f * scale)));
+		painter.lineTo((x + (0.21226312f * scale)),(y + (3.5335424f * scale)));
+		painter.lineTo((x + (0.029541872f * scale)),(y + (3.5335424f * scale)));
+		painter.lineTo((x + (0.020554373f * scale)),(y + (3.5275512f * scale)));
+		painter.cubicTo((x + (0.014564373f * scale)),(y + (3.52156f * scale)),(x + (0.008573122f * scale)),(y + (3.51557f * scale)),(x + (0.0055781226f * scale)),(y + (3.5095787f * scale)));
+		painter.cubicTo((x + (-4.131275E-4f * scale)),(y + (3.4975975f * scale)),(x + (-4.131275E-4f * scale)),(y + (3.386765f * scale)),(x + (-4.131275E-4f * scale)),(y + (2.03582f * scale)));
+		painter.lineTo((x + (0.0025818725f * scale)),(y + (0.5710463f * scale)));
+		painter.lineTo((x + (0.008573122f * scale)),(y + (0.56206f * scale)));
+		painter.cubicTo((x + (0.014564373f * scale)),(y + (0.55607f * scale)),(x + (0.020554373f * scale)),(y + (0.55007875f * scale)),(x + (0.026545623f * scale)),(y + (0.5470838f * scale)));
+		painter.moveTo((x + (0.6016719f * scale)),(y + (0.5470838f * scale)));
+		painter.cubicTo((x + (0.6106581f * scale)),(y + (0.5410925f * scale)),(x + (0.6196444f * scale)),(y + (0.5410925f * scale)),(x + (0.6525944f * scale)),(y + (0.5410925f * scale)));
+		painter.cubicTo((x + (0.6915344f * scale)),(y + (0.5410925f * scale)),(x + (0.6945306f * scale)),(y + (0.5440875f * scale)),(x + (0.7035169f * scale)),(y + (0.55007875f * scale)));
+		painter.cubicTo((x + (0.72748065f * scale)),(y + (0.5680513f * scale)),(x + (0.7244844f * scale)),(y + (0.49915627f * scale)),(x + (0.7244844f * scale)),(y + (1.2779713f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (1.9759114f * scale)));
+		painter.lineTo((x + (0.74245685f * scale)),(y + (1.9609337f * scale)));
+		painter.cubicTo((x + (0.8173431f * scale)),(y + (1.8890426f * scale)),(x + (0.8862381f * scale)),(y + (1.7782114f * scale)),(x + (0.92517936f * scale)),(y + (1.6793613f * scale)));
+		painter.cubicTo((x + (0.9491431f * scale)),(y + (1.6074712f * scale)),(x + (0.9641206f * scale)),(y + (1.5265937f * scale)),(x + (0.9701106f * scale)),(y + (1.4397264f * scale)));
+		painter.cubicTo((x + (0.9701106f * scale)),(y + (1.400785f * scale)),(x + (0.97310686f * scale)),(y + (1.3947937f * scale)),(x + (0.97909814f * scale)),(y + (1.3858075f * scale)));
+		painter.cubicTo((x + (0.9850881f * scale)),(y + (1.3768213f * scale)),(x + (1.0060569f * scale)),(y + (1.36484f * scale)),(x + (1.0210332f * scale)),(y + (1.36484f * scale)));
+		painter.cubicTo((x + (1.0360106f * scale)),(y + (1.36484f * scale)),(x + (1.0539831f * scale)),(y + (1.3738263f * scale)),(x + (1.0629693f * scale)),(y + (1.3828125f * scale)));
+		painter.cubicTo((x + (1.0689607f * scale)),(y + (1.3947937f * scale)),(x + (1.0719569f * scale)),(y + (1.39779f * scale)),(x + (1.0749519f * scale)),(y + (1.4547038f * scale)));
+		painter.cubicTo((x + (1.0839381f * scale)),(y + (1.5775163f * scale)),(x + (1.1258744f * scale)),(y + (1.6793613f * scale)),(x + (1.1947694f * scale)),(y + (1.7512524f * scale)));
+		painter.cubicTo((x + (1.2636644f * scale)),(y + (1.8171525f * scale)),(x + (1.3445419f * scale)),(y + (1.8441112f * scale)),(x + (1.4433919f * scale)),(y + (1.8321288f * scale)));
+		painter.cubicTo((x + (1.5122869f * scale)),(y + (1.8231425f * scale)),(x + (1.5632094f * scale)),(y + (1.802175f * scale)),(x + (1.6021507f * scale)),(y + (1.7632337f * scale)));
+		painter.cubicTo((x + (1.6440868f * scale)),(y + (1.7212975f * scale)),(x + (1.6680493f * scale)),(y + (1.6733713f * scale)),(x + (1.6860231f * scale)),(y + (1.598485f * scale)));
+		painter.cubicTo((x + (1.7039956f * scale)),(y + (1.532585f * scale)),(x + (1.7099856f * scale)),(y + (1.466685f * scale)),(x + (1.7129818f * scale)),(y + (1.3318901f * scale)));
+		painter.cubicTo((x + (1.7189732f * scale)),(y + (0.86759627f * scale)),(x + (1.6321044f * scale)),(y + (0.67888254f * scale)),(x + (1.3894731f * scale)),(y + (0.6459325f * scale)));
+		painter.cubicTo((x + (1.2936194f * scale)),(y + (0.63395125f * scale)),(x + (1.2307143f * scale)),(y + (0.6519238f * scale)),(x + (1.2037556f * scale)),(y + (0.696855f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (0.7088375f * scale)),(x + (1.1977656f * scale)),(y + (0.7118325f * scale)),(x + (1.1977656f * scale)),(y + (0.7357963f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (0.76275504f * scale)),(x + (1.1977656f * scale)),(y + (0.76575124f * scale)),(x + (1.2067518f * scale)),(y + (0.7837238f * scale)));
+		painter.cubicTo((x + (1.2157382f * scale)),(y + (0.8016963f * scale)),(x + (1.2217281f * scale)),(y + (0.81068254f * scale)),(x + (1.2576743f * scale)),(y + (0.84662753f * scale)));
+		painter.cubicTo((x + (1.2936194f * scale)),(y + (0.8795775f * scale)),(x + (1.2996106f * scale)),(y + (0.89156f * scale)),(x + (1.3085968f * scale)),(y + (0.9065363f * scale)));
+		painter.cubicTo((x + (1.3295643f * scale)),(y + (0.95146877f * scale)),(x + (1.3205781f * scale)),(y + (1.0173688f * scale)),(x + (1.2876282f * scale)),(y + (1.0772775f * scale)));
+		painter.cubicTo((x + (1.2756469f * scale)),(y + (1.098245f * scale)),(x + (1.2337106f * scale)),(y + (1.1401813f * scale)),(x + (1.2127419f * scale)),(y + (1.1521637f * scale)));
+		painter.cubicTo((x + (1.1378556f * scale)),(y + (1.197095f * scale)),(x + (1.0509881f * scale)),(y + (1.197095f * scale)),(x + (0.9761019f * scale)),(y + (1.1521637f * scale)));
+		painter.cubicTo((x + (0.9551344f * scale)),(y + (1.1401813f * scale)),(x + (0.9131981f * scale)),(y + (1.098245f * scale)),(x + (0.9012156f * scale)),(y + (1.0772775f * scale)));
+		painter.cubicTo((x + (0.8712619f * scale)),(y + (1.026355f * scale)),(x + (0.8622756f * scale)),(y + (0.9724363f * scale)),(x + (0.8712619f * scale)),(y + (0.90354127f * scale)));
+		painter.cubicTo((x + (0.8862381f * scale)),(y + (0.81667376f * scale)),(x + (0.92517936f * scale)),(y + (0.74178755f * scale)),(x + (0.9880844f * scale)),(y + (0.6758875f * scale)));
+		painter.cubicTo((x + (1.0539831f * scale)),(y + (0.6129825f * scale)),(x + (1.1348606f * scale)),(y + (0.5710463f * scale)),(x + (1.2307143f * scale)),(y + (0.55007875f * scale)));
+		painter.cubicTo((x + (1.2876282f * scale)),(y + (0.53809625f * scale)),(x + (1.3984594f * scale)),(y + (0.53809625f * scale)),(x + (1.4943144f * scale)),(y + (0.55307376f * scale)));
+		painter.cubicTo((x + (1.8477769f * scale)),(y + (0.6039963f * scale)),(x + (2.0364895f * scale)),(y + (0.81966877f * scale)),(x + (2.0634482f * scale)),(y + (1.197095f * scale)));
+		painter.cubicTo((x + (2.0724356f * scale)),(y + (1.3139175f * scale)),(x + (2.0634482f * scale)),(y + (1.39779f * scale)),(x + (2.0364895f * scale)),(y + (1.4846575f * scale)));
+		painter.cubicTo((x + (1.9526169f * scale)),(y + (1.7302837f * scale)),(x + (1.7279594f * scale)),(y + (1.9070151f * scale)),(x + (1.4583694f * scale)),(y + (1.933975f * scale)));
+		painter.cubicTo((x + (1.3715006f * scale)),(y + (1.9429612f * scale)),(x + (1.3475369f * scale)),(y + (1.93697f * scale)),(x + (1.2666606f * scale)),(y + (1.8830512f * scale)));
+		painter.cubicTo((x + (1.2187331f * scale)),(y + (1.8501024f * scale)),(x + (1.1947694f * scale)),(y + (1.83812f * scale)),(x + (1.1708056f * scale)),(y + (1.8321288f * scale)));
+		painter.cubicTo((x + (1.1348606f * scale)),(y + (1.8231425f * scale)),(x + (1.0989156f * scale)),(y + (1.8321288f * scale)),(x + (1.0719569f * scale)),(y + (1.8560925f * scale)));
+		painter.cubicTo((x + (1.0390068f * scale)),(y + (1.8830512f * scale)),(x + (1.0240294f * scale)),(y + (1.939965f * scale)),(x + (1.0240294f * scale)),(y + (2.038815f * scale)));
+		painter.cubicTo((x + (1.0240294f * scale)),(y + (2.137665f * scale)),(x + (1.0390068f * scale)),(y + (2.194579f * scale)),(x + (1.0719569f * scale)),(y + (2.2215376f * scale)));
+		painter.cubicTo((x + (1.0989156f * scale)),(y + (2.2455013f * scale)),(x + (1.1348606f * scale)),(y + (2.2544875f * scale)),(x + (1.1708056f * scale)),(y + (2.2455013f * scale)));
+		painter.cubicTo((x + (1.1947694f * scale)),(y + (2.23951f * scale)),(x + (1.2187331f * scale)),(y + (2.2275276f * scale)),(x + (1.2666606f * scale)),(y + (2.194579f * scale)));
+		painter.cubicTo((x + (1.3475369f * scale)),(y + (2.14066f * scale)),(x + (1.3715006f * scale)),(y + (2.1346688f * scale)),(x + (1.4583694f * scale)),(y + (2.143655f * scale)));
+		painter.cubicTo((x + (1.7279594f * scale)),(y + (2.170615f * scale)),(x + (1.9526169f * scale)),(y + (2.3473463f * scale)),(x + (2.0364895f * scale)),(y + (2.5929725f * scale)));
+		painter.cubicTo((x + (2.0634482f * scale)),(y + (2.6798398f * scale)),(x + (2.0724356f * scale)),(y + (2.7637124f * scale)),(x + (2.0634482f * scale)),(y + (2.8775399f * scale)));
+		painter.cubicTo((x + (2.0334945f * scale)),(y + (3.2909112f * scale)),(x + (1.8178219f * scale)),(y + (3.5035875f * scale)),(x + (1.4044507f * scale)),(y + (3.5335424f * scale)));
+		painter.cubicTo((x + (1.3056006f * scale)),(y + (3.5395336f * scale)),(x + (1.2367057f * scale)),(y + (3.5335424f * scale)),(x + (1.1678107f * scale)),(y + (3.5095787f * scale)));
+		painter.cubicTo((x + (1.0330156f * scale)),(y + (3.4646475f * scale)),(x + (0.92218435f * scale)),(y + (3.3568113f * scale)),(x + (0.88324314f * scale)),(y + (3.2280061f * scale)));
+		painter.cubicTo((x + (0.8592794f * scale)),(y + (3.1381438f * scale)),(x + (0.8652706f * scale)),(y + (3.0662525f * scale)),(x + (0.9012156f * scale)),(y + (3.0003524f * scale)));
+		painter.cubicTo((x + (0.9131981f * scale)),(y + (2.979385f * scale)),(x + (0.9551344f * scale)),(y + (2.9374487f * scale)),(x + (0.9761019f * scale)),(y + (2.9254663f * scale)));
+		painter.cubicTo((x + (1.0509881f * scale)),(y + (2.880535f * scale)),(x + (1.1378556f * scale)),(y + (2.880535f * scale)),(x + (1.2127419f * scale)),(y + (2.9254663f * scale)));
+		painter.cubicTo((x + (1.2337106f * scale)),(y + (2.9374487f * scale)),(x + (1.2756469f * scale)),(y + (2.979385f * scale)),(x + (1.2876282f * scale)),(y + (3.0003524f * scale)));
+		painter.cubicTo((x + (1.3205781f * scale)),(y + (3.0602612f * scale)),(x + (1.3295643f * scale)),(y + (3.126161f * scale)),(x + (1.3085968f * scale)),(y + (3.1710937f * scale)));
+		painter.cubicTo((x + (1.2996106f * scale)),(y + (3.18607f * scale)),(x + (1.2936194f * scale)),(y + (3.1980524f * scale)),(x + (1.2576743f * scale)),(y + (3.2310026f * scale)));
+		painter.cubicTo((x + (1.2217281f * scale)),(y + (3.2669475f * scale)),(x + (1.2157382f * scale)),(y + (3.2759337f * scale)),(x + (1.2067518f * scale)),(y + (3.2939062f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (3.3118787f * scale)),(x + (1.1977656f * scale)),(y + (3.314875f * scale)),(x + (1.1977656f * scale)),(y + (3.3388388f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (3.3657975f * scale)),(x + (1.1977656f * scale)),(y + (3.3687925f * scale)),(x + (1.2037556f * scale)),(y + (3.380775f * scale)));
+		painter.cubicTo((x + (1.2307143f * scale)),(y + (3.4257061f * scale)),(x + (1.2936194f * scale)),(y + (3.4436786f * scale)),(x + (1.3894731f * scale)),(y + (3.4316974f * scale)));
+		painter.cubicTo((x + (1.5362506f * scale)),(y + (3.4107287f * scale)),(x + (1.6261132f * scale)),(y + (3.3328474f * scale)),(x + (1.6710457f * scale)),(y + (3.1770837f * scale)));
+		painter.cubicTo((x + (1.7009994f * scale)),(y + (3.0752387f * scale)),(x + (1.7159768f * scale)),(y + (2.9374487f * scale)),(x + (1.7129818f * scale)),(y + (2.74574f * scale)));
+		painter.cubicTo((x + (1.7099856f * scale)),(y + (2.610945f * scale)),(x + (1.7039956f * scale)),(y + (2.545045f * scale)),(x + (1.6860231f * scale)),(y + (2.47615f * scale)));
+		painter.cubicTo((x + (1.6500769f * scale)),(y + (2.3323689f * scale)),(x + (1.5751907f * scale)),(y + (2.2604775f * scale)),(x + (1.4433919f * scale)),(y + (2.2455013f * scale)));
+		painter.cubicTo((x + (1.3445419f * scale)),(y + (2.2335188f * scale)),(x + (1.2636644f * scale)),(y + (2.2604775f * scale)),(x + (1.1947694f * scale)),(y + (2.3263776f * scale)));
+		painter.cubicTo((x + (1.1258744f * scale)),(y + (2.3982687f * scale)),(x + (1.0839381f * scale)),(y + (2.5001137f * scale)),(x + (1.0749519f * scale)),(y + (2.6229262f * scale)));
+		painter.cubicTo((x + (1.0719569f * scale)),(y + (2.6798398f * scale)),(x + (1.0689607f * scale)),(y + (2.6828363f * scale)),(x + (1.0629693f * scale)),(y + (2.6948175f * scale)));
+		painter.cubicTo((x + (1.0539831f * scale)),(y + (2.7038038f * scale)),(x + (1.0360106f * scale)),(y + (2.71279f * scale)),(x + (1.0210332f * scale)),(y + (2.71279f * scale)));
+		painter.cubicTo((x + (1.0060569f * scale)),(y + (2.71279f * scale)),(x + (0.9850881f * scale)),(y + (2.7008088f * scale)),(x + (0.97909814f * scale)),(y + (2.6918225f * scale)));
+		painter.cubicTo((x + (0.97310686f * scale)),(y + (2.6828363f * scale)),(x + (0.9701106f * scale)),(y + (2.676845f * scale)),(x + (0.9701106f * scale)),(y + (2.6379037f * scale)));
+		painter.cubicTo((x + (0.9641206f * scale)),(y + (2.5180862f * scale)),(x + (0.9401569f * scale)),(y + (2.4282224f * scale)),(x + (0.8922294f * scale)),(y + (2.3233826f * scale)));
+		painter.cubicTo((x + (0.8562844f * scale)),(y + (2.2514913f * scale)),(x + (0.79637563f * scale)),(y + (2.170615f * scale)),(x + (0.74245685f * scale)),(y + (2.1166964f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (2.1017187f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (2.7996588f * scale)));
+		painter.cubicTo((x + (0.7244844f * scale)),(y + (3.5784738f * scale)),(x + (0.72748065f * scale)),(y + (3.5095787f * scale)),(x + (0.7035169f * scale)),(y + (3.5275512f * scale)));
+		painter.cubicTo((x + (0.6945306f * scale)),(y + (3.5335424f * scale)),(x + (0.6915344f * scale)),(y + (3.5335424f * scale)),(x + (0.6495981f * scale)),(y + (3.5335424f * scale)));
+		painter.cubicTo((x + (0.6076619f * scale)),(y + (3.5335424f * scale)),(x + (0.6046669f * scale)),(y + (3.5335424f * scale)),(x + (0.59568065f * scale)),(y + (3.5275512f * scale)));
+		painter.cubicTo((x + (0.5896894f * scale)),(y + (3.52156f * scale)),(x + (0.58369815f * scale)),(y + (3.51557f * scale)),(x + (0.58070314f * scale)),(y + (3.5095787f * scale)));
+		painter.cubicTo((x + (0.57471186f * scale)),(y + (3.4975975f * scale)),(x + (0.57471186f * scale)),(y + (3.386765f * scale)),(x + (0.57471186f * scale)),(y + (2.03582f * scale)));
+		painter.lineTo((x + (0.5777081f * scale)),(y + (0.5710463f * scale)));
+		painter.lineTo((x + (0.58369815f * scale)),(y + (0.56206f * scale)));
+		painter.cubicTo((x + (0.5896894f * scale)),(y + (0.55607f * scale)),(x + (0.59568065f * scale)),(y + (0.55007875f * scale)),(x + (0.6016719f * scale)),(y + (0.5470838f * scale)));
+	}
+	
+	public static void paintTenor(TGPainter painter, int x, int y,float scale){
+		painter.moveTo((x + (0.026545623f * scale)),(y + (-0.45291623f * scale)));
+		painter.cubicTo((x + (0.03553187f * scale)),(y + (-0.45890749f * scale)),(x + (0.053504374f * scale)),(y + (-0.45890749f * scale)),(x + (0.21525937f * scale)),(y + (-0.45890749f * scale)));
+		painter.lineTo((x + (0.39498562f * scale)),(y + (-0.45890749f * scale)));
+		painter.lineTo((x + (0.40397188f * scale)),(y + (-0.44992122f * scale)));
+		painter.cubicTo((x + (0.40996313f * scale)),(y + (-0.44392997f * scale)),(x + (0.41595438f * scale)),(y + (-0.43793997f * scale)),(x + (0.41894937f * scale)),(y + (-0.43194872f * scale)));
+		painter.cubicTo((x + (0.42494062f * scale)),(y + (-0.41996747f * scale)),(x + (0.42494062f * scale)),(y + (-0.30913496f * scale)),(x + (0.42494062f * scale)),(y + (1.038815f * scale)));
+		painter.cubicTo((x + (0.42494062f * scale)),(y + (2.386765f * scale)),(x + (0.42494062f * scale)),(y + (2.4975975f * scale)),(x + (0.41894937f * scale)),(y + (2.5095787f * scale)));
+		painter.cubicTo((x + (0.41595438f * scale)),(y + (2.51557f * scale)),(x + (0.40996313f * scale)),(y + (2.52156f * scale)),(x + (0.40397188f * scale)),(y + (2.5275512f * scale)));
+		painter.lineTo((x + (0.39498562f * scale)),(y + (2.5335424f * scale)));
+		painter.lineTo((x + (0.21226312f * scale)),(y + (2.5335424f * scale)));
+		painter.lineTo((x + (0.029541872f * scale)),(y + (2.5335424f * scale)));
+		painter.lineTo((x + (0.020554373f * scale)),(y + (2.5275512f * scale)));
+		painter.cubicTo((x + (0.014564373f * scale)),(y + (2.52156f * scale)),(x + (0.008573122f * scale)),(y + (2.51557f * scale)),(x + (0.0055781226f * scale)),(y + (2.5095787f * scale)));
+		painter.cubicTo((x + (-4.131275E-4f * scale)),(y + (2.4975975f * scale)),(x + (-4.131275E-4f * scale)),(y + (2.386765f * scale)),(x + (-4.131275E-4f * scale)),(y + (1.03582f * scale)));
+		painter.lineTo((x + (0.0025818725f * scale)),(y + (-0.42895374f * scale)));
+		painter.lineTo((x + (0.008573122f * scale)),(y + (-0.43793997f * scale)));
+		painter.cubicTo((x + (0.014564373f * scale)),(y + (-0.44392997f * scale)),(x + (0.020554373f * scale)),(y + (-0.44992122f * scale)),(x + (0.026545623f * scale)),(y + (-0.45291623f * scale)));
+		painter.moveTo((x + (0.6016719f * scale)),(y + (-0.45291623f * scale)));
+		painter.cubicTo((x + (0.6106581f * scale)),(y + (-0.45890749f * scale)),(x + (0.6196444f * scale)),(y + (-0.45890749f * scale)),(x + (0.6525944f * scale)),(y + (-0.45890749f * scale)));
+		painter.cubicTo((x + (0.6915344f * scale)),(y + (-0.45890749f * scale)),(x + (0.6945306f * scale)),(y + (-0.45591247f * scale)),(x + (0.7035169f * scale)),(y + (-0.44992122f * scale)));
+		painter.cubicTo((x + (0.72748065f * scale)),(y + (-0.43194872f * scale)),(x + (0.7244844f * scale)),(y + (-0.5008437f * scale)),(x + (0.7244844f * scale)),(y + (0.27797127f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (0.9759113f * scale)));
+		painter.lineTo((x + (0.74245685f * scale)),(y + (0.96093374f * scale)));
+		painter.cubicTo((x + (0.8173431f * scale)),(y + (0.88904256f * scale)),(x + (0.8862381f * scale)),(y + (0.7782113f * scale)),(x + (0.92517936f * scale)),(y + (0.6793613f * scale)));
+		painter.cubicTo((x + (0.9491431f * scale)),(y + (0.6074713f * scale)),(x + (0.9641206f * scale)),(y + (0.52659374f * scale)),(x + (0.9701106f * scale)),(y + (0.4397263f * scale)));
+		painter.cubicTo((x + (0.9701106f * scale)),(y + (0.40078503f * scale)),(x + (0.97310686f * scale)),(y + (0.39479375f * scale)),(x + (0.97909814f * scale)),(y + (0.3858075f * scale)));
+		painter.cubicTo((x + (0.9850881f * scale)),(y + (0.37682128f * scale)),(x + (1.0060569f * scale)),(y + (0.36484003f * scale)),(x + (1.0210332f * scale)),(y + (0.36484003f * scale)));
+		painter.cubicTo((x + (1.0360106f * scale)),(y + (0.36484003f * scale)),(x + (1.0539831f * scale)),(y + (0.37382627f * scale)),(x + (1.0629693f * scale)),(y + (0.3828125f * scale)));
+		painter.cubicTo((x + (1.0689607f * scale)),(y + (0.39479375f * scale)),(x + (1.0719569f * scale)),(y + (0.39779f * scale)),(x + (1.0749519f * scale)),(y + (0.45470375f * scale)));
+		painter.cubicTo((x + (1.0839381f * scale)),(y + (0.57751626f * scale)),(x + (1.1258744f * scale)),(y + (0.6793613f * scale)),(x + (1.1947694f * scale)),(y + (0.7512525f * scale)));
+		painter.cubicTo((x + (1.2636644f * scale)),(y + (0.81715256f * scale)),(x + (1.3445419f * scale)),(y + (0.84411126f * scale)),(x + (1.4433919f * scale)),(y + (0.8321288f * scale)));
+		painter.cubicTo((x + (1.5122869f * scale)),(y + (0.82314247f * scale)),(x + (1.5632094f * scale)),(y + (0.802175f * scale)),(x + (1.6021507f * scale)),(y + (0.7632337f * scale)));
+		painter.cubicTo((x + (1.6440868f * scale)),(y + (0.72129756f * scale)),(x + (1.6680493f * scale)),(y + (0.67337126f * scale)),(x + (1.6860231f * scale)),(y + (0.59848505f * scale)));
+		painter.cubicTo((x + (1.7039956f * scale)),(y + (0.532585f * scale)),(x + (1.7099856f * scale)),(y + (0.466685f * scale)),(x + (1.7129818f * scale)),(y + (0.33189005f * scale)));
+		painter.cubicTo((x + (1.7189732f * scale)),(y + (-0.13240373f * scale)),(x + (1.6321044f * scale)),(y + (-0.32111746f * scale)),(x + (1.3894731f * scale)),(y + (-0.35406747f * scale)));
+		painter.cubicTo((x + (1.2936194f * scale)),(y + (-0.36604872f * scale)),(x + (1.2307143f * scale)),(y + (-0.34807622f * scale)),(x + (1.2037556f * scale)),(y + (-0.303145f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (-0.2911625f * scale)),(x + (1.1977656f * scale)),(y + (-0.28816748f * scale)),(x + (1.1977656f * scale)),(y + (-0.26420373f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (-0.23724498f * scale)),(x + (1.1977656f * scale)),(y + (-0.23424873f * scale)),(x + (1.2067518f * scale)),(y + (-0.21627623f * scale)));
+		painter.cubicTo((x + (1.2157382f * scale)),(y + (-0.19830373f * scale)),(x + (1.2217281f * scale)),(y + (-0.18931746f * scale)),(x + (1.2576743f * scale)),(y + (-0.15337247f * scale)));
+		painter.cubicTo((x + (1.2936194f * scale)),(y + (-0.12042248f * scale)),(x + (1.2996106f * scale)),(y + (-0.10843998f * scale)),(x + (1.3085968f * scale)),(y + (-0.09346372f * scale)));
+		painter.cubicTo((x + (1.3295643f * scale)),(y + (-0.048531234f * scale)),(x + (1.3205781f * scale)),(y + (0.017368764f * scale)),(x + (1.2876282f * scale)),(y + (0.07727754f * scale)));
+		painter.cubicTo((x + (1.2756469f * scale)),(y + (0.098245025f * scale)),(x + (1.2337106f * scale)),(y + (0.14018124f * scale)),(x + (1.2127419f * scale)),(y + (0.15216374f * scale)));
+		painter.cubicTo((x + (1.1378556f * scale)),(y + (0.19709504f * scale)),(x + (1.0509881f * scale)),(y + (0.19709504f * scale)),(x + (0.9761019f * scale)),(y + (0.15216374f * scale)));
+		painter.cubicTo((x + (0.9551344f * scale)),(y + (0.14018124f * scale)),(x + (0.9131981f * scale)),(y + (0.098245025f * scale)),(x + (0.9012156f * scale)),(y + (0.07727754f * scale)));
+		painter.cubicTo((x + (0.8712619f * scale)),(y + (0.026355028f * scale)),(x + (0.8622756f * scale)),(y + (-0.027563721f * scale)),(x + (0.8712619f * scale)),(y + (-0.09645873f * scale)));
+		painter.cubicTo((x + (0.8862381f * scale)),(y + (-0.18332621f * scale)),(x + (0.92517936f * scale)),(y + (-0.25821248f * scale)),(x + (0.9880844f * scale)),(y + (-0.32411247f * scale)));
+		painter.cubicTo((x + (1.0539831f * scale)),(y + (-0.3870175f * scale)),(x + (1.1348606f * scale)),(y + (-0.42895374f * scale)),(x + (1.2307143f * scale)),(y + (-0.44992122f * scale)));
+		painter.cubicTo((x + (1.2876282f * scale)),(y + (-0.46190372f * scale)),(x + (1.3984594f * scale)),(y + (-0.46190372f * scale)),(x + (1.4943144f * scale)),(y + (-0.44692624f * scale)));
+		painter.cubicTo((x + (1.8477769f * scale)),(y + (-0.39600372f * scale)),(x + (2.0364895f * scale)),(y + (-0.18033123f * scale)),(x + (2.0634482f * scale)),(y + (0.19709504f * scale)));
+		painter.cubicTo((x + (2.0724356f * scale)),(y + (0.31391752f * scale)),(x + (2.0634482f * scale)),(y + (0.39779f * scale)),(x + (2.0364895f * scale)),(y + (0.48465753f * scale)));
+		painter.cubicTo((x + (1.9526169f * scale)),(y + (0.7302838f * scale)),(x + (1.7279594f * scale)),(y + (0.907015f * scale)),(x + (1.4583694f * scale)),(y + (0.93397504f * scale)));
+		painter.cubicTo((x + (1.3715006f * scale)),(y + (0.9429613f * scale)),(x + (1.3475369f * scale)),(y + (0.93697006f * scale)),(x + (1.2666606f * scale)),(y + (0.8830512f * scale)));
+		painter.cubicTo((x + (1.2187331f * scale)),(y + (0.8501025f * scale)),(x + (1.1947694f * scale)),(y + (0.83812004f * scale)),(x + (1.1708056f * scale)),(y + (0.8321288f * scale)));
+		painter.cubicTo((x + (1.1348606f * scale)),(y + (0.82314247f * scale)),(x + (1.0989156f * scale)),(y + (0.8321288f * scale)),(x + (1.0719569f * scale)),(y + (0.8560925f * scale)));
+		painter.cubicTo((x + (1.0390068f * scale)),(y + (0.8830512f * scale)),(x + (1.0240294f * scale)),(y + (0.93996507f * scale)),(x + (1.0240294f * scale)),(y + (1.038815f * scale)));
+		painter.cubicTo((x + (1.0240294f * scale)),(y + (1.137665f * scale)),(x + (1.0390068f * scale)),(y + (1.1945789f * scale)),(x + (1.0719569f * scale)),(y + (1.2215376f * scale)));
+		painter.cubicTo((x + (1.0989156f * scale)),(y + (1.2455013f * scale)),(x + (1.1348606f * scale)),(y + (1.2544875f * scale)),(x + (1.1708056f * scale)),(y + (1.2455013f * scale)));
+		painter.cubicTo((x + (1.1947694f * scale)),(y + (1.23951f * scale)),(x + (1.2187331f * scale)),(y + (1.2275276f * scale)),(x + (1.2666606f * scale)),(y + (1.1945789f * scale)));
+		painter.cubicTo((x + (1.3475369f * scale)),(y + (1.14066f * scale)),(x + (1.3715006f * scale)),(y + (1.1346688f * scale)),(x + (1.4583694f * scale)),(y + (1.1436551f * scale)));
+		painter.cubicTo((x + (1.7279594f * scale)),(y + (1.170615f * scale)),(x + (1.9526169f * scale)),(y + (1.3473463f * scale)),(x + (2.0364895f * scale)),(y + (1.5929725f * scale)));
+		painter.cubicTo((x + (2.0634482f * scale)),(y + (1.6798398f * scale)),(x + (2.0724356f * scale)),(y + (1.7637124f * scale)),(x + (2.0634482f * scale)),(y + (1.8775399f * scale)));
+		painter.cubicTo((x + (2.0334945f * scale)),(y + (2.2909112f * scale)),(x + (1.8178219f * scale)),(y + (2.5035875f * scale)),(x + (1.4044507f * scale)),(y + (2.5335424f * scale)));
+		painter.cubicTo((x + (1.3056006f * scale)),(y + (2.5395336f * scale)),(x + (1.2367057f * scale)),(y + (2.5335424f * scale)),(x + (1.1678107f * scale)),(y + (2.5095787f * scale)));
+		painter.cubicTo((x + (1.0330156f * scale)),(y + (2.4646475f * scale)),(x + (0.92218435f * scale)),(y + (2.3568113f * scale)),(x + (0.88324314f * scale)),(y + (2.2280061f * scale)));
+		painter.cubicTo((x + (0.8592794f * scale)),(y + (2.1381438f * scale)),(x + (0.8652706f * scale)),(y + (2.0662525f * scale)),(x + (0.9012156f * scale)),(y + (2.0003524f * scale)));
+		painter.cubicTo((x + (0.9131981f * scale)),(y + (1.9793849f * scale)),(x + (0.9551344f * scale)),(y + (1.9374487f * scale)),(x + (0.9761019f * scale)),(y + (1.9254663f * scale)));
+		painter.cubicTo((x + (1.0509881f * scale)),(y + (1.8805349f * scale)),(x + (1.1378556f * scale)),(y + (1.8805349f * scale)),(x + (1.2127419f * scale)),(y + (1.9254663f * scale)));
+		painter.cubicTo((x + (1.2337106f * scale)),(y + (1.9374487f * scale)),(x + (1.2756469f * scale)),(y + (1.9793849f * scale)),(x + (1.2876282f * scale)),(y + (2.0003524f * scale)));
+		painter.cubicTo((x + (1.3205781f * scale)),(y + (2.0602612f * scale)),(x + (1.3295643f * scale)),(y + (2.126161f * scale)),(x + (1.3085968f * scale)),(y + (2.1710937f * scale)));
+		painter.cubicTo((x + (1.2996106f * scale)),(y + (2.18607f * scale)),(x + (1.2936194f * scale)),(y + (2.1980524f * scale)),(x + (1.2576743f * scale)),(y + (2.2310026f * scale)));
+		painter.cubicTo((x + (1.2217281f * scale)),(y + (2.2669475f * scale)),(x + (1.2157382f * scale)),(y + (2.2759337f * scale)),(x + (1.2067518f * scale)),(y + (2.2939062f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (2.3118787f * scale)),(x + (1.1977656f * scale)),(y + (2.314875f * scale)),(x + (1.1977656f * scale)),(y + (2.3388388f * scale)));
+		painter.cubicTo((x + (1.1977656f * scale)),(y + (2.3657975f * scale)),(x + (1.1977656f * scale)),(y + (2.3687925f * scale)),(x + (1.2037556f * scale)),(y + (2.380775f * scale)));
+		painter.cubicTo((x + (1.2307143f * scale)),(y + (2.4257061f * scale)),(x + (1.2936194f * scale)),(y + (2.4436786f * scale)),(x + (1.3894731f * scale)),(y + (2.4316974f * scale)));
+		painter.cubicTo((x + (1.5362506f * scale)),(y + (2.4107287f * scale)),(x + (1.6261132f * scale)),(y + (2.3328474f * scale)),(x + (1.6710457f * scale)),(y + (2.1770837f * scale)));
+		painter.cubicTo((x + (1.7009994f * scale)),(y + (2.0752387f * scale)),(x + (1.7159768f * scale)),(y + (1.9374487f * scale)),(x + (1.7129818f * scale)),(y + (1.7457399f * scale)));
+		painter.cubicTo((x + (1.7099856f * scale)),(y + (1.610945f * scale)),(x + (1.7039956f * scale)),(y + (1.5450449f * scale)),(x + (1.6860231f * scale)),(y + (1.47615f * scale)));
+		painter.cubicTo((x + (1.6500769f * scale)),(y + (1.3323689f * scale)),(x + (1.5751907f * scale)),(y + (1.2604775f * scale)),(x + (1.4433919f * scale)),(y + (1.2455013f * scale)));
+		painter.cubicTo((x + (1.3445419f * scale)),(y + (1.2335188f * scale)),(x + (1.2636644f * scale)),(y + (1.2604775f * scale)),(x + (1.1947694f * scale)),(y + (1.3263776f * scale)));
+		painter.cubicTo((x + (1.1258744f * scale)),(y + (1.3982687f * scale)),(x + (1.0839381f * scale)),(y + (1.5001137f * scale)),(x + (1.0749519f * scale)),(y + (1.6229262f * scale)));
+		painter.cubicTo((x + (1.0719569f * scale)),(y + (1.6798398f * scale)),(x + (1.0689607f * scale)),(y + (1.6828363f * scale)),(x + (1.0629693f * scale)),(y + (1.6948175f * scale)));
+		painter.cubicTo((x + (1.0539831f * scale)),(y + (1.7038038f * scale)),(x + (1.0360106f * scale)),(y + (1.71279f * scale)),(x + (1.0210332f * scale)),(y + (1.71279f * scale)));
+		painter.cubicTo((x + (1.0060569f * scale)),(y + (1.71279f * scale)),(x + (0.9850881f * scale)),(y + (1.7008088f * scale)),(x + (0.97909814f * scale)),(y + (1.6918225f * scale)));
+		painter.cubicTo((x + (0.97310686f * scale)),(y + (1.6828363f * scale)),(x + (0.9701106f * scale)),(y + (1.6768451f * scale)),(x + (0.9701106f * scale)),(y + (1.6379037f * scale)));
+		painter.cubicTo((x + (0.9641206f * scale)),(y + (1.5180862f * scale)),(x + (0.9401569f * scale)),(y + (1.4282224f * scale)),(x + (0.8922294f * scale)),(y + (1.3233826f * scale)));
+		painter.cubicTo((x + (0.8562844f * scale)),(y + (1.2514913f * scale)),(x + (0.79637563f * scale)),(y + (1.170615f * scale)),(x + (0.74245685f * scale)),(y + (1.1166964f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (1.1017187f * scale)));
+		painter.lineTo((x + (0.7244844f * scale)),(y + (1.7996588f * scale)));
+		painter.cubicTo((x + (0.7244844f * scale)),(y + (2.5784738f * scale)),(x + (0.72748065f * scale)),(y + (2.5095787f * scale)),(x + (0.7035169f * scale)),(y + (2.5275512f * scale)));
+		painter.cubicTo((x + (0.6945306f * scale)),(y + (2.5335424f * scale)),(x + (0.6915344f * scale)),(y + (2.5335424f * scale)),(x + (0.6495981f * scale)),(y + (2.5335424f * scale)));
+		painter.cubicTo((x + (0.6076619f * scale)),(y + (2.5335424f * scale)),(x + (0.6046669f * scale)),(y + (2.5335424f * scale)),(x + (0.59568065f * scale)),(y + (2.5275512f * scale)));
+		painter.cubicTo((x + (0.5896894f * scale)),(y + (2.52156f * scale)),(x + (0.58369815f * scale)),(y + (2.51557f * scale)),(x + (0.58070314f * scale)),(y + (2.5095787f * scale)));
+		painter.cubicTo((x + (0.57471186f * scale)),(y + (2.4975975f * scale)),(x + (0.57471186f * scale)),(y + (2.386765f * scale)),(x + (0.57471186f * scale)),(y + (1.03582f * scale)));
+		painter.lineTo((x + (0.5777081f * scale)),(y + (-0.42895374f * scale)));
+		painter.lineTo((x + (0.58369815f * scale)),(y + (-0.43793997f * scale)));
+		painter.cubicTo((x + (0.5896894f * scale)),(y + (-0.44392997f * scale)),(x + (0.59568065f * scale)),(y + (-0.44992122f * scale)),(x + (0.6016719f * scale)),(y + (-0.45291623f * scale)));
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGKeySignaturePainter.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGKeySignaturePainter.java
new file mode 100644
index 0000000..5436c48
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGKeySignaturePainter.java
@@ -0,0 +1,144 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGKeySignaturePainter {
+	
+	public static void paintSharp(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.4330491f * scale)),(y + (-0.7961011300329119f * scale)));
+		painter.cubicTo((x + (0.44892004f * scale)),(y + (-0.8051702223718167f * scale)),(x + (0.47386006f * scale)),(y + (-0.7983684030594305f * scale)),(x + (0.48292914f * scale)),(y + (-0.7779629465192557f * scale)));
+		painter.cubicTo((x + (0.48746368f * scale)),(y + (-0.7688938558101654f * scale)),(x + (0.48746368f * scale)),(y + (-0.7620920382440091f * scale)),(x + (0.48746368f * scale)),(y + (-0.6033829182386399f * scale)));
+		painter.cubicTo((x + (0.48746368f * scale)),(y + (-0.5104247212409974f * scale)),(x + (0.48746368f * scale)),(y + (-0.435604739189148f * scale)),(x + (0.48973095f * scale)),(y + (-0.435604739189148f * scale)));
+		painter.cubicTo((x + (0.48973095f * scale)),(y + (-0.435604739189148f * scale)),(x + (0.51013637f * scale)),(y + (-0.4446738243103028f * scale)),(x + (0.5350764f * scale)),(y + (-0.45374290943145756f * scale)));
+		painter.cubicTo((x + (0.5872237f * scale)),(y + (-0.47414835095405583f * scale)),(x + (0.5940255f * scale)),(y + (-0.4764156520366669f * scale)),(x + (0.6076291f * scale)),(y + (-0.46507926583290105f * scale)));
+		painter.cubicTo((x + (0.62350005f * scale)),(y + (-0.45374290943145756f * scale)),(x + (0.62350005f * scale)),(y + (-0.45147563815116887f * scale)),(x + (0.62350005f * scale)),(y + (-0.36078472733497624f * scale)));
+		painter.cubicTo((x + (0.62350005f * scale)),(y + (-0.2836974740028382f * scale)),(x + (0.62350005f * scale)),(y + (-0.2768956303596497f * scale)),(x + (0.6189655f * scale)),(y + (-0.2700937867164612f * scale)));
+		painter.cubicTo((x + (0.6166982f * scale)),(y + (-0.26555924415588383f * scale)),(x + (0.61216366f * scale)),(y + (-0.26102470159530644f * scale)),(x + (0.6098964f * scale)),(y + (-0.25875746011734013f * scale)));
+		painter.cubicTo((x + (0.6053619f * scale)),(y + (-0.25649015903472905f * scale)),(x + (0.5781546f * scale)),(y + (-0.24288653135299687f * scale)),(x + (0.54641277f * scale)),(y + (-0.23155020475387578f * scale)));
+		painter.lineTo((x + (0.48973095f * scale)),(y + (-0.20661019086837773f * scale)));
+		painter.lineTo((x + (0.48746368f * scale)),(y + (-0.022961068153381392f * scale)));
+		painter.cubicTo((x + (0.48746368f * scale)),(y + (0.0767989873886108f * scale)),(x + (0.48746368f * scale)),(y + (0.16068805456161495f * scale)),(x + (0.48973095f * scale)),(y + (0.16068805456161495f * scale)));
+		painter.cubicTo((x + (0.48973095f * scale)),(y + (0.16068805456161495f * scale)),(x + (0.51013637f * scale)),(y + (0.15161896944046016f * scale)),(x + (0.5350764f * scale)),(y + (0.14254988431930538f * scale)));
+		painter.cubicTo((x + (0.5872237f * scale)),(y + (0.12214435338973995f * scale)),(x + (0.5940255f * scale)),(y + (0.11987711191177364f * scale)),(x + (0.6076291f * scale)),(y + (0.13121343851089473f * scale)));
+		painter.cubicTo((x + (0.62350005f * scale)),(y + (0.14254988431930538f * scale)),(x + (0.62350005f * scale)),(y + (0.14481712579727168f * scale)),(x + (0.62350005f * scale)),(y + (0.2355080366134643f * scale)));
+		painter.cubicTo((x + (0.62350005f * scale)),(y + (0.3125954389572143f * scale)),(x + (0.62350005f * scale)),(y + (0.31939716339111324f * scale)),(x + (0.6189655f * scale)),(y + (0.3261990070343017f * scale)));
+		painter.cubicTo((x + (0.6166982f * scale)),(y + (0.3307336091995239f * scale)),(x + (0.61216366f * scale)),(y + (0.3352680921554565f * scale)),(x + (0.6098964f * scale)),(y + (0.3375353336334228f * scale)));
+		painter.cubicTo((x + (0.6053619f * scale)),(y + (0.33980269432067867f * scale)),(x + (0.5781546f * scale)),(y + (0.35340626239776607f * scale)),(x + (0.54641277f * scale)),(y + (0.36474258899688716f * scale)));
+		painter.lineTo((x + (0.48973095f * scale)),(y + (0.3896826028823852f * scale)));
+		painter.lineTo((x + (0.48746368f * scale)),(y + (0.5801335096359252f * scale)));
+		painter.cubicTo((x + (0.48746368f * scale)),(y + (0.7524463653564453f * scale)),(x + (0.4851964f * scale)),(y + (0.7728516578674316f * scale)),(x + (0.48292914f * scale)),(y + (0.7796536207199096f * scale)));
+		painter.cubicTo((x + (0.4670582f * scale)),(y + (0.8068609952926635f * scale)),(x + (0.42851457f * scale)),(y + (0.8068609952926635f * scale)),(x + (0.4126437f * scale)),(y + (0.7796536207199096f * scale)));
+		painter.cubicTo((x + (0.41037643f * scale)),(y + (0.7728516578674316f * scale)),(x + (0.40810916f * scale)),(y + (0.754713487625122f * scale)),(x + (0.40810916f * scale)),(y + (0.5960044384002685f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (0.42142446041107173f * scale)));
+		painter.lineTo((x + (0.31061637f * scale)),(y + (0.4599680423736572f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (0.4985117435455322f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (0.6821606874465942f * scale)));
+		painter.cubicTo((x + (0.21539094f * scale)),(y + (0.8771464347839355f * scale)),(x + (0.21539094f * scale)),(y + (0.8726117134094238f * scale)),(x + (0.20405458f * scale)),(y + (0.8839481592178344f * scale)));
+		painter.cubicTo((x + (0.19952002f * scale)),(y + (0.8907500028610229f * scale)),(x + (0.18364911f * scale)),(y + (0.8975517272949218f * scale)),(x + (0.1768473f * scale)),(y + (0.8975517272949218f * scale)));
+		painter.cubicTo((x + (0.1677782f * scale)),(y + (0.8975517272949218f * scale)),(x + (0.15190728f * scale)),(y + (0.8907500028610229f * scale)),(x + (0.14737274f * scale)),(y + (0.8839481592178344f * scale)));
+		painter.cubicTo((x + (0.13603638f * scale)),(y + (0.8726117134094238f * scale)),(x + (0.13603638f * scale)),(y + (0.8771464347839355f * scale)),(x + (0.13603638f * scale)),(y + (0.7002989768981933f * scale)));
+		painter.cubicTo((x + (0.13603638f * scale)),(y + (0.6073408842086792f * scale)),(x + (0.13603638f * scale)),(y + (0.532520842552185f * scale)),(x + (0.1337691f * scale)),(y + (0.532520842552185f * scale)));
+		painter.cubicTo((x + (0.1337691f * scale)),(y + (0.532520842552185f * scale)),(x + (0.113363646f * scale)),(y + (0.5415899276733398f * scale)),(x + (0.08842365f * scale)),(y + (0.5506590127944946f * scale)));
+		painter.cubicTo((x + (0.036276367f * scale)),(y + (0.5710644245147705f * scale)),(x + (0.029474549f * scale)),(y + (0.5733317852020263f * scale)),(x + (0.01587091f * scale)),(y + (0.5619953393936157f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (0.5506590127944946f * scale)),(x + (0.0f * scale)),(y + (0.5483916521072387f * scale)),(x + (0.0f * scale)),(y + (0.4577008008956909f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (0.3806135177612304f * scale)),(x + (0.0f * scale)),(y + (0.3738117933273315f * scale)),(x + (0.004534546f * scale)),(y + (0.36700983047485347f * scale)));
+		painter.cubicTo((x + (0.0068018185f * scale)),(y + (0.36247534751892085f * scale)),(x + (0.011336365f * scale)),(y + (0.3579407453536987f * scale)),(x + (0.013603637f * scale)),(y + (0.3556735038757324f * scale)));
+		painter.cubicTo((x + (0.018138183f * scale)),(y + (0.35340626239776607f * scale)),(x + (0.04534546f * scale)),(y + (0.33980269432067867f * scale)),(x + (0.07708728f * scale)),(y + (0.328466248512268f * scale)));
+		painter.lineTo((x + (0.13603638f * scale)),(y + (0.30352623462677f * scale)));
+		painter.lineTo((x + (0.13603638f * scale)),(y + (0.11987711191177364f * scale)));
+		painter.cubicTo((x + (0.13603638f * scale)),(y + (0.020117175579071f * scale)),(x + (0.13603638f * scale)),(y + (-0.06377195119857793f * scale)),(x + (0.1337691f * scale)),(y + (-0.06377195119857793f * scale)));
+		painter.cubicTo((x + (0.1337691f * scale)),(y + (-0.06377195119857793f * scale)),(x + (0.113363646f * scale)),(y + (-0.054702806472778365f * scale)),(x + (0.08842365f * scale)),(y + (-0.04563372135162358f * scale)));
+		painter.cubicTo((x + (0.036276367f * scale)),(y + (-0.0252283096313477f * scale)),(x + (0.029474549f * scale)),(y + (-0.022961068153381392f * scale)),(x + (0.01587091f * scale)),(y + (-0.034297394752502486f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (-0.04563372135162358f * scale)),(x + (0.0f * scale)),(y + (-0.047901022434234664f * scale)),(x + (0.0f * scale)),(y + (-0.13859199285507207f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (-0.21567927598953252f * scale)),(x + (0.0f * scale)),(y + (-0.222481119632721f * scale)),(x + (0.004534546f * scale)),(y + (-0.2292829036712647f * scale)));
+		painter.cubicTo((x + (0.0068018185f * scale)),(y + (-0.23381744623184209f * scale)),(x + (0.011336365f * scale)),(y + (-0.23835204839706425f * scale)),(x + (0.013603637f * scale)),(y + (-0.2406192302703858f * scale)));
+		painter.cubicTo((x + (0.018138183f * scale)),(y + (-0.24288653135299687f * scale)),(x + (0.04534546f * scale)),(y + (-0.25649015903472905f * scale)),(x + (0.07708728f * scale)),(y + (-0.2678265452384949f * scale)));
+		painter.lineTo((x + (0.13603638f * scale)),(y + (-0.29276655912399296f * scale)));
+		painter.lineTo((x + (0.13603638f * scale)),(y + (-0.483217465877533f * scale)));
+		painter.cubicTo((x + (0.13603638f * scale)),(y + (-0.6555302023887635f * scale)),(x + (0.13830365f * scale)),(y + (-0.6759356662631035f * scale)),(x + (0.14057092f * scale)),(y + (-0.6827374875545502f * scale)));
+		painter.cubicTo((x + (0.15644182f * scale)),(y + (-0.7099447578191758f * scale)),(x + (0.19498548f * scale)),(y + (-0.7099447578191758f * scale)),(x + (0.2108564f * scale)),(y + (-0.6827374875545502f * scale)));
+		painter.cubicTo((x + (0.21312366f * scale)),(y + (-0.6759356662631035f * scale)),(x + (0.21539094f * scale)),(y + (-0.6577974885702134f * scale)),(x + (0.21539094f * scale)),(y + (-0.4990883648395539f * scale)));
+		painter.lineTo((x + (0.21765819f * scale)),(y + (-0.3245083570480347f * scale)));
+		painter.lineTo((x + (0.31288365f * scale)),(y + (-0.36305199861526494f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (-0.4015956103801728f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (-0.5852447479963303f * scale)));
+		painter.cubicTo((x + (0.40810916f * scale)),(y + (-0.7575574919581414f * scale)),(x + (0.40810916f * scale)),(y + (-0.7688938558101654f * scale)),(x + (0.4126437f * scale)),(y + (-0.7779629465192557f * scale)));
+		painter.cubicTo((x + (0.41717824f * scale)),(y + (-0.7870320381596685f * scale)),(x + (0.4217128f * scale)),(y + (-0.7915665844455362f * scale)),(x + (0.4330491f * scale)),(y + (-0.7961011300329119f * scale)));
+		painter.moveTo((x + (0.40810916f * scale)),(y + (0.008780729770660356f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (-0.1748683333396912f * scale)));
+		painter.lineTo((x + (0.31061637f * scale)),(y + (-0.13632469177246098f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (-0.09778105020523076f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (0.08813531398773189f * scale)));
+		painter.lineTo((x + (0.21539094f * scale)),(y + (0.27178437709808345f * scale)));
+		painter.lineTo((x + (0.22219275f * scale)),(y + (0.26951713562011714f * scale)));
+		painter.cubicTo((x + (0.22672729f * scale)),(y + (0.26724989414215083f * scale)),(x + (0.26980546f * scale)),(y + (0.24911172389984126f * scale)),(x + (0.3196855f * scale)),(y + (0.2309735536575317f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (0.19469715356826778f * scale)));
+		painter.lineTo((x + (0.40810916f * scale)),(y + (0.008780729770660356f * scale)));
+	}
+	
+	public static void paintFlat(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.036081146f * scale)),(y + (-1.2279010191746056f * scale)));
+		painter.cubicTo((x + (0.066563375f * scale)),(y + (-1.2334432420507073f * scale)),(x + (0.11644338f * scale)),(y + (-1.2279010191746056f * scale)),(x + (0.13584116f * scale)),(y + (-1.2140454626828432f * scale)));
+		painter.cubicTo((x + (0.14138338f * scale)),(y + (-1.2112743496149778f * scale)),(x + (0.14138338f * scale)),(y + (-1.1807921263575554f * scale)),(x + (0.13307005f * scale)),(y + (-0.729100923538208f * scale)));
+		painter.cubicTo((x + (0.12752782f * scale)),(y + (-0.4658453869819641f * scale)),(x + (0.12475671f * scale)),(y + (-0.24969867944717405f * scale)),(x + (0.12475671f * scale)),(y + (-0.24969867944717405f * scale)));
+		painter.cubicTo((x + (0.12475671f * scale)),(y + (-0.24692759990692137f * scale)),(x + (0.13584116f * scale)),(y + (-0.2524698185920715f * scale)),(x + (0.1469256f * scale)),(y + (-0.26078311681747435f * scale)));
+		painter.cubicTo((x + (0.20511894f * scale)),(y + (-0.29957870721817015f * scale)),(x + (0.27716786f * scale)),(y + (-0.32174758195877073f * scale)),(x + (0.34921673f * scale)),(y + (-0.3272898006439209f * scale)));
+		painter.cubicTo((x + (0.42403674f * scale)),(y + (-0.3300609993934631f * scale)),(x + (0.4850012f * scale)),(y + (-0.30789206504821776f * scale)),(x + (0.53765225f * scale)),(y + (-0.2552408981323242f * scale)));
+		painter.cubicTo((x + (0.5903034f * scale)),(y + (-0.2053608703613281f * scale)),(x + (0.6180146f * scale)),(y + (-0.13885424613952635f * scale)),(x + (0.6235568f * scale)),(y + (-0.06680534362792967f * scale)));
+		painter.cubicTo((x + (0.6263279f * scale)),(y + (-0.014154295921325666f * scale)),(x + (0.61524343f * scale)),(y + (0.03295471191406252f * scale)),(x + (0.5903034f * scale)),(y + (0.08283462047576906f * scale)));
+		painter.cubicTo((x + (0.55150783f * scale)),(y + (0.1576546621322632f * scale)),(x + (0.49608564f * scale)),(y + (0.21030582904815676f * scale)),(x + (0.32981896f * scale)),(y + (0.32392134189605715f * scale)));
+		painter.cubicTo((x + (0.2245167f * scale)),(y + (0.3959703636169434f * scale)),(x + (0.19680561f * scale)),(y + (0.41813923835754396f * scale)),(x + (0.16355227f * scale)),(y + (0.4569347095489502f * scale)));
+		painter.cubicTo((x + (0.1469256f * scale)),(y + (0.4735613059997559f * scale)),(x + (0.12752782f * scale)),(y + (0.49295916080474855f * scale)),(x + (0.12198559f * scale)),(y + (0.495730299949646f * scale)));
+		painter.cubicTo((x + (0.0970456f * scale)),(y + (0.5123568964004517f * scale)),(x + (0.06933448f * scale)),(y + (0.5095858764648438f * scale)),(x + (0.04716559f * scale)),(y + (0.4901880216598511f * scale)));
+		painter.cubicTo((x + (0.04162337f * scale)),(y + (0.48187472343444826f * scale)),(x + (0.036081146f * scale)),(y + (0.4735613059997559f * scale)),(x + (0.033310037f * scale)),(y + (0.4652481269836426f * scale)));
+		painter.cubicTo((x + (0.030538924f * scale)),(y + (0.4597058486938477f * scale)),(x + (0.024996702f * scale)),(y + (0.16319682121276857f * scale)),(x + (0.016683366f * scale)),(y + (-0.3051209259033203f * scale)));
+		painter.cubicTo((x + (0.0083700325f * scale)),(y + (-0.7235587048530578f * scale)),(x + (0.00282781f * scale)),(y + (-1.097658793926239f * scale)),(x + (5.669861E-5f * scale)),(y + (-1.1392254564166069f * scale)));
+		painter.lineTo((x + (5.669861E-5f * scale)),(y + (-1.2112743496149778f * scale)));
+		painter.lineTo((x + (0.011141145f * scale)),(y + (-1.2168165738880634f * scale)));
+		painter.cubicTo((x + (0.016683366f * scale)),(y + (-1.2195876850932836f * scale)),(x + (0.027767813f * scale)),(y + (-1.225129907503724f * scale)),(x + (0.036081146f * scale)),(y + (-1.2279010191746056f * scale)));
+		painter.moveTo((x + (0.32981896f * scale)),(y + (-0.21090314865112303f * scale)));
+		painter.cubicTo((x + (0.31042117f * scale)),(y + (-0.22198770523071287f * scale)),(x + (0.27993897f * scale)),(y + (-0.22475872516632078f * scale)),(x + (0.25499895f * scale)),(y + (-0.21644542694091795f * scale)));
+		painter.cubicTo((x + (0.20511894f * scale)),(y + (-0.2025898504257202f * scale)),(x + (0.16355227f * scale)),(y + (-0.15825198173522947f * scale)),(x + (0.1469256f * scale)),(y + (-0.10005865573883055f * scale)));
+		painter.cubicTo((x + (0.14138338f * scale)),(y + (-0.07234762191772459f * scale)),(x + (0.13584116f * scale)),(y + (0.16596796035766603f * scale)),(x + (0.14138338f * scale)),(y + (0.2574147176742554f * scale)));
+		painter.cubicTo((x + (0.14415449f * scale)),(y + (0.2962103080749512f * scale)),(x + (0.14415449f * scale)),(y + (0.33223464012146f * scale)),(x + (0.1469256f * scale)),(y + (0.3405479383468628f * scale)));
+		painter.lineTo((x + (0.14969671f * scale)),(y + (0.35163249492645265f * scale)));
+		painter.lineTo((x + (0.19126338f * scale)),(y + (0.3156080436706543f * scale)));
+		painter.cubicTo((x + (0.24945672f * scale)),(y + (0.2657280158996582f * scale)),(x + (0.30765006f * scale)),(y + (0.2075346899032593f * scale)),(x + (0.33536118f * scale)),(y + (0.1687390995025635f * scale)));
+		painter.cubicTo((x + (0.36307228f * scale)),(y + (0.12994362831115724f * scale)),(x + (0.39078343f * scale)),(y + (0.07729246139526369f * scale)),(x + (0.40186784f * scale)),(y + (0.03849699020385744f * scale)));
+		painter.cubicTo((x + (0.41849452f * scale)),(y + (-0.02523873329162596f * scale)),(x + (0.41018116f * scale)),(y + (-0.09728751659393309f * scale)),(x + (0.38524118f * scale)),(y + (-0.1527098226547241f * scale)));
+		painter.cubicTo((x + (0.37138563f * scale)),(y + (-0.18042085647583006f * scale)),(x + (0.35475895f * scale)),(y + (-0.19981859207153319f * scale)),(x + (0.32981896f * scale)),(y + (-0.21090314865112303f * scale)));
+	}
+	
+	public static void paintNatural(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.038880464f * scale)),(y + (-0.99784582760185f * scale)));
+		painter.cubicTo((x + (0.061049357f * scale)),(y + (-1.0033880504779518f * scale)),(x + (0.11092936f * scale)),(y + (-0.99784582760185f * scale)),(x + (0.13032715f * scale)),(y + (-0.9839902706444263f * scale)));
+		painter.cubicTo((x + (0.13309824f * scale)),(y + (-0.9812191594392061f * scale)),(x + (0.13309824f * scale)),(y + (-0.9396524876356125f * scale)),(x + (0.13032715f * scale)),(y + (-0.7429035902023315f * scale)));
+		painter.cubicTo((x + (0.12755603f * scale)),(y + (-0.6098902225494385f * scale)),(x + (0.12755603f * scale)),(y + (-0.5018168985843658f * scale)),(x + (0.12755603f * scale)),(y + (-0.5018168985843658f * scale)));
+		painter.cubicTo((x + (0.12755603f * scale)),(y + (-0.49904578924179077f * scale)),(x + (0.1968338f * scale)),(y + (-0.5101302564144135f * scale)),(x + (0.28273827f * scale)),(y + (-0.523985743522644f * scale)));
+		painter.cubicTo((x + (0.37141383f * scale)),(y + (-0.5406124293804169f * scale)),(x + (0.4406916f * scale)),(y + (-0.5489257574081421f * scale)),(x + (0.44346273f * scale)),(y + (-0.5489257574081421f * scale)));
+		painter.cubicTo((x + (0.4573183f * scale)),(y + (-0.546154648065567f * scale)),(x + (0.4684027f * scale)),(y + (-0.5350702106952667f * scale)),(x + (0.47671604f * scale)),(y + (-0.521214634180069f * scale)));
+		painter.lineTo((x + (0.48225826f * scale)),(y + (-0.5101302564144135f * scale)));
+		painter.lineTo((x + (0.49057162f * scale)),(y + (0.29072093963623047f * scale)));
+		painter.cubicTo((x + (0.49888495f * scale)),(y + (0.9336187839508057f * scale)),(x + (0.50165606f * scale)),(y + (1.0915722846984863f * scale)),(x + (0.49888495f * scale)),(y + (1.0915722846984863f * scale)));
+		painter.cubicTo((x + (0.49611384f * scale)),(y + (1.0943431854248047f * scale)),(x + (0.48780048f * scale)),(y + (1.0971143245697021f * scale)),(x + (0.47948715f * scale)),(y + (1.0998854637145996f * scale)));
+		painter.cubicTo((x + (0.4573183f * scale)),(y + (1.108198881149292f * scale)),(x + (0.4129805f * scale)),(y + (1.108198881149292f * scale)),(x + (0.3908116f * scale)),(y + (1.0998854637145996f * scale)));
+		painter.cubicTo((x + (0.3824983f * scale)),(y + (1.0971143245697021f * scale)),(x + (0.37418494f * scale)),(y + (1.0943431854248047f * scale)),(x + (0.37141383f * scale)),(y + (1.0915722846984863f * scale)));
+		painter.cubicTo((x + (0.36864272f * scale)),(y + (1.0888011455535889f * scale)),(x + (0.36864272f * scale)),(y + (1.0472345352172852f * scale)),(x + (0.37141383f * scale)),(y + (0.8504854440689087f * scale)));
+		painter.cubicTo((x + (0.37418494f * scale)),(y + (0.7174720764160156f * scale)),(x + (0.37418494f * scale)),(y + (0.6093987226486206f * scale)),(x + (0.37418494f * scale)),(y + (0.6093987226486206f * scale)));
+		painter.cubicTo((x + (0.37418494f * scale)),(y + (0.6066277027130127f * scale)),(x + (0.30490717f * scale)),(y + (0.617712140083313f * scale)),(x + (0.21900271f * scale)),(y + (0.6315675973892212f * scale)));
+		painter.cubicTo((x + (0.13032715f * scale)),(y + (0.6481943130493164f * scale)),(x + (0.061049357f * scale)),(y + (0.6565077304840088f * scale)),(x + (0.058278244f * scale)),(y + (0.6565077304840088f * scale)));
+		painter.cubicTo((x + (0.044422686f * scale)),(y + (0.6537365913391113f * scale)),(x + (0.033338238f * scale)),(y + (0.6426520347595215f * scale)),(x + (0.025024906f * scale)),(y + (0.6287965774536133f * scale)));
+		painter.lineTo((x + (0.019482683f * scale)),(y + (0.6149410009384155f * scale)));
+		painter.lineTo((x + (0.011169349f * scale)),(y + (-0.08060795068740845f * scale)));
+		painter.cubicTo((x + (0.005627127f * scale)),(y + (-0.46302133798599243f * scale)),(x + (0.002856015f * scale)),(y + (-0.8232658207416534f * scale)),(x + (8.490361E-5f * scale)),(y + (-0.8814591467380524f * scale)));
+		painter.lineTo((x + (8.490361E-5f * scale)),(y + (-0.9839902706444263f * scale)));
+		painter.lineTo((x + (0.01394046f * scale)),(y + (-0.9895324930548668f * scale)));
+		painter.cubicTo((x + (0.022253795f * scale)),(y + (-0.9923036047257483f * scale)),(x + (0.033338238f * scale)),(y + (-0.9950747163966298f * scale)),(x + (0.038880464f * scale)),(y + (-0.99784582760185f * scale)));
+		painter.moveTo((x + (0.38526937f * scale)),(y + (-0.22193467617034912f * scale)));
+		painter.cubicTo((x + (0.38526937f * scale)),(y + (-0.25241684913635254f * scale)),(x + (0.38526937f * scale)),(y + (-0.26073020696640015f * scale)),(x + (0.3824983f * scale)),(y + (-0.26073020696640015f * scale)));
+		painter.cubicTo((x + (0.37141383f * scale)),(y + (-0.26073020696640015f * scale)),(x + (0.12478492f * scale)),(y + (-0.21916353702545166f * scale)),(x + (0.12478492f * scale)),(y + (-0.2163923978805542f * scale)));
+		painter.cubicTo((x + (0.12201381f * scale)),(y + (-0.2163923978805542f * scale)),(x + (0.11647158f * scale)),(y + (0.3655409812927246f * scale)),(x + (0.11647158f * scale)),(y + (0.36831212043762207f * scale)));
+		painter.cubicTo((x + (0.1192427f * scale)),(y + (0.36831212043762207f * scale)),(x + (0.37418494f * scale)),(y + (0.3267453908920288f * scale)),(x + (0.37695605f * scale)),(y + (0.32397425174713135f * scale)));
+		painter.cubicTo((x + (0.37695605f * scale)),(y + (0.32397425174713135f * scale)),(x + (0.38526937f * scale)),(y + (-0.09446346759796143f * scale)),(x + (0.38526937f * scale)),(y + (-0.22193467617034912f * scale)));
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGNotePainter.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGNotePainter.java
new file mode 100644
index 0000000..d60f119
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGNotePainter.java
@@ -0,0 +1,47 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGNotePainter {
+	
+	public static void paintFooter(TGPainter painter, float x, float y,int dir,float scale){
+		painter.moveTo(( x + (0.64375f * scale) ),( y + ((0.00625f * scale) * dir) ));
+		painter.cubicTo(( x + (0.659375f * scale) ),( y + ((0.0f * scale) * dir) ),( x + (0.69375f * scale) ),( y + ((0.00625f * scale) * dir) ),( x + (0.70625f * scale) ),( y + ((0.0125f * scale) * dir) ));
+		painter.cubicTo(( x + (0.725f * scale) ),( y + ((0.025f * scale) * dir) ),( x + (0.73125f * scale) ),( y + ((0.03125f * scale) * dir) ),( x + (0.75f * scale) ),( y + ((0.065625f * scale) * dir) ));
+		painter.cubicTo(( x + (0.815625f * scale) ),( y + ((0.1875f * scale) * dir) ),( x + (0.86875f * scale) ),( y + ((0.3375f * scale) * dir) ),( x + (0.890625f * scale) ),( y + ((0.4625f * scale) * dir) ));
+		painter.cubicTo(( x + (0.934375f * scale) ),( y + ((0.70937496f * scale) * dir) ),( x + (0.903125f * scale) ),( y + ((0.890625f * scale) * dir) ),( x + (0.778125f * scale) ),( y + ((1.096875f * scale) * dir) ));
+		painter.cubicTo(( x + (0.721875f * scale) ),( y + ((1.19375f * scale) * dir) ),( x + (0.653125f * scale) ),( y + ((1.28125f * scale) * dir) ),( x + (0.5f * scale) ),( y + ((1.453125f * scale) * dir) ));
+		painter.cubicTo(( x + (0.340625f * scale) ),( y + ((1.6375f * scale) * dir) ),( x + (0.290625f * scale) ),( y + ((1.703125f * scale) * dir) ),( x + (0.228125f * scale) ),( y + ((1.790625f * scale) * dir) ));
+		painter.cubicTo(( x + (0.165625f * scale) ),( y + ((1.8875f * scale) * dir) ),( x + (0.121875f * scale) ),( y + ((1.978125f * scale) * dir) ),( x + (0.09375f * scale) ),( y + ((2.06875f * scale) * dir) ));
+		painter.cubicTo(( x + (0.078125f * scale) ),( y + ((2.125f * scale) * dir) ),( x + (0.065625f * scale) ),( y + ((2.209375f * scale) * dir) ),( x + (0.065625f * scale) ),( y + ((2.25625f * scale) * dir) ));
+		painter.lineTo(( x + (0.065625f * scale) ),( y + ((2.271875f * scale) * dir) ));
+		painter.lineTo(( x + (0.034375f * scale) ),( y + ((2.271875f * scale) * dir) ));
+		painter.lineTo(( x + (0.0f * scale) ),( y + ((2.271875f * scale) * dir) ));
+		painter.lineTo(( x + (0.0f * scale) ),( y + ((1.88125f * scale) * dir) ));
+		painter.lineTo(( x + (0.0f * scale) ),( y + ((1.490625f * scale) * dir) ));
+		painter.lineTo(( x + (0.034375f * scale) ),( y + ((1.490625f * scale) * dir) ));
+		painter.lineTo(( x + (0.06875f * scale) ),( y + ((1.490625f * scale) * dir) ));
+		painter.lineTo(( x + (0.15f * scale) ),( y + ((1.434375f * scale) * dir) ));
+		painter.cubicTo(( x + (0.38125f * scale) ),( y + ((1.28125f * scale) * dir) ),( x + (0.521875f * scale) ),( y + ((1.15625f * scale) * dir) ),( x + (0.621875f * scale) ),( y + ((1.021875f * scale) * dir) ));
+		painter.cubicTo(( x + (0.74375f * scale) ),( y + ((0.85625f * scale) * dir) ),( x + (0.778125f * scale) ),( y + ((0.71874994f * scale) * dir) ),( x + (0.74375f * scale) ),( y + ((0.5124999f * scale) * dir) ));
+		painter.cubicTo(( x + (0.721875f * scale) ),( y + ((0.38125f * scale) * dir) ),( x + (0.66875f * scale) ),( y + ((0.246875f * scale) * dir) ),( x + (0.6f * scale) ),( y + ((0.128125f * scale) * dir) ));
+		painter.cubicTo(( x + (0.584375f * scale) ),( y + ((0.10625f * scale) * dir) ),( x + (0.58125f * scale) ),( y + ((0.096875f * scale) * dir) ),( x + (0.58125f * scale) ),( y + ((0.0875f * scale) * dir) ));
+		painter.cubicTo(( x + (0.58125f * scale) ),( y + ((0.05f * scale) * dir) ),( x + (0.60625f * scale) ),( y + ((0.01875f * scale) * dir) ),( x + (0.64375f * scale) ),( y + ((0.00625f * scale) * dir) ));
+	}
+	
+	public static void paintNote(TGPainter painter, float x, float y,float scale){
+		painter.moveTo( x ,( y + (0.66f * scale) ));
+		painter.cubicTo( x,( y + (0.83f * scale) ),( x + (0.166f * scale) ),( y + (1.0f * scale) ),( x + (0.33f * scale) ),( y + (1.0f * scale) ));
+		painter.cubicTo(( x + (0.83f * scale) ),( y + (1.0f * scale) ),( x + (1.33f * scale) ),( y + (0.66f * scale) ),( x + (1.33f * scale) ),( y + (0.33f * scale) ));
+		painter.cubicTo(( x + (1.33f * scale) ),( y + (0.166f * scale) ),( x + (1.16f * scale) ), y ,( x + (1.0f * scale) ), y );
+		painter.cubicTo(( x + (0.5f * scale) ), y , x ,( y + (0.33f * scale) ), x ,( y + (0.66f * scale) ));
+	}
+	
+	public static void paintHarmonic(TGPainter painter, float x, float y,float scale){
+		painter.moveTo(x ,(y + (0.5f * scale)));
+		painter.lineTo((x + (0.665f * scale )) ,(y + (1.0f * scale)));
+		painter.lineTo((x + (1.33f * scale)), (y + (0.5f*scale)));
+		painter.lineTo((x + (0.665f * scale)) ,y);
+		painter.lineTo(x ,(y + (0.5f * scale) ));
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGSilencePainter.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGSilencePainter.java
new file mode 100644
index 0000000..17f965d
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGSilencePainter.java
@@ -0,0 +1,254 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGSilencePainter {
+	
+	public static void paintWhole(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
+		painter.lineTo((x + (0.1170311f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (4.3769493f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (8.6602745f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (8.730488f * scale)),(y + (0.046812057f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (0.11703062f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (1.8256791f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (3.5343275f * scale)));
+		painter.lineTo((x + (8.730488f * scale)),(y + (3.6045456f * scale)));
+		painter.lineTo((x + (8.6602745f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (4.3769493f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (0.1170311f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (0.04681015f * scale)),(y + (3.6045456f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (3.5343275f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (1.8256791f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (0.11703062f * scale)));
+		painter.lineTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
+	}
+	
+	public static void paintHalf(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
+		painter.lineTo((x + (0.1170311f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (4.3769493f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (8.6602745f * scale)),(y + (0.0f * scale)));
+		painter.lineTo((x + (8.730488f * scale)),(y + (0.046812057f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (0.11703062f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (1.8256791f * scale)));
+		painter.lineTo((x + (8.777302f * scale)),(y + (3.5343275f * scale)));
+		painter.lineTo((x + (8.730488f * scale)),(y + (3.6045456f * scale)));
+		painter.lineTo((x + (8.6602745f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (4.3769493f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (0.1170311f * scale)),(y + (3.6513581f * scale)));
+		painter.lineTo((x + (0.04681015f * scale)),(y + (3.6045456f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (3.5343275f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (1.8256791f * scale)));
+		painter.lineTo((x + (0.0f * scale)),(y + (0.11703062f * scale)));
+		painter.lineTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
+	}
+	
+	public static void paintQuarter(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (2.1034088f * scale)),(y + (0.047267675f * scale)));
+		painter.cubicTo((x + (2.1979485f * scale)),(y + (0.0f * scale)),(x + (2.2924728f * scale)),(y + (0.0f * scale)),(x + (2.387024f * scale)),(y + (0.023633957f * scale)));
+		painter.cubicTo((x + (2.4579277f * scale)),(y + (0.070901394f * scale)),(x + (6.121151f * scale)),(y + (4.4195156f * scale)),(x + (6.2156906f * scale)),(y + (4.6085863f * scale)));
+		painter.cubicTo((x + (6.38113f * scale)),(y + (4.915825f * scale)),(x + (6.333866f * scale)),(y + (5.2230635f * scale)),(x + (6.0975113f * scale)),(y + (5.601205f * scale)));
+		painter.cubicTo((x + (5.9084587f * scale)),(y + (5.8611765f * scale)),(x + (5.5303154f * scale)),(y + (6.239316f * scale)),(x + (4.821308f * scale)),(y + (6.830161f * scale)));
+		painter.cubicTo((x + (4.4667816f * scale)),(y + (7.1137667f * scale)),(x + (4.1359215f * scale)),(y + (7.4210052f * scale)),(x + (4.065014f * scale)),(y + (7.491905f * scale)));
+		painter.cubicTo((x + (3.3323631f * scale)),(y + (8.271823f * scale)),(x + (3.166935f * scale)),(y + (9.453509f * scale)),(x + (3.5923424f * scale)),(y + (10.351589f * scale)));
+		painter.cubicTo((x + (3.73415f * scale)),(y + (10.65883f * scale)),(x + (3.8050346f * scale)),(y + (10.729736f * scale)),(x + (4.6322327f * scale)),(y + (11.675077f * scale)));
+		painter.cubicTo((x + (6.1447945f * scale)),(y + (13.447618f * scale)),(x + (6.0738907f * scale)),(y + (13.376713f * scale)),(x + (6.0738907f * scale)),(y + (13.518524f * scale)));
+		painter.cubicTo((x + (6.0738907f * scale)),(y + (13.66031f * scale)),(x + (5.9320793f * scale)),(y + (13.802121f * scale)),(x + (5.790291f * scale)),(y + (13.825765f * scale)));
+		painter.cubicTo((x + (5.6721115f * scale)),(y + (13.825765f * scale)),(x + (5.5775757f * scale)),(y + (13.778487f * scale)),(x + (5.4121437f * scale)),(y + (13.6130495f * scale)));
+		painter.cubicTo((x + (4.821308f * scale)),(y + (13.02221f * scale)),(x + (3.4741745f * scale)),(y + (12.5968f * scale)),(x + (2.7415237f * scale)),(y + (12.762231f * scale)));
+		painter.cubicTo((x + (2.387024f * scale)),(y + (12.833136f * scale)),(x + (2.1979485f * scale)),(y + (12.974947f * scale)),(x + (2.0325203f * scale)),(y + (13.305807f * scale)));
+		painter.cubicTo((x + (1.9379692f * scale)),(y + (13.542143f * scale)),(x + (1.8670654f * scale)),(y + (13.825765f * scale)),(x + (1.8434448f * scale)),(y + (14.203887f * scale)));
+		painter.cubicTo((x + (1.8198013f * scale)),(y + (14.7238455f * scale)),(x + (1.9143524f * scale)),(y + (15.267421f * scale)),(x + (2.0797806f * scale)),(y + (15.787354f * scale)));
+		painter.cubicTo((x + (2.1979485f * scale)),(y + (16.118237f * scale)),(x + (2.2688522f * scale)),(y + (16.307312f * scale)),(x + (2.4342842f * scale)),(y + (16.543648f * scale)));
+		painter.cubicTo((x + (2.5760956f * scale)),(y + (16.73272f * scale)),(x + (2.5760956f * scale)),(y + (16.803608f * scale)),(x + (2.4579277f * scale)),(y + (16.874508f * scale)));
+		painter.cubicTo((x + (2.3633804f * scale)),(y + (16.921787f * scale)),(x + (2.3161163f * scale)),(y + (16.898151f * scale)),(x + (2.1034088f * scale)),(y + (16.638172f * scale)));
+		painter.cubicTo((x + (1.2526054f * scale)),(y + (15.551019f * scale)),(x + (0.47267532f * scale)),(y + (13.991195f * scale)),(x + (0.21271515f * scale)),(y + (12.833136f * scale)));
+		painter.cubicTo((x + (0.0f * scale)),(y + (12.005961f * scale)),(x + (0.09454727f * scale)),(y + (11.438742f * scale)),(x + (0.4254074f * scale)),(y + (11.202407f * scale)));
+		painter.cubicTo((x + (0.590847f * scale)),(y + (11.107882f * scale)),(x + (0.75629425f * scale)),(y + (11.084239f * scale)),(x + (1.1107941f * scale)),(y + (11.084239f * scale)));
+		painter.cubicTo((x + (1.7961845f * scale)),(y + (11.131502f * scale)),(x + (2.7651672f * scale)),(y + (11.3914795f * scale)),(x + (3.7105103f * scale)),(y + (11.793245f * scale)));
+		painter.lineTo((x + (4.01775f * scale)),(y + (11.935056f * scale)));
+		painter.lineTo((x + (2.7178802f * scale)),(y + (10.398851f * scale)));
+		painter.cubicTo((x + (0.73265076f * scale)),(y + (8.059115f * scale)),(x + (0.66174316f * scale)),(y + (7.9645834f * scale)),(x + (0.590847f * scale)),(y + (7.8227787f * scale)));
+		painter.cubicTo((x + (0.5199585f * scale)),(y + (7.63371f * scale)),(x + (0.496315f * scale)),(y + (7.4446383f * scale)),(x + (0.5672188f * scale)),(y + (7.2319345f * scale)));
+		painter.cubicTo((x + (0.68538666f * scale)),(y + (6.853795f * scale)),(x + (1.0162506f * scale)),(y + (6.4756536f * scale)),(x + (2.0088768f * scale)),(y + (5.648472f * scale)));
+		painter.cubicTo((x + (2.3633804f * scale)),(y + (5.3648667f * scale)),(x + (2.67062f * scale)),(y + (5.0812616f * scale)),(x + (2.7415237f * scale)),(y + (5.033994f * scale)));
+		painter.cubicTo((x + (3.2851028f * scale)),(y + (4.443149f * scale)),(x + (3.5450783f * scale)),(y + (3.6159673f * scale)),(x + (3.450531f * scale)),(y + (2.8360534f * scale)));
+		painter.cubicTo((x + (3.4032707f * scale)),(y + (2.5760818f * scale)),(x + (3.2851028f * scale)),(y + (2.1743064f * scale)),(x + (3.1432915f * scale)),(y + (1.9616027f * scale)));
+		painter.cubicTo((x + (3.0723915f * scale)),(y + (1.8434343f * scale)),(x + (2.7887878f * scale)),(y + (1.4889283f * scale)),(x + (2.505188f * scale)),(y + (1.1344206f * scale)));
+		painter.cubicTo((x + (2.2215881f * scale)),(y + (0.8035486f * scale)),(x + (1.9616127f * scale)),(y + (0.49630952f * scale)),(x + (1.9379692f * scale)),(y + (0.44904137f * scale)));
+		painter.cubicTo((x + (1.8670654f * scale)),(y + (0.30723906f * scale)),(x + (1.9379692f * scale)),(y + (0.11816859f * scale)),(x + (2.1034088f * scale)),(y + (0.047267675f * scale)));
+	}
+	
+	public static void paintEighth(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (1.6779978f * scale)),(y + (0.070901394f * scale)));
+		painter.cubicTo((x + (2.1979408f * scale)),(y + (0.0f * scale)),(x + (2.6469831f * scale)),(y + (0.14180231f * scale)),(x + (3.0014887f * scale)),(y + (0.47267532f * scale)));
+		painter.cubicTo((x + (3.214193f * scale)),(y + (0.7090125f * scale)),(x + (3.3087273f * scale)),(y + (0.89808273f * scale)),(x + (3.450531f * scale)),(y + (1.4652932f * scale)));
+		painter.cubicTo((x + (3.5214317f * scale)),(y + (1.7252648f * scale)),(x + (3.5923345f * scale)),(y + (1.9852359f * scale)),(x + (3.6159685f * scale)),(y + (2.0325048f * scale)));
+		painter.cubicTo((x + (3.7105024f * scale)),(y + (2.2452075f * scale)),(x + (3.8759398f * scale)),(y + (2.3870108f * scale)),(x + (4.0886426f * scale)),(y + (2.4106443f * scale)));
+		painter.cubicTo((x + (4.183178f * scale)),(y + (2.4106443f * scale)),(x + (4.2304454f * scale)),(y + (2.4106443f * scale)),(x + (4.348614f * scale)),(y + (2.3397439f * scale)));
+		painter.cubicTo((x + (4.6558537f * scale)),(y + (2.19794f * scale)),(x + (5.388501f * scale)),(y + (1.3234913f * scale)),(x + (5.6721063f * scale)),(y + (0.7799146f * scale)));
+		painter.cubicTo((x + (5.7430067f * scale)),(y + (0.6144779f * scale)),(x + (5.861175f * scale)),(y + (0.5435767f * scale)),(x + (5.979345f * scale)),(y + (0.5435767f * scale)));
+		painter.cubicTo((x + (6.073879f * scale)),(y + (0.5435767f * scale)),(x + (6.192049f * scale)),(y + (0.6144779f * scale)),(x + (6.239316f * scale)),(y + (0.6853788f * scale)));
+		painter.cubicTo((x + (6.26295f * scale)),(y + (0.7326472f * scale)),(x + (6.026612f * scale)),(y + (1.5598292f * scale)),(x + (4.7740216f * scale)),(y + (5.7430067f * scale)));
+		painter.cubicTo((x + (3.970474f * scale)),(y + (8.484522f * scale)),(x + (3.2850938f * scale)),(y + (10.776992f * scale)),(x + (3.2614603f * scale)),(y + (10.800634f * scale)));
+		painter.cubicTo((x + (3.2614603f * scale)),(y + (10.824278f * scale)),(x + (3.1669261f * scale)),(y + (10.895159f * scale)),(x + (3.0723903f * scale)),(y + (10.918801f * scale)));
+		painter.cubicTo((x + (2.9305882f * scale)),(y + (10.989707f * scale)),(x + (2.9069548f * scale)),(y + (10.989707f * scale)),(x + (2.7178838f * scale)),(y + (10.989707f * scale)));
+		painter.cubicTo((x + (2.528813f * scale)),(y + (10.989707f * scale)),(x + (2.481546f * scale)),(y + (10.989707f * scale)),(x + (2.3397446f * scale)),(y + (10.942445f * scale)));
+		painter.cubicTo((x + (2.2688415f * scale)),(y + (10.895159f * scale)),(x + (2.1743073f * scale)),(y + (10.847896f * scale)),(x + (2.1743073f * scale)),(y + (10.824278f * scale)));
+		painter.cubicTo((x + (2.1270401f * scale)),(y + (10.800634f * scale)),(x + (2.292475f * scale)),(y + (10.375227f * scale)),(x + (3.4977982f * scale)),(y + (6.94833f * scale)));
+		painter.cubicTo((x + (4.254079f * scale)),(y + (4.844924f * scale)),(x + (4.8685584f * scale)),(y + (3.0960243f * scale)),(x + (4.8449225f * scale)),(y + (3.0960243f * scale)));
+		painter.lineTo((x + (4.4431496f * scale)),(y + (3.2141926f * scale)));
+		painter.cubicTo((x + (3.5923345f * scale)),(y + (3.4977977f * scale)),(x + (3.0723903f * scale)),(y + (3.5923336f * scale)),(x + (2.4342787f * scale)),(y + (3.5923336f * scale)));
+		painter.cubicTo((x + (1.914336f * scale)),(y + (3.5923336f * scale)),(x + (1.7725322f * scale)),(y + (3.5687f * scale)),(x + (1.394393f * scale)),(y + (3.3796299f * scale)));
+		painter.cubicTo((x + (0.3545066f * scale)),(y + (2.88332f * scale)),(x + (0.0f * scale)),(y + (1.6779974f * scale)),(x + (0.5908443f * scale)),(y + (0.7799146f * scale)));
+		painter.cubicTo((x + (0.85081583f * scale)),(y + (0.4254074f * scale)),(x + (1.2525895f * scale)),(y + (0.14180231f * scale)),(x + (1.6779978f * scale)),(y + (0.070901394f * scale)));
+	}
+	
+	public static void paintSixteenth(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (3.5214243f * scale)),(y + (0.070901394f * scale)));
+		painter.cubicTo((x + (4.041381f * scale)),(y + (0.0f * scale)),(x + (4.490409f * scale)),(y + (0.14180231f * scale)),(x + (4.8449125f * scale)),(y + (0.4726758f * scale)));
+		painter.cubicTo((x + (5.0576286f * scale)),(y + (0.7090137f * scale)),(x + (5.152153f * scale)),(y + (0.89808273f * scale)),(x + (5.2939644f * scale)),(y + (1.4652946f * scale)));
+		painter.cubicTo((x + (5.36487f * scale)),(y + (1.725266f * scale)),(x + (5.435775f * scale)),(y + (1.9852376f * scale)),(x + (5.4593954f * scale)),(y + (2.032505f * scale)));
+		painter.cubicTo((x + (5.5775614f * scale)),(y + (2.3397436f * scale)),(x + (5.9084463f * scale)),(y + (2.4815469f * scale)),(x + (6.144781f * scale)),(y + (2.363377f * scale)));
+		painter.cubicTo((x + (6.4520226f * scale)),(y + (2.2215748f * scale)),(x + (7.090123f * scale)),(y + (1.394392f * scale)),(x + (7.421006f * scale)),(y + (0.7326474f * scale)));
+		painter.cubicTo((x + (7.4682703f * scale)),(y + (0.6144779f * scale)),(x + (7.6100817f * scale)),(y + (0.54357696f * scale)),(x + (7.704606f * scale)),(y + (0.54357696f * scale)));
+		painter.cubicTo((x + (7.7991533f * scale)),(y + (0.54357696f * scale)),(x + (7.917321f * scale)),(y + (0.6144779f * scale)),(x + (7.9645834f * scale)),(y + (0.6853788f * scale)));
+		painter.cubicTo((x + (7.988206f * scale)),(y + (0.7326474f * scale)),(x + (7.6100817f * scale)),(y + (2.150673f * scale)),(x + (5.861184f * scale)),(y + (8.6972275f * scale)));
+		painter.cubicTo((x + (4.6794825f * scale)),(y + (13.069472f * scale)),(x + (3.710497f * scale)),(y + (16.685432f * scale)),(x + (3.6868773f * scale)),(y + (16.709076f * scale)));
+		painter.cubicTo((x + (3.6632347f * scale)),(y + (16.73272f * scale)),(x + (3.592329f * scale)),(y + (16.803608f * scale)),(x + (3.4978046f * scale)),(y + (16.827246f * scale)));
+		painter.cubicTo((x + (3.3559942f * scale)),(y + (16.89815f * scale)),(x + (3.3323498f * scale)),(y + (16.89815f * scale)),(x + (3.143302f * scale)),(y + (16.89815f * scale)));
+		painter.cubicTo((x + (2.9542284f * scale)),(y + (16.89815f * scale)),(x + (2.9069443f * scale)),(y + (16.89815f * scale)),(x + (2.7651548f * scale)),(y + (16.850887f * scale)));
+		painter.cubicTo((x + (2.69425f * scale)),(y + (16.803608f * scale)),(x + (2.5997238f * scale)),(y + (16.75634f * scale)),(x + (2.5997238f * scale)),(y + (16.73272f * scale)));
+		painter.cubicTo((x + (2.5524387f * scale)),(y + (16.709076f * scale)),(x + (2.69425f * scale)),(y + (16.283669f * scale)),(x + (3.7341404f * scale)),(y + (12.856779f * scale)));
+		painter.cubicTo((x + (4.372241f * scale)),(y + (10.753368f * scale)),(x + (4.8921986f * scale)),(y + (9.028101f * scale)),(x + (4.8921986f * scale)),(y + (9.004459f * scale)));
+		painter.cubicTo((x + (4.868556f * scale)),(y + (9.004459f * scale)),(x + (4.6794825f * scale)),(y + (9.051743f * scale)),(x + (4.46679f * scale)),(y + (9.122626f * scale)));
+		painter.cubicTo((x + (3.6159725f * scale)),(y + (9.406247f * scale)),(x + (3.0723963f * scale)),(y + (9.500772f * scale)),(x + (2.43427f * scale)),(y + (9.500772f * scale)));
+		painter.cubicTo((x + (1.9143381f * scale)),(y + (9.500772f * scale)),(x + (1.7725258f * scale)),(y + (9.477153f * scale)),(x + (1.3943825f * scale)),(y + (9.28808f * scale)));
+		painter.cubicTo((x + (0.3545103f * scale)),(y + (8.791764f * scale)),(x + (0.0f * scale)),(y + (7.586442f * scale)),(x + (0.59084797f * scale)),(y + (6.6883574f * scale)));
+		painter.cubicTo((x + (1.1580448f * scale)),(y + (5.8611765f * scale)),(x + (2.3397465f * scale)),(y + (5.7193727f * scale)),(x + (3.0014915f * scale)),(y + (6.357486f * scale)));
+		painter.cubicTo((x + (3.2378254f * scale)),(y + (6.6174574f * scale)),(x + (3.3323498f * scale)),(y + (6.830161f * scale)),(x + (3.4741611f * scale)),(y + (7.4446383f * scale)));
+		painter.cubicTo((x + (3.5450668f * scale)),(y + (7.799144f * scale)),(x + (3.6395912f * scale)),(y + (8.059116f * scale)),(x + (3.7341404f * scale)),(y + (8.153648f * scale)));
+		painter.cubicTo((x + (3.805046f * scale)),(y + (8.224551f * scale)),(x + (3.9468327f * scale)),(y + (8.295452f * scale)),(x + (4.088643f * scale)),(y + (8.31909f * scale)));
+		painter.cubicTo((x + (4.1831684f * scale)),(y + (8.31909f * scale)),(x + (4.2304544f * scale)),(y + (8.31909f * scale)),(x + (4.3486233f * scale)),(y + (8.248187f * scale)));
+		painter.cubicTo((x + (4.608577f * scale)),(y + (8.130019f * scale)),(x + (5.152153f * scale)),(y + (7.515539f * scale)),(x + (5.4593954f * scale)),(y + (6.995596f * scale)));
+		painter.cubicTo((x + (5.5539417f * scale)),(y + (6.830161f * scale)),(x + (5.601205f * scale)),(y + (6.6883574f * scale)),(x + (5.766636f * scale)),(y + (6.144781f * scale)));
+		painter.cubicTo((x + (6.2865934f * scale)),(y + (4.4904165f * scale)),(x + (6.6883574f * scale)),(y + (3.119658f * scale)),(x + (6.6883574f * scale)),(y + (3.0960245f * scale)));
+		painter.cubicTo((x + (6.6883574f * scale)),(y + (3.0960245f * scale)),(x + (6.5229273f * scale)),(y + (3.1432915f * scale)),(x + (6.3574743f * scale)),(y + (3.2141924f * scale)));
+		painter.cubicTo((x + (5.9557085f * scale)),(y + (3.3323627f * scale)),(x + (5.4121323f * scale)),(y + (3.474164f * scale)),(x + (5.033985f * scale)),(y + (3.5450664f * scale)));
+		painter.cubicTo((x + (4.7740307f * scale)),(y + (3.5923338f * scale)),(x + (4.6322203f * scale)),(y + (3.5923338f * scale)),(x + (4.2777157f * scale)),(y + (3.5923338f * scale)));
+		painter.cubicTo((x + (3.757759f * scale)),(y + (3.5923338f * scale)),(x + (3.6159725f * scale)),(y + (3.5687003f * scale)),(x + (3.2378254f * scale)),(y + (3.3796296f * scale)));
+		painter.cubicTo((x + (2.197935f * scale)),(y + (2.8833203f * scale)),(x + (1.8434324f * scale)),(y + (1.6779971f * scale)),(x + (2.43427f * scale)),(y + (0.77991486f * scale)));
+		painter.cubicTo((x + (2.69425f * scale)),(y + (0.4254074f * scale)),(x + (3.096015f * scale)),(y + (0.14180231f * scale)),(x + (3.5214243f * scale)),(y + (0.070901394f * scale)));
+	}
+	
+	public static void paintThirtySecond(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (4.939474f * scale)),(y + (0.070901155f * scale)));
+		painter.cubicTo((x + (5.459408f * scale)),(y + (0.0f * scale)),(x + (5.9084606f * scale)),(y + (0.14180207f * scale)),(x + (6.2629623f * scale)),(y + (0.4726758f * scale)));
+		painter.cubicTo((x + (6.4756565f * scale)),(y + (0.70901346f * scale)),(x + (6.570204f * scale)),(y + (0.89808273f * scale)),(x + (6.7119904f * scale)),(y + (1.4652941f * scale)));
+		painter.cubicTo((x + (6.782896f * scale)),(y + (1.7252657f * scale)),(x + (6.8538036f * scale)),(y + (1.9852374f * scale)),(x + (6.877445f * scale)),(y + (2.0325048f * scale)));
+		painter.cubicTo((x + (6.9719696f * scale)),(y + (2.245209f * scale)),(x + (7.1373997f * scale)),(y + (2.3870108f * scale)),(x + (7.3501167f * scale)),(y + (2.4106443f * scale)));
+		painter.cubicTo((x + (7.444641f * scale)),(y + (2.4106443f * scale)),(x + (7.4919033f * scale)),(y + (2.4106443f * scale)),(x + (7.562809f * scale)),(y + (2.3633773f * scale)));
+		painter.cubicTo((x + (7.8227882f * scale)),(y + (2.19794f * scale)),(x + (8.34272f * scale)),(y + (1.4889283f * scale)),(x + (8.697241f * scale)),(y + (0.80354834f * scale)));
+		painter.cubicTo((x + (8.768129f * scale)),(y + (0.61447763f * scale)),(x + (8.862679f * scale)),(y + (0.54357696f * scale)),(x + (9.004465f * scale)),(y + (0.54357696f * scale)));
+		painter.cubicTo((x + (9.099014f * scale)),(y + (0.54357696f * scale)),(x + (9.217182f * scale)),(y + (0.61447763f * scale)),(x + (9.264444f * scale)),(y + (0.6853788f * scale)));
+		painter.cubicTo((x + (9.288086f * scale)),(y + (0.7326474f * scale)),(x + (8.815416f * scale)),(y + (2.7887857f * scale)),(x + (6.735634f * scale)),(y + (11.627814f * scale)));
+		painter.cubicTo((x + (5.3175983f * scale)),(y + (17.6308f * scale)),(x + (4.1359196f * scale)),(y + (22.57025f * scale)),(x + (4.1359196f * scale)),(y + (22.593893f * scale)));
+		painter.cubicTo((x + (4.112276f * scale)),(y + (22.641155f * scale)),(x + (4.041378f * scale)),(y + (22.688417f * scale)),(x + (3.946846f * scale)),(y + (22.73568f * scale)));
+		painter.cubicTo((x + (3.781416f * scale)),(y + (22.806585f * scale)),(x + (3.7577744f * scale)),(y + (22.806585f * scale)),(x + (3.5687008f * scale)),(y + (22.806585f * scale)));
+		painter.cubicTo((x + (3.3796272f * scale)),(y + (22.806585f * scale)),(x + (3.332365f * scale)),(y + (22.806585f * scale)),(x + (3.1905785f * scale)),(y + (22.759323f * scale)));
+		painter.cubicTo((x + (3.1196728f * scale)),(y + (22.71206f * scale)),(x + (3.0251236f * scale)),(y + (22.664799f * scale)),(x + (3.0251236f * scale)),(y + (22.641155f * scale)));
+		painter.cubicTo((x + (2.9778614f * scale)),(y + (22.617512f * scale)),(x + (3.0960293f * scale)),(y + (22.192102f * scale)),(x + (3.9941082f * scale)),(y + (18.765215f * scale)));
+		painter.cubicTo((x + (4.5376854f * scale)),(y + (16.661814f * scale)),(x + (4.986738f * scale)),(y + (14.936537f * scale)),(x + (5.0103607f * scale)),(y + (14.912916f * scale)));
+		painter.cubicTo((x + (5.0103607f * scale)),(y + (14.889275f * scale)),(x + (4.9158325f * scale)),(y + (14.889275f * scale)),(x + (4.6322346f * scale)),(y + (15.007441f * scale)));
+		painter.cubicTo((x + (3.7105122f * scale)),(y + (15.314682f * scale)),(x + (2.883337f * scale)),(y + (15.456493f * scale)),(x + (2.2688541f * scale)),(y + (15.43285f * scale)));
+		painter.cubicTo((x + (1.9379692f * scale)),(y + (15.409229f * scale)),(x + (1.6780167f * scale)),(y + (15.3383255f * scale)),(x + (1.3943939f * scale)),(y + (15.196516f * scale)));
+		painter.cubicTo((x + (0.35450363f * scale)),(y + (14.700201f * scale)),(x + (0.0f * scale)),(y + (13.49488f * scale)),(x + (0.59086037f * scale)),(y + (12.5968f * scale)));
+		painter.cubicTo((x + (1.1580582f * scale)),(y + (11.769626f * scale)),(x + (2.3397598f * scale)),(y + (11.627814f * scale)),(x + (3.001505f * scale)),(y + (12.265927f * scale)));
+		painter.cubicTo((x + (3.2378407f * scale)),(y + (12.525894f * scale)),(x + (3.332365f * scale)),(y + (12.738611f * scale)),(x + (3.4741764f * scale)),(y + (13.353088f * scale)));
+		painter.cubicTo((x + (3.5450802f * scale)),(y + (13.707598f * scale)),(x + (3.6396065f * scale)),(y + (13.967552f * scale)),(x + (3.7341537f * scale)),(y + (14.062099f * scale)));
+		painter.cubicTo((x + (3.8286781f * scale)),(y + (14.133005f * scale)),(x + (3.9704895f * scale)),(y + (14.203886f * scale)),(x + (4.112276f * scale)),(y + (14.22753f * scale)));
+		painter.cubicTo((x + (4.2068253f * scale)),(y + (14.22753f * scale)),(x + (4.2540874f * scale)),(y + (14.22753f * scale)),(x + (4.348612f * scale)),(y + (14.156624f * scale)));
+		painter.cubicTo((x + (4.679497f * scale)),(y + (13.991194f * scale)),(x + (5.3648834f * scale)),(y + (13.140376f * scale)),(x + (5.5775776f * scale)),(y + (12.667706f * scale)));
+		painter.cubicTo((x + (5.601219f * scale)),(y + (12.573157f * scale)),(x + (6.546562f * scale)),(y + (9.051743f * scale)),(x + (6.546562f * scale)),(y + (9.004459f * scale)));
+		painter.cubicTo((x + (6.546562f * scale)),(y + (8.980838f * scale)),(x + (6.404751f * scale)),(y + (9.0281f * scale)),(x + (6.2393208f * scale)),(y + (9.099006f * scale)));
+		painter.cubicTo((x + (5.7430058f * scale)),(y + (9.240808f * scale)),(x + (5.2939777f * scale)),(y + (9.382604f * scale)),(x + (4.8685703f * scale)),(y + (9.453508f * scale)));
+		painter.cubicTo((x + (4.561329f * scale)),(y + (9.5007715f * scale)),(x + (4.443161f * scale)),(y + (9.5007715f * scale)),(x + (4.065014f * scale)),(y + (9.5007715f * scale)));
+		painter.cubicTo((x + (3.5450802f * scale)),(y + (9.5007715f * scale)),(x + (3.4032707f * scale)),(y + (9.477151f * scale)),(x + (3.0251236f * scale)),(y + (9.288079f * scale)));
+		painter.cubicTo((x + (1.9852371f * scale)),(y + (8.791764f * scale)),(x + (1.6307297f * scale)),(y + (7.586441f * scale)),(x + (2.2215939f * scale)),(y + (6.6883574f * scale)));
+		painter.cubicTo((x + (2.7887878f * scale)),(y + (5.8611755f * scale)),(x + (3.9704895f * scale)),(y + (5.7193727f * scale)),(x + (4.6322346f * scale)),(y + (6.357485f * scale)));
+		painter.cubicTo((x + (4.8685703f * scale)),(y + (6.6174564f * scale)),(x + (4.9630947f * scale)),(y + (6.830161f * scale)),(x + (5.104904f * scale)),(y + (7.4446383f * scale)));
+		painter.cubicTo((x + (5.175812f * scale)),(y + (7.799144f * scale)),(x + (5.270336f * scale)),(y + (8.059115f * scale)),(x + (5.3648834f * scale)),(y + (8.153648f * scale)));
+		painter.cubicTo((x + (5.50667f * scale)),(y + (8.295452f * scale)),(x + (5.7666492f * scale)),(y + (8.366357f * scale)),(x + (5.9320793f * scale)),(y + (8.271823f * scale)));
+		painter.cubicTo((x + (6.168415f * scale)),(y + (8.177285f * scale)),(x + (6.4756565f * scale)),(y + (7.8227797f * scale)),(x + (6.782896f * scale)),(y + (7.3501034f * scale)));
+		painter.cubicTo((x + (7.113781f * scale)),(y + (6.877428f * scale)),(x + (7.0901375f * scale)),(y + (6.948329f * scale)),(x + (7.610079f * scale)),(y + (4.963092f * scale)));
+		painter.cubicTo((x + (7.8700504f * scale)),(y + (3.970473f * scale)),(x + (8.082766f * scale)),(y + (3.1432917f * scale)),(x + (8.082766f * scale)),(y + (3.1196578f * scale)));
+		painter.cubicTo((x + (8.082766f * scale)),(y + (3.1196578f * scale)),(x + (7.9173126f * scale)),(y + (3.1432917f * scale)),(x + (7.72826f * scale)),(y + (3.2141926f * scale)));
+		painter.cubicTo((x + (7.279211f * scale)),(y + (3.355996f * scale)),(x + (6.830158f * scale)),(y + (3.4741638f * scale)),(x + (6.452036f * scale)),(y + (3.545066f * scale)));
+		painter.cubicTo((x + (6.1920567f * scale)),(y + (3.592334f * scale)),(x + (6.050247f * scale)),(y + (3.592334f * scale)),(x + (5.6957436f * scale)),(y + (3.592334f * scale)));
+		painter.cubicTo((x + (5.175812f * scale)),(y + (3.592334f * scale)),(x + (5.0339985f * scale)),(y + (3.5687f * scale)),(x + (4.6558533f * scale)),(y + (3.3796294f * scale)));
+		painter.cubicTo((x + (3.6159801f * scale)),(y + (2.88332f * scale)),(x + (3.2614594f * scale)),(y + (1.6779974f * scale)),(x + (3.8523216f * scale)),(y + (0.7799146f * scale)));
+		painter.cubicTo((x + (4.112276f * scale)),(y + (0.4254074f * scale)),(x + (4.5140667f * scale)),(y + (0.14180207f * scale)),(x + (4.939474f * scale)),(y + (0.070901155f * scale)));
+	}
+	
+	public static void paintSixtyFourth(TGPainter painter, float x, float y,float scale){
+		painter.moveTo((x + (5.908436f * scale)),(y + (0.07090092f * scale)));
+		painter.cubicTo((x + (6.4283676f * scale)),(y + (0.0f * scale)),(x + (6.8774185f * scale)),(y + (0.14180303f * scale)),(x + (7.231926f * scale)),(y + (0.4726758f * scale)));
+		painter.cubicTo((x + (7.4446335f * scale)),(y + (0.70901346f * scale)),(x + (7.5391655f * scale)),(y + (0.8980839f * scale)),(x + (7.680977f * scale)),(y + (1.4652941f * scale)));
+		painter.cubicTo((x + (7.7991447f * scale)),(y + (1.9616034f * scale)),(x + (7.846405f * scale)),(y + (2.1034052f * scale)),(x + (7.9409294f * scale)),(y + (2.221575f * scale)));
+		painter.cubicTo((x + (8.082741f * scale)),(y + (2.3870103f * scale)),(x + (8.366341f * scale)),(y + (2.4579127f * scale)),(x + (8.531792f * scale)),(y + (2.3633769f * scale)));
+		painter.cubicTo((x + (8.72084f * scale)),(y + (2.2688425f * scale)),(x + (9.028084f * scale)),(y + (1.8434336f * scale)),(x + (9.382591f * scale)),(y + (1.1344209f * scale)));
+		painter.cubicTo((x + (9.642563f * scale)),(y + (0.61447763f * scale)),(x + (9.689827f * scale)),(y + (0.5672102f * scale)),(x + (9.855282f * scale)),(y + (0.5672102f * scale)));
+		painter.cubicTo((x + (9.949806f * scale)),(y + (0.5672102f * scale)),(x + (10.067974f * scale)),(y + (0.6381123f * scale)),(x + (10.115234f * scale)),(y + (0.70901346f * scale)));
+		painter.cubicTo((x + (10.138878f * scale)),(y + (0.75628066f * scale)),(x + (9.571659f * scale)),(y + (3.592333f * scale)),(x + (7.3264503f * scale)),(y + (14.605665f * scale)));
+		painter.cubicTo((x + (5.790268f * scale)),(y + (22.215736f * scale)),(x + (4.514042f * scale)),(y + (28.478699f * scale)),(x + (4.514042f * scale)),(y + (28.502335f * scale)));
+		painter.cubicTo((x + (4.4903984f * scale)),(y + (28.549604f * scale)),(x + (4.4195137f * scale)),(y + (28.596869f * scale)),(x + (4.3249702f * scale)),(y + (28.644129f * scale)));
+		painter.cubicTo((x + (4.1595383f * scale)),(y + (28.715034f * scale)),(x + (4.135895f * scale)),(y + (28.715034f * scale)),(x + (3.9468231f * scale)),(y + (28.715034f * scale)));
+		painter.cubicTo((x + (3.7577515f * scale)),(y + (28.715034f * scale)),(x + (3.7104874f * scale)),(y + (28.715034f * scale)),(x + (3.568699f * scale)),(y + (28.667772f * scale)));
+		painter.cubicTo((x + (3.497795f * scale)),(y + (28.62051f * scale)),(x + (3.403244f * scale)),(y + (28.573223f * scale)),(x + (3.403244f * scale)),(y + (28.549604f * scale)));
+		painter.cubicTo((x + (3.3559837f * scale)),(y + (28.525963f * scale)),(x + (3.450531f * scale)),(y + (28.100554f * scale)),(x + (4.230446f * scale)),(y + (24.65002f * scale)));
+		painter.cubicTo((x + (4.7031136f * scale)),(y + (22.522978f * scale)),(x + (5.0812607f * scale)),(y + (20.797724f * scale)),(x + (5.0812607f * scale)),(y + (20.77408f * scale)));
+		painter.cubicTo((x + (5.0812607f * scale)),(y + (20.77408f * scale)),(x + (4.892189f * scale)),(y + (20.821352f * scale)),(x + (4.679474f * scale)),(y + (20.892248f * scale)));
+		painter.cubicTo((x + (4.1595383f * scale)),(y + (21.081322f * scale)),(x + (3.7341309f * scale)),(y + (21.175869f * scale)),(x + (3.28508f * scale)),(y + (21.270393f * scale)));
+		painter.cubicTo((x + (2.954216f * scale)),(y + (21.317657f * scale)),(x + (2.836052f * scale)),(y + (21.317657f * scale)),(x + (2.4579048f * scale)),(y + (21.317657f * scale)));
+		painter.cubicTo((x + (1.9143257f * scale)),(y + (21.317657f * scale)),(x + (1.7725143f * scale)),(y + (21.294037f * scale)),(x + (1.3943901f * scale)),(y + (21.104965f * scale)));
+		painter.cubicTo((x + (0.35450363f * scale)),(y + (20.60865f * scale)),(x + (0.0f * scale)),(y + (19.40333f * scale)),(x + (0.5908394f * scale)),(y + (18.505249f * scale)));
+		painter.cubicTo((x + (1.1580353f * scale)),(y + (17.678051f * scale)),(x + (2.339737f * scale)),(y + (17.536264f * scale)),(x + (3.00148f * scale)),(y + (18.174364f * scale)));
+		painter.cubicTo((x + (3.2378159f * scale)),(y + (18.434345f * scale)),(x + (3.3323517f * scale)),(y + (18.647038f * scale)),(x + (3.4741516f * scale)),(y + (19.261518f * scale)));
+		painter.cubicTo((x + (3.5450554f * scale)),(y + (19.616022f * scale)),(x + (3.6395798f * scale)),(y + (19.876f * scale)),(x + (3.7341309f * scale)),(y + (19.970549f * scale)));
+		painter.cubicTo((x + (3.8050346f * scale)),(y + (20.04143f * scale)),(x + (3.9468231f * scale)),(y + (20.112335f * scale)),(x + (4.0886345f * scale)),(y + (20.135979f * scale)));
+		painter.cubicTo((x + (4.2540627f * scale)),(y + (20.1596f * scale)),(x + (4.395874f * scale)),(y + (20.065073f * scale)),(x + (4.6558533f * scale)),(y + (19.805096f * scale)));
+		painter.cubicTo((x + (5.010357f * scale)),(y + (19.450592f * scale)),(x + (5.459385f * scale)),(y + (18.812492f * scale)),(x + (5.577553f * scale)),(y + (18.505249f * scale)));
+		painter.cubicTo((x + (5.6011925f * scale)),(y + (18.434345f * scale)),(x + (5.790268f * scale)),(y + (17.60717f * scale)),(x + (6.00296f * scale)),(y + (16.661804f * scale)));
+		painter.cubicTo((x + (6.2156754f * scale)),(y + (15.716461f * scale)),(x + (6.3811073f * scale)),(y + (14.93655f * scale)),(x + (6.404751f * scale)),(y + (14.912907f * scale)));
+		painter.cubicTo((x + (6.404751f * scale)),(y + (14.889288f * scale)),(x + (6.333843f * scale)),(y + (14.889288f * scale)),(x + (6.0266037f * scale)),(y + (15.007456f * scale)));
+		painter.cubicTo((x + (5.1048813f * scale)),(y + (15.314692f * scale)),(x + (4.277706f * scale)),(y + (15.456482f * scale)),(x + (3.6632233f * scale)),(y + (15.432863f * scale)));
+		painter.cubicTo((x + (3.3323517f * scale)),(y + (15.409222f * scale)),(x + (3.0723839f * scale)),(y + (15.338314f * scale)),(x + (2.7887688f * scale)),(y + (15.19651f * scale)));
+		painter.cubicTo((x + (1.7488976f * scale)),(y + (14.700214f * scale)),(x + (1.3943901f * scale)),(y + (13.494894f * scale)),(x + (1.9852333f * scale)),(y + (12.59679f * scale)));
+		painter.cubicTo((x + (2.2688293f * scale)),(y + (12.17139f * scale)),(x + (2.7415009f * scale)),(y + (11.911427f * scale)),(x + (3.28508f * scale)),(y + (11.864165f * scale)));
+		painter.cubicTo((x + (3.7104874f * scale)),(y + (11.840521f * scale)),(x + (4.0886345f * scale)),(y + (11.982332f * scale)),(x + (4.395874f * scale)),(y + (12.289569f * scale)));
+		painter.cubicTo((x + (4.6085663f * scale)),(y + (12.525908f * scale)),(x + (4.7031136f * scale)),(y + (12.714971f * scale)),(x + (4.8449097f * scale)),(y + (13.282178f * scale)));
+		painter.cubicTo((x + (4.915806f * scale)),(y + (13.542156f * scale)),(x + (4.9867134f * scale)),(y + (13.802132f * scale)),(x + (5.010357f * scale)),(y + (13.849398f * scale)));
+		painter.cubicTo((x + (5.128525f * scale)),(y + (14.156637f * scale)),(x + (5.459385f * scale)),(y + (14.298426f * scale)),(x + (5.7193604f * scale)),(y + (14.180258f * scale)));
+		painter.cubicTo((x + (6.00296f * scale)),(y + (14.038469f * scale)),(x + (6.6647034f * scale)),(y + (13.187653f * scale)),(x + (6.8774185f * scale)),(y + (12.691338f * scale)));
+		painter.cubicTo((x + (6.9010506f * scale)),(y + (12.620433f * scale)),(x + (7.1137543f * scale)),(y + (11.745991f * scale)),(x + (7.3264503f * scale)),(y + (10.777008f * scale)));
+		painter.lineTo((x + (7.728237f * scale)),(y + (8.980829f * scale)));
+		painter.lineTo((x + (7.3028297f * scale)),(y + (9.122639f * scale)));
+		painter.cubicTo((x + (6.4283676f * scale)),(y + (9.406237f * scale)),(x + (5.8847923f * scale)),(y + (9.500785f * scale)),(x + (5.246689f * scale)),(y + (9.500785f * scale)));
+		painter.cubicTo((x + (4.726738f * scale)),(y + (9.500785f * scale)),(x + (4.5849457f * scale)),(y + (9.47714f * scale)),(x + (4.2067986f * scale)),(y + (9.288069f * scale)));
+		painter.cubicTo((x + (3.1669083f * scale)),(y + (8.791758f * scale)),(x + (2.8124046f * scale)),(y + (7.586441f * scale)),(x + (3.403244f * scale)),(y + (6.6883574f * scale)));
+		painter.cubicTo((x + (3.6868668f * scale)),(y + (6.26295f * scale)),(x + (4.1595383f * scale)),(y + (6.0029783f * scale)),(x + (4.7031136f * scale)),(y + (5.9557104f * scale)));
+		painter.cubicTo((x + (5.128525f * scale)),(y + (5.9320765f * scale)),(x + (5.506672f * scale)),(y + (6.07388f * scale)),(x + (5.8138924f * scale)),(y + (6.381119f * scale)));
+		painter.cubicTo((x + (6.0266037f * scale)),(y + (6.6174564f * scale)),(x + (6.121128f * scale)),(y + (6.806527f * scale)),(x + (6.2629395f * scale)),(y + (7.3737373f * scale)));
+		painter.cubicTo((x + (6.3811073f * scale)),(y + (7.8700476f * scale)),(x + (6.4283676f * scale)),(y + (8.0118475f * scale)),(x + (6.5229187f * scale)),(y + (8.130014f * scale)));
+		painter.cubicTo((x + (6.688347f * scale)),(y + (8.295459f * scale)),(x + (6.948326f * scale)),(y + (8.366352f * scale)),(x + (7.1137543f * scale)),(y + (8.271822f * scale)));
+		painter.cubicTo((x + (7.397354f * scale)),(y + (8.130014f * scale)),(x + (7.846405f * scale)),(y + (7.539174f * scale)),(x + (8.130005f * scale)),(y + (6.948328f * scale)));
+		painter.cubicTo((x + (8.224552f * scale)),(y + (6.759259f * scale)),(x + (8.271812f * scale)),(y + (6.5701895f * scale)),(x + (8.62632f * scale)),(y + (4.939458f * scale)));
+		painter.lineTo((x + (9.028084f * scale)),(y + (3.1196573f * scale)));
+		painter.cubicTo((x + (9.028084f * scale)),(y + (3.0960238f * scale)),(x + (8.886295f * scale)),(y + (3.1432912f * scale)),(x + (8.72084f * scale)),(y + (3.2141936f * scale)));
+		painter.cubicTo((x + (7.8227615f * scale)),(y + (3.4977987f * scale)),(x + (7.066494f * scale)),(y + (3.6396005f * scale)),(x + (6.4992714f * scale)),(y + (3.6159666f * scale)));
+		painter.cubicTo((x + (6.168415f * scale)),(y + (3.592333f * scale)),(x + (5.908436f * scale)),(y + (3.5214326f * scale)),(x + (5.624836f * scale)),(y + (3.379629f * scale)));
+		painter.cubicTo((x + (4.5849457f * scale)),(y + (2.8833196f * scale)),(x + (4.230446f * scale)),(y + (1.6779983f * scale)),(x + (4.8212814f * scale)),(y + (0.7799144f * scale)));
+		painter.cubicTo((x + (5.0812607f * scale)),(y + (0.42540812f * scale)),(x + (5.4830284f * scale)),(y + (0.14180303f * scale)),(x + (5.908436f * scale)),(y + (0.07090092f * scale)));
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGTempoPainter.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGTempoPainter.java
new file mode 100644
index 0000000..e3942d0
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGTempoPainter.java
@@ -0,0 +1,21 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGTempoPainter {
+	
+	public static void paintTempo(TGPainter painter, int x, int y,float scale) {
+		int width = Math.round(scale * 1.33f);
+		int height = Math.round(scale * (1.0f + 2.5f));
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + (width - (scale * 1.33f)),y + ( height - (1.0f * scale) ), scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo(x + width,y);
+		painter.lineTo(x + width,y + (height - (0.66f * scale)) );
+		painter.closePath();
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGTripletFeelPainter.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGTripletFeelPainter.java
new file mode 100644
index 0000000..4c86f61
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/graphics/control/painters/TGTripletFeelPainter.java
@@ -0,0 +1,124 @@
+package org.herac.tuxguitar.graphics.control.painters;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGTripletFeelPainter {
+	
+	public static void paintTripletFeel8(TGPainter painter, int x, int y,float scale) {
+		float topSpacing = (1.0f * scale);
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x, y + (topSpacing + verticalSpacing) , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo( x + Math.round(ovalWidth) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
+		painter.lineTo( x + Math.round(ovalWidth) ,y + topSpacing);
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + (topSpacing + verticalSpacing)  , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo(x + Math.round(ovalWidth + horizontalSpacing) ,y +Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y +topSpacing);
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintFooter(painter,x + Math.round(ovalWidth + horizontalSpacing),y + (topSpacing + (scale * 2.3f)), -1 , scale);
+		painter.closePath();
+		
+		painter.initPath();
+		painter.moveTo( x, y + (1.2f * scale) );
+		painter.cubicTo(x + (horizontalSpacing / 2f), y, x + ( (ovalWidth * 2f) + (horizontalSpacing / 2f)), y, x + ( (ovalWidth * 2f) + horizontalSpacing), y + (1.2f * scale));
+		painter.moveTo( x + ( (ovalWidth * 2f) + horizontalSpacing),y + (1.2f * scale) );
+		painter.closePath();
+	}
+	
+	public static void paintTripletFeelNone8(TGPainter painter, int x, int y,float scale) {
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x, y + verticalSpacing , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo( x + Math.round(ovalWidth) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
+		painter.lineTo( x + Math.round(ovalWidth) ,y);
+		painter.lineTo( x + Math.round(ovalWidth + horizontalSpacing) ,y);
+		painter.lineTo( x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + verticalSpacing , scale );
+		painter.closePath();
+	}
+	
+	public static int paintTripletFeel16(TGPainter painter, int x, int y,float scale) {
+		float topSpacing = (1.0f * scale);
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x,y + (topSpacing + verticalSpacing) , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
+		painter.lineTo(x + Math.round(ovalWidth) ,y + topSpacing);
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + topSpacing);
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
+		painter.moveTo(x + Math.round(ovalWidth + horizontalSpacing - (0.55f * scale) ) ,y + Math.round(topSpacing + (0.5f * scale)));
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(topSpacing + (0.5f * scale)));
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + (topSpacing + verticalSpacing) , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.moveTo( x, y + (1.2f * scale) );
+		painter.cubicTo(x + (horizontalSpacing / 2f), y, x + ( (ovalWidth * 2f) + (horizontalSpacing / 2f)), y, x + ( (ovalWidth * 2f) + horizontalSpacing), y + (1.2f * scale));
+		painter.moveTo( x + ( (ovalWidth * 2f) + horizontalSpacing),y + (1.2f * scale) );
+		painter.closePath();
+		
+		return Math.round( (ovalWidth * 2f) + horizontalSpacing );
+	}
+	
+	public static int paintTripletFeelNone16(TGPainter painter, int x, int y,float scale) {
+		float horizontalSpacing = (1.5f * scale);
+		float verticalSpacing = (2.5f * scale);
+		float ovalWidth = (1.33f * scale);
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x,y + verticalSpacing , scale );
+		painter.closePath();
+		
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
+		painter.lineTo(x + Math.round(ovalWidth) ,y);
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y);
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
+		painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(0.5f * scale));
+		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(0.5f * scale));
+		painter.closePath();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + verticalSpacing , scale );
+		painter.closePath();
+		
+		return Math.round( ovalWidth + horizontalSpacing );
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg10/TGInputStream.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg10/TGInputStream.java
new file mode 100644
index 0000000..b631479
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg10/TGInputStream.java
@@ -0,0 +1,747 @@
+/*
+ * Created on 16-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.io.tg10;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGInputStream extends TGStream implements TGInputStreamBase{
+	
+	private DataInputStream dataInputStream;
+	private String version;
+	private TGFactory factory;
+	
+	public TGInputStream() {
+		super();
+	}
+	
+	public void init(TGFactory factory,InputStream stream) {
+		this.factory = factory;
+		this.dataInputStream = new DataInputStream(stream);
+		this.version = null;
+	}
+	
+	public TGFileFormat getFileFormat(){
+		return new TGFileFormat("TuxGuitar","*.tg");
+	}
+	
+	public boolean isSupportedVersion(String version){
+		return (version.equals(TG_FORMAT_VERSION));
+	}
+	
+	public boolean isSupportedVersion(){
+		try{
+			readVersion();
+			return isSupportedVersion(this.version);
+		}catch(Throwable throwable){
+			return false;
+		}
+	}
+	
+	public TGSong readSong() throws TGFileFormatException{
+		try {
+			if(this.isSupportedVersion()){
+				TGSong song = this.read();
+				this.dataInputStream.close();
+				return song;
+			}
+			throw new TGFileFormatException("Unsopported Version");
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
+		}
+	}
+	
+	private void readVersion(){
+		if(this.version == null){
+			this.version = readUnsignedByteString();
+		}
+	}
+	
+	private TGSong read(){
+		TGSong song = this.factory.newSong();
+		
+		//leo el nombre
+		song.setName(readUnsignedByteString());
+		
+		//leo el artista
+		song.setArtist(readUnsignedByteString());
+		
+		//leo el album
+		song.setAlbum(readUnsignedByteString());
+		
+		//leo el autor
+		song.setAuthor(readUnsignedByteString());
+		
+		//leo la cantidad de measure headers
+		int headerCount = readShort();
+		
+		//leo las pistas
+		TGMeasureHeader lastHeader = null;
+		long headerStart = TGDuration.QUARTER_TIME;
+		for(int i = 0;i < headerCount;i++){
+			TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader);
+			song.addMeasureHeader(header);
+			headerStart += header.getLength();
+			lastHeader = header;
+		}
+		
+		//leo la cantidad de pistas
+		int trackCount = readByte();
+		
+		//leo las pistas
+		for(int i = 0;i < trackCount;i++){
+			song.addTrack(readTrack(i + 1,song));
+		}
+		
+		return song;
+	}
+	
+	private TGTrack readTrack(int number,TGSong song){
+		//header
+		int header = readHeader();
+		
+		TGTrack track = this.factory.newTrack();
+		
+		track.setNumber(number);
+		
+		//leo el nombre
+		track.setName(readUnsignedByteString());
+		
+		//leo el canal
+		readChannel(song, track);
+		
+		//leo la cantidad de compases
+		int measureCount = song.countMeasureHeaders();
+		
+		//leo los compases
+		TGMeasure lastMeasure = null;
+		for(int i = 0;i < measureCount;i++){
+			TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure);
+			track.addMeasure(measure);
+			lastMeasure = measure;
+		}
+		
+		//leo la cantidad de cuerdas
+		int stringCount = readByte();
+		
+		//leo las cuerdas
+		for(int i = 0;i < stringCount;i++){
+			track.getStrings().add(readInstrumentString(i + 1));
+		}
+		
+		//leo el offset
+		track.setOffset(TGTrack.MIN_OFFSET + readByte());
+		
+		//leo el color
+		readRGBColor(track.getColor());
+		
+		//leo el lyrics
+		if(((header & TRACK_LYRICS) != 0)){
+			readLyrics(track.getLyrics());
+		}
+		
+		return track;
+	}
+	
+	private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){
+		int header = readHeader();
+		
+		TGMeasureHeader measureHeader = this.factory.newHeader();
+		measureHeader.setNumber(number);
+		measureHeader.setStart(start);
+		
+		//leo el time signature
+		if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){
+			readTimeSignature(measureHeader.getTimeSignature());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature());
+		}
+		
+		//leo el tempo
+		if(((header & MEASURE_HEADER_TEMPO) != 0)){
+			readTempo(measureHeader.getTempo());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTempo().copy(measureHeader.getTempo());
+		}
+		
+		//leo el comienzo de la repeticion
+		measureHeader.setRepeatOpen((header & MEASURE_HEADER_REPEAT_OPEN) != 0);
+		
+		//leo el numero de repeticiones
+		if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){
+			 measureHeader.setRepeatClose(readShort());
+		}
+		
+		//leo los finales alternativos
+		if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){
+			 measureHeader.setRepeatAlternative(readByte());
+		}
+		
+		//leo el marker
+		if(((header & MEASURE_HEADER_MARKER) != 0)){
+			measureHeader.setMarker(readMarker(number));
+		}
+		
+		measureHeader.setTripletFeel((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE);
+		if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){
+			measureHeader.setTripletFeel(readByte());
+		}
+		
+		return measureHeader;
+	}
+	
+	private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){
+		int header = readHeader();
+		
+		TGMeasure measure = this.factory.newMeasure(measureHeader);
+		TGBeatData data = new TGBeatData(measure);
+		
+		//leo la los beats
+		readBeats(measure, data);
+		
+		//leo la clave
+		measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef());
+		if(((header & MEASURE_CLEF) != 0)){
+			measure.setClef(readByte());
+		}
+		
+		//leo el key signature
+		measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature());
+		if(((header & MEASURE_KEYSIGNATURE) != 0)){
+			measure.setKeySignature(readByte());
+		}
+		
+		return measure;
+	}
+	
+	private void readChannel(TGSong song, TGTrack track){
+		int header = readHeader();
+		
+		TGChannel channel = this.factory.newChannel();
+		TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+		TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+		
+		//leo el canal
+		int channel1 = (readByte() & 0xff);
+		gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+		gmChannel1Param.setValue(Integer.toString(channel1));
+		
+		//leo el canal de efectos
+		int channel2 = (readByte() & 0xff);
+		gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+		gmChannel2Param.setValue(Integer.toString(channel2));
+		
+		// Parseo el banco de sonidos
+		channel.setBank( channel1 == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+		
+		//leo el instrumento
+		channel.setProgram(readByte());
+		
+		//leo el volumen
+		channel.setVolume(readByte());
+		
+		//leo el balance
+		channel.setBalance(readByte());
+		
+		//leo el chorus
+		channel.setChorus(readByte());
+		
+		//leo el reverb
+		channel.setReverb(readByte());
+		
+		//leo el phaser
+		channel.setPhaser(readByte());
+		
+		//leo el tremolo
+		channel.setTremolo(readByte());
+		
+		//leo el solo
+		track.setSolo((header & CHANNEL_SOLO) != 0);
+		
+		//leo el mute
+		track.setMute((header & CHANNEL_MUTE) != 0);
+		
+		//------------------------------------------//
+		for( int i = 0 ; i < song.countChannels() ; i ++ ){
+			TGChannel channelAux = song.getChannel(i);
+			for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+				TGChannelParameter channelParameter = channelAux.getParameter( n );
+				if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+					if( Integer.toString(channel1).equals(channelParameter.getValue()) ){
+						channel.setChannelId(channelAux.getChannelId());
+					}
+				}
+			}
+		}
+		if( channel.getChannelId() <= 0 ){
+			channel.setChannelId( song.countChannels() + 1 );
+			channel.setName(("#" + channel.getChannelId()));
+			channel.addParameter(gmChannel1Param);
+			channel.addParameter(gmChannel2Param);
+			song.addChannel(channel);
+		}
+		track.setChannelId(channel.getChannelId());
+	}
+	
+	private void readBeats(TGMeasure measure,TGBeatData data){
+		int header = BEAT_HAS_NEXT;
+		while(((header & BEAT_HAS_NEXT) != 0)){
+			header = readHeader();
+			readBeat(header, measure, data);
+		}
+	}
+	
+	private void readBeat(int header, TGMeasure measure,TGBeatData data){
+		TGBeat beat = this.factory.newBeat();
+		TGVoice voice = beat.getVoice(0);
+		
+		beat.setStart(data.getStart());
+		voice.setEmpty( false );
+		
+		//leo la duracion
+		if(((header & BEAT_NEXT_DURATION) != 0)){
+			readDuration(data.getDuration());
+		}
+		
+		//leo las notas
+		if(((header & BEAT_HAS_NOTES) != 0)){
+			readNotes(beat, data);
+		}
+		
+		//leo el acorde
+		if(((header & BEAT_HAS_CHORD) != 0)){
+			readChord(beat);
+		}
+		
+		//leo el texto
+		if(((header & BEAT_HAS_TEXT) != 0)){
+			readText(beat);
+		}
+		
+		data.getDuration().copy(voice.getDuration());
+		
+		measure.addBeat(beat);
+		
+		data.setStart(data.getStart() + data.getDuration().getTime());
+	}
+	
+	private void readNotes(TGBeat beat,TGBeatData data){
+		int header = NOTE_HAS_NEXT;
+		while(((header & NOTE_HAS_NEXT) != 0)){
+			header = readHeader();
+			readNote(header, beat, data);
+		}
+	}
+	
+	private void readNote(int header,TGBeat beat,TGBeatData data){
+		TGNote note = this.factory.newNote();
+		TGVoice voice = beat.getVoice(0);
+		
+		//leo el valor
+		note.setValue(readByte());
+		
+		//leo la cuerda
+		note.setString(readByte());
+		
+		//leo la ligadura
+		note.setTiedNote((header & NOTE_TIED) != 0);
+		
+		//leo el velocity
+		if(((header & NOTE_VELOCITY) != 0)){
+			data.setVelocity(readByte());
+		}
+		note.setVelocity(data.getVelocity());
+		
+		//leo los efectos
+		if(((header & NOTE_EFFECT) != 0)){
+			readNoteEffect(note.getEffect());
+		}
+		
+		voice.addNote(note);
+	}
+	
+	private void readChord(TGBeat beat){
+		TGChord chord = this.factory.newChord(readByte());
+		
+		//leo el nombre
+		chord.setName( readUnsignedByteString() );
+		
+		//leo el primer fret
+		chord.setFirstFret(readByte());
+		
+		//leo las cuerdas
+		for(int string = 0; string < chord.countStrings(); string ++){
+			chord.addFretValue(string, readByte());
+		}
+		beat.setChord(chord);
+	}
+	
+	private void readText(TGBeat beat){
+		TGText text = this.factory.newText();
+		
+		//leo el texto
+		text.setValue(readUnsignedByteString());
+		
+		beat.setText(text);
+	}
+	
+	private TGString readInstrumentString(int number){
+		TGString string = this.factory.newString();
+		
+		string.setNumber(number);
+		
+		//leo el valor
+		string.setValue(readByte());
+		
+		return string;
+	}
+	
+	private void readTempo(TGTempo tempo){
+		//leo el valor
+		tempo.setValue(readShort());
+	}
+	
+	private void readTimeSignature(TGTimeSignature timeSignature){
+		//leo el numerador
+		timeSignature.setNumerator(readByte());
+		
+		//leo el denominador
+		readDuration(timeSignature.getDenominator());
+	}
+	
+	private void readDuration(TGDuration duration){
+		int header = readHeader();
+		
+		// leo el puntillo
+		duration.setDotted((header & DURATION_DOTTED) != 0);
+		
+		//leo el doble puntillo
+		duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0);
+		
+		//leo el valor
+		duration.setValue(readByte());
+		
+		//leo el tipo de divisiones
+		if(((header & DURATION_NO_TUPLET) != 0)){
+			readDivisionType(duration.getDivision());
+		}
+		else{
+			TGDivisionType.NORMAL.copy(duration.getDivision());
+		}
+	}
+	
+	private void readDivisionType(TGDivisionType divisionType){
+		//leo los enters
+		divisionType.setEnters(readByte());
+		
+		//leo los tiempos
+		divisionType.setTimes(readByte());
+	}
+	
+	private void readNoteEffect(TGNoteEffect effect){
+		int header = readHeader(3);
+		
+		//leo el bend
+		if(((header & EFFECT_BEND) != 0)){
+			effect.setBend(readBendEffect());
+		}
+		
+		//leo el tremolo bar
+		if(((header & EFFECT_TREMOLO_BAR) != 0)){
+			effect.setTremoloBar(readTremoloBarEffect());
+		}
+		
+		//leo el harmonic
+		if(((header & EFFECT_HARMONIC) != 0)){
+			effect.setHarmonic(readHarmonicEffect());
+		}
+		
+		//leo el grace
+		if(((header & EFFECT_GRACE) != 0)){
+			effect.setGrace(readGraceEffect());
+		}
+		
+		//leo el trill
+		if(((header & EFFECT_TRILL) != 0)){
+			effect.setTrill(readTrillEffect());
+		}
+		
+		//leo el tremolo picking
+		if(((header & EFFECT_TREMOLO_PICKING) != 0)){
+			effect.setTremoloPicking(readTremoloPickingEffect());
+		}
+		
+		//vibrato
+		effect.setVibrato(((header & EFFECT_VIBRATO) != 0));
+		
+		//dead note
+		effect.setDeadNote(((header & EFFECT_DEAD) != 0));
+		
+		//slide
+		effect.setSlide(((header & EFFECT_SLIDE) != 0));
+		
+		//hammer-on/pull-off
+		effect.setHammer(((header & EFFECT_HAMMER) != 0));
+		
+		//ghost note
+		effect.setGhostNote(((header & EFFECT_GHOST) != 0));
+		
+		//accentuated note
+		effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0));
+		
+		//heavy accentuated note
+		effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0));
+		
+		//palm mute
+		effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0));
+		
+		//staccato
+		effect.setStaccato(((header & EFFECT_STACCATO) != 0));
+		
+		//tapping
+		effect.setTapping(((header & EFFECT_TAPPING) != 0));
+		
+		//slapping
+		effect.setSlapping(((header & EFFECT_SLAPPING) != 0));
+		
+		//popping
+		effect.setPopping(((header & EFFECT_POPPING) != 0));
+		
+		//fade in
+		effect.setFadeIn(((header & EFFECT_FADE_IN) != 0));
+	}
+	
+	private TGEffectBend readBendEffect(){
+		TGEffectBend bend = this.factory.newEffectBend();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value = readByte();
+			
+			//agrego el punto
+			bend.addPoint(position,value);
+		}
+		return bend;
+	}
+	
+	private TGEffectTremoloBar readTremoloBarEffect(){
+		TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value =  (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH);
+			
+			//agrego el punto
+			tremoloBar.addPoint(position,value);
+		}
+		return tremoloBar;
+	}
+	
+	private TGEffectHarmonic readHarmonicEffect(){
+		TGEffectHarmonic effect = this.factory.newEffectHarmonic();
+		
+		//leo el tipo
+		effect.setType(readByte());
+		
+		//leo la data
+		if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){
+			effect.setData(readByte());
+		}
+		return effect;
+	}
+	
+	private TGEffectGrace readGraceEffect(){
+		int header = readHeader();
+		
+		TGEffectGrace effect = this.factory.newEffectGrace();
+		
+		effect.setDead((header & GRACE_FLAG_DEAD) != 0) ;
+		
+		effect.setOnBeat((header & GRACE_FLAG_ON_BEAT) != 0) ;
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.setDuration(readByte());
+		
+		//leo el velocity
+		effect.setDynamic(readByte());
+		
+		//leo la transicion
+		effect.setTransition(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTremoloPicking readTremoloPickingEffect(){
+		TGEffectTremoloPicking effect = this.factory.newEffectTremoloPicking();
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTrill readTrillEffect(){
+		TGEffectTrill effect = this.factory.newEffectTrill();
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGMarker readMarker(int measure){
+		TGMarker marker = this.factory.newMarker();
+		
+		marker.setMeasure(measure);
+		
+		//leo el titulo
+		marker.setTitle(readUnsignedByteString());
+		
+		//leo el color
+		readRGBColor(marker.getColor());
+		
+		return marker;
+	}
+	
+	private void readRGBColor(TGColor color){
+		//leo el RGB
+		color.setR((readByte() & 0xff));
+		color.setG((readByte() & 0xff));
+		color.setB((readByte() & 0xff));
+	}
+	
+	private void readLyrics(TGLyric lyrics){
+		//leo el compas de comienzo
+		lyrics.setFrom(readShort());
+		
+		//leo el texto
+		lyrics.setLyrics(readIntegerString());
+	}
+	
+	private byte readByte(){
+		try {
+			return (byte)this.dataInputStream.read();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private int readHeader(){
+		try {
+			return this.dataInputStream.read();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private int readHeader(int bCount){
+		int header = 0;
+		for(int i = bCount; i > 0; i --){
+			header += ( readHeader() << ( (8 * i) - 8 ) );
+		}
+		return header;
+	}
+	
+	private short readShort(){
+		try {
+			return this.dataInputStream.readShort();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private String readUnsignedByteString(){
+		try {
+			return readString( (this.dataInputStream.read() & 0xFF ));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private String readIntegerString(){
+		try {
+			return readString(this.dataInputStream.readInt());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private String readString(int length){
+		try {
+			char[] chars = new char[length];
+			for(int i = 0;i < chars.length; i++){
+				chars[i] = this.dataInputStream.readChar();
+			}
+			return String.copyValueOf(chars);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg10/TGStream.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg10/TGStream.java
new file mode 100644
index 0000000..41e6c29
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg10/TGStream.java
@@ -0,0 +1,146 @@
+package org.herac.tuxguitar.io.tg10;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.util.TGVersion;
+
+public class TGStream {
+	
+	public static final String TG_FORMAT_NAME = ("TuxGuitar File Format");
+	
+	public static final String TG_FORMAT_VERSION = (TG_FORMAT_NAME + " - " + new TGVersion(1,0,0).getVersion() );
+	
+	public static final String TG_FORMAT_EXTENSION = (".tg");
+	
+	protected static final int TRACK_LYRICS = 0x01;
+	
+	protected static final int CHANNEL_SOLO = 0x01;
+	
+	protected static final int CHANNEL_MUTE = 0x02;
+	
+	protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01;
+	
+	protected static final int MEASURE_HEADER_TEMPO = 0x02;
+	
+	protected static final int MEASURE_HEADER_REPEAT_OPEN = 0x04;
+	
+	protected static final int MEASURE_HEADER_REPEAT_CLOSE = 0x08;
+	
+	protected static final int MEASURE_HEADER_REPEAT_ALTERNATIVE = 0x10;
+	
+	protected static final int MEASURE_HEADER_MARKER = 0x20;
+	
+	protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x40;
+	
+	protected static final int MEASURE_CLEF = 0x01;
+	
+	protected static final int MEASURE_KEYSIGNATURE = 0x02;
+	
+	protected static final int BEAT_HAS_NEXT = 0x01;
+	
+	protected static final int BEAT_NEXT_DURATION = 0x02;
+	
+	protected static final int BEAT_HAS_NOTES = 0x04;
+	
+	protected static final int BEAT_HAS_CHORD = 0x08;
+	
+	protected static final int BEAT_HAS_TEXT = 0x10;
+	
+	protected static final int NOTE_HAS_NEXT = 0x01;
+	
+	protected static final int NOTE_TIED = 0x02;
+	
+	protected static final int NOTE_EFFECT = 0x04;
+	
+	protected static final int NOTE_VELOCITY = 0x08;
+	
+	protected static final int DURATION_DOTTED = 0x01;
+	
+	protected static final int DURATION_DOUBLE_DOTTED = 0x02;
+	
+	protected static final int DURATION_NO_TUPLET = 0x04;
+	
+	protected static final int EFFECT_BEND = 0x01;
+	
+	protected static final int EFFECT_TREMOLO_BAR = 0x02;
+	
+	protected static final int EFFECT_HARMONIC = 0x04;
+	
+	protected static final int EFFECT_GRACE = 0x08;
+	
+	protected static final int EFFECT_TRILL = 0x010;
+	
+	protected static final int EFFECT_TREMOLO_PICKING = 0x020;
+	
+	protected static final int EFFECT_VIBRATO = 0x040;
+	
+	protected static final int EFFECT_DEAD = 0x080;
+	
+	protected static final int EFFECT_SLIDE = 0x0100;
+	
+	protected static final int EFFECT_HAMMER = 0x0200;
+	
+	protected static final int EFFECT_GHOST = 0x0400;
+	
+	protected static final int EFFECT_ACCENTUATED = 0x0800;
+	
+	protected static final int EFFECT_HEAVY_ACCENTUATED = 0x01000;
+	
+	protected static final int EFFECT_PALM_MUTE = 0x02000;
+	
+	protected static final int EFFECT_STACCATO = 0x04000;
+	
+	protected static final int EFFECT_TAPPING = 0x08000;
+	
+	protected static final int EFFECT_SLAPPING = 0x010000;
+	
+	protected static final int EFFECT_POPPING = 0x020000;
+	
+	protected static final int EFFECT_FADE_IN = 0x040000;
+	
+	protected static final int GRACE_FLAG_DEAD = 0x01;
+	
+	protected static final int GRACE_FLAG_ON_BEAT = 0x02;
+	
+	protected class TGBeatData {
+		private long start;
+		private int velocity;
+		private TGDuration duration;
+		
+		protected TGBeatData(TGMeasure measure){
+			this.init(measure);
+		}
+		
+		private void init(TGMeasure measure){
+			this.setStart(measure.getStart());
+			this.setVelocity(TGVelocities.DEFAULT);
+			this.setDuration(new TGFactory().newDuration());
+		}
+		
+		public TGDuration getDuration() {
+			return this.duration;
+		}
+		
+		public void setDuration(TGDuration duration) {
+			this.duration = duration;
+		}
+		
+		public long getStart() {
+			return this.start;
+		}
+		
+		public void setStart(long start) {
+			this.start = start;
+		}
+		
+		public int getVelocity() {
+			return this.velocity;
+		}
+		
+		public void setVelocity(int velocity) {
+			this.velocity = velocity;
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg11/TGInputStream.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg11/TGInputStream.java
new file mode 100644
index 0000000..ed225d7
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg11/TGInputStream.java
@@ -0,0 +1,782 @@
+/*
+ * Created on 16-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.io.tg11;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGInputStream extends TGStream implements TGInputStreamBase{
+	
+	private DataInputStream dataInputStream;
+	private String version;
+	private TGFactory factory;
+	
+	public TGInputStream() {
+		super();
+	}
+	
+	public void init(TGFactory factory,InputStream stream) {
+		this.factory = factory;
+		this.dataInputStream = new DataInputStream(stream);
+		this.version = null;
+	}
+	
+	public TGFileFormat getFileFormat(){
+		return new TGFileFormat("TuxGuitar","*.tg");
+	}
+	
+	public boolean isSupportedVersion(String version){
+		return (version.equals(TG_FORMAT_VERSION));
+	}
+	
+	public boolean isSupportedVersion(){
+		try{
+			readVersion();
+			return isSupportedVersion(this.version);
+		}catch(Throwable throwable){
+			return false;
+		}
+	}
+	
+	public TGSong readSong() throws TGFileFormatException{
+		try {
+			if(this.isSupportedVersion()){
+				TGSong song = this.read();
+				this.dataInputStream.close();
+				return song;
+			}
+			throw new TGFileFormatException("Unsopported Version");
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
+		}
+	}
+	
+	private void readVersion(){
+		if(this.version == null){
+			this.version = readUnsignedByteString();
+		}
+	}
+	
+	private TGSong read(){
+		TGSong song = this.factory.newSong();
+		
+		//leo el nombre
+		song.setName(readUnsignedByteString());
+		
+		//leo el artista
+		song.setArtist(readUnsignedByteString());
+		
+		//leo el album
+		song.setAlbum(readUnsignedByteString());
+		
+		//leo el autor
+		song.setAuthor(readUnsignedByteString());
+		
+		//leo la cantidad de measure headers
+		int headerCount = readShort();
+		
+		//leo las pistas
+		TGMeasureHeader lastHeader = null;
+		long headerStart = TGDuration.QUARTER_TIME;
+		for(int i = 0;i < headerCount;i++){
+			TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader);
+			song.addMeasureHeader(header);
+			headerStart += header.getLength();
+			lastHeader = header;
+		}
+		
+		//leo la cantidad de pistas
+		int trackCount = readByte();
+		
+		//leo las pistas
+		for(int i = 0;i < trackCount;i++){
+			song.addTrack(readTrack(i + 1,song));
+		}
+		
+		return song;
+	}
+	
+	private TGTrack readTrack(int number,TGSong song){
+		//header
+		int header = readHeader();
+		
+		TGTrack track = this.factory.newTrack();
+		
+		track.setNumber(number);
+		
+		//leo el nombre
+		track.setName(readUnsignedByteString());
+		
+		//leo el solo
+		track.setSolo((header & TRACK_SOLO) != 0);
+		
+		//leo el mute
+		track.setMute((header & TRACK_MUTE) != 0);
+		
+		//leo el canal
+		readChannel(song, track);
+		
+		//leo la cantidad de compases
+		int measureCount = song.countMeasureHeaders();
+		
+		//leo los compases
+		TGMeasure lastMeasure = null;
+		for(int i = 0;i < measureCount;i++){
+			TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure);
+			track.addMeasure(measure);
+			lastMeasure = measure;
+		}
+		
+		//leo la cantidad de cuerdas
+		int stringCount = readByte();
+		
+		//leo las cuerdas
+		for(int i = 0;i < stringCount;i++){
+			track.getStrings().add(readInstrumentString(i + 1));
+		}
+		
+		//leo el offset
+		track.setOffset(TGTrack.MIN_OFFSET + readByte());
+		
+		//leo el color
+		readRGBColor(track.getColor());
+		
+		//leo el lyrics
+		if(((header & TRACK_LYRICS) != 0)){
+			readLyrics(track.getLyrics());
+		}
+		
+		return track;
+	}
+	
+	private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){
+		int header = readHeader();
+		
+		TGMeasureHeader measureHeader = this.factory.newHeader();
+		measureHeader.setNumber(number);
+		measureHeader.setStart(start);
+		
+		//leo el time signature
+		if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){
+			readTimeSignature(measureHeader.getTimeSignature());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature());
+		}
+		
+		//leo el tempo
+		if(((header & MEASURE_HEADER_TEMPO) != 0)){
+			readTempo(measureHeader.getTempo());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTempo().copy(measureHeader.getTempo());
+		}
+		
+		//leo el comienzo de la repeticion
+		measureHeader.setRepeatOpen((header & MEASURE_HEADER_REPEAT_OPEN) != 0);
+		
+		//leo el numero de repeticiones
+		if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){
+			 measureHeader.setRepeatClose(readShort());
+		}
+		
+		//leo los finales alternativos
+		if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){
+			 measureHeader.setRepeatAlternative(readByte());
+		}
+		
+		//leo el marker
+		if(((header & MEASURE_HEADER_MARKER) != 0)){
+			measureHeader.setMarker(readMarker(number));
+		}
+		
+		measureHeader.setTripletFeel((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE);
+		if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){
+			measureHeader.setTripletFeel(readByte());
+		}
+		
+		return measureHeader;
+	}
+	
+	private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){
+		int header = readHeader();
+		
+		TGMeasure measure = this.factory.newMeasure(measureHeader);
+		TGBeatData data = new TGBeatData(measure);
+		
+		//leo la los beats
+		readBeats(measure, data);
+		
+		//leo la clave
+		measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef());
+		if(((header & MEASURE_CLEF) != 0)){
+			measure.setClef(readByte());
+		}
+		
+		//leo el key signature
+		measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature());
+		if(((header & MEASURE_KEYSIGNATURE) != 0)){
+			measure.setKeySignature(readByte());
+		}
+		
+		return measure;
+	}
+	
+	private void readChannel(TGSong song, TGTrack track){
+		TGChannel channel = this.factory.newChannel();
+		TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+		TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+		
+		//leo el canal
+		int channel1 = (readByte() & 0xff);
+		gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+		gmChannel1Param.setValue(Integer.toString(channel1));
+		
+		//leo el canal de efectos
+		int channel2 = (readByte() & 0xff);
+		gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+		gmChannel2Param.setValue(Integer.toString(channel2));
+		
+		// Parseo el banco de sonidos
+		channel.setBank( channel1 == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+		
+		//leo el instrumento
+		channel.setProgram(readByte());
+		
+		//leo el volumen
+		channel.setVolume(readByte());
+		
+		//leo el balance
+		channel.setBalance(readByte());
+		
+		//leo el chorus
+		channel.setChorus(readByte());
+		
+		//leo el reverb
+		channel.setReverb(readByte());
+		
+		//leo el phaser
+		channel.setPhaser(readByte());
+		
+		//leo el tremolo
+		channel.setTremolo(readByte());
+		
+		//------------------------------------------//
+		for( int i = 0 ; i < song.countChannels() ; i ++ ){
+			TGChannel channelAux = song.getChannel(i);
+			for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+				TGChannelParameter channelParameter = channelAux.getParameter( n );
+				if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+					if( Integer.toString(channel1).equals(channelParameter.getValue()) ){
+						channel.setChannelId(channelAux.getChannelId());
+					}
+				}
+			}
+		}
+		if( channel.getChannelId() <= 0 ){
+			channel.setChannelId( song.countChannels() + 1 );
+			channel.setName(("#" + channel.getChannelId()));
+			channel.addParameter(gmChannel1Param);
+			channel.addParameter(gmChannel2Param);
+			song.addChannel(channel);
+		}
+		track.setChannelId(channel.getChannelId());
+	}
+	
+	private void readBeats(TGMeasure measure,TGBeatData data){
+		int header = BEAT_HAS_NEXT;
+		while(((header & BEAT_HAS_NEXT) != 0)){
+			header = readHeader();
+			readBeat(header, measure, data);
+		}
+	}
+	
+	private void readBeat(int header, TGMeasure measure,TGBeatData data){
+		TGBeat beat = this.factory.newBeat();
+		
+		beat.setStart(data.getCurrentStart());
+		
+		readVoices(header, beat, data);
+		
+		//leo el stroke
+		if(((header & BEAT_HAS_STROKE) != 0)){
+			readStroke(beat.getStroke());
+		}
+		
+		//leo el acorde
+		if(((header & BEAT_HAS_CHORD) != 0)){
+			readChord(beat);
+		}
+		
+		//leo el texto
+		if(((header & BEAT_HAS_TEXT) != 0)){
+			readText(beat);
+		}
+		
+		measure.addBeat(beat);
+	}
+	
+	private void readVoices(int header, TGBeat beat, TGBeatData data){
+		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
+			int shift = (i * 2 );
+			
+			beat.getVoice(i).setEmpty(true);
+			
+			if(((header & (BEAT_HAS_VOICE << shift)) != 0)){
+				if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){
+					data.getVoice(i).setFlags( readHeader() );
+				}
+				
+				int flags = data.getVoice(i).getFlags();
+				
+				//leo la duracion
+				if(((flags & VOICE_NEXT_DURATION) != 0)){
+					readDuration(data.getVoice(i).getDuration());
+				}
+				
+				//leo las notas
+				if(((flags & VOICE_HAS_NOTES) != 0)){
+					readNotes(beat.getVoice(i), data);
+				}
+				
+				//leo la direccion
+				if(((flags & VOICE_DIRECTION_UP) != 0)){
+					beat.getVoice(i).setDirection( TGVoice.DIRECTION_UP );
+				}
+				else if(((flags & VOICE_DIRECTION_DOWN) != 0)){
+					beat.getVoice(i).setDirection( TGVoice.DIRECTION_DOWN );
+				}
+				data.getVoice(i).getDuration().copy(beat.getVoice(i).getDuration());
+				data.getVoice(i).setStart(data.getVoice(i).getStart() + beat.getVoice(i).getDuration().getTime());
+				
+				beat.getVoice(i).setEmpty(false);
+			}
+		}
+	}
+	
+	private void readNotes(TGVoice voice,TGBeatData data){
+		int header = NOTE_HAS_NEXT;
+		while(((header & NOTE_HAS_NEXT) != 0)){
+			header = readHeader();
+			readNote(header, voice, data);
+		}
+	}
+	
+	private void readNote(int header,TGVoice voice,TGBeatData data){
+		TGNote note = this.factory.newNote();
+		
+		//leo el valor
+		note.setValue(readByte());
+		
+		//leo la cuerda
+		note.setString(readByte());
+		
+		//leo la ligadura
+		note.setTiedNote((header & NOTE_TIED) != 0);
+		
+		//leo el velocity
+		if(((header & NOTE_VELOCITY) != 0)){
+			data.getVoice(voice.getIndex()).setVelocity(readByte());
+		}
+		note.setVelocity(data.getVoice(voice.getIndex()).getVelocity());
+		
+		//leo los efectos
+		if(((header & NOTE_EFFECT) != 0)){
+			readNoteEffect(note.getEffect());
+		}
+		
+		voice.addNote(note);
+	}
+	
+	private void readChord(TGBeat beat){
+		TGChord chord = this.factory.newChord(readByte());
+		
+		//leo el nombre
+		chord.setName( readUnsignedByteString() );
+		
+		//leo el primer fret
+		chord.setFirstFret(readByte());
+		
+		//leo las cuerdas
+		for(int string = 0; string < chord.countStrings(); string ++){
+			chord.addFretValue(string, readByte());
+		}
+		beat.setChord(chord);
+	}
+	
+	private void readText(TGBeat beat){
+		TGText text = this.factory.newText();
+		
+		//leo el texto
+		text.setValue(readUnsignedByteString());
+		
+		beat.setText(text);
+	}
+	
+	private TGString readInstrumentString(int number){
+		TGString string = this.factory.newString();
+		
+		string.setNumber(number);
+		
+		//leo el valor
+		string.setValue(readByte());
+		
+		return string;
+	}
+	
+	private void readTempo(TGTempo tempo){
+		//leo el valor
+		tempo.setValue(readShort());
+	}
+	
+	private void readTimeSignature(TGTimeSignature timeSignature){
+		//leo el numerador
+		timeSignature.setNumerator(readByte());
+		
+		//leo el denominador
+		readDuration(timeSignature.getDenominator());
+	}
+	
+	private void readDuration(TGDuration duration){
+		int header = readHeader();
+		
+		// leo el puntillo
+		duration.setDotted((header & DURATION_DOTTED) != 0);
+		
+		//leo el doble puntillo
+		duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0);
+		
+		//leo el valor
+		duration.setValue(readByte());
+		
+		//leo el tipo de divisiones
+		if(((header & DURATION_NO_TUPLET) != 0)){
+			readDivisionType(duration.getDivision());
+		}
+		else{
+			TGDivisionType.NORMAL.copy(duration.getDivision());
+		}
+	}
+	
+	private void readDivisionType(TGDivisionType divisionType){
+		//leo los enters
+		divisionType.setEnters(readByte());
+		
+		//leo los tiempos
+		divisionType.setTimes(readByte());
+	}
+	
+	private void readStroke(TGStroke stroke){
+		//leo la direccion
+		stroke.setDirection( readByte() );
+		
+		//leo el valor
+		stroke.setValue( readByte() );
+	}
+	
+	private void readNoteEffect(TGNoteEffect effect){
+		int header = readHeader(3);
+		
+		//leo el bend
+		if(((header & EFFECT_BEND) != 0)){
+			effect.setBend(readBendEffect());
+		}
+		
+		//leo el tremolo bar
+		if(((header & EFFECT_TREMOLO_BAR) != 0)){
+			effect.setTremoloBar(readTremoloBarEffect());
+		}
+		
+		//leo el harmonic
+		if(((header & EFFECT_HARMONIC) != 0)){
+			effect.setHarmonic(readHarmonicEffect());
+		}
+		
+		//leo el grace
+		if(((header & EFFECT_GRACE) != 0)){
+			effect.setGrace(readGraceEffect());
+		}
+		
+		//leo el trill
+		if(((header & EFFECT_TRILL) != 0)){
+			effect.setTrill(readTrillEffect());
+		}
+		
+		//leo el tremolo picking
+		if(((header & EFFECT_TREMOLO_PICKING) != 0)){
+			effect.setTremoloPicking(readTremoloPickingEffect());
+		}
+		
+		//vibrato
+		effect.setVibrato(((header & EFFECT_VIBRATO) != 0));
+		
+		//dead note
+		effect.setDeadNote(((header & EFFECT_DEAD) != 0));
+		
+		//slide
+		effect.setSlide(((header & EFFECT_SLIDE) != 0));
+		
+		//hammer-on/pull-off
+		effect.setHammer(((header & EFFECT_HAMMER) != 0));
+		
+		//ghost note
+		effect.setGhostNote(((header & EFFECT_GHOST) != 0));
+		
+		//accentuated note
+		effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0));
+		
+		//heavy accentuated note
+		effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0));
+		
+		//palm mute
+		effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0));
+		
+		//staccato
+		effect.setStaccato(((header & EFFECT_STACCATO) != 0));
+		
+		//tapping
+		effect.setTapping(((header & EFFECT_TAPPING) != 0));
+		
+		//slapping
+		effect.setSlapping(((header & EFFECT_SLAPPING) != 0));
+		
+		//popping
+		effect.setPopping(((header & EFFECT_POPPING) != 0));
+		
+		//fade in
+		effect.setFadeIn(((header & EFFECT_FADE_IN) != 0));
+	}
+	
+	private TGEffectBend readBendEffect(){
+		TGEffectBend bend = this.factory.newEffectBend();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value = readByte();
+			
+			//agrego el punto
+			bend.addPoint(position,value);
+		}
+		return bend;
+	}
+	
+	private TGEffectTremoloBar readTremoloBarEffect(){
+		TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value =  (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH);
+			
+			//agrego el punto
+			tremoloBar.addPoint(position,value);
+		}
+		return tremoloBar;
+	}
+	
+	private TGEffectHarmonic readHarmonicEffect(){
+		TGEffectHarmonic effect = this.factory.newEffectHarmonic();
+		
+		//leo el tipo
+		effect.setType(readByte());
+		
+		//leo la data
+		if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){
+			effect.setData(readByte());
+		}
+		return effect;
+	}
+	
+	private TGEffectGrace readGraceEffect(){
+		int header = readHeader();
+		
+		TGEffectGrace effect = this.factory.newEffectGrace();
+		
+		effect.setDead((header & GRACE_FLAG_DEAD) != 0) ;
+		
+		effect.setOnBeat((header & GRACE_FLAG_ON_BEAT) != 0) ;
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.setDuration(readByte());
+		
+		//leo el velocity
+		effect.setDynamic(readByte());
+		
+		//leo la transicion
+		effect.setTransition(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTremoloPicking readTremoloPickingEffect(){
+		TGEffectTremoloPicking effect = this.factory.newEffectTremoloPicking();
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTrill readTrillEffect(){
+		TGEffectTrill effect = this.factory.newEffectTrill();
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGMarker readMarker(int measure){
+		TGMarker marker = this.factory.newMarker();
+		
+		marker.setMeasure(measure);
+		
+		//leo el titulo
+		marker.setTitle(readUnsignedByteString());
+		
+		//leo el color
+		readRGBColor(marker.getColor());
+		
+		return marker;
+	}
+	
+	private void readRGBColor(TGColor color){
+		//leo el RGB
+		color.setR((readByte() & 0xff));
+		color.setG((readByte() & 0xff));
+		color.setB((readByte() & 0xff));
+	}
+	
+	private void readLyrics(TGLyric lyrics){
+		//leo el compas de comienzo
+		lyrics.setFrom(readShort());
+		
+		//leo el texto
+		lyrics.setLyrics(readIntegerString());
+	}
+	
+	private byte readByte(){
+		try {
+			return (byte)this.dataInputStream.read();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private int readHeader(){
+		try {
+			return this.dataInputStream.read();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private int readHeader(int bCount){
+		int header = 0;
+		for(int i = bCount; i > 0; i --){
+			header += ( readHeader() << ( (8 * i) - 8 ) );
+		}
+		return header;
+	}
+	
+	private short readShort(){
+		try {
+			return this.dataInputStream.readShort();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private String readUnsignedByteString(){
+		try {
+			return readString( (this.dataInputStream.read() & 0xFF ));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private String readIntegerString(){
+		try {
+			return readString(this.dataInputStream.readInt());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private String readString(int length){
+		try {
+			char[] chars = new char[length];
+			for(int i = 0;i < chars.length; i++){
+				chars[i] = this.dataInputStream.readChar();
+			}
+			return String.copyValueOf(chars);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg11/TGStream.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg11/TGStream.java
new file mode 100644
index 0000000..5c460dd
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg11/TGStream.java
@@ -0,0 +1,203 @@
+package org.herac.tuxguitar.io.tg11;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.util.TGVersion;
+
+public class TGStream {
+	
+	public static final String TG_FORMAT_NAME = ("TuxGuitar File Format");
+	
+	public static final String TG_FORMAT_VERSION = (TG_FORMAT_NAME + " - " + new TGVersion(1,1,0).getVersion() );
+	
+	public static final String TG_FORMAT_EXTENSION = (".tg");
+	
+	protected static final int TRACK_SOLO = 0x01;
+	
+	protected static final int TRACK_MUTE = 0x02;
+	
+	protected static final int TRACK_LYRICS = 0x04;
+	
+	protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01;
+	
+	protected static final int MEASURE_HEADER_TEMPO = 0x02;
+	
+	protected static final int MEASURE_HEADER_REPEAT_OPEN = 0x04;
+	
+	protected static final int MEASURE_HEADER_REPEAT_CLOSE = 0x08;
+	
+	protected static final int MEASURE_HEADER_REPEAT_ALTERNATIVE = 0x10;
+	
+	protected static final int MEASURE_HEADER_MARKER = 0x20;
+	
+	protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x40;
+	
+	protected static final int MEASURE_CLEF = 0x01;
+	
+	protected static final int MEASURE_KEYSIGNATURE = 0x02;
+	
+	protected static final int BEAT_HAS_NEXT = 0x01;
+	
+	protected static final int BEAT_HAS_STROKE = 0x02;
+	
+	protected static final int BEAT_HAS_CHORD = 0x04;
+	
+	protected static final int BEAT_HAS_TEXT = 0x08;
+	
+	protected static final int BEAT_HAS_VOICE = 0x10;
+	
+	protected static final int BEAT_HAS_VOICE_CHANGES = 0x20;
+	
+	protected static final int VOICE_HAS_NOTES = 0x01;
+	
+	protected static final int VOICE_NEXT_DURATION = 0x02;
+	
+	protected static final int VOICE_DIRECTION_UP = 0x04;
+	
+	protected static final int VOICE_DIRECTION_DOWN = 0x08;
+	
+	protected static final int NOTE_HAS_NEXT = 0x01;
+	
+	protected static final int NOTE_TIED = 0x02;
+	
+	protected static final int NOTE_EFFECT = 0x04;
+	
+	protected static final int NOTE_VELOCITY = 0x08;
+	
+	protected static final int DURATION_DOTTED = 0x01;
+	
+	protected static final int DURATION_DOUBLE_DOTTED = 0x02;
+	
+	protected static final int DURATION_NO_TUPLET = 0x04;
+	
+	protected static final int EFFECT_BEND = 0x01;
+	
+	protected static final int EFFECT_TREMOLO_BAR = 0x02;
+	
+	protected static final int EFFECT_HARMONIC = 0x04;
+	
+	protected static final int EFFECT_GRACE = 0x08;
+	
+	protected static final int EFFECT_TRILL = 0x010;
+	
+	protected static final int EFFECT_TREMOLO_PICKING = 0x020;
+	
+	protected static final int EFFECT_VIBRATO = 0x040;
+	
+	protected static final int EFFECT_DEAD = 0x080;
+	
+	protected static final int EFFECT_SLIDE = 0x0100;
+	
+	protected static final int EFFECT_HAMMER = 0x0200;
+	
+	protected static final int EFFECT_GHOST = 0x0400;
+	
+	protected static final int EFFECT_ACCENTUATED = 0x0800;
+	
+	protected static final int EFFECT_HEAVY_ACCENTUATED = 0x01000;
+	
+	protected static final int EFFECT_PALM_MUTE = 0x02000;
+	
+	protected static final int EFFECT_STACCATO = 0x04000;
+	
+	protected static final int EFFECT_TAPPING = 0x08000;
+	
+	protected static final int EFFECT_SLAPPING = 0x010000;
+	
+	protected static final int EFFECT_POPPING = 0x020000;
+	
+	protected static final int EFFECT_FADE_IN = 0x040000;
+	
+	protected static final int GRACE_FLAG_DEAD = 0x01;
+	
+	protected static final int GRACE_FLAG_ON_BEAT = 0x02;
+	
+	protected class TGBeatData {
+		private long currentStart;
+		private TGVoiceData[] voices;
+		
+		protected TGBeatData(TGMeasure measure){
+			this.init(measure);
+		}
+		
+		private void init(TGMeasure measure){
+			this.currentStart = measure.getStart();
+			this.voices = new TGVoiceData[TGBeat.MAX_VOICES];
+			for(int i = 0 ; i < this.voices.length ; i ++ ){
+				this.voices[i] = new TGVoiceData(measure);
+			}
+		}
+		
+		protected TGVoiceData getVoice(int index){
+			return this.voices[index];
+		}
+		
+		public long getCurrentStart(){
+			long minimumStart = -1;
+			for(int i = 0 ; i < this.voices.length ; i ++ ){
+				if( this.voices[i].getStart() > this.currentStart ){
+					if( minimumStart < 0 || this.voices[i].getStart() < minimumStart ){
+						minimumStart = this.voices[i].getStart();
+					}
+				}
+			}
+			if( minimumStart > this.currentStart ){
+				this.currentStart = minimumStart;
+			}
+			return this.currentStart;
+		}
+	}
+	
+	protected class TGVoiceData {
+		private long start;
+		private int velocity;
+		private int flags;
+		private TGDuration duration;
+		
+		protected TGVoiceData(TGMeasure measure){
+			this.init(measure);
+		}
+		
+		private void init(TGMeasure measure){
+			this.flags = 0;
+			this.setStart(measure.getStart());
+			this.setVelocity(TGVelocities.DEFAULT);
+			this.setDuration(new TGFactory().newDuration());
+		}
+		
+		public TGDuration getDuration() {
+			return this.duration;
+		}
+		
+		public void setDuration(TGDuration duration) {
+			this.duration = duration;
+		}
+		
+		public long getStart() {
+			return this.start;
+		}
+		
+		public void setStart(long start) {
+			this.start = start;
+		}
+		
+		public int getVelocity() {
+			return this.velocity;
+		}
+		
+		public void setVelocity(int velocity) {
+			this.velocity = velocity;
+		}
+		
+		public int getFlags() {
+			return this.flags;
+		}
+		
+		public void setFlags(int flags) {
+			this.flags = flags;
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg12/TGInputStream.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg12/TGInputStream.java
new file mode 100644
index 0000000..0d85f2c
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg12/TGInputStream.java
@@ -0,0 +1,800 @@
+/*
+ * Created on 16-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.io.tg12;
+
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.herac.tuxguitar.gm.GMChannelRoute;
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGInputStreamBase;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChannelParameter;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGMarker;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGNoteEffect;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGStroke;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.song.models.TGText;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGInputStream extends TGStream implements TGInputStreamBase{
+	
+	private DataInputStream dataInputStream;
+	private String version;
+	private TGFactory factory;
+	
+	public TGInputStream() {
+		super();
+	}
+	
+	public void init(TGFactory factory,InputStream stream) {
+		this.factory = factory;
+		this.dataInputStream = new DataInputStream(stream);
+		this.version = null;
+	}
+	
+	public TGFileFormat getFileFormat(){
+		return new TGFileFormat("TuxGuitar","*.tg");
+	}
+	
+	public boolean isSupportedVersion(String version){
+		return (version.equals(TG_FORMAT_VERSION));
+	}
+	
+	public boolean isSupportedVersion(){
+		try{
+			readVersion();
+			return isSupportedVersion(this.version);
+		}catch(Throwable throwable){
+			return false;
+		}
+	}
+	
+	public TGSong readSong() throws TGFileFormatException{
+		try {
+			if(this.isSupportedVersion()){
+				TGSong song = this.read();
+				this.dataInputStream.close();
+				return song;
+			}
+			throw new TGFileFormatException("Unsopported Version");
+		} catch (Throwable throwable) {
+			throw new TGFileFormatException(throwable);
+		}
+	}
+	
+	private void readVersion(){
+		if(this.version == null){
+			this.version = readUnsignedByteString();
+		}
+	}
+	
+	private TGSong read(){
+		TGSong song = this.factory.newSong();
+		
+		//leo el nombre
+		song.setName(readUnsignedByteString());
+		
+		//leo el artista
+		song.setArtist(readUnsignedByteString());
+		
+		//leo el album
+		song.setAlbum(readUnsignedByteString());
+		
+		//leo el autor
+		song.setAuthor(readUnsignedByteString());
+		
+		//leo la fecha
+		song.setDate(readUnsignedByteString());
+		
+		//leo el copyright
+		song.setCopyright(readUnsignedByteString());
+		
+		//leo el creador
+		song.setWriter(readUnsignedByteString());
+		
+		//leo el transcriptor
+		song.setTranscriber(readUnsignedByteString());
+		
+		//leo los comentarios
+		song.setComments(readIntegerString());
+		
+		//leo la cantidad de measure headers
+		int headerCount = readShort();
+		
+		//leo las pistas
+		TGMeasureHeader lastHeader = null;
+		long headerStart = TGDuration.QUARTER_TIME;
+		for(int i = 0;i < headerCount;i++){
+			TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader);
+			song.addMeasureHeader(header);
+			headerStart += header.getLength();
+			lastHeader = header;
+		}
+		
+		//leo la cantidad de pistas
+		int trackCount = readByte();
+		
+		//leo las pistas
+		for(int i = 0;i < trackCount;i++){
+			song.addTrack(readTrack(i + 1,song));
+		}
+		
+		return song;
+	}
+	
+	private TGTrack readTrack(int number,TGSong song){
+		//header
+		int header = readHeader();
+		
+		TGTrack track = this.factory.newTrack();
+		
+		track.setNumber(number);
+		
+		//leo el nombre
+		track.setName(readUnsignedByteString());
+		
+		//leo el solo
+		track.setSolo((header & TRACK_SOLO) != 0);
+		
+		//leo el mute
+		track.setMute((header & TRACK_MUTE) != 0);
+		
+		//leo el canal
+		readChannel(song, track);
+		
+		//leo la cantidad de compases
+		int measureCount = song.countMeasureHeaders();
+		
+		//leo los compases
+		TGMeasure lastMeasure = null;
+		for(int i = 0;i < measureCount;i++){
+			TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure);
+			track.addMeasure(measure);
+			lastMeasure = measure;
+		}
+		
+		//leo la cantidad de cuerdas
+		int stringCount = readByte();
+		
+		//leo las cuerdas
+		for(int i = 0;i < stringCount;i++){
+			track.getStrings().add(readInstrumentString(i + 1));
+		}
+		
+		//leo el offset
+		track.setOffset(TGTrack.MIN_OFFSET + readByte());
+		
+		//leo el color
+		readRGBColor(track.getColor());
+		
+		//leo el lyrics
+		if(((header & TRACK_LYRICS) != 0)){
+			readLyrics(track.getLyrics());
+		}
+		
+		return track;
+	}
+	
+	private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){
+		int header = readHeader();
+		
+		TGMeasureHeader measureHeader = this.factory.newHeader();
+		measureHeader.setNumber(number);
+		measureHeader.setStart(start);
+		
+		//leo el time signature
+		if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){
+			readTimeSignature(measureHeader.getTimeSignature());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature());
+		}
+		
+		//leo el tempo
+		if(((header & MEASURE_HEADER_TEMPO) != 0)){
+			readTempo(measureHeader.getTempo());
+		}else if(lastMeasureHeader != null){
+			lastMeasureHeader.getTempo().copy(measureHeader.getTempo());
+		}
+		
+		//leo el comienzo de la repeticion
+		measureHeader.setRepeatOpen((header & MEASURE_HEADER_REPEAT_OPEN) != 0);
+		
+		//leo el numero de repeticiones
+		if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){
+			 measureHeader.setRepeatClose(readShort());
+		}
+		
+		//leo los finales alternativos
+		if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){
+			 measureHeader.setRepeatAlternative(readByte());
+		}
+		
+		//leo el marker
+		if(((header & MEASURE_HEADER_MARKER) != 0)){
+			measureHeader.setMarker(readMarker(number));
+		}
+		
+		measureHeader.setTripletFeel((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE);
+		if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){
+			measureHeader.setTripletFeel(readByte());
+		}
+		
+		return measureHeader;
+	}
+	
+	private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){
+		int header = readHeader();
+		
+		TGMeasure measure = this.factory.newMeasure(measureHeader);
+		TGBeatData data = new TGBeatData(measure);
+		
+		//leo la los beats
+		readBeats(measure, data);
+		
+		//leo la clave
+		measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef());
+		if(((header & MEASURE_CLEF) != 0)){
+			measure.setClef(readByte());
+		}
+		
+		//leo el key signature
+		measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature());
+		if(((header & MEASURE_KEYSIGNATURE) != 0)){
+			measure.setKeySignature(readByte());
+		}
+		
+		return measure;
+	}
+	
+	private void readChannel(TGSong song, TGTrack track){
+		TGChannel channel = this.factory.newChannel();
+		TGChannelParameter gmChannel1Param = this.factory.newChannelParameter();
+		TGChannelParameter gmChannel2Param = this.factory.newChannelParameter();
+		
+		//leo el canal
+		int channel1 = (readByte() & 0xff);
+		gmChannel1Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_1);
+		gmChannel1Param.setValue(Integer.toString(channel1));
+		
+		//leo el canal de efectos
+		int channel2 = (readByte() & 0xff);
+		gmChannel2Param.setKey(GMChannelRoute.PARAMETER_GM_CHANNEL_2);
+		gmChannel2Param.setValue(Integer.toString(channel2));
+		
+		// Parseo el banco de sonidos
+		channel.setBank( channel1 == 9 ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+		
+		//leo el instrumento
+		channel.setProgram(readByte());
+		
+		//leo el volumen
+		channel.setVolume(readByte());
+		
+		//leo el balance
+		channel.setBalance(readByte());
+		
+		//leo el chorus
+		channel.setChorus(readByte());
+		
+		//leo el reverb
+		channel.setReverb(readByte());
+		
+		//leo el phaser
+		channel.setPhaser(readByte());
+		
+		//leo el tremolo
+		channel.setTremolo(readByte());
+		
+		//------------------------------------------//
+		for( int i = 0 ; i < song.countChannels() ; i ++ ){
+			TGChannel channelAux = song.getChannel(i);
+			for( int n = 0 ; n < channelAux.countParameters() ; n ++ ){
+				TGChannelParameter channelParameter = channelAux.getParameter( n );
+				if( channelParameter.getKey().equals(GMChannelRoute.PARAMETER_GM_CHANNEL_1) ){
+					if( Integer.toString(channel1).equals(channelParameter.getValue()) ){
+						channel.setChannelId(channelAux.getChannelId());
+					}
+				}
+			}
+		}
+		if( channel.getChannelId() <= 0 ){
+			channel.setChannelId( song.countChannels() + 1 );
+			channel.setName(("#" + channel.getChannelId()));
+			channel.addParameter(gmChannel1Param);
+			channel.addParameter(gmChannel2Param);
+			song.addChannel(channel);
+		}
+		track.setChannelId(channel.getChannelId());
+	}
+	
+	private void readBeats(TGMeasure measure,TGBeatData data){
+		int header = BEAT_HAS_NEXT;
+		while(((header & BEAT_HAS_NEXT) != 0)){
+			header = readHeader();
+			readBeat(header, measure, data);
+		}
+	}
+	
+	private void readBeat(int header, TGMeasure measure,TGBeatData data){
+		TGBeat beat = this.factory.newBeat();
+		
+		beat.setStart(data.getCurrentStart());
+		
+		readVoices(header, beat, data);
+		
+		//leo el stroke
+		if(((header & BEAT_HAS_STROKE) != 0)){
+			readStroke(beat.getStroke());
+		}
+		
+		//leo el acorde
+		if(((header & BEAT_HAS_CHORD) != 0)){
+			readChord(beat);
+		}
+		
+		//leo el texto
+		if(((header & BEAT_HAS_TEXT) != 0)){
+			readText(beat);
+		}
+		
+		measure.addBeat(beat);
+	}
+	
+	private void readVoices(int header, TGBeat beat, TGBeatData data){
+		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
+			int shift = (i * 2 );
+			
+			beat.getVoice(i).setEmpty(true);
+			
+			if(((header & (BEAT_HAS_VOICE << shift)) != 0)){
+				if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){
+					data.getVoice(i).setFlags( readHeader() );
+				}
+				
+				int flags = data.getVoice(i).getFlags();
+				
+				//leo la duracion
+				if(((flags & VOICE_NEXT_DURATION) != 0)){
+					readDuration(data.getVoice(i).getDuration());
+				}
+				
+				//leo las notas
+				if(((flags & VOICE_HAS_NOTES) != 0)){
+					readNotes(beat.getVoice(i), data);
+				}
+				
+				//leo la direccion
+				if(((flags & VOICE_DIRECTION_UP) != 0)){
+					beat.getVoice(i).setDirection( TGVoice.DIRECTION_UP );
+				}
+				else if(((flags & VOICE_DIRECTION_DOWN) != 0)){
+					beat.getVoice(i).setDirection( TGVoice.DIRECTION_DOWN );
+				}
+				data.getVoice(i).getDuration().copy(beat.getVoice(i).getDuration());
+				data.getVoice(i).setStart(data.getVoice(i).getStart() + beat.getVoice(i).getDuration().getTime());
+				
+				beat.getVoice(i).setEmpty(false);
+			}
+		}
+	}
+	
+	private void readNotes(TGVoice voice,TGBeatData data){
+		int header = NOTE_HAS_NEXT;
+		while(((header & NOTE_HAS_NEXT) != 0)){
+			header = readHeader();
+			readNote(header, voice, data);
+		}
+	}
+	
+	private void readNote(int header,TGVoice voice,TGBeatData data){
+		TGNote note = this.factory.newNote();
+		
+		//leo el valor
+		note.setValue(readByte());
+		
+		//leo la cuerda
+		note.setString(readByte());
+		
+		//leo la ligadura
+		note.setTiedNote((header & NOTE_TIED) != 0);
+		
+		//leo el velocity
+		if(((header & NOTE_VELOCITY) != 0)){
+			data.getVoice(voice.getIndex()).setVelocity(readByte());
+		}
+		note.setVelocity(data.getVoice(voice.getIndex()).getVelocity());
+		
+		//leo los efectos
+		if(((header & NOTE_EFFECT) != 0)){
+			readNoteEffect(note.getEffect());
+		}
+		
+		voice.addNote(note);
+	}
+	
+	private void readChord(TGBeat beat){
+		TGChord chord = this.factory.newChord(readByte());
+		
+		//leo el nombre
+		chord.setName( readUnsignedByteString() );
+		
+		//leo el primer fret
+		chord.setFirstFret(readByte());
+		
+		//leo las cuerdas
+		for(int string = 0; string < chord.countStrings(); string ++){
+			chord.addFretValue(string, readByte());
+		}
+		beat.setChord(chord);
+	}
+	
+	private void readText(TGBeat beat){
+		TGText text = this.factory.newText();
+		
+		//leo el texto
+		text.setValue(readUnsignedByteString());
+		
+		beat.setText(text);
+	}
+	
+	private TGString readInstrumentString(int number){
+		TGString string = this.factory.newString();
+		
+		string.setNumber(number);
+		
+		//leo el valor
+		string.setValue(readByte());
+		
+		return string;
+	}
+	
+	private void readTempo(TGTempo tempo){
+		//leo el valor
+		tempo.setValue(readShort());
+	}
+	
+	private void readTimeSignature(TGTimeSignature timeSignature){
+		//leo el numerador
+		timeSignature.setNumerator(readByte());
+		
+		//leo el denominador
+		readDuration(timeSignature.getDenominator());
+	}
+	
+	private void readDuration(TGDuration duration){
+		int header = readHeader();
+		
+		// leo el puntillo
+		duration.setDotted((header & DURATION_DOTTED) != 0);
+		
+		//leo el doble puntillo
+		duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0);
+		
+		//leo el valor
+		duration.setValue(readByte());
+		
+		//leo el tipo de divisiones
+		if(((header & DURATION_NO_TUPLET) != 0)){
+			readDivisionType(duration.getDivision());
+		}
+		else{
+			TGDivisionType.NORMAL.copy(duration.getDivision());
+		}
+	}
+	
+	private void readDivisionType(TGDivisionType divisionType){
+		//leo los enters
+		divisionType.setEnters(readByte());
+		
+		//leo los tiempos
+		divisionType.setTimes(readByte());
+	}
+	
+	private void readStroke(TGStroke stroke){
+		//leo la direccion
+		stroke.setDirection( readByte() );
+		
+		//leo el valor
+		stroke.setValue( readByte() );
+	}
+	
+	private void readNoteEffect(TGNoteEffect effect){
+		int header = readHeader(3);
+		
+		//leo el bend
+		if(((header & EFFECT_BEND) != 0)){
+			effect.setBend(readBendEffect());
+		}
+		
+		//leo el tremolo bar
+		if(((header & EFFECT_TREMOLO_BAR) != 0)){
+			effect.setTremoloBar(readTremoloBarEffect());
+		}
+		
+		//leo el harmonic
+		if(((header & EFFECT_HARMONIC) != 0)){
+			effect.setHarmonic(readHarmonicEffect());
+		}
+		
+		//leo el grace
+		if(((header & EFFECT_GRACE) != 0)){
+			effect.setGrace(readGraceEffect());
+		}
+		
+		//leo el trill
+		if(((header & EFFECT_TRILL) != 0)){
+			effect.setTrill(readTrillEffect());
+		}
+		
+		//leo el tremolo picking
+		if(((header & EFFECT_TREMOLO_PICKING) != 0)){
+			effect.setTremoloPicking(readTremoloPickingEffect());
+		}
+		
+		//vibrato
+		effect.setVibrato(((header & EFFECT_VIBRATO) != 0));
+		
+		//dead note
+		effect.setDeadNote(((header & EFFECT_DEAD) != 0));
+		
+		//slide
+		effect.setSlide(((header & EFFECT_SLIDE) != 0));
+		
+		//hammer-on/pull-off
+		effect.setHammer(((header & EFFECT_HAMMER) != 0));
+		
+		//ghost note
+		effect.setGhostNote(((header & EFFECT_GHOST) != 0));
+		
+		//accentuated note
+		effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0));
+		
+		//heavy accentuated note
+		effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0));
+		
+		//palm mute
+		effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0));
+		
+		//staccato
+		effect.setStaccato(((header & EFFECT_STACCATO) != 0));
+		
+		//tapping
+		effect.setTapping(((header & EFFECT_TAPPING) != 0));
+		
+		//slapping
+		effect.setSlapping(((header & EFFECT_SLAPPING) != 0));
+		
+		//popping
+		effect.setPopping(((header & EFFECT_POPPING) != 0));
+		
+		//fade in
+		effect.setFadeIn(((header & EFFECT_FADE_IN) != 0));
+		
+		//let ring
+		effect.setLetRing(((header & EFFECT_LET_RING) != 0));
+	}
+	
+	private TGEffectBend readBendEffect(){
+		TGEffectBend bend = this.factory.newEffectBend();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value = readByte();
+			
+			//agrego el punto
+			bend.addPoint(position,value);
+		}
+		return bend;
+	}
+	
+	private TGEffectTremoloBar readTremoloBarEffect(){
+		TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar();
+		
+		//leo la cantidad de puntos
+		int count = readByte();
+		
+		for(int i = 0;i < count;i++){
+			//leo la posicion
+			int position = readByte();
+			
+			//leo el valor
+			int value =  (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH);
+			
+			//agrego el punto
+			tremoloBar.addPoint(position,value);
+		}
+		return tremoloBar;
+	}
+	
+	private TGEffectHarmonic readHarmonicEffect(){
+		TGEffectHarmonic effect = this.factory.newEffectHarmonic();
+		
+		//leo el tipo
+		effect.setType(readByte());
+		
+		//leo la data
+		if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){
+			effect.setData(readByte());
+		}
+		return effect;
+	}
+	
+	private TGEffectGrace readGraceEffect(){
+		int header = readHeader();
+		
+		TGEffectGrace effect = this.factory.newEffectGrace();
+		
+		effect.setDead((header & GRACE_FLAG_DEAD) != 0) ;
+		
+		effect.setOnBeat((header & GRACE_FLAG_ON_BEAT) != 0) ;
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.setDuration(readByte());
+		
+		//leo el velocity
+		effect.setDynamic(readByte());
+		
+		//leo la transicion
+		effect.setTransition(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTremoloPicking readTremoloPickingEffect(){
+		TGEffectTremoloPicking effect = this.factory.newEffectTremoloPicking();
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGEffectTrill readTrillEffect(){
+		TGEffectTrill effect = this.factory.newEffectTrill();
+		
+		//leo el fret
+		effect.setFret(readByte());
+		
+		//leo la duracion
+		effect.getDuration().setValue(readByte());
+		
+		return effect;
+	}
+	
+	private TGMarker readMarker(int measure){
+		TGMarker marker = this.factory.newMarker();
+		
+		marker.setMeasure(measure);
+		
+		//leo el titulo
+		marker.setTitle(readUnsignedByteString());
+		
+		//leo el color
+		readRGBColor(marker.getColor());
+		
+		return marker;
+	}
+	
+	private void readRGBColor(TGColor color){
+		//leo el RGB
+		color.setR((readByte() & 0xff));
+		color.setG((readByte() & 0xff));
+		color.setB((readByte() & 0xff));
+	}
+	
+	private void readLyrics(TGLyric lyrics){
+		//leo el compas de comienzo
+		lyrics.setFrom(readShort());
+		
+		//leo el texto
+		lyrics.setLyrics(readIntegerString());
+	}
+	
+	private byte readByte(){
+		try {
+			return (byte)this.dataInputStream.read();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private int readHeader(){
+		try {
+			return this.dataInputStream.read();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private int readHeader(int bCount){
+		int header = 0;
+		for(int i = bCount; i > 0; i --){
+			header += ( readHeader() << ( (8 * i) - 8 ) );
+		}
+		return header;
+	}
+	
+	private short readShort(){
+		try {
+			return this.dataInputStream.readShort();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+	
+	private String readUnsignedByteString(){
+		try {
+			return readString( (this.dataInputStream.read() & 0xFF ));
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private String readIntegerString(){
+		try {
+			return readString(this.dataInputStream.readInt());
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private String readString(int length){
+		try {
+			char[] chars = new char[length];
+			for(int i = 0;i < chars.length; i++){
+				chars[i] = this.dataInputStream.readChar();
+			}
+			return String.copyValueOf(chars);
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg12/TGStream.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg12/TGStream.java
new file mode 100644
index 0000000..bf18a18
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/io/tg12/TGStream.java
@@ -0,0 +1,205 @@
+package org.herac.tuxguitar.io.tg12;
+
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.util.TGVersion;
+
+public class TGStream {
+	
+	public static final String TG_FORMAT_NAME = ("TuxGuitar File Format");
+	
+	public static final String TG_FORMAT_VERSION = (TG_FORMAT_NAME + " - " + new TGVersion(1,2,0).getVersion() );
+	
+	public static final String TG_FORMAT_EXTENSION = (".tg");
+	
+	protected static final int TRACK_SOLO = 0x01;
+	
+	protected static final int TRACK_MUTE = 0x02;
+	
+	protected static final int TRACK_LYRICS = 0x04;
+	
+	protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01;
+	
+	protected static final int MEASURE_HEADER_TEMPO = 0x02;
+	
+	protected static final int MEASURE_HEADER_REPEAT_OPEN = 0x04;
+	
+	protected static final int MEASURE_HEADER_REPEAT_CLOSE = 0x08;
+	
+	protected static final int MEASURE_HEADER_REPEAT_ALTERNATIVE = 0x10;
+	
+	protected static final int MEASURE_HEADER_MARKER = 0x20;
+	
+	protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x40;
+	
+	protected static final int MEASURE_CLEF = 0x01;
+	
+	protected static final int MEASURE_KEYSIGNATURE = 0x02;
+	
+	protected static final int BEAT_HAS_NEXT = 0x01;
+	
+	protected static final int BEAT_HAS_STROKE = 0x02;
+	
+	protected static final int BEAT_HAS_CHORD = 0x04;
+	
+	protected static final int BEAT_HAS_TEXT = 0x08;
+	
+	protected static final int BEAT_HAS_VOICE = 0x10;
+	
+	protected static final int BEAT_HAS_VOICE_CHANGES = 0x20;
+	
+	protected static final int VOICE_HAS_NOTES = 0x01;
+	
+	protected static final int VOICE_NEXT_DURATION = 0x02;
+	
+	protected static final int VOICE_DIRECTION_UP = 0x04;
+	
+	protected static final int VOICE_DIRECTION_DOWN = 0x08;
+	
+	protected static final int NOTE_HAS_NEXT = 0x01;
+	
+	protected static final int NOTE_TIED = 0x02;
+	
+	protected static final int NOTE_EFFECT = 0x04;
+	
+	protected static final int NOTE_VELOCITY = 0x08;
+	
+	protected static final int DURATION_DOTTED = 0x01;
+	
+	protected static final int DURATION_DOUBLE_DOTTED = 0x02;
+	
+	protected static final int DURATION_NO_TUPLET = 0x04;
+	
+	protected static final int EFFECT_BEND = 0x000001;
+	
+	protected static final int EFFECT_TREMOLO_BAR = 0x000002;
+	
+	protected static final int EFFECT_HARMONIC = 0x000004;
+	
+	protected static final int EFFECT_GRACE = 0x000008;
+	
+	protected static final int EFFECT_TRILL = 0x000010;
+	
+	protected static final int EFFECT_TREMOLO_PICKING = 0x000020;
+	
+	protected static final int EFFECT_VIBRATO = 0x000040;
+	
+	protected static final int EFFECT_DEAD = 0x000080;
+	
+	protected static final int EFFECT_SLIDE = 0x000100;
+	
+	protected static final int EFFECT_HAMMER = 0x000200;
+	
+	protected static final int EFFECT_GHOST = 0x000400;
+	
+	protected static final int EFFECT_ACCENTUATED = 0x000800;
+	
+	protected static final int EFFECT_HEAVY_ACCENTUATED = 0x001000;
+	
+	protected static final int EFFECT_PALM_MUTE = 0x002000;
+	
+	protected static final int EFFECT_STACCATO = 0x004000;
+	
+	protected static final int EFFECT_TAPPING = 0x008000;
+	
+	protected static final int EFFECT_SLAPPING = 0x010000;
+	
+	protected static final int EFFECT_POPPING = 0x020000;
+	
+	protected static final int EFFECT_FADE_IN = 0x040000;
+	
+	protected static final int EFFECT_LET_RING = 0x080000;
+	
+	protected static final int GRACE_FLAG_DEAD = 0x01;
+	
+	protected static final int GRACE_FLAG_ON_BEAT = 0x02;
+	
+	protected class TGBeatData {
+		private long currentStart;
+		private TGVoiceData[] voices;
+		
+		protected TGBeatData(TGMeasure measure){
+			this.init(measure);
+		}
+		
+		private void init(TGMeasure measure){
+			this.currentStart = measure.getStart();
+			this.voices = new TGVoiceData[TGBeat.MAX_VOICES];
+			for(int i = 0 ; i < this.voices.length ; i ++ ){
+				this.voices[i] = new TGVoiceData(measure);
+			}
+		}
+		
+		protected TGVoiceData getVoice(int index){
+			return this.voices[index];
+		}
+		
+		public long getCurrentStart(){
+			long minimumStart = -1;
+			for(int i = 0 ; i < this.voices.length ; i ++ ){
+				if( this.voices[i].getStart() > this.currentStart ){
+					if( minimumStart < 0 || this.voices[i].getStart() < minimumStart ){
+						minimumStart = this.voices[i].getStart();
+					}
+				}
+			}
+			if( minimumStart > this.currentStart ){
+				this.currentStart = minimumStart;
+			}
+			return this.currentStart;
+		}
+	}
+	
+	protected class TGVoiceData {
+		private long start;
+		private int velocity;
+		private int flags;
+		private TGDuration duration;
+		
+		protected TGVoiceData(TGMeasure measure){
+			this.init(measure);
+		}
+		
+		private void init(TGMeasure measure){
+			this.flags = 0;
+			this.setStart(measure.getStart());
+			this.setVelocity(TGVelocities.DEFAULT);
+			this.setDuration(new TGFactory().newDuration());
+		}
+		
+		public TGDuration getDuration() {
+			return this.duration;
+		}
+		
+		public void setDuration(TGDuration duration) {
+			this.duration = duration;
+		}
+		
+		public long getStart() {
+			return this.start;
+		}
+		
+		public void setStart(long start) {
+			this.start = start;
+		}
+		
+		public int getVelocity() {
+			return this.velocity;
+		}
+		
+		public void setVelocity(int velocity) {
+			this.velocity = velocity;
+		}
+		
+		public int getFlags() {
+			return this.flags;
+		}
+		
+		public void setFlags(int flags) {
+			this.flags = flags;
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBAssistant.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBAssistant.java
new file mode 100644
index 0000000..97e0a57
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/assistant/SBAssistant.java
@@ -0,0 +1,63 @@
+package org.herac.tuxguitar.player.impl.jsa.assistant;
+
+import java.net.URL;
+
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.Soundbank;
+import javax.swing.JOptionPane;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfig;
+
+public class SBAssistant {
+	
+	private static SBAssistant instance;
+	
+	private Soundbank soundbank;
+	
+	private SBAssistant(){
+		this.soundbank = null;
+	}
+	
+	public static SBAssistant instance() {
+		if (instance == null) {
+			synchronized (SBAssistant.class) {
+				instance = new SBAssistant();
+			}
+		}
+		return instance;
+	}
+
+	public Soundbank getSoundbank(){
+		if(this.soundbank == null){
+			this.loadSoundbank();
+		}
+		return this.soundbank;
+	}
+	
+	public void setSoundbank(Soundbank soundbank){
+		this.soundbank = soundbank;
+	}
+	
+	public void loadSoundbank(){
+		try {
+			if(TGConfig.SOUNDBANK_URL != null){
+				URL url = new URL(TGConfig.SOUNDBANK_URL);
+				if(isConfirmed()){
+					System.out.println("Try to get soundbank from: " + TGConfig.SOUNDBANK_URL);
+					this.setSoundbank( MidiSystem.getSoundbank( url.openStream() ) );
+				}
+			}
+		}catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public boolean isConfirmed(){
+		String title = "Soundbank Assistant";
+		String message = "You don't seem to have any soundbank installed.\nDo you want to open one from internet?";
+		int type = JOptionPane.YES_NO_OPTION;
+		int result = JOptionPane.showConfirmDialog(TuxGuitar.instance().getShell(),message,title,type);
+		return ( result == JOptionPane.YES_OPTION );
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiControlChangeMessage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiControlChangeMessage.java
new file mode 100644
index 0000000..6f8de4d
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiControlChangeMessage.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiControlChangeMessage extends MidiShortMessage{
+	
+	public MidiControlChangeMessage(int channel,int controller,int value) throws InvalidMidiDataException{
+		this.setMessage(ShortMessage.CONTROL_CHANGE,channel, controller, value);
+		this.setVoice(MidiShortMessage.DEFAULT_VOICE);
+		this.setBendMode(MidiShortMessage.DEFAULT_BEND_MODE);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiMessageFactory.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiMessageFactory.java
new file mode 100644
index 0000000..af92ceb
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiMessageFactory.java
@@ -0,0 +1,115 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.MidiMessage;
+
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+
+public class MidiMessageFactory {
+	
+	private static int fixValue(int value){
+		int fixedValue = value;
+		fixedValue = Math.min(fixedValue,127);
+		fixedValue = Math.max(fixedValue,0);
+		return fixedValue;
+	}
+	
+	public static MidiMessage noteOn(int channel,int note,int velocity){
+		try {
+			return new MidiNoteOnMessage(channel, fixValue(note), fixValue(velocity));
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage noteOn(int channel,int note,int velocity, int voice, boolean bendMode){
+		try {
+			return new MidiNoteOnMessage(channel, fixValue(note), fixValue(velocity), voice, bendMode);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage noteOff(int channel,int note,int velocity){
+		try {
+			return new MidiNoteOffMessage(channel, note, velocity);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage noteOff(int channel,int note,int velocity, int voice, boolean bendMode){
+		try {
+			return new MidiNoteOffMessage(channel, fixValue(note), fixValue(velocity), voice, bendMode);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage pitchBend(int channel,int value){
+		try {
+			return new MidiPitchBendMessage(channel, fixValue(value));
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage pitchBend(int channel,int value, int voice, boolean bendMode){
+		try {
+			return new MidiPitchBendMessage(channel, fixValue(value), voice, bendMode);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage controlChange(int channel,int controller,int value){
+		try {
+			return new MidiControlChangeMessage(channel, fixValue(controller), fixValue(value));
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage programChange(int channel,int instrument){
+		try {
+			return new MidiProgramChangeMessage(channel, fixValue(instrument));
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage systemReset(){
+		try {
+			return new MidiSystemResetMessage();
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage tempoInUSQ(int usq){
+		try {
+			return new MidiTempoInUsqMessage(usq);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static MidiMessage timeSignature(TGTimeSignature tgTimeSignature){
+		try {
+			return new MidiTimeSignatureMessage(tgTimeSignature);
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOffMessage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOffMessage.java
new file mode 100644
index 0000000..b6c4ccd
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOffMessage.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiNoteOffMessage extends MidiShortMessage{
+	
+	public MidiNoteOffMessage(int channel,int note,int velocity, int voice, boolean bendMode) throws InvalidMidiDataException{
+		this.setMessage(ShortMessage.NOTE_OFF, channel, note, velocity);
+		this.setVoice(voice);
+		this.setBendMode(bendMode);
+	}
+	
+	public MidiNoteOffMessage(int channel,int note,int velocity) throws InvalidMidiDataException{
+		this(channel, note, velocity, DEFAULT_VOICE, DEFAULT_BEND_MODE);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOnMessage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOnMessage.java
new file mode 100644
index 0000000..ccdbba9
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiNoteOnMessage.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiNoteOnMessage extends MidiShortMessage{
+	
+	public MidiNoteOnMessage(int channel,int note,int velocity, int voice, boolean bendMode) throws InvalidMidiDataException{
+		this.setMessage(ShortMessage.NOTE_ON, channel, note, velocity);
+		this.setVoice(voice);
+		this.setBendMode(bendMode);
+	}
+	
+	public MidiNoteOnMessage(int channel,int note,int velocity) throws InvalidMidiDataException{
+		this(channel, note, velocity, DEFAULT_VOICE, DEFAULT_BEND_MODE);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiPitchBendMessage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiPitchBendMessage.java
new file mode 100644
index 0000000..ec47bd9
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiPitchBendMessage.java
@@ -0,0 +1,17 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiPitchBendMessage extends MidiShortMessage{
+	
+	public MidiPitchBendMessage(int channel,int value, int voice, boolean bendMode) throws InvalidMidiDataException{
+		this.setMessage(ShortMessage.PITCH_BEND, channel, 0, value);
+		this.setVoice(voice);
+		this.setBendMode(bendMode);
+	}
+	
+	public MidiPitchBendMessage(int channel,int value) throws InvalidMidiDataException{
+		this(channel, value, DEFAULT_VOICE, DEFAULT_BEND_MODE);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiProgramChangeMessage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiProgramChangeMessage.java
new file mode 100644
index 0000000..e63d817
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiProgramChangeMessage.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiProgramChangeMessage extends MidiShortMessage{
+	
+	public MidiProgramChangeMessage(int channel,int instrument) throws InvalidMidiDataException{
+		this.setMessage(ShortMessage.PROGRAM_CHANGE, channel, instrument);
+		this.setVoice(MidiShortMessage.DEFAULT_VOICE);
+		this.setBendMode(MidiShortMessage.DEFAULT_BEND_MODE);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiShortMessage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiShortMessage.java
new file mode 100644
index 0000000..5597968
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiShortMessage.java
@@ -0,0 +1,32 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.ShortMessage;
+
+public class MidiShortMessage extends ShortMessage{
+	
+	public static final int DEFAULT_VOICE = -1;
+	public static final boolean DEFAULT_BEND_MODE = false;
+	
+	private int voice;
+	private boolean bendMode;
+	
+	public MidiShortMessage(){
+		super();
+	}
+	
+	public int getVoice() {
+		return this.voice;
+	}
+
+	public void setVoice(int voice) {
+		this.voice = voice;
+	}
+
+	public boolean isBendMode() {
+		return this.bendMode;
+	}
+
+	public void setBendMode(boolean bendMode) {
+		this.bendMode = bendMode;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiSystemResetMessage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiSystemResetMessage.java
new file mode 100644
index 0000000..e42b542
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiSystemResetMessage.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.ShortMessage;
+
+public class MidiSystemResetMessage extends MidiShortMessage{
+	
+	public MidiSystemResetMessage() throws InvalidMidiDataException{
+		this.setMessage(ShortMessage.SYSTEM_RESET);
+		this.setVoice(MidiShortMessage.DEFAULT_VOICE);
+		this.setBendMode(MidiShortMessage.DEFAULT_BEND_MODE);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTempoInUsqMessage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTempoInUsqMessage.java
new file mode 100644
index 0000000..626dab9
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTempoInUsqMessage.java
@@ -0,0 +1,11 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.MetaMessage;
+
+public class MidiTempoInUsqMessage extends MetaMessage{
+	
+	public MidiTempoInUsqMessage(int usq) throws InvalidMidiDataException{
+		this.setMessage(0x51, new byte[]{ (byte)((usq >> 16) & 0x00FF),(byte)((usq >> 8) & 0x00FF),(byte)((usq) & 0x00FF) }, 3);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTimeSignatureMessage.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTimeSignatureMessage.java
new file mode 100644
index 0000000..3818748
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/message/MidiTimeSignatureMessage.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.player.impl.jsa.message;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.MetaMessage;
+
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+
+public class MidiTimeSignatureMessage extends MetaMessage{
+	
+	public MidiTimeSignatureMessage(TGTimeSignature ts) throws InvalidMidiDataException{
+		this.setMessage(0x58, new byte[]{  (byte)ts.getNumerator(),(byte)ts.getDenominator().getIndex(),(byte)(96 / ts.getDenominator().getValue()),8 }, 4);
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortOut.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortOut.java
new file mode 100644
index 0000000..92eb0fa
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortOut.java
@@ -0,0 +1,171 @@
+package org.herac.tuxguitar.player.impl.jsa.midiport;
+
+import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiUnavailableException;
+import javax.sound.midi.Receiver;
+
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
+import org.herac.tuxguitar.player.base.MidiControllers;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.impl.jsa.message.MidiMessageFactory;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class MidiPortOut extends GMOutputPort {
+	
+	private String key;
+	private String name;
+	private MidiReceiverImpl receiver;
+	
+	public MidiPortOut(MidiDevice device){
+		this.key = device.getDeviceInfo().getName();
+		this.name = device.getDeviceInfo().getName();
+		this.receiver = new MidiReceiverImpl(device);
+	}
+	
+	public GMReceiver getReceiver(){
+		return this.receiver;
+	}
+	
+	public void open() throws MidiPlayerException{
+		try {
+			this.receiver.open();
+		} catch (Throwable throwable) {
+			throw new MidiPlayerException(throwable.getMessage(),throwable);
+		}
+	}
+	
+	public void close() throws MidiPlayerException{
+		try {
+			this.receiver.close();
+		} catch (Throwable throwable) {
+			throw new MidiPlayerException(throwable.getMessage(),throwable);
+		}
+	}
+	
+	public void check() throws MidiPlayerException{
+		try {
+			this.receiver.open();
+		} catch (Throwable throwable) {
+			throw new MidiPlayerException(throwable.getMessage(),throwable);
+		}
+	}
+	
+	public String getKey() {
+		return this.key;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+}
+
+class MidiReceiverImpl implements GMReceiver{
+	
+	private MidiDevice device;
+	private Receiver receiver;
+	
+	public MidiReceiverImpl(MidiDevice device){
+		this.device = device;
+	}
+	
+	protected synchronized void open() throws Throwable{
+		if(!this.device.isOpen()){
+			final MidiDevice device = this.device;
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					try{
+						device.open();
+					} catch(MidiUnavailableException e){
+						throw new TGException(e);
+					}
+				}
+			});
+		}
+		if(this.receiver == null){
+			final MidiDevice device = this.device;
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					try{
+						setReceiver(device.getReceiver());
+					} catch(MidiUnavailableException e){
+						throw new TGException(e);
+					}
+				}
+			});
+		}
+	}
+	
+	protected synchronized void close() throws Throwable{
+		if(this.receiver != null){
+			final Receiver receiver = this.receiver;
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					receiver.close();
+					setReceiver(null);
+				}
+			});
+		}
+		if(this.device.isOpen()){
+			final MidiDevice device = this.device;
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					device.close();
+				}
+			});
+		}
+	}
+	
+	protected void setReceiver(Receiver receiver){
+		this.receiver = receiver;
+	}
+	
+	protected Receiver getReceiver(){
+		return this.receiver;
+	}
+	
+	public void sendSystemReset(){
+		if(getReceiver() != null){
+			getReceiver().send(MidiMessageFactory.systemReset(),-1);
+		}
+	}
+	
+	public void sendAllNotesOff(){
+		if(getReceiver() != null){
+			for(int channel = 0; channel < 16; channel ++){
+				getReceiver().send(MidiMessageFactory.controlChange(channel, MidiControllers.ALL_NOTES_OFF,0),-1);
+			}
+		}
+	}
+	
+	public void sendNoteOn(int channel, int key, int velocity) {
+		if(getReceiver() != null){
+			getReceiver().send(MidiMessageFactory.noteOn(channel, key, velocity),-1);
+		}
+	}
+	
+	public void sendNoteOff(int channel, int key, int velocity) {
+		if(getReceiver() != null){
+			getReceiver().send(MidiMessageFactory.noteOff(channel, key, velocity),-1);
+		}
+	}
+	
+	public void sendControlChange(int channel, int controller, int value) {
+		if(getReceiver() != null){
+			getReceiver().send(MidiMessageFactory.controlChange(channel,controller, value),-1);
+		}
+	}
+	
+	public void sendProgramChange(int channel, int value) {
+		if(getReceiver() != null){
+			getReceiver().send(MidiMessageFactory.programChange(channel, value),-1);
+		}
+	}
+	
+	public void sendPitchBend(int channel, int value) {
+		if(getReceiver() != null){
+			getReceiver().send(MidiMessageFactory.pitchBend(channel, value),-1);
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortProviderImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortProviderImpl.java
new file mode 100644
index 0000000..1944494
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortProviderImpl.java
@@ -0,0 +1,62 @@
+package org.herac.tuxguitar.player.impl.jsa.midiport;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.MidiUnavailableException;
+import javax.sound.midi.Sequencer;
+import javax.sound.midi.Synthesizer;
+
+import org.herac.tuxguitar.player.base.MidiOutputPort;
+import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+
+public class MidiPortProviderImpl implements MidiOutputPortProvider{
+	
+	public MidiPortProviderImpl(){
+		super();
+	}
+	
+	public List listPorts() throws MidiPlayerException{
+		try {
+			List ports = new ArrayList();
+			MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
+			for(int i = 0; i < infos.length; i++){
+				try {
+					Iterator it = ports.iterator();
+					boolean exists = false;
+					while(it.hasNext()){
+						if( ((MidiOutputPort)it.next()).getKey().equals(infos[i].getName()) ){
+							exists = true;
+							break;
+						}
+					}
+					if(!exists){
+						MidiDevice device = MidiSystem.getMidiDevice(infos[i]);
+						if(device.getMaxReceivers() == 0 || device instanceof Sequencer){
+							continue;
+						}
+						if(device instanceof Synthesizer){
+							ports.add(new MidiPortSynthesizer((Synthesizer)device));
+						}
+						else{
+							ports.add(new MidiPortOut(device));
+						}
+					}
+				} catch (MidiUnavailableException e) {
+					throw new MidiPlayerException("MIDI System is unavailable",e);
+				}
+			}
+			return ports;
+		}catch (Throwable t) {
+			throw new MidiPlayerException(t.getMessage(),t);
+		}
+	}
+	
+	public void closeAll() {
+		// Not implemented
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortSynthesizer.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortSynthesizer.java
new file mode 100644
index 0000000..e8631f3
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/midiport/MidiPortSynthesizer.java
@@ -0,0 +1,203 @@
+package org.herac.tuxguitar.player.impl.jsa.midiport;
+
+import java.io.File;
+
+import javax.sound.midi.Instrument;
+import javax.sound.midi.MidiChannel;
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.Soundbank;
+import javax.sound.midi.Synthesizer;
+
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
+import org.herac.tuxguitar.player.base.MidiControllers;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.impl.jsa.assistant.SBAssistant;
+
+public class MidiPortSynthesizer extends GMOutputPort{
+	
+	private String key;
+	private String name;
+	private Synthesizer synth;
+	private GMReceiver receiver;
+	private boolean synthesizerLoaded;
+	private boolean soundbankLoaded;
+	
+	public MidiPortSynthesizer(Synthesizer synthesizer){
+		this.key = synthesizer.getDeviceInfo().getName();
+		this.name = synthesizer.getDeviceInfo().getName();
+		this.synth = synthesizer;
+		this.receiver = new MidiPortSynthesizerReceiver(this);
+	}
+	
+	public String getKey() {
+		return this.key;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public void open(){
+		getSynth();
+	}
+	
+	public void close(){
+		if(this.synth != null && this.synth.isOpen()){
+			this.unloadSoundbank();
+			this.synth.close();
+		}
+	}
+	
+	public GMReceiver getReceiver(){
+		return this.receiver;
+	}
+	
+	public void check() throws MidiPlayerException{
+		if(!isSynthesizerLoaded()){
+			throw new MidiPlayerException("MIDI System is unavailable");
+		}
+		if(!isSoundbankLoaded()){
+			throw new MidiPlayerException("Unavailable Soundbank Error");
+		}
+	}
+	
+	public Synthesizer getSynth() {
+		try {
+			if(!this.synth.isOpen()){
+				this.synth.open();
+
+				if(!isSoundbankLoaded()){
+					this.loadSoundbank( this.synth.getDefaultSoundbank() );
+				}
+				
+				if(!isSoundbankLoaded()){
+					this.loadSoundbank( SBAssistant.instance().getSoundbank() );
+				}
+			}
+			this.synthesizerLoaded = this.synth.isOpen();
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+		return this.synth;
+	}
+	
+	public boolean loadSoundbank(File file){
+		try {
+			return loadSoundbank( MidiSystem.getSoundbank(file) );
+		}catch (Throwable throwable) {
+			new MidiPlayerException(throwable.getMessage(), throwable);
+		}
+		return false;
+	}
+	
+	public boolean loadSoundbank(Soundbank sb) {
+		try {
+			if (sb != null && getSynth().isSoundbankSupported(sb)){
+				//unload the old soundbank
+				this.unloadSoundbank();
+				
+				//load all soundbank instruments
+				this.soundbankLoaded = getSynth().loadAllInstruments(sb);
+			}
+		}catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+		return this.soundbankLoaded;
+	}
+	
+	public void unloadSoundbank(){
+		try {
+			this.soundbankLoaded = false;
+			
+			//unload all available instruments
+			Instrument[] available = this.synth.getAvailableInstruments();
+			if(available != null){
+				for(int i = 0; i < available.length; i++){
+					getSynth().unloadInstrument(available[i]);
+				}
+			}
+			
+			//unload all loaded instruments
+			Instrument[] loaded = this.synth.getLoadedInstruments();
+			if(loaded != null){
+				for(int i = 0; i < loaded.length; i++){
+					getSynth().unloadInstrument(loaded[i]);
+				}
+			}
+		}catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public boolean isSynthesizerLoaded(){
+		return this.synthesizerLoaded;
+	}
+	
+	public boolean isSoundbankLoaded(){
+		return this.soundbankLoaded;
+	}
+}
+
+class MidiPortSynthesizerReceiver implements GMReceiver{
+	
+	private MidiPortSynthesizer port;
+	private MidiChannel[] channels;
+	
+	public MidiPortSynthesizerReceiver(MidiPortSynthesizer port){
+		this.port = port;
+	}
+	
+	private MidiChannel[] getChannels(){
+		if(this.channels == null && this.port.getSynth() != null){
+			this.channels = this.port.getSynth().getChannels();
+		}
+		return this.channels;
+	}
+	
+	public void sendSystemReset(){
+		if(getChannels() != null){
+			for(int i = 0;i < getChannels().length; i ++){
+				getChannels()[i].resetAllControllers();
+			}
+		}
+	}
+	
+	public void sendAllNotesOff(){
+		if(getChannels() != null){
+			for(int channel = 0;channel < getChannels().length;channel ++){
+				sendControlChange(channel, MidiControllers.ALL_NOTES_OFF,0);
+			}
+		}
+	}
+	
+	public void sendNoteOn(int channel, int key, int velocity){
+		if(getChannels() != null && channel >= 0 && channel < getChannels().length){
+			getChannels()[channel].noteOn(key, velocity);
+		}
+	}
+	
+	public void sendNoteOff(int channel, int key, int velocity){
+		if(getChannels() != null && channel >= 0 && channel < getChannels().length){
+			getChannels()[channel].noteOff(key, velocity);
+		}
+	}
+	
+	public void sendControlChange(int channel, int controller, int value){
+		if(getChannels() != null && channel >= 0 && channel < getChannels().length){
+			getChannels()[channel].controlChange(controller, value);
+		}
+	}
+	
+	public void sendProgramChange(int channel, int value){
+		if(getChannels() != null && channel >= 0 && channel < getChannels().length){
+			getChannels()[channel].programChange(value);
+		}
+	}
+	
+	public void sendPitchBend(int channel, int value){
+		if(getChannels() != null && channel >= 0 && channel < getChannels().length){
+			getChannels()[channel].setPitchBend( (value * 128) );
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiReceiverImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiReceiverImpl.java
new file mode 100644
index 0000000..16e883f
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiReceiverImpl.java
@@ -0,0 +1,122 @@
+package org.herac.tuxguitar.player.impl.jsa.sequencer;
+
+import javax.sound.midi.MidiMessage;
+import javax.sound.midi.Receiver;
+import javax.sound.midi.ShortMessage;
+
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.impl.jsa.message.MidiShortMessage;
+
+public class MidiReceiverImpl implements Receiver{
+	
+	private MidiSequencerImpl sequencer;
+	
+	public MidiReceiverImpl(MidiSequencerImpl sequencer){
+		this.sequencer = sequencer;
+	}
+	
+	public void send(MidiMessage message, long timeStamp) {
+		try {
+			if( this.sequencer.isRunning() ){
+				parseMessage(message);
+			}
+		} catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void close(){
+		//not implemented
+	}
+	
+	private void parseMessage(MidiMessage message) throws MidiPlayerException{
+		byte[] data = message.getMessage();
+		if( data.length > 0 ){
+			//NOTE ON
+			if(((data[0] & 0xFF) & 0xF0) == ShortMessage.NOTE_ON){
+				parseNoteOn(data, findVoice(message), findBendMode(message));
+			}
+			//NOTE OFF
+			else if(((data[0] & 0xFF) & 0xF0) == ShortMessage.NOTE_OFF){
+				parseNoteOff(data, findVoice(message), findBendMode(message));
+			}
+			//PITCH BEND
+			else if(((data[0] & 0xFF) & 0xF0) == ShortMessage.PITCH_BEND){
+				parsePitchBend(data, findVoice(message), findBendMode(message));
+			}
+			//PROGRAM CHANGE
+			else if(((data[0] & 0xFF) & 0xF0) == ShortMessage.PROGRAM_CHANGE){
+				parseProgramChange(data);
+			}
+			//CONTROL CHANGE
+			else if(((data[0] & 0xFF) & 0xF0) == ShortMessage.CONTROL_CHANGE){
+				parseControlChange(data);
+			}
+		}
+	}
+	
+	private void parseNoteOn(byte[] data, int voice, boolean bendMode) throws MidiPlayerException{
+		int length = data.length;
+		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0;
+		int value = (length > 1)?(data[1] & 0xFF):0;
+		int velocity = (length > 2)?(data[2] & 0xFF):0;
+		
+		if( velocity == 0 ){
+			parseNoteOff(data, voice, bendMode);
+		}else if(value > 0){
+			this.sequencer.getTransmitter().sendNoteOn(channel,value,velocity,voice,bendMode);
+		}
+	}
+	
+	private void parseNoteOff(byte[] data, int voice, boolean bendMode) throws MidiPlayerException{
+		int length = data.length;
+		
+		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):0;
+		int value = (length > 1)?(data[1] & 0xFF):0;
+		int velocity = (length > 2)?(data[2] & 0xFF):0;
+		
+		this.sequencer.getTransmitter().sendNoteOff(channel,value,velocity,voice,bendMode);
+	}
+	
+	private void parsePitchBend(byte[] data, int voice, boolean bendMode) throws MidiPlayerException{
+		int length = data.length;
+		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1;
+		int value = (length > 2)?(data[2] & 0xFF):-1;
+		if(channel != -1 && value != -1){
+			this.sequencer.getTransmitter().sendPitchBend(channel,value,voice,bendMode);
+		}
+	}
+	
+	private void parseProgramChange(byte[] data) throws MidiPlayerException{
+		int length = data.length;
+		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1;
+		int instrument = (length > 1)?(data[1] & 0xFF):-1;
+		if(channel != -1 && instrument != -1){
+			this.sequencer.getTransmitter().sendProgramChange(channel,instrument);
+		}
+	}
+	
+	private void parseControlChange(byte[] data) throws MidiPlayerException{
+		int length = data.length;
+		int channel = (length > 0)?((data[0] & 0xFF) & 0x0F):-1;
+		int control = (length > 1)?(data[1] & 0xFF):-1;
+		int value = (length > 2)?(data[2] & 0xFF):-1;
+		if(channel != -1 && control != -1 && value != -1){
+			this.sequencer.getTransmitter().sendControlChange(channel,control,value);
+		}
+	}
+	
+	private int findVoice(MidiMessage midiMessage){
+		if( midiMessage instanceof MidiShortMessage ){
+			return ((MidiShortMessage)midiMessage).getVoice();
+		}
+		return MidiShortMessage.DEFAULT_VOICE;
+	}
+	
+	private boolean findBendMode(MidiMessage midiMessage){
+		if( midiMessage instanceof MidiShortMessage ){
+			return ((MidiShortMessage)midiMessage).isBendMode();
+		}
+		return MidiShortMessage.DEFAULT_BEND_MODE;
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceHandlerImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceHandlerImpl.java
new file mode 100644
index 0000000..72cde5b
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceHandlerImpl.java
@@ -0,0 +1,78 @@
+package org.herac.tuxguitar.player.impl.jsa.sequencer;
+
+import javax.sound.midi.InvalidMidiDataException;
+import javax.sound.midi.MidiEvent;
+import javax.sound.midi.Sequence;
+import javax.sound.midi.Track;
+
+import org.herac.tuxguitar.player.base.MidiSequenceHandler;
+import org.herac.tuxguitar.player.impl.jsa.message.MidiMessageFactory;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+
+public class MidiSequenceHandlerImpl extends MidiSequenceHandler{
+	
+	private MidiSequenceLoader loader;
+	private Sequence sequence;
+	private Track[] midiTracks;
+	
+	public MidiSequenceHandlerImpl(MidiSequenceLoader loader,int tracks){
+		super(tracks);
+		this.loader = loader;
+		this.init();
+	}
+	
+	private void init(){
+		try {
+			this.sequence = new Sequence(Sequence.PPQ,(int)TGDuration.QUARTER_TIME);
+			this.midiTracks = new Track[getTracks()];
+			for (int i = 0; i < this.midiTracks.length; i++) {
+				this.midiTracks[i] = this.sequence.createTrack();
+			}
+		} catch (InvalidMidiDataException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public Sequence getSequence(){
+		return this.sequence;
+	}
+	
+	public void addEvent(int track, MidiEvent event) {
+		if(track >= 0 && track < this.midiTracks.length){
+			this.midiTracks[track].add(event);
+		}
+	}
+	
+	public void addNoteOff(long tick,int track,int channel, int note, int velocity,int voice,boolean bendMode) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.noteOff(channel, note, velocity, voice, bendMode), tick ));
+	}
+	
+	public void addNoteOn(long tick,int track,int channel, int note, int velocity,int voice,boolean bendMode) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.noteOn(channel, note, velocity, voice, bendMode), tick ));
+	}
+	
+	public void addPitchBend(long tick,int track,int channel, int value,int voice,boolean bendMode) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.pitchBend(channel, value, voice, bendMode), tick ));
+	}
+	
+	public void addControlChange(long tick,int track,int channel, int controller, int value) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.controlChange(channel, controller, value), tick ));
+	}
+	
+	public void addProgramChange(long tick,int track,int channel, int instrument) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.programChange(channel, instrument), tick ));
+	}
+	
+	public void addTempoInUSQ(long tick,int track,int usq) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.tempoInUSQ(usq), tick ));
+	}
+	
+	public void addTimeSignature(long tick,int track,TGTimeSignature ts) {
+		addEvent(track,new MidiEvent(MidiMessageFactory.timeSignature(ts), tick ));
+	}
+	
+	public void notifyFinish(){
+		this.loader.setSequence(getSequence());
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceLoader.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceLoader.java
new file mode 100644
index 0000000..7385f05
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequenceLoader.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.player.impl.jsa.sequencer;
+
+import javax.sound.midi.Sequence;
+
+public interface MidiSequenceLoader {
+	
+	public void setSequence(Sequence sequence);
+	
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerImpl.java
new file mode 100644
index 0000000..b35d96e
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerImpl.java
@@ -0,0 +1,226 @@
+package org.herac.tuxguitar.player.impl.jsa.sequencer;
+
+import javax.sound.midi.Sequence;
+import javax.sound.midi.Sequencer;
+import javax.sound.midi.Track;
+import javax.sound.midi.Transmitter;
+
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.base.MidiSequenceHandler;
+import org.herac.tuxguitar.player.base.MidiSequencer;
+import org.herac.tuxguitar.player.base.MidiTransmitter;
+
+public class MidiSequencerImpl implements MidiSequencer,MidiSequenceLoader{
+	
+	private static final int TICK_MOVE = 1;
+	
+	private Object lock;
+	private Sequencer sequencer;
+	private Transmitter sequencerTransmitter;
+	private MidiTransmitter transmitter;
+	
+	public MidiSequencerImpl(Sequencer sequencer){
+		this.lock = new Object();
+		this.sequencer = sequencer;
+	}
+	
+	public synchronized void open() {
+		try {
+			if(!this.sequencer.isOpen()){
+				this.sequencer.open();
+				this.closeTransmitter();
+				this.openTransmitter();
+			}
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public synchronized void close() {
+		try {
+			if(this.sequencer.isOpen()){
+				this.sequencer.close();
+				this.closeTransmitter();
+			}
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void openTransmitter(){
+		try {
+			this.sequencerTransmitter = getSequencer().getTransmitter();
+			this.sequencerTransmitter.setReceiver( new MidiReceiverImpl(this) );
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void closeTransmitter(){
+		try {
+			if(this.sequencerTransmitter != null){
+				this.sequencerTransmitter.close();
+				this.sequencerTransmitter = null;
+			}
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	protected Sequencer getSequencer(boolean open) {
+		if( open ){
+			this.open();
+		}
+		return this.sequencer;
+	}
+	
+	protected Sequencer getSequencer() {
+		return this.getSequencer(true);
+	}
+	
+	public MidiSequenceHandler createSequence(int tracks) {
+		this.resetTracks();
+		return new MidiSequenceHandlerImpl(this,tracks);
+	}
+	
+	public synchronized MidiTransmitter getTransmitter() {
+		return this.transmitter;
+	}
+	
+	public synchronized void setTransmitter(MidiTransmitter transmitter) {
+		this.transmitter = transmitter;
+	}
+	
+	public long getTickLength() {
+		try {
+			return getSequencer().getTickLength();
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+		return 0;
+	}
+	
+	public long getTickPosition() {
+		try {
+			return (getSequencer().getTickPosition() + TICK_MOVE);
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+		return 0;
+	}
+	
+	public void setTickPosition(long tickPosition) {
+		try {
+			this.getSequencer().setTickPosition(tickPosition - TICK_MOVE);
+			this.reset();
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void setMute(int index, boolean mute) {
+		try {
+			getSequencer().setTrackMute(index, mute);
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void setSolo(int index, boolean solo) {
+		try {
+			getSequencer().setTrackSolo(index, solo);
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void setSequence(Sequence sequence){
+		try {
+			getSequencer().setSequence(sequence);
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void start() {
+		try {
+			this.setRunning( true );
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void stop() {
+		try {
+			this.setRunning( false );
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public boolean isRunning() {
+		try {
+			return ( getSequencer( false ) != null && getSequencer( false ).isRunning() );
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+		return false;
+	}
+	
+	public void setRunning( boolean running ) {
+		try {
+			synchronized ( this.lock ) {
+				if( running && !this.isRunning() ){
+					this.getSequencer().start();
+				}else if( !running && this.isRunning() ){
+					this.getSequencer().stop();
+					this.reset();
+				}
+			}
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void reset(){
+		try {
+			this.getTransmitter().sendAllNotesOff();
+			this.getTransmitter().sendPitchBendReset();
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void resetTracks(){
+		try {
+			Sequence sequence = this.getSequencer().getSequence();
+			if(sequence != null){
+				Track[] tracks = sequence.getTracks();
+				if( tracks != null ){
+					int count = tracks.length;
+					for( int i = 0 ; i < count; i++ ){
+						this.setSolo( i , false );
+						this.setMute( i , false );
+					}
+				}
+			}
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public String getKey() {
+		return this.sequencer.getDeviceInfo().getName();
+	}
+	
+	public String getName() {
+		return this.sequencer.getDeviceInfo().getName();
+	}
+	
+	public void check() throws MidiPlayerException {
+		this.getSequencer( true );
+		if( this.sequencer == null || !this.sequencer.isOpen() ){
+			throw new MidiPlayerException("MIDI System is unavailable");
+		}
+	}
+}
diff --git a/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderImpl.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderImpl.java
new file mode 100644
index 0000000..ca2ecc2
--- /dev/null
+++ b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/sequencer/MidiSequencerProviderImpl.java
@@ -0,0 +1,55 @@
+package org.herac.tuxguitar.player.impl.jsa.sequencer;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.sound.midi.MidiDevice;
+import javax.sound.midi.MidiSystem;
+import javax.sound.midi.MidiUnavailableException;
+import javax.sound.midi.Sequencer;
+
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.base.MidiSequencer;
+import org.herac.tuxguitar.player.base.MidiSequencerProvider;
+
+public class MidiSequencerProviderImpl implements MidiSequencerProvider{
+	
+	public MidiSequencerProviderImpl(){
+		super();
+	}
+	
+	public List listSequencers() throws MidiPlayerException {
+		try {
+			List sequencers = new ArrayList();
+			MidiDevice.Info[] infos = MidiSystem.getMidiDeviceInfo();
+			for(int i = 0; i < infos.length; i++){
+				try {
+					Iterator it = sequencers.iterator();
+					boolean exists = false;
+					while(it.hasNext()){
+						if( ((MidiSequencer)it.next()).getKey().equals(infos[i].getName()) ){
+							exists = true;
+							break;
+						}
+					}
+					if(!exists){
+						MidiDevice device = MidiSystem.getMidiDevice(infos[i]);
+						if(device instanceof Sequencer){
+							sequencers.add(new MidiSequencerImpl((Sequencer)device));
+						}
+					}
+				} catch (MidiUnavailableException e) {
+					throw new MidiPlayerException("MIDI System is unavailable", e);
+				}
+			}
+			return sequencers;
+		}catch (Throwable t) {
+			throw new MidiPlayerException(t.getMessage(), t);
+		}
+	}
+	
+	public void closeAll() throws MidiPlayerException {
+		// Not implemented
+	}
+}
diff --git a/TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiMessageUtils.java b/TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiMessageUtils.java
similarity index 100%
rename from TuxGuitar-jsa/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiMessageUtils.java
rename to TuxGuitar-viewer/src/org/herac/tuxguitar/player/impl/jsa/utils/MidiMessageUtils.java
diff --git a/TuxGuitar-winmm/build.properties b/TuxGuitar-winmm/build.properties
index 519fcc3..94080dc 100644
--- a/TuxGuitar-winmm/build.properties
+++ b/TuxGuitar-winmm/build.properties
@@ -4,4 +4,7 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-path.tuxguitar=../TuxGuitar/build
+path.tuxguitar=../TuxGuitar/tuxguitar.jar
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.tuxguitar-gm-utils=../TuxGuitar-gm-utils/tuxguitar-gm-utils.jar
+path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar-winmm/build.xml b/TuxGuitar-winmm/build.xml
index 0c8b024..3c1adbb 100644
--- a/TuxGuitar-winmm/build.xml
+++ b/TuxGuitar-winmm/build.xml
@@ -7,13 +7,13 @@
 	
 	<property file="build.properties" />
 	<property name="build.src.path" value="src" />
+	<property name="build.share.path" value="share" />
 	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar-winmm.jar" />
 	
-	<property name="service.class" value="org.herac.tuxguitar.gui.system.plugins.TGPlugin" />
-	<property name="service.provider" value="org.herac.tuxguitar.player.impl.midiport.winmm.MidiOutputPortProviderPlugin" />
-	
 	<path id="class.path">
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.tuxguitar-gm-utils}"/>
 		<pathelement location="${path.tuxguitar}"/>
 		<pathelement location="${path.swt}"/>
 	</path >
@@ -38,8 +38,9 @@
 			<include name="**/*.java"/>
 		</javac>
 		
-		<mkdir dir="${build.path}/META-INF/services" />
-		<echo file="${build.path}/META-INF/services/${service.class}" append="false">${service.provider}</echo>
+		<copy todir="${build.path}">
+			<fileset dir="${build.share.path}"/>
+		</copy>
 		
 		<echo>+--------------------------------------------------------------------+</echo>
 		<echo>|        P A C K A G I N G   T U X G U I T A R  -  W I N M M         |</echo>
diff --git a/TuxGuitar-winmm/jni/GNUmakefile b/TuxGuitar-winmm/jni/GNUmakefile
index 5ab3898..fd53a96 100644
--- a/TuxGuitar-winmm/jni/GNUmakefile
+++ b/TuxGuitar-winmm/jni/GNUmakefile
@@ -2,11 +2,11 @@ CFLAGS?=-mno-cygwin -I$(shell gcj -print-file-name=include/)
 LDFLAGS?=-mno-cygwin -Wl,--kill-at
 LDLIBS?=-lwinmm
 LDPATH?=
-LIBRARY_PREFIX?=
 LIBRARY_NAME?=tuxguitar-winmm-jni
-LIBRARY_EXTENSION?=.dll
+LIBRARY_PREFIX?=
+LIBRARY_SUFFIX?=.dll
 
-LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_EXTENSION)
+LIBRARY=$(LIBRARY_PREFIX)$(LIBRARY_NAME)$(LIBRARY_SUFFIX)
 OBJECTS=org_herac_tuxguitar_player_impl_midiport_winmm_MidiSystem.o
 
 %.o: %.c
diff --git a/TuxGuitar-winmm/pom.xml b/TuxGuitar-winmm/pom.xml
new file mode 100644
index 0000000..89ede96
--- /dev/null
+++ b/TuxGuitar-winmm/pom.xml
@@ -0,0 +1,41 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-winmm</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+	
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<resources>
+			<resource>
+				<directory>share</directory>
+			</resource>
+		</resources>
+	</build>
+	
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-gm-utils</artifactId>
+			<scope>provided</scope>
+		</dependency>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar-winmm/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin b/TuxGuitar-winmm/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
new file mode 100644
index 0000000..8666805
--- /dev/null
+++ b/TuxGuitar-winmm/share/META-INF/services/org.herac.tuxguitar.util.plugin.TGPlugin
@@ -0,0 +1 @@
+org.herac.tuxguitar.player.impl.midiport.winmm.MidiOutputPortProviderPlugin
diff --git a/TuxGuitar-winmm/share/META-INF/tuxguitar-winmm.info b/TuxGuitar-winmm/share/META-INF/tuxguitar-winmm.info
new file mode 100644
index 0000000..7be9d60
--- /dev/null
+++ b/TuxGuitar-winmm/share/META-INF/tuxguitar-winmm.info
@@ -0,0 +1,5 @@
+### Plugin Information ###
+plugin.name=WinMM output plugin
+plugin.description=WinMM output plugin
+plugin.author=Julian Casadesus <julian at casadesus.com.ar>
+plugin.version=1.0
diff --git a/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortImpl.java b/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortImpl.java
index 63f5f3b..8f74eea 100644
--- a/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortImpl.java
+++ b/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.winmm;
 
-import org.herac.tuxguitar.player.base.MidiOutputPort;
-import org.herac.tuxguitar.player.base.MidiReceiver;
+import org.herac.tuxguitar.gm.port.GMOutputPort;
+import org.herac.tuxguitar.gm.port.GMReceiver;
 
-public class MidiOutputPortImpl implements MidiOutputPort{
+public class MidiOutputPortImpl extends GMOutputPort{
 	
 	private int device;
 	private String name;
@@ -25,7 +25,7 @@ public class MidiOutputPortImpl implements MidiOutputPort{
 		this.receiver.disconnect();
 	}
 	
-	public MidiReceiver getReceiver(){
+	public GMReceiver getReceiver(){
 		this.open();
 		return this.receiver;
 	}
diff --git a/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortProviderPlugin.java b/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortProviderPlugin.java
index 74be367..650ac48 100644
--- a/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortProviderPlugin.java
+++ b/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiOutputPortProviderPlugin.java
@@ -1,10 +1,12 @@
 package org.herac.tuxguitar.player.impl.midiport.winmm;
 
-import org.herac.tuxguitar.gui.system.plugins.base.TGMidiOutputPortProviderPlugin;
 import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
+import org.herac.tuxguitar.player.plugin.TGMidiOutputPortProviderPlugin;
 
 public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin{
 	
+	public static final String MODULE_ID = "tuxguitar-winmm";
+	
 	private MidiOutputPortProviderImpl portReader;
 	
 	protected MidiOutputPortProvider getProvider() {
@@ -14,19 +16,7 @@ public class MidiOutputPortProviderPlugin extends TGMidiOutputPortProviderPlugin
 		return this.portReader;
 	}
 	
-	public String getAuthor() {
-		return "Julian Casadesus <julian at casadesus.com.ar>";
-	}
-	
-	public String getDescription() {
-		return "WinMM output plugin";
-	}
-	
-	public String getName() {
-		return "WinMM output plugin";
-	}
-	
-	public String getVersion() {
-		return "1.0";
+	public String getModuleId(){
+		return MODULE_ID;
 	}
 }
diff --git a/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiReceiverImpl.java b/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiReceiverImpl.java
index f514fe4..a1aec69 100644
--- a/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiReceiverImpl.java
+++ b/TuxGuitar-winmm/src/org/herac/tuxguitar/player/impl/midiport/winmm/MidiReceiverImpl.java
@@ -1,9 +1,9 @@
 package org.herac.tuxguitar.player.impl.midiport.winmm;
 
+import org.herac.tuxguitar.gm.port.GMReceiver;
 import org.herac.tuxguitar.player.base.MidiControllers;
-import org.herac.tuxguitar.player.base.MidiReceiver;
 
-public class MidiReceiverImpl implements MidiReceiver{
+public class MidiReceiverImpl implements GMReceiver{
 	
 	private boolean connected;
 	private MidiOutputPortImpl midiPort;
diff --git a/TuxGuitar/GNUmakefile b/TuxGuitar/GNUmakefile
deleted file mode 100644
index 414c041..0000000
--- a/TuxGuitar/GNUmakefile
+++ /dev/null
@@ -1,109 +0,0 @@
-#! /usr/bin/make -f
-# -*- makefile -*-
-#ident "$Id: GNUmakefile,v 1.7 2008/02/29 12:55:24 akdmia Exp $"
-#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
-#licence: LGPL
-#------------------------------------------------------------------------------
-OS_LIBRARY_PREFIX?=lib
-OS_LIBRARY_EXTENSION?=.so
-
-PACKAGE?=tuxguitar
-BINARY?=$(PACKAGE).bin
-LIBRARY?=$(OS_LIBRARY_PREFIX)$(PACKAGE)$(OS_LIBRARY_EXTENSION)
-
-# constants
-SHARE_DIR?=./share/
-DOC_DIR?=./doc/
-
-# dependencies
-SWT_PATH?=/usr/share/java/swt.jar
-
-# install
-PREFIX?=/usr
-TG_BINARY_PATH?=$(PREFIX)/bin
-TG_LIBRARY_PATH?=$(PREFIX)/lib
-TG_LIBRARY_PATH_JNI?=$(TG_LIBRARY_PATH)/jni
-TG_SHARE_PATH?=$(PREFIX)/share/$(PACKAGE)
-TG_DOC_PATH?=$(PREFIX)/share/doc/$(PACKAGE)
-TG_NATIVE_PLUGINS_PATH?=$(TG_SHARE_PATH)/plugins
-TG_NATIVE_PLUGINS_PREFIX?=$(OS_LIBRARY_PREFIX)
-TG_NATIVE_PLUGINS_EXTENSION?=$(OS_LIBRARY_EXTENSION)
-
-# dependencies
-SWT_JAR?=$(SWT_PATH)
-
-# sources
-SOURCE_PATH?=./src/
-SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
-RESOURCE_PATH?=./dist/
-RESOURCES_XML?=$(shell find $(RESOURCE_PATH) -name "*.xml")
-RESOURCES_DIST?=$(shell find $(RESOURCE_PATH) -name "*.dist")
-DEPENDENCIES?=$(SWT_JAR)
-OBJECTS?=\
- $(PACKAGE).o\
- $(RESOURCES_DIST:%.dist=%.o)\
- $(RESOURCES_XML:%.xml=%.o)\
- $(DEPENDENCIES:%.jar=%.o)\
-
-# runtime
-MAINCLASS?=org.herac.tuxguitar.gui.TGMain
-PROPERTIES?=\
- -Djava.library.path=$(TG_LIBRARY_PATH_JNI) \
- -Djava.class.path=$(TG_SHARE_PATH) \
- -Dtuxguitar.share.path=$(TG_SHARE_PATH) \
- -Dtuxguitar.library.path=$(TG_NATIVE_PLUGINS_PATH) \
- -Dtuxguitar.library.prefix=$(TG_NATIVE_PLUGINS_PREFIX) \
- -Dtuxguitar.library.extension=$(TG_NATIVE_PLUGINS_EXTENSION) \
-
-GCJ?=gcj
-GCJFLAGS+=-fjni -I$(SOURCE_PATH) -I$(SWT_PATH)
-LDFLAGS?=
-
-default: all
-
-all: objects library binary
-
-objects: $(OBJECTS)
-
-library: $(LIBRARY)
-
-binary: $(BINARY)
-
-install:
-	-install -d $(DESTDIR)$(PREFIX)/
-	-install -d $(DESTDIR)$(TG_BINARY_PATH)/
-	-install -d $(DESTDIR)$(TG_LIBRARY_PATH)/
-	-install -d $(DESTDIR)$(TG_SHARE_PATH)/
-	-install -d $(DESTDIR)$(TG_DOC_PATH)/
-	-install $(BINARY) $(DESTDIR)$(TG_BINARY_PATH)/$(BINARY)
-	-install $(LIBRARY) $(DESTDIR)$(TG_LIBRARY_PATH)/$(LIBRARY)
-	cp -rfa $(SHARE_DIR)/* $(DESTDIR)$(TG_SHARE_PATH)/
-	cp -rfa $(DOC_DIR)/* $(DESTDIR)$(TG_DOC_PATH)/
-
-uninstall:
-	-rm $(DESTDIR)$(TG_BINARY_PATH)/$(BINARY)
-	-rm $(DESTDIR)$(TG_LIBRARY_PATH)/$(LIBRARY)
-
-clean:
-	- at find . -name "*.o" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.so" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.bin" -exec rm -f {} \; > /dev/null 2>&1
-	- at find . -name "*.tmp" -exec rm -f {} \; > /dev/null 2>&1
-
-%.o: %.jar
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $<
-
-%.o: %.dist
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) --resource $(<F) $<
-
-%.o: %.xml
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) --resource $(<F) $<
-
-$(PACKAGE).o: $(SOURCES)
-	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
-
-$(LIBRARY): $(OBJECTS)
-	$(GCJ) $(LDFLAGS) -shared -o $@ $(^F)
-
-$(BINARY):
-	$(GCJ) -o $@ --main=$(MAINCLASS) $(PROPERTIES) -l$(PACKAGE) -L$(TG_LIBRARY_PATH) -L./
diff --git a/TuxGuitar/TODO b/TuxGuitar/TODO
new file mode 100644
index 0000000..2b36d62
--- /dev/null
+++ b/TuxGuitar/TODO
@@ -0,0 +1,21 @@
+
+* Soporte para multi idioma en notas y acordes (Do, Re, Mi, etc)
+
+* new file format plugins. (lilypond, rosegarden, noteedit, kguitar, xml.. etc)
+
+* Let ring effect
+
+* Soporte para cambio de instrumento en la pista.
+
+* Partitura de percusion
+
+* Preview effects 
+
+* Beat effects
+
+* clear measures [range]
+
+* multiple staff scores
+
+* MusicXML importer
+
diff --git a/TuxGuitar/build-sources.xml b/TuxGuitar/build-sources.xml
new file mode 100644
index 0000000..e1e32f5
--- /dev/null
+++ b/TuxGuitar/build-sources.xml
@@ -0,0 +1,90 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="TuxGuitar" basedir="." default="package">
+	
+	<description>
+		TuxGuitar Source Package
+	</description>
+	
+	<target name="init" >
+		<fail unless="dist.version">Usage: ant -Ddist.version=[VERSION]</fail>
+	</target>
+	
+	<target name="package" depends="init">
+		<property name="src.dir" value="src"/>
+		<property name="doc.dir" value="doc"/>
+		<property name="share.dir" value="share"/>
+		<property name="subant.dir" value="xml"/>
+		<property name="dist.dir" value="dist"/>
+		<property name="package.name" value="tuxguitar-src-${dist.version}" />
+		
+		<tar destfile="${package.name}.tar.gz" compression="gzip" >
+			
+			<tarfileset dir="${src.dir}" prefix="${package.name}/src/" >
+				<include name="**/*.java"/>
+			</tarfileset>
+			
+			<tarfileset dir="${dist.dir}" prefix="${package.name}/dist" >
+				<include name="config.dist"/>
+				<include name="shortcuts-default.xml"/>
+				<include name="about_license.dist"/>
+				<include name="about_authors.dist"/>
+				<include name="about_description.dist"/>
+			</tarfileset>
+			
+			<tarfileset dir="." prefix="${package.name}/" >
+				<include name="GNUmakefile"/>
+			</tarfileset>
+			
+			<tarfileset dir="." prefix="${package.name}/" >
+				<include name="build.xml"/>
+				<include name="build.properties"/>
+			</tarfileset>
+			
+			<tarfileset dir="${subant.dir}" prefix="${package.name}/xml" >
+				<include name="build-linux.xml"/>
+				<include name="build-ubuntu.xml"/>
+				<include name="build-freebsd.xml"/>
+				<include name="build-windows.xml"/>
+				<include name="build-mac.xml"/>
+			</tarfileset>
+			
+			<tarfileset dir="${share.dir}/lang" prefix="${package.name}/share/lang" >
+				<include name="messages.properties"/>
+				<include name="messages_*.properties"/>
+			</tarfileset>
+			
+			<tarfileset dir="${share.dir}/scales" prefix="${package.name}/share/scales" >
+				<include name="scales.xml"/>
+			</tarfileset>
+			
+			<tarfileset dir="${share.dir}/help" prefix="${package.name}/share/help" >
+				<include name="**/*.js"/>
+				<include name="**/*.css"/>
+				<include name="**/*.html"/>
+				<include name="**/*.png"/>
+			</tarfileset>
+			
+			<tarfileset dir="${share.dir}/skins" prefix="${package.name}/share/skins" >
+				<include name="**/skin.properties" />
+				<include name="**/*.png" />
+				<include name="**/*.xpm" />
+				<include name="**/*.ico" />
+				<include name="**/*.icns" />
+			</tarfileset>
+			
+			<tarfileset dir="${doc.dir}" prefix="${package.name}/doc/" >
+				<include name="LICENSE"/>
+				<include name="AUTHORS"/>
+				<include name="CHANGES"/>
+				<include name="README"/>
+			</tarfileset>
+			
+		</tar>
+		
+		<echo>+-------------------------------------------------------------------------------------+</echo>
+		<echo>${package.name}.tar.gz was created. Now you can use that package to build binary files.</echo>
+		<echo>+-------------------------------------------------------------------------------------+</echo>
+	</target>
+	
+</project>
diff --git a/TuxGuitar/build.properties b/TuxGuitar/build.properties
index 4dfdb22..ec991ee 100644
--- a/TuxGuitar/build.properties
+++ b/TuxGuitar/build.properties
@@ -4,62 +4,5 @@
 ant.build.javac.source=1.4
 ant.build.javac.target=1.4
 
-########## DEFAULT LINUX BUILD PROPERTIES ##########
-lib.swt.jni=lib/
-lib.swt.jar=lib/swt.jar
-lib.itext.jar=lib/itext.jar
-dist.file=xml/build-linux.xml
-dist.version=1.2
-dist.jar.path=./
-dist.bin.path=./
-dist.share.path=share/
-dist.doc.path=doc/
-
-########## UBUNTU BUILD PROPERTIES ##########
-#lib.swt.jni=/usr/lib/jni/
-#lib.swt.jar=/usr/share/java/swt.jar:/usr/lib/java/swt.jar
-#lib.itext.jar=/usr/share/java/itext.jar
-#dist.file=xml/build-ubuntu.xml
-#dist.version=1.2-ubuntu-x86
-#dist.prefix=/usr
-#dist.jar.path=${dist.prefix}/share/java/
-#dist.bin.path=${dist.prefix}/bin/
-#dist.lib.path=${dist.prefix}/lib/jni/
-#dist.share.path=${dist.prefix}/share/tuxguitar/
-#dist.doc.path=${dist.prefix}/share/doc/tuxguitar/
-
-########## FREEBSD BUILD PROPERTIES ##########
-#lib.swt.jni=/usr/local/lib/
-#lib.swt.jar=/usr/local/share/java/classes/swt.jar
-#lib.itext.jar=/usr/local/share/java/classes/itext.jar
-#dist.file=xml/build-freebsd.xml
-#dist.version=1.2
-#dist.jar.path=/usr/local/share/java/TuxGuitar-${dist.version}/
-#dist.bin.path=/usr/local/bin/
-#dist.share.path=/usr/local/share/TuxGuitar-${dist.version}/
-#dist.doc.path=/usr/local/share/doc/TuxGuitar-${dist.version}/
-
-########## DEFAULT MAC BUILD PROPERTIES ##########
-#lib.swt.jni=lib/
-#lib.swt.jar=lib/swt.jar
-#lib.itext.jar=lib/itext.jar
-#dist.file=xml/build-mac.xml
-#dist.version=1.2
-#dist.jar.path=./
-#dist.bin.path=./
-#dist.share.path=./share/
-#dist.doc.path=./doc/
-
-########## WINDOWS BUILD PROPERTIES ############
-#lib.swt.jni=lib\\
-#lib.swt.jar=lib\\swt.jar
-#lib.itext.jar=lib\\itext.jar
-#dist.file=xml/build-windows.xml
-#dist.version=1.2
-#dist.jar.path=
-#dist.bin.path=
-#dist.share.path=share\\
-#dist.doc.path=doc\\
-## get JanelWindows.exe from http://sourceforge.net/projects/janel/
-#janel.exe=utilities\\tuxguitar.exe
-#janel.lap.prefix=${FOUND_EXE_FOLDER}\\
\ No newline at end of file
+path.tuxguitar-lib=../TuxGuitar-lib/tuxguitar-lib.jar
+path.swt=../TuxGuitar/lib/swt.jar
diff --git a/TuxGuitar/build.xml b/TuxGuitar/build.xml
index e690827..eaaa935 100644
--- a/TuxGuitar/build.xml
+++ b/TuxGuitar/build.xml
@@ -6,59 +6,37 @@
 	</description>
 	
 	<property file="build.properties" />
-	<property name="build.src.path" value="src${file.separator}" />
-	<property name="build.lib.path" value="lib${file.separator}" />
-	<property name="build.share.path" value="share${file.separator}" />
-	<property name="build.doc.path" value="doc${file.separator}" />
-	<property name="build.dist.path" value="dist${file.separator}" />
-	<property name="build.path" value="build${file.separator}" />
+	<property name="build.src.path" value="src" />
+	<property name="build.path" value="build" />
 	<property name="build.jar" value="tuxguitar.jar" />
 	
-	<property name="dist.dst.path" value="" />
-	<property name="dist.file" value="" />
-	<property name="dist.jar.path" value="." />
-	<property name="dist.share.path" value="${build.share.path}" />
-	<property name="dist.doc.path" value="${build.doc.path}" />
-	
-	<available file="${dist.file}" type="file" property="dist.available"/>
-	
 	<path id="class.path">
-		<pathelement path="${lib.swt.jar}"/>
+		<pathelement location="${path.tuxguitar-lib}"/>
+		<pathelement location="${path.swt}"/>
 	</path >
 	
 	<target name="all">
 		<antcall target="clean" />
 		<antcall target="build" />
-		<antcall target="package" />
 	</target>
 	
 	<target name="clean">
 		<delete quiet="true" dir="${build.path}" />
 		<delete quiet="true" file="${build.jar}" />
-		
-		<antcall target="dist-clean" />
 	</target>
 	
 	<target name="build">
+		<mkdir dir="${build.path}" />
+		
 		<echo>+--------------------------------------------------------------------+</echo>
 		<echo>|                B U I L D I N G   T U X G U I T A R                 |</echo>
 		<echo>+--------------------------------------------------------------------+</echo>
 		
-		<mkdir dir="${build.path}" />
-		
 		<javac srcdir="${build.src.path}" destdir="${build.path}" debug="false" >
 			<classpath refid="class.path"/>
 			<include name="**/*.java"/>
 		</javac>
 		
-		<copy todir="${build.path}">
-			<fileset dir="${build.dist.path}"/>
-		</copy>
-		
-		<antcall target="dist-build" />
-	</target>
-	
-	<target name="package">
 		<echo>+--------------------------------------------------------------------+</echo>
 		<echo>|              P A C K A G I N G   T U X G U I T A R                 |</echo>
 		<echo>+--------------------------------------------------------------------+</echo>
@@ -67,46 +45,6 @@
 			<fileset dir="${build.path}" />
 		</jar>
 		
-		<antcall target="dist-package" />
-	</target>
-	
-	<target name="install">
-		<echo>+--------------------------------------------------------------------+</echo>
-		<echo>|              I N S T A L L I N G   T U X G U I T A R               |</echo>
-		<echo>+--------------------------------------------------------------------+</echo>
-		
-		<mkdir dir="${dist.dst.path}${dist.jar.path}" />
-		<copy todir="${dist.dst.path}${dist.jar.path}">
-			<fileset file="${build.jar}"/>
-		</copy>
-		
-		<mkdir dir="${dist.dst.path}${dist.share.path}" />
-		<copy todir="${dist.dst.path}${dist.share.path}">
-			<fileset dir="${build.share.path}"/>
-		</copy>
-		
-		<mkdir dir="${dist.dst.path}${dist.doc.path}" />
-		<copy todir="${dist.dst.path}${dist.doc.path}">
-			<fileset dir="${build.doc.path}"/>
-		</copy>
-		
-		<antcall target="dist-install" />
-	</target>
-	
-	<target name="dist-build" if="dist.available">
-		<ant antfile="${dist.file}" target="build"/>
-	</target>
-	
-	<target name="dist-package" if="dist.available">
-		<ant antfile="${dist.file}" target="package"/>
-	</target>
-	
-	<target name="dist-clean" if="dist.available">
-		<ant antfile="${dist.file}" target="clean"/>
-	</target>
-	
-	<target name="dist-install" if="dist.available">
-		<ant antfile="${dist.file}" target="install"/>
+		<delete quiet="true" dir="${build.path}" />
 	</target>
-	
 </project>
diff --git a/TuxGuitar/dist/about_authors.dist b/TuxGuitar/dist/about_authors.dist
index 9cd1a75..063ed71 100644
--- a/TuxGuitar/dist/about_authors.dist
+++ b/TuxGuitar/dist/about_authors.dist
@@ -61,7 +61,11 @@ Jose Gato
 
     * Mac version
     * Contact: <jgato at gsyc.info>
-    
+
+Benjamin Scherrer
+
+    * Deutsch translation
+
 Thomas Thiel
 
     * Deutsch translation
@@ -86,6 +90,11 @@ Máté Huszár
 
     * Hungarian translation
 
+Tim Loo
+
+    * Chinese (Taiwan) translation
+    * Contact: http://www.sinan-melody.co.cc/wordpress_1/
+
 PTT Team
 
     * Chinese (Taiwan) translation
@@ -167,4 +176,20 @@ Jean-Pierre POULIN
 
 Lobo
 	* Basque translation
-	* Contact: <lobo1985guitarrista at hotmail.es> http://www.myspace.com/lobotheguitardude
\ No newline at end of file
+	* Contact: <lobo1985guitarrista at hotmail.es> http://www.myspace.com/lobotheguitardude
+
+Pekka Manninen
+	* Finnish translation
+	* Contact: <pekka.t.manninen at iki.fi>
+
+Rytis Umbrasas
+	* Lithuanian translation
+	* Contact: <rytumb at gmail.com>
+
+Periklis Ntanasis
+	* Greek translation
+	* Contact: <pntanasis at gmail.com> http://www.greekrocktabs.gr
+
+Svetoslav Stefanov
+	* Bulgarian translation
+	* Contact: <lfu.project at gmail.com> http://learnfree.eu
\ No newline at end of file
diff --git a/TuxGuitar/dist/config.dist b/TuxGuitar/dist/config.dist
deleted file mode 100644
index f15c5ef..0000000
--- a/TuxGuitar/dist/config.dist
+++ /dev/null
@@ -1,7 +0,0 @@
-skin=Lavender
-midi.port=Gervill
-midi.sequencer=tuxguitar.sequencer
-
-
-## Needed for MacOs releases
-#painter.force-os-defaults=true
diff --git a/TuxGuitar/dist/shortcuts-default.xml b/TuxGuitar/dist/shortcuts-default.xml
deleted file mode 100644
index bd1b4a7..0000000
--- a/TuxGuitar/dist/shortcuts-default.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<shortcuts>
-	<shortcut key="16777230" mask="0" action="action.composition.change-info"/>
-	<shortcut key="121" mask="262144" action="action.edit.redo"/>
-	<shortcut key="122" mask="262144" action="action.edit.undo"/>
-	<shortcut key="16777265" mask="262144" action="action.edit.voice-1"/>
-	<shortcut key="16777266" mask="262144" action="action.edit.voice-2"/>
-	<shortcut key="16777229" mask="65536" action="action.file.exit"/>
-	<shortcut key="110" mask="262144" action="action.file.new"/>
-	<shortcut key="111" mask="262144" action="action.file.open"/>
-	<shortcut key="112" mask="262144" action="action.file.print"/>
-	<shortcut key="115" mask="262144" action="action.file.save"/>
-	<shortcut key="16777237" mask="0" action="action.file.save-as"/>
-	<shortcut key="16777226" mask="0" action="action.help.doc"/>
-	<shortcut key="97" mask="0" action="action.insert.chord"/>
-	<shortcut key="116" mask="0" action="action.insert.text"/>
-	<shortcut key="16777225" mask="131072" action="action.marker.add"/>
-	<shortcut key="16777220" mask="65536" action="action.marker.go-next"/>
-	<shortcut key="16777219" mask="65536" action="action.marker.go-previous"/>
-	<shortcut key="99" mask="262144" action="action.measure.copy"/>
-	<shortcut key="16777219" mask="393216" action="action.measure.go-first"/>
-	<shortcut key="16777220" mask="393216" action="action.measure.go-last"/>
-	<shortcut key="16777220" mask="262144" action="action.measure.go-next"/>
-	<shortcut key="16777219" mask="262144" action="action.measure.go-previous"/>
-	<shortcut key="118" mask="262144" action="action.measure.paste"/>
-	<shortcut key="16777258" mask="0" action="action.note.duration.change-dotted"/>
-	<shortcut key="16777263" mask="0" action="action.note.duration.change-division-type"/>	
-	<shortcut key="98" mask="0" action="action.note.effect.change-bend"/>
-	<shortcut key="120" mask="0" action="action.note.effect.change-dead"/>
-	<shortcut key="102" mask="0" action="action.note.effect.change-fade-in"/>
-	<shortcut key="111" mask="0" action="action.note.effect.change-ghost"/>
-	<shortcut key="103" mask="0" action="action.note.effect.change-grace"/>
-	<shortcut key="104" mask="0" action="action.note.effect.change-hammer"/>
-	<shortcut key="112" mask="0" action="action.note.effect.change-palm-mute"/>
-	<shortcut key="115" mask="0" action="action.note.effect.change-slide"/>
-	<shortcut key="118" mask="0" action="action.note.effect.change-vibrato"/>
-	<shortcut key="127" mask="262144" action="action.note.general.clean-beat"/>
-	<shortcut key="16777217" mask="262144" action="action.beat.general.voice-up"/>
-	<shortcut key="16777218" mask="262144" action="action.beat.general.voice-down"/>
-	<shortcut key="97" mask="262144" action="action.beat.general.voice-auto"/>
-	<shortcut key="16777219" mask="131072" action="action.note.general.decrement-semitone"/>
-	<shortcut key="16777220" mask="131072" action="action.note.general.increment-semitone"/>
-	<shortcut key="16777218" mask="131072" action="action.note.general.shift-down"/>
-	<shortcut key="16777217" mask="131072" action="action.note.general.shift-up"/>
-	<shortcut key="108" mask="0" action="action.note.general.tied"/>
-	<shortcut key="16777232" mask="0" action="action.settings.configure"/>
-	<shortcut key="98" mask="262144" action="action.tools.browser"/>
-	<shortcut key="16777225" mask="393216" action="action.track.add"/>
-	<shortcut key="16777217" mask="393216" action="action.track.go-previous"/>
-	<shortcut key="16777218" mask="393216" action="action.track.go-next"/>
-	<shortcut key="127" mask="393216" action="action.track.remove"/>
-	<shortcut key="16777234" mask="0" action="action.transport.mode"/>
-	<shortcut key="32" mask="0" action="action.transport.play"/>
-	<shortcut key="109" mask="262144" action="action.view.show-mixer"/>
-	<shortcut key="116" mask="262144" action="action.view.show-transport"/>
-</shortcuts>
diff --git a/TuxGuitar/dist/tuxguitar-shortcuts.xml b/TuxGuitar/dist/tuxguitar-shortcuts.xml
new file mode 100644
index 0000000..9c7fed9
--- /dev/null
+++ b/TuxGuitar/dist/tuxguitar-shortcuts.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shortcuts>
+	<shortcut key="48" mask="0" action="action.note.general.set-fret-number-0"/>
+	<shortcut key="49" mask="0" action="action.note.general.set-fret-number-1"/>
+	<shortcut key="50" mask="0" action="action.note.general.set-fret-number-2"/>
+	<shortcut key="51" mask="0" action="action.note.general.set-fret-number-3"/>
+	<shortcut key="52" mask="0" action="action.note.general.set-fret-number-4"/>
+	<shortcut key="53" mask="0" action="action.note.general.set-fret-number-5"/>
+	<shortcut key="54" mask="0" action="action.note.general.set-fret-number-6"/>
+	<shortcut key="55" mask="0" action="action.note.general.set-fret-number-7"/>
+	<shortcut key="56" mask="0" action="action.note.general.set-fret-number-8"/>
+	<shortcut key="57" mask="0" action="action.note.general.set-fret-number-9"/>
+	<shortcut key="127" mask="0" action="action.beat.general.delete-note-or-rest"/>
+	<shortcut key="16777225" mask="0" action="action.beat.general.insert-rest"/>
+ 	<shortcut key="16777259" mask="0" action="action.note.duration.increment-duration"/>
+	<shortcut key="16777261" mask="0" action="action.note.duration.decrement-duration"/>
+	<shortcut key="16777217" mask="0" action="action.caret.go-up"/>
+	<shortcut key="16777218" mask="0" action="action.caret.go-down"/>
+	<shortcut key="16777219" mask="0" action="action.caret.go-left"/>
+	<shortcut key="16777220" mask="0" action="action.caret.go-right"/>
+	<shortcut key="16777230" mask="0" action="action.composition.change-info"/>
+	<shortcut key="121" mask="262144" action="action.edit.redo"/>
+	<shortcut key="122" mask="262144" action="action.edit.undo"/>
+	<shortcut key="16777265" mask="262144" action="action.edit.voice-1"/>
+	<shortcut key="16777266" mask="262144" action="action.edit.voice-2"/>
+	<shortcut key="16777229" mask="65536" action="action.file.exit"/>
+	<shortcut key="110" mask="262144" action="action.file.new"/>
+	<shortcut key="111" mask="262144" action="action.file.open"/>
+	<shortcut key="112" mask="262144" action="action.file.print"/>
+	<shortcut key="115" mask="262144" action="action.file.save"/>
+	<shortcut key="16777237" mask="0" action="action.file.save-as"/>
+	<shortcut key="16777226" mask="0" action="action.help.doc"/>
+	<shortcut key="97" mask="0" action="action.insert.chord"/>
+	<shortcut key="116" mask="0" action="action.insert.text"/>
+	<shortcut key="16777225" mask="131072" action="action.marker.add"/>
+	<shortcut key="16777220" mask="65536" action="action.marker.go-next"/>
+	<shortcut key="16777219" mask="65536" action="action.marker.go-previous"/>
+	<shortcut key="99" mask="262144" action="action.measure.copy"/>
+	<shortcut key="16777219" mask="393216" action="action.measure.go-first"/>
+	<shortcut key="16777220" mask="393216" action="action.measure.go-last"/>
+	<shortcut key="16777220" mask="262144" action="action.measure.go-next"/>
+	<shortcut key="16777219" mask="262144" action="action.measure.go-previous"/>
+	<shortcut key="118" mask="262144" action="action.measure.paste"/>
+	<shortcut key="16777258" mask="0" action="action.note.duration.change-dotted"/>
+	<shortcut key="16777263" mask="0" action="action.note.duration.change-division-type"/>	
+	<shortcut key="98" mask="0" action="action.note.effect.change-bend"/>
+	<shortcut key="120" mask="0" action="action.note.effect.change-dead"/>
+	<shortcut key="102" mask="0" action="action.note.effect.change-fade-in"/>
+	<shortcut key="111" mask="0" action="action.note.effect.change-ghost"/>
+	<shortcut key="103" mask="0" action="action.note.effect.change-grace"/>
+	<shortcut key="104" mask="0" action="action.note.effect.change-hammer"/>
+	<shortcut key="112" mask="0" action="action.note.effect.change-palm-mute"/>
+	<shortcut key="115" mask="0" action="action.note.effect.change-slide"/>
+	<shortcut key="118" mask="0" action="action.note.effect.change-vibrato"/>
+	<shortcut key="127" mask="262144" action="action.note.general.clean-beat"/>
+	<shortcut key="16777217" mask="262144" action="action.beat.general.voice-up"/>
+	<shortcut key="16777218" mask="262144" action="action.beat.general.voice-down"/>
+	<shortcut key="97" mask="262144" action="action.beat.general.voice-auto"/>
+	<shortcut key="16777219" mask="131072" action="action.note.general.decrement-semitone"/>
+	<shortcut key="16777220" mask="131072" action="action.note.general.increment-semitone"/>
+	<shortcut key="16777218" mask="131072" action="action.note.general.shift-down"/>
+	<shortcut key="16777217" mask="131072" action="action.note.general.shift-up"/>
+	<shortcut key="108" mask="0" action="action.note.general.tied"/>
+	<shortcut key="16777232" mask="0" action="action.settings.configure"/>
+	<shortcut key="98" mask="262144" action="action.tools.browser"/>
+	<shortcut key="16777225" mask="393216" action="action.track.add"/>
+	<shortcut key="16777217" mask="393216" action="action.track.go-previous"/>
+	<shortcut key="16777218" mask="393216" action="action.track.go-next"/>
+	<shortcut key="127" mask="393216" action="action.track.remove"/>
+	<shortcut key="16777234" mask="0" action="action.transport.mode"/>
+	<shortcut key="32" mask="0" action="action.transport.play"/>
+	<shortcut key="109" mask="262144" action="action.view.show-mixer"/>
+	<shortcut key="116" mask="262144" action="action.view.show-transport"/>
+</shortcuts>
diff --git a/TuxGuitar/dist/tuxguitar.cfg b/TuxGuitar/dist/tuxguitar.cfg
new file mode 100644
index 0000000..4c4e888
--- /dev/null
+++ b/TuxGuitar/dist/tuxguitar.cfg
@@ -0,0 +1,7 @@
+skin=Oxygen
+midi.port=Gervill
+midi.sequencer=tuxguitar.sequencer
+
+
+## Needed for MacOs releases
+#painter.force-os-defaults=true
diff --git a/TuxGuitar/doc/AUTHORS b/TuxGuitar/doc/AUTHORS
index 9cd1a75..063ed71 100644
--- a/TuxGuitar/doc/AUTHORS
+++ b/TuxGuitar/doc/AUTHORS
@@ -61,7 +61,11 @@ Jose Gato
 
     * Mac version
     * Contact: <jgato at gsyc.info>
-    
+
+Benjamin Scherrer
+
+    * Deutsch translation
+
 Thomas Thiel
 
     * Deutsch translation
@@ -86,6 +90,11 @@ Máté Huszár
 
     * Hungarian translation
 
+Tim Loo
+
+    * Chinese (Taiwan) translation
+    * Contact: http://www.sinan-melody.co.cc/wordpress_1/
+
 PTT Team
 
     * Chinese (Taiwan) translation
@@ -167,4 +176,20 @@ Jean-Pierre POULIN
 
 Lobo
 	* Basque translation
-	* Contact: <lobo1985guitarrista at hotmail.es> http://www.myspace.com/lobotheguitardude
\ No newline at end of file
+	* Contact: <lobo1985guitarrista at hotmail.es> http://www.myspace.com/lobotheguitardude
+
+Pekka Manninen
+	* Finnish translation
+	* Contact: <pekka.t.manninen at iki.fi>
+
+Rytis Umbrasas
+	* Lithuanian translation
+	* Contact: <rytumb at gmail.com>
+
+Periklis Ntanasis
+	* Greek translation
+	* Contact: <pntanasis at gmail.com> http://www.greekrocktabs.gr
+
+Svetoslav Stefanov
+	* Bulgarian translation
+	* Contact: <lfu.project at gmail.com> http://learnfree.eu
\ No newline at end of file
diff --git a/TuxGuitar/doc/CHANGES b/TuxGuitar/doc/CHANGES
index 298e932..3340566 100644
--- a/TuxGuitar/doc/CHANGES
+++ b/TuxGuitar/doc/CHANGES
@@ -1,3 +1,18 @@
+TuxGuitar Dev changes:
+
+* Add show/hide toolbars feature.
+* Add let ring support
+* Add song templates support
+* Add count down support
+* Add bank selection support
+* Soundfont selection support in gervill plugin
+* Better support in jack plugin
+* New oxygen skin
+* New gpx importer plugin
+* New svg exporter plugin
+* New image exporter plugin 
+--* New abc exporter and importer plugin.
+
 TuxGuitar 1.2 changes:
 
 * Fix some bugs
diff --git a/TuxGuitar/pom.xml b/TuxGuitar/pom.xml
new file mode 100644
index 0000000..bb661e1
--- /dev/null
+++ b/TuxGuitar/pom.xml
@@ -0,0 +1,32 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar</artifactId>
+	<packaging>jar</packaging>
+	<name>${project.artifactId}</name>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+	</build>
+
+	<dependencies>
+		<dependency>
+			<groupId>${project.groupId}</groupId>
+			<artifactId>tuxguitar-lib</artifactId>
+			<scope>provided</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>${org.eclipse.swt.groupId}</groupId>
+			<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+			<scope>provided</scope>
+		</dependency>
+	</dependencies>
+</project>
diff --git a/TuxGuitar/share/help/about.html b/TuxGuitar/share/help/about.html
index 7d6e403..707466d 100644
--- a/TuxGuitar/share/help/about.html
+++ b/TuxGuitar/share/help/about.html
@@ -2,217 +2,312 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-		<link rel="stylesheet" href="styles.css" type="text/css"></link>
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-
-<body>
-
-<h1>TuxGuitar project: About</h1>
-
-<h2>Description:</h2>
-
-<p>
-TuxGuitar is a multitrack tablature editor and player written in Java unsing SWT Graphic libraries.  
-It is multi-platform application, available for Linux, Windows, MacOS, FreeBSD and other operating systems. 
-TuxGuitar is open source software, released under the GNU Lesser General Public License.
-</p>
-
-<h2>Website</h2>
-
-<p>
-You should check TuxGuitar project website on <b>http://www.tuxguitar.com.ar</b><br/><br/>
-On the website exists a forum where you can find answers for almost all of your TuxGuitar related questions.<br/><br/>
-There is also a Wiki page on the webite.
-</p>
-
-<h2>Source repository</h2>
-<p>
-TuxGuitar source repository can be browsed on  <b>http://tuxguitar.cvs.sourceforge.net</b>. From this CVS repository you can download and compile TuxGuitar "under development" version.
-</p>
-
-
-<h2>Contribution</h2>
-
-<p>
-If you have sufficient skills and some ideas, you are free to join the project.<br/><br/>
-You can also contribute by paying a small donation to the project. More details on the website (<b>http://www.tuxguitar.com.ar/donate.html</b>).
-</p>
-
-
-<h2>Authors</h2>
-<br/>
-<h4>Julián Gabriel Casadesús</h4>
-<ul>
-	<li>Project Admin</li>
-	<li>Developer</li>  
-	<li>Web Page: <b>http://www.herac.com.ar</b></li>
-</ul>
-
-<h4>Hernán Andrés Casadesús</h4>
-<ul>
-	<li>Developer</li>  
-	<li>Web Page: <b>http://www.herac.com.ar</b></li>
-</ul>
-
-<h4>Nahuel Portilla</h4>
-<ul>
-	<li>Developer</li>
-</ul>
-
-<h4>Nikola Kolarović</h4>
-<ul>
-	<li>Developer</li>
-	<li>Documentation</li>
-	<li>Serbian translation</li>
-</ul>
-
-<h4>Aaron Spike</h4>
-<ul>
-	<li>Developer</li>
-	<li>Web Page: <b>http://www.ekips.org</b></li>
-</ul>
-
-<h4>Ersplus</h4>
-<ul>
-	<li>French translation</li>  
-	<li>Ersplus Icon Theme</li>
-	<li>Web Page: <b>http://ersplus.free.fr/</b></li>
-</ul>
-
-<h4>Licnep</h4>
-<ul>
-	<li>Blue Serious Icon Theme</li>
-</ul>
-
-<h4>Sascha Riemer</h4>
-<ul>
-	<li>Lavender Icon Theme</li>
-</ul>
-
-<h4>Auria</h4>
-<ul>
-	<li>CoreAudio service for MacOS</li>
-</ul>
-
-<h4>Tomasz Bojczuk</h4>
-<ul>
-	<li>Polish translation</li>
-</ul>
-
-<h4>Jose Gato</h4>
-<ul>
-	<li>Mac version</li>
-</ul>
-
-<h4>Thomas Thiel</h4>
-<ul>
-	<li>Deutsch translation</li>
-	<li>Web Page: <b>http://www.wolfchild.de</b></li>
-</ul>
-
-<h4>Sergio Abreu</h4>
-<ul>           
-	<li>Portuguese translation</li>
-	<li>Web Page: <b>http://sitedosergio.sitesbr.net</b></li>
-</ul>
-
-<h4>Markon</h4>
-<ul>
-	<li>Italian translation</li>
-</ul>
-
-<h4>Zdenek Kunicky</h4>
-<ul>
-	<li>Czech translation</li>
-</ul>
-
-<h4>Máté Huszár</h4>
-<ul>
-	<li>Hungarian translation</li>
-</ul>
-
-<h4>PTT Team</h4>
-<ul>
-	<li>Chinese (Taiwan) translation</li>
-	<li>Web Page: <b>http://www.ptt.cc</b></li>
-</ul>
-
-<h4>Shuo Huang</h4>
-<ul>
-	<li>Chinese (GB) translation</li>
-	<li>Web Page: <b>http://www.cucum.cn</b></li>
-</ul>
-
-<h4>Philippe Coval</h4>
-<ul>
-	<li>Debian package maintainer</li>
-	<li>French translation</li>
-	<li>Web Page: <b>http://rzr.online.fr/contrib.htm</b></li>
-</ul>
-
-<h4>Orcan Ogetbil</h4>
-<ul>
-	<li>Fedora package maintainer</li>
-</ul>
-
-<h4>John Gustafsson</h4>
-<ul>
-	<li>Swedish translation</li>
-</ul>
-
-<h4>Pietro Cerutti</h4>
-<ul>
-	<li>FreeBSD port maintainer</li>
-	<li>Web Page: <b>http://www.gahr.ch/</b></li>
-</ul>
-
-<h4>Facundo Corradini</h4>
-<ul>
-	<li>Documentation</li>
-	<li>Web Page: <b>http://www.corradiniestudioweb.com.ar</b></li>
-</ul>
-
-<h4>Gabe Hargrave</h4>
-<ul>
-	<li>Documentation</li>
-</ul>
-
-<h4>Vadim Ipatov</h4>
-<ul>
-	<li>Russian translation</li>
-</ul>
-
-<h4>Zoya Ignatova</h4>
-<ul>
-	<li>Russian translation</li>
-</ul>
-
-<h4>Serge van Namen</h4>
-<ul>
-	<li>Dutch translation</li>
-</ul>
-
-<h4>Yuriy Shakalov</h4>
-<ul>
-	<li>Ukrainian translation</li>
-</ul>
-
-<h4>Xevi Noe i Nogueiras</h4>
-<ul>
-	<li>Catalan translation</li>
-</ul>
-
-<h4>Jean-Pierre POULIN</h4>
-<ul>
-	<li>Scales contributor</li>
-	<li>Web Page: <b>http://www.jeanpierrepoulin.com/</b></li>
-</ul>
-
-<h4>Lobo</h4>
-<ul>
-	<li>Basque translation</li>
-	<li>Web Page: <b>http://www.myspace.com/lobotheguitardude</b></li>
-</ul>
-
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>TuxGuitar project: About</h1>
+						
+						<h2>Description:</h2>
+						
+						<p>
+						TuxGuitar is a multitrack tablature editor and player written in Java unsing SWT Graphic libraries.  
+						It is multi-platform application, available for Linux, Windows, MacOS, FreeBSD and other operating systems. 
+						TuxGuitar is open source software, released under the GNU Lesser General Public License.
+						</p>
+						
+						<h2>Website</h2>
+						
+						<p>
+						You should check TuxGuitar project website on <b>http://www.tuxguitar.com.ar</b><br/><br/>
+						On the website exists a forum where you can find answers for almost all of your TuxGuitar related questions.<br/><br/>
+						There is also a Wiki page on the webite.
+						</p>
+						
+						<h2>Source repository</h2>
+						<p>
+						TuxGuitar source repository can be browsed on  <b>http://tuxguitar.cvs.sourceforge.net</b>. From this CVS repository you can download and compile TuxGuitar "under development" version.
+						</p>
+						
+						
+						<h2>Contribution</h2>
+						
+						<p>
+						If you have sufficient skills and some ideas, you are free to join the project.<br/><br/>
+						You can also contribute by paying a small donation to the project. More details on the website (<b>http://www.tuxguitar.com.ar/donate.html</b>).
+						</p>
+						
+						
+						<h2>Authors</h2>
+						<br/>
+						<h4>Julián Gabriel Casadesús</h4>
+						<ul>
+							<li>Project Admin</li>
+							<li>Developer</li>  
+							<li>Web Page: <b>http://www.herac.com.ar</b></li>
+						</ul>
+						
+						<h4>Hernán Andrés Casadesús</h4>
+						<ul>
+							<li>Developer</li>  
+							<li>Web Page: <b>http://www.herac.com.ar</b></li>
+						</ul>
+						
+						<h4>Nahuel Portilla</h4>
+						<ul>
+							<li>Developer</li>
+						</ul>
+						
+						<h4>Nikola Kolarović</h4>
+						<ul>
+							<li>Developer</li>
+							<li>Documentation</li>
+							<li>Serbian translation</li>
+						</ul>
+						
+						<h4>Aaron Spike</h4>
+						<ul>
+							<li>Developer</li>
+							<li>Web Page: <b>http://www.ekips.org</b></li>
+						</ul>
+						
+						<h4>Ersplus</h4>
+						<ul>
+							<li>French translation</li>  
+							<li>Ersplus Icon Theme</li>
+							<li>Web Page: <b>http://ersplus.free.fr/</b></li>
+						</ul>
+						
+						<h4>Licnep</h4>
+						<ul>
+							<li>Blue Serious Icon Theme</li>
+						</ul>
+						
+						<h4>Sascha Riemer</h4>
+						<ul>
+							<li>Lavender Icon Theme</li>
+						</ul>
+						
+						<h4>Auria</h4>
+						<ul>
+							<li>CoreAudio service for MacOS</li>
+						</ul>
+						
+						<h4>Tomasz Bojczuk</h4>
+						<ul>
+							<li>Polish translation</li>
+						</ul>
+						
+						<h4>Jose Gato</h4>
+						<ul>
+							<li>Mac version</li>
+						</ul>
+						
+						<h4>Benjamin Scherrer</h4>
+						<ul>
+							<li>Deutsch translation</li>
+						</ul>
+						
+						<h4>Thomas Thiel</h4>
+						<ul>
+							<li>Deutsch translation</li>
+							<li>Web Page: <b>http://www.wolfchild.de</b></li>
+						</ul>
+						
+						<h4>Sergio Abreu</h4>
+						<ul>           
+							<li>Portuguese translation</li>
+							<li>Web Page: <b>http://sitedosergio.sitesbr.net</b></li>
+						</ul>
+						
+						<h4>Markon</h4>
+						<ul>
+							<li>Italian translation</li>
+						</ul>
+						
+						<h4>Zdenek Kunicky</h4>
+						<ul>
+							<li>Czech translation</li>
+						</ul>
+						
+						<h4>Máté Huszár</h4>
+						<ul>
+							<li>Hungarian translation</li>
+						</ul>
+						
+						<h4>Tim Loo</h4>
+						<ul>
+							<li>Chinese (Taiwan) translation</li>
+							<li>Web Page: <b>http://www.sinan-melody.co.cc/wordpress_1/</b></li>
+						</ul>    
+						
+						<h4>PTT Team</h4>
+						<ul>
+							<li>Chinese (Taiwan) translation</li>
+							<li>Web Page: <b>http://www.ptt.cc</b></li>
+						</ul>
+						
+						<h4>Shuo Huang</h4>
+						<ul>
+							<li>Chinese (GB) translation</li>
+							<li>Web Page: <b>http://www.cucum.cn</b></li>
+						</ul>
+						
+						<h4>Philippe Coval</h4>
+						<ul>
+							<li>Debian package maintainer</li>
+							<li>French translation</li>
+							<li>Web Page: <b>http://rzr.online.fr/contrib.htm</b></li>
+						</ul>
+						
+						<h4>Orcan Ogetbil</h4>
+						<ul>
+							<li>Fedora package maintainer</li>
+						</ul>
+						
+						<h4>John Gustafsson</h4>
+						<ul>
+							<li>Swedish translation</li>
+						</ul>
+						
+						<h4>Pietro Cerutti</h4>
+						<ul>
+							<li>FreeBSD port maintainer</li>
+							<li>Web Page: <b>http://www.gahr.ch/</b></li>
+						</ul>
+						
+						<h4>Facundo Corradini</h4>
+						<ul>
+							<li>Documentation</li>
+							<li>Web Page: <b>http://www.corradiniestudioweb.com.ar</b></li>
+						</ul>
+						
+						<h4>Gabe Hargrave</h4>
+						<ul>
+							<li>Documentation</li>
+						</ul>
+						
+						<h4>Vadim Ipatov</h4>
+						<ul>
+							<li>Russian translation</li>
+						</ul>
+						
+						<h4>Zoya Ignatova</h4>
+						<ul>
+							<li>Russian translation</li>
+						</ul>
+						
+						<h4>Serge van Namen</h4>
+						<ul>
+							<li>Dutch translation</li>
+						</ul>
+						
+						<h4>Yuriy Shakalov</h4>
+						<ul>
+							<li>Ukrainian translation</li>
+						</ul>
+						
+						<h4>Xevi Noe i Nogueiras</h4>
+						<ul>
+							<li>Catalan translation</li>
+						</ul>
+						
+						<h4>Jean-Pierre POULIN</h4>
+						<ul>
+							<li>Scales contributor</li>
+							<li>Web Page: <b>http://www.jeanpierrepoulin.com/</b></li>
+						</ul>
+						
+						<h4>Lobo</h4>
+						<ul>
+							<li>Basque translation</li>
+							<li>Web Page: <b>http://www.myspace.com/lobotheguitardude</b></li>
+						</ul>
+						
+						<h4>Pekka Manninen</h4>
+						<ul>
+							<li>Finnish translation</li>
+						</ul>
+						
+						<h4>Rytis Umbrasas</h4>
+						<ul>
+							<li>Lithuanian translation</li>
+						</ul>
+						
+						<h4>Periklis Ntanasis</h4>
+						<ul>
+							<li>Greek translation</li>
+							<li>Web Page: <b>http://www.greekrocktabs.gr</b></li>
+						</ul>
+						
+						<h4>Svetoslav Stefanov</h4>
+						<ul>
+							<li>Bulgarian translation</li>
+							<li>Web Page: <b>http://learnfree.eu</b></li>
+						</ul>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
+
diff --git a/TuxGuitar/share/help/edit_chord.html b/TuxGuitar/share/help/edit_chord.html
index 0f71601..664335f 100644
--- a/TuxGuitar/share/help/edit_chord.html
+++ b/TuxGuitar/share/help/edit_chord.html
@@ -2,167 +2,230 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-
-<h1>Chord Editor dialog</h1>
-
-
-<div class="level1">
-
-<p>
- This is a dialog that allows you to get a chord based on it’s theory, recognize a chord based on the tab, memorize or get a chord from a library, and few more things. This is also the only way to add a chord name or/and diagram in the tab.
-</p>
-
-<p>
-<img src="images/edit/chord_dialog.png" title=" The Dialog " alt=" The Dialog " />
-</p>
-
-<p>
-As you can see chord dialog consists of many things, but is still easy to use. Nevertheless, every feature of the dialog will be explained here.
-</p>
-</div>
-
-<h2><a name="opening_the_dialog" id="opening_the_dialog">Opening the dialog</a></h2>
-<div class="level2">
-
-<p>
- When you open the dialog by clicking on it’s icon (or hitting “<strong>A</strong>” key as shortcut), the first thing you will notice is that the notes from your tab are now in the chord dialog <strong>editor</strong>, the chord is recognized according to the theory and you can hear the sound preview of it.
-</p>
-</div>
-
-<h2><a name="editor" id="editor">Editor</a></h2>
-<div class="level2">
-
-<p>
- In <strong>editor</strong> you can compose your own chord by simple drawing. You should first choose the starting fret with the slider on the right side of the <strong>editor</strong> and then put the black dots on the frets. Clicking above the line on the editor changes the note between the “empty-string” (white dot) or “don’t play this string” sign (marked with <strong>X</strong>). The span of the editor is 5 frets, but you will have to admit that you rar [...]
-</p>
-
-<p>
-While you are “drawing” the chord, it will constantly be recognized, which can be seen in recognizer window.
-</p>
-
-<p>
-After composing your chord you can save it to library, or simply press OK and add it to tab.
-</p>
-</div>
-
-<h2><a name="chord" id="chord">Chord</a></h2>
-<div class="level2">
-
-<p>
- This bunch of controls is used to compose a chord based on it’s name (theory).
-</p>
-
-<p>
-You should first choose chord root, either in sharp or flat. Then you should choose chord flavor (major, maj7, sus2, sus4...).
-</p>
-
-<p>
-Next, you can alterate the chord. You can make <strong>/9</strong> chord (adds b7 and 9 tones), <strong>/11</strong> chord (adds b7, 9 and 11 tones) and <strong>/13</strong> chord (adds b7, 9, 11 and 13 tones). By enabling the “add” checkbox you get the “<strong>add</strong>” chord (which means add13 chord has only 13 note, without b7, 9 and 11).
-</p>
-
-<p>
- You can modify the selected alteration with <strong>+/-</strong> control, and other alterations with appropriate +/- box (rightmost of the <strong>Chord</strong> controls).
-</p>
-
-<p>
-On the bottom of <strong>chord</strong> controls is a bass note. If you choose a different bass note than the chord root you will get so-called inverted chord.
-</p>
-</div>
-
-<h2><a name="proposals" id="proposals">Proposals</a></h2>
-<div class="level2">
-
-<p>
- Based on the chosen chord theory, you will get proposals for the fingerings. On the proposal thumbnails you can see the chord position and the fingering. The chord proposals are generated and sorted, so don’t be too dissapointed if you don’t see your favourite chord on the second position.
-</p>
-
-<p>
-On the other hand, proposals are generated for any tunning and any criteria the same way. You may be surprised when it digs some convenient fingering for a chord you had trouble with.
-</p>
-
-<p>
-After you click on the proposal, it will appear in <strong>editor</strong>, it’s <strong>name</strong> would be written and you should hear the way it sounds.
-</p>
-</div>
-
-<h2><a name="name" id="name">Name</a></h2>
-<div class="level2">
-
-<p>
- The title of the chord is changed every time you choose one of the proposals. The chord name isn’t displayed while you edit the chord because you would loose the chord name you typed in the first place.
-</p>
-</div>
-
-<h2><a name="recognized" id="recognized">Recognized</a></h2>
-<div class="level2">
-
-<p>
- The <strong>recognized</strong> window contains the proposals of the chord title, according to the theory. Besides the chord name you will see the probability of a chord. The probability is less when a chord is missing some tone to be complete.
-</p>
-
-<p>
-When you click on an item in recognition window, the <strong>chord</strong> controls should change based on the chord you chose, it’s name will be displayed in title window, and the <strong>proposals</strong> of more fingering positions should be generated below.
-</p>
-</div>
-
-<h2><a name="library" id="library">Library</a></h2>
-<div class="level2">
-
-<p>
- When you compose a convenient chord, you can add it into <strong>library</strong>. Once added, it can be accessed outside the chord dialog - by clicking on the arrow besides <strong>Chord Editor</strong> icon in the toolbar. When you add a chord to a tab that way, it’s name and/or diagram will be displayed in the tab.
-</p>
-
-<p>
-In Chord Editor dialog you can manipulate the library list: add, rename or remove chord from a library.
-</p>
-</div>
-
-<h2><a name="settings" id="settings">Settings</a></h2>
-<div class="level2">
-
-<p>
- In the <strong>Settings dialog</strong> are some options which can customize and improve the chord proposal assembly process.
-</p>
-
-<p>
-<img src="images/edit/chord_settings_dialog.png" title=" Chord Settings " alt=" Chord Settings " />
-</p>
-
-<p>
-<strong>Chords to display</strong> is the number of the best chord proposals to be considered into proposal list. Note that this number of proposals wouldn’t be displayed, because the very similar fingerings (like x02210 and x0221x for <em>Am</em>) will not be included.
-</p>
-
-<p>
- <strong>Chord type</strong> is a very important property. Besides the “<strong>Most common</strong>” chords, here you can choose between “<strong>Open-voiced chords</strong>“, “<strong>Closed-voiced chords</strong>” and “<strong>Chord inversions</strong>“. While chord inversions mean that the bass note isn’t the root note of the chord, open- and closed-voiced chords are a little bit more specific: closed voice have tones very close ( [...]
-</p>
-
-<p>
-<strong>Open chords</strong> include empty strings into chord composition, so you get “open chords”. For example, famous “Hendrix chord” is an open chord ( 076780 ). <strong>Open chords</strong> are another <strong>chord type</strong>, but can be used in combination with any of them.
-</p>
-
-<p>
-<strong>Search frets</strong> is an option for you if you are looking for a chord on a specific position. Normally all the chords from fret 0 to fret 15 will be proposed, but you can narrow (or expand!) the search by modifying the starting and ending fret. If <strong>open chords</strong> is selected, zero-fret will be included in the search, too.
-</p>
-
-<p>
-By clicking on the OK button your changes will be applied, but they won’t be remembered next time you run TuxGuitar.
-</p>
-</div>
-
-<h2><a name="chord_layout" id="chord_layout">Chord layout</a></h2>
-<div class="level2">
-
-<p>
- When you insert a chord it will be displayed on the main tab view. There are two different views of a chord, plus mixed one. It is changed in the main menu, checking one or both of the items from <strong>Layout→Chord_Style</strong>.
-</p>
-
-<p>
-You can view the chord as a diagram (where to put the fingers), only its name (entered in the library), or both. 
-</p>
-
-</div><br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Chord Editor dialog</h1>
+						
+						
+						<div class="level1">
+						
+						<p>
+						 This is a dialog that allows you to get a chord based on it’s theory, recognize a chord based on the tab, memorize or get a chord from a library, and few more things. This is also the only way to add a chord name or/and diagram in the tab.
+						</p>
+						
+						<p>
+						<img src="images/edit/chord_dialog.png" title=" The Dialog " alt=" The Dialog " />
+						</p>
+						
+						<p>
+						As you can see chord dialog consists of many things, but is still easy to use. Nevertheless, every feature of the dialog will be explained here.
+						</p>
+						</div>
+						
+						<h2><a name="opening_the_dialog" id="opening_the_dialog">Opening the dialog</a></h2>
+						<div class="level2">
+						
+						<p>
+						 When you open the dialog by clicking on it’s icon (or hitting “<strong>A</strong>” key as shortcut), the first thing you will notice is that the notes from your tab are now in the chord dialog <strong>editor</strong>, the chord is recognized according to the theory and you can hear the sound preview of it.
+						</p>
+						</div>
+						
+						<h2><a name="editor" id="editor">Editor</a></h2>
+						<div class="level2">
+						
+						<p>
+						 In <strong>editor</strong> you can compose your own chord by simple drawing. You should first choose the starting fret with the slider on the right side of the <strong>editor</strong> and then put the black dots on the frets. Clicking above the line on the editor changes the note between the “empty-string” (white dot) or “don’t play this string” sign (marked with <strong>X</strong>). The span of the editor is 5 frets, but you will have to admit that y [...]
+						</p>
+						
+						<p>
+						While you are “drawing” the chord, it will constantly be recognized, which can be seen in recognizer window.
+						</p>
+						
+						<p>
+						After composing your chord you can save it to library, or simply press OK and add it to tab.
+						</p>
+						</div>
+						
+						<h2><a name="chord" id="chord">Chord</a></h2>
+						<div class="level2">
+						
+						<p>
+						 This bunch of controls is used to compose a chord based on it’s name (theory).
+						</p>
+						
+						<p>
+						You should first choose chord root, either in sharp or flat. Then you should choose chord flavor (major, maj7, sus2, sus4...).
+						</p>
+						
+						<p>
+						Next, you can alterate the chord. You can make <strong>/9</strong> chord (adds b7 and 9 tones), <strong>/11</strong> chord (adds b7, 9 and 11 tones) and <strong>/13</strong> chord (adds b7, 9, 11 and 13 tones). By enabling the “add” checkbox you get the “<strong>add</strong>” chord (which means add13 chord has only 13 note, without b7, 9 and 11).
+						</p>
+						
+						<p>
+						 You can modify the selected alteration with <strong>+/-</strong> control, and other alterations with appropriate +/- box (rightmost of the <strong>Chord</strong> controls).
+						</p>
+						
+						<p>
+						On the bottom of <strong>chord</strong> controls is a bass note. If you choose a different bass note than the chord root you will get so-called inverted chord.
+						</p>
+						</div>
+						
+						<h2><a name="proposals" id="proposals">Proposals</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Based on the chosen chord theory, you will get proposals for the fingerings. On the proposal thumbnails you can see the chord position and the fingering. The chord proposals are generated and sorted, so don’t be too dissapointed if you don’t see your favourite chord on the second position.
+						</p>
+						
+						<p>
+						On the other hand, proposals are generated for any tunning and any criteria the same way. You may be surprised when it digs some convenient fingering for a chord you had trouble with.
+						</p>
+						
+						<p>
+						After you click on the proposal, it will appear in <strong>editor</strong>, it’s <strong>name</strong> would be written and you should hear the way it sounds.
+						</p>
+						</div>
+						
+						<h2><a name="name" id="name">Name</a></h2>
+						<div class="level2">
+						
+						<p>
+						 The title of the chord is changed every time you choose one of the proposals. The chord name isn’t displayed while you edit the chord because you would loose the chord name you typed in the first place.
+						</p>
+						</div>
+						
+						<h2><a name="recognized" id="recognized">Recognized</a></h2>
+						<div class="level2">
+						
+						<p>
+						 The <strong>recognized</strong> window contains the proposals of the chord title, according to the theory. Besides the chord name you will see the probability of a chord. The probability is less when a chord is missing some tone to be complete.
+						</p>
+						
+						<p>
+						When you click on an item in recognition window, the <strong>chord</strong> controls should change based on the chord you chose, it’s name will be displayed in title window, and the <strong>proposals</strong> of more fingering positions should be generated below.
+						</p>
+						</div>
+						
+						<h2><a name="library" id="library">Library</a></h2>
+						<div class="level2">
+						
+						<p>
+						 When you compose a convenient chord, you can add it into <strong>library</strong>. Once added, it can be accessed outside the chord dialog - by clicking on the arrow besides <strong>Chord Editor</strong> icon in the toolbar. When you add a chord to a tab that way, it’s name and/or diagram will be displayed in the tab.
+						</p>
+						
+						<p>
+						In Chord Editor dialog you can manipulate the library list: add, rename or remove chord from a library.
+						</p>
+						</div>
+						
+						<h2><a name="settings" id="settings">Settings</a></h2>
+						<div class="level2">
+						
+						<p>
+						 In the <strong>Settings dialog</strong> are some options which can customize and improve the chord proposal assembly process.
+						</p>
+						
+						<p>
+						<img src="images/edit/chord_settings_dialog.png" title=" Chord Settings " alt=" Chord Settings " />
+						</p>
+						
+						<p>
+						<strong>Chords to display</strong> is the number of the best chord proposals to be considered into proposal list. Note that this number of proposals wouldn’t be displayed, because the very similar fingerings (like x02210 and x0221x for <em>Am</em>) will not be included.
+						</p>
+						
+						<p>
+						 <strong>Chord type</strong> is a very important property. Besides the “<strong>Most common</strong>” chords, here you can choose between “<strong>Open-voiced chords</strong>“, “<strong>Closed-voiced chords</strong>” and “<strong>Chord inversions</strong>“. While chord inversions mean that the bass note isn’t the root note of the chord, open- and closed-voiced chords are a little bit more specific: closed voice have tones very c [...]
+						</p>
+						
+						<p>
+						<strong>Open chords</strong> include empty strings into chord composition, so you get “open chords”. For example, famous “Hendrix chord” is an open chord ( 076780 ). <strong>Open chords</strong> are another <strong>chord type</strong>, but can be used in combination with any of them.
+						</p>
+						
+						<p>
+						<strong>Search frets</strong> is an option for you if you are looking for a chord on a specific position. Normally all the chords from fret 0 to fret 15 will be proposed, but you can narrow (or expand!) the search by modifying the starting and ending fret. If <strong>open chords</strong> is selected, zero-fret will be included in the search, too.
+						</p>
+						
+						<p>
+						By clicking on the OK button your changes will be applied, but they won’t be remembered next time you run TuxGuitar.
+						</p>
+						</div>
+						
+						<h2><a name="chord_layout" id="chord_layout">Chord layout</a></h2>
+						<div class="level2">
+						
+						<p>
+						 When you insert a chord it will be displayed on the main tab view. There are two different views of a chord, plus mixed one. It is changed in the main menu, checking one or both of the items from <strong>Layout→Chord_Style</strong>.
+						</p>
+						
+						<p>
+						You can view the chord as a diagram (where to put the fingers), only its name (entered in the library), or both. 
+						</p>
+						
+						</div><br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/edit_effects.html b/TuxGuitar/share/help/edit_effects.html
index 8c2e306..908384d 100644
--- a/TuxGuitar/share/help/edit_effects.html
+++ b/TuxGuitar/share/help/edit_effects.html
@@ -2,360 +2,423 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-
-<h1>Note effects</h1>
-
-
-<div class="level1">
-
-<p>
- As you already know, playing guitar (and any other instrument) isn’t just playing the notes in the right duration and dynamics. There are several “tricks” that are unique for any instrument. TuxGuitar supports effects specific for guitar and bass guitar.
-</p>
-
-<p>
-Almost all note effects have an icon on the toolbar, but also can be accessed in <strong>Note→Effects</strong> menu. The effect is applied on the current cursor position.
-</p>
-<p> <img src="images/start/tb_effects.png" alt=" Effects toolbar" /></p>
-</div>
-
-<h2><a name="dead_note" id="dead_note">Dead note</a></h2>
-<div class="level2">
-
-<p>
- Dead note (sometimes referred as rake) is a playing effect which produces more of a percussive effect than a regular note with it’s pitch. Dead note has short and “clicking” sound. It is used very often by guitar players. 
-</p>
-
-<p>
-Because of the MIDI standard, all MIDI tab editing applications (Guitar Pro, Tabledit, TuxGuitar...) have a little bit different dead note implementation - it is not exactly dead. It is short, it is percussive, but you can adjust the pitch of the dead note.
-</p>
-
-<p>
-So in TuxGuitar, if you put a dead note in the scores it will be heard like a muted zero-fret string. If you put a regular fret value and mark that note as dead, it will become a dead note, but will retain the previous pitch.
-</p>
-
-<p>
-Dead note is marked with “<strong>X</strong>” sign in the tab.
-</p>
-
-</div>
-
-<h2><a name="ghost_note" id="ghost_note">Ghost note</a></h2>
-<div class="level2">
-
-<p>
- Ghost note is effect that changes note’s dynamics (loudness) to <strong>more quiet</strong>. The difference between the Ghost note and lesser dynamics is seen only visually, while it sounds the same.
-</p>
-
-<p>
-Ghost note is marked by a note between parentheses <strong>( )</strong>.
-</p>
-
-</div>
-
-<h2><a name="accentuated_and_heavy_accentuated_note" id="accentuated_and_heavy_accentuated_note">Accentuated and heavy accentuated note</a></h2>
-<div class="level2">
-
-<p>
- Like Ghost note, these effects change note’s volume. Accentuated note gives it a little louder dynamics, and heavy accentuated note makes the note even louder.
-</p>
-
-<p>
-Accentuated note is marked with a “<strong>></strong>” sign, and heavy accentuated with “<strong>^</strong>” sign.
-</p>
-
-</div>
-
-<h2><a name="harmonics" id="harmonics">Harmonics</a></h2>
-<div class="level2">
-
-<p>
- Guitar harmonics are somewhat special note effect, because the result is a note with different pitch.
-</p>
-
-<p>
-After you choose harmonics effect, a dialog would appear. You are able to choose between <strong>artificial</strong>, <strong>pinched</strong>, <strong>tapped</strong> and <strong>semi</strong> harmonics.
-</p>
-
-<p>
-If you wrote a note on fret 3,4,5,7,9,12,16,19... you will get the option to choose the <strong>Natural harmonic</strong> effect. It would sound like natural harmonic on the same fret and string.
-</p>
-
-<p>
-Otherwise, if you choose <strong>artificial</strong>, <strong>pinched</strong>, <strong>tapped</strong> or <strong>semi</strong> harmonics, you should choose a value from the combo box on the bottom of the dialog. If you chose artificial harmonic, you would be able to choose between these values:
-</p>
-<p align="center">
-<table border="1px">
-	<tr>
-		<td> <strong>A.H(12)</strong> </td><td> artificial harmonic one octave (12 frets) higher than the original note </td>
-	</tr>
-	<tr>
-		<td align="center"> <strong>A.H(9)</strong>  </td><td> artificial harmonic two octaves+major third (28 frets) higher than the original note </td>
-	</tr>
-	<tr>
-		<td align="center"> <strong>A.H(5)</strong> </td><td> artificial harmonic two octaves (24 frets) higher than the original note </td>
-	</tr>
-	<tr>
-		<td align="center"> <strong>A.H(7)</strong> </td><td> artificial harmonic octave+fifth (19 frets) higher than the original note </td>
-	</tr>
-	<tr>
-		<td align="center"> <strong>A.H(4)</strong> </td><td> artificial harmonic two octaves+major third (28 frets) higher than the original note </td>
-	</tr>
-	<tr>
-		<td align="center"> <strong>A.H(3)</strong> </td><td> artificial harmonic two octaves+fifth (31 frets) higher than the original note </td>
-	</tr>
-</table>
-<br/>
-</p>
-
-<p>
- Note that A.H(4) and A.H(9) sound the same... The number besides denotes the “fret offset” between the original note and the harmonic “hot spot”.
-</p>
-
-<p>
-The difference between <strong>artificial</strong>, <strong>pinched</strong> and <strong>tapped</strong> harmonics is only in the playing technique, but <strong>semi-harmonics</strong> even sound different on TuxGuitar - you can hear the original note along with the harmonic note.
-</p>
-
-</div>
-
-<h2><a name="grace_note" id="grace_note">Grace note</a></h2>
-<div class="level2">
-
-<p>
- Grace note is a music ornament. You can hear it very often in music, and it sounds like an attempt to play a note as <strong>short</strong> as possible. Grace notes in tabs are displayed smaller than the regular notes, and seem to have no duration. In sheet music grace notes are represented as a small note before a regular note, sometimes with a slash through the note stem.
-</p>
-
-<p>
-In TuxGuitar grace note can be applied on a position where a note already exists. Choosing to insert a grace note brings you the grace note editor dialog.
-</p>
-
-<p><img src="images/edit/effects_grace.png" title="Grace note editor dialog" alt="Grace note editor dialog"/></p>
-<p>
-On guitar, grace notes are most usually played on the same string as the ordinary note, so you will first want to enter the <strong>fret</strong> on which grace note is played. If you check a <span class="curid"><a href="#dead_note"> dead note</a></span>, muted percussive note will be played instead. Select the <strong>position</strong> of the grace note. “Before beat” places your grace note before the ordinary note, which is played in exact time it is displayed in tab/scores [...]
-</p>
-
-<p>
-Next you can choose <strong>note duration</strong>. “As short as possible” is welcome, so 1/64 note is default, but you can also pick 1/32 and 1/16 note if it suits your needs. <strong>Dynamics</strong> of the grace note is also an important property. By default dynamics of a “normal” note is selected, but in editor dialog you can make grace note louder or more quiet than the succeeding note.
-</p>
-
-<p>
-At last, you can choose type of the <strong>transition</strong>, which marks the playing style. The default transition is <em>None</em>, which marks no distinct transition. Other available transitions are <em>Bend</em> and <em>Slide</em> (which also effect the way note is heard), and also a <em>Hammer</em> to mark that grace note is played by hammer on-pull off technique.
-</p>
-
-<p>
-If you have an existing grace note effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed.
-</p>
-
-</div>
-
-<h2><a name="vibrato" id="vibrato">Vibrato</a></h2>
-<div class="level2">
-
-<p>
- Vibrato is a note playing technique which makes the frequency (pitch) of a note oscilate a little bit in either direction (lower or higher). It makes the tone more colourful and accentuated. On guitar vibrato is played by slightly moving the finger upside-down or in left-right direction, which playes the sound in slightly higher pitch according to your moves.
-</p>
-
-<p>
-In TuxGuitar vibrato effect has no special parameters - applying vibrato effect on a note will make a typical vibrato effect, and also mark the tone with the “vibrating waves” in the tab view.
-</p>
-
-</div>
-
-<h2><a name="bend" id="bend">Bend</a></h2>
-<div class="level2">
-
-<p>
- String bending effect modifies the pitch of the played tone, but much more than <span class="curid"><a href="#vibrato"> vibrato</a></span> effect. Most often the result of bending a note is gradual pitch shift to another note. By the nature of bending that note has higher frequency then the note on the same fret without bend, because you <strong>bend</strong> the string thus adding more tension to the string. 
-</p>
-
-<p>
-In TuxGuitar, applying a bend effect to the note opens the Bend Editor dialog, which allows you fine tuning of the bend, showing you exactly how much tension your finger should use. Of course, the result of your modification can be heard.
-</p>
-
-<p><img src="images/edit/effects_bend.png" title="Bend editor" alt="Bend editor" /> </p>
-<p>
-First, notice the listbox on the right of the dialog. Those are the presets which are most often used: <em>bend, bend-release, bend-release-bend, prebend</em> and <em>prebend-release</em>. <em>Bend</em> only makes gradual transition to the target note, while <em>bend-release</em> also returns it to the beginning note. <em>Prebend</em> is played when you first bend (add tension) to the string, and <strong>after that</strong> pick the string, so the first tone heard has higher pitch, and t [...]
-</p>
-
-<p>
-The Editor allows you fine bend tuning by drawing a graphic function of the bending amount (or pitch modulation/string tension). It works by placing dots in a diagram which are automatically connected with lines. The higher the dot is placed, the greater the bending amount will be. Notice that the diagram is separated horizontally with gray and red lines. Each full red line represents the pitch shift by 1 tone (2 frets), and each dashed red line represents the pitch shift by a semitone ( [...]
-</p>
-
-<p>
-So the bend represented on the picture above is a complex one: the first peak is almost a 2-tone bend-release (it is a slight <em>underbend</em>, because it bends for 3.5 frets), the second one is a slight bend shift to one higher half-tone (1 fret) and back, and the third bends one whole-tone (2 frets) and stays there for a little while.
-</p>
-
-<p>
-If you have an existing vibrato effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed.
-</p>
-
-<p>
-When any bend effect is applied to a note, in the note will be displayed with a curved arrow in the tab view.
-</p>
-
-</div>
-
-<h2><a name="tremolo_bar" id="tremolo_bar">Tremolo bar</a></h2>
-<div class="level2">
-
-<p>
- Tremolo bar is a term in TuxGuitar for all the effects you can make with a guitar tremolo arm. It allows note pitch shift in both directions and with a higher range of modulation. With tremolo bar effect TuxGuitar can modify the original note very precisely with the modulation diagram, allowing the pitch change up and down whole octave (8 tones, 12 frets) from the original tone.
-</p>
-
-<p>
-When you apply tremolo bar effect on a note, Tremolo bar Editor dialog appears, very similar to the editor for the <span class="curid"><a href="#bend"> Bend effect</a></span>.
-</p>
-
-<p><img src="images/edit/effects_tremolobar.png" title=" Tremolo bar editor" alt=" Tremolo bar editor" /></p>
-<p>
- There are some presets in the listbox placed on the right side of the dialog. <em>Dip</em> effect slowly lowers the pitch, and after returns back. The oposite effect is <em>inverted dip</em> which increases the pitch and returns back. <em>Dive</em> slowly lowers the pitch, but doesn’t return back. Opposite effect is <em>return</em>. <em>Release up</em> starts from the lower pitch and gradually returns to the original tone. <em>Release down</em> also ends at the original tone, but  [...]
-</p>
-
-<p>
-Tremolo bar diagram editor consists of red and gray horisontal lines. Each red line represents one whole tone pitch offset (2 frets), and gray one semitone offset (1 fret). It is important to notice the black horisontal line in the middle: that is frequency of your original tone (to which you applied the effect). There are 6 red lines in both directions from the black line, which means you can modify the original pitch up and down 8 tones (12 frets). Vertical blue lines separate the tone [...]
-</p>
-
-<p>
-So the tremolo bar represented on the picture above is a complex one: first tremolo bar increases the pitch by one tone (2 frets), returns back to the original tone, quickly increases to +2 tone offset (4 frets) and then dives and dives until the tone is one octave (12 frets) lower than the original one.
-</p>
-
-<p>
-If you have an existing tremolo arm effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed. 
-</p>
-
-<p>
-When tremolo arm effect is applied to a note, besides the note in the tab view will be displayed an “x” with an arrow pointing down.
-</p>
-
-</div>
-
-<h2><a name="slide" id="slide">Slide</a></h2>
-<div class="level2">
-
-<p>
- A slide is a guitar technique where the player sounds one note, and then moves (slides) their finger up or down the fretboard to another fret. If done properly, the notes between should also sound.
-</p>
-
-<p>
-In TuxGuitar slide connects the current note with the next note on the same string. Then in tab view you can see a line connecting two notes (upwards or downwards).
-</p>
-
- 
-</div>
-
-<h2><a name="hammer_on_pull_off" id="hammer_on_pull_off">Hammer on / Pull off</a></h2>
-<div class="level2">
-
-<p>
- Hammer on and pull off are playing techniques which assume playing another note on the same string but without picking a string again. Heavy usage of hammer on/pull off in a short period is often refered as legato style. Hammer on refers to the transition between a previous note and a note with a higher pitch. Pull off is exactly the opposite, transition between a previous note and a note with a lower pitch. 
-</p>
-
-<p>
-In TuxGuitar <strong>hammer on</strong> and <strong>pull off</strong> are treated and displayed as the same effect. When you apply the effect, a connecting arc will be displayed between the current note and the next note <strong>on the same string</strong>, which marks that notes should be played with hammer on/pull off technique.
-</p>
-
-</div>
-
-<h2><a name="trill" id="trill">Trill</a></h2>
-<div class="level2">
-
-<p>
- A rapid series of hammer-ons and pull-offs between a single pair of notes is called a trill. So you can write all the trills manually, but TuxGuitar has the trill editor, which sometimes reduces the writing time.
-</p>
-
-<p>
-Trill effect is applied on an existing note, which is considered the first note in a trill. Then the <strong>trill editor</strong> appears and allows you to choose the second note, and a duration between the hammer-ons and pull-offs. If there is existing trill effect and you select Clear on the trill editor, the effect will be removed.
-</p>
-
-<p>
-Trill effect is marked in a tab with “<strong>tr</strong>” mark and a wave along the note duration.
-</p>
-
-</div>
-
-<h2><a name="tremolo_picking" id="tremolo_picking">Tremolo picking</a></h2>
-<div class="level2">
-
-<p>
- Tremolo picking means that the same note is picked in a rapid manner.
-</p>
-
-<p>
-So it would be the same if you write dozens of notes by yourself or use a tremolo picking effect, but if you apply the effect the tab will look nicer and it may save some time. Applying the tremolo picking effect on a current note will bring the tremolo picking editor, which allows you to choose how frequently it will be picked. If you already have a tremolo effect and click on “Clean” in the editor, the effect will be removed.
-</p>
-
-<p>
-Tremolo picking effect is marked with three diagonal lines (<em>≡</em>) in scores or tab.
-</p>
-
-</div>
-
-<h2><a name="palm_mute" id="palm_mute">Palm mute</a></h2>
-<div class="level2">
-
-<p>
- Palm mute is an effect which is produced by placing the palm of a picking hand across the strings very close to the bridge. The strings retain their pitch, but the sound is more or less muted.
-</p>
-
-<p>
-In TuxGuitar you can apply a palm mute effect on any note. It is removed the same way.
-</p>
-
-<p>
-Palm mute effect is displayed with “<strong>P.M.</strong>” sign in scores or tab.
-</p>
-
-</div>
-
-<h2><a name="staccato" id="staccato">Staccato</a></h2>
-<div class="level2">
-
-<p>
- Staccato is a playin technique where the player plays in a distinctive, “hopping” manner, trying to make note duration shorter than it should be normally.
-</p>
-
-<p>
-In TuxGuitar staccato effect makes the note duration 50% of its original duration. When staccato effect is applied, a dot shows up above the note in the scores view. When applied again, it is cleared.
-</p>
-
-</div>
-
-<h2><a name="tapping" id="tapping">Tapping</a></h2>
-<div class="level2">
-
-<p>
-  Tapping is a guitar playing technique used more often on electric instruments. It is played using both hands on the fretboard, with a picking hand making hard hammer-ons and pull-offs.
-</p>
-
-<p>
-In TuxGuitar tapping has no effect on note. Instead, it just marks the tone which should be tapped with a picking hand. Tapped note is marked with a letter “<strong>T</strong>” above tapped note. Tapped notes can be combined with a slide, bend or hammer on/pull of if you need.
-</p>
-
-</div>
-
-<h2><a name="slapping_and_popping" id="slapping_and_popping">Slapping and popping</a></h2>
-<div class="level2">
-
-<p>
- Slapping and popping are techniques most commonly used on bass guitar. Slapping assumes hitting a string with the thumb of the strumming hand near the base of the guitar’s neck. Popping is often combined with slapping, and assumes snapping the strings (usually) with the index or middle finger of the same hand.
-</p>
-
-<p>
-In TuxGuitar both slapping and popping don’t really affect the sound, but only mark the style of playing. Above the slapping notes letter “<strong>S</strong>” is placed, and above popping letter “<strong>P</strong>“.
-</p>
-
-</div>
-
-<h2><a name="fade_in" id="fade_in">Fade in</a></h2>
-<div class="level2">
-
-<p>
- Fade in is an effect which gradually increases the volume of a note, from zero to the current volume (depends on note dynamics). The effect is applied to each note independantly, and cleared in the same way. Note with a fade in is marked with a “<strong><</strong>” sign above the tab. 
-</p>
-
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Note effects</h1>
+						
+						
+						<div class="level1">
+						
+						<p>
+						 As you already know, playing guitar (and any other instrument) isn’t just playing the notes in the right duration and dynamics. There are several “tricks” that are unique for any instrument. TuxGuitar supports effects specific for guitar and bass guitar.
+						</p>
+						
+						<p>
+						Almost all note effects have an icon on the toolbar, but also can be accessed in <strong>Note→Effects</strong> menu. The effect is applied on the current cursor position.
+						</p>
+						<p> <img src="images/start/tb_effects.png" alt=" Effects toolbar" /></p>
+						</div>
+						
+						<h2><a name="dead_note" id="dead_note">Dead note</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Dead note (sometimes referred as rake) is a playing effect which produces more of a percussive effect than a regular note with it’s pitch. Dead note has short and “clicking” sound. It is used very often by guitar players. 
+						</p>
+						
+						<p>
+						Because of the MIDI standard, all MIDI tab editing applications (Guitar Pro, Tabledit, TuxGuitar...) have a little bit different dead note implementation - it is not exactly dead. It is short, it is percussive, but you can adjust the pitch of the dead note.
+						</p>
+						
+						<p>
+						So in TuxGuitar, if you put a dead note in the scores it will be heard like a muted zero-fret string. If you put a regular fret value and mark that note as dead, it will become a dead note, but will retain the previous pitch.
+						</p>
+						
+						<p>
+						Dead note is marked with “<strong>X</strong>” sign in the tab.
+						</p>
+						
+						</div>
+						
+						<h2><a name="ghost_note" id="ghost_note">Ghost note</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Ghost note is effect that changes note’s dynamics (loudness) to <strong>more quiet</strong>. The difference between the Ghost note and lesser dynamics is seen only visually, while it sounds the same.
+						</p>
+						
+						<p>
+						Ghost note is marked by a note between parentheses <strong>( )</strong>.
+						</p>
+						
+						</div>
+						
+						<h2><a name="accentuated_and_heavy_accentuated_note" id="accentuated_and_heavy_accentuated_note">Accentuated and heavy accentuated note</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Like Ghost note, these effects change note’s volume. Accentuated note gives it a little louder dynamics, and heavy accentuated note makes the note even louder.
+						</p>
+						
+						<p>
+						Accentuated note is marked with a “<strong>></strong>” sign, and heavy accentuated with “<strong>^</strong>” sign.
+						</p>
+						
+						</div>
+						
+						<h2><a name="harmonics" id="harmonics">Harmonics</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Guitar harmonics are somewhat special note effect, because the result is a note with different pitch.
+						</p>
+						
+						<p>
+						After you choose harmonics effect, a dialog would appear. You are able to choose between <strong>artificial</strong>, <strong>pinched</strong>, <strong>tapped</strong> and <strong>semi</strong> harmonics.
+						</p>
+						
+						<p>
+						If you wrote a note on fret 3,4,5,7,9,12,16,19... you will get the option to choose the <strong>Natural harmonic</strong> effect. It would sound like natural harmonic on the same fret and string.
+						</p>
+						
+						<p>
+						Otherwise, if you choose <strong>artificial</strong>, <strong>pinched</strong>, <strong>tapped</strong> or <strong>semi</strong> harmonics, you should choose a value from the combo box on the bottom of the dialog. If you chose artificial harmonic, you would be able to choose between these values:
+						</p>
+						<p align="center">
+						<table border="1px">
+							<tr>
+								<td> <strong>A.H(12)</strong> </td><td> artificial harmonic one octave (12 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(9)</strong>  </td><td> artificial harmonic two octaves+major third (28 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(5)</strong> </td><td> artificial harmonic two octaves (24 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(7)</strong> </td><td> artificial harmonic octave+fifth (19 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(4)</strong> </td><td> artificial harmonic two octaves+major third (28 frets) higher than the original note </td>
+							</tr>
+							<tr>
+								<td align="center"> <strong>A.H(3)</strong> </td><td> artificial harmonic two octaves+fifth (31 frets) higher than the original note </td>
+							</tr>
+						</table>
+						<br/>
+						</p>
+						
+						<p>
+						 Note that A.H(4) and A.H(9) sound the same... The number besides denotes the “fret offset” between the original note and the harmonic “hot spot”.
+						</p>
+						
+						<p>
+						The difference between <strong>artificial</strong>, <strong>pinched</strong> and <strong>tapped</strong> harmonics is only in the playing technique, but <strong>semi-harmonics</strong> even sound different on TuxGuitar - you can hear the original note along with the harmonic note.
+						</p>
+						
+						</div>
+						
+						<h2><a name="grace_note" id="grace_note">Grace note</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Grace note is a music ornament. You can hear it very often in music, and it sounds like an attempt to play a note as <strong>short</strong> as possible. Grace notes in tabs are displayed smaller than the regular notes, and seem to have no duration. In sheet music grace notes are represented as a small note before a regular note, sometimes with a slash through the note stem.
+						</p>
+						
+						<p>
+						In TuxGuitar grace note can be applied on a position where a note already exists. Choosing to insert a grace note brings you the grace note editor dialog.
+						</p>
+						
+						<p><img src="images/edit/effects_grace.png" title="Grace note editor dialog" alt="Grace note editor dialog"/></p>
+						<p>
+						On guitar, grace notes are most usually played on the same string as the ordinary note, so you will first want to enter the <strong>fret</strong> on which grace note is played. If you check a <span class="curid"><a href="#dead_note"> dead note</a></span>, muted percussive note will be played instead. Select the <strong>position</strong> of the grace note. “Before beat” places your grace note before the ordinary note, which is played in exact time it is displayed in tab/ [...]
+						</p>
+						
+						<p>
+						Next you can choose <strong>note duration</strong>. “As short as possible” is welcome, so 1/64 note is default, but you can also pick 1/32 and 1/16 note if it suits your needs. <strong>Dynamics</strong> of the grace note is also an important property. By default dynamics of a “normal” note is selected, but in editor dialog you can make grace note louder or more quiet than the succeeding note.
+						</p>
+						
+						<p>
+						At last, you can choose type of the <strong>transition</strong>, which marks the playing style. The default transition is <em>None</em>, which marks no distinct transition. Other available transitions are <em>Bend</em> and <em>Slide</em> (which also effect the way note is heard), and also a <em>Hammer</em> to mark that grace note is played by hammer on-pull off technique.
+						</p>
+						
+						<p>
+						If you have an existing grace note effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed.
+						</p>
+						
+						</div>
+						
+						<h2><a name="vibrato" id="vibrato">Vibrato</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Vibrato is a note playing technique which makes the frequency (pitch) of a note oscilate a little bit in either direction (lower or higher). It makes the tone more colourful and accentuated. On guitar vibrato is played by slightly moving the finger upside-down or in left-right direction, which playes the sound in slightly higher pitch according to your moves.
+						</p>
+						
+						<p>
+						In TuxGuitar vibrato effect has no special parameters - applying vibrato effect on a note will make a typical vibrato effect, and also mark the tone with the “vibrating waves” in the tab view.
+						</p>
+						
+						</div>
+						
+						<h2><a name="bend" id="bend">Bend</a></h2>
+						<div class="level2">
+						
+						<p>
+						 String bending effect modifies the pitch of the played tone, but much more than <span class="curid"><a href="#vibrato"> vibrato</a></span> effect. Most often the result of bending a note is gradual pitch shift to another note. By the nature of bending that note has higher frequency then the note on the same fret without bend, because you <strong>bend</strong> the string thus adding more tension to the string. 
+						</p>
+						
+						<p>
+						In TuxGuitar, applying a bend effect to the note opens the Bend Editor dialog, which allows you fine tuning of the bend, showing you exactly how much tension your finger should use. Of course, the result of your modification can be heard.
+						</p>
+						
+						<p><img src="images/edit/effects_bend.png" title="Bend editor" alt="Bend editor" /> </p>
+						<p>
+						First, notice the listbox on the right of the dialog. Those are the presets which are most often used: <em>bend, bend-release, bend-release-bend, prebend</em> and <em>prebend-release</em>. <em>Bend</em> only makes gradual transition to the target note, while <em>bend-release</em> also returns it to the beginning note. <em>Prebend</em> is played when you first bend (add tension) to the string, and <strong>after that</strong> pick the string, so the first tone heard has higher pitch, [...]
+						</p>
+						
+						<p>
+						The Editor allows you fine bend tuning by drawing a graphic function of the bending amount (or pitch modulation/string tension). It works by placing dots in a diagram which are automatically connected with lines. The higher the dot is placed, the greater the bending amount will be. Notice that the diagram is separated horizontally with gray and red lines. Each full red line represents the pitch shift by 1 tone (2 frets), and each dashed red line represents the pitch shift by a semi [...]
+						</p>
+						
+						<p>
+						So the bend represented on the picture above is a complex one: the first peak is almost a 2-tone bend-release (it is a slight <em>underbend</em>, because it bends for 3.5 frets), the second one is a slight bend shift to one higher half-tone (1 fret) and back, and the third bends one whole-tone (2 frets) and stays there for a little while.
+						</p>
+						
+						<p>
+						If you have an existing vibrato effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed.
+						</p>
+						
+						<p>
+						When any bend effect is applied to a note, in the note will be displayed with a curved arrow in the tab view.
+						</p>
+						
+						</div>
+						
+						<h2><a name="tremolo_bar" id="tremolo_bar">Tremolo bar</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Tremolo bar is a term in TuxGuitar for all the effects you can make with a guitar tremolo arm. It allows note pitch shift in both directions and with a higher range of modulation. With tremolo bar effect TuxGuitar can modify the original note very precisely with the modulation diagram, allowing the pitch change up and down whole octave (8 tones, 12 frets) from the original tone.
+						</p>
+						
+						<p>
+						When you apply tremolo bar effect on a note, Tremolo bar Editor dialog appears, very similar to the editor for the <span class="curid"><a href="#bend"> Bend effect</a></span>.
+						</p>
+						
+						<p><img src="images/edit/effects_tremolobar.png" title=" Tremolo bar editor" alt=" Tremolo bar editor" /></p>
+						<p>
+						 There are some presets in the listbox placed on the right side of the dialog. <em>Dip</em> effect slowly lowers the pitch, and after returns back. The oposite effect is <em>inverted dip</em> which increases the pitch and returns back. <em>Dive</em> slowly lowers the pitch, but doesn’t return back. Opposite effect is <em>return</em>. <em>Release up</em> starts from the lower pitch and gradually returns to the original tone. <em>Release down</em> also ends at the original tone [...]
+						</p>
+						
+						<p>
+						Tremolo bar diagram editor consists of red and gray horisontal lines. Each red line represents one whole tone pitch offset (2 frets), and gray one semitone offset (1 fret). It is important to notice the black horisontal line in the middle: that is frequency of your original tone (to which you applied the effect). There are 6 red lines in both directions from the black line, which means you can modify the original pitch up and down 8 tones (12 frets). Vertical blue lines separate th [...]
+						</p>
+						
+						<p>
+						So the tremolo bar represented on the picture above is a complex one: first tremolo bar increases the pitch by one tone (2 frets), returns back to the original tone, quickly increases to +2 tone offset (4 frets) and then dives and dives until the tone is one octave (12 frets) lower than the original one.
+						</p>
+						
+						<p>
+						If you have an existing tremolo arm effect applied to the note and click on the “Clear” button in the dialog, the effect will be removed. 
+						</p>
+						
+						<p>
+						When tremolo arm effect is applied to a note, besides the note in the tab view will be displayed an “x” with an arrow pointing down.
+						</p>
+						
+						</div>
+						
+						<h2><a name="slide" id="slide">Slide</a></h2>
+						<div class="level2">
+						
+						<p>
+						 A slide is a guitar technique where the player sounds one note, and then moves (slides) their finger up or down the fretboard to another fret. If done properly, the notes between should also sound.
+						</p>
+						
+						<p>
+						In TuxGuitar slide connects the current note with the next note on the same string. Then in tab view you can see a line connecting two notes (upwards or downwards).
+						</p>
+						
+						 
+						</div>
+						
+						<h2><a name="hammer_on_pull_off" id="hammer_on_pull_off">Hammer on / Pull off</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Hammer on and pull off are playing techniques which assume playing another note on the same string but without picking a string again. Heavy usage of hammer on/pull off in a short period is often refered as legato style. Hammer on refers to the transition between a previous note and a note with a higher pitch. Pull off is exactly the opposite, transition between a previous note and a note with a lower pitch. 
+						</p>
+						
+						<p>
+						In TuxGuitar <strong>hammer on</strong> and <strong>pull off</strong> are treated and displayed as the same effect. When you apply the effect, a connecting arc will be displayed between the current note and the next note <strong>on the same string</strong>, which marks that notes should be played with hammer on/pull off technique.
+						</p>
+						
+						</div>
+						
+						<h2><a name="trill" id="trill">Trill</a></h2>
+						<div class="level2">
+						
+						<p>
+						 A rapid series of hammer-ons and pull-offs between a single pair of notes is called a trill. So you can write all the trills manually, but TuxGuitar has the trill editor, which sometimes reduces the writing time.
+						</p>
+						
+						<p>
+						Trill effect is applied on an existing note, which is considered the first note in a trill. Then the <strong>trill editor</strong> appears and allows you to choose the second note, and a duration between the hammer-ons and pull-offs. If there is existing trill effect and you select Clear on the trill editor, the effect will be removed.
+						</p>
+						
+						<p>
+						Trill effect is marked in a tab with “<strong>tr</strong>” mark and a wave along the note duration.
+						</p>
+						
+						</div>
+						
+						<h2><a name="tremolo_picking" id="tremolo_picking">Tremolo picking</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Tremolo picking means that the same note is picked in a rapid manner.
+						</p>
+						
+						<p>
+						So it would be the same if you write dozens of notes by yourself or use a tremolo picking effect, but if you apply the effect the tab will look nicer and it may save some time. Applying the tremolo picking effect on a current note will bring the tremolo picking editor, which allows you to choose how frequently it will be picked. If you already have a tremolo effect and click on “Clean” in the editor, the effect will be removed.
+						</p>
+						
+						<p>
+						Tremolo picking effect is marked with three diagonal lines (<em>≡</em>) in scores or tab.
+						</p>
+						
+						</div>
+						
+						<h2><a name="palm_mute" id="palm_mute">Palm mute</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Palm mute is an effect which is produced by placing the palm of a picking hand across the strings very close to the bridge. The strings retain their pitch, but the sound is more or less muted.
+						</p>
+						
+						<p>
+						In TuxGuitar you can apply a palm mute effect on any note. It is removed the same way.
+						</p>
+						
+						<p>
+						Palm mute effect is displayed with “<strong>P.M.</strong>” sign in scores or tab.
+						</p>
+						
+						</div>
+						
+						<h2><a name="staccato" id="staccato">Staccato</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Staccato is a playin technique where the player plays in a distinctive, “hopping” manner, trying to make note duration shorter than it should be normally.
+						</p>
+						
+						<p>
+						In TuxGuitar staccato effect makes the note duration 50% of its original duration. When staccato effect is applied, a dot shows up above the note in the scores view. When applied again, it is cleared.
+						</p>
+						
+						</div>
+						
+						<h2><a name="tapping" id="tapping">Tapping</a></h2>
+						<div class="level2">
+						
+						<p>
+						  Tapping is a guitar playing technique used more often on electric instruments. It is played using both hands on the fretboard, with a picking hand making hard hammer-ons and pull-offs.
+						</p>
+						
+						<p>
+						In TuxGuitar tapping has no effect on note. Instead, it just marks the tone which should be tapped with a picking hand. Tapped note is marked with a letter “<strong>T</strong>” above tapped note. Tapped notes can be combined with a slide, bend or hammer on/pull of if you need.
+						</p>
+						
+						</div>
+						
+						<h2><a name="slapping_and_popping" id="slapping_and_popping">Slapping and popping</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Slapping and popping are techniques most commonly used on bass guitar. Slapping assumes hitting a string with the thumb of the strumming hand near the base of the guitar’s neck. Popping is often combined with slapping, and assumes snapping the strings (usually) with the index or middle finger of the same hand.
+						</p>
+						
+						<p>
+						In TuxGuitar both slapping and popping don’t really affect the sound, but only mark the style of playing. Above the slapping notes letter “<strong>S</strong>” is placed, and above popping letter “<strong>P</strong>“.
+						</p>
+						
+						</div>
+						
+						<h2><a name="fade_in" id="fade_in">Fade in</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Fade in is an effect which gradually increases the volume of a note, from zero to the current volume (depends on note dynamics). The effect is applied to each note independantly, and cleared in the same way. Note with a fade in is marked with a “<strong><</strong>” sign above the tab. 
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/edit_matrix.html b/TuxGuitar/share/help/edit_matrix.html
index 42decb2..0773470 100644
--- a/TuxGuitar/share/help/edit_matrix.html
+++ b/TuxGuitar/share/help/edit_matrix.html
@@ -2,45 +2,109 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>Matrix Editor</h1>
-<div class="level1">
-
-<p>
- Matrix Editor is a useful tool for editing the percussion tracks. It can alse edit the ordinary tracks, but it is much less useful. It is accessed by <strong>Layout→Show_Matrix</strong> menu.
-</p>
-
-<p>
-Basically, it divides the current measure into segments and displays the possible percussion sounds. Not only you can view the measure and the sounds in the matrix, but by clicking on one block of the matrix you add/remove the sound from the tab.
-</p>
-
-<p>
-<img src="images/edit/matrix_editor.png"/>
-</p>
-
-<p>
-It is very important to remember that Matrix Editor does not “lock” the main TuxGuitar window, which means you can use <strong>Note duration</strong> and <strong>Note dynamics</strong> icons from the toolbar, and change the current measure/instrument as well.
-</p>
-
-<p>
-You can also change the current measure with left/right arrows in the top-left corner of the dialog, and the note duration by the note duration up/down arrows (between the arrows is current note duration).
-</p>
-
-<p>
-<strong>Number of grids</strong> value in the dialog helps you to determine the position where you should click - it divides one basic duration (denominator of Time Signature) into <em>number</em> segments.
-</p>
-
-<p>
-Border on the top and the bottom of the Matrix Editor view component (black on the picture) marks your current cursor position - which does not affect your clicking, only writing the numbers in the tab.
-</p>
-
-<p>
-The hammer icon on the top-right corner of the dialog opens the settings for the Matrix Mixer. There you can adjust colours and font of the Matrix Editor dialog. 
-</p>
-
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Matrix Editor</h1>
+						<div class="level1">
+						
+						<p>
+						 Matrix Editor is a useful tool for editing the percussion tracks. It can alse edit the ordinary tracks, but it is much less useful. It is accessed by <strong>Layout→Show_Matrix</strong> menu.
+						</p>
+						
+						<p>
+						Basically, it divides the current measure into segments and displays the possible percussion sounds. Not only you can view the measure and the sounds in the matrix, but by clicking on one block of the matrix you add/remove the sound from the tab.
+						</p>
+						
+						<p>
+						<img src="images/edit/matrix_editor.png"/>
+						</p>
+						
+						<p>
+						It is very important to remember that Matrix Editor does not “lock” the main TuxGuitar window, which means you can use <strong>Note duration</strong> and <strong>Note dynamics</strong> icons from the toolbar, and change the current measure/instrument as well.
+						</p>
+						
+						<p>
+						You can also change the current measure with left/right arrows in the top-left corner of the dialog, and the note duration by the note duration up/down arrows (between the arrows is current note duration).
+						</p>
+						
+						<p>
+						<strong>Number of grids</strong> value in the dialog helps you to determine the position where you should click - it divides one basic duration (denominator of Time Signature) into <em>number</em> segments.
+						</p>
+						
+						<p>
+						Border on the top and the bottom of the Matrix Editor view component (black on the picture) marks your current cursor position - which does not affect your clicking, only writing the numbers in the tab.
+						</p>
+						
+						<p>
+						The hammer icon on the top-right corner of the dialog opens the settings for the Matrix Mixer. There you can adjust colours and font of the Matrix Editor dialog. 
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/editing_song.html b/TuxGuitar/share/help/editing_song.html
index d6cb1ff..8d58133 100644
--- a/TuxGuitar/share/help/editing_song.html
+++ b/TuxGuitar/share/help/editing_song.html
@@ -2,199 +2,263 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>Editing a whole song</h1>
-
-<div class="level1">
-
-<p>
- Song is consisted out of tracks, so when you are editing a song most of the time you edit the tracks, one by one, which is explained in the <a class="PageLink" href="editing_track.html">Editing a track</a> section. But there are some options that affect the song as a whole.
-</p>
-
-</div>
-
-<h2><a name="managing_the_tracks" id="managing_the_tracks">Managing the tracks</a></h2>
-<div class="level2">
-
-<p>
- <img src="images/start/tb_add_track.png"/>
-</p>
-
-<p>
-Each song consists out of one or more tracks. In any moment you can add or remove track, create new one by copying contents of the selected one (clone track). If you want to add a percussion track, you have to check the <strong>Percussion Track</strong> box in the Track Properties.
-</p>
-
-<p>
-All the tracks are displayed in the instrument list, located on the bottom of the application window. You can rearrange the order of the instruments on that list by choosing <strong>Track/Move Up-Down</strong> from the main menu. If you double-click on the instrument name on the list, <strong>Track properties</strong> dialog will appear, where you can modify instrument, track name, colour and tunning.
-</p>
-
-</div>
-<!--
-<h2><a name="choosing_the_channels" id="choosing_the_channels">Choosing the channels:</a></h2>
-<div class="level2">
-
-<p>
-<img src="images/edit/sed_instrument_list.jpg" title="" alt="" width="620" height="144" />
-</p>
-
-<p>
-There are some numbers in combo boxes on the instrument list - those are channels for the instrument.
-</p>
-
-<p>
-To understand the way of distributing channels properly, you have to know something about MIDI specification.
-</p>
-
-<p>
-MIDI uses channels to play music - each <strong>channel has currently assigned instrument (voice)</strong>. There are 16 different channels (marked 0..15) - channel 9 is reserved for drums and percussion.
-</p>
-
-<p>
-For example, to be able to play a <a href="edit_effects.html#dead_note">dead note</a> and a tone in the same time, TuxGuitar has to occupy two channels for a track, because dead note is one instrument (voice) and guitar tone is another instrument. So every track has its <strong>Channel</strong> (marked green on the picture above), but also needs the <strong>Effect channel</strong> (marked orange on the picture above). Because there are only 16 channels it leads you to conclusion that you [...]
-</p>
-
-<p>
-It means that as long as you don’t have more than 7 instruments and a percussion, you don’t have to worry about distributing MIDI channels - TuxGuitar distributes the channels in order. But if you have more tracks you have to be careful. By overlapping MIDI channels you can achieve MIDI reproduction without any problems, but you have to understand the problem.
-</p>
-
-</div>
-
-<h5><a name="effect_channel" id="effect_channel">Effect channel</a></h5>
-<div class="level5">
-
-<p>
- <strong>Effect channel</strong> is used in certain occasions. One ocasion is when <strong>two different voices</strong> are played in the same time in the same track. In TuxGuitar that can happen if you play dead note or harmonic in the same time with an ordinary instrument tone. 
-</p>
-
-<p>
-The other occasion effect channel is used is when you apply some <strong>pitch effect</strong> (like bend, slide, vibrato or tremolo bar) on <em class="u"><strong>some of the notes</strong></em> played in the same time in same track/channel. The reason for this is because by MIDI specification effect can be applied only on channel, not on note. So TuxGuitar automatically moves note to Effect channel and apply pitch effect on him. That is also the reason why you cannot apply slide and ben [...]
-</p>
-
-</div>
-
-<h4><a name="how_to_overlap_channels" id="how_to_overlap_channels">How to overlap channels?</a></h4>
-<div class="level4">
-
-<p>
- The safest way is to overlap channels of two tracks that are never played in the same time. The only problem is that <strong>mixer settings</strong> (volume, pan and solo/mute) would have the same value for both the instruments (tracks).
-</p>
-
-<p>
-You can also try to assign the same channel for channel (CH) and effects channel (EC) if you don’t use effects like dead note, harmonics in the same time with an ordinary instrument note, or you don’t need to apply “pitch” effect on only some notes played in the same time with notes without pitch effect. If you do use effects but set the same CH and EC, dead note and harmonics probably wouldn’t be heard, and pitch effects would apply on all the notes in the  [...]
-</p>
-
-</div>
--->
-<h2><a name="mixer_dialog" id="mixer_dialog">Mixer dialog:</a></h2>
-<div class="level2">
-
-<p>
-<img src="images/edit/sed_mixer_dialog.png" title="" alt="" />
-</p>
-
-<p>
-Mixer dialog can be accessed by choosing <em>Layout/Show mixer</em> from the main menu, or by clicking on the icon in the toolbar (in the middle on the picture below).
-</p>
-
-<p>
-<img src="images/start/tb_view.png" width="91" height="27" />
-</p>
-
-<p>
-The most insteresting feature of the Mixer dialog is adjusting <strong>volume</strong> for each track (to be more precise: for each MIDI channel). 
-</p>
-
-<p>
-You can also set <strong>pan</strong> for each track - balance between left and right speaker.
-</p>
-
-<p>
-In Mixer dialog you can choose to <strong>Mute</strong> (turn off) a specific instrument, and also to play only single instrument by choosing <strong>Solo</strong>.
-</p>
-
-<p>
-<strong>Metronome</strong> is also placed in Mixer dialog. By clicking on the button you enable and disable it - it is played with each beat determined by denominator in song’s <a class="PageLink" href="editing_track.html#before_you_start_with_notes">time signature</a> (e.g. metronome will go in every 1/8 for 7/8 key signature).
-</p>
-
-<p>
-<em>Changing volume or instrument in the middle of a song is still unsupported by TuxGuitar, but it most probably will in some later versions.</em>
-</p>
-
-<h4 name="choosing_the_channels" id="choosing_the_channels">Choosing the channels:</h4>
-
-<div class="level2">
-
-<p>
-There are some numbers in combo boxes on the mixer dialog - those are channels for the track.
-</p>
-
-<p>
-To understand the way of distributing channels properly, you have to know something about MIDI specification.
-</p>
-
-<p>
-MIDI uses channels to play music - each <strong>channel has currently assigned instrument (voice)</strong>. There are 16 different channels (marked 0..15) - channel 9 is reserved for drums and percussion.
-</p>
-
-<p>
-For example, to be able to play a <a class="PageLink" href="edit_effects.html#dead_note">dead note</a> and a tone in the same time, TuxGuitar has to occupy two channels for a track, because dead note is one instrument (voice) and guitar tone is another instrument. So every track has its <strong>Channel</strong> (marked green on the picture above), but also needs the <strong>Effect channel</strong> (marked orange on the picture above). Because there are only 16 channels it leads you to co [...]
-</p>
-
-<p>
-It means that as long as you don’t have more than 7 instruments and a percussion, you don’t have to worry about distributing MIDI channels - TuxGuitar distributes the channels in order. But if you have more tracks you have to be careful. By overlapping MIDI channels you can achieve MIDI reproduction without any problems, but you have to understand the problem.
-</p>
-
-</div>
-
-<h5 name="effect_channel" id="effect_channel">Effect channel</h5>
-<div class="level4">
-
-<p>
- <strong>Effect channel</strong> is used in certain occasions. One ocasion is when <strong>two different voices</strong> are played in the same time in the same track. In TuxGuitar that can happen if you play dead note or harmonic in the same time with an ordinary instrument tone. 
-</p>
-
-<p>
-The other occasion effect channel is used is when you apply some <strong>pitch effect</strong> (like bend, slide, vibrato or tremolo bar) on <em class="u"><strong>some of the notes</strong></em> played in the same time in same track/channel. The reason for this is because by MIDI specification effect can be applied only on channel, not on note. So TuxGuitar automatically moves note to Effect channel and apply pitch effect on him. That is also the reason why you cannot apply slide and ben [...]
-</p>
-
-</div>
-
-<h5 name="how_to_overlap_channels" id="how_to_overlap_channels">How to overlap channels?</h5>
-<div class="level4">
-
-<p>
- The safest way is to overlap channels of two tracks that are never played in the same time. The only problem is that <strong>mixer settings</strong> (volume, pan and solo/mute) would have the same value for both the instruments (tracks).
-</p>
-
-<p>
-You can also try to assign the same channel for channel (CH) and effects channel (EC) if you don’t use effects like dead note, harmonics in the same time with an ordinary instrument note, or you don’t need to apply “pitch” effect on only some notes played in the same time with notes without pitch effect. If you do use effects but set the same CH and EC, dead note and harmonics probably wouldn’t be heard, and pitch effects would apply on all the notes in the  [...]
-</p>
-
-</div>
-
-</div>
-
-<h2><a name="composition_properties" id="composition_properties">Composition properties:</a></h2>
-<div class="level2">
-
-<p>
- You don’t want your transcription to be distributed in cyberspace without any credits. :)
-</p>
-
-<p>
-By selecting <em>Composition/Properties</em> from the main menu or clicking on appropriate icon you invoke dialog that containst information about the current song.
-</p>
-
-<p>
-<img src="images/start/tb_properties.png" class="media" title="" alt="" width="28" height="26" />
-</p>
-
-<p>
-Every song should have name, author and transcriber set, both for archiving and printing purpose. Read <a class="PageLink" href="start_toolbars.html#song_properties">more details</a>.
-</p>
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Editing a whole song</h1>
+						
+						<div class="level1">
+						
+						<p>
+						 Song is consisted out of tracks, so when you are editing a song most of the time you edit the tracks, one by one, which is explained in the <a class="PageLink" href="editing_track.html">Editing a track</a> section. But there are some options that affect the song as a whole.
+						</p>
+						
+						</div>
+						
+						<h2><a name="managing_the_tracks" id="managing_the_tracks">Managing the tracks</a></h2>
+						<div class="level2">
+						
+						<p>
+						 <img src="images/start/tb_add_track.png"/>
+						</p>
+						
+						<p>
+						Each song consists out of one or more tracks. In any moment you can add or remove track, create new one by copying contents of the selected one (clone track). If you want to add a percussion track, you have to check the <strong>Percussion Track</strong> box in the Track Properties.
+						</p>
+						
+						<p>
+						All the tracks are displayed in the instrument list, located on the bottom of the application window. You can rearrange the order of the instruments on that list by choosing <strong>Track/Move Up-Down</strong> from the main menu. If you double-click on the instrument name on the list, <strong>Track properties</strong> dialog will appear, where you can modify instrument, track name, colour and tunning.
+						</p>
+						
+						</div>
+						<!--
+						<h2><a name="choosing_the_channels" id="choosing_the_channels">Choosing the channels:</a></h2>
+						<div class="level2">
+						
+						<p>
+						<img src="images/edit/sed_instrument_list.jpg" title="" alt="" width="620" height="144" />
+						</p>
+						
+						<p>
+						There are some numbers in combo boxes on the instrument list - those are channels for the instrument.
+						</p>
+						
+						<p>
+						To understand the way of distributing channels properly, you have to know something about MIDI specification.
+						</p>
+						
+						<p>
+						MIDI uses channels to play music - each <strong>channel has currently assigned instrument (voice)</strong>. There are 16 different channels (marked 0..15) - channel 9 is reserved for drums and percussion.
+						</p>
+						
+						<p>
+						For example, to be able to play a <a href="edit_effects.html#dead_note">dead note</a> and a tone in the same time, TuxGuitar has to occupy two channels for a track, because dead note is one instrument (voice) and guitar tone is another instrument. So every track has its <strong>Channel</strong> (marked green on the picture above), but also needs the <strong>Effect channel</strong> (marked orange on the picture above). Because there are only 16 channels it leads you to conclusion th [...]
+						</p>
+						
+						<p>
+						It means that as long as you don’t have more than 7 instruments and a percussion, you don’t have to worry about distributing MIDI channels - TuxGuitar distributes the channels in order. But if you have more tracks you have to be careful. By overlapping MIDI channels you can achieve MIDI reproduction without any problems, but you have to understand the problem.
+						</p>
+						
+						</div>
+						
+						<h5><a name="effect_channel" id="effect_channel">Effect channel</a></h5>
+						<div class="level5">
+						
+						<p>
+						 <strong>Effect channel</strong> is used in certain occasions. One ocasion is when <strong>two different voices</strong> are played in the same time in the same track. In TuxGuitar that can happen if you play dead note or harmonic in the same time with an ordinary instrument tone. 
+						</p>
+						
+						<p>
+						The other occasion effect channel is used is when you apply some <strong>pitch effect</strong> (like bend, slide, vibrato or tremolo bar) on <em class="u"><strong>some of the notes</strong></em> played in the same time in same track/channel. The reason for this is because by MIDI specification effect can be applied only on channel, not on note. So TuxGuitar automatically moves note to Effect channel and apply pitch effect on him. That is also the reason why you cannot apply slide a [...]
+						</p>
+						
+						</div>
+						
+						<h4><a name="how_to_overlap_channels" id="how_to_overlap_channels">How to overlap channels?</a></h4>
+						<div class="level4">
+						
+						<p>
+						 The safest way is to overlap channels of two tracks that are never played in the same time. The only problem is that <strong>mixer settings</strong> (volume, pan and solo/mute) would have the same value for both the instruments (tracks).
+						</p>
+						
+						<p>
+						You can also try to assign the same channel for channel (CH) and effects channel (EC) if you don’t use effects like dead note, harmonics in the same time with an ordinary instrument note, or you don’t need to apply “pitch” effect on only some notes played in the same time with notes without pitch effect. If you do use effects but set the same CH and EC, dead note and harmonics probably wouldn’t be heard, and pitch effects would apply on all the notes i [...]
+						</p>
+						
+						</div>
+						-->
+						<h2><a name="mixer_dialog" id="mixer_dialog">Mixer dialog:</a></h2>
+						<div class="level2">
+						
+						<p>
+						<img src="images/edit/sed_mixer_dialog.png" title="" alt="" />
+						</p>
+						
+						<p>
+						Mixer dialog can be accessed by choosing <em>Layout/Show mixer</em> from the main menu, or by clicking on the icon in the toolbar (in the middle on the picture below).
+						</p>
+						
+						<p>
+						<img src="images/start/tb_view.png" width="91" height="27" />
+						</p>
+						
+						<p>
+						The most insteresting feature of the Mixer dialog is adjusting <strong>volume</strong> for each track (to be more precise: for each MIDI channel). 
+						</p>
+						
+						<p>
+						You can also set <strong>pan</strong> for each track - balance between left and right speaker.
+						</p>
+						
+						<p>
+						In Mixer dialog you can choose to <strong>Mute</strong> (turn off) a specific instrument, and also to play only single instrument by choosing <strong>Solo</strong>.
+						</p>
+						
+						<p>
+						<strong>Metronome</strong> is also placed in Mixer dialog. By clicking on the button you enable and disable it - it is played with each beat determined by denominator in song’s <a class="PageLink" href="editing_track.html#before_you_start_with_notes">time signature</a> (e.g. metronome will go in every 1/8 for 7/8 key signature).
+						</p>
+						
+						<p>
+						<em>Changing volume or instrument in the middle of a song is still unsupported by TuxGuitar, but it most probably will in some later versions.</em>
+						</p>
+						
+						<h4 name="choosing_the_channels" id="choosing_the_channels">Choosing the channels:</h4>
+						
+						<div class="level2">
+						
+						<p>
+						There are some numbers in combo boxes on the mixer dialog - those are channels for the track.
+						</p>
+						
+						<p>
+						To understand the way of distributing channels properly, you have to know something about MIDI specification.
+						</p>
+						
+						<p>
+						MIDI uses channels to play music - each <strong>channel has currently assigned instrument (voice)</strong>. There are 16 different channels (marked 0..15) - channel 9 is reserved for drums and percussion.
+						</p>
+						
+						<p>
+						For example, to be able to play a <a class="PageLink" href="edit_effects.html#dead_note">dead note</a> and a tone in the same time, TuxGuitar has to occupy two channels for a track, because dead note is one instrument (voice) and guitar tone is another instrument. So every track has its <strong>Channel</strong> (marked green on the picture above), but also needs the <strong>Effect channel</strong> (marked orange on the picture above). Because there are only 16 channels it leads you [...]
+						</p>
+						
+						<p>
+						It means that as long as you don’t have more than 7 instruments and a percussion, you don’t have to worry about distributing MIDI channels - TuxGuitar distributes the channels in order. But if you have more tracks you have to be careful. By overlapping MIDI channels you can achieve MIDI reproduction without any problems, but you have to understand the problem.
+						</p>
+						
+						</div>
+						
+						<h5 name="effect_channel" id="effect_channel">Effect channel</h5>
+						<div class="level4">
+						
+						<p>
+						 <strong>Effect channel</strong> is used in certain occasions. One ocasion is when <strong>two different voices</strong> are played in the same time in the same track. In TuxGuitar that can happen if you play dead note or harmonic in the same time with an ordinary instrument tone. 
+						</p>
+						
+						<p>
+						The other occasion effect channel is used is when you apply some <strong>pitch effect</strong> (like bend, slide, vibrato or tremolo bar) on <em class="u"><strong>some of the notes</strong></em> played in the same time in same track/channel. The reason for this is because by MIDI specification effect can be applied only on channel, not on note. So TuxGuitar automatically moves note to Effect channel and apply pitch effect on him. That is also the reason why you cannot apply slide a [...]
+						</p>
+						
+						</div>
+						
+						<h5 name="how_to_overlap_channels" id="how_to_overlap_channels">How to overlap channels?</h5>
+						<div class="level4">
+						
+						<p>
+						 The safest way is to overlap channels of two tracks that are never played in the same time. The only problem is that <strong>mixer settings</strong> (volume, pan and solo/mute) would have the same value for both the instruments (tracks).
+						</p>
+						
+						<p>
+						You can also try to assign the same channel for channel (CH) and effects channel (EC) if you don’t use effects like dead note, harmonics in the same time with an ordinary instrument note, or you don’t need to apply “pitch” effect on only some notes played in the same time with notes without pitch effect. If you do use effects but set the same CH and EC, dead note and harmonics probably wouldn’t be heard, and pitch effects would apply on all the notes i [...]
+						</p>
+						
+						</div>
+						
+						</div>
+						
+						<h2><a name="composition_properties" id="composition_properties">Composition properties:</a></h2>
+						<div class="level2">
+						
+						<p>
+						 You don’t want your transcription to be distributed in cyberspace without any credits. :)
+						</p>
+						
+						<p>
+						By selecting <em>Composition/Properties</em> from the main menu or clicking on appropriate icon you invoke dialog that containst information about the current song.
+						</p>
+						
+						<p>
+						<img src="images/start/tb_properties.png" class="media" title="" alt="" width="28" height="26" />
+						</p>
+						
+						<p>
+						Every song should have name, author and transcriber set, both for archiving and printing purpose. Read <a class="PageLink" href="start_toolbars.html#song_properties">more details</a>.
+						</p>
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/editing_track.html b/TuxGuitar/share/help/editing_track.html
index e2a84b0..4ce2d55 100644
--- a/TuxGuitar/share/help/editing_track.html
+++ b/TuxGuitar/share/help/editing_track.html
@@ -2,222 +2,285 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>Editing a track</h1>
-
-<p>
-Each song consists of one or more tracks. 
-</p>
-
-<p>
-Each track is assigned to one instrument. Each instrument sounds the different way.
-</p>
-
-<h2><a name="before_you_start_with_notes" id="before_you_start_with_notes">Before you start with notes:</a></h2>
-
-<p>
- Before you start inserting notes into a new song, you have to adjust some settings. These are accessed through <em>Composition</em> menu.
-</p>
-
-<p>
-<strong>Time signature</strong> has to be defined for each song. Usually it is 4/4, but sometimes it has some different value (3/4 for waltz, 7/8, etc.) Time signature applies for all the tracks. It can be changed in the middle of the song - when you change the value time signature will be changed <em class="u">from the current place in the song until the end</em>.
-</p>
-
-<p>
-<strong>Tempo</strong> is another value each song possess. It indicates how many beats (1/4 notes) song has in a minute - it is marked in BPM’s - Beats Per Minute. Tempo also applies for all the tracks in the song, and also can be changed. When you change the value tempo will be changed <em class="u">from the current place in the song until the end</em>.
-</p>
-
-<p>
-<strong>Clef</strong> affects the song display in scores. Clefs are used to mark the specific pitch of the note, so all other notes’ pitch can be determined. Clef is placed on the beginning of the scores. There are three types of clef supported in TuxGuitar: treble (default), bass, alto and tenor, which are the most usual clefs. Custom clefs are not supported. Clef can be changed in the middle of the song - when it’s changed the scores display changes from that position and f [...]
-</p>
-
-<p>
-<strong>Key signature</strong> affects the way the notes are written in scores. They represent the current scale the song is written in, so there’s no need to constantly write <em>sharp</em> and <em>flat</em> marks. When you choose to change the key signature, dialog appears with existing key signatures. <strong>Natural</strong>, for example, represents the C-major, <strong>one flat</strong> represents F-major, etc.
-</p>
-
-<p>
-<strong>Triplet feel</strong> (also: <em><strong>shuffle</strong> notes</em> or <em><strong>swung</strong> notes</em>) is the rhythmic device in which the duration of the initial note in a pair is augmented and that of the second is diminished. This effect is often used in jazz and blues music. TuxGuitar triplet feel divides the note par in 2:1 ratio. <em class="u"><strong>Triplet 8th</strong></em> divides a pair of 1/8 notes and <em class="u"><strong>Triplet 16th</strong></em> divides a [...]
-
-<h4><a name="track_properties" id="track_properties">Track properties</a></h4>
-
-<p>
-<strong>Track properties</strong> are the most important and should be adjusted for each track: track name, display color, instrument (from the list of instruments), number of strings and tuning. You can access this dialog by choosing Track/Properties in the main menu.
-</p>
-
-<h2><a name="putting_the_notes_in" id="putting_the_notes_in">Putting the notes in:</a></h2>
-
-
-<h3><a name="note_and_measure_duration" id="note_and_measure_duration">Note and measure duration</a></h3>
-
-<p>
- The most important property of a note is its duration. The sum of duration of all the notes in a measure is determined by the measure’s time signature. TuxGuitar has a system that protects the user of making an irregular measure (longer or shorter).
-</p>
-
-<p>
-Therefore, every new 4/4 measure can contains only one whole note. When you select a duration of a note you want to enter, TuxGuitar adjusts all the pauses between the current position and the end of a measure (or the next note entered) so you can insert as many notes as possible.
-</p>
-
-<p>
-You can change time signature in Composition→Time signature (or on 4/4 icon), and note duration in menu Note→Duration→(wanted duration). Note duration icons are also located on the main application toolbar.
-</p>
-
-<h3><a name="navigating" id="navigating">Navigating</a></h3>
-
-<p>
- You can change the current position of a note you want to enter by clicking on the desired location, or by navigating with arrows of a keyboard. Simply pressing the arrows left and right puts you on the next note in the current track, but Ctrl+(left or right) takes you to the previous or next measure.
-</p>
-
-<p>
-Arrows up and down navigate you through the strings in tablature editor.
-</p>
-
-<h3><a name="writing_numbers" id="writing_numbers">Writing numbers</a></h3>
-
-<p>
- <img src="images/edit/typing.png"/>
-</p>
-
-<p>
-<strong>Tablature editor</strong> is represented by the number of the strings instrument possess. Each line is a string - when you type a number on a string <strong>[0 .. 29]</strong> editor puts on that string a note which is heard if you press a string on typed fret. The note has selected duration and dynamics you can modify afterwards. 
-</p>
-
-<p>
-If you navigate to an existing note (written as a number) and press Shift+(left or right) you will increase/decrease the pitch (fret) on the current string. If you press Shift+(up or down) you will move the fret value to the string up or down.
-</p>
-
-<h3><a name="clicking_on_the_scores" id="clicking_on_the_scores">Clicking on the scores</a></h3>
-
-<p>
- To be able to insert notes by clicking on the scores, you should be in the <strong>Score Edition Mode</strong> (you can change mode in Edit menu). When Score Edition Mode is enabled, you can check and uncheck the <strong>Sharp/Flat mode</strong> (in Edit menu, also) by which you can insert sharp notes.
-</p>
-
-<p>
-Notes are inserted by left-clicking on the score’s line or between two lines. If you decide to write notes above or below five existing lines, aditional lines will appear. By clicking a note will appear on the selected place, and also in the tablature editor by appropriate number on appropriate string.
-</p>
-
-<h3><a name="note_dynamics" id="note_dynamics">Note dynamics</a></h3>
-
-<p>
- Very important property of a note is it’s dynamics: the “loudness” of a note. For each note you can put wanted dynamics.
-</p>
-
-<p>
-<img src="images/start/tb_dynamics.png"/>
-</p>
-
-<p>
-When you create a note, it will have dynamics previously selected. If you click on other dynamics’ icon when positioned on existing note, the note will change its dynamics. In TuxGuitar dynamics is marked in standard manner (<strong><em>mp</em></strong> for <em>mezzo-piano</em>, <strong><em>fff</em></strong> for <em>forte fortissimo</em> etc.)
-</p>
-
-<h3><a name="dotted_and_double-dotted_note" id="dotted_and_double-dotted_note">Dotted and double-dotted note</a></h3>
-
-<p>
- Dotted note has extended duration by 50%. It means that if you mark a 1/2 note as dotted, its duration will be 1/2 + 1/4 = 3/4. 
-</p>
-
-<p>
-Double dotted note has duration extended by 75%. That means that 1/4 double dotted note will have duration of 1/4 + 1/8 + 1/16 = 7/16.
-</p>
-
-<h3><a name="tied_note" id="tied_note">Tied note</a></h3>
-
-<p>
- When a note is played on the end of one measure but lasts in the next measure also, you have to use a <strong>tied note</strong>. You achieve the effect by putting the note on the end of a first measure and then put the same note on the beginning of next measure. <u>Then you mark</u> the second note as a tied note.
-</p>
-
-<p>
-You can also use a tied note in the situation you need a note which has duration of a 5/16 note - a duration you cannot achieve by dotted or double dotted note. Then you tie a 1/4 and 1/16 note.
-</p>
-
-<h3><a name="insert_chord" id="insert_chord">Insert chord</a></h3>
-
-<p>
- You can also put some notes into the song by inserting a chord. Chord’s duration and dynamics will be those currently selected.
-</p>
-
-<p>
-<img src="images/edit/insert_named_chord.png"/>
-</p>
-
-<p>
-You can insert a chord defined earlier (as on picture) or you can use chord wizard to generate a new chord (and even define a name for it for later use). Read more about <a class="PageLink" href="edit_chord.html">Chord Editor dialog</a> in other entry.
-</p>
-
-<h2><a name="after_putting_the_notes" id="after_putting_the_notes">After putting the notes:</a></h2>
-
-<p>
- After writing the things you wanted, you will probably want to hear what’s done. After checking you will probably want to change something - listening and correction makes it perfect.
-</p>
-
-<h3><a name="effects" id="effects">Effects</a></h3>
-
-<p>
- Playing guitar isn’t just playing a note in a right time. There are some little tricks we all use, like bend, palm mute etc. TuxGuitar supports most of them. Many effects are applied on the current note. Read more about <a class="PageLink" href="edit_effects.html">Note effects</a> in this help.
-</p>
-
-<h3><a name="repeat" id="repeat">Repeat</a></h3>
-
-<p>
- Sometimes in a song all the instrument are played the same way several times (e.g. in chorus). It is more elegant to mark that segment of a song for repetition than to copy/paste that passage again.
-</p>
-
-<p>
-Repeat is set over one or more measures. It has a beginning, an end and information how many times <em class="u">to repeat</em>. So if you want a passage to be played twice, you start repeat and end it on appropriate place. When asked how many times to repeat you should set 1 if you want it to be played twice.
-</p>
-
-<p>
-Repeats are even more convenient to use with <strong>alternative endings</strong> - you define different ending measures for each repeat. So after you close a repeat and mark it as an alternative ending the editor will appear to select at which repeats this ending will play. It is a little hard to explain, but if you try the option you will find it self-explanatory.
-</p>
-
-<p>
-<img src="images/edit/repeats.png"/>
-</p>
-
-<h3><a name="lyrics" id="lyrics">Lyrics</a></h3>
-
-<p>
- TuxGuitar supports writing lyrics in a track, so you can make a track which contains lyrics and the melody of singing. Lyrics editor is accessed by selecting <em>Track/Lyrics</em> from the main menu.
-</p>
-
-<p>
-The way the lyrics will be displayed <strong>depends on the content of the measure</strong>. Every word seperated by <em>space</em> or <em>enter</em> belongs to one note in a measure.
-</p>
-
-<p>
-<img src="images/edit/ed_lyrics.png"/>
-</p>
-
-<p>
-You have to select the number of a measure where lyrics start. When you type text, it starts below the first note in a measure you have set, and after each <em>space</em> or <em>enter</em> key the next word is displayed below the next <strong>note</strong>. Pauses are ignored. When you type text below every note in a measure, the text automatically move to the next measure.
-</p>
-
-<p>
-If you want to have some notes without a text below, you should put more <em>space</em> characters.
-</p>
-
-<h3><a name="text" id="text">Text</a></h3>
-
-<p>
- Similar as lyrics, but the text is not tied to notes. It is most often used as a note to the player or a comment to tab. It is displayed above the note it is assigned to.
-</p>
-
-<h3><a name="just_one_instrument" id="just_one_instrument">Just one instrument?</a></h3>
-
-<p>
- Well, probably not. But you have to write something to be able to write some more. You will probably want to add more instruments (tracks) and enter the wonderfull world of multi-track editing. :)
-</p>
-
-<p>
-But even if you have only one track in a song, it is still a song. Song have some of its own properties and editing, so you should check <a class="PageLink" href="editing_song.html">section about editing a song</a>.
-</p>
-
-<h3><a name="the_percussion_track" id="the_percussion_track">The Percussion track</a></h3>
-
-<p>
- The track for drums and percussions is treated a little bit differently in TuxGuitar than the other, “ordinary” tracks. It always has to be on MIDI channel 9 - that is achieved by checking the <strong>Percussion Track</strong> option in the Track→Properties. There is a special tool for editing the percussion track - besides the usual editing (by entering numbers on the tab), you can also use the Matrix Editor from <strong>Layout→Show_Matrix menu</strong>. Read more [...]
-</p>
-
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Editing a track</h1>
+						
+						<p>
+						Each song consists of one or more tracks. 
+						</p>
+						
+						<p>
+						Each track is assigned to one instrument. Each instrument sounds the different way.
+						</p>
+						
+						<h2><a name="before_you_start_with_notes" id="before_you_start_with_notes">Before you start with notes:</a></h2>
+						
+						<p>
+						 Before you start inserting notes into a new song, you have to adjust some settings. These are accessed through <em>Composition</em> menu.
+						</p>
+						
+						<p>
+						<strong>Time signature</strong> has to be defined for each song. Usually it is 4/4, but sometimes it has some different value (3/4 for waltz, 7/8, etc.) Time signature applies for all the tracks. It can be changed in the middle of the song - when you change the value time signature will be changed <em class="u">from the current place in the song until the end</em>.
+						</p>
+						
+						<p>
+						<strong>Tempo</strong> is another value each song possess. It indicates how many beats (1/4 notes) song has in a minute - it is marked in BPM’s - Beats Per Minute. Tempo also applies for all the tracks in the song, and also can be changed. When you change the value tempo will be changed <em class="u">from the current place in the song until the end</em>.
+						</p>
+						
+						<p>
+						<strong>Clef</strong> affects the song display in scores. Clefs are used to mark the specific pitch of the note, so all other notes’ pitch can be determined. Clef is placed on the beginning of the scores. There are three types of clef supported in TuxGuitar: treble (default), bass, alto and tenor, which are the most usual clefs. Custom clefs are not supported. Clef can be changed in the middle of the song - when it’s changed the scores display changes from that position [...]
+						</p>
+						
+						<p>
+						<strong>Key signature</strong> affects the way the notes are written in scores. They represent the current scale the song is written in, so there’s no need to constantly write <em>sharp</em> and <em>flat</em> marks. When you choose to change the key signature, dialog appears with existing key signatures. <strong>Natural</strong>, for example, represents the C-major, <strong>one flat</strong> represents F-major, etc.
+						</p>
+						
+						<p>
+						<strong>Triplet feel</strong> (also: <em><strong>shuffle</strong> notes</em> or <em><strong>swung</strong> notes</em>) is the rhythmic device in which the duration of the initial note in a pair is augmented and that of the second is diminished. This effect is often used in jazz and blues music. TuxGuitar triplet feel divides the note par in 2:1 ratio. <em class="u"><strong>Triplet 8th</strong></em> divides a pair of 1/8 notes and <em class="u"><strong>Triplet 16th</strong></em> div [...]
+						
+						<h4><a name="track_properties" id="track_properties">Track properties</a></h4>
+						
+						<p>
+						<strong>Track properties</strong> are the most important and should be adjusted for each track: track name, display color, instrument (from the list of instruments), number of strings and tuning. You can access this dialog by choosing Track/Properties in the main menu.
+						</p>
+						
+						<h2><a name="putting_the_notes_in" id="putting_the_notes_in">Putting the notes in:</a></h2>
+						
+						
+						<h3><a name="note_and_measure_duration" id="note_and_measure_duration">Note and measure duration</a></h3>
+						
+						<p>
+						 The most important property of a note is its duration. The sum of duration of all the notes in a measure is determined by the measure’s time signature. TuxGuitar has a system that protects the user of making an irregular measure (longer or shorter).
+						</p>
+						
+						<p>
+						Therefore, every new 4/4 measure can contains only one whole note. When you select a duration of a note you want to enter, TuxGuitar adjusts all the pauses between the current position and the end of a measure (or the next note entered) so you can insert as many notes as possible.
+						</p>
+						
+						<p>
+						You can change time signature in Composition→Time signature (or on 4/4 icon), and note duration in menu Note→Duration→(wanted duration). Note duration icons are also located on the main application toolbar.
+						</p>
+						
+						<h3><a name="navigating" id="navigating">Navigating</a></h3>
+						
+						<p>
+						 You can change the current position of a note you want to enter by clicking on the desired location, or by navigating with arrows of a keyboard. Simply pressing the arrows left and right puts you on the next note in the current track, but Ctrl+(left or right) takes you to the previous or next measure.
+						</p>
+						
+						<p>
+						Arrows up and down navigate you through the strings in tablature editor.
+						</p>
+						
+						<h3><a name="writing_numbers" id="writing_numbers">Writing numbers</a></h3>
+						
+						<p>
+						 <img src="images/edit/typing.png"/>
+						</p>
+						
+						<p>
+						<strong>Tablature editor</strong> is represented by the number of the strings instrument possess. Each line is a string - when you type a number on a string <strong>[0 .. 29]</strong> editor puts on that string a note which is heard if you press a string on typed fret. The note has selected duration and dynamics you can modify afterwards. 
+						</p>
+						
+						<p>
+						If you navigate to an existing note (written as a number) and press Shift+(left or right) you will increase/decrease the pitch (fret) on the current string. If you press Shift+(up or down) you will move the fret value to the string up or down.
+						</p>
+						
+						<h3><a name="clicking_on_the_scores" id="clicking_on_the_scores">Clicking on the scores</a></h3>
+						
+						<p>
+						 To be able to insert notes by clicking on the scores, you should be in the <strong>Score Edition Mode</strong> (you can change mode in Edit menu). When Score Edition Mode is enabled, you can check and uncheck the <strong>Sharp/Flat mode</strong> (in Edit menu, also) by which you can insert sharp notes.
+						</p>
+						
+						<p>
+						Notes are inserted by left-clicking on the score’s line or between two lines. If you decide to write notes above or below five existing lines, aditional lines will appear. By clicking a note will appear on the selected place, and also in the tablature editor by appropriate number on appropriate string.
+						</p>
+						
+						<h3><a name="note_dynamics" id="note_dynamics">Note dynamics</a></h3>
+						
+						<p>
+						 Very important property of a note is it’s dynamics: the “loudness” of a note. For each note you can put wanted dynamics.
+						</p>
+						
+						<p>
+						<img src="images/start/tb_dynamics.png"/>
+						</p>
+						
+						<p>
+						When you create a note, it will have dynamics previously selected. If you click on other dynamics’ icon when positioned on existing note, the note will change its dynamics. In TuxGuitar dynamics is marked in standard manner (<strong><em>mp</em></strong> for <em>mezzo-piano</em>, <strong><em>fff</em></strong> for <em>forte fortissimo</em> etc.)
+						</p>
+						
+						<h3><a name="dotted_and_double-dotted_note" id="dotted_and_double-dotted_note">Dotted and double-dotted note</a></h3>
+						
+						<p>
+						 Dotted note has extended duration by 50%. It means that if you mark a 1/2 note as dotted, its duration will be 1/2 + 1/4 = 3/4. 
+						</p>
+						
+						<p>
+						Double dotted note has duration extended by 75%. That means that 1/4 double dotted note will have duration of 1/4 + 1/8 + 1/16 = 7/16.
+						</p>
+						
+						<h3><a name="tied_note" id="tied_note">Tied note</a></h3>
+						
+						<p>
+						 When a note is played on the end of one measure but lasts in the next measure also, you have to use a <strong>tied note</strong>. You achieve the effect by putting the note on the end of a first measure and then put the same note on the beginning of next measure. <u>Then you mark</u> the second note as a tied note.
+						</p>
+						
+						<p>
+						You can also use a tied note in the situation you need a note which has duration of a 5/16 note - a duration you cannot achieve by dotted or double dotted note. Then you tie a 1/4 and 1/16 note.
+						</p>
+						
+						<h3><a name="insert_chord" id="insert_chord">Insert chord</a></h3>
+						
+						<p>
+						 You can also put some notes into the song by inserting a chord. Chord’s duration and dynamics will be those currently selected.
+						</p>
+						
+						<p>
+						<img src="images/edit/insert_named_chord.png"/>
+						</p>
+						
+						<p>
+						You can insert a chord defined earlier (as on picture) or you can use chord wizard to generate a new chord (and even define a name for it for later use). Read more about <a class="PageLink" href="edit_chord.html">Chord Editor dialog</a> in other entry.
+						</p>
+						
+						<h2><a name="after_putting_the_notes" id="after_putting_the_notes">After putting the notes:</a></h2>
+						
+						<p>
+						 After writing the things you wanted, you will probably want to hear what’s done. After checking you will probably want to change something - listening and correction makes it perfect.
+						</p>
+						
+						<h3><a name="effects" id="effects">Effects</a></h3>
+						
+						<p>
+						 Playing guitar isn’t just playing a note in a right time. There are some little tricks we all use, like bend, palm mute etc. TuxGuitar supports most of them. Many effects are applied on the current note. Read more about <a class="PageLink" href="edit_effects.html">Note effects</a> in this help.
+						</p>
+						
+						<h3><a name="repeat" id="repeat">Repeat</a></h3>
+						
+						<p>
+						 Sometimes in a song all the instrument are played the same way several times (e.g. in chorus). It is more elegant to mark that segment of a song for repetition than to copy/paste that passage again.
+						</p>
+						
+						<p>
+						Repeat is set over one or more measures. It has a beginning, an end and information how many times <em class="u">to repeat</em>. So if you want a passage to be played twice, you start repeat and end it on appropriate place. When asked how many times to repeat you should set 1 if you want it to be played twice.
+						</p>
+						
+						<p>
+						Repeats are even more convenient to use with <strong>alternative endings</strong> - you define different ending measures for each repeat. So after you close a repeat and mark it as an alternative ending the editor will appear to select at which repeats this ending will play. It is a little hard to explain, but if you try the option you will find it self-explanatory.
+						</p>
+						
+						<p>
+						<img src="images/edit/repeats.png"/>
+						</p>
+						
+						<h3><a name="lyrics" id="lyrics">Lyrics</a></h3>
+						
+						<p>
+						 TuxGuitar supports writing lyrics in a track, so you can make a track which contains lyrics and the melody of singing. Lyrics editor is accessed by selecting <em>Track/Lyrics</em> from the main menu.
+						</p>
+						
+						<p>
+						The way the lyrics will be displayed <strong>depends on the content of the measure</strong>. Every word seperated by <em>space</em> or <em>enter</em> belongs to one note in a measure.
+						</p>
+						
+						<p>
+						<img src="images/edit/ed_lyrics.png"/>
+						</p>
+						
+						<p>
+						You have to select the number of a measure where lyrics start. When you type text, it starts below the first note in a measure you have set, and after each <em>space</em> or <em>enter</em> key the next word is displayed below the next <strong>note</strong>. Pauses are ignored. When you type text below every note in a measure, the text automatically move to the next measure.
+						</p>
+						
+						<p>
+						If you want to have some notes without a text below, you should put more <em>space</em> characters.
+						</p>
+						
+						<h3><a name="text" id="text">Text</a></h3>
+						
+						<p>
+						 Similar as lyrics, but the text is not tied to notes. It is most often used as a note to the player or a comment to tab. It is displayed above the note it is assigned to.
+						</p>
+						
+						<h3><a name="just_one_instrument" id="just_one_instrument">Just one instrument?</a></h3>
+						
+						<p>
+						 Well, probably not. But you have to write something to be able to write some more. You will probably want to add more instruments (tracks) and enter the wonderfull world of multi-track editing. :)
+						</p>
+						
+						<p>
+						But even if you have only one track in a song, it is still a song. Song have some of its own properties and editing, so you should check <a class="PageLink" href="editing_song.html">section about editing a song</a>.
+						</p>
+						
+						<h3><a name="the_percussion_track" id="the_percussion_track">The Percussion track</a></h3>
+						
+						<p>
+						 The track for drums and percussions is treated a little bit differently in TuxGuitar than the other, “ordinary” tracks. It always has to be on MIDI channel 9 - that is achieved by checking the <strong>Percussion Track</strong> option in the Track→Properties. There is a special tool for editing the percussion track - besides the usual editing (by entering numbers on the tab), you can also use the Matrix Editor from <strong>Layout→Show_Matrix menu</strong>. Rea [...]
+						</p>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/file_formats.html b/TuxGuitar/share/help/file_formats.html
index 767f834..30fb328 100644
--- a/TuxGuitar/share/help/file_formats.html
+++ b/TuxGuitar/share/help/file_formats.html
@@ -2,73 +2,136 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-
-<h1><a name="supported_file_formats_in_tuxguitar" id="supported_file_formats_in_tuxguitar">Supported file formats in TuxGuitar</a></h1>
-
-
-<div class="level1">
-
-<p>
- Besides TuxGuitar’s own file format (with *.tg extension), TuxGuitar can work with various tablature and music file formats.
-</p>
-
-</div>
-
-<h2><a name="tablatures" id="tablatures">Tablatures</a></h2>
-<div class="level2">
-
-<p>
- <strong>old Guitar Pro</strong> (.gtp) - load
-</p>
-
-<p>
-<strong>Guitar Pro 3</strong> (.gp3) - load and save
-</p>
-
-<p>
-<strong>Guitar Pro 4</strong> (.gp4) - load and save
-</p>
-
-<p>
-<strong>Guitar Pro 5</strong> (.gp5) - load and save
-</p>
-
-<p>
-<strong>PowerTab</strong> (.ptb) - load
-</p>
-
-<p>
-<strong>TableEdit</strong> (.tef) - load
-</p>
-
-<p>
-<strong>LilyPond</strong> (.ly) - export
-</p>
-</div>
-
-<h2><a name="music_and_sheet" id="music_and_sheet">Music and sheet</a></h2>
-<div class="level2">
-
-<p>
- <strong>MIDI</strong> (.mid) - import and export
-</p>
-
-<p>
-<strong>ASCII</strong> (.txt) - export
-</p>
-
-<p>
-<strong>MusicXML</strong> (.xml) - export
-</p>
-
-<p>
-<strong>Adobe PDF</strong> (.pdf) - export
-</p>
-
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1><a name="supported_file_formats_in_tuxguitar" id="supported_file_formats_in_tuxguitar">Supported file formats in TuxGuitar</a></h1>
+						
+						
+						<div class="level1">
+						
+						<p>
+						 Besides TuxGuitar’s own file format (with *.tg extension), TuxGuitar can work with various tablature and music file formats.
+						</p>
+						
+						</div>
+						
+						<h2><a name="tablatures" id="tablatures">Tablatures</a></h2>
+						<div class="level2">
+						
+						<p>
+						 <strong>old Guitar Pro</strong> (.gtp) - load
+						</p>
+						
+						<p>
+						<strong>Guitar Pro 3</strong> (.gp3) - load and save
+						</p>
+						
+						<p>
+						<strong>Guitar Pro 4</strong> (.gp4) - load and save
+						</p>
+						
+						<p>
+						<strong>Guitar Pro 5</strong> (.gp5) - load and save
+						</p>
+						
+						<p>
+						<strong>PowerTab</strong> (.ptb) - load
+						</p>
+						
+						<p>
+						<strong>TableEdit</strong> (.tef) - load
+						</p>
+						
+						<p>
+						<strong>LilyPond</strong> (.ly) - export
+						</p>
+						</div>
+						
+						<h2><a name="music_and_sheet" id="music_and_sheet">Music and sheet</a></h2>
+						<div class="level2">
+						
+						<p>
+						 <strong>MIDI</strong> (.mid) - import and export
+						</p>
+						
+						<p>
+						<strong>ASCII</strong> (.txt) - export
+						</p>
+						
+						<p>
+						<strong>MusicXML</strong> (.xml) - export
+						</p>
+						
+						<p>
+						<strong>Adobe PDF</strong> (.pdf) - export
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/index.html b/TuxGuitar/share/help/index.html
index 893a0ef..c40fb4d 100644
--- a/TuxGuitar/share/help/index.html
+++ b/TuxGuitar/share/help/index.html
@@ -1,70 +1,6 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
-		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
-		<script type="text/javascript" src="js/jquery-1.2.6.min.js"></script>
-		<script type="text/javascript" src="js/jquery.menu.js"></script>
+		<meta http-equiv="Refresh" content="0; URL=about.html" />
 	</head>
-	<body>
-		<table>
-			<tr>
-				<td valign="top">
-					<div id="PageMenu" >
-						<ul>
-							<li >
-								<span>Introduction</span>
-								<ul>
-									<li ><a class="PageLink" href="about.html" >About</a></li>
-									<li ><a class="PageLink" href="license.html" >License</a></li>
-									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
-								</ul>
-							</li>
-						</ul>
-						<ul>
-							<li >
-								<span>Getting started</span>
-								<ul>
-									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
-									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
-									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
-								</ul>
-							</li>
-						</ul>
-						<ul>
-							<li >
-								<span>Making and editing a song</span>
-								<ul>
-									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
-									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
-									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
-									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
-									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
-								</ul>
-							</li>
-						</ul>
-						<ul>
-							<li >
-								<span>Tools and settings</span>
-								<ul>
-									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
-									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
-									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
-									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
-									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
-									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
-								</ul>
-							</li>
-						</ul>
-						<ul>
-							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
-						</ul>
-					</div>
-				</td>
-				<td valign="top">
-					<div id="PageContent" ></div>
-				</td>
-			</tr>
-		</table>
-	</body>
 </html>
diff --git a/TuxGuitar/share/help/js/jquery-1.2.6.min.js b/TuxGuitar/share/help/js/jquery-1.2.6.min.js
deleted file mode 100644
index 82b98e1..0000000
--- a/TuxGuitar/share/help/js/jquery-1.2.6.min.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * jQuery 1.2.6 - New Wave Javascript
- *
- * Copyright (c) 2008 John Resig (jquery.com)
- * Dual licensed under the MIT (MIT-LICENSE.txt)
- * and GPL (GPL-LICENSE.txt) licenses.
- *
- * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
- * $Rev: 5685 $
- */
-(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){ [...]
-return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);retur [...]
-return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.g [...]
-selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:fun [...]
-return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this. [...]
-this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);} [...]
-return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByT [...]
-jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for( [...]
-script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData: [...]
-for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
-for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.c [...]
-jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid [...]
-ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode) [...]
-while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
-while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<lengt [...]
-for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuer [...]
-jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DO [...]
-xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false; [...]
-jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.compl [...]
-for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
-s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style. [...]
-e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timer [...]
\ No newline at end of file
diff --git a/TuxGuitar/share/help/js/jquery.menu.js b/TuxGuitar/share/help/js/jquery.menu.js
deleted file mode 100644
index aa36c68..0000000
--- a/TuxGuitar/share/help/js/jquery.menu.js
+++ /dev/null
@@ -1,26 +0,0 @@
-$(document).ready(function(){
-	$(".PageLink").bind("click", function(e){
-		loadLink( $(this) );
-		return false;
-	});
-	loadLink( $(".PageLink:first") );
-});
-
-var lock = false;
-
-function loadLink( link ){
-	if( ! lock ){
-		lock = true;
-		$.get(
-			$(link).attr("href"),
-			function(request) {
-				$('#PageContent').html( request );
-				$('#PageContent .PageLink').bind("click", function(e){
-					loadLink( $(this) );
-					return false;
-				});
-			}
-		);
-		lock = false;
-	}
-}
diff --git a/TuxGuitar/share/help/license.html b/TuxGuitar/share/help/license.html
index fd020c6..d4a6a7f 100644
--- a/TuxGuitar/share/help/license.html
+++ b/TuxGuitar/share/help/license.html
@@ -2,580 +2,644 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>GNU Lesser General Public License</h1>
-
-<h2>Version 2.1, February 1999</h2>
-
-  <p>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.</p>
-
-
-  <p>[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.]</p>
-
-<h2>Preamble</h2>
-
-<p> 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. </p>
-
-
- 
-<p>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.
-</p>
-
-<p> 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.</p>
-
-
- 
-<p>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.
-</p>
-
-<p> 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. </p>
-
-
- 
-<p>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. </p>
-
-
- 
-<p>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. </p>
-
-<p>
- 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. </p>
-
-
- 
-<p>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. </p>
-
-
- 
-<p>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. </p>
-
-
- 
-<p>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. </p>
-
-
- 
-<p>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.
-</p>
-
- 
-<p>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. </p>
-
-
-<p> 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.
-</p>
-
- 
-<p>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. </p>
-
-
-<h2>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</h2>
-
-<p><strong>0.</strong> 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".</p>
-
-
-<p> 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. </p>
-
-
-<p> 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".) </p>
-
-
-<p> "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.</p>
-
-
- 
-<p>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. </p>
-
-
-<p><strong>1.</strong> 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.
-</p>
-
-<p> 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. </p>
-
-
-<p><strong>2.</strong> 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:
-</p>
-
-
-
-  <p>a) The modified work must itself be a software library. </p>
-
-  <p>b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.</p>
-
-  <p>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. </p>
-
-  <p>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. </p>
-
-
-
-  <p> (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.) </p>
-
-  <p> 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.
-  </p>
-
-   
-  <p>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.
-  </p>
-
-  <p> 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.
-  </p>
-
-
-<p><strong>3.</strong> 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. </p>
-
-
- 
-<p>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.
-</p>
-
-<p> This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
-</p>
-
-<p><strong>4.</strong> 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.
-</p>
-
-
- 
-<p>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.</p>
-
-
-<p><strong>5.</strong> 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. </p>
-
-
-<p> 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. </p>
-
-
-<p> 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. </p>
-
-
-<p> 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.) </p>
-
-
-<p>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. </p>
-
-
-<p><strong>6.</strong> 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. </p>
-
-<p>
- 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: </p>
-
-
-
-  <p>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.) </p>
-
-
-  <p>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. </p>
-
-  <p>
-  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. </p>
-
-
-  <p>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. </p>
-
-
-  <p>e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.</p>
-
-
-
-
- 
-<p>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. </p>
-
-
-<p> 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. </p>
-
-
-<p><strong>7.</strong> 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: </p>
-
-
-
-  <p>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. </p>
-
-
-  <p>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.</p>
-
-
-
-<p><strong>8.</strong> 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. </p>
-
-<p>
-<strong>9.</strong> 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. </p>
-
-<p>
-<strong>10.</strong> 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. </p>
-
-
-<p><strong>11.</strong> 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. </p>
-
-<p>
-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. </p>
-
-
-<p>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. </p>
-
-
-<p>This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. </p>
-
-<p>
-<strong>12.</strong> 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. </p>
-
-<p>
-<strong>13.</strong> 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.</p>
-
-
-<p>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. </p>
-
-<p>
-<strong>14.</strong> 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. </p>
-
-<p>
-NO WARRANTY </p>
-
-<p>
-<strong>15. </strong>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. </p>
-
-<p>
-<strong>16.</strong> 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. </p>
-
-
-<h2>END OF TERMS AND CONDITIONS</h2>
-
-<p>
-TuxGuitar is a multitrack tablature editor and player.<br/>
-Copyright (C) 2005, By Julián Gabriel Casadesús
-</p>
-<p>
-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.
-</p>
-<p>
-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.
-</p>
-<p>
-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
-</p>
-
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>GNU Lesser General Public License</h1>
+						
+						<h2>Version 2.1, February 1999</h2>
+						
+						  <p>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.</p>
+						
+						
+						  <p>[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.]</p>
+						
+						<h2>Preamble</h2>
+						
+						<p> 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. </p>
+						
+						
+						 
+						<p>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.
+						</p>
+						
+						<p> 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.</p>
+						
+						
+						 
+						<p>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.
+						</p>
+						
+						<p> 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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						<p>
+						 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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						 
+						<p>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.
+						</p>
+						
+						 
+						<p>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. </p>
+						
+						
+						<p> 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.
+						</p>
+						
+						 
+						<p>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. </p>
+						
+						
+						<h2>TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</h2>
+						
+						<p><strong>0.</strong> 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".</p>
+						
+						
+						<p> 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. </p>
+						
+						
+						<p> 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".) </p>
+						
+						
+						<p> "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.</p>
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						<p><strong>1.</strong> 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.
+						</p>
+						
+						<p> 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. </p>
+						
+						
+						<p><strong>2.</strong> 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:
+						</p>
+						
+						
+						
+						  <p>a) The modified work must itself be a software library. </p>
+						
+						  <p>b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change.</p>
+						
+						  <p>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. </p>
+						
+						  <p>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. </p>
+						
+						
+						
+						  <p> (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.) </p>
+						
+						  <p> 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.
+						  </p>
+						
+						   
+						  <p>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.
+						  </p>
+						
+						  <p> 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.
+						  </p>
+						
+						
+						<p><strong>3.</strong> 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. </p>
+						
+						
+						 
+						<p>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.
+						</p>
+						
+						<p> This option is useful when you wish to copy part of the code of the Library into a program that is not a library.
+						</p>
+						
+						<p><strong>4.</strong> 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.
+						</p>
+						
+						
+						 
+						<p>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.</p>
+						
+						
+						<p><strong>5.</strong> 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. </p>
+						
+						
+						<p> 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. </p>
+						
+						
+						<p> 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. </p>
+						
+						
+						<p> 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.) </p>
+						
+						
+						<p>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. </p>
+						
+						
+						<p><strong>6.</strong> 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. </p>
+						
+						<p>
+						 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: </p>
+						
+						
+						
+						  <p>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.) </p>
+						
+						
+						  <p>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. </p>
+						
+						  <p>
+						  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. </p>
+						
+						
+						  <p>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. </p>
+						
+						
+						  <p>e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy.</p>
+						
+						
+						
+						
+						 
+						<p>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. </p>
+						
+						
+						<p> 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. </p>
+						
+						
+						<p><strong>7.</strong> 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: </p>
+						
+						
+						
+						  <p>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. </p>
+						
+						
+						  <p>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.</p>
+						
+						
+						
+						<p><strong>8.</strong> 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. </p>
+						
+						<p>
+						<strong>9.</strong> 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. </p>
+						
+						<p>
+						<strong>10.</strong> 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. </p>
+						
+						
+						<p><strong>11.</strong> 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. </p>
+						
+						<p>
+						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. </p>
+						
+						
+						<p>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. </p>
+						
+						
+						<p>This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. </p>
+						
+						<p>
+						<strong>12.</strong> 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. </p>
+						
+						<p>
+						<strong>13.</strong> 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.</p>
+						
+						
+						<p>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. </p>
+						
+						<p>
+						<strong>14.</strong> 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. </p>
+						
+						<p>
+						NO WARRANTY </p>
+						
+						<p>
+						<strong>15. </strong>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. </p>
+						
+						<p>
+						<strong>16.</strong> 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. </p>
+						
+						
+						<h2>END OF TERMS AND CONDITIONS</h2>
+						
+						<p>
+						TuxGuitar is a multitrack tablature editor and player.<br/>
+						Copyright (C) 2005, By Julián Gabriel Casadesús
+						</p>
+						<p>
+						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.
+						</p>
+						<p>
+						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.
+						</p>
+						<p>
+						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
+						</p>
+						
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/start_first_steps.html b/TuxGuitar/share/help/start_first_steps.html
index 481baa9..21e1f9b 100644
--- a/TuxGuitar/share/help/start_first_steps.html
+++ b/TuxGuitar/share/help/start_first_steps.html
@@ -2,107 +2,171 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>The First Steps</h1>
-
-<h2>Creating a new file:</h2>
-
-<p>
- The first thing you need to do is make sure you have a brand new file to work on. 
- When you launch TuxGuitar, you should already have a blank tablature document ready for editing. However, 
- if you need to start over with another blank document, all you have to do is click the “New” button (highlighted in red below).
-</p>
-
-<p>
- <img src="images/start/fs_new_file.png" />
-</p>
-
-<p>
- Wow. That was easy. Now that we have blank document, we just need to set up our first track. Then the real fun can begin.
-</p>
-<h2>Preparing your first track for playback:</h2>
-
-<p>
- At the bottom of the screen, you should see a track list window that will look like the one below. 
-</p>
-
-<p>
- <img src="images/start/fs_song_table.png" />
-</p>
-
-<p>
- The track list is a very useful yet compact information center which provides quick access to many of the most important aspects of your song. 
- There is a lot to be said about the track list, but we will not dig too deep into it right now, lest we should confuse newcomers. So for now, 
- let it suffice to say that the track window will help us stay organized while we edit our tablature.
-</p>
-
-<p>
-As you have probably noticed, there is already one track ready for you when you start a new tab document. You can just think of tracks as instruments. If you have a song with two guitars and one bassline that need transcribing, you will need three tracks. Fairly simple concept. It gets better though: as long as you have a soundbank installed for your Java Virtual Machine, each track will play back a sound when you play the file in TuxGuitar. Now, let’s get into setting this up, bec [...]
-</p>
-
-<p>
-So: double-click anywhere on “Track 1” or “Piano” to open the track properties dialog, as seen below.
-</p>
-
-<h2>Using The Track Properties Dialog:</h2>
-
-<p>
- <img src="images/start/fs_track_properties.png" />
-</p>
-
-<p>
-The Properties dialog is where we will go to setup how we want each track to playback. There are three main sections in the Properties box, 
-and they are laid out as follows (red boxes added for clarity):
-</p>
-
-<h3>#1: Name of the track:</h3>
-
-<p>
-Whatever you type in the box here is what will show up in the track list we looked at earlier. As you can see, 
-we have named our track “Rhythm Guitar,” but you can name it anything you like. 
-You can also set the color the track will display in the track list.
-</p>
-
-
-<h3>#2: Instrument (i.e.-the sound the track will play back):</h3>
-
-
-<p>
-This is the sound that your track will play back from your jvm soundbank. Most soundbanks have a plethora of sounds which go far beyond just guitars, 
-so be as creative as you want. Don’t expect the sound quality to be too superb, though. In most cases, 
-these sounds will be less than “realistic”. This is really only for referencing purposes. 
-(It is possible to have this trigger other, possibly better sounds via the tuxguitar-alsa plugin, 
-but that is a lesson for another day, and perhaps another author.) 
-</p>
-
-<p>
-You can also check “Percussion Track” to have it play drum sounds if you wish to include them in the tabs.
-</p>
-
-<p>
-<em>
-*A side note on the instrument settings section: If you are not able to change this setting, 
-you probably have a soundbank problem. This issue has been covered in the TuxGuitar forums as well as in the main documentation, 
-so check there for help.
-</em>
-</p>
-
-<h3>#3: Tuning:</h3>
-
-
-<p>
-This one is pretty self-explanatory. You can set the number of strings for your instrument (i.e. 4 if you’re a bass player, 
-3 if you’re in The Presidents of The United States of America) and the tuning of the instrument, in case you use alternate tunings. 
-It is important to make sure you have your tuning correct, or else the actual score staff of your tabs will be inaccurate, and nobody wants that.
-</p>
-
-<p>
-Once you have everything set to your liking, click OK. Now, if you look at your track list again, 
-you will see that your changes have taken affect. And with that, you are ready to start editing tabs with sound.
-</p>
-<br/>
-<br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>The First Steps</h1>
+						
+						<h2>Creating a new file:</h2>
+						
+						<p>
+						 The first thing you need to do is make sure you have a brand new file to work on. 
+						 When you launch TuxGuitar, you should already have a blank tablature document ready for editing. However, 
+						 if you need to start over with another blank document, all you have to do is click the “New” button (highlighted in red below).
+						</p>
+						
+						<p>
+						 <img src="images/start/fs_new_file.png" />
+						</p>
+						
+						<p>
+						 Wow. That was easy. Now that we have blank document, we just need to set up our first track. Then the real fun can begin.
+						</p>
+						<h2>Preparing your first track for playback:</h2>
+						
+						<p>
+						 At the bottom of the screen, you should see a track list window that will look like the one below. 
+						</p>
+						
+						<p>
+						 <img src="images/start/fs_song_table.png" />
+						</p>
+						
+						<p>
+						 The track list is a very useful yet compact information center which provides quick access to many of the most important aspects of your song. 
+						 There is a lot to be said about the track list, but we will not dig too deep into it right now, lest we should confuse newcomers. So for now, 
+						 let it suffice to say that the track window will help us stay organized while we edit our tablature.
+						</p>
+						
+						<p>
+						As you have probably noticed, there is already one track ready for you when you start a new tab document. You can just think of tracks as instruments. If you have a song with two guitars and one bassline that need transcribing, you will need three tracks. Fairly simple concept. It gets better though: as long as you have a soundbank installed for your Java Virtual Machine, each track will play back a sound when you play the file in TuxGuitar. Now, let’s get into setting this u [...]
+						</p>
+						
+						<p>
+						So: double-click anywhere on “Track 1” or “Piano” to open the track properties dialog, as seen below.
+						</p>
+						
+						<h2>Using The Track Properties Dialog:</h2>
+						
+						<p>
+						 <img src="images/start/fs_track_properties.png" />
+						</p>
+						
+						<p>
+						The Properties dialog is where we will go to setup how we want each track to playback. There are three main sections in the Properties box, 
+						and they are laid out as follows (red boxes added for clarity):
+						</p>
+						
+						<h3>#1: Name of the track:</h3>
+						
+						<p>
+						Whatever you type in the box here is what will show up in the track list we looked at earlier. As you can see, 
+						we have named our track “Rhythm Guitar,” but you can name it anything you like. 
+						You can also set the color the track will display in the track list.
+						</p>
+						
+						
+						<h3>#2: Instrument (i.e.-the sound the track will play back):</h3>
+						
+						
+						<p>
+						This is the sound that your track will play back from your jvm soundbank. Most soundbanks have a plethora of sounds which go far beyond just guitars, 
+						so be as creative as you want. Don’t expect the sound quality to be too superb, though. In most cases, 
+						these sounds will be less than “realistic”. This is really only for referencing purposes. 
+						(It is possible to have this trigger other, possibly better sounds via the tuxguitar-alsa plugin, 
+						but that is a lesson for another day, and perhaps another author.) 
+						</p>
+						
+						<p>
+						You can also check “Percussion Track” to have it play drum sounds if you wish to include them in the tabs.
+						</p>
+						
+						<p>
+						<em>
+						*A side note on the instrument settings section: If you are not able to change this setting, 
+						you probably have a soundbank problem. This issue has been covered in the TuxGuitar forums as well as in the main documentation, 
+						so check there for help.
+						</em>
+						</p>
+						
+						<h3>#3: Tuning:</h3>
+						
+						
+						<p>
+						This one is pretty self-explanatory. You can set the number of strings for your instrument (i.e. 4 if you’re a bass player, 
+						3 if you’re in The Presidents of The United States of America) and the tuning of the instrument, in case you use alternate tunings. 
+						It is important to make sure you have your tuning correct, or else the actual score staff of your tabs will be inaccurate, and nobody wants that.
+						</p>
+						
+						<p>
+						Once you have everything set to your liking, click OK. Now, if you look at your track list again, 
+						you will see that your changes have taken affect. And with that, you are ready to start editing tabs with sound.
+						</p>
+						<br/>
+						<br/>
+
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/start_playing.html b/TuxGuitar/share/help/start_playing.html
index 4ca0617..a2b9489 100644
--- a/TuxGuitar/share/help/start_playing.html
+++ b/TuxGuitar/share/help/start_playing.html
@@ -2,102 +2,166 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>Playing a song</h1>
-
-<h2><a name="opening_an_existing_song" id="opening_an_existing_song">Opening an existing song:</a></h2>
-
-<p>
- TuxGuitar currently supports several file formats. Besides its internal <em><strong>.tg</strong></em> format (which is recommended), 
- it can open and play all Guitar Pro formats (<strong><em>.gtp</em></strong>, <strong><em>.gp3</em></strong>, <strong><em>.gp4</em></strong>, <strong><em>.gp5</em></strong>) 
- and also a PowerTab format (<strong><em>.ptb</em></strong>).
-</p>
-
-<p>
-You can open a file through File/Open dialog in TuxGuitar, but you can also assign a file type association in your operating system.
-</p>
-
-<p>
- Another way to open a file is directly from an online resource, by using the <strong>File→Open_URL</strong> dialog. If you enter the correct URL of an online file TuxGuitar is able to open, you can view and play the file in the same manner as it is open from one of your folders. Of course, you cannot save the file back on the same URL, you can save it only as a local file.
-</p>
-
-
-<h2><a name="playback" id="playback">Playback:</a></h2>
-
-<p>
-<img src="images/start/tb_transport.png"/>
-</p>
-
-<p>
-Using playback controls you can play, stop and pause the playback, but also you can navigate through the song (next/previous measure, beginning/end of a song). During the playback currently played note will be coloured in red, so it is easier to see how the current note is played.
-</p>
-
-<p>
-You can also navigate through the song using the “transporter” in the bottom-right of the application window, which is the graphical represantation of a song’s tracks. It isn’t automatically scrolled during the playback, but using the scrollbar on the bottom of the screen you can view the whole song. You can access the wanted instrument and measure by clicking on the proper rectangle in the “transporter” widget.
-</p>
-
-<p>
-The song can be navigated also with a “Show transport” option in <em>Layout</em> menu by which you can navigate through internal representation of a song, quickly getting on any position.
-</p>
-
-<p>
-The current instrument can be changed by clicking on the instrument name in the bottom-left side of the application window. Display will be changed accordingly to view the wanted instrument’s notes.
-</p>
-
-
-<h2><a name="views" id="views">Views:</a></h2>
-
-<p>
- During the playback you can change the current view.
-</p>
-
-<p>
-<img src="images/start/tb_layout.png"/>
-</p>
-
-<p>
-There are two types of the view: <strong>page layout</strong> or <strong>linear layout</strong>.
-</p>
-
-<p>
-<strong>Linear layout</strong> displays a track in a single line. It means that on the current sheet  is read in the right direction, and the time is represented by the <strong>width</strong> of current display. <strong>Page layout</strong> displays a track as a page of a sheet - when the notes exceed width of the sheet display, they are displayed in the next line. So sheet is read in the direction from top to bottom, and time is represented by the <strong>heigth</strong> of the current  [...]
-</p>
-
-<p>
-By enabling <strong>Multitrack</strong> view, in the same line of a layout will be displayed all the instruments. So if you use Linear layout and enable Multitrack view all the instruments will be one beneath each other, and played in the right direction. <em>Using Multitrack view with Page layout can sometimes result in a pretty messy layout.</em>
-</p>
-
-<p>
-By enabling <strong>Show score</strong> options the scores will be displayed above the tabs.
-</p>
-
-<p>
-By enabling <strong>Compact</strong> view you can make your tablature view more compact, if you consider it too wide.
-</p>
-
-
-<h2><a name="play_mode" id="play_mode">Play Mode:</a></h2>
-
-<p><img src="images/start/p_mode.png"/></p>
-
-<h3><a name="play_mode_simple" id="play_mode_simple">Simple Mode:</a></h3>
-
-<p>
-Simple mode allows the modified tempo during the playback. You can play and examine the song with half of the speed, 
-1% of the original speed or even with the up-tempo. It is achieved by changing the playback percentage to an arbitrary 
-value (50% is half of the speed; 200% doubles the tempo).
-</p>
-
-<h3><a name="play_mode_trainer" id="play_mode_trainer">Training Mode:</a></h3>
-
-<p>
-Training mode gives you the opportunity to practice with a gradual tempo incrementation. You can choose to start slowly, 
-in only half of a tempo, but in every cycle of the tune to increase the tempo by 5%, getting to the full speed after 10 playbacks.  
-You choose a <em>beginning tempo</em>, <em>ending tempo</em> and an <em>increment</em> (in percentage) that increases the tempo 
-after each cycle.
-</p>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Playing a song</h1>
+						
+						<h2><a name="opening_an_existing_song" id="opening_an_existing_song">Opening an existing song:</a></h2>
+						
+						<p>
+						 TuxGuitar currently supports several file formats. Besides its internal <em><strong>.tg</strong></em> format (which is recommended), 
+						 it can open and play all Guitar Pro formats (<strong><em>.gtp</em></strong>, <strong><em>.gp3</em></strong>, <strong><em>.gp4</em></strong>, <strong><em>.gp5</em></strong>) 
+						 and also a PowerTab format (<strong><em>.ptb</em></strong>).
+						</p>
+						
+						<p>
+						You can open a file through File/Open dialog in TuxGuitar, but you can also assign a file type association in your operating system.
+						</p>
+						
+						<p>
+						 Another way to open a file is directly from an online resource, by using the <strong>File→Open_URL</strong> dialog. If you enter the correct URL of an online file TuxGuitar is able to open, you can view and play the file in the same manner as it is open from one of your folders. Of course, you cannot save the file back on the same URL, you can save it only as a local file.
+						</p>
+						
+						
+						<h2><a name="playback" id="playback">Playback:</a></h2>
+						
+						<p>
+						<img src="images/start/tb_transport.png"/>
+						</p>
+						
+						<p>
+						Using playback controls you can play, stop and pause the playback, but also you can navigate through the song (next/previous measure, beginning/end of a song). During the playback currently played note will be coloured in red, so it is easier to see how the current note is played.
+						</p>
+						
+						<p>
+						You can also navigate through the song using the “transporter” in the bottom-right of the application window, which is the graphical represantation of a song’s tracks. It isn’t automatically scrolled during the playback, but using the scrollbar on the bottom of the screen you can view the whole song. You can access the wanted instrument and measure by clicking on the proper rectangle in the “transporter” widget.
+						</p>
+						
+						<p>
+						The song can be navigated also with a “Show transport” option in <em>Layout</em> menu by which you can navigate through internal representation of a song, quickly getting on any position.
+						</p>
+						
+						<p>
+						The current instrument can be changed by clicking on the instrument name in the bottom-left side of the application window. Display will be changed accordingly to view the wanted instrument’s notes.
+						</p>
+						
+						
+						<h2><a name="views" id="views">Views:</a></h2>
+						
+						<p>
+						 During the playback you can change the current view.
+						</p>
+						
+						<p>
+						<img src="images/start/tb_layout.png"/>
+						</p>
+						
+						<p>
+						There are two types of the view: <strong>page layout</strong> or <strong>linear layout</strong>.
+						</p>
+						
+						<p>
+						<strong>Linear layout</strong> displays a track in a single line. It means that on the current sheet  is read in the right direction, and the time is represented by the <strong>width</strong> of current display. <strong>Page layout</strong> displays a track as a page of a sheet - when the notes exceed width of the sheet display, they are displayed in the next line. So sheet is read in the direction from top to bottom, and time is represented by the <strong>heigth</strong> of the cu [...]
+						</p>
+						
+						<p>
+						By enabling <strong>Multitrack</strong> view, in the same line of a layout will be displayed all the instruments. So if you use Linear layout and enable Multitrack view all the instruments will be one beneath each other, and played in the right direction. <em>Using Multitrack view with Page layout can sometimes result in a pretty messy layout.</em>
+						</p>
+						
+						<p>
+						By enabling <strong>Show score</strong> options the scores will be displayed above the tabs.
+						</p>
+						
+						<p>
+						By enabling <strong>Compact</strong> view you can make your tablature view more compact, if you consider it too wide.
+						</p>
+						
+						
+						<h2><a name="play_mode" id="play_mode">Play Mode:</a></h2>
+						
+						<p><img src="images/start/p_mode.png"/></p>
+						
+						<h3><a name="play_mode_simple" id="play_mode_simple">Simple Mode:</a></h3>
+						
+						<p>
+						Simple mode allows the modified tempo during the playback. You can play and examine the song with half of the speed, 
+						1% of the original speed or even with the up-tempo. It is achieved by changing the playback percentage to an arbitrary 
+						value (50% is half of the speed; 200% doubles the tempo).
+						</p>
+						
+						<h3><a name="play_mode_trainer" id="play_mode_trainer">Training Mode:</a></h3>
+						
+						<p>
+						Training mode gives you the opportunity to practice with a gradual tempo incrementation. You can choose to start slowly, 
+						in only half of a tempo, but in every cycle of the tune to increase the tempo by 5%, getting to the full speed after 10 playbacks.  
+						You choose a <em>beginning tempo</em>, <em>ending tempo</em> and an <em>increment</em> (in percentage) that increases the tempo 
+						after each cycle.
+						</p>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/start_toolbars.html b/TuxGuitar/share/help/start_toolbars.html
index bb177a4..734ab14 100644
--- a/TuxGuitar/share/help/start_toolbars.html
+++ b/TuxGuitar/share/help/start_toolbars.html
@@ -2,339 +2,403 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>Understanding the toolbars</h1>
-
-<p>
-By default, you will notice quite a few toolbars lining the top of the screen, giving you one-click access to some of the most used options in TuxGuitar. While they can be a bit intimidating as a whole, they are actually quite simple when you break them down, and can save you a lot of time with some of the more common tasks associated with tablature editing. So let’s take a quick look at each of the toolbars. Pre-assigned keyboard shortcuts will be noted in parenthesis, but keep in [...]
-</p>
-
-<p>
-*A side note on the toolbars–not only can you select which toolbars are visible by going to Settings > Configure TuxGuitar > Tool Bars, you can also change the order of them to better fit your own needs by clicking and dragging on the “handle” on the left side of each individual toolbar. 
-</p>
-
-<p>
-One last thing before we begin: prior knowledge of music theory is assumed on this page. There are a couple of links in the “Note Duration” section which can help you if you don’t know much theory yet, but to cover the actual “musical meaning” of all of these options would require an entire manual unto itself. This page will only explain the TuxGuitar-related functionality of the toolbars in an effort to avoid any long-winded music theory discussions.
-</p>
-
-
-<h2><a name="file_management" id="file_management">File Management</a></h2>
-
-<p>
-<img src="images/start/tb_file_menu.png"/>
-</p>
-
-<p>
-You have seen and used this menu a million times, so we will not spend too much time on it. Basically, the file menu toolbar gives you the following options:
-</p>
-<ul>
-	<li class="level2"><div class="li"> Create New File (Ctrl + N)</div>
-</li>
-	<li class="level2"><div class="li"> Open File (Ctrl + O)</div>
-</li>
-	<li class="level2"><div class="li"> Save File (Ctrl + S)</div>
-</li>
-	<li class="level2"><div class="li"> Save File As... (F12)</div>
-</li>
-	<li class="level2"><div class="li"> Print (Ctrl + P)</div>
-</li>
-	<li class="level2"><div class="li"> Print Preview</div>
-</li>
-</ul>
-
-<p>
-Nothing too complex here, so let’s move right along.
-</p>
-
-<p>
-(These options and more can be accessed via the “File” pulldown menu at the top of the screen.)
-</p>
-
-<h2><a name="undo_redo" id="undo_redo">Undo/Redo</a></h2>
-
-<p><img src="images/start/tb_edit_menu.png"/>
-</p>
-
-<p>
-Another very common set of options that pretty much explain themselves. The icon on the left will undo your last action (Ctrl + Z), and the icon on the right will redo what you have undone (Ctrl + Y).
-</p>
-
-<p>
-(These options and more can be accessed via the “Edit” pulldown menu at the top of the screen.)
-</p>
-
-<h2><a name="edit_mode_applies_only_to_score_editing" id="edit_mode_applies_only_to_score_editing">Edit Mode (Applies only to Score Editing)</a></h2>
-
-<p><img src="images/start/tb_edit_mode.png"/>
-</p>
-
-<p>
-Now we’re getting a little more interesting. This menu lays down some options for those who prefer to edit via the score staff instead of using tablature. Keep in mind that these settings only affect the score staff (the upper set of lines with standard musical notation on them). If you only edit via the tablature staff, you can pretty ignore these settings, because they will not make any difference in your work flow.
-</p>
-
-<p>
-(If your score staff is not visible, scroll down on this page and see the “Layout” menu.)
-</p>
-
-
-<h3><a name="selection_mode" id="selection_mode">Selection Mode</a></h3>
-
-<p>
-Clicking on the first icon with the wrench on it will put you in Selection Mode. With this mode selected, you can click your mouse anywhere in the score staff, and it will simply move your playback cursor to that location, without making any changes to the score itself. Good for quickly moving around in your score without worrying about accidently altering notes.
-</p>
-
-
-<h3><a name="score_edition_mode" id="score_edition_mode">Score Edition Mode</a></h3>
-
-<p>
-Clicking on the middle icon with the pencil on it will put you into Score Edition Mode. With this mode selected, you can enter notes into the score staff simply by clicking where you want the note to go. You can insert notes into lines or spaces, and they will take on the duration you currently have selected in the note duration toolbar (detailed below). One note: this option alone will only insert natural-pitched notes (i.e. no flats or sharps). If you want to insert sharps/flats or cha [...]
-</p>
-
-<h3><a name="sharp_flat_mode" id="sharp_flat_mode">Sharp/Flat Mode</a></h3>
-
-<p>
-Clicking on the icon with the sharp/flat symbol on it will take you into Sharp/Flat Mode. As stated above, Sharp/Flat Mode is simply a sub-option of Score Edition Mode. You have to use Sharp/Flat Mode if you want to enter sharp or flat notes or change pre-existing notes to sharp or flat.
-</p>
-
-<p>
-(These options and more can be accessed via the “Edit” pulldown menu at the top of the screen.)
-</p>
-
-<h2><a name="song_properties" id="song_properties">Song Properties</a></h2>
-
-<p>
-<img src="images/start/tb_properties.png"/>
-</p>
-
-<p>
-While the Properties toolbar only really has one icon, it is of particular importance if you plan on printing or exporting your tabs at any point. Clicking on this icon will bring up your song properties tab, wherein you can set the following options: 
-</p>
-<ul>
-<li class="level2"><div class="li"> Name (of song)</div>
-</li>
-<li class="level2"><div class="li"> Artist (Performer)</div>
-</li>
-<li class="level2"><div class="li"> Author (Copyright owner)</div>
-</li>
-<li class="level2"><div class="li"> Album</div>
-</li>
-</ul>
-
-<p>
- The reason these settings are of such importance is that whatever you type in the Name and Author boxes will show up on the first page of your tabs when you print or export them, and if you leave them blank, you will simply get a big, fat “Untitled” by “Anonymous” instead. So make sure you set them if you plan viewing these tabs outside of TuxGuitar! The difference can be seen below.
-</p>
-
-<p>
-<img src="images/start/tb_props_diff.png"/>
-</p>
-
-<p>
-(These options and more can be accessed via the “Composition” pulldown menu at the top of the screen.)
-</p>
-
-<h2><a name="add_remove_track" id="add_remove_track">Add/Remove Track</a></h2>
-
-<p>
-<img src="images/start/tb_add_track.png"/>
-</p>
-
-<p>
-There comes a point in almost any song when one guitar is not enough. When you are ready to start entering tabs for another instrument, simply click the icon with the “+” sign on it to add a new track.
-</p>
-
-<p>
-If you decide you don’t need a track, click on the icon with the “-” sign to remove it. The remove track button will remove the track that is currently selected (currently selected track will be highlighted gray in the track list at the bottom of the screen).
-</p>
-
-<p>
-(These options and more (including a handy “Clone Track” option) can be accessed via the “Track” pulldown menu at the top of the screen.)
-</p>
-
-
-<h2><a name="note_duration" id="note_duration">Note Duration</a></h2>
-
-<p>
-<img src="images/start/tb_duration.png"/>
-</p>
-
-<p>
-This is another fairly straight-forward toolbar. The first seven icons simply change the note(s) at the current cursor position to whatever you select, ranging from whole-note to sixty-forth-note. This comes in handy if you need to make a change that is more than one note increment (i.e. quarter-note to sixteenth-note). You can alternately use the +/- keys on a standard numeric keypad to move one increment at a time.
-</p>
-
-<p>
-*A side note on the +/- keys: as of version .9, most laptop keyboards do not support the use of the =/+ key to decrease note duration. The developers are aware of this bug, and are working it out. The “-” key on laptop keyboards should work, just not the =/+ key.
-</p>
-
-<p>
-The last three icons will change a note’s value to dotted, double-dotted, and a wide variety of “division type” values.
-</p>
-
-<p>
-If you do not understand the difference between the various note durations, you may want to research it a bit before you begin editing tabs, as you may find yourself quickly getting lost. Any basic music theory guide should cover these topics. A good starting place (as always) is the wikipedia’s pages on music theory and music notation: 
-</p>
-<ul>
-<li class="level1"><div class="li"> http://en.wikipedia.org/wiki/Music_theory</div>
-</li>
-<li class="level1"><div class="li"> http://en.wikipedia.org/wiki/Modern_musical_symbols</div>
-</li>
-</ul>
-
-<p>
- (These options and more can be accessed via the “Note” pulldown menu at the top of the screen.)
-</p>
-
-
-<h2><a name="note" id="note">Note</a></h2>
-
-<p>
-<img src="images/start/tb_note.png"/>
-</p>
-
-<p>
-This menu provides you with two more options concerning note editing.
-</p>
-
-<p>
-Clicking on the first icon will “tie” the currently selected note to the one before it. This feature basically takes the value of two notes and combines them into one. The most common use for this feature is when you have a note that begins in one measure and ends in the next. Tying notes is really just a way of keeping the score clean and organized. If you need more information, you may want to research musical notation via the links above.
-</p>
-
-<p>
-Clicking on the second icon with the “A7” will bring up the chord editor. The chord editor is a handy time-saving tool used to search, build, and insert chord formations into your tablature. While the chord editor does deserve further exploration, it is a topic best left for another page and another day.
-</p>
-
-<p>
-(These options and more can be accessed via the “Note” pulldown menu at the top of the screen.)
-</p>
-
-
-<h2><a name="composition" id="composition">Composition</a></h2>
-
-<p>
-<img src="images/start/tb_composition.png"/>
-</p>
-
-<p>
-The Composition toolbar gives you a few options for setting the structure and meter of your song. Again, for a deeper explanation of what each of these means and how to fully utilize them, refer to the music theory links under the “Note Duration” section.
-</p>
-
-<p>
-Clicking on the first icon with the question mark will allow you to set the tempo of your song. New songs in TuxGuitar default to 100 beats/min, but you can set your own tempo to anything between 30-320 beats/min. TuxGuitar also supports tempo changes throughout the song, and creating them is as easy as placing your playback cursor in the measure at which you want the tempo to change, and clicking on the icon. Any tempo set in the first measure of the song will be the default tempo eithe [...]
-</p>
-
-<p>
-Clicking on the next icon with the 4/4 graphic will bring up the time signature dialog, which is pretty straight-forward. You have a seperate pulldown menu for each half of the time signature, as well as a “To the end” check box. TuxGuitar supports multiple time signature changes throughout the song, and much like tempo changes, are as easy to create as clicking the icon and setting a new time signature in the measure where you wish it to change. Checking the “To the en [...]
-</p>
-
-<p>
-(These options and more can be accessed via the “Composition” pulldown menu at the top of the screen.)
-</p>
-
-<p>
-Next three icons are used for repeating control. Everyone familiar with music notation should be familiar with these - you can open and close repeating section. When closing, you will get a dialog to specify how many repeatings will occur. The last icon is used to mark alternative endings in the repeat. A special dialog will also occur, allowing you to choose in which cycle this ending will be played.
-</p>
-
-<h2><a name="transport" id="transport">Transport</a></h2>
-
-<p>
-<img src="images/start/tb_transport.png"/>
-</p>
-
-<p>
-These are song playback controls. Buttons are for play/pause, stop playing, previous measure, next measure, beginning of the song and end of the track.
-</p>
-
-
-<h2><a name="markers" id="markers">Markers</a></h2>
-
-<p>
-<img src="images/start/tb_markers.png"/>
-</p>
-
-<p>
-It is very useful to add a marker in a song, to mark some part of the song (verse, chorus, solo, etc.)
-</p>
-
-<p>
-Marker controls on the toolbar allow you to create a marker, list the markers and navigate them (previous, next, first, last).
-</p>
-
-
-<h2><a name="layout" id="layout">Layout</a></h2>
-
-<p>
-<img src="images/start/tb_layout.png"/>
-</p>
-
-<p>
-There are several layout types in TuxGuitar. They all change the view of tablature and scores in the main editor window.
-</p>
-
-<p>
-The first button on the left is <strong>Page layout</strong>. It’s alternative is the second button: <strong>Linear layout</strong>. Page layout displays the tablature and scores like on the paper sheets, with the line breaks. On the other side, linear view views the instrument in a single line, expanding to the right.
-</p>
-
-<p>
-The third button enables <strong>Multitrack</strong> view. When enabled, all the tracks will be displayed in the main window. Depending on your previous choice (Page or Linear layout) you will see different view. In personal experience, good combinations are Linear+Multitrack, and Page layout without multitrack (for single instrument view).
-</p>
-
-<p>
-The fourth button is <strong>Show scores</strong> button. It simply views the scores (notation) above your tab line.
-</p>
-
-<p>
-The fifth button is <strong>Compact</strong> view. You would like to enable it when you consider your view too wide.
-</p>
-
-
-<h2><a name="view" id="view">View</a></h2>
-
-<p>
-<img src="images/start/tb_view.png"/>
-</p>
-
-<p>
-These three buttons show you various windows.
-</p>
-
-<p>
-The first button shows you the <strong>fretboard</strong> on the bottom of the main window. Fretboard is usefull to view the exact spots where you should put your fingers in each moment. You can even click on the fretboard to edit your tab. Fretboard view is available for both right- and left-handed guitars.
-</p>
-
-<p>
-Second button shows <strong>Mixer</strong>. Mixer dialog is very important - there you can change the volume of instruments in your tab, mute/solo single instrument, change panning and assign MIDI channel. Read <a class="PageLink" href="editing_song.html#mixer_dialog"> more about Mixer dialog</a>.
-</p>
-
-<p>
-The last button shows you player controller window, where you can control the song playback.
-</p>
-
-
-<h2><a name="effects" id="effects">Effects</a></h2>
-
-<p>
-<img src="images/start/tb_effects.png" class="media" title="" alt="" />
-</p>
-
-<p>
-These effects are applied with editing cursor positioned on existing note in the tab. Selected effect is then applied to note.
-</p>
-
-<p>
-Read more about <a class="PageLink" href="edit_effects.html"> note effects</a>.
-</p>
-
-
-<h2><a name="dynamics" id="dynamics">Dynamics</a></h2>
-
-<p>
-<img src="images/start/tb_dynamics.png"/>
-</p>
-
-<p>
-By selecting different icon than the current, you change the dynamics of the note you are editing. They gradually scale from <em>Piano Pianissimo</em> which is the most silent, to the <em>Forte Fortissimo</em> which is loudest. 
-</p>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Understanding the toolbars</h1>
+						
+						<p>
+						By default, you will notice quite a few toolbars lining the top of the screen, giving you one-click access to some of the most used options in TuxGuitar. While they can be a bit intimidating as a whole, they are actually quite simple when you break them down, and can save you a lot of time with some of the more common tasks associated with tablature editing. So let’s take a quick look at each of the toolbars. Pre-assigned keyboard shortcuts will be noted in parenthesis, but k [...]
+						</p>
+						
+						<p>
+						*A side note on the toolbars–not only can you select which toolbars are visible by going to Settings > Configure TuxGuitar > Tool Bars, you can also change the order of them to better fit your own needs by clicking and dragging on the “handle” on the left side of each individual toolbar. 
+						</p>
+						
+						<p>
+						One last thing before we begin: prior knowledge of music theory is assumed on this page. There are a couple of links in the “Note Duration” section which can help you if you don’t know much theory yet, but to cover the actual “musical meaning” of all of these options would require an entire manual unto itself. This page will only explain the TuxGuitar-related functionality of the toolbars in an effort to avoid any long-winded music theory discussions.
+						</p>
+						
+						
+						<h2><a name="file_management" id="file_management">File Management</a></h2>
+						
+						<p>
+						<img src="images/start/tb_file_menu.png"/>
+						</p>
+						
+						<p>
+						You have seen and used this menu a million times, so we will not spend too much time on it. Basically, the file menu toolbar gives you the following options:
+						</p>
+						<ul>
+							<li class="level2"><div class="li"> Create New File (Ctrl + N)</div>
+						</li>
+							<li class="level2"><div class="li"> Open File (Ctrl + O)</div>
+						</li>
+							<li class="level2"><div class="li"> Save File (Ctrl + S)</div>
+						</li>
+							<li class="level2"><div class="li"> Save File As... (F12)</div>
+						</li>
+							<li class="level2"><div class="li"> Print (Ctrl + P)</div>
+						</li>
+							<li class="level2"><div class="li"> Print Preview</div>
+						</li>
+						</ul>
+						
+						<p>
+						Nothing too complex here, so let’s move right along.
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “File” pulldown menu at the top of the screen.)
+						</p>
+						
+						<h2><a name="undo_redo" id="undo_redo">Undo/Redo</a></h2>
+						
+						<p><img src="images/start/tb_edit_menu.png"/>
+						</p>
+						
+						<p>
+						Another very common set of options that pretty much explain themselves. The icon on the left will undo your last action (Ctrl + Z), and the icon on the right will redo what you have undone (Ctrl + Y).
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Edit” pulldown menu at the top of the screen.)
+						</p>
+						
+						<h2><a name="edit_mode_applies_only_to_score_editing" id="edit_mode_applies_only_to_score_editing">Edit Mode (Applies only to Score Editing)</a></h2>
+						
+						<p><img src="images/start/tb_edit_mode.png"/>
+						</p>
+						
+						<p>
+						Now we’re getting a little more interesting. This menu lays down some options for those who prefer to edit via the score staff instead of using tablature. Keep in mind that these settings only affect the score staff (the upper set of lines with standard musical notation on them). If you only edit via the tablature staff, you can pretty ignore these settings, because they will not make any difference in your work flow.
+						</p>
+						
+						<p>
+						(If your score staff is not visible, scroll down on this page and see the “Layout” menu.)
+						</p>
+						
+						
+						<h3><a name="selection_mode" id="selection_mode">Selection Mode</a></h3>
+						
+						<p>
+						Clicking on the first icon with the wrench on it will put you in Selection Mode. With this mode selected, you can click your mouse anywhere in the score staff, and it will simply move your playback cursor to that location, without making any changes to the score itself. Good for quickly moving around in your score without worrying about accidently altering notes.
+						</p>
+						
+						
+						<h3><a name="score_edition_mode" id="score_edition_mode">Score Edition Mode</a></h3>
+						
+						<p>
+						Clicking on the middle icon with the pencil on it will put you into Score Edition Mode. With this mode selected, you can enter notes into the score staff simply by clicking where you want the note to go. You can insert notes into lines or spaces, and they will take on the duration you currently have selected in the note duration toolbar (detailed below). One note: this option alone will only insert natural-pitched notes (i.e. no flats or sharps). If you want to insert sharps/flats  [...]
+						</p>
+						
+						<h3><a name="sharp_flat_mode" id="sharp_flat_mode">Sharp/Flat Mode</a></h3>
+						
+						<p>
+						Clicking on the icon with the sharp/flat symbol on it will take you into Sharp/Flat Mode. As stated above, Sharp/Flat Mode is simply a sub-option of Score Edition Mode. You have to use Sharp/Flat Mode if you want to enter sharp or flat notes or change pre-existing notes to sharp or flat.
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Edit” pulldown menu at the top of the screen.)
+						</p>
+						
+						<h2><a name="song_properties" id="song_properties">Song Properties</a></h2>
+						
+						<p>
+						<img src="images/start/tb_properties.png"/>
+						</p>
+						
+						<p>
+						While the Properties toolbar only really has one icon, it is of particular importance if you plan on printing or exporting your tabs at any point. Clicking on this icon will bring up your song properties tab, wherein you can set the following options: 
+						</p>
+						<ul>
+						<li class="level2"><div class="li"> Name (of song)</div>
+						</li>
+						<li class="level2"><div class="li"> Artist (Performer)</div>
+						</li>
+						<li class="level2"><div class="li"> Author (Copyright owner)</div>
+						</li>
+						<li class="level2"><div class="li"> Album</div>
+						</li>
+						</ul>
+						
+						<p>
+						 The reason these settings are of such importance is that whatever you type in the Name and Author boxes will show up on the first page of your tabs when you print or export them, and if you leave them blank, you will simply get a big, fat “Untitled” by “Anonymous” instead. So make sure you set them if you plan viewing these tabs outside of TuxGuitar! The difference can be seen below.
+						</p>
+						
+						<p>
+						<img src="images/start/tb_props_diff.png"/>
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Composition” pulldown menu at the top of the screen.)
+						</p>
+						
+						<h2><a name="add_remove_track" id="add_remove_track">Add/Remove Track</a></h2>
+						
+						<p>
+						<img src="images/start/tb_add_track.png"/>
+						</p>
+						
+						<p>
+						There comes a point in almost any song when one guitar is not enough. When you are ready to start entering tabs for another instrument, simply click the icon with the “+” sign on it to add a new track.
+						</p>
+						
+						<p>
+						If you decide you don’t need a track, click on the icon with the “-” sign to remove it. The remove track button will remove the track that is currently selected (currently selected track will be highlighted gray in the track list at the bottom of the screen).
+						</p>
+						
+						<p>
+						(These options and more (including a handy “Clone Track” option) can be accessed via the “Track” pulldown menu at the top of the screen.)
+						</p>
+						
+						
+						<h2><a name="note_duration" id="note_duration">Note Duration</a></h2>
+						
+						<p>
+						<img src="images/start/tb_duration.png"/>
+						</p>
+						
+						<p>
+						This is another fairly straight-forward toolbar. The first seven icons simply change the note(s) at the current cursor position to whatever you select, ranging from whole-note to sixty-forth-note. This comes in handy if you need to make a change that is more than one note increment (i.e. quarter-note to sixteenth-note). You can alternately use the +/- keys on a standard numeric keypad to move one increment at a time.
+						</p>
+						
+						<p>
+						*A side note on the +/- keys: as of version .9, most laptop keyboards do not support the use of the =/+ key to decrease note duration. The developers are aware of this bug, and are working it out. The “-” key on laptop keyboards should work, just not the =/+ key.
+						</p>
+						
+						<p>
+						The last three icons will change a note’s value to dotted, double-dotted, and a wide variety of “division type” values.
+						</p>
+						
+						<p>
+						If you do not understand the difference between the various note durations, you may want to research it a bit before you begin editing tabs, as you may find yourself quickly getting lost. Any basic music theory guide should cover these topics. A good starting place (as always) is the wikipedia’s pages on music theory and music notation: 
+						</p>
+						<ul>
+						<li class="level1"><div class="li"> http://en.wikipedia.org/wiki/Music_theory</div>
+						</li>
+						<li class="level1"><div class="li"> http://en.wikipedia.org/wiki/Modern_musical_symbols</div>
+						</li>
+						</ul>
+						
+						<p>
+						 (These options and more can be accessed via the “Note” pulldown menu at the top of the screen.)
+						</p>
+						
+						
+						<h2><a name="note" id="note">Note</a></h2>
+						
+						<p>
+						<img src="images/start/tb_note.png"/>
+						</p>
+						
+						<p>
+						This menu provides you with two more options concerning note editing.
+						</p>
+						
+						<p>
+						Clicking on the first icon will “tie” the currently selected note to the one before it. This feature basically takes the value of two notes and combines them into one. The most common use for this feature is when you have a note that begins in one measure and ends in the next. Tying notes is really just a way of keeping the score clean and organized. If you need more information, you may want to research musical notation via the links above.
+						</p>
+						
+						<p>
+						Clicking on the second icon with the “A7” will bring up the chord editor. The chord editor is a handy time-saving tool used to search, build, and insert chord formations into your tablature. While the chord editor does deserve further exploration, it is a topic best left for another page and another day.
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Note” pulldown menu at the top of the screen.)
+						</p>
+						
+						
+						<h2><a name="composition" id="composition">Composition</a></h2>
+						
+						<p>
+						<img src="images/start/tb_composition.png"/>
+						</p>
+						
+						<p>
+						The Composition toolbar gives you a few options for setting the structure and meter of your song. Again, for a deeper explanation of what each of these means and how to fully utilize them, refer to the music theory links under the “Note Duration” section.
+						</p>
+						
+						<p>
+						Clicking on the first icon with the question mark will allow you to set the tempo of your song. New songs in TuxGuitar default to 100 beats/min, but you can set your own tempo to anything between 30-320 beats/min. TuxGuitar also supports tempo changes throughout the song, and creating them is as easy as placing your playback cursor in the measure at which you want the tempo to change, and clicking on the icon. Any tempo set in the first measure of the song will be the default tempo [...]
+						</p>
+						
+						<p>
+						Clicking on the next icon with the 4/4 graphic will bring up the time signature dialog, which is pretty straight-forward. You have a seperate pulldown menu for each half of the time signature, as well as a “To the end” check box. TuxGuitar supports multiple time signature changes throughout the song, and much like tempo changes, are as easy to create as clicking the icon and setting a new time signature in the measure where you wish it to change. Checking the “To  [...]
+						</p>
+						
+						<p>
+						(These options and more can be accessed via the “Composition” pulldown menu at the top of the screen.)
+						</p>
+						
+						<p>
+						Next three icons are used for repeating control. Everyone familiar with music notation should be familiar with these - you can open and close repeating section. When closing, you will get a dialog to specify how many repeatings will occur. The last icon is used to mark alternative endings in the repeat. A special dialog will also occur, allowing you to choose in which cycle this ending will be played.
+						</p>
+						
+						<h2><a name="transport" id="transport">Transport</a></h2>
+						
+						<p>
+						<img src="images/start/tb_transport.png"/>
+						</p>
+						
+						<p>
+						These are song playback controls. Buttons are for play/pause, stop playing, previous measure, next measure, beginning of the song and end of the track.
+						</p>
+						
+						
+						<h2><a name="markers" id="markers">Markers</a></h2>
+						
+						<p>
+						<img src="images/start/tb_markers.png"/>
+						</p>
+						
+						<p>
+						It is very useful to add a marker in a song, to mark some part of the song (verse, chorus, solo, etc.)
+						</p>
+						
+						<p>
+						Marker controls on the toolbar allow you to create a marker, list the markers and navigate them (previous, next, first, last).
+						</p>
+						
+						
+						<h2><a name="layout" id="layout">Layout</a></h2>
+						
+						<p>
+						<img src="images/start/tb_layout.png"/>
+						</p>
+						
+						<p>
+						There are several layout types in TuxGuitar. They all change the view of tablature and scores in the main editor window.
+						</p>
+						
+						<p>
+						The first button on the left is <strong>Page layout</strong>. It’s alternative is the second button: <strong>Linear layout</strong>. Page layout displays the tablature and scores like on the paper sheets, with the line breaks. On the other side, linear view views the instrument in a single line, expanding to the right.
+						</p>
+						
+						<p>
+						The third button enables <strong>Multitrack</strong> view. When enabled, all the tracks will be displayed in the main window. Depending on your previous choice (Page or Linear layout) you will see different view. In personal experience, good combinations are Linear+Multitrack, and Page layout without multitrack (for single instrument view).
+						</p>
+						
+						<p>
+						The fourth button is <strong>Show scores</strong> button. It simply views the scores (notation) above your tab line.
+						</p>
+						
+						<p>
+						The fifth button is <strong>Compact</strong> view. You would like to enable it when you consider your view too wide.
+						</p>
+						
+						
+						<h2><a name="view" id="view">View</a></h2>
+						
+						<p>
+						<img src="images/start/tb_view.png"/>
+						</p>
+						
+						<p>
+						These three buttons show you various windows.
+						</p>
+						
+						<p>
+						The first button shows you the <strong>fretboard</strong> on the bottom of the main window. Fretboard is usefull to view the exact spots where you should put your fingers in each moment. You can even click on the fretboard to edit your tab. Fretboard view is available for both right- and left-handed guitars.
+						</p>
+						
+						<p>
+						Second button shows <strong>Mixer</strong>. Mixer dialog is very important - there you can change the volume of instruments in your tab, mute/solo single instrument, change panning and assign MIDI channel. Read <a class="PageLink" href="editing_song.html#mixer_dialog"> more about Mixer dialog</a>.
+						</p>
+						
+						<p>
+						The last button shows you player controller window, where you can control the song playback.
+						</p>
+						
+						
+						<h2><a name="effects" id="effects">Effects</a></h2>
+						
+						<p>
+						<img src="images/start/tb_effects.png" class="media" title="" alt="" />
+						</p>
+						
+						<p>
+						These effects are applied with editing cursor positioned on existing note in the tab. Selected effect is then applied to note.
+						</p>
+						
+						<p>
+						Read more about <a class="PageLink" href="edit_effects.html"> note effects</a>.
+						</p>
+						
+						
+						<h2><a name="dynamics" id="dynamics">Dynamics</a></h2>
+						
+						<p>
+						<img src="images/start/tb_dynamics.png"/>
+						</p>
+						
+						<p>
+						By selecting different icon than the current, you change the dynamics of the note you are editing. They gradually scale from <em>Piano Pianissimo</em> which is the most silent, to the <em>Forte Fortissimo</em> which is loudest. 
+						</p>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/tools_converter.html b/TuxGuitar/share/help/tools_converter.html
index 08befc4..7953092 100644
--- a/TuxGuitar/share/help/tools_converter.html
+++ b/TuxGuitar/share/help/tools_converter.html
@@ -2,69 +2,133 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>TuxGuitar-converter</h1>
-
-
-<div class="level1">
-<pre class="code">
-</pre>
-
-<h2><a name="what_is_tuxguitar-converter" id="what_is_tuxguitar-converter">What is tuxguitar-converter</a></h2>
-<p>
- <strong>tuxguitar-converter</strong> is batch file format converter. It allows you to convert number of files from various file formats (*.gpX, *.ptb, *.tef, *.tg) into destination file format, keeping the file names but changing the format (and extension of a file).
-</p>
-
-<p>
-Converter simply tries to load every file and save/export it into destination file.
-</p>
-
-<p>
-So supported input formats are files TuxGuitar can load and import, and destination format is every format TuxGuitar can save into or export. You can check for <a class="PageLink" href="file_formats.html">supported file formats</a>. For some exporter plugins that have various exporting options, default options are used.
-</p>
-
-
-<h2><a name="how_to_install_tuxguitar-converter" id="how_to_install_tuxguitar-converter">How to install tuxguitar-converter</a></h2>
-
-<p>
- <strong>tuxguitar-converter</strong> plugin is included on all bytecode TuxGuitar distributions as default. If you downloaded a compiled TuxGuitar package, you shouldn’t bother to install it manually.<br/>
- Of course you may want rebuild and install the plugin.
-</p>
-
-<p>
-To install the plugin, you must copy <strong>tuxguitar-converter.jar</strong> into <strong>$TUXGUITAR_HOME\share\plugins</strong>
-</p>
-
-
-<h2><a name="using_batch_file_format_converter" id="using_batch_file_format_converter">Using batch file format converter</a></h2>
-
-<p>
- <img src="images/tools/converter.png"/>
-</p>
-
-<p>
-You access the converter dialog through Tools→“File format batch converter”.
-</p>
-
-<p>
-On the dialog you must specify <strong>input folder</strong>. Input folder <em class="u">and its subfolders</em> contain files that will be converted.
-</p>
-
-<p>
-<strong>Output folder</strong> is folder in which new files will be stored. If destination folder you specified doesn’t exist, it will be created.
-</p>
-
-<p>
-<strong>Output file format</strong> is used to specify file format of new created files. It will display all supported formats (which might depend on your installed plugins).
-</p>
-
-<p>
-After you confirm the converting new window will appear showing you the progress. You can cancel the process anytime. 
-</p>
-
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>TuxGuitar-converter</h1>
+						
+						
+						<div class="level1">
+						<pre class="code">
+						</pre>
+						
+						<h2><a name="what_is_tuxguitar-converter" id="what_is_tuxguitar-converter">What is tuxguitar-converter</a></h2>
+						<p>
+						 <strong>tuxguitar-converter</strong> is batch file format converter. It allows you to convert number of files from various file formats (*.gpX, *.ptb, *.tef, *.tg) into destination file format, keeping the file names but changing the format (and extension of a file).
+						</p>
+						
+						<p>
+						Converter simply tries to load every file and save/export it into destination file.
+						</p>
+						
+						<p>
+						So supported input formats are files TuxGuitar can load and import, and destination format is every format TuxGuitar can save into or export. You can check for <a class="PageLink" href="file_formats.html">supported file formats</a>. For some exporter plugins that have various exporting options, default options are used.
+						</p>
+						
+						
+						<h2><a name="how_to_install_tuxguitar-converter" id="how_to_install_tuxguitar-converter">How to install tuxguitar-converter</a></h2>
+						
+						<p>
+						 <strong>tuxguitar-converter</strong> plugin is included on all bytecode TuxGuitar distributions as default. If you downloaded a compiled TuxGuitar package, you shouldn’t bother to install it manually.<br/>
+						 Of course you may want rebuild and install the plugin.
+						</p>
+						
+						<p>
+						To install the plugin, you must copy <strong>tuxguitar-converter.jar</strong> into <strong>$TUXGUITAR_HOME\share\plugins</strong>
+						</p>
+						
+						
+						<h2><a name="using_batch_file_format_converter" id="using_batch_file_format_converter">Using batch file format converter</a></h2>
+						
+						<p>
+						 <img src="images/tools/converter.png"/>
+						</p>
+						
+						<p>
+						You access the converter dialog through Tools→“File format batch converter”.
+						</p>
+						
+						<p>
+						On the dialog you must specify <strong>input folder</strong>. Input folder <em class="u">and its subfolders</em> contain files that will be converted.
+						</p>
+						
+						<p>
+						<strong>Output folder</strong> is folder in which new files will be stored. If destination folder you specified doesn’t exist, it will be created.
+						</p>
+						
+						<p>
+						<strong>Output file format</strong> is used to specify file format of new created files. It will display all supported formats (which might depend on your installed plugins).
+						</p>
+						
+						<p>
+						After you confirm the converting new window will appear showing you the progress. You can cancel the process anytime. 
+						</p>
+						
+						</div>
+						<br/><br/>
+
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/tools_keybinding.html b/TuxGuitar/share/help/tools_keybinding.html
index 328c86a..321fc21 100644
--- a/TuxGuitar/share/help/tools_keybinding.html
+++ b/TuxGuitar/share/help/tools_keybinding.html
@@ -2,35 +2,98 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-
-<h1>Key bindings editor</h1>
-
-<div class="level1">
-
-<p>
- Using key bindings editor you can change a shortcut for almost every action in TuxGuitar. It allows you to view and change default keybindings, as well to add new ones.
-</p>
-
-<p>
-Key bindings editor dialog is accessed through Tools→Shortcuts menu.
-</p>
-
-<p>
-<img src="images/tools/keybinding_editor.png"/>
-</p>
-
-<p>
- The editor is a table you can modify. In the left column is the name and type of the action, and in the right one is the shortcut key combination. If you double-click on the combination cell, you will get the chance to insert or change the shortcut, or delete it with <strong>Clear</strong> button.
-</p>
-
-<p>
-By clicking the<strong> Default</strong> button all of your modifications are reverted to the default keybindings for TuxGuitar. You can see the <a class="PageLink" href="tools_shortcuts.html"> list of default keybindings</a>.
-</p>
-
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Key bindings editor</h1>
+						
+						<div class="level1">
+						
+						<p>
+						 Using key bindings editor you can change a shortcut for almost every action in TuxGuitar. It allows you to view and change default keybindings, as well to add new ones.
+						</p>
+						
+						<p>
+						Key bindings editor dialog is accessed through Tools→Shortcuts menu.
+						</p>
+						
+						<p>
+						<img src="images/tools/keybinding_editor.png"/>
+						</p>
+						
+						<p>
+						 The editor is a table you can modify. In the left column is the name and type of the action, and in the right one is the shortcut key combination. If you double-click on the combination cell, you will get the chance to insert or change the shortcut, or delete it with <strong>Clear</strong> button.
+						</p>
+						
+						<p>
+						By clicking the<strong> Default</strong> button all of your modifications are reverted to the default keybindings for TuxGuitar. You can see the <a class="PageLink" href="tools_shortcuts.html"> list of default keybindings</a>.
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/tools_plugins.html b/TuxGuitar/share/help/tools_plugins.html
index a11ffce..faaf460 100644
--- a/TuxGuitar/share/help/tools_plugins.html
+++ b/TuxGuitar/share/help/tools_plugins.html
@@ -2,48 +2,113 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-<h1><a name="plugins_dialog" id="plugins_dialog">Plugins dialog</a></h1>
-<div class="level1">
-
-<p>
- TuxGuitar supports plugins. Some of the plugins are delivered with the distribution, but there are plugins you can download and enable manually.
-</p>
-
-<p>
-There are several types of the plugins: 
-</p>
-<ol>
-<li class="level1"><div class="li"> File Format plugins (PowerTab, Lilypond, MIDI, MusicXML) are included as default</div>
-</li>
-<li class="level1"><div class="li"> Sound plugins (ALSA, OSS, CoreAudio) are recommended depending of your OS.</div>
-</li>
-<li class="level1"><div class="li"> other plugins (like FTP browser, and any other)</div>
-</li>
-</ol>
-
-<p>
-The plugins dialog is accessed through the Tools→Plugins menu. In the dialog is the list of all plugins, with the checkbox enabled if the plugin is working at the moment. Some of the plugins can be configured with the <strong>Configure</strong> button. All of the plugins have their author info.
-</p>
-
-<p>
-<img src="images/tools/plugins_dialog.png"/>
-</p>
-
-<p>
-Plugins are single *.jar files. You can install any TuxGuitar plugin by simply copying it to the <em>$TUXGUITAR_DIR</em>\share\plugins\ folder and enabling it in the dialog.
-</p>
-
-<p>
-Maybe the easiest way to contribute to TuxGuitar functionality is to write a plugin, because it doesn’t need synchronisation with the other TuxGuitar developers.
-</p>
-
-<p>
-You can check the list of available plugins on TuxGuitar download page (<i>other</i>). 
-</p>
-
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+											
+						<h1><a name="plugins_dialog" id="plugins_dialog">Plugins dialog</a></h1>
+						<div class="level1">
+						
+						<p>
+						 TuxGuitar supports plugins. Some of the plugins are delivered with the distribution, but there are plugins you can download and enable manually.
+						</p>
+						
+						<p>
+						There are several types of the plugins: 
+						</p>
+						<ol>
+						<li class="level1"><div class="li"> File Format plugins (PowerTab, Lilypond, MIDI, MusicXML) are included as default</div>
+						</li>
+						<li class="level1"><div class="li"> Sound plugins (ALSA, OSS, CoreAudio) are recommended depending of your OS.</div>
+						</li>
+						<li class="level1"><div class="li"> other plugins (like FTP browser, and any other)</div>
+						</li>
+						</ol>
+						
+						<p>
+						The plugins dialog is accessed through the Tools→Plugins menu. In the dialog is the list of all plugins, with the checkbox enabled if the plugin is working at the moment. Some of the plugins can be configured with the <strong>Configure</strong> button. All of the plugins have their author info.
+						</p>
+						
+						<p>
+						<img src="images/tools/plugins_dialog.png"/>
+						</p>
+						
+						<p>
+						Plugins are single *.jar files. You can install any TuxGuitar plugin by simply copying it to the <em>$TUXGUITAR_DIR</em>\share\plugins\ folder and enabling it in the dialog.
+						</p>
+						
+						<p>
+						Maybe the easiest way to contribute to TuxGuitar functionality is to write a plugin, because it doesn’t need synchronisation with the other TuxGuitar developers.
+						</p>
+						
+						<p>
+						You can check the list of available plugins on TuxGuitar download page (<i>other</i>). 
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/tools_shortcuts.html b/TuxGuitar/share/help/tools_shortcuts.html
index 30a364c..3e58b97 100644
--- a/TuxGuitar/share/help/tools_shortcuts.html
+++ b/TuxGuitar/share/help/tools_shortcuts.html
@@ -2,450 +2,514 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>Default key-bindings (shortcuts)</h1>
-
-<ul class="toc">
-<li class="level1"><div class="li"><span class="li"><a href="#default_key-bindings_shortcuts" class="toc">Default key-bindings (shortcuts)</a></span></div>
-<ul>
-<li class="level2"><div class="li"><span class="li"><a href="#edit" class="toc">Edit Actions</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#track" class="toc">Track Actions</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#measure" class="toc">Measure Actions</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#beat" class="toc">Beat Actions</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#note_effects" class="toc">Note Effects</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#marker" class="toc">Marker Actions</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#playback_controls" class="toc">Playback Controls</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#dialogs" class="toc">Dialogs</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#application" class="toc">Application</a></span></div></li></ul>
-</li></ul>
-
-
-
-<div class="level1">
-
-<p>
- This is the list of the default key bindings (keyboard shortcuts) in TuxGuitar 1.0.
-</p>
-
-<p>
-Of course, these key-bindings list can be modified in <a class="PageLink" href="tools_keybinding.html"> Tools->Shortcuts dialog</a>.
-</p>
-
-</div>
-
-<h2><a name="edit" id="edit">Edit Actions</a></h2>
-<div class="level2">
-<table class="inline">
-	<tr class="header">
-		<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Undo action </td><td class="right"> Ctrl+<strong>Z</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Redo action </td><td class="right"> Ctrl+<strong>Y</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Song properties</td><td class="right"> <strong>F5</strong></td>
-	</tr>
-</table>
-</div>
-
-<h2><a name="track" id="tab_editor">Track Actions</a></h2>
-<div class="level2">
-<table class="inline">
-	<tr class="header">
-		<td class="left" ><u><strong>Action</strong></u> </td><td class="right"><u><strong>key</strong></u> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > View next track </td><td class="right"> Ctrl+<strong>Down</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > View previous track </td><td class="right"> Ctrl+<strong>Up</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > View last track </td><td class="right"> Ctrl+Shift+<strong>Down</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > View first track</td><td class="right"> Ctrl+Shift+<strong>Up</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Add track </td><td class="right"> Ctrl+Shift+<strong>Ins</strong></td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Delete track</td><td class="right"> Ctrl+Shift+<strong>Del</strong></td>
-	</tr>
-</table>
-
-</div>
-
-
-<h2><a name="measure" id="tab_editor">Measure Actions</a></h2>
-<div class="level2">
-<table class="inline">
-	<tr class="header">
-		<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Go to next measure</td><td class="right"> Ctrl+<strong>Right</strong></td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Go to previous measure</td><td class="right"> Ctrl+<strong>Left</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Copy measure</td><td class="right"> Ctrl+<strong>C</strong></td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Paste measure </td><td class="right"> Ctrl+<strong>V</strong></td>
-	</tr>
-</table>
-
-</div>
-
-
-
-<h2><a name="beat" id="tab_editor">Beat Actions</a></h2>
-<div class="level2">
-<table class="inline">
-	<tr class="header">
-		<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Clean beat</td><td class="right"> Ctrl+<strong>Del</strong></td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Insert beat </td><td class="right"> number 0-29 </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Delete beat/note </td><td class="right"> <strong>Del</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Tied note </td><td class="right"> <strong>L</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Dotted note </td><td class="right"> <strong></strong>* </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Triplet note</td><td class="right"> <strong>/</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Insert text </td><td class="right"> <strong>T</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Move note on string above </td><td class="right"> Shift+<strong>Up</strong></td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Move note on string below </td><td class="right"> Shift+<strong>Down</strong></td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Increase note pitch </td><td class="right"> Shift+<strong>Right</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Decrease note pitch </td><td class="right"> Shift+<strong>Left</strong></td>
-	</tr>
-</table>
-
-</div>
-
-
-
-
-<h2><a name="note_effects" id="note_effects">Note Effects</a></h2>
-<div class="level2">
-
-<p>
- Can be applied only when your cursor is positioned on the existing note in a tablature 
-</p>
-<table class="inline">
-	<tr class="header">
-		<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Bend note </td><td class="right"> <strong>B</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Ghost note</td><td class="right"> <strong>O</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Hammer on/Pull off</td><td class="right"> <strong>H</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Slide up/down </td><td class="right"> <strong>S</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Vibrato </td><td class="right"> <strong>V</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Dead note </td><td class="right"> <strong>X</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Palm mute </td><td class="right"> <strong>P</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Fade in </td><td class="right"> <strong>F</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Grace note</td><td class="right"> <strong>G</strong> </td>
-	</tr>
-</table>
-
-</div>
-
-
-
-<h2><a name="marker" id="marker">Marker Actions</a></h2>
-<div class="level2">
-<table class="inline">
-	<tr class="header">
-		<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Add marker</td><td class="right"> Shift+<strong>Ins</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Go to previous marker </td><td class="right"> Alt+<strong>Left</strong></td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Go to next marker </td><td class="right"> Alt+<strong>Right</strong> </td>
-	</tr>
-</table>
-
-</div>
-
-
-<!--
-<h2><a name="tab_editor" id="tab_editor">Tab editor</a></h2>
-<div class="level2">
-<table class="inline">
-	<tr>
-		<td><u><strong>Action</strong></u> </td><td> <u><strong>key</strong></u> </td>
-	</tr>
-	<tr>
-		<td> </td><td> </td>
-	</tr>
-	<tr>
-		<td> Insert note </td><td> number 0-29 </td>
-	</tr>
-	<tr>
-		<td> Delete note </td><td> <strong>Del</strong> </td>
-	</tr>
-	<tr>
-		<td> Clean beat</td><td> Ctrl+<strong>Del</strong></td>
-	</tr>
-	<tr>
-		<td> </td><td> </td>
-	</tr>
-	<tr>
-		<td> Tied note </td><td> <strong>L</strong> </td>
-	</tr>
-	<tr>
-		<td> </td><td> </td>
-	</tr>
-	<tr>
-		<td> Go to next measure</td><td> Ctrl+<strong>Right</strong></td>
-	</tr>
-	<tr>
-		<td> Go to previous measure</td><td> Ctrl+<strong>Left</strong> </td>
-	</tr>
-	<tr>
-		<td> View next track </td><td> Ctrl+<strong>Down</strong> </td>
-	</tr>
-	<tr>
-		<td> View previous track </td><td> Ctrl+<strong>Up</strong> </td>
-	</tr>
-	<tr>
-		<td> View last track </td><td> Ctrl+Shift+<strong>Down</strong> </td>
-	</tr>
-	<tr>
-		<td> View first track</td><td> Ctrl+Shift+<strong>Up</strong> </td>
-	</tr>
-	<tr>
-		<td> </td><td> </td>
-	</tr>
-	<tr>
-		<td> Copy measure</td><td> Ctrl+<strong>C</strong></td>
-	</tr>
-	<tr>
-		<td> Paste measure </td><td> Ctrl+<strong>V</strong></td>
-	</tr>
-	<tr>
-		<td> </td><td> </td>
-	</tr>
-	<tr>
-		<td> Tab properties</td><td> <strong>F5</strong></td>
-	</tr>
-	<tr>
-		<td> </td><td> </td>
-	</tr>
-	<tr>
-		<td> Add track </td><td> Ctrl+Shift+<strong>Ins</strong></td>
-	</tr>
-	<tr>
-		<td> Delete track</td><td> Ctrl+Shift+<strong>Del</strong></td>
-	</tr>
-	<tr>
-		<td> Add marker</td><td> Shift+<strong>Ins</strong> </td>
-	</tr>
-	<tr>
-		<td> Go to previous marker </td><td> Alt+<strong>Left</strong></td>
-	</tr>
-	<tr>
-		<td> Go to next marker </td><td> Alt+<strong>Right</strong> </td>
-	</tr>
-	<tr>
-		<td> </td><td> </td>
-	</tr>
-	<tr>
-		<td> Insert text </td><td> <strong>T</strong> </td>
-	</tr>
-</table>
-
-</div>
--->
-<h2><a name="playback_controls" id="playback_controls">Playback Controls</a></h2>
-<div class="level2">
-<table class="inline">
-	<tr class="header">
-		<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Play / Pause</td><td class="right"> <strong>Space</strong></td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Go to start </td><td class="right"> Ctrl+Shift+<strong>Right</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Go to end </td><td class="right"> Ctrl+Shift+<strong>Left</strong></td>
-	</tr>
-</table>
-
-</div>
-<!--
-<h2><a name="note_effects" id="note_effects">Note effects</a></h2>
-<div class="level2">
-
-<p>
- Can be applied only when your cursor is positioned on the existing note in a tablature 
-</p>
-<table class="inline">
-	<tr>
-		<td><u><strong>Action</strong></u> </td><td> <u><strong>key</strong></u> </td>
-	</tr>
-	<tr>
-		<td> </td><td> </td>
-	</tr>
-	<tr>
-		<td> Bend note </td><td> <strong>B</strong> </td>
-	</tr>
-	<tr>
-		<td> Ghost note</td><td> <strong>O</strong> </td>
-	</tr>
-	<tr>
-		<td> Hammer on/Pull off</td><td> <strong>H</strong> </td>
-	</tr>
-	<tr>
-		<td> Slide up/down </td><td> <strong>S</strong> </td>
-	</tr>
-	<tr>
-		<td> Vibrato </td><td> <strong>V</strong> </td>
-	</tr>
-	<tr>
-		<td> Dead note </td><td> <strong>X</strong> </td>
-	</tr>
-	<tr>
-		<td> Palm mute </td><td> <strong>P</strong> </td>
-	</tr>
-	<tr>
-		<td> Fade in </td><td> <strong>F</strong> </td>
-	</tr>
-	<tr>
-		<td> Grace note</td><td> <strong>G</strong> </td>
-	</tr>
-	<tr>
-		<td> </td><td> </td>
-	</tr>
-	<tr>
-		<td> Move note on string above </td><td> Shift+<strong>Up</strong></td>
-	</tr>
-	<tr>
-		<td> Move note on string below </td><td> Shift+<strong>Down</strong></td>
-	</tr>
-	<tr>
-		<td> Increase note pitch </td><td> Shift+<strong>Right</strong> </td>
-	</tr>
-	<tr>
-		<td> Decrease note pitch </td><td> Shift+<strong>Left</strong></td>
-	</tr>
-	<tr>
-		<td> Dotted note </td><td> <strong></strong>* </td>
-	</tr>
-	<tr>
-		<td> Triplet note</td><td> <strong>/</strong> </td>
-	</tr>
-</table>
-
-</div>
--->
-<h2><a name="dialogs" id="dialogs">Dialogs</a></h2>
-<div class="level2">
-<table class="inline">
-	<tr class="header">
-		<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Custom chord dialog </td><td class="right"> <strong>A</strong></td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Settings</td><td class="right"> <strong>F7</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Mixer </td><td class="right"> Ctrl+<strong>M</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Transport </td><td class="right"> Ctrl+<strong>T</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Collection Browser</td><td class="right"> Ctrl+<strong>B</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Play Mode </td><td class="right"> <strong>F9</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Help</td><td class="right"> <strong>F1</strong> </td>
-	</tr>
-</table>
-
-</div>
-
-<h2><a name="application" id="application">Application</a></h2>
-<div class="level2">
-<table class="inline">
-	<tr class="header">
-		<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > New tablature </td><td class="right"> Ctrl+<strong>N</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Open file </td><td class="right"> Ctrl+<strong>O</strong> </td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Save file </td><td class="right"> Crtl+<strong>S</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Save as </td><td class="right"> <strong>F12</strong></td>
-	</tr>
-	<tr class="odd">
-		<td class="left" > Print tablature </td><td class="right"> Ctrl+<strong>P</strong> </td>
-	</tr>
-	<tr class="even">
-		<td class="left" > Exit TuxGuitar</td><td class="right"> Alt+<strong>F4</strong> </td>
-	</tr>
-</table>
-
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Default key-bindings (shortcuts)</h1>
+						
+						<ul class="toc">
+						<li class="level1"><div class="li"><span class="li"><a href="#default_key-bindings_shortcuts" class="toc">Default key-bindings (shortcuts)</a></span></div>
+						<ul>
+						<li class="level2"><div class="li"><span class="li"><a href="#edit" class="toc">Edit Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#track" class="toc">Track Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#measure" class="toc">Measure Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#beat" class="toc">Beat Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#note_effects" class="toc">Note Effects</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#marker" class="toc">Marker Actions</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#playback_controls" class="toc">Playback Controls</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#dialogs" class="toc">Dialogs</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#application" class="toc">Application</a></span></div></li></ul>
+						</li></ul>
+						
+						
+						
+						<div class="level1">
+						
+						<p>
+						 This is the list of the default key bindings (keyboard shortcuts) in TuxGuitar 1.0.
+						</p>
+						
+						<p>
+						Of course, these key-bindings list can be modified in <a class="PageLink" href="tools_keybinding.html"> Tools->Shortcuts dialog</a>.
+						</p>
+						
+						</div>
+						
+						<h2><a name="edit" id="edit">Edit Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Undo action </td><td class="right"> Ctrl+<strong>Z</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Redo action </td><td class="right"> Ctrl+<strong>Y</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Song properties</td><td class="right"> <strong>F5</strong></td>
+							</tr>
+						</table>
+						</div>
+						
+						<h2><a name="track" id="tab_editor">Track Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"><u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > View next track </td><td class="right"> Ctrl+<strong>Down</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > View previous track </td><td class="right"> Ctrl+<strong>Up</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > View last track </td><td class="right"> Ctrl+Shift+<strong>Down</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > View first track</td><td class="right"> Ctrl+Shift+<strong>Up</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Add track </td><td class="right"> Ctrl+Shift+<strong>Ins</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Delete track</td><td class="right"> Ctrl+Shift+<strong>Del</strong></td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						<h2><a name="measure" id="tab_editor">Measure Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Go to next measure</td><td class="right"> Ctrl+<strong>Right</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Go to previous measure</td><td class="right"> Ctrl+<strong>Left</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Copy measure</td><td class="right"> Ctrl+<strong>C</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Paste measure </td><td class="right"> Ctrl+<strong>V</strong></td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						
+						<h2><a name="beat" id="tab_editor">Beat Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Clean beat</td><td class="right"> Ctrl+<strong>Del</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Insert beat </td><td class="right"> number 0-29 </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Delete beat/note </td><td class="right"> <strong>Del</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Tied note </td><td class="right"> <strong>L</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Dotted note </td><td class="right"> <strong></strong>* </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Triplet note</td><td class="right"> <strong>/</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Insert text </td><td class="right"> <strong>T</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Move note on string above </td><td class="right"> Shift+<strong>Up</strong></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Move note on string below </td><td class="right"> Shift+<strong>Down</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Increase note pitch </td><td class="right"> Shift+<strong>Right</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Decrease note pitch </td><td class="right"> Shift+<strong>Left</strong></td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						
+						
+						<h2><a name="note_effects" id="note_effects">Note Effects</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Can be applied only when your cursor is positioned on the existing note in a tablature 
+						</p>
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Bend note </td><td class="right"> <strong>B</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Ghost note</td><td class="right"> <strong>O</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Hammer on/Pull off</td><td class="right"> <strong>H</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Slide up/down </td><td class="right"> <strong>S</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Vibrato </td><td class="right"> <strong>V</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Dead note </td><td class="right"> <strong>X</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Palm mute </td><td class="right"> <strong>P</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Fade in </td><td class="right"> <strong>F</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Grace note</td><td class="right"> <strong>G</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						
+						<h2><a name="marker" id="marker">Marker Actions</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Add marker</td><td class="right"> Shift+<strong>Ins</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Go to previous marker </td><td class="right"> Alt+<strong>Left</strong></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Go to next marker </td><td class="right"> Alt+<strong>Right</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						
+						<!--
+						<h2><a name="tab_editor" id="tab_editor">Tab editor</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr>
+								<td><u><strong>Action</strong></u> </td><td> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Insert note </td><td> number 0-29 </td>
+							</tr>
+							<tr>
+								<td> Delete note </td><td> <strong>Del</strong> </td>
+							</tr>
+							<tr>
+								<td> Clean beat</td><td> Ctrl+<strong>Del</strong></td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Tied note </td><td> <strong>L</strong> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Go to next measure</td><td> Ctrl+<strong>Right</strong></td>
+							</tr>
+							<tr>
+								<td> Go to previous measure</td><td> Ctrl+<strong>Left</strong> </td>
+							</tr>
+							<tr>
+								<td> View next track </td><td> Ctrl+<strong>Down</strong> </td>
+							</tr>
+							<tr>
+								<td> View previous track </td><td> Ctrl+<strong>Up</strong> </td>
+							</tr>
+							<tr>
+								<td> View last track </td><td> Ctrl+Shift+<strong>Down</strong> </td>
+							</tr>
+							<tr>
+								<td> View first track</td><td> Ctrl+Shift+<strong>Up</strong> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Copy measure</td><td> Ctrl+<strong>C</strong></td>
+							</tr>
+							<tr>
+								<td> Paste measure </td><td> Ctrl+<strong>V</strong></td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Tab properties</td><td> <strong>F5</strong></td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Add track </td><td> Ctrl+Shift+<strong>Ins</strong></td>
+							</tr>
+							<tr>
+								<td> Delete track</td><td> Ctrl+Shift+<strong>Del</strong></td>
+							</tr>
+							<tr>
+								<td> Add marker</td><td> Shift+<strong>Ins</strong> </td>
+							</tr>
+							<tr>
+								<td> Go to previous marker </td><td> Alt+<strong>Left</strong></td>
+							</tr>
+							<tr>
+								<td> Go to next marker </td><td> Alt+<strong>Right</strong> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Insert text </td><td> <strong>T</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						-->
+						<h2><a name="playback_controls" id="playback_controls">Playback Controls</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Play / Pause</td><td class="right"> <strong>Space</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Go to start </td><td class="right"> Ctrl+Shift+<strong>Right</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Go to end </td><td class="right"> Ctrl+Shift+<strong>Left</strong></td>
+							</tr>
+						</table>
+						
+						</div>
+						<!--
+						<h2><a name="note_effects" id="note_effects">Note effects</a></h2>
+						<div class="level2">
+						
+						<p>
+						 Can be applied only when your cursor is positioned on the existing note in a tablature 
+						</p>
+						<table class="inline">
+							<tr>
+								<td><u><strong>Action</strong></u> </td><td> <u><strong>key</strong></u> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Bend note </td><td> <strong>B</strong> </td>
+							</tr>
+							<tr>
+								<td> Ghost note</td><td> <strong>O</strong> </td>
+							</tr>
+							<tr>
+								<td> Hammer on/Pull off</td><td> <strong>H</strong> </td>
+							</tr>
+							<tr>
+								<td> Slide up/down </td><td> <strong>S</strong> </td>
+							</tr>
+							<tr>
+								<td> Vibrato </td><td> <strong>V</strong> </td>
+							</tr>
+							<tr>
+								<td> Dead note </td><td> <strong>X</strong> </td>
+							</tr>
+							<tr>
+								<td> Palm mute </td><td> <strong>P</strong> </td>
+							</tr>
+							<tr>
+								<td> Fade in </td><td> <strong>F</strong> </td>
+							</tr>
+							<tr>
+								<td> Grace note</td><td> <strong>G</strong> </td>
+							</tr>
+							<tr>
+								<td> </td><td> </td>
+							</tr>
+							<tr>
+								<td> Move note on string above </td><td> Shift+<strong>Up</strong></td>
+							</tr>
+							<tr>
+								<td> Move note on string below </td><td> Shift+<strong>Down</strong></td>
+							</tr>
+							<tr>
+								<td> Increase note pitch </td><td> Shift+<strong>Right</strong> </td>
+							</tr>
+							<tr>
+								<td> Decrease note pitch </td><td> Shift+<strong>Left</strong></td>
+							</tr>
+							<tr>
+								<td> Dotted note </td><td> <strong></strong>* </td>
+							</tr>
+							<tr>
+								<td> Triplet note</td><td> <strong>/</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						-->
+						<h2><a name="dialogs" id="dialogs">Dialogs</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Custom chord dialog </td><td class="right"> <strong>A</strong></td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Settings</td><td class="right"> <strong>F7</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Mixer </td><td class="right"> Ctrl+<strong>M</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Transport </td><td class="right"> Ctrl+<strong>T</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Collection Browser</td><td class="right"> Ctrl+<strong>B</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Play Mode </td><td class="right"> <strong>F9</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Help</td><td class="right"> <strong>F1</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						
+						<h2><a name="application" id="application">Application</a></h2>
+						<div class="level2">
+						<table class="inline">
+							<tr class="header">
+								<td class="left" ><u><strong>Action</strong></u> </td><td class="right"> <u><strong>key</strong></u></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > New tablature </td><td class="right"> Ctrl+<strong>N</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Open file </td><td class="right"> Ctrl+<strong>O</strong> </td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Save file </td><td class="right"> Crtl+<strong>S</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Save as </td><td class="right"> <strong>F12</strong></td>
+							</tr>
+							<tr class="odd">
+								<td class="left" > Print tablature </td><td class="right"> Ctrl+<strong>P</strong> </td>
+							</tr>
+							<tr class="even">
+								<td class="left" > Exit TuxGuitar</td><td class="right"> Alt+<strong>F4</strong> </td>
+							</tr>
+						</table>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/tools_skin.html b/TuxGuitar/share/help/tools_skin.html
index 6228484..319e06f 100644
--- a/TuxGuitar/share/help/tools_skin.html
+++ b/TuxGuitar/share/help/tools_skin.html
@@ -2,37 +2,101 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-<h1>Changing the skin</h1>
-
-
-<div class="level1">
-<pre class="code">
-</pre>
-
-<p>
-TuxGuitar supports custom skins. The skins modify toolbar icons and dialog buttons.
-</p>
-
-<p>
-The default skin for version 1.0 is Lavender, and currently there are 2 more skins: Ersplus and Blue_serious. You can change the current skin in Tools→Settings dialog, choosing the Skins tab. Preview of each skin should be available.
-</p>
-
-<p>
-<img src="images/tools/settings_skin.png"/>
-</p>
-
-<p>
-To add a new skin, create a new folder in <em>$TUXGUITAR_DIR</em>\share\skins\ and copy the <em class="u">files</em> into that folder. After that skin should be available in the dialog.
-</p>
-
-<p>
-Skins are contributed by TuxGuitar users, so if you are a talented designer, feel free to make your own skin or modify the existing one! 
-</p>
-
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>Changing the skin</h1>
+						
+						
+						<div class="level1">
+						<pre class="code">
+						</pre>
+						
+						<p>
+						TuxGuitar supports custom skins. The skins modify toolbar icons and dialog buttons.
+						</p>
+						
+						<p>
+						The default skin for version 1.0 is Lavender, and currently there are 2 more skins: Ersplus and Blue_serious. You can change the current skin in Tools→Settings dialog, choosing the Skins tab. Preview of each skin should be available.
+						</p>
+						
+						<p>
+						<img src="images/tools/settings_skin.png"/>
+						</p>
+						
+						<p>
+						To add a new skin, create a new folder in <em>$TUXGUITAR_DIR</em>\share\skins\ and copy the <em class="u">files</em> into that folder. After that skin should be available in the dialog.
+						</p>
+						
+						<p>
+						Skins are contributed by TuxGuitar users, so if you are a talented designer, feel free to make your own skin or modify the existing one! 
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/tools_sound.html b/TuxGuitar/share/help/tools_sound.html
index d79503c..9218669 100644
--- a/TuxGuitar/share/help/tools_sound.html
+++ b/TuxGuitar/share/help/tools_sound.html
@@ -2,86 +2,149 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-
-
-<h1><a name="sound_in_tuxguitar" id="sound_in_tuxguitar">Sound in TuxGuitar</a></h1>
-
-<ul class="toc">
-<li class="level1"><div class="li"><span class="li"><a href="#sound_in_tuxguitar" class="toc">Sound in TuxGuitar</a></span></div>
-<ul class="toc">
-<li class="level2"><div class="li"><span class="li"><a href="#java_sound" class="toc">Java Sound</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#platform-dependant_plugins" class="toc">Platform-dependant plugins</a></span></div></li>
-<li class="level2"><div class="li"><span class="li"><a href="#sequencer" class="toc">Sequencer</a></span></div></li></ul>
-</li></ul>
-
-
-
-<div class="level1">
-
-<p>
- First to mention, TuxGuitar is written in Java programming language. There is dedicated layer in Java for MIDI sound, which uses “soundbanks”. In TuxGuitar prior to version 1.0, using the soundbanks was the only way to play the sound, and it was totally independent of your system MIDI settings.
-</p>
-
-<p>
-Since the version 1.0 there are some plugins that enable connection between TuxGuitar and the system MIDI devices. You need the plugin depending on your operating system and audio properties: 
-</p>
-<ul>
-<li class="level2"><div class="li"> Linux (ALSA) - TuxGuitar-alsa</div>
-</li>
-<li class="level2"><div class="li"> Linux (OSS) - TuxGuitar-OSS</div>
-</li>
-<li class="level2"><div class="li"> MacOS - TuxGuitar-CoreAudio</div>
-</li>
-<li class="level2"><div class="li"> Microsoft Windows - <em>integrated in the application</em></div>
-</li>
-</ul>
-
-<p>
- These plugins are included in your distribution package, so there is no need to download them manually. Just be shure that plugins stay enabled in the <a class="PageLink" href="tools_plugins.html"> plugins dialog</a>.
-</p>
-
-</div>
-
-<h3><a name="java_sound" id="java_sound">Java Sound</a></h3>
-<div class="level3">
-
-<p>
- Java Sound plugin, relying on the soundbanks, is still available in the form of the “Java Sound Api plugin”. You can adjust and change the soundbank with <strong>Configure</strong> button in the <a class="PageLink" href="tools_plugins.html"> plugins dialog</a>.
-</p>
-
-<p>
-If the plugin is enabled, in the Sound tab of the Tools→Settings dialog you can choose “Java Sound Synthesizer” in the <strong>Midi Port</strong> list. That enables sound output using Java soundbanks.
-</p>
-
-</div>
-
-<h3><a name="platform-dependant_plugins" id="platform-dependant_plugins">Platform-dependant plugins</a></h3>
-<div class="level3">
-
-<p>
-If you have TuxGuitar-alsa, TuxGuitar-OSS, TuxGuitar-CoreAudio plugin enabled or if you are running TuxGuitar on the Windows platform TuxGuitar detects your system MIDI ports (devices).
-</p>
-
-<p>
-So it depends of your system settings, but anyway, if the proper plugin is enabled and working you should see system ports in the <strong>Midi Port</strong> list in the Sound tab of the Tools→Settings dialog. Choosing the right one enables your native MIDI sound in TuxGuitar.
-</p>
-
-<p>
-If you experience problems using your native MIDI output, consult the help of the plugin you are using.
-</p>
-
-</div>
-
-<h3><a name="sequencer" id="sequencer">Sequencer</a></h3>
-<div class="level3">
-
-<p>
- Beside MIDI Port sound options in the Tools→Settings→Sound tab is also <strong>MIDI Sequencer</strong> options. In general, you should use <strong>“Real Time Sequencer”</strong> because it’s faster, but it needs Java Sound plugin to be enabled, which means it requires Sun Java to be installed. In case you use some other JVM, your only choice is <strong>“TuxGuitar Sequencer”</strong>. Don’t worry, it is not as bad as it sounds. :)
-</p>
-
-</div>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1><a name="sound_in_tuxguitar" id="sound_in_tuxguitar">Sound in TuxGuitar</a></h1>
+						
+						<ul class="toc">
+						<li class="level1"><div class="li"><span class="li"><a href="#sound_in_tuxguitar" class="toc">Sound in TuxGuitar</a></span></div>
+						<ul class="toc">
+						<li class="level2"><div class="li"><span class="li"><a href="#java_sound" class="toc">Java Sound</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#platform-dependant_plugins" class="toc">Platform-dependant plugins</a></span></div></li>
+						<li class="level2"><div class="li"><span class="li"><a href="#sequencer" class="toc">Sequencer</a></span></div></li></ul>
+						</li></ul>
+						
+						
+						
+						<div class="level1">
+						
+						<p>
+						 First to mention, TuxGuitar is written in Java programming language. There is dedicated layer in Java for MIDI sound, which uses “soundbanks”. In TuxGuitar prior to version 1.0, using the soundbanks was the only way to play the sound, and it was totally independent of your system MIDI settings.
+						</p>
+						
+						<p>
+						Since the version 1.0 there are some plugins that enable connection between TuxGuitar and the system MIDI devices. You need the plugin depending on your operating system and audio properties: 
+						</p>
+						<ul>
+						<li class="level2"><div class="li"> Linux (ALSA) - TuxGuitar-alsa</div>
+						</li>
+						<li class="level2"><div class="li"> Linux (OSS) - TuxGuitar-OSS</div>
+						</li>
+						<li class="level2"><div class="li"> MacOS - TuxGuitar-CoreAudio</div>
+						</li>
+						<li class="level2"><div class="li"> Microsoft Windows - <em>integrated in the application</em></div>
+						</li>
+						</ul>
+						
+						<p>
+						 These plugins are included in your distribution package, so there is no need to download them manually. Just be shure that plugins stay enabled in the <a class="PageLink" href="tools_plugins.html"> plugins dialog</a>.
+						</p>
+						
+						</div>
+						
+						<h3><a name="java_sound" id="java_sound">Java Sound</a></h3>
+						<div class="level3">
+						
+						<p>
+						 Java Sound plugin, relying on the soundbanks, is still available in the form of the “Java Sound Api plugin”. You can adjust and change the soundbank with <strong>Configure</strong> button in the <a class="PageLink" href="tools_plugins.html"> plugins dialog</a>.
+						</p>
+						
+						<p>
+						If the plugin is enabled, in the Sound tab of the Tools→Settings dialog you can choose “Java Sound Synthesizer” in the <strong>Midi Port</strong> list. That enables sound output using Java soundbanks.
+						</p>
+						
+						</div>
+						
+						<h3><a name="platform-dependant_plugins" id="platform-dependant_plugins">Platform-dependant plugins</a></h3>
+						<div class="level3">
+						
+						<p>
+						If you have TuxGuitar-alsa, TuxGuitar-OSS, TuxGuitar-CoreAudio plugin enabled or if you are running TuxGuitar on the Windows platform TuxGuitar detects your system MIDI ports (devices).
+						</p>
+						
+						<p>
+						So it depends of your system settings, but anyway, if the proper plugin is enabled and working you should see system ports in the <strong>Midi Port</strong> list in the Sound tab of the Tools→Settings dialog. Choosing the right one enables your native MIDI sound in TuxGuitar.
+						</p>
+						
+						<p>
+						If you experience problems using your native MIDI output, consult the help of the plugin you are using.
+						</p>
+						
+						</div>
+						
+						<h3><a name="sequencer" id="sequencer">Sequencer</a></h3>
+						<div class="level3">
+						
+						<p>
+						 Beside MIDI Port sound options in the Tools→Settings→Sound tab is also <strong>MIDI Sequencer</strong> options. In general, you should use <strong>“Real Time Sequencer”</strong> because it’s faster, but it needs Java Sound plugin to be enabled, which means it requires Sun Java to be installed. In case you use some other JVM, your only choice is <strong>“TuxGuitar Sequencer”</strong>. Don’t worry, it is not as bad as it sounds. :)
+						</p>
+						
+						</div>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/help/whatsnew.html b/TuxGuitar/share/help/whatsnew.html
index d3c7f20..dc2c294 100644
--- a/TuxGuitar/share/help/whatsnew.html
+++ b/TuxGuitar/share/help/whatsnew.html
@@ -2,193 +2,258 @@
 <html xmlns="http://www.w3.org/1999/xhtml">
 	<head>
 		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+		<link type="text/css" rel="stylesheet" href="css/styles.css" ></link>
 	</head>
-<body>
-<h1>What's new</h1>
-
-<h2>Version 1.1 (2009-xx-xx)</h2>
-<ul>
-	<li class="level2"><div class="li">Fix some bugs</div></li>
-	<li class="level2"><div class="li">Support measure range to loop</div></li>
-	<li class="level2"><div class="li">Transpose notes feature</div></li>
-	<li class="level2"><div class="li">Optionally transpose afected notes when change tuning</div></li>
-	<li class="level2"><div class="li">Move beats left|right support</div></li>
-	<li class="level2"><div class="li">More song properties options.</div></li>
-	<li class="level2"><div class="li">Add multiple measure support</div></li>
-	<li class="level2"><div class="li">Clean multiple measure support</div></li>
-	<li class="level2"><div class="li">Number of pastes support</div></li>
-	<li class="level2"><div class="li">Better lilypond plugin</div></li>
-	<li class="level2"><div class="li">Better fluidsynth plugin</div></li>
-	<li class="level2"><div class="li">New jack plugin</div></li>
-	<li class="level2"><div class="li">New community integration plugin</div></li>
-	<li class="level2"><div class="li">New cocoa integration plugin</div></li>
-	<li class="level2"><div class="li">New audio unit plugin</div></li>
-</ul>
-
-<h2>Version 1.1 (2009-04-02)</h2>
-<ul>
-	<li class="level2"><div class="li">Fix mixer bug</div></li>
-	<li class="level2"><div class="li">Fix jre1.4 support bug</div></li>
-	<li class="level2"><div class="li">2 Voice support</div></li>
-	<li class="level2"><div class="li">Chorus/Reverb/Phaser/Tremolo MIDI Controls</div></li>
-	<li class="level2"><div class="li">Upstroke/Downstroke support</div></li>
-	<li class="level2"><div class="li">Stems Up/Down/Auto support</div></li>
-	<li class="level2"><div class="li">Display markers on the score</div></li>	
-	<li class="level2"><div class="li">Encoding option on GTP Plugin</div></li>
-	<li class="level2"><div class="li">FTP Browser plugin now can run on non sun's JVM</div></li>
-</ul>
-
-<h2>Version 1.0 (2008-06-17)</h2>
-<ul>
-	<li class="level2"><div class="li">Fixed native MIDI Port connection bug under windows</div></li>
-	<li class="level2"><div class="li">Fixed mute/solo mixer bug</div></li>
-	<li class="level2"><div class="li">Fixed copy/paste measure beetween tracks with different strings count</div></li>
-	<li class="level2"><div class="li">Fixed other minor bugs</div></li>
-	<li class="level2"><div class="li">Vietnamese translation</div></li>
-</ul>
-
-<h2>Version 1.0-rc4 (2008-05-05)</h2>
-<ul>
-	<li class="level2"><div class="li">Bugs Fixed</div></li>
-	<li class="level2"><div class="li">File format converter plugin</div></li>
-	<li class="level2"><div class="li">Dutch translation</div></li>
-	<li class="level2"><div class="li">Russian translation</div></li>
-	<li class="level2"><div class="li">Ukrainian translation</div></li>
-</ul>
-
-<h2>Version 1.0-rc3 (2008-03-25)</h2>
-<ul>
-	<li class="level2"><div class="li">Fix a several GTP exporter bug</div></li>
-	<li class="level2"><div class="li">Fix a printer bug</div></li>
-	<li class="level2"><div class="li">Fix other minor bugs</div></li>
-</ul>
-
-<h2>Version 1.0-rc2 (2008-03-11)</h2>
-<ul>
-	<li class="level2"><div class="li">Fix some translation bugs</div></li>
-	<li class="level2"><div class="li">Fix duplicated beat/string notes on MIDI importer</div></li>
-	<li class="level2"><div class="li">Fix a GTP importer bug</div></li>
-	<li class="level2"><div class="li">Fix a PTB importer bug</div></li>
-	<li class="level2"><div class="li">Better Guitar/Bass synchronization on PTB importer</div></li>
-	<li class="level2"><div class="li">Documentation contents added</div></li>
-</ul>
-
-<h2>Version 1.0-rc1 (2008-02-28)</h2>
-
-<ul>
-	<li class="level2"><div class="li">Play mode option: ( Normal | Loop | Speed-Trainer )</div></li>
-	<li class="level2"><div class="li">Alternative endings added</div></li>
-	<li class="level2"><div class="li">Insert text</div></li>
-	<li class="level2"><div class="li">Show chords on the tab</div></li>
-	<li class="level2"><div class="li">Better chord editor</div></li>
-	<li class="level2"><div class="li">Open file from URL</div></li>
-	<li class="level2"><div class="li">Matrix editor</div></li>
-	<li class="level2"><div class="li">A song collection browser</div></li>
-	<li class="level2"><div class="li">Skin support was added</div></li>
-	<li class="level2"><div class="li">Better plugin support</div></li>
-	<li class="level2"><div class="li">Tabledit importer plugin</div></li>
-	<li class="level2"><div class="li">Lilypond exporter plugin</div></li>
-	<li class="level2"><div class="li">MusicXml exporter plugin</div></li>
-</ul>
-
-<h2>Version 0.9 (2007-01-29)</h2>
-
-<ul>
-	<li class="level2"><div class="li">Piano editor</div></li>
-	<li class="level2"><div class="li">Lyric editor</div></li>
-	<li class="level2"><div class="li">Music Scales</div></li>
-	<li class="level2"><div class="li">Simple Score edition</div></li>
-	<li class="level2"><div class="li">Custom Chords</div></li>
-	<li class="level2"><div class="li">Customize ToolBars</div></li>
-	<li class="level2"><div class="li">Metronome</div></li>
-	<li class="level2"><div class="li">Memory Optimization when song is playing</div></li>
-	<li class="level2"><div class="li">Print layout changes: Tablature and Score enabled/disabled options, Measure range.</div></li>
-	<li class="level2"><div class="li">Dynamics</div></li>
-	<li class="level2"><div class="li">Increment-Decrement Semitones.</div></li>
-	<li class="level2"><div class="li">Shift Up/Down</div></li>
-	<li class="level2"><div class="li">New Effects: Tremolo Bar, Harmonics, Grace note, Trill, Tremolo Picking, Ghost note, Accentuated, Heavy Accentuated, Palm mute, Staccato, </div></li>
-	<li class="level2"><div class="li">Tapping, Slapping, Popping, Fade In.</div></li>
-</ul>
-
-<h2>Version 0.8 (2006-08-24)</h2>
-
-<ul>
-	<li class="level2"><div class="li">Power-Tab 1.7 file format importer added</div></li>
-	<li class="level2"><div class="li">MIDI importer added</div></li>
-	<li class="level2"><div class="li">ASCII Tab exporter added</div></li>
-	<li class="level2"><div class="li">Show note played at fretboard</div></li>
-	<li class="level2"><div class="li">Triplet Feels added</div></li>
-	<li class="level2"><div class="li">Markers added</div></li>
-	<li class="level2"><div class="li">Fonts and colors config support added</div></li>
-	<li class="level2"><div class="li">Soundbank config support added</div></li>
-	<li class="level2"><div class="li">History files added</div></li>
-	<li class="level2"><div class="li">Simple plugin support added</div></li>
-</ul>
-
-<h2>Version 0.7 (2006-07-17)</h2>
-
-<ul>
-	<li class="level2"><div class="li">Score Viewer added</div></li>
-	<li class="level2"><div class="li">Transport added</div></li>
-	<li class="level2"><div class="li">Clone Track option added</div></li>
-	<li class="level2"><div class="li">Move track up and down option added</div></li>
-</ul>
-
-<h2>Version 0.6 (2006-05-27)</h2>
-
-<ul>
-	<li class="level2"><div class="li">GP5 loader added</div></li>
-	<li class="level2"><div class="li">MIDI exporter added</div></li>
-	<li class="level2"><div class="li">PDF exporter added</div></li>
-	<li class="level2"><div class="li">Print option added</div></li>
-	<li class="level2"><div class="li">Print preview added</div></li>
-	<li class="level2"><div class="li">Undo/Redo added</div></li>
-	<li class="level2"><div class="li">Dead note added</div></li>
-	<li class="level2"><div class="li">Page layout upgraded</div></li>
-	<li class="level2"><div class="li">Copy-Paste and Delete upgraded</div></li>
-</ul>
-
-
-<h2>Version 0.5 (2006-04-07)</h2>
-
-<ul>
-	<li class="level2"><div class="li">Config editor added</div></li>
-	<li class="level2"><div class="li">Key Binding editor added</div></li>
-	<li class="level2"><div class="li">Mixer added</div></li>
-	<li class="level2"><div class="li">Midi sound added, when you insert a note</div></li>
-	<li class="level2"><div class="li">Now can you see beat to beat when the song is playing</div></li>
-	<li class="level2"><div class="li">Now you can select the channel and effect channel for the track</div></li>
-	<li class="level2"><div class="li">Now you can run tuxguitar with arguments (eg.: ./TuxGuitar file.gp3)</div></li>
-</ul>
-
-
-<h2>Version 0.4.1 (2006-01-26)</h2>
-
-<ul>
-	<li class="level2"><div class="li">Fixed a bug in tunning when you select a percussion track</div></li>
-</ul>
-
-
-<h2>Version 0.4 (2006-01-25)</h2>
-
-<ul>
-	<li class="level2"><div class="li">Fretboard editor added</div></li>
-	<li class="level2"><div class="li">Song properties viewer added</div></li>
-	<li class="level2"><div class="li">Select instrument bug fixed</div></li>
-	<li class="level2"><div class="li">Change tempo bug fixed</div></li>
-	<li class="level2"><div class="li">Change tunning bug fixed</div></li>
-</ul>
-
-
-<h2>Version 0.3 (2006-01-11)</h2>
-
-<ul>
-	<li class="level2"><div class="li">Now you can choose between linear and page layout view</div></li>
-	<li class="level2"><div class="li">Ability to show/hide multitrack view</div></li>
-	<li class="level2"><div class="li">Multilanguage support has been added</div></li>
-	<li class="level2"><div class="li">You can now export to gp3 and gp4 file formats</div></li>
-	<li class="level2"><div class="li">Double dotted note added</div></li>
-</ul>
-<br/><br/>
-</body>
+	<body>
+		<table>
+			<tr>
+				<td valign="top">
+					<div id="PageMenu" >
+						<ul>
+							<li >
+								<span>Introduction</span>
+								<ul>
+									<li ><a class="PageLink" href="about.html" >About</a></li>
+									<li ><a class="PageLink" href="license.html" >License</a></li>
+									<li ><a class="PageLink" href="whatsnew.html" >What's new</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Getting started</span>
+								<ul>
+									<li ><a class="PageLink" href="start_first_steps.html" >The First Steps</a></li>
+									<li ><a class="PageLink" href="start_toolbars.html" >Toolbars</a></li>
+									<li ><a class="PageLink" href="start_playing.html" >Playing a song</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Making and editing a song</span>
+								<ul>
+									<li><a class="PageLink" href="editing_track.html" >Editing a track</a></li>
+									<li><a class="PageLink" href="editing_song.html" >Editing a whole song</a></li>
+									<li><a class="PageLink" href="edit_effects.html" >Note effects</a></li>
+									<li><a class="PageLink" href="edit_chord.html" >Chord edit dialog</a></li>
+									<li><a class="PageLink" href="edit_matrix.html" >Matrix editor</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li >
+								<span>Tools and settings</span>
+								<ul>
+									<li><a class="PageLink" href="tools_shortcuts.html" >Default shortcuts</a></li>
+									<li><a class="PageLink" href="tools_keybinding.html" >Shortcut editor</a></li>
+									<li><a class="PageLink" href="tools_skin.html" >Changing the skin</a></li>
+									<li><a class="PageLink" href="tools_plugins.html" >Plugins dialog</a></li>
+									<li><a class="PageLink" href="tools_sound.html" >Sound in TuxGuitar</a></li>
+									<li><a class="PageLink" href="tools_converter.html" >File format batch converter</a></li>
+								</ul>
+							</li>
+						</ul>
+						<ul>
+							<li><a class="PageLink" href="file_formats.html" >Supported file formats</a></li>
+						</ul>
+					</div>
+				</td>
+				<td valign="top">
+					<div id="PageContent" >
+						<!-- START OF PAGE CONTENT -->
+						
+						<h1>What's new</h1>
+						
+						<h2>Version 1.1 (2009-xx-xx)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fix some bugs</div></li>
+							<li class="level2"><div class="li">Support measure range to loop</div></li>
+							<li class="level2"><div class="li">Transpose notes feature</div></li>
+							<li class="level2"><div class="li">Optionally transpose afected notes when change tuning</div></li>
+							<li class="level2"><div class="li">Move beats left|right support</div></li>
+							<li class="level2"><div class="li">More song properties options.</div></li>
+							<li class="level2"><div class="li">Add multiple measure support</div></li>
+							<li class="level2"><div class="li">Clean multiple measure support</div></li>
+							<li class="level2"><div class="li">Number of pastes support</div></li>
+							<li class="level2"><div class="li">Better lilypond plugin</div></li>
+							<li class="level2"><div class="li">Better fluidsynth plugin</div></li>
+							<li class="level2"><div class="li">New jack plugin</div></li>
+							<li class="level2"><div class="li">New community integration plugin</div></li>
+							<li class="level2"><div class="li">New cocoa integration plugin</div></li>
+							<li class="level2"><div class="li">New audio unit plugin</div></li>
+						</ul>
+						
+						<h2>Version 1.1 (2009-04-02)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fix mixer bug</div></li>
+							<li class="level2"><div class="li">Fix jre1.4 support bug</div></li>
+							<li class="level2"><div class="li">2 Voice support</div></li>
+							<li class="level2"><div class="li">Chorus/Reverb/Phaser/Tremolo MIDI Controls</div></li>
+							<li class="level2"><div class="li">Upstroke/Downstroke support</div></li>
+							<li class="level2"><div class="li">Stems Up/Down/Auto support</div></li>
+							<li class="level2"><div class="li">Display markers on the score</div></li>	
+							<li class="level2"><div class="li">Encoding option on GTP Plugin</div></li>
+							<li class="level2"><div class="li">FTP Browser plugin now can run on non sun's JVM</div></li>
+						</ul>
+						
+						<h2>Version 1.0 (2008-06-17)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fixed native MIDI Port connection bug under windows</div></li>
+							<li class="level2"><div class="li">Fixed mute/solo mixer bug</div></li>
+							<li class="level2"><div class="li">Fixed copy/paste measure beetween tracks with different strings count</div></li>
+							<li class="level2"><div class="li">Fixed other minor bugs</div></li>
+							<li class="level2"><div class="li">Vietnamese translation</div></li>
+						</ul>
+						
+						<h2>Version 1.0-rc4 (2008-05-05)</h2>
+						<ul>
+							<li class="level2"><div class="li">Bugs Fixed</div></li>
+							<li class="level2"><div class="li">File format converter plugin</div></li>
+							<li class="level2"><div class="li">Dutch translation</div></li>
+							<li class="level2"><div class="li">Russian translation</div></li>
+							<li class="level2"><div class="li">Ukrainian translation</div></li>
+						</ul>
+						
+						<h2>Version 1.0-rc3 (2008-03-25)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fix a several GTP exporter bug</div></li>
+							<li class="level2"><div class="li">Fix a printer bug</div></li>
+							<li class="level2"><div class="li">Fix other minor bugs</div></li>
+						</ul>
+						
+						<h2>Version 1.0-rc2 (2008-03-11)</h2>
+						<ul>
+							<li class="level2"><div class="li">Fix some translation bugs</div></li>
+							<li class="level2"><div class="li">Fix duplicated beat/string notes on MIDI importer</div></li>
+							<li class="level2"><div class="li">Fix a GTP importer bug</div></li>
+							<li class="level2"><div class="li">Fix a PTB importer bug</div></li>
+							<li class="level2"><div class="li">Better Guitar/Bass synchronization on PTB importer</div></li>
+							<li class="level2"><div class="li">Documentation contents added</div></li>
+						</ul>
+						
+						<h2>Version 1.0-rc1 (2008-02-28)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Play mode option: ( Normal | Loop | Speed-Trainer )</div></li>
+							<li class="level2"><div class="li">Alternative endings added</div></li>
+							<li class="level2"><div class="li">Insert text</div></li>
+							<li class="level2"><div class="li">Show chords on the tab</div></li>
+							<li class="level2"><div class="li">Better chord editor</div></li>
+							<li class="level2"><div class="li">Open file from URL</div></li>
+							<li class="level2"><div class="li">Matrix editor</div></li>
+							<li class="level2"><div class="li">A song collection browser</div></li>
+							<li class="level2"><div class="li">Skin support was added</div></li>
+							<li class="level2"><div class="li">Better plugin support</div></li>
+							<li class="level2"><div class="li">Tabledit importer plugin</div></li>
+							<li class="level2"><div class="li">Lilypond exporter plugin</div></li>
+							<li class="level2"><div class="li">MusicXml exporter plugin</div></li>
+						</ul>
+						
+						<h2>Version 0.9 (2007-01-29)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Piano editor</div></li>
+							<li class="level2"><div class="li">Lyric editor</div></li>
+							<li class="level2"><div class="li">Music Scales</div></li>
+							<li class="level2"><div class="li">Simple Score edition</div></li>
+							<li class="level2"><div class="li">Custom Chords</div></li>
+							<li class="level2"><div class="li">Customize ToolBars</div></li>
+							<li class="level2"><div class="li">Metronome</div></li>
+							<li class="level2"><div class="li">Memory Optimization when song is playing</div></li>
+							<li class="level2"><div class="li">Print layout changes: Tablature and Score enabled/disabled options, Measure range.</div></li>
+							<li class="level2"><div class="li">Dynamics</div></li>
+							<li class="level2"><div class="li">Increment-Decrement Semitones.</div></li>
+							<li class="level2"><div class="li">Shift Up/Down</div></li>
+							<li class="level2"><div class="li">New Effects: Tremolo Bar, Harmonics, Grace note, Trill, Tremolo Picking, Ghost note, Accentuated, Heavy Accentuated, Palm mute, Staccato, </div></li>
+							<li class="level2"><div class="li">Tapping, Slapping, Popping, Fade In.</div></li>
+						</ul>
+						
+						<h2>Version 0.8 (2006-08-24)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Power-Tab 1.7 file format importer added</div></li>
+							<li class="level2"><div class="li">MIDI importer added</div></li>
+							<li class="level2"><div class="li">ASCII Tab exporter added</div></li>
+							<li class="level2"><div class="li">Show note played at fretboard</div></li>
+							<li class="level2"><div class="li">Triplet Feels added</div></li>
+							<li class="level2"><div class="li">Markers added</div></li>
+							<li class="level2"><div class="li">Fonts and colors config support added</div></li>
+							<li class="level2"><div class="li">Soundbank config support added</div></li>
+							<li class="level2"><div class="li">History files added</div></li>
+							<li class="level2"><div class="li">Simple plugin support added</div></li>
+						</ul>
+						
+						<h2>Version 0.7 (2006-07-17)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Score Viewer added</div></li>
+							<li class="level2"><div class="li">Transport added</div></li>
+							<li class="level2"><div class="li">Clone Track option added</div></li>
+							<li class="level2"><div class="li">Move track up and down option added</div></li>
+						</ul>
+						
+						<h2>Version 0.6 (2006-05-27)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">GP5 loader added</div></li>
+							<li class="level2"><div class="li">MIDI exporter added</div></li>
+							<li class="level2"><div class="li">PDF exporter added</div></li>
+							<li class="level2"><div class="li">Print option added</div></li>
+							<li class="level2"><div class="li">Print preview added</div></li>
+							<li class="level2"><div class="li">Undo/Redo added</div></li>
+							<li class="level2"><div class="li">Dead note added</div></li>
+							<li class="level2"><div class="li">Page layout upgraded</div></li>
+							<li class="level2"><div class="li">Copy-Paste and Delete upgraded</div></li>
+						</ul>
+						
+						
+						<h2>Version 0.5 (2006-04-07)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Config editor added</div></li>
+							<li class="level2"><div class="li">Key Binding editor added</div></li>
+							<li class="level2"><div class="li">Mixer added</div></li>
+							<li class="level2"><div class="li">Midi sound added, when you insert a note</div></li>
+							<li class="level2"><div class="li">Now can you see beat to beat when the song is playing</div></li>
+							<li class="level2"><div class="li">Now you can select the channel and effect channel for the track</div></li>
+							<li class="level2"><div class="li">Now you can run tuxguitar with arguments (eg.: ./TuxGuitar file.gp3)</div></li>
+						</ul>
+						
+						
+						<h2>Version 0.4.1 (2006-01-26)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Fixed a bug in tunning when you select a percussion track</div></li>
+						</ul>
+						
+						
+						<h2>Version 0.4 (2006-01-25)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Fretboard editor added</div></li>
+							<li class="level2"><div class="li">Song properties viewer added</div></li>
+							<li class="level2"><div class="li">Select instrument bug fixed</div></li>
+							<li class="level2"><div class="li">Change tempo bug fixed</div></li>
+							<li class="level2"><div class="li">Change tunning bug fixed</div></li>
+						</ul>
+						
+						
+						<h2>Version 0.3 (2006-01-11)</h2>
+						
+						<ul>
+							<li class="level2"><div class="li">Now you can choose between linear and page layout view</div></li>
+							<li class="level2"><div class="li">Ability to show/hide multitrack view</div></li>
+							<li class="level2"><div class="li">Multilanguage support has been added</div></li>
+							<li class="level2"><div class="li">You can now export to gp3 and gp4 file formats</div></li>
+							<li class="level2"><div class="li">Double dotted note added</div></li>
+						</ul>
+						<br/><br/>
+						
+						<!-- END OF PAGE CONTENT -->
+					</div>
+				</td>
+			</tr>
+		</table>
+	</body>
 </html>
diff --git a/TuxGuitar/share/lang/last_additions b/TuxGuitar/share/lang/last_additions
new file mode 100644
index 0000000..32bb416
--- /dev/null
+++ b/TuxGuitar/share/lang/last_additions
@@ -0,0 +1,59 @@
+# 1.3
+
+action.caret.go-up=Move cursor up
+action.caret.go-down=Move cursor down
+action.caret.go-left=Move cursor left
+action.caret.go-right=Move cursor right
+
+beat.insert-rest=Insert Rest Beat
+beat.delete-note-or-rest=Delete Note or Rest
+
+action.beat.general.insert-rest=Insert rest beat
+action.beat.general.delete-note-or-rest=Delete note or rest
+
+action.note.general.set-fret-number-0=Set fret number 0
+action.note.general.set-fret-number-1=Set fret number 1
+action.note.general.set-fret-number-2=Set fret number 2
+action.note.general.set-fret-number-3=Set fret number 3
+action.note.general.set-fret-number-4=Set fret number 4
+action.note.general.set-fret-number-5=Set fret number 5
+action.note.general.set-fret-number-6=Set fret number 6
+action.note.general.set-fret-number-7=Set fret number 7
+action.note.general.set-fret-number-8=Set fret number 8
+action.note.general.set-fret-number-9=Set fret number 9
+
+
+transport.count-down=Count Down
+action.transport.count-down=Count Down
+
+
+track.short-solo-mute=S-M
+track.short-solo-mute.s=(S)
+track.short-solo-mute.m=(M)
+track.short-solo-mute.none=-
+
+action.track.change-solo=Set track solo
+action.track.change-mute=Set track mute
+
+instruments.dialog-title=Instruments
+instrument.percussion-channel=Percussion Channel
+instrument.program=Program
+instrument.bank=Bank
+
+
+
+track.instrument.default-select-option=--- Select ---
+
+export.all-tracks=Export all tracks
+
+view.show-toolbars=Show Toolbars
+view.show-instruments=Show Instruments
+
+
+
+effects.let-ring=Let Ring
+
+action.view.show-toolbars=Show Toolbars
+action.view.show-instruments=Show Instruments
+action.note.effect.change-let-ring=Add/Remove let ring
+
diff --git a/TuxGuitar/share/lang/messages.properties b/TuxGuitar/share/lang/messages.properties
index be48be1..cd91484 100644
--- a/TuxGuitar/share/lang/messages.properties
+++ b/TuxGuitar/share/lang/messages.properties
@@ -1,5 +1,6 @@
+
 ###############################################################
-###                  Defaul language codes                  ###
+###                  Default language codes                 ###
 ###############################################################
 locale.aa=Afar
 locale.ab=Abkhazian
@@ -177,6 +178,7 @@ url=URL
 
 file=File
 file.new=New
+file.new-song.default-template=New Song
 file.open=Open
 file.save=Save
 file.save-as=Save As
@@ -228,7 +230,8 @@ view.layout.chord-name=Chord Name
 view.layout.chord-diagram=Chord Diagram
 view.layout.score-enabled=Show Score
 view.layout.tablature-enabled=Show Tablature
-view.show-mixer=Show Mixer
+view.show-toolbars=Show Toolbars
+view.show-instruments=Show Instruments
 view.show-fretboard=Show Fretboard
 view.show-piano=Show Piano
 view.show-matrix=Show Matrix
@@ -340,11 +343,19 @@ track.remove=Remove Track
 track.clone=Clone Track
 track.move-up=Move Up
 track.move-down=Move Down
-track.instrument=Instrument 
+track.instrument=Instrument
+track.instrument.default-select-option=--- Select ---
 track.properties=Properties
 track.properties.general=General
 track.name.default-percussion-name=Percussion
 track.lyrics=Lyrics
+track.solo=Solo
+track.mute=Mute
+
+track.short-solo-mute=S-M
+track.short-solo-mute.s=(S)
+track.short-solo-mute.m=(M)
+track.short-solo-mute.none=-
 
 lyric.editor=Lyric Editor
 
@@ -417,6 +428,7 @@ effects.trill-editor=Trill Editor
 effects.tremolo-picking=Tremolo Picking
 effects.tremolo-picking-editor=Tremolo Picking Editor
 effects.palm-mute=Palm Mute
+effects.let-ring=Let Ring
 effects.staccato=Staccato
 effects.tapping=Tapping
 effects.slapping=Slapping
@@ -449,6 +461,7 @@ transport.last=Last
 transport.previous=Previous
 transport.next=Next
 transport.metronome=Metronome
+transport.count-down=Count Down
 transport.mode=Play Mode
 transport.mode.simple=Simple Mode
 transport.mode.simple.tempo-percent=Percentage of tempo
@@ -463,20 +476,19 @@ transport.mode.loop-range.to-default=To the end
 transport.set-loop-start=Set loop start point
 transport.set-loop-end=Set loop end point
 
-mixer=Mixer
-mixer.volume=Gain
-mixer.track.solo=Solo
-mixer.track.mute=Mute
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.volume=Volume
-mixer.channel.balance=Balance
-mixer.channel.chorus=Chorus
-mixer.channel.reverb=Reverb
-mixer.channel.phaser=Phaser
-mixer.channel.tremolo=Tremolo
-mixer.channel.free=Free
-mixer.channel.link=Link
+
+instruments.dialog-title=Instruments
+instruments.volume=Gain
+instrument=Instrument
+instrument.percussion-channel=Percussion Channel
+instrument.program=Program
+instrument.bank=Bank
+instrument.volume=Volume
+instrument.balance=Balance
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
 
 
 repeat.open=Open Repeat
@@ -488,6 +500,8 @@ repeat.number-of-repetitions=Number of Repetitions
 
 beat=Beat
 beat.clean=Clean Beat
+beat.insert-rest=Insert Rest Beat
+beat.delete-note-or-rest=Delete Note or Rest
 beat.voice.remove-unused=Remove Unused Voice
 beat.voice-up=Stems Up
 beat.voice-down=Stems Down
@@ -540,14 +554,10 @@ chord.settings.search-frets=Search Frets
 chord.settings.minimum-fret=Min
 chord.settings.maximum-fret=Max
 
-instrument=Instrument
-instrument.instrument=Instrument
-instrument.percussion-track=Percussion Track
-
 tuning=Tuning
 tuning.offset=Offset
 tuning.strings=Strings
-tuning.strings.transpose=Transpose afected notes.
+tuning.strings.transpose=Transpose affected notes.
 tuning.strings.transpose.try-keep-strings=Try keep notes at same string
 tuning.strings.transpose.apply-to-chords=Transpose Chords
 
@@ -605,9 +615,6 @@ key-bindings-editor-action-column=Actions
 key-bindings-editor-shortcut-column=Keys
 key-bindings-editor-push-a-key=Press a key
 key-bindings-editor-save-question=There are unsaved changes, do you want to exit without saving?
-
-key-bindings-editor-reserved-title=Reserved Shortcut
-key-bindings-editor-reserved-message=Sorry, this shortcut is reserved
 key-bindings-editor-override=Shortcut already in use! Are you sure you want to use it?
 
 print.print=Print
@@ -644,6 +651,7 @@ export.score-enabled=Show Score
 export.chord-name-enabled=Show Chord Names
 export.chord-diagram-enabled=Show Chord Diagrams
 export.black-and-white=Black And White Mode
+export.all-tracks=Export all tracks
 
 scale=Scale
 scale.list=Scale List
@@ -730,6 +738,10 @@ action.edit.undo=Undo
 action.edit.redo=Redo
 action.edit.voice-1=Select Voice 1
 action.edit.voice-2=Select Voice 2
+action.caret.go-up=Move cursor up
+action.caret.go-down=Move cursor down
+action.caret.go-left=Move cursor left
+action.caret.go-right=Move cursor right
 action.composition.change-time-signature=Change Time Signature
 action.composition.change-tempo=Change Tempo
 action.composition.change-info=Change Song Information
@@ -744,10 +756,11 @@ action.view.layout-set-tablature-enabled=Show Tablature
 action.view.layout-set-compact=Show Compact Mode
 action.view.layout-set-chord-diagram-enabled=Enable Chord Diagram
 action.view.layout-set-chord-name-enabled=Enable Chord Name
+action.view.show-toolbars=Show Toolbars
 action.view.show-fretboard=Show Fretboard
 action.view.show-piano=Show Piano
 action.view.show-matrix=Show Matrix
-action.view.show-mixer=Show Mixer
+action.view.show-instruments=Show Instruments
 action.view.show-transport=Show Player
 action.track.add=Add Track
 action.track.remove=Remove Track
@@ -760,6 +773,8 @@ action.track.lyrics=Edit track lyrics
 action.track.properties=Change track properties
 action.track.move-down=Move track down
 action.track.move-up=Move track up
+action.track.change-solo=Set track solo
+action.track.change-mute=Set track mute
 action.measure.add=Add measure
 action.measure.remove=Remove measure
 action.measure.copy=Copy measure
@@ -778,6 +793,18 @@ action.beat.general.set-stroke-down=Set Downstroke
 action.beat.general.move-left=Move One Beat Left
 action.beat.general.move-right=Move One Beat Right
 action.beat.general.move-custom=Custom Beat Move
+action.beat.general.insert-rest=Insert rest beat
+action.beat.general.delete-note-or-rest=Delete note or rest
+action.note.general.set-fret-number-0=Set fret number 0
+action.note.general.set-fret-number-1=Set fret number 1
+action.note.general.set-fret-number-2=Set fret number 2
+action.note.general.set-fret-number-3=Set fret number 3
+action.note.general.set-fret-number-4=Set fret number 4
+action.note.general.set-fret-number-5=Set fret number 5
+action.note.general.set-fret-number-6=Set fret number 6
+action.note.general.set-fret-number-7=Set fret number 7
+action.note.general.set-fret-number-8=Set fret number 8
+action.note.general.set-fret-number-9=Set fret number 9
 action.note.general.clean-beat=Clean beat
 action.note.general.decrement-semitone=Decrement semitone
 action.note.general.increment-semitone=Increment semitone
@@ -808,6 +835,7 @@ action.note.effect.change-grace=Add/Remove grace
 action.note.effect.change-harmonic=Add/Remove harmonic
 action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated
 action.note.effect.change-palm-mute=Add/Remove palm mute
+action.note.effect.change-let-ring=Add/Remove let ring
 action.note.effect.change-popping=Add/Remove popping
 action.note.effect.change-slapping=Add/Remove slapping
 action.note.effect.change-staccato=Add/Remove staccato
@@ -827,6 +855,7 @@ action.transport.play=Play Song
 action.transport.stop=Stop Playing
 action.transport.mode=Player Mode
 action.transport.metronome=Metrononome
+action.transport.count-down=Count Down
 action.transport.set-loop-start=Set loop start point
 action.transport.set-loop-end=Set loop end point
 action.tools.browser=Browser
diff --git a/TuxGuitar/share/lang/messages_bg.properties b/TuxGuitar/share/lang/messages_bg.properties
new file mode 100644
index 0000000..e91f517
--- /dev/null
+++ b/TuxGuitar/share/lang/messages_bg.properties
@@ -0,0 +1,682 @@
+ok=\u0414\u043E\u0431\u0440\u0435
+cancel=\u041E\u0442\u043A\u0430\u0437
+yes=\u0414\u0430
+no=\u041D\u0435
+add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435
+edit=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435
+remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435
+save=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435
+exit=\u0418\u0437\u0445\u043E\u0434
+close=\u0417\u0430\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+choose=\u0418\u0437\u0431\u043E\u0440
+color=\u0426\u0432\u044F\u0442
+title=\u0417\u0430\u0433\u043B\u0430\u0432\u0438\u0435
+go=\u041D\u0430\u043F\u0440\u0435\u0434
+warning=\u0412\u043D\u0438\u043C\u0430\u043D\u0438\u0435
+error=\u0413\u0440\u0435\u0448\u043A\u0430
+plugins=\u041F\u0440\u0438\u0441\u0442\u0430\u0432\u043A\u0438
+options=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+defaults=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438
+clean=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435
+rename=\u041F\u0440\u0435\u0438\u043C\u0435\u043D\u0443\u0432\u0430\u043D\u0435
+fret=\u041F\u0440\u0430\u0433\u0447\u0435
+position=\u041F\u043E\u0437\u0438\u0446\u0438\u044F
+name=\u0418\u043C\u0435
+author=\u0410\u0432\u0442\u043E\u0440
+version=\u0412\u0435\u0440\u0441\u0438\u044F
+description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+info=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F
+configure=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u0432\u0430\u043D\u0435
+url=\u0418\u043D\u0442\u0435\u0440\u043D\u0435\u0442 \u0430\u0434\u0440\u0435\u0441
+
+file=\u0424\u0430\u0439\u043B
+file.new=\u041D\u043E\u0432
+file.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+file.save=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435
+file.save-as=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u043A\u0430\u0442\u043E
+file.save-changes-question=\u041F\u0435\u0441\u0435\u043D\u0442\u0430 \u0438\u043C\u0430 \u043D\u0435\u0437\u0430\u043F\u0430\u0437\u0435\u043D\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u0438.\n\u0416\u0435\u043B\u0430\u0435\u0442\u0435 \u043B\u0438 \u0434\u0430 \u0433\u0438 \u0437\u0430\u043F\u0430\u0437\u0438\u0442\u0435?
+file.exit=\u0418\u0437\u0445\u043E\u0434
+file.export=\u0418\u0437\u043D\u0430\u0441\u044F\u043D\u0435
+file.export-midi=\u0418\u0437\u043D\u0430\u0441\u044F\u043D\u0435 \u0432 MIDI
+file.export-pdf=\u0418\u0437\u043D\u0430\u0441\u044F\u043D\u0435 \u0432 PDF
+file.print=\u041F\u0435\u0447\u0430\u0442
+file.print-preview=\u041F\u0440\u0435\u0433\u043B\u0435\u0434 \u0437\u0430 \u043F\u0435\u0447\u0430\u0442
+file.import=\u0412\u043D\u0430\u0441\u044F\u043D\u0435
+file.import-midi=\u0412\u043D\u0430\u0441\u044F\u043D\u0435 \u043E\u0442 MIDI
+file.export-ascii=\u0418\u0437\u043D\u0430\u0441\u044F\u043D\u0435 \u0432 ASCII
+file.history=\u0418\u0441\u0442\u043E\u0440\u0438\u044F
+file.open-url=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u0430\u0434\u0440\u0435\u0441
+file.open.error=\u041D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u043E\u0442\u0432\u043E\u0440\u0438: {0}
+file.save.error=\u041D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0437\u0430\u043F\u0430\u0437\u0438: {0}
+file.import.error=\u041D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0432\u043D\u0435\u0441\u0435: {0}
+file.export.error=\u041D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0441\u0435 \u0438\u0437\u043D\u0435\u0441\u0435: {0}
+file.overwrite-question=\u0422\u0430\u043A\u044A\u0432 \u0444\u0430\u0439\u043B \u0432\u0435\u0447\u0435 \u0441\u044A\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430. \u0416\u0435\u043B\u0430\u0435\u0442\u0435 \u043B\u0438 \u0434\u0430 \u0433\u043E \u043F\u0440\u0435\u0437\u0430\u043F\u0438\u0448\u0435\u0442\u0435?
+
+edit.menu=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435
+edit.undo=\u041E\u0442\u043C\u044F\u043D\u0430
+edit.redo=\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+edit.copy=\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u0435
+edit.from=\u041E\u0442
+edit.to=\u0414\u043E
+edit.all-tracks=\u0412\u0441\u0438\u0447\u043A\u0438 \u043F\u0438\u0441\u0442\u0438
+edit.paste=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435
+edit.paste.count=Paste Count
+edit.paste.replace-mode=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435 \u0432 \u0442\u0435\u043A\u0443\u0449\u0438\u044F \u0442\u0430\u043A\u0442
+edit.paste.insert-mode=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435 \u0432 \u043D\u043E\u0432 \u0442\u0430\u043A\u0442
+edit.delete=\u0418\u0437\u0442\u0440\u0438\u0432\u0430\u043D\u0435
+edit.cut=\u0418\u0437\u0440\u044F\u0437\u0432\u0430\u043D\u0435
+edit.mouse-mode-selection=\u0420\u0435\u0436\u0438\u043C \u043D\u0430 \u0438\u0437\u0431\u0438\u0440\u0430\u043D\u0435
+edit.mouse-mode-edition=Score Edition Mode
+edit.not-natural-key=\u0420\u0435\u0436\u0438\u043C \u0434\u0438\u0435\u0437/\u0431\u0435\u043C\u043E\u043B
+edit.voice-1=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0433\u043B\u0430\u0441 1
+edit.voice-2=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0433\u043B\u0430\u0441 2
+
+view=\u0418\u0437\u0433\u043B\u0435\u0434
+view.layout=\u041F\u043E\u0434\u0440\u0435\u0434\u0431\u0430
+view.layout.page=\u041F\u043E\u0434\u0440\u0435\u0434\u0431\u0430 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430
+view.layout.linear=\u041B\u0438\u043D\u0435\u0439\u043D\u0430 \u043F\u043E\u0434\u0440\u0435\u0434\u0431\u0430
+view.layout.compact=\u041A\u043E\u043C\u043F\u0430\u043A\u0442\u043D\u0430
+view.layout.multitrack=\u041C\u043D\u043E\u0433\u043E\u043F\u0438\u0441\u0442\u043E\u0432\u0430
+view.layout.chord-style=\u0421\u0442\u0438\u043B \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+view.layout.chord-name=\u0418\u043C\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+view.layout.chord-diagram=\u0414\u0438\u0430\u0433\u0440\u0430\u043C\u0430 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+view.layout.score-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0430
+view.layout.tablature-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u0431\u043B\u0430\u0442\u0443\u0440\u0430
+view.show-mixer=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0441\u043C\u0435\u0441\u0438\u0442\u0435\u043B
+view.show-fretboard=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0433\u0440\u0438\u0444
+view.show-piano=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0430\u043D\u043E
+view.show-matrix=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043C\u0430\u0442\u0440\u0438\u0446\u0430
+view.show-transport=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043B\u0435\u044A\u0440
+
+fretboard.direction=\u041F\u043E\u0441\u043E\u043A\u0430
+fretboard.right-mode=\u0414\u0435\u0441\u0435\u043D \u0440\u0435\u0436\u0438\u043C
+fretboard.left-mode=\u041B\u044F\u0432 \u0440\u0435\u0436\u0438\u043C
+fretboard.background-color=\u0424\u043E\u043D\u043E\u0432 \u0446\u0432\u044F\u0442
+fretboard.display-note-text=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u0442\u0435\u043A\u0441\u0442 \u043D\u0430 \u043D\u043E\u0442\u0430
+fretboard.display-scale-text=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u0442\u0435\u043A\u0441\u0442\u0430 \u043D\u0430 \u0433\u0430\u043C\u0430\u0442\u0430
+fretboard.font=\u0428\u0440\u0438\u0444\u0442
+fretboard.fretpoint-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u043F\u0440\u0430\u0433\u0447\u0435
+fretboard.note-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u043D\u043E\u0442\u0430
+fretboard.scale-note-color=Scale Note Color
+fretboard.settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043D\u0430 \u0433\u0440\u0438\u0444
+fretboard.string-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u0441\u0442\u0440\u0443\u043D\u0430
+fretboard.settings.options=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+
+piano.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u043F\u0438\u0430\u043D\u043E
+piano.natural-key-color=Natural Key Color
+piano.not-natural-key-color=Unnatural Key Color
+piano.note-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u043D\u043E\u0442\u0430
+piano.scale-note-color=Scale Note Color
+piano.settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043D\u0430 \u043F\u0438\u0430\u043D\u043E
+
+matrix.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u043C\u0430\u0442\u0440\u0438\u0446\u0430
+matrix.grids=\u0411\u0440\u043E\u0439 \u043C\u0440\u0435\u0436\u0438
+matrix.border-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0446\u0430
+matrix.font=\u0428\u0440\u0438\u0444\u0442
+matrix.foreground-color=\u0426\u0432\u044F\u0442 \u0437\u0430 \u043F\u0440\u0435\u0434\u0435\u043D \u043F\u043B\u0430\u043D
+matrix.line-color-1=\u0426\u0432\u044F\u0442 \u0437\u0430 \u043D\u0435\u0447\u0435\u0442\u0435\u043D \u0440\u0435\u0434
+matrix.line-color-2=\u0426\u0432\u044F\u0442 \u0437\u0430 \u0447\u0435\u0442\u0435\u043D \u0440\u0435\u0434
+matrix.line-color-over=\u0426\u0432\u044F\u0442 \u043F\u0440\u0438 \u043F\u0440\u0435\u043C\u0438\u043D\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u043C\u0438\u0448\u043A\u0430\u0442\u0430 \u043E\u0442\u0433\u043E\u0440\u0435
+matrix.note-color=\u0426\u0432\u044F\u0442 \u043D\u0430 \u043D\u043E\u0442\u0430
+matrix.play-note-color=\u0426\u0432\u044F\u0442 \u0437\u0430 \u0438\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435 \u043D\u0430 \u043D\u043E\u0442\u0430
+matrix.position-color=\u0426\u0432\u044F\u0442 \u0437\u0430 \u043F\u043E\u0437\u0438\u0446\u0438\u044F
+matrix.settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u043D\u0430 \u043C\u0430\u0442\u0440\u0438\u0446\u0430
+
+composition=\u041A\u043E\u043C\u043F\u043E\u0437\u0438\u0446\u0438\u044F
+composition.timesignature=Time Signature
+composition.timesignature.Numerator=Numerator
+composition.timesignature.denominator=Denominator
+composition.timesignature.to-the-end=\u0414\u043E \u043A\u0440\u0430\u044F
+composition.tempo=\u0422\u0435\u043C\u043F\u043E
+composition.tempo-percent=\u041F\u0440\u043E\u0446\u0435\u043D\u0442
+composition.tempo.invalid=\u041D\u0435\u0432\u0430\u043B\u0438\u0434\u043D\u043E \u0442\u0435\u043C\u043F\u043E
+composition.tempo.start-to-end=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043D\u0430 \u0442\u043E\u0432\u0430 \u0442\u0435\u043C\u043F\u043E \u043A\u044A\u043C \u0446\u044F\u043B\u0430\u0442\u0430 \u043F\u0435\u0441\u0435\u043D
+composition.tempo.position-to-end=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043D\u0430 \u0442\u043E\u0432\u0430 \u0442\u0435\u043C\u043F\u043E \u0434\u043E \u043A\u0440\u0430\u044F
+composition.tempo.position-to-next=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043D\u0430 \u0442\u043E\u0432\u0430 \u0442\u0435\u043C\u043F\u043E \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+composition.properties=\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430
+composition.name=\u0418\u043C\u0435
+composition.artist=\u0418\u0437\u043F\u044A\u043B\u043D\u0438\u0442\u0435\u043B
+composition.album=\u0410\u043B\u0431\u0443\u043C
+composition.author=\u0410\u0432\u0442\u043E\u0440
+composition.date=\u0414\u0430\u0442\u0430
+composition.copyright=\u0410\u0432\u0442\u043E\u0440\u0441\u043A\u0438 \u043F\u0440\u0430\u0432\u0430
+composition.writer=Tab Creator
+composition.transcriber=\u0422\u0440\u0430\u043D\u0441\u043A\u0440\u0438\u0431\u0438\u0440\u0430\u043D\u043E \u043E\u0442
+composition.comments=\u041A\u043E\u043C\u0435\u043D\u0442\u0430\u0440\u0438
+composition.tripletfeel=Triplet Feel
+composition.clef=\u041A\u043B\u044E\u0447
+composition.clef.treble=\u0412\u0438\u0441\u043E\u043A\u0438
+composition.clef.bass=\u0411\u0430\u0441
+composition.clef.tenor=\u0422\u0435\u043D\u043E\u0440
+composition.clef.alto=\u0410\u043B\u0442
+composition.clef.to-the-end=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043D\u0430 \u0442\u043E\u0437\u0438 \u043A\u043B\u044E\u0447 \u0434\u043E \u043A\u0440\u0430\u044F
+composition.keysignature=Key Signature
+composition.keysignature.natural=\u041D\u0430\u0442\u0443\u0440\u0430\u043B\u0435\u043D
+composition.keysignature.sharp-1=1 \u0434\u0438\u0435\u0437
+composition.keysignature.sharp-2=2 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-3=3 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-4=4 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-5=5 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-6=6 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.sharp-7=7 \u0434\u0438\u0435\u0437\u0430
+composition.keysignature.flat-1=1 \u0431\u0435\u043C\u043E\u043B
+composition.keysignature.flat-2=3 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-3=3 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-4=4 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-5=5 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-6=6 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.flat-7=7 \u0431\u0435\u043C\u043E\u043B\u0430
+composition.keysignature.to-the-end=Apply this key signature to the end
+composition.tripletfeel=Triplet Feel
+composition.tripletfeel.none=No Triplet Feel
+composition.tripletfeel.eighth=Triplet 8th
+composition.tripletfeel.sixteenth=Triplet 16th
+composition.tripletfeel.to-the-end=Apply this triplet feel to the end
+
+help=\u041F\u043E\u043C\u043E\u0449
+help.help=\u041F\u043E\u043C\u043E\u0449
+help.doc=\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044F
+help.about=\u041E\u0442\u043D\u043E\u0441\u043D\u043E
+help.about.license=\u041B\u0438\u0446\u0435\u043D\u0437
+help.about.authors=\u0410\u0432\u0442\u043E\u0440\u0438
+help.about.description=\u041E\u043F\u0438\u0441\u0430\u043D\u0438\u0435
+
+track=\u041F\u0438\u0441\u0442\u0430
+track.number=N\u00B0
+track.name=\u0418\u043C\u0435
+track.color=\u0426\u0432\u044F\u0442
+track.first=\u041F\u044A\u0440\u0432\u0430 \u043F\u0438\u0441\u0442\u0430
+track.last=\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.previous=\u041F\u0440\u0435\u0434\u0438\u0448\u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.next=\u0421\u043B\u0435\u0434\u0432\u0430\u0449\u0430 \u043F\u0438\u0441\u0442\u0430
+track.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.clone=\u0414\u0443\u0431\u043B\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+track.move-up=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0433\u043E\u0440\u0435
+track.move-down=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0434\u043E\u043B\u0443
+track.instrument=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442
+track.properties=\u0421\u0432\u043E\u0439\u0441\u0442\u0432\u0430
+track.properties.general=\u041E\u0431\u0449\u0438
+track.name.default-percussion-name=\u041F\u0435\u0440\u043A\u0443\u0441\u0438\u044F
+track.lyrics=\u0421\u0442\u0438\u0445\u043E\u0432\u0435
+track.solo=\u0421\u043E\u043B\u043E
+track.mute=\u0411\u0435\u0437 \u0437\u0432\u0443\u043A
+
+lyric.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0441\u0442\u0438\u0445\u043E\u0432\u0435
+
+measure=\u0422\u0430\u043A\u0442
+measure.first=\u041F\u044A\u0440\u0432\u0438 \u0442\u0430\u043A\u0442
+measure.last=\u041F\u043E\u0441\u043B\u0435\u0434\u0435\u043D \u0442\u0430\u043A\u0442
+measure.previous=\u041F\u0440\u0435\u0434\u0438\u0448\u0435\u043D \u0442\u0430\u043A\u0442
+measure.next=\u0421\u043B\u0435\u0434\u0432\u0430\u0449 \u0442\u0430\u043A\u0442
+measure.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+measure.add.count=Add Count
+measure.add-before-current-position=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442 \u043F\u0440\u0435\u0434\u0438 \u0442\u0435\u043A\u0443\u0449\u0430\u0442\u0430 \u043F\u043E\u0437\u0438\u0446\u0438\u044F
+measure.add-after-current-position=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442 \u0441\u043B\u0435\u0434 \u0442\u0435\u043A\u0443\u0449\u0430\u0442\u0430 \u043F\u043E\u0437\u0438\u0446\u0438\u044F
+measure.add-at-end=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442 \u0432 \u043A\u0440\u0430\u044F
+measure.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+measure.copy=\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+measure.paste=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+measure.clean=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+
+duration=\u041F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+duration.whole=\u0426\u044F\u043B\u0430
+duration.half=\u041F\u043E\u043B\u043E\u0432\u0438\u043D\u0430
+duration.quarter=\u0427\u0435\u0442\u0432\u044A\u0440\u0442\u0438\u043D\u0430
+duration.eighth=\u041E\u0441\u043C\u0438\u043D\u0430
+duration.sixteenth=\u0428\u0435\u0441\u0442\u043D\u0430\u0439\u0441\u0435\u0442\u0438\u043D\u0430
+duration.thirtysecond=\u0422\u0440\u0438\u0434\u0435\u0441\u0435\u0442\u0438\u0432\u0442\u043E\u0440\u0438\u043D\u0430
+duration.sixtyfourth=\u0428\u0435\u0441\u0442\u0434\u0435\u0441\u0435\u0442\u0438\u0447\u0435\u0442\u0432\u044A\u0440\u0442\u0438\u043D\u0430
+duration.dotted=\u0423\u0434\u044A\u043B\u0436\u0435\u043D\u0430
+duration.doubledotted=\u0414\u0432\u043E\u0439\u043D\u043E \u0443\u0434\u044A\u043B\u0436\u0435\u043D\u0430
+duration.division-type=\u0422\u0440\u0438\u043E\u043B\u0430
+
+dynamic=\u0414\u0438\u043D\u0430\u043C\u0438\u043A\u0430
+dynamic.piano-pianissimo=\u041F\u0438\u0430\u043D\u043E-\u043F\u0438\u0430\u043D\u0438\u0441\u0438\u043C\u043E
+dynamic.pianissimo=\u041F\u0438\u0430\u043D\u0438\u0441\u0438\u043C\u043E
+dynamic.piano=\u041F\u0438\u0430\u043D\u043E
+dynamic.mezzo-piano=\u041C\u0435\u0446\u043E-\u043F\u0438\u0430\u043D\u043E
+dynamic.mezzo-forte=\u041C\u0435\u0446\u043E-\u0444\u043E\u0440\u0442\u0435
+dynamic.forte=\u0424\u043E\u0440\u0442\u0435
+dynamic.fortissimo=\u0424\u043E\u0440\u0442\u0438\u0441\u0438\u043C\u043E
+dynamic.forte-fortissimo=\u0424\u043E\u0440\u0442\u0435-\u0444\u043E\u0440\u0442\u0438\u0441\u0438\u043C\u043E
+
+effects=\u0415\u0444\u0435\u043A\u0442\u0438
+effects.vibrato=\u0412\u0438\u0431\u0440\u0430\u0442\u043E
+effects.bend=\u041F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+effects.deadnote=\u0413\u043B\u0443\u0445\u0430 \u043D\u043E\u0442\u0430
+effects.slide=\u0413\u043B\u0438\u0441\u0430\u043D\u0434\u043E
+effects.hammer=\u0424\u043E\u0440\u0448\u043B\u0430\u0433  (\u043F\u043E\u0447\u0443\u043A\u0432\u0430\u043D\u0435/\u0438\u0437\u0434\u044A\u0440\u043F\u0432\u0430\u043D\u0435)
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=\u041F\u0440\u0438\u0433\u043B\u0443\u0448\u0435\u043D\u0430 \u043D\u043E\u0442\u0430
+effects.accentuatednote=\u0410\u043A\u0446\u0435\u043D\u0442\u0438\u0440\u0430\u043D\u0430 \u043D\u043E\u0442\u0430
+effects.heavyaccentuatednote=\u0421\u0438\u043B\u043D\u043E \u0430\u043A\u0446\u0435\u043D\u0442\u0438\u0440\u0430\u043D\u0430 \u043D\u043E\u0442\u0430
+effects.harmonic=\u0424\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.grace=\u0424\u0438\u043E\u0440\u0438\u0442\u0443\u0440\u0430 
+effects.grace-editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0444\u0438\u043E\u0440\u0438\u0442\u0443\u0440\u0430
+effects.grace.before-beat=\u041F\u0440\u0435\u0434\u0438 \u0443\u0434\u0430\u0440
+effects.grace.on-beat=\u041F\u0440\u0438 \u0443\u0434\u0430\u0440
+effects.grace.transition=\u041F\u0440\u0435\u0445\u043E\u0434
+effects.grace.transition-none=\u0411\u0435\u0437
+effects.grace.transition-bend=\u041F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+effects.grace.transition-slide=\u0413\u043B\u0438\u0441\u0430\u043D\u0434\u043E
+effects.grace.transition-hammer=\u0424\u043E\u0440\u0448\u043B\u0430\u0433
+effects.trill=\u0422\u0440\u0438\u043B\u0435\u0440
+effects.trill-editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0442\u0440\u0438\u043B\u0435\u0440
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=\u0417\u0430\u0433\u043B\u0443\u0448\u0430\u0432\u0430\u043D\u0435 \u0441 \u0434\u043B\u0430\u043D
+effects.staccato=\u0421\u0442\u0430\u043A\u0430\u0442\u043E
+effects.tapping=\u041F\u043E\u0442\u0443\u043F\u0432\u0430\u043D\u0435
+effects.slapping=\u041F\u043B\u044F\u0441\u043A\u0430\u043D\u0435 (\u0441\u043B\u0430\u043F\u0438\u043D\u0433)
+effects.popping=\u041F\u043E\u043F\u0438\u043D\u0433
+effects.fade-in=Fade In  
+effects.harmonic-editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.harmonic.type-of-harmonic=\u0422\u0438\u043F \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.harmonic.natural=\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043D \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.harmonic.artificial=\u0418\u0437\u043A\u0443\u0441\u0442\u0432\u0435\u043D \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=\u0424\u043B\u0430\u0436\u043E\u043B\u0435\u0442 \u0441 \u043F\u043E\u0442\u0443\u043F\u0432\u0430\u043D\u0435
+effects.harmonic.tapped.left-hand=\u041B\u044F\u0432\u0430 \u0440\u044A\u043A\u0430
+effects.harmonic.tapped.right-hand=\u0414\u044F\u0441\u043D\u0430 \u0440\u044A\u043A\u0430
+effects.harmonic.pinch=\u0424\u043B\u0430\u0436\u043E\u043B\u0435\u0442 \u0441 \u043F\u043E\u0434\u0440\u044A\u043F\u0432\u0430\u043D\u0435
+effects.harmonic.semi=\u041F\u043E\u043B\u0443\u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+
+bend.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u043F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+bend.bend=\u041F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+bend.bend-release=\u041A\u0438\u0442\u0430\u0440\u043D\u043E \u0432\u0438\u0431\u0440\u0430\u0442\u043E
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=\u041F\u043B\u0435\u044A\u0440
+transport.start=\u0418\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435
+transport.stop=\u0421\u0442\u043E\u043F
+transport.pause=\u041F\u0430\u0443\u0437\u0430
+transport.first=\u041F\u044A\u0440\u0432\u0430
+transport.last=\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0430
+transport.previous=\u041F\u0440\u0435\u0434\u0438\u0448\u043D\u0430
+transport.next=\u0421\u043B\u0435\u0434\u0432\u0430\u0449\u0430
+transport.metronome=\u041C\u0435\u0442\u0440\u043E\u043D\u043E\u043C
+transport.mode=\u0420\u0435\u0436\u0438\u043C \u0434\u0430 \u0438\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435
+transport.mode.simple=\u041F\u0440\u043E\u0441\u0442 \u0440\u0435\u0436\u0438\u043C
+transport.mode.simple.tempo-percent=\u041F\u0440\u043E\u0446\u0435\u043D\u0442 \u043E\u0442 \u0442\u0435\u043C\u043F\u043E\u0442\u043E
+transport.mode.simple.loop=\u0426\u0438\u043A\u043B\u0438\u0447\u043D\u043E \u0438\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435
+transport.mode.trainer=\u0422\u0440\u0435\u043D\u0438\u0440\u043E\u0432\u044A\u0447\u0435\u043D \u0440\u0435\u0436\u0438\u043C
+transport.mode.trainer.increment-description=\u041D\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u043D\u0435 \u0441
+transport.mode.loop-range=\u041E\u0431\u0445\u0432\u0430\u0442 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+transport.mode.loop-range.from=\u0418\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435 \u043E\u0442 \u0442\u0430\u043A\u0442
+transport.mode.loop-range.from-default=\u041E\u0442 \u043D\u0430\u0447\u0430\u043B\u043E\u0442\u043E
+transport.mode.loop-range.to=\u0418\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435 \u0434\u043E \u0442\u0430\u043A\u0442
+transport.mode.loop-range.to-default=\u0414\u043E \u043A\u0440\u0430\u044F
+transport.set-loop-start=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430\u0447\u0430\u043B\u043E \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+transport.set-loop-end=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043A\u0440\u0430\u0439 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+
+instruments.volume=\u0423\u0441\u0438\u043B\u0432\u0430\u043D\u0435
+instrument=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=\u0421\u0438\u043B\u0430 \u043D\u0430 \u0437\u0432\u0443\u043A\u0430
+instrument.balance=\u0411\u0430\u043B\u0430\u043D\u0441
+instrument.chorus=\u0425\u043E\u0440
+instrument.reverb=\u0415\u0445\u043E
+instrument.phaser=\u0424\u0430\u0437\u0435\u0440
+instrument.tremolo=\u0422\u0440\u0435\u043C\u043E\u043B\u043E
+
+
+repeat.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+repeat.close=\u0417\u0430\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+repeat.alternative=\u0410\u043B\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F
+repeat.alternative.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0430\u043B\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u043D\u0438 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F
+repetitions=\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F
+repeat.number-of-repetitions=\u0411\u0440\u043E\u0439 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u044F
+
+beat=\u0423\u0434\u0430\u0440
+beat.clean=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440
+beat.voice.remove-unused=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043D\u0435\u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u043D \u0433\u043B\u0430\u0441
+beat.voice-up=Stems Up
+beat.voice-down=Stems Down
+beat.voice-auto=Auto Stems
+beat.stroke=Stroke
+beat.stroke-up=\u0423\u0434\u0430\u0440 \u043D\u0430\u0433\u043E\u0440\u0435
+beat.stroke-down=\u0423\u0434\u0430\u0440 \u043D\u0430\u0434\u043E\u043B\u0443
+beat.move-left=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u0435\u0434\u0438\u043D \u0443\u0434\u0430\u0440 \u043D\u0430\u043B\u044F\u0432\u043E
+beat.move-right=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u0435\u0434\u0438\u043D \u0443\u0434\u0430\u0440 \u043D\u0430\u0434\u044F\u0441\u043D\u043E
+beat.move-custom=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u043F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440
+beat.move-custom.dialog.title=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u043F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435
+beat.move-custom.dialog.direction-tip=\u041F\u043E\u0441\u043E\u043A\u0430 \u043D\u0430 \u043F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435
+beat.move-custom.dialog.move-1.tip=Major Move
+beat.move-custom.dialog.move-2.tip=Fine Move
+beat.move-custom.dialog.direction=\u041F\u043E\u0441\u043E\u043A\u0430
+beat.move-custom.dialog.direction.right=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0434\u044F\u0441\u043D\u043E
+beat.move-custom.dialog.direction.left=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u043B\u044F\u0432\u043E
+beat.move-custom.dialog.count=\u0411\u0440\u043E\u0439
+beat.move-custom.dialog.duration=\u041F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+beat.move-custom.dialog.duration.type=Dotted/Double-Dotted
+beat.move-custom.dialog.duration.type.normal=\u0411\u0435\u0437
+beat.move-custom.dialog.duration.division-type=Division Type
+beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet)
+
+note=\u041D\u043E\u0442\u0430
+note.semitone-up=\u041F\u043E\u043B\u0443\u0442\u043E\u043D \u043D\u0430\u0433\u043E\u0440\u0435
+note.semitone-down=\u041F\u043E\u043B\u0443\u0442\u043E\u043D \u043D\u0430\u0434\u043E\u043B\u0443
+note.shift-up=\u041D\u0430\u0433\u043E\u0440\u0435
+note.shift-down=\u041D\u0430\u0434\u043E\u043B\u0443
+note.tiednote=Tied Note
+note.deadnote=\u0413\u043B\u0443\u0445\u0430 \u043D\u043E\u0442\u0430
+
+insert.chord=\u0412\u043C\u044A\u043A\u0432\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+chord.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+chord=\u0410\u043A\u043E\u0440\u0434
+chord.name=\u0418\u043C\u0435
+chord.bass=\u0411\u0430\u0441
+chord.custom=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u0438 \u0430\u043A\u043E\u0440\u0434
+chord.custom.name-empty-error=\u0418\u043C\u0435\u0442\u043E \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0430 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0434\u0430 \u0435 \u043F\u0440\u0430\u0437\u043D\u043E.
+chord.custom.name-exist-error=\u0412\u0435\u0447\u0435 \u0441\u044A\u0449\u0435\u0441\u0442\u0432\u0443\u0432\u0430 \u0430\u043A\u043E\u0440\u0434 \u0441 \u0442\u043E\u0432\u0430 \u0438\u043C\u0435.
+chord.settings.tip=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+chord.settings.type=\u0422\u0438\u043F
+chord.settings.type.most-common=\u041D\u0430\u0439-\u0447\u0435\u0441\u0442\u043E \u0441\u0440\u0435\u0449\u0430\u043D\u0438
+chord.settings.type.inversions=Inversions
+chord.settings.type.close-voiced=Close Voiced
+chord.settings.type.open-voiced=Open Voiced
+chord.settings.open-chords=Open Chords
+chord.settings.chords-to-display=\u0410\u043A\u043E\u0440\u0434\u0438 \u0437\u0430 \u043F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435
+chord.settings.search-frets=\u0422\u044A\u0440\u0441\u0435\u043D\u0435 \u043D\u0430 \u043F\u0440\u0430\u0433\u0447\u0435\u0442\u0430
+chord.settings.minimum-fret=\u041C\u0438\u043D
+chord.settings.maximum-fret=\u041C\u0430\u043A\u0441
+
+
+tuning=\u0424\u0438\u043D\u0438 \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+tuning.offset=\u041E\u0442\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435
+tuning.strings=\u0421\u0442\u0440\u0443\u043D\u0438
+tuning.strings.transpose=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0437\u0430\u0441\u0435\u0433\u043D\u0430\u0442\u0438\u0442\u0435 \u043D\u043E\u0442\u0438.
+tuning.strings.transpose.try-keep-strings=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043D\u043E\u0442\u0438\u0442\u0435 \u043D\u0430 \u0441\u044A\u0449\u0430\u0442\u0430 \u0441\u0442\u0440\u0443\u043D\u0430
+tuning.strings.transpose.apply-to-chords=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0438
+
+language=\u0415\u0437\u0438\u043A
+
+choose-color=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0446\u0432\u044F\u0442
+
+settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+settings.config=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u0432\u0430\u043D\u0435 \u043D\u0430 TuxGuitar
+settings.config.language=\u0415\u0437\u0438\u043A
+settings.config.language.choose=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0435\u0437\u0438\u043A
+settings.config.styles=\u0421\u0442\u0438\u043B\u043E\u0432\u0435
+settings.config.styles.general=\u041E\u0431\u0449\u0438 \u0441\u0442\u0438\u043B\u043E\u0432\u0435
+settings.config.styles.printer=\u0421\u0442\u0438\u043B\u043E\u0432\u0435 \u043D\u0430 \u043F\u0440\u0438\u043D\u0442\u0435\u0440
+settings.config.styles.font.default=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u0435\u043D \u0448\u0440\u0438\u0444\u0442
+settings.config.styles.font.note=\u0428\u0440\u0438\u0444\u0442 \u0437\u0430 \u043D\u043E\u0442\u0438\u0442\u0435
+settings.config.styles.font.lyric=\u0428\u0440\u0438\u0444\u0442 \u0437\u0430 \u0441\u0442\u0438\u0445\u043E\u0432\u0435\u0442\u0435
+settings.config.styles.font.text=\u0428\u0440\u0438\u0444\u0442 \u043D\u0430 \u0442\u0435\u043A\u0441\u0442\u0430
+settings.config.styles.font.time-signature=Time Signature Font
+settings.config.styles.font.printer-default=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u0435\u043D \u0448\u0440\u0438\u0444\u0442 \u0437\u0430 \u043F\u0440\u0438\u043D\u0442\u0435\u0440\u0430
+settings.config.styles.font.printer-note=Printer Note Font
+settings.config.styles.font.printer-time-signature=Printer Time Signature Font
+settings.config.styles.color.score-note=Score Note Color
+settings.config.styles.color.tab-note=Tab Note Color
+settings.config.styles.color.play-note=Play Note Color
+settings.config.apply-changes-question=\u0416\u0435\u043B\u0430\u0435\u0442\u0435 \u043B\u0438 \u0434\u0430 \u0441\u0435 \u043F\u0440\u0438\u043B\u043E\u0436\u0430\u0442 \u043F\u0440\u043E\u043C\u0435\u043D\u0438\u0442\u0435?
+settings.config.sound=\u0417\u0432\u0443\u043A
+settings.config.main=\u041E\u0431\u0449\u0438
+settings.config.main.window-title=\u0417\u0430\u0433\u043B\u0430\u0432\u0438\u0435 \u043D\u0430 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446
+settings.config.main.window-title.help=\u0421\u043B\u0435\u0434\u043D\u0438\u0442\u0435 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0438 \u0449\u0435 \u0431\u044A\u0434\u0430\u0442 \u0437\u0430\u043C\u0435\u043D\u0435\u043D\u0438 \u0432 \u0437\u0430\u0433\u043B\u0430\u0432\u0438\u0435\u0442\u043E \u043D\u0430 \u043F\u0440\u043E\u0437\u043E\u0440\u0435\u0446\u0430:
+settings.config.main.window-title.var.description.appname=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0438\u043C\u0435\u0442\u043E \u043D\u0430 \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0435\u0442\u043E: TuxGuitar
+settings.config.main.window-title.var.description.appversion=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0432\u0435\u0440\u0441\u0438\u044F\u0442\u0430 \u043D\u0430 TuxGuitar.
+settings.config.main.window-title.var.description.filename=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0438\u043C\u0435\u0442\u043E \u043D\u0430 \u043E\u0442\u0432\u043E\u0440\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B
+settings.config.main.window-title.var.description.filepath=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u043F\u044A\u0442\u044F \u043D\u0430 \u043E\u0442\u0432\u043E\u0440\u0435\u043D\u0438\u044F \u0444\u0430\u0439\u043B
+settings.config.main.window-title.var.description.songname=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0438\u043C\u0435\u0442\u043E \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+settings.config.main.window-title.var.description.songauthor=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0430\u0432\u0442\u043E\u0440\u0430 \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+settings.config.main.window-title.var.description.songalbum=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0430\u043B\u0431\u0443\u043C\u0430 \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+settings.config.main.window-title.var.description.songartist=\u0422\u0430\u0437\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u043B\u0438\u0432\u0430 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044F \u0438\u0437\u043F\u044A\u043B\u043D\u0438\u0442\u0435\u043B\u044F \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+settings.config.main.options=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+settings.config.main.splash-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043B\u043E\u0433\u043E \u043F\u0440\u0438 \u0441\u0442\u0430\u0440\u0442\u0438\u0440\u0430\u043D\u0435
+settings.config.main.table.auto-size.enabled=\u0412\u043A\u043B\u044E\u0447\u0432\u0430\u043D\u0435 \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E \u043E\u0440\u0430\u0437\u043C\u0435\u0440\u044F\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u0431\u043B\u0438\u0446\u0430
+settings.config.styles.color.lines=\u0426\u0432\u044F\u0442 \u043D\u0430 \u0445\u043E\u0440\u0438\u0437\u043E\u043D\u0442\u0430\u043B\u043D\u0438 \u043B\u0438\u043D\u0438\u0438
+settings.config.toolbars=\u041B\u0435\u043D\u0442\u0438 \u0441 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438
+settings.config.toolbars.tip=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 \u043D\u0430 \u043B\u0435\u043D\u0442\u0438\u0442\u0435 \u0441 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438
+settings.config.toolbars.list=\u041D\u0430\u043B\u0438\u0447\u043D\u0438 \u043B\u0435\u043D\u0442\u0438 \u0441 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438
+settings.config.toolbars.move-up=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0433\u043E\u0440\u0435
+settings.config.toolbars.move-down=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430\u0434\u043E\u043B\u0443
+settings.config.skin=\u041E\u0431\u043B\u0438\u043A
+settings.config.skin.choose=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u043E\u0431\u043B\u0438\u043A
+settings.keybindings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u0432\u0430\u043D\u0435 \u043D\u0430 \u043A\u043B\u0430\u0432\u0438\u0448\u043D\u0438\u0442\u0435 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u0438...
+
+key-bindings-editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u043A\u043B\u0430\u0432\u0438\u0448\u043D\u0438 \u043A\u043E\u043C\u0431\u0438\u043D\u0430\u0446\u0438\u0438
+key-bindings-editor-action-select=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435
+key-bindings-editor-action-column=\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u044F
+key-bindings-editor-shortcut-column=\u041A\u043B\u0430\u0432\u0438\u0448\u0438
+key-bindings-editor-push-a-key=\u041D\u0430\u0442\u0438\u0441\u043D\u0435\u0442\u0435 \u043A\u043B\u0430\u0432\u0438\u0448
+key-bindings-editor-save-question=\u0418\u043C\u0430 \u043D\u0435\u0437\u0430\u043F\u0430\u0437\u0435\u043D\u0438 \u043F\u0440\u043E\u043C\u0435\u043D\u0438, \u0436\u0435\u043B\u0430\u0435\u0442\u0435 \u043B\u0438 \u0434\u0430 \u0438\u0437\u043B\u0435\u0437\u0435\u0442\u0435 \u0431\u0435\u0437 \u0434\u0430 \u0433\u0438 \u0437\u0430\u043F\u0430\u0437\u0438\u0442\u0435?
+
+key-bindings-editor-override=\u0411\u044A\u0440\u0437\u0438\u044F\u0442 \u043A\u043B\u0430\u0432\u0438\u0448 \u0432\u0435\u0447\u0435 \u0441\u0435 \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430! \u0421\u0438\u0433\u0443\u0440\u043D\u0438 \u043B\u0438 \u0441\u0442\u0435, \u0447\u0435 \u0436\u0435\u043B\u0430\u0435\u0442\u0435 \u0434\u0430 \u0433\u043E \u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u0442\u0435?
+
+print.print=\u041F\u0435\u0447\u0430\u0442
+print.dialog=\u041F\u0435\u0447\u0430\u0442
+print.service=\u0423\u0441\u043B\u0443\u0433\u0430
+print.service.name=\u0418\u043C\u0435
+print.service.status=\u0421\u044A\u0441\u0442\u043E\u044F\u043D\u0438\u0435
+print.service.type=\u0422\u0438\u043F
+print.service.info=\u0418\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F
+print.range=\u041E\u0431\u0445\u0432\u0430\u0442
+print.range.all-pages=\u0412\u0441\u0438\u0447\u043A\u043E
+print.range.pages=\u0421\u0442\u0440\u0430\u043D\u0438\u0446\u0438
+print.range.pages-to=\u0414\u043E
+print.copies=\u041A\u043E\u043F\u0438\u044F
+print.copies-number=\u0411\u0440\u043E\u0439 \u043A\u043E\u043F\u0438\u044F
+print.print-to-file=\u041F\u0435\u0447\u0430\u0442 \u043A\u044A\u043C \u0444\u0430\u0439\u043B
+print.file-chooser=\u0418\u0437\u0431\u043E\u0440
+print-header.default-song-name=\u041D\u0435\u043E\u0437\u0430\u0433\u043B\u0430\u0432\u0435\u043D\u043E
+print-header.default-song-author=\u0410\u043D\u043E\u043D\u0438\u043C\u043D\u043E
+
+print.preview=\u041F\u0440\u0435\u0433\u043B\u0435\u0434 \u0437\u0430 \u043F\u0435\u0447\u0430\u0442
+print.preview.page-of=Of
+
+marker=\u041C\u0430\u0440\u043A\u0435\u0440
+marker.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u043C\u0430\u0440\u043A\u0435\u0440
+marker.list=\u0421\u043F\u0438\u0441\u044A\u043A \u0441 \u043C\u0430\u0440\u043A\u0435\u0440\u0438
+marker.first=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u044A\u0440\u0432\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+marker.last=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+marker.next=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+marker.previous=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u0440\u0435\u0434\u0438\u0448\u043D\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+
+export.tablature-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u0431\u043B\u0430\u0442\u0443\u0440\u0430
+export.score-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0430
+export.chord-name-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0438\u043C\u0435\u043D\u0430 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0438
+export.chord-diagram-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u0438 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0438
+export.black-and-white=\u0427\u0435\u0440\u043D\u043E-\u0431\u044F\u043B \u0440\u0435\u0436\u0438\u043C
+
+scale=\u0413\u0430\u043C\u0430
+scale.list=\u0421\u043F\u0438\u0441\u044A\u043A \u0441 \u043C\u0430\u0440\u043A\u0435\u0440\u0438
+
+text.insert=\u0412\u043C\u044A\u043A\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0435\u043A\u0441\u0442
+text.editor=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u043D\u0430 \u0442\u0435\u043A\u0441\u0442
+text.text=\u0422\u0435\u043A\u0441\u0442
+
+tools=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0438
+tools.scale=\u0421\u043F\u0438\u0441\u044A\u043A \u0441 \u043C\u0430\u0440\u043A\u0435\u0440\u0438
+tools.browser=\u0411\u0440\u0430\u0443\u0437\u044A\u0440
+tools.plugins=\u041F\u0440\u0438\u0441\u0442\u0430\u0432\u043A\u0438
+tools.shortcuts=\u041F\u0440\u0435\u043F\u0440\u0430\u0442\u043A\u0438
+tools.settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+
+tools.transpose=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435
+tools.transpose.semitones=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043B\u0443\u0442\u043E\u043D\u043E\u0432\u0435
+tools.transpose.apply-to-track=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0432\u0441\u0438\u0447\u043A\u0438 \u0442\u0430\u043A\u0442\u043E\u0432\u0435
+tools.transpose.apply-to-measure=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u0441\u0430\u043C\u043E \u043D\u0430 \u0442\u043E\u0437\u0438 \u0442\u0430\u043A\u0442
+tools.transpose.apply-to-all-tracks=\u041F\u0440\u0438\u043B\u0430\u0433\u0430\u043D\u0435 \u043A\u044A\u043C \u0432\u0441\u0438\u0447\u043A\u0438 \u043F\u0438\u0441\u0442\u0438
+tools.transpose.try-keep-strings=\u041F\u0440\u0438 \u0432\u044A\u0437\u043C\u043E\u0436\u043D\u043E\u0441\u0442 \u043D\u043E\u0442\u0438\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0437\u0430\u043F\u0430\u0437\u0432\u0430\u0442 \u043D\u0430 \u0441\u044A\u0449\u0430\u0442\u0430 \u0441\u0442\u0440\u0443\u043D\u0430
+tools.transpose.apply-to-chords=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434\u0438
+
+browser.dialog=\u0411\u0440\u0430\u0443\u0437\u044A\u0440
+browser.menu.file=\u0424\u0430\u0439\u043B
+browser.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+browser.exit=\u0418\u0437\u0445\u043E\u0434
+browser.menu.collection=\u041A\u043E\u043B\u0435\u043A\u0446\u0438\u044F
+browser.menu.go=\u041E\u0442\u0438\u0432\u0430\u043D\u0435
+browser.collection.select=\u0418\u0437\u0431\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043A\u043E\u043B\u0435\u043A\u0446\u0438\u044F
+browser.collection.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+browser.collection.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435
+browser.collection.close=\u0417\u0430\u0442\u0432\u0430\u0440\u044F\u043D\u0435
+browser.collection.new=\u041D\u043E\u0432
+browser.go-root=\u0414\u043E\u043C\u0430\u0448\u043D\u0430 \u043F\u0430\u043F\u043A\u0430
+browser.go-back=\u041D\u0430\u0437\u0430\u0434
+browser.refresh=\u041E\u0431\u043D\u043E\u0432\u044F\u0432\u0430\u043D\u0435
+browser.factory.fs.name=\u0424\u0430\u0439\u043B\u043E\u0432\u0430 \u0441\u0438\u0441\u0442\u0435\u043C\u0430
+browser.collection.fs.name=\u0418\u043C\u0435
+browser.collection.fs.path=\u041F\u0430\u043F\u043A\u0430
+browser.collection.fs.editor-title=File System Collection
+browser.collection.fs.editor-tip=\u0418\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u043F\u0430\u043F\u043A\u0430 \u0441 \u0432\u0430\u0448\u0430\u0442\u0430 \u043A\u043E\u043B\u0435\u043A\u0446\u0438\u044F
+browser.collection.fs.invalid-path=\u041C\u043E\u043B\u044F \u0438\u0437\u0431\u0435\u0440\u0435\u0442\u0435 \u0432\u0430\u043B\u0438\u0434\u043D\u0430 \u043F\u0430\u043F\u043A\u0430
+
+midi.port=MIDI \u043F\u043E\u0440\u0442
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=\u041D\u0435 \u0435 \u043D\u0430\u043B\u0438\u0447\u0435\u043D.
+plugin.column.name=\u0418\u043C\u0435 \u043D\u0430 \u043F\u0440\u0438\u0441\u0442\u0430\u0432\u043A\u0430\u0442\u0430
+plugin.column.enabled=\u0412\u043A\u043B\u044E\u0447\u0435\u043D\u043E
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0444\u0430\u0439\u043B
+edit.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435
+property.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u043E
+track.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+duration.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+beat.items=Beat Items
+composition.items=Composition Items
+repeat.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+transport.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u043B\u0435\u044A\u0440
+marker.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043C\u0430\u0440\u043A\u0435\u0440
+insert.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0432\u043C\u044A\u043A\u0432\u0430\u043D\u0435
+layout.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u043F\u043E\u0434\u0440\u0435\u0434\u0431\u0430
+view.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0438\u0437\u0433\u043B\u0435\u0434
+effect.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0435\u0444\u0435\u043A\u0442
+dynamic.items=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043D\u0430 \u0434\u0438\u043D\u0430\u043C\u0438\u043A\u0430
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=\u041D\u043E\u0432 \u0444\u0430\u0439\u043B
+action.file.open=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u0444\u0430\u0439\u043B
+action.file.open-url=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u0430\u0434\u0440\u0435\u0441
+action.file.save=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435
+action.file.save-as=\u0417\u0430\u043F\u0430\u0437\u0432\u0430\u043D\u0435 \u043A\u0430\u0442\u043E
+action.file.print=\u041F\u0435\u0447\u0430\u0442
+action.file.print-preview=\u041F\u0440\u0435\u0433\u043B\u0435\u0434 \u0437\u0430 \u043F\u0435\u0447\u0430\u0442
+action.file.exit=\u0418\u0437\u0445\u043E\u0434 \u043E\u0442 TuxGuitar
+action.edit.undo=\u041E\u0442\u043C\u044F\u043D\u0430
+action.edit.redo=\u041F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+action.edit.voice-1=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0433\u043B\u0430\u0441 1
+action.edit.voice-2=\u0418\u0437\u0431\u043E\u0440 \u043D\u0430 \u0433\u043B\u0430\u0441 2
+action.composition.change-time-signature=Change Time Signature
+action.composition.change-tempo=\u041F\u0440\u043E\u043C\u044F\u043D\u0430 \u043D\u0430 \u0442\u0435\u043C\u043F\u043E\u0442\u043E
+action.composition.change-info=\u041F\u0440\u043E\u043C\u044F\u043D\u0430 \u043D\u0430 \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044F \u0437\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+action.composition.change-clef=\u041F\u0440\u043E\u043C\u044F\u043D\u0430 \u043D\u0430 \u043A\u043B\u044E\u0447
+action.composition.change-key-signature=Change Key Signature
+action.composition.change-triplet-feel=Change Triplet Feel
+action.view.layout-set-page=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043F\u043E\u0434\u0440\u0435\u0434\u0431\u0430 \u043D\u0430 \u0441\u0442\u0440\u0430\u043D\u0438\u0446\u0430
+action.view.layout-set-linear=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043B\u0438\u043D\u0435\u0439\u043D\u0430 \u043F\u043E\u0434\u0440\u0435\u0434\u0431\u0430
+action.view.layout-set-multitrack=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043C\u043D\u043E\u0433\u043E\u043F\u0438\u0441\u0442\u043E\u0432 \u0440\u0435\u0436\u0438\u043C
+action.view.layout-set-score-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0430\u0440\u0442\u0438\u0442\u0443\u0440\u0430
+action.view.layout-set-tablature-enabled=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u0431\u043B\u0430\u0442\u0443\u0440\u0430
+action.view.layout-set-compact=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043A\u043E\u043C\u043F\u0430\u043A\u0442\u0435\u043D \u0440\u0435\u0436\u0438\u043C
+action.view.layout-set-chord-diagram-enabled=\u0412\u043A\u043B\u044E\u0447\u0432\u0430\u043D\u0435 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u0430 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+action.view.layout-set-chord-name-enabled=\u0412\u043A\u043B\u044E\u0447\u0432\u0430\u043D\u0435 \u0438\u043C\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+action.view.show-fretboard=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0433\u0440\u0438\u0444
+action.view.show-piano=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0430\u043D\u043E
+action.view.show-matrix=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043C\u0430\u0442\u0440\u0438\u0446\u0430
+action.view.show-mixer=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u0441\u043C\u0435\u0441\u0438\u0442\u0435\u043B
+action.view.show-transport=\u041F\u043E\u043A\u0430\u0437\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043B\u0435\u044A\u0440
+action.track.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.clone=\u041A\u043B\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.go-first=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u044A\u0440\u0432\u0430\u0442\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.go-last=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0430\u0442\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.go-next=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0430\u0442\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.go-previous=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u0440\u0435\u0434\u0438\u0448\u043D\u0430\u0442\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.lyrics=\u0420\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u0430\u043D\u0435 \u0441\u0442\u0438\u0445\u043E\u0432\u0435\u0442\u0435 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.properties=\u041F\u0440\u043E\u043C\u044F\u043D\u0430 \u0441\u0432\u043E\u0439\u0441\u0442\u0432\u0430\u0442\u0430 \u043D\u0430 \u043F\u0438\u0441\u0442\u0430
+action.track.move-down=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043F\u0438\u0441\u0442\u0430\u0442\u0430 \u043D\u0430\u0434\u043E\u043B\u0443
+action.track.move-up=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043F\u0438\u0441\u0442\u0430\u0442\u0430 \u043D\u0430\u0433\u043E\u0440\u0435
+action.measure.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.remove=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.copy=\u041A\u043E\u043F\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.paste=\u041F\u043E\u0441\u0442\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.clean=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0430\u043A\u0442
+action.measure.go-first=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u044A\u0440\u0432\u0438\u044F \u0442\u0430\u043A\u0442
+action.measure.go-last=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u044F \u0442\u0430\u043A\u0442
+action.measure.go-next=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0438\u044F \u0442\u0430\u043A\u0442
+action.measure.go-previous=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u0440\u0435\u0434\u0438\u0448\u0435\u043D \u0442\u0430\u043A\u0442
+action.beat.general.remove-unused-voice=\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043D\u0435\u0438\u0437\u043F\u043E\u043B\u0437\u0432\u0430\u043D \u0433\u043B\u0430\u0441
+action.beat.general.voice-up=Set Stems Up
+action.beat.general.voice-down=Set Stems Down
+action.beat.general.voice-auto=Set Auto Stems
+action.beat.general.set-stroke-up=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440 \u043D\u0430\u0433\u043E\u0440\u0435
+action.beat.general.set-stroke-down=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440 \u043D\u0430\u0434\u043E\u043B\u0443
+action.beat.general.move-left=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u0435\u0434\u0438\u043D \u0443\u0434\u0430\u0440 \u043D\u0430\u043B\u044F\u0432\u043E
+action.beat.general.move-right=\u041F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0435\u0434\u0438\u043D \u0443\u0434\u0430\u0440 \u043D\u0430\u0434\u044F\u0441\u043D\u043E
+action.beat.general.move-custom=\u041F\u043E\u0442\u0440\u0435\u0431\u0438\u0442\u0435\u043B\u0441\u043A\u043E \u043F\u0440\u0435\u043C\u0435\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440
+action.note.general.clean-beat=\u0418\u0437\u0447\u0438\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u0430\u0440
+action.note.general.decrement-semitone=\u041D\u0430\u043C\u0430\u043B\u044F\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043B\u0443\u0442\u043E\u043D
+action.note.general.increment-semitone=\u041D\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043B\u0443\u0442\u043E\u043D
+action.note.general.shift-down=\u041D\u0430\u0434\u043E\u043B\u0443
+action.note.general.shift-up=\u041D\u0430\u0433\u043E\u0440\u0435
+action.note.general.tied=Add/Remove tied
+action.note.duration.set-whole=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0446\u044F\u043B\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-half=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043B\u043E\u0432\u0438\u043D\u043A\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-quarter=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0447\u0435\u0442\u0432\u044A\u0440\u0442\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-eighth=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u043E\u0441\u043C\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-sixteenth=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0448\u0435\u0441\u0442\u043D\u0430\u0439\u0441\u0435\u0442\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-thirty-second=\u0417\u0430\u0434\u0430\u0432\u0430 \u043D\u0430 \u0442\u0440\u0438\u0434\u0435\u0441\u0435\u0442\u0432\u0442\u043E\u0440\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.set-sixty-fourth=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430 \u0448\u0435\u0441\u0442\u0435\u0434\u0435\u0441\u0442\u0432\u0442\u043E\u0440\u0438\u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442
+action.note.duration.change-dotted=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0443\u0434\u044A\u043B\u0436\u0435\u043D\u0430 \u043D\u043E\u0442\u0430
+action.note.duration.change-double-dotted=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0434\u0432\u043E\u0439\u043D\u043E \u0443\u0434\u044A\u043B\u0436\u0435\u043D\u0430 \u043D\u043E\u0442\u0430
+action.note.duration.change-division-type=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0440\u0438\u043E\u043B\u0430
+action.note.duration.decrement-duration=\u041D\u0430\u043C\u0430\u043B\u044F\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\u0442\u0430
+action.note.duration.increment-duration=\u041D\u0430\u0440\u0430\u0441\u0442\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0440\u043E\u0434\u044A\u043B\u0436\u0438\u0442\u0435\u043B\u043D\u043E\u0441\u0442\u0442\u0430
+action.note.effect.change-vibrato=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0432\u0438\u0431\u0440\u0430\u0442\u043E
+action.note.effect.change-bend=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u0440\u0442\u0430\u043C\u0435\u043D\u0442\u043E
+action.note.effect.change-slide=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0433\u043B\u0438\u0441\u0430\u043D\u0434\u043E
+action.note.effect.change-hammer=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0444\u043E\u0440\u0448\u043B\u0430\u0433
+action.note.effect.change-accentuated=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u0446\u0435\u043D\u0442\u0438\u0440\u0430\u043D\u0435
+action.note.effect.change-dead=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0433\u043B\u0443\u0445\u0430 \u043D\u043E\u0442\u0430
+action.note.effect.change-fade-in=Add/Remove fade in
+action.note.effect.change-ghost=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u0440\u0438\u0433\u043B\u0443\u0448\u0435\u043D\u0430 \u043D\u043E\u0442\u0430
+action.note.effect.change-grace=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0444\u0438\u043E\u0440\u0438\u0442\u0443\u0440\u0430
+action.note.effect.change-harmonic=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u041F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0444\u043B\u0430\u0436\u043E\u043B\u0435\u0442
+action.note.effect.change-heavy-accentuated=Add/Remove heavy accentuated
+action.note.effect.change-palm-mute=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0437\u0430\u0433\u043B\u0443\u0448\u0430\u0432\u0430\u043D\u0435 \u0441 \u0434\u043B\u0430\u043D
+action.note.effect.change-popping=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u043F\u0438\u043D\u0433
+action.note.effect.change-slapping=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043B\u044F\u0441\u043A\u0430\u043D\u0435
+action.note.effect.change-staccato=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0441\u0442\u0430\u043A\u0430\u0442\u043E
+action.note.effect.change-tapping=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u043F\u043E\u0442\u0443\u043F\u0432\u0430\u043D\u0435
+action.note.effect.change-tremolo-bar=Add/Remove tremolo bar
+action.note.effect.change-tremolo-picking=Add/Remove tremolo picking
+action.note.effect.change-trill=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435/\u043F\u0440\u0435\u043C\u0430\u0445\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0440\u0438\u043B\u0435\u0440
+action.insert.open-repeat=\u041E\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u043F\u043E\u0432\u043E\u0440\u0435\u043D\u0438\u0435
+action.insert.close-repeat=\u0417\u0430\u0442\u0432\u0430\u0440\u044F\u043D\u0435 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435
+action.insert.repeat-alternative=Repeat Alternative
+action.insert.chord=\u0412\u043C\u044A\u043A\u0432\u0430\u043D\u0435 \u043D\u0430 \u0430\u043A\u043E\u0440\u0434
+action.insert.text=\u0412\u043C\u044A\u043A\u0432\u0430\u043D\u0435 \u043D\u0430 \u0442\u0435\u043A\u0441\u0442
+action.marker.add=\u0414\u043E\u0431\u0430\u0432\u044F\u043D\u0435 \u043D\u0430 \u043C\u0430\u0440\u043A\u0435\u0440
+action.marker.go-next=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u0441\u043B\u0435\u0434\u0432\u0430\u0449\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+action.marker.go-previous=\u041E\u0442\u0438\u0432\u0430\u043D\u0435 \u0434\u043E \u043F\u0440\u0435\u0434\u0438\u0448\u043D\u0438\u044F \u043C\u0430\u0440\u043A\u0435\u0440
+action.transport.play=\u0418\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435 \u043D\u0430 \u043F\u0435\u0441\u0435\u043D\u0442\u0430
+action.transport.stop=\u0421\u043F\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u0438\u0437\u043F\u044A\u043B\u043D\u0435\u043D\u0438\u0435\u0442\u043E
+action.transport.mode=\u0420\u0435\u0436\u0438\u043C \u043D\u0430 \u043F\u043B\u0435\u044A\u0440\u0430
+action.transport.metronome=\u041C\u0435\u0442\u0440\u043E\u043D\u043E\u043C
+action.transport.set-loop-start=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043D\u0430\u0447\u0430\u043B\u043E \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+action.transport.set-loop-end=\u0417\u0430\u0434\u0430\u0432\u0430\u043D\u0435 \u043A\u0440\u0430\u0439 \u043D\u0430 \u043F\u043E\u0432\u0442\u043E\u0440\u0435\u043D\u0438\u0435\u0442\u043E
+action.tools.browser=\u0411\u0440\u0430\u0443\u0437\u044A\u0440
+action.tools.transpose=\u0422\u0440\u0430\u043D\u0441\u043F\u043E\u043D\u0438\u0440\u0430\u043D\u0435 \u043D\u0430 \u043D\u043E\u0442\u0438
+action.settings.configure=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438
+action.help.doc=\u041F\u043E\u043C\u043E\u0449
diff --git a/TuxGuitar/share/lang/messages_ca.properties b/TuxGuitar/share/lang/messages_ca.properties
index 0db51d9..3e1a7a0 100644
--- a/TuxGuitar/share/lang/messages_ca.properties
+++ b/TuxGuitar/share/lang/messages_ca.properties
@@ -183,15 +183,15 @@ help.about.authors=Autors
 help.about.description=Descripci\u00F3
 
 mixer=Mesclador
-mixer.volume=Guany
-mixer.track.solo=Solo
-mixer.track.mute=Silenci
-mixer.channel.volume=Volum
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=Balan\u00E7
-mixer.channel.free=Lliure
-mixer.channel.link=Enlla\u00E7
+instruments.volume=Guany
+
+instrument=Instrument
+instrument.volume=Volum
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balan\u00E7
+instrument.free=Lliure
+instrument.link=Enlla\u00E7
 
 track=Pista
 track.number=Nombre
@@ -211,6 +211,8 @@ track.move-up=Mou amunt
 track.move-down=Mou avall
 track.name.default-percussion-name=Percussi\u00F3
 track.lyrics=Edita les lletres
+track.solo=Solo
+track.mute=Silenci
 
 lyric.editor=Editor de lletres
 
@@ -390,9 +392,6 @@ repeat.number-of-repetitions=Nombre de repeticions
 repeat.alternative=Repetici\u00F3 alternativa
 repeat.alternative.editor=Edita repetici\u00F3 alternativa
 
-instrument=Instrument
-instrument.instrument=Instrument
-instrument.percussion-track=Pista de percussi\u00F3
 
 tuning=Afinaci\u00F3
 tuning.strings=Cordes
@@ -461,8 +460,6 @@ key-bindings-editor-action-column=Accions
 key-bindings-editor-shortcut-column=Tecles
 key-bindings-editor-push-a-key=Premeu una tecla
 key-bindings-editor-save-question=S'han trobat canvis sense desar; tot i aix\u00F2 voleu sortir?
-key-bindings-editor-reserved-title=Tecla reservada
-key-bindings-editor-reserved-message=Ho sentim, aquesta \u00E9s una tecla reservada del sistema.
 key-bindings-editor-override=Ja hi ha una acci\u00F3 per a aquestes tecles, voleu sobreescriure-la?
 
 print.print=Imprimir
diff --git a/TuxGuitar/share/lang/messages_cs.properties b/TuxGuitar/share/lang/messages_cs.properties
index 42a95ef..b260e83 100644
--- a/TuxGuitar/share/lang/messages_cs.properties
+++ b/TuxGuitar/share/lang/messages_cs.properties
@@ -96,15 +96,13 @@ help=N\u00e1pov\u011bda
 help.help=N\u00e1pov\u011bda
 help.about=O aplikaci..
 
-mixer.volume=Hlasitost (gain)
-mixer.track.solo=S\u00f3lo
-mixer.track.mute=Ztlumit
-mixer.channel.volume=Hlasitost
-mixer.channel.channel=Kan\u00e1l
-mixer.channel.effect-channel=EC
-mixer.channel.balance=Vyv\u00e1\u017een\u00ed
-mixer.channel.free=Voln\u00fd
-mixer.channel.link=Propojit
+instruments.volume=Hlasitost (gain)
+instrument.volume=Hlasitost
+instrument.channel=Kan\u00e1l
+instrument.effect-channel=EC
+instrument.balance=Vyv\u00e1\u017een\u00ed
+instrument.free=Voln\u00fd
+instrument.link=Propojit
 
 track=Stopa
 track.number=N
@@ -123,6 +121,9 @@ track.properties=Vlastnosti
 track.properties.general=Obecn\u00e9
 track.name.default-percussion-name=Perkuse
 track.lyrics=Text p\u00edsn\u011b
+track.solo=S\u00f3lo
+track.mute=Ztlumit
+
 tunning.offset=Offset
 lyric.editor=Editor textu p\u00edsn\u011b
 
@@ -308,9 +309,6 @@ key-bindings-editor-action-column=Akce
 key-bindings-editor-shortcut-column=Kl\u00e1vesy
 key-bindings-editor-push-a-key=Zm\u00e1\u010dkn\u011bte kl\u00e1vesu
 key-bindings-editor-save-question=N\u011bkter\u00e9 zm\u011bny nejsou ulo\u017eeny, opravdu chcete odej\u00edt bez ulo\u017een\u00ed zm\u011bn?
-
-key-bindings-editor-reserved-title=Vyhrazen\u00e1 zkratka
-key-bindings-editor-reserved-message=Je mi l\u00edto, ale tato zkratka je vyhrazena.
 key-bindings-editor-override=Zkratka ji\u017e pou\u017eita! Jste si jist(a), \u017ee ji chcete pou\u017e\u00edt ?
 
 
diff --git a/TuxGuitar/share/lang/messages_de.properties b/TuxGuitar/share/lang/messages_de.properties
index 48a78a8..4cc2e95 100644
--- a/TuxGuitar/share/lang/messages_de.properties
+++ b/TuxGuitar/share/lang/messages_de.properties
@@ -1,103 +1,155 @@
-es=Spanish
-en=English
-fr=French
-pl=Polish
-de=Deutsch
-pt=Portuguese
-
 ok=Ok
-cancel=Abbruch
+cancel=Abbrechen
 yes=Ja
 no=Nein
 add=Hinzuf\u00FCgen
+edit=Editieren
 remove=Entfernen
-save=Speichern
+save=Speicher
 exit=Beenden
+close=Schlie\u00DFen
+choose=Ausw\u00E4hlen
 color=Farbe
 title=Titel
-edit=Bearbeiten
 go=Start
-error=Fehler
 warning=Warnung
+error=Fehler
 plugins=Plugins
-choose=Ausw\u00E4hlen
 options=Optionen
 defaults=Standardwerte
-clean=Aufr\u00E4umen
+clean=L\u00F6schen
 rename=Umbenennen
 fret=Bund
 position=Position
-
-tuxguitar.title=Tux-Guitar
+name=Name
+author=Autor
+version=Version
+description=Beschreibung
+info=Info
+configure=Konfigurieren
+url=URL
 
 file=Datei
 file.new=Neu
-file.open=\u00D6ffnen
+file.open=\u00d6ffnen
 file.save=Speichern
-file.save-as=Speichern als
+file.save-as=Speichern unter
+file.save-changes-question=Das Lied wurde seit dem letzten Speichern ver\u00E4ndert.\nWollen Sie die \u00c4nderungen vor dem Beenden speichern?
 file.exit=Beenden
 file.export=Exportieren
-file.export-midi=Export als Midi
-file.export-pdf=Export als PDF
+file.export-midi=Als MIDI exportieren
+file.export-pdf=Als PDF exportieren
 file.print=Drucken
 file.print-preview=Druckvorschau
 file.import=Importieren
-file.import-midi=Midi importieren
-file.export-ascii=ASCII exportieren
+file.import-midi=MIDI importieren
+file.export-ascii=Als ASCII exportieren
 file.history=Zuletzt ge\u00F6ffnete Dateien
-file.overwrite-question=Diese Datei existiert bereits. soll sie \u00FCberschrieben werden?
+file.open-url=URL \u00F6ffnen
+file.open.error=Kann folgende Datei nicht \u00F6ffnen: {0}
+file.save.error=Kann folgende Datei nicht speichern: {0}
+file.import.error=Kann folgende Datei nicht importieren: {0}
+file.export.error=Kann folgende Datei nicht exportieren: {0}
+file.overwrite-question=Diese Datei existiert bereits. Soll sie \u00FCberschrieben werden?
 
+edit.menu=Editieren
 edit.undo=R\u00FCckg\u00E4ngig
-edit.redo=Wiederholen
+edit.redo=Wiederherstellen
 edit.copy=Kopieren
-edit.from=aus
-edit.to=nach
-edit.all-tracks=Alle Tracks
+edit.from=von
+edit.to=bis
+edit.all-tracks=Alle Spuren
 edit.paste=Einf\u00FCgen
+edit.paste.count=Anzahl
 edit.paste.replace-mode=Einf\u00FCgen im aktuellen Takt
-edit.paste.insert-mode=einf\u00FCgen in neuen Takt
+edit.paste.insert-mode=Einf\u00FCgen in neuen Takt
 edit.delete=L\u00F6schen
 edit.cut=Ausschneiden
-edit.menu=Editieren
 edit.mouse-mode-selection=Selektionsmodus
 edit.mouse-mode-edition=Partitureditor Modus
 edit.not-natural-key=Erh\u00F6ht/Vermindert Modus
-
+edit.voice-1=Stimme 1 ausw\u00E4hlen
+edit.voice-2=Stimme 2 ausw\u00E4hlen
 
 view=Ansicht
-
 view.layout=Layout
 view.layout.page=Seitenlayout
 view.layout.linear=Lineares Layout
-view.layout.multitrack=Mehrspur
+view.layout.compact=Kompakte Anzeige
+view.layout.multitrack=Mehrspuransicht
+view.layout.chord-style=Akkordanzeige
+view.layout.chord-name=Akkordname
+view.layout.chord-diagram=Akkorddiagramm
 view.layout.score-enabled=Partitur anzeigen
-
+view.layout.tablature-enabled=Tabulatur anzeigen
+view.show-mixer=Mixer anzeigen
+view.show-fretboard=Griffbrett anzeigen
+view.show-piano=Klaviatur anzeigen
+view.show-matrix=Matrix Editor anzeigen
 view.show-transport=Transportfenster anzeigen
-view.show-mixer=Zeige Mixer
-view.show-piano=Zeige Klaviatur
-view.show-fretboard=Zeige Griffbrett
+
+fretboard.direction=Direction
 fretboard.right-mode=Rechtsh\u00E4nder
 fretboard.left-mode=Linksh\u00E4nder
+fretboard.background-color=Hintergrundfarbe
+fretboard.display-note-text=Notenwerte anzeigen
+fretboard.display-scale-text=Skalenwerte anzeigen
+fretboard.font=Schriftart
+fretboard.fretpoint-color=Bundfarbe
+fretboard.note-color=Notenfarbe
+fretboard.scale-note-color=Skalenfarbe
+fretboard.settings=Griffbretteinstellungen
+fretboard.string-color=Saitenfarbe
+fretboard.settings.options=Optionen
+
+piano.editor=Klaviatur
+piano.natural-key-color=Ganztonfarbe
+piano.not-natural-key-color=Halbtonfarbe
+piano.note-color=Notenfarbe
+piano.scale-note-color=Skalenfarbe
+piano.settings=Klaviatureinstellungen
+
+matrix.editor=Matrix Editor
+matrix.grids=Taktunterteilung
+matrix.border-color=Rahmenfarbe
+matrix.font=Schriftart
+matrix.foreground-color=Vordergrundfarbe
+matrix.line-color-1=Farbe der ungeraden Reihen
+matrix.line-color-2=Farbe der geraden Reihen
+matrix.line-color-over=Farbe der Reihe unter der Maus
+matrix.note-color=Notenfarbe
+matrix.play-note-color=Fabe der abgespielten Note
+matrix.position-color=Positionsfarbe
+matrix.settings=Matrix Einstellungen
 
 composition=Komposition
-composition.timesignature=Zeit Signatur
-composition.timesignature.Numerator=Numerator
-composition.timesignature.denominator=Denominator
-composition.timesignature.to-the-end=Zum Ende
+composition.timesignature=Taktart
+composition.timesignature.Numerator=Z\u00E4hler
+composition.timesignature.denominator=Nenner
+composition.timesignature.to-the-end=Diese Taktart bis zum Liedende benutzen
 composition.tempo=Tempo
 composition.tempo-percent=Prozent
+composition.tempo.invalid=Unzul\u00E4ssiges Tempo
+composition.tempo.start-to-end=Dieses Tempo im ganzen Lied benutzen
+composition.tempo.position-to-end=Dieses Tempo bis zum Liedende benutzen
+composition.tempo.position-to-next=Dieses Tempo bis zum n\u00E4chsten Tempomarker benutzen
 composition.properties=Eigenschaften
 composition.name=Name
-composition.artist=Interpret
+composition.artist=K\u00FCnstler
 composition.album=Album
 composition.author=Autor
-composition.tempo.invalid=Falsches Tempo
+composition.date=Datum
+composition.copyright=Copyright
+composition.writer=Tab Ersteller
+composition.transcriber=Transkribiert von
+composition.comments=Kommentare
+composition.tripletfeel=Triolenfeeling
 composition.clef=Notenschl\u00FCssel
-composition.clef.treble=H\u00F6hen
+composition.clef.treble=Sopran
 composition.clef.bass=Bass
 composition.clef.tenor=Tenor
 composition.clef.alto=Alt
-composition.clef.to-the-end=Diesen Schl\u00FCssel am Ende hinzuf\u00FCgen?
+composition.clef.to-the-end=Diesen Notenschl\u00FCssel bis zum Liedende verwenden
 composition.keysignature=Tonartenschl\u00FCssel
 composition.keysignature.natural=Nat\u00FCrlich
 composition.keysignature.sharp-1=1 Erh\u00F6hungszeichen
@@ -114,28 +166,20 @@ composition.keysignature.flat-4=4 Verminderungszeichen
 composition.keysignature.flat-5=5 Verminderungszeichen
 composition.keysignature.flat-6=6 Verminderungszeichen
 composition.keysignature.flat-7=7 Verminderungszeichen
-composition.keysignature.to-the-end=Diesen Tonartenschl\u00FCssel am Ende hinzuf\u00FCgen?
-composition.tripletfeel=Triplet Gef\u00FChl
-composition.tripletfeel.none=Kein Triplet Gef\u00FChl
-composition.tripletfeel.eighth=Triplet 8el
-composition.tripletfeel.sixteenth=Triplet 16tel
-composition.tripletfeel.to-the-end=Dieses Triplet Gef\u00FChl am Ende hinzuf\u00FCgen ?
-
-
+composition.keysignature.to-the-end=Diesen Tonartenschl\u00FCssel bis zum Liedende verwenden
+composition.tripletfeel=Triolenfeeling
+composition.tripletfeel.none=Kein Triolenfeeling
+composition.tripletfeel.eighth=8el Triolenfeeling
+composition.tripletfeel.sixteenth=16tel Triolenfeeling
+composition.tripletfeel.to-the-end=Dieses Triolenfeeling bis zum Liedende verwenden
 
 help=Hilfe
 help.help=Hilfe
-help.about=\u00DCber dieses Programm
-
-mixer.volume=Lautst\u00E4rke
-mixer.track.solo=Solo
-mixer.track.mute=Stumm
-mixer.channel.volume=Lautst\u00E4rke
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=Balance
-mixer.channel.free=Frei
-mixer.channel.link=Verbindung
+help.doc=Dokumentation
+help.about=\u00dcber Tuxguitar
+help.about.license=Lizenz
+help.about.authors=Autoren
+help.about.description=Beschreibung
 
 track=Spur
 track.number=Nr.
@@ -143,219 +187,278 @@ track.name=Name
 track.color=Farbe
 track.first=Erste Spur
 track.last=Letzte Spur
-track.previous=Vorhergehende Spur
+track.previous=Vorherige Spur
 track.next=N\u00E4chste Spur
 track.add=Spur hinzuf\u00FCgen
 track.remove=Spur entfernen
-track.instrument=Instrument
-track.instrument.empty=MIDI-Instrumentalbank nicht gefunden, bitte tuxguitar mit der lokalen Java Version neu\u00FCbersetzen. 
-track.properties=Eigenschaften
-track.properties.general=Allgeimenes
-track.name.default-percussion-name=Percussions
-track.clone=Spur klonen
+track.clone=Spur duplizieren
 track.move-up=Aufw\u00E4rts bewegen
 track.move-down=Abw\u00E4rts bewegen
-track.lyrics=Lyrics
-lyric.editor=Lyrics Editor
+track.instrument=Instrument 
+track.properties=Eigenschaften
+track.properties.general=Allgemeines
+track.name.default-percussion-name=Schlagzeugspur
+track.lyrics=Liedtext
+track.solo=Solo
+track.mute=Mute
+
+lyric.editor=Liedtext-Editor
 
 measure=Takt
 measure.first=Erster Takt
 measure.last=Letzter Takt
-measure.previous=Vorhergehender Takt
+measure.previous=Vorheriger Takt
 measure.next=N\u00E4chster Takt
 measure.add=Takt hinzuf\u00FCgen
-measure.add-before-current-position=Takt vor aktueller Position hinzuf\u00FCgen
-measure.add-after-current-position=Takt nach aktueller Position hinzuf\u00FCgen
-measure.add-at-end=Takt am Ende hinzuf\u00FCgen
-measure.clean=Takt leeren
-measure.remove=Takt entfernen
+measure.add.count=Anzahl
+measure.add-before-current-position=Takt(e) vor aktueller Position hinzuf\u00FCgen
+measure.add-after-current-position=Takt(e) nach aktueller Position hinzuf\u00FCgen
+measure.add-at-end=Takt(e) am Ende hinzuf\u00FCgen
+measure.remove=Takt l\u00F6schen
 measure.copy=Takt kopieren
 measure.paste=Takt einf\u00FCgen
+measure.clean=Takt leeren
 
-beat=Note
-beat.clean=Schlag leeren
-
-note.tiednote=Tied Note
-note.deadnote=Dead Note
-note.semitone-up=Halbton erh\u00F6hen
-note.semitone-down=Halbton vermindern
-note.shift-up=Schiebe nach oben
-note.shift-down=Schiebe nach unten
-duration=Schlagl\u00E4nge
+duration=Notenl\u00E4nge
 duration.whole=Ganz
 duration.half=Halb
 duration.quarter=Viertel
 duration.eighth=Achtel
 duration.sixteenth=Sechzehntel
-duration.thirtysecond=32-el
-duration.sixtyfourth=64-el
+duration.thirtysecond=32tel
+duration.sixtyfourth=64tel
 duration.dotted=Punktiert
 duration.doubledotted=Doppelt punktiert
-duration.division-type=Tupleto
-chord=Akkord
-chord.name=Akkordname
-chord.custom.name-empty-error=Akkordname kann nicht leer sein!
-chord.custom.name-exist-error=Akkordname existiert bereits.
-dynamic=Dynamisch
+duration.division-type=Triolisch
+
+dynamic=Dynamik
 dynamic.piano-pianissimo=Piano Pianissimo
 dynamic.pianissimo=Pianissimo
 dynamic.piano=Piano
-dynamic.mezzo-piano=Mezzo Piano
-dynamic.mezzo-forte=Mezzo Forte
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
 dynamic.forte=Forte
-dynamic.fortissimo=Fortissimo
+dynamic.fortissimo=Fortissimo 
 dynamic.forte-fortissimo=Forte Fortissimo
+
 effects=Effekte
 effects.vibrato=Vibrato
 effects.bend=Bending
 effects.deadnote=Dead Note
 effects.slide=Slide
 effects.hammer=Hammer-on/Pull-off
-effects.tremolo-bar=Tremolo Leiste
-effects.tremolo-bar-editor=Tremolo Leisteneditor
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
 effects.tremolo-bar.dip=Dip
 effects.tremolo-bar.dive=Dive
-effects.tremolo-bar.release-up=L\u00F6sen aufw\u00E4rts
-effects.tremolo-bar.release-down=L\u00F6sen abw\u00E4rts
-effects.tremolo-bar.inverted-dip=Invertes Dip
-effects.tremolo-bar.return=Zur\u00FCckkehren
-effects.ghostnote=Geisterote
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Ghost Note
 effects.accentuatednote=Akzentuierte Note
-effects.heavyaccentuatednote=Stark aktzentuierte Note
-effects.harmonic=harmonisch
-effects.grace=Grace Note
-effects.grace-editor=Grace Noten Editor
+effects.heavyaccentuatednote=Stark akzentuierte Note
+effects.harmonic=Harmonic
+effects.grace=Vorschlagsnote
+effects.grace-editor=Vorschlageditor
 effects.grace.before-beat=Vor dem Schlag
 effects.grace.on-beat=Auf dem Schlag
-effects.grace.transition=Transition
-effects.grace.transition-none=keine
-effects.grace.transition-bend=Bend
+effects.grace.transition=\u00dcbergang
+effects.grace.transition-none=Keiner
+effects.grace.transition-bend=Bending
 effects.grace.transition-slide=Slide
 effects.grace.transition-hammer=Hammer
 effects.trill=Trill
 effects.trill-editor=Trill Editor
 effects.tremolo-picking=Tremolo Picking
 effects.tremolo-picking-editor=Tremolo Picking Editor
-effects.palm-mute=abged\u00E4mpft
+effects.palm-mute=Abged\u00E4mpft
 effects.staccato=Staccato
 effects.tapping=Tapping
 effects.slapping=Slapping
-effects.popping=Popping
-effects.fade-in=Fade In
-effects.harmonic-editor=Harmonie Editor
-effects.harmonic.type-of-harmonic=Harnmonieart
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
 effects.harmonic.natural=Nat\u00FCrlichhe Harmonie
 effects.harmonic.artificial=K\u00FCnstliche Harmonie
 effects.harmonic.artificial.key-offset=Schl\u00FCsselversatz
-effects.harmonic.tapped=getappte Harmonie
+effects.harmonic.tapped=Tapped Harmonic
 effects.harmonic.tapped.left-hand=Linke Hand
 effects.harmonic.tapped.right-hand=Rechte Hand
-effects.harmonic.pinch=gepinchte Harmonie
-effects.harmonic.semi=Semiharmonie
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
 
 bend.editor=Bending Editor
 bend.bend=Bending
-bend.bend-release=bend/release
-bend.bend-release-bend=bend/release/bend
+bend.bend-release=Bend/Release
+bend.bend-release-bend=Bend/Release/Bend
 bend.prebend=PreBend
 bend.prebend-release=PreBend/Release
 
 transport=Wiedergabe
 transport.start=Start
 transport.stop=Stop
-
-repeat.open=Wiederholung er\u00F6ffnen
-repeat.close=Wiederholung abschliessen
+transport.pause=Pause
+transport.first=Erster Takt
+transport.last=Letzter Takt
+transport.previous=Vorheriger Takt
+transport.next=N\u00E4chster Takt
+transport.metronome=Metronom
+transport.mode=Abspielmodus
+transport.mode.simple=Normaler Modus
+transport.mode.simple.tempo-percent=Prozent des Tempos
+transport.mode.simple.loop=In Schleife abspielen
+transport.mode.trainer=\u00dcbungsmodus
+transport.mode.trainer.increment-description=Erh\u00F6hen um
+transport.mode.loop-range=Schleife
+transport.mode.loop-range.from=Abspielen ab Takt
+transport.mode.loop-range.from-default=Vom Anfang
+transport.mode.loop-range.to=Abspielen bis Takt
+transport.mode.loop-range.to-default=Bis zum Liedende
+transport.set-loop-start=Anfang der Schleife setzen
+transport.set-loop-end=Ende der Schleife setzen
+
+instruments.volume=Gain
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=Volume
+instrument.balance=Balance
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Free
+instrument.link=Link
+
+
+repeat.open=Wiederholung \u00F6ffnen
+repeat.close=Wiederholung schlie\u00dfen
+repeat.alternative=Alternative Endungen
+repeat.alternative.editor=Alternative Endungen editieren
 repetitions=Wiederholungen
 repeat.number-of-repetitions=Anzahl Wiederholungen
 
+beat=Note
+beat.clean=Schlag leeren
+beat.voice.remove-unused=Ungenutzte Stimme entfernen
+beat.voice-up=Notenh\u00E4lse nach oben ausrichten
+beat.voice-down=Notenh\u00E4lse nach unten ausrichten
+beat.voice-auto=Notenh\u00E4lse automatisch ausrichten
+beat.stroke=Stroke
+beat.stroke-up=Aufschlag
+beat.stroke-down=Abschlag
+beat.move-left=Um einen Schlag nach links verschieben
+beat.move-right=Um einen Schlag nach rechts verschieben
+beat.move-custom=Benutzerdefiniert verschieben
+beat.move-custom.dialog.title=Note verschieben
+beat.move-custom.dialog.direction-tip=Richtung
+beat.move-custom.dialog.move-1.tip=Hauptverschiebung
+beat.move-custom.dialog.move-2.tip=Feinverschiebung
+beat.move-custom.dialog.direction=Richtung
+beat.move-custom.dialog.direction.right=Nach rechts verschieben
+beat.move-custom.dialog.direction.left=Nach links verschieben
+beat.move-custom.dialog.count=Anzahl
+beat.move-custom.dialog.duration=Notenwert
+beat.move-custom.dialog.duration.type=Punktiert/Doppelt punktiert
+beat.move-custom.dialog.duration.type.normal=Nicht punktiert
+beat.move-custom.dialog.duration.division-type=Aufteilung
+beat.move-custom.dialog.duration.division-type.normal=Normal (Tuplet)
+
+note=Note
+note.semitone-up=Halbton erh\u00F6hen
+note.semitone-down=Halbton vermindern
+note.shift-up=Saite nach oben
+note.shift-down=Saite nach unten
+note.tiednote=Gebundene Note
+note.deadnote=Dead Note
 
 insert.chord=Akkord einf\u00FCgen
 chord.editor=Akkordeditor
+chord=Akkord
+chord.name=Name
+chord.bass=Bass
+chord.custom=Benutzerdefinierter Akkord
+chord.custom.name-empty-error=Der Akkordname darf nicht leer sein.
+chord.custom.name-exist-error=Der Akkordname existiert bereits.
+chord.settings.tip=Benutzerdefinierte Einstellungen
+chord.settings.type=Typ
+chord.settings.type.most-common=Am h\u00E4ufigsten vorkommende
+chord.settings.type.inversions=Umkehrungen
+chord.settings.type.close-voiced=Geschlossenes Voicing
+chord.settings.type.open-voiced=Offenes Voicing
+chord.settings.open-chords=Offene Akkorde
+chord.settings.chords-to-display=Anzuzeigende Akkorde
+chord.settings.search-frets=Bundsuche
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
 
 instrument=Instrument
 instrument.instrument=Instrument
-instrument.percussion-track=Percussionspur
+instrument.percussion-track=Schlagzeugspur
 
 tuning=Stimmung
-tuning.strings=Saiten
 tuning.offset=Offset
+tuning.strings=Saiten
+tuning.strings.transpose=Betroffene Noten transponieren.
+tuning.strings.transpose.try-keep-strings=Versuche Noten auf der gleichen Saite zu lassen
+tuning.strings.transpose.apply-to-chords=Akkorde transponieren
 
 language=Sprache
 
-choose-color=Bitte eine Farbe ausw\u00E4hlen:
-
+choose-color=Farbe w\u00E4hlen
 
 settings=Einstellungen
-settings.config=tuxguitar konfigurieren
-settings.config.main=Allgemein
-settings.config.main.window-title=Fenster Titel
-settings.config.main.window-title.help=Die folgenden Variablen werden im Fenstertitel ersetzt:
-settings.config.main.window-title.var.description.appname=Diese Variable repr\u00E4sentiert den Applikationsnamen: TuxGuitar
-settings.config.main.window-title.var.description.appversion=Diese Variable repr\u00E4sentiert die Versionsnummer
-settings.config.main.window-title.var.description.filename=Diese Variable repr\u00E4sentiert den offenen Dateinamen
-settings.config.main.window-title.var.description.filepath=Diese Variable repr\u00E4sentiert den Pfad zur offenen Datei
-settings.config.main.window-title.var.description.songname=Diese Variable repr\u00E4sentiert den Songnamen
-settings.config.main.window-title.var.description.songauthor=Diese Variable repr\u00E4sentiert den Autor des Songs
-settings.config.main.window-title.var.description.songalbum=Diese Variable repr\u00E4sentiert das Album des Songs
-settings.config.main.window-title.var.description.songartist=Diese Variable repr\u00E4sentiert den Interpreten des Songs
-settings.config.main.options=Optionen
-settings.config.main.splash-enabled=Er\u00F6ffnungsbildschirm beim Start anzeigen
-settings.config.view=ansicht
-settings.config.view.mode=Layoutansicht
-settings.config.view.size=Fenstergr\u00F6sse
-settings.config.view.size.maximized=Maximal
-settings.config.view.size.width=Breite
-settings.config.view.size.height=H\u00F6he
+settings.config=TuxGuitar konfigurieren
 settings.config.language=Sprache
 settings.config.language.choose=Bitte eine Sprache ausw\u00E4hlen:
-settings.config.styles=Darstellungsstil
-settings.config.styles.font.default=Standardschriftart
-settings.config.styles.font.note=Notenschriftart
-settings.config.styles.font.time-signature=Zeitschl\u00FCssel Schriftart
-settings.config.styles.font.printer-default=Standard Druckerschriftart
-settings.config.styles.font.printer-note=Noten Druckerschriftart
-settings.config.styles.font.printer-time-signature=Drucker Signaturschriftart
-settings.config.styles.color.score-note=Partitur Notenfarbe
-settings.config.styles.color.tab-note=Tabulatur Notenfarbe
-settings.config.styles.color.play-note=Gespielte Notenfarbe
-settings.config.apply-changes-question=Sollen die \u00C4nderungen jetzt angewendet werden ?
 settings.config.styles=Styles
-settings.config.styles.font.default=Standard Schriftart
+settings.config.styles.general=General Styles
+settings.config.styles.printer=Printer Styles
+settings.config.styles.font.default=Standardschriftart
 settings.config.styles.font.note=Notenschriftart
-settings.config.styles.font.time-signature=Z\u00E4hlzeitsignatur Schriftart
+settings.config.styles.font.lyric=Schriftart des Liedtextes
+settings.config.styles.font.text=Textschriftart
+settings.config.styles.font.time-signature=Schriftart der Taktart
 settings.config.styles.font.printer-default=Drucker Standardschriftart
 settings.config.styles.font.printer-note=Drucker Notenschriftart
-settings.config.styles.font.printer-time-signature=Drucker Z\u00E4hlzeitsignaturschriftart
-settings.config.styles.color.score-note=Notenfarbe Partitur
-settings.config.styles.color.tab-note=Notenfarbe Tabulatur
-settings.config.styles.color.play-note=Notenfarbe angespielt
+settings.config.styles.font.printer-time-signature=Drucker Schriftart der Taktart
+settings.config.styles.color.score-note=Partiturfarbe
+settings.config.styles.color.tab-note=Tabulaturfarbe
+settings.config.styles.color.play-note=Farbe der aktuellen Note
+settings.config.apply-changes-question=Sollen die \u00C4nderungen jetzt angewendet werden?
+settings.config.sound=Sound
+settings.config.main=Allgemein
+settings.config.main.window-title=Fenstertitel
+settings.config.main.window-title.help=Die folgenden Variablen werden im Fenstertitel ersetzt:
+settings.config.main.window-title.var.description.appname=Diese Variable repr\u00E4sentiert den Programmnamen: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Diese Variable repr\u00E4sentiert die Versionsnummer
+settings.config.main.window-title.var.description.filename=Diese Variable repr\u00E4sentiert den Namen der ge\u00F6ffneten Datei
+settings.config.main.window-title.var.description.filepath=Diese Variable repr\u00E4sentiert den Pfad zur ge\u00F6ffneten Datei
+settings.config.main.window-title.var.description.songname=Diese Variable repr\u00E4sentiert den Liednamen
+settings.config.main.window-title.var.description.songauthor=Diese Variable repr\u00E4sentiert den Autor des Liedes
+settings.config.main.window-title.var.description.songalbum=Diese Variable repr\u00E4sentiert das Album des Liedes
+settings.config.main.window-title.var.description.songartist=Diese Variable repr\u00E4sentiert den Interpreten des Liedes
+settings.config.main.options=Optionen
+settings.config.main.splash-enabled=Er\u00F6ffnungsbildschirm beim Start anzeigen
+settings.config.main.table.auto-size.enabled=Enable Automatic Table resizing
 settings.config.styles.color.lines=Horizontallinienfarbe
 settings.config.toolbars=Werkzeugleisten
-settings.config.apply-changes-question=Wollen Sie die \u00C4nderungen jetzt anwenden ?
-settings.config.sound=Sound
-settings.config.sound.soundbank=Soundbank
-settings.config.sound.default-soundbank=Standardsoundbank benutzen
-settings.config.sound.custom-soundbank=Eigene Soundbank benutzen
-settings.config.sound.soundbank-restart-message=Sie m\u00FCssen TuxGuitar neustarten, um die \u00C4nderungen zu aktivieren.
-soundbank.error=Soundbank Fehler
-soundbank.error.unavailable=Fehler: Soundbank nicht vorhanden.
-soundbank.error.custom=\u00D6ffnen der eigenen Soundbank fehlgeschlagen.
-
-
-settings.keybindings=Tastaturbelegung
-key-bindings-editor=Tastaturbelegunseditor
+settings.config.toolbars.tip=Ihre Werkzeugleisten anpassen
+settings.config.toolbars.list=Verf\u00FCgbare Werkzeugleisten
+settings.config.toolbars.move-up=Nach oben verschieben
+settings.config.toolbars.move-down=Nach unten verschieben
+settings.config.skin=Themen
+settings.config.skin.choose=W\u00E4hlen Sie Ihr Thema
+settings.keybindings=Tastenkombinationen konfigurieren
+
+key-bindings-editor=Tastaturbelegung
 key-bindings-editor-action-select=Aktion ausw\u00E4hlen:
 key-bindings-editor-action-column=Aktionen
 key-bindings-editor-shortcut-column=Tasten
-key-bindings-editor-push-a-key=Bitte gew\u00FCnschte Taste dr\u00FCcken
+key-bindings-editor-push-a-key=Taste dr\u00FCcken
 key-bindings-editor-save-question=Es gibt ungesicherte \u00C4nderungen, sollen diese verworfen werden?
-
-key-bindings-editor-reserved-title=Reservierte Taste
-key-bindings-editor-reserved-message=Diese Tastenkombination ist bereits belegt.
-key-bindings-editor-override=Diese Tastenkombination ist bereits belegt. Trotzdem benutzen ?
-
-
+key-bindings-editor-override=Diese Tastenkombination ist bereits belegt. Trotzdem benutzen?
 
 print.print=Drucken
 print.dialog=Drucken
@@ -364,31 +467,84 @@ print.service.name=Name
 print.service.status=Status
 print.service.type=Typ
 print.service.info=Info
-print.range=Seitenbereich
+print.range=Bereich
 print.range.all-pages=Alle
 print.range.pages=Seiten
-print.range.pages-to=bis
-print.copies=Kopien
-print.copies-number=Anzahl Kopien
+print.range.pages-to=Bis
+print.copies=Ausdrucke
+print.copies-number=Anzahl der Ausdrucke
 print.print-to-file=In Datei drucken
 print.file-chooser=Ausw\u00E4hlen
 print-header.default-song-name=Unbenannt
-print-header.default-song-author=Anonymer Autor
+print-header.default-song-author=Anonym
+
 print.preview=Druckvorschau
+print.preview.page-of=von
 
 marker=Markierung
 marker.add=Markierung hinzuf\u00FCgen
-marker.list=Markierungen zeigen
-marker.first=Zur ersten Markierung
-marker.last=Zur letzten Markierung
-marker.next=Zur n\u00E4chsten Markierung
-marker.previous=Zur vorhergehenden Markierung
+marker.list=Markierungen auflisten
+marker.first=Gehe zur ersten Markierung
+marker.last=Gehe zur letzten Markierung
+marker.next=Gehe zur n\u00E4chsten Markierung
+marker.previous=Gehe zur vorherigen Markierung
+
+export.tablature-enabled=Tabulatur anzeigen
+export.score-enabled=Partitur anzeigen
+export.chord-name-enabled=Akkordnamen anzeigen
+export.chord-diagram-enabled=Akkorddiagramme anzeigen
+export.black-and-white=Schwarzwei\u00dfmodus
+
+scale=Skalen
+scale.list=Skalenliste
+
+text.insert=Text einf\u00FCgen
+text.editor=Texteditor
+text.text=Text
+
+tools=Tools
+tools.scale=Skalenliste
+tools.browser=Dateisammlungs-Browser
+tools.plugins=Plugins
+tools.shortcuts=Tastenkombinationen
+tools.settings=Einstellungen
+
+tools.transpose=Transponieren
+tools.transpose.semitones=Transponieren um Halbt\u00F6ne
+tools.transpose.apply-to-track=Alle Takte transponieren
+tools.transpose.apply-to-measure=Nur diesen Takt transponieren
+tools.transpose.apply-to-all-tracks=Alle Spuren transponieren
+tools.transpose.try-keep-strings=Versuche Noten auf der gleichen Saite zu lassen (wenn m\u00F6glich)
+tools.transpose.apply-to-chords=Akkorde transponieren
+
+browser.dialog=Dateisammlungs-Browser
+browser.menu.file=Datei
+browser.open=\u00d6ffnen
+browser.exit=Beenden
+browser.menu.collection=Sammlung
+browser.menu.go=Gehe nach
+browser.collection.select=Sammlung ausw\u00E4hlen
+browser.collection.open=\u00d6ffnen
+browser.collection.remove=Entfernen
+browser.collection.close=Schlie\u00dfen
+browser.collection.new=Neu
+browser.go-root=Home
+browser.go-back=Zur\u00FCck
+browser.refresh=Aktualisieren
+browser.factory.fs.name=Dateisystem
+browser.collection.fs.name=Name
+browser.collection.fs.path=Ordner
+browser.collection.fs.editor-title=Sammlung im Dateisystem
+browser.collection.fs.editor-tip=W\u00E4hlen Sie den Ordner Ihrer Dateisammlung
+browser.collection.fs.invalid-path=Bitte w\u00E4hlen Sie einen g\u00FCltigen Ordner aus
+
+midi.port=MIDI Port
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=Nicht verf\u00FCgbar.
+plugin.column.name=Plugin Name
+plugin.column.enabled=Aktiviert
 
-export.tablature-enabled=Zeige Tablatur
-export.score-enabled=Zeige Partitur
-
-scale=Skalierung
-scale.list=Skalierungsliste
 
 #########################
 ###  Tool Bar Items   ###
@@ -414,73 +570,116 @@ dynamic.items=Dynamikwerkzeuge
 #########################
 action.file.new=Neue Datei
 action.file.open=Datei \u00F6ffnen
-action.file.save-as=Speichern Als
+action.file.open-url=URL \u00F6ffnen
 action.file.save=Speichern
+action.file.save-as=Speichern unter
 action.file.print=Drucken
 action.file.print-preview=Druckvorschau
+action.file.exit=TuxGuitar beenden
 action.edit.undo=R\u00FCckg\u00E4ngig
-action.edit.redo=Wiederholen
-action.composition.change-tempo=Tempo wechseln
-action.composition.change-time-signature=Z\u00E4hlzeit \u00E4ndern
-action.composition.change-key-signature=Tonartenschl\u00FCssel \u00E4ndern
+action.edit.redo=Wiederherstellen
+action.edit.voice-1=Stimme 1 ausw\u00E4hlen
+action.edit.voice-2=Stimme 2 ausw\u00E4hlen
+action.composition.change-time-signature=Taktart \u00E4ndern
+action.composition.change-tempo=Tempo \u00E4ndern
+action.composition.change-info=Liedinformationen \u00E4ndern
 action.composition.change-clef=Notenschl\u00FCssel \u00E4ndern
-action.composition.change-info=Songinformationen \u00E4ndern
-action.view.layout-set-linear=Lieares Layout anzeigen
-action.view.layout-set-page=Seitenlayout anzeigen
-action.view.layout-set-score-enabled=Partituransicht
-action.view.layout-set-multitrack=Multitrack Layout anzeigen
-action.view.show-transport=Transportfenster anzeigen
-action.view.show-fretboard=Griffbrett zeigen
-action.view.show-piano=Zeige Klaviatur
+action.composition.change-key-signature=Change Key Signature
+action.composition.change-triplet-feel=Triolenfeeling \u00E4ndern
+action.view.layout-set-page=Zeige Seitenlayout
+action.view.layout-set-linear=Zeige lineares Layout
+action.view.layout-set-multitrack=Zeige Mehrspuransicht
+action.view.layout-set-score-enabled=Zeige Partitur
+action.view.layout-set-tablature-enabled=Zeige Tabulatur
+action.view.layout-set-compact=Zeige den kompakten Modus
+action.view.layout-set-chord-diagram-enabled=Akkorddiagramm aktivieren
+action.view.layout-set-chord-name-enabled=Akkordname aktivieren
+action.view.show-fretboard=Griffbret anzeigen
+action.view.show-piano=Klaviatur anzeigen
+action.view.show-matrix=Matrix Editor anzeigen
 action.view.show-mixer=Mixer anzeigen
+action.view.show-transport=Transportfenster anzeigen
 action.track.add=Spur hinzuf\u00FCgen
 action.track.remove=Spur entfernen
-action.track.clone=Spur klonen
-action.track.go-first=Gehe zur ersten Spur
-action.track.go-next=Gehe zum n\u00E4chsten Track
-action.track.go-previous=Gehe zur vorhergehenden Spur
-action.track.go-last=Gehe zur letzten Spur
-action.track.lyrics=Editiere Lyrics
-action.track.properties=Spureigenschaften ver\u00E4ndern
+action.track.clone=Spur duplizieren
+action.track.go-first=Zur ersten Spur gehen
+action.track.go-last=Zur letzten Spur gehen
+action.track.go-next=Zur n\u00E4chsten Spur gehen
+action.track.go-previous=Zur vorherigen Spur gehen
+action.track.lyrics=Liedtext der Spur editieren
+action.track.properties=Spureigenschaften \u00E4ndern
+action.track.move-down=Spur nach unten verschieben
+action.track.move-up=Spur nach oben verschieben
 action.measure.add=Takt hinzuf\u00FCgen
 action.measure.remove=Takt entfernen
 action.measure.copy=Takt kopieren
 action.measure.paste=Takt einf\u00FCgen
 action.measure.clean=Takt leeren
-action.measure.go-first=Gehe zum ersten Takt
-action.measure.go-last=Gehe zum letzten Takt
-action.measure.go-previous=Gehe zum vorhergehenden Takt
-action.measure.go-next=Gehe zum n\u00E4chsten Takt
+action.measure.go-first=Zum ersten Takt springen
+action.measure.go-last=Zum letzten Takt springen
+action.measure.go-next=Zum n\u00E4chsten Takt springen
+action.measure.go-previous=Zum vorherigen Takt springen
+action.beat.general.remove-unused-voice=Ungenutzte Stimme entfernen
+action.beat.general.voice-up=Notenh\u00E4lse nach oben ausrichten
+action.beat.general.voice-down=Notenh\u00E4lse nach unten ausrichten
+action.beat.general.voice-auto=Notenh\u00E4lse automatisch ausrichten
+action.beat.general.set-stroke-up=Set Upstroke
+action.beat.general.set-stroke-down=Set Downstroke
+action.beat.general.move-left=Um einen Schlag nach links verschieben
+action.beat.general.move-right=Um einen Schlag nach links verschieben
+action.beat.general.move-custom=Benutzerdefiniert verschieben
 action.note.general.clean-beat=Schlag leeren
-action.note.general.decrement-semitone=Halbton vermindern
-action.note.general.increment-semitone=Halbton erh\u00F6hen
-action.note.general.shift-down=Nach oben verschieben
-action.note.general.shift-up=Nach unten verschieben
-action.note.general.tied=VErbindung hinzuf\u00FCgen/entfernen
-action.note.duration.change-division-type=Tupleto hinzuf\u00FCgen/entfernen
-action.note.duration.change-dotted=Punktierug hinzuf\u00FCgen/entfernen
-action.note.duration.change-double-dotted=Doppelpunktierung hinzuf\u00FCgen/entfernen
-action.note.effect.change-vibrato=Vibrato hinzuf\u00FCgen/entfernen
-action.note.effect.change-hammer=Hammer-on/pull-off hinzuf\u00FCgen/entfernen
-action.note.effect.change-bend=Bending hinzuf\u00FCgen/entfernen
-action.note.effect.change-slide=Slide hinzuf\u00FCgen/entfernen
-action.note.effect.change-accentuated=Aktzentuierung hinzuf\u00FCgen/entfernen
-action.note.effect.change-dead=Tote Note hinzuf\u00FCgen/entfernen
-action.note.effect.change-fade-in=Fade-In hinzuf\u00FCgen/entfernen
-action.note.effect.change-ghost=Geisternote hinzuf\u00FCgen/entfernen
-action.note.effect.change-grace=Grace Note hinzuf\u00FCgen/entfernen
-action.note.effect.change-harmonic=Harmonie hinzuf\u00FCgen/entfernen
-action.note.effect.change-heavy-accentuated=Starke Akzentuierung hinzuf\u00FCgen/entfernen
-action.note.effect.change-palm-mute=Abstoppen hinzuf\u00FCgen/entfernen
-action.note.effect.change-popping=Popping hinzuf\u00FCgen/entfernen
-action.note.effect.change-slapping=Slapping hinzuf\u00FCgen/entfernen
-action.note.effect.change-staccato=Staccato hinzuf\u00FCgen/entfernen
-action.note.effect.change-tapping=Tapping hinzuf\u00FCgen/entfernen
-action.note.effect.change-tremolo-bar=Tremololeiste hinzuf\u00FCgen/entfernen
-action.note.effect.change-tremolo-picking=Tremolopicking hinzuf\u00FCgen/entfernen
-action.note.effect.change-trill=Trill hinzuf\u00FCgen/entfernen
-action.insert.open-repeat=Wiederholung er\u00F6ffnen
-action.insert.close-repeat=Wiederholung abschliessen
+action.note.general.decrement-semitone=Um Halbton vermindern
+action.note.general.increment-semitone=Um Halbton erh\u00F6hen
+action.note.general.shift-down=Um eine Saiten nach unten verschieben
+action.note.general.shift-up=Um eine Saiten nach oben verschieben
+action.note.general.tied=Gebundene Note
+action.note.duration.set-whole=Ganze Note
+action.note.duration.set-half=Halbe Note
+action.note.duration.set-quarter=Viertelnote
+action.note.duration.set-eighth=Achtelnote
+action.note.duration.set-sixteenth=Sechzehntelnote
+action.note.duration.set-thirty-second=32tel Note
+action.note.duration.set-sixty-fourth=64tel Note
+action.note.duration.change-dotted=Punktiert
+action.note.duration.change-double-dotted=Doppelt punktiert
+action.note.duration.change-division-type=Triole
+action.note.duration.decrement-duration=Dauer veringern
+action.note.duration.increment-duration=Dauer erh\u00F6hen
+action.note.effect.change-vibrato=Vibrato
+action.note.effect.change-bend=Bending
+action.note.effect.change-slide=Slide
+action.note.effect.change-hammer=Hammer-on/pull-off
+action.note.effect.change-accentuated=Akzentuiert
+action.note.effect.change-dead=Dead note
+action.note.effect.change-fade-in=Fade in
+action.note.effect.change-ghost=Ghost Note
+action.note.effect.change-grace=Vorschlagsnote
+action.note.effect.change-harmonic=Harmonic
+action.note.effect.change-heavy-accentuated=Stark akzentuiert
+action.note.effect.change-palm-mute=Abged\u00E4mpft
+action.note.effect.change-popping=Popping
+action.note.effect.change-slapping=Slapping
+action.note.effect.change-staccato=Staccato
+action.note.effect.change-tapping=Tapping
+action.note.effect.change-tremolo-bar=Tremolo bar
+action.note.effect.change-tremolo-picking=Tremolo picking
+action.note.effect.change-trill=Add/Remove Trill
+action.insert.open-repeat=Wiederholung \u00F6ffnen
+action.insert.close-repeat=Wiederholung schlie\u00dfen
+action.insert.repeat-alternative=Alternative Endungen
 action.insert.chord=Akkord einf\u00FCgen
+action.insert.text=Text einf\u00FCgen
+action.marker.add=Markierung einf\u00FCgen
+action.marker.go-next=Zur n\u00E4chsten Markierung gehen
+action.marker.go-previous=Zur vorherigen Markierung gehen
 action.transport.play=Wiedergabe starten
 action.transport.stop=Wiedergabe stoppen
+action.transport.mode=Abspielmodus
+action.transport.metronome=Metrononom
+action.transport.set-loop-start=Anfang der Schleifen aktivieren
+action.transport.set-loop-end=Ende der Schleifen aktivieren
+action.tools.browser=Dateisammlungs-Browser
+action.tools.transpose=Noten transponieren
+action.settings.configure=Einstellungen
+action.help.doc=Hilfe
diff --git a/TuxGuitar/share/lang/messages_el.properties b/TuxGuitar/share/lang/messages_el.properties
new file mode 100644
index 0000000..31f2c5e
--- /dev/null
+++ b/TuxGuitar/share/lang/messages_el.properties
@@ -0,0 +1,685 @@
+ok=\u0395\u03bd\u03c4\u03ac\u03be\u03b5\u03b9
+cancel=\u0391\u03ba\u03cd\u03c1\u03c9\u03c3\u03b7
+yes=\u039d\u03b1\u03b9
+no=\u038c\u03c7\u03b9
+add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7
+edit=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1
+remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+save=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
+exit=\u0388\u03be\u03bf\u03b4\u03bf\u03c2
+close=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf
+choose=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
+color=\u03a7\u03c1\u03ce\u03bc\u03b1
+title=\u03a4\u03af\u03c4\u03bb\u03bf\u03c2
+go=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5
+warning=\u03a0\u03c1\u03bf\u03b5\u03b9\u03b4\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7
+error=\u03a3\u03c6\u03ac\u03bb\u03bc\u03b1
+plugins=Plugins
+options=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2
+defaults=\u03a0\u03c1\u03bf\u03ba\u03b1\u03b8\u03bf\u03c1\u03b9\u03c3\u03bc\u03ad\u03bd\u03b1
+clean=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2
+rename=\u039c\u03b5\u03c4\u03bf\u03bd\u03bf\u03bc\u03b1\u03c3\u03af\u03b1
+fret=Fret
+position=\u0398\u03ad\u03c3\u03b7
+name=\u038c\u03bd\u03bf\u03bc\u03b1
+author=\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1\u03c2
+version=\u0388\u03ba\u03b4\u03bf\u03c3\u03b7
+description=\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae
+info=\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2
+configure=\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b5
+url=URL
+
+file=\u0391\u03c1\u03c7\u03b5\u03af\u03bf
+file.new=\u039d\u03ad\u03bf
+file.open=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1
+file.save=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
+file.save-as=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03a9\u03c2
+file.save-changes-question=\u03a4\u03bf \u03c4\u03c1\u03b1\u03b3\u03bf\u03cd\u03b4\u03b9 \u03c0\u03b5\u03c1\u03b9\u03ad\u03c7\u03b5\u03b9 \u03bc\u03b7 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2.\n\u0395\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\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;
+file.exit=\u0388\u03be\u03bf\u03b4\u03bf\u03c2
+file.export=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae
+file.export-midi=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae MIDI
+file.export-pdf=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae PDF
+file.print=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+file.print-preview=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u03b5\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7\u03c2
+file.import=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae
+file.import-midi=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae MIDI
+file.export-ascii=\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae ASCII
+file.history=\u0399\u03c3\u03c4\u03bf\u03c1\u03b9\u03ba\u03cc
+file.open-url=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 URL
+file.open.error=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03bf \u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1: {0}
+file.save.error=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03b7 \u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7: {0}
+file.import.error=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03b7 \u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae: {0}
+file.export.error=\u0391\u03b4\u03cd\u03bd\u03b1\u03c4\u03b7 \u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae: {0}
+file.overwrite-question=\u0391\u03c5\u03c4\u03cc\u03c2 \u03bf \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7. \u0395\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03bf\u03bd \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03ae\u03c3\u03b5\u03c4\u03b5;
+
+edit.menu=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1
+edit.undo=\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+edit.redo=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1\u03c2
+edit.copy=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae
+edit.from=\u0391\u03c0\u03cc
+edit.to=\u0388\u03c9\u03c2
+edit.all-tracks=\u038c\u03bb\u03b1 \u03c4\u03b1 \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9\u03b1
+edit.paste=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2
+edit.paste.count=\u039c\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae\u03c2 \u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03bf\u03cd
+edit.paste.replace-mode=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5\u03c5
+edit.paste.insert-mode=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03c3\u03b5 \u03bd\u03ad\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+edit.delete=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae
+edit.cut=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u0394\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae
+edit.mouse-mode-selection=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae\u03c2
+edit.mouse-mode-edition=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1\u03c2 \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+edit.not-natural-key=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0394\u03af\u03b5\u03c3\u03b7\u03c2/\u038e\u03c6\u03b5\u03c3\u03b7\u03c2
+edit.voice-1=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a6\u03c9\u03bd\u03ae\u03c2 1
+edit.voice-2=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a6\u03c9\u03bd\u03ae\u03c2 2
+
+view=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae
+view.layout=\u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7
+view.layout.page=\u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7 \u03a3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2
+view.layout.linear=\u0393\u03c1\u03b1\u03bc\u03bc\u03b9\u03ba\u03ae \u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7
+view.layout.compact=\u03a3\u03c5\u03bc\u03c0\u03b1\u03b3\u03ae\u03c2
+view.layout.multitrack=\u03a0\u03bf\u03bb\u03c5\u03ba\u03ac\u03bd\u03b1\u03bb\u03b7
+view.layout.chord-style=\u03a3\u03c4\u03c5\u03bb \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+view.layout.chord-name=\u039f\u03bd\u03bf\u03bc\u03b1\u03c3\u03af\u03b1 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+view.layout.chord-diagram=\u0394\u03b9\u03ac\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+view.layout.score-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+view.layout.tablature-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+view.show-mixer=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u039c\u03af\u03ba\u03c4\u03b7
+view.show-fretboard=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03c3\u03c4\u03b9\u03ad\u03c1\u03b1\u03c2
+view.show-piano=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b9\u03ac\u03bd\u03bf\u03c5
+view.show-matrix=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03af\u03bd\u03b1\u03ba\u03b1
+view.show-transport=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1
+
+fretboard.direction=\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7
+fretboard.right-mode=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03b1\u03c0\u03cc \u03b4\u03b5\u03be\u03b9\u03ac
+fretboard.left-mode=\u03a7\u03c1\u03ae\u03c3\u03b7 \u03b1\u03c0\u03cc \u03b1\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac
+fretboard.background-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a6\u03cc\u03bd\u03c4\u03bf\u03c5
+fretboard.display-note-text=Display Note \u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
+fretboard.display-scale-text=Display Scale \u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
+fretboard.font=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
+fretboard.fretpoint-color=Fret \u03a7\u03c1\u03ce\u03bc\u03b1
+fretboard.note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2
+fretboard.scale-note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2 \u039d\u03cc\u03c4\u03b1\u03c2
+fretboard.settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03a4\u03b1\u03c3\u03c4\u03b9\u03ad\u03c1\u03b1\u03c2
+fretboard.string-color=String \u03a7\u03c1\u03ce\u03bc\u03b1
+fretboard.settings.options=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2
+
+piano.editor=\u03a3\u03c5\u03bd\u03c4\u03ac\u03ba\u03c4\u03b7\u03c2 \u03a0\u03b9\u03ac\u03bd\u03bf\u03c5
+piano.natural-key-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a6\u03c5\u03c3\u03b9\u03ba\u03bf\u03cd \u039a\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd
+piano.not-natural-key-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a6\u03b1\u03bd\u03c4\u03b1\u03c3\u03c4\u03b9\u03ba\u03bf\u03cd \u039a\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd
+piano.note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2
+piano.scale-note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2 \u039d\u03cc\u03c4\u03b1\u03c2
+piano.settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03a0\u03b9\u03ac\u03bd\u03bf\u03c5
+
+matrix.editor=\u03a0\u03af\u03bd\u03b1\u03ba\u03b1\u03c2 \u03a3\u03cd\u03bd\u03c4\u03b1\u03be\u03b7\u03c2
+matrix.grids=\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03a0\u03bb\u03b5\u03b3\u03bc\u03ac\u03c4\u03c9\u03bd
+matrix.border-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a0\u03bb\u03b1\u03b9\u03c3\u03af\u03bf\u03c5
+matrix.font=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
+matrix.foreground-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a0\u03c1\u03bf\u03c3\u03ba\u03b7\u03bd\u03af\u03bf\u03c5
+matrix.line-color-1=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039c\u03bf\u03bd\u03ae\u03c2 \u0393\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2
+matrix.line-color-2=\u03a7\u03c1\u03ce\u03bc\u03b1 \u0396\u03c5\u03b3\u03ae\u03c2 \u0393\u03c1\u03b1\u03bc\u03bc\u03ae\u03c2
+matrix.line-color-over=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03a0\u03bf\u03bd\u03c4\u03b9\u03ba\u03bf\u03cd \u03c0\u03ac\u03bd\u03c9 \u03b1\u03c0\u03cc \u03b3\u03c1\u03b1\u03bc\u03bc\u03ae
+matrix.note-color=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2
+matrix.play-note-color=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03a7\u03c1\u03c9\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7\u03c2 \u039d\u03cc\u03c4\u03b1\u03c2
+matrix.position-color=\u0398\u03ad\u03c3\u03b7 \u03a7\u03c1\u03ce\u03bc\u03b1
+matrix.settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2 \u03a0\u03af\u03bd\u03b1\u03ba\u03b1
+
+composition=\u03a3\u03cd\u03bd\u03b8\u03b5\u03c3\u03b7
+composition.timesignature=\u03a1\u03c5\u03b8\u03bc\u03cc\u03c2
+composition.timesignature.Numerator=\u0391\u03c1\u03b9\u03b8\u03bc\u03b7\u03c4\u03ae\u03c2
+composition.timesignature.denominator=\u03a0\u03b1\u03c1\u03bf\u03bd\u03bf\u03bc\u03b1\u03c3\u03c4\u03ae\u03c2
+composition.timesignature.to-the-end=\u03a3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+composition.tempo=\u03a4\u03ad\u03bc\u03c0\u03bf
+composition.tempo-percent=\u03a4\u03ad\u03bc\u03c0\u03bf
+composition.tempo.invalid=\u0386\u03ba\u03c5\u03c1\u03bf \u03a4\u03ad\u03bc\u03c0\u03bf
+composition.tempo.start-to-end=\u0395\u03c6\u03ac\u03c1\u03bc\u03bf\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c4\u03ad\u03bc\u03c0\u03bf \u03c3\u03b5 \u03bf\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03bf \u03c4\u03bf \u03c4\u03c1\u03b1\u03b3\u03bf\u03cd\u03b4\u03b9
+composition.tempo.position-to-end=\u0395\u03c6\u03ac\u03c1\u03bc\u03bf\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c4\u03ad\u03bc\u03c0\u03bf \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+composition.tempo.position-to-next=\u0395\u03c6\u03ac\u03c1\u03bc\u03bf\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03c4\u03ad\u03bc\u03c0\u03bf \u03c3\u03c4\u03bf \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03c3\u03b7\u03bc\u03ac\u03b4\u03b9 \u03c4\u03ad\u03bc\u03c0\u03bf
+composition.properties=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2
+composition.name=\u038c\u03bd\u03bf\u03bc\u03b1
+composition.artist=\u039a\u03b1\u03bb\u03bb\u03b9\u03c4\u03ad\u03c7\u03bd\u03b7\u03c2
+composition.album=\u0386\u03bb\u03bc\u03c0\u03bf\u03c5\u03bc
+composition.author=\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1\u03c2
+composition.date=\u0397\u03bc\u03b5\u03c1\u03bf\u03bc\u03b7\u03bd\u03af\u03b1
+composition.copyright=Copyright
+composition.writer=\u0394\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03cc\u03c2 \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+composition.transcriber=\u039c\u03b5\u03c4\u03b1\u03b3\u03c1\u03ac\u03c6\u03b7\u03ba\u03b5 \u03b1\u03c0\u03cc
+composition.comments=\u03a3\u03c7\u03cc\u03bb\u03b9\u03b1
+composition.tripletfeel=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+composition.clef=\u039a\u03bb\u03b5\u03b9\u03b4\u03af
+composition.clef.treble=\u03a3\u03bf\u03c0\u03c1\u03ac\u03bd\u03bf\u03c2 (Treble)
+composition.clef.bass=\u039c\u03c0\u03ac\u03c3\u03bf (Bass)
+composition.clef.tenor=\u03a4\u03b5\u03bd\u03cc\u03c1\u03bf\u03c2 (Tenor)
+composition.clef.alto=\u039a\u03bf\u03bd\u03c4\u03c1\u03ac\u03bb\u03c4\u03bf (Alto)
+composition.clef.to-the-end=\u0395\u03c6\u03ac\u03c1\u03bc\u03bf\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf \u03ba\u03bb\u03b5\u03b9\u03b4\u03af \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+composition.keysignature=\u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1
+composition.keysignature.natural=\u03a6\u03c5\u03c3\u03b9\u03ba\u03ae
+composition.keysignature.sharp-1=1 \u0394\u03af\u03b5\u03c3\u03b7
+composition.keysignature.sharp-2=2 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-3=3 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-4=4 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-5=5 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-6=6 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.sharp-7=7 \u0394\u03b9\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-1=1 \u038e\u03c6\u03b5\u03c3\u03b7
+composition.keysignature.flat-2=2 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-3=3 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-4=4 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-5=5 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-6=6 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.flat-7=7 \u03a5\u03c6\u03ad\u03c3\u03b5\u03b9\u03c2
+composition.keysignature.to-the-end=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03b1\u03c5\u03c4\u03ae\u03c2 \u03c4\u03b7\u03c2 \u03ba\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2 \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+composition.tripletfeel=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+composition.tripletfeel.none=\u03a7\u03c9\u03c1\u03af\u03c2 Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+composition.tripletfeel.eighth=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5 8\u03bf\u03c5
+composition.tripletfeel.sixteenth=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5 16\u03bf\u03c5
+composition.tripletfeel.to-the-end=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+
+help=\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1
+help.help=\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1
+help.doc=\u03a4\u03b5\u03ba\u03bc\u03b7\u03c1\u03af\u03c9\u03c3\u03b7 (Documentation)
+help.about=\u03a3\u03c7\u03b5\u03c4\u03b9\u03ba\u03ac \u03bc\u03b5 \u03c4\u03bf TuxGuitar
+help.about.license=\u0386\u03b4\u03b5\u03b9\u03b1
+help.about.authors=\u03a3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03b5\u03af\u03c2
+help.about.description=\u03a0\u03b5\u03c1\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae
+
+track=\u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.number=N�
+track.name=\u038c\u03bd\u03bf\u03bc\u03b1
+track.color=\u03a7\u03c1\u03ce\u03bc\u03b1
+track.first=\u03a0\u03c1\u03ce\u03c4\u03bf \u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.last=\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.previous=\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.next=\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+track.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+track.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+track.clone=\u039a\u03bb\u03c9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+track.move-up=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03c0\u03ac\u03bd\u03c9
+track.move-down=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03ba\u03ac\u03c4\u03c9
+track.instrument=\u038c\u03c1\u03b3\u03b1\u03bd\u03bf 
+track.properties=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2
+track.properties.general=\u0393\u03b5\u03bd\u03b9\u03ba\u03ac
+track.name.default-percussion-name=\u039a\u03c1\u03bf\u03c5\u03c3\u03c4\u03ac
+track.lyrics=\u03a3\u03c4\u03af\u03c7\u03bf\u03b9
+track.solo=Solo
+track.mute=Mute
+
+lyric.editor=\u03a3\u03c4\u03b9\u03c7\u03bf\u03b3\u03c1\u03ac\u03c6\u03bf\u03c2 
+
+measure=\u039c\u03ad\u03c4\u03c1\u03bf
+measure.first=\u03a0\u03c1\u03ce\u03c4\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+measure.last=\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+measure.previous=\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+measure.next=\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u039c\u03ad\u03c4\u03c1\u03bf
+measure.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+measure.add.count=\u03a0\u03c1\u03bf\u03c3\u03b8\u03ae\u03ba\u03b7 \u039c\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae
+measure.add-before-current-position=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 \u03c0\u03c1\u03b9\u03bd \u03b1\u03c0\u03cc \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 \u03b8\u03ad\u03c3\u03b7
+measure.add-after-current-position=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 \u03bc\u03b5\u03c4\u03ac \u03b1\u03c0\u03cc \u03b1\u03c5\u03c4\u03ae \u03c4\u03b7 \u03b8\u03ad\u03c3\u03b7
+measure.add-at-end=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5 \u03c3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+measure.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+measure.copy=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+measure.paste=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+measure.clean=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u039c\u03ad\u03c4\u03c1\u03bf\u03c5
+
+duration=\u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1
+duration.whole=\u039f\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03bf
+duration.half=\u039c\u03b9\u03c3\u03cc
+duration.quarter=\u03a4\u03ad\u03c4\u03b1\u03c1\u03c4\u03bf
+duration.eighth=\u038c\u03b3\u03b4\u03bf\u03bf
+duration.sixteenth=\u0394\u03ad\u03ba\u03b1\u03c4\u03bf \u03ad\u03ba\u03c4\u03bf
+duration.thirtysecond=\u03a4\u03c1\u03b9\u03b1\u03ba\u03bf\u03c3\u03c4\u03cc \u03b4\u03b5\u03cd\u03c4\u03b5\u03c1\u03bf
+duration.sixtyfourth=\u0395\u03be\u03b7\u03ba\u03bf\u03c3\u03c4\u03cc \u03c4\u03ad\u03c4\u03b1\u03c1\u03c4\u03bf
+duration.dotted=\u03a0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf
+duration.doubledotted=\u0394\u03b9\u03c0\u03bb\u03cc \u03a0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf
+duration.division-type=Feeling \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+
+dynamic=\u0394\u03c5\u03bd\u03b1\u03bc\u03b9\u03ba\u03ad\u03c2
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano    
+dynamic.mezzo-forte=Mezzo Forte       
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=\u0395\u03c6\u03ad
+effects.vibrato=Vibrato
+effects.bend=Bend
+effects.deadnote=Dead Note
+effects.slide=Slide
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Return
+effects.ghostnote=Ghost Note
+effects.accentuatednote=Accentuated Note
+effects.heavyaccentuatednote=Heavy Accentuated Note
+effects.harmonic=Harmonic
+effects.grace=Grace Note
+effects.grace-editor=Grace Note Editor
+effects.grace.before-beat=Before beat
+effects.grace.on-beat=On beat
+effects.grace.transition=Transition
+effects.grace.transition-none=None
+effects.grace.transition-bend=Bend
+effects.grace.transition-slide=Slide
+effects.grace.transition-hammer=Hammer
+effects.trill=Trill
+effects.trill-editor=Trill Editor
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Left Hand
+effects.harmonic.tapped.right-hand=Right Hand
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+
+bend.editor=Bend Editor
+bend.bend=Bend
+bend.bend-release=Bend/Release
+bend.bend-release-bend=Bend/Release/Bend
+bend.prebend=PreBend
+bend.prebend-release=PreBend/Release
+
+transport=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1\u03c2
+transport.start=\u0388\u03bd\u03b1\u03c1\u03be\u03b7
+transport.stop=\u039b\u03ae\u03be\u03b7
+transport.pause=\u03a0\u03b1\u03cd\u03c3\u03b7
+transport.first=\u03a0\u03c1\u03ce\u03c4\u03bf
+transport.last=\u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf
+transport.previous=\u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf
+transport.next=\u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf
+transport.metronome=\u039c\u03b5\u03c4\u03c1\u03bf\u03bd\u03cc\u03bc\u03bf\u03c2
+transport.mode=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2
+transport.mode.simple=\u0391\u03c0\u03bb\u03ae \u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1
+transport.mode.simple.tempo-percent=\u0395\u03c0\u03af \u03c4\u03bf\u03b9\u03c2 \u03b5\u03ba\u03b1\u03c4\u03cc \u03c4\u03bf\u03c5 \u03c4\u03ad\u03bc\u03c0\u03bf
+transport.mode.simple.loop=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03bc\u03b5 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+transport.mode.trainer=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u03a0\u03c1\u03bf\u03c0\u03cc\u03bd\u03b7\u03c3\u03b7\u03c2
+transport.mode.trainer.increment-description=\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03ba\u03b1\u03c4\u03ac
+transport.mode.loop-range=\u0395\u03cd\u03c1\u03bf\u03c2 \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+transport.mode.loop-range.from=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03b1\u03c0\u03cc \u03c4\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+transport.mode.loop-range.from-default=\u0391\u03c0\u03cc \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03ae
+transport.mode.loop-range.to=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03c4\u03bf\u03c5 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+transport.mode.loop-range.to-default=\u03a3\u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2
+transport.set-loop-start=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03ae \u03c4\u03b7\u03c2 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+transport.set-loop-end=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+
+instruments.volume=Gain
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=\u0388\u03bd\u03c4\u03b1\u03c3\u03b7
+instrument.balance=Balance
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Free
+instrument.link=Link
+
+
+repeat.open=\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+repeat.close=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+repeat.alternative=\u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03b9\u03c2 \u03bc\u03b5 \u03b5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2
+repeat.alternative.editor=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03c9\u03bd \u03bc\u03b5 \u03b5\u03bd\u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2
+repetitions=\u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03b9\u03c2
+repeat.number-of-repetitions=\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u0395\u03c0\u03b1\u03bd\u03b1\u03bb\u03ae\u03c8\u03b5\u03c9\u03bd
+
+beat=Beat
+beat.clean=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 Beat
+beat.voice.remove-unused=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039c\u03b7 \u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7\u03c2 \u03a6\u03c9\u03bd\u03ae\u03c2
+beat.voice-up=Stems Up
+beat.voice-down=Stems Down
+beat.voice-auto=Auto Stems
+beat.stroke=Stroke
+beat.stroke-up=Upstroke
+beat.stroke-down=Downstroke
+beat.move-left=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b5 \u0388\u03bd\u03b1 Beat \u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac
+beat.move-right=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b5 \u0388\u03bd\u03b1 Beat \u0394\u03b5\u03be\u03b9\u03ac
+beat.move-custom=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5 Beat
+beat.move-custom.dialog.title=\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03b7 \u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2
+beat.move-custom.dialog.direction-tip=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b7 \u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7
+beat.move-custom.dialog.move-1.tip=\u039c\u03b5\u03af\u03b6\u03bf\u03bd \u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2
+beat.move-custom.dialog.move-2.tip=\u039a\u03bf\u03bc\u03c8\u03ae \u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2
+beat.move-custom.dialog.direction=\u039a\u03b1\u03c4\u03b5\u03cd\u03b8\u03c5\u03bd\u03c3\u03b7
+beat.move-custom.dialog.direction.right=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u0394\u03b5\u03be\u03b9\u03ac
+beat.move-custom.dialog.direction.left=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac
+beat.move-custom.dialog.count=\u039c\u03b5\u03c4\u03c1\u03b7\u03c4\u03ae\u03c2
+beat.move-custom.dialog.duration=\u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1
+beat.move-custom.dialog.duration.type=\u03a0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf/\u0394\u03b9\u03c0\u03bb\u03cc-\u03a0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf
+beat.move-custom.dialog.duration.type.normal=\u039a\u03b1\u03b8\u03cc\u03bb\u03bf\u03c5
+beat.move-custom.dialog.duration.division-type=\u03a4\u03cd\u03c0\u03bf\u03c2 \u0394\u03b9\u03b1\u03af\u03c1\u03b5\u03c3\u03b7\u03c2
+beat.move-custom.dialog.duration.division-type.normal=\u039a\u03b1\u03bd\u03bf\u03bd\u03b9\u03ba\u03cc (Tuplet)
+
+note=\u039d\u03cc\u03c4\u03b1
+note.semitone-up=\u0397\u03bc\u03b9\u03c4\u03cc\u03bd\u03b9\u03bf \u03c0\u03ac\u03bd\u03c9
+note.semitone-down=\u0397\u03bc\u03b9\u03c4\u03cc\u03bd\u03b9\u03bf \u03ba\u03ac\u03c4\u03c9
+note.shift-up=\u039f\u03bb\u03af\u03c3\u03b8\u03b7\u03c3\u03b7 \u03c0\u03ac\u03bd\u03c9
+note.shift-down=\u039f\u03bb\u03af\u03c3\u03b8\u03b7\u03c3\u03b7 \u03ba\u03ac\u03c4\u03c9
+note.tiednote=\u03a3\u03cd\u03b6\u03b5\u03c5\u03be\u03b7
+note.deadnote=Dead Note
+
+insert.chord=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+chord.editor=\u03a3\u03c5\u03bd\u03b8\u03ad\u03c4\u03b7\u03c2 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+chord=\u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1
+chord.name=\u038c\u03bd\u03bf\u03bc\u03b1
+chord.bass=\u039c\u03c0\u03ac\u03c3\u03bf
+chord.custom=\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03b7 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1
+chord.custom.name-empty-error=\u03a4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2 \u03b4\u03b5\u03bd \u03bc\u03c0\u03bf\u03c1\u03b5\u03af \u03bd\u03b1 \u03b5\u03af\u03bd\u03b1\u03b9 \u03ba\u03b5\u03bd\u03cc.
+chord.custom.name-exist-error=\u0391\u03c5\u03c4\u03cc \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2 \u03c5\u03c0\u03ac\u03c1\u03c7\u03b5\u03b9 \u03ae\u03b4\u03b7.
+chord.settings.tip=\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03b5\u03c2 \u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2
+chord.settings.type=\u03a4\u03cd\u03c0\u03bf\u03c2
+chord.settings.type.most-common=\u03a0\u03b9\u03bf \u03c3\u03c5\u03c7\u03bd\u03ac
+chord.settings.type.inversions=\u0391\u03bd\u03c4\u03b9\u03c3\u03c4\u03c1\u03bf\u03c6\u03ad\u03c2
+chord.settings.type.close-voiced=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf Voiced
+chord.settings.type.open-voiced=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 Voiced
+chord.settings.open-chords=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 Chords
+chord.settings.chords-to-display=\u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b5\u03c2 \u03c0\u03c1\u03bf\u03c2 \u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae
+chord.settings.search-frets=\u0391\u03bd\u03b1\u03b6\u03ae\u03c4\u03b7\u03c3\u03b7 Frets
+chord.settings.minimum-fret=\u0395\u03bb\u03ac\u03c7\u03b9\u03c3\u03c4\u03bf
+chord.settings.maximum-fret=\u039c\u03ad\u03b3\u03b9\u03c3\u03c4\u03bf
+
+instrument=\u038c\u03c1\u03b3\u03b1\u03bd\u03bf
+instrument.instrument=\u038c\u03c1\u03b3\u03b1\u03bd\u03bf
+instrument.percussion-track=\u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9 \u039a\u03c1\u03bf\u03c5\u03c3\u03c4\u03ce\u03bd
+
+tuning=\u039a\u03bf\u03cd\u03c1\u03b4\u03b9\u03c3\u03bc\u03b1
+tuning.offset=\u0391\u03bd\u03c4\u03b9\u03c3\u03c4\u03ac\u03b8\u03bc\u03b9\u03c3\u03bc\u03b1
+tuning.strings=\u03a7\u03bf\u03c1\u03b4\u03ad\u03c2
+tuning.strings.transpose=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03b5\u03c0\u03b7\u03c1\u03b5\u03b1\u03c3\u03bc\u03ad\u03bd\u03c9\u03bd \u03bd\u03cc\u03c4\u03c9\u03bd.
+tuning.strings.transpose.try-keep-strings=\u03a0\u03c1\u03bf\u03c3\u03c0\u03ac\u03b8\u03b5\u03b9\u03b1 \u03b4\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7\u03c2 \u03c4\u03c9\u03bd \u03bd\u03cc\u03c4\u03c9\u03bd \u03c3\u03c4\u03b7\u03bd \u03af\u03b4\u03b9\u03b1 \u03c7\u03bf\u03c1\u03b4\u03ae
+tuning.strings.transpose.apply-to-chords=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+
+language=Language
+
+choose-color=\u0395\u03c0\u03ad\u03bb\u03b5\u03be\u03b5 \u03ad\u03bd\u03b1 \u03c7\u03c1\u03ce\u03bc\u03b1
+
+settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2
+settings.config=\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b5 TuxGuitar
+settings.config.language=\u0393\u03bb\u03ce\u03c3\u03c3\u03b1
+settings.config.language.choose=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u0393\u03bb\u03ce\u03c3\u03c3\u03b1\u03c2
+settings.config.styles=\u03a3\u03c4\u03c5\u03bb
+settings.config.styles.general=\u0393\u03b5\u03bd\u03b9\u03ba\u03ac \u03a3\u03c4\u03c5\u03bb
+settings.config.styles.printer=\u03a3\u03c4\u03c5\u03bb \u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7\u03c2
+settings.config.styles.font.default=\u03A0\u03C1\u03BF\u03BA\u03B1\u03B8\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B7 \u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC
+settings.config.styles.font.note=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u039D\u03CC\u03C4\u03B1\u03C2
+settings.config.styles.font.lyric=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03A3\u03C4\u03AF\u03C7\u03C9\u03BD
+settings.config.styles.font.text=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u039A\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
+settings.config.styles.font.time-signature=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u03A1\u03C5\u03B8\u03BC\u03BF\u03CD
+settings.config.styles.font.printer-default=\u03A0\u03C1\u03BF\u03BA\u03B1\u03B8\u03BF\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B7 \u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u0395\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2
+settings.config.styles.font.printer-note=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u0395\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2 \u039D\u03CC\u03C4\u03B1\u03C2
+settings.config.styles.font.printer-time-signature=\u0393\u03C1\u03B1\u03BC\u03BC\u03B1\u03C4\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC \u0395\u03BA\u03C4\u03CD\u03C0\u03C9\u03C3\u03B7\u03C2 \u03A1\u03C5\u03B8\u03BC\u03BF\u03CD
+settings.config.styles.color.score-note=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2 \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+settings.config.styles.color.tab-note=\u03a7\u03c1\u03ce\u03bc\u03b1 \u039d\u03cc\u03c4\u03b1\u03c2 \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+settings.config.styles.color.play-note=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03a7\u03c1\u03c9\u03bc\u03b1\u03c4\u03b9\u03c3\u03bc\u03ad\u03bd\u03b7\u03c2 \u039d\u03cc\u03c4\u03b1\u03c2
+settings.config.apply-changes-question=\u0398\u03ad\u03bb\u03b5\u03c4\u03b5 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03c4\u03c9\u03bd \u03b1\u03bb\u03bb\u03b1\u03b3\u03ce\u03bd \u03c4\u03ce\u03c1\u03b1;
+settings.config.sound=\u0389\u03c7\u03bf\u03c2
+settings.config.main=\u0393\u03b5\u03bd\u03b9\u03ba\u03ac
+settings.config.main.window-title=\u03a4\u03af\u03c4\u03bb\u03bf\u03c2 \u03a0\u03b1\u03c1\u03b1\u03b8\u03cd\u03c1\u03bf\u03c5
+settings.config.main.window-title.help=\u039f\u03b9 \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03b5\u03c2 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ad\u03c2 \u03b8\u03b1 \u03b1\u03bd\u03c4\u03b9\u03ba\u03b1\u03c4\u03b1\u03c3\u03c4\u03b1\u03b8\u03bf\u03cd\u03bd \u03c3\u03c4\u03bf \u03c4\u03af\u03c4\u03bb\u03bf \u03c4\u03bf\u03c5 \u03c0\u03b1\u03c1\u03b1\u03b8\u03cd\u03c1\u03bf\u03c5:
+settings.config.main.window-title.var.description.appname=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03b5\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2: TuxGuitar
+settings.config.main.window-title.var.description.appversion=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03b7\u03bd \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03c4\u03bf\u03c5 TuxGuitar.
+settings.config.main.window-title.var.description.filename=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03b1\u03bd\u03bf\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5
+settings.config.main.window-title.var.description.filepath=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03b7 \u03b8\u03ad\u03c3\u03b7 \u03c4\u03bf\u03c5 \u03b1\u03bd\u03bf\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5 \u03b1\u03c1\u03c7\u03b5\u03af\u03bf\u03c5
+settings.config.main.window-title.var.description.songname=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1 \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+settings.config.main.window-title.var.description.songauthor=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03c3\u03c5\u03b3\u03b3\u03c1\u03b1\u03c6\u03ad\u03b1 \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+settings.config.main.window-title.var.description.songalbum=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03ac\u03bb\u03bc\u03c0\u03bf\u03c5\u03bc \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+settings.config.main.window-title.var.description.songartist=\u0391\u03c5\u03c4\u03ae \u03b7 \u03bc\u03b5\u03c4\u03b1\u03b2\u03bb\u03b7\u03c4\u03ae \u03b1\u03bd\u03c4\u03b9\u03c0\u03c1\u03bf\u03c3\u03c9\u03c0\u03b5\u03cd\u03b5\u03b9 \u03c4\u03bf \u03ba\u03b1\u03bb\u03bb\u03b9\u03c4\u03ad\u03c7\u03bd\u03b7 \u03c4\u03bf\u03c5 \u03c4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+settings.config.main.options=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ad\u03c2
+settings.config.main.splash-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03b9\u03ba\u03ae\u03c2 \u03b5\u03b9\u03ba\u03cc\u03bd\u03b1\u03c2 \u03c3\u03c4\u03b7\u03bd \u03b5\u03ba\u03ba\u03af\u03bd\u03b7\u03c3\u03b7
+settings.config.main.table.auto-size.enabled=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b7\u03c2 \u03c0\u03c1\u03bf\u03c3\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae\u03c2 \u03bc\u03b5\u03b3\u03ad\u03b8\u03bf\u03c5\u03c2 \u03c0\u03af\u03bd\u03b1\u03ba\u03b1
+settings.config.styles.color.lines=\u03a7\u03c1\u03ce\u03bc\u03b1 \u03bf\u03c1\u03b9\u03b6\u03bf\u03bd\u03c4\u03af\u03c9\u03bd \u03b3\u03c1\u03b1\u03bc\u03bc\u03ce\u03bd
+settings.config.toolbars=\u0393\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2 \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd
+settings.config.toolbars.tip=\u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b5 \u03c4\u03b9\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2 \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd \u03c3\u03bf\u03c5
+settings.config.toolbars.list=\u0394\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03b5\u03c2 \u03b3\u03c1\u03b1\u03bc\u03bc\u03ad\u03c2 \u03b5\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03c9\u03bd
+settings.config.toolbars.move-up=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03c0\u03ac\u03bd\u03c9
+settings.config.toolbars.move-down=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03ba\u03ac\u03c4\u03c9
+settings.config.skin=Skins
+settings.config.skin.choose=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c4\u03bf\u03c5 skin \u03c3\u03bf\u03c5
+settings.keybindings=\u03a1\u03cd\u03b8\u03bc\u03b9\u03c3\u03b5 \u03c0\u03b1\u03c4\u03b7\u03bc\u03ac\u03c4\u03c9\u03bd \u03ba\u03bf\u03c5\u03bc\u03c0\u03b9\u03ce\u03bd
+
+key-bindings-editor=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 \u03b4\u03ad\u03c3\u03bc\u03b5\u03c5\u03c3\u03b7\u03c2 \u03ba\u03bb\u03b5\u03b9\u03b4\u03b9\u03ce\u03bd
+key-bindings-editor-action-select=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03bc\u03b9\u03b1\u03c2 \u03b5\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b1\u03c2
+key-bindings-editor-action-column=\u0395\u03bd\u03ad\u03c1\u03b3\u03b5\u03b9\u03b5\u03c2
+key-bindings-editor-shortcut-column=\u03a0\u03bb\u03ae\u03ba\u03c4\u03c1\u03b1
+key-bindings-editor-push-a-key=\u03a0\u03ac\u03c4\u03b1 \u03ad\u03bd\u03b1 \u03ba\u03bf\u03c5\u03bc\u03c0\u03af
+key-bindings-editor-save-question=\u03a5\u03c0\u03ac\u03c1\u03c7\u03bf\u03c5\u03bd \u03bc\u03b7 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u03b1\u03bb\u03bb\u03b1\u03b3\u03ad\u03c2, \u03b5\u03c0\u03b9\u03b8\u03c5\u03bc\u03b5\u03af\u03c4\u03b5 \u03ad\u03be\u03bf\u03b4\u03bf \u03c7\u03c9\u03c1\u03af\u03c2 \u03b1\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7;
+key-bindings-editor-override=\u0397 \u03c3\u03c5\u03bd\u03c4\u03cc\u03bc\u03b5\u03c5\u03c3\u03b7 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c4\u03b1\u03b9 \u03ae\u03b4\u03b7! \u0395\u03af\u03c3\u03c4\u03b5 \u03c3\u03af\u03b3\u03bf\u03c5\u03c1\u03bf\u03b9 \u03c0\u03c9\u03c2 \u03b8\u03ad\u03bb\u03b5\u03c4\u03b5 \u03bd\u03b1 \u03c4\u03b7 \u03c7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03b5\u03af\u03c3\u03b5\u03c4\u03b5;
+
+print.print=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+print.dialog=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+print.service=\u03a5\u03c0\u03b7\u03c1\u03b5\u03c3\u03af\u03b1
+print.service.name=\u038c\u03bd\u03bf\u03bc\u03b1
+print.service.status=\u039a\u03b1\u03c4\u03ac\u03c3\u03c4\u03b1\u03c3\u03b7
+print.service.type=\u03a4\u03cd\u03c0\u03bf\u03c2
+print.service.info=\u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03af\u03b5\u03c2
+print.range=\u0395\u03cd\u03c1\u03bf\u03c2
+print.range.all-pages=\u038c\u03bb\u03bf
+print.range.pages=\u03a3\u03b5\u03bb\u03af\u03b4\u03b5\u03c2
+print.range.pages-to=\u03a9\u03c2
+print.copies=\u0391\u03bd\u03c4\u03af\u03b3\u03c1\u03b1\u03c6\u03b1
+print.copies-number=\u0391\u03c1\u03b9\u03b8\u03bc\u03cc\u03c2 \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c6\u03c9\u03bd
+print.print-to-file=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf
+print.file-chooser=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae
+print-header.default-song-name=\u03a7\u03c9\u03c1\u03af\u03c2 \u03c4\u03af\u03c4\u03bb\u03bf
+print-header.default-song-author=\u0391\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf
+
+print.preview=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+print.preview.page-of=\u03c4\u03bf\u03c5
+
+marker=\u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+marker.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03a3\u03b7\u03bc\u03b1\u03b4\u03b9\u03bf\u03cd
+marker.list=\u039b\u03af\u03c3\u03c4\u03b1 \u03a3\u03b7\u03bc\u03b1\u03b4\u03b9\u03ce\u03bd
+marker.first=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03a0\u03c1\u03ce\u03c4\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+marker.last=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03a4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+marker.next=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+marker.previous=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+
+export.tablature-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+export.score-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+export.chord-name-enabled=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03bf\u03bd\u03bf\u03bc\u03ac\u03c4\u03c9\u03bd \u03c4\u03c9\u03bd \u03c3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+export.chord-diagram-enabled=\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03bc\u03bc\u03ac\u03c4\u03c9\u03bd \u03c4\u03c9\u03bd \u03c3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+export.black-and-white=\u0391\u03c3\u03c0\u03c1\u03cc\u03bc\u03b1\u03c5\u03c1\u03b7 \u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1
+
+scale=\u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1
+scale.list=\u039b\u03af\u03c3\u03c4\u03b1 \u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2
+
+text.insert=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+text.editor=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03c4\u03ae\u03c2 \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+text.text=\u039a\u03b5\u03af\u03bc\u03b5\u03bd\u03bf
+
+tools=\u0395\u03c1\u03b3\u03b1\u03bb\u03b5\u03af\u03b1
+tools.scale=\u039b\u03af\u03c3\u03c4\u03b1 \u039a\u03bb\u03af\u03bc\u03b1\u03ba\u03b1\u03c2
+tools.browser=\u03a0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2
+tools.plugins=Plugins
+tools.shortcuts=\u03a3\u03c5\u03bd\u03c4\u03bf\u03bc\u03b5\u03cd\u03c3\u03b5\u03b9\u03c2
+tools.settings=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2
+
+tools.transpose=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac
+tools.transpose.semitones=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u0397\u03bc\u03b9\u03c4\u03bf\u03bd\u03af\u03c9\u03bd
+tools.transpose.apply-to-track=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03cc\u03bb\u03c9\u03bd \u03c4\u03c9\u03bd \u03bc\u03ad\u03c4\u03c1\u03c9\u03bd
+tools.transpose.apply-to-measure=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03bc\u03cc\u03bd\u03bf \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+tools.transpose.apply-to-all-tracks=\u0395\u03c6\u03b1\u03c1\u03bc\u03bf\u03b3\u03ae \u03c3\u03b5 \u03cc\u03bb\u03b1 \u03c4\u03b1 \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9\u03b1
+tools.transpose.try-keep-strings=\u0394\u03b9\u03b1\u03c4\u03ae\u03c1\u03b7\u03c3\u03b7 \u03c4\u03c9\u03bd \u03bd\u03cc\u03c4\u03c9\u03bd \u03c3\u03c4\u03b7\u03bd \u03af\u03b4\u03b9\u03b1 \u03c7\u03bf\u03c1\u03b4\u03ae \u03cc\u03c0\u03bf\u03c5 \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03c5\u03bd\u03b1\u03c4\u03cc
+tools.transpose.apply-to-chords=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03b9\u03ce\u03bd
+
+browser.dialog=\u03a0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2
+browser.menu.file=\u0391\u03c1\u03c7\u03b5\u03af\u03bf
+browser.open=\u0386\u03bd\u03bf\u03b9\u03be\u03b5
+browser.exit=\u0388\u03be\u03bf\u03b4\u03bf\u03c2
+browser.menu.collection=\u03a3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ae
+browser.menu.go=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5
+browser.collection.select=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ae\u03c2
+browser.collection.open=\u0386\u03bd\u03bf\u03b9\u03be\u03b5
+browser.collection.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+browser.collection.close=\u039a\u03bb\u03b5\u03af\u03c3\u03b9\u03bc\u03bf
+browser.collection.new=\u039d\u03ad\u03bf
+browser.go-root=\u0391\u03c1\u03c7\u03b9\u03ba\u03ae
+browser.go-back=\u03a0\u03af\u03c3\u03c9
+browser.refresh=\u0391\u03bd\u03b1\u03bd\u03ad\u03c9\u03c3\u03b7
+browser.factory.fs.name=\u0391\u03c1\u03c7\u03b5\u03af\u03bf \u03a3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2
+browser.collection.fs.name=\u038c\u03bd\u03bf\u03bc\u03b1
+browser.collection.fs.path=\u03a6\u03ac\u03ba\u03b5\u03bb\u03bf\u03c2
+browser.collection.fs.editor-title=\u0391\u03c1\u03c7\u03b5\u03af\u03bf \u03a3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ae\u03c2 \u03a3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03bf\u03c2
+browser.collection.fs.editor-tip=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03c4\u03bf \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bb\u03bb\u03bf\u03b3\u03ae\u03c2 \u03c3\u03b1\u03c2
+browser.collection.fs.invalid-path=\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce, \u03b4\u03b9\u03b1\u03bb\u03ad\u03be\u03c4\u03b5 \u03ad\u03bd\u03b1\u03bd \u03ad\u03b3\u03ba\u03c5\u03c1\u03bf \u03c6\u03ac\u03ba\u03b5\u03bb\u03bf
+
+midi.port=\u0398\u03cd\u03c1\u03b1 MIDI
+midi.sequencer=\u0394\u03b9\u03b1\u03b4\u03bf\u03c7\u03ad\u03b1\u03c2 MIDI
+
+plugin.unknown-value=\u0394\u03b5\u03bd \u03b5\u03af\u03bd\u03b1\u03b9 \u03b4\u03b9\u03b1\u03b8\u03ad\u03c3\u03b9\u03bc\u03bf.
+plugin.column.name=Plugin \u038c\u03bd\u03bf\u03bc\u03b1
+plugin.column.enabled=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=\u0391\u03c1\u03c7\u03b5\u03af\u03bf \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03b1
+edit.items=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+property.items=\u0399\u03b4\u03b9\u03cc\u03c4\u03b7\u03c4\u03b5\u03c2 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+track.items=\u039a\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+duration.items=\u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+beat.items=Beat \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+composition.items=\u03a3\u03cd\u03bd\u03b8\u03b5\u03c3\u03b7 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+repeat.items=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+transport.items=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1\u03c2 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+marker.items=\u03a3\u03b7\u03bc\u03ac\u03b4\u03b5\u03bc\u03b1 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+insert.items=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+layout.items=\u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+view.items=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+effect.items=\u0395\u03c6\u03ad \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03b9\u03bc\u03ad\u03bd\u03c9\u03bd
+dynamic.items=\u0394\u03c5\u03bd\u03b1\u03bc\u03b9\u03ba\u03ad\u03c2 \u0391\u03bd\u03c4\u03b9\u03ba\u03b5\u03af\u03bc\u03b5\u03bd\u03b1
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=\u039d\u03ad\u03bf \u0391\u03c1\u03c7\u03b5\u03af\u03bf
+action.file.open=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 \u0391\u03c1\u03c7\u03b5\u03af\u03bf
+action.file.open-url=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 URL
+action.file.save=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7
+action.file.save-as=\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u03a9\u03c2
+action.file.print=\u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7
+action.file.print-preview=\u03a0\u03c1\u03bf\u03b5\u03c0\u03b9\u03c3\u03ba\u03cc\u03c0\u03b7\u03c3\u03b7 \u0395\u03ba\u03c4\u03cd\u03c0\u03c9\u03c3\u03b7\u03c2
+action.file.exit=\u0388\u03be\u03bf\u03b4\u03bf\u03c2 TuxGuitar
+action.edit.undo=\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7
+action.edit.redo=\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+action.edit.voice-1=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a6\u03c9\u03bd\u03ae\u03c2 1
+action.edit.voice-2=\u0395\u03c0\u03b9\u03bb\u03bf\u03b3\u03ae \u03a6\u03c9\u03bd\u03ae\u03c2 2
+action.composition.change-time-signature=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03a1\u03c5\u03b8\u03bc\u03bf\u03cd
+action.composition.change-tempo=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03a4\u03ad\u03bc\u03c0\u03bf
+action.composition.change-info=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03a0\u03bb\u03b7\u03c1\u03bf\u03c6\u03bf\u03c1\u03b9\u03ce\u03bd \u03a4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+action.composition.change-clef=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u039a\u03bb\u03b5\u03b9\u03b4\u03b9\u03bf\u03cd
+action.composition.change-key-signature=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03a1\u03c5\u03b8\u03bc\u03bf\u03cd
+action.composition.change-triplet-feel=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c3\u03c4\u03bf feeling \u03c4\u03bf\u03c5 \u03a4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+action.view.layout-set-page=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7\u03c2 \u03a3\u03b5\u03bb\u03af\u03b4\u03b1\u03c2
+action.view.layout-set-linear=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0393\u03c1\u03b1\u03bc\u03bc\u03b9\u03ba\u03ae\u03c2 \u0394\u03b9\u03ac\u03c4\u03b1\u03be\u03b7\u03c2
+action.view.layout-set-multitrack=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03bf\u03bb\u03c5\u03ba\u03ac\u03bd\u03b1\u03bb\u03b7\u03c2 \u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2
+action.view.layout-set-score-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b1\u03c1\u03c4\u03b9\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+action.view.layout-set-tablature-enabled=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03bc\u03c0\u03bb\u03b1\u03c4\u03bf\u03cd\u03c1\u03b1\u03c2
+action.view.layout-set-compact=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a3\u03c5\u03bc\u03c0\u03b1\u03b3\u03bf\u03cd\u03c2 \u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\u03c2
+action.view.layout-set-chord-diagram-enabled=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u0394\u03b9\u03b1\u03b3\u03c1\u03ac\u03bc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+action.view.layout-set-chord-name-enabled=\u0395\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u039f\u03bd\u03cc\u03bc\u03b1\u03c4\u03bf\u03c2 \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+action.view.show-fretboard=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a4\u03b1\u03c3\u03c4\u03b9\u03ad\u03c1\u03b1\u03c2
+action.view.show-piano=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03b9\u03ac\u03bd\u03bf\u03c5
+action.view.show-matrix=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u03a0\u03af\u03bd\u03b1\u03ba\u03b1
+action.view.show-mixer=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u039c\u03af\u03ba\u03c4\u03b7
+action.view.show-transport=\u03a0\u03c1\u03bf\u03b2\u03bf\u03bb\u03ae \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1
+action.track.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+action.track.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+action.track.clone=\u039a\u03bb\u03c9\u03bd\u03bf\u03c0\u03bf\u03af\u03b7\u03c3\u03b7 \u039a\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+action.track.go-first=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03c0\u03c1\u03ce\u03c4\u03bf \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+action.track.go-last=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+action.track.go-next=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+action.track.go-previous=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03ba\u03bf\u03bc\u03bc\u03ac\u03c4\u03b9
+action.track.lyrics=\u0395\u03c0\u03b5\u03be\u03b5\u03c1\u03b3\u03b1\u03c3\u03af\u03b1 \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd \u03c3\u03c4\u03bf\u03af\u03c7\u03c9\u03bd
+action.track.properties=\u0391\u03bb\u03bb\u03b1\u03b3\u03ae \u03c1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03c9\u03bd \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd
+action.track.move-down=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03ba\u03ac\u03c4\u03c9
+action.track.move-up=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03ba\u03bf\u03bc\u03bc\u03b1\u03c4\u03b9\u03bf\u03cd \u03c0\u03c1\u03bf\u03c2 \u03c4\u03b1 \u03c0\u03ac\u03bd\u03c9
+action.measure.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.remove=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.copy=\u0391\u03bd\u03c4\u03b9\u03b3\u03c1\u03b1\u03c6\u03ae \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.paste=\u03a0\u03c1\u03bf\u03bf\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.clean=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03bc\u03ad\u03c4\u03c1\u03bf\u03c5
+action.measure.go-first=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c0\u03c1\u03ce\u03c4\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+action.measure.go-last=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03c3\u03c4\u03bf \u03c4\u03b5\u03bb\u03b5\u03c5\u03c4\u03b1\u03af\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+action.measure.go-next=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c3\u03c4\u03bf \u03b5\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+action.measure.go-previous=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03b1\u03c0\u03cc \u03c3\u03c4\u03bf \u03c0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03bc\u03ad\u03c4\u03c1\u03bf
+action.beat.general.remove-unused-voice=\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u039c\u03b7 \u03a7\u03c1\u03b7\u03c3\u03b9\u03bc\u03bf\u03c0\u03bf\u03b9\u03bf\u03cd\u03bc\u03b5\u03bd\u03b7\u03c2 \u03a6\u03c9\u03bd\u03ae\u03c2
+action.beat.general.voice-up=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b1 \u03ac\u03bd\u03c9 \u03c3\u03c4\u03b5\u03bb\u03ad\u03c7\u03b7
+action.beat.general.voice-down=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b1 \u03ba\u03ac\u03c4\u03c9 \u03c3\u03c4\u03b5\u03bb\u03ad\u03c7\u03b7
+action.beat.general.voice-auto=\u038c\u03c1\u03b9\u03c3\u03b5 \u03b1\u03c5\u03c4\u03cc\u03bc\u03b1\u03c4\u03b1 \u03c4\u03b1 \u03c3\u03c4\u03b5\u03bb\u03ad\u03c7\u03b7
+action.beat.general.set-stroke-up=Set Upstroke
+action.beat.general.set-stroke-down=Set Downstroke
+action.beat.general.move-left=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b5 \u0388\u03bd\u03b1 Beat \u0391\u03c1\u03b9\u03c3\u03c4\u03b5\u03c1\u03ac
+action.beat.general.move-right=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b5 \u0388\u03bd\u03b1 Beat \u0394\u03b5\u03be\u03b9\u03ac
+action.beat.general.move-custom=\u039c\u03b5\u03c4\u03b1\u03ba\u03af\u03bd\u03b7\u03c3\u03b7 \u03a0\u03c1\u03bf\u03c3\u03c9\u03c0\u03bf\u03c0\u03bf\u03b9\u03b7\u03bc\u03ad\u03bd\u03bf\u03c5 Beat
+action.note.general.clean-beat=\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 beat
+action.note.general.decrement-semitone=\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u0397\u03bc\u03b9\u03c4\u03bf\u03bd\u03af\u03bf\u03c5
+action.note.general.increment-semitone=\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u0397\u03bc\u03b9\u03c4\u03bf\u03bd\u03af\u03bf\u03c5
+action.note.general.shift-down=\u039a\u03ac\u03c4\u03c9 \u03bf\u03bb\u03af\u03c3\u03b8\u03b7\u03c3\u03b7
+action.note.general.shift-up=\u03a0\u03ac\u03bd\u03c9 \u03bf\u03bb\u03af\u03c3\u03b8\u03b7\u03c3\u03b7
+action.note.general.tied=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03a3\u03cd\u03b6\u03b5\u03c5\u03be\u03b7\u03c2
+action.note.duration.set-whole=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03bf\u03bb\u03cc\u03ba\u03bb\u03b7\u03c1\u03bf\u03c5
+action.note.duration.set-half=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03bc\u03b9\u03c3\u03bf\u03cd
+action.note.duration.set-quarter=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03bf\u03c5
+action.note.duration.set-eighth=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u039f\u03b3\u03b4\u03cc\u03bf\u03c5
+action.note.duration.set-sixteenth=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u0394\u03b5\u03ba\u03ac\u03c4\u03bf\u03c5-\u0388\u03ba\u03c4\u03bf\u03c5
+action.note.duration.set-thirty-second=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u03a4\u03c1\u03b9\u03b1\u03ba\u03bf\u03c3\u03c4\u03bf\u03cd-\u0394\u03b5\u03c5\u03c4\u03ad\u03c1\u03bf\u03c5
+action.note.duration.set-sixty-fourth=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03c2 \u0394\u03b9\u03ac\u03c1\u03ba\u03b5\u03b9\u03b1 \u03c4\u03bf\u03c5 \u0395\u03be\u03b7\u03ba\u03bf\u03c3\u03c4\u03bf\u03cd-\u03a4\u03b5\u03c4\u03ac\u03c1\u03c4\u03bf\u03c5
+action.note.duration.change-dotted=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf
+action.note.duration.change-double-dotted=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b4\u03b9\u03c0\u03bb\u03cc \u03b4\u03b9\u03c0\u03bb\u03bf\u03cd \u03c0\u03b1\u03c1\u03b5\u03c3\u03c4\u03b9\u03b3\u03bc\u03ad\u03bd\u03bf\u03c5
+action.note.duration.change-division-type=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03c4\u03c1\u03af\u03b7\u03c7\u03bf\u03c5
+action.note.duration.decrement-duration=\u039c\u03b5\u03af\u03c9\u03c3\u03b7 \u03c4\u03b7\u03c2 \u0394\u03b9\u03b1\u03c1\u03ba\u03b5\u03af\u03b1\u03c2
+action.note.duration.increment-duration=\u0391\u03cd\u03be\u03b7\u03c3\u03b7 \u03c4\u03b7\u03c2 \u0394\u03b9\u03b1\u03c1\u03ba\u03b5\u03af\u03b1\u03c2
+action.note.effect.change-vibrato=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 Vibrato
+action.note.effect.change-bend=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 bend
+action.note.effect.change-slide=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 Slide
+action.note.effect.change-hammer=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 hammer-on/pull-off
+action.note.effect.change-accentuated=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 accentuated
+action.note.effect.change-dead=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 dead note
+action.note.effect.change-fade-in=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 fade in
+action.note.effect.change-ghost=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 ghost
+action.note.effect.change-grace=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 grace
+action.note.effect.change-harmonic=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 harmonic
+action.note.effect.change-heavy-accentuated=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 heavy accentuated
+action.note.effect.change-palm-mute=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 palm mute
+action.note.effect.change-popping=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 popping
+action.note.effect.change-slapping=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 slapping
+action.note.effect.change-staccato=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 staccato
+action.note.effect.change-tapping=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 tapping
+action.note.effect.change-tremolo-bar=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 tremolo bar
+action.note.effect.change-tremolo-picking=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 tremolo picking
+action.note.effect.change-trill=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7/\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 Trill
+action.insert.open-repeat=\u0386\u03bd\u03bf\u03b9\u03be\u03b5 \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+action.insert.close-repeat=\u039a\u03bb\u03b5\u03af\u03c3\u03b5 \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+action.insert.repeat-alternative=\u0395\u03bd\u03b1\u03bb\u03bb\u03b1\u03ba\u03c4\u03b9\u03ba\u03ae \u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7
+action.insert.chord=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03a3\u03c5\u03b3\u03c7\u03bf\u03c1\u03b4\u03af\u03b1\u03c2
+action.insert.text=\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u039a\u03b5\u03b9\u03bc\u03ad\u03bd\u03bf\u03c5
+action.marker.add=\u03a0\u03c1\u03cc\u03c3\u03b8\u03b5\u03c3\u03b7 \u03a3\u03b7\u03bc\u03b1\u03b4\u03b9\u03bf\u03cd
+action.marker.go-next=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u0395\u03c0\u03cc\u03bc\u03b5\u03bd\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+action.marker.go-previous=\u03a0\u03ae\u03b3\u03b1\u03b9\u03bd\u03b5 \u03c3\u03c4\u03bf \u03a0\u03c1\u03bf\u03b7\u03b3\u03bf\u03cd\u03bc\u03b5\u03bd\u03bf \u03a3\u03b7\u03bc\u03ac\u03b4\u03b9
+action.transport.play=\u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae \u03a4\u03c1\u03b1\u03b3\u03bf\u03c5\u03b4\u03b9\u03bf\u03cd
+action.transport.stop=\u039b\u03ae\u03be\u03b7 \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ae\u03c2
+action.transport.mode=\u039b\u03b5\u03b9\u03c4\u03bf\u03c5\u03c1\u03b3\u03af\u03b1 \u0391\u03bd\u03b1\u03c0\u03b1\u03c1\u03b1\u03b3\u03c9\u03b3\u03ad\u03b1
+action.transport.metronome=\u039c\u03b5\u03c4\u03c1\u03bf\u03bd\u03cc\u03bc\u03bf\u03c2
+action.transport.set-loop-start=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03b7\u03bd \u03b1\u03c1\u03c7\u03ae \u03c4\u03b7\u03c2 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+action.transport.set-loop-end=\u038c\u03c1\u03b9\u03c3\u03b5 \u03c4\u03bf \u03c4\u03ad\u03bb\u03bf\u03c2 \u03c4\u03b7\u03c2 \u03b5\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7\u03c2
+action.tools.browser=\u03a0\u03b5\u03c1\u03b9\u03b7\u03b3\u03b7\u03c4\u03ae\u03c2
+action.tools.transpose=\u039c\u03b5\u03c4\u03b1\u03c6\u03bf\u03c1\u03ac \u039d\u03cc\u03c4\u03c9\u03bd
+action.settings.configure=\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2
+action.help.doc=\u0392\u03bf\u03ae\u03b8\u03b5\u03b9\u03b1
diff --git a/TuxGuitar/share/lang/messages_en.properties b/TuxGuitar/share/lang/messages_en.properties
index ecad9c3..6bfa01d 100644
--- a/TuxGuitar/share/lang/messages_en.properties
+++ b/TuxGuitar/share/lang/messages_en.properties
@@ -199,6 +199,8 @@ track.properties=Properties
 track.properties.general=General
 track.name.default-percussion-name=Percussion
 track.lyrics=Lyrics
+track.solo=Solo
+track.mute=Mute
 
 lyric.editor=Lyric Editor
 
@@ -317,20 +319,17 @@ transport.mode.loop-range.to-default=To the end
 transport.set-loop-start=Set loop start point
 transport.set-loop-end=Set loop end point
 
-mixer=Mixer
-mixer.volume=Gain
-mixer.track.solo=Solo
-mixer.track.mute=Mute
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.volume=Volume
-mixer.channel.balance=Balance
-mixer.channel.chorus=Chorus
-mixer.channel.reverb=Reverb
-mixer.channel.phaser=Phaser
-mixer.channel.tremolo=Tremolo
-mixer.channel.free=Free
-mixer.channel.link=Link
+instruments.volume=Gain
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=Volume
+instrument.balance=Balance
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Free
+instrument.link=Link
 
 
 repeat.open=Open Repeat
@@ -460,8 +459,6 @@ key-bindings-editor-shortcut-column=Keys
 key-bindings-editor-push-a-key=Press a key
 key-bindings-editor-save-question=There are unsaved changes, do you want to exit without saving?
 
-key-bindings-editor-reserved-title=Reserved Shortcut
-key-bindings-editor-reserved-message=Sorry, this shortcut is reserved
 key-bindings-editor-override=Shortcut already in use! Are you sure you want to use it?
 
 print.print=Print
diff --git a/TuxGuitar/share/lang/messages_es.properties b/TuxGuitar/share/lang/messages_es.properties
index 04914c4..89b7be4 100644
--- a/TuxGuitar/share/lang/messages_es.properties
+++ b/TuxGuitar/share/lang/messages_es.properties
@@ -181,16 +181,13 @@ help.about.license=Licencia
 help.about.authors=Autores
 help.about.description=Descripci\u00F3n
 
-mixer=Mezclador
-mixer.volume=Ganancia
-mixer.track.solo=Solo
-mixer.track.mute=Silencio
-mixer.channel.volume=Volumen
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=Balance
-mixer.channel.free=Libre
-mixer.channel.link=Ligado
+instruments.volume=Ganancia
+instrument.volume=Volumen
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balance
+instrument.free=Libre
+instrument.link=Ligado
 
 track=Pista
 track.number=N�
@@ -210,6 +207,8 @@ track.move-up=Mover Arriba
 track.move-down=Mover Abajo
 track.name.default-percussion-name=Percusi\u00F3n
 track.lyrics=Editar letras
+track.solo=Solo
+track.mute=Silencio
 
 lyric.editor=Editor de letras
 
@@ -459,8 +458,6 @@ key-bindings-editor-action-column=Acciones
 key-bindings-editor-shortcut-column=Teclas
 key-bindings-editor-push-a-key=Presione una Tecla
 key-bindings-editor-save-question=Se encontraron cambios sin guardar, desea salir de todos modos?
-key-bindings-editor-reserved-title=Tecla Reservada
-key-bindings-editor-reserved-message=Lo siento, esta es una tecla reservada del sistema
 key-bindings-editor-override=Ya existe una acci\u00F3n para estas teclas, desea sobreescibirla?
 
 
diff --git a/TuxGuitar/share/lang/messages_eu.properties b/TuxGuitar/share/lang/messages_eu.properties
index 0c63fbc..65d3f82 100644
--- a/TuxGuitar/share/lang/messages_eu.properties
+++ b/TuxGuitar/share/lang/messages_eu.properties
@@ -367,22 +367,19 @@ help.about.authors=Autoreak
 
 
 help.about.description=Deskribapena
-mixer=Mezkladorea
 
-mixer.volume=Ganancia
 
-mixer.track.solo=Solo
+instruments.volume=Ganancia
 
-mixer.track.mute=Isildu
-mixer.channel.volume=Bolumena
+instrument.volume=Bolumena
 
-mixer.channel.channel=CH
+instrument.channel=CH
 
-mixer.channel.effect-channel=EC
+instrument.effect-channel=EC
 
-mixer.channel.balance=Balance
-mixer.channel.free=Libre
-mixer.channel.link=Ligado
+instrument.balance=Balance
+instrument.free=Libre
+instrument.link=Ligado
 
 
 track=Pista
@@ -418,6 +415,11 @@ track.move-up=Goruntz
 track.move-down=Beheruntz
 
 track.name.default-percussion-name=Perkusioa
+
+track.solo=Solo
+
+track.mute=Isildu
+
 track.lyrics=Letren Edizioa
 
 
@@ -785,10 +787,6 @@ key-bindings-editor-shortcut-column=Teclak
 key-bindings-editor-push-a-key=Sakatu tekla bat
 key-bindings-editor-save-question=Aldaketak aurkitu dira, irten nahi al duzu?
 
-key-bindings-editor-reserved-title=Tecla Reservada
-
-key-bindings-editor-reserved-message=Lo siento, esta es una tecla reservada del sistema
-
 key-bindings-editor-override=Badago ekintz bat tekla hauekin, aldatu nahi al duzu berri honekin?
 
 
diff --git a/TuxGuitar/share/lang/messages_fi.properties b/TuxGuitar/share/lang/messages_fi.properties
new file mode 100644
index 0000000..0f1cbdf
--- /dev/null
+++ b/TuxGuitar/share/lang/messages_fi.properties
@@ -0,0 +1,688 @@
+ok=Ok 
+cancel=Peruuta 
+yes=Kyll\u00e4 
+no=Ei 
+add=Lis\u00e4\u00e4 
+edit=Muokkaa
+remove=Poista 
+save=Tallenna 
+exit=Lopeta
+close=Sulje 
+choose=Valitse 
+color=V\u00e4ri
+title=Otsikko
+go=Siirry
+warning=Varoitus
+error=Virhe
+plugins=Liit\u00e4nn\u00e4iset 
+options=Valinnat 
+defaults=Oletusarvot
+clean=Tyhjenn\u00e4
+rename=Nime\u00e4 uudelleen
+fret=Otelauta
+position=Sijainti
+name=Nimi 
+author=Tekij\u00e4
+version=Versio
+description=Kuvaus
+info=Info
+configure=M\u00e4\u00e4rit\u00e4 
+url=URL 
+		
+file=Tiedosto 
+file.new=Uusi 
+file.open=Avaa
+file.save=Tallenna 
+file.save-as=Tallenna nimell\u00e4
+file.save-changes-question=Kappaleessa on tallentamattomia muutoksia. \nHaluatko tallentaa muutokset? 
+file.exit=Lopeta
+file.export=Vie
+file.export-midi=Vie MIDI-tiedostona
+file.export-pdf=Vie PDF-dokumenttina
+file.print=Tulosta
+file.print-preview=Tulostuksen esikatselu
+file.import=Tuo
+file.import-midi=Tuo MIDI-tiedosto
+file.export-ascii=Vie ASCII-tekstin\u00e4
+file.history=Viimeksi avatut tiedostot
+file.open-url=Avaa URL 
+file.open.error=Ei voi avata: (0) 
+file.save.error=Ei voi tallentaa: (0) 
+file.import.error=Ei voi tuoda: (0) 
+file.export.error=Ei voi vied\u00e4: (0) 
+file.overwrite-question=T\u00e4m\u00e4 tiedosto on jo olemassa. Haluatko korvata sen? 
+		
+edit.menu=Muokkaa
+edit.undo=Kumoa
+edit.redo=Tee uudelleen
+edit.copy=Kopioi
+edit.from=Mist\u00e4 
+edit.to=Mihin
+edit.all-tracks=Kaikki raidat
+edit.paste=Liit\u00e4 
+edit.paste.count=Liit\u00e4 useita kertoja
+edit.paste.replace-mode=Liit\u00e4 nykyiseen tahtiin
+edit.paste.insert-mode=Liit\u00e4 uutena tahtina
+edit.delete=Poista
+edit.cut=Leikkaa
+edit.mouse-mode-selection=Valintatila
+edit.mouse-mode-edition=Nuottien muokkaus -tila
+edit.not-natural-key=Ylennys/alennus-tila
+edit.voice-1=Valitse \u00e4\u00e4ni 1 
+edit.voice-2=Valitse \u00e4\u00e4ni 2 
+		
+view=N\u00e4yt\u00e4 
+view.layout=Asettelu
+view.layout.page=Sivun ulkoasu
+view.layout.linear=Lineaarinen ulkoasu 
+view.layout.compact=Tiivis ulkoasu
+view.layout.multitrack=Moniraitainen
+view.layout.chord-style=N\u00e4yt\u00e4 soinnusta
+view.layout.chord-name=Soinnun nimi
+view.layout.chord-diagram=Sointukuva
+view.layout.score-enabled=N\u00e4yt\u00e4 nuottiviivasto
+view.layout.tablature-enabled=N\u00e4yt\u00e4 tabulatuuri
+view.show-mixer=N\u00e4yt\u00e4 mikseri
+view.show-fretboard=N\u00e4yt\u00e4 otelauta
+view.show-piano=N\u00e4yt\u00e4 piano
+view.show-matrix=N\u00e4yt\u00e4 matriisi
+view.show-transport=N\u00e4yt\u00e4 soitin
+		
+fretboard.direction=Suunta
+fretboard.right-mode=Oikeak\u00e4tinen
+fretboard.left-mode=Vasenk\u00e4tinen
+fretboard.background-color=Taustav\u00e4ri
+fretboard.display-note-text=N\u00e4yt\u00e4 nuotin nimi
+fretboard.display-scale-text=N\u00e4yt\u00e4 s\u00e4velasteikko
+fretboard.font=Kirjaisinlaji
+fretboard.fretpoint-color=Otelaudan v\u00e4ri
+fretboard.note-color=Nuotin v\u00e4ri
+fretboard.scale-note-color=Soitettavan/valitun nuotin v\u00e4ri
+fretboard.settings=Otelaudan asetukset
+fretboard.string-color=Nauhan v\u00e4ri
+fretboard.settings.options=Valinnat 
+		
+piano.editor=Pianoeditori
+piano.natural-key-color=Valkoisen koskettimen v\u00e4ri
+piano.not-natural-key-color=Mustan koskettimen v\u00e4ri
+piano.note-color=Nuotin v\u00e4ri
+piano.scale-note-color=S\u00e4velasteikon v\u00e4ri
+piano.settings=Pianon asetukset
+		
+matrix.editor=Matriisieditori
+matrix.grids=Pystyviivojen lukum\u00e4\u00e4r\u00e4
+matrix.border-color=Reunan v\u00e4ri
+matrix.font=Kirjasinlaji
+matrix.foreground-color=Edustan v\u00e4ri
+matrix.line-color-1=Parittoman rivin v\u00e4ri
+matrix.line-color-2=Parillisen rivin v\u00e4ri
+matrix.line-color-over=Osoittimen alla olevan rivin v\u00e4ri
+matrix.note-color=Nuotin v\u00e4ri
+matrix.play-note-color=Nuotin v\u00e4ri soitettaessa 
+matrix.position-color=Paikan v\u00e4ri
+matrix.settings=Matriisin asetukset
+		
+composition=Nuottiviivasto
+composition.timesignature=Tahtilaji
+composition.timesignature.Numerator=Osoittaja 
+composition.timesignature.denominator=Nimitt\u00e4j\u00e4 
+composition.timesignature.to-the-end=Loppuun 
+composition.tempo=Tempo 
+composition.tempo-percent=Prosentti
+composition.tempo.invalid=Virheellinen Tempo 
+composition.tempo.start-to-end=Aseta t\u00e4m\u00e4 tempo koko kappaleelle
+composition.tempo.position-to-end=Aseta tempo kappaleen loppuun
+composition.tempo.position-to-next=Aseta tempo seuraavan merkin kohdalle
+composition.properties=Ominaisuudet 
+composition.name=Nimi 
+composition.artist=Esitt\u00e4j\u00e4
+composition.album=Albumi
+composition.author=Tekij\u00e4
+composition.date=P\u00e4iv\u00e4m\u00e4\u00e4r\u00e4 
+composition.copyright=Tekij\u00e4noikeus
+composition.writer=Tabulatuurin luoja
+composition.transcriber=Tekstityksen tekij\u00e4 
+composition.comments=Kommentit 
+composition.tripletfeel=Trioli
+composition.clef=Nuottiavain 
+composition.clef.treble=G-avain
+composition.clef.bass=F-avain
+composition.clef.tenor=Tenori
+composition.clef.alto=Altto
+composition.clef.to-the-end=Aseta t\u00e4m\u00e4 nuottiavain kappaleen loppuun 
+composition.keysignature=S\u00e4vellaji
+composition.keysignature.natural=Palautus
+composition.keysignature.sharp-1=1 ylennys
+composition.keysignature.sharp-2=2 ylennyst\u00e4
+composition.keysignature.sharp-3=3 ylennyst\u00e4
+composition.keysignature.sharp-4=4 ylennyst\u00e4
+composition.keysignature.sharp-5=5 ylennyst\u00e4
+composition.keysignature.sharp-6=6 ylennyst\u00e4
+composition.keysignature.sharp-7=7 ylennyst\u00e4
+composition.keysignature.flat-1=1 alennus
+composition.keysignature.flat-2=2 alennusta
+composition.keysignature.flat-3=3 alennusta
+composition.keysignature.flat-4=4 alennusta
+composition.keysignature.flat-5=5 alennusta
+composition.keysignature.flat-6=6 alennusta
+composition.keysignature.flat-7=7 alennusta
+composition.keysignature.to-the-end=Aseta s\u00e4vellajimerkint\u00e4 kappaleen loppuun
+composition.tripletfeel=Trioli 
+composition.tripletfeel.none=Ei triolia
+composition.tripletfeel.eighth=8-tupletti
+composition.tripletfeel.sixteenth=16-tupletti
+composition.tripletfeel.to-the-end=Aseta trioli kappaleen loppuun
+		
+help=Ohjeet
+help.help=Ohjeet
+help.doc=Dokumentaatio
+help.about=Tietoja ohjelmasta
+help.about.license=Lisenssiehdot 
+help.about.authors=Tekij\u00e4t 
+help.about.description=Kuvaus
+		
+track=Raita 
+track.number=Nro
+track.name=Nimi 
+track.color=V\u00e4ri
+track.first=Ensimm\u00e4inen raita
+track.last=Viimeinen raita
+track.previous=Edellinen raita
+track.next=Seuraava raita
+track.add=Lis\u00e4\u00e4 raita
+track.remove=Poista raita
+track.clone=Kopioi raita
+track.move-up=Siirr\u00e4 yl\u00f6s 
+track.move-down=Siirr\u00e4 alas 
+track.instrument=Instrumentti
+track.properties=Ominaisuudet 
+track.properties.general=Yleiset 
+track.name.default-percussion-name=Ly\u00f6m\u00e4soittimet
+track.lyrics=Sanoitus
+track.solo=Soolo
+track.mute=Hiljenn\u00e4
+
+lyric.editor=Sanoituksen muokkaus
+		
+measure=Tahti
+measure.first=Ensimm\u00e4inen tahti
+measure.last=Viimeinen tahti
+measure.previous=Edellinen tahti
+measure.next=Seuraava tahti
+measure.add=Lis\u00e4\u00e4 tahti
+measure.add.count=Lis\u00e4yksen m\u00e4\u00e4r\u00e4
+measure.add-before-current-position=Lis\u00e4\u00e4 tahti ennen nykyist\u00e4 sijaintia
+measure.add-after-current-position=Lis\u00e4\u00e4 tahti nykyisen sijainnin j\u00e4lkeen
+measure.add-at-end=Lis\u00e4\u00e4 tahti kappaleen loppuun
+measure.remove=Poista tahti
+measure.copy=Kopioi tahti
+measure.paste=Liit\u00e4 tahti
+measure.clean=Tyhjenn\u00e4 tahti
+		
+duration=Kesto
+duration.whole=Kokonuotti
+duration.half=Puolinuotti
+duration.quarter=Nelj\u00e4sosanuotti
+duration.eighth=Kahdeksasosanuotti
+duration.sixteenth=Kuudestoistaosanuotti
+duration.thirtysecond=Kolmaskymmeneskahdesosanuotti
+duration.sixtyfourth=Kuudeskymmenesnelj\u00e4sosanuotti
+duration.dotted=Pisteellinen
+duration.doubledotted=Tuplapisteellinen
+duration.division-type=Trioli
+		
+dynamic=Dynamiikka
+dynamic.piano-pianissimo=Piano Pianissimo 
+dynamic.pianissimo=Pianissimo 
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano
+dynamic.mezzo-forte=Mezzo Forte
+dynamic.forte=Forte 
+dynamic.fortissimo=Fortissimo 
+dynamic.forte-fortissimo=Forte Fortissimo 
+		
+effects=Efektit
+effects.vibrato=Vibraatto
+effects.bend=Venytys (Bend)
+effects.deadnote=Kuollut nuotti (Dead Note)
+effects.slide=Liuku (Slide)
+effects.hammer=Hammer-on/Pull-off
+effects.tremolo-bar=Tremolo Bar     
+effects.tremolo-bar-editor=Tremolo Bar Editor
+effects.tremolo-bar.dip=Dip
+effects.tremolo-bar.dive=Dive
+effects.tremolo-bar.release-up=Release Up
+effects.tremolo-bar.release-down=Release Down
+effects.tremolo-bar.inverted-dip=Inverted Dip
+effects.tremolo-bar.return=Paluu
+effects.ghostnote=Haamunuotti (Ghost Note)
+effects.accentuatednote=Aksentti
+effects.heavyaccentuatednote=Voimakas aksentti
+effects.harmonic=Harmooninen
+effects.grace=Etuhele
+effects.grace-editor=Etuheleen muokkaus
+effects.grace.before-beat=Ennen iskua
+effects.grace.on-beat=Iskun kohdalla
+effects.grace.transition=Siirtym\u00e4
+effects.grace.transition-none=Ei mit\u00e4\u00e4n
+effects.grace.transition-bend=Venytys (Bend)
+effects.grace.transition-slide=Liuku (Slide)
+effects.grace.transition-hammer=Hammer
+effects.trill=Trilli
+effects.trill-editor=Trillin muokkaus
+effects.tremolo-picking=Tremolo Picking
+effects.tremolo-picking-editor=Tremolo Picking Editor
+effects.palm-mute=Palm Mute
+effects.staccato=Staccato
+effects.tapping=Tapping
+effects.slapping=Slapping
+effects.popping=Popping  
+effects.fade-in=Fade In  
+effects.harmonic-editor=Harmonic Editor
+effects.harmonic.type-of-harmonic=Type of Harmonic
+effects.harmonic.natural=Natural Harmonic
+effects.harmonic.artificial=Artificial Harmonic
+effects.harmonic.artificial.key-offset=Key Offset
+effects.harmonic.tapped=Tapped Harmonic
+effects.harmonic.tapped.left-hand=Vasen k\u00e4si
+effects.harmonic.tapped.right-hand=Oikea k\u00e4si
+effects.harmonic.pinch=Pinch Harmonic
+effects.harmonic.semi=Semi Harmonic
+		
+bend.editor=Taivutuksen (Bend) muokkaus
+bend.bend=Taivutus (Bend)
+bend.bend-release=Taivutus/Vapautus
+bend.bend-release-bend=Taivutus/Vapautus/Taivutus
+bend.prebend=Esitaivutus (PreBend)
+bend.prebend-release=Esitaivutus/Vapautus
+		
+transport=Soitin
+transport.start=Aloita soitto
+transport.stop=Lopeta soitto
+transport.pause=Keskeyt\u00e4
+transport.first=Ensimm\u00e4inen 
+transport.last=Viimeinen 
+transport.previous=Edellinen 
+transport.next=Seuraava 
+transport.metronome=Metronomi
+transport.mode=Valitse soittotila
+transport.mode.simple=Normaalitila
+transport.mode.simple.tempo-percent=Prosenttia temposta
+transport.mode.simple.loop=Jatkuva soitto 
+transport.mode.trainer=Harjoittelutila
+transport.mode.trainer.increment-description=Temmon kasvatus
+transport.mode.loop-range=Toistov\u00e4li
+transport.mode.loop-range.from=Soita tahdista
+transport.mode.loop-range.from-default=Alusta 
+transport.mode.loop-range.to=Soita tahtiin
+transport.mode.loop-range.to-default=Loppuun 
+transport.set-loop-start=Aseta toiston alkukohta
+transport.set-loop-end=Aseta toiston loppukohta
+		
+instruments.volume=Vahvistus
+instrument.channel=CH 
+instrument.effect-channel=EC
+instrument.volume=\u00c4\u00e4nenvoimakkuus
+instrument.balance=Tasapaino
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Free
+instrument.link=Link
+		
+		
+repeat.open=Kertauksen aloitusmerkki
+repeat.close=Kertauksen lopetusmerkki
+repeat.alternative=Kertauksen vaihtoeht. maalit
+repeat.alternative.editor=Muokkaa vaihtoehtoisia maaleja
+repetitions=Kertausmerkit
+repeat.number-of-repetitions=Kertausten m\u00e4\u00e4r\u00e4
+		
+beat=Isku
+beat.clean=Tyhjenn\u00e4 isku
+beat.voice.remove-unused=Remove Unused Voice
+beat.voice-up=Nuottien varret yl\u00f6s
+beat.voice-down=Nuottien varret alas
+beat.voice-auto=Nuottien varret autom.
+beat.stroke=Stroke
+beat.stroke-up=Upstroke
+beat.stroke-down=Downstroke
+beat.move-left=Siirr\u00e4 yksi isku vasemmalle
+beat.move-right=Siirr\u00e4 yksi isku oikealle
+beat.move-custom=Siirr\u00e4...
+beat.move-custom.dialog.title=Siirr\u00e4
+beat.move-custom.dialog.direction-tip=Move Direction
+beat.move-custom.dialog.move-1.tip=Major Move
+beat.move-custom.dialog.move-2.tip=Fine Move
+beat.move-custom.dialog.direction=Suunta
+beat.move-custom.dialog.direction.right=Siirr\u00e4 oikealle
+beat.move-custom.dialog.direction.left=Siirr\u00e4 vasemmalle
+beat.move-custom.dialog.count=Lukum\u00e4\u00e4r\u00e4
+beat.move-custom.dialog.duration=Kesto
+beat.move-custom.dialog.duration.type=Pisteellinen/tuplapisteellinen
+beat.move-custom.dialog.duration.type.normal=Ei mit\u00e4\u00e4n
+beat.move-custom.dialog.duration.division-type=Jakosuhde
+beat.move-custom.dialog.duration.division-type.normal=Normaali (Tuplet) 
+		
+note=Nuotti
+note.semitone-up=Puolis\u00e4velaskel yl\u00f6s
+note.semitone-down=Puolis\u00e4velaskel alas
+note.shift-up=Siirr\u00e4 yl\u00f6s 
+note.shift-down=Siirr\u00e4 alas 
+note.tiednote=Sidottu nuotti
+note.deadnote=Dead Note
+		
+insert.chord=Lis\u00e4\u00e4 sointu
+chord.editor=Sointueditori
+chord=Suintu
+chord.name=Nimi 
+chord.bass=Basso
+chord.custom=Muokautettu sointu
+chord.custom.name-empty-error=Sointu ei voi olla nimet\u00f6n.
+chord.custom.name-exist-error=Soinnun nimi on jo olemassa. 
+chord.settings.tip=Mukautetut asetukset 
+chord.settings.type=Tyyppi 
+chord.settings.type.most-common=Yleisimm\u00e4t
+chord.settings.type.inversions=Inversions 
+chord.settings.type.close-voiced=Suljettu \u00e4\u00e4ni
+chord.settings.type.open-voiced=Vapaa \u00e4\u00e4ni 
+chord.settings.open-chords=Avaa soinnut
+chord.settings.chords-to-display=N\u00e4yt\u00e4 sointuja (kpl)
+chord.settings.search-frets=Search Frets
+chord.settings.minimum-fret=Min
+chord.settings.maximum-fret=Max
+		
+instrument=Instrumentti
+instrument.instrument=Instrumentti
+instrument.percussion-track=Ly\u00f6m\u00e4soittimien raita
+		
+tuning=Viritys
+tuning.offset=Vastapainona 
+tuning.strings=Kielet
+tuning.strings.transpose=Transponoi nuotit
+tuning.strings.transpose.try-keep-strings=Yrit\u00e4 pit\u00e4\u00e4 nuotit samalla kielell\u00e4
+tuning.strings.transpose.apply-to-chords=Transponoi soinnut
+		
+language=Kieli 
+		
+choose-color=Valitse v\u00e4ri 
+		
+settings=Asetukset
+settings.config=M\u00e4\u00e4rit\u00e4 TuxGuitar 
+settings.config.language=Kieli 
+settings.config.language.choose=Valitse kieli 
+settings.config.styles=Tyylit
+settings.config.styles.general=Yleiset tyylit
+settings.config.styles.printer=Tulostustyylit
+settings.config.styles.font.default=Oletuskirjaisinlaji
+settings.config.styles.font.note=Nuotin fontti
+settings.config.styles.font.lyric=Sanoituksen kirjaisinlaji
+settings.config.styles.font.text=Tekstin kirjaisinlaji
+settings.config.styles.font.time-signature=Tahtilajin kirjaisinlaji
+settings.config.styles.font.printer-default=Tulostuksen oletuskirjaisinlaji
+settings.config.styles.font.printer-note=Tulostuksen nuottien kirjaisinlaji
+settings.config.styles.font.printer-time-signature=Tulostuksen tahtilajin kirjaisinlaji
+settings.config.styles.color.score-note=Nuotin v\u00e4li nuottiviivastolla
+settings.config.styles.color.tab-note=Nuotin v\u00e4ri tabulatuurissa
+settings.config.styles.color.play-note=Soitettavan nuotin v\u00e4ri
+settings.config.apply-changes-question=Haluatko toteuttaa muutokset nyt? 
+settings.config.sound=\u00c4\u00e4ni
+settings.config.main=Yleiset 
+settings.config.main.window-title=Ikkunan otsikko 
+settings.config.main.window-title.help=The following variables will be replaced at the window title:
+settings.config.main.window-title.var.description.appname=This variable represents the Application Name: TuxGuitar
+settings.config.main.window-title.var.description.appversion=This variable represents the version of TuxGuitar.
+settings.config.main.window-title.var.description.filename=This variable represents the name of the opened file
+settings.config.main.window-title.var.description.filepath=This variable represents the path of the opened file
+settings.config.main.window-title.var.description.songname=This variable represents the name of the song
+settings.config.main.window-title.var.description.songauthor=This variable represents the author of the song
+settings.config.main.window-title.var.description.songalbum=This variable represents the album of the song
+settings.config.main.window-title.var.description.songartist=This variable represents the artist of the song
+settings.config.main.options=Valinnat 
+settings.config.main.splash-enabled=N\u00e4yt\u00e4 aloitusruutu k\u00e4ynnistett\u00e4ess\u00e4 
+settings.config.main.table.auto-size.enabled=Salli automaattinen taulukon koon muutos
+settings.config.styles.color.lines=Vaakaviivojen v\u00e4ri
+settings.config.toolbars=Ty\u00f6kalurivit
+settings.config.toolbars.tip=Mukauta ty\u00f6kalurivej\u00e4
+settings.config.toolbars.list=K\u00e4ytett\u00e4viss\u00e4 olevat ty\u00f6kalurivit 
+settings.config.toolbars.move-up=Siirr\u00e4 yl\u00f6s 
+settings.config.toolbars.move-down=Siirr\u00e4 alas 
+settings.config.skin=Teemat
+settings.config.skin.choose=Valitse teema
+settings.keybindings=M\u00e4\u00e4rit\u00e4 n\u00e4pp\u00e4imist\u00f6oikotiet
+		
+key-bindings-editor=N\u00e4pp\u00e4imist\u00f6oikoteiden muokkaus
+key-bindings-editor-action-select=Valitse toiminto
+key-bindings-editor-action-column=Toiminnot
+key-bindings-editor-shortcut-column=N\u00e4pp\u00e4imet
+key-bindings-editor-push-a-key=Paina n\u00e4pp\u00e4int\u00e4 
+key-bindings-editor-save-question=Muutokset ovat tallentamatta. Haluatko lopettaa ilman tallennusta? 
+
+ 
+key-bindings-editor-override=N\u00e4pp\u00e4imist\u00f6oikotie on jo k\u00e4yt\u00f6ss\u00e4. Oletko varma, ett\u00e4 haluat k\u00e4ytt\u00e4\u00e4 sit\u00e4?
+		
+print.print=Tulosta
+print.dialog=Tulosta
+print.service=Palvelu
+print.service.name=Nimi 
+print.service.status=Tila 
+print.service.type=Tyyppi 
+print.service.info=Tiedot
+print.range=Tulostusalue
+print.range.all-pages=Kaikki 
+print.range.pages=Sivut
+print.range.pages-to=Sivuun
+print.copies=Kopiota
+print.copies-number=Kopiom\u00e4\u00e4r\u00e4 
+print.print-to-file=Tulosta tiedostoon 
+print.file-chooser=Valitse 
+print-header.default-song-name=Nimet\u00f6n
+print-header.default-song-author=Nimett\u00f6m\u00e4n 
+		
+print.preview=Tulostuksen esikatselu
+print.preview.page-of=Of
+		
+marker=Merkki
+marker.add=Lis\u00e4\u00e4 merkki
+marker.list=Listaa merkit
+marker.first=Siirry ensimm\u00e4iseen merkkiin
+marker.last=Siirry viimeiseen merkkiin
+marker.next=Siirry seuraavaan merkkiin
+marker.previous=Siirry edelliseen merkkiin
+		
+export.tablature-enabled=N\u00e4yt\u00e4 tabulatuuri
+export.score-enabled=N\u00e4yt\u00e4 nuottiviivasto
+export.chord-name-enabled=N\u00e4yt\u00e4 sointujen nimet
+export.chord-diagram-enabled=N\u00e4yt\u00e4 sointujen kuvat
+export.black-and-white=Mustavalkoinen tila
+		
+scale=S\u00e4velasteikko
+scale.list=S\u00e4velasteikkojen luettelo
+		
+text.insert=Lis\u00e4\u00e4 teksti\u00e4
+text.editor=Tekstieditori
+text.text=Teksti
+		
+tools=Ty\u00f6kalut 
+tools.scale=S\u00e4velasteikkojen luettelo
+tools.browser=Selain
+tools.plugins=Liit\u00e4nn\u00e4iset 
+tools.shortcuts=Pikalinkit
+tools.settings=Asetukset
+		
+tools.transpose=Transponoi
+tools.transpose.semitones=Puolis\u00e4velaskelten m\u00e4\u00e4r\u00e4
+tools.transpose.apply-to-track=Transponoi kaikki tahdit
+tools.transpose.apply-to-measure=Transponoi vain t\u00e4m\u00e4 tahti
+tools.transpose.apply-to-all-tracks=Transponoi kaikki raidat
+tools.transpose.try-keep-strings=Yrit\u00e4 pit\u00e4\u00e4 nuotit samalla kielell\u00e4 jos se on mahdollista.
+tools.transpose.apply-to-chords=Transponoi soinnut
+		
+browser.dialog=Selain
+browser.menu.file=Tiedosto
+browser.open=Avaa
+browser.exit=Lopeta
+browser.menu.collection=Kokoelma
+browser.menu.go=Siirry
+browser.collection.select=Valitse kokoelma
+browser.collection.open=Avaa
+browser.collection.remove=Poista
+browser.collection.close=Sulje
+browser.collection.new=Uusi 
+browser.go-root=Koti 
+browser.go-back=Takaisin 
+browser.refresh=P\u00e4ivit\u00e4
+browser.factory.fs.name=Tiedostoj\u00e4rjestelm\u00e4st\u00e4
+browser.collection.fs.name=Nimi 
+browser.collection.fs.path=Kansio 
+browser.collection.fs.editor-title=Kokoelma tiedostoj\u00e4rjestelm\u00e4st\u00e4
+browser.collection.fs.editor-tip=Valitse kokoelman kansio
+browser.collection.fs.invalid-path=Ole hyv\u00e4 ja valitse kelvollinen kansio 
+		
+midi.port=MIDI-portti 
+midi.sequencer=MIDI-sekvensseri 
+		
+plugin.unknown-value=Ei ole saatavilla
+plugin.column.name=Liit\u00e4nn\u00e4isen nimi
+plugin.column.enabled=Aktiivinen
+		
+		
+#########################		
+###  Tool Bar Items   ###		
+#########################		
+file.items=Tiedosto
+edit.items=Muokkaus
+property.items=Asetukset
+track.items=Raidat
+duration.items=Kesto
+beat.items=Isku
+composition.items=Nuotinnos
+repeat.items=Kertausmerkit
+transport.items=Toisto
+marker.items=Merkit
+insert.items=Lis\u00e4ys
+layout.items=Asettelu
+view.items=N\u00e4kym\u00e4
+effect.items=Efektit
+dynamic.items=Dynamiikka
+		
+#########################		
+###Key Binding Actions###		
+#########################		
+action.file.new=Uusi tiedosto
+action.file.open=Avaa tiedosto 
+action.file.open-url=Avaa URL 
+action.file.save=Tallenna 
+action.file.save-as=Tallenna nimell\u00e4
+action.file.print=Tulosta
+action.file.print-preview=Tulostuksen esikatselu
+action.file.exit=Lopeta TuxGuitar
+action.edit.undo=Kumoa
+action.edit.redo=Tee uudelleen
+action.edit.voice-1=Valitse \u00c4\u00e4ni 1 
+action.edit.voice-2=Valitse \u00c4\u00e4ni 2
+action.composition.change-time-signature=Muuta tahtilajia
+action.composition.change-tempo=Muuta tempoa 
+action.composition.change-info=Muuta kappaleen informaatioa
+action.composition.change-clef=Muuta nuottiavainta
+action.composition.change-key-signature=Muuta s\u00e4vellajia
+action.composition.change-triplet-feel=Muuta triolia
+action.view.layout-set-page=N\u00e4yt\u00e4 sivuasetteluna
+action.view.layout-set-linear=N\u00e4yt\u00e4 jatkuvana asetteluna
+action.view.layout-set-multitrack=N\u00e4yt\u00e4 monta raitaa
+action.view.layout-set-score-enabled=N\u00e4yt\u00e4 nuottiviivasto
+action.view.layout-set-tablature-enabled=N\u00e4yt\u00e4 tabulatuuri
+action.view.layout-set-compact=N\u00e4yt\u00e4 tiiviiss\u00e4 muodossa
+action.view.layout-set-chord-diagram-enabled=N\u00e4yt\u00e4 sointukuvat
+action.view.layout-set-chord-name-enabled=N\u00e4yt\u00e4 sointujen nimet
+action.view.show-fretboard=N\u00e4yt\u00e4 otelauta
+action.view.show-piano=N\u00e4yt\u00e4 Piano 
+action.view.show-matrix=N\u00e4yt\u00e4 matriisi
+action.view.show-mixer=N\u00e4yt\u00e4 mikseri
+action.view.show-transport=N\u00e4yt\u00e4 soitin
+action.track.add=Lis\u00e4\u00e4 raita
+action.track.remove=Poista raita
+action.track.clone=Kopioi raita
+action.track.go-first=Siirry ensimm\u00e4iseen raitaan
+action.track.go-last=Siirry viimeiseen raitaan
+action.track.go-next=Siirry seuraavaan raitaan
+action.track.go-previous=Siirry edelliseen raitaan
+action.track.lyrics=Muokkaa raidan sanoitusta
+action.track.properties=Muokkaa raidan asetuksia
+action.track.move-down=Siirr\u00e4 raitaa alas
+action.track.move-up=Siirr\u00e4 raitaa yl\u00f6s
+action.measure.add=Lis\u00e4\u00e4 tahti
+action.measure.remove=Poista tahti
+action.measure.copy=Kopioi tahti
+action.measure.paste=Liit\u00e4 tahti
+action.measure.clean=Tyhjenn\u00e4 tahti
+action.measure.go-first=Siirry ensimm\u00e4iseen tahtiin
+action.measure.go-last=Siirry viimeiseen tahtiin
+action.measure.go-next=Siirry seuraavaan tahtiin
+action.measure.go-previous=Siirry edelliseen tahtiin
+action.beat.general.remove-unused-voice=Poista k\u00e4ytt\u00e4m\u00e4tt\u00f6m\u00e4t \u00e4\u00e4net
+action.beat.general.voice-up=Siirr\u00e4 varret yl\u00f6s
+action.beat.general.voice-down=Siirr\u00e4 varret alas
+action.beat.general.voice-auto=Aseta varret automaattisesti
+action.beat.general.set-stroke-up=Aseta palkki yl\u00f6s
+action.beat.general.set-stroke-down=Aseta palkki alas
+action.beat.general.move-left=Siirr\u00e4 yksi isku vasemmalle
+action.beat.general.move-right=Siirr\u00e4 yksi isku oikealle
+action.beat.general.move-custom=Siirr\u00e4 iskua
+action.note.general.clean-beat=Puhdas isku
+action.note.general.decrement-semitone=Siirr\u00e4 puolis\u00e4velaskel alas
+action.note.general.increment-semitone=Siirr\u00e4 puolis\u00e4velaskel yl\u00f6s
+action.note.general.shift-down=Siirr\u00e4 alas
+action.note.general.shift-up=Siirr\u00e4 yl\u00f6s
+action.note.general.tied=Lis\u00e4\u00e4 / poista sidottu 
+action.note.duration.set-whole=Aseta kokonuotiksi
+action.note.duration.set-half=Aseta puolinuotiksi
+action.note.duration.set-quarter=Aseta nelj\u00e4sosanuotiksi
+action.note.duration.set-eighth=Aseta kahdeksasosanuotiksi
+action.note.duration.set-sixteenth=Aseta kuudestoistaosanuotiksi
+action.note.duration.set-thirty-second=Aseta kolmaskymmeneskahdesosanuotiksi
+action.note.duration.set-sixty-fourth=Aseta kuudeskymmenesnelj\u00e4sosanuotiksi
+action.note.duration.change-dotted=Lis\u00e4\u00e4 / poista piste 
+action.note.duration.change-double-dotted=Lis\u00e4\u00e4 / poista kaksinkertainen piste
+action.note.duration.change-division-type=Lis\u00e4\u00e4 / poista trioli
+action.note.duration.decrement-duration=V\u00e4henn\u00e4 nuotin kestoa
+action.note.duration.increment-duration=Kasvata nuotin kestoa
+action.note.effect.change-vibrato=Lis\u00e4\u00e4 / poista vibraatto
+action.note.effect.change-bend=Lis\u00e4\u00e4 / poista taivutus (Bend)
+action.note.effect.change-slide=Lis\u00e4\u00e4 / Poista liuku (Slide)
+action.note.effect.change-hammer=Lis\u00e4\u00e4 / poista hammer-on/pull-off 
+action.note.effect.change-accentuated=Lis\u00e4\u00e4 / poista aksentti
+action.note.effect.change-dead=Lis\u00e4\u00e4 / poista kuollut nuotti
+action.note.effect.change-fade-in=Lis\u00e4\u00e4 / poista voimistus
+action.note.effect.change-ghost=Lis\u00e4\u00e4 / poista haamunuotti
+action.note.effect.change-grace=Lis\u00e4\u00e4 / poista etuhele
+action.note.effect.change-harmonic=Lis\u00e4\u00e4 / poista harmoninen 
+action.note.effect.change-heavy-accentuated=Lis\u00e4\u00e4 / poista voimakas aksentti 
+action.note.effect.change-palm-mute=Add/Remove palm mute
+action.note.effect.change-popping=Add/Remove popping
+action.note.effect.change-slapping=Add/Remove slapping
+action.note.effect.change-staccato=Add/Remove staccato
+action.note.effect.change-tapping=Add/Remove tapping
+action.note.effect.change-tremolo-bar=Add/Remove tremolo bar
+action.note.effect.change-tremolo-picking=Add/Remove tremolo picking
+action.note.effect.change-trill=Lis\u00e4\u00e4 / poista Trilli
+action.insert.open-repeat=Kertauksen aloitus
+action.insert.close-repeat=Kertauksen lopetus
+action.insert.repeat-alternative=Kertauksen 2-maali
+action.insert.chord=Lis\u00e4\u00e4 sointu
+action.insert.text=Lis\u00e4\u00e4 teksti\u00e4
+action.marker.add=Lis\u00e4\u00e4 merkki
+action.marker.go-next=Siirry seuraavaan merkkiin
+action.marker.go-previous=Siirry edelliseen merkkin
+action.transport.play=Soita kappale
+action.transport.stop=Lopeta soittaminen
+action.transport.mode=Soittotila 
+action.transport.metronome=Metronomi
+action.transport.set-loop-start=Aseta toiston alkukohta
+action.transport.set-loop-end=Aseta toiston loppukohta
+action.tools.browser=Selain
+action.tools.transpose=Transponoi nuotit
+action.settings.configure=Asetukset
+action.help.doc=Ohjeet
+
diff --git a/TuxGuitar/share/lang/messages_fr.properties b/TuxGuitar/share/lang/messages_fr.properties
index ffed433..ecce2f7 100644
--- a/TuxGuitar/share/lang/messages_fr.properties
+++ b/TuxGuitar/share/lang/messages_fr.properties
@@ -124,15 +124,13 @@ help=Aide
 help.help=Aide
 help.about=A propos
 
-mixer.volume=Gain
-mixer.track.solo=Solo
-mixer.track.mute=Muet
-mixer.channel.volume=Volume
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=Balance
-mixer.channel.free=Free
-mixer.channel.link=Link
+instruments.volume=Gain
+instrument.volume=Volume
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balance
+instrument.free=Free
+instrument.link=Link
 
 track=Piste
 track.number=N�
@@ -153,6 +151,9 @@ track.move-up=Monter
 track.move-down=Descendre
 track.name.default-percussion-name=Percussion
 track.lyrics=Paroles
+track.solo=Solo
+track.mute=Muet
+
 lyric.editor=Editeur de paroles
 
 measure=Mesure
@@ -334,8 +335,6 @@ key-bindings-editor-shortcut-column=Raccourcis
 key-bindings-editor-push-a-key=Presser une touche
 key-bindings-editor-save-question=Des modifications ont �t� effectu�, quitter\nsans enregistrer ?
 
-key-bindings-editor-reserved-title=Raccourci r�serv�
-key-bindings-editor-reserved-message=D�sol�, ce raccourci est r�serv�
 key-bindings-editor-override=Raccourci d�j� utilis� ! Etes vous s�r d?utiliser\ncelui ci ?
 
 
diff --git a/TuxGuitar/share/lang/messages_hu.properties b/TuxGuitar/share/lang/messages_hu.properties
index 4b9f8da..17bb4a7 100644
--- a/TuxGuitar/share/lang/messages_hu.properties
+++ b/TuxGuitar/share/lang/messages_hu.properties
@@ -96,15 +96,13 @@ help=Seg
 help.help=Seg�ts�g
 help.about=N�vjegy
 
-mixer.volume=Er�s�t�s
-mixer.track.solo=Sz�l�
-mixer.track.mute=N�m�t
-mixer.channel.volume=Hanger�
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=Balansz
-mixer.channel.free=Szabad
-mixer.channel.link=K�z�s
+instruments.volume=Er�s�t�s
+instrument.volume=Hanger�
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balansz
+instrument.free=Szabad
+instrument.link=K�z�s
 
 track=S�v
 track.number=N�
@@ -123,6 +121,9 @@ track.properties=Tulajdons
 track.properties.general=�ltal�nos
 track.name.default-percussion-name=Ritmusk�szlet
 track.lyrics=Dalsz�veg
+track.solo=Sz�l�
+track.mute=N�m�t
+
 tunning.offset=K�p�
 lyric.editor=Dalsz�veg szerkeszt�
 
@@ -308,9 +309,6 @@ key-bindings-editor-action-column=M
 key-bindings-editor-shortcut-column=Billenty�k
 key-bindings-editor-push-a-key=Nyomj egy billenty�t
 key-bindings-editor-save-question=Vannak m�g nem mentett v�ltoztat�sok. Biztosan kil�psz ment�s n�lk�l?
-
-key-bindings-editor-reserved-title=Fenntartott kombin�ci�
-key-bindings-editor-reserved-message=Sajn�lom, ez a kombin�ci� fenntartott
 key-bindings-editor-override=A kombin�ci� m�r foglalt! Biztos ezt szeretn�d haszn�lni ?
 
 
diff --git a/TuxGuitar/share/lang/messages_it.properties b/TuxGuitar/share/lang/messages_it.properties
index d123673..607efbb 100644
--- a/TuxGuitar/share/lang/messages_it.properties
+++ b/TuxGuitar/share/lang/messages_it.properties
@@ -131,16 +131,13 @@ help.about.license=Licenza
 help.about.authors=Autori
 help.about.description=Descrizione
 
-mixer=Mixer
-mixer.volume=Gain
-mixer.track.solo=Solo
-mixer.track.mute=Mute
-mixer.channel.volume=Volume
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=Bilanciamento
-mixer.channel.free=Libero
-mixer.channel.link=Link
+instruments.volume=Gain
+instrument.volume=Volume
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Bilanciamento
+instrument.free=Libero
+instrument.link=Link
 
 track=Traccia
 track.number=N\u00b0
@@ -158,6 +155,8 @@ track.properties=Propriet\u00e0
 track.properties.general=Generale
 track.name.default-percussion-name=Percussioni
 track.lyrics=Testo
+track.solo=Solo
+track.mute=Mute
 
 lyric.editor=Modifica Testo
 
@@ -359,8 +358,6 @@ key-bindings-editor-shortcut-column=Tasti
 key-bindings-editor-push-a-key=Premi un Tasto
 key-bindings-editor-save-question=Ci sono modifiche non salvate, vuoi uscire senza salvare?
 
-key-bindings-editor-reserved-title=Scelta rapida riservata
-key-bindings-editor-reserved-message=Spiacente,questa scelta rapida \u00e0 riservata
 key-bindings-editor-override=Scelta rapida gi\u00e0 in uso! Sicuro di volerla usare?
 
 
diff --git a/TuxGuitar/share/lang/messages_ja.properties b/TuxGuitar/share/lang/messages_ja.properties
index a126053..a5a048b 100644
--- a/TuxGuitar/share/lang/messages_ja.properties
+++ b/TuxGuitar/share/lang/messages_ja.properties
@@ -199,6 +199,8 @@ track.properties=\u30c8\u30e9\u30c3\u30af\u306e\u30d7\u30ed\u30d1\u30c6\u30a3
 track.properties.general=\u4e00\u822c
 track.name.default-percussion-name=Drums
 track.lyrics=\u6b4c\u8a5e\u30a8\u30c7\u30a3\u30bf\u3092\u958b\u304f
+track.solo=\u30bd\u30ed
+track.mute=\u30df\u30e5\u30fc\u30c8
 
 lyric.editor=\u6b4c\u8a5e\u30a8\u30c7\u30a3\u30bf
 
@@ -317,16 +319,13 @@ transport.mode.loop-range.to-default=\u6700\u5f8c\u307e\u3067
 transport.set-loop-start=\u30eb\u30fc\u30d7\u306e\u958b\u59cb\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a
 transport.set-loop-end=\u30eb\u30fc\u30d7\u306e\u7d42\u4e86\u30dd\u30a4\u30f3\u30c8\u306b\u8a2d\u5b9a
 
-mixer=\u30df\u30ad\u30b5
-mixer.volume=\u30b2\u30a4\u30f3
-mixer.track.solo=\u30bd\u30ed
-mixer.track.mute=\u30df\u30e5\u30fc\u30c8
-mixer.channel.volume=\u30dc\u30ea\u30e5\u30fc\u30e0
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=\u30d0\u30e9\u30f3\u30b9
-mixer.channel.free=\u672a\u4f7f\u7528
-mixer.channel.link=\u4f7f\u7528\u4e2d
+instruments.volume=\u30b2\u30a4\u30f3
+instrument.volume=\u30dc\u30ea\u30e5\u30fc\u30e0
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=\u30d0\u30e9\u30f3\u30b9
+instrument.free=\u672a\u4f7f\u7528
+instrument.link=\u4f7f\u7528\u4e2d
 
 
 repeat.open=\u30ea\u30d4\u30fc\u30c8\u958b\u59cb
@@ -455,8 +454,6 @@ key-bindings-editor-shortcut-column=\u30ad\u30fc
 key-bindings-editor-push-a-key=\u30ad\u30fc\u3092\u62bc\u3057\u3066\u304f\u3060\u3055\u3044
 key-bindings-editor-save-question=\u5909\u66f4\u304c\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093, \u4fdd\u5b58\u3057\u306a\u3044\u3067\u7d42\u4e86\u3057\u307e\u3059\u304b?
 
-key-bindings-editor-reserved-title=\u4e88\u7d04\u3055\u308c\u305f\u30ad\u30fc
-key-bindings-editor-reserved-message=\u3053\u306e\u30ad\u30fc\u306f\u4e88\u7d04\u3055\u308c\u3066\u3044\u307e\u3059
 key-bindings-editor-override=\u5165\u529b\u3055\u308c\u305f\u30ad\u30fc\u306f\u3059\u3067\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u3066\u3044\u307e\u3059! \u672c\u5f53\u306b\u4f7f\u3063\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b?
 
 print.print=\u5370\u5237
diff --git a/TuxGuitar/share/lang/messages_lt.properties b/TuxGuitar/share/lang/messages_lt.properties
new file mode 100644
index 0000000..3c5e8a1
--- /dev/null
+++ b/TuxGuitar/share/lang/messages_lt.properties
@@ -0,0 +1,687 @@
+
+ok=Gerai
+cancel=Atsisakyti
+yes=Taip
+no=Ne
+add=Prid\u0117ti
+edit=Redaguoti
+remove=Pa\u0161alinti
+save=\u012Era\u0161yti
+exit=Baigti
+close=U\u017Everti
+choose=Pasirinkti
+color=Spalva
+title=Pavadinimas
+go=Eiti
+warning=\u012Esp\u0117jimas
+error=Klaida
+plugins=Priedai
+options=Parinktys
+defaults=Numatytai
+clean=Nuimti
+rename=Pervardyti
+fret=Skirsnis
+position=Pozicija
+name=Vardas
+author=Autorius
+version=Versija
+description=Apra\u0161ymas
+info=Informacija
+configure=Konfig\u016Bravimas
+url=URL
+
+file=Failas
+file.new=Naujas
+file.open=Atverti
+file.save=\u012Era\u0161yti
+file.save-as=\u012Era\u0161yti taip
+file.save-changes-question=K\u016Brinyje yra ne\u012Fra\u0161yt\u0173 pakeitim\u0173.\nAr dabar juos \u012Fra\u0161yti?
+file.exit=Baigti
+file.export=Eksportuoti
+file.export-midi=Eksportuoti \u012F MIDI
+file.export-pdf=Eksportuoti \u012F PDF
+file.print=Spausdinti
+file.print-preview=Spaudinio per\u017Ei\u016Bra
+file.import=Importuoti
+file.import-midi=Importuoti MIDI
+file.export-ascii=Eksportuoti \u012F ASCII
+file.history=Istorija
+file.open-url=Atverti URL
+file.open.error=Nepavyko atverti: {0}
+file.save.error=Nepavyko \u012Fra\u0161yti: {0}
+file.import.error=Nepavyko importuoti: {0}
+file.export.error=Nepavyko eksportuoti: {0}
+file.overwrite-question=Toks failas jau yra. Ar j\u012F perra\u0161yti?
+
+edit.menu=Taisymas
+edit.undo=At\u0161aukti
+edit.redo=Atstatyti
+edit.copy=Kopijuoti
+edit.from=Nuo
+edit.to=Iki
+edit.all-tracks=Visi takeliai
+edit.paste=\u012Ed\u0117ti
+edit.paste.count=\u012Ed\u0117ti kiek\u012F
+edit.paste.replace-mode=\u012Ed\u0117ti esamam takte
+edit.paste.insert-mode=Id\u0117ti naujam takte
+edit.delete=Pa\u0161alinti
+edit.cut=I\u0161kirpti
+edit.mouse-mode-selection=\u017Dym\u0117jimo pele veiksena
+edit.mouse-mode-edition=Partit\u016Bros redagavimo veiksena
+edit.not-natural-key=Diezai/bemoliai
+edit.voice-1=Parinkti bals\u0105 1
+edit.voice-2=Parinkti bals\u0105 2
+
+view=Rodymas
+view.layout=Maketas
+view.layout.page=Lape
+view.layout.linear=Linijoje
+view.layout.compact=Glaustai
+view.layout.multitrack=Daug takeli\u0173
+view.layout.chord-style=Akord\u0173 vaizdavimo b\u016Bdas
+view.layout.chord-name=Akordo pavadinimas
+view.layout.chord-diagram=Akordo diagrama
+view.layout.score-enabled=Natos
+view.layout.tablature-enabled=Tabulat\u016Bra
+view.show-mixer=Gars\u0173 mai\u0161iklis
+view.show-fretboard=Grifas
+view.show-piano=Pianino klaviat\u016Bra
+view.show-matrix=Grafin\u0117 gars\u0173 lentel\u0117
+view.show-transport=Grotuvas
+
+fretboard.direction=Kryptis
+fretboard.right-mode=De\u0161niarankiams
+fretboard.left-mode=Kairiarankiams
+fretboard.background-color=Fono spalva
+fretboard.display-note-text=Natos pavadinimas
+fretboard.display-scale-text=Rodyti partit\u016Bros pavadinim\u0105
+fretboard.font=\u0160riftas
+fretboard.fretpoint-color=Grifo spalva
+fretboard.note-color=Natos spalva
+fretboard.scale-note-color=Penklin\u0117s lapo spalva
+fretboard.settings=Grifo nuostatos
+fretboard.string-color=Styg\u0173 spalva
+fretboard.settings.options=Parinktys
+
+piano.editor=Redaguoti pianino klaviat\u016Bra
+piano.natural-key-color=\u012Eprasta klavi\u0161\u0173 spalva
+piano.not-natural-key-color=Ne\u012Fprasta klavi\u0161\u0173 spalva
+piano.note-color=Natos spalva
+piano.scale-note-color=Nat\u0173 spalva partit\u016Broje
+piano.settings=Pianino klaviat\u016Bros nuostatos
+
+matrix.editor=Grafinis gars\u0173 redaktorius
+matrix.grids=Gardeli\u0173 tankis
+matrix.border-color=R\u0117melio spalva
+matrix.font=\u0160riftas
+matrix.foreground-color=Priekio spalva
+matrix.line-color-1=Nelygini\u0173 linij\u0173 spalva
+matrix.line-color-2=Lygini\u0173 linij\u0173 spalva
+matrix.line-color-over=Linijos po \u017Eymekliu spalva
+matrix.note-color=Natos spalva
+matrix.play-note-color=Grojamos natos spalva
+matrix.position-color=Pozicijos spalva
+matrix.settings=Lentel\u0117s nuostatos
+
+composition=K\u016Brinys
+composition.timesignature=Metras
+composition.timesignature.Numerator=Skaitiklis
+composition.timesignature.denominator=Vardiklis
+composition.timesignature.to-the-end=Iki pabaigos
+composition.tempo=Tempas
+composition.tempo-percent=Tempas procentais
+composition.tempo.invalid=Neteisingas tempas
+composition.tempo.start-to-end=\u0160\u012F temp\u0105 taikyti visam k\u016Briniui
+composition.tempo.position-to-end=\u0160\u012F temp\u0105 taikyti iki pabaigos
+composition.tempo.position-to-next=\u0160\u012F temp\u0105 taikyti iki tempo pakeitimo \u017Eenklo
+composition.properties=Apie k\u016Brin\u012F
+composition.name=Pavadinimas
+composition.artist=Atlik\u0117jas
+composition.album=Albumas
+composition.author=Autorius
+composition.date=Data
+composition.copyright=Autoryst\u0117s teis\u0117s
+composition.writer=TAB'\u0173 k\u016Brimas
+composition.transcriber=Transkribuota
+composition.comments=Komentarai
+composition.tripletfeel=Triol\u0117mis
+composition.clef=Raktas
+composition.clef.treble=Smuiko
+composition.clef.bass=Boso
+composition.clef.tenor=Tenoro
+composition.clef.alto=Alto
+composition.clef.to-the-end=Taikyti \u0161\u012F rakt\u0105 iki pabaigos
+composition.keysignature=Tonacija
+composition.keysignature.natural=Be prieraktini\u0173 \u017Eenkl\u0173
+composition.keysignature.sharp-1=1 diezas
+composition.keysignature.sharp-2=2 diezai
+composition.keysignature.sharp-3=3 diezai
+composition.keysignature.sharp-4=4 diezai
+composition.keysignature.sharp-5=5 diezai
+composition.keysignature.sharp-6=6 diezai
+composition.keysignature.sharp-7=7 diezai
+composition.keysignature.flat-1=1 bemolis
+composition.keysignature.flat-2=2 bemoliai
+composition.keysignature.flat-3=3 bemoliai
+composition.keysignature.flat-4=4 bemoliai
+composition.keysignature.flat-5=5 bemoliai
+composition.keysignature.flat-6=6 bemoliai
+composition.keysignature.flat-7=7 bemoliai
+composition.keysignature.to-the-end=Taikyti \u0161\u012F rakt\u0105 iki pabaigos
+composition.tripletfeel=Triol\u0117mis
+composition.tripletfeel.none=Be trioli\u0173 \u201ETriplet Feel\u201C
+composition.tripletfeel.eighth=A\u0161tuntini\u0173 triol\u0117s
+composition.tripletfeel.sixteenth=\u0160e\u0161ioliktini\u0173 triol\u0117s
+composition.tripletfeel.to-the-end=Taikyti trioles \u201Etriplet feel\u201C iki pabaigos
+
+help=Pagalba
+help.help=Pagalba
+help.doc=\u017Dinynas
+help.about=Apie
+help.about.license=Licencijos
+help.about.authors=Autoriai
+help.about.description=Apra\u0161ymas
+
+track=Takeliai
+track.number=Nr.
+track.name=Pavadinimas
+track.color=Spalva
+track.first=Pirmas takelis
+track.last=Paskiausias takelis
+track.previous=Ankstesnis takelis
+track.next=Kitas takelis
+track.add=Prid\u0117ti takel\u012F
+track.remove=Pa\u0161alinti takel\u012F
+track.clone=Klonuoti takel\u012F
+track.move-up=Auk\u0161tyn
+track.move-down=\u017Demyn
+track.instrument=Instrumentas 
+track.properties=Takeli\u0173 nuostatos
+track.properties.general=Bendra
+track.name.default-percussion-name=Mu\u0161amieji
+track.lyrics=\u017Dod\u017Eiai
+track.solo=Solo
+track.mute=Tildymas
+
+lyric.editor=\u017Dod\u017Ei\u0173 redaktorius
+
+measure=Taktai
+measure.first=Pirmas taktas
+measure.last=Paskiausias taktas
+measure.previous=Ankstesnis taktas
+measure.next=Kitas taktas
+measure.add=Prid\u0117ti takt\u0105
+measure.add.count=Prid\u0117ti skai\u010Diavim\u0105
+measure.add-before-current-position=Prid\u0117ti takt\u0105 prie\u0161 esam\u0105 pozicij\u0105
+measure.add-after-current-position=Prid\u0117ti takt\u0105 u\u017E esamos pozicijos
+measure.add-at-end=Prid\u0117ti takt\u0105 gale
+measure.remove=Pa\u0161alinti takt\u0105
+measure.copy=Kopijuoti takt\u0105
+measure.paste=\u012Ed\u0117ti takt\u0105
+measure.clean=Nuimti takto \u017Eenkl\u0105
+
+duration=Trukm\u0117
+duration.whole=Pilna
+duration.half=Pusin\u0117
+duration.quarter=Ketvirtin\u0117
+duration.eighth=A\u0161tuntin\u0117
+duration.sixteenth=\u0160e\u0161ioliktin\u0117
+duration.thirtysecond=Trisde\u0161imt antrin\u0117
+duration.sixtyfourth=\u0160e\u0161iasde\u0161imt ketvirtin\u0117
+duration.dotted=Su ta\u0161ku
+duration.doubledotted=Su dviem ta\u0161kais
+duration.division-type=Triol\u0117
+
+dynamic=Dinamika
+dynamic.piano-pianissimo=Piano Pianissimo
+dynamic.pianissimo=Pianissimo
+dynamic.piano=Piano
+dynamic.mezzo-piano=Mezzo Piano
+dynamic.mezzo-forte=Mezzo Forte
+dynamic.forte=Forte
+dynamic.fortissimo=Fortissimo
+dynamic.forte-fortissimo=Forte Fortissimo
+
+effects=Melizmai ir efektai
+effects.vibrato=Vibrato
+effects.bend=Tempimas
+effects.deadnote=Nuslopintoji nata
+effects.slide=Glisando
+effects.hammer=Legato (Hammer-on/Pull-off)
+effects.tremolo-bar=Rankena (tremolo bar)
+effects.tremolo-bar-editor=Tremolo rankena redagavimas
+effects.tremolo-bar.dip=Nuleisti ranken\u0105 (dip)
+effects.tremolo-bar.dive=Nuleisti ir atleisti (dive)
+effects.tremolo-bar.release-up=Atleisti auk\u0161tyn
+effects.tremolo-bar.release-down=Atleisti \u017Eemyn
+effects.tremolo-bar.inverted-dip=Atbulas nuleidimas (inverted dip) 
+effects.tremolo-bar.return=Gr\u0105\u017Einimas
+effects.ghostnote=Prislopintoji nata
+effects.accentuatednote=Akcentuotoji nata
+effects.heavyaccentuatednote=Stipriai akcentuota nata
+effects.harmonic=Fla\u017Eoletas
+effects.grace=For\u0161lagas
+effects.grace-editor=For\u0161lago redagavimas
+effects.grace.before-beat=Silpnoji ritmo dalis
+effects.grace.on-beat=Stiprioji ritmo dalis
+effects.grace.transition=Artikuliavimas
+effects.grace.transition-none=N\u0117ra
+effects.grace.transition-bend=Tempimas
+effects.grace.transition-slide=Glisando
+effects.grace.transition-hammer=Legato
+effects.trill=Trel\u0117
+effects.trill-editor=Treli\u0173 redagavimas
+effects.tremolo-picking=Skambinimas tremolo
+effects.tremolo-picking-editor=Tremolo redagavimas
+effects.palm-mute=Slopinimas delnu
+effects.staccato=Stakato
+effects.tapping=Tapping (legato de\u0161ine ranka)
+effects.slapping=Slapping (sm\u016Bgiavimas \u012F styg\u0105)
+effects.popping=Popping (stygos kabinimas nuo grifo pus\u0117s)
+effects.fade-in=Laipsni\u0161kas atsiradimas
+effects.harmonic-editor=Fla\u017Eolet\u0173 redagavimas
+effects.harmonic.type-of-harmonic=Fla\u017Eoleto tipas
+effects.harmonic.natural=Paprastasis fla\u017Eoletas
+effects.harmonic.artificial=Dirbtinis fla\u017Eoletas
+effects.harmonic.artificial.key-offset=Tonacijos poslinkis
+effects.harmonic.tapped=Fla\u017Eoletas \u201Etapped\u201C
+effects.harmonic.tapped.left-hand=Kairioji ranka
+effects.harmonic.tapped.right-hand=De\u0161inioji ranka
+effects.harmonic.pinch=Obertoninis fla\u017Eoletas (squealie)
+effects.harmonic.semi=Pusiau fla\u017Eoletas
+
+bend.editor=Stygos patempim\u0173 redagavimas
+bend.bend=Tempimas
+bend.bend-release=Tempimas/Atleidimas
+bend.bend-release-bend=Tempimas/Atleidimas/Tempimas
+bend.prebend=Patempimas prie\u0161 laikym\u0105
+bend.prebend-release=Patempimas prie\u0161 laikym\u0105/atleidimas
+
+transport=Grotuvas
+transport.start=Groti
+transport.stop=Stabdyti
+transport.pause=Pauz\u0117
+transport.first=Pirmiausias
+transport.last=Paskiausias
+transport.previous=Ankstesnis
+transport.next=Kitas
+transport.metronome=Metronomas
+transport.mode=Kaip groti
+transport.mode.simple=\u012Eprastai
+transport.mode.simple.tempo-percent=Tempo pakeitimas procentais
+transport.mode.simple.loop=Groti kartojant
+transport.mode.trainer=Mokymosi veiksena
+transport.mode.trainer.increment-description=Padidinti per
+transport.mode.loop-range=Pakartojimo r\u0117\u017Eis
+transport.mode.loop-range.from=Groti nuo takto
+transport.mode.loop-range.from-default=Groti nuo prad\u017Ei\u0173
+transport.mode.loop-range.to=Groti iki takto
+transport.mode.loop-range.to-default=Iki galo
+transport.set-loop-start=Nustatyti pakartojimo prad\u017Ei\u0105
+transport.set-loop-end=Nustatyti pakartojimo pabaig\u0105
+
+instruments.volume=Stiprinimas
+instrument.channel=Kanalas
+instrument.effect-channel=Kanalo efektas
+instrument.volume=Garsumas
+instrument.balance=Balansas
+instrument.chorus=Kvadratas (chorus)
+instrument.reverb=Reverberacija
+instrument.phaser=Fazeris
+instrument.tremolo=Tremolo
+instrument.free=Laisvas
+instrument.link=Nuoroda
+
+
+repeat.open=Kartojimo prad\u017Eia
+repeat.close=Kartojimo pabaiga
+repeat.alternative=Alternatyv\u016Bs kartojimai
+repeat.alternative.editor=Alternatyvi\u0173j\u0173 kartojim\u0173 redagavimas
+repetitions=Pakartojimai
+repeat.number-of-repetitions=Kartojim\u0173 skai\u010Dius
+
+beat=Natos
+beat.clean=Akcentavimo nu\u0117mimas
+beat.voice.remove-unused=Nenaudojamo balso pa\u0161alinimas
+beat.voice-up=Linija vir\u0161 penklin\u0117s
+beat.voice-down=Linija po penkline
+beat.voice-auto=Automatinis penklin\u0117s papildymas linijomis
+beat.stroke=Braukti
+beat.stroke-up=Braukimas auk\u0161tyn
+beat.stroke-down=Braukimas \u017Eemyn
+beat.move-left=Perkelti per takto dal\u012F kair\u0117n
+beat.move-right=Perkelti per takto dal\u012F de\u0161in\u0117n
+beat.move-custom=Pasirinktinis perk\u0117limas
+beat.move-custom.dialog.title=Pasirinktinis perk\u0117limas
+beat.move-custom.dialog.direction-tip=Perk\u0117limo kryptis
+beat.move-custom.dialog.move-1.tip=Perk\u0117limas
+beat.move-custom.dialog.move-2.tip=Perk\u0117limas tiksliau
+beat.move-custom.dialog.direction=Kryptis
+beat.move-custom.dialog.direction.right=Perk\u0117limas de\u0161in\u0117n
+beat.move-custom.dialog.direction.left=Perk\u0117limas kair\u0117n
+beat.move-custom.dialog.count=Per kiek
+beat.move-custom.dialog.duration=Trukm\u0117
+beat.move-custom.dialog.duration.type=Su ta\u0161ku/Su dviem ta\u0161kais
+beat.move-custom.dialog.duration.type.normal=Nepakeista
+beat.move-custom.dialog.duration.division-type=Dalinimo b\u016Bdas
+beat.move-custom.dialog.duration.division-type.normal=Normalus (tupletas)
+
+note=Nata
+note.semitone-up=Pustoniu auk\u0161tyn
+note.semitone-down=Pustoniu \u017Eemyn
+note.shift-up=Perstumti auk\u0161tyn
+note.shift-down=Perstumti \u017Eemyn
+note.tiednote=Ligat\u016Bra
+note.deadnote=Nuslopinta nata
+
+insert.chord=\u012Eterpti akord\u0105
+chord.editor=Akord\u0173 redaktorius
+chord=Akordas
+chord.name=Pavadinimas
+chord.bass=Bosas
+chord.custom=Susikurtas akordas
+chord.custom.name-empty-error=Koks nors akordo vardas turi b\u016Bti.
+chord.custom.name-exist-error=Toks akordo pavadinimas jau yra.
+chord.settings.tip=Parinktys
+chord.settings.type=Tipas
+chord.settings.type.most-common=Populiarieji
+chord.settings.type.inversions=Inversijos
+chord.settings.type.close-voiced=Glaustai
+chord.settings.type.open-voiced=I\u0161skleistai
+chord.settings.open-chords=Atviri akordai
+chord.settings.chords-to-display=Akordai, kuriuos rodyti
+chord.settings.search-frets=Surasti skirsn\u012F
+chord.settings.minimum-fret=Minimalus skirsnis
+chord.settings.maximum-fret=Maksimalus skirsnis
+
+instrument=Instrumentas
+instrument.instrument=Instrumentas
+instrument.percussion-track=Mu\u0161am\u0173j\u0173 takelis
+
+tuning=Derinimas
+tuning.offset=Derinimo schema
+tuning.strings=Stygos
+tuning.strings.transpose=Transponuoti veikiam\u0105sias natas
+tuning.strings.transpose.try-keep-strings=Pagal galimyb\u0119 laikyti natas toje pa\u010Dioje stygoje
+tuning.strings.transpose.apply-to-chords=Transponuoti akordus
+
+language=Kalba
+
+choose-color=Spalvos parinkimas
+
+settings=Parinktys
+settings.config=\u201ETuxGuitar\u201C konfig\u016Bravimas
+settings.config.language=Kalba
+settings.config.language.choose=Pasirinkite kalb\u0105
+settings.config.styles=Apipavidalinimo stilius 
+settings.config.styles.general=Bendras stilius
+settings.config.styles.printer=Spausdinimo stilius
+settings.config.styles.font.default=Numatytasis \u0161riftas
+settings.config.styles.font.note=Nat\u0173 \u0161riftas
+settings.config.styles.font.lyric=Dainos \u017Eod\u017Ei\u0173 \u0161riftas
+settings.config.styles.font.text=Teksto \u0161riftas
+settings.config.styles.font.time-signature=Metro \u0161riftas
+settings.config.styles.font.printer-default=Numatytasis spausdinimo \u0161riftas
+settings.config.styles.font.printer-note=Nat\u0173 \u0161riftas spausdinimui
+settings.config.styles.font.printer-time-signature=Metro \u0161riftas spausdinimui
+settings.config.styles.color.score-note=Penklin\u0117s nat\u0173 spalva
+settings.config.styles.color.tab-note=Tab\u0173 natos spalva
+settings.config.styles.color.play-note=Grojamos natos spalva
+settings.config.apply-changes-question=Ar tikrai norite priimti pakeitimus?
+settings.config.sound=Garso \u012Frenginiai
+settings.config.main=Bendra
+settings.config.main.window-title=Lango pavadinimas
+settings.config.main.window-title.help=Lango pavadinime bus rodomos \u0161i\u0173 kintam\u0173j\u0173 reik\u0161m\u0117s:
+settings.config.main.window-title.var.description.appname=\u0160io kintamojo reik\u0161m\u0117 yra programos pavadinimas: TuxGuitar
+settings.config.main.window-title.var.description.appversion=Kintamojo reik\u0161m\u0117 parodo \u201ETuxGuitar\u201C laidos numer\u012F
+settings.config.main.window-title.var.description.filename=\u0160io kintamojo reik\u0161m\u0117 yra atverto failo vardas
+settings.config.main.window-title.var.description.filepath=\u0160io kintamojo reik\u0161m\u0117 yra kelias iki atverto failo
+settings.config.main.window-title.var.description.songname=\u0160io kintamojo reik\u0161m\u0117 yra k\u016Brinio pavadinimas
+settings.config.main.window-title.var.description.songauthor=\u0160io kintamojo reik\u0161m\u0117 yra k\u016Brinio autorius
+settings.config.main.window-title.var.description.songalbum=\u0160io kintamojo reik\u0161m\u0117 yra albumo, kuriame yra k\u016Brinys, pavadinimas
+settings.config.main.window-title.var.description.songartist=\u0160io kintamojo reik\u0161m\u0117 yra k\u016Brinio atlik\u0117jas
+settings.config.main.options=Parinktys
+settings.config.main.splash-enabled=Rodyti informacin\u012F ekran\u0105 programos starto metu
+settings.config.main.table.auto-size.enabled=Automatinio takt\u0173 dyd\u017Eio parinkimo \u012Fjungimas
+settings.config.styles.color.lines=Horizontali\u0173 linij\u0173 spalva
+settings.config.toolbars=\u012Erankin\u0117s
+settings.config.toolbars.tip=Susid\u0117lioti \u012Frankines
+settings.config.toolbars.list=Jums prieinamos \u012Frankin\u0117s
+settings.config.toolbars.move-up=Auk\u0161tyn
+settings.config.toolbars.move-down=\u017Demyn
+settings.config.skin=Apipavidalinimai
+settings.config.skin.choose=Pasirinkite apipavidalinim\u0105
+settings.keybindings=Klavi\u0161\u0173 susiejimo konfig\u016Bravimas
+
+key-bindings-editor=Klavi\u0161\u0173 susiejim\u0173 redagavimas
+key-bindings-editor-action-select=Veiksmo parinkimas
+key-bindings-editor-action-column=Veiksmai
+key-bindings-editor-shortcut-column=Klavi\u0161ai
+key-bindings-editor-push-a-key=Spauskite klavi\u0161\u0105
+key-bindings-editor-save-question=Lik\u0119 nei\u0161saugot\u0173 pakeitim\u0173. Ar tikrai j\u0173 nesaugoj\u0119 baigsite darb\u0105?
+
+key-bindings-editor-override=Spartusis klavi\u0161as jau panaudotas! Ar vis tiek j\u012F naudosite?
+
+print.print=Spausdinti
+print.dialog=Spausdinti
+print.service=Paslauga
+print.service.name=Pavadinimas
+print.service.status=Statusas
+print.service.type=Tipas
+print.service.info=Informacija
+print.range=R\u0117\u017Eiai
+print.range.all-pages=Visi
+print.range.pages=Lapai
+print.range.pages-to=Iki
+print.copies=Kopijos
+print.copies-number=Kopij\u0173 skai\u010Dius
+print.print-to-file=Spausdinti \u012F fail\u0105
+print.file-chooser=Pasir
+print-header.default-song-name=Be pavadinimo
+print-header.default-song-author=Anonimas
+
+print.preview=Spaudinio per\u017Ei\u016Bra
+print.preview.page-of=i\u0161
+
+marker=Gairel\u0117s
+marker.add=Prid\u0117ti gairel\u0119
+marker.list=Gaireli\u0173 s\u0105ra\u0161as
+marker.first=Eiti prie pirmiausios gairel\u0117s
+marker.last=Eiti prie paskiausios gairel\u0117s
+marker.next=Eiti prie kitos gairel\u0117s
+marker.previous=Eiti prie ankstesn\u0117s gairel\u0117s
+
+export.tablature-enabled=Rodyti tabulat\u016Br\u0105
+export.score-enabled=Rodyti penklin\u0119
+export.chord-name-enabled=Rodyti akordus
+export.chord-diagram-enabled=Rodyti akord\u0173 diagram\u0105
+export.black-and-white=Juodai balta
+
+scale=Tonacija
+scale.list=Tonacij\u0173 s\u0105ra\u0161as
+
+text.insert=\u012Eterpti tekst\u0105
+text.editor=Teksto redaktorius
+text.text=Tekstas
+
+tools=\u012Erankiai
+tools.scale=Tonacij\u0173 s\u0105ra\u0161as
+tools.browser=Nar\u0161ykl\u0117
+tools.plugins=Priedai
+tools.shortcuts=Spartieji klavi\u0161ai
+tools.settings=Nuostatos
+
+tools.transpose=Transponavimas
+tools.transpose.semitones=Transponavimas pustoniais
+tools.transpose.apply-to-track=Transponuoti visuose taktuose
+tools.transpose.apply-to-measure=Transponuoti tik \u0161\u012F takt\u0105
+tools.transpose.apply-to-all-tracks=Taikyti visiems takeliams
+tools.transpose.try-keep-strings=Stenkit\u0117s laikyti natas vienoje stygoje, jei tik tai \u012Fmanoma
+tools.transpose.apply-to-chords=Akord\u0173 transponavimas
+
+browser.dialog=Nar\u0161ykl\u0117
+browser.menu.file=Failas
+browser.open=Atverti
+browser.exit=Baigti
+browser.menu.collection=Kolekcija
+browser.menu.go=Eiti
+browser.collection.select=Parinkti kolekcij\u0105
+browser.collection.open=Atverti
+browser.collection.remove=Pa\u0161alinti
+browser.collection.close=U\u017Everti
+browser.collection.new=Naujas
+browser.go-root=Prad\u017Eia
+browser.go-back=Atgal
+browser.refresh=Atnaujinti
+browser.factory.fs.name=Fail\u0173 sistema
+browser.collection.fs.name=Pavadinimas
+browser.collection.fs.path=Aplankas
+browser.collection.fs.editor-title=Kolekcija fail\u0173 sistemoje
+browser.collection.fs.editor-tip=Pasirinkite numatyt\u0105j\u012F aplank\u0105 savo k\u016Briniams
+browser.collection.fs.invalid-path=Pasirinkite teising\u0105 aplank\u0105
+
+midi.port=MIDI prievadas
+midi.sequencer=MIDI sekvenceris
+
+plugin.unknown-value=Neprieinama.
+plugin.column.name=Priedo pavadinimas
+plugin.column.enabled=\u012Ejungta
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=Failai
+edit.items=Redakcijos
+property.items=Savyb\u0117s
+track.items=Takeliai
+duration.items=Trukm\u0117s
+beat.items=Ritminiai sm\u016Bgiai
+composition.items=K\u016Briniai
+repeat.items=Pakartojimai
+transport.items=Elementai grotuvui
+marker.items=Gairel\u0117s
+insert.items=\u012Eterpiniai
+layout.items=Maketai
+view.items=Rodiniai
+effect.items=Melizmai
+dynamic.items=Dinamikos \u017Eenklai
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=Naujas failas
+action.file.open=Atverti fail\u0105
+action.file.open-url=Atverti URL
+action.file.save=\u012Era\u0161yti
+action.file.save-as=\u012Era\u0161yti kaip
+action.file.print=Spausdinti
+action.file.print-preview=Spaudinio per\u017Ei\u016Bra
+action.file.exit=Baigti darb\u0105 su \u201ETuxGuitar\u201C
+action.edit.undo=At\u0161aukti
+action.edit.redo=Atstatyti
+action.edit.voice-1=Parinkti bals\u0105 1
+action.edit.voice-2=Parinkti bals\u0105 2
+action.composition.change-time-signature=Keisti metr\u0105
+action.composition.change-tempo=Keisti temp\u0105
+action.composition.change-info=Keisti informacij\u0105 apie k\u016Brin\u012F
+action.composition.change-clef=Keisti rakt\u0105
+action.composition.change-key-signature=Keisti tonacij\u0105
+action.composition.change-triplet-feel=Trioli\u0173 keitimas
+action.view.layout-set-page=Penklin\u0117s i\u0161d\u0117stymas lape
+action.view.layout-set-linear=Linijinis penklin\u0117s i\u0161d\u0117stymas
+action.view.layout-set-multitrack=Daugelio takeli\u0173 rodymas
+action.view.layout-set-score-enabled=Rodyti partit\u016Br\u0105
+action.view.layout-set-tablature-enabled=Rodyti tablat\u016Br\u0105
+action.view.layout-set-compact=Rodyti suspaustai
+action.view.layout-set-chord-diagram-enabled=\u012Ejungti akordo diagram\u0105
+action.view.layout-set-chord-name-enabled=\u012Ejungti akordo pavadinim\u0105
+action.view.show-fretboard=Rodyti grif\u0105
+action.view.show-piano=Rodyti pianino klaviat\u016Br\u0105
+action.view.show-matrix=Rodyti gars\u0173 lentele
+action.view.show-mixer=Rodyti gars\u0173 mai\u0161ikl\u012F
+action.view.show-transport=Rodyti grotuv\u0105
+action.track.add=Prid\u0117ti takel\u012F
+action.track.remove=Pa\u0161alinti takel\u012F
+action.track.clone=Klonuoti takel\u012F
+action.track.go-first=Eiti \u012F pirm\u0105 takel\u012F
+action.track.go-last=Eiti \u012F paskutin\u012F takel\u012F
+action.track.go-next=Eiti \u012F kit\u0105 takel\u012F
+action.track.go-previous=Eiti \u012F ankstesn\u012F takel\u012F
+action.track.lyrics=Redaguoti \u017Eod\u017Eius
+action.track.properties=Keisti takelio nuostatas
+action.track.move-down=Takel\u012F perkelti \u017Eemyn
+action.track.move-up=Takel\u012F perkelti auk\u0161tyn
+action.measure.add=Prid\u0117ti takt\u0105
+action.measure.remove=Pa\u0161alinti takt\u0105
+action.measure.copy=Kopijuoti takt\u0105
+action.measure.paste=\u012Ed\u0117ti takt\u0105
+action.measure.clean=Pa\u0161alinti takto \u017Eenkl\u0105
+action.measure.go-first=Eiti \u012F pirm\u0105 takt\u0105
+action.measure.go-last=Eiti \u012F paskutin\u012F takt\u0105
+action.measure.go-next=Eiti \u012F kit\u0105 takt\u0105
+action.measure.go-previous=Eiti \u012F ankstesn\u012F takt\u0105
+action.beat.general.remove-unused-voice=Nenaudojamo balso pa\u0161alinimas
+action.beat.general.voice-up=Penklin\u0119 papildyti auk\u0161tyn
+action.beat.general.voice-down=Penklin\u0119 papildyti \u017Eemyn
+action.beat.general.voice-auto=Automatinis penklin\u0117s papildymas linijomis
+action.beat.general.set-stroke-up=Nustatyti braukim\u0105 auk\u0161tyn
+action.beat.general.set-stroke-down=Nustatyti braukim\u0105 \u017Eemyn
+action.beat.general.move-left=Vienas ritmo sm\u016Bgis kair\u0117n
+action.beat.general.move-right=Vienas ritmo sm\u016Bgis de\u0161in\u0117n
+action.beat.general.move-custom=Susikurti ritmo pie\u0161in\u012F
+action.note.general.clean-beat=Nuimti akcentus
+action.note.general.decrement-semitone=Suma\u017Einti pustoniu
+action.note.general.increment-semitone=Padidinti pustoniu
+action.note.general.shift-down=Poslinkis \u017Eemyn
+action.note.general.shift-up=Poslinkis auk\u0161tyn
+action.note.general.tied=Prid\u0117ti/nuimti jungiam\u0105j\u012F lankel\u012F
+action.note.duration.set-whole=Pilnos natos trukm\u0117
+action.note.duration.set-half=Pusin\u0117s natos trukm\u0117
+action.note.duration.set-quarter=Ketvirtin\u0117s natos trukm\u0117
+action.note.duration.set-eighth=A\u0161tuntin\u0117s natos trukm\u0117
+action.note.duration.set-sixteenth=\u0160e\u0161ioliktin\u0117s natos trukm\u0117
+action.note.duration.set-thirty-second=Trisde\u0161imt antrin\u0117s natos trukm\u0117
+action.note.duration.set-sixty-fourth=\u0160e\u0161iasde\u0161imt ketvirtin\u0117s natos trukm\u0117
+action.note.duration.change-dotted=Prid\u0117ti/nuimti ta\u0161k\u0105
+action.note.duration.change-double-dotted=Prid\u0117ti/nuimti du ta\u0161kus
+action.note.duration.change-division-type=Prid\u0117ti/nuimti triol\u0119
+action.note.duration.decrement-duration=Sutrumpinti trukm\u0119
+action.note.duration.increment-duration=Pailginti trukm\u0119
+action.note.effect.change-vibrato=Prid\u0117ti/nuimti vibrato
+action.note.effect.change-bend=Prid\u0117ti/nuimti tempim\u0105
+action.note.effect.change-slide=Prid\u0117ti/nuimti glisando
+action.note.effect.change-hammer=Prid\u0117ti/nuimti legato
+action.note.effect.change-accentuated=Prid\u0117ti/nuimti akcent\u0105
+action.note.effect.change-dead=Prid\u0117ti/nuimti nuslopint\u0105 nat\u0105
+action.note.effect.change-fade-in=Prid\u0117ti/nuimti gars\u0117jim\u0105
+action.note.effect.change-ghost=Prid\u0117ti/nuimti prislopint\u0105j\u0105 nat\u0105
+action.note.effect.change-grace=Prid\u0117ti/nuimti for\u0161lag\u0105
+action.note.effect.change-harmonic=Prid\u0117ti/nuimti fla\u017Eolet\u0105
+action.note.effect.change-heavy-accentuated=Prid\u0117ti/nuimti ry\u0161k\u0173 akcent\u0105
+action.note.effect.change-palm-mute=Prid\u0117ti/nuimti slopinim\u0105 delnu
+action.note.effect.change-popping=Prid\u0117ti/nuimti \u201Epopping\u201C
+action.note.effect.change-slapping=Prid\u0117ti/nuimti \u201Eslapping\u201C
+action.note.effect.change-staccato=Prid\u0117ti/nuimti stakato
+action.note.effect.change-tapping=Prid\u0117ti/nuimti sm\u016Bgiavim\u0105 (tapping)
+action.note.effect.change-tremolo-bar=Prid\u0117ti/nuimti tremolo rankena
+action.note.effect.change-tremolo-picking=Prid\u0117ti/nuimti tremolo mediatoriumi
+action.note.effect.change-trill=Prid\u0117ti/nuimti trel\u0119
+action.insert.open-repeat=Pakartojimo pabaiga
+action.insert.close-repeat=Pakartojimo pabaiga
+action.insert.repeat-alternative=Volta
+action.insert.chord=\u012Eterpti akord\u0105
+action.insert.text=\u012Eterpti tekst\u0105
+action.marker.add=Prid\u0117ti gairel\u0119
+action.marker.go-next=Eiti iki kitos gairel\u0117s
+action.marker.go-previous=Eiti iki ankstesn\u0117s gairel\u0117s
+action.transport.play=Groti k\u016Brin\u012F
+action.transport.stop=Stabdyti grojim\u0105
+action.transport.mode=Grotuvo veiksena
+action.transport.metronome=Metronomas
+action.transport.set-loop-start=Nustatyti pakartojimo prad\u017Ei\u0105
+action.transport.set-loop-end=Nustatyti pakartojimo pabaig\u0105
+action.tools.browser=K\u016Brini\u0173 nar\u0161ykl\u0117
+action.tools.transpose=Nat\u0173 transponavimas
+action.settings.configure=Nuostatos
+action.help.doc=\u017Dinynas
diff --git a/TuxGuitar/share/lang/messages_nl.properties b/TuxGuitar/share/lang/messages_nl.properties
index f165701..f37b8ff 100644
--- a/TuxGuitar/share/lang/messages_nl.properties
+++ b/TuxGuitar/share/lang/messages_nl.properties
@@ -191,6 +191,8 @@ track.properties=Eigenschappen
 track.properties.general=Algemeen
 track.name.default-percussion-name=Slagwerk
 track.lyrics=Lyrics
+track.solo=Solo
+track.mute=Mute
 
 lyric.editor=Lyric Editor
 
@@ -301,16 +303,13 @@ transport.mode.simple.loop=Speel looped
 transport.mode.trainer=Training Modus
 transport.mode.trainer.increment-description=Geincrementeerd door
 
-mixer=Mixer
-mixer.volume=Gain
-mixer.track.solo=Solo
-mixer.track.mute=Mute
-mixer.channel.volume=Volume
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=Balance
-mixer.channel.free=Free
-mixer.channel.link=Link
+instruments.volume=Gain
+instrument.volume=Volume
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=Balance
+instrument.free=Free
+instrument.link=Link
 
 
 repeat.open=Open Repeat
@@ -414,8 +413,6 @@ key-bindings-editor-shortcut-column=Toetsen
 key-bindings-editor-push-a-key=Druk op een Toets
 key-bindings-editor-save-question=Er zijn wijzigingen aangebracht, wilt u deze Opslaan?
 
-key-bindings-editor-reserved-title=Gereserveerde Snelkoppeling
-key-bindings-editor-reserved-message=Sorry, deze Snelkoppeling is Gereserveerd
 key-bindings-editor-override=Snelkoppeling is al in gebruik! Wilt u deze wijziging toch doorvoeren?
 
 print.print=Print
diff --git a/TuxGuitar/share/lang/messages_pl.properties b/TuxGuitar/share/lang/messages_pl.properties
index 245b85d..b7a9c94 100644
--- a/TuxGuitar/share/lang/messages_pl.properties
+++ b/TuxGuitar/share/lang/messages_pl.properties
@@ -132,15 +132,13 @@ help=Pomoc
 help.help=Pomoc
 help.about=O programie
 
-mixer.volume=Nat\u0119\u017cenie
-mixer.track.solo=Solo
-mixer.track.mute=Wycisz
-mixer.channel.volume=G\u0142o\u015bno\u015b\u0107
-mixer.channel.channel=Kana\u0142
-mixer.channel.effect-channel=Efekty
-mixer.channel.balance=Balans
-mixer.channel.free=Wolny
-mixer.channel.link=Link
+instruments.volume=Nat\u0119\u017cenie
+instrument.volume=G\u0142o\u015bno\u015b\u0107
+instrument.channel=Kana\u0142
+instrument.effect-channel=Efekty
+instrument.balance=Balans
+instrument.free=Wolny
+instrument.link=Link
 
 track=\u015acie\u017cka
 track.number=Nr
@@ -161,6 +159,9 @@ track.move-up=Przesu\u0144 w g\u00f3r\u0119
 track.move-down=Przesu\u0144 w d\u00f3\u0142
 track.name.default-percussion-name=Perkusja
 track.lyrics=S\u0142owa
+track.solo=Solo
+track.mute=Wycisz
+
 lyric.editor=Edytor s\u0142\u00f3w
 
 measure=Takt
@@ -376,8 +377,6 @@ key-bindings-editor-shortcut-column=Klawisze
 key-bindings-editor-push-a-key=Naci\u015bnij klawisz
 key-bindings-editor-save-question=Zmiany nie zosta\u0142y zachowane, checesz wyj\u015b\u0107 bez zapisywania ??
 
-key-bindings-editor-reserved-title=Zarezerwowane skr\u00f3ty
-key-bindings-editor-reserved-message=Niestety ta kombinacja klawiszy jest zarezerwowana
 key-bindings-editor-override=Ten skr\u00f3t jest ju\u017c w u\u017cyciu. Czy na pewno chcesz przypisa\u0107 do niego inn\u0105 akcj\u0119 ?
 
 
diff --git a/TuxGuitar/share/lang/messages_pt.properties b/TuxGuitar/share/lang/messages_pt.properties
index f452bc2..1d048f0 100644
--- a/TuxGuitar/share/lang/messages_pt.properties
+++ b/TuxGuitar/share/lang/messages_pt.properties
@@ -134,15 +134,13 @@ help=Ajuda
 help.help=Ajuda
 help.about=Sobre
 
-mixer.volume=Ganho
-mixer.track.solo=Solo
-mixer.track.mute=Mudo
-mixer.channel.volume=Volume
-mixer.channel.channel=CN
-mixer.channel.effect-channel=CE
-mixer.channel.balance=Balan�o
-mixer.channel.free=Livre
-mixer.channel.link=Ligado
+instruments.volume=Ganho
+instrument.volume=Volume
+instrument.channel=CN
+instrument.effect-channel=CE
+instrument.balance=Balan�o
+instrument.free=Livre
+instrument.link=Ligado
 
 track=Pista
 track.number=N�
@@ -164,6 +162,9 @@ track.move-up=Mover Para Cima
 track.move-down=Mover Para Baixo
 track.name.default-percussion-name=Percuss�o
 track.lyrics=Letras
+track.solo=Solo
+track.mute=Mudo
+
 lyric.editor=Editor de Letras
 
 tunning.offset=Offset
@@ -385,8 +386,6 @@ key-bindings-editor-shortcut-column=Teclas
 key-bindings-editor-push-a-key=Pressione uma tecla
 key-bindings-editor-save-question=Existem mudan�as n�o salvas, voc� deseja exibir sem salvar?
 
-key-bindings-editor-reserved-title=Atalho Reservado
-key-bindings-editor-reserved-message=Desculpe, este atalho � reservado
 key-bindings-editor-override=Atalho j� definido! Deseja mud�-lo?
 
 
diff --git a/TuxGuitar/share/lang/messages_ru.properties b/TuxGuitar/share/lang/messages_ru.properties
index 5bfc4ad..fa0ebc1 100644
--- a/TuxGuitar/share/lang/messages_ru.properties
+++ b/TuxGuitar/share/lang/messages_ru.properties
@@ -191,6 +191,8 @@ track.properties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430
 track.properties.general=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435
 track.name.default-percussion-name=\u041f\u0435\u0440\u043a\u0443\u0441\u0441\u0438\u044f
 track.lyrics=\u041b\u0438\u0440\u0438\u043a\u0430
+track.solo=\u0421\u043e\u043b\u043e
+track.mute=\u0417\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u044c
 
 lyric.editor=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043b\u0438\u0440\u0438\u043a\u0438
 
@@ -301,16 +303,13 @@ transport.mode.simple.loop=\u0426\u0438\u043a\u043b\u0438\u0447\u0435\u0441\u043
 transport.mode.trainer=\u0422\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c
 transport.mode.trainer.increment-description=\u0428\u0430\u0433 \u0432
 
-mixer=M\u0438\u043a\u0448\u0435\u0440
-mixer.volume=\u0423\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c
-mixer.track.solo=\u0421\u043e\u043b\u043e
-mixer.track.mute=\u0417\u0430\u0433\u043b\u0443\u0448\u0438\u0442\u044c
-mixer.channel.volume=\u0417\u0432\u0443\u043a
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=\u0411\u0430\u043b\u0430\u043d\u0441
-mixer.channel.free=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c
-mixer.channel.link=\u041a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438
+instruments.volume=\u0423\u0441\u0438\u043b\u0438\u0442\u0435\u043b\u044c
+instrument.volume=\u0417\u0432\u0443\u043a
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=\u0411\u0430\u043b\u0430\u043d\u0441
+instrument.free=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c
+instrument.link=\u041a\u0430\u043d\u0430\u043b \u0441\u0432\u044f\u0437\u0438
 
 repeat.open=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440
 repeat.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u043e\u0432\u0442\u043e\u0440
@@ -413,8 +412,6 @@ key-bindings-editor-shortcut-column=\u041a\u043b\u0430\u0432\u0438\u0448\u0438
 key-bindings-editor-push-a-key=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043a\u043b\u0430\u0432\u0438\u0448\u0443
 key-bindings-editor-save-question=\u0418\u043c\u0435\u044e\u0442\u0441\u044f \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f, \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0439\u0442\u0438 \u0431\u0435\u0437 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f?
 
-key-bindings-editor-reserved-title=\u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0438 \u043a\u043b\u0430\u0432\u0438\u0448
-key-bindings-editor-reserved-message=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435, \u044d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430
 key-bindings-editor-override=\u042d\u0442\u0430 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u044f \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f! \u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0435\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?
 
 print.print=\u041f\u0435\u0447\u0430\u0442\u044c
diff --git a/TuxGuitar/share/lang/messages_sr.properties b/TuxGuitar/share/lang/messages_sr.properties
index 06bf5cc..2046a33 100644
--- a/TuxGuitar/share/lang/messages_sr.properties
+++ b/TuxGuitar/share/lang/messages_sr.properties
@@ -156,15 +156,13 @@ help.help=Pomo\u0107
 help.about=TuxGuitar
 help.doc=Dokumentacija
 
-mixer.volume=Volume
-mixer.track.solo=Solo
-mixer.track.mute=Isklju\u010di
-mixer.channel.volume=Volume
-mixer.channel.channel=Kanal
-mixer.channel.effect-channel=Ef.kanal
-mixer.channel.balance=Levo-desno
-mixer.channel.free=slobodan
-mixer.channel.link=povezan
+instruments.volume=Volume
+instrument.volume=Volume
+instrument.channel=Kanal
+instrument.effect-channel=Ef.kanal
+instrument.balance=Levo-desno
+instrument.free=slobodan
+instrument.link=povezan
 
 track=Staza
 track.number=Br.
@@ -182,6 +180,8 @@ track.properties=Osobine
 track.properties.general=Osnovno
 track.name.default-percussion-name=Bubnjevi i perkusije
 track.lyrics=Tekst na stazi
+track.solo=Solo
+track.mute=Isklju\u010di
 
 lyric.editor=Pisanje stihova
 
@@ -392,8 +392,6 @@ key-bindings-editor-shortcut-column=Tastatura
 key-bindings-editor-push-a-key=Kombinacija?
 key-bindings-editor-save-question=Postoje izmene koje nisu snimljene, izlazite bez snimanja?
 
-key-bindings-editor-reserved-title=Rezervisana pre\u010dica
-key-bindings-editor-reserved-message=\u017dao nam je, pre\u010dica je vec rezervisana.
 key-bindings-editor-override=Pre\u010dica se vec koristi! Da li ste sigurni?
 
 
diff --git a/TuxGuitar/share/lang/messages_sv.properties b/TuxGuitar/share/lang/messages_sv.properties
index 95e78fe..4c46cd8 100644
--- a/TuxGuitar/share/lang/messages_sv.properties
+++ b/TuxGuitar/share/lang/messages_sv.properties
@@ -205,6 +205,8 @@ track.properties=Egenskaper
 track.properties.general=Allm\u00e4nt
 track.name.default-percussion-name=Slagverk
 track.lyrics=S\u00e5ngtext
+track.solo=Solo
+track.mute=Tysta
 
 lyric.editor=Redigering av s\u00e5ngtext
 
@@ -323,20 +325,17 @@ transport.mode.loop-range.to-default=Till slutet
 transport.set-loop-start=S\u00e4tt slingans startpunkt
 transport.set-loop-end=S\u00e4tt slingans slutpunkt
 
-mixer=Mixer
-mixer.volume=Volym
-mixer.track.solo=Solo
-mixer.track.mute=Tysta
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.volume=Volym
-mixer.channel.balance=Balans
-mixer.channel.chorus=Chorus
-mixer.channel.reverb=Reverb
-mixer.channel.phaser=Phaser
-mixer.channel.tremolo=Tremolo
-mixer.channel.free=Ledig
-mixer.channel.link=L\u00e4nk
+instruments.volume=Volym
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.volume=Volym
+instrument.balance=Balans
+instrument.chorus=Chorus
+instrument.reverb=Reverb
+instrument.phaser=Phaser
+instrument.tremolo=Tremolo
+instrument.free=Ledig
+instrument.link=L\u00e4nk
 
 
 repeat.open=\u00d6ppna repris
@@ -466,8 +465,6 @@ key-bindings-editor-shortcut-column=Genv\u00e4g
 key-bindings-editor-push-a-key=Tryck in en snabbtangent
 key-bindings-editor-save-question=Det finns osparade \u00e4ndringar. Vill du avsluta utan att spara?
 
-key-bindings-editor-reserved-title=Reserverad genv\u00e4g
-key-bindings-editor-reserved-message=Ledsen, denna genv\u00e4g \u00e4r reserverad
 key-bindings-editor-override=Genv\u00e4gen anv\u00e4nds redan! \u00c4r du s\u00e4ker p\u00e5 att du vill anv\u00e4nda den?
 
 print.print=Skriv ut
diff --git a/TuxGuitar/share/lang/messages_uk.properties b/TuxGuitar/share/lang/messages_uk.properties
index b63d4bf..811826b 100644
--- a/TuxGuitar/share/lang/messages_uk.properties
+++ b/TuxGuitar/share/lang/messages_uk.properties
@@ -190,6 +190,8 @@ track.properties=\u0412\u043b\u0430\u0441\u0442\u0438\u0432\u043e\u0441\u0442\u0
 track.properties.general=\u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0456
 track.name.default-percussion-name=\u0423\u0434\u0430\u0440\u043d\u0456
 track.lyrics=\u0422\u0435\u043a\u0441\u0442 \u043f\u0456\u0441\u043d\u0456
+track.solo=\u0421\u043e\u043b\u043e
+track.mute=\u041c\u043e\u0432\u0447\u0430\u043d\u043d\u044f
 
 lyric.editor=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443
 
@@ -300,16 +302,13 @@ transport.mode.simple.loop=\u0417\u0430\u0446\u0438\u043a\u043b\u0438\u0442\u043
 transport.mode.trainer=\u0422\u0440\u0435\u043d\u0443\u0432\u0430\u043d\u043d\u044f
 transport.mode.trainer.increment-description=\u0417\u0431\u0456\u043b\u044c\u0448\u0443\u0432\u0430\u0442\u0438 \u043d\u0430
 
-mixer=\u041c\u0456\u043a\u0448\u0435\u0440
-mixer.volume=\u041f\u0456\u0434\u0441\u0438\u043b\u0435\u043d\u043d\u044f
-mixer.track.solo=\u0421\u043e\u043b\u043e
-mixer.track.mute=\u041c\u043e\u0432\u0447\u0430\u043d\u043d\u044f
-mixer.channel.volume=\u0413\u0443\u0447\u043d\u0456\u0441\u0442\u044c
-mixer.channel.channel=CH
-mixer.channel.effect-channel=EC
-mixer.channel.balance=\u0411\u0430\u043b\u0430\u043d\u0441
-mixer.channel.free=\u0412\u0456\u043b\u044c\u043d\u0438\u0439
-mixer.channel.link=\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f
+instruments.volume=\u041f\u0456\u0434\u0441\u0438\u043b\u0435\u043d\u043d\u044f
+instrument.volume=\u0413\u0443\u0447\u043d\u0456\u0441\u0442\u044c
+instrument.channel=CH
+instrument.effect-channel=EC
+instrument.balance=\u0411\u0430\u043b\u0430\u043d\u0441
+instrument.free=\u0412\u0456\u043b\u044c\u043d\u0438\u0439
+instrument.link=\u041f\u043e\u0441\u0438\u043b\u0430\u043d\u043d\u044f
 
 
 repeat.open=\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u0438 \u0440\u0435\u043f\u0440\u0438\u0437\u0443
@@ -413,8 +412,6 @@ key-bindings-editor-shortcut-column=\u041a\u043b\u0430\u0432\u0456\u0448\u0456
 key-bindings-editor-push-a-key=\u041d\u0430\u0442\u0438\u0441\u043d\u0456\u0442\u044c \u043a\u043b\u0430\u0432\u0456\u0448\u0443
 key-bindings-editor-save-question=\u0417\u043c\u0456\u043d\u0438 \u043d\u0435\u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u0456, \u0432\u0438\u0439\u0442\u0438 \u043d\u0435 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u044e\u0447\u0438?
 
-key-bindings-editor-reserved-title=\u0417\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u043e\u0432\u0430\u043d\u0435 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f
-key-bindings-editor-reserved-message=\u0412\u0438\u0431\u0430\u0447\u0442\u0435, \u0446\u0435 \u0441\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u043e\u0432\u0430\u043d\u0435.
 key-bindings-editor-override=\u0421\u043a\u043e\u0440\u043e\u0447\u0435\u043d\u043d\u044f \u0432\u0436\u0435 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f! \u0412\u0438 \u0441\u043f\u0440\u0430\u0432\u0434\u0456 \u0445\u043e\u0447\u0435\u0442\u0435 \u0439\u043e\u0433\u043e \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438?
 
 print.print=\u0414\u0440\u0443\u043a\u0443\u0432\u0430\u0442\u0438
diff --git a/TuxGuitar/share/lang/messages_vi.properties b/TuxGuitar/share/lang/messages_vi.properties
index bdf0183..cadfffe 100644
--- a/TuxGuitar/share/lang/messages_vi.properties
+++ b/TuxGuitar/share/lang/messages_vi.properties
@@ -191,6 +191,8 @@ track.properties=Thu\u1ED9c t\u00EDnh
 track.properties.general=Chung
 track.name.default-percussion-name=B\u1ED9 g\u00F5
 track.lyrics=L\u1EDDi
+track.solo=\u0110\u1ED9c t\u1EA5u
+track.mute=C\u00E2m
 
 lyric.editor=So\u1EA1n l\u1EDDi
 
@@ -301,16 +303,13 @@ transport.mode.simple.loop=Ph\u00E1t l\u1EB7p l\u1EA1i
 transport.mode.trainer=T\u1EADp theo
 transport.mode.trainer.increment-description=T\u0103ng l\u00EAn
 
-mixer=B\u1ED9 tr\u1ED9n \u00E2m
-mixer.volume=Khu\u1EBFch \u0111\u1EA1i
-mixer.track.solo=\u0110\u1ED9c t\u1EA5u
-mixer.track.mute=C\u00E2m
-mixer.channel.volume=\u00C2m l\u01B0\u1EE3ng
-mixer.channel.channel=K\u00EAnh
-mixer.channel.effect-channel=Hi\u1EC7u\u1EE8ng
-mixer.channel.balance=C\u00E2n b\u1EB1ng
-mixer.channel.free=Free
-mixer.channel.link=Li\u00EAn k\u1EBFt
+instruments.volume=Khu\u1EBFch \u0111\u1EA1i
+instrument.volume=\u00C2m l\u01B0\u1EE3ng
+instrument.channel=K\u00EAnh
+instrument.effect-channel=Hi\u1EC7u\u1EE8ng
+instrument.balance=C\u00E2n b\u1EB1ng
+instrument.free=Free
+instrument.link=Li\u00EAn k\u1EBFt
 
 
 repeat.open=M\u1EDF d\u1EA5u l\u1EB7p
@@ -414,8 +413,6 @@ key-bindings-editor-shortcut-column=Ph\u00EDm t\u1EAFt
 key-bindings-editor-push-a-key=Nh\u1EA5n m\u1ED9t ph\u00EDm
 key-bindings-editor-save-question=C\u00F3 nhi\u1EC1u thay \u0111\u1ED5i ch\u01B0a l\u01B0u, b\u1EA1n c\u00F3 mu\u1ED1n tho\u00E1t m\u00E0 kh\u00F4ng l\u01B0u ch\u00FAng l\u1EA1i kh\u00F4ng?
 
-key-bindings-editor-reserved-title=C\u00E1c ph\u00EDm t\u1EAFt d\u00E0nh ri\u00EAng
-key-bindings-editor-reserved-message=Xin l\u1ED7i, ph\u00EDm t\u1EAFt n\u00E0y kh\u00F4ng d\u00F9ng \u0111\u01B0\u1EE3c
 key-bindings-editor-override=\u0110\u00E3 g\u00E1n ph\u00EDm t\u1EAFt n\u00E0y cho h\u00E0nh \u0111\u1ED9ng kh\u00E1c! B\u1EA1n c\u00F3 s\u1EEDa l\u1EA1i kh\u00F4ng?
 
 print.print=In
diff --git a/TuxGuitar/share/lang/messages_zh_GB.properties b/TuxGuitar/share/lang/messages_zh_GB.properties
index 3827974..a4847cb 100644
--- a/TuxGuitar/share/lang/messages_zh_GB.properties
+++ b/TuxGuitar/share/lang/messages_zh_GB.properties
@@ -714,10 +714,6 @@ key-bindings-editor-override=\u5FEB\u6377\u952E\u51B2\u7A81\!\u786E\u5B9A\u4F7F\
 
 key-bindings-editor-push-a-key=\u8BF7\u6309\u952E
 
-key-bindings-editor-reserved-message=\u5BF9\u4E0D\u8D77,\u70ED\u952E\u70ED\u952E\u5457\u4FDD\u7559.
-
-key-bindings-editor-reserved-title=\u4FDD\u7559\u5FEB\u6377\u952E
-
 key-bindings-editor-save-question=\u4FEE\u6539\u8FD8\u672A\u4FDD\u5B58,\u73B0\u5728\u4FDD\u5B58\u4E48?
 
 key-bindings-editor-shortcut-column=\u6309\u952E
@@ -800,23 +796,19 @@ midi.sequencer=MIDI \u97F3\u5E8F\u5668
 
 mixer=\u6DF7\u97F3\u5668
 
-mixer.channel.balance=\u5E73\u8861
-
-mixer.channel.channel=CH
+instrument.balance=\u5E73\u8861
 
-mixer.channel.effect-channel=EC
+instrument.channel=CH
 
-mixer.channel.free=\u7A7A\u95F2
+instrument.effect-channel=EC
 
-mixer.channel.link=\u8FDE\u63A5
+instrument.free=\u7A7A\u95F2
 
-mixer.channel.volume=\u97F3\u91CF
+instrument.link=\u8FDE\u63A5
 
-mixer.track.mute=\u65E0\u58F0
+instrument.volume=\u97F3\u91CF
 
-mixer.track.solo=\u72EC\u594F
-
-mixer.volume=\u4E3B\u97F3\u91CF
+instruments.volume=\u4E3B\u97F3\u91CF
 
 name=\u540D\u5B57
 
@@ -1070,6 +1062,10 @@ track.properties.general=\u5E38\u7528
 
 track.remove=\u5220\u9664\u58F0\u90E8
 
+track.mute=\u65E0\u58F0
+
+track.solo=\u72EC\u594F
+
 transport=\u64AD\u653E\u5668
 
 transport.first=\u7B2C\u4E00\u5C0F\u8282
diff --git a/TuxGuitar/share/lang/messages_zh_TW.properties b/TuxGuitar/share/lang/messages_zh_TW.properties
index 0c0274e..75514ef 100644
--- a/TuxGuitar/share/lang/messages_zh_TW.properties
+++ b/TuxGuitar/share/lang/messages_zh_TW.properties
@@ -1,489 +1,719 @@
-###############################################################
-###                  Defaul language codes                  ###
-###############################################################
-es=Espa\u00f1ol
-en=English
-fr=Fran\u00e7ais
-pl=Polski
-de=Deutsch
-pt=Portuguese
-zh=\u6b63\u9ad4\u4e2d\u6587
-###############################################################
-
-ok=\u78ba\u5b9a
-cancel=\u53d6\u6d88
-yes=\u662f
-no=\u5426
-add=\u65b0\u589e
-edit=\u7de8\u8f2f
-remove=\u79fb\u9664
-save=\u5132\u5b58
-exit=\u96e2\u958b
-choose=\u9078\u64c7
-color=\u984f\u8272
-title=\u6a19\u984c
-go=\u524d\u5f80
-warning=\u8b66\u544a
-error=\u932f\u8aa4
-plugins=\u5916\u639b
-options=\u9078\u9805
-defaults=\u9810\u8a2d
-clean=\u6e05\u9664
-rename=\u91cd\u65b0\u547d\u540d
-fret=\u7434\u54c1
-position=\u4f4d\u7f6e
-metronome=\u7bc0\u62cd\u5668
-
-tuxguitar.title=Tux-Guitar
-
-file=\u6a94\u6848
-file.new=\u958b\u65b0\u6a94\u6848
-file.open=\u958b\u555f\u820a\u6a94
-file.save=\u5132\u5b58\u6a94\u6848
-file.save-as=\u53e6\u5b58\u65b0\u6a94
-file.exit=\u96e2\u958b
-file.export=\u8f38\u51fa
-file.export-midi=\u8f38\u51fa\u6210MIDI
-file.export-pdf=\u8f38\u51fa\u6210 PDF
-file.print=\u5217\u5370
-file.print-preview=\u9810\u89bd\u5217\u5370
-file.import=\u8f38\u5165
-file.import-midi=\u8f38\u5165MIDI
-file.export-ascii=\u8f38\u51fa\u6210ASCII
-file.history=\u6b77\u53f2\u7d00\u9304
-file.overwrite-question=\u6a94\u6848\u5df2\u5b58\u5728\uff0c\u662f\u5426\u8986\u5beb\uff1f
-
-edit.menu=\u7de8\u8f2f
-edit.undo=\u4e0a\u4e00\u6b65
-edit.redo=\u4e0b\u4e00\u6b65
-edit.copy=\u8907\u88fd
-edit.from=\u5f9e
-edit.to=\u5230
-edit.all-tracks=\u5168\u90e8\u97f3\u8ecc
-edit.paste=\u8cbc\u4e0a
-edit.paste.replace-mode=\u8cbc\u5728\u9019\u500b\u5c0f\u7bc0
-edit.paste.insert-mode=\u8cbc\u5230\u65b0\u7684\u5c0f\u7bc0
-edit.delete=\u522a\u9664
-edit.cut=\u526a\u4e0b
-edit.mouse-mode-selection=\u9078\u64c7\u6a21\u5f0f
-edit.mouse-mode-edition=\u4e94\u7dda\u8b5c\u7de8\u8f2f\u6a21\u5f0f
-edit.not-natural-key=\u5347/\u964d\u6a21\u5f0f
-
-view=\u6aa2\u8996
-
-view.layout=\u7248\u9762
-view.layout.page=\u7e31\u5411\u5ef6\u4f38
-view.layout.linear=\u6a6b\u5411\u5ef6\u4f38
-view.layout.multitrack=\u591a\u8ecc
-
-view.show-mixer=\u986f\u793a\u6df7\u97f3\u5668
-view.show-fretboard=\u986f\u793a\u6307\u677f
-view.show-piano=\u986f\u793a\u7434\u9375
-fretboard.right-mode=\u53f3\u624b\u7434
-fretboard.left-mode=\u5de6\u624b\u7434
-
-composition=\u66f2\u76ee
-composition.timesignature=\u62cd\u5b50\u8a18\u865f
-composition.timesignature.Numerator=\u5206\u5b50
-composition.timesignature.denominator=\u5206\u6bcd
-composition.timesignature.to-the-end=\u5230\u7d50\u5c3e
-composition.tempo=\u7bc0\u594f
-composition.tempo-percent=\u7bc0\u594f(\u767e\u5206\u6bd4)
-composition.properties=\u8cc7\u8a0a
-composition.name=\u540d\u7a31
-composition.artist=\u6f14\u594f\u8005
-composition.album=\u5c08\u8f2f
-composition.author=\u4f5c\u8005
-composition.tempo.invalid=\u4e0d\u5408\u7406\u7684\u7bc0\u594f
-composition.tripletfeel=Triplet Feel
-
-help=\u5e6b\u52a9
-help.help=\u5e6b\u52a9
-help.about=\u95dc\u65bc
-
-mixer.volume=\u589e\u76ca
-mixer.track.solo=\u7368\u594f
-mixer.track.mute=\u975c\u97f3
-mixer.channel.volume=\u97f3\u91cf
-mixer.channel.channel=\u983b\u9053
-mixer.channel.effect-channel=\u6548\u679c\u983b\u9053
-mixer.channel.balance=\u5e73\u8861
-mixer.channel.free=\u91cb\u653e
-mixer.channel.link=\u9023\u7d50
-
-track=\u97f3\u8ecc
-track.number=\u7de8\u865f
-track.name=\u540d\u7a31
-track.color=\u984f\u8272
-track.first=\u7b2c\u4e00\u8ecc
-track.last=\u6700\u672b\u8ecc
-track.previous=\u524d\u4e00\u8ecc
-track.next=\u4e0b\u4e00\u8ecc
-track.add=\u65b0\u589e\u97f3\u8ecc
-track.remove=\u79fb\u9664\u97f3\u8ecc
-track.instrument=\u6a02\u5668
-track.tunning=\u8abf\u5f26\u6cd5
-track.instrument.empty=\u5728\u4f60\u7684Midi\u7cfb\u7d71\u88e1\u627e\u4e0d\u5230\u97f3\u6e90\uff0c\u8acb\u5617\u8a66\u91cd\u65b0\u7de8\u8b6fTuxGuitar
-track.properties=\u5c6c\u6027
-track.properties.general=\u4e00\u822c
-track.name.default-percussion-name=\u6253\u64ca\u6a02\u5668
-track.lyrics=\u6b4c\u8a5e
-tunning.offset=\u4f4d\u79fb
-lyric.editor=\u6b4c\u8a5e\u7de8\u8f2f\u5668
-
-measure=\u5c0f\u7bc0
-measure.first=\u7b2c\u4e00\u5c0f\u7bc0
-measure.last=\u6700\u5f8c\u5c0f\u7bc0
-measure.previous=\u4e0a\u500b\u5c0f\u7bc0
-measure.next=\u4e0b\u500b\u5c0f\u7bc0
-measure.add=\u65b0\u589e\u5c0f\u7bc0
-measure.add-before-current-position=\u5728\u7576\u524d\u4f4d\u7f6e\u4e4b\u524d\u65b0\u589e\u5c0f\u7bc0
-measure.add-after-current-position=\u5728\u7576\u524d\u4f4d\u7f6e\u4e4b\u5f8c\u65b0\u589e\u5c0f\u7bc0
-measure.add-at-end=\u5728\u7d50\u5c3e\u65b0\u589e\u5c0f\u7bc0
-measure.remove=\u79fb\u9664\u5c0f\u7bc0
-measure.copy=\u8907\u88fd\u5c0f\u7bc0
-measure.paste=\u8cbc\u4e0a\u5c0f\u7bc0
-measure.clean=\u6e05\u9664\u5c0f\u7bc0
-
-duration=\u97f3\u9577
-duration.whole=\u5168\u97f3\u7b26
-duration.half=\u4e8c\u5206\u97f3\u7b26
-duration.quarter=\u56db\u5206\u97f3\u7b26
-duration.eighth=\u516b\u5206\u97f3\u7b26
-duration.sixteenth=\u5341\u516d\u5206\u97f3\u7b26
-duration.thirtysecond=\u4e09\u5341\u4e8c\u5206\u97f3\u7b26
-duration.sixtyfourth=\u516d\u5341\u56db\u5206\u97f3\u7b26
-duration.dotted=\u9644\u9ede
-duration.doubledotted=\u96d9\u9644\u9ede
-duration.division-type=\u4e09\u9023\u97f3
-
-dynamic=\u529b\u5ea6
-dynamic.piano-pianissimo=\u6700\u5f31
-dynamic.pianissimo=\u751a\u5f31
-dynamic.piano=\u5f31
-dynamic.mezzo-piano=\u4e2d\u5f31
-dynamic.mezzo-forte=\u4e2d\u5f37   
-dynamic.forte=\u5f37
-dynamic.fortissimo=\u751a\u5f37
-dynamic.forte-fortissimo=\u6700\u5f37
-
-effects=\u6548\u679c
-effects.vibrato=\u9707\u97f3
-effects.bend=\u63a8\u5f26
-effects.deadnote=\u60b6\u97f3
-effects.slide=\u6ed1\u5f26
-effects.hammer=\u69cc\u5f26/\u52fe\u5f26
-effects.tremolo-bar=\u6416\u687f\u986b\u97f3\u63a7\u5236\u689d
-effects.tremolo-bar-editor=\u6416\u687f\u986b\u97f3\u7de8\u8f2f\u5668
-effects.tremolo-bar.dip=Dip
-effects.tremolo-bar.dive=Dive
-effects.tremolo-bar.release-up=Release Up
-effects.tremolo-bar.release-down=Release Down
-effects.tremolo-bar.inverted-dip=Inverted Dip
-effects.tremolo-bar.return=Return
-effects.ghostnote=\u5e7d\u9748\u97f3
-effects.accentuatednote=\u91cd\u97f3
-effects.heavyaccentuatednote=\u5f37\u91cd\u97f3
-effects.harmonic=\u6cdb\u97f3
-effects.grace=\u88dd\u98fe\u97f3
-effects.grace-editor=\u88dd\u98fe\u97f3\u7de8\u8f2f\u5668
-effects.grace.before-beat=\u62cd\u524d\u88dd\u98fe\u97f3
-effects.grace.on-beat=\u62cd\u9ede\u88dd\u98fe\u97f3
-effects.grace.transition=\u904e\u6e21\u88dd\u98fe\u97f3
-effects.grace.transition-none=\u7121
-effects.grace.transition-bend=\u63a8\u5f26
-effects.grace.transition-slide=\u6ed1\u97f3
-effects.grace.transition-hammer=\u69cc\u97f3
-effects.trill=\u986b\u97f3
-effects.trill-editor=\u986b\u97f3\u7de8\u8f2f\u5668
-effects.tremolo-picking=\u6416\u687f\u986b\u97f3\u64a5\u594f
-effects.tremolo-picking-editor=\u6416\u687f\u986b\u97f3\u64a5\u594f\u7de8\u8f2f\u5668
-effects.palm-mute=\u624b\u638c\u60b6\u97f3
-effects.staccato=\u65b7\u97f3
-effects.tapping=\u9ede\u5f26
-effects.slapping=\u53f3\u624b\u64ca\u5f26
-effects.popping=\u53f3\u624b\u52fe\u5f26
-effects.fade-in=\u6de1\u5165
-effects.harmonic-editor=\u6cdb\u97f3\u7de8\u8f2f\u5668
-effects.harmonic.type-of-harmonic=\u6cdb\u97f3\u985e\u578b
-effects.harmonic.natural=\u81ea\u7136\u6cdb\u97f3
-effects.harmonic.artificial=\u4eba\u5de5\u6cdb\u97f3
-effects.harmonic.artificial.key-offset=Key offset
-effects.harmonic.tapped=\u62cd\u5f26\u6cdb\u97f3
-effects.harmonic.tapped.left-hand=\u5de6\u624b\u9ede\u5f26
-effects.harmonic.tapped.right-hand=\u53f3\u624b\u9ede\u5f26
-effects.harmonic.pinch=\u624b\u6307\u6cdb\u97f3
-effects.harmonic.semi=\u534a\u6cdb\u97f3
-
-bend.editor=\u63a8\u5f26\u7de8\u8f2f\u5668
-bend.bend=\u63a8\u5f26
-bend.bend-release=\u63a8/\u653e
-bend.bend-release-bend=\u63a8/\u653e/\u63a8
-bend.prebend=PreBend
-bend.prebend-release=PreBend/Release
-
-transport=\u64ad\u653e\u5668
-transport.start=\u958b\u59cb
-transport.stop=\u505c\u6b62
-
-repeat.open=\u958b\u59cb\u53cd\u8986\u5340\u6bb5
-repeat.close=\u7d50\u675f\u53cd\u8986\u5340\u6bb5
-repetitions=\u53cd\u8907
-repeat.number-of-repetitions=\u53cd\u8907\u6b21\u6578
-
-beat=\u97f3\u7b26
-beat.clean=\u6e05\u9664\u62cd\u9ede
-
-note.semitone-up=\u5347\u534a\u97f3
-note.semitone-down=\u964d\u534a\u97f3
-note.shift-up=\u4e0a\u79fb
-note.shift-down=\u4e0b\u79fb
-note.tiednote=\u9023\u7d50\u97f3
-note.deadnote=\u60b6\u97f3
-
-insert.chord=\u63d2\u5165\u548c\u5f26
-chord.editor=\u548c\u5f26\u7de8\u8f2f\u5668
-chord=\u548c\u5f26
-chord.name=\u548c\u5f26\u540d\u7a31
-chord.custom.name-empty-error=\u548c\u5f26\u540d\u7a31\u4e0d\u53ef\u7a7a\u767d
-chord.custom.name-exist-error=\u548c\u5f26\u540d\u7a31\u5df2\u5b58\u5728
-
-instrument=\u6a02\u5668
-instrument.instrument=\u6a02\u5668
-instrument.percussion-track=\u6253\u64ca\u6a02\u5668\u8ecc
-
-tunning=\u8abf\u5f26\u6cd5
-tunning.strings=\u5f26
-
-language=\u8a9e\u8a00
-
-choose-color=\u9078\u64c7\u4e00\u500b\u984f\u8272
-
-
-settings=\u8a2d\u5b9a
-settings.config=\u8a2d\u5b9aTuxGuitar
-settings.config.view=\u6aa2\u8996
-settings.config.view.mode=\u7248\u9762\u6a21\u5f0f
-settings.config.view.size=\u8996\u7a97\u5927\u5c0f
-settings.config.view.size.maximized=\u653e\u5230\u6700\u5927
-settings.config.view.size.width=\u5bec\u5ea6
-settings.config.view.size.height=\u9ad8\u5ea6
-settings.config.language=\u8a9e\u8a00
-settings.config.language.choose=\u9078\u64c7\u8a9e\u8a00
-settings.config.styles=\u98a8\u683c
-settings.config.styles.font.default=\u9810\u8a2d\u5b57\u578b
-settings.config.styles.font.note=\u97f3\u7b26\u5b57\u578b
-settings.config.styles.font.time-signature=\u62cd\u5b50\u8a18\u865f\u5b57\u578b
-settings.config.styles.font.printer-default=\u5217\u5370\u7528\u9810\u8a2d\u5b57\u578b
-settings.config.styles.font.printer-note=\u5217\u5370\u7528\u97f3\u7b26\u5b57\u578b
-settings.config.styles.font.printer-time-signature=\u5217\u5370\u7528\u62cd\u5b50\u8a18\u865f\u5b57\u578b
-settings.config.styles.color.score-note=\u4e94\u7dda\u8b5c\u97f3\u7b26\u984f\u8272
-settings.config.styles.color.tab-note=\u516d\u7dda\u8b5c\u97f3\u7b26\u984f\u8272
-settings.config.styles.color.play-note=\u64ad\u653e\u4e2d\u7684\u97f3\u7b26\u984f\u8272
-settings.config.apply-changes-question=\u60a8\u8981\u73fe\u5728\u5957\u7528\u8b8a\u66f4\u55ce?
-settings.config.sound=\u8072\u97f3
-settings.config.sound.soundbank=\u97f3\u6e90\u5eab
-settings.config.sound.default-soundbank=\u4f7f\u7528\u9810\u8a2d\u97f3\u6e90\u5eab
-settings.config.sound.custom-soundbank=\u4f7f\u7528\u81ea\u8a02\u97f3\u6e90\u5eab
-settings.config.sound.soundbank-restart-message=\u4f60\u9700\u8981\u91cd\u65b0\u555f\u52d5TuxGuitar\u4ee5\u4f7f\u97f3\u6e90\u5eab\u7684\u8b8a\u66f4\u751f\u6548
-settings.config.main=\u4e00\u822c
-settings.config.main.window-title=\u8996\u7a97\u6a19\u984c
-settings.config.main.window-title.help=\u4e0b\u5217\u8b8a\u6578\u6703\u986f\u793a\u5728\u8996\u7a97\u6a19\u984c
-settings.config.main.window-title.var.description.appname=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u9019\u500b\u7a0b\u5f0f\u7684\u540d\u7a31:TuxGuitar
-settings.config.main.window-title.var.description.appversion=\u9019\u500b\u8b8a\u6578\u4ee3\u8868TuxGuitar\u7684\u7248\u672c\u865f
-settings.config.main.window-title.var.description.filename=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u958b\u555f\u6a94\u6848\u7684\u6a94\u540d
-settings.config.main.window-title.var.description.filepath=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u958b\u555f\u6a94\u6848\u7684\u8def\u5f91
-settings.config.main.window-title.var.description.songname=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u540d\u7a31
-settings.config.main.window-title.var.description.songauthor=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u4f5c\u8005
-settings.config.main.window-title.var.description.songalbum=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u5c08\u8f2f
-settings.config.main.window-title.var.description.songartist=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u6f14\u594f\u8005
-settings.config.main.options=\u9078\u9805
-settings.config.main.splash-enabled=\u986f\u793a\u555f\u52d5\u6b61\u8fce\u756b\u9762
-settings.config.styles.color.lines=\u6c34\u5e73\u7dda\u984f\u8272
-settings.config.toolbars=\u5de5\u5177\u5217
-
-soundbank.error=\u97f3\u6e90\u5eab\u932f\u8aa4
-soundbank.error.unavailable=\u7121\u6548\u7684\u97f3\u6e90\u5eab\u932f\u8aa4
-soundbank.error.custom=\u7121\u6cd5\u958b\u555f\u81ea\u8a02\u97f3\u6e90\u5eab
-
-settings.keybindings=\u71b1\u9375\u8a2d\u5b9a
-key-bindings-editor=\u71b1\u9375\u7de8\u8f2f\u5668
-key-bindings-editor-action-select=\u9078\u64c7\u52d5\u4f5c
-key-bindings-editor-action-column=\u52d5\u4f5c
-key-bindings-editor-shortcut-column=\u6309\u9375
-key-bindings-editor-push-a-key=\u8acb\u6309\u9375
-key-bindings-editor-save-question=\u6709\u672a\u5132\u5b58\u7684\u8b8a\u66f4\uff0c\u662f\u5426\u5132\u5b58\uff1f
-
-key-bindings-editor-reserved-title=\u4fdd\u7559\u7684\u71b1\u9375
-key-bindings-editor-reserved-message=\u62b1\u6b49\uff0c\u9019\u500b\u71b1\u9375\u5df2\u88ab\u4fdd\u7559
-key-bindings-editor-override=\u9019\u500b\u71b1\u9375\u5df2\u88ab\u4f7f\u7528\uff0c\u78ba\u5b9a\u8981\u4f7f\u7528\uff1f
-
-
-
-print.print=\u5217\u5370
-print.dialog=\u5217\u5370
-print.service=\u670d\u52d9
-print.service.name=\u540d\u7a31
-print.service.status=\u72c0\u614b
-print.service.type=\u985e\u578b
-print.service.info=\u8cc7\u8a0a
-print.range=\u7bc4\u570d
-print.range.all-pages=\u5168\u90e8
-print.range.pages=\u9801\u9762
-print.range.pages-to=\u5230
-print.copies=\u8907\u5370
-print.copies-number=\u4efd\u6578
-print.print-to-file=\u5217\u5370\u5230\u6a94\u6848
-print.file-chooser=\u9078\u64c7
-print-header.default-song-name=\u672a\u547d\u540d
-print-header.default-song-author=\u4e0d\u8a73
-print.preview=\u9810\u89bd\u5217\u5370
-
-
-
-
-view.layout.score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c
-view.show-transport=\u986f\u793a\u6642\u9593\u8ef8
-
-composition.clef=\u8b5c\u865f
-composition.clef.treble=\u9ad8\u97f3\u8b5c\u8a18\u865f
-composition.clef.bass=\u4f4e\u97f3\u8b5c\u8a18\u865f
-composition.clef.tenor=\u6b21\u4e2d\u97f3\u8b5c\u8a18\u865f
-composition.clef.alto=\u4e2d\u97f3\u8b5c\u8a18\u865f
-composition.clef.to-the-end=\u5957\u7528\u9019\u500b\u8b5c\u865f\u5230\u7d50\u5c3e
-
-composition.keysignature=\u8abf\u865f
-composition.keysignature.natural=\u9084\u539f
-composition.keysignature.sharp-1=\u53471
-composition.keysignature.sharp-2=\u53472
-composition.keysignature.sharp-3=\u53473
-composition.keysignature.sharp-4=\u53474
-composition.keysignature.sharp-5=\u53475
-composition.keysignature.sharp-6=\u53476
-composition.keysignature.sharp-7=\u53477
-composition.keysignature.flat-1=\u964d1
-composition.keysignature.flat-2=\u964d2
-composition.keysignature.flat-3=\u964d3
-composition.keysignature.flat-4=\u964d4
-composition.keysignature.flat-5=\u964d5
-composition.keysignature.flat-6=\u964d6
-composition.keysignature.flat-7=\u964d7
-composition.keysignature.to-the-end=\u5957\u7528\u9019\u500b\u8abf\u865f\u5230\u7d50\u5c3e
-composition.tripletfeel=Triplet Feel
-composition.tripletfeel.none=No Triplet Feel
-composition.tripletfeel.eighth=Triplet 8th
-composition.tripletfeel.sixteenth=Triplet 16th
-composition.tripletfeel.to-the-end=\u5957\u7528\u9019\u500btriplet feel\u5230\u7d50\u5c3e
-
-track.clone=\u8907\u88fd\u97f3\u8ecc
-track.move-up=\u4e0a\u79fb
-track.move-down=\u4e0b\u79fb
-
-marker=\u6a19\u8a18
-marker.add=\u52a0\u5165\u6a19\u8a18
-marker.list=\u6a19\u8a18\u5217\u8868
-marker.first=\u81f3\u9996\u6a19\u8a18
-marker.last=\u81f3\u672b\u6a19\u8a18
-marker.next=\u4e0b\u4e00\u500b\u6a19\u8a18
-marker.previous=\u524d\u4e00\u500b\u6a19\u8a18
-
-export.tablature-enabled=\u986f\u793a\u516d\u7dda\u8b5c
-export.score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c
-
-scale=\u97f3\u968e
-scale.list=\u97f3\u968e\u5217\u8868
-
-#########################
-###  Tool Bar Items   ###
-#########################
-file.items=\u6a94\u6848
-edit.items=\u7de8\u8f2f
-property.items=\u5c6c\u6027
-track.items=\u97f3\u8ecc
-duration.items=\u97f3\u9577
-beat.items=\u97f3\u7b26
-composition.items=\u66f2\u76ee
-repeat.items=\u53cd\u8986
-transport.items=\u64ad\u653e\u5668
-marker.items=\u6a19\u8a18
-insert.items=\u63d2\u5165
-layout.items=\u7248\u9762
-view.items=\u6aa2\u8996
-effect.items=\u6548\u679c
-dynamic.items=\u529b\u5ea6
-
-#########################
-###Key Binding Actions###
-#########################
-action.file.new=\u958b\u65b0\u6a94\u6848
-action.file.open=\u958b\u555f\u820a\u6a94
-action.file.save=\u5132\u5b58\u6a94\u6848
-action.file.save-as=\u53e6\u5b58\u65b0\u6a94
-action.file.print=\u5217\u5370
-action.file.print-preview=\u9810\u89bd\u5217\u5370
-action.edit.undo=\u4e0a\u4e00\u6b65
-action.edit.redo=\u4e0b\u4e00\u6b65
-action.composition.change-time-signature=\u8b8a\u66f4\u62cd\u5b50\u8a18\u865f
-action.composition.change-tempo=\u8b8a\u66f4\u7bc0\u62cd
-action.composition.change-info=\u8b8a\u66f4\u6b4c\u66f2\u8a0a\u606f
-action.composition.change-clef=\u8b8a\u66f4\u8b5c\u865f
-action.composition.change-key-signature=\u8b8a\u66f4\u8abf\u865f
-action.view.layout-set-page=\u7e31\u5411\u5ef6\u4f38\u7248\u9762
-action.view.layout-set-linear=\u6a6b\u5411\u5ef6\u4f38\u7248\u9762
-action.view.layout-set-multitrack=\u591a\u8ecc\u7248\u9762
-action.view.layout-set-score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c
-action.view.show-fretboard=\u986f\u793a\u6307\u7248
-action.view.show-piano=\u986f\u793a\u7434\u9375
-action.view.show-mixer=\u986f\u793a\u6df7\u97f3\u5668
-action.view.show-transport=\u986f\u793a\u6642\u9593\u8ef8
-action.track.add=\u65b0\u589e\u97f3\u8ecc
-action.track.remove=\u79fb\u9664\u97f3\u8ecc
-action.track.clone=\u8907\u88fd\u97f3\u8ecc
-action.track.go-first=\u5230\u7b2c\u4e00\u8ecc
-action.track.go-last=\u5230\u6700\u672b\u8ecc
-action.track.go-next=\u5230\u4e0b\u4e00\u8ecc
-action.track.go-previous=\u5230\u4e0a\u4e00\u8ecc
-action.track.lyrics=\u7de8\u8f2f\u97f3\u8ecc\u6b4c\u8a5e
-action.track.properties=\u8b8a\u66f4\u97f3\u8ecc\u5c6c\u6027
-action.measure.add=\u589e\u52a0\u5c0f\u7bc0
-action.measure.remove=\u79fb\u9664\u5c0f\u7bc0
-action.measure.copy=\u8907\u88fd\u5c0f\u7bc0
-action.measure.paste=\u8cbc\u4e0a\u5c0f\u7bc0
-action.measure.clean=\u6e05\u9664\u5c0f\u7bc0
-action.measure.go-first=\u5230\u7b2c\u4e00\u5c0f\u7bc0
-action.measure.go-last=\u5230\u6700\u5f8c\u5c0f\u7bc0
-action.measure.go-next=\u5230\u4e0b\u4e00\u5c0f\u7bc0
-action.measure.go-previous=\u5230\u4e0a\u4e00\u5c0f\u7bc0
-action.note.general.clean-beat=\u6e05\u9664\u62cd\u9ede
-action.note.general.decrement-semitone=\u6e1b\u5c11\u534a\u97f3
-action.note.general.increment-semitone=\u589e\u52a0\u534a\u97f3
-action.note.general.shift-down=\u4e0b\u79fb
-action.note.general.shift-up=\u4e0a\u79fb
-action.note.general.tied=\u589e\u52a0/\u79fb\u9664 \u9023\u7d50\u97f3
-action.note.duration.change-dotted=\u589e\u52a0/\u79fb\u9664 \u9644\u9ede
-action.note.duration.change-double-dotted=\u589e\u52a0/\u79fb\u9664 \u96d9\u9644\u9ede
-action.note.duration.change-division-type=\u589e\u52a0/\u79fb\u9664 tupleto
-action.note.effect.change-vibrato=\u589e\u52a0/\u79fb\u9664 \u9707\u97f3
-action.note.effect.change-bend=\u589e\u52a0/\u79fb\u9664 \u63a8\u5f26
-action.note.effect.change-slide=\u589e\u52a0/\u79fb\u9664 \u6ed1\u5f26
-action.note.effect.change-hammer=\u589e\u52a0/\u79fb\u9664 \u5782/\u52fe\u5f26
-action.note.effect.change-accentuated=\u589e\u52a0/\u79fb\u9664 \u91cd\u97f3
-action.note.effect.change-dead=\u589e\u52a0/\u79fb\u9664 \u60b6\u97f3
-action.note.effect.change-fade-in=\u589e\u52a0/\u79fb\u9664 \u6de1\u5165
-action.note.effect.change-ghost=\u589e\u52a0/\u79fb\u9664 \u5e7d\u9748\u97f3
-action.note.effect.change-grace=\u589e\u52a0/\u79fb\u9664 \u88dd\u98fe\u97f3
-action.note.effect.change-harmonic=\u589e\u52a0/\u79fb\u9664 \u6cdb\u97f3
-action.note.effect.change-heavy-accentuated=\u589e\u52a0/\u79fb\u9664 \u5f37\u91cd\u97f3
-action.note.effect.change-palm-mute=\u589e\u52a0/\u79fb\u9664 \u624b\u638c\u60b6\u97f3
-action.note.effect.change-popping=\u589e\u52a0/\u79fb\u9664 \u53f3\u624b\u52fe\u5f26
-action.note.effect.change-slapping=\u589e\u52a0/\u79fb\u9664 \u53f3\u624b\u64ca\u5f26
-action.note.effect.change-staccato=\u589e\u52a0/\u79fb\u9664 \u65b7\u97f3
-action.note.effect.change-tapping=\u589e\u52a0/\u79fb\u9664 \u9ede\u5f26
-action.note.effect.change-tremolo-bar=\u589e\u52a0/\u79fb\u9664 \u6416\u687f\u986b\u97f3\u63a7\u5236\u689d
-action.note.effect.change-tremolo-picking=\u589e\u52a0/\u79fb\u9664 \u6416\u687f\u986b\u97f3\u64a5\u594f
-action.note.effect.change-trill=\u589e\u52a0/\u79fb\u9664 \u986b\u97f3
-action.insert.open-repeat=\u958b\u59cb\u53cd\u8986\u5340\u6bb5
-action.insert.close-repeat=\u7d50\u675f\u53cd\u8986\u5340\u6bb5
-action.insert.chord=\u63d2\u5165\u5408\u5f26
-action.transport.play=\u64ad\u653e
-action.transport.stop=\u505c\u6b62
+ok=\u78ba\u5b9a
+cancel=\u53d6\u6d88
+yes=\u662f
+no=\u5426
+add=\u65b0\u589e
+edit=\u7de8\u8f2f
+remove=\u79fb\u9664
+save=\u5132\u5b58
+exit=\u96e2\u958b
+close=\u95dc\u9589
+choose=\u9078\u64c7
+color=\u984f\u8272
+title=\u6a19\u984c
+go=\u524d\u5f80
+warning=\u8b66\u544a
+error=\u932f\u8aa4
+plugins=\u5916\u639b
+options=\u9078\u9805
+defaults=\u9810\u8a2d
+clean=\u6e05\u9664
+rename=\u91cd\u65b0\u547d\u540d
+fret=\u7434\u683c
+position=\u4f4d\u7f6e
+name=\u59d3\u540d
+author=\u4f5c\u8005
+version=\u7248\u672c
+description=\u8aaa\u660e
+info=\u8cc7\u8a0a
+configure=\u7d44\u614b
+url=\u8d85\u9023\u7d50(URL)
+metronome=\u7bc0\u62cd\u5668
+
+tuxguitar.title=Tux-Guitar\u4f01\u9d5d\u5f48\u5409\u4ed6
+
+file=\u6a94\u6848
+file.new=\u958b\u65b0\u6a94\u6848
+file.open=\u958b\u555f\u820a\u6a94
+file.save=\u5132\u5b58\u6a94\u6848
+file.save-as=\u53e6\u5b58\u65b0\u6a94
+file.save-changes-question=\u9019\u9996\u66f2\u5b50\u6709\u5c1a\u672a\u5132\u5b58\u7684\u4fee\u6539.\n\u4f60\u8981\u5132\u5b58\u9019\u4e9b\u6539\u8b8a\u55ce?
+file.exit=\u96e2\u958b
+file.export=\u8f38\u51fa
+file.export-midi=\u8f38\u51fa\u6210MIDI
+file.export-pdf=\u8f38\u51fa\u6210 PDF
+file.print=\u5217\u5370
+file.print-preview=\u9810\u89bd\u5217\u5370
+file.import=\u8f38\u5165
+file.import-midi=\u8f38\u5165MIDI
+file.export-ascii=\u8f38\u51fa\u6210ASCII
+file.history=\u6b77\u53f2\u7d00\u9304
+file.open-url=\u958b\u555f\u8d85\u9023\u7d50 URL
+file.open.error=\u7121\u6cd5 \u958b\u555f: {0}
+file.save.error=\u7121\u6cd5 \u5132\u5b58: {0}
+file.import.error=\u7121\u6cd5 \u8f38\u5165: {0}
+file.export.error=\u7121\u6cd5 \u8f38\u51fa: {0}
+
+file.overwrite-question=\u6a94\u6848\u5df2\u5b58\u5728\uff0c\u662f\u5426\u8986\u5beb\uff1f
+
+edit.menu=\u7de8\u8f2f
+edit.undo=\u4e0a\u4e00\u6b65
+edit.redo=\u4e0b\u4e00\u6b65
+edit.copy=\u8907\u88fd
+edit.from=\u5f9e
+edit.to=\u5230
+edit.all-tracks=\u5168\u90e8\u97f3\u8ecc
+edit.paste=\u8cbc\u4e0a
+edit.paste.count=\u8cbc\u4e0a\u7684\u6578\u76ee
+edit.paste.replace-mode=\u8cbc\u5728\u9019\u500b\u5c0f\u7bc0
+edit.paste.insert-mode=\u8cbc\u5230\u65b0\u7684\u5c0f\u7bc0
+edit.delete=\u522a\u9664
+edit.cut=\u526a\u4e0b
+edit.mouse-mode-selection=\u9078\u64c7\u6a21\u5f0f
+edit.mouse-mode-edition=\u4e94\u7dda\u8b5c\u7de8\u8f2f\u6a21\u5f0f
+edit.not-natural-key=\u5347/\u964d\u6a21\u5f0f
+edit.voice-1=\u9078\u64c7 \u8072\u9053 1
+edit.voice-2=\u9078\u64c7 \u8072\u9053 2
+
+view=\u6aa2\u8996
+
+view.layout=\u7248\u9762
+view.layout.page=\u7e31\u5411\u5ef6\u4f38
+view.layout.linear=\u6a6b\u5411\u5ef6\u4f38
+view.layout.compact=\u7cbe\u7c21\u7248
+view.layout.multitrack=\u591a\u8ecc
+view.layout.chord-style=\u548c\u5f26\u98a8\u683c
+view.layout.chord-name=\u548c\u5f26\u540d\u7a31
+view.layout.chord-diagram=\u548c\u5f26\u5716\u8868
+view.layout.score-enabled=\u986f\u793a\u7e3d\u8b5c
+view.layout.tablature-enabled=\u986f\u793a\u5409\u4ed6\u8b5c
+view.show-mixer=\u986f\u793a\u6df7\u97f3\u5668
+view.show-fretboard=\u986f\u793a\u6307\u677f
+view.show-piano=\u986f\u793a\u7434\u9375
+view.show-matrix=\u986f\u793a\u77e9\u9663\u6a21\u5f0f
+view.show-transport=\u986f\u793a\u64ad\u653e\u6a21\u5f0f
+fretboard.direction=\u65b9\u5f0f
+fretboard.right-mode=\u53f3\u624b\u7434
+fretboard.left-mode=\u5de6\u624b\u7434
+fretboard.background-color=\u80cc\u666f\u984f\u8272
+fretboard.display-note-text=\u986f\u793a\u97f3\u7b26\u7684\u6587\u5b57
+fretboard.display-scale-text=\u986f\u793a\u97f3\u968e\u7684\u6587\u5b57
+fretboard.font=\u5b57\u578b
+fretboard.fretpoint-color=\u7434\u683c\u984f\u8272
+fretboard.note-color=\u97f3\u7b26\u984f\u8272
+fretboard.scale-note-color=\u97f3\u968e\u7684\u97f3\u7b26\u984f\u8272
+fretboard.settings=\u7434\u683c\u8a2d\u5b9a
+fretboard.string-color=\u7434\u7d43\u7684\u984f\u8272
+fretboard.settings.options=\u9078\u9805
+piano.editor=\u92fc\u7434\u7de8\u7ddd\u5668
+piano.natural-key-color=\u81ea\u7136\u7434\u9375\u984f\u8272(\u9ed1/\u767d\u9375)
+piano.not-natural-key-color=\u4e0d\u81ea\u7136\u7434\u9375\u984f\u8272
+piano.note-color=\u97f3\u7b26\u984f\u8272
+piano.scale-note-color=\u97f3\u968e\u97f3\u7b26\u984f\u8272
+piano.settings=\u92fc\u7434\u8a2d\u5b9a
+
+matrix.editor=\u77e9\u9663\u6a21\u5f0f\u7de8\u8f2f\u5668
+matrix.grids=\u683c\u5b50\u7684\u6578\u76ee
+matrix.border-color=\u908a\u7dda\u984f\u8272
+matrix.font=\u5b57\u578b
+matrix.foreground-color=\u524d\u666f\u984f\u8272
+matrix.line-color-1=\u5947\u6578\u5217\u984f\u8272
+matrix.line-color-2=\u5076\u6578\u5217\u984f\u8272
+matrix.line-color-over=\u6ed1\u9f20\u6ed1\u904e\u5217\u7684\u984f\u8272
+matrix.note-color=\u97f3\u7b26\u984f\u8272
+matrix.play-note-color=\u5f48\u594f\u97f3\u7b26\u7684\u984f\u8272
+matrix.position-color=\u4f4d\u7f6e\u7684\u984f\u8272
+matrix.settings=\u77e9\u9663\u6a21\u5f0f\u7684\u8a2d\u5b9a
+
+composition=\u66f2\u76ee
+composition.timesignature=\u62cd\u5b50\u8a18\u865f
+composition.timesignature.Numerator=\u5206\u5b50
+composition.timesignature.denominator=\u5206\u6bcd
+composition.timesignature.to-the-end=\u5230\u7d50\u5c3e
+composition.tempo=\u7bc0\u594f
+composition.tempo-percent=\u7bc0\u594f(\u767e\u5206\u6bd4)
+composition.tempo.invalid=\u4e0d\u5408\u7406\u7684\u7bc0\u594f
+composition.tempo.start-to-end=\u5c07\u9019\u500b\u901f\u5ea6\u7528\u65bc\u6574\u9996\u6b4c
+composition.tempo.position-to-end=\u5c07\u9019\u500b\u901f\u5ea6\u7528\u5230\u7d50\u675f
+composition.tempo.position-to-next=\u5c07\u9019\u500b\u901f\u5ea6\u7528\u5728\u4e0b\u4e00\u500b\u901f\u5ea6\u6bb5\u843d(tempo marker)
+composition.properties=\u8cc7\u8a0a
+composition.name=\u540d\u7a31
+composition.artist=\u6f14\u594f\u8005
+composition.album=\u5c08\u8f2f
+composition.author=\u4f5c\u8005
+composition.date=\u65e5\u671f
+composition.copyright=\u7248\u6b0a
+composition.writer=\u5409\u4ed6\u8b5c\u4f5c\u8005
+composition.transcriber=\u6539\u7de8
+composition.comments=\u8a3b\u89e3
+composition.clef=(\u9ad8/\u4f4e)\u97f3\u8b5c\u865f
+composition.clef.treble=\u9ad8\u97f3\u90e8
+composition.clef.bass=\u4f4e\u97f3\u90e8
+composition.clef.tenor=\u6b21\u4e2d\u97f3\u90e8(\u7537\u9ad8\u97f3\u90e8)
+composition.clef.alto=\u4e2d\u97f3\u90e8
+composition.clef.to-the-end=\u5c07\u9019\u500b(\u9ad8/\u4f4e)\u97f3\u8b5c\u865f\u7528\u5230\u7d50\u675f
+composition.clef=\u8b5c\u865f
+composition.clef.treble=\u9ad8\u97f3\u8b5c\u8a18\u865f
+composition.clef.bass=\u4f4e\u97f3\u8b5c\u8a18\u865f
+composition.clef.tenor=\u6b21\u4e2d\u97f3\u8b5c\u8a18\u865f
+composition.clef.alto=\u4e2d\u97f3\u8b5c\u8a18\u865f
+composition.clef.to-the-end=\u5957\u7528\u9019\u500b\u8b5c\u865f\u5230\u7d50\u5c3e
+
+composition.keysignature=\u8abf\u865f
+composition.keysignature.natural=\u9084\u539f
+composition.keysignature.sharp-1=\u53471
+composition.keysignature.sharp-2=\u53472
+composition.keysignature.sharp-3=\u53473
+composition.keysignature.sharp-4=\u53474
+composition.keysignature.sharp-5=\u53475
+composition.keysignature.sharp-6=\u53476
+composition.keysignature.sharp-7=\u53477
+composition.keysignature.flat-1=\u964d1
+composition.keysignature.flat-2=\u964d2
+composition.keysignature.flat-3=\u964d3
+composition.keysignature.flat-4=\u964d4
+composition.keysignature.flat-5=\u964d5
+composition.keysignature.flat-6=\u964d6
+composition.keysignature.flat-7=\u964d7
+composition.keysignature.to-the-end=\u5957\u7528\u9019\u500b\u8abf\u865f\u5230\u7d50\u5c3e
+composition.tripletfeel=\u4e09\u9023\u97f3\u7684\u611f\u53d7
+composition.tripletfeel.none=\u975e\u4e09\u9023\u97f3\u7684\u611f\u53d7
+composition.tripletfeel.eighth=\u4e09\u9023\u97f3 8\u5206\u97f3\u7b26
+composition.tripletfeel.sixteenth=\u4e09\u9023\u97f3 16\u5206\u97f3\u7b26
+composition.tripletfeel.to-the-end=\u5957\u7528\u9019\u500btriplet feel\u5230\u7d50\u5c3e
+
+help=\u5e6b\u52a9
+help.help=\u5e6b\u52a9
+help.doc=\u6587\u4ef6
+help.about=\u95dc\u65bc
+help.about.license=\u7248\u6b0a
+help.about.authors=\u4f5c\u8005
+help.about.description=\u8aaa\u660e
+
+track=\u97f3\u8ecc
+track.number=\u7de8\u865f
+track.name=\u540d\u7a31
+track.color=\u984f\u8272
+track.first=\u7b2c\u4e00\u8ecc
+track.last=\u6700\u672b\u8ecc
+track.previous=\u524d\u4e00\u8ecc
+track.next=\u4e0b\u4e00\u8ecc
+track.add=\u65b0\u589e\u97f3\u8ecc
+track.remove=\u79fb\u9664\u97f3\u8ecc
+track.clone=\u8907\u88fd\u97f3\u8ecc
+track.move-up=\u4e0a\u79fb
+track.move-down=\u4e0b\u79fb
+track.instrument=\u6a02\u5668
+track.tunning=\u8abf\u5f26\u6cd5
+track.instrument.empty=\u5728\u4f60\u7684Midi\u7cfb\u7d71\u88e1\u627e\u4e0d\u5230\u97f3\u6e90\uff0c\u8acb\u5617\u8a66\u91cd\u65b0\u7de8\u8b6fTuxGuitar
+track.properties=\u5c6c\u6027
+track.properties.general=\u4e00\u822c
+track.name.default-percussion-name=\u6253\u64ca\u6a02\u5668
+track.lyrics=\u6b4c\u8a5e
+track.solo=\u7368\u594f
+track.mute=\u975c\u97f3
+
+lyric.editor=\u6b4c\u8a5e\u7de8\u8f2f\u5668
+
+measure=\u5c0f\u7bc0
+measure.first=\u7b2c\u4e00\u5c0f\u7bc0
+measure.last=\u6700\u5f8c\u5c0f\u7bc0
+measure.previous=\u4e0a\u500b\u5c0f\u7bc0
+measure.next=\u4e0b\u500b\u5c0f\u7bc0
+measure.add=\u65b0\u589e\u5c0f\u7bc0
+measure.add.count=\u52a0\u6578\u500b\u5c0f\u7bc0
+measure.add-before-current-position=\u5728\u7576\u524d\u4f4d\u7f6e\u4e4b\u524d\u65b0\u589e\u5c0f\u7bc0
+measure.add-after-current-position=\u5728\u7576\u524d\u4f4d\u7f6e\u4e4b\u5f8c\u65b0\u589e\u5c0f\u7bc0
+measure.add-at-end=\u5728\u7d50\u5c3e\u65b0\u589e\u5c0f\u7bc0
+measure.remove=\u79fb\u9664\u5c0f\u7bc0
+measure.copy=\u8907\u88fd\u5c0f\u7bc0
+measure.paste=\u8cbc\u4e0a\u5c0f\u7bc0
+measure.clean=\u6e05\u9664\u5c0f\u7bc0
+
+duration=\u97f3\u9577
+duration.whole=\u5168\u97f3\u7b26
+duration.half=\u4e8c\u5206\u97f3\u7b26
+duration.quarter=\u56db\u5206\u97f3\u7b26
+duration.eighth=\u516b\u5206\u97f3\u7b26
+duration.sixteenth=\u5341\u516d\u5206\u97f3\u7b26
+duration.thirtysecond=\u4e09\u5341\u4e8c\u5206\u97f3\u7b26
+duration.sixtyfourth=\u516d\u5341\u56db\u5206\u97f3\u7b26
+duration.dotted=\u9644\u9ede
+duration.doubledotted=\u96d9\u9644\u9ede
+duration.division-type=\u4e09\u9023\u97f3
+
+dynamic=\u529b\u5ea6
+dynamic.piano-pianissimo=\u6700\u5f31
+dynamic.pianissimo=\u751a\u5f31
+dynamic.piano=\u5f31
+dynamic.mezzo-piano=\u4e2d\u5f31
+dynamic.mezzo-forte=\u4e2d\u5f37   
+dynamic.forte=\u5f37
+dynamic.fortissimo=\u751a\u5f37
+dynamic.forte-fortissimo=\u6700\u5f37
+
+effects=\u6548\u679c
+effects.vibrato=\u9707\u97f3
+effects.bend=\u63a8\u5f26
+effects.deadnote=\u60b6\u97f3
+effects.slide=\u6ed1\u5f26
+effects.hammer=\u69cc\u5f26/\u52fe\u5f26
+effects.tremolo-bar=\u6416\u687f\u986b\u97f3\u63a7\u5236\u689d
+effects.tremolo-bar-editor=\u6416\u687f\u986b\u97f3\u7de8\u8f2f\u5668
+effects.tremolo-bar.dip=\u4e0b\u6c89\u6416\u687f 
+effects.tremolo-bar.dive=\u8fc5\u901f\u79fb\u52d5\u6416\u687f
+effects.tremolo-bar.release-up=\u653e\u6389\u6416\u687f(Release Up)
+effects.tremolo-bar.release-down=\u653e\u6389\u6416\u687f(Release Down)
+effects.tremolo-bar.inverted-dip=\u6416\u687f\u6416\u4f86\u6416\u53bb(Inverted Dip)
+effects.tremolo-bar.return=\u9084\u539f\u6416\u687f
+effects.ghostnote=\u5e7d\u9748\u97f3
+effects.accentuatednote=\u91cd\u97f3
+effects.heavyaccentuatednote=\u5f37\u91cd\u97f3
+effects.harmonic=\u6cdb\u97f3
+effects.grace=\u88dd\u98fe\u97f3
+effects.grace-editor=\u88dd\u98fe\u97f3\u7de8\u8f2f\u5668
+effects.grace.before-beat=\u62cd\u524d\u88dd\u98fe\u97f3
+effects.grace.on-beat=\u62cd\u9ede\u88dd\u98fe\u97f3
+effects.grace.transition=\u904e\u6e21\u88dd\u98fe\u97f3
+effects.grace.transition-none=\u7121
+effects.grace.transition-bend=\u63a8\u5f26
+effects.grace.transition-slide=\u6ed1\u97f3
+effects.grace.transition-hammer=\u69cc\u97f3
+effects.trill=\u986b\u97f3
+effects.trill-editor=\u986b\u97f3\u7de8\u8f2f\u5668
+effects.tremolo-picking=\u6416\u687f\u986b\u97f3\u64a5\u594f
+effects.tremolo-picking-editor=\u6416\u687f\u986b\u97f3\u64a5\u594f\u7de8\u8f2f\u5668
+effects.palm-mute=\u624b\u638c\u60b6\u97f3
+effects.staccato=\u65b7\u97f3
+effects.tapping=\u9ede\u5f26
+effects.slapping=\u53f3\u624b\u64ca\u5f26
+effects.popping=\u53f3\u624b\u52fe\u5f26
+effects.fade-in=\u6de1\u5165
+effects.harmonic-editor=\u6cdb\u97f3\u7de8\u8f2f\u5668
+effects.harmonic.type-of-harmonic=\u6cdb\u97f3\u985e\u578b
+effects.harmonic.natural=\u81ea\u7136\u6cdb\u97f3
+effects.harmonic.artificial=\u4eba\u5de5\u6cdb\u97f3
+effects.harmonic.artificial.key-offset=\u97f3\u968e\u5c0d\u4f4d\u504f\u79fb\u91cf(Key offset)
+effects.harmonic.tapped=\u62cd\u5f26\u6cdb\u97f3
+effects.harmonic.tapped.left-hand=\u5de6\u624b\u9ede\u5f26
+effects.harmonic.tapped.right-hand=\u53f3\u624b\u9ede\u5f26
+effects.harmonic.pinch=\u624b\u6307\u6cdb\u97f3
+effects.harmonic.semi=\u534a\u6cdb\u97f3
+
+bend.editor=\u63a8\u5f26\u7de8\u8f2f\u5668
+bend.bend=\u63a8\u5f26
+bend.bend-release=\u63a8/\u653e
+bend.bend-release-bend=\u63a8/\u653e/\u63a8
+bend.prebend=\u5148\u63a8
+bend.prebend-release=\u5148\u63a8/\u518d\u653e
+
+transport=\u64ad\u653e\u5668
+transport.start=\u958b\u59cb
+transport.stop=\u505c\u6b62
+transport.pause=\u66ab\u505c
+transport.first=\u6700\u524d\u9762
+transport.last=\u6700\u5f8c\u9762
+transport.previous=\u5f80\u524d
+transport.next=\u5f80\u5f8c
+transport.metronome=\u7bc0\u62cd\u5668
+transport.mode=\u653e\u97f3\u6a21\u5f0f
+transport.mode.simple=\u7c21\u55ae\u6a21\u5f0f
+transport.mode.simple.tempo-percent=\u6578\u5ea6\u7684\u767e\u5206\u6bd4
+transport.mode.simple.loop=\u5faa\u74b0\u64ad\u653e
+transport.mode.trainer=\u7df4\u7fd2\u6a21\u5f0f
+transport.mode.trainer.increment-description=\u6f38\u5feb
+transport.mode.loop-range=\u53cd\u8986\u7684\u6bb5\u843d
+transport.mode.loop-range.from=\u5f9e\u67d0\u5c0f\u7bc0\u64ad\u653e
+transport.mode.loop-range.from-default=\u5f9e\u982d
+transport.mode.loop-range.to=\u64ad\u653e\u5230\u5c0f\u7bc0
+transport.mode.loop-range.to-default=\u64ad\u5230\u7d50\u675f
+transport.set-loop-start=\u8a2d\u5b9a\u53cd\u8986\u64ad\u653e\u7684\u8d77\u9ede
+transport.set-loop-end=\u8a2d\u5b9a\u53cd\u8986\u64ad\u653e\u7684\u7d42\u9ede
+
+
+instruments.volume=\u589e\u76ca
+instrument.channel=\u983b\u9053
+instrument.effect-channel=\u6548\u679c\u983b\u9053
+instrument.volume=\u97f3\u91cf
+instrument.balance=\u5e73\u8861
+instrument.chorus=\u4e00\u8d77\u767c\u8072
+instrument.reverb=\u6df7\u97ff\u6548\u679c
+instrument.phaser=\u79fb\u76f8\u5668 
+instrument.tremolo=\u986b\u97f3/\u9707\u97f3
+instrument.free=\u91cb\u653e
+instrument.link=\u9023\u7d50
+
+
+repeat.open=\u958b\u59cb\u53cd\u8986\u5340\u6bb5
+repeat.close=\u7d50\u675f\u53cd\u8986\u5340\u6bb5
+repeat.alternative=\u4efb\u610f\u7684\u53cd\u8986
+repeat.alternative.editor=\u7de8\u8f2f\u4efb\u610f\u7684\u53cd\u8986
+repetitions=\u53cd\u8907
+repeat.number-of-repetitions=\u53cd\u8907\u6b21\u6578
+
+beat=\u97f3\u7b26
+beat.clean=\u6e05\u9664\u62cd\u9ede
+beat.voice.remove-unused=\u79fb\u9664\u6c92\u7528\u5230\u7684\u8072\u9053
+beat.voice-up=\u4e0a\u9ede(Stems Up)
+beat.voice-down=\u4e0b\u9ede(Stems Down)
+beat.voice-auto=\u81ea\u52d5\u9ede(Auto Stems)
+beat.stroke=\u7528\u529b\u6572(Stroke)
+beat.stroke-up=\u4e0a\u64ca(Upstroke)
+beat.stroke-down=\u4e0b\u64ca(Downstroke)
+beat.move-left=\u628a\u9f13\u9ede\u5411\u5de6\u79fb(Move One Beat Left)
+beat.move-right=\u628a\u9f13\u9ede\u5411\u53f3\u79fb(Move One Beat Right)
+beat.move-custom=\u81ea\u5b9a\u9f13\u9ede\u7684\u79fb\u52d5(Custom Beat Move)
+beat.move-custom.dialog.title=\u81ea\u5b9a\u79fb\u52d5(Custom Move)
+beat.move-custom.dialog.direction-tip=\u79fb\u52d5\u65b9\u5411(Move Direction)
+beat.move-custom.dialog.move-1.tip=\u4e3b\u8981\u79fb\u52d5(Major Move)
+beat.move-custom.dialog.move-2.tip=\u5e73\u79fb(Fine Move)
+beat.move-custom.dialog.direction=\u65b9\u5411
+beat.move-custom.dialog.direction.right=\u5411\u53f3\u79fb
+beat.move-custom.dialog.direction.left=\u5411\u5de6\u79fb
+beat.move-custom.dialog.count=\u6578\u76ee
+beat.move-custom.dialog.duration=\u97f3\u9577
+beat.move-custom.dialog.duration.type=\u4e00\u9ede/\u5169\u9ede
+beat.move-custom.dialog.duration.type.normal=\u6c92\u6709
+beat.move-custom.dialog.duration.division-type=\u5206\u5c0f\u7bc0\u65b9\u5f0f(2/4\uff0c3/4\uff0c4/4)
+beat.move-custom.dialog.duration.division-type.normal=\u4e00\u822c (Tuplet)
+
+note=\u97f3\u7b26
+note.semitone-up=\u5347\u534a\u97f3
+note.semitone-down=\u964d\u534a\u97f3
+note.shift-up=\u4e0a\u79fb
+note.shift-down=\u4e0b\u79fb
+note.tiednote=\u9023\u7d50\u97f3
+note.deadnote=\u60b6\u97f3
+
+insert.chord=\u63d2\u5165\u548c\u5f26
+chord.editor=\u548c\u5f26\u7de8\u8f2f\u5668
+chord=\u548c\u5f26
+chord.name=\u548c\u5f26\u540d\u7a31
+chord.custom.name-empty-error=\u548c\u5f26\u540d\u7a31\u4e0d\u53ef\u7a7a\u767d
+chord.custom.name-exist-error=\u548c\u5f26\u540d\u7a31\u5df2\u5b58\u5728
+chord.bass=\u4f4e\u97f3
+chord.custom=\u81ea\u5b9a\u548c\u5f26
+chord.settings.tip=\u81ea\u5b9a\u7684\u8a2d\u5b9a
+chord.settings.type=\u7a2e\u985e
+chord.settings.type.most-common=\u6700\u4e00\u822c
+chord.settings.type.inversions=\u91cd\u6392(Inversions)
+chord.settings.type.close-voiced=\u9589\u8072\u9053(Close Voiced)
+chord.settings.type.open-voiced=\u958b\u8072\u9053(Open Voiced)
+chord.settings.open-chords=\u958b\u653e\u548c\u5f26(Open Chords)
+chord.settings.chords-to-display=\u79c0\u51fa\u4f86\u7684\u548c\u5f26(Chords to Display)
+chord.settings.search-frets=\u641c\u5c0b\u6307\u677f(Search Frets)
+chord.settings.minimum-fret=\u6700\u5c0f
+chord.settings.maximum-fret=\u6700\u5927
+
+instrument=\u6a02\u5668
+instrument.instrument=\u6a02\u5668
+instrument.percussion-track=\u6253\u64ca\u6a02\u5668\u8ecc
+
+tunning=\u8abf\u5f26\u6cd5
+tunning.offset=\u4f4d\u79fb
+tunning.strings=\u5f26
+tuning.strings.transpose=\u56e0\u79fb\u8abf\u53d7\u5f71\u97ff\u7684\u97f3\u7b26
+tuning.strings.transpose.try-keep-strings=\u8a66\u8457\u4fdd\u7559\u97f3\u7b26\u5728\u540c\u4e00\u6839\u5f26\u4e0a
+tuning.strings.transpose.apply-to-chords=\u79fb\u8abf\u548c\u5f26
+
+
+language=\u8a9e\u8a00
+
+choose-color=\u9078\u64c7\u4e00\u500b\u984f\u8272
+
+
+settings=\u8a2d\u5b9a
+settings.config=\u8a2d\u5b9aTuxGuitar
+settings.config.language=\u8a9e\u8a00
+settings.config.language.choose=\u9078\u64c7\u8a9e\u8a00
+settings.config.styles=\u98a8\u683c
+settings.config.styles.general=\u4e00\u822c\u98a8\u683c
+settings.config.styles.printer=\u5370\u8868\u6a5f\u98a8\u683c
+
+settings.config.styles.font.default=\u9810\u8a2d\u5b57\u578b
+settings.config.styles.font.note=\u97f3\u7b26\u5b57\u578b
+settings.config.styles.font.lyric=\u6b4c\u8a5e\u5b57\u578b
+settings.config.styles.font.text=\u6587\u5b57\u5b57\u578b
+
+settings.config.styles.font.time-signature=\u62cd\u5b50\u8a18\u865f\u5b57\u578b
+settings.config.styles.font.printer-default=\u5217\u5370\u7528\u9810\u8a2d\u5b57\u578b
+settings.config.styles.font.printer-note=\u5217\u5370\u7528\u97f3\u7b26\u5b57\u578b
+settings.config.styles.font.printer-time-signature=\u5217\u5370\u7528\u62cd\u5b50\u8a18\u865f\u5b57\u578b
+settings.config.styles.color.score-note=\u4e94\u7dda\u8b5c\u97f3\u7b26\u984f\u8272
+settings.config.styles.color.tab-note=\u516d\u7dda\u8b5c\u97f3\u7b26\u984f\u8272
+settings.config.styles.color.play-note=\u64ad\u653e\u4e2d\u7684\u97f3\u7b26\u984f\u8272
+settings.config.apply-changes-question=\u60a8\u8981\u73fe\u5728\u5957\u7528\u8b8a\u66f4\u55ce?
+
+settings.config.sound=\u8072\u97f3
+
+settings.config.main=\u4e00\u822c
+settings.config.main.window-title=\u8996\u7a97\u6a19\u984c
+settings.config.main.window-title.help=\u4e0b\u5217\u8b8a\u6578\u6703\u986f\u793a\u5728\u8996\u7a97\u6a19\u984c
+settings.config.main.window-title.var.description.appname=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u9019\u500b\u7a0b\u5f0f\u7684\u540d\u7a31:TuxGuitar
+settings.config.main.window-title.var.description.appversion=\u9019\u500b\u8b8a\u6578\u4ee3\u8868TuxGuitar\u7684\u7248\u672c\u865f
+settings.config.main.window-title.var.description.filename=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u958b\u555f\u6a94\u6848\u7684\u6a94\u540d
+settings.config.main.window-title.var.description.filepath=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u958b\u555f\u6a94\u6848\u7684\u8def\u5f91
+settings.config.main.window-title.var.description.songname=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u540d\u7a31
+settings.config.main.window-title.var.description.songauthor=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u4f5c\u8005
+settings.config.main.window-title.var.description.songalbum=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u5c08\u8f2f
+settings.config.main.window-title.var.description.songartist=\u9019\u500b\u8b8a\u6578\u4ee3\u8868\u66f2\u76ee\u6f14\u594f\u8005
+settings.config.main.options=\u9078\u9805
+settings.config.main.splash-enabled=\u986f\u793a\u555f\u52d5\u6b61\u8fce\u756b\u9762
+settings.config.main.table.auto-size.enabled=\u555f\u7528\u81ea\u52d5\u8868\u683c\u5c3a\u5bf8
+
+settings.config.styles.color.lines=\u6c34\u5e73\u7dda\u984f\u8272
+settings.config.toolbars=\u5de5\u5177\u5217
+settings.config.toolbars.tip=\u81ea\u8a02\u4f60\u7684\u5de5\u5177\u5217
+settings.config.toolbars.list=\u53ef\u7528\u7684\u5de5\u5177\u5217
+settings.config.toolbars.move-up=\u4e0a\u79fb
+settings.config.toolbars.move-down=\u4e0b\u79fb
+settings.config.skin=\u76ae\u819a(Skins)
+settings.config.skin.choose=\u9078\u4f60\u7684\u76ae\u819a
+settings.keybindings=\u71b1\u9375\u8a2d\u5b9a
+key-bindings-editor=\u71b1\u9375\u7de8\u8f2f\u5668
+
+key-bindings-editor-action-select=\u9078\u64c7\u52d5\u4f5c
+key-bindings-editor-action-column=\u52d5\u4f5c
+key-bindings-editor-shortcut-column=\u6309\u9375
+key-bindings-editor-push-a-key=\u8acb\u6309\u9375
+key-bindings-editor-save-question=\u6709\u672a\u5132\u5b58\u7684\u8b8a\u66f4\uff0c\u662f\u5426\u5132\u5b58\uff1f
+
+key-bindings-editor-override=\u9019\u500b\u71b1\u9375\u5df2\u88ab\u4f7f\u7528\uff0c\u78ba\u5b9a\u8981\u4f7f\u7528\uff1f
+
+print.print=\u5217\u5370
+print.dialog=\u5217\u5370
+print.service=\u670d\u52d9
+print.service.name=\u540d\u7a31
+print.service.status=\u72c0\u614b
+print.service.type=\u985e\u578b
+print.service.info=\u8cc7\u8a0a
+print.range=\u7bc4\u570d
+print.range.all-pages=\u5168\u90e8
+print.range.pages=\u9801\u9762
+print.range.pages-to=\u5230
+print.copies=\u8907\u5370
+print.copies-number=\u4efd\u6578
+print.print-to-file=\u5217\u5370\u5230\u6a94\u6848
+print.file-chooser=\u9078\u64c7
+print-header.default-song-name=\u672a\u547d\u540d
+print-header.default-song-author=\u4e0d\u8a73
+print.preview=\u9810\u89bd\u5217\u5370
+print.preview.page-of=\u4e4b
+
+
+
+marker=\u6a19\u8a18
+marker.add=\u52a0\u5165\u6a19\u8a18
+marker.list=\u6a19\u8a18\u5217\u8868
+marker.first=\u81f3\u9996\u6a19\u8a18
+marker.last=\u81f3\u672b\u6a19\u8a18
+marker.next=\u4e0b\u4e00\u500b\u6a19\u8a18
+marker.previous=\u524d\u4e00\u500b\u6a19\u8a18
+
+export.tablature-enabled=\u986f\u793a\u516d\u7dda\u8b5c
+export.score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c
+export.chord-name-enabled=\u986f\u793a\u548c\u7d43\u540d\u7a31
+export.chord-diagram-enabled=\u986f\u793a\u548c\u7d43\u6307\u5716
+export.black-and-white=\u9ed1\u548c\u767d\u7684\u6a21\u5f0f
+
+scale=\u97f3\u968e
+scale.list=\u97f3\u968e\u5217\u8868
+
+text.insert=\u63d2\u5165\u6587\u5b57
+text.editor=\u6587\u5b57\u7de8\u8f2f\u5668
+text.text=\u6587\u5b57
+
+tools=\u5de5\u5177
+tools.scale=\u7434\u8b5c\u7684\u6e05\u55ae
+tools.browser=\u700f\u89bd
+tools.plugins=\u5916\u639b
+tools.shortcuts=\u6377\u5f91
+tools.settings=\u8a2d\u5b9a
+
+tools.transpose=\u79fb\u8abf
+tools.transpose.semitones=\u79fb\u8abf \u534a\u97f3
+tools.transpose.apply-to-track=\u6240\u6709\u7684\u5c0f\u7bc0\u90fd\u79fb\u8abf
+tools.transpose.apply-to-measure=\u53ea\u9019\u500b\u5c0f\u7bc0\u79fb\u8abf
+tools.transpose.apply-to-all-tracks=\u7528\u5728\u6240\u6709\u7684\u97f3\u8ecc
+tools.transpose.try-keep-strings=\u76e1\u53ef\u80fd\u8a66\u8457\u4fdd\u7559\u97f3\u7b26\u5728\u540c\u4e00\u6839\u5f26\u4e0a
+tools.transpose.apply-to-chords=\u5c07\u548c\u5f26\u79fb\u8abf
+
+browser.dialog=\u700f\u89bd
+browser.menu.file=\u6a94\u6848
+browser.open=\u958b\u555f
+browser.exit=\u96e2\u958b
+browser.menu.collection=\u5c0f\u66f2\u96c6
+browser.menu.go=Go
+browser.collection.select=\u9078\u66f2\u96c6
+browser.collection.open=\u958b\u555f
+browser.collection.remove=\u79fb\u9664
+browser.collection.close=\u95dc\u9589
+browser.collection.new=\u65b0\u589e
+browser.go-root=Home
+browser.go-back=\u56de\u4f86
+browser.refresh=\u66f4\u65b0
+browser.factory.fs.name=\u6a94\u6848\u7e3d\u7ba1
+browser.collection.fs.name=\u6a94\u540d
+browser.collection.fs.path=\u76ee\u9304
+browser.collection.fs.editor-title=\u6a94\u6848\u7e3d\u7ba1\u7684\u66f2\u96c6
+browser.collection.fs.editor-tip=\u9078\u64c7\u4f60\u7684\u66f2\u96c6\u7684\u76ee\u9304
+browser.collection.fs.invalid-path=\u8acb\u9078\u4e00\u500b\u6709\u6548\u7684\u76ee\u9304
+
+midi.port=MIDI Port
+midi.sequencer=MIDI Sequencer
+
+plugin.unknown-value=\u4e0d\u5b58\u5728\u7684
+plugin.column.name=\u5916\u639b\u540d
+plugin.column.enabled=\u555f\u7528\u7684
+
+
+#########################
+###  Tool Bar Items   ###
+#########################
+file.items=\u6a94\u6848
+edit.items=\u7de8\u8f2f
+property.items=\u5c6c\u6027
+track.items=\u97f3\u8ecc
+duration.items=\u97f3\u9577
+beat.items=\u97f3\u7b26
+composition.items=\u66f2\u76ee
+repeat.items=\u53cd\u8986
+transport.items=\u64ad\u653e\u5668
+marker.items=\u6a19\u8a18
+insert.items=\u63d2\u5165
+layout.items=\u7248\u9762
+view.items=\u6aa2\u8996
+effect.items=\u6548\u679c
+dynamic.items=\u529b\u5ea6
+
+#########################
+###Key Binding Actions###
+#########################
+action.file.new=\u958b\u65b0\u6a94\u6848
+action.file.open=\u958b\u555f\u820a\u6a94
+action.file.open-url=Open URL
+action.file.save=\u5132\u5b58\u6a94\u6848
+action.file.save-as=\u53e6\u5b58\u65b0\u6a94
+action.file.print=\u5217\u5370
+action.file.print-preview=\u9810\u89bd\u5217\u5370
+action.file.exit=\u96e2\u958b\u4f01\u9d5d\u5409\u4ed6(TuxGuitar)
+action.edit.undo=\u4e0a\u4e00\u6b65
+action.edit.redo=\u4e0b\u4e00\u6b65
+action.edit.voice-1=\u9078\u8072\u9053 1
+action.edit.voice-2=\u9078\u8072\u9053 2
+action.composition.change-time-signature=\u8b8a\u66f4\u62cd\u5b50\u8a18\u865f
+action.composition.change-tempo=\u8b8a\u66f4\u7bc0\u62cd
+action.composition.change-info=\u8b8a\u66f4\u6b4c\u66f2\u8a0a\u606f
+action.composition.change-clef=\u8b8a\u66f4\u8b5c\u865f
+action.composition.change-key-signature=\u8b8a\u66f4\u8abf\u865f
+action.composition.change-triplet-feel=\u6539\u8b8a\u4e09\u9023\u97f3\u7684\u611f\u89ba
+
+action.view.layout-set-page=\u7e31\u5411\u5ef6\u4f38\u7248\u9762
+action.view.layout-set-linear=\u6a6b\u5411\u5ef6\u4f38\u7248\u9762
+action.view.layout-set-multitrack=\u591a\u8ecc\u7248\u9762
+action.view.layout-set-score-enabled=\u986f\u793a\u4e94\u7dda\u8b5c
+action.view.layout-set-tablature-enabled=\u986f\u793a\u5409\u4ed6\u8b5c
+action.view.layout-set-compact=\u986f\u793a\u7cbe\u7c21\u6a21\u5f0f
+action.view.layout-set-chord-diagram-enabled=\u555f\u7528\u548c\u5f26\u6307\u5716
+action.view.layout-set-chord-name-enabled=\u555f\u7528\u548c\u5f26\u540d\u7a31
+
+action.view.show-fretboard=\u986f\u793a\u6307\u677f
+action.view.show-piano=\u986f\u793a\u7434\u9375
+action.view.show-matrix=\u986f\u793a\u77e9\u9663
+action.view.show-mixer=\u986f\u793a\u6df7\u97f3\u5668
+action.view.show-transport=\u986f\u793a\u6642\u9593\u8ef8
+
+action.track.add=\u65b0\u589e\u97f3\u8ecc
+action.track.remove=\u79fb\u9664\u97f3\u8ecc
+action.track.clone=\u8907\u88fd\u97f3\u8ecc
+action.track.go-first=\u5230\u7b2c\u4e00\u8ecc
+action.track.go-last=\u5230\u6700\u672b\u8ecc
+action.track.go-next=\u5230\u4e0b\u4e00\u8ecc
+action.track.go-previous=\u5230\u4e0a\u4e00\u8ecc
+action.track.lyrics=\u7de8\u8f2f\u97f3\u8ecc\u6b4c\u8a5e
+action.track.properties=\u8b8a\u66f4\u97f3\u8ecc\u5c6c\u6027
+action.track.move-down=\u4e0b\u79fb\u97f3\u8ecc
+action.track.move-up=\u4e0a\u79fb\u97f3\u8ecc
+
+action.measure.add=\u589e\u52a0\u5c0f\u7bc0
+action.measure.remove=\u79fb\u9664\u5c0f\u7bc0
+action.measure.copy=\u8907\u88fd\u5c0f\u7bc0
+action.measure.paste=\u8cbc\u4e0a\u5c0f\u7bc0
+action.measure.clean=\u6e05\u9664\u5c0f\u7bc0
+action.measure.go-first=\u5230\u7b2c\u4e00\u5c0f\u7bc0
+action.measure.go-last=\u5230\u6700\u5f8c\u5c0f\u7bc0
+action.measure.go-next=\u5230\u4e0b\u4e00\u5c0f\u7bc0
+action.measure.go-previous=\u5230\u4e0a\u4e00\u5c0f\u7bc0
+
+action.beat.general.remove-unused-voice=\u79fb\u9664\u6c92\u7528\u5230\u7684\u8072\u9053
+action.beat.general.voice-up=\u8a2d\u5b9a\u4e0a\u9ede(Set Stems Up)
+action.beat.general.voice-down=\u8a2d\u5b9a\u4e0b\u9ede(Set Stems Down)
+action.beat.general.voice-auto=\u8a2d\u5b9a\u81ea\u52d5\u9ede(Set Auto Stems)
+action.beat.general.set-stroke-up=\u8a2d\u5b9a\u4e0a\u64ca(Set Upstroke)
+action.beat.general.set-stroke-down=\u8a2d\u5b9a\u4e0b\u64ca(Set Downstroke)
+action.beat.general.move-left=\u5de6\u79fb\u4e00\u62cd(Move One Beat Left)
+action.beat.general.move-right=\u53f3\u79fb\u4e00\u62cd(Move One Beat Right)
+action.beat.general.move-custom=\u81ea\u8a02\u79fb\u62cd(Custom Beat Move)
+
+action.note.general.clean-beat=\u6e05\u9664\u62cd\u9ede
+action.note.general.decrement-semitone=\u6e1b\u5c11\u534a\u97f3
+action.note.general.increment-semitone=\u589e\u52a0\u534a\u97f3
+action.note.general.shift-down=\u4e0b\u79fb
+action.note.general.shift-up=\u4e0a\u79fb
+action.note.general.tied=\u589e\u52a0/\u79fb\u9664 \u9023\u7d50\u97f3
+
+action.note.duration.set-whole=\u8a2d\u5b9a\u4e00\u62cd(Set Whole Duration)
+action.note.duration.set-half=\u8a2d\u5b9a\u534a\u62cd(Set Half Duration)
+action.note.duration.set-quarter=\u8a2d\u5b9a\u56db\u5206\u4e4b\u4e00\u62cd(Set Quarter Duration)
+action.note.duration.set-eighth=\u8a2d\u5b9a\u516b\u5206\u4e4b\u4e00\u62cd
+action.note.duration.set-sixteenth=\u8a2d\u5b9a\u5341\u516d\u5206\u4e4b\u4e00\u62cd
+action.note.duration.set-thirty-second=\u8a2d\u5b9a\u4e09\u5341\u4e8c\u5206\u4e4b\u4e00\u62cd
+action.note.duration.set-sixty-fourth=\u8a2d\u5b9a\u516d\u5341\u56db\u5206\u4e4b\u4e00\u62cd
+action.note.duration.change-dotted=\u589e\u52a0/\u79fb\u9664 \u9644\u9ede
+action.note.duration.change-double-dotted=\u589e\u52a0/\u79fb\u9664 \u96d9\u9644\u9ede
+action.note.duration.change-division-type=\u589e\u52a0/\u79fb\u9664 tupleto
+action.note.duration.decrement-duration=\u6e1b\u5c11\u62cd\u9577(Decrement Duration)
+action.note.duration.increment-duration=\u589e\u52a0\u62cd\u9577(Increment Duration)
+
+action.note.effect.change-vibrato=\u589e\u52a0/\u79fb\u9664 \u9707\u97f3
+action.note.effect.change-bend=\u589e\u52a0/\u79fb\u9664 \u63a8\u5f26
+action.note.effect.change-slide=\u589e\u52a0/\u79fb\u9664 \u6ed1\u5f26
+action.note.effect.change-hammer=\u589e\u52a0/\u79fb\u9664 \u5782/\u52fe\u5f26
+action.note.effect.change-accentuated=\u589e\u52a0/\u79fb\u9664 \u91cd\u97f3
+action.note.effect.change-dead=\u589e\u52a0/\u79fb\u9664 \u60b6\u97f3
+action.note.effect.change-fade-in=\u589e\u52a0/\u79fb\u9664 \u6de1\u5165
+action.note.effect.change-ghost=\u589e\u52a0/\u79fb\u9664 \u5e7d\u9748\u97f3
+action.note.effect.change-grace=\u589e\u52a0/\u79fb\u9664 \u88dd\u98fe\u97f3
+action.note.effect.change-harmonic=\u589e\u52a0/\u79fb\u9664 \u6cdb\u97f3
+action.note.effect.change-heavy-accentuated=\u589e\u52a0/\u79fb\u9664 \u5f37\u91cd\u97f3
+action.note.effect.change-palm-mute=\u589e\u52a0/\u79fb\u9664 \u624b\u638c\u60b6\u97f3
+action.note.effect.change-popping=\u589e\u52a0/\u79fb\u9664 \u53f3\u624b\u52fe\u5f26
+action.note.effect.change-slapping=\u589e\u52a0/\u79fb\u9664 \u53f3\u624b\u64ca\u5f26
+action.note.effect.change-staccato=\u589e\u52a0/\u79fb\u9664 \u65b7\u97f3
+action.note.effect.change-tapping=\u589e\u52a0/\u79fb\u9664 \u9ede\u5f26
+action.note.effect.change-tremolo-bar=\u589e\u52a0/\u79fb\u9664 \u6416\u687f\u986b\u97f3\u63a7\u5236\u689d
+action.note.effect.change-tremolo-picking=\u589e\u52a0/\u79fb\u9664 \u6416\u687f\u986b\u97f3\u64a5\u594f
+action.note.effect.change-trill=\u589e\u52a0/\u79fb\u9664 \u986b\u97f3
+
+action.insert.open-repeat=\u958b\u59cb\u53cd\u8986\u5340\u6bb5
+action.insert.close-repeat=\u7d50\u675f\u53cd\u8986\u5340\u6bb5
+action.insert.repeat-alternative=\u4efb\u610f\u53cd\u8986
+action.insert.chord=\u63d2\u5165\u5408\u5f26
+action.insert.text=\u63d2\u5165\u6587\u5b57
+
+action.marker.add=\u52a0\u4e0a\u4e00\u500b\u6a19\u8a18
+action.marker.go-next=\u5230\u4e0b\u4e00\u500b\u6a19\u8a18
+action.marker.go-previous=\u5230\u4e0a\u4e00\u500b\u6a19\u8a18
+
+action.transport.play=\u64ad\u653e
+action.transport.stop=\u505c\u6b62
+action.transport.mode=\u64ad\u653e\u6a21\u5f0f
+action.transport.metronome=\u7bc0\u62cd\u5668
+action.transport.set-loop-start=\u8a2d\u5b9a\u91cd\u64ad\u7684\u8d77\u9ede
+action.transport.set-loop-end=\u8a2d\u5b9a\u91cd\u64ad\u7684\u7d42\u9ede
+
+action.tools.browser=\u700f\u89bd
+action.tools.transpose=\u79fb\u8abf\u97f3\u7b26
+action.settings.configure=\u8a2d\u5b9a
+action.help.doc=\u5e6b\u52a9
+
diff --git a/TuxGuitar/share/lang/toutf.pl b/TuxGuitar/share/lang/toutf.pl
new file mode 100755
index 0000000..490a638
--- /dev/null
+++ b/TuxGuitar/share/lang/toutf.pl
@@ -0,0 +1,35 @@
+#!/usr/bin/perl
+
+use strict;
+
+if ($#ARGV < 0){
+	print "** Please, specify a file to convert\n\n";
+	exit 1;
+}
+
+my $file = $ARGV[0];
+
+open(IN, "<:utf8", $file);
+my @data = <IN>;
+close(IN);
+
+my ($i)=0;
+my $line;
+
+foreach (@data){
+	chop;
+
+	my @chars = unpack ("U*", $_);
+	my $line = "";
+
+	foreach my $c (@chars){
+		if ($c > 128){
+			$line .= "\\u".sprintf("%04x",$c);
+		}
+		else {
+			$line .= pack ("U*", $c);
+		}
+	}
+
+	print "$line\n";
+}
diff --git a/TuxGuitar/share/skins/Oxygen/1.png b/TuxGuitar/share/skins/Oxygen/1.png
new file mode 100644
index 0000000..f371f7b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/16.png b/TuxGuitar/share/skins/Oxygen/16.png
new file mode 100644
index 0000000..05473ef
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/16.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/2.png b/TuxGuitar/share/skins/Oxygen/2.png
new file mode 100644
index 0000000..b04bb5d
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/32.png b/TuxGuitar/share/skins/Oxygen/32.png
new file mode 100644
index 0000000..cbb56ac
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/32.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/4.png b/TuxGuitar/share/skins/Oxygen/4.png
new file mode 100644
index 0000000..06dfd1a
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/4.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/64.png b/TuxGuitar/share/skins/Oxygen/64.png
new file mode 100644
index 0000000..78c7a38
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/64.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/8.png b/TuxGuitar/share/skins/Oxygen/8.png
new file mode 100644
index 0000000..ef81b9a
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/8.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/README b/TuxGuitar/share/skins/Oxygen/README
new file mode 100644
index 0000000..9a63314
--- /dev/null
+++ b/TuxGuitar/share/skins/Oxygen/README
@@ -0,0 +1,9 @@
+This theme as been made using the default TuxGuitar theme "Lavender"
+and using icons from the Oxygen Icons project.
+
+http://www.oxygen-icons.org/
+
+Please respect the Oxygen Icons licenses:
+
+http://creativecommons.org/licenses/by-sa/3.0/
+http://www.gnu.org/licenses/lgpl.html
\ No newline at end of file
diff --git a/TuxGuitar/share/skins/Oxygen/about_authors.png b/TuxGuitar/share/skins/Oxygen/about_authors.png
new file mode 100644
index 0000000..a6c1740
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/about_authors.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/about_description.png b/TuxGuitar/share/skins/Oxygen/about_description.png
new file mode 100644
index 0000000..0936ccd
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/about_description.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/about_license.png b/TuxGuitar/share/skins/Oxygen/about_license.png
new file mode 100644
index 0000000..e2fca98
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/about_license.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/browser_back.png b/TuxGuitar/share/skins/Oxygen/browser_back.png
new file mode 100644
index 0000000..4459024
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/browser_back.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/browser_file.png b/TuxGuitar/share/skins/Oxygen/browser_file.png
new file mode 100644
index 0000000..73a85ae
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/browser_file.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/browser_folder.png b/TuxGuitar/share/skins/Oxygen/browser_folder.png
new file mode 100644
index 0000000..9c46c79
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/browser_folder.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/browser_new.png b/TuxGuitar/share/skins/Oxygen/browser_new.png
new file mode 100644
index 0000000..fbb4ce0
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/browser_new.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/browser_refresh.png b/TuxGuitar/share/skins/Oxygen/browser_refresh.png
new file mode 100644
index 0000000..45b5535
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/browser_refresh.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/browser_root.png b/TuxGuitar/share/skins/Oxygen/browser_root.png
new file mode 100644
index 0000000..aab6a88
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/browser_root.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/chord.png b/TuxGuitar/share/skins/Oxygen/chord.png
new file mode 100644
index 0000000..11019a7
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/chord.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/closerepeat.png b/TuxGuitar/share/skins/Oxygen/closerepeat.png
new file mode 100644
index 0000000..223ce00
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/closerepeat.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/division-type.png b/TuxGuitar/share/skins/Oxygen/division-type.png
new file mode 100644
index 0000000..aa18421
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/division-type.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/dotted.png b/TuxGuitar/share/skins/Oxygen/dotted.png
new file mode 100644
index 0000000..f5b0ddd
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/dotted.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/doubledotted.png b/TuxGuitar/share/skins/Oxygen/doubledotted.png
new file mode 100644
index 0000000..1ce6450
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/doubledotted.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/dynamic_f.png b/TuxGuitar/share/skins/Oxygen/dynamic_f.png
new file mode 100644
index 0000000..a547941
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/dynamic_f.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/dynamic_ff.png b/TuxGuitar/share/skins/Oxygen/dynamic_ff.png
new file mode 100644
index 0000000..0a22c7f
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/dynamic_ff.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/dynamic_fff.png b/TuxGuitar/share/skins/Oxygen/dynamic_fff.png
new file mode 100644
index 0000000..b265522
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/dynamic_fff.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/dynamic_mf.png b/TuxGuitar/share/skins/Oxygen/dynamic_mf.png
new file mode 100644
index 0000000..a03c125
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/dynamic_mf.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/dynamic_mp.png b/TuxGuitar/share/skins/Oxygen/dynamic_mp.png
new file mode 100644
index 0000000..af9c9f2
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/dynamic_mp.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/dynamic_p.png b/TuxGuitar/share/skins/Oxygen/dynamic_p.png
new file mode 100644
index 0000000..029512d
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/dynamic_p.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/dynamic_pp.png b/TuxGuitar/share/skins/Oxygen/dynamic_pp.png
new file mode 100644
index 0000000..c2a7d59
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/dynamic_pp.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/dynamic_ppp.png b/TuxGuitar/share/skins/Oxygen/dynamic_ppp.png
new file mode 100644
index 0000000..e335a53
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/dynamic_ppp.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/edit_mode_edition.png b/TuxGuitar/share/skins/Oxygen/edit_mode_edition.png
new file mode 100644
index 0000000..334bb11
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/edit_mode_edition.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/edit_mode_edition_no_natural.png b/TuxGuitar/share/skins/Oxygen/edit_mode_edition_no_natural.png
new file mode 100644
index 0000000..c04448e
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/edit_mode_edition_no_natural.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/edit_mode_selection.png b/TuxGuitar/share/skins/Oxygen/edit_mode_selection.png
new file mode 100644
index 0000000..ca18245
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/edit_mode_selection.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/edit_redo.png b/TuxGuitar/share/skins/Oxygen/edit_redo.png
new file mode 100644
index 0000000..45f0450
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/edit_redo.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/edit_undo.png b/TuxGuitar/share/skins/Oxygen/edit_undo.png
new file mode 100644
index 0000000..57abbe1
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/edit_undo.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/edit_voice_1.png b/TuxGuitar/share/skins/Oxygen/edit_voice_1.png
new file mode 100644
index 0000000..3338d3c
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/edit_voice_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/edit_voice_2.png b/TuxGuitar/share/skins/Oxygen/edit_voice_2.png
new file mode 100644
index 0000000..f54d928
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/edit_voice_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_accentuated.png b/TuxGuitar/share/skins/Oxygen/effect_accentuated.png
new file mode 100644
index 0000000..8740222
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_accentuated.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_bend.png b/TuxGuitar/share/skins/Oxygen/effect_bend.png
new file mode 100644
index 0000000..ed05356
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_bend.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_dead.png b/TuxGuitar/share/skins/Oxygen/effect_dead.png
new file mode 100644
index 0000000..5c3e07c
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_dead.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_fade_in.png b/TuxGuitar/share/skins/Oxygen/effect_fade_in.png
new file mode 100644
index 0000000..ebf9fd0
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_fade_in.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_ghost.png b/TuxGuitar/share/skins/Oxygen/effect_ghost.png
new file mode 100644
index 0000000..3a9eaf8
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_ghost.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_grace.png b/TuxGuitar/share/skins/Oxygen/effect_grace.png
new file mode 100644
index 0000000..29d5695
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_grace.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_hammer.png b/TuxGuitar/share/skins/Oxygen/effect_hammer.png
new file mode 100644
index 0000000..d3eca5f
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_hammer.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_harmonic.png b/TuxGuitar/share/skins/Oxygen/effect_harmonic.png
new file mode 100644
index 0000000..6fe19a9
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_harmonic.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_heavy_accentuated.png b/TuxGuitar/share/skins/Oxygen/effect_heavy_accentuated.png
new file mode 100644
index 0000000..75ed1ef
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_heavy_accentuated.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_palm_mute.png b/TuxGuitar/share/skins/Oxygen/effect_palm_mute.png
new file mode 100644
index 0000000..d4ef755
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_palm_mute.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_popping.png b/TuxGuitar/share/skins/Oxygen/effect_popping.png
new file mode 100644
index 0000000..4964783
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_popping.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_slapping.png b/TuxGuitar/share/skins/Oxygen/effect_slapping.png
new file mode 100644
index 0000000..e49fd96
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_slapping.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_slide.png b/TuxGuitar/share/skins/Oxygen/effect_slide.png
new file mode 100644
index 0000000..ea63a1b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_slide.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_staccato.png b/TuxGuitar/share/skins/Oxygen/effect_staccato.png
new file mode 100644
index 0000000..524dbbe
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_staccato.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_tapping.png b/TuxGuitar/share/skins/Oxygen/effect_tapping.png
new file mode 100644
index 0000000..dec8537
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_tapping.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_tremolo_bar.png b/TuxGuitar/share/skins/Oxygen/effect_tremolo_bar.png
new file mode 100644
index 0000000..f3a3939
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_tremolo_bar.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_tremolo_picking.png b/TuxGuitar/share/skins/Oxygen/effect_tremolo_picking.png
new file mode 100644
index 0000000..b72f5da
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_tremolo_picking.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_trill.png b/TuxGuitar/share/skins/Oxygen/effect_trill.png
new file mode 100644
index 0000000..1ccc4d0
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_trill.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/effect_vibrato.png b/TuxGuitar/share/skins/Oxygen/effect_vibrato.png
new file mode 100644
index 0000000..19f4860
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/effect_vibrato.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/firstfret.png b/TuxGuitar/share/skins/Oxygen/firstfret.png
new file mode 100644
index 0000000..b2ceba8
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/firstfret.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/fret.png b/TuxGuitar/share/skins/Oxygen/fret.png
new file mode 100644
index 0000000..c575c7a
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/fret.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/fretboard.png b/TuxGuitar/share/skins/Oxygen/fretboard.png
new file mode 100644
index 0000000..8335367
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/fretboard.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/grace.png b/TuxGuitar/share/skins/Oxygen/grace.png
new file mode 100644
index 0000000..29d5695
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/grace.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/icon-16x16.png b/TuxGuitar/share/skins/Oxygen/icon-16x16.png
new file mode 100644
index 0000000..c617291
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/icon-16x16.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/icon-24x24.png b/TuxGuitar/share/skins/Oxygen/icon-24x24.png
new file mode 100644
index 0000000..30e43cc
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/icon-24x24.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/icon-32x32.png b/TuxGuitar/share/skins/Oxygen/icon-32x32.png
new file mode 100644
index 0000000..cebffe0
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/icon-32x32.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/icon-48x48.png b/TuxGuitar/share/skins/Oxygen/icon-48x48.png
new file mode 100644
index 0000000..c6a172b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/icon-48x48.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/icon-64x64.png b/TuxGuitar/share/skins/Oxygen/icon-64x64.png
new file mode 100644
index 0000000..8341806
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/icon-64x64.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/icon-96x96.png b/TuxGuitar/share/skins/Oxygen/icon-96x96.png
new file mode 100644
index 0000000..296c49b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/icon-96x96.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/icon.icns b/TuxGuitar/share/skins/Oxygen/icon.icns
new file mode 100644
index 0000000..d05a1ce
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/icon.icns differ
diff --git a/TuxGuitar/share/skins/Oxygen/icon.ico b/TuxGuitar/share/skins/Oxygen/icon.ico
new file mode 100644
index 0000000..f43d9ca
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/icon.ico differ
diff --git a/TuxGuitar/share/skins/Oxygen/icon.png b/TuxGuitar/share/skins/Oxygen/icon.png
new file mode 100644
index 0000000..296c49b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/icon.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/layout_compact.png b/TuxGuitar/share/skins/Oxygen/layout_compact.png
new file mode 100644
index 0000000..e29a92b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/layout_compact.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/layout_linear.png b/TuxGuitar/share/skins/Oxygen/layout_linear.png
new file mode 100644
index 0000000..89fcd60
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/layout_linear.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/layout_multitrack.png b/TuxGuitar/share/skins/Oxygen/layout_multitrack.png
new file mode 100644
index 0000000..204ce3a
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/layout_multitrack.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/layout_page.png b/TuxGuitar/share/skins/Oxygen/layout_page.png
new file mode 100644
index 0000000..387c8de
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/layout_page.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/layout_score.png b/TuxGuitar/share/skins/Oxygen/layout_score.png
new file mode 100644
index 0000000..19a5746
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/layout_score.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/logo.png b/TuxGuitar/share/skins/Oxygen/logo.png
new file mode 100644
index 0000000..f52b54b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/logo.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/marker_add.png b/TuxGuitar/share/skins/Oxygen/marker_add.png
new file mode 100644
index 0000000..62436bd
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/marker_add.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/marker_first.png b/TuxGuitar/share/skins/Oxygen/marker_first.png
new file mode 100644
index 0000000..cb66e6d
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/marker_first.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/marker_last.png b/TuxGuitar/share/skins/Oxygen/marker_last.png
new file mode 100644
index 0000000..3a6557b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/marker_last.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/marker_list.png b/TuxGuitar/share/skins/Oxygen/marker_list.png
new file mode 100644
index 0000000..b37b97a
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/marker_list.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/marker_next.png b/TuxGuitar/share/skins/Oxygen/marker_next.png
new file mode 100644
index 0000000..e8bb6b2
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/marker_next.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/marker_previous.png b/TuxGuitar/share/skins/Oxygen/marker_previous.png
new file mode 100644
index 0000000..646ead3
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/marker_previous.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/marker_remove.png b/TuxGuitar/share/skins/Oxygen/marker_remove.png
new file mode 100644
index 0000000..a661a31
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/marker_remove.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/mixer.png b/TuxGuitar/share/skins/Oxygen/mixer.png
new file mode 100644
index 0000000..99d35c3
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/mixer.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/new.png b/TuxGuitar/share/skins/Oxygen/new.png
new file mode 100644
index 0000000..a7f3411
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/new.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/open.png b/TuxGuitar/share/skins/Oxygen/open.png
new file mode 100644
index 0000000..317a357
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/open.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/openrepeat.png b/TuxGuitar/share/skins/Oxygen/openrepeat.png
new file mode 100644
index 0000000..1f36f92
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/openrepeat.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/option_language.png b/TuxGuitar/share/skins/Oxygen/option_language.png
new file mode 100644
index 0000000..5c5246e
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/option_language.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/option_skin.png b/TuxGuitar/share/skins/Oxygen/option_skin.png
new file mode 100644
index 0000000..eddffb6
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/option_skin.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/option_sound.png b/TuxGuitar/share/skins/Oxygen/option_sound.png
new file mode 100644
index 0000000..5bc5c23
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/option_sound.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/option_style.png b/TuxGuitar/share/skins/Oxygen/option_style.png
new file mode 100644
index 0000000..5abdf6c
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/option_style.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/option_toolbars.png b/TuxGuitar/share/skins/Oxygen/option_toolbars.png
new file mode 100644
index 0000000..f072ad0
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/option_toolbars.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/option_view.png b/TuxGuitar/share/skins/Oxygen/option_view.png
new file mode 100644
index 0000000..0936ccd
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/option_view.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/print-preview.png b/TuxGuitar/share/skins/Oxygen/print-preview.png
new file mode 100644
index 0000000..03a3edf
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/print-preview.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/print.png b/TuxGuitar/share/skins/Oxygen/print.png
new file mode 100644
index 0000000..8eb1c67
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/print.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/repeat_alternative.png b/TuxGuitar/share/skins/Oxygen/repeat_alternative.png
new file mode 100644
index 0000000..5611647
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/repeat_alternative.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/save-as.png b/TuxGuitar/share/skins/Oxygen/save-as.png
new file mode 100644
index 0000000..0ecb79e
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/save-as.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/save.png b/TuxGuitar/share/skins/Oxygen/save.png
new file mode 100644
index 0000000..a81e70d
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/save.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/settings.png b/TuxGuitar/share/skins/Oxygen/settings.png
new file mode 100644
index 0000000..45b8fae
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/settings.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/skin-preview.png b/TuxGuitar/share/skins/Oxygen/skin-preview.png
new file mode 100644
index 0000000..c498778
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/skin-preview.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/skin.properties b/TuxGuitar/share/skins/Oxygen/skin.properties
new file mode 100644
index 0000000..2557cb1
--- /dev/null
+++ b/TuxGuitar/share/skins/Oxygen/skin.properties
@@ -0,0 +1,6 @@
+name=Oxygen
+author=The Chakra Project 
+description=http://www.oxygen-icons.org
+date=2011-8-19
+version=0.1
+preview=skin-preview.png
\ No newline at end of file
diff --git a/TuxGuitar/share/skins/Oxygen/song_properties.png b/TuxGuitar/share/skins/Oxygen/song_properties.png
new file mode 100644
index 0000000..8f76c51
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/song_properties.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/splash.png b/TuxGuitar/share/skins/Oxygen/splash.png
new file mode 100644
index 0000000..87f71e9
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/splash.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/tempo.png b/TuxGuitar/share/skins/Oxygen/tempo.png
new file mode 100644
index 0000000..ea62c52
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/tempo.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/tempoicon.png b/TuxGuitar/share/skins/Oxygen/tempoicon.png
new file mode 100644
index 0000000..1c6cb4e
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/tempoicon.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/tgdoc.icns b/TuxGuitar/share/skins/Oxygen/tgdoc.icns
new file mode 100644
index 0000000..2060a6e
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/tgdoc.icns differ
diff --git a/TuxGuitar/share/skins/Oxygen/tiednote.png b/TuxGuitar/share/skins/Oxygen/tiednote.png
new file mode 100644
index 0000000..d87c292
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/tiednote.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/timesignature.png b/TuxGuitar/share/skins/Oxygen/timesignature.png
new file mode 100644
index 0000000..603f1a2
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/timesignature.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/track_add.png b/TuxGuitar/share/skins/Oxygen/track_add.png
new file mode 100644
index 0000000..c106701
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/track_add.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/track_remove.png b/TuxGuitar/share/skins/Oxygen/track_remove.png
new file mode 100644
index 0000000..90ba109
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/track_remove.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport.png b/TuxGuitar/share/skins/Oxygen/transport.png
new file mode 100644
index 0000000..cdfbf63
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_first_1.png b/TuxGuitar/share/skins/Oxygen/transport_first_1.png
new file mode 100644
index 0000000..dc15969
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_first_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_first_2.png b/TuxGuitar/share/skins/Oxygen/transport_first_2.png
new file mode 100644
index 0000000..dc15969
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_first_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_first_1.png b/TuxGuitar/share/skins/Oxygen/transport_icon_first_1.png
new file mode 100644
index 0000000..120c1e0
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_first_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_first_2.png b/TuxGuitar/share/skins/Oxygen/transport_icon_first_2.png
new file mode 100644
index 0000000..120c1e0
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_first_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_last_1.png b/TuxGuitar/share/skins/Oxygen/transport_icon_last_1.png
new file mode 100644
index 0000000..7392432
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_last_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_last_2.png b/TuxGuitar/share/skins/Oxygen/transport_icon_last_2.png
new file mode 100644
index 0000000..7392432
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_last_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_next_1.png b/TuxGuitar/share/skins/Oxygen/transport_icon_next_1.png
new file mode 100644
index 0000000..0a33f97
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_next_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_next_2.png b/TuxGuitar/share/skins/Oxygen/transport_icon_next_2.png
new file mode 100644
index 0000000..0a33f97
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_next_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_pause.png b/TuxGuitar/share/skins/Oxygen/transport_icon_pause.png
new file mode 100644
index 0000000..d133bdc
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_pause.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_play_1.png b/TuxGuitar/share/skins/Oxygen/transport_icon_play_1.png
new file mode 100644
index 0000000..2820368
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_play_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_play_2.png b/TuxGuitar/share/skins/Oxygen/transport_icon_play_2.png
new file mode 100644
index 0000000..2820368
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_play_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_previous_1.png b/TuxGuitar/share/skins/Oxygen/transport_icon_previous_1.png
new file mode 100644
index 0000000..6f9d9b9
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_previous_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_previous_2.png b/TuxGuitar/share/skins/Oxygen/transport_icon_previous_2.png
new file mode 100644
index 0000000..6f9d9b9
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_previous_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_stop_1.png b/TuxGuitar/share/skins/Oxygen/transport_icon_stop_1.png
new file mode 100644
index 0000000..4ecbdf6
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_stop_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_icon_stop_2.png b/TuxGuitar/share/skins/Oxygen/transport_icon_stop_2.png
new file mode 100644
index 0000000..4ecbdf6
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_icon_stop_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_last_1.png b/TuxGuitar/share/skins/Oxygen/transport_last_1.png
new file mode 100644
index 0000000..c8d2393
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_last_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_last_2.png b/TuxGuitar/share/skins/Oxygen/transport_last_2.png
new file mode 100644
index 0000000..c8d2393
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_last_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_metronome.png b/TuxGuitar/share/skins/Oxygen/transport_metronome.png
new file mode 100644
index 0000000..beb3226
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_metronome.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_mode.png b/TuxGuitar/share/skins/Oxygen/transport_mode.png
new file mode 100644
index 0000000..1d09462
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_mode.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_next_1.png b/TuxGuitar/share/skins/Oxygen/transport_next_1.png
new file mode 100644
index 0000000..670df9b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_next_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_next_2.png b/TuxGuitar/share/skins/Oxygen/transport_next_2.png
new file mode 100644
index 0000000..670df9b
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_next_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_pause.png b/TuxGuitar/share/skins/Oxygen/transport_pause.png
new file mode 100644
index 0000000..cb58bfd
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_pause.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_play_1.png b/TuxGuitar/share/skins/Oxygen/transport_play_1.png
new file mode 100644
index 0000000..23e3d29
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_play_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_play_2.png b/TuxGuitar/share/skins/Oxygen/transport_play_2.png
new file mode 100644
index 0000000..23e3d29
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_play_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_previous_1.png b/TuxGuitar/share/skins/Oxygen/transport_previous_1.png
new file mode 100644
index 0000000..29cc2f0
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_previous_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_previous_2.png b/TuxGuitar/share/skins/Oxygen/transport_previous_2.png
new file mode 100644
index 0000000..29cc2f0
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_previous_2.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_stop_1.png b/TuxGuitar/share/skins/Oxygen/transport_stop_1.png
new file mode 100644
index 0000000..ebf5f88
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_stop_1.png differ
diff --git a/TuxGuitar/share/skins/Oxygen/transport_stop_2.png b/TuxGuitar/share/skins/Oxygen/transport_stop_2.png
new file mode 100644
index 0000000..ebf5f88
Binary files /dev/null and b/TuxGuitar/share/skins/Oxygen/transport_stop_2.png differ
diff --git a/TuxGuitar/share/skins/blue_serious/skin.svg b/TuxGuitar/share/skins/blue_serious/skin.svg
new file mode 100644
index 0000000..78fe369
--- /dev/null
+++ b/TuxGuitar/share/skins/blue_serious/skin.svg
@@ -0,0 +1,8639 @@
+<?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="744.09448819"
+   height="1052.3622047"
+   id="svg4934"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docbase="C:\Documents and Settings\Bruno Preziosi\Desktop"
+   sodipodi:docname="skin.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <defs
+     id="defs4936">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective1371" />
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient34716">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop34718" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop34720" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient23605">
+      <stop
+         style="stop-color:#0100ff;stop-opacity:1;"
+         offset="0"
+         id="stop23607" />
+      <stop
+         style="stop-color:#00a7ff;stop-opacity:1;"
+         offset="1"
+         id="stop23609" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14515">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop14517" />
+      <stop
+         id="stop14603"
+         offset="0.5"
+         style="stop-color:#4c4c4c;stop-opacity:1;" />
+      <stop
+         style="stop-color:#444444;stop-opacity:1;"
+         offset="1"
+         id="stop14519" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient8897">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop8899" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop8901" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7257">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop7259" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop7261" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5204">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop5206" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop5208" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4884">
+      <stop
+         style="stop-color:#e7e7e7;stop-opacity:1;"
+         offset="0"
+         id="stop4886" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop4888" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29570">
+      <stop
+         style="stop-color:#7f7f7f;stop-opacity:1;"
+         offset="0"
+         id="stop29572" />
+      <stop
+         id="stop29578"
+         offset="0.5"
+         style="stop-color:#999999;stop-opacity:0.68932039;" />
+      <stop
+         style="stop-color:#b3b3b3;stop-opacity:0;"
+         offset="1"
+         id="stop29574" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient29560">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop29562" />
+      <stop
+         style="stop-color:#fffa00;stop-opacity:0;"
+         offset="1"
+         id="stop29564" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient26619">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop26621" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop26623" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24651">
+      <stop
+         style="stop-color:#838383;stop-opacity:1;"
+         offset="0"
+         id="stop24653" />
+      <stop
+         style="stop-color:#ececec;stop-opacity:1;"
+         offset="1"
+         id="stop24655" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24639">
+      <stop
+         style="stop-color:#cccccc;stop-opacity:1;"
+         offset="0"
+         id="stop24641" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop24643" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient23660">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop23662" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop23664" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient22671">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop22673" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop22675" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21690">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop21692" />
+      <stop
+         style="stop-color:#c3c3c3;stop-opacity:1;"
+         offset="1"
+         id="stop21694" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient20702">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop20704" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop20706" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient19703">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop19705" />
+      <stop
+         style="stop-color:#d8a588;stop-opacity:0;"
+         offset="1"
+         id="stop19707" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient13756">
+      <stop
+         style="stop-color:#916f6f;stop-opacity:1;"
+         offset="0"
+         id="stop13758" />
+      <stop
+         style="stop-color:#372929;stop-opacity:1;"
+         offset="1"
+         id="stop13760" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12721">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop12723" />
+      <stop
+         style="stop-color:#5c5c5c;stop-opacity:1;"
+         offset="1"
+         id="stop12725" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient12711">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop12713" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop12715" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11707">
+      <stop
+         style="stop-color:#ffcc00;stop-opacity:1;"
+         offset="0"
+         id="stop11709" />
+      <stop
+         style="stop-color:#e5b804;stop-opacity:1;"
+         offset="1"
+         id="stop11711" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11689">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop11691" />
+      <stop
+         style="stop-color:#e0a01c;stop-opacity:0;"
+         offset="1"
+         id="stop11693" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient56561">
+      <stop
+         id="stop56563"
+         offset="0"
+         style="stop-color:#9cffff;stop-opacity:1;" />
+      <stop
+         id="stop56565"
+         offset="1"
+         style="stop-color:#ffffff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient48382">
+      <stop
+         style="stop-color:#34a7f6;stop-opacity:1;"
+         offset="0"
+         id="stop48384" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop48386" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4856">
+      <stop
+         style="stop-color:white;stop-opacity:0.84536082"
+         offset="0"
+         id="stop4858" />
+      <stop
+         style="stop-color:#6898f1;stop-opacity:0.46391752"
+         offset="1"
+         id="stop4860" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4791">
+      <stop
+         style="stop-color:#5696f6;stop-opacity:1"
+         offset="0"
+         id="stop4793" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop4795" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient22002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.920046,0,0,1.086901,0,13.71543)"
+       x1="313.19742"
+       y1="886.34753"
+       x2="399.59286"
+       y2="886.34753" />
+    <linearGradient
+       id="linearGradient33795">
+      <stop
+         style="stop-color:#ff9e00;stop-opacity:1"
+         offset="0"
+         id="stop33801" />
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0.5"
+         id="stop33803" />
+      <stop
+         style="stop-color:#ffffa0;stop-opacity:1"
+         offset="1"
+         id="stop33799" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3974">
+      <stop
+         style="stop-color:#dd9600;stop-opacity:1"
+         offset="0"
+         id="stop3976" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop3978" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11729">
+      <stop
+         style="stop-color:#806805;stop-opacity:1"
+         offset="0"
+         id="stop11731" />
+      <stop
+         style="stop-color:#e1e2ce;stop-opacity:1"
+         offset="0.44999999"
+         id="stop11735" />
+      <stop
+         style="stop-color:#b4a66d;stop-opacity:1"
+         offset="1"
+         id="stop11733" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9900">
+      <stop
+         style="stop-color:#ffd988;stop-opacity:1"
+         offset="0"
+         id="stop9902" />
+      <stop
+         style="stop-color:#97812c;stop-opacity:1"
+         offset="1"
+         id="stop9904" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9009">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop9011" />
+      <stop
+         style="stop-color:#d3bc5f;stop-opacity:1"
+         offset="1"
+         id="stop9013" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23057"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,982.7389,22.5298)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23061"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,643.9049,22.52983)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23063"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,530.9602,22.52986)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23065"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-167.3496,22.52986)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient3567"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4133997,0.4055754,-0.3422418,-0.3488223,10.276589,-74.784609)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24213"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient24211"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24217"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient24215"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient24229"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       id="linearGradient32988">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop32990" />
+      <stop
+         style="stop-color:#cbcbcb;stop-opacity:1"
+         offset="0.5"
+         id="stop32994" />
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="1"
+         id="stop32992" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24227"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96906,0.184773,-0.740436,0.719541,-2,53.11273)"
+       x1="1029.5582"
+       y1="283.05643"
+       x2="1054.2062"
+       y2="283.05643" />
+    <linearGradient
+       id="linearGradient6462">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop6464" />
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="1"
+         id="stop6466" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient24225"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       id="linearGradient9267">
+      <stop
+         style="stop-color:#ffd428;stop-opacity:1;"
+         offset="0"
+         id="stop9269" />
+      <stop
+         id="stop10163"
+         offset="0.5"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffd322;stop-opacity:1;"
+         offset="1"
+         id="stop9271" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9267"
+       id="linearGradient24251"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.105702,-0.132634,0.122908,0.142271,-123.5758,437.4912)"
+       x1="205.4043"
+       y1="464.48911"
+       x2="207.19127"
+       y2="498.23825" />
+    <linearGradient
+       id="linearGradient7463">
+      <stop
+         style="stop-color:lime;stop-opacity:1;"
+         offset="0"
+         id="stop7465" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop7467" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7463"
+       id="linearGradient24249"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.120379,0.139344,-0.171115,0.214715,20.77584,293.7269)"
+       x1="331.695"
+       y1="486.6479"
+       x2="399.73358"
+       y2="486.6479" />
+    <linearGradient
+       id="linearGradient19203">
+      <stop
+         style="stop-color:#a49e88;stop-opacity:1;"
+         offset="0"
+         id="stop19205" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop19207" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19203"
+       id="linearGradient24247"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.463664,0.283515,-0.266017,0.432012,-24.98543,167.9069)"
+       x1="209.59592"
+       y1="469.32986"
+       x2="228.7281"
+       y2="494.3299" />
+    <linearGradient
+       id="linearGradient14138">
+      <stop
+         style="stop-color:#afc6e9;stop-opacity:1;"
+         offset="0"
+         id="stop14140" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop14142" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient20139">
+      <stop
+         style="stop-color:#5696f6;stop-opacity:1"
+         offset="0"
+         id="stop20141" />
+      <stop
+         style="stop-color:#5696f6;stop-opacity:0"
+         offset="1"
+         id="stop20143" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21032">
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0"
+         id="stop21034" />
+      <stop
+         style="stop-color:red;stop-opacity:0"
+         offset="1"
+         id="stop21036" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18353">
+      <stop
+         style="stop-color:yellow;stop-opacity:1"
+         offset="0"
+         id="stop18355" />
+      <stop
+         style="stop-color:yellow;stop-opacity:0"
+         offset="1"
+         id="stop18357" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient19246">
+      <stop
+         style="stop-color:#f95;stop-opacity:1"
+         offset="0"
+         id="stop19248" />
+      <stop
+         style="stop-color:#f95;stop-opacity:0"
+         offset="1"
+         id="stop19250" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.825015,0,0,1.061238,849.253,-79.37844)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.806533,0,0,1.26326,841.2684,-279.0187)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.840938,0,0,1.038796,100.9157,-57.20348)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <linearGradient
+       id="linearGradient5684">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop5686" />
+      <stop
+         style="stop-color:black;stop-opacity:0"
+         offset="1"
+         id="stop5688" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4548"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.820084,0,0,1.263148,109.9248,-278.9086)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient4546"
+       gradientUnits="userSpaceOnUse"
+       x1="811.92737"
+       y1="467.36218"
+       x2="1052.3584"
+       y2="467.36218" />
+    <linearGradient
+       id="linearGradient4644">
+      <stop
+         style="stop-color:#f5f5f5;stop-opacity:1"
+         offset="0"
+         id="stop4646" />
+      <stop
+         style="stop-color:#9e9e9e;stop-opacity:1"
+         offset="1"
+         id="stop4648" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4644"
+       id="radialGradient4544"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       id="linearGradient4672">
+      <stop
+         style="stop-color:#9b9b9b;stop-opacity:1"
+         offset="0"
+         id="stop4674" />
+      <stop
+         style="stop-color:#2f2f2f;stop-opacity:1"
+         offset="1"
+         id="stop4676" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient4542"
+       gradientUnits="userSpaceOnUse"
+       x1="818"
+       y1="467.36218"
+       x2="1046.2856"
+       y2="467.36218" />
+    <linearGradient
+       id="linearGradient7720">
+      <stop
+         style="stop-color:#f5f5f5;stop-opacity:1"
+         offset="0"
+         id="stop7722" />
+      <stop
+         style="stop-color:#81baff;stop-opacity:1;"
+         offset="1"
+         id="stop7724" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7720"
+       id="radialGradient4540"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       id="linearGradient5880">
+      <stop
+         style="stop-color:#6d91d4;stop-opacity:1"
+         offset="0"
+         id="stop5882" />
+      <stop
+         style="stop-color:black;stop-opacity:0.02061856"
+         offset="1"
+         id="stop5884" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6814">
+      <stop
+         style="stop-color:blue;stop-opacity:1"
+         offset="0"
+         id="stop6816" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6820" />
+      <stop
+         style="stop-color:blue;stop-opacity:1"
+         offset="1"
+         id="stop6818" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6798">
+      <stop
+         style="stop-color:lime;stop-opacity:1"
+         offset="0"
+         id="stop6800" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6804" />
+      <stop
+         style="stop-color:lime;stop-opacity:1"
+         offset="1"
+         id="stop6802" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6830">
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0"
+         id="stop6832" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6836" />
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="1"
+         id="stop6834" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6846">
+      <stop
+         style="stop-color:aqua;stop-opacity:1"
+         offset="0"
+         id="stop6848" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6852" />
+      <stop
+         style="stop-color:aqua;stop-opacity:1"
+         offset="1"
+         id="stop6850" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9201">
+      <stop
+         style="stop-color:#007d00;stop-opacity:1;"
+         offset="0"
+         id="stop9203" />
+      <stop
+         style="stop-color:#00d900;stop-opacity:0;"
+         offset="1"
+         id="stop9205" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9201"
+       id="linearGradient16401"
+       gradientUnits="userSpaceOnUse"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <linearGradient
+       id="linearGradient10979">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop10981" />
+      <stop
+         style="stop-color:#fff2d7;stop-opacity:1;"
+         offset="1"
+         id="stop10983" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient16399"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.510756,8.596396e-3,-9.491026e-3,0.563911,199.3096,272.8201)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient21760"
+       gradientUnits="userSpaceOnUse"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       id="linearGradient15469">
+      <stop
+         style="stop-color:#25a2e3;stop-opacity:1;"
+         offset="0"
+         id="stop15471" />
+      <stop
+         style="stop-color:#dfdfdf;stop-opacity:1;"
+         offset="1"
+         id="stop15473" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient3382"
+       gradientUnits="userSpaceOnUse"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient21493"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <linearGradient
+       id="linearGradient9644">
+      <stop
+         style="stop-color:#f8e70a;stop-opacity:1;"
+         offset="0"
+         id="stop9646" />
+      <stop
+         style="stop-color:#ffa021;stop-opacity:0;"
+         offset="1"
+         id="stop9648" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient21491"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="repeat"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695" />
+    <linearGradient
+       id="linearGradient1315">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop1317" />
+      <stop
+         style="stop-color:black;stop-opacity:0.73958325"
+         offset="1"
+         id="stop1319" />
+    </linearGradient>
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient22911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4134002,0.4055758,-0.3422416,-0.3488226,336.05906,-255.33691)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInM"
+       style="overflow:visible">
+      <path
+         id="path4538"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(-0.4)" />
+    </marker>
+    <linearGradient
+       id="linearGradient43975">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop43977" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop43979" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient40035">
+      <stop
+         style="stop-color:#3c3c3c;stop-opacity:1;"
+         offset="0"
+         id="stop40037" />
+      <stop
+         style="stop-color:#9a8d8d;stop-opacity:1;"
+         offset="1"
+         id="stop40039" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient34131">
+      <stop
+         style="stop-color:#006e0b;stop-opacity:1;"
+         offset="0"
+         id="stop34133" />
+      <stop
+         style="stop-color:#07ff00;stop-opacity:1;"
+         offset="1"
+         id="stop34135" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11686">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop11688" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop11690" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient30048">
+      <stop
+         style="stop-color:#007100;stop-opacity:1;"
+         offset="0"
+         id="stop30050" />
+      <stop
+         style="stop-color:#00d100;stop-opacity:0.70873785;"
+         offset="1"
+         id="stop30052" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient24170">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop24172" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="1"
+         id="stop24174" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4552">
+      <stop
+         style="stop-color:#ffcd1d;stop-opacity:1"
+         offset="0"
+         id="stop4554" />
+      <stop
+         style="stop-color:#ffe691;stop-opacity:1"
+         offset="0.67500001"
+         id="stop6334" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop4556" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3661">
+      <stop
+         style="stop-color:#ffd74f;stop-opacity:1"
+         offset="0"
+         id="stop3663" />
+      <stop
+         style="stop-color:#795d00;stop-opacity:0"
+         offset="1"
+         id="stop3665" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient19023">
+      <stop
+         style="stop-color:#fff6f6;stop-opacity:1;"
+         offset="0"
+         id="stop19025" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop19027" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18995">
+      <stop
+         style="stop-color:#7887b6;stop-opacity:1;"
+         offset="0"
+         id="stop18997" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop18999" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18969">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop18971" />
+      <stop
+         id="stop18977"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop18973" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18960">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.79611653;"
+         offset="0"
+         id="stop18962" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop18964" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient17829">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop17831" />
+      <stop
+         id="stop17837"
+         offset="0.5"
+         style="stop-color:#000000;stop-opacity:1;" />
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="1"
+         id="stop17833" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient16852">
+      <stop
+         style="stop-color:#d3bc5f;stop-opacity:1;"
+         offset="0"
+         id="stop16854" />
+      <stop
+         style="stop-color:#d38d5f;stop-opacity:1;"
+         offset="1"
+         id="stop16856" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14070">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop14072" />
+      <stop
+         style="stop-color:#8e8e8e;stop-opacity:1"
+         offset="1"
+         id="stop14074" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21068">
+      <stop
+         style="stop-color:#999;stop-opacity:1"
+         offset="0"
+         id="stop21070" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop21072" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient16226">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop16228" />
+      <stop
+         style="stop-color:#e85700;stop-opacity:1"
+         offset="1"
+         id="stop16230" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient34131"
+       id="linearGradient43969"
+       gradientUnits="userSpaceOnUse"
+       x1="315.21429"
+       y1="601.46936"
+       x2="334.42856"
+       y2="601.46936" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16852"
+       id="linearGradient46199"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(32.857143,-92.857143)"
+       x1="330.38367"
+       y1="341.9724"
+       x2="335.30689"
+       y2="341.9724" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16852"
+       id="linearGradient46291"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(32.857143,-92.857143)"
+       x1="330.38367"
+       y1="341.9724"
+       x2="335.30689"
+       y2="341.9724" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient30048"
+       id="linearGradient46308"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-47.5,-58.214286)"
+       x1="394.7171"
+       y1="463.6958"
+       x2="387.64603"
+       y2="456.62473" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24170"
+       id="linearGradient46322"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.9152246,0,39.62588)"
+       x1="327.79449"
+       y1="446.52319"
+       x2="310.87445"
+       y2="448.03842" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24170"
+       id="linearGradient46324"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.9152246,0,39.62588)"
+       x1="333.21429"
+       y1="452.49219"
+       x2="334.64285"
+       y2="475.23166" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient46350"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1573476,0,0,0.1985639,254.36744,448.40529)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient40035"
+       id="linearGradient46352"
+       gradientUnits="userSpaceOnUse"
+       x1="332.07446"
+       y1="565.65918"
+       x2="318.41772"
+       y2="569.03137" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient34131"
+       id="linearGradient46354"
+       gradientUnits="userSpaceOnUse"
+       x1="315.21429"
+       y1="601.46936"
+       x2="334.42856"
+       y2="601.46936" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient46382"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.1573476,0,0,0.1985639,254.36744,448.40529)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient40035"
+       id="linearGradient46384"
+       gradientUnits="userSpaceOnUse"
+       x1="332.07446"
+       y1="565.65918"
+       x2="318.41772"
+       y2="569.03137" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient43975"
+       id="linearGradient46386"
+       gradientUnits="userSpaceOnUse"
+       x1="332.5"
+       y1="642.36218"
+       x2="346.98233"
+       y2="656.62982"
+       gradientTransform="translate(31.071397,-471.8956)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56421"
+       gradientUnits="userSpaceOnUse"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56423"
+       gradientUnits="userSpaceOnUse"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56425"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="168.01244"
+       y1="765.50165"
+       x2="172.57751"
+       y2="783.052" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56427"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56429"
+       gradientUnits="userSpaceOnUse"
+       x1="146.07144"
+       y1="773.9693"
+       x2="138.39285"
+       y2="763.61218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56431"
+       gradientUnits="userSpaceOnUse"
+       x1="156.07143"
+       y1="768.25507"
+       x2="141.96428"
+       y2="758.255" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56433"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9553524,0,0,0.9553524,6.3805055,33.68767)"
+       x1="131.91823"
+       y1="757.63336"
+       x2="156.74184"
+       y2="786.12646" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56435"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9553524,0,0,0.9553524,6.3805055,33.68767)"
+       x1="156.07143"
+       y1="768.25507"
+       x2="141.96428"
+       y2="758.255" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56437"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56439"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56441"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.9095867,0,69.541934)"
+       x1="226.12527"
+       y1="767.38849"
+       x2="229.06473"
+       y2="779.35138" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56443"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56445"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56447"
+       gradientUnits="userSpaceOnUse"
+       x1="224.28571"
+       y1="767.7193"
+       x2="228.0826"
+       y2="779.06696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56449"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56451"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56453"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.9095867,0,69.541934)"
+       x1="226.12527"
+       y1="767.38849"
+       x2="229.06473"
+       y2="779.35138" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56455"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56457"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56459"
+       gradientUnits="userSpaceOnUse"
+       x1="224.28571"
+       y1="767.7193"
+       x2="228.0826"
+       y2="779.06696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56511"
+       gradientUnits="userSpaceOnUse"
+       x1="175.71429"
+       y1="787.12646"
+       x2="171.60715"
+       y2="767.1731" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56515"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56527"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56533"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56549"
+       x1="218.45901"
+       y1="770.17187"
+       x2="237.88474"
+       y2="770.17187"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56551"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56553"
+       x1="162.91429"
+       y1="770.93361"
+       x2="180.3"
+       y2="770.93361"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56555"
+       x1="135.39285"
+       y1="770.755"
+       x2="153.53571"
+       y2="770.755"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56557"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56559"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56577"
+       gradientUnits="userSpaceOnUse"
+       x1="162.91429"
+       y1="770.93361"
+       x2="174.23909"
+       y2="780.53003" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56579"
+       gradientUnits="userSpaceOnUse"
+       x1="162.91429"
+       y1="770.93361"
+       x2="171.60715"
+       y2="767.1731" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56582"
+       gradientUnits="userSpaceOnUse"
+       x1="162.91429"
+       y1="770.93361"
+       x2="174.23909"
+       y2="780.53003"
+       gradientTransform="translate(-0.2550204,29.247583)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56584"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,6.8094052,110.6955)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56607"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56615"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56667"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(227.41176,-673.03754)"
+       x1="156.3483"
+       y1="774.46912"
+       x2="171.60715"
+       y2="768.18323" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56669"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(227.41176,-673.03754)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="171.60715"
+       y2="768.18323" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56671"
+       gradientUnits="userSpaceOnUse"
+       x1="135.39285"
+       y1="770.755"
+       x2="153.53571"
+       y2="770.755" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56673"
+       gradientUnits="userSpaceOnUse"
+       x1="135.39285"
+       y1="770.755"
+       x2="153.53571"
+       y2="770.755" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56675"
+       gradientUnits="userSpaceOnUse"
+       x1="156.07143"
+       y1="768.25507"
+       x2="141.96428"
+       y2="758.255" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56677"
+       gradientUnits="userSpaceOnUse"
+       x1="136.38519"
+       y1="765.59845"
+       x2="152.59634"
+       y2="778.37634" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56679"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9553524,0,0,0.9553524,6.3805055,33.68767)"
+       x1="156.07143"
+       y1="768.25507"
+       x2="141.96428"
+       y2="758.255" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56681"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56683"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56685"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56687"
+       gradientUnits="userSpaceOnUse"
+       x1="220.6384"
+       y1="776.77808"
+       x2="234.15274"
+       y2="757.90942" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56689"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56691"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56693"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56695"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56697"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56699"
+       gradientUnits="userSpaceOnUse"
+       x1="220.0254"
+       y1="770.03125"
+       x2="238.19335"
+       y2="770.03125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56701"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7273249,0,0,1,101.56554,-0.7142858)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56703"
+       gradientUnits="userSpaceOnUse"
+       x1="220.6384"
+       y1="776.77808"
+       x2="234.15274"
+       y2="757.90942" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56705"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56707"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient56709"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.5751169,0,0,1.008628,124.83388,-7.1545301)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient56711"
+       gradientUnits="userSpaceOnUse"
+       x1="218.45901"
+       y1="770.17187"
+       x2="224.24768"
+       y2="761.58398" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient3722"
+       x1="-484.87323"
+       y1="170.99902"
+       x2="-480.08008"
+       y2="156.60942"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(849.99998,-63.999998)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient3738"
+       x1="-482.34784"
+       y1="168.47871"
+       x2="-489.41891"
+       y2="163.93301"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(849.99998,-63.999998)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient56561"
+       id="linearGradient6854"
+       gradientUnits="userSpaceOnUse"
+       x1="-484.87323"
+       y1="170.99902"
+       x2="-480.08008"
+       y2="156.60942"
+       gradientTransform="translate(859.59643,-63.999998)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient6856"
+       gradientUnits="userSpaceOnUse"
+       x1="-482.34784"
+       y1="168.47871"
+       x2="-489.41891"
+       y2="163.93301"
+       gradientTransform="translate(859.59643,-63.999998)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient6883"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(8.955585e-2,-9.4442571e-2,9.3098111e-2,9.0849027e-2,220.18116,469.85854)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient6899"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(8.955585e-2,-9.4442571e-2,9.3098111e-2,9.0849027e-2,219.81213,516.8131)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient34131"
+       id="linearGradient6901"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.1321943,0,0,1.1321943,-46.203278,-70.99291)"
+       x1="339.28571"
+       y1="539.14789"
+       x2="341.78571"
+       y2="551.64789" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient8039"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.7526038,0.6083978,-0.5733311,0.5393683,798.58831,284.04424)"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13756"
+       id="linearGradient13762"
+       x1="450.78058"
+       y1="666.98901"
+       x2="461.38718"
+       y2="681.48468"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13756"
+       id="linearGradient14783"
+       gradientUnits="userSpaceOnUse"
+       x1="450.78058"
+       y1="666.98901"
+       x2="461.38718"
+       y2="681.48468" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient29570"
+       id="radialGradient29636"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.103689,5.2299076e-7,-1.9780151e-7,0.1370966,-46.037807,651.99982)"
+       cx="439.46976"
+       cy="757.58337"
+       fx="439.46976"
+       fy="757.58337"
+       r="62" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21690"
+       id="linearGradient29638"
+       gradientUnits="userSpaceOnUse"
+       x1="595.5"
+       y1="696.36218"
+       x2="596.75"
+       y2="767.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11707"
+       id="linearGradient29640"
+       gradientUnits="userSpaceOnUse"
+       x1="634.88086"
+       y1="751.11469"
+       x2="634.88086"
+       y2="742.24536" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11689"
+       id="linearGradient29642"
+       gradientUnits="userSpaceOnUse"
+       x1="616.4325"
+       y1="739.86218"
+       x2="616.81653"
+       y2="768.41132" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11707"
+       id="linearGradient29644"
+       gradientUnits="userSpaceOnUse"
+       x1="634.88086"
+       y1="751.11469"
+       x2="634.88086"
+       y2="742.24536" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11689"
+       id="linearGradient29646"
+       gradientUnits="userSpaceOnUse"
+       x1="616.4325"
+       y1="739.86218"
+       x2="616.81653"
+       y2="768.41132" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12721"
+       id="linearGradient29648"
+       gradientUnits="userSpaceOnUse"
+       x1="575"
+       y1="712.7193"
+       x2="529.9032"
+       y2="696.14789" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient12711"
+       id="linearGradient29650"
+       gradientUnits="userSpaceOnUse"
+       x1="538.57141"
+       y1="699.14789"
+       x2="562.85712"
+       y2="719.50507" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient13756"
+       id="linearGradient29652"
+       gradientUnits="userSpaceOnUse"
+       x1="450.78058"
+       y1="666.98901"
+       x2="461.38718"
+       y2="681.48468" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19703"
+       id="linearGradient29654"
+       gradientUnits="userSpaceOnUse"
+       x1="660.5"
+       y1="643.11218"
+       x2="647"
+       y2="681.86218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient20702"
+       id="radialGradient29656"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.7877615,-0.3068366,0.2750567,1.6025984,-339.57925,-281.42543)"
+       cx="392"
+       cy="682.68359"
+       fx="392"
+       fy="682.68359"
+       r="11" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient22671"
+       id="radialGradient29658"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4334045,-0.7857037,2.2183534,1.2236733,-1042.1562,234.44432)"
+       cx="474.38373"
+       cy="659.97424"
+       fx="474.38373"
+       fy="659.97424"
+       r="15.8" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient23660"
+       id="linearGradient29660"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9699248,0,0,1,173.57519,6)"
+       x1="434.75"
+       y1="609.86218"
+       x2="434.75"
+       y2="641.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24639"
+       id="linearGradient29662"
+       gradientUnits="userSpaceOnUse"
+       x1="441.00461"
+       y1="648.47522"
+       x2="403.06418"
+       y2="645.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24639"
+       id="linearGradient29664"
+       gradientUnits="userSpaceOnUse"
+       x1="457.867"
+       y1="648.99261"
+       x2="407.80673"
+       y2="645.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24651"
+       id="linearGradient29666"
+       gradientUnits="userSpaceOnUse"
+       x1="434.68118"
+       y1="653.64905"
+       x2="408.33368"
+       y2="651.57947" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient26619"
+       id="linearGradient29668"
+       gradientUnits="userSpaceOnUse"
+       x1="590"
+       y1="636.34375"
+       x2="578"
+       y2="651.84375" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient24651"
+       id="linearGradient29670"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9488566,0,0,0.9664004,179.5499,26.675505)"
+       x1="434.68118"
+       y1="653.64905"
+       x2="408.33368"
+       y2="651.57947" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient23660"
+       id="linearGradient29672"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.8989058,0,0,0.863818,225.09145,95.352673)"
+       x1="419.85327"
+       y1="633.24628"
+       x2="434.31531"
+       y2="653.70087" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient29560"
+       id="linearGradient29674"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9721378,0,0,0.9641253,16.310943,23.529189)"
+       x1="607.40472"
+       y1="666.98901"
+       x2="588.66638"
+       y2="657.79657" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient29690"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2029204,0.186021,-0.1860214,0.2029204,422.55483,563.24879)"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient29692"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2029204,0.186021,-0.1860214,0.2029204,422.55483,563.24879)"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient29708"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2029202,0.1860211,-0.1860211,0.2029202,415.50085,608.72154)"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient29710"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.2029202,0.1860211,-0.1860211,0.2029202,415.50085,608.72154)"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient29749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.510756,8.596396e-3,-9.491026e-3,0.563911,199.3096,272.8201)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9201"
+       id="linearGradient29751"
+       gradientUnits="userSpaceOnUse"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient29763"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.510756,8.596396e-3,-9.491026e-3,0.563911,199.3096,272.8201)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9201"
+       id="linearGradient29765"
+       gradientUnits="userSpaceOnUse"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient30770"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.347396,5.8469281e-3,-6.45542e-3,0.3835499,278.79698,446.0576)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient30772"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6801604,0,0,0.6801604,143.23448,260.49617)"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4884"
+       id="linearGradient4986"
+       gradientUnits="userSpaceOnUse"
+       x1="468.45825"
+       y1="368.94348"
+       x2="460.32651"
+       y2="332.88104"
+       gradientTransform="translate(-50.622053,-134.67858)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8558"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(1.0606601,-0.3535534)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8560"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(1.0606601,-0.3535534)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8562"
+       gradientUnits="userSpaceOnUse"
+       x1="279.66074"
+       y1="951.953"
+       x2="280.72137"
+       y2="935.68958" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8564"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(65.15738,0)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8566"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(65.15738,0)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8568"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,1,597.96234,0.3535534)"
+       x1="279.66074"
+       y1="951.953"
+       x2="280.72137"
+       y2="935.68958" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8570"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,1,741.85857,-1.4142136)"
+       x1="279.66074"
+       y1="951.953"
+       x2="280.72137"
+       y2="935.68958" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8572"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(213.29625,-1.4142136)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8574"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(213.29625,-1.4142136)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8576"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.7071068,0)"
+       x1="476.58997"
+       y1="953.36725"
+       x2="476.23642"
+       y2="936.50024" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8578"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(146.11366,-1.4142134)"
+       x1="279.66074"
+       y1="951.953"
+       x2="280.72137"
+       y2="935.68958" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8580"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(142.93168,-1.4142134)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8582"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(142.93168,-1.4142134)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5204"
+       id="linearGradient8584"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-887.26512,-4.4513212e-7)"
+       x1="476.58997"
+       y1="953.36725"
+       x2="476.23642"
+       y2="936.50024" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8586"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(250.41936,-1.767767)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8588"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(250.41936,-1.767767)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8590"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(298.50262,-1.767767)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8592"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(298.50262,-1.767767)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8594"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(104.75536,-1.4142136)"
+       x1="263.04373"
+       y1="931.80048"
+       x2="273.08966"
+       y2="933.0379" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient8596"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(104.75536,-1.4142136)"
+       x1="267.63992"
+       y1="935.68958"
+       x2="261.62952"
+       y2="937.95734" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient8903"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9082"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9084"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9086"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9088"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9090"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient8897"
+       id="linearGradient9092"
+       gradientUnits="userSpaceOnUse"
+       x1="155.7688"
+       y1="596.52466"
+       x2="178.85175"
+       y2="596.52466" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10632"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0002987,0,0,0.9606692,-0.1380491,15.912347)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10634"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2485904,0,0,0.9568426,-107.4476,25.962975)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10636"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0180271,0,0,0.9603807,-13.103176,33.000931)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10638"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0002987,0,0,0.9606692,0.2155043,67.177589)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10640"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.2485904,0,0,0.9568426,-107.09405,77.228217)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient10642"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.0180271,0,0,0.9603807,-12.749623,84.266173)"
+       x1="452.04479"
+       y1="409.07179"
+       x2="472.14378"
+       y2="409.07179" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient12422"
+       gradientUnits="userSpaceOnUse"
+       x1="448.76281"
+       y1="542.00787"
+       x2="465.87982"
+       y2="542.00787" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient12424"
+       gradientUnits="userSpaceOnUse"
+       x1="462.80139"
+       y1="548.90216"
+       x2="454.3161"
+       y2="539.00269" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient14671"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4620139,0,0,0.3894886,57.182807,0.9387358)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient14673"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,301.3571,283.759)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient14675"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,320.3571,312.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient14677"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,339.3571,294.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient14679"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.4620139,0,0,0.3894886,57.182807,0.9387358)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14515"
+       id="linearGradient14681"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6887344,0,0,0.6887344,123.12631,180.07568)"
+       x1="504.69748"
+       y1="581.25232"
+       x2="504.69748"
+       y2="592.21246" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14515"
+       id="linearGradient14683"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6887344,0,0,0.6887344,123.12631,180.07568)"
+       x1="504.69748"
+       y1="581.25232"
+       x2="504.69748"
+       y2="592.21246" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14515"
+       id="linearGradient14685"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.6887344,0,0,0.6887344,123.12631,180.07568)"
+       x1="504.69748"
+       y1="581.25232"
+       x2="504.69748"
+       y2="592.21246" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient16699"
+       gradientUnits="userSpaceOnUse"
+       x1="168.57143"
+       y1="775.75507"
+       x2="168.57143"
+       y2="762.83539" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient16701"
+       gradientUnits="userSpaceOnUse"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient16703"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="168.01244"
+       y1="765.50165"
+       x2="172.57751"
+       y2="783.052" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient48382"
+       id="linearGradient16705"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.9583614,0,0,0.8941799,7.0644256,81.447915)"
+       x1="175.71429"
+       y1="787.12646"
+       x2="175.53572"
+       y2="761.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient20674"
+       x1="550.44476"
+       y1="253.6601"
+       x2="617.09191"
+       y2="253.6601"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4884"
+       id="linearGradient20676"
+       x1="550.45654"
+       y1="279.77587"
+       x2="617.10101"
+       y2="279.77587"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient23605"
+       id="linearGradient23611"
+       x1="671.5"
+       y1="273.36218"
+       x2="642"
+       y2="258.36218"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.5,-1)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32738"
+       gradientUnits="userSpaceOnUse"
+       x1="657.81122"
+       y1="561.36737"
+       x2="667.31006"
+       y2="509.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32740"
+       gradientUnits="userSpaceOnUse"
+       x1="698.62152"
+       y1="559.50873"
+       x2="637.10321"
+       y2="525.56763" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32742"
+       gradientUnits="userSpaceOnUse"
+       x1="661.5"
+       y1="522.48663"
+       x2="668.9314"
+       y2="568.8941" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32744"
+       gradientUnits="userSpaceOnUse"
+       x1="657.81122"
+       y1="561.36737"
+       x2="667.31006"
+       y2="509.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32746"
+       gradientUnits="userSpaceOnUse"
+       x1="698.62152"
+       y1="559.50873"
+       x2="637.10321"
+       y2="525.56763" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32748"
+       gradientUnits="userSpaceOnUse"
+       x1="661.5"
+       y1="522.48663"
+       x2="668.9314"
+       y2="568.8941" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32750"
+       gradientUnits="userSpaceOnUse"
+       x1="657.81122"
+       y1="561.36737"
+       x2="667.31006"
+       y2="509.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32752"
+       gradientUnits="userSpaceOnUse"
+       x1="698.62152"
+       y1="559.50873"
+       x2="637.10321"
+       y2="525.56763" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient32754"
+       gradientUnits="userSpaceOnUse"
+       x1="661.5"
+       y1="522.48663"
+       x2="668.9314"
+       y2="568.8941" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4884"
+       id="linearGradient34698"
+       x1="631.90344"
+       y1="523.90344"
+       x2="698.16439"
+       y2="547.48794"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient34716"
+       id="linearGradient34722"
+       x1="692.96466"
+       y1="529.10315"
+       x2="636.39612"
+       y2="571.07245"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient34743"
+       x1="551.61316"
+       y1="604.48474"
+       x2="574.93854"
+       y2="619.33398"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-237.34822,100.04162)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient35720"
+       x1="560.02856"
+       y1="633.04785"
+       x2="530.33008"
+       y2="597.6925"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-237.34822,100.04162)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient23605"
+       id="linearGradient4519"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0.5,-1)"
+       x1="671.5"
+       y1="273.36218"
+       x2="642"
+       y2="258.36218" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1"
+     inkscape:cx="579.49621"
+     inkscape:cy="593.75733"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     inkscape:window-width="1280"
+     inkscape:window-height="931"
+     inkscape:window-x="0"
+     inkscape:window-y="33"
+     showgrid="false" />
+  <metadata
+     id="metadata4939">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Livello 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline">
+    <text
+       xml:space="preserve"
+       id="text22931"
+       style="font-size:27.52882576px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.39196366px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931228)"
+       y="569.82336"
+       x="102.38081"><tspan
+         id="tspan22933"
+         style="stroke-width:0.39196366"
+         y="569.82336"
+         x="102.38081">Windows dialogs  icons</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text13940"
+       style="font-size:22.53170586px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.32081166px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931229)"
+       y="66.432938"
+       x="104.47573"><tspan
+         id="tspan13942"
+         style="stroke-width:0.32081166"
+         y="66.432938"
+         x="104.47573">TuxGuitar Player 0.8 Version</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text14708"
+       style="font-size:7.94642401px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.11314224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931229)"
+       y="79.741409"
+       x="104.01778"><tspan
+         id="tspan14710"
+         style="stroke-width:0.11314226"
+         y="79.741409"
+         x="104.01778">Buttons defaut</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text14712"
+       style="font-size:7.94658947px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.1131442px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931229)"
+       y="80.345016"
+       x="270.76242"><tspan
+         id="tspan14714"
+         style="stroke-width:0.1131442"
+         y="80.345016"
+         x="270.76242">Buttons is on</tspan></text>
+    <rect
+       id="rect2827"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="389.56476"
+       x="104.71769"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_accentuated.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect2837"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="389.56476"
+       x="153.22922"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_fade_in.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect6548"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="389.35748"
+       x="201.66434"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_ghost.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect6595"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.02417"
+       x="249.47281"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_grace.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect7500"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.02417"
+       x="297.9993"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_hammer.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect7533"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.66095"
+       x="346.74661"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_harmonic.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3143"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.66095"
+       x="395.84604"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_heavy_accentuated.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3182"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="388.66095"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_palm_mute.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <text
+       xml:space="preserve"
+       id="text17219"
+       style="font-size:23.18305969px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.33008549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.0069248,0.9931228)"
+       y="137.11647"
+       x="103.68752"><tspan
+         id="tspan17221"
+         style="stroke-width:0.33008549"
+         y="137.11647"
+         x="103.68752">Toolbar  icons</tspan></text>
+    <rect
+       id="rect34943"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.37198"
+       x="104.68711"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect37863"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.14096"
+       x="201.2482"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect37847"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.37198"
+       x="154.58469"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect49778"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="247.90994"
+       x="248.60471"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52722"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path49780"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 338.50001,696.12549 L 406.50001,696.12549" />
+      <path
+         id="path50667"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(-6.499994,7.263308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path50669"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 369.35853,695.26143 L 369.35853,634.48955" />
+      <path
+         id="path50671"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 338.50001,675.62549 L 406.50001,675.62549" />
+    </g>
+    <rect
+       id="rect50689"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.14096"
+       x="295.96121"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect52500"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="247.90994"
+       x="345.85873"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52715"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path50709"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 473.56682,634.97014 C 491.05994,635.4857 491.47546,647.90583 491.48512,663.18131 C 486.73449,647.1487 488.86877,643.70599 473.61907,643.74026 C 473.53193,630.54852 473.6402,648.16276 473.56682,634.97014 z " />
+      <path
+         id="path52546"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 441.00001,696.62549 L 509.00001,696.62549" />
+      <path
+         id="path52548"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(96.00001,7.763308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52550"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 471.85853,695.76143 L 471.85853,634.98955" />
+      <path
+         id="path52552"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 441.00001,676.12549 L 509.00001,676.12549" />
+    </g>
+    <g
+       id="g52707"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path52519"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 581.65647,634.49305 C 599.14959,634.96367 599.56511,646.30103 599.57477,660.24482 C 594.82414,645.6099 596.95842,642.46732 581.70872,642.4986 C 581.62158,630.4569 581.72985,646.53556 581.65647,634.49305 z " />
+      <path
+         id="path52570"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 549.00001,696.12549 L 617.00001,696.12549" />
+      <path
+         id="path52572"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(204,7.263308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52574"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 579.85853,695.26143 L 579.85853,634.48955" />
+      <path
+         id="path52576"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 549.00001,675.62549 L 617.00001,675.62549" />
+      <path
+         id="path52578"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 581.51919,644.69678 C 599.01231,645.1674 599.42783,656.50476 599.43749,670.44855 C 594.68686,655.81363 596.82114,652.67105 581.57144,652.70233 C 581.4843,640.66063 581.59257,656.73929 581.51919,644.69678 z " />
+    </g>
+    <rect
+       id="rect52589"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.14096"
+       x="393.67725"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52697"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path52593"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 685.15647,634.99305 C 702.64959,635.46096 703.06511,646.7332 703.07477,660.59689 C 698.32414,646.04604 700.45842,642.92151 685.20872,642.95261 C 685.12158,630.98009 685.22985,646.96638 685.15647,634.99305 z " />
+      <path
+         id="path52597"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 652.50001,696.62549 L 720.50001,696.62549" />
+      <path
+         id="path52599"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(307.5,7.763308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52601"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 683.35853,695.76143 L 683.35853,634.98955" />
+      <path
+         id="path52603"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 652.50001,676.12549 L 720.50001,676.12549" />
+      <path
+         id="path52605"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 685.15647,644.55268 C 702.64959,645.02059 703.06511,656.29283 703.07477,670.15652 C 698.32414,655.60567 700.45842,652.48114 685.20872,652.51224 C 685.12158,640.53972 685.22985,656.52601 685.15647,644.55268 z " />
+      <path
+         id="path52614"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 685.15647,654.60879 C 702.64959,655.07671 703.06511,666.34894 703.07477,680.21263 C 698.32414,665.66178 700.45842,662.53726 685.20872,662.56836 C 685.12158,650.59583 685.22985,666.58212 685.15647,654.60879 z " />
+      <path
+         id="path52629"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 685.15647,664.55689 C 702.64959,665.02481 703.06511,676.29704 703.07477,690.16073 C 698.32414,675.60988 700.45842,672.48536 685.20872,672.51646 C 685.12158,660.54393 685.22985,676.53022 685.15647,664.55689 z " />
+    </g>
+    <rect
+       id="rect52728"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="298.03989"
+       x="104.41618"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52730"
+       style="display:inline"
+       transform="matrix(0.4620139,0,0,0.4620139,-47.017263,8.9897668)">
+      <path
+         id="path52732"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 338.50001,696.12549 L 406.50001,696.12549" />
+      <path
+         id="path52734"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(-6.499994,7.263308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52736"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 369.35853,695.26143 L 369.35853,634.48955" />
+      <path
+         id="path52738"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 338.50001,675.62549 L 406.50001,675.62549" />
+    </g>
+    <rect
+       id="rect52740"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,0,0)"
+       y="137.10782"
+       x="319.00745"
+       height="4.6201973"
+       width="4.8512053" />
+    <rect
+       id="rect52758"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="298.50052"
+       x="154.8157"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52774"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <g
+         id="g52760"
+         style="display:inline"
+         transform="translate(-203,109.5)">
+        <path
+           id="path52762"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 338.50001,696.12549 L 406.50001,696.12549" />
+        <path
+           id="path52764"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="translate(-6.499994,7.263308)"
+           d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+        <path
+           id="path52766"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 369.35853,695.26143 L 369.35853,634.48955" />
+        <path
+           id="path52768"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 338.50001,675.62549 L 406.50001,675.62549" />
+      </g>
+      <rect
+         id="rect52770"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="matrix(0.707107,0.707107,-0.707107,0.707107,0,0)"
+         y="431.48001"
+         x="683.43604"
+         height="10.000011"
+         width="10.500011" />
+      <rect
+         id="rect52772"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="matrix(0.707107,0.707107,-0.707107,0.707107,0,0)"
+         y="420.75739"
+         x="694.15863"
+         height="10.00004"
+         width="10.50004" />
+    </g>
+    <rect
+       id="rect52783"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="297.80753"
+       x="203.09622"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g52910"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path52789"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 240.00001,804.12549 L 308.00001,804.12549" />
+      <path
+         id="path52795"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 240.00001,783.62549 L 308.00001,783.62549" />
+      <path
+         id="path52791"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(0.571633,0,0,1,45.35674,115.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52793"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 260.01295,803.45836 L 260.01295,758.79263" />
+      <path
+         id="path52812"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="matrix(0.571633,0,0,1,62.29158,115.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52814"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 277.14348,803.45838 L 277.14348,758.79265" />
+      <path
+         id="path52826"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="matrix(0.571633,0,0,1,79.44058,115.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52828"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 294.49064,803.45838 L 294.49064,758.79265" />
+      <rect
+         id="rect52830"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         y="758.36218"
+         x="258.86331"
+         height="9.6007662"
+         width="36.69611" />
+      <text
+         xml:space="preserve"
+         id="text52858"
+         style="font-size:25.4596386px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         transform="scale(1.099156,0.909789)"
+         y="832.28827"
+         x="243.78136"><tspan
+           id="tspan52860"
+           style="font-family:Arial Black"
+           y="832.28827"
+           x="243.78136">3</tspan></text>
+    </g>
+    <rect
+       id="rect52923"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="298.26956"
+       x="249.2977"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\timesignature.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       id="g16732"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\timesignature.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(849.99998,-63.999998)">
+      <path
+         id="path52961"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.68045378;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -590.64703,394.71663 L -568.46504,371.86246" />
+      <text
+         xml:space="preserve"
+         id="text53848"
+         style="font-size:28.30521774px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+         transform="scale(1.1990521,0.8339921)"
+         y="479.10339"
+         x="-485.94577"><tspan
+           id="tspan53850"
+           y="479.10339"
+           x="-485.94577">4</tspan></text>
+      <text
+         xml:space="preserve"
+         id="text54737"
+         style="font-size:28.30520058px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+         transform="scale(1.1990521,0.8339921)"
+         y="459.57449"
+         x="-498.8335"><tspan
+           id="tspan54739"
+           y="459.57449"
+           x="-498.8335">4</tspan></text>
+    </g>
+    <rect
+       id="rect54748"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="298.73154"
+       x="297.34726"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g57494"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <g
+         id="g56568"
+         transform="translate(4.064981,5.555418)">
+        <g
+           id="g56560">
+          <rect
+             id="rect54762"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             y="738.49548"
+             x="460.12595"
+             ry="0"
+             height="72.622528"
+             width="10.422997" />
+          <rect
+             id="rect54764"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             y="738.49548"
+             x="473.64929"
+             height="72.622528"
+             width="2.5666234" />
+        </g>
+        <g
+           id="g56564"
+           transform="translate(0,-0.109804)">
+          <path
+             id="path55655"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             transform="matrix(0.762121,0,0,0.762121,113.6812,182.3594)"
+             d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+          <path
+             id="path55657"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+             transform="matrix(0.762121,0,0,0.762121,113.6813,197.2904)"
+             d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+        </g>
+      </g>
+      <g
+         id="g57487">
+        <path
+           id="path55661"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 440.47831,744.01169 L 515.5217,743.84996" />
+        <path
+           id="path55663"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,816.87437 L 515.5217,816.71263" />
+        <path
+           id="path55665"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,798.65871 L 515.52169,798.49697" />
+        <path
+           id="path55667"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,780.44305 L 515.52169,780.28131" />
+        <path
+           id="path55669"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,762.22737 L 515.5217,762.06564" />
+      </g>
+    </g>
+    <rect
+       id="rect61934"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="scale(-1,1)"
+       y="298.26956"
+       x="-388.11679"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g61936"
+       style="display:inline"
+       transform="matrix(-0.4620139,0,0,0.4620139,588.29285,-41.602207)">
+      <g
+         id="g61938"
+         transform="translate(4.064981,5.555418)">
+        <g
+           id="g61940">
+          <rect
+             id="rect61942"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             y="738.49548"
+             x="460.12595"
+             ry="0"
+             height="72.622528"
+             width="10.422997" />
+          <rect
+             id="rect61944"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             y="738.49548"
+             x="473.64929"
+             height="72.622528"
+             width="2.5666234" />
+        </g>
+        <g
+           id="g61946"
+           transform="translate(0,-0.109804)">
+          <path
+             id="path61948"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             transform="matrix(0.762121,0,0,0.762121,113.6812,182.3594)"
+             d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+          <path
+             id="path61950"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+             transform="matrix(0.762121,0,0,0.762121,113.6813,197.2904)"
+             d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+        </g>
+      </g>
+      <g
+         id="g61952">
+        <path
+           id="path61954"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 440.47831,744.01169 L 515.5217,743.84996" />
+        <path
+           id="path61956"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,816.87437 L 515.5217,816.71263" />
+        <path
+           id="path61958"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,798.65871 L 515.52169,798.49697" />
+        <path
+           id="path61960"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,780.44305 L 515.52169,780.28131" />
+        <path
+           id="path61962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 440.47831,762.22737 L 515.5217,762.06564" />
+      </g>
+    </g>
+    <rect
+       id="rect2795"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="297.34549"
+       x="395.29428"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g2826"
+       transform="matrix(0.4620139,0,0,0.4620139,97.171257,-41.140177)">
+      <path
+         id="path2799"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 656.00001,803.12549 L 724.00001,803.12549" />
+      <path
+         id="path2801"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(311,114.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path2803"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 686.85853,802.26143 L 686.85853,741.48955" />
+      <path
+         id="path2805"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 656.00001,782.62549 L 724.00001,782.62549" />
+    </g>
+    <rect
+       id="rect2811"
+       style="opacity:0;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="296.91403"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\chord.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       id="g2829"
+       style="display:inline"
+       transform="matrix(0.4620139,0,0,0.4620139,432.20283,-140.79809)">
+      <path
+         id="path2831"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 29.00003,909.12551 L 97.00003,909.12551" />
+      <path
+         id="path2833"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+         transform="translate(-316,220.2633)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path2835"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 29.00003,888.62551 L 97.00003,888.62551" />
+    </g>
+    <g
+       id="g16721"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\chord.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(849.99998,-63.999998)">
+      <text
+         xml:space="preserve"
+         id="text6554"
+         style="font-size:33.25069046px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+         transform="scale(0.9879705,1.012176)"
+         y="389.72214"
+         x="-392.5192"><tspan
+           id="tspan6556"
+           y="389.72214"
+           x="-392.5192">7</tspan></text>
+      <text
+         xml:space="preserve"
+         id="text6567"
+         style="font-size:31.83207703px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans Mono"
+         transform="scale(1.0055344,0.9944961)"
+         y="395.96545"
+         x="-405.44424"><tspan
+           id="tspan6569"
+           y="395.96545"
+           x="-405.44424">G</tspan></text>
+    </g>
+    <path
+       id="path6599"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.84805834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 109.94912,280.07177 L 141.36612,280.07177" />
+    <path
+       id="path6601"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.84805799;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       d="M 124.04047,271.1779 C 124.04047,273.53817 121.7134,275.45154 118.84281,275.45154 C 115.97222,275.45154 113.64515,273.53817 113.64515,271.1779 C 113.64515,268.81764 115.97222,266.90426 118.84281,266.90426 C 121.7134,266.90426 124.04047,268.81764 124.04047,271.1779 z " />
+    <path
+       id="path6603"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.42819726;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 124.20621,270.06859 L 124.20621,251.30528" />
+    <path
+       id="path6605"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.84805834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 109.94912,270.60047 L 141.36612,270.60047" />
+    <path
+       id="path6613"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.75689816;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 123.72752,273.79496 C 132.43241,281.53816 140.30826,273.79496 140.30826,273.79496 L 140.30826,273.79496" />
+    <g
+       id="g7524"
+       transform="matrix(0.4620139,0,0,0.4620139,-96.715983,-138.41685)">
+      <path
+         id="path7504"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 585.0017,844.15855 C 602.49482,844.62917 602.91034,855.96653 602.92,869.91032 C 598.16937,855.2754 600.30365,852.13282 585.05395,852.1641 C 584.96681,840.1224 585.07508,856.20106 585.0017,844.15855 z " />
+      <path
+         id="path7506"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 552.34524,905.79099 L 620.34524,905.79099" />
+      <path
+         id="path7508"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(207.3452,216.9288)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path7510"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 583.20376,904.92693 L 583.20376,844.15505" />
+      <path
+         id="path7512"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 552.34524,885.29099 L 620.34524,885.29099" />
+      <path
+         id="path7514"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 584.86442,854.36228 C 602.35754,854.8329 602.77306,866.17026 602.78272,880.11405 C 598.03209,865.47913 600.16637,862.33655 584.91667,862.36783 C 584.82953,850.32613 584.9378,866.40479 584.86442,854.36228 z " />
+      <path
+         id="path7522"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 584.74905,864.74215 C 602.24217,865.21277 602.65769,876.55013 602.66735,890.49392 C 597.91672,875.859 600.051,872.71642 584.8013,872.7477 C 584.71416,860.706 584.82243,876.78466 584.74905,864.74215 z " />
+    </g>
+    <text
+       xml:space="preserve"
+       id="text7535"
+       style="font-size:43.93042374px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans Mono"
+       y="284.18216"
+       x="209.71799"><tspan
+         id="tspan7537"
+         y="284.18216"
+         x="209.71799">X</tspan></text>
+    <rect
+       id="rect3132"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="247.76437"
+       x="441.0032"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect3703"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="147.76259"
+       x="394.47055"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g7499"
+       transform="matrix(0.4373357,0,0,0.4683741,65.447487,-49.039827)">
+      <g
+         id="g7361"
+         style="display:inline"
+         transform="matrix(0.518198,0.328578,-0.328578,0.518198,562.3445,-50.07558)">
+        <path
+           id="path7363"
+           style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 799.9099,425.55908 C 817.40302,426.0297 817.81854,437.36706 817.8282,451.31085 C 813.07757,436.67593 815.21185,433.53335 799.96215,433.56463 C 799.87501,421.52293 799.98328,437.60159 799.9099,425.55908 z " />
+        <path
+           id="path7365"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 798.11196,486.32746 L 798.11196,425.55558" />
+        <path
+           id="path7367"
+           style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 799.77262,435.76281 C 817.26574,436.23343 817.68126,447.57079 817.69092,461.51458 C 812.94029,446.87966 815.07457,443.73708 799.82487,443.76836 C 799.73773,431.72666 799.846,447.80532 799.77262,435.76281 z " />
+        <path
+           id="path7369"
+           style="fill:url(#radialGradient24225);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="matrix(1.090643,0,0,1.062011,390.5269,-245.3025)"
+           d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      </g>
+      <path
+         id="rect3745"
+         style="color:#000000;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.945538,0.325513,0,1,0,0)"
+         d="M 822.72691,174.61087 L 889.276,169.13496 L 889.276,199.72689 L 823.4895,199.72689 L 822.72691,174.61087 z " />
+      <path
+         id="rect3739"
+         style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.945538,0.325513,0,1,0,0)"
+         d="M 800.22229,188.70871 L 866.00876,188.70871 L 866.00876,219.30063 L 800.49191,214.62408 L 800.22229,188.70871 z " />
+      <rect
+         id="rect3741"
+         style="opacity:1;color:#000000;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.882353,-0.470588,0,1,0,0)"
+         y="907.16882"
+         x="927.44476"
+         height="30.591925"
+         width="26.003122" />
+      <path
+         id="rect3743"
+         style="color:#000000;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.701289,-0.712877,0.945817,0.324701,0,0)"
+         d="M -198.67545,947.41547 L -177.04075,950.94075 L -171.02987,1011.6918 L -199.05916,1012.7404 L -198.67545,947.41547 z " />
+      <path
+         id="rect3753"
+         style="color:#000000;fill:url(#linearGradient24227);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 788.37444,442.41233 C 790.98554,441.49944 800.28366,439.76223 810.12708,450.22181 C 809.39758,451.00304 806.96255,454.45726 805.25704,455.95851 C 798.77005,448.84021 786.55315,444.31821 781.43076,448.7918 C 782.36313,447.56946 787.21848,443.63946 788.37444,442.41233 z " />
+      <g
+         id="g7353"
+         transform="matrix(0.996519,0,0,0.996519,3.974373,5.043832)">
+        <path
+           id="path4656"
+           style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 799.9099,425.55908 C 817.40302,426.0297 817.81854,437.36706 817.8282,451.31085 C 813.07757,436.67593 815.21185,433.53335 799.96215,433.56463 C 799.87501,421.52293 799.98328,437.60159 799.9099,425.55908 z " />
+        <path
+           id="path4662"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 798.11196,486.32746 L 798.11196,425.55558" />
+        <path
+           id="path4666"
+           style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 799.77262,435.76281 C 817.26574,436.23343 817.68126,447.57079 817.69092,461.51458 C 812.94029,446.87966 815.07457,443.73708 799.82487,443.76836 C 799.73773,431.72666 799.846,447.80532 799.77262,435.76281 z " />
+        <path
+           id="path4660"
+           style="fill:url(#radialGradient24229);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="matrix(1.090643,0,0,1.062011,390.5269,-245.3025)"
+           d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      </g>
+    </g>
+    <rect
+       id="rect23627"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.17255"
+       x="104.5211"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23629"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="152.85513"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23631"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="200.99265"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23633"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="249.13016"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23635"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="297.26773"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23637"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="345.40518"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23639"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="393.54269"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect23685"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="343.36914"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <rect
+       id="rect4189"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="479.92548"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g4191"
+       transform="matrix(0.8455204,0,0,0.7937234,6.5663167,-153.69652)">
+      <path
+         id="path4193"
+         style="color:#000000;fill:url(#radialGradient4540);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4542);stroke-width:19.88428688;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.253681,-2.501311e-2,2.459378e-2,0.246667,229.9229,877.6432)"
+         d="M 1044.2857,467.36218 C 1044.3227,533.26967 994.10381,586.71913 932.14286,586.71913 C 870.18191,586.71913 819.96301,533.26967 820.00002,467.36218 C 819.96301,401.45469 870.18191,348.00523 932.14286,348.00523 C 994.10381,348.00523 1044.3227,401.45469 1044.2857,467.36218 L 1044.2857,467.36218 z " />
+      <path
+         id="path4195"
+         style="color:#000000;fill:url(#radialGradient4544);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4546);stroke-width:24.22555733;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(7.590656e-2,-7.48444e-3,8.865423e-3,8.891693e-2,402.9419,934.5995)"
+         d="M 1044.2857,467.36218 C 1044.3227,533.26967 994.10381,586.71913 932.14286,586.71913 C 870.18191,586.71913 819.96301,533.26967 820.00002,467.36218 C 819.96301,401.45469 870.18191,348.00523 932.14286,348.00523 C 994.10381,348.00523 1044.3227,401.45469 1044.2857,467.36218 L 1044.2857,467.36218 z " />
+      <path
+         id="path4198"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,281.3689,848.9056)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4200"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,302.3878,837.0276)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4202"
+         style="color:#000000;fill:#000000;fill-opacity:0.44495413;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,325.3773,845.8586)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4204"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,275.7409,869.832)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4206"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,332.8209,863.8999)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4208"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,326.1424,885.6138)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4210"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,287.9716,890.5937)"
+         d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+      <path
+         id="path4212"
+         style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4548);stroke-width:3.50856757;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 451.50995,943.25668 C 435.78414,960.38604 437.18199,983.78233 452.90778,996.73372" />
+      <path
+         id="path4214"
+         style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4550);stroke-width:2.95746279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 468.42158,952.25773 C 454.79821,963.2013 456.00919,978.14862 469.63254,986.42309" />
+      <path
+         id="path4216"
+         style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4552);stroke-width:3.47961354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 505.32732,943.2543 C 520.79326,960.38517 519.4185,983.78352 503.95255,996.73612" />
+      <path
+         id="path4218"
+         style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4554);stroke-width:2.96080017;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 488.70524,951.88864 C 502.07067,963.06859 500.88263,978.33881 487.51722,986.79199" />
+      <path
+         id="path4220"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 465.49828,937.54255 C 475.04316,934.00456 478.02606,940.68448 481.42441,949.00956 C 475.30206,941.30677 475.6879,938.96409 467.47456,942.31203 C 464.4973,935.13979 468.46833,944.71828 465.49828,937.54255 z " />
+      <path
+         id="path4222"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(0.539089,-0.218317,0.243345,0.597197,109.4028,645.3595)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path4224"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.31586146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 479.31673,974.22578 L 464.52817,937.93298" />
+      <path
+         id="path4226"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 467.90731,943.66616 C 477.45219,940.12817 480.43507,946.80809 483.83344,955.13317 C 477.71109,947.43038 478.09693,945.08769 469.88359,948.43564 C 466.90632,941.2634 470.87734,950.8419 467.90731,943.66616 z " />
+      <path
+         id="path4228"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 470.37101,949.89018 C 479.91589,946.35219 482.89878,953.03211 486.29715,961.3572 C 480.1748,953.6544 480.56062,951.31171 472.34729,954.65967 C 469.37002,947.48741 473.34105,957.06591 470.37101,949.89018 z " />
+      <path
+         id="path4230"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 505.72899,950.50171 C 520.25906,957.10155 515.96029,967.3979 510.25127,979.88426 C 512.25344,965.10468 515.33826,963.04516 502.49058,957.68701 C 507.35452,946.87609 500.85315,961.30851 505.72899,950.50171 z " />
+      <path
+         id="path4232"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(0.841647,0.353197,-0.410015,0.895235,445.2498,255.6813)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path4234"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.58397031;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 479.29983,1004.2686 L 504.21719,949.86355" />
+    </g>
+    <rect
+       id="rect4236"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.43713"
+       x="104.5211"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\tempoicon.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       id="rect4248"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.63367"
+       x="393.54269"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\edit_mode_selection.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       id="rect4250"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.63367"
+       x="441.68024"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g16749"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\tempoicon.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(849.99998,-63.999998)">
+      <path
+         id="path4256"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.84805679;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         d="M -728.72109,529.74258 C -728.72109,532.10284 -731.04817,534.01621 -733.91875,534.01621 C -736.78934,534.01621 -739.11641,532.10284 -739.11641,529.74258 C -739.11641,527.38232 -736.78934,525.46895 -733.91875,525.46895 C -731.04817,525.46895 -728.72109,527.38232 -728.72109,529.74258 z " />
+      <path
+         id="path4258"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.74707758;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M -728.6706,529.70396 L -728.6706,501.62649" />
+      <g
+         transform="translate(5.6568542,-1.4142136)"
+         id="g16745">
+        <path
+           d="M -729.88064,528.4216 L -719.96388,528.4216"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.11852527;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path4254" />
+        <path
+           d="M -729.88064,521.49842 L -719.96388,521.49842"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.11852527;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path4260" />
+      </g>
+    </g>
+    <g
+       id="g2988"
+       transform="matrix(0.5633612,0,0,0.5633612,94.016587,27.970368)">
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path4570"
+         d="M 48.485517,575.51074 C 47.057601,575.53345 40.824521,575.50157 39.272311,589.79823 L 35.150004,589.79823 L 35.150004,592.07556 L 39.134654,592.07556 C 38.761213,596.18447 35.172599,613.87811 32.848466,613.95576 C 30.453707,614.03577 33.091056,614.04051 33.113086,611.43574 C 33.135117,608.83094 29.615875,608.89369 29.548583,611.44041 C 29.479763,614.04493 29.820497,616.0356 34.173133,616.00346 C 38.572698,615.97098 41.807204,603.64647 43.628053,592.07556 L 47.598261,592.07556 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path2984"
+         d="M 62.485517,575.51074 C 61.057601,575.53345 54.824521,575.50157 53.272311,589.79823 L 49.150004,589.79823 L 49.150004,592.07556 L 53.134654,592.07556 C 52.761213,596.18447 49.172599,613.87811 46.848466,613.95576 C 44.453707,614.03577 47.091056,614.04051 47.113086,611.43574 C 47.135117,608.83094 43.615875,608.89369 43.548583,611.44041 C 43.479763,614.04493 43.820497,616.0356 48.173133,616.00346 C 52.572698,615.97098 55.807204,603.64647 57.628053,592.07556 L 61.598261,592.07556 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path2986"
+         d="M 76.485517,575.51074 C 75.057601,575.53345 68.824521,575.50157 67.272311,589.79823 L 63.150004,589.79823 L 63.150004,592.07556 L 67.134654,592.07556 C 66.761213,596.18447 63.172599,613.87811 60.848466,613.95576 C 58.453707,614.03577 61.091056,614.04051 61.113086,611.43574 C 61.135117,608.83094 57.615875,608.89369 57.548583,611.44041 C 57.479763,614.04493 57.820497,616.0356 62.173133,616.00346 C 66.572698,615.97098 69.807204,603.64647 71.628053,592.07556 L 75.598261,592.07556 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <g
+       id="g3012"
+       transform="matrix(0.5633612,0,0,0.5633612,98.523477,27.970368)">
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path2995"
+         d="M 136.48552,575.51074 C 135.0576,575.53345 128.82452,575.50157 127.27231,589.79823 L 123.15,589.79823 L 123.15,592.07556 L 127.13465,592.07556 C 126.76121,596.18447 123.1726,613.87811 120.84847,613.95576 C 118.45371,614.03577 121.09106,614.04051 121.11309,611.43574 C 121.13512,608.83094 117.61588,608.89369 117.54858,611.44041 C 117.47976,614.04493 117.8205,616.0356 122.17313,616.00346 C 126.5727,615.97098 129.8072,603.64647 131.62805,592.07556 L 135.59826,592.07556 L 135.5982 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccszzzcccczszzz"
+         id="path2997"
+         d="M 150.48552,575.51074 C 149.0576,575.53345 142.82452,575.50157 141.27231,589.79823 L 137.15,589.79823 L 137.15,592.07556 L 141.13465,592.07556 C 140.76121,596.18447 137.1726,613.87811 134.84847,613.95576 C 132.45371,614.03577 135.09106,614.04051 135.11309,611.43574 C 135.13512,608.83094 131.61588,608.89369 131.54858,611.44041 C 131.47976,614.04493 131.8205,616.0356 136.17313,616.00346 C 140.5727,615.97098 143.8072,603.64647 145.62805,592.07556 L 149.59826,592.07556 L 149.5982 [...]
+         style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <path
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 229.49687,352.191 C 228.69245,352.20379 225.18097,352.18583 224.30651,360.24001 L 221.98416,360.24001 L 221.98416,361.52298 L 224.22896,361.52298 C 224.01858,363.83778 221.9969,373.8057 220.68757,373.84944 C 219.33845,373.89451 220.82423,373.89719 220.83664,372.42975 C 220.84906,370.96232 218.86645,370.99766 218.82854,372.43239 C 218.78977,373.89968 218.98172,375.02114 221.43383,375.00303 C 223.91238,374.98474 225.73457,368.04158 226.76037,361.52298 L 228.99703,361.52298 L 22 [...]
+       id="path3005"
+       sodipodi:nodetypes="cccccszzzcccczszzz" />
+    <path
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 279.07269,352.191 C 278.26826,352.20379 274.75678,352.18583 273.88232,360.24001 L 271.55998,360.24001 L 271.55998,361.52298 L 273.80477,361.52298 C 273.59439,363.83778 271.57271,373.8057 270.26339,373.84944 C 268.91427,373.89451 270.40005,373.89719 270.41246,372.42975 C 270.42487,370.96232 268.44226,370.99766 268.40435,372.43239 C 268.36558,373.89968 268.55754,375.02114 271.00964,375.00303 C 273.4882,374.98474 275.31039,368.04158 276.33618,361.52298 L 278.57285,361.52298 L 27 [...]
+       id="path3019"
+       sodipodi:nodetypes="cccccszzzcccczszzz" />
+    <text
+       xml:space="preserve"
+       style="font-size:16.14900208px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="343.08582"
+       y="342.56519"
+       id="text3036"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3038"
+         x="343.08582"
+         y="342.56519"
+         style="font-size:16.14901543px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">m</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16.14931297px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="395.86255"
+       y="342.57013"
+       id="text3044"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3046"
+         x="395.86255"
+         y="342.57013"
+         style="font-size:16.14933777px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">mp</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16.14957619px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="445.04129"
+       y="342.5744"
+       id="text3048"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3050"
+         x="445.04129"
+         y="342.5744"
+         style="font-size:16.14960098px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">ppp</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16.14987183px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="500.21811"
+       y="342.5791"
+       id="text3052"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3054"
+         x="500.21811"
+         y="342.5791"
+         style="font-size:16.14989853px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">pp</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:16.15017509px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mar [...]
+       x="555.39612"
+       y="342.58392"
+       id="text3056"
+       sodipodi:linespacing="100%"
+       transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan3058"
+         x="555.39612"
+         y="342.58392"
+         style="font-size:16.1502018px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">p</tspan></text>
+    <path
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       d="M 134.6265,410.19998 L 118.81885,420.77364 L 118.81885,416.97306 L 129.21871,410.19998 L 118.81885,403.49058 L 118.81885,399.69 L 134.6265,410.19998 z "
+       id="text3060"
+       sodipodi:nodetypes="ccccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:30.45602417px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+       x="186.68878"
+       y="468.9649"
+       id="text3065"
+       transform="scale(1.1209993,0.8920612)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3067"
+         x="186.68878"
+         y="468.9649">()</tspan></text>
+    <path
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       d="M 165.0145,410.19998 L 180.82214,420.77364 L 180.82214,416.97306 L 170.4223,410.19998 L 180.82214,403.49058 L 180.82214,399.69 L 165.0145,410.19998 z "
+       id="path3069"
+       sodipodi:nodetypes="ccccccc" />
+    <g
+       id="g3104"
+       transform="matrix(0.5633612,0,0,0.5633612,94.016587,27.970368)">
+      <path
+         id="path3073"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 312.30593,647.99065 C 323.97335,648.37311 324.2505,657.58689 324.25694,668.9189 C 321.0884,657.02522 322.5119,654.47127 312.34078,654.4967 C 312.28266,644.71049 312.35487,657.77749 312.30593,647.99065 z " />
+      <path
+         id="path3077"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.8136487;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         d="M 310.92742,694.2856 C 310.92742,698.0754 307.56802,701.14764 303.42398,701.14764 C 299.27995,701.14764 295.92055,698.0754 295.92055,694.2856 C 295.92055,690.49579 299.27995,687.42354 303.42398,687.42354 C 307.56802,687.42354 310.92742,690.49579 310.92742,694.2856 z " />
+      <path
+         id="path3075"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.83327127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 293.82309,681.8583 L 327.47426,657.4004" />
+      <path
+         id="path3079"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.65990877;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 311.16655,693.08823 L 311.16655,648.00504" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:34.65638351px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+       x="-414.60809"
+       y="337.56183"
+       id="text3110"
+       transform="matrix(0,-1.024355,0.976224,0,0,0)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3112"
+         x="-414.60809"
+         y="337.56183">)</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:15.52974701px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="331.20074"
+       y="380.70523"
+       id="text3114"
+       transform="scale(0.9278539,1.0777559)"><tspan
+         sodipodi:role="line"
+         id="tspan3116"
+         x="331.20074"
+         y="380.70523">HO</tspan></text>
+    <path
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 367.82984,407.43075 L 375.7702,415.72262 L 367.82984,423.56851 L 359.48734,415.72262 L 367.82984,407.43075 z "
+       id="rect3126"
+       sodipodi:nodetypes="ccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:14.66517448px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="401.82806"
+       y="361.38586"
+       id="text3133"
+       transform="scale(0.8879582,1.1261792)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3135"
+         x="401.82806"
+         y="361.38586"
+         style="font-size:14.66517448px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">NH</tspan></text>
+    <path
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       d="M 416.54259,399.29957 L 406.74589,420.03662 L 408.54392,420.03662 L 414.57313,408.35804 L 420.05098,420.03662 L 426.28028,420.03662 L 416.54259,399.29957 z "
+       id="path3141"
+       sodipodi:nodetypes="ccccccc" />
+    <text
+       xml:space="preserve"
+       style="font-size:21.2996788px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="570.43744"
+       y="328.33853"
+       id="text3143"
+       transform="scale(0.7835739,1.2762038)"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan3145"
+         x="570.43744"
+         y="328.33853"
+         style="font-size:21.2996788px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">P.M</tspan></text>
+    <rect
+       id="rect3147"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.54208785;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.63367"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_left.png"
+       inkscape:export-xdpi="35.083145"
+       inkscape:export-ydpi="35.083145" />
+    <rect
+       id="rect3149"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.29358"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_right.png"
+       inkscape:export-xdpi="35.083145"
+       inkscape:export-ydpi="35.083145" />
+    <rect
+       id="rect3151"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="479.52423"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_up.png"
+       inkscape:export-xdpi="35.083145"
+       inkscape:export-ydpi="35.083145" />
+    <rect
+       id="rect3153"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="479.52423"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_down.png"
+       inkscape:export-xdpi="35.083145"
+       inkscape:export-ydpi="35.083145" />
+    <rect
+       id="rect3155"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="342.13184"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_bend.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3157"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="342.13184"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_dead.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3159"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="387.0224"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_vibrato.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3161"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="387.0224"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/repeat_alternative.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3163"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.26968"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slide.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3165"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.26968"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_staccato.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3167"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="294.5206"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_popping.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3169"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="294.5206"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3171"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="148.96628"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_picking.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3173"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="148.96628"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_trill.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3175"
+       style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.29816"
+       x="488.76514"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tapping.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3177"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.29816"
+       x="536.90271"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_bar.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <g
+       id="g4068"
+       transform="matrix(0.6801604,0,0,0.6801604,92.878547,36.861792)">
+      <path
+         sodipodi:nodetypes="cc"
+         id="path3179"
+         d="M 594.00003,497.36216 C 617.85953,497.555 627.69114,488.66969 628.00003,460.36216"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         transform="matrix(0.749399,0,0,0.807087,168.8359,92.77775)"
+         d="M 622.22856,466.26925 L 611.6474,466.26925 L 601.06624,466.26925 L 606.35682,457.1057 L 611.6474,447.94215 L 616.93798,457.1057 L 622.22856,466.26925 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="1.5707963"
+         sodipodi:arg1="0.52359878"
+         sodipodi:r2="6.1090355"
+         sodipodi:r1="12.218071"
+         sodipodi:cy="460.16022"
+         sodipodi:cx="611.6474"
+         sodipodi:sides="3"
+         id="path4066"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="star" />
+    </g>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.44790959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 549.9004,372.99053 L 566.96245,356.41925"
+       id="path4072"
+       sodipodi:nodetypes="cc" />
+    <g
+       id="g5882"
+       transform="matrix(1.0269525,0,0,0.9790352,-142.70822,-105.10055)">
+      <path
+         sodipodi:nodetypes="cc"
+         id="path4074"
+         d="M 674.43107,471.32979 L 691.12154,488.11001"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.94400001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="469.35751"
+         x="672.41663"
+         height="6"
+         width="6"
+         id="rect4961"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="469.35751"
+         x="687.11115"
+         height="6"
+         width="6"
+         id="rect4963"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="483.72479"
+         x="687.11115"
+         height="6"
+         width="6"
+         id="rect4965"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         y="483.72479"
+         x="672.41663"
+         height="6"
+         width="6"
+         id="rect4967"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:23.50349617px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="485.84433"
+       y="333.74701"
+       id="text5893"
+       transform="scale(1.0327709,0.9682689)"
+       sodipodi:linespacing="125%"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_popping.png"
+       inkscape:export-xdpi="71.751251"
+       inkscape:export-ydpi="71.751251"><tspan
+         sodipodi:role="line"
+         id="tspan5895"
+         x="485.84433"
+         y="333.74701"
+         style="font-size:23.50349617px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">P</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:31.86540413px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="527.66418"
+       y="335.72772"
+       id="text5897"
+       transform="scale(1.0413973,0.9602483)"
+       sodipodi:linespacing="125%"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+       inkscape:export-xdpi="61.67075"
+       inkscape:export-ydpi="61.67075"><tspan
+         sodipodi:role="line"
+         id="tspan5899"
+         x="527.66418"
+         y="335.72772"
+         style="font-size:31.86540413px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">s</tspan></text>
+    <g
+       id="g5911"
+       transform="matrix(0.9778313,0,0,1.3442636,-87.783773,-189.18239)">
+      <text
+         transform="scale(0.902157,1.108454)"
+         id="text5901"
+         y="312.95807"
+         x="662.24274"
+         style="font-size:13.23942089px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+         xml:space="preserve"><tspan
+           y="312.95807"
+           x="662.24274"
+           id="tspan5903"
+           sodipodi:role="line">1</tspan></text>
+      <text
+         transform="scale(0.902157,1.108454)"
+         id="text5905"
+         y="312.87729"
+         x="682.92804"
+         style="font-size:13.23942089px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+         xml:space="preserve"><tspan
+           y="312.87729"
+           x="682.92804"
+           id="tspan5907"
+           sodipodi:role="line">3</tspan></text>
+      <path
+         id="path5909"
+         d="M 605.35606,346.58166 L 615.29346,336.53376"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.20514083px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <g
+       id="g5948"
+       transform="matrix(0.6801604,0,0,0.6801604,92.878547,36.861792)">
+      <g
+         transform="matrix(0.83334,0,0,1,120.4233,-6.810365)"
+         id="g5932">
+        <path
+           d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path5922" />
+        <path
+           d="M 683.05261,356.83776 L 683.05261,326.03045"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path5924" />
+      </g>
+      <path
+         transform="translate(0.645704,6.4635e-2)"
+         d="M 684.625 362.17465 A 2.0625 2.0625 0 1 1  680.5,362.17465 A 2.0625 2.0625 0 1 1  684.625 362.17465 z"
+         sodipodi:ry="2.0625"
+         sodipodi:rx="2.0625"
+         sodipodi:cy="362.17465"
+         sodipodi:cx="682.5625"
+         id="path5936"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.44400001;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         sodipodi:type="arc" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:25.10733032px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="452.36047"
+       y="250.97691"
+       id="text5954"
+       transform="scale(1.1044258,0.9054479)"
+       sodipodi:linespacing="125%"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tapping.png"
+       inkscape:export-xdpi="68.070755"
+       inkscape:export-ydpi="68.070755"><tspan
+         sodipodi:role="line"
+         id="tspan5956"
+         x="452.36047"
+         y="250.97691"
+         style="font-size:25.10733032px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">T</tspan></text>
+    <g
+       id="g6849"
+       transform="matrix(0.8038258,0,0,0.8952428,8.6184267,-25.377783)">
+      <path
+         sodipodi:nodetypes="ccc"
+         id="path5958"
+         d="M 667.00003,271.36215 L 683.00003,284.86215 L 698.00003,271.36215"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <text
+         sodipodi:linespacing="125%"
+         transform="scale(1.077771,0.927841)"
+         id="text6845"
+         y="293.27463"
+         x="627.5741"
+         style="font-size:17.07377625px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+         xml:space="preserve"><tspan
+           y="293.27463"
+           x="627.5741"
+           id="tspan6847"
+           sodipodi:role="line">X</tspan></text>
+    </g>
+    <g
+       id="g6860"
+       transform="matrix(0.6037383,0,0,0.7722113,145.67626,19.685128)">
+      <rect
+         transform="matrix(0.880153,-0.474689,0,1,0,0)"
+         y="507.96887"
+         x="671.18982"
+         height="5.25"
+         width="25.279688"
+         id="rect6854"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         transform="matrix(0.880153,-0.474689,0,1,0,0)"
+         y="515.96887"
+         x="671.18945"
+         height="5.25"
+         width="25.279675"
+         id="rect6856"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      <rect
+         transform="matrix(0.880153,-0.474689,0,1,0,0)"
+         y="523.96887"
+         x="671.18945"
+         height="5.25"
+         width="25.279675"
+         id="rect6858"
+         style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:11.30146599px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="554.96161"
+       y="173.9628"
+       id="text6865"
+       sodipodi:linespacing="125%"
+       transform="matrix(0.9705969,0,3.6240001e-2,1.0302939,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan6867"
+         x="554.96161"
+         y="173.9628"
+         style="font-size:30.13725471px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Vivaldi">tr</tspan></text>
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 499.14904,409.23966 C 499.14904,409.23966 503.10919,403.91788 505.09545,406.7731 C 506.77868,409.19273 507.2044,410.42046 508.34068,410.09152 C 509.45783,409.76811 510.19933,405.92246 513.65472,405.9502 C 516.22932,405.97125 515.73893,410.62861 519.95582,411.5253 C 518.46198,412.69577 515.8624,412.79055 514.47433,412.04608 C 513.15991,411.34111 512.59281,408.68166 511.12865,409.3599 C 509.70073,410.02135 509.44825,412.4489 506.56495,412.39759 C 503.73012,412.34628 503.85063,4 [...]
+       id="path6878"
+       sodipodi:nodetypes="cszscszzzc" />
+    <g
+       id="g21770"
+       transform="matrix(0.6801604,0,0,0.6801604,92.878547,36.861792)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\edit_mode_selection.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51">
+      <text
+         sodipodi:linespacing="125%"
+         transform="matrix(0,-1.06756,0.936716,0,0,0)"
+         id="text21766"
+         y="508.78696"
+         x="-580.42908"
+         style="font-size:44.71162415px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+         xml:space="preserve"><tspan
+           y="508.78696"
+           x="-580.42908"
+           id="tspan21768"
+           sodipodi:role="line">)</tspan></text>
+      <g
+         transform="translate(2.828427,-2.65165)"
+         id="g21749">
+        <g
+           id="g16378"
+           transform="matrix(0.83334,0,0,1.26493,-81.035,178.0078)">
+          <path
+             id="path16380"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z " />
+          <path
+             id="path16382"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+             d="M 683.05261,356.83776 L 683.05261,326.03045" />
+        </g>
+        <g
+           id="g15477"
+           transform="matrix(0.289054,1.22178,-1.331968,1.944028e-2,1154.889,24.19248)"
+           style="stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+          <path
+             id="path12800"
+             d="M 465.23106,595.7336 L 469.25,601.1875 L 469.09375,605.9375 L 465.65625,609.15625 L 460.65058,608.73406 L 455.28461,602.10158 C 455.28461,607.26321 459.09018,613.67006 463.85601,614.20682 L 469.22834,614.81189 L 479.5625,626.8125 L 483.71875,623.0625 L 474.22873,610.90263 L 473.66914,604.8712 C 473.19295,599.73852 470.29389,597.28414 465.23106,595.7336 z "
+             style="fill:#999999;stroke:#000000;stroke-width:0.60881829;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+             sodipodi:nodetypes="ccccccsccccsc" />
+          <path
+             transform="matrix(0.742775,-0.669541,0.636786,0.77104,0,0)"
+             style="fill:url(#linearGradient21760);fill-opacity:1;stroke-width:1.00046873"
+             d="M -30.319248,775.35716 C -29.236086,771.94908 -25.270866,771.78557 -23.146393,774.91204 L -22.971837,801.60352 L -30.244144,801.60352 L -30.319248,775.35716 z "
+             id="rect14581"
+             sodipodi:nodetypes="ccccc" />
+        </g>
+        <path
+           sodipodi:type="arc"
+           style="fill:#cccccc;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           id="path16432"
+           sodipodi:cx="449.8125"
+           sodipodi:cy="637.17468"
+           sodipodi:rx="4.3707523"
+           sodipodi:ry="4.0625"
+           d="M 454.18325 637.17468 A 4.3707523 4.0625 0 1 1  445.44175,637.17468 A 4.3707523 4.0625 0 1 1  454.18325 637.17468 z"
+           transform="matrix(0.819316,0.899502,-0.550332,0.501274,431.3845,-87.32081)" />
+        <path
+           style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 484.50072,592.19035 L 477.27498,598.81948 L 478.13677,604.94037 L 479.88494,606.41213 L 478.88807,599.72546 L 484.41233,593.98021 L 484.50072,592.19035 z "
+           id="path16435"
+           sodipodi:nodetypes="ccccccc" />
+        <path
+           style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 491.96404,614.17206 C 487.52149,616.98813 481.99224,615.61946 480.03711,615.85633 C 478.33,616.06315 476.50158,617.62409 476.50158,617.62409 L 476.3248,615.10502 L 478.79969,613.73501 C 478.79969,613.73501 480.86422,613.06577 485.56139,613.46984 C 489.14203,613.77787 492.60171,611.64036 493.64891,609.31558 L 495.85862,604.41003 C 495.35966,607.74069 493.83974,612.98308 491.96404,614.17206 z "
+           id="path17322"
+           sodipodi:nodetypes="cscccsscs" />
+      </g>
+      <text
+         inkscape:transform-center-x="11"
+         inkscape:transform-center-y="-10.103847"
+         transform="matrix(0.717341,-0.596996,0.540854,0.94392,0,0)"
+         sodipodi:linespacing="100%"
+         id="text21762"
+         y="709.63062"
+         x="105.70007"
+         style="font-size:14.4750843px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;ma [...]
+         xml:space="preserve"><tspan
+           style="font-size:14.47510719px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook"
+           y="709.63062"
+           x="105.70007"
+           id="tspan21764"
+           sodipodi:role="line">pp</tspan></text>
+    </g>
+    <g
+       id="g3407"
+       transform="matrix(9.7000401e-2,8.1066758e-3,-1.1753914e-2,0.1240388,298.45948,558.24877)">
+      <g
+         id="g3296"
+         transform="matrix(3.608871,12.53273,-16.62977,0.199414,8930.251,-5616.342)"
+         style="stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+        <path
+           id="path3298"
+           d="M 465.23106,595.7336 L 469.25,601.1875 L 469.09375,605.9375 L 465.65625,609.15625 L 460.65058,608.73406 L 455.28461,602.10158 C 455.28461,607.26321 459.09018,613.67006 463.85601,614.20682 L 469.22834,614.81189 L 479.5625,626.8125 L 483.71875,623.0625 L 474.22873,610.90263 L 473.66914,604.8712 C 473.19295,599.73852 470.29389,597.28414 465.23106,595.7336 z "
+           style="fill:#999999;stroke:#000000;stroke-width:0.60881829;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           sodipodi:nodetypes="ccccccsccccsc" />
+        <path
+           transform="matrix(0.742775,-0.669541,0.636786,0.77104,0,0)"
+           style="fill:url(#linearGradient3382);fill-opacity:1;stroke-width:1.00046873"
+           d="M -30.319248,775.35716 C -29.236086,771.94908 -25.270866,771.78557 -23.146393,774.91204 L -22.971837,801.60352 L -30.244144,801.60352 L -30.319248,775.35716 z "
+           id="path3300"
+           sodipodi:nodetypes="ccccc" />
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:#cccccc;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path3302"
+         sodipodi:cx="449.8125"
+         sodipodi:cy="637.17468"
+         sodipodi:rx="4.3707523"
+         sodipodi:ry="4.0625"
+         d="M 454.18325 637.17468 A 4.3707523 4.0625 0 1 1  445.44175,637.17468 A 4.3707523 4.0625 0 1 1  454.18325 637.17468 z"
+         transform="matrix(10.22925,9.226876,-6.870956,5.141948,-102.7821,-6760.219)" />
+      <path
+         style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:2.26335382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 560.37978,210.04348 L 470.16563,278.04351 L 480.92517,340.83013 L 502.75126,355.92709 L 490.30523,287.33683 L 559.27623,228.40344 L 560.37978,210.04348 z "
+         id="path3304"
+         sodipodi:nodetypes="ccccccc" />
+      <path
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.39503074;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 653.56016,435.52659 C 598.09443,464.41316 529.06114,450.37367 504.65112,452.80343 C 483.33767,454.92494 460.50964,470.93669 460.50964,470.93669 L 458.30252,445.09667 L 489.2018,431.04344 C 489.2018,431.04344 514.97768,424.17853 573.62237,428.32339 C 618.32705,431.48308 661.52154,409.55702 674.59594,385.70998 L 702.18442,335.39003 C 695.95484,369.55514 676.97848,423.33032 653.56016,435.52659 z "
+         id="path3306"
+         sodipodi:nodetypes="cscccsscs" />
+    </g>
+    <g
+       id="g21483"
+       transform="matrix(0.6801604,0,0,0.6801604,97.639667,38.222112)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/option_skin.png"
+       inkscape:export-xdpi="54.250492"
+       inkscape:export-ydpi="54.250492">
+      <a
+         style="fill:url(#linearGradient21491);fill-opacity:1"
+         transform="matrix(1.0935538,0,0,0.9875559,-81.605798,-98.323313)"
+         id="a3635">
+        <path
+           style="fill:url(#linearGradient21493);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.40568686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 573.46809,989.25496 C 561.43446,918.49524 637.03499,915.96748 645.83589,919.79716 C 674.43146,931.00974 654.3464,985.51774 650.05535,987.75336 C 644.89956,990.4395 620.42002,988.48086 620.50756,989.43376 C 620.52581,989.44042 615.71426,1009.4048 598.77641,1009.9117 C 590.46857,1010.1603 574.46337,997.70295 573.46809,989.25496 z "
+           id="path3633"
+           sodipodi:nodetypes="ccscsc" />
+      </a>
+      <path
+         transform="matrix(0.2599889,1.1741624e-2,-1.2264639e-2,0.2489019,425.79798,629.67088)"
+         d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="-0.66417817"
+         sodipodi:arg1="-1.2924967"
+         sodipodi:r2="7.7217226"
+         sodipodi:r1="3.8608613"
+         sodipodi:cy="839.52301"
+         sodipodi:cx="566.39252"
+         sodipodi:sides="5"
+         id="path3644"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#d22d2d;stroke-width:35.29999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.2599889,1.1741624e-2,-1.2264639e-2,0.2489019,443.91514,614.48309)"
+         d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="-0.66417817"
+         sodipodi:arg1="-1.2924967"
+         sodipodi:r2="7.7217226"
+         sodipodi:r1="3.8608613"
+         sodipodi:cy="839.52301"
+         sodipodi:cx="566.39252"
+         sodipodi:sides="5"
+         id="path3646"
+         style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#00a100;stroke-width:35.29906464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.272574,1.2309989e-2,-1.2858322e-2,0.2609503,464.35714,598.38051)"
+         d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+         inkscape:randomized="0"
+         inkscape:rounded="0"
+         inkscape:flatsided="false"
+         sodipodi:arg2="-0.66417817"
+         sodipodi:arg1="-1.2924967"
+         sodipodi:r2="7.7217226"
+         sodipodi:r1="3.8608613"
+         sodipodi:cy="839.52301"
+         sodipodi:cx="566.39252"
+         sodipodi:sides="5"
+         id="path3648"
+         style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#4b4bff;stroke-width:35.29906464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="star" />
+      <path
+         transform="matrix(0.1668918,0.1065936,-0.1502726,0.1897914,624.05104,651.11923)"
+         d="M 559.81399 897.85938 A 44.686672 47.620178 0 1 1  470.44065,897.85938 A 44.686672 47.620178 0 1 1  559.81399 897.85938 z"
+         sodipodi:ry="47.620178"
+         sodipodi:rx="44.686672"
+         sodipodi:cy="897.85938"
+         sodipodi:cx="515.12732"
+         id="path4681"
+         style="fill:#ffffff;fill-opacity:0.96703342;fill-rule:nonzero;stroke:#090303;stroke-width:8.73597431;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98360656"
+         sodipodi:type="arc" />
+    </g>
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 557.56346,455.06672 L 539.02909,455.06672"
+       id="path5612"
+       inkscape:connector-type="polyline" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 509.06904,455.06672 L 527.60341,455.06672"
+       id="path5617"
+       inkscape:connector-type="polyline" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 509.64684,499.7196 L 509.64684,518.25397"
+       id="path5619"
+       inkscape:connector-type="polyline" />
+    <path
+       style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 557.76819,500.87519 L 557.76819,482.34082"
+       id="path5621"
+       inkscape:connector-type="polyline" />
+    <g
+       id="g5456"
+       transform="matrix(0.6801604,0,0,0.6801604,92.397597,36.982022)">
+      <path
+         inkscape:connector-type="polyline"
+         id="path3479"
+         d="M 660.56485,524.48896 L 711.90839,524.46219"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.57923365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+      <g
+         id="g5451">
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.78366613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 658.18058,522.19705 L 658.18058,550.37123"
+           id="path3481"
+           inkscape:connector-type="polyline" />
+        <text
+           xml:space="preserve"
+           style="font-size:21.18201256px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+           x="664.1015"
+           y="546.73944"
+           id="text3483"><tspan
+             sodipodi:role="line"
+             id="tspan3485"
+             x="664.1015"
+             y="546.73944">*</tspan></text>
+      </g>
+    </g>
+    <rect
+       id="rect3503"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="342.15051"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_dead.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3505"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="387.04108"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/repeat_alternative.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3507"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="248.28836"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_staccato.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3509"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="294.53928"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3511"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="148.98497"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_trill.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <rect
+       id="rect3513"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.31683"
+       x="584.80994"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_bar.png"
+       inkscape:export-xdpi="35.083408"
+       inkscape:export-ydpi="35.083408" />
+    <g
+       id="g4645"
+       transform="matrix(2.1169218e-2,0,0,-2.1169218e-2,598.752,175.85533)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_treble.png"
+       inkscape:export-xdpi="112.41393"
+       inkscape:export-ydpi="112.41393">
+      <path
+         id="path4647"
+         d="M 297,1245 C 303,1248 304,1248 310,1248 C 318,1247 323,1244 334,1232 C 406,1158 466,1026 481,914 C 483,896 483,854 481,835 C 470,732 427,638 328,503 L 314,484 L 322,461 C 341,406 363,339 377,290 C 381,278 384,268 384,267 C 384,267 391,267 398,266 C 433,263 463,255 494,240 C 519,227 541,212 562,192 C 585,169 600,148 614,119 C 635,77 644,33 643,-11 C 642,-39 638,-60 629,-86 C 617,-124 595,-159 565,-189 C 539,-215 515,-231 483,-244 L 471,-249 L 471,-285 C 471,-336 468,-396 464,- [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g4687"
+       transform="matrix(2.5582031e-2,0,0,-2.5582031e-2,597.33302,216.29795)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_bass.png"
+       inkscape:export-xdpi="88.486824"
+       inkscape:export-ydpi="88.486824">
+      <path
+         id="path4689"
+         d="M 207,266 C 218,267 261,266 277,265 C 402,251 487,189 515,91 C 522,64 525,44 524,10 C 524,-33 519,-69 505,-107 C 454,-258 305,-383 33,-503 C 22,-508 12,-513 11,-514 C 5,-518 -1,-519 -7,-516 C -12,-514 -14,-512 -16,-507 C -19,-502 -18,-497 -16,-493 C -14,-489 -10,-486 12,-473 C 101,-420 166,-373 221,-325 C 238,-309 270,-277 284,-261 C 345,-190 377,-121 388,-41 C 390,-22 390,23 388,42 C 384,71 377,98 368,122 C 361,138 359,143 351,156 C 322,205 278,232 229,232 C 181,232 141,205  [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g4729"
+       transform="matrix(2.3963563e-2,0,0,-2.3963563e-2,597.45916,268.7724)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_alto.png"
+       inkscape:export-xdpi="92.514755"
+       inkscape:export-ydpi="92.514755">
+      <path
+         id="path4731"
+         d="M 9,498 C 12,500 18,500 72,500 L 132,500 L 135,497 C 137,495 139,493 140,491 C 142,487 142,450 142,0 C 142,-450 142,-487 140,-491 C 139,-493 137,-495 135,-497 L 132,-499 L 71,-499 L 10,-499 L 7,-497 C 5,-495 3,-493 2,-491 C 0,-487 0,-450 0,1 L 1,490 L 3,493 C 5,495 7,497 9,498 z M 201,498 C 204,500 207,500 218,500 C 231,500 232,499 235,497 C 243,491 242,514 242,254 L 242,21 L 248,26 C 273,50 296,87 309,120 C 317,144 322,171 324,200 C 324,213 325,215 327,218 C 329,221 336,225  [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g3548"
+       transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,602.52128,370.85889)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_flat.png"
+       inkscape:export-xdpi="40.069347"
+       inkscape:export-ydpi="40.069347">
+      <path
+         id="path3550"
+         d="M -12,469 C -1,471 17,469 24,464 C 26,463 26,452 23,289 C 21,194 20,116 20,116 C 20,115 24,117 28,120 C 49,134 75,142 101,144 C 128,145 150,137 169,118 C 188,100 198,76 200,50 C 201,31 197,14 188,-4 C 174,-31 154,-50 94,-91 C 56,-117 46,-125 34,-139 C 28,-145 21,-152 19,-153 C 10,-159 0,-158 -8,-151 C -10,-148 -12,-145 -13,-142 C -14,-140 -16,-33 -19,136 C -22,287 -24,422 -25,437 L -25,463 L -21,465 C -19,466 -15,468 -12,469 z M 94,102 C 87,106 76,107 67,104 C 49,99 34,83 28, [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g3590"
+       transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,601.62143,408.04533)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_natural.png"
+       inkscape:export-xdpi="40.012753"
+       inkscape:export-ydpi="40.012753">
+      <path
+         id="path3592"
+         d="M 7,380 C 15,382 33,380 40,375 C 41,374 41,359 40,288 C 39,240 39,201 39,201 C 39,200 64,204 95,209 C 127,215 152,218 153,218 C 158,217 162,213 165,208 L 167,204 L 170,-85 C 173,-317 174,-374 173,-374 C 172,-375 169,-376 166,-377 C 158,-380 142,-380 134,-377 C 131,-376 128,-375 127,-374 C 126,-373 126,-358 127,-287 C 128,-239 128,-200 128,-200 C 128,-199 103,-203 72,-208 C 40,-214 15,-217 14,-217 C 9,-216 5,-212 2,-207 L 0,-202 L -3,49 C -5,187 -6,317 -7,338 L -7,375 L -2,377 [...]
+         style="fill:currentColor" />
+    </g>
+    <g
+       id="g3632"
+       transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,598.54322,315.09834)"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_sharp.png"
+       inkscape:export-xdpi="32.806053"
+       inkscape:export-ydpi="32.806053">
+      <path
+         id="path3634"
+         d="M 191,373 C 198,377 209,374 213,365 C 215,361 215,358 215,288 C 215,247 215,214 216,214 C 216,214 225,218 236,222 C 259,231 262,232 268,227 C 275,222 275,221 275,181 C 275,147 275,144 273,141 C 272,139 270,137 269,136 C 267,135 255,129 241,124 L 216,113 L 215,32 C 215,-12 215,-49 216,-49 C 216,-49 225,-45 236,-41 C 259,-32 262,-31 268,-36 C 275,-41 275,-42 275,-82 C 275,-116 275,-119 273,-122 C 272,-124 270,-126 269,-127 C 267,-128 255,-134 241,-139 L 216,-150 L 215,-234 C 21 [...]
+         style="fill:currentColor" />
+    </g>
+    <rect
+       id="rect46109"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="147.69514"
+       x="105.04722"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\fretboard.png"
+       inkscape:export-xdpi="51.581112"
+       inkscape:export-ydpi="51.581112" />
+    <g
+       id="g46111"
+       transform="translate(-239.97292,-93.208822)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\fretboard.png"
+       inkscape:export-xdpi="51.581112"
+       inkscape:export-ydpi="51.581112">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#312e2e;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 356.78571,244.32647 C 353.66319,246.47578 354.37107,249.39116 354.46428,252.18361 C 355.58661,255.37224 356.79093,258.66335 356.60714,260.21933 C 355.07725,264.44552 351.99862,268.67171 353.21428,272.8979 C 354.19924,277.32599 360.76555,278.9478 362.5,279.1479 C 366.65572,279.50067 368.87789,279.08001 371.42857,278.79076 C 375.1921,277.79337 376.7561,276.58639 377.57397,274.45274 C 377.83672,273.33968 378.09947,272.07293 377.85714,270.75504 C 375.54249,264.60725 374.45744,2 [...]
+         id="path46113"
+         sodipodi:nodetypes="cccccccccccccccc" />
+      <path
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#d6d6d6;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 359.38895,267.92936 C 362.0294,270.76601 365.91542,269.08474 368.85913,269.19205 C 374.03586,269.61356 373.85893,272.66115 376.56155,272.34877 C 377.31917,272.09624 377.40333,271.33862 376.81408,270.07593 C 376.44181,268.23522 373.40705,263.38032 373.40482,260.60575 C 373.43341,258.94466 375.75999,256.44195 375.80393,253.28214 C 375.69313,252.48244 375.49215,251.17766 375.04632,250.88303 C 374.34436,251.14843 374.64966,254.43708 371.76332,255.55499 C 369.69466,256.98962 361 [...]
+         id="path46115"
+         sodipodi:nodetypes="ccccccccccc" />
+      <rect
+         style="fill:url(#linearGradient46199);fill-opacity:1;stroke:#d38d5f;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
+         id="rect46117"
+         width="4.7982244"
+         height="13.637059"
+         x="363.30331"
+         y="242.29672"
+         rx="0.2"
+         ry="0.2" />
+      <g
+         id="g46119"
+         transform="translate(0.911069,-92.225798)">
+        <rect
+           ry="0.69999999"
+           rx="0.69999999"
+           y="348.91721"
+           x="361.76089"
+           height="1.6414979"
+           width="6.4397225"
+           id="rect46121"
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
+        <g
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)"
+           id="g46123">
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46125"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-9.8489873,-11.237947)" />
+          <path
+             transform="translate(-4.4194174,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46127"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46129"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(1.1364216,-11.237947)" />
+          <path
+             transform="translate(6.8185297,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46131"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46133"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(12.2481,-11.237947)" />
+          <path
+             transform="translate(17.803939,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46135"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+        </g>
+      </g>
+      <g
+         transform="translate(0.911069,-87.427573)"
+         id="g46137">
+        <rect
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect46139"
+           width="6.4397225"
+           height="1.6414979"
+           x="361.76089"
+           y="348.91721"
+           rx="0.69999999"
+           ry="0.69999999" />
+        <g
+           id="g46141"
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)">
+          <path
+             transform="translate(-9.8489873,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46143"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46145"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-4.4194174,-11.237947)" />
+          <path
+             transform="translate(1.1364216,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46147"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46149"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(6.8185297,-11.237947)" />
+          <path
+             transform="translate(12.2481,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46151"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46153"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(17.803939,-11.237947)" />
+        </g>
+      </g>
+      <g
+         id="g46155"
+         transform="matrix(0.9818469,0.189675,-0.189675,0.9818469,73.746857,-146.26586)">
+        <rect
+           ry="0.69999999"
+           rx="0.69999999"
+           y="348.91721"
+           x="361.76089"
+           height="1.6414979"
+           width="6.4397225"
+           id="rect46157"
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
+        <g
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)"
+           id="g46159">
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46161"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-9.8489873,-11.237947)" />
+          <path
+             transform="translate(-4.4194174,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46163"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46165"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(1.1364216,-11.237947)" />
+          <path
+             transform="translate(6.8185297,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46167"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46169"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(12.2481,-11.237947)" />
+          <path
+             transform="translate(17.803939,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46171"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+        </g>
+      </g>
+      <g
+         id="g46173"
+         transform="translate(-9.9084e-2,-86.669959)">
+        <rect
+           style="fill:#333333;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect46175"
+           width="6.4397225"
+           height="1.1364216"
+           x="362.77106"
+           y="354.97812"
+           rx="0.2"
+           ry="0.13846155" />
+        <g
+           style="fill:#666666"
+           id="g46177"
+           transform="matrix(0.1606529,0,0,0.1606529,307.82015,299.98093)">
+          <path
+             transform="translate(-9.8489873,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46179"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46181"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-4.4194174,-11.237947)" />
+          <path
+             transform="translate(1.1364216,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46183"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46185"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(6.8185297,-11.237947)" />
+          <path
+             transform="translate(12.2481,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46187"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46189"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(17.803939,-11.237947)" />
+        </g>
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:#808080;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path46191"
+         sodipodi:cx="364.9176"
+         sodipodi:cy="356.17767"
+         sodipodi:rx="0.75761443"
+         sodipodi:ry="0.69447988"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         transform="translate(8.234675,-87.427573)" />
+      <path
+         transform="translate(10.633787,-85.280999)"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         sodipodi:ry="0.69447988"
+         sodipodi:rx="0.75761443"
+         sodipodi:cy="356.17767"
+         sodipodi:cx="364.9176"
+         id="path46193"
+         style="fill:#808080;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#4d4d4d;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path46195"
+         sodipodi:cx="364.9176"
+         sodipodi:cy="356.17767"
+         sodipodi:rx="0.75761443"
+         sodipodi:ry="0.69447988"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         transform="translate(5.583024,-89.069071)" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 372.01586,263.88874 L 373.65736,266.03532"
+         id="path46197" />
+    </g>
+    <rect
+       id="rect46201"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="-192.80984"
+       x="147.69516"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       transform="matrix(0,1,-1,0,0,0)" />
+    <g
+       id="g46203"
+       transform="matrix(0,1,-1,0,432.78378,-197.77037)">
+      <path
+         style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#312e2e;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 356.78571,244.32647 C 353.66319,246.47578 354.37107,249.39116 354.46428,252.18361 C 355.58661,255.37224 356.79093,258.66335 356.60714,260.21933 C 355.07725,264.44552 351.99862,268.67171 353.21428,272.8979 C 354.19924,277.32599 360.76555,278.9478 362.5,279.1479 C 366.65572,279.50067 368.87789,279.08001 371.42857,278.79076 C 375.1921,277.79337 376.7561,276.58639 377.57397,274.45274 C 377.83672,273.33968 378.09947,272.07293 377.85714,270.75504 C 375.54249,264.60725 374.45744,2 [...]
+         id="path46205"
+         sodipodi:nodetypes="cccccccccccccccc" />
+      <path
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#d6d6d6;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 359.38895,267.92936 C 362.0294,270.76601 365.91542,269.08474 368.85913,269.19205 C 374.03586,269.61356 373.85893,272.66115 376.56155,272.34877 C 377.31917,272.09624 377.40333,271.33862 376.81408,270.07593 C 376.44181,268.23522 373.40705,263.38032 373.40482,260.60575 C 373.43341,258.94466 375.75999,256.44195 375.80393,253.28214 C 375.69313,252.48244 375.49215,251.17766 375.04632,250.88303 C 374.34436,251.14843 374.64966,254.43708 371.76332,255.55499 C 369.69466,256.98962 361 [...]
+         id="path46207"
+         sodipodi:nodetypes="ccccccccccc" />
+      <rect
+         style="fill:url(#linearGradient46291);fill-opacity:1;stroke:#d38d5f;stroke-width:0.1;stroke-miterlimit:4;stroke-dasharray:none"
+         id="rect46209"
+         width="4.7982244"
+         height="13.637059"
+         x="363.30331"
+         y="242.29672"
+         rx="0.2"
+         ry="0.2" />
+      <g
+         id="g46211"
+         transform="translate(0.911069,-92.225798)">
+        <rect
+           ry="0.69999999"
+           rx="0.69999999"
+           y="348.91721"
+           x="361.76089"
+           height="1.6414979"
+           width="6.4397225"
+           id="rect46213"
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
+        <g
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)"
+           id="g46215">
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46217"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-9.8489873,-11.237947)" />
+          <path
+             transform="translate(-4.4194174,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46219"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46221"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(1.1364216,-11.237947)" />
+          <path
+             transform="translate(6.8185297,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46223"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46225"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(12.2481,-11.237947)" />
+          <path
+             transform="translate(17.803939,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46227"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+        </g>
+      </g>
+      <g
+         transform="translate(0.911069,-87.427573)"
+         id="g46229">
+        <rect
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect46231"
+           width="6.4397225"
+           height="1.6414979"
+           x="361.76089"
+           y="348.91721"
+           rx="0.69999999"
+           ry="0.69999999" />
+        <g
+           id="g46233"
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)">
+          <path
+             transform="translate(-9.8489873,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46235"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46237"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-4.4194174,-11.237947)" />
+          <path
+             transform="translate(1.1364216,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46239"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46241"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(6.8185297,-11.237947)" />
+          <path
+             transform="translate(12.2481,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46243"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46245"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(17.803939,-11.237947)" />
+        </g>
+      </g>
+      <g
+         id="g46247"
+         transform="matrix(0.9818469,0.189675,-0.189675,0.9818469,73.746857,-146.26586)">
+        <rect
+           ry="0.69999999"
+           rx="0.69999999"
+           y="348.91721"
+           x="361.76089"
+           height="1.6414979"
+           width="6.4397225"
+           id="rect46249"
+           style="fill:#e3dbdb;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none" />
+        <g
+           transform="matrix(0.1606529,0,0,0.1606529,306.81,294.42509)"
+           id="g46251">
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46253"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-9.8489873,-11.237947)" />
+          <path
+             transform="translate(-4.4194174,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46255"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46257"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(1.1364216,-11.237947)" />
+          <path
+             transform="translate(6.8185297,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46259"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46261"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(12.2481,-11.237947)" />
+          <path
+             transform="translate(17.803939,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46263"
+             style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+        </g>
+      </g>
+      <g
+         id="g46265"
+         transform="translate(-9.9084e-2,-86.669959)">
+        <rect
+           style="fill:#333333;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect46267"
+           width="6.4397225"
+           height="1.1364216"
+           x="362.77106"
+           y="354.97812"
+           rx="0.2"
+           ry="0.13846155" />
+        <g
+           style="fill:#666666"
+           id="g46269"
+           transform="matrix(0.1606529,0,0,0.1606529,307.82015,299.98093)">
+          <path
+             transform="translate(-9.8489873,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46271"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46273"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(-4.4194174,-11.237947)" />
+          <path
+             transform="translate(1.1364216,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46275"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46277"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(6.8185297,-11.237947)" />
+          <path
+             transform="translate(12.2481,-11.237947)"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             sodipodi:ry="1.9571706"
+             sodipodi:rx="2.1465743"
+             sodipodi:cy="355.54633"
+             sodipodi:cx="357.97281"
+             id="path46279"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             sodipodi:type="arc"
+             style="fill:#666666;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path46281"
+             sodipodi:cx="357.97281"
+             sodipodi:cy="355.54633"
+             sodipodi:rx="2.1465743"
+             sodipodi:ry="1.9571706"
+             d="M 360.11938 355.54633 A 2.1465743 1.9571706 0 1 1  355.82623,355.54633 A 2.1465743 1.9571706 0 1 1  360.11938 355.54633 z"
+             transform="translate(17.803939,-11.237947)" />
+        </g>
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:#808080;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path46283"
+         sodipodi:cx="364.9176"
+         sodipodi:cy="356.17767"
+         sodipodi:rx="0.75761443"
+         sodipodi:ry="0.69447988"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         transform="translate(8.234675,-87.427573)" />
+      <path
+         transform="translate(10.633787,-85.280999)"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         sodipodi:ry="0.69447988"
+         sodipodi:rx="0.75761443"
+         sodipodi:cy="356.17767"
+         sodipodi:cx="364.9176"
+         id="path46285"
+         style="fill:#808080;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:type="arc"
+         style="fill:#4d4d4d;fill-opacity:1;stroke:#999999;stroke-width:0;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path46287"
+         sodipodi:cx="364.9176"
+         sodipodi:cy="356.17767"
+         sodipodi:rx="0.75761443"
+         sodipodi:ry="0.69447988"
+         d="M 365.67522 356.17767 A 0.75761443 0.69447988 0 1 1  364.15999,356.17767 A 0.75761443 0.69447988 0 1 1  365.67522 356.17767 z"
+         transform="translate(5.583024,-89.069071)" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 372.01586,263.88874 L 373.65736,266.03532"
+         id="path46289" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="199.33298"
+       y="147.69514"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect46298" />
+    <g
+       id="g46300"
+       transform="translate(-112.68645,-233.57666)">
+      <path
+         sodipodi:nodetypes="cccccc"
+         id="path46302"
+         d="M 319.5425,392.25851 L 326.77266,385.82994 L 347.57424,385.82994 L 347.57424,417.14467 L 319.5425,417.14467 L 319.5425,392.25851 z "
+         style="opacity:1;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path46304"
+         d="M 319.77466,392.18383 L 327.03272,392.53521 L 326.45668,386.17002 L 319.77466,392.18383 z "
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.46774149;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path46306"
+         d="M 340.16186,394.29247 L 340.16186,399.14094 L 335.34158,399.14094 L 335.34158,403.82028 L 340.16186,403.82028 L 340.16186,408.64056 L 344.8412,408.64056 L 344.8412,403.79209 L 349.66148,403.79209 L 349.66148,399.11275 L 344.8412,399.11275 L 344.8412,394.29247 L 340.16186,394.29247 z "
+         style="opacity:1;fill:url(#linearGradient46308);fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="247.90439"
+       y="147.69516"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect46310" />
+    <g
+       id="g46312"
+       transform="translate(-64.273873,-282.45416)">
+      <path
+         id="path46314"
+         d="M 317.14286,466.38665 L 313.92857,441.8717 L 316.60714,437.29558 L 326.96429,436.80528 L 331.07143,440.72767 L 343.57143,440.07394 L 348.39286,464.91575 L 317.14286,466.38665 z "
+         style="opacity:0.8;fill:url(#linearGradient46322);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.47833687;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path46316"
+         d="M 318.39286,466.22321 L 317.5,442.19857 L 343.21429,441.05454 L 346.42857,464.91575 L 318.39286,466.22321 z "
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path46318"
+         d="M 319.10714,466.38665 L 320.53571,443.99633 L 347.32143,442.68887 L 345.89286,464.91575 L 319.10714,466.38665 z "
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path46320"
+         d="M 321.71428,446.93812 L 351.14285,445.46723 C 351.69685,445.46723 352.14285,445.87542 352.14285,446.38245 L 348.57142,464.32739 C 348.57142,464.83442 348.12542,465.24261 347.57142,465.24261 L 318.14285,466.71351 C 317.58885,466.71351 317.14285,466.30532 317.14285,465.79828 L 320.71428,447.85335 C 320.71428,447.34631 321.16028,446.93812 321.71428,446.93812 z "
+         style="opacity:0.78719991;fill:url(#linearGradient46324);fill-opacity:1;stroke:#000000;stroke-width:0.47833687;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="295.04727"
+       y="147.69516"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect46326" />
+    <g
+       id="g46328"
+       transform="translate(-17.500033,-425.42856)">
+      <path
+         d="M 329.89237,582.19858 L 346.57124,582.19858 L 341.38263,594.53987 L 324.70377,594.53987 L 329.89237,582.19858 z "
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path46330" />
+      <path
+         d="M 325.36076,590.2392 C 320.8422,590.51315 316.91065,594.47845 316.23949,597.10206 C 315.58524,599.65962 316.99792,605.95711 317.27166,607.24633 C 317.32233,607.48495 335.3486,609.7667 337.50068,609.7667 C 337.32165,608.47808 337.11719,602.34738 337.12299,600.45896 C 337.14863,592.19968 342.92469,590.59289 342.92469,590.59289 L 325.36076,590.2392 z "
+         style="fill:url(#linearGradient46350);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path46332" />
+      <path
+         d="M 350.31616,596.3078 C 350.31616,601.59804 350.16747,603.31024 349.87749,606.18941 C 349.70035,606.42297 338.12735,609.61157 337.95243,609.71086 C 337.62091,607.25452 337.32158,604.09884 337.16024,601.47186 C 336.90347,597.29055 338.38209,591.07056 343.89828,590.59603 C 347.56257,590.27771 350.31616,591.01756 350.31616,596.3078 z "
+         style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path46334" />
+      <path
+         d="M 335.53485,576.99555 L 347.60259,577.30259 C 347.60259,577.30259 343.00827,581.4236 340.40363,590.46128 C 336.76593,590.45942 331.00119,590.04235 328.33589,590.15425 C 331.05325,580.93901 335.53485,576.99555 335.53485,576.99555 z "
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path46336" />
+      <path
+         d="M 323.04971,594.62001 C 323.04971,594.62001 332.88394,595.31498 333.04129,595.31498 C 333.19864,595.31498 334.85079,592.83294 334.85079,592.83294 L 325.25258,592.43581 L 323.04971,594.62001 z "
+         style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path46338" />
+      <rect
+         width="13.617006"
+         height="2.6806109"
+         x="321.83487"
+         y="566.54987"
+         transform="matrix(0.993753,0.111602,0,1,0,0)"
+         style="fill:url(#linearGradient46352);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50156909;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect46340" />
+      <path
+         d="M 335.59969,580.34416 L 343.01028,580.42532"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path46342" />
+      <path
+         d="M 333.25408,583.54052 L 340.66467,583.62168"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path46344" />
+      <path
+         d="M 331.74,586.86786 L 339.1506,587.03017"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path46346" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path46348"
+         d="M 315.71428,591.6479 L 315.71428,611.29075 L 333.92857,600.57647 L 315.71428,591.6479 z "
+         style="fill:url(#linearGradient46354);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    </g>
+    <rect
+       id="rect46356"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="147.69516"
+       x="343.61868"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045" />
+    <g
+       id="g46358"
+       transform="translate(31.071397,-425.42859)">
+      <path
+         id="path46360"
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 329.89237,582.19858 L 346.57124,582.19858 L 341.38263,594.53987 L 324.70377,594.53987 L 329.89237,582.19858 z " />
+      <path
+         id="path46362"
+         style="fill:url(#linearGradient46382);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 325.36076,590.2392 C 320.8422,590.51315 316.91065,594.47845 316.23949,597.10206 C 315.58524,599.65962 316.99792,605.95711 317.27166,607.24633 C 317.32233,607.48495 335.3486,609.7667 337.50068,609.7667 C 337.32165,608.47808 337.11719,602.34738 337.12299,600.45896 C 337.14863,592.19968 342.92469,590.59289 342.92469,590.59289 L 325.36076,590.2392 z " />
+      <path
+         id="path46364"
+         style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 350.31616,596.3078 C 350.31616,601.59804 350.16747,603.31024 349.87749,606.18941 C 349.70035,606.42297 338.12735,609.61157 337.95243,609.71086 C 337.62091,607.25452 337.32158,604.09884 337.16024,601.47186 C 336.90347,597.29055 338.38209,591.07056 343.89828,590.59603 C 347.56257,590.27771 350.31616,591.01756 350.31616,596.3078 z " />
+      <path
+         id="path46366"
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 335.53485,576.99555 L 347.60259,577.30259 C 347.60259,577.30259 343.00827,581.4236 340.40363,590.46128 C 336.76593,590.45942 331.00119,590.04235 328.33589,590.15425 C 331.05325,580.93901 335.53485,576.99555 335.53485,576.99555 z " />
+      <path
+         id="path46368"
+         style="fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 323.04971,594.62001 C 323.04971,594.62001 332.88394,595.31498 333.04129,595.31498 C 333.19864,595.31498 334.85079,592.83294 334.85079,592.83294 L 325.25258,592.43581 L 323.04971,594.62001 z " />
+      <rect
+         id="rect46370"
+         style="fill:url(#linearGradient46384);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50156909;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.993753,0.111602,0,1,0,0)"
+         y="566.54987"
+         x="321.83487"
+         height="2.6806109"
+         width="13.617006" />
+      <path
+         id="path46372"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 335.59969,580.34416 L 343.01028,580.42532" />
+      <path
+         id="path46374"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 333.25408,583.54052 L 340.66467,583.62168" />
+      <path
+         id="path46376"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.45059812px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 331.74,586.86786 L 339.1506,587.03017" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="opacity:0.82480014;fill:#e6e6e6;fill-opacity:1;stroke:#333333;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="path46378"
+       sodipodi:cx="326.40555"
+       sodipodi:cy="634.53784"
+       sodipodi:rx="9.4701805"
+       sodipodi:ry="7.7024131"
+       d="M 335.87573 634.53784 A 9.4701805 7.7024131 0 1 1  316.93537,634.53784 A 9.4701805 7.7024131 0 1 1  335.87573 634.53784 z"
+       transform="translate(31.071397,-471.8956)" />
+    <path
+       style="fill:url(#linearGradient46386);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 362.1489,169.58703 C 362.4574,174.46944 371.82691,179.35184 377.55372,184.23425 C 373.26295,178.67127 370.28614,169.16642 364.67428,167.56673 L 362.1489,169.58703 z "
+       id="path46380"
+       sodipodi:nodetypes="cccc" />
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56373"
+       width="24.642857"
+       height="24.642857"
+       x="187.7767"
+       y="84.759689"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_play_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56375"
+       transform="translate(28.490947,-673.6739)"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_play_1.png">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path56377"
+         d="M 163.21429,762.8979 L 163.21429,778.96933 C 169.18918,776.60095 175.46615,774.07658 180,770.75504 C 174.66202,767.10698 169.02779,764.64388 163.21429,762.8979 z "
+         style="fill:url(#linearGradient56421);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56423);stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56379"
+         d="M 171.79136,769.68303 C 168.72709,769.68303 165.85828,770.1268 163.49554,770.88459 L 163.49554,777.98214 C 169.16989,775.88352 175.12269,773.64741 179.45825,770.71693 C 177.21614,770.06809 174.60773,769.68302 171.79136,769.68303 z "
+         style="fill:url(#linearGradient56425);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56427);stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <rect
+       y="84.759689"
+       x="160.50253"
+       height="24.642857"
+       width="24.642857"
+       id="rect56381"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_stop_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56383"
+       transform="translate(28.490947,-673.6739)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_stop_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <rect
+         y="762.005"
+         x="135.89285"
+         height="17.5"
+         width="17.142857"
+         id="rect56385"
+         style="opacity:1;fill:url(#linearGradient56429);fill-opacity:1;stroke:url(#linearGradient56431);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         id="path56387"
+         d="M 150.86476,765.59848 C 142.86027,765.59848 136.3852,770.59601 136.3852,776.76416 C 136.3852,777.31124 136.43575,777.85021 136.53447,778.37632 L 152.59634,778.37632 L 152.59634,765.68805 C 152.03048,765.63628 151.44859,765.59848 150.86476,765.59848 z "
+         style="opacity:1;fill:url(#linearGradient56433);fill-opacity:1;stroke:url(#linearGradient56435);stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       y="84.402573"
+       x="214.91953"
+       height="24.642857"
+       width="24.642857"
+       id="rect56389"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_next_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56391"
+       transform="translate(-1.8136333,-673.16882)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_next_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         id="path56393"
+         d="M 225.71875,761.8125 L 225.71875,764.9375 C 223.92957,763.86297 222.12721,762.94975 220.28125,762.1875 L 220.28125,778.25 C 222.09355,777.2623 223.93792,776.24471 225.71875,775.15625 L 225.71875,777.90625 C 230.06444,775.53788 234.63991,773.00904 237.9375,769.6875 C 234.05505,766.03946 229.94705,763.55848 225.71875,761.8125 z "
+         style="fill:url(#linearGradient56437);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56439);stroke-width:0.51170009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56395"
+         d="M 232.98708,769.15625 C 228.10674,769.15625 223.72025,770.07248 220.63839,771.51353 L 220.63839,776.7781 C 222.36821,775.95027 224.12864,775.09738 225.82843,774.1851 L 225.82843,776.48998 C 229.97633,774.50496 234.34356,772.38544 237.49107,769.60151 C 237.40259,769.5285 237.31136,769.46388 237.22262,769.39198 C 235.86564,769.2389 234.45375,769.15625 232.98708,769.15625 z "
+         style="fill:url(#linearGradient56441);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56397"
+       width="24.642857"
+       height="24.642857"
+       x="243.20383"
+       y="84.402573"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_last_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56399"
+       transform="translate(28.490947,-673.6739)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_last_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         id="path56401"
+         d="M 228,761.8125 L 228,765.8125 C 226.29186,764.39766 224.55769,763.24818 222.78125,762.3125 L 222.78125,764.90625 C 221.43999,763.89862 220.06869,763.03999 218.6875,762.3125 L 218.6875,778.53125 C 220.05005,777.58403 221.4374,776.59951 222.78125,775.5625 L 222.78125,778.53125 C 224.53493,777.31213 226.31217,776.04329 228,774.65625 L 228,778.03125 C 231.43626,775.64245 235.04875,773.1002 237.65625,769.75 C 234.58628,766.07047 231.34344,763.57354 228,761.8125 z "
+         style="fill:url(#linearGradient56443);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56445);stroke-width:0.45697752;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56403"
+         d="M 231.25598,768.78125 C 226.36683,768.78125 221.96919,770.19175 218.86607,772.43189 L 218.86607,777.28125 C 220.19014,776.45547 221.53831,775.59717 222.8442,774.69311 L 222.8442,777.28125 C 224.54835,776.21843 226.2754,775.11226 227.91556,773.90304 L 227.91556,776.84535 C 231.25478,774.76281 234.76525,772.54649 237.29911,769.6258 C 237.27089,769.59547 237.23625,769.57422 237.208,769.54407 C 235.3508,769.07203 233.3556,768.78125 231.25598,768.78125 z "
+         style="fill:url(#linearGradient56447);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56405"
+       width="24.642857"
+       height="24.642857"
+       x="-157.74002"
+       y="84.402573"
+       transform="scale(-1,1)"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_previous_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       transform="matrix(-1,0,0,1,374.47318,-673.16882)"
+       id="g56407"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_previous_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         style="fill:url(#linearGradient56449);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56451);stroke-width:0.51170009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 225.71875,761.8125 L 225.71875,764.9375 C 223.92957,763.86297 222.12721,762.94975 220.28125,762.1875 L 220.28125,778.25 C 222.09355,777.2623 223.93792,776.24471 225.71875,775.15625 L 225.71875,777.90625 C 230.06444,775.53788 234.63991,773.00904 237.9375,769.6875 C 234.05505,766.03946 229.94705,763.55848 225.71875,761.8125 z "
+         id="path56409" />
+      <path
+         style="fill:url(#linearGradient56453);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 232.98708,769.15625 C 228.10674,769.15625 223.72025,770.07248 220.63839,771.51353 L 220.63839,776.7781 C 222.36821,775.95027 224.12864,775.09738 225.82843,774.1851 L 225.82843,776.48998 C 229.97633,774.50496 234.34356,772.38544 237.49107,769.60151 C 237.40259,769.5285 237.31136,769.46388 237.22262,769.39198 C 235.86564,769.2389 234.45375,769.15625 232.98708,769.15625 z "
+         id="path56411" />
+    </g>
+    <rect
+       y="84.402573"
+       x="-129.45572"
+       height="24.642857"
+       width="24.642857"
+       id="rect56413"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       transform="scale(-1,1)"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_first_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56415"
+       transform="matrix(-1,0,0,1,344.1686,-673.6739)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_first_1.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         style="fill:url(#linearGradient56455);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56457);stroke-width:0.45697752;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 228,761.8125 L 228,765.8125 C 226.29186,764.39766 224.55769,763.24818 222.78125,762.3125 L 222.78125,764.90625 C 221.43999,763.89862 220.06869,763.03999 218.6875,762.3125 L 218.6875,778.53125 C 220.05005,777.58403 221.4374,776.59951 222.78125,775.5625 L 222.78125,778.53125 C 224.53493,777.31213 226.31217,776.04329 228,774.65625 L 228,778.03125 C 231.43626,775.64245 235.04875,773.1002 237.65625,769.75 C 234.58628,766.07047 231.34344,763.57354 228,761.8125 z "
+         id="path56417" />
+      <path
+         style="fill:url(#linearGradient56459);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 231.25598,768.78125 C 226.36683,768.78125 221.96919,770.19175 218.86607,772.43189 L 218.86607,777.28125 C 220.19014,776.45547 221.53831,775.59717 222.8442,774.69311 L 222.8442,777.28125 C 224.54835,776.21843 226.2754,775.11226 227.91556,773.90304 L 227.91556,776.84535 C 231.25478,774.76281 234.76525,772.54649 237.29911,769.6258 C 237.27089,769.59547 237.23625,769.57422 237.208,769.54407 C 235.3508,769.07203 233.3556,768.78125 231.25598,768.78125 z "
+         id="path56419" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56623"
+       width="24.642857"
+       height="24.642857"
+       x="386.69745"
+       y="85.396027"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_play_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <path
+       style="fill:url(#linearGradient56667);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56669);stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 390.62605,89.860362 L 390.62605,105.93179 C 396.60094,103.56341 402.87791,101.03904 407.41176,97.717502 C 402.07378,94.069442 396.43955,91.606342 390.62605,89.860362 z "
+       id="path56625"
+       sodipodi:nodetypes="cccc"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_play_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <rect
+       y="85.396027"
+       x="331.13913"
+       height="24.642857"
+       width="24.642857"
+       id="rect56627"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_stop_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <g
+       id="g56629"
+       transform="translate(199.12749,-673.03754)"
+       style="fill:url(#linearGradient56671)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_stop_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321">
+      <rect
+         y="762.005"
+         x="135.89285"
+         height="17.5"
+         width="17.142857"
+         id="rect56631"
+         style="opacity:1;fill:url(#linearGradient56673);fill-opacity:1;stroke:url(#linearGradient56675);stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         id="path56633"
+         d="M 150.86476,765.59848 C 142.86027,765.59848 136.3852,770.59601 136.3852,776.76416 C 136.3852,777.31124 136.43575,777.85021 136.53447,778.37632 L 152.59634,778.37632 L 152.59634,765.68805 C 152.03048,765.63628 151.44859,765.59848 150.86476,765.59848 z "
+         style="opacity:1;fill:url(#linearGradient56677);fill-opacity:1;stroke:url(#linearGradient56679);stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56635"
+       width="24.642857"
+       height="24.642857"
+       x="-328.37662"
+       y="85.03891"
+       transform="scale(-1,1)"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_previous_2.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       transform="matrix(-1,0,0,1,545.10972,-672.53246)"
+       id="g56637"
+       style="fill:url(#linearGradient56681)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_previous_2.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         style="fill:url(#linearGradient56683);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56685);stroke-width:0.51170009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 225.71875,761.8125 L 225.71875,764.9375 C 223.92957,763.86297 222.12721,762.94975 220.28125,762.1875 L 220.28125,778.25 C 222.09355,777.2623 223.93792,776.24471 225.71875,775.15625 L 225.71875,777.90625 C 230.06444,775.53788 234.63991,773.00904 237.9375,769.6875 C 234.05505,766.03946 229.94705,763.55848 225.71875,761.8125 z "
+         id="path56639" />
+      <path
+         style="fill:url(#linearGradient56687);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 232.98708,769.15625 C 228.10674,769.15625 223.72025,770.07248 220.63839,771.51353 L 220.63839,776.7781 C 222.36821,775.95027 224.12864,775.09738 225.82843,774.1851 L 225.82843,776.48998 C 229.97633,774.50496 234.34356,772.38544 237.49107,769.60151 C 237.40259,769.5285 237.31136,769.46388 237.22262,769.39198 C 235.86564,769.2389 234.45375,769.15625 232.98708,769.15625 z "
+         id="path56641" />
+    </g>
+    <rect
+       y="85.03891"
+       x="-300.09232"
+       height="24.642857"
+       width="24.642857"
+       id="rect56643"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       transform="scale(-1,1)"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_first_2.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304" />
+    <g
+       id="g56645"
+       transform="matrix(-1,0,0,1,514.80514,-673.03754)"
+       style="fill:url(#linearGradient56689)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_first_2.png"
+       inkscape:export-xdpi="132.44304"
+       inkscape:export-ydpi="132.44304">
+      <path
+         style="fill:url(#linearGradient56691);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56693);stroke-width:0.45697752;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 228,761.8125 L 228,765.8125 C 226.29186,764.39766 224.55769,763.24818 222.78125,762.3125 L 222.78125,764.90625 C 221.43999,763.89862 220.06869,763.03999 218.6875,762.3125 L 218.6875,778.53125 C 220.05005,777.58403 221.4374,776.59951 222.78125,775.5625 L 222.78125,778.53125 C 224.53493,777.31213 226.31217,776.04329 228,774.65625 L 228,778.03125 C 231.43626,775.64245 235.04875,773.1002 237.65625,769.75 C 234.58628,766.07047 231.34344,763.57354 228,761.8125 z "
+         id="path56647" />
+      <path
+         style="fill:url(#linearGradient56695);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1"
+         d="M 231.25598,768.78125 C 226.36683,768.78125 221.96919,770.19175 218.86607,772.43189 L 218.86607,777.28125 C 220.19014,776.45547 221.53831,775.59717 222.8442,774.69311 L 222.8442,777.28125 C 224.54835,776.21843 226.2754,775.11226 227.91556,773.90304 L 227.91556,776.84535 C 231.25478,774.76281 234.76525,772.54649 237.29911,769.6258 C 237.27089,769.59547 237.23625,769.57422 237.208,769.54407 C 235.3508,769.07203 233.3556,768.78125 231.25598,768.78125 z "
+         id="path56649" />
+    </g>
+    <rect
+       y="85.03891"
+       x="414.34537"
+       height="24.642857"
+       width="24.642857"
+       id="rect56651"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_next_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <g
+       style="fill:url(#linearGradient56697)"
+       id="g56653"
+       transform="translate(197.61224,-672.53246)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_next_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321">
+      <path
+         id="path56655"
+         d="M 225.71875,761.8125 L 225.71875,764.9375 C 223.92957,763.86297 222.12721,762.94975 220.28125,762.1875 L 220.28125,778.25 C 222.09355,777.2623 223.93792,776.24471 225.71875,775.15625 L 225.71875,777.90625 C 230.06444,775.53788 234.63991,773.00904 237.9375,769.6875 C 234.05505,766.03946 229.94705,763.55848 225.71875,761.8125 z "
+         style="fill:url(#linearGradient56699);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56701);stroke-width:0.51170009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56657"
+         d="M 232.98708,769.15625 C 228.10674,769.15625 223.72025,770.07248 220.63839,771.51353 L 220.63839,776.7781 C 222.36821,775.95027 224.12864,775.09738 225.82843,774.1851 L 225.82843,776.48998 C 229.97633,774.50496 234.34356,772.38544 237.49107,769.60151 C 237.40259,769.5285 237.31136,769.46388 237.22262,769.39198 C 235.86564,769.2389 234.45375,769.15625 232.98708,769.15625 z "
+         style="fill:url(#linearGradient56703);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56659"
+       width="24.642857"
+       height="24.642857"
+       x="442.62967"
+       y="85.03891"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_last_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <g
+       style="fill:url(#linearGradient56705)"
+       transform="translate(227.91682,-673.03754)"
+       id="g56661"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_last_2.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321">
+      <path
+         id="path56663"
+         d="M 228,761.8125 L 228,765.8125 C 226.29186,764.39766 224.55769,763.24818 222.78125,762.3125 L 222.78125,764.90625 C 221.43999,763.89862 220.06869,763.03999 218.6875,762.3125 L 218.6875,778.53125 C 220.05005,777.58403 221.4374,776.59951 222.78125,775.5625 L 222.78125,778.53125 C 224.53493,777.31213 226.31217,776.04329 228,774.65625 L 228,778.03125 C 231.43626,775.64245 235.04875,773.1002 237.65625,769.75 C 234.58628,766.07047 231.34344,763.57354 228,761.8125 z "
+         style="fill:url(#linearGradient56707);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient56709);stroke-width:0.45697752;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path56665"
+         d="M 231.25598,768.78125 C 226.36683,768.78125 221.96919,770.19175 218.86607,772.43189 L 218.86607,777.28125 C 220.19014,776.45547 221.53831,775.59717 222.8442,774.69311 L 222.8442,777.28125 C 224.54835,776.21843 226.2754,775.11226 227.91556,773.90304 L 227.91556,776.84535 C 231.25478,774.76281 234.76525,772.54649 237.29911,769.6258 C 237.27089,769.59547 237.23625,769.57422 237.208,769.54407 C 235.3508,769.07203 233.3556,768.78125 231.25598,768.78125 z "
+         style="fill:url(#linearGradient56711);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       transform="scale(-1,1)"
+       style="opacity:1;fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+       id="rect56713"
+       width="24.642857"
+       height="24.642857"
+       x="-383.42987"
+       y="85.03891"
+       rx="3"
+       ry="3"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_pause.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <rect
+       style="fill:url(#linearGradient3722);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3738);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="rect3714"
+       width="6.060915"
+       height="17.67767"
+       x="363.35898"
+       y="88.82135"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_pause.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <rect
+       y="88.82135"
+       x="372.95541"
+       height="17.67767"
+       width="6.060915"
+       id="rect6852"
+       style="fill:url(#linearGradient6854);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient6856);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\transport_pause.png"
+       inkscape:export-xdpi="132.44321"
+       inkscape:export-ydpi="132.44321" />
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="200.76157"
+       y="199.48087"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect6871" />
+    <g
+       id="g6873"
+       transform="translate(-111.78574,-276.14284)">
+      <rect
+         id="rect6875"
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50002563;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.6880851,-0.72563,0.7156989,0.698409,0,0)"
+         y="579.13556"
+         x="-139.53285"
+         height="8.1236973"
+         width="9.9346428" />
+      <path
+         id="path6877"
+         style="fill:url(#linearGradient6883);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 322.15549,498.51581 L 331.24526,507.386 L 345.19505,492.67507 L 345.18921,492.66938 C 348.9382,488.60428 349.98666,483.41283 347.51339,480.99931 C 345.04012,478.58579 339.96998,479.8527 336.11111,483.81057 L 336.10527,483.80488 L 322.15549,498.51581 z " />
+      <path
+         id="path6879"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38604188;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 345.24279,485.51892 C 345.24279,486.79461 344.29483,487.82876 343.12545,487.82876 C 341.95607,487.82876 341.0081,486.79461 341.0081,485.51892 C 341.0081,484.24324 341.95607,483.20909 343.12545,483.20909 C 344.29483,483.20909 345.24279,484.24324 345.24279,485.51892 z " />
+      <path
+         id="path6881"
+         d="M 322.22677,504.05281 L 326.70179,508.17154"
+         style="fill:#b3b3b3;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.6, 1.6;stroke-dashoffset:0;stroke-opacity:1" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="248.9758"
+       y="199.4809"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect6885" />
+    <g
+       id="g6887"
+       transform="translate(-63.202443,-323.09743)">
+      <rect
+         id="rect6889"
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.50002563;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.6880851,-0.72563,0.7156989,0.698409,0,0)"
+         y="611.17981"
+         x="-173.39938"
+         height="8.1236973"
+         width="9.9346428" />
+      <path
+         id="path6891"
+         style="fill:url(#linearGradient6899);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 321.78646,545.47037 L 330.87623,554.34056 L 344.82602,539.62963 L 344.82018,539.62394 C 348.56917,535.55884 349.61763,530.36739 347.14436,527.95387 C 344.67109,525.54035 339.60095,526.80726 335.74208,530.76513 L 335.73624,530.75944 L 321.78646,545.47037 z " />
+      <path
+         id="path6893"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.38604188;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 344.87376,532.47348 C 344.87376,533.74917 343.9258,534.78332 342.75642,534.78332 C 341.58704,534.78332 340.63907,533.74917 340.63907,532.47348 C 340.63907,531.1978 341.58704,530.16365 342.75642,530.16365 C 343.9258,530.16365 344.87376,531.1978 344.87376,532.47348 z " />
+      <path
+         id="path6895"
+         d="M 321.85774,551.00737 L 326.33276,555.1261"
+         style="fill:#b3b3b3;fill-rule:evenodd;stroke:#4d4d4d;stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.6, 1.6;stroke-dashoffset:0;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccc"
+         id="path6897"
+         d="M 319.20536,530.05615 C 328.00186,533.54983 339.28994,534.71803 337.21846,548.35518 L 330.64224,550.92847 L 340.3636,561.22168 L 349.22719,545.21003 L 343.79467,546.35372 C 341.83779,536.76149 334.86363,530.51411 319.20536,530.05615 z "
+         style="opacity:0.82480014;fill:url(#linearGradient6901);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       id="g29580"
+       transform="translate(-110.00002,83.999995)">
+      <path
+         transform="translate(158.5,4)"
+         d="M 503.5 755.86218 A 62 8.5 0 1 1  379.5,755.86218 A 62 8.5 0 1 1  503.5 755.86218 z"
+         sodipodi:ry="8.5"
+         sodipodi:rx="62"
+         sodipodi:cy="755.86218"
+         sodipodi:cx="441.5"
+         id="path29568"
+         style="opacity:1;fill:url(#radialGradient29636);fill-opacity:1;stroke:#ff6600;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path20696"
+         d="M 594.5,614.86218 C 552.40848,617.69466 561.64571,666.64838 554.5,676.36218 L 539.5,707.86218 L 580.5,759.36218 C 584.76589,759.73453 585.4146,760.70975 597,759.86218 C 607.4517,760.21727 615.73083,754.05466 625,750.86218 C 645.93916,739.72991 650.56211,719.35832 651.5,710.86218 C 646.92624,680.73098 638.84915,671.11644 635,656.86218 C 628.41474,635.94744 621.90069,614.96149 594.5,614.86218 z "
+         style="opacity:1;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="csssc"
+         id="path21679"
+         d="M 636.98486,720.02026 C 636.98486,744.1619 618.95964,758.34702 596.75,758.34702 C 574.54036,758.34702 556.51515,738.7538 556.51515,714.61216 C 556.51515,690.47052 574.54036,670.87731 596.75,670.87731 C 618.95964,670.87731 636.98486,695.87862 636.98486,720.02026 z "
+         style="opacity:1;fill:url(#linearGradient29638);fill-opacity:1;stroke:#e6e6e6;stroke-width:1.63029492;stroke-linecap:round;stroke-miterlimit:4" />
+      <g
+         id="g11715">
+        <path
+           style="fill:url(#linearGradient29640);fill-opacity:1;fill-rule:evenodd;stroke:#d4aa00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 621.78571,738.07647 C 601.4768,738.83145 597.50087,758.48065 602.14286,761.6479 C 603.92524,764.7448 612.14769,764.08596 621.42857,764.1479 C 632.20032,764.09863 642.79369,764.76381 643.21428,760.21933 C 644.26956,741.64371 627.94331,737.79123 621.78571,738.07647 z "
+           id="path9717"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           transform="matrix(0.9300312,0,0,1.1125113,46.341387,-82.861238)"
+           style="opacity:1;fill:url(#linearGradient29642);fill-opacity:1;stroke:#d4aa00;stroke-width:0;stroke-miterlimit:4"
+           d="M 637.14287,750.75507 C 637.14287,756.76792 628.98287,759.72178 618.92859,759.72178 C 608.8743,759.72178 600.7143,756.76792 600.7143,750.75507 C 600.7143,744.74221 608.8743,739.86221 618.92859,739.86221 C 628.98287,739.86221 637.14287,744.74221 637.14287,750.75507 z "
+           id="path10700"
+           sodipodi:nodetypes="csssc" />
+      </g>
+      <g
+         transform="translate(-50.5,0)"
+         id="g20684">
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path20686"
+           d="M 621.78571,738.07647 C 601.4768,738.83145 597.50087,758.48065 602.14286,761.6479 C 603.92524,764.7448 612.14769,764.08596 621.42857,764.1479 C 632.20032,764.09863 642.79369,764.76381 643.21428,760.21933 C 644.26956,741.64371 627.94331,737.79123 621.78571,738.07647 z "
+           style="fill:url(#linearGradient29644);fill-opacity:1;fill-rule:evenodd;stroke:#d4aa00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="csssc"
+           id="path20688"
+           d="M 637.14287,750.75507 C 637.14287,756.76792 628.98287,759.72178 618.92859,759.72178 C 608.8743,759.72178 600.7143,756.76792 600.7143,750.75507 C 600.7143,744.74221 608.8743,739.86221 618.92859,739.86221 C 628.98287,739.86221 637.14287,744.74221 637.14287,750.75507 z "
+           style="opacity:1;fill:url(#linearGradient29646);fill-opacity:1;stroke:#d4aa00;stroke-width:0;stroke-miterlimit:4"
+           transform="matrix(0.9300312,0,0,1.1125113,46.341387,-82.861238)" />
+      </g>
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         id="path11731"
+         d="M 587.5,719.1479 C 594.71083,712.39959 632.2891,710.86762 631.07143,703.07647 C 630.43514,700.13312 598.26051,705.27759 593.57143,697.00504 C 586.65564,692.01313 591.68263,668.84065 587.5,668.79076 C 582.61905,668.31457 572.7381,689.37796 567.5,693.07647 C 562.15456,695.41451 542.57403,691.61453 526.78571,703.07647 C 519.40952,709.86219 528.1022,727.36219 533.92857,736.29076 C 540.40541,746.90851 555.37198,758.40393 562.85714,754.50504 C 577.09461,747.71461 577.19406,729.7105 [...]
+         style="opacity:1;fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="ccccccc"
+         id="path12719"
+         d="M 587.85714,693.79076 C 569.43249,693.87082 549.3787,697.64018 547.85714,703.07647 C 546.0789,712.01712 552.26025,716.18721 557.85714,722.36218 C 566.19665,734.93551 564.0273,742.73593 566.78571,746.29076 C 570.94368,749.66757 579.61904,725.67171 586.28571,718.29076 C 593.21644,712.1663 628.8104,710.01122 626.78571,705.21933 C 625.55648,701.93191 594.22137,709.76003 587.85714,693.79076 z "
+         style="opacity:1;fill:url(#linearGradient29648);fill-opacity:1;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <g
+         id="g13736"
+         transform="matrix(1.0602134,2.043068e-2,-1.8607258e-2,0.9655901,140.14006,26.920654)">
+        <rect
+           style="opacity:1;fill:#ffffff;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+           id="rect12733"
+           width="23.300003"
+           height="4.743"
+           x="797.07562"
+           y="105.04495"
+           transform="matrix(0.6199037,0.7846779,-0.7846779,0.6199037,0,0)"
+           rx="2"
+           ry="2" />
+        <g
+           id="g13718"
+           transform="matrix(0.1525646,0.2012171,-0.1780037,0.1640598,473.69043,481.42722)"
+           style="fill:#b3b3b3">
+          <path
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z"
+             sodipodi:ry="3.7123106"
+             sodipodi:rx="4.2426405"
+             sodipodi:cy="738.58356"
+             sodipodi:cx="458.91229"
+             id="path13704"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc" />
+          <path
+             transform="translate(12.374369,0)"
+             sodipodi:type="arc"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path13706"
+             sodipodi:cx="458.91229"
+             sodipodi:cy="738.58356"
+             sodipodi:rx="4.2426405"
+             sodipodi:ry="3.7123106"
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z" />
+          <path
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z"
+             sodipodi:ry="3.7123106"
+             sodipodi:rx="4.2426405"
+             sodipodi:cy="738.58356"
+             sodipodi:cx="458.91229"
+             id="path13708"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc"
+             transform="translate(25.102291,-0.3535534)" />
+          <path
+             transform="translate(36.769553,-0.3535534)"
+             sodipodi:type="arc"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path13712"
+             sodipodi:cx="458.91229"
+             sodipodi:cy="738.58356"
+             sodipodi:rx="4.2426405"
+             sodipodi:ry="3.7123106"
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z" />
+          <path
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z"
+             sodipodi:ry="3.7123106"
+             sodipodi:rx="4.2426405"
+             sodipodi:cy="738.58356"
+             sodipodi:cx="458.91229"
+             id="path13714"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             sodipodi:type="arc"
+             transform="translate(49.143922,-0.3535534)" />
+          <path
+             transform="translate(61.871844,-0.7071068)"
+             sodipodi:type="arc"
+             style="opacity:1;fill:#b3b3b3;stroke:#cccccc;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none"
+             id="path13716"
+             sodipodi:cx="458.91229"
+             sodipodi:cy="738.58356"
+             sodipodi:rx="4.2426405"
+             sodipodi:ry="3.7123106"
+             d="M 463.15493 738.58356 A 4.2426405 3.7123106 0 1 1  454.66965,738.58356 A 4.2426405 3.7123106 0 1 1  463.15493 738.58356 z" />
+        </g>
+      </g>
+      <path
+         id="path11735"
+         d="M 585.45075,671.63811 C 580.80949,671.17901 571.41375,691.48149 566.43287,695.04715 C 561.34992,697.30119 542.72667,693.63772 527.71366,704.68793 C 520.69968,711.22989 528.97823,728.10558 534.51849,736.71343 C 536.96434,740.77861 540.69955,744.96297 544.7406,748.3125 C 547.43682,721.1535 555.12632,714.3442 560.99494,705.38087 C 569.15679,693.56381 577.98981,685.60747 587.26339,678.14564 C 587.15269,674.4087 586.83461,671.65484 585.45075,671.63811 z "
+         style="opacity:0.68999999;fill:url(#linearGradient29650);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <g
+         transform="translate(0,-0.5)"
+         id="g16761">
+        <g
+           id="g14799"
+           transform="translate(160.51324,6.0104076)">
+          <path
+             style="opacity:1;fill:url(#linearGradient29652);fill-opacity:1;fill-rule:evenodd;stroke:#483e37;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="M 481.18617,646.12934 L 487.19657,652.84685 L 429.92092,695.62681 L 424.26407,688.9093 L 481.18617,646.12934 z "
+             id="path13746" />
+          <g
+             transform="matrix(0.999936,-1.1314943e-2,1.1314943e-2,0.999936,-7.5687352,5.1956633)"
+             style="opacity:0.79999994"
+             id="g14773">
+            <path
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+               d="M 427.92536,685.74952 L 434.09846,692.73328"
+               id="path13766" />
+            <path
+               id="path14737"
+               d="M 434.42536,681.24952 L 440.59846,688.23328"
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+               d="M 441.92536,675.74952 L 448.09846,682.73328"
+               id="path14739" />
+            <path
+               id="path14763"
+               d="M 450.67536,668.74952 L 456.84846,675.73328"
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+               d="M 465.92536,658.24952 L 472.09846,665.23328"
+               id="path14765" />
+            <path
+               id="path14767"
+               d="M 469.67536,655.74952 L 475.84846,662.73328"
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+            <path
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+               d="M 473.17536,652.99952 L 479.34846,659.98328"
+               id="path14769" />
+            <path
+               id="path14771"
+               d="M 476.67536,650.24952 L 482.84846,657.23328"
+               style="fill:#e9c6af;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.69999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+          </g>
+        </g>
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#502d16;stroke-width:2;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 583.00954,694.2126 L 591.14127,703.75854"
+           id="path14813" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 642.40651,652.4933 L 585.13086,695.98036"
+           id="path15784" />
+        <path
+           id="path16755"
+           d="M 643.82072,653.90751 L 586.54507,697.39457"
+           style="fill:none;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <path
+           style="fill:none;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 645.58849,655.32172 L 588.31284,698.80878"
+           id="path16757" />
+        <path
+           id="path16759"
+           d="M 646.64915,657.08949 L 589.3735,700.57655"
+           style="fill:none;fill-rule:evenodd;stroke:#e9c6af;stroke-width:0.40000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      </g>
+      <g
+         id="g20680">
+        <path
+           style="fill:#d4ab6f;fill-opacity:1;fill-rule:evenodd;stroke:#deaa87;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 640.75,652.61218 L 647,659.61218 C 650.61861,657.21802 654.54024,656.73289 658.5,657.11218 C 668.26157,644.34434 672.64366,645.3023 677.75,644.61218 C 678.94606,641.73657 674.14673,641.17174 671.25,639.86218 C 668.59028,639.35871 646.03414,647.30344 643.25,648.86218 C 641.2211,650.36218 640.72443,651.36218 640.75,652.61218 z "
+           id="path16789"
+           sodipodi:nodetypes="ccccccc" />
+        <path
+           style="opacity:0.56999978;fill:url(#linearGradient29654);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 670.53125,639.875 C 665.85142,640.33869 645.86013,647.41368 643.25,648.875 C 641.2211,650.375 640.72443,651.375 640.75,652.625 L 644.03125,656.3125 C 644.56084,653.98048 645.91603,651.76579 648,650.375 C 666.38569,640.51108 671.1161,642.39764 677.65625,642.875 C 676.69517,641.42388 673.43462,640.86263 671.25,639.875 C 671.08377,639.84353 670.84324,639.84409 670.53125,639.875 z "
+           id="path17760" />
+      </g>
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path20698"
+         d="M 557,665.36218 C 527.34482,673.09896 530.01507,708.03337 534,708.36218 C 539.29883,707.83157 551.63196,693.22095 559.5,684.36218 C 567.28411,674.58187 569.13882,667.17332 557,665.36218 z "
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path20700"
+         d="M 557.5,680.36218 C 551.729,689.36218 546.15502,698.36218 536.5,707.36218"
+         style="opacity:0.65959999;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient29656);stroke-width:1.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path21698"
+         d="M 616,668.86218 C 610.37322,671.44501 636.33333,685.19551 646.5,705.36218 C 651.5796,702.96354 656.16927,700.19747 656,693.86218 C 658.40083,684.11256 636.49233,664.46841 616,668.86218 z "
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cc"
+         id="path21700"
+         d="M 625.5,670.86218 C 638.79868,674.06424 652.41351,683.70961 654,693.36218"
+         style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#radialGradient29658);stroke-width:3.0999999;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="csssc"
+         id="path22680"
+         d="M 627.49999,653.11218 C 627.49999,673.67418 613.05199,690.36218 595.24999,690.36218 C 577.448,690.36218 563,673.67418 563,653.11218 C 563,632.55018 577.448,615.86218 595.24999,615.86218 C 613.05199,615.86218 627,629.55018 627.49999,653.11218 z "
+         style="opacity:1;fill:url(#linearGradient29660);fill-opacity:1;stroke:#ff0000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4" />
+      <path
+         sodipodi:type="arc"
+         style="opacity:1;fill:url(#linearGradient29662);fill-opacity:1;stroke:#ececec;stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         id="path24647"
+         sodipodi:cx="426.25"
+         sodipodi:cy="645.11218"
+         sodipodi:rx="14.25"
+         sodipodi:ry="14.25"
+         d="M 440.5 645.11218 A 14.25 14.25 0 1 1  412,645.11218 A 14.25 14.25 0 1 1  440.5 645.11218 z"
+         transform="matrix(0.8989058,0,0,0.863818,225.09145,95.352673)" />
+      <path
+         transform="matrix(0.9488566,0,0,0.9664004,179.5499,26.675505)"
+         d="M 440.5 645.11218 A 14.25 14.25 0 1 1  412,645.11218 A 14.25 14.25 0 1 1  440.5 645.11218 z"
+         sodipodi:ry="14.25"
+         sodipodi:rx="14.25"
+         sodipodi:cy="645.11218"
+         sodipodi:cx="426.25"
+         id="path23668"
+         style="opacity:1;fill:url(#linearGradient29664);fill-opacity:1;stroke:url(#linearGradient29666);stroke-width:0.62657404;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         id="path25630"
+         d="M 584,636.34375 C 579.45462,636.34375 575.42051,638.61872 572.96875,642.125 C 574.27536,641.94885 575.62359,641.875 577,641.875 C 586.22185,641.875 594.13713,645.98706 597.40625,651.84375 C 597.47588,651.27787 597.53125,650.71 597.53125,650.125 C 597.53125,642.52329 591.46373,636.34378 584,636.34375 z "
+         style="opacity:1;fill:url(#linearGradient29668);fill-opacity:1;stroke:url(#linearGradient29670);stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         id="path26629"
+         d="M 608.25,640.3125 C 601.17921,640.3125 595.43753,645.83021 595.4375,652.625 C 595.4375,655.41646 596.43095,657.96552 598.0625,660.03125 C 597.71257,658.95525 597.5,657.81393 597.5,656.625 C 597.49999,650.415 602.652,645.375 609,645.375 C 615.21911,645.375 620.2654,650.21418 620.46875,656.25 C 620.83739,655.10209 621.0625,653.88871 621.0625,652.625 C 621.0625,645.83021 615.32078,640.31248 608.25,640.3125 z "
+         style="fill:url(#linearGradient29672);fill-opacity:1;stroke:#ececec;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none" />
+      <path
+         transform="translate(159,5)"
+         d="M 450.5 645.86218 A 5.75 5.5 0 1 1  439,645.86218 A 5.75 5.5 0 1 1  450.5 645.86218 z"
+         sodipodi:ry="5.5"
+         sodipodi:rx="5.75"
+         sodipodi:cy="645.86218"
+         sodipodi:cx="444.75"
+         id="path27607"
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         sodipodi:type="arc" />
+      <path
+         sodipodi:nodetypes="csssc"
+         id="path27612"
+         d="M 595.38391,651.96296 C 595.38391,653.57375 594.00787,655.49849 590.96449,655.67527 C 587.74974,655.862 585.01473,653.39698 585.01473,650.37197 C 585.01473,647.34697 587.28157,644.41243 590.43416,645.06867 C 593.8311,645.77578 594.85358,649.29151 595.38391,651.96296 z "
+         style="opacity:1;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path27615"
+         d="M 584,660.86218 L 598.5,674.86218 L 611.5,660.86218 C 602.9585,654.61053 593.87379,653.79099 584,660.86218 z "
+         style="fill:#f6c43e;fill-opacity:1;fill-rule:evenodd;stroke:#d4aa00;stroke-width:1.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccccccccc"
+         id="path28586"
+         d="M 598.52978,655.87446 C 594.54135,655.78487 589.71993,657.83674 585.41421,660.92844 L 598.06041,674.87499 L 610.08579,660.2467 C 606.36104,657.51331 602.51821,655.96403 598.52978,655.87446 z M 593.40589,658.27918 C 596.07686,658.20257 599.05726,659.15366 602.20917,663.11595 C 603.32559,665.69232 601.18947,670.65906 599.04159,673.23541 L 587.2176,659.09897 C 588.59482,658.74535 591.80331,658.32516 593.40589,658.27918 z "
+         style="opacity:0.76000001;fill:url(#linearGradient29674);fill-opacity:1;fill-rule:evenodd;stroke:#d4aa00;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <rect
+       id="rect29676"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.0701"
+       x="104.5485"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g29678"
+       transform="translate(-207.12462,-513.41685)">
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29680"
+         style="fill:url(#radialGradient29690);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient29692);stroke-width:2.39153099;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+         d="M 344.35143,743.67873 C 340.21628,748.18954 333.20733,748.49407 328.69652,744.35893 C 324.18571,740.22378 323.88118,733.21485 328.01634,728.70404 C 332.15149,724.19323 339.16043,723.88869 343.67125,728.02384 C 348.18206,732.15898 348.48659,739.16792 344.35143,743.67873 L 344.35143,743.67873 z " />
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29682"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.14639039;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 336.759,736.16388 L 335.60872,736.16388 L 336.18386,726.55584 L 336.759,736.16388 z " />
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29684"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.12551381;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 336.14185,736.77701 L 336.14185,735.60586 L 343.079,736.19144 L 336.14185,736.77701 z " />
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29686"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.354114;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 337.21677,736.19141 C 337.21711,736.7621 336.75457,737.22489 336.18389,737.22489 C 335.61321,737.22489 335.15067,736.7621 335.151,736.19141 C 335.15067,735.62072 335.61321,735.15793 336.18389,735.15793 C 336.75457,735.15793 337.21711,735.62072 337.21677,736.19141 L 337.21677,736.19141 z " />
+      <path
+         inkscape:export-ydpi="51"
+         inkscape:export-xdpi="51"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\undo.png"
+         id="path29688"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.41645598;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+         d="M 348.42952,738.63306 C 350.08245,729.37578 338.87704,717.35529 327.49667,726.29396 C 321.29287,731.16672 331.29558,732.08792 331.29558,732.08792 L 316.92219,742.0067 L 315.52061,724.65302 C 315.52061,724.65302 319.65768,729.86092 323.61398,723.6396 C 329.2821,714.72642 351.70848,716.2692 348.42952,738.63306 z " />
+    </g>
+    <rect
+       id="rect29694"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="199.0701"
+       x="152.63174"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\redo.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g29696"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\redo.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-159.20122,-559.05369)">
+      <path
+         id="path29698"
+         style="fill:url(#radialGradient29708);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient29710);stroke-width:2.39152908;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+         d="M 337.29761,789.15137 C 333.16246,793.66217 326.15353,793.9667 321.64272,789.83155 C 317.13191,785.69641 316.82738,778.68747 320.96253,774.17667 C 325.09768,769.66586 332.10661,769.36133 336.61742,773.49648 C 341.12822,777.63163 341.43275,784.64056 337.29761,789.15137 L 337.29761,789.15137 z " />
+      <path
+         id="path29700"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.14639021;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 329.70508,781.63644 L 328.5548,781.63644 L 329.12994,772.02841 L 329.70508,781.63644 z " />
+      <path
+         id="path29702"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.12551373;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 329.08793,782.24954 L 329.08793,781.07839 L 336.02508,781.66397 L 329.08793,782.24954 z " />
+      <path
+         id="path29704"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.35411379;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 330.16285,781.66407 C 330.16318,782.23476 329.70064,782.69755 329.12996,782.69755 C 328.55928,782.69755 328.09674,782.23476 328.09708,781.66407 C 328.09674,781.09338 328.55928,780.63059 329.12996,780.63059 C 329.70064,780.63059 330.16318,781.09338 330.16285,781.66407 L 330.16285,781.66407 z " />
+      <path
+         id="path29706"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1.41645515;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+         d="M 316.46797,784.21365 C 314.81504,774.95637 326.02044,762.93589 337.40081,771.87455 C 343.60461,776.7473 333.6019,777.6685 333.6019,777.6685 L 347.97528,787.58728 L 349.37686,770.23361 C 349.37686,770.23361 345.23979,775.44151 341.28349,769.22019 C 335.61537,760.30701 313.18901,761.84979 316.46797,784.21365 z " />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="347.33295"
+       y="434.19516"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect30754" />
+    <g
+       style="display:inline"
+       id="g30756"
+       transform="translate(-46.804983,-232.72995)">
+      <g
+         id="g30758"
+         transform="matrix(0.5668049,0,0,0.8603553,21.508226,389.93057)">
+        <path
+           id="path30760"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z " />
+        <path
+           id="path30762"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 683.05261,356.83776 L 683.05261,326.03045" />
+      </g>
+      <g
+         id="g30764">
+        <path
+           sodipodi:nodetypes="cccc"
+           id="path30766"
+           d="M 420.31951,679.88826 L 409.67858,694.61724 L 426.69205,688.54529 L 420.31951,679.88826 z "
+           style="fill:url(#radialGradient30770);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.6801604px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="path30768"
+           d="M 420.37963,679.64779 L 431.38127,669.66816 L 431.38127,683.91619 L 426.93252,688.42505 L 420.37963,679.64779 z "
+           style="fill:url(#linearGradient30772);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.6801604px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      </g>
+    </g>
+    <path
+       id="path4972"
+       style="opacity:1;fill:#929292;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96170586;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 392.78269,198.7959 L 392.78269,199.07759 L 392.78269,240.39663 L 392.78269,240.67831 L 393.04677,240.67831 L 434.38342,240.67831 L 434.6475,240.67831 L 434.6475,240.39663 L 434.6475,199.07759 L 434.6475,198.7959 L 434.38342,198.7959 L 393.04677,198.7959 L 392.78269,198.7959 z M 393.31084,199.34166 L 434.10174,199.34166 L 434.10174,240.13255 L 393.31084,240.13255 L 393.31084,199.34166 z "
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       style="fill:url(#linearGradient4986);fill-opacity:1;stroke:#000000;stroke-width:0.50995189;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;display:inline"
+       id="rect4974"
+       width="31.809853"
+       height="36.052494"
+       x="398.04214"
+       y="201.03586"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <text
+       xml:space="preserve"
+       style="font-size:10.18971634px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Arial"
+       x="431.22424"
+       y="195.04681"
+       id="text4976"
+       transform="scale(0.9261728,1.0797122)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"><tspan
+         sodipodi:role="line"
+         id="tspan4978"
+         x="431.22424"
+         y="195.04681"
+         style="font-weight:bold;font-family:Book Antiqua">AUTH</tspan></text>
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 402.98695,216.58722 L 424.55371,216.58722"
+       id="path4980"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <path
+       id="path4982"
+       d="M 402.98695,220.82987 L 424.55371,220.82987"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+       d="M 402.98695,225.42606 L 424.55371,225.42606"
+       id="path4984"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\song_properties.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="104.37174"
+       y="481.91278"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect8482"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_previous.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       id="rect8484"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="481.5592"
+       x="152.80856"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_next.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g8486"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_previous.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         id="path8488"
+         d="M 266.92706,936.40242 L 266.58501,962.20032"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path8490"
+         d="M 260.2153,928.26495 L 266.93281,937.10378 L 273.65032,928.26495 L 260.2153,928.26495 z "
+         style="fill:url(#linearGradient8558);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8560);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path8492"
+         d="M 266.93281,946.64972 L 286.7318,933.56824 L 286.7318,958.67053 L 266.93281,946.64972 z "
+         style="fill:url(#linearGradient8562);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       style="display:inline"
+       id="g8494"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 331.03528,936.75597 L 331.37733,962.55387"
+         id="path8496" />
+      <path
+         style="fill:url(#linearGradient8564);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8566);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 324.31202,928.6185 L 331.02953,937.45733 L 337.74704,928.6185 L 324.31202,928.6185 z "
+         id="path8498" />
+      <path
+         style="fill:url(#linearGradient8568);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 331.02953,947.00327 L 311.23054,933.92179 L 311.23054,959.02408 L 331.02953,947.00327 z "
+         id="path8500"
+         sodipodi:nodetypes="cccc" />
+    </g>
+    <rect
+       inkscape:export-ydpi="51"
+       inkscape:export-xdpi="51"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_last.png"
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="297.76541"
+       y="480.49854"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect8502" />
+    <g
+       style="display:inline"
+       id="g8504"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_last.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path8506"
+         d="M 474.92576,945.2355 L 455.12677,932.15402 L 455.12677,957.25631 L 474.92576,945.2355 z "
+         style="fill:url(#linearGradient8570);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path8508"
+         d="M 479.17415,935.34176 L 479.5162,961.13966"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path8510"
+         d="M 472.45089,927.20429 L 479.1684,936.04312 L 485.88591,927.20429 L 472.45089,927.20429 z "
+         style="fill:url(#linearGradient8572);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8574);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <rect
+         y="936.75024"
+         x="474.46863"
+         height="17.324116"
+         width="4.9497476"
+         id="rect8512"
+         style="opacity:1;fill:url(#linearGradient8576);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none" />
+    </g>
+    <rect
+       id="rect8514"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="480.49854"
+       x="-289.95554"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_first.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="scale(-1,1)" />
+    <g
+       style="display:inline"
+       id="g8516"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_first.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         style="fill:url(#linearGradient8578);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 413.04647,945.2355 L 432.84546,932.15402 L 432.84546,957.25628 L 413.04647,945.2355 z "
+         id="path8518"
+         sodipodi:nodetypes="cccc" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 408.79808,935.34176 L 408.45603,961.13968"
+         id="path8520" />
+      <path
+         style="fill:url(#linearGradient8580);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8582);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 402.08632,927.20429 L 408.80383,936.04312 L 415.52134,927.20429 L 402.08632,927.20429 z "
+         id="path8522" />
+      <rect
+         transform="scale(-1,1)"
+         style="opacity:1;fill:url(#linearGradient8584);fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none"
+         id="rect8524"
+         width="4.9497476"
+         height="17.324116"
+         x="-413.5036"
+         y="936.75024" />
+    </g>
+    <rect
+       transform="scale(-1,1)"
+       inkscape:export-ydpi="51"
+       inkscape:export-xdpi="51"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_add.png"
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="-387.88983"
+       y="480.49854"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect8526" />
+    <g
+       style="display:inline"
+       id="g8528"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_add.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         id="path8530"
+         d="M 516.29726,934.9882 L 516.63931,960.7861"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path8532"
+         d="M 509.574,926.85073 L 516.29151,935.68956 L 523.00902,926.85073 L 509.574,926.85073 z "
+         style="fill:url(#linearGradient8586);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8588);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path8534"
+         d="M 523.39422,945.83963 L 523.39422,950.6881 L 518.57394,950.6881 L 518.57394,955.36744 L 523.39422,955.36744 L 523.39422,960.18772 L 528.07356,960.18772 L 528.07356,955.33925 L 532.89384,955.33925 L 532.89384,950.65991 L 528.07356,950.65991 L 528.07356,945.83963 L 523.39422,945.83963 z "
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
+    </g>
+    <rect
+       id="rect8536"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="480.49854"
+       x="-435.97308"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_remove.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="scale(-1,1)" />
+    <g
+       style="display:inline"
+       id="g8538"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_remove.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 564.38052,934.9882 L 564.72257,960.7861"
+         id="path8540" />
+      <path
+         style="fill:url(#linearGradient8590);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8592);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 557.65726,926.85073 L 564.37477,935.68956 L 571.09228,926.85073 L 557.65726,926.85073 z "
+         id="path8542" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+         d="M 571.47748,950.6881 L 566.6572,950.6881 L 566.6572,955.36744 L 571.47748,955.36744 L 576.15682,955.33925 L 580.9771,955.33925 L 580.9771,950.65991 L 576.15682,950.65991 L 571.47748,950.6881 z "
+         id="path8544" />
+    </g>
+    <rect
+       id="rect8546"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="480.85211"
+       x="-242.2258"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_list.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="scale(-1,1)" />
+    <g
+       style="display:inline"
+       id="g8548"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\marker_list.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-150.12562,-442.36532)">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.01149404px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 370.63326,935.34175 L 370.97531,961.13965"
+         id="path8550" />
+      <path
+         style="fill:url(#linearGradient8594);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient8596);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 363.91,927.20428 L 370.62751,936.04311 L 377.34502,927.20428 L 363.91,927.20428 z "
+         id="path8552" />
+      <path
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+         d="M 358.63833,946.19318 L 358.63833,951.04165 L 353.81805,951.04165 L 353.81805,955.72099 L 358.63833,955.72099 L 358.63833,960.54127 L 363.31767,960.54127 L 363.31767,955.6928 L 368.13795,955.6928 L 368.13795,951.01346 L 363.31767,951.01346 L 363.31767,946.19318 L 358.63833,946.19318 z "
+         id="path8554" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+         d="M 378.08377,950.68811 L 373.26349,950.68811 L 373.26349,955.36745 L 378.08377,955.36745 L 382.76311,955.33926 L 387.58339,955.33926 L 387.58339,950.65992 L 382.76311,950.65992 L 378.08377,950.68811 z "
+         id="path8556" />
+    </g>
+    <rect
+       id="rect8964"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="435.24377"
+       x="153.08762"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_page.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="201.67343"
+       y="435.24377"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect8966"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_linear.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g8968"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_linear.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-246.15952,-306.45138)">
+      <g
+         style="fill-opacity:1;stroke:url(#linearGradient9082)"
+         id="g8970"
+         transform="matrix(0.5415254,0,0,0.1703656,391.14724,651.90036)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9084);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path8972" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9086);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path8974" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9088);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path8976" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9090);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path8978" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient9092);stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path8980" />
+      </g>
+      <g
+         id="g8982"
+         transform="matrix(0.1244078,0,0,0.1397183,394.52898,645.2736)">
+        <rect
+           id="rect8984"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect8986"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g8988"
+         transform="matrix(0.1508028,0,0,0.1460898,467.77752,664.93465)">
+        <path
+           id="path8990"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path8992"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g8994"
+         transform="matrix(0.1508028,0,0,0.1460898,463.33954,662.15996)">
+        <path
+           id="path8996"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path8998"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+    </g>
+    <g
+       style="display:inline"
+       id="g9000"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_page.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-244.74532,-306.45138)">
+      <g
+         transform="matrix(0.5338832,0,0,0.1703656,342.00081,669.11726)"
+         id="g9002">
+        <path
+           id="path9004"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 111.87488,566.71352 L 173.41819,566.58088" />
+        <path
+           id="path9006"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,626.46842 L 173.41819,626.33578" />
+        <path
+           id="path9008"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,611.5297 L 173.41818,611.39706" />
+        <path
+           id="path9010"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,596.59099 L 173.41818,596.45834" />
+        <path
+           id="path9012"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,581.65225 L 173.41819,581.51962" />
+      </g>
+      <g
+         transform="matrix(0.1244078,0,0,0.1397183,344.52898,662.49057)"
+         id="g9014">
+        <rect
+           width="10.422997"
+           height="72.622528"
+           ry="0"
+           x="460.12595"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect9016" />
+        <rect
+           width="2.5666234"
+           height="72.622528"
+           x="473.64929"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect9018" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,417.77752,682.15163)"
+         id="g9020">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9022" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9024" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,413.33954,679.37694)"
+         id="g9026">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9028" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9030" />
+      </g>
+      <g
+         transform="matrix(0.5415254,0,0,0.1703656,341.14724,651.90036)"
+         id="g9032">
+        <path
+           id="path9034"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 111.87488,566.71352 L 173.41819,566.58088" />
+        <path
+           id="path9036"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,626.46842 L 173.41819,626.33578" />
+        <path
+           id="path9038"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,611.5297 L 173.41818,611.39706" />
+        <path
+           id="path9040"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,596.59099 L 173.41818,596.45834" />
+        <path
+           id="path9042"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,581.65225 L 173.41819,581.51962" />
+      </g>
+      <g
+         transform="matrix(0.1244078,0,0,0.1397183,344.52898,645.2736)"
+         id="g9044">
+        <rect
+           width="10.422997"
+           height="72.622528"
+           ry="0"
+           x="460.12595"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect9046" />
+        <rect
+           width="2.5666234"
+           height="72.622528"
+           x="473.64929"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect9048" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,417.77752,664.93465)"
+         id="g9050">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9052" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9054" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,413.33954,662.15996)"
+         id="g9056">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9058" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9060" />
+      </g>
+      <rect
+         width="0.31930798"
+         height="10.146696"
+         x="434.70465"
+         y="748.70496"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="rect9062" />
+      <g
+         id="g9064"
+         transform="matrix(0.1508028,0,0,0.1460898,424.52752,664.93465)">
+        <path
+           id="path9066"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path9068"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,431.27752,667.43465)"
+         id="g9070">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path9072" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path9074" />
+      </g>
+      <g
+         id="g9076"
+         transform="matrix(-0.1244078,0,0,0.1397183,491.76721,662.2736)">
+        <rect
+           id="rect9078"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect9080"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="440.95456"
+       y="147.27452"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect10556"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\track_add.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g10558"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\track_add.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-2.2404833,-253.78593)">
+      <path
+         id="path10560"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.69704974px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 446.48376,404.46465 L 446.48376,438.99017" />
+      <path
+         id="path10562"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 452.22135,404.83883 L 452.22135,439.10134" />
+      <path
+         id="path10564"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 457.16922,404.83883 L 457.16922,439.10134" />
+      <path
+         id="path10566"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 462.1171,404.83883 L 462.1171,439.10134" />
+      <path
+         id="path10568"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 467.06498,404.83883 L 467.06498,439.10134" />
+      <path
+         id="path10570"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 472.01285,404.83883 L 472.01285,439.10134" />
+      <path
+         id="path10572"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 476.96073,404.83883 L 476.96073,439.10134" />
+      <path
+         id="path10574"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.90861,404.83883 L 481.90861,439.10134" />
+      <path
+         id="path10576"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 481.94255,404.62435 L 447.34974,404.62435" />
+      <path
+         id="path10578"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.94255,413.17627 L 447.34974,413.17627" />
+      <path
+         id="path10580"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.94255,421.7282 L 447.34974,421.7282" />
+      <path
+         id="path10582"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.94255,430.28013 L 447.34974,430.28013" />
+      <path
+         id="path10584"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 481.94255,438.83205 L 447.34974,438.83205" />
+      <rect
+         y="404.64941"
+         x="452.19183"
+         height="8.4911966"
+         width="19.804905"
+         id="rect10586"
+         style="opacity:1;fill:url(#linearGradient10632);fill-opacity:1;stroke:#000000;stroke-width:0.29408514;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="opacity:1;fill:url(#linearGradient10634);fill-opacity:1;stroke:#000000;stroke-width:0.32790762;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect10588"
+         width="24.720829"
+         height="8.4573736"
+         x="457.15851"
+         y="413.15164" />
+      <rect
+         y="421.62128"
+         x="447.24338"
+         height="8.4886465"
+         width="20.155907"
+         id="rect10590"
+         style="opacity:1;fill:url(#linearGradient10636);fill-opacity:1;stroke:#000000;stroke-width:0.29663515;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path10592"
+         d="M 469.30055,421.51995 L 469.30055,426.36842 L 464.48027,426.36842 L 464.48027,431.04776 L 469.30055,431.04776 L 469.30055,435.86804 L 473.97989,435.86804 L 473.97989,431.01957 L 478.80017,431.01957 L 478.80017,426.34023 L 473.97989,426.34023 L 473.97989,421.51995 L 469.30055,421.51995 z "
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline" />
+    </g>
+    <rect
+       id="rect10594"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="198.53976"
+       x="441.30811"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\track_remove.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51" />
+    <g
+       style="display:inline"
+       id="g10596"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\track_remove.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51"
+       transform="translate(-2.2404833,-253.78593)">
+      <path
+         d="M 446.83731,455.72989 L 446.83731,490.25541"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.69704974px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path10598" />
+      <path
+         d="M 452.5749,456.10407 L 452.5749,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10600" />
+      <path
+         d="M 457.52277,456.10407 L 457.52277,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10602" />
+      <path
+         d="M 462.47065,456.10407 L 462.47065,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10604" />
+      <path
+         d="M 467.41853,456.10407 L 467.41853,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10606" />
+      <path
+         d="M 472.3664,456.10407 L 472.3664,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10608" />
+      <path
+         d="M 477.31428,456.10407 L 477.31428,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10610" />
+      <path
+         d="M 482.26216,456.10407 L 482.26216,490.36658"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.22083248px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10612" />
+      <path
+         d="M 482.2961,455.88959 L 447.70329,455.88959"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path10614" />
+      <path
+         d="M 482.2961,464.44151 L 447.70329,464.44151"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10616" />
+      <path
+         d="M 482.2961,472.99344 L 447.70329,472.99344"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10618" />
+      <path
+         d="M 482.2961,481.54537 L 447.70329,481.54537"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10620" />
+      <path
+         d="M 482.2961,490.09729 L 447.70329,490.09729"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.2917217px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path10622" />
+      <rect
+         style="fill:url(#linearGradient10638);fill-opacity:1;stroke:#000000;stroke-width:0.29408514;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect10624"
+         width="19.804905"
+         height="8.4911966"
+         x="452.54538"
+         y="455.91464" />
+      <rect
+         y="464.41687"
+         x="457.51205"
+         height="8.4573736"
+         width="24.720829"
+         id="rect10626"
+         style="fill:url(#linearGradient10640);fill-opacity:1;stroke:#000000;stroke-width:0.32790762;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         style="fill:url(#linearGradient10642);fill-opacity:1;stroke:#000000;stroke-width:0.29663515;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect10628"
+         width="20.155907"
+         height="8.4886465"
+         x="447.59692"
+         y="472.88651" />
+      <path
+         sodipodi:nodetypes="ccccccccc"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.45102042;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;display:inline"
+         d="M 468.6541,479.13366 L 463.83382,479.13366 L 463.83382,483.813 L 468.6541,483.813 L 473.33344,483.78481 L 478.15372,483.78481 L 478.15372,479.10547 L 473.33344,479.10547 L 468.6541,479.13366 z "
+         id="path10630" />
+    </g>
+    <rect
+       inkscape:export-ydpi="51"
+       inkscape:export-xdpi="51"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_multitrack.png"
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="249.15182"
+       y="435.07074"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect11028" />
+    <g
+       style="display:inline"
+       id="g11030"
+       transform="translate(-254.74712,-300.96752)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\layout_multitrack.png"
+       inkscape:export-xdpi="51"
+       inkscape:export-ydpi="51">
+      <g
+         id="g11032"
+         transform="matrix(0.4447275,0,0,0.1703656,464.02114,641.74351)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path11034" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11036" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11038" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11040" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11042" />
+      </g>
+      <g
+         id="g11044"
+         transform="matrix(0.1244078,0,0,0.1397183,456.595,635.11675)">
+        <rect
+           id="rect11046"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect11048"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g11050"
+         transform="matrix(0.1508028,0,0,0.1460898,529.84354,654.7778)">
+        <path
+           id="path11052"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11054"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g11056"
+         transform="matrix(0.1508028,0,0,0.1460898,525.40556,652.00311)">
+        <path
+           id="path11058"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11060"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,536.59354,654.7778)"
+         id="g11062">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path11064" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path11066" />
+      </g>
+      <text
+         id="text11068"
+         y="746.97223"
+         x="506.70752"
+         style="font-size:11px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="746.97223"
+           x="506.70752"
+           id="tspan11070"
+           sodipodi:role="line">1</tspan><tspan
+           id="tspan11072"
+           y="760.72223"
+           x="506.70752"
+           sodipodi:role="line">2</tspan><tspan
+           id="tspan11074"
+           y="774.47223"
+           x="506.70752"
+           sodipodi:role="line">3</tspan></text>
+      <g
+         transform="matrix(0.4447275,0,0,0.1703656,464.02114,655.24351)"
+         id="g11076">
+        <path
+           id="path11078"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           d="M 111.87488,566.71352 L 173.41819,566.58088" />
+        <path
+           id="path11080"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,626.46842 L 173.41819,626.33578" />
+        <path
+           id="path11082"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,611.5297 L 173.41818,611.39706" />
+        <path
+           id="path11084"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,596.59099 L 173.41818,596.45834" />
+        <path
+           id="path11086"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           d="M 111.87488,581.65225 L 173.41819,581.51962" />
+      </g>
+      <g
+         transform="matrix(0.1244078,0,0,0.1397183,456.595,648.61675)"
+         id="g11088">
+        <rect
+           width="10.422997"
+           height="72.622528"
+           ry="0"
+           x="460.12595"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect11090" />
+        <rect
+           width="2.5666234"
+           height="72.622528"
+           x="473.64929"
+           y="738.49548"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="rect11092" />
+      </g>
+      <g
+         id="g11094"
+         transform="matrix(0.4447275,0,0,0.1703656,464.02114,668.49351)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path11096" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11098" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11100" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11102" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path11104" />
+      </g>
+      <g
+         id="g11106"
+         transform="matrix(0.1244078,0,0,0.1397183,456.595,661.86675)">
+        <rect
+           id="rect11108"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect11110"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,529.84354,668.21283)"
+         id="g11112">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path11114" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path11116" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,525.40556,665.43814)"
+         id="g11118">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path11120" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path11122" />
+      </g>
+      <g
+         id="g11124"
+         transform="matrix(0.1508028,0,0,0.1460898,536.59354,668.21283)">
+        <path
+           id="path11126"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11128"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g11130"
+         transform="matrix(0.1508028,0,0,0.1460898,529.66676,681.47108)">
+        <path
+           id="path11132"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11134"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g11136"
+         transform="matrix(0.1508028,0,0,0.1460898,525.22878,678.69639)">
+        <path
+           id="path11138"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path11140"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         transform="matrix(0.1508028,0,0,0.1460898,536.41676,681.47108)"
+         id="g11142">
+        <path
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           id="path11144" />
+        <path
+           d="M -7.156011,622.3181 L -7.156011,572.4789"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           id="path11146" />
+      </g>
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="298.33298"
+       y="433.69519"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect12376" />
+    <g
+       style="display:inline"
+       id="g12378"
+       transform="matrix(0.5700447,0,0,0.2618828,237.50828,292.61349)">
+      <path
+         d="M 111.87488,566.71352 L 173.41819,566.58088"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         id="path12380" />
+      <path
+         d="M 111.87488,626.46842 L 173.41819,626.33578"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path12382" />
+      <path
+         d="M 111.87488,611.5297 L 173.41818,611.39706"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path12384" />
+      <path
+         d="M 111.87488,596.59099 L 173.41818,596.45834"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path12386" />
+      <path
+         d="M 111.87488,581.65225 L 173.41819,581.51962"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         id="path12388" />
+    </g>
+    <g
+       style="display:inline"
+       id="g12390"
+       transform="matrix(0.1912374,0,0,0.2147724,213.41104,282.42696)">
+      <rect
+         id="rect12392"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         y="738.49548"
+         x="460.12595"
+         ry="0"
+         height="72.622528"
+         width="10.422997" />
+      <rect
+         id="rect12394"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         y="738.49548"
+         x="473.64929"
+         height="72.622528"
+         width="2.5666234" />
+    </g>
+    <g
+       style="display:inline"
+       id="g12396"
+       transform="matrix(0.2318113,0,0,0.2245665,326.00734,312.64956)">
+      <path
+         id="path12398"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+      <path
+         id="path12400"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M -7.156011,622.3181 L -7.156011,572.4789" />
+    </g>
+    <g
+       style="display:inline"
+       id="g12402"
+       transform="matrix(0.2318113,0,0,0.2245665,319.18536,308.38436)">
+      <path
+         id="path12404"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+      <path
+         id="path12406"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M -7.156011,622.3181 L -7.156011,572.4789" />
+    </g>
+    <g
+       style="display:inline"
+       transform="matrix(0.2318113,0,0,0.2245665,336.38332,312.64956)"
+       id="g12408">
+      <path
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path12410" />
+      <path
+         d="M -7.156011,622.3181 L -7.156011,572.4789"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path12412" />
+    </g>
+    <g
+       style="display:inline"
+       id="g12414"
+       transform="translate(-140.61944,-77.569368)">
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path12416"
+         d="M 440.58819,540.43464 C 448.06239,535.50357 447.97881,533.31371 454.73032,532.65647 C 460.92638,533.06006 463.18552,536.33993 469.22601,540.08109 C 465.1484,542.83292 461.92696,547.38979 455.08387,547.85926 C 448.23806,547.45201 446.00644,543.32344 440.58819,540.43464 z "
+         style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         transform="translate(-2.0606602,-1.75)"
+         d="M 465.62982 542.00787 A 8.3085051 7.2478447 0 1 1  449.01281,542.00787 A 8.3085051 7.2478447 0 1 1  465.62982 542.00787 z"
+         sodipodi:ry="7.2478447"
+         sodipodi:rx="8.3085051"
+         sodipodi:cy="542.00787"
+         sodipodi:cx="457.32132"
+         id="path12418"
+         style="fill:url(#linearGradient12422);fill-opacity:1;stroke:url(#linearGradient12424);stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+      <path
+         transform="translate(-1,-1.75)"
+         d="M 458.91229 542.00787 A 2.8284271 3.0052037 0 1 1  453.25544,542.00787 A 2.8284271 3.0052037 0 1 1  458.91229 542.00787 z"
+         sodipodi:ry="3.0052037"
+         sodipodi:rx="2.8284271"
+         sodipodi:cy="542.00787"
+         sodipodi:cx="456.08386"
+         id="path12420"
+         style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:type="arc" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="344.33295"
+       y="199.69516"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect14627" />
+    <rect
+       id="rect14629"
+       style="fill:url(#linearGradient14671);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="203.6138"
+       x="348.25156"
+       height="33.496006"
+       width="33.496006" />
+    <g
+       style="display:inline"
+       id="g14631"
+       transform="matrix(0.4620139,0,0,0.3894886,57.644817,0.1596858)">
+      <path
+         id="path14633"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 646.25,601.61218 L 646.25,529.11218" />
+      <rect
+         id="rect14635"
+         style="fill:url(#linearGradient14673);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="535.61218"
+         x="639"
+         height="27"
+         width="14.5" />
+      <path
+         id="path14637"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 665.25,601.61218 L 665.25,529.11218" />
+      <rect
+         id="rect14639"
+         style="fill:url(#linearGradient14675);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="564.11218"
+         x="658"
+         height="27"
+         width="14.5" />
+      <path
+         id="path14641"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 684.25,601.61218 L 684.25,529.11218" />
+      <rect
+         id="rect14643"
+         style="fill:url(#linearGradient14677);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="546.11218"
+         x="677"
+         height="27"
+         width="14.5" />
+    </g>
+    <rect
+       id="rect14645"
+       style="fill:url(#linearGradient14679);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="203.6138"
+       x="348.25156"
+       height="33.496006"
+       width="33.496006" />
+    <path
+       id="path14647"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.27261233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 356.22131,235.25979 L 356.22131,207.02187" />
+    <path
+       id="path14649"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.27261233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 364.99957,235.25979 L 364.99957,207.02187" />
+    <path
+       id="path14651"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.27261233;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 373.77784,235.25979 L 373.77784,207.02187" />
+    <g
+       style="display:inline"
+       id="g14653"
+       transform="translate(-96.729733,-365.93933)">
+      <rect
+         y="578.69958"
+         x="467.31976"
+         height="10.957698"
+         width="6.6963706"
+         id="rect14655"
+         style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.34436721;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="580.40417"
+         x="468.41556"
+         height="7.5486355"
+         width="4.6265831"
+         id="rect14657"
+         style="opacity:1;fill:url(#linearGradient14681);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       style="display:inline"
+       transform="translate(-105.74534,-360.63603)"
+       id="g14659">
+      <rect
+         style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.34436721;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect14661"
+         width="6.6963706"
+         height="10.957698"
+         x="467.31976"
+         y="578.69958" />
+      <rect
+         style="opacity:1;fill:url(#linearGradient14683);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="rect14663"
+         width="4.6265831"
+         height="7.5486355"
+         x="468.41556"
+         y="580.40417" />
+    </g>
+    <g
+       style="display:inline"
+       id="g14665"
+       transform="translate(-114.4074,-363.11091)">
+      <rect
+         y="578.69958"
+         x="467.31976"
+         height="10.957698"
+         width="6.6963706"
+         id="rect14667"
+         style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.34436721;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <rect
+         y="580.40417"
+         x="468.41556"
+         height="7.5486355"
+         width="4.6265831"
+         id="rect14669"
+         style="opacity:1;fill:url(#linearGradient14685);fill-opacity:1;stroke:#000000;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <rect
+       width="41.334045"
+       height="41.334045"
+       rx="0"
+       ry="0"
+       x="296.17447"
+       y="198.36298"
+       style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect16681" />
+    <g
+       id="g16707"
+       transform="translate(849.99998,-63.999998)">
+      <rect
+         y="269.53003"
+         x="-549.65851"
+         height="22.5"
+         width="33.5"
+         id="rect16683"
+         style="opacity:1;fill:#333333;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+      <rect
+         y="273.03003"
+         x="-546.15851"
+         height="9"
+         width="26"
+         id="rect16685"
+         style="opacity:1;fill:#008000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+      <text
+         id="text16687"
+         y="280.08209"
+         x="-539.21191"
+         style="font-size:7.89853191px;font-style:normal;font-weight:normal;fill:#00ff00;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           y="280.08209"
+           x="-539.21191"
+           id="tspan16689"
+           sodipodi:role="line">1234</tspan></text>
+      <path
+         id="path16691"
+         d="M -546.15852,286.03003 L -520.65852,286.03003"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+      <g
+         transform="translate(-703.26566,-480.40358)"
+         id="g16693"
+         style="display:inline">
+        <path
+           style="fill:url(#linearGradient16699);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient16701);stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 163.21429,762.8979 L 163.21429,778.96933 C 169.18918,776.60095 175.46615,774.07658 180,770.75504 C 174.66202,767.10698 169.02779,764.64388 163.21429,762.8979 z "
+           id="path16695"
+           sodipodi:nodetypes="cccc" />
+        <path
+           style="fill:url(#linearGradient16703);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient16705);stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 171.79136,769.68303 C 168.72709,769.68303 165.85828,770.1268 163.49554,770.88459 L 163.49554,777.98214 C 169.16989,775.88352 175.12269,773.64741 179.45825,770.71693 C 177.21614,770.06809 174.60773,769.68302 171.79136,769.68303 z "
+           id="path16697" />
+      </g>
+    </g>
+    <rect
+       style="opacity:0;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect17763"
+       width="66.5"
+       height="60"
+       x="202.50003"
+       y="587.36218"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_style.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85" />
+    <g
+       id="g24597"
+       transform="translate(-438.00002,341.99999)">
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="5.250133"
+         height="5.3034863"
+         rx="1.6616579"
+         ry="1.6616576"
+         x="596.60822"
+         y="247.18004"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.03204477;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17729" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="65.647148"
+         height="15.808088"
+         rx="3.6109443"
+         ry="3.6109436"
+         x="550.94476"
+         y="245.75606"
+         style="color:#000000;fill:url(#linearGradient20674);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17731" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="65.644463"
+         height="51.361164"
+         rx="0"
+         x="550.95654"
+         y="254.09529"
+         style="color:#000000;fill:url(#linearGradient20676);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17733" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         d="M 610.62428,248.50849 L 610.19569,248.93253 L 611.09722,249.83176 L 610.19569,250.72369 L 610.62428,251.15503 L 611.52581,250.25579 L 612.43473,251.15503 L 612.86333,250.72369 L 611.9618,249.83176 L 612.86333,248.93253 L 612.43473,248.50849 L 611.52581,249.40773 L 610.62428,248.50849 z "
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.2487205;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="path17735" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="3.0691075"
+         height="3.0364239"
+         x="603.8468"
+         y="248.31357"
+         style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.70561117;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17737" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="3.3248663"
+         height="0.33738044"
+         x="597.57086"
+         y="249.66309"
+         style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.70561117;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17739" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="10.912381"
+         height="9.4466524"
+         x="558.87445"
+         y="268.24072"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17741" />
+      <rect
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         width="10.912381"
+         height="9.4466524"
+         x="558.87445"
+         y="287.42447"
+         style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         id="rect17743" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         id="path18734"
+         d="M 559,271.36218 L 563.5,276.36218 L 569.5,266.86218"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         id="path20678"
+         d="M 576,272.36218 L 607.5,272.36218"
+         style="fill:#4d4d4d;fill-rule:evenodd;stroke:#333333;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         style="fill:#4d4d4d;fill-rule:evenodd;stroke:#333333;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 576,291.86218 L 607.5,291.86218"
+         id="path21649" />
+      <path
+         inkscape:export-ydpi="85"
+         inkscape:export-xdpi="85"
+         inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_view.png"
+         id="path21651"
+         d="M 576,276.86218 L 607.5,276.86218"
+         style="fill:#4d4d4d;fill-rule:evenodd;stroke:#333333;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    </g>
+    <g
+       id="g24582"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_style.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85"
+       transform="translate(-420.00002,341.99999)">
+      <path
+         sodipodi:nodetypes="cccc"
+         id="path21665"
+         d="M 650,249.36218 L 631,267.86218 C 685.26159,262.68371 667.38995,281.08726 654.5,297.86218 C 691.93444,270.67633 683.07012,256.59391 650,249.36218 z "
+         style="fill:url(#linearGradient23611);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <text
+         id="text21661"
+         y="296.36218"
+         x="628.5"
+         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         xml:space="preserve"><tspan
+           style="font-size:36px;font-weight:normal;font-family:Century"
+           y="296.36218"
+           x="628.5"
+           id="tspan21663"
+           sodipodi:role="line">Aa</tspan></text>
+    </g>
+    <rect
+       inkscape:export-ydpi="85"
+       inkscape:export-xdpi="85"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_style.png"
+       y="587.36218"
+       x="202.50003"
+       height="60"
+       width="66.5"
+       id="rect24587"
+       style="opacity:0;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       inkscape:export-ydpi="85"
+       inkscape:export-xdpi="85"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\option_style.png"
+       id="g24589"
+       transform="translate(-420.00002,341.99999)">
+      <path
+         style="fill:url(#linearGradient4519);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 650,249.36218 L 631,267.86218 C 685.26159,262.68371 667.38995,281.08726 654.5,297.86218 C 691.93444,270.67633 683.07012,256.59391 650,249.36218 z "
+         id="path24591"
+         sodipodi:nodetypes="cccc" />
+      <text
+         xml:space="preserve"
+         style="font-size:12px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         x="628.5"
+         y="296.36218"
+         id="text24593"><tspan
+           sodipodi:role="line"
+           id="tspan24595"
+           x="628.5"
+           y="296.36218"
+           style="font-size:36px;font-weight:normal;font-family:Century">Aa</tspan></text>
+    </g>
+    <rect
+       style="opacity:0;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect31683"
+       width="66.5"
+       height="60"
+       x="107.91422"
+       y="684.28351"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_authors.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85" />
+    <g
+       id="g32727"
+       transform="matrix(0.6116588,0,0,0.6116588,-276.80752,381.33365)"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_authors.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85">
+      <g
+         id="g32699">
+        <path
+           style="fill:url(#linearGradient32738);fill-opacity:1;stroke:url(#linearGradient32740);stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1"
+           d="M 660.78125,510 C 650.82801,510 642.75003,517.45241 642.75,526.625 C 642.75,531.03542 644.64187,535.0241 647.6875,538 C 642.01881,543.0774 636.5037,549.9304 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 687.01058,550.47601 680.87321,543.03088 674.21875,537.6875 C 677.07541,534.74701 678.81249,530.87939 678.8125,526.625 C 678.8125,517.45241 670.73449,510 660.78125,510 z "
+           id="path31685" />
+        <path
+           style="fill:url(#linearGradient32742);fill-opacity:1;stroke:#333333;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 659.71875,539.71875 C 653.11193,539.71875 647.00854,541.33674 641.96875,544.09375 C 638.51984,548.56832 635.48631,554.46212 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 688.34092,557.75226 686.47331,552.96151 684.15625,549 C 678.45679,543.34318 669.61983,539.71876 659.71875,539.71875 z "
+           id="path31710" />
+      </g>
+      <g
+         id="g32715"
+         transform="translate(43.84062,1.4142136)">
+        <path
+           style="fill:url(#linearGradient32744);fill-opacity:1;stroke:url(#linearGradient32746);stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1"
+           d="M 660.78125,510 C 650.82801,510 642.75003,517.45241 642.75,526.625 C 642.75,531.03542 644.64187,535.0241 647.6875,538 C 642.01881,543.0774 636.5037,549.9304 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 687.01058,550.47601 680.87321,543.03088 674.21875,537.6875 C 677.07541,534.74701 678.81249,530.87939 678.8125,526.625 C 678.8125,517.45241 670.73449,510 660.78125,510 z "
+           id="path32717" />
+        <path
+           style="fill:url(#linearGradient32748);fill-opacity:1;stroke:#333333;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 659.71875,539.71875 C 653.11193,539.71875 647.00854,541.33674 641.96875,544.09375 C 638.51984,548.56832 635.48631,554.46212 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 688.34092,557.75226 686.47331,552.96151 684.15625,549 C 678.45679,543.34318 669.61983,539.71876 659.71875,539.71875 z "
+           id="path32719" />
+      </g>
+      <g
+         transform="translate(22.627417,9.1923882)"
+         id="g32703">
+        <path
+           id="path32705"
+           d="M 660.78125,510 C 650.82801,510 642.75003,517.45241 642.75,526.625 C 642.75,531.03542 644.64187,535.0241 647.6875,538 C 642.01881,543.0774 636.5037,549.9304 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 687.01058,550.47601 680.87321,543.03088 674.21875,537.6875 C 677.07541,534.74701 678.81249,530.87939 678.8125,526.625 C 678.8125,517.45241 670.73449,510 660.78125,510 z "
+           style="fill:url(#linearGradient32750);fill-opacity:1;stroke:url(#linearGradient32752);stroke-width:1;stroke-linecap:round;stroke-miterlimit:4;stroke-opacity:1" />
+        <path
+           id="path32707"
+           d="M 659.71875,539.71875 C 653.11193,539.71875 647.00854,541.33674 641.96875,544.09375 C 638.51984,548.56832 635.48631,554.46212 633.5625,563.03125 C 650.826,570.87338 668.46154,570.58075 689.4375,563.75 C 688.34092,557.75226 686.47331,552.96151 684.15625,549 C 678.45679,543.34318 669.61983,539.71876 659.71875,539.71875 z "
+           style="fill:url(#linearGradient32754);fill-opacity:1;stroke:#333333;stroke-width:0;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      </g>
+    </g>
+    <rect
+       inkscape:export-ydpi="85"
+       inkscape:export-xdpi="85"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_license.png"
+       y="676.3252"
+       x="205.0513"
+       height="60"
+       width="66.5"
+       id="rect32756"
+       style="opacity:0;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       id="g34724"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_license.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85"
+       transform="translate(-434.00002,159.99999)">
+      <path
+         sodipodi:nodetypes="ccccc"
+         id="path32758"
+         d="M 649.12402,524.15342 C 650.92972,539.70977 646.70505,555.26611 656.9022,570.82246 L 697.91439,570.11536 C 685.57145,554.79471 690.25808,539.47407 688.0149,524.15342 L 649.12402,524.15342 z "
+         style="fill:url(#linearGradient34698);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient34722);stroke-width:0.5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+      <path
+         id="path34700"
+         d="M 655.48799,530.51738 L 667.5088,530.51738"
+         style="fill:#666666;fill-rule:evenodd;stroke:#999999;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         id="path34702"
+         d="M 656.19509,536.88134 L 683.06515,536.88134"
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 656.19509,541.12398 L 683.06515,541.12398"
+         id="path34706" />
+      <path
+         id="path34708"
+         d="M 656.19509,545.36662 L 683.06515,545.36662"
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 656.19509,549.60926 L 683.06515,549.60926"
+         id="path34710" />
+      <path
+         id="path34712"
+         d="M 657.6093,553.8519 L 684.47936,553.8519"
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#b3b3b3;stroke-width:0.68351835px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 661.58554,561.63007 L 674.13916,561.63007"
+         id="path34714" />
+    </g>
+    <rect
+       style="opacity:0;fill:#ffffff;fill-opacity:0;stroke:#000000;stroke-width:0.5;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect34734"
+       width="66.5"
+       height="60"
+       x="288.56601"
+       y="675.0567"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_description.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85" />
+    <path
+       style="font-size:12px;font-style:normal;font-weight:normal;fill:url(#linearGradient34743);fill-opacity:1;stroke:url(#linearGradient35720);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       d="M 314.26497,681.62011 L 326.98372,681.62011 L 326.98372,690.27636 L 314.26497,690.27636 L 314.26497,681.62011 z M 314.26497,694.24511 L 326.98372,694.24511 L 326.98372,727.43261 L 314.26497,727.43261 L 314.26497,694.24511 z "
+       id="text34736"
+       inkscape:export-filename="C:\Programmi\tuxguitar-0.9.1-update1\share\files\about_description.png"
+       inkscape:export-xdpi="85"
+       inkscape:export-ydpi="85" />
+    <rect
+       id="rect6511"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="434.30661"
+       x="584.61633"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus/edit_voice_1.png"
+       inkscape:export-xdpi="51.581074"
+       inkscape:export-ydpi="51.581074" />
+    <rect
+       id="rect6513"
+       style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="479.68161"
+       x="584.61633"
+       ry="0"
+       rx="0"
+       height="41.334045"
+       width="41.334045"
+       inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus/edit_voice_2.png"
+       inkscape:export-xdpi="51.581074"
+       inkscape:export-ydpi="51.581074" />
+    <text
+       xml:space="preserve"
+       style="font-size:22px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="779.29431"
+       y="358.28033"
+       id="text3736"
+       transform="scale(0.7694351,1.2996548)"
+       inkscape:label="#text3736"><tspan
+         sodipodi:role="line"
+         id="tspan3738"
+         x="779.29431"
+         y="358.28033">1</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:22px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       x="779.29431"
+       y="393.19342"
+       id="text3740"
+       transform="scale(0.7694351,1.2996548)"><tspan
+         sodipodi:role="line"
+         id="tspan3742"
+         x="779.29431"
+         y="393.19342">2</tspan></text>
+  </g>
+</svg>
diff --git a/TuxGuitar/share/skins/ersplus/skin.svg b/TuxGuitar/share/skins/ersplus/skin.svg
new file mode 100644
index 0000000..8f9e43f
--- /dev/null
+++ b/TuxGuitar/share/skins/ersplus/skin.svg
@@ -0,0 +1,8660 @@
+<?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"
+   version="1.0"
+   width="210mm"
+   height="297mm"
+   id="svg2"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docname="skin.svg"
+   sodipodi:docbase="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata21859">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     inkscape:window-height="931"
+     inkscape:window-width="1280"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     inkscape:zoom="1"
+     inkscape:cx="402.19652"
+     inkscape:cy="712.44342"
+     inkscape:window-x="0"
+     inkscape:window-y="33"
+     inkscape:current-layer="svg2"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     showgrid="false">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3751" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4">
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 526.18109 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="744.09448 : 526.18109 : 1"
+       inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+       id="perspective1361" />
+    <marker
+       inkscape:stockid="CurveIn"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="CurveIn"
+       style="overflow:visible">
+      <path
+         id="path5615"
+         d="M 4.6254930,-5.0456926 C 1.8654930,-5.0456926 -0.37450702,-2.8056926 -0.37450702,-0.045692580 C -0.37450702,2.7143074 1.8654930,4.9543074 4.6254930,4.9543074"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;marker-end:none;fill:none"
+         transform="scale(0.6)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Mstart"
+       style="overflow:visible">
+      <path
+         id="path4606"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.6) translate(0,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Sstart"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="Arrow2Sstart"
+       style="overflow:visible">
+      <path
+         id="path4600"
+         style="font-size:12.0;fill-rule:evenodd;stroke-width:0.62500000;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 L -2.2072895,0.016013256 L 8.7185884,-4.0017078 C 6.9730900,-1.6296469 6.9831476,1.6157441 8.7185878,4.0337352 z "
+         transform="scale(0.3) translate(-2.3,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="TriangleInM"
+       orient="auto"
+       refY="0.0"
+       refX="0.0"
+       id="TriangleInM"
+       style="overflow:visible">
+      <path
+         id="path4538"
+         d="M 5.77,0.0 L -2.88,5.0 L -2.88,-5.0 L 5.77,0.0 z "
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+         transform="scale(-0.4)" />
+    </marker>
+    <linearGradient
+       id="linearGradient9644">
+      <stop
+         style="stop-color:#f8e70a;stop-opacity:1;"
+         offset="0"
+         id="stop9646" />
+      <stop
+         style="stop-color:#ffa021;stop-opacity:0;"
+         offset="1"
+         id="stop9648" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient3382"
+       gradientUnits="userSpaceOnUse"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       id="linearGradient15469">
+      <stop
+         style="stop-color:#e40000;stop-opacity:1;"
+         offset="0"
+         id="stop15471" />
+      <stop
+         style="stop-color:#ffa700;stop-opacity:1;"
+         offset="1"
+         id="stop15473" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient10979">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop10981" />
+      <stop
+         style="stop-color:yellow;stop-opacity:1;"
+         offset="1"
+         id="stop10983" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9201">
+      <stop
+         style="stop-color:#007d00;stop-opacity:1;"
+         offset="0"
+         id="stop9203" />
+      <stop
+         style="stop-color:#00d900;stop-opacity:0;"
+         offset="1"
+         id="stop9205" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient16486">
+      <stop
+         style="stop-color:#008930;stop-opacity:1;"
+         offset="0"
+         id="stop16488" />
+      <stop
+         style="stop-color:black;stop-opacity:0.37113401;"
+         offset="1"
+         id="stop16490" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient10211">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop10213" />
+      <stop
+         style="stop-color:#1e9f9f;stop-opacity:1;"
+         offset="1"
+         id="stop10215" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6102">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6104" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6106" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5207">
+      <stop
+         id="stop5209"
+         offset="0"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         id="stop5211"
+         offset="1"
+         style="stop-color:#3764ff;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5199">
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="0"
+         id="stop5201" />
+      <stop
+         style="stop-color:black;stop-opacity:0;"
+         offset="1"
+         id="stop5203" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient5941">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop5943" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop5945" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14138">
+      <stop
+         style="stop-color:#afc6e9;stop-opacity:1;"
+         offset="0"
+         id="stop14140" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop14142" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9152">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop9154" />
+      <stop
+         style="stop-color:black;stop-opacity:1;"
+         offset="1"
+         id="stop9156" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4809">
+      <stop
+         id="stop4811"
+         offset="0"
+         style="stop-color:black;stop-opacity:1;" />
+      <stop
+         id="stop4813"
+         offset="1"
+         style="stop-color:black;stop-opacity:1" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6481">
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="0"
+         id="stop6483" />
+      <stop
+         style="stop-color:white;stop-opacity:0;"
+         offset="1"
+         id="stop6485" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9267">
+      <stop
+         style="stop-color:#ffd428;stop-opacity:1;"
+         offset="0"
+         id="stop9269" />
+      <stop
+         id="stop10163"
+         offset="0.5"
+         style="stop-color:white;stop-opacity:1;" />
+      <stop
+         style="stop-color:#ffd322;stop-opacity:1;"
+         offset="1"
+         id="stop9271" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9267"
+       id="linearGradient20340"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.105702,-0.132634,0.122908,0.142271,-123.5758,437.4912)"
+       x1="205.4043"
+       y1="464.48911"
+       x2="207.19127"
+       y2="498.23825" />
+    <linearGradient
+       id="linearGradient7463">
+      <stop
+         style="stop-color:lime;stop-opacity:1;"
+         offset="0"
+         id="stop7465" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop7467" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7463"
+       id="linearGradient20338"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.120379,0.139344,-0.171115,0.214715,20.77584,293.7269)"
+       x1="331.695"
+       y1="486.6479"
+       x2="399.73358"
+       y2="486.6479" />
+    <linearGradient
+       id="linearGradient19203">
+      <stop
+         style="stop-color:#a49e88;stop-opacity:1;"
+         offset="0"
+         id="stop19205" />
+      <stop
+         style="stop-color:white;stop-opacity:1;"
+         offset="1"
+         id="stop19207" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19203"
+       id="linearGradient20336"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.463664,0.283515,-0.266017,0.432012,-24.98543,167.9069)"
+       x1="209.59592"
+       y1="469.32986"
+       x2="228.7281"
+       y2="494.3299" />
+    <linearGradient
+       id="linearGradient14711">
+      <stop
+         style="stop-color:#f4e3d7;stop-opacity:1"
+         offset="0"
+         id="stop14713" />
+      <stop
+         style="stop-color:#f4e3d7;stop-opacity:0"
+         offset="1"
+         id="stop14715" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient12779">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop12781" />
+      <stop
+         style="stop-color:black;stop-opacity:0"
+         offset="1"
+         id="stop12783" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient7720">
+      <stop
+         style="stop-color:#f5f5f5;stop-opacity:1"
+         offset="0"
+         id="stop7722" />
+      <stop
+         style="stop-color:#81ed9e;stop-opacity:1"
+         offset="1"
+         id="stop7724" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5684">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop5686" />
+      <stop
+         style="stop-color:black;stop-opacity:0"
+         offset="1"
+         id="stop5688" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4672">
+      <stop
+         style="stop-color:#9b9b9b;stop-opacity:1"
+         offset="0"
+         id="stop4674" />
+      <stop
+         style="stop-color:#2f2f2f;stop-opacity:1"
+         offset="1"
+         id="stop4676" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4644">
+      <stop
+         style="stop-color:#f5f5f5;stop-opacity:1"
+         offset="0"
+         id="stop4646" />
+      <stop
+         style="stop-color:#9e9e9e;stop-opacity:1"
+         offset="1"
+         id="stop4648" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6846">
+      <stop
+         style="stop-color:aqua;stop-opacity:1"
+         offset="0"
+         id="stop6848" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6852" />
+      <stop
+         style="stop-color:aqua;stop-opacity:1"
+         offset="1"
+         id="stop6850" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6830">
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0"
+         id="stop6832" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6836" />
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="1"
+         id="stop6834" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6814">
+      <stop
+         style="stop-color:blue;stop-opacity:1"
+         offset="0"
+         id="stop6816" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6820" />
+      <stop
+         style="stop-color:blue;stop-opacity:1"
+         offset="1"
+         id="stop6818" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6798">
+      <stop
+         style="stop-color:lime;stop-opacity:1"
+         offset="0"
+         id="stop6800" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0.5"
+         id="stop6804" />
+      <stop
+         style="stop-color:lime;stop-opacity:1"
+         offset="1"
+         id="stop6802" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11729">
+      <stop
+         style="stop-color:#806805;stop-opacity:1"
+         offset="0"
+         id="stop11731" />
+      <stop
+         style="stop-color:#e1e2ce;stop-opacity:1"
+         offset="0.44999999"
+         id="stop11735" />
+      <stop
+         style="stop-color:#b4a66d;stop-opacity:1"
+         offset="1"
+         id="stop11733" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9900">
+      <stop
+         style="stop-color:#ffd988;stop-opacity:1"
+         offset="0"
+         id="stop9902" />
+      <stop
+         style="stop-color:#97812c;stop-opacity:1"
+         offset="1"
+         id="stop9904" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient9009">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop9011" />
+      <stop
+         style="stop-color:#d3bc5f;stop-opacity:1"
+         offset="1"
+         id="stop9013" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3974">
+      <stop
+         style="stop-color:#dd9600;stop-opacity:1"
+         offset="0"
+         id="stop3976" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop3978" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4856">
+      <stop
+         style="stop-color:white;stop-opacity:0.84536082"
+         offset="0"
+         id="stop4858" />
+      <stop
+         style="stop-color:#6898f1;stop-opacity:0.46391752"
+         offset="1"
+         id="stop4860" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4791">
+      <stop
+         style="stop-color:#5696f6;stop-opacity:1"
+         offset="0"
+         id="stop4793" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop4795" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient33795">
+      <stop
+         style="stop-color:#ff9e00;stop-opacity:1"
+         offset="0"
+         id="stop33801" />
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0.5"
+         id="stop33803" />
+      <stop
+         style="stop-color:#ffffa0;stop-opacity:1"
+         offset="1"
+         id="stop33799" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21032">
+      <stop
+         style="stop-color:red;stop-opacity:1"
+         offset="0"
+         id="stop21034" />
+      <stop
+         style="stop-color:red;stop-opacity:0"
+         offset="1"
+         id="stop21036" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient20139">
+      <stop
+         style="stop-color:#5696f6;stop-opacity:1"
+         offset="0"
+         id="stop20141" />
+      <stop
+         style="stop-color:#5696f6;stop-opacity:0"
+         offset="1"
+         id="stop20143" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient19246">
+      <stop
+         style="stop-color:#f95;stop-opacity:1"
+         offset="0"
+         id="stop19248" />
+      <stop
+         style="stop-color:#f95;stop-opacity:0"
+         offset="1"
+         id="stop19250" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient18353">
+      <stop
+         style="stop-color:yellow;stop-opacity:1"
+         offset="0"
+         id="stop18355" />
+      <stop
+         style="stop-color:yellow;stop-opacity:0"
+         offset="1"
+         id="stop18357" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient6462">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop6464" />
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="1"
+         id="stop6466" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient5880">
+      <stop
+         style="stop-color:#6d91d4;stop-opacity:1"
+         offset="0"
+         id="stop5882" />
+      <stop
+         style="stop-color:black;stop-opacity:0.02061856"
+         offset="1"
+         id="stop5884" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient32988">
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="0"
+         id="stop32990" />
+      <stop
+         style="stop-color:#cbcbcb;stop-opacity:1"
+         offset="0.5"
+         id="stop32994" />
+      <stop
+         style="stop-color:black;stop-opacity:1"
+         offset="1"
+         id="stop32992" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient11686">
+      <stop
+         style="stop-color:#ffc602;stop-opacity:1"
+         offset="0"
+         id="stop11688" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop11690" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient4552">
+      <stop
+         style="stop-color:#ffcd1d;stop-opacity:1"
+         offset="0"
+         id="stop4554" />
+      <stop
+         style="stop-color:#ffe691;stop-opacity:1"
+         offset="0.67500001"
+         id="stop6334" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop4556" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3661">
+      <stop
+         style="stop-color:#ffd74f;stop-opacity:1"
+         offset="0"
+         id="stop3663" />
+      <stop
+         style="stop-color:#795d00;stop-opacity:0"
+         offset="1"
+         id="stop3665" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient21068">
+      <stop
+         style="stop-color:#999;stop-opacity:1"
+         offset="0"
+         id="stop21070" />
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="1"
+         id="stop21072" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient16226">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop16228" />
+      <stop
+         style="stop-color:#e85700;stop-opacity:1"
+         offset="1"
+         id="stop16230" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient14070">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop14072" />
+      <stop
+         style="stop-color:#8e8e8e;stop-opacity:1"
+         offset="1"
+         id="stop14074" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient1315">
+      <stop
+         style="stop-color:white;stop-opacity:1"
+         offset="0"
+         id="stop1317" />
+      <stop
+         style="stop-color:black;stop-opacity:0.73958325"
+         offset="1"
+         id="stop1319" />
+    </linearGradient>
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14528"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.654622,1.623305,-1.369812,-1.396152,926.1889,-533.1723)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14544"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,758.4821,146.9962)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14557"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,984.3714,146.9961)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14565"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-168.9821,146.9962)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14573"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,532.5927,146.9962)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14577"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,645.5374,146.9961)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14698"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-167.3496,22.52986)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14700"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,530.9602,22.52986)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14702"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,643.9049,22.52983)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient14704"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,982.7389,22.5298)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient1673"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.615848,0.604192,-0.509843,-0.519646,23.07442,-120.0138)" />
+    <radialGradient
+       cx="400.31589"
+       cy="2.521359"
+       r="72.066078"
+       fx="400.31589"
+       fy="2.521359"
+       id="radialGradient1688"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.615848,0.604192,-0.509843,-0.519646,411.4735,-120.7104)" />
+    <linearGradient
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218"
+       id="linearGradient31977"
+       xlink:href="#linearGradient21068"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)" />
+    <linearGradient
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311"
+       id="linearGradient31979"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)" />
+    <radialGradient
+       cx="552.50104"
+       cy="862.58081"
+       r="43.5"
+       fx="552.50104"
+       fy="862.58081"
+       id="radialGradient31999"
+       xlink:href="#linearGradient16226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect" />
+    <radialGradient
+       cx="552.50104"
+       cy="862.58081"
+       r="43.5"
+       fx="552.50104"
+       fy="862.58081"
+       id="radialGradient32063"
+       xlink:href="#linearGradient16226"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect" />
+    <linearGradient
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218"
+       id="linearGradient32065"
+       xlink:href="#linearGradient21068"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)" />
+    <linearGradient
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311"
+       id="linearGradient32067"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)" />
+    <linearGradient
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218"
+       id="linearGradient34916"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)" />
+    <linearGradient
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218"
+       id="linearGradient34918"
+       xlink:href="#linearGradient32988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,301.3571,283.759)" />
+    <linearGradient
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218"
+       id="linearGradient34920"
+       xlink:href="#linearGradient32988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,320.3571,312.259)" />
+    <linearGradient
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218"
+       id="linearGradient34922"
+       xlink:href="#linearGradient32988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,339.3571,294.259)" />
+    <linearGradient
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218"
+       id="linearGradient34924"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)" />
+    <linearGradient
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847"
+       id="linearGradient42567"
+       xlink:href="#linearGradient11686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)" />
+    <linearGradient
+       x1="277.07773"
+       y1="733.53235"
+       x2="278.26602"
+       y2="793.7782"
+       id="linearGradient45285"
+       xlink:href="#linearGradient4552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640794,0,-0.129638,0.698173,95.93458,46.3081)" />
+    <linearGradient
+       x1="117.67873"
+       y1="688.06342"
+       x2="116.00877"
+       y2="771.71283"
+       id="linearGradient45290"
+       xlink:href="#linearGradient3661"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640077,0,0,0.78567,90.88485,-10.2088)" />
+    <linearGradient
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218"
+       id="linearGradient45308"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)" />
+    <radialGradient
+       cx="209.83412"
+       cy="683.00934"
+       r="42.25"
+       fx="209.83412"
+       fy="683.00934"
+       id="radialGradient6540"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218"
+       id="linearGradient6542"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       cx="209.83412"
+       cy="683.00934"
+       r="42.25"
+       fx="209.83412"
+       fy="683.00934"
+       id="radialGradient6544"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218"
+       id="linearGradient6546"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218"
+       id="linearGradient5922"
+       xlink:href="#linearGradient14070"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)" />
+    <linearGradient
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321"
+       id="linearGradient5940"
+       xlink:href="#linearGradient5880"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="1029.5582"
+       y1="283.05643"
+       x2="1054.2062"
+       y2="283.05643"
+       id="linearGradient4651"
+       xlink:href="#linearGradient32988"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96906,0.184773,-0.740436,0.719541,-2,53.11273)" />
+    <radialGradient
+       cx="360.55887"
+       cy="686.36542"
+       r="13.25"
+       fx="360.55887"
+       fy="686.36542"
+       id="radialGradient7371"
+       xlink:href="#linearGradient6462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)" />
+    <radialGradient
+       cx="360.55887"
+       cy="686.36542"
+       r="13.25"
+       fx="360.55887"
+       fy="686.36542"
+       id="radialGradient7497"
+       xlink:href="#linearGradient6462"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)" />
+    <linearGradient
+       x1="445.06726"
+       y1="987.36212"
+       x2="517.55859"
+       y2="987.36212"
+       id="linearGradient21090"
+       xlink:href="#linearGradient21032"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="341.58902"
+       y1="987.36212"
+       x2="414.08035"
+       y2="987.36212"
+       id="linearGradient21092"
+       xlink:href="#linearGradient20139"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212"
+       id="linearGradient21096"
+       xlink:href="#linearGradient19246"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105"
+       id="linearGradient21098"
+       xlink:href="#linearGradient18353"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105"
+       id="linearGradient21120"
+       xlink:href="#linearGradient18353"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(524.0663,-56)" />
+    <linearGradient
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212"
+       id="linearGradient22896"
+       xlink:href="#linearGradient19246"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(523.8557,-56)" />
+    <linearGradient
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847"
+       id="linearGradient22916"
+       xlink:href="#linearGradient11686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)" />
+    <linearGradient
+       x1="236.75435"
+       y1="987.36212"
+       x2="309.24567"
+       y2="987.36212"
+       id="linearGradient22929"
+       xlink:href="#linearGradient11686"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,-56)" />
+    <linearGradient
+       x1="212.87547"
+       y1="991.43274"
+       x2="348.82919"
+       y2="991.43274"
+       id="linearGradient4813"
+       xlink:href="#linearGradient1315"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,19.86901)" />
+    <linearGradient
+       x1="212.15625"
+       y1="1068.7657"
+       x2="349.5625"
+       y2="1068.7657"
+       id="linearGradient4815"
+       xlink:href="#linearGradient33795"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.701288,0,0,0.704615,92.93315,227.5991)" />
+    <linearGradient
+       x1="313.19742"
+       y1="886.34753"
+       x2="399.59286"
+       y2="886.34753"
+       id="linearGradient4817"
+       xlink:href="#linearGradient4791"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.920046,0,0,1.086901,0,13.71543)" />
+    <radialGradient
+       cx="964.30762"
+       cy="803.47638"
+       r="91.57444"
+       fx="964.30762"
+       fy="803.47638"
+       id="radialGradient12168"
+       xlink:href="#linearGradient4856"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.735963,-0.187801,0.156725,0.614181,134.2038,527.9897)" />
+    <radialGradient
+       cx="760.87744"
+       cy="895.59747"
+       r="39.191177"
+       fx="760.87744"
+       fy="895.59747"
+       id="radialGradient12897"
+       xlink:href="#linearGradient9009"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.134715,0,774.947)" />
+    <linearGradient
+       x1="722.29547"
+       y1="892.55151"
+       x2="800.47473"
+       y2="892.55151"
+       id="linearGradient12899"
+       xlink:href="#linearGradient9900"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       cx="760.87744"
+       cy="895.59747"
+       r="39.191177"
+       fx="760.87744"
+       fy="895.59747"
+       id="radialGradient12901"
+       xlink:href="#linearGradient9009"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.134715,0,774.947)" />
+    <linearGradient
+       x1="722.29547"
+       y1="892.55151"
+       x2="800.47473"
+       y2="892.55151"
+       id="linearGradient12903"
+       xlink:href="#linearGradient9900"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="594.95349"
+       y1="966.4024"
+       x2="737.51599"
+       y2="966.4024"
+       id="linearGradient12905"
+       xlink:href="#linearGradient11729"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="441.73926"
+       y1="882.7417"
+       x2="520.36261"
+       y2="882.7417"
+       id="linearGradient12907"
+       xlink:href="#linearGradient3974"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="276.34375"
+       y1="958.8125"
+       x2="357.34375"
+       y2="958.8125"
+       id="linearGradient12909"
+       xlink:href="#linearGradient3974"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="474.60648"
+       y1="964.74359"
+       x2="474.72397"
+       y2="939.47852"
+       id="linearGradient12911"
+       xlink:href="#linearGradient3974"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.678923,0,0,0.512431,92.02415,441.1433)" />
+    <linearGradient
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741"
+       id="linearGradient6961"
+       xlink:href="#linearGradient6814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894"
+       id="linearGradient6964"
+       xlink:href="#linearGradient6798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186"
+       id="linearGradient6967"
+       xlink:href="#linearGradient6830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127"
+       id="linearGradient6970"
+       xlink:href="#linearGradient6846"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127"
+       id="linearGradient8122"
+       xlink:href="#linearGradient6846"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186"
+       id="linearGradient8124"
+       xlink:href="#linearGradient6830"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894"
+       id="linearGradient8126"
+       xlink:href="#linearGradient6798"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <linearGradient
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741"
+       id="linearGradient8128"
+       xlink:href="#linearGradient6814"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)" />
+    <radialGradient
+       cx="902.47498"
+       cy="488.31769"
+       r="114.14286"
+       fx="902.47498"
+       fy="488.31769"
+       id="radialGradient9889"
+       xlink:href="#linearGradient7720"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)" />
+    <linearGradient
+       x1="818"
+       y1="467.36218"
+       x2="1046.2856"
+       y2="467.36218"
+       id="linearGradient9891"
+       xlink:href="#linearGradient4672"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       cx="902.47498"
+       cy="488.31769"
+       r="114.14286"
+       fx="902.47498"
+       fy="488.31769"
+       id="radialGradient9893"
+       xlink:href="#linearGradient4644"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)" />
+    <linearGradient
+       x1="811.92737"
+       y1="467.36218"
+       x2="1052.3584"
+       y2="467.36218"
+       id="linearGradient9895"
+       xlink:href="#linearGradient4672"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       cx="410.888"
+       cy="988.72253"
+       r="29.571283"
+       fx="410.888"
+       fy="988.72253"
+       id="radialGradient9897"
+       xlink:href="#linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.820084,0,0,1.263148,109.9248,-278.9086)" />
+    <radialGradient
+       cx="410.888"
+       cy="988.72253"
+       r="29.571283"
+       fx="410.888"
+       fy="988.72253"
+       id="radialGradient9899"
+       xlink:href="#linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.840938,0,0,1.038796,100.9157,-57.20348)" />
+    <radialGradient
+       cx="410.888"
+       cy="988.72253"
+       r="29.571283"
+       fx="410.888"
+       fy="988.72253"
+       id="radialGradient9901"
+       xlink:href="#linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.806533,0,0,1.26326,841.2684,-279.0187)" />
+    <radialGradient
+       cx="410.888"
+       cy="988.72253"
+       r="29.571283"
+       fx="410.888"
+       fy="988.72253"
+       id="radialGradient9903"
+       xlink:href="#linearGradient5684"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.825015,0,0,1.061238,849.253,-79.37844)" />
+    <linearGradient
+       x1="645.98792"
+       y1="748.92639"
+       x2="699.22064"
+       y2="748.92639"
+       id="linearGradient11879"
+       xlink:href="#linearGradient16226"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12789"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12791"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12793"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12795"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12797"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12799"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12801"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient12803"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13807"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13809"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13811"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13813"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13815"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13817"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="635.69843"
+       y1="751.26422"
+       x2="784.17004"
+       y2="751.26422"
+       id="linearGradient13819"
+       xlink:href="#linearGradient12779"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="573.87781"
+       y1="850.04034"
+       x2="670.98364"
+       y2="850.04034"
+       id="linearGradient14719"
+       xlink:href="#linearGradient14711"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="573.87781"
+       y1="850.04034"
+       x2="670.98364"
+       y2="850.04034"
+       id="linearGradient14721"
+       xlink:href="#linearGradient14711"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="573.87781"
+       y1="850.04034"
+       x2="670.98364"
+       y2="850.04034"
+       id="linearGradient14738"
+       xlink:href="#linearGradient14711"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       x1="573.87781"
+       y1="850.04034"
+       x2="670.98364"
+       y2="850.04034"
+       id="linearGradient14740"
+       xlink:href="#linearGradient14711"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9009"
+       id="radialGradient21982"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.134715,0,774.947)"
+       cx="760.87744"
+       cy="895.59747"
+       fx="760.87744"
+       fy="895.59747"
+       r="39.191177" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9900"
+       id="linearGradient21984"
+       gradientUnits="userSpaceOnUse"
+       x1="722.29547"
+       y1="892.55151"
+       x2="800.47473"
+       y2="892.55151" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9009"
+       id="radialGradient21986"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.134715,0,774.947)"
+       cx="760.87744"
+       cy="895.59747"
+       fx="760.87744"
+       fy="895.59747"
+       r="39.191177" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9900"
+       id="linearGradient21988"
+       gradientUnits="userSpaceOnUse"
+       x1="722.29547"
+       y1="892.55151"
+       x2="800.47473"
+       y2="892.55151" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11729"
+       id="linearGradient21990"
+       gradientUnits="userSpaceOnUse"
+       x1="594.95349"
+       y1="966.4024"
+       x2="737.51599"
+       y2="966.4024" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3974"
+       id="linearGradient21992"
+       gradientUnits="userSpaceOnUse"
+       x1="441.73926"
+       y1="882.7417"
+       x2="520.36261"
+       y2="882.7417" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3974"
+       id="linearGradient21994"
+       gradientUnits="userSpaceOnUse"
+       x1="276.34375"
+       y1="958.8125"
+       x2="357.34375"
+       y2="958.8125" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3974"
+       id="linearGradient21996"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.678923,0,0,0.512431,92.02415,441.1433)"
+       x1="474.60648"
+       y1="964.74359"
+       x2="474.72397"
+       y2="939.47852" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="linearGradient21998"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,19.86901)"
+       x1="212.87547"
+       y1="991.43274"
+       x2="348.82919"
+       y2="991.43274" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient33795"
+       id="linearGradient22000"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.701288,0,0,0.704615,92.93315,227.5991)"
+       x1="212.15625"
+       y1="1068.7657"
+       x2="349.5625"
+       y2="1068.7657" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4791"
+       id="linearGradient22002"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.920046,0,0,1.086901,0,13.71543)"
+       x1="313.19742"
+       y1="886.34753"
+       x2="399.59286"
+       y2="886.34753" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4856"
+       id="radialGradient22004"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.735963,-0.187801,0.156725,0.614181,134.2038,527.9897)"
+       cx="964.30762"
+       cy="803.47638"
+       fx="964.30762"
+       fy="803.47638"
+       r="91.57444" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23057"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,982.7389,22.5298)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23061"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,643.9049,22.52983)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23063"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,530.9602,22.52986)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23065"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-167.3496,22.52986)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23067"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.654622,1.623305,-1.369812,-1.396152,926.1889,-533.1723)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23069"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,984.3714,146.9961)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23071"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,758.4821,146.9962)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23073"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,645.5374,146.9961)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23075"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,532.5927,146.9962)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23077"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,-168.9821,146.9962)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16226"
+       id="radialGradient23079"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect"
+       cx="552.50104"
+       cy="862.58081"
+       fx="552.50104"
+       fy="862.58081"
+       r="43.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21068"
+       id="linearGradient23081"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)"
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23083"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)"
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3661"
+       id="linearGradient23087"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640077,0,0,0.78567,90.88485,-10.2088)"
+       x1="117.67873"
+       y1="688.06342"
+       x2="116.00877"
+       y2="771.71283" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4552"
+       id="linearGradient23089"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640794,0,-0.129638,0.698173,95.93458,46.3081)"
+       x1="277.07773"
+       y1="733.53235"
+       x2="278.26602"
+       y2="793.7782" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient23091"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23093"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16226"
+       id="radialGradient23095"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect"
+       cx="552.50104"
+       cy="862.58081"
+       fx="552.50104"
+       fy="862.58081"
+       r="43.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21068"
+       id="linearGradient23097"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)"
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23099"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)"
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23101"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient23103"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,301.3571,283.759)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient23105"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,320.3571,312.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient23107"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,339.3571,294.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23109"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient23111"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23113"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient23115"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23117"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient23119"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient23121"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient23123"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient23125"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient23127"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96906,0.184773,-0.740436,0.719541,-2,53.11273)"
+       x1="1029.5582"
+       y1="283.05643"
+       x2="1054.2062"
+       y2="283.05643" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient23129"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient23145"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient23147"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient23149"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient23151"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient23153"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient23155"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient23157"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient23159"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23561"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.615848,0.604192,-0.509843,-0.519646,23.07442,-120.0138)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient23621"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.615848,0.604192,-0.509843,-0.519646,411.4735,-120.7104)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient18353"
+       id="linearGradient23731"
+       gradientUnits="userSpaceOnUse"
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19246"
+       id="linearGradient23733"
+       gradientUnits="userSpaceOnUse"
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient23735"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,-56)"
+       x1="236.75435"
+       y1="987.36212"
+       x2="309.24567"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient20139"
+       id="linearGradient23737"
+       gradientUnits="userSpaceOnUse"
+       x1="341.58902"
+       y1="987.36212"
+       x2="414.08035"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21032"
+       id="linearGradient23739"
+       gradientUnits="userSpaceOnUse"
+       x1="445.06726"
+       y1="987.36212"
+       x2="517.55859"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient18353"
+       id="linearGradient23741"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(524.0663,-56)"
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19246"
+       id="linearGradient23743"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(523.8557,-56)"
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7720"
+       id="radialGradient23745"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient23747"
+       gradientUnits="userSpaceOnUse"
+       x1="818"
+       y1="467.36218"
+       x2="1046.2856"
+       y2="467.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4644"
+       id="radialGradient23749"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient23751"
+       gradientUnits="userSpaceOnUse"
+       x1="811.92737"
+       y1="467.36218"
+       x2="1052.3584"
+       y2="467.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient23753"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.820084,0,0,1.263148,109.9248,-278.9086)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient23755"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.840938,0,0,1.038796,100.9157,-57.20348)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient23757"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.806533,0,0,1.26326,841.2684,-279.0187)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient23759"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.825015,0,0,1.061238,849.253,-79.37844)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16226"
+       id="radialGradient24181"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect"
+       cx="552.50104"
+       cy="862.58081"
+       fx="552.50104"
+       fy="862.58081"
+       r="43.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21068"
+       id="linearGradient24183"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)"
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24185"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)"
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3661"
+       id="linearGradient24187"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640077,0,0,0.78567,90.88485,-10.2088)"
+       x1="117.67873"
+       y1="688.06342"
+       x2="116.00877"
+       y2="771.71283" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4552"
+       id="linearGradient24189"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.640794,0,-0.129638,0.698173,95.93458,46.3081)"
+       x1="277.07773"
+       y1="733.53235"
+       x2="278.26602"
+       y2="793.7782" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient24191"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24193"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.340569,0,0,0.429779,304.0396,251.3565)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient16226"
+       id="radialGradient24195"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.721324e-7,0.784065,-0.912902,-2.004171e-7,955.8349,20.35169)"
+       spreadMethod="reflect"
+       cx="552.50104"
+       cy="862.58081"
+       fx="552.50104"
+       fy="862.58081"
+       r="43.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21068"
+       id="linearGradient24197"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.47215,0,0,0.445568,229.5723,-522.5639)"
+       x1="473.375"
+       y1="846.36218"
+       x2="473.375"
+       y2="841.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24199"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.649207,0,0,0.640504,94.81749,-719.1436)"
+       x1="541.75"
+       y1="894.12311"
+       x2="561.93182"
+       y2="894.12311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24201"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24203"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,301.3571,283.759)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24205"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,320.3571,312.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24207"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.517857,0,0,0.482143,339.3571,294.259)"
+       x1="670.5"
+       y1="520.86218"
+       x2="670"
+       y2="579.86218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24209"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.912791,-87.75002,51.1304)"
+       x1="673"
+       y1="520.36072"
+       x2="673"
+       y2="606.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient24211"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24213"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="radialGradient24215"
+       gradientUnits="userSpaceOnUse"
+       cx="209.83412"
+       cy="683.00934"
+       fx="209.83412"
+       fy="683.00934"
+       r="42.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient24217"
+       gradientUnits="userSpaceOnUse"
+       x1="151.57851"
+       y1="675.11218"
+       x2="234.92149"
+       y2="675.11218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient24219"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.193838,-0.204415,0.201505,0.196637,22.84333,509.163)"
+       x1="474.62946"
+       y1="763.69867"
+       x2="474.62946"
+       y2="819.49847" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient24225"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient32988"
+       id="linearGradient24227"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.96906,0.184773,-0.740436,0.719541,-2,53.11273)"
+       x1="1029.5582"
+       y1="283.05643"
+       x2="1054.2062"
+       y2="283.05643" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6462"
+       id="radialGradient24229"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.576792,-1.665212e-2,1.306653e-2,0.477328,144.86,366.3147)"
+       cx="360.55887"
+       cy="686.36542"
+       fx="360.55887"
+       fy="686.36542"
+       r="13.25" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient24231"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient24233"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient24235"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient24237"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient24239"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient24241"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient24243"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient24245"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19203"
+       id="linearGradient24247"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.463664,0.283515,-0.266017,0.432012,-24.98543,167.9069)"
+       x1="209.59592"
+       y1="469.32986"
+       x2="228.7281"
+       y2="494.3299" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7463"
+       id="linearGradient24249"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.120379,0.139344,-0.171115,0.214715,20.77584,293.7269)"
+       x1="331.695"
+       y1="486.6479"
+       x2="399.73358"
+       y2="486.6479" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9267"
+       id="linearGradient24251"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.105702,-0.132634,0.122908,0.142271,-123.5758,437.4912)"
+       x1="205.4043"
+       y1="464.48911"
+       x2="207.19127"
+       y2="498.23825" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient13239"
+       gradientUnits="userSpaceOnUse"
+       x1="514.1665"
+       y1="770.00311"
+       x2="552.85059"
+       y2="770.00311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient13241"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,1,1104.701,0.426478)"
+       x1="514.1665"
+       y1="770.00311"
+       x2="552.85059"
+       y2="770.00311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14138"
+       id="linearGradient14144"
+       x1="682.19747"
+       y1="742.489"
+       x2="749.28423"
+       y2="742.489"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5941"
+       id="radialGradient6081"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.238095,0,630.1944)"
+       cx="595.61743"
+       cy="827.13019"
+       fx="595.61743"
+       fy="827.13019"
+       r="10.991182" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient6085"
+       gradientUnits="userSpaceOnUse"
+       x1="514.1665"
+       y1="770.00311"
+       x2="552.85059"
+       y2="770.00311" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient6087"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1,0,0,1,1104.701,0.426478)"
+       x1="514.1665"
+       y1="770.00311"
+       x2="552.85059"
+       y2="770.00311" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5941"
+       id="radialGradient6115"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.238095,0,630.1944)"
+       cx="595.61743"
+       cy="827.13019"
+       fx="595.61743"
+       fy="827.13019"
+       r="10.991182" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14138"
+       id="linearGradient7977"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.999435,-3.359396e-2,2.090913e-2,0.999781,-74.89763,93.16569)"
+       x1="682.19747"
+       y1="742.489"
+       x2="749.28423"
+       y2="742.489" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5941"
+       id="radialGradient7982"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.238095,0,630.1944)"
+       cx="595.61743"
+       cy="827.13019"
+       fx="595.61743"
+       fy="827.13019"
+       r="10.991182" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5941"
+       id="radialGradient9764"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1,0,0,0.238095,0,630.1944)"
+       cx="595.61743"
+       cy="827.13019"
+       fx="595.61743"
+       fy="827.13019"
+       r="10.991182" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient3109"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321"
+       gradientTransform="matrix(-0.326639,-0.315927,0.325985,-0.316561,303.7813,371.9517)" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient3121"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.279302,0,0,0.352463,339.8541,-9.09588)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient3242"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient2953"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.326639,-0.315927,0.325985,-0.316561,303.7813,371.9517)"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient14070"
+       id="linearGradient2965"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.279302,0,0,0.352463,339.8541,-9.09588)"
+       x1="488.69626"
+       y1="733.36218"
+       x2="492.33502"
+       y2="805.36218" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient2973"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.326639,-0.315927,0.325985,-0.316561,303.7813,371.9517)"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient2976"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.394857,-0.381908,0.394066,-0.382674,272.3576,400.6259)"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient18353"
+       id="linearGradient4526"
+       gradientUnits="userSpaceOnUse"
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19246"
+       id="linearGradient4528"
+       gradientUnits="userSpaceOnUse"
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient11686"
+       id="linearGradient4530"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,-56)"
+       x1="236.75435"
+       y1="987.36212"
+       x2="309.24567"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient20139"
+       id="linearGradient4532"
+       gradientUnits="userSpaceOnUse"
+       x1="341.58902"
+       y1="987.36212"
+       x2="414.08035"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient21032"
+       id="linearGradient4534"
+       gradientUnits="userSpaceOnUse"
+       x1="445.06726"
+       y1="987.36212"
+       x2="517.55859"
+       y2="987.36212" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient18353"
+       id="linearGradient4536"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(524.0663,-56)"
+       x1="26.033255"
+       y1="986.64105"
+       x2="98.524582"
+       y2="986.64105" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient19246"
+       id="linearGradient4538"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(523.8557,-56)"
+       x1="131.75435"
+       y1="987.36212"
+       x2="204.24567"
+       y2="987.36212" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient7720"
+       id="radialGradient4540"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient4542"
+       gradientUnits="userSpaceOnUse"
+       x1="818"
+       y1="467.36218"
+       x2="1046.2856"
+       y2="467.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4644"
+       id="radialGradient4544"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.933322,5.373968e-3,-9.114388e-3,1.092136,63.44493,-62.25249)"
+       cx="902.47498"
+       cy="488.31769"
+       fx="902.47498"
+       fy="488.31769"
+       r="114.14286" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient4672"
+       id="linearGradient4546"
+       gradientUnits="userSpaceOnUse"
+       x1="811.92737"
+       y1="467.36218"
+       x2="1052.3584"
+       y2="467.36218" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4548"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.820084,0,0,1.263148,109.9248,-278.9086)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4550"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.840938,0,0,1.038796,100.9157,-57.20348)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4552"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.806533,0,0,1.26326,841.2684,-279.0187)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5684"
+       id="radialGradient4554"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.825015,0,0,1.061238,849.253,-79.37844)"
+       cx="410.888"
+       cy="988.72253"
+       fx="410.888"
+       fy="988.72253"
+       r="29.571283" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient4556"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient4558"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6846"
+       id="linearGradient4560"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="799.75488"
+       y1="262.69351"
+       x2="799.75488"
+       y2="277.6127" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6830"
+       id="linearGradient4562"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="747.68823"
+       y1="248.6936"
+       x2="747.68823"
+       y2="264.22186" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6798"
+       id="linearGradient4564"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="767.5094"
+       y1="220.81253"
+       x2="767.5094"
+       y2="234.48894" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6814"
+       id="linearGradient4566"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.683105,0,0,1.080499,338.4319,-13.46473)"
+       x1="788.36353"
+       y1="235.01193"
+       x2="788.36353"
+       y2="249.49741" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5880"
+       id="linearGradient4568"
+       gradientUnits="userSpaceOnUse"
+       x1="-61.644386"
+       y1="436.44476"
+       x2="-21.973541"
+       y2="480.29321" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15286"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15288"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,719.1127,73.72802)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15290"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15292"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15294"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,757.1127,83.30868)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15296"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15414"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15416"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.226661,-2.698342e-3,1.91067e-3,0.160496,490.7324,83.30868)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15418"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15420"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15422"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,719.1127,73.72802)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15424"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15426"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15428"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,757.1127,83.30868)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15430"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15438"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15440"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.226661,-2.698342e-3,1.91067e-3,0.160496,490.7324,83.30868)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15442"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15472"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.801363,-9.008779e-3,4.64053e-3,0.927917,-470.5065,3.379106)"
+       cx="587.05847"
+       cy="108.0611"
+       fx="587.05847"
+       fy="108.0611"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient6102"
+       id="radialGradient15474"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.226661,-2.698342e-3,-1.91067e-3,0.160496,719.1127,73.72802)"
+       cx="587.5"
+       cy="14.114712"
+       fx="587.5"
+       fy="14.114712"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient5207"
+       id="radialGradient15476"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(1.143979,-1.988754e-4,3.755429e-6,1.424122,-84.49733,-3.166083)"
+       cx="587.42114"
+       cy="2.7619145"
+       fx="587.42114"
+       fy="2.7619145"
+       r="55.500004" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3661"
+       id="radialGradient18282"
+       cx="590.40625"
+       cy="17.705935"
+       fx="590.40625"
+       fy="17.705935"
+       r="9.96875"
+       gradientTransform="matrix(1,0,0,0.862069,0,2.442198)"
+       gradientUnits="userSpaceOnUse" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient10979"
+       id="radialGradient16399"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(0.510756,8.596396e-3,-9.491026e-3,0.563911,199.3096,272.8201)"
+       cx="392.69437"
+       cy="639.16309"
+       fx="392.69437"
+       fy="639.16309"
+       r="13.00695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9201"
+       id="linearGradient16401"
+       gradientUnits="userSpaceOnUse"
+       x1="413.24585"
+       y1="611.74628"
+       x2="422.28918"
+       y2="624.56256" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient15469"
+       id="linearGradient21760"
+       gradientUnits="userSpaceOnUse"
+       x1="-30.495793"
+       y1="788.21506"
+       x2="-22.720188"
+       y2="788.21506" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient9650"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient18524"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20472"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695"
+       spreadMethod="repeat" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20484"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="repeat"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20486"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20502"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="repeat"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient20504"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient21491"
+       gradientUnits="userSpaceOnUse"
+       spreadMethod="repeat"
+       x1="571.66913"
+       y1="964.30695"
+       x2="661.41479"
+       y2="964.30695" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient9644"
+       id="linearGradient21493"
+       gradientUnits="userSpaceOnUse"
+       x1="571.66912"
+       y1="964.30696"
+       x2="661.41478"
+       y2="964.30696" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient3567"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4133997,0.4055754,-0.3422418,-0.3488223,10.276589,-74.784609)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient17059"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-1.153488,1.131656,-0.954938,-0.973301,869.7944,22.52976)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient21912"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4133997,0.4055754,-0.3422418,-0.3488223,-42.950333,-257.45813)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient21932"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4134002,0.4055758,-0.3422416,-0.3488226,336.05906,-255.33691)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient21936"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.3941246,0.3788101,-0.3262839,-0.3258024,186.88118,-258.82238)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+    <radialGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1315"
+       id="radialGradient22911"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="matrix(-0.4134002,0.4055758,-0.3422416,-0.3488226,336.05906,-255.33691)"
+       cx="400.31589"
+       cy="2.521359"
+       fx="400.31589"
+       fy="2.521359"
+       r="72.066078" />
+  </defs>
+  <g
+     id="g13090"
+     transform="matrix(0.4319372,0,0,0.4498758,-158.61068,263.50967)">
+    <path
+       id="path1949"
+       style="fill:#faf8e5"
+       d="M 502.36734,1001.8219 C 500.85685,1000.9055 500.86123,1000.8106 502.69092,994.79585 C 503.71105,991.44235 505.20419,987.4402 506.00902,985.90219 L 507.47234,983.10574 L 503.68786,983.52174 C 501.05428,983.81116 499.20561,983.64401 497.60893,982.97209 C 495.61939,982.13482 494.31862,982.12303 487.82076,982.8834 C 481.32764,983.64319 479.69511,983.62878 475.59419,982.77505 C 468.03486,981.2015 463.1967,978.13448 460.12905,972.97152 C 457.96582,969.33067 457.53667,967.85991 457.49 [...]
+    <path
+       id="path1947"
+       style="fill:#ede3d4"
+       d="M 502.59942,1001.6069 C 501.4642,1000.5616 501.54276,999.87292 503.51273,993.60057 C 504.69819,989.82604 506.27613,985.78205 507.01925,984.61369 C 508.51473,982.26266 508.4069,982.20689 504.22677,983.16887 C 501.94662,983.69355 500.66128,983.61723 498.36009,982.82058 C 495.80822,981.93713 494.38751,981.90643 487.75947,982.59186 C 478.45722,983.55376 473.14726,982.78619 467.52056,979.66627 C 460.91983,976.00627 456.17912,967.16156 457.45754,960.89186 C 457.90458,958.69948 457.77 [...]
+    <path
+       id="path1945"
+       style="fill:#e5dac8"
+       d="M 502.76271,1001.725 C 501.90983,1000.8734 502.04684,999.62422 503.56917,994.37217 C 504.57781,990.89227 506.12854,986.80152 507.01523,985.28169 C 508.82224,982.18436 508.50572,981.36225 505.9436,982.49842 C 504.87476,982.97242 502.96023,983.09664 500.94597,982.8228 C 497.13262,982.30426 491.63571,982.21925 482.29908,982.53421 C 474.65809,982.79201 470.65178,981.69146 465.4461,977.90428 C 460.1932,974.08287 456.2939,965.40525 457.83238,960.96056 C 458.53393,958.93373 458.46304, [...]
+    <path
+       id="path1943"
+       style="fill:#d8c9b6"
+       d="M 502.81458,1001.7768 C 502.03045,1000.9939 502.18949,999.61512 503.62508,994.75074 C 504.60741,991.42203 506.24395,987.12057 507.26183,985.19177 L 509.11252,981.68491 L 507.34076,982.1214 C 503.03335,983.18231 499.81742,983.2479 497.61208,982.31981 C 495.62594,981.48395 494.30333,981.46945 487.8557,982.21237 C 479.06505,983.22522 475.18705,982.73468 469.05881,979.83464 C 461.75571,976.3788 457.40865,969.30813 457.97066,961.79943 L 458.24034,958.19642 L 455.19336,957.32303 C 45 [...]
+    <path
+       id="path1941"
+       style="fill:#c9b6a0"
+       d="M 503.27677,1001.7384 C 502.30579,1000.9339 502.30768,1000.2552 503.29075,996.71415 C 504.89423,990.93863 505.8141,988.49423 507.72071,984.9425 C 508.63672,983.23602 509.2234,981.70497 509.02443,981.54004 C 508.82546,981.37519 507.09913,981.68663 505.18814,982.2322 C 502.04725,983.12883 501.39149,983.12211 498.35865,982.16242 C 495.45408,981.24335 494.14122,981.20527 488.57911,981.87916 C 474.32079,983.60659 465.21988,980.22592 460.32233,971.38266 C 458.73189,968.51094 458.3159 [...]
+    <path
+       id="path1987"
+       style="fill:#951313"
+       d="M 579.32288,945.23537 C 579.32288,944.87589 579.87627,944.58178 580.55264,944.58178 C 581.22902,944.58178 581.56304,944.87589 581.2949,945.23537 C 581.02677,945.59484 580.47337,945.88894 580.06513,945.88894 C 579.65688,945.88894 579.32288,945.59484 579.32288,945.23537 z " />
+    <path
+       id="path1985"
+       style="fill:#951313"
+       d="M 630.65789,937.66469 C 630.69574,936.9033 630.88264,936.74844 631.13446,937.26982 C 631.36232,937.74163 631.3343,938.30533 631.07218,938.52252 C 630.81006,938.7397 630.62364,938.35367 630.65789,937.66469 z " />
+    <path
+       id="path1983"
+       style="fill:#951313"
+       d="M 523.31007,937.07276 C 524.29532,936.08913 525.6837,936.29864 525.6837,937.43094 C 525.6837,937.76919 524.93032,938.04595 524.0095,938.04595 C 522.61626,938.04595 522.49887,937.88263 523.31007,937.07276 z " />
+    <path
+       id="path1981"
+       style="fill:#951313"
+       d="M 630.74939,931.18333 C 630.76546,930.10491 630.94225,929.74286 631.14224,930.37878 C 631.34224,931.0147 631.32909,931.89704 631.11303,932.33953 C 630.89694,932.78203 630.73331,932.26173 630.74939,931.18333 z " />
+    <path
+       id="path1979"
+       style="fill:#951313"
+       d="M 443.77187,930.85653 C 443.77187,929.95785 443.95092,929.59021 444.16974,930.03955 C 444.38857,930.4889 444.38857,931.22417 444.16974,931.67351 C 443.95092,932.12285 443.77187,931.7552 443.77187,930.85653 z " />
+    <path
+       id="path1977"
+       style="fill:#951313"
+       d="M 487.88057,930.66005 C 486.94971,928.63146 487.72551,925.62787 489.18033,925.62787 C 490.01372,925.62787 490.17289,925.96083 489.72704,926.77163 C 489.38112,927.40071 489.07691,928.87127 489.05103,930.03955 C 488.99519,932.56033 488.80001,932.66381 487.88057,930.66005 z " />
+    <path
+       id="path1975"
+       style="fill:#951313"
+       d="M 444.49842,925.9002 C 444.53627,925.13881 444.72318,924.98394 444.97499,925.50532 C 445.20285,925.97712 445.17483,926.54084 444.91272,926.75802 C 444.6506,926.9752 444.46417,926.58918 444.49842,925.9002 z " />
+    <path
+       id="path1973"
+       style="fill:#951313"
+       d="M 472.85843,922.015 C 472.90098,920.93725 475.15085,918.83364 475.73941,919.3213 C 476.04519,919.57464 475.5164,920.42734 474.56435,921.21618 C 473.6123,922.00501 472.84463,922.36448 472.85843,922.015 z " />
+    <path
+       id="path1971"
+       style="fill:#951313"
+       d="M 444.56068,920.3992 C 444.56068,919.50052 444.73973,919.13288 444.95855,919.58222 C 445.17738,920.03156 445.17738,920.76684 444.95855,921.21618 C 444.73973,921.66551 444.56068,921.29788 444.56068,920.3992 z " />
+    <path
+       id="path1969"
+       style="fill:#951313"
+       d="M 550.98795,914.78928 C 551.02579,914.02789 551.2127,913.87302 551.46451,914.3944 C 551.69238,914.8662 551.66436,915.42993 551.40224,915.64711 C 551.14012,915.86429 550.9537,915.47827 550.98795,914.78928 z " />
+    <path
+       id="path1967"
+       style="fill:#951313"
+       d="M 529.43056,872.87995 C 530.40671,872.72417 532.00406,872.72417 532.98021,872.87995 C 533.95637,873.03573 533.15769,873.16319 531.20538,873.16319 C 529.25308,873.16319 528.4544,873.03573 529.43056,872.87995 z " />
+    <path
+       id="path1965"
+       style="fill:#951313"
+       d="M 540.47391,872.90835 C 541.01623,872.72704 541.90364,872.72704 542.44595,872.90835 C 542.98825,873.08966 542.54455,873.23801 541.45993,873.23801 C 540.37531,873.23801 539.93161,873.08966 540.47391,872.90835 z " />
+    <path
+       id="path1963"
+       style="fill:#951313"
+       d="M 553.1442,872.89473 C 553.71363,872.70594 554.39397,872.72915 554.65609,872.94633 C 554.91821,873.16351 554.45231,873.31798 553.62078,873.2896 C 552.70185,873.25824 552.51494,873.10337 553.1442,872.89473 z " />
+    <path
+       id="path1937"
+       style="fill:#951313"
+       d="M 545.99559,872.22636 C 546.97175,872.07057 548.56909,872.07057 549.54525,872.22636 C 550.5214,872.38215 549.72273,872.50961 547.77043,872.50961 C 545.81812,872.50961 545.01944,872.38215 545.99559,872.22636 z " />
+    <path
+       id="path3961"
+       style="fill:url(#radialGradient22004);fill-opacity:1;stroke:#000000;stroke-width:3.67062211;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(1.244123,0,0,0.954503,-693.7876,116.3065)"
+       d="M 1081.5879,860.56061 C 1081.5879,902.77296 1040.5886,936.99283 990.01345,936.99283 C 939.43827,936.99283 898.43899,902.77296 898.43899,860.56061 C 898.43899,818.34826 939.43827,784.12839 990.01345,784.12839 C 1040.5886,784.12839 1081.5879,818.34826 1081.5879,860.56061 L 1081.5879,860.56061 z " />
+    <text
+       xml:space="preserve"
+       id="text6648"
+       style="font-size:68.54483795px;font-style:normal;font-weight:normal;fill:#808080;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(0.630603,1.585784)"
+       y="615.23743"
+       x="713.86377"><tspan
+         id="tspan6650"
+         style="fill:#808080;font-family:Arial Black"
+         y="615.23743"
+         x="713.86377">Authors</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text6644"
+       style="font-size:68.54482269px;font-style:normal;font-weight:normal;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.88828206;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.3853211;font-family:Bitstream Vera Sans"
+       transform="scale(0.630603,1.585784)"
+       y="612.98938"
+       x="707.52148"><tspan
+         id="tspan6646"
+         style="fill:#ffffff;stroke:#000000;stroke-width:1.88828206;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.3853211;font-family:Arial Black"
+         y="612.98938"
+         x="707.52148">Authors</tspan></text>
+  </g>
+  <text
+     xml:space="preserve"
+     id="text22931"
+     style="font-size:27.52882576px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.39196366px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931228)"
+     y="544.15887"
+     x="24.405096"><tspan
+       id="tspan22933"
+       style="stroke-width:0.39196366"
+       y="544.15887"
+       x="24.405096">Windows dialogs  icons</tspan></text>
+  <g
+     id="g12170"
+     transform="matrix(0.4319372,0,0,0.4498758,18.231026,171.00785)">
+    <rect
+       id="rect23834"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.03204477;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="875.74768"
+       x="126.0412"
+       ry="3.6935918"
+       rx="3.8469896"
+       height="11.788779"
+       width="12.154853" />
+    <rect
+       id="rect22941"
+       style="color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="872.5824"
+       x="20.323393"
+       ry="8.0265341"
+       rx="8.3598824"
+       height="35.138783"
+       width="151.98308" />
+    <rect
+       id="rect22945"
+       style="color:#000000;fill:#f8faee;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4.00652599;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="891.11914"
+       x="20.350714"
+       rx="0"
+       height="114.16743"
+       width="151.97687" />
+    <path
+       id="rect23842"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.56422842;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 158.49055,878.70062 L 157.49829,879.64318 L 159.58546,881.64203 L 157.49829,883.62464 L 158.49055,884.58344 L 160.57772,882.58458 L 162.682,884.58344 L 163.67427,883.62464 L 161.58709,881.64203 L 163.67427,879.64318 L 162.682,878.70062 L 160.57772,880.69948 L 158.49055,878.70062 z " />
+    <rect
+       id="rect23847"
+       style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60069585;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="878.26733"
+       x="142.79971"
+       height="6.7494717"
+       width="7.1054482" />
+    <rect
+       id="rect24736"
+       style="color:#000000;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.60069585;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="881.26709"
+       x="128.26984"
+       height="0.74994129"
+       width="7.6975689" />
+    <rect
+       id="rect24738"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="922.56213"
+       x="38.681862"
+       height="20.998356"
+       width="25.263815" />
+    <rect
+       id="rect24740"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="965.20441"
+       x="38.681862"
+       height="20.998356"
+       width="25.263815" />
+    <path
+       id="path24753"
+       style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.89635372;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 40.809598,911.37143 C 41.671713,912.1272 50.069084,939.85801 52.909465,934.84078 C 55.749848,929.8236 62.671602,907.39677 65.284628,901.91556 C 65.284628,901.91556 85.426303,899.02152 85.300786,899.09789 C 83.258501,901.01303 63.116189,930.65337 58.376025,938.85439 C 53.746942,946.86326 51.343507,956.45969 46.494131,945.8154 C 41.64475,935.17112 31.623529,922.50006 30.793189,922.56258 L 40.809598,911.37143 z " />
+  </g>
+  <g
+     id="g4797"
+     transform="matrix(0.4319372,0,0,0.4498758,18.911187,161.30876)">
+    <path
+       id="path32874"
+       style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 222.9139,971.83763 C 224.31188,984.37252 231.43303,979.98107 235.52407,980.16963 C 248.05036,979.31895 302.15353,957.8916 314.34608,969.18834 C 328.07467,981.9082 309.77123,985.26097 314.15627,994.98106 C 318.83077,1005.3427 362.97638,979.65533 372.0669,986.77687 C 380.11625,993.08276 365.01248,1003.6742 374.14148,1007.1155 L 421.92941,1025.1302 C 419.64367,1024.2843 371.28014,1026.1402 359.90159,1021.5514 C 348.52305,1016.9625 367.90754,1007.4422 356.01446,1002.2013 C 343.72 [...]
+    <g
+       id="g31971"
+       style="stroke:#000000;stroke-width:5.69030762;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.647295,-0.271121,0.269841,0.650366,-46.38199,391.29)">
+      <path
+         id="rect31968"
+         style="color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030762;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 217.03863,1016.6698 C 225.90296,1002.2057 241.91515,1002.0683 250.20732,1016.6698 C 258.49949,1031.2712 240.83356,1054.7056 249.84679,1078.6808 C 210.77979,1064.0771 208.1743,1031.1339 217.03863,1016.6698 z " />
+      <path
+         id="path31966"
+         style="color:#000000;fill:#ffd42a;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030762;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 220.174,985.51775 C 220.75236,998.84302 225.21669,1008.8408 225.21669,1008.8408 C 225.21669,1008.8408 241.10352,1008.8408 241.10352,1008.8408 C 241.10352,1008.8408 245.77889,998.84302 246.35725,985.51775 L 220.174,985.51775 z " />
+      <path
+         id="path31065"
+         style="color:#000000;fill:#f4eed7;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030762;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 220.05246,985.21867 L 246.47869,985.21867 C 247.88454,957.15577 249.63979,907.26755 245.36077,886.16681 C 239.30506,856.30492 227.195,856.30489 221.13932,886.16681 C 216.86029,907.26758 218.6466,957.15578 220.05246,985.21867 z " />
+    </g>
+    <g
+       id="g35698"
+       transform="translate(0,4.724942)">
+      <path
+         id="path31976"
+         style="color:#000000;fill:url(#linearGradient21998);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030905;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.701288,0,0,0.704615,92.93315,213.5991)"
+         d="M 346.82919,991.43274 C 346.82919,1005.5699 317.29034,1017.0303 280.85233,1017.0303 C 244.41432,1017.0303 214.87547,1005.5699 214.87547,991.43274 C 214.87547,977.29559 244.41432,965.83516 280.85233,965.83516 C 317.29034,965.83516 346.82919,977.29559 346.82919,991.43274 L 346.82919,991.43274 z " />
+      <path
+         id="path33846"
+         style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.69030905;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.701288,0,0,0.704615,92.93315,229.1006)"
+         d="M 346.82919,991.43274 C 346.82919,1005.5699 317.29034,1017.0303 280.85233,1017.0303 C 244.41432,1017.0303 214.87547,1005.5699 214.87547,991.43274 C 214.87547,977.29559 244.41432,965.83516 280.85233,965.83516 C 317.29034,965.83516 346.82919,977.29559 346.82919,991.43274 L 346.82919,991.43274 z " />
+      <path
+         id="rect31978"
+         style="color:#000000;fill:url(#linearGradient22000);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 243.11836,912.92949 L 243.11836,1003.3844 L 243.71007,1003.3844 C 245.06363,1012.8683 265.22012,1020.4053 289.8855,1020.4053 C 314.55089,1020.4053 334.72928,1012.8683 336.08285,1003.3844 L 336.67456,1003.3844 L 336.67456,912.92949 L 336.12668,912.92949 C 335.11525,922.53769 314.78034,930.21461 289.8855,930.21461 C 264.99067,930.21454 244.67767,922.53769 243.66624,912.92949 L 243.11836,912.92949 z " />
+    </g>
+    <g
+       id="g33816"
+       style="stroke:#000000;stroke-width:5.24876118;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.277598,-0.646844,0.807082,0.211518,-689.7975,708.6869)">
+      <path
+         id="path33812"
+         style="opacity:1;color:#000000;fill:#f6cc00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5.24876118;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="translate(-321.2316,177.7409)"
+         d="M 346.82919,991.43274 C 346.82919,1005.5699 317.29034,1017.0303 280.85233,1017.0303 C 244.41432,1017.0303 214.87547,1005.5699 214.87547,991.43274 C 214.87547,977.29559 244.41432,965.83516 280.85233,965.83516 C 317.29034,965.83516 346.82919,977.29559 346.82919,991.43274 L 346.82919,991.43274 z " />
+      <path
+         id="path32868"
+         style="color:#000000;fill:#f6cc00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:6.60145378;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.844693,0,0,0.748403,-277.6133,427.1824)"
+         d="M 346.82919,991.43274 C 346.82919,1005.5699 317.29034,1017.0303 280.85233,1017.0303 C 244.41432,1017.0303 214.87547,1005.5699 214.87547,991.43274 C 214.87547,977.29559 244.41432,965.83516 280.85233,965.83516 C 317.29034,965.83516 346.82919,977.29559 346.82919,991.43274 L 346.82919,991.43274 z " />
+    </g>
+    <text
+       xml:space="preserve"
+       id="text34758"
+       style="font-size:154.30929565px;font-style:normal;font-weight:normal;fill:url(#linearGradient22002);fill-opacity:1;stroke:#000000;stroke-width:4.33082438;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(0.979674,1.020748)"
+       y="1001.9447"
+       x="282.5267"><tspan
+         id="tspan34760"
+         style="fill:url(#linearGradient22002);fill-opacity:1;stroke:#000000;stroke-width:4.33082438;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;font-family:Benguiat Bk BT"
+         y="1001.9447"
+         x="282.5267">a</tspan></text>
+  </g>
+  <g
+     id="g12864"
+     transform="matrix(0.4010001,0,0,0.4010001,-84.566987,294.76916)">
+    <g
+       id="g4195"
+       transform="matrix(0.55729,0.197335,-0.177243,0.494042,299.7619,400.7691)">
+      <path
+         id="path4211"
+         style="fill:#f8fcf7"
+         d="M 812.02557,795.05377 L 812.02557,663.55377 L 904.02557,663.55377 L 996.02557,663.55377 L 996.02557,795.05377 L 996.02557,926.55377 L 904.02557,926.55377 L 812.02557,926.55377 L 812.02557,795.05377 z " />
+      <path
+         id="path4209"
+         style="fill:#e6e9e5"
+         d="M 818.76986,923.74306 C 815.86924,923.5031 814.6967,922.81848 813.61986,920.7361 C 812.08668,917.77125 811.73311,910.85255 813.07249,910.02477 C 813.53829,909.73689 813.93352,886.53599 813.95076,858.46721 C 813.96801,830.39844 814.16052,807.12273 814.37856,806.74342 C 814.5966,806.36411 814.4355,803.57877 814.02057,800.55377 C 813.60564,797.52877 813.64889,792.62704 814.11667,789.66104 C 814.58445,786.69504 814.73639,783.89489 814.45432,783.43849 C 814.17225,782.98209 813.969 [...]
+      <path
+         id="path4207"
+         style="fill:#d7d9d5"
+         d="M 900.92189,923.55556 C 899.99848,923.0158 884.3034,922.65348 863.92189,922.70142 C 844.45392,922.74722 826.95057,922.77684 825.02557,922.76726 C 818.03454,922.73246 815.02017,921.99107 813.5946,919.95579 C 811.97756,917.64714 811.77627,911.70133 813.25204,909.83706 C 813.78178,909.16788 814.09866,906.46788 813.95623,903.83706 C 813.8138,901.20625 813.77114,878.46627 813.86142,853.30377 C 814.00468,813.37673 814.21649,807.55377 815.52557,807.55377 C 817.44738,807.55377 817.42 [...]
+      <path
+         id="path4205"
+         style="fill:#e7d4c9"
+         d="M 900.92189,923.55556 C 899.99848,923.0158 884.3034,922.65348 863.92189,922.70142 C 844.45392,922.74722 826.95057,922.77684 825.02557,922.76726 C 818.03454,922.73246 815.02017,921.99107 813.5946,919.95579 C 811.97756,917.64714 811.77627,911.70133 813.25204,909.83706 C 813.78178,909.16788 814.09866,906.46788 813.95623,903.83706 C 813.8138,901.20625 813.77114,878.46627 813.86142,853.30377 C 814.00468,813.37673 814.21649,807.55377 815.52557,807.55377 C 817.44738,807.55377 817.42 [...]
+      <path
+         id="path4203"
+         style="fill:#dec6b7"
+         d="M 900.15318,922.69278 C 899.39836,922.1932 884.34447,921.7118 866.70009,921.623 C 845.18008,921.5147 834.18561,921.10156 833.3017,920.36798 C 832.57698,919.76651 831.4877,917.30335 830.8811,914.8943 C 829.98732,911.34478 829.51719,910.7308 828.40187,911.65643 C 826.70192,913.06727 826.63293,915.9522 828.23771,918.52186 C 829.82031,921.056 828.77123,921.97128 824.42525,921.84809 C 820.04052,921.7238 819.2617,921.00657 820.81342,918.52186 C 822.42038,915.94872 822.34862,913.066 [...]
+      <path
+         id="path4201"
+         style="fill:#d9b6a7"
+         d="M 891.52557,921.4949 C 886.02557,921.04221 870.99197,920.71013 858.11756,920.75695 C 831.67968,920.8531 832.03147,920.95614 832.01925,913.11264 C 832.01382,909.63005 831.57637,908.8053 828.93821,907.30377 C 824.94173,905.02914 823.56294,905.0966 819.98508,907.74183 C 817.76813,909.38089 817.02557,910.74036 817.02557,913.16004 C 817.02557,918.11524 816.15361,919.69266 814.03984,918.5614 C 812.03696,917.4895 811.9235,911.42113 813.89405,910.76428 C 814.71611,910.49026 815.02557 [...]
+      <path
+         id="path4199"
+         style="fill:#d2a89a"
+         d="M 901.02557,921.55858 C 900.20057,921.02278 896.40457,920.5775 892.59002,920.56908 C 886.85168,920.55641 885.25369,920.17726 883.33273,918.37261 C 881.11952,916.29341 880.94947,916.27558 879.69486,917.99136 C 878.56335,919.53879 878.08481,919.60771 876.28335,918.48269 C 874.67574,917.47871 873.86025,917.44608 872.78013,918.34251 C 871.70524,919.23458 870.62179,919.22763 868.19893,918.3131 C 865.76472,917.39429 864.30463,917.38742 861.93042,918.28358 C 859.55222,919.18125 858. [...]
+      <path
+         id="path4197"
+         style="fill:#cda394"
+         d="M 885.65451,919.03985 C 884.75859,918.14394 884.02557,917.06529 884.02557,916.64286 C 884.02557,914.82206 879.41445,913.77528 877.02557,915.05377 C 872.38042,917.53978 867.60267,912.80948 871.49556,909.57868 C 874.44114,907.13406 878.97724,907.73976 882.6043,911.06202 C 884.486,912.78559 886.02557,914.71775 886.02557,915.35572 C 886.02557,915.99369 887.26307,916.78134 888.77557,917.10605 C 890.28807,917.43077 892.42557,918.08389 893.52557,918.55743 C 895.31699,919.32862 895.2 [...]
+    </g>
+    <g
+       id="g9933"
+       transform="translate(-126.2218,-1.22947)">
+      <rect
+         id="rect9935"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-0.985935,0.167129,0.16871,0.985666,0,0)"
+         y="1029.7926"
+         x="-565.01947"
+         height="116.82966"
+         width="2.5678744" />
+      <rect
+         id="rect9937"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.981474,0.191593,-0.19145,0.981502,0,0)"
+         y="763.79895"
+         x="890.80157"
+         height="117.90984"
+         width="2.8053782" />
+      <g
+         id="g9939"
+         transform="matrix(0.571057,0,0,0.646281,293.2046,457.7222)">
+        <path
+           id="path9941"
+           style="opacity:1;color:#000000;fill:url(#radialGradient21982);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           d="M 800.06862,895.59747 C 800.06862,898.51334 782.52213,900.87711 760.87744,900.87711 C 739.23275,900.87711 721.68626,898.51334 721.68626,895.59747 C 721.68626,892.6816 739.23275,890.31783 760.87744,890.31783 C 782.52213,890.31783 800.06862,892.6816 800.06862,895.59747 z " />
+        <path
+           id="path9943"
+           style="color:#000000;fill:url(#linearGradient21984);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           transform="translate(-2.027946e-7,12.18378)"
+           d="M 799.86556,884.22593 C 793.36754,893.23219 782.51097,900.87711 760.87744,900.87711 C 739.24391,900.87711 727.66931,891.94233 721.68626,883.81981 C 756.92502,889.9117 765.34483,889.4341 799.86556,884.22593 z " />
+      </g>
+      <rect
+         id="rect9945"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.999488,-3.199729e-2,-6.823932e-2,0.997669,0,0)"
+         y="948.75696"
+         x="793.65533"
+         height="119.00449"
+         width="2.421216" />
+    </g>
+    <g
+       id="g9925">
+      <rect
+         id="rect8100"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-0.985935,0.167129,0.16871,0.985666,0,0)"
+         y="1029.7926"
+         x="-565.01947"
+         height="116.82966"
+         width="2.5678744" />
+      <rect
+         id="rect8102"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.981474,0.191593,-0.19145,0.981502,0,0)"
+         y="763.79895"
+         x="890.80157"
+         height="117.90984"
+         width="2.8053782" />
+      <g
+         id="g9911"
+         transform="matrix(0.571057,0,0,0.646281,293.2046,457.7222)">
+        <path
+           id="path8109"
+           style="opacity:1;color:#000000;fill:url(#radialGradient21986);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           d="M 800.06862,895.59747 C 800.06862,898.51334 782.52213,900.87711 760.87744,900.87711 C 739.23275,900.87711 721.68626,898.51334 721.68626,895.59747 C 721.68626,892.6816 739.23275,890.31783 760.87744,890.31783 C 782.52213,890.31783 800.06862,892.6816 800.06862,895.59747 z " />
+        <path
+           id="path8111"
+           style="color:#000000;fill:url(#linearGradient21988);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           transform="translate(-2.027946e-7,12.18378)"
+           d="M 799.86556,884.22593 C 793.36754,893.23219 782.51097,900.87711 760.87744,900.87711 C 739.24391,900.87711 727.66931,891.94233 721.68626,883.81981 C 756.92502,889.9117 765.34483,889.4341 799.86556,884.22593 z " />
+      </g>
+      <rect
+         id="rect8098"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.24311924;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0.999488,-3.199729e-2,-6.823932e-2,0.997669,0,0)"
+         y="948.75696"
+         x="793.65533"
+         height="119.00449"
+         width="2.421216" />
+    </g>
+    <path
+       id="path7172"
+       style="color:#000000;fill:url(#linearGradient21990);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 666.98477,874.01151 C 661.91215,874.01154 657.79726,877.03628 657.79727,880.76151 C 657.7973,883.28322 659.69239,885.47812 662.48477,886.63651 L 662.48477,915.10526 L 596.45352,915.10526 L 596.73477,922.57401 L 662.23477,928.01151 L 662.48477,928.01151 L 662.48477,1033.7303 C 659.87852,1037.3812 648.16738,1048.352 634.76602,1050.9491 C 622.71362,1053.2844 649.18306,1058.8524 667.45352,1058.7928 C 685.7232,1058.7333 709.07681,1053.1347 697.79727,1050.9491 C 688.57051,1049.161  [...]
+    <path
+       id="path11769"
+       style="color:#000000;fill:url(#linearGradient21992);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(-0.134374,0.335517,-0.340315,-0.132479,1032.981,877.1416)"
+       d="M 507.72468,916.81576 L 484.07619,918.83319 L 460.36885,919.96576 L 451.14238,898.09813 L 442.73927,875.90109 L 460.68548,860.36872 L 479.19942,845.51763 L 499.51726,857.78573 L 519.36261,870.80429 L 513.97352,893.91875 L 507.72468,916.81576 z " />
+    <g
+       id="g4054"
+       style="stroke:#000000;stroke-width:2.99999976;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.649307,0.410145,-0.289594,0.919597,699.6512,1.482277)">
+      <g
+         id="g3996"
+         style="stroke:#000000;stroke-width:4.76802254;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.576811,0,0,0.686329,128.7083,280.1342)">
+        <path
+           id="rect3032"
+           style="fill:url(#linearGradient21994);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.76802254;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           d="M 276.84375,911.0625 L 276.84375,989.28125 L 277.09375,989.28125 C 276.92316,989.86231 276.84375,990.46384 276.84375,991.0625 C 276.84375,999.6226 294.76374,1006.5625 316.84375,1006.5625 C 338.92375,1006.5625 356.84374,999.62261 356.84375,991.0625 C 356.84375,990.46304 356.73354,989.86305 356.5625,989.28125 L 356.84375,989.28125 L 356.84375,911.0625 L 276.84375,911.0625 z " />
+        <path
+           id="path3034"
+           style="fill:#f2d8a1;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.74592447;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           transform="matrix(1.009334,0,0,1,-3.743411,21.52787)"
+           d="M 357.2452,887.52399 C 357.25372,896.09086 339.50823,903.03745 317.61511,903.03745 C 295.72199,903.03745 277.9765,896.09086 277.98502,887.52399 C 277.9765,878.95712 295.72199,872.01053 317.61511,872.01053 C 339.50823,872.01053 357.25372,878.95712 357.2452,887.52399 L 357.2452,887.52399 z " />
+      </g>
+      <path
+         id="rect3932"
+         style="fill:url(#linearGradient21996);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.99999976;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 334.9799,922.80826 C 330.15845,922.80826 326.25154,927.12009 326.25154,932.42554 C 326.25154,937.731 330.15845,942.02679 334.9799,942.02678 C 335.41809,942.02678 335.83965,941.98324 336.26058,941.91458 L 465.5309,941.91458 L 465.5309,922.92046 L 336.26058,922.92046 C 335.83965,922.8518 335.41809,922.80826 334.9799,922.80826 z " />
+      <path
+         id="path3934"
+         style="color:#000000;fill:#dd9600;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:9.71709728;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(0,0.24316,-0.391992,0,813.2404,855.1861)"
+         d="M 357.2452,887.52399 C 357.25372,896.09086 339.50823,903.03745 317.61511,903.03745 C 295.72199,903.03745 277.9765,896.09086 277.98502,887.52399 C 277.9765,878.95712 295.72199,872.01053 317.61511,872.01053 C 339.50823,872.01053 357.25372,878.95712 357.2452,887.52399 L 357.2452,887.52399 z " />
+    </g>
+  </g>
+  <g
+     style="display:inline"
+     id="layer1" />
+  <rect
+     id="rect19117"
+     style="fill:#ddddd3;fill-opacity:1;stroke:black;stroke-width:1.29999995;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     y="809.36218"
+     x="295"
+     ry="10.456966"
+     rx="10.456965"
+     height="19"
+     width="0" />
+  <text
+     xml:space="preserve"
+     id="text13940"
+     style="font-size:22.53170586px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.32081166px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931229)"
+     y="40.768425"
+     x="26.500059"><tspan
+       id="tspan13942"
+       style="stroke-width:0.32081166"
+       y="40.768425"
+       x="26.500059">TuxGuitar Player 0.8 Version</tspan></text>
+  <text
+     xml:space="preserve"
+     id="text14708"
+     style="font-size:7.94642258px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.11314224px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931229)"
+     y="54.076897"
+     x="26.042126"><tspan
+       id="tspan14710"
+       style="stroke-width:0.11314224"
+       y="54.076897"
+       x="26.042126">Buttons defaut</tspan></text>
+  <text
+     xml:space="preserve"
+     id="text14712"
+     style="font-size:7.94658804px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.11314419px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931229)"
+     y="54.680504"
+     x="192.78673"><tspan
+       id="tspan14714"
+       style="stroke-width:0.11314419"
+       y="54.680504"
+       x="192.78673">Buttons is on</tspan></text>
+  <g
+     id="g14668"
+     transform="matrix(0.2437635,0,0,0.2437635,21.28266,-45.301701)">
+    <rect
+       id="rect11961"
+       style="fill:url(#radialGradient23057);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="423.20502"
+       x="468.68112"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path11963"
+       style="fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.3790741;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 486.4644,431.15917 L 486.4644,473.09596 L 486.4644,515.03274 L 507.773,494.07524 L 508.08182,493.77025 L 508.08182,506.6236 L 529.39041,489.87067 L 550.67971,473.09596 L 529.39041,456.32124 L 508.08182,439.56831 L 508.08182,452.42167 L 507.773,452.11667 L 486.4644,431.15917 z " />
+  </g>
+  <g
+     id="g14680"
+     transform="matrix(0.2437635,0,0,0.2437635,21.28266,-45.301701)">
+    <rect
+       id="rect11977"
+       style="fill:url(#radialGradient23061);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="423.20511"
+       x="129.84697"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path11979"
+       style="fill:#d4aa00;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.3790741;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 211.84556,431.15928 L 211.84556,473.09605 L 211.84556,515.03284 L 190.53697,494.07534 L 190.22814,493.77035 L 190.22814,506.6237 L 168.91955,489.87077 L 147.63025,473.09605 L 168.91955,456.32135 L 190.22814,439.56842 L 190.22814,452.42178 L 190.53697,452.11678 L 211.84556,431.15928 z " />
+  </g>
+  <g
+     id="g14672"
+     transform="matrix(0.2437635,0,0,0.2437635,21.28266,-45.301701)">
+    <rect
+       id="rect11983"
+       style="fill:url(#radialGradient23063);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="423.20508"
+       x="16.902269"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path11985"
+       style="fill:#aa4400;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.37930822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 107.04162,430.81066 L 90.746186,446.99717 L 90.746186,431.15923 L 69.44012,452.11673 L 69.135125,452.42172 L 69.135125,439.56837 L 47.829059,456.3213 L 26.544777,473.09601 L 47.829059,489.87073 L 69.135125,506.62366 L 69.135125,493.7703 L 69.44012,494.0753 L 90.746186,515.0328 L 90.746186,499.19485 L 107.04162,515.38136 L 107.04162,473.09601 L 107.04162,430.81066 z " />
+  </g>
+  <g
+     id="g14656"
+     transform="matrix(0.2437635,0,0,0.2437635,21.28266,-45.301701)">
+    <rect
+       id="rect11989"
+       style="fill:url(#radialGradient23065);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="scale(-1,1)"
+       y="423.20508"
+       x="-681.40753"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path11991"
+       style="fill:#aa4400;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.37930822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 591.26818,430.81066 L 607.56361,446.99717 L 607.56361,431.15923 L 628.86968,452.11673 L 629.17467,452.42172 L 629.17467,439.56837 L 650.48074,456.3213 L 671.76502,473.09601 L 650.48074,489.87073 L 629.17467,506.62366 L 629.17467,493.7703 L 628.86968,494.0753 L 607.56361,515.0328 L 607.56361,499.19485 L 591.26818,515.38136 L 591.26818,473.09601 L 591.26818,430.81066 z " />
+  </g>
+  <g
+     id="g14488"
+     style="fill-rule:evenodd;display:inline"
+     transform="matrix(0.1699352,0,0,0.1699352,278.84004,51.405169)">
+    <rect
+       id="rect14490"
+       style="fill:url(#radialGradient23067);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="41.576488"
+       x="188.79814"
+       ry="31.803694"
+       rx="31.803694"
+       height="143.13216"
+       width="143.13216" />
+    <path
+       id="path14492"
+       style="opacity:1;fill:#56ff00;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:3.62562513;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="matrix(0.648516,0,0,0.694809,486.9305,19.37587)"
+       d="M -418.05177,221.55162 L -418.05177,134.95318 L -418.05177,48.354749 L -343.05532,91.653969 L -268.05888,134.95319 L -343.05532,178.25241 L -418.05177,221.55162 z " />
+  </g>
+  <g
+     id="g14664"
+     transform="matrix(0.2437635,0,0,0.2437635,223.81,-75.031711)">
+    <rect
+       id="rect14496"
+       style="fill:url(#radialGradient23069);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="547.67133"
+       x="470.31363"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path14498"
+       style="fill:#ffdd55;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.3790741;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 488.0969,555.62547 L 488.0969,597.56226 L 488.0969,639.49904 L 509.4055,618.54154 L 509.71432,618.23655 L 509.71432,631.0899 L 531.02291,614.33697 L 552.31221,597.56226 L 531.02291,580.78754 L 509.71432,564.03461 L 509.71432,576.88797 L 509.4055,576.58297 L 488.0969,555.62547 z " />
+  </g>
+  <g
+     id="g14688"
+     transform="matrix(0.2437635,0,0,0.2437635,223.81,-75.031711)">
+    <rect
+       id="rect14502"
+       style="fill:url(#radialGradient23071);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="547.67133"
+       x="244.42415"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <g
+       id="g14504"
+       style="fill:#2a7fff;fill-opacity:0.75;fill-rule:evenodd"
+       transform="matrix(0.697131,0,0,0.697131,114.7389,494.0779)">
+      <rect
+         id="rect14506"
+         style="opacity:1;fill:#2a7fff;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.43374991;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="86.419327"
+         x="214.01666"
+         ry="31.803694"
+         rx="31.803694"
+         height="124.04787"
+         width="38.168575" />
+      <rect
+         id="rect14508"
+         style="opacity:1;fill:#2a7fff;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.43374991;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="86.419327"
+         x="263.00107"
+         ry="31.803694"
+         rx="31.803694"
+         height="124.04787"
+         width="38.168575" />
+    </g>
+  </g>
+  <g
+     id="g14684"
+     transform="matrix(0.2437635,0,0,0.2437635,194.95323,-74.069821)">
+    <rect
+       id="rect14512"
+       style="fill:url(#radialGradient23073);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="547.67139"
+       x="131.47948"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path14514"
+       style="fill:#ffdd55;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.3790741;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 213.47806,555.62558 L 213.47806,597.56235 L 213.47806,639.49914 L 192.16947,618.54164 L 191.86064,618.23665 L 191.86064,631.09 L 170.55205,614.33707 L 149.26275,597.56235 L 170.55205,580.78765 L 191.86064,564.03472 L 191.86064,576.88808 L 192.16947,576.58308 L 213.47806,555.62558 z " />
+  </g>
+  <g
+     id="g14676"
+     transform="matrix(0.2437635,0,0,0.2437635,195.43418,-74.550761)">
+    <rect
+       id="rect14518"
+       style="fill:url(#radialGradient23075);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="547.67139"
+       x="18.534769"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path14520"
+       style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.37930822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 108.67412,555.27696 L 92.378686,571.46347 L 92.378686,555.62553 L 71.07262,576.58303 L 70.767625,576.88802 L 70.767625,564.03467 L 49.461559,580.7876 L 28.177277,597.56231 L 49.461559,614.33703 L 70.767625,631.08996 L 70.767625,618.2366 L 71.07262,618.5416 L 92.378686,639.4991 L 92.378686,623.66115 L 108.67412,639.84766 L 108.67412,597.56231 L 108.67412,555.27696 z " />
+  </g>
+  <g
+     id="g14660"
+     transform="matrix(0.2437635,0,0,0.2437635,223.81,-75.031711)">
+    <rect
+       id="rect14524"
+       style="fill:url(#radialGradient23077);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="scale(-1,1)"
+       y="547.67139"
+       x="-683.04004"
+       ry="22.171343"
+       rx="22.171343"
+       height="99.78186"
+       width="99.78186" />
+    <path
+       id="path14526"
+       style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.37930822;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 592.90068,555.27696 L 609.19611,571.46347 L 609.19611,555.62553 L 630.50218,576.58303 L 630.80717,576.88802 L 630.80717,564.03467 L 652.11324,580.7876 L 673.39752,597.56231 L 652.11324,614.33703 L 630.80717,631.08996 L 630.80717,618.2366 L 630.50218,618.5416 L 609.19611,639.4991 L 609.19611,623.66115 L 592.90068,639.84766 L 592.90068,597.56231 L 592.90068,555.27696 z " />
+  </g>
+  <g
+     id="g3617"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/transport_stop_1.png"
+     inkscape:export-xdpi="93.671768"
+     inkscape:export-ydpi="93.671768"
+     transform="matrix(0.6801604,0,0,0.6801604,-12.570086,11.373789)">
+    <rect
+       width="35.760925"
+       height="35.760925"
+       rx="7.9460096"
+       ry="7.9460096"
+       x="-173.95715"
+       y="68.81382"
+       transform="scale(-1,1)"
+       style="fill:url(#radialGradient3567);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74953651;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect1657" />
+    <rect
+       width="26.976021"
+       height="30.992802"
+       rx="22.477581"
+       ry="7.9460096"
+       x="142.58868"
+       y="71.306572"
+       style="fill:#722a2d;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.02269864;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect1692" />
+  </g>
+  <rect
+     id="rect32996"
+     style="fill:#ececec;fill-opacity:1;fill-rule:nonzero;stroke:black;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     y="525.36218"
+     x="687.5"
+     height="0"
+     width="2" />
+  <rect
+     id="rect2827"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="364.07678"
+     x="26.202015"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_accentuated.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect2837"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="364.07678"
+     x="74.713554"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_fade_in.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect6548"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="363.86951"
+     x="123.14871"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_ghost.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect6595"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="362.53619"
+     x="170.95718"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_grace.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect7500"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="362.53619"
+     x="219.48363"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_hammer.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect7533"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="363.17297"
+     x="268.23099"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_harmonic.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3143"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="363.17297"
+     x="317.33041"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_heavy_accentuated.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3182"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="363.17297"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_palm_mute.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <text
+     xml:space="preserve"
+     id="text17219"
+     style="font-size:23.18305969px;font-style:normal;font-weight:normal;fill:#b6b200;fill-opacity:1;stroke:#000000;stroke-width:0.33008549px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+     transform="scale(1.0069248,0.9931228)"
+     y="111.45198"
+     x="25.711828"><tspan
+       id="tspan17221"
+       style="stroke-width:0.33008549"
+       y="111.45198"
+       x="25.711828">Toolbar  icons</tspan></text>
+  <rect
+     id="rect4097"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.2746"
+     x="264.20929"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect14867"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.48258"
+     x="26.252657"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect15996"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.25077"
+     x="74.015976"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g32002"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path17175"
+       style="fill:url(#radialGradient24181);fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 145.47587,425.69429 C 133.63167,425.69429 124.02417,438.17757 124.02415,453.55736 C 124.02415,468.93714 133.63253,481.2776 145.47587,481.42044 C 158.43256,481.58056 162.04794,467.44225 166.22497,467.54379 C 170.40896,467.64549 173.39835,473.20864 179.66248,473.20863 C 181.97807,473.20861 184.16425,472.36905 186.07384,470.92513 C 182.71696,470.14458 180.23335,467.46246 180.23335,464.27224 C 180.23335,461.8528 181.65978,459.7477 183.8123,458.51958 L 178.63051,458.51958 L 178.63 [...]
+    <g
+       id="g31944">
+      <rect
+         id="rect17179"
+         style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-178.47929"
+         x="445.22119"
+         height="7.0455441"
+         width="15.051844" />
+      <rect
+         id="rect17181"
+         style="fill:#ececec;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-177.67867"
+         x="446.82245"
+         height="5.444284"
+         width="11.849324" />
+    </g>
+    <g
+       id="g31940">
+      <rect
+         id="rect17185"
+         style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-165.349"
+         x="445.22119"
+         height="7.0455441"
+         width="15.051844" />
+      <rect
+         id="rect17187"
+         style="fill:#ececec;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-164.54837"
+         x="446.82245"
+         height="5.444284"
+         width="11.849324" />
+    </g>
+    <rect
+       id="rect17189"
+       style="fill:#50211b;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-205.54079"
+       x="447.94327"
+       height="26.741035"
+       width="10.568314" />
+    <path
+       id="path17191"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,0.46582,-0.445568,0,522.2851,232.6176)"
+       d="M 462.5,843.48718 C 462.5,845.075 461.21282,846.36218 459.625,846.36218 C 458.03718,846.36218 456.75,845.075 456.75,843.48718 C 456.75,841.89936 458.03718,840.61218 459.625,840.61218 C 461.21282,840.61218 462.5,841.89936 462.5,843.48718 z " />
+    <path
+       id="path17193"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,0.46582,-0.445568,0,522.5079,232.6176)"
+       d="M 489.75,843.98718 C 489.75,845.575 488.46282,846.86218 486.875,846.86218 C 485.28718,846.86218 484,845.575 484,843.98718 C 484,842.39936 485.28718,841.11218 486.875,841.11218 C 488.46282,841.11218 489.75,842.39936 489.75,843.98718 L 489.75,843.98718 z " />
+    <rect
+       id="rect17197"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-154.30049"
+       x="444.74075"
+       ry="4.4671021"
+       rx="4.4671021"
+       height="3.0423932"
+       width="16.172722" />
+    <g
+       id="g17199"
+       transform="matrix(0,0.414685,-0.450725,0,527.3259,253.3075)">
+      <rect
+         id="rect17201"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="831.05066"
+         x="466.6709"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17203"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="471.80353"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17205"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="476.93613"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17207"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="482.06876"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17209"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="487.20135"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect17211"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="492.33401"
+         height="1.7859424"
+         width="3.2650242" />
+    </g>
+    <rect
+       id="rect17195"
+       style="fill:url(#linearGradient24183);fill-opacity:1;stroke:url(#linearGradient24185);stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-147.45714"
+       x="446.52585"
+       height="2.0050554"
+       width="13.102184" />
+  </g>
+  <rect
+     id="rect22848"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.2508"
+     x="121.7793"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect26806"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.25077"
+     x="169.5426"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect26904"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.25077"
+     x="217.30595"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect2675"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="174.02025"
+     x="74.221016"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g45292"
+     transform="matrix(0.4620139,0,0,0.4620139,114.26669,-118.59787)">
+    <path
+       id="rect2755"
+       style="fill:url(#linearGradient24187);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:round;marker-start:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 138.73058,531.2239 C 133.41154,531.2239 129.12943,536.48003 129.12943,543.00896 L 128.99617,587.91492 C 128.99617,594.44385 128.69562,599.14377 129.68196,599.88538 L 179.81549,599.69998 C 185.13453,599.69998 189.41664,594.44383 189.41664,587.91492 L 189.41664,551.89685 C 189.41664,545.36793 185.13453,540.11179 179.81549,540.11179 L 163.71357,540.11179 C 162.66613,534.99411 158.91569,531.2239 154.41245,531.2239 L 138.73058,531.2239 z " />
+    <rect
+       id="rect5447"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.74023503;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="matrix(1,0,-7.419016e-2,0.997244,0,0)"
+       y="544.21033"
+       x="176.32399"
+       height="54.450268"
+       width="46.882996" />
+    <rect
+       id="rect4560"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.74563318;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(1,0,-0.181321,0.983424,0,0)"
+       y="554.75165"
+       x="242.48486"
+       height="55.214611"
+       width="46.882996" />
+    <path
+       id="rect2762"
+       style="fill:url(#linearGradient24189);fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 152.00486,552.73763 L 193.00752,552.73763 C 198.33252,552.73763 201.84799,556.89227 200.88974,562.05297 L 195.6123,590.47494 C 194.65405,595.63564 193.79374,599.79028 189.34611,599.79028 L 129.79758,599.97568 C 134.8901,598.97255 136.08684,585.60303 137.3379,580.01541 L 140.66326,562.05297 C 141.62151,556.89227 146.67986,552.73763 152.00486,552.73763 z " />
+  </g>
+  <rect
+     id="rect14372"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="174.02025"
+     x="121.90878"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g43463"
+     transform="matrix(0.4620139,0,0,0.4620139,18.988746,-66.628171)">
+    <rect
+       id="rect11694"
+       style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4.00020504;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.688085,-0.72563,0.715699,0.698409,0,0)"
+       y="574.77551"
+       x="-255.44737"
+       height="17.583229"
+       width="21.502913" />
+    <path
+       id="path11681"
+       style="fill:url(#linearGradient24191);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 243.56035,571.18984 L 263.2346,590.38882 L 293.42803,558.54794 L 293.4154,558.53561 C 301.52985,549.73696 303.79917,538.50041 298.44593,533.27648 C 293.09269,528.05257 282.1187,530.79473 273.76641,539.36129 L 273.75378,539.34896 L 243.56035,571.18984 z " />
+    <g
+       id="g13472"
+       style="stroke:none;stroke-width:10.65287209;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.193838,-0.204415,0.201505,0.196637,23.43035,509.7359)">
+      <rect
+         id="rect13468"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.65287209;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="772.02551"
+         x="349.14398"
+         height="13.878055"
+         width="13.878055" />
+      <rect
+         id="rect13470"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.65287209;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="746.92316"
+         x="349.14398"
+         height="13.878055"
+         width="13.878055" />
+    </g>
+    <path
+       id="path16173"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.60036874;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.833248,0,0,0.833248,129.3815,-26.35132)"
+       d="M 197,683.36218 C 197,686.67589 194.53757,689.36218 191.5,689.36218 C 188.46243,689.36218 186,686.67589 186,683.36218 C 186,680.04847 188.46243,677.36218 191.5,677.36218 C 194.53757,677.36218 197,680.04847 197,683.36218 z " />
+  </g>
+  <rect
+     id="rect18957"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="174.02025"
+     x="169.59654"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g27239"
+     style="stroke:#000000;stroke-width:4.48613548;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     transform="matrix(0.4119487,0,0,0.4119487,84.557559,-38.340731)">
+    <path
+       id="path18941"
+       style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 360.92803,523.51862 L 360.92803,541.25088 L 360.92803,558.98314 L 351.90518,550.12162 L 351.77441,549.99266 L 351.77441,555.42748 L 342.75156,548.34378 L 333.73689,541.25088 L 342.75156,534.15798 L 351.77441,527.07428 L 351.77441,532.50911 L 351.90518,532.38015 L 360.92803,523.51862 z " />
+    <path
+       id="path18943"
+       style="fill:#ffdd55;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 381.93992,524.38097 L 381.93992,542.11324 L 381.93992,559.8455 L 390.96277,550.98397 L 391.09354,550.85501 L 391.09354,556.28983 L 400.11638,549.20614 L 409.13106,542.11324 L 400.11638,535.02033 L 391.09354,527.93663 L 391.09354,533.37145 L 390.96277,533.2425 L 381.93992,524.38097 z " />
+    <rect
+       id="rect18947"
+       style="fill:#5696f6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="571.25983"
+       x="382.67221"
+       ry="14.159336"
+       rx="14.159328"
+       height="36.565613"
+       width="11.267021" />
+    <rect
+       id="rect18949"
+       style="fill:#5696f6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="571.25983"
+       x="397.13196"
+       ry="14.159336"
+       rx="14.159328"
+       height="36.565613"
+       width="11.267021" />
+    <path
+       id="path18951"
+       style="fill:#ffdd55;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4.48613548;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 360.92806,571.81035 L 360.92806,589.54262 L 360.92806,607.27489 L 351.90521,598.41336 L 351.77444,598.2844 L 351.77444,603.71922 L 342.7516,596.63553 L 333.73692,589.54262 L 342.7516,582.44972 L 351.77444,575.36601 L 351.77444,580.80084 L 351.90521,580.67188 L 360.92806,571.81035 z " />
+    <path
+       id="path18953"
+       style="fill:#54fb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:11.65600395;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       transform="matrix(0.37892,0,0,0.390929,505.6404,512.6397)"
+       d="M -418.05177,221.55162 L -418.05177,134.95318 L -418.05177,48.354749 L -343.05532,91.653969 L -268.05888,134.95319 L -343.05532,178.25241 L -418.05177,221.55162 z " />
+  </g>
+  <rect
+     id="rect22612"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="174.02025"
+     x="217.2843"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g46196"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-118.59787)">
+    <path
+       id="rect19917"
+       style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.90116501;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 467.50855,540.94367 L 503.60891,540.94367 L 492.37849,567.65561 L 456.27815,567.65561 L 467.50855,540.94367 z " />
+    <path
+       id="path19910"
+       style="fill:url(#linearGradient24193);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.90116501;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 457.70016,558.34707 C 447.92002,558.94002 439.41043,567.52267 437.95776,573.2013 C 436.54168,578.73699 439.59933,592.36751 440.19183,595.15793 C 440.30149,595.67442 479.31823,600.61312 483.97626,600.61312 C 483.58877,597.82398 483.14623,584.55447 483.15878,580.4671 C 483.21427,562.59041 495.7162,559.11261 495.7162,559.11261 L 457.70016,558.34707 z " />
+    <path
+       id="path19914"
+       style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.90116501;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 511.71457,571.48217 C 511.71457,582.93257 511.39274,586.63852 510.76509,592.8703 C 510.38168,593.37582 485.33265,600.27736 484.95405,600.49226 C 484.23649,595.17567 483.5886,588.3454 483.23941,582.65947 C 482.68363,573.60927 485.88401,560.14651 497.82346,559.11941 C 505.75458,558.43043 511.71457,560.03179 511.71457,571.48217 z " />
+    <path
+       id="path19922"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 479.72135,529.68203 L 505.84121,530.3466 C 505.84121,530.3466 495.8971,539.26626 490.25951,558.82776 C 482.38594,558.82373 469.90852,557.92101 464.13966,558.1632 C 470.0212,538.21741 479.72135,529.68203 479.72135,529.68203 z " />
+    <path
+       id="path21721"
+       style="fill:#00ff00;fill-rule:evenodd;stroke:#000000;stroke-width:0.93912643;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 452.69804,567.82906 C 452.69804,567.82906 473.98361,569.33328 474.32419,569.33328 C 474.66476,569.33328 478.24075,563.96106 478.24075,563.96106 L 457.46601,563.1015 L 452.69804,567.82906 z " />
+    <rect
+       id="rect21723"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.87049818;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0.993753,0.111602,0,1,0,0)"
+       y="534.75836"
+       x="448.51889"
+       height="5.8020134"
+       width="29.473152" />
+    <path
+       id="path22677"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.97529125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 479.86168,536.92989 L 495.90144,537.10555" />
+    <path
+       id="path22679"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.97529125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 474.78476,543.84821 L 490.82452,544.02386" />
+    <path
+       id="path22681"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.97529125px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="M 471.50763,551.05002 L 487.5474,551.40133" />
+  </g>
+  <rect
+     id="rect23611"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.91042"
+     x="26.171482"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g7666"
+     transform="matrix(0.4620139,0,0,0.4620139,114.26669,-118.59787)">
+    <path
+       id="rect26292"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.91859531;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 47.833889,531.14138 L 26.403966,550.01861 L 26.403966,599.84603 L 93.939784,599.84603 L 93.939784,531.14138 L 47.833889,531.14138 z " />
+    <path
+       id="rect24514"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 78.23077,548.38599 L 78.23077,558.60577 L 68.01099,558.60577 L 68.01099,568.14423 L 78.23077,568.14423 L 78.23077,578.36401 L 87.76923,578.36401 L 87.76923,568.14423 L 97.98901,568.14423 L 97.98901,558.60577 L 87.76923,558.60577 L 87.76923,548.38599 L 78.23077,548.38599 z " />
+    <path
+       id="path26307"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 47.234451,548.9744 L 26.127061,549.11157 L 46.937686,531.35609 L 47.234451,548.9744 z " />
+  </g>
+  <g
+     id="g32023"
+     style="display:inline"
+     transform="matrix(0,-0.4620139,0.4620139,0,-162.63077,218.93502)">
+    <path
+       id="path32025"
+       style="fill:url(#radialGradient24195);fill-opacity:1;stroke:#000000;stroke-width:3;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 145.47587,425.69429 C 133.63167,425.69429 124.02417,438.17757 124.02415,453.55736 C 124.02415,468.93714 133.63253,481.2776 145.47587,481.42044 C 158.43256,481.58056 162.04794,467.44225 166.22497,467.54379 C 170.40896,467.64549 173.39835,473.20864 179.66248,473.20863 C 181.97807,473.20861 184.16425,472.36905 186.07384,470.92513 C 182.71696,470.14458 180.23335,467.46246 180.23335,464.27224 C 180.23335,461.8528 181.65978,459.7477 183.8123,458.51958 L 178.63051,458.51958 L 178.63 [...]
+    <g
+       id="g32027">
+      <rect
+         id="rect32029"
+         style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-178.47929"
+         x="445.22119"
+         height="7.0455441"
+         width="15.051844" />
+      <rect
+         id="rect32031"
+         style="fill:#ececec;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-177.67867"
+         x="446.82245"
+         height="5.444284"
+         width="11.849324" />
+    </g>
+    <g
+       id="g32033">
+      <rect
+         id="rect32035"
+         style="fill:#000000;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-165.349"
+         x="445.22119"
+         height="7.0455441"
+         width="15.051844" />
+      <rect
+         id="rect32037"
+         style="fill:#ececec;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0,1,-1,0,0,0)"
+         y="-164.54837"
+         x="446.82245"
+         height="5.444284"
+         width="11.849324" />
+    </g>
+    <rect
+       id="rect32039"
+       style="fill:#50211b;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-205.54079"
+       x="447.94327"
+       height="26.741035"
+       width="10.568314" />
+    <path
+       id="path32041"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,0.46582,-0.445568,0,522.2851,232.6176)"
+       d="M 462.5,843.48718 C 462.5,845.075 461.21282,846.36218 459.625,846.36218 C 458.03718,846.36218 456.75,845.075 456.75,843.48718 C 456.75,841.89936 458.03718,840.61218 459.625,840.61218 C 461.21282,840.61218 462.5,841.89936 462.5,843.48718 z " />
+    <path
+       id="path32043"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,0.46582,-0.445568,0,522.5079,232.6176)"
+       d="M 489.75,843.98718 C 489.75,845.575 488.46282,846.86218 486.875,846.86218 C 485.28718,846.86218 484,845.575 484,843.98718 C 484,842.39936 485.28718,841.11218 486.875,841.11218 C 488.46282,841.11218 489.75,842.39936 489.75,843.98718 L 489.75,843.98718 z " />
+    <rect
+       id="rect32045"
+       style="fill:#999999;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-154.30049"
+       x="444.74075"
+       ry="4.4671021"
+       rx="4.4671021"
+       height="3.0423932"
+       width="16.172722" />
+    <g
+       id="g32047"
+       transform="matrix(0,0.414685,-0.450725,0,527.3259,253.3075)">
+      <rect
+         id="rect32049"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="831.05066"
+         x="466.6709"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32051"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="471.80353"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32053"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="476.93613"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32055"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="482.06876"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32057"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="487.20135"
+         height="1.7859424"
+         width="3.2650242" />
+      <rect
+         id="rect32059"
+         style="fill:#e6e6e6;fill-opacity:1;stroke:#ffffff;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="831.05066"
+         x="492.33401"
+         height="1.7859424"
+         width="3.2650242" />
+    </g>
+    <rect
+       id="rect32061"
+       style="fill:url(#linearGradient24197);fill-opacity:1;stroke:url(#linearGradient24199);stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(0,1,-1,0,0,0)"
+       y="-147.45714"
+       x="446.52585"
+       height="2.0050554"
+       width="13.102184" />
+  </g>
+  <rect
+     id="rect32069"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.91042"
+     x="265.26404"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g34880"
+     transform="matrix(0.4620139,0,0,0.4267007,18.65561,-46.663401)">
+    <rect
+       id="rect33907"
+       style="fill:url(#linearGradient24201);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="526.11218"
+       x="542.25"
+       height="78.5"
+       width="72.5" />
+    <g
+       id="g33899"
+       transform="matrix(1,0,0,0.912791,-86.75002,49.30465)">
+      <path
+         id="path33885"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 646.25,601.61218 L 646.25,529.11218" />
+      <rect
+         id="rect32093"
+         style="fill:url(#linearGradient24203);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         y="535.61218"
+         x="639"
+         height="27"
+         width="14.5" />
+      <path
+         id="path33887"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 665.25,601.61218 L 665.25,529.11218" />
+      <rect
+         id="rect33889"
+         style="fill:url(#linearGradient24205);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="564.11218"
+         x="658"
+         height="27"
+         width="14.5" />
+      <path
+         id="path33893"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 684.25,601.61218 L 684.25,529.11218" />
+      <rect
+         id="rect33895"
+         style="fill:url(#linearGradient24207);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         y="546.11218"
+         x="677"
+         height="27"
+         width="14.5" />
+    </g>
+    <rect
+       id="rect34810"
+       style="fill:url(#linearGradient24209);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="526.11218"
+       x="542.25"
+       height="78.5"
+       width="72.5" />
+    <path
+       id="path34814"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.86620283;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 559.49998,600.27658 L 559.49998,534.09924" />
+    <rect
+       id="rect34816"
+       style="fill:#000080;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="540.03241"
+       x="552.25"
+       height="24.645357"
+       width="14.5" />
+    <path
+       id="path34818"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.86620283;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 578.49998,600.27658 L 578.49998,534.09924" />
+    <rect
+       id="rect34820"
+       style="fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="566.04694"
+       x="571.25"
+       height="24.645357"
+       width="14.5" />
+    <path
+       id="path34822"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.86620283;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 597.49998,600.27658 L 597.49998,534.09924" />
+    <rect
+       id="rect34824"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="549.6167"
+       x="590.25"
+       height="24.645357"
+       width="14.5" />
+  </g>
+  <rect
+     id="rect34943"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.88399"
+     x="26.171482"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect37863"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.65297"
+     x="122.73254"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect37847"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.88399"
+     x="76.069054"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect49778"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.42195"
+     x="170.08907"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52722"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path49780"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 338.50001,696.12549 L 406.50001,696.12549" />
+    <path
+       id="path50667"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(-6.499994,7.263308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path50669"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 369.35853,695.26143 L 369.35853,634.48955" />
+    <path
+       id="path50671"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 338.50001,675.62549 L 406.50001,675.62549" />
+  </g>
+  <rect
+     id="rect50689"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.65297"
+     x="217.44554"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect52500"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.42195"
+     x="267.34311"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52715"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path50709"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 473.56682,634.97014 C 491.05994,635.4857 491.47546,647.90583 491.48512,663.18131 C 486.73449,647.1487 488.86877,643.70599 473.61907,643.74026 C 473.53193,630.54852 473.6402,648.16276 473.56682,634.97014 z " />
+    <path
+       id="path52546"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 441.00001,696.62549 L 509.00001,696.62549" />
+    <path
+       id="path52548"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(96.00001,7.763308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52550"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 471.85853,695.76143 L 471.85853,634.98955" />
+    <path
+       id="path52552"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 441.00001,676.12549 L 509.00001,676.12549" />
+  </g>
+  <g
+     id="g52707"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path52519"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 581.65647,634.49305 C 599.14959,634.96367 599.56511,646.30103 599.57477,660.24482 C 594.82414,645.6099 596.95842,642.46732 581.70872,642.4986 C 581.62158,630.4569 581.72985,646.53556 581.65647,634.49305 z " />
+    <path
+       id="path52570"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 549.00001,696.12549 L 617.00001,696.12549" />
+    <path
+       id="path52572"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(204,7.263308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52574"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 579.85853,695.26143 L 579.85853,634.48955" />
+    <path
+       id="path52576"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 549.00001,675.62549 L 617.00001,675.62549" />
+    <path
+       id="path52578"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 581.51919,644.69678 C 599.01231,645.1674 599.42783,656.50476 599.43749,670.44855 C 594.68686,655.81363 596.82114,652.67105 581.57144,652.70233 C 581.4843,640.66063 581.59257,656.73929 581.51919,644.69678 z " />
+  </g>
+  <rect
+     id="rect52589"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.65297"
+     x="315.16162"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52697"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path52593"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 685.15647,634.99305 C 702.64959,635.46096 703.06511,646.7332 703.07477,660.59689 C 698.32414,646.04604 700.45842,642.92151 685.20872,642.95261 C 685.12158,630.98009 685.22985,646.96638 685.15647,634.99305 z " />
+    <path
+       id="path52597"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 652.50001,696.62549 L 720.50001,696.62549" />
+    <path
+       id="path52599"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(307.5,7.763308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52601"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 683.35853,695.76143 L 683.35853,634.98955" />
+    <path
+       id="path52603"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 652.50001,676.12549 L 720.50001,676.12549" />
+    <path
+       id="path52605"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 685.15647,644.55268 C 702.64959,645.02059 703.06511,656.29283 703.07477,670.15652 C 698.32414,655.60567 700.45842,652.48114 685.20872,652.51224 C 685.12158,640.53972 685.22985,656.52601 685.15647,644.55268 z " />
+    <path
+       id="path52614"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 685.15647,654.60879 C 702.64959,655.07671 703.06511,666.34894 703.07477,680.21263 C 698.32414,665.66178 700.45842,662.53726 685.20872,662.56836 C 685.12158,650.59583 685.22985,666.58212 685.15647,654.60879 z " />
+    <path
+       id="path52629"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 685.15647,664.55689 C 702.64959,665.02481 703.06511,676.29704 703.07477,690.16073 C 698.32414,675.60988 700.45842,672.48536 685.20872,672.51646 C 685.12158,660.54393 685.22985,676.53022 685.15647,664.55689 z " />
+  </g>
+  <rect
+     id="rect52728"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="272.55188"
+     x="25.900524"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52730"
+     style="display:inline"
+     transform="matrix(0.4620139,0,0,0.4620139,-125.53291,-16.498231)">
+    <path
+       id="path52732"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 338.50001,696.12549 L 406.50001,696.12549" />
+    <path
+       id="path52734"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(-6.499994,7.263308)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52736"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 369.35853,695.26143 L 369.35853,634.48955" />
+    <path
+       id="path52738"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 338.50001,675.62549 L 406.50001,675.62549" />
+  </g>
+  <rect
+     id="rect52740"
+     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+     transform="matrix(0.7071068,0.7071068,-0.7071068,0.7071068,0,0)"
+     y="174.604"
+     x="245.46577"
+     height="4.6201973"
+     width="4.8512053" />
+  <rect
+     id="rect52758"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="273.01251"
+     x="76.300064"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52774"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <g
+       id="g52760"
+       style="display:inline"
+       transform="translate(-203,109.5)">
+      <path
+         id="path52762"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 338.50001,696.12549 L 406.50001,696.12549" />
+      <path
+         id="path52764"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="translate(-6.499994,7.263308)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+      <path
+         id="path52766"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 369.35853,695.26143 L 369.35853,634.48955" />
+      <path
+         id="path52768"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 338.50001,675.62549 L 406.50001,675.62549" />
+    </g>
+    <rect
+       id="rect52770"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="matrix(0.707107,0.707107,-0.707107,0.707107,0,0)"
+       y="431.48001"
+       x="683.43604"
+       height="10.000011"
+       width="10.500011" />
+    <rect
+       id="rect52772"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="matrix(0.707107,0.707107,-0.707107,0.707107,0,0)"
+       y="420.75739"
+       x="694.15863"
+       height="10.00004"
+       width="10.50004" />
+  </g>
+  <rect
+     id="rect52783"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="272.31952"
+     x="124.58059"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g52910"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path52789"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 240.00001,804.12549 L 308.00001,804.12549" />
+    <path
+       id="path52795"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 240.00001,783.62549 L 308.00001,783.62549" />
+    <path
+       id="path52791"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="matrix(0.571633,0,0,1,45.35674,115.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52793"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 260.01295,803.45836 L 260.01295,758.79263" />
+    <path
+       id="path52812"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="matrix(0.571633,0,0,1,62.29158,115.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52814"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 277.14348,803.45838 L 277.14348,758.79265" />
+    <path
+       id="path52826"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="matrix(0.571633,0,0,1,79.44058,115.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path52828"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.46516585;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 294.49064,803.45838 L 294.49064,758.79265" />
+    <rect
+       id="rect52830"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       y="758.36218"
+       x="258.86331"
+       height="9.6007662"
+       width="36.69611" />
+    <text
+       xml:space="preserve"
+       id="text52858"
+       style="font-size:25.4596386px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       transform="scale(1.099156,0.909789)"
+       y="832.28827"
+       x="243.78136"><tspan
+         id="tspan52860"
+         style="font-family:Arial Black"
+         y="832.28827"
+         x="243.78136">3</tspan></text>
+  </g>
+  <rect
+     id="rect52923"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="272.78156"
+     x="170.78207"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g54741"
+     transform="matrix(0.4620139,0,0,0.4620139,19.579651,-67.321181)">
+    <path
+       id="path52961"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 339,814.86218 L 405,746.86218" />
+    <text
+       xml:space="preserve"
+       id="text53848"
+       style="font-size:61.26486969px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+       transform="scale(1.199052,0.833992)"
+       y="979.46033"
+       x="305.48175"><tspan
+         id="tspan53850"
+         y="979.46033"
+         x="305.48175">4</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text54737"
+       style="font-size:61.26483154px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+       transform="scale(1.199052,0.833992)"
+       y="937.19122"
+       x="277.58707"><tspan
+         id="tspan54739"
+         y="937.19122"
+         x="277.58707">4</tspan></text>
+  </g>
+  <rect
+     id="rect54748"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="273.24353"
+     x="218.8316"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g57494"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <g
+       id="g56568"
+       transform="translate(4.064981,5.555418)">
+      <g
+         id="g56560">
+        <rect
+           id="rect54762"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect54764"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g56564"
+         transform="translate(0,-0.109804)">
+        <path
+           id="path55655"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="matrix(0.762121,0,0,0.762121,113.6812,182.3594)"
+           d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+        <path
+           id="path55657"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+           transform="matrix(0.762121,0,0,0.762121,113.6813,197.2904)"
+           d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+      </g>
+    </g>
+    <g
+       id="g57487">
+      <path
+         id="path55661"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 440.47831,744.01169 L 515.5217,743.84996" />
+      <path
+         id="path55663"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,816.87437 L 515.5217,816.71263" />
+      <path
+         id="path55665"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,798.65871 L 515.52169,798.49697" />
+      <path
+         id="path55667"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,780.44305 L 515.52169,780.28131" />
+      <path
+         id="path55669"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,762.22737 L 515.5217,762.06564" />
+    </g>
+  </g>
+  <rect
+     id="rect61934"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     transform="scale(-1,1)"
+     y="272.78156"
+     x="-309.60117"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g61936"
+     style="display:inline"
+     transform="matrix(-0.4620139,0,0,0.4620139,509.7772,-67.090201)">
+    <g
+       id="g61938"
+       transform="translate(4.064981,5.555418)">
+      <g
+         id="g61940">
+        <rect
+           id="rect61942"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect61944"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g61946"
+         transform="translate(0,-0.109804)">
+        <path
+           id="path61948"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           transform="matrix(0.762121,0,0,0.762121,113.6812,182.3594)"
+           d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+        <path
+           id="path61950"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:5;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+           transform="matrix(0.762121,0,0,0.762121,113.6813,197.2904)"
+           d="M 488.31813,767.7149 C 488.31813,769.80064 486.6273,771.49146 484.54156,771.49146 C 482.45583,771.49146 480.765,769.80064 480.765,767.7149 C 480.765,765.62916 482.45583,763.93833 484.54156,763.93833 C 486.6273,763.93833 488.31813,765.62916 488.31813,767.7149 z " />
+      </g>
+    </g>
+    <g
+       id="g61952">
+      <path
+         id="path61954"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 440.47831,744.01169 L 515.5217,743.84996" />
+      <path
+         id="path61956"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,816.87437 L 515.5217,816.71263" />
+      <path
+         id="path61958"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,798.65871 L 515.52169,798.49697" />
+      <path
+         id="path61960"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,780.44305 L 515.52169,780.28131" />
+      <path
+         id="path61962"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.95981914px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 440.47831,762.22737 L 515.5217,762.06564" />
+    </g>
+  </g>
+  <rect
+     id="rect2795"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="271.85748"
+     x="316.77866"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g2826"
+     transform="matrix(0.4620139,0,0,0.4620139,18.65561,-66.628171)">
+    <path
+       id="path2799"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 656.00001,803.12549 L 724.00001,803.12549" />
+    <path
+       id="path2801"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(311,114.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path2803"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 686.85853,802.26143 L 686.85853,741.48955" />
+    <path
+       id="path2805"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 656.00001,782.62549 L 724.00001,782.62549" />
+  </g>
+  <rect
+     id="rect2811"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="271.42603"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g2829"
+     style="display:inline"
+     transform="matrix(0.4620139,0,0,0.4620139,353.68718,-166.28609)">
+    <path
+       id="path2831"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 29.00003,909.12551 L 97.00003,909.12551" />
+    <path
+       id="path2833"
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1;display:inline"
+       transform="translate(-316,220.2633)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path2835"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 29.00003,888.62551 L 97.00003,888.62551" />
+  </g>
+  <g
+     id="g6505"
+     transform="matrix(0.354114,0,0,0.354114,-33.453263,-158.43119)">
+    <path
+       id="path3732"
+       style="fill:url(#radialGradient24211);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24213);stroke-width:8.68754482;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       transform="matrix(0.573037,0.525314,-0.525315,0.573037,481.5014,517.0748)"
+       d="M 233.5,675.11218 C 233.5,697.34164 215.47946,715.36218 193.25,715.36218 C 171.02054,715.36218 153,697.34164 153,675.11218 C 153,652.88272 171.02054,634.86218 193.25,634.86218 C 215.47946,634.86218 233.5,652.88272 233.5,675.11218 L 233.5,675.11218 z " />
+    <path
+       id="path3764"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(3.327811e-2,0,0,0.320967,240.7223,764.1587)"
+       d="M -45.194263,751.54019 L -142.80574,751.54019 L -94,667.00617 L -45.194263,751.54019 z " />
+    <path
+       id="path3766"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0,3.388209e-2,-0.231743,0,411.6397,1008.641)"
+       d="M -45.194263,751.54019 L -142.80574,751.54019 L -94,667.00617 L -45.194263,751.54019 z " />
+    <path
+       id="path3768"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="translate(0.978643,0.558407)"
+       d="M 239.53242,1004.8976 C 239.53336,1006.5092 238.22718,1007.8161 236.61561,1007.8161 C 235.00403,1007.8161 233.69785,1006.5092 233.69879,1004.8976 C 233.69785,1003.286 235.00403,1001.9791 236.61561,1001.9791 C 238.22718,1001.9791 239.53336,1003.286 239.53242,1004.8976 L 239.53242,1004.8976 z " />
+    <path
+       id="path4655"
+       style="fill:#ff9955;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+       d="M 272.1753,1012.3511 C 276.84309,986.20902 245.19958,952.26377 213.06198,977.50611 C 195.54275,991.26653 223.78991,993.86796 223.78991,993.86796 L 183.20018,1021.8781 L 179.24219,972.87219 C 179.24219,972.87219 190.92506,987.57904 202.09746,970.01034 C 218.10395,944.83997 281.43491,949.19669 272.1753,1012.3511 z " />
+  </g>
+  <g
+     id="g3157"
+     transform="matrix(0.4620139,0,0,0.4620139,-30.982179,-213.54269)">
+    <path
+       id="path4657"
+       style="fill:url(#radialGradient24215);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient24217);stroke-width:8.68754482;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;display:inline"
+       transform="matrix(0.439208,0.402631,-0.402631,0.439208,452.0883,515.4839)"
+       d="M 233.5,675.11218 C 233.5,697.34164 215.47946,715.36218 193.25,715.36218 C 171.02054,715.36218 153,697.34164 153,675.11218 C 153,652.88272 171.02054,634.86218 193.25,634.86218 C 215.47946,634.86218 233.5,652.88272 233.5,675.11218 L 233.5,675.11218 z " />
+    <path
+       id="path4659"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(2.550624e-2,0,0,0.246007,267.5415,704.8631)"
+       d="M -45.194263,751.54019 L -142.80574,751.54019 L -94,667.00617 L -45.194263,751.54019 z " />
+    <path
+       id="path4661"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0,2.596917e-2,-0.177621,0,398.5423,892.248)"
+       d="M -45.194263,751.54019 L -142.80574,751.54019 L -94,667.00617 L -45.194263,751.54019 z " />
+    <path
+       id="path4663"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.766457,0,0,0.766457,83.78826,119.5963)"
+       d="M 239.53242,1004.8976 C 239.53336,1006.5092 238.22718,1007.8161 236.61561,1007.8161 C 235.00403,1007.8161 233.69785,1006.5092 233.69879,1004.8976 C 233.69785,1003.286 235.00403,1001.9791 236.61561,1001.9791 C 238.22718,1001.9791 239.53336,1003.286 239.53242,1004.8976 L 239.53242,1004.8976 z " />
+    <path
+       id="path6522"
+       style="fill:#00ff00;fill-rule:evenodd;stroke:#000000;stroke-width:3.06582808;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
+       d="M 237.73786,895.32552 C 234.1602,875.28872 258.41359,849.27115 283.04568,868.61832 C 296.47341,879.16509 274.82318,881.15897 274.82318,881.15897 L 305.93346,902.62755 L 308.96709,865.06662 C 308.96709,865.06662 300.01267,876.33878 291.44951,862.87313 C 279.18122,843.58112 230.64077,846.92036 237.73786,895.32552 z " />
+  </g>
+  <g
+     id="g6581"
+     transform="matrix(0.4620139,0,0,0.4620139,209.47582,-116.03325)">
+    <text
+       xml:space="preserve"
+       id="text6554"
+       style="font-size:83.65219116px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline;font-family:Bitstream Vera Sans Mono"
+       transform="scale(0.849987,1.176489)"
+       y="781.05951"
+       x="441.81683"><tspan
+         id="tspan6556"
+         y="781.05951"
+         x="441.81683">7</tspan></text>
+    <text
+       xml:space="preserve"
+       id="text6567"
+       style="font-size:85.42720032px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans Mono"
+       transform="scale(0.865098,1.155939)"
+       y="794.94482"
+       x="392.89487"><tspan
+         id="tspan6569"
+         y="794.94482"
+         x="392.89487">A</tspan></text>
+  </g>
+  <path
+     id="path6599"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.84805834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 31.433469,254.58377 L 62.850463,254.58377" />
+  <path
+     id="path6601"
+     style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.84805799;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+     d="M 45.524822,245.6899 C 45.524822,248.05017 43.197748,249.96354 40.327159,249.96354 C 37.456571,249.96354 35.129496,248.05017 35.129496,245.6899 C 35.129496,243.32964 37.456571,241.41626 40.327159,241.41626 C 43.197748,241.41626 45.524822,243.32964 45.524822,245.6899 z " />
+  <path
+     id="path6603"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.42819726;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     d="M 45.690556,244.58059 L 45.690556,225.81728" />
+  <path
+     id="path6605"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.84805834;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     d="M 31.433469,245.11247 L 62.850463,245.11247" />
+  <path
+     id="path6613"
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.75689816;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 45.211872,248.30696 C 53.916759,256.05016 61.792607,248.30696 61.792607,248.30696 L 61.792607,248.30696" />
+  <g
+     id="g7524"
+     transform="matrix(0.4620139,0,0,0.4620139,-175.23163,-163.90485)">
+    <path
+       id="path7504"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 585.0017,844.15855 C 602.49482,844.62917 602.91034,855.96653 602.92,869.91032 C 598.16937,855.2754 600.30365,852.13282 585.05395,852.1641 C 584.96681,840.1224 585.07508,856.20106 585.0017,844.15855 z " />
+    <path
+       id="path7506"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 552.34524,905.79099 L 620.34524,905.79099" />
+    <path
+       id="path7508"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="translate(207.3452,216.9288)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path7510"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 583.20376,904.92693 L 583.20376,844.15505" />
+    <path
+       id="path7512"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 552.34524,885.29099 L 620.34524,885.29099" />
+    <path
+       id="path7514"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 584.86442,854.36228 C 602.35754,854.8329 602.77306,866.17026 602.78272,880.11405 C 598.03209,865.47913 600.16637,862.33655 584.91667,862.36783 C 584.82953,850.32613 584.9378,866.40479 584.86442,854.36228 z " />
+    <path
+       id="path7522"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 584.74905,864.74215 C 602.24217,865.21277 602.65769,876.55013 602.66735,890.49392 C 597.91672,875.859 600.051,872.71642 584.8013,872.7477 C 584.71416,860.706 584.82243,876.78466 584.74905,864.74215 z " />
+  </g>
+  <text
+     xml:space="preserve"
+     id="text7535"
+     style="font-size:43.93042374px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans Mono"
+     y="258.69415"
+     x="131.20235"><tspan
+       id="tspan7537"
+       y="258.69415"
+       x="131.20235">X</tspan></text>
+  <rect
+     id="rect3132"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.27638"
+     x="362.48758"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g22906"
+     transform="matrix(0.4620139,0,0,0.4620139,-128.59214,-40.755341)">
+    <g
+       id="g3134"
+       style="display:inline"
+       transform="translate(420,-56)">
+      <rect
+         id="rect3136"
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4.00020504;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.688085,-0.72563,0.715699,0.698409,0,0)"
+         y="574.77551"
+         x="-255.44737"
+         height="17.583229"
+         width="21.502913" />
+      <path
+         id="path3138"
+         style="fill:url(#linearGradient24219);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 243.56035,571.18984 L 263.2346,590.38882 L 293.42803,558.54794 L 293.4154,558.53561 C 301.52985,549.73696 303.79917,538.50041 298.44593,533.27648 C 293.09269,528.05257 282.1187,530.79473 273.76641,539.36129 L 273.75378,539.34896 L 243.56035,571.18984 z " />
+      <g
+         id="g3140"
+         style="stroke:none;stroke-width:10.65287209;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.193838,-0.204415,0.201505,0.196637,23.43035,509.7359)">
+        <rect
+           id="rect3142"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.65287209;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           y="772.02551"
+           x="349.14398"
+           height="13.878055"
+           width="13.878055" />
+        <rect
+           id="rect3144"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:10.65287209;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           y="746.92316"
+           x="349.14398"
+           height="13.878055"
+           width="13.878055" />
+      </g>
+      <path
+         id="path3146"
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.60036874;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         transform="matrix(0.833248,0,0,0.833248,129.3815,-26.35132)"
+         d="M 197,683.36218 C 197,686.67589 194.53757,689.36218 191.5,689.36218 C 188.46243,689.36218 186,686.67589 186,683.36218 C 186,680.04847 188.46243,677.36218 191.5,677.36218 C 194.53757,677.36218 197,680.04847 197,683.36218 z " />
+    </g>
+    <path
+       id="path3155"
+       style="opacity:0.77999998;fill:#54fb00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.06582808;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 654.67947,481.30948 C 671.50634,485.47105 691.20183,476.90604 703.07467,498.55094 C 710.65078,512.36265 691.10137,509.32277 691.10137,509.32277 L 710.70966,541.63785 L 728.84064,508.60311 C 728.84064,508.60311 713.68537,511.93526 713.75245,499.43667 C 713.85441,480.43967 677.04539,468.19461 654.67947,481.30948 z " />
+  </g>
+  <g
+     id="g2984"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,2.4823692)">
+    <path
+       d="M 473.91549,228.39543 L 503.52151,228.39543 L 494.31141,250.30197 L 464.70541,250.30197 L 473.91549,228.39543 z "
+       style="fill:#e6e6e6;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.19935703;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4077" />
+    <path
+       d="M 465.8716,242.66801 C 457.85088,243.15429 450.87214,250.19294 449.6808,254.85001 C 448.51947,259.38984 451.02706,270.56827 451.51297,272.8567 C 451.6029,273.28028 483.60065,277.33052 487.42071,277.33052 C 487.10293,275.04314 486.74,264.16077 486.75029,260.80871 C 486.7958,246.14798 497.04867,243.29583 497.04867,243.29583 L 465.8716,242.66801 z "
+       style="fill:url(#linearGradient2965);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.19935703;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4079" />
+    <path
+       d="M 510.16898,253.44014 C 510.16898,262.83065 509.90505,265.86991 509.39031,270.98061 C 509.07588,271.39519 488.53309,277.05516 488.2226,277.2314 C 487.63413,272.87125 487.10279,267.26973 486.81642,262.60668 C 486.36062,255.18458 488.98526,244.14373 498.77684,243.30141 C 505.28118,242.73637 510.16898,244.04965 510.16898,253.44014 z "
+       style="fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.19935703;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="path4081" />
+    <path
+       d="M 483.93125,219.15972 L 505.35222,219.70474 C 505.35222,219.70474 497.19703,227.01978 492.57362,243.06222 C 486.11649,243.05892 475.88372,242.31859 471.15266,242.51721 C 475.97613,226.15961 483.93125,219.15972 483.93125,219.15972 z "
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.64020598;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="path4083" />
+    <path
+       d="M 461.76935,250.44422 C 461.76935,250.44422 479.22571,251.67783 479.50502,251.67783 C 479.78432,251.67783 482.717,247.27206 482.717,247.27206 L 465.67958,246.56713 L 461.76935,250.44422 z "
+       style="fill:#00ff00;fill-rule:evenodd;stroke:#000000;stroke-width:0.7701804;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4085" />
+    <rect
+       width="24.171026"
+       height="4.7582488"
+       x="458.91107"
+       y="213.1582"
+       transform="matrix(0.993753,0.111602,0,1,0,0)"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.35410452;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4087" />
+    <path
+       d="M 484.04633,225.10371 L 497.20059,225.24777"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.79983926px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path4089" />
+    <path
+       d="M 479.88274,230.77745 L 493.03699,230.9215"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.79983926px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path4091" />
+    <path
+       d="M 477.19515,236.68367 L 490.34942,236.97178"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.79983926px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       id="path4093" />
+    <g
+       transform="matrix(0.870386,0,0,0.870386,65.82635,34.20091)"
+       id="g2980">
+      <rect
+         id="rect5886"
+         style="color:#000000;fill:#ff9955;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.87870872;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="-160.10472"
+         x="518.27454"
+         height="9.4662237"
+         width="33.064384"
+         transform="matrix(0.718795,0.695222,-0.7174,0.696661,0,0)" />
+      <path
+         id="rect5888"
+         style="color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.89792925;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 481.88591,246.17093 L 487.69785,248.42527 L 480.23833,255.66914 L 477.45311,250.64427 L 481.88591,246.17093 z " />
+    </g>
+    <path
+       d="M 454.79288,222.68432 C 462.78239,214.92578 475.74896,214.91317 483.75449,222.65618 C 491.76003,230.3992 491.77304,242.96569 483.78352,250.72423 C 475.79401,258.48277 462.82745,258.49537 454.8219,250.75237 C 446.81637,243.00936 446.80337,230.44285 454.79288,222.68432 L 454.79288,222.68432 z "
+       style="opacity:0.77999998;color:#000000;fill:url(#linearGradient2976);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.74589944;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       id="path4100" />
+  </g>
+  <rect
+     id="rect3703"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.2746"
+     x="315.95493"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g7499"
+     transform="matrix(0.4373357,0,0,0.4683741,-13.068161,-74.527821)">
+    <g
+       id="g7361"
+       style="display:inline"
+       transform="matrix(0.518198,0.328578,-0.328578,0.518198,562.3445,-50.07558)">
+      <path
+         id="path7363"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 799.9099,425.55908 C 817.40302,426.0297 817.81854,437.36706 817.8282,451.31085 C 813.07757,436.67593 815.21185,433.53335 799.96215,433.56463 C 799.87501,421.52293 799.98328,437.60159 799.9099,425.55908 z " />
+      <path
+         id="path7365"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 798.11196,486.32746 L 798.11196,425.55558" />
+      <path
+         id="path7367"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 799.77262,435.76281 C 817.26574,436.23343 817.68126,447.57079 817.69092,461.51458 C 812.94029,446.87966 815.07457,443.73708 799.82487,443.76836 C 799.73773,431.72666 799.846,447.80532 799.77262,435.76281 z " />
+      <path
+         id="path7369"
+         style="fill:url(#radialGradient24225);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(1.090643,0,0,1.062011,390.5269,-245.3025)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    </g>
+    <path
+       id="rect3745"
+       style="color:#000000;fill:#333333;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.945538,0.325513,0,1,0,0)"
+       d="M 822.72691,174.61087 L 889.276,169.13496 L 889.276,199.72689 L 823.4895,199.72689 L 822.72691,174.61087 z " />
+    <path
+       id="rect3739"
+       style="color:#000000;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.945538,0.325513,0,1,0,0)"
+       d="M 800.22229,188.70871 L 866.00876,188.70871 L 866.00876,219.30063 L 800.49191,214.62408 L 800.22229,188.70871 z " />
+    <rect
+       id="rect3741"
+       style="opacity:1;color:#000000;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.882353,-0.470588,0,1,0,0)"
+       y="907.16882"
+       x="927.44476"
+       height="30.591925"
+       width="26.003122" />
+    <path
+       id="rect3743"
+       style="color:#000000;fill:#d40000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.701289,-0.712877,0.945817,0.324701,0,0)"
+       d="M -198.67545,947.41547 L -177.04075,950.94075 L -171.02987,1011.6918 L -199.05916,1012.7404 L -198.67545,947.41547 z " />
+    <path
+       id="rect3753"
+       style="color:#000000;fill:url(#linearGradient24227);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 788.37444,442.41233 C 790.98554,441.49944 800.28366,439.76223 810.12708,450.22181 C 809.39758,451.00304 806.96255,454.45726 805.25704,455.95851 C 798.77005,448.84021 786.55315,444.31821 781.43076,448.7918 C 782.36313,447.56946 787.21848,443.63946 788.37444,442.41233 z " />
+    <g
+       id="g7353"
+       transform="matrix(0.996519,0,0,0.996519,3.974373,5.043832)">
+      <path
+         id="path4656"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 799.9099,425.55908 C 817.40302,426.0297 817.81854,437.36706 817.8282,451.31085 C 813.07757,436.67593 815.21185,433.53335 799.96215,433.56463 C 799.87501,421.52293 799.98328,437.60159 799.9099,425.55908 z " />
+      <path
+         id="path4662"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.78143692;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 798.11196,486.32746 L 798.11196,425.55558" />
+      <path
+         id="path4666"
+         style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         d="M 799.77262,435.76281 C 817.26574,436.23343 817.68126,447.57079 817.69092,461.51458 C 812.94029,446.87966 815.07457,443.73708 799.82487,443.76836 C 799.73773,431.72666 799.846,447.80532 799.77262,435.76281 z " />
+      <path
+         id="path4660"
+         style="fill:url(#radialGradient24229);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         transform="matrix(1.090643,0,0,1.062011,390.5269,-245.3025)"
+         d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    </g>
+  </g>
+  <path
+     id="rect3184"
+     style="fill:#929292;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.96170586;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     d="M 314.45226,173.63294 L 314.45226,173.91463 L 314.45226,215.23367 L 314.45226,215.51535 L 314.71634,215.51535 L 356.05299,215.51535 L 356.31707,215.51535 L 356.31707,215.23367 L 356.31707,173.91463 L 356.31707,173.63294 L 356.05299,173.63294 L 314.71634,173.63294 L 314.45226,173.63294 z M 314.98041,174.1787 L 355.77131,174.1787 L 355.77131,214.96959 L 314.98041,214.96959 L 314.98041,174.1787 z " />
+  <rect
+     id="rect3190"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.40111"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect3192"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="122.69855"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g8022"
+     transform="matrix(0.5633612,0,0,0.5633612,16.18383,2.0513492)">
+    <g
+       id="g6989"
+       transform="translate(-211.5918,-4.873514)">
+      <path
+         id="path4086"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.01236534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 833.34122,225.07216 L 833.34122,286.35703" />
+      <path
+         id="path4088"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 843.52579,225.73634 L 843.52579,286.55437" />
+      <path
+         id="path4090"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 852.30857,225.73634 L 852.30857,286.55437" />
+      <path
+         id="path4092"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 861.09135,225.73634 L 861.09135,286.55437" />
+      <path
+         id="path4094"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 869.87413,225.73634 L 869.87413,286.55437" />
+      <path
+         id="path4096"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 878.6569,225.73634 L 878.6569,286.55437" />
+      <path
+         id="path4098"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 887.43968,225.73634 L 887.43968,286.55437" />
+      <path
+         id="path4101"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.22246,225.73634 L 896.22246,286.55437" />
+      <rect
+         id="rect4115"
+         style="color:#000000;fill:url(#linearGradient24231);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83745855;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="270.90326"
+         x="870.24017"
+         height="15.065637"
+         width="25.749367" />
+      <rect
+         id="rect3198"
+         style="color:#000000;fill:url(#linearGradient24233);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85693413;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="255.7885"
+         x="834.93457"
+         height="15.699371"
+         width="25.872597" />
+      <rect
+         id="rect3194"
+         style="color:#000000;fill:url(#linearGradient24235);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.77284241;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="225.60927"
+         x="843.66455"
+         height="15.549897"
+         width="35.031761" />
+      <rect
+         id="rect3196"
+         style="color:#000000;fill:url(#linearGradient24237);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83925015;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="240.99434"
+         x="852.5072"
+         height="14.594875"
+         width="43.547024" />
+      <path
+         id="path6856"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 896.28272,225.35563 L 834.8784,225.35563" />
+      <path
+         id="path6858"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,240.53581 L 834.8784,240.53581" />
+      <path
+         id="path6860"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,255.71599 L 834.8784,255.71599" />
+      <path
+         id="path6862"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,270.89618 L 834.8784,270.89618" />
+      <path
+         id="path6864"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,286.07636 L 834.8784,286.07636" />
+      <rect
+         id="rect6880"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.53349"
+         x="843.96301"
+         height="2.1720431"
+         width="8.6314974" />
+      <rect
+         id="rect6882"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.22321"
+         x="857.89111"
+         height="2.7926269"
+         width="7.2583046" />
+      <rect
+         id="rect6884"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.34735"
+         x="852.98682"
+         height="3.1029184"
+         width="13.928099" />
+      <rect
+         id="rect6886"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="871.03455"
+         height="2.7926269"
+         width="2.7463856" />
+      <rect
+         id="rect6888"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="886.11169"
+         height="2.7926269"
+         width="9.2200089" />
+      <g
+         id="g6896"
+         transform="matrix(0.665193,0,0,1.080499,302.4562,-1.363347)">
+        <rect
+           id="rect6890"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect6892"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect6894"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+      <g
+         id="g6901"
+         style="display:inline"
+         transform="matrix(-0.665193,0,0,1.080499,1428.48,13.68581)">
+        <rect
+           id="rect6903"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect6905"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect6907"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+    </g>
+    <path
+       id="rect7021"
+       style="opacity:1;color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 663.20513,248.15279 L 663.20513,258.18327 L 653.17465,258.18327 L 653.17465,266.32173 L 663.20513,266.32173 L 663.20513,276.35221 L 671.34359,276.35221 L 671.34359,266.32173 L 681.37407,266.32173 L 681.37407,258.18327 L 671.34359,258.18327 L 671.34359,248.15279 L 663.20513,248.15279 z " />
+  </g>
+  <g
+     id="g8088"
+     transform="matrix(0.5633612,0,0,0.5633612,16.18383,2.0513492)">
+    <g
+       id="g7916"
+       style="display:inline"
+       transform="translate(-211.5918,85.12649)">
+      <path
+         id="path7918"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.01236534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 833.34122,225.07216 L 833.34122,286.35703" />
+      <path
+         id="path7920"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 843.52579,225.73634 L 843.52579,286.55437" />
+      <path
+         id="path7922"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 852.30857,225.73634 L 852.30857,286.55437" />
+      <path
+         id="path7924"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 861.09135,225.73634 L 861.09135,286.55437" />
+      <path
+         id="path7926"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 869.87413,225.73634 L 869.87413,286.55437" />
+      <path
+         id="path7928"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 878.6569,225.73634 L 878.6569,286.55437" />
+      <path
+         id="path7930"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 887.43968,225.73634 L 887.43968,286.55437" />
+      <path
+         id="path7932"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.22246,225.73634 L 896.22246,286.55437" />
+      <rect
+         id="rect7934"
+         style="color:#000000;fill:url(#linearGradient24239);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83745855;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="270.90326"
+         x="870.24017"
+         height="15.065637"
+         width="25.749367" />
+      <rect
+         id="rect7936"
+         style="color:#000000;fill:url(#linearGradient24241);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85693413;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="255.7885"
+         x="834.93457"
+         height="15.699371"
+         width="25.872597" />
+      <rect
+         id="rect7938"
+         style="color:#000000;fill:url(#linearGradient24243);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.77284241;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="225.60927"
+         x="843.66455"
+         height="15.549897"
+         width="35.031761" />
+      <rect
+         id="rect7940"
+         style="color:#000000;fill:url(#linearGradient24245);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83925015;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="240.99434"
+         x="852.5072"
+         height="14.594875"
+         width="43.547024" />
+      <path
+         id="path7942"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 896.28272,225.35563 L 834.8784,225.35563" />
+      <path
+         id="path7944"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,240.53581 L 834.8784,240.53581" />
+      <path
+         id="path7946"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,255.71599 L 834.8784,255.71599" />
+      <path
+         id="path7948"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,270.89618 L 834.8784,270.89618" />
+      <path
+         id="path7950"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,286.07636 L 834.8784,286.07636" />
+      <rect
+         id="rect7952"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.53349"
+         x="843.96301"
+         height="2.1720431"
+         width="8.6314974" />
+      <rect
+         id="rect7954"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.22321"
+         x="857.89111"
+         height="2.7926269"
+         width="7.2583046" />
+      <rect
+         id="rect7956"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.34735"
+         x="852.98682"
+         height="3.1029184"
+         width="13.928099" />
+      <rect
+         id="rect7958"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="871.03455"
+         height="2.7926269"
+         width="2.7463856" />
+      <rect
+         id="rect7960"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="886.11169"
+         height="2.7926269"
+         width="9.2200089" />
+      <g
+         id="g7962"
+         transform="matrix(0.665193,0,0,1.080499,302.4562,-1.363347)">
+        <rect
+           id="rect7964"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect7966"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect7968"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+      <g
+         id="g7970"
+         style="display:inline"
+         transform="matrix(-0.665193,0,0,1.080499,1428.48,13.68581)">
+        <rect
+           id="rect7972"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect7974"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect7976"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+    </g>
+    <rect
+       id="rect7913"
+       style="color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4.24493694;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       y="347.35495"
+       x="653.5304"
+       height="8.7881775"
+       width="27.46998" />
+  </g>
+  <g
+     id="g20319"
+     transform="matrix(0.4655032,0,0,0.4314278,354.03978,-4.4490608)">
+    <g
+       id="g20300">
+      <path
+         style="fill:url(#linearGradient24247);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -75.575296,431.90521 C -73.937648,432.42571 -29.496247,420.64933 -29.496247,420.64933 C -34.637534,448.2407 -15.25247,459.98469 -8.1305811,479.65236 L -58.396477,498.5955 C -69.087342,473.32972 -80.466399,465.44724 -75.575296,431.90521 z "
+         id="path10175"
+         sodipodi:nodetypes="ccccc" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -71.027778,449.99442 C -70.009501,447.53999 -68.398618,441.37472 -66.969552,437.93014 C -65.946608,435.46446 -65.237025,431.67221 -63.993519,434.66952 C -63.084799,436.85988 -62.911325,441.30405 -62.911325,443.47319 C -62.911325,444.79542 -62.636319,446.10316 -62.370228,447.38592"
+         id="path19269" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -58.853099,439.23438 C -58.853099,440.64638 -59.715197,444.76223 -57.500357,445.42956 C -57.025146,445.57274 -55.050818,440.65767 -54.794872,439.88651"
+         id="path19271" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -49.925001,429.45254 C -48.979735,429.73734 -50.352286,444.55483 -50.736646,446.40774 C -50.826829,446.84249 -50.917011,445.53824 -51.007194,445.10349"
+         id="path19273" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -50.736646,438.58226 C -51.021829,439.95706 -48.592058,437.30188 -47.760613,436.29983"
+         id="path19275" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -43.972935,438.58226 C -45.10834,444.05576 -35.210389,422.24755 -41.808548,424.23555 C -43.159642,424.64263 -43.033905,437.5076 -43.702387,443.14712 C -43.767419,443.69575 -43.882752,442.06025 -43.972935,441.51682"
+         id="path19277" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.66676152;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -39.914709,437.93014 C -40.051984,439.08824 -38.611318,432.0897 -37.750321,437.27802 C -37.588459,438.25339 -37.479773,446.95305 -37.479773,443.14712"
+         id="path19279" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.18195009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M -60.782843,484.92628 C -54.577716,469.84232 -40.969952,454.28974 -30.680157,448.6469"
+         id="path20180" />
+      <g
+         id="g20290"
+         transform="matrix(1,-0.116962,0.135948,0.984099,-62.09387,4.364348)">
+        <path
+           sodipodi:nodetypes="ccccc"
+           id="rect9275"
+           d="M -49.982767,486.1569 L -39.137026,471.65336 L -34.873557,476.58849 L -46.697446,486.95336 L -49.982767,486.1569 z "
+           style="color:#000000;fill:#241f1c;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.00000095;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+        <path
+           sodipodi:nodetypes="ccccccccc"
+           id="rect4009"
+           d="M -2.7603501,424.87027 L 1.0377747,429.26675 C 1.5585103,429.86953 0.97082956,431.61824 -0.27989515,433.18765 L -14.302519,453.07614 C -15.553233,454.64553 -32.240422,475.73483 -32.76115,475.13207 L -39.414996,467.42998 C -39.935728,466.82721 -23.123949,445.88214 -21.873234,444.31274 L -5.957931,426.6151 C -4.7072063,425.04569 -3.2810857,424.2675 -2.7603501,424.87027 z "
+           style="color:#000000;fill:url(#linearGradient24249);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+        <path
+           sodipodi:nodetypes="czcczzc"
+           id="path8380"
+           d="M -52.721673,489.88632 C -52.721673,489.88632 -47.18516,478.65824 -45.320698,475.65775 C -43.451737,472.65001 -40.499168,469.76234 -40.499168,469.76234 L -36.773772,474.21779 C -36.773772,474.21779 -37.426884,475.05544 -38.182951,478.38207 C -38.930141,481.66963 -42.073061,481.41261 -44.158348,482.0615 C -46.243634,482.71038 -52.25841,489.68578 -52.721673,489.88632 z "
+           style="fill:url(#linearGradient24251);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.8796891;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+        <rect
+           transform="matrix(0.66655,-0.74546,0.663245,0.748402,0,0)"
+           y="281.93237"
+           x="-345.08524"
+           height="14.299413"
+           width="2.7105966"
+           id="rect8378"
+           style="color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.65272236;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+      </g>
+    </g>
+    <path
+       id="path20317"
+       d="M -69.85298,443.99975 C -70.332761,443.63992 -66.057745,443.13276 -62.012339,440.43582 C -61.570288,440.14112 -61.061958,439.96063 -60.586768,439.72304"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+  </g>
+  <rect
+     id="rect23627"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.68457"
+     x="26.005444"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23629"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="74.339523"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23631"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="122.47703"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23633"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="170.61453"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23635"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="218.75206"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23637"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="266.88956"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23639"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="315.02707"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect23685"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="317.88116"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g9766"
+     transform="matrix(0.6801604,0,0,0.6801604,-159.07802,125.64074)">
+    <path
+       sodipodi:nodetypes="cscscssc"
+       id="path12302"
+       d="M 690.29712,806.33899 C 696.73115,809.91842 713.17167,819.01654 707.91834,831.53579 C 703.26078,842.63527 700.72452,845.85918 700.72452,845.85918 C 700.72452,845.85918 699.44562,841.814 697.414,840.56405 C 695.42042,839.33751 693.67845,839.19193 693.67845,839.19193 C 694.47719,836.67574 698.83819,830.56582 698.32224,826.59934 C 697.59598,821.01469 684.02284,817.86365 683.7315,812.80058 C 683.44016,807.7375 684.69006,805.11665 690.29712,806.33899 z "
+       style="fill:#ffda5c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       inkscape:transform-center-y="-1.3957057"
+       inkscape:transform-center-x="-2.2680218"
+       transform="matrix(-0.972446,-0.834234,0.747504,-1.033058,657.2054,2164.879)"
+       d="M 606.60861 827.13019 A 10.991182 2.6169484 0 1 1  584.62625,827.13019 A 10.991182 2.6169484 0 1 1  606.60861 827.13019 z"
+       sodipodi:ry="2.6169484"
+       sodipodi:rx="10.991182"
+       sodipodi:cy="827.13019"
+       sodipodi:cx="595.61743"
+       id="path5951"
+       style="fill:url(#radialGradient6081);fill-opacity:1;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       sodipodi:nodetypes="csssssz"
+       id="path12291"
+       d="M 688.00688,782.73476 C 681.28413,779.25117 636.10673,778.4231 623.43682,783.90136 C 610.7669,789.37962 601.34418,795.50064 598.80599,803.20934 C 596.26779,810.91805 591.53198,823.47835 597.77932,831.12638 C 604.02665,838.7744 614.16395,843.81797 625.80657,844.09786 C 637.44919,844.37775 687.99759,843.58515 690.71721,840.07417 C 693.43684,836.56318 694.54874,786.12462 688.00688,782.73476 z "
+       style="fill:#ff7f2a;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="czzzz"
+       id="rect12289"
+       d="M 626.64537,790.62125 C 632.05743,782.1495 680.48654,782.60978 684.9113,788.66276 C 689.23278,794.57446 689.9078,830.0134 685.86504,834.26646 C 681.77401,838.57032 631.7887,841.09821 627.59911,836.22495 C 623.21793,831.12883 621.35549,798.90174 626.64537,790.62125 z "
+       style="fill:url(#linearGradient7977);fill-opacity:1;stroke:#000000;stroke-width:1.29999948;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="ccc"
+       id="path12298"
+       d="M 644.62512,816.02125 C 653.16596,828.20399 670.13139,826.24078 675.81727,813.32745 C 666.29419,818.61805 649.49978,817.30747 644.62512,816.02125 z "
+       style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <g
+       transform="matrix(1.045493,-5.786072e-2,-0.131469,1.028004,178.2572,93.9675)"
+       id="g13235"
+       style="stroke:#000000;stroke-width:1.25842619;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+      <path
+         style="fill:url(#linearGradient6085);fill-opacity:1;stroke:#000000;stroke-width:1.25842619;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 514.6665,745.65582 C 514.6665,745.65582 532.11281,743.73672 541.53383,745.65582 C 550.95484,747.57491 552.35056,753.3322 552.35056,753.3322 L 552.35056,795.20338 C 552.35056,795.20338 550.60591,789.70778 541.1849,787.87592 C 531.76388,786.04405 514.6665,787.87592 514.6665,787.87592 L 514.6665,745.65582 z "
+         id="rect12334"
+         sodipodi:nodetypes="czcczcc" />
+      <path
+         style="fill:url(#linearGradient6087);fill-opacity:1;stroke:#000000;stroke-width:1.25842619;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 590.03462,746.0823 C 590.03462,746.0823 572.58831,744.1632 563.16729,746.0823 C 553.74628,748.00139 552.35056,753.75868 552.35056,753.75868 L 552.35056,795.62986 C 552.35056,795.62986 554.09521,790.13426 563.51622,788.3024 C 572.93724,786.47053 590.03462,788.3024 590.03462,788.3024 L 590.03462,746.0823 z "
+         id="path13231"
+         sodipodi:nodetypes="czcczcc" />
+    </g>
+    <path
+       sodipodi:nodetypes="csssccczc"
+       id="path12332"
+       d="M 695.41019,838.62042 C 700.14569,841.15924 700.88837,843.47237 700.32054,848.50081 C 699.91686,852.0756 697.61441,855.10314 694.13438,856.67894 C 691.47288,857.8841 687.41491,857.32238 684.23254,856.09748 C 682.29552,855.35192 683.08837,852.66442 684.31205,852.58794 C 683.36498,851.99335 683.02181,849.44083 684.83359,849.02147 C 683.26668,848.4213 684.19241,845.40115 685.54978,845.44861 C 684.52439,844.51298 684.51889,841.35152 686.74802,841.75345 C 688.85054,842.13256 695.536 [...]
+       style="fill:#f4d7d7;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cssscccsc"
+       id="path12327"
+       d="M 616.47306,842.59642 C 609.11971,841.85248 608.289,842.5384 606.36072,847.21702 C 604.54093,851.63234 602.80301,855.13257 605.57704,857.75909 C 608.26763,860.30661 611.06,861.66953 615.97938,862.18413 C 619.3229,862.53389 619.44445,859.85288 618.55719,858.94771 C 619.41319,858.74371 621.21149,857.26159 620.00408,855.5157 C 621.66781,855.41218 621.94956,852.3917 620.74187,851.47597 C 622.117,850.9917 625.27655,846.97293 615.7578,846.89124 C 614.59263,846.88124 615.68265,844.972 [...]
+       style="fill:#f4d7d7;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cscscssc"
+       id="path12300"
+       d="M 601.98808,811.38003 C 593.42745,816.90941 572.79691,830.36838 583.46745,841.45089 C 594.13798,852.53338 603.50388,855.77314 603.50388,855.77314 C 603.50388,855.77314 603.63238,852.67913 606.26744,847.43369 C 608.15568,843.6749 611.44568,842.47821 611.44568,842.47821 C 609.43579,840.29378 595.22475,838.91411 596.36391,833.59398 C 597.52277,828.18182 616.19414,825.80432 613.95955,815.54536 C 612.86556,810.52288 610.0553,808.40088 601.98808,811.38003 z "
+       style="fill:#ffda5c;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.29999959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       transform="matrix(0.64065,-7.819027e-2,8.137048e-2,0.615612,182.9143,353.6568)"
+       d="M 632.25471 802.35638 A 5.2338967 5.40836 0 1 1  621.78692,802.35638 A 5.2338967 5.40836 0 1 1  632.25471 802.35638 z"
+       sodipodi:ry="5.40836"
+       sodipodi:rx="5.2338967"
+       sodipodi:cy="802.35638"
+       sodipodi:cx="627.02081"
+       id="path12294"
+       style="fill:#000000;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.745485,-9.468581e-2,9.468581e-2,0.745485,107.8102,266.4833)"
+       d="M 630.39072 795.33301 A 2.2205544 2.2822363 0 1 1  625.94961,795.33301 A 2.2205544 2.2822363 0 1 1  630.39072 795.33301 z"
+       sodipodi:ry="2.2822363"
+       sodipodi:rx="2.2205544"
+       sodipodi:cy="795.33301"
+       sodipodi:cx="628.17017"
+       id="path13247"
+       style="fill:#ffffff;stroke:none;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.64065,-7.819027e-2,8.137048e-2,0.615612,203.1678,353.6921)"
+       d="M 632.25471 802.35638 A 5.2338967 5.40836 0 1 1  621.78692,802.35638 A 5.2338967 5.40836 0 1 1  632.25471 802.35638 z"
+       sodipodi:ry="5.40836"
+       sodipodi:rx="5.2338967"
+       sodipodi:cy="802.35638"
+       sodipodi:cx="627.02081"
+       id="path4998"
+       style="fill:#000000;stroke:#000000;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.738859,-9.589021e-2,9.384422e-2,0.754968,132.7997,259.5372)"
+       d="M 630.39072 795.33301 A 2.2205544 2.2822363 0 1 1  625.94961,795.33301 A 2.2205544 2.2822363 0 1 1  630.39072 795.33301 z"
+       sodipodi:ry="2.2822363"
+       sodipodi:rx="2.2205544"
+       sodipodi:cy="795.33301"
+       sodipodi:cx="628.17017"
+       id="path5000"
+       style="fill:#ffffff;stroke:none;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(-0.117288,-1.501864,1.255807,-0.260356,-349.076,1925.719)"
+       d="M 606.60861 827.13019 A 10.991182 2.6169484 0 1 1  584.62625,827.13019 A 10.991182 2.6169484 0 1 1  606.60861 827.13019 z"
+       sodipodi:ry="2.6169484"
+       sodipodi:rx="10.991182"
+       sodipodi:cy="827.13019"
+       sodipodi:cx="595.61743"
+       id="path5027"
+       style="fill:url(#radialGradient7982);fill-opacity:1;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(1.133228,-0.787475,0.869641,1.065272,-780.3416,382.5937)"
+       d="M 606.60861 827.13019 A 10.991182 2.6169484 0 1 1  584.62625,827.13019 A 10.991182 2.6169484 0 1 1  606.60861 827.13019 z"
+       sodipodi:ry="2.6169484"
+       sodipodi:rx="10.991182"
+       sodipodi:cy="827.13019"
+       sodipodi:cx="595.61743"
+       id="path6113"
+       style="fill:url(#radialGradient6115);fill-opacity:1;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <g
+       style="opacity:0.67000002"
+       transform="translate(-2.351629e-6,-2.093557)"
+       id="g5050">
+      <path
+         style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.3220526;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1"
+         d="M 634.41022,795.67887 C 634.41022,801.40692 632.13944,806.95204 640.51512,817.50771 C 625.71185,808.81231 615.76813,815.5429 609.09378,815.5429 C 595.11911,815.5429 583.77735,806.64381 583.77735,795.67887 C 583.77735,784.71392 595.11911,775.81484 609.09378,775.81484 C 623.06845,775.81484 634.41022,784.71392 634.41022,795.67887 z "
+         id="path4026"
+         sodipodi:nodetypes="ccsssc" />
+      <text
+         xml:space="preserve"
+         style="font-size:43.05487061px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         x="534.76764"
+         y="902.87823"
+         id="text4029"
+         transform="scale(1.11482,0.897006)"><tspan
+           sodipodi:role="line"
+           id="tspan4031"
+           x="534.76764"
+           y="902.87823">?</tspan></text>
+    </g>
+    <path
+       transform="matrix(1.202308,-0.907638,0.895676,0.917932,-862.0372,601.6811)"
+       d="M 606.60861 827.13019 A 10.991182 2.6169484 0 1 1  584.62625,827.13019 A 10.991182 2.6169484 0 1 1  606.60861 827.13019 z"
+       sodipodi:ry="2.6169484"
+       sodipodi:rx="10.991182"
+       sodipodi:cy="827.13019"
+       sodipodi:cx="595.61743"
+       id="path9762"
+       style="fill:url(#radialGradient9764);fill-opacity:1;stroke:none;stroke-width:2.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="arc" />
+  </g>
+  <rect
+     id="rect4131"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="455.34137"
+     x="26.202015"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4133"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="455.34137"
+     x="74.713554"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4135"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="455.13403"
+     x="123.14871"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4137"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="453.80078"
+     x="170.95718"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4139"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="453.80078"
+     x="219.48363"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4141"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.4375"
+     x="268.23099"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4143"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.4375"
+     x="317.33041"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g4145"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,20.576369)">
+    <path
+       id="path4147"
+       style="fill:url(#linearGradient4526);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 28.033255,951.24411 L 38.230475,967.49704 L 28.033255,967.49704 L 45.156086,994.76755 L 62.278917,1022.038 L 79.401751,994.76755 L 96.524582,967.49704 L 86.327363,967.49704 L 96.524582,951.24411 L 62.278917,951.24411 L 28.033255,951.24411 z " />
+    <path
+       id="path4149"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 68.907579,979.062 L 53.232542,988.3243 L 37.557505,997.5866 L 53.232542,1006.8488 L 68.907579,1016.1261 L 68.907579,1003.9374 L 88.442449,1003.9374 L 88.442449,991.2508 L 68.907579,991.2508 L 68.907579,979.062 z " />
+  </g>
+  <g
+     id="g4151"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,20.576369)">
+    <path
+       id="path4153"
+       style="fill:url(#linearGradient4528);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 133.75435,951.96518 L 143.95157,968.21811 L 133.75435,968.21811 L 150.87718,995.48862 L 168.00001,1022.7591 L 185.12284,995.48862 L 202.24567,968.21811 L 192.04845,968.21811 L 202.24567,951.96518 L 168.00001,951.96518 L 133.75435,951.96518 z " />
+    <path
+       id="path4155"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 162.09241,979.062 L 177.76744,988.3243 L 193.44248,997.5866 L 177.76744,1006.8488 L 162.09241,1016.1261 L 162.09241,1003.9374 L 142.55754,1003.9374 L 142.55754,991.2508 L 162.09241,991.2508 L 162.09241,979.062 z " />
+  </g>
+  <g
+     id="g4157"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,46.449199)">
+    <path
+       id="path4159"
+       style="fill:url(#linearGradient4530);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 238.75435,895.9652 L 248.95157,912.21813 L 238.75435,912.21813 L 255.87718,939.48864 L 273.00001,966.7591 L 290.12284,939.48864 L 307.24567,912.21813 L 297.04845,912.21813 L 307.24567,895.9652 L 273.00001,895.9652 L 238.75435,895.9652 z " />
+    <path
+       id="path4161"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 245.46663,926.60502 L 245.46663,936.8248 L 235.24685,936.8248 L 235.24685,946.3632 L 245.46663,946.3632 L 245.46663,956.5831 L 255.00509,956.5831 L 255.00509,946.3632 L 265.22487,946.3632 L 265.22487,936.8248 L 255.00509,936.8248 L 255.00509,926.60502 L 245.46663,926.60502 z " />
+    <rect
+       id="rect4163"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:4.23082352;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       y="937.00116"
+       x="285.13812"
+       height="9.1857538"
+       width="27.285976" />
+  </g>
+  <g
+     id="g4165"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,20.576369)">
+    <path
+       id="path4167"
+       style="fill:url(#linearGradient4532);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 343.58903,951.96517 L 353.78625,968.2181 L 343.58903,968.2181 L 360.71186,995.48861 L 377.8347,1022.7591 L 394.95753,995.48861 L 412.08036,968.2181 L 401.88314,968.2181 L 412.08036,951.96517 L 377.8347,951.96517 L 343.58903,951.96517 z " />
+    <path
+       id="path4169"
+       style="opacity:1;color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.43875265;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 351.24094,977.84406 L 351.24094,1017.3441 L 362.80344,1017.3441 L 362.80344,1003.0629 L 369.20969,1006.8441 L 384.89719,1016.1254 L 384.89719,1003.9379 L 404.42844,1003.9379 L 404.42844,991.25031 L 384.89719,991.25031 L 384.89719,979.06281 L 369.20969,988.31281 L 362.80344,992.12531 L 362.80344,977.84406 L 351.24094,977.84406 z " />
+  </g>
+  <g
+     id="g4171"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,20.576369)">
+    <path
+       id="path4173"
+       style="fill:url(#linearGradient4534);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 447.06727,951.96518 L 457.26449,968.21811 L 447.06727,968.21811 L 464.1901,995.48862 L 481.31293,1022.7591 L 498.43576,995.48862 L 515.55859,968.21811 L 505.36137,968.21811 L 515.55859,951.96518 L 481.31293,951.96518 L 447.06727,951.96518 z " />
+    <path
+       id="path4175"
+       style="opacity:1;color:#000000;fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.43875265;stroke-linecap:round;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       d="M 507.90668,977.84406 L 507.90668,1017.3441 L 496.34418,1017.3441 L 496.34418,1003.0629 L 489.93793,1006.8441 L 474.25043,1016.1254 L 474.25043,1003.9379 L 454.71918,1003.9379 L 454.71918,991.25031 L 474.25043,991.25031 L 474.25043,979.06281 L 489.93793,988.31281 L 496.34418,992.12531 L 496.34418,977.84406 L 507.90668,977.84406 z " />
+  </g>
+  <g
+     id="g4177"
+     transform="matrix(0.4620139,0,0,0.4620139,17.888983,46.449199)">
+    <path
+       id="path4179"
+       style="fill:url(#linearGradient4536);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 552.09953,895.24411 L 562.29675,911.49704 L 552.09953,911.49704 L 569.22236,938.76755 L 586.34519,966.038 L 603.46802,938.76755 L 620.59085,911.49704 L 610.39363,911.49704 L 620.59085,895.24411 L 586.34519,895.24411 L 552.09953,895.24411 z " />
+    <path
+       id="path4181"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 596.42552,926.94358 L 596.42552,938.53032 L 584.10133,938.53032 L 584.10133,949.34454 L 596.42552,949.34454 L 596.42552,960.93142 L 607.9281,960.93142 L 607.9281,949.34454 L 620.25229,949.34454 L 620.25229,938.53032 L 607.9281,938.53032 L 607.9281,926.94358 L 596.42552,926.94358 z " />
+  </g>
+  <g
+     id="g4183"
+     transform="matrix(0.4620139,0,0,0.4620139,18.349914,45.009029)">
+    <path
+       id="path4185"
+       style="fill:url(#linearGradient4538);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 657.61003,895.96518 L 667.80725,912.21811 L 657.61003,912.21811 L 674.73286,939.48862 L 691.85569,966.7591 L 708.97852,939.48862 L 726.10135,912.21811 L 715.90413,912.21811 L 726.10135,895.96518 L 691.85569,895.96518 L 657.61003,895.96518 z " />
+    <rect
+       id="rect4187"
+       style="fill:#00ff00;fill-opacity:1;stroke:#000000;stroke-width:4.21595383;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="939.37506"
+       x="689.06104"
+       height="11.648645"
+       width="35.517338" />
+  </g>
+  <rect
+     id="rect4189"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.4375"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <g
+     id="g4191"
+     transform="matrix(0.8455204,0,0,0.7937234,-71.949331,-179.18452)">
+    <path
+       id="path4193"
+       style="color:#000000;fill:url(#radialGradient4540);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4542);stroke-width:19.88428688;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.253681,-2.501311e-2,2.459378e-2,0.246667,229.9229,877.6432)"
+       d="M 1044.2857,467.36218 C 1044.3227,533.26967 994.10381,586.71913 932.14286,586.71913 C 870.18191,586.71913 819.96301,533.26967 820.00002,467.36218 C 819.96301,401.45469 870.18191,348.00523 932.14286,348.00523 C 994.10381,348.00523 1044.3227,401.45469 1044.2857,467.36218 L 1044.2857,467.36218 z " />
+    <path
+       id="path4195"
+       style="color:#000000;fill:url(#radialGradient4544);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient4546);stroke-width:24.22555733;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(7.590656e-2,-7.48444e-3,8.865423e-3,8.891693e-2,402.9419,934.5995)"
+       d="M 1044.2857,467.36218 C 1044.3227,533.26967 994.10381,586.71913 932.14286,586.71913 C 870.18191,586.71913 819.96301,533.26967 820.00002,467.36218 C 819.96301,401.45469 870.18191,348.00523 932.14286,348.00523 C 994.10381,348.00523 1044.3227,401.45469 1044.2857,467.36218 L 1044.2857,467.36218 z " />
+    <path
+       id="path4198"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,281.3689,848.9056)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4200"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,302.3878,837.0276)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4202"
+       style="color:#000000;fill:#000000;fill-opacity:0.44495413;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,325.3773,845.8586)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4204"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,275.7409,869.832)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4206"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,332.8209,863.8999)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4208"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,326.1424,885.6138)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4210"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:15;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       transform="matrix(0.368913,-3.637513e-2,2.971842e-2,0.298064,287.9716,890.5937)"
+       d="M 441.43666,400.56125 C 441.43666,402.65335 439.85375,404.34932 437.90112,404.34932 C 435.9485,404.34932 434.36559,402.65335 434.36559,400.56125 C 434.36559,398.46915 435.9485,396.77318 437.90112,396.77318 C 439.85375,396.77318 441.43666,398.46915 441.43666,400.56125 z " />
+    <path
+       id="path4212"
+       style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4548);stroke-width:3.50856757;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 451.50995,943.25668 C 435.78414,960.38604 437.18199,983.78233 452.90778,996.73372" />
+    <path
+       id="path4214"
+       style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4550);stroke-width:2.95746279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 468.42158,952.25773 C 454.79821,963.2013 456.00919,978.14862 469.63254,986.42309" />
+    <path
+       id="path4216"
+       style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4552);stroke-width:3.47961354;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 505.32732,943.2543 C 520.79326,960.38517 519.4185,983.78352 503.95255,996.73612" />
+    <path
+       id="path4218"
+       style="fill:none;fill-rule:evenodd;stroke:url(#radialGradient4554);stroke-width:2.96080017;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 488.70524,951.88864 C 502.07067,963.06859 500.88263,978.33881 487.51722,986.79199" />
+    <path
+       id="path4220"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 465.49828,937.54255 C 475.04316,934.00456 478.02606,940.68448 481.42441,949.00956 C 475.30206,941.30677 475.6879,938.96409 467.47456,942.31203 C 464.4973,935.13979 468.46833,944.71828 465.49828,937.54255 z " />
+    <path
+       id="path4222"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="matrix(0.539089,-0.218317,0.243345,0.597197,109.4028,645.3595)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path4224"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.31586146;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 479.31673,974.22578 L 464.52817,937.93298" />
+    <path
+       id="path4226"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 467.90731,943.66616 C 477.45219,940.12817 480.43507,946.80809 483.83344,955.13317 C 477.71109,947.43038 478.09693,945.08769 469.88359,948.43564 C 466.90632,941.2634 470.87734,950.8419 467.90731,943.66616 z " />
+    <path
+       id="path4228"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 470.37101,949.89018 C 479.91589,946.35219 482.89878,953.03211 486.29715,961.3572 C 480.1748,953.6544 480.56062,951.31171 472.34729,954.65967 C 469.37002,947.48741 473.34105,957.06591 470.37101,949.89018 z " />
+    <path
+       id="path4230"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 505.72899,950.50171 C 520.25906,957.10155 515.96029,967.3979 510.25127,979.88426 C 512.25344,965.10468 515.33826,963.04516 502.49058,957.68701 C 507.35452,946.87609 500.85315,961.30851 505.72899,950.50171 z " />
+    <path
+       id="path4232"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:4;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       transform="matrix(0.841647,0.353197,-0.410015,0.895235,445.2498,255.6813)"
+       d="M 375.5,689.61218 C 375.5,694.72081 370.4632,698.86218 364.25,698.86218 C 358.0368,698.86218 353,694.72081 353,689.61218 C 353,684.50355 358.0368,680.36218 364.25,680.36218 C 370.4632,680.36218 375.5,684.50355 375.5,689.61218 z " />
+    <path
+       id="path4234"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.58397031;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 479.29983,1004.2686 L 504.21719,949.86355" />
+  </g>
+  <rect
+     id="rect4236"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="408.94916"
+     x="26.005444"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4238"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="74.339523"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4240"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="122.47703"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4242"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="170.61453"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4244"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="218.75206"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4246"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="266.88956"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4248"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="315.02707"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045" />
+  <rect
+     id="rect4250"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline;opacity:1"
+     y="409.14569"
+     x="363.16461"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/blue_serious/layout_compact.png"
+     inkscape:export-xdpi="51.581036"
+     inkscape:export-ydpi="51.581036" />
+  <g
+     id="g4252"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,93.746929)">
+    <path
+       id="path4254"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.76050973;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 46.333943,612.72709 L 63.936792,612.72709" />
+    <path
+       id="path4256"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       d="M 40.861277,617.58222 C 40.861277,621.77182 36.730582,625.16817 31.635118,625.16817 C 26.539654,625.16817 22.408959,621.77182 22.408959,617.58222 C 22.408959,613.39261 26.539654,609.99626 31.635118,609.99626 C 36.730582,609.99626 40.861277,613.39261 40.861277,617.58222 z " />
+    <path
+       id="path4258"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 40.950899,616.25852 L 40.950899,566.41932" />
+    <path
+       id="path4260"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.76050973;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 46.333943,600.43803 L 63.936792,600.43803" />
+    <text
+       transform="scale(0.978716,1.021747)"
+       id="text4262"
+       y="613.46783"
+       x="50.292049"
+       style="font-size:83.26845551px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+       xml:space="preserve"><tspan
+         y="613.46783"
+         x="50.292049"
+         id="tspan4264"
+         sodipodi:role="line">?</tspan></text>
+  </g>
+  <g
+     id="g4266"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,93.746929)">
+    <g
+       id="g4268">
+      <g
+         id="g4270"
+         transform="matrix(1.022343,0,0,0.225964,-3.639687,485.0216)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path4272" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4274" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4276" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4278" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4280" />
+      </g>
+      <g
+         id="g4282"
+         transform="matrix(0.165008,0,0,0.185315,34.80966,476.2322)">
+        <rect
+           id="rect4284"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect4286"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g4288"
+         transform="matrix(0.200017,0,0,0.193766,131.9627,502.3096)">
+        <path
+           id="path4290"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4292"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4294"
+         transform="matrix(0.200017,0,0,0.193766,126.0764,498.6294)">
+        <path
+           id="path4296"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4298"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4300"
+         transform="matrix(1.022343,0,0,0.225964,-3.639687,462.1859)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path4302" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4304" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4306" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4308" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4310" />
+      </g>
+      <g
+         id="g4312"
+         transform="matrix(0.165008,0,0,0.185315,34.80966,453.3966)">
+        <rect
+           id="rect4314"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect4316"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g4318"
+         transform="matrix(0.200017,0,0,0.193766,131.9627,479.474)">
+        <path
+           id="path4320"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4322"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4324"
+         transform="matrix(0.200017,0,0,0.193766,126.0764,475.7938)">
+        <path
+           id="path4326"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4328"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4330"
+         transform="matrix(1.022343,0,0,0.225964,-3.639687,439.3503)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path4332" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4334" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4336" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4338" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4340" />
+      </g>
+      <g
+         id="g4342"
+         transform="matrix(0.165008,0,0,0.185315,34.80966,430.5609)">
+        <rect
+           id="rect4344"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect4346"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+      <g
+         id="g4348"
+         transform="matrix(0.200017,0,0,0.193766,131.9627,456.6383)">
+        <path
+           id="path4350"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4352"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4354"
+         transform="matrix(0.200017,0,0,0.193766,126.0764,452.9581)">
+        <path
+           id="path4356"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4358"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+    </g>
+    <g
+       inkscape:transform-center-y="-249.13318"
+       inkscape:transform-center-x="-414.5246"
+       id="g4360"
+       transform="matrix(0.326639,0.315927,-0.325985,0.316561,52.01311,186.7728)">
+      <rect
+         id="rect4362"
+         style="color:#000000;fill:#ff9955;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.56066203;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="499.875"
+         x="797.08252"
+         height="17.941612"
+         width="62.664028" />
+      <path
+         id="path4364"
+         style="opacity:1;color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70223784;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 786.26355,503.58129 L 797.00751,498.99201 L 797.00751,518.69962 L 786.493,515.52242 L 786.26355,503.58129 z " />
+      <path
+         id="path4366"
+         style="opacity:0.77999998;color:#000000;fill:url(#linearGradient4556);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-1,0,0,-1,715.286,971.8034)"
+         d="M 1.0197296,463.97751 C 1.0197298,484.25205 -15.416035,500.68782 -35.690579,500.68782 C -55.965122,500.68782 -72.400887,484.25205 -72.400887,463.97751 C -72.400887,443.70297 -55.965122,427.2672 -35.690579,427.2672 C -15.416035,427.2672 1.0197298,443.70297 1.0197296,463.97751 L 1.0197296,463.97751 z " />
+    </g>
+  </g>
+  <g
+     id="g4368"
+     transform="matrix(0.5633612,0,0,0.5633612,-32.215099,93.570219)">
+    <g
+       transform="matrix(1.090844,0,0,1.73063,158.8704,-417.9589)"
+       id="g4370">
+      <g
+         id="g4372"
+         transform="matrix(0.957878,0,0,0.55144,3.319204,256.4117)">
+        <path
+           d="M 111.87488,566.71352 L 173.41819,566.58088"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+           id="path4374" />
+        <path
+           d="M 111.87488,626.46842 L 173.41819,626.33578"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4376" />
+        <path
+           d="M 111.87488,611.5297 L 173.41818,611.39706"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4378" />
+        <path
+           d="M 111.87488,596.59099 L 173.41818,596.45834"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4380" />
+        <path
+           d="M 111.87488,581.65225 L 173.41819,581.51962"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+           id="path4382" />
+      </g>
+      <g
+         id="g4384"
+         transform="matrix(0.427741,0,0,0.452238,-86.33369,234.9625)">
+        <rect
+           id="rect4386"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="460.12595"
+           ry="0"
+           height="72.622528"
+           width="10.422997" />
+        <rect
+           id="rect4388"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           y="738.49548"
+           x="473.64929"
+           height="72.622528"
+           width="2.5666234" />
+      </g>
+    </g>
+    <g
+       transform="matrix(0.635101,0,0,0.818349,307.0637,112.2701)"
+       id="g4390">
+      <path
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path4392" />
+      <path
+         d="M -7.156011,622.3181 L -7.156011,572.4789"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path4394" />
+    </g>
+    <g
+       transform="matrix(0.635101,0,0,0.818349,328.2121,96.72718)"
+       id="g4396">
+      <path
+         d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path4398" />
+      <path
+         d="M -7.156011,622.3181 L -7.156011,572.4789"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path4400" />
+    </g>
+    <g
+       inkscape:transform-center-y="-249.13318"
+       inkscape:transform-center-x="-414.52458"
+       id="g4402"
+       transform="matrix(0.326639,0.315927,-0.325985,0.316561,221.3609,188.6469)">
+      <rect
+         id="rect4404"
+         style="color:#000000;fill:#ff9955;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.56066203;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="499.875"
+         x="797.08252"
+         height="17.941612"
+         width="62.664028" />
+      <path
+         id="path4406"
+         style="opacity:1;color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70223784;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 786.26355,503.58129 L 797.00751,498.99201 L 797.00751,518.69962 L 786.493,515.52242 L 786.26355,503.58129 z " />
+      <path
+         id="path4408"
+         style="opacity:0.77999998;color:#000000;fill:url(#linearGradient4558);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-1,0,0,-1,715.286,971.8034)"
+         d="M 1.0197296,463.97751 C 1.0197298,484.25205 -15.416035,500.68782 -35.690579,500.68782 C -55.965122,500.68782 -72.400887,484.25205 -72.400887,463.97751 C -72.400887,443.70297 -55.965122,427.2672 -35.690579,427.2672 C -15.416035,427.2672 1.0197298,443.70297 1.0197296,463.97751 L 1.0197296,463.97751 z " />
+    </g>
+  </g>
+  <g
+     id="g4410"
+     transform="matrix(0.5633612,0,0,0.5633612,63.747173,93.040039)">
+    <g
+       id="g4412"
+       style="display:inline"
+       transform="translate(-636.6883,341.6475)">
+      <path
+         id="path4414"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.01236534px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 833.34122,225.07216 L 833.34122,286.35703" />
+      <path
+         id="path4416"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 843.52579,225.73634 L 843.52579,286.55437" />
+      <path
+         id="path4418"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 852.30857,225.73634 L 852.30857,286.55437" />
+      <path
+         id="path4420"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 861.09135,225.73634 L 861.09135,286.55437" />
+      <path
+         id="path4422"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 869.87413,225.73634 L 869.87413,286.55437" />
+      <path
+         id="path4424"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 878.6569,225.73634 L 878.6569,286.55437" />
+      <path
+         id="path4426"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 887.43968,225.73634 L 887.43968,286.55437" />
+      <path
+         id="path4428"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.39199093px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.22246,225.73634 L 896.22246,286.55437" />
+      <rect
+         id="rect4430"
+         style="color:#000000;fill:url(#linearGradient4560);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83745855;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="270.90326"
+         x="870.24017"
+         height="15.065637"
+         width="25.749367" />
+      <rect
+         id="rect4432"
+         style="color:#000000;fill:url(#linearGradient4562);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85693413;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="255.7885"
+         x="834.93457"
+         height="15.699371"
+         width="25.872597" />
+      <rect
+         id="rect4434"
+         style="color:#000000;fill:url(#linearGradient4564);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.77284241;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="225.60927"
+         x="843.66455"
+         height="15.549897"
+         width="35.031761" />
+      <rect
+         id="rect4436"
+         style="color:#000000;fill:url(#linearGradient4566);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.83925015;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="240.99434"
+         x="852.5072"
+         height="14.594875"
+         width="43.547024" />
+      <path
+         id="path4438"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 896.28272,225.35563 L 834.8784,225.35563" />
+      <path
+         id="path4440"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,240.53581 L 834.8784,240.53581" />
+      <path
+         id="path4442"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,255.71599 L 834.8784,255.71599" />
+      <path
+         id="path4444"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,270.89618 L 834.8784,270.89618" />
+      <path
+         id="path4446"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.51782358px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+         d="M 896.28272,286.07636 L 834.8784,286.07636" />
+      <rect
+         id="rect4448"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.53349"
+         x="843.96301"
+         height="2.1720431"
+         width="8.6314974" />
+      <rect
+         id="rect4450"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="231.22321"
+         x="857.89111"
+         height="2.7926269"
+         width="7.2583046" />
+      <rect
+         id="rect4452"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.34735"
+         x="852.98682"
+         height="3.1029184"
+         width="13.928099" />
+      <rect
+         id="rect4454"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="871.03455"
+         height="2.7926269"
+         width="2.7463856" />
+      <rect
+         id="rect4456"
+         style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.85912412;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="247.50249"
+         x="886.11169"
+         height="2.7926269"
+         width="9.2200089" />
+      <g
+         id="g4458"
+         transform="matrix(0.665193,0,0,1.080499,302.4562,-1.363347)">
+        <rect
+           id="rect4460"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect4462"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect4464"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+      <g
+         id="g4466"
+         style="display:inline"
+         transform="matrix(-0.665193,0,0,1.080499,1428.48,13.68581)">
+        <rect
+           id="rect4468"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.97684985;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.52336"
+           x="801.20557"
+           height="3.4692454"
+           width="15.243404" />
+        <rect
+           id="rect4470"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="823.90393"
+           height="2.5845714"
+           width="4.3076191" />
+        <rect
+           id="rect4472"
+           style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+           y="243.9657"
+           x="834.81653"
+           height="2.5845714"
+           width="3.7332697" />
+      </g>
+    </g>
+    <g
+       inkscape:transform-center-y="-249.13318"
+       inkscape:transform-center-x="-414.52458"
+       id="g4474"
+       transform="matrix(0.326639,0.315927,-0.325985,0.316561,137.3191,188.96)">
+      <rect
+         id="rect4476"
+         style="color:#000000;fill:#ff9955;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.56066203;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         y="499.875"
+         x="797.08252"
+         height="17.941612"
+         width="62.664028" />
+      <path
+         id="path4478"
+         style="opacity:1;color:#000000;fill:#ffff00;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.70223784;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         d="M 786.26355,503.58129 L 797.00751,498.99201 L 797.00751,518.69962 L 786.493,515.52242 L 786.26355,503.58129 z " />
+      <path
+         id="path4480"
+         style="opacity:0.77999998;color:#000000;fill:url(#linearGradient4568);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+         transform="matrix(-1,0,0,-1,715.286,971.8034)"
+         d="M 1.0197296,463.97751 C 1.0197298,484.25205 -15.416035,500.68782 -35.690579,500.68782 C -55.965122,500.68782 -72.400887,484.25205 -72.400887,463.97751 C -72.400887,443.70297 -55.965122,427.2672 -35.690579,427.2672 C -15.416035,427.2672 1.0197298,443.70297 1.0197296,463.97751 L 1.0197296,463.97751 z " />
+    </g>
+  </g>
+  <g
+     id="g4482"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,93.746929)">
+    <g
+       id="g4484">
+      <g
+         id="g4486"
+         transform="matrix(1.090844,0,0,1.73063,245.4128,-416.8902)">
+        <g
+           transform="matrix(0.957878,0,0,0.55144,3.319204,256.4117)"
+           id="g4488">
+          <path
+             id="path4490"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+             d="M 111.87488,566.71352 L 173.41819,566.58088" />
+          <path
+             id="path4492"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 111.87488,626.46842 L 173.41819,626.33578" />
+          <path
+             id="path4494"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 111.87488,611.5297 L 173.41818,611.39706" />
+          <path
+             id="path4496"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 111.87488,596.59099 L 173.41818,596.45834" />
+          <path
+             id="path4498"
+             style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.78715056px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
+             d="M 111.87488,581.65225 L 173.41819,581.51962" />
+        </g>
+        <g
+           transform="matrix(0.427741,0,0,0.452238,-86.33369,234.9625)"
+           id="g4500">
+          <rect
+             width="10.422997"
+             height="72.622528"
+             ry="0"
+             x="460.12595"
+             y="738.49548"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:4.46921062;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             id="rect4502" />
+          <rect
+             width="2.5666234"
+             height="72.622528"
+             x="473.64929"
+             y="738.49548"
+             style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.40641475;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+             id="rect4504" />
+        </g>
+      </g>
+      <g
+         id="g4506"
+         transform="matrix(0.635101,0,0,0.818349,393.6061,113.3388)">
+        <path
+           id="path4508"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4510"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+      <g
+         id="g4512"
+         transform="matrix(0.635101,0,0,0.818349,414.7545,97.79592)">
+        <path
+           id="path4514"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:3.28041196;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M -7.2456331,623.6418 C -7.2456331,627.8314 -11.376328,631.22775 -16.471792,631.22775 C -21.567256,631.22775 -25.697951,627.8314 -25.697951,623.6418 C -25.697951,619.45219 -21.567256,616.05584 -16.471792,616.05584 C -11.376328,616.05584 -7.2456331,619.45219 -7.2456331,623.6418 z " />
+        <path
+           id="path4516"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.10116768;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M -7.156011,622.3181 L -7.156011,572.4789" />
+      </g>
+    </g>
+    <path
+       sodipodi:nodetypes="czczczc"
+       id="path4518"
+       d="M 411.78985,624.6666 C 411.78985,624.6666 400.16655,624.17722 392.02482,616.70732 C 383.88308,609.23742 377.16967,600.9919 377.16967,600.9919 C 377.16967,600.9919 381.93058,591.7906 389.99449,583.72289 C 398.05841,575.65517 410.05022,571.58486 410.05022,571.58486 C 410.05022,571.58486 415.66282,582.34945 415.74064,597.88706 C 415.81847,613.42468 411.78985,624.6666 411.78985,624.6666 z "
+       style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2.9000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       transform="matrix(2.115244,0,0,1.423109,-586.4825,-238.9625)"
+       d="M 478.70496 588.40106 A 7.5287805 18.194553 0 1 1  463.6474,588.40106 A 7.5287805 18.194553 0 1 1  478.70496 588.40106 z"
+       sodipodi:ry="18.194553"
+       sodipodi:rx="7.5287805"
+       sodipodi:cy="588.40106"
+       sodipodi:cx="471.17618"
+       id="path4520"
+       style="fill:#3771c8;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(1.163385,0,0,0.936892,-135.6486,46.23215)"
+       d="M 478.70496 588.40106 A 7.5287805 18.194553 0 1 1  463.6474,588.40106 A 7.5287805 18.194553 0 1 1  478.70496 588.40106 z"
+       sodipodi:ry="18.194553"
+       sodipodi:rx="7.5287805"
+       sodipodi:cy="588.40106"
+       sodipodi:cx="471.17618"
+       id="path4522"
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       sodipodi:type="arc" />
+    <path
+       transform="matrix(0.474681,0,0,0.282167,191.8461,422.9515)"
+       d="M 478.70496 588.40106 A 7.5287805 18.194553 0 1 1  463.6474,588.40106 A 7.5287805 18.194553 0 1 1  478.70496 588.40106 z"
+       sodipodi:ry="18.194553"
+       sodipodi:rx="7.5287805"
+       sodipodi:cy="588.40106"
+       sodipodi:cx="471.17618"
+       id="path4524"
+       style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     id="g2988"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,2.4823692)">
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path4570"
+       d="M 48.485517,575.51074 C 47.057601,575.53345 40.824521,575.50157 39.272311,589.79823 L 35.150004,589.79823 L 35.150004,592.07556 L 39.134654,592.07556 C 38.761213,596.18447 35.172599,613.87811 32.848466,613.95576 C 30.453707,614.03577 33.091056,614.04051 33.113086,611.43574 C 33.135117,608.83094 29.615875,608.89369 29.548583,611.44041 C 29.479763,614.04493 29.820497,616.0356 34.173133,616.00346 C 38.572698,615.97098 41.807204,603.64647 43.628053,592.07556 L 47.598261,592.07556 L [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path2984"
+       d="M 62.485517,575.51074 C 61.057601,575.53345 54.824521,575.50157 53.272311,589.79823 L 49.150004,589.79823 L 49.150004,592.07556 L 53.134654,592.07556 C 52.761213,596.18447 49.172599,613.87811 46.848466,613.95576 C 44.453707,614.03577 47.091056,614.04051 47.113086,611.43574 C 47.135117,608.83094 43.615875,608.89369 43.548583,611.44041 C 43.479763,614.04493 43.820497,616.0356 48.173133,616.00346 C 52.572698,615.97098 55.807204,603.64647 57.628053,592.07556 L 61.598261,592.07556 L [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path2986"
+       d="M 76.485517,575.51074 C 75.057601,575.53345 68.824521,575.50157 67.272311,589.79823 L 63.150004,589.79823 L 63.150004,592.07556 L 67.134654,592.07556 C 66.761213,596.18447 63.172599,613.87811 60.848466,613.95576 C 58.453707,614.03577 61.091056,614.04051 61.113086,611.43574 C 61.135117,608.83094 57.615875,608.89369 57.548583,611.44041 C 57.479763,614.04493 57.820497,616.0356 62.173133,616.00346 C 66.572698,615.97098 69.807204,603.64647 71.628053,592.07556 L 75.598261,592.07556 L [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+  <g
+     id="g3012"
+     transform="matrix(0.5633612,0,0,0.5633612,20.007825,2.4823692)">
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path2995"
+       d="M 136.48552,575.51074 C 135.0576,575.53345 128.82452,575.50157 127.27231,589.79823 L 123.15,589.79823 L 123.15,592.07556 L 127.13465,592.07556 C 126.76121,596.18447 123.1726,613.87811 120.84847,613.95576 C 118.45371,614.03577 121.09106,614.04051 121.11309,611.43574 C 121.13512,608.83094 117.61588,608.89369 117.54858,611.44041 C 117.47976,614.04493 117.8205,616.0356 122.17313,616.00346 C 126.5727,615.97098 129.8072,603.64647 131.62805,592.07556 L 135.59826,592.07556 L 135.59826, [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+    <path
+       sodipodi:nodetypes="cccccszzzcccczszzz"
+       id="path2997"
+       d="M 150.48552,575.51074 C 149.0576,575.53345 142.82452,575.50157 141.27231,589.79823 L 137.15,589.79823 L 137.15,592.07556 L 141.13465,592.07556 C 140.76121,596.18447 137.1726,613.87811 134.84847,613.95576 C 132.45371,614.03577 135.09106,614.04051 135.11309,611.43574 C 135.13512,608.83094 131.61588,608.89369 131.54858,611.44041 C 131.47976,614.04493 131.8205,616.0356 136.17313,616.00346 C 140.5727,615.97098 143.8072,603.64647 145.62805,592.07556 L 149.59826,592.07556 L 149.59826, [...]
+       style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+  <path
+     style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 150.98122,326.703 C 150.1768,326.71579 146.66532,326.69783 145.79086,334.75201 L 143.46851,334.75201 L 143.46851,336.03498 L 145.71331,336.03498 C 145.50293,338.34978 143.48125,348.3177 142.17192,348.36144 C 140.8228,348.40651 142.30858,348.40919 142.32099,346.94175 C 142.33341,345.47432 140.3508,345.50966 140.31289,346.94439 C 140.27412,348.41168 140.46607,349.53314 142.91818,349.51503 C 145.39673,349.49674 147.21892,342.55358 148.24472,336.03498 L 150.48138,336.03498 L 150.48 [...]
+     id="path3005"
+     sodipodi:nodetypes="cccccszzzcccczszzz" />
+  <path
+     style="fill:#000000;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 200.55704,326.703 C 199.75261,326.71579 196.24113,326.69783 195.36667,334.75201 L 193.04433,334.75201 L 193.04433,336.03498 L 195.28912,336.03498 C 195.07874,338.34978 193.05706,348.3177 191.74774,348.36144 C 190.39862,348.40651 191.8844,348.40919 191.89681,346.94175 C 191.90922,345.47432 189.92661,345.50966 189.8887,346.94439 C 189.84993,348.41168 190.04189,349.53314 192.49399,349.51503 C 194.97255,349.49674 196.79474,342.55358 197.82053,336.03498 L 200.0572,336.03498 L 200.05 [...]
+     id="path3019"
+     sodipodi:nodetypes="cccccszzzcccczszzz" />
+  <text
+     xml:space="preserve"
+     style="font-size:16.14900208px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="254.68269"
+     y="318.62085"
+     id="text3036"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3038"
+       x="254.68269"
+       y="318.62085"
+       style="font-size:16.14901543px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">m</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:16.14931297px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="307.45944"
+     y="318.62579"
+     id="text3044"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3046"
+       x="307.45944"
+       y="318.62579"
+       style="font-size:16.14933777px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">mp</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:16.14957619px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="356.63824"
+     y="318.63007"
+     id="text3048"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3050"
+       x="356.63824"
+       y="318.63007"
+       style="font-size:16.14960098px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">ppp</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:16.14987183px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="411.81506"
+     y="318.63477"
+     id="text3052"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3054"
+       x="411.81506"
+       y="318.63477"
+       style="font-size:16.14989853px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">pp</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:16.15017509px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marke [...]
+     x="466.99307"
+     y="318.63959"
+     id="text3056"
+     sodipodi:linespacing="100%"
+     transform="matrix(0.9394376,0,-0.1893359,1.0644666,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan3058"
+       x="466.99307"
+       y="318.63959"
+       style="font-size:16.1502018px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook">p</tspan></text>
+  <path
+     style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     d="M 56.110843,384.71198 L 40.303198,395.28564 L 40.303198,391.48506 L 50.703054,384.71198 L 40.303198,378.00258 L 40.303198,374.202 L 56.110843,384.71198 z "
+     id="text3060"
+     sodipodi:nodetypes="ccccccc" />
+  <text
+     xml:space="preserve"
+     style="font-size:30.45602417px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+     x="116.64803"
+     y="440.39285"
+     id="text3065"
+     transform="scale(1.1209993,0.8920612)"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3067"
+       x="116.64803"
+       y="440.39285">()</tspan></text>
+  <path
+     style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     d="M 86.498845,384.71198 L 102.30649,395.28564 L 102.30649,391.48506 L 91.906645,384.71198 L 102.30649,378.00258 L 102.30649,374.202 L 86.498845,384.71198 z "
+     id="path3069"
+     sodipodi:nodetypes="ccccccc" />
+  <g
+     id="g3104"
+     transform="matrix(0.5633612,0,0,0.5633612,15.500932,2.4823692)">
+    <path
+       id="path3073"
+       style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 312.30593,647.99065 C 323.97335,648.37311 324.2505,657.58689 324.25694,668.9189 C 321.0884,657.02522 322.5119,654.47127 312.34078,654.4967 C 312.28266,644.71049 312.35487,657.77749 312.30593,647.99065 z " />
+    <path
+       id="path3077"
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.8136487;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+       d="M 310.92742,694.2856 C 310.92742,698.0754 307.56802,701.14764 303.42398,701.14764 C 299.27995,701.14764 295.92055,698.0754 295.92055,694.2856 C 295.92055,690.49579 299.27995,687.42354 303.42398,687.42354 C 307.56802,687.42354 310.92742,690.49579 310.92742,694.2856 z " />
+    <path
+       id="path3075"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.83327127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 293.82309,681.8583 L 327.47426,657.4004" />
+    <path
+       id="path3079"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.65990877;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 311.16655,693.08823 L 311.16655,648.00504" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:34.65638351px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+     x="-389.72617"
+     y="257.13391"
+     id="text3110"
+     transform="matrix(0,-1.024355,0.976224,0,0,0)"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3112"
+       x="-389.72617"
+       y="257.13391">)</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:15.52974701px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="246.58002"
+     y="357.05609"
+     id="text3114"
+     transform="scale(0.9278539,1.0777559)"><tspan
+       sodipodi:role="line"
+       id="tspan3116"
+       x="246.58002"
+       y="357.05609">HO</tspan></text>
+  <path
+     style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+     d="M 289.31419,381.94275 L 297.25455,390.23462 L 289.31419,398.08051 L 280.97169,390.23462 L 289.31419,381.94275 z "
+     id="rect3126"
+     sodipodi:nodetypes="ccccc" />
+  <text
+     xml:space="preserve"
+     style="font-size:14.66517448px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="313.40533"
+     y="338.75354"
+     id="text3133"
+     transform="scale(0.8879582,1.1261792)"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3135"
+       x="313.40533"
+       y="338.75354"
+       style="font-size:14.66517448px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">NH</tspan></text>
+  <path
+     style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     d="M 338.02694,373.81157 L 328.23024,394.54862 L 330.02827,394.54862 L 336.05748,382.87004 L 341.53533,394.54862 L 347.76463,394.54862 L 338.02694,373.81157 z "
+     id="path3141"
+     sodipodi:nodetypes="ccccccc" />
+  <text
+     xml:space="preserve"
+     style="font-size:21.2996788px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="470.23547"
+     y="308.36682"
+     id="text3143"
+     transform="scale(0.7835739,1.2762038)"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan3145"
+       x="470.23547"
+       y="308.36682"
+       style="font-size:21.2996788px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">P.M</tspan></text>
+  <rect
+     id="rect3147"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.54208785;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="409.14569"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_left.png"
+     inkscape:export-xdpi="35.083145"
+     inkscape:export-ydpi="35.083145" />
+  <rect
+     id="rect3149"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="408.8056"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_right.png"
+     inkscape:export-xdpi="35.083145"
+     inkscape:export-ydpi="35.083145" />
+  <rect
+     id="rect3151"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.03625"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_up.png"
+     inkscape:export-xdpi="35.083145"
+     inkscape:export-ydpi="35.083145" />
+  <rect
+     id="rect3153"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.03625"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/button_down.png"
+     inkscape:export-xdpi="35.083145"
+     inkscape:export-ydpi="35.083145" />
+  <rect
+     id="rect3155"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="316.64386"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_bend.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3157"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="316.64386"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_dead.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3159"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="361.53442"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_vibrato.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3161"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="361.53442"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/repeat_alternative.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3163"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.78169"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slide.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3165"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.78169"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_staccato.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3167"
+     style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="269.03259"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_popping.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3169"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="269.03259"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3171"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="123.47828"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_picking.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3173"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="123.47828"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_trill.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3175"
+     style="opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.81017"
+     x="410.24951"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tapping.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3177"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.81017"
+     x="458.38705"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_bar.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <g
+     id="g4068"
+     transform="matrix(0.6801604,0,0,0.6801604,14.362893,11.373789)">
+    <path
+       sodipodi:nodetypes="cc"
+       id="path3179"
+       d="M 594.00003,497.36216 C 617.85953,497.555 627.69114,488.66969 628.00003,460.36216"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       transform="matrix(0.749399,0,0,0.807087,168.8359,92.77775)"
+       d="M 622.22856,466.26925 L 611.6474,466.26925 L 601.06624,466.26925 L 606.35682,457.1057 L 611.6474,447.94215 L 616.93798,457.1057 L 622.22856,466.26925 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="1.5707963"
+       sodipodi:arg1="0.52359878"
+       sodipodi:r2="6.1090355"
+       sodipodi:r1="12.218071"
+       sodipodi:cy="460.16022"
+       sodipodi:cx="611.6474"
+       sodipodi:sides="3"
+       id="path4066"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.70000005;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       sodipodi:type="star" />
+  </g>
+  <path
+     style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.44790959;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 471.38475,347.50253 L 488.4468,330.93125"
+     id="path4072"
+     sodipodi:nodetypes="cc" />
+  <g
+     id="g5882"
+     transform="matrix(1.0269525,0,0,0.9790352,-221.22387,-130.58855)">
+    <path
+       sodipodi:nodetypes="cc"
+       id="path4074"
+       d="M 674.43107,471.32979 L 691.12154,488.11001"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.94400001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <rect
+       y="469.35751"
+       x="672.41663"
+       height="6"
+       width="6"
+       id="rect4961"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       y="469.35751"
+       x="687.11115"
+       height="6"
+       width="6"
+       id="rect4963"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       y="483.72479"
+       x="687.11115"
+       height="6"
+       width="6"
+       id="rect4965"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       y="483.72479"
+       x="672.41663"
+       height="6"
+       width="6"
+       id="rect4967"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:23.50349617px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="409.8201"
+     y="307.42377"
+     id="text5893"
+     transform="scale(1.0327709,0.9682689)"
+     sodipodi:linespacing="125%"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_popping.png"
+     inkscape:export-xdpi="71.751251"
+     inkscape:export-ydpi="71.751251"><tspan
+       sodipodi:role="line"
+       id="tspan5895"
+       x="409.8201"
+       y="307.42377"
+       style="font-size:23.50349617px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">P</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:31.86540413px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="452.26965"
+     y="309.18457"
+     id="text5897"
+     transform="scale(1.0413973,0.9602483)"
+     sodipodi:linespacing="125%"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+     inkscape:export-xdpi="61.67075"
+     inkscape:export-ydpi="61.67075"><tspan
+       sodipodi:role="line"
+       id="tspan5899"
+       x="452.26965"
+       y="309.18457"
+       style="font-size:31.86540413px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">s</tspan></text>
+  <g
+     id="g5911"
+     transform="matrix(0.9778313,0,0,1.3442636,-166.29942,-214.67039)">
+    <text
+       transform="scale(0.902157,1.108454)"
+       id="text5901"
+       y="312.95807"
+       x="662.24274"
+       style="font-size:13.23942089px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       xml:space="preserve"><tspan
+         y="312.95807"
+         x="662.24274"
+         id="tspan5903"
+         sodipodi:role="line">1</tspan></text>
+    <text
+       transform="scale(0.902157,1.108454)"
+       id="text5905"
+       y="312.87729"
+       x="682.92804"
+       style="font-size:13.23942089px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+       xml:space="preserve"><tspan
+         y="312.87729"
+         x="682.92804"
+         id="tspan5907"
+         sodipodi:role="line">3</tspan></text>
+    <path
+       id="path5909"
+       d="M 605.35606,346.58166 L 615.29346,336.53376"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.20514083px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+  </g>
+  <g
+     id="g5948"
+     transform="matrix(0.6801604,0,0,0.6801604,14.362893,11.373789)">
+    <g
+       transform="matrix(0.83334,0,0,1,120.4233,-6.810365)"
+       id="g5932">
+      <path
+         d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path5922" />
+      <path
+         d="M 683.05261,356.83776 L 683.05261,326.03045"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path5924" />
+    </g>
+    <path
+       transform="translate(0.645704,6.4635e-2)"
+       d="M 684.625 362.17465 A 2.0625 2.0625 0 1 1  680.5,362.17465 A 2.0625 2.0625 0 1 1  684.625 362.17465 z"
+       sodipodi:ry="2.0625"
+       sodipodi:rx="2.0625"
+       sodipodi:cy="362.17465"
+       sodipodi:cx="682.5625"
+       id="path5936"
+       style="color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.44400001;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible"
+       sodipodi:type="arc" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:25.10733032px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="381.26865"
+     y="222.82732"
+     id="text5954"
+     transform="scale(1.1044258,0.9054479)"
+     sodipodi:linespacing="125%"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tapping.png"
+     inkscape:export-xdpi="68.070755"
+     inkscape:export-ydpi="68.070755"><tspan
+       sodipodi:role="line"
+       id="tspan5956"
+       x="381.26865"
+       y="222.82732"
+       style="font-size:25.10733032px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Times New Roman">T</tspan></text>
+  <g
+     id="g6849"
+     transform="matrix(0.8038258,0,0,0.8952428,-69.897219,-50.865781)">
+    <path
+       sodipodi:nodetypes="ccc"
+       id="path5958"
+       d="M 667.00003,271.36215 L 683.00003,284.86215 L 698.00003,271.36215"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       sodipodi:linespacing="125%"
+       transform="scale(1.077771,0.927841)"
+       id="text6845"
+       y="293.27463"
+       x="627.5741"
+       style="font-size:17.07377625px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+       xml:space="preserve"><tspan
+         y="293.27463"
+         x="627.5741"
+         id="tspan6847"
+         sodipodi:role="line">X</tspan></text>
+  </g>
+  <g
+     id="g6860"
+     transform="matrix(0.6037383,0,0,0.7722113,67.160612,-5.8028708)">
+    <rect
+       transform="matrix(0.880153,-0.474689,0,1,0,0)"
+       y="507.96887"
+       x="671.18982"
+       height="5.25"
+       width="25.279688"
+       id="rect6854"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       transform="matrix(0.880153,-0.474689,0,1,0,0)"
+       y="515.96887"
+       x="671.18945"
+       height="5.25"
+       width="25.279675"
+       id="rect6856"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+    <rect
+       transform="matrix(0.880153,-0.474689,0,1,0,0)"
+       y="523.96887"
+       x="671.18945"
+       height="5.25"
+       width="25.279675"
+       id="rect6858"
+       style="opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;marker-mid:none;marker-end:none;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;visibility:visible;display:inline;overflow:visible" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:11.30146599px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="474.99112"
+     y="149.22421"
+     id="text6865"
+     sodipodi:linespacing="125%"
+     transform="matrix(0.9705969,0,3.6240004e-2,1.0302939,0,0)"><tspan
+       sodipodi:role="line"
+       id="tspan6867"
+       x="474.99112"
+       y="149.22421"
+       style="font-size:30.13724899px;font-style:italic;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Vivaldi">tr</tspan></text>
+  <path
+     style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+     d="M 420.63339,383.75166 C 420.63339,383.75166 424.59354,378.42988 426.5798,381.2851 C 428.26303,383.70473 428.68875,384.93246 429.82503,384.60352 C 430.94218,384.28011 431.68368,380.43446 435.13907,380.4622 C 437.71367,380.48325 437.22328,385.14061 441.44017,386.0373 C 439.94633,387.20777 437.34675,387.30255 435.95868,386.55808 C 434.64426,385.85311 434.07716,383.19366 432.613,383.8719 C 431.18508,384.53335 430.9326,386.9609 428.0493,386.90959 C 425.21447,386.85828 425.33498,385.27 [...]
+     id="path6878"
+     sodipodi:nodetypes="cszscszzzc" />
+  <g
+     id="g16418"
+     transform="matrix(0.6801604,0,0,0.6801604,14.362893,11.373789)">
+    <g
+       style="stroke:#000000;stroke-width:1.60443127;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       transform="matrix(1.052881,0,0,1.752712,-2.969829,-445.0024)"
+       id="g8293">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.60443127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 380.60127,591.32856 L 394.60485,591.32856 L 394.60485,591.32856"
+         id="path7402" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.60443127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 387.60306,591.68211 L 387.60306,618.11023"
+         id="path7404" />
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.60443127;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 380.58984,618.11023 L 394.61628,618.11023"
+         id="path7406" />
+    </g>
+    <g
+       transform="matrix(0.83334,0,0,1.26493,-176.5805,177.5719)"
+       id="g11878">
+      <path
+         d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path11880" />
+      <path
+         d="M 683.05261,356.83776 L 683.05261,326.03045"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path11882" />
+    </g>
+    <g
+       transform="translate(2.386486,-12.72792)"
+       id="g11890">
+      <path
+         style="fill:url(#radialGradient16399);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 407.38189,616.60763 L 391.73716,638.26278 L 416.75106,629.33555 L 407.38189,616.60763 z "
+         id="path8312"
+         sodipodi:nodetypes="cccc" />
+      <path
+         style="fill:url(#linearGradient16401);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 407.47028,616.25408 L 423.64535,601.58161 L 423.64535,622.52965 L 417.10461,629.15877 L 407.47028,616.25408 z "
+         id="path8314"
+         sodipodi:nodetypes="ccccc" />
+    </g>
+  </g>
+  <g
+     id="g21770"
+     transform="matrix(0.6801604,0,0,0.6801604,14.362893,11.373789)">
+    <text
+       sodipodi:linespacing="125%"
+       transform="matrix(0,-1.06756,0.936716,0,0,0)"
+       id="text21766"
+       y="508.78696"
+       x="-580.42908"
+       style="font-size:44.71162415px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial"
+       xml:space="preserve"><tspan
+         y="508.78696"
+         x="-580.42908"
+         id="tspan21768"
+         sodipodi:role="line">)</tspan></text>
+    <g
+       transform="translate(2.828427,-2.65165)"
+       id="g21749">
+      <g
+         id="g16378"
+         transform="matrix(0.83334,0,0,1.26493,-81.035,178.0078)">
+        <path
+           id="path16380"
+           style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+           d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z " />
+        <path
+           id="path16382"
+           style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+           d="M 683.05261,356.83776 L 683.05261,326.03045" />
+      </g>
+      <g
+         id="g15477"
+         transform="matrix(0.289054,1.22178,-1.331968,1.944028e-2,1154.889,24.19248)"
+         style="stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+        <path
+           id="path12800"
+           d="M 465.23106,595.7336 L 469.25,601.1875 L 469.09375,605.9375 L 465.65625,609.15625 L 460.65058,608.73406 L 455.28461,602.10158 C 455.28461,607.26321 459.09018,613.67006 463.85601,614.20682 L 469.22834,614.81189 L 479.5625,626.8125 L 483.71875,623.0625 L 474.22873,610.90263 L 473.66914,604.8712 C 473.19295,599.73852 470.29389,597.28414 465.23106,595.7336 z "
+           style="fill:#999999;stroke:#000000;stroke-width:0.60881829;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+           sodipodi:nodetypes="ccccccsccccsc" />
+        <path
+           transform="matrix(0.742775,-0.669541,0.636786,0.77104,0,0)"
+           style="fill:url(#linearGradient21760);fill-opacity:1;stroke-width:1.00046873"
+           d="M -30.319248,775.35716 C -29.236086,771.94908 -25.270866,771.78557 -23.146393,774.91204 L -22.971837,801.60352 L -30.244144,801.60352 L -30.319248,775.35716 z "
+           id="rect14581"
+           sodipodi:nodetypes="ccccc" />
+      </g>
+      <path
+         sodipodi:type="arc"
+         style="fill:#cccccc;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         id="path16432"
+         sodipodi:cx="449.8125"
+         sodipodi:cy="637.17468"
+         sodipodi:rx="4.3707523"
+         sodipodi:ry="4.0625"
+         d="M 454.18325 637.17468 A 4.3707523 4.0625 0 1 1  445.44175,637.17468 A 4.3707523 4.0625 0 1 1  454.18325 637.17468 z"
+         transform="matrix(0.819316,0.899502,-0.550332,0.501274,431.3845,-87.32081)" />
+      <path
+         style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:0.2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 484.50072,592.19035 L 477.27498,598.81948 L 478.13677,604.94037 L 479.88494,606.41213 L 478.88807,599.72546 L 484.41233,593.98021 L 484.50072,592.19035 z "
+         id="path16435"
+         sodipodi:nodetypes="ccccccc" />
+      <path
+         style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.30000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 491.96404,614.17206 C 487.52149,616.98813 481.99224,615.61946 480.03711,615.85633 C 478.33,616.06315 476.50158,617.62409 476.50158,617.62409 L 476.3248,615.10502 L 478.79969,613.73501 C 478.79969,613.73501 480.86422,613.06577 485.56139,613.46984 C 489.14203,613.77787 492.60171,611.64036 493.64891,609.31558 L 495.85862,604.41003 C 495.35966,607.74069 493.83974,612.98308 491.96404,614.17206 z "
+         id="path17322"
+         sodipodi:nodetypes="cscccsscs" />
+    </g>
+    <text
+       inkscape:transform-center-x="11"
+       inkscape:transform-center-y="-10.103847"
+       transform="matrix(0.717341,-0.596996,0.540854,0.94392,0,0)"
+       sodipodi:linespacing="100%"
+       id="text21762"
+       y="709.63062"
+       x="105.70007"
+       style="font-size:14.4750843px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:100%;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;opacity:1;color:#000000;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;marker:none;marker-start:none;mark [...]
+       xml:space="preserve"><tspan
+         style="font-size:14.47510719px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:100%;writing-mode:lr-tb;text-anchor:start;font-family:Century Schoolbook"
+         y="709.63062"
+         x="105.70007"
+         id="tspan21764"
+         sodipodi:role="line">pp</tspan></text>
+  </g>
+  <g
+     id="g3407"
+     transform="matrix(9.7000401e-2,8.1066758e-3,-1.1753914e-2,0.1240388,219.94383,532.76077)">
+    <g
+       id="g3296"
+       transform="matrix(3.608871,12.53273,-16.62977,0.199414,8930.251,-5616.342)"
+       style="stroke:#000000;stroke-width:1.00000024;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1">
+      <path
+         id="path3298"
+         d="M 465.23106,595.7336 L 469.25,601.1875 L 469.09375,605.9375 L 465.65625,609.15625 L 460.65058,608.73406 L 455.28461,602.10158 C 455.28461,607.26321 459.09018,613.67006 463.85601,614.20682 L 469.22834,614.81189 L 479.5625,626.8125 L 483.71875,623.0625 L 474.22873,610.90263 L 473.66914,604.8712 C 473.19295,599.73852 470.29389,597.28414 465.23106,595.7336 z "
+         style="fill:#999999;stroke:#000000;stroke-width:0.60881829;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         sodipodi:nodetypes="ccccccsccccsc" />
+      <path
+         transform="matrix(0.742775,-0.669541,0.636786,0.77104,0,0)"
+         style="fill:url(#linearGradient3382);fill-opacity:1;stroke-width:1.00046873"
+         d="M -30.319248,775.35716 C -29.236086,771.94908 -25.270866,771.78557 -23.146393,774.91204 L -22.971837,801.60352 L -30.244144,801.60352 L -30.319248,775.35716 z "
+         id="path3300"
+         sodipodi:nodetypes="ccccc" />
+    </g>
+    <path
+       sodipodi:type="arc"
+       style="fill:#cccccc;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path3302"
+       sodipodi:cx="449.8125"
+       sodipodi:cy="637.17468"
+       sodipodi:rx="4.3707523"
+       sodipodi:ry="4.0625"
+       d="M 454.18325 637.17468 A 4.3707523 4.0625 0 1 1  445.44175,637.17468 A 4.3707523 4.0625 0 1 1  454.18325 637.17468 z"
+       transform="matrix(10.22925,9.226876,-6.870956,5.141948,-102.7821,-6760.219)" />
+    <path
+       style="fill:#e6e6e6;fill-rule:evenodd;stroke:#000000;stroke-width:2.26335382;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 560.37978,210.04348 L 470.16563,278.04351 L 480.92517,340.83013 L 502.75126,355.92709 L 490.30523,287.33683 L 559.27623,228.40344 L 560.37978,210.04348 z "
+       id="path3304"
+       sodipodi:nodetypes="ccccccc" />
+    <path
+       style="fill:#e6e6e6;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:3.39503074;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="M 653.56016,435.52659 C 598.09443,464.41316 529.06114,450.37367 504.65112,452.80343 C 483.33767,454.92494 460.50964,470.93669 460.50964,470.93669 L 458.30252,445.09667 L 489.2018,431.04344 C 489.2018,431.04344 514.97768,424.17853 573.62237,428.32339 C 618.32705,431.48308 661.52154,409.55702 674.59594,385.70998 L 702.18442,335.39003 C 695.95484,369.55514 676.97848,423.33032 653.56016,435.52659 z "
+       id="path3306"
+       sodipodi:nodetypes="cscccsscs" />
+  </g>
+  <g
+     id="g21483"
+     transform="matrix(0.6801604,0,0,0.6801604,19.124016,12.734109)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/option_skin.png"
+     inkscape:export-xdpi="54.250492"
+     inkscape:export-ydpi="54.250492">
+    <a
+       style="fill:url(#linearGradient21491);fill-opacity:1"
+       transform="matrix(1.0935538,0,0,0.9875559,-81.605798,-98.323313)"
+       id="a3635">
+      <path
+         style="fill:url(#linearGradient21493);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.40568686;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+         d="M 573.46809,989.25496 C 561.43446,918.49524 637.03499,915.96748 645.83589,919.79716 C 674.43146,931.00974 654.3464,985.51774 650.05535,987.75336 C 644.89956,990.4395 620.42002,988.48086 620.50756,989.43376 C 620.52581,989.44042 615.71426,1009.4048 598.77641,1009.9117 C 590.46857,1010.1603 574.46337,997.70295 573.46809,989.25496 z "
+         id="path3633"
+         sodipodi:nodetypes="ccscsc" />
+    </a>
+    <path
+       transform="matrix(0.2599889,1.1741624e-2,-1.2264639e-2,0.2489019,425.79798,629.67088)"
+       d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="-0.66417817"
+       sodipodi:arg1="-1.2924967"
+       sodipodi:r2="7.7217226"
+       sodipodi:r1="3.8608613"
+       sodipodi:cy="839.52301"
+       sodipodi:cx="566.39252"
+       sodipodi:sides="5"
+       id="path3644"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:#d22d2d;stroke-width:35.29999924;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="star" />
+    <path
+       transform="matrix(0.2599889,1.1741624e-2,-1.2264639e-2,0.2489019,443.91514,614.48309)"
+       d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="-0.66417817"
+       sodipodi:arg1="-1.2924967"
+       sodipodi:r2="7.7217226"
+       sodipodi:r1="3.8608613"
+       sodipodi:cy="839.52301"
+       sodipodi:cx="566.39252"
+       sodipodi:sides="5"
+       id="path3646"
+       style="fill:#00ff00;fill-opacity:1;fill-rule:nonzero;stroke:#00a100;stroke-width:35.29906464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="star" />
+    <path
+       transform="matrix(0.272574,1.2309989e-2,-1.2858322e-2,0.2609503,464.35714,598.38051)"
+       d="M 567.45318,835.8107 L 572.47278,834.76325 L 570.2509,839.38459 L 572.79823,843.83484 L 567.71647,843.14977 L 564.2712,846.94763 L 563.35238,841.90289 L 558.67576,839.79985 L 563.18966,837.3671 L 563.74462,832.26948 L 567.45318,835.8107 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="-0.66417817"
+       sodipodi:arg1="-1.2924967"
+       sodipodi:r2="7.7217226"
+       sodipodi:r1="3.8608613"
+       sodipodi:cy="839.52301"
+       sodipodi:cx="566.39252"
+       sodipodi:sides="5"
+       id="path3648"
+       style="fill:#0000ff;fill-opacity:1;fill-rule:nonzero;stroke:#4b4bff;stroke-width:35.29906464;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       sodipodi:type="star" />
+    <path
+       transform="matrix(0.1668918,0.1065936,-0.1502726,0.1897914,624.05104,651.11923)"
+       d="M 559.81399 897.85938 A 44.686672 47.620178 0 1 1  470.44065,897.85938 A 44.686672 47.620178 0 1 1  559.81399 897.85938 z"
+       sodipodi:ry="47.620178"
+       sodipodi:rx="44.686672"
+       sodipodi:cy="897.85938"
+       sodipodi:cx="515.12732"
+       id="path4681"
+       style="fill:#ffffff;fill-opacity:0.96703342;fill-rule:nonzero;stroke:#090303;stroke-width:8.73597431;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.98360656"
+       sodipodi:type="arc" />
+  </g>
+  <g
+     style="display:inline"
+     id="g17053"
+     transform="matrix(0.2445295,0,0,0.2430948,131.58122,35.384719)">
+    <rect
+       ry="29.257792"
+       rx="29.086124"
+       y="423.20496"
+       x="355.73645"
+       height="99.78186"
+       width="99.78186"
+       id="rect17055"
+       style="fill:url(#radialGradient17059);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.09139299;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline" />
+    <path
+       transform="matrix(0.452101,0,0,0.484373,563.5737,407.7282)"
+       d="M -418.05177,221.55162 L -418.05177,134.95318 L -418.05177,48.354749 L -343.05532,91.653969 L -268.05888,134.95319 L -343.05532,178.25241 L -418.05177,221.55162 z "
+       inkscape:randomized="0"
+       inkscape:rounded="0"
+       inkscape:flatsided="false"
+       sodipodi:arg2="3.1415927"
+       sodipodi:arg1="2.0943951"
+       sodipodi:r2="49.997631"
+       sodipodi:r1="99.995262"
+       sodipodi:cy="134.95319"
+       sodipodi:cx="-368.05414"
+       sodipodi:sides="3"
+       id="path17057"
+       style="fill:#008033;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:3.62562513;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       sodipodi:type="star" />
+  </g>
+  <g
+     id="g21908"
+     transform="matrix(0.6801604,0,0,0.6801604,124.49954,136.41977)">
+    <rect
+       width="35.760925"
+       height="35.760925"
+       rx="7.9460096"
+       ry="7.9460096"
+       x="-227.18408"
+       y="-113.8597"
+       transform="scale(-1,1)"
+       style="fill:url(#radialGradient21912);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74953651;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect19956" />
+    <rect
+       width="26.976021"
+       height="30.992802"
+       rx="22.477581"
+       ry="7.9460096"
+       x="195.81561"
+       y="-111.36695"
+       style="fill:#f95557;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1.02269864;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       id="rect19958" />
+  </g>
+  <g
+     id="g22907"
+     transform="matrix(0.6801604,0,0,0.6801604,5.2249174,134.01503)">
+    <rect
+       id="rect21916"
+       style="fill:url(#radialGradient22911);fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.74953711;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       y="-111.7384"
+       x="151.82515"
+       ry="7.9460163"
+       rx="7.9460163"
+       height="35.760952"
+       width="35.760952" />
+    <path
+       id="path21918"
+       style="fill:#008033;fill-opacity:0.75;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.60806185;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+       d="M 158.57577,-78.824867 L 158.57577,-93.857923 L 158.57577,-108.89098 L 170.72736,-101.37445 L 182.87895,-93.857921 L 170.72736,-86.341393 L 158.57577,-78.824867 z " />
+  </g>
+  <path
+     style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 479.04781,429.57872 L 460.51344,429.57872"
+     id="path5612"
+     inkscape:connector-type="polyline" />
+  <path
+     style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 430.55339,429.57872 L 449.08776,429.57872"
+     id="path5617"
+     inkscape:connector-type="polyline" />
+  <path
+     style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 431.13119,474.2316 L 431.13119,492.76597"
+     id="path5619"
+     inkscape:connector-type="polyline" />
+  <path
+     style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:#000000;stroke-width:6.46152401;stroke-linecap:butt;stroke-linejoin:miter;marker-start:url(#TriangleInM);stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+     d="M 479.25254,475.38719 L 479.25254,456.85282"
+     id="path5621"
+     inkscape:connector-type="polyline" />
+  <g
+     id="g5456"
+     transform="matrix(0.6801604,0,0,0.6801604,13.881947,11.494019)">
+    <path
+       inkscape:connector-type="polyline"
+       id="path3479"
+       d="M 660.56485,524.48896 L 711.90839,524.46219"
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.57923365px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline" />
+    <g
+       id="g5451">
+      <path
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:4.78366613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+         d="M 658.18058,522.19705 L 658.18058,550.37123"
+         id="path3481"
+         inkscape:connector-type="polyline" />
+      <text
+         xml:space="preserve"
+         style="font-size:21.18201256px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bitstream Vera Sans"
+         x="664.1015"
+         y="546.73944"
+         id="text3483"><tspan
+           sodipodi:role="line"
+           id="tspan3485"
+           x="664.1015"
+           y="546.73944">*</tspan></text>
+    </g>
+  </g>
+  <rect
+     id="rect3499"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.54178809999999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="408.77814"
+     x="505"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus/edit_voice_1.png"
+     inkscape:export-xdpi="51.581074"
+     inkscape:export-ydpi="51.581074" />
+  <rect
+     id="rect3501"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.54178809999999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="454.15314"
+     x="505"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/ersplus/edit_voice_2.png"
+     inkscape:export-xdpi="51.581074"
+     inkscape:export-ydpi="51.581074" />
+  <rect
+     id="rect3503"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="316.66254"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_dead.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3505"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="361.5531"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/repeat_alternative.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3507"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="222.80037"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_staccato.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3509"
+     style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="269.05127"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_slapping.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3511"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="123.49697"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_trill.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <rect
+     id="rect3513"
+     style="opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#929292;stroke-width:0.5417881;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+     y="173.82884"
+     x="506.29428"
+     ry="0"
+     rx="0"
+     height="41.334045"
+     width="41.334045"
+     inkscape:export-filename="/home/julian/temp/TuxGuitar/share/files/effect_tremolo_bar.png"
+     inkscape:export-xdpi="35.083408"
+     inkscape:export-ydpi="35.083408" />
+  <g
+     id="g4645"
+     transform="matrix(2.1169218e-2,0,0,-2.1169218e-2,520.23635,150.36733)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_treble.png"
+     inkscape:export-xdpi="112.41393"
+     inkscape:export-ydpi="112.41393">
+    <path
+       id="path4647"
+       d="M 297,1245 C 303,1248 304,1248 310,1248 C 318,1247 323,1244 334,1232 C 406,1158 466,1026 481,914 C 483,896 483,854 481,835 C 470,732 427,638 328,503 L 314,484 L 322,461 C 341,406 363,339 377,290 C 381,278 384,268 384,267 C 384,267 391,267 398,266 C 433,263 463,255 494,240 C 519,227 541,212 562,192 C 585,169 600,148 614,119 C 635,77 644,33 643,-11 C 642,-39 638,-60 629,-86 C 617,-124 595,-159 565,-189 C 539,-215 515,-231 483,-244 L 471,-249 L 471,-285 C 471,-336 468,-396 464,-43 [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g4687"
+     transform="matrix(2.5582031e-2,0,0,-2.5582031e-2,518.81737,190.80995)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_bass.png"
+     inkscape:export-xdpi="88.486824"
+     inkscape:export-ydpi="88.486824">
+    <path
+       id="path4689"
+       d="M 207,266 C 218,267 261,266 277,265 C 402,251 487,189 515,91 C 522,64 525,44 524,10 C 524,-33 519,-69 505,-107 C 454,-258 305,-383 33,-503 C 22,-508 12,-513 11,-514 C 5,-518 -1,-519 -7,-516 C -12,-514 -14,-512 -16,-507 C -19,-502 -18,-497 -16,-493 C -14,-489 -10,-486 12,-473 C 101,-420 166,-373 221,-325 C 238,-309 270,-277 284,-261 C 345,-190 377,-121 388,-41 C 390,-22 390,23 388,42 C 384,71 377,98 368,122 C 361,138 359,143 351,156 C 322,205 278,232 229,232 C 181,232 141,205 11 [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g4729"
+     transform="matrix(2.3963563e-2,0,0,-2.3963563e-2,518.94351,243.2844)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/clef_alto.png"
+     inkscape:export-xdpi="92.514755"
+     inkscape:export-ydpi="92.514755">
+    <path
+       id="path4731"
+       d="M 9,498 C 12,500 18,500 72,500 L 132,500 L 135,497 C 137,495 139,493 140,491 C 142,487 142,450 142,0 C 142,-450 142,-487 140,-491 C 139,-493 137,-495 135,-497 L 132,-499 L 71,-499 L 10,-499 L 7,-497 C 5,-495 3,-493 2,-491 C 0,-487 0,-450 0,1 L 1,490 L 3,493 C 5,495 7,497 9,498 z M 201,498 C 204,500 207,500 218,500 C 231,500 232,499 235,497 C 243,491 242,514 242,254 L 242,21 L 248,26 C 273,50 296,87 309,120 C 317,144 322,171 324,200 C 324,213 325,215 327,218 C 329,221 336,225 34 [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g3548"
+     transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,524.00563,345.37089)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_flat.png"
+     inkscape:export-xdpi="40.069347"
+     inkscape:export-ydpi="40.069347">
+    <path
+       id="path3550"
+       d="M -12,469 C -1,471 17,469 24,464 C 26,463 26,452 23,289 C 21,194 20,116 20,116 C 20,115 24,117 28,120 C 49,134 75,142 101,144 C 128,145 150,137 169,118 C 188,100 198,76 200,50 C 201,31 197,14 188,-4 C 174,-31 154,-50 94,-91 C 56,-117 46,-125 34,-139 C 28,-145 21,-152 19,-153 C 10,-159 0,-158 -8,-151 C -10,-148 -12,-145 -13,-142 C -14,-140 -16,-33 -19,136 C -22,287 -24,422 -25,437 L -25,463 L -21,465 C -19,466 -15,468 -12,469 z M 94,102 C 87,106 76,107 67,104 C 49,99 34,83 28,62 [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g3590"
+     transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,523.10578,382.55733)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_natural.png"
+     inkscape:export-xdpi="40.012753"
+     inkscape:export-ydpi="40.012753">
+    <path
+       id="path3592"
+       d="M 7,380 C 15,382 33,380 40,375 C 41,374 41,359 40,288 C 39,240 39,201 39,201 C 39,200 64,204 95,209 C 127,215 152,218 153,218 C 158,217 162,213 165,208 L 167,204 L 170,-85 C 173,-317 174,-374 173,-374 C 172,-375 169,-376 166,-377 C 158,-380 142,-380 134,-377 C 131,-376 128,-375 127,-374 C 126,-373 126,-358 127,-287 C 128,-239 128,-200 128,-200 C 128,-199 103,-203 72,-208 C 40,-214 15,-217 14,-217 C 9,-216 5,-212 2,-207 L 0,-202 L -3,49 C -5,187 -6,317 -7,338 L -7,375 L -2,377 C [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g3632"
+     transform="matrix(4.9880005e-2,0,0,-4.9880005e-2,520.02757,289.61034)"
+     inkscape:export-filename="/home/julian/usr/workspace/TuxGuitar/share/skins/default/key_sharp.png"
+     inkscape:export-xdpi="32.806053"
+     inkscape:export-ydpi="32.806053">
+    <path
+       id="path3634"
+       d="M 191,373 C 198,377 209,374 213,365 C 215,361 215,358 215,288 C 215,247 215,214 216,214 C 216,214 225,218 236,222 C 259,231 262,232 268,227 C 275,222 275,221 275,181 C 275,147 275,144 273,141 C 272,139 270,137 269,136 C 267,135 255,129 241,124 L 216,113 L 215,32 C 215,-12 215,-49 216,-49 C 216,-49 225,-45 236,-41 C 259,-32 262,-31 268,-36 C 275,-41 275,-42 275,-82 C 275,-116 275,-119 273,-122 C 272,-124 270,-126 269,-127 C 267,-128 255,-134 241,-139 L 216,-150 L 215,-234 C 215, [...]
+       style="fill:currentColor" />
+  </g>
+  <g
+     id="g4514"
+     transform="translate(0.7071068,2.4748737)">
+    <g
+       transform="matrix(0.5668049,0,0,0.8603553,-3.5065048,130.39104)"
+       id="g3515">
+      <path
+         d="M 682.97838,357.60834 C 682.97838,361.07849 679.55702,363.89161 675.33657,363.89161 C 671.11611,363.89161 667.69476,361.07849 667.69476,357.60834 C 667.69476,354.1382 671.11611,351.32508 675.33657,351.32508 C 679.55702,351.32508 682.97838,354.1382 682.97838,357.60834 z "
+         style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.71708798;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:16;stroke-opacity:1"
+         id="path3517" />
+      <path
+         d="M 683.05261,356.83776 L 683.05261,326.03045"
+         style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:2.21898484;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;display:inline"
+         id="path3519" />
+    </g>
+    <path
+       sodipodi:nodetypes="ccccccc"
+       id="path3541"
+       d="M 387.957,426.78352 L 398.26464,437.35718 L 398.26464,433.5566 L 391.48325,426.78352 L 398.26464,420.07412 L 398.26464,416.27354 L 387.957,426.78352 z "
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black" />
+    <path
+       sodipodi:nodetypes="ccccccc"
+       id="path3543"
+       d="M 378.09836,426.89402 L 367.79072,416.32036 L 367.79072,420.12094 L 374.57211,426.89402 L 367.79072,433.60342 L 367.79072,437.404 L 378.09836,426.89402 z "
+       style="font-size:61.60151672px;font-style:normal;font-weight:normal;line-height:125%;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:22px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="675.8205"
+     y="338.63779"
+     id="text3736"
+     transform="scale(0.7694351,1.2996548)"
+     inkscape:label="#text3736"><tspan
+       sodipodi:role="line"
+       id="tspan3738"
+       x="675.8205"
+       y="338.63779">1</tspan></text>
+  <text
+     xml:space="preserve"
+     style="font-size:22px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Arial Black"
+     x="675.8205"
+     y="373.55087"
+     id="text3740"
+     transform="scale(0.7694351,1.2996548)"><tspan
+       sodipodi:role="line"
+       id="tspan3742"
+       x="675.8205"
+       y="373.55087">2</tspan></text>
+</svg>
diff --git a/TuxGuitar/share/templates/template-1.tg b/TuxGuitar/share/templates/template-1.tg
new file mode 100644
index 0000000..459a276
Binary files /dev/null and b/TuxGuitar/share/templates/template-1.tg differ
diff --git a/TuxGuitar/share/templates/template-2.tg b/TuxGuitar/share/templates/template-2.tg
new file mode 100644
index 0000000..f4bd064
Binary files /dev/null and b/TuxGuitar/share/templates/template-2.tg differ
diff --git a/TuxGuitar/share/templates/template-default.tg b/TuxGuitar/share/templates/template-default.tg
new file mode 100644
index 0000000..0f5f019
Binary files /dev/null and b/TuxGuitar/share/templates/template-default.tg differ
diff --git a/TuxGuitar/share/templates/templates.xml b/TuxGuitar/share/templates/templates.xml
new file mode 100644
index 0000000..f0ece2f
--- /dev/null
+++ b/TuxGuitar/share/templates/templates.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<templates>
+	<template resource="template-1.tg" name="Blues Trio"/>
+	<template resource="template-2.tg" name="Classical Guitar Duo"/>
+</templates>
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/TGMain.java b/TuxGuitar/src/org/herac/tuxguitar/app/TGMain.java
new file mode 100644
index 0000000..ee12dbe
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/TGMain.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.app;
+
+public class TGMain {
+	
+	public static void main(String[] args){
+		TuxGuitar.instance().displayGUI(args);
+		System.exit(0);
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/TuxGuitar.java b/TuxGuitar/src/org/herac/tuxguitar/app/TuxGuitar.java
new file mode 100644
index 0000000..c352635
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/TuxGuitar.java
@@ -0,0 +1,851 @@
+/*
+ * Created on 25-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app;
+
+import java.net.URL;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseTrackAdapter;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Sash;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.action.TGActionAdapterManager;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.file.FileActionUtils;
+import org.herac.tuxguitar.app.action.impl.file.NewFileAction;
+import org.herac.tuxguitar.app.action.impl.system.DisposeAction;
+import org.herac.tuxguitar.app.editors.EditorCache;
+import org.herac.tuxguitar.app.editors.FretBoardEditor;
+import org.herac.tuxguitar.app.editors.PianoEditor;
+import org.herac.tuxguitar.app.editors.TGEditorManager;
+import org.herac.tuxguitar.app.editors.TGRedrawListener;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.editors.channel.TGChannelManagerDialog;
+import org.herac.tuxguitar.app.editors.chord.CustomChordManager;
+import org.herac.tuxguitar.app.editors.lyric.LyricEditor;
+import org.herac.tuxguitar.app.editors.matrix.MatrixEditor;
+import org.herac.tuxguitar.app.helper.FileHistory;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.items.ItemManager;
+import org.herac.tuxguitar.app.marker.MarkerList;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.system.config.TGConfigManager;
+import org.herac.tuxguitar.app.system.error.TGErrorAdapter;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.icons.IconManager;
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingActionManager;
+import org.herac.tuxguitar.app.system.language.LanguageManager;
+import org.herac.tuxguitar.app.system.properties.TGPropertiesAdapter;
+import org.herac.tuxguitar.app.table.TGTableViewer;
+import org.herac.tuxguitar.app.tools.browser.dialog.TGBrowserDialog;
+import org.herac.tuxguitar.app.tools.scale.ScaleManager;
+import org.herac.tuxguitar.app.tools.template.TGTemplate;
+import org.herac.tuxguitar.app.tools.template.TGTemplateManager;
+import org.herac.tuxguitar.app.transport.TGTransport;
+import org.herac.tuxguitar.app.transport.TGTransportListener;
+import org.herac.tuxguitar.app.undo.UndoableManager;
+import org.herac.tuxguitar.app.util.ArgumentParser;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.app.util.TGSplash;
+import org.herac.tuxguitar.app.util.WindowTitleUtil;
+import org.herac.tuxguitar.graphics.control.TGFactoryImpl;
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.player.impl.sequencer.MidiSequencerProviderImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGLock;
+import org.herac.tuxguitar.util.TGSynchronizer;
+import org.herac.tuxguitar.util.plugin.TGPluginManager;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TuxGuitar {
+	
+	public static final String APPLICATION_NAME = "TuxGuitar";
+	
+	public static final int MARGIN_WIDTH = 5;
+	
+	private static TuxGuitar instance;
+	
+	private boolean initialized;
+	
+	private TGLock lock;
+	
+	private Display display;
+	
+	private Shell shell;
+	
+	private TGSongManager songManager;
+	
+	private TGConfigManager configManager;
+	
+	private LanguageManager languageManager;
+	
+	private KeyBindingActionManager keyBindingManager;
+	
+	private IconManager iconManager;
+	
+	private EditorCache editorCache;
+	
+	private TablatureEditor tablatureEditor;
+	
+	private TGTableViewer table;
+	
+	private TGChannelManagerDialog channelManager;
+	
+	private TGTransport songTransport;
+	
+	private FretBoardEditor fretBoardEditor;
+	
+	private PianoEditor pianoEditor;
+	
+	private MatrixEditor matrixEditor;
+	
+	private LyricEditor lyricEditor;
+	
+	private TGEditorManager editorManager;
+	
+	private TGBrowserDialog browser;
+	
+	private UndoableManager undoableManager;
+	
+	private ScaleManager scaleManager;
+	
+	private TGActionAdapterManager actionAdapterManager;
+	
+	private ItemManager itemManager;
+	
+	private CustomChordManager customChordManager;
+	
+	private FileHistory fileHistory;
+	
+	private TGTemplateManager templateManager;
+	
+	protected Sash sash;
+	
+	protected Composite sashComposite;
+	
+	public TuxGuitar() {
+		this.lock = new TGLock();
+		this.initialized = false;
+	}
+	
+	public static TuxGuitar instance() {
+		if (instance == null) {
+			synchronized (TuxGuitar.class) {
+				instance = new TuxGuitar();
+			}
+		}
+		return instance;
+	}
+	
+	private void initSynchronizer(){
+		TGSynchronizer.instance().setController(new TGSynchronizer.TGSynchronizerController() {
+			public void execute(final TGSynchronizer.TGSynchronizerTask task) {
+				final Display display = getDisplay();
+				if(display != null && !display.isDisposed()){
+					display.syncExec(new Runnable() {
+						public void run() throws TGException {
+							task.run();
+						}
+					});
+				}
+			}
+			
+			public void executeLater(final TGSynchronizer.TGSynchronizerTask task) {
+				final Display display = getDisplay();
+				if(display != null && !display.isDisposed()){
+					display.asyncExec(new Runnable() {
+						public void run() throws TGException {
+							task.run();
+						}
+					});
+				}
+			}
+		});
+	}
+	
+	public void displayGUI(String[] args) {
+		//checkeo los argumentos
+		ArgumentParser argumentParser = new ArgumentParser(args);
+		if(argumentParser.processAndExit()){
+			return;
+		}
+		
+		// Priority 1 ----------------------------------------------//
+		TGFileUtils.loadLibraries();
+		TGFileUtils.loadClasspath();
+		TGErrorAdapter.initialize();
+		TGPropertiesAdapter.initialize();
+		
+		// Priority 2 ----------------------------------------------//
+		Display.setAppName(APPLICATION_NAME);
+		
+		this.display = new Display();
+		this.initSynchronizer();
+		
+		TGSplash.instance().init();
+		
+		this.shell = new Shell(getDisplay());
+		this.shell.setLayout(getShellLayout());
+		this.shell.setImage(getIconManager().getAppIcon());
+		
+		this.createComposites(getShell());
+		
+		// Priority 3 ----------------------------------------------//
+		this.initMidiPlayer();
+		this.getActionAdapterManager().initialize();
+		this.getPluginManager().openPlugins();
+		this.restoreControlsConfig();
+		this.restorePlayerConfig();
+		this.updateCache(true);
+		this.showTitle();
+		
+		TGSplash.instance().finish();
+		
+		// Priority 4 ----------------------------------------------//
+		this.shell.addShellListener(new TGActionProcessor(DisposeAction.NAME));
+		this.shell.open();
+		this.startSong(argumentParser);
+		this.setInitialized( true );
+		while (!getDisplay().isDisposed() && !getShell().isDisposed()) {
+			if (!getDisplay().readAndDispatch()) {
+				getDisplay().sleep();
+			}
+		}
+		getDisplay().dispose();
+	}
+	
+	private FormLayout getShellLayout(){
+		FormLayout layout = new FormLayout();
+		layout.marginWidth = MARGIN_WIDTH;
+		layout.marginHeight = MARGIN_WIDTH;
+		return layout;
+	}
+	
+	private void startSong(final ArgumentParser parser){
+		final URL url = parser.getURL();
+		if(url != null){
+			TGActionLock.lock();
+			new SyncThread(new Runnable() {
+				public void run() throws TGException {
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+					new Thread(new Runnable() {
+						public void run() throws TGException {
+							if(!TuxGuitar.isDisposed()){
+								FileActionUtils.open(url);
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								TGActionLock.unlock();
+							}
+						}
+					}).start();
+				}
+			}).start();
+		}else{
+			TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					TGActionManager.getInstance().execute(NewFileAction.NAME);
+				}
+			});
+		}
+	}
+	
+	public void createComposites(Composite composite) {
+		FormData data = new FormData();
+		data.left = new FormAttachment(0,0);
+		data.right = new FormAttachment(100,0);
+		data.top = new FormAttachment(getItemManager().getCoolbar(),MARGIN_WIDTH);
+		data.bottom = new FormAttachment(100,0);
+		this.sashComposite = new Composite(composite,SWT.NONE);
+		this.sashComposite.setLayout(new FormLayout());
+		this.sashComposite.setLayoutData(data);
+		
+		data = new FormData();
+		data.left = new FormAttachment(0,0);
+		data.right = new FormAttachment(100,0);
+		data.bottom = new FormAttachment(100,-150);
+		data.height = MARGIN_WIDTH;
+		this.sash = new Sash(this.sashComposite, SWT.HORIZONTAL);
+		this.sash.setLayoutData(data);
+		
+		data = new FormData();
+		data.left = new FormAttachment(0,0);
+		data.right = new FormAttachment(100,0);
+		data.top = new FormAttachment(0,0);
+		data.bottom = new FormAttachment(this.sash, 0);
+		getTablatureEditor().showTablature(this.sashComposite);
+		getTablatureEditor().getTablature().setLayoutData(data);
+		
+		data = new FormData();
+		data.left = new FormAttachment(0,0);
+		data.right = new FormAttachment(100,0);
+		data.top = new FormAttachment(this.sash,0);
+		data.bottom = new FormAttachment(100,0);
+		getTable().init(this.sashComposite);
+		getTable().getComposite().setLayoutData(data);
+		
+		data = new FormData();
+		data.left = new FormAttachment(0,0);
+		data.right = new FormAttachment(100,0);
+		data.top = new FormAttachment(this.sashComposite,0);
+		data.bottom = new FormAttachment(100,0);
+		
+		Composite footer = new Composite(composite,SWT.NONE);
+		footer.setLayout(new FormLayout());
+		footer.setLayoutData(data);
+		getFretBoardEditor().showFretBoard(footer);
+		
+		this.sash.addMouseListener(new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				TuxGuitar.this.sashComposite.layout(true,true);
+			}
+		});
+		this.sash.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				int maximumHeight = (TuxGuitar.this.sashComposite.getBounds().height - TuxGuitar.this.sash.getBounds().height);
+				int height = (maximumHeight - event.y);
+				height = Math.max(height,0);
+				height = Math.min(height,maximumHeight);
+				((FormData) TuxGuitar.this.sash.getLayoutData()).bottom = new FormAttachment(100, -height);
+			}
+		});
+		this.sash.addMouseTrackListener(new MouseTrackAdapter() {
+			public void mouseEnter(MouseEvent e) {
+				TuxGuitar.this.sash.setCursor( getDisplay().getSystemCursor( SWT.CURSOR_SIZENS ) );
+			}
+		});
+		this.sashComposite.addListener(SWT.Resize, new Listener() {
+			public void handleEvent(Event arg0) {
+				FormData data = ((FormData) TuxGuitar.this.sash.getLayoutData());
+				int height = -data.bottom.offset;
+				int maximumHeight = (TuxGuitar.this.sashComposite.getBounds().height - TuxGuitar.this.sash.getBounds().height);
+				if(height > maximumHeight){
+					data.bottom = new FormAttachment(100, -maximumHeight);
+				}
+			}
+		});
+	}
+	
+	public void restoreControlsConfig(){
+		final TGConfigManager config = getConfig();
+		
+		//---Main Shell---
+		boolean maximized = config.getBooleanValue(TGConfigKeys.MAXIMIZED);
+		getShell().setMaximized(maximized);
+		if(!maximized){
+			int width = config.getIntegerValue(TGConfigKeys.WIDTH);
+			int height = config.getIntegerValue(TGConfigKeys.HEIGHT);
+			if(width > 0 && height > 0){
+				getShell().setSize(width,height);
+			}
+		}
+		getShell().setMinimumSize(640,480);
+		//---Fretboard---
+		if(config.getBooleanValue(TGConfigKeys.SHOW_FRETBOARD)){
+			getFretBoardEditor().showFretBoard();
+		}else{
+			getFretBoardEditor().hideFretBoard();
+		}
+		//---Instruments---
+		if(config.getBooleanValue(TGConfigKeys.SHOW_INSTRUMENTS)){
+			new SyncThread(new Runnable() {
+				public void run() throws TGException {
+					getChannelManager().show();
+				}
+			}).start();
+		}
+		//---Transport---
+		if(config.getBooleanValue(TGConfigKeys.SHOW_TRANSPORT)){
+			new SyncThread(new Runnable() {
+				public void run() throws TGException {
+					getTransport().show();
+				}
+			}).start();
+		}
+		//---Matrix---
+		if(config.getBooleanValue(TGConfigKeys.SHOW_MATRIX)){
+			new SyncThread(new Runnable() {
+				public void run() throws TGException {
+					getMatrixEditor().show();
+				}
+			}).start();
+		}
+		//---Piano---
+		if(config.getBooleanValue(TGConfigKeys.SHOW_PIANO)){
+			new SyncThread(new Runnable() {
+				public void run() throws TGException {
+					getPianoEditor().show();
+				}
+			}).start();
+		}
+		//---Markers---
+		if(config.getBooleanValue(TGConfigKeys.SHOW_MARKERS)){
+			new SyncThread(new Runnable() {
+				public void run() throws TGException {
+					MarkerList.instance().show();
+				}
+			}).start();
+		}
+	}
+	
+	public void setTableHeight(int value){
+		int offset = ((FormData) getTable().getComposite().getLayoutData()).top.offset;
+		int sashHeight = this.sash.getBounds().height;
+		int maximumHeight = (this.sashComposite.getBounds().height - sashHeight);
+		int height = (value + offset);
+		height = Math.max( height,0);
+		height = Math.min( height,maximumHeight);
+		((FormData) TuxGuitar.this.sash.getLayoutData()).bottom = new FormAttachment(100, -height);
+		this.sashComposite.layout(true,true);
+	}
+	
+	public void updateShellFooter(int offset,int minimumWith,int minimumHeight){
+		FormData data = ((FormData)this.sashComposite.getLayoutData());
+		data.bottom.offset = -offset;
+		getShell().setMinimumSize(Math.max(640,minimumWith),Math.max(480,minimumHeight));
+		getShell().layout(true,true);
+		getShell().redraw();
+	}
+	
+	public TGTableViewer getTable(){
+		if(this.table == null){
+			this.table = new TGTableViewer();
+		}
+		return this.table;
+	}
+	
+	public TablatureEditor getTablatureEditor(){
+		if(this.tablatureEditor == null){
+			this.tablatureEditor = new TablatureEditor();
+		}
+		return this.tablatureEditor;
+	}
+	
+	public FretBoardEditor getFretBoardEditor(){
+		if(this.fretBoardEditor == null){
+			this.fretBoardEditor = new FretBoardEditor();
+		}
+		return this.fretBoardEditor;
+	}
+	
+	public PianoEditor getPianoEditor(){
+		if(this.pianoEditor == null){
+			this.pianoEditor = new PianoEditor();
+		}
+		return this.pianoEditor;
+	}
+	
+	public MatrixEditor getMatrixEditor(){
+		if(this.matrixEditor == null){
+			this.matrixEditor = new MatrixEditor();
+		}
+		return this.matrixEditor;
+	}
+	
+	public TGSongManager getSongManager(){
+		if(this.songManager == null){
+			this.songManager = new TGSongManager(new TGFactoryImpl());
+			this.songManager.setSong(this.songManager.newSong());
+		}
+		return this.songManager;
+	}
+	
+	public TGChannelManagerDialog getChannelManager(){
+		if( this.channelManager == null ){
+			this.channelManager = new TGChannelManagerDialog();
+		}
+		return this.channelManager;
+	}
+	
+	public TGTransport getTransport(){
+		if(this.songTransport == null){
+			this.songTransport = new TGTransport();
+		}
+		return this.songTransport;
+	}
+	
+	public EditorCache getEditorCache(){
+		if(this.editorCache == null){
+			this.editorCache = new EditorCache();
+		}
+		return this.editorCache;
+	}
+	
+	public TGEditorManager getEditorManager(){
+		if(this.editorManager == null){
+			this.editorManager = new TGEditorManager();
+		}
+		return this.editorManager;
+	}
+	
+	public LyricEditor getLyricEditor(){
+		if(this.lyricEditor == null){
+			this.lyricEditor = new LyricEditor();
+		}
+		return this.lyricEditor;
+	}
+	
+	public TGBrowserDialog getBrowser(){
+		if(this.browser == null){
+			this.browser = new TGBrowserDialog();
+		}
+		return this.browser;
+	}
+	
+	public UndoableManager getUndoableManager(){
+		if(this.undoableManager == null){
+			this.undoableManager = new UndoableManager();
+		}
+		return this.undoableManager;
+	}
+	
+	public ScaleManager getScaleManager(){
+		if(this.scaleManager == null){
+			this.scaleManager = new ScaleManager();
+		}
+		return this.scaleManager;
+	}
+	
+	public TGPluginManager getPluginManager(){
+		return TGPluginManager.getInstance();
+	}
+	
+	public IconManager getIconManager(){
+		if(this.iconManager == null){
+			this.iconManager = new IconManager();
+			this.iconManager.addLoader( new IconLoader() {
+				public void loadIcons() {
+					getShell().setImage(getIconManager().getAppIcon());
+					getShell().layout(true);
+				}
+			});
+		}
+		return this.iconManager;
+	}
+	
+	public CustomChordManager getCustomChordManager(){
+		if(this.customChordManager == null){
+			this.customChordManager = new CustomChordManager();
+		}
+		return this.customChordManager;
+	}
+	
+	public ItemManager getItemManager() {
+		if(this.itemManager == null){
+			this.itemManager = new ItemManager();
+		}
+		return this.itemManager;
+	}
+	
+	public TGActionAdapterManager getActionAdapterManager() {
+		if( this.actionAdapterManager == null ){
+			this.actionAdapterManager = new TGActionAdapterManager();
+		}
+		return this.actionAdapterManager;
+	}
+	
+	public LanguageManager getLanguageManager() {
+		if(this.languageManager == null){
+			this.languageManager = new LanguageManager();
+			this.loadLanguage();
+		}
+		return this.languageManager;
+	}
+	
+	public TGConfigManager getConfig(){
+		if(this.configManager == null){
+			this.configManager = new TGConfigManager();
+		}
+		return this.configManager;
+	}
+	
+	public KeyBindingActionManager getKeyBindingManager(){
+		if(this.keyBindingManager == null){
+			this.keyBindingManager = new KeyBindingActionManager();
+		}
+		return this.keyBindingManager;
+	}
+	
+	public FileHistory getFileHistory(){
+		if(this.fileHistory == null){
+			this.fileHistory = new FileHistory();
+		}
+		return this.fileHistory;
+	}
+	
+	public TGTemplateManager getTemplateManager(){
+		if( this.templateManager == null ){
+			this.templateManager = new TGTemplateManager();
+		}
+		return this.templateManager;
+	}
+	
+	public MidiPlayer getPlayer(){
+		return MidiPlayer.getInstance();
+	}
+	
+	public void initMidiPlayer(){
+		MidiPlayer midiPlayer = MidiPlayer.getInstance();
+		midiPlayer.init(getSongManager());
+		midiPlayer.addListener( new TGTransportListener() );
+		try {
+			getPlayer().addSequencerProvider(new MidiSequencerProviderImpl(), false);
+		} catch (MidiPlayerException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void restorePlayerConfig(){
+		//try to open first device when the configured port not found.
+		getPlayer().setTryOpenFistDevice( true );
+		
+		//check midi sequencer
+		getPlayer().openSequencer(getConfig().getStringValue(TGConfigKeys.MIDI_SEQUENCER), true);
+		
+		//check midi port
+		getPlayer().openOutputPort(getConfig().getStringValue(TGConfigKeys.MIDI_PORT), true);
+	}
+	
+	public void showTitle(){
+		new SyncThread(new Runnable() {
+			public void run() throws TGException {
+				if(!isDisposed()){
+					getShell().setText(WindowTitleUtil.parseTitle());
+				}
+			}
+		}).start();
+	}
+	
+	public void updateCache(final boolean updateItems){
+		if(!this.isLocked()){
+			this.lock();
+			this.getEditorCache().updateEditMode();
+			this.unlock();
+			new SyncThread(new Runnable() {
+				public void run() throws TGException {
+					if(!isDisposed() && !isLocked()){
+						if(updateItems){
+							lock();
+							getEditorManager().doUpdate( TGUpdateListener.SELECTION );
+							unlock();
+						}
+						redraw();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	protected void redraw(){
+		if(!isDisposed() && !this.isLocked()){
+			this.lock();
+			this.getEditorManager().doRedraw( TGRedrawListener.NORMAL );
+			this.unlock();
+		}
+	}
+	
+	public void redrawPlayingMode(){
+		if(!isDisposed() && !this.isLocked()){
+			this.lock();
+			this.getEditorCache().updatePlayMode();
+			this.getEditorManager().doRedraw( this.getEditorCache().shouldRedraw() ? TGRedrawListener.PLAYING_NEW_BEAT : TGRedrawListener.PLAYING_THREAD );
+			this.unlock();
+		}
+	}
+	
+	public void showExternalBeat( TGBeat beat ){
+		if(!isDisposed() && !this.isLocked()){
+			this.lock();
+			this.getEditorManager().showExternalBeat(beat);
+			this.updateCache(true);
+			this.unlock();
+		}
+	}
+	
+	public void hideExternalBeat(){
+		if(!isDisposed() && !this.isLocked()){
+			this.lock();
+			this.getEditorManager().hideExternalBeat();
+			this.updateCache(true);
+			this.unlock();
+		}
+	}
+	
+	public Display getDisplay(){
+		return this.display;
+	}
+	
+	public Shell getShell(){
+		return this.shell;
+	}
+	
+	public static String getProperty(String key) {
+		return TuxGuitar.instance().getLanguageManager().getProperty(key);
+	}
+	
+	public static String getProperty(String key,String[] arguments) {
+		return  TuxGuitar.instance().getLanguageManager().getProperty(key,arguments);
+	}
+	
+	public static boolean isDisposed(){
+		return (TuxGuitar.instance().getDisplay().isDisposed() || TuxGuitar.instance().getShell().isDisposed());
+	}
+	
+	public void loadLanguage(){
+		this.lock();
+		
+		getLanguageManager().setLanguage(getConfig().getStringValue(TGConfigKeys.LANGUAGE));
+		
+		this.unlock();
+	}
+	
+	public void loadToolBars(){
+		this.lock();
+		
+		getItemManager().createCoolbar();
+		
+		this.unlock();
+	}
+	
+	public void loadStyles(){
+		this.lock();
+		
+		getTablatureEditor().getTablature().reloadStyles();
+		
+		this.unlock();
+	}
+	
+	public void loadSkin(){
+		this.lock();
+		
+		getIconManager().reloadIcons();
+		
+		this.unlock();
+	}
+	
+	public void newSong(){
+		this.newSong(TuxGuitar.instance().getTemplateManager().getDefaultTemplate());
+	}
+	
+	public void newSong(TGTemplate tgTemplate){
+		TGSong tgSong = null;
+		if( tgTemplate != null ){
+			tgSong = TuxGuitar.instance().getTemplateManager().getTemplateAsSong(tgTemplate);
+		}
+		if( tgSong == null ){
+			tgSong = TuxGuitar.instance().getSongManager().newSong();
+		}
+		TuxGuitar.instance().fireNewSong(tgSong,null);
+	}
+	
+	public void fireNewSong(TGSong song,URL url){
+		this.lock();
+		
+		TuxGuitar.instance().getSongManager().setSong(song);
+		getFileHistory().reset(url);
+		getPlayer().reset();
+		getPlayer().getMode().clear();
+		getPlayer().resetChannels();
+		getEditorCache().reset();
+		getUndoableManager().discardAllEdits();
+		getEditorManager().doUpdate( TGUpdateListener.SONG_LOADED );
+		
+		this.unlock();
+		
+		updateCache(true);
+		showTitle();
+	}
+	
+	public void fireSaveSong(URL url){
+		this.lock();
+		
+		getFileHistory().reset(url);
+		getEditorCache().reset();
+		getUndoableManager().discardAllEdits();
+		getEditorManager().doUpdate( TGUpdateListener.SONG_SAVED );
+		
+		this.unlock();
+		
+		updateCache(true);
+		showTitle();
+	}
+	
+	public void fireUpdate(){
+		this.lock();
+		this.getEditorCache().reset();
+		this.getEditorManager().doUpdate( TGUpdateListener.SONG_UPDATED );
+		this.unlock();
+	}
+	
+	public void loadCursor(int style){
+		this.loadCursor(getShell(),style);
+	}
+	
+	public void loadCursor(final Control control,final int style){
+		try {
+			TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					if(!control.isDisposed()){
+						control.setCursor(getDisplay().getSystemCursor(style));
+					}
+				}
+			});
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void playBeat( final TGBeat beat ){
+		new Thread(new Runnable() {
+			public void run() throws TGException {
+				if(!isDisposed() && !getPlayer().isRunning() ){
+					getPlayer().playBeat(beat);
+				}
+			}
+		}).start();
+	}
+	
+	public boolean isInitialized() {
+		return this.initialized;
+	}
+	
+	public void setInitialized(boolean initialized) {
+		this.initialized = initialized;
+	}
+	
+	public void lock(){
+		this.lock.lock();
+	}
+	
+	public void unlock(){
+		this.lock.unlock();
+	}
+	
+	public boolean isLocked(){
+		return this.lock.isLocked();
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAccessInterceptor.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAccessInterceptor.java
new file mode 100644
index 0000000..eb9abe5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAccessInterceptor.java
@@ -0,0 +1,54 @@
+package org.herac.tuxguitar.app.action;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.action.TGActionException;
+import org.herac.tuxguitar.action.TGActionInterceptor;
+import org.herac.tuxguitar.app.TuxGuitar;
+
+public class TGActionAccessInterceptor implements TGActionInterceptor {
+	
+	private Object lock;
+	private Thread lockThreadAccess;
+	private TGActionAdapterManager manager;
+	
+	public TGActionAccessInterceptor(TGActionAdapterManager manager){
+		this.lock = new Object();
+		this.lockThreadAccess = null;
+		this.manager = manager;
+	}
+	
+	public boolean intercept(String id, TGActionContext context) throws TGActionException {
+		synchronized( this.lock ) {
+			boolean intercepted = true;
+			
+			if(!TuxGuitar.instance().isLocked()){
+				if(!TGActionLock.isLocked() || hasLockAccessToThread(Thread.currentThread())){
+					boolean running = TuxGuitar.instance().getPlayer().isRunning();
+					if(!running || !this.manager.getDisableOnPlayingActionIds().hasActionId(id)){
+						intercepted = false;
+					}
+				}
+			}
+			
+			this.lockThreadAccess = null;
+			
+			if( intercepted ){
+				TuxGuitar.instance().updateCache( this.manager.getAutoUpdateActionIds().hasActionId(id) );
+			}
+			
+			return intercepted;
+		}
+	}
+	
+	public void grantLockAccessToThread() {
+		synchronized( this.lock ) {
+			this.lockThreadAccess = Thread.currentThread();
+		}
+	}
+	
+	public boolean hasLockAccessToThread(Thread thread){
+		synchronized( this.lock ){
+			return (this.lockThreadAccess != null && this.lockThreadAccess != thread);
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAdapterManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAdapterManager.java
new file mode 100644
index 0000000..02ef2d7
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAdapterManager.java
@@ -0,0 +1,423 @@
+/*
+ * Created on 18-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action;
+
+import org.herac.tuxguitar.action.TGAction;
+import org.herac.tuxguitar.action.TGActionContextFactory;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.action.impl.caret.GoDownAction;
+import org.herac.tuxguitar.app.action.impl.caret.GoLeftAction;
+import org.herac.tuxguitar.app.action.impl.caret.GoRightAction;
+import org.herac.tuxguitar.app.action.impl.caret.GoUpAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeClefAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeInfoAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeKeySignatureAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeTempoAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeTimeSignatureAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeTripletFeelAction;
+import org.herac.tuxguitar.app.action.impl.duration.ChangeDivisionTypeAction;
+import org.herac.tuxguitar.app.action.impl.duration.ChangeDottedDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.ChangeDoubleDottedDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.DecrementDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.IncrementDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetEighthDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetHalfDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetQuarterDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetSixteenthDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetSixtyFourthDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetThirtySecondDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetWholeDurationAction;
+import org.herac.tuxguitar.app.action.impl.edit.RedoAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetMouseModeEditionAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetMouseModeSelectionAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetNaturalKeyAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetVoice1Action;
+import org.herac.tuxguitar.app.action.impl.edit.SetVoice2Action;
+import org.herac.tuxguitar.app.action.impl.edit.UndoAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeAccentuatedNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeBendNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeDeadNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeFadeInAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeGhostNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeGraceNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeHammerNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeHarmonicNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeHeavyAccentuatedNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeLetRingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangePalmMuteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangePoppingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeSlappingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeSlideNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeStaccatoAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTappingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTremoloBarAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTremoloPickingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTrillNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeVibratoNoteAction;
+import org.herac.tuxguitar.app.action.impl.file.ExitAction;
+import org.herac.tuxguitar.app.action.impl.file.ExportSongAction;
+import org.herac.tuxguitar.app.action.impl.file.ImportSongAction;
+import org.herac.tuxguitar.app.action.impl.file.NewFileAction;
+import org.herac.tuxguitar.app.action.impl.file.OpenFileAction;
+import org.herac.tuxguitar.app.action.impl.file.OpenURLAction;
+import org.herac.tuxguitar.app.action.impl.file.PrintAction;
+import org.herac.tuxguitar.app.action.impl.file.PrintPreviewAction;
+import org.herac.tuxguitar.app.action.impl.file.SaveAsFileAction;
+import org.herac.tuxguitar.app.action.impl.file.SaveFileAction;
+import org.herac.tuxguitar.app.action.impl.help.ShowAboutAction;
+import org.herac.tuxguitar.app.action.impl.help.ShowDocAction;
+import org.herac.tuxguitar.app.action.impl.insert.InsertChordAction;
+import org.herac.tuxguitar.app.action.impl.insert.InsertTextAction;
+import org.herac.tuxguitar.app.action.impl.insert.RepeatAlternativeAction;
+import org.herac.tuxguitar.app.action.impl.insert.RepeatCloseAction;
+import org.herac.tuxguitar.app.action.impl.insert.RepeatOpenAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetChordDiagramEnabledAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetChordNameEnabledAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetCompactViewAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetLinearLayoutAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetMultitrackViewAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetPageLayoutAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetScoreEnabledAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetTablatureEnabledAction;
+import org.herac.tuxguitar.app.action.impl.marker.AddMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoFirstMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoLastMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoNextMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoPreviousMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.ListMarkersAction;
+import org.herac.tuxguitar.app.action.impl.measure.AddMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.CleanMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.CopyMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.GoFirstMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.GoLastMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.GoNextMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.GoPreviousMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.PasteMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.RemoveMeasureAction;
+import org.herac.tuxguitar.app.action.impl.note.ChangeNoteAction;
+import org.herac.tuxguitar.app.action.impl.note.ChangeTiedNoteAction;
+import org.herac.tuxguitar.app.action.impl.note.ChangeVelocityAction;
+import org.herac.tuxguitar.app.action.impl.note.CleanBeatAction;
+import org.herac.tuxguitar.app.action.impl.note.DecrementNoteSemitoneAction;
+import org.herac.tuxguitar.app.action.impl.note.DeleteNoteOrRestAction;
+import org.herac.tuxguitar.app.action.impl.note.IncrementNoteSemitoneAction;
+import org.herac.tuxguitar.app.action.impl.note.InsertRestBeatAction;
+import org.herac.tuxguitar.app.action.impl.note.MoveBeatsCustomAction;
+import org.herac.tuxguitar.app.action.impl.note.MoveBeatsLeftAction;
+import org.herac.tuxguitar.app.action.impl.note.MoveBeatsRightAction;
+import org.herac.tuxguitar.app.action.impl.note.RemoveUnusedVoiceAction;
+import org.herac.tuxguitar.app.action.impl.note.SetNoteFretNumberAction;
+import org.herac.tuxguitar.app.action.impl.note.SetStrokeDownAction;
+import org.herac.tuxguitar.app.action.impl.note.SetStrokeUpAction;
+import org.herac.tuxguitar.app.action.impl.note.SetVoiceAutoAction;
+import org.herac.tuxguitar.app.action.impl.note.SetVoiceDownAction;
+import org.herac.tuxguitar.app.action.impl.note.SetVoiceUpAction;
+import org.herac.tuxguitar.app.action.impl.note.ShiftNoteDownAction;
+import org.herac.tuxguitar.app.action.impl.note.ShiftNoteUpAction;
+import org.herac.tuxguitar.app.action.impl.settings.EditConfigAction;
+import org.herac.tuxguitar.app.action.impl.settings.EditKeyBindingsAction;
+import org.herac.tuxguitar.app.action.impl.settings.EditPluginsAction;
+import org.herac.tuxguitar.app.action.impl.system.DisposeAction;
+import org.herac.tuxguitar.app.action.impl.tools.ScaleAction;
+import org.herac.tuxguitar.app.action.impl.tools.TGBrowserAction;
+import org.herac.tuxguitar.app.action.impl.tools.TransposeAction;
+import org.herac.tuxguitar.app.action.impl.track.AddTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.ChangeTrackMuteAction;
+import org.herac.tuxguitar.app.action.impl.track.ChangeTrackSoloAction;
+import org.herac.tuxguitar.app.action.impl.track.CloneTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.EditLyricsAction;
+import org.herac.tuxguitar.app.action.impl.track.GoFirstTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.GoLastTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.GoNextTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.GoPreviousTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.GoToTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.MoveTrackDownAction;
+import org.herac.tuxguitar.app.action.impl.track.MoveTrackUpAction;
+import org.herac.tuxguitar.app.action.impl.track.RemoveTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.TrackPropertiesAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportCountDownAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportMetronomeAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportModeAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportPlayAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportSetLoopEHeaderAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportSetLoopSHeaderAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportStopAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowFretBoardAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowInstrumentsAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowMatrixAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowPianoAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowToolbarsAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowTransportAction;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGActionAdapterManager {
+	
+	private TGActionContextFactory actionContextFactory;
+	private TGActionAccessInterceptor actionAccessInterceptor;
+	private TGActionIdList autoLockActionIds;
+	private TGActionIdList autoUnlockActionIds;
+	private TGActionIdList autoUpdateActionIds;
+	private TGActionIdList keyBindingActionIds;
+	private TGActionIdList disableOnPlayingActionIds;
+	
+	public TGActionAdapterManager(){
+		this.actionContextFactory = new TGActionContextFactoryImpl();
+		this.actionAccessInterceptor = new TGActionAccessInterceptor(this);
+		this.autoLockActionIds = new TGActionIdList();
+		this.autoUnlockActionIds = new TGActionIdList();
+		this.autoUpdateActionIds = new TGActionIdList();
+		this.keyBindingActionIds = new TGActionIdList();
+		this.disableOnPlayingActionIds = new TGActionIdList();
+	}
+	
+	public void initialize(){
+		this.initializeHandlers();
+		this.initializeDefaultActions();
+	}
+	
+	private void initializeHandlers(){
+		TGActionManager.getInstance().setActionContextFactory(this.actionContextFactory);
+		TGActionManager.getInstance().addInterceptor(this.actionAccessInterceptor);
+		TGActionManager.getInstance().addPreExecutionListener(new TGActionAutoLockListener(this));
+		TGActionManager.getInstance().addPostExecutionListener(new TGActionAutoUpdateListener(this));
+		TGActionManager.getInstance().addPostExecutionListener(new TGActionAutoUnlockListener(this));
+	}
+	
+	private void initializeDefaultActions(){
+		//file actions
+		installAction(new NewFileAction());
+		installAction(new OpenFileAction());
+		installAction(new SaveFileAction());
+		installAction(new SaveAsFileAction());
+		installAction(new ImportSongAction());
+		installAction(new ExportSongAction());
+		installAction(new PrintAction());
+		installAction(new PrintPreviewAction());
+		installAction(new OpenURLAction());
+		installAction(new ExitAction());
+		
+		//edit actions
+		installAction(new UndoAction());
+		installAction(new RedoAction());
+		installAction(new SetMouseModeSelectionAction());
+		installAction(new SetMouseModeEditionAction());
+		installAction(new SetNaturalKeyAction());
+		installAction(new SetVoice1Action());
+		installAction(new SetVoice2Action());
+		
+		//layout actions
+		installAction(new SetPageLayoutAction());
+		installAction(new SetLinearLayoutAction());
+		installAction(new SetMultitrackViewAction());
+		installAction(new SetScoreEnabledAction());
+		installAction(new SetTablatureEnabledAction());
+		installAction(new SetCompactViewAction());
+		installAction(new SetChordNameEnabledAction());
+		installAction(new SetChordDiagramEnabledAction());
+		
+		//view actions
+		installAction(new ShowToolbarsAction());
+		installAction(new ShowFretBoardAction());
+		installAction(new ShowPianoAction());
+		installAction(new ShowInstrumentsAction());
+		installAction(new ShowTransportAction());
+		installAction(new ShowMatrixAction());
+		
+		//composition actions
+		installAction(new ChangeTimeSignatureAction());
+		installAction(new ChangeTempoAction());
+		installAction(new ChangeClefAction());
+		installAction(new ChangeKeySignatureAction());
+		installAction(new ChangeTripletFeelAction());
+		installAction(new ChangeInfoAction());
+		
+		//track actions
+		installAction(new AddTrackAction());
+		installAction(new RemoveTrackAction());
+		installAction(new CloneTrackAction());
+		installAction(new GoFirstTrackAction());
+		installAction(new GoLastTrackAction());
+		installAction(new GoNextTrackAction());
+		installAction(new GoToTrackAction());
+		installAction(new GoPreviousTrackAction());
+		installAction(new MoveTrackUpAction());
+		installAction(new MoveTrackDownAction());
+		installAction(new ChangeTrackMuteAction());
+		installAction(new ChangeTrackSoloAction());
+		installAction(new EditLyricsAction());
+		installAction(new TrackPropertiesAction());
+		
+		//measure actions
+		installAction(new AddMeasureAction());
+		installAction(new RemoveMeasureAction());
+		installAction(new CopyMeasureAction());
+		installAction(new PasteMeasureAction());
+		installAction(new GoFirstMeasureAction());
+		installAction(new GoLastMeasureAction());
+		installAction(new GoNextMeasureAction());
+		installAction(new GoPreviousMeasureAction());
+		installAction(new CleanMeasureAction());
+		
+		//note actions
+		installAction(new ChangeNoteAction());
+		installAction(new InsertRestBeatAction());
+		installAction(new DeleteNoteOrRestAction());
+		installAction(new RemoveUnusedVoiceAction());
+		installAction(new CleanBeatAction());
+		installAction(new ChangeTiedNoteAction());
+		installAction(new ChangeVelocityAction());
+		installAction(new ShiftNoteUpAction());
+		installAction(new ShiftNoteDownAction());
+		installAction(new IncrementNoteSemitoneAction());
+		installAction(new DecrementNoteSemitoneAction());
+		installAction(new SetStrokeUpAction());
+		installAction(new SetStrokeDownAction());
+		installAction(new MoveBeatsRightAction());
+		installAction(new MoveBeatsLeftAction());
+		installAction(new MoveBeatsCustomAction());
+		for( int i = 0 ; i < 10 ; i ++ ){
+			installAction(new SetNoteFretNumberAction(i));
+		}
+		
+		//duration actions
+		installAction(new SetWholeDurationAction());
+		installAction(new SetHalfDurationAction());
+		installAction(new SetQuarterDurationAction());
+		installAction(new SetEighthDurationAction());
+		installAction(new SetSixteenthDurationAction());
+		installAction(new SetThirtySecondDurationAction());
+		installAction(new SetSixtyFourthDurationAction());
+		installAction(new ChangeDottedDurationAction());
+		installAction(new ChangeDoubleDottedDurationAction());
+		installAction(new ChangeDivisionTypeAction());
+		installAction(new IncrementDurationAction());
+		installAction(new DecrementDurationAction());
+		
+		//insert actions
+		installAction(new RepeatOpenAction());
+		installAction(new RepeatCloseAction());
+		installAction(new RepeatAlternativeAction());
+		installAction(new InsertChordAction());
+		installAction(new InsertTextAction());
+		
+		//note effects action
+		installAction(new ChangeVibratoNoteAction());
+		installAction(new ChangeBendNoteAction());
+		installAction(new ChangeDeadNoteAction());
+		installAction(new ChangeSlideNoteAction());
+		installAction(new ChangeHammerNoteAction());
+		installAction(new ChangeGhostNoteAction());
+		installAction(new ChangeAccentuatedNoteAction());
+		installAction(new ChangeHeavyAccentuatedNoteAction());
+		installAction(new ChangeHarmonicNoteAction());
+		installAction(new ChangeGraceNoteAction());
+		installAction(new ChangeTrillNoteAction());
+		installAction(new ChangeTremoloPickingAction());
+		installAction(new ChangePalmMuteAction());
+		installAction(new ChangeLetRingAction());
+		installAction(new ChangeStaccatoAction());
+		installAction(new ChangeTappingAction());
+		installAction(new ChangeSlappingAction());
+		installAction(new ChangePoppingAction());
+		installAction(new ChangeTremoloBarAction());
+		installAction(new ChangeFadeInAction());
+		installAction(new SetVoiceAutoAction());
+		installAction(new SetVoiceUpAction());
+		installAction(new SetVoiceDownAction());
+		
+		//marker actions
+		installAction(new AddMarkerAction());
+		installAction(new ListMarkersAction());
+		installAction(new GoPreviousMarkerAction());
+		installAction(new GoNextMarkerAction());
+		installAction(new GoFirstMarkerAction());
+		installAction(new GoLastMarkerAction());
+		
+		//player actions
+		installAction(new TransportPlayAction());
+		installAction(new TransportStopAction());
+		installAction(new TransportMetronomeAction());
+		installAction(new TransportCountDownAction());
+		installAction(new TransportModeAction());
+		installAction(new TransportSetLoopSHeaderAction());
+		installAction(new TransportSetLoopEHeaderAction());
+		
+		//setting actions
+		installAction(new EditPluginsAction());
+		installAction(new EditConfigAction()); 
+		installAction(new EditKeyBindingsAction()); 
+		
+		//caret actions
+		installAction(new GoRightAction());
+		installAction(new GoLeftAction());
+		installAction(new GoUpAction());
+		installAction(new GoDownAction());
+		
+		//help actions
+		installAction(new ShowDocAction());
+		installAction(new ShowAboutAction());
+		
+		//tools
+		installAction(new TransposeAction() );
+		installAction(new ScaleAction());
+		installAction(new TGBrowserAction());
+		
+		//exit
+		installAction(new DisposeAction());
+	}
+	
+	private void installAction(TGActionBase action){
+		String actionId = action.getName();
+		int flags = action.getFlags();
+		
+		this.mapAction(actionId, action);
+		this.mapActionIdToList(this.autoLockActionIds, actionId, flags, TGActionBase.AUTO_LOCK);
+		this.mapActionIdToList(this.autoUnlockActionIds, actionId, flags, TGActionBase.AUTO_UNLOCK);
+		this.mapActionIdToList(this.autoUpdateActionIds, actionId, flags, TGActionBase.AUTO_UPDATE);
+		this.mapActionIdToList(this.keyBindingActionIds, actionId, flags, TGActionBase.KEY_BINDING_AVAILABLE);
+		this.mapActionIdToList(this.disableOnPlayingActionIds, actionId, flags, TGActionBase.DISABLE_ON_PLAYING);
+	}
+	
+	private void mapAction(String actionId, TGAction action){
+		TGActionManager.getInstance().mapAction(actionId,action);
+	}
+	
+	private void mapActionIdToList(TGActionIdList actionIdList, String actionId, int flags, int matchFlag){
+		if((flags & matchFlag) != 0) {
+			actionIdList.addActionId(actionId);
+		}
+	}
+	
+	public TGActionAccessInterceptor getActionAccessInterceptor() {
+		return this.actionAccessInterceptor;
+	}
+	
+	public TGActionIdList getAutoLockActionIds() {
+		return this.autoLockActionIds;
+	}
+
+	public TGActionIdList getAutoUnlockActionIds() {
+		return this.autoUnlockActionIds;
+	}
+
+	public TGActionIdList getAutoUpdateActionIds() {
+		return this.autoUpdateActionIds;
+	}
+
+	public TGActionIdList getKeyBindingActionIds() {
+		return this.keyBindingActionIds;
+	}
+
+	public TGActionIdList getDisableOnPlayingActionIds() {
+		return this.disableOnPlayingActionIds;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAutoLockListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAutoLockListener.java
new file mode 100644
index 0000000..1e54467
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAutoLockListener.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.app.action;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.action.TGActionException;
+import org.herac.tuxguitar.action.TGActionPreExecutionListener;
+
+public class TGActionAutoLockListener implements TGActionPreExecutionListener {
+	
+	private TGActionAdapterManager manager;
+	
+	public TGActionAutoLockListener(TGActionAdapterManager manager){
+		this.manager = manager;
+	}
+	
+	public void doPreExecution(String id, TGActionContext context) throws TGActionException {
+		if( this.manager.getAutoLockActionIds().hasActionId(id) ) {
+			TGActionLock.lock();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAutoUnlockListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAutoUnlockListener.java
new file mode 100644
index 0000000..94ad58a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAutoUnlockListener.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.app.action;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.action.TGActionException;
+import org.herac.tuxguitar.action.TGActionPostExecutionListener;
+
+public class TGActionAutoUnlockListener implements TGActionPostExecutionListener {
+	
+	private TGActionAdapterManager manager;
+	
+	public TGActionAutoUnlockListener(TGActionAdapterManager manager){
+		this.manager = manager;
+	}
+	
+	public void doPostExecution(String id, TGActionContext context) throws TGActionException {
+		if( this.manager.getAutoUnlockActionIds().hasActionId(id) ) {
+			TGActionLock.unlock();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAutoUpdateListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAutoUpdateListener.java
new file mode 100644
index 0000000..467c50e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionAutoUpdateListener.java
@@ -0,0 +1,19 @@
+package org.herac.tuxguitar.app.action;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.action.TGActionException;
+import org.herac.tuxguitar.action.TGActionPostExecutionListener;
+import org.herac.tuxguitar.app.TuxGuitar;
+
+public class TGActionAutoUpdateListener implements TGActionPostExecutionListener {
+	
+	private TGActionAdapterManager manager;
+	
+	public TGActionAutoUpdateListener(TGActionAdapterManager manager){
+		this.manager = manager;
+	}
+	
+	public void doPostExecution(String id, TGActionContext context) throws TGActionException {
+		TuxGuitar.instance().updateCache( this.manager.getAutoUpdateActionIds().hasActionId(id) );
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionBase.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionBase.java
new file mode 100644
index 0000000..abac752
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionBase.java
@@ -0,0 +1,108 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action;
+
+import org.herac.tuxguitar.action.TGAction;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window 
+ * Preferences - Java - Code Style - Code Templates
+ */
+public abstract class TGActionBase implements TGAction {
+	
+	protected static final int AUTO_LOCK = 0x01;
+	
+	protected static final int AUTO_UNLOCK = 0x02;
+	
+	protected static final int AUTO_UPDATE = 0x04;
+	
+	public static final int KEY_BINDING_AVAILABLE = 0x08;
+	
+	protected static final int DISABLE_ON_PLAYING = 0x10;
+	
+	private String name;
+	
+	private int flags;
+	
+	public TGActionBase(String name, int flags) {
+		this.name = name;
+		this.flags = flags;
+	}
+	
+	protected abstract void processAction(TGActionContext context);
+	
+	public synchronized void execute(final TGActionContext context) {
+		this.processAction(context);
+///////////		
+//		if (!TGActionLock.isLocked() && !TuxGuitar.instance().isLocked()) {
+//			final int flags = getFlags();
+//			
+//			if ((flags & DISABLE_ON_PLAYING) != 0 && TuxGuitar.instance().getPlayer().isRunning()) {
+//				TuxGuitar.instance().updateCache(((flags & AUTO_UPDATE) != 0));
+//				return;
+//			}
+//			
+//			if ((flags & AUTO_LOCK) != 0) {
+//				TGActionLock.lock();
+//			}
+//			
+//			try {
+//				TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+//					public void run() throws TGException {
+//						if (!TuxGuitar.isDisposed()) {
+//							int result = processAction(context);
+//							
+//							TuxGuitar.instance().updateCache((((flags | result) & AUTO_UPDATE) != 0));
+//							
+//							if (((flags | result) & AUTO_UNLOCK) != 0) {
+//								TGActionLock.unlock();
+//							}
+//						}
+//					}
+//				});
+//			} catch (Throwable throwable) {
+//				throwable.printStackTrace();
+//			}
+
+//		}
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public int getFlags() {
+		return this.flags;
+	}
+	
+	public TGSongManager getSongManager() {
+		return TuxGuitar.instance().getSongManager();
+	}
+	
+	public TablatureEditor getEditor() {
+		return TuxGuitar.instance().getTablatureEditor();
+	}
+	
+	public synchronized void updateTablature() {
+		TuxGuitar.instance().fireUpdate();
+	}
+	
+	public void fireUpdate(int number) {
+		this.getEditor().getTablature().updateMeasure(number);
+	}
+	
+	public void addUndoableEdit(UndoableEdit anEdit) {
+		TuxGuitar.instance().getUndoableManager().addEdit(anEdit);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionContextFactoryImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionContextFactoryImpl.java
new file mode 100644
index 0000000..a12378e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionContextFactoryImpl.java
@@ -0,0 +1,18 @@
+package org.herac.tuxguitar.app.action;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.action.TGActionContextFactory;
+import org.herac.tuxguitar.action.TGActionException;
+import org.herac.tuxguitar.app.TuxGuitar;
+
+public class TGActionContextFactoryImpl implements TGActionContextFactory{
+
+	public static final String PROPERTY_SONG_MANAGER = "songManager";
+	
+	public TGActionContext createActionContext() throws TGActionException {
+		TGActionContext tgActionContext = new TGActionContextImpl();
+		tgActionContext.setAttribute(PROPERTY_SONG_MANAGER, TuxGuitar.instance().getSongManager());
+		
+		return tgActionContext;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionContextImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionContextImpl.java
new file mode 100644
index 0000000..78b323a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionContextImpl.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.app.action;
+
+import org.herac.tuxguitar.action.TGActionContext;
+
+public class TGActionContextImpl extends TGActionContext{
+	
+	public TGActionContextImpl(){
+		super();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionIdList.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionIdList.java
new file mode 100644
index 0000000..08df061
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionIdList.java
@@ -0,0 +1,51 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window 
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class TGActionIdList {
+	
+	private List actionIds;
+	
+	public TGActionIdList() {
+		this.actionIds = new ArrayList();
+	}
+	
+	public boolean hasActionId(String actionId){
+		return this.actionIds.contains(actionId);
+	}
+	
+	public void removeActionId(String actionId){
+		if( this.hasActionId(actionId) ){
+			this.actionIds.remove(actionId);
+		}
+	}
+	
+	public void addActionId(String actionId){
+		if(!this.hasActionId(actionId) ){
+			this.actionIds.add(actionId);
+		}
+	}
+	
+	public void addActionIds(String[] actionIds){
+		for(int i = 0 ; i < actionIds.length ; i ++){
+			this.addActionId(actionIds[i]);
+		}
+	}
+	
+	public List getActionIds(){
+		return new ArrayList(this.actionIds);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionLock.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionLock.java
new file mode 100644
index 0000000..c204840
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionLock.java
@@ -0,0 +1,30 @@
+package org.herac.tuxguitar.app.action;
+
+public class TGActionLock {
+	
+	private static boolean working;
+	
+	public synchronized static boolean isLocked(){
+		return working;
+	}
+	
+	public synchronized static void lock(){
+		working = true;
+	}
+	
+	public synchronized static void unlock(){
+		working = false;
+	}
+	
+	public synchronized static void waitFor(){
+		try {
+			while(isLocked()){
+				synchronized( TGActionLock.class ) {
+					TGActionLock.class.wait(1);
+				}
+			}
+		} catch (InterruptedException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionProcessor.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionProcessor.java
new file mode 100644
index 0000000..f8e48cb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/TGActionProcessor.java
@@ -0,0 +1,121 @@
+package org.herac.tuxguitar.app.action;
+
+import java.util.Iterator;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.events.ShellEvent;
+import org.eclipse.swt.events.ShellListener;
+import org.eclipse.swt.events.TypedEvent;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class TGActionProcessor implements SelectionListener,MouseListener,MenuListener,ShellListener{
+	
+	public static final String PROPERTY_TYPED_EVENT = "typedEvent";
+	
+	private String actionName; 
+	
+	public TGActionProcessor(String actionName){
+		this.actionName = actionName;
+	}
+	
+	public void processEvent(TypedEvent e) {
+		TGActionContext tgActionContext = TGActionManager.getInstance().createActionContext();
+		tgActionContext.setAttribute(PROPERTY_TYPED_EVENT, e);
+		
+		this.fillWidgetAttributes(tgActionContext, e);
+		this.processAction(tgActionContext);
+	}
+	
+	public void processAction(final TGActionContext context){
+		final String actionName = this.actionName;
+		TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				TGActionManager.getInstance().execute(actionName, context);
+			}
+		});
+	}
+	
+	public void fillWidgetAttributes(TGActionContext context, TypedEvent e){
+		Object widgetData = (e.widget != null ? e.widget.getData() : null);
+		if( widgetData instanceof Map ){
+			Iterator it = ((Map)widgetData).entrySet().iterator();
+			while( it.hasNext() ){
+				Map.Entry entry = (Map.Entry)it.next();
+				context.setAttribute(entry.getKey().toString(), entry.getValue());
+			}
+		}
+	}
+	
+	public void widgetSelected(SelectionEvent e) {
+		if(e.widget != null && (e.widget.getStyle() & SWT.RADIO) != 0){
+			if(e.widget instanceof Button && !((Button)e.widget).getSelection() ){
+				return;
+			}
+			if(e.widget instanceof ToolItem && !((ToolItem)e.widget).getSelection() ){
+				return;
+			}
+			if(e.widget instanceof MenuItem && !((MenuItem)e.widget).getSelection() ){
+				return;
+			}
+		}
+		processEvent(e);
+	}
+	
+	public void mouseUp(MouseEvent e) {
+		processEvent(e);
+	}
+	
+	public void menuShown(MenuEvent e) {
+		processEvent(e);
+	}
+	
+	public void shellClosed(ShellEvent e) {
+		e.doit = false;
+		processEvent(e);
+	}
+	
+	public void widgetDefaultSelected(SelectionEvent e) {
+		//Override me
+	}
+	
+	public void mouseDoubleClick(MouseEvent e) {
+		//Override me
+	}
+	
+	public void mouseDown(MouseEvent e) {
+		//Override me
+	}
+	
+	public void menuHidden(MenuEvent e) {
+		//Override me
+	}
+	
+	public void shellActivated(ShellEvent e) {
+		//Override me
+	}
+	
+	public void shellDeactivated(ShellEvent e) {
+		//Override me
+	}
+	
+	public void shellDeiconified(ShellEvent e) {
+		//Override me
+	}
+	
+	public void shellIconified(ShellEvent e) {
+		//Override me
+	}	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoDownAction.java
new file mode 100644
index 0000000..d373679
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoDownAction.java
@@ -0,0 +1,29 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.caret;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoDownAction extends TGActionBase{
+	
+	public static final String NAME = "action.caret.go-down";
+	
+	public GoDownAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		getEditor().getTablature().getCaret().moveDown();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoLeftAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoLeftAction.java
new file mode 100644
index 0000000..f95268b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoLeftAction.java
@@ -0,0 +1,35 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.caret;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoLeftAction extends TGActionBase{
+	
+	public static final String NAME = "action.caret.go-left";
+	
+	public GoLeftAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			TuxGuitar.instance().getTransport().gotoPrevious();
+		}
+		else{
+			getEditor().getTablature().getCaret().moveLeft();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoRightAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoRightAction.java
new file mode 100644
index 0000000..18d25c2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoRightAction.java
@@ -0,0 +1,52 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.caret;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableAddMeasure;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoRightAction extends TGActionBase{
+	
+	public static final String NAME = "action.caret.go-right";
+	
+	public GoRightAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			TuxGuitar.instance().getTransport().gotoNext();
+		}
+		else{
+			Caret caret = getEditor().getTablature().getCaret();
+			if(!caret.moveRight()){
+				int number = (getSongManager().getSong().countMeasureHeaders() + 1);
+				
+				//comienza el undoable
+				UndoableAddMeasure undoable = UndoableAddMeasure.startUndo(number);
+				
+				getSongManager().addNewMeasure(number);
+				fireUpdate(number);
+				caret.moveRight();
+				
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoUpAction.java
new file mode 100644
index 0000000..b56f221
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/caret/GoUpAction.java
@@ -0,0 +1,29 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.caret;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoUpAction extends TGActionBase{
+	
+	public static final String NAME = "action.caret.go-up";
+	
+	public GoUpAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		getEditor().getTablature().getCaret().moveUp();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeClefAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeClefAction.java
new file mode 100644
index 0000000..d2c0680
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeClefAction.java
@@ -0,0 +1,161 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.composition;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeClef;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeClefAction extends TGActionBase{
+	
+	public static final String NAME = "action.composition.change-clef";
+	
+	public ChangeClefAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("composition.clef"));
+			
+			//-------clef-------------------------------------
+			Group clef = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			clef.setLayout(new GridLayout(2,false));
+			clef.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			clef.setText(TuxGuitar.getProperty("composition.clef"));
+			
+			Label numeratorLabel = new Label(clef, SWT.NULL);
+			numeratorLabel.setText(TuxGuitar.getProperty("composition.clef") + ":");
+			
+			final Combo clefs = new Combo(clef, SWT.DROP_DOWN | SWT.READ_ONLY);
+			
+			clefs.add(TuxGuitar.getProperty("composition.clef.treble"));
+			clefs.add(TuxGuitar.getProperty("composition.clef.bass"));
+			clefs.add(TuxGuitar.getProperty("composition.clef.tenor"));
+			clefs.add(TuxGuitar.getProperty("composition.clef.alto"));
+			clefs.select(measure.getClef() - 1);
+			clefs.setLayoutData(getComboData());
+			
+			//--------------------To End Checkbox-------------------------------
+			Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			check.setLayout(new GridLayout());
+			check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			check.setText(TuxGuitar.getProperty("options"));
+			
+			final Button toEnd = new Button(check, SWT.CHECK);
+			toEnd.setText(TuxGuitar.getProperty("composition.clef.to-the-end"));
+			toEnd.setSelection(true);
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					final boolean toEndValue = toEnd.getSelection();
+					final int clef = (clefs.getSelectionIndex() + 1);
+					
+					dialog.dispose();
+					try {
+						TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+							public void run() throws TGException {
+								TGActionLock.lock();
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+								setClef(clef,toEndValue);
+								TuxGuitar.instance().updateCache( true );
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								TGActionLock.unlock();
+							}
+						});
+					} catch (Throwable throwable) {
+						MessageDialog.errorMessage(throwable);
+					}
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getComboData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 150;
+		return data;
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected void setClef(int clef,boolean toEnd){
+		//comienza el undoable
+		UndoableChangeClef undoable = UndoableChangeClef.startUndo();
+		
+		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
+		TGTrack track = getEditor().getTablature().getCaret().getTrack();
+		getSongManager().getTrackManager().changeClef(track,measure.getStart(),clef,toEnd);
+		
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		//actualizo la tablatura
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo(clef,toEnd));
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeInfoAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeInfoAction.java
new file mode 100644
index 0000000..3fd2518
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeInfoAction.java
@@ -0,0 +1,236 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.composition;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeInfo;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeInfoAction extends TGActionBase{
+	
+	public static final String NAME = "action.composition.change-info";
+	
+	private static final int GROUP_WIDTH  = 450;
+	private static final int GROUP_HEIGHT = SWT.DEFAULT;
+	
+	public ChangeInfoAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGSong song = getSongManager().getSong();
+		if (song != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			
+			dialog.setLayout(new GridLayout());
+			dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			dialog.setText(TuxGuitar.getProperty("composition.properties"));
+			
+			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			group.setLayout(makeGroupLayout(5));
+			group.setLayoutData(new GridData(GROUP_WIDTH,GROUP_HEIGHT));
+			group.setText(TuxGuitar.getProperty("composition.properties"));
+			
+			//-------NAME------------------------------------
+			Label nameLabel = new Label(group, SWT.NULL);
+			nameLabel.setLayoutData(makeLabelData()); 
+			nameLabel.setText(TuxGuitar.getProperty("composition.name") + ":");
+			
+			final Text nameText = new Text(group, SWT.BORDER);
+			nameText.setLayoutData(makeTextData());
+			nameText.setText(song.getName());
+			//-------ARTIST------------------------------------
+			Label artistLabel = new Label(group, SWT.NULL);
+			artistLabel.setLayoutData(makeLabelData());
+			artistLabel.setText(TuxGuitar.getProperty("composition.artist") + ":");
+			
+			final Text artistText = new Text(group, SWT.BORDER);
+			artistText.setLayoutData(makeTextData());
+			artistText.setText(song.getArtist());
+			//-------ALBUM------------------------------------
+			Label albumLabel = new Label(group, SWT.NULL);
+			albumLabel.setLayoutData(makeLabelData());
+			albumLabel.setText(TuxGuitar.getProperty("composition.album") + ":");
+			
+			final Text albumText = new Text(group, SWT.BORDER);
+			albumText.setLayoutData(makeTextData());
+			albumText.setText(song.getAlbum());
+			//-------AUTHOR------------------------------------
+			Label authorLabel = new Label(group, SWT.NULL);
+			authorLabel.setLayoutData(makeLabelData());
+			authorLabel.setText(TuxGuitar.getProperty("composition.author") + ":");
+			
+			final Text authorText = new Text(group, SWT.BORDER);
+			authorText.setLayoutData(makeTextData());
+			authorText.setText(song.getAuthor());
+			//-------DATE------------------------------------
+			Label dateLabel = new Label(group, SWT.NULL);
+			dateLabel.setLayoutData(makeLabelData());
+			dateLabel.setText(TuxGuitar.getProperty("composition.date") + ":");
+			
+			final Text dateText = new Text(group, SWT.BORDER);
+			dateText.setLayoutData(makeTextData());
+			dateText.setText(song.getDate());
+			//-------COPYRIGHT------------------------------------
+			Label copyrightLabel = new Label(group, SWT.NULL);
+			copyrightLabel.setLayoutData(makeLabelData());
+			copyrightLabel.setText(TuxGuitar.getProperty("composition.copyright") + ":");
+			
+			final Text copyrightText = new Text(group, SWT.BORDER);
+			copyrightText.setLayoutData(makeTextData());
+			copyrightText.setText(song.getCopyright());
+			//-------WRITER-------------------------------------
+			Label writerLabel = new Label(group, SWT.NULL);
+			writerLabel.setLayoutData(makeLabelData());
+			writerLabel.setText(TuxGuitar.getProperty("composition.writer") + ":");
+			
+			final Text writerText = new Text(group, SWT.BORDER);
+			writerText.setLayoutData(makeTextData());
+			writerText.setText(song.getWriter());
+			//-------TRANSCRIBER------------------------------------
+			Label transcriberLabel = new Label(group, SWT.NULL);
+			transcriberLabel.setLayoutData(makeLabelData());
+			transcriberLabel.setText(TuxGuitar.getProperty("composition.transcriber") + ":");
+			
+			final Text transcriberText = new Text(group, SWT.BORDER);
+			transcriberText.setLayoutData(makeTextData());
+			transcriberText.setText(song.getTranscriber());
+			
+			//-------COMMENTS------------------------------------
+			Label commentsLabel = new Label(group, SWT.NULL);
+			commentsLabel.setLayoutData(makeLabelData());
+			commentsLabel.setText(TuxGuitar.getProperty("composition.comments") + ":");
+			
+			final Text commentsText = new Text(group, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
+			commentsText.setLayoutData(makeTextAreaData());
+			commentsText.setText(song.getComments());
+			
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					final String name = nameText.getText();
+					final String artist = artistText.getText();
+					final String album = albumText.getText();
+					final String author = authorText.getText();
+					final String date = dateText.getText();
+					final String copyright = copyrightText.getText();
+					final String writer = writerText.getText();
+					final String transcriber = transcriberText.getText();
+					final String comments = commentsText.getText();
+					
+					dialog.dispose();
+					try {
+						TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+							public void run() throws TGException {
+								TGActionLock.lock();
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+								setProperties(name,artist,album,author,date,copyright,writer,transcriber,comments);
+								TuxGuitar.instance().updateCache( true );
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								TGActionLock.unlock();
+							}
+						});
+					} catch (Throwable throwable) {
+						MessageDialog.errorMessage(throwable);
+					}
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridLayout makeGroupLayout(int spacing){
+		GridLayout layout = new GridLayout(2,false);
+		layout.marginTop = spacing;
+		layout.marginBottom = spacing;
+		layout.marginLeft = spacing;
+		layout.marginRight = spacing;
+		layout.verticalSpacing = spacing;
+		layout.horizontalSpacing = spacing;
+		return layout;
+	}
+	
+	private GridData makeTextAreaData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumHeight = 100;
+		return data;
+	}
+	
+	private GridData makeTextData(){
+		return new GridData(SWT.FILL, SWT.FILL, true, true);
+	}
+	
+	private GridData makeLabelData(){
+		return new GridData(SWT.RIGHT,SWT.CENTER,false,true);
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected void setProperties(String name,String artist,String album,String author,String date,String copyright,String writer,String transcriber,String comments){
+		//comienza el undoable
+		UndoableChangeInfo undoable = UndoableChangeInfo.startUndo();
+		
+		getSongManager().setProperties(name,artist,album,author,date,copyright,writer,transcriber,comments);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		TuxGuitar.instance().showTitle();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeKeySignatureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeKeySignatureAction.java
new file mode 100644
index 0000000..c29ee55
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeKeySignatureAction.java
@@ -0,0 +1,172 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.composition;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeKeySignature;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeKeySignatureAction extends TGActionBase{
+	
+	public static final String NAME = "action.composition.change-key-signature";
+	
+	public ChangeKeySignatureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("composition.keysignature"));
+			
+			//-------key Signature-------------------------------------
+			Group keySignature = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			keySignature.setLayout(new GridLayout(2,false));
+			keySignature.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			keySignature.setText(TuxGuitar.getProperty("composition.keysignature"));
+			
+			Label numeratorLabel = new Label(keySignature, SWT.NULL);
+			numeratorLabel.setText(TuxGuitar.getProperty("composition.keysignature") + ":");
+			
+			final Combo keySignatures = new Combo(keySignature, SWT.DROP_DOWN | SWT.READ_ONLY);
+			
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.natural"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-1"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-2"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-3"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-4"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-5"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-6"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-7"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-1"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-2"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-3"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-4"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-5"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-6"));
+			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-7"));
+			keySignatures.select(measure.getKeySignature());
+			keySignatures.setLayoutData(getComboData());
+			//--------------------To End Checkbox-------------------------------
+			Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			check.setLayout(new GridLayout());
+			check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			check.setText(TuxGuitar.getProperty("options"));
+			
+			final Button toEnd = new Button(check, SWT.CHECK);
+			toEnd.setText(TuxGuitar.getProperty("composition.keysignature.to-the-end"));
+			toEnd.setSelection(true);
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					final boolean toEndValue = toEnd.getSelection();
+					final int keySignature = keySignatures.getSelectionIndex();
+					
+					dialog.dispose();
+					try {
+						TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+							public void run() throws TGException {
+								TGActionLock.lock();
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+								setKeySignature(keySignature,toEndValue);
+								TuxGuitar.instance().updateCache( true );
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								TGActionLock.unlock();
+							}
+						});
+					} catch (Throwable throwable) {
+						MessageDialog.errorMessage(throwable);
+					}
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private GridData getComboData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 150;
+		return data;
+	}
+	
+	protected void setKeySignature(int keySignature,boolean toEnd){
+		//comienza el undoable
+		UndoableChangeKeySignature undoable = UndoableChangeKeySignature.startUndo();
+		
+		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
+		TGTrack track = getEditor().getTablature().getCaret().getTrack();
+		getSongManager().getTrackManager().changeKeySignature(track,measure.getStart(),keySignature,toEnd);
+		
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		//actualizo la tablatura
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo(keySignature,toEnd));
+		
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeTempoAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeTempoAction.java
new file mode 100644
index 0000000..836430f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeTempoAction.java
@@ -0,0 +1,183 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.composition;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeTempo;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGTempo;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTempoAction extends TGActionBase{
+	
+	public static final String NAME = "action.composition.change-tempo";
+	
+	private static final int MIN_TEMPO = 30;
+	private static final int MAX_TEMPO = 320;
+	
+	protected static final int[] DEFAULT_PERCENTS = new int[]{25,50,75,100,125,150,175,200};
+	
+	public ChangeTempoAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("composition.tempo"));
+			
+			//-----------------TEMPO------------------------
+			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			group.setLayout(new GridLayout(2,false));
+			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			group.setText(TuxGuitar.getProperty("composition.tempo"));
+			
+			TGTempo currentTempo = measure.getTempo();
+			Label tempoLabel = new Label(group, SWT.NULL);
+			tempoLabel.setText(TuxGuitar.getProperty("composition.tempo"));
+			
+			final Spinner tempo = new Spinner(group, SWT.BORDER);
+			tempo.setLayoutData(getSpinnerData());
+			tempo.setMinimum(MIN_TEMPO);
+			tempo.setMaximum(MAX_TEMPO);
+			tempo.setSelection(currentTempo.getValue());
+			
+			//------------------OPTIONS--------------------------
+			Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			options.setLayout(new GridLayout());
+			options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			options.setText(TuxGuitar.getProperty("options"));
+			
+			final Button applyToAllMeasures = new Button(options, SWT.RADIO);
+			applyToAllMeasures.setText(TuxGuitar.getProperty("composition.tempo.start-to-end"));
+			
+			final Button applyToEnd = new Button(options, SWT.RADIO);
+			applyToEnd.setText(TuxGuitar.getProperty("composition.tempo.position-to-end"));
+			
+			final Button applyToNext = new Button(options, SWT.RADIO);
+			applyToNext.setText(TuxGuitar.getProperty("composition.tempo.position-to-next"));
+			
+			applyToAllMeasures.setSelection(true);
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					final int tempoValue = tempo.getSelection();
+					final boolean applyToEndValue = applyToEnd.getSelection();
+					final boolean applyToAllMeasuresValue = applyToAllMeasures.getSelection();
+					
+					dialog.dispose();
+					try {
+						TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+							public void run() throws TGException {
+								TGActionLock.lock();
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+								setTempo(tempoValue, applyToAllMeasuresValue, applyToEndValue);
+								TuxGuitar.instance().updateCache( true );
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								TGActionLock.unlock();
+							}
+						});
+					} catch (Throwable throwable) {
+						MessageDialog.errorMessage(throwable);
+					}
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 150;
+		return data;
+	}
+	
+	protected void setTempo(int tempoValue,boolean applyToAllMeasures,boolean applyToEnd){
+		if(tempoValue >= MIN_TEMPO && MAX_TEMPO <= 320){
+			TGTempo tempo = getSongManager().getFactory().newTempo();
+			tempo.setValue(tempoValue);
+			
+			long start = (applyToAllMeasures ? TGDuration.QUARTER_TIME : getEditor().getTablature().getCaret().getMeasure().getStart());
+			boolean toEnd = (applyToAllMeasures || applyToEnd);
+			
+			//comienza el undoable
+			UndoableChangeTempo undoable = UndoableChangeTempo.startUndo();
+			
+			getSongManager().changeTempos(start,tempo,toEnd);
+			
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			//actualizo la tablatura
+			updateTablature();
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}
+	}
+	
+	public TGSongManager getSongManager(){
+		return super.getSongManager();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeTimeSignatureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeTimeSignatureAction.java
new file mode 100644
index 0000000..a280a19
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeTimeSignatureAction.java
@@ -0,0 +1,179 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.composition;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeTimeSignature;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTimeSignatureAction extends TGActionBase{
+	
+	public static final String NAME = "action.composition.change-time-signature";
+	
+	public ChangeTimeSignatureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("composition.timesignature"));
+			
+			//-------------TIME SIGNATURE-----------------------------------------------
+			Group timeSignature = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			timeSignature.setLayout(new GridLayout(2,false));
+			timeSignature.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			timeSignature.setText(TuxGuitar.getProperty("composition.timesignature"));
+			
+			TGTimeSignature currentTimeSignature = measure.getTimeSignature();
+			//numerator
+			Label numeratorLabel = new Label(timeSignature, SWT.NULL);
+			numeratorLabel.setText(TuxGuitar.getProperty("composition.timesignature.Numerator"));
+			final Combo numerator = new Combo(timeSignature, SWT.DROP_DOWN | SWT.READ_ONLY);
+			for (int i = 1; i <= 32; i++) {
+				numerator.add(Integer.toString(i));
+			}
+			numerator.setText(Integer.toString(currentTimeSignature.getNumerator()));
+			numerator.setLayoutData(getComboData());
+			//denominator
+			Label denominatorLabel = new Label(timeSignature, SWT.NULL);
+			denominatorLabel.setText(TuxGuitar.getProperty("composition.timesignature.denominator"));
+			final Combo denominator = new Combo(timeSignature, SWT.DROP_DOWN | SWT.READ_ONLY);
+			for (int i = 1; i <= 32; i = i * 2) {
+				denominator.add(Integer.toString(i));
+			}
+			denominator.setText(Integer.toString(currentTimeSignature.getDenominator().getValue()));
+			denominator.setLayoutData(getComboData());
+			
+			//--------------------To End Checkbox-------------------------------
+			Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			check.setLayout(new GridLayout());
+			check.setText(TuxGuitar.getProperty("options"));
+			check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			
+			final Button toEnd = new Button(check, SWT.CHECK);
+			toEnd.setText(TuxGuitar.getProperty("composition.timesignature.to-the-end"));
+			toEnd.setSelection(true);
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOk = new Button(buttons, SWT.PUSH);
+			buttonOk.setText(TuxGuitar.getProperty("ok"));
+			buttonOk.setLayoutData(getButtonData());
+			buttonOk.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					final boolean toEndValue = toEnd.getSelection();
+					final int numeratorValue = Integer.parseInt(numerator.getText());
+					final int denominatorValue = Integer.parseInt(denominator.getText());
+					
+					dialog.dispose();
+					try {
+						TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+							public void run() throws TGException {
+								TGActionLock.lock();
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+								TGTimeSignature timeSignature = getSongManager().getFactory().newTimeSignature();
+								timeSignature.setNumerator(numeratorValue);
+								timeSignature.getDenominator().setValue(denominatorValue);
+								setTimeSignature(timeSignature,toEndValue);
+								TuxGuitar.instance().updateCache( true );
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								TGActionLock.unlock();
+							}
+						});
+					} catch (Throwable throwable) {
+						MessageDialog.errorMessage(throwable);
+					}
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOk );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private GridData getComboData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 150;
+		return data;
+	}
+	
+	protected void setTimeSignature(TGTimeSignature timeSignature,boolean toEnd){
+		//comienza el undoable
+		UndoableChangeTimeSignature undoable = UndoableChangeTimeSignature.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		TGMeasureImpl measure = caret.getMeasure();
+		
+		getSongManager().changeTimeSignature(measure.getStart(),timeSignature,toEnd);
+		
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		//actualizo la tablatura
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo(timeSignature,measure.getStart(),toEnd));
+	}
+	
+	public TGSongManager getSongManager(){
+		return super.getSongManager();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeTripletFeelAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeTripletFeelAction.java
new file mode 100644
index 0000000..4b11249
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/composition/ChangeTripletFeelAction.java
@@ -0,0 +1,167 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.composition;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeTripletFeel;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTripletFeelAction extends TGActionBase{
+	
+	public static final String NAME = "action.composition.change-triplet-feel";
+	
+	public ChangeTripletFeelAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("composition.tripletfeel"));
+			dialog.setMinimumSize(300,0);
+			
+			//-------------TIME SIGNATURE-----------------------------------------------
+			Group tripletFeel = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			tripletFeel.setLayout(new GridLayout());
+			tripletFeel.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			tripletFeel.setText(TuxGuitar.getProperty("composition.tripletfeel"));
+			
+			//none
+			final Button tripletFeelNone = new Button(tripletFeel, SWT.RADIO);
+			tripletFeelNone.setText(TuxGuitar.getProperty("composition.tripletfeel.none"));
+			tripletFeelNone.setSelection(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_NONE);
+			
+			final Button tripletFeelEighth = new Button(tripletFeel, SWT.RADIO);
+			tripletFeelEighth.setText(TuxGuitar.getProperty("composition.tripletfeel.eighth"));
+			tripletFeelEighth.setSelection(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH);
+			
+			final Button tripletFeelSixteenth = new Button(tripletFeel, SWT.RADIO);
+			tripletFeelSixteenth.setText(TuxGuitar.getProperty("composition.tripletfeel.sixteenth"));
+			tripletFeelSixteenth.setSelection(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH);
+			
+			//--------------------To End Checkbox-------------------------------
+			Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			check.setLayout(new GridLayout());
+			check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			check.setText(TuxGuitar.getProperty("options"));
+			
+			final Button toEnd = new Button(check, SWT.CHECK);
+			toEnd.setText(TuxGuitar.getProperty("composition.tripletfeel.to-the-end"));
+			toEnd.setSelection(true);
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOk = new Button(buttons, SWT.PUSH);
+			buttonOk.setText(TuxGuitar.getProperty("ok"));
+			buttonOk.setLayoutData(getButtonData());
+			buttonOk.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					final boolean toEndValue = toEnd.getSelection();
+					final int tripletFeel = getSelectedTripletFeel(tripletFeelNone, tripletFeelEighth, tripletFeelSixteenth);
+					
+					dialog.dispose();
+					try {
+						TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+							public void run() throws TGException {
+								TGActionLock.lock();
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+								setTripletFeel(tripletFeel,toEndValue);
+								TuxGuitar.instance().updateCache( true );
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								TGActionLock.unlock();
+							}
+						});
+					} catch (Throwable throwable) {
+						MessageDialog.errorMessage(throwable);
+					}
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOk );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected int getSelectedTripletFeel(Button tripletFeelNone,Button tripletFeelEighth, Button tripletFeelSixteenth){
+		if(tripletFeelNone.getSelection()){
+			return TGMeasureHeader.TRIPLET_FEEL_NONE;
+		}else if(tripletFeelEighth.getSelection()){
+			return TGMeasureHeader.TRIPLET_FEEL_EIGHTH;
+		}else if(tripletFeelSixteenth.getSelection()){
+			return TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH;
+		}
+		return TGMeasureHeader.TRIPLET_FEEL_NONE;
+	}
+	
+	protected void setTripletFeel(int tripletFeel,boolean toEnd){
+		//comienza el undoable
+		UndoableChangeTripletFeel undoable = UndoableChangeTripletFeel.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		TGMeasureImpl measure = caret.getMeasure();
+		
+		getSongManager().changeTripletFeel(measure.getStart(),tripletFeel,toEnd);
+		
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		//actualizo la tablatura
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo(tripletFeel,toEnd));
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/ChangeDivisionTypeAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/ChangeDivisionTypeAction.java
new file mode 100644
index 0000000..aae59ca
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/ChangeDivisionTypeAction.java
@@ -0,0 +1,91 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGDuration;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeDivisionTypeAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.change-division-type";
+	
+	public static final String PROPERTY_DIVISION_TYPE = "divisionType";
+	
+	public ChangeDivisionTypeAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Object propertyDivisionType = context.getAttribute(PROPERTY_DIVISION_TYPE);
+		
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		TGDivisionType divisionType = defaultDivisionType();
+		if( propertyDivisionType instanceof TGDivisionType){
+			divisionType = (TGDivisionType)propertyDivisionType;
+		}
+		
+		
+		TGDivisionType newDivisionType = null;
+		TGDivisionType oldDivisionType = getSelectedDuration().getDivision();
+		if( oldDivisionType.isEqual(TGDivisionType.NORMAL)){
+			newDivisionType = divisionType;
+		}
+		else{
+			newDivisionType = noTuplet();
+			if(!oldDivisionType.isEqual(divisionType) && propertyDivisionType instanceof TGDivisionType ){
+				newDivisionType = divisionType;
+			}
+		}
+		
+		setDivisionType(newDivisionType);
+		setDurations();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	private TGDivisionType noTuplet(){
+		TGDivisionType divisionType = getSongManager().getFactory().newDivisionType();
+		TGDivisionType.NORMAL.copy(divisionType);
+		return divisionType;
+	}
+	
+	private TGDivisionType defaultDivisionType(){
+		TGDivisionType divisionType = getSongManager().getFactory().newDivisionType();
+		TGDivisionType.TRIPLET.copy(divisionType);
+		return divisionType;
+	}
+	
+	private void setDivisionType(TGDivisionType divisionType){
+		getSelectedDuration().getDivision().setEnters(divisionType.getEnters());
+		getSelectedDuration().getDivision().setTimes(divisionType.getTimes());
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/ChangeDottedDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/ChangeDottedDurationAction.java
new file mode 100644
index 0000000..de9bc71
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/ChangeDottedDurationAction.java
@@ -0,0 +1,53 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGDuration;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeDottedDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.change-dotted";
+	
+	public ChangeDottedDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		getSelectedDuration().setDotted(!getSelectedDuration().isDotted());
+		getSelectedDuration().setDoubleDotted(false);
+		
+		setDurations();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/ChangeDoubleDottedDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/ChangeDoubleDottedDurationAction.java
new file mode 100644
index 0000000..a67ef86
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/ChangeDoubleDottedDurationAction.java
@@ -0,0 +1,53 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGDuration;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeDoubleDottedDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.change-double-dotted";
+	
+	public ChangeDoubleDottedDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		getSelectedDuration().setDoubleDotted(!getSelectedDuration().isDoubleDotted());
+		getSelectedDuration().setDotted(false);
+		
+		setDurations();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/DecrementDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/DecrementDurationAction.java
new file mode 100644
index 0000000..c501917
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/DecrementDurationAction.java
@@ -0,0 +1,57 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGDuration;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class DecrementDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.decrement-duration";
+	
+	public DecrementDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGDuration duration = getEditor().getTablature().getCaret().getDuration();
+		if(duration.getValue() > TGDuration.WHOLE){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			this.changeDuration(duration.getValue() / 2);
+			
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			this.updateTablature();
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}
+	}
+	
+	private void changeDuration(int value) {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.getDuration().setValue(value);
+		caret.getDuration().setDotted(false);
+		caret.getDuration().setDoubleDotted(false);
+		caret.changeDuration(caret.getDuration().clone(getSongManager().getFactory()));
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/IncrementDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/IncrementDurationAction.java
new file mode 100644
index 0000000..f6b3cdb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/IncrementDurationAction.java
@@ -0,0 +1,57 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGDuration;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class IncrementDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.increment-duration";
+	
+	public IncrementDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGDuration duration = getEditor().getTablature().getCaret().getDuration();
+		if(duration.getValue() < TGDuration.SIXTY_FOURTH){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			this.changeDuration(duration.getValue() * 2);
+			
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			this.updateTablature();
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}
+	}
+	
+	private void changeDuration(int value) {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.getDuration().setValue(value);
+		caret.getDuration().setDotted(false);
+		caret.getDuration().setDoubleDotted(false);
+		caret.changeDuration(caret.getDuration().clone(getSongManager().getFactory()));
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetEighthDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetEighthDurationAction.java
new file mode 100644
index 0000000..a045d8c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetEighthDurationAction.java
@@ -0,0 +1,65 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetEighthDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.set-eighth";
+	
+	public static final int VALUE = TGDuration.EIGHTH;
+	
+	public SetEighthDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		if(beat != null){
+			TGVoice voice = beat.getVoice( caret.getVoice() );
+			TGDuration duration = getSelectedDuration();
+			if(duration.getValue() != VALUE || (!voice.isEmpty() && voice.getDuration().getValue() != VALUE)){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				getSelectedDuration().setValue(VALUE);
+				getSelectedDuration().setDotted(false);
+				getSelectedDuration().setDoubleDotted(false);
+				setDurations();
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+			}
+		}
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetHalfDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetHalfDurationAction.java
new file mode 100644
index 0000000..3a4d265
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetHalfDurationAction.java
@@ -0,0 +1,65 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetHalfDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.set-half";
+	
+	public static final int VALUE = TGDuration.HALF;
+	
+	public SetHalfDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		if(beat != null){
+			TGVoice voice = beat.getVoice( caret.getVoice() );
+			TGDuration duration = getSelectedDuration();
+			if(duration.getValue() != VALUE || (!voice.isEmpty() && voice.getDuration().getValue() != VALUE)){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				getSelectedDuration().setValue(VALUE);
+				getSelectedDuration().setDotted(false);
+				getSelectedDuration().setDoubleDotted(false);
+				setDurations();
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+			}
+		}
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetQuarterDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetQuarterDurationAction.java
new file mode 100644
index 0000000..3893d78
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetQuarterDurationAction.java
@@ -0,0 +1,65 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetQuarterDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.set-quarter";
+	
+	public static final int VALUE = TGDuration.QUARTER;
+	
+	public SetQuarterDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		if(beat != null){
+			TGVoice voice = beat.getVoice( caret.getVoice() );
+			TGDuration duration = getSelectedDuration();
+			if(duration.getValue() != VALUE || (!voice.isEmpty() && voice.getDuration().getValue() != VALUE)){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				getSelectedDuration().setValue(VALUE);
+				getSelectedDuration().setDotted(false);
+				getSelectedDuration().setDoubleDotted(false);
+				setDurations();
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+			}
+		}
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetSixteenthDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetSixteenthDurationAction.java
new file mode 100644
index 0000000..891b14d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetSixteenthDurationAction.java
@@ -0,0 +1,65 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetSixteenthDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.set-sixteenth";
+	
+	public static final int VALUE = TGDuration.SIXTEENTH;
+	
+	public SetSixteenthDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		if(beat != null){
+			TGVoice voice = beat.getVoice( caret.getVoice() );
+			TGDuration duration = getSelectedDuration();
+			if(duration.getValue() != VALUE || (!voice.isEmpty() && voice.getDuration().getValue() != VALUE)){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				getSelectedDuration().setValue(VALUE);
+				getSelectedDuration().setDotted(false);
+				getSelectedDuration().setDoubleDotted(false);
+				setDurations();
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+			}
+		}
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetSixtyFourthDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetSixtyFourthDurationAction.java
new file mode 100644
index 0000000..600fefb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetSixtyFourthDurationAction.java
@@ -0,0 +1,65 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetSixtyFourthDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.set-sixty-fourth";
+	
+	public static final int VALUE = TGDuration.SIXTY_FOURTH;
+	
+	public SetSixtyFourthDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		if(beat != null){
+			TGVoice voice = beat.getVoice( caret.getVoice() );
+			TGDuration duration = getSelectedDuration();
+			if(duration.getValue() != VALUE || (!voice.isEmpty() && voice.getDuration().getValue() != VALUE)){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				getSelectedDuration().setValue(VALUE);
+				getSelectedDuration().setDotted(false);
+				getSelectedDuration().setDoubleDotted(false);
+				setDurations();
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+			}
+		}
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetThirtySecondDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetThirtySecondDurationAction.java
new file mode 100644
index 0000000..8c7df0e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetThirtySecondDurationAction.java
@@ -0,0 +1,65 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetThirtySecondDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.set-thirty-second";
+	
+	public static final int VALUE = TGDuration.THIRTY_SECOND;
+	
+	public SetThirtySecondDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		if(beat != null){
+			TGVoice voice = beat.getVoice( caret.getVoice() );
+			TGDuration duration = getSelectedDuration();
+			if(duration.getValue() != VALUE || (!voice.isEmpty() && voice.getDuration().getValue() != VALUE)){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				getSelectedDuration().setValue(VALUE);
+				getSelectedDuration().setDotted(false);
+				getSelectedDuration().setDoubleDotted(false);
+				setDurations();
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+			}
+		}
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetWholeDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetWholeDurationAction.java
new file mode 100644
index 0000000..c9c83fb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/duration/SetWholeDurationAction.java
@@ -0,0 +1,64 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.duration;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetWholeDurationAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.duration.set-whole";
+	public static final int VALUE = TGDuration.WHOLE;
+	
+	public SetWholeDurationAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		if(beat != null){
+			TGVoice voice = beat.getVoice( caret.getVoice() );
+			TGDuration duration = getSelectedDuration();
+			if(duration.getValue() != VALUE || (!voice.isEmpty() && voice.getDuration().getValue() != VALUE)){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				getSelectedDuration().setValue(VALUE);
+				getSelectedDuration().setDotted(false);
+				getSelectedDuration().setDoubleDotted(false);
+				setDurations();
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+			}
+		}
+	}
+	
+	private void setDurations() {
+		Caret caret = getEditor().getTablature().getCaret();
+		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public TGDuration getSelectedDuration(){
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/RedoAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/RedoAction.java
new file mode 100644
index 0000000..f8dac79
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/RedoAction.java
@@ -0,0 +1,37 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.edit;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class RedoAction extends TGActionBase{
+	
+	public static final String NAME = "action.edit.redo";
+	
+	public RedoAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		try {
+			if(TuxGuitar.instance().getUndoableManager().canRedo()){
+				TuxGuitar.instance().getUndoableManager().redo();
+			}
+		} catch (CannotRedoException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetMouseModeEditionAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetMouseModeEditionAction.java
new file mode 100644
index 0000000..35dfae3
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetMouseModeEditionAction.java
@@ -0,0 +1,30 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.edit;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.edit.EditorKit;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetMouseModeEditionAction extends TGActionBase{
+	
+	public static final String NAME = "action.edit.set-mouse-mode-edition";
+	
+	public SetMouseModeEditionAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		getEditor().getTablature().getEditorKit().setMouseMode(EditorKit.MOUSE_MODE_EDITION);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetMouseModeSelectionAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetMouseModeSelectionAction.java
new file mode 100644
index 0000000..06ba1f6
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetMouseModeSelectionAction.java
@@ -0,0 +1,30 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.edit;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.edit.EditorKit;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetMouseModeSelectionAction extends TGActionBase{
+	
+	public static final String NAME = "action.edit.set-mouse-mode-selection";
+	
+	public SetMouseModeSelectionAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		getEditor().getTablature().getEditorKit().setMouseMode(EditorKit.MOUSE_MODE_SELECTION);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetNaturalKeyAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetNaturalKeyAction.java
new file mode 100644
index 0000000..2bac39e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetNaturalKeyAction.java
@@ -0,0 +1,29 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.edit;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetNaturalKeyAction extends TGActionBase{
+	
+	public static final String NAME = "action.edit.set-natural-key";
+	
+	public SetNaturalKeyAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		getEditor().getTablature().getEditorKit().setNatural(!getEditor().getTablature().getEditorKit().isNatural());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetVoice1Action.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetVoice1Action.java
new file mode 100644
index 0000000..0dcb28c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetVoice1Action.java
@@ -0,0 +1,29 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.edit;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetVoice1Action extends TGActionBase{
+	
+	public static final String NAME = "action.edit.voice-1";
+	
+	public SetVoice1Action() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		getEditor().getTablature().getCaret().setVoice(0);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetVoice2Action.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetVoice2Action.java
new file mode 100644
index 0000000..5f3ad4b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/SetVoice2Action.java
@@ -0,0 +1,29 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.edit;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetVoice2Action extends TGActionBase{
+	
+	public static final String NAME = "action.edit.voice-2";
+	
+	public SetVoice2Action() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		getEditor().getTablature().getCaret().setVoice(1);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/UndoAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/UndoAction.java
new file mode 100644
index 0000000..fab6b29
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/edit/UndoAction.java
@@ -0,0 +1,37 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.edit;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class UndoAction extends TGActionBase{
+	
+	public static final String NAME = "action.edit.undo";
+	
+	public UndoAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		try {
+			if(TuxGuitar.instance().getUndoableManager().canUndo()){
+				TuxGuitar.instance().getUndoableManager().undo();
+			}
+		} catch (CannotUndoException e1) {
+			e1.printStackTrace();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeAccentuatedNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeAccentuatedNoteAction.java
new file mode 100644
index 0000000..f654a2e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeAccentuatedNoteAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeAccentuatedNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-accentuated";
+	
+	public ChangeAccentuatedNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeAccentuatedNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeBendNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeBendNoteAction.java
new file mode 100644
index 0000000..4453646
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeBendNoteAction.java
@@ -0,0 +1,59 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.effects.BendEditor;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeBendNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-bend";
+	
+	public ChangeBendNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if(note != null){
+			BendEditor bendEditor = new BendEditor();
+			bendEditor.show(getEditor().getTablature().getShell(),note);
+			if(!bendEditor.isCancelled()){
+				changeBend(bendEditor.getResult());
+			}
+		}
+	}
+	
+	private void changeBend(TGEffectBend effect){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeBendNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeDeadNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeDeadNoteAction.java
new file mode 100644
index 0000000..a6908f0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeDeadNoteAction.java
@@ -0,0 +1,59 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeDeadNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-dead";
+	
+	public ChangeDeadNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		TGNote note = caret.getSelectedNote();
+		if(note == null){
+			note = getSongManager().getFactory().newNote();
+			note.setValue(0);
+			note.setVelocity(caret.getVelocity());
+			note.setString(caret.getSelectedString().getNumber());
+			
+			TGDuration duration = getSongManager().getFactory().newDuration();
+			caret.getDuration().copy(duration);
+			
+			getSongManager().getMeasureManager().addNote(caret.getMeasure(),caret.getPosition(),note,duration,caret.getVoice());
+		}
+		getSongManager().getMeasureManager().changeDeadNote(note);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeFadeInAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeFadeInAction.java
new file mode 100644
index 0000000..c2b5976
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeFadeInAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeFadeInAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-fade-in";
+	
+	public ChangeFadeInAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeFadeIn(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeGhostNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeGhostNoteAction.java
new file mode 100644
index 0000000..243c0b0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeGhostNoteAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeGhostNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-ghost";
+	
+	public ChangeGhostNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeGhostNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeGraceNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeGraceNoteAction.java
new file mode 100644
index 0000000..1230625
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeGraceNoteAction.java
@@ -0,0 +1,59 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.effects.GraceEditor;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeGraceNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-grace";
+	
+	public ChangeGraceNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if(note != null){
+			GraceEditor graceEditor = new GraceEditor();
+			graceEditor.show(note);
+			if(!graceEditor.isCancelled()){
+				changeGrace(graceEditor.getResult());
+			}
+		}
+	}
+	
+	private void changeGrace(TGEffectGrace effect){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeGraceNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeHammerNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeHammerNoteAction.java
new file mode 100644
index 0000000..7815071
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeHammerNoteAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeHammerNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-hammer";
+	
+	public ChangeHammerNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeHammerNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeHarmonicNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeHarmonicNoteAction.java
new file mode 100644
index 0000000..919b1bf
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeHarmonicNoteAction.java
@@ -0,0 +1,59 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.effects.HarmonicEditor;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeHarmonicNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-harmonic";
+	
+	public ChangeHarmonicNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if(note != null){
+			HarmonicEditor harmonicEditor = new HarmonicEditor();
+			harmonicEditor.show(note);
+			if(!harmonicEditor.isCancelled()){
+				changeHarmonic(harmonicEditor.getResult());
+			}
+		}
+	}
+	
+	private void changeHarmonic(TGEffectHarmonic effect){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeHarmonicNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeHeavyAccentuatedNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeHeavyAccentuatedNoteAction.java
new file mode 100644
index 0000000..aeaffb5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeHeavyAccentuatedNoteAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeHeavyAccentuatedNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-heavy-accentuated";
+	
+	public ChangeHeavyAccentuatedNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeHeavyAccentuatedNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeLetRingAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeLetRingAction.java
new file mode 100644
index 0000000..0e723a9
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeLetRingAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeLetRingAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-let-ring";
+	
+	public ChangeLetRingAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeLetRing(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangePalmMuteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangePalmMuteAction.java
new file mode 100644
index 0000000..1890e26
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangePalmMuteAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangePalmMuteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-palm-mute";
+	
+	public ChangePalmMuteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changePalmMute(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangePoppingAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangePoppingAction.java
new file mode 100644
index 0000000..ca4f429
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangePoppingAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangePoppingAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-popping";
+	
+	public ChangePoppingAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changePopping(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeSlappingAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeSlappingAction.java
new file mode 100644
index 0000000..808378f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeSlappingAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeSlappingAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-slapping";
+	
+	public ChangeSlappingAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeSlapping(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeSlideNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeSlideNoteAction.java
new file mode 100644
index 0000000..6205407
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeSlideNoteAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeSlideNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-slide";
+	
+	public ChangeSlideNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeSlideNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeStaccatoAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeStaccatoAction.java
new file mode 100644
index 0000000..5e13d6f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeStaccatoAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeStaccatoAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-staccato";
+	
+	public ChangeStaccatoAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeStaccato(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTappingAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTappingAction.java
new file mode 100644
index 0000000..9f8154e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTappingAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTappingAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-tapping";
+	
+	public ChangeTappingAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeTapping(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTremoloBarAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTremoloBarAction.java
new file mode 100644
index 0000000..d75f2c3
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTremoloBarAction.java
@@ -0,0 +1,59 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.effects.TremoloBarEditor;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTremoloBarAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-tremolo-bar";
+	
+	public ChangeTremoloBarAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if( note != null ){
+			TremoloBarEditor tremoloBarEditor = new TremoloBarEditor();
+			tremoloBarEditor.show(getEditor().getTablature().getShell(),note);
+			if(!tremoloBarEditor.isCancelled() ){
+				changeTremoloBar(tremoloBarEditor.getResult());
+			}
+		}
+	}
+	
+	private void changeTremoloBar(TGEffectTremoloBar effect){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeTremoloBar(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTremoloPickingAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTremoloPickingAction.java
new file mode 100644
index 0000000..ca5ae62
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTremoloPickingAction.java
@@ -0,0 +1,59 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.effects.TremoloPickingEditor;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTremoloPickingAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-tremolo-picking";
+	
+	public ChangeTremoloPickingAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if(note != null){
+			TremoloPickingEditor tremoloPickingEditor = new TremoloPickingEditor();
+			tremoloPickingEditor.show(note);
+			if(!tremoloPickingEditor.isCancelled()){
+				changeTremoloPicking(tremoloPickingEditor.getResult());
+			}
+		}
+	}
+	
+	private void changeTremoloPicking(TGEffectTremoloPicking effect){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeTremoloPicking(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTrillNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTrillNoteAction.java
new file mode 100644
index 0000000..a4098c4
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeTrillNoteAction.java
@@ -0,0 +1,59 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.effects.TrillEditor;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTrillNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-trill";
+	
+	public ChangeTrillNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if( note != null ){
+			TrillEditor trillEditor = new TrillEditor();
+			trillEditor.show(note);
+			if(!trillEditor.isCancelled()){
+				changeTrill(trillEditor.getResult());
+			}
+		}
+	}
+	
+	private void changeTrill(TGEffectTrill effect){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeTrillNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeVibratoNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeVibratoNoteAction.java
new file mode 100644
index 0000000..e2fc270
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/effects/ChangeVibratoNoteAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.effects;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeVibratoNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.effect.change-vibrato";
+	
+	public ChangeVibratoNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		getSongManager().getMeasureManager().changeVibratoNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/ExitAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/ExitAction.java
new file mode 100644
index 0000000..c5d255a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/ExitAction.java
@@ -0,0 +1,31 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ExitAction extends TGActionBase {
+	
+	public static final String NAME = "action.file.exit";
+	
+	public ExitAction() {
+		super(NAME, AUTO_LOCK | KEY_BINDING_AVAILABLE );
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGActionLock.unlock();
+		TuxGuitar.instance().getShell().close();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/ExportSongAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/ExportSongAction.java
new file mode 100644
index 0000000..e9d2324
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/ExportSongAction.java
@@ -0,0 +1,83 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import org.eclipse.swt.SWT;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.io.base.TGLocalFileExporter;
+import org.herac.tuxguitar.io.base.TGRawExporter;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ExportSongAction extends TGActionBase {
+	
+	public static final String NAME = "action.file.export";
+	
+	public static final String PROPERTY_EXPORTER = "exporter";
+	
+	public ExportSongAction() {
+		super(NAME, AUTO_LOCK | AUTO_UPDATE );
+	}
+	
+	protected void processAction(TGActionContext context){
+		Object propertyExporter = context.getAttribute(PROPERTY_EXPORTER);
+		if(!(propertyExporter instanceof TGRawExporter) ){
+			TGActionLock.unlock();
+			return;
+		}
+		
+		final TGRawExporter exporter = (TGRawExporter)propertyExporter;
+		if( exporter instanceof TGLocalFileExporter ){
+			this.processLocalFileExporter( (TGLocalFileExporter)exporter );
+			return;
+		}
+		this.processRawExporter( exporter );
+	}
+	
+	private void processLocalFileExporter( final TGLocalFileExporter exporter ){
+		if(!exporter.configure(false)){
+			TGActionLock.unlock();
+			return;
+		}
+		
+		final String fileName = FileActionUtils.chooseFileName(exporter.getFileFormat());
+		if( fileName == null ){
+			TGActionLock.unlock();
+			return;
+		}
+		
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		new Thread(new Runnable() {
+			public void run() {
+				if(!TuxGuitar.isDisposed()){
+					FileActionUtils.exportSong(exporter, fileName);
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+				}
+			}
+		}).start();
+	}
+	
+	private void processRawExporter( final TGRawExporter exporter ){
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		new Thread(new Runnable() {
+			public void run() {
+				if(!TuxGuitar.isDisposed()){
+					FileActionUtils.exportSong(exporter);
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+				}
+			}
+		}).start();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/FileActionUtils.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/FileActionUtils.java
new file mode 100644
index 0000000..6b66837
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/FileActionUtils.java
@@ -0,0 +1,188 @@
+package org.herac.tuxguitar.app.action.impl.file;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.util.Iterator;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+import org.herac.tuxguitar.app.util.FileChooser;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.io.base.TGLocalFileExporter;
+import org.herac.tuxguitar.io.base.TGLocalFileImporter;
+import org.herac.tuxguitar.io.base.TGOutputStreamBase;
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.base.TGRawImporter;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class FileActionUtils {
+	
+	public static String getFileName(){
+		if (TuxGuitar.instance().getFileHistory().isNewFile() || !TuxGuitar.instance().getFileHistory().isLocalFile()) {
+			return chooseFileName();
+		}
+		String path = TuxGuitar.instance().getFileHistory().getCurrentFilePath();
+		String file = TuxGuitar.instance().getFileHistory().getCurrentFileName(FileChooser.DEFAULT_SAVE_FILENAME);
+		String fullPath = path + File.separator + file;
+		return ( isSupportedFormat(fullPath) ? fullPath : chooseFileName() );
+	}
+	
+	public static String chooseFileName(){
+		String fileName = FileChooser.instance().save(TuxGuitar.instance().getShell(),TGFileFormatManager.instance().getOutputFormats());
+		if (fileName != null) {
+			if (!isSupportedFormat(fileName)) {
+				fileName += TGFileFormatManager.DEFAULT_EXTENSION;
+			}
+			if(!canWrite(fileName)){
+				return null;
+			}
+		}
+		return fileName;
+	}
+	
+	public static String chooseFileName(TGFileFormat format){
+		String fileName = FileChooser.instance().save(TuxGuitar.instance().getShell(),format);
+		if (fileName != null && !canWrite(fileName)){
+			return null;
+		}
+		return fileName;
+	}
+	
+	public static boolean isSupportedFormat(String path) {
+		if(path != null){
+			int index = path.lastIndexOf(".");
+			if(index > 0){
+				Iterator it = TGFileFormatManager.instance().getOutputStreams();
+				while(it.hasNext()){
+					TGOutputStreamBase writer = (TGOutputStreamBase)it.next();
+					if(writer.isSupportedExtension(path.substring(index))){
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+	
+	public static boolean canWrite(String fileName){
+		boolean canWrite = true;
+		File file = new File(fileName);
+		if (file.exists()) {
+			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.overwrite-question"));
+			confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
+			if (confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO , ConfirmDialog.BUTTON_NO ) == ConfirmDialog.STATUS_NO) {
+				canWrite = false;
+			}
+		}
+		return canWrite;
+	}
+	
+	public static void open(final String fileName){
+		try {
+			TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),new FileInputStream(fileName));
+			TuxGuitar.instance().fireNewSong(song,new File(fileName).toURI().toURL());
+		}catch (Throwable throwable) {
+			TuxGuitar.instance().newSong();
+			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{fileName}),throwable));
+		}
+	}
+	
+	public static void save(final String fileName){
+		try {
+			TGSongManager manager = TuxGuitar.instance().getSongManager();
+			TGFileFormatManager.instance().getWriter().write(manager.getFactory(),manager.getSong(), fileName);
+			TuxGuitar.instance().fireSaveSong(new File(fileName).toURI().toURL());
+		} catch (Throwable throwable) {
+			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.save.error", new String[]{fileName}),throwable));
+		}
+	}
+	
+	public static void open(final URL url){
+		try {
+			InputStream stream = (isLocalFile(url) ? url.openStream() : getInputStream(url.openStream()));
+			TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream);
+			TuxGuitar.instance().fireNewSong(song,url);
+		}catch (Throwable throwable) {
+			TuxGuitar.instance().newSong();
+			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{url.toString()}),throwable));
+		}
+	}
+	
+	public static void exportSong(TGRawExporter exporter){
+		try {
+			TGSongManager manager = TuxGuitar.instance().getSongManager();
+			exporter.exportSong(manager.getSong());
+		} catch (Throwable throwable) {
+			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.export.error"),throwable));
+		}
+	}
+	
+	public static void exportSong(TGLocalFileExporter exporter, String path){
+		try {
+			OutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(path)));
+			TGSongManager manager = TuxGuitar.instance().getSongManager();
+			exporter.init( manager.getFactory() , stream );
+			exporter.exportSong(manager.getSong());
+		} catch (Throwable throwable) {
+			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.export.error", new String[]{path}),throwable));
+		}
+	}
+	
+	public static void importSong(final TGRawImporter importer){
+		try {
+			TGSong song = importer.importSong();
+			TuxGuitar.instance().fireNewSong(song,null);
+		}catch (Throwable throwable) {
+			TuxGuitar.instance().newSong();
+			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.import.error"),throwable));
+		}
+	}
+	
+	public static void importSong(final TGLocalFileImporter importer, String path){
+		try {
+			InputStream stream = new BufferedInputStream(new FileInputStream(new File(path)));
+			importer.init(TuxGuitar.instance().getSongManager().getFactory(),stream);
+			TGSong song = importer.importSong();
+			TuxGuitar.instance().fireNewSong(song,null);
+		}catch (Throwable throwable) {
+			TuxGuitar.instance().newSong();
+			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.import.error", new String[]{path}),throwable));
+		}
+	}
+	
+	private static boolean isLocalFile(URL url){
+		try {
+			if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){
+				return true;
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return false;
+	}
+	
+	private static InputStream getInputStream(InputStream in)throws Throwable {
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		int read = 0;
+		while((read = in.read()) != -1){
+			out.write(read);
+		}
+		byte[] bytes = out.toByteArray();
+		in.close();
+		out.close();
+		out.flush();
+		return new ByteArrayInputStream(bytes);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/ImportSongAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/ImportSongAction.java
new file mode 100644
index 0000000..f939b24
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/ImportSongAction.java
@@ -0,0 +1,125 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import java.io.File;
+
+import org.eclipse.swt.SWT;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+import org.herac.tuxguitar.app.util.FileChooser;
+import org.herac.tuxguitar.io.base.TGLocalFileImporter;
+import org.herac.tuxguitar.io.base.TGRawImporter;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ImportSongAction extends TGActionBase {
+	
+	public static final String NAME = "action.file.import";
+	
+	public static final String PROPERTY_IMPORTER = "importer";
+	
+	public ImportSongAction() {
+		super(NAME, AUTO_LOCK | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		final Object propertyImporter = context.getAttribute(PROPERTY_IMPORTER);
+		
+		TuxGuitar.instance().getPlayer().reset();
+		
+		if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
+			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
+			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
+			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
+			if( status == ConfirmDialog.STATUS_CANCEL ){
+				TGActionLock.unlock();
+				return;
+			}
+			if(status == ConfirmDialog.STATUS_YES){
+				final String fileName = FileActionUtils.getFileName();
+				if( fileName == null ){
+					TGActionLock.unlock();
+					return;
+				}
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+				new Thread(new Runnable() {
+					public void run() {
+						if(!TuxGuitar.isDisposed()){
+							FileActionUtils.save(fileName);
+							new SyncThread(new Runnable() {
+								public void run() {
+									if(!TuxGuitar.isDisposed()){
+										TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+										processImporter(propertyImporter);
+									}
+								}
+							}).start();
+						}
+					}
+				}).start();
+				return;
+			}
+		}
+		processImporter(propertyImporter);
+	}
+	
+	protected void processImporter(Object importer){
+		if( importer instanceof TGLocalFileImporter ){
+			this.processLocalFileImporter( (TGLocalFileImporter)importer );
+		}else if( importer instanceof TGRawImporter ){
+			this.processRawImporter( (TGRawImporter)importer );
+		}
+	}
+	
+	private void processLocalFileImporter(final TGLocalFileImporter importer){
+		final String path = FileChooser.instance().open(TuxGuitar.instance().getShell(),importer.getFileFormat());
+		if(!isValidFile(path) || !importer.configure(false)){
+			TGActionLock.unlock();
+			return;
+		}
+		
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		new Thread(new Runnable() {
+			public void run() {
+				if(!TuxGuitar.isDisposed()){
+					FileActionUtils.importSong(importer, path);
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+				}
+			}
+		}).start();
+	}
+	
+	private void processRawImporter( final TGRawImporter importer ){
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		new Thread(new Runnable() {
+			public void run() {
+				if(!TuxGuitar.isDisposed()){
+					FileActionUtils.importSong(importer);
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+				}
+			}
+		}).start();
+	}
+	
+	protected boolean isValidFile( String path ){
+		if( path != null ){
+			File file = new File( path );
+			return ( file.exists() && file.isFile() );
+		}
+		return false;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/NewFileAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/NewFileAction.java
new file mode 100644
index 0000000..a0560f6
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/NewFileAction.java
@@ -0,0 +1,96 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import org.eclipse.swt.SWT;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.tools.template.TGTemplate;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class NewFileAction extends TGActionBase{
+	
+	public static final String NAME = "action.file.new";
+	
+	public static final String PROPERTY_TEMPLATE = "template";
+	
+	public NewFileAction() {
+		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		final Object propertyTemplate = context.getAttribute(PROPERTY_TEMPLATE);
+		
+		if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
+			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
+			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
+			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
+			if(status == ConfirmDialog.STATUS_CANCEL){
+				TGActionLock.unlock();
+				return;
+			}
+			if(status == ConfirmDialog.STATUS_YES){
+				final String fileName = FileActionUtils.getFileName();
+				if( fileName == null ){
+					TGActionLock.unlock();
+					return;
+				}
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+				new Thread(new Runnable() {
+					public void run() {
+						if(!TuxGuitar.isDisposed()){
+							FileActionUtils.save(fileName);
+							TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+							new SyncThread(new Runnable() {
+								public void run() {
+									if(!TuxGuitar.isDisposed()){
+										newSong(propertyTemplate);
+									}
+								}
+							}).start();
+						}
+					}
+				}).start();
+				return;
+			}
+		}
+		newSong(propertyTemplate);
+	}
+	
+	protected void newSong(final Object propertyTemplate){
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		new Thread(new Runnable() {
+			public void run() {
+				if(!TuxGuitar.isDisposed()){
+					TuxGuitar.instance().newSong(getTemplate(propertyTemplate));
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+				}
+			}
+		}).start();
+	}
+	
+	protected TGTemplate getTemplate(Object propertyTemplate){
+		TGTemplate tgTemplate = null;
+		if( propertyTemplate instanceof TGTemplate ){
+			tgTemplate = (TGTemplate)propertyTemplate;
+		}
+		if( tgTemplate == null ){
+			tgTemplate = TuxGuitar.instance().getTemplateManager().getDefaultTemplate();
+		}
+		return tgTemplate;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/OpenFileAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/OpenFileAction.java
new file mode 100644
index 0000000..b8ba32f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/OpenFileAction.java
@@ -0,0 +1,124 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import java.io.File;
+import java.net.URL;
+
+import org.eclipse.swt.SWT;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+import org.herac.tuxguitar.app.util.FileChooser;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class OpenFileAction extends TGActionBase {
+	
+	public static final String NAME = "action.file.open";
+	
+	public static final String PROPERTY_URL = "url";
+	
+	public OpenFileAction() {
+		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		final Object propertyUrl = context.getAttribute(PROPERTY_URL);
+		
+		TuxGuitar.instance().getPlayer().reset();
+		
+		if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
+			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
+			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
+			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
+			if( status == ConfirmDialog.STATUS_CANCEL ){
+				TGActionLock.unlock();
+				return;
+			}
+			if(status == ConfirmDialog.STATUS_YES){
+				final String fileName = FileActionUtils.getFileName();
+				if( fileName == null ){
+					TGActionLock.unlock();
+					return;
+				}
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+				new Thread(new Runnable() {
+					public void run() throws TGException {
+						if(!TuxGuitar.isDisposed()){
+							FileActionUtils.save(fileName);
+							new SyncThread(new Runnable() {
+								public void run() throws TGException {
+									if(!TuxGuitar.isDisposed()){
+										TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+										openFile( propertyUrl );
+									}
+								}
+							}).start();
+						}
+					}
+				}).start();
+				return;
+			}
+		}
+		openFile( propertyUrl );
+	}
+	
+	protected void openFile(Object data){
+		final URL url = getOpenFileName(data);
+		if(url == null){
+			TGActionLock.unlock();
+			return;
+		}
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		try {
+			TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					new Thread(new Runnable() {
+						public void run() throws TGException {
+							if(!TuxGuitar.isDisposed()){
+								FileActionUtils.open(url);
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								TGActionLock.unlock();
+							}
+						}
+					}).start();
+				}
+			});
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+	
+	protected URL getOpenFileName(Object data){
+		try{
+			if(data instanceof URL){
+				TuxGuitar.instance().getFileHistory().setChooserPath( (URL)data );
+				return (URL)data;
+			}
+			String path = FileChooser.instance().open(TuxGuitar.instance().getShell(),TGFileFormatManager.instance().getInputFormats());
+			if(path != null){
+				File file = new File(path);
+				if( file.exists() && file.isFile() ){
+					return file.toURI().toURL();
+				}
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/OpenURLAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/OpenURLAction.java
new file mode 100644
index 0000000..5035b0d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/OpenURLAction.java
@@ -0,0 +1,187 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import java.net.URL;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class OpenURLAction extends TGActionBase {
+	
+	public static final String NAME = "action.file.open-url";
+	
+	public static final String PROPERTY_URL = "url";
+	
+	public OpenURLAction() {
+		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		final Object propertyUrl = context.getAttribute(PROPERTY_URL);
+		
+		TuxGuitar.instance().getPlayer().reset();
+		
+		if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
+			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
+			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
+			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
+			if(status == ConfirmDialog.STATUS_CANCEL){
+				TGActionLock.unlock();
+				return;
+			}
+			if(status == ConfirmDialog.STATUS_YES){
+				final String fileName = FileActionUtils.getFileName();
+				if( fileName == null ){
+					TGActionLock.unlock();
+					return;
+				}
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+				new Thread(new Runnable() {
+					public void run() {
+						if(!TuxGuitar.isDisposed()){
+							FileActionUtils.save(fileName);
+							new SyncThread(new Runnable() {
+								public void run() {
+									if(!TuxGuitar.isDisposed()){
+										TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+										openURL( propertyUrl );
+									}
+								}
+							}).start();
+						}
+					}
+				}).start();
+				return;
+			}
+		}
+		openURL( propertyUrl );
+	}
+	
+	protected void openURL(Object data){
+		final URL url = getURL(data);
+		if(url == null){
+			TGActionLock.unlock();
+			return;
+		}
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		new Thread(new Runnable() {
+			public void run() {
+				if(!TuxGuitar.isDisposed()){
+					FileActionUtils.open(url);
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+				}
+			}
+		}).start();
+	}
+	
+	protected URL getURL(Object data){
+		if(data instanceof URL){
+			return (URL)data;
+		}
+		return new URLDialog().openDialog();
+	}
+	
+	protected class URLDialog{
+		
+		protected URL url;
+		
+		protected URL openDialog(){
+			this.url = null;
+			
+			final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("file.open-url"));
+			
+			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			group.setLayout(new GridLayout());
+			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			group.setText(TuxGuitar.getProperty("file.open-url"));
+			
+			Composite composite = new Composite(group, SWT.NONE);
+			composite.setLayout(new GridLayout(2,false));
+			composite.setLayoutData(getMainData());
+			
+			final Label label = new Label(composite,SWT.LEFT);
+			label.setText(TuxGuitar.getProperty("url") + ":");
+			label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+			
+			final Text url = new Text(composite,SWT.BORDER | SWT.SINGLE);
+			url.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					try {
+						URLDialog.this.url = new URL(url.getText());
+						dialog.dispose();
+					} catch (Throwable throwable) {
+						MessageDialog.errorMessage(throwable);
+					}
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+			
+			return this.url;
+		}
+		
+		private GridData getMainData(){
+			GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+			data.minimumWidth = 450;
+			return data;
+		}
+		
+		private GridData getButtonData(){
+			GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+			data.minimumWidth = 80;
+			data.minimumHeight = 25;
+			return data;
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/PrintAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/PrintAction.java
new file mode 100644
index 0000000..eb68005
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/PrintAction.java
@@ -0,0 +1,218 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.printing.PrintDialog;
+import org.eclipse.swt.printing.Printer;
+import org.eclipse.swt.printing.PrinterData;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.editors.TGResourceFactoryImpl;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.printer.PrintController;
+import org.herac.tuxguitar.app.printer.PrintDocument;
+import org.herac.tuxguitar.app.printer.PrintLayout;
+import org.herac.tuxguitar.app.printer.PrintStyles;
+import org.herac.tuxguitar.app.printer.PrintStylesDialog;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.control.TGFactoryImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class PrintAction extends TGActionBase{
+	
+	public static final String NAME = "action.file.print";
+	
+	public PrintAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		try{
+			final PrintStyles data = PrintStylesDialog.open(TuxGuitar.instance().getShell());
+			if(data != null){
+				PrintDialog dialog = new PrintDialog(TuxGuitar.instance().getShell(), SWT.NULL);
+				PrinterData printerData = dialog.open();
+				
+				if (printerData != null) {
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+					
+					this.print(printerData, data);
+				}
+			}
+		}catch(Throwable throwable ){
+			MessageDialog.errorMessage(throwable);
+		}
+	}
+	
+	public void print(final PrinterData printerData ,final PrintStyles data){
+		try{
+			new Thread(new Runnable() {
+				public void run() {
+					try{
+						final TGSongManager manager = new TGSongManager();
+						manager.setFactory(new TGFactoryImpl());
+						manager.setSong(getSongManager().getSong().clone(manager.getFactory()));
+						
+						new SyncThread(new Runnable() {
+							public void run() {
+								try{
+									Printer printer = new Printer(printerData);
+									PrintController controller = new PrintController(manager, new TGResourceFactoryImpl(printer));
+									PrintLayout layout = new PrintLayout(controller,data);
+									
+									print(printer, printerData, layout , getPrinterArea(printer,0.5), getPrinterScale(printer) );
+								}catch(Throwable throwable ){
+									MessageDialog.errorMessage(throwable);
+								}
+							}
+						}).start();
+					}catch(Throwable throwable ){
+						MessageDialog.errorMessage(throwable);
+					}
+				}
+			}).start();
+		}catch(Throwable throwable ){
+			MessageDialog.errorMessage(throwable);
+		}
+	}
+	
+	protected void print(final Printer printer,final PrinterData printerData ,final PrintLayout layout, final TGRectangle bounds, final float scale){
+		new Thread(new Runnable() {
+			public void run() {
+				try{
+					layout.loadStyles(scale);
+					layout.updateSong();
+					layout.makeDocument(new PrintDocumentImpl(layout,printer, printerData, bounds));
+				}catch(Throwable throwable ){
+					MessageDialog.errorMessage(throwable);
+				}
+			}
+		}).start();
+	}
+	
+	protected TGRectangle getPrinterArea(Printer printer,double margin) {
+		Rectangle clientArea = printer.getClientArea();
+		Rectangle trim = printer.computeTrim(0, 0, 0, 0);
+		Point dpi = printer.getDPI();
+		
+		int x = (int) (margin * dpi.x) - trim.x;
+		int y = (int) (margin * dpi.y) - trim.y;
+		int width = clientArea.width + trim.width - (int) (margin * dpi.x) - trim.x;
+		int height = clientArea.height + trim.height - (int) (margin * dpi.y) - trim.y;
+		
+		return new TGRectangle(x,y,width,height);
+	}
+	
+	protected float getPrinterScale(Printer printer) {
+		Point dpi = printer.getDPI();
+		if( dpi != null ){
+			return ( dpi.x / 100.0f );
+		}
+		return 1.0f;
+	}
+	
+	private class PrintDocumentImpl implements PrintDocument{
+		
+		private Printer printer;
+		private PrinterData printerData;
+		private PrintLayout layout;
+		private TGPainterImpl painter;
+		private TGRectangle bounds;
+		private boolean started;
+		
+		public PrintDocumentImpl(PrintLayout layout, Printer printer,PrinterData printerData, TGRectangle bounds){
+			this.layout = layout;
+			this.printer = printer;
+			this.printerData = printerData;
+			this.bounds = bounds;
+			this.painter = new TGPainterImpl();
+		}
+		
+		public TGPainter getPainter() {
+			return this.painter;
+		}
+		
+		public TGRectangle getBounds(){
+			return this.bounds;
+		}
+		
+		public void pageStart() {
+			if(this.started){
+				this.printer.startPage();
+				this.painter.init(new GC(this.printer));
+			}
+		}
+		
+		public void pageFinish() {
+			if(this.started){
+				this.painter.dispose();
+				this.printer.endPage();
+			}
+		}
+		
+		public void start() {
+			this.started = this.printer.startJob(getJobName());
+		}
+		
+		public void finish() {
+			if(this.started){
+				this.printer.endJob();
+				this.started = false;
+				try {
+					TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable(){
+						public void run() throws TGException {
+							dispose();
+						}
+					});
+				} catch (Throwable e) {
+					e.printStackTrace();
+				}
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+			}
+		}
+		
+		public boolean isPaintable(int page){
+			if(this.printerData.scope == PrinterData.PAGE_RANGE){
+				if(this.printerData.startPage > 0 && this.printerData.startPage > page){
+					return false;
+				}
+				if(this.printerData.endPage > 0 && this.printerData.endPage < page){
+					return false;
+				}
+			}
+			return true;
+		}
+		
+		public String getJobName(){
+			String prefix = TuxGuitar.APPLICATION_NAME;
+			String song = this.layout.getSongManager().getSong().getName();
+			return ( song != null && song.length() > 0 ? (prefix + "-" + song) : prefix );
+		}
+		
+		public void dispose(){
+			if(!this.printer.isDisposed()){
+				this.printer.dispose();
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/PrintPreviewAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/PrintPreviewAction.java
new file mode 100644
index 0000000..74baf5e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/PrintPreviewAction.java
@@ -0,0 +1,167 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.editors.TGResourceFactoryImpl;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.printer.PrintController;
+import org.herac.tuxguitar.app.printer.PrintDocument;
+import org.herac.tuxguitar.app.printer.PrintLayout;
+import org.herac.tuxguitar.app.printer.PrintPreview;
+import org.herac.tuxguitar.app.printer.PrintStyles;
+import org.herac.tuxguitar.app.printer.PrintStylesDialog;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.TGFactoryImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class PrintPreviewAction extends TGActionBase{
+	
+	public static final String NAME = "action.file.print-preview";
+	
+	public PrintPreviewAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		try{
+			final PrintStyles data = PrintStylesDialog.open(TuxGuitar.instance().getShell());
+			if(data != null){
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+				
+				this.printPreview(data);
+			}
+		}catch(Throwable throwable){
+			MessageDialog.errorMessage(throwable);
+		}
+	}
+	
+	public void printPreview(final PrintStyles data){
+		new Thread(new Runnable() {
+			public void run() {
+				try{
+					final TGSongManager manager = new TGSongManager();
+					manager.setFactory(new TGFactoryImpl());
+					manager.setSong(getSongManager().getSong().clone(manager.getFactory()));
+				
+					printPreview(manager,data);
+				}catch(Throwable throwable){
+					MessageDialog.errorMessage(throwable);
+				}
+			}
+		}).start();
+	}
+	
+	public void printPreview(final TGSongManager manager, final PrintStyles data){
+		new SyncThread(new Runnable() {
+			public void run() {
+				try{
+					TGResourceFactory factory = new TGResourceFactoryImpl(TuxGuitar.instance().getDisplay());
+					PrintController controller = new PrintController(manager, factory);
+					PrintLayout layout = new PrintLayout(controller,data);
+					
+					printPreview( layout );
+				}catch(Throwable throwable){
+					MessageDialog.errorMessage(throwable);
+				}
+			}
+		}).start();
+	}
+	
+	public void printPreview(final PrintLayout layout){
+		new Thread(new Runnable() {
+			public void run() {
+				try{
+					layout.loadStyles(1f);
+					layout.updateSong();
+					layout.makeDocument(new PrintDocumentImpl(new TGRectangle(0,0,850,1050)));
+				}catch(Throwable throwable){
+					MessageDialog.errorMessage(throwable);
+				}
+			}
+		}).start();
+	}
+	
+	private class PrintDocumentImpl implements PrintDocument{
+		
+		private TGPainterImpl painter;
+		private TGRectangle bounds;
+		private List pages;
+		
+		public PrintDocumentImpl(TGRectangle bounds){
+			this.bounds = bounds;
+			this.painter = new TGPainterImpl();
+			this.pages = new ArrayList();
+		}
+		
+		public TGPainter getPainter() {
+			return this.painter;
+		}
+		
+		public TGRectangle getBounds(){
+			return this.bounds;
+		}
+		
+		public void pageStart() {
+			Image page = new Image(TuxGuitar.instance().getDisplay(),this.bounds.getWidth() - this.bounds.getX(), this.bounds.getHeight() - this.bounds.getY());
+			this.painter.init( page );
+			this.pages.add( page );
+		}
+		
+		public void pageFinish() {
+			this.painter.dispose();
+		}
+		
+		public void start() {
+			// Not implemented
+		}
+		
+		public void finish() {
+			final TGRectangle bounds = this.bounds;
+			final List pages = this.pages;
+			try {
+				TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable(){
+					public void run() throws TGException {
+						PrintPreview preview = new PrintPreview(pages,bounds);
+						preview.showPreview(getEditor().getTablature().getShell());
+						Iterator it = pages.iterator();
+						while(it.hasNext()){
+							Image image = (Image)it.next();
+							image.dispose();
+						}
+					}
+				});
+			} catch (Throwable e) {
+				e.printStackTrace();
+			}
+		}
+		
+		public boolean isPaintable(int page) {
+			return true;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/SaveAsFileAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/SaveAsFileAction.java
new file mode 100644
index 0000000..b456667
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/SaveAsFileAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import org.eclipse.swt.SWT;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SaveAsFileAction extends TGActionBase {
+	
+	public static final String NAME = "action.file.save-as";
+	
+	public SaveAsFileAction() {
+		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE );
+	}
+	
+	protected void processAction(TGActionContext context){
+		final String fileName = FileActionUtils.chooseFileName();
+		if( fileName == null ){
+			TGActionLock.unlock();
+			return;
+		}
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		new Thread(new Runnable() {
+			public void run() {
+				if(!TuxGuitar.isDisposed()){
+					FileActionUtils.save(fileName);
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+				}
+			}
+		}).start();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/SaveFileAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/SaveFileAction.java
new file mode 100644
index 0000000..d4952a2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/file/SaveFileAction.java
@@ -0,0 +1,46 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.file;
+
+import org.eclipse.swt.SWT;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SaveFileAction extends TGActionBase{
+	
+	public static final String NAME = "action.file.save";
+	
+	public SaveFileAction() {
+		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE );
+	}
+	
+	protected void processAction(TGActionContext context){
+		final String fileName = FileActionUtils.getFileName();
+		if( fileName == null ){
+			TGActionLock.unlock();
+			return;
+		}
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		new Thread(new Runnable() {
+			public void run() {
+				if(!TuxGuitar.isDisposed()){
+					FileActionUtils.save(fileName);
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+				}
+			}
+		}).start();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/help/ShowAboutAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/help/ShowAboutAction.java
new file mode 100644
index 0000000..230254a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/help/ShowAboutAction.java
@@ -0,0 +1,36 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.help;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Canvas;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.help.about.AboutDialog;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class ShowAboutAction extends TGActionBase {
+	
+	public static final String NAME = "action.help.about";
+	
+	protected Canvas imageCanvas;
+	protected Image tabImage;
+	
+	public ShowAboutAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK);
+	}
+	
+	protected void processAction(TGActionContext context){
+		new AboutDialog().open(TuxGuitar.instance().getShell());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/help/ShowDocAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/help/ShowDocAction.java
new file mode 100644
index 0000000..97a3b41
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/help/ShowDocAction.java
@@ -0,0 +1,35 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.help;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.help.doc.TGDocumentation;
+import org.herac.tuxguitar.app.util.MessageDialog;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class ShowDocAction extends TGActionBase {
+	
+	public static final String NAME = "action.help.doc";
+	
+	public ShowDocAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | KEY_BINDING_AVAILABLE );
+	}
+	
+	protected void processAction(TGActionContext context){
+		try {
+			new TGDocumentation().display();
+		} catch (Throwable throwable) {
+			MessageDialog.errorMessage(throwable);
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/InsertChordAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/InsertChordAction.java
new file mode 100644
index 0000000..e466ef8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/InsertChordAction.java
@@ -0,0 +1,124 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.insert;
+
+import java.util.Iterator;
+
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.chord.ChordDialog;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class InsertChordAction extends TGActionBase {
+	
+	public static final String NAME = "action.insert.chord";
+	
+	public static final String PROPERTY_CHORD = "chord";
+	
+	public InsertChordAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Object propertyChord = context.getAttribute(PROPERTY_CHORD);
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		TGTrackImpl track = caret.getTrack();
+		TGMeasureImpl measure = caret.getMeasure();
+		TGBeat beat = caret.getSelectedBeat();
+		if (track != null && measure != null && beat != null) {
+			//Si el acorde llego en el data del widget solo lo agrego
+			if( propertyChord instanceof TGChord){
+				TGChord chord = ((TGChord)propertyChord).clone(getSongManager().getFactory());
+				insertChord(chord, track, measure, beat, caret.getVoice());
+			}
+			//sino muestro el editor de acordes
+			else{
+				Shell shell = TuxGuitar.instance().getShell();
+				ChordDialog dialog = new ChordDialog();
+				
+				int result = dialog.open(shell, measure,beat, caret.getPosition());
+				if( result == ChordDialog.RESULT_SAVE ){
+					insertChord(dialog.getChord(), track, measure, beat, caret.getVoice());
+				}
+				else if( result == ChordDialog.RESULT_CLEAN ){
+					removeChord( measure, beat);
+				}
+			}
+		}
+	}
+	
+	protected void insertChord(TGChord chord, TGTrackImpl track, TGMeasureImpl measure, TGBeat beat, int voiceIndex) {
+		boolean restBeat = beat.isRestBeat();
+		if(!restBeat || chord.countNotes() > 0 ) {
+			
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			// Add the chord notes to the tablature
+			// Only if this is a "rest" beat
+			TGVoice voice = beat.getVoice(voiceIndex);
+			if( restBeat ){
+				
+				Iterator it = track.getStrings().iterator();
+				while (it.hasNext()) {
+					TGString string = (TGString) it.next();
+					
+					int value = chord.getFretValue(string.getNumber() - 1);
+					if (value >= 0) {
+						TGNote note = getSongManager().getFactory().newNote();
+						note.setValue(value);
+						note.setVelocity(getEditor().getTablature().getCaret().getVelocity());
+						note.setString(string.getNumber());
+						
+						TGDuration duration = getSongManager().getFactory().newDuration();
+						voice.getDuration().copy(duration);
+						
+						getSongManager().getMeasureManager().addNote(beat,note,duration,voice.getIndex());
+					}
+				}
+			}
+			
+			getSongManager().getMeasureManager().addChord(beat, chord);
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			fireUpdate(measure.getNumber());
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}
+	}
+	
+	protected void removeChord(TGMeasureImpl measure, TGBeat beat) {
+		if( beat.isChordBeat() ){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			getSongManager().getMeasureManager().removeChord(measure, beat.getStart());
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			fireUpdate(measure.getNumber());
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/InsertTextAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/InsertTextAction.java
new file mode 100644
index 0000000..06655e5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/InsertTextAction.java
@@ -0,0 +1,152 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.insert;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGText;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class InsertTextAction extends TGActionBase {
+	
+	public static final String NAME = "action.insert.text";
+	
+	public InsertTextAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		final TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat();
+		
+		showInsertDialog(beat,(beat.getText() == null?new String():beat.getText().getValue()));
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public void showInsertDialog(final TGBeat beat,String value) {
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("text.editor"));
+		
+		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout());
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setText(TuxGuitar.getProperty("text.insert"));
+		
+		Composite composite = new Composite(group, SWT.NONE);
+		composite.setLayout(new GridLayout(2,false));
+		composite.setLayoutData(getMainData());  
+		
+		final Label label = new Label(composite,SWT.LEFT);
+		label.setText(TuxGuitar.getProperty("text.text") + ":");
+		label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Text text = new Text(composite,SWT.BORDER | SWT.SINGLE);
+		text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		text.setText(value);
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				insertText(beat,text.getText());
+				dialog.dispose();
+			}
+		});
+		
+		final Button buttonClean = new Button(buttons, SWT.PUSH);
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.setLayoutData(getButtonData());
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				removeText(beat);
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private GridData getMainData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 300;
+		return data;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected void insertText(TGBeat beat,String value) {
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		TGText text = getSongManager().getFactory().newText();
+		text.setValue(value);
+		getSongManager().getMeasureManager().addText(beat, text);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	protected void removeText(TGBeat beat) {
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		getSongManager().getMeasureManager().removeText(beat);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/RepeatAlternativeAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/RepeatAlternativeAction.java
new file mode 100644
index 0000000..c91d0fc
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/RepeatAlternativeAction.java
@@ -0,0 +1,185 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.insert;
+
+import java.util.Iterator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.UndoableJoined;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeAlternativeRepeat;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeCloseRepeat;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class RepeatAlternativeAction extends TGActionBase{
+	
+	public static final String NAME = "action.insert.repeat-alternative";
+	
+	public RepeatAlternativeAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
+		showCloseRepeatDialog(getEditor().getTablature().getShell(), measure);
+	}
+	
+	public void showCloseRepeatDialog(Shell shell, final TGMeasure measure) {
+		if (measure != null) {
+			int existentEndings = getExistentEndings(measure);
+			int selectedEndings = (measure.getHeader().getRepeatAlternative() > 0)?measure.getHeader().getRepeatAlternative():getDefaultEndings(existentEndings);
+			
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("repeat.alternative.editor"));
+			
+			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			group.setLayout(new GridLayout(4,true));
+			group.setLayoutData(getMainData());
+			group.setText(TuxGuitar.getProperty("repeat.alternative"));
+			
+			final Button[] selections = new Button[8];
+			for(int i = 0; i < selections.length; i ++){
+				boolean enabled = ((existentEndings & (1 << i)) == 0);
+				selections[i] = new Button(group,SWT.CHECK);
+				selections[i].setText(Integer.toString( i + 1 ));
+				selections[i].setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+				selections[i].setEnabled(enabled);
+				selections[i].setSelection(enabled && ((selectedEndings & (1 << i)) != 0)  );
+			}
+			
+			//----------------------BUTTONS--------------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(3,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					int values = 0;
+					for(int i = 0; i < selections.length; i ++){
+						values |=  (  (selections[i].getSelection()) ? (1 << i) : 0  );
+					}
+					update(measure,values);
+					dialog.dispose();
+				}
+			});
+			Button buttonClean = new Button(buttons, SWT.PUSH);
+			buttonClean.setText(TuxGuitar.getProperty("clean"));
+			buttonClean.setLayoutData(getButtonData());
+			buttonClean.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					update(measure,0);
+					dialog.dispose();
+				}
+			});
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getMainData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 350;
+		return data;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected int getExistentEndings(TGMeasure measure){
+		int existentEndings = 0;
+		Iterator it = getSongManager().getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			if(header.getNumber() == measure.getNumber()){
+				break;
+			}
+			if(header.isRepeatOpen()){
+				existentEndings = 0;
+			}
+			existentEndings |= header.getRepeatAlternative();
+		}
+		return existentEndings;
+	}
+	
+	protected int getDefaultEndings(int existentEndings){
+		for(int i = 0; i < 8; i ++){
+			if((existentEndings & (1 << i)) == 0){
+				return (1 << i);
+			}
+		}
+		return -1;
+	}
+	
+	protected void update(TGMeasure measure, int value) {
+		//Solo si hubieron cambios
+		if(value != measure.getHeader().getRepeatAlternative()){
+			//Si no estoy editando, y la alternativa no contiene el primer final,
+			//por defecto se cierra la repeticion del compas anterior
+			boolean previousRepeatClose = (measure.getHeader().getRepeatAlternative() == 0 && ((value & (1 << 0)) == 0)) ;
+			
+			//comienza el undoable
+			UndoableJoined undoable = new UndoableJoined();
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			//Guardo la repeticion alternativa
+			UndoableChangeAlternativeRepeat u1 = UndoableChangeAlternativeRepeat.startUndo();
+			getSongManager().changeAlternativeRepeat(measure.getStart(), value);
+			fireUpdate(measure.getNumber());
+			undoable.addUndoableEdit(u1.endUndo(value));
+			
+			if(previousRepeatClose){
+				//Agrego un cierre de repeticion al compaz anterior
+				TGMeasureHeader previous = getSongManager().getMeasureHeader( measure.getNumber() - 1);
+				if(previous != null && previous.getRepeatClose() == 0){
+					UndoableChangeCloseRepeat u2 = UndoableChangeCloseRepeat.startUndo(previous.getStart(),previous.getRepeatClose());
+					getSongManager().changeCloseRepeat(previous.getStart(), 1);
+					fireUpdate(previous.getNumber());
+					undoable.addUndoableEdit(u2.endUndo(1));
+				}
+			}
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/RepeatCloseAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/RepeatCloseAction.java
new file mode 100644
index 0000000..0e2352c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/RepeatCloseAction.java
@@ -0,0 +1,142 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.insert;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeCloseRepeat;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class RepeatCloseAction extends TGActionBase{
+	
+	public static final String NAME = "action.insert.close-repeat";
+	
+	public RepeatCloseAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		showCloseRepeatDialog(getEditor().getTablature().getShell(), measure);
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+	
+	public void showCloseRepeatDialog(Shell shell, final TGMeasureImpl measure) {
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("repeat.close"));
+			
+			int currentRepeatClose = measure.getRepeatClose();
+			if (currentRepeatClose < 1) {
+				currentRepeatClose = 1;
+			}
+			
+			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			group.setLayout(new GridLayout(2,false));
+			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			group.setText(TuxGuitar.getProperty("repeat.close"));
+			
+			Label repeatCloseLabel = new Label(group, SWT.NULL);
+			repeatCloseLabel.setText(TuxGuitar.getProperty("repeat.number-of-repetitions"));
+			
+			final Spinner repeatClose = new Spinner(group, SWT.BORDER);
+			repeatClose.setMinimum(0);
+			repeatClose.setMaximum(100);
+			repeatClose.setSelection(currentRepeatClose);
+			repeatClose.setLayoutData(getSpinnerData());
+			
+			//----------------------BUTTONS--------------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(3,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					closeRepeat(measure,repeatClose.getSelection());
+					dialog.dispose();
+				}
+			});
+			Button buttonClean = new Button(buttons, SWT.PUSH);
+			buttonClean.setText(TuxGuitar.getProperty("clean"));
+			buttonClean.setLayoutData(getButtonData());
+			buttonClean.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					closeRepeat(measure,0);
+					dialog.dispose();
+				}
+			});
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 100;
+		return data;
+	}
+	
+	protected void closeRepeat(TGMeasureImpl measure, int repeatClose) {
+		if(repeatClose >= 0){
+			
+			//comienza el undoable
+			UndoableChangeCloseRepeat undoable = UndoableChangeCloseRepeat.startUndo();
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			//numberOfRepetitions = Math.abs(numberOfRepetitions);
+			getSongManager().changeCloseRepeat(measure.getStart(), repeatClose);
+			updateTablature();
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo(repeatClose));
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/RepeatOpenAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/RepeatOpenAction.java
new file mode 100644
index 0000000..40688a0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/insert/RepeatOpenAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.insert;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeOpenRepeat;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class RepeatOpenAction extends TGActionBase{
+	
+	public static final String NAME = "action.insert.open-repeat";
+	
+	public RepeatOpenAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableChangeOpenRepeat undoable = UndoableChangeOpenRepeat.startUndo();
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		getSongManager().changeOpenRepeat(measure.getStart());
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetChordDiagramEnabledAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetChordDiagramEnabledAction.java
new file mode 100644
index 0000000..0364238
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetChordDiagramEnabledAction.java
@@ -0,0 +1,32 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.layout;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetChordDiagramEnabledAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.layout-set-chord-diagram-enabled";
+	
+	public SetChordDiagramEnabledAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_CHORD_DIAGRAM) );
+		updateTablature();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetChordNameEnabledAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetChordNameEnabledAction.java
new file mode 100644
index 0000000..0ed4461
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetChordNameEnabledAction.java
@@ -0,0 +1,32 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.layout;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetChordNameEnabledAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.layout-set-chord-name-enabled";
+	
+	public SetChordNameEnabledAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_CHORD_NAME ) );
+		updateTablature();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetCompactViewAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetCompactViewAction.java
new file mode 100644
index 0000000..e9b8195
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetCompactViewAction.java
@@ -0,0 +1,32 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.layout;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetCompactViewAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.layout-set-compact";
+	
+	public SetCompactViewAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_COMPACT ) );
+		updateTablature();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetLinearLayoutAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetLinearLayoutAction.java
new file mode 100644
index 0000000..c0a38d1
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetLinearLayoutAction.java
@@ -0,0 +1,33 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.layout;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Tablature;
+import org.herac.tuxguitar.graphics.control.TGLayoutHorizontal;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetLinearLayoutAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.layout-set-linear";
+	
+	public SetLinearLayoutAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Tablature tablature = getEditor().getTablature();
+		tablature.setViewLayout(new TGLayoutHorizontal(tablature,tablature.getViewLayout().getStyle()));
+		updateTablature();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetMultitrackViewAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetMultitrackViewAction.java
new file mode 100644
index 0000000..488c305
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetMultitrackViewAction.java
@@ -0,0 +1,32 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.layout;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetMultitrackViewAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.layout-set-multitrack";
+	
+	public SetMultitrackViewAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_MULTITRACK ) );
+		updateTablature();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetPageLayoutAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetPageLayoutAction.java
new file mode 100644
index 0000000..a0ceee6
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetPageLayoutAction.java
@@ -0,0 +1,33 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.layout;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Tablature;
+import org.herac.tuxguitar.graphics.control.TGLayoutVertical;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetPageLayoutAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.layout-set-page";
+	
+	public SetPageLayoutAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Tablature tablature = getEditor().getTablature();
+		tablature.setViewLayout(new TGLayoutVertical(tablature,tablature.getViewLayout().getStyle()));
+		updateTablature();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetScoreEnabledAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetScoreEnabledAction.java
new file mode 100644
index 0000000..6c1ecf9
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetScoreEnabledAction.java
@@ -0,0 +1,35 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.layout;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetScoreEnabledAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.layout-set-score-enabled";
+	
+	public SetScoreEnabledAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_SCORE ) );
+		if((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) == 0 && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+			layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_TABLATURE) );
+		}
+		updateTablature();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetTablatureEnabledAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetTablatureEnabledAction.java
new file mode 100644
index 0000000..a84c83f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/layout/SetTablatureEnabledAction.java
@@ -0,0 +1,35 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.layout;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetTablatureEnabledAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.layout-set-tablature-enabled";
+	
+	public SetTablatureEnabledAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_TABLATURE ) );
+		if((layout.getStyle() & TGLayout.DISPLAY_TABLATURE) == 0 && (layout.getStyle() & TGLayout.DISPLAY_SCORE) == 0 ){
+			layout.setStyle( ( layout.getStyle() ^ TGLayout.DISPLAY_SCORE ) );
+		}
+		updateTablature();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/AddMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/AddMarkerAction.java
new file mode 100644
index 0000000..4764993
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/AddMarkerAction.java
@@ -0,0 +1,48 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.marker;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.marker.MarkerEditor;
+import org.herac.tuxguitar.app.marker.MarkerList;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.models.TGMarker;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class AddMarkerAction extends TGActionBase{
+	
+	public static final String NAME = "action.marker.add";
+	
+	public AddMarkerAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(new MarkerEditor(getMarker()).open(getEditor().getTablature().getShell())){
+			MarkerList.instance().update(true);
+		}
+	}
+	
+	private TGMarker getMarker(){
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			TGMarker marker = getSongManager().getMarker(measure.getNumber());
+			if(marker == null){
+				marker = getSongManager().getFactory().newMarker();
+				marker.setMeasure(measure.getNumber());
+			}
+			return marker;
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoFirstMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoFirstMarkerAction.java
new file mode 100644
index 0000000..7f59e65
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoFirstMarkerAction.java
@@ -0,0 +1,30 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.marker;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.marker.MarkerNavigator;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoFirstMarkerAction extends TGActionBase{
+	
+	public static final String NAME = "action.marker.go-first";
+	
+	public GoFirstMarkerAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		new MarkerNavigator().goToSelectedMarker(getSongManager().getFirstMarker());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoLastMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoLastMarkerAction.java
new file mode 100644
index 0000000..31a7439
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoLastMarkerAction.java
@@ -0,0 +1,30 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.marker;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.marker.MarkerNavigator;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoLastMarkerAction extends TGActionBase{
+	
+	public static final String NAME = "action.marker.go-last";
+	
+	public GoLastMarkerAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		new MarkerNavigator().goToSelectedMarker(getSongManager().getLastMarker());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoNextMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoNextMarkerAction.java
new file mode 100644
index 0000000..5a12b5b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoNextMarkerAction.java
@@ -0,0 +1,33 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.marker;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.marker.MarkerNavigator;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoNextMarkerAction extends TGActionBase{
+	
+	public static final String NAME = "action.marker.go-next";
+	
+	public GoNextMarkerAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE );
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		
+		new MarkerNavigator().goToSelectedMarker(getSongManager().getNextMarker(caret.getMeasure().getNumber()));
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoPreviousMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoPreviousMarkerAction.java
new file mode 100644
index 0000000..4cae056
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/GoPreviousMarkerAction.java
@@ -0,0 +1,33 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.marker;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.marker.MarkerNavigator;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoPreviousMarkerAction extends TGActionBase{
+	
+	public static final String NAME = "action.marker.go-previous";
+	
+	public GoPreviousMarkerAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		
+		new MarkerNavigator().goToSelectedMarker(getSongManager().getPreviousMarker(caret.getMeasure().getNumber()));
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/ListMarkersAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/ListMarkersAction.java
new file mode 100644
index 0000000..d12cea8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/marker/ListMarkersAction.java
@@ -0,0 +1,35 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.marker;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.marker.MarkerList;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ListMarkersAction extends TGActionBase{
+	
+	public static final String NAME = "action.marker.list";
+	
+	public ListMarkersAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if( MarkerList.instance().isDisposed() ){
+			MarkerList.instance().show();
+		}
+		else{
+			MarkerList.instance().dispose();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/AddMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/AddMeasureAction.java
new file mode 100644
index 0000000..b4e49d5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/AddMeasureAction.java
@@ -0,0 +1,169 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.measure;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.undo.undoables.UndoableJoined;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableAddMeasure;
+import org.herac.tuxguitar.app.util.DialogUtils;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class AddMeasureAction extends TGActionBase{
+	
+	public static final String NAME = "action.measure.add";
+	
+	public AddMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog();
+	}
+	
+	public void showDialog() {
+		if (getEditor().getTablature().getCaret().getMeasure() != null) {
+			final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("measure.add"));
+			
+			//-----------------COUNT------------------------
+			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			group.setLayout(new GridLayout(2,false));
+			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			group.setText(TuxGuitar.getProperty("measure.add"));
+			
+			Label countLabel = new Label(group, SWT.NULL);
+			countLabel.setText(TuxGuitar.getProperty("measure.add.count"));
+			
+			final Spinner countSpinner = new Spinner(group, SWT.BORDER);
+			countSpinner.setLayoutData(getSpinnerData());
+			countSpinner.setMinimum( 1 );
+			countSpinner.setMaximum( 100 );
+			countSpinner.setSelection( 1 );
+			
+			//----------------------------------------------------------------------
+			Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			options.setLayout(new GridLayout());
+			options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			options.setText(TuxGuitar.getProperty("options"));
+			
+			final Button beforePosition = new Button(options,SWT.RADIO);
+			beforePosition.setText(TuxGuitar.getProperty("measure.add-before-current-position"));
+			
+			final Button afterPosition = new Button(options,SWT.RADIO);
+			afterPosition.setText(TuxGuitar.getProperty("measure.add-after-current-position"));
+			
+			final Button atEnd = new Button(options,SWT.RADIO);
+			atEnd.setText(TuxGuitar.getProperty("measure.add-at-end"));
+			atEnd.setSelection(true);
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					int number = 0;
+					int count = countSpinner.getSelection();
+					if(beforePosition.getSelection()){
+						number = (getEditor().getTablature().getCaret().getMeasure().getNumber());
+					}else if(afterPosition.getSelection()){
+						number = (getEditor().getTablature().getCaret().getMeasure().getNumber() + 1);
+					}else if(atEnd.getSelection()){
+						number = (getSongManager().getSong().countMeasureHeaders() + 1);
+					}
+					addMeasure(number, count);
+					dialog.dispose();
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 150;
+		return data;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private void addMeasure( final int number , final int count ){
+		if(count > 0 && number > 0 && number <=  (getSongManager().getSong().countMeasureHeaders() + 1)){
+			new Thread(new Runnable() {
+				public void run() {
+					new SyncThread(new Runnable() {
+						public void run() {
+							UndoableJoined undoable = new UndoableJoined();
+							for( int i = 0 ; i < count ; i ++ ){
+								//comienza el undoable
+								UndoableAddMeasure mUndoable = UndoableAddMeasure.startUndo( ( number + i ) );
+								
+								getSongManager().addNewMeasure( ( number + i ) );
+								
+								//termia el undoable
+								undoable.addUndoableEdit(mUndoable.endUndo());
+								
+							}
+							updateTablature();
+							
+							int trackNumber = getEditor().getTablature().getCaret().getTrack().getNumber();
+							int stringNumber = getEditor().getTablature().getCaret().getStringNumber();
+							long start = getSongManager().getMeasureHeader(number).getStart();
+							getEditor().getTablature().getCaret().update(trackNumber,start,stringNumber);
+							
+							//termia el undoable
+							addUndoableEdit( undoable.endUndo() );
+							
+							TuxGuitar.instance().getFileHistory().setUnsavedFile();
+							TuxGuitar.instance().updateCache(true);
+						}
+					}).start();
+				}
+			}).start();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/CleanMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/CleanMeasureAction.java
new file mode 100644
index 0000000..e95298c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/CleanMeasureAction.java
@@ -0,0 +1,179 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.measure;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.UndoableJoined;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class CleanMeasureAction extends TGActionBase{
+	
+	public static final String NAME = "action.measure.clean";
+	
+	public CleanMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(TuxGuitar.instance().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("measure.clean"));
+			
+			//----------------------------------------------------------------------
+			Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			range.setLayout(new GridLayout(2,false));
+			range.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			range.setText(TuxGuitar.getProperty("measure.clean"));
+			
+			int measureCount = getSongManager().getSong().countMeasureHeaders();
+			
+			Label fromLabel = new Label(range, SWT.NULL);
+			fromLabel.setText(TuxGuitar.getProperty("edit.from"));
+			final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
+			fromSpinner.setLayoutData(getSpinnerData());
+			fromSpinner.setMinimum(1);
+			fromSpinner.setMaximum(measureCount);
+			fromSpinner.setSelection(measure.getNumber());
+			
+			Label toLabel = new Label(range, SWT.NULL);
+			toLabel.setText(TuxGuitar.getProperty("edit.to"));
+			final Spinner toSpinner = new Spinner(range, SWT.BORDER);
+			toSpinner.setLayoutData(getSpinnerData());
+			toSpinner.setMinimum(1);
+			toSpinner.setMaximum(measureCount);
+			toSpinner.setSelection(measure.getNumber());
+			
+			final int minSelection = 1;
+			final int maxSelection = track.countMeasures();
+			
+			fromSpinner.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					int fromSelection = fromSpinner.getSelection();
+					int toSelection = toSpinner.getSelection();
+					
+					if(fromSelection < minSelection){
+						fromSpinner.setSelection(minSelection);
+					}else if(fromSelection > toSelection){
+						fromSpinner.setSelection(toSelection);
+					}
+				}
+			});
+			toSpinner.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					int toSelection = toSpinner.getSelection();
+					int fromSelection = fromSpinner.getSelection();
+					if(toSelection < fromSelection){
+						toSpinner.setSelection(fromSelection);
+					}else if(toSelection > maxSelection){
+						toSpinner.setSelection(maxSelection);
+					}
+				}
+			});
+			
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					cleanMeasures(fromSpinner.getSelection(),toSpinner.getSelection());
+					dialog.dispose();
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 180;
+		return data;
+	}
+	
+	public void cleanMeasures(int m1,int m2){
+		if(m1 > 0 && m1 <= m2){
+			//comienza el undoable
+			UndoableJoined undoable = new UndoableJoined();
+			
+			Caret caret = getEditor().getTablature().getCaret();
+			for( int number = m1 ; number <= m2 ; number ++ ){
+				TGMeasure measure = getSongManager().getTrackManager().getMeasure( caret.getTrack() , number );
+				if( measure != null ){
+					//comienza el undoable
+					UndoableMeasureGeneric mUndoable = UndoableMeasureGeneric.startUndo( measure );
+					
+					getSongManager().getMeasureManager().cleanMeasure( measure );
+					
+					//termia el undoable
+					undoable.addUndoableEdit( mUndoable.endUndo( measure ) );
+				}
+			}
+			
+			//termia el undoable
+			if( ! undoable.isEmpty()){
+				addUndoableEdit(undoable.endUndo());
+			}
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			updateTablature();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/CopyMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/CopyMeasureAction.java
new file mode 100644
index 0000000..aea1776
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/CopyMeasureAction.java
@@ -0,0 +1,172 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.measure;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.clipboard.MeasureTransferable;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class CopyMeasureAction extends TGActionBase{
+	
+	public static final String NAME = "action.measure.copy";
+	
+	protected boolean copyAllTracks;
+	
+	public CopyMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("edit.copy"));
+			
+			//----------------------------------------------------------------------
+			Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			range.setLayout(new GridLayout(2,false));
+			range.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			range.setText(TuxGuitar.getProperty("edit.copy"));
+			
+			int measureCount = getSongManager().getSong().countMeasureHeaders();
+			
+			Label fromLabel = new Label(range, SWT.NULL);
+			fromLabel.setText(TuxGuitar.getProperty("edit.from"));
+			final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
+			fromSpinner.setLayoutData(getSpinnerData());
+			fromSpinner.setMinimum(1);
+			fromSpinner.setMaximum(measureCount);
+			fromSpinner.setSelection(measure.getNumber());
+			
+			Label toLabel = new Label(range, SWT.NULL);
+			toLabel.setText(TuxGuitar.getProperty("edit.to"));
+			final Spinner toSpinner = new Spinner(range, SWT.BORDER);
+			toSpinner.setLayoutData(getSpinnerData());
+			toSpinner.setMinimum(1);
+			toSpinner.setMaximum(measureCount);
+			toSpinner.setSelection(measure.getNumber());
+			
+			final int minSelection = 1;
+			final int maxSelection = track.countMeasures();
+			
+			fromSpinner.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					int fromSelection = fromSpinner.getSelection();
+					int toSelection = toSpinner.getSelection();
+					
+					if(fromSelection < minSelection){
+						fromSpinner.setSelection(minSelection);
+					}else if(fromSelection > toSelection){
+						fromSpinner.setSelection(toSelection);
+					}
+				}
+			});
+			toSpinner.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					int toSelection = toSpinner.getSelection();
+					int fromSelection = fromSpinner.getSelection();
+					if(toSelection < fromSelection){
+						toSpinner.setSelection(fromSelection);
+					}else if(toSelection > maxSelection){
+						toSpinner.setSelection(maxSelection);
+					}
+				}
+			});
+			//----------------------------------------------------------------------
+			this.copyAllTracks = true;
+			if(getSongManager().getSong().countTracks() > 1){
+				Group checkComposites = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+				checkComposites.setLayout(new GridLayout());
+				checkComposites.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+				checkComposites.setText(TuxGuitar.getProperty("options"));
+				
+				final Button allTracks = new Button(checkComposites,SWT.CHECK);
+				allTracks.setText(TuxGuitar.getProperty("edit.all-tracks"));
+				allTracks.setSelection(this.copyAllTracks);
+				allTracks.addSelectionListener(new SelectionAdapter() {
+					public void widgetSelected(SelectionEvent e) {
+						CopyMeasureAction.this.copyAllTracks = allTracks.getSelection();
+					}
+				});
+			}
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					copyMeasures(fromSpinner.getSelection(),toSpinner.getSelection(),CopyMeasureAction.this.copyAllTracks);
+					dialog.dispose();
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 180;
+		return data;
+	}
+	
+	protected void copyMeasures(int m1,int m2,boolean allTracks){
+		if(m1 > 0 && m1 <= m2){
+			MeasureTransferable transferable = new MeasureTransferable(getEditor(),m1,m2,allTracks);
+			getEditor().getClipBoard().addTransferable(transferable);
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoFirstMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoFirstMeasureAction.java
new file mode 100644
index 0000000..66b6def
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoFirstMeasureAction.java
@@ -0,0 +1,43 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.measure;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoFirstMeasureAction extends TGActionBase{
+	
+	public static final String NAME = "action.measure.go-first";
+	
+	public GoFirstMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			TuxGuitar.instance().getTransport().gotoFirst();
+		}
+		else{
+			Caret caret = getEditor().getTablature().getCaret();
+			TGTrackImpl track = caret.getTrack();
+			TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getFirstMeasure(track);
+			if(track != null && measure != null){
+				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoLastMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoLastMeasureAction.java
new file mode 100644
index 0000000..c3e97ad
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoLastMeasureAction.java
@@ -0,0 +1,43 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.measure;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoLastMeasureAction extends TGActionBase{
+	
+	public static final String NAME = "action.measure.go-last";
+	
+	public GoLastMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			TuxGuitar.instance().getTransport().gotoLast();
+		}
+		else{
+			Caret caret = getEditor().getTablature().getCaret();
+			TGTrackImpl track = caret.getTrack();
+			TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getLastMeasure(track);
+			if(track != null && measure != null){
+				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoNextMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoNextMeasureAction.java
new file mode 100644
index 0000000..6234ee0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoNextMeasureAction.java
@@ -0,0 +1,65 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.measure;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableAddMeasure;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoNextMeasureAction extends TGActionBase{
+	
+	public static final String NAME = "action.measure.go-next";
+	
+	public GoNextMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		//si es el ultimo compas, agrego uno nuevo
+		if(getSongManager().getTrackManager().isLastMeasure(caret.getMeasure())){
+			int number = (getSongManager().getSong().countMeasureHeaders() + 1);
+			
+			//comienza el undoable
+			UndoableAddMeasure undoable = UndoableAddMeasure.startUndo(number);
+			
+			this.getSongManager().addNewMeasure(number);
+			this.fireUpdate(number);
+			this.moveToNext();
+			
+			//termia el undoable
+			this.addUndoableEdit(undoable.endUndo());
+		}
+		else{
+			this.moveToNext();
+		}
+	}
+	
+	private void moveToNext(){
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			TuxGuitar.instance().getTransport().gotoNext();
+		}
+		else{
+			Caret caret = getEditor().getTablature().getCaret();
+			TGTrackImpl track = caret.getTrack();
+			TGMeasure measure = getSongManager().getTrackManager().getNextMeasure(caret.getMeasure());
+			if(track != null && measure != null){
+				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoPreviousMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoPreviousMeasureAction.java
new file mode 100644
index 0000000..1a225e8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/GoPreviousMeasureAction.java
@@ -0,0 +1,43 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.measure;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoPreviousMeasureAction extends TGActionBase{
+	
+	public static final String NAME = "action.measure.go-previous";
+	
+	public GoPreviousMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			TuxGuitar.instance().getTransport().gotoPrevious();
+		}
+		else{
+			Caret caret = getEditor().getTablature().getCaret();
+			TGTrackImpl track = caret.getTrack();
+			TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getPrevMeasure(caret.getMeasure());
+			if(track != null && measure != null){
+				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/PasteMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/PasteMeasureAction.java
new file mode 100644
index 0000000..1e3e173
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/PasteMeasureAction.java
@@ -0,0 +1,150 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.measure;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.clipboard.CannotInsertTransferException;
+import org.herac.tuxguitar.app.clipboard.MeasureTransferable;
+import org.herac.tuxguitar.app.clipboard.Transferable;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class PasteMeasureAction extends TGActionBase{
+	
+	public static final String NAME = "action.measure.paste";
+	
+	public PasteMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("edit.paste"));
+			
+			//-----------------COUNT------------------------
+			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			group.setLayout(new GridLayout(2,false));
+			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			group.setText(TuxGuitar.getProperty("edit.paste"));
+			
+			Label countLabel = new Label(group, SWT.NULL);
+			countLabel.setText(TuxGuitar.getProperty("edit.paste.count"));
+			
+			final Spinner countSpinner = new Spinner(group, SWT.BORDER);
+			countSpinner.setLayoutData(getSpinnerData());
+			countSpinner.setMinimum( 1 );
+			countSpinner.setMaximum( 100 );
+			countSpinner.setSelection( 1 );
+			
+			//----------------------------------------------------------------------
+			Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			options.setLayout(new GridLayout());
+			options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			options.setText(TuxGuitar.getProperty("options"));
+			
+			final Button replace = new Button(options,SWT.RADIO);
+			replace.setText(TuxGuitar.getProperty("edit.paste.replace-mode"));
+			replace.setSelection(true);
+			
+			final Button insert = new Button(options,SWT.RADIO);
+			insert.setText(TuxGuitar.getProperty("edit.paste.insert-mode"));
+			
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					int pasteMode = 0;
+					int pasteCount = countSpinner.getSelection();
+					if( replace.getSelection() ){
+						pasteMode = MeasureTransferable.TRANSFER_TYPE_REPLACE;
+					}else if(insert.getSelection()){
+						pasteMode = MeasureTransferable.TRANSFER_TYPE_INSERT;
+					}
+					pasteMeasures( pasteMode , pasteCount);
+					
+					dialog.dispose();
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 150;
+		return data;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected void pasteMeasures(int pasteMode, int pasteCount){
+		try {
+			if( pasteMode > 0 && pasteCount > 0 ){
+				Transferable transferable = getEditor().getClipBoard().getTransferable();
+				if(transferable instanceof MeasureTransferable){
+					((MeasureTransferable)transferable).setTransferType( pasteMode );
+					((MeasureTransferable)transferable).setPasteCount( pasteCount );
+					
+					transferable.insertTransfer();
+					
+					updateTablature();
+				}
+			}
+		} catch (CannotInsertTransferException ex) {
+			ex.printStackTrace();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/RemoveMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/RemoveMeasureAction.java
new file mode 100644
index 0000000..9af23ab
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/measure/RemoveMeasureAction.java
@@ -0,0 +1,179 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.measure;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableRemoveMeasure;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class RemoveMeasureAction extends TGActionBase{
+	
+	public static final String NAME = "action.measure.remove";
+	
+	public RemoveMeasureAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
+		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
+		if (measure != null) {
+			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("edit.delete"));
+			
+			//----------------------------------------------------------------------
+			Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			range.setLayout(new GridLayout(2,false));
+			range.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			range.setText(TuxGuitar.getProperty("edit.delete"));
+			
+			int measureCount = getSongManager().getSong().countMeasureHeaders();
+			
+			Label fromLabel = new Label(range, SWT.NULL);
+			fromLabel.setText(TuxGuitar.getProperty("edit.from"));
+			final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
+			fromSpinner.setLayoutData(getSpinnerData());
+			fromSpinner.setMinimum(1);
+			fromSpinner.setMaximum(measureCount);
+			fromSpinner.setSelection(measure.getNumber());
+			
+			Label toLabel = new Label(range, SWT.NULL);
+			toLabel.setText(TuxGuitar.getProperty("edit.to"));
+			final Spinner toSpinner = new Spinner(range, SWT.BORDER);
+			toSpinner.setLayoutData(getSpinnerData());
+			toSpinner.setMinimum(1);
+			toSpinner.setMaximum(measureCount);
+			toSpinner.setSelection(measure.getNumber());
+			
+			final int minSelection = 1;
+			final int maxSelection = track.countMeasures();
+			
+			fromSpinner.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					int fromSelection = fromSpinner.getSelection();
+					int toSelection = toSpinner.getSelection();
+					
+					if(fromSelection < minSelection){
+						fromSpinner.setSelection(minSelection);
+					}else if(fromSelection > toSelection){
+						fromSpinner.setSelection(toSelection);
+					}
+				}
+			});
+			toSpinner.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					int toSelection = toSpinner.getSelection();
+					int fromSelection = fromSpinner.getSelection();
+					if(toSelection < fromSelection){
+						toSpinner.setSelection(fromSelection);
+					}else if(toSelection > maxSelection){
+						toSpinner.setSelection(maxSelection);
+					}
+				}
+			});
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					removeMeasures(fromSpinner.getSelection(),toSpinner.getSelection()/*,event*/);
+					dialog.dispose();
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 180;
+		return data;
+	}
+	
+	protected void removeMeasures(int m1,int m2/*,TypedEvent event*/){
+		if(m1 > 0 && m1 <= m2 && m2 <= getSongManager().getSong().countMeasureHeaders()){
+			Caret caret = getEditor().getTablature().getCaret();
+			
+			if(m1 == 1 && m2 == getSongManager().getSong().countMeasureHeaders()){
+				//TuxGuitar.instance().getAction(NewFileAction.NAME).process(event);
+				TuxGuitar.instance().newSong();
+				return;
+			}
+			//comienza el undoable
+			UndoableRemoveMeasure undoable = new UndoableRemoveMeasure(m1,m2);
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			//borro los compases
+			getSongManager().removeMeasureHeaders(m1,m2);
+			
+			updateTablature();
+			
+			int measureCount = getSongManager().getSong().countMeasureHeaders();
+			if(caret.getMeasure().getNumber() > measureCount){
+				TGTrack track = getSongManager().getTrack(caret.getTrack().getNumber());
+				TGMeasure measure = getSongManager().getTrackManager().getMeasure(track,measureCount);
+				caret.update(track.getNumber(),measure.getStart(),1);
+			}
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ChangeNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ChangeNoteAction.java
new file mode 100644
index 0000000..6fed52a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ChangeNoteAction.java
@@ -0,0 +1,125 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeNoteAction extends TGActionBase {
+	
+	private static final String NAME = "action.note.general.change";
+	
+	public static final String PROPERTY_TRACK = "track";
+	public static final String PROPERTY_START = "start";
+	public static final String PROPERTY_FRET = "fret";
+	public static final String PROPERTY_STRING = "string";
+	public static final String PROPERTY_VELOCITY = "velocity";
+	public static final String PROPERTY_DURATION = "duration";
+	
+	public ChangeNoteAction() {
+		this(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING);
+	}
+	
+	protected ChangeNoteAction(String name, int flags) {
+		super(name, flags);
+	}
+	
+	protected void processAction(TGActionContext context){
+		long start = getPropertyStart(context);
+		int fret = getPropertyFret(context);
+		int string = getPropertyString(context);
+		int velocity = getPropertyVelocity(context);
+		TGDuration tgDuration = getPropertyDuration(context);
+		
+		TGTrack track = getSongManager().getTrack( getPropertyTrack(context) );
+		TGMeasure measure = (track != null ? getSongManager().getTrackManager().getMeasureAt(track, start) : null);
+		
+		if( track != null && measure != null && fret >= 0) {
+			this.addNote(measure, tgDuration, start, fret, string, velocity);
+			this.fireUpdate(measure.getNumber());
+		}
+	}
+	
+	private void addNote(TGMeasure measure,TGDuration duration, long start, int value,int string, int velocity) {
+		TGNote note = getSongManager().getFactory().newNote();
+		note.setValue(value);
+		note.setVelocity(velocity);
+		note.setString(string);
+		
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		getSongManager().getMeasureManager().addNote(measure,start,note,duration.clone(getSongManager().getFactory()), getEditor().getTablature().getCaret().getVoice());
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+		
+		//reprodusco las notas en el pulso
+		TuxGuitar.instance().playBeat(getEditor().getTablature().getCaret().getSelectedBeat());
+	}
+	
+	private long getPropertyStart(TGActionContext context){
+		Object propertyValue = context.getAttribute(PROPERTY_START);
+		if( propertyValue instanceof Long ){
+			return ((Long)propertyValue).longValue();
+		}
+		return getEditor().getTablature().getCaret().getPosition();
+	}
+	
+	private int getPropertyTrack(TGActionContext context){
+		Object propertyValue = context.getAttribute(PROPERTY_TRACK);
+		if( propertyValue instanceof Integer ){
+			return ((Integer)propertyValue).intValue();
+		}
+		return getEditor().getTablature().getCaret().getTrack().getNumber();
+	}
+	
+	private int getPropertyVelocity(TGActionContext context){
+		Object propertyValue = context.getAttribute(PROPERTY_VELOCITY);
+		if( propertyValue instanceof Integer ){
+			return ((Integer)propertyValue).intValue();
+		}
+		return getEditor().getTablature().getCaret().getVelocity();
+	}
+	
+	private TGDuration getPropertyDuration(TGActionContext context){
+		Object propertyValue = context.getAttribute(PROPERTY_DURATION);
+		if( propertyValue instanceof TGDuration ){
+			return ((TGDuration)propertyValue);
+		}
+		return getEditor().getTablature().getCaret().getDuration();
+	}
+	
+	private int getPropertyString(TGActionContext context){
+		Object propertyValue = context.getAttribute(PROPERTY_STRING);
+		if( propertyValue instanceof Integer ){
+			return ((Integer)propertyValue).intValue();
+		}
+		return getEditor().getTablature().getCaret().getSelectedString().getNumber();
+	}
+	
+	private int getPropertyFret(TGActionContext context){
+		Object propertyValue = context.getAttribute(PROPERTY_FRET);
+		if( propertyValue instanceof Integer ){
+			return ((Integer)propertyValue).intValue();
+		}
+		return -1;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ChangeTiedNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ChangeTiedNoteAction.java
new file mode 100644
index 0000000..afb0af2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ChangeTiedNoteAction.java
@@ -0,0 +1,99 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTiedNoteAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.general.tied";
+	
+	public ChangeTiedNoteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		if(caret.getSelectedNote() != null){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			getSongManager().getMeasureManager().changeTieNote(caret.getSelectedNote());
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}else{
+			TGNote note = getSongManager().getFactory().newNote();
+			note.setValue(0);
+			note.setVelocity(caret.getVelocity());
+			note.setString(caret.getSelectedString().getNumber());
+			note.setTiedNote(true);
+			
+			TGDuration duration = getSongManager().getFactory().newDuration();
+			caret.getDuration().copy(duration);
+			
+			setTiedNoteValue(note,caret);
+			
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			getSongManager().getMeasureManager().addNote(caret.getSelectedBeat(),note,duration, caret.getVoice());
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		updateTablature();
+	}
+	
+	private void setTiedNoteValue(TGNote note,Caret caret){
+		TGMeasure measure = caret.getMeasure();
+		TGVoice voice = getSongManager().getMeasureManager().getPreviousVoice( measure.getBeats(), caret.getSelectedBeat(), caret.getVoice());
+		while( measure != null){
+			while( voice != null ){
+				if(voice.isRestVoice()){
+					note.setValue(0);
+					return;
+				}
+				// Check if is there any note at same string.
+				Iterator it = voice.getNotes().iterator();
+				while( it.hasNext() ){
+					TGNote current = (TGNote) it.next();
+					if(current.getString() == note.getString()){
+						note.setValue( current.getValue() );
+						return;
+					}
+				}
+				voice = getSongManager().getMeasureManager().getPreviousVoice( measure.getBeats(), voice.getBeat(), caret.getVoice());
+			}
+			measure = getSongManager().getTrackManager().getPrevMeasure(measure);
+			if( measure != null ){
+				voice = getSongManager().getMeasureManager().getLastVoice( measure.getBeats() , caret.getVoice());
+			}
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ChangeVelocityAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ChangeVelocityAction.java
new file mode 100644
index 0000000..f5ac02a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ChangeVelocityAction.java
@@ -0,0 +1,53 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeVelocityAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.general.velocity";
+	
+	public static final String PROPERTY_VELOCITY = "velocity";
+	
+	public ChangeVelocityAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Object propertyVelocity = context.getAttribute(PROPERTY_VELOCITY);
+		if( propertyVelocity instanceof Integer){
+			int velocity = ((Integer)propertyVelocity).intValue();
+			
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			Caret caret = getEditor().getTablature().getCaret();
+			caret.setVelocity(velocity);
+			getSongManager().getMeasureManager().changeVelocity(velocity,caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
+			updateTablature();
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/CleanBeatAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/CleanBeatAction.java
new file mode 100644
index 0000000..5e07666
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/CleanBeatAction.java
@@ -0,0 +1,48 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class CleanBeatAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.general.clean-beat";
+	
+	public CleanBeatAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat();
+		if( beat != null){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			//getSongManager().getMeasureManager().removeAllComponentsAt(caret.getMeasure(),caret.getSelectedComponent().getStart());
+			getSongManager().getMeasureManager().cleanBeat(beat);
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+			updateTablature();
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/DecrementNoteSemitoneAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/DecrementNoteSemitoneAction.java
new file mode 100644
index 0000000..b9d1e41
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/DecrementNoteSemitoneAction.java
@@ -0,0 +1,47 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class DecrementNoteSemitoneAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.general.decrement-semitone";
+	
+	public DecrementNoteSemitoneAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if(note != null){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			if(getSongManager().getMeasureManager().moveSemitoneDown(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString())){
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			}
+			updateTablature();
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/DeleteNoteOrRestAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/DeleteNoteOrRestAction.java
new file mode 100644
index 0000000..61bab9e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/DeleteNoteOrRestAction.java
@@ -0,0 +1,56 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class DeleteNoteOrRestAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.delete-note-or-rest";
+	
+	public DeleteNoteOrRestAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		TGVoice voice = beat.getVoice( caret.getVoice() );
+		if( beat.isTextBeat() && beat.isRestBeat() ){
+			getSongManager().getMeasureManager().removeText(beat);
+		}else if(voice.isRestVoice()){
+			getSongManager().getMeasureManager().removeVoice(voice ,true);
+		}else{
+			int string = caret.getSelectedString().getNumber();
+			getSongManager().getMeasureManager().removeNote(caret.getMeasure(),beat.getStart(), caret.getVoice(), string);
+		}
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+		updateTablature();
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/IncrementNoteSemitoneAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/IncrementNoteSemitoneAction.java
new file mode 100644
index 0000000..a1eb5eb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/IncrementNoteSemitoneAction.java
@@ -0,0 +1,47 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class IncrementNoteSemitoneAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.general.increment-semitone";
+	
+	public IncrementNoteSemitoneAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if(note != null){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			if(getSongManager().getMeasureManager().moveSemitoneUp(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString())){
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			}
+			updateTablature();
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/InsertRestBeatAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/InsertRestBeatAction.java
new file mode 100644
index 0000000..90e7bb6
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/InsertRestBeatAction.java
@@ -0,0 +1,57 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class InsertRestBeatAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.insert-rest";
+	
+	public InsertRestBeatAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		if(beat != null){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			if(beat.getVoice(caret.getVoice()).isEmpty()){
+				getSongManager().getMeasureManager().addSilence(beat, caret.getDuration().clone(getSongManager().getFactory()), caret.getVoice());
+			}
+			else{
+				long start = beat.getStart();
+				long length = beat.getVoice(caret.getVoice()).getDuration().getTime();
+				getSongManager().getMeasureManager().moveVoices(caret.getMeasure(),start,length,caret.getVoice(),beat.getVoice(caret.getVoice()).getDuration());
+			}
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+			
+			updateTablature();
+			
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/MoveBeatsCustomAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/MoveBeatsCustomAction.java
new file mode 100644
index 0000000..3e91df9
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/MoveBeatsCustomAction.java
@@ -0,0 +1,339 @@
+package org.herac.tuxguitar.app.action.impl.note;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackGeneric;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class MoveBeatsCustomAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.move-custom";
+	
+	private static final ComboItem[] MOVE_DIRECTIONS = new ComboItem[]{
+		new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.direction.right"), new Integer(1) ),
+		new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.direction.left") , new Integer(-1) ),
+	};
+	
+	private static final ComboItem[] MOVE_DURATIONS = new ComboItem[]{
+		new ComboItem( TuxGuitar.getProperty("duration.whole") , new Integer(TGDuration.WHOLE) ),
+		new ComboItem( TuxGuitar.getProperty("duration.half") , new Integer(TGDuration.HALF) ),
+		new ComboItem( TuxGuitar.getProperty("duration.quarter") , new Integer(TGDuration.QUARTER) ),
+		new ComboItem( TuxGuitar.getProperty("duration.eighth") , new Integer(TGDuration.EIGHTH) ),
+		new ComboItem( TuxGuitar.getProperty("duration.sixteenth") , new Integer(TGDuration.SIXTEENTH) ),
+		new ComboItem( TuxGuitar.getProperty("duration.thirtysecond") , new Integer(TGDuration.THIRTY_SECOND) ),
+		new ComboItem( TuxGuitar.getProperty("duration.sixtyfourth") , new Integer(TGDuration.SIXTY_FOURTH) ),
+	};
+	
+	private static final ComboItem[] MOVE_DURATION_TYPES = new ComboItem[]{
+		new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.duration.type.normal") , new boolean[]{ false, false} ),
+		new ComboItem( TuxGuitar.getProperty("duration.dotted") , new boolean[]{ true, false} ),
+		new ComboItem( TuxGuitar.getProperty("duration.doubledotted") , new boolean[]{ false, true} ),
+	};
+	
+	private static final ComboItem[] MOVE_DURATION_DIVISIONS = createDivisionTypeComboItems();
+	
+	public MoveBeatsCustomAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		this.showDialog(getEditor().getTablature().getShell());
+	}
+	
+	protected void showDialog(Shell shell){
+		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("beat.move-custom.dialog.title"));
+		
+		//-------direction-------------------------------------
+		Group direction = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		direction.setLayout(new GridLayout(2,false));
+		direction.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		direction.setText(TuxGuitar.getProperty("beat.move-custom.dialog.direction-tip"));
+		
+		Label directionLabel = new Label(direction, SWT.RIGHT);
+		directionLabel.setText(TuxGuitar.getProperty("beat.move-custom.dialog.direction") + ":");
+		
+		final Combo directionCombo = new Combo(direction, SWT.DROP_DOWN | SWT.READ_ONLY);
+		for( int i = 0 ; i < MOVE_DIRECTIONS.length ; i ++ ){
+			directionCombo.add( MOVE_DIRECTIONS[i].getLabel() );
+		}
+		directionCombo.select( 0 );
+		directionCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		
+		//-------move 1------------------------------------------
+		final List move1Controls = new ArrayList();
+		
+		Group move1 = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		move1.setLayout(new GridLayout(2,false));
+		move1.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		move1.setText(TuxGuitar.getProperty("beat.move-custom.dialog.move-1.tip"));
+		
+		Label count1Label = new Label(move1, SWT.RIGHT);
+		count1Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
+		count1Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.count") + ":");
+		
+		final Spinner count1Spinner = new Spinner(move1 , SWT.BORDER );
+		count1Spinner.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		count1Spinner.setMinimum(0);
+		count1Spinner.setMaximum(100);
+		count1Spinner.setIncrement(1);
+		count1Spinner.setSelection(0);
+		count1Spinner.addSelectionListener( new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateControls( count1Spinner.getSelection(), move1Controls );
+			}
+		});
+		
+		Label duration1Label = new Label(move1, SWT.RIGHT);
+		duration1Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
+		duration1Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration") + ":");
+		move1Controls.add( duration1Label );
+		
+		final Combo duration1Combo = new Combo(move1, SWT.DROP_DOWN | SWT.READ_ONLY);
+		duration1Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		for( int i = 0 ; i < MOVE_DURATIONS.length ; i ++ ){
+			duration1Combo.add( MOVE_DURATIONS[i].getLabel() );
+		}
+		duration1Combo.select( 0 );
+		move1Controls.add( duration1Combo );
+		
+		updateControls( 0, move1Controls );
+		//-------move 2------------------------------------------
+		final List move2Controls = new ArrayList();
+		
+		Group move2 = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		move2.setLayout(new GridLayout(2,false));
+		move2.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		move2.setText(TuxGuitar.getProperty("beat.move-custom.dialog.move-2.tip"));
+		
+		Label count2Label = new Label(move2, SWT.RIGHT);
+		count2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
+		count2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.count") + ":");
+		
+		final Spinner count2Spinner = new Spinner(move2 , SWT.BORDER );
+		count2Spinner.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		count2Spinner.setSelection(0);
+		count2Spinner.addSelectionListener( new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateControls( count2Spinner.getSelection(), move2Controls );
+			}
+		});
+		
+		Label duration2Label = new Label(move2, SWT.RIGHT);
+		duration2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
+		duration2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration") + ":");
+		move2Controls.add( duration2Label );
+		
+		final Combo duration2Combo = new Combo(move2, SWT.DROP_DOWN | SWT.READ_ONLY);
+		duration2Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		for( int i = 0 ; i < MOVE_DURATIONS.length ; i ++ ){
+			duration2Combo.add( MOVE_DURATIONS[i].getLabel() );
+		}
+		duration2Combo.select( 2 );
+		move2Controls.add( duration2Combo );
+		
+		Label type2Label = new Label(move2, SWT.RIGHT);
+		type2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
+		type2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration.type") + ":");
+		move2Controls.add( type2Label );
+		
+		final Combo type2Combo = new Combo(move2, SWT.DROP_DOWN | SWT.READ_ONLY);
+		type2Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		for( int i = 0 ; i < MOVE_DURATION_TYPES.length ; i ++ ){
+			type2Combo.add( MOVE_DURATION_TYPES[i].getLabel() );
+		}
+		type2Combo.select( 0 );
+		move2Controls.add( type2Combo );
+		
+		Label division2Label = new Label(move2, SWT.RIGHT);
+		division2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
+		division2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration.division-type") + ":");
+		move2Controls.add( division2Label );
+		
+		final Combo division2Combo = new Combo(move2, SWT.DROP_DOWN | SWT.READ_ONLY);
+		division2Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		for( int i = 0 ; i < MOVE_DURATION_DIVISIONS.length ; i ++ ){
+			division2Combo.add( MOVE_DURATION_DIVISIONS[i].getLabel() );
+		}
+		division2Combo.select( 0 );
+		move2Controls.add( division2Combo );
+		
+		updateControls( 0, move2Controls );
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				final int directionValue = getDirection( directionCombo.getSelectionIndex() );
+				final long duration1 = getDuration1(duration1Combo.getSelectionIndex(), count1Spinner.getSelection());
+				final long duration2 = getDuration2(duration2Combo.getSelectionIndex(),type2Combo.getSelectionIndex(),division2Combo.getSelectionIndex(), count2Spinner.getSelection());
+				final long duration = ( ( duration1 + duration2 ) * directionValue );
+				
+				dialog.dispose();
+				try {
+					TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+						public void run() throws TGException {
+							TGActionLock.lock();
+							TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+							moveBeats(duration);
+							TuxGuitar.instance().updateCache( true );
+							TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+							TGActionLock.unlock();
+						}
+					});
+				} catch (Throwable throwable) {
+					MessageDialog.errorMessage(throwable);
+				}
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected int getDirection( int index ){
+		if( index >= 0 && index < MOVE_DIRECTIONS.length ){
+			return ((Integer)MOVE_DIRECTIONS[ index ].getValue()).intValue();
+		}
+		return 0;
+	}
+	
+	protected long getDuration1( int index , int count ){
+		if( count > 0 && index >= 0 && index < MOVE_DURATIONS.length ){
+			TGDuration duration = getSongManager().getFactory().newDuration();
+			duration.setValue( ((Integer)MOVE_DURATIONS[ index ].getValue()).intValue() );
+			duration.setDotted( false );
+			duration.setDoubleDotted( false );
+			duration.getDivision().setTimes( 1 );
+			duration.getDivision().setEnters( 1 );
+			return ( duration.getTime() * count );
+		}
+		return 0;
+	}
+	
+	protected long getDuration2( int index , int indexType , int indexDivision, int count ){
+		if( count > 0 && index >= 0 && index < MOVE_DURATIONS.length ){
+			if( indexType >= 0 && indexType < MOVE_DURATION_TYPES.length && indexDivision >= 0 && indexDivision < MOVE_DURATION_DIVISIONS.length ){
+				TGDuration duration = getSongManager().getFactory().newDuration();
+				duration.setValue( ((Integer)MOVE_DURATIONS[ index ].getValue()).intValue() );
+				duration.setDotted(((boolean[])MOVE_DURATION_TYPES[ indexType ].getValue())[0]);
+				duration.setDoubleDotted(((boolean[])MOVE_DURATION_TYPES[ indexType ].getValue())[1]);
+				duration.getDivision().setEnters(((int[])MOVE_DURATION_DIVISIONS[ indexDivision ].getValue())[0]);
+				duration.getDivision().setTimes(((int[])MOVE_DURATION_DIVISIONS[ indexDivision ].getValue())[1]);
+				return ( duration.getTime() * count );
+			}
+		}
+		return 0;
+	}
+	
+	protected void updateControls(int count, List controls){
+		Iterator it = controls.iterator();
+		while( it.hasNext() ){
+			Control control = (Control) it.next();
+			control.setEnabled( count > 0 );
+		}
+	}
+	
+	protected int moveBeats( long theMove ){
+		Caret caret = getEditor().getTablature().getCaret();		
+		TGBeat beat = caret.getSelectedBeat();
+		TGMeasure measure = caret.getMeasure();
+		TGTrack track = caret.getTrack();
+		if(beat != null && measure != null && track != null){
+			//comienza el undoable
+			UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo(track);
+			
+			getSongManager().getTrackManager().moveTrackBeats(track, measure.getStart(), beat.getStart(), theMove );
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo(track));
+			
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			updateTablature();
+		}
+		return 0;
+	}
+	
+	protected static class ComboItem {		
+		private String label;
+		private Object value;
+		
+		public ComboItem(String label, Object value){
+			this.label = label;
+			this.value = value;
+		}
+		
+		public String getLabel() {
+			return this.label;
+		}
+		
+		public Object getValue() {
+			return this.value;
+		}
+	}
+	
+	private static ComboItem[] createDivisionTypeComboItems(){
+		TGDivisionType[] types = TGDivisionType.ALTERED_DIVISION_TYPES;
+		
+		ComboItem[] comboItems = new ComboItem[ types.length + 1 ];
+		comboItems[0] = new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.duration.division-type.normal") , new int[] { 1  , 1} );
+		for( int i = 0 ; i < types.length ; i ++ ){ 
+			comboItems[i + 1] = new ComboItem(new Integer(types[i].getEnters()).toString(),new int[]{types[i].getEnters(),types[i].getTimes()});
+		}
+		
+		return comboItems;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/MoveBeatsLeftAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/MoveBeatsLeftAction.java
new file mode 100644
index 0000000..f24f944
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/MoveBeatsLeftAction.java
@@ -0,0 +1,53 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MoveBeatsLeftAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.move-left";
+	
+	public MoveBeatsLeftAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();		
+		TGBeat beat = caret.getSelectedBeat();
+		TGMeasure measure = caret.getMeasure();
+		TGTrack track = caret.getTrack();
+		TGDuration duration = (beat != null ? beat.getVoice( caret.getVoice() ).getDuration() : null );
+		if(beat != null && measure != null && track != null && duration != null){
+			//comienza el undoable
+			UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo(track);
+			
+			getSongManager().getTrackManager().moveTrackBeats(track, measure.getStart(), beat.getStart(), -duration.getTime() );
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo(track));
+			
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			updateTablature();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/MoveBeatsRightAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/MoveBeatsRightAction.java
new file mode 100644
index 0000000..0c7609c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/MoveBeatsRightAction.java
@@ -0,0 +1,53 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MoveBeatsRightAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.move-right";
+	
+	public MoveBeatsRightAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();		
+		TGBeat beat = caret.getSelectedBeat();
+		TGMeasure measure = caret.getMeasure();
+		TGTrack track = caret.getTrack();
+		TGDuration duration = (beat != null ? beat.getVoice( caret.getVoice() ).getDuration() : null );
+		if(beat != null && measure != null && track != null && duration != null){
+			//comienza el undoable
+			UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo(track);
+			
+			getSongManager().getTrackManager().moveTrackBeats(track, measure.getStart(), beat.getStart(), duration.getTime() );
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo(track));
+			
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			updateTablature();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/RemoveUnusedVoiceAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/RemoveUnusedVoiceAction.java
new file mode 100644
index 0000000..41b8832
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/RemoveUnusedVoiceAction.java
@@ -0,0 +1,52 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class RemoveUnusedVoiceAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.remove-unused-voice";
+	
+	public RemoveUnusedVoiceAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		if( caret.getMeasure() != null){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			for( int v = 0 ; v < TGBeat.MAX_VOICES ; v ++ ){
+				if( caret.getVoice() != v ){
+					getSongManager().getMeasureManager().removeMeasureVoices( caret.getMeasure(), v );
+				}
+			}
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo());
+			updateTablature();
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetNoteFretNumberAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetNoteFretNumberAction.java
new file mode 100644
index 0000000..8ca6416
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetNoteFretNumberAction.java
@@ -0,0 +1,57 @@
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+
+public class SetNoteFretNumberAction extends ChangeNoteAction {
+	
+	public static final String NAME_PREFIX = "action.note.general.set-fret-number-";
+	
+	private static final int DELAY = 1000;
+	
+	private static int lastAddedFret;
+	private static int lastAddedString;
+	private static long lastAddedStart;
+	private static long lastAddedTime;
+	
+	private int number;
+	
+	public SetNoteFretNumberAction(int number){
+		super(getActionName(number), AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE | DISABLE_ON_PLAYING);
+		this.number = number;
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		
+		int fret = this.number;
+		int string = caret.getSelectedString().getNumber();
+		long start = caret.getPosition();
+		long time = System.currentTimeMillis();
+		
+		if( this.number < 10 ){
+			if( lastAddedStart == start && lastAddedString == string ){
+				if (lastAddedFret > 0 && lastAddedFret < 10 && time <  ( lastAddedTime + DELAY ) ){
+					int newFret = ( ( lastAddedFret * 10 ) + fret );
+					if( newFret < 30 || getSongManager().isPercussionChannel(caret.getTrack().getChannelId()) ){
+						fret = newFret;
+					}
+				}
+			}
+			lastAddedFret = fret;
+			lastAddedStart = start;
+			lastAddedString = string;
+			lastAddedTime = time;
+		}
+		
+		context.setAttribute(PROPERTY_START, new Long(start) );
+		context.setAttribute(PROPERTY_FRET, new Integer(fret));
+		context.setAttribute(PROPERTY_STRING, new Integer(string));
+		
+		super.processAction(context);
+	}
+	
+	public static final String getActionName(int number){
+		return (NAME_PREFIX + number);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetStrokeDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetStrokeDownAction.java
new file mode 100644
index 0000000..8d9a7b8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetStrokeDownAction.java
@@ -0,0 +1,55 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.effects.StrokeEditor;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGStroke;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetStrokeDownAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.set-stroke-down";
+	
+	public SetStrokeDownAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat();
+		if(beat != null && !beat.isRestBeat()){
+			StrokeEditor editor = new StrokeEditor();
+			editor.open(beat);
+			if( editor.getStatus() != StrokeEditor.STATUS_CANCEL ){
+				int direction = ( editor.getStatus() == StrokeEditor.STATUS_CLEAN ? TGStroke.STROKE_NONE : TGStroke.STROKE_DOWN );
+				int value = editor.getValue();
+				
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				if(getSongManager().getMeasureManager().setStroke( beat.getMeasure(), beat.getStart(), value, direction ) ){
+					//termia el undoable
+					addUndoableEdit(undoable.endUndo());
+					TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				}
+				updateTablature();
+			}
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetStrokeUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetStrokeUpAction.java
new file mode 100644
index 0000000..5aebbbe
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetStrokeUpAction.java
@@ -0,0 +1,55 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.effects.StrokeEditor;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGStroke;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetStrokeUpAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.set-stroke-up";
+	
+	public SetStrokeUpAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat();
+		if(beat != null && !beat.isRestBeat()){
+			StrokeEditor editor = new StrokeEditor();
+			editor.open(beat);
+			if( editor.getStatus() != StrokeEditor.STATUS_CANCEL ){
+				int direction = ( editor.getStatus() == StrokeEditor.STATUS_CLEAN ? TGStroke.STROKE_NONE : TGStroke.STROKE_UP );
+				int value = editor.getValue();
+				
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				if(getSongManager().getMeasureManager().setStroke( beat.getMeasure(), beat.getStart(), value, direction ) ){
+					//termia el undoable
+					addUndoableEdit(undoable.endUndo());
+					TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				}
+				updateTablature();
+			}
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetVoiceAutoAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetVoiceAutoAction.java
new file mode 100644
index 0000000..c707931
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetVoiceAutoAction.java
@@ -0,0 +1,63 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.graphics.control.TGBeatGroup;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.graphics.control.TGVoiceImpl;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetVoiceAutoAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.voice-auto";
+	
+	public SetVoiceAutoAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeatImpl beat = caret.getSelectedBeat();
+		if( beat != null ){
+			TGVoiceImpl voice = beat.getVoiceImpl( caret.getVoice() );
+			TGBeatGroup group = voice.getBeatGroup();
+			if(!voice.isEmpty() && !voice.isRestVoice() && group != null ){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				Iterator it = group.getVoices().iterator();
+				while( it.hasNext() ){
+					TGVoice current = (TGVoice)it.next();
+					getSongManager().getMeasureManager().changeVoiceDirection(current, TGVoice.DIRECTION_NONE);
+				}
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				
+				updateTablature();
+			}
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetVoiceDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetVoiceDownAction.java
new file mode 100644
index 0000000..bba4c72
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetVoiceDownAction.java
@@ -0,0 +1,63 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.graphics.control.TGBeatGroup;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.graphics.control.TGVoiceImpl;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetVoiceDownAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.voice-down";
+	
+	public SetVoiceDownAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeatImpl beat = caret.getSelectedBeat();
+		if( beat != null ){
+			TGVoiceImpl voice = beat.getVoiceImpl( caret.getVoice() );
+			TGBeatGroup group = voice.getBeatGroup();
+			if(!voice.isEmpty() && !voice.isRestVoice() && group != null ){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				Iterator it = group.getVoices().iterator();
+				while( it.hasNext() ){
+					TGVoice current = (TGVoice)it.next();
+					getSongManager().getMeasureManager().changeVoiceDirection(current, TGVoice.DIRECTION_DOWN);
+				}
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				
+				updateTablature();
+			}
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetVoiceUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetVoiceUpAction.java
new file mode 100644
index 0000000..0f964d5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/SetVoiceUpAction.java
@@ -0,0 +1,63 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.graphics.control.TGBeatGroup;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.graphics.control.TGVoiceImpl;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SetVoiceUpAction extends TGActionBase{
+	
+	public static final String NAME = "action.beat.general.voice-up";
+	
+	public SetVoiceUpAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGBeatImpl beat = caret.getSelectedBeat();
+		if( beat != null ){
+			TGVoiceImpl voice = beat.getVoiceImpl( caret.getVoice() );
+			TGBeatGroup group = voice.getBeatGroup();
+			if(!voice.isEmpty() && !voice.isRestVoice() && group != null ){
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				Iterator it = group.getVoices().iterator();
+				while( it.hasNext() ){
+					TGVoice current = (TGVoice)it.next();
+					getSongManager().getMeasureManager().changeVoiceDirection(current, TGVoice.DIRECTION_UP);
+				}
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				
+				updateTablature();
+			}
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ShiftNoteDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ShiftNoteDownAction.java
new file mode 100644
index 0000000..a925e65
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ShiftNoteDownAction.java
@@ -0,0 +1,50 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ShiftNoteDownAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.general.shift-down";
+	
+	public ShiftNoteDownAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if(note != null){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			int nextString = getSongManager().getMeasureManager().shiftNoteDown(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString());
+			if(nextString > 0){
+				getEditor().getTablature().getCaret().setStringNumber(nextString);
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			}
+			updateTablature();
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ShiftNoteUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ShiftNoteUpAction.java
new file mode 100644
index 0000000..cf20223
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/note/ShiftNoteUpAction.java
@@ -0,0 +1,50 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.note;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.song.models.TGNote;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ShiftNoteUpAction extends TGActionBase{
+	
+	public static final String NAME = "action.note.general.shift-up";
+	
+	public ShiftNoteUpAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
+		if(note != null){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			int nextString = getSongManager().getMeasureManager().shiftNoteUp(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString());
+			if(nextString > 0){
+				getEditor().getTablature().getCaret().setStringNumber(nextString);
+				
+				//termia el undoable
+				addUndoableEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			}
+			updateTablature();
+		}
+	}
+	
+	public void updateTablature() {
+		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/settings/EditConfigAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/settings/EditConfigAction.java
new file mode 100644
index 0000000..b22cce3
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/settings/EditConfigAction.java
@@ -0,0 +1,31 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.settings;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.system.config.TGConfigEditor;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class EditConfigAction extends TGActionBase{
+	
+	public static final String NAME = "action.settings.configure";
+	
+	public EditConfigAction() {
+		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE );
+	}
+	
+	protected void processAction(TGActionContext context){
+		new TGConfigEditor().showDialog(TuxGuitar.instance().getShell());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/settings/EditKeyBindingsAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/settings/EditKeyBindingsAction.java
new file mode 100644
index 0000000..8456367
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/settings/EditKeyBindingsAction.java
@@ -0,0 +1,31 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.settings;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.system.keybindings.editor.KeyBindingEditor;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class EditKeyBindingsAction extends TGActionBase{
+	
+	public static final String NAME = "action.settings.key-bindings";
+	
+	public EditKeyBindingsAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		new KeyBindingEditor().show(TuxGuitar.instance().getShell());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/settings/EditPluginsAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/settings/EditPluginsAction.java
new file mode 100644
index 0000000..674ea55
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/settings/EditPluginsAction.java
@@ -0,0 +1,254 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.settings;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.system.plugins.TGPluginSettingsManager;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginInfo;
+import org.herac.tuxguitar.util.plugin.TGPluginManager;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class EditPluginsAction extends TGActionBase{
+	
+	public static final String NAME = "action.settings.plugins";
+	
+	private static final int TABLE_WIDTH = 400;
+	private static final int TABLE_HEIGHT = 300;
+	
+	public EditPluginsAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog();
+	}
+	
+	public void showDialog() {
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		dialog.setText(TuxGuitar.getProperty("plugins"));
+		
+		final Table table = new Table(dialog, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL);
+		table.setLayoutData(new GridData(TABLE_WIDTH,TABLE_HEIGHT));
+		table.setHeaderVisible(true);
+		
+		final TableColumn columnEnabled = new TableColumn(table, SWT.LEFT);
+		final TableColumn columnPlugin = new TableColumn(table, SWT.LEFT);
+		columnEnabled.setText(TuxGuitar.getProperty("plugin.column.enabled"));
+		columnPlugin.setText(TuxGuitar.getProperty("plugin.column.name"));
+		columnEnabled.setWidth( (TABLE_WIDTH / 4) );
+		columnPlugin.setWidth( (TABLE_WIDTH - (TABLE_WIDTH / 4)) );
+		
+		Iterator it = getModuleIds().iterator();
+		while(it.hasNext()){
+			String moduleId = (String)it.next();
+			TGPluginInfo pluginInfo = new TGPluginInfo(moduleId);
+			
+			String pluginName = pluginInfo.getName();
+			if( pluginName == null ){
+				pluginName = moduleId;
+			}
+			
+			TableItem item = new TableItem(table, SWT.NONE);
+			item.setData(moduleId);
+			item.setText(1, (pluginName != null ? pluginName : "Undefined Plugin") );
+			item.setChecked(TGPluginManager.getInstance().isEnabled(moduleId));
+		}
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		
+		final Button buttonSetup = new Button(buttons, SWT.PUSH);
+		buttonSetup.setText(TuxGuitar.getProperty("configure"));
+		buttonSetup.setLayoutData(getButtonData());
+		buttonSetup.setEnabled(false);
+		buttonSetup.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TableItem item = table.getItem(table.getSelectionIndex());
+				if(item != null && item.getData() instanceof String){
+					try {
+						String moduleId = (String)item.getData();
+						if( isConfigurable(moduleId) ){
+							configure(moduleId, dialog);
+						}
+					}catch(Throwable throwable){
+						MessageDialog.errorMessage(dialog, throwable);
+					}
+				}
+			}
+		});
+		
+		final Button buttonInfo = new Button(buttons, SWT.PUSH);
+		buttonInfo.setText(TuxGuitar.getProperty("info"));
+		buttonInfo.setLayoutData(getButtonData());
+		buttonInfo.setEnabled(false);
+		buttonInfo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TableItem item = table.getItem(table.getSelectionIndex());
+				if(item != null && item.getData() instanceof String){
+					try {
+						showInfo(dialog, (String)item.getData());
+					}catch(Throwable throwable){
+						MessageDialog.errorMessage(dialog, throwable);
+					}
+				}
+			}
+		});
+		
+		Button buttonClose = new Button(buttons, SWT.PUSH);
+		buttonClose.setText(TuxGuitar.getProperty("close"));
+		buttonClose.setLayoutData(getButtonData());
+		buttonClose.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		table.addListener (SWT.Selection, new Listener() {
+			public void handleEvent (Event event) {
+				buttonInfo.setEnabled(false);
+				buttonSetup.setEnabled(false);
+				if(event.item instanceof TableItem && event.item.getData() instanceof String){
+					final TableItem item = (TableItem)event.item;
+					if(event.detail == SWT.CHECK){
+						TuxGuitar.instance().loadCursor(dialog,SWT.CURSOR_WAIT);
+						TuxGuitar.instance().getPluginManager().setEnabled((String)item.getData(), item.getChecked());
+						TuxGuitar.instance().loadCursor(dialog,SWT.CURSOR_ARROW);
+						table.setSelection(item);
+					}
+					buttonInfo.setEnabled(true);
+					buttonSetup.setEnabled(isConfigurable((String)item.getData()));
+				}
+			}
+		});
+		
+		dialog.setDefaultButton( buttonInfo );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	public void showInfo(Shell parent, String moduleId) {
+		TGPluginInfo pluginInfo = new TGPluginInfo(moduleId);
+		
+		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		dialog.setText(TuxGuitar.getProperty("plugins"));
+		
+		Composite info = new Composite(dialog,SWT.NONE);
+		info.setLayout(new GridLayout(2,false));
+		
+		showInfoString(info,TuxGuitar.getProperty("name") + ":", pluginInfo.getName());
+		showInfoString(info,TuxGuitar.getProperty("version") + ":", pluginInfo.getVersion());
+		showInfoString(info,TuxGuitar.getProperty("author") + ":", pluginInfo.getAuthor());
+		showInfoString(info,TuxGuitar.getProperty("description") + ":", pluginInfo.getDescription());
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout());
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		
+		Button buttonExit = new Button(buttons, SWT.PUSH);
+		buttonExit.setText(TuxGuitar.getProperty("exit"));
+		buttonExit.setLayoutData(getButtonData());
+		buttonExit.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonExit );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	private void showInfoString(Composite parent,String key,String value){
+		Label labelKey = new Label(parent,SWT.LEFT);
+		Label labelValue = new Label(parent,SWT.LEFT | SWT.WRAP);
+		labelKey.setLayoutData(new GridData(SWT.LEFT,SWT.TOP,false,true));
+		labelValue.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
+		setBold(labelKey);
+		labelKey.setText(key);
+		labelValue.setText( (value != null && value.length() > 0)?value:TuxGuitar.getProperty("plugin.unknown-value"));
+	}
+	
+	private void setBold(Label label){
+		FontData[] fontDatas = label.getFont().getFontData();
+		if(fontDatas.length > 0){
+			final Font font = new Font(label.getDisplay(),fontDatas[0].getName(),(fontDatas[0].getHeight()),SWT.BOLD);
+			label.setFont(font);
+			label.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent e) {
+					font.dispose();
+				}
+			});
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private List getModuleIds(){
+		List moduleIds = new ArrayList();
+		Iterator it = TuxGuitar.instance().getPluginManager().getPlugins().iterator();
+		while(it.hasNext()){
+			TGPlugin plugin = (TGPlugin)it.next();
+			if(!moduleIds.contains( plugin.getModuleId() )){
+				moduleIds.add( plugin.getModuleId() );
+			}
+		}
+		return moduleIds;
+	}
+	
+	private boolean isConfigurable(String moduleId){
+		return TGPluginSettingsManager.getInstance().containsPluginSettingsHandler(moduleId);
+	}
+	
+	private void configure(String moduleId, Shell parent){
+		TGPluginSettingsManager.getInstance().openPluginSettingsDialog(moduleId, parent);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/system/DisposeAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/system/DisposeAction.java
new file mode 100644
index 0000000..cbe02e4
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/system/DisposeAction.java
@@ -0,0 +1,125 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.system;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ShellEvent;
+import org.eclipse.swt.events.TypedEvent;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.file.FileActionUtils;
+import org.herac.tuxguitar.app.marker.MarkerList;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class DisposeAction extends TGActionBase {
+	
+	public static final String NAME = "action.system.dispose";
+	
+	public DisposeAction() {
+		super(NAME, AUTO_LOCK);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TypedEvent e = (TypedEvent)context.getAttribute(TGActionProcessor.PROPERTY_TYPED_EVENT);
+		
+		if(e instanceof ShellEvent){
+			TuxGuitar.instance().getPlayer().reset();
+			
+			if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
+				ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
+				confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
+				int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
+				if(status == ConfirmDialog.STATUS_CANCEL){
+					TGActionLock.unlock();
+					return;
+				}
+				if(status == ConfirmDialog.STATUS_YES){
+					final String fileName = FileActionUtils.getFileName();
+					if(fileName == null){
+						TGActionLock.unlock();
+						return;
+					}
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+					new Thread(new Runnable() {
+						public void run() throws TGException {
+							if(!TuxGuitar.isDisposed()){
+								FileActionUtils.save(fileName);
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								
+								exit();
+							}
+						}
+					}).start();
+					return;
+				}
+			}
+			exit();
+		}
+	}
+	
+	protected void exit(){
+		try {
+			TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					TuxGuitar.instance().lock();
+					closeModules();
+					saveConfig();
+					dispose();
+					TuxGuitar.instance().unlock();
+				}
+			});
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	protected void saveConfig(){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		
+		config.setValue(TGConfigKeys.LAYOUT_MODE,getEditor().getTablature().getViewLayout().getMode());
+		config.setValue(TGConfigKeys.LAYOUT_STYLE,getEditor().getTablature().getViewLayout().getStyle());
+		config.setValue(TGConfigKeys.SHOW_PIANO,!TuxGuitar.instance().getPianoEditor().isDisposed());
+		config.setValue(TGConfigKeys.SHOW_MATRIX,!TuxGuitar.instance().getMatrixEditor().isDisposed());
+		config.setValue(TGConfigKeys.SHOW_FRETBOARD,TuxGuitar.instance().getFretBoardEditor().isVisible());
+		config.setValue(TGConfigKeys.SHOW_INSTRUMENTS,!TuxGuitar.instance().getChannelManager().isDisposed());
+		config.setValue(TGConfigKeys.SHOW_TRANSPORT,!TuxGuitar.instance().getTransport().isDisposed());
+		config.setValue(TGConfigKeys.SHOW_MARKERS,!MarkerList.instance().isDisposed());
+		config.setValue(TGConfigKeys.MAXIMIZED,TuxGuitar.instance().getShell().getMaximized());
+		config.setValue(TGConfigKeys.WIDTH,TuxGuitar.instance().getShell().getClientArea().width);
+		config.setValue(TGConfigKeys.HEIGHT,TuxGuitar.instance().getShell().getClientArea().height);
+		config.setValue(TGConfigKeys.EDITOR_MOUSE_MODE,getEditor().getTablature().getEditorKit().getMouseMode());
+		config.setValue(TGConfigKeys.MATRIX_GRIDS,TuxGuitar.instance().getMatrixEditor().getGrids());
+		
+		TuxGuitar.instance().getConfig().save();
+	}
+	
+	protected void closeModules(){
+		TuxGuitar.instance().getPlayer().close();
+		TuxGuitar.instance().getPluginManager().closePlugins();
+	}
+	
+	protected void dispose(){
+		TuxGuitar.instance().getTable().dispose();
+		TuxGuitar.instance().getSongManager().clearSong();
+		TuxGuitar.instance().getFretBoardEditor().dispose();
+		TuxGuitar.instance().getTablatureEditor().getTablature().dispose();
+		TuxGuitar.instance().getIconManager().disposeIcons();
+		TuxGuitar.instance().getShell().dispose();
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/tools/ScaleAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/tools/ScaleAction.java
new file mode 100644
index 0000000..b6299c8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/tools/ScaleAction.java
@@ -0,0 +1,30 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.tools;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.tools.scale.ScaleEditor;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ScaleAction extends TGActionBase{
+	
+	public static final String NAME = "action.tools.scale";
+	
+	public ScaleAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		new ScaleEditor().show();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/tools/TGBrowserAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/tools/TGBrowserAction.java
new file mode 100644
index 0000000..a4fb364
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/tools/TGBrowserAction.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.app.action.impl.tools;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+public class TGBrowserAction extends TGActionBase{
+	
+	public static final String NAME = "action.tools.browser";
+	
+	public TGBrowserAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getBrowser().isDisposed()){
+			TuxGuitar.instance().getBrowser().show();
+		}else{
+			TuxGuitar.instance().getBrowser().dispose();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/tools/TransposeAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/tools/TransposeAction.java
new file mode 100644
index 0000000..f299141
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/tools/TransposeAction.java
@@ -0,0 +1,231 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.tools;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.UndoableJoined;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackGeneric;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TransposeAction extends TGActionBase{
+	
+	public static final String NAME = "action.tools.transpose";
+	
+	public TransposeAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		final int[] transpositions = new int[25];
+		for( int i = 0 ; i < transpositions.length ; i ++ ){
+			transpositions[ i ] = ( i - ( transpositions.length / 2 ) );
+		}
+		
+		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("tools.transpose"));
+		
+		//-----------------TEMPO------------------------
+		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout(2,false));
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setText(TuxGuitar.getProperty("tools.transpose"));
+		
+		
+		Label transpositionLabel = new Label(group, SWT.NULL);
+		transpositionLabel.setText(TuxGuitar.getProperty("tools.transpose.semitones"));
+		transpositionLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		final Combo transpositionCombo = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY );
+		transpositionCombo.setLayoutData( new GridData(SWT.FILL, SWT.FILL, true , true) );
+		for( int i = 0 ; i < transpositions.length ; i ++ ){
+			transpositionCombo.add( Integer.toString( transpositions[i]) );
+		}
+		transpositionCombo.select( ( transpositions.length / 2 ) );
+		
+		//------------------OPTIONS--------------------------
+		Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		options.setLayout(new GridLayout());
+		options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		options.setText(TuxGuitar.getProperty("options"));
+		
+		final Button applyToAllMeasuresButton = new Button(options, SWT.RADIO);
+		applyToAllMeasuresButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-track"));
+		applyToAllMeasuresButton.setSelection(true);
+		
+		final Button applyToCurrentMeasureButton = new Button(options, SWT.RADIO);
+		applyToCurrentMeasureButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-measure"));
+		
+		final Button applyToAllTracksButton = new Button(options, SWT.CHECK);
+		applyToAllTracksButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-all-tracks"));
+		applyToAllTracksButton.setSelection(true);
+		
+		final Button applyToChordsButton = new Button(options, SWT.CHECK);
+		applyToChordsButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-chords"));
+		applyToChordsButton.setSelection(true);
+		
+		final Button tryKeepStringButton = new Button(options, SWT.CHECK);
+		tryKeepStringButton.setText(TuxGuitar.getProperty("tools.transpose.try-keep-strings"));
+		tryKeepStringButton.setSelection(true);
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				int transpositionIndex =  transpositionCombo.getSelectionIndex() ;
+				if( transpositionIndex >= 0 && transpositionIndex < transpositions.length ){
+					final int transposition = transpositions[ transpositionIndex ];
+					final boolean tryKeepString = tryKeepStringButton.getSelection();
+					final boolean applyToChords = applyToChordsButton.getSelection();
+					final boolean applyToAllTracks = applyToAllTracksButton.getSelection();
+					final boolean applyToAllMeasures = applyToAllMeasuresButton.getSelection();
+					
+					dialog.dispose();
+					try {
+						TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+							public void run() throws TGException {
+								TGActionLock.lock();
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+								transpose(transposition, tryKeepString, applyToChords , applyToAllMeasures, applyToAllTracks );
+								TuxGuitar.instance().updateCache( true );
+								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+								TGActionLock.unlock();
+							}
+						});
+					} catch (Throwable throwable) {
+						MessageDialog.errorMessage(throwable);
+					}
+				} else {
+					dialog.dispose();
+				}
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	public void transpose( int transposition , boolean tryKeepString , boolean applyToChords , boolean applyToAllMeasures , boolean applyToAllTracks) {
+		//comienza el undoable
+		UndoableJoined undoableJoined = new UndoableJoined();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		if( applyToAllMeasures ){
+			
+			if( applyToAllTracks ){
+				TGSong song = getSongManager().getSong();
+				for( int i = 0 ; i < song.countTracks() ; i ++ ){
+					transposeTrack( undoableJoined , song.getTrack( i ) , transposition , tryKeepString , applyToChords);
+				}
+			} else {
+				transposeTrack( undoableJoined , caret.getTrack(), transposition , tryKeepString , applyToChords);
+			}
+			
+			updateTablature();
+		}else{
+			if( applyToAllTracks ){
+				TGSong song = getSongManager().getSong();
+				for( int i = 0 ; i < song.countTracks() ; i ++ ){
+					TGTrack track = song.getTrack( i );
+					TGMeasure measure = getSongManager().getTrackManager().getMeasure(track, caret.getMeasure().getNumber() );
+					if( measure != null ){
+						transposeMeasure( undoableJoined, measure, transposition , tryKeepString , applyToChords);
+					}
+				}
+			} else {
+				transposeMeasure( undoableJoined , caret.getMeasure(), transposition , tryKeepString , applyToChords);
+			}
+			fireUpdate( caret.getMeasure().getNumber() );
+		}
+		
+		//termia el undoable
+		if( !undoableJoined.isEmpty() ){
+			addUndoableEdit(undoableJoined.endUndo());
+		}
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+	}
+	
+	public void transposeMeasure( UndoableJoined undoableJoined , TGMeasure measure, int transposition , boolean tryKeepString , boolean applyToChords ) {
+		if( transposition != 0 && !getSongManager().isPercussionChannel(measure.getTrack().getChannelId()) ){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo( measure );
+			
+			getSongManager().getMeasureManager().transposeNotes( measure , transposition , tryKeepString , applyToChords , -1 );
+			
+			//termia el undoable
+			undoableJoined.addUndoableEdit( undoable.endUndo( measure ) );
+		}
+	}
+	
+	public void transposeTrack( UndoableJoined undoableJoined , TGTrack track, int transposition , boolean tryKeepString , boolean applyToChords ) {
+		if( transposition != 0 && !getSongManager().isPercussionChannel(track.getChannelId()) ){
+			//comienza el undoable
+			UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo( track );
+			
+			getSongManager().getTrackManager().transposeNotes( track , transposition , tryKeepString , applyToChords, -1 );
+			
+			//termia el undoable
+			undoableJoined.addUndoableEdit( undoable.endUndo( track ) );
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/AddTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/AddTrackAction.java
new file mode 100644
index 0000000..9721669
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/AddTrackAction.java
@@ -0,0 +1,44 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableAddTrack;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class AddTrackAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.add";
+	
+	public AddTrackAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableAddTrack undoable = UndoableAddTrack.startUndo();
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		
+		TGTrack track = getSongManager().addTrack();
+		updateTablature();
+		caret.update(track.getNumber(),caret.getPosition(),1);
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo(track));
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/ChangeTrackMuteAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/ChangeTrackMuteAction.java
new file mode 100644
index 0000000..2e54c95
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/ChangeTrackMuteAction.java
@@ -0,0 +1,46 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackSoloMute;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTrackMuteAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.change-mute";
+	
+	public ChangeTrackMuteAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGTrack track = getEditor().getTablature().getCaret().getTrack();
+		if( track != null ){
+			//comienza el undoable
+			UndoableTrackSoloMute undoable = UndoableTrackSoloMute.startUndo(track);
+			
+			getSongManager().getTrackManager().changeMute(track, !track.isMute());
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo(track));
+			
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			if (TuxGuitar.instance().getPlayer().isRunning()) {
+				TuxGuitar.instance().getPlayer().updateTracks();
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/ChangeTrackSoloAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/ChangeTrackSoloAction.java
new file mode 100644
index 0000000..819ee6c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/ChangeTrackSoloAction.java
@@ -0,0 +1,46 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackSoloMute;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChangeTrackSoloAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.change-solo";
+	
+	public ChangeTrackSoloAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGTrack track = getEditor().getTablature().getCaret().getTrack();
+		if( track != null ){
+			//comienza el undoable
+			UndoableTrackSoloMute undoable = UndoableTrackSoloMute.startUndo(track);
+			
+			getSongManager().getTrackManager().changeSolo(track, !track.isSolo());
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo(track));
+			
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			if (TuxGuitar.instance().getPlayer().isRunning()) {
+				TuxGuitar.instance().getPlayer().updateTracks();
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/CloneTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/CloneTrackAction.java
new file mode 100644
index 0000000..e1dd8a7
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/CloneTrackAction.java
@@ -0,0 +1,42 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableCloneTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class CloneTrackAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.clone";
+	
+	public CloneTrackAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableCloneTrack undoable = UndoableCloneTrack.startUndo();
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		
+		getSongManager().cloneTrack(caret.getTrack());
+		updateTablature();
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/EditLyricsAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/EditLyricsAction.java
new file mode 100644
index 0000000..d4bcee5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/EditLyricsAction.java
@@ -0,0 +1,34 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class EditLyricsAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.lyrics";
+	
+	public EditLyricsAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getLyricEditor().isDisposed()){
+			TuxGuitar.instance().getLyricEditor().show();
+		}else{
+			TuxGuitar.instance().getLyricEditor().dispose();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoFirstTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoFirstTrackAction.java
new file mode 100644
index 0000000..7336eba
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoFirstTrackAction.java
@@ -0,0 +1,35 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoFirstTrackAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.go-first";
+	
+	public GoFirstTrackAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGTrack track = getSongManager().getFirstTrack();
+		if(track != null){
+			caret.update(track.getNumber());
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoLastTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoLastTrackAction.java
new file mode 100644
index 0000000..742428f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoLastTrackAction.java
@@ -0,0 +1,35 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoLastTrackAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.go-last";
+	
+	public GoLastTrackAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGTrack track = getSongManager().getLastTrack();
+		if(track != null){
+			caret.update(track.getNumber());
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoNextTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoNextTrackAction.java
new file mode 100644
index 0000000..157ce87
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoNextTrackAction.java
@@ -0,0 +1,35 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoNextTrackAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.go-next";
+	
+	public GoNextTrackAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGTrack track = getSongManager().getTrack(caret.getTrack().getNumber() + 1);
+		if(track != null){
+			caret.update(track.getNumber());
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoPreviousTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoPreviousTrackAction.java
new file mode 100644
index 0000000..fb392be
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoPreviousTrackAction.java
@@ -0,0 +1,35 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoPreviousTrackAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.go-previous";
+	
+	public GoPreviousTrackAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		TGTrack track = getSongManager().getTrack(caret.getTrack().getNumber() - 1);
+		if(track != null){
+			caret.update(track.getNumber());
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoToTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoToTrackAction.java
new file mode 100644
index 0000000..0231955
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/GoToTrackAction.java
@@ -0,0 +1,36 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class GoToTrackAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.goto";
+	
+	public static final String PROPERTY_TRACK = "track";
+	
+	public GoToTrackAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Object data = context.getAttribute(PROPERTY_TRACK);
+		if(data instanceof TGTrackImpl){
+			TGTrackImpl track = (TGTrackImpl)data;
+			getEditor().getTablature().getCaret().update(track.getNumber());
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/MoveTrackDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/MoveTrackDownAction.java
new file mode 100644
index 0000000..a319aff
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/MoveTrackDownAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableMoveTrackDown;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MoveTrackDownAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.move-down";
+	
+	public MoveTrackDownAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMoveTrackDown undoable = UndoableMoveTrackDown.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		TGTrack track = caret.getTrack();
+		
+		if(getSongManager().moveTrackDown(track)){
+			updateTablature();
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo(track));
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/MoveTrackUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/MoveTrackUpAction.java
new file mode 100644
index 0000000..f9ba046
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/MoveTrackUpAction.java
@@ -0,0 +1,45 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableMoveTrackUp;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MoveTrackUpAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.move-up";
+	
+	public MoveTrackUpAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		//comienza el undoable
+		UndoableMoveTrackUp undoable = UndoableMoveTrackUp.startUndo();
+		
+		Caret caret = getEditor().getTablature().getCaret();
+		TGTrack track = caret.getTrack();
+		
+		if(getSongManager().moveTrackUp(track)){
+			updateTablature();
+			
+			//termia el undoable
+			addUndoableEdit(undoable.endUndo(track));
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/RemoveTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/RemoveTrackAction.java
new file mode 100644
index 0000000..2872ef9
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/RemoveTrackAction.java
@@ -0,0 +1,58 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableRemoveTrack;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class RemoveTrackAction extends TGActionBase{
+	
+	public static final String NAME = "action.track.remove";
+	
+	public RemoveTrackAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		Caret caret = getEditor().getTablature().getCaret();
+		
+		if(getSongManager().getSong().countTracks() <= 1){
+			//TuxGuitar.instance().getAction(NewFileAction.NAME).process(e);
+			TuxGuitar.instance().newSong();
+			return;
+		}
+		//comienza el undoable
+		UndoableRemoveTrack undoable = UndoableRemoveTrack.startUndo();
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		TGTrackImpl track = caret.getTrack();
+		TGTrackImpl nextCaretTrack = (TGTrackImpl)getSongManager().getTrack(track.getNumber() + 1);
+		if(nextCaretTrack == null){
+			nextCaretTrack =  (TGTrackImpl)getSongManager().getTrack(track.getNumber() - 1);
+		}
+		getSongManager().removeTrack(track);
+		updateTablature();
+		
+		//move the caret to the next or previous track
+		if(nextCaretTrack != null){
+			caret.update(nextCaretTrack.getNumber(),getSongManager().getTrackManager().getMeasureAt(nextCaretTrack, caret.getMeasure().getStart()).getStart(),1);
+		}
+		
+		//termia el undoable
+		addUndoableEdit(undoable.endUndo());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/TrackPropertiesAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/TrackPropertiesAction.java
new file mode 100644
index 0000000..d12183c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/track/TrackPropertiesAction.java
@@ -0,0 +1,716 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.track;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.ColorDialog;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.undo.undoables.UndoableJoined;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackGeneric;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackInfo;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackInstrument;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.TGMusicKeyUtils;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TrackPropertiesAction extends TGActionBase implements TGUpdateListener {
+	
+	public static final String NAME = "action.track.properties";
+	
+	private static final String[] NOTE_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_TUNING);
+	private static final int MINIMUM_LEFT_CONTROLS_WIDTH = 180;
+	private static final int MINIMUM_BUTTON_WIDTH = 80;
+	private static final int MINIMUM_BUTTON_HEIGHT = 25;
+	private static final int MAX_STRINGS = 7;
+	private static final int MIN_STRINGS = 4;
+	private static final int MAX_OCTAVES = 10;
+	private static final int MAX_NOTES = 12;
+	
+	protected Shell dialog;
+	protected Text nameText;
+	protected TGColor trackColor;
+	protected List tempStrings;
+	protected Button stringTransposition;
+	protected Button stringTranspositionTryKeepString;
+	protected Button stringTranspositionApplyToChords;
+	protected Spinner stringCountSpinner;
+	protected Combo[] stringCombos = new Combo[MAX_STRINGS];
+	protected Combo offsetCombo;
+	protected int stringCount;
+	protected Combo instrumentCombo;
+	protected Color colorButtonValue;
+	protected boolean percussionChannel;
+	
+	public TrackPropertiesAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		showDialog(getEditor().getTablature().getShell());
+	}
+	
+	public void showDialog(Shell shell) {
+		TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
+		if (track != null) {
+			this.stringCount = track.getStrings().size();
+			this.trackColor = track.getColor().clone(getSongManager().getFactory());
+			this.percussionChannel = getSongManager().isPercussionChannel(track.getChannelId());
+			this.initTempStrings(track.getStrings());
+			
+			this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			this.dialog.setLayout(new GridLayout(2,false));
+			this.dialog.setText(TuxGuitar.getProperty("track.properties"));
+			
+			this.addListeners();
+			this.dialog.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent e) {
+					removeListeners();
+				}
+			});
+			
+			Composite left = new Composite(this.dialog,SWT.NONE);
+			left.setLayout(new GridLayout());
+			left.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			
+			Composite right = new Composite(this.dialog,SWT.NONE);
+			right.setLayout(new GridLayout());
+			right.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			
+			Composite bottom = new Composite(this.dialog, SWT.NONE);
+			bottom.setLayout(new GridLayout(2,false));
+			bottom.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true,2,1));
+			
+			//GENERAL
+			initTrackInfo(makeGroup(left,1,TuxGuitar.getProperty("track.properties.general")), track);
+			
+			//INSTRUMENT
+			initInstrumentFields(makeGroup(left,1,TuxGuitar.getProperty("instrument")), track);
+			
+			//TUNING
+			initTuningInfo(makeGroup(right,2,TuxGuitar.getProperty("tuning")), track);
+			
+			//BUTTONS
+			initButtons(bottom);
+			
+			updateTuningGroup(!this.percussionChannel);
+			
+			DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		}
+	}
+	
+	private Group makeGroup(Composite parent,int horizontalSpan,String text){
+		Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
+		group.setLayoutData(makeGridData(horizontalSpan));
+		group.setText(text);
+		
+		return group;
+	}
+	
+	private GridData makeGridData(int horizontalSpan){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.horizontalSpan = horizontalSpan;
+		return data;
+	}
+	
+	public GridData getButtonsData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
+		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
+		return data;
+	}
+	
+	private void initTrackInfo(Composite composite,TGTrackImpl track) {
+		composite.setLayout(new GridLayout(/*2,false*/));
+		Composite top = new Composite(composite, SWT.NONE);
+		top.setLayout(new GridLayout(/*2,false*/));
+		top.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
+		Composite bottom = new Composite(composite, SWT.NONE);
+		bottom.setLayout(new GridLayout(/*2,false*/));
+		bottom.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
+		
+		//-----------------------NAME---------------------------------
+		Label nameLabel = new Label(top, SWT.NONE);
+		nameLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
+		nameLabel.setText(TuxGuitar.getProperty("track.name") + ":");
+		
+		this.nameText = new Text(top, SWT.BORDER);
+		this.nameText.setLayoutData(getAlignmentData(MINIMUM_LEFT_CONTROLS_WIDTH,SWT.FILL));
+		this.nameText.setText(track.getName());
+		
+		//-----------------------COLOR---------------------------------
+		Label colorLabel = new Label(bottom, SWT.NONE);
+		colorLabel.setText(TuxGuitar.getProperty("track.color") + ":");
+		colorLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
+		
+		final Button colorButton = new Button(bottom, SWT.PUSH);
+		colorButton.setLayoutData(getAlignmentData(MINIMUM_LEFT_CONTROLS_WIDTH,SWT.FILL));
+		colorButton.setText(TuxGuitar.getProperty("choose"));
+		colorButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				ColorDialog dlg = new ColorDialog(TrackPropertiesAction.this.dialog);
+				dlg.setRGB(TrackPropertiesAction.this.dialog.getDisplay().getSystemColor(SWT.COLOR_BLACK).getRGB());
+				dlg.setText(TuxGuitar.getProperty("choose-color"));
+				RGB rgb = dlg.open();
+				if (rgb != null) {
+					TrackPropertiesAction.this.trackColor.setR(rgb.red);
+					TrackPropertiesAction.this.trackColor.setG(rgb.green);
+					TrackPropertiesAction.this.trackColor.setB(rgb.blue);
+					TrackPropertiesAction.this.setButtonColor(colorButton);
+				}
+			}
+		});
+		colorButton.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				TrackPropertiesAction.this.disposeButtonColor();
+			}
+		});
+		this.setButtonColor(colorButton);
+	}
+	
+	private void initTuningInfo(Composite composite,TGTrackImpl track) {
+		composite.setLayout(new GridLayout(2,false));
+		initTuningData(composite,track);
+		initTuningCombos(composite);
+	}
+	
+	private void initTuningCombos(Composite parent) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		composite.setLayout(new GridLayout(/*MAX_STRINGS, false*/));
+		composite.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,false,true));
+		String[] tuningTexts = getAllValueNames();
+		for (int i = 0; i < MAX_STRINGS; i++) {
+			this.stringCombos[i] = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+			this.stringCombos[i].setItems(tuningTexts);
+		}
+	}
+	
+	private void initTuningData(Composite parent,TGTrackImpl track) {
+		Composite composite = new Composite(parent, SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
+		
+		Composite top = new Composite(composite, SWT.NONE);
+		top.setLayout(new GridLayout());
+		top.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
+		
+		Composite middle = new Composite(composite, SWT.NONE);
+		middle.setLayout(new GridLayout());
+		middle.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
+		
+		Composite bottom = new Composite( composite , SWT.NONE );
+		bottom.setLayout( new GridLayout() );
+		bottom.setLayoutData( new GridData(SWT.FILL,SWT.TOP,true,true) );
+		
+		//---------------------------------STRING--------------------------------
+		Label stringCountLabel = new Label(top, SWT.NONE);
+		stringCountLabel.setText(TuxGuitar.getProperty("tuning.strings") + ":");
+		stringCountLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
+		
+		this.stringCountSpinner = new Spinner(top, SWT.BORDER);
+		this.stringCountSpinner.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
+		this.stringCountSpinner.setMinimum(MIN_STRINGS);
+		this.stringCountSpinner.setMaximum(MAX_STRINGS);
+		this.stringCountSpinner.setSelection(this.stringCount);
+		this.stringCountSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				TrackPropertiesAction.this.stringCount = TrackPropertiesAction.this.stringCountSpinner.getSelection();
+				setDefaultTuning(TrackPropertiesAction.this.percussionChannel);
+				updateTuningGroup(!TrackPropertiesAction.this.percussionChannel);
+			}
+		});
+		
+		//---------------------------------OFFSET--------------------------------
+		Label offsetLabel = new Label(middle, SWT.NONE);
+		offsetLabel.setText(TuxGuitar.getProperty("tuning.offset") + ":");
+		offsetLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
+		
+		this.offsetCombo = new Combo(middle, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.offsetCombo.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
+		for(int i = TGTrack.MIN_OFFSET;i <= TGTrack.MAX_OFFSET;i ++){
+			this.offsetCombo.add(Integer.toString(i));
+			if(i == track.getOffset()){
+				this.offsetCombo.select(i - TGTrack.MIN_OFFSET);
+			}
+		}
+		
+		//---------------------------------OPTIONS----------------------------------
+		this.stringTransposition = new Button( bottom , SWT.CHECK );
+		this.stringTransposition.setLayoutData( new GridData(SWT.FILL,SWT.CENTER,true,true) );
+		this.stringTransposition.setText(TuxGuitar.getProperty("tuning.strings.transpose"));
+		this.stringTransposition.setSelection( true );
+		
+		this.stringTranspositionApplyToChords = new Button( bottom , SWT.CHECK );
+		this.stringTranspositionApplyToChords.setLayoutData( new GridData(SWT.FILL,SWT.CENTER,true,true) );
+		this.stringTranspositionApplyToChords.setText(TuxGuitar.getProperty("tuning.strings.transpose.apply-to-chords"));
+		this.stringTranspositionApplyToChords.setSelection( true );
+		
+		this.stringTranspositionTryKeepString = new Button( bottom , SWT.CHECK );
+		this.stringTranspositionTryKeepString.setLayoutData( new GridData(SWT.FILL,SWT.CENTER,true,true) );
+		this.stringTranspositionTryKeepString.setText(TuxGuitar.getProperty("tuning.strings.transpose.try-keep-strings"));
+		this.stringTranspositionTryKeepString.setSelection( true );
+		
+		this.stringTransposition.addSelectionListener( new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				Button stringTransposition = TrackPropertiesAction.this.stringTransposition;
+				Button stringTranspositionApplyToChords = TrackPropertiesAction.this.stringTranspositionApplyToChords;
+				Button stringTranspositionTryKeepString = TrackPropertiesAction.this.stringTranspositionTryKeepString;
+				stringTranspositionApplyToChords.setEnabled( ( stringTransposition.isEnabled() && stringTransposition.getSelection() ) );
+				stringTranspositionTryKeepString.setEnabled( ( stringTransposition.isEnabled() && stringTransposition.getSelection() ) );
+			}
+		});
+	}
+	
+	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
+		GridData data = new GridData();
+		data.minimumWidth = minimumWidth;
+		data.horizontalAlignment = horizontalAlignment;
+		data.verticalAlignment = SWT.DEFAULT;
+		data.grabExcessHorizontalSpace = true;
+		data.grabExcessVerticalSpace = true;
+		return data;
+	}
+	
+	private void initButtons(final Composite parent) {
+		Button buttonOK = new Button(parent, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonsData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				updateTrackProperties();
+				TrackPropertiesAction.this.dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(parent, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonsData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TrackPropertiesAction.this.dialog.dispose();
+			}
+		});
+		
+		this.dialog.setDefaultButton( buttonOK );
+	}
+	
+	private void initInstrumentFields(Composite composite,TGTrackImpl track) {
+		composite.setLayout(new GridLayout());
+		
+		Composite top = new Composite(composite, SWT.NONE);
+		top.setLayout(new GridLayout(2,false));
+		top.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
+		
+		//------------Instrument Combo-------------------------------------
+		Label instrumentLabel = new Label(top, SWT.NONE);
+		instrumentLabel.setText(TuxGuitar.getProperty("instrument") + ":");
+		instrumentLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true,2,1));
+		
+		this.instrumentCombo = new Combo(top, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.instrumentCombo.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,false));
+		this.instrumentCombo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				checkPercussionChannel();
+			}
+		});
+		this.loadChannels(track.getChannelId());
+		
+		Button settings = new Button(top, SWT.PUSH);
+		settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
+		settings.setToolTipText(TuxGuitar.getProperty("settings"));
+		settings.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,false));
+		settings.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(!TuxGuitar.instance().getChannelManager().isDisposed()){
+					TuxGuitar.instance().getChannelManager().dispose();
+				}
+				TuxGuitar.instance().getChannelManager().show(TrackPropertiesAction.this.dialog);
+			}
+		});
+	}
+	
+	protected void loadChannels(int selectedChannelId){
+		List tgChannelsData = new ArrayList();
+		List tgChannelsAvailable = getSongManager().getChannels();
+		
+		Combo tgChannelsCombo = this.instrumentCombo;
+		tgChannelsCombo.removeAll();
+		tgChannelsCombo.add(TuxGuitar.getProperty("track.instrument.default-select-option"));
+		tgChannelsCombo.select(0);
+		tgChannelsData.add(new Integer(-1));
+		
+		for( int i = 0 ; i < tgChannelsAvailable.size() ; i ++) {
+			TGChannel tgChannel = (TGChannel)tgChannelsAvailable.get(i);
+			tgChannelsData.add(new Integer(tgChannel.getChannelId()));
+			tgChannelsCombo.add(tgChannel.getName());
+			
+			if( tgChannel.getChannelId() == selectedChannelId ){
+				tgChannelsCombo.select(tgChannelsCombo.getItemCount() - 1);
+			}
+			
+		}
+		tgChannelsCombo.setData(tgChannelsData);
+	}
+	
+	protected void reloadChannels(){
+		loadChannels(getSelectedChannelId());
+	}
+	
+	protected void checkPercussionChannel(){
+		boolean percussionChannel = getSongManager().isPercussionChannel( getSelectedChannelId() );
+		if( this.percussionChannel != percussionChannel ){
+			this.setDefaultTuning(percussionChannel);
+			this.updateTuningGroup(!percussionChannel);
+		}
+		this.percussionChannel = percussionChannel;
+	}
+	
+	protected int getSelectedChannelId(){
+		int index = this.instrumentCombo.getSelectionIndex();
+		if( index >= 0 ){
+			Object data = this.instrumentCombo.getData();
+			if( data instanceof List && ((List)data).size() > index ){
+				return ((Integer)((List)data).get(index)).intValue();
+			}
+		}
+		return -1;
+	}
+	
+	protected void updateTrackProperties() {
+		final TGSongManager songManager = getSongManager();
+		final TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
+		
+		final String trackName = this.nameText.getText();
+		
+		final List strings = new ArrayList();
+		for (int i = 0; i < this.stringCount; i++) {
+			strings.add(TGSongManager.newString(getSongManager().getFactory(),(i + 1), this.stringCombos[i].getSelectionIndex()));
+		}
+		
+		final int channelId = getSelectedChannelId();
+		final int offset = ((songManager.isPercussionChannel(channelId))?0:TGTrack.MIN_OFFSET + this.offsetCombo.getSelectionIndex());
+		
+		
+		final TGColor trackColor = this.trackColor;
+		final boolean infoChanges = hasInfoChanges(track,trackName,trackColor,offset);
+		final boolean tuningChanges = hasTuningChanges(track,strings);
+		final boolean channelChanges = hasChannelChanges(track, channelId);
+		final boolean transposeStrings = shouldTransposeStrings(track, channelId);
+		final boolean transposeApplyToChords = (transposeStrings && this.stringTranspositionApplyToChords.getSelection());
+		final boolean transposeTryKeepString = (transposeStrings && this.stringTranspositionTryKeepString.getSelection());
+		
+		try {
+			if(infoChanges || tuningChanges || channelChanges){
+				TGActionLock.lock();
+				TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
+						TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+						new Thread( new Runnable() {
+							public void run() throws TGException {
+								TuxGuitar.instance().getFileHistory().setUnsavedFile();
+								UndoableJoined undoable = new UndoableJoined();
+								
+								UndoableTrackGeneric undoableGeneric = null;
+								if(tuningChanges){
+									undoableGeneric = UndoableTrackGeneric.startUndo(track);
+								}
+								
+								//--------------------------------------info---------------------------------------
+								if(infoChanges){
+									UndoableTrackInfo undoableInfo = null;
+									if(!tuningChanges){
+										undoableInfo = UndoableTrackInfo.startUndo(track);
+									}
+									songManager.getTrackManager().changeInfo(track,trackName,trackColor,offset);
+									if(!tuningChanges && undoableInfo != null){
+										undoable.addUndoableEdit(undoableInfo.endUndo(track));
+									}
+								}
+								//--------------------------------------tuning---------------------------------------
+								if(tuningChanges){
+									updateTrackTunings(track, strings, transposeStrings, transposeTryKeepString, transposeApplyToChords);
+								}
+								//-----------------------------instrument----------------------------------------------
+								if(channelChanges){
+									UndoableTrackInstrument undoableInstrument = null;
+									if(!tuningChanges){
+										undoableInstrument = UndoableTrackInstrument.startUndo(track);
+									}
+									songManager.getTrackManager().changeChannel(track,channelId);
+									if(!tuningChanges && undoableInstrument != null){
+										undoable.addUndoableEdit(undoableInstrument.endUndo(track));
+									}
+								}
+								if(tuningChanges && undoableGeneric != null){
+									undoable.addUndoableEdit(undoableGeneric.endUndo(track));
+								}
+								addUndoableEdit(undoable.endUndo());
+								
+								new SyncThread(new Runnable() {
+									public void run() throws TGException {
+										if(!TuxGuitar.isDisposed()){
+											updateTablature();
+											TuxGuitar.instance().updateCache( true );
+											TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+											TGActionLock.unlock();
+										}
+									}
+								}).start();
+							}
+						}).start();
+					}
+				});
+			}
+		} catch (Throwable throwable) {
+			TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+			TGActionLock.unlock();
+			throwable.printStackTrace();
+		}
+	}
+	
+	protected boolean shouldTransposeStrings(TGTrackImpl track, int selectedChannelId){
+		if(this.stringTransposition.getSelection()){
+			boolean percussionChannelNew = getSongManager().isPercussionChannel(selectedChannelId);
+			boolean percussionChannelOld = getSongManager().isPercussionChannel(track.getChannelId());
+			
+			return (!percussionChannelNew && !percussionChannelOld);
+		}
+		return false;
+	}
+	
+	protected boolean hasInfoChanges(TGTrackImpl track,String name,TGColor color,int offset){
+		if(!name.equals(track.getName())){
+			return true;
+		}
+		if(!color.isEqual(track.getColor())){
+			return true;
+		}
+		if(offset != track.getOffset()){
+			return true;
+		}
+		return false;
+	}
+	
+	protected boolean hasChannelChanges(TGTrackImpl track,int channelId){
+		return ( track.getChannelId() != channelId );
+	}
+	
+	protected boolean hasTuningChanges(TGTrackImpl track,List newStrings){
+		List oldStrings = track.getStrings();
+		//check the number of strings
+		if(oldStrings.size() != newStrings.size()){
+			return true;
+		}
+		//check the tuning of strings
+		for(int i = 0;i < oldStrings.size();i++){
+			TGString oldString = (TGString)oldStrings.get(i);
+			boolean stringExists = false;
+			for(int j = 0;j < newStrings.size();j++){
+				TGString newString = (TGString)newStrings.get(j);
+				if(newString.isEqual(oldString)){
+					stringExists = true;
+				}
+			}
+			if(!stringExists){
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	protected void updateTrackTunings(TGTrackImpl track, List strings, boolean transposeStrings , boolean transposeTryKeepString , boolean transposeApplyToChords ){
+		int[] transpositions = getStringTranspositions(track, strings);
+		getSongManager().getTrackManager().changeInstrumentStrings(track,strings);
+		if( transposeStrings ){
+			getSongManager().getTrackManager().transposeNotes(track, transpositions, transposeTryKeepString, transposeApplyToChords );
+		}
+	}
+	
+	protected int[] getStringTranspositions(TGTrackImpl track, List newStrings ){
+		int[] transpositions = new int[ newStrings.size() ];
+		
+		TGString newString = null;
+		TGString oldString = null;
+		for( int index = 0; index < transpositions.length ; index ++ ){
+			for( int i = 0; i < track.stringCount() ; i ++ ){
+				TGString string = track.getString( i + 1 );
+				if( string.getNumber() == (index + 1) ){
+					oldString = string;
+					break;
+				}
+			}
+			for( int i = 0; i < newStrings.size() ; i ++ ){
+				TGString string = (TGString)newStrings.get( i );
+				if( string.getNumber() == (index + 1) ){
+					newString = string;
+					break;
+				}
+			}
+			if( oldString != null && newString != null ){
+				transpositions[ index ] = (oldString.getValue() - newString.getValue());
+			}else{
+				transpositions[ index ] = 0;
+			}
+			
+			newString = null;
+			oldString = null;
+		}
+		
+		return transpositions;
+	}
+	
+	protected void setButtonColor(Button button){
+		Color color = new Color(this.dialog.getDisplay(), this.trackColor.getR(), this.trackColor.getG(), this.trackColor.getB());
+		button.setForeground( color );
+		this.disposeButtonColor();
+		this.colorButtonValue = color;
+	}
+	
+	protected void disposeButtonColor(){
+		if(this.colorButtonValue != null && !this.colorButtonValue.isDisposed()){
+			this.colorButtonValue.dispose();
+			this.colorButtonValue = null;
+		}
+	}
+	
+	protected void updateTuningGroup(boolean enabled) {
+		for (int i = 0; i < this.tempStrings.size(); i++) {
+			TGString string = (TGString)this.tempStrings.get(i);
+			this.stringCombos[i].select(string.getValue());
+			this.stringCombos[i].setVisible(true);
+			this.stringCombos[i].setEnabled(enabled);
+		}
+		
+		for (int i = this.tempStrings.size(); i < MAX_STRINGS; i++) {
+			this.stringCombos[i].select(0);
+			this.stringCombos[i].setVisible(false);
+		}
+		this.offsetCombo.setEnabled(enabled);
+		this.stringTransposition.setEnabled(enabled);
+		this.stringTranspositionApplyToChords.setEnabled(enabled && this.stringTransposition.getSelection());
+		this.stringTranspositionTryKeepString.setEnabled(enabled && this.stringTransposition.getSelection());
+	}
+	
+	protected void initTempStrings(List realStrings) {
+		this.tempStrings = new ArrayList();
+		for (int i = 0; i < realStrings.size(); i++) {
+			TGString realString = (TGString) realStrings.get(i);
+			this.tempStrings.add(realString.clone(getSongManager().getFactory()));
+		}
+	}
+	
+	protected void setDefaultTuning( boolean percussionChannel ) {
+		this.tempStrings.clear();
+		if( percussionChannel ) {
+			for (int i = 1; i <= this.stringCount; i++) {
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),i, 0));
+			}
+		}
+		else {
+			switch (this.stringCount) {
+			case 7:
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 64));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 59));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 55));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 50));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),5, 45));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),6, 40));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),7, 35));
+				break;
+			case 6:
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 64));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 59));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 55));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 50));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),5, 45));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),6, 40));
+				break;
+			case 5:
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 43));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 38));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 33));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 28));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),5, 23));
+				break;
+			case 4:
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 43));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 38));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 33));
+				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 28));
+				break;
+			default:
+				for( int i = 1 ; i <= this.stringCount ; i ++ ){
+					this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),i,0));
+				}
+				break;
+			}
+		}
+	}
+	
+	protected String[] getAllValueNames() {
+		String[] valueNames = new String[MAX_NOTES * MAX_OCTAVES];
+		for (int i = 0; i < valueNames.length; i++) {
+			valueNames[i] =  NOTE_NAMES[ (i -  ((i / MAX_NOTES) * MAX_NOTES) ) ] + (i / MAX_NOTES);
+		}
+		return valueNames;
+	}
+	
+	public void addListeners(){
+		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
+	}
+	
+	public void removeListeners(){
+		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
+	}
+	
+	public void updateItems(){
+		if( this.dialog != null && !this.dialog.isDisposed() ){
+			this.reloadChannels();
+		}
+	}
+	
+	public void doUpdate(int type) {
+		if( type == TGUpdateListener.SELECTION ){
+			this.updateItems();
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportCountDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportCountDownAction.java
new file mode 100644
index 0000000..cc0c1a2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportCountDownAction.java
@@ -0,0 +1,18 @@
+package org.herac.tuxguitar.app.action.impl.transport;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+public class TransportCountDownAction extends TGActionBase {
+	
+	public static final String NAME = "action.transport.count-down";
+	
+	public TransportCountDownAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TuxGuitar.instance().getPlayer().getCountDown().setEnabled(!TuxGuitar.instance().getPlayer().getCountDown().isEnabled());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportMetronomeAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportMetronomeAction.java
new file mode 100644
index 0000000..0d2d52a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportMetronomeAction.java
@@ -0,0 +1,18 @@
+package org.herac.tuxguitar.app.action.impl.transport;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+public class TransportMetronomeAction extends TGActionBase {
+	
+	public static final String NAME = "action.transport.metronome";
+	
+	public TransportMetronomeAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TuxGuitar.instance().getPlayer().setMetronomeEnabled(!TuxGuitar.instance().getPlayer().isMetronomeEnabled());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportModeAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportModeAction.java
new file mode 100644
index 0000000..b48d4d0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportModeAction.java
@@ -0,0 +1,467 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.transport;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.TypedEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.player.base.MidiPlayerMode;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGSong;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class TransportModeAction extends TGActionBase {
+	
+	public static final String NAME = "action.transport.mode";
+	
+	protected static final int MIN_SELECTION = 1;
+	protected static final int MAX_SELECTION = 500;
+	protected static final int[] DEFAULT_PERCENTS = new int[]{25,50,75,100,125,150,175,200};
+	
+	protected Button simple;
+	protected Button simpleLoop;
+	protected Combo simplePercent;
+	
+	protected Button custom;
+	protected Spinner customFrom;
+	protected Spinner customTo;
+	protected Spinner customIncrement;
+	
+	protected MHeaderCombo loopSHeader;
+	protected MHeaderCombo loopEHeader;
+	
+	public TransportModeAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TypedEvent e = (TypedEvent)context.getAttribute(TGActionProcessor.PROPERTY_TYPED_EVENT);
+		
+		this.showDialog(e.widget.getDisplay().getActiveShell(), TuxGuitar.instance().getPlayer().getMode());
+	}
+	
+	public void showDialog(final Shell parent,final MidiPlayerMode mode) {
+		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("transport.mode"));
+		
+		// ----------------------------------------------------------------------
+		
+		Composite radios = new Composite(dialog, SWT.NONE);
+		radios.setLayout(new GridLayout());
+		radios.setLayoutData(getMainData());
+		
+		//---Simple---
+		this.simple = new Button(radios, SWT.RADIO);
+		this.simple.setText(TuxGuitar.getProperty("transport.mode.simple"));
+		this.simple.setSelection(mode.getType() == MidiPlayerMode.TYPE_SIMPLE);
+		RadioSelectionAdapter simpleAdapter = new RadioSelectionAdapter(this.simple);
+		
+		Group simpleGroup = new Group(radios, SWT.SHADOW_ETCHED_IN);
+		simpleGroup.setLayout(new GridLayout(2,false));
+		simpleGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		simpleGroup.setText(TuxGuitar.getProperty("transport.mode.simple"));
+		simpleAdapter.addControl(simpleGroup);
+		
+		simpleAdapter.addControl(makeLabel(simpleGroup, TuxGuitar.getProperty("transport.mode.simple.tempo-percent"),SWT.LEFT,1));
+		this.simplePercent = new Combo(simpleGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.simplePercent.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		for(int i = 0; i < DEFAULT_PERCENTS.length; i ++){
+			this.simplePercent.add(Integer.toString(DEFAULT_PERCENTS[i]) + "%",i);
+			if(mode.getSimplePercent() == DEFAULT_PERCENTS[i]){
+				this.simplePercent.select(i);
+			}
+		}
+		simpleAdapter.addControl(this.simplePercent);
+		
+		this.simpleLoop = new Button(simpleGroup, SWT.CHECK);
+		this.simpleLoop.setText(TuxGuitar.getProperty("transport.mode.simple.loop"));
+		this.simpleLoop.setSelection(mode.isLoop());
+		simpleAdapter.addControl(this.simpleLoop);
+		
+		GridData loopedData = new GridData(SWT.FILL,SWT.FILL,true,true);
+		loopedData.horizontalSpan = 2;
+		this.simpleLoop.setLayoutData(loopedData);
+		
+		//---Trainer---
+		this.custom = new Button(radios, SWT.RADIO);
+		this.custom.setText(TuxGuitar.getProperty("transport.mode.trainer"));
+		this.custom.setSelection(mode.getType() == MidiPlayerMode.TYPE_CUSTOM);
+		RadioSelectionAdapter customAdapter = new RadioSelectionAdapter(this.custom);
+		
+		Group trainerGroup = new Group(radios, SWT.SHADOW_ETCHED_IN);
+		trainerGroup.setLayout(new GridLayout(6,false));
+		trainerGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		trainerGroup.setText(TuxGuitar.getProperty("transport.mode.trainer"));
+		customAdapter.addControl(trainerGroup);
+		
+		customAdapter.addControl(makeLabel(trainerGroup, TuxGuitar.getProperty("composition.tempo"),SWT.LEFT,1));
+		this.customFrom = new Spinner(trainerGroup,SWT.BORDER);
+		this.customFrom.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		this.customFrom.setMinimum(MIN_SELECTION);
+		this.customFrom.setMaximum(MAX_SELECTION);
+		this.customFrom.setSelection(mode.getCustomPercentFrom());
+		customAdapter.addControl(this.customFrom);
+		customAdapter.addControl(makeLabel(trainerGroup, "%",SWT.LEFT,1));
+		
+		customAdapter.addControl(makeLabel(trainerGroup, TuxGuitar.getProperty("edit.to"),SWT.RIGHT,1));
+		this.customTo = new Spinner(trainerGroup,SWT.BORDER);
+		this.customTo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		this.customTo.setMinimum(MIN_SELECTION);
+		this.customTo.setMaximum(MAX_SELECTION);
+		this.customTo.setSelection(mode.getCustomPercentTo());
+		customAdapter.addControl(this.customTo);
+		customAdapter.addControl(makeLabel(trainerGroup, "%",SWT.LEFT,1));
+		
+		customAdapter.addControl(makeLabel(trainerGroup, TuxGuitar.getProperty("transport.mode.trainer.increment-description"),SWT.LEFT,4));
+		this.customIncrement = new Spinner(trainerGroup,SWT.BORDER);
+		this.customIncrement.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		this.customIncrement.setMinimum(MIN_SELECTION);
+		this.customIncrement.setMaximum(MAX_SELECTION);
+		this.customIncrement.setSelection(mode.getCustomPercentIncrement());
+		customAdapter.addControl(this.customIncrement);
+		customAdapter.addControl(makeLabel(trainerGroup, "%",SWT.LEFT,1));
+		
+		SpinnerSelectionAdapter spinnerAdapter = new SpinnerSelectionAdapter(this.customFrom,this.customTo,this.customIncrement);
+		this.customFrom.addSelectionListener(spinnerAdapter);
+		this.customTo.addSelectionListener(spinnerAdapter);
+		this.customIncrement.addSelectionListener(spinnerAdapter);
+		
+		//--- Loop Range ---
+		MHeaderRangeStatus mHeaderRangeStatus = new MHeaderRangeStatus(this.simple,this.simpleLoop,this.custom);
+		
+		Group rangeGroup = new Group(radios, SWT.SHADOW_ETCHED_IN);
+		rangeGroup.setLayout(new GridLayout(2,false));
+		rangeGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		rangeGroup.setText(TuxGuitar.getProperty("transport.mode.loop-range"));
+		mHeaderRangeStatus.addControl( rangeGroup );
+		
+		mHeaderRangeStatus.addControl( makeLabel(rangeGroup, TuxGuitar.getProperty("transport.mode.loop-range.from"), SWT.LEFT, 1) );
+		this.loopSHeader = new MHeaderCombo(rangeGroup);
+		mHeaderRangeStatus.addControl( this.loopSHeader.getControl() );
+		
+		mHeaderRangeStatus.addControl( makeLabel(rangeGroup, TuxGuitar.getProperty("transport.mode.loop-range.to"), SWT.LEFT, 1) );
+		this.loopEHeader = new MHeaderCombo(rangeGroup);
+		mHeaderRangeStatus.addControl( this.loopEHeader.getControl() );
+		
+		MHeaderComboController mHeaderController = new MHeaderComboController(this.loopSHeader, this.loopEHeader);
+		mHeaderController.updateLoopSHeader( mode.getLoopSHeader() );
+		mHeaderController.updateLoopEHeader( mode.getLoopSHeader() , mode.getLoopEHeader() );
+		mHeaderController.appendListener();
+		
+		simpleAdapter.update();
+		customAdapter.update();
+		mHeaderRangeStatus.update();
+		// ------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2, false));
+		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				updateMode(mode);
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private GridData getMainData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 350;
+		return data;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private Label makeLabel(Composite parent,String text,int aligment,int horizontalSpan){
+		Label label = new Label(parent,SWT.CENTER | aligment);
+		label.setText(text);
+		GridData data = new GridData(SWT.FILL,SWT.CENTER,true,true);
+		data.horizontalSpan = horizontalSpan;
+		label.setLayoutData(data);
+		return label;
+	}
+	
+	protected void updateMode(MidiPlayerMode mode){
+		int type = (this.custom.getSelection())?MidiPlayerMode.TYPE_CUSTOM:MidiPlayerMode.TYPE_SIMPLE;
+		boolean loop = (type == MidiPlayerMode.TYPE_CUSTOM || (type == MidiPlayerMode.TYPE_SIMPLE && this.simpleLoop.getSelection()));
+		mode.setType(type);
+		mode.setLoop( loop );
+		mode.setSimplePercent( this.simplePercent.getSelectionIndex() >= 0?DEFAULT_PERCENTS[this.simplePercent.getSelectionIndex()]:MidiPlayerMode.DEFAULT_TEMPO_PERCENT);
+		mode.setCustomPercentFrom(this.customFrom.getSelection());
+		mode.setCustomPercentTo(this.customTo.getSelection());
+		mode.setCustomPercentIncrement(this.customIncrement.getSelection());
+		mode.setLoopSHeader( ( loop ? this.loopSHeader.getValue() : -1 ) );
+		mode.setLoopEHeader( ( loop ? this.loopEHeader.getValue() : -1 ) );
+		//mode.setLoopSHeader( ( loop && this.loopSHeader.getSelectionIndex() > 0 ? this.loopSHeader.getSelectionIndex() : -1 ) );
+		//mode.setLoopEHeader( ( loop && this.loopEHeader.getSelectionIndex() > 0 ? this.loopEHeader.getSelectionIndex() : -1 ) );
+		mode.reset();
+	}
+	
+	private class RadioSelectionAdapter extends SelectionAdapter{
+		private Button control;
+		private List controls;
+		
+		public RadioSelectionAdapter(Button control) {
+			this.controls = new ArrayList();
+			this.control = control;
+			this.control.addSelectionListener(this);
+		}
+		
+		public void addControl(Control control){
+			this.controls.add(control);
+		}
+		
+		public void update(){
+			boolean enabled = this.control.getSelection();
+			Iterator it = this.controls.iterator();
+			while(it.hasNext()){
+				Control control = (Control)it.next();
+				control.setEnabled(enabled);
+			}
+		}
+		
+		public void widgetSelected(SelectionEvent e) {
+			update();
+		}
+		
+	}
+	
+	private class SpinnerSelectionAdapter extends SelectionAdapter{
+		private Spinner to;
+		private Spinner from;
+		private Spinner increment;
+		
+		public SpinnerSelectionAdapter(Spinner from,Spinner to, Spinner increment) {
+			this.from = from;
+			this.to = to;
+			this.increment = increment;
+		}
+		
+		public void widgetSelected(SelectionEvent e) {
+			if(e.widget.equals(this.from)){
+				if(this.from.getSelection() < MIN_SELECTION){
+					this.from.setSelection(MIN_SELECTION);
+				}else if(this.from.getSelection() >= this.to.getSelection()){
+					this.from.setSelection(this.to.getSelection() - 1);
+				}
+			}else if(e.widget.equals(this.to)){
+				if(this.to.getSelection() <= this.from.getSelection()){
+					this.to.setSelection(this.from.getSelection() + 1);
+				}else if(this.to.getSelection() > MAX_SELECTION){
+					this.to.setSelection(MAX_SELECTION);
+				}
+			}
+			if(this.increment.getSelection() > (this.to.getSelection() - this.from.getSelection())){
+				this.increment.setSelection(this.to.getSelection() - this.from.getSelection());
+			}
+		}
+	}
+	
+	private class MHeaderRangeStatus extends SelectionAdapter{
+		
+		private List controls;
+		private boolean enabled;
+		
+		private Button simpleMode;
+		private Button simpleLoop;
+		private Button customLoop;
+		
+		public MHeaderRangeStatus(Button simpleMode, Button simpleLoop, Button customLoop) {
+			this.controls = new ArrayList();
+			this.enabled = false;
+			this.simpleMode = simpleMode;
+			this.simpleLoop = simpleLoop;
+			this.customLoop = customLoop;
+			this.simpleMode.addSelectionListener(this);
+			this.simpleLoop.addSelectionListener(this);
+			this.customLoop.addSelectionListener(this);
+		}
+		
+		public void addControl(Control control){
+			this.controls.add(control);
+		}
+		
+		public void update(){
+			// Check enabled
+			this.enabled = this.customLoop.getSelection();
+			if( !this.enabled ){
+				if( this.simpleMode.getSelection() ){
+					this.enabled = this.simpleLoop.getSelection();
+				}
+			}
+			
+			// Update controls
+			Iterator it = this.controls.iterator();
+			while(it.hasNext()){
+				Control control = (Control)it.next();
+				control.setEnabled( this.enabled );
+			}
+		}
+		
+		public void widgetSelected(SelectionEvent e) {
+			this.update();
+		}
+	}
+	
+	private class MHeaderCombo {
+		private List values;
+		private Combo combo;
+		
+		public MHeaderCombo( Composite parent ){
+			this.values = new ArrayList();
+			this.combo = new Combo( parent, SWT.DROP_DOWN | SWT.READ_ONLY );
+			this.combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		}
+		
+		public Combo getControl(){
+			return this.combo;
+		}
+		
+		public void clear(){
+			this.values.clear();
+			this.combo.removeAll();
+		}
+		
+		public void addItem( String text , int value ){
+			this.values.add( new Integer( value ) );
+			this.combo.add( text );
+		}
+		
+		public void addItem( TGMeasureHeader header ){
+			this.addItem( getItemText(header) , header.getNumber() );
+		}
+		
+		public void setValue( int value ){
+			for( int index = 0 ; index < this.values.size() ; index++ ){
+				Integer currentValue = (Integer) this.values.get( index );
+				if( currentValue != null && currentValue.intValue() == value ){
+					int currentIndex = this.combo.getSelectionIndex();
+					if( currentIndex != index ){
+						this.combo.select( index );
+					}
+				}
+			}
+		}
+		
+		public int getValue(){
+			int index = this.combo.getSelectionIndex();
+			if( index >= 0 && index < this.values.size() ){
+				Integer value = (Integer) this.values.get( index );
+				if( value != null ){
+					return value.intValue();
+				}
+			}
+			return -1;
+		}
+		
+		private String getItemText( TGMeasureHeader header ){
+			String text = ("#" + header.getNumber());
+			if( header.hasMarker() ){
+				text += (" (" + header.getMarker().getTitle() + ")");
+			}
+			return text;
+		}
+	}
+	
+	private class MHeaderComboController {
+		protected MHeaderCombo loopSHeader;
+		protected MHeaderCombo loopEHeader;
+		
+		public MHeaderComboController(MHeaderCombo loopSHeader, MHeaderCombo loopEHeader){
+			this.loopSHeader = loopSHeader;
+			this.loopEHeader = loopEHeader;
+		}
+		
+		public void updateLoopSHeader( int sHeader ){
+			TGSong song = TuxGuitar.instance().getSongManager().getSong();
+			this.loopSHeader.clear();
+			this.loopSHeader.addItem(TuxGuitar.getProperty("transport.mode.loop-range.from-default"), -1 );
+			for(int i = 0; i < song.countMeasureHeaders() ; i ++){
+				TGMeasureHeader header = song.getMeasureHeader( i );
+				this.loopSHeader.addItem( header );
+			}
+			this.loopSHeader.setValue( sHeader );
+		}
+		
+		public void updateLoopEHeader( int sHeader , int eHeader ){
+			TGSong song = TuxGuitar.instance().getSongManager().getSong();
+			this.loopEHeader.clear();
+			this.loopEHeader.addItem(TuxGuitar.getProperty("transport.mode.loop-range.to-default"), -1 );
+			for(int i = 0; i < song.countMeasureHeaders() ; i ++){
+				TGMeasureHeader header = song.getMeasureHeader( i );
+				if( sHeader == -1 || header.getNumber() >= sHeader ){
+					this.loopEHeader.addItem( header );
+				}
+			}
+			this.loopEHeader.setValue( eHeader );
+		}
+		
+		public void updateLoopEHeader(){
+			int sHeader = this.loopSHeader.getValue();
+			int eHeader = this.loopEHeader.getValue();
+			if( eHeader != -1 && sHeader > eHeader ){
+				eHeader = sHeader;
+			}
+			this.updateLoopEHeader( sHeader , eHeader );
+		}
+		
+		public void appendListener(){
+			this.loopSHeader.getControl().addSelectionListener( new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					updateLoopEHeader();
+				}
+			});
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportPlayAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportPlayAction.java
new file mode 100644
index 0000000..0265e6b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportPlayAction.java
@@ -0,0 +1,29 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.transport;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TransportPlayAction extends TGActionBase {
+	
+	public static final String NAME = "action.transport.play";
+	
+	public TransportPlayAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TuxGuitar.instance().getTransport().play();
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportSetLoopEHeaderAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportSetLoopEHeaderAction.java
new file mode 100644
index 0000000..bccaf6b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportSetLoopEHeaderAction.java
@@ -0,0 +1,26 @@
+package org.herac.tuxguitar.app.action.impl.transport;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.player.base.MidiPlayerMode;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+public class TransportSetLoopEHeaderAction extends TGActionBase {
+	
+	public static final String NAME = "action.transport.set-loop-end";
+	
+	public TransportSetLoopEHeaderAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
+		if( measure != null ){
+			MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
+			if( pm.isLoop() ){
+				pm.setLoopEHeader( pm.getLoopEHeader() != measure.getNumber() ? measure.getNumber() : -1 );
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportSetLoopSHeaderAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportSetLoopSHeaderAction.java
new file mode 100644
index 0000000..5de732f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportSetLoopSHeaderAction.java
@@ -0,0 +1,26 @@
+package org.herac.tuxguitar.app.action.impl.transport;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.player.base.MidiPlayerMode;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+public class TransportSetLoopSHeaderAction extends TGActionBase {
+	
+	public static final String NAME = "action.transport.set-loop-start";
+	
+	public TransportSetLoopSHeaderAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
+		if( measure != null ){
+			MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
+			if( pm.isLoop() ){
+				pm.setLoopSHeader( pm.getLoopSHeader() != measure.getNumber() ? measure.getNumber() : -1 );
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportStopAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportStopAction.java
new file mode 100644
index 0000000..034f344
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/transport/TransportStopAction.java
@@ -0,0 +1,30 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.transport;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TransportStopAction extends TGActionBase{
+	
+	public static final String NAME = "action.transport.stop";
+	
+	public TransportStopAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TuxGuitar.instance().getTransport().stop();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowFretBoardAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowFretBoardAction.java
new file mode 100644
index 0000000..f527fd7
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowFretBoardAction.java
@@ -0,0 +1,37 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.view;
+
+import org.eclipse.swt.SWT;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ShowFretBoardAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.show-fretboard";
+	
+	public ShowFretBoardAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		if(TuxGuitar.instance().getFretBoardEditor().isVisible()){
+			TuxGuitar.instance().getFretBoardEditor().hideFretBoard();
+		}else{
+			TuxGuitar.instance().getFretBoardEditor().showFretBoard();
+		}
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowInstrumentsAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowInstrumentsAction.java
new file mode 100644
index 0000000..68fdaa8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowInstrumentsAction.java
@@ -0,0 +1,34 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.view;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ShowInstrumentsAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.show-instruments";
+	
+	public ShowInstrumentsAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getChannelManager().isDisposed()){
+			TuxGuitar.instance().getChannelManager().show();
+		}else{
+			TuxGuitar.instance().getChannelManager().dispose();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowMatrixAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowMatrixAction.java
new file mode 100644
index 0000000..295a7e7
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowMatrixAction.java
@@ -0,0 +1,34 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.view;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ShowMatrixAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.show-matrix";
+	
+	public ShowMatrixAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getMatrixEditor().isDisposed()){
+			TuxGuitar.instance().getMatrixEditor().show();
+		}else{
+			TuxGuitar.instance().getMatrixEditor().dispose();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowPianoAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowPianoAction.java
new file mode 100644
index 0000000..0879431
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowPianoAction.java
@@ -0,0 +1,34 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.view;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ShowPianoAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.show-piano";
+	
+	public ShowPianoAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getPianoEditor().isDisposed()){
+			TuxGuitar.instance().getPianoEditor().show();
+		}else{
+			TuxGuitar.instance().getPianoEditor().dispose();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowToolbarsAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowToolbarsAction.java
new file mode 100644
index 0000000..2cb78c2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowToolbarsAction.java
@@ -0,0 +1,30 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.view;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ShowToolbarsAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.show-toolbars";
+	
+	public ShowToolbarsAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		TuxGuitar.instance().getItemManager().toogleToolbarVisibility();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowTransportAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowTransportAction.java
new file mode 100644
index 0000000..c53bfe3
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/action/impl/view/ShowTransportAction.java
@@ -0,0 +1,34 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.action.impl.view;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ShowTransportAction extends TGActionBase{
+	
+	public static final String NAME = "action.view.show-transport";
+	
+	public ShowTransportAction() {
+		super(NAME, AUTO_LOCK | AUTO_UNLOCK |  AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+	}
+	
+	protected void processAction(TGActionContext context){
+		if(TuxGuitar.instance().getTransport().isDisposed()){
+			TuxGuitar.instance().getTransport().show();
+		}else{
+			TuxGuitar.instance().getTransport().dispose();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/CannotInsertTransferException.java b/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/CannotInsertTransferException.java
new file mode 100644
index 0000000..45a4d4a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/CannotInsertTransferException.java
@@ -0,0 +1,34 @@
+/*
+ * Created on 05-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.clipboard;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class CannotInsertTransferException extends Exception{
+	
+	private static final long serialVersionUID = 1L;
+	
+	public CannotInsertTransferException() {
+		super();
+	}
+	
+	public CannotInsertTransferException(String message) {
+		super(message);
+	}
+	
+	public CannotInsertTransferException(String message, Throwable cause) {
+		super(message, cause);
+	}
+	
+	public CannotInsertTransferException(Throwable cause) {
+		super(cause);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/ClipBoard.java b/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/ClipBoard.java
new file mode 100644
index 0000000..dbc43e4
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/ClipBoard.java
@@ -0,0 +1,40 @@
+/*
+ * Created on 09-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.clipboard;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ClipBoard {
+	private Transferable transferable;
+	
+	public ClipBoard(){
+		this.transferable = null;
+	}
+	
+	public void addTransferable(Transferable transferable){
+		this.transferable = transferable;
+	}
+	
+	public Transferable getTransferable(){
+		return this.transferable;
+	}
+	
+	public void insertTransfer() throws CannotInsertTransferException{
+		if(this.isEmpty()){
+			throw new CannotInsertTransferException();
+		}
+		this.transferable.insertTransfer();
+	}
+	
+	public boolean isEmpty(){
+		return (this.transferable == null);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/MeasureTransferable.java b/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/MeasureTransferable.java
new file mode 100644
index 0000000..da0d2ff
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/MeasureTransferable.java
@@ -0,0 +1,130 @@
+/*
+ * Created on 09-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.clipboard;
+
+import java.util.Iterator;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableInsertMeasure;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableReplaceMeasures;
+import org.herac.tuxguitar.song.helpers.TGSongSegment;
+import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGTrack;
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MeasureTransferable implements Transferable {
+	public static final int TRANSFER_TYPE_REPLACE = 1;
+	public static final int TRANSFER_TYPE_INSERT = 2;
+	
+	private TablatureEditor tablatureEditor;
+	private TGSongSegment segment;
+	private int transferType;
+	private int pasteCount;
+	
+	public MeasureTransferable(TablatureEditor tablatureEditor, int p1, int p2,boolean allTracks) {
+		this.tablatureEditor = tablatureEditor;
+		this.transferType = TRANSFER_TYPE_REPLACE;
+		this.getTransfer(p1, p2,allTracks);
+	}
+	
+	private void getTransfer(int p1, int p2,boolean allTracks) {
+		if(allTracks){
+			this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2);
+		}else{
+			TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
+			this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2,track);
+		}
+		skipMarkers(this.segment);
+	}
+	
+	public void insertTransfer() throws CannotInsertTransferException {
+		TGSongSegmentHelper helper = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager());
+		TGSongSegment segment = helper.createSegmentCopies(this.segment, this.pasteCount );
+		if(this.transferType == TRANSFER_TYPE_REPLACE){
+			replaceMeasures(helper, segment);
+		}else if(this.transferType == TRANSFER_TYPE_INSERT){
+			insertMeasures(helper, segment);
+		}
+	}
+	
+	public void insertMeasures(TGSongSegmentHelper helper, TGSongSegment segment) throws CannotInsertTransferException {
+		TGMeasure measure = this.tablatureEditor.getTablature().getCaret().getMeasure();
+		TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
+		if (measure == null || segment.isEmpty()) {
+			throw new CannotInsertTransferException();
+		}
+		//Si el segmento tiene una sola pista,
+		//la pego en la pista seleccionada
+		int toTrack = ((segment.getTracks().size() == 1)?track.getNumber():0);
+		
+		//comienza el undoable
+		UndoableInsertMeasure undoable = new UndoableInsertMeasure(toTrack);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		TGMeasureHeader first = (TGMeasureHeader)segment.getHeaders().get(0);
+		int fromNumber = measure.getNumber();
+		long theMove = (measure.getStart() - first.getStart());
+		
+		helper.insertMeasures(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),fromNumber,theMove,toTrack);
+		
+		//termia el undoable
+		TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),segment.getHeaders().size(),fromNumber,theMove));
+	}
+	
+	public void replaceMeasures(TGSongSegmentHelper helper, TGSongSegment segment) throws CannotInsertTransferException {
+		TGMeasure measure = this.tablatureEditor.getTablature().getCaret().getMeasure();
+		TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
+		if (measure == null || segment.isEmpty()) {
+			throw new CannotInsertTransferException();
+		}
+		TGMeasureHeader first = (TGMeasureHeader)segment.getHeaders().get(0);
+		
+		//Si el segmento tiene una sola pista,
+		//la pego en la pista seleccionada
+		int toTrack = ((segment.getTracks().size() == 1)?track.getNumber():0);
+		
+		//si no existen los compases los creo
+		int count = segment.getHeaders().size();
+		int current = measure.getNumber();
+		int freeSpace =  (track.countMeasures() - (current - 1));
+		long theMove = (measure.getStart() - first.getStart());
+		
+		//comienza el undoable
+		UndoableReplaceMeasures undoable = new UndoableReplaceMeasures(current, (current + count) , toTrack);
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		for(int i = freeSpace;i < count;i ++){
+			TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
+		}
+		helper.replaceMeasures(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),theMove,toTrack);
+		
+		//Termina el undoable
+		TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),count,freeSpace,theMove));
+	}
+	
+	public void setTransferType(int transferType){
+		this.transferType = transferType;
+	}
+	
+	public void setPasteCount(int pasteCount){
+		this.pasteCount = pasteCount;
+	}
+	
+	private void skipMarkers(TGSongSegment segment){
+		Iterator it = segment.getHeaders().iterator();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			header.setMarker(null);
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/Transferable.java b/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/Transferable.java
new file mode 100644
index 0000000..a099324
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/clipboard/Transferable.java
@@ -0,0 +1,19 @@
+/*
+ * Created on 09-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.clipboard;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public interface Transferable {
+	
+	public void insertTransfer()throws CannotInsertTransferException;
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/EditorCache.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/EditorCache.java
new file mode 100644
index 0000000..4196760
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/EditorCache.java
@@ -0,0 +1,152 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.util.MidiTickUtil;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class EditorCache {
+	
+	//Modo edition
+	private boolean editUpdate;
+	private TGBeatImpl editBeat;
+	
+	//Modo reproduccion
+	private int playTrack;
+	private long playTick;
+	private long playStart;
+	private long playBeatEnd;
+	private boolean playChanges;
+	private boolean playUpdate;
+	private TGBeatImpl playBeat;
+	private TGMeasureImpl playMeasure;
+	
+	public EditorCache(){
+		this.reset();
+	}
+	
+	public void reset(){
+		this.resetEditMode();
+		this.resetPlayMode();
+	}
+	
+	private void resetEditMode(){
+		this.editBeat = null;
+		this.editUpdate = false;
+	}
+	
+	private void resetPlayMode(){
+		this.playBeat = null;
+		this.playMeasure = null;
+		this.playUpdate = false;
+		this.playChanges = false;
+		this.playTrack =  0;
+		this.playTick = 0;
+		this.playStart = 0;
+		this.playBeatEnd = 0;
+	}
+	
+	public void updateEditMode(){
+		this.editUpdate = true;
+		this.resetPlayMode();
+		this.getEditBeat();
+	}
+	
+	public void updatePlayMode(){
+		this.playUpdate = true;
+		this.resetEditMode();
+		this.getPlayBeat();
+	}
+	
+	public TGBeatImpl getEditBeat() {
+		if(this.editUpdate){
+			this.editBeat =  TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedBeat();
+			this.editUpdate = false;
+		}
+		return this.editBeat;
+	}
+	
+	public TGBeatImpl getPlayBeat(){
+		if(this.playUpdate){
+			this.playChanges = false;
+			
+			TGSongManager manager = TuxGuitar.instance().getSongManager();
+			if( this.isPlaying() ){
+				Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+				TGTrack track = caret.getTrack();
+				
+				long tick = TuxGuitar.instance().getPlayer().getTickPosition();
+				long start = this.playStart + (tick - this.playTick);
+				if(this.playMeasure == null || start < this.playMeasure.getStart() || start > (this.playMeasure.getStart() + this.playMeasure.getLength())){
+					this.playMeasure = null;
+					start = MidiTickUtil.getStart(tick);
+				}
+				
+				if(this.playMeasure == null || this.playBeatEnd == 0 || start > this.playBeatEnd || start < this.playStart || track.getNumber() != this.playTrack){
+					this.playBeat = null;
+					this.playBeatEnd = 0;
+					this.playChanges = true;
+					
+					if(this.playMeasure == null || !this.playMeasure.hasTrack(track.getNumber())  || !isPlaying(this.playMeasure)){
+						this.playMeasure = (TGMeasureImpl)manager.getTrackManager().getMeasureAt(track,start);
+					}
+					if (this.playMeasure != null && !isPlayingCountDown()) {
+						this.playBeat = (TGBeatImpl)manager.getMeasureManager().getBeatIn(this.playMeasure, start);
+						if(this.playBeat != null){
+							TGBeat next = manager.getMeasureManager().getNextBeat(this.playMeasure.getBeats(), this.playBeat);
+							if( next != null ){
+								this.playBeatEnd = next.getStart();
+							}else{
+								TGDuration duration = manager.getMeasureManager().getMinimumDuration(this.playBeat);
+								this.playBeatEnd = (this.playBeat.getStart() + duration.getTime());
+							}
+						}
+					}
+				}
+				this.playTrack = track.getNumber();
+				this.playTick = tick;
+				this.playStart = start;
+			}
+			this.playUpdate = false;
+		}
+		return this.playBeat;
+	}
+	
+	public long getPlayTick(){
+		return this.playTick;
+	}
+	
+	public long getPlayStart(){
+		return this.playStart;
+	}
+	
+	public TGMeasureImpl getPlayMeasure(){
+		return this.playMeasure;
+	}
+	
+	public boolean shouldRedraw(){
+		return this.playChanges;
+	}
+	
+	public boolean isPlaying(){
+		return TuxGuitar.instance().getPlayer().isRunning();
+	}
+	
+	public boolean isPlayingCountDown(){
+		return TuxGuitar.instance().getPlayer().getCountDown().isRunning();
+	}
+	
+	public boolean isPlaying(TGMeasure measure){
+		return (isPlaying() && this.playMeasure != null && measure.equals(this.playMeasure));
+	}
+	
+	public boolean isPlaying(TGMeasure measure,TGBeat b){
+		return (isPlaying(measure) && this.playBeat != null && this.playBeat.getStart() == b.getStart());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/FretBoardEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/FretBoardEditor.java
new file mode 100644
index 0000000..6668c0f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/FretBoardEditor.java
@@ -0,0 +1,114 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Composite;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.fretboard.FretBoard;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.tools.scale.ScaleListener;
+import org.herac.tuxguitar.song.models.TGBeat;
+
+public class FretBoardEditor implements TGRedrawListener, TGExternalBeatViewerListener, IconLoader, LanguageLoader, ScaleListener{
+	
+	private FretBoard fretBoard;
+	private boolean visible;
+	
+	public FretBoardEditor(){
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getScaleManager().addListener(this); 
+	}
+	
+	private FretBoard getFretBoard(){
+		return this.fretBoard;
+	}
+	
+	public void hideFretBoard(){
+		this.visible = false;
+		getFretBoard().setVisible(this.visible);
+		TuxGuitar.instance().getEditorManager().removeRedrawListener(this);
+		TuxGuitar.instance().getEditorManager().removeBeatViewerListener(this);
+		TuxGuitar.instance().updateShellFooter(0,0,0);
+	}
+	
+	public void showFretBoard(){
+		this.visible = true;
+		getFretBoard().setVisible(this.visible);
+		TuxGuitar.instance().getEditorManager().addRedrawListener(this);
+		TuxGuitar.instance().getEditorManager().addBeatViewerListener(this);
+		TuxGuitar.instance().updateShellFooter(getFretBoard().getHeight(), 730,520);
+	}
+	
+	public void showFretBoard(Composite parent) {
+		FormData data = new FormData();
+		data.left = new FormAttachment(0, 0);
+		data.right = new FormAttachment(100, 0);
+		data.top = new FormAttachment(0,0);
+		data.bottom = new FormAttachment(100,0);
+		
+		this.fretBoard = new FretBoard(parent);
+		this.fretBoard.setLayoutData(data);
+	}
+	
+	public void dispose(){
+		if(getFretBoard() != null && !getFretBoard().isDisposed()){
+			getFretBoard().dispose();
+		}
+	}
+	
+	public void redraw(){
+		if(getFretBoard() != null && !getFretBoard().isDisposed() && !TuxGuitar.instance().isLocked()){
+			getFretBoard().redraw();
+		}
+	}
+	
+	public void redrawPlayingMode(){
+		if(getFretBoard() != null && !getFretBoard().isDisposed() && !TuxGuitar.instance().isLocked()){
+			getFretBoard().redrawPlayingMode();
+		}
+	}
+	
+	public boolean isVisible(){
+		return (getFretBoard() != null && !getFretBoard().isDisposed() && this.visible);
+	}
+	
+	public void loadProperties(){
+		if(getFretBoard() != null && !getFretBoard().isDisposed()){
+			getFretBoard().loadProperties();
+		}
+	}
+	
+	public void loadIcons(){
+		if(getFretBoard() != null && !getFretBoard().isDisposed()){
+			getFretBoard().loadIcons();
+		}
+	}
+	
+	public void loadScale(){
+		if(getFretBoard() != null){
+			getFretBoard().loadScale();
+		}
+	}
+	
+	public void doRedraw(int type) {
+		if( type == TGRedrawListener.NORMAL ){
+			this.redraw();
+		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
+			this.redrawPlayingMode();
+		}
+	}
+	
+	public void showExternalBeat(TGBeat beat) {
+		if(getFretBoard() != null && !getFretBoard().isDisposed()){
+			getFretBoard().setExternalBeat(beat);
+		}
+	}
+	
+	public void hideExternalBeat() {
+		if(getFretBoard() != null && !getFretBoard().isDisposed()){
+			getFretBoard().setExternalBeat(null);
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/PianoEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/PianoEditor.java
new file mode 100644
index 0000000..7edee14
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/PianoEditor.java
@@ -0,0 +1,122 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.piano.Piano;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.tools.scale.ScaleListener;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGBeat;
+
+public class PianoEditor implements TGRedrawListener, TGExternalBeatViewerListener, IconLoader, LanguageLoader, ScaleListener{
+	
+	private Piano piano;
+	
+	public PianoEditor(){
+		super();
+	}
+	
+	public void show() {
+		Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("piano.editor"));
+		
+		this.piano = new Piano(dialog,SWT.NONE);
+		
+		this.addListeners();
+		dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				removeListeners();
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	public void addListeners(){
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getScaleManager().addListener(this);
+		TuxGuitar.instance().getEditorManager().addRedrawListener(this);
+		TuxGuitar.instance().getEditorManager().addBeatViewerListener(this);
+	}
+	
+	public void removeListeners(){
+		TuxGuitar.instance().getIconManager().removeLoader(this);
+		TuxGuitar.instance().getLanguageManager().removeLoader(this);
+		TuxGuitar.instance().getScaleManager().removeListener(this); 
+		TuxGuitar.instance().getEditorManager().removeRedrawListener(this);
+		TuxGuitar.instance().getEditorManager().removeBeatViewerListener(this);
+	}
+	
+	private Piano getPiano(){
+		return this.piano;
+	}
+	
+	public void dispose(){
+		if(!isDisposed()){
+			getPiano().getShell().dispose();
+			getPiano().dispose();
+		}
+	}
+	
+	public void redraw(){
+		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
+			getPiano().redraw();
+		}
+	}
+	
+	public void redrawPlayingMode(){
+		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
+			getPiano().redrawPlayingMode();
+		}
+	}
+	
+	public boolean isDisposed() {
+		return (this.getPiano() == null || getPiano().isDisposed());
+	}
+	
+	public void loadProperties(){
+		if(!isDisposed()){
+			getPiano().loadProperties();
+			getPiano().getShell().setText(TuxGuitar.getProperty("piano.editor"));
+		}
+	}
+	
+	public void loadIcons(){
+		if(!isDisposed()){
+			getPiano().loadIcons();
+		}
+	}
+	
+	public void loadScale(){
+		if(!isDisposed()){
+			getPiano().loadScale();
+		}
+	}
+	
+	public void doRedraw(int type) {
+		if( type == TGRedrawListener.NORMAL ){
+			this.redraw();
+		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
+			this.redrawPlayingMode();
+		}
+	}
+	
+	public void showExternalBeat(TGBeat beat) {
+		if(!isDisposed()){
+			getPiano().setExternalBeat(beat);
+		}
+	}
+	
+	public void hideExternalBeat() {
+		if(!isDisposed()){
+			getPiano().setExternalBeat(null);
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGColorImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGColorImpl.java
new file mode 100644
index 0000000..f51a989
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGColorImpl.java
@@ -0,0 +1,42 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Device;
+import org.herac.tuxguitar.graphics.TGColor;
+
+public class TGColorImpl implements TGColor{
+	
+	private Color handle;
+	
+	public TGColorImpl( Color handle ){
+		this.handle = handle;
+	}
+	
+	public TGColorImpl( Device device , int red, int green, int blue ){
+		this( new Color(device,red,green,blue) );
+	}
+	
+	public Color getHandle(){
+		return this.handle;
+	}
+	
+	public int getRed() {
+		return this.handle.getRed();
+	}
+	
+	public int getGreen() {
+		return this.handle.getGreen();
+	}
+	
+	public int getBlue() {
+		return this.handle.getBlue();
+	}
+	
+	public boolean isDisposed(){
+		return this.handle.isDisposed();
+	}
+	
+	public void dispose(){
+		this.handle.dispose();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGEditorManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGEditorManager.java
new file mode 100644
index 0000000..dbc652d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGEditorManager.java
@@ -0,0 +1,83 @@
+package org.herac.tuxguitar.app.editors;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.herac.tuxguitar.song.models.TGBeat;
+
+public class TGEditorManager {
+	
+	private List redrawListeners;
+	private List updateListeners;
+	private List beatViewerListeners;
+	
+	public TGEditorManager(){
+		this.redrawListeners = new ArrayList();
+		this.updateListeners = new ArrayList();
+		this.beatViewerListeners = new ArrayList();
+	}
+	
+	public void doRedraw( int type ){
+		for(int i = 0; i < this.redrawListeners.size(); i ++){
+			TGRedrawListener listener = (TGRedrawListener) this.redrawListeners.get( i );
+			listener.doRedraw( type );
+		}
+	}
+	
+	public void doUpdate( int type ){
+		for(int i = 0; i < this.updateListeners.size(); i ++){
+			TGUpdateListener listener = (TGUpdateListener) this.updateListeners.get( i );
+			listener.doUpdate( type );
+		}
+	}
+	
+	public void showExternalBeat( TGBeat beat ){
+		for(int i = 0; i < this.beatViewerListeners.size(); i ++){
+			TGExternalBeatViewerListener listener = (TGExternalBeatViewerListener) this.beatViewerListeners.get( i );
+			listener.showExternalBeat(beat);
+		}
+	}
+	
+	public void hideExternalBeat(){
+		for(int i = 0; i < this.beatViewerListeners.size(); i ++){
+			TGExternalBeatViewerListener listener = (TGExternalBeatViewerListener) this.beatViewerListeners.get( i );
+			listener.hideExternalBeat();
+		}
+	}
+	
+	public void addRedrawListener( TGRedrawListener listener){
+		if(!this.redrawListeners.contains( listener )){
+			this.redrawListeners.add( listener );
+		}
+	}
+	
+	public void removeRedrawListener( TGRedrawListener listener){
+		if(this.redrawListeners.contains( listener )){
+			this.redrawListeners.remove( listener );
+		}
+	}
+	
+	public void addUpdateListener( TGUpdateListener listener){
+		if(!this.updateListeners.contains( listener )){
+			this.updateListeners.add( listener );
+		}
+	}
+	
+	public void removeUpdateListener( TGUpdateListener listener){
+		if(this.updateListeners.contains( listener )){
+			this.updateListeners.remove( listener );
+		}
+	}
+	
+	public void addBeatViewerListener( TGExternalBeatViewerListener listener){
+		if(!this.beatViewerListeners.contains( listener )){
+			this.beatViewerListeners.add( listener );
+		}
+	}
+	
+	public void removeBeatViewerListener( TGExternalBeatViewerListener listener){
+		if(this.beatViewerListeners.contains( listener )){
+			this.beatViewerListeners.remove( listener );
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGExternalBeatViewerListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGExternalBeatViewerListener.java
new file mode 100644
index 0000000..539ddfb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGExternalBeatViewerListener.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.herac.tuxguitar.song.models.TGBeat;
+
+public interface TGExternalBeatViewerListener {
+	
+	public void showExternalBeat( TGBeat beat );
+	
+	public void hideExternalBeat();
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGFontImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGFontImpl.java
new file mode 100644
index 0000000..6d02cfd
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGFontImpl.java
@@ -0,0 +1,52 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Device;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.herac.tuxguitar.graphics.TGFont;
+
+public class TGFontImpl implements TGFont {
+	
+	private Font handle;
+	
+	public TGFontImpl( Font handle ){
+		this.handle = handle;
+	}
+	
+	public TGFontImpl( Device device , String name, int height, boolean bold, boolean italic){
+		this( new Font( device, name, height, (SWT.NORMAL | (bold ? SWT.BOLD : 0) | (italic ? SWT.ITALIC : 0)) ) );
+	}
+	
+	public void dispose(){
+		this.handle.dispose();
+	}
+	
+	public boolean isDisposed(){
+		return this.handle.isDisposed();
+	}
+	
+	public Font getHandle(){
+		return this.handle;
+	}
+	
+	public String getName() {
+		FontData[] fd = this.handle.getFontData();
+		return ( fd != null && fd.length > 0 ? fd[0].getName() : new String() );
+	}
+	
+	public int getHeight() {
+		FontData[] fd = this.handle.getFontData();
+		return ( fd != null && fd.length > 0 ? fd[0].getHeight() : 0 );
+	}
+	
+	public boolean isBold() {
+		FontData[] fd = this.handle.getFontData();
+		return ( fd != null && fd.length > 0 ? ((fd[0].getStyle() & SWT.BOLD) != 0) : false );
+	}
+	
+	public boolean isItalic() {
+		FontData[] fd = this.handle.getFontData();
+		return ( fd != null && fd.length > 0 ? ((fd[0].getStyle() & SWT.ITALIC) != 0) : false );
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGImageImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGImageImpl.java
new file mode 100644
index 0000000..984e7c8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGImageImpl.java
@@ -0,0 +1,73 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.eclipse.swt.graphics.Device;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.PaletteData;
+import org.eclipse.swt.graphics.RGB;
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGImageImpl implements TGImage {
+	
+	private Image handle;
+	
+	public TGImageImpl( Image handle ){
+		this.handle = handle;
+	}
+	
+	public TGImageImpl( Device device , int width , int height ){
+		this( new Image(device,width,height) );
+	}
+	
+	public TGImageImpl(Device device, ImageData source, ImageData mask){
+		this( new Image(device,source,mask) );
+	}
+	
+	public TGPainter createPainter() {
+		return new TGPainterImpl(this.handle);
+	}
+	
+	public int getWidth() {
+		return this.handle.getBounds().width;
+	}
+	
+	public int getHeight() {
+		return this.handle.getBounds().height;
+	}
+	
+	public Image getHandle(){
+		return this.handle;
+	}
+	
+	public boolean isDisposed(){
+		return this.handle.isDisposed();
+	}
+	
+	public void dispose(){
+		this.handle.dispose();
+	}
+	
+	public void applyTransparency( TGColor background ){
+		RGB alpha = new RGB( background.getRed(), background.getGreen(), background.getBlue() );
+		RGB none = new RGB((0xff ^ alpha.red),(0xff ^ alpha.green),(0xff ^ alpha.blue));
+		
+		Image srcImage = this.handle;
+		ImageData srcData = srcImage.getImageData();
+		ImageData maskData = new ImageData(srcData.width,srcData.height,1,new PaletteData(new RGB[]{ none,alpha }  ));
+		for(int x = 0; x< maskData.width; x++) {
+			for(int y = 0; y < maskData.height; y++) {
+				RGB rgb = srcData.palette.getRGB(srcData.getPixel(x, y));
+				if(rgb.red == alpha.red && rgb.green == alpha.green && rgb.blue == alpha.blue){
+					maskData.setPixel(x, y, maskData.palette.getPixel(none));
+				}else{
+					maskData.setPixel(x, y, maskData.palette.getPixel(alpha));
+				}
+			}
+		}
+		this.handle = new Image(srcImage.getDevice(),srcData,maskData);
+		
+		srcImage.dispose();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGPainterImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGPainterImpl.java
new file mode 100644
index 0000000..66ffe71
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGPainterImpl.java
@@ -0,0 +1,263 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Path;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGDimension;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGPoint;
+
+public class TGPainterImpl extends TGResourceFactoryImpl implements TGPainter {
+	
+	private boolean pathEmpty;
+	
+	private int style;
+	
+	private GC gc;
+	
+	private Path path;
+	
+	public TGPainterImpl(){
+		super();
+	}
+	
+	public TGPainterImpl(GC gc){
+		this.init(gc);
+	}
+	
+	public TGPainterImpl(Image image){
+		this.init(image);
+	}
+	
+	public void init(Image image){
+		this.init(new GC(image));
+	}
+	
+	public void init(GC gc){
+		this.setDevice(gc.getDevice());
+		if(this.gc != null && !this.gc.isDisposed()){
+			this.gc.dispose();
+		}
+		this.gc = gc;
+	}
+	
+	public void initPath(int style){
+		this.style = style;
+		this.path = new Path(this.gc.getDevice());
+		this.pathEmpty = true;
+		this.setAntialias(true);
+	}
+	
+	public void initPath(){
+		this.initPath( PATH_DRAW );
+	}
+	
+	public void closePath(){
+		if(! this.pathEmpty ){
+			if( (this.style & PATH_DRAW) != 0){
+				this.gc.drawPath(this.path);
+			}
+			if( (this.style & PATH_FILL) != 0){
+				this.gc.fillPath(this.path);
+			}
+		}
+		this.style = 0;
+		this.path.dispose();
+		this.pathEmpty = true;
+		this.setAntialias(false);
+	}
+	
+	public GC getGC(){
+		return this.gc;
+	}
+	
+	public void dispose(){
+		this.gc.dispose();
+	}
+	
+	public boolean isDisposed(){
+		return this.gc.isDisposed();
+	}
+	
+	public void drawString(String string, int x, int y) {
+		this.setAdvanced(false);
+		this.gc.drawString(string, x, y);
+	}
+	
+	public void drawString(String string, int x, int y, boolean isTransparent) {
+		this.setAdvanced(false);
+		this.gc.drawString(string, x, y, isTransparent);
+	}
+	
+	public void drawImage(TGImage image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight) {
+		this.setAdvanced(false);
+		this.gc.drawImage(getImage(image), srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight);
+	}
+	
+	public void drawImage(TGImage image, int x, int y) {
+		this.setAdvanced(false);
+		this.gc.drawImage(getImage(image), x, y);
+	}
+	
+	public void drawPolygon(int[] arg0) {
+		this.gc.drawPolygon(arg0);
+	}
+	
+	public void fillPolygon(int[] arg0) {
+		this.gc.fillPolygon(arg0);
+	}
+	
+	public void cubicTo(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5) {
+		this.path.cubicTo(arg0, arg1, arg2, arg3, arg4, arg5);
+		this.pathEmpty = false;
+	}
+	
+	public void lineTo(float arg0, float arg1) {
+		this.path.lineTo(arg0, arg1);
+		this.pathEmpty = false;
+	}
+	
+	public void moveTo(float arg0, float arg1) {
+		this.path.moveTo(arg0, arg1);
+		this.pathEmpty = false;
+	}
+	
+	public void addString(String arg0, float arg1, float arg2, TGFont font) {
+		this.path.addString(arg0, arg1, arg2, getFont(font));
+		this.pathEmpty = false;
+	}
+	
+	public void addArc(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5) {
+		this.path.addArc(arg0, arg1, arg2, arg3, arg4, arg5);
+		this.pathEmpty = false;
+	}
+	
+	public void addOval(float arg0, float arg1, float arg2, float arg3) {
+		this.path.addArc(arg0, arg1, arg2, arg3, 0, 360);
+		this.pathEmpty = false;
+	}
+	
+	public void addRectangle(float x,float y,float width,float height) {
+		this.path.addRectangle(x, y, width, height);
+		this.pathEmpty = false;
+	}
+	
+	public void addRectangle(Rectangle rectangle) {
+		this.path.addRectangle(rectangle.x,rectangle.y,rectangle.width,rectangle.height);
+		this.pathEmpty = false;
+	}
+	
+	public void setFont(TGFont font) {
+		this.gc.setFont(getFont(font));
+	}
+	
+	public void setForeground(TGColor color) {
+		this.gc.setForeground(getColor(color));
+	}
+	
+	public void setBackground(TGColor color) {
+		this.gc.setBackground(getColor(color));
+	}
+	
+	public void setLineWidth(int width) {
+		this.gc.setLineWidth(width);
+	}
+	
+	public void setLineStyleSolid(){
+		this.gc.setLineStyle(SWT.LINE_SOLID);
+	}
+	
+	public void setLineStyleDot(){
+		this.gc.setLineStyle(SWT.LINE_DOT);
+	}
+	
+	public void setLineStyleDash(){
+		this.gc.setLineStyle(SWT.LINE_DASH);
+	}
+	
+	public void setLineStyleDashDot(){
+		this.gc.setLineStyle(SWT.LINE_DASHDOT);
+	}
+	
+	public void setAlpha(int alpha) {
+		this.gc.setAlpha(alpha);
+	}
+	
+	public void setAntialias(boolean enabled){
+		if( !TGPainterUtils.FORCE_OS_DEFAULTS ){
+			this.gc.setAntialias(enabled ? SWT.ON : SWT.OFF );
+		}
+	}
+	
+	public void setAdvanced(boolean advanced){
+		if( !TGPainterUtils.FORCE_OS_DEFAULTS ){
+			this.gc.setAdvanced(advanced);
+		}
+	}
+	
+	public int getFontSize(){
+		FontData[] fd = this.gc.getFont().getFontData();
+		if( fd != null && fd.length > 0 ){
+			return fd[0].getHeight();
+		}
+		return 0;
+	}
+	
+	public int getFMHeight(){
+		this.setAdvanced(false);
+		return this.gc.getFontMetrics().getHeight();
+	}
+	
+	public int getFMAscent(){
+		this.setAdvanced(false);
+		return this.gc.getFontMetrics().getAscent();
+	}
+	
+	public int getFMDescent(){
+		this.setAdvanced(false);
+		return this.gc.getFontMetrics().getDescent();
+	}
+	
+	public int getFMWidth( String text ){
+		this.setAdvanced(false);
+		return this.gc.stringExtent( text ).x;
+	}
+	
+	public TGPoint createPoint( Point point ){
+		return new TGPoint( point.x , point.y );
+	}
+	
+	public TGDimension createDimension( Point point ){
+		return new TGDimension( point.x , point.y );
+	}
+	
+	public Image getImage(TGImage image){
+		if( image instanceof TGImageImpl ){
+			return ((TGImageImpl)image).getHandle();
+		}
+		return null;
+	}
+	
+	public Color getColor(TGColor color){
+		if( color instanceof TGColorImpl ){
+			return ((TGColorImpl)color).getHandle();
+		}
+		return null;
+	}
+	
+	public Font getFont(TGFont font){
+		if( font instanceof TGFontImpl ){
+			return ((TGFontImpl)font).getHandle();
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGPainterUtils.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGPainterUtils.java
new file mode 100644
index 0000000..d8927ff
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGPainterUtils.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+
+public class TGPainterUtils {
+	
+	/** On swt-carbon (and maybe another platform) advanced mode must be allways true **/
+	public static final boolean FORCE_OS_DEFAULTS = getValue(TGConfigKeys.FORCE_OS_DEFAULTS);
+	
+	private static boolean getValue(String key){
+		return TuxGuitar.instance().getConfig().getBooleanValue(key);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGRedrawListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGRedrawListener.java
new file mode 100644
index 0000000..3e83f18
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGRedrawListener.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.app.editors;
+
+public interface TGRedrawListener {
+	
+	public static final int NORMAL = 1;
+	public static final int PLAYING_THREAD = 2;
+	public static final int PLAYING_NEW_BEAT = 3;
+	
+	public void doRedraw( int type );
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGResourceFactoryImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGResourceFactoryImpl.java
new file mode 100644
index 0000000..b342822
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGResourceFactoryImpl.java
@@ -0,0 +1,50 @@
+package org.herac.tuxguitar.app.editors;
+
+import org.eclipse.swt.graphics.Device;
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGFontModel;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+
+public class TGResourceFactoryImpl implements TGResourceFactory {
+	
+	private Device device;
+	
+	public TGResourceFactoryImpl(){
+		this(null);
+	}
+	
+	public TGResourceFactoryImpl( Device device ){
+		this.device = device;
+	}
+	
+	public void setDevice(Device device) {
+		this.device = device;
+	}
+	
+	public Device getDevice() {
+		return this.device;
+	}
+	
+	public TGImage createImage( int width, int height ){
+		return new TGImageImpl( this.getDevice() , width, height );
+	}
+	
+	public TGColor createColor( int red, int green, int blue ){
+		return new TGColorImpl( this.getDevice() , red, green , blue );
+	}
+	
+	public TGColor createColor( TGColorModel cm ){
+		return this.createColor(cm.getRed(), cm.getGreen(), cm.getBlue());
+	}
+	
+	public TGFont createFont( String name, int height, boolean bold, boolean italic ){
+		return new TGFontImpl( this.getDevice() , name , height , bold , italic );
+	}
+	
+	public TGFont createFont( TGFontModel fm ){
+		return this.createFont(fm.getName(), fm.getHeight(), fm.isBold(), fm.isItalic());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGUpdateListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGUpdateListener.java
new file mode 100644
index 0000000..07dabc4
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TGUpdateListener.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.app.editors;
+
+public interface TGUpdateListener {
+	public static final int SELECTION = 1;
+	public static final int SONG_UPDATED = 2;
+	public static final int SONG_LOADED = 3;
+	public static final int SONG_SAVED = 4;
+	
+	public void doUpdate( int type );
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/TablatureEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TablatureEditor.java
new file mode 100644
index 0000000..2195e3a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/TablatureEditor.java
@@ -0,0 +1,85 @@
+/*
+ * Created on 30-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.clipboard.ClipBoard;
+import org.herac.tuxguitar.app.editors.tab.Tablature;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TablatureEditor implements TGRedrawListener, TGUpdateListener{
+	private Tablature tablature;
+	private ClipBoard clipBoard;
+	
+	public TablatureEditor() {
+		this.clipBoard = new ClipBoard();
+	}
+	
+	public void showTablature(Composite parent) {
+		this.tablature = new Tablature(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.DOUBLE_BUFFERED, TuxGuitar.instance().getSongManager());
+		this.tablature.initGUI();
+		this.tablature.reloadViewLayout();
+		this.tablature.updateTablature();
+		this.tablature.resetCaret();
+		this.tablature.setFocus();
+		this.initListener();
+		this.initKeyActions();
+		this.initMenu();
+	}
+	
+	private void initListener(){
+		TuxGuitar.instance().getEditorManager().addRedrawListener( this );
+		TuxGuitar.instance().getEditorManager().addUpdateListener( this );
+	}
+	
+	private void initKeyActions(){
+		TuxGuitar.instance().getKeyBindingManager().appendListenersTo(this.tablature);
+	}
+	
+	private void initMenu(){
+		Menu menu = TuxGuitar.instance().getItemManager().getPopupMenu();
+		menu.addMenuListener(getTablature().getEditorKit().getMenuListener());
+		this.tablature.setMenu(menu);
+	}
+	
+	public void reloadConfig(){
+		getTablature().reloadStyles();
+	}
+	
+	public Tablature getTablature() {
+		return this.tablature;
+	}
+	
+	public ClipBoard getClipBoard(){
+		return this.clipBoard;
+	}
+	
+	public void doRedraw(int type) {
+		if( type == TGRedrawListener.NORMAL ){
+			getTablature().redraw();
+		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
+			getTablature().redrawPlayingMode();
+		}
+	}
+	
+	public void doUpdate(int type) {
+		if( type == TGUpdateListener.SONG_UPDATED ){
+			getTablature().updateTablature();
+		}else if( type == TGUpdateListener.SONG_LOADED ){
+			getTablature().updateTablature();
+			getTablature().resetScroll();
+			getTablature().resetCaret();
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelHandle.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelHandle.java
new file mode 100644
index 0000000..44edd95
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelHandle.java
@@ -0,0 +1,85 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.undoables.channel.UndoableChannelGeneric;
+import org.herac.tuxguitar.app.undo.undoables.channel.UndoableModifyChannel;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class TGChannelHandle {
+	
+	public TGChannelHandle(){
+		super();
+	}
+	
+	public void addChannel(){
+		// Comienza el Undoable
+		UndoableChannelGeneric undoable = UndoableChannelGeneric.startUndo();
+		
+		getManager().addChannel();
+		
+		// Termina el Undoable
+		TuxGuitar.instance().getUndoableManager().addEdit( undoable.endUndo() );
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		TuxGuitar.instance().updateCache(true);
+	}
+	
+	public void removeChannel(TGChannel channel){
+		// Comienza el Undoable
+		UndoableChannelGeneric undoable = UndoableChannelGeneric.startUndo();
+		
+		getManager().removeChannel(channel);
+		
+		// Termina el Undoable
+		TuxGuitar.instance().getUndoableManager().addEdit( undoable.endUndo() );
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		TuxGuitar.instance().updateCache(true);
+	}
+	
+	public void updateChannel(int id,short bnk,short prg,short vol,short bal,short cho,short rev,short pha,short tre,String name){
+		TGChannel channel = getManager().getChannel(id);
+		if( channel != null ){
+			boolean programChange = (bnk != channel.getBank() || prg != channel.getProgram());
+			
+			// Comienza el Undoable
+			UndoableModifyChannel undoable = UndoableModifyChannel.startUndo(id);
+			
+			getManager().updateChannel(id, bnk, prg, vol, bal, cho, rev, pha, tre, name);
+			
+			// Termina el Undoable
+			TuxGuitar.instance().getUndoableManager().addEdit( undoable.endUndo() );
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			TuxGuitar.instance().updateCache(true);
+			
+			if (TuxGuitar.instance().getPlayer().isRunning()) {
+				if(programChange){
+					TuxGuitar.instance().getPlayer().updatePrograms();
+				}else{
+					TuxGuitar.instance().getPlayer().updateControllers();
+				}
+			}
+		}
+	}
+	
+	public List getChannels(){
+		return getManager().getChannels();
+	}
+	
+	public boolean isAnyTrackConnectedToChannel(TGChannel channel){
+		return getManager().isAnyTrackConnectedToChannel( channel.getChannelId() );
+	}
+	
+	public boolean isAnyPercussionChannel(){
+		return getManager().isAnyPercussionChannel();
+	}
+	
+	public boolean isPlayerRunning(){
+		return TuxGuitar.instance().getPlayer().isRunning();
+	}
+	
+	private TGSongManager getManager(){
+		return TuxGuitar.instance().getSongManager();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelItem.java
new file mode 100644
index 0000000..16ef351
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelItem.java
@@ -0,0 +1,372 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.player.base.MidiInstrument;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class TGChannelItem {
+	
+	private TGChannel channel;
+	private TGChannelManagerDialog dialog;
+	
+	private Composite composite;
+	
+	private Text nameText;
+	private Combo programCombo;
+	private Combo bankCombo;
+	
+	private Button setupChannelButton;
+	private Button removeChannelButton;
+	private Button percussionButton;
+	
+	private TGScalePopup volumeScale;
+	private TGScalePopup balanceScale;
+	private TGScalePopup reverbScale;
+	private TGScalePopup chorusScale;
+	private TGScalePopup tremoloScale;
+	private TGScalePopup phaserScale;
+	
+	public TGChannelItem(TGChannelManagerDialog dialog){
+		this.dialog = dialog;
+	}
+	
+	public void show(final Composite parent, Object layoutData){
+		this.composite = new Composite(parent, SWT.BORDER);
+		this.composite.setLayout(this.dialog.createGridLayout(3, false, true, true));
+		this.composite.setLayoutData(layoutData);
+		
+		// Column 1
+		Composite col1Composite = new Composite(this.composite, SWT.NONE);
+		col1Composite.setLayout(this.dialog.createGridLayout(1,false, true, false));
+		col1Composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.nameText = new Text(col1Composite, SWT.BORDER | SWT.LEFT);
+		this.nameText.setLayoutData(new GridData(150, SWT.DEFAULT));
+		this.nameText.addFocusListener(new FocusAdapter() {
+			public void focusLost(FocusEvent e) {
+				checkForNameModified();
+			}
+		});
+		this.nameText.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				checkForNameModified();
+			}
+		});
+		
+		this.programCombo = new Combo(col1Composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.programCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
+		this.programCombo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateChannel(false);
+			}
+		});
+		
+		this.bankCombo = new Combo(col1Composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.bankCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
+		this.bankCombo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateChannel(false);
+			}
+		});
+		
+		// Column 2
+		Composite col2Composite = new Composite(this.composite, SWT.NONE);
+		col2Composite.setLayout(this.dialog.createGridLayout(1,false, true, false));
+		col2Composite.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
+		
+		this.percussionButton = new Button(col2Composite, SWT.CHECK);
+		this.percussionButton.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.percussionButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateChannel(true);
+			}
+		});
+		
+		// Column 3
+		Composite col3Composite = new Composite(this.composite, SWT.NONE);
+		col3Composite.setLayout(this.dialog.createGridLayout(1,false, true, false));
+		col3Composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite actionButtonsComposite = new Composite(col3Composite, SWT.NONE);
+		actionButtonsComposite.setLayout(this.dialog.createGridLayout(2, false, true, false));
+		actionButtonsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
+		
+		this.setupChannelButton = new Button(actionButtonsComposite, SWT.PUSH);
+		this.setupChannelButton.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, true, false));
+		this.setupChannelButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				setupChannel();
+			}
+		});
+		
+		this.removeChannelButton = new Button(actionButtonsComposite, SWT.PUSH);
+		this.removeChannelButton.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false));
+		this.removeChannelButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				removeChannel();
+			}
+		});
+		
+		Composite controllerScalesComposite = new Composite(col3Composite, SWT.NONE);
+		controllerScalesComposite.setLayout(new RowLayout());
+		controllerScalesComposite.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,true));
+		
+		SelectionListener scaleSelectionListener = new TGScaleSelectionListener(this);
+		
+		this.volumeScale = new TGScalePopup(controllerScalesComposite);
+		this.volumeScale.setSelectionListener(scaleSelectionListener);
+		
+		this.balanceScale = new TGScalePopup(controllerScalesComposite);
+		this.balanceScale.setSelectionListener(scaleSelectionListener);
+		
+		this.reverbScale = new TGScalePopup(controllerScalesComposite);
+		this.reverbScale.setSelectionListener(scaleSelectionListener);
+		
+		this.chorusScale = new TGScalePopup(controllerScalesComposite);
+		this.chorusScale.setSelectionListener(scaleSelectionListener);
+		
+		this.tremoloScale = new TGScalePopup(controllerScalesComposite);
+		this.tremoloScale.setSelectionListener(scaleSelectionListener);
+		
+		this.phaserScale = new TGScalePopup(controllerScalesComposite);
+		this.phaserScale.setSelectionListener(scaleSelectionListener);
+		
+		//--------------------------------------------------------------//
+		
+		this.loadIcons();
+		this.loadProperties();
+		this.updateItems();
+	}
+	
+	public void loadProperties(){
+		if(!isDisposed()){
+			this.percussionButton.setText(TuxGuitar.getProperty("instrument.percussion-channel"));
+			this.removeChannelButton.setText(TuxGuitar.getProperty("remove"));
+			this.setupChannelButton.setToolTipText(TuxGuitar.getProperty("settings"));
+			
+			this.volumeScale.setText(TuxGuitar.getProperty("instrument.volume"));
+			this.balanceScale.setText(TuxGuitar.getProperty("instrument.balance"));
+			this.reverbScale.setText(TuxGuitar.getProperty("instrument.reverb"));
+			this.chorusScale.setText(TuxGuitar.getProperty("instrument.chorus"));
+			this.tremoloScale.setText(TuxGuitar.getProperty("instrument.tremolo"));
+			this.phaserScale.setText(TuxGuitar.getProperty("instrument.phaser"));
+		}
+	}
+	
+	public void loadIcons(){
+		if(!isDisposed()){
+			this.setupChannelButton.setImage(TuxGuitar.instance().getIconManager().getSettings());
+		}
+	}
+	
+	public void resetItems(){
+		if(!isDisposed() ){
+			this.volumeScale.reset();
+			this.balanceScale.reset();
+			this.reverbScale.reset();
+			this.chorusScale.reset();
+			this.tremoloScale.reset();
+			this.phaserScale.reset();
+		}
+	}
+	
+	public void updateItems(){
+		if(!isDisposed() && getChannel() != null){
+			boolean playerRunning = this.getHandle().isPlayerRunning();
+			boolean anyPercussionChannel = this.getHandle().isAnyPercussionChannel();
+			boolean anyTrackConnectedToChannel = this.getHandle().isAnyTrackConnectedToChannel(getChannel());
+			
+			this.nameText.setText(getChannel().getName());
+			this.percussionButton.setSelection(getChannel().isPercussionChannel());
+			this.percussionButton.setEnabled(!anyTrackConnectedToChannel && (!anyPercussionChannel || getChannel().isPercussionChannel()));
+			this.removeChannelButton.setEnabled(!anyTrackConnectedToChannel);
+			this.setupChannelButton.setEnabled(this.dialog.getChannelSettingsHandlerManager().isChannelSettingsHandlerAvailable());
+			
+			this.volumeScale.setValue(getChannel().getVolume());
+			this.balanceScale.setValue(getChannel().getBalance());
+			this.reverbScale.setValue(getChannel().getReverb());
+			this.chorusScale.setValue(getChannel().getChorus());
+			this.tremoloScale.setValue(getChannel().getTremolo());
+			this.phaserScale.setValue(getChannel().getPhaser());
+			
+			this.updateBankCombo(playerRunning);
+			this.updateProgramCombo(playerRunning);
+		}
+	}
+	
+	private void updateBankCombo(boolean playerRunning){
+		if(!isDisposed() && getChannel() != null){
+			if( this.bankCombo.getItemCount() == 0 ){
+				String bankPrefix = TuxGuitar.getProperty("instrument.bank");
+				for (int i = 0; i < 128; i++) {
+					this.bankCombo.add((bankPrefix + " #" + i));
+				}
+			}
+			if( getChannel().getBank() >= 0 && getChannel().getBank() < this.bankCombo.getItemCount() ){
+				this.bankCombo.select(getChannel().getBank());
+			}
+			this.bankCombo.setEnabled(!getChannel().isPercussionChannel());
+		}
+	}
+	
+	private void updateProgramCombo(boolean playerRunning){
+		if(!isDisposed() && getChannel() != null){
+			List programNames = getProgramNames();
+			if(!(this.programCombo.getData() instanceof List) || isDifferentList(programNames, (List)this.programCombo.getData())){
+				this.programCombo.removeAll();
+				this.programCombo.setData(programNames);
+				for( int i = 0 ; i < programNames.size() ; i ++ ){
+					this.programCombo.add((String)programNames.get(i));
+				}
+			}
+			if( getChannel().getProgram() >= 0 && getChannel().getProgram() < this.programCombo.getItemCount() ){
+				this.programCombo.select(getChannel().getProgram());
+			}
+		}
+	}
+	
+	private List getProgramNames(){
+		List programNames = new ArrayList();
+		if(!getChannel().isPercussionChannel() ){
+			MidiInstrument[] instruments = TuxGuitar.instance().getPlayer().getInstruments();
+			if (instruments != null) {
+				int count = instruments.length;
+				if (count > 128) {
+					count = 128;
+				}
+				for (int i = 0; i < count; i++) {
+					programNames.add(instruments[i].getName());
+				}
+			}
+		}
+		if( programNames.isEmpty() ){
+			String programPrefix = TuxGuitar.getProperty("instrument.program");
+			for (int i = 0; i < 128; i++) {
+				programNames.add((programPrefix + " #" + i));
+			}
+		}
+		return programNames;
+	}
+	
+	private boolean isDifferentList(List list1, List list2){
+		if( list1.size() != list2.size() ){
+			return true;
+		}
+		for( int i = 0 ; i < list1.size() ; i ++ ){
+			if(!list1.get(i).equals(list2.get(i)) ){
+				return true;
+			}
+		}
+		
+		return false;
+	}
+	
+	public void checkForNameModified(){
+		if( getChannel() != null && !isDisposed() && !this.nameText.getText().equals(getChannel().getName()) ){
+			updateChannel(false);
+		}
+	}
+	
+	public void checkForChannelChanged( TGChannel newChannel ){
+		if( this.channel == null || (newChannel != null && !newChannel.equals(this.channel))){
+			this.resetItems();
+		}
+	}
+	
+	public TGChannelHandle getHandle() {
+		return this.dialog.getHandle();
+	}
+	
+	public TGChannel getChannel() {
+		return this.channel;
+	}
+
+	public void setChannel(TGChannel channel) {
+		this.checkForChannelChanged(channel);
+		this.channel = channel;
+	}
+	
+	public Composite getComposite(){
+		return this.composite;
+	}
+	
+	public boolean isDisposed() {
+		return (this.getComposite() == null || this.getComposite().isDisposed());
+	}
+	
+	public void dispose() {
+		if(!isDisposed()){
+			getComposite().dispose();
+		}
+	}
+	
+	public void updateChannel(boolean percussionChanged){
+		if( getChannel() != null && !isDisposed() ){			
+			boolean percussionChannel = this.percussionButton.getSelection();
+			
+			int bank = getChannel().getBank();
+			int program = getChannel().getProgram();
+			if( percussionChanged ){
+				bank = (percussionChannel ? TGChannel.DEFAULT_PERCUSSION_BANK : TGChannel.DEFAULT_BANK);
+				program = (percussionChannel ? TGChannel.DEFAULT_PERCUSSION_PROGRAM : TGChannel.DEFAULT_PROGRAM);
+			}else{
+				if(!percussionChannel ){
+					int bankSelection = this.bankCombo.getSelectionIndex();
+					if( bankSelection >= 0 ){
+						bank = bankSelection;
+					}
+				}
+				
+				int programSelection = this.programCombo.getSelectionIndex();
+				if( programSelection >= 0 ){
+					program = programSelection;
+				}
+			}
+			
+			getHandle().updateChannel(
+				getChannel().getChannelId(), 
+				(short)bank,
+				(short)program,
+				(short)this.volumeScale.getValue(),
+				(short)this.balanceScale.getValue(),
+				(short)this.chorusScale.getValue(),
+				(short)this.reverbScale.getValue(),
+				(short)this.phaserScale.getValue(),
+				(short)this.tremoloScale.getValue(),
+				this.nameText.getText()
+			);
+		}
+	}
+	
+	public void removeChannel(){
+		if( getChannel() != null && !isDisposed() ){
+			getHandle().removeChannel(getChannel());
+		}
+	}
+	
+	public void setupChannel(){
+		if( getChannel() != null && !isDisposed() ){
+			TGChannelSettingsDialog settingsDialog = this.dialog.getChannelSettingsHandlerManager().findChannelSettingsDialog(getChannel());
+			if( settingsDialog != null ){
+				settingsDialog.show(this.dialog.getShell());
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelList.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelList.java
new file mode 100644
index 0000000..4540cd5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelList.java
@@ -0,0 +1,89 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class TGChannelList {
+	
+	private List channelItems;
+	private TGChannelManagerDialog dialog;
+	
+	protected ScrolledComposite channelItemAreaSC;
+	protected Composite channelItemArea;
+	
+	public TGChannelList(TGChannelManagerDialog dialog){
+		this.dialog = dialog;
+		this.channelItems = new ArrayList();
+	}
+	
+	public void show(final Composite parent){
+		this.channelItemAreaSC = new ScrolledComposite(parent, SWT.NONE | SWT.V_SCROLL);
+		this.channelItemAreaSC.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.channelItemAreaSC.setExpandHorizontal(true);
+		this.channelItemAreaSC.setExpandVertical(true);
+		
+		this.channelItemArea = new Composite(this.channelItemAreaSC, SWT.NONE);
+		this.channelItemArea.setLayout(this.dialog.createGridLayout(1,false, true, false));
+		this.channelItemArea.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.channelItemAreaSC.setContent(this.channelItemArea);
+	}
+	
+	public void removeChannelsAfter( int count ){
+		while(!this.channelItems.isEmpty() && this.channelItems.size() > count ){
+			TGChannelItem tgChannelItem = (TGChannelItem)this.channelItems.get(0);
+			tgChannelItem.dispose();
+			
+			this.channelItemAreaSC.setMinSize(this.channelItemArea.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+			this.channelItemArea.layout(true,true);
+			this.channelItems.remove(tgChannelItem);
+		}
+	}
+	
+	public TGChannelItem getOrCreateChannelItemAt( int index ){
+		while( this.channelItems.size() <= index ){
+			TGChannelItem tgChannelItem = new TGChannelItem(this.dialog);
+			tgChannelItem.show(this.channelItemArea, new GridData(SWT.FILL,SWT.TOP,true,false));
+			
+			this.channelItemAreaSC.setMinSize(this.channelItemArea.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+			this.channelItemArea.layout(true,true);
+			this.channelItems.add(tgChannelItem);
+		}
+		return (TGChannelItem)this.channelItems.get(index);
+	}
+	
+	public void loadProperties(){
+		Iterator it = this.channelItems.iterator();
+		while( it.hasNext() ){
+			TGChannelItem tgChannelItem = (TGChannelItem)it.next();
+			tgChannelItem.loadProperties();
+		}
+	}
+	
+	public void loadIcons(){
+		Iterator it = this.channelItems.iterator();
+		while( it.hasNext() ){
+			TGChannelItem tgChannelItem = (TGChannelItem)it.next();
+			tgChannelItem.loadIcons();
+		}
+	}
+	
+	public void updateItems(){
+		List channels = this.dialog.getHandle().getChannels();
+		
+		this.removeChannelsAfter(channels.size());
+		
+		for( int i = 0 ; i < channels.size() ; i ++ ){
+			TGChannel channel = (TGChannel)channels.get(i);
+			TGChannelItem tgChannelItem = getOrCreateChannelItemAt(i);
+			tgChannelItem.setChannel(channel);
+			tgChannelItem.updateItems();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelManagerDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelManagerDialog.java
new file mode 100644
index 0000000..f2897d0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelManagerDialog.java
@@ -0,0 +1,250 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class TGChannelManagerDialog implements TGUpdateListener,IconLoader,LanguageLoader{
+	
+	protected Shell dialog;
+	
+	private TGChannelHandle channelHandle;
+	private TGChannelList channelList;
+	private TGChannelSettingsHandlerManager channelSettingsHandlerManager;
+	
+	private Button addChannelButton;
+	
+	private Scale volumeScale;
+	private Label volumeValueLabel;
+	private Label volumeValueTitleLabel;
+	private String volumeTip;
+	private int volumeValue;
+	
+	public TGChannelManagerDialog(){
+		this.channelHandle = new TGChannelHandle();
+		this.channelSettingsHandlerManager = new TGChannelSettingsHandlerManager();
+	}
+	
+	public void show(){
+		show(TuxGuitar.instance().getShell());
+	}
+	
+	public void show(Shell parent){
+		this.dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.RESIZE);
+		this.dialog.setLayout(createGridLayout(1,false, true, true));
+		
+		this.createWindow(this.dialog, new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.addListeners();
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				removeListeners();
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	public Shell getShell(){
+		return this.dialog;
+	}
+	
+	public boolean isDisposed() {
+		return (this.dialog == null || this.dialog.isDisposed());
+	}
+	
+	public void dispose() {
+		if(!isDisposed()){
+			this.dialog.dispose();
+		}
+	}
+	
+	public void addListeners(){
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
+	}
+	
+	public void removeListeners(){
+		TuxGuitar.instance().getIconManager().removeLoader(this);
+		TuxGuitar.instance().getLanguageManager().removeLoader(this);
+		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
+	}
+	
+	private void createWindow(Composite parent, Object layoutData){
+		Composite composite = new Composite(parent, SWT.BORDER);
+		composite.setLayout(createGridLayout(2,false,true,true));
+		composite.setLayoutData(layoutData);
+		
+		createChannelList(composite);
+		createRightComposite(composite);
+		
+		updateItems();
+		loadProperties();
+		loadIcons();
+	}
+	
+	private void createRightComposite(Composite composite){
+		Composite rightComposite = new Composite(composite, SWT.NONE);
+		rightComposite.setLayout(createGridLayout(1,false, true, false));
+		rightComposite.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,false,true));
+		
+		Composite toolbarComposite = new Composite(rightComposite, SWT.BORDER);
+		toolbarComposite.setLayout(createGridLayout(1,false, true, true));
+		toolbarComposite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
+		
+		this.addChannelButton = new Button(toolbarComposite, SWT.PUSH);
+		this.addChannelButton.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false));
+		this.addChannelButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				getHandle().addChannel();
+			}
+		});
+		
+		
+		Composite volumeComposite = new Composite(rightComposite, SWT.BORDER);
+		volumeComposite.setLayout(createGridLayout(1,false, true, true));
+		volumeComposite.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true));
+		
+		this.volumeScale = new Scale(volumeComposite, SWT.VERTICAL);
+		this.volumeScale.setMaximum(10);
+		this.volumeScale.setMinimum(0);
+		this.volumeScale.setIncrement(1);
+		this.volumeScale.setPageIncrement(1);
+		this.volumeScale.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true));
+		
+		Label separator = new Label(volumeComposite, SWT.HORIZONTAL | SWT.SEPARATOR);
+		separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
+		
+		Composite volumeValueComposite = new Composite(volumeComposite, SWT.NONE);
+		volumeValueComposite.setLayout(createGridLayout(2,false, true, true));
+		
+		this.volumeValueTitleLabel = new Label(volumeValueComposite, SWT.NONE);
+		
+		this.volumeValueLabel = new Label(volumeValueComposite, SWT.CENTER);
+		this.volumeValueLabel.setLayoutData(createGridData(SWT.CENTER,SWT.NONE,true,false,1,1,40,0));
+		
+		this.volumeScale.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				changeVolume();
+			}
+		});
+	}
+	
+	private void createChannelList(Composite composite){
+		this.channelList = new TGChannelList(this);
+		this.channelList.show(composite);
+	}
+	
+	public GridLayout createGridLayout(int numColumns, boolean makeColumnsEqualWidth, boolean addSpacings, boolean addMargins) {
+		GridLayout gridLayout = new GridLayout();
+		gridLayout.numColumns = numColumns;
+		gridLayout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+		gridLayout.horizontalSpacing = (addSpacings ? gridLayout.horizontalSpacing : 0);
+		gridLayout.verticalSpacing = (addSpacings ? gridLayout.verticalSpacing : 0);
+		gridLayout.marginWidth = (addMargins ? gridLayout.marginWidth : 0);
+		gridLayout.marginHeight = (addMargins ? gridLayout.marginHeight : 0);
+		gridLayout.marginLeft = (addMargins ? gridLayout.marginLeft : 0);
+		gridLayout.marginTop = (addMargins ? gridLayout.marginTop : 0);
+		gridLayout.marginRight = (addMargins ? gridLayout.marginRight : 0);
+		gridLayout.marginBottom = (addMargins ? gridLayout.marginBottom : 0);
+		return gridLayout;
+	}
+	
+	public GridData createGridData(int hAlign, int vAlign, boolean gEHSpace, boolean gEVSpace, int hSpan, int vSpan,int mWidth, int mHeight){
+		GridData gridData = new GridData();
+		gridData.horizontalAlignment = hAlign;
+		gridData.verticalAlignment = vAlign;
+		gridData.grabExcessHorizontalSpace = gEHSpace;
+		gridData.grabExcessVerticalSpace = gEVSpace;
+		gridData.horizontalSpan = hSpan;
+		gridData.verticalSpan = vSpan;
+		gridData.minimumWidth = mWidth;
+		gridData.minimumHeight = mHeight;
+		return gridData;
+	}
+	
+	protected void changeVolume(){
+		int volume = (short)(this.volumeScale.getMaximum() - this.volumeScale.getSelection());
+		if(volume != TuxGuitar.instance().getPlayer().getVolume()){
+			TuxGuitar.instance().getPlayer().setVolume(volume);
+			this.volumeScale.setToolTipText(this.volumeTip + ": " + TuxGuitar.instance().getPlayer().getVolume());
+			this.volumeValueLabel.setText(Integer.toString(this.volumeScale.getMaximum() - this.volumeScale.getSelection()));
+			this.volumeValue = volume;
+		}
+	}
+	
+	private void updateItems(){
+		if(!isDisposed()){
+			TuxGuitar.instance().loadCursor(this.dialog,SWT.CURSOR_WAIT);
+			
+			this.channelList.updateItems();
+			
+			int volume = TuxGuitar.instance().getPlayer().getVolume();
+			if(this.volumeValue != volume){
+				this.volumeScale.setSelection(this.volumeScale.getMaximum() - TuxGuitar.instance().getPlayer().getVolume());
+				this.volumeValueLabel.setText(Integer.toString(this.volumeScale.getMaximum() - this.volumeScale.getSelection()));
+				this.volumeValue = volume;
+			}
+			
+			TuxGuitar.instance().loadCursor(this.dialog,SWT.CURSOR_ARROW);
+		}
+	}
+
+	public void loadProperties() {
+		if(!isDisposed()){
+			this.addChannelButton.setText(TuxGuitar.getProperty("add"));
+			
+			this.volumeValueTitleLabel.setText(TuxGuitar.getProperty("instruments.volume") + ":");
+			this.volumeTip = TuxGuitar.getProperty("instruments.volume");
+			this.volumeScale.setToolTipText(this.volumeTip + ": " + TuxGuitar.instance().getPlayer().getVolume());
+			this.dialog.setText(TuxGuitar.getProperty("instruments.dialog-title"));
+			
+			this.channelList.loadProperties();
+		}
+	}
+
+	public void loadIcons() {
+		if(!isDisposed()){
+			this.channelList.loadIcons();
+		}
+	}
+
+	public void doUpdate(int type) {
+		if( type == TGUpdateListener.SELECTION ){
+			this.updateItems();
+		}
+	}
+	
+	public void onUpdateChannel(TGChannel channel){
+		if (TuxGuitar.instance().getPlayer().isRunning()) {
+			TuxGuitar.instance().getPlayer().updateControllers();
+		}
+	}
+	
+	public TGChannelHandle getHandle(){
+		return this.channelHandle;
+	}
+	
+	public TGChannelSettingsHandlerManager getChannelSettingsHandlerManager() {
+		return this.channelSettingsHandlerManager;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsDialog.java
new file mode 100644
index 0000000..110d13e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsDialog.java
@@ -0,0 +1,8 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import org.eclipse.swt.widgets.Shell;
+
+public interface TGChannelSettingsDialog {
+	
+	public void show(Shell parent);
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsHandler.java
new file mode 100644
index 0000000..bbbb5d2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsHandler.java
@@ -0,0 +1,11 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import org.herac.tuxguitar.player.base.MidiDevice;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public interface TGChannelSettingsHandler {
+	
+	public boolean isMidiDeviceSupported(MidiDevice midiDevice);
+	
+	public TGChannelSettingsDialog createChannelSettingsDialog(MidiDevice midiDevice, TGChannel channel) ;
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsHandlerManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsHandlerManager.java
new file mode 100644
index 0000000..d57246b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsHandlerManager.java
@@ -0,0 +1,59 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.player.base.MidiDevice;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class TGChannelSettingsHandlerManager {
+	
+	private List channelSettingsHandler;
+	
+	public TGChannelSettingsHandlerManager(){
+		this.channelSettingsHandler = new ArrayList();
+	}
+	
+	public void addChannelSettingsHandler(TGChannelSettingsHandler handler){
+		if(!this.channelSettingsHandler.contains( handler ) ){
+			this.channelSettingsHandler.add( handler );
+		}
+	}
+	
+	public void removeChannelSettingsHandler(TGChannelSettingsHandler handler){
+		if( this.channelSettingsHandler.contains( handler ) ){
+			this.channelSettingsHandler.remove( handler );
+		}
+	}
+	
+	public TGChannelSettingsHandler findSupportedChannelSettingsHandler(){
+		MidiDevice midiDevice = getMidiDevice();
+		
+		Iterator it = this.channelSettingsHandler.iterator();
+		while( it.hasNext() ){
+			TGChannelSettingsHandler channelSettingsHandler = (TGChannelSettingsHandler)it.next();
+			if( channelSettingsHandler.isMidiDeviceSupported(midiDevice) ){
+				return channelSettingsHandler;
+			}
+		}
+		return null;
+	}
+	
+	public TGChannelSettingsDialog findChannelSettingsDialog(TGChannel channel) {
+		TGChannelSettingsHandler channelSettingsHandler = findSupportedChannelSettingsHandler();
+		if( channelSettingsHandler != null ){
+			return channelSettingsHandler.createChannelSettingsDialog(getMidiDevice() ,channel);
+		}
+		return null;
+	}
+	
+	public boolean isChannelSettingsHandlerAvailable(){
+		return ( findSupportedChannelSettingsHandler() != null );
+	}
+	
+	private MidiDevice getMidiDevice(){
+		return TuxGuitar.instance().getPlayer().getOutputPort();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsPlugin.java
new file mode 100644
index 0000000..ef63457
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGChannelSettingsPlugin.java
@@ -0,0 +1,44 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGChannelSettingsPlugin implements TGPlugin{
+	
+	private boolean loaded;
+	private TGChannelSettingsHandler handler;
+	
+	protected abstract TGChannelSettingsHandler getHandler() throws TGPluginException;
+	
+	public void init() throws TGPluginException {
+		this.handler = getHandler();
+		this.loaded = false;
+	}
+	
+	public void close() throws TGPluginException {
+		this.loaded = false;
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded){
+			TuxGuitar.instance().getChannelManager().getChannelSettingsHandlerManager().addChannelSettingsHandler(this.handler);
+			this.loaded = true;
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded){
+			TuxGuitar.instance().getChannelManager().getChannelSettingsHandlerManager().removeChannelSettingsHandler(this.handler);
+			this.loaded = false;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGScalePopup.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGScalePopup.java
new file mode 100644
index 0000000..7a6260e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGScalePopup.java
@@ -0,0 +1,218 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.Shell;
+
+public class TGScalePopup{
+	
+	private int type;
+	private int value;
+	private boolean inverted;
+	private Shell shell;
+	private Composite composite;
+	private Button item;
+	private Scale scale;
+	private String text;
+	
+	private SelectionListener selectionListener;
+	private MouseListener mouseListener;
+	
+	public TGScalePopup(Composite parent){
+		this.init(parent);
+	}
+	
+	public void init(Composite parent){
+		this.value = -1;
+		this.inverted =  true;
+		this.item = new Button(parent, SWT.TOGGLE);
+		this.item.addDisposeListener(createItemDisposeListener());
+		this.item.addSelectionListener(createItemSelectionListener());
+		this.item.getShell().addListener(SWT.Move, createMoveShellListener());
+	}
+	
+	public void reset(){
+		this.item.setSelection(false);
+		this.hideShell();
+	}
+	
+	public void addDefaultListeners(){
+		this.scale.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				TGScalePopup.this.getValueFromScale();
+				if( TGScalePopup.this.selectionListener != null ){
+					TGScalePopup.this.selectionListener.widgetSelected(event);
+				}
+			}
+		});
+		if( this.mouseListener != null ){
+			this.scale.addMouseListener(this.mouseListener);
+		}
+	}
+	
+	private GridLayout getGridLayout(){
+		GridLayout layout = new GridLayout();
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.marginTop = 0;
+		layout.marginBottom = 0;
+		layout.marginLeft = 0;
+		layout.marginHeight = 0;
+		return layout;
+	}
+	
+	private GridData getScaleLayoutData(){
+		GridData data = new GridData(SWT.CENTER,SWT.FILL,false,true);
+		data.heightHint = 65;
+		return data;
+	}
+		
+	public int getType(){
+		return this.type;
+	}
+	
+	public int getValue(){
+		if( this.value < 0 ){
+			this.getValueFromScale();
+		}
+		return this.value;
+	}
+	
+	public void setValue(int value){
+		if( value != this.value ){
+			this.value = value;
+			this.setValueToScale();
+			this.updateToolTipValue();
+		}
+	}
+	
+	public void getValueFromScale(){
+		if(!isShellDisposed()){
+			this.setValue( ( this.inverted ? 127 - this.scale.getSelection() : this.scale.getSelection() ) );
+		}
+	}
+	
+	public void setValueToScale(){
+		if(!isShellDisposed()){
+			this.scale.setSelection( ( this.inverted ? 127 - this.value : this.value ) );
+		}
+	}
+	
+	public void updateToolTipValue(){
+		if( this.getText() != null ){
+			this.item.setToolTipText( this.getText() + ": " + this.getValue() );
+			if(!isShellDisposed()){
+				this.scale.setToolTipText( this.text + ": " + this.getValue() );
+			}
+		}
+	}
+	
+	public void setText(String text){
+		this.text = text;
+		if(this.getText() != null && this.getText().length() > 0){
+			this.item.setText( this.getText().substring(0,1) );
+		}
+		this.updateToolTipValue();
+	}
+	
+	public String getText(){
+		return this.text;
+	}
+	
+	public void showShell() {
+		if( isShellDisposed() ){
+			this.shell = new Shell( this.item.getShell(), SWT.NO_TRIM );
+			this.shell.setVisible(false);
+			this.shell.setLayout(getGridLayout());
+			
+			this.composite = new Composite(this.shell, SWT.BORDER);
+			this.composite.setLayout(getGridLayout());
+			this.composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+			
+			this.scale = new Scale(this.composite, SWT.VERTICAL );
+			this.scale.setMaximum(127);
+			this.scale.setMinimum(0);
+			this.scale.setIncrement(1);
+			this.scale.setPageIncrement(64);
+			this.scale.setLayoutData(getScaleLayoutData());
+			this.setValueToScale();
+			this.addDefaultListeners();
+			
+			this.shell.pack();
+			this.moveShell();
+			this.shell.setVisible(true);
+		}
+	}
+	
+	public void hideShell() {
+		if(!isShellDisposed()){
+			this.shell.dispose();
+			this.shell = null;
+		}
+	}
+	
+	public void showHideShell() {
+		if( this.item.getSelection() ){
+			showShell();
+		}else{
+			hideShell();
+		}
+	}
+	
+	public void moveShell() {
+		if(!isShellDisposed()){
+			Rectangle bounds = this.item.getBounds();
+			Point location = this.item.getParent().toDisplay(new Point(bounds.x, bounds.y));
+			
+			this.shell.setLocation( (location.x + (bounds.width / 2)) - (this.shell.getSize().x / 2), location.y + bounds.height);
+		}
+	}
+	
+	public boolean isShellDisposed(){
+		return ( this.shell == null || this.shell.isDisposed() );
+	}
+	
+	public void setSelectionListener(SelectionListener selectionListener){
+		this.selectionListener = selectionListener;
+	}
+	
+	private DisposeListener createItemDisposeListener(){
+		return new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				hideShell();
+			}
+		};
+	}
+	
+	private SelectionListener createItemSelectionListener(){
+		return new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				showHideShell();
+			}
+		};
+	}
+	
+	private Listener createMoveShellListener(){
+		return new Listener() {
+			public void handleEvent(Event event) {
+				moveShell();
+			}
+		};
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGScaleSelectionListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGScaleSelectionListener.java
new file mode 100644
index 0000000..874e7d0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/channel/TGScaleSelectionListener.java
@@ -0,0 +1,77 @@
+package org.herac.tuxguitar.app.editors.channel;
+
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class TGScaleSelectionListener extends SelectionAdapter implements Runnable{
+	
+	private static final long MAXIMUM_TIME = 500;
+	
+	private long time;
+	private boolean running;
+	private TGChannelItem handle;
+	
+	private Object mutex = new Object();
+	
+	public TGScaleSelectionListener(TGChannelItem handle){
+		this.handle = handle;
+	}
+	
+	public void widgetSelected(SelectionEvent e) {
+		this.process();
+	}
+	
+	public void process(){
+		synchronized (this.mutex) {
+			
+			if(!this.running){
+				this.running = true;
+				
+				// Start the thread.
+				Thread thread = new Thread(this);
+				thread.start();
+			}
+			
+			this.time = System.currentTimeMillis();
+			
+			this.mutex.notifyAll();
+		}
+	}
+	
+	public void run(){
+		try {
+			long timeToWait = MAXIMUM_TIME;
+			
+			while( this.running ){
+				synchronized (this.mutex) {
+					timeToWait = ((this.time + MAXIMUM_TIME) - System.currentTimeMillis());
+					
+					this.running = ( timeToWait > 0 );
+					
+					if( this.running ){
+						this.mutex.wait(timeToWait);
+					}
+				}
+			}
+			
+			this.doActionSynchronized();
+			
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void doActionSynchronized() throws Throwable {
+		TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				doAction();		
+			}
+		});
+	}
+	
+	public void doAction(){
+		this.handle.updateChannel(false);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordCreatorListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordCreatorListener.java
new file mode 100644
index 0000000..81535f7
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordCreatorListener.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.app.editors.chord;
+
+import java.util.List;
+
+public interface ChordCreatorListener {
+	
+	public void notifyChords(ChordCreatorUtil process, List chords);
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordCreatorUtil.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordCreatorUtil.java
new file mode 100644
index 0000000..02dc9a7
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordCreatorUtil.java
@@ -0,0 +1,1212 @@
+/*
+
+ * Created on 31-dic-2005
+
+ * Redesigned on 05-March-2007
+
+ * 
+
+ */
+
+package org.herac.tuxguitar.app.editors.chord;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.song.models.TGChord;
+
+/**
+ * 
+ * Class that helps to create a chord from information put in ChordSelector
+ * dialog.
+ * 
+ * Also contains ChordDatabase static field.
+ * 
+ * @author Nikola Kolarovic
+ * 
+ * @author julian
+ * 
+ */
+public class ChordCreatorUtil {
+	
+	/**
+	 * Maximum number of strings variable - has twin in TrackPropertiesAction
+	 * class
+	 */
+	public static final int MAX_STRINGS = 7;
+	
+	/** Maximum fret distance for a chord */
+	
+	public static final int MAX_FRET_SPAN = 5;
+	
+	/** mark for bass note type **/
+	private final int BASS_INDEX = -1;
+	
+	/** mark for essential note in a chord - MUST be in */
+	private final int ESSENTIAL_INDEX = -2;
+	
+	/** mark for essential note in a chord - PENALTY if not in */
+	private final int NOT_ESSENTIAL_INDEX = -3;
+	
+	/** Keep the Thread control */
+	private static long runningProcess;
+	
+	// ------ attributes ------
+	
+	//protected ChordInfo info;
+	private long processId;
+	
+	private ChordCreatorListener listener;
+	
+	/** the alteration List selectionIndex */
+	private int alteration;
+	
+	private int chordIndex;
+	
+	/** essential notes for the chord (from ChordInfo) */
+	private int[] requiredNotes;
+	
+	/** notes that expand the chord (add+-) */
+	private int[] expandingNotes;
+	
+	/** is the fifth altered */
+	private int add5 = 0;
+	
+	/** name of a chord */
+	private String chordName = null;
+	
+	private int bassTonic; 
+	
+	private int chordTonic;
+	
+	/** current tunning */
+	private int[] tuning;
+	
+	private ChordCreatorUtil(long processId,ChordCreatorListener listener){
+		this.processId = processId;
+		this.listener = listener;
+	}
+	
+	public boolean isValidProcess(){
+		return (this.processId == runningProcess);
+	}
+	
+	public static long getNewProcess(){
+		return (++ runningProcess);
+	}
+	
+	public static void getChords(final ChordCreatorListener listener,
+	                             final int[] tuning,
+	                             final int chordIndex,
+	                             final int alteration,
+	                             final int plusMinus,
+	                             final boolean add,
+	                             final int add5,
+	                             final int add9,
+	                             final int add11,
+	                             final int bassTonic,
+	                             final int chordTonic,
+	                             final boolean sharp){
+		
+		final ChordCreatorUtil chordCreator = new ChordCreatorUtil(getNewProcess(), listener );
+		new Thread(new Runnable() {
+			public void run() {
+				chordCreator.getChords( tuning, chordIndex, alteration, plusMinus, add, add5, add9, add11, bassTonic, chordTonic, sharp);
+			}
+		}).start();
+	}
+	
+	protected void getChords(int[] tuning,
+	                         int chordIndex,
+	                         int alteration,
+	                         int plusMinus,
+	                         boolean add,
+	                         int add5,
+	                         int add9,
+	                         int add11,
+	                         int bassTonic,
+	                         int chordTonic,
+	                         boolean sharp) {
+		
+		if(!isValidProcess()){
+			return;
+		}
+		
+		this.add5 = add5;
+		
+		this.tuning = tuning;
+		
+		this.chordIndex = chordIndex;
+		
+		this.chordTonic = chordTonic;
+		
+		this.bassTonic = bassTonic;
+		
+		this.alteration = alteration;
+		
+		this.chordName = new ChordNamingConvention().createChordName(this.chordTonic,
+		                                                             this.chordIndex,
+		                                                             this.alteration,
+		                                                             plusMinus,
+		                                                             add,
+		                                                             add5,
+		                                                             add9,
+		                                                             add11,
+		                                                             this.bassTonic,
+		                                                             sharp);
+		
+		
+		// find the notes that expand the chord
+		if (this.alteration!=0) {
+			if (add) {
+				this.expandingNotes = new int[1];
+				this.expandingNotes[0]= getAddNote(this.alteration-1,plusMinus);
+			}
+			else { // not just add...
+				// 9+- = 7b !9(+-)    (index=1)
+				// 11+- = 7b !11(+-) 9(+-)  (index=2)
+				// 13+- = 7b !13(+-) 9(+-) 11(+-) (index=3)
+				this.expandingNotes = new int[1+this.alteration];
+				this.expandingNotes[0] = 11; //7b
+				this.expandingNotes[1] = getAddNote(this.alteration-1,plusMinus); //this.alteration+-
+				
+				// rest
+				for (int i=2; i<=this.alteration; i++)
+					this.expandingNotes[i]=getAddNote(i-2, i==2 ? add9 : add11); // @2=add9+-, @3=add11+- tone
+			}
+			
+		}
+		else this.expandingNotes=new int[0];
+		
+		
+		
+		// Required notes
+		//this.requiredNotes = ((ChordDatabase.ChordInfo)new ChordDatabase().getChords().get(chordIndex)).cloneRequireds();
+		this.requiredNotes = ChordDatabase.get(chordIndex).cloneRequireds();
+		//IT DON'T BUILD UNDER JRE1.4
+		//this.requiredNotes = ((ChordDatabase.ChordInfo) ChordCreatorUtil.getChordData().getChords().get(chordIndex)).getRequiredNotes().clone();
+		
+		
+		// adjust the subdominant if needed
+		if (add5!=0) {
+			for (int i=0; i<this.requiredNotes.length; i++)
+				if (this.requiredNotes[i]==8) // alternate the subdominant
+					this.requiredNotes[i]+=(add5==1 ? 1 : -1);
+		}
+		
+		// first count different from -1
+		int count = 0;
+		for (int i=0; i<this.requiredNotes.length; i++) {
+			this.requiredNotes[i]=checkForOverlapping(this.requiredNotes[i]);
+			if (this.requiredNotes[i]!=-1)
+				count++;
+		}
+		// then fill in the new array
+		int[] tempNotes = new int[count];
+		count = 0;
+		for (int i=0; i<this.requiredNotes.length; i++)
+			if (this.requiredNotes[i]!=-1) {
+				tempNotes[count]=this.requiredNotes[i];
+				count++;
+			}
+		// and substitute them
+		this.requiredNotes = tempNotes;
+		
+		//return getChords();
+		if(isValidProcess()){
+			List chords = getChords();
+			if(chords != null && isValidProcess()){
+				this.listener.notifyChords(this, chords);
+			}
+		}
+	}
+	
+	/** We have to make sure that if required note is already inside
+	 * expanding notes array so we don't put it twice...
+	 */
+	protected int checkForOverlapping(int checkIt) {
+		for (int i=0; i<this.expandingNotes.length; i++)
+			if (this.expandingNotes[i]==checkIt)
+				return -1;
+		return checkIt;
+	}
+	
+	/**
+	 * 
+	 * Creates the chord combinations out of given data and then uses some kind
+	 * of
+	 * 
+	 * heuristics to check the most suitable formations.
+	 * 
+	 * @return the list of TGChord structures that are most suitable
+	 * 
+	 */
+	private java.util.List getChords() {
+		if(!isValidProcess()){
+			return null;
+		}
+		ArrayList potentialNotes = makePotentialNotes();
+		
+		ArrayList combinations = makeCombinations( potentialNotes);
+		
+		ArrayList priorities = determinePriority( combinations);
+		
+		ArrayList theBestOnes = takeBest( priorities);
+		
+		return createChords( theBestOnes);
+	}
+	
+	/**
+	 * Creates the TGChord ArrayList out of StringValue's ArrayLists
+	 * 
+	 * @param Highest rated StringValues
+	 * @return TGChord collection
+	 */
+	private ArrayList createChords(ArrayList top) {
+		if(!isValidProcess()){
+			return null;
+		}
+		
+		ArrayList chords = new ArrayList(top.size());
+		
+		Iterator it = top.iterator();
+		
+		while (it.hasNext()) {
+			TGChord chord = TuxGuitar.instance().getSongManager().getFactory()
+					.newChord(this.tuning.length);
+			Iterator it2 = ((ArrayList) it.next()).iterator();
+			
+			while (it2.hasNext()) {
+				StringValue stringValue = (StringValue) it2.next();
+				int string = ((chord.getStrings().length - 1) - (stringValue.getString()));
+				int fret = stringValue.getFret();
+				chord.addFretValue(string, fret);
+				chord.setName(this.chordName);
+			}
+			
+			chords.add(chord);
+		}
+		return chords;
+	}
+	
+	/**
+	 * 
+	 * If string/fret combination is needed for the chord formation, add it into
+	 * List
+	 * 
+	 * @return true if the note is needed for chord formation
+	 * 
+	 */
+	private void find(int stringTone, int stringIndex, int fret,List stringList){
+		if(!isValidProcess()){
+			return;
+		}
+		boolean bassAlreadyIn=false;
+		// chord base notes
+		for (int i = 0; i < this.requiredNotes.length; i++)
+			if ((stringTone + fret) % 12 == (this.chordTonic+this.requiredNotes[i] - 1) % 12) {
+				if (!bassAlreadyIn && (stringTone + fret) % 12 == this.bassTonic)
+					bassAlreadyIn=true;
+				stringList.add(new StringValue(stringIndex, fret, i));
+				return;
+			}
+		
+		// alterations
+		if (this.expandingNotes.length!=0) {
+			for (int i=0; i<this.expandingNotes.length; i++) {
+				if ((stringTone+fret)%12==(this.chordTonic+this.expandingNotes[i]-1)%12) {
+					if (!bassAlreadyIn && (stringTone + fret) % 12 == this.bassTonic)
+						bassAlreadyIn=true;
+					stringList.add(new StringValue(stringIndex,fret,(i<2 ? this.ESSENTIAL_INDEX : this.NOT_ESSENTIAL_INDEX)));
+				}
+			}
+		}
+		
+		// bass tone
+		if (!bassAlreadyIn)
+			if ((stringTone + fret) % 12 == this.bassTonic) {
+				stringList.add(new StringValue(stringIndex, fret, this.BASS_INDEX));
+				return;
+			}
+		
+	}
+	
+	/**
+	 * Returns the wanted note for ADD chord
+	 * 
+	 * @param type
+	 *            0==add9; 1==add11; 2==add13; 
+	 * @param selectionIndex
+	 *            index of selected item in the List combo
+	 * @return wanted note, or -1 if nothing was selected
+	 * 
+	 */
+	private int getAddNote(int type, int selectionIndex) {
+		
+		int wantedNote = 0;
+		
+		switch (type) {
+			case 0:
+				wantedNote = 3; // add9
+				break;
+			case 1:
+				wantedNote = 6; // add11
+				break;
+			case 2:
+				wantedNote = 10; // add13
+				break;
+		}
+		
+		switch (selectionIndex) {
+			case 1:
+				wantedNote++;
+				break;
+			case 2:
+				wantedNote--;
+				break;
+			default:
+				break;
+		}
+		
+		return wantedNote;
+	}
+	
+	private ArrayList makePotentialNotes(){
+		if(!isValidProcess()){
+			return null;
+		}
+		ArrayList potentialNotes = new ArrayList(this.tuning.length);
+		
+		for (int string = 0; string < this.tuning.length; string++) {
+			
+			ArrayList currentStringList = new ArrayList(10);
+			
+			// search all the frets
+			
+			if (ChordSettings.instance().getFindChordsMin()>0 && ChordSettings.instance().isEmptyStringChords())
+				find(this.tuning[string], string, 0, currentStringList); // if it's open chord but wanted to search from different minimal fret
+				
+			
+			for (int fret = ChordSettings.instance().getFindChordsMin(); fret <= ChordSettings.instance().getFindChordsMax(); fret++) {
+				// put in all the needed notes
+				find(this.tuning[string], string, fret, currentStringList);
+			}
+			
+			potentialNotes.add(currentStringList);
+			
+		}
+		return potentialNotes;
+	}
+	
+	/**
+	 * 
+	 * Makes the all-possible combinations of found notes that can be reached by
+	 * fingers
+	 * 
+	 * @param potentialNotes
+	 *            list consisted of found notes for each string
+	 * 
+	 * @return list of list of StringValues, with tones that can form a chord
+	 * 
+	 */
+	private ArrayList makeCombinations(ArrayList potentialNotes) {
+		if(!isValidProcess()){
+			return null;
+		}
+		
+		// COMBINATIONS of strings used in a chord
+		ArrayList stringCombination = new ArrayList(60);
+		ArrayList lastLevelCombination = null;
+		
+		for (int i = 0; i < this.tuning.length - 1; i++)
+		{
+			lastLevelCombination = makeStringCombination(lastLevelCombination);
+			
+			// lastLevelCombination after 3rd round: [[0, 1, 2, 3], [0, 1, 2,
+			// 4], [0, 1, 3, 4], [0, 2, 3, 4], [1, 2, 3, 4], [0, 1, 2, 5], [0,
+			// 1, 3, 5], [0, 2, 3, 5], [1, 2, 3, 5], [0, 1, 4, 5], [0, 2, 4, 5],
+			// [1, 2, 4, 5], [0, 3, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]]
+			
+			stringCombination.addAll(lastLevelCombination);
+		}
+		
+		ArrayList combinations = new ArrayList(800);
+		
+		// --- combine the StringValues according to strings combination
+		// ----------------------=======
+		
+		Iterator iterator = stringCombination.iterator();
+		
+		while (iterator.hasNext()) { // go through all string combinations list
+			// take a string combinations
+			ArrayList currentStringCombination = (ArrayList) iterator.next();
+			lastLevelCombination = null;
+			
+			// go through all the strings in one combination
+			for (int level = 0; level < currentStringCombination.size(); level++) { 
+				
+				// take the string index
+				int currentString = ((Integer) currentStringCombination.get(level)).intValue();
+				
+				// take all the potential notes from currentString and combine
+				// them with potential notes from other strings
+				
+				lastLevelCombination = makeStringValueCombination(lastLevelCombination,(ArrayList)potentialNotes.get(currentString));
+				
+				// the structure of combinations is AL { AL(StringValue,SV,SV),
+				// AL(SV), AL(SV,SV),AL(SV,SV,SV,SV,SV,SV) }
+				
+			}
+			
+			if(lastLevelCombination != null){
+				combinations.addAll(lastLevelCombination);
+			}
+		}
+		
+		return combinations;
+	}
+	
+	/**
+	 * Makes a combination of string indices
+	 * 
+	 * @param lastLevelCombination
+	 *            structure to be expanded by current level
+	 * 
+	 * @return structure of stringCombination is AL { AL(0), AL(0,1),
+	 *         AL(0,2),AL(0,1,3,4),AL(0,1,2,3,4,5) }
+	 */
+	private ArrayList makeStringCombination(ArrayList lastLevelCombinationRef){
+		if(!isValidProcess()){
+			return null;
+		}
+		
+		List lastLevelCombination = lastLevelCombinationRef;
+		
+		if (lastLevelCombination == null) {
+			// first combination is AL { AL(0), AL(1), AL(2), AL(3), AL(4),
+			// ...AL(tuning.length) }
+			lastLevelCombination = new ArrayList();
+			
+			for (int i = 0; i < this.tuning.length; i++) {
+				lastLevelCombination.add(new ArrayList());
+				((ArrayList) lastLevelCombination.get(i)).add(new Integer(i));
+			}
+		}
+		
+		ArrayList thisLevelCombination = new ArrayList();
+		for (int current = 1; current < this.tuning.length; current++)
+		{
+			Iterator it = lastLevelCombination.iterator();
+			
+			while (it.hasNext()) {
+				ArrayList combination = (ArrayList) it.next();
+				Integer currentInteger = new Integer(current);
+				if (((Integer) combination.get(combination.size() - 1))
+						.intValue() < current
+						&& !combination.contains(currentInteger)) {
+					
+					// check if the string is already in combination
+					ArrayList newCombination = (ArrayList) combination.clone();
+					newCombination.add(currentInteger);
+					thisLevelCombination.add(newCombination);
+				}
+				
+			}
+			
+		}
+		
+		return thisLevelCombination;
+		
+	}
+	
+	/**
+	 * Makes a combination of notes by multiplying last combination and current
+	 * note arrays
+	 * 
+	 * 
+	 * 
+	 * @param lastLevelCombination
+	 *            structure to be expanded by current level
+	 * 
+	 * @param notes
+	 *            notes that can be considered into making a chord
+	 * 
+	 * @return structure of StringValue combinations : AL {
+	 *         AL(StringValue,SV,SV), AL(SV), AL(SV,SV),AL(SV,SV,SV,SV,SV,SV) }
+	 * 
+	 */
+	private ArrayList makeStringValueCombination(ArrayList lastLevelCombination, ArrayList notes) {
+		if(!isValidProcess()){
+			return null;
+		}
+		ArrayList thisLevelCombination = null;
+		
+		if (lastLevelCombination == null) { // initial combination
+			
+			thisLevelCombination = new ArrayList(notes.size());
+			
+			for (int i = 0; i < notes.size(); i++) {
+				
+				thisLevelCombination.add(new ArrayList(6));
+				
+				((ArrayList) thisLevelCombination.get(i)).add(notes.get(i));
+				
+			}
+			
+			// first combination is AL { AL(firstOne), AL(anotherFret) }
+			
+		}
+		
+		else {
+			
+			thisLevelCombination = new ArrayList();
+			
+			for (int i = 0; i < notes.size(); i++)
+				for (int j = 0; j < lastLevelCombination.size(); j++) { // cartesian multiplication
+					ArrayList currentCombination = (ArrayList) ((ArrayList) lastLevelCombination.get(j)).clone();
+					currentCombination.add(notes.get(i));
+					
+					// if the distance maximum between the existing frets
+					// is less than wanted, add it into potential list
+					
+					if (checkCombination(currentCombination))
+						thisLevelCombination.add(currentCombination);
+					
+				}
+		}
+		
+		return thisLevelCombination;
+	}
+	
+	/**
+	 * Checks if the combination can be reached by fingers. It is reachable
+	 * 
+	 * if the distance between lowest and highest fret is less than
+	 * 
+	 * <i>ChordCreatorUtil.MAX_FRET_SPAN</i>.
+	 * 
+	 * Also note that this method eliminates or includes the chords with empty
+	 * strings,
+	 * 
+	 * which is controlled with <i>boolean ChordCreatorUtil.EMPTY_STRING_CHORDS</i>
+	 * 
+	 * @param combination
+	 *            current combination to be examined
+	 * 
+	 * @return true if it can be reached
+	 * 
+	 */
+	private boolean checkCombination(ArrayList combination) {
+		
+		Iterator it = combination.iterator();
+		int maxLeft, maxRight;
+		
+		maxLeft = maxRight = ((StringValue) combination.get(0)).getFret();
+		
+		while (it.hasNext()) {
+			
+			int fret = ((StringValue) it.next()).getFret();
+			
+			//chords with empty-string are welcome
+			if (fret != 0 || !ChordSettings.instance().isEmptyStringChords()) {
+				
+				if (fret < maxLeft)
+					maxLeft = fret;
+				
+				if (fret > maxRight)
+					maxRight = fret;
+				
+			}
+			
+		}
+		
+		if (Math.abs(maxLeft - maxRight) >= MAX_FRET_SPAN)
+			
+			return false;
+		
+		return true;
+		
+	}
+	
+	/**
+	 * orders the StringValue ArrayList by their priority, calculated here
+	 * 
+	 * for every single chord combination.<br>
+	 * 
+	 * Priority is higher if:<br>
+	 *  - tone combination has all notes required for the chord basis<br>
+	 *  - has good chord semantics uses many basic tones, and all necessary
+	 * tones in their place<br>
+	 *  - tone combination has all subsequent strings (no string skipping)<br>
+	 *  - has a chord bass tone as lowest tone<br>
+	 *  - uses more strings<br>
+	 *  - uses good fingering positions<br>
+	 * 
+	 * @param allCombinations
+	 *            all the StringValue combinations that make some sense
+	 * 
+	 * @return Treemap of the StringValue ArrayLists, in which the key is
+	 * 
+	 * <i>float priority</i>.
+	 * 
+	 */
+	private ArrayList determinePriority(ArrayList allCombinations) {
+		if(!isValidProcess()){
+			return null;
+		}
+		ArrayList ordered = new ArrayList();
+		
+		Iterator it = allCombinations.iterator();
+		
+		while (it.hasNext() && isValidProcess()) {
+			
+			float priority = 0;
+			
+			ArrayList stringValueCombination = (ArrayList) it.next();
+			
+			// tone combination has all notes required for the chord basis
+			
+			priority += combinationHasAllRequiredNotes(stringValueCombination);
+			
+			// uses good chord semantics
+			
+			priority += combinationChordSemantics(stringValueCombination);
+			
+			// tone combination has all subsequent strings (no string skipping)
+			
+			priority += combinationHasSubsequentStrings(stringValueCombination);
+			
+			// has a chord bass tone as lowest tone
+			
+			priority += combinationBassInBass(stringValueCombination);
+			
+			// uses many strings
+			// 4 and less strings will be more praised in case of negative grade
+			// 4 and more strings will be more praised in case of positive grade 
+			priority += ChordSettings.instance().getManyStringsGrade() / 3
+				* (stringValueCombination.size()-this.tuning.length / 
+						(ChordSettings.instance().getManyStringsGrade()>0 ? 2 : 1.2) );
+			
+			// uses good fingering positions
+			
+			priority += combinationHasGoodFingering(stringValueCombination);
+			
+			// System.out.println("OVERALL:
+			// "+priority+"----------------------------");
+			
+			PriorityItem item = new PriorityItem();
+			
+			item.priority = priority;
+			
+			item.stringValues = stringValueCombination;
+			
+			ordered.add(item);
+			
+		}
+		
+		return ordered;
+		
+	}
+	
+	/**
+	 * 
+	 * Takes the StringValue ArrayLists that has the best priority rating
+	 * 
+	 */
+	private ArrayList takeBest(ArrayList priorityItems) {
+		if(!isValidProcess()){
+			return null;
+		}
+		
+		int maximum = ChordSettings.instance().getChordsToDisplay();
+		
+		ArrayList bestOnes = new ArrayList(maximum);
+		
+		Collections.sort(priorityItems, new PriorityComparator());
+		for(int i = 0; i < priorityItems.size() && isValidProcess(); i ++){
+			PriorityItem item = (PriorityItem)priorityItems.get(i);
+			if (!checkIfSubset(item.stringValues, bestOnes) ){
+				bestOnes.add(item.stringValues);
+				
+				if( bestOnes.size() >= maximum ){
+					break;
+				}
+			}
+		}
+		
+		return bestOnes;
+		
+	}
+	
+	/** adds points if the combination has all the notes in the basis of chord */
+	private float combinationHasAllRequiredNotes(ArrayList stringValueCombination) {
+		if(!isValidProcess()){
+			return 0;
+		}
+		Iterator it = stringValueCombination.iterator();
+		int[] values = new int[this.requiredNotes.length];
+		int currentIndex = 0;
+		
+		while (it.hasNext()) {
+			StringValue sv = (StringValue) it.next();
+			
+			if (sv.getRequiredNoteIndex() >= 0) { // only basis tones
+				boolean insert = true;
+				
+				for (int i = 0; i < currentIndex; i++)
+					if (values[i] == sv.getRequiredNoteIndex() + 1)
+						insert = false;
+				
+				// sv.requiredNoteIndex+1, because we have index 0 and we don't
+				// want it inside
+				
+				if (insert) {
+					values[currentIndex] = sv.getRequiredNoteIndex() + 1;
+					currentIndex++;
+				}
+				
+			}
+		}
+		
+		if (currentIndex == this.requiredNotes.length) {
+			return ChordSettings.instance().getRequiredBasicsGrade();
+		}
+		
+		if (currentIndex == this.requiredNotes.length - 1) {
+			
+			boolean existsSubdominant = false;
+			
+			Iterator it2 = stringValueCombination.iterator();
+			while (it2.hasNext()) {
+				StringValue current = (StringValue)it2.next();
+				if ((this.tuning[current.getString()] + current.getFret()) % 12 == (this.chordTonic + 7) %12)
+					existsSubdominant = true;
+			}
+			
+			if (!existsSubdominant && currentIndex == this.requiredNotes.length-1) {
+				// if not riff. "sus" chord, or chord with altered fifth allow chord without JUST subdominant (fifth) with small penalty 
+				
+				//if ( !((ChordInfo)new ChordDatabase().getChords().get(this.chordIndex)).getName().contains("sus") && this.requiredNotes.length!=2 && this.add5==0) {
+				//String.contains(String) is not available at JRE1.4
+				//Replaced by "String.indexOf(String) >= 0"
+				if ( ChordDatabase.get(this.chordIndex).getName().indexOf("sus") >= 0 && this.requiredNotes.length != 2 && this.add5 == 0) {
+					return ( ChordSettings.instance().getRequiredBasicsGrade() * 4 / 5 );
+				}
+			}
+			
+		}
+		
+		// required notes count should decrease the penalty
+		int noteCount = (this.alteration == 0 ? 0 : 1+ this.alteration)+currentIndex+ (this.bassTonic == this.chordTonic ? 0 : 1);
+		
+		// sometimes, when noteCount is bigger then tunning length, this pennalty will become positive, which may help
+		return -ChordSettings.instance().getRequiredBasicsGrade()
+				* (this.tuning.length - noteCount) / this.tuning.length * 2;
+		
+	}
+	
+	/** adds points if the combination has strings in a row */
+	private float combinationHasSubsequentStrings(ArrayList stringValueCombination) {
+		if(!isValidProcess()){
+			return 0;
+		}
+		boolean stumbled = false, noMore = false, penalty = false;
+		
+		for (int i = 0; i < this.tuning.length; i++) {
+			boolean found = false;
+			Iterator it = stringValueCombination.iterator();
+			while (it.hasNext())
+				if (((StringValue) it.next()).getString() == i)
+					found = true;
+			if (found) {
+				if (!stumbled)
+					stumbled = true;
+				if (noMore)
+					penalty = true;
+				if (penalty) // penalty for skipped strings
+					return -ChordSettings.instance().getSubsequentGrade();
+			}
+			else
+			if (stumbled)
+				noMore = true;
+		}
+		
+		if (penalty)
+			return 0.0f;
+		
+		return ChordSettings.instance().getSubsequentGrade();
+	}
+	
+	/** checks if the bass tone is the lowest tone in chord */
+	private float combinationBassInBass(ArrayList stringValueCombination) {
+		if(!isValidProcess()){
+			return 0;
+		}
+		for (int i = 0; i < this.tuning.length; i++) {
+			
+			Iterator it = stringValueCombination.iterator();
+			
+			while (it.hasNext()) {
+				StringValue sv = (StringValue) it.next();
+				
+				if (sv.getString() == i) { // stumbled upon lowest tone
+					if ( (this.tuning[sv.getString()]+sv.getFret()) % 12 == this.bassTonic  )
+					  return ChordSettings.instance().getBassGrade();
+					// else
+					return -ChordSettings.instance().getBassGrade();
+				}
+			}
+			
+		}
+		
+		return 0;
+	}
+	
+	/**
+	 * grades the fingering in a chord.
+	 * 
+	 * fingering is good if:<br>
+	 *  - uses as little as possible fret positions<br>
+	 *  - uses less than 3 fret positions<br>
+	 *  - distributes good among fingers<br>
+	 *  - can be placed capo <br>
+	 * 
+	 */
+	private float combinationHasGoodFingering(ArrayList stringValueCombination) {
+		if(!isValidProcess()){
+			return 0;
+		}
+		// init: copy into simple array
+		float finalGrade = 0;
+		int[] positions = new int[this.tuning.length];
+		for (int i = 0; i < this.tuning.length; i++)
+			positions[i] = -1;
+		{
+			Iterator it = stringValueCombination.iterator();
+			
+			while (it.hasNext()) {
+				StringValue sv = (StringValue) it.next();
+				positions[sv.getString()] = sv.getFret();
+			}
+		}
+		// algorithm
+		
+		// distance between fingers
+		int min = ChordSettings.instance().getFindChordsMax()+2, max = 0, maxCount=0;
+		boolean openChord = false, zeroString = false;
+		
+		for (int i = 0; i < this.tuning.length; i++) {
+			
+			openChord|= ChordSettings.instance().isEmptyStringChords() && positions[i] == 0;
+			zeroString |= positions[i]==0;
+			
+			if (positions[i] < min && positions[i] != 0 && positions[i]!=-1)
+				min = positions[i];
+			
+			if (positions[i] > max) {
+				max = positions[i];
+				maxCount=1;
+			}
+			else 
+				if (positions[i]==max) 
+					maxCount++;
+			
+		}
+		
+		// finger as capo
+		
+		int count = 0;
+		
+		for (int i = 0; i < this.tuning.length; i++)
+			if (positions[i] == min)
+				count++;
+		
+		if (!openChord) { 
+			if (zeroString)
+				finalGrade += ChordSettings.instance().getFingeringGrade()/8;
+			else
+				if (count >= 2)
+					finalGrade += ChordSettings.instance().getFingeringGrade()/8;
+		}
+		else
+			if (openChord)
+				finalGrade += ChordSettings.instance().getFingeringGrade()/8;
+		
+		// position distance: 1-2 nice 3 good 4 bad 5 disaster
+		float distanceGrade;
+		
+		switch(Math.abs(max-min)) {
+			case 0 : distanceGrade=ChordSettings.instance().getFingeringGrade()/5;
+					break;
+			case 1 : distanceGrade=ChordSettings.instance().getFingeringGrade()/(5+maxCount);
+					break;
+			case 2 : distanceGrade=ChordSettings.instance().getFingeringGrade()/(6+maxCount);
+					 if (min<5) distanceGrade*=0.9;
+					break;
+			case 3 : distanceGrade=-ChordSettings.instance().getFingeringGrade()/10*maxCount;
+					// I emphasize the penalty if big difference is on some 
+					// lower frets (it is greater distance then)
+					if (min<5) distanceGrade*=1.3;
+					break;
+			case 4 : distanceGrade=-ChordSettings.instance().getFingeringGrade()/4*maxCount;
+					if (min<=5) distanceGrade*=1.8;
+					break;
+			default : distanceGrade=-ChordSettings.instance().getFingeringGrade()*maxCount;
+					break;
+		}
+		finalGrade += distanceGrade;
+		
+		// ============== finger position abstraction ==================
+		// TODO: what to do with e.g. chord -35556 (C7)
+		// ... it can be held with capo on 5th fret, but very hard :)
+		// ... This is the same as with "capo after", I didn't consider that (e.g. chord -35555)
+		ArrayList[] fingers={new ArrayList(2),new ArrayList(2),new ArrayList(2),new ArrayList(2)};
+		// TODO: still no thumb, sorry :)
+		
+		// STRUCTURE: ArrayList consists of Integers - first is fret
+		//                                           - others are strings
+/*		
+		for (int i=0; i<this.tuning.length; i++)
+			System.out.print(" "+positions[i]);
+		System.out.println("");
+*/
+		
+		// if chord is open, then we can have capo only in strings before open string
+		int lastZeroIndex = 0;
+		
+		if (zeroString)
+			for (int i=0; i<positions.length; i++)
+				if (positions[i]==0) lastZeroIndex=i;
+		
+		// open or not not open chord,
+		// index finger is always on lowest fret possible
+		fingers[0].add(new Integer(min));
+		
+		for (int i=lastZeroIndex; i<positions.length; i++)
+				if (positions[i]==min) {
+					fingers[0].add(new Integer(i));
+					positions[i]=-1;
+				}
+		
+		// other fingers
+		// if not zero-fret, occupy fingers respectivly
+		int finger=1;
+		for (int i=0; i<positions.length; i++) {
+			if (positions[i]!=0 && positions[i]!=-1) {
+				if (finger<4) {
+					fingers[finger].add(new Integer(positions[i]));
+					fingers[finger].add(new Integer(i));
+					positions[i]=-1;
+				}
+				finger++;
+			}
+		}
+		
+/*		System.out.println("Positions:");
+		for (int i=0; i<4; i++) {
+			if (fingers[i].size()>1)
+				System.out.print("G"+(i+1)+"R"+((Integer)fingers[i].get(0)).intValue()+"S"+((Integer)fingers[i].get(1)).intValue()+" ");
+		}
+*/		
+		
+		if (finger>4) 
+			finalGrade-=ChordSettings.instance().getFingeringGrade();
+		 else
+			finalGrade+=ChordSettings.instance().getFingeringGrade()*0.1*(15-2*finger);
+		
+		// TODO: maybe to put each finger's distance from the minimum
+		return finalGrade;
+		
+	}
+	
+	/**
+	 * grades the chord semantics, based on theory.
+	 * 
+	 * Tone semantics is good if:<br>
+	 *  - there appear tones from chord basis or bass tone<br>
+	 *  - there appear alteration tones on their specific places<br><br>
+	 *
+	 * Algorithm:<br>
+	 *  - search for chord tonic. If some note is found before (and it's not bass) do penalty<br>
+	 *  - make penalty if the bass tone is not in bass<br>
+	 *  - check if all the expanding notes are here. If some are not, do penalty<br>
+	 *  - if expanding note isn't higher than tonic octave, then priority should be less<br>
+	 *  - If there are not some with NON_ESSENTIAL_INDEX are not here, penalty should be less<br>
+	 */
+	private float combinationChordSemantics(ArrayList stringValueCombination) {
+		if(!isValidProcess()){
+			return 0;
+		}
+		float finalGrade = 0;
+		
+		int foundTonic = -1;
+		
+		int[] foundExpanding = new int[this.expandingNotes.length];
+		int stringDepth=0;
+		
+		for (int string = 0; string < this.tuning.length; string++) {
+			// we have to go string-by-string because of the octave
+			Iterator it = stringValueCombination.iterator();
+			StringValue current = null;
+			boolean found=false;
+			
+			while (it.hasNext() && !found) {
+				StringValue sv = (StringValue) it.next();
+				if (sv.getString() == string &&!found && sv.getFret()!=-1) { // stumbled upon next string
+					current = sv;
+					found=true;
+					stringDepth++;
+				}
+			}
+			
+			// grade algorithms----
+			if (current != null) {
+				// search for tonic
+				if (foundTonic==-1 && current.getRequiredNoteIndex()==0)
+					foundTonic=this.tuning[current.getString()]+current.getFret();
+				
+				// specific bass not in bass?
+				if (stringDepth>1) {
+					if (current.getRequiredNoteIndex()==this.BASS_INDEX)  
+						finalGrade -= ChordSettings.instance().getGoodChordSemanticsGrade();
+					
+					if (current.getRequiredNoteIndex()<0) { // expanding tones
+						// expanding tone found before the tonic
+						if (foundTonic==-1)
+							finalGrade -= ChordSettings.instance().getGoodChordSemanticsGrade()/2;
+						else {
+							// if expanding note isn't higher than tonic's octave
+							if (foundTonic+11 > this.tuning[current.getString()]+current.getFret())
+								finalGrade -= ChordSettings.instance().getGoodChordSemanticsGrade()/3;
+						}
+						
+						// search for distinct expanding notes
+						for (int i=0; i<this.expandingNotes.length; i++)
+							if ((this.tuning[string]+current.getFret())%12==(this.chordTonic+this.expandingNotes[i]-1)%12)
+								if (foundExpanding[i]==0)
+									foundExpanding[i]=current.getRequiredNoteIndex();
+						
+					}
+				}
+			}
+		}
+		
+		// penalties for not founding an expanding note
+		if (this.alteration!=0) {
+			int essentials=0, nonEssentials=0;
+			for (int i=0; i<foundExpanding.length; i++) {
+				if (foundExpanding[i]==this.ESSENTIAL_INDEX)
+					essentials++;
+				else
+					if (foundExpanding[i]!=0)
+						nonEssentials++;
+			}
+			
+			if (essentials+nonEssentials==this.expandingNotes.length)
+				finalGrade+=ChordSettings.instance().getGoodChordSemanticsGrade();
+			else {
+				if (essentials==2) // if all essentials are there, it's good enough
+					finalGrade+=ChordSettings.instance().getGoodChordSemanticsGrade()/2;
+				
+				// but if some are missing, that's BAD:
+				else {
+					finalGrade+= (essentials+nonEssentials-this.expandingNotes.length)*ChordSettings.instance().getGoodChordSemanticsGrade();
+					// half of the penalty for non-essential notes
+					finalGrade+= nonEssentials*ChordSettings.instance().getGoodChordSemanticsGrade()/2;
+				}
+			}
+		}
+		
+		return finalGrade;
+		
+	}
+	
+	/**
+	 *  If current StringValue is a subset or superset of already better ranked
+	 *  chords, it shouldn't be put inside, because it is duplicate.
+	 *  @param stringValues current StringValue to be examined
+	 *  @param betterOnes ArrayList of already stored StringList chords
+	 *  @return true if it is duplicate, false if it is unique
+	 */
+	private boolean checkIfSubset(List stringValues, List betterOnes) {
+		if(!isValidProcess()){
+			return false;
+		}
+		Iterator it = betterOnes.iterator();
+		while (it.hasNext()) {
+			List currentStringValue = (List)it.next();
+			boolean foundDifferentFret = false;
+			// repeat until gone through all strings, or found something different
+			for (int i=0; i<currentStringValue.size(); i++) {
+				int currentString = ((ChordCreatorUtil.StringValue)currentStringValue.get(i)).getString() ;
+				// search for the same string - if not found do nothing
+				for (int j=0; j<stringValues.size(); j++)
+				if ( ((ChordCreatorUtil.StringValue)stringValues.get(j)).getString() == currentString) {
+					// if the frets on the same string differ, then chords are not subset/superset of each other
+					if (((ChordCreatorUtil.StringValue)stringValues.get(j)).getFret() != ((ChordCreatorUtil.StringValue)currentStringValue.get(i)).getFret())
+						foundDifferentFret=true;
+				}
+				
+			}
+			if (!foundDifferentFret)// nothing is different
+				return true;
+		}
+		
+		return false;
+	}
+	
+	/**
+	 * contains information about the note: string, fret and tone function in a
+	 * chord
+	 * 
+	 * @author julian
+	 * 
+	 */
+	
+	private class StringValue {
+		
+		protected int string;
+		protected int fret;
+		protected int requiredNoteIndex;
+		
+		public StringValue(int string, int fret, int requiredNoteIndex) {
+			this.string = string;
+			this.fret = fret;
+			this.requiredNoteIndex = requiredNoteIndex;
+			
+		}
+		
+		public int getString() {
+			return this.string;
+		}
+		
+		public int getFret() {
+			return this.fret;
+		}
+		
+		public int getRequiredNoteIndex() {
+			return this.requiredNoteIndex;
+		}
+	}
+	
+	/** used just to sort StringValue ArrayLists by priorities */
+	protected class PriorityItem {
+		
+		ArrayList stringValues;
+		float priority;
+		
+	}
+	
+	/** used to sort the array */
+	protected class PriorityComparator implements Comparator {
+		
+		public int compare(Object o1, Object o2) {
+			return Math.round(((PriorityItem) o2).priority - ((PriorityItem) o1).priority);
+		}
+		
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordCustomList.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordCustomList.java
new file mode 100644
index 0000000..3e78fb1
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordCustomList.java
@@ -0,0 +1,256 @@
+/*
+ * Created on 02-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.chord;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.song.models.TGChord;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChordCustomList extends Composite {
+	
+	private ChordDialog dialog;
+	private List chords;
+	
+	public ChordCustomList(ChordDialog dialog,Composite parent,int style,int height) {
+		super(parent,style);
+		this.setLayout(dialog.gridLayout(1,false,0,0));
+		this.setLayoutData(makeGridData(height));
+		this.dialog = dialog;
+		this.init();
+	}
+	
+	public GridData makeGridData(int height){
+		GridData data = new GridData(SWT.FILL,SWT.TOP,true,true);
+		data.heightHint = height;
+		
+		return data;
+	}
+	
+	public void init(){
+		Composite composite = new Composite(this,SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.chords = new List(composite,SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+		this.chords.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.chords.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(getDialog().getEditor() != null){
+					showChord(getChords().getSelectionIndex());
+				}
+			}
+		});
+		
+		//-------------BUTTONS-----------------------------
+		Composite buttons = new Composite(this,SWT.NONE);
+		buttons.setLayout(new GridLayout(3,false));
+		
+		Button add = new Button(buttons,SWT.PUSH);
+		add.setText(TuxGuitar.getProperty("add"));
+		add.addSelectionListener(new SelectionAdapter(){
+			public void widgetSelected(SelectionEvent e) {
+				addCustomChord();
+			}
+		});
+		
+		Button rename = new Button(buttons,SWT.PUSH);
+		rename.setText(TuxGuitar.getProperty("rename"));
+		rename.addSelectionListener(new SelectionAdapter(){
+			public void widgetSelected(SelectionEvent e) {
+				renameCustomChord(getChords().getSelectionIndex());
+			}
+		});
+		
+		Button remove = new Button(buttons,SWT.PUSH);
+		remove.setText(TuxGuitar.getProperty("remove"));
+		remove.addSelectionListener(new SelectionAdapter(){
+			public void widgetSelected(SelectionEvent e) {
+				removeCustomChord(getChords().getSelectionIndex());
+			}
+		});
+		
+		loadChords();
+	}
+	
+	private void loadChords(){
+		int selectionIndex = this.chords.getSelectionIndex();
+		this.chords.removeAll();
+		
+		for(int i = 0;i < TuxGuitar.instance().getCustomChordManager().countChords();i ++){
+			TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i);
+			if(chord != null){
+				this.chords.add(chord.getName());
+			}
+		}
+		
+		if(selectionIndex >= 0 && selectionIndex < this.chords.getItemCount()){
+			this.chords.select(selectionIndex);
+		}else if(selectionIndex > 0 && (selectionIndex - 1) < this.chords.getItemCount()){
+			this.chords.select((selectionIndex - 1));
+		}
+	}
+	
+	protected void showChord(int index) {
+		TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(index);
+		if (chord != null) {
+			this.dialog.getEditor().setChord(chord);
+		}
+	}
+	
+	protected void addCustomChord(){
+		TGChord chord = this.dialog.getEditor().getChord();
+		if(chord != null){
+			NameDialog nDialog = new NameDialog();
+			nDialog.name = this.dialog.getEditor().getChordName().getText().trim();
+			String name = nDialog.open();
+			if(name != null){
+				if(name.length() == 0){
+					MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-empty-error"));
+					return;
+				}
+				if(TuxGuitar.instance().getCustomChordManager().existOtherEqualCustomChord(name,-1)){
+					MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-exist-error"));
+					return;
+				}
+				chord.setName(name);
+				TuxGuitar.instance().getCustomChordManager().addChord(chord);
+				loadChords();
+			}
+		}
+	}
+	
+	protected void renameCustomChord(int index){
+		TGChord chord =  TuxGuitar.instance().getCustomChordManager().getChord(index);
+		if(chord != null){
+			String name = new NameDialog(chord.getName()).open();
+			if(name != null){
+				if(name.length() == 0){
+					MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-empty-error"));
+					return;
+				}
+				if(TuxGuitar.instance().getCustomChordManager().existOtherEqualCustomChord(name,index)){
+					MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-exist-error"));
+					return;
+				}
+				TuxGuitar.instance().getCustomChordManager().renameChord(index,name);
+				loadChords();
+			}
+		}
+	}
+	
+	protected void removeCustomChord(int index){
+		if (index >= 0 && index < TuxGuitar.instance().getCustomChordManager().countChords()) {
+			TuxGuitar.instance().getCustomChordManager().removeChord(index);
+			loadChords();
+		}
+	}
+	
+	protected ChordDialog getDialog(){
+		return this.dialog;
+	}
+	
+	protected List getChords(){
+		return this.chords;
+	}
+	
+	private class NameDialog{
+		protected String name;
+		
+		public NameDialog(String name){
+			this.name = name;
+		}
+		
+		public NameDialog(){
+			this(new String());
+		}
+		
+		public String open(){
+			final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+			dialog.setLayout(new GridLayout());
+			dialog.setText(TuxGuitar.getProperty("chord.custom"));
+			
+			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+			group.setLayout(new GridLayout());
+			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			group.setText(TuxGuitar.getProperty("chord.custom"));
+			
+			Composite composite = new Composite(group, SWT.NONE);
+			composite.setLayout(new GridLayout(2,false));
+			composite.setLayoutData(getMainData());
+			
+			final Label label = new Label(composite,SWT.LEFT);
+			label.setText(TuxGuitar.getProperty("chord.name") + ":");
+			label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+			
+			final Text text = new Text(composite,SWT.BORDER | SWT.SINGLE);
+			text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+			text.setText(this.name);
+			
+			//------------------BUTTONS--------------------------
+			Composite buttons = new Composite(dialog, SWT.NONE);
+			buttons.setLayout(new GridLayout(2,false));
+			buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+			
+			final Button buttonOK = new Button(buttons, SWT.PUSH);
+			buttonOK.setText(TuxGuitar.getProperty("ok"));
+			buttonOK.setLayoutData(getButtonData());
+			buttonOK.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					NameDialog.this.name = text.getText();
+					dialog.dispose();
+				}
+			});
+			
+			Button buttonCancel = new Button(buttons, SWT.PUSH);
+			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+			buttonCancel.setLayoutData(getButtonData());
+			buttonCancel.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent arg0) {
+					NameDialog.this.name = null;
+					dialog.dispose();
+				}
+			});
+			
+			dialog.setDefaultButton( buttonOK );
+			
+			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+			
+			return this.name;
+		}
+		
+		private GridData getMainData(){
+			GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+			data.minimumWidth = 300;
+			return data;
+		}
+		
+		private GridData getButtonData(){
+			GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+			data.minimumWidth = 80;
+			data.minimumHeight = 25;
+			return data;
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordDatabase.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordDatabase.java
new file mode 100644
index 0000000..d223681
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordDatabase.java
@@ -0,0 +1,110 @@
+package org.herac.tuxguitar.app.editors.chord;
+
+/**
+ * Stores the information about the chord name, structure and
+ * alteration abilities into a list
+ * 
+ * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
+ *
+ */
+public class ChordDatabase {
+	
+	/**
+	 * fills all the necessary data into chords List consisted out of ChordInfo-s
+	 * 
+	 * If you want to change it, please contact me on
+	 * nikola.kolarovic at gmail.com
+	 */
+	private static final ChordInfo[] data = new ChordInfo[]{
+		
+		// Major--------------------------
+		new ChordInfo("M",new int[]{ 1, 5, 8 }),
+		
+		// 7--------------------------
+		new ChordInfo("7",new int[]{ 1, 5, 8, 11 }),
+		
+		// 7M--------------------------
+		// hard-coded index used in ChordRecognizer, below comment "determine seventh", line 315 now
+		new ChordInfo("maj7",new int[]{ 1, 5, 8, 12 }),
+		
+		// 6--------------------------
+		new ChordInfo("6",new int[]{ 1, 5, 8, 10 }),
+		
+		// m--------------------------
+		// index 4 hard-coded in ChordRecognizer line 220, so it is not so unusual
+		new ChordInfo("m",new int[]{ 1, 4, 8 }),
+		
+		// m7--------------------------
+		new ChordInfo("m7",new int[]{ 1, 4, 8, 11 }),
+		
+		// m7M--------------------------
+		new ChordInfo("m/maj7",new int[]{ 1, 4, 8, 12 }),
+		
+		// m6--------------------------
+		new ChordInfo("m6",new int[]{ 1, 4, 8, 10 }),
+		
+		// sus2--------------------------
+		new ChordInfo("sus2",new int[]{ 1, 3, 8 }),
+		
+		// sus4--------------------------
+		new ChordInfo("sus4",new int[]{ 1, 6, 8 }),
+		
+		// 7sus2--------------------------
+		new ChordInfo("7sus2",new int[]{ 1, 3, 8, 11 }),
+		
+		// 7sus4--------------------------
+		new ChordInfo("7sus4",new int[]{ 1, 6, 8, 11 }),
+		
+		// below indexes are hard-coded in ChordRecognizer line 311 now
+		
+		// dim--------------------------
+		new ChordInfo("dim",new int[]{ 1, 4, 7 }),
+		
+		// dim7--------------------------
+		new ChordInfo("dim7",new int[]{ 1, 4, 7, 10 }),
+		
+		// aug--------------------------
+		new ChordInfo("aug",new int[]{ 1, 5, 9 }),
+		
+		// 5--------------------------
+		// index <last> hard-coded in ChordRecognizer line 220, so it is not so unusual
+		new ChordInfo("5",new int[]{ 1, 8 }),
+		
+	};
+	
+	public static int length(){
+		return data.length;
+	}
+	
+	public static ChordInfo get(int index){
+		return data[index];
+	}
+	
+	/** chord data structure, contains all info for chord formation **/
+	public static class ChordInfo {
+		
+		private String name;
+		private int[] requiredNotes;
+		
+		public ChordInfo(String name,int[] requiredNotes){
+			this.name = name;
+			this.requiredNotes = requiredNotes;
+		}
+		
+		public String getName() {
+			return this.name;
+		}
+		
+		public int[] getRequiredNotes() {
+			return this.requiredNotes;
+		}
+		
+		public int[] cloneRequireds() {
+			int[] requiredNotes = new int[this.requiredNotes.length];
+			for(int i = 0; i < requiredNotes.length; i ++){
+				requiredNotes[i] = this.requiredNotes[i];
+			}
+			return requiredNotes;
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordDialog.java
new file mode 100644
index 0000000..69fba3a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordDialog.java
@@ -0,0 +1,252 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.chord;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.control.TGChordImpl;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ChordDialog {
+	public static final String NAME = "action.insert.chord";
+	
+	public static final int RESULT_SAVE = 1;
+	public static final int RESULT_CLEAN = 2;
+	public static final int RESULT_CANCEL = 3;
+	
+	private static final int DEFAULT_STYLE = SWT.BORDER;
+	
+	private Shell dialog;
+	private TGChord chord;
+	private ChordEditor editor;
+	private ChordSelector selector;
+	private ChordList list;
+	private ChordRecognizer recognizer;
+	//private boolean accepted;
+	private int result;
+	
+	public ChordDialog() {
+		super();
+	}
+	
+	public int open(Shell shell,final TGMeasureImpl measure,TGBeat beat, long start) {
+		this.setResult(RESULT_CANCEL);
+		
+		this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setText(TuxGuitar.getProperty("chord.editor"));
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				TuxGuitar.instance().getCustomChordManager().write();
+			}
+		});
+		
+		Composite topComposite = new Composite(this.dialog, SWT.NONE);
+		topComposite.setLayout(new GridLayout(4,false));
+		topComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite bottomComposite = new Composite(this.dialog, SWT.NONE);  
+		bottomComposite.setLayout(new GridLayout());
+		bottomComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		int[] tuning = findCurrentTuning(measure.getTrack());
+		
+		//---------------SELECTOR--------------------------------
+		this.selector = new ChordSelector(this,topComposite,DEFAULT_STYLE, tuning);
+		this.selector.pack();
+		
+		//---------------EDITOR--------------------------------
+		this.editor = new ChordEditor(this, topComposite, DEFAULT_STYLE,(short)tuning.length);
+		this.editor.pack();
+		
+		this.editor.setCurrentTrack(measure.getTrack());
+		
+		//---------------RECOGNIZER------------------------------------
+		this.recognizer = new ChordRecognizer(this, topComposite, DEFAULT_STYLE);
+		
+		//---------------CUSTOM CHORDS---------------------------------
+		new ChordCustomList(this, topComposite, DEFAULT_STYLE,Math.max(this.selector.getBounds().height,this.editor.getBounds().height));
+		
+		//---------------LIST--------------------------------
+		Composite listComposite = new Composite(bottomComposite, SWT.NONE);
+		listComposite.setLayout(gridLayout(1,false,0,0));
+		listComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.list = new ChordList(this,listComposite,beat);
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(this.dialog, SWT.NONE);
+		buttons.setLayout(gridLayout(3,false,0,0));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				setChord(getEditor().getChord());
+				setResult(RESULT_SAVE);
+				getDialog().dispose();
+			}
+		});
+		
+		Button buttonClean = new Button(buttons, SWT.PUSH);
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.setLayoutData(getButtonData());
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				setResult(RESULT_CLEAN);
+				getDialog().dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				getDialog().dispose();
+			}
+		});
+		
+		// load the current chord
+		this.editor.setChord(findCurrentChord(measure, start));
+		
+		this.dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return getResult();
+	}
+	
+	public ChordEditor getEditor() {
+		return this.editor;
+	}
+	
+	public ChordSelector getSelector() {
+		return this.selector;
+	}
+	
+	public ChordList getList() {
+		return this.list;
+	}
+	
+	public ChordRecognizer getRecognizer() {
+		return this.recognizer;
+	}
+	
+	public TGChord getChord() {
+		return this.chord;
+	}
+	
+	public void setChord(TGChord chord) {
+		this.chord = chord;
+	}
+	
+	public int getResult() {
+		return this.result;
+	}
+	
+	public void setResult(int result) {
+		this.result = result;
+	}
+	
+	public boolean isDisposed(){
+		return this.dialog.isDisposed();
+	}
+	
+	public Shell getDialog(){
+		return this.dialog;
+	}
+	
+	public GridLayout gridLayout(int numColumns,boolean makeColumnsEqualWidth,int marginWidth,int marginHeight){
+		GridLayout layout = new GridLayout();
+		layout.numColumns = numColumns;
+		layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
+		layout.marginWidth = (marginWidth >= 0)?marginWidth:layout.marginWidth;
+		layout.marginHeight = (marginHeight >= 0)?marginHeight:layout.marginHeight;
+		return layout;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private int[] findCurrentTuning(TGTrack track){
+		int[] tuning = new int[track.stringCount()];
+		Iterator it = track.getStrings().iterator();
+		while(it.hasNext()){
+			TGString string = (TGString)it.next();
+			tuning[(tuning.length - string.getNumber())] = string.getValue();
+		}
+		return tuning;
+	}
+	
+	protected TGChord findCurrentChord(TGMeasure measure, long start){
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		TGChord chord = manager.getMeasureManager().getChord(measure, start);
+		if(chord == null){
+			chord = manager.getFactory().newChord(measure.getTrack().stringCount());
+			chord.setFirstFret(1);
+			List notes = manager.getMeasureManager().getNotes(measure, start);
+			if(!notes.isEmpty()){
+				int maxValue = -1;
+				int minValue = -1;
+				
+				//verifico el first fret
+				Iterator it = notes.iterator();
+				while(it.hasNext()){
+					TGNote note = (TGNote)it.next(); 
+					if(maxValue < 0 || maxValue < note.getValue()){
+						maxValue = note.getValue();
+					}
+					if(note.getValue() > 0 && (minValue < 0 || minValue > note.getValue())){
+						minValue = note.getValue();
+					}
+				}
+				if(maxValue > TGChordImpl.MAX_FRETS  && minValue > 0){
+					chord.setFirstFret((short)(minValue));
+				}
+				
+				//agrego los valores
+				it = notes.iterator();
+				while(it.hasNext()){
+					TGNote note = (TGNote)it.next();
+					chord.addFretValue( ( note.getString() - 1) , note.getValue());
+				}
+			}
+		}
+		return chord;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordEditor.java
new file mode 100644
index 0000000..52c6ad3
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordEditor.java
@@ -0,0 +1,509 @@
+/*
+ * Created on 28-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.chord;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.control.TGChordImpl;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVelocities;
+/**
+ * @author julian
+ * @author Nikola Kolarovic
+ */
+public class ChordEditor extends Composite {
+	
+	public static final int STRING_SPACING = 30;
+	public static final int FRET_SPACING = 30;
+	public static final short MIN_FRET = 1;
+	public static final short MAX_FRET = 24;
+	
+	private ChordDialog dialog;
+	private Composite composite;
+	private Text chordName;
+	private List points;
+	private boolean[] firstFrets;
+	private int[] strings;
+	private int[] frets;
+	private short fret;
+	private short maxStrings;
+	private int width;
+	private int height;
+	private TGTrack currentTrack = null;
+	
+	public ChordEditor(Composite parent, int style) {
+		super(parent, style);
+	}
+	
+	public ChordEditor(ChordDialog dialog, Composite parent,int style, short maxStrings) {
+		this(parent, style);
+		this.dialog = dialog;
+		this.setLayout(dialog.gridLayout(1, false, 0, 0));
+		this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		this.init(maxStrings);
+	}
+	
+	public void init(short maxStrings) {
+		this.fret = MIN_FRET;
+		this.maxStrings = maxStrings;
+		this.firstFrets = new boolean[this.maxStrings];
+		this.strings = new int[this.maxStrings];
+		this.frets = new int[TGChordImpl.MAX_FRETS];
+		this.width = ((STRING_SPACING * this.maxStrings) - STRING_SPACING);
+		this.height = ((FRET_SPACING * TGChordImpl.MAX_FRETS) - FRET_SPACING);
+		this.points = new ArrayList();
+		
+		for (int i = 0; i < this.firstFrets.length; i++) {
+			this.firstFrets[i] = false;
+		}
+		
+		for (int i = 0; i < this.strings.length; i++) {
+			this.strings[i] = ((i + 1) * STRING_SPACING);
+		}
+		
+		for (int i = 0; i < this.frets.length; i++) {
+			this.frets[i] = ((i + 1) * FRET_SPACING);
+		}
+		
+		Composite composite = new Composite(this, SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		
+		this.composite = new Composite(composite, SWT.BORDER | SWT.V_SCROLL | SWT.DOUBLE_BUFFERED);
+		
+		Composite nameComposite = new Composite(composite, SWT.NONE);
+		nameComposite.setLayout(this.dialog.gridLayout(1, true, 0, 0));
+		nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,true));
+		
+		Label formulaLabel = new Label(nameComposite, SWT.SEPARATOR | SWT.HORIZONTAL);
+		formulaLabel.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,true));
+		
+		Label chordNameLabel = new Label(nameComposite, SWT.LEFT);
+		chordNameLabel.setText(TuxGuitar.getProperty("chord.name"));
+		chordNameLabel.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,false));
+		
+		this.chordName = new Text(nameComposite, SWT.SINGLE | SWT.BORDER);
+		this.chordName.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,false));
+		
+		this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+		this.composite.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				TGPainterImpl painter = new TGPainterImpl(e.gc);
+				paintEditor(painter);
+			}
+		});
+		
+		this.composite.addMouseListener(new MouseAdapter() {
+			public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
+				getComposite().setFocus();
+				checkPoint(e.x, e.y);
+				redraw();
+			}
+		});
+		
+		this.composite.getVerticalBar().setIncrement(1);
+		this.composite.getVerticalBar().setMaximum( ((MAX_FRET + MIN_FRET) - (TGChordImpl.MAX_FRETS - 1) + 1));
+		this.composite.getVerticalBar().setMinimum(MIN_FRET);
+		this.composite.getVerticalBar().setThumb(1);
+		this.composite.getVerticalBar().addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				setFret((short) getComposite().getVerticalBar().getSelection(), false, true);
+				redraw();
+			}
+		});
+		
+		this.composite.setLayoutData(makeCompositeData());
+	}
+	
+	private GridData makeCompositeData() {
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = (getWidth() + (STRING_SPACING * 2) + this.composite.getVerticalBar().getSize().x);
+		data.minimumHeight = (getHeight() + (FRET_SPACING * 2));
+		return data;
+	}
+	
+	protected void paintEditor(TGPainterImpl painter) {
+		int noteSize = (FRET_SPACING / 2);
+		
+		painter.setForeground(new TGColorImpl(this.getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		
+		// dibujo el puente
+		painter.initPath();
+		painter.setAntialias(false);
+		painter.moveTo((STRING_SPACING - 10), (FRET_SPACING - 10));
+		painter.lineTo(STRING_SPACING + (this.width + 10), (FRET_SPACING - 10));
+		painter.closePath();
+		
+		painter.drawString(Integer.toString(getFret()), FRET_SPACING - 25,STRING_SPACING);
+		
+		// dibujo las cuerdas
+		painter.initPath();
+		painter.setAntialias(false);
+		for (int i = 0; i < this.strings.length; i++) {
+			painter.moveTo(this.strings[i], FRET_SPACING);
+			painter.lineTo(this.strings[i], FRET_SPACING + this.height);
+		}
+		painter.closePath();
+		
+		// dibujo las cegillas
+		painter.initPath();
+		painter.setAntialias(false);
+		for (int i = 0; i < this.frets.length; i++) {
+			painter.moveTo(STRING_SPACING, this.frets[i]);
+			painter.lineTo(STRING_SPACING + this.width, this.frets[i]);
+		}
+		painter.closePath();
+		
+		// dibujo las notas
+		painter.setBackground(new TGColorImpl(this.getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		Iterator it = this.points.iterator();
+		while (it.hasNext()) {
+			Point point = (Point) it.next();
+			painter.initPath(TGPainter.PATH_FILL);
+			painter.addOval(point.x - (noteSize / 2), point.y + (noteSize / 2),noteSize, noteSize);
+			painter.closePath();
+		}
+		
+		// dibujo las notas al aire
+		for (int i = 0; i < this.firstFrets.length; i++) {
+			if (!hasPoints(i)) {
+				painter.initPath();
+				if (this.firstFrets[i]) {
+					int x = this.strings[i] - (noteSize / 2);
+					int y = (FRET_SPACING - noteSize) - 11;
+					painter.addOval(x, y, (noteSize - 1), (noteSize - 1));
+				} else {
+					int x = this.strings[i];
+					int y = (FRET_SPACING - noteSize) - 4;
+					painter.moveTo(x - ((noteSize / 2) - 1), y + ((noteSize / 2) - 1));
+					painter.lineTo(x + ((noteSize / 2) - 1), y - ((noteSize / 2) - 1));
+					painter.moveTo(x - ((noteSize / 2) - 1), y - ((noteSize / 2) - 1));
+					painter.lineTo(x + ((noteSize / 2) - 1), y + ((noteSize / 2) - 1));
+				}
+				painter.closePath();
+			}
+		}
+	}
+	
+	protected void checkPoint(int x, int y) {
+		int stringIndex = getStringIndex(x);
+		int fretIndex = getFretIndex(y);
+		
+		if (y < FRET_SPACING) {
+			this.firstFrets[stringIndex] = !this.firstFrets[stringIndex];
+			this.removePointsAtStringLine(this.strings[stringIndex]);
+		} else if (y < (FRET_SPACING * TGChordImpl.MAX_FRETS)) {
+			Point point = new Point(this.strings[stringIndex],this.frets[fretIndex]);
+			if (!this.removePoint(point)) {
+				this.firstFrets[stringIndex] = false;
+				this.removePointsAtStringLine(this.strings[stringIndex]);
+				this.addPoint(point);
+				this.orderPoints();
+			}
+		}
+		else{
+			return; // don't recognize it otherwise
+		}
+		
+		// after changing a chord, recognize it
+		this.dialog.getRecognizer().recognize(getChord(),true,false);
+	}
+	
+	private boolean removePoint(Point point) {
+		Iterator it = this.points.iterator();
+		while (it.hasNext()) {
+			Point currPoint = (Point) it.next();
+			if (currPoint.x == point.x && currPoint.y == point.y) {
+				this.points.remove(point);
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	private void orderPoints() {
+		for (int i = 0; i < this.points.size(); i++) {
+			Point minPoint = null;
+			for (int noteIdx = i; noteIdx < this.points.size(); noteIdx++) {
+				Point point = (Point) this.points.get(noteIdx);
+				if (minPoint == null || point.x < minPoint.x) {
+					minPoint = point;
+				}
+			}
+			this.points.remove(minPoint);
+			this.points.add(i, minPoint);
+		}
+	}
+	
+	private void removePointsAtStringLine(int x) {
+		Iterator it = this.points.iterator();
+		while (it.hasNext()) {
+			Point point = (Point) it.next();
+			if (point.x == x) {
+				this.points.remove(point);
+				break;
+			}
+		}
+	}
+	
+	private void addPoint(Point point) {
+		this.points.add(point);
+	}
+	
+	private int getStringIndex(int x) {
+		int index = -1;
+		for (int i = 0; i < this.strings.length; i++) {
+			if (index < 0) {
+				index = i;
+			} else {
+				int distanceX = Math.abs(x - this.strings[index]);
+				int currDistanceX = Math.abs(x - this.strings[i]);
+				if (currDistanceX < distanceX) {
+					index = i;
+				}
+			}
+		}
+		return index;
+	}
+	
+	private int getFretIndex(int y) {
+		int index = -1;
+		for (int i = 0; i < this.frets.length; i++) {
+			if (index < 0) {
+				index = i;
+			} else {
+				int distanceX = Math.abs(y - (this.frets[index] + (FRET_SPACING / 2)));
+				int currDistanceX = Math.abs(y - (this.frets[i] + (FRET_SPACING / 2)));
+				if (currDistanceX < distanceX) {
+					index = i;
+				}
+			}
+		}
+		return index;
+		
+	}
+	
+	private boolean hasPoints(int stringIndex) {
+		Iterator it = this.points.iterator();
+		while (it.hasNext()) {
+			Point point = (Point) it.next();
+			if (point.x == this.strings[stringIndex]) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public boolean isEmpty() {
+		return this.points.isEmpty();
+	}
+	
+	public int getValue(int string) {
+		int value = -1;
+		if (this.firstFrets[this.maxStrings - string]) {
+			value = 0;
+		}
+		
+		if (value < 0) {
+			Iterator it = this.points.iterator();
+			while (it.hasNext()) {
+				Point point = (Point) it.next();
+				if (string == (this.maxStrings - getStringIndex(point.x))) {
+					value = (getFretIndex(point.y + (FRET_SPACING / 2)) + 1);
+					value += (getFret() - 1);
+				}
+			}
+		}
+		return value;
+	}
+	
+	public void addValue(int value, int string/*, boolean redecorate*/) {
+		int realValue = value;
+		if (string >= 1 && string <= this.maxStrings) {
+			this.firstFrets[this.maxStrings - string] = false;
+			this.removePointsAtStringLine(this.strings[this.maxStrings - string]);
+			if (realValue == 0) {
+				this.firstFrets[this.maxStrings - string] = true;
+			} else if (realValue >= 0) {
+				realValue -= (getFret() - 1);
+				if (realValue > 0 && realValue <= TGChordImpl.MAX_FRETS) {
+					this.addPoint(new Point(this.strings[this.maxStrings - string], this.frets[realValue - 1]));
+				}
+			}
+			//INNECESARY CODE
+			//this method is called allways from "setChord(c)" 
+			//but it is called some times, as Strings has the chord.
+			//So i moved it to "setChord" to call "recognize" only one time.
+			
+			// after adding a value, recognize the current chord
+			//this.chordName.setText(this.dialog.getRecognizer().recognize(getChord(), redecorate));
+		}
+	}
+	
+	public short getFret() {
+		return this.fret;
+	}
+	
+	public void setFret(short fret) {
+		setFret(fret, true, false);
+	}
+	
+	protected void setFret(short fret, boolean updateScroll, boolean recognize) {
+		if (fret >= MIN_FRET && fret <= MAX_FRET) {
+			this.fret = fret;
+		}
+		
+		if (updateScroll) {
+			this.composite.getVerticalBar().setSelection(this.fret);
+		}
+		
+		if(recognize){
+			this.dialog.getRecognizer().recognize(getChord(), true,false);
+		}
+	}
+	
+	public TGChord getChord() {
+		TGChord chord = TuxGuitar.instance().getSongManager().getFactory().newChord(this.strings.length);
+		chord.setName(this.chordName.getText());
+		chord.setFirstFret(this.fret);
+		for (int i = 0; i < chord.getStrings().length; i++) {
+			chord.addFretValue(i, getValue(i + 1));
+			//chord.setName(this.chordName.getText());
+		}
+		return chord;
+	}
+	
+	public void setChord(TGChord chord) {
+		if (chord != null) {
+			this.setFret((short)chord.getFirstFret());
+			for (int i = 0; i < chord.getStrings().length; i++) {
+				int fretValue = chord.getFretValue(i);
+				this.addValue(fretValue, i + 1/*, false*/);
+			}
+			
+			//SEE Comment on addValue.
+			//this.getChordName().setText(chord.getName() != null ? chord.getName() : this.dialog.getRecognizer().recognize(getChord(),true) );
+			
+			String name = chord.getName();
+			
+			this.dialog.getRecognizer().recognize(getChord(), (name == null), (name == null) );
+			
+			this.previewChord(chord);
+			
+			if(name != null){
+				this.setChordName( name );
+			}
+			
+			this.redraw();
+		}
+	}
+	
+	public short getMaxStrings() {
+		return this.maxStrings;
+	}
+	
+	public void setMaxStrings(short maxStrings) {
+		this.maxStrings = maxStrings;
+	}
+	
+	public int getWidth() {
+		return this.width;
+	}
+	
+	public int getHeight() {
+		return this.height;
+	}
+	
+	protected Composite getComposite(){
+		return this.composite;
+	}
+	
+	public Text getChordName() {
+		return this.chordName;
+	}
+	
+	public void setChordName(String chordName) {
+		this.chordName.setText(chordName);
+	}
+	
+	public void redraw() {
+		super.redraw();
+		this.composite.redraw();
+	}
+	
+	public void setCurrentTrack(TGTrack track) {
+		this.currentTrack = track;
+	}
+	
+	public TGTrack getCurrentTrack() {
+		return this.currentTrack;
+	}
+	
+	public void previewChord(final TGChord chord) {
+		
+		new Thread(new Runnable() {
+			public void run() {
+				int playedStrings = 0;
+				int stringCount = Math.min( getMaxStrings(), chord.countStrings() );
+				for (int i = 0; i < stringCount; i++) {
+					if (chord.getFretValue( i ) != -1) {
+						playedStrings ++;
+					}
+				}
+				int next = 0;
+				int[][] beat = new int[playedStrings][2];
+				for (int i = 0; i < stringCount; i++) {
+					int string = (stringCount - i);
+					int value = chord.getFretValue(string - 1);
+					if (value != -1) {
+						beat[next][0] = getCurrentTrack().getOffset() + getCurrentTrack().getString(string).getValue() + value;
+						beat[next][1] = TGVelocities.DEFAULT;
+						next ++;
+					}
+				}
+				
+				TGChannel channel = TuxGuitar.instance().getSongManager().getChannel(getCurrentTrack().getChannelId());
+				if( channel != null ){
+					TuxGuitar.instance().getPlayer().playBeat(
+						channel.getChannelId(),
+						channel.getBank(),
+						channel.getProgram(),
+						channel.getVolume(),
+						channel.getBalance(),
+						channel.getChorus(),
+						channel.getReverb(),
+						channel.getPhaser(),
+						channel.getTremolo(),
+						beat,
+						200,
+						200
+					);
+				}
+			}
+		}).start();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordList.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordList.java
new file mode 100644
index 0000000..624cb1d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordList.java
@@ -0,0 +1,257 @@
+/*
+
+
+ * Created on 02-ene-2006
+
+
+ *
+
+
+ * TODO To change the template for this generated file go to
+
+
+ * Window - Preferences - Java - Code Style - Code Templates
+
+
+ */
+
+package org.herac.tuxguitar.app.editors.chord;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGFontImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.control.TGChordImpl;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGString;
+/**
+ * @author julian
+ * 
+ * Component that shows the list of (alternative) chords - bottom of the screen
+ */
+public class ChordList extends Composite {
+	
+	private static final int MIN_HEIGHT = 160;
+	private static final int SCROLL_INCREMENT = 25;
+	private static final int CHORD_FIRST_FRET_SPACING = 12;
+	private static final int CHORD_STRING_SPACING = 8;
+	private static final int CHORD_FRET_SPACING = 10;
+	private static final int CHORD_NOTE_SIZE = 6;
+	
+	private ChordDialog dialog;
+	private TGBeat beat;
+	private List graphicChords;
+	private int height;
+	private TGChordImpl selectedChord;
+	private Composite composite;
+	private Font font;
+	
+	public ChordList(ChordDialog dialog,Composite parent,TGBeat beat) {
+		super(parent, SWT.NONE);
+		this.setLayout(dialog.gridLayout(1,false,0,0));
+		this.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.graphicChords = new ArrayList();
+		this.dialog = dialog;
+		this.beat = beat;
+		this.init();
+	}
+	
+	private void init(){
+		this.composite = new Composite(this,SWT.BORDER | SWT.V_SCROLL | SWT.DOUBLE_BUFFERED);
+		this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+		this.composite.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				TGPainterImpl painter = new TGPainterImpl(e.gc);
+				paintChords(painter);
+			}
+		});
+		this.composite.addMouseListener(new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				getComposite().setFocus();
+				getDialog().getEditor().setChord(getChord(e.x, e.y,true));
+				redraw();
+			}
+		});
+		
+		final Point origin = new Point(0, 0);
+		final ScrollBar vBar = this.composite.getVerticalBar();
+		vBar.setIncrement(SCROLL_INCREMENT);
+		vBar.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				int vSelection = vBar.getSelection();
+				int destY = -vSelection - origin.y;
+				Rectangle rect = getComposite().getBounds();
+				getShell().scroll(0, destY, 0, 0, rect.width, rect.height, false);
+				origin.y = -vSelection;
+				redraw();
+			}
+		});
+		
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumHeight = MIN_HEIGHT;
+		this.composite.setLayoutData(data);
+		this.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent arg0) {
+				disposeChords();
+				disposeFont();
+			}
+		});
+	}
+	
+	public void redraw(){
+		super.redraw();
+		this.composite.redraw();
+	}
+	
+	protected void paintChords(TGPainterImpl painter) {
+		int maxHeight = 0;
+		int fromX = 15;
+		int fromY = 10;
+		int vScroll = this.composite.getVerticalBar().getSelection();
+		Iterator it = this.graphicChords.iterator();
+		while (it.hasNext()) {
+			TGChordImpl chord = (TGChordImpl) it.next();
+			
+			TGColor color = new TGColorImpl(getChordColor(chord));
+			chord.setBackgroundColor(new TGColorImpl(this.composite.getBackground()));
+			chord.setColor(color);
+			chord.setNoteColor(color);
+			chord.setTonicColor(new TGColorImpl(getDisplay().getSystemColor(SWT.COLOR_DARK_RED)));
+			chord.setFirstFretSpacing(CHORD_FIRST_FRET_SPACING);
+			chord.setStringSpacing(CHORD_STRING_SPACING);
+			chord.setFretSpacing(CHORD_FRET_SPACING);
+			chord.setNoteSize(CHORD_NOTE_SIZE);
+			chord.setFirstFretFont(new TGFontImpl(getFont(painter.getGC())));
+			chord.setStyle(TGLayout.DISPLAY_CHORD_DIAGRAM);
+			chord.update(painter, true);
+			if(fromX + chord.getWidth() >= ((getBounds().x + getBounds().width) - 20)){
+				fromX = 15;
+				fromY += chord.getHeight() + 10;
+			}
+			chord.setEditing(true);
+			chord.setPosX( fromX );
+			chord.setPosY( fromY - vScroll);
+			chord.paint(painter,(chord.getWidth() / 2),0);
+			
+			fromX += chord.getWidth() + 10;
+			maxHeight = Math.max(maxHeight,chord.getHeight());
+		}
+		this.height = (fromY + maxHeight + 10);
+		this.updateScroll();
+	}
+	
+	private Color getChordColor(TGChordImpl chord){
+		if(this.selectedChord != null && this.selectedChord.equals(chord)){
+			return getDisplay().getSystemColor(SWT.COLOR_BLUE);
+		}
+		return getDisplay().getSystemColor(SWT.COLOR_BLACK);
+	}
+	
+	public void updateScroll(){
+		Rectangle rect = this.composite.getBounds();
+		Rectangle client = this.composite.getClientArea();
+		ScrollBar vBar = this.composite.getVerticalBar();
+		vBar.setMaximum(this.height);
+		vBar.setThumb(Math.min(rect.height, client.height));
+	}
+	
+	protected int getTrackString(int number){
+		TGString string = ChordList.this.beat.getMeasure().getTrack().getString(number);
+		return string.getValue();
+	}
+	
+	protected Font getFont(GC painter){
+		if(this.font == null || this.font.isDisposed()){ 
+			Font available = painter.getFont();
+			if(available == null || available.isDisposed()){
+				available = getDisplay().getSystemFont();
+			}
+			FontData[] datas = available.getFontData();
+			if(datas.length > 0){
+				this.font = new Font(getDisplay(),datas[0].getName(),Math.min(7,datas[0].getHeight()),SWT.BOLD);
+			}
+		}
+		return this.font;
+	}
+	
+	protected TGChordImpl getChord(int x, int y,boolean setAsSelected) {
+		Iterator it = this.graphicChords.iterator();
+		while (it.hasNext()) {
+			TGChordImpl chord = (TGChordImpl) it.next();
+			int x1 = chord.getPosX();
+			int x2 = x1 + chord.getWidth();
+			int y1 = chord.getPosY();
+			int y2 = y1 + chord.getHeight();
+			if (x > x1 && x < x2 && y > y1 && y < y2) {
+				if(setAsSelected){
+					if(this.selectedChord != null){
+						this.selectedChord.dispose();
+					}
+					this.selectedChord = chord;
+					chord.dispose();
+				}
+				return chord;
+			}
+		}
+		return null;
+	}
+	
+	public void setChords(List chords) {
+		this.disposeChords();
+		this.selectedChord = null;
+		
+		Iterator it = chords.iterator();
+		while (it.hasNext()) {
+			TGChordImpl chord = (TGChordImpl) it.next();
+			chord.setTonic( ChordList.this.dialog.getSelector().getTonicList().getSelectionIndex() );
+			chord.setBeat(ChordList.this.beat);
+			this.graphicChords.add(chord);
+		}
+		this.redraw();
+	}
+	
+	public void disposeFont(){
+		if(this.font != null){
+			this.font.dispose();
+		}
+	}
+	
+	public void disposeChords(){
+		Iterator it = this.graphicChords.iterator();
+		while (it.hasNext()) {
+			((TGChordImpl) it.next()).dispose();
+		}
+		this.graphicChords.clear();
+	}
+	
+	protected Composite getComposite(){
+		return this.composite;
+	}
+	
+	protected ChordDialog getDialog(){
+		return this.dialog;
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordNamingConvention.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordNamingConvention.java
new file mode 100644
index 0000000..82d6731
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordNamingConvention.java
@@ -0,0 +1,94 @@
+package org.herac.tuxguitar.app.editors.chord;
+
+/**
+ * Creates a chord name String out of given parameters
+ * @author Nikola Kolarovic
+ */
+public class ChordNamingConvention {
+	
+	/** generates the chord name out of selected items */
+	public String createChordName(int chordTonic,
+	                              int chordIndex,
+	                              int alteration,
+	                              int plusMinus,
+	                              boolean add,
+	                              int add5,
+	                              int add9,
+	                              int add11,
+	                              int bassTonic,
+	                              boolean sharp) {
+		
+		StringBuffer sb = new StringBuffer();
+		
+		sb.append(getTonic(chordTonic,sharp));
+		
+		//String chordName = ((ChordInfo)ChordCreatorUtil.getChordData().getChords().get(chordIndex)).getName();
+		String chordName = ChordDatabase.get(chordIndex).getName();
+		if (!chordName.equals("M"))
+			sb.append(chordName);
+		
+		if (add)
+			sb.append("add");
+		
+		// TODO: ALTERATION
+		if (alteration!=0) {
+			char lastChar = sb.toString().charAt(sb.toString().length()-1);
+			// if chord name ends with a number then add a backslash
+			if (lastChar>='0' && lastChar <='9')
+				sb.append("/");
+			
+			switch (alteration) {
+				case 1 : sb.append( getAdd("9",plusMinus));
+					break;
+				case 2 : sb.append( getAdd("11",plusMinus));
+					break;
+				case 3 : sb.append( getAdd("13",plusMinus));
+					break;
+			}
+			
+		}
+		
+		if (add5!=0)
+			sb.append("/").append(getAdd("5",add5));
+		if (add9!=0)
+			sb.append("/").append(getAdd("9",add9));
+		if (add11!=0)
+			sb.append("/").append(getAdd("11",add11));
+		
+		if (chordTonic!=bassTonic) {
+			sb.append(" \\");
+			sb.append(getTonic(bassTonic,sharp));
+		}
+		return sb.toString();
+	}
+	
+	/** tonic marks */
+	public String getTonic(int chordTonic, boolean sharp) {
+		String retVal;
+		switch(chordTonic) {
+			case 0 : retVal="C"; break;
+			case 1 : retVal= sharp ? "C#" : "Db"; break;
+			case 2 : retVal="D"; break;
+			case 3 : retVal= sharp ? "D#" : "Eb"; break;
+			case 4 : retVal="E"; break;
+			case 5 : retVal="F"; break;
+			case 6 : retVal= sharp ? "F#" : "Gb"; break;
+			case 7 : retVal="G"; break;
+			case 8 : retVal= sharp ? "G#" : "Ab"; break;
+			case 9 : retVal="A"; break;
+			case 10 : retVal= sharp ? "A#" : "Bb"; break;
+			default : retVal="B"; break;
+		}
+		return retVal;
+	}
+	
+	/** adds + or - to an add chord String */
+	private String getAdd(String number, int selectionIndex) {
+		StringBuffer retVal=new StringBuffer(number);
+		switch(selectionIndex) {
+			case 1 : retVal.append("+"); break;
+			case 2 : retVal.append("-"); break;
+		}
+		return retVal.toString();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordRecognizer.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordRecognizer.java
new file mode 100644
index 0000000..ae6db5e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordRecognizer.java
@@ -0,0 +1,659 @@
+package org.herac.tuxguitar.app.editors.chord;
+/* Created on 05-March-2007
+*/
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.List;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author Nikola Kolarovic
+ * 
+ */
+public class ChordRecognizer extends Composite {
+	
+	// index for parameter array
+	protected static final int TONIC_INDEX = 0;
+	protected static final int CHORD_INDEX = 1;
+	protected static final int ALTERATION_INDEX = 2;
+	protected static final int PLUSMINUS_INDEX = 3;
+	protected static final int BASS_INDEX = 4;
+	protected static final int ADDCHK_INDEX = 5;
+	protected static final int I5_INDEX = 6;
+	protected static final int I9_INDEX = 7;
+	protected static final int I11_INDEX = 8;
+	
+	private ChordDialog dialog;
+	private List proposalList;
+	private java.util.List proposalParameters;
+	
+	// this var keep a control to running threads.
+	private long runningProcess;
+	
+	public ChordRecognizer(ChordDialog dialog, Composite parent,int style) {
+		super(parent,style);
+		this.setLayout(dialog.gridLayout(1,false,0,0));
+		this.setLayoutData(makeGridData());
+		this.runningProcess = 0;
+		this.dialog = dialog;
+		this.init();
+	}
+	
+	public GridData makeGridData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 180;
+		return data;
+	}
+	
+	public void init(){
+		Composite composite = new Composite(this,SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.proposalParameters = new ArrayList();
+		
+		this.proposalList = new List(composite,SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+		this.proposalList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.proposalList.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(getDialog().getEditor() != null){
+					showChord(getProposalList().getSelectionIndex());
+				}
+			}
+		});
+		
+	}
+	
+	/** sets the current chord to be selected proposal */
+	protected void showChord(int index) {
+		int[] params = (int[])this.proposalParameters.get(index);
+		this.dialog.getSelector().adjustWidgets(params[TONIC_INDEX],
+		                                        params[CHORD_INDEX],
+		                                        params[ALTERATION_INDEX],
+		                                        params[BASS_INDEX],
+		                                        params[PLUSMINUS_INDEX],
+		                                        params[ADDCHK_INDEX],
+		                                        params[I5_INDEX],
+		                                        params[I9_INDEX],
+		                                        params[I11_INDEX]);
+		String chordName = this.proposalList.getItem(index);
+		chordName = chordName.substring(0, chordName.indexOf('(')-1);
+		this.dialog.getEditor().getChordName().setText(chordName);
+		this.dialog.getEditor().redraw();
+	}
+	
+	/**
+	 * - Recognizes the chord string
+	 * - Fills the component's list with alternative names
+	 * - Sets all the ChordSelector fields into recognized chord (tonic, bass, chord, alterations)
+	 * - Makes the alternatives and puts them into ChordList
+	 * - Writes the chord formula into appropriate label
+	 *  @param chord chord structure (frets, strings)
+	 *  @param redecorate is the Chord Editor in editing mode, or it is just changed by ChordSelector
+	 */
+	
+	public void recognize(final TGChord chord,final boolean redecorate,final boolean setChordName) {
+		
+		final long processId = (++ this.runningProcess);
+		final boolean sharp = this.dialog.getSelector().getSharpButton().getSelection();
+		
+		this.clearProposals();
+		
+		new Thread( new Runnable() {
+			public void run() throws TGException {
+				if(!getDialog().isDisposed() && isValidProcess(processId)){
+					
+					final int params[] = makeProposals(processId, chord,sharp);
+					
+					if (params == null) { // could not recognize anything!?
+						if (isValidProcess(processId) && setChordName) {
+							try {
+								TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+									public void run() throws TGException {
+										if(!getDialog().isDisposed() && isValidProcess(processId)){
+											getDialog().getEditor().setChordName("");
+										}
+									}
+								});
+							} catch (Throwable e) {
+								e.printStackTrace();
+							}
+						}
+						return;
+					}
+					
+					final String chordName = getChordName(params,sharp);
+					
+					// Sets all the ChordSelector fields into recognized chord (tonic, bass, chord, alterations)
+					if (isValidProcess(processId) && redecorate) {
+						try {
+							TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+								public void run() throws TGException {
+									if(!getDialog().isDisposed()){
+										redecorate(params);
+									}
+								}
+							});
+						} catch (Throwable e) {
+							e.printStackTrace();
+						}
+					}
+					
+					if (isValidProcess(processId) && setChordName) {
+						try {
+							TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+								public void run() throws TGException {
+									if(!getDialog().isDisposed()){
+										getDialog().getEditor().setChordName( (chordName != null ? chordName : "" ) );
+									}
+								}
+							});
+						} catch (Throwable e) {
+							e.printStackTrace();
+						}
+					}
+				}
+			}
+		} ).start();
+	}
+	
+	/** Fills the component's list with alternative names
+	 * @param chord TGChord to be recognized
+	 * @return parameters for adjustWidgets and getChordName methods 
+	 */
+	protected int[] makeProposals(final long processId, TGChord chord,final boolean sharp) {
+		
+		int[] tuning = this.dialog.getSelector().getTuning();
+		java.util.List notesInside = new ArrayList();
+		
+		// find and put in all the distinct notes
+		for (int i=0; i<tuning.length; i++) {
+			int fret = chord.getStrings()[i];
+			if (fret!=-1) {
+				Integer note = new Integer((tuning[tuning.length-1-i] + fret) % 12);
+				Iterator it = notesInside.iterator();
+				boolean found=false;
+				while (it.hasNext())
+					if (it.next().equals(note))
+						found=true;
+				if (!found)
+					notesInside.add(note);
+			}
+		}
+		
+		// Now search:
+		// go through all the possible tonics
+		// it is required because tonic isn't mandatory in a chord
+		java.util.List allProposals = new ArrayList(10);
+		
+		for (int tonic=0; tonic<12; tonic++) {
+			
+			Proposal currentProp = null;
+			
+			// first check for the basic chord tones
+			for (int chordIndex = 0; chordIndex < ChordDatabase.length(); chordIndex ++) {
+				ChordDatabase.ChordInfo info = ChordDatabase.get(chordIndex);
+				
+				currentProp = new Proposal(notesInside);
+				// it is more unusual the more we go down the index
+				// except chords "5" and "m", they are quite usual :)
+				currentProp.unusualGrade-=(chordIndex!=ChordDatabase.length() && chordIndex!=4 ? 2*chordIndex : 0);
+				
+				//ChordDatabase.ChordInfo info = (ChordDatabase.ChordInfo)chordItr.next();
+				boolean foundNote = false;
+				for (int i=0; i<info.getRequiredNotes().length; i++) { // go through all the requred notes
+					Iterator nit = notesInside.iterator();
+					while (nit.hasNext()) // go through all the needed notes
+						if (((Integer)nit.next()).intValue() == (tonic+info.getRequiredNotes()[i]-1)%12) {
+							foundNote=true;
+							if (tonic+info.getRequiredNotes()[i]-1 == tonic)
+								currentProp.dontHaveGrade+=15; // this means penalty for not having tonic is -65
+							currentProp.foundNote(tonic+info.getRequiredNotes()[i]-1); // found a note in a chord
+						}
+					
+				}
+				// if something found, add it into a proposal if it's worth
+				if (foundNote) {
+					currentProp.params[TONIC_INDEX] = tonic;
+					currentProp.params[CHORD_INDEX] = chordIndex;//possibleChords.indexOf(info);
+					int foundNotesCount = currentProp.missingNotes.length-currentProp.missingCount;
+					
+					// it is worth if it is missing 1 essential note and/or fifth
+					if (!info.getName().startsWith("dim") && !info.getName().startsWith("aug"))
+						if (!currentProp.isFound(tonic+8-1)) {
+							
+							// hmmm. maybe it's altered fifth? Create a branch for it.
+							if (currentProp.isNeeded(tonic+7-1) || currentProp.isNeeded(tonic+9-1)) {
+								Proposal branchProp = (Proposal)currentProp.clone();
+								if (branchProp.isNeeded(tonic+9-1)) {
+									branchProp.params[I5_INDEX] = 1;
+									branchProp.foundNote(tonic+8);
+								}
+								else {
+									branchProp.params[I5_INDEX] = 2;
+									branchProp.foundNote(tonic+6);
+								}
+								branchProp.unusualGrade-=35;
+								if (foundNotesCount+1>=info.getRequiredNotes().length-1) {
+									branchProp.dontHaveGrade-=(info.getRequiredNotes().length-(foundNotesCount+1))*50;
+									allProposals.add(branchProp);
+								}
+								
+							}
+							else {
+								currentProp.params[I5_INDEX] = 0;
+								currentProp.dontHaveGrade+=30;
+							}
+						}
+					
+					currentProp.params[I5_INDEX] = 0;
+					if (foundNotesCount>=info.getRequiredNotes().length-1 ) {
+							currentProp.dontHaveGrade-=(info.getRequiredNotes().length-foundNotesCount)*50;
+							allProposals.add(currentProp);
+					}
+				}
+				currentProp=null;
+			}
+		}
+		
+		Iterator props = allProposals.iterator();
+		java.util.List unsortedProposals = new ArrayList(5);
+		while (props.hasNext()) {
+			// place the still missing alterations notes accordingly... bass also
+			///////////////////////////////////////////////////////////////
+			
+			final Proposal current = (Proposal)props.next();
+			
+			boolean bassIsOnlyInBass = true;
+			// ---------------- bass tone ----------------
+			for (int i=chord.getStrings().length-1; i>=0; i--) {
+				if (chord.getStrings()[i]!=-1) {
+					if (current.params[BASS_INDEX]==-1) {// if we still didn't determine bass
+						current.params[BASS_INDEX] = (tuning[tuning.length-1-i] + chord.getStrings()[i]) % 12;
+						if (current.params[BASS_INDEX]!=current.params[TONIC_INDEX])
+							current.unusualGrade-=20;
+					}
+					if (current.params[BASS_INDEX]==(tuning[tuning.length-1-i] + chord.getStrings()[i]) % 12 )
+						bassIsOnlyInBass=false; // if we stumbled upon bass tone again
+				}
+			}
+			
+			if (current.isNeeded(current.params[BASS_INDEX]) && bassIsOnlyInBass) {
+				   // do not mark as FOUND if bass is somewhere other than in bass only
+					current.foundNote(current.params[BASS_INDEX]);
+					current.unusualGrade-=20;
+			}
+			// <=11 means "not DIM or AUG or 5"
+			if (current.missingCount>0 && current.params[CHORD_INDEX]<=11) {
+				// ---------------- alteration tones ----------------
+				// determine seventh -->> 2 is HARDCODED!
+				int seventh;
+				if (current.params[CHORD_INDEX] == 2) seventh=current.params[TONIC_INDEX]+12-1; // plain 7
+						else seventh=current.params[TONIC_INDEX]+11-1; // b7
+				if (current.isExisting(seventh)) {
+					if (!current.isFound(seventh)) {
+						current.filled[3]=true;
+						current.foundNote(seventh);
+					}
+				}
+				for (int plusminus=0; plusminus<=2; plusminus++) {
+					for (int i=2; i>=0; i--)  // 13, 11, 9
+							if (current.isNeeded(current.params[TONIC_INDEX]+getAddNote(i, plusminus)) && !current.filled[i]) {
+								current.filled[i]=true;
+								current.plusminusValue[i]=plusminus;
+								if (plusminus!=0) 
+									current.unusualGrade-=15;
+								current.foundNote(current.params[TONIC_INDEX]+getAddNote(i, plusminus));
+							}
+					
+				}
+			}
+			
+			// fill in the list
+			///////////////////////////////////////////////////////////////
+			if (!(current.filled[3] && !(current.filled[0] || current.filled[1] || current.filled[2])) &&  // if just found seventh, cancel it
+					current.missingCount==0 && // we don't tollerate notes in chord that are not used in the ChordName
+					current.dontHaveGrade>-51) {
+						findChordLogic(current);
+						unsortedProposals.add(current);
+				}
+			
+		}
+		// first, sort by DontHaveGrade
+		shellsort(unsortedProposals,1);
+		
+		int cut=-1;
+		int howManyIncomplete = ChordSettings.instance().getIncompleteChords();
+		
+		for (int i=0; i<unsortedProposals.size() && cut==-1; i++) {
+			int prior = ((Proposal)unsortedProposals.get(i)).dontHaveGrade;
+			if (prior<0) 
+				cut=i+howManyIncomplete;
+		}
+		// cut the search
+		unsortedProposals=unsortedProposals.subList(0, (cut>0 && cut<unsortedProposals.size() ? cut : unsortedProposals.size()));
+		// sort by unusualGrade
+		shellsort(unsortedProposals,2);
+		
+		int firstNegative = 0;
+		for (int i=0; i<unsortedProposals.size(); i++) {
+			final Proposal current = (Proposal)unsortedProposals.get(i);
+			if (firstNegative==0 && current.unusualGrade<0) 
+				firstNegative=current.unusualGrade;
+			
+			if (current.unusualGrade > (firstNegative>=0 ? 0 : firstNegative)-60){
+				try {
+					TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+						public void run() throws TGException {
+							if(!getDialog().isDisposed() && isValidProcess(processId)){
+								addProposal(current.params, getChordName(current.params,sharp)+" ("+Math.round(100+current.dontHaveGrade*7/10)+"%)" );
+							}
+						}
+					});
+				} catch (Throwable e) {
+					e.printStackTrace();
+				}
+			}
+		}
+		if (this.proposalParameters.size()==0)
+			return null;
+		return (int[])this.proposalParameters.get(0);
+	}
+	
+	/** adjusts widgets on the Recognizer combo */
+	protected void redecorate(int params[]){
+		this.dialog.getSelector().adjustWidgets(params[TONIC_INDEX],
+		                                        params[CHORD_INDEX],
+		                                        params[ALTERATION_INDEX],
+		                                        params[BASS_INDEX],
+		                                        params[PLUSMINUS_INDEX],
+		                                        params[ADDCHK_INDEX],
+		                                        params[I5_INDEX],
+		                                        params[I9_INDEX],
+		                                        params[I11_INDEX]);
+	}
+	
+	/** Assembles chord name according to ChordNamingConvention */
+	protected String getChordName(int[] param, boolean sharp) {
+		return new ChordNamingConvention().createChordName(param[TONIC_INDEX],
+		                                                   param[CHORD_INDEX],
+		                                                   param[ALTERATION_INDEX],
+		                                                   param[PLUSMINUS_INDEX],
+		                                                   param[ADDCHK_INDEX] != 0,
+		                                                   param[I5_INDEX],
+		                                                   param[I9_INDEX],
+		                                                   param[I11_INDEX],
+		                                                   param[BASS_INDEX],
+		                                                   sharp);
+	}
+	
+	/** Return required interval in semitones for add type and +- modificator
+	 * @param type 0=add9, 1=add11, 2=add13
+	 * @param selectionIndex 0=usual, 1="+", 2="-"
+	 */
+	protected int getAddNote(int type, int selectionIndex) {
+		
+		int wantedNote = 0;
+		
+		switch (type) {
+			case 0:
+				wantedNote = 3; // add9
+				break;
+			case 1:
+				wantedNote = 6; // add11
+				break;
+			case 2:
+				wantedNote = 10; // add13
+				break;
+		}
+		
+		switch (selectionIndex) {
+			case 1:
+				wantedNote++;
+				break;
+			case 2:
+				wantedNote--;
+				break;
+			default:
+				break;
+		}
+		
+		return --wantedNote;
+		
+	}
+	
+	void findChordLogic(Proposal current) {
+		boolean[] found = current.filled;
+		int[] plusMinus = current.plusminusValue;
+		/*if (!found[3])
+			current.unusualGrade-=50;*/
+		current.params[ALTERATION_INDEX]=0;
+		current.params[I9_INDEX]=plusMinus[0];
+		current.params[I11_INDEX]=plusMinus[1];
+		current.params[ADDCHK_INDEX]=0;
+		current.params[PLUSMINUS_INDEX]=0;
+		
+		if (found[2]) { // -------------- 13
+			current.params[ALTERATION_INDEX]=3;
+			current.params[PLUSMINUS_INDEX]=plusMinus[2];
+			if (!found[1] || !found[0] || !found[3]) { // b7 or 9 or 11 not inside
+				current.unusualGrade-=10;
+				if (!found[1] && !found[0] && !found[3])
+					current.params[ADDCHK_INDEX]=1;
+				else { // just penalty if something's missing
+					if (!found[3]) // don't-have penalty if seventh is missing
+						current.dontHaveGrade-=25;
+					if (!found[1]) { // if 9 or 11 is missing, it is more unusual
+						current.unusualGrade-=30;
+						current.dontHaveGrade-=10;
+					}
+					if (!found[0]) {
+						current.unusualGrade-=30;
+						current.dontHaveGrade-=10;
+					}
+				}
+			}
+		}
+		else
+			if (found[1]) { // -------------- 11
+				current.params[ALTERATION_INDEX]=2;
+				current.params[PLUSMINUS_INDEX]=plusMinus[1];
+				current.params[I11_INDEX]=0;
+				current.unusualGrade-=10;
+				
+				if (!found[0] || !found[3]) { // b7 or 9 not inside
+					if (!found[0] && !found[3])
+						current.params[ADDCHK_INDEX]=1;
+					else{
+						if (!found[3])
+							current.dontHaveGrade-=25;
+						if (!found[0]) {
+							current.unusualGrade-=30;
+							current.dontHaveGrade-=10;
+						}
+					}
+				}
+			}
+			else 
+				if (found[0]) { // 9
+					current.params[ALTERATION_INDEX]=1;
+					current.params[I9_INDEX]=0;
+					current.params[I11_INDEX]=0;
+					current.params[PLUSMINUS_INDEX]=plusMinus[0];
+					current.unusualGrade-=10;
+					if (!found[3])
+						current.params[ADDCHK_INDEX]=1;
+					
+				}
+	}
+	
+	/**
+	 * Shellsort, using a sequence suggested by Gonnet.
+	 * -- a little adopted
+	 * @param a List of Proposals, unsorted
+	 * @param sortIndex 1 to sort by don'tHaveGrade, 2 to sort by unusualGrade
+	 * @return sorted list by selected criteria
+	 */
+	public void shellsort( java.util.List a, int sortIndex ){
+		int length = a.size();
+		for( int gap = length / 2; gap > 0;
+					 gap = gap == 2 ? 1 : (int) ( gap / 2.2 ) )
+			for( int i = gap; i < length; i++ ){
+				Proposal tmp = (Proposal)a.get(i);
+				int j = i;
+				
+				for( ; j >= gap && 
+				(  sortIndex == 1 ?
+				tmp.dontHaveGrade > ((Proposal)a.get(j - gap)).dontHaveGrade :
+				tmp.unusualGrade > ((Proposal)a.get(j - gap)).unusualGrade  )
+				; 
+				j -= gap )
+					a.set(j, a.get(j - gap));
+				a.set( j , tmp);
+			}
+	}
+	
+	protected void addProposal(int[] params, String name){
+		this.proposalParameters.add(params);
+		this.proposalList.add(name);
+	}
+	
+	protected void clearProposals(){
+		this.proposalList.removeAll();
+		this.proposalParameters.clear();
+	}
+	
+	protected ChordDialog getDialog(){
+		return this.dialog;
+	}
+	
+	protected List getProposalList(){
+		return this.proposalList;
+	}
+	
+	protected boolean isValidProcess(long processId){
+		return (this.runningProcess == processId);
+	}
+	
+	protected class Proposal implements Cloneable{
+		int[] params;
+		
+		/** grade for chord "unusualness" - Cm is less unusual than E7/9+/C */
+		int unusualGrade = 0;
+		/** penalty for notes that chord doesn't have */
+		int dontHaveGrade = -15;
+		
+		/** counts the notes that are in chord but still not recognized */
+		int missingCount;
+		int[] missingNotes;
+		
+		boolean filled[]={false,false,false,false};
+		int plusminusValue[]={0,0,0};
+		
+		private Proposal() {
+			super();
+			this.params = new int[9];
+			for (int i=0; i<9; i++)
+				this.params[i]=-1;
+		}
+		
+		/** initialize with needed notes */
+		public Proposal(java.util.List notes) {
+			this.params = new int[9];
+			for (int i=0; i<9; i++)
+				this.params[i]=-1;
+			
+			int length = notes.size();
+			this.missingNotes = new int[length];
+			for (int i = 0; i< length; i++){ // deep copy, because of clone() method
+				this.missingNotes[i] = ((Integer)notes.get(i)).intValue();
+			}
+			this.missingCount = length;
+		}
+		
+		/** if note is found, mark it as found in the Missing array*/
+		void foundNote(int value) {
+			int note = (value % 12);
+			if (this.missingCount!=0)
+				for (int i=0; i<this.missingCount; i++)
+					if (this.missingNotes[i] == note) {
+						// put the found one on the end, switch positions
+						this.missingCount--;
+						int temp = this.missingNotes[i]; 
+						this.missingNotes[i]=this.missingNotes[this.missingCount];
+						this.missingNotes[this.missingCount]=temp;
+						return;
+					}
+		}
+		
+		/** is note already found? */
+		boolean isFound(int value) {
+			int note = (value % 12);
+			for (int i=this.missingCount; i<this.missingNotes.length; i++)
+				if (this.missingNotes[i] == note)
+					return true;
+			return false;
+		}
+		
+		/** is note required to be found? */
+		boolean isNeeded(int value) {
+			int note = (value % 12);
+			if (this.missingCount!=0)
+				for (int i=0; i<this.missingCount; i++)
+					if (this.missingNotes[i] == note)
+						return true;
+			return false;
+		}
+		
+		/** does note exist in a chord? (found or not found) */
+		boolean isExisting(int value) {
+			int note = (value % 12);
+			for (int i=0; i<this.missingNotes.length; i++)
+				if (this.missingNotes[i] == note)
+					return true;
+			return false;
+		}
+		
+		/** calls the Object.clone() method, since it is private (?!!??) */
+		public Object clone() {
+			Proposal proposal = new Proposal();
+			for (int i=0; i<9; i++)
+				proposal.params[i] = this.params[i];
+			proposal.unusualGrade = this.unusualGrade;
+			proposal.dontHaveGrade = this.dontHaveGrade;
+			proposal.missingCount = this.missingCount;
+			proposal.missingNotes = new int[this.missingNotes.length];
+			for(int i = 0; i < proposal.missingNotes.length; i ++){
+				proposal.missingNotes[i] = this.missingNotes[i];
+			}
+			proposal.filled = new boolean[this.filled.length];
+			for (int i=0; i<proposal.filled.length; i++)
+				proposal.filled[i] = this.filled[i];
+			
+			proposal.plusminusValue = new int[this.plusminusValue.length];
+			for (int i=0; i<proposal.plusminusValue.length; i++)
+				proposal.plusminusValue[i] = this.plusminusValue[i];
+			
+			return proposal;
+		}
+		
+		public boolean equals(Object o) {
+			Proposal another = (Proposal)o;
+			for (int i=0; i<9; i++)
+				if (this.params[i]!=another.params[i])
+					return false;
+			// not all attributes, but the rest is not needed YET!
+			return true;
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordSelector.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordSelector.java
new file mode 100644
index 0000000..baed614
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordSelector.java
@@ -0,0 +1,535 @@
+/*
+ * Created on 02-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.chord;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.util.TGMusicKeyUtils;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ * @author Nikola Kolarovic
+ *
+ *    WIDGET SET that allows complex chord choosing<br>
+ *    Chord theory according to <a href="http://www.jazzguitar.be/quick_crd_ref.html">http://www.jazzguitar.be/quick_crd_ref.html</a>.
+ */
+public class ChordSelector extends Composite{
+	
+	public static final String[][] KEY_NAMES = new String[][]{
+		TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_CHORD),
+		TGMusicKeyUtils.getFlatKeyNames(TGMusicKeyUtils.PREFIX_CHORD),
+	};
+	
+	private ChordDialog dialog;
+	private int[] tuning;
+	private List tonicList;
+	private List chordList;
+	private List alterationList;
+	private Button sharpButton;
+	private Button flatButton;
+	private Combo bassCombo;
+	private Button addCheck;
+	private List plusMinusList;
+	private List _5List;
+	private List _9List;
+	private List _11List;
+	
+	private boolean refresh;
+	
+	public ChordSelector(ChordDialog dialog,Composite parent,int style,int[] tuning) {
+		super(parent,style);
+		this.setLayout(new GridLayout(3,false));
+		this.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.dialog = dialog;
+		this.tuning = tuning;
+		
+		this.refresh = true;
+		this.init();
+	}
+	
+	
+	public void init(){
+		Composite tonicComposite = new Composite(this,SWT.NONE);
+		tonicComposite.setLayout(this.dialog.gridLayout(1,false,0,0));
+		tonicComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.tonicList = new List(tonicComposite,SWT.BORDER);
+		this.tonicList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		// sharp & flat buttons
+		Composite buttonsComposite = new Composite(tonicComposite,SWT.NONE);
+		buttonsComposite.setLayout(this.dialog.gridLayout(2,true,0,0));
+		GridData buttonGd = new GridData(SWT.FILL,SWT.TOP,true,false);
+		buttonGd.heightHint = 28;
+		buttonGd.widthHint = 28;
+		this.sharpButton = new Button(buttonsComposite,SWT.TOGGLE);
+		this.sharpButton.setLayoutData(buttonGd);
+		this.flatButton = new Button(buttonsComposite,SWT.TOGGLE);
+		this.flatButton.setLayoutData(buttonGd);
+		// TODO: maybe put an image instead of #,b
+		this.sharpButton.setText("#");
+		this.flatButton.setText("b");
+		this.chordList = new List(this,SWT.BORDER);
+		this.chordList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Label separator = new Label(tonicComposite,SWT.SEPARATOR | SWT.HORIZONTAL);
+		separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
+		Button customizeButton = new Button(tonicComposite,SWT.PUSH);
+		customizeButton.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
+		customizeButton.setText(TuxGuitar.getProperty("settings"));
+		
+		customizeButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(new ChordSettingsDialog().open(ChordSelector.this.getShell())){
+					new SyncThread(new Runnable() {
+						public void run() throws TGException {
+							ChordSelector.this.showChord();
+							getChordList().redraw();
+						}
+					}).start();
+				}
+			}
+		});
+		
+		
+		initChordWidgets();
+		
+		// fill the List widgets with text
+		insertTonicNames(true);
+		
+		for(int i = 0 ; i < ChordDatabase.length(); i ++) {
+			this.chordList.add( ChordDatabase.get(i).getName() );
+		}
+		/*
+		Iterator chordInfo = ChordCreatorUtil.getChordData().getChords().iterator();
+		while(chordInfo.hasNext()) {
+			this.chordList.add( ((ChordDatabase.ChordInfo)chordInfo.next()).getName() );
+		}
+		*/
+		
+		this.chordList.setSelection(0);
+		
+		String[] alterationNames = getAlterationNames();
+		for(int i = 0;i < alterationNames.length;i++){
+			this.alterationList.add(alterationNames[i]);
+		}
+		this.alterationList.setSelection(0);
+		
+		String[] plusMinus = this.getPlusMinus("");
+		for(int i = 0;i < plusMinus.length;i++){
+			this.plusMinusList.add(plusMinus[i]);
+		}
+		this.plusMinusList.setSelection(0);
+		
+		String[] plus5Minus = this.getPlusMinus("/5");
+		for(int i = 0;i < plus5Minus.length;i++){
+			this._5List.add(plus5Minus[i]);
+		}
+		this._5List.setSelection(0);
+		String[] plus9Minus = this.getPlusMinus("/9");
+		for(int i = 0;i < plus9Minus.length;i++){
+			this._9List.add(plus9Minus[i]);
+		}
+		this._9List.setSelection(0);
+		String[] plus11Minus = this.getPlusMinus("/11");
+		for(int i = 0;i < plus11Minus.length;i++){
+			this._11List.add(plus11Minus[i]);
+		}
+		this._11List.setSelection(0);
+		
+		// LISTENERS
+		
+		this.tonicList.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if (ChordSelector.this.getRefresh()) {
+					if(getDialog().getEditor() != null && getDialog().getList() != null){
+						getBassCombo().select(getTonicList().getSelectionIndex());
+						showChord();
+					}
+				}
+			}
+		});
+		
+		this.bassCombo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if (ChordSelector.this.getRefresh()) {
+					if(getDialog().getEditor() != null && getDialog().getList() != null){
+						showChord();
+					}
+				}
+			}
+		});
+		
+		this.chordList.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(getDialog().getEditor() != null && getDialog().getList() != null){
+					adjustWidgetAvailability();
+					if (ChordSelector.this.getRefresh()) {
+						showChord();
+					}
+				}
+			}
+		});
+		
+		this.alterationList.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(getDialog().getEditor() != null && getDialog().getList() != null){
+					ChordSelector.this.adjustWidgetAvailability();
+					if (ChordSelector.this.getRefresh()) {
+						showChord();
+					}
+				}
+			}
+		});
+		
+		this.addCheck.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(getDialog().getEditor() != null && getDialog().getList() != null){
+					
+					ChordSelector.this.adjustWidgetAvailability();
+					/*
+					if (getAddCheck().getSelection()) {
+						updateWidget(get_9List(), false);
+						updateWidget(get_11List(), false);
+					}
+					*/
+					if (ChordSelector.this.getRefresh()) {
+						showChord();
+						//ChordSelector.this.dialog.getList().redraw();
+					}
+				}
+				
+			}
+		});
+		
+		this._5List.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(getDialog().getEditor() != null && getDialog().getList() != null){
+					if (ChordSelector.this.getRefresh()) {
+						showChord();
+					}
+				}
+			}
+		});
+		
+		this._9List.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(getDialog().getEditor() != null && getDialog().getList() != null){
+					if (ChordSelector.this.getRefresh()) {
+						showChord();
+					}
+				}
+			}
+		});
+		
+		this._11List.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(getDialog().getEditor() != null && getDialog().getList() != null){
+					if (ChordSelector.this.getRefresh()) {
+						showChord();
+					}
+				}
+			}
+		});
+		
+		this.plusMinusList.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(getDialog().getEditor() != null && getDialog().getList() != null){
+					if (ChordSelector.this.getRefresh()) {
+						showChord();
+						//ChordSelector.this.dialog.getList().redraw();
+					}
+				}
+			}
+		});
+		
+		this.sharpButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				insertTonicNames(true);
+			}
+		});
+		
+		this.flatButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				insertTonicNames(false);
+			}
+		});
+		this.adjustWidgetAvailability();
+	}
+	
+	protected void initChordWidgets() {
+		Composite alterationComposite = new Composite(this,SWT.NONE);
+		alterationComposite.setLayout(this.dialog.gridLayout(1,true,0,0));
+		alterationComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		Composite aboveComposite = new Composite(alterationComposite,SWT.NONE);
+		aboveComposite.setLayout(this.dialog.gridLayout(2,true,0,0));
+		aboveComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		Composite firstComposite = new Composite(aboveComposite,SWT.NONE);
+		firstComposite.setLayout(this.dialog.gridLayout(1,false,0,0));
+		firstComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.alterationList = new List(firstComposite,SWT.BORDER);
+		this.alterationList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.plusMinusList = new List(firstComposite,SWT.BORDER);
+		this.plusMinusList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite secondComposite = new Composite(aboveComposite,SWT.NONE);
+		secondComposite.setLayout(this.dialog.gridLayout(1,false,0,0));
+		secondComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this._5List = new List(secondComposite,SWT.BORDER);
+		this._5List.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this._9List = new List(secondComposite,SWT.BORDER);
+		this._9List.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this._11List = new List(secondComposite,SWT.BORDER);
+		this._11List.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite bassComposite = new Composite(alterationComposite,SWT.NONE);
+		bassComposite.setLayout(this.dialog.gridLayout(1,true,0,0));
+		bassComposite.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
+		this.addCheck = new Button(bassComposite, SWT.CHECK | SWT.LEFT);
+		this.addCheck.setText("add");
+		//this.addCheck.setSelection(false);
+		//this.addCheck.setEnabled(false);
+		this.addCheck.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
+		
+		Label separator = new Label(bassComposite,SWT.SEPARATOR | SWT.HORIZONTAL );
+		separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
+		
+		Label bText = new Label(bassComposite,SWT.LEFT);
+		bText.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
+		bText.setText(TuxGuitar.getProperty("chord.bass"));
+		this.bassCombo = new Combo(bassComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.bassCombo.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
+	}
+	
+	protected void insertTonicNames(boolean sharp){
+		
+		String[] names = KEY_NAMES[ sharp?0:1 ];
+		
+		// update the buttons
+		this.flatButton.setSelection(!sharp);
+		this.sharpButton.setSelection(sharp);
+		// keep the old position
+		int indexL = this.tonicList.getSelectionIndex();
+		if (indexL==-1) indexL=0;
+		int indexC = this.bassCombo.getSelectionIndex();
+		if (indexC==-1) indexC=0;
+		
+		// update the list
+		this.tonicList.removeAll();
+		this.bassCombo.removeAll();
+		for(int i = 0;i < names.length;i++){
+			this.tonicList.add(names[i]);
+			this.bassCombo.add(names[i]);
+		}
+		this.tonicList.setSelection(indexL);
+		this.bassCombo.select(indexC);
+	}
+	
+	private String[] getPlusMinus(String text){
+		String[] names = new String[3];
+		
+		names[0] = " ";
+		names[1] = text+"+";
+		names[2] = text+"-";
+		
+		return names;
+	}
+	
+	private String[] getAlterationNames(){
+		String[] names = new String[4];
+		
+		names[0] = " ";
+		names[1] = "9";
+		names[2] = "11";
+		names[3] = "13";
+		
+		return names;
+	}
+	
+	protected void showChord(){
+		TuxGuitar.instance().loadCursor(getShell(),SWT.CURSOR_WAIT);
+		ChordCreatorListener listener = new ChordCreatorListener() {
+			public void notifyChords(final ChordCreatorUtil instance,final java.util.List chords) {
+				try {
+					TGSynchronizer.instance().execute(new TGSynchronizer.TGRunnable() {
+						public void run() throws TGException {
+							if(instance.isValidProcess() && !getDialog().isDisposed()){
+								getDialog().getList().setChords(chords);
+								TuxGuitar.instance().loadCursor(getShell(),SWT.CURSOR_ARROW);
+							}
+						}
+					});
+				} catch (Throwable e) {
+					e.printStackTrace();
+				}
+			}
+		};
+		
+		ChordCreatorUtil.getChords(listener,
+		                           this.tuning,
+		                           this.chordList.getSelectionIndex(),
+		                           this.alterationList.getSelectionIndex(),
+		                           this.plusMinusList.getSelectionIndex(),
+		                           this.addCheck.getSelection(),
+		                           this._5List.getSelectionIndex(),
+		                           this._9List.getSelectionIndex(),
+		                           this._11List.getSelectionIndex(),
+		                           this.bassCombo.getSelectionIndex(),
+		                           this.tonicList.getSelectionIndex(),
+		                           this.sharpButton.getSelection());
+	}
+	
+	protected void updateWidget(List widget, boolean enabled) {
+		widget.setEnabled(enabled);
+		if(!enabled){
+			widget.setSelection(0);
+		}
+	}
+	
+	protected void updateWidget(Button widget, boolean enabled) {
+		widget.setEnabled(enabled);
+		if(!enabled){
+			widget.setSelection(false);
+		}
+	}
+	
+	/**
+	 * Sets all the widgets' fields into recognized chord 
+	 * (tonic, bass, chord, alterations)
+	 */
+	public void adjustWidgets(int tonic, int chordBasic, int alteration, int bass, int plusMinus, int addBoolean, int index5, int index9, int index11) {
+		this.setRefresh(false);
+		// adjust widgets
+		this.tonicList.setSelection(tonic);
+		this.alterationList.setSelection(alteration);
+		this.bassCombo.select(bass);
+		this.plusMinusList.setSelection(plusMinus);
+		this.addCheck.setSelection(addBoolean != 0);
+		this._5List.setSelection(index5);
+		this._9List.setSelection(index9);
+		this._11List.setSelection(index11);
+		this.chordList.setSelection(chordBasic);
+		this.adjustWidgetAvailability();
+		this.setRefresh(true);
+		this.showChord();
+	}
+	
+	/**
+	 * adjusts the widgets availability according to chord theory options
+	 */
+	protected void adjustWidgetAvailability() {
+		String chordName = ChordDatabase.get(getChordList().getSelectionIndex()).getName();
+		if (chordName.equals("dim") || chordName.equals("dim7") || chordName.equals("aug") || chordName.equals("5") ) {
+			updateWidget(getAlterationList(),false);
+			updateWidget(getAddCheck(),false);
+			updateWidget(get_9List(),false);
+			updateWidget(get_11List(),false);
+			updateWidget(getPlusMinusList(),false);
+			
+			if (!chordName.equals("5")){
+				updateWidget(get_5List(),false);//disableWidget(get_5List());
+			}else{
+				updateWidget(get_5List(),true);
+			}
+		}
+		else {
+			// enable and don't change the selection index
+			//getAlterationList().setEnabled(true);
+			//get_5List().setEnabled(true);
+			updateWidget(getAlterationList(),true);
+			updateWidget(get_5List(),true);
+		}
+		
+		if(this.alterationList.isEnabled()){
+			int currentIndex = this.alterationList.getSelectionIndex();
+			// handle the +- list and ADD checkbox
+			// handle the 9 and 11 list
+			updateWidget(this.plusMinusList,(currentIndex > 0));
+			updateWidget(this.addCheck,(currentIndex > 0));
+			updateWidget(this._9List, (currentIndex >= 2 && !this.addCheck.getSelection() ) );
+			updateWidget(this._11List, (currentIndex >= 3 && !this.addCheck.getSelection() ) );
+		}
+	}
+	
+	public boolean getRefresh() {
+		return this.refresh;
+	}
+	
+	public void setRefresh(boolean refresh) {
+		this.refresh = refresh;
+	}
+	
+	public void setTuning(int[] tuning){
+		this.tuning = tuning;
+	}
+	
+	public int[] getTuning(){
+		return this.tuning;
+	}
+	
+	protected ChordDialog getDialog() {
+		return this.dialog;
+	}
+	
+	protected List getTonicList() {
+		return this.tonicList;
+	}
+	
+	protected List getChordList() {
+		return this.chordList;
+	}
+	
+	protected List getAlterationList() {
+		return this.alterationList;
+	}
+	
+	protected Button getSharpButton() {
+		return this.sharpButton;
+	}
+	
+	protected Button getFlatButton() {
+		return this.flatButton;
+	}
+	
+	protected Combo getBassCombo() {
+		return this.bassCombo;
+	}
+	
+	protected Button getAddCheck() {
+		return this.addCheck;
+	}
+	
+	protected List getPlusMinusList() {
+		return this.plusMinusList;
+	}
+	
+	protected List get_5List() {
+		return this._5List;
+	}
+	
+	protected List get_9List() {
+		return this._9List;
+	}
+	
+	protected List get_11List() {
+		return this._11List;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordSettings.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordSettings.java
new file mode 100644
index 0000000..441b328
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordSettings.java
@@ -0,0 +1,171 @@
+package org.herac.tuxguitar.app.editors.chord;
+
+public class ChordSettings {
+	
+	private static ChordSettings instance;
+	
+	private boolean emptyStringChords;
+	private float bassGrade;
+	private float fingeringGrade;
+	private float subsequentGrade;
+	private float requiredBasicsGrade;
+	private float manyStringsGrade;
+	private float goodChordSemanticsGrade;
+	private int chordsToDisplay;
+	private int howManyIncompleteChords;
+	private int chordTypeIndex;
+	private int findChordsMin;
+	private int findChordsMax;
+	
+	private ChordSettings() {
+		this.emptyStringChords = false;
+		this.bassGrade = 200.0f;
+		this.fingeringGrade = 150.0f; // was:200
+		this.subsequentGrade = 200.0f;
+		this.requiredBasicsGrade = 150.0f;
+		this.manyStringsGrade = 100.0f;
+		this.goodChordSemanticsGrade = 200.0f;
+		this.chordsToDisplay = 30;
+		this.howManyIncompleteChords = 4;
+		this.chordTypeIndex = 0;
+		this.findChordsMin=0;
+		this.findChordsMax=15;
+	}
+	
+	public static ChordSettings instance(){
+		if( instance == null ){
+			instance = new ChordSettings();
+		}
+		return instance;
+	}
+	
+	public float getBassGrade() {
+		return this.bassGrade;
+	}
+	
+	public void setBassGrade(float bassGrade) {
+		this.bassGrade = bassGrade;
+	}
+	
+	public int getChordsToDisplay() {
+		return this.chordsToDisplay;
+	}
+	
+	public void setChordsToDisplay(int chordsToDisplay) {
+		this.chordsToDisplay = chordsToDisplay;
+	}
+	
+	public boolean isEmptyStringChords() {
+		return this.emptyStringChords;
+	}
+	
+	public void setEmptyStringChords(boolean emptyStringChords) {
+		this.emptyStringChords = emptyStringChords;
+	}
+	
+	public float getFingeringGrade() {
+		return this.fingeringGrade;
+	}
+	
+	public void setFingeringGrade(float fingeringGrade) {
+		this.fingeringGrade = fingeringGrade;
+	}
+	
+	public float getGoodChordSemanticsGrade() {
+		return this.goodChordSemanticsGrade;
+	}
+	
+	public void setGoodChordSemanticsGrade(float goodChordSemanticsGrade) {
+		this.goodChordSemanticsGrade = goodChordSemanticsGrade;
+	}
+	
+	public float getManyStringsGrade() {
+		return this.manyStringsGrade;
+	}
+	
+	public void setManyStringsGrade(float manyStringsGrade) {
+		this.manyStringsGrade = manyStringsGrade;
+	}
+	
+	public float getRequiredBasicsGrade() {
+		return this.requiredBasicsGrade;
+	}
+	
+	public void setRequiredBasicsGrade(float requiredBasicsGrade) {
+		this.requiredBasicsGrade = requiredBasicsGrade;
+	}
+	
+	public float getSubsequentGrade() {
+		return this.subsequentGrade;
+	}
+	
+	public void setSubsequentGrade(float subsequentGrade) {
+		this.subsequentGrade = subsequentGrade;
+	}
+	
+	public int getIncompleteChords() {
+		return this.howManyIncompleteChords;
+	}
+	
+	public void setIncompleteChords(int incomplete) {
+		this.howManyIncompleteChords = incomplete;
+	}
+	
+	public int getFindChordsMin() {
+		return this.findChordsMin;
+	}
+	
+	public void setFindChordsMin(int min) {
+		this.findChordsMin = min;
+	}
+	
+	public int getFindChordsMax() {
+		return this.findChordsMax;
+	}
+	
+	public void setFindChordsMax(int max) {
+		this.findChordsMax = max;
+	}
+	
+	public int getChordTypeIndex() {
+		return this.chordTypeIndex;
+	}
+	
+	public void setChordTypeIndex(int index) {
+		switch (index) {
+			case 0 : // normal
+					this.bassGrade = 200.0f;
+					this.fingeringGrade = 150.0f;
+					this.subsequentGrade = 200.0f;
+					this.requiredBasicsGrade = 150.0f;
+					this.manyStringsGrade = 100.0f;
+					this.goodChordSemanticsGrade = 200.0f;
+				    break;
+			case 1 : // inversions
+					this.bassGrade = -100.0f;
+					this.fingeringGrade = 150.0f;
+					this.subsequentGrade = 200.0f;
+					this.requiredBasicsGrade = 150.0f;
+					this.manyStringsGrade = 50.0f;
+					this.goodChordSemanticsGrade = 200.0f;
+					break;
+			case 2 : // close-voiced
+					this.bassGrade = 50.0f;
+					this.fingeringGrade = 200.0f;
+					this.subsequentGrade = 350.0f;
+					this.requiredBasicsGrade = 150.0f;
+					this.manyStringsGrade = -100.0f;
+					this.goodChordSemanticsGrade = 200.0f;
+					break;
+			case 3 : // open-voiced
+					this.bassGrade = 100.0f;
+					this.fingeringGrade = 100.0f;
+					this.subsequentGrade = -80.0f;
+					this.requiredBasicsGrade = 100.0f;
+					this.manyStringsGrade = -80.0f;
+					this.goodChordSemanticsGrade = 200.0f;
+					break;
+		}
+		this.chordTypeIndex = index;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordSettingsDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordSettingsDialog.java
new file mode 100644
index 0000000..e8703f3
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/ChordSettingsDialog.java
@@ -0,0 +1,195 @@
+package org.herac.tuxguitar.app.editors.chord;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+
+/**
+ * Dialog for customizing chord criteria parameters
+ * 
+ * @author Nikola Kolarovic
+ *
+ */
+public class ChordSettingsDialog {
+	
+	private boolean updated;
+	private Shell dialog;
+	private Button emptyStringChords = null;
+	private Spinner chordsToDisplay = null;
+	private Combo typeCombo = null;
+	private Spinner minFret = null;
+	private Spinner maxFret = null;
+	
+	public ChordSettingsDialog() {
+		super();
+	}
+	
+	public boolean open(Shell parent){
+		this.updated = false;
+		
+		this.dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setText(TuxGuitar.getProperty("settings"));
+		this.init();
+		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return this.updated;
+	}
+	
+	protected void init() {
+		Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout());
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setText(TuxGuitar.getProperty("chord.settings.tip"));
+		
+		Composite composite = new Composite(group,SWT.NONE);
+		composite.setLayout(new GridLayout(2,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		initTypeCombo(composite);
+		initChordsToDisplay(composite);
+		initEmptyStringChords(composite);
+		initFretSearch(composite);
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(this.dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dispose(true);
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dispose(false);
+			}
+		});
+		
+		this.dialog.setDefaultButton( buttonOK );
+	}
+	
+	private GridData getGridData(int minimumWidth, int minimumHeight){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = minimumWidth;
+		data.minimumHeight = minimumHeight;
+		return data;
+	}
+	
+	private GridData getGridData(){
+		return getGridData(125,0);
+	}
+	
+	private GridData getButtonData(){
+		return getGridData(80,25);
+	}
+	
+	private Spinner makeSpinner(Composite parent,String label,int value, int min, int max){
+		this.newLabel(parent,label);
+		Spinner spinner = new Spinner(parent,SWT.BORDER);
+		spinner.setMinimum(min);
+		spinner.setMaximum(max);
+		spinner.setSelection(value);
+		spinner.setLayoutData(getGridData());
+		return spinner;
+	}
+	
+	private Label newLabel(Composite parent,String text){
+		Label label = new Label(parent,SWT.HORIZONTAL);
+		label.setText(text);
+		return label;
+	}
+	
+	private void initTypeCombo(Composite parent) {
+		this.newLabel(parent, TuxGuitar.getProperty("chord.settings.type"));
+		this.typeCombo = new Combo(parent,SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.typeCombo.setLayoutData(getGridData());
+		this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.most-common"));
+		this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.inversions"));
+		this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.close-voiced"));
+		this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.open-voiced"));
+		this.typeCombo.select(ChordSettings.instance().getChordTypeIndex());
+	}
+	
+	private void initChordsToDisplay(Composite parent) {
+		this.chordsToDisplay = makeSpinner(parent,TuxGuitar.getProperty("chord.settings.chords-to-display"),ChordSettings.instance().getChordsToDisplay(),1,100);
+	}
+	
+	private void initEmptyStringChords(Composite parent) {
+		this.emptyStringChords = new Button(parent,SWT.CHECK);
+		this.emptyStringChords.setSelection(ChordSettings.instance().isEmptyStringChords());
+		this.emptyStringChords.setText(TuxGuitar.getProperty("chord.settings.open-chords"));
+		this.emptyStringChords.setSize(100,20);
+		this.emptyStringChords.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,2,1));
+	}
+	
+	private void initFretSearch(Composite parent) {
+		Group group = new Group(parent,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout(4,false));
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,2,1));
+		group.setText(TuxGuitar.getProperty("chord.settings.search-frets"));
+		this.minFret = makeSpinner(group,TuxGuitar.getProperty("chord.settings.minimum-fret"),ChordSettings.instance().getFindChordsMin(),0,15);
+		this.maxFret = makeSpinner(group,TuxGuitar.getProperty("chord.settings.maximum-fret"),ChordSettings.instance().getFindChordsMax(),2,25);
+		this.minFret.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				checkMinimumFretValue();
+			}
+		});
+		this.maxFret.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				checkMaximumFretValue();
+			}
+		});
+	}
+	
+	protected void checkMinimumFretValue(){
+		int maxSelection = this.maxFret.getSelection();
+		int minSelection = this.minFret.getSelection();
+		if(maxSelection < minSelection){
+			this.maxFret.setSelection(minSelection);
+		}
+	}
+	
+	protected void checkMaximumFretValue(){
+		int maxSelection = this.maxFret.getSelection();
+		int minSelection = this.minFret.getSelection();
+		if(maxSelection < minSelection){
+			this.maxFret.setSelection(minSelection);
+		}
+	}
+	
+	private void update(){
+		ChordSettings.instance().setChordTypeIndex(this.typeCombo.getSelectionIndex());
+		ChordSettings.instance().setEmptyStringChords(this.emptyStringChords.getSelection());
+		ChordSettings.instance().setChordsToDisplay(this.chordsToDisplay.getSelection() );
+		ChordSettings.instance().setFindChordsMax(this.maxFret.getSelection());
+		ChordSettings.instance().setFindChordsMin(this.minFret.getSelection());
+	}
+	
+	protected void dispose(boolean updated){
+		this.updated = updated;
+		if(this.updated){
+			this.update();
+		}
+		this.dialog.dispose();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/CustomChordManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/CustomChordManager.java
new file mode 100644
index 0000000..56f8fac
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/CustomChordManager.java
@@ -0,0 +1,77 @@
+package org.herac.tuxguitar.app.editors.chord;
+
+import java.io.File;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.chord.xml.ChordXMLReader;
+import org.herac.tuxguitar.app.editors.chord.xml.ChordXMLWriter;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.song.models.TGChord;
+
+public class CustomChordManager {
+	
+	private long lastEdit;
+	private List chords;
+	
+	public CustomChordManager() {
+		this.chords = ChordXMLReader.getChords(getUserFileName());
+		this.setLastEdit();
+	}
+	
+	public int countChords() {
+		return this.chords.size();
+	}
+	
+	public TGChord getChord(int index) {
+		if (index >= 0 && index < countChords()) {
+			return ((TGChord) this.chords.get(index)).clone(TuxGuitar.instance().getSongManager().getFactory());
+		}
+		return null;
+	}
+	
+	public void addChord(TGChord chord) {
+		this.chords.add(chord);
+		this.setLastEdit();
+	}
+	
+	public void removeChord(int index) {
+		if (index >= 0 && index < countChords()) {
+			this.chords.remove(index);
+			this.setLastEdit();
+		}
+	}
+	
+	public void renameChord(int index, String name) {
+		if (index >= 0 && index < countChords()) {
+			((TGChord) this.chords.get(index)).setName(name);
+			this.setLastEdit();
+		}
+	}
+	
+	public boolean existOtherEqualCustomChord(String name, int index) {
+		for (int i = 0; i < countChords(); i++) {
+			TGChord chord = getChord(i);
+			if (chord.getName().equals(name) && index != i) {
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public void write() {
+		ChordXMLWriter.setChords(this.chords, getUserFileName());
+	}
+	
+	private static String getUserFileName() {
+		return (TGFileUtils.PATH_USER_CONFIG + File.separator + "customchords.xml");
+	}
+	
+	private void setLastEdit() {
+		this.lastEdit = System.currentTimeMillis();
+	}
+	
+	public long getLastEdit() {
+		return this.lastEdit;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/xml/ChordXML.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/xml/ChordXML.java
new file mode 100644
index 0000000..faae1b2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/xml/ChordXML.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.app.editors.chord.xml;
+
+public class ChordXML {
+	
+	public static final String CHORD_LIST_TAG = "chords";
+	public static final String CHORD_TAG = "chord";
+	public static final String CHORD_NAME_ATTRIBUTE = "name";
+	public static final String CHORD_STRINGS_ATTRIBUTE = "strings";
+	public static final String CHORD_FIRST_FRET_ATTRIBUTE = "first-fret";
+	public static final String STRING_TAG = "string";
+	public static final String STRING_NUMBER_ATTRIBUTE = "number";
+	public static final String STRING_FRET_ATTRIBUTE = "fret";
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/xml/ChordXMLReader.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/xml/ChordXMLReader.java
new file mode 100644
index 0000000..7f29001
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/xml/ChordXMLReader.java
@@ -0,0 +1,94 @@
+package org.herac.tuxguitar.app.editors.chord.xml;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+public class ChordXMLReader {
+	
+	public static List getChords(String fileName) {
+		List chords = new ArrayList();
+		try{
+			File file = new File(fileName);
+			if (file.exists()){
+				Document doc = getDocument(file);
+				loadChords(doc.getFirstChild(),chords);
+			}
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+		return chords;
+	}
+	
+	private static Document getDocument(File file) {
+		Document document = null;
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		try {
+			DocumentBuilder builder = factory.newDocumentBuilder();
+			document = builder.parse(file);
+		} catch (SAXException sxe) {
+			sxe.printStackTrace();
+		} catch (ParserConfigurationException pce) {
+			pce.printStackTrace();
+		} catch (IOException ioe) {
+			ioe.printStackTrace();
+		}
+		return document;
+	}
+	
+	/**
+	 * Read shortcuts from xml file
+	 * 
+	 * @param shortcutsNode
+	 * @return
+	 */
+	private static void loadChords(Node chordsNode,List chords){
+		try{
+			NodeList chordList = chordsNode.getChildNodes();
+			for (int i = 0; i < chordList.getLength(); i++) {
+				Node chordItem = chordList.item(i);
+				if (chordItem.getNodeName().equals(ChordXML.CHORD_TAG)) {
+					NamedNodeMap chordAttributes = chordItem.getAttributes();
+					
+					String name = chordAttributes.getNamedItem(ChordXML.CHORD_NAME_ATTRIBUTE).getNodeValue();
+					String strings = chordAttributes.getNamedItem(ChordXML.CHORD_STRINGS_ATTRIBUTE).getNodeValue();
+					String firstFret = chordAttributes.getNamedItem(ChordXML.CHORD_FIRST_FRET_ATTRIBUTE).getNodeValue();
+					
+					TGChord chord = TuxGuitar.instance().getSongManager().getFactory().newChord(Integer.parseInt(strings));
+					chord.setName(name);
+					chord.setFirstFret(Integer.parseInt(firstFret));
+					
+					NodeList stringList = chordItem.getChildNodes();
+					for (int j = 0; j < stringList.getLength(); j++) {
+						Node stringItem = stringList.item(j);
+						if (stringItem.getNodeName().equals(ChordXML.STRING_TAG)) {
+							NamedNodeMap stringAttributes = stringItem.getAttributes();
+							
+							String number = stringAttributes.getNamedItem(ChordXML.STRING_NUMBER_ATTRIBUTE).getNodeValue();
+							String fret = stringAttributes.getNamedItem(ChordXML.STRING_FRET_ATTRIBUTE).getNodeValue();
+							
+							chord.addFretValue(Integer.parseInt(number),Integer.parseInt(fret));
+						}
+					}
+					chords.add(chord);
+				}
+			}
+		}catch(Exception e){
+			chords.clear();
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/xml/ChordXMLWriter.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/xml/ChordXMLWriter.java
new file mode 100644
index 0000000..a5af6b5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/chord/xml/ChordXMLWriter.java
@@ -0,0 +1,121 @@
+package org.herac.tuxguitar.app.editors.chord.xml;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.herac.tuxguitar.song.models.TGChord;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+public class ChordXMLWriter {
+	
+	public static void setChords(List chords,String fileName) {
+		File file = new File(fileName);
+		
+		Document doc = createDocument();
+		setChords(chords,doc);
+		saveDocument(doc,file);
+	}
+	
+	public static Document createDocument() {
+		Document document = null;
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		try {
+			DocumentBuilder builder = factory.newDocumentBuilder();
+			document = builder.newDocument();
+		}catch (ParserConfigurationException pce) {
+			pce.printStackTrace();
+		}
+		return document;
+	}
+	
+	public static void saveDocument(Document document,File file) {
+		try {
+			FileOutputStream fs = new FileOutputStream(file);
+			
+			// Write it out again
+			TransformerFactory xformFactory = TransformerFactory.newInstance();
+			Transformer idTransform = xformFactory.newTransformer();
+			Source input = new DOMSource(document);
+			Result output = new StreamResult(fs);
+			idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
+			idTransform.transform(input, output);
+		} catch (FactoryConfigurationError e) {
+			e.printStackTrace();
+		} catch (TransformerConfigurationException e) {
+			e.printStackTrace();
+		} catch (TransformerException e) {
+			e.printStackTrace();
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Write chords to xml file
+	 */
+	private static void setChords(List chords,Document document){
+		//chords tag
+		Node chordsNode = document.createElement(ChordXML.CHORD_LIST_TAG);
+		
+		Iterator it = chords.iterator();
+		while(it.hasNext()){
+			TGChord chord = (TGChord)it.next();
+			
+			//chord tag
+			Node chordNode = document.createElement(ChordXML.CHORD_TAG);
+			chordsNode.appendChild(chordNode);
+			
+			//name attribute
+			Attr nameAttr = document.createAttribute(ChordXML.CHORD_NAME_ATTRIBUTE);
+			nameAttr.setNodeValue( chord.getName());
+			chordNode.getAttributes().setNamedItem(nameAttr);
+			
+			//strings attribute
+			Attr stringsAttr = document.createAttribute(ChordXML.CHORD_STRINGS_ATTRIBUTE);
+			stringsAttr.setNodeValue(Integer.toString(chord.getStrings().length));
+			chordNode.getAttributes().setNamedItem(stringsAttr);
+			
+			//first fret attribute
+			Attr firstFretAttr = document.createAttribute(ChordXML.CHORD_FIRST_FRET_ATTRIBUTE);
+			firstFretAttr.setNodeValue(Integer.toString(chord.getFirstFret()));
+			chordNode.getAttributes().setNamedItem(firstFretAttr);
+			
+			for(int i = 0;i < chord.getStrings().length; i++){
+				//string tag
+				Node stringNode = document.createElement(ChordXML.STRING_TAG);
+				chordNode.appendChild(stringNode);
+				
+				//number attribute
+				Attr numberAttr = document.createAttribute(ChordXML.STRING_NUMBER_ATTRIBUTE);
+				numberAttr.setNodeValue(Integer.toString(i));
+				stringNode.getAttributes().setNamedItem(numberAttr);
+				
+				//fret attribute
+				Attr fretAttr = document.createAttribute(ChordXML.STRING_FRET_ATTRIBUTE);
+				fretAttr.setNodeValue(Integer.toString(chord.getFretValue(i)));
+				stringNode.getAttributes().setNamedItem(fretAttr);
+			}
+		}
+		
+		document.appendChild(chordsNode);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/BendEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/BendEditor.java
new file mode 100644
index 0000000..fd92947
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/BendEditor.java
@@ -0,0 +1,459 @@
+/*
+ * Created on 28-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.effects;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectBend;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class BendEditor{
+	private static final int X_SPACING = 30;
+	private static final int Y_SPACING = 15;
+	private static final int X_LENGTH = TGEffectBend.MAX_POSITION_LENGTH + 1;
+	private static final int Y_LENGTH = TGEffectBend.MAX_VALUE_LENGTH + 1;
+	
+	private int[] x;
+	private int[] y;
+	private int width;
+	private int height;
+	private List points;
+	protected Composite editor;
+	protected DefaultBend[] defaultBends;
+	protected TGEffectBend result;
+	protected boolean cancelled;
+	
+	public BendEditor() {
+		this.init();
+	}
+	
+	private void init(){
+		this.x = new int[X_LENGTH];
+		this.y = new int[Y_LENGTH];
+		this.width = ((X_SPACING * X_LENGTH) - X_SPACING);
+		this.height = ((Y_SPACING * Y_LENGTH) - Y_SPACING);
+		this.points = new ArrayList();
+		
+		for(int i = 0;i < this.x.length;i++){
+			this.x[i] = ((i + 1) * X_SPACING);
+		}
+		for(int i = 0;i < this.y.length;i++){
+			this.y[i] = ((i + 1) * Y_SPACING);
+		}
+	}
+	
+	public boolean isCancelled(){
+		return this.cancelled;
+	}
+	
+	public TGEffectBend getResult(){
+		return this.result;
+	}
+	
+	public void show(Shell shell,final TGNote note){
+		this.cancelled = true;
+		
+		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("bend.editor"));
+		
+		//----------------------------------------------------------------------
+		Composite composite = new Composite(dialog,SWT.NONE);
+		composite.setLayout(new GridLayout(3,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite leftComposite = new Composite(composite,SWT.NONE);
+		leftComposite.setLayout(new GridLayout());
+		leftComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite rightComposite = new Composite(composite,SWT.NONE);
+		rightComposite.setLayout(new GridLayout());
+		rightComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		//-------------EDITOR---------------------------------------------------
+		this.editor = new Composite(leftComposite, SWT.BORDER | SWT.DOUBLE_BUFFERED);
+		this.editor.setBackground(this.editor.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+		this.editor.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.FILL,true,true) , getWidth() + (X_SPACING * 2),getHeight() + (Y_SPACING * 2))  );
+		this.editor.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				TGPainterImpl painter = new TGPainterImpl(e.gc);
+				paintEditor(painter);
+			}
+		});
+		this.editor.addMouseListener(new MouseAdapter() {
+			public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
+				checkPoint(e.x,e.y);
+				BendEditor.this.editor.redraw();
+			}
+		});
+		
+		//-------------DEFAULT BEND LIST---------------------------------------------------
+		this.resetDefaultBends();
+		
+		final org.eclipse.swt.widgets.List defaultBendList = new org.eclipse.swt.widgets.List(rightComposite,SWT.BORDER | SWT.SINGLE);
+		for(int i = 0;i < BendEditor.this.defaultBends.length;i++){
+			defaultBendList.add(this.defaultBends[i].getName());
+		}
+		defaultBendList.select(0);
+		defaultBendList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		defaultBendList.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int index = defaultBendList.getSelectionIndex();
+				if(index >= 0 && index < BendEditor.this.defaultBends.length){
+					setBend(BendEditor.this.defaultBends[defaultBendList.getSelectionIndex()].getBend());
+					BendEditor.this.editor.redraw();
+				}
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Button buttonClean = new Button(rightComposite, SWT.PUSH);
+		buttonClean.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,true), 80,25));
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				BendEditor.this.result = null;
+				BendEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		Button buttonOK = new Button(rightComposite, SWT.PUSH);
+		buttonOK.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25));
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				BendEditor.this.result = getBend();
+				BendEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		Button buttonCancel = new Button(rightComposite, SWT.PUSH);
+		buttonCancel.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25));
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				BendEditor.this.result = note.getEffect().getBend();
+				BendEditor.this.cancelled = true;
+				dialog.dispose();
+			}
+		});
+		
+		if(note.getEffect().isBend()){
+			setBend(note.getEffect().getBend());
+		}else{
+			setBend(this.defaultBends[0].getBend());
+		}
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private GridData resizeData(GridData data,int minimumWidth,int minimumHeight){
+		data.minimumWidth = minimumWidth;
+		data.minimumHeight = minimumHeight;
+		return data;
+	}
+	
+	protected void paintEditor(TGPainterImpl painter){
+		for(int i = 0;i < this.x.length;i++){
+			this.setStyleX(painter,i);
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo(this.x[i],Y_SPACING);
+			painter.lineTo(this.x[i],Y_SPACING + this.height);
+			painter.closePath();
+		}
+		for(int i = 0;i < this.y.length;i++){
+			this.setStyleY(painter,i);
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo(X_SPACING,this.y[i]);
+			painter.lineTo(X_SPACING + this.width,this.y[i]);
+			painter.closePath();
+		}
+		
+		Iterator it = null;
+		Point prevPoint = null;
+		painter.setLineStyleSolid();
+		painter.setLineWidth(2);
+		painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY)));
+		
+		it = this.points.iterator();
+		while(it.hasNext()){
+			Point point = (Point)it.next();
+			if(prevPoint != null){
+				painter.initPath();
+				painter.moveTo(prevPoint.x,prevPoint.y);
+				painter.lineTo(point.x,point.y);
+				painter.closePath();
+			}
+			prevPoint = point;
+		}
+		
+		painter.setLineWidth(5);
+		painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		
+		it = this.points.iterator();
+		while(it.hasNext()){
+			Point point = (Point)it.next();
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.addRectangle(point.x - 2,point.y - 2,5,5);
+			painter.closePath();
+		}
+		painter.setLineWidth(1);
+	}
+	
+	private void setStyleX(TGPainterImpl painter,int i){
+		painter.setLineStyleSolid();
+		if(i == 0 || i == (X_LENGTH - 1)){
+			painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		}else{
+			painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLUE)));
+			if((i % 3) > 0){
+				painter.setLineStyleDot();
+			}
+		}
+	}
+	
+	private void setStyleY(TGPainterImpl painter,int i){
+		painter.setLineStyleSolid();
+		if(i == 0 || i == (Y_LENGTH - 1)){
+			painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		}else{
+			painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_RED)));
+			
+			if((i % 2) > 0){
+				painter.setLineStyleDot();
+				painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY)));
+			}else if((i % 4) > 0){
+				painter.setLineStyleDot();
+			}
+		}
+	}
+	
+	protected void checkPoint(int x,int y){
+		Point point = new Point(this.getX(x),this.getY(y));
+		if(!this.removePoint(point)){
+			this.removePointsAtXLine(point.x);
+			this.addPoint(point);
+			this.orderPoints();
+		}
+	}
+	
+	protected boolean removePoint(Point point){
+		Iterator it = this.points.iterator();
+		while(it.hasNext()){
+			Point currPoint = (Point)it.next();
+			if(currPoint.x == point.x && currPoint.y == point.y){
+				this.points.remove(point);
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	protected void orderPoints(){
+		for(int i = 0;i < this.points.size();i++){
+			Point minPoint = null;
+			for(int noteIdx = i;noteIdx < this.points.size();noteIdx++){
+				Point point = (Point)this.points.get(noteIdx);
+				if(minPoint == null || point.x < minPoint.x){
+					minPoint = point;
+				}
+			}
+			this.points.remove(minPoint);
+			this.points.add(i,minPoint);
+		}
+	}
+	
+	protected void removePointsAtXLine(int x){
+		Iterator it = this.points.iterator();
+		while(it.hasNext()){
+			Point point = (Point)it.next();
+			if(point.x == x){
+				this.points.remove(point);
+				break;
+			}
+		}
+	}
+	
+	protected void addPoint(Point point){
+		this.points.add(point);
+	}
+	
+	protected int getX(int pointX){
+		int currPointX = -1;
+		for(int i = 0;i < this.x.length;i++){
+			if(currPointX < 0){
+				currPointX = this.x[i];
+			}else{
+				int distanceX = Math.abs(pointX - currPointX);
+				int currDistanceX = Math.abs(pointX - this.x[i]);
+				if(currDistanceX < distanceX){
+					currPointX = this.x[i];
+				}
+			}
+		}
+		return currPointX;
+	}
+	
+	protected int getY(int pointY){
+		int currPointY = -1;
+		for(int i = 0;i < this.y.length;i++){
+			if(currPointY < 0){
+				currPointY = this.y[i];
+			}else{
+				int distanceX = Math.abs(pointY - currPointY);
+				int currDistanceX = Math.abs(pointY - this.y[i]);
+				if(currDistanceX < distanceX){
+					currPointY = this.y[i];
+				}
+			}
+		}
+		return currPointY;
+	}
+	
+	public boolean isEmpty(){
+		return this.points.isEmpty();
+	}
+	
+	public TGEffectBend getBend(){
+		if(this.points != null && !this.points.isEmpty()){
+			TGEffectBend bend = TuxGuitar.instance().getSongManager().getFactory().newEffectBend();//new BendEffect();
+			Iterator it = this.points.iterator();
+			while(it.hasNext()){
+				Point point = (Point)it.next();
+				addBendPoint(bend,point);
+			}
+			return bend;
+		}
+		return null;
+	}
+	
+	private void addBendPoint(TGEffectBend effect,Point point){
+		int position = 0;
+		int value = 0;
+		for(int i=0;i<this.x.length;i++){
+			if(point.x == this.x[i]){
+				position = i;
+			}
+		}
+		for(int i=0;i<this.y.length;i++){
+			if(point.y == this.y[i]){
+				value = (this.y.length - i) -1;
+			}
+		}
+		effect.addPoint(position,value);
+	}
+	
+	public void setBend(TGEffectBend effect){
+		this.points.clear();
+		Iterator it = effect.getPoints().iterator();
+		while(it.hasNext()){
+			TGEffectBend.BendPoint bendPoint = (TGEffectBend.BendPoint)it.next();
+			this.makePoint(bendPoint);
+		}
+	}
+	
+	private void makePoint(TGEffectBend.BendPoint bendPoint){
+		int indexX = bendPoint.getPosition();
+		int indexY = (this.y.length - bendPoint.getValue()) - 1;
+		if(indexX >= 0 && indexX < this.x.length && indexY >= 0 && indexY < this.y.length){
+			Point point = new Point(0,0);
+			point.x = this.x[indexX];
+			point.y = this.y[indexY];
+			this.points.add(point);
+		}
+	}
+	
+	public int getWidth(){
+		return this.width;
+	}
+	
+	public int getHeight(){
+		return this.height;
+	}
+	
+	private void resetDefaultBends(){
+		this.defaultBends = new DefaultBend[5];
+		
+		this.defaultBends[0] = new DefaultBend(TuxGuitar.getProperty("bend.bend"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
+		this.defaultBends[0].getBend().addPoint(0,0);
+		this.defaultBends[0].getBend().addPoint(6,(TGEffectBend.SEMITONE_LENGTH * 4));
+		this.defaultBends[0].getBend().addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4));
+		
+		this.defaultBends[1] = new DefaultBend(TuxGuitar.getProperty("bend.bend-release"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
+		this.defaultBends[1].getBend().addPoint(0,0);
+		this.defaultBends[1].getBend().addPoint(3,(TGEffectBend.SEMITONE_LENGTH * 4));
+		this.defaultBends[1].getBend().addPoint(6,(TGEffectBend.SEMITONE_LENGTH * 4));
+		this.defaultBends[1].getBend().addPoint(9,0);
+		this.defaultBends[1].getBend().addPoint(12,0);
+		
+		this.defaultBends[2] = new DefaultBend(TuxGuitar.getProperty("bend.bend-release-bend"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
+		this.defaultBends[2].getBend().addPoint(0,0);
+		this.defaultBends[2].getBend().addPoint(2,(TGEffectBend.SEMITONE_LENGTH * 4));
+		this.defaultBends[2].getBend().addPoint(4,(TGEffectBend.SEMITONE_LENGTH * 4));
+		this.defaultBends[2].getBend().addPoint(6,0);
+		this.defaultBends[2].getBend().addPoint(8,0);
+		this.defaultBends[2].getBend().addPoint(10,(TGEffectBend.SEMITONE_LENGTH * 4));
+		this.defaultBends[2].getBend().addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4));
+		
+		this.defaultBends[3] = new DefaultBend(TuxGuitar.getProperty("bend.prebend"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
+		this.defaultBends[3].getBend().addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4));
+		this.defaultBends[3].getBend().addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4));
+		
+		this.defaultBends[4] = new DefaultBend(TuxGuitar.getProperty("bend.prebend-release"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
+		this.defaultBends[4].getBend().addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4));
+		this.defaultBends[4].getBend().addPoint(4,(TGEffectBend.SEMITONE_LENGTH * 4));
+		this.defaultBends[4].getBend().addPoint(8,0);
+		this.defaultBends[4].getBend().addPoint(12,0);
+	}
+	
+	private class DefaultBend{
+		private String name;
+		private TGEffectBend bend;
+		
+		public DefaultBend(String name,TGEffectBend bend){
+			this.name = name;
+			this.bend = bend;
+		}
+		
+		public TGEffectBend getBend() {
+			return this.bend;
+		}
+		
+		public String getName() {
+			return this.name;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/GraceEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/GraceEditor.java
new file mode 100644
index 0000000..13a7691
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/GraceEditor.java
@@ -0,0 +1,328 @@
+package org.herac.tuxguitar.app.editors.effects;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
+
+public class GraceEditor extends SelectionAdapter{
+	
+	private static final int LAYOUT_COLUMNS = 2;
+	
+	private Spinner fretSpinner;
+	private Button deadButton;
+	private Button beforeBeatButton;
+	private Button onBeatButton;
+	private Button durationButton1;
+	private Button durationButton2;
+	private Button durationButton3;
+	private Button pppButton;
+	private Button ppButton;
+	private Button pButton;
+	private Button mpButton;
+	private Button mfButton;
+	private Button fButton;
+	private Button ffButton;
+	private Button fffButton;
+	private Button noneButton;
+	private Button slideButton;
+	private Button bendButton;
+	private Button hammerButton;
+	
+	protected TGEffectGrace result;
+	protected boolean cancelled;
+	
+	public GraceEditor(){
+		super();
+	}
+	
+	public boolean isCancelled(){
+		return this.cancelled;
+	}
+	
+	public TGEffectGrace getResult(){
+		return this.result;
+	}
+	
+	public void show(final TGNote note){
+		this.cancelled = true;
+		
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("effects.grace-editor"));
+		dialog.setMinimumSize(360,360);
+		
+		Composite composite = new Composite(dialog,SWT.NONE);
+		composite.setLayout(new GridLayout(LAYOUT_COLUMNS,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		int horizontalSpan = 2;
+		
+		//-----defaults-------------------------------------------------
+		boolean dead = false;
+		boolean onBeat = false;
+		int fret = note.getValue();
+		int duration = 1;
+		int dynamic = TGVelocities.DEFAULT;
+		int transition = TGEffectGrace.TRANSITION_NONE;
+		if(note.getEffect().isGrace()){
+			dead = note.getEffect().getGrace().isDead();
+			fret = note.getEffect().getGrace().getFret();
+			onBeat = note.getEffect().getGrace().isOnBeat();
+			duration = note.getEffect().getGrace().getDuration();
+			dynamic = note.getEffect().getGrace().getDynamic();
+			transition = note.getEffect().getGrace().getTransition();
+		}
+		//---------------------------------------------------
+		//------------------NOTE-----------------------------
+		//---------------------------------------------------
+		Group noteGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("note"));
+		noteGroup.setLayout(new GridLayout(2,false));
+		
+		Label fretLabel = new Label(noteGroup,SWT.NONE);
+		
+		fretLabel.setText(TuxGuitar.getProperty("fret") + ": ");
+		
+		this.fretSpinner = new Spinner(noteGroup,SWT.BORDER);
+		this.fretSpinner.setLayoutData(makeGridData(1));
+		this.fretSpinner.setSelection(fret);
+		
+		this.deadButton = new Button(noteGroup,SWT.CHECK);
+		this.deadButton.setText(TuxGuitar.getProperty("note.deadnote"));
+		this.deadButton.setLayoutData(makeGridData(2));
+		this.deadButton.setSelection(dead);
+		//---------------------------------------------------
+		//------------------POSITION-------------------------
+		//---------------------------------------------------
+		Group positionGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("position"));
+		positionGroup.setLayout(new GridLayout());
+		
+		this.beforeBeatButton = new Button(positionGroup,SWT.RADIO);
+		this.beforeBeatButton.setText(TuxGuitar.getProperty("effects.grace.before-beat"));
+		this.beforeBeatButton.setLayoutData(makeGridData(1));
+		this.beforeBeatButton.setSelection(!onBeat);
+		
+		this.onBeatButton = new Button(positionGroup,SWT.RADIO);
+		this.onBeatButton.setText(TuxGuitar.getProperty("effects.grace.on-beat"));
+		this.onBeatButton.setLayoutData(makeGridData(1));
+		this.onBeatButton.setSelection(onBeat);
+		//---------------------------------------------------
+		//------------------DURATION-------------------------
+		//---------------------------------------------------
+		Group durationGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("duration"));
+		durationGroup.setLayout(new GridLayout(3,false));
+		
+		this.durationButton1 = new Button(durationGroup,SWT.RADIO);
+		this.durationButton1.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
+		this.durationButton1.setLayoutData(makeGridData(1));
+		this.durationButton1.setSelection(duration == 1);
+		
+		this.durationButton2 = new Button(durationGroup,SWT.RADIO);
+		this.durationButton2.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
+		this.durationButton2.setLayoutData(makeGridData(1));
+		this.durationButton2.setSelection(duration == 2);
+		
+		this.durationButton3 = new Button(durationGroup,SWT.RADIO);
+		this.durationButton3.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
+		this.durationButton3.setLayoutData(makeGridData(1));
+		this.durationButton3.setSelection(duration == 3);
+		
+		horizontalSpan = 1;
+		//---------------------------------------------------
+		//------------------DYNAMIC--------------------------
+		//---------------------------------------------------
+		Group dynamicGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("dynamic"));
+		dynamicGroup.setLayout(new GridLayout(2,false));
+		
+		this.pppButton = new Button(dynamicGroup,SWT.RADIO);
+		this.pppButton.setImage(TuxGuitar.instance().getIconManager().getDynamicPPP());
+		this.pppButton.setLayoutData(makeGridData(1));
+		this.pppButton.setSelection(dynamic == TGVelocities.PIANO_PIANISSIMO);
+		
+		this.mfButton = new Button(dynamicGroup,SWT.RADIO);
+		this.mfButton.setImage(TuxGuitar.instance().getIconManager().getDynamicMF());
+		this.mfButton.setLayoutData(makeGridData(1));
+		this.mfButton.setSelection(dynamic == TGVelocities.MEZZO_FORTE);
+		
+		this.ppButton = new Button(dynamicGroup,SWT.RADIO);
+		this.ppButton.setImage(TuxGuitar.instance().getIconManager().getDynamicPP());
+		this.ppButton.setLayoutData(makeGridData(1));
+		this.ppButton.setSelection(dynamic == TGVelocities.PIANISSIMO);
+		
+		this.fButton = new Button(dynamicGroup,SWT.RADIO);
+		this.fButton.setImage(TuxGuitar.instance().getIconManager().getDynamicF());
+		this.fButton.setLayoutData(makeGridData(1));
+		this.fButton.setSelection(dynamic == TGVelocities.FORTE);
+		
+		this.pButton = new Button(dynamicGroup,SWT.RADIO);
+		this.pButton.setImage(TuxGuitar.instance().getIconManager().getDynamicP());
+		this.pButton.setLayoutData(makeGridData(1));
+		this.pButton.setSelection(dynamic == TGVelocities.PIANO);
+		
+		this.ffButton = new Button(dynamicGroup,SWT.RADIO);
+		this.ffButton.setImage(TuxGuitar.instance().getIconManager().getDynamicFF());
+		this.ffButton.setLayoutData(makeGridData(1));
+		this.ffButton.setSelection(dynamic == TGVelocities.FORTISSIMO);
+		
+		this.mpButton = new Button(dynamicGroup,SWT.RADIO);
+		this.mpButton.setImage(TuxGuitar.instance().getIconManager().getDynamicMP());
+		this.mpButton.setLayoutData(makeGridData(1));
+		this.mpButton.setSelection(dynamic == TGVelocities.MEZZO_PIANO);
+		
+		this.fffButton = new Button(dynamicGroup,SWT.RADIO);
+		this.fffButton.setImage(TuxGuitar.instance().getIconManager().getDynamicFFF());
+		this.fffButton.setLayoutData(makeGridData(1));
+		this.fffButton.setSelection(dynamic == TGVelocities.FORTE_FORTISSIMO);
+		//---------------------------------------------------
+		//------------------TRANSITION-----------------------
+		//---------------------------------------------------
+		Group transitionGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("effects.grace.transition"));
+		transitionGroup.setLayout(new GridLayout());
+		
+		this.noneButton = new Button(transitionGroup,SWT.RADIO);
+		this.noneButton.setText(TuxGuitar.getProperty("effects.grace.transition-none"));
+		this.noneButton.setLayoutData(makeGridData(1));
+		this.noneButton.setSelection(transition == TGEffectGrace.TRANSITION_NONE);
+		
+		this.bendButton = new Button(transitionGroup,SWT.RADIO);
+		this.bendButton.setText(TuxGuitar.getProperty("effects.grace.transition-bend"));
+		this.bendButton.setLayoutData(makeGridData(1));
+		this.bendButton.setSelection(transition == TGEffectGrace.TRANSITION_BEND);
+		
+		this.slideButton = new Button(transitionGroup,SWT.RADIO);
+		this.slideButton.setText(TuxGuitar.getProperty("effects.grace.transition-slide"));
+		this.slideButton.setLayoutData(makeGridData(1));
+		this.slideButton.setSelection(transition == TGEffectGrace.TRANSITION_SLIDE);
+		
+		this.hammerButton = new Button(transitionGroup,SWT.RADIO);
+		this.hammerButton.setText(TuxGuitar.getProperty("effects.grace.transition-hammer"));
+		this.hammerButton.setLayoutData(makeGridData(1));
+		this.hammerButton.setSelection(transition == TGEffectGrace.TRANSITION_HAMMER);
+		//---------------------------------------------------
+		//------------------BUTTONS--------------------------
+		//---------------------------------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				GraceEditor.this.result = getGrace();
+				GraceEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonClean = new Button(buttons, SWT.PUSH);
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.setLayoutData(getButtonData());
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				GraceEditor.this.result = null;
+				GraceEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				GraceEditor.this.result = note.getEffect().getGrace();
+				GraceEditor.this.cancelled = true;
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private Group makeGroup(Composite parent,int horizontalSpan,String text){
+		Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
+		group.setLayoutData(makeGridData(horizontalSpan));
+		group.setText(text);
+		
+		return group;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private GridData makeGridData(int horizontalSpan){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.horizontalSpan = horizontalSpan;
+		return data;
+	}
+	
+	public TGEffectGrace getGrace(){
+		TGEffectGrace effect = TuxGuitar.instance().getSongManager().getFactory().newEffectGrace();
+		
+		effect.setFret(this.fretSpinner.getSelection());
+		effect.setDead(this.deadButton.getSelection());
+		effect.setOnBeat(this.onBeatButton.getSelection());
+		
+		//duration
+		if(this.durationButton1.getSelection()){
+			effect.setDuration(1);
+		}else if(this.durationButton2.getSelection()){
+			effect.setDuration(2);
+		}else if(this.durationButton3.getSelection()){
+			effect.setDuration(3);
+		}
+		//velocity
+		if(this.pppButton.getSelection()){
+			effect.setDynamic(TGVelocities.PIANO_PIANISSIMO);
+		}else if(this.ppButton.getSelection()){
+			effect.setDynamic(TGVelocities.PIANISSIMO);
+		}else if(this.pButton.getSelection()){
+			effect.setDynamic(TGVelocities.PIANO);
+		}else if(this.mpButton.getSelection()){
+			effect.setDynamic(TGVelocities.MEZZO_PIANO);
+		}else if(this.mfButton.getSelection()){
+			effect.setDynamic(TGVelocities.MEZZO_FORTE);
+		}else if(this.fButton.getSelection()){
+			effect.setDynamic(TGVelocities.FORTE);
+		}else if(this.ffButton.getSelection()){
+			effect.setDynamic(TGVelocities.FORTISSIMO);
+		}else if(this.fffButton.getSelection()){
+			effect.setDynamic(TGVelocities.FORTE_FORTISSIMO);
+		}
+		
+		//transition
+		if(this.noneButton.getSelection()){
+			effect.setTransition(TGEffectGrace.TRANSITION_NONE);
+		}else if(this.slideButton.getSelection()){
+			effect.setTransition(TGEffectGrace.TRANSITION_SLIDE);
+		}else if(this.bendButton.getSelection()){
+			effect.setTransition(TGEffectGrace.TRANSITION_BEND);
+		}else if(this.hammerButton.getSelection()){
+			effect.setTransition(TGEffectGrace.TRANSITION_HAMMER);
+		}
+		
+		return effect;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/HarmonicEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/HarmonicEditor.java
new file mode 100644
index 0000000..a1253f4
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/HarmonicEditor.java
@@ -0,0 +1,232 @@
+package org.herac.tuxguitar.app.editors.effects;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
+
+public class HarmonicEditor extends SelectionAdapter{
+	
+	public static final int WIDTH = 400;
+	
+	protected Combo harmonicType;
+	protected Combo harmonicDataCombo;
+	protected Button[] typeButtons;
+	protected TGEffectHarmonic result;
+	protected boolean cancelled;
+	
+	public HarmonicEditor(){
+		super();
+	}
+	
+	public boolean isCancelled(){
+		return this.cancelled;
+	}
+	
+	public TGEffectHarmonic getResult(){
+		return this.result;
+	}
+	
+	public void show(final TGNote note){
+		this.cancelled = true;
+		
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("effects.harmonic-editor"));
+		
+		//---------------------------------------------------------------------
+		//------------HARMONIC-------------------------------------------------
+		//---------------------------------------------------------------------
+		Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout());
+		group.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.FILL,true,true),WIDTH));
+		group.setText(TuxGuitar.getProperty("effects.harmonic.type-of-harmonic"));
+		
+		this.typeButtons = new Button[5];
+		SelectionListener listener = new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				update(note,getSelectedType());
+			}
+		};
+		
+		// Natural
+		String label = "[" + TGEffectHarmonic.KEY_NATURAL + "] " + TuxGuitar.getProperty("effects.harmonic.natural");
+		initButton(group,listener,0,TGEffectHarmonic.TYPE_NATURAL,label);
+		
+		// Artificial
+		label = ("[" + TGEffectHarmonic.KEY_ARTIFICIAL + "] " + TuxGuitar.getProperty("effects.harmonic.artificial"));
+		initButton(group,listener,1,TGEffectHarmonic.TYPE_ARTIFICIAL,label);
+		
+		// Tapped
+		label = ("[" + TGEffectHarmonic.KEY_TAPPED + "] " + TuxGuitar.getProperty("effects.harmonic.tapped"));
+		initButton(group,listener,2,TGEffectHarmonic.TYPE_TAPPED,label);
+		
+		// Pinch
+		label = ("[" + TGEffectHarmonic.KEY_PINCH + "] " + TuxGuitar.getProperty("effects.harmonic.pinch"));
+		initButton(group,listener,3,TGEffectHarmonic.TYPE_PINCH,label);
+		
+		// Semi
+		label = ("[" + TGEffectHarmonic.KEY_SEMI + "] " + TuxGuitar.getProperty("effects.harmonic.semi"));
+		initButton(group,listener,4,TGEffectHarmonic.TYPE_SEMI,label);
+		
+		this.harmonicDataCombo = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.harmonicDataCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		//---------------------------------------------------
+		//------------------BUTTONS--------------------------
+		//---------------------------------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
+		
+		Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				HarmonicEditor.this.result = getHarmonic();
+				HarmonicEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonClean = new Button(buttons, SWT.PUSH);
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.setLayoutData(getButtonData());
+		buttonClean.setEnabled( note.getEffect().isHarmonic());
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				HarmonicEditor.this.result = null;
+				HarmonicEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				HarmonicEditor.this.result = note.getEffect().getHarmonic();
+				HarmonicEditor.this.cancelled = true;
+				dialog.dispose();
+			}
+		});
+		
+		this.initDefaults(note);
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private GridData resizeData(GridData data,int minWidth){
+		data.minimumWidth = minWidth;
+		return data;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private void initButton(Composite parent,SelectionListener listener,int index, int type, String label){
+		this.typeButtons[index] = new Button(parent,SWT.RADIO);
+		this.typeButtons[index].setText(label);
+		this.typeButtons[index].setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.typeButtons[index].setData(new Integer(type));
+		this.typeButtons[index].addSelectionListener(listener);
+	}
+	
+	protected void initDefaults(TGNote note){
+		int type = TGEffectHarmonic.TYPE_NATURAL;
+		if(note.getEffect().isHarmonic()){
+			type = note.getEffect().getHarmonic().getType();
+		}
+		else{
+			boolean naturalValid = false;
+			for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){
+				if((note.getValue() % 12) == (TGEffectHarmonic.NATURAL_FREQUENCIES[i][0] % 12)  ){
+					naturalValid = true;
+					break;
+				}
+			}
+			if(!naturalValid){
+				this.typeButtons[0].setEnabled(false);
+				type = TGEffectHarmonic.TYPE_ARTIFICIAL;
+			}
+			
+		}
+		for(int i = 0; i < this.typeButtons.length; i ++){
+			int data = ((Integer)this.typeButtons[i].getData()).intValue();
+			this.typeButtons[i].setSelection((data == type));
+		}
+		update(note,type);
+	}
+	
+	protected int getSelectedType(){
+		for(int i = 0; i < this.typeButtons.length; i ++){
+			if(this.typeButtons[i].getSelection()){
+				return ((Integer)this.typeButtons[i].getData()).intValue();
+			}
+		}
+		return 0;
+	}
+	
+	protected void update(TGNote note,int type){
+		TGEffectHarmonic h = note.getEffect().getHarmonic();
+		this.harmonicDataCombo.removeAll();
+		this.harmonicDataCombo.setEnabled(type != TGEffectHarmonic.TYPE_NATURAL);
+		if(type != TGEffectHarmonic.TYPE_NATURAL){
+			String label = getTypeLabel(type);
+			for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){
+				this.harmonicDataCombo.add(label + "(" + Integer.toString(TGEffectHarmonic.NATURAL_FREQUENCIES[i][0]) + ")" );
+			}
+			this.harmonicDataCombo.select((h != null && h.getType() == type)?h.getData():0);
+		}
+	}
+	
+	private String getTypeLabel(int type){
+		if(type == TGEffectHarmonic.TYPE_NATURAL){
+			return TGEffectHarmonic.KEY_NATURAL;
+		}
+		if(type == TGEffectHarmonic.TYPE_ARTIFICIAL){
+			return TGEffectHarmonic.KEY_ARTIFICIAL;
+		}
+		if(type == TGEffectHarmonic.TYPE_TAPPED){
+			return TGEffectHarmonic.KEY_TAPPED;
+		}
+		if(type == TGEffectHarmonic.TYPE_PINCH){
+			return TGEffectHarmonic.KEY_PINCH;
+		}
+		if(type == TGEffectHarmonic.TYPE_SEMI){
+			return TGEffectHarmonic.KEY_SEMI;
+		}
+		return new String();
+	}
+	
+	public TGEffectHarmonic getHarmonic(){
+		int type = getSelectedType();
+		if(type > 0){
+			TGEffectHarmonic effect = TuxGuitar.instance().getSongManager().getFactory().newEffectHarmonic();
+			effect.setType(type);
+			effect.setData(this.harmonicDataCombo.getSelectionIndex());
+			return effect;
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/StrokeEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/StrokeEditor.java
new file mode 100644
index 0000000..176b919
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/StrokeEditor.java
@@ -0,0 +1,170 @@
+package org.herac.tuxguitar.app.editors.effects;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGStroke;
+
+public class StrokeEditor extends SelectionAdapter{
+	
+	public static final int WIDTH = 400;
+	
+	public static final int HEIGHT = 0;
+	
+	public static final int STATUS_OK = 1;
+	public static final int STATUS_CLEAN = 2;
+	public static final int STATUS_CANCEL = 3;
+	
+	private Button duration4;
+	private Button duration8;
+	private Button duration16;
+	private Button duration32;
+	private Button duration64;
+	
+	private int status;
+	private int value;
+	
+	public StrokeEditor(){
+		super();
+	}
+	
+	public void open(final TGBeat beat){
+		this.status = STATUS_CANCEL;
+		
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("beat.stroke"));
+		
+		//-----defaults-------------------------------------------------
+		int duration = TGDuration.SIXTEENTH;
+		if( beat.getStroke().getDirection() != TGStroke.STROKE_NONE ){
+			duration = beat.getStroke().getValue();
+		}
+		
+		//---------------------------------------------------
+		//------------------DURATION-------------------------
+		//---------------------------------------------------
+		Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN);
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setLayout(new GridLayout(5,false));
+		group.setText( TuxGuitar.getProperty("duration") );
+		
+		this.duration64 = new Button(group,SWT.RADIO);
+		this.duration64.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
+		this.duration64.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.duration64.setSelection(duration == TGDuration.SIXTY_FOURTH);
+		
+		this.duration32 = new Button(group,SWT.RADIO);
+		this.duration32.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
+		this.duration32.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.duration32.setSelection(duration == TGDuration.THIRTY_SECOND);
+		
+		this.duration16 = new Button(group,SWT.RADIO);
+		this.duration16.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
+		this.duration16.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.duration16.setSelection(duration == TGDuration.SIXTEENTH);
+		
+		this.duration8 = new Button(group,SWT.RADIO);
+		this.duration8.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH));
+		this.duration8.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.duration8.setSelection(duration == TGDuration.EIGHTH);
+		
+		this.duration4 = new Button(group,SWT.RADIO);
+		this.duration4.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.QUARTER));
+		this.duration4.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.duration4.setSelection(duration == TGDuration.QUARTER);
+		//---------------------------------------------------
+		//------------------BUTTONS--------------------------
+		//---------------------------------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				setStatus( STATUS_OK );
+				setValue( getSelection() );
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonClean = new Button(buttons, SWT.PUSH);
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.setLayoutData(getButtonData());
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				setStatus( STATUS_CLEAN );
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				setStatus( STATUS_CANCEL );
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected int getSelection(){
+		if( this.duration4.getSelection() ){
+			return TGDuration.QUARTER;
+		}
+		if( this.duration8.getSelection() ){
+			return TGDuration.EIGHTH;
+		}
+		if( this.duration16.getSelection() ){
+			return TGDuration.SIXTEENTH;
+		}
+		if( this.duration32.getSelection() ){
+			return TGDuration.THIRTY_SECOND;
+		}
+		if( this.duration64.getSelection() ){
+			return TGDuration.SIXTY_FOURTH;
+		}
+		return 0;
+	}
+	
+	public int getStatus() {
+		return this.status;
+	}
+
+	public void setStatus(int status) {
+		this.status = status;
+	}
+
+	public int getValue() {
+		return this.value;
+	}
+
+	public void setValue(int value) {
+		this.value = value;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/TremoloBarEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/TremoloBarEditor.java
new file mode 100644
index 0000000..61b8f81
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/TremoloBarEditor.java
@@ -0,0 +1,455 @@
+/*
+ * Created on 28-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.effects;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TremoloBarEditor{
+	private static final int X_SPACING = 30;
+	private static final int Y_SPACING = 10;
+	private static final int X_LENGTH = TGEffectTremoloBar.MAX_POSITION_LENGTH + 1;
+	private static final int Y_LENGTH = (TGEffectTremoloBar.MAX_VALUE_LENGTH * 2) + 1;
+	
+	private int[] x; 
+	private int[] y;
+	private int width;
+	private int height;
+	private List points;
+	protected Composite editor;
+	protected DefaultTremoloBar[] defaultTremoloBars;
+	protected TGEffectTremoloBar result;
+	protected boolean cancelled;
+	
+	public TremoloBarEditor() {
+		this.init();
+	}
+	
+	private void init(){
+		this.x = new int[X_LENGTH];
+		this.y = new int[Y_LENGTH];
+		this.width = ((X_SPACING * X_LENGTH) - X_SPACING);
+		this.height = ((Y_SPACING * Y_LENGTH) - Y_SPACING);
+		this.points = new ArrayList();
+		
+		for(int i = 0;i < this.x.length;i++){
+			this.x[i] = ((i + 1) * X_SPACING);
+		}
+		for(int i = 0;i < this.y.length;i++){
+			this.y[i] = ((i + 1) * Y_SPACING);
+		}
+	}
+	
+	public boolean isCancelled(){
+		return this.cancelled;
+	}
+	
+	public TGEffectTremoloBar getResult(){
+		return this.result;
+	}
+	
+	public void show(Shell shell,final TGNote note){
+		this.cancelled = true;
+		
+		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("effects.tremolo-bar-editor"));
+		
+		//----------------------------------------------------------------------
+		Composite composite = new Composite(dialog,SWT.NONE);
+		composite.setLayout(new GridLayout(2,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite leftComposite = new Composite(composite,SWT.NONE);
+		leftComposite.setLayout(new GridLayout());
+		leftComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite rightComposite = new Composite(composite,SWT.NONE);
+		rightComposite.setLayout(new GridLayout());
+		rightComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		//-------------EDITOR---------------------------------------------------
+		this.editor = new Composite(leftComposite, SWT.BORDER | SWT.DOUBLE_BUFFERED);
+		this.editor.setBackground(this.editor.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+		this.editor.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.FILL,true,true) , getWidth() + (X_SPACING * 2),getHeight() + (Y_SPACING * 2))  );
+		this.editor.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				TGPainterImpl painter = new TGPainterImpl(e.gc);
+				paintEditor(painter);
+			}
+		});
+		this.editor.addMouseListener(new MouseAdapter() {
+			public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
+				checkPoint(e.x,e.y);
+				TremoloBarEditor.this.editor.redraw();
+			}
+		});
+		
+		//-------------DEFAULT BEND LIST---------------------------------------------------
+		this.resetDefaultTremoloBars();
+		final org.eclipse.swt.widgets.List defaultTremoloBarList = new org.eclipse.swt.widgets.List(rightComposite,SWT.BORDER);
+		for(int i = 0;i < this.defaultTremoloBars.length;i++){
+			defaultTremoloBarList.add(this.defaultTremoloBars[i].getName());
+		}
+		defaultTremoloBarList.select(0);
+		defaultTremoloBarList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		defaultTremoloBarList.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int index = defaultTremoloBarList.getSelectionIndex();
+				if(index >= 0 && index < TremoloBarEditor.this.defaultTremoloBars.length){
+					setTremoloBar(TremoloBarEditor.this.defaultTremoloBars[index].getTremoloBar());
+					TremoloBarEditor.this.editor.redraw();
+				}
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Button buttonClean = new Button(rightComposite, SWT.PUSH);
+		buttonClean.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,true), 80,25));
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TremoloBarEditor.this.result = null;
+				TremoloBarEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		Button buttonOK = new Button(rightComposite, SWT.PUSH);
+		buttonOK.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25));
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TremoloBarEditor.this.result = getTremoloBar();
+				TremoloBarEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		Button buttonCancel = new Button(rightComposite, SWT.PUSH);
+		buttonCancel.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25));
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TremoloBarEditor.this.result = note.getEffect().getTremoloBar();
+				TremoloBarEditor.this.cancelled = true;
+				dialog.dispose();
+			}
+		});
+		
+		if(note.getEffect().isTremoloBar()){
+			setTremoloBar(note.getEffect().getTremoloBar());
+		}else{
+			setTremoloBar(this.defaultTremoloBars[0].getTremoloBar());
+		}
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private GridData resizeData(GridData data,int minimumWidth,int minimumHeight){
+		data.minimumWidth = minimumWidth;
+		data.minimumHeight = minimumHeight;
+		return data;
+	}
+	
+	protected void paintEditor(TGPainterImpl painter){
+		for(int i = 0;i < this.x.length;i++){
+			this.setStyleX(painter,i);
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo(this.x[i],Y_SPACING);
+			painter.lineTo(this.x[i],Y_SPACING + this.height);
+			painter.closePath();
+		}
+		for(int i = 0;i < this.y.length;i++){
+			this.setStyleY(painter,i);
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.moveTo(X_SPACING,this.y[i]);
+			painter.lineTo(X_SPACING + this.width,this.y[i]);
+			painter.closePath();
+		}
+		
+		Iterator it = null;
+		Point prevPoint = null;
+		painter.setLineStyleSolid();
+		painter.setLineWidth(2);
+		painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY)));
+		it = this.points.iterator();
+		while(it.hasNext()){
+			Point point = (Point)it.next();
+			if(prevPoint != null){
+				painter.initPath();
+				painter.moveTo(prevPoint.x,prevPoint.y);
+				painter.lineTo(point.x,point.y);
+				painter.closePath();
+			}
+			prevPoint = point;
+		}
+		
+		painter.setLineWidth(5);
+		painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		it = this.points.iterator();
+		while(it.hasNext()){
+			Point point = (Point)it.next();
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.addRectangle(point.x - 2,point.y - 2,5,5);
+			painter.closePath();
+		}
+		painter.setLineWidth(1);
+	}
+	
+	private void setStyleX(TGPainterImpl painter,int i){
+		painter.setLineStyleSolid();
+		if(i == 0 || i == (X_LENGTH - 1)){
+			painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		}else{
+			painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLUE)));
+			if((i % 3) > 0){
+				painter.setLineStyleDot();
+			}
+		}
+	}
+	
+	private void setStyleY(TGPainterImpl painter,int i){
+		painter.setLineStyleSolid();
+		if(i == 0 || i == (Y_LENGTH - 1)){
+			painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		}
+		else if(i == (TGEffectTremoloBar.MAX_VALUE_LENGTH)){
+			painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK)));
+		}else{
+			painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_RED)));
+			if((i % 2) > 0){
+				painter.setLineStyleDot();
+				painter.setForeground(new TGColorImpl(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY)));
+			}
+		}
+	}
+	
+	protected void checkPoint(int x,int y){
+		Point point = new Point(this.getX(x),this.getY(y));
+		if(!this.removePoint(point)){
+			this.removePointsAtXLine(point.x);
+			this.addPoint(point);
+			this.orderPoints();
+		}
+	}
+	
+	private boolean removePoint(Point point){
+		Iterator it = this.points.iterator();
+		while(it.hasNext()){
+			Point currPoint = (Point)it.next();
+			if(currPoint.x == point.x && currPoint.y == point.y){
+				this.points.remove(point);
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	private void orderPoints(){
+		for(int i = 0;i < this.points.size();i++){
+			Point minPoint = null;
+			for(int noteIdx = i;noteIdx < this.points.size();noteIdx++){
+				Point point = (Point)this.points.get(noteIdx);
+				if(minPoint == null || point.x < minPoint.x){
+					minPoint = point;
+				}
+			}
+			this.points.remove(minPoint);
+			this.points.add(i,minPoint);
+		}
+	}
+	
+	private void removePointsAtXLine(int x){
+		Iterator it = this.points.iterator();
+		while(it.hasNext()){
+			Point point = (Point)it.next();
+			if(point.x == x){
+				this.points.remove(point);
+				break;
+			}
+		}
+	}
+	
+	private void addPoint(Point point){
+		this.points.add(point);
+	}
+	
+	private int getX(int pointX){
+		int currPointX = -1;
+		for(int i = 0;i < this.x.length;i++){
+			if(currPointX < 0){
+				currPointX = this.x[i];
+			}else{
+				int distanceX = Math.abs(pointX - currPointX);
+				int currDistanceX = Math.abs(pointX - this.x[i]);
+				if(currDistanceX < distanceX){
+					currPointX = this.x[i];
+				}
+			}
+		}
+		return currPointX;
+	}
+	
+	private int getY(int pointY){
+		int currPointY = -1;
+		for(int i = 0;i < this.y.length;i++){
+			if(currPointY < 0){
+				currPointY = this.y[i];
+			}else{
+				int distanceX = Math.abs(pointY - currPointY);
+				int currDistanceX = Math.abs(pointY - this.y[i]);
+				if(currDistanceX < distanceX){
+					currPointY = this.y[i];
+				}
+			}
+		}
+		return currPointY;
+	}
+	
+	public boolean isEmpty(){
+		return this.points.isEmpty();
+	}
+	
+	public TGEffectTremoloBar getTremoloBar(){
+		if(this.points != null && !this.points.isEmpty()){
+			TGEffectTremoloBar tremoloBar = TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar();//new TremoloBarEffect();
+			Iterator it = this.points.iterator();
+			while(it.hasNext()){
+				Point point = (Point)it.next();
+				addTremoloBarPoint(tremoloBar,point);
+			}
+			return tremoloBar;
+		}
+		return null;
+	}
+	
+	private void addTremoloBarPoint(TGEffectTremoloBar effect,Point point){
+		int position = 0;
+		int value = 0;
+		for(int i=0;i<this.x.length;i++){
+			if(point.x == this.x[i]){
+				position = i;
+			}
+		}
+		for(int i=0;i<this.y.length;i++){
+			if(point.y == this.y[i]){
+				value = (TGEffectTremoloBar.MAX_VALUE_LENGTH - i);
+			}
+		}
+		effect.addPoint(position,value);
+	}
+	
+	public void setTremoloBar(TGEffectTremoloBar effect){
+		this.points.clear();
+		Iterator it = effect.getPoints().iterator();
+		while(it.hasNext()){
+			TGEffectTremoloBar.TremoloBarPoint tremoloBarPoint = (TGEffectTremoloBar.TremoloBarPoint)it.next();
+			this.makePoint(tremoloBarPoint);
+		}
+	}
+	
+	private void makePoint(TGEffectTremoloBar.TremoloBarPoint tremoloBarPoint){
+		int indexX = tremoloBarPoint.getPosition();
+		int indexY = ( (this.y.length - TGEffectTremoloBar.MAX_VALUE_LENGTH) - tremoloBarPoint.getValue()) - 1;
+		if(indexX >= 0 && indexX < this.x.length && indexY >= 0 && indexY < this.y.length){
+			Point point = new Point(0,0);
+			point.x = this.x[indexX];
+			point.y = this.y[indexY];
+			this.points.add(point);
+		}
+	}
+	
+	public int getWidth(){
+		return this.width;
+	}
+	
+	public int getHeight(){
+		return this.height;
+	}
+	
+	private void resetDefaultTremoloBars(){
+		this.defaultTremoloBars = new DefaultTremoloBar[6];
+		
+		this.defaultTremoloBars[0] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.dip"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
+		this.defaultTremoloBars[0].getTremoloBar().addPoint(0,0);
+		this.defaultTremoloBars[0].getTremoloBar().addPoint(6,-2);
+		this.defaultTremoloBars[0].getTremoloBar().addPoint(12,0);
+		
+		this.defaultTremoloBars[1] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.dive"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
+		this.defaultTremoloBars[1].getTremoloBar().addPoint(0,0);
+		this.defaultTremoloBars[1].getTremoloBar().addPoint(9,-2);
+		this.defaultTremoloBars[1].getTremoloBar().addPoint(12,-2);
+		
+		this.defaultTremoloBars[2] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.release-up"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
+		this.defaultTremoloBars[2].getTremoloBar().addPoint(0,-2);
+		this.defaultTremoloBars[2].getTremoloBar().addPoint(9,-2);
+		this.defaultTremoloBars[2].getTremoloBar().addPoint(12,0);
+		
+		this.defaultTremoloBars[3] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.inverted-dip"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
+		this.defaultTremoloBars[3].getTremoloBar().addPoint(0,0);
+		this.defaultTremoloBars[3].getTremoloBar().addPoint(6,2);
+		this.defaultTremoloBars[3].getTremoloBar().addPoint(12,0);
+		
+		this.defaultTremoloBars[4] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.return"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
+		this.defaultTremoloBars[4].getTremoloBar().addPoint(0,0);
+		this.defaultTremoloBars[4].getTremoloBar().addPoint(9,2);
+		this.defaultTremoloBars[4].getTremoloBar().addPoint(12,2);
+		
+		this.defaultTremoloBars[5] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.release-down"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
+		this.defaultTremoloBars[5].getTremoloBar().addPoint(0,2);
+		this.defaultTremoloBars[5].getTremoloBar().addPoint(9,2);
+		this.defaultTremoloBars[5].getTremoloBar().addPoint(12,0);
+	}
+	
+	private class DefaultTremoloBar{
+		private String name;
+		private TGEffectTremoloBar tremoloBar;
+		
+		public DefaultTremoloBar(String name,TGEffectTremoloBar tremoloBar){
+			this.name = name;
+			this.tremoloBar = tremoloBar;
+		}
+		
+		public TGEffectTremoloBar getTremoloBar() {
+			return this.tremoloBar;
+		}
+		
+		public String getName() {
+			return this.name;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/TremoloPickingEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/TremoloPickingEditor.java
new file mode 100644
index 0000000..f6aa668
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/TremoloPickingEditor.java
@@ -0,0 +1,158 @@
+package org.herac.tuxguitar.app.editors.effects;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
+
+public class TremoloPickingEditor extends SelectionAdapter{
+	
+	private Button thirtySecondButton;
+	private Button sixTeenthButton;
+	private Button eighthButton;
+	
+	protected TGEffectTremoloPicking result;
+	protected boolean cancelled;
+	
+	public TremoloPickingEditor(){
+		super();
+	}
+	
+	public boolean isCancelled(){
+		return this.cancelled;
+	}
+	
+	public TGEffectTremoloPicking getResult(){
+		return this.result;
+	}
+	
+	public void show(final TGNote note){
+		this.cancelled = true;
+		
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("effects.tremolo-picking-editor"));
+		
+		Composite composite = new Composite(dialog,SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		int horizontalSpan = 2;
+		
+		//-----defaults-------------------------------------------------
+		int duration = TGDuration.EIGHTH;
+		if(note.getEffect().isTremoloPicking()){
+			duration = note.getEffect().getTremoloPicking().getDuration().getValue();
+		}
+		
+		//---------------------------------------------------
+		//------------------DURATION-------------------------
+		//---------------------------------------------------
+		Group durationGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("duration"));
+		durationGroup.setLayout(new GridLayout(3,false));
+		
+		this.thirtySecondButton = new Button(durationGroup,SWT.RADIO);
+		this.thirtySecondButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
+		this.thirtySecondButton.setLayoutData(makeGridData(1));
+		this.thirtySecondButton.setSelection(duration == TGDuration.THIRTY_SECOND);
+		
+		this.sixTeenthButton = new Button(durationGroup,SWT.RADIO);
+		this.sixTeenthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
+		this.sixTeenthButton.setLayoutData(makeGridData(1));
+		this.sixTeenthButton.setSelection(duration == TGDuration.SIXTEENTH);
+		
+		this.eighthButton = new Button(durationGroup,SWT.RADIO);
+		this.eighthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH));
+		this.eighthButton.setLayoutData(makeGridData(1));
+		this.eighthButton.setSelection(duration == TGDuration.EIGHTH);
+		//---------------------------------------------------
+		//------------------BUTTONS--------------------------
+		//---------------------------------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TremoloPickingEditor.this.result = getTremoloPicking();
+				TremoloPickingEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonClean = new Button(buttons, SWT.PUSH);
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.setLayoutData(getButtonData());
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TremoloPickingEditor.this.result = null;
+				TremoloPickingEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TremoloPickingEditor.this.result = note.getEffect().getTremoloPicking();
+				TremoloPickingEditor.this.cancelled = true;
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private Group makeGroup(Composite parent,int horizontalSpan,String text){
+		Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
+		group.setLayoutData(makeGridData(horizontalSpan));
+		group.setText(text);
+		
+		return group;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private GridData makeGridData(int horizontalSpan){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.horizontalSpan = horizontalSpan;
+		return data;
+	}
+	
+	public TGEffectTremoloPicking getTremoloPicking(){
+		TGEffectTremoloPicking effect = TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloPicking();
+		if(this.thirtySecondButton.getSelection()){
+			effect.getDuration().setValue(TGDuration.THIRTY_SECOND);
+		}else if(this.sixTeenthButton.getSelection()){
+			effect.getDuration().setValue(TGDuration.SIXTEENTH);
+		}else if(this.eighthButton.getSelection()){
+			effect.getDuration().setValue(TGDuration.EIGHTH);
+		}else{
+			return null;
+		}
+		return effect;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/TrillEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/TrillEditor.java
new file mode 100644
index 0000000..3f914bf
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/effects/TrillEditor.java
@@ -0,0 +1,179 @@
+package org.herac.tuxguitar.app.editors.effects;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
+
+public class TrillEditor extends SelectionAdapter{
+	
+	private Spinner fretSpinner;
+	private Button sixtyFourthButton;
+	private Button thirtySecondButton;
+	private Button sixTeenthButton;
+	
+	protected TGEffectTrill result;
+	protected boolean cancelled;
+	
+	public TrillEditor(){
+		super();
+	}
+	
+	public boolean isCancelled(){
+		return this.cancelled;
+	}
+	
+	public TGEffectTrill getResult(){
+		return this.result;
+	}
+	
+	public void show(final TGNote note){
+		this.cancelled = true;
+		
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("effects.trill-editor"));
+		
+		
+		Composite composite = new Composite(dialog,SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		int horizontalSpan = 2;
+		
+		//-----defaults-------------------------------------------------
+		int fret = note.getValue();
+		int duration = TGDuration.SIXTEENTH;
+		if(note.getEffect().isTrill()){
+			fret = note.getEffect().getTrill().getFret();
+			duration = note.getEffect().getTrill().getDuration().getValue();
+		}
+		//---------------------------------------------------
+		//------------------NOTE-----------------------------
+		//---------------------------------------------------
+		Group noteGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("note"));
+		noteGroup.setLayout(new GridLayout(2,false));
+		
+		Label fretLabel = new Label(noteGroup,SWT.NONE);
+		
+		fretLabel.setText(TuxGuitar.getProperty("fret") + ": ");
+		
+		this.fretSpinner = new Spinner(noteGroup,SWT.BORDER);
+		this.fretSpinner.setLayoutData(makeGridData(1));
+		this.fretSpinner.setSelection(fret);
+		
+		//---------------------------------------------------
+		//------------------DURATION-------------------------
+		//---------------------------------------------------
+		Group durationGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("duration"));
+		durationGroup.setLayout(new GridLayout(3,false));
+		
+		this.sixtyFourthButton = new Button(durationGroup,SWT.RADIO);
+		this.sixtyFourthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
+		this.sixtyFourthButton.setLayoutData(makeGridData(1));
+		this.sixtyFourthButton.setSelection(duration == TGDuration.SIXTY_FOURTH);
+		
+		this.thirtySecondButton = new Button(durationGroup,SWT.RADIO);
+		this.thirtySecondButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
+		this.thirtySecondButton.setLayoutData(makeGridData(1));
+		this.thirtySecondButton.setSelection(duration == TGDuration.THIRTY_SECOND);
+		
+		this.sixTeenthButton = new Button(durationGroup,SWT.RADIO);
+		this.sixTeenthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
+		this.sixTeenthButton.setLayoutData(makeGridData(1));
+		this.sixTeenthButton.setSelection(duration == TGDuration.SIXTEENTH);
+		
+		//---------------------------------------------------
+		//------------------BUTTONS--------------------------
+		//---------------------------------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TrillEditor.this.result = getTrill();
+				TrillEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonClean = new Button(buttons, SWT.PUSH);
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.setLayoutData(getButtonData());
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TrillEditor.this.result = null;
+				TrillEditor.this.cancelled = false;
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TrillEditor.this.result = note.getEffect().getTrill();
+				TrillEditor.this.cancelled = true;
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private Group makeGroup(Composite parent,int horizontalSpan,String text){
+		Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
+		group.setLayoutData(makeGridData(horizontalSpan));
+		group.setText(text);
+		
+		return group;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private GridData makeGridData(int horizontalSpan){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.horizontalSpan = horizontalSpan;
+		return data;
+	}
+	
+	public TGEffectTrill getTrill(){
+		TGEffectTrill effect = TuxGuitar.instance().getSongManager().getFactory().newEffectTrill();
+		effect.setFret(this.fretSpinner.getSelection());
+		if(this.sixtyFourthButton.getSelection()){
+			effect.getDuration().setValue(TGDuration.SIXTY_FOURTH);
+		}else if(this.thirtySecondButton.getSelection()){
+			effect.getDuration().setValue(TGDuration.THIRTY_SECOND);
+		}else if(this.sixTeenthButton.getSelection()){
+			effect.getDuration().setValue(TGDuration.SIXTEENTH);
+		}else{
+			return null;
+		}
+		return effect;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/fretboard/FretBoard.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/fretboard/FretBoard.java
new file mode 100644
index 0000000..7228e41
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/fretboard/FretBoard.java
@@ -0,0 +1,747 @@
+/*
+ * Created on 28-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.fretboard;
+
+import java.util.Iterator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.caret.GoLeftAction;
+import org.herac.tuxguitar.app.action.impl.caret.GoRightAction;
+import org.herac.tuxguitar.app.action.impl.duration.DecrementDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.IncrementDurationAction;
+import org.herac.tuxguitar.app.action.impl.tools.ScaleAction;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGFontImpl;
+import org.herac.tuxguitar.app.editors.TGImageImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.app.util.TGMusicKeyUtils;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class FretBoard extends Composite {
+	
+	public static final int MAX_FRETS = 24;
+	public static final int TOP_SPACING = 10;
+	public static final int BOTTOM_SPACING = 10;
+	
+	private static final int STRING_SPACING = TuxGuitar.instance().getConfig().getIntegerValue(TGConfigKeys.FRETBOARD_STRING_SPACING);
+	private static final String[] NOTE_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_FRETBOARD);
+	
+	private FretBoardListener listener;
+	private FretBoardConfig config;
+	private Composite toolComposite;
+	private Label durationLabel;
+	private Label scaleName;
+	private Button scale;
+	private Button settings;
+	private TGImage fretBoard;
+	
+	private TGBeat beat;
+	private TGBeat externalBeat;
+	
+	private int[] frets;
+	private int[] strings;
+	private int fretSpacing;
+	private boolean changes;
+	private Point lastSize;
+	private int duration;
+	protected Combo handSelector;
+	protected Composite fretBoardComposite;
+	
+	public FretBoard(Composite parent) {
+		super(parent, SWT.NONE);
+		this.setLayout(new FormLayout());
+		this.listener = new FretBoardListener();
+		this.config = new FretBoardConfig();
+		this.config.load();
+		this.initToolBar();
+		this.initEditor();
+		this.loadIcons();
+		this.loadProperties();
+		
+		TuxGuitar.instance().getKeyBindingManager().appendListenersTo(this.toolComposite);
+		TuxGuitar.instance().getKeyBindingManager().appendListenersTo(this.fretBoardComposite);
+	}
+	
+	private void initToolBar() {
+		FormData data = new FormData();
+		data.left = new FormAttachment(0, 0);
+		data.right = new FormAttachment(100, 0);
+		data.top = new FormAttachment(0,0);
+		
+		GridLayout layout = new GridLayout();
+		layout.makeColumnsEqualWidth = false;
+		layout.numColumns = 0;
+		layout.marginWidth = 0;
+		
+		this.toolComposite = new Composite(this, SWT.NONE);
+		
+		// position
+		layout.numColumns ++;
+		Button goLeft = new Button(this.toolComposite, SWT.ARROW | SWT.LEFT);
+		goLeft.addSelectionListener(new TGActionProcessor(GoLeftAction.NAME));
+		
+		layout.numColumns ++;
+		Button goRight = new Button(this.toolComposite, SWT.ARROW | SWT.RIGHT);
+		goRight.addSelectionListener(new TGActionProcessor(GoRightAction.NAME));
+		
+		// separator
+		layout.numColumns ++;
+		makeToolSeparator(this.toolComposite);
+		
+		// duration
+		layout.numColumns ++;
+		Button decrement = new Button(this.toolComposite, SWT.ARROW | SWT.MIN);
+		decrement.addSelectionListener(new TGActionProcessor(DecrementDurationAction.NAME));
+		
+		layout.numColumns ++;
+		this.durationLabel = new Label(this.toolComposite, SWT.BORDER);
+		
+		layout.numColumns ++;
+		Button increment = new Button(this.toolComposite, SWT.ARROW | SWT.MAX);
+		increment.addSelectionListener(new TGActionProcessor(IncrementDurationAction.NAME));
+		
+		// separator
+		layout.numColumns ++;
+		makeToolSeparator(this.toolComposite);
+		
+		// hand selector
+		layout.numColumns ++;
+		this.handSelector = new Combo(this.toolComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.handSelector.add(TuxGuitar.getProperty("fretboard.right-mode"));
+		this.handSelector.add(TuxGuitar.getProperty("fretboard.left-mode"));
+		this.handSelector.select( this.getDirection(this.config.getDirection()) );
+		this.handSelector.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateDirection(FretBoard.this.handSelector.getSelectionIndex());
+			}
+		});
+		
+		// separator
+		layout.numColumns ++;
+		makeToolSeparator(this.toolComposite);
+		
+		// scale
+		layout.numColumns ++;
+		this.scale = new Button(this.toolComposite, SWT.PUSH);
+		this.scale.setText(TuxGuitar.getProperty("scale"));
+		this.scale.addSelectionListener(new TGActionProcessor(ScaleAction.NAME));
+		
+		// scale name
+		layout.numColumns ++;
+		this.scaleName = new Label(this.toolComposite, SWT.LEFT);
+		
+		// settings
+		layout.numColumns ++;
+		this.settings = new Button(this.toolComposite, SWT.PUSH);
+		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
+		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
+		this.settings.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		this.settings.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				configure();
+			}
+		});
+		
+		this.toolComposite.setLayoutData(data);
+		this.toolComposite.setLayout(layout);
+	}
+	
+	private void makeToolSeparator(Composite parent){
+		Label separator = new Label(parent,SWT.SEPARATOR);
+		separator.setLayoutData(new GridData(20,20));
+	}
+	
+	private void initEditor() {
+		this.lastSize = new Point(0,0);
+		
+		FormData data = new FormData();
+		data.left = new FormAttachment(0, 0);
+		data.right = new FormAttachment(100, 0);
+		data.top = new FormAttachment(this.toolComposite,0);
+		data.bottom = new FormAttachment(100, 0);
+		
+		this.fretBoardComposite = new Composite(this, SWT.BORDER | SWT.DOUBLE_BUFFERED);
+		this.fretBoardComposite.setLayoutData(data);
+		this.fretBoardComposite.setBackground(this.config.getColorBackground());
+		this.fretBoardComposite.addMouseListener(this.listener);
+		this.fretBoardComposite.addPaintListener(this.listener);
+	}
+	
+	private void loadDurationImage(boolean force) {
+		int duration = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getDuration().getValue();
+		if(force || this.duration != duration){
+			this.duration = duration;
+			this.durationLabel.setImage(TuxGuitar.instance().getIconManager().getDuration(this.duration));
+		}
+	}
+	
+	private void loadScaleName() {
+		int scaleKey = TuxGuitar.instance().getScaleManager().getSelectionKey();
+		int scaleIndex = TuxGuitar.instance().getScaleManager().getSelectionIndex();
+		String key = TuxGuitar.instance().getScaleManager().getKeyName( scaleKey );
+		String name = TuxGuitar.instance().getScaleManager().getScaleName( scaleIndex );
+		this.scaleName.setText( ( key != null && name != null ) ? ( key + " - " + name ) : "" );
+		this.scaleName.pack();
+	}
+	
+	private void calculateFretSpacing(int width) {
+		this.fretSpacing = (width / MAX_FRETS);
+		int aux = 0;
+		for (int i = 0; i < MAX_FRETS; i++) {
+			aux += (i * 2);
+		}
+		this.fretSpacing += (aux / MAX_FRETS) + 2;
+	}
+	
+	private void disposeFretBoardImage(){
+		if(this.fretBoard != null && !this.fretBoard.isDisposed()){
+			this.fretBoard.dispose();
+		}
+	}
+	
+	protected void initFrets(int fromX) {
+		this.frets = new int[MAX_FRETS];
+		int nextX = fromX;
+		int direction = this.getDirection(this.config.getDirection());
+		if (direction == FretBoardConfig.DIRECTION_RIGHT) {
+			for (int i = 0; i < this.frets.length; i++) {
+				this.frets[i] = nextX;
+				nextX += (this.fretSpacing - ((i + 1) * 2));
+			}
+		} else if (direction == FretBoardConfig.DIRECTION_LEFT) {
+			for (int i = this.frets.length - 1; i >= 0; i--) {
+				this.frets[i] = nextX;
+				nextX += (this.fretSpacing - (i * 2));
+			}
+		}
+	}
+	
+	private int getDirection( int value ){
+		int direction = value;
+		if( direction != FretBoardConfig.DIRECTION_RIGHT && direction != FretBoardConfig.DIRECTION_LEFT ){
+			direction = FretBoardConfig.DIRECTION_RIGHT;
+		}
+		return direction;
+	}
+	
+	private void initStrings(int count) {
+		int fromY = TOP_SPACING;
+		this.strings = new int[count];
+		
+		for (int i = 0; i < this.strings.length; i++) {
+			this.strings[i] = fromY + (STRING_SPACING * i);
+		}
+	}
+	
+	private void updateEditor(){
+		if(isVisible()){
+			if(TuxGuitar.instance().getPlayer().isRunning()){
+				this.beat = TuxGuitar.instance().getEditorCache().getPlayBeat();
+			}else if(this.externalBeat != null){
+				this.beat = this.externalBeat;
+			}else{
+				this.beat = TuxGuitar.instance().getEditorCache().getEditBeat();
+			}
+			
+			if (this.strings.length != getStringCount()) {
+				disposeFretBoardImage();
+				initStrings(getStringCount());
+				//Fuerzo a cambiar el ancho
+				this.lastSize.y = 0;
+			}
+			
+			int clientWidth = getClientArea().width;
+			int clientHeight = getClientArea().height;
+			
+			if(this.lastSize.x != clientWidth || hasChanges()){
+				this.layout(getClientArea().width);
+			}
+			
+			if(this.lastSize.y != clientHeight){
+				TuxGuitar.instance().getFretBoardEditor().showFretBoard();
+			}
+			this.lastSize.x = clientWidth;
+			this.lastSize.y = clientHeight;
+		}
+	}
+	
+	private void paintFretBoard(TGPainter painter){
+		if(this.fretBoard == null || this.fretBoard.isDisposed()){
+			Rectangle clientArea = getClientArea();
+			
+			this.fretBoard = new TGImageImpl(getDisplay(),clientArea.width,((STRING_SPACING) * (this.strings.length - 1)) + TOP_SPACING + BOTTOM_SPACING);
+			
+			TGPainter painterBuffer = this.fretBoard.createPainter();
+			
+			//fondo
+			painterBuffer.setBackground(new TGColorImpl(this.config.getColorBackground()));
+			painterBuffer.initPath(TGPainter.PATH_FILL);
+			painterBuffer.addRectangle(clientArea.x,clientArea.y,clientArea.width,clientArea.height);
+			painterBuffer.closePath();
+			
+			
+			// pinto las cegillas
+			TGImage fretImage = new TGImageImpl(TuxGuitar.instance().getIconManager().getFretboardFret());
+			TGImage firstFretImage = new TGImageImpl(TuxGuitar.instance().getIconManager().getFretboardFirstFret());
+			
+			painterBuffer.drawImage(firstFretImage,0,0,firstFretImage.getWidth(),firstFretImage.getHeight(),this.frets[0] - 5,this.strings[0] - 5,firstFretImage.getWidth(),this.strings[this.strings.length - 1] );
+			
+			paintFretPoints(painterBuffer,0);
+			for (int i = 1; i < this.frets.length; i++) {
+				painterBuffer.drawImage(fretImage,0,0,fretImage.getWidth(),fretImage.getHeight(),this.frets[i],this.strings[0] - 5,fretImage.getWidth(),this.strings[this.strings.length - 1] );
+				paintFretPoints(painterBuffer, i);
+			}
+			
+			// pinto las cuerdas
+			for (int i = 0; i < this.strings.length; i++) {
+				painterBuffer.setForeground(new TGColorImpl(this.config.getColorString()));
+				if(i > 2){
+					painterBuffer.setLineWidth(2);
+				}
+				painterBuffer.initPath();
+				painterBuffer.setAntialias(false);
+				painterBuffer.moveTo(this.frets[0], this.strings[i]);
+				painterBuffer.lineTo(this.frets[this.frets.length - 1], this.strings[i]);
+				painterBuffer.closePath();
+			}
+			
+			// pinto la escala
+			paintScale(painterBuffer);
+			
+			painterBuffer.dispose();
+		}
+		painter.drawImage(this.fretBoard,0,0);
+	}
+	
+	private void paintFretPoints(TGPainter painter, int fretIndex) {
+		painter.setBackground(new TGColorImpl(this.config.getColorFretPoint()));
+		if ((fretIndex + 1) < this.frets.length) {
+			int fret = ((fretIndex + 1) % 12);
+			painter.setLineWidth(10);
+			if (fret == 0) {
+				int size = getOvalSize();
+				int x = this.frets[fretIndex] + ((this.frets[fretIndex + 1] - this.frets[fretIndex]) / 2);
+				int y1 = this.strings[0] + ((this.strings[this.strings.length - 1] - this.strings[0]) / 2) - STRING_SPACING;
+				int y2 = this.strings[0] + ((this.strings[this.strings.length - 1] - this.strings[0]) / 2) + STRING_SPACING;
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.addOval(x - (size / 2), y1 - (size / 2), size, size);
+				painter.addOval(x - (size / 2), y2 - (size / 2), size, size);
+				painter.closePath();
+			} else if (fret == 3 || fret == 5 || fret == 7 || fret == 9) {
+				int size = getOvalSize();
+				int x = this.frets[fretIndex] + ((this.frets[fretIndex + 1] - this.frets[fretIndex]) / 2);
+				int y = this.strings[0] + ((this.strings[this.strings.length - 1] - this.strings[0]) / 2);
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.addOval(x - (size / 2),y - (size / 2),size, size);
+				painter.closePath();
+			}
+			painter.setLineWidth(1);
+		}
+	}
+	
+	private void paintScale(TGPainter painter) {
+		TGTrack track = getTrack();
+		
+		for (int i = 0; i < this.strings.length; i++) {
+			TGString string = track.getString(i + 1);
+			for (int j = 0; j < this.frets.length; j++) {
+				
+				int noteIndex = ((string.getValue() + j) %  12 );
+				if(TuxGuitar.instance().getScaleManager().getScale().getNote(noteIndex)){
+					int x = this.frets[j];
+					if(j > 0){
+						x -= ((x - this.frets[j - 1]) / 2);
+					}
+					int y = this.strings[i];
+					
+					if( (this.config.getStyle() & FretBoardConfig.DISPLAY_TEXT_SCALE) != 0 ){
+						paintKeyText(painter,this.config.getColorScale(),x,y,NOTE_NAMES[noteIndex]);
+					}
+					else{
+						paintKeyOval(painter,this.config.getColorScale(),x,y);
+					}
+				}
+			}
+		}
+		
+		painter.setForeground(new TGColorImpl(this.config.getColorBackground()));
+	}
+	
+	private void paintNotes(TGPainter painter) {
+		if(this.beat != null){
+			TGTrack track = getTrack();
+			
+			for(int v = 0; v < this.beat.countVoices(); v ++){
+				TGVoice voice = this.beat.getVoice( v );
+				Iterator it = voice.getNotes().iterator();
+				while (it.hasNext()) {
+					TGNote note = (TGNote) it.next();
+					int fretIndex = note.getValue();
+					int stringIndex = note.getString() - 1;
+					if (fretIndex >= 0 && fretIndex < this.frets.length && stringIndex >= 0 && stringIndex < this.strings.length) {
+						int x = this.frets[fretIndex];
+						if (fretIndex > 0) {
+							x -= ((this.frets[fretIndex] - this.frets[fretIndex - 1]) / 2);
+						}
+						int y = this.strings[stringIndex];
+						
+						if( (this.config.getStyle() & FretBoardConfig.DISPLAY_TEXT_NOTE) != 0 ){
+							int realValue = track.getString(note.getString()).getValue() + note.getValue();
+							paintKeyText(painter,this.config.getColorNote(), x, y, NOTE_NAMES[ (realValue % 12) ]);
+						}
+						else{
+							paintKeyOval(painter,this.config.getColorNote(), x, y);
+						}
+					}
+				}
+			}
+			painter.setLineWidth(1);
+		}
+	}
+	
+	private void paintKeyOval(TGPainter painter,Color background,int x, int y) {
+		int size = getOvalSize();
+		painter.setBackground(new TGColorImpl(background));
+		painter.initPath(TGPainter.PATH_FILL);
+		painter.moveTo(x - (size / 2),y - (size / 2));
+		painter.addOval(x - (size / 2),y - (size / 2),size, size);
+		painter.closePath();
+	}
+	
+	private void paintKeyText(TGPainter painter,Color foreground,int x, int y,String text) {
+		painter.setBackground(new TGColorImpl(getDisplay().getSystemColor(SWT.COLOR_WHITE)));
+		painter.setForeground(new TGColorImpl(foreground));
+		painter.setFont(new TGFontImpl(this.config.getFont()));
+		
+		int fmWidth = painter.getFMWidth(text);
+		int fmHeight = painter.getFMHeight();
+		
+		painter.initPath(TGPainter.PATH_FILL);
+		painter.addRectangle(x - (fmWidth / 2),y - (fmHeight / 2),fmWidth, fmHeight);
+		painter.closePath();
+		painter.drawString(text,x - (fmWidth / 2),y - (fmHeight / 2),true);
+	}
+	
+	protected void paintEditor(TGPainter painter) {
+		if(!TuxGuitar.instance().isLocked()){
+			TuxGuitar.instance().lock();
+			this.updateEditor();
+			if (this.frets.length > 0 && this.strings.length > 0) {
+				paintFretBoard(painter);
+				paintNotes(painter);
+			}
+			TuxGuitar.instance().unlock();
+		}
+	}
+	
+	protected void hit(int x, int y) {
+		int fretIndex = getFretIndex(x);
+		int stringIndex = getStringIndex(y);
+		
+		TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().setStringNumber(stringIndex + 1);
+		if (!removeNote(fretIndex, stringIndex + 1)) {
+			addNote(fretIndex, stringIndex + 1);
+		}
+	}
+	
+	private int getStringIndex(int y) {
+		int index = -1;
+		for (int i = 0; i < this.strings.length; i++) {
+			if (index < 0) {
+				index = i;
+			} else {
+				int distanceY = Math.abs(y - this.strings[index]);
+				int currDistanceY = Math.abs(y - this.strings[i]);
+				if (currDistanceY < distanceY) {
+					index = i;
+				}
+			}
+		}
+		return index;
+	}
+	
+	private int getFretIndex(int x) {
+		int length = this.frets.length;
+		if ((x - 10) <= this.frets[0] && this.frets[0] < this.frets[length - 1]) {
+			return 0;
+		}
+		if ((x + 10) >= this.frets[0] && this.frets[0] > this.frets[length - 1]) {
+			return 0;
+		}
+		
+		for (int i = 0; i < length; i++) {
+			if ((i + 1) < length) {
+				if (x > this.frets[i] && x <= this.frets[i + 1] || x > this.frets[i + 1] && x <= this.frets[i]) {
+					return i + 1;
+				}
+			}
+		}
+		return length - 1;
+	}
+	
+	private boolean removeNote(int fret, int string) {
+		if(this.beat != null){
+			for(int v = 0; v < this.beat.countVoices(); v ++){
+				TGVoice voice = this.beat.getVoice( v );
+				Iterator it = voice.getNotes().iterator();
+				while (it.hasNext()) {
+					TGNote note = (TGNote) it.next();
+					if (note.getValue() == fret && note.getString() == string) {
+						//comienza el undoable
+						UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+						
+						TGSongManager manager = TuxGuitar.instance().getSongManager();
+						manager.getMeasureManager().removeNote(note);
+						
+						//termia el undoable
+						TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+						TuxGuitar.instance().getFileHistory().setUnsavedFile();
+						
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+	
+	private TGTrack getTrack() {
+		if( this.beat != null ){
+			TGMeasure measure = this.beat.getMeasure();
+			if( measure != null ){
+				TGTrack track = measure.getTrack();
+				if( track != null ){
+					return track;
+				}
+			}
+		}
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
+	}
+	
+	private int getStringCount() {
+		TGTrack track = getTrack();
+		if( track != null ){
+			return track.stringCount();
+		}
+		return 0;
+	}
+	
+	private int getOvalSize(){
+		return ((STRING_SPACING / 2) + (STRING_SPACING / 10));
+	}
+	
+	private void addNote(int fret, int string) {
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		
+		//comienza el undoable
+		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+		
+		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+		
+		TGNote note = manager.getFactory().newNote();
+		note.setValue(fret);
+		note.setVelocity(caret.getVelocity());
+		note.setString(string);
+		
+		TGDuration duration = manager.getFactory().newDuration();
+		caret.getDuration().copy(duration);
+		
+		manager.getMeasureManager().addNote(caret.getMeasure(),caret.getPosition(),note,duration, caret.getVoice());
+		
+		//termia el undoable
+		TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+		
+		//reprodusco las notas en el pulso
+		TuxGuitar.instance().playBeat(caret.getSelectedBeat());
+	}
+	
+	protected void afterAction() {
+		TGMeasureHeader measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().getHeader();
+		TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(measure.getNumber());
+		TuxGuitar.instance().updateCache(true);
+	}
+	
+	protected void updateDirection( int direction ){
+		this.config.saveDirection( this.getDirection(direction) );
+		this.initFrets(10);
+		this.setChanges(true);
+		this.fretBoardComposite.redraw();
+	}
+	
+	public boolean hasChanges(){
+		return this.changes;
+	}
+	
+	public void setChanges(boolean changes){
+		this.changes = changes;
+	}
+	
+	public void setExternalBeat(TGBeat externalBeat){
+		this.externalBeat = externalBeat;
+	}
+	
+	public TGBeat getExternalBeat(){
+		return this.externalBeat;
+	}
+	
+	public void redraw() {
+		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
+			super.redraw();
+			this.fretBoardComposite.redraw();
+			this.loadDurationImage(false);
+		}
+	}
+	
+	public void redrawPlayingMode(){
+		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
+			this.fretBoardComposite.redraw();
+		}
+	 }
+	
+	public void dispose(){
+		super.dispose();
+		this.disposeFretBoardImage();
+		this.config.dispose();
+	}
+	
+	public void loadProperties(){
+		int selection = this.handSelector.getSelectionIndex();
+		this.handSelector.removeAll();
+		this.handSelector.add(TuxGuitar.getProperty("fretboard.right-mode"));
+		this.handSelector.add(TuxGuitar.getProperty("fretboard.left-mode"));
+		this.handSelector.select(selection);
+		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
+		this.scale.setText(TuxGuitar.getProperty("scale"));
+		this.loadScaleName();
+		this.setChanges(true);
+		this.layout(true,true);
+	}
+	
+	public void loadIcons(){
+		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
+		this.loadDurationImage(true);
+		this.layout(true,true);
+		this.layout(getClientArea().width);
+	}
+	
+	public void loadScale(){
+		this.loadScaleName();
+		this.setChanges(true);
+	}
+	
+	public int getHeight(){
+		int borderWidth = (2 * this.fretBoardComposite.getBorderWidth());
+		int toolBarHeight = (this.toolComposite.getBounds().height);
+		int fretBoardHeight = (((STRING_SPACING) * (this.strings.length - 1)) + TOP_SPACING + BOTTOM_SPACING);
+		return (borderWidth + toolBarHeight + fretBoardHeight);
+	}
+	
+	public int getWidth(){
+		return this.frets[this.frets.length - 1];
+	}
+	
+	public void layout(){
+		super.layout();
+	}
+	
+	public void layout(int width){
+		this.disposeFretBoardImage();
+		this.calculateFretSpacing(width);
+		this.initFrets(10);
+		this.initStrings(getStringCount());
+		this.setChanges(false);
+	}
+	
+	protected void configure(){
+		this.config.configure(getShell());
+		this.handSelector.select( this.getDirection(this.config.getDirection()) );
+		this.setChanges(true);
+		this.redraw();
+	}
+	
+	public Composite getFretBoardComposite(){
+		return this.fretBoardComposite;
+	}
+	
+	private class FretBoardListener implements PaintListener,MouseListener {
+		
+		public FretBoardListener(){
+			super();
+		}
+		
+		public void paintControl(PaintEvent e) {
+			TGPainterImpl painter = new TGPainterImpl(e.gc);
+			paintEditor(painter);
+		}
+		
+		public void mouseUp(MouseEvent e) {
+			getFretBoardComposite().setFocus();
+			if(e.button == 1){
+				if(!TuxGuitar.instance().getPlayer().isRunning() && !TuxGuitar.instance().isLocked() && !TGActionLock.isLocked()){
+					TGActionLock.lock();
+					if( getExternalBeat() == null ){
+						hit(e.x, e.y);
+					}else{
+						setExternalBeat( null );
+					}
+					afterAction();
+					TGActionLock.unlock();
+				}
+			}else{
+				new TGActionProcessor(GoRightAction.NAME).mouseUp(e);
+			}
+		}
+		
+		public void mouseDown(MouseEvent e) {
+			//Not implemented
+		}
+		
+		public void mouseDoubleClick(MouseEvent e) {
+			//Not implemented
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/fretboard/FretBoardConfig.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/fretboard/FretBoardConfig.java
new file mode 100644
index 0000000..14964c4
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/fretboard/FretBoardConfig.java
@@ -0,0 +1,358 @@
+package org.herac.tuxguitar.app.editors.fretboard;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.ColorDialog;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FontDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfigDefaults;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.system.config.TGConfigManager;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.util.properties.TGProperties;
+
+public class FretBoardConfig {
+	
+	public static final int DISPLAY_TEXT_NOTE = 0x01;
+	
+	public static final int DISPLAY_TEXT_SCALE = 0x02;
+	
+	public static final int DIRECTION_RIGHT = 0;
+	
+	public static final int DIRECTION_LEFT = 1;
+	
+	private int style;
+	private int direction;
+	private Font font;
+	private Color colorBackground;
+	private Color colorString;
+	private Color colorFretPoint;
+	private Color colorNote;
+	private Color colorScale;
+	
+	public FretBoardConfig(){
+		super();
+	}
+	
+	public int getStyle() {
+		return this.style;
+	}
+	
+	public Font getFont() {
+		return this.font;
+	}
+	
+	public Color getColorBackground() {
+		return this.colorBackground;
+	}
+	
+	public Color getColorString() {
+		return this.colorString;
+	}
+	
+	public Color getColorFretPoint() {
+		return this.colorFretPoint;
+	}
+	
+	public Color getColorNote() {
+		return this.colorNote;
+	}
+	
+	public Color getColorScale() {
+		return this.colorScale;
+	}
+	
+	public int getDirection(){
+		return this.direction;
+	}
+	
+	public void load(){
+		Display display = TuxGuitar.instance().getDisplay();
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		this.style = config.getIntegerValue(TGConfigKeys.FRETBOARD_STYLE);
+		this.direction = config.getIntegerValue(TGConfigKeys.FRETBOARD_DIRECTION, DIRECTION_RIGHT );
+		this.font = new Font(display,config.getFontDataConfigValue(TGConfigKeys.FRETBOARD_FONT));
+		this.colorBackground = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND));
+		this.colorString = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_STRING));
+		this.colorFretPoint = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT));
+		this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_NOTE));
+		this.colorScale = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_SCALE));
+	}
+	
+	public void defaults(){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		TGProperties defaults = TGConfigDefaults.createDefaults();
+		config.setValue(TGConfigKeys.FRETBOARD_STYLE,defaults.getValue(TGConfigKeys.FRETBOARD_STYLE));
+		config.setValue(TGConfigKeys.FRETBOARD_DIRECTION,defaults.getValue(TGConfigKeys.FRETBOARD_DIRECTION));
+		config.setValue(TGConfigKeys.FRETBOARD_FONT,defaults.getValue(TGConfigKeys.FRETBOARD_FONT));
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,defaults.getValue(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND));
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_STRING,defaults.getValue(TGConfigKeys.FRETBOARD_COLOR_STRING));
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,defaults.getValue(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT));
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_NOTE,defaults.getValue(TGConfigKeys.FRETBOARD_COLOR_NOTE));
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_SCALE,defaults.getValue(TGConfigKeys.FRETBOARD_COLOR_SCALE));
+	}
+	
+	public void save(int style, int direction, FontData fontData,RGB rgbBackground,RGB rgbString,RGB rgbFretPoint,RGB rgbNote,RGB rgbScale){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		config.setValue(TGConfigKeys.FRETBOARD_STYLE,style);
+		config.setValue(TGConfigKeys.FRETBOARD_DIRECTION,direction);
+		config.setValue(TGConfigKeys.FRETBOARD_FONT,fontData);
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,rgbBackground);
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_STRING,rgbString);
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,rgbFretPoint);
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_NOTE,rgbNote);
+		config.setValue(TGConfigKeys.FRETBOARD_COLOR_SCALE,rgbScale);
+	}
+	
+	public void saveDirection( int direction ){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		config.setValue(TGConfigKeys.FRETBOARD_DIRECTION,direction);
+		
+		this.direction = direction;
+	}
+	
+	public void dispose(){
+		this.font.dispose();
+		this.colorBackground.dispose();
+		this.colorString.dispose();
+		this.colorFretPoint.dispose();
+		this.colorNote.dispose();
+		this.colorScale.dispose();
+	}
+	
+	private static final int MINIMUM_CONTROL_WIDTH = 180;
+	private static final int MINIMUM_BUTTON_WIDTH = 80;
+	private static final int MINIMUM_BUTTON_HEIGHT = 25;
+	
+	public void configure(Shell shell) {
+		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("fretboard.settings"));
+		
+		// ----------------------------------------------------------------------
+		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout(2, false));
+		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		group.setText(TuxGuitar.getProperty("fretboard.settings"));
+		
+		final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("fretboard.font"),this.font.getFontData()[0]);
+		
+		// Color
+		final RGB rgbBackground = getColorChooser(group,TuxGuitar.getProperty("fretboard.background-color"), this.colorBackground.getRGB());
+		final RGB rgbString = getColorChooser(group,TuxGuitar.getProperty("fretboard.string-color"), this.colorString.getRGB());
+		final RGB rgbFretPoint = getColorChooser(group,TuxGuitar.getProperty("fretboard.fretpoint-color"), this.colorFretPoint.getRGB());
+		final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("fretboard.note-color"), this.colorNote.getRGB());
+		final RGB rgbScale = getColorChooser(group,TuxGuitar.getProperty("fretboard.scale-note-color"), this.colorScale.getRGB());
+		
+		Label directionLabel = new Label(group, SWT.NULL);
+		directionLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
+		directionLabel.setText(TuxGuitar.getProperty("fretboard.direction"));
+		
+		final Combo directionCombo = new Combo(group , SWT.DROP_DOWN | SWT.READ_ONLY);
+		directionCombo.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
+		directionCombo.add(TuxGuitar.getProperty("fretboard.right-mode"));
+		directionCombo.add(TuxGuitar.getProperty("fretboard.left-mode"));
+		directionCombo.select( this.direction );
+		
+		// ----------------------------------------------------------------------
+		group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout());
+		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		group.setText(TuxGuitar.getProperty("fretboard.settings.options"));
+		
+		final Button displayTextNote = new Button(group,SWT.CHECK);
+		displayTextNote.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		displayTextNote.setText(TuxGuitar.getProperty("fretboard.display-note-text"));
+		displayTextNote.setSelection( (this.style & DISPLAY_TEXT_NOTE) != 0 );
+		
+		final Button displayTextScale = new Button(group,SWT.CHECK);
+		displayTextScale.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		displayTextScale.setText(TuxGuitar.getProperty("fretboard.display-scale-text"));
+		displayTextScale.setSelection( (this.style & DISPLAY_TEXT_SCALE) != 0 );
+		
+		// ------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3, false));
+		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
+		
+		final Button buttonDefaults = new Button(buttons, SWT.PUSH);
+		buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
+		buttonDefaults.setLayoutData(getButtonData());
+		buttonDefaults.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+				defaults();
+				applyChanges();
+			}
+		});
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				int style = 0;
+				style |= (displayTextNote.getSelection() ? DISPLAY_TEXT_NOTE : 0 );
+				style |= (displayTextScale.getSelection() ? DISPLAY_TEXT_SCALE : 0 );
+				
+				int direction = directionCombo.getSelectionIndex();
+				if( direction != DIRECTION_RIGHT && direction != DIRECTION_LEFT ){
+					direction = DIRECTION_RIGHT;
+				}
+				//if( direction )
+				dialog.dispose();
+				
+				save(style, direction, fontData, rgbBackground, rgbString, rgbFretPoint, rgbNote, rgbScale);
+				applyChanges();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
+		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
+		return data;
+	}
+	
+	protected void applyChanges(){
+		this.dispose();
+		this.load();
+	}
+	
+	private RGB getColorChooser(final Composite parent,String title,RGB rgb){
+		Label label = new Label(parent, SWT.NULL);
+		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
+		label.setText(title);
+		
+		ButtonColor button = new ButtonColor(parent, SWT.PUSH, TuxGuitar.getProperty("choose"));
+		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
+		button.loadColor(rgb);
+		
+		return button.getValue();
+	}
+	
+	private FontData getFontChooser(final Composite parent,String title,FontData fontData){
+		final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle());
+		
+		Label label = new Label(parent, SWT.NULL);
+		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
+		label.setText(title);
+		
+		Button button = new Button(parent, SWT.PUSH);
+		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
+		button.setText(TuxGuitar.getProperty("choose"));
+		button.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				Font font = new Font(parent.getDisplay(),selection);
+				FontDialog fontDialog = new FontDialog(parent.getShell());
+				fontDialog.setFontList(font.getFontData());
+				FontData fd = fontDialog.open();
+				if(fd != null){
+					selection.setName( fd.getName() );
+					selection.setHeight( fd.getHeight() );
+					selection.setStyle( fd.getStyle() );
+				}
+				font.dispose();
+			}
+		});
+		return selection;
+	}
+	
+	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
+		GridData data = new GridData();
+		data.minimumWidth = minimumWidth;
+		data.horizontalAlignment = horizontalAlignment;
+		data.verticalAlignment = SWT.DEFAULT;
+		data.grabExcessHorizontalSpace = true;
+		data.grabExcessVerticalSpace = true;
+		return data;
+	}
+	
+	private class ButtonColor {
+		protected Button button;
+		protected Color color;
+		protected RGB value;
+		
+		public ButtonColor(Composite parent, int style, String text){
+			this.value = new RGB(0,0,0);
+			this.button = new Button(parent, style);			
+			this.button.setText(text);
+			this.addListeners();
+		}
+		
+		protected void setLayoutData(Object layoutData){
+			this.button.setLayoutData(layoutData);
+		}
+		
+		protected void loadColor(RGB rgb){
+			this.value.red = rgb.red;
+			this.value.green = rgb.green;
+			this.value.blue = rgb.blue;
+			
+			Color color = new Color(this.button.getDisplay(), this.value);
+			this.button.setForeground(color);
+			this.disposeColor();
+			this.color = color;
+		}
+		
+		protected void disposeColor(){
+			if(this.color != null && !this.color.isDisposed()){
+				this.color.dispose();
+				this.color = null;
+			}
+		}
+		
+		private void addListeners(){
+			this.button.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent event) {
+					ColorDialog dlg = new ColorDialog(ButtonColor.this.button.getShell());
+					dlg.setRGB(ButtonColor.this.value);
+					dlg.setText(TuxGuitar.getProperty("choose-color"));
+					RGB result = dlg.open();
+					if (result != null) {
+						ButtonColor.this.loadColor(result);
+					}
+				}
+			});
+			this.button.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent e) {
+					ButtonColor.this.disposeColor();
+				}
+			});
+		}
+		
+		protected RGB getValue(){
+			return this.value;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/lyric/LyricEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/lyric/LyricEditor.java
new file mode 100644
index 0000000..59e854a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/lyric/LyricEditor.java
@@ -0,0 +1,278 @@
+package org.herac.tuxguitar.app.editors.lyric;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.edit.RedoAction;
+import org.herac.tuxguitar.app.action.impl.edit.UndoAction;
+import org.herac.tuxguitar.app.action.impl.track.GoNextTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.GoPreviousTrackAction;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.keybindings.KeyBinding;
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingAction;
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingUtil;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class LyricEditor implements TGUpdateListener,IconLoader,LanguageLoader{
+	private static int EDITOR_WIDTH = 450;
+	private static int EDITOR_HEIGHT = 200;
+	
+	protected static final KeyBindingAction KB_ACTIONS[] = new KeyBindingAction[]{
+		new KeyBindingAction(UndoAction.NAME,new KeyBinding(122,KeyBindingUtil.CONTROL)),
+		new KeyBindingAction(RedoAction.NAME,new KeyBinding(121,KeyBindingUtil.CONTROL)),
+	};
+	
+	private TGTrack track;
+	private Shell dialog;
+	private LyricModifyListener listener;
+	
+	private Button previous;
+	private Button next;
+	private Label label;
+	private Label fromLabel;
+	private Spinner from;
+	private Text text;
+	private int caretPosition;
+	
+	private boolean updated;
+	private int lastTrack;
+	private int lastMeasuseCount;
+	private String lastTrackName;
+	
+	public LyricEditor(){
+		this.listener = new LyricModifyListener(this);
+	}
+	
+	public void show() {
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.RESIZE);
+		this.dialog.setLayout(getDialogLayout());
+		this.dialog.setSize(EDITOR_WIDTH,EDITOR_HEIGHT);
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				onDispose();
+			}
+		});
+		
+		this.track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
+		this.loadComposites();
+		this.loadProperties();
+		this.loadIcons();
+		this.updateItems();
+		this.addListeners();
+		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER);
+	}
+	
+	public void addListeners(){
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
+	}
+	
+	public void removeListeners(){
+		TuxGuitar.instance().getIconManager().removeLoader(this);
+		TuxGuitar.instance().getLanguageManager().removeLoader(this);
+		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
+	}
+	
+	public void onDispose(){
+		this.track = null;
+		this.label = null;
+		this.text = null;
+		this.dialog = null;
+		this.removeListeners();
+		TuxGuitar.instance().updateCache(true);
+	}
+	
+	private GridLayout getDialogLayout(){
+		GridLayout layout = new GridLayout();
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.verticalSpacing = 0;
+		return layout;
+	}
+	
+	private void loadComposites(){
+		loadToolBar(this.dialog);
+		loadLyricText(this.dialog);
+	}
+	
+	private void loadToolBar(Composite parent){
+		final Composite composite = new Composite(parent,SWT.NONE);
+		composite.setLayout(new GridLayout(5,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
+		
+		this.previous = new Button(composite, SWT.ARROW | SWT.LEFT);
+		this.next = new Button(composite, SWT.ARROW | SWT.RIGHT);
+		
+		this.label = new Label(composite,SWT.NONE);
+		this.label.setText(this.track.getName());
+		this.label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
+		
+		this.fromLabel = new Label(composite,SWT.NONE);
+		this.fromLabel.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
+		
+		this.from = new Spinner(composite,SWT.BORDER);
+		this.from.setLayoutData(new GridData(50,SWT.DEFAULT));
+		
+		this.from.setMinimum(1);
+		this.from.setMaximum(this.track.countMeasures());
+		this.from.setSelection(this.track.getLyrics().getFrom());
+		this.from.setEnabled(this.track.countMeasures() > 1);
+		this.from.addModifyListener(this.listener);
+		
+		this.previous.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				new TGActionProcessor(GoPreviousTrackAction.NAME).widgetSelected(e);
+				composite.layout();
+			}
+		});
+		this.next.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				new TGActionProcessor(GoNextTrackAction.NAME).widgetSelected(e);
+				composite.layout();
+			}
+		});
+	}
+	
+	private void loadLyricText(Composite parent){
+		Composite composite = new Composite(parent,SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.text = new Text(composite,SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
+		this.text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.text.setFocus();
+		this.text.setText(this.track.getLyrics().getLyrics());
+		this.text.addModifyListener(this.listener);
+		this.text.addKeyListener(new KeyAdapter() {
+			public void keyPressed(KeyEvent event) {
+				for( int i = 0 ; i < KB_ACTIONS.length ; i ++ ){
+					if(event.keyCode == KB_ACTIONS[i].getKeyBinding().getKey() && event.stateMask == KB_ACTIONS[i].getKeyBinding().getMask()){
+						new TGActionProcessor(KB_ACTIONS[i].getAction()).processEvent(event);
+						return;
+					}
+				}
+			}
+		});
+	}
+	
+	public void updateItems(){
+		if(!isDisposed()){
+			boolean enabled = !TuxGuitar.instance().getPlayer().isRunning();
+			
+			this.listener.setEnabled(false);
+			if(this.updated){
+				this.lastTrack = 0;
+				this.lastTrackName = null;
+				this.lastMeasuseCount = 0;
+			}
+			this.track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
+			if( isTrackNameChanged() ){
+				this.label.setText(this.track.getName());
+			}
+			if( isMeasureCountChanged() ){
+				this.from.setMaximum(this.track.countMeasures());
+			}
+			if( isTrackChanged() ){
+				this.from.setSelection(this.track.getLyrics().getFrom());
+				this.text.setText(this.track.getLyrics().getLyrics());
+				this.text.setSelection( (this.caretPosition >= 0 ? this.caretPosition : this.text.getCharCount()));
+			}
+			
+			this.from.setEnabled( enabled && (this.track.countMeasures() > 1) );
+			this.text.setEnabled( enabled );
+			
+			this.setCaretPosition(-1);
+			
+			this.listener.setEnabled( enabled );
+			this.updated = false;
+		}
+	}
+	
+	private boolean isTrackChanged(){
+		int current = this.track.getNumber();
+		if(current != this.lastTrack){
+			this.lastTrack = current;
+			return true;
+		}
+		return false;
+	}
+	
+	private boolean isTrackNameChanged(){
+		String current = this.track.getName();
+		if(this.lastTrackName == null || !current.equals( this.lastTrackName ) ){
+			this.lastTrackName = current;
+			return true;
+		}
+		return false;
+	}
+	
+	private boolean isMeasureCountChanged(){
+		int current = this.track.countMeasures();
+		if(current != this.lastMeasuseCount){
+			this.lastMeasuseCount = current;
+			return true;
+		}
+		return false;
+	}
+	
+	public void update(){
+		this.updated = true;
+	}
+	
+	public void setCaretPosition(int caretPosition) {
+		this.caretPosition = caretPosition;
+	}
+	
+	public TGTrack getTrack(){
+		return this.track;
+	}
+	
+	public void loadProperties(){
+		if(!isDisposed()){
+			this.dialog.setText(TuxGuitar.getProperty("lyric.editor"));
+			this.fromLabel.setText(TuxGuitar.getProperty("edit.from"));
+		}
+	}
+	
+	public void loadIcons(){
+		if(!isDisposed()){
+			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+		}
+	}
+	
+	public boolean isDisposed() {
+		return (this.dialog == null || this.dialog.isDisposed());
+	}
+	
+	public void dispose(){
+		if(!isDisposed()){
+			this.dialog.dispose();
+		}
+	}
+
+	public void doUpdate(int type) {
+		if( type == TGUpdateListener.SELECTION ){
+			this.updateItems();
+		}else if( type == TGUpdateListener.SONG_UPDATED || type == TGUpdateListener.SONG_LOADED){
+			this.update();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/lyric/LyricModifyListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/lyric/LyricModifyListener.java
new file mode 100644
index 0000000..39ee06d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/lyric/LyricModifyListener.java
@@ -0,0 +1,55 @@
+package org.herac.tuxguitar.app.editors.lyric;
+
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackLyric;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class LyricModifyListener implements ModifyListener{
+	
+	private boolean enabled;
+	private LyricEditor editor;
+	private int lastPosition;
+	
+	public LyricModifyListener(LyricEditor editor){
+		this.editor = editor;
+	}
+	
+	public void modifyText(ModifyEvent e) {
+		if(isEnabled() && !TuxGuitar.instance().getPlayer().isRunning()){
+			
+			if(e.widget instanceof Text){
+				TGTrack track = this.editor.getTrack();
+				Text text = (Text)e.widget;
+				String value = text.getText();
+				int position = text.getCaretPosition();
+				
+				UndoableTrackLyric undoable = UndoableTrackLyric.startUndo(track,this.lastPosition);
+				track.getLyrics().setLyrics(value);
+				TuxGuitar.instance().getUndoableManager().addEdit( undoable.endUndo(track,position) );
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				
+				this.lastPosition = position;
+			}else if(e.widget instanceof Spinner){
+				TGTrack track = this.editor.getTrack();
+				UndoableTrackLyric undoable = UndoableTrackLyric.startUndo(track,this.lastPosition);
+				track.getLyrics().setFrom(((Spinner)e.widget).getSelection());
+				TuxGuitar.instance().getUndoableManager().addEdit( undoable.endUndo(track,this.lastPosition) );
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			}
+			
+			TuxGuitar.instance().updateCache(true);
+		}
+	}
+	
+	public boolean isEnabled() {
+		return this.enabled;
+	}
+	
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/matrix/MatrixConfig.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/matrix/MatrixConfig.java
new file mode 100644
index 0000000..f52c813
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/matrix/MatrixConfig.java
@@ -0,0 +1,341 @@
+package org.herac.tuxguitar.app.editors.matrix;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.graphics.Resource;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.ColorDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.FontDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfigDefaults;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.system.config.TGConfigManager;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.util.properties.TGProperties;
+
+public class MatrixConfig {
+	
+	private Font font;
+	private Color[] colorLines;
+	private Color colorForeground;
+	private Color colorBorder;
+	private Color colorPosition;
+	private Color colorNote;
+	private Color colorPlay;
+	
+	public MatrixConfig(){
+		super();
+	}
+	
+	public Font getFont() {
+		return this.font;
+	}
+	
+	public Color getColorForeground() {
+		return this.colorForeground;
+	}
+	
+	public Color getColorBorder() {
+		return this.colorBorder;
+	}
+	
+	public Color getColorPosition() {
+		return this.colorPosition;
+	}
+	
+	public Color getColorNote() {
+		return this.colorNote;
+	}
+	
+	public Color getColorPlay() {
+		return this.colorPlay;
+	}
+	
+	public Color[] getColorLines() {
+		return this.colorLines;
+	}
+	
+	public Color getColorLine(int index) {
+		return this.colorLines[index];
+	}
+	
+	public void load(){
+		Display display = TuxGuitar.instance().getDisplay();
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		this.font = new Font(display,config.getFontDataConfigValue(TGConfigKeys.MATRIX_FONT));
+		this.colorForeground = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_FOREGROUND));
+		this.colorBorder = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_BORDER));
+		this.colorPosition = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_POSITION));
+		this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_NOTE));
+		this.colorPlay = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE));
+		this.colorLines = new Color[]{
+				new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_1)),
+				new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_2)),
+				new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_3)),
+		};
+	}
+	
+	public void defaults(){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		TGProperties defaults = TGConfigDefaults.createDefaults();
+		config.setValue(TGConfigKeys.MATRIX_FONT,defaults.getValue(TGConfigKeys.MATRIX_FONT));
+		config.setValue(TGConfigKeys.MATRIX_COLOR_FOREGROUND,defaults.getValue(TGConfigKeys.MATRIX_COLOR_FOREGROUND));
+		config.setValue(TGConfigKeys.MATRIX_COLOR_BORDER,defaults.getValue(TGConfigKeys.MATRIX_COLOR_BORDER));
+		config.setValue(TGConfigKeys.MATRIX_COLOR_POSITION,defaults.getValue(TGConfigKeys.MATRIX_COLOR_POSITION));
+		config.setValue(TGConfigKeys.MATRIX_COLOR_NOTE,defaults.getValue(TGConfigKeys.MATRIX_COLOR_NOTE));
+		config.setValue(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,defaults.getValue(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE));
+		config.setValue(TGConfigKeys.MATRIX_COLOR_LINE_1,defaults.getValue(TGConfigKeys.MATRIX_COLOR_LINE_1));
+		config.setValue(TGConfigKeys.MATRIX_COLOR_LINE_2,defaults.getValue(TGConfigKeys.MATRIX_COLOR_LINE_2));
+		config.setValue(TGConfigKeys.MATRIX_COLOR_LINE_3,defaults.getValue(TGConfigKeys.MATRIX_COLOR_LINE_3));
+	}
+	
+	public void save(FontData fontData,
+					 RGB rgbForeground,
+					 RGB rgbBorder,
+					 RGB rgbPosition,
+					 RGB rgbNote,
+					 RGB rgbPlay,
+					 RGB rgbLines[]){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		
+		config.setValue(TGConfigKeys.MATRIX_FONT,fontData);
+		config.setValue(TGConfigKeys.MATRIX_COLOR_FOREGROUND,rgbForeground);
+		config.setValue(TGConfigKeys.MATRIX_COLOR_BORDER,rgbBorder);
+		config.setValue(TGConfigKeys.MATRIX_COLOR_POSITION,rgbPosition);
+		config.setValue(TGConfigKeys.MATRIX_COLOR_NOTE,rgbNote);
+		config.setValue(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,rgbPlay);
+		config.setValue(TGConfigKeys.MATRIX_COLOR_LINE_1,rgbLines[0]);
+		config.setValue(TGConfigKeys.MATRIX_COLOR_LINE_2,rgbLines[1]);
+		config.setValue(TGConfigKeys.MATRIX_COLOR_LINE_3,rgbLines[2]);
+	}
+	
+	public void dispose(){
+		dispose(this.font);
+		dispose(this.colorForeground);
+		dispose(this.colorBorder);
+		dispose(this.colorPosition);
+		dispose(this.colorNote);
+		dispose(this.colorPlay);
+		dispose(this.colorLines);
+	}
+	
+	protected void dispose(Resource[] resources){
+		if(resources != null){
+			for(int i = 0; i < resources.length; i ++){
+				dispose(resources[i]);
+			}
+		}
+	}
+	
+	protected void dispose(Resource resource){
+		if(resource != null){
+			resource.dispose();
+		}
+	}
+	
+	private static final int MINIMUM_CONTROL_WIDTH = 180;
+	private static final int MINIMUM_BUTTON_WIDTH = 80;
+	private static final int MINIMUM_BUTTON_HEIGHT = 25;
+	
+	public void configure(Shell shell) {
+		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("matrix.settings"));
+		
+		// ----------------------------------------------------------------------
+		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout(2, false));
+		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		group.setText(TuxGuitar.getProperty("matrix.settings"));
+		
+		// fonts
+		final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("matrix.font"),this.font.getFontData()[0]);
+		
+		// colors
+		final RGB rgbForeground = getColorChooser(group,TuxGuitar.getProperty("matrix.foreground-color"), this.colorForeground.getRGB());
+		
+		final RGB rgbLines[] = new RGB[]{
+				getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-1"), this.colorLines[0].getRGB()),
+				getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-2"), this.colorLines[1].getRGB()),
+				getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-over"), this.colorLines[2].getRGB()),
+		};
+		
+		final RGB rgbBorder = getColorChooser(group,TuxGuitar.getProperty("matrix.border-color"), this.colorBorder.getRGB());
+		final RGB rgbPosition = getColorChooser(group,TuxGuitar.getProperty("matrix.position-color"), this.colorPosition.getRGB());
+		final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("matrix.note-color"), this.colorNote.getRGB());
+		final RGB rgbPlay = getColorChooser(group,TuxGuitar.getProperty("matrix.play-note-color"), this.colorPlay.getRGB());
+		
+		// ------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3, false));
+		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
+		
+		final Button buttonDefaults = new Button(buttons, SWT.PUSH);
+		buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
+		buttonDefaults.setLayoutData(getButtonData());
+		buttonDefaults.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+				defaults();
+				applyChanges();
+			}
+		});
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+				save(fontData, rgbForeground, rgbBorder, rgbPosition, rgbNote, rgbPlay, rgbLines);
+				applyChanges();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
+		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
+		return data;
+	}
+	
+	protected void applyChanges(){
+		this.dispose();
+		this.load();
+	}
+	
+	private RGB getColorChooser(final Composite parent,String title,RGB rgb){
+		Label label = new Label(parent, SWT.NULL);
+		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
+		label.setText(title);
+		
+		ButtonColor button = new ButtonColor(parent, SWT.PUSH, TuxGuitar.getProperty("choose"));
+		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
+		button.loadColor(rgb);
+		
+		return button.getValue();
+	}
+	
+	private FontData getFontChooser(final Composite parent,String title,FontData fontData){
+		final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle());
+		
+		Label label = new Label(parent, SWT.NULL);
+		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
+		label.setText(title);
+		
+		Button button = new Button(parent, SWT.PUSH);
+		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
+		button.setText(TuxGuitar.getProperty("choose"));
+		button.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				Font font = new Font(parent.getDisplay(),selection);
+				FontDialog fontDialog = new FontDialog(parent.getShell());
+				fontDialog.setFontList(font.getFontData());
+				FontData fd = fontDialog.open();
+				if(fd != null){
+					selection.setName( fd.getName() );
+					selection.setHeight( fd.getHeight() );
+					selection.setStyle( fd.getStyle() );
+				}
+				font.dispose();
+			}
+		});
+		return selection;
+	}
+	
+	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
+		GridData data = new GridData();
+		data.minimumWidth = minimumWidth;
+		data.horizontalAlignment = horizontalAlignment;
+		data.verticalAlignment = SWT.DEFAULT;
+		data.grabExcessHorizontalSpace = true;
+		data.grabExcessVerticalSpace = true;
+		return data;
+	}
+	
+	private class ButtonColor {
+		protected Button button;
+		protected Color color;
+		protected RGB value;
+		
+		public ButtonColor(Composite parent, int style, String text){
+			this.value = new RGB(0,0,0);
+			this.button = new Button(parent, style);			
+			this.button.setText(text);
+			this.addListeners();
+		}
+		
+		protected void setLayoutData(Object layoutData){
+			this.button.setLayoutData(layoutData);
+		}
+		
+		protected void loadColor(RGB rgb){
+			this.value.red = rgb.red;
+			this.value.green = rgb.green;
+			this.value.blue = rgb.blue;
+			
+			Color color = new Color(this.button.getDisplay(), this.value);
+			this.button.setForeground(color);
+			this.disposeColor();
+			this.color = color;
+		}
+		
+		protected void disposeColor(){
+			if(this.color != null && !this.color.isDisposed()){
+				this.color.dispose();
+				this.color = null;
+			}
+		}
+		
+		private void addListeners(){
+			this.button.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent event) {
+					ColorDialog dlg = new ColorDialog(ButtonColor.this.button.getShell());
+					dlg.setRGB(ButtonColor.this.value);
+					dlg.setText(TuxGuitar.getProperty("choose-color"));
+					RGB result = dlg.open();
+					if (result != null) {
+						ButtonColor.this.loadColor(result);
+					}
+				}
+			});
+			this.button.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent e) {
+					ButtonColor.this.disposeColor();
+				}
+			});
+		}
+		
+		protected RGB getValue(){
+			return this.value;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/matrix/MatrixEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/matrix/MatrixEditor.java
new file mode 100644
index 0000000..7abe48a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/matrix/MatrixEditor.java
@@ -0,0 +1,917 @@
+package org.herac.tuxguitar.app.editors.matrix;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.MouseTrackListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.graphics.Resource;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.caret.GoLeftAction;
+import org.herac.tuxguitar.app.action.impl.caret.GoRightAction;
+import org.herac.tuxguitar.app.action.impl.duration.DecrementDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.IncrementDurationAction;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGFontImpl;
+import org.herac.tuxguitar.app.editors.TGImageImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.editors.TGRedrawListener;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.TGMusicKeyUtils;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.control.TGNoteImpl;
+import org.herac.tuxguitar.player.base.MidiPercussion;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class MatrixEditor implements TGRedrawListener,IconLoader,LanguageLoader{
+	
+	private static final int BORDER_HEIGHT = 20;
+	private static final int SCROLL_INCREMENT = 50;
+	private static final String[] NOTE_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_MATRIX);
+	private static final MidiPercussion[] PERCUSSIONS = TuxGuitar.instance().getPlayer().getPercussions();
+	protected static final int[] DIVISIONS = new int[] {1,2,3,4,6,8,16};
+	
+	private MatrixConfig config;
+	private MatrixListener listener;
+	private Shell dialog;
+	private Composite composite;
+	private Composite toolbar;
+	private Composite editor;
+	private Rectangle clientArea;
+	private TGImage buffer;
+	private BufferDisposer bufferDisposer;
+	private Label durationLabel;
+	private Label gridsLabel;
+	private Button settings;
+	private float width;
+	private float height;
+	private float bufferWidth;
+	private float bufferHeight;
+	private float timeWidth;
+	private float lineHeight;
+	private int leftSpacing;
+	private int minNote;
+	private int maxNote;
+	private int duration;
+	private int selection;
+	private int grids;
+	private int playedTrack;
+	private int playedMeasure;
+	private TGBeat playedBeat;
+	
+	public MatrixEditor(){
+		this.grids = this.loadGrids();
+		this.listener = new MatrixListener();
+	}
+	
+	public void show(){
+		this.config = new MatrixConfig();
+		this.config.load();
+		
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE);
+		this.dialog.setText(TuxGuitar.getProperty("matrix.editor"));
+		this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.addDisposeListener(new DisposeListenerImpl());
+		this.bufferDisposer = new BufferDisposer();
+		
+		this.composite = new Composite(this.dialog,SWT.NONE);
+		this.composite.setLayout(new GridLayout());
+		this.composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.initToolBar();
+		this.initEditor();
+		this.loadIcons();
+		
+		this.addListeners();
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				removeListeners();
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER);
+	}
+	
+	public void addListeners(){
+		TuxGuitar.instance().getKeyBindingManager().appendListenersTo(this.toolbar);
+		TuxGuitar.instance().getKeyBindingManager().appendListenersTo(this.editor);
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getEditorManager().addRedrawListener( this );
+	}
+	
+	public void removeListeners(){
+		TuxGuitar.instance().getIconManager().removeLoader(this);
+		TuxGuitar.instance().getLanguageManager().removeLoader(this);
+		TuxGuitar.instance().getEditorManager().removeRedrawListener( this );
+	}
+	
+	private void initToolBar() {
+		GridLayout layout = new GridLayout();
+		layout.makeColumnsEqualWidth = false;
+		layout.numColumns = 0;
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		
+		this.toolbar = new Composite(this.composite, SWT.NONE);
+		
+		// position
+		layout.numColumns ++;
+		Button goLeft = new Button(this.toolbar, SWT.ARROW | SWT.LEFT);
+		goLeft.addSelectionListener(new TGActionProcessor(GoLeftAction.NAME));
+		
+		layout.numColumns ++;
+		Button goRight = new Button(this.toolbar, SWT.ARROW | SWT.RIGHT);
+		goRight.addSelectionListener(new TGActionProcessor(GoRightAction.NAME));
+		
+		// separator
+		layout.numColumns ++;
+		makeToolSeparator(this.toolbar);
+		
+		// duration
+		layout.numColumns ++;
+		Button decrement = new Button(this.toolbar, SWT.ARROW | SWT.MIN);
+		decrement.addSelectionListener(new TGActionProcessor(DecrementDurationAction.NAME));
+		
+		layout.numColumns ++;
+		this.durationLabel = new Label(this.toolbar, SWT.BORDER);
+		
+		layout.numColumns ++;
+		Button increment = new Button(this.toolbar, SWT.ARROW | SWT.MAX);
+		increment.addSelectionListener(new TGActionProcessor(IncrementDurationAction.NAME));
+		
+		// separator
+		layout.numColumns ++;
+		makeToolSeparator(this.toolbar);
+		
+		// grids
+		layout.numColumns ++;
+		this.gridsLabel = new Label(this.toolbar,SWT.NONE);
+		this.gridsLabel.setText(TuxGuitar.getProperty("matrix.grids"));
+		
+		layout.numColumns ++;
+		final Combo divisionsCombo = new Combo(this.toolbar, SWT.DROP_DOWN | SWT.READ_ONLY);
+		divisionsCombo.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false, true));
+		for(int i = 0; i < DIVISIONS.length; i ++){
+			divisionsCombo.add(Integer.toString(DIVISIONS[i]));
+			if(this.grids == DIVISIONS[i]){
+				divisionsCombo.select(i);
+			}
+		}
+		if(this.grids == 0){
+			divisionsCombo.select(0);
+		}
+		divisionsCombo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int index = divisionsCombo.getSelectionIndex();
+				if(index >= 0 && index < DIVISIONS.length){
+					setGrids(DIVISIONS[index]);
+				}
+			}
+		});
+		
+		// settings
+		layout.numColumns ++;
+		this.settings = new Button(this.toolbar, SWT.PUSH);
+		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
+		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
+		this.settings.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		this.settings.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				configure();
+			}
+		});
+		
+		this.toolbar.setLayout(layout);
+		this.toolbar.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
+	}
+	
+	private void makeToolSeparator(Composite parent){
+		Label separator = new Label(parent,SWT.SEPARATOR);
+		separator.setLayoutData(new GridData(20,20));
+	}
+	
+	private void loadDurationImage(boolean force) {
+		int duration = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getDuration().getValue();
+		if(force || this.duration != duration){
+			this.duration = duration;
+			this.durationLabel.setImage(TuxGuitar.instance().getIconManager().getDuration(this.duration));
+		}
+	}
+	
+	public void initEditor(){
+		this.selection = -1;
+		this.editor = new Composite(this.composite,SWT.DOUBLE_BUFFERED | SWT.BORDER  | SWT.H_SCROLL | SWT.V_SCROLL);
+		this.editor.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.editor.setLayout(new FillLayout());
+		this.editor.setFocus();
+		this.editor.addPaintListener(this.listener);
+		this.editor.addMouseListener(this.listener);
+		this.editor.addMouseMoveListener(this.listener);
+		this.editor.addMouseTrackListener(this.listener);
+		this.editor.getHorizontalBar().setIncrement(SCROLL_INCREMENT);
+		this.editor.getHorizontalBar().addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				redrawLocked();
+			}
+		});
+		this.editor.getVerticalBar().setIncrement(SCROLL_INCREMENT);
+		this.editor.getVerticalBar().addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				redrawLocked();
+			}
+		});
+	}
+	
+	protected void updateScroll(){
+		if( this.clientArea != null ){
+			int borderWidth = this.editor.getBorderWidth();
+			ScrollBar vBar = this.editor.getVerticalBar();
+			ScrollBar hBar = this.editor.getHorizontalBar();
+			vBar.setMaximum(Math.round(this.height + (borderWidth * 2)));
+			vBar.setThumb(Math.round(Math.min(this.height + (borderWidth * 2), this.clientArea.height)));
+			hBar.setMaximum(Math.round(this.width + (borderWidth * 2)));
+			hBar.setThumb(Math.round(Math.min(this.width + (borderWidth * 2), this.clientArea.width)));
+		}
+	}
+	
+	protected int getValueAt(float y){
+		if(this.clientArea == null || (y - BORDER_HEIGHT) < 0 || y + BORDER_HEIGHT > this.clientArea.height){
+			return -1;
+		}
+		int scroll = this.editor.getVerticalBar().getSelection();
+		int value = (this.maxNote -  ((int)(  (y + scroll - BORDER_HEIGHT)  / this.lineHeight)) );
+		return value;
+	}
+	
+	protected long getStartAt(float x){
+		TGMeasure measure = getMeasure();
+		float posX = (x + this.editor.getHorizontalBar().getSelection());
+		long start =(long) (measure.getStart() + (((posX - this.leftSpacing) * measure.getLength()) / (this.timeWidth * measure.getTimeSignature().getNumerator())));
+		return start;
+	}
+	
+	protected void paintEditor(TGPainter painter){
+		if(!TuxGuitar.instance().getPlayer().isRunning()){
+			this.resetPlayed();
+		}
+		
+		this.clientArea = this.editor.getClientArea();
+		
+		if( this.clientArea != null ){
+			TGImage buffer = getBuffer();
+			
+			this.width = this.bufferWidth;
+			this.height = (this.bufferHeight + (BORDER_HEIGHT *2));
+			
+			this.updateScroll();
+			int scrollX = this.editor.getHorizontalBar().getSelection();
+			int scrollY = this.editor.getVerticalBar().getSelection();
+			
+			painter.drawImage(buffer,-scrollX,(BORDER_HEIGHT - scrollY));
+			this.paintMeasure(painter,(-scrollX), (BORDER_HEIGHT - scrollY) );
+			this.paintBorders(painter,(-scrollX),0);
+			this.paintPosition(painter,(-scrollX),0);
+			this.paintSelection(painter, (-scrollX), (BORDER_HEIGHT - scrollY) );
+		}
+	}
+	
+	protected TGImage getBuffer(){
+		if( this.clientArea != null ){
+			this.bufferDisposer.update(this.clientArea.width, this.clientArea.height);
+			if(this.buffer == null || this.buffer.isDisposed()){
+				String[] names = null;
+				TGMeasure measure = getMeasure();
+				this.maxNote = 0;
+				this.minNote = 127;
+				if( TuxGuitar.instance().getSongManager().isPercussionChannel(measure.getTrack().getChannelId()) ){
+					names = new String[PERCUSSIONS.length];
+					for(int i = 0; i < names.length;i ++){
+						this.minNote = Math.min(this.minNote,PERCUSSIONS[i].getValue());
+						this.maxNote = Math.max(this.maxNote,PERCUSSIONS[i].getValue());
+						names[i] = PERCUSSIONS[names.length - i -1].getName();
+					}
+				}else{
+					for(int sNumber = 1; sNumber <= measure.getTrack().stringCount();sNumber ++){
+						TGString string = measure.getTrack().getString(sNumber);
+						this.minNote = Math.min(this.minNote,string.getValue());
+						this.maxNote = Math.max(this.maxNote,(string.getValue() + 20));
+					}
+					names = new String[this.maxNote - this.minNote + 1];
+					for(int i = 0; i < names.length;i ++){
+						names[i] = (NOTE_NAMES[ (this.maxNote - i) % 12] + ((this.maxNote - i) / 12 ) );
+					}
+				}
+				
+				int minimumNameWidth = 110;
+				int minimumNameHeight = 0;
+				TGPainter painter = new TGPainterImpl(new GC(this.dialog.getDisplay()));
+				painter.setFont(new TGFontImpl(this.config.getFont()));
+				for(int i = 0; i < names.length;i ++){
+					int fmWidth = painter.getFMWidth(names[i]);
+					if( fmWidth > minimumNameWidth ){
+						minimumNameWidth = fmWidth;
+					}
+					int fmHeight = painter.getFMHeight();
+					if( fmHeight > minimumNameHeight ){
+						minimumNameHeight = fmHeight;
+					}
+				}
+				painter.dispose();
+				
+				int cols = measure.getTimeSignature().getNumerator();
+				int rows = (this.maxNote - this.minNote);
+				
+				this.leftSpacing = minimumNameWidth + 10;
+				this.lineHeight = Math.max(minimumNameHeight,( (this.clientArea.height - (BORDER_HEIGHT * 2.0f))/ (rows + 1.0f)));
+				this.timeWidth = Math.max((10 * (TGDuration.SIXTY_FOURTH / measure.getTimeSignature().getDenominator().getValue())),( (this.clientArea.width-this.leftSpacing) / cols)  );
+				this.bufferWidth = this.leftSpacing + (this.timeWidth * cols);
+				this.bufferHeight = (this.lineHeight * (rows + 1));
+				this.buffer = new TGImageImpl(this.editor.getDisplay(),Math.round( this.bufferWidth),Math.round(this.bufferHeight));
+				
+				painter = this.buffer.createPainter();
+				painter.setFont(new TGFontImpl(this.config.getFont()));
+				painter.setForeground(new TGColorImpl(this.config.getColorForeground()));
+				for(int i = 0; i <= rows; i++){
+					painter.setBackground(new TGColorImpl(this.config.getColorLine( i % 2 ) ));
+					painter.initPath(TGPainter.PATH_FILL);
+					painter.setAntialias(false);
+					painter.addRectangle(0 ,(i * this.lineHeight),this.bufferWidth ,this.lineHeight);
+					painter.closePath();
+					painter.drawString(names[i],5,( Math.round( (i * this.lineHeight) ) +  Math.round(  (this.lineHeight - minimumNameHeight) / 2 )  ) );
+				}
+				for(int i = 0; i < cols; i ++){
+					float colX = this.leftSpacing + (i * this.timeWidth);
+					float divisionWidth = ( this.timeWidth / this.grids );
+					for( int j = 0; j < this.grids; j ++ ){
+						if( j == 0 ){
+							painter.setLineStyleSolid();
+						}else{
+							painter.setLineStyleDot();
+						}
+						painter.initPath();
+						painter.setAntialias(false);
+						painter.moveTo(Math.round( colX + (j * divisionWidth) ),0);
+						painter.lineTo(Math.round( colX + (j * divisionWidth) ),this.bufferHeight);
+						painter.closePath();
+					}
+				}
+				painter.dispose();
+			}
+		}
+		return this.buffer;
+	}
+	
+	protected void paintMeasure(TGPainter painter,float fromX, float fromY){
+		if( this.clientArea != null ){
+			TGMeasure measure = getMeasure();
+			if(measure != null){
+				Iterator it = measure.getBeats().iterator();
+				while(it.hasNext()){
+					TGBeat beat = (TGBeat)it.next();
+					paintBeat(painter, measure, beat, fromX, fromY);
+				}
+			}
+		}
+	}
+	
+	protected void paintBeat(TGPainter painter,TGMeasure measure,TGBeat beat,float fromX, float fromY){
+		if( this.clientArea != null ){
+			int minimumY = BORDER_HEIGHT;
+			int maximumY = (this.clientArea.height - BORDER_HEIGHT);
+			
+			for( int v = 0; v < beat.countVoices(); v ++ ){
+				TGVoice voice = beat.getVoice(v);
+				for( int i = 0 ; i < voice.countNotes() ; i ++){
+					TGNoteImpl note = (TGNoteImpl)voice.getNote(i);
+					float x1 = (fromX + this.leftSpacing + (((beat.getStart() - measure.getStart()) * (this.timeWidth * measure.getTimeSignature().getNumerator())) / measure.getLength()) + 1);
+					float y1 = (fromY + (((this.maxNote - this.minNote) - (note.getRealValue() - this.minNote)) * this.lineHeight) + 1 );
+					float x2 = (x1 + ((voice.getDuration().getTime() * this.timeWidth) / measure.getTimeSignature().getDenominator().getTime()) - 2 );
+					float y2 = (y1 + this.lineHeight - 2 );
+					
+					if( y1 >= maximumY || y2 <= minimumY){
+						continue;
+					}
+					
+					y1 = ( y1 < minimumY ? minimumY : y1 );
+					y2 = ( y2 > maximumY ? maximumY : y2 );
+					
+					if((x2 - x1) > 0 && (y2 - y1) > 0){
+						painter.setBackground(new TGColorImpl( (note.getBeatImpl().isPlaying(TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout()) ? this.config.getColorPlay():this.config.getColorNote() ) ));
+						painter.initPath(TGPainter.PATH_FILL);
+						painter.setAntialias(false);
+						painter.addRectangle(x1,y1, (x2 - x1), (y2 - y1));
+						painter.closePath();
+					}
+				}
+			}
+		}
+	}
+	
+	protected void paintBorders(TGPainter painter,float fromX, float fromY){
+		if( this.clientArea != null ){
+			painter.setBackground(new TGColorImpl(this.config.getColorBorder()));
+			painter.initPath(TGPainter.PATH_FILL);
+			painter.setAntialias(false);
+			painter.addRectangle(fromX,fromY,this.bufferWidth ,BORDER_HEIGHT);
+			painter.addRectangle(fromX,fromY + (this.clientArea.height - BORDER_HEIGHT),this.bufferWidth ,BORDER_HEIGHT);
+			painter.closePath();
+			
+			painter.initPath();
+			painter.setAntialias(false);
+			painter.addRectangle(fromX,fromY,this.width,this.clientArea.height);
+			painter.closePath();
+		}
+	}
+	
+	protected void paintPosition(TGPainter painter,float fromX, float fromY){
+		if( this.clientArea != null && !TuxGuitar.instance().getPlayer().isRunning()){
+			Caret caret = getCaret();
+			TGMeasure measure = getMeasure();
+			TGBeat beat = caret.getSelectedBeat();
+			if(beat != null){
+				float x = (((beat.getStart() - measure.getStart()) * (this.timeWidth * measure.getTimeSignature().getNumerator())) / measure.getLength());
+				float width = ((beat.getVoice(caret.getVoice()).getDuration().getTime() * this.timeWidth) / measure.getTimeSignature().getDenominator().getTime());
+				painter.setBackground(new TGColorImpl(this.config.getColorPosition()));
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.setAntialias(false);
+				painter.addRectangle(fromX + (this.leftSpacing + x),fromY , width,BORDER_HEIGHT);
+				painter.closePath();
+				
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.setAntialias(false);
+				painter.addRectangle(fromX + (this.leftSpacing + x),fromY + (this.clientArea.height - BORDER_HEIGHT), width,BORDER_HEIGHT);
+				painter.closePath();
+			}
+		}
+	}
+	
+	protected void paintSelection(TGPainter painter, float fromX, float fromY){
+		if( this.clientArea != null && !TuxGuitar.instance().getPlayer().isRunning()){
+			if( this.selection >= 0 ){
+				int x = Math.round( fromX );
+				int y = Math.round( fromY + ((this.maxNote - this.selection) * this.lineHeight)  );
+				int width = Math.round( this.bufferWidth );
+				int height = Math.round( this.lineHeight );
+				
+				painter.setAlpha(100);
+				painter.setBackground(new TGColorImpl(this.config.getColorLine(2)));
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.setAntialias(false);
+				painter.addRectangle(x,y,width,height);
+				painter.closePath();
+			}
+		}
+	}
+	
+	protected void updateSelection(float y){
+		if(!TuxGuitar.instance().getPlayer().isRunning()){
+			int previousSelection = this.selection;
+			this.selection = getValueAt(y);
+			
+			if( this.selection != previousSelection ){
+				this.redraw();
+			}
+		}
+	}
+	
+	protected void hit(float x, float y){
+		if(!TuxGuitar.instance().getPlayer().isRunning()){
+			TGMeasure measure = getMeasure();
+			Caret caret = getCaret();
+			int value = getValueAt(y);
+			long start = getStartAt(x);
+			
+			if(start >= measure.getStart() && start < (measure.getStart() + measure.getLength())){
+				caret.update(caret.getTrack().getNumber(),start,caret.getStringNumber());
+				TuxGuitar.instance().updateCache(true);
+			}
+			if(value >= this.minNote || value <= this.maxNote){
+				if(start >= measure.getStart()){
+					TGVoice voice = TuxGuitar.instance().getSongManager().getMeasureManager().getVoiceIn(measure, start, caret.getVoice());
+					if( voice != null ){
+						if(!removeNote(voice.getBeat(), value)){
+							addNote(voice.getBeat(), start, value);
+						}
+					}
+				}else{
+					play(value);
+				}
+			}
+		}
+	}
+	
+	private boolean removeNote(TGBeat beat,int value) {
+		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+		TGMeasure measure = getMeasure();
+		
+		for(int v = 0; v < beat.countVoices(); v ++){
+			TGVoice voice = beat.getVoice( v );
+			Iterator it = voice.getNotes().iterator();
+			while (it.hasNext()) {
+				TGNoteImpl note = (TGNoteImpl) it.next();
+				if (note.getRealValue() == value) {
+					caret.update(measure.getTrack().getNumber(),beat.getStart(),note.getString());
+					
+					//comienza el undoable
+					UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+					
+					TGSongManager manager = TuxGuitar.instance().getSongManager();
+					manager.getMeasureManager().removeNote(note);
+					
+					//termia el undoable
+					TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+					TuxGuitar.instance().getFileHistory().setUnsavedFile();
+					
+					this.afterAction();
+					
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	private boolean addNote(TGBeat beat,long start, int value) {
+		if(beat != null){
+			TGMeasure measure = getMeasure();
+			Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+			
+			List strings = measure.getTrack().getStrings();
+			for(int i = 0;i < strings.size();i ++){
+				TGString string = (TGString)strings.get(i);
+				if(value >= string.getValue()){
+					boolean emptyString = true;
+					
+					for(int v = 0; v < beat.countVoices(); v ++){
+						TGVoice voice = beat.getVoice( v );
+						Iterator it = voice.getNotes().iterator();
+						while (it.hasNext()) {
+							TGNoteImpl note = (TGNoteImpl) it.next();
+							if (note.getString() == string.getNumber()) {
+								emptyString = false;
+								break;
+							}
+						}
+					}
+					if(emptyString){
+						TGSongManager manager = TuxGuitar.instance().getSongManager();
+						
+						//comienza el undoable
+						UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+						
+						TGNote note = manager.getFactory().newNote();
+						note.setValue((value - string.getValue()));
+						note.setVelocity(caret.getVelocity());
+						note.setString(string.getNumber());
+						
+						TGDuration duration = manager.getFactory().newDuration();
+						caret.getDuration().copy(duration);
+						
+						manager.getMeasureManager().addNote(beat,note,duration,start,caret.getVoice());
+						
+						caret.moveTo(caret.getTrack(),caret.getMeasure(),note.getVoice().getBeat(),note.getString());
+						
+						//termia el undoable
+						TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+						TuxGuitar.instance().getFileHistory().setUnsavedFile();
+						
+						//reprodusco las notas en el pulso
+						TuxGuitar.instance().playBeat(caret.getSelectedBeat());
+						
+						this.afterAction();
+						
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+	
+	protected void afterAction() {
+		TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(getMeasure().getNumber());
+		TuxGuitar.instance().updateCache(true);
+		this.editor.redraw();
+	}
+	
+	protected void play(final int value){
+		new Thread(new Runnable() {
+			public void run() {
+				TGTrack tgTrack = getMeasure().getTrack();
+				TGChannel tgChannel = TuxGuitar.instance().getSongManager().getChannel(tgTrack.getChannelId());
+				if( tgChannel != null ){
+					int volume = TGChannel.DEFAULT_VOLUME;
+					int balance = TGChannel.DEFAULT_BALANCE;
+					int chorus = tgChannel.getChorus();
+					int reverb = tgChannel.getReverb();
+					int phaser = tgChannel.getPhaser();
+					int tremolo = tgChannel.getTremolo();
+					int channel = tgChannel.getChannelId();
+					int program = tgChannel.getProgram();
+					int bank = tgChannel.getBank();
+					int[][] beat = new int[][]{ new int[]{ (tgTrack.getOffset() + value) , TGVelocities.DEFAULT } };
+					TuxGuitar.instance().getPlayer().playBeat(channel,bank,program, volume, balance,chorus,reverb,phaser,tremolo,beat);
+				}
+			}
+		}).start();
+	}
+	
+	protected int loadGrids(){
+		int grids = TuxGuitar.instance().getConfig().getIntegerValue(TGConfigKeys.MATRIX_GRIDS);
+		// check if is valid value
+		for(int i = 0 ; i < DIVISIONS.length ; i ++ ){
+			if(grids == DIVISIONS[i]){
+				return grids;
+			}
+		}
+		return DIVISIONS[1];
+	}
+	
+	protected void setGrids(int grids){
+		this.grids = grids;
+		this.disposeBuffer();
+		this.redrawLocked();
+	}
+	
+	public int getGrids(){
+		return this.grids;
+	}
+	
+	protected TGMeasure getMeasure(){
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			TGMeasure measure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
+			if(measure != null){
+				return measure;
+			}
+		}
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure();
+	}
+	
+	protected Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+	public boolean isDisposed(){
+		return (this.dialog == null || this.dialog.isDisposed());
+	}
+	
+	protected void resetPlayed(){
+		this.playedBeat = null;
+		this.playedMeasure = -1;
+		this.playedTrack = -1;
+	}
+	
+	public void redrawLocked(){
+		if(!TuxGuitar.instance().isLocked()){
+			TuxGuitar.instance().lock();
+			this.redraw();
+			TuxGuitar.instance().unlock();
+		}
+	}
+	
+	public void redraw(){
+		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
+			this.editor.redraw();
+			this.loadDurationImage(false);
+		}
+	}
+	
+	public void redrawPlayingMode(){
+		if(!isDisposed() && !TuxGuitar.instance().isLocked() && TuxGuitar.instance().getPlayer().isRunning()){
+			TGMeasure measure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
+			TGBeat beat = TuxGuitar.instance().getEditorCache().getPlayBeat();
+			if(measure != null && beat != null){
+				int currentMeasure = measure.getNumber();
+				int currentTrack = measure.getTrack().getNumber();
+				boolean changed = (currentMeasure != this.playedMeasure || currentTrack != this.playedTrack);
+				if(changed){
+					this.resetPlayed();
+					this.editor.redraw();
+				}
+				else{
+					TGPainter painter = new TGPainterImpl(new GC(this.editor));
+					int scrollX = this.editor.getHorizontalBar().getSelection();
+					int scrollY = this.editor.getVerticalBar().getSelection();
+					if(this.playedBeat != null){
+						this.paintBeat(painter,measure,this.playedBeat,(-scrollX), (BORDER_HEIGHT - scrollY));
+					}
+					this.paintBeat(painter,measure,beat,(-scrollX), (BORDER_HEIGHT - scrollY));
+					painter.dispose();
+				}
+				this.playedMeasure = currentMeasure;
+				this.playedTrack = currentTrack;
+				this.playedBeat = beat;
+			}
+		}
+	}
+	
+	protected void configure(){
+		this.config.configure(this.dialog);
+		this.disposeBuffer();
+		this.redrawLocked();
+	}
+	
+	private void layout(){
+		if( !isDisposed() ){
+			this.toolbar.layout();
+			this.editor.layout();
+			this.composite.layout(true,true);
+		}
+	}
+	
+	public void loadIcons(){
+		if( !isDisposed() ){
+			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+			this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
+			this.loadDurationImage(true);
+			this.layout();
+			this.redraw();
+		}
+	}
+	
+	public void loadProperties() {
+		if( !isDisposed() ){
+			this.dialog.setText(TuxGuitar.getProperty("matrix.editor"));
+			this.gridsLabel.setText(TuxGuitar.getProperty("matrix.grids"));
+			this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
+			this.disposeBuffer();
+			this.layout();
+			this.redraw();
+		}
+	}
+	
+	public void dispose(){
+		if(!isDisposed()){
+			this.dialog.dispose();
+		}
+	}
+	
+	protected void disposeBuffer(){
+		if(this.buffer != null && !this.buffer.isDisposed()){
+			this.buffer.dispose();
+			this.buffer = null;
+		}
+	}
+	
+	protected void dispose(Resource[] resources){
+		if(resources != null){
+			for(int i = 0; i < resources.length; i ++){
+				dispose(resources[i]);
+			}
+		}
+	}
+	
+	protected void dispose(Resource resource){
+		if(resource != null){
+			resource.dispose();
+		}
+	}
+	
+	protected void disposeAll(){
+		this.disposeBuffer();
+		this.config.dispose();
+	}
+	
+	protected Composite getEditor(){
+		return this.editor;
+	}
+	
+	protected class BufferDisposer{
+		private int numerator;
+		private int denominator;
+		private int track;
+		private boolean percussion;
+		
+		private int width;
+		private int height;
+		
+		public void update(int width, int height){
+			TGMeasure measure = getMeasure();
+			int track = measure.getTrack().getNumber();
+			int numerator = measure.getTimeSignature().getNumerator();
+			int denominator = measure.getTimeSignature().getDenominator().getValue();
+			boolean percussion = TuxGuitar.instance().getSongManager().isPercussionChannel(measure.getTrack().getChannelId());
+			if(width != this.width || height != this.height || this.track != track || this.numerator != numerator || this.denominator != denominator || this.percussion != percussion){
+				disposeBuffer();
+			}
+			this.track = track;
+			this.numerator = numerator;
+			this.denominator = denominator;
+			this.percussion = percussion;
+			this.width = width;
+			this.height = height;
+		}
+	}
+	
+	protected class DisposeListenerImpl implements DisposeListener{
+		public void widgetDisposed(DisposeEvent e) {
+			disposeAll();
+		}
+	}
+	
+	protected class MatrixListener implements PaintListener,MouseListener,MouseMoveListener,MouseTrackListener {
+		
+		public MatrixListener(){
+			super();
+		}
+		
+		public void paintControl(PaintEvent e) {
+			if(!TuxGuitar.instance().isLocked()){
+				TuxGuitar.instance().lock();
+				TGPainter painter = new TGPainterImpl(e.gc);
+				paintEditor(painter);
+				TuxGuitar.instance().unlock();
+			}
+		}
+		
+		public void mouseUp(MouseEvent e) {
+			getEditor().setFocus();
+			if(e.button == 1){
+				if(!TuxGuitar.instance().isLocked() && !TGActionLock.isLocked()){
+					TGActionLock.lock();
+					hit(e.x,e.y);
+					TGActionLock.unlock();
+				}
+			}
+		}
+		
+		public void mouseMove(MouseEvent e) {
+			if(!TuxGuitar.instance().isLocked() && !TGActionLock.isLocked()){
+				updateSelection(e.y);
+			}
+		}
+		
+		public void mouseExit(MouseEvent e) {
+			if(!TuxGuitar.instance().isLocked() && !TGActionLock.isLocked()){
+				updateSelection(-1);
+			}
+		}
+		
+		public void mouseEnter(MouseEvent e) {
+			if(!TuxGuitar.instance().isLocked() && !TGActionLock.isLocked()){
+				redrawLocked();
+			}
+		}
+		
+		public void mouseDoubleClick(MouseEvent e) {
+			// TODO Auto-generated method stub
+		}
+		
+		public void mouseDown(MouseEvent e) {
+			// TODO Auto-generated method stub
+		}
+		
+		public void mouseHover(MouseEvent e) {
+			// TODO Auto-generated method stub
+		}
+	}
+	
+	public void doRedraw(int type) {
+		if( type == TGRedrawListener.NORMAL ){
+			this.redraw();
+		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
+			this.redrawPlayingMode();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/piano/Piano.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/piano/Piano.java
new file mode 100644
index 0000000..94e479c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/piano/Piano.java
@@ -0,0 +1,611 @@
+package org.herac.tuxguitar.app.editors.piano;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.caret.GoLeftAction;
+import org.herac.tuxguitar.app.action.impl.caret.GoRightAction;
+import org.herac.tuxguitar.app.action.impl.duration.DecrementDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.IncrementDurationAction;
+import org.herac.tuxguitar.app.action.impl.tools.ScaleAction;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGImageImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.control.TGNoteImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class Piano extends Composite{
+	
+	private static final boolean TYPE_NOTES[] = new boolean[]{true,false,true,false,true,true,false,true,false,true,false,true};
+	private static final int NATURAL_NOTES = 7;
+	private static final int MAX_OCTAVES = 8;
+	private static final int NATURAL_WIDTH = 15;
+	private static final int SHARP_WIDTH = 8;
+	private static final int NATURAL_HEIGHT = 60;
+	private static final int SHARP_HEIGHT = 40;
+	
+	private int duration;
+	private boolean changes;
+	private PianoListener listener;
+	private PianoConfig config;
+	private Composite pianoComposite;
+	private Composite toolComposite;
+	private Label durationLabel;
+	private Label scaleName;
+	private Button scale;
+	private Button settings;
+	protected TGBeat beat;
+	protected TGBeat externalBeat;
+	protected TGImage image;
+	
+	public Piano(Composite parent, int style) {
+		super(parent, style);
+		this.setLayout(new GridLayout());
+		this.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.listener =  new PianoListener();
+		this.config = new PianoConfig();
+		this.config.load();
+		this.initToolBar();
+		this.makePiano();
+		this.loadIcons();
+		this.loadProperties();
+		
+		TuxGuitar.instance().getKeyBindingManager().appendListenersTo(this.toolComposite);
+		TuxGuitar.instance().getKeyBindingManager().appendListenersTo(this.pianoComposite);
+	}
+	
+	private void initToolBar() {
+		GridLayout layout = new GridLayout();
+		layout.makeColumnsEqualWidth = false;
+		layout.numColumns = 0;
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		
+		this.toolComposite = new Composite(this, SWT.NONE);
+		
+		// position
+		layout.numColumns ++;
+		Button goLeft = new Button(this.toolComposite, SWT.ARROW | SWT.LEFT);
+		goLeft.addSelectionListener(new TGActionProcessor(GoLeftAction.NAME));
+		
+		layout.numColumns ++;
+		Button goRight = new Button(this.toolComposite, SWT.ARROW | SWT.RIGHT);
+		goRight.addSelectionListener(new TGActionProcessor(GoRightAction.NAME));
+		
+		// separator
+		layout.numColumns ++;
+		makeToolSeparator(this.toolComposite);
+		
+		// duration
+		layout.numColumns ++;
+		Button decrement = new Button(this.toolComposite, SWT.ARROW | SWT.MIN);
+		decrement.addSelectionListener(new TGActionProcessor(DecrementDurationAction.NAME));
+		
+		layout.numColumns ++;
+		this.durationLabel = new Label(this.toolComposite, SWT.BORDER);
+		
+		layout.numColumns ++;
+		Button increment = new Button(this.toolComposite, SWT.ARROW | SWT.MAX);
+		increment.addSelectionListener(new TGActionProcessor(IncrementDurationAction.NAME));
+		
+		// separator
+		layout.numColumns ++;
+		makeToolSeparator(this.toolComposite);
+		
+		// scale
+		layout.numColumns ++;
+		this.scale = new Button(this.toolComposite, SWT.PUSH);
+		this.scale.setText(TuxGuitar.getProperty("scale"));
+		this.scale.addSelectionListener(new TGActionProcessor(ScaleAction.NAME));
+		
+		// scale name
+		layout.numColumns ++;
+		this.scaleName = new Label(this.toolComposite, SWT.LEFT);
+		
+		// settings
+		layout.numColumns ++;
+		this.settings = new Button(this.toolComposite, SWT.PUSH);
+		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
+		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
+		this.settings.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		this.settings.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				configure();
+			}
+		});
+		
+		this.toolComposite.setLayout(layout);
+		this.toolComposite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
+	}
+	
+	private void makeToolSeparator(Composite parent){
+		Label separator = new Label(parent,SWT.SEPARATOR);
+		separator.setLayoutData(new GridData(20,20));
+	}
+	
+	private void loadDurationImage(boolean force) {
+		int duration = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getDuration().getValue();
+		if(force || this.duration != duration){
+			this.duration = duration;
+			this.durationLabel.setImage(TuxGuitar.instance().getIconManager().getDuration(this.duration));
+		}
+	}
+	
+	private void loadScaleName() {
+		int scaleKey = TuxGuitar.instance().getScaleManager().getSelectionKey();
+		int scaleIndex = TuxGuitar.instance().getScaleManager().getSelectionIndex();
+		String key = TuxGuitar.instance().getScaleManager().getKeyName( scaleKey );
+		String name = TuxGuitar.instance().getScaleManager().getScaleName( scaleIndex );
+		this.scaleName.setText( ( key != null && name != null ) ? ( key + " - " + name ) : "" );
+		this.scaleName.pack();
+	}
+	
+	private void makePiano(){
+		this.image = makePianoImage();
+		this.pianoComposite = new Composite(this,SWT.BORDER | SWT.DOUBLE_BUFFERED);
+		this.pianoComposite.setLayout(new GridLayout());
+		this.pianoComposite.setLayoutData(new GridData((NATURAL_WIDTH * (MAX_OCTAVES * NATURAL_NOTES) ),NATURAL_HEIGHT));
+		this.pianoComposite.addPaintListener(this.listener);
+		this.pianoComposite.addMouseListener(this.listener);
+		this.pianoComposite.setFocus();
+	}
+	
+	/**
+	 * Crea la imagen del piano
+	 *
+	 * @return
+	 */
+	private TGImage makePianoImage(){
+		TGImage image = new TGImageImpl(getDisplay(),(NATURAL_WIDTH * (MAX_OCTAVES * NATURAL_NOTES) ),NATURAL_HEIGHT);
+		TGPainter painter = image.createPainter();
+		
+		int x = 0;
+		int y = 0;
+		painter.setBackground(new TGColorImpl(this.config.getColorNatural()));
+		painter.initPath(TGPainter.PATH_FILL);
+		painter.addRectangle(x,y,(NATURAL_WIDTH * (MAX_OCTAVES * NATURAL_NOTES) ),NATURAL_HEIGHT);
+		painter.closePath();
+		for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){
+			
+			if(TYPE_NOTES[i % TYPE_NOTES.length]){
+				painter.setForeground(new TGColorImpl(this.config.getColorNotNatural()));
+				painter.initPath();
+				painter.setAntialias(false);
+				painter.addRectangle(x,y,NATURAL_WIDTH,NATURAL_HEIGHT);
+				painter.closePath();
+				x += NATURAL_WIDTH;
+			}else{
+				painter.setBackground(new TGColorImpl(this.config.getColorNotNatural()));
+				painter.initPath(TGPainter.PATH_FILL);
+				painter.setAntialias(false);
+				painter.addRectangle(x - (SHARP_WIDTH / 2),y,SHARP_WIDTH,SHARP_HEIGHT);
+				painter.closePath();
+			}
+		}
+		paintScale(painter);
+		
+		painter.dispose();
+		return image;
+	}
+	
+	/**
+	 * Pinta la nota a partir del indice
+	 * 	 
+	 * @param gc
+	 * @param value
+	 */
+	private void paintScale(TGPainter painter){
+		painter.setBackground(new TGColorImpl(this.config.getColorScale()));
+		painter.setForeground(new TGColorImpl(this.config.getColorScale()));
+		int posX = 0;
+		
+		for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){
+			int width = 0;
+			
+			if(TYPE_NOTES[i % TYPE_NOTES.length]){
+				width = NATURAL_WIDTH;
+				if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
+					width -= ((SHARP_WIDTH / 2));
+				}
+				if(!TYPE_NOTES[(i + 1)  % TYPE_NOTES.length]){
+					width -= ((SHARP_WIDTH / 2));
+				}
+			}else{
+				width = SHARP_WIDTH;
+			}
+			
+			if(TuxGuitar.instance().getScaleManager().getScale().getNote(i)){
+				if(TYPE_NOTES[i % TYPE_NOTES.length] ){
+					int x = posX;
+					if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
+						x -= ((SHARP_WIDTH / 2));
+					}
+					
+					int size = SHARP_WIDTH;
+					painter.initPath(TGPainter.PATH_FILL);
+					painter.setAntialias(false);
+					painter.addRectangle( (x + 1 + (((NATURAL_WIDTH - size) / 2))) ,(NATURAL_HEIGHT - size - (((NATURAL_WIDTH - size) / 2))),size,size);
+					painter.closePath();
+				}else{
+					painter.initPath(TGPainter.PATH_FILL);
+					painter.setAntialias(false);
+					painter.addRectangle(posX + 1, SHARP_HEIGHT - SHARP_WIDTH + 1,SHARP_WIDTH - 2,SHARP_WIDTH - 2);
+					painter.closePath();
+				}
+			}
+			
+			posX += width;
+		}
+	}
+	
+	/**
+	 * Pinta la nota a partir del indice
+	 * 	 
+	 * @param gc
+	 * @param value
+	 */
+	protected void paintNote(TGPainterImpl painter,int value){
+		painter.setBackground(new TGColorImpl(this.config.getColorNote()));
+		int posX = 0;
+		int y = 0;
+		
+		for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){
+			int width = 0;
+			
+			if(TYPE_NOTES[i % TYPE_NOTES.length]){
+				width = NATURAL_WIDTH;
+				if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
+					width -= ((SHARP_WIDTH / 2));
+				}
+				if(!TYPE_NOTES[(i + 1)  % TYPE_NOTES.length]){
+					width -= ((SHARP_WIDTH / 2));
+				}
+			}else{
+				width = SHARP_WIDTH;
+			}
+			
+			if(i == value){
+				if(TYPE_NOTES[i % TYPE_NOTES.length]){
+					painter.initPath(TGPainter.PATH_FILL);
+					painter.setAntialias(false);
+					painter.addRectangle(posX + 1,y + 1,width - 1,SHARP_HEIGHT);
+					
+					int x = posX;
+					if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
+						x -= ((SHARP_WIDTH / 2));
+					}
+					painter.addRectangle(x + 1,(y + SHARP_HEIGHT) + 1,NATURAL_WIDTH - 1,(NATURAL_HEIGHT - SHARP_HEIGHT) - 1);
+					painter.closePath();
+				}else{
+					painter.initPath(TGPainter.PATH_FILL);
+					painter.setAntialias(false);
+					painter.addRectangle(posX + 1,y + 1,width - 1,SHARP_HEIGHT - 1);
+					painter.closePath();
+				}
+				
+			}
+			
+			posX += width;
+		}
+	}
+	
+	/**
+	 * Retorna el indice de la nota seleccionada
+	 * 
+	 * @param point
+	 * @return
+	 */
+	private int getSelection(Point point){
+		int posX = 0;
+		
+		for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){
+			int width = 0;
+			
+			if(TYPE_NOTES[i % TYPE_NOTES.length]){
+				width = NATURAL_WIDTH;
+				if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
+					width -= ((SHARP_WIDTH / 2));
+				}
+				if(!TYPE_NOTES[(i + 1)  % TYPE_NOTES.length]){
+					width -= ((SHARP_WIDTH / 2));
+				}
+			}else{
+				width = SHARP_WIDTH;
+			}
+			
+			if(point.x >= posX && point.x < (posX + width)  ){
+				return i;
+			}
+			
+			posX += width;
+		}
+		return -1;
+	}
+	
+	protected void hit(int x, int y) {
+		int value = getSelection(new Point(x,y));
+		
+		if (!removeNote(value)) {
+			addNote(value);
+		}
+	}
+	
+	private boolean removeNote(int value) {
+		if(this.beat != null){
+			for(int v = 0; v < this.beat.countVoices(); v ++){
+				TGVoice voice = this.beat.getVoice( v );
+				Iterator it = voice.getNotes().iterator();
+				while (it.hasNext()) {
+					TGNote note = (TGNote) it.next();
+					if (getRealNoteValue(note) == value) {
+						//comienza el undoable
+						UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+						
+						TGSongManager manager = TuxGuitar.instance().getSongManager();
+						manager.getMeasureManager().removeNote(note);
+						
+						//termia el undoable
+						TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+						TuxGuitar.instance().getFileHistory().setUnsavedFile();
+						
+						return true;
+					}
+				}
+			}
+		}
+		return false;
+	}
+	
+	private boolean addNote(int value) {
+		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+		
+		List strings = caret.getTrack().getStrings();
+		for(int i = 0;i < strings.size();i ++){
+			TGString string = (TGString)strings.get(i);
+			if(value >= string.getValue()){
+				boolean emptyString = true;
+				
+				if(this.beat != null){
+					for(int v = 0; v < this.beat.countVoices(); v ++){
+						TGVoice voice = this.beat.getVoice( v );
+						Iterator it = voice.getNotes().iterator();
+						while (it.hasNext()) {
+							TGNoteImpl note = (TGNoteImpl) it.next();
+							if (note.getString() == string.getNumber()) {
+								emptyString = false;
+								break;
+							}
+						}
+					}
+				}
+				if(emptyString){
+					TGSongManager manager = TuxGuitar.instance().getSongManager();
+					
+					//comienza el undoable
+					UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+					
+					TGNote note = manager.getFactory().newNote();
+					note.setValue((value - string.getValue()));
+					note.setVelocity(caret.getVelocity());
+					note.setString(string.getNumber());
+					
+					TGDuration duration = manager.getFactory().newDuration();
+					caret.getDuration().copy(duration);
+					
+					manager.getMeasureManager().addNote(caret.getMeasure(),caret.getPosition(),note,duration,caret.getVoice());
+					
+					//termia el undoable
+					TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+					TuxGuitar.instance().getFileHistory().setUnsavedFile();
+					
+					//reprodusco las notas en el pulso
+					TuxGuitar.instance().playBeat(caret.getSelectedBeat());
+					
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	protected void afterAction() {
+		TGMeasureHeader measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().getHeader();
+		TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(measure.getNumber());
+		TuxGuitar.instance().updateCache(true);
+	}
+	
+	protected int getRealNoteValue(TGNote note){
+		TGVoice voice = note.getVoice();
+		if( voice != null ){
+			TGBeat beat = voice.getBeat();
+			if( beat != null ){
+				TGMeasure measure = beat.getMeasure();
+				if( measure != null ){
+					TGTrack track = measure.getTrack();
+					if( track != null ){
+						return ( note.getValue() + track.getString( note.getString() ).getValue() );
+					}
+				}
+			}
+		}
+		// If note have no parents, uses current track strings.
+		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+		TGTrack track = caret.getTrack();
+		if( track != null ){
+			return ( note.getValue() + track.getString( note.getString() ).getValue() );
+		}
+		return 0;
+	}
+	
+	public boolean hasChanges(){
+		return this.changes;
+	}
+	
+	public void setChanges(boolean changes){
+		this.changes = changes;
+	}
+	
+	public void setExternalBeat(TGBeat externalBeat){
+		this.externalBeat = externalBeat;
+	}
+	
+	public TGBeat getExternalBeat(){
+		return this.externalBeat;
+	}
+	
+	protected void updateEditor(){
+		if(isVisible()){
+			if(hasChanges()){
+				this.image.dispose();
+				this.image = makePianoImage();
+			}
+			if(TuxGuitar.instance().getPlayer().isRunning()){
+				this.beat = TuxGuitar.instance().getEditorCache().getPlayBeat();
+			}else if(this.externalBeat != null){
+				this.beat = this.externalBeat;
+			}else{
+				this.beat = TuxGuitar.instance().getEditorCache().getEditBeat();
+			}
+		}
+	}
+	
+	public void redraw() {
+		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
+			super.redraw();
+			this.pianoComposite.redraw();
+			this.loadDurationImage(false);
+		}
+	}
+	
+	public void redrawPlayingMode(){
+		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
+			this.pianoComposite.redraw();
+		}
+	}
+	
+	public void dispose(){
+		super.dispose();
+		this.image.dispose();
+		this.config.dispose();
+	}
+	
+	public void loadProperties(){
+		this.scale.setText(TuxGuitar.getProperty("scale"));
+		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
+		this.loadScaleName();
+		this.layout(true,true);
+	}
+	
+	public void loadIcons(){
+		this.getShell().setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
+		this.loadDurationImage(true);
+		this.layout(true,true);
+	}
+	
+	public void loadScale(){
+		this.loadScaleName();
+		this.setChanges(true);
+	}
+	
+	protected void configure(){
+		this.config.configure(getShell());
+		this.setChanges(true);
+		this.redraw();
+	}
+	
+	public Composite getPianoComposite() {
+		return this.pianoComposite;
+	}
+	
+	private class PianoListener implements PaintListener,MouseListener {
+		
+		public PianoListener(){
+			super();
+		}
+		
+		public void paintControl(PaintEvent e) {
+			if(!TuxGuitar.instance().isLocked()){
+				TuxGuitar.instance().lock();
+				updateEditor();
+				
+				TGPainterImpl painter = new TGPainterImpl(e.gc);
+				painter.drawImage(Piano.this.image,0,0);
+				
+				//pinto notas
+				if(Piano.this.beat != null){
+					for(int v = 0; v < Piano.this.beat.countVoices(); v ++){
+						TGVoice voice = Piano.this.beat.getVoice( v );
+						Iterator it = voice.getNotes().iterator();
+						while(it.hasNext()){
+							TGNote note = (TGNote)it.next();
+							paintNote(painter, getRealNoteValue( note ) );
+						}
+					}
+				}
+				TuxGuitar.instance().unlock();
+			}
+		}
+		
+		public void mouseUp(MouseEvent e) {
+			getPianoComposite().setFocus();
+			if(e.button == 1){
+				if(!TuxGuitar.instance().getPlayer().isRunning() && !TuxGuitar.instance().isLocked() && !TGActionLock.isLocked()){
+					TGActionLock.lock();
+					if( getExternalBeat() == null ){
+						hit(e.x, e.y);
+					}else{
+						setExternalBeat( null );
+					}
+					afterAction();
+					TGActionLock.unlock();
+				}
+			}else{
+				TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
+						TGActionManager.getInstance().execute(GoRightAction.NAME);
+					}
+				});
+			}
+		}
+		
+		public void mouseDoubleClick(MouseEvent e) {
+			//Not implemented
+		}
+		
+		public void mouseDown(MouseEvent e) {
+			//Not implemented
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/piano/PianoConfig.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/piano/PianoConfig.java
new file mode 100644
index 0000000..37f3aae
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/piano/PianoConfig.java
@@ -0,0 +1,240 @@
+package org.herac.tuxguitar.app.editors.piano;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.ColorDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfigDefaults;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.system.config.TGConfigManager;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.util.properties.TGProperties;
+
+public class PianoConfig {
+	
+	private static final int MINIMUM_CONTROL_WIDTH = 180;
+	private static final int MINIMUM_BUTTON_WIDTH = 80;
+	private static final int MINIMUM_BUTTON_HEIGHT = 25;
+	
+	private Color colorNatural;
+	private Color colorNotNatural;
+	private Color colorNote;
+	private Color colorScale;
+	
+	public PianoConfig(){
+		super();
+	}
+	
+	public Color getColorNatural() {
+		return this.colorNatural;
+	}
+	
+	public Color getColorNotNatural() {
+		return this.colorNotNatural;
+	}
+	
+	public Color getColorNote() {
+		return this.colorNote;
+	}
+	
+	public Color getColorScale() {
+		return this.colorScale;
+	}
+	
+	public void load(){
+		Display display = TuxGuitar.instance().getDisplay();
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		this.colorNatural = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_KEY_NATURAL));
+		this.colorNotNatural = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL));
+		this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_NOTE));
+		this.colorScale = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_SCALE));
+	}
+	
+	public void defaults(){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		TGProperties defaults = TGConfigDefaults.createDefaults();
+		config.setValue(TGConfigKeys.PIANO_COLOR_KEY_NATURAL, defaults.getValue(TGConfigKeys.PIANO_COLOR_KEY_NATURAL));
+		config.setValue(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL, defaults.getValue(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL));
+		config.setValue(TGConfigKeys.PIANO_COLOR_NOTE, defaults.getValue(TGConfigKeys.PIANO_COLOR_NOTE));
+		config.setValue(TGConfigKeys.PIANO_COLOR_SCALE, defaults.getValue(TGConfigKeys.PIANO_COLOR_SCALE));
+	}
+	
+	public void save(RGB rgbNatural,RGB rgbNotNatural,RGB rgbNote,RGB rgbScale){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		config.setValue(TGConfigKeys.PIANO_COLOR_KEY_NATURAL,rgbNatural);
+		config.setValue(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL,rgbNotNatural);
+		config.setValue(TGConfigKeys.PIANO_COLOR_NOTE,rgbNote);
+		config.setValue(TGConfigKeys.PIANO_COLOR_SCALE,rgbScale);
+	}
+	
+	public void dispose(){
+		this.colorNatural.dispose();
+		this.colorNotNatural.dispose();
+		this.colorNote.dispose();
+		this.colorScale.dispose();
+	}
+	
+	public void configure(Shell shell) {
+		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("piano.settings"));
+		
+		// ----------------------------------------------------------------------
+		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout(2, false));
+		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		group.setText(TuxGuitar.getProperty("piano.settings"));
+		
+		// Color
+		final RGB rgbNatural = getColorChooser(group,TuxGuitar.getProperty("piano.natural-key-color"), this.colorNatural.getRGB());
+		final RGB rgbNotNatural = getColorChooser(group,TuxGuitar.getProperty("piano.not-natural-key-color"), this.colorNotNatural.getRGB());
+		final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("piano.note-color"), this.colorNote.getRGB());
+		final RGB rgbScale = getColorChooser(group,TuxGuitar.getProperty("piano.scale-note-color"), this.colorScale.getRGB());
+		
+		// ------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(3, false));
+		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
+		
+		final Button buttonDefaults = new Button(buttons, SWT.PUSH);
+		buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
+		buttonDefaults.setLayoutData(getButtonData());
+		buttonDefaults.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+				defaults();
+				applyChanges();
+			}
+		});
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+				
+				save(rgbNatural, rgbNotNatural,rgbNote, rgbScale);
+				applyChanges();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	protected void applyChanges(){
+		this.dispose();
+		this.load();
+	}
+	
+	private RGB getColorChooser(final Composite parent,String title,RGB rgb){
+		Label label = new Label(parent, SWT.NULL);
+		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
+		label.setText(title);
+		
+		ButtonColor button = new ButtonColor(parent, SWT.PUSH, TuxGuitar.getProperty("choose"));
+		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
+		button.loadColor(rgb);
+		
+		return button.getValue();
+	}
+	
+	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
+		GridData data = new GridData();
+		data.minimumWidth = minimumWidth;
+		data.horizontalAlignment = horizontalAlignment;
+		data.verticalAlignment = SWT.DEFAULT;
+		data.grabExcessHorizontalSpace = true;
+		data.grabExcessVerticalSpace = true;
+		return data;
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
+		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
+		return data;
+	}
+	
+	private class ButtonColor {
+		protected Button button;
+		protected Color color;
+		protected RGB value;
+		
+		public ButtonColor(Composite parent, int style, String text){
+			this.value = new RGB(0,0,0);
+			this.button = new Button(parent, style);			
+			this.button.setText(text);
+			this.addListeners();
+		}
+		
+		protected void setLayoutData(Object layoutData){
+			this.button.setLayoutData(layoutData);
+		}
+		
+		protected void loadColor(RGB rgb){
+			this.value.red = rgb.red;
+			this.value.green = rgb.green;
+			this.value.blue = rgb.blue;
+			
+			Color color = new Color(this.button.getDisplay(), this.value);
+			this.button.setForeground(color);
+			this.disposeColor();
+			this.color = color;
+		}
+		
+		protected void disposeColor(){
+			if(this.color != null && !this.color.isDisposed()){
+				this.color.dispose();
+				this.color = null;
+			}
+		}
+		
+		private void addListeners(){
+			this.button.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent event) {
+					ColorDialog dlg = new ColorDialog(ButtonColor.this.button.getShell());
+					dlg.setRGB(ButtonColor.this.value);
+					dlg.setText(TuxGuitar.getProperty("choose-color"));
+					RGB result = dlg.open();
+					if (result != null) {
+						ButtonColor.this.loadColor(result);
+					}
+				}
+			});
+			this.button.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent e) {
+					ButtonColor.this.disposeColor();
+				}
+			});
+		}
+		
+		protected RGB getValue(){
+			return this.value;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/Caret.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/Caret.java
new file mode 100644
index 0000000..140cca2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/Caret.java
@@ -0,0 +1,391 @@
+/*
+ * Created on 30-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.tab;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.MidiTickUtil;
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGResource;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackSpacing;
+import org.herac.tuxguitar.song.managers.TGMeasureManager;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGVelocities;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class Caret {
+	private Tablature tablature;
+	private TGTrackImpl selectedTrack;
+	private TGMeasureImpl selectedMeasure;
+	private TGBeat selectedBeat;
+	private TGNote selectedNote;
+	private TGDuration selectedDuration;
+	private long position;
+	private int string;
+	private int voice;
+	private int velocity;
+	private boolean restBeat;
+	private boolean changes;
+	
+	private TGColor color1;
+	private TGColor color2;
+	
+	public Caret(Tablature tablature) {
+		this.tablature = tablature;
+		this.selectedDuration = getSongManager().getFactory().newDuration();
+		this.string = 1;
+		this.velocity = TGVelocities.DEFAULT;
+		this.changes = false;
+	}
+	
+	public synchronized void update(){
+		int trackNumber = (this.selectedTrack != null)?this.selectedTrack.getNumber():1;
+		update(trackNumber,this.position,this.string);
+	}
+	
+	public synchronized void update(int trackNumber){
+		update(trackNumber,this.position,this.string);
+	}
+	
+	public synchronized void update(int trackNumber,long position,int string){
+		update(trackNumber, position, string,getVelocity());
+	}
+	
+	public synchronized void update(int trackNumber,long position,int string,int velocity) {
+		long realPosition = ((TuxGuitar.instance().getPlayer().isRunning())?MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition()):position);
+		TGTrackImpl track = findTrack(trackNumber); 
+		TGMeasureImpl measure = findMeasure(realPosition,track);
+		TGBeat beat = findBeat(realPosition,measure);
+		if(track != null && measure != null && beat != null){
+			moveTo(track, measure, beat,string);
+		}
+		setVelocity(velocity);
+	}
+	
+	public void moveTo(TGTrackImpl selectedTrack, TGMeasureImpl selectedMeasure, TGBeat selectedBeat,int string) {
+		this.selectedTrack = selectedTrack;
+		this.selectedMeasure = selectedMeasure;
+		this.selectedBeat = selectedBeat;
+		this.string = string;
+		this.updatePosition();
+		this.updateDuration();
+		this.updateString();
+		this.updateNote();
+		this.updateBeat();
+		this.checkTransport();
+		this.setChanges(true);
+	}
+	
+	private TGTrackImpl findTrack(int number){
+		TGTrackImpl track = (TGTrackImpl)getSongManager().getTrack(number);
+		if(track == null){
+			track = (TGTrackImpl)getSongManager().getFirstTrack();
+		}
+		return track;
+	}
+	
+	private TGMeasureImpl findMeasure(long position,TGTrackImpl track){
+		TGMeasureImpl measure = null;
+		if(track != null){
+			measure = (TGMeasureImpl)getSongManager().getTrackManager().getMeasureAt(track,position);
+			if(measure == null){
+				measure = (TGMeasureImpl)getSongManager().getTrackManager().getFirstMeasure(track);
+			}
+		}
+		return measure;
+	}
+	
+	private TGBeat findBeat(long position,TGMeasureImpl measure){
+		TGBeat beat = null;
+		if(measure != null){
+			TGMeasureManager manager = getSongManager().getMeasureManager();
+			TGVoice voice = manager.getVoiceIn(measure, position, getVoice());
+			if( voice != null ){
+				beat = voice.getBeat();
+			}
+			if (beat == null) {
+				beat = manager.getFirstBeat(measure.getBeats());
+			}
+		}
+		return beat;
+	}
+	
+	public synchronized void goToTickPosition(){
+		long start = MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition());
+		this.update(this.selectedTrack.getNumber(),start,this.string);
+		this.setChanges(true);
+	}
+	
+	public void paintCaret(TGLayout layout, TGPainter painter) {
+		if(!TuxGuitar.instance().getPlayer().isRunning()){
+			if (this.selectedMeasure != null && !this.selectedMeasure.isOutOfBounds() && this.selectedBeat instanceof TGBeatImpl) {
+				TGBeatImpl beat = (TGBeatImpl)this.selectedBeat;
+				if( (layout.getStyle() & TGLayout.DISPLAY_TABLATURE) != 0){
+					boolean expectedVoice = (getSelectedNote() == null || getSelectedNote().getVoice().getIndex() == getVoice());
+					int stringSpacing = this.tablature.getViewLayout().getStringSpacing();
+					int leftSpacing = beat.getMeasureImpl().getHeaderImpl().getLeftSpacing(layout);
+					int x = this.selectedMeasure.getPosX() + beat.getPosX() + beat.getSpacing() + leftSpacing - 5;
+					int y = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + ((this.string * stringSpacing) - stringSpacing) - 7;
+					int width = 14;
+					int height = 14;
+					this.setPaintStyle(painter, expectedVoice);
+					
+					painter.initPath();
+					painter.setAntialias(false);
+					painter.addRectangle(x, y, width, height);
+					painter.closePath();
+				}
+				else if( (layout.getStyle() & TGLayout.DISPLAY_SCORE) != 0){
+					int line = this.tablature.getViewLayout().getScoreLineSpacing();
+					int leftSpacing = beat.getMeasureImpl().getHeaderImpl().getLeftSpacing(layout);
+					float xMargin = (2.0f * layout.getScale());
+					float x1 = this.selectedMeasure.getPosX() + beat.getPosX() + beat.getSpacing() + leftSpacing - xMargin;
+					float x2 = (x1 + layout.getResources().getScoreNoteWidth() + xMargin);
+					float y1 = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_TOP) - line;
+					float y2 = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_BOTTOM);
+					this.setPaintStyle(painter, true);
+					
+					painter.initPath();
+					painter.moveTo(x1, y1);
+					painter.lineTo(x1 + ((x2 - x1) / 2f), y1 + (line / 2f));
+					painter.lineTo(x2, y1);
+					painter.moveTo(x1, y2 + line);
+					painter.lineTo(x1 + ((x2 - x1) / 2f), y2 + (line / 2f));
+					painter.lineTo(x2, y2 + line);
+					painter.closePath();
+				}
+			}
+		}
+	}
+	
+	public void setPaintStyle(TGPainter painter, boolean expectedVoice){
+		TGColor foreground = ( expectedVoice ? this.color1 : this.color2 );
+		if( foreground != null ){
+			painter.setForeground( foreground );
+		}
+	}
+	
+	public boolean moveRight() {
+		if (getSelectedBeat() != null) {
+			TGMeasureImpl measure = getMeasure();
+			TGVoice voice = getSongManager().getMeasureManager().getNextVoice(measure.getBeats(),getSelectedBeat(), getVoice());
+			TGBeat beat = (voice != null ? voice.getBeat() : null );
+			if (beat == null){
+				//si no habia mas componentes. busco el siguiente compas
+				measure = (TGMeasureImpl)getSongManager().getTrackManager().getNextMeasure(getMeasure());
+				if (measure == null) {
+					return false;
+				}
+				voice = getSongManager().getMeasureManager().getFirstVoice(measure.getBeats(), getVoice());
+				beat = (voice != null ? voice.getBeat() : null );
+				if( beat == null ){
+					beat = getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
+				}
+			}
+			if(beat != null){
+				moveTo(getTrack(), measure, beat, getStringNumber());
+			}
+		}
+		return true;
+	}
+	
+	public void moveLeft() {
+		if (getSelectedBeat() != null) {
+			TGMeasureImpl measure = getMeasure();
+			TGVoice voice = getSongManager().getMeasureManager().getPreviousVoice(measure.getBeats(),getSelectedBeat(), getVoice());
+			TGBeat beat = (voice != null ? voice.getBeat() : null );
+			if (beat == null) {
+				//si no habia mas componentes. busco el compas anterior
+				measure = (TGMeasureImpl)getSongManager().getTrackManager().getPrevMeasure(getMeasure());
+				if (measure == null) {
+					return;
+				}
+				voice = getSongManager().getMeasureManager().getLastVoice(measure.getBeats(), getVoice());
+				beat = (voice != null ? voice.getBeat() : null );
+				if( beat == null ){
+					beat = getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
+				}
+			}
+			if(beat != null){
+				moveTo(getTrack(), measure, beat, getStringNumber());
+			}
+		}
+	}
+	
+	/**
+	 * Luego de mover el Caret. cambia la duracion seleccionada por la del componente. solo si lo que resta del compas no esta vacio
+	 */
+	private void updateDuration() {
+		if (this.selectedBeat != null && !this.selectedBeat.getVoice(getVoice()).isRestVoice()) {
+			this.selectedBeat.getVoice(getVoice()).getDuration().copy(this.selectedDuration);
+		}
+	}
+	
+	public void moveUp() {
+		int stringCount = this.selectedTrack.stringCount() ;
+		int nextString = (( (this.string - 2 + stringCount) % stringCount) + 1);
+		setStringNumber(nextString);
+	}
+	
+	public void moveDown() {
+		int stringCount = this.selectedTrack.stringCount() ;
+		int nextString = ( (this.string  % stringCount) + 1);
+		setStringNumber(nextString);
+	}
+	
+	public void setStringNumber(int number){
+		this.string = number;
+		this.updateNote();
+	}
+	
+	public int getStringNumber(){
+		return this.string;
+	}
+	
+	public long getPosition() {
+		return this.position;
+	}
+	
+	public TGMeasureImpl getMeasure() {
+		return this.selectedMeasure;
+	}
+	
+	public TGTrackImpl getTrack() {
+		return this.selectedTrack;
+	}
+	
+	public TGDuration getDuration() {
+		return this.selectedDuration;
+	}
+	
+	public void setSelectedDuration(TGDuration selectedDuration) {
+		this.selectedDuration = selectedDuration;
+	}
+	
+	public TGString getSelectedString() {
+		List strings = this.selectedTrack.getStrings();
+		Iterator it = strings.iterator();
+		while (it.hasNext()) {
+			TGString instrumentString = (TGString) it.next();
+			if (instrumentString.getNumber() == this.string) {
+				return instrumentString;
+			}
+		}
+		return null;
+	}
+	
+	public void changeDuration(TGDuration duration){
+		getSongManager().getMeasureManager().changeDuration(getMeasure(),getSelectedBeat(),duration,getVoice(), true);
+		setChanges(true);
+	}
+	
+	private void updatePosition(){
+		this.position = getSelectedBeat().getStart();
+	}
+	
+	private void updateString(){
+		if(this.string < 1 || this.string > getTrack().stringCount() ){
+			this.string = 1;
+		}
+	}
+	
+	private void checkTransport(){
+		TuxGuitar.instance().getTransport().gotoMeasure(getMeasure().getHeader());
+	}
+	
+	public boolean hasChanges() {
+		return this.changes;
+	}
+	
+	public void setChanges(boolean changes) {
+		this.changes = changes;
+	}
+	
+	public int getVelocity() {
+		return this.velocity;
+	}
+	
+	public void setVelocity(int velocity) {
+		this.velocity = velocity;
+	}
+	
+	private void updateNote(){
+		this.selectedNote = null;
+		
+		TGString string = getSelectedString();
+		if( string != null ){
+			this.selectedNote = getSongManager().getMeasureManager().getNote(getMeasure(),getPosition(),string.getNumber());
+		}
+	}
+	
+	public TGNote getSelectedNote(){
+		return this.selectedNote;
+	}
+	
+	private void updateBeat(){
+		this.restBeat = this.selectedBeat.isRestBeat();
+	}
+	
+	public TGBeatImpl getSelectedBeat(){
+		return (TGBeatImpl)this.selectedBeat;
+	}
+	
+	public TGSongManager getSongManager(){
+		return this.tablature.getSongManager();
+	}
+	
+	public int getVoice() {
+		return this.voice;
+	}
+	
+	public void setVoice(int voice) {
+		this.voice = voice;
+		this.update();
+	}
+	
+	public boolean isRestBeatSelected(){
+		return this.restBeat;
+	}
+	
+	public void setColor1(TGColorModel cm){
+		this.disposeResource( this.color1 );
+		this.color1 = this.tablature.getResourceFactory().createColor(cm);
+	}
+	
+	public void setColor2(TGColorModel cm){
+		this.disposeResource( this.color2 );
+		this.color2 = this.tablature.getResourceFactory().createColor(cm);
+	}
+	
+	public void disposeResource(TGResource resource){
+		if( resource != null && !resource.isDisposed() ){
+			resource.dispose();
+		}
+	}
+	
+	public void dispose(){
+		this.disposeResource( this.color1 );
+		this.disposeResource( this.color2 );
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/Tablature.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/Tablature.java
new file mode 100644
index 0000000..889947d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/Tablature.java
@@ -0,0 +1,431 @@
+/*
+ * Created on 29-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.tab;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ControlAdapter;
+import org.eclipse.swt.events.ControlEvent;
+import org.eclipse.swt.graphics.GC;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.editors.TGResourceFactoryImpl;
+import org.herac.tuxguitar.app.editors.tab.edit.EditorKit;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.system.config.TGConfigManager;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.graphics.control.TGController;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.graphics.control.TGLayoutHorizontal;
+import org.herac.tuxguitar.graphics.control.TGLayoutStyles;
+import org.herac.tuxguitar.graphics.control.TGLayoutVertical;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.player.base.MidiPlayerMode;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class Tablature extends Composite implements TGController {
+	
+	private static final int SCROLL_DELAY = 15;
+	private static final int SCROLL_INCREMENT = 50;
+	
+	private TGResourceFactory resourceFactory;
+	private TGSongManager songManager;
+	private Caret caret;
+	private int width;
+	private int height;
+	private TGLayout viewLayout;
+	private EditorKit editorKit;
+	
+	private TGBeatImpl playedBeat;
+	private TGMeasureImpl playedMeasure;
+	private int scrollX;
+	private int scrollY;
+	private boolean resetScroll;
+	protected long lastVScrollTime;
+	protected long lastHScrollTime;
+	
+	private boolean painting;
+	
+	public Tablature(Composite parent,int style, TGSongManager songManager ) {
+		super(parent, style);
+		this.songManager = songManager;
+		this.caret = new Caret(this);
+		this.editorKit = new EditorKit(this);
+	}
+	
+	public void initGUI(){
+		this.addPaintListener(new TablaturePaintListener(this));
+		
+		final ScrollBar hBar = getHorizontalBar();
+		hBar.setIncrement(SCROLL_INCREMENT);
+		hBar.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				if(Tablature.this.lastHScrollTime + SCROLL_DELAY < System.currentTimeMillis()){
+					redraw();
+					Tablature.this.lastHScrollTime = System.currentTimeMillis();
+				}
+			}
+		});
+		
+		final ScrollBar vBar = getVerticalBar();
+		vBar.setIncrement(SCROLL_INCREMENT);
+		vBar.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				if(Tablature.this.lastVScrollTime + SCROLL_DELAY < System.currentTimeMillis()){
+					redraw();
+					Tablature.this.lastVScrollTime = System.currentTimeMillis();
+				}
+			}
+		});
+		
+		this.addControlListener(new ControlAdapter() {
+			public void controlResized(ControlEvent arg0) {
+				updateScroll();
+			}
+		});
+	}
+	
+	public void updateTablature(){
+		this.playedBeat = null;
+		this.playedMeasure = null;
+		getViewLayout().updateSong();
+		getCaret().update();
+	}
+	
+	public void updateMeasure(int number){
+		this.playedBeat = null;
+		this.playedMeasure = null;
+		getViewLayout().updateMeasureNumber(number);
+		getCaret().update();
+	}
+	
+	public void resetCaret(){
+		this.caret.update(1,TGDuration.QUARTER_TIME,1);
+	}
+	
+	public synchronized void paintTablature(TGPainter painter){
+		if(!TuxGuitar.instance().isLocked()){
+			TuxGuitar.instance().lock();
+			this.setPainting(true);
+			try{
+				this.checkScroll();
+				
+				TGRectangle area = createRectangle(getClientArea());
+				ScrollBar xScroll = getHorizontalBar();
+				ScrollBar yScroll = getVerticalBar();
+				this.scrollX = xScroll.getSelection();
+				this.scrollY = yScroll.getSelection();
+				
+				this.getViewLayout().paint(painter, area, -this.scrollX, -this.scrollY);
+				this.getCaret().paintCaret(this.getViewLayout(), painter);
+				this.getEditorKit().paintSelection(this.getViewLayout(), painter);
+				
+				this.width = this.viewLayout.getWidth();
+				this.height = this.viewLayout.getHeight();
+				
+				this.updateScroll();
+				
+				if(TuxGuitar.instance().getPlayer().isRunning()){
+					redrawPlayingMode(painter,true);
+				}
+				// Si no estoy reproduciendo y hay cambios
+				// muevo el scroll al compas que tiene el caret
+				else if(getCaret().hasChanges()){
+					// Mover el scroll puede necesitar redibujar
+					// por eso es importante desmarcar los cambios antes de hacer el moveScrollTo
+					getCaret().setChanges(false);
+					
+					moveScrollTo(getCaret().getMeasure(), xScroll, yScroll,area);
+				}
+			}catch(Throwable throwable){
+				throwable.printStackTrace();
+			}
+			this.setPainting(false);
+			TuxGuitar.instance().unlock();
+		}
+	}
+	
+	public void resetScroll(){
+		this.resetScroll = true;
+	}
+	
+	public void checkScroll(){
+		if(this.resetScroll){
+			getHorizontalBar().setSelection(0);
+			getVerticalBar().setSelection(0);
+			this.resetScroll = false;
+		}
+	}
+	
+	public void updateScroll(){
+		Rectangle bounds = getBounds();
+		Rectangle client = getClientArea();
+		ScrollBar hBar = getHorizontalBar();
+		ScrollBar vBar = getVerticalBar();
+		hBar.setMaximum(this.width);
+		vBar.setMaximum(this.height);
+		hBar.setThumb(Math.min(bounds.width, client.width));
+		vBar.setThumb(Math.min(bounds.height, client.height));
+	}
+	
+	public boolean moveScrollTo(TGMeasureImpl measure){
+		return moveScrollTo(measure,getHorizontalBar(),getVerticalBar(), createRectangle(getClientArea()));
+	}
+	
+	public boolean moveScrollTo(TGMeasureImpl measure,ScrollBar xScroll,ScrollBar yScroll,TGRectangle area){
+		boolean success = false;
+		if(measure != null && measure.getTs() != null){
+			int mX = measure.getPosX();
+			int mY = measure.getPosY();
+			int mWidth = measure.getWidth(getViewLayout());
+			int mHeight = measure.getTs().getSize();
+			int marginWidth = getViewLayout().getFirstMeasureSpacing();
+			int marginHeight = getViewLayout().getFirstTrackSpacing();
+			boolean forceRedraw = false;
+			
+			//Solo se ajusta si es necesario
+			//si el largo del compas es mayor al de la pantalla. nunca se puede ajustar a la medida.
+			if( mX < 0 || ( (mX + mWidth ) > area.getWidth() && (area.getWidth() >= mWidth + marginWidth || mX > marginWidth) ) ){
+				xScroll.setSelection((this.scrollX + mX) - marginWidth );
+				success = true;
+			}
+			
+			//Solo se ajusta si es necesario
+			//si el alto del compas es mayor al de la pantalla. nunca se puede ajustar a la medida.
+			if( mY < 0 || ( (mY + mHeight ) > area.getHeight() && (area.getHeight() >= mHeight + marginHeight || mY > marginHeight) ) ){
+				yScroll.setSelection( (this.scrollY + mY)  - marginHeight );
+				success = true;
+			}
+			
+			if(!success){
+				// Si la seleccion "real" del scroll es distinta a la anterior, se fuerza el redraw
+				forceRedraw = (this.scrollX != xScroll.getSelection() || this.scrollY != yScroll.getSelection());
+			}
+			
+			if(forceRedraw || success){
+				redraw();
+			}
+		}
+		return success;
+	}
+	
+	public void redraw(){
+		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
+			this.playedBeat = null;
+			this.playedMeasure = null;
+			this.setPainting(true);
+			super.redraw();
+		}
+	}
+	
+	public void redrawPlayingMode(){
+		if(!super.isDisposed() && !isPainting() && !TuxGuitar.instance().isLocked()){
+			if(TuxGuitar.instance().getPlayer().isRunning()){
+				this.setPainting(true);
+				
+				TGPainter painter = new TGPainterImpl(new GC(this));
+				redrawPlayingMode(painter,false);
+				painter.dispose();
+				
+				this.setPainting(false);
+			}
+		}
+	}
+	
+	private void redrawPlayingMode(TGPainter painter,boolean force){
+		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
+			try{
+				TGMeasureImpl measure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
+				TGBeatImpl beat = TuxGuitar.instance().getEditorCache().getPlayBeat();
+				if(measure != null && measure.hasTrack(getCaret().getTrack().getNumber())){
+					if(!moveScrollTo(measure) || force){
+						boolean paintMeasure = (force || this.playedMeasure == null || !this.playedMeasure.equals(measure));
+						if(this.playedMeasure != null && this.playedBeat != null && !this.playedMeasure.isOutOfBounds() && this.playedMeasure.hasTrack(getCaret().getTrack().getNumber())){
+							getViewLayout().paintPlayMode(painter, this.playedMeasure, this.playedBeat,paintMeasure);
+						}
+						if(!measure.isOutOfBounds()){
+							getViewLayout().paintPlayMode(painter, measure, beat, paintMeasure);
+						}
+						this.playedBeat = beat;
+						this.playedMeasure =  measure;
+					}
+				}
+			}catch(Throwable throwable){
+				throwable.printStackTrace();
+			}
+		}
+	}
+	
+	public boolean isPainting() {
+		return this.painting;
+	}
+	
+	public void setPainting(boolean painting) {
+		this.painting = painting;
+	}
+	
+	public Caret getCaret(){
+		return this.caret;
+	}
+	
+	public EditorKit getEditorKit() {
+		return this.editorKit;
+	}
+	
+	public TGSongManager getSongManager() {
+		return this.songManager;
+	}
+	
+	public TGLayout getViewLayout(){
+		return this.viewLayout;
+	}
+	
+	public void setViewLayout(TGLayout viewLayout){
+		if(getViewLayout() != null){
+			getViewLayout().disposeLayout();
+		}
+		this.viewLayout = viewLayout;
+		if(this.getHorizontalBar() != null){
+			this.getHorizontalBar().setSelection(0);
+		}
+		if(this.getVerticalBar() != null){
+			this.getVerticalBar().setSelection(0);
+		}
+		this.reloadStyles();
+	}
+	
+	public TGRectangle createRectangle( Rectangle rectangle ){
+		return new TGRectangle(rectangle.x,rectangle.y,rectangle.width,rectangle.height);
+	}
+	
+	public void reloadStyles(){
+		if(this.getViewLayout() != null){
+			this.getViewLayout().loadStyles(1.0f);
+			this.setBackground( ((TGColorImpl)getViewLayout().getResources().getBackgroundColor()).getHandle() );
+		}
+	}
+	
+	public void reloadViewLayout(){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		
+		this.loadViewLayout(config.getIntegerValue(TGConfigKeys.LAYOUT_STYLE), config.getIntegerValue(TGConfigKeys.LAYOUT_MODE));
+	}
+	
+	private void loadViewLayout( int style, int mode ){
+		switch(mode){
+			case TGLayout.MODE_VERTICAL:
+				setViewLayout(new TGLayoutVertical(this,style));
+			break;
+			case TGLayout.MODE_HORIZONTAL:
+				setViewLayout(new TGLayoutHorizontal(this,style));
+			break;
+			default:
+				if( mode != TGLayout.DEFAULT_MODE ){
+					this.loadViewLayout( style, TGLayout.DEFAULT_MODE );
+				}
+			break;
+		}
+	}
+	
+	public void dispose(){
+		super.dispose();
+		this.getCaret().dispose();
+		this.getViewLayout().disposeLayout();
+	}
+	
+	public TGResourceFactory getResourceFactory(){
+		if( this.resourceFactory == null ){
+			this.resourceFactory = new TGResourceFactoryImpl(this.getDisplay());
+		}
+		return this.resourceFactory;
+	}
+	
+	public int getTrackSelection(){
+		if( (getViewLayout().getStyle() & TGLayout.DISPLAY_MULTITRACK) == 0 ){
+			return getCaret().getTrack().getNumber();
+		}
+		return -1;
+	}
+	
+	public boolean isRunning(TGBeat beat) {
+		return ( isRunning( beat.getMeasure() ) && TuxGuitar.instance().getEditorCache().isPlaying(beat.getMeasure(),beat) );
+	}
+	
+	public boolean isRunning(TGMeasure measure) {
+		return ( measure.getTrack().equals(getCaret().getTrack()) && TuxGuitar.instance().getEditorCache().isPlaying( measure ) );
+	}
+	
+	public boolean isLoopSHeader(TGMeasureHeader measureHeader){
+		MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
+		return ( pm.isLoop() && pm.getLoopSHeader() == measureHeader.getNumber() );
+	}
+	
+	public boolean isLoopEHeader(TGMeasureHeader measureHeader){
+		MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
+		return ( pm.isLoop() && pm.getLoopEHeader() == measureHeader.getNumber() );
+	}
+	
+	public void configureStyles(TGLayoutStyles styles){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		
+		styles.setBufferEnabled(true);
+		styles.setStringSpacing(config.getIntegerValue(TGConfigKeys.TAB_LINE_SPACING));
+		styles.setScoreLineSpacing(config.getIntegerValue(TGConfigKeys.SCORE_LINE_SPACING));
+		styles.setFirstMeasureSpacing(20);
+		styles.setMinBufferSeparator(20);
+		styles.setMinTopSpacing(30);
+		styles.setMinScoreTabSpacing(config.getIntegerValue(TGConfigKeys.MIN_SCORE_TABLATURE_SPACING));
+		styles.setFirstTrackSpacing(config.getIntegerValue(TGConfigKeys.FIRST_TRACK_SPACING));
+		styles.setTrackSpacing(config.getIntegerValue(TGConfigKeys.TRACK_SPACING));
+		styles.setChordFretIndexSpacing(8);
+		styles.setChordStringSpacing(5);
+		styles.setChordFretSpacing(6);
+		styles.setChordNoteSize(4);
+		styles.setRepeatEndingSpacing(20);
+		styles.setTextSpacing(15);
+		styles.setMarkerSpacing(15);
+		styles.setLoopMarkerSpacing(5);
+		styles.setDivisionTypeSpacing(10);
+		styles.setEffectSpacing(8);
+		
+		styles.setDefaultFont(config.getFontModelConfigValue(TGConfigKeys.FONT_DEFAULT));
+		styles.setNoteFont(config.getFontModelConfigValue(TGConfigKeys.FONT_NOTE));
+		styles.setTimeSignatureFont(config.getFontModelConfigValue(TGConfigKeys.FONT_TIME_SIGNATURE));
+		styles.setLyricFont(config.getFontModelConfigValue(TGConfigKeys.FONT_LYRIC));
+		styles.setTextFont(config.getFontModelConfigValue(TGConfigKeys.FONT_TEXT));
+		styles.setMarkerFont(config.getFontModelConfigValue(TGConfigKeys.FONT_MARKER));
+		styles.setGraceFont(config.getFontModelConfigValue(TGConfigKeys.FONT_GRACE));
+		styles.setChordFont(config.getFontModelConfigValue(TGConfigKeys.FONT_CHORD));
+		styles.setChordFretFont(config.getFontModelConfigValue(TGConfigKeys.FONT_CHORD_FRET));
+		styles.setBackgroundColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_BACKGROUND));
+		styles.setLineColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_LINE));
+		styles.setScoreNoteColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_SCORE_NOTE));
+		styles.setTabNoteColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_TAB_NOTE));
+		styles.setPlayNoteColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_PLAY_NOTE));
+		styles.setLoopSMarkerColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_LOOP_S_MARKER));
+		styles.setLoopEMarkerColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_LOOP_E_MARKER));
+		
+		getCaret().setColor1(config.getColorModelConfigValue(TGConfigKeys.COLOR_CARET_1));
+		getCaret().setColor2(config.getColorModelConfigValue(TGConfigKeys.COLOR_CARET_2));
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/TablaturePaintListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/TablaturePaintListener.java
new file mode 100644
index 0000000..865a88e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/TablaturePaintListener.java
@@ -0,0 +1,29 @@
+/*
+ * Created on 30-nov-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.editors.tab;
+
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TablaturePaintListener implements PaintListener{
+	private Tablature tablature;
+	
+	public TablaturePaintListener(Tablature tablature){
+		this.tablature = tablature;
+	}
+	
+	public void paintControl(PaintEvent e) {
+		this.tablature.paintTablature( new TGPainterImpl(e.gc) );
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/edit/EditorKit.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/edit/EditorKit.java
new file mode 100644
index 0000000..8b4a398
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/edit/EditorKit.java
@@ -0,0 +1,495 @@
+package org.herac.tuxguitar.app.editors.tab.edit;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.events.MenuListener;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.editors.tab.Tablature;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.undo.undoables.measure.UndoableMeasureGeneric;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.control.TGBeatImpl;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGNoteImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackSpacing;
+import org.herac.tuxguitar.graphics.control.TGVoiceImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGString;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.song.models.TGVoice;
+
+public class EditorKit {
+	
+	public static final int MOUSE_MODE_SELECTION = 1;
+	public static final int MOUSE_MODE_EDITION = 2;
+	
+	private static final int FIRST_LINE_VALUES[] = new int[] {65,45,52,55};
+	
+	private int mouseMode;
+	private boolean natural;
+	private Tablature tablature;
+	private MouseKit mouseKit;
+	private TGMeasureImpl selectedMeasure;
+	
+	public EditorKit(Tablature tablature){
+		this.tablature = tablature;
+		this.mouseKit = new MouseKit(this);
+		this.tablature.addMouseListener(this.mouseKit);
+		this.tablature.addMouseMoveListener(this.mouseKit);
+		this.tablature.addMouseTrackListener(this.mouseKit);
+		this.setDefaults();
+	}
+	
+	private void setDefaults(){
+		this.setMouseMode(TuxGuitar.instance().getConfig().getIntegerValue(TGConfigKeys.EDITOR_MOUSE_MODE,MOUSE_MODE_EDITION));
+		this.setNatural(TuxGuitar.instance().getConfig().getBooleanValue(TGConfigKeys.EDITOR_NATURAL_KEY_MODE,true));
+	}
+	
+	public int getMouseMode() {
+		return this.mouseMode;
+	}
+	
+	public void setMouseMode(int mouseMode) {
+		this.mouseMode = mouseMode;
+	}
+	
+	public boolean isNatural() {
+		return this.natural;
+	}
+	
+	public void setNatural(boolean natural) {
+		this.natural = natural;
+	}
+	
+	public Tablature getTablature() {
+		return this.tablature;
+	}	
+	
+	public MenuListener getMenuListener(){
+		return this.mouseKit;
+	}
+	
+	public boolean isScoreEnabled(){
+		return ((getTablature().getViewLayout().getStyle() & TGLayout.DISPLAY_SCORE) != 0);
+	}
+	
+	public boolean isMouseEditionAvailable(){
+		return (isScoreEnabled() && getMouseMode() == MOUSE_MODE_EDITION);
+	}
+	
+	public boolean select(int x, int y) {
+		if(x >= 0 && y >= 0){
+			TGTrackImpl track = findSelectedTrack(y);
+			if (track != null) {
+				TGMeasureImpl measure = findSelectedMeasure(track, x, y);
+				if (measure != null) {
+					TGBeat beat = findSelectedBeat(measure, x);
+					TGString tgString = findSelectedString(measure, y);
+					if (beat != null) {
+						int string = (tgString != null)?tgString.getNumber():getTablature().getCaret().getSelectedString().getNumber();
+						getTablature().getCaret().moveTo(track, measure, beat, string);
+					}
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	public TGTrackImpl findSelectedTrack(int y){
+		TGLayout layout = getTablature().getViewLayout();
+		int number = layout.getTrackNumberAt(y);
+		if(number >= 0){
+			return (TGTrackImpl)layout.getSongManager().getTrack(number);
+		}
+		return null;
+	}
+	
+	public TGMeasureImpl findSelectedMeasure(TGTrackImpl track,int x,int y){
+		TGMeasureImpl measure = null;
+		int minorDistance = 0;
+		
+		Iterator it = track.getMeasures();
+		while(it.hasNext()){
+			TGMeasureImpl m = (TGMeasureImpl)it.next();
+			if(!m.isOutOfBounds() && m.getTs() != null){
+				boolean isAtX = (x >= m.getPosX() && x <= m.getPosX() + m.getWidth(getTablature().getViewLayout()) + m.getSpacing());
+				if(isAtX){
+					int measureHeight = m.getTs().getSize();
+					int distanceY = Math.min(Math.abs(y - (m.getPosY())),Math.abs(y - ( m.getPosY() + measureHeight - 10)));
+					if(measure == null || distanceY < minorDistance){
+						measure = m;
+						minorDistance = distanceY;
+					}
+				}
+			}
+		}
+		return measure;
+	}
+	
+	public TGBeatImpl findSelectedBeat(TGMeasureImpl measure, int x){
+		int voice = getTablature().getCaret().getVoice();
+		int posX = measure.getHeaderImpl().getLeftSpacing(getTablature().getViewLayout()) + measure.getPosX();
+		int bestDiff = -1;
+		TGBeatImpl bestBeat = null;
+		Iterator it = measure.getBeats().iterator();
+		while(it.hasNext()){
+			TGBeatImpl beat = (TGBeatImpl)it.next();
+			if(!beat.getVoice(voice).isEmpty()){
+				int diff = Math.abs(x - (posX + (beat.getPosX() + beat.getSpacing())));
+				if(bestDiff == -1 || diff < bestDiff){
+					bestBeat = beat;
+					bestDiff = diff;
+				}
+			}
+		}
+		if( bestBeat == null ){
+			bestBeat = (TGBeatImpl)getTablature().getViewLayout().getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
+		}
+		return bestBeat;
+	}
+	
+	public TGString findSelectedString(TGMeasureImpl measure,int y) {
+		TGString string = null;
+		int stringSpacing = getTablature().getViewLayout().getStringSpacing();
+		int minorDistance = 0;
+		int firstStringY = measure.getPosY() + measure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE);
+		
+		Iterator it = measure.getTrack().getStrings().iterator();
+		while(it.hasNext()){
+			TGString currString = (TGString)it.next();
+			int distanceX = Math.abs(y - (firstStringY + ((currString.getNumber() * stringSpacing) - stringSpacing)));
+			if(string == null || distanceX < minorDistance){
+				string = currString;
+				minorDistance = distanceX;
+			}
+		}
+		
+		return string;
+	}
+	
+	private int findBestString(TGTrack track,TGVoice voice,int value){
+		List strings = new ArrayList();
+		for(int number = 1;number <= track.stringCount();number++){
+			boolean used = false;
+			TGString string = track.getString(number);
+			Iterator it = voice.getNotes().iterator();
+			while (it.hasNext()) {
+				TGNote note = (TGNote) it.next();
+				if(note.getString() == string.getNumber()){
+					used = true;
+				}
+			}
+			if(!used){
+				strings.add(string);
+			}
+		}
+		
+		int minFret = -1;
+		int stringForValue = 0;
+		for(int i = 0;i < strings.size();i++){
+			TGString string = (TGString)strings.get(i);
+			int fret = value - string.getValue();
+			if((fret >= 0) && (minFret < 0 || fret < minFret)){
+				stringForValue = string.getNumber();
+				minFret = fret;
+			}
+		}
+		return stringForValue;
+	}
+	
+	public TGVoiceImpl findBestVoice(TGMeasureImpl measure, int x){
+		int voiceIndex = this.getTablature().getCaret().getVoice();
+		int posX = measure.getHeaderImpl().getLeftSpacing( this.getTablature().getViewLayout() ) + measure.getPosX();
+		int bestDiff = -1;
+		TGVoiceImpl bestVoice = null;
+		TGDuration duration = this.getTablature().getCaret().getDuration();
+		Iterator it = measure.getBeats().iterator();
+		while(it.hasNext()){
+			TGBeatImpl beat = (TGBeatImpl)it.next();
+			TGVoiceImpl voice = beat.getVoiceImpl( voiceIndex );
+			if(!voice.isEmpty()){
+				int x1 = (beat.getPosX() + beat.getSpacing());
+				int x2 = (x1 + voice.getWidth());
+				long increment = voice.getWidth();
+				if(voice.isRestVoice()){
+					increment = (duration.getTime() * voice.getWidth() / voice.getDuration().getTime());
+				}
+				for( int beatX = x1 ; beatX < x2 ; beatX += increment ){
+					int diff = Math.abs(x - (posX + beatX));
+					if(bestDiff == -1 || diff < bestDiff){
+						bestVoice = voice;
+						bestDiff = diff;
+					}
+				}
+			}
+		}
+		if( bestVoice == null ){
+			TGBeat beat = this.getTablature().getViewLayout().getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
+			if( beat != null ){
+				bestVoice = (TGVoiceImpl)beat.getVoice(voiceIndex);
+			}
+		}
+		return bestVoice;
+	}
+	
+	public void addOrRemoveNote(int x, int y) {
+		if(!TuxGuitar.instance().isLocked() && !TGActionLock.isLocked() && !this.getTablature().isPainting()){
+			TGActionLock.lock();
+			
+			TGLayout.TrackPosition pos = this.getTablature().getViewLayout().getTrackPositionAt(y) ;
+			if(pos != null){
+				TGTrackImpl track = this.getTablature().getCaret().getTrack();
+				TGMeasureImpl measure = this.getTablature().getCaret().getMeasure();
+				if(measure.getTs() != null){
+					int minValue = track.getString(track.stringCount()).getValue();
+					int maxValue = track.getString(1).getValue() + 29; //Max frets = 29
+					
+					int lineSpacing = this.getTablature().getViewLayout().getScoreLineSpacing();
+					
+					int topHeight = measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+					int bottomHeight = (measure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_DOWN_LINES));
+					
+					int y1 = (pos.getPosY() + measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES));
+					int y2 = (y1 + (lineSpacing * 5));
+					
+					if(y >= (y1 - topHeight) && y  < (y2 + bottomHeight)){
+						
+						int value = 0;
+						int tempValue = FIRST_LINE_VALUES[measure.getClef() - 1];
+						double limit = (topHeight / (lineSpacing / 2.00));
+						for(int i = 0;i < limit;i ++){
+							tempValue += (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue + 1) % 12])?2:1;
+						}
+						
+						float minorDistance = 0;
+						for(float posY = (y1 - topHeight); posY <= (y2 + bottomHeight); posY += (lineSpacing / 2.00)){
+							if(tempValue > 0){
+								float distanceY = Math.abs(y - posY);
+								if(value == 0 || distanceY < minorDistance){
+									value = tempValue;
+									minorDistance = distanceY;
+								}
+								tempValue -= (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue - 1) % 12])?2:1;
+							}
+						}
+						if(value >= minValue && value <= maxValue){
+							TGVoiceImpl beat = findBestVoice(measure, x);
+							if(beat != null){
+								value = getRealValue(value);
+								if(!removeNote(value,beat)){
+									createNote(beat, getRealStart(beat, x), value);
+								}
+							}
+							updateTablature();
+						}
+					}
+				}
+			}
+			TGActionLock.unlock();
+		}
+	}
+	
+	private long getRealStart(TGVoiceImpl voice,int x){
+		if(voice.isEmpty()){
+			return voice.getBeat().getStart();
+		}
+		TGMeasureImpl measure = voice.getBeatImpl().getMeasureImpl();
+		long beatX = (measure.getHeaderImpl().getLeftSpacing( this.getTablature().getViewLayout() ) + measure.getPosX() + voice.getBeatImpl().getPosX() + voice.getBeatImpl().getSpacing());
+		long beatStart = voice.getBeat().getStart();
+		long beatLength = voice.getDuration().getTime();
+		long beatEnd = ( beatStart + beatLength );
+		if(x > beatX){
+			return Math.min( ( beatStart + ( (x - beatX) * beatLength / voice.getWidth() ) ), (beatEnd - 1 ) );
+		}
+		return beatStart;
+	}
+	
+	private int getRealValue(int value){
+		int realValue = value;
+		int key = this.getTablature().getCaret().getMeasure().getKeySignature();
+		if(key <= 7){
+			if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_SHARP_NOTES[realValue % 12]] == TGMeasureImpl.SHARP && this.isNatural()){
+				realValue ++;
+			}
+			else if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_SHARP_NOTES[realValue % 12]] != TGMeasureImpl.SHARP && !this.isNatural()){
+				if(TGMeasureImpl.ACCIDENTAL_NOTES[(realValue + 1) % 12]){
+					realValue ++;
+				}
+			}
+		}else if(key > 7 ){
+			if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_FLAT_NOTES[realValue % 12]] == TGMeasureImpl.FLAT && this.isNatural()){
+				realValue --;
+			}
+			else if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_FLAT_NOTES[realValue % 12]] != TGMeasureImpl.FLAT && !this.isNatural()){
+				if(TGMeasureImpl.ACCIDENTAL_NOTES[(realValue - 1) % 12]){
+					realValue --;
+				}
+			}
+		}
+		return realValue;
+	}
+	
+	private boolean removeNote(int value,TGVoice voice) {
+		Iterator it = voice.getNotes().iterator();
+		while (it.hasNext()) {
+			TGNoteImpl note = (TGNoteImpl) it.next();
+			
+			if (note.getRealValue() == value) {
+				//comienza el undoable
+				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+				
+				TGSongManager manager = this.getTablature().getSongManager();
+				manager.getMeasureManager().removeNote(note);
+				
+				//termia el undoable
+				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	private void createNote(TGVoice voice, long start,  int value){
+		Caret caret = this.getTablature().getCaret();
+		TGSongManager manager = this.getTablature().getSongManager();
+		TGTrack track = caret.getTrack();
+		int string = findBestString(track,voice,value);
+		if(string > 0){
+			//comienza el undoable
+			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
+			
+			TGNote note = manager.getFactory().newNote();
+			note.setValue((value - track.getString(string).getValue()));
+			note.setVelocity(caret.getVelocity());
+			note.setString(string);
+			
+			TGDuration duration = manager.getFactory().newDuration();
+			caret.getDuration().copy(duration);
+			
+			manager.getMeasureManager().addNote(voice.getBeat(),note,duration, start, voice.getIndex());
+			
+			caret.moveTo(caret.getTrack(),caret.getMeasure(),note.getVoice().getBeat(),note.getString());
+			
+			//termia el undoable
+			TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+			TuxGuitar.instance().getFileHistory().setUnsavedFile();
+			
+			//reprodusco las notas en el pulso
+			TuxGuitar.instance().playBeat(caret.getSelectedBeat());
+		}
+	}
+	
+	private void updateTablature(){
+		Caret caret = this.getTablature().getCaret();
+		this.getTablature().updateMeasure(caret.getMeasure().getNumber());
+		TuxGuitar.instance().updateCache(true);
+	}
+	
+	public void updateSelectedMeasure(int x, int y){
+		TGMeasureImpl previousSelection = this.selectedMeasure;
+		
+		TGTrackImpl track = this.findSelectedTrack(y);
+		if( track != null ) {
+			this.selectedMeasure = this.findSelectedMeasure(track, x, y);
+		}
+		
+		boolean selectionUpdated = false;
+		
+		if(!selectionUpdated && this.selectedMeasure == null && previousSelection != null ){
+			selectionUpdated = true;
+		}
+		if(!selectionUpdated && this.selectedMeasure != null && previousSelection == null ){
+			selectionUpdated = true;
+		}
+		if(!selectionUpdated && this.selectedMeasure != null ){
+			selectionUpdated = !this.selectedMeasure.equals(previousSelection);
+		}
+		if( selectionUpdated ){
+			TuxGuitar.instance().updateCache(false);
+		}
+	}
+	
+	public void resetSelectedMeasure(){
+		this.selectedMeasure = null;
+	}
+	
+	public void paintSelection(TGLayout layout, TGPainter painter) {
+		if(!TuxGuitar.instance().getPlayer().isRunning()){
+			TGMeasureImpl measure = this.selectedMeasure;
+			if(measure != null && measure.getTs() != null){
+				float scale = layout.getScale();
+				int minValue = measure.getTrack().getString(measure.getTrack().stringCount()).getValue();
+				int maxValue = measure.getTrack().getString(1).getValue() + 29;
+				int lineSpacing = layout.getScoreLineSpacing();
+				int width = (int)(10.0f * scale);
+				int topHeight = measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
+				int bottomHeight = (measure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_DOWN_LINES));
+				int tempValue = 0;
+				
+				int x1 = 0;
+				int x2 = 0;
+				int y1 = (measure.getPosY() + measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES));
+				int y2 = (y1 + (lineSpacing * 5));
+				
+				for(int b = 0 ; b < measure.countBeats() ; b++ ){
+					TGBeatImpl beat = (TGBeatImpl)measure.getBeat(b);
+					if( isPaintableBeat(beat) ){
+						x1 = (measure.getHeaderImpl().getLeftSpacing(layout) + measure.getPosX() + beat.getPosX() + beat.getSpacing());
+						x2 = x1 + width;
+						
+						painter.setForeground(layout.getResources().getLineColor());
+						
+						tempValue = FIRST_LINE_VALUES[measure.getClef() - 1];
+						for(int y = (y1 - lineSpacing); y >= (y1 - topHeight); y -= lineSpacing){
+							tempValue += (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue + 1) % 12])?2:1;
+							tempValue += (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue + 1) % 12])?2:1;
+							if( tempValue > maxValue ){
+								break;
+							}
+							painter.initPath();
+							painter.setAntialias(false);
+							painter.moveTo(x1, y);
+							painter.lineTo(x2, y);
+							painter.closePath();
+						}
+						
+						tempValue = FIRST_LINE_VALUES[measure.getClef() - 1] - 14;
+						for(int y = y2; y <= (y2 + bottomHeight); y += lineSpacing){
+							if(tempValue > 0){
+								tempValue -= (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue - 1) % 12])?2:1;
+								tempValue -= (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue - 1) % 12])?2:1;
+								if( tempValue < minValue ){
+									break;
+								}
+								painter.initPath();
+								painter.setAntialias(false);
+								painter.moveTo(x1, y);
+								painter.lineTo(x2, y);
+								painter.closePath();
+							}
+						}
+					}
+				}
+			}
+		}
+	}
+	
+	private boolean isPaintableBeat(TGBeat beat){
+		if( beat.getStart() == beat.getMeasure().getStart() ){
+			return true;
+		}
+		return (!beat.getVoice(getTablature().getCaret().getVoice()).isEmpty());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/edit/MouseKit.java b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/edit/MouseKit.java
new file mode 100644
index 0000000..f460963
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/editors/tab/edit/MouseKit.java
@@ -0,0 +1,82 @@
+package org.herac.tuxguitar.app.editors.tab.edit;
+
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.MouseTrackListener;
+import org.eclipse.swt.graphics.Point;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+
+public class MouseKit implements MouseListener, MouseMoveListener, MouseTrackListener, MenuListener{
+	
+	private EditorKit kit;
+	private Point position;
+	private boolean menuOpen;
+	
+	public MouseKit(EditorKit kit){
+		this.kit = kit;
+		this.position = new Point(0,0);
+		this.menuOpen = false;
+	}
+	
+	public void mouseDown(MouseEvent e) {
+		this.position.x = e.x;
+		this.position.y = e.y;
+	}
+	
+	public void mouseUp(MouseEvent e) {
+		this.position.x = e.x;
+		this.position.y = e.y;
+		this.kit.getTablature().setFocus();
+		if( this.kit.select(this.position.x, this.position.y) ){
+			TuxGuitar.instance().updateCache(true);
+			if(!this.menuOpen && e.button == 1 && this.kit.isMouseEditionAvailable()){
+				if(!TuxGuitar.instance().isLocked() && !TGActionLock.isLocked() && !TuxGuitar.instance().getPlayer().isRunning()){
+					this.kit.addOrRemoveNote(e.x, e.y);
+				}
+			}
+		}
+	}
+	
+	public void mouseMove(MouseEvent e) {
+		if(!this.menuOpen && this.kit.isMouseEditionAvailable()){
+			if(!TuxGuitar.instance().isLocked() && !TGActionLock.isLocked() && !TuxGuitar.instance().getPlayer().isRunning()){
+				this.kit.updateSelectedMeasure(e.x, e.y);
+			}
+		}
+	}
+	
+	public void mouseExit(MouseEvent e) {
+		if(!this.menuOpen && this.kit.isMouseEditionAvailable()){
+			if(!TuxGuitar.instance().getPlayer().isRunning() ){
+				this.kit.resetSelectedMeasure();
+			}
+		}
+	}
+	
+	public void menuShown(MenuEvent e) {
+		this.menuOpen = true;
+		this.kit.select(this.position.x, this.position.y);
+		TuxGuitar.instance().updateCache(true);
+	}
+	
+	public void menuHidden(MenuEvent e){
+		this.menuOpen = false;
+		TuxGuitar.instance().updateCache(true);
+	}
+	
+	public void mouseDoubleClick(MouseEvent e) {
+		//not implemented
+	}
+	
+	public void mouseEnter(MouseEvent e) {
+		//not implemented
+	}
+	
+	public void mouseHover(MouseEvent e) {
+		//not implemented
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/help/about/AboutContentReader.java b/TuxGuitar/src/org/herac/tuxguitar/app/help/about/AboutContentReader.java
new file mode 100644
index 0000000..cafa4dd
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/help/about/AboutContentReader.java
@@ -0,0 +1,50 @@
+package org.herac.tuxguitar.app.help.about;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.util.TGClassLoader;
+
+public class AboutContentReader {
+	
+	private static final String PREFIX = "about_";
+	private static final String EXTENSION = ".dist";
+	
+	public static final String DESCRIPTION = "description";
+	public static final String AUTHORS = "authors";
+	public static final String LICENSE = "license";
+	
+	public AboutContentReader(){
+		super();
+	}
+	
+	public StringBuffer read(String doc){
+		String lang = TuxGuitar.instance().getLanguageManager().getLanguage();
+		InputStream is = TGClassLoader.instance().getClassLoader().getResourceAsStream(PREFIX + doc + "_" + lang + EXTENSION);
+		if(is == null){
+			is = TGClassLoader.instance().getClassLoader().getResourceAsStream(PREFIX + doc + EXTENSION);
+		}
+		if(is != null){
+			return read(is);
+		}
+		System.out.println(doc + ".txt");
+		
+		return new StringBuffer();
+	}
+	
+	public StringBuffer read(InputStream is){
+		StringBuffer sb = new StringBuffer();
+		try {
+			int length = 0;
+			byte[] buffer = new byte[1024];
+			while((length = is.read(buffer)) != -1){
+				sb.append(new String(buffer,0,length));
+			}
+			is.close();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return sb;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/help/about/AboutDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/help/about/AboutDialog.java
new file mode 100644
index 0000000..368a49a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/help/about/AboutDialog.java
@@ -0,0 +1,155 @@
+package org.herac.tuxguitar.app.help.about;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGImageImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.util.TGVersion;
+
+public class AboutDialog {
+	
+	private static final String RELEASE_NAME = (TuxGuitar.APPLICATION_NAME + " " + TGVersion.CURRENT.getVersion());
+	private static final String PROPERTY_PREFIX = ("help.about.");
+	
+	private static final int IMAGE_WIDTH = 100;
+	private static final int IMAGE_HEIGHT = 100;
+	
+	private static final int TAB_ITEM_WIDTH = 660;
+	private static final int TAB_ITEM_HEIGHT = 300;
+	
+	protected Composite imageComposite;
+	protected Image image;
+	
+	public AboutDialog() {
+		super();
+	}
+	
+	public void open(Shell shell) {
+		final Shell dialog = DialogUtils.newDialog(shell,SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("help.about"));
+		
+		//--------------------HEADER----------------------------------
+		Composite header = new Composite(dialog,SWT.NONE);
+		header.setLayout(new GridLayout(2,false));
+		header.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true ,true));
+		
+		this.image = TuxGuitar.instance().getIconManager().getAboutDescription();
+		
+		this.imageComposite = new Composite(header,SWT.NONE);
+		this.imageComposite.setLayoutData(new GridData(IMAGE_WIDTH,IMAGE_HEIGHT));
+		this.imageComposite.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				Rectangle bounds = AboutDialog.this.image.getBounds();
+				TGPainterImpl painter = new TGPainterImpl(e.gc);
+				painter.drawImage(new TGImageImpl(AboutDialog.this.image),((IMAGE_WIDTH - bounds.width) /2),((IMAGE_HEIGHT - bounds.height) /2));
+			}
+		});
+		
+		final Font titleFont = new Font(dialog.getDisplay(),TuxGuitar.instance().getConfig().getFontDataConfigValue(TGConfigKeys.FONT_ABOUT_DIALOG_TITLE));
+		Label title = new Label(header,SWT.NONE);
+		title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true ,true));
+		title.setFont(titleFont);
+		title.setForeground(dialog.getDisplay().getSystemColor(SWT.COLOR_GRAY));
+		title.setText(RELEASE_NAME);
+		title.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				titleFont.dispose();
+			}
+		});
+		
+		//-------------------TABS-----------------------
+		Composite tabs = new Composite(dialog, SWT.NONE);
+		tabs.setLayout(new GridLayout());
+		tabs.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		final TabFolder tabFolder = new TabFolder(tabs, SWT.NONE);
+		tabFolder.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		tabFolder.setLayout(new FormLayout());
+		
+		AboutContentReader docReader = new AboutContentReader();
+		
+		makeTabItem(tabFolder,AboutContentReader.DESCRIPTION,docReader.read(AboutContentReader.DESCRIPTION).toString());
+		makeTabItem(tabFolder,AboutContentReader.AUTHORS,docReader.read(AboutContentReader.AUTHORS).toString());
+		makeTabItem(tabFolder,AboutContentReader.LICENSE,docReader.read(AboutContentReader.LICENSE).toString());
+		
+		tabFolder.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(tabFolder.getSelectionIndex() == 0){
+					AboutDialog.this.image = TuxGuitar.instance().getIconManager().getAboutDescription();
+				}else if(tabFolder.getSelectionIndex() == 1){
+					AboutDialog.this.image = TuxGuitar.instance().getIconManager().getAboutAuthors();
+				}else if(tabFolder.getSelectionIndex() == 2){
+					AboutDialog.this.image = TuxGuitar.instance().getIconManager().getAboutLicense();
+				}
+				AboutDialog.this.imageComposite.redraw();
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout());
+		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		Button buttonClose = new Button(buttons, SWT.PUSH);
+		buttonClose.setLayoutData(getButtonData());
+		buttonClose.setText(TuxGuitar.getProperty("close"));
+		buttonClose.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		tabFolder.setSelection(0);
+		
+		dialog.setDefaultButton( buttonClose );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private void makeTabItem(TabFolder tabFolder,String itemName,String itemText){
+		Composite control = new Composite(tabFolder, SWT.NONE);
+		control.setLayout(new GridLayout());
+		control.setLayoutData(new FormData(TAB_ITEM_WIDTH,TAB_ITEM_HEIGHT));
+		
+		Text text = new Text(control,SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
+		text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		text.setBackground(TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_WHITE));
+		text.setEditable(false);
+		text.append(itemText);
+		text.setSelection(0);
+		
+		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
+		tabItem.setText(TuxGuitar.getProperty(PROPERTY_PREFIX + itemName));
+		tabItem.setControl(control);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/help/doc/TGDocumentation.java b/TuxGuitar/src/org/herac/tuxguitar/app/help/doc/TGDocumentation.java
new file mode 100644
index 0000000..a5f4a06
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/help/doc/TGDocumentation.java
@@ -0,0 +1,60 @@
+package org.herac.tuxguitar.app.help.doc;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+
+import org.eclipse.swt.program.Program;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+
+public class TGDocumentation {
+	
+	private static final String RESOURCE_PATH = "help";
+	private static final String TEMPORAL_PATH = System.getProperty("java.io.tmpdir") + File.separator + "tuxguitar";
+	
+	public void display() throws Throwable{
+		URL url = getIndexUrl();
+		if( url != null ){
+			Program.launch( url.toExternalForm() );
+		}
+	}
+	
+	private URL getIndexUrl() throws Throwable{
+		URL url = TGFileUtils.getResourceUrl(RESOURCE_PATH + "/index.html");
+		if( url != null && !TGFileUtils.isLocalFile( url ) ){
+			String path = TEMPORAL_PATH + File.separator + RESOURCE_PATH;
+			copyTemporalResources(path, RESOURCE_PATH, TGFileUtils.getFileNames( RESOURCE_PATH ));
+			url = new File( path + File.separator + "index.html" ).toURI().toURL();
+		}
+		return url;
+	}
+	
+	private void copyTemporalResources( String dstPath , String resourcePath, String[] resources ) throws Throwable{
+		if( resources != null ){
+			for( int i = 0 ; i < resources.length ; i ++ ){
+				File file = new File( dstPath + File.separator + resources[i] );
+				file.getParentFile().mkdirs();
+				String resource = (resourcePath + "/" + resources[i]);
+				String[] children = TGFileUtils.getFileNames(resource);
+				if( children != null && children.length > 0 ){
+					copyTemporalResources( file.getAbsolutePath(), resource , children );
+				}else if( !file.exists() ){
+					InputStream in = TGFileUtils.getResourceAsStream(resource);
+					if( in != null ){
+						OutputStream out = new FileOutputStream( file );
+						int len = 0;
+						byte[] buf = new byte[1024];
+						while ((len = in.read(buf)) > 0){
+							out.write(buf, 0, len);
+						}
+						out.flush();
+						out.close();
+						in.close();
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/helper/FileHistory.java b/TuxGuitar/src/org/herac/tuxguitar/app/helper/FileHistory.java
new file mode 100644
index 0000000..8a1e3a1
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/helper/FileHistory.java
@@ -0,0 +1,236 @@
+/*
+ * Created on 08-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.helper;
+
+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.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class FileHistory {
+	
+	private static final int URL_LIMIT = TuxGuitar.instance().getConfig().getIntegerValue(TGConfigKeys.MAX_HISTORY_FILES);
+	
+	private boolean changed;
+	private boolean newFile;
+	private boolean localFile;
+	private boolean unsavedFile;
+	private List urls;
+	private String chooserPath;
+	
+	public FileHistory(){
+		this.urls = new ArrayList();
+		this.loadHistory();
+		this.reset(null);
+	}
+	
+	public void reset(URL url) {
+		this.unsavedFile = false;
+		this.newFile = (url == null);
+		this.localFile = (url != null && isLocalFile(url));
+		this.addURL(url);
+	}
+	
+	public boolean isNewFile(){
+		return this.newFile;
+	}
+	
+	public boolean isLocalFile(){
+		return this.localFile;
+	}
+	
+	public boolean isUnsavedFile() {
+		return this.unsavedFile;
+	}
+	
+	public void setUnsavedFile() {
+		this.unsavedFile = true;
+	}
+	
+	public void setChooserPath(String chooserPath){
+		this.chooserPath = chooserPath;
+	}
+	
+	public void setChooserPath(URL url){
+		String path = getFilePath(url);
+		if( path != null ){
+			this.setChooserPath( path );
+		}
+	}
+	
+	public String getCurrentFileName(String defaultName) {
+		if(!this.isNewFile()){
+			URL url = getCurrentURL();
+			if(url != null){
+				return decode(new File(url.getFile()).getName());
+			}
+		}
+		return defaultName;
+	}
+	
+	public String getCurrentFilePath() {
+		if(!this.isNewFile()){
+			URL url = getCurrentURL();
+			if(url != null){
+				String file = getFilePath(url);
+				if(file != null){
+					return decode(file);
+				}
+			}
+		}
+		return this.chooserPath;
+	}
+	
+	public String getSavePath() {
+		String current = getCurrentFilePath();
+		return (current != null ? current : this.chooserPath);
+	}
+	
+	public String getOpenPath() {
+		return this.chooserPath;
+	}
+	
+	protected String getFilePath(URL url){
+		if(isLocalFile(url)){
+			return new File(url.getFile()).getParent();
+		}
+		return null;
+	}
+	
+	protected String decode(String url){
+		try {
+			return URLDecoder.decode(url, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		return url;
+	}
+	
+	protected boolean isLocalFile(URL url){
+		try {
+			if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){
+				return true;
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return false;
+	}
+	
+	protected URL getCurrentURL(){
+		if(!this.urls.isEmpty()){
+			return (URL)this.urls.get(0);
+		}
+		return null;
+	}
+	
+	public void addURL(URL url){
+		if(url != null){
+			removeURL(url);
+			this.urls.add(0,url);
+			checkLimit();
+			setChanged(true);
+		}
+		saveHistory();
+	}
+	
+	public List getURLs(){
+		return this.urls;
+	}
+	
+	private void checkLimit(){
+		while(this.urls.size() > URL_LIMIT){
+			this.urls.remove(this.urls.size() - 1);
+		}
+	}
+	
+	private void removeURL(URL url){
+		for(int i = 0; i < this.urls.size(); i++){
+			URL old = (URL)this.urls.get(i);
+			if(old.toString().equals(url.toString())){
+				this.urls.remove(i);
+				break;
+			}
+		}
+	}
+	
+	public boolean isChanged() {
+		return this.changed;
+	}
+	
+	public void setChanged(boolean changed) {
+		this.changed = changed;
+	}
+	
+	public void loadHistory() {
+		try {
+			this.urls.clear();
+			if(new File(getHistoryFileName()).exists()){
+				InputStream inputStream = new FileInputStream(getHistoryFileName());
+				Properties properties = new Properties();
+				properties.load(inputStream);
+				
+				this.chooserPath = (String)properties.get("history.path");
+				
+				int count = Integer.parseInt((String)properties.get("history.count"));
+				for(int i = 0; i < count;i ++){
+					String url = (String)properties.get("history." + i);
+					if(URL_LIMIT > i && url != null && url.length() > 0){
+						this.urls.add(new URL(url));
+					}
+				}
+				setChanged(true);
+			}else{
+				this.saveHistory();
+			}
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void saveHistory(){
+		try {
+			Properties properties = new Properties();
+			
+			int count = this.urls.size();
+			for(int i = 0;i < count;i ++){
+				properties.put("history." + i,this.urls.get(i).toString());
+			}
+			properties.put("history.count",Integer.toString(count));
+			if(this.chooserPath != null){
+				properties.put("history.path",this.chooserPath);
+			}
+			properties.store(new FileOutputStream(getHistoryFileName()),"History Files");
+		} catch (FileNotFoundException e1) {
+			e1.printStackTrace();
+		} catch (IOException e1) {
+			e1.printStackTrace();
+		}
+	}
+	
+	private String getHistoryFileName(){
+		return TGFileUtils.PATH_USER_CONFIG + File.separator + "history.properties";
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/helper/SyncThread.java b/TuxGuitar/src/org/herac/tuxguitar/app/helper/SyncThread.java
new file mode 100644
index 0000000..4802e71
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/helper/SyncThread.java
@@ -0,0 +1,40 @@
+/*
+ * Created on 09-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.helper;
+
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class SyncThread extends Thread {
+	
+	private TGSynchronizer.TGRunnable runnable;
+	
+	public SyncThread(TGSynchronizer.TGRunnable runnable) {
+		this.runnable = runnable;
+	}
+	
+	public SyncThread(final Runnable runnable) {
+		this(new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				runnable.run();
+			}
+		});
+	}
+	
+	public void run() {
+		try {
+			TGSynchronizer.instance().execute(this.runnable);
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/ItemBase.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/ItemBase.java
new file mode 100644
index 0000000..0fa2c6f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/ItemBase.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.app.items;
+
+public interface ItemBase {
+	/**
+	 * Actualiza los estados
+	 */
+	public void update();
+	/**
+	 * Actualiza los textos
+	 */
+	public void loadProperties();
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/ItemManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/ItemManager.java
new file mode 100644
index 0000000..80e57a6
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/ItemManager.java
@@ -0,0 +1,486 @@
+/*
+ * Created on 18-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.CoolBar;
+import org.eclipse.swt.widgets.CoolItem;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.items.menu.BeatMenuItem;
+import org.herac.tuxguitar.app.items.menu.CompositionMenuItem;
+import org.herac.tuxguitar.app.items.menu.EditMenuItem;
+import org.herac.tuxguitar.app.items.menu.FileMenuItem;
+import org.herac.tuxguitar.app.items.menu.HelpMenuItem;
+import org.herac.tuxguitar.app.items.menu.MarkerMenuItem;
+import org.herac.tuxguitar.app.items.menu.MeasureMenuItem;
+import org.herac.tuxguitar.app.items.menu.ToolMenuItem;
+import org.herac.tuxguitar.app.items.menu.TrackMenuItem;
+import org.herac.tuxguitar.app.items.menu.TransportMenuItem;
+import org.herac.tuxguitar.app.items.menu.ViewMenuItem;
+import org.herac.tuxguitar.app.items.tool.BeatToolItems;
+import org.herac.tuxguitar.app.items.tool.CompositionToolItems;
+import org.herac.tuxguitar.app.items.tool.DurationToolItems;
+import org.herac.tuxguitar.app.items.tool.DynamicToolItems;
+import org.herac.tuxguitar.app.items.tool.EditToolItems;
+import org.herac.tuxguitar.app.items.tool.FileToolItems;
+import org.herac.tuxguitar.app.items.tool.LayoutToolItems;
+import org.herac.tuxguitar.app.items.tool.MarkerToolItems;
+import org.herac.tuxguitar.app.items.tool.NoteEffectToolItems;
+import org.herac.tuxguitar.app.items.tool.PropertiesToolItems;
+import org.herac.tuxguitar.app.items.tool.TrackToolItems;
+import org.herac.tuxguitar.app.items.tool.TransportToolItems;
+import org.herac.tuxguitar.app.items.tool.ViewToolItems;
+import org.herac.tuxguitar.app.items.xml.ToolBarsReader;
+import org.herac.tuxguitar.app.items.xml.ToolBarsWriter;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.base.TGRawImporter;
+import org.herac.tuxguitar.io.base.event.TGRawExporterAddedListener;
+import org.herac.tuxguitar.io.base.event.TGRawExporterRemovedListener;
+import org.herac.tuxguitar.io.base.event.TGRawImporterAddedListener;
+import org.herac.tuxguitar.io.base.event.TGRawImporterRemovedListener;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ItemManager implements TGUpdateListener, IconLoader, LanguageLoader, TGRawImporterAddedListener, TGRawImporterRemovedListener, TGRawExporterAddedListener, TGRawExporterRemovedListener{
+	
+	private Menu menu;
+	private Menu popupMenu;
+	private CoolBar coolBar;
+	private List loadedToolItems;
+	private List loadedMenuItems;
+	private List loadedPopupMenuItems;
+	private ToolItems[] toolItems;
+	
+	private boolean layout_locked;
+	private boolean shouldReloadToolBars;
+	private boolean coolbarVisible;
+	private boolean updateCoolBarWrapIndicesEnabled;
+	
+	public ItemManager(){
+		this.loadedToolItems = new ArrayList();
+		this.loadedMenuItems = new ArrayList();
+		this.loadedPopupMenuItems = new ArrayList();
+		this.layout_locked = false;
+		this.setDefaultToolBars();
+		this.loadItems();
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
+		TGFileFormatManager.instance().getEventManager().addRawExporterAddedListener(this);
+		TGFileFormatManager.instance().getEventManager().addRawExporterRemovedListener(this);
+		TGFileFormatManager.instance().getEventManager().addRawImporterAddedListener(this);
+		TGFileFormatManager.instance().getEventManager().addRawImporterRemovedListener(this);
+	}
+	
+	public void loadItems(){
+		this.createMenu();
+		this.createPopupMenu();
+		this.createCoolbar();
+	}
+	
+	public boolean isCoolbarVisible(){
+		return this.coolbarVisible;
+	}
+	
+	public void createCoolbar() {
+		boolean initialized = (this.coolBar != null && !this.coolBar.isDisposed());
+		
+		this.layout_locked = true;
+		this.updateCoolBarWrapIndicesEnabled = true;
+		if( !initialized ){
+			FormData coolData = new FormData();
+			coolData.left = new FormAttachment(0);
+			coolData.right = new FormAttachment(100);
+			coolData.top = new FormAttachment(0,0);
+			
+			this.coolBar = new CoolBar(TuxGuitar.instance().getShell(),SWT.HORIZONTAL | SWT.FLAT);
+			this.coolBar.setLayoutData(coolData);
+			this.coolBar.setVisible( this.coolbarVisible );
+			this.coolBar.addListener(SWT.Resize, new Listener() {
+				public void handleEvent(Event event) {
+					layoutCoolBar();
+				}
+			});
+			this.coolBar.addListener(SWT.DragDetect, new Listener() {
+				public void handleEvent(Event event) {
+					disableUpdateCoolBarWrapIndices();
+				}
+			});
+			
+			TuxGuitar.instance().getKeyBindingManager().appendListenersTo(this.coolBar);
+		}
+		
+		if( this.coolbarVisible ) {
+			this.makeCoolItems();
+		}
+		
+		this.layout_locked = false;
+		
+		if( initialized ){
+			this.layoutCoolBar();
+		}
+	}
+	
+	public void toogleToolbarVisibility(){
+		if(this.coolBar != null && !this.coolBar.isDisposed()){
+			this.layout_locked = true;
+			
+			this.coolBar.setVisible( !this.coolbarVisible );
+			if( this.coolbarVisible ){
+				this.clearCoolBar();
+			}else{
+				this.makeCoolItems();
+			}
+			
+			this.layout_locked = false;
+			
+			this.layoutCoolBar();
+		}
+	}
+	
+	private void clearCoolBar(){
+		if(this.coolBar != null && !this.coolBar.isDisposed()){
+			this.loadedToolItems.clear();
+			CoolItem[] items = this.coolBar.getItems();
+			for(int i = 0;i < items.length; i ++){
+				items[i].dispose();
+			}
+			Control[] controls = this.coolBar.getChildren();
+			for(int i = 0;i < controls.length; i ++){
+				controls[i].dispose();
+			}
+		}
+		this.coolbarVisible = false;
+	}
+	
+	protected void updateCoolBarWrapIndices(){
+		int coolBarWidth = this.coolBar.getClientArea().width;
+		int coolItemsWidth = 0;
+		
+		List coolItemIndices = new ArrayList();
+		
+		CoolItem[] items = this.coolBar.getItems();
+		for(int i = 0;i < items.length; i ++){
+			Point controlSize = items[i].getControl().computeSize(SWT.DEFAULT, SWT.DEFAULT);
+			Point itemSize = items[i].computeSize(controlSize.x, controlSize.y);
+			
+			int nextCoolItemsWidth = ( coolItemsWidth + itemSize.x );
+			if( nextCoolItemsWidth > coolBarWidth ){
+				coolItemIndices.add( new Integer( i ) );
+				nextCoolItemsWidth = itemSize.x;
+			}
+			coolItemsWidth = nextCoolItemsWidth;
+		}
+		
+		int[] coolItemIndicesArray = new int[ coolItemIndices.size() ];
+		for(int i = 0;i < coolItemIndicesArray.length; i ++){
+			coolItemIndicesArray[i] = ((Integer)coolItemIndices.get(i)).intValue();
+		}
+		
+		this.coolBar.setWrapIndices( coolItemIndicesArray );
+	}
+	
+	protected void layoutCoolBar(){
+		if(!this.layout_locked){
+			this.layout_locked = true;
+			if( this.updateCoolBarWrapIndicesEnabled ){
+				this.updateCoolBarWrapIndices();
+			}
+			this.layoutShellLater();
+			this.layout_locked = false;
+		}
+	}
+	
+	protected void layoutShell(){
+		if(!this.layout_locked){
+			this.layout_locked = true;
+			TuxGuitar.instance().getShell().layout(true,true);
+			this.layout_locked = false;
+		}
+	}
+	
+	protected void layoutShellLater(){
+		try {
+			TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					layoutShell();
+				}
+			});
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public void makeCoolItems(){
+		this.clearCoolBar();
+		this.readToolBars();
+		for(int i = 0; i < this.toolItems.length; i ++){
+			if(this.toolItems[i].isEnabled()){
+				this.makeToolBar(this.toolItems[i]);
+			}
+		}
+		this.coolbarVisible = true;
+	}
+	
+	private void makeToolBar(ToolItems item){
+		ToolBar toolBar = new ToolBar(this.coolBar,SWT.HORIZONTAL | SWT.FLAT );
+		item.showItems(toolBar);
+		makeCoolItem(toolBar); 
+		this.loadedToolItems.add(item);
+	}
+	
+	private void makeCoolItem(ToolBar toolBar){
+		Point size = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);
+		CoolItem coolItem = new CoolItem(this.coolBar, SWT.NONE);
+		coolItem.setMinimumSize(size);
+		coolItem.setPreferredSize(coolItem.computeSize(size.x, size.y));
+		coolItem.setControl(toolBar);
+	}
+	
+	public void createMenu() {
+		Shell shell = TuxGuitar.instance().getShell();
+		if(this.menu == null || this.menu.isDisposed()){
+			this.menu = new Menu(shell, SWT.BAR);
+		}
+		MenuItem[] items = this.menu.getItems();
+		for(int i = 0; i < items.length;i ++){
+			items[i].dispose();
+		}
+		
+		this.loadedMenuItems.clear();
+		this.loadedMenuItems.add(new FileMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new EditMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new ViewMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new CompositionMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new TrackMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new MeasureMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new BeatMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new MarkerMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new TransportMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new ToolMenuItem(shell,this.menu, SWT.CASCADE));
+		this.loadedMenuItems.add(new HelpMenuItem(shell,this.menu, SWT.CASCADE));
+		this.showMenuItems(this.loadedMenuItems);
+		shell.setMenuBar(this.menu);
+	}
+	
+	public void createPopupMenu() {
+		Shell shell = TuxGuitar.instance().getShell();
+		if(this.popupMenu == null || this.popupMenu.isDisposed()){
+			this.popupMenu = new Menu(shell, SWT.POP_UP);
+		}
+		MenuItem[] items = this.popupMenu.getItems();
+		for(int i = 0; i < items.length;i ++){
+			items[i].dispose();
+		}
+		this.loadedPopupMenuItems.clear();
+		this.loadedPopupMenuItems.add(new EditMenuItem(shell,this.popupMenu, SWT.CASCADE));
+		this.loadedPopupMenuItems.add(new CompositionMenuItem(shell,this.popupMenu, SWT.CASCADE));
+		this.loadedPopupMenuItems.add(new TrackMenuItem(shell,this.popupMenu, SWT.CASCADE));
+		this.loadedPopupMenuItems.add(new MeasureMenuItem(shell,this.popupMenu, SWT.CASCADE));
+		this.loadedPopupMenuItems.add(new BeatMenuItem(shell,this.popupMenu, SWT.CASCADE)); 
+		this.loadedPopupMenuItems.add(new MarkerMenuItem(shell,this.popupMenu, SWT.CASCADE));
+		this.loadedPopupMenuItems.add(new TransportMenuItem(shell,this.popupMenu, SWT.CASCADE));
+		this.showMenuItems(this.loadedPopupMenuItems);
+	}
+	
+	private void showMenuItems(List items){
+		Iterator it = items.iterator();
+		while(it.hasNext()){
+			MenuItems item = (MenuItems)it.next();
+			item.showItems();
+		}
+	}
+	
+	public void updateItems(){
+		if(!isDisposed()){
+			updateItems(this.loadedToolItems);
+			updateItems(this.loadedMenuItems);
+			updateItems(this.loadedPopupMenuItems);
+		}
+	}
+	
+	public void updateItems(List items){
+		Iterator it = items.iterator();
+		while(it.hasNext()){
+			ItemBase item = (ItemBase)it.next();
+			item.update();
+		}
+	}
+	
+	public void loadProperties(){
+		if(!isDisposed()){
+			loadProperties(this.loadedToolItems);
+			loadProperties(this.loadedMenuItems);
+			loadProperties(this.loadedPopupMenuItems);
+		}
+	}
+	
+	public void loadProperties(List items){
+		Iterator it = items.iterator();
+		while(it.hasNext()){
+			ItemBase item = (ItemBase)it.next();
+			item.loadProperties();
+		}
+	}
+	
+	public void loadIcons(){
+		this.loadItems();
+	}
+	
+	public CoolBar getCoolbar(){
+		return this.coolBar;
+	}
+	
+	public Menu getPopupMenu(){
+		return this.popupMenu;
+	}
+	
+	public void readToolBars() {
+		File file = new File(getCoolItemsFileName());
+		if(!file.exists()){
+			writeToolBars();
+		}
+		this.shouldReloadToolBars = false;
+		ToolBarsReader.loadToolBars(this,file);
+	}
+	
+	public void writeToolBars(){
+		File file = new File(getCoolItemsFileName());
+		ToolBarsWriter.saveToolBars(getToolBars(), file);
+	}
+	
+	public void setToolBarStatus(String name, boolean enabled, int index){
+		if(index >= 0 && index < this.toolItems.length){
+			setToolBarPosition(name, index);
+			setToolBarEnabled(index, enabled);
+		}
+	}
+	
+	public void setToolBarEnabled(int index, boolean enabled){
+		this.shouldReloadToolBars = (this.shouldReloadToolBars || (this.toolItems[ index ].isEnabled() != enabled ));
+		
+		this.toolItems[ index ].setEnabled(enabled);
+	}
+	
+	public void setToolBarPosition(String name, int index){
+		if(index >= 0 && index < this.toolItems.length){
+			ToolItems element = this.toolItems[index];
+			if( ! element.getName().trim().toLowerCase().equals(name.trim().toLowerCase())){
+				int oldIndex = -1;
+				for(int i = 0; i < this.toolItems.length; i ++){
+					if(this.toolItems[i].getName().trim().toLowerCase().equals(name.trim().toLowerCase())){
+						oldIndex = i;
+						break;
+					}
+				}
+				if(oldIndex == -1){
+					return;
+				}
+				this.toolItems[index] = this.toolItems[oldIndex];
+				this.toolItems[oldIndex] = element;
+				
+				this.shouldReloadToolBars = true;
+			}
+		}
+	}
+	
+	public ToolItems[] getToolBars(){
+		return this.toolItems;
+	}
+	
+	public boolean shouldReloadToolBars(){
+		return this.shouldReloadToolBars;
+	}
+	
+	public void setDefaultToolBars(){
+		this.toolItems = new ToolItems[]{
+				initToolItem(new FileToolItems(), true),
+				initToolItem(new EditToolItems(), true),
+				initToolItem(new PropertiesToolItems(), true),
+				initToolItem(new TrackToolItems(), true),
+				initToolItem(new DurationToolItems(), true),
+				initToolItem(new BeatToolItems(), true),
+				initToolItem(new CompositionToolItems(), true),
+				initToolItem(new TransportToolItems(), true),
+				initToolItem(new MarkerToolItems(), true),
+				initToolItem(new LayoutToolItems(), true),
+				initToolItem(new ViewToolItems(), true),
+				initToolItem(new NoteEffectToolItems(), true),
+				initToolItem(new DynamicToolItems(), true),
+		};
+		this.shouldReloadToolBars = true;
+		this.coolbarVisible = true;
+	}
+	
+	private ToolItems initToolItem(ToolItems item, boolean enabled){
+		item.setEnabled(enabled);
+		return item;
+	}
+	
+	private boolean isDisposed(){
+		return (this.coolBar.isDisposed() || this.menu.isDisposed() || this.popupMenu.isDisposed());
+	}
+	
+	private String getCoolItemsFileName(){
+		return TGFileUtils.PATH_USER_CONFIG + File.separator + "toolbars.xml";
+	}
+
+	public void doUpdate(int type) {
+		if( type == TGUpdateListener.SELECTION ){
+			this.updateItems();
+		}
+	}
+	
+	public void disableUpdateCoolBarWrapIndices() {
+		if( this.updateCoolBarWrapIndicesEnabled ){
+			this.coolBar.setWrapIndices( null );
+		}
+		this.updateCoolBarWrapIndicesEnabled = false;
+	}
+
+	public void onRawExporterRemoved(TGRawExporter exporter) {
+		this.createMenu();
+	}
+
+	public void onRawExporterAdded(TGRawExporter exporter) {
+		this.createMenu();
+	}
+
+	public void onRawImporterRemoved(TGRawImporter importer) {
+		this.createMenu();
+	}
+
+	public void onRawImporterAdded(TGRawImporter importer) {
+		this.createMenu();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/MenuItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/MenuItems.java
new file mode 100644
index 0000000..835bc47
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/MenuItems.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.app.items;
+
+
+import org.eclipse.swt.widgets.MenuItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.keybindings.KeyBinding;
+
+public abstract class MenuItems implements ItemBase {
+	
+	public abstract void showItems();
+	
+	protected void setMenuItemTextAndAccelerator(MenuItem menuItem, String key,String action) {
+		String text = TuxGuitar.getProperty(key);
+		if (action != null) {
+			KeyBinding keyBinding = TuxGuitar.instance().getKeyBindingManager().getKeyBindingForAction(action);
+			if (keyBinding != null) {
+				text += "\t" + keyBinding.toString() + "\u0000";
+			}
+		}
+		menuItem.setText(text);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/ToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/ToolItems.java
new file mode 100644
index 0000000..a195967
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/ToolItems.java
@@ -0,0 +1,35 @@
+package org.herac.tuxguitar.app.items;
+
+import org.eclipse.swt.widgets.ToolBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+
+public abstract class ToolItems implements ItemBase{
+	
+	private String name;
+	private boolean enabled;
+	
+	public ToolItems(String name){
+		this.name = name;
+		this.enabled = true;
+	}
+	
+	public String getName(){
+		return this.name;
+	}
+	
+	public boolean isEnabled() {
+		return this.enabled;
+	}
+	
+	public void setEnabled(boolean enabled) {
+		this.enabled = enabled;
+	}
+	
+	protected TablatureEditor getEditor(){
+		return TuxGuitar.instance().getTablatureEditor();
+	}
+	
+	public abstract void showItems(ToolBar toolBar);
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/BeatMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/BeatMenuItem.java
new file mode 100644
index 0000000..1928cf1
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/BeatMenuItem.java
@@ -0,0 +1,252 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.insert.InsertTextAction;
+import org.herac.tuxguitar.app.action.impl.note.ChangeTiedNoteAction;
+import org.herac.tuxguitar.app.action.impl.note.CleanBeatAction;
+import org.herac.tuxguitar.app.action.impl.note.DecrementNoteSemitoneAction;
+import org.herac.tuxguitar.app.action.impl.note.DeleteNoteOrRestAction;
+import org.herac.tuxguitar.app.action.impl.note.IncrementNoteSemitoneAction;
+import org.herac.tuxguitar.app.action.impl.note.InsertRestBeatAction;
+import org.herac.tuxguitar.app.action.impl.note.MoveBeatsCustomAction;
+import org.herac.tuxguitar.app.action.impl.note.MoveBeatsLeftAction;
+import org.herac.tuxguitar.app.action.impl.note.MoveBeatsRightAction;
+import org.herac.tuxguitar.app.action.impl.note.RemoveUnusedVoiceAction;
+import org.herac.tuxguitar.app.action.impl.note.SetStrokeDownAction;
+import org.herac.tuxguitar.app.action.impl.note.SetStrokeUpAction;
+import org.herac.tuxguitar.app.action.impl.note.SetVoiceAutoAction;
+import org.herac.tuxguitar.app.action.impl.note.SetVoiceDownAction;
+import org.herac.tuxguitar.app.action.impl.note.SetVoiceUpAction;
+import org.herac.tuxguitar.app.action.impl.note.ShiftNoteDownAction;
+import org.herac.tuxguitar.app.action.impl.note.ShiftNoteUpAction;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGStroke;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class BeatMenuItem extends MenuItems{
+	
+	private MenuItem noteMenuItem;
+	private Menu menu;
+	private MenuItem tiedNote;
+	private MenuItem insertRestBeat;
+	private MenuItem deleteNoteOrRest;
+	private MenuItem cleanBeat;
+	private MenuItem removeVoice;
+	private MenuItem insertText;
+	private MenuItem voiceAuto;
+	private MenuItem voiceUp;
+	private MenuItem voiceDown;
+	private MenuItem strokeUp;
+	private MenuItem strokeDown;
+	private MenuItem shiftUp;
+	private MenuItem shiftDown;
+	private MenuItem semitoneUp;
+	private MenuItem semitoneDown;
+	private MenuItem moveBeatsLeft;
+	private MenuItem moveBeatsRight;
+	private MenuItem moveBeatsCustom;
+	private DurationMenuItem durationMenuItem;
+	private ChordMenuItem chordMenuItem;
+	private NoteEffectsMenuItem effectMenuItem;
+	private DynamicMenuItem dynamicMenuItem;
+	
+	public BeatMenuItem(Shell shell,Menu parent, int style) {
+		this.noteMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		//--Tied Note
+		this.tiedNote = new MenuItem(this.menu, SWT.CHECK);
+		this.tiedNote.addSelectionListener(new TGActionProcessor(ChangeTiedNoteAction.NAME));
+		
+		//--Insert Rest Beat
+		this.insertRestBeat = new MenuItem(this.menu, SWT.PUSH);
+		this.insertRestBeat.addSelectionListener(new TGActionProcessor(InsertRestBeatAction.NAME));
+		
+		//--Delete Note or Rest
+		this.deleteNoteOrRest = new MenuItem(this.menu, SWT.PUSH);
+		this.deleteNoteOrRest.addSelectionListener(new TGActionProcessor(DeleteNoteOrRestAction.NAME));
+		
+		//--Clean Beat
+		this.cleanBeat = new MenuItem(this.menu, SWT.PUSH);
+		this.cleanBeat.addSelectionListener(new TGActionProcessor(CleanBeatAction.NAME));
+		
+		//--Remove Voice
+		this.removeVoice = new MenuItem(this.menu, SWT.PUSH);
+		this.removeVoice.addSelectionListener(new TGActionProcessor(RemoveUnusedVoiceAction.NAME));
+		
+		//--Duration--
+		this.durationMenuItem = new DurationMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE);
+		this.durationMenuItem.showItems();
+		
+		//--Chord--
+		this.chordMenuItem = new ChordMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE);
+		this.chordMenuItem.showItems();
+		
+		//--Effects--
+		this.effectMenuItem = new NoteEffectsMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE);
+		this.effectMenuItem.showItems();
+		
+		//--Dynamic--
+		this.dynamicMenuItem = new DynamicMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE);
+		this.dynamicMenuItem.showItems();
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		this.insertText = new MenuItem(this.menu, SWT.PUSH);
+		this.insertText.addSelectionListener(new TGActionProcessor(InsertTextAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--Semitone Down
+		this.voiceAuto = new MenuItem(this.menu, SWT.PUSH);
+		this.voiceAuto.addSelectionListener(new TGActionProcessor(SetVoiceAutoAction.NAME));
+		
+		//--Semitone Up
+		this.voiceUp = new MenuItem(this.menu, SWT.PUSH);
+		this.voiceUp.addSelectionListener(new TGActionProcessor(SetVoiceUpAction.NAME));
+		
+		//--Semitone Down
+		this.voiceDown = new MenuItem(this.menu, SWT.PUSH);
+		this.voiceDown.addSelectionListener(new TGActionProcessor(SetVoiceDownAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--Semitone Up
+		this.strokeUp = new MenuItem(this.menu, SWT.CHECK);
+		this.strokeUp.addSelectionListener(new TGActionProcessor(SetStrokeUpAction.NAME));
+		
+		//--Semitone Down
+		this.strokeDown = new MenuItem(this.menu, SWT.CHECK);
+		this.strokeDown.addSelectionListener(new TGActionProcessor(SetStrokeDownAction.NAME));
+				
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--Semitone Up
+		this.semitoneUp = new MenuItem(this.menu, SWT.PUSH);
+		this.semitoneUp.addSelectionListener(new TGActionProcessor(IncrementNoteSemitoneAction.NAME));
+		
+		//--Semitone Down
+		this.semitoneDown = new MenuItem(this.menu, SWT.PUSH);
+		this.semitoneDown.addSelectionListener(new TGActionProcessor(DecrementNoteSemitoneAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--Shift Up
+		this.shiftUp = new MenuItem(this.menu, SWT.PUSH);
+		this.shiftUp.addSelectionListener(new TGActionProcessor(ShiftNoteUpAction.NAME));
+		
+		//--Shift Down
+		this.shiftDown = new MenuItem(this.menu, SWT.PUSH);
+		this.shiftDown.addSelectionListener(new TGActionProcessor(ShiftNoteDownAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--Move Beats Left
+		this.moveBeatsLeft = new MenuItem(this.menu, SWT.PUSH);
+		this.moveBeatsLeft.addSelectionListener(new TGActionProcessor(MoveBeatsLeftAction.NAME));
+		
+		//--Move Beats Right
+		this.moveBeatsRight = new MenuItem(this.menu, SWT.PUSH);
+		this.moveBeatsRight.addSelectionListener(new TGActionProcessor(MoveBeatsRightAction.NAME));
+		
+		//--Move Beats Custom
+		this.moveBeatsCustom = new MenuItem(this.menu, SWT.PUSH);
+		this.moveBeatsCustom.addSelectionListener(new TGActionProcessor(MoveBeatsCustomAction.NAME));
+		
+		this.noteMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+		TGBeat beat = caret.getSelectedBeat();
+		TGNote note = caret.getSelectedNote();
+		boolean restBeat = caret.isRestBeatSelected();
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.tiedNote.setEnabled(!running);
+		this.tiedNote.setSelection(note != null && note.isTiedNote());
+		this.insertRestBeat.setEnabled(!running);
+		this.deleteNoteOrRest.setEnabled(!running);
+		this.cleanBeat.setEnabled(!running);
+		this.removeVoice.setEnabled(!running);
+		this.voiceAuto.setEnabled(!running && !restBeat);
+		this.voiceUp.setEnabled(!running && !restBeat);
+		this.voiceDown.setEnabled(!running && !restBeat);
+		this.strokeUp.setEnabled(!running && !restBeat);
+		this.strokeUp.setSelection( beat != null && beat.getStroke().getDirection() == TGStroke.STROKE_UP );
+		this.strokeDown.setEnabled(!running && !restBeat);
+		this.strokeDown.setSelection( beat != null && beat.getStroke().getDirection() == TGStroke.STROKE_DOWN );
+		this.semitoneUp.setEnabled(!running && note != null);
+		this.semitoneDown.setEnabled(!running && note != null);
+		this.shiftUp.setEnabled(!running && note != null);
+		this.shiftDown.setEnabled(!running && note != null);
+		this.insertText.setEnabled(!running);
+		this.moveBeatsLeft.setEnabled(!running);
+		this.moveBeatsRight.setEnabled(!running);
+		this.moveBeatsCustom.setEnabled(!running);
+		this.durationMenuItem.update();
+		this.chordMenuItem.update();
+		this.effectMenuItem.update();
+		this.dynamicMenuItem.update();
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.noteMenuItem, "beat", null);
+		setMenuItemTextAndAccelerator(this.cleanBeat, "beat.clean", CleanBeatAction.NAME);
+		setMenuItemTextAndAccelerator(this.removeVoice, "beat.voice.remove-unused", RemoveUnusedVoiceAction.NAME);
+		setMenuItemTextAndAccelerator(this.tiedNote, "note.tiednote", ChangeTiedNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.insertRestBeat, "beat.insert-rest", InsertRestBeatAction.NAME);
+		setMenuItemTextAndAccelerator(this.deleteNoteOrRest, "beat.delete-note-or-rest", DeleteNoteOrRestAction.NAME);
+		setMenuItemTextAndAccelerator(this.voiceAuto, "beat.voice-auto", SetVoiceAutoAction.NAME);
+		setMenuItemTextAndAccelerator(this.voiceUp, "beat.voice-up", SetVoiceUpAction.NAME);
+		setMenuItemTextAndAccelerator(this.voiceDown, "beat.voice-down", SetVoiceDownAction.NAME);
+		setMenuItemTextAndAccelerator(this.strokeUp, "beat.stroke-up", SetStrokeUpAction.NAME);
+		setMenuItemTextAndAccelerator(this.strokeDown, "beat.stroke-down", SetStrokeDownAction.NAME);
+		setMenuItemTextAndAccelerator(this.semitoneUp, "note.semitone-up", IncrementNoteSemitoneAction.NAME);
+		setMenuItemTextAndAccelerator(this.semitoneDown, "note.semitone-down", DecrementNoteSemitoneAction.NAME);
+		setMenuItemTextAndAccelerator(this.shiftUp, "note.shift-up", ShiftNoteUpAction.NAME);
+		setMenuItemTextAndAccelerator(this.shiftDown, "note.shift-down", ShiftNoteDownAction.NAME);
+		setMenuItemTextAndAccelerator(this.insertText, "text.insert", InsertTextAction.NAME);
+		setMenuItemTextAndAccelerator(this.moveBeatsLeft, "beat.move-left", MoveBeatsLeftAction.NAME);
+		setMenuItemTextAndAccelerator(this.moveBeatsRight, "beat.move-right", MoveBeatsRightAction.NAME);
+		setMenuItemTextAndAccelerator(this.moveBeatsCustom, "beat.move-custom", MoveBeatsCustomAction.NAME);
+		
+		this.durationMenuItem.loadProperties();
+		this.chordMenuItem.loadProperties();
+		this.effectMenuItem.loadProperties();
+		this.dynamicMenuItem.loadProperties();
+	}
+	
+	public void loadIcons(){
+		this.tiedNote.setImage(TuxGuitar.instance().getIconManager().getNoteTied());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/ChordMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/ChordMenuItem.java
new file mode 100644
index 0000000..3054582
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/ChordMenuItem.java
@@ -0,0 +1,110 @@
+package org.herac.tuxguitar.app.items.menu;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.insert.InsertChordAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class ChordMenuItem extends MenuItems{
+	private MenuItem chordMenuItem;
+	private Menu menu;
+	private MenuItem insertChord;
+	private MenuItem[] subMenuItems;
+	
+	private long lastEdit;
+	
+	public ChordMenuItem(Shell shell,Menu parent, int style) {
+		this.chordMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems() {
+		//--INSERT CHORD--
+		this.insertChord = new MenuItem(this.menu, SWT.PUSH);
+		this.insertChord.addSelectionListener(new TGActionProcessor(InsertChordAction.NAME));
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		//--CUSTOM CHORDS--
+		this.addItems();
+		
+		this.chordMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void addItems() {
+		this.disposeItems();
+		this.subMenuItems = new MenuItem[TuxGuitar.instance().getCustomChordManager().countChords()];
+		for(int i = 0;i < this.subMenuItems.length; i++){
+			TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i);
+			Map actionData = new HashMap();
+			actionData.put(InsertChordAction.PROPERTY_CHORD, chord);
+			
+			this.subMenuItems[i] = new MenuItem(this.menu, SWT.PUSH);
+			this.subMenuItems[i].setData(actionData);
+			this.subMenuItems[i].setText(chord.getName());
+			this.subMenuItems[i].addSelectionListener(new TGActionProcessor(InsertChordAction.NAME));
+		}
+	}
+	
+	public void disposeItems() {
+		if(this.subMenuItems != null){
+			for(int i = 0;i < this.subMenuItems.length; i++){
+				this.subMenuItems[i].dispose();
+			}
+		}
+	}
+	
+	public void widgetSelected(SelectionEvent event) {
+		if (event.detail == SWT.ARROW && this.subMenuItems != null && this.subMenuItems.length > 0) {
+			ToolItem item = (ToolItem) event.widget;
+			Rectangle rect = item.getBounds();
+			Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
+			this.menu.setLocation(pt.x, pt.y + rect.height);
+			this.menu.setVisible(true);
+		}else{
+			TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					TGActionManager.getInstance().execute(InsertChordAction.NAME);
+				}
+			});
+		}
+	}
+	
+	public void update(){
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		if(this.lastEdit != TuxGuitar.instance().getCustomChordManager().getLastEdit()){
+			this.addItems();
+			this.lastEdit = TuxGuitar.instance().getCustomChordManager().getLastEdit();
+		}
+		this.insertChord.setEnabled(!running);
+		for(int i = 0;i < this.subMenuItems.length; i++){
+			this.subMenuItems[i].setEnabled(!running);
+		}
+	}
+	
+	public void loadProperties() {
+		setMenuItemTextAndAccelerator(this.chordMenuItem, "chord", null);
+		setMenuItemTextAndAccelerator(this.insertChord, "insert.chord", InsertChordAction.NAME);
+	}
+	
+	public void loadIcons() {
+		//Nothing to do
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/CompositionMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/CompositionMenuItem.java
new file mode 100644
index 0000000..5d67708
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/CompositionMenuItem.java
@@ -0,0 +1,124 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeClefAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeInfoAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeKeySignatureAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeTempoAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeTimeSignatureAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeTripletFeelAction;
+import org.herac.tuxguitar.app.action.impl.insert.RepeatAlternativeAction;
+import org.herac.tuxguitar.app.action.impl.insert.RepeatCloseAction;
+import org.herac.tuxguitar.app.action.impl.insert.RepeatOpenAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class CompositionMenuItem extends MenuItems{
+	private MenuItem compositionMenuItem;
+	private Menu menu;
+	private MenuItem timeSignature;
+	private MenuItem tempo;
+	private MenuItem clef;
+	private MenuItem keySignature;
+	private MenuItem repeatOpen;
+	private MenuItem repeatClose;
+	private MenuItem repeatAlternative;
+	private MenuItem tripletFeel;
+	
+	private MenuItem properties;
+	
+	public CompositionMenuItem(Shell shell,Menu parent, int style) {
+		this.compositionMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		//--TIME SIGNATURE--
+		this.timeSignature = new MenuItem(this.menu, SWT.PUSH);
+		this.timeSignature.addSelectionListener(new TGActionProcessor(ChangeTimeSignatureAction.NAME));
+		//--TEMPO--
+		this.tempo = new MenuItem(this.menu, SWT.PUSH);
+		this.tempo.addSelectionListener(new TGActionProcessor(ChangeTempoAction.NAME));
+		//--CLEF--
+		this.clef = new MenuItem(this.menu, SWT.PUSH);
+		this.clef.addSelectionListener(new TGActionProcessor(ChangeClefAction.NAME));
+		//--KEY SIGNATURE--
+		this.keySignature = new MenuItem(this.menu, SWT.PUSH);
+		this.keySignature.addSelectionListener(new TGActionProcessor(ChangeKeySignatureAction.NAME));
+		//--TRIPLET FEEL--
+		this.tripletFeel = new MenuItem(this.menu, SWT.PUSH);
+		this.tripletFeel.addSelectionListener(new TGActionProcessor(ChangeTripletFeelAction.NAME));
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		//--REPEAT OPEN--
+		this.repeatOpen = new MenuItem(this.menu, SWT.PUSH);
+		this.repeatOpen.addSelectionListener(new TGActionProcessor(RepeatOpenAction.NAME));
+		//--REPEAT CLOSE--
+		this.repeatClose = new MenuItem(this.menu, SWT.PUSH);
+		this.repeatClose.addSelectionListener(new TGActionProcessor(RepeatCloseAction.NAME));
+		//--REPEAT ALTERNATIVE--
+		this.repeatAlternative = new MenuItem(this.menu, SWT.PUSH);
+		this.repeatAlternative.addSelectionListener(new TGActionProcessor(RepeatAlternativeAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		//--INFO--
+		this.properties = new MenuItem(this.menu, SWT.PUSH);
+		this.properties.addSelectionListener(new TGActionProcessor(ChangeInfoAction.NAME));
+		
+		this.compositionMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.timeSignature.setEnabled(!running);
+		this.tempo.setEnabled(!running);
+		this.clef.setEnabled(!running);
+		this.keySignature.setEnabled(!running);
+		this.tripletFeel.setEnabled(!running);
+		this.repeatOpen.setEnabled(!running);
+		this.repeatClose.setEnabled(!running);
+		this.repeatAlternative.setEnabled(!running);
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.compositionMenuItem, "composition", null);		
+		setMenuItemTextAndAccelerator(this.timeSignature, "composition.timesignature", ChangeTimeSignatureAction.NAME);
+		setMenuItemTextAndAccelerator(this.tempo, "composition.tempo", ChangeTempoAction.NAME);
+		setMenuItemTextAndAccelerator(this.clef, "composition.clef", ChangeClefAction.NAME);
+		setMenuItemTextAndAccelerator(this.keySignature, "composition.keysignature", ChangeKeySignatureAction.NAME);
+		setMenuItemTextAndAccelerator(this.tripletFeel, "composition.tripletfeel", ChangeTripletFeelAction.NAME);
+		setMenuItemTextAndAccelerator(this.repeatOpen, "repeat.open", RepeatOpenAction.NAME);
+		setMenuItemTextAndAccelerator(this.repeatClose, "repeat.close", RepeatCloseAction.NAME);
+		setMenuItemTextAndAccelerator(this.repeatAlternative, "repeat.alternative", RepeatAlternativeAction.NAME);
+		setMenuItemTextAndAccelerator(this.properties, "composition.properties", ChangeInfoAction.NAME);
+	}
+	
+	public void loadIcons() {
+		this.timeSignature.setImage(TuxGuitar.instance().getIconManager().getCompositionTimeSignature());
+		this.tempo.setImage(TuxGuitar.instance().getIconManager().getCompositionTempo());
+		this.repeatOpen.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatOpen());
+		this.repeatClose.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatClose());
+		this.repeatAlternative.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatAlternative());
+		this.properties.setImage(TuxGuitar.instance().getIconManager().getSongProperties());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/DurationMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/DurationMenuItem.java
new file mode 100644
index 0000000..00618b4
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/DurationMenuItem.java
@@ -0,0 +1,135 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.duration.ChangeDivisionTypeAction;
+import org.herac.tuxguitar.app.action.impl.duration.ChangeDottedDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.ChangeDoubleDottedDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetEighthDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetHalfDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetQuarterDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetSixteenthDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetSixtyFourthDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetThirtySecondDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetWholeDurationAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.song.models.TGDuration;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class DurationMenuItem  extends MenuItems{
+	private MenuItem durationMenuItem;
+	private Menu menu;
+	private MenuItem whole;
+	private MenuItem half;
+	private MenuItem quarter;
+	private MenuItem eighth;
+	private MenuItem sixteenth;
+	private MenuItem thirtySecond;
+	private MenuItem sixtyFourth;
+	private MenuItem dotted;
+	private MenuItem doubleDotted;
+	private MenuItem division;
+	
+	public DurationMenuItem(Shell shell,Menu parent, int style) {
+		this.durationMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		//--whole--
+		this.whole = new MenuItem(this.menu, SWT.PUSH);
+		this.whole.addSelectionListener(new TGActionProcessor(SetWholeDurationAction.NAME));
+		//--half--
+		this.half = new MenuItem(this.menu, SWT.PUSH);
+		this.half.addSelectionListener(new TGActionProcessor(SetHalfDurationAction.NAME));
+		//--quarter--
+		this.quarter = new MenuItem(this.menu, SWT.PUSH);
+		this.quarter.addSelectionListener(new TGActionProcessor(SetQuarterDurationAction.NAME));
+		//--Eighth--
+		this.eighth = new MenuItem(this.menu, SWT.PUSH);
+		this.eighth.addSelectionListener(new TGActionProcessor(SetEighthDurationAction.NAME));
+		//--sixteenth--
+		this.sixteenth = new MenuItem(this.menu, SWT.PUSH);
+		this.sixteenth.addSelectionListener(new TGActionProcessor(SetSixteenthDurationAction.NAME));
+		//--thirtySecond--
+		this.thirtySecond = new MenuItem(this.menu, SWT.PUSH);
+		this.thirtySecond.addSelectionListener(new TGActionProcessor(SetThirtySecondDurationAction.NAME));
+		//--sixtyFourth--
+		this.sixtyFourth = new MenuItem(this.menu, SWT.PUSH);
+		this.sixtyFourth.addSelectionListener(new TGActionProcessor(SetSixtyFourthDurationAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--dotted---
+		this.dotted = new MenuItem(this.menu, SWT.PUSH);
+		this.dotted.addSelectionListener(new TGActionProcessor(ChangeDottedDurationAction.NAME));
+		
+		this.doubleDotted = new MenuItem(this.menu, SWT.PUSH);
+		this.doubleDotted.addSelectionListener(new TGActionProcessor(ChangeDoubleDottedDurationAction.NAME));
+		
+		//--division---
+		this.division = new MenuItem(this.menu, SWT.PUSH);
+		this.division.addSelectionListener(new TGActionProcessor(ChangeDivisionTypeAction.NAME));
+		
+		this.durationMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.whole.setEnabled(!running);
+		this.half.setEnabled(!running);
+		this.quarter.setEnabled(!running);
+		this.eighth.setEnabled(!running);
+		this.sixteenth.setEnabled(!running);
+		this.thirtySecond.setEnabled(!running);
+		this.sixtyFourth.setEnabled(!running);
+		this.dotted.setEnabled(!running);
+		this.doubleDotted.setEnabled(!running);
+		this.division.setEnabled(!running);
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.durationMenuItem, "duration", null);
+		setMenuItemTextAndAccelerator(this.whole, "duration.whole", SetWholeDurationAction.NAME);
+		setMenuItemTextAndAccelerator(this.half, "duration.half", SetHalfDurationAction.NAME);
+		setMenuItemTextAndAccelerator(this.quarter, "duration.quarter", SetQuarterDurationAction.NAME);
+		setMenuItemTextAndAccelerator(this.eighth, "duration.eighth", SetEighthDurationAction.NAME);
+		setMenuItemTextAndAccelerator(this.sixteenth, "duration.sixteenth", SetSixteenthDurationAction.NAME);
+		setMenuItemTextAndAccelerator(this.thirtySecond, "duration.thirtysecond", SetThirtySecondDurationAction.NAME);
+		setMenuItemTextAndAccelerator(this.sixtyFourth, "duration.sixtyfourth", SetSixtyFourthDurationAction.NAME);
+		setMenuItemTextAndAccelerator(this.dotted, "duration.dotted", ChangeDottedDurationAction.NAME);
+		setMenuItemTextAndAccelerator(this.doubleDotted, "duration.doubledotted", ChangeDoubleDottedDurationAction.NAME);
+		setMenuItemTextAndAccelerator(this.division, "duration.division-type", ChangeDivisionTypeAction.NAME);
+	}
+	
+	public void loadIcons() {
+		this.whole.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.WHOLE));
+		this.half.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.HALF));
+		this.quarter.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.QUARTER));
+		this.eighth.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH));
+		this.sixteenth.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
+		this.thirtySecond.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
+		this.sixtyFourth.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
+		this.dotted.setImage(TuxGuitar.instance().getIconManager().getDurationDotted());
+		this.doubleDotted.setImage(TuxGuitar.instance().getIconManager().getDurationDoubleDotted());
+		this.division.setImage(TuxGuitar.instance().getIconManager().getDivisionType());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/DynamicMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/DynamicMenuItem.java
new file mode 100644
index 0000000..b0eef86
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/DynamicMenuItem.java
@@ -0,0 +1,129 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.note.ChangeVelocityAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.song.models.TGVelocities;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class DynamicMenuItem extends MenuItems{
+	private MenuItem dynamicMenuItem;
+	private Menu menu;
+	private MenuItem pianoPianissimo;
+	private MenuItem pianissimo;
+	private MenuItem piano;
+	private MenuItem mezzoPiano;
+	private MenuItem mezzoForte;
+	private MenuItem forte;
+	private MenuItem fortissimo;
+	private MenuItem forteFortissimo;
+	
+	public DynamicMenuItem(Shell shell,Menu parent, int style) {
+		this.dynamicMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		
+		this.pianoPianissimo = new MenuItem(this.menu, SWT.CHECK);
+		this.pianoPianissimo.setData(createChangeVelocityActionData(TGVelocities.PIANO_PIANISSIMO));
+		this.pianoPianissimo.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		this.pianissimo = new MenuItem(this.menu, SWT.CHECK);
+		this.pianissimo.setData(createChangeVelocityActionData(TGVelocities.PIANISSIMO));
+		this.pianissimo.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		this.piano = new MenuItem(this.menu, SWT.CHECK);
+		this.piano.setData(createChangeVelocityActionData(TGVelocities.PIANO));
+		this.piano.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		this.mezzoPiano = new MenuItem(this.menu, SWT.CHECK);
+		this.mezzoPiano.setData(createChangeVelocityActionData(TGVelocities.MEZZO_PIANO));
+		this.mezzoPiano.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		this.mezzoForte = new MenuItem(this.menu, SWT.CHECK);
+		this.mezzoForte.setData(createChangeVelocityActionData(TGVelocities.MEZZO_FORTE));
+		this.mezzoForte.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		this.forte = new MenuItem(this.menu, SWT.CHECK);
+		this.forte.setData(createChangeVelocityActionData(TGVelocities.FORTE));
+		this.forte.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		this.fortissimo = new MenuItem(this.menu, SWT.CHECK);
+		this.fortissimo.setData(createChangeVelocityActionData(TGVelocities.FORTISSIMO));
+		this.fortissimo.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		this.forteFortissimo = new MenuItem(this.menu, SWT.CHECK);
+		this.forteFortissimo.setData(createChangeVelocityActionData(TGVelocities.FORTE_FORTISSIMO));
+		this.forteFortissimo.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		this.dynamicMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote();
+		int velocity = ((note != null)?note.getVelocity():TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getVelocity());
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.pianoPianissimo.setSelection(velocity == TGVelocities.PIANO_PIANISSIMO);
+		this.pianoPianissimo.setEnabled(!running);
+		this.pianissimo.setSelection(velocity == TGVelocities.PIANISSIMO);
+		this.pianissimo.setEnabled(!running);
+		this.piano.setSelection(velocity == TGVelocities.PIANO);
+		this.piano.setEnabled(!running);
+		this.mezzoPiano.setSelection(velocity == TGVelocities.MEZZO_PIANO);
+		this.mezzoPiano.setEnabled(!running);
+		this.mezzoForte.setSelection(velocity == TGVelocities.MEZZO_FORTE);
+		this.mezzoForte.setEnabled(!running);
+		this.forte.setSelection(velocity == TGVelocities.FORTE);
+		this.forte.setEnabled(!running);
+		this.fortissimo.setSelection(velocity == TGVelocities.FORTISSIMO);
+		this.fortissimo.setEnabled(!running);
+		this.forteFortissimo.setSelection(velocity == TGVelocities.FORTE_FORTISSIMO);
+		this.forteFortissimo.setEnabled(!running);
+	}
+	
+	public void loadProperties(){
+		this.dynamicMenuItem.setText(TuxGuitar.getProperty("dynamic"));
+		this.pianoPianissimo.setText(TuxGuitar.getProperty("dynamic.piano-pianissimo"));
+		this.pianissimo.setText(TuxGuitar.getProperty("dynamic.pianissimo"));
+		this.piano.setText(TuxGuitar.getProperty("dynamic.piano"));
+		this.mezzoPiano.setText(TuxGuitar.getProperty("dynamic.mezzo-piano"));
+		this.mezzoForte.setText(TuxGuitar.getProperty("dynamic.mezzo-forte"));
+		this.forte.setText(TuxGuitar.getProperty("dynamic.forte"));
+		this.fortissimo.setText(TuxGuitar.getProperty("dynamic.fortissimo"));
+		this.forteFortissimo.setText(TuxGuitar.getProperty("dynamic.forte-fortissimo"));
+	}
+	
+	public void loadIcons(){
+		//Nothing to do
+	}
+	
+	private Map createChangeVelocityActionData(int velocity){
+		Map actionData = new HashMap();
+		actionData.put(ChangeVelocityAction.PROPERTY_VELOCITY, new Integer(velocity));
+		return actionData;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/EditMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/EditMenuItem.java
new file mode 100644
index 0000000..152ca91
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/EditMenuItem.java
@@ -0,0 +1,112 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.edit.RedoAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetMouseModeEditionAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetMouseModeSelectionAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetNaturalKeyAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetVoice1Action;
+import org.herac.tuxguitar.app.action.impl.edit.SetVoice2Action;
+import org.herac.tuxguitar.app.action.impl.edit.UndoAction;
+import org.herac.tuxguitar.app.editors.tab.edit.EditorKit;
+import org.herac.tuxguitar.app.items.MenuItems;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class EditMenuItem extends MenuItems{
+	
+	private MenuItem editMenuItem;
+	private Menu menu; 
+	private MenuItem undo;
+	private MenuItem redo;
+	private MenuItem modeSelection;
+	private MenuItem modeEdition;
+	private MenuItem notNaturalKey;
+	private MenuItem voice1;
+	private MenuItem voice2;
+	
+	public EditMenuItem(Shell shell,Menu parent, int style) {
+		this.editMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		//---------------------------------------------------
+		//--UNDO--
+		this.undo = new MenuItem(this.menu, SWT.PUSH);
+		this.undo.addSelectionListener(new TGActionProcessor(UndoAction.NAME));
+		//--REDO--
+		this.redo = new MenuItem(this.menu, SWT.PUSH);
+		this.redo.addSelectionListener(new TGActionProcessor(RedoAction.NAME));
+		//--SEPARATOR
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		//--TABLATURE EDIT MODE
+		this.modeSelection = new MenuItem(this.menu, SWT.RADIO);
+		this.modeSelection.addSelectionListener(new TGActionProcessor(SetMouseModeSelectionAction.NAME));
+		//--SCORE EDIT MODE
+		this.modeEdition = new MenuItem(this.menu, SWT.RADIO);
+		this.modeEdition.addSelectionListener(new TGActionProcessor(SetMouseModeEditionAction.NAME));
+		//--NATURAL NOTES
+		this.notNaturalKey = new MenuItem(this.menu, SWT.CHECK);
+		this.notNaturalKey.addSelectionListener(new TGActionProcessor(SetNaturalKeyAction.NAME));
+		//--SEPARATOR
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		//--VOICE 1
+		this.voice1 = new MenuItem(this.menu, SWT.RADIO);
+		this.voice1.addSelectionListener(new TGActionProcessor(SetVoice1Action.NAME));
+		//--VOICE 2
+		this.voice2 = new MenuItem(this.menu, SWT.RADIO);
+		this.voice2.addSelectionListener(new TGActionProcessor(SetVoice2Action.NAME));
+		
+		this.editMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		EditorKit kit = TuxGuitar.instance().getTablatureEditor().getTablature().getEditorKit();
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.undo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canUndo());
+		this.redo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canRedo());
+		this.modeSelection.setSelection(kit.getMouseMode() == EditorKit.MOUSE_MODE_SELECTION);
+		this.modeSelection.setEnabled(!running);
+		this.modeEdition.setSelection(kit.getMouseMode() == EditorKit.MOUSE_MODE_EDITION);
+		this.modeEdition.setEnabled(!running);
+		this.notNaturalKey.setSelection(!kit.isNatural());
+		this.notNaturalKey.setEnabled(!running && kit.getMouseMode() == EditorKit.MOUSE_MODE_EDITION);
+		this.voice1.setSelection(kit.getTablature().getCaret().getVoice() == 0);
+		this.voice2.setSelection(kit.getTablature().getCaret().getVoice() == 1);
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.editMenuItem, "edit.menu", null);
+		setMenuItemTextAndAccelerator(this.undo, "edit.undo", UndoAction.NAME);
+		setMenuItemTextAndAccelerator(this.redo, "edit.redo", RedoAction.NAME);
+		setMenuItemTextAndAccelerator(this.modeSelection, "edit.mouse-mode-selection", SetMouseModeSelectionAction.NAME);
+		setMenuItemTextAndAccelerator(this.modeEdition, "edit.mouse-mode-edition", SetMouseModeEditionAction.NAME);
+		setMenuItemTextAndAccelerator(this.notNaturalKey, "edit.not-natural-key", SetNaturalKeyAction.NAME);
+		setMenuItemTextAndAccelerator(this.voice1, "edit.voice-1", SetVoice1Action.NAME);
+		setMenuItemTextAndAccelerator(this.voice2, "edit.voice-2", SetVoice2Action.NAME);
+	}
+	
+	public void loadIcons(){
+		this.undo.setImage(TuxGuitar.instance().getIconManager().getEditUndo());
+		this.redo.setImage(TuxGuitar.instance().getIconManager().getEditRedo());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/FileMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/FileMenuItem.java
new file mode 100644
index 0000000..eeefff5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/FileMenuItem.java
@@ -0,0 +1,356 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.file.ExitAction;
+import org.herac.tuxguitar.app.action.impl.file.ExportSongAction;
+import org.herac.tuxguitar.app.action.impl.file.ImportSongAction;
+import org.herac.tuxguitar.app.action.impl.file.NewFileAction;
+import org.herac.tuxguitar.app.action.impl.file.OpenFileAction;
+import org.herac.tuxguitar.app.action.impl.file.OpenURLAction;
+import org.herac.tuxguitar.app.action.impl.file.PrintAction;
+import org.herac.tuxguitar.app.action.impl.file.PrintPreviewAction;
+import org.herac.tuxguitar.app.action.impl.file.SaveAsFileAction;
+import org.herac.tuxguitar.app.action.impl.file.SaveFileAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.app.tools.template.TGTemplate;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.io.base.TGLocalFileExporter;
+import org.herac.tuxguitar.io.base.TGLocalFileImporter;
+import org.herac.tuxguitar.io.base.TGRawExporter;
+import org.herac.tuxguitar.io.base.TGRawImporter;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class FileMenuItem extends MenuItems {
+	
+	private MenuItem fileMenuItem;
+	private Menu menu;
+	private Menu newSongMenu;
+	private Menu importMenu; 
+	private Menu exportMenu; 
+	private Menu historyMenu;
+	private MenuItem newSong;
+	private MenuItem newSongDefault;
+	private MenuItem open;
+	private MenuItem openURL;
+	private MenuItem save;
+	private MenuItem saveAs;
+	private MenuItem importItem;
+	private MenuItem exportItem;
+	private MenuItem printPreview;
+	private MenuItem print;
+	private MenuItem historyItem;
+	private MenuItem[] historyFiles;
+	private MenuItem exit;
+	
+	private List importItems;
+	private List exportItems;
+	
+	public FileMenuItem(Shell shell,Menu parent, int style) {
+		this.fileMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+		this.importItems = new ArrayList();
+		this.exportItems = new ArrayList();
+	}
+	
+	public void showItems(){
+		//---------------------------------------------------
+		//--NEW--
+		this.newSong = new MenuItem(this.menu, SWT.CASCADE);
+		this.newSongMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN);
+		this.newSongDefault = new MenuItem(this.newSongMenu, SWT.PUSH);
+		this.newSongDefault.addSelectionListener(new TGActionProcessor(NewFileAction.NAME));
+		
+		this.addNewSongTemplates();
+		
+		//--OPEN--
+		this.open = new MenuItem(this.menu, SWT.PUSH);
+		this.open.addSelectionListener(new TGActionProcessor(OpenFileAction.NAME));
+		//--OPEN--
+		this.openURL = new MenuItem(this.menu, SWT.PUSH);
+		this.openURL.addSelectionListener(new TGActionProcessor(OpenURLAction.NAME));
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		//--SAVE--
+		this.save = new MenuItem(this.menu, SWT.PUSH);
+		this.save.addSelectionListener(new TGActionProcessor(SaveFileAction.NAME));
+		//--SAVE AS--
+		this.saveAs = new MenuItem(this.menu, SWT.PUSH);
+		this.saveAs.addSelectionListener(new TGActionProcessor(SaveAsFileAction.NAME));
+		
+		//-- IMPORT | EXPORT --
+		int countImporters = TGFileFormatManager.instance().countImporters();
+		int countExporters = TGFileFormatManager.instance().countExporters();
+		if( ( countImporters + countExporters ) > 0 ){
+			//--SEPARATOR--
+			new MenuItem(this.menu, SWT.SEPARATOR);
+			
+			//--IMPORT--
+			this.importItems.clear();
+			if( countImporters > 0 ){
+				this.importItem = new MenuItem(this.menu,SWT.CASCADE);
+				this.importMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN);
+				this.addImporters();
+			}
+			
+			//--EXPORT--
+			this.exportItems.clear();
+			if( countExporters > 0 ){
+				this.exportItem = new MenuItem(this.menu,SWT.CASCADE);
+				this.exportMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN);
+				this.addExporters();
+			}
+		}
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--PRINT PREVIEW--
+		this.printPreview = new MenuItem(this.menu, SWT.PUSH);
+		this.printPreview.addSelectionListener(new TGActionProcessor(PrintPreviewAction.NAME));
+		//--PRINT--
+		this.print = new MenuItem(this.menu, SWT.PUSH);
+		this.print.addSelectionListener(new TGActionProcessor(PrintAction.NAME));
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--HISTORY--
+		this.historyItem = new MenuItem(this.menu,SWT.CASCADE);
+		this.historyMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN);
+		this.updateHistoryFiles();
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		//--EXIT--
+		this.exit = new MenuItem(this.menu, SWT.PUSH);
+		this.exit.addSelectionListener(new TGActionProcessor(ExitAction.NAME));
+		
+		//---------------------------------------------------
+		if( this.importItem != null ){
+			this.importItem.setMenu(this.importMenu);
+		}
+		if( this.exportItem != null ){
+			this.exportItem.setMenu(this.exportMenu);
+		}
+		this.newSong.setMenu(this.newSongMenu);
+		this.historyItem.setMenu(this.historyMenu);
+		this.fileMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	private void addNewSongTemplates(){		
+		if( TuxGuitar.instance().getTemplateManager().countTemplates() > 0 ){
+			//--SEPARATOR--
+			new MenuItem(this.newSongMenu, SWT.SEPARATOR);
+			
+			Iterator it = TuxGuitar.instance().getTemplateManager().getTemplates();
+			while( it.hasNext() ){
+				TGTemplate tgTemplate = (TGTemplate)it.next();
+				
+				Map actionData = new HashMap();
+				actionData.put(NewFileAction.PROPERTY_TEMPLATE, tgTemplate);
+				
+				MenuItem menuItem = new MenuItem(this.newSongMenu, SWT.PUSH);
+				menuItem.setText(tgTemplate.getName());
+				menuItem.setData(actionData);
+				menuItem.addSelectionListener(new TGActionProcessor(NewFileAction.NAME));
+			}
+		}
+	}
+	
+	private void addImporters(){
+		List importersRaw = new ArrayList();
+		List importersFile = new ArrayList();
+		
+		Iterator importers = TGFileFormatManager.instance().getImporters();
+		while(importers.hasNext()){
+			TGRawImporter importer = (TGRawImporter)importers.next();
+			if( importer instanceof TGLocalFileImporter ){
+				importersFile.add( importer );
+			}else{
+				importersRaw.add( importer );
+			}
+		}
+		
+		for( int i = 0 ; i < importersFile.size() ; i ++ ){
+			Map actionData = new HashMap();
+			actionData.put(ImportSongAction.PROPERTY_IMPORTER, importersFile.get( i ));
+			
+			MenuItem item = new MenuItem(this.importMenu, SWT.PUSH);
+			item.setData(actionData);
+			item.addSelectionListener(new TGActionProcessor(ImportSongAction.NAME));
+			this.importItems.add( item );
+		}
+		
+		//--SEPARATOR--
+		if( !importersFile.isEmpty() && !importersRaw.isEmpty() ){
+			new MenuItem(this.importMenu, SWT.SEPARATOR);
+		}
+		
+		for( int i = 0 ; i < importersRaw.size() ; i ++ ){
+			Map actionData = new HashMap();
+			actionData.put(ImportSongAction.PROPERTY_IMPORTER, importersRaw.get( i ));
+			
+			MenuItem item = new MenuItem(this.importMenu, SWT.PUSH);
+			item.setData(actionData);
+			item.addSelectionListener(new TGActionProcessor(ImportSongAction.NAME));
+			this.importItems.add( item );
+		}
+	}
+	
+	private void addExporters(){
+		List exportersRaw = new ArrayList();
+		List exportersFile = new ArrayList();
+		
+		Iterator exporters = TGFileFormatManager.instance().getExporters();
+		while(exporters.hasNext()){
+			TGRawExporter exporter = (TGRawExporter)exporters.next();
+			if( exporter instanceof TGLocalFileExporter ){
+				exportersFile.add( exporter );
+			}else{
+				exportersRaw.add( exporter );
+			}
+		}
+		
+		for( int i = 0 ; i < exportersFile.size() ; i ++ ){
+			Map actionData = new HashMap();
+			actionData.put(ExportSongAction.PROPERTY_EXPORTER, exportersFile.get( i ));
+			
+			MenuItem item = new MenuItem(this.exportMenu, SWT.PUSH);
+			item.setData(actionData);
+			item.addSelectionListener(new TGActionProcessor(ExportSongAction.NAME));
+			this.exportItems.add( item );
+		}
+		
+		//--SEPARATOR--
+		if( !exportersFile.isEmpty() && !exportersRaw.isEmpty() ){
+			new MenuItem(this.exportMenu, SWT.SEPARATOR);
+		}
+		
+		for( int i = 0 ; i < exportersRaw.size() ; i ++ ){
+			Map actionData = new HashMap();
+			actionData.put(ExportSongAction.PROPERTY_EXPORTER, exportersRaw.get( i ));
+			
+			MenuItem item = new MenuItem(this.exportMenu, SWT.PUSH);
+			item.setData(actionData);
+			item.addSelectionListener(new TGActionProcessor(ExportSongAction.NAME));
+			this.exportItems.add( item );
+		}
+	}
+	
+	private void disposeHistoryFiles(){
+		for(int i = 0;i < this.historyFiles.length; i++){
+			this.historyFiles[i].dispose();
+		}
+	}
+	
+	private void updateHistoryFiles(){
+		List urls = TuxGuitar.instance().getFileHistory().getURLs();
+		this.historyFiles = new MenuItem[urls.size()];
+		for(int i = 0;i < this.historyFiles.length; i++){
+			URL url = (URL)urls.get(i);
+			Map actionData = new HashMap();
+			actionData.put(OpenFileAction.PROPERTY_URL, url);
+			this.historyFiles[i] = new MenuItem(this.historyMenu, SWT.PUSH);
+			this.historyFiles[i].setText(decode(url.toString()));
+			this.historyFiles[i].setData(actionData);
+			this.historyFiles[i].addSelectionListener(new TGActionProcessor(OpenFileAction.NAME));
+		}
+		this.historyItem.setEnabled(this.historyFiles.length > 0);
+	}
+	
+	private String decode(String url){
+		try {
+			return URLDecoder.decode(url, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			e.printStackTrace();
+		}
+		return url;
+	}
+	
+	public void update(){
+		if(TuxGuitar.instance().getFileHistory().isChanged()){
+			disposeHistoryFiles();
+			updateHistoryFiles();
+			TuxGuitar.instance().getFileHistory().setChanged(false);
+		}
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.fileMenuItem, "file", null);
+		setMenuItemTextAndAccelerator(this.newSong, "file.new", null);
+		setMenuItemTextAndAccelerator(this.newSongDefault, "file.new-song.default-template", NewFileAction.NAME);
+		setMenuItemTextAndAccelerator(this.open, "file.open", OpenFileAction.NAME);
+		setMenuItemTextAndAccelerator(this.openURL, "file.open-url", OpenURLAction.NAME);
+		setMenuItemTextAndAccelerator(this.save, "file.save", SaveFileAction.NAME);
+		setMenuItemTextAndAccelerator(this.saveAs, "file.save-as", SaveAsFileAction.NAME);
+		setMenuItemTextAndAccelerator(this.printPreview, "file.print-preview", PrintPreviewAction.NAME);
+		setMenuItemTextAndAccelerator(this.print, "file.print", PrintAction.NAME);
+		setMenuItemTextAndAccelerator(this.historyItem, "file.history", null);
+		setMenuItemTextAndAccelerator(this.exit, "file.exit", ExitAction.NAME);
+		
+		if( this.importItem != null ){
+			setMenuItemTextAndAccelerator(this.importItem, "file.import", ImportSongAction.NAME);
+			
+			Iterator importItems = this.importItems.iterator();
+			while(importItems.hasNext()){
+				MenuItem item = (MenuItem)importItems.next();
+				
+				Object itemImporter = ((Map)item.getData()).get(ImportSongAction.PROPERTY_IMPORTER);
+				if( itemImporter instanceof TGLocalFileImporter ){
+					item.setText(TuxGuitar.getProperty("file.import") + " " + ((TGRawImporter)itemImporter).getImportName());
+				}else if( itemImporter instanceof TGRawImporter ){
+					item.setText(((TGRawImporter)itemImporter).getImportName());
+				}
+			}
+		}
+		if( this.exportItem != null ){
+			setMenuItemTextAndAccelerator(this.exportItem, "file.export", ExportSongAction.NAME);
+			
+			Iterator exportItems = this.exportItems.iterator();
+			while(exportItems.hasNext()){
+				MenuItem item = (MenuItem)exportItems.next();
+				
+				Object itemExporter = ((Map)item.getData()).get(ExportSongAction.PROPERTY_EXPORTER);
+				if( itemExporter instanceof TGLocalFileExporter ){
+					item.setText(TuxGuitar.getProperty("file.export") + " " + ((TGRawExporter)itemExporter).getExportName());
+				}else if( itemExporter instanceof TGRawExporter ){
+					item.setText(((TGRawExporter)itemExporter).getExportName());
+				}
+			}
+		}
+	}
+	
+	public void loadIcons(){
+		this.newSong.setImage(TuxGuitar.instance().getIconManager().getFileNew());
+		this.open.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
+		this.save.setImage(TuxGuitar.instance().getIconManager().getFileSave());
+		this.saveAs.setImage(TuxGuitar.instance().getIconManager().getFileSaveAs());
+		this.printPreview.setImage(TuxGuitar.instance().getIconManager().getFilePrintPreview());
+		this.print.setImage(TuxGuitar.instance().getIconManager().getFilePrint());
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/HelpMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/HelpMenuItem.java
new file mode 100644
index 0000000..6f7e4fa
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/HelpMenuItem.java
@@ -0,0 +1,63 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.help.ShowAboutAction;
+import org.herac.tuxguitar.app.action.impl.help.ShowDocAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class HelpMenuItem extends MenuItems{
+	private MenuItem helpMenuItem;
+	private Menu menu; 
+	private MenuItem doc;
+	private MenuItem about;
+	
+	public HelpMenuItem(Shell shell,Menu parent, int style) {
+		this.helpMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		//--Doc
+		this.doc = new MenuItem(this.menu, SWT.PUSH);
+		this.doc.addSelectionListener(new TGActionProcessor(ShowDocAction.NAME));
+		
+		//--ABOUT
+		this.about = new MenuItem(this.menu, SWT.PUSH);
+		this.about.addSelectionListener(new TGActionProcessor(ShowAboutAction.NAME));
+		
+		this.helpMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.helpMenuItem, "help", null);
+		setMenuItemTextAndAccelerator(this.doc, "help.doc", ShowDocAction.NAME);
+		setMenuItemTextAndAccelerator(this.about, "help.about", ShowAboutAction.NAME);
+	}
+	
+	public void loadIcons(){
+		//Nothing to do
+	}
+	
+	public void update(){
+		//Nothing to do
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/MarkerMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/MarkerMenuItem.java
new file mode 100644
index 0000000..a57acac
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/MarkerMenuItem.java
@@ -0,0 +1,100 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.marker.AddMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoFirstMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoLastMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoNextMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoPreviousMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.ListMarkersAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MarkerMenuItem extends MenuItems{
+	private MenuItem markerMenuItem;
+	private Menu menu;
+	private MenuItem add;
+	private MenuItem list;
+	private MenuItem first;
+	private MenuItem last;
+	private MenuItem next;
+	private MenuItem previous;
+	
+	public MarkerMenuItem(Shell shell,Menu parent, int style) {
+		this.markerMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		//--ADD--
+		this.add = new MenuItem(this.menu, SWT.PUSH);
+		this.add.addSelectionListener(new TGActionProcessor(AddMarkerAction.NAME));
+		
+		//--LIST--
+		this.list = new MenuItem(this.menu, SWT.PUSH);
+		this.list.addSelectionListener(new TGActionProcessor(ListMarkersAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--FIRST--
+		this.first = new MenuItem(this.menu, SWT.PUSH);
+		this.first.addSelectionListener(new TGActionProcessor(GoFirstMarkerAction.NAME));
+		
+		//--PREVIOUS--
+		this.previous = new MenuItem(this.menu, SWT.PUSH);
+		this.previous.addSelectionListener(new TGActionProcessor(GoPreviousMarkerAction.NAME));
+		
+		//--PREVIOUS--
+		this.next = new MenuItem(this.menu, SWT.PUSH);
+		this.next.addSelectionListener(new TGActionProcessor(GoNextMarkerAction.NAME));
+		
+		//--LAST--
+		this.last = new MenuItem(this.menu, SWT.PUSH);
+		this.last.addSelectionListener(new TGActionProcessor(GoLastMarkerAction.NAME));
+		
+		this.markerMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		//Nothing to do
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.markerMenuItem, "marker", null);
+		setMenuItemTextAndAccelerator(this.add, "marker.add", AddMarkerAction.NAME);
+		setMenuItemTextAndAccelerator(this.list, "marker.list", ListMarkersAction.NAME);
+		setMenuItemTextAndAccelerator(this.first, "marker.first", GoFirstMarkerAction.NAME);
+		setMenuItemTextAndAccelerator(this.last, "marker.last", GoLastMarkerAction.NAME);
+		setMenuItemTextAndAccelerator(this.previous, "marker.previous", GoPreviousMarkerAction.NAME);
+		setMenuItemTextAndAccelerator(this.next, "marker.next", GoNextMarkerAction.NAME);
+	}
+	
+	public void loadIcons(){
+		this.add.setImage(TuxGuitar.instance().getIconManager().getMarkerAdd());
+		this.list.setImage(TuxGuitar.instance().getIconManager().getMarkerList());
+		this.first.setImage(TuxGuitar.instance().getIconManager().getMarkerFirst());
+		this.previous.setImage(TuxGuitar.instance().getIconManager().getMarkerPrevious());
+		this.next.setImage(TuxGuitar.instance().getIconManager().getMarkerNext());
+		this.last.setImage(TuxGuitar.instance().getIconManager().getMarkerLast());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/MeasureMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/MeasureMenuItem.java
new file mode 100644
index 0000000..be955ac
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/MeasureMenuItem.java
@@ -0,0 +1,126 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.measure.AddMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.CleanMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.CopyMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.GoFirstMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.GoLastMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.GoNextMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.GoPreviousMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.PasteMeasureAction;
+import org.herac.tuxguitar.app.action.impl.measure.RemoveMeasureAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MeasureMenuItem extends MenuItems{
+	
+	private MenuItem measureMenuItem;
+	private Menu menu; 
+	private MenuItem first;
+	private MenuItem last;
+	private MenuItem next;
+	private MenuItem previous;
+	private MenuItem addMeasure;
+	private MenuItem cleanMeasure;
+	private MenuItem removeMeasure;
+	private MenuItem copyMeasure;
+	private MenuItem pasteMeasure;
+	
+	public MeasureMenuItem(Shell shell,Menu parent, int style) {
+		this.measureMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		//--first--
+		this.first = new MenuItem(this.menu, SWT.PUSH);
+		this.first.addSelectionListener(new TGActionProcessor(GoFirstMeasureAction.NAME));
+		//--previous--
+		this.previous = new MenuItem(this.menu, SWT.PUSH);
+		this.previous.addSelectionListener(new TGActionProcessor(GoPreviousMeasureAction.NAME));
+		//--next--
+		this.next = new MenuItem(this.menu, SWT.PUSH);
+		this.next.addSelectionListener(new TGActionProcessor(GoNextMeasureAction.NAME));
+		//--last--
+		this.last = new MenuItem(this.menu, SWT.PUSH);
+		this.last.addSelectionListener(new TGActionProcessor(GoLastMeasureAction.NAME));
+		
+		//--SEPARATOR
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		//--add--
+		this.addMeasure = new MenuItem(this.menu, SWT.PUSH);
+		this.addMeasure.addSelectionListener(new TGActionProcessor(AddMeasureAction.NAME));
+		//--clean--
+		this.cleanMeasure = new MenuItem(this.menu, SWT.PUSH);
+		this.cleanMeasure.addSelectionListener(new TGActionProcessor(CleanMeasureAction.NAME));
+		//--remove--
+		this.removeMeasure = new MenuItem(this.menu, SWT.PUSH);
+		this.removeMeasure.addSelectionListener(new TGActionProcessor(RemoveMeasureAction.NAME));
+		
+		//--SEPARATOR
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		//--copy--
+		this.copyMeasure = new MenuItem(this.menu, SWT.PUSH);
+		this.copyMeasure.addSelectionListener(new TGActionProcessor(CopyMeasureAction.NAME));
+		//--paste--
+		this.pasteMeasure = new MenuItem(this.menu, SWT.PUSH);
+		
+		this.pasteMeasure.addSelectionListener(new TGActionProcessor(PasteMeasureAction.NAME));
+		
+		this.measureMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		TGMeasureImpl measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure();
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		boolean isFirst = (measure.getNumber() == 1);
+		boolean isLast = (measure.getNumber() == measure.getTrack().countMeasures());
+		this.first.setEnabled(!isFirst);
+		this.previous.setEnabled(!isFirst);
+		this.next.setEnabled(!isLast);
+		this.last.setEnabled(!isLast);
+		this.addMeasure.setEnabled(!running);
+		this.cleanMeasure.setEnabled(!running);
+		this.removeMeasure.setEnabled(!running);
+		this.copyMeasure.setEnabled(!running);
+		this.pasteMeasure.setEnabled(!running && !TuxGuitar.instance().getTablatureEditor().getClipBoard().isEmpty());
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.measureMenuItem, "measure", null);
+		setMenuItemTextAndAccelerator(this.first, "measure.first", GoFirstMeasureAction.NAME);
+		setMenuItemTextAndAccelerator(this.last, "measure.last", GoLastMeasureAction.NAME);
+		setMenuItemTextAndAccelerator(this.previous, "measure.previous", GoPreviousMeasureAction.NAME);
+		setMenuItemTextAndAccelerator(this.next, "measure.next", GoNextMeasureAction.NAME);
+		setMenuItemTextAndAccelerator(this.addMeasure, "measure.add", AddMeasureAction.NAME);
+		setMenuItemTextAndAccelerator(this.cleanMeasure, "measure.clean", CleanMeasureAction.NAME);
+		setMenuItemTextAndAccelerator(this.removeMeasure, "measure.remove", RemoveMeasureAction.NAME);
+		setMenuItemTextAndAccelerator(this.copyMeasure, "measure.copy", CopyMeasureAction.NAME);
+		setMenuItemTextAndAccelerator(this.pasteMeasure, "measure.paste", PasteMeasureAction.NAME);
+	}
+	
+	public void loadIcons(){
+		//Nothing to do
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/NoteEffectsMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/NoteEffectsMenuItem.java
new file mode 100644
index 0000000..47327bb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/NoteEffectsMenuItem.java
@@ -0,0 +1,246 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeAccentuatedNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeBendNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeDeadNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeFadeInAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeGhostNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeGraceNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeHammerNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeHarmonicNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeHeavyAccentuatedNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeLetRingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangePalmMuteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangePoppingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeSlappingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeSlideNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeStaccatoAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTappingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTremoloBarAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTremoloPickingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTrillNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeVibratoNoteAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.song.models.TGNote;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class NoteEffectsMenuItem extends MenuItems{
+	
+	private MenuItem noteEffectsMenuItem;
+	private Menu menu; 
+	private MenuItem vibrato;
+	private MenuItem bend;
+	private MenuItem tremoloBar;
+	private MenuItem deadNote;
+	private MenuItem slide;
+	private MenuItem hammer;
+	private MenuItem ghostNote;
+	private MenuItem accentuatedNote;
+	private MenuItem heavyAccentuatedNote;
+	private MenuItem letRing;
+	private MenuItem harmonicNote;
+	private MenuItem graceNote;
+	private MenuItem trill;
+	private MenuItem tremoloPicking;
+	private MenuItem palmMute;
+	private MenuItem staccato;
+	private MenuItem tapping;
+	private MenuItem slapping;
+	private MenuItem popping;
+	
+	private MenuItem fadeIn;
+	
+	public NoteEffectsMenuItem(Shell shell,Menu parent, int style) {
+		this.noteEffectsMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		//--VIBRATO--
+		this.vibrato = new MenuItem(this.menu, SWT.CHECK);
+		this.vibrato.addSelectionListener(new TGActionProcessor(ChangeVibratoNoteAction.NAME));
+		
+		//--BEND--
+		this.bend = new MenuItem(this.menu, SWT.CHECK);
+		this.bend.addSelectionListener(new TGActionProcessor(ChangeBendNoteAction.NAME));
+		
+		//--BEND--
+		this.tremoloBar = new MenuItem(this.menu, SWT.CHECK);
+		this.tremoloBar.addSelectionListener(new TGActionProcessor(ChangeTremoloBarAction.NAME));
+		
+		//--SLIDE--
+		this.slide = new MenuItem(this.menu, SWT.CHECK);
+		this.slide.addSelectionListener(new TGActionProcessor(ChangeSlideNoteAction.NAME));
+		
+		//--SLIDE--
+		this.deadNote = new MenuItem(this.menu, SWT.CHECK);
+		this.deadNote.addSelectionListener(new TGActionProcessor(ChangeDeadNoteAction.NAME));
+		
+		//--HAMMER--
+		this.hammer = new MenuItem(this.menu, SWT.CHECK);
+		this.hammer.addSelectionListener(new TGActionProcessor(ChangeHammerNoteAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--GHOST NOTE--
+		this.ghostNote = new MenuItem(this.menu, SWT.CHECK);
+		this.ghostNote.addSelectionListener(new TGActionProcessor(ChangeGhostNoteAction.NAME));
+		
+		//--ACCENTUATED NOTE--
+		this.accentuatedNote = new MenuItem(this.menu, SWT.CHECK);
+		this.accentuatedNote.addSelectionListener(new TGActionProcessor(ChangeAccentuatedNoteAction.NAME));
+		
+		//--HEAVY ACCENTUATED NOTE--
+		this.heavyAccentuatedNote = new MenuItem(this.menu, SWT.CHECK);
+		this.heavyAccentuatedNote.addSelectionListener(new TGActionProcessor(ChangeHeavyAccentuatedNoteAction.NAME));
+		
+		//--LET RING--
+		this.letRing = new MenuItem(this.menu, SWT.CHECK);
+		this.letRing.addSelectionListener(new TGActionProcessor(ChangeLetRingAction.NAME));
+		
+		//--HARMONIC NOTE--
+		this.harmonicNote = new MenuItem(this.menu, SWT.CHECK);
+		this.harmonicNote.addSelectionListener(new TGActionProcessor(ChangeHarmonicNoteAction.NAME));
+		
+		//--GRACE NOTE--
+		this.graceNote = new MenuItem(this.menu, SWT.CHECK);
+		this.graceNote.addSelectionListener(new TGActionProcessor(ChangeGraceNoteAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--TRILL--
+		this.trill = new MenuItem(this.menu, SWT.CHECK);
+		this.trill.addSelectionListener(new TGActionProcessor(ChangeTrillNoteAction.NAME));
+		
+		//--TREMOLO PICKING--
+		this.tremoloPicking = new MenuItem(this.menu, SWT.CHECK);
+		this.tremoloPicking.addSelectionListener(new TGActionProcessor(ChangeTremoloPickingAction.NAME));
+		
+		//--PALM MUTE--
+		this.palmMute = new MenuItem(this.menu, SWT.CHECK);
+		this.palmMute.addSelectionListener(new TGActionProcessor(ChangePalmMuteAction.NAME));
+		
+		//--STACCATO
+		this.staccato = new MenuItem(this.menu, SWT.CHECK);
+		this.staccato.addSelectionListener(new TGActionProcessor(ChangeStaccatoAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--TAPPING
+		this.tapping = new MenuItem(this.menu, SWT.CHECK);
+		this.tapping.addSelectionListener(new TGActionProcessor(ChangeTappingAction.NAME));
+		
+		//--SLAPPING
+		this.slapping = new MenuItem(this.menu, SWT.CHECK);
+		this.slapping.addSelectionListener(new TGActionProcessor(ChangeSlappingAction.NAME));
+		
+		//--POPPING
+		this.popping = new MenuItem(this.menu, SWT.CHECK);
+		this.popping.addSelectionListener(new TGActionProcessor(ChangePoppingAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--FADE IN
+		this.fadeIn = new MenuItem(this.menu, SWT.CHECK);
+		this.fadeIn.addSelectionListener(new TGActionProcessor(ChangeFadeInAction.NAME));
+		
+		this.noteEffectsMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote();
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.vibrato.setSelection(note != null && note.getEffect().isVibrato());
+		this.vibrato.setEnabled(!running && note != null);
+		this.bend.setSelection(note != null && note.getEffect().isBend());
+		this.bend.setEnabled(!running && note != null);
+		this.tremoloBar.setSelection(note != null && note.getEffect().isTremoloBar());
+		this.tremoloBar.setEnabled(!running && note != null);
+		this.deadNote.setSelection(note != null && note.getEffect().isDeadNote());
+		this.deadNote.setEnabled(!running && note != null);
+		this.slide.setSelection(note != null && note.getEffect().isSlide());
+		this.slide.setEnabled(!running && note != null);
+		this.hammer.setSelection(note != null && note.getEffect().isHammer());
+		this.hammer.setEnabled(!running && note != null);
+		this.ghostNote.setSelection(note != null && note.getEffect().isGhostNote());
+		this.ghostNote.setEnabled(!running && note != null);
+		this.accentuatedNote.setSelection(note != null && note.getEffect().isAccentuatedNote());
+		this.accentuatedNote.setEnabled(!running && note != null);
+		this.heavyAccentuatedNote.setSelection(note != null && note.getEffect().isHeavyAccentuatedNote());
+		this.heavyAccentuatedNote.setEnabled(!running && note != null);
+		this.letRing.setSelection(note != null && note.getEffect().isLetRing());
+		this.letRing.setEnabled(!running && note != null);
+		this.harmonicNote.setSelection(note != null && note.getEffect().isHarmonic());
+		this.harmonicNote.setEnabled(!running && note != null);
+		this.graceNote.setSelection(note != null && note.getEffect().isGrace());
+		this.graceNote.setEnabled(!running && note != null);
+		this.trill.setSelection(note != null && note.getEffect().isTrill());
+		this.trill.setEnabled(!running && note != null);
+		this.tremoloPicking.setSelection(note != null && note.getEffect().isTremoloPicking());
+		this.tremoloPicking.setEnabled(!running && note != null);
+		this.palmMute.setSelection(note != null && note.getEffect().isPalmMute());
+		this.palmMute.setEnabled(!running && note != null);
+		this.staccato.setSelection(note != null && note.getEffect().isStaccato());
+		this.staccato.setEnabled(!running && note != null);
+		this.tapping.setSelection(note != null && note.getEffect().isTapping());
+		this.tapping.setEnabled(!running && note != null);
+		this.slapping.setSelection(note != null && note.getEffect().isSlapping());
+		this.slapping.setEnabled(!running && note != null);
+		this.popping.setSelection(note != null && note.getEffect().isPopping());
+		this.popping.setEnabled(!running && note != null);
+		this.fadeIn.setSelection(note != null && note.getEffect().isFadeIn());
+		this.fadeIn.setEnabled(!running && note != null);
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.noteEffectsMenuItem, "effects", null);
+		setMenuItemTextAndAccelerator(this.vibrato, "effects.vibrato", ChangeVibratoNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.bend, "effects.bend", ChangeBendNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.tremoloBar, "effects.tremolo-bar", ChangeTremoloBarAction.NAME);
+		setMenuItemTextAndAccelerator(this.deadNote, "effects.deadnote", ChangeDeadNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.slide, "effects.slide", ChangeSlideNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.hammer, "effects.hammer", ChangeHammerNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.ghostNote, "effects.ghostnote", ChangeGhostNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.accentuatedNote, "effects.accentuatednote", ChangeAccentuatedNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.heavyAccentuatedNote, "effects.heavyaccentuatednote", ChangeHeavyAccentuatedNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.letRing, "effects.let-ring", ChangeLetRingAction.NAME);
+		setMenuItemTextAndAccelerator(this.harmonicNote, "effects.harmonic", ChangeHarmonicNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.graceNote, "effects.grace", ChangeGraceNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.trill, "effects.trill", ChangeTrillNoteAction.NAME);
+		setMenuItemTextAndAccelerator(this.tremoloPicking, "effects.tremolo-picking", ChangeTremoloPickingAction.NAME);
+		setMenuItemTextAndAccelerator(this.palmMute, "effects.palm-mute", ChangePalmMuteAction.NAME);
+		setMenuItemTextAndAccelerator(this.staccato, "effects.staccato", ChangeStaccatoAction.NAME);
+		setMenuItemTextAndAccelerator(this.tapping, "effects.tapping", ChangeTappingAction.NAME);
+		setMenuItemTextAndAccelerator(this.slapping, "effects.slapping", ChangeSlappingAction.NAME);
+		setMenuItemTextAndAccelerator(this.popping, "effects.popping", ChangePoppingAction.NAME);
+		setMenuItemTextAndAccelerator(this.fadeIn, "effects.fade-in", ChangeFadeInAction.NAME);
+	}
+	
+	public void loadIcons(){
+		//Nothing to do
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/ToolMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/ToolMenuItem.java
new file mode 100644
index 0000000..32d8260
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/ToolMenuItem.java
@@ -0,0 +1,104 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import java.util.Iterator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.settings.EditConfigAction;
+import org.herac.tuxguitar.app.action.impl.settings.EditKeyBindingsAction;
+import org.herac.tuxguitar.app.action.impl.settings.EditPluginsAction;
+import org.herac.tuxguitar.app.action.impl.tools.ScaleAction;
+import org.herac.tuxguitar.app.action.impl.tools.TGBrowserAction;
+import org.herac.tuxguitar.app.action.impl.tools.TransposeAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.app.tools.custom.TGCustomTool;
+import org.herac.tuxguitar.app.tools.custom.TGCustomToolManager;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ToolMenuItem extends MenuItems {
+	private MenuItem settingsMenuItem;
+	private Menu menu;
+	private MenuItem scale;
+	private MenuItem browser;
+	private MenuItem transpose;
+	private MenuItem plugins;
+	private MenuItem config;
+	private MenuItem keyBindings;
+	
+	public ToolMenuItem(Shell shell,Menu parent, int style) {
+		this.settingsMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		this.transpose = new MenuItem(this.menu, SWT.PUSH);
+		this.transpose.addSelectionListener(new TGActionProcessor(TransposeAction.NAME));
+		
+		this.scale = new MenuItem(this.menu, SWT.PUSH);
+		this.scale.addSelectionListener(new TGActionProcessor(ScaleAction.NAME));
+		
+		this.browser = new MenuItem(this.menu, SWT.PUSH);
+		this.browser.addSelectionListener(new TGActionProcessor(TGBrowserAction.NAME));
+		
+		Iterator it = TGCustomToolManager.instance().getCustomTools();
+		while(it.hasNext()){
+			TGCustomTool tool = (TGCustomTool)it.next();
+			MenuItem menuItem = new MenuItem(this.menu, SWT.PUSH);
+			menuItem.setText(tool.getName());
+			menuItem.addSelectionListener(new TGActionProcessor(tool.getAction()));
+		}
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--PLUGINS--
+		this.plugins = new MenuItem(this.menu, SWT.PUSH);
+		this.plugins.addSelectionListener(new TGActionProcessor(EditPluginsAction.NAME));
+		
+		//--KEY BINDINGS--
+		this.keyBindings = new MenuItem(this.menu, SWT.PUSH);
+		this.keyBindings.addSelectionListener(new TGActionProcessor(EditKeyBindingsAction.NAME));
+		
+		//--CONFIG--
+		this.config = new MenuItem(this.menu, SWT.PUSH);
+		this.config.addSelectionListener(new TGActionProcessor(EditConfigAction.NAME));
+		
+		this.settingsMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.settingsMenuItem, "tools", null);
+		setMenuItemTextAndAccelerator(this.transpose, "tools.transpose", TransposeAction.NAME);
+		setMenuItemTextAndAccelerator(this.scale, "tools.scale", ScaleAction.NAME);
+		setMenuItemTextAndAccelerator(this.browser, "tools.browser", TGBrowserAction.NAME);
+		setMenuItemTextAndAccelerator(this.plugins, "tools.plugins", EditPluginsAction.NAME);
+		setMenuItemTextAndAccelerator(this.keyBindings, "tools.shortcuts", EditKeyBindingsAction.NAME);
+		setMenuItemTextAndAccelerator(this.config, "tools.settings", EditConfigAction.NAME);
+	}
+	
+	public void loadIcons(){
+		//Nothing to do
+	}
+	
+	public void update(){
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.transpose.setEnabled( !running );
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/TrackMenu.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/TrackMenu.java
new file mode 100644
index 0000000..023ed60
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/TrackMenu.java
@@ -0,0 +1,174 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.track.AddTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.ChangeTrackMuteAction;
+import org.herac.tuxguitar.app.action.impl.track.ChangeTrackSoloAction;
+import org.herac.tuxguitar.app.action.impl.track.CloneTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.EditLyricsAction;
+import org.herac.tuxguitar.app.action.impl.track.GoFirstTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.GoLastTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.GoNextTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.GoPreviousTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.MoveTrackDownAction;
+import org.herac.tuxguitar.app.action.impl.track.MoveTrackUpAction;
+import org.herac.tuxguitar.app.action.impl.track.RemoveTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.TrackPropertiesAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TrackMenu extends MenuItems{
+	
+	private Menu menu;
+	private MenuItem first;
+	private MenuItem last;
+	private MenuItem next;
+	private MenuItem previous;
+	private MenuItem addTrack;
+	private MenuItem cloneTrack;
+	private MenuItem removeTrack;
+	private MenuItem moveUp;
+	private MenuItem moveDown;
+	private MenuItem changeMute;
+	private MenuItem changeSolo;
+	private MenuItem lyrics;
+	private MenuItem properties;
+	
+	public TrackMenu(Menu menu) {
+		this.menu = menu;
+	}
+	
+	public TrackMenu(Shell shell, int style) {
+		this(new Menu(shell, style));
+	}
+	
+	public Menu getMenu() {
+		return this.menu;
+	}
+	
+	public void showItems(){
+		if(!isDisposed()){
+			//--First--
+			this.first = new MenuItem(this.menu, SWT.PUSH);
+			this.first.addSelectionListener(new TGActionProcessor(GoFirstTrackAction.NAME));
+			//--previous--
+			this.previous = new MenuItem(this.menu, SWT.PUSH);
+			this.previous.addSelectionListener(new TGActionProcessor(GoPreviousTrackAction.NAME));
+			//--next--
+			this.next = new MenuItem(this.menu, SWT.PUSH);
+			this.next.addSelectionListener(new TGActionProcessor(GoNextTrackAction.NAME));
+			//--last--
+			this.last = new MenuItem(this.menu, SWT.PUSH);
+			this.last.addSelectionListener(new TGActionProcessor(GoLastTrackAction.NAME));
+			//--SEPARATOR
+			new MenuItem(this.menu, SWT.SEPARATOR);
+			//--ADD TRACK--
+			this.addTrack = new MenuItem(this.menu, SWT.PUSH);
+			this.addTrack.addSelectionListener(new TGActionProcessor(AddTrackAction.NAME));
+			//--CLONE TRACK--
+			this.cloneTrack = new MenuItem(this.menu, SWT.PUSH);
+			this.cloneTrack.addSelectionListener(new TGActionProcessor(CloneTrackAction.NAME));
+			//--REMOVE TRACK--
+			this.removeTrack = new MenuItem(this.menu, SWT.PUSH);
+			this.removeTrack.addSelectionListener(new TGActionProcessor(RemoveTrackAction.NAME));
+			//--SEPARATOR
+			new MenuItem(this.menu, SWT.SEPARATOR);
+			//--MOVE UP--
+			this.moveUp = new MenuItem(this.menu, SWT.PUSH);
+			this.moveUp.addSelectionListener(new TGActionProcessor(MoveTrackUpAction.NAME));
+			//--MOVE DOWN--
+			this.moveDown = new MenuItem(this.menu, SWT.PUSH);
+			this.moveDown.addSelectionListener(new TGActionProcessor(MoveTrackDownAction.NAME));
+			//--SEPARATOR
+			new MenuItem(this.menu, SWT.SEPARATOR);
+			//--SOLO--
+			this.changeSolo = new MenuItem(this.menu, SWT.CHECK);
+			this.changeSolo.addSelectionListener(new TGActionProcessor(ChangeTrackSoloAction.NAME));
+			//--MUTE--
+			this.changeMute = new MenuItem(this.menu, SWT.CHECK);
+			this.changeMute.addSelectionListener(new TGActionProcessor(ChangeTrackMuteAction.NAME));
+			//--SEPARATOR
+			new MenuItem(this.menu, SWT.SEPARATOR);
+			//--LYRICS--
+			this.lyrics = new MenuItem(this.menu, SWT.PUSH);
+			this.lyrics.addSelectionListener(new TGActionProcessor(EditLyricsAction.NAME));
+			//--PROPERTIES--
+			this.properties = new MenuItem(this.menu, SWT.PUSH);
+			this.properties.addSelectionListener(new TGActionProcessor(TrackPropertiesAction.NAME));
+			
+			this.loadIcons();
+			this.loadProperties();
+		}
+	}
+	
+	public void loadProperties(){
+		if(!isDisposed()){
+			setMenuItemTextAndAccelerator(this.first, "track.first", GoFirstTrackAction.NAME);
+			setMenuItemTextAndAccelerator(this.last, "track.last", GoLastTrackAction.NAME);
+			setMenuItemTextAndAccelerator(this.previous, "track.previous", GoPreviousTrackAction.NAME);
+			setMenuItemTextAndAccelerator(this.next, "track.next", GoNextTrackAction.NAME);
+			setMenuItemTextAndAccelerator(this.addTrack, "track.add", AddTrackAction.NAME);
+			setMenuItemTextAndAccelerator(this.cloneTrack, "track.clone", CloneTrackAction.NAME);
+			setMenuItemTextAndAccelerator(this.removeTrack, "track.remove", RemoveTrackAction.NAME);
+			setMenuItemTextAndAccelerator(this.moveUp, "track.move-up", MoveTrackUpAction.NAME);
+			setMenuItemTextAndAccelerator(this.moveDown, "track.move-down", MoveTrackDownAction.NAME);
+			setMenuItemTextAndAccelerator(this.changeSolo, "track.solo", ChangeTrackSoloAction.NAME);
+			setMenuItemTextAndAccelerator(this.changeMute, "track.mute", ChangeTrackMuteAction.NAME);
+			setMenuItemTextAndAccelerator(this.lyrics, "track.lyrics", EditLyricsAction.NAME);
+			setMenuItemTextAndAccelerator(this.properties, "track.properties", TrackPropertiesAction.NAME);
+		}
+	}
+	
+	public void update(){
+		if(!isDisposed()){
+			TGTrackImpl track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
+			int tracks = track.getSong().countTracks();
+			boolean isFirst = (track.getNumber() == 1);
+			boolean isLast = (track.getNumber() == tracks);
+			boolean running = TuxGuitar.instance().getPlayer().isRunning();
+			this.addTrack.setEnabled(!running);
+			this.cloneTrack.setEnabled(!running);
+			this.removeTrack.setEnabled(!running);
+			this.moveUp.setEnabled(!running && tracks > 1);
+			this.moveDown.setEnabled(!running && tracks > 1);
+			this.first.setEnabled(!isFirst);
+			this.previous.setEnabled(!isFirst);
+			this.next.setEnabled(!isLast);
+			this.last.setEnabled(!isLast);
+			this.properties.setEnabled(!running);
+			this.changeSolo.setSelection(track.isSolo());
+			this.changeMute.setSelection(track.isMute());
+		}
+	}
+	
+	public void loadIcons(){
+		//Nothing to do
+	}
+	
+	public boolean isDisposed(){
+		return (this.menu == null || this.menu.isDisposed());
+	}
+	
+	public void dispose(){
+		if(!isDisposed()){
+			this.menu.dispose();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/TrackMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/TrackMenuItem.java
new file mode 100644
index 0000000..25a5f32
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/TrackMenuItem.java
@@ -0,0 +1,49 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.items.MenuItems;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TrackMenuItem extends MenuItems{
+	private MenuItem trackMenuItem;
+	private TrackMenu menu;
+	
+	public TrackMenuItem(Shell shell,Menu parent, int style) {
+		this.trackMenuItem = new MenuItem(parent, style);
+		this.menu = new TrackMenu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		this.menu.showItems();
+		this.trackMenuItem.setMenu(this.menu.getMenu());
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void loadProperties(){
+		this.setMenuItemTextAndAccelerator(this.trackMenuItem, "track", null);
+		this.menu.loadProperties();
+	}
+	
+	public void update(){
+		this.menu.update();
+	}
+	
+	public void loadIcons(){
+		//Nothing to do
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/TransportMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/TransportMenuItem.java
new file mode 100644
index 0000000..7ca0a91
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/TransportMenuItem.java
@@ -0,0 +1,142 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.transport.TransportCountDownAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportMetronomeAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportModeAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportPlayAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportSetLoopEHeaderAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportSetLoopSHeaderAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportStopAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.player.base.MidiPlayerMode;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TransportMenuItem extends MenuItems{
+	private static final int STATUS_STOPPED = 1;
+	private static final int STATUS_PAUSED = 2;
+	private static final int STATUS_RUNNING = 3;
+	
+	private MenuItem transportMenuItem;
+	private Menu menu;
+	private MenuItem play;
+	private MenuItem stop;
+	private MenuItem metronome;
+	private MenuItem countDown;
+	private MenuItem mode;
+	private MenuItem loopSHeader;
+	private MenuItem loopEHeader;
+	
+	private int status;
+	
+	public TransportMenuItem(Shell shell,Menu parent, int style) {
+		this.transportMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		this.play = new MenuItem(this.menu,SWT.PUSH);
+		this.play.addSelectionListener(new TGActionProcessor(TransportPlayAction.NAME));
+		
+		this.stop = new MenuItem(this.menu, SWT.PUSH);
+		this.stop.addSelectionListener(new TGActionProcessor(TransportStopAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		this.metronome = new MenuItem(this.menu, SWT.CHECK);
+		this.metronome.addSelectionListener(new TGActionProcessor(TransportMetronomeAction.NAME));
+		
+		this.countDown = new MenuItem(this.menu, SWT.CHECK);
+		this.countDown.addSelectionListener(new TGActionProcessor(TransportCountDownAction.NAME));
+		
+		this.mode = new MenuItem(this.menu, SWT.PUSH);
+		this.mode.addSelectionListener(new TGActionProcessor(TransportModeAction.NAME));
+		
+		//--SEPARATOR--
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		this.loopSHeader = new MenuItem(this.menu, SWT.CHECK);
+		this.loopSHeader.addSelectionListener(new TGActionProcessor(TransportSetLoopSHeaderAction.NAME));
+		
+		this.loopEHeader = new MenuItem(this.menu, SWT.CHECK);
+		this.loopEHeader.addSelectionListener(new TGActionProcessor(TransportSetLoopEHeaderAction.NAME));
+		
+		this.transportMenuItem.setMenu(this.menu);
+		
+		this.status = STATUS_STOPPED;
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		TGMeasure measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure();
+		MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
+		this.metronome.setSelection(TuxGuitar.instance().getPlayer().isMetronomeEnabled());
+		this.countDown.setSelection(TuxGuitar.instance().getPlayer().getCountDown().isEnabled());
+		this.loopSHeader.setEnabled( pm.isLoop() );
+		this.loopSHeader.setSelection( measure != null && measure.getNumber() == pm.getLoopSHeader() );
+		this.loopEHeader.setEnabled( pm.isLoop() );
+		this.loopEHeader.setSelection( measure != null && measure.getNumber() == pm.getLoopEHeader() );
+		this.loadIcons(false);
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.transportMenuItem, "transport", null);
+		setMenuItemTextAndAccelerator(this.play, "transport.start", TransportPlayAction.NAME);
+		setMenuItemTextAndAccelerator(this.stop, "transport.stop", TransportStopAction.NAME);
+		setMenuItemTextAndAccelerator(this.mode, "transport.mode", TransportModeAction.NAME);
+		setMenuItemTextAndAccelerator(this.metronome, "transport.metronome", TransportMetronomeAction.NAME);
+		setMenuItemTextAndAccelerator(this.countDown, "transport.count-down", TransportCountDownAction.NAME);
+		setMenuItemTextAndAccelerator(this.loopSHeader, "transport.set-loop-start", TransportSetLoopSHeaderAction.NAME);
+		setMenuItemTextAndAccelerator(this.loopEHeader, "transport.set-loop-end", TransportSetLoopEHeaderAction.NAME);
+	}
+	
+	public void loadIcons(){
+		this.loadIcons(true);
+		this.mode.setImage(TuxGuitar.instance().getIconManager().getTransportMode());
+		this.metronome.setImage(TuxGuitar.instance().getIconManager().getTransportMetronome());
+	}
+	
+	public void loadIcons(boolean force){
+		int lastStatus = this.status;
+		
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			this.status = STATUS_RUNNING;
+		}else if(TuxGuitar.instance().getPlayer().isPaused()){
+			this.status = STATUS_PAUSED;
+		}else{
+			this.status = STATUS_STOPPED;
+		}
+		
+		if(force || lastStatus != this.status){
+			if(this.status == STATUS_RUNNING){
+				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2());
+				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPause());
+			}else if(this.status == STATUS_PAUSED){
+				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2());
+				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay2());
+			}else if(this.status == STATUS_STOPPED){
+				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop1());
+				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay1());
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/ViewMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/ViewMenuItem.java
new file mode 100644
index 0000000..86e1d52
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/menu/ViewMenuItem.java
@@ -0,0 +1,179 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.menu;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.layout.SetChordDiagramEnabledAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetChordNameEnabledAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetCompactViewAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetLinearLayoutAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetMultitrackViewAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetPageLayoutAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetScoreEnabledAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetTablatureEnabledAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowFretBoardAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowInstrumentsAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowMatrixAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowPianoAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowToolbarsAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowTransportAction;
+import org.herac.tuxguitar.app.items.MenuItems;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.graphics.control.TGLayoutHorizontal;
+import org.herac.tuxguitar.graphics.control.TGLayoutVertical;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ViewMenuItem extends MenuItems{
+	
+	private Menu menu;
+	private Menu chordMenu;
+	private MenuItem layoutMenuItem;
+	private MenuItem showToolbars;
+	private MenuItem showInstruments;
+	private MenuItem showTransport;
+	private MenuItem showFretBoard;
+	private MenuItem showPiano;
+	private MenuItem showMatrix;
+	private MenuItem pageLayout;
+	private MenuItem linearLayout;
+	private MenuItem multitrack;
+	private MenuItem scoreEnabled;
+	private MenuItem tablatureEnabled;
+	private MenuItem compact;
+	
+	private MenuItem chordMenuItem;
+	private MenuItem chordName;
+	private MenuItem chordDiagram;
+	
+	public ViewMenuItem(Shell shell,Menu parent, int style) {
+		this.layoutMenuItem = new MenuItem(parent, style);
+		this.menu = new Menu(shell, SWT.DROP_DOWN);
+	}
+	
+	public void showItems(){
+		//--TOOLBARS--
+		this.showToolbars = new MenuItem(this.menu, SWT.CHECK);
+		this.showToolbars.addSelectionListener(new TGActionProcessor(ShowToolbarsAction.NAME));
+		
+		//--INSTRUMENTS--
+		this.showInstruments = new MenuItem(this.menu, SWT.CHECK);
+		this.showInstruments.addSelectionListener(new TGActionProcessor(ShowInstrumentsAction.NAME));
+		
+		//--TRANSPORT--
+		this.showTransport = new MenuItem(this.menu, SWT.CHECK);
+		this.showTransport.addSelectionListener(new TGActionProcessor(ShowTransportAction.NAME));
+		
+		//--FRETBOARD--
+		this.showFretBoard = new MenuItem(this.menu, SWT.CHECK);
+		this.showFretBoard.addSelectionListener(new TGActionProcessor(ShowFretBoardAction.NAME));
+		
+		//--PIANO--
+		this.showPiano = new MenuItem(this.menu, SWT.CHECK);
+		this.showPiano.addSelectionListener(new TGActionProcessor(ShowPianoAction.NAME));
+		
+		//--MATRIX--
+		this.showMatrix = new MenuItem(this.menu, SWT.CHECK);
+		this.showMatrix.addSelectionListener(new TGActionProcessor(ShowMatrixAction.NAME));
+		
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--PAGE LAYOUT--
+		this.pageLayout = new MenuItem(this.menu, SWT.RADIO);
+		this.pageLayout.addSelectionListener(new TGActionProcessor(SetPageLayoutAction.NAME));
+		
+		//--LINEAR LAYOUT--
+		this.linearLayout = new MenuItem(this.menu, SWT.RADIO);
+		this.linearLayout.addSelectionListener(new TGActionProcessor(SetLinearLayoutAction.NAME));
+		
+		//--MULTITRACK--
+		this.multitrack = new MenuItem(this.menu, SWT.CHECK);
+		this.multitrack.addSelectionListener(new TGActionProcessor(SetMultitrackViewAction.NAME));
+		
+		//--SCORE
+		this.scoreEnabled = new MenuItem(this.menu, SWT.CHECK);
+		this.scoreEnabled.addSelectionListener(new TGActionProcessor(SetScoreEnabledAction.NAME));
+		
+		//--SCORE
+		this.tablatureEnabled = new MenuItem(this.menu, SWT.CHECK);
+		this.tablatureEnabled.addSelectionListener(new TGActionProcessor(SetTablatureEnabledAction.NAME));
+		
+		//--COMPACT
+		this.compact = new MenuItem(this.menu, SWT.CHECK);
+		this.compact.addSelectionListener(new TGActionProcessor(SetCompactViewAction.NAME));
+		
+		new MenuItem(this.menu, SWT.SEPARATOR);
+		
+		//--CHORD STYLE
+		this.chordMenuItem = new MenuItem(this.menu,SWT.CASCADE);
+		this.chordMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN);
+		
+		this.chordName = new MenuItem(this.chordMenu, SWT.CHECK);
+		this.chordName.addSelectionListener(new TGActionProcessor(SetChordNameEnabledAction.NAME));
+		
+		this.chordDiagram = new MenuItem(this.chordMenu, SWT.CHECK);
+		this.chordDiagram.addSelectionListener(new TGActionProcessor(SetChordDiagramEnabledAction.NAME));
+		
+		this.chordMenuItem.setMenu(this.chordMenu);
+		this.layoutMenuItem.setMenu(this.menu);
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		TGLayout layout = TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout();
+		int style = layout.getStyle();
+		this.showToolbars.setSelection(TuxGuitar.instance().getItemManager().isCoolbarVisible());
+		this.showInstruments.setSelection(!TuxGuitar.instance().getChannelManager().isDisposed());
+		this.showTransport.setSelection(!TuxGuitar.instance().getTransport().isDisposed());
+		this.showFretBoard.setSelection(TuxGuitar.instance().getFretBoardEditor().isVisible());
+		this.showPiano.setSelection(!TuxGuitar.instance().getPianoEditor().isDisposed());
+		this.showMatrix.setSelection(!TuxGuitar.instance().getMatrixEditor().isDisposed());
+		this.pageLayout.setSelection(layout instanceof TGLayoutVertical);
+		this.linearLayout.setSelection(layout instanceof TGLayoutHorizontal);
+		this.multitrack.setSelection( (style & TGLayout.DISPLAY_MULTITRACK) != 0 );
+		this.scoreEnabled.setSelection( (style & TGLayout.DISPLAY_SCORE) != 0 );
+		this.tablatureEnabled.setSelection( (style & TGLayout.DISPLAY_TABLATURE) != 0 );
+		this.compact.setSelection( (style & TGLayout.DISPLAY_COMPACT) != 0 );
+		this.compact.setEnabled((style & TGLayout.DISPLAY_MULTITRACK) == 0 || layout.getSongManager().getSong().countTracks() == 1);
+		this.chordName.setSelection( (style & TGLayout.DISPLAY_CHORD_NAME) != 0 );
+		this.chordDiagram.setSelection( (style & TGLayout.DISPLAY_CHORD_DIAGRAM) != 0 );
+	}
+	
+	public void loadProperties(){
+		setMenuItemTextAndAccelerator(this.layoutMenuItem, "view", null);
+		setMenuItemTextAndAccelerator(this.showToolbars, "view.show-toolbars", ShowToolbarsAction.NAME);
+		setMenuItemTextAndAccelerator(this.showInstruments, "view.show-instruments", ShowInstrumentsAction.NAME);
+		setMenuItemTextAndAccelerator(this.showTransport, "view.show-transport", ShowTransportAction.NAME);
+		setMenuItemTextAndAccelerator(this.showFretBoard, "view.show-fretboard", ShowFretBoardAction.NAME);
+		setMenuItemTextAndAccelerator(this.showPiano, "view.show-piano", ShowPianoAction.NAME);
+		setMenuItemTextAndAccelerator(this.showMatrix, "view.show-matrix", ShowMatrixAction.NAME);
+		setMenuItemTextAndAccelerator(this.pageLayout, "view.layout.page", SetPageLayoutAction.NAME);
+		setMenuItemTextAndAccelerator(this.linearLayout, "view.layout.linear", SetLinearLayoutAction.NAME);
+		setMenuItemTextAndAccelerator(this.multitrack, "view.layout.multitrack", SetMultitrackViewAction.NAME);
+		setMenuItemTextAndAccelerator(this.scoreEnabled, "view.layout.score-enabled", SetScoreEnabledAction.NAME);
+		setMenuItemTextAndAccelerator(this.tablatureEnabled, "view.layout.tablature-enabled", SetTablatureEnabledAction.NAME);
+		setMenuItemTextAndAccelerator(this.compact, "view.layout.compact", SetCompactViewAction.NAME);
+		setMenuItemTextAndAccelerator(this.chordMenuItem, "view.layout.chord-style", null);
+		setMenuItemTextAndAccelerator(this.chordName, "view.layout.chord-name", SetChordNameEnabledAction.NAME);
+		setMenuItemTextAndAccelerator(this.chordDiagram, "view.layout.chord-diagram", SetChordDiagramEnabledAction.NAME);
+	}
+	
+	public void loadIcons(){
+		//Nothing to do
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/BeatToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/BeatToolItems.java
new file mode 100644
index 0000000..f6d9e94
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/BeatToolItems.java
@@ -0,0 +1,152 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.insert.InsertChordAction;
+import org.herac.tuxguitar.app.action.impl.note.ChangeTiedNoteAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+import org.herac.tuxguitar.song.models.TGChord;
+import org.herac.tuxguitar.song.models.TGNote;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class BeatToolItems  extends ToolItems{
+	public static final String NAME = "beat.items";
+	
+	protected ToolBar toolBar;
+	private ToolItem tiedNote;
+	private ChordMenuItem chordItems;
+	
+	public BeatToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.toolBar = toolBar;
+		
+		this.tiedNote = new ToolItem(toolBar, SWT.CHECK);
+		this.tiedNote.addSelectionListener(new TGActionProcessor(ChangeTiedNoteAction.NAME));
+		
+		this.chordItems = new ChordMenuItem();
+		this.chordItems.addItems();
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote();
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.tiedNote.setEnabled(!running);
+		this.tiedNote.setSelection(note != null && note.isTiedNote());
+		this.chordItems.setEnabled(!running);
+		this.chordItems.update();
+	}
+	
+	public void loadProperties(){
+		this.tiedNote.setToolTipText(TuxGuitar.getProperty("note.tiednote"));
+		this.chordItems.setToolTipText(TuxGuitar.getProperty("insert.chord"));
+	}
+	
+	public void loadIcons(){
+		this.tiedNote.setImage(TuxGuitar.instance().getIconManager().getNoteTied());
+		this.chordItems.setImage(TuxGuitar.instance().getIconManager().getChord());
+	}
+	
+	private class ChordMenuItem extends SelectionAdapter {
+		private long lastEdit;
+		private ToolItem item;
+		private Menu subMenu;
+		private MenuItem[] subMenuItems;
+		
+		public ChordMenuItem() {
+			this.item = new ToolItem(BeatToolItems.this.toolBar, SWT.DROP_DOWN);
+			this.item.addSelectionListener(this);
+			this.subMenu = new Menu(this.item.getParent().getShell());
+		}
+		
+		public void setToolTipText(String text){
+			this.item.setToolTipText(text);
+		}
+		
+		public void setEnabled(boolean enabled){
+			this.item.setEnabled(enabled);
+		}
+		
+		public void setImage(Image image){
+			this.item.setImage(image);
+		}
+		
+		public void addItems() {
+			this.disposeItems();
+			this.subMenuItems = new MenuItem[TuxGuitar.instance().getCustomChordManager().countChords()];
+			for(int i = 0;i < this.subMenuItems.length; i++){
+				TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i);
+				Map actionData = new HashMap();
+				actionData.put(InsertChordAction.PROPERTY_CHORD, chord);
+				
+				this.subMenuItems[i] = new MenuItem(this.subMenu, SWT.PUSH);
+				this.subMenuItems[i].setData(actionData);
+				this.subMenuItems[i].setText(chord.getName());
+				this.subMenuItems[i].addSelectionListener(new TGActionProcessor(InsertChordAction.NAME));
+			}
+		}
+		
+		public void disposeItems() {
+			if(this.subMenuItems != null){
+				for(int i = 0;i < this.subMenuItems.length; i++){
+					this.subMenuItems[i].dispose();
+				}
+			}
+		}
+		
+		public void widgetSelected(SelectionEvent event) {
+			if (event.detail == SWT.ARROW && this.subMenuItems != null && this.subMenuItems.length > 0) {
+				ToolItem item = (ToolItem) event.widget;
+				Rectangle rect = item.getBounds();
+				Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
+				this.subMenu.setLocation(pt.x, pt.y + rect.height);
+				this.subMenu.setVisible(true);
+			}else{
+				TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
+						TGActionManager.getInstance().execute(InsertChordAction.NAME);
+					}
+				});
+			}
+		}
+		
+		public void update(){
+			if(this.lastEdit != TuxGuitar.instance().getCustomChordManager().getLastEdit()){
+				this.addItems();
+				this.lastEdit = TuxGuitar.instance().getCustomChordManager().getLastEdit();
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/CompositionToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/CompositionToolItems.java
new file mode 100644
index 0000000..9becebf
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/CompositionToolItems.java
@@ -0,0 +1,91 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeTempoAction;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeTimeSignatureAction;
+import org.herac.tuxguitar.app.action.impl.insert.RepeatAlternativeAction;
+import org.herac.tuxguitar.app.action.impl.insert.RepeatCloseAction;
+import org.herac.tuxguitar.app.action.impl.insert.RepeatOpenAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class CompositionToolItems extends ToolItems{
+	public static final String NAME = "composition.items";
+	
+	private ToolItem tempo;
+	private ToolItem timeSignature;
+	private ToolItem repeatOpen;
+	private ToolItem repeatClose;
+	private ToolItem repeatAlternative;
+	
+	public CompositionToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.tempo = new ToolItem(toolBar, SWT.PUSH);
+		this.tempo.addSelectionListener(new TGActionProcessor(ChangeTempoAction.NAME));
+		
+		this.timeSignature = new ToolItem(toolBar, SWT.PUSH);
+		this.timeSignature.addSelectionListener(new TGActionProcessor(ChangeTimeSignatureAction.NAME));
+		
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		
+		this.repeatOpen = new ToolItem(toolBar, SWT.CHECK);
+		this.repeatOpen.addSelectionListener(new TGActionProcessor(RepeatOpenAction.NAME));
+		
+		this.repeatClose = new ToolItem(toolBar, SWT.CHECK);
+		this.repeatClose.addSelectionListener(new TGActionProcessor(RepeatCloseAction.NAME));
+		
+		this.repeatAlternative = new ToolItem(toolBar, SWT.CHECK);
+		this.repeatAlternative.addSelectionListener(new TGActionProcessor(RepeatAlternativeAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void loadProperties(){
+		this.tempo.setToolTipText(TuxGuitar.getProperty("composition.tempo"));
+		this.timeSignature.setToolTipText(TuxGuitar.getProperty("composition.timesignature"));
+		this.repeatOpen.setToolTipText(TuxGuitar.getProperty("repeat.open"));
+		this.repeatClose.setToolTipText(TuxGuitar.getProperty("repeat.close"));
+		this.repeatAlternative.setToolTipText(TuxGuitar.getProperty("repeat.alternative"));
+	}
+	
+	public void loadIcons(){
+		this.tempo.setImage(TuxGuitar.instance().getIconManager().getCompositionTempo());
+		this.timeSignature.setImage(TuxGuitar.instance().getIconManager().getCompositionTimeSignature());
+		this.repeatOpen.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatOpen());
+		this.repeatClose.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatClose());
+		this.repeatAlternative.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatAlternative());
+	}
+	
+	public void update(){
+		TGMeasure measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure();
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.tempo.setEnabled( !running );
+		this.timeSignature.setEnabled( !running );
+		this.repeatOpen.setEnabled( !running );
+		this.repeatOpen.setSelection(measure != null && measure.isRepeatOpen());
+		this.repeatClose.setEnabled( !running );
+		this.repeatClose.setSelection(measure != null && measure.getRepeatClose() > 0);
+		this.repeatAlternative.setEnabled( !running );
+		this.repeatAlternative.setSelection(measure != null && measure.getHeader().getRepeatAlternative() > 0);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/DurationToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/DurationToolItems.java
new file mode 100644
index 0000000..ea88322
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/DurationToolItems.java
@@ -0,0 +1,240 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.duration.ChangeDivisionTypeAction;
+import org.herac.tuxguitar.app.action.impl.duration.ChangeDottedDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.ChangeDoubleDottedDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetEighthDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetHalfDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetQuarterDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetSixteenthDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetSixtyFourthDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetThirtySecondDurationAction;
+import org.herac.tuxguitar.app.action.impl.duration.SetWholeDurationAction;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.items.ToolItems;
+import org.herac.tuxguitar.song.models.TGDivisionType;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class DurationToolItems  extends ToolItems{
+	
+	public static final String NAME = "duration.items";
+	
+	protected ToolBar toolBar;
+	private ToolItem[] durationItems;
+	private ToolItem dotted;
+	private ToolItem doubleDotted;
+	private DivisionTypeMenuItem divisionTypeItems;
+	
+	public DurationToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.toolBar = toolBar;
+		this.durationItems = new ToolItem[7];
+		
+		this.durationItems[0] = new ToolItem(toolBar, SWT.RADIO);
+		this.durationItems[0].addSelectionListener(new TGActionProcessor(SetWholeDurationAction.NAME));
+		
+		this.durationItems[1] = new ToolItem(toolBar, SWT.RADIO);
+		this.durationItems[1].addSelectionListener(new TGActionProcessor(SetHalfDurationAction.NAME));
+		
+		this.durationItems[2] = new ToolItem(toolBar, SWT.RADIO);
+		this.durationItems[2].setSelection(true);
+		this.durationItems[2].addSelectionListener(new TGActionProcessor(SetQuarterDurationAction.NAME));
+		
+		this.durationItems[3] = new ToolItem(toolBar, SWT.RADIO);
+		this.durationItems[3].addSelectionListener(new TGActionProcessor(SetEighthDurationAction.NAME));
+		
+		this.durationItems[4] = new ToolItem(toolBar, SWT.RADIO);
+		this.durationItems[4].addSelectionListener(new TGActionProcessor(SetSixteenthDurationAction.NAME));
+		
+		this.durationItems[5] = new ToolItem(toolBar, SWT.RADIO);
+		this.durationItems[5].addSelectionListener(new TGActionProcessor(SetThirtySecondDurationAction.NAME));
+		
+		this.durationItems[6] = new ToolItem(toolBar, SWT.RADIO);
+		this.durationItems[6].addSelectionListener(new TGActionProcessor(SetSixtyFourthDurationAction.NAME));
+		
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		
+		this.dotted = new ToolItem(toolBar, SWT.CHECK);
+		this.dotted.addSelectionListener(new TGActionProcessor(ChangeDottedDurationAction.NAME));
+		
+		this.doubleDotted = new ToolItem(toolBar, SWT.CHECK);
+		this.doubleDotted.addSelectionListener(new TGActionProcessor(ChangeDoubleDottedDurationAction.NAME));
+		
+		this.divisionTypeItems = new DivisionTypeMenuItem();
+		this.divisionTypeItems.addItems();
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		TGDuration duration = getEditor().getTablature().getCaret().getDuration();
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		int index = duration.getIndex();
+		for(int i = 0;i < this.durationItems.length;i++){
+			this.durationItems[i].setSelection( (i == index) );
+			this.durationItems[i].setEnabled( !running );
+		}
+		this.dotted.setSelection(duration.isDotted());
+		this.dotted.setEnabled( !running );
+		this.doubleDotted.setSelection(duration.isDoubleDotted());
+		this.doubleDotted.setEnabled( !running );
+		
+		this.divisionTypeItems.setEnabled( !running );
+		this.divisionTypeItems.update();
+	}
+	
+	public void loadProperties(){
+		this.durationItems[0].setToolTipText(TuxGuitar.getProperty("duration.whole"));
+		this.durationItems[1].setToolTipText(TuxGuitar.getProperty("duration.half"));
+		this.durationItems[2].setToolTipText(TuxGuitar.getProperty("duration.quarter"));
+		this.durationItems[3].setToolTipText(TuxGuitar.getProperty("duration.eighth"));
+		this.durationItems[4].setToolTipText(TuxGuitar.getProperty("duration.sixteenth"));
+		this.durationItems[5].setToolTipText(TuxGuitar.getProperty("duration.thirtysecond"));
+		this.durationItems[6].setToolTipText(TuxGuitar.getProperty("duration.sixtyfourth"));
+		this.dotted.setToolTipText(TuxGuitar.getProperty("duration.dotted"));
+		this.doubleDotted.setToolTipText(TuxGuitar.getProperty("duration.doubledotted"));
+		this.divisionTypeItems.setText(TuxGuitar.getProperty("duration.division-type"));
+	}
+	
+	public void loadIcons(){
+		this.durationItems[0].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.WHOLE));
+		this.durationItems[1].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.HALF));
+		this.durationItems[2].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.QUARTER));
+		this.durationItems[3].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH));
+		this.durationItems[4].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
+		this.durationItems[5].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
+		this.durationItems[6].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
+		this.dotted.setImage(TuxGuitar.instance().getIconManager().getDurationDotted());
+		this.doubleDotted.setImage(TuxGuitar.instance().getIconManager().getDurationDoubleDotted());
+		this.divisionTypeItems.setImage(TuxGuitar.instance().getIconManager().getDivisionType());
+	}
+	
+	protected TablatureEditor getEditor(){
+		return super.getEditor();
+	}
+	
+	private class DivisionTypeMenuItem extends SelectionAdapter {
+		private TGDivisionType divisionType;
+		private ToolItem divisionTypeItem;
+		private Menu subMenu;
+		private MenuItem[] subMenuItems;
+		
+		public DivisionTypeMenuItem() {
+			this.divisionType = createDivisionType(TGDivisionType.TRIPLET);
+			this.divisionTypeItem = new ToolItem(DurationToolItems.this.toolBar, SWT.DROP_DOWN);
+			this.divisionTypeItem.addSelectionListener(this);
+			this.subMenu = new Menu(this.divisionTypeItem.getParent().getShell());
+		}
+		
+		public void setText(String text){
+			this.divisionTypeItem.setToolTipText(text);
+		}
+		
+		public void setImage(Image image){
+			this.divisionTypeItem.setImage(image);
+		}
+		
+		public void setEnabled(boolean enabled){
+			this.divisionTypeItem.setEnabled(enabled);
+		}
+		
+		public void addItems() {
+			this.subMenuItems = new MenuItem[TGDivisionType.ALTERED_DIVISION_TYPES.length];
+			
+			for( int i = 0 ; i < TGDivisionType.ALTERED_DIVISION_TYPES.length ; i ++ ){
+				this.subMenuItems[i] = new MenuItem(this.subMenu, SWT.CHECK);
+				this.subMenuItems[i].setText(new Integer(TGDivisionType.ALTERED_DIVISION_TYPES[i].getEnters()).toString());
+				this.subMenuItems[i].setData(createDivisionTypeActionData(TGDivisionType.ALTERED_DIVISION_TYPES[i]));
+				this.subMenuItems[i].addSelectionListener(new TGActionProcessor(ChangeDivisionTypeAction.NAME));
+			}
+		}
+		
+		public void widgetSelected(SelectionEvent event) {
+			if (event.detail == SWT.ARROW) {
+				ToolItem item = (ToolItem) event.widget;
+				Rectangle rect = item.getBounds();
+				Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
+				this.subMenu.setLocation(pt.x, pt.y + rect.height);
+				this.subMenu.setVisible(true);
+			}else{
+				TGDuration duration = getEditor().getTablature().getCaret().getDuration();
+				if(duration.getDivision().isEqual(TGDivisionType.NORMAL)){
+					TGDivisionType.TRIPLET.copy(this.divisionType);
+				}else{
+					TGDivisionType.NORMAL.copy(this.divisionType);
+				}
+				
+				final TGActionContext context = createDivisionTypeActionContext(this.divisionType);
+				TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
+						TGActionManager.getInstance().execute(ChangeDivisionTypeAction.NAME, context);
+					}
+				});
+			}
+		}
+		
+		public void update(){
+			TGDuration duration = getEditor().getTablature().getCaret().getDuration();
+			
+			for(int i = 0;i < this.subMenuItems.length;i++){
+				Map actionData = (Map)this.subMenuItems[i].getData();
+				TGDivisionType divisionType = (TGDivisionType)actionData.get(ChangeDivisionTypeAction.PROPERTY_DIVISION_TYPE);
+				
+				this.subMenuItems[i].setSelection((divisionType.isEqual(duration.getDivision())));
+			}
+		}
+		
+		private TGDivisionType createDivisionType(TGDivisionType tgDivisionTypeSrc){
+			TGDivisionType tgDivisionTypeDst = TuxGuitar.instance().getSongManager().getFactory().newDivisionType();
+			tgDivisionTypeSrc.copy(tgDivisionTypeDst);
+			return tgDivisionTypeDst;
+		}
+		
+		private Map createDivisionTypeActionData(TGDivisionType tgDivisionType){
+			Map actionData = new HashMap();
+			actionData.put(ChangeDivisionTypeAction.PROPERTY_DIVISION_TYPE, createDivisionType(tgDivisionType));
+			return actionData;
+		}
+		
+		private TGActionContext createDivisionTypeActionContext(TGDivisionType tgDivisionType){
+			TGActionContext tgActionContext = TGActionManager.getInstance().createActionContext();
+			tgActionContext.setAttribute(ChangeDivisionTypeAction.PROPERTY_DIVISION_TYPE, createDivisionType(tgDivisionType));
+			return tgActionContext;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/DynamicToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/DynamicToolItems.java
new file mode 100644
index 0000000..e5279a1
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/DynamicToolItems.java
@@ -0,0 +1,141 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.note.ChangeVelocityAction;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.items.ToolItems;
+import org.herac.tuxguitar.song.models.TGVelocities;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class DynamicToolItems  extends ToolItems{
+	public static final String NAME = "dynamic.items";
+	
+	private ToolBar toolBar;
+	
+	private ToolItem pianoPianissimo;
+	private ToolItem pianissimo;
+	private ToolItem piano;
+	private ToolItem mezzoPiano;
+	private ToolItem mezzoForte;
+	private ToolItem forte;
+	private ToolItem fortissimo;
+	private ToolItem forteFortissimo;
+	
+	
+	public DynamicToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.toolBar = toolBar;
+		//--PPP--
+		this.pianoPianissimo = new ToolItem(this.toolBar, SWT.CHECK);
+		this.pianoPianissimo.setData(createChangeVelocityActionData(TGVelocities.PIANO_PIANISSIMO));
+		this.pianoPianissimo.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		//--PP--
+		this.pianissimo = new ToolItem(this.toolBar, SWT.CHECK);
+		this.pianissimo.setData(createChangeVelocityActionData(TGVelocities.PIANISSIMO));
+		this.pianissimo.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		//--P--
+		this.piano = new ToolItem(this.toolBar, SWT.CHECK);
+		this.piano.setData(createChangeVelocityActionData(TGVelocities.PIANO));
+		this.piano.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		//--MP--
+		this.mezzoPiano = new ToolItem(this.toolBar, SWT.CHECK);
+		this.mezzoPiano.setData(createChangeVelocityActionData(TGVelocities.MEZZO_PIANO));
+		this.mezzoPiano.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		//--MF--
+		this.mezzoForte = new ToolItem(this.toolBar, SWT.CHECK);
+		this.mezzoForte.setData(createChangeVelocityActionData(TGVelocities.MEZZO_FORTE));
+		this.mezzoForte.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		//--F--
+		this.forte = new ToolItem(this.toolBar, SWT.CHECK);
+		this.forte.setData(createChangeVelocityActionData(TGVelocities.FORTE));
+		this.forte.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		//--FF--
+		this.fortissimo = new ToolItem(this.toolBar, SWT.CHECK);
+		this.fortissimo.setData(createChangeVelocityActionData(TGVelocities.FORTISSIMO));
+		this.fortissimo.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		//--FF--
+		this.forteFortissimo = new ToolItem(this.toolBar, SWT.CHECK);
+		this.forteFortissimo.setData(createChangeVelocityActionData(TGVelocities.FORTE_FORTISSIMO));
+		this.forteFortissimo.addSelectionListener(new TGActionProcessor(ChangeVelocityAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+		int velocity = ((caret.getSelectedNote() != null)?caret.getSelectedNote().getVelocity():caret.getVelocity());
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.pianoPianissimo.setSelection(velocity == TGVelocities.PIANO_PIANISSIMO);
+		this.pianoPianissimo.setEnabled( !running );
+		this.pianissimo.setSelection(velocity == TGVelocities.PIANISSIMO);
+		this.pianissimo.setEnabled( !running );
+		this.piano.setSelection(velocity == TGVelocities.PIANO);
+		this.piano.setEnabled( !running );
+		this.mezzoPiano.setSelection(velocity == TGVelocities.MEZZO_PIANO);
+		this.mezzoPiano.setEnabled( !running );
+		this.mezzoForte.setSelection(velocity == TGVelocities.MEZZO_FORTE);
+		this.mezzoForte.setEnabled( !running );
+		this.forte.setSelection(velocity == TGVelocities.FORTE);
+		this.forte.setEnabled( !running );
+		this.fortissimo.setSelection(velocity == TGVelocities.FORTISSIMO);
+		this.fortissimo.setEnabled( !running );
+		this.forteFortissimo.setSelection(velocity == TGVelocities.FORTE_FORTISSIMO);
+		this.forteFortissimo.setEnabled( !running );
+	}
+	
+	public void loadProperties(){
+		this.pianoPianissimo.setToolTipText(TuxGuitar.getProperty("dynamic.piano-pianissimo"));
+		this.pianissimo.setToolTipText(TuxGuitar.getProperty("dynamic.pianissimo"));
+		this.piano.setToolTipText(TuxGuitar.getProperty("dynamic.piano"));
+		this.mezzoPiano.setToolTipText(TuxGuitar.getProperty("dynamic.mezzo-piano"));
+		this.mezzoForte.setToolTipText(TuxGuitar.getProperty("dynamic.mezzo-forte"));
+		this.forte.setToolTipText(TuxGuitar.getProperty("dynamic.forte"));
+		this.fortissimo.setToolTipText(TuxGuitar.getProperty("dynamic.fortissimo"));
+		this.forteFortissimo.setToolTipText(TuxGuitar.getProperty("dynamic.forte-fortissimo"));
+	}
+	
+	public void loadIcons(){
+		this.pianoPianissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicPPP());
+		this.pianissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicPP());
+		this.piano.setImage(TuxGuitar.instance().getIconManager().getDynamicP());
+		this.mezzoPiano.setImage(TuxGuitar.instance().getIconManager().getDynamicMP());
+		this.mezzoForte.setImage(TuxGuitar.instance().getIconManager().getDynamicMF());
+		this.forte.setImage(TuxGuitar.instance().getIconManager().getDynamicF());
+		this.fortissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicFF());
+		this.forteFortissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicFFF());
+	}
+	
+	private Map createChangeVelocityActionData(int velocity){
+		Map actionData = new HashMap();
+		actionData.put(ChangeVelocityAction.PROPERTY_VELOCITY, new Integer(velocity));
+		return actionData;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/EditToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/EditToolItems.java
new file mode 100644
index 0000000..8d8f93e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/EditToolItems.java
@@ -0,0 +1,110 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.edit.RedoAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetMouseModeEditionAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetMouseModeSelectionAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetNaturalKeyAction;
+import org.herac.tuxguitar.app.action.impl.edit.SetVoice1Action;
+import org.herac.tuxguitar.app.action.impl.edit.SetVoice2Action;
+import org.herac.tuxguitar.app.action.impl.edit.UndoAction;
+import org.herac.tuxguitar.app.editors.tab.edit.EditorKit;
+import org.herac.tuxguitar.app.items.ToolItems;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class EditToolItems extends ToolItems {
+	public static final String NAME = "edit.items";
+	private ToolItem undo;
+	private ToolItem redo;
+	
+	private ToolItem voice1;
+	private ToolItem voice2;
+	
+	private ToolItem modeSelection;
+	private ToolItem modeEdition;
+	private ToolItem notNaturalKey;
+	
+	public EditToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.undo = new ToolItem(toolBar, SWT.PUSH);
+		this.undo.addSelectionListener(new TGActionProcessor(UndoAction.NAME));
+		
+		this.redo = new ToolItem(toolBar, SWT.PUSH);
+		this.redo.addSelectionListener(new TGActionProcessor(RedoAction.NAME));
+		
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		
+		this.voice1 = new ToolItem(toolBar, SWT.RADIO);
+		this.voice1.addSelectionListener(new TGActionProcessor(SetVoice1Action.NAME));
+		
+		this.voice2 = new ToolItem(toolBar, SWT.RADIO);
+		this.voice2.addSelectionListener(new TGActionProcessor(SetVoice2Action.NAME));
+		
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		
+		this.modeSelection = new ToolItem(toolBar, SWT.RADIO);
+		this.modeSelection.addSelectionListener(new TGActionProcessor(SetMouseModeSelectionAction.NAME));
+		
+		this.modeEdition = new ToolItem(toolBar, SWT.RADIO);
+		this.modeEdition.addSelectionListener(new TGActionProcessor(SetMouseModeEditionAction.NAME));
+		
+		this.notNaturalKey = new ToolItem(toolBar, SWT.CHECK);
+		this.notNaturalKey.addSelectionListener(new TGActionProcessor(SetNaturalKeyAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.undo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canUndo());
+		this.redo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canRedo());
+		this.voice1.setSelection(getEditor().getTablature().getCaret().getVoice() == 0);
+		this.voice1.setEnabled(!running);
+		this.voice2.setSelection(getEditor().getTablature().getCaret().getVoice() == 1);
+		this.voice2.setEnabled(!running);
+		this.modeSelection.setSelection(getEditor().getTablature().getEditorKit().getMouseMode() == EditorKit.MOUSE_MODE_SELECTION);
+		this.modeSelection.setEnabled(!running);
+		this.modeEdition.setSelection(getEditor().getTablature().getEditorKit().getMouseMode() == EditorKit.MOUSE_MODE_EDITION);
+		this.modeEdition.setEnabled(!running);
+		this.notNaturalKey.setSelection(!getEditor().getTablature().getEditorKit().isNatural());
+		this.notNaturalKey.setEnabled(!running && getEditor().getTablature().getEditorKit().getMouseMode() == EditorKit.MOUSE_MODE_EDITION);
+	}
+	
+	public void loadProperties(){
+		this.undo.setToolTipText(TuxGuitar.getProperty("edit.undo"));
+		this.redo.setToolTipText(TuxGuitar.getProperty("edit.redo"));
+		this.voice1.setToolTipText(TuxGuitar.getProperty("edit.voice-1"));
+		this.voice2.setToolTipText(TuxGuitar.getProperty("edit.voice-2"));
+		this.modeSelection.setToolTipText(TuxGuitar.getProperty("edit.mouse-mode-selection"));
+		this.modeEdition.setToolTipText(TuxGuitar.getProperty("edit.mouse-mode-edition"));
+		this.notNaturalKey.setToolTipText(TuxGuitar.getProperty("edit.not-natural-key"));
+	}
+	
+	public void loadIcons(){
+		this.undo.setImage(TuxGuitar.instance().getIconManager().getEditUndo());
+		this.redo.setImage(TuxGuitar.instance().getIconManager().getEditRedo());
+		this.voice1.setImage(TuxGuitar.instance().getIconManager().getEditVoice1());
+		this.voice2.setImage(TuxGuitar.instance().getIconManager().getEditVoice2());
+		this.modeSelection.setImage(TuxGuitar.instance().getIconManager().getEditModeSelection());
+		this.modeEdition.setImage(TuxGuitar.instance().getIconManager().getEditModeEdition());
+		this.notNaturalKey.setImage(TuxGuitar.instance().getIconManager().getEditModeEditionNotNatural());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/FileToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/FileToolItems.java
new file mode 100644
index 0000000..6fb6eff
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/FileToolItems.java
@@ -0,0 +1,84 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.file.NewFileAction;
+import org.herac.tuxguitar.app.action.impl.file.OpenFileAction;
+import org.herac.tuxguitar.app.action.impl.file.PrintAction;
+import org.herac.tuxguitar.app.action.impl.file.PrintPreviewAction;
+import org.herac.tuxguitar.app.action.impl.file.SaveAsFileAction;
+import org.herac.tuxguitar.app.action.impl.file.SaveFileAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class FileToolItems extends ToolItems {
+	public static final String NAME = "file.items";
+	private ToolItem newSong;
+	private ToolItem openSong;
+	private ToolItem saveSong;
+	private ToolItem saveAsSong;
+	private ToolItem printSong;
+	private ToolItem printPreviewSong;
+	
+	public FileToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.newSong = new ToolItem(toolBar, SWT.PUSH);
+		this.newSong.addSelectionListener(new TGActionProcessor(NewFileAction.NAME));
+		
+		this.openSong = new ToolItem(toolBar, SWT.PUSH);
+		this.openSong.addSelectionListener(new TGActionProcessor(OpenFileAction.NAME));
+		
+		this.saveSong = new ToolItem(toolBar, SWT.PUSH);
+		this.saveSong.addSelectionListener(new TGActionProcessor(SaveFileAction.NAME));
+		
+		this.saveAsSong = new ToolItem(toolBar, SWT.PUSH);
+		this.saveAsSong.addSelectionListener(new TGActionProcessor(SaveAsFileAction.NAME));
+		
+		this.printSong = new ToolItem(toolBar, SWT.PUSH);
+		this.printSong.addSelectionListener(new TGActionProcessor(PrintAction.NAME));
+		
+		this.printPreviewSong = new ToolItem(toolBar, SWT.PUSH);
+		this.printPreviewSong.addSelectionListener(new TGActionProcessor(PrintPreviewAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		//Nothing to do
+	}
+	
+	public void loadProperties(){
+		this.newSong.setToolTipText(TuxGuitar.getProperty("file.new"));
+		this.openSong.setToolTipText(TuxGuitar.getProperty("file.open"));
+		this.saveSong.setToolTipText(TuxGuitar.getProperty("file.save"));
+		this.saveAsSong.setToolTipText(TuxGuitar.getProperty("file.save-as"));
+		this.printSong.setToolTipText(TuxGuitar.getProperty("file.print"));
+		this.printPreviewSong.setToolTipText(TuxGuitar.getProperty("file.print-preview"));
+	}
+	
+	public void loadIcons(){
+		this.newSong.setImage(TuxGuitar.instance().getIconManager().getFileNew());
+		this.openSong.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
+		this.saveSong.setImage(TuxGuitar.instance().getIconManager().getFileSave());
+		this.saveAsSong.setImage(TuxGuitar.instance().getIconManager().getFileSaveAs());
+		this.printSong.setImage(TuxGuitar.instance().getIconManager().getFilePrint());
+		this.printPreviewSong.setImage(TuxGuitar.instance().getIconManager().getFilePrintPreview());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/LayoutToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/LayoutToolItems.java
new file mode 100644
index 0000000..7b0ba8e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/LayoutToolItems.java
@@ -0,0 +1,89 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.layout.SetCompactViewAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetLinearLayoutAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetMultitrackViewAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetPageLayoutAction;
+import org.herac.tuxguitar.app.action.impl.layout.SetScoreEnabledAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.graphics.control.TGLayoutHorizontal;
+import org.herac.tuxguitar.graphics.control.TGLayoutVertical;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class LayoutToolItems extends ToolItems{
+	public static final String NAME = "layout.items";
+	
+	private ToolItem pageLayout;
+	private ToolItem linearLayout;
+	private ToolItem multitrack;
+	private ToolItem scoreEnabled;
+	private ToolItem compact;
+	
+	public LayoutToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.pageLayout = new ToolItem(toolBar, SWT.RADIO);
+		this.pageLayout.addSelectionListener(new TGActionProcessor(SetPageLayoutAction.NAME));
+		
+		this.linearLayout = new ToolItem(toolBar, SWT.RADIO);
+		this.linearLayout.addSelectionListener(new TGActionProcessor(SetLinearLayoutAction.NAME));
+		
+		this.multitrack = new ToolItem(toolBar, SWT.CHECK);
+		this.multitrack.addSelectionListener(new TGActionProcessor(SetMultitrackViewAction.NAME));
+		
+		this.scoreEnabled = new ToolItem(toolBar, SWT.CHECK);
+		this.scoreEnabled.addSelectionListener(new TGActionProcessor(SetScoreEnabledAction.NAME));
+		
+		this.compact = new ToolItem(toolBar, SWT.CHECK);
+		this.compact.addSelectionListener(new TGActionProcessor(SetCompactViewAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void loadProperties(){
+		this.pageLayout.setToolTipText(TuxGuitar.getProperty("view.layout.page"));
+		this.linearLayout.setToolTipText(TuxGuitar.getProperty("view.layout.linear"));
+		this.multitrack.setToolTipText(TuxGuitar.getProperty("view.layout.multitrack"));
+		this.scoreEnabled.setToolTipText(TuxGuitar.getProperty("view.layout.score-enabled"));
+		this.compact.setToolTipText(TuxGuitar.getProperty("view.layout.compact"));
+	}
+	
+	public void loadIcons(){
+		this.pageLayout.setImage(TuxGuitar.instance().getIconManager().getLayoutPage());
+		this.linearLayout.setImage(TuxGuitar.instance().getIconManager().getLayoutLinear());
+		this.multitrack.setImage(TuxGuitar.instance().getIconManager().getLayoutMultitrack());
+		this.scoreEnabled.setImage(TuxGuitar.instance().getIconManager().getLayoutScore());
+		this.compact.setImage(TuxGuitar.instance().getIconManager().getLayoutCompact());
+	}
+	
+	public void update(){
+		TGLayout layout = getEditor().getTablature().getViewLayout();
+		int style = layout.getStyle();
+		this.pageLayout.setSelection(layout instanceof TGLayoutVertical);
+		this.linearLayout.setSelection(layout instanceof TGLayoutHorizontal);
+		this.multitrack.setSelection( (style & TGLayout.DISPLAY_MULTITRACK) != 0 );
+		this.scoreEnabled.setSelection( (style & TGLayout.DISPLAY_SCORE) != 0 );
+		this.compact.setSelection( (style & TGLayout.DISPLAY_COMPACT) != 0 );
+		this.compact.setEnabled((style & TGLayout.DISPLAY_MULTITRACK) == 0 || getEditor().getTablature().getSongManager().getSong().countTracks() == 1);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/MarkerToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/MarkerToolItems.java
new file mode 100644
index 0000000..577a657
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/MarkerToolItems.java
@@ -0,0 +1,94 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.marker.AddMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoFirstMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoLastMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoNextMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.GoPreviousMarkerAction;
+import org.herac.tuxguitar.app.action.impl.marker.ListMarkersAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MarkerToolItems  extends ToolItems{
+	public static final String NAME = "marker.items";
+	
+	private ToolItem add;
+	private ToolItem list;
+	private ToolItem first;
+	private ToolItem last;
+	private ToolItem previous;
+	private ToolItem next;
+	
+	public MarkerToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		//--ADD--
+		this.add = new ToolItem(toolBar, SWT.PUSH);
+		this.add.addSelectionListener(new TGActionProcessor(AddMarkerAction.NAME));
+		
+		//--LIST--
+		this.list = new ToolItem(toolBar, SWT.PUSH);
+		this.list.addSelectionListener(new TGActionProcessor(ListMarkersAction.NAME));
+		
+		//--SEPARATOR--
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		
+		//--FIRST--
+		this.first = new ToolItem(toolBar, SWT.PUSH);
+		this.first.addSelectionListener(new TGActionProcessor(GoFirstMarkerAction.NAME));
+		
+		//--PREVIOUS--
+		this.previous = new ToolItem(toolBar, SWT.PUSH);
+		this.previous.addSelectionListener(new TGActionProcessor(GoPreviousMarkerAction.NAME));
+		
+		//--PREVIOUS--
+		this.next = new ToolItem(toolBar, SWT.PUSH);
+		this.next.addSelectionListener(new TGActionProcessor(GoNextMarkerAction.NAME));
+		
+		//--LAST--
+		this.last = new ToolItem(toolBar, SWT.PUSH);
+		this.last.addSelectionListener(new TGActionProcessor(GoLastMarkerAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		//Nothing to do
+	}
+	
+	public void loadProperties(){
+		this.add.setToolTipText(TuxGuitar.getProperty("marker.add"));
+		this.list.setToolTipText(TuxGuitar.getProperty("marker.list"));
+		this.first.setToolTipText(TuxGuitar.getProperty("marker.first"));
+		this.last.setToolTipText(TuxGuitar.getProperty("marker.last"));
+		this.previous.setToolTipText(TuxGuitar.getProperty("marker.previous"));
+		this.next.setToolTipText(TuxGuitar.getProperty("marker.next"));
+	}
+	
+	public void loadIcons(){
+		this.add.setImage(TuxGuitar.instance().getIconManager().getMarkerAdd());
+		this.list.setImage(TuxGuitar.instance().getIconManager().getMarkerList());
+		this.first.setImage(TuxGuitar.instance().getIconManager().getMarkerFirst());
+		this.previous.setImage(TuxGuitar.instance().getIconManager().getMarkerPrevious());
+		this.next.setImage(TuxGuitar.instance().getIconManager().getMarkerNext());
+		this.last.setImage(TuxGuitar.instance().getIconManager().getMarkerLast());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/NoteEffectToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/NoteEffectToolItems.java
new file mode 100644
index 0000000..77b1bac
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/NoteEffectToolItems.java
@@ -0,0 +1,252 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeAccentuatedNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeBendNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeDeadNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeFadeInAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeGhostNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeGraceNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeHammerNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeHarmonicNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeHeavyAccentuatedNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangePalmMuteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangePoppingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeSlappingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeSlideNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeStaccatoAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTappingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTremoloBarAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTremoloPickingAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeTrillNoteAction;
+import org.herac.tuxguitar.app.action.impl.effects.ChangeVibratoNoteAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+import org.herac.tuxguitar.song.models.TGNote;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class NoteEffectToolItems  extends ToolItems{
+	public static final String NAME = "effect.items";
+	
+	private ToolItem deadNote;
+	private ToolItem ghostNote;
+	private ToolItem accentuatedNote;
+	private ToolItem heavyAccentuatedNote;
+	private ToolItem harmonicNote;
+	private ToolItem graceNote;
+	
+	private ToolItem vibrato;
+	private ToolItem bend;
+	private ToolItem tremoloBar;
+	private ToolItem slide;
+	private ToolItem hammer;
+	
+	private ToolItem trill;
+	private ToolItem tremoloPicking;
+	private ToolItem palmMute;
+	
+	private ToolItem staccato;
+	private ToolItem tapping;
+	private ToolItem slapping;
+	private ToolItem popping;
+	
+	private ToolItem fadeIn;
+	
+	public NoteEffectToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		//--DEAD NOTE--
+		this.deadNote = new ToolItem(toolBar, SWT.CHECK);
+		this.deadNote.addSelectionListener(new TGActionProcessor(ChangeDeadNoteAction.NAME));
+		
+		//--GHOST NOTE--
+		this.ghostNote = new ToolItem(toolBar, SWT.CHECK);
+		this.ghostNote.addSelectionListener(new TGActionProcessor(ChangeGhostNoteAction.NAME));
+		
+		//--ACCENTUATED NOTE--
+		this.accentuatedNote = new ToolItem(toolBar, SWT.CHECK);
+		this.accentuatedNote.addSelectionListener(new TGActionProcessor(ChangeAccentuatedNoteAction.NAME));
+		
+		//--HEAVY ACCENTUATED NOTE--
+		this.heavyAccentuatedNote = new ToolItem(toolBar, SWT.CHECK);
+		this.heavyAccentuatedNote.addSelectionListener(new TGActionProcessor(ChangeHeavyAccentuatedNoteAction.NAME));
+		
+		//--HARMONIC NOTE--
+		this.harmonicNote = new ToolItem(toolBar, SWT.CHECK);
+		this.harmonicNote.addSelectionListener(new TGActionProcessor(ChangeHarmonicNoteAction.NAME));
+		
+		//--GRACE NOTE--
+		this.graceNote = new ToolItem(toolBar, SWT.CHECK);
+		this.graceNote.addSelectionListener(new TGActionProcessor(ChangeGraceNoteAction.NAME));
+		
+		//--SEPARATOR--
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		
+		//--VIBRATO--
+		this.vibrato = new ToolItem(toolBar, SWT.CHECK);
+		this.vibrato.addSelectionListener(new TGActionProcessor(ChangeVibratoNoteAction.NAME));
+		
+		//--BEND--
+		this.bend = new ToolItem(toolBar, SWT.CHECK);
+		this.bend.addSelectionListener(new TGActionProcessor(ChangeBendNoteAction.NAME));
+		
+		//--BEND--
+		this.tremoloBar = new ToolItem(toolBar, SWT.CHECK);
+		this.tremoloBar.addSelectionListener(new TGActionProcessor(ChangeTremoloBarAction.NAME));
+		
+		//--SLIDE--
+		this.slide = new ToolItem(toolBar, SWT.CHECK);
+		this.slide.addSelectionListener(new TGActionProcessor(ChangeSlideNoteAction.NAME));
+		
+		//--HAMMER--
+		this.hammer = new ToolItem(toolBar, SWT.CHECK);
+		this.hammer.addSelectionListener(new TGActionProcessor(ChangeHammerNoteAction.NAME));
+		
+		//--SEPARATOR--
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		
+		//--TRILL--
+		this.trill = new ToolItem(toolBar, SWT.CHECK);
+		this.trill.addSelectionListener(new TGActionProcessor(ChangeTrillNoteAction.NAME));
+		
+		//--TREMOLO PICKING--
+		this.tremoloPicking = new ToolItem(toolBar, SWT.CHECK);
+		this.tremoloPicking.addSelectionListener(new TGActionProcessor(ChangeTremoloPickingAction.NAME));
+		
+		//--PALM MUTE--
+		this.palmMute = new ToolItem(toolBar, SWT.CHECK);
+		this.palmMute.addSelectionListener(new TGActionProcessor(ChangePalmMuteAction.NAME));
+		
+		//--STACCATO
+		this.staccato = new ToolItem(toolBar, SWT.CHECK);
+		this.staccato.addSelectionListener(new TGActionProcessor(ChangeStaccatoAction.NAME));
+		
+		//--SEPARATOR--
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		
+		//--TAPPING
+		this.tapping = new ToolItem(toolBar, SWT.CHECK);
+		this.tapping.addSelectionListener(new TGActionProcessor(ChangeTappingAction.NAME));
+		
+		//--SLAPPING
+		this.slapping = new ToolItem(toolBar, SWT.CHECK);
+		this.slapping.addSelectionListener(new TGActionProcessor(ChangeSlappingAction.NAME));
+		
+		//--POPPING
+		this.popping = new ToolItem(toolBar, SWT.CHECK);
+		this.popping.addSelectionListener(new TGActionProcessor(ChangePoppingAction.NAME));
+		
+		//--SEPARATOR--
+		new ToolItem(toolBar, SWT.SEPARATOR);
+		
+		//--FADE IN
+		this.fadeIn = new ToolItem(toolBar, SWT.CHECK);
+		this.fadeIn.addSelectionListener(new TGActionProcessor(ChangeFadeInAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote();
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.vibrato.setSelection(note != null && note.getEffect().isVibrato());
+		this.vibrato.setEnabled(!running && note != null);
+		this.bend.setSelection(note != null && note.getEffect().isBend());
+		this.bend.setEnabled(!running && note != null);
+		this.tremoloBar.setSelection(note != null && note.getEffect().isTremoloBar());
+		this.tremoloBar.setEnabled(!running && note != null);
+		this.deadNote.setSelection(note != null && note.getEffect().isDeadNote());
+		this.deadNote.setEnabled(!running && note != null);
+		this.slide.setSelection(note != null && note.getEffect().isSlide());
+		this.slide.setEnabled(!running && note != null);
+		this.hammer.setSelection(note != null && note.getEffect().isHammer());
+		this.hammer.setEnabled(!running && note != null);
+		this.ghostNote.setSelection(note != null && note.getEffect().isGhostNote());
+		this.ghostNote.setEnabled(!running && note != null);
+		this.accentuatedNote.setSelection(note != null && note.getEffect().isAccentuatedNote());
+		this.accentuatedNote.setEnabled(!running && note != null);
+		this.heavyAccentuatedNote.setSelection(note != null && note.getEffect().isHeavyAccentuatedNote());
+		this.heavyAccentuatedNote.setEnabled(!running && note != null);
+		this.harmonicNote.setSelection(note != null && note.getEffect().isHarmonic());
+		this.harmonicNote.setEnabled(!running && note != null);
+		this.graceNote.setSelection(note != null && note.getEffect().isGrace());
+		this.graceNote.setEnabled(!running && note != null);
+		this.trill.setSelection(note != null && note.getEffect().isTrill());
+		this.trill.setEnabled(!running && note != null);
+		this.tremoloPicking.setSelection(note != null && note.getEffect().isTremoloPicking());
+		this.tremoloPicking.setEnabled(!running && note != null);
+		this.palmMute.setSelection(note != null && note.getEffect().isPalmMute());
+		this.palmMute.setEnabled(!running && note != null);
+		this.staccato.setSelection(note != null && note.getEffect().isStaccato());
+		this.staccato.setEnabled(!running && note != null);
+		this.tapping.setSelection(note != null && note.getEffect().isTapping());
+		this.tapping.setEnabled(!running && note != null);
+		this.slapping.setSelection(note != null && note.getEffect().isSlapping());
+		this.slapping.setEnabled(!running && note != null);
+		this.popping.setSelection(note != null && note.getEffect().isPopping());
+		this.popping.setEnabled(!running && note != null);
+		this.fadeIn.setSelection(note != null && note.getEffect().isFadeIn());
+		this.fadeIn.setEnabled(!running && note != null);
+	}
+	
+	public void loadProperties(){
+		this.vibrato.setToolTipText(TuxGuitar.getProperty("effects.vibrato"));
+		this.bend.setToolTipText(TuxGuitar.getProperty("effects.bend"));
+		this.tremoloBar.setToolTipText(TuxGuitar.getProperty("effects.tremolo-bar"));
+		this.popping.setToolTipText(TuxGuitar.getProperty("effects.popping"));
+		this.deadNote.setToolTipText(TuxGuitar.getProperty("effects.deadnote"));
+		this.slide.setToolTipText(TuxGuitar.getProperty("effects.slide"));
+		this.hammer.setToolTipText(TuxGuitar.getProperty("effects.hammer"));
+		this.ghostNote.setToolTipText(TuxGuitar.getProperty("effects.ghostnote"));
+		this.accentuatedNote.setToolTipText(TuxGuitar.getProperty("effects.accentuatednote"));
+		this.heavyAccentuatedNote.setToolTipText(TuxGuitar.getProperty("effects.heavyaccentuatednote"));
+		this.harmonicNote.setToolTipText(TuxGuitar.getProperty("effects.harmonic"));
+		this.graceNote.setToolTipText(TuxGuitar.getProperty("effects.grace"));
+		this.trill.setToolTipText(TuxGuitar.getProperty("effects.trill"));
+		this.tremoloPicking.setToolTipText(TuxGuitar.getProperty("effects.tremolo-picking"));
+		this.palmMute.setToolTipText(TuxGuitar.getProperty("effects.palm-mute"));
+		this.staccato.setToolTipText(TuxGuitar.getProperty("effects.staccato"));
+		this.tapping.setToolTipText(TuxGuitar.getProperty("effects.tapping"));
+		this.slapping.setToolTipText(TuxGuitar.getProperty("effects.slapping"));
+		this.popping.setToolTipText(TuxGuitar.getProperty("effects.popping"));
+		this.fadeIn.setToolTipText(TuxGuitar.getProperty("effects.fade-in"));
+	}
+	
+	public void loadIcons(){
+		this.deadNote.setImage(TuxGuitar.instance().getIconManager().getEffectDead());
+		this.ghostNote.setImage(TuxGuitar.instance().getIconManager().getEffectGhost());
+		this.accentuatedNote.setImage(TuxGuitar.instance().getIconManager().getEffectAccentuated());
+		this.heavyAccentuatedNote.setImage(TuxGuitar.instance().getIconManager().getEffectHeavyAccentuated());
+		this.harmonicNote.setImage(TuxGuitar.instance().getIconManager().getEffectHarmonic());
+		this.graceNote.setImage(TuxGuitar.instance().getIconManager().getEffectGrace());
+		this.vibrato.setImage(TuxGuitar.instance().getIconManager().getEffectVibrato());
+		this.bend.setImage(TuxGuitar.instance().getIconManager().getEffectBend());
+		this.tremoloBar.setImage(TuxGuitar.instance().getIconManager().getEffectTremoloBar());
+		this.slide.setImage(TuxGuitar.instance().getIconManager().getEffectSlide());
+		this.hammer.setImage(TuxGuitar.instance().getIconManager().getEffectHammer());
+		this.trill.setImage(TuxGuitar.instance().getIconManager().getEffectTrill());
+		this.tremoloPicking.setImage(TuxGuitar.instance().getIconManager().getEffectTremoloPicking());
+		this.palmMute.setImage(TuxGuitar.instance().getIconManager().getEffectPalmMute());
+		this.staccato.setImage(TuxGuitar.instance().getIconManager().getEffectStaccato());
+		this.tapping.setImage(TuxGuitar.instance().getIconManager().getEffectTapping());
+		this.slapping.setImage(TuxGuitar.instance().getIconManager().getEffectSlapping());
+		this.popping.setImage(TuxGuitar.instance().getIconManager().getEffectPopping());
+		this.fadeIn.setImage(TuxGuitar.instance().getIconManager().getEffectFadeIn());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/PropertiesToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/PropertiesToolItems.java
new file mode 100644
index 0000000..be0e4b8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/PropertiesToolItems.java
@@ -0,0 +1,51 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeInfoAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class PropertiesToolItems extends ToolItems{
+	public static final String NAME = "property.items";
+	
+	private ToolItem info;
+	
+	public PropertiesToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.info = new ToolItem(toolBar, SWT.PUSH);
+		this.info.addSelectionListener(new TGActionProcessor(ChangeInfoAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void loadProperties(){
+		this.info.setToolTipText(TuxGuitar.getProperty("composition.properties"));
+	}
+	
+	public void loadIcons(){
+		this.info.setImage(TuxGuitar.instance().getIconManager().getSongProperties());
+	}
+	
+	public void update(){
+		//Nothing to do
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/TrackToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/TrackToolItems.java
new file mode 100644
index 0000000..43110cb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/TrackToolItems.java
@@ -0,0 +1,60 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.track.AddTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.RemoveTrackAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TrackToolItems extends ToolItems{
+	public static final String NAME = "track.items";
+	
+	private ToolItem add;
+	private ToolItem remove;
+	
+	public TrackToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.add = new ToolItem(toolBar, SWT.PUSH);
+		this.add.addSelectionListener(new TGActionProcessor(AddTrackAction.NAME));
+		
+		this.remove = new ToolItem(toolBar, SWT.PUSH);
+		this.remove.addSelectionListener(new TGActionProcessor(RemoveTrackAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void loadProperties(){
+		this.add.setToolTipText(TuxGuitar.getProperty("track.add"));
+		this.remove.setToolTipText(TuxGuitar.getProperty("track.remove"));
+	}
+	
+	public void loadIcons(){
+		this.add.setImage(TuxGuitar.instance().getIconManager().getTrackAdd());
+		this.remove.setImage(TuxGuitar.instance().getIconManager().getTrackRemove());
+	}
+	
+	public void update(){
+		boolean running = TuxGuitar.instance().getPlayer().isRunning();
+		this.add.setEnabled(!running);
+		this.remove.setEnabled(!running);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/TransportToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/TransportToolItems.java
new file mode 100644
index 0000000..467a9bb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/TransportToolItems.java
@@ -0,0 +1,141 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.transport.TransportPlayAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportStopAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TransportToolItems  extends ToolItems{
+	public static final String NAME = "transport.items";
+	
+	private static final int STATUS_STOPPED = 1;
+	private static final int STATUS_PAUSED = 2;
+	private static final int STATUS_RUNNING = 3;
+	
+	private ToolItem first;
+	private ToolItem last;
+	private ToolItem previous;
+	private ToolItem next;
+	private ToolItem stop;
+	private ToolItem play;
+	private int status;
+	
+	public TransportToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		this.first = new ToolItem(toolBar,SWT.PUSH);
+		this.first.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				TuxGuitar.instance().getTransport().gotoFirst();
+			}
+		});
+		
+		this.previous = new ToolItem(toolBar,SWT.PUSH);
+		this.previous.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				TuxGuitar.instance().getTransport().gotoPrevious();
+			}
+		});
+		
+		this.stop = new ToolItem(toolBar,SWT.PUSH);
+		this.stop.addSelectionListener(new TGActionProcessor(TransportStopAction.NAME));
+		
+		this.play = new ToolItem(toolBar,SWT.PUSH);
+		this.play.addSelectionListener(new TGActionProcessor(TransportPlayAction.NAME));
+		
+		this.next = new ToolItem(toolBar,SWT.PUSH);
+		this.next.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				TuxGuitar.instance().getTransport().gotoNext();
+			}
+		});
+		
+		this.last = new ToolItem(toolBar,SWT.PUSH);
+		this.last.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				TuxGuitar.instance().getTransport().gotoLast();
+			}
+		});
+		
+		this.status = STATUS_STOPPED;
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		loadIcons(false);
+	}
+	
+	public void loadProperties(){
+		this.play.setToolTipText(TuxGuitar.getProperty("transport.start"));
+		this.stop.setToolTipText(TuxGuitar.getProperty("transport.stop"));
+		this.first.setToolTipText(TuxGuitar.getProperty("transport.first"));
+		this.last.setToolTipText(TuxGuitar.getProperty("transport.last"));
+		this.previous.setToolTipText(TuxGuitar.getProperty("transport.previous"));
+		this.next.setToolTipText(TuxGuitar.getProperty("transport.next"));
+	}
+	
+	public void loadIcons(){
+		loadIcons(true);
+	}
+	
+	public void loadIcons(boolean force){
+		int lastStatus = this.status;
+		
+		if(TuxGuitar.instance().getPlayer().isRunning()){
+			this.status = STATUS_RUNNING;
+		}else if(TuxGuitar.instance().getPlayer().isPaused()){
+			this.status = STATUS_PAUSED;
+		}else{
+			this.status = STATUS_STOPPED;
+		}
+		
+		if(force || lastStatus != this.status){
+			if(this.status == STATUS_RUNNING){
+				this.first.setImage(TuxGuitar.instance().getIconManager().getTransportIconFirst2());
+				this.last.setImage(TuxGuitar.instance().getIconManager().getTransportIconLast2());
+				this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportIconPrevious2());
+				this.next.setImage(TuxGuitar.instance().getIconManager().getTransportIconNext2());
+				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2());
+				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPause());
+				this.play.setToolTipText(TuxGuitar.getProperty("transport.pause"));
+			}else if(this.status == STATUS_PAUSED){
+				this.first.setImage(TuxGuitar.instance().getIconManager().getTransportIconFirst2());
+				this.last.setImage(TuxGuitar.instance().getIconManager().getTransportIconLast2());
+				this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportIconPrevious2());
+				this.next.setImage(TuxGuitar.instance().getIconManager().getTransportIconNext2());
+				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2());
+				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay2());
+				this.play.setToolTipText(TuxGuitar.getProperty("transport.start"));
+			}else if(this.status == STATUS_STOPPED){
+				this.first.setImage(TuxGuitar.instance().getIconManager().getTransportIconFirst1());
+				this.last.setImage(TuxGuitar.instance().getIconManager().getTransportIconLast1());
+				this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportIconPrevious1());
+				this.next.setImage(TuxGuitar.instance().getIconManager().getTransportIconNext1());
+				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop1());
+				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay1());
+				this.play.setToolTipText(TuxGuitar.getProperty("transport.start"));
+			}
+		}
+		
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/ViewToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/ViewToolItems.java
new file mode 100644
index 0000000..4915c92
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/tool/ViewToolItems.java
@@ -0,0 +1,70 @@
+/*
+ * Created on 02-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.items.tool;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.view.ShowFretBoardAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowInstrumentsAction;
+import org.herac.tuxguitar.app.action.impl.view.ShowTransportAction;
+import org.herac.tuxguitar.app.items.ToolItems;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class ViewToolItems extends ToolItems{
+	public static final String NAME = "view.items";
+	
+	private ToolItem showFretBoard;
+	private ToolItem showInstruments;
+	private ToolItem showTransport;
+	
+	public ViewToolItems(){
+		super(NAME);
+	}
+	
+	public void showItems(ToolBar toolBar){
+		//--FRETBOARD--
+		this.showFretBoard = new ToolItem(toolBar, SWT.CHECK);
+		this.showFretBoard.addSelectionListener(new TGActionProcessor(ShowFretBoardAction.NAME));
+		
+		//--INSTRUMENTS--
+		this.showInstruments = new ToolItem(toolBar, SWT.CHECK);
+		this.showInstruments.addSelectionListener(new TGActionProcessor(ShowInstrumentsAction.NAME));
+		
+		//--TRANSPORT--
+		this.showTransport = new ToolItem(toolBar, SWT.CHECK);
+		this.showTransport.addSelectionListener(new TGActionProcessor(ShowTransportAction.NAME));
+		
+		this.loadIcons();
+		this.loadProperties();
+	}
+	
+	public void update(){
+		this.showFretBoard.setSelection(TuxGuitar.instance().getFretBoardEditor().isVisible());
+		this.showInstruments.setSelection(!TuxGuitar.instance().getChannelManager().isDisposed());
+		this.showTransport.setSelection(!TuxGuitar.instance().getTransport().isDisposed());
+	}
+	
+	public void loadProperties(){
+		this.showFretBoard.setToolTipText(TuxGuitar.getProperty("view.show-fretboard"));
+		this.showInstruments.setToolTipText(TuxGuitar.getProperty("view.show-instruments"));
+		this.showTransport.setToolTipText(TuxGuitar.getProperty("view.show-transport"));
+	}
+	
+	public void loadIcons(){
+		this.showFretBoard.setImage(TuxGuitar.instance().getIconManager().getFretboard());
+		this.showInstruments.setImage(TuxGuitar.instance().getIconManager().getInstruments());
+		this.showTransport.setImage(TuxGuitar.instance().getIconManager().getTransport());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/xml/ToolBarsReader.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/xml/ToolBarsReader.java
new file mode 100644
index 0000000..6e71e8c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/xml/ToolBarsReader.java
@@ -0,0 +1,60 @@
+package org.herac.tuxguitar.app.items.xml;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.herac.tuxguitar.app.items.ItemManager;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+public class ToolBarsReader {
+	private static final String ITEM_TAG = "toolbar";
+	private static final String ATTR_NAME = "name";
+	private static final String ATTR_ENABLED = "enabled";
+	
+	public static void loadToolBars(ItemManager manager,File file){
+		try {
+			if (file.exists()){
+				loadToolBars(manager,getDocument(file).getFirstChild());
+			}
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	private static Document getDocument(File file) throws ParserConfigurationException, SAXException, IOException {
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		Document document = builder.parse(file);
+		return document;
+	}
+	
+	private static void loadToolBars(ItemManager manager,Node node){
+		NodeList listNode = node.getChildNodes();
+		int index = 0;
+		for (int i = 0; i < listNode.getLength(); i++) {
+			Node child = listNode.item(i);
+			String nameNode = child.getNodeName();
+			
+			if (nameNode.equals(ITEM_TAG)) {
+				NamedNodeMap params = child.getAttributes();
+				
+				Node name = params.getNamedItem(ATTR_NAME);
+				Node enabled = params.getNamedItem(ATTR_ENABLED);
+				
+				if (name == null || enabled == null || name.getNodeValue() == null || enabled.getNodeValue() == null ){
+					System.err.println("Invalid ToolBar Attributes.");
+					continue;
+				}
+				manager.setToolBarStatus(name.getNodeValue(),Boolean.valueOf(enabled.getNodeValue().trim()).booleanValue(), index ++);
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/items/xml/ToolBarsWriter.java b/TuxGuitar/src/org/herac/tuxguitar/app/items/xml/ToolBarsWriter.java
new file mode 100644
index 0000000..0971478
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/items/xml/ToolBarsWriter.java
@@ -0,0 +1,83 @@
+package org.herac.tuxguitar.app.items.xml;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+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.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.herac.tuxguitar.app.items.ToolItems;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+public class ToolBarsWriter {
+	
+	private static final String ITEM_LIST_TAG = "toolbars";
+	private static final String ITEM_TAG = "toolbar";
+	private static final String ATTR_NAME = "name";
+	private static final String ATTR_ENABLED = "enabled";
+	
+	public static void saveToolBars(ToolItems[] items,File file) {
+		try {
+			Document doc = createDocument();
+			setToolBars(items,doc);
+			saveDocument(doc,file);
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public static Document createDocument() throws ParserConfigurationException {
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		Document document = builder.newDocument();
+		return document;
+	}
+	
+	public static void saveDocument(Document document,File file) throws FileNotFoundException, TransformerException {
+		FileOutputStream fs = new FileOutputStream(file);
+		
+		// Write it out again
+		TransformerFactory xformFactory = TransformerFactory.newInstance();
+		Transformer idTransform = xformFactory.newTransformer();
+		Source input = new DOMSource(document);
+		Result output = new StreamResult(fs);
+		idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
+		idTransform.transform(input, output);
+	}
+	
+	private static void setToolBars(ToolItems[] items,Document document){
+		//chords tag
+		Node listNode = document.createElement(ITEM_LIST_TAG);
+		
+		for(int i = 0; i < items.length ; i ++){
+			
+			//chord tag
+			Node node = document.createElement(ITEM_TAG);
+			listNode.appendChild(node);
+			
+			//name attribute
+			Attr attribute = document.createAttribute(ATTR_NAME);
+			attribute.setNodeValue( items[i].getName());
+			node.getAttributes().setNamedItem(attribute);
+			
+			//enabled attribute
+			attribute = document.createAttribute(ATTR_ENABLED);
+			attribute.setNodeValue( Boolean.toString(items[i].isEnabled()));
+			node.getAttributes().setNamedItem(attribute);
+		}
+		
+		document.appendChild(listNode);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/marker/MarkerEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/marker/MarkerEditor.java
new file mode 100644
index 0000000..cc728f0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/marker/MarkerEditor.java
@@ -0,0 +1,210 @@
+package org.herac.tuxguitar.app.marker;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.ColorDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.undoables.UndoableJoined;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeMarker;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGMarker;
+
+public class MarkerEditor {
+	public static final int STATUS_NEW = 1;
+	public static final int STATUS_EDIT = 2;
+	
+	private static final int MINIMUM_CONTROL_WIDTH = 180;
+	private static final int MINIMUM_BUTTON_WIDTH = 80;
+	private static final int MINIMUM_BUTTON_HEIGHT = 25;
+	
+	private int status;
+	protected TGMarker marker;
+	protected Shell dialog;
+	protected Spinner measureSpinner;
+	protected Text titleText;
+	protected Button colorButton;
+	protected Color colorButtonValue;
+	
+	protected boolean accepted;
+	
+	public MarkerEditor(TGMarker marker) {
+		this(marker,STATUS_NEW);
+	}
+	
+	public MarkerEditor(TGMarker marker,int status) {
+		this.marker = marker.clone(TuxGuitar.instance().getSongManager().getFactory());
+		this.status = status;
+	}
+	
+	public boolean open(Shell shell) {
+		this.accepted = false;
+		
+		this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setText(TuxGuitar.getProperty("marker"));
+		
+		// ----------------------------------------------------------------------
+		Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout(2, false));
+		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		group.setText(TuxGuitar.getProperty("marker"));
+		
+		// Measure Number
+		final int measureCount = TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders();
+		Label measureLabel = new Label(group, SWT.NULL);
+		measureLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true,true));
+		measureLabel.setText(TuxGuitar.getProperty("measure"));
+		
+		this.measureSpinner = new Spinner(group, SWT.BORDER);
+		this.measureSpinner.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
+		this.measureSpinner.setMinimum(1);
+		this.measureSpinner.setMaximum(measureCount);
+		this.measureSpinner.setSelection(this.marker.getMeasure());
+		this.measureSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int selection = MarkerEditor.this.measureSpinner.getSelection();
+				if (selection < 1) {
+					MarkerEditor.this.measureSpinner.setSelection(1);
+				} else if (selection > measureCount) {
+					MarkerEditor.this.measureSpinner.setSelection(measureCount);
+				}
+			}
+		});
+		
+		// Title
+		Label titleLabel = new Label(group, SWT.NULL);
+		titleLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
+		titleLabel.setText(TuxGuitar.getProperty("title"));
+		this.titleText = new Text(group, SWT.BORDER);
+		this.titleText.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
+		this.titleText.setText(this.marker.getTitle());
+		
+		// Color
+		Label colorLabel = new Label(group, SWT.NULL);
+		colorLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
+		colorLabel.setText(TuxGuitar.getProperty("color"));
+		this.colorButton = new Button(group, SWT.PUSH);
+		this.colorButton.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
+		this.colorButton.setText(TuxGuitar.getProperty("choose"));
+		this.colorButton.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				ColorDialog dlg = new ColorDialog(MarkerEditor.this.dialog);
+				dlg.setRGB(MarkerEditor.this.dialog.getDisplay().getSystemColor(SWT.COLOR_BLACK).getRGB());
+				dlg.setText(TuxGuitar.getProperty("choose-color"));
+				RGB rgb = dlg.open();
+				if (rgb != null) {
+					MarkerEditor.this.marker.getColor().setR(rgb.red);
+					MarkerEditor.this.marker.getColor().setG(rgb.green);
+					MarkerEditor.this.marker.getColor().setB(rgb.blue);
+					MarkerEditor.this.setButtonColor();
+				}
+			}
+		});
+		this.colorButton.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				MarkerEditor.this.disposeButtonColor();
+			}
+		});
+		this.setButtonColor();
+		
+		// ------------------BUTTONS--------------------------
+		Composite buttons = new Composite(this.dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2, false));
+		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
+		
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
+		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(data);
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				updateMarker();
+				MarkerEditor.this.accepted = true;
+				MarkerEditor.this.dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(data);
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				MarkerEditor.this.dialog.dispose();
+			}
+		});
+		
+		this.dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return this.accepted;
+	}
+	
+	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
+		GridData data = new GridData();
+		data.minimumWidth = minimumWidth;
+		data.horizontalAlignment = horizontalAlignment;
+		data.verticalAlignment = SWT.DEFAULT;
+		data.grabExcessHorizontalSpace = true;
+		data.grabExcessVerticalSpace = true;
+		return data;
+	}
+	
+	protected void setButtonColor(){
+		Color color = new Color(this.dialog.getDisplay(), this.marker.getColor().getR(), this.marker.getColor().getG(), this.marker.getColor().getB());
+		
+		this.colorButton.setForeground( color );
+		this.disposeButtonColor();
+		this.colorButtonValue = color;
+	}
+	
+	protected void disposeButtonColor(){
+		if(this.colorButtonValue != null && !this.colorButtonValue.isDisposed()){
+			this.colorButtonValue.dispose();
+			this.colorButtonValue = null;
+		}
+	}
+	
+	protected void updateMarker() {
+		int oldMeasure = this.marker.getMeasure();
+		this.marker.setMeasure(this.measureSpinner.getSelection());
+		this.marker.setTitle(this.titleText.getText());
+		this.marker = this.marker.clone(TuxGuitar.instance().getSongManager().getFactory());
+		
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		
+		//comienza el undoable
+		UndoableJoined joinedUndoable = new UndoableJoined();
+		
+		if(this.status == STATUS_EDIT && oldMeasure != this.marker.getMeasure()){
+			UndoableChangeMarker undoable = UndoableChangeMarker.startUndo(manager.getMarker(oldMeasure));
+			TuxGuitar.instance().getSongManager().removeMarker(oldMeasure);
+			joinedUndoable.addUndoableEdit(undoable.endUndo(null));
+		}
+		UndoableChangeMarker undoable = UndoableChangeMarker.startUndo(manager.getMarker(this.marker.getMeasure()));
+		TuxGuitar.instance().getSongManager().updateMarker(this.marker);
+		joinedUndoable.addUndoableEdit(undoable.endUndo(this.marker));
+		
+		// termia el undoable
+		TuxGuitar.instance().getUndoableManager().addEdit(joinedUndoable.endUndo());
+		TuxGuitar.instance().getFileHistory().setUnsavedFile();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/marker/MarkerList.java b/TuxGuitar/src/org/herac/tuxguitar/app/marker/MarkerList.java
new file mode 100644
index 0000000..001875d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/marker/MarkerList.java
@@ -0,0 +1,298 @@
+package org.herac.tuxguitar.app.marker;
+
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.undo.undoables.custom.UndoableChangeMarker;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGMarker;
+
+public class MarkerList implements TGUpdateListener, IconLoader,LanguageLoader{
+	
+	private static MarkerList instance;
+	
+	protected Shell dialog;
+	private Table table;
+	private List markers;
+	
+	private Composite compositeTable;
+	private TableColumn measureColumn;
+	private TableColumn titleColumn;
+	
+	private Composite compositeButtons;
+	private Button buttonAdd;
+	private Button buttonEdit;
+	private Button buttonDelete;
+	private Button buttonGo;
+	private Button buttonClose;
+	
+	public static MarkerList instance(){
+		if(instance == null){
+			instance = new MarkerList();
+		}
+		return instance;
+	}
+	
+	private MarkerList() {
+		super();
+	}
+	
+	public void show() {
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM);
+		this.dialog.setLayout(new GridLayout(2,false));
+		this.dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		// ----------------------------------------------------------------------
+		this.compositeTable = new Composite(this.dialog, SWT.NONE);
+		this.compositeTable.setLayout(new GridLayout());
+		this.compositeTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		
+		this.table = new Table(this.compositeTable, SWT.BORDER | SWT.FULL_SELECTION);
+		this.table.setLayoutData(new GridData(250,200));
+		this.table.setHeaderVisible(true);
+		this.table.addListener (SWT.MouseDoubleClick, new Listener() {
+			public void handleEvent (Event event) {
+				new MarkerNavigator().goToSelectedMarker(getSelectedMarker());
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		this.measureColumn = new TableColumn(this.table, SWT.LEFT);
+		this.measureColumn.setWidth(70);
+		
+		this.titleColumn = new TableColumn(this.table, SWT.LEFT);
+		this.titleColumn.setWidth(180);
+		
+		this.loadTableItems(false);
+		
+		// ------------------BUTTONS--------------------------
+		this.compositeButtons = new Composite(this.dialog, SWT.NONE);
+		this.compositeButtons.setLayout(new GridLayout(1,false));
+		this.compositeButtons.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.buttonAdd = new Button(this.compositeButtons, SWT.PUSH);
+		this.buttonAdd.setLayoutData(makeGridData(SWT.FILL, SWT.TOP,false));
+		this.buttonAdd.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(!TGActionLock.isLocked() && !TuxGuitar.instance().isLocked()){
+					TGActionLock.lock();
+					Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+					TGMarker marker = TuxGuitar.instance().getSongManager().getFactory().newMarker();
+					marker.setMeasure(caret.getMeasure().getNumber());
+					if(new MarkerEditor(marker,MarkerEditor.STATUS_NEW).open(MarkerList.this.dialog)){
+						TuxGuitar.instance().updateCache(true);
+						loadTableItems(true);
+					}
+					TGActionLock.unlock();
+				}
+			}
+		});
+		
+		this.buttonEdit = new Button(this.compositeButtons, SWT.PUSH);
+		this.buttonEdit.setLayoutData(makeGridData(SWT.FILL, SWT.TOP,false));
+		this.buttonEdit.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!TGActionLock.isLocked() && !TuxGuitar.instance().isLocked()){
+					TGActionLock.lock();
+					TGMarker marker = getSelectedMarker();
+					if(marker != null){
+						if(new MarkerEditor(marker,MarkerEditor.STATUS_EDIT).open(MarkerList.this.dialog)){
+							TuxGuitar.instance().updateCache(true);
+							loadTableItems(true);
+						}
+					}
+					TGActionLock.unlock();
+				}
+			}
+		});
+		
+		this.buttonDelete = new Button(this.compositeButtons, SWT.PUSH);
+		this.buttonDelete.setLayoutData(makeGridData(SWT.FILL, SWT.TOP,false));
+		this.buttonDelete.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!TGActionLock.isLocked() && !TuxGuitar.instance().isLocked()){
+					TGActionLock.lock();
+					TGMarker marker = getSelectedMarker();
+					// comienza el undoable
+					UndoableChangeMarker undoable = UndoableChangeMarker.startUndo(marker);
+					
+					TuxGuitar.instance().getSongManager().removeMarker(marker);
+					
+					// termia el undoable
+					TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(null));
+					TuxGuitar.instance().getFileHistory().setUnsavedFile();
+					TuxGuitar.instance().updateCache(true);
+					loadTableItems(true);
+					TGActionLock.unlock();
+				}
+			}
+		});
+		
+		this.buttonGo = new Button(this.compositeButtons, SWT.PUSH);
+		this.buttonGo.setLayoutData(makeGridData(SWT.FILL, SWT.BOTTOM,true));
+		this.buttonGo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!TGActionLock.isLocked() && !TuxGuitar.instance().isLocked()){
+					TGActionLock.lock();
+					new MarkerNavigator().goToSelectedMarker(getSelectedMarker());
+					TuxGuitar.instance().updateCache(true);
+					TGActionLock.unlock();
+				}
+			}
+		});
+		
+		this.buttonClose = new Button(this.compositeButtons, SWT.PUSH);
+		this.buttonClose.setLayoutData(makeGridData(SWT.FILL, SWT.BOTTOM,false));
+		this.buttonClose.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				MarkerList.this.dialog.dispose();
+			}
+		});
+		
+		this.loadIcons();
+		this.loadProperties(false);
+		
+		this.addListeners();
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				removeListeners();
+			}
+		});
+		this.dialog.setDefaultButton( this.buttonGo );
+		
+		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	public void addListeners(){
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
+	}
+	
+	public void removeListeners(){
+		TuxGuitar.instance().getIconManager().removeLoader(this);
+		TuxGuitar.instance().getLanguageManager().removeLoader(this);
+		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
+	}
+	
+	public void dispose(){
+		if(!isDisposed()){
+			this.dialog.dispose();
+		}
+	}
+	
+	public void update(){
+		this.update(false);
+	}
+	
+	public void update(final boolean keepSelection){
+		if(!isDisposed()){
+			new SyncThread(new Runnable() {
+				public void run() {
+					if(!isDisposed()){
+						loadTableItems(keepSelection);
+					}
+				}
+			}).start();
+		}
+	}
+	
+	private GridData makeGridData(int horizontalAlignment,int verticalAlignment,boolean grabExcessVerticalSpace){
+		GridData data = new GridData();
+		data.horizontalAlignment = horizontalAlignment;
+		data.verticalAlignment = verticalAlignment;
+		data.grabExcessHorizontalSpace = true;
+		data.grabExcessVerticalSpace = grabExcessVerticalSpace;
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		
+		return data;
+	}
+	
+	protected void loadTableItems(boolean keepSelection){
+		int itemSelected = (keepSelection ? this.table.getSelectionIndex() : -1 );
+		
+		this.table.removeAll();
+		this.markers = TuxGuitar.instance().getSongManager().getMarkers();
+		
+		Iterator it = this.markers.iterator();
+		while (it.hasNext()) {
+			TGMarker marker = (TGMarker) it.next();
+			
+			TableItem item = new TableItem(this.table, SWT.NONE);
+			item.setText(new String[] { Integer.toString(marker.getMeasure()),marker.getTitle() });
+		}
+		
+		if(itemSelected >= 0 && itemSelected < this.markers.size()){
+			this.table.select(itemSelected);
+		}
+	}
+	
+	protected TGMarker getSelectedMarker(){
+		int itemSelected = this.table.getSelectionIndex();
+		if(itemSelected >= 0 && itemSelected < this.markers.size()){
+			return (TGMarker)this.markers.get(itemSelected);
+		}
+		return null;
+	}
+	
+	public boolean isDisposed(){
+		return (this.dialog == null || this.dialog.isDisposed());
+	}
+	
+	public void loadIcons() {
+		if(!isDisposed()){
+			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+		}
+	}
+	
+	public void loadProperties() {
+		this.loadProperties(true);
+	}
+	
+	public void loadProperties(boolean layout) {
+		if(!isDisposed()){
+			this.dialog.setText(TuxGuitar.getProperty("marker.list"));
+			this.measureColumn.setText(TuxGuitar.getProperty("measure"));
+			this.titleColumn.setText(TuxGuitar.getProperty("title"));
+			this.buttonAdd.setText(TuxGuitar.getProperty("add"));
+			this.buttonEdit.setText(TuxGuitar.getProperty("edit"));
+			this.buttonDelete.setText(TuxGuitar.getProperty("remove"));
+			this.buttonGo.setText(TuxGuitar.getProperty("go"));
+			this.buttonClose.setText(TuxGuitar.getProperty("close"));
+			
+			if(layout){
+				this.table.layout();
+				this.compositeTable.layout();
+				this.compositeButtons.layout();
+				this.dialog.pack(true);
+			}
+		}
+	}
+	
+	public void doUpdate(int type) {
+		if( type ==  TGUpdateListener.SONG_LOADED ){
+			this.update();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/marker/MarkerNavigator.java b/TuxGuitar/src/org/herac/tuxguitar/app/marker/MarkerNavigator.java
new file mode 100644
index 0000000..c28ac74
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/marker/MarkerNavigator.java
@@ -0,0 +1,33 @@
+package org.herac.tuxguitar.app.marker;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGMarker;
+
+public class MarkerNavigator {
+	
+	public MarkerNavigator(){
+		super();
+	}
+	
+	public void goToSelectedMarker(TGMarker marker){
+		if(marker != null){
+			Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+			TGSongManager manager = TuxGuitar.instance().getSongManager();
+			TGTrackImpl track = caret.getTrack();
+			if(track != null){
+				TGMeasureImpl measure = (TGMeasureImpl)manager.getTrackManager().getMeasure(track,marker.getMeasure());
+				if(measure != null){
+					TGBeat beat = manager.getMeasureManager().getFirstBeat(measure.getBeats());
+					if(beat != null){
+						caret.moveTo(track, measure,beat,caret.getStringNumber());
+					}
+				}
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/mixer/TGMixer.java b/TuxGuitar/src/org/herac/tuxguitar/app/mixer/TGMixer.java
new file mode 100644
index 0000000..0f3c276
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/mixer/TGMixer.java
@@ -0,0 +1,265 @@
+/*
+package org.herac.tuxguitar.app.mixer;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class TGMixer implements TGUpdateListener,IconLoader,LanguageLoader{
+	
+	public static final int MUTE = 0x01;
+	public static final int SOLO = 0x02;
+	public static final int VOLUME = 0x04;
+	public static final int BALANCE = 0x08;
+	public static final int CHORUS = 0x10;
+	public static final int REVERB = 0x20;
+	public static final int PHASER = 0x40;
+	public static final int TREMOLO = 0x80;
+	public static final int CHANNEL = 0x100;
+	
+	public static final int CHANGE_ALL = (MUTE | SOLO | VOLUME | BALANCE | CHORUS | REVERB | PHASER | TREMOLO | CHANNEL);
+	
+	protected Shell dialog;
+	private List tracks;
+	private Scale volumeScale;
+	private Label volumeValueLabel;
+	private Label volumeValueTitleLabel;
+	private String volumeTip;
+	private int volumeValue;
+	
+	public TGMixer() {
+		this.tracks = new ArrayList();
+	}
+	
+	public void show() {
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM);
+		this.loadData();
+		
+		this.addListeners();
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				removeListeners();
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER );
+	}
+	
+	public void addListeners(){
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
+	}
+	
+	public void removeListeners(){
+		TuxGuitar.instance().getIconManager().removeLoader(this);
+		TuxGuitar.instance().getLanguageManager().removeLoader(this);
+		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
+	}
+	
+	protected void loadData(){
+		this.tracks.clear();
+		Iterator it = TuxGuitar.instance().getSongManager().getSong().getTracks();
+		while (it.hasNext()) {
+			TGTrack track = (TGTrack) it.next();
+			TGMixerTrack trackMixer = new TGMixerTrack(this,track);
+			trackMixer.init(this.dialog);
+			this.tracks.add(trackMixer);
+		}
+		Composite composite = new Composite(this.dialog, SWT.BORDER);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true));
+		
+		this.volumeValue = -1;
+		
+		this.volumeScale = new Scale(composite, SWT.VERTICAL);
+		this.volumeScale.setMaximum(10);
+		this.volumeScale.setMinimum(0);
+		this.volumeScale.setIncrement(1);
+		this.volumeScale.setPageIncrement(1);
+		this.volumeScale.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true));
+		
+		Label separator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
+		separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
+		
+		Composite volumeValueComposite = new Composite(composite, SWT.NONE);
+		volumeValueComposite.setLayout(new GridLayout(2,false));
+		
+		this.volumeValueTitleLabel = new Label(volumeValueComposite, SWT.NONE);
+		
+		this.volumeValueLabel = new Label(volumeValueComposite, SWT.CENTER);
+		this.volumeValueLabel.setLayoutData(getVolumeValueLabelData());
+		
+		this.volumeScale.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event event) {
+				changeVolume();
+			}
+		});
+		
+		this.loadVolume();
+		this.loadIcons();
+		this.loadProperties(false);
+		
+		this.dialog.setLayout(getLayout(this.dialog.getChildren().length));
+		this.dialog.pack();
+	}
+	
+	private GridLayout getLayout(int columns){
+		GridLayout layout = new GridLayout(columns, false);
+		layout.verticalSpacing = 1;
+		layout.horizontalSpacing = 1;
+		return layout;
+	}
+	
+	protected void changeVolume(){
+		int volume = (short)(TGMixer.this.volumeScale.getMaximum() - TGMixer.this.volumeScale.getSelection());
+		if(volume != TuxGuitar.instance().getPlayer().getVolume()){
+			TuxGuitar.instance().getPlayer().setVolume(volume);
+			this.volumeScale.setToolTipText(TGMixer.this.volumeTip + ": " + TuxGuitar.instance().getPlayer().getVolume());
+			this.volumeValueLabel.setText(Integer.toString(TGMixer.this.volumeScale.getMaximum() - TGMixer.this.volumeScale.getSelection()));
+			this.volumeValue = volume;
+		}
+	}
+	
+	protected void loadVolume(){
+		int volume = TuxGuitar.instance().getPlayer().getVolume();
+		if(this.volumeValue != volume){
+			this.volumeScale.setSelection(this.volumeScale.getMaximum() - TuxGuitar.instance().getPlayer().getVolume());
+			this.volumeValueLabel.setText(Integer.toString(this.volumeScale.getMaximum() - this.volumeScale.getSelection()));
+			this.volumeValue = volume;
+		}
+	}
+	
+	private GridData getVolumeValueLabelData(){
+		GridData data = new GridData(SWT.CENTER,SWT.NONE,true,false);
+		data.minimumWidth = 40;
+		return data;
+	}
+	
+	protected void clear(){
+		Control[] controls = this.dialog.getChildren();
+		for(int i = 0;i < controls.length;i++){
+			controls[i].dispose();
+		}
+	}
+	
+	public boolean isDisposed() {
+		return (this.dialog == null || this.dialog.isDisposed());
+	}
+	
+	public synchronized void fireChanges(TGChannel channel,int type){
+		Iterator it = this.tracks.iterator();
+		while(it.hasNext()){
+			TGMixerTrack mixer = (TGMixerTrack)it.next();
+			if(mixer.getTrack().getChannel().getChannel() == channel.getChannel()){
+				channel.copy(mixer.getTrack().getChannel());
+			}
+			mixer.fireChanges(type);
+		}
+		if (TuxGuitar.instance().getPlayer().isRunning()) {
+			TuxGuitar.instance().getPlayer().updateControllers();
+		}
+	}
+	
+	public synchronized void loadProperties(){
+		this.loadProperties(true);
+	}
+	
+	public synchronized void loadProperties(boolean pack){
+		if(!isDisposed()){
+			Iterator it = this.tracks.iterator();
+			while(it.hasNext()){
+				TGMixerTrack mixer = (TGMixerTrack)it.next();
+				mixer.loadProperties();
+			}
+			this.volumeValueTitleLabel.setText(TuxGuitar.getProperty("mixer.volume") + ":");
+			this.volumeTip = TuxGuitar.getProperty("mixer.volume");
+			this.volumeScale.setToolTipText(this.volumeTip + ": " + TuxGuitar.instance().getPlayer().getVolume());
+			this.dialog.setText(TuxGuitar.getProperty("mixer"));
+			if( pack ){
+				this.dialog.pack();
+				this.dialog.layout(true,true);
+				this.dialog.redraw();
+			}
+		}
+	}
+	
+	public synchronized void loadIcons(){
+		if(!isDisposed()){
+			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+		}
+	}
+	
+	public synchronized void updateItems(){
+		if(!isDisposed()){
+			Iterator it = this.tracks.iterator();
+			while(it.hasNext()){
+				TGMixerTrack mixer = (TGMixerTrack)it.next();
+				mixer.updateItems();
+			}
+		}
+	}
+	
+	public synchronized void updateValues(){
+		if(!isDisposed()){
+			this.loadVolume();
+			
+			Iterator it = this.tracks.iterator();
+			while(it.hasNext()){
+				TGMixerTrack mixer = (TGMixerTrack)it.next();
+				mixer.fireChanges(CHANGE_ALL);
+			}
+		}
+	}
+	
+	public synchronized void update(){
+		if(!isDisposed()){
+			new SyncThread(new Runnable() {
+				public void run() {
+					if(!isDisposed()){
+						TGMixer.this.clear();
+						TGMixer.this.loadData();
+						TGMixer.this.dialog.layout(true,true);
+						TGMixer.this.dialog.redraw();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	public synchronized void dispose() {
+		if(!isDisposed()){
+			this.dialog.dispose();
+		}
+	}
+
+	public void doUpdate(int type) {
+		if( type == TGUpdateListener.SELECTION ){
+			this.updateItems();
+		}else if( type == TGUpdateListener.SONG_LOADED ){
+			this.update();
+		}
+	}
+}
+*/
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/mixer/TGMixerTrack.java b/TuxGuitar/src/org/herac/tuxguitar/app/mixer/TGMixerTrack.java
new file mode 100644
index 0000000..87267f5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/mixer/TGMixerTrack.java
@@ -0,0 +1,397 @@
+/*
+package org.herac.tuxguitar.app.mixer;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.ShellAdapter;
+import org.eclipse.swt.events.ShellEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Scale;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackChannel;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackSoloMute;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class TGMixerTrack {
+	
+	protected TGTrack track;
+	protected TGMixer mixer;
+	protected TGMixerTrackChannel mixerChannel;
+	
+	protected Button checkSolo;
+	protected Button checkMute;
+	
+	private TGMixerScale scaleVolume;
+	private TGMixerScale scaleBalance;
+	private TGMixerScalePopup scaleChorus;
+	private TGMixerScalePopup scaleReverb;
+	private TGMixerScalePopup scalePhaser;
+	private TGMixerScalePopup scaleTremolo;
+	
+	private Label volumeValueLabel;
+	private Label volumeValueTitleLabel;
+	
+	public TGMixerTrack(TGMixer mixer,TGTrack track){
+		this.mixer = mixer;
+		this.track = track;
+	}
+	
+	public void init(final Composite parent) {
+		final Composite composite = new Composite(parent, SWT.BORDER);
+		composite.setLayout(new GridLayout(1, true));
+		composite.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true));
+		
+		this.mixerChannel = new TGMixerTrackChannel(this);
+		this.mixerChannel.init(composite);
+		
+		this.checkSolo = new Button(composite,SWT.CHECK);
+		this.checkSolo.setSelection(TGMixerTrack.this.track.isSolo());
+		this.checkSolo.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				TGTrack track = TGMixerTrack.this.track;
+				
+				UndoableTrackSoloMute undoable = UndoableTrackSoloMute.startUndo(track);
+				TuxGuitar.instance().getSongManager().getTrackManager().changeSolo(track,TGMixerTrack.this.checkSolo.getSelection());
+				TGMixerTrack.this.mixer.fireChanges(track.getChannel(),TGMixer.SOLO);
+				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(track));
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		this.checkMute = new Button(composite,SWT.CHECK);
+		this.checkMute.setSelection(TGMixerTrack.this.track.isMute());
+		this.checkMute.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				TGTrack track = TGMixerTrack.this.track;
+				
+				UndoableTrackSoloMute undoable = UndoableTrackSoloMute.startUndo(track);
+				TuxGuitar.instance().getSongManager().getTrackManager().changeMute(track,TGMixerTrack.this.checkMute.getSelection());
+				TGMixerTrack.this.mixer.fireChanges(track.getChannel(),TGMixer.MUTE);
+				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(track));
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		
+		new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR).setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,false));
+		
+		Composite effects = new Composite(composite, SWT.NONE);
+		effects.setLayout(new GridLayout(4,false));
+		effects.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		
+		this.scaleChorus = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.CHORUS, getVerticalScaleData());
+		this.scaleChorus.setSelection(  this.track.getChannel().getChorus());
+		
+		this.scaleReverb = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.REVERB, getVerticalScaleData());
+		this.scaleReverb.setSelection(  this.track.getChannel().getReverb());
+		
+		this.scalePhaser = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.PHASER, getVerticalScaleData());
+		this.scalePhaser.setSelection(  this.track.getChannel().getPhaser());
+		
+		this.scaleTremolo = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.TREMOLO, getVerticalScaleData());
+		this.scaleTremolo.setSelection(  this.track.getChannel().getTremolo());
+		
+		new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR).setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,false));
+		
+		this.scaleBalance = new TGMixerScale(composite, SWT.HORIZONTAL, 64, TGMixer.BALANCE, getHorizontalScaleData());
+		this.scaleBalance.setSelection(this.track.getChannel().getBalance());
+		
+		this.scaleVolume = new TGMixerScale(composite, SWT.VERTICAL, 16, TGMixer.VOLUME, new GridData(SWT.CENTER,SWT.FILL,true,true));
+		this.scaleVolume.setSelection(  this.track.getChannel().getVolume());
+		
+		Label separator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
+		separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
+		
+		Composite volumeValueComposite = new Composite(composite, SWT.NONE);
+		volumeValueComposite.setLayout(new GridLayout(2,false));
+		
+		this.volumeValueTitleLabel = new Label(volumeValueComposite, SWT.LEFT);
+		this.volumeValueLabel = new Label(volumeValueComposite, SWT.CENTER);
+		this.volumeValueLabel.setLayoutData(getVolumeValueLabelData());
+		this.volumeValueLabel.setText(Integer.toString(this.track.getChannel().getVolume()));
+	}
+	
+	private GridData getHorizontalScaleData(){
+		GridData data = new GridData(SWT.CENTER,SWT.NONE,false,true);
+		data.widthHint = 80;
+		return data;
+	}
+	
+	private GridData getVerticalScaleData(){
+		GridData data = new GridData(SWT.CENTER,SWT.FILL,false,true);
+		data.heightHint = 65;
+		return data;
+	}
+	
+	private GridData getVolumeValueLabelData(){
+		GridData data = new GridData(SWT.CENTER,SWT.NONE,true,false);
+		data.minimumWidth = 40;
+		return data;
+	}
+	
+	public void fireChanges(int type){
+		if((type & TGMixer.SOLO) != 0 || (type & TGMixer.MUTE) != 0){
+			this.checkSolo.setSelection(this.track.isSolo());
+			this.checkMute.setSelection(this.track.isMute());
+		}
+		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.VOLUME) != 0){
+			int value = this.track.getChannel().getVolume();
+			this.scaleVolume.setSelection( ( value) );
+			this.volumeValueLabel.setText(Integer.toString( value ));
+		}
+		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.BALANCE) != 0){
+			int value = this.track.getChannel().getBalance();
+			this.scaleBalance.setSelection(value);
+		}
+		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.CHORUS) != 0){
+			int value = this.track.getChannel().getChorus();
+			this.scaleChorus.setSelection( ( value) );
+		}
+		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.REVERB) != 0){
+			int value = this.track.getChannel().getReverb();
+			this.scaleReverb.setSelection( ( value) );
+		}
+		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.PHASER) != 0){
+			int value = this.track.getChannel().getPhaser();
+			this.scalePhaser.setSelection( ( value) );
+		}
+		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.TREMOLO) != 0){
+			int value = this.track.getChannel().getTremolo();
+			this.scaleTremolo.setSelection( ( value) );
+		}
+		if((type & TGMixer.CHANNEL) != 0){
+			this.mixerChannel.updateItems(true);
+		}
+	}
+	
+	public void loadProperties(){
+		this.checkSolo.setText(TuxGuitar.getProperty("mixer.track.solo"));
+		this.checkMute.setText(TuxGuitar.getProperty("mixer.track.mute"));
+		this.volumeValueTitleLabel.setText(TuxGuitar.getProperty("mixer.channel.volume") + ":");
+		
+		this.scaleVolume.setText(TuxGuitar.getProperty("mixer.channel.volume"));
+		this.scaleBalance.setText(TuxGuitar.getProperty("mixer.channel.balance"));
+		this.scaleChorus.setText(TuxGuitar.getProperty("mixer.channel.chorus"));
+		this.scaleReverb.setText(TuxGuitar.getProperty("mixer.channel.reverb"));
+		this.scalePhaser.setText(TuxGuitar.getProperty("mixer.channel.phaser"));
+		this.scaleTremolo.setText(TuxGuitar.getProperty("mixer.channel.tremolo"));
+		
+		this.mixerChannel.updateItems(true);
+	}
+	
+	public void updateItems(){
+		this.checkSolo.setSelection(this.track.isSolo());
+		this.checkMute.setSelection(this.track.isMute());
+		this.mixerChannel.updateItems(false);
+	}
+	
+	public TGTrack getTrack(){
+		return this.track;
+	}
+	
+	public TGMixer getMixer(){
+		return this.mixer;
+	}
+	
+	protected void updateChannelValue(int type, int value){
+		if( (type & TGMixer.VOLUME) != 0 ){
+			TGMixerTrack.this.track.getChannel().setVolume( (short)value );
+		}
+		else if( (type & TGMixer.BALANCE) != 0 ){
+			TGMixerTrack.this.track.getChannel().setBalance( (short)value );
+		}
+		else if( (type & TGMixer.CHORUS) != 0 ){
+			TGMixerTrack.this.track.getChannel().setChorus( (short)value );
+		}
+		else if( (type & TGMixer.REVERB) != 0 ){
+			TGMixerTrack.this.track.getChannel().setReverb( (short)value );
+		}
+		else if( (type & TGMixer.PHASER) != 0 ){
+			TGMixerTrack.this.track.getChannel().setPhaser( (short)value );
+		}
+		else if( (type & TGMixer.TREMOLO) != 0 ){
+			TGMixerTrack.this.track.getChannel().setTremolo( (short)value );
+		}
+		this.mixer.fireChanges(TGMixerTrack.this.track.getChannel(), type);
+	}
+	
+	private class TGMixerScale {
+		
+		private int type;
+		private int value;
+		private boolean inverted;
+		private Scale scale;
+		private String text;
+		protected UndoableTrackChannel undoable;
+		
+		public TGMixerScale(Composite parent, int style, int pageIncrement, int type, Object layoutData){
+			this.init(parent, style, pageIncrement, type, layoutData);
+		}
+		
+		public void init(Composite parent, int style, int pageIncrement, int type, Object layoutData){
+			this.scale = new Scale(parent, style);
+			this.scale.setMaximum(127);
+			this.scale.setMinimum(0);
+			this.scale.setIncrement(1);
+			this.scale.setPageIncrement(pageIncrement);
+			this.scale.setLayoutData(layoutData);
+			this.type = type;
+			this.value = -1;
+			this.inverted =  ((style & SWT.VERTICAL) != 0 );
+			this.addDefaultListeners();
+		}
+		
+		public void addDefaultListeners(){
+			this.scale.addListener(SWT.Selection, new Listener() {
+				public synchronized void handleEvent(Event event) {
+					TGMixerScale.this.updateValue();
+					TGMixerTrack.this.updateChannelValue(getType(), getSelection());
+				}
+			});
+			this.scale.addMouseListener(new MouseAdapter() {
+				public void mouseDown(MouseEvent arg0) {
+					TGMixerScale.this.undoable = UndoableTrackChannel.startUndo();
+				}
+				public void mouseUp(MouseEvent arg0) {
+					if(TGMixerScale.this.undoable != null){
+						TuxGuitar.instance().getUndoableManager().addEdit(TGMixerScale.this.undoable.endUndo());
+						TuxGuitar.instance().getFileHistory().setUnsavedFile();
+						TuxGuitar.instance().updateCache(true);
+						TGMixerScale.this.undoable = null;
+					}
+				}
+			});
+		}
+		
+		public void updateValue(){
+			this.setSelection( ( this.inverted ? 127 - this.scale.getSelection() : this.scale.getSelection() ) );
+		}
+		
+		public int getType(){
+			return this.type;
+		}
+		
+		public int getSelection(){
+			if(this.value < 0){
+				this.updateValue();
+			}
+			return this.value;
+		}
+		
+		public void setSelection(int value){
+			if(value != this.value){
+				this.value = value;
+				this.scale.setSelection( ( this.inverted ? 127 - this.value : this.value ) );
+				this.updateToolTipValue();
+			}
+		}
+		
+		public void updateToolTipValue(){
+			if(this.text != null){
+				this.scale.setToolTipText( this.text + ": " + this.value );
+			}
+		}
+		
+		public void setText(String text){
+			this.text = text;
+			this.updateToolTipValue();
+		}
+		
+		public String getText(){
+			return this.text;
+		}
+	}
+	
+	private class TGMixerScalePopup extends TGMixerScale{
+		
+		private Shell shell;
+		private Composite composite;
+		private Button item;
+		
+		public TGMixerScalePopup(Composite parent, int style, int pageIncrement, int type, Object layoutData){
+			super(parent, style, pageIncrement, type, layoutData);
+		}
+		
+		public void init(Composite parent, int style, int pageIncrement, int type, Object layoutData){
+			this.shell = new Shell( parent.getShell(), SWT.NO_TRIM);
+			this.shell.setVisible(false);
+			this.shell.setLayout(getGridLayout());
+			this.shell.addShellListener(new ShellAdapter() {
+				public void shellDeactivated(ShellEvent e) {
+					hideShell();
+				}
+				public void shellClosed(ShellEvent e) {
+					e.doit = false;
+					hideShell();
+				}
+			});
+			
+			this.composite = new Composite(this.shell, SWT.BORDER);
+			this.composite.setLayout(getGridLayout());
+			this.composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+			
+			this.item = new Button(parent, SWT.PUSH);
+			this.item.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					showSelect();
+				}
+			});
+			
+			super.init(this.composite, style, pageIncrement, type, layoutData);
+		}
+		
+		private GridLayout getGridLayout(){
+			GridLayout layout = new GridLayout();
+			layout.horizontalSpacing = 0;
+			layout.verticalSpacing = 0;
+			layout.marginWidth = 0;
+			layout.marginHeight = 0;
+			layout.marginTop = 0;
+			layout.marginBottom = 0;
+			layout.marginLeft = 0;
+			layout.marginHeight = 0;
+			return layout;
+		}
+		
+		public void updateToolTipValue(){
+			super.updateToolTipValue();
+			if(this.getText() != null){
+				this.item.setToolTipText( this.getText() + ": " + this.getSelection() );
+			}
+		}
+		
+		public void setText(String text){
+			super.setText(text);
+			if(this.getText() != null && this.getText().length() > 0){
+				this.item.setText( this.getText().substring(0,1) );
+			}
+		}
+		
+		public void showSelect() {
+			if(!this.shell.isVisible()){
+				Rectangle bounds = this.item.getBounds();
+				Point location = this.item.getParent().toDisplay(new Point(bounds.x, bounds.y));
+				
+				this.shell.pack();
+				this.shell.setLocation( (location.x + (bounds.width / 2)) - (this.shell.getSize().x / 2), location.y + bounds.height);
+				this.shell.setVisible(true);
+				this.shell.setActive();
+			}
+		}
+		
+		public void hideShell() {
+			this.shell.setVisible(false);
+		}
+	}
+}
+*/
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/mixer/TGMixerTrackChannel.java b/TuxGuitar/src/org/herac/tuxguitar/app/mixer/TGMixerTrackChannel.java
new file mode 100644
index 0000000..5ca3d1e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/mixer/TGMixerTrackChannel.java
@@ -0,0 +1,208 @@
+/*
+package org.herac.tuxguitar.app.mixer;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.undoables.track.UndoableTrackChannel;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class TGMixerTrackChannel {
+	
+	private TGMixerTrack mixer;
+	protected Combo normalChannel;
+	protected Combo effectChannel;
+	protected ChannelList normalChannels;
+	protected ChannelList effectChannels;
+	
+	public TGMixerTrackChannel(TGMixerTrack mixer){
+		this.mixer = mixer;
+	}
+	
+	protected TGTrack getTrack(){
+		return this.mixer.getTrack();
+	}
+	
+	protected TGChannel getChannel(){
+		return this.mixer.getTrack().getChannel();
+	}
+	
+	public void init(Composite parent){
+		this.normalChannels = new ChannelList();
+		this.normalChannel = new Combo(parent,SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.normalChannel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		this.effectChannels = new ChannelList();
+		this.effectChannel = new Combo(parent,SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.effectChannel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+		
+		this.normalChannel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				UndoableTrackChannel undoable = UndoableTrackChannel.startUndo();
+				
+				TGChannel channel = getTrack().getChannel();
+				boolean[] usedChannels = TuxGuitar.instance().getSongManager().getUsedChannels();
+				int idx = TGMixerTrackChannel.this.normalChannels.getChannel(TGMixerTrackChannel.this.normalChannel.getSelectionIndex());
+				if(!usedChannels[idx]){
+					channel.setChannel((short)idx);
+					channel.setEffectChannel(channel.getChannel());
+				}else{
+					TuxGuitar.instance().getSongManager().getUsedChannel(idx).copy(channel);
+				}
+				fireChannelChange(channel);
+				
+				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				TuxGuitar.instance().getTable().fireUpdate(false);
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		
+		this.effectChannel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				UndoableTrackChannel undoable = UndoableTrackChannel.startUndo();
+				
+				TGChannel channel = getTrack().getChannel();
+				int idx = TGMixerTrackChannel.this.effectChannels.getChannel(TGMixerTrackChannel.this.effectChannel.getSelectionIndex());
+				channel.setEffectChannel((short)idx);
+				fireChannelChange(channel);
+				
+				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
+				TuxGuitar.instance().getFileHistory().setUnsavedFile();
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		
+		this.updateItems(true);
+	}
+	
+	public void updateItems(boolean reload){
+		if(reload){
+			this.updateNormalChannel();
+			this.updateEffectChannel();
+		}
+		this.normalChannel.setEnabled(!TuxGuitar.instance().getPlayer().isRunning());
+		this.effectChannel.setEnabled(!TuxGuitar.instance().getPlayer().isRunning());
+	}
+	
+	private void updateNormalChannel(){
+		this.normalChannel.removeAll();
+		this.normalChannels.clear();
+		
+		boolean[] usedChannels = TuxGuitar.instance().getSongManager().getUsedChannels();
+		boolean[] usedEffectChannels = TuxGuitar.instance().getSongManager().getUsedEffectChannels();
+		if(getChannel().isPercussionChannel()){
+			this.normalChannel.add(Integer.toString(TGChannel.DEFAULT_PERCUSSION_CHANNEL));
+			this.normalChannel.select(0);
+			this.normalChannels.addChannel(0,0);
+		}else{
+			int itemIndex = 0;
+			for(int i = 0;i < usedChannels.length;i++){
+				if(!TGChannel.isPercussionChannel(i)){
+					if(!usedEffectChannels[i] || (usedEffectChannels[i] && usedChannels[i]) || (getChannel().getChannel() == i && getChannel().getEffectChannel() == getChannel().getChannel())){
+						String itemName = new String();
+						if(usedChannels[i] && (getChannel().getChannel() != i || TuxGuitar.instance().getSongManager().countTracksForChannel(i) > 1)){
+							itemName = i + " " + TuxGuitar.getProperty("mixer.channel.link");
+						}else{
+							itemName =  i + " " + TuxGuitar.getProperty("mixer.channel.free");
+						}
+						this.normalChannel.add(itemName);
+						
+						if(i == getChannel().getChannel()){
+							this.normalChannel.select(itemIndex);
+						}
+						this.normalChannels.addChannel(itemIndex,i);
+						itemIndex ++;
+					}
+				}
+			}
+		}
+	}
+	
+	private void updateEffectChannel(){
+		this.effectChannel.removeAll();
+		this.effectChannels.clear();
+		
+		boolean[] usedChannels = TuxGuitar.instance().getSongManager().getUsedChannels();
+		boolean[] usedEffectChannels = TuxGuitar.instance().getSongManager().getUsedEffectChannels();
+		if(getChannel().isPercussionChannel()){
+			this.effectChannel.add(Integer.toString(TGChannel.DEFAULT_PERCUSSION_CHANNEL));
+			this.effectChannel.select(0);
+			this.effectChannels.addChannel(0,0);
+		}else{
+			int itemIndex = 0;
+			for(int i = 0;i < usedEffectChannels.length;i++){
+				if(!TGChannel.isPercussionChannel(i)){
+					if((!usedEffectChannels[i] || getChannel().getEffectChannel() == i) && (!usedChannels[i] || i == getChannel().getChannel())){
+						this.effectChannel.add(Integer.toString(i));
+						
+						if(i == getChannel().getEffectChannel()){
+							this.effectChannel.select(itemIndex);
+						}
+						this.effectChannels.addChannel(itemIndex,i);
+						itemIndex ++;
+					}
+				}
+			}
+		}
+	}
+	
+	public void fireChannelChange(TGChannel channel){
+		this.mixer.getMixer().fireChanges(channel,TGMixer.CHANNEL);
+	}
+	
+	private class ChannelList{
+		private List channelIndexs;
+		
+		public ChannelList(){
+			this.channelIndexs = new ArrayList();
+		}
+		
+		public void addChannel(int index,int channel){
+			this.channelIndexs.add(new ChannelIndex(index,channel));
+		}
+		
+		public int getChannel(int index){
+			Iterator it = this.channelIndexs.iterator();
+			while (it.hasNext()) {
+				ChannelIndex channelIndex = (ChannelIndex) it.next();
+				if(index == channelIndex.getIndex()){
+					return channelIndex.getChannel();
+				}
+			}
+			return -1;
+		}
+		
+		public void clear(){
+			this.channelIndexs.clear();
+		}
+	}
+	
+	private class ChannelIndex{
+		private int index;
+		private int channel;
+		
+		public ChannelIndex(int index,int channel){
+			this.index = index;
+			this.channel = channel;
+		}
+		
+		public int getChannel() {
+			return this.channel;
+		}
+		
+		public int getIndex() {
+			return this.index;
+		}
+	}
+}
+*/
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintController.java b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintController.java
new file mode 100644
index 0000000..282607a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintController.java
@@ -0,0 +1,103 @@
+package org.herac.tuxguitar.app.printer;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.system.config.TGConfigManager;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.TGController;
+import org.herac.tuxguitar.graphics.control.TGLayoutStyles;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+public class PrintController implements TGController {
+	
+	private static final int DEFAULT_SCORE_LINE_SPACING = 7;
+	private static final int DEFAULT_STRING_SPACING = 8;
+	private static final int DEFAULT_HORIZONTAL_SPACING = 15;
+	private static final int MIN_SCORE_TAB_SPACING =  15;
+	private static final int DEFAULT_TRACK_SPACING = 5;
+	private static final int DEFAULT_FIRST_TRACK_SPACING = DEFAULT_TRACK_SPACING;
+	private static final int DEFAULT_MIN_BUFFER_SEPARATOR = 15;
+	private static final int DEFAULT_MIN_TOP_SPACING = 20;
+	private static final int CHORD_FRET_INDEX_SPACING = 8;
+	private static final int CHORD_STRING_SPACING = 4;
+	private static final int CHORD_FRET_SPACING = 5;
+	
+	private TGSongManager songManager;
+	private TGResourceFactory resourceFactory;
+	
+	public PrintController(TGSongManager songManager, TGResourceFactory resourceFactory){
+		this.songManager = songManager;
+		this.resourceFactory = resourceFactory;
+	}
+	
+	public TGSongManager getSongManager() {
+		return this.songManager;
+	}
+	
+	public TGResourceFactory getResourceFactory(){
+		return this.resourceFactory;
+	}
+	
+	public int getTrackSelection() {
+		return -1;
+	}
+	
+	public boolean isRunning(TGBeat beat) {
+		return false;
+	}
+	
+	public boolean isRunning(TGMeasure measure) {
+		return false;
+	}
+	
+	public boolean isLoopSHeader(TGMeasureHeader measureHeader) {
+		return false;
+	}
+	
+	public boolean isLoopEHeader(TGMeasureHeader measureHeader) {
+		return false;
+	}
+	
+	public void configureStyles(TGLayoutStyles styles){
+		TGConfigManager config = TuxGuitar.instance().getConfig();
+		
+		styles.setBufferEnabled(false);
+		styles.setFirstMeasureSpacing(DEFAULT_HORIZONTAL_SPACING);
+		styles.setMinBufferSeparator(DEFAULT_MIN_BUFFER_SEPARATOR);
+		styles.setMinTopSpacing(DEFAULT_MIN_TOP_SPACING);
+		styles.setMinScoreTabSpacing(MIN_SCORE_TAB_SPACING);
+		styles.setScoreLineSpacing(DEFAULT_SCORE_LINE_SPACING);
+		styles.setFirstTrackSpacing(DEFAULT_FIRST_TRACK_SPACING);
+		styles.setTrackSpacing(DEFAULT_TRACK_SPACING);
+		styles.setStringSpacing(DEFAULT_STRING_SPACING);
+		styles.setChordFretIndexSpacing(CHORD_FRET_INDEX_SPACING);
+		styles.setChordStringSpacing(CHORD_STRING_SPACING);
+		styles.setChordFretSpacing(CHORD_FRET_SPACING);
+		styles.setChordNoteSize(3);
+		styles.setRepeatEndingSpacing(20);
+		styles.setTextSpacing(15);
+		styles.setMarkerSpacing(15);
+		styles.setDivisionTypeSpacing(10);
+		styles.setEffectSpacing(8);
+		
+		styles.setDefaultFont(config.getFontModelConfigValue(TGConfigKeys.FONT_PRINTER_DEFAULT));
+		styles.setNoteFont(config.getFontModelConfigValue(TGConfigKeys.FONT_PRINTER_NOTE));
+		styles.setTimeSignatureFont(config.getFontModelConfigValue(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE));
+		styles.setLyricFont(config.getFontModelConfigValue(TGConfigKeys.FONT_PRINTER_LYRIC));
+		styles.setTextFont(config.getFontModelConfigValue(TGConfigKeys.FONT_PRINTER_TEXT));
+		styles.setGraceFont(config.getFontModelConfigValue(TGConfigKeys.FONT_PRINTER_GRACE));
+		styles.setChordFont(config.getFontModelConfigValue(TGConfigKeys.FONT_PRINTER_CHORD));
+		styles.setChordFretFont(config.getFontModelConfigValue(TGConfigKeys.FONT_CHORD_FRET));
+		styles.setMarkerFont(config.getFontModelConfigValue(TGConfigKeys.FONT_MARKER));
+		styles.setBackgroundColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_BACKGROUND));
+		styles.setLineColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_LINE));
+		styles.setScoreNoteColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_SCORE_NOTE));
+		styles.setTabNoteColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_TAB_NOTE));
+		styles.setPlayNoteColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_PLAY_NOTE));
+		styles.setLoopSMarkerColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_LOOP_S_MARKER));
+		styles.setLoopEMarkerColor(config.getColorModelConfigValue(TGConfigKeys.COLOR_LOOP_E_MARKER));
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintDocument.java b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintDocument.java
new file mode 100644
index 0000000..3732a25
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintDocument.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.app.printer;
+
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+
+public interface PrintDocument{
+	
+	public void start();
+	
+	public void finish();
+	
+	public void pageStart();
+	
+	public void pageFinish();
+	
+	public boolean isPaintable(int page);
+	
+	public TGPainter getPainter();
+	
+	public TGRectangle getBounds();
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintLayout.java b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintLayout.java
new file mode 100644
index 0000000..902ba60
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintLayout.java
@@ -0,0 +1,462 @@
+/*
+ * Created on 04-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.printer;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGFont;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+import org.herac.tuxguitar.graphics.TGResourceFactory;
+import org.herac.tuxguitar.graphics.control.TGChordImpl;
+import org.herac.tuxguitar.graphics.control.TGController;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.graphics.control.TGLyricImpl;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackSpacing;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class PrintLayout extends TGLayout{
+	
+	private PrintStyles styles;
+	private PrintDocument document;
+	private int page;
+	
+	private TGFont songNameFont;
+	private TGFont trackNameFont;
+	private TGFont songAuthorFont;
+	
+	public PrintLayout(TGController controller,PrintStyles styles){
+		super(controller,( styles.getStyle() | DISPLAY_COMPACT ) );
+		this.styles = styles;
+	}
+	
+	public int getMode(){
+		return 0;
+	}
+	
+	public void makeDocument(PrintDocument document){
+		this.page = 0;
+		this.document = document;
+		this.makeDocument();
+	}
+	
+	private void makeDocument(){
+		this.document.start();
+		
+		this.openPage();
+		paintHeader(this.document.getPainter());
+		paintSong(this.document.getPainter(),null,this.document.getBounds().getX(), ( this.document.getBounds().getY() + Math.round(80.0f * getFontScale() ) ) );
+		paintFooter(this.document.getPainter());
+		this.closePage();
+		
+		this.document.finish();
+	}
+	
+	public void paintSong(TGPainter painter,TGRectangle clientArea,int fromX,int fromY) {
+		this.setWidth(0);
+		this.setHeight(0);
+		
+		int style = getStyle();
+		int posY = fromY + getFirstTrackSpacing();
+		int height = getFirstTrackSpacing();
+		int lineHeight = 0;
+		
+		TGTrackImpl track = (TGTrackImpl)getSongManager().getTrack(this.styles.getTrackNumber());
+		((TGLyricImpl)track.getLyrics()).start(getSkippedBeats(track));
+		
+		TGTrackSpacing ts = new TGTrackSpacing(this) ;
+		TempLine line = getTempLines(track,( this.styles.getFromMeasure() - 1 ),ts);
+		while(!line.measures.isEmpty()){
+			
+			ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0?( (getScoreLineSpacing() * 5) ):0));
+			if((style & DISPLAY_SCORE) != 0){
+				ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, Math.abs(line.minY));
+				if(line.maxY > track.getScoreHeight()){
+					ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (line.maxY - track.getScoreHeight()) );
+				}
+			}
+			if((style & DISPLAY_TABLATURE) != 0){
+				ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(line.minY), getStringSpacing()) ));
+				ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ?  track.getTabHeight() + getStringSpacing() + 1 : Math.max( line.maxY, track.getTabHeight() + getStringSpacing() + 1) ));
+			}
+			ts.setSize(TGTrackSpacing.POSITION_LYRIC,10);
+			checkDefaultSpacing(ts);
+			
+			lineHeight = ts.getSize();
+			//Verifico si entra en la pagina actual
+			if((posY + lineHeight + getTrackSpacing()) > (this.document.getBounds().getY() + getMaxHeight())){
+				this.paintFooter(painter);
+				this.closePage();
+				this.openPage();
+				posY = this.document.getBounds().getY() + getFirstTrackSpacing();
+			}
+			
+			//pinto la linea
+			paintLine(track,line,painter,fromX,posY,ts);
+			
+			posY += lineHeight + getTrackSpacing();
+			height += lineHeight + getTrackSpacing();
+			
+			ts = new TGTrackSpacing(this) ;
+			line = getTempLines(track,( line.lastIndex + 1 ),ts);
+		}
+		this.setHeight(height);
+	}
+	
+	public void paintHeader(TGPainter painter){
+		if(this.document.isPaintable(this.page) ){
+			int x = this.document.getBounds().getX();
+			int y = this.document.getBounds().getY();
+			String songName = getSongManager().getSong().getName();
+			String songAuthor = getSongManager().getSong().getAuthor();
+			String trackName = "(" + getSongManager().getTrack(this.styles.getTrackNumber()).getName() + ")";
+			
+			if(songName == null || songName.length() == 0){
+				songName = TuxGuitar.getProperty("print-header.default-song-name");
+			}
+			if(songAuthor == null || songAuthor.length() == 0){
+				songAuthor = TuxGuitar.getProperty("print-header.default-song-author");
+			}
+			painter.setFont(getSongNameFont(painter));
+			painter.drawString(songName,(x + getCenter(painter,songName)),y);
+			painter.setFont(getTrackNameFont(painter));
+			painter.drawString(trackName,(x + getCenter(painter,trackName)),(y + Math.round(30.0f * getFontScale())));
+			painter.setFont(getSongAuthorFont(painter));
+			painter.drawString(songAuthor,(x + getRight(painter,songAuthor)),(y + Math.round(50.0f * getFontScale())));
+		}
+	}
+	
+	private void paintFooter(TGPainter painter){
+		if(this.document.isPaintable(this.page) ){
+			int x = this.document.getBounds().getX();
+			int y = this.document.getBounds().getY();
+			String pageNumber = Integer.toString(this.page);
+			
+			painter.setBackground(getResources().getColorWhite());
+			painter.setForeground(getResources().getColorBlack());
+			painter.drawString(pageNumber,(x + getRight(painter,pageNumber)),(y + getBottom(painter,pageNumber)));
+		}
+	}
+	
+	public void paintLine(TGTrackImpl track,TempLine line,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts) {
+		if(this.document.isPaintable(this.page) ){
+			int posX = fromX;
+			int posY = fromY;
+			int width = 0;
+			
+			int measureSpacing = 0;
+			if(line.fullLine){
+				int diff = ( getMaxWidth() - line.tempWith);
+				if(diff != 0 && line.measures.size() > 0){
+					measureSpacing = diff / line.measures.size();
+				}
+			}
+			
+			for(int i = 0;i < line.measures.size();i ++){
+				int index = ((Integer)line.measures.get(i)).intValue();
+				TGMeasureImpl currMeasure = (TGMeasureImpl)track.getMeasure(index);
+				
+				//asigno la posicion dentro del compas
+				currMeasure.setPosX(posX);
+				currMeasure.setPosY(posY);
+				currMeasure.setTs(ts);
+				
+				((TGLyricImpl)track.getLyrics()).setCurrentMeasure(currMeasure);
+				
+				currMeasure.setFirstOfLine(i == 0);
+				
+				paintMeasure(currMeasure,painter,measureSpacing);
+				((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,currMeasure,posX, posY);
+				
+				int measureWidth = ( currMeasure.getWidth(this) + currMeasure.getSpacing() );
+				posX += measureWidth;
+				width += measureWidth;
+			}
+			this.setWidth(Math.max(getWidth(),width));
+		}
+	}
+	
+	private void openPage(){
+		this.page ++;
+		if(this.document.isPaintable(this.page)){
+			this.document.pageStart();
+		}
+	}
+	
+	private void closePage(){
+		if(this.document.isPaintable(this.page)){
+			this.document.pageFinish();
+		}
+	}
+	
+	private int getCenter(TGPainter painter,String text){
+		return ((getMaxWidth() - painter.getFMWidth(text)) / 2);
+	}
+	
+	private int getRight(TGPainter painter,String text){
+		return ((getMaxWidth() - painter.getFMWidth(text)));
+	}
+	
+	private int getBottom(TGPainter painter,String text){
+		return ((getMaxHeight() - painter.getFMHeight()));
+	}
+	
+	private TempLine getTempLines(TGTrack track,int fromIndex,TGTrackSpacing ts) {
+		TempLine line = new TempLine();
+		int measureCount = track.countMeasures();
+		for (int measureIdx = fromIndex; measureIdx < measureCount; measureIdx++) {
+			TGMeasureImpl measure= (TGMeasureImpl) track.getMeasure(measureIdx);
+			if( measure.getNumber() >= this.styles.getFromMeasure() && measure.getNumber() <= this.styles.getToMeasure()){
+				
+				//verifico si tengo que bajar de linea
+				if((line.tempWith + measure.getWidth(this)) >=  getMaxWidth() && !line.measures.isEmpty()){
+					line.fullLine = true;
+					return line;
+				}
+				line.tempWith +=  measure.getWidth(this);
+				line.maxY = (measure.getMaxY() > line.maxY)?measure.getMaxY():line.maxY;
+				line.minY = (measure.getMinY() < line.minY)?measure.getMinY():line.minY;
+				
+				line.addMeasure(measureIdx);
+				measure.registerSpacing(this,ts);
+			}
+		}
+		
+		return line;
+	}
+	
+	private int getSkippedBeats(TGTrack track) {
+		int beats = 0;
+		
+		for (int i = 0; i < (this.styles.getFromMeasure() - 1); i++) {
+			TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure(i);
+			beats += measure.getNotEmptyBeats();
+		}
+		return beats;
+	}
+	
+	public boolean isPlayModeEnabled(){
+		return false;
+	}
+	
+	public void setLineStyle(TGPainter painter){
+		painter.setLineWidth(1);
+		painter.setForeground( getDarkColor( getResources().getLineColor() ) );
+	}
+	
+	public void setMeasureNumberStyle(TGPainter painter){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setBackground(getResources().getColorWhite());
+		painter.setForeground(getDarkColor(getResources().getColorRed()));
+	}
+	
+	public void setDivisionsStyle(TGPainter painter, boolean fill){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setBackground( (fill ? getResources().getColorBlack() :getResources().getColorWhite() ));
+		painter.setForeground(getResources().getColorBlack());
+	}
+	
+	public void setTempoStyle(TGPainter painter, boolean fontStyle){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground( ( fontStyle ? getResources().getColorWhite() : getResources().getColorBlack() ));
+	}
+	
+	public void setTripletFeelStyle(TGPainter painter, boolean fontStyle){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setForeground(getResources().getColorBlack());
+		painter.setBackground( ( fontStyle ? getResources().getColorWhite() : getResources().getColorBlack() ));
+	}
+	
+	public void setTabNoteStyle(TGPainter painter,boolean playMode){
+		painter.setBackground( getResources().getColorWhite() );
+		painter.setForeground( getDarkColor(getResources().getTabNoteColor()) );
+		painter.setFont(getResources().getNoteFont());
+	}
+	
+	public void setTabNoteFooterStyle(TGPainter painter){
+		painter.setForeground( getDarkColor(getResources().getTabNoteColor()));
+		painter.setBackground( getDarkColor(getResources().getTabNoteColor()));
+	}
+	
+	public void setTabEffectStyle(TGPainter painter){
+		painter.setForeground( getDarkColor(getResources().getTabNoteColor()));
+		painter.setBackground( getDarkColor(getResources().getTabNoteColor()));
+	}
+	
+	public void setScoreNoteStyle(TGPainter painter,boolean playing){
+		painter.setBackground( getDarkColor(getResources().getScoreNoteColor()) );
+		painter.setForeground( getDarkColor(getResources().getScoreNoteColor()) );
+	}
+	
+	public void setScoreNoteFooterStyle(TGPainter painter){
+		painter.setForeground( getDarkColor(getResources().getScoreNoteColor()) );
+		painter.setBackground( getDarkColor(getResources().getScoreNoteColor()) );
+	}
+	
+	public void setScoreEffectStyle(TGPainter painter){
+		painter.setForeground( getDarkColor(getResources().getScoreNoteColor()) );
+		painter.setBackground( getDarkColor(getResources().getScoreNoteColor()) );
+	}
+	
+	public void setTimeSignatureStyle(TGPainter painter){
+		painter.setFont(getResources().getTimeSignatureFont());
+		painter.setBackground( getResources().getColorWhite() );
+		painter.setForeground( getResources().getColorBlack() );
+	}
+	
+	public void setTabGraceStyle(TGPainter painter){
+		painter.setFont(getResources().getGraceFont());
+		painter.setBackground( getResources().getColorWhite() );
+		painter.setForeground( getDarkColor(getResources().getTabNoteColor()) );
+	}
+	
+	public void setLyricStyle(TGPainter painter,boolean playMode){
+		painter.setFont(getResources().getLyricFont());
+		painter.setBackground( getResources().getColorWhite() );
+		painter.setForeground(getResources().getColorBlack());
+	}
+	
+	public void setMarkerStyle(TGPainter painter, TGColor color){
+		painter.setFont(getResources().getMarkerFont());
+		painter.setBackground(getResources().getColorWhite());
+		painter.setForeground(getDarkColor(color));
+	}
+	
+	public void setTextStyle(TGPainter painter){
+		painter.setFont(getResources().getTextFont());
+		painter.setBackground( getResources().getColorWhite() );
+		painter.setForeground( getResources().getColorBlack() );
+	}
+	
+	public void setOfflineEffectStyle(TGPainter painter){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setBackground( getResources().getColorWhite() );
+		painter.setForeground( getResources().getColorBlack() );
+	}
+	
+	public void setDivisionTypeStyle(TGPainter painter){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setBackground( getResources().getColorWhite() );
+		painter.setForeground( getResources().getColorBlack() );
+	}
+	
+	public void setRepeatEndingStyle(TGPainter painter){
+		painter.setFont(getResources().getDefaultFont());
+		painter.setBackground( getResources().getColorWhite() );
+		painter.setForeground( getResources().getColorBlack() );
+	}
+	
+	public void setChordStyle(TGChordImpl chord){
+		chord.setStyle(getStyle());
+		chord.setFont(getResources().getChordFont());
+		chord.setForegroundColor(getResources().getColorBlack());
+		chord.setBackgroundColor(getResources().getColorWhite());
+		chord.setColor(getDarkColor(getResources().getLineColor()));
+		chord.setNoteColor(getDarkColor(getResources().getTabNoteColor()));
+		chord.setTonicColor(getDarkColor(getResources().getTabNoteColor()));
+		chord.setFretSpacing(getChordFretSpacing());
+		chord.setStringSpacing(getChordStringSpacing());
+		chord.setNoteSize(getChordNoteSize());
+		chord.setFirstFretSpacing(getChordFretIndexSpacing());
+		chord.setFirstFretFont(getResources().getChordFretFont());
+	}
+	
+	public TGColor getDarkColor( TGColor color ) {
+		return ( this.styles.isBlackAndWhite() ? getResources().getColorBlack() : color );
+	}
+	
+	public int getMaxWidth(){
+		return (this.document.getBounds().getWidth() - this.document.getBounds().getX() - 10);
+	}
+	
+	public int getMaxHeight(){
+		return (this.document.getBounds().getHeight() - this.document.getBounds().getY() - 10);
+	}
+	
+	public boolean isFirstMeasure(TGMeasureHeader mh){
+		return (mh.getNumber() == this.styles.getFromMeasure());
+	}
+	
+	public boolean isLastMeasure(TGMeasureHeader mh){
+		return (mh.getNumber() == this.styles.getToMeasure());
+	}
+	
+	/*
+	private int getScaledValue(float scale, int value){
+		return getScaledValue(scale, value,1);
+	}
+	
+	private int getScaledValue(float scale, int value, int minimum){
+		float scaledValue = ( value * scale );
+		return Math.max( Math.round( scaledValue ) , minimum );
+	}
+	*/
+	public TGFont getSongNameFont( TGResourceFactory factory ){
+		if( factory != null && ( this.songNameFont == null || this.songNameFont.isDisposed() ) ){
+			this.songNameFont = factory.createFont(this.getResources().getDefaultFont().getName(),Math.round(16.0f * getFontScale()), true, false);
+		}
+		return this.songNameFont;
+	}
+	
+	public TGFont getSongAuthorFont( TGResourceFactory factory ){
+		if( factory != null && ( this.songAuthorFont == null || this.songAuthorFont.isDisposed() ) ){
+			this.songAuthorFont = factory.createFont(this.getResources().getDefaultFont().getName(),Math.round(8.0f * getFontScale()), true, false);
+		}
+		return this.songAuthorFont;
+	}
+	
+	public TGFont getTrackNameFont( TGResourceFactory factory ){
+		if( factory != null && ( this.trackNameFont == null || this.trackNameFont.isDisposed() ) ){
+			this.trackNameFont = factory.createFont(this.getResources().getDefaultFont().getName(),Math.round(8.0f * getFontScale()), true, false);
+		}
+		return this.trackNameFont;
+	}
+	
+	public void disposeLayout(){
+		super.disposeLayout();
+		if( this.songNameFont != null && !this.songNameFont.isDisposed() ){
+			this.songNameFont.dispose();
+		}
+		if( this.songAuthorFont != null && !this.songAuthorFont.isDisposed() ){
+			this.songAuthorFont.dispose();
+		}
+		if( this.trackNameFont != null && !this.trackNameFont.isDisposed() ){
+			this.trackNameFont.dispose();
+		}
+	}
+	
+	private class TempLine{
+		protected int tempWith;
+		protected int lastIndex;
+		protected boolean fullLine;
+		protected int maxY = 0;
+		protected int minY = 50;
+		protected List measures;
+		
+		public TempLine(){
+			this.measures = new ArrayList();
+		}
+		
+		protected void addMeasure(int index){
+			this.measures.add(new Integer(index));
+			this.lastIndex = index;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintPreview.java b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintPreview.java
new file mode 100644
index 0000000..a0b0522
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintPreview.java
@@ -0,0 +1,190 @@
+package org.herac.tuxguitar.app.printer;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGImageImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingUtil;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.TGImage;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.TGRectangle;
+
+public class PrintPreview{
+	private static final int SCROLL_INCREMENT = 50;
+	private static final int MARGIN_TOP = 20;
+	private static final int MARGIN_BOTTOM = 40;
+	private static final int MARGIN_LEFT = 50;
+	private static final int MARGIN_RIGHT = 20;
+	
+	protected Shell dialog;
+	protected Composite previewComposite;
+	protected Composite pageComposite;
+	protected Text currentText;
+	protected Button previous;
+	protected Button next;
+	protected TGRectangle bounds;
+	protected List pages;
+	protected int currentPage;
+	
+	public PrintPreview(List pages,TGRectangle bounds){
+		this.pages = pages;
+		this.bounds = bounds;
+	}
+	
+	public void showPreview(Shell parent){
+		this.dialog = DialogUtils.newDialog(parent,SWT.SHELL_TRIM | SWT.APPLICATION_MODAL );
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setText(TuxGuitar.getProperty("print.preview"));
+		
+		this.initToolBar();
+		this.initPreviewComposite();
+		this.changePage(0);
+		
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_MAXIMIZED | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private void initToolBar(){
+		Composite composite = new Composite(this.dialog,SWT.NONE);
+		composite.setLayout(new GridLayout(5,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
+		
+		this.previous = new Button(composite,SWT.ARROW | SWT.LEFT);
+		this.currentText = new Text(composite,SWT.BORDER);
+		this.currentText.setLayoutData(new GridData(25,SWT.DEFAULT));
+		this.next = new Button(composite,SWT.ARROW | SWT.RIGHT);
+		Label maxPages = new Label(composite,SWT.NONE);
+		
+		Button close = new Button(composite,SWT.PUSH);
+		close.setLayoutData(getButtonData());
+		
+		this.currentText.addKeyListener(new KeyAdapter() {
+			public void keyReleased(KeyEvent e) {
+				if(e.keyCode == KeyBindingUtil.ENTER){
+					try{
+						Integer number = new Integer(PrintPreview.this.currentText.getText());
+						changePage(number.intValue() - 1);
+					}catch(NumberFormatException exception){
+						changePage(PrintPreview.this.currentPage);
+					}
+				}
+			}
+		});
+		this.previous.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(PrintPreview.this.currentPage >= 0){
+					changePage(PrintPreview.this.currentPage - 1);
+				}
+			}
+		});
+		this.next.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				if(PrintPreview.this.currentPage >= 0){
+					changePage(PrintPreview.this.currentPage + 1);
+				}
+			}
+		});
+		close.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				PrintPreview.this.dialog.dispose();
+			}
+		});
+		maxPages.setText(TuxGuitar.getProperty("print.preview.page-of") + " " + this.pages.size());
+		close.setText(TuxGuitar.getProperty("close"));
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.RIGHT, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private void initPreviewComposite(){
+		this.previewComposite = new Composite(this.dialog,SWT.BORDER | SWT.V_SCROLL);
+		this.previewComposite.setLayout(new GridLayout());
+		this.previewComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.previewComposite.setBackground(this.previewComposite.getDisplay().getSystemColor(SWT.COLOR_GRAY));
+		this.previewComposite.setFocus();
+		this.pageComposite = new Composite(this.previewComposite,SWT.BORDER | SWT.DOUBLE_BUFFERED);
+		this.pageComposite.setLayout(new GridLayout());
+		this.pageComposite.setBackground(this.previewComposite.getDisplay().getSystemColor(SWT.COLOR_WHITE));
+		this.pageComposite.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				if(PrintPreview.this.currentPage >= 0){
+					updateScroll();
+					
+					int vScroll = PrintPreview.this.previewComposite.getVerticalBar().getSelection();
+					
+					TGImage page = new TGImageImpl((Image)PrintPreview.this.pages.get(PrintPreview.this.currentPage));
+					TGPainter painter = new TGPainterImpl(e.gc);
+					painter.drawImage(page, MARGIN_LEFT, MARGIN_TOP - vScroll);
+				}
+			}
+		});
+		GridData pageData = new GridData();
+		pageData.horizontalAlignment = SWT.CENTER;
+		pageData.verticalAlignment = SWT.CENTER;
+		pageData.grabExcessHorizontalSpace = true;
+		pageData.grabExcessVerticalSpace = true;
+		pageData.widthHint = (this.bounds.getWidth() - this.bounds.getX()) + (MARGIN_LEFT + MARGIN_RIGHT);
+		pageData.heightHint = (this.bounds.getHeight() - this.bounds.getY()) + (MARGIN_TOP + MARGIN_BOTTOM);
+		this.pageComposite.setLayoutData(pageData);
+		this.previewComposite.getVerticalBar().setIncrement(SCROLL_INCREMENT);
+		this.previewComposite.getVerticalBar().addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				PrintPreview.this.pageComposite.redraw();
+			}
+		});
+	}
+	
+	protected void updateScroll(){
+		ScrollBar vBar = this.previewComposite.getVerticalBar();
+		Rectangle client = this.pageComposite.getClientArea();
+		vBar.setMaximum((this.bounds.getHeight() - this.bounds.getY()) + (MARGIN_TOP + MARGIN_BOTTOM));
+		vBar.setThumb(Math.min((this.bounds.getHeight() - this.bounds.getY()) + (MARGIN_TOP + MARGIN_BOTTOM), client.height));
+	}
+	
+	protected void changePage(int index){
+		if(!this.pages.isEmpty()){
+			int pageCount = this.pages.size();
+			if(index >= 0 && index < pageCount){
+				this.currentPage = index;
+				this.currentText.setText(Integer.toString(index + 1));
+				this.pageComposite.redraw();
+			}else if(this.currentPage >= 0 && this.currentPage < pageCount){
+				this.currentText.setText(Integer.toString(this.currentPage + 1 ));
+			}
+			this.previous.setEnabled(this.currentPage > 0);
+			this.next.setEnabled((this.currentPage + 1) < pageCount);
+			this.previewComposite.getVerticalBar().setSelection(0);
+			this.previewComposite.setFocus();
+		}else{
+			this.currentText.setEnabled(false);
+			this.previous.setEnabled(false);
+			this.next.setEnabled(false);
+		}
+		
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintStyles.java b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintStyles.java
new file mode 100644
index 0000000..4d90070
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintStyles.java
@@ -0,0 +1,68 @@
+package org.herac.tuxguitar.app.printer;
+
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+public class PrintStyles {
+	
+	private int trackNumber;
+	
+	private int fromMeasure;
+	
+	private int toMeasure;
+	
+	private int style;
+	
+	private boolean blackAndWhite;
+	
+	public PrintStyles() {
+		this(-1,-1,-1,TGLayout.DISPLAY_TABLATURE, true);
+	}
+	
+	public PrintStyles(int trackNumber,int fromMeasure, int toMeasure, int style , boolean blackAndWhite) {
+		this.trackNumber = trackNumber;
+		this.fromMeasure = fromMeasure;
+		this.toMeasure = toMeasure;
+		this.style = style;
+		this.blackAndWhite = blackAndWhite;
+	}
+	
+	public int getFromMeasure() {
+		return this.fromMeasure;
+	}
+	
+	public void setFromMeasure(int fromMeasure) {
+		this.fromMeasure = fromMeasure;
+	}
+	
+	public int getStyle() {
+		return this.style;
+	}
+	
+	public void setStyle(int style) {
+		this.style = style;
+	}
+	
+	public int getToMeasure() {
+		return this.toMeasure;
+	}
+	
+	public void setToMeasure(int toMeasure) {
+		this.toMeasure = toMeasure;
+	}
+	
+	public int getTrackNumber() {
+		return this.trackNumber;
+	}
+	
+	public void setTrackNumber(int trackNumber) {
+		this.trackNumber = trackNumber;
+	}
+	
+	public boolean isBlackAndWhite() {
+		return this.blackAndWhite;
+	}
+	
+	public void setBlackAndWhite(boolean blackAndWhite) {
+		this.blackAndWhite = blackAndWhite;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintStylesDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintStylesDialog.java
new file mode 100644
index 0000000..77da557
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/printer/PrintStylesDialog.java
@@ -0,0 +1,190 @@
+package org.herac.tuxguitar.app.printer;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Spinner;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+
+public class PrintStylesDialog {
+
+	public static PrintStyles open(Shell shell) {
+		final PrintStyles styles = new PrintStyles();
+		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("options"));
+		
+		//------------------TRACK SELECTION------------------
+		Group track = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		track.setLayout(new GridLayout(2,false));
+		track.setLayoutData(getGroupData());
+		track.setText(TuxGuitar.getProperty("track"));
+		
+		Label trackLabel = new Label(track, SWT.NULL);
+		trackLabel.setText(TuxGuitar.getProperty("track"));
+		
+		final Combo tracks = new Combo(track, SWT.DROP_DOWN | SWT.READ_ONLY);
+		tracks.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){
+			tracks.add(TuxGuitar.instance().getSongManager().getTrack(number).getName());
+		}
+		tracks.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber() - 1);
+		
+		//------------------MEASURE RANGE------------------
+		Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		range.setLayout(new GridLayout(2,false));
+		range.setLayoutData(getGroupData());
+		range.setText(TuxGuitar.getProperty("print.range"));
+		
+		final int minSelection = 1;
+		final int maxSelection = TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders();
+		
+		Label fromLabel = new Label(range, SWT.NULL);
+		fromLabel.setText(TuxGuitar.getProperty("edit.from"));
+		final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
+		fromSpinner.setLayoutData(getSpinnerData());
+		fromSpinner.setMaximum(maxSelection);
+		fromSpinner.setMinimum(minSelection);
+		fromSpinner.setSelection(minSelection);
+		
+		Label toLabel = new Label(range, SWT.NULL);
+		toLabel.setText(TuxGuitar.getProperty("edit.to"));
+		final Spinner toSpinner = new Spinner(range, SWT.BORDER);
+		toSpinner.setLayoutData(getSpinnerData());
+		toSpinner.setMinimum(minSelection);
+		toSpinner.setMaximum(maxSelection);
+		toSpinner.setSelection(maxSelection);
+		
+		fromSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int fromSelection = fromSpinner.getSelection();
+				int toSelection = toSpinner.getSelection();
+				
+				if(fromSelection < minSelection){
+					fromSpinner.setSelection(minSelection);
+				}else if(fromSelection > toSelection){
+					fromSpinner.setSelection(toSelection);
+				}
+			}
+		});
+		toSpinner.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				int toSelection = toSpinner.getSelection();
+				int fromSelection = fromSpinner.getSelection();
+				if(toSelection < fromSelection){
+					toSpinner.setSelection(fromSelection);
+				}else if(toSelection > maxSelection){
+					toSpinner.setSelection(maxSelection);
+				}
+			}
+		});
+		//------------------CHECK OPTIONS--------------------
+		Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		options.setLayout(new GridLayout());
+		options.setLayoutData(getGroupData());
+		options.setText(TuxGuitar.getProperty("options"));
+		
+		final Button tablatureEnabled = new Button(options,SWT.CHECK);
+		tablatureEnabled.setText(TuxGuitar.getProperty("export.tablature-enabled"));
+		tablatureEnabled.setSelection(true);
+		
+		final Button scoreEnabled = new Button(options,SWT.CHECK);
+		scoreEnabled.setText(TuxGuitar.getProperty("export.score-enabled"));
+		scoreEnabled.setSelection(true);
+		
+		final Button chordNameEnabled = new Button(options,SWT.CHECK);
+		chordNameEnabled.setText(TuxGuitar.getProperty("export.chord-name-enabled"));
+		chordNameEnabled.setSelection(true);
+		
+		final Button chordDiagramEnabled = new Button(options,SWT.CHECK);
+		chordDiagramEnabled.setText(TuxGuitar.getProperty("export.chord-diagram-enabled"));
+		chordDiagramEnabled.setSelection(true);
+		
+		final Button blackAndWhite = new Button(options,SWT.CHECK);
+		blackAndWhite.setText(TuxGuitar.getProperty("export.black-and-white"));
+		blackAndWhite.setSelection(true);
+		
+		tablatureEnabled.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!tablatureEnabled.getSelection()){
+					scoreEnabled.setSelection(true);
+				}
+			}
+		});
+		scoreEnabled.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(!scoreEnabled.getSelection()){
+					tablatureEnabled.setSelection(true);
+				}
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				int style = 0;
+				style |= (scoreEnabled.getSelection() ? TGLayout.DISPLAY_SCORE : 0);
+				style |= (tablatureEnabled.getSelection() ? TGLayout.DISPLAY_TABLATURE : 0);
+				style |= (chordNameEnabled.getSelection() ? TGLayout.DISPLAY_CHORD_NAME : 0);
+				style |= (chordDiagramEnabled.getSelection() ? TGLayout.DISPLAY_CHORD_DIAGRAM : 0);
+				styles.setTrackNumber(tracks.getSelectionIndex() + 1);
+				styles.setFromMeasure(fromSpinner.getSelection());
+				styles.setToMeasure(toSpinner.getSelection());
+				styles.setBlackAndWhite(blackAndWhite.getSelection());
+				styles.setStyle(style);
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return ((styles.getTrackNumber() > 0)?styles:null);
+	}
+	
+	private static GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private static GridData getSpinnerData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 60;
+		return data;
+	}
+	
+	private static GridData getGroupData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 300;
+		return data;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigDefaults.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigDefaults.java
new file mode 100644
index 0000000..c3d455f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigDefaults.java
@@ -0,0 +1,136 @@
+/*
+ * Created on 27-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.system.config;
+
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.fretboard.FretBoardConfig;
+import org.herac.tuxguitar.app.editors.tab.edit.EditorKit;
+import org.herac.tuxguitar.graphics.control.TGLayout;
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesManager;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGConfigDefaults{
+	
+	public static final String RESOURCE = "config-defaults";
+	public static final String MODULE = "tuxguitar";
+	
+	private static final String DEFAULT_FONT_NAME = getDefaultFontName();
+	
+	public static TGProperties createDefaults(){
+		TGProperties properties = TGPropertiesManager.getInstance().createProperties();
+		TGConfigDefaults.loadProperties( properties );
+		TGPropertiesManager.getInstance().readProperties(properties, RESOURCE, MODULE);
+		
+		return properties;
+	}
+	
+	public static void loadProperties(TGProperties properties){
+		loadProperty(properties, TGConfigKeys.SKIN,"Lavender");
+		loadProperty(properties, TGConfigKeys.WINDOW_TITLE,"${appname} - ${filename}");
+		loadProperty(properties, TGConfigKeys.SHOW_SPLASH,true);
+		loadProperty(properties, TGConfigKeys.MAXIMIZED,false);
+		loadProperty(properties, TGConfigKeys.WIDTH,800);
+		loadProperty(properties, TGConfigKeys.HEIGHT,600);
+		loadProperty(properties, TGConfigKeys.SHOW_INSTRUMENTS,false);
+		loadProperty(properties, TGConfigKeys.SHOW_TRANSPORT,false);
+		loadProperty(properties, TGConfigKeys.SHOW_FRETBOARD,false);
+		loadProperty(properties, TGConfigKeys.SHOW_PIANO,false);
+		loadProperty(properties, TGConfigKeys.SHOW_MARKERS,false);
+		loadProperty(properties, TGConfigKeys.LAYOUT_MODE,TGLayout.MODE_VERTICAL);
+		loadProperty(properties, TGConfigKeys.LAYOUT_STYLE,(TGLayout.DISPLAY_TABLATURE | TGLayout.DISPLAY_SCORE | TGLayout.DISPLAY_COMPACT | TGLayout.DISPLAY_CHORD_DIAGRAM));
+		loadProperty(properties, TGConfigKeys.EDITOR_MOUSE_MODE,EditorKit.MOUSE_MODE_SELECTION);
+		loadProperty(properties, TGConfigKeys.EDITOR_NATURAL_KEY_MODE,true);
+		loadProperty(properties, TGConfigKeys.FONT_DEFAULT, (DEFAULT_FONT_NAME + ",6,0"));
+		loadProperty(properties, TGConfigKeys.FONT_NOTE, (DEFAULT_FONT_NAME + ",7,0"));
+		loadProperty(properties, TGConfigKeys.FONT_TIME_SIGNATURE, (DEFAULT_FONT_NAME + ",13,1"));
+		loadProperty(properties, TGConfigKeys.FONT_LYRIC, (DEFAULT_FONT_NAME + ",7,0"));
+		loadProperty(properties, TGConfigKeys.FONT_TEXT, (DEFAULT_FONT_NAME + ",8,0"));
+		loadProperty(properties, TGConfigKeys.FONT_CHORD, (DEFAULT_FONT_NAME + ",7,0"));
+		loadProperty(properties, TGConfigKeys.FONT_CHORD_FRET, (DEFAULT_FONT_NAME + ",5,0"));
+		loadProperty(properties, TGConfigKeys.FONT_GRACE, (DEFAULT_FONT_NAME + ",6,0"));
+		loadProperty(properties, TGConfigKeys.FONT_MARKER, (DEFAULT_FONT_NAME + ",7,0"));
+		loadProperty(properties, TGConfigKeys.FONT_PRINTER_DEFAULT, (DEFAULT_FONT_NAME + ",6,0"));
+		loadProperty(properties, TGConfigKeys.FONT_PRINTER_NOTE, (DEFAULT_FONT_NAME + ",6,0"));
+		loadProperty(properties, TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE, (DEFAULT_FONT_NAME + ",10,1"));
+		loadProperty(properties, TGConfigKeys.FONT_PRINTER_LYRIC, (DEFAULT_FONT_NAME + ",7,0"));
+		loadProperty(properties, TGConfigKeys.FONT_PRINTER_TEXT, (DEFAULT_FONT_NAME + ",8,0"));
+		loadProperty(properties, TGConfigKeys.FONT_PRINTER_CHORD, (DEFAULT_FONT_NAME + ",7,0"));
+		loadProperty(properties, TGConfigKeys.FONT_PRINTER_GRACE, (DEFAULT_FONT_NAME + ",6,0"));
+		loadProperty(properties, TGConfigKeys.FONT_ABOUT_DIALOG_TITLE, (DEFAULT_FONT_NAME + ",36,3"));
+		loadProperty(properties, TGConfigKeys.COLOR_BACKGROUND,"255,255,255");
+		loadProperty(properties, TGConfigKeys.COLOR_LINE,"214,214,214");
+		loadProperty(properties, TGConfigKeys.COLOR_SCORE_NOTE,"64,64,64");
+		loadProperty(properties, TGConfigKeys.COLOR_TAB_NOTE,"64,64,64");
+		loadProperty(properties, TGConfigKeys.COLOR_PLAY_NOTE,"255,0,0");
+		loadProperty(properties, TGConfigKeys.COLOR_CARET_1,"127,127,127");
+		loadProperty(properties, TGConfigKeys.COLOR_CARET_2,"165,42,42");
+		loadProperty(properties, TGConfigKeys.COLOR_LOOP_S_MARKER,"42,165,42");
+		loadProperty(properties, TGConfigKeys.COLOR_LOOP_E_MARKER,"165,42,42");
+		loadProperty(properties, TGConfigKeys.MAX_HISTORY_FILES,10);
+		loadProperty(properties, TGConfigKeys.MIN_SCORE_TABLATURE_SPACING,20);
+		loadProperty(properties, TGConfigKeys.SCORE_LINE_SPACING,8);
+		loadProperty(properties, TGConfigKeys.TAB_LINE_SPACING,10);
+		loadProperty(properties, TGConfigKeys.FIRST_TRACK_SPACING,20);
+		loadProperty(properties, TGConfigKeys.TRACK_SPACING,10);
+		loadProperty(properties, TGConfigKeys.LANGUAGE,"");
+		loadProperty(properties, TGConfigKeys.FRETBOARD_STRING_SPACING,20);
+		loadProperty(properties, TGConfigKeys.FRETBOARD_STYLE ,FretBoardConfig.DISPLAY_TEXT_SCALE);
+		loadProperty(properties, TGConfigKeys.FRETBOARD_DIRECTION ,FretBoardConfig.DIRECTION_RIGHT);
+		loadProperty(properties, TGConfigKeys.FRETBOARD_FONT, (DEFAULT_FONT_NAME + ",8,1"));
+		loadProperty(properties, TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,"0,0,0");
+		loadProperty(properties, TGConfigKeys.FRETBOARD_COLOR_STRING,"227,217,217");
+		loadProperty(properties, TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,"192,192,192");
+		loadProperty(properties, TGConfigKeys.FRETBOARD_COLOR_NOTE,"42,85,128");
+		loadProperty(properties, TGConfigKeys.FRETBOARD_COLOR_SCALE,"128,32,32");
+		loadProperty(properties, TGConfigKeys.PIANO_COLOR_KEY_NATURAL,"255,255,255");
+		loadProperty(properties, TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL,"0,0,0");
+		loadProperty(properties, TGConfigKeys.PIANO_COLOR_NOTE,"42,85,128");
+		loadProperty(properties, TGConfigKeys.PIANO_COLOR_SCALE,"128,32,32");
+		loadProperty(properties, TGConfigKeys.MATRIX_FONT, (DEFAULT_FONT_NAME + ",8,1"));
+		loadProperty(properties, TGConfigKeys.MATRIX_COLOR_FOREGROUND,"190,190,190");
+		loadProperty(properties, TGConfigKeys.MATRIX_COLOR_BORDER,"25,25,25");
+		loadProperty(properties, TGConfigKeys.MATRIX_COLOR_POSITION,"190,190,190");
+		loadProperty(properties, TGConfigKeys.MATRIX_COLOR_NOTE,"42,85,128");
+		loadProperty(properties, TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,"128,32,32");
+		loadProperty(properties, TGConfigKeys.MATRIX_COLOR_LINE_1,"255,255,255");
+		loadProperty(properties, TGConfigKeys.MATRIX_COLOR_LINE_2,"230,230,250");
+		loadProperty(properties, TGConfigKeys.MATRIX_COLOR_LINE_3,"173,216,230");
+		loadProperty(properties, TGConfigKeys.TABLE_AUTO_SIZE,true);
+		loadProperty(properties, TGConfigKeys.BROWSER_LINES_VISIBLE,true);
+	}
+	
+	private static void loadProperty(TGProperties properties, String key,String value){
+		properties.setValue(key,value);
+	}
+	
+	private static void loadProperty(TGProperties properties, String key,int value){
+		properties.setValue(key,Integer.toString(value));
+	}
+	
+	private static void loadProperty(TGProperties properties, String key,boolean value){
+		properties.setValue(key,Boolean.toString(value));
+	}
+	
+	private static String getDefaultFontName(){
+		Font font = TuxGuitar.instance().getDisplay().getSystemFont();
+		if( font != null ){
+			FontData[] fd = font.getFontData();
+			if(fd != null && fd.length > 0){
+				return fd[0].getName();
+			}
+		}
+		return new String();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigDefaultsPropertiesHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigDefaultsPropertiesHandler.java
new file mode 100644
index 0000000..6c77d2d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigDefaultsPropertiesHandler.java
@@ -0,0 +1,25 @@
+package org.herac.tuxguitar.app.system.config;
+
+import org.herac.tuxguitar.app.system.properties.TGResourcePropertiesReader;
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesException;
+import org.herac.tuxguitar.util.properties.TGPropertiesReader;
+
+public class TGConfigDefaultsPropertiesHandler implements TGPropertiesReader{
+	
+	private static final String DEFAULT_MODULE = "tuxguitar";
+	private static final String DEFAULT_RESOURCE_PREFIX = "";
+	private static final String DEFAULT_RESOURCE_SUFFIX = ".cfg";
+	
+	public void readProperties(TGProperties properties, String module) throws TGPropertiesException {
+		this.readDefaultProperties(properties, module);
+	}
+	
+	private void readDefaultProperties(TGProperties properties, String module) {
+		if( DEFAULT_MODULE.equals(module) ){
+			TGConfigDefaults.loadProperties(properties);
+		}
+		TGPropertiesReader tgPropertiesReader = new TGResourcePropertiesReader(DEFAULT_RESOURCE_PREFIX, DEFAULT_RESOURCE_SUFFIX);
+		tgPropertiesReader.readProperties(properties, module);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigEditor.java
new file mode 100644
index 0000000..9f632de
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigEditor.java
@@ -0,0 +1,324 @@
+/*
+ * Created on 17-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.system.config;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.system.config.items.LanguageOption;
+import org.herac.tuxguitar.app.system.config.items.MainOption;
+import org.herac.tuxguitar.app.system.config.items.Option;
+import org.herac.tuxguitar.app.system.config.items.SkinOption;
+import org.herac.tuxguitar.app.system.config.items.SoundOption;
+import org.herac.tuxguitar.app.system.config.items.StylesOption;
+import org.herac.tuxguitar.app.system.config.items.ToolBarsOption;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+import org.herac.tuxguitar.util.properties.TGProperties;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGConfigEditor{
+	
+	protected Shell dialog;
+	protected TGConfigManager config;
+	protected List options;
+	protected TGProperties defaults;
+	protected boolean accepted;
+	
+	protected List runnables;
+	
+	public TGConfigEditor() {
+		this.config = TuxGuitar.instance().getConfig();
+	}
+	
+	public void showDialog(Shell shell) {
+		this.accepted = false;
+		
+		this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setText(TuxGuitar.getProperty("settings.config"));
+		
+		//-------main-------------------------------------
+		Composite mainComposite = new Composite(this.dialog,SWT.NONE);
+		mainComposite.setLayout(new GridLayout(2,false));
+		mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true , true));
+		createComposites(mainComposite);
+		
+		//-------buttons-------------------------------------
+		Composite buttonComposite = new Composite(this.dialog,SWT.NONE);
+		buttonComposite.setLayout(new GridLayout(3,true));
+		buttonComposite.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		
+		Button buttonDefaults = new Button(buttonComposite, SWT.PUSH);
+		buttonDefaults.setLayoutData(getButtonData()); 
+		buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
+		buttonDefaults.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TGConfigEditor.this.accepted = true;
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+				dispose();
+				setDefaults();
+				ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("settings.config.apply-changes-question"));
+				confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
+				if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_NO){
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+					return;
+				}
+				applyConfig(true);
+			}
+		});
+		
+		Button buttonOK = new Button(buttonComposite, SWT.PUSH);
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TGConfigEditor.this.accepted = true;
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+				updateOptions();
+				dispose();
+				ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("settings.config.apply-changes-question"));
+				confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
+				if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_NO){
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+					return;
+				}
+				applyConfig(false);
+			}
+		});
+		
+		Button buttonCancel = new Button(buttonComposite, SWT.PUSH);
+		buttonCancel.setLayoutData(getButtonData()); 
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+				dispose();
+				TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+			}
+		});
+		
+		this.dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		if(!this.accepted){
+			TGActionLock.unlock();
+		}
+	}
+	
+	private void createComposites(Composite parent) {
+		ToolBar toolBar = new ToolBar(parent, SWT.VERTICAL | SWT.FLAT | SWT.WRAP);
+		toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true , true));
+		
+		Composite option = new Composite(parent,SWT.NONE);
+		option.setLayout(new FormLayout());
+		
+		initOptions(toolBar,option);
+		
+		Point optionSize = computeOptionsSize( 0 , toolBar.computeSize(SWT.DEFAULT,SWT.DEFAULT).y );
+		option.setLayoutData(new GridData(optionSize.x,optionSize.y));
+		
+		if(this.options.size() > 0){
+			select((Option)this.options.get(0));
+		}
+	}
+	
+	private void initOptions(ToolBar toolBar,Composite parent){
+		this.options = new ArrayList();
+		this.options.add(new MainOption(this,toolBar,parent));
+		this.options.add(new StylesOption(this,toolBar,parent));
+		this.options.add(new LanguageOption(this,toolBar,parent));
+		this.options.add(new ToolBarsOption(this,toolBar,parent));
+		this.options.add(new SkinOption(this,toolBar,parent));
+		this.options.add(new SoundOption(this,toolBar,parent));
+		
+		Iterator it = this.options.iterator();
+		while(it.hasNext()){
+			Option option = (Option)it.next();
+			option.createOption();
+		}
+	}
+	
+	private Point computeOptionsSize(int minimumWidth, int minimumHeight){
+		int width = minimumWidth;
+		int height = minimumHeight;
+		
+		Iterator it = this.options.iterator();
+		while(it.hasNext()){
+			Option option = (Option)it.next();
+			Point size = option.computeSize();
+			if(size.x > width){
+				width = size.x;
+			}
+			if(size.y > height){
+				height = size.y;
+			}
+		}
+		return new Point(width, height);
+	}
+	
+	public void pack(){
+		this.dialog.pack();
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	public GridData makeGridData(int with,int height,int minWith,int minHeight){
+		GridData data = new GridData();
+		data.minimumWidth = minWith;
+		data.minimumHeight = minHeight;
+		if(with > 0){
+			data.widthHint = with;
+		}else{
+			data.horizontalAlignment = SWT.FILL;
+			data.grabExcessHorizontalSpace = true;
+		}
+		if(height > 0){
+			data.heightHint = with;
+		}else{
+			data.verticalAlignment = SWT.FILL;
+			data.grabExcessVerticalSpace = true;
+		}
+		
+		return data;
+	}
+	
+	public void select(Option option){
+		hideAll();
+		option.setVisible(true);
+		//this.dialog.layout();
+		this.dialog.redraw();
+	}
+	
+	private void hideAll(){
+		Iterator it = this.options.iterator();
+		while(it.hasNext()){
+			Option option = (Option)it.next();
+			option.setVisible(false);
+		}
+	}
+	
+	protected void updateOptions(){
+		Iterator it = this.options.iterator();
+		while(it.hasNext()){
+			Option option = (Option)it.next();
+			option.updateConfig();
+		}
+		this.config.save();
+	}
+	
+	protected void setDefaults(){
+		Iterator it = this.options.iterator();
+		while(it.hasNext()){
+			Option option = (Option)it.next();
+			option.updateDefaults();
+		}
+		this.config.save();
+	}
+	
+	protected void applyConfig(final boolean force){
+		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
+		new Thread(new Runnable() {
+			public void run() throws TGException {
+				TGConfigEditor.this.runnables = new ArrayList();
+				
+				Iterator it = TGConfigEditor.this.options.iterator();
+				while(it.hasNext()){
+					Option option = (Option)it.next();
+					option.applyConfig(force);
+				}
+				try {
+					TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+						public void run() throws TGException {
+							Iterator it = TGConfigEditor.this.runnables.iterator();
+							while(it.hasNext()){
+								Runnable current = (Runnable)it.next();
+								current.run();
+							}
+							new Thread(new Runnable() {
+								public void run() throws TGException {
+									TuxGuitar.instance().fireUpdate();
+									TuxGuitar.instance().updateCache(true);
+									TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+									TGActionLock.unlock();
+								}
+							}).start();
+						}
+					});
+				} catch (Throwable throwable) {
+					TuxGuitar.instance().fireUpdate();
+					TuxGuitar.instance().updateCache(true);
+					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
+					TGActionLock.unlock();
+					throwable.printStackTrace();
+				}
+			}
+		}).start();
+	}
+	
+	protected void dispose(){
+		Iterator it = this.options.iterator();
+		while(it.hasNext()){
+			Option option = (Option)it.next();
+			option.dispose();
+		}
+		getDialog().dispose();
+	}
+	
+	public TGProperties getDefaults(){
+		if( this.defaults == null ){
+			this.defaults = TGConfigDefaults.createDefaults();
+		}
+		return this.defaults;
+	}
+	
+	public TGConfigManager getConfig(){
+		return this.config;
+	}
+	
+	public TablatureEditor getEditor(){
+		return TuxGuitar.instance().getTablatureEditor();
+	}
+	
+	public Shell getDialog(){
+		return this.dialog;
+	}
+	
+	public void addSyncThread(Runnable runnable){
+		this.runnables.add( runnable );
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigKeys.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigKeys.java
new file mode 100644
index 0000000..f51974f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigKeys.java
@@ -0,0 +1,93 @@
+/*
+ * Created on 27-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.system.config;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class TGConfigKeys {
+	public static final String SKIN = "skin";
+	public static final String WINDOW_TITLE = "window.title";
+	public static final String SHOW_SPLASH = "show.splash";
+	public static final String MAXIMIZED = "window.maximized";
+	public static final String WIDTH = "window.width";
+	public static final String HEIGHT = "window.height";
+	public static final String SHOW_INSTRUMENTS = "show.instruments";
+	public static final String SHOW_TRANSPORT = "show.transport";
+	public static final String SHOW_FRETBOARD = "show.fretboard";
+	public static final String SHOW_MATRIX = "show.matrix";
+	public static final String SHOW_PIANO = "show.piano";
+	public static final String SHOW_MARKERS = "show.markers";
+	public static final String LAYOUT_MODE = "layout.mode";
+	public static final String LAYOUT_STYLE = "layout.style";
+	public static final String LANGUAGE = "language";
+	public static final String EDITOR_MOUSE_MODE = "editor.mouse.mode";
+	public static final String EDITOR_NATURAL_KEY_MODE = "editor.natural.key.mode";
+	public static final String FONT_DEFAULT = "font.default";
+	public static final String FONT_NOTE = "font.note";
+	public static final String FONT_TIME_SIGNATURE = "font.time-signature";
+	public static final String FONT_CHORD = "font.chord";
+	public static final String FONT_CHORD_FRET = "font.chord-fret";
+	public static final String FONT_GRACE = "font.grace";
+	public static final String FONT_LYRIC = "font.lyric";
+	public static final String FONT_TEXT = "font.text";
+	public static final String FONT_MARKER = "font.marker";
+	public static final String FONT_PRINTER_DEFAULT = "font.printer.default";
+	public static final String FONT_PRINTER_NOTE = "font.printer.note";
+	public static final String FONT_PRINTER_TIME_SIGNATURE = "font.printer.time-signature";
+	public static final String FONT_PRINTER_LYRIC = "font.printer.lyric";
+	public static final String FONT_PRINTER_TEXT = "font.printer.text";
+	public static final String FONT_PRINTER_CHORD = "font.printer.chord";
+	public static final String FONT_PRINTER_GRACE = "font.printer.grace";
+	public static final String FONT_ABOUT_DIALOG_TITLE = "font.about.dialog.title";
+	public static final String COLOR_BACKGROUND = "color.background";
+	public static final String COLOR_LINE = "color.line";
+	public static final String COLOR_SCORE_NOTE = "color.score.note";
+	public static final String COLOR_TAB_NOTE = "color.tab.note";
+	public static final String COLOR_PLAY_NOTE = "color.play.note";
+	public static final String COLOR_CARET_1 = "color.caret.1";
+	public static final String COLOR_CARET_2 = "color.caret.2";
+	public static final String COLOR_LOOP_S_MARKER = "color.loop.s.marker";
+	public static final String COLOR_LOOP_E_MARKER = "color.loop.e.marker";
+	public static final String MIDI_PORT = "midi.port";
+	public static final String MIDI_SEQUENCER = "midi.sequencer";
+	public static final String MAX_HISTORY_FILES = "history.max-files";
+	public static final String MIN_SCORE_TABLATURE_SPACING = "score.min.score-tab-spacing";
+	public static final String SCORE_LINE_SPACING = "score.line-spacing";
+	public static final String TAB_LINE_SPACING = "tab.line-spacing";
+	public static final String FIRST_TRACK_SPACING = "first-track.spacing";
+	public static final String TRACK_SPACING = "track.spacing";
+	public static final String FRETBOARD_STRING_SPACING = "fretboard.string-spacing";
+	public static final String FRETBOARD_STYLE = "fretboard.style";
+	public static final String FRETBOARD_FONT = "fretboard.font";
+	public static final String FRETBOARD_COLOR_BACKGROUND = "fretboard.color.background";
+	public static final String FRETBOARD_COLOR_STRING = "fretboard.color.string";
+	public static final String FRETBOARD_COLOR_FRET_POINT = "fretboard.color.fret-point";
+	public static final String FRETBOARD_COLOR_NOTE = "fretboard.color.note";
+	public static final String FRETBOARD_COLOR_SCALE = "fretboard.color.scale";
+	public static final String FRETBOARD_DIRECTION = "fretboard.direction";
+	public static final String PIANO_COLOR_KEY_NATURAL = "piano.color.natural-key";
+	public static final String PIANO_COLOR_KEY_NOT_NATURAL = "piano.color.not-natural-key";
+	public static final String PIANO_COLOR_NOTE = "piano.color.note";
+	public static final String PIANO_COLOR_SCALE = "piano.color.scale";
+	public static final String MATRIX_GRIDS = "matrix.grids";
+	public static final String MATRIX_FONT = "matrix.font";
+	public static final String MATRIX_COLOR_FOREGROUND = "matrix.color.foreground";
+	public static final String MATRIX_COLOR_LINE_1= "matrix.color.line-1";
+	public static final String MATRIX_COLOR_LINE_2= "matrix.color.line-2";
+	public static final String MATRIX_COLOR_LINE_3= "matrix.color.line-3";
+	public static final String MATRIX_COLOR_BORDER = "matrix.color.border";
+	public static final String MATRIX_COLOR_POSITION = "matrix.color.position";
+	public static final String MATRIX_COLOR_NOTE = "matrix.color.note";
+	public static final String MATRIX_COLOR_PLAY_NOTE = "matrix.color.play-note";
+	public static final String TABLE_AUTO_SIZE = "table.auto-size";
+	public static final String BROWSER_LINES_VISIBLE = "browser.lines-visible";
+	public static final String FORCE_OS_DEFAULTS = "painter.force-os-defaults";
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigManager.java
new file mode 100644
index 0000000..c2a007f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigManager.java
@@ -0,0 +1,114 @@
+package org.herac.tuxguitar.app.system.config;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.RGB;
+import org.herac.tuxguitar.graphics.TGColorModel;
+import org.herac.tuxguitar.graphics.TGFontModel;
+
+public class TGConfigManager extends org.herac.tuxguitar.util.configuration.TGConfigManager{
+	
+	public static final String CONFIGURATION_MODULE = "tuxguitar";
+	
+	public TGConfigManager(){
+		super(CONFIGURATION_MODULE);
+	}
+	
+	public void setValue(String key,RGB rgb){
+		this.setValue(key,(rgb.red + "," + rgb.green + "," + rgb.blue));
+	}
+	
+	public void setValue(String key,FontData fd){
+		this.setValue(key,(fd.getName() + "," + fd.getHeight() + "," + fd.getStyle()));
+	}
+	
+	public FontData getFontDataConfigValue(String key){
+		try{
+			String value = getProperties().getValue(key);
+			if(value != null){
+				String[] values = value.trim().split(",");
+				if(values != null && values.length == 3){
+					try{
+						String name = values[0].trim();
+						int size = Integer.parseInt(values[1].trim());
+						int style = Integer.parseInt(values[2].trim());
+						return new FontData( (name == null ? "" : name),size,style);
+					}catch(NumberFormatException e){
+						e.printStackTrace();
+					}
+				}
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return new FontData();
+	}
+	
+	public RGB getRGBConfigValue(String key){
+		try{
+			String value = getProperties().getValue(key);
+			if(value != null){
+				String[] values = value.trim().split(",");
+				if(values != null && values.length == 3){
+					try{
+						int red = Integer.parseInt(values[0].trim());
+						int green = Integer.parseInt(values[1].trim());
+						int blue = Integer.parseInt(values[2].trim());
+						
+						return new RGB(red,green,blue);
+					}catch(NumberFormatException e){
+						e.printStackTrace();
+					}
+				}
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	public TGFontModel getFontModelConfigValue(String key){
+		try{
+			String value = getProperties().getValue(key);
+			if(value != null){
+				String[] values = value.trim().split(",");
+				if(values != null && values.length == 3){
+					try{
+						String name = values[0].trim();
+						int size = Integer.parseInt(values[1].trim());
+						int style = Integer.parseInt(values[2].trim());
+						return new TGFontModel( (name == null ? "" : name),size, (style & SWT.BOLD) != 0 , (style & SWT.ITALIC) != 0 );
+					}catch(NumberFormatException e){
+						e.printStackTrace();
+					}
+				}
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	public TGColorModel getColorModelConfigValue(String key){
+		try{
+			String value = getProperties().getValue(key);
+			if(value != null){
+				String[] values = value.trim().split(",");
+				if(values != null && values.length == 3){
+					try{
+						int red = Integer.parseInt(values[0].trim());
+						int green = Integer.parseInt(values[1].trim());
+						int blue = Integer.parseInt(values[2].trim());
+						
+						return new TGColorModel(red,green,blue);
+					}catch(NumberFormatException e){
+						e.printStackTrace();
+					}
+				}
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigPropertiesHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigPropertiesHandler.java
new file mode 100644
index 0000000..461111a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/TGConfigPropertiesHandler.java
@@ -0,0 +1,59 @@
+package org.herac.tuxguitar.app.system.config;
+
+import java.io.File;
+
+import org.herac.tuxguitar.app.system.properties.TGFilePropertiesHandler;
+import org.herac.tuxguitar.app.system.properties.TGResourcePropertiesReader;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesException;
+import org.herac.tuxguitar.util.properties.TGPropertiesReader;
+import org.herac.tuxguitar.util.properties.TGPropertiesWriter;
+
+public class TGConfigPropertiesHandler implements TGPropertiesReader, TGPropertiesWriter{
+	
+	private static final String DEFAULT_MODULE = "tuxguitar";
+	
+	private static final String DEFAULT_FILE_PREFIX = TGFileUtils.PATH_USER_CONFIG + File.separator;
+	private static final String DEFAULT_FILE_SUFFIX = ".cfg";
+	
+	private static final String DEFAULT_RESOURCE_PREFIX = "";
+	private static final String DEFAULT_RESOURCE_SUFFIX = ".cfg";
+	
+	private static final String PLUGINS_FILE_PREFIX = TGFileUtils.PATH_USER_PLUGINS_CONFIG + File.separator;
+	
+	public void writeProperties(TGProperties properties, String module) throws TGPropertiesException {
+		this.storeProperties(properties, module);
+	}
+	
+	public void readProperties(TGProperties properties, String module) throws TGPropertiesException {
+		this.readDefaultProperties(properties, module);
+		this.readStoredProperties(properties, module);
+	}
+	
+	private void readDefaultProperties(TGProperties properties, String module) {
+		if( DEFAULT_MODULE.equals(module) ){
+			TGConfigDefaults.loadProperties(properties);
+		}
+		TGPropertiesReader tgPropertiesReader = new TGResourcePropertiesReader(DEFAULT_RESOURCE_PREFIX, DEFAULT_RESOURCE_SUFFIX);
+		tgPropertiesReader.readProperties(properties, module);
+	}
+	
+	private void readStoredProperties(TGProperties properties, String module) {
+		TGPropertiesReader tgPropertiesReader = new TGFilePropertiesHandler(getModulePrefix(module), getModuleSuffix(module));
+		tgPropertiesReader.readProperties(properties, module);
+	}
+	
+	private void storeProperties(TGProperties properties, String module) {
+		TGPropertiesWriter tgPropertiesWriter = new TGFilePropertiesHandler(getModulePrefix(module), getModuleSuffix(module));
+		tgPropertiesWriter.writeProperties(properties, module);
+	}
+	
+	private String getModulePrefix(String module){
+		return (DEFAULT_MODULE.equals(module) ? DEFAULT_FILE_PREFIX : PLUGINS_FILE_PREFIX);
+	}
+	
+	private String getModuleSuffix(String module){
+		return DEFAULT_FILE_SUFFIX;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/LanguageOption.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/LanguageOption.java
new file mode 100644
index 0000000..f25de0c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/LanguageOption.java
@@ -0,0 +1,178 @@
+package org.herac.tuxguitar.app.system.config.items;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.ToolBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.system.config.TGConfigEditor;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+
+public class LanguageOption extends Option{
+	protected boolean initialized;
+	protected Table table;
+	protected TableColumn column;
+	
+	public LanguageOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
+		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.language"), SWT.FILL, SWT.FILL);
+		this.initialized = false;
+	}
+	
+	public void createOption(){
+		getToolItem().setText(TuxGuitar.getProperty("settings.config.language"));
+		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionLanguage());
+		getToolItem().addSelectionListener(this);
+		
+		showLabel(getComposite(),SWT.FILL,SWT.TOP, true, false,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.language.choose"));
+		
+		Composite composite = new Composite(getComposite(),SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL));
+		
+		this.table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
+		this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.table.setHeaderVisible(true);
+		this.table.setLinesVisible(false);
+		
+		this.column = new TableColumn(this.table, SWT.LEFT);
+		this.column.setText(TuxGuitar.getProperty("settings.config.language.choose"));
+		this.column.pack();
+		
+		this.loadConfig();
+	}
+	
+	protected void loadTableItem(String text, String data, boolean selected){
+		TableItem item = new TableItem(this.table, SWT.NONE);
+		item.setText(text);
+		item.setData(data);
+		if( selected ){
+			this.table.setSelection(item);
+		}
+	}
+	
+	protected List getLanguageItems(String[] languages){
+		List list = new ArrayList();
+		if( languages != null ){
+			for(int i = 0;i < languages.length; i ++){
+				list.add( new LanguageItem(languages[i],TuxGuitar.getProperty("locale." + languages[i] ) ) );
+			}
+			Collections.sort(list, new Comparator() {
+				public int compare(Object o1, Object o2) {
+					if( o1 instanceof LanguageItem && o2 instanceof LanguageItem){
+						LanguageItem l1 = (LanguageItem)o1;
+						LanguageItem l2 = (LanguageItem)o2;
+						return l1.getValue().compareTo( l2.getValue() );
+					}
+					return 0;
+				}
+			} );
+		}
+		return list;
+	}
+	
+	protected void loadConfig(){
+		new Thread(new Runnable() {
+			public void run() {
+				final String language = getConfig().getStringValue(TGConfigKeys.LANGUAGE);
+				final List languages = getLanguageItems( TuxGuitar.instance().getLanguageManager().getLanguages() );
+				new SyncThread(new Runnable() {
+					public void run() {
+						if(!isDisposed()){
+							// Load default item
+							loadTableItem(TuxGuitar.getProperty("locale.default"), new String(), true);
+							
+							for(int i = 0;i < languages.size(); i ++){
+								LanguageItem item = (LanguageItem)languages.get( i );
+								loadTableItem(item.getValue(),item.getKey(),(language != null && item.getKey().equals( language )));
+							}
+							
+							LanguageOption.this.initialized = true;
+							LanguageOption.this.column.pack();
+							LanguageOption.this.pack();
+						}
+					}
+				}).start();
+			}
+		}).start();
+	}
+	
+	public void updateConfig(){
+		if(this.initialized){
+			String language = null;
+			if(this.table != null && !this.table.isDisposed()){
+				int index = this.table.getSelectionIndex();
+				if(index >= 0 && index < this.table.getItemCount() ){
+					language = (String)this.table.getItem(index).getData();
+				}
+			}
+			getConfig().setValue(TGConfigKeys.LANGUAGE, language );
+		}
+	}
+	
+	public void updateDefaults(){
+		if(this.initialized){
+			getConfig().setValue(TGConfigKeys.LANGUAGE, getDefaults().getValue(TGConfigKeys.LANGUAGE));
+		}
+	}
+	
+	public void applyConfig(boolean force){
+		if(force || this.initialized){
+			boolean changed = force;
+			
+			if(!changed){
+				String languageLoaded = TuxGuitar.instance().getLanguageManager().getLanguage();
+				String languageConfigured = getConfig().getStringValue(TGConfigKeys.LANGUAGE);
+				if(languageLoaded == null && languageConfigured == null){
+					changed = false;
+				}
+				else if(languageLoaded != null && languageConfigured != null){
+					changed = ( !languageLoaded.equals( languageConfigured ) );
+				}
+				else {
+					changed = true;
+				}
+			}
+			
+			if(changed){
+				addSyncThread(new Runnable() {
+					public void run() {
+						TuxGuitar.instance().loadLanguage();
+					}
+				});
+			}
+		}
+	}
+	
+	public Point computeSize(){
+		return this.computeSize(SWT.DEFAULT,SWT.NONE);
+	}
+	
+	private class LanguageItem {
+		private String key;
+		private String value;
+		
+		public LanguageItem(String key, String value){
+			this.key = key;
+			this.value = value;
+		}
+		
+		public String getKey(){
+			return this.key;
+		}
+		
+		public String getValue(){
+			return this.value;
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/MainOption.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/MainOption.java
new file mode 100644
index 0000000..627b48a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/MainOption.java
@@ -0,0 +1,135 @@
+package org.herac.tuxguitar.app.system.config.items;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.swt.widgets.ToolBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.system.config.TGConfigEditor;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.util.WindowTitleUtil;
+
+public class MainOption  extends Option{
+	protected boolean initialized;
+	protected Button showSplash;
+	protected Button autoSizeTable;
+	protected Text windowTitle;
+	
+	public MainOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
+		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.main"));
+		this.initialized = false;
+	}
+	
+	public void createOption(){
+		getToolItem().setText(TuxGuitar.getProperty("settings.config.main"));
+		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionMain());
+		getToolItem().addSelectionListener(this);
+		
+		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.main.window-title"));
+		
+		Composite windowTitleComposite = new Composite(getComposite(),SWT.NONE);
+		windowTitleComposite.setLayout(new GridLayout());
+		windowTitleComposite.setLayoutData(getTabbedData());
+		
+		this.windowTitle = new Text(windowTitleComposite,SWT.BORDER);
+		this.windowTitle.setLayoutData(new GridData(SWT.FILL, SWT.FILL , true, true));
+		this.windowTitle.setTextLimit(80);
+		
+		Composite infoHeader = new Composite(windowTitleComposite,SWT.NONE);
+		infoHeader.setLayout(new GridLayout(2,false));
+		infoHeader.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		showImageLabel(infoHeader,SWT.NONE,infoHeader.getDisplay().getSystemImage(SWT.ICON_INFORMATION));
+		showLabel(infoHeader,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.help"));
+		
+		Composite infoBody = new Composite(windowTitleComposite,SWT.NONE);
+		infoBody.setLayout(new GridLayout(2,false));
+		infoBody.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_APP_NAME));
+		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_APP_NAME ));
+		
+		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_APP_VERSION));
+		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_APP_VERSION ));
+		
+		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_FILE_NAME));
+		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_FILE_NAME ));
+		
+		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_FILE_PATH));
+		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_FILE_PATH ));
+		
+		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_NAME));
+		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_NAME ));
+		
+		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_ALBUM));
+		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_ALBUM ));
+		
+		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_ARTIST));
+		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_ARTIST ));
+		
+		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_AUTHOR));
+		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_AUTHOR ));
+		
+		showLabel(getComposite(),SWT.BOTTOM | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.main.options"));
+		
+		Composite options = new Composite(getComposite(),SWT.NONE);
+		options.setLayout(new GridLayout());
+		options.setLayoutData(getTabbedData());
+		
+		this.autoSizeTable = new Button(options,SWT.CHECK);
+		this.autoSizeTable.setText(TuxGuitar.getProperty("settings.config.main.table.auto-size.enabled"));
+		
+		this.showSplash = new Button(options,SWT.CHECK);
+		this.showSplash.setText(TuxGuitar.getProperty("settings.config.main.splash-enabled"));
+		
+		this.loadConfig();
+	}
+	
+	protected void loadConfig(){
+		new Thread(new Runnable() {
+			public void run() {
+				final String windowTitle = getConfig().getStringValue(TGConfigKeys.WINDOW_TITLE);
+				final boolean showSplash = getConfig().getBooleanValue(TGConfigKeys.SHOW_SPLASH);
+				final boolean autoSizeTable = getConfig().getBooleanValue(TGConfigKeys.TABLE_AUTO_SIZE);
+				new SyncThread(new Runnable() {
+					public void run() {
+						if(!isDisposed()){
+							MainOption.this.windowTitle.setText(windowTitle);
+							MainOption.this.showSplash.setSelection(showSplash);
+							MainOption.this.autoSizeTable.setSelection(autoSizeTable);
+							MainOption.this.initialized = true;
+							MainOption.this.pack();
+						}
+					}
+				}).start();
+			}
+		}).start();
+	}
+	
+	public void updateConfig(){
+		if(this.initialized){
+			getConfig().setValue(TGConfigKeys.WINDOW_TITLE,this.windowTitle.getText());
+			getConfig().setValue(TGConfigKeys.SHOW_SPLASH,this.showSplash.getSelection());
+			getConfig().setValue(TGConfigKeys.TABLE_AUTO_SIZE,this.autoSizeTable.getSelection());
+		}
+	}
+	
+	public void updateDefaults(){
+		if(this.initialized){
+			getConfig().setValue(TGConfigKeys.WINDOW_TITLE, getDefaults().getValue(TGConfigKeys.WINDOW_TITLE));
+			getConfig().setValue(TGConfigKeys.SHOW_SPLASH, getDefaults().getValue(TGConfigKeys.SHOW_SPLASH));
+			getConfig().setValue(TGConfigKeys.TABLE_AUTO_SIZE, getDefaults().getValue(TGConfigKeys.TABLE_AUTO_SIZE));
+		}
+	}
+	
+	public void applyConfig(boolean force){
+		if(force || this.initialized){
+			TuxGuitar.instance().showTitle();
+			TuxGuitar.instance().getTable().loadConfig();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/Option.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/Option.java
new file mode 100644
index 0000000..4c1e145
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/Option.java
@@ -0,0 +1,227 @@
+package org.herac.tuxguitar.app.system.config.items;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.system.config.TGConfigEditor;
+import org.herac.tuxguitar.app.system.config.TGConfigManager;
+import org.herac.tuxguitar.util.properties.TGProperties;
+
+public abstract class Option extends SelectionAdapter{
+	
+	protected static final int DEFAULT_INDENT = 20;
+	
+	private TGConfigEditor configEditor ;
+	private ToolBar toolBar;
+	private Group group;
+	private Composite composite;
+	private ToolItem toolItem;
+	
+	public Option(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent,String text, int horizontalAlignment,int verticalAlignment){
+		this.configEditor = configEditor;
+		this.toolBar = toolBar;
+		this.toolItem = new ToolItem(toolBar, SWT.RADIO);
+		this.group = new Group(parent, SWT.SHADOW_ETCHED_IN);
+		this.group.setLayout(new GridLayout());
+		this.group.setLayoutData(getGroupData());
+		this.group.setText(text);
+		this.composite = new Composite(this.group, SWT.SHADOW_ETCHED_IN);
+		this.composite.setLayout(new GridLayout());
+		this.composite.setLayoutData(new GridData(horizontalAlignment,verticalAlignment,true ,true));
+	}
+	
+	public Option(TGConfigEditor configEditor,ToolBar toolBar, Composite parent,String text){
+		this(configEditor, toolBar, parent, text, SWT.FILL,SWT.TOP);
+	}
+	
+	public abstract void createOption();
+	
+	public abstract void updateConfig();
+	
+	public abstract void updateDefaults();
+	
+	public abstract void applyConfig(boolean force);
+	
+	public void setVisible(boolean visible){
+		this.toolItem.setSelection(visible);
+		this.group.setVisible(visible);
+		this.group.setFocus();
+		this.group.redraw();
+	}
+	
+	public void dispose(){
+		//Override me
+	}
+	
+	protected Label showLabel(Composite parent,int labelStyle,int fontStyle,int fontScale,String text){
+		return showLabel(parent,SWT.FILL,SWT.CENTER, labelStyle, fontStyle, fontScale, text);
+	}
+	
+	protected Label showLabel(Composite parent,int hAlign,int vAlign,int labelStyle,int fontStyle,int fontScale,String text){
+		return showLabel(parent, hAlign, vAlign, true, true, labelStyle, fontStyle, fontScale, text);
+	}
+	
+	protected Label showLabel(Composite parent,int hAlign,int vAlign,boolean grabExcessHSpace,boolean grabExcessVSpace,int labelStyle,int fontStyle,int fontScale,String text){
+		Label label = new Label(parent,labelStyle);
+		label.setText(text);
+		label.setLayoutData(new GridData(hAlign,vAlign,grabExcessHSpace,grabExcessVSpace));
+		
+		FontData[] fontDatas = label.getFont().getFontData();
+		if(fontDatas.length > 0){
+			final Font font = new Font(label.getDisplay(),fontDatas[0].getName(),(fontDatas[0].getHeight() + fontScale),fontStyle);
+			label.setFont(font);
+			label.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent arg0) {
+					font.dispose();
+				}
+			});
+		}
+		return label;
+	}
+	
+	protected Label showImageLabel(Composite parent,int labelStyle,Image image){
+		Label label = new Label(parent,labelStyle);
+		label.setImage(image);
+		return label;
+	}
+	
+	protected FormData getGroupData(){
+		FormData data = new FormData();
+		data.top = new FormAttachment(0,0);
+		data.bottom = new FormAttachment(100,0);
+		data.left = new FormAttachment(0,0);
+		data.right = new FormAttachment(100,0);
+		return data;
+	}
+	
+	public void widgetSelected(SelectionEvent e) {
+		this.configEditor.select(this);
+	}
+	
+	public Composite getComposite(){
+		return this.composite;
+	}
+	
+	public ToolItem getToolItem(){
+		return this.toolItem;
+	}
+	
+	public Point computeSize(){
+		return this.computeSize(SWT.DEFAULT,SWT.DEFAULT);
+	}
+	
+	protected Point computeSize(int wHint,int hHint){
+		return this.group.computeSize(wHint, hHint);
+	}
+	
+	public TGConfigManager getConfig(){
+		return this.configEditor.getConfig();
+	}
+	
+	public TGProperties getDefaults(){
+		return this.configEditor.getDefaults();
+	}
+	
+	public TablatureEditor getEditor(){
+		return this.configEditor.getEditor();
+	}
+	
+	public Display getDisplay(){
+		return this.toolBar.getDisplay();
+	}
+	
+	public Shell getShell(){
+		return this.toolBar.getShell();
+	}
+	
+	protected boolean isDisposed(){
+		return (this.toolBar.isDisposed() || this.toolBar.getShell().isDisposed());
+	}
+	
+	public  GridData makeGridData(int with,int height,int minWith,int minHeight){
+		return this.configEditor.makeGridData(with, height, minWith, minHeight);
+	}
+	
+	protected GridData getTabbedData(){
+		return getTabbedData(DEFAULT_INDENT,SWT.FILL,SWT.CENTER);
+	}
+	
+	protected GridData getTabbedData(int horizontalAlignment,int verticalAlignment, boolean grabExcessHorizontalSpace, boolean grabExcessVerticalSpace){
+		return getTabbedData(DEFAULT_INDENT,horizontalAlignment,verticalAlignment,grabExcessHorizontalSpace,grabExcessVerticalSpace);
+	}
+	
+	protected GridData getTabbedData(int horizontalAlignment,int verticalAlignment){
+		return getTabbedData(DEFAULT_INDENT,horizontalAlignment,verticalAlignment);
+	}
+	
+	protected GridData getTabbedData(int indent,int horizontalAlignment,int verticalAlignment){
+		return getTabbedData(indent, horizontalAlignment, verticalAlignment, true, true);
+	}
+	
+	protected GridData getTabbedData(int indent,int horizontalAlignment,int verticalAlignment, boolean grabExcessHorizontalSpace, boolean grabExcessVerticalSpace){
+		GridData data = new GridData();
+		data.horizontalAlignment = horizontalAlignment;
+		data.grabExcessHorizontalSpace = grabExcessHorizontalSpace;
+		data.verticalAlignment = verticalAlignment;
+		data.grabExcessVerticalSpace = grabExcessVerticalSpace;
+		data.horizontalIndent = indent;
+		return data;
+	}
+	
+	public GridData makeGridData(int widthHint,
+								 int heightHint,
+								 int minimumWidth,
+								 int minimumHeight,
+								 int horizontalAlignment,
+								 int verticalAlignment,
+								 boolean grabExcessHorizontalSpace,
+								 boolean grabExcessVerticalSpace,
+								 int horizontalSpan,
+								 int verticalSpan){
+		GridData data = new GridData();
+		data.widthHint = widthHint;
+		data.heightHint = heightHint;
+		data.minimumWidth = minimumWidth;
+		data.minimumHeight = minimumHeight;
+		data.horizontalAlignment = horizontalAlignment;
+		data.verticalAlignment = verticalAlignment;
+		data.grabExcessHorizontalSpace = grabExcessHorizontalSpace;
+		data.grabExcessVerticalSpace = grabExcessVerticalSpace;
+		data.horizontalSpan = horizontalSpan;
+		data.verticalSpan = verticalSpan;
+		
+		return data;
+	}
+	
+	public void pack(){
+		this.configEditor.pack();
+	}
+	
+	public void loadCursor(int style){
+		TuxGuitar.instance().loadCursor(this.configEditor.getDialog(),style);
+	}
+	
+	protected void addSyncThread(Runnable runnable){
+		this.configEditor.addSyncThread(runnable);
+	}
+	
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/SkinOption.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/SkinOption.java
new file mode 100644
index 0000000..6d85b6f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/SkinOption.java
@@ -0,0 +1,265 @@
+package org.herac.tuxguitar.app.system.config.items;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Properties;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ToolBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.system.config.TGConfigEditor;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+
+public class SkinOption extends Option{
+	
+	protected boolean initialized;
+	protected List skins;
+	protected Combo combo;
+	protected Label nameLabel;
+	protected Label authorLabel;
+	protected Label versionLabel;
+	protected Label descriptionLabel;
+	protected Image preview;
+	protected Composite previewArea;
+	
+	public SkinOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
+		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.skin"), SWT.FILL,SWT.FILL);
+		this.initialized = false;
+	}
+	
+	public void createOption() {
+		getToolItem().setText(TuxGuitar.getProperty("settings.config.skin"));
+		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionSkin());
+		getToolItem().addSelectionListener(this);
+		
+		showLabel(getComposite(),SWT.FILL,SWT.TOP,true, false, SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.skin.choose"));
+		
+		Composite composite = new Composite(getComposite(),SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL, true, false));
+		
+		this.combo = new Combo(composite,SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Composite skinInfoComposite = new Composite(getComposite(),SWT.NONE);
+		skinInfoComposite.setLayout(new GridLayout(2,false));
+		skinInfoComposite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL, true, false));
+		showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("name") + ": ");
+		this.nameLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,"");
+		showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("author")+": ");
+		this.authorLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,"");
+		showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("version")+": ");
+		this.versionLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,"");
+		showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("description")+": ");
+		this.descriptionLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,"");
+		
+		Composite skinPreviewComposite = new Composite(getComposite(),SWT.NONE);
+		skinPreviewComposite.setLayout(new GridLayout());
+		skinPreviewComposite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL ,true, true));
+		
+		this.previewArea = new Composite(skinPreviewComposite,SWT.DOUBLE_BUFFERED);
+		this.previewArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		this.previewArea.addPaintListener(new PaintListener() {
+			public void paintControl(PaintEvent e) {
+				if(SkinOption.this.preview != null && !SkinOption.this.preview.isDisposed()){
+					e.gc.drawImage(SkinOption.this.preview, 0, 0);
+				}
+			}
+		});
+		
+		this.loadConfig();
+	}
+	
+	protected void loadConfig(){
+		new Thread(new Runnable() {
+			public void run() {
+				SkinOption.this.skins = new ArrayList();
+				String[] skinNames = TGFileUtils.getFileNames("skins");
+				if( skinNames != null ){
+					for(int i = 0;i < skinNames.length;i++){
+						Properties properties = new Properties();
+						try {
+							InputStream skinInfo = TGFileUtils.getResourceAsStream("skins/" + skinNames[i] + "/skin.properties");
+							if( skinInfo != null ){
+								properties.load( skinInfo );
+							}
+						}catch (Throwable throwable) {
+							throwable.printStackTrace();
+						}
+						SkinInfo info = new SkinInfo(skinNames[i]);
+						info.setName(properties.getProperty("name",info.getSkin()));
+						info.setAuthor(properties.getProperty("author","Not available."));
+						info.setVersion(properties.getProperty("version","Not available."));
+						info.setDescription(properties.getProperty("description","Not available."));
+						info.setDate(properties.getProperty("date",null));
+						info.setPreview(properties.getProperty("preview",null));
+						SkinOption.this.skins.add(info);
+					}
+				}
+				new SyncThread(new Runnable() {
+					public void run() {
+						if(!isDisposed()){
+							for(int i = 0;i < SkinOption.this.skins.size();i++){
+								SkinInfo info = (SkinInfo)SkinOption.this.skins.get(i);
+								SkinOption.this.combo.add(info.getName());
+								if(info.getSkin().equals(getConfig().getStringValue(TGConfigKeys.SKIN))){
+									SkinOption.this.combo.select(i);
+								}
+							}
+							SkinOption.this.combo.addSelectionListener(new SelectionAdapter() {
+								public void widgetSelected(SelectionEvent e) {
+									int selection = SkinOption.this.combo.getSelectionIndex();
+									if(selection >= 0 && selection < SkinOption.this.skins.size()){
+										showSkinInfo((SkinInfo)SkinOption.this.skins.get(selection));
+									}
+								}
+							});
+							
+							int selection = SkinOption.this.combo.getSelectionIndex();
+							if(selection >= 0 && selection < SkinOption.this.skins.size()){
+								showSkinInfo((SkinInfo)SkinOption.this.skins.get(selection));
+							}
+							SkinOption.this.initialized = true;
+							SkinOption.this.pack();
+						}
+					}
+				}).start();
+			}
+		}).start();
+	}
+	
+	protected void showSkinInfo(final SkinInfo info){
+		loadCursor(SWT.CURSOR_WAIT);
+		new SyncThread(new Runnable() {
+			public void run() {
+				if(!isDisposed()){
+					disposePreview();
+					SkinOption.this.nameLabel.setText(info.getName());
+					SkinOption.this.authorLabel.setText(info.getAuthor());
+					SkinOption.this.descriptionLabel.setText(info.getDescription());
+					SkinOption.this.versionLabel.setText((info.getDate() == null)?info.getVersion():info.getVersion() + " (" + info.getDate() + ")");
+					if(info.getPreview() != null){
+						SkinOption.this.preview = TGFileUtils.loadImage(info.getSkin(),info.getPreview());
+					}
+					SkinOption.this.previewArea.redraw();
+					loadCursor(SWT.CURSOR_ARROW);
+				}
+			}
+		}).start();
+	}
+	
+	public void updateConfig() {
+		if(this.initialized){
+			int selection = this.combo.getSelectionIndex();
+			if(selection >= 0 && selection < this.skins.size()){
+				SkinInfo info = (SkinInfo)this.skins.get(selection);
+				getConfig().setValue(TGConfigKeys.SKIN,info.getSkin());
+			}
+		}
+	}
+	
+	public void updateDefaults(){
+		if(this.initialized){
+			getConfig().setValue(TGConfigKeys.SKIN, getDefaults().getValue(TGConfigKeys.SKIN));
+		}
+	}
+	
+	public void applyConfig(boolean force){
+		if(force || (this.initialized && TuxGuitar.instance().getIconManager().shouldReload())){
+			addSyncThread(new Runnable() {
+				public void run() {
+					TuxGuitar.instance().loadSkin();
+				}
+			});
+		}
+	}
+	
+	public void dispose(){
+		this.disposePreview();
+	}
+	
+	public void disposePreview(){
+		if(this.preview != null && !this.preview.isDisposed()){
+			this.preview.dispose();
+		}
+	}
+	
+	private class SkinInfo{
+		private String skin;
+		private String name;
+		private String date;
+		private String author;
+		private String version;
+		private String description;
+		private String preview;
+		
+		public SkinInfo(String skin){
+			this.skin = skin;
+		}
+		
+		public String getAuthor() {
+			return this.author;
+		}
+		
+		public void setAuthor(String author) {
+			this.author = author;
+		}
+		
+		public String getDate() {
+			return this.date;
+		}
+		
+		public void setDate(String date) {
+			this.date = date;
+		}
+		
+		public String getDescription() {
+			return this.description;
+		}
+		
+		public void setDescription(String description) {
+			this.description = description;
+		}
+		
+		public String getName() {
+			return this.name;
+		}
+		
+		public void setName(String name) {
+			this.name = name;
+		}
+		
+		public String getVersion() {
+			return this.version;
+		}
+		
+		public void setVersion(String version) {
+			this.version = version;
+		}
+		
+		public String getSkin() {
+			return this.skin;
+		}
+		
+		public String getPreview() {
+			return this.preview;
+		}
+		
+		public void setPreview(String preview) {
+			this.preview = preview;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/SoundOption.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/SoundOption.java
new file mode 100644
index 0000000..ed6c49c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/SoundOption.java
@@ -0,0 +1,156 @@
+package org.herac.tuxguitar.app.system.config.items;
+
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.ToolBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.system.config.TGConfigEditor;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.player.base.MidiOutputPort;
+import org.herac.tuxguitar.player.base.MidiSequencer;
+
+public class SoundOption extends Option{
+	protected boolean initialized;
+	
+	//**MidiSequencer module**//
+	protected String msCurrentKey;
+	protected List msList;
+	protected Combo msCombo;
+	
+	//**MidiPort module**//
+	protected String mpCurrentKey;
+	protected List mpList;
+	protected Combo mpCombo;
+	
+	public SoundOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
+		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.sound"));
+		this.initialized = false;
+	}
+	
+	public void createOption(){
+		getToolItem().setText(TuxGuitar.getProperty("settings.config.sound"));
+		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionSound());
+		getToolItem().addSelectionListener(this);
+		
+		//---Midi Sequencer---//
+		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("midi.sequencer"));
+		
+		Composite msComposite = new Composite(getComposite(),SWT.NONE);
+		msComposite.setLayout(new GridLayout());
+		msComposite.setLayoutData(getTabbedData());
+		
+		this.msCombo = new Combo(msComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.msCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		//---Midi Port---//
+		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("midi.port"));
+		
+		Composite mpComposite = new Composite(getComposite(),SWT.NONE);
+		mpComposite.setLayout(new GridLayout());
+		mpComposite.setLayoutData(getTabbedData());
+		
+		this.mpCombo = new Combo(mpComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
+		this.mpCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.loadConfig();
+	}
+	
+	protected void loadConfig(){
+		new Thread(new Runnable() {
+			public void run() {
+				SoundOption.this.mpList = TuxGuitar.instance().getPlayer().listOutputPorts();
+				SoundOption.this.msList = TuxGuitar.instance().getPlayer().listSequencers();
+				
+				SoundOption.this.mpCurrentKey = getConfig().getStringValue(TGConfigKeys.MIDI_PORT);
+				SoundOption.this.msCurrentKey = getConfig().getStringValue(TGConfigKeys.MIDI_SEQUENCER);
+				
+				MidiSequencer sequencer = TuxGuitar.instance().getPlayer().getSequencer();
+				MidiOutputPort outputPort = TuxGuitar.instance().getPlayer().getOutputPort();
+				
+				final String msLoaded = (sequencer != null ? sequencer.getKey() : null ) ;
+				final String mpLoaded = (outputPort != null ? outputPort.getKey() : null );
+				
+				new SyncThread(new Runnable() {
+					public void run() {
+						if(!isDisposed()){
+							//---Midi Sequencer---//
+							String loadedSequencer = msLoaded;
+							for (int i = 0; i < SoundOption.this.msList.size(); i++) {
+								MidiSequencer sequencer = (MidiSequencer)SoundOption.this.msList.get(i);
+								SoundOption.this.msCombo.add(sequencer.getName());
+								if(SoundOption.this.msCurrentKey != null && SoundOption.this.msCurrentKey.equals(sequencer.getKey())){
+									SoundOption.this.msCombo.select(i);
+									loadedSequencer = null;
+								}else if(loadedSequencer != null && loadedSequencer.equals(sequencer.getKey())){
+									SoundOption.this.msCombo.select(i);
+								}
+							}
+							if(SoundOption.this.msCombo.getSelectionIndex() < 0 && SoundOption.this.msCombo.getItemCount() > 0){
+								SoundOption.this.msCombo.select(0);
+							}
+							
+							//---Midi Port---//
+							String loadedPort = mpLoaded;
+							for (int i = 0; i < SoundOption.this.mpList.size(); i++) {
+								MidiOutputPort port = (MidiOutputPort)SoundOption.this.mpList.get(i);
+								SoundOption.this.mpCombo.add(port.getName());
+								if(SoundOption.this.mpCurrentKey != null && SoundOption.this.mpCurrentKey.equals(port.getKey())){
+									SoundOption.this.mpCombo.select(i);
+									loadedPort = null;
+								}else if(loadedPort != null && loadedPort.equals(port.getKey())){
+									SoundOption.this.mpCombo.select(i);
+								}
+							}
+							if(SoundOption.this.mpCombo.getSelectionIndex() < 0 && SoundOption.this.mpCombo.getItemCount() > 0){
+								SoundOption.this.mpCombo.select(0);
+							}
+							
+							SoundOption.this.initialized = true;
+							SoundOption.this.pack();
+						}
+					}
+				}).start();
+			}
+		}).start();
+	}
+	
+	public void updateConfig(){
+		if(this.initialized){
+			int msIndex = this.msCombo.getSelectionIndex();
+			if(msIndex >= 0 && msIndex < this.msList.size()){
+				getConfig().setValue(TGConfigKeys.MIDI_SEQUENCER, ((MidiSequencer)this.msList.get(msIndex)).getKey());
+			}
+			int mpIndex = this.mpCombo.getSelectionIndex();
+			if(mpIndex >= 0 && mpIndex < this.mpList.size()){
+				MidiOutputPort midiPort = (MidiOutputPort)this.mpList.get(mpIndex);
+				getConfig().setValue(TGConfigKeys.MIDI_PORT, midiPort.getKey());
+			}
+		}
+	}
+	
+	public void updateDefaults(){
+		if(this.initialized){
+			getConfig().setValue(TGConfigKeys.MIDI_PORT, getDefaults().getValue(TGConfigKeys.MIDI_PORT));
+			getConfig().setValue(TGConfigKeys.MIDI_SEQUENCER, getDefaults().getValue(TGConfigKeys.MIDI_SEQUENCER));
+		}
+	}
+	
+	public void applyConfig(final boolean force){
+		if(force || this.initialized){
+			String midiSequencer = getConfig().getStringValue(TGConfigKeys.MIDI_SEQUENCER);
+			if(force || !TuxGuitar.instance().getPlayer().isSequencerOpen(midiSequencer)){
+				TuxGuitar.instance().getPlayer().openSequencer(midiSequencer, false);
+			}
+			String midiPort = getConfig().getStringValue(TGConfigKeys.MIDI_PORT);
+			if(force || !TuxGuitar.instance().getPlayer().isOutputPortOpen(midiPort)){
+				TuxGuitar.instance().getPlayer().openOutputPort(midiPort, false);
+			}
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/StylesOption.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/StylesOption.java
new file mode 100644
index 0000000..4af6de8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/StylesOption.java
@@ -0,0 +1,361 @@
+package org.herac.tuxguitar.app.system.config.items;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.ColorDialog;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.FontDialog;
+import org.eclipse.swt.widgets.ToolBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.system.config.TGConfigEditor;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+
+public class StylesOption extends Option{
+	private static final int BUTTON_WIDTH = 200;
+	private static final int BUTTON_HEIGHT = 0;
+	
+	protected boolean initialized;
+	protected FontData defaultFontData;
+	protected FontData noteFontData;
+	protected FontData timeSignatureFontData;
+	protected FontData textFontData;
+	protected FontData lyricFontData;
+	protected FontData printerDefaultFontData;
+	protected FontData printerNoteFontData;
+	protected FontData printerTSFontData;
+	protected FontData printerTextFontData;
+	protected FontData printerLyricFontData;
+	
+	protected Button defaultFontButton;
+	protected Button noteFontButton;
+	protected Button timeSignatureFontButton;
+	protected Button textFontButton;
+	protected Button lyricFontButton;
+	
+	protected Button printerDefaultFontButton;
+	protected Button printerNoteFontButton;
+	protected Button printerTSFontButton;
+	protected Button printerTextFontButton;
+	protected Button printerLyricFontButton;
+	
+	protected ButtonColor scoreNoteColorButton;
+	protected ButtonColor tabNoteColorButton;
+	protected ButtonColor playNoteColorButton;
+	protected ButtonColor linesColorButton;
+	
+	public StylesOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
+		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.styles"));
+		this.initialized = false;
+		this.defaultFontData = new FontData();
+		this.noteFontData = new FontData();
+		this.timeSignatureFontData = new FontData();
+		this.textFontData = new FontData();
+		this.lyricFontData = new FontData();
+		this.printerDefaultFontData = new FontData();
+		this.printerNoteFontData = new FontData();
+		this.printerTSFontData = new FontData();
+		this.printerTextFontData = new FontData();
+		this.printerLyricFontData = new FontData();
+	}
+	
+	public void createOption(){
+		getToolItem().setText(TuxGuitar.getProperty("settings.config.styles"));
+		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionStyle());
+		getToolItem().addSelectionListener(this);
+		
+		//=================================================== EDITOR STYLES ===================================================//
+		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.styles.general"));
+		
+		Composite composite = new Composite(getComposite(),SWT.NONE);
+		composite.setLayout(new GridLayout(2,false));
+		composite.setLayoutData(getTabbedData());
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.default"));
+		this.defaultFontButton = new Button(composite, SWT.PUSH);
+		this.defaultFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.defaultFontButton,this.defaultFontData);
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.note"));
+		this.noteFontButton = new Button(composite, SWT.PUSH);
+		this.noteFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.noteFontButton,this.noteFontData);
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.lyric"));
+		this.lyricFontButton = new Button(composite, SWT.PUSH);
+		this.lyricFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.lyricFontButton,this.lyricFontData);
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.text"));
+		this.textFontButton = new Button(composite, SWT.PUSH);
+		this.textFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.textFontButton,this.textFontData);
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.time-signature"));
+		this.timeSignatureFontButton = new Button(composite, SWT.PUSH);
+		this.timeSignatureFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.timeSignatureFontButton,this.timeSignatureFontData);
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.score-note"));
+		this.scoreNoteColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose"));
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.tab-note"));
+		this.tabNoteColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose"));
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.play-note"));
+		this.playNoteColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose"));
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.lines"));
+		this.linesColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose"));
+		
+		//=================================================== PRINTER STYLES ===================================================//
+		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.styles.printer"));
+		
+		composite = new Composite(getComposite(),SWT.NONE);
+		composite.setLayout(new GridLayout(2,false));
+		composite.setLayoutData(getTabbedData());
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.default"));
+		this.printerDefaultFontButton = new Button(composite, SWT.PUSH);
+		this.printerDefaultFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.printerDefaultFontButton,this.printerDefaultFontData);
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.note"));
+		this.printerNoteFontButton = new Button(composite, SWT.PUSH);
+		this.printerNoteFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.printerNoteFontButton,this.printerNoteFontData);
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.lyric"));
+		this.printerLyricFontButton = new Button(composite, SWT.PUSH);
+		this.printerLyricFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.printerLyricFontButton,this.printerLyricFontData);
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.text"));
+		this.printerTextFontButton = new Button(composite, SWT.PUSH);
+		this.printerTextFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.printerTextFontButton,this.printerTextFontData);
+		
+		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.time-signature"));
+		this.printerTSFontButton = new Button(composite, SWT.PUSH);
+		this.printerTSFontButton.setLayoutData(makeButtonData());
+		this.addFontButtonListeners(this.printerTSFontButton,this.printerTSFontData);
+		
+		this.loadConfig();
+	}
+	
+	private void addFontButtonListeners(final Button button, final FontData fontData){
+		button.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				if(StylesOption.this.initialized){
+					Font font = new Font(getDisplay(),fontData);
+					FontData[] fontDataList = font.getFontData();
+					font.dispose();
+					FontDialog fontDialog = new FontDialog(getShell());
+					fontDialog.setFontList(fontDataList);
+					FontData result = fontDialog.open();
+					if(result != null){
+						loadFontData(result, fontData,button);
+					}
+				}
+			}
+		});
+	}
+	
+	protected void loadFontData(FontData src, FontData dst, Button button){
+		copyFontData(src, dst);
+		setButtonFontData(button, dst);
+	}
+	
+	protected void loadColor(ButtonColor button, RGB rgb){
+		button.loadColor(rgb);
+	}
+	
+	protected void setButtonFontData(Button button,FontData fontData) {
+		String text = fontData.getName();
+		if( (fontData.getStyle() & SWT.BOLD) != 0 ){
+			text += " Bold";
+		}
+		if( (fontData.getStyle() & SWT.ITALIC) != 0 ){
+			text += " Italic";
+		}
+		text += (" " + fontData.getHeight());
+		button.setText(text);
+	}
+	
+	protected void copyFontData(FontData src, FontData dst){
+		dst.setName( src.getName() );
+		dst.setStyle( src.getStyle() );
+		dst.setHeight( src.getHeight() );
+	}
+	
+	protected void copyRGB(RGB src, RGB dst){
+		dst.red = src.red;
+		dst.green = src.green;
+		dst.blue = src.blue;
+	}
+	
+	protected void loadConfig(){
+		new Thread(new Runnable() {
+			public void run() {
+				final FontData defaultFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_DEFAULT);
+				final FontData noteFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_NOTE);
+				final FontData timeSignatureFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_TIME_SIGNATURE);
+				final FontData textFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_TEXT);
+				final FontData lyricFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_LYRIC);
+				final FontData printerDefaultFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_DEFAULT);
+				final FontData printerNoteFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_NOTE);
+				final FontData printerTSFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE);
+				final FontData printerTextFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_TEXT);
+				final FontData printerLyricFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_LYRIC);
+				final RGB scoreNoteRGB  = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_SCORE_NOTE);
+				final RGB tabNoteRGB  = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_TAB_NOTE);
+				final RGB playNoteRGB  = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_PLAY_NOTE);
+				final RGB linesRGB  = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_LINE);
+				new SyncThread(new Runnable() {
+					public void run() {
+						if(!isDisposed()){
+							loadFontData(defaultFontData,StylesOption.this.defaultFontData,StylesOption.this.defaultFontButton);
+							loadFontData(noteFontData,StylesOption.this.noteFontData,StylesOption.this.noteFontButton);
+							loadFontData(timeSignatureFontData,StylesOption.this.timeSignatureFontData,StylesOption.this.timeSignatureFontButton);
+							loadFontData(textFontData,StylesOption.this.textFontData,StylesOption.this.textFontButton);
+							loadFontData(lyricFontData,StylesOption.this.lyricFontData,StylesOption.this.lyricFontButton);
+							loadFontData(printerDefaultFontData,StylesOption.this.printerDefaultFontData,StylesOption.this.printerDefaultFontButton);
+							loadFontData(printerNoteFontData,StylesOption.this.printerNoteFontData,StylesOption.this.printerNoteFontButton);
+							loadFontData(printerTSFontData,StylesOption.this.printerTSFontData,StylesOption.this.printerTSFontButton);
+							loadFontData(printerTextFontData,StylesOption.this.printerTextFontData,StylesOption.this.printerTextFontButton);
+							loadFontData(printerLyricFontData,StylesOption.this.printerLyricFontData,StylesOption.this.printerLyricFontButton);
+							StylesOption.this.scoreNoteColorButton.loadColor(scoreNoteRGB);
+							StylesOption.this.tabNoteColorButton.loadColor(tabNoteRGB);
+							StylesOption.this.playNoteColorButton.loadColor(playNoteRGB);
+							StylesOption.this.linesColorButton.loadColor(linesRGB);
+							StylesOption.this.initialized = true;
+							StylesOption.this.pack();
+						}
+					}
+				}).start();
+			}
+		}).start();
+	}
+	
+	public GridData makeButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.CENTER, true, true);
+		data.minimumWidth = BUTTON_WIDTH;
+		data.minimumHeight = BUTTON_HEIGHT;
+		return data;
+	}
+	
+	public void updateConfig(){
+		if(this.initialized){
+			getConfig().setValue(TGConfigKeys.FONT_DEFAULT,this.defaultFontData);
+			getConfig().setValue(TGConfigKeys.FONT_NOTE,this.noteFontData);
+			getConfig().setValue(TGConfigKeys.FONT_TIME_SIGNATURE,this.timeSignatureFontData);
+			getConfig().setValue(TGConfigKeys.FONT_TEXT,this.textFontData);
+			getConfig().setValue(TGConfigKeys.FONT_LYRIC,this.lyricFontData);
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_DEFAULT,this.printerDefaultFontData);
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_NOTE,this.printerNoteFontData);
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE,this.printerTSFontData);
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_TEXT,this.printerTextFontData);
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_LYRIC,this.printerLyricFontData);
+			getConfig().setValue(TGConfigKeys.COLOR_SCORE_NOTE,this.scoreNoteColorButton.getValue());
+			getConfig().setValue(TGConfigKeys.COLOR_TAB_NOTE,this.tabNoteColorButton.getValue());
+			getConfig().setValue(TGConfigKeys.COLOR_PLAY_NOTE,this.playNoteColorButton.getValue());
+			getConfig().setValue(TGConfigKeys.COLOR_LINE,this.linesColorButton.getValue());
+		}
+	}
+	
+	public void updateDefaults(){
+		if(this.initialized){
+			getConfig().setValue(TGConfigKeys.FONT_DEFAULT, getDefaults().getValue(TGConfigKeys.FONT_DEFAULT));
+			getConfig().setValue(TGConfigKeys.FONT_NOTE, getDefaults().getValue(TGConfigKeys.FONT_NOTE));
+			getConfig().setValue(TGConfigKeys.FONT_TIME_SIGNATURE, getDefaults().getValue(TGConfigKeys.FONT_TIME_SIGNATURE));
+			getConfig().setValue(TGConfigKeys.FONT_TEXT, getDefaults().getValue(TGConfigKeys.FONT_TEXT));
+			getConfig().setValue(TGConfigKeys.FONT_LYRIC, getDefaults().getValue(TGConfigKeys.FONT_LYRIC));
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_DEFAULT, getDefaults().getValue(TGConfigKeys.FONT_PRINTER_DEFAULT));
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_NOTE, getDefaults().getValue(TGConfigKeys.FONT_PRINTER_NOTE));
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE, getDefaults().getValue(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE));
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_TEXT, getDefaults().getValue(TGConfigKeys.FONT_PRINTER_TEXT));
+			getConfig().setValue(TGConfigKeys.FONT_PRINTER_LYRIC, getDefaults().getValue(TGConfigKeys.FONT_PRINTER_LYRIC));
+			getConfig().setValue(TGConfigKeys.COLOR_SCORE_NOTE, getDefaults().getValue(TGConfigKeys.COLOR_SCORE_NOTE));
+			getConfig().setValue(TGConfigKeys.COLOR_TAB_NOTE, getDefaults().getValue(TGConfigKeys.COLOR_TAB_NOTE));
+			getConfig().setValue(TGConfigKeys.COLOR_PLAY_NOTE, getDefaults().getValue(TGConfigKeys.COLOR_PLAY_NOTE));
+			getConfig().setValue(TGConfigKeys.COLOR_LINE, getDefaults().getValue(TGConfigKeys.COLOR_LINE));
+		}
+	}
+	
+	public void applyConfig(boolean force){
+		if(force || this.initialized){
+			addSyncThread(new Runnable() {
+				public void run() {
+					TuxGuitar.instance().loadStyles();
+				}
+			});
+		}
+	}
+	
+	private class ButtonColor {
+		protected Button button;
+		protected Color color;
+		protected RGB value;
+		
+		public ButtonColor(Composite parent, int style, Object layoutData, String text){
+			this.value = new RGB(0,0,0);
+			this.button = new Button(parent, style);
+			this.button.setLayoutData(layoutData);
+			this.button.setText(text);
+			this.addListeners();
+		}
+		
+		protected void loadColor(RGB rgb){
+			this.value.red = rgb.red;
+			this.value.green = rgb.green;
+			this.value.blue = rgb.blue;
+			
+			Color color = new Color(this.button.getDisplay(), this.value);
+			this.button.setForeground(color);
+			this.disposeColor();
+			this.color = color;
+		}
+		
+		protected void disposeColor(){
+			if(this.color != null && !this.color.isDisposed()){
+				this.color.dispose();
+				this.color = null;
+			}
+		}
+		
+		private void addListeners(){
+			this.button.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent event) {
+					if(StylesOption.this.initialized){
+						ColorDialog dlg = new ColorDialog(getShell());
+						dlg.setRGB(ButtonColor.this.value);
+						dlg.setText(TuxGuitar.getProperty("choose-color"));
+						RGB result = dlg.open();
+						if (result != null) {
+							ButtonColor.this.loadColor(result);
+						}
+					}
+				}
+			});
+			this.button.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent e) {
+					ButtonColor.this.disposeColor();
+				}
+			});
+		}
+		
+		protected RGB getValue(){
+			return this.value;
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/ToolBarsOption.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/ToolBarsOption.java
new file mode 100644
index 0000000..a189d07
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/config/items/ToolBarsOption.java
@@ -0,0 +1,175 @@
+package org.herac.tuxguitar.app.system.config.items;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.ToolBar;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.items.ToolItems;
+import org.herac.tuxguitar.app.system.config.TGConfigEditor;
+
+public class ToolBarsOption extends Option{
+	protected boolean initialized;
+	
+	protected Table table;
+	protected TableColumn column;
+	protected Button moveUp;
+	protected Button moveDown;
+	
+	public ToolBarsOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
+		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.toolbars"), SWT.FILL,SWT.FILL);
+		this.initialized = false;
+	}
+	
+	public void createOption() {
+		getToolItem().setText(TuxGuitar.getProperty("settings.config.toolbars"));
+		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionToolbars());
+		getToolItem().addSelectionListener(this);
+		
+		showLabel(getComposite(),SWT.FILL, SWT.TOP, true, false, SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.toolbars.tip"));
+		
+		Composite composite = new Composite(getComposite(),SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL));
+		
+		this.table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL);
+		this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.table.setHeaderVisible(true);
+		this.table.setLinesVisible(false);
+		
+		this.column = new TableColumn(this.table, SWT.LEFT);
+		this.column.setText(TuxGuitar.getProperty("settings.config.toolbars.list"));
+		this.column.pack();
+		
+		Composite buttons = new Composite(getComposite(), SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false));
+		
+		this.moveUp = new Button(buttons,SWT.PUSH);
+		this.moveUp.setLayoutData(getButtonData());
+		this.moveUp.setText(TuxGuitar.getProperty("settings.config.toolbars.move-up"));
+		this.moveUp.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				moveUp();
+			}
+		});
+		
+		this.moveDown = new Button(buttons,SWT.PUSH);
+		this.moveDown.setLayoutData(getButtonData());
+		this.moveDown.setText(TuxGuitar.getProperty("settings.config.toolbars.move-down"));
+		this.moveDown.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				moveDown();
+			}
+		});
+		
+		this.loadConfig();
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected void moveUp(){
+		if(this.initialized){
+			int count = this.table.getItemCount();
+			int index = this.table.getSelectionIndex();
+			if(index > 0 && index < count){
+				TableItem item1 = this.table.getItem(index);
+				TableItem item2 = this.table.getItem(index - 1);
+				this.swapItems(item1,item2);
+				this.table.setSelection(index - 1);
+			}
+		}
+	}
+	
+	protected void moveDown(){
+		if(this.initialized){
+			int count = this.table.getItemCount();
+			int index = this.table.getSelectionIndex();
+			if(index >= 0 && index < ( count - 1 ) ){
+				TableItem item1 = this.table.getItem(index);
+				TableItem item2 = this.table.getItem(index + 1);
+				this.swapItems(item1,item2);
+				this.table.setSelection(index + 1);
+			}
+		}
+	}
+	
+	protected void swapItems(TableItem item1, TableItem item2){
+		ToolItems data1 = (ToolItems)item1.getData();
+		ToolItems data2 = (ToolItems)item2.getData();
+		loadItem(item1, data2);
+		loadItem(item2, data1);
+	}
+	
+	protected void loadItem(TableItem item, ToolItems data){
+		item.setText( TuxGuitar.getProperty( data.getName() ));
+		item.setChecked( data.isEnabled() );
+		item.setData( data );
+	}
+	
+	protected void loadConfig(){
+		new Thread(new Runnable() {
+			public void run() {
+				final ToolItems[] items = TuxGuitar.instance().getItemManager().getToolBars();
+				new SyncThread(new Runnable() {
+					public void run() {
+						if(!isDisposed()){
+							for(int i = 0;i < items.length; i ++){
+								loadItem(new TableItem(ToolBarsOption.this.table, SWT.NONE), items[i]);
+							}
+							ToolBarsOption.this.initialized = true;
+							ToolBarsOption.this.column.pack();
+							ToolBarsOption.this.pack();
+						}
+					}
+				}).start();
+			}
+		}).start();
+	}
+	
+	public void updateConfig() {
+		if(this.initialized){
+			for( int i = 0 ; i < this.table.getItemCount() ; i ++){
+				TableItem item = this.table.getItem( i );
+				ToolItems data = (ToolItems)item.getData();
+				TuxGuitar.instance().getItemManager().setToolBarStatus(data.getName(), item.getChecked() , i);
+			}
+			TuxGuitar.instance().getItemManager().writeToolBars();
+		}
+	}
+	
+	public void updateDefaults() {
+		if(this.initialized){
+			TuxGuitar.instance().getItemManager().setDefaultToolBars();
+			TuxGuitar.instance().getItemManager().writeToolBars();
+		}
+	}
+	
+	public void applyConfig(boolean force){
+		if(force || (this.initialized && TuxGuitar.instance().getItemManager().shouldReloadToolBars())){
+			addSyncThread(new Runnable() {
+				public void run() {
+					TuxGuitar.instance().loadToolBars();
+				}
+			});
+		}
+	}
+	
+	public Point computeSize(){
+		return this.computeSize(SWT.DEFAULT,SWT.NONE);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/error/TGErrorAdapter.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/error/TGErrorAdapter.java
new file mode 100644
index 0000000..0c964e0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/error/TGErrorAdapter.java
@@ -0,0 +1,11 @@
+package org.herac.tuxguitar.app.system.error;
+
+import org.herac.tuxguitar.util.error.TGErrorManager;
+
+public class TGErrorAdapter {
+	
+	public static void initialize() {
+		TGErrorManager.getInstance().addErrorHandler(new TGGuiOutErrorHandler());
+		TGErrorManager.getInstance().addErrorHandler(new TGStdOutErrorHandler());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/error/TGGuiOutErrorHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/error/TGGuiOutErrorHandler.java
new file mode 100644
index 0000000..064ad06
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/error/TGGuiOutErrorHandler.java
@@ -0,0 +1,11 @@
+package org.herac.tuxguitar.app.system.error;
+
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.util.error.TGErrorHandler;
+
+public class TGGuiOutErrorHandler implements TGErrorHandler {
+	
+	public void handleError(Throwable throwable) {
+		MessageDialog.errorMessage(throwable);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/error/TGStdOutErrorHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/error/TGStdOutErrorHandler.java
new file mode 100644
index 0000000..8614dfe
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/error/TGStdOutErrorHandler.java
@@ -0,0 +1,10 @@
+package org.herac.tuxguitar.app.system.error;
+
+import org.herac.tuxguitar.util.error.TGErrorHandler;
+
+public class TGStdOutErrorHandler implements TGErrorHandler {
+	
+	public void handleError(Throwable throwable) {
+		throwable.printStackTrace();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/icons/IconLoader.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/icons/IconLoader.java
new file mode 100644
index 0000000..49886fa
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/icons/IconLoader.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.app.system.icons;
+
+public interface IconLoader {
+	
+	public void loadIcons();
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/icons/IconManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/icons/IconManager.java
new file mode 100644
index 0000000..b7d038b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/icons/IconManager.java
@@ -0,0 +1,864 @@
+package org.herac.tuxguitar.app.system.icons;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Resource;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.song.models.TGDuration;
+
+public class IconManager {
+	private String theme;
+	private List loaders;
+	private List disposableIcons;
+	
+	private Image[] durations;
+	private Image editUndo;
+	private Image editRedo;
+	private Image editVoice1;
+	private Image editVoice2;
+	private Image editModeSelection;
+	private Image editModeEdition;
+	private Image editModeEditionNotNatural;
+	private Image layoutPage;
+	private Image layoutLinear;
+	private Image layoutMultitrack;
+	private Image layoutScore;
+	private Image layoutCompact;
+	private Image transport;
+	private Image transportFirst1;
+	private Image transportFirst2;
+	private Image transportLast1;
+	private Image transportLast2;
+	private Image transportPrevious1;
+	private Image transportPrevious2;
+	private Image transportNext1;
+	private Image transportNext2;
+	private Image transportStop1;
+	private Image transportStop2;
+	private Image transportPlay1;
+	private Image transportPlay2;
+	private Image transportPause;
+	private Image transportIconFirst1;
+	private Image transportIconFirst2;
+	private Image transportIconLast1;
+	private Image transportIconLast2;
+	private Image transportIconPrevious1;
+	private Image transportIconPrevious2;
+	private Image transportIconNext1;
+	private Image transportIconNext2;
+	private Image transportIconStop1;
+	private Image transportIconStop2;
+	private Image transportIconPlay1;
+	private Image transportIconPlay2;
+	private Image transportIconPause;
+	private Image transportMetronome;
+	private Image transportMode;
+	private Image markerList;
+	private Image markerAdd;
+	private Image markerRemove;
+	private Image markerFirst;
+	private Image markerLast;
+	private Image markerPrevious;
+	private Image markerNext;
+	private Image aboutDescription;
+	private Image aboutLicense;
+	private Image aboutAuthors;
+	private Image appIcon;
+	private Image appIcon16;
+	private Image appIcon24;
+	private Image appIcon32;
+	private Image appIcon48;
+	private Image appIcon64;
+	private Image appIcon96;
+	private Image appSplash;
+	private Image optionMain;
+	private Image optionStyle;
+	private Image optionSound;
+	private Image optionLanguage;
+	private Image optionToolbars;
+	private Image optionSkin;
+	private Image trackAdd;
+	private Image trackRemove;
+	private Image paintableTempo;
+	private Image paintableGrace;
+	private Image fretboard;
+	private Image fretboardFirstFret;
+	private Image fretboardFret;
+	private Image compositionTimeSignature;
+	private Image compositionTempo;
+	private Image compositionRepeatOpen;
+	private Image compositionRepeatClose;
+	private Image compositionRepeatAlternative;
+	private Image songProperties;
+	private Image durationDotted;
+	private Image durationDoubleDotted;
+	private Image divisionType;
+	private Image fileNew;
+	private Image fileOpen;
+	private Image fileSave;
+	private Image fileSaveAs;
+	private Image filePrint;
+	private Image filePrintPreview;
+	private Image chord;
+	private Image noteTied;
+	private Image instruments;
+	private Image dynamicPPP;
+	private Image dynamicPP;
+	private Image dynamicP;
+	private Image dynamicMP;
+	private Image dynamicMF;
+	private Image dynamicF;
+	private Image dynamicFF;
+	private Image dynamicFFF;
+	private Image effectDead;
+	private Image effectGhost;
+	private Image effectAccentuated;
+	private Image effectHeavyAccentuated;
+	private Image effectHarmonic;
+	private Image effectGrace;
+	private Image effectBend;
+	private Image effectTremoloBar;
+	private Image effectSlide;
+	private Image effectHammer;
+	private Image effectVibrato;
+	private Image effectTrill;
+	private Image effectTremoloPicking;
+	private Image effectPalmMute;
+	private Image effectStaccato;
+	private Image effectTapping;
+	private Image effectSlapping;
+	private Image effectPopping;
+	private Image effectFadeIn;
+	private Image browserNew;
+	private Image browserFile;
+	private Image browserFolder;
+	private Image browserRoot;
+	private Image browserBack;
+	private Image browserRefresh;
+	private Image settings;
+	
+	public IconManager(){
+		this.loaders = new ArrayList();
+		this.disposableIcons = new ArrayList();
+		this.loadIcons();
+	}
+	
+	public void addLoader(IconLoader loader){
+		if( !this.loaders.contains( loader )){
+			this.loaders.add(loader);
+		}
+	}
+	
+	public void removeLoader(IconLoader loader){
+		if( this.loaders.contains( loader )){
+			this.loaders.remove(loader);
+		}
+	}
+	
+	private void fireChanges(){
+		Iterator it = this.loaders.iterator();
+		while(it.hasNext()){
+			IconLoader loader = (IconLoader)it.next();
+			loader.loadIcons();
+		}
+	}
+	
+	public void reloadIcons(){
+		List disposableIcons = purgeDisposableIcons();
+		this.loadIcons();
+		this.fireChanges();
+		this.disposeIcons(disposableIcons);
+	}
+	
+	public void loadIcons(){
+		this.theme = TuxGuitar.instance().getConfig().getStringValue(TGConfigKeys.SKIN);
+		this.durations = new Image[]{
+			loadIcon("1.png"),
+			loadIcon("2.png"),
+			loadIcon("4.png"),
+			loadIcon("8.png"),
+			loadIcon("16.png"),
+			loadIcon("32.png"),
+			loadIcon("64.png")
+		};
+		this.paintableTempo = loadIcon("tempo.png");
+		this.paintableGrace = loadIcon("grace.png");
+		this.layoutPage = loadIcon("layout_page.png");
+		this.layoutLinear = loadIcon("layout_linear.png");
+		this.layoutMultitrack = loadIcon("layout_multitrack.png");
+		this.layoutScore = loadIcon("layout_score.png");
+		this.layoutCompact = loadIcon("layout_compact.png");
+		this.fileNew = loadIcon("new.png");
+		this.fileOpen = loadIcon("open.png");
+		this.fileSave = loadIcon("save.png");
+		this.fileSaveAs = loadIcon("save-as.png");
+		this.filePrint = loadIcon("print.png");
+		this.filePrintPreview = loadIcon("print-preview.png");
+		this.editUndo = loadIcon("edit_undo.png");
+		this.editRedo = loadIcon("edit_redo.png");
+		this.editVoice1 = loadIcon("edit_voice_1.png");
+		this.editVoice2 = loadIcon("edit_voice_2.png");
+		this.editModeSelection = loadIcon("edit_mode_selection.png");
+		this.editModeEdition = loadIcon("edit_mode_edition.png");
+		this.editModeEditionNotNatural = loadIcon("edit_mode_edition_no_natural.png");
+		this.appIcon = loadIcon("icon.png");
+		this.appIcon16 = loadIcon("icon-16x16.png");
+		this.appIcon24 = loadIcon("icon-24x24.png");
+		this.appIcon32 = loadIcon("icon-32x32.png");
+		this.appIcon48 = loadIcon("icon-48x48.png");
+		this.appIcon64 = loadIcon("icon-64x64.png");
+		this.appIcon96 = loadIcon("icon-96x96.png");
+		this.appSplash = loadIcon("splash.png");
+		this.aboutDescription = loadIcon("about_description.png");
+		this.aboutLicense = loadIcon("about_license.png");
+		this.aboutAuthors = loadIcon("about_authors.png");
+		this.optionMain = loadIcon("option_view.png");
+		this.optionStyle = loadIcon("option_style.png");
+		this.optionSound = loadIcon("option_sound.png");
+		this.optionSkin = loadIcon("option_skin.png");
+		this.optionLanguage= loadIcon("option_language.png");
+		this.optionToolbars = loadIcon("option_toolbars.png");
+		this.compositionTimeSignature = loadIcon("timesignature.png");
+		this.compositionTempo = loadIcon("tempoicon.png");
+		this.compositionRepeatOpen = loadIcon("openrepeat.png");
+		this.compositionRepeatClose = loadIcon("closerepeat.png");
+		this.compositionRepeatAlternative = loadIcon("repeat_alternative.png");
+		this.songProperties = loadIcon("song_properties.png");
+		this.trackAdd = loadIcon("track_add.png");
+		this.trackRemove = loadIcon("track_remove.png");
+		this.durationDotted = loadIcon("dotted.png");
+		this.durationDoubleDotted = loadIcon("doubledotted.png");
+		this.divisionType = loadIcon("division-type.png");
+		this.fretboard = loadIcon("fretboard.png");
+		this.fretboardFirstFret = loadIcon("firstfret.png");
+		this.fretboardFret = loadIcon("fret.png");
+		this.chord = loadIcon("chord.png");
+		this.noteTied = loadIcon("tiednote.png");
+		this.transport = loadIcon("transport.png");
+		this.transportFirst1 = loadIcon("transport_first_1.png");
+		this.transportFirst2 = loadIcon("transport_first_2.png");
+		this.transportLast1 = loadIcon("transport_last_1.png");
+		this.transportLast2 = loadIcon("transport_last_2.png");
+		this.transportPrevious1 = loadIcon("transport_previous_1.png");
+		this.transportPrevious2 = loadIcon("transport_previous_2.png");
+		this.transportNext1 = loadIcon("transport_next_1.png");
+		this.transportNext2 = loadIcon("transport_next_2.png");
+		this.transportStop1 = loadIcon("transport_stop_1.png");
+		this.transportStop2 = loadIcon("transport_stop_2.png");
+		this.transportPlay1 = loadIcon("transport_play_1.png");
+		this.transportPlay2 = loadIcon("transport_play_2.png");
+		this.transportPause = loadIcon("transport_pause.png");
+		this.transportIconFirst1 = loadIcon("transport_icon_first_1.png");
+		this.transportIconFirst2 = loadIcon("transport_icon_first_2.png");
+		this.transportIconLast1 = loadIcon("transport_icon_last_1.png");
+		this.transportIconLast2 = loadIcon("transport_icon_last_2.png");
+		this.transportIconPrevious1 = loadIcon("transport_icon_previous_1.png");
+		this.transportIconPrevious2 = loadIcon("transport_icon_previous_2.png");
+		this.transportIconNext1 = loadIcon("transport_icon_next_1.png");
+		this.transportIconNext2 = loadIcon("transport_icon_next_2.png");
+		this.transportIconStop1 = loadIcon("transport_icon_stop_1.png");
+		this.transportIconStop2 = loadIcon("transport_icon_stop_2.png");
+		this.transportIconPlay1 = loadIcon("transport_icon_play_1.png");
+		this.transportIconPlay2 = loadIcon("transport_icon_play_2.png");
+		this.transportIconPause = loadIcon("transport_icon_pause.png");
+		this.transportMetronome = loadIcon("transport_metronome.png");
+		this.transportMode = loadIcon("transport_mode.png");
+		this.markerList = loadIcon("marker_list.png");
+		this.markerAdd = loadIcon("marker_add.png");
+		this.markerRemove = loadIcon("marker_remove.png");
+		this.markerFirst = loadIcon("marker_first.png");
+		this.markerLast = loadIcon("marker_last.png");
+		this.markerPrevious = loadIcon("marker_previous.png");
+		this.markerNext = loadIcon("marker_next.png");
+		this.instruments = loadIcon("mixer.png");
+		this.dynamicPPP = loadIcon("dynamic_ppp.png");
+		this.dynamicPP = loadIcon("dynamic_pp.png");
+		this.dynamicP = loadIcon("dynamic_p.png");
+		this.dynamicMP =loadIcon("dynamic_mp.png");
+		this.dynamicMF = loadIcon("dynamic_mf.png");
+		this.dynamicF = loadIcon("dynamic_f.png");
+		this.dynamicFF = loadIcon("dynamic_ff.png");
+		this.dynamicFFF = loadIcon("dynamic_fff.png");
+		this.effectDead = loadIcon("effect_dead.png");
+		this.effectGhost = loadIcon("effect_ghost.png");
+		this.effectAccentuated = loadIcon("effect_accentuated.png");
+		this.effectHeavyAccentuated = loadIcon("effect_heavy_accentuated.png");
+		this.effectHarmonic = loadIcon("effect_harmonic.png");
+		this.effectGrace = loadIcon("effect_grace.png");
+		this.effectBend = loadIcon("effect_bend.png");
+		this.effectTremoloBar = loadIcon("effect_tremolo_bar.png");
+		this.effectSlide = loadIcon("effect_slide.png");
+		this.effectHammer = loadIcon("effect_hammer.png");
+		this.effectVibrato = loadIcon("effect_vibrato.png");
+		this.effectTrill= loadIcon("effect_trill.png");
+		this.effectTremoloPicking = loadIcon("effect_tremolo_picking.png");
+		this.effectPalmMute= loadIcon("effect_palm_mute.png");
+		this.effectStaccato = loadIcon("effect_staccato.png");
+		this.effectTapping = loadIcon("effect_tapping.png");
+		this.effectSlapping = loadIcon("effect_slapping.png");
+		this.effectPopping = loadIcon("effect_popping.png");
+		this.effectFadeIn = loadIcon("effect_fade_in.png");
+		this.browserNew = loadIcon("browser_new.png");
+		this.browserFile = loadIcon("browser_file.png");
+		this.browserFolder = loadIcon("browser_folder.png");
+		this.browserRoot = loadIcon("browser_root.png");
+		this.browserBack = loadIcon("browser_back.png");
+		this.browserRefresh = loadIcon("browser_refresh.png");
+		this.settings = loadIcon("settings.png");
+	}
+	
+	private Image loadIcon(String name){
+		Image image = TGFileUtils.loadImage(this.theme,name);
+		this.disposableIcons.add(image);
+		return image;
+	}
+	
+	private List purgeDisposableIcons(){
+		List disposableIcons = new ArrayList();
+		Iterator it = this.disposableIcons.iterator();
+		while( it.hasNext() ){
+			Resource resource = (Resource)it.next();
+			disposableIcons.add( resource );
+		}
+		this.disposableIcons.clear();
+		return disposableIcons;
+	}
+	
+	public void disposeIcons(List resources){
+		Iterator it = resources.iterator();
+		while( it.hasNext() ){
+			Image image = (Image)it.next();
+			image.dispose();
+		}
+	}
+	
+	public void disposeIcons(){
+		this.disposeIcons(purgeDisposableIcons());
+	}
+	
+	public boolean shouldReload(){
+		return (!this.theme.equals(TuxGuitar.instance().getConfig().getStringValue(TGConfigKeys.SKIN)));
+	}
+	
+	public Image getDuration(int value){
+		switch(value){
+		case TGDuration.WHOLE:
+			return this.durations[0];
+		case TGDuration.HALF:
+			return this.durations[1];
+		case TGDuration.QUARTER:
+			return this.durations[2];
+		case TGDuration.EIGHTH:
+			return this.durations[3];
+		case TGDuration.SIXTEENTH:
+			return this.durations[4];
+		case TGDuration.THIRTY_SECOND:
+			return this.durations[5];
+		case TGDuration.SIXTY_FOURTH:
+			return this.durations[6];
+		}
+		return null;
+	}
+	
+	public Image getAboutAuthors() {
+		return this.aboutAuthors;
+	}
+	
+	public Image getAboutDescription() {
+		return this.aboutDescription;
+	}
+	
+	public Image getAboutLicense() {
+		return this.aboutLicense;
+	}
+	
+	public Image getAppIcon() {
+		return this.appIcon;
+	}
+	
+	public Image getAppIcon16() {
+		return this.appIcon16;
+	}
+	
+	public Image getAppIcon24() {
+		return this.appIcon24;
+	}
+	
+	public Image getAppIcon32() {
+		return this.appIcon32;
+	}
+	
+	public Image getAppIcon48() {
+		return this.appIcon48;
+	}
+	
+	public Image getAppIcon64() {
+		return this.appIcon64;
+	}
+	
+	public Image getAppIcon96() {
+		return this.appIcon96;
+	}
+	
+	public Image getAppSplash() {
+		return this.appSplash;
+	}
+	
+	public Image getChord() {
+		return this.chord;
+	}
+	
+	public Image getCompositionRepeatClose() {
+		return this.compositionRepeatClose;
+	}
+	
+	public Image getCompositionRepeatAlternative() {
+		return this.compositionRepeatAlternative;
+	}
+	
+	public Image getCompositionRepeatOpen() {
+		return this.compositionRepeatOpen;
+	}
+	
+	public Image getCompositionTempo() {
+		return this.compositionTempo;
+	}
+	
+	public Image getCompositionTimeSignature() {
+		return this.compositionTimeSignature;
+	}
+	
+	public Image getDurationDotted() {
+		return this.durationDotted;
+	}
+	
+	public Image getDurationDoubleDotted() {
+		return this.durationDoubleDotted;
+	}
+	
+	public Image getDivisionType() {
+		return this.divisionType;
+	}
+	
+	public Image getDynamicF() {
+		return this.dynamicF;
+	}
+	
+	public Image getDynamicFF() {
+		return this.dynamicFF;
+	}
+	
+	public Image getDynamicFFF() {
+		return this.dynamicFFF;
+	}
+	
+	public Image getDynamicMF() {
+		return this.dynamicMF;
+	}
+	
+	public Image getDynamicMP() {
+		return this.dynamicMP;
+	}
+	
+	public Image getDynamicP() {
+		return this.dynamicP;
+	}
+	
+	public Image getDynamicPP() {
+		return this.dynamicPP;
+	}
+	
+	public Image getDynamicPPP() {
+		return this.dynamicPPP;
+	}
+	
+	public Image getEditModeEdition() {
+		return this.editModeEdition;
+	}
+	
+	public Image getEditModeEditionNotNatural() {
+		return this.editModeEditionNotNatural;
+	}
+	
+	public Image getEditModeSelection() {
+		return this.editModeSelection;
+	}
+	
+	public Image getEditRedo() {
+		return this.editRedo;
+	}
+	
+	public Image getEditUndo() {
+		return this.editUndo;
+	}
+	
+	public Image getEditVoice1() {
+		return this.editVoice1;
+	}
+	
+	public Image getEditVoice2() {
+		return this.editVoice2;
+	}
+	
+	public Image getEffectAccentuated() {
+		return this.effectAccentuated;
+	}
+	
+	public Image getEffectBend() {
+		return this.effectBend;
+	}
+	
+	public Image getEffectDead() {
+		return this.effectDead;
+	}
+	
+	public Image getEffectFadeIn() {
+		return this.effectFadeIn;
+	}
+	
+	public Image getEffectGhost() {
+		return this.effectGhost;
+	}
+	
+	public Image getEffectGrace() {
+		return this.effectGrace;
+	}
+	
+	public Image getEffectHammer() {
+		return this.effectHammer;
+	}
+	
+	public Image getEffectHarmonic() {
+		return this.effectHarmonic;
+	}
+	
+	public Image getEffectHeavyAccentuated() {
+		return this.effectHeavyAccentuated;
+	}
+	
+	public Image getEffectPalmMute() {
+		return this.effectPalmMute;
+	}
+	
+	public Image getEffectPopping() {
+		return this.effectPopping;
+	}
+	
+	public Image getEffectSlapping() {
+		return this.effectSlapping;
+	}
+	
+	public Image getEffectSlide() {
+		return this.effectSlide;
+	}
+	
+	public Image getEffectStaccato() {
+		return this.effectStaccato;
+	}
+	
+	public Image getEffectTapping() {
+		return this.effectTapping;
+	}
+	
+	public Image getEffectTremoloBar() {
+		return this.effectTremoloBar;
+	}
+	
+	public Image getEffectTremoloPicking() {
+		return this.effectTremoloPicking;
+	}
+	
+	public Image getEffectTrill() {
+		return this.effectTrill;
+	}
+	
+	public Image getEffectVibrato() {
+		return this.effectVibrato;
+	}
+	
+	public Image getFileNew() {
+		return this.fileNew;
+	}
+	
+	public Image getFileOpen() {
+		return this.fileOpen;
+	}
+	
+	public Image getFilePrint() {
+		return this.filePrint;
+	}
+	
+	public Image getFilePrintPreview() {
+		return this.filePrintPreview;
+	}
+	
+	public Image getFileSave() {
+		return this.fileSave;
+	}
+	
+	public Image getFileSaveAs() {
+		return this.fileSaveAs;
+	}
+	
+	public Image getFretboard() {
+		return this.fretboard;
+	}
+	
+	public Image getFretboardFirstFret() {
+		return this.fretboardFirstFret;
+	}
+	
+	public Image getFretboardFret() {
+		return this.fretboardFret;
+	}
+	
+	public Image getLayoutLinear() {
+		return this.layoutLinear;
+	}
+	
+	public Image getLayoutMultitrack() {
+		return this.layoutMultitrack;
+	}
+	
+	public Image getLayoutPage() {
+		return this.layoutPage;
+	}
+	
+	public Image getLayoutScore() {
+		return this.layoutScore;
+	}
+	
+	public Image getLayoutCompact() {
+		return this.layoutCompact;
+	}
+	
+	public Image getMarkerAdd() {
+		return this.markerAdd;
+	}
+	
+	public Image getMarkerFirst() {
+		return this.markerFirst;
+	}
+	
+	public Image getMarkerLast() {
+		return this.markerLast;
+	}
+	
+	public Image getMarkerList() {
+		return this.markerList;
+	}
+	
+	public Image getMarkerNext() {
+		return this.markerNext;
+	}
+	
+	public Image getMarkerPrevious() {
+		return this.markerPrevious;
+	}
+	
+	public Image getMarkerRemove() {
+		return this.markerRemove;
+	}
+	
+	public Image getInstruments() {
+		return this.instruments;
+	}
+	
+	public Image getNoteTied() {
+		return this.noteTied;
+	}
+	
+	public Image getOptionLanguage() {
+		return this.optionLanguage;
+	}
+	
+	public Image getOptionMain() {
+		return this.optionMain;
+	}
+	
+	public Image getOptionSound() {
+		return this.optionSound;
+	}
+	
+	public Image getOptionStyle() {
+		return this.optionStyle;
+	}
+	
+	public Image getOptionToolbars() {
+		return this.optionToolbars;
+	}
+	
+	public Image getOptionSkin() {
+		return this.optionSkin;
+	}
+	
+	public Image getPaintableGrace() {
+		return this.paintableGrace;
+	}
+	
+	public Image getPaintableTempo() {
+		return this.paintableTempo;
+	}
+	
+	public Image getSongProperties() {
+		return this.songProperties;
+	}
+	
+	public Image getTrackAdd() {
+		return this.trackAdd;
+	}
+	
+	public Image getTrackRemove() {
+		return this.trackRemove;
+	}
+	
+	public Image getTransport() {
+		return this.transport;
+	}
+	
+	public Image getTransportFirst1() {
+		return this.transportFirst1;
+	}
+	
+	public Image getTransportFirst2() {
+		return this.transportFirst2;
+	}
+	
+	public Image getTransportIconFirst1() {
+		return this.transportIconFirst1;
+	}
+	
+	public Image getTransportIconFirst2() {
+		return this.transportIconFirst2;
+	}
+	
+	public Image getTransportIconLast1() {
+		return this.transportIconLast1;
+	}
+	
+	public Image getTransportIconLast2() {
+		return this.transportIconLast2;
+	}
+	
+	public Image getTransportIconNext1() {
+		return this.transportIconNext1;
+	}
+	
+	public Image getTransportIconNext2() {
+		return this.transportIconNext2;
+	}
+	
+	public Image getTransportIconPause() {
+		return this.transportIconPause;
+	}
+	
+	public Image getTransportIconPlay1() {
+		return this.transportIconPlay1;
+	}
+	
+	public Image getTransportIconPlay2() {
+		return this.transportIconPlay2;
+	}
+	
+	public Image getTransportIconPrevious1() {
+		return this.transportIconPrevious1;
+	}
+	
+	public Image getTransportIconPrevious2() {
+		return this.transportIconPrevious2;
+	}
+	
+	public Image getTransportIconStop1() {
+		return this.transportIconStop1;
+	}
+	
+	public Image getTransportIconStop2() {
+		return this.transportIconStop2;
+	}
+	
+	public Image getTransportLast1() {
+		return this.transportLast1;
+	}
+	
+	public Image getTransportLast2() {
+		return this.transportLast2;
+	}
+	
+	public Image getTransportNext1() {
+		return this.transportNext1;
+	}
+	
+	public Image getTransportNext2() {
+		return this.transportNext2;
+	}
+	
+	public Image getTransportPause() {
+		return this.transportPause;
+	}
+	
+	public Image getTransportPlay1() {
+		return this.transportPlay1;
+	}
+	
+	public Image getTransportPlay2() {
+		return this.transportPlay2;
+	}
+	
+	public Image getTransportPrevious1() {
+		return this.transportPrevious1;
+	}
+	
+	public Image getTransportPrevious2() {
+		return this.transportPrevious2;
+	}
+	
+	public Image getTransportStop1() {
+		return this.transportStop1;
+	}
+	
+	public Image getTransportStop2() {
+		return this.transportStop2;
+	}
+	
+	public Image getTransportMetronome() {
+		return this.transportMetronome;
+	}
+	
+	public Image getTransportMode() {
+		return this.transportMode;
+	}
+	
+	public Image getBrowserBack() {
+		return this.browserBack;
+	}
+	
+	public Image getBrowserFile() {
+		return this.browserFile;
+	}
+	
+	public Image getBrowserFolder() {
+		return this.browserFolder;
+	}
+	
+	public Image getBrowserRefresh() {
+		return this.browserRefresh;
+	}
+	
+	public Image getBrowserRoot() {
+		return this.browserRoot;
+	}
+	
+	public Image getBrowserNew() {
+		return this.browserNew;
+	}
+	
+	public Image getSettings() {
+		return this.settings;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBinding.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBinding.java
new file mode 100644
index 0000000..031e4c5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBinding.java
@@ -0,0 +1,59 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+public class KeyBinding {
+	
+	private int mask;
+	private int key;
+	
+	public KeyBinding(int key,int mask){
+		this.key = key;
+		this.mask = mask;
+	}
+	
+	public KeyBinding(){
+		this(0,0);
+	}
+	
+	public int getKey() {
+		return this.key;
+	}
+	
+	public void setKey(int key) {
+		this.key = key;
+	}
+	
+	public int getMask() {
+		return this.mask;
+	}
+	
+	public void setMask(int mask) {
+		this.mask = mask;
+	}
+	
+	public boolean isSameAs(KeyBinding kb){
+		if( kb != null ){
+			if( this.getMask() == kb.getMask() ){
+				if( this.getKey() == kb.getKey() ){
+					return true;
+				}
+				if((this.getKey() & 0xffff) == (kb.getKey() & 0xffff) ){
+					return (!KeyBindingUtil.isSpecialKey(this.getKey()) && !KeyBindingUtil.isSpecialKey(kb.getKey()));
+				}
+			}
+		}
+		return false;
+	}
+	
+	public String toString(){
+		String mask = KeyBindingUtil.getConversionMask( this.getMask() );
+		String key = KeyBindingUtil.getConversionKey( this.getKey() );
+		if( key == null ){
+			key = Character.toString((char)(this.getKey() & 0xffff));
+		}
+		return (mask + key);
+	}
+	
+	public Object clone(){
+		return new KeyBinding(getKey(),getMask());
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingAction.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingAction.java
new file mode 100644
index 0000000..7541702
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingAction.java
@@ -0,0 +1,28 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+public class KeyBindingAction {
+	
+	private String action;
+	private KeyBinding keyBinding;
+	
+	public KeyBindingAction(String action,KeyBinding keyBinding){
+		this.action = action;
+		this.keyBinding = keyBinding;
+	}
+	
+	public String getAction() {
+		return this.action;
+	}
+	
+	public void setAction(String action) {
+		this.action = action;
+	}
+	
+	public KeyBinding getKeyBinding() {
+		return this.keyBinding;
+	}
+	
+	public void setKeyBinding(KeyBinding keyBinding) {
+		this.keyBinding = keyBinding;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionDefaults.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionDefaults.java
new file mode 100644
index 0000000..46ea28f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionDefaults.java
@@ -0,0 +1,30 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.herac.tuxguitar.app.system.keybindings.xml.KeyBindingReader;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+
+public class KeyBindingActionDefaults {
+
+	private static final String DEFAULT_SHORTCUT_FILE = "tuxguitar-shortcuts.xml";
+
+	public static List getDefaultKeyBindings() {
+		List list = new ArrayList();
+		try {
+			InputStream stream = TGFileUtils.getResourceAsStream(DEFAULT_SHORTCUT_FILE);
+			if (stream != null) {
+				List defaults = KeyBindingReader.getKeyBindings(stream);
+				if (defaults != null) {
+					list.addAll(defaults);
+				}
+			}
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+		return list;
+
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionManager.java
new file mode 100644
index 0000000..58f643b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingActionManager.java
@@ -0,0 +1,98 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.widgets.Control;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.keybindings.xml.KeyBindingReader;
+import org.herac.tuxguitar.app.system.keybindings.xml.KeyBindingWriter;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class KeyBindingActionManager {
+	
+	private List keyBindingsActions;
+	private KeyBindingListener listener;
+	
+	public KeyBindingActionManager(){
+		this.keyBindingsActions = new ArrayList();
+		this.init();
+	}
+	
+	public void init(){
+		List enabled = KeyBindingReader.getKeyBindings(getUserFileName());
+		this.keyBindingsActions.addAll( (enabled != null ? enabled : KeyBindingActionDefaults.getDefaultKeyBindings()) );
+		this.listener = new KeyBindingListener(this);
+	}
+	
+	private String getUserFileName(){
+		return TGFileUtils.PATH_USER_CONFIG + File.separator + "shortcuts.xml";
+	}
+	
+	public String getActionForKeyBinding(KeyBinding kb){
+		Iterator it = this.keyBindingsActions.iterator();
+		while(it.hasNext()){
+			KeyBindingAction keyBindingAction = (KeyBindingAction)it.next();
+			if( keyBindingAction.getKeyBinding() != null && kb.isSameAs( keyBindingAction.getKeyBinding() )){
+				if( isKeyBindingAvailable(keyBindingAction) ){
+					return keyBindingAction.getAction();
+				}
+			}
+		}
+		return null;
+	}
+	
+	public KeyBinding getKeyBindingForAction(String action){
+		Iterator it = this.keyBindingsActions.iterator();
+		while(it.hasNext()){
+			KeyBindingAction keyBindingAction = (KeyBindingAction)it.next();
+			if(action.equals( keyBindingAction.getAction() )){
+				if( isKeyBindingAvailable(keyBindingAction) ){
+					return keyBindingAction.getKeyBinding();
+				}
+			}
+		}
+		return null;
+	}
+	
+	public boolean isKeyBindingAvailable(KeyBindingAction keyBindingAction){
+		String actionId = keyBindingAction.getAction();
+		if( actionId != null ){
+			return TuxGuitar.instance().getActionAdapterManager().getKeyBindingActionIds().hasActionId(actionId);
+		}
+		return false;
+	}
+	
+	public void reset(List keyBindings){
+		this.keyBindingsActions.clear();
+		this.keyBindingsActions.addAll(keyBindings);
+	}
+	
+	public List getKeyBindingActions(){
+		return this.keyBindingsActions;
+	}
+	
+	public void saveKeyBindings(){
+		KeyBindingWriter.setBindings(getKeyBindingActions(),getUserFileName());
+	}
+	
+	public void appendListenersTo(Control control){
+		control.addKeyListener(this.listener);
+	}
+	
+	public void processKeyBinding(KeyBinding kb){
+		final String actionId = getActionForKeyBinding(kb);
+		if( actionId != null ){
+			TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+				public void run() throws TGException {
+					TGActionManager.getInstance().execute(actionId);
+				}
+			});
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingListener.java
new file mode 100644
index 0000000..8c2f759
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingListener.java
@@ -0,0 +1,24 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+
+public class KeyBindingListener implements KeyListener {
+	
+	private KeyBindingActionManager keyBindingActionManager;
+	
+	public KeyBindingListener(KeyBindingActionManager keyBindingActionManager){
+		this.keyBindingActionManager = keyBindingActionManager;
+	}
+	
+	public void keyPressed(KeyEvent event) {
+		KeyBinding keyBinding = new KeyBinding();
+		keyBinding.setKey(event.keyCode);
+		keyBinding.setMask(event.stateMask);
+		this.keyBindingActionManager.processKeyBinding(keyBinding);
+	}
+	
+	public void keyReleased(KeyEvent evt) {
+		//not implemented
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingUtil.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingUtil.java
new file mode 100644
index 0000000..0e06868
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyBindingUtil.java
@@ -0,0 +1,121 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+import org.eclipse.swt.SWT;
+
+public class KeyBindingUtil {
+	
+	public static final int F1 = SWT.F1;
+	public static final int F2 = SWT.F2;
+	public static final int F3 = SWT.F3;
+	public static final int F4 = SWT.F4;
+	public static final int F5 = SWT.F5;
+	public static final int F6 = SWT.F6;
+	public static final int F7 = SWT.F7;
+	public static final int F8 = SWT.F8;
+	public static final int F9 = SWT.F9;
+	public static final int F10 = SWT.F10;
+	public static final int F11 = SWT.F11;
+	public static final int F12 = SWT.F12;
+	public static final int ESC = SWT.ESC;
+	public static final int PAUSE = SWT.PAUSE;
+	public static final int PRINT_SCREEN = SWT.PRINT_SCREEN;
+	public static final int INSERT = SWT.INSERT;
+	public static final int DELETE = SWT.DEL;
+	public static final int HOME = SWT.HOME;
+	public static final int PAGE_UP = SWT.PAGE_UP;
+	public static final int PAGE_DOWN = SWT.PAGE_DOWN;
+	public static final int END = SWT.END;
+	public static final int ALT = SWT.ALT;
+	public static final int CONTROL = SWT.CONTROL;
+	public static final int COMMAND = SWT.COMMAND;
+	public static final int SHIFT = SWT.SHIFT;
+	public static final int TAB = SWT.TAB;
+	public static final int BACKSPACE = SWT.BS;
+	public static final int SPACE = 32;
+	public static final int ENTER = 13;
+	public static final int UP = 16777217;
+	public static final int DOWN = 16777218;
+	public static final int LEFT = 16777219;
+	public static final int RIGHT = 16777220;
+	public static final int NUMBER_0 = 48;
+	public static final int NUMBER_1 = 49;
+	public static final int NUMBER_2 = 50;
+	public static final int NUMBER_3 = 51;
+	public static final int NUMBER_4 = 52;
+	public static final int NUMBER_5 = 53;
+	public static final int NUMBER_6 = 54;
+	public static final int NUMBER_7 = 55;
+	public static final int NUMBER_8 = 56;
+	public static final int NUMBER_9 = 57;
+	public static final int MULTIPLY = SWT.KEYPAD_MULTIPLY;
+	public static final int DIVIDE = SWT.KEYPAD_DIVIDE;
+	public static final int DECIMAL = SWT.KEYPAD_DECIMAL;
+	
+	public static final String MASK_SEPARATOR = "+";
+	
+	public static final KeyCode[] MASK_KEYS = new KeyCode[]{
+		new KeyCode(CONTROL, "Control"),
+		new KeyCode(SHIFT, "Shift"),
+		new KeyCode(ALT,"Alt"),
+		new KeyCode(COMMAND,"\u2318"),
+	};
+	
+	public static final KeyCode[] SPECIAL_KEYS = new KeyCode[]{
+		new KeyCode(F1, "F1"),
+		new KeyCode(F2, "F2"),
+		new KeyCode(F3,"F3"),
+		new KeyCode(F4,"F4"),
+		new KeyCode(F5,"F5"),
+		new KeyCode(F6,"F6"),
+		new KeyCode(F7,"F7"),
+		new KeyCode(F8,"F8"),
+		new KeyCode(F9,"F9"),
+		new KeyCode(F10,"F10"),
+		new KeyCode(F11,"F11"),
+		new KeyCode(F12,"F12"),
+		new KeyCode(ESC,"Esc"),
+		new KeyCode(PAUSE,"Pause"),
+		new KeyCode(PRINT_SCREEN,"Print"),
+		new KeyCode(INSERT,"Ins"),
+		new KeyCode(DELETE,"Del"),
+		new KeyCode(HOME,"Home"),
+		new KeyCode(PAGE_UP,"PgUp"),
+		new KeyCode(PAGE_DOWN,"PgDn"),
+		new KeyCode(END,"End"),
+		new KeyCode(UP,"Up"),
+		new KeyCode(DOWN,"Down"),
+		new KeyCode(LEFT,"Left"),
+		new KeyCode(RIGHT,"Right"),
+		new KeyCode(TAB,"Tab"),
+		new KeyCode(SPACE,"Space"),
+		new KeyCode(ENTER,"Enter"),
+	};
+	
+	public static boolean isSpecialKey( int code ){
+		for(int i = 0; i < KeyBindingUtil.SPECIAL_KEYS.length; i++){
+			if (code == KeyBindingUtil.SPECIAL_KEYS[i].getCode()){
+				return true;
+			}
+		}
+		return false;
+	}
+	
+	public static String getConversionKey( int code ){
+		for(int i = 0; i < KeyBindingUtil.SPECIAL_KEYS.length; i++){
+			if (code == KeyBindingUtil.SPECIAL_KEYS[i].getCode()){
+				return KeyBindingUtil.SPECIAL_KEYS[i].getKey();
+			}
+		}
+		return null;
+	}
+	
+	public static String getConversionMask( int mask ){
+		String fullMask = new String();
+		for(int i = 0; i < KeyBindingUtil.MASK_KEYS.length; i++){
+			if ( (mask & KeyBindingUtil.MASK_KEYS[i].getCode()) == KeyBindingUtil.MASK_KEYS[i].getCode()){
+				fullMask += KeyBindingUtil.MASK_KEYS[i].getKey() + MASK_SEPARATOR;
+			}
+		}
+		return fullMask;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyCode.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyCode.java
new file mode 100644
index 0000000..00f22b6
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/KeyCode.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.app.system.keybindings;
+
+public class KeyCode {
+	
+	private int code;
+	private String key;
+	
+	public KeyCode(int code, String key){
+		this.code = code;
+		this.key = key;
+	}
+	
+	public int getCode(){
+		return this.code;
+	}
+	
+	public String getKey(){
+		return this.key;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/editor/KeyBindingEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/editor/KeyBindingEditor.java
new file mode 100644
index 0000000..0c0355c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/editor/KeyBindingEditor.java
@@ -0,0 +1,235 @@
+package org.herac.tuxguitar.app.system.keybindings.editor;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.keybindings.KeyBinding;
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingAction;
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingActionDefaults;
+import org.herac.tuxguitar.app.util.DialogUtils;
+
+public class KeyBindingEditor {
+	
+	private static final int ACTION_WIDTH = 400;
+	private static final int SHORTCUT_WIDTH = 100;
+	
+	protected Shell dialog;
+	protected Table table;
+	protected List items;
+	
+	public KeyBindingEditor(){
+		this.items = new ArrayList();
+	}
+	
+	public void show(Shell parent){
+		this.dialog = DialogUtils.newDialog(parent,SWT.DIALOG_TRIM |SWT.APPLICATION_MODAL);
+		this.dialog.setText(TuxGuitar.getProperty("key-bindings-editor"));
+		this.dialog.setLayout(new GridLayout());
+		
+		Composite composite = new Composite(this.dialog,SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.NONE,true,true));
+		
+		this.table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
+		this.table.setLayoutData(new GridData((ACTION_WIDTH + SHORTCUT_WIDTH) ,250));
+		this.table.setHeaderVisible(true);
+		this.table.addMouseListener(new MouseAdapter() {
+			public void mouseDoubleClick(MouseEvent e) {
+				TableItem item = getSelectedItem();
+				if(item != null){
+					KeyBindingAction itemData = (KeyBindingAction)item.getData();
+					KeyBindingSelector selector = new KeyBindingSelector(KeyBindingEditor.this,itemData);
+					KeyBinding kb = selector.select(KeyBindingEditor.this.dialog.getShell());
+					removeKeyBindingAction(kb);
+					itemData.setKeyBinding(kb);
+					loadTableItemLabel(item);
+				}
+			}
+		});
+		
+		TableColumn actionColumn = new TableColumn(this.table, SWT.LEFT);
+		actionColumn.setText(TuxGuitar.getProperty("key-bindings-editor-action-column"));
+		
+		TableColumn shortcutColumn = new TableColumn(this.table, SWT.LEFT);
+		shortcutColumn.setText(TuxGuitar.getProperty("key-bindings-editor-shortcut-column"));
+		
+		loadAvailableActionKeyBindings();
+		loadEnableActionKeyBindings(TuxGuitar.instance().getKeyBindingManager().getKeyBindingActions());
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(this.dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		
+		Button defaults = new Button(buttons,SWT.PUSH);
+		defaults.setText(TuxGuitar.getProperty("defaults"));
+		defaults.setLayoutData(getButtonData());
+		defaults.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				loadEnableActionKeyBindings(KeyBindingActionDefaults.getDefaultKeyBindings());
+			}
+		});
+		
+		Button close = new Button(buttons,SWT.PUSH);
+		close.setText(TuxGuitar.getProperty("close"));
+		close.setLayoutData(getButtonData());
+		close.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				KeyBindingEditor.this.dialog.dispose();
+			}
+		});
+		
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				save();
+			}
+		});
+		
+		this.table.setLayoutData(new GridData( (adjustWidth(actionColumn,ACTION_WIDTH) + adjustWidth(shortcutColumn,SHORTCUT_WIDTH)) ,250) );
+		
+		this.dialog.setDefaultButton( close );
+		
+		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	protected int adjustWidth(TableColumn column, int defaultWidth){
+		column.pack();
+		int width = column.getWidth();
+		if( width < defaultWidth ){
+			width = defaultWidth;
+			column.setWidth( width );
+		}
+		return width;
+	}
+	
+	protected GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected void loadTableItemLabel(TableItem item){
+		if(item.getData() instanceof KeyBindingAction){
+			KeyBindingAction actionkeyBinding = (KeyBindingAction)item.getData();
+			String action = actionkeyBinding.getAction();
+			String shortcut = (actionkeyBinding.getKeyBinding() != null)?actionkeyBinding.getKeyBinding().toString():"";
+			item.setText(new String[] { TuxGuitar.getProperty(action),shortcut});
+		}
+	}
+	
+	protected void loadAvailableActionKeyBindings(){
+		List list = TuxGuitar.instance().getActionAdapterManager().getKeyBindingActionIds().getActionIds();
+		Collections.sort(list);
+		Iterator it = list.iterator();
+		while (it.hasNext()) {
+			String action = (String) it.next();
+			TableItem item = new TableItem(this.table, SWT.NONE);
+			item.setData(new KeyBindingAction(action,null));
+			this.items.add(item);
+		}
+	}
+	
+	protected void loadEnableActionKeyBindings(List list){
+		Iterator items = this.items.iterator();
+		while (items.hasNext()) {
+			TableItem item = (TableItem) items.next();
+			if(item.getData() instanceof KeyBindingAction){
+				KeyBindingAction itemData = (KeyBindingAction)item.getData();
+				KeyBinding keyBinding = null;
+				Iterator it = list.iterator();
+				while (it.hasNext()) {
+					KeyBindingAction keyBindingAction = (KeyBindingAction) it.next();
+					if(keyBindingAction.getAction().equals(itemData.getAction())){
+						keyBinding =  (KeyBinding) keyBindingAction.getKeyBinding().clone();
+						break;
+					}
+				}
+				itemData.setKeyBinding(keyBinding);
+				loadTableItemLabel(item);
+			}
+		}
+	}
+	
+	protected void removeKeyBindingAction(KeyBinding kb){
+		if(kb != null){
+			Iterator it = this.items.iterator();
+			while(it.hasNext()){
+				TableItem item = (TableItem) it.next();
+				if(item.getData() instanceof KeyBindingAction){
+					KeyBindingAction itemData = (KeyBindingAction)item.getData();
+					if(kb.isSameAs(itemData.getKeyBinding())){
+						itemData.setKeyBinding(null);
+						loadTableItemLabel(item);
+					}
+				}
+			}
+		}
+	}
+	
+	protected TableItem getSelectedItem(){
+		TableItem item = null;
+		int itemSelected = this.table.getSelectionIndex();
+		if(itemSelected >= 0){
+			item = this.table.getItem(itemSelected);
+		}
+		return item;
+	}
+	
+	public boolean exists(KeyBinding kb){
+		Iterator it = this.items.iterator();
+		while(it.hasNext()){
+			TableItem item = (TableItem) it.next();
+			if(item.getData() instanceof KeyBindingAction){
+				KeyBindingAction itemData = (KeyBindingAction)item.getData();
+				if(itemData.getKeyBinding() != null && kb.isSameAs(itemData.getKeyBinding())){
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	protected void save(){
+		List list = new ArrayList();
+		Iterator it = this.items.iterator();
+		while (it.hasNext()) {
+			TableItem item = (TableItem) it.next();
+			if(item.getData() instanceof KeyBindingAction){
+				KeyBindingAction keyBindingAction = (KeyBindingAction)item.getData();
+				if(keyBindingAction.getAction() != null && keyBindingAction.getKeyBinding() != null){
+					list.add(keyBindingAction);
+				}
+			}
+		}
+		TuxGuitar.instance().getKeyBindingManager().reset(list);
+		TuxGuitar.instance().getKeyBindingManager().saveKeyBindings();
+		TuxGuitar.instance().loadLanguage();
+	}
+	
+	public Shell getDialog(){
+		return this.dialog;
+	}
+	
+	public boolean isDisposed(){
+		return (this.dialog == null || this.dialog.isDisposed() );
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/editor/KeyBindingSelector.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/editor/KeyBindingSelector.java
new file mode 100644
index 0000000..756e6eb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/editor/KeyBindingSelector.java
@@ -0,0 +1,144 @@
+package org.herac.tuxguitar.app.system.keybindings.editor;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.KeyAdapter;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.graphics.FontData;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.keybindings.KeyBinding;
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingAction;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+import org.herac.tuxguitar.app.util.DialogUtils;
+
+public class KeyBindingSelector {
+	
+	protected Shell dialog;
+	protected KeyBindingEditor editor;
+	protected KeyBinding keyBinding;
+	protected String action;
+	
+	public KeyBindingSelector(KeyBindingEditor editor,KeyBindingAction keyBindingAction){
+		this.editor = editor;
+		this.keyBinding = keyBindingAction.getKeyBinding();
+		this.action = keyBindingAction.getAction();
+	}
+	
+	public KeyBinding select(Shell parent){
+		this.dialog = DialogUtils.newDialog(parent,SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.dialog.setText(TuxGuitar.getProperty("key-bindings-editor"));
+		
+		Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout());
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setText(TuxGuitar.getProperty(this.action));
+		
+		final Composite composite = new Composite(group,SWT.NONE);
+		composite.setLayout(new GridLayout(2,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		composite.setFocus();
+		composite.addKeyListener(new KeyAdapter() {
+			public void keyReleased(KeyEvent e) {
+				KeyBinding kb = new KeyBinding(e.keyCode,e.stateMask);
+				if(kb.isSameAs(KeyBindingSelector.this.keyBinding) || isValid(kb)){
+					if(KeyBindingSelector.this.keyBinding == null){
+						KeyBindingSelector.this.keyBinding = new KeyBinding();
+					}
+					KeyBindingSelector.this.keyBinding.setKey(kb.getKey());
+					KeyBindingSelector.this.keyBinding.setMask(kb.getMask());
+				}
+				KeyBindingSelector.this.dialog.dispose();
+			}
+		});
+		
+		Label iconLabel = new Label(composite, SWT.CENTER );
+		iconLabel.setImage(iconLabel.getDisplay().getSystemImage(SWT.ICON_INFORMATION));
+		iconLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		
+		Label textLabel = new Label(composite,SWT.CENTER);
+		textLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
+		textLabel.setText(TuxGuitar.getProperty("key-bindings-editor-push-a-key"));
+		
+		FontData[] fd = textLabel.getFont().getFontData();
+		if(fd != null && fd.length > 0){
+			final Font font = new Font(textLabel.getDisplay(),new FontData( fd[0].getName(), 14 , SWT.BOLD) );
+			textLabel.setFont(font);
+			textLabel.addDisposeListener(new DisposeListener() {
+				public void widgetDisposed(DisposeEvent arg0) {
+					font.dispose();
+				}
+			});
+		}
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(this.dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
+		
+		final Button buttonClean = new Button(buttons, SWT.PUSH);
+		buttonClean.setText(TuxGuitar.getProperty("clean"));
+		buttonClean.setLayoutData(getButtonData());
+		buttonClean.addMouseListener(new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				composite.setFocus();
+			}
+		});
+		buttonClean.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				KeyBindingSelector.this.keyBinding = null;
+				KeyBindingSelector.this.dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addMouseListener(new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				composite.setFocus();
+			}
+		});
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				KeyBindingSelector.this.dialog.dispose();
+			}
+		});
+		
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return this.keyBinding;
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	protected boolean isValid(KeyBinding kb){
+		if(this.editor.exists(kb)){
+			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("key-bindings-editor-override"));
+			confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
+			if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_NO) == ConfirmDialog.STATUS_NO){
+				return false;
+			}
+		}
+		return true;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/xml/KeyBindingReader.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/xml/KeyBindingReader.java
new file mode 100644
index 0000000..e267085
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/xml/KeyBindingReader.java
@@ -0,0 +1,116 @@
+package org.herac.tuxguitar.app.system.keybindings.xml;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.herac.tuxguitar.app.system.keybindings.KeyBinding;
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingAction;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+public class KeyBindingReader {
+	private static final String SHORTCUT_TAG = "shortcut";
+	private static final String SHORTCUT_ATTRIBUTE_ACTION = "action";
+	private static final String SHORTCUT_ATTRIBUTE_KEY = "key";
+	private static final String SHORTCUT_ATTRIBUTE_MASK = "mask";
+	
+	public static List getKeyBindings(String fileName) {
+		try{
+			File file = new File(fileName);
+			if (file.exists()){
+				return getBindings(getDocument(file).getFirstChild());
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static List getKeyBindings(InputStream is) {
+		try{
+			if (is!=null){
+				return getBindings(getDocument(is).getFirstChild());
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	private static Document getDocument(InputStream is) {
+		Document document = null;
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		try {
+			DocumentBuilder builder = factory.newDocumentBuilder();
+			document = builder.parse(is);
+		} catch (SAXException sxe) {
+			sxe.printStackTrace();
+		} catch (ParserConfigurationException pce) {
+			pce.printStackTrace();
+		} catch (IOException ioe) {
+			ioe.printStackTrace();
+		}
+		return document;
+	}
+	
+	
+	private static Document getDocument(File file) {
+		Document document = null;
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		try {
+			DocumentBuilder builder = factory.newDocumentBuilder();
+			document = builder.parse(file);
+		} catch (SAXException sxe) {
+			sxe.printStackTrace();
+		} catch (ParserConfigurationException pce) {
+			pce.printStackTrace();
+		} catch (IOException ioe) {
+			ioe.printStackTrace();
+		}
+		return document;
+	}
+	
+	/**
+	 * Read shortcuts from xml file
+	 * 
+	 * @param shortcutsNode
+	 * @return
+	 */
+	private static List getBindings(Node shortcutsNode){
+		List list = new ArrayList();
+		
+		NodeList nodeList = shortcutsNode.getChildNodes();
+		for (int i = 0; i < nodeList.getLength(); i++) {
+			Node child = nodeList.item(i);
+			String nodeName = child.getNodeName();
+			
+			if (nodeName.equals(SHORTCUT_TAG)) {
+				NamedNodeMap params = child.getAttributes();
+				
+				Node nodeKey = params.getNamedItem(SHORTCUT_ATTRIBUTE_KEY);
+				Node nodeMask = params.getNamedItem(SHORTCUT_ATTRIBUTE_MASK);
+				Node nodeAction = params.getNamedItem(SHORTCUT_ATTRIBUTE_ACTION);
+				if( nodeKey != null && nodeMask != null && nodeAction != null){
+					String key = nodeKey.getNodeValue();
+					String mask = nodeMask.getNodeValue();
+					String action = nodeAction.getNodeValue();
+					
+					if (key != null && mask != null && action != null){
+						list.add(new KeyBindingAction(action, new KeyBinding(Integer.parseInt(key), Integer.parseInt(mask)) ));
+					}
+				}
+			}
+		}
+		return list;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/xml/KeyBindingWriter.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/xml/KeyBindingWriter.java
new file mode 100644
index 0000000..dbbedb3
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/keybindings/xml/KeyBindingWriter.java
@@ -0,0 +1,101 @@
+package org.herac.tuxguitar.app.system.keybindings.xml;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.herac.tuxguitar.app.system.keybindings.KeyBindingAction;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+public class KeyBindingWriter {
+	
+	private static final String SHORTCUT_ROOT = "shortcuts";
+	private static final String SHORTCUT_TAG = "shortcut";
+	private static final String SHORTCUT_ATTRIBUTE_ACTION = "action";
+	private static final String SHORTCUT_ATTRIBUTE_KEY = "key";
+	private static final String SHORTCUT_ATTRIBUTE_MASK = "mask";
+	
+	public static void setBindings(List list,String fileName) {
+		try{
+			File file = new File(fileName);
+			Document doc = createDocument();
+			setBindings(list,doc);
+			saveDocument(doc,file);
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+	}
+	
+	public static Document createDocument() {
+		try {
+			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+			DocumentBuilder builder = factory.newDocumentBuilder();
+			Document document = builder.newDocument();
+			return document;
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static void saveDocument(Document document,File file) {
+		try {
+			FileOutputStream fs = new FileOutputStream(file);
+			
+			// Write it out again
+			TransformerFactory xformFactory = TransformerFactory.newInstance();
+			Transformer idTransform = xformFactory.newTransformer();
+			Source input = new DOMSource(document);
+			Result output = new StreamResult(fs);
+			idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
+			idTransform.transform(input, output);
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+	}
+	
+	/**
+	 * Write shortcuts to xml file
+	 * 
+	 * @param shortcutsNode
+	 * @return
+	 */
+	private static void setBindings(List list,Document document){
+		Node shortcutsNode = document.createElement(SHORTCUT_ROOT);
+		
+		Iterator it = list.iterator();
+		while(it.hasNext()){
+			KeyBindingAction keyBindingAction = (KeyBindingAction) it.next();
+			
+			Node node = document.createElement(SHORTCUT_TAG);
+			shortcutsNode.appendChild(node);
+			
+			Attr attrKey = document.createAttribute(SHORTCUT_ATTRIBUTE_KEY);
+			Attr attrMask = document.createAttribute(SHORTCUT_ATTRIBUTE_MASK);
+			Attr attrAction = document.createAttribute(SHORTCUT_ATTRIBUTE_ACTION);
+			
+			attrKey.setNodeValue(Integer.toString(keyBindingAction.getKeyBinding().getKey()));
+			attrMask.setNodeValue(Integer.toString(keyBindingAction.getKeyBinding().getMask()));
+			attrAction.setNodeValue(keyBindingAction.getAction());
+			
+			node.getAttributes().setNamedItem(attrKey);
+			node.getAttributes().setNamedItem(attrMask);
+			node.getAttributes().setNamedItem(attrAction);
+		}
+		document.appendChild(shortcutsNode);
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/language/LanguageLoader.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/language/LanguageLoader.java
new file mode 100644
index 0000000..3e5b3f6
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/language/LanguageLoader.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.app.system.language;
+
+public interface LanguageLoader {
+	
+	public void loadProperties();
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/language/LanguageManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/language/LanguageManager.java
new file mode 100644
index 0000000..6b6d194
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/language/LanguageManager.java
@@ -0,0 +1,161 @@
+/*
+ * Created on 09-ene-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.system.language;
+
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+
+import org.herac.tuxguitar.app.util.TGFileUtils;
+
+/**
+ * @author julian
+ * 
+ */
+public class LanguageManager {
+	
+	public static final String PACKAGE = "lang";
+	public static final String PREFIX = "messages";
+	public static final String EXTENSION = ".properties";
+	
+	private TGResourceBundle resources;
+	private String[] languages;
+	private List loaders;
+	
+	public LanguageManager() {
+		this.loaders = new ArrayList();
+		this.loadLanguages();
+	}
+	
+	public void addLoader(LanguageLoader loader){
+		if( !this.loaders.contains( loader )){
+			this.loaders.add(loader);
+		}
+	}
+	
+	public void removeLoader(LanguageLoader loader){
+		if( this.loaders.contains( loader )){
+			this.loaders.remove(loader);
+		}
+	}
+	
+	private void fireChanges(){
+		Iterator it = this.loaders.iterator();
+		while(it.hasNext()){
+			LanguageLoader loader = (LanguageLoader)it.next();
+			loader.loadProperties();
+		}
+	}
+	
+	public void setLanguage(String lang) {
+		try {
+			String baseName = (PACKAGE + "." + PREFIX);
+			Locale locale = getLocale(lang);
+			this.resources = TGResourceBundle.getBundle(baseName, locale);
+			this.fireChanges();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+	
+	private Locale getLocale(String lang){
+		if(this.isSupportedLanguage(lang)){
+			String[] locale = lang.split("_");
+			String language = (locale.length > 0 ? locale[0] : "" );
+			String country =  (locale.length > 1 ? locale[1] : "" );
+			String variant =  (locale.length > 2 ? locale[2] : "" );
+			return new Locale(language, country, variant);
+		}
+		return Locale.getDefault();
+	}
+	
+	private boolean isSupportedLanguage(String lang){
+		if(lang != null && lang.length() > 0 && this.languages != null){
+			for(int i = 0 ; i < this.languages.length; i ++){
+				if(this.languages[i].equals(lang)){
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	public String getProperty(String key,String value) {
+		try {
+			String property = this.resources.getString(key);
+			return (property == null ? value : property );
+		}catch(Throwable throwable){
+			return value;
+		}
+	}
+	
+	public String getProperty(String key) {
+		return this.getProperty(key,key);
+	}
+	
+	public String getProperty(String key, Object[] arguments) {
+		return getProperty(key,key,arguments);
+	}
+	
+	public String getProperty(String key,String value, Object[] arguments) {
+		String property = this.getProperty(key,value);
+		return ( arguments != null ? MessageFormat.format(property, arguments) : property );
+	}
+	
+	public String[] getLanguages() {
+		return this.languages;
+	}
+	
+	public String getLanguage() {
+		if(this.resources != null){
+			Locale locale = this.resources.getLocale();
+			boolean language = (locale.getLanguage() != null && locale.getLanguage().length() > 0);
+			boolean country = (locale.getCountry() != null && locale.getCountry().length() > 0);
+			boolean variant = (locale.getVariant() != null && locale.getVariant().length() > 0);
+			
+			String localeId = new String();
+			if( language ){
+				localeId += locale.getLanguage();
+			}
+			if( country ){
+				localeId += "_" + locale.getCountry();
+			}
+			if( variant ){
+				localeId += "_" + ( country ? locale.getVariant() : ("_" + locale.getVariant()) );
+			}
+			return localeId;
+		}
+		return null;
+	}
+	
+	/**
+	 * Load language files from lang folder
+	 *
+	 */
+	private void loadLanguages(){
+		List availableList = new ArrayList();
+		String[] fileNames = TGFileUtils.getFileNames("lang");
+		if( fileNames != null ){
+			// now iterate over them
+			for(int i = 0;i < fileNames.length;i++){
+				if (fileNames[i].indexOf("messages_") == 0){
+					int prefixIndex = fileNames[i].indexOf(PREFIX + "_");
+					int extensionIndex = fileNames[i].indexOf(EXTENSION);
+					if(prefixIndex == 0 && extensionIndex > (PREFIX + "_").length()){
+						availableList.add( fileNames[i].substring( (PREFIX + "_").length() , extensionIndex ) );
+					}
+				}
+			}
+		}
+		this.languages = new String[availableList.size()];
+		for(int i = 0; i < this.languages.length; i++){
+			this.languages[i] = (String) availableList.get( i );
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/language/TGResourceBundle.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/language/TGResourceBundle.java
new file mode 100644
index 0000000..14621ea
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/language/TGResourceBundle.java
@@ -0,0 +1,79 @@
+package org.herac.tuxguitar.app.system.language;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Locale;
+import java.util.Properties;
+
+import org.herac.tuxguitar.app.util.TGFileUtils;
+
+public class TGResourceBundle {
+	
+	private Locale locale;
+	private Properties properties;
+	
+	public TGResourceBundle(Locale locale, Properties properties){
+		this.locale = locale;
+		this.properties = properties;
+	}
+	
+	public Locale getLocale() {
+		return this.locale;
+	}
+	
+	public void setLocale(Locale locale) {
+		this.locale = locale;
+	}
+	
+	public String getString(String key) {
+		return this.properties.getProperty(key);
+	}
+	
+	public static TGResourceBundle getBundle(String baseName, Locale locale){
+		Properties properties = new Properties();
+		
+		String bundleName = baseName.replace('.','/');
+		String bundleExtension = ".properties";
+		
+		// load default
+		TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties);
+		
+		// load language
+		bundleName += "_";
+		if(locale.getLanguage() != null && locale.getLanguage().length() > 0){
+			bundleName += locale.getLanguage();
+			TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties);
+		}
+		
+		// load country
+		bundleName += "_";
+		if(locale.getCountry() != null && locale.getCountry().length() > 0){
+			bundleName += locale.getCountry();
+			TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties);
+		}
+		
+		// load variant
+		bundleName += "_";
+		if(locale.getVariant() != null && locale.getVariant().length() > 0){
+			bundleName += locale.getVariant();
+			TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties);
+		}
+		
+		return new TGResourceBundle(locale, properties);
+	}
+	
+	private static void loadResources(String name, Properties p){
+		try {
+			Enumeration enumeration = TGFileUtils.getResourceUrls(name);
+			while (enumeration.hasMoreElements()) {
+				URL url = (URL) enumeration.nextElement();
+				Properties properties = new Properties();
+				properties.load( url.openStream() );
+				p.putAll(properties);
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginInfoHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginInfoHandler.java
new file mode 100644
index 0000000..9e63126
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginInfoHandler.java
@@ -0,0 +1,13 @@
+package org.herac.tuxguitar.app.system.plugins;
+
+import org.herac.tuxguitar.app.system.properties.TGResourcePropertiesReader;
+
+public class TGPluginInfoHandler extends TGResourcePropertiesReader {
+	
+	private static final String RESOURCE_PREFIX = "META-INF/";
+	private static final String RESOURCE_SUFFIX = ".info";
+	
+	public TGPluginInfoHandler() {
+		super(RESOURCE_PREFIX, RESOURCE_SUFFIX);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginPropertiesHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginPropertiesHandler.java
new file mode 100644
index 0000000..086384c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginPropertiesHandler.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.app.system.plugins;
+
+import java.io.File;
+
+import org.herac.tuxguitar.app.system.properties.TGDefaultAndStoredPropertiesHandler;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.util.plugin.TGPluginProperties;
+
+public class TGPluginPropertiesHandler extends TGDefaultAndStoredPropertiesHandler {
+	
+	private static final String RESOURCE = TGPluginProperties.RESOURCE;
+	private static final String RESOURCE_PREFIX = "";
+	private static final String RESOURCE_SUFFIX = "-" + RESOURCE + ".cfg";
+	private static final String DEFAULTS_PREFIX = RESOURCE_PREFIX;
+	private static final String DEFAULTS_SUFFIX = RESOURCE_SUFFIX;
+	private static final String STORED_PREFIX = TGFileUtils.PATH_USER_CONFIG + File.separator + RESOURCE_PREFIX;
+	private static final String STORED_SUFFIX = RESOURCE_SUFFIX;
+	
+	public TGPluginPropertiesHandler() {
+		super(DEFAULTS_PREFIX, DEFAULTS_SUFFIX, STORED_PREFIX, STORED_SUFFIX);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginSettingsAdapter.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginSettingsAdapter.java
new file mode 100644
index 0000000..e73861d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginSettingsAdapter.java
@@ -0,0 +1,43 @@
+package org.herac.tuxguitar.app.system.plugins;
+
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGPluginSettingsAdapter implements TGPlugin{
+	
+	private boolean loaded;
+	private TGPluginSettingsHandler handler;
+	
+	protected abstract TGPluginSettingsHandler getHandler() throws TGPluginException;
+	
+	public void init() throws TGPluginException {
+		this.handler = getHandler();
+		this.loaded = false;
+	}
+	
+	public void close() throws TGPluginException {
+		this.loaded = false;
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded){
+			TGPluginSettingsManager.getInstance().addPluginSettingsHandler(getModuleId(), this.handler);
+			this.loaded = true;
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded){
+			TGPluginSettingsManager.getInstance().removePluginSettingsHandler(getModuleId());
+			this.loaded = false;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginSettingsHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginSettingsHandler.java
new file mode 100644
index 0000000..525572d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginSettingsHandler.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.app.system.plugins;
+
+import org.eclipse.swt.widgets.Shell;
+
+public interface TGPluginSettingsHandler {
+	
+	public void openSettingsDialog(Shell parent);
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginSettingsManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginSettingsManager.java
new file mode 100644
index 0000000..64c772b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/plugins/TGPluginSettingsManager.java
@@ -0,0 +1,49 @@
+package org.herac.tuxguitar.app.system.plugins;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.swt.widgets.Shell;
+
+public class TGPluginSettingsManager {
+	
+	private static TGPluginSettingsManager instance;
+	
+	private Map handlers;
+	
+	public TGPluginSettingsManager(){
+		this.handlers = new HashMap();
+	}
+	
+	public static TGPluginSettingsManager getInstance(){
+		synchronized (TGPluginSettingsManager.class) {
+			if( instance == null ){
+				instance = new TGPluginSettingsManager();
+			}
+			return instance;
+		}
+	}
+	
+	public void openPluginSettingsDialog(String moduleId, Shell parent){
+		if( this.containsPluginSettingsHandler(moduleId) ){
+			TGPluginSettingsHandler tgPluginSettingsHandler = (TGPluginSettingsHandler) this.handlers.get(moduleId);
+			tgPluginSettingsHandler.openSettingsDialog(parent);
+		}
+	}
+	
+	public void addPluginSettingsHandler(String moduleId, TGPluginSettingsHandler pluginSettingsHandler){
+		if(!this.containsPluginSettingsHandler(moduleId) ){
+			this.handlers.put(moduleId, pluginSettingsHandler);
+		}
+	}
+	
+	public void removePluginSettingsHandler(String moduleId){
+		if( this.containsPluginSettingsHandler(moduleId) ){
+			this.handlers.remove(moduleId);
+		}
+	}
+	
+	public boolean containsPluginSettingsHandler(String moduleId){
+		return this.handlers.containsKey(moduleId);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGDefaultAndStoredPropertiesHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGDefaultAndStoredPropertiesHandler.java
new file mode 100644
index 0000000..48f0755
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGDefaultAndStoredPropertiesHandler.java
@@ -0,0 +1,41 @@
+package org.herac.tuxguitar.app.system.properties;
+
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesException;
+import org.herac.tuxguitar.util.properties.TGPropertiesReader;
+import org.herac.tuxguitar.util.properties.TGPropertiesWriter;
+
+public class TGDefaultAndStoredPropertiesHandler implements TGPropertiesReader, TGPropertiesWriter{
+	
+	private String defaultsPrefix;
+	private String defaultsSuffix;
+	private String storedPrefix;
+	private String storedSuffix;
+	
+	public TGDefaultAndStoredPropertiesHandler(String defaultsPrefix, String defaultsSuffix, String storedPrefix, String storedSuffix) {
+		this.defaultsPrefix = defaultsPrefix;
+		this.defaultsSuffix = defaultsSuffix;
+		this.storedPrefix = storedPrefix;
+		this.storedSuffix = storedSuffix;
+	}
+
+	public void readProperties(TGProperties properties, String module) throws TGPropertiesException {
+		this.readDefaultProperties(properties, module);
+		this.readStoredProperties(properties, module);
+	}
+
+	private void readDefaultProperties(TGProperties properties, String module) {
+		TGPropertiesReader tgPropertiesReader = new TGResourcePropertiesReader(this.defaultsPrefix, this.defaultsSuffix);
+		tgPropertiesReader.readProperties(properties, module);
+	}
+	
+	private void readStoredProperties(TGProperties properties, String module) {
+		TGPropertiesReader tgPropertiesReader = new TGFilePropertiesHandler(this.storedPrefix, this.storedSuffix);
+		tgPropertiesReader.readProperties(properties, module);
+	}
+	
+	public void writeProperties(TGProperties properties, String module) throws TGPropertiesException {
+		TGPropertiesWriter tgPropertiesWriter = new TGFilePropertiesWriter(this.storedPrefix, this.storedSuffix);
+		tgPropertiesWriter.writeProperties(properties, module);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGFilePropertiesHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGFilePropertiesHandler.java
new file mode 100644
index 0000000..dc81210
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGFilePropertiesHandler.java
@@ -0,0 +1,23 @@
+package org.herac.tuxguitar.app.system.properties;
+
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesException;
+import org.herac.tuxguitar.util.properties.TGPropertiesReader;
+import org.herac.tuxguitar.util.properties.TGPropertiesWriter;
+
+public class TGFilePropertiesHandler extends TGPropertiesBaseHandler implements TGPropertiesReader, TGPropertiesWriter{
+	
+	public TGFilePropertiesHandler(String prefix, String suffix) {
+		super(prefix, suffix);
+	}
+
+	public void readProperties(TGProperties properties, String module) throws TGPropertiesException {
+		TGFilePropertiesReader tgFilePropertiesReader = new TGFilePropertiesReader(getPrefix(), getSuffix());
+		tgFilePropertiesReader.readProperties(properties, module);
+	}
+
+	public void writeProperties(TGProperties properties, String module) throws TGPropertiesException {
+		TGFilePropertiesWriter tgFilePropertiesWriter = new TGFilePropertiesWriter(getPrefix(), getSuffix());
+		tgFilePropertiesWriter.writeProperties(properties, module);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGFilePropertiesReader.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGFilePropertiesReader.java
new file mode 100644
index 0000000..b97565d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGFilePropertiesReader.java
@@ -0,0 +1,30 @@
+package org.herac.tuxguitar.app.system.properties;
+
+import java.io.File;
+import java.io.FileInputStream;
+
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesException;
+import org.herac.tuxguitar.util.properties.TGPropertiesReader;
+
+public class TGFilePropertiesReader extends TGPropertiesBaseHandler implements TGPropertiesReader{
+	
+	public TGFilePropertiesReader(String prefix, String suffix) {
+		super(prefix, suffix);
+	}
+
+	public void readProperties(TGProperties properties, String module) throws TGPropertiesException {
+		try {
+			File file = new File(getPrefix() + module + getSuffix());
+			if( file.exists() ){
+				((TGPropertiesImpl)properties).clear();
+				((TGPropertiesImpl)properties).load(new FileInputStream(file));
+			}else{
+				TGFilePropertiesWriter tgFilePropertiesWriter = new TGFilePropertiesWriter(getPrefix(), getSuffix());
+				tgFilePropertiesWriter.writeProperties(properties, module);
+			}
+		} catch (Exception e) {
+			throw new TGPropertiesException(e);
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGFilePropertiesWriter.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGFilePropertiesWriter.java
new file mode 100644
index 0000000..de8a4b2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGFilePropertiesWriter.java
@@ -0,0 +1,34 @@
+package org.herac.tuxguitar.app.system.properties;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesException;
+import org.herac.tuxguitar.util.properties.TGPropertiesWriter;
+
+public class TGFilePropertiesWriter extends TGPropertiesBaseHandler implements TGPropertiesWriter{
+	
+	public TGFilePropertiesWriter(String prefix, String suffix) {
+		super(prefix, suffix);
+	}
+	
+	public void writeProperties(TGProperties properties, String module) throws TGPropertiesException {
+		try {
+			File file = new File(getPrefix() + module + getSuffix());
+			if(!file.exists()){
+				File folder = file.getParentFile();
+				if(folder != null && !folder.exists()){
+					folder.mkdirs();
+				}
+			}
+			((TGPropertiesImpl)properties).store(new FileOutputStream(file), module);
+		} catch (FileNotFoundException e) {
+			throw new TGPropertiesException(e);
+		} catch (IOException e) {
+			throw new TGPropertiesException(e);
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesAdapter.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesAdapter.java
new file mode 100644
index 0000000..a152599
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesAdapter.java
@@ -0,0 +1,24 @@
+package org.herac.tuxguitar.app.system.properties;
+
+import org.herac.tuxguitar.app.system.config.TGConfigDefaults;
+import org.herac.tuxguitar.app.system.config.TGConfigDefaultsPropertiesHandler;
+import org.herac.tuxguitar.app.system.config.TGConfigPropertiesHandler;
+import org.herac.tuxguitar.app.system.plugins.TGPluginInfoHandler;
+import org.herac.tuxguitar.app.system.plugins.TGPluginPropertiesHandler;
+import org.herac.tuxguitar.util.configuration.TGConfigManager;
+import org.herac.tuxguitar.util.plugin.TGPluginInfo;
+import org.herac.tuxguitar.util.plugin.TGPluginProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesManager;
+
+public class TGPropertiesAdapter {
+	
+	public static void initialize() {
+		TGPropertiesManager.getInstance().setPropertiesFactory(new TGPropertiesFactoryImpl());
+		TGPropertiesManager.getInstance().addPropertiesReader(TGConfigManager.RESOURCE, new TGConfigPropertiesHandler());
+		TGPropertiesManager.getInstance().addPropertiesWriter(TGConfigManager.RESOURCE, new TGConfigPropertiesHandler());
+		TGPropertiesManager.getInstance().addPropertiesReader(TGConfigDefaults.RESOURCE, new TGConfigDefaultsPropertiesHandler());
+		TGPropertiesManager.getInstance().addPropertiesReader(TGPluginInfo.RESOURCE, new TGPluginInfoHandler());
+		TGPropertiesManager.getInstance().addPropertiesReader(TGPluginProperties.RESOURCE, new TGPluginPropertiesHandler());
+		TGPropertiesManager.getInstance().addPropertiesWriter(TGPluginProperties.RESOURCE, new TGPluginPropertiesHandler());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesBaseHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesBaseHandler.java
new file mode 100644
index 0000000..de016f9
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesBaseHandler.java
@@ -0,0 +1,20 @@
+package org.herac.tuxguitar.app.system.properties;
+
+public class TGPropertiesBaseHandler {
+	
+	private String prefix;
+	private String suffix;
+	
+	public TGPropertiesBaseHandler(String prefix, String suffix) {
+		this.prefix = prefix;
+		this.suffix = suffix;
+	}
+
+	public String getPrefix() {
+		return prefix;
+	}
+
+	public String getSuffix() {
+		return suffix;
+	}	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesFactoryImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesFactoryImpl.java
new file mode 100644
index 0000000..ab4eb2f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesFactoryImpl.java
@@ -0,0 +1,12 @@
+package org.herac.tuxguitar.app.system.properties;
+
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesException;
+import org.herac.tuxguitar.util.properties.TGPropertiesFactory;
+
+public class TGPropertiesFactoryImpl implements TGPropertiesFactory{
+	
+	public TGProperties createProperties() throws TGPropertiesException {
+		return new TGPropertiesImpl();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesImpl.java
new file mode 100644
index 0000000..f1daeb0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGPropertiesImpl.java
@@ -0,0 +1,41 @@
+package org.herac.tuxguitar.app.system.properties;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Properties;
+
+import org.herac.tuxguitar.util.properties.TGProperties;
+
+public class TGPropertiesImpl implements TGProperties{
+	
+	private Properties properties;
+	
+	public TGPropertiesImpl(){
+		this.properties = new Properties();
+	}
+
+	public String getValue(String key) {
+		return this.properties.getProperty(key);
+	}
+
+	public void setValue(String key, String value) {
+		this.properties.setProperty(key, value);
+	}
+	
+	public void remove(String key) {
+		this.properties.remove(key);
+	}
+	
+	public void clear() {
+		this.properties.clear();
+	}
+	
+	public void load(InputStream inputStream) throws IOException {
+		this.properties.load(inputStream);
+	}
+	
+	public void store(OutputStream outputStream, String comments) throws IOException{
+		this.properties.store(outputStream, comments);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGResourcePropertiesReader.java b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGResourcePropertiesReader.java
new file mode 100644
index 0000000..1c890fd
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/system/properties/TGResourcePropertiesReader.java
@@ -0,0 +1,26 @@
+package org.herac.tuxguitar.app.system.properties;
+
+import java.io.InputStream;
+
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.util.properties.TGProperties;
+import org.herac.tuxguitar.util.properties.TGPropertiesException;
+import org.herac.tuxguitar.util.properties.TGPropertiesReader;
+
+public class TGResourcePropertiesReader extends TGPropertiesBaseHandler implements TGPropertiesReader{
+	
+	public TGResourcePropertiesReader(String prefix, String suffix) {
+		super(prefix, suffix);
+	}
+
+	public void readProperties(TGProperties properties, String module) throws TGPropertiesException {
+		try {
+			InputStream is = TGFileUtils.getResourceAsStream(getPrefix() + module + getSuffix());
+			if(is != null){
+				((TGPropertiesImpl)properties).load(is);
+			}
+		} catch (Throwable throwable) {
+			throw new TGPropertiesException(throwable);
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTable.java b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTable.java
new file mode 100644
index 0000000..f3a49b0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTable.java
@@ -0,0 +1,169 @@
+package org.herac.tuxguitar.app.table;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+
+public class TGTable {
+	private ScrolledComposite sComposite;
+	private Composite table;
+	private SashForm columnControl;
+	private Composite rowControl;
+	private TGTableColumn columnNumber;
+	private TGTableColumn columnSoloMute;
+	private TGTableColumn columnName;
+	private TGTableColumn columnInstrument;
+	private TGTableColumn columnCanvas;
+	private List rows;
+	private int rowHeight;
+	private int scrollIncrement;
+	
+	public TGTable(Composite parent){
+		this.rows = new ArrayList();
+		this.newTable(parent);
+	}
+	
+	public void newTable(Composite parent){
+		this.sComposite = new ScrolledComposite(parent,SWT.BORDER | SWT.V_SCROLL);
+		this.sComposite.setLayout(new GridLayout());
+		this.sComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.sComposite.setAlwaysShowScrollBars(true);
+		this.sComposite.setExpandHorizontal(true);
+		this.sComposite.setExpandVertical(true);
+		this.table = new Composite(this.sComposite,SWT.NONE);
+		this.table.setLayout(newGridLayout(1,0,0,0,0));
+		this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.columnControl = new SashForm(this.table,SWT.HORIZONTAL);
+		this.columnControl.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
+		
+		this.columnNumber = new TGTableColumn(this,SWT.LEFT);
+		this.columnSoloMute = new TGTableColumn(this,SWT.LEFT);
+		this.columnName = new TGTableColumn(this,SWT.LEFT);
+		this.columnInstrument = new TGTableColumn(this,SWT.LEFT);
+		this.columnCanvas = new TGTableColumn(this,SWT.CENTER);
+		this.columnControl.setWeights(new int[]{1,2,7,7,20});
+		
+		this.rowControl = new Composite(this.table,SWT.NONE);
+		this.rowControl.setLayout(newGridLayout(1,0,1,0,1));
+		this.rowControl.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		this.sComposite.setContent(this.table);
+	}
+	
+	public Composite getControl(){
+		return this.table;
+	}
+	
+	public void newRow(){
+		this.rows.add(new TGTableRow(this));
+	}
+	
+	private GridLayout newGridLayout(int cols,int marginWidth,int marginHeight,int horizontalSpacing,int verticalSpacing){
+		GridLayout layout = new GridLayout(cols,false);
+		layout.marginWidth = marginWidth;
+		layout.marginHeight = marginHeight;
+		layout.horizontalSpacing = horizontalSpacing;
+		layout.verticalSpacing = verticalSpacing;
+		return layout;
+	}
+	
+	public void addRowItem(TGTableColumn column,Control control,boolean computeSize){
+		if(computeSize){
+			this.rowHeight = Math.max(this.rowHeight,control.computeSize(SWT.DEFAULT,SWT.DEFAULT).y);
+			this.scrollIncrement = this.rowHeight;
+		}
+		column.addControl(control);
+	}
+	
+	public int getMinHeight(){
+		return (this.sComposite.getMinHeight() + ( this.sComposite.getBorderWidth() * 2 ) );
+	}
+	
+	public Composite getColumnControl(){
+		return this.columnControl;
+	}
+	
+	public Composite getRowControl(){
+		return this.rowControl;
+	}
+	
+	public int getRowHeight(){
+		return this.rowHeight;
+	}
+	
+	public int getScrollIncrement(){
+		return this.scrollIncrement;
+	}	
+	
+	public TGTableColumn getColumnInstrument() {
+		return this.columnInstrument;
+	}
+	
+	public TGTableColumn getColumnName() {
+		return this.columnName;
+	}
+	
+	public TGTableColumn getColumnNumber() {
+		return this.columnNumber;
+	}
+	
+	public TGTableColumn getColumnSoloMute() {
+		return this.columnSoloMute;
+	}
+	
+	public TGTableColumn getColumnCanvas() {
+		return this.columnCanvas;
+	}
+	
+	public TGTableRow getRow(int index){
+		if(index >= 0 && index < this.rows.size()){
+			return (TGTableRow)this.rows.get(index);
+		}
+		return null;
+	}
+	
+	public void removeRowsAfter(int index){
+		while(index < this.rows.size()){
+			TGTableRow row = (TGTableRow)this.rows.get(index);
+			row.dispose();
+			this.rows.remove(index);
+		}
+		this.notifyRemoved();
+	}
+	
+	public int getRowCount(){
+		return this.rows.size();
+	}
+	
+	public void update(){
+		this.layoutColumns();
+		this.table.layout(true,true);
+		this.sComposite.setMinHeight(this.table.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
+		this.sComposite.getVerticalBar().setIncrement( (getScrollIncrement() + this.sComposite.getBorderWidth() ) );
+	}
+	
+	private void notifyRemoved(){
+		this.columnNumber.notifyRemoved();
+		this.columnSoloMute.notifyRemoved();
+		this.columnName.notifyRemoved();
+		this.columnInstrument.notifyRemoved();
+		this.columnCanvas.notifyRemoved();
+	}
+	
+	private void layoutColumns(){
+		this.columnNumber.layout();
+		this.columnSoloMute.layout();
+		this.columnName.layout();
+		this.columnInstrument.layout();
+		this.columnCanvas.layout();
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableCanvasPainter.java b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableCanvasPainter.java
new file mode 100644
index 0000000..d4a5555
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableCanvasPainter.java
@@ -0,0 +1,90 @@
+package org.herac.tuxguitar.app.table;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGColorImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.graphics.TGColor;
+import org.herac.tuxguitar.graphics.TGPainter;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class TGTableCanvasPainter implements PaintListener{
+	
+	private TGTableViewer viewer;
+	private TGTrack track;
+	
+	public TGTableCanvasPainter(TGTableViewer viewer,TGTrack track){
+		this.viewer = viewer;
+		this.track = track;
+	}
+	
+	public void paintControl(PaintEvent e) {
+		TGPainterImpl painter = new TGPainterImpl(e.gc);
+		paintTrack(painter);
+	}
+	
+	protected void paintTrack(TGPainterImpl painter){
+		if(!TuxGuitar.instance().isLocked()){
+			TuxGuitar.instance().lock();
+			
+			int x = -this.viewer.getHScrollSelection();
+			int y = 0;
+			int size = this.viewer.getTable().getRowHeight();
+			int width = painter.getGC().getDevice().getBounds().width;
+			boolean playing = TuxGuitar.instance().getPlayer().isRunning();
+			
+			painter.setBackground(new TGColorImpl(painter.getGC().getDevice().getSystemColor(SWT.COLOR_GRAY)));
+			painter.initPath(TGPainter.PATH_FILL);
+			painter.setAntialias(false);
+			painter.addRectangle(0,y,width,size);
+			painter.closePath();
+			
+			TGColor trackColor = painter.createColor(this.track.getColor().getR(),this.track.getColor().getG(),this.track.getColor().getB());
+			painter.setBackground(trackColor);
+			painter.setForeground(trackColor);
+			
+			int count = this.track.countMeasures();
+			for(int j = 0;j < count;j++){
+				TGMeasureImpl measure = (TGMeasureImpl)this.track.getMeasure(j);
+				if(isRestMeasure(measure)){
+					painter.initPath();
+					painter.setAntialias(false);
+					painter.addRectangle(x,y,size - 2,size - 1);
+					painter.closePath();
+				}else{
+					painter.initPath(TGPainter.PATH_FILL);
+					painter.setAntialias(false);
+					painter.addRectangle(x,y,size - 1,size );
+					painter.closePath();
+				}
+				boolean hasCaret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().equals(measure);
+				if((playing && measure.isPlaying(this.viewer.getEditor().getTablature().getViewLayout())) || (!playing && hasCaret)){
+					painter.setBackground(new TGColorImpl(painter.getGC().getDevice().getSystemColor(SWT.COLOR_BLACK)));
+					painter.initPath(TGPainter.PATH_FILL);
+					painter.setAntialias(false);
+					painter.addRectangle(x + 4,y + 4,size - 9,size - 8);
+					painter.closePath();
+					painter.setBackground(trackColor);
+				}
+				x += size;
+			}
+			trackColor.dispose();
+			
+			TuxGuitar.instance().unlock();
+		}
+	}
+	
+	private boolean isRestMeasure(TGMeasureImpl measure){
+		int beatCount = measure.countBeats();
+		for(int i = 0; i < beatCount; i++){
+			if( !measure.getBeat(i).isRestBeat() ){
+				return false;
+			}
+		}
+		return true;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableColumn.java b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableColumn.java
new file mode 100644
index 0000000..c49865c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableColumn.java
@@ -0,0 +1,73 @@
+package org.herac.tuxguitar.app.table;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.herac.tuxguitar.app.TuxGuitar;
+
+public class TGTableColumn {
+	private TGTable table;
+	private CLabel column;
+	private List controls;
+	
+	public TGTableColumn(TGTable table,int align){
+		this.table = table;
+		this.controls = new ArrayList();
+		this.column = new CLabel(this.table.getColumnControl(),align | SWT.SHADOW_OUT);
+		this.column.setLayout(new GridLayout());
+		this.column.addListener(SWT.Resize,new Listener() {
+			public void handleEvent(Event arg0) {
+				layout();
+			}
+		});
+		this.column.pack();
+		this.appendListeners(this.column);
+	}
+	
+	public CLabel getControl(){
+		return this.column;
+	}
+	
+	public void setTitle(String title){
+		this.column.setText(title);
+	}
+	
+	public void addControl(Control control){
+		this.controls.add(control);
+		this.appendListeners(control);
+	}
+	
+	public void appendListeners(Control control){
+		TuxGuitar.instance().getKeyBindingManager().appendListenersTo(control);
+	}
+	
+	public void layout(){
+		Point location = this.column.getLocation();
+		Point size = this.column.getSize();
+		
+		for(int i = 0; i < this.controls.size(); i ++){
+			Control control = (Control)this.controls.get(i);
+			if(!control.isDisposed()){
+				control.setSize(size.x,this.table.getRowHeight());
+				control.setLocation(location.x, 0);
+			}
+		}
+	}
+	
+	public void notifyRemoved(){
+		for(int i = 0; i < this.controls.size(); i ++){
+			Control control = (Control)this.controls.get(i);
+			if(control.isDisposed()){
+				this.controls.remove(i --);
+			}
+		}
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableRow.java b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableRow.java
new file mode 100644
index 0000000..f7804f7
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableRow.java
@@ -0,0 +1,186 @@
+package org.herac.tuxguitar.app.table;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+
+public class TGTableRow {
+	private TGTable table;
+	private Composite row;
+	private CLabel number;
+	private CLabel soloMute;
+	private CLabel name;
+	private CLabel instrument;
+	private Composite painter;
+	private MouseListener mouseListenerLabel;
+	private MouseListener mouseListenerCanvas;
+	private PaintListener paintListenerCanvas;
+	
+	public TGTableRow(TGTable table){
+		this.table = table;
+		this.init();
+	}
+	
+	public void init(){
+		MouseListener mouseListenerLabel = new MouseListenerLabel();
+		MouseListener mouseListenerCanvas = new MouseListenerCanvas();
+		PaintListener paintListenerCanvas = new PaintListenerCanvas();
+		
+		this.row = new Composite(this.table.getRowControl(),SWT.NONE );
+		this.row.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
+		
+		this.number = new CLabel(this.row,SWT.LEFT);
+		this.number.addMouseListener(mouseListenerLabel);
+		this.table.addRowItem(this.table.getColumnNumber(),this.number,true);
+		
+		this.soloMute = new CLabel(this.row,SWT.LEFT);
+		this.soloMute.addMouseListener(mouseListenerLabel);
+		this.table.addRowItem(this.table.getColumnSoloMute(),this.soloMute,true);
+		
+		this.name = new CLabel(this.row,SWT.LEFT);
+		this.name.addMouseListener(mouseListenerLabel);
+		this.table.addRowItem(this.table.getColumnName(),this.name,true);
+		
+		this.instrument = new CLabel(this.row,SWT.LEFT);
+		this.instrument.addMouseListener(mouseListenerLabel);
+		this.table.addRowItem(this.table.getColumnInstrument(),this.instrument,true);
+		
+		this.painter = new Composite(this.row,SWT.DOUBLE_BUFFERED);
+		this.painter.addMouseListener(mouseListenerCanvas);
+		this.painter.addPaintListener(paintListenerCanvas);
+		this.table.addRowItem(this.table.getColumnCanvas(),this.painter,false);
+		
+		this.row.pack();
+	}
+	
+	public void setBackground(Color background){
+		this.number.setBackground(background);
+		this.soloMute.setBackground(background);
+		this.name.setBackground(background);
+		this.instrument.setBackground(background);
+	}
+	
+	public void setForeground(Color foreground){
+		this.number.setForeground(foreground);
+		this.soloMute.setForeground(foreground);
+		this.name.setForeground(foreground);
+		this.instrument.setForeground(foreground);
+	}
+	
+	public void dispose(){
+		this.row.dispose();
+	}
+	
+	public Composite getPainter() {
+		return this.painter;
+	}
+	
+	public CLabel getInstrument() {
+		return this.instrument;
+	}
+	
+	public CLabel getName() {
+		return this.name;
+	}
+	
+	public CLabel getNumber() {
+		return this.number;
+	}
+	
+	public CLabel getSoloMute() {
+		return this.soloMute;
+	}
+	
+	public MouseListener getMouseListenerLabel() {
+		return this.mouseListenerLabel;
+	}
+	
+	public void setMouseListenerLabel(MouseListener mouseListenerLabel) {
+		this.mouseListenerLabel = mouseListenerLabel;
+	}
+	
+	public MouseListener getMouseListenerCanvas() {
+		return this.mouseListenerCanvas;
+	}
+	
+	public void setMouseListenerCanvas(MouseListener mouseListenerCanvas) {
+		this.mouseListenerCanvas = mouseListenerCanvas;
+	}
+	
+	public PaintListener getPaintListenerCanvas() {
+		return this.paintListenerCanvas;
+	}
+	
+	public void setPaintListenerCanvas(PaintListener paintListenerCanvas) {
+		this.paintListenerCanvas = paintListenerCanvas;
+	}
+	
+	private class MouseListenerLabel implements MouseListener{
+		
+		public MouseListenerLabel(){
+			super();
+		}
+		
+		public void mouseDoubleClick(MouseEvent e) {
+			if(getMouseListenerLabel() != null){
+				getMouseListenerLabel().mouseDoubleClick(e);
+			}
+		}
+		
+		public void mouseDown(MouseEvent e) {
+			if(getMouseListenerLabel() != null){
+				getMouseListenerLabel().mouseDown(e);
+			}
+		}
+		
+		public void mouseUp(MouseEvent e) {
+			if(getMouseListenerLabel() != null){
+				getMouseListenerLabel().mouseUp(e);
+			}
+		}
+	}
+	
+	private class MouseListenerCanvas implements MouseListener{
+		
+		public MouseListenerCanvas(){
+			super();
+		}
+		
+		public void mouseDoubleClick(MouseEvent e) {
+			if(getMouseListenerCanvas() != null){
+				getMouseListenerCanvas().mouseDoubleClick(e);
+			}
+		}
+		
+		public void mouseDown(MouseEvent e) {
+			if(getMouseListenerCanvas() != null){
+				getMouseListenerCanvas().mouseDown(e);
+			}
+		}
+		
+		public void mouseUp(MouseEvent e) {
+			if(getMouseListenerCanvas() != null){
+				getMouseListenerCanvas().mouseUp(e);
+			}
+		}
+	}
+	
+	private class PaintListenerCanvas implements PaintListener{
+		
+		public PaintListenerCanvas(){
+			super();
+		}
+		
+		public void paintControl(PaintEvent e) {
+			if(getPaintListenerCanvas() != null){
+				getPaintListenerCanvas().paintControl(e);
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableViewer.java b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableViewer.java
new file mode 100644
index 0000000..05eab4c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/table/TGTableViewer.java
@@ -0,0 +1,474 @@
+package org.herac.tuxguitar.app.table;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseListener;
+import org.eclipse.swt.graphics.Color;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.ScrollBar;
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.action.impl.composition.ChangeInfoAction;
+import org.herac.tuxguitar.app.action.impl.track.GoToTrackAction;
+import org.herac.tuxguitar.app.action.impl.track.TrackPropertiesAction;
+import org.herac.tuxguitar.app.editors.TGRedrawListener;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.editors.TablatureEditor;
+import org.herac.tuxguitar.app.items.menu.TrackMenu;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.graphics.control.TGTrackImpl;
+import org.herac.tuxguitar.song.models.TGBeat;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGTrack;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class TGTableViewer implements TGRedrawListener, TGUpdateListener, LanguageLoader {
+	
+	private Composite composite;
+	private ScrollBar hScroll;
+	private Color[] backgrounds;
+	private Color[] foregrounds;
+	private TGTable table;
+	private int selectedTrack;
+	private int selectedMeasure;
+	private int trackCount = 0;
+	private boolean autoSizeEnabled;
+	private boolean update;
+	private boolean followScroll;
+	private boolean resetTexts;
+	
+	public TGTableViewer() {
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getEditorManager().addRedrawListener(this);
+		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
+	}
+	
+	public void init(Composite parent){
+		this.composite = new Composite(parent,SWT.H_SCROLL);
+		this.addColors();
+		this.addLayout();
+		this.addTable();
+		this.addHScroll();
+		this.loadConfig();
+	}
+	
+	private void addColors(){
+		Display display = this.getComposite().getDisplay();
+
+		this.backgrounds = new Color[]{
+			new Color(display,255,255,255),
+			new Color(display,238,238,238),
+			new Color(display,192,192,192),
+		};
+		this.foregrounds = new Color[]{
+			new Color( display, 0, 0, 0 ),
+			new Color( display, 0, 0, 0 ),
+			new Color( display, 0, 0, 0 ),
+		};
+	}
+	
+	private void addLayout(){
+		GridLayout layout = new GridLayout();
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.marginTop = 0;
+		layout.marginBottom = 0;
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		getComposite().setLayout(layout);
+	}
+	
+	private void addHScroll(){
+		this.hScroll = getComposite().getHorizontalBar();
+		this.hScroll.addListener(SWT.Selection, new Listener() {
+			public void handleEvent(Event e) {
+				redrawLocked();
+			}
+		});
+	}
+	
+	private void addTable(){
+		MouseListener listener = mouseFocusListener();
+		this.table = new TGTable(getComposite());
+		this.table.getColumnNumber().getControl().addMouseListener(listener);
+		this.table.getColumnSoloMute().getControl().addMouseListener(listener);
+		this.table.getColumnName().getControl().addMouseListener(listener);
+		this.table.getColumnInstrument().getControl().addMouseListener(listener);
+		this.table.getColumnCanvas().getControl().addMouseListener(listener);
+		this.table.getColumnCanvas().getControl().addMouseListener(new MouseAdapter() {
+			public void mouseDoubleClick(MouseEvent e) {
+				TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+					public void run() throws TGException {
+						TGActionManager.getInstance().execute(ChangeInfoAction.NAME);
+					}
+				});
+			}
+		});
+		this.fireUpdate(true);
+		this.loadProperties();
+	}
+	
+	public void loadProperties() {
+		this.table.getColumnNumber().setTitle(TuxGuitar.getProperty("track.number"));
+		this.table.getColumnSoloMute().setTitle(TuxGuitar.getProperty("track.short-solo-mute"));
+		this.table.getColumnName().setTitle(TuxGuitar.getProperty("track.name"));
+		this.table.getColumnInstrument().setTitle(TuxGuitar.getProperty("track.instrument"));
+	}
+	
+	public void fireUpdate(boolean newSong){
+		this.update = true;
+		if(newSong){
+			this.trackCount = 0;
+		}
+	}
+	
+	public void updateItems(){
+		this.resetTexts = true;
+		this.followScroll = true;
+	}
+	
+	public void updateHScroll(){
+		int width = (getEditor().getTablature().getCaret().getTrack().countMeasures() * this.table.getRowHeight());
+		this.hScroll.setIncrement(this.table.getScrollIncrement());
+		this.hScroll.setMaximum(width);
+		this.hScroll.setThumb(Math.min(width ,this.table.getColumnCanvas().getControl().getClientArea().width));
+	}
+	
+	public TGTable getTable(){
+		return this.table;
+	}
+	
+	public int getHScrollSelection(){
+		return this.hScroll.getSelection();
+	}
+	
+	public TablatureEditor getEditor(){
+		return TuxGuitar.instance().getTablatureEditor();
+	}
+	
+	private String getInstrument(TGTrack track){
+		TGChannel channel = TuxGuitar.instance().getSongManager().getChannel(track.getChannelId());
+		if( channel != null ){
+			return ( channel.getName() != null ? channel.getName() : new String() );
+		}
+		return new String();
+	}
+	
+	private String getSoloMute(TGTrack track){
+		if( track.isSolo() ){
+			return TuxGuitar.getProperty("track.short-solo-mute.s");
+		}
+		if( track.isMute() ){
+			return TuxGuitar.getProperty("track.short-solo-mute.m");
+		}
+		return TuxGuitar.getProperty("track.short-solo-mute.none");
+	}
+	
+	private void updateTable(){
+		if(this.update){
+			int count = TuxGuitar.instance().getSongManager().getSong().countTracks();
+			this.table.removeRowsAfter(count);
+			for(int i = this.table.getRowCount(); i < count; i ++){
+				this.table.newRow();
+			}
+			for(int i = 0; i < count; i ++){
+				final TGTrack track = TuxGuitar.instance().getSongManager().getSong().getTrack(i);
+				final TGTableRow row = this.table.getRow(i);
+				if(row != null){
+					//Number
+					row.getNumber().setText(Integer.toString(track.getNumber()));
+					row.getNumber().setData(track);
+					row.getNumber().setMenu(createTrackMenu());
+					
+					//Solo-Mute
+					row.getSoloMute().setText(getSoloMute(track));
+					row.getSoloMute().setData(track);
+					row.getSoloMute().setMenu(createTrackMenu());
+					
+					//Name
+					row.getName().setText(track.getName());
+					row.getName().setData(track);
+					row.getName().setMenu(createTrackMenu());
+					
+					//Instrument
+					row.getInstrument().setText(getInstrument(track));
+					row.getInstrument().setData(track);
+					row.getInstrument().setMenu(createTrackMenu());
+					
+					row.setMouseListenerLabel(new MouseAdapter() {
+						
+						public void mouseUp(MouseEvent e) {
+							row.getPainter().setFocus();
+						}
+						
+						public void mouseDown(MouseEvent e) {
+							if( track.getNumber() != getEditor().getTablature().getCaret().getTrack().getNumber() ){
+								TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+									public void run() throws TGException {
+										TGActionContext tgActionContext = TGActionManager.getInstance().createActionContext();
+										tgActionContext.setAttribute(GoToTrackAction.PROPERTY_TRACK, track);
+										TGActionManager.getInstance().execute(GoToTrackAction.NAME, tgActionContext);
+									}
+								});
+							}
+						}
+						
+						public void mouseDoubleClick(final MouseEvent e) {
+							new Thread(new Runnable() {
+								public void run() {
+									TGActionLock.waitFor();
+									TGSynchronizer.instance().executeLater(new TGSynchronizer.TGRunnable() {
+										public void run() throws TGException {
+											TGActionManager.getInstance().execute(TrackPropertiesAction.NAME);
+										}
+									});
+								}
+							}).start();
+						}
+					});
+					row.setMouseListenerCanvas(new MouseAdapter() {
+						
+						public void mouseUp(MouseEvent e) {
+							row.getPainter().setFocus();
+						}
+						
+						public void mouseDown(MouseEvent e) {
+							int index = ((e.x + getHScrollSelection())/ getTable().getRowHeight());
+							if(index >= 0 && index < track.countMeasures()){
+								TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure(index);
+								TGBeat beat = TuxGuitar.instance().getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
+								if(beat != null){
+									getEditor().getTablature().getCaret().moveTo((TGTrackImpl)track,measure,beat,1);
+									TuxGuitar.instance().updateCache(true);
+								}
+							}
+						}
+					});
+					row.setPaintListenerCanvas(new TGTableCanvasPainter(this,track));
+				}
+			}
+			this.table.update();
+			this.selectedTrack = 0;
+			this.selectedMeasure = 0;
+			
+			if(this.autoSizeEnabled && this.trackCount != count){
+				TuxGuitar.instance().setTableHeight( getHeight() );
+				this.trackCount = count;
+			}
+			
+		}
+		this.update = false;
+	}
+	
+	private int getHeight(){
+		Rectangle r1 = this.composite.getBounds();
+		Rectangle r2 = this.composite.getClientArea();
+		return ( this.table.getMinHeight() + (r1.height - r2.height) );
+	}
+	
+	private void resetTextsValues(){
+		int rows = this.table.getRowCount();
+		for(int i = 0; i < rows; i ++){
+			TGTableRow row = this.table.getRow(i);
+			
+			row.getNumber().setText(Integer.toString(((TGTrack)row.getNumber().getData()).getNumber()));
+			row.getSoloMute().setText(getSoloMute((TGTrack)row.getSoloMute().getData()));
+			row.getName().setText(((TGTrack)row.getName().getData()).getName());
+			row.getInstrument().setText(getInstrument((TGTrack)row.getInstrument().getData()));
+		}
+	}
+	
+	private void redrawRows(int selectedTrack){
+		int rows = this.table.getRowCount();
+		for(int i = 0; i < rows; i ++){
+			TGTableRow row = this.table.getRow(i); 
+			row.getPainter().redraw();
+			if(this.selectedTrack != selectedTrack){
+				row.setBackground( this.backgrounds[ ((selectedTrack - 1) == i)? 2: ( i % 2 ) ] );
+				row.setForeground( this.foregrounds[ ((selectedTrack - 1) == i)? 2: ( i % 2 ) ] );
+			}
+		}
+	}
+	
+	public void redrawLocked(){
+		if( !TuxGuitar.instance().isLocked() ){
+			TuxGuitar.instance().lock();
+			redraw();
+			TuxGuitar.instance().unlock();
+		}
+	}
+	
+	public void redraw(){
+		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
+			this.updateTable();
+			this.table.getColumnCanvas().setTitle(TuxGuitar.instance().getSongManager().getSong().getName());
+			int selectedTrack = getEditor().getTablature().getCaret().getTrack().getNumber();
+			this.redrawRows(selectedTrack);
+			this.selectedTrack = selectedTrack;
+			this.selectedMeasure = 0;
+			this.updateHScroll();
+			
+			if( this.resetTexts ){
+				this.resetTextsValues();
+				this.resetTexts = false;
+			}
+			if( this.followScroll ){
+				this.followHorizontalScroll(getEditor().getTablature().getCaret().getMeasure().getNumber());
+				this.followScroll = false;
+			}
+			getComposite().redraw();
+		}
+	}
+	
+	public void redrawPlayingMode(){
+		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
+			TGMeasure measure =  TuxGuitar.instance().getEditorCache().getPlayMeasure();
+			if(measure != null && measure.getTrack() != null){
+				this.updateTable();
+				int selectedTrack = measure.getTrack().getNumber();
+				int selectedMeasure = measure.getNumber();
+				if(this.selectedTrack != selectedTrack || this.selectedMeasure != selectedMeasure){
+					this.redrawRows(selectedTrack);
+					this.followHorizontalScroll(selectedMeasure);
+				}
+				this.selectedTrack = selectedTrack;
+				this.selectedMeasure = selectedMeasure;
+			}
+		}
+	}
+	
+	private void followHorizontalScroll(int selectedMeasure){
+		int hScrollSelection = this.hScroll.getSelection();
+		int hScrollThumb = this.hScroll.getThumb();
+		
+		int measureSize = this.table.getRowHeight();
+		int measurePosition = ( (selectedMeasure * measureSize) - measureSize );
+		
+		if( (measurePosition - hScrollSelection) < 0 || (measurePosition + measureSize - hScrollSelection ) > hScrollThumb){
+			this.hScroll.setSelection(measurePosition);
+		}
+	}
+	
+	public void loadConfig(){
+		this.autoSizeEnabled = TuxGuitar.instance().getConfig().getBooleanValue(TGConfigKeys.TABLE_AUTO_SIZE);
+		this.trackCount = 0;
+	}
+	
+	public Composite getComposite(){
+		return this.composite;
+	}
+	
+	public Menu createTrackMenu(){
+		final TrackMenu trackMenu = new TrackMenu(getComposite().getShell(),SWT.POP_UP);
+		trackMenu.showItems();
+		trackMenu.update();
+		
+		final TGUpdateListener trackMenuUpdateListener = new TGUpdateListener() {
+			public void doUpdate(int type) {
+				if(!trackMenu.isDisposed() && type == TGUpdateListener.SELECTION ){
+					trackMenu.update();
+				}	
+			}
+		};
+		final LanguageLoader trackMenuLanguageLoader = new LanguageLoader() {
+			public void loadProperties() {
+				if(!trackMenu.isDisposed()){
+					trackMenu.loadProperties();
+				}
+			}
+		};
+		final IconLoader trackMenuIconLoader = new IconLoader() {
+			public void loadIcons() {
+				if(!trackMenu.isDisposed()){
+					trackMenu.loadIcons();
+				}
+			}
+		};
+		
+		TuxGuitar.instance().getEditorManager().addUpdateListener(trackMenuUpdateListener);
+		TuxGuitar.instance().getLanguageManager().addLoader(trackMenuLanguageLoader);
+		TuxGuitar.instance().getIconManager().addLoader(trackMenuIconLoader);
+		
+		trackMenu.getMenu().addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				TuxGuitar.instance().getEditorManager().removeUpdateListener(trackMenuUpdateListener);
+				TuxGuitar.instance().getLanguageManager().removeLoader(trackMenuLanguageLoader);
+				TuxGuitar.instance().getIconManager().removeLoader(trackMenuIconLoader);
+			}
+		});
+		
+		return trackMenu.getMenu();
+	}
+	
+	public void disposeColors(){
+		for(int i = 0; i < this.backgrounds.length; i++){
+			this.backgrounds[i].dispose();
+		}
+		for(int i = 0; i < this.foregrounds.length; i++){
+			this.foregrounds[i].dispose();
+		}
+	}
+	
+	public void dispose(){
+		if(!isDisposed()){
+			getComposite().dispose();
+			disposeColors();
+		}
+	}
+	
+	public boolean isDisposed(){
+		return (getComposite() == null || getComposite().isDisposed());
+	}
+	
+	protected int getSelectedTrack(){
+		return this.selectedTrack;
+	}
+	
+	private MouseListener mouseFocusListener(){
+		return new MouseAdapter() {
+			public void mouseUp(MouseEvent e) {
+				TGTable table = getTable();
+				if(table != null){
+					TGTableRow row = table.getRow( ( getSelectedTrack() - 1 ) );
+					if(row != null){
+						row.getPainter().setFocus();
+					}
+				}
+			}
+		};
+	}
+
+	public void doRedraw(int type) {
+		if( type == TGRedrawListener.NORMAL ){
+			this.redraw();
+		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
+			this.redrawPlayingMode();
+		}
+	}
+	
+	public void doUpdate(int type) {
+		if( type == TGUpdateListener.SELECTION ){
+			this.updateItems();
+		}else if( type == TGUpdateListener.SONG_UPDATED ){
+			this.fireUpdate( false );
+		}else if( type == TGUpdateListener.SONG_LOADED ){
+			this.fireUpdate( true );
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserCollection.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserCollection.java
new file mode 100644
index 0000000..05013e0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserCollection.java
@@ -0,0 +1,30 @@
+package org.herac.tuxguitar.app.tools.browser;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
+
+public class TGBrowserCollection {
+	
+	private String type;
+	private TGBrowserData data;
+	
+	public TGBrowserCollection(){
+		super();
+	}
+	
+	public TGBrowserData getData() {
+		return this.data;
+	}
+	
+	public void setData(TGBrowserData data) {
+		this.data = data;
+	}
+	
+	public String getType() {
+		return this.type;
+	}
+	
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserCollectionInfo.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserCollectionInfo.java
new file mode 100644
index 0000000..ffcb07a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserCollectionInfo.java
@@ -0,0 +1,28 @@
+package org.herac.tuxguitar.app.tools.browser;
+
+public class TGBrowserCollectionInfo {
+	
+	private String type;
+	private String data;
+	
+	public TGBrowserCollectionInfo(){
+		super();
+	}
+	
+	public String getData() {
+		return this.data;
+	}
+	
+	public void setData(String data) {
+		this.data = data;
+	}
+	
+	public String getType() {
+		return this.type;
+	}
+	
+	public void setType(String type) {
+		this.type = type;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserConnection.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserConnection.java
new file mode 100644
index 0000000..37ee996
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserConnection.java
@@ -0,0 +1,225 @@
+package org.herac.tuxguitar.app.tools.browser;
+
+import java.io.InputStream;
+import java.util.List;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowser;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
+
+public class TGBrowserConnection {
+	
+	private boolean locked;
+	private TGBrowser browser;
+	private TGBrowserConnectionHandler handler;
+	
+	public TGBrowserConnection(TGBrowserConnectionHandler handler){
+		this.handler = handler;
+	}
+	
+	protected void lock(){
+		this.locked = true;
+		this.handler.notifyLockStatusChanged();
+	}
+	
+	protected void unlock(){
+		this.locked = false;
+		this.handler.notifyLockStatusChanged();
+	}
+	
+	public boolean isLocked(){
+		return this.locked;
+	}
+	
+	public TGBrowser getBrowser(){
+		return this.browser;
+	}
+	
+	public boolean isOpen(){
+		return (getBrowser() != null);
+	}
+	
+	public void open(final int callId,final TGBrowser browser){
+		if(!isLocked()){
+			this.close(callId);
+			this.lock();
+			this.browser = browser;
+			new Thread(new Runnable() {
+				public void run() {
+					try {
+						if(getBrowser() != null){
+							getBrowser().open();
+							notifyOpened(callId);
+						}else{
+							notifyClosed(callId);
+						}
+					} catch (TGBrowserException e) {
+						notifyError(callId,e);
+						e.printStackTrace();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	public void close(final int callId){
+		if(!isLocked()){
+			this.lock();
+			final TGBrowser browser = getBrowser();
+			this.browser = null;
+			new Thread(new Runnable() {
+				public void run() {
+					try {
+						if(browser != null){
+							browser.close();
+							notifyClosed(callId);
+						}else{
+							notifyClosed(callId);
+						}
+					} catch (TGBrowserException e) {
+						notifyError(callId,e);
+						e.printStackTrace();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	public void cdRoot(final int callId){
+		if(!isLocked()){
+			this.lock();
+			new Thread(new Runnable() {
+				public void run() {
+					try {
+						if(isOpen()){
+							getBrowser().cdRoot();
+							notifyCd(callId);
+						}else{
+							notifyClosed(callId);
+						}
+					} catch (TGBrowserException e) {
+						notifyError(callId,e);
+						e.printStackTrace();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	public void cdUp(final int callId){
+		if(!isLocked()){
+			this.lock();
+			new Thread(new Runnable() {
+				public void run() {
+					try {
+						if(isOpen()){
+							getBrowser().cdUp();
+							notifyCd(callId);
+						}else{
+							notifyClosed(callId);
+						}
+					} catch (TGBrowserException e) {
+						notifyError(callId,e);
+						e.printStackTrace();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	public void cd(final int callId,final TGBrowserElement element){
+		if(!isLocked()){
+			this.lock();
+			new Thread(new Runnable() {
+				public void run() {
+					try {
+						if(isOpen()){
+							getBrowser().cdElement(element);
+							notifyCd(callId);
+						}else{
+							notifyClosed(callId);
+						}
+					} catch (TGBrowserException e) {
+						notifyError(callId,e);
+						e.printStackTrace();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	public void listElements(final int callId){
+		if(!isLocked()){
+			this.lock();
+			new Thread(new Runnable() {
+				public void run() {
+					try {
+						if(isOpen()){
+							List elements = getBrowser().listElements();
+							notifyElements(callId,elements);
+						}else{
+							notifyClosed(callId);
+						}
+					} catch (TGBrowserException e) {
+						notifyError(callId,e);
+						e.printStackTrace();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	public void openStream(final int callId,final TGBrowserElement element){
+		if(!isLocked()){
+			this.lock();
+			new Thread(new Runnable() {
+				public void run() {
+					try {
+						if(element == null){
+							release();
+							return;
+						}
+						if(element.isFolder()){
+							release();
+							cd(callId,element);
+						}
+						else{
+							InputStream stream = element.getInputStream();
+							notifyStream(callId,stream,element);
+						}
+					} catch (TGBrowserException e) {
+						notifyError(callId,e);
+						e.printStackTrace();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	public void release(){
+		this.unlock();
+	}
+	
+	public void notifyCd(final int callId) {
+		this.handler.notifyCd(callId);
+	}
+	
+	public void notifyClosed(final int callId) {
+		this.handler.notifyClosed(callId);
+	}
+	
+	public void notifyElements(final int callId,List elements) {
+		this.handler.notifyElements(callId,elements);
+	}
+	
+	public void notifyError(final int callId,Throwable throwable) {
+		this.handler.notifyError(callId,throwable);
+	}
+	
+	public void notifyOpened(final int callId) {
+		this.handler.notifyOpened(callId);
+	}
+	
+	public void notifyStream(final int callId,InputStream stream, TGBrowserElement element) {
+		this.handler.notifyStream(callId,stream,element);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserConnectionHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserConnectionHandler.java
new file mode 100644
index 0000000..fe68f7d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserConnectionHandler.java
@@ -0,0 +1,23 @@
+package org.herac.tuxguitar.app.tools.browser;
+
+import java.io.InputStream;
+import java.util.List;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
+
+public interface TGBrowserConnectionHandler {
+	
+	public void notifyLockStatusChanged();
+	
+	public void notifyOpened(int callId);
+	
+	public void notifyClosed(int callId);
+	
+	public void notifyCd(int callId);
+	
+	public void notifyElements(int callId,List elements);
+	
+	public void notifyStream(int callId,InputStream stream,TGBrowserElement element);
+	
+	public void notifyError(int callId,Throwable throwable);
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserException.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserException.java
new file mode 100644
index 0000000..5e42c50
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserException.java
@@ -0,0 +1,23 @@
+package org.herac.tuxguitar.app.tools.browser;
+
+public class TGBrowserException extends Exception{
+	
+	private static final long serialVersionUID = 1L;
+	
+	public TGBrowserException() {
+		super();
+	}
+	
+	public TGBrowserException(String message, Throwable cause) {
+		super(message, cause);
+	}
+	
+	public TGBrowserException(String message) {
+		super(message);
+	}
+	
+	public TGBrowserException(Throwable cause) {
+		super(cause);
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserFactoryHandler.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserFactoryHandler.java
new file mode 100644
index 0000000..cef9387
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserFactoryHandler.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.app.tools.browser;
+
+public interface TGBrowserFactoryHandler {
+	
+	public void notifyAdded();
+	
+	public void notifyRemoved();
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserManager.java
new file mode 100644
index 0000000..9bcaaaf
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/TGBrowserManager.java
@@ -0,0 +1,162 @@
+package org.herac.tuxguitar.app.tools.browser;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+import org.herac.tuxguitar.app.tools.browser.filesystem.TGBrowserFactoryImpl;
+import org.herac.tuxguitar.app.tools.browser.xml.TGBrowserReader;
+import org.herac.tuxguitar.app.tools.browser.xml.TGBrowserWriter;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+
+public class TGBrowserManager {
+	
+	private static TGBrowserManager instance;
+	
+	private List factories;
+	private List collections;
+	private List collectionInfos;
+	private boolean changes;
+	
+	private TGBrowserFactoryHandler handler;
+	
+	private TGBrowserManager(){
+		this.factories = new ArrayList();
+		this.collections = new ArrayList();
+		this.collectionInfos = new ArrayList();
+		this.readCollections();
+		this.addDefaultFactory();
+	}
+	
+	public static TGBrowserManager instance(){
+		if(instance == null){
+			instance = new TGBrowserManager();
+		}
+		return instance;
+	}
+	
+	public void setFactoryHandler(TGBrowserFactoryHandler handler){
+		this.handler = handler;
+	}
+	
+	public Iterator getFactories(){
+		return this.factories.iterator();
+	}
+	
+	public TGBrowserFactory getFactory(String type){
+		Iterator factories = getFactories();
+		while(factories.hasNext()){
+			TGBrowserFactory factory = (TGBrowserFactory)factories.next();
+			if(factory.getType().equals(type)){
+				return factory;
+			}
+		}
+		return null;
+	}
+	
+	public void addFactory(TGBrowserFactory factory){
+		this.factories.add(factory);
+		
+		Iterator it = this.collectionInfos.iterator();
+		while(it.hasNext()){
+			TGBrowserCollectionInfo info = (TGBrowserCollectionInfo)it.next();
+			if(info.getType().equals(factory.getType())){
+				TGBrowserCollection collection = new TGBrowserCollection();
+				collection.setType(factory.getType());
+				collection.setData(factory.parseData(info.getData()));
+				addCollection(collection);
+			}
+		}
+		
+		if(this.handler != null){
+			this.handler.notifyAdded();
+		}
+	}
+	
+	public void removeFactory(TGBrowserFactory factory){
+		this.factories.remove(factory);
+		
+		int index = 0;
+		while(index < this.collections.size()){
+			TGBrowserCollection collection = (TGBrowserCollection)this.collections.get(index);
+			if(collection.getType().equals(factory.getType())){
+				removeCollection(collection);
+				continue;
+			}
+			index ++;
+		}
+		if(this.handler != null){
+			this.handler.notifyRemoved();
+		}
+	}
+	
+	public void addInfo(TGBrowserCollectionInfo info){
+		this.collectionInfos.add(info);
+	}
+	
+	public Iterator getCollections(){
+		return this.collections.iterator();
+	}
+	
+	public int countCollections(){
+		return this.collections.size();
+	}
+	
+	public void removeCollection(TGBrowserCollection collection){
+		this.collections.remove(collection);
+		this.changes = true;
+	}
+	
+	public TGBrowserCollection addCollection(TGBrowserCollection collection){
+		if(collection.getData() != null ){
+			TGBrowserCollection existent = getCollection(collection.getType(), collection.getData());
+			if( existent != null ){
+				return existent;
+			}
+			this.collections.add(collection);
+			this.changes = true;
+		}
+		return collection;
+	}
+	
+	public TGBrowserCollection getCollection(String type, TGBrowserData data ){
+		Iterator it = this.getCollections();
+		while( it.hasNext() ){
+			TGBrowserCollection collection = ( TGBrowserCollection ) it.next();
+			if( collection.getType().equals(type) && collection.getData().equals(data) ){
+				return collection;
+			}
+		}
+		return null;
+	}
+	
+	public TGBrowserCollection getCollection(int index){
+		if(index >= 0 && index < countCollections()){
+			return (TGBrowserCollection)this.collections.get(index);
+		}
+		return null;
+	}
+	
+	public void readCollections(){
+		new TGBrowserReader().loadCollections(this,new File(getCollectionsFileName()));
+		this.changes = false;
+	}
+	
+	public void writeCollections(){
+		if(this.changes){
+			new TGBrowserWriter().saveCollections(this,getCollectionsFileName());
+		}
+		this.changes = false;
+	}
+	
+	private String getCollectionsFileName(){
+		return TGFileUtils.PATH_USER_CONFIG + File.separator + "browser-collections.xml";
+	}
+	
+	private void addDefaultFactory(){
+		this.addFactory(new TGBrowserFactoryImpl());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowser.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowser.java
new file mode 100644
index 0000000..37667a7
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowser.java
@@ -0,0 +1,25 @@
+package org.herac.tuxguitar.app.tools.browser.base;
+
+import java.util.List;
+
+import org.herac.tuxguitar.app.tools.browser.TGBrowserException;
+
+public abstract class TGBrowser {
+	
+	public TGBrowser(){
+		super();
+	}
+	
+	public abstract void open() throws TGBrowserException;
+	
+	public abstract void close()throws TGBrowserException;
+	
+	public abstract void cdRoot()throws TGBrowserException;
+	
+	public abstract void cdUp()throws TGBrowserException;
+	
+	public abstract void cdElement(TGBrowserElement element)throws TGBrowserException;
+	
+	public abstract List listElements()throws TGBrowserException;
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowserData.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowserData.java
new file mode 100644
index 0000000..3dcccd9
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowserData.java
@@ -0,0 +1,9 @@
+package org.herac.tuxguitar.app.tools.browser.base;
+
+public interface TGBrowserData {
+	
+	public String getTitle();
+	
+	public String toString();
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowserElement.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowserElement.java
new file mode 100644
index 0000000..b182d12
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowserElement.java
@@ -0,0 +1,23 @@
+package org.herac.tuxguitar.app.tools.browser.base;
+
+import java.io.InputStream;
+
+import org.herac.tuxguitar.app.tools.browser.TGBrowserException;
+
+public abstract class TGBrowserElement {
+	
+	private String name;
+	
+	public TGBrowserElement(String name){
+		this.name = name;
+	}
+	
+	public String getName(){
+		return this.name;
+	}
+	
+	public abstract boolean isFolder();
+	
+	public abstract InputStream getInputStream() throws TGBrowserException;
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowserFactory.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowserFactory.java
new file mode 100644
index 0000000..ecd79fa
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/base/TGBrowserFactory.java
@@ -0,0 +1,16 @@
+package org.herac.tuxguitar.app.tools.browser.base;
+
+import org.eclipse.swt.widgets.Shell;
+
+public interface TGBrowserFactory {
+	
+	public String getName();
+	
+	public String getType();
+	
+	public TGBrowserData parseData(String string);
+	
+	public TGBrowserData dataDialog(Shell parent);
+	
+	public TGBrowser newTGBrowser(TGBrowserData data);
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserBar.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserBar.java
new file mode 100644
index 0000000..e019e7d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserBar.java
@@ -0,0 +1,65 @@
+package org.herac.tuxguitar.app.tools.browser.dialog;
+
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserCollection;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserManager;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+
+public abstract class TGBrowserBar implements LanguageLoader{
+	private TGBrowserDialog browser;
+	
+	public TGBrowserBar(TGBrowserDialog browser){
+		this.browser = browser;
+	}
+	
+	public abstract void init(Shell shell);
+	
+	public abstract void updateItems();
+	
+	public abstract void updateCollections(TGBrowserCollection selection);
+	
+	protected TGBrowserDialog getBrowser(){
+		return this.browser;
+	}
+	
+	protected void newCollection(String type){
+		TGBrowserFactory factory = TGBrowserManager.instance().getFactory(type);
+		if(factory != null){
+			TGBrowserData data = factory.dataDialog(getBrowser().getShell());
+			if(data != null){
+				openCollection(addCollection(factory, data, true));
+			}
+		}
+	}
+	
+	protected TGBrowserCollection addCollection(TGBrowserFactory factory,String data){
+		return this.addCollection(factory,factory.parseData(data),false);
+	}
+	
+	protected TGBrowserCollection addCollection(TGBrowserFactory factory,TGBrowserData data,boolean reload){
+		TGBrowserCollection collection = new TGBrowserCollection();
+		collection.setType(factory.getType());
+		collection.setData(data);
+		collection = TGBrowserManager.instance().addCollection(collection);
+		if(reload){
+			getBrowser().updateCollections(collection);
+		}
+		return collection;
+	}
+	
+	protected void openCollection(TGBrowserCollection collection){
+		getBrowser().setCollection(collection);
+		getBrowser().openCollection();
+	}
+	
+	protected void removeCollection(TGBrowserCollection collection){
+		getBrowser().removeCollection(collection);
+	}
+	
+	protected void closeCollection(){
+		getBrowser().closeCollection();
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserCollectionCombo.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserCollectionCombo.java
new file mode 100644
index 0000000..83e3952
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserCollectionCombo.java
@@ -0,0 +1,66 @@
+package org.herac.tuxguitar.app.tools.browser.dialog;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserCollection;
+
+public class TGBrowserCollectionCombo {
+	
+	private Combo combo;
+	private List collections;
+	
+	public TGBrowserCollectionCombo(Composite parent, int style){
+		this.combo = new Combo(parent,style);
+		this.collections = new ArrayList();
+		this.addFirstElement();
+	}
+	
+	private void addFirstElement(){
+		this.combo.add(TuxGuitar.getProperty("browser.collection.select"));
+		this.combo.select(0);
+	}
+	
+	public void add(TGBrowserCollection collection) {
+		this.combo.add(collection.getData().getTitle());
+		this.collections.add(collection);
+	}
+	
+	public TGBrowserCollection getSelection(){
+		int index = ( this.combo.getSelectionIndex() - 1);
+		if(index >= 0 && index < this.collections.size()){
+			return ( (TGBrowserCollection)this.collections.get(index) );
+		}
+		return null;
+	}
+	
+	public void addSelectionListener(SelectionListener listener) {
+		this.combo.addSelectionListener(listener);
+	}
+	
+	public void setLayoutData(Object layoutData) {
+		this.combo.setLayoutData(layoutData);
+	}
+	
+	public void removeAll() {
+		this.combo.removeAll();
+		this.collections.clear();
+		this.addFirstElement();
+	}
+	
+	public void select(int index) {
+		this.combo.select( ( index + 1 ) );
+	}
+	
+	public void setEnabled(boolean enabled){
+		this.combo.setEnabled(enabled);
+	}
+	
+	public boolean isEmpty(){
+		return this.collections.isEmpty();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserDialog.java
new file mode 100644
index 0000000..5034857
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserDialog.java
@@ -0,0 +1,393 @@
+package org.herac.tuxguitar.app.tools.browser.dialog;
+
+import java.io.InputStream;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.action.impl.file.FileActionUtils;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserCollection;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserConnection;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserConnectionHandler;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserFactoryHandler;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserManager;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+import org.herac.tuxguitar.app.util.ConfirmDialog;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.io.base.TGFileFormatException;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class TGBrowserDialog implements TGBrowserFactoryHandler,TGBrowserConnectionHandler,IconLoader,LanguageLoader{
+	
+	private static final int SHELL_WIDTH = 500;
+	private static final int SHELL_HEIGHT = 350;
+	
+	public static final int CALL_OPEN = 1;
+	public static final int CALL_CLOSE = 2;
+	public static final int CALL_CD_ROOT = 3;
+	public static final int CALL_CD_UP = 4;
+	public static final int CALL_LIST = 5;
+	public static final int CALL_ELEMENT = 6;
+	
+	private TGBrowserCollection collection;
+	private TGBrowserConnection connection;
+	private Shell dialog;
+	protected Table table;
+	protected TableColumn column;
+	protected List elements;
+	protected TGBrowserMenuBar menu;
+	protected TGBrowserToolBar toolBar;
+	
+	public TGBrowserDialog(){
+		this.connection = new TGBrowserConnection(this);
+		this.menu = new TGBrowserMenuBar(this);
+		this.toolBar = new TGBrowserToolBar(this);
+	}
+	
+	public TGBrowserConnection getConnection(){
+		return this.connection;
+	}
+	
+	public TGBrowserCollection getCollection() {
+		return this.collection;
+	}
+	
+	public void setCollection(TGBrowserCollection collection) {
+		this.collection = collection;
+	}
+	
+	public Shell getShell(){
+		return this.dialog;
+	}
+	
+	public void exit(){
+		this.getConnection().release();
+		this.getConnection().close(CALL_CLOSE);
+		TGBrowserManager.instance().writeCollections();
+		TuxGuitar.instance().getIconManager().removeLoader(this);
+	}
+	
+	public void show(){
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE);
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+		
+		this.menu.init(getShell());
+		this.toolBar.init(getShell());
+		this.initTable(this.dialog);
+		this.updateCollections(null);
+		this.updateTable();
+		this.dialog.setSize(SHELL_WIDTH,SHELL_HEIGHT);
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				exit();
+			}
+		});
+		
+		this.loadProperties();
+		this.updateBars();
+		
+		TGBrowserManager.instance().setFactoryHandler(this);
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER);
+	}
+	
+	private void initTable(Composite parent){
+		this.table = new Table(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
+		this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.table.setLinesVisible(TuxGuitar.instance().getConfig().getBooleanValue(TGConfigKeys.BROWSER_LINES_VISIBLE));
+		this.table.setHeaderVisible(false);
+		
+		this.column = new TableColumn(this.table, SWT.LEFT);
+		
+		this.table.addListener (SWT.MouseDoubleClick, new Listener() {
+			public void handleEvent (Event event) {
+				openElement();
+			}
+		});
+	}
+	
+	public boolean isDisposed(){
+		return (this.dialog == null || this.dialog.isDisposed());
+	}
+	
+	public void dispose(){
+		if(!isDisposed()){
+			this.dialog.dispose();
+		}
+	}
+	
+	private void updateTable(){
+		if(!isDisposed()){
+			new SyncThread(new Runnable() {
+				public void run() {
+					if(!isDisposed()){
+						TGBrowserDialog.this.table.removeAll();
+						if(TGBrowserDialog.this.elements != null){
+							Iterator it = TGBrowserDialog.this.elements.iterator();
+							while(it.hasNext()){
+								TGBrowserElement element = (TGBrowserElement)it.next();
+								TableItem item = new TableItem(TGBrowserDialog.this.table, SWT.NONE);
+								item.setImage(element.isFolder()?TuxGuitar.instance().getIconManager().getBrowserFolder():TuxGuitar.instance().getIconManager().getBrowserFile());
+								item.setText(element.getName());
+							}
+						}
+						updateColumn();
+					}
+				}
+			}).start();
+		}
+	}
+	
+	protected void updateColumn(){
+		if(!isDisposed()){
+			this.column.pack();
+		}
+	}
+	
+	public void updateBars(){
+		if(!isDisposed()){
+			this.menu.updateItems();
+			this.toolBar.updateItems();
+		}
+	}
+	
+	public void updateCollections(final TGBrowserCollection selection){
+		if(!isDisposed()){
+			new SyncThread(new Runnable() {
+				public void run() {
+					if(!isDisposed()){
+						TGBrowserDialog.this.menu.updateCollections(selection);
+						TGBrowserDialog.this.toolBar.updateCollections(selection);
+					}
+				}
+			}).start();
+		}
+	}
+	
+	public TGBrowserElement getSelection(int index){
+		if(!isDisposed() && getConnection().isOpen()){
+			if(this.elements != null && index >= 0 && index < this.elements.size()){
+				return (TGBrowserElement)this.elements.get(index);
+			}
+		}
+		return null;
+	}
+	
+	protected void removeElements(){
+		this.elements = null;
+	}
+	
+	protected void addElements(List elements){
+		this.elements = elements;
+	}
+	
+	protected void openCollection(){
+		if(!isDisposed() && getCollection() != null){
+			TGBrowserFactory factory = TGBrowserManager.instance().getFactory(getCollection().getType());
+			getConnection().open(CALL_OPEN,factory.newTGBrowser(getCollection().getData()));
+		}
+	}
+	
+	protected void closeCollection(){
+		if(!isDisposed() && getCollection() != null){
+			this.getConnection().close(CALL_CLOSE);
+		}
+	}
+	
+	protected void removeCollection(TGBrowserCollection collection){
+		if(collection != null){
+			TGBrowserManager.instance().removeCollection(collection);
+			if( getCollection() != null && getCollection().equals( collection ) ){
+				this.getConnection().close(CALL_CLOSE);
+			}else{
+				this.updateCollections( getCollection() );
+			}
+		}
+	}
+	
+	public void openElement(){
+		TGBrowserElement element = getSelection(this.table.getSelectionIndex());
+		if(element != null){
+			this.getConnection().openStream(CALL_ELEMENT,element);
+		}
+	}
+	
+	public void notifyLockStatusChanged(){
+		new SyncThread(new Runnable() {
+			public void run() {
+				if(!isDisposed()){
+					updateBars();
+					TuxGuitar.instance().loadCursor(getShell(),( getConnection().isLocked() ? SWT.CURSOR_WAIT : SWT.CURSOR_ARROW ) );
+				}
+			}
+		}).start();
+	}
+	
+	public void notifyOpened(int callId) {
+		if(!isDisposed()){
+			this.removeElements();
+			this.updateTable();
+			this.updateCollections(getCollection());
+			this.getConnection().release();
+			this.getConnection().listElements(CALL_LIST);
+		}
+	}
+	
+	public void notifyClosed(int callId) {
+		if(callId != CALL_OPEN){
+			this.setCollection(null);
+		}
+		this.removeElements();
+		this.updateCollections(getCollection());
+		this.updateTable();
+		if(callId != CALL_OPEN){
+			this.getConnection().release();
+		}
+	}
+	
+	public void notifyError(int callId,Throwable throwable){
+		if(!isDisposed()){
+			this.updateTable();
+			this.getConnection().release();
+			MessageDialog.errorMessage(getShell(),throwable);
+		}
+	}
+	
+	public void notifyCd(int callId) {
+		if(!isDisposed()){
+			this.getConnection().release();
+			this.getConnection().listElements(CALL_LIST);
+		}
+	}
+	
+	public void notifyElements(int callId,List elements) {
+		if(!isDisposed()){
+			this.addElements(elements);
+			this.updateTable();
+			this.getConnection().release();
+		}
+	}
+	
+	public void notifyStream(int callId,final InputStream stream,final TGBrowserElement element) {
+		if(!isDisposed()){
+			TGActionLock.lock();
+			new SyncThread(new Runnable() {
+				public void run() {
+					if(!TuxGuitar.isDisposed()){
+						TuxGuitar.instance().getPlayer().reset();
+						if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
+							ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
+							confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
+							int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
+							if(status == ConfirmDialog.STATUS_CANCEL){
+								getConnection().release();
+								TGActionLock.unlock();
+								return;
+							}
+							if(status == ConfirmDialog.STATUS_YES){
+								final String fileName = FileActionUtils.getFileName();
+								if(fileName == null){
+									getConnection().release();
+									TGActionLock.unlock();
+									return;
+								}
+								new Thread(new Runnable() {
+									public void run() {
+										if(!TuxGuitar.isDisposed()){
+											FileActionUtils.save(fileName);
+											new SyncThread(new Runnable() {
+												public void run() {
+													if(!TuxGuitar.isDisposed()){
+														openStream(stream,element);
+													}
+												}
+											}).start();
+										}
+									}
+								}).start();
+								return;
+							}
+						}
+						openStream(stream,element);
+					}
+				}
+			}).start();
+		}
+	}
+	
+	protected void openStream(final InputStream stream,final TGBrowserElement element){
+		new Thread(new Runnable() {
+			public void run() {
+				if(!TuxGuitar.isDisposed()){
+					try {
+						TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream);
+						TuxGuitar.instance().fireNewSong(song,null);
+					}catch (Throwable throwable) {
+						TuxGuitar.instance().newSong();
+						MessageDialog.errorMessage(getShell(),new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{element.getName()}),throwable));
+					}
+					getConnection().release();
+					TGActionLock.unlock();
+				}
+			}
+		}).start();
+	}
+	
+	public void loadIcons() {
+		if(!isDisposed()){
+			this.getShell().setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+			this.reload();
+		}
+	}
+	
+	public void loadProperties() {
+		if(!isDisposed()){
+			this.dialog.setText(TuxGuitar.getProperty("browser.dialog"));
+			this.menu.loadProperties();
+			this.toolBar.loadProperties();
+		}
+	}
+	
+	public void notifyAdded() {
+		reload();
+	}
+	
+	public void notifyRemoved() {
+		if(getCollection() != null){
+			closeCollection();
+		}
+		reload();
+	}
+	
+	protected void reload(){
+		if(!isDisposed()){
+			this.menu.reload(getShell());
+			this.toolBar.reload();
+			this.updateTable();
+			this.updateCollections(getCollection());
+			this.getShell().layout();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserMenuBar.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserMenuBar.java
new file mode 100644
index 0000000..317b892
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserMenuBar.java
@@ -0,0 +1,217 @@
+package org.herac.tuxguitar.app.tools.browser.dialog;
+
+import java.util.Iterator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserCollection;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserManager;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+
+public class TGBrowserMenuBar extends TGBrowserBar{
+	private Menu menu;
+	private Menu newCollection;
+	private Menu openCollection;
+	private Menu removeCollection;
+	
+	private MenuItem menuFileItem;
+	private MenuItem menuCollectionItem;
+	private MenuItem menuGoItem;
+	private MenuItem open;
+	private MenuItem exit;
+	private MenuItem newItem;
+	private MenuItem openItem;
+	private MenuItem removeItem;
+	private MenuItem close;
+	private MenuItem root;
+	private MenuItem back;
+	private MenuItem refresh;
+	
+	public TGBrowserMenuBar(TGBrowserDialog browser){
+		super(browser);
+	}
+	
+	public void init(Shell shell){
+		this.menu = new Menu(shell, SWT.BAR);
+		
+		//---File menu------------------------------------------------------
+		Menu menuFile = new Menu(shell,SWT.DROP_DOWN);
+		this.menuFileItem = new MenuItem(this.menu, SWT.CASCADE);
+		this.menuFileItem.setMenu(menuFile);
+		
+		this.open = new MenuItem(menuFile,SWT.PUSH);
+		this.open.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
+		this.open.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				getBrowser().openElement();
+			}
+		});
+		
+		new MenuItem(menuFile,SWT.SEPARATOR);
+		
+		this.exit = new MenuItem(menuFile,SWT.PUSH);
+		this.exit.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				getBrowser().getShell().dispose();
+			}
+		});
+		
+		//---Collection menu------------------------------------------------------
+		Menu menuCollection = new Menu(shell,SWT.DROP_DOWN);
+		this.menuCollectionItem = new MenuItem(this.menu, SWT.CASCADE);
+		this.menuCollectionItem.setMenu(menuCollection);
+		
+		this.newCollection = new Menu(menuCollection.getShell(), SWT.DROP_DOWN);
+		this.newItem = new MenuItem(menuCollection,SWT.CASCADE);
+		this.newItem.setImage(TuxGuitar.instance().getIconManager().getBrowserNew());
+		this.newItem.setMenu(this.newCollection);
+		this.updateTypes();
+		
+		this.openCollection = new Menu(menuCollection.getShell(), SWT.DROP_DOWN);
+		this.openItem = new MenuItem(menuCollection,SWT.CASCADE);
+		this.openItem.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
+		this.openItem.setMenu(this.openCollection);
+		
+		this.removeCollection = new Menu(menuCollection.getShell(), SWT.DROP_DOWN);
+		this.removeItem = new MenuItem(menuCollection,SWT.CASCADE);
+		this.removeItem.setMenu(this.removeCollection);
+		
+		new MenuItem(menuCollection,SWT.SEPARATOR);
+		
+		this.close = new MenuItem(menuCollection,SWT.PUSH);
+		this.close.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				closeCollection();
+			}
+		});
+		
+		//---Go menu------------------------------------------------------
+		final Menu menuGo = new Menu(shell,SWT.DROP_DOWN);  
+		this.menuGoItem = new MenuItem(this.menu, SWT.CASCADE);
+		this.menuGoItem.setMenu(menuGo);
+		
+		this.root = new MenuItem(menuGo,SWT.PUSH);
+		this.root.setImage(TuxGuitar.instance().getIconManager().getBrowserRoot());
+		this.root.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				getBrowser().getConnection().cdRoot(TGBrowserDialog.CALL_CD_ROOT);
+			}
+		});
+		
+		//---Back Folder------------------------------------------------------
+		this.back = new MenuItem(menuGo,SWT.PUSH);
+		this.back.setImage(TuxGuitar.instance().getIconManager().getBrowserBack());
+		this.back.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				getBrowser().getConnection().cdUp(TGBrowserDialog.CALL_CD_UP);
+			}
+		});
+		
+		//---Refresh Folder------------------------------------------------------
+		this.refresh = new MenuItem(menuGo,SWT.PUSH);
+		this.refresh.setImage(TuxGuitar.instance().getIconManager().getBrowserRefresh());
+		this.refresh.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				getBrowser().getConnection().listElements(TGBrowserDialog.CALL_LIST);
+			}
+		});
+		
+		shell.setMenuBar(this.menu);
+	}
+	
+	public void updateItems(){
+		this.open.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
+		this.root.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
+		this.back.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
+		this.refresh.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
+		this.newItem.setEnabled(!getBrowser().getConnection().isLocked());
+		this.openItem.setEnabled(!getBrowser().getConnection().isLocked());
+		this.removeItem.setEnabled(!getBrowser().getConnection().isLocked());
+		this.close.setEnabled(!getBrowser().getConnection().isLocked());
+	}
+	
+	public void loadProperties(){
+		this.menuFileItem.setText(TuxGuitar.getProperty("browser.menu.file"));
+		this.menuCollectionItem.setText(TuxGuitar.getProperty("browser.menu.collection"));
+		this.menuGoItem.setText(TuxGuitar.getProperty("browser.menu.go"));
+		this.open.setText(TuxGuitar.getProperty("browser.open"));
+		this.exit.setText(TuxGuitar.getProperty("browser.exit"));
+		this.newItem.setText(TuxGuitar.getProperty("browser.collection.new"));
+		this.openItem.setText(TuxGuitar.getProperty("browser.collection.open"));
+		this.removeItem.setText(TuxGuitar.getProperty("browser.collection.remove"));
+		this.close.setText(TuxGuitar.getProperty("browser.collection.close"));
+		this.root.setText(TuxGuitar.getProperty("browser.go-root"));
+		this.back.setText(TuxGuitar.getProperty("browser.go-back"));
+		this.refresh.setText(TuxGuitar.getProperty("browser.refresh"));
+	}
+	
+	public void updateCollections(TGBrowserCollection selection){
+		MenuItem[] openItems = this.openCollection.getItems();
+		for(int i = 0;i < openItems.length; i ++){
+			openItems[i].dispose();
+		}
+		MenuItem[] removeItems = this.removeCollection.getItems();
+		for(int i = 0;i < removeItems.length; i ++){
+			removeItems[i].dispose();
+		}
+		Iterator it = TGBrowserManager.instance().getCollections();
+		while(it.hasNext()){
+			final TGBrowserCollection collection = (TGBrowserCollection)it.next();
+			if(collection.getData() != null){
+				MenuItem openItem = new MenuItem(this.openCollection,SWT.PUSH);
+				openItem.setText(collection.getData().getTitle());
+				openItem.addSelectionListener(new SelectionAdapter() {
+					public void widgetSelected(SelectionEvent e) {
+						openCollection(collection);
+					}
+				});
+				if(selection != null && selection.equals(collection)){
+					openItem.setSelection(true);
+				}
+				
+				MenuItem removeItem = new MenuItem(this.removeCollection,SWT.PUSH);
+				removeItem.setText(collection.getData().getTitle());
+				removeItem.addSelectionListener(new SelectionAdapter() {
+					public void widgetSelected(SelectionEvent e) {
+						removeCollection(collection);
+					}
+				});
+				if(selection != null && selection.equals(collection)){
+					removeItem.setSelection(true);
+				}
+			}
+		}
+	}
+	
+	public void updateTypes(){
+		MenuItem[] items = this.newCollection.getItems();
+		for(int i = 0;i < items.length; i ++){
+			items[i].dispose();
+		}
+		Iterator bookTypes = TGBrowserManager.instance().getFactories();
+		while(bookTypes.hasNext()){
+			final TGBrowserFactory bookType = (TGBrowserFactory)bookTypes.next();
+			MenuItem item = new MenuItem(this.newCollection,SWT.PUSH);
+			item.setText(bookType.getName());
+			item.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					newCollection( bookType.getType());
+				}
+			});
+		}
+	}
+	
+	public void reload(Shell shell){
+		if(this.menu != null && !this.menu.isDisposed()){
+			this.menu.dispose();
+		}
+		this.init(shell);
+		this.loadProperties();
+		this.updateItems();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserToolBar.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserToolBar.java
new file mode 100644
index 0000000..f9176cb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/dialog/TGBrowserToolBar.java
@@ -0,0 +1,180 @@
+package org.herac.tuxguitar.app.tools.browser.dialog;
+
+import java.util.Iterator;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserCollection;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserManager;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+
+public class TGBrowserToolBar extends TGBrowserBar{
+	private Composite composite;
+	private ToolBar toolBar;
+	private ToolItem newBrowser;
+	private ToolItem root;
+	private ToolItem back;
+	private ToolItem refresh;
+	protected Menu newBrowserMenu;
+	protected TGBrowserCollectionCombo collections;
+	
+	public TGBrowserToolBar(TGBrowserDialog browser){
+		super(browser);
+	}
+	
+	public void init(Shell shell){
+		this.composite = new Composite(shell,SWT.NONE);
+		this.composite.setLayout(getLayout());
+		this.composite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
+		this.initItems();
+	}
+	
+	public void initItems(){
+		this.toolBar = new ToolBar(this.composite,SWT.FLAT | SWT.WRAP);
+		
+		//---New Book----------------------------------------------------------
+		this.newBrowserMenu = new Menu(this.composite);
+		Iterator bookTypes = TGBrowserManager.instance().getFactories();
+		while(bookTypes.hasNext()) {
+			final TGBrowserFactory bookType = (TGBrowserFactory)bookTypes.next();
+			MenuItem item = new MenuItem(this.newBrowserMenu, SWT.PUSH);
+			item.setText(bookType.getName());
+			item.setData(bookType);
+			item.addSelectionListener(new SelectionAdapter() {
+				public void widgetSelected(SelectionEvent e) {
+					newCollection( bookType.getType());
+				}
+			});
+		}
+		this.newBrowser = new ToolItem(this.toolBar,SWT.DROP_DOWN);
+		this.newBrowser.setImage(TuxGuitar.instance().getIconManager().getBrowserNew());
+		this.newBrowser.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent event) {
+				if (event.detail == SWT.ARROW) {
+					ToolItem item = (ToolItem) event.widget;
+					Rectangle rect = item.getBounds();
+					Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
+					TGBrowserToolBar.this.newBrowserMenu.setLocation(pt.x, pt.y + rect.height);
+					TGBrowserToolBar.this.newBrowserMenu.setVisible(true);
+				}
+			}
+		});
+		
+		new ToolItem(this.toolBar, SWT.SEPARATOR);
+		//---Root Folder------------------------------------------------------
+		this.root = new ToolItem(this.toolBar,SWT.PUSH);
+		this.root.setImage(TuxGuitar.instance().getIconManager().getBrowserRoot());
+		this.root.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				getBrowser().getConnection().cdRoot(TGBrowserDialog.CALL_CD_ROOT);
+			}
+		});
+		
+		//---Back Folder------------------------------------------------------
+		this.back = new ToolItem(this.toolBar,SWT.PUSH);
+		this.back.setImage(TuxGuitar.instance().getIconManager().getBrowserBack());
+		this.back.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				getBrowser().getConnection().cdUp(TGBrowserDialog.CALL_CD_UP);
+			}
+		});
+		
+		//---Refresh Folder------------------------------------------------------
+		this.refresh = new ToolItem(this.toolBar,SWT.PUSH);
+		this.refresh.setImage(TuxGuitar.instance().getIconManager().getBrowserRefresh());
+		this.refresh.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				getBrowser().getConnection().listElements(TGBrowserDialog.CALL_LIST);
+			}
+		});
+		
+		//---Finish tool bar
+		new ToolItem(this.toolBar, SWT.SEPARATOR);
+		
+		//---Collections-------------------------------------------------------------
+		this.collections = new TGBrowserCollectionCombo(this.composite, SWT.READ_ONLY);
+		this.collections.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
+		this.collections.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				updateCollection();
+			}
+		});
+	}
+	
+	public void updateItems(){
+		this.newBrowser.setEnabled(!getBrowser().getConnection().isLocked());
+		this.collections.setEnabled(!getBrowser().getConnection().isLocked());
+		this.root.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
+		this.back.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
+		this.refresh.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
+	}
+	
+	public void updateCollections(TGBrowserCollection selection){
+		int index = 0;
+		this.collections.removeAll();
+		
+		Iterator it = TGBrowserManager.instance().getCollections();
+		while(it.hasNext()){
+			TGBrowserCollection collection = (TGBrowserCollection)it.next();
+			if(collection.getData() != null){
+				this.collections.add(collection);
+				if(selection != null && selection.equals(collection)){
+					this.collections.select(index);
+				}
+				index ++;
+			}
+		}
+	}
+	
+	public void reload(){
+		this.disposeItems();
+		this.initItems();
+		this.loadProperties();
+		this.updateItems();
+		this.composite.layout(true,true);
+	}
+	
+	public void loadProperties(){
+		this.newBrowser.setToolTipText(TuxGuitar.getProperty("browser.collection.new"));
+		this.root.setToolTipText(TuxGuitar.getProperty("browser.go-root"));
+		this.back.setToolTipText(TuxGuitar.getProperty("browser.go-back"));
+		this.refresh.setToolTipText(TuxGuitar.getProperty("browser.refresh"));
+		this.updateCollections(getBrowser().getCollection());
+	}
+	
+	protected void updateCollection(){
+		TGBrowserCollection collection = this.collections.getSelection();
+		if(collection == null){
+			closeCollection();
+		}else{
+			openCollection(collection);
+		}
+	}
+	
+	private void disposeItems(){
+		Control[] controls = this.composite.getChildren();
+		for(int i = 0; i < controls.length; i ++){
+			controls[i].dispose();
+		}
+	}
+	
+	private GridLayout getLayout(){
+		GridLayout layout = new GridLayout(2,false);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		return layout;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserDataDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserDataDialog.java
new file mode 100644
index 0000000..1a95186
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserDataDialog.java
@@ -0,0 +1,138 @@
+package org.herac.tuxguitar.app.tools.browser.filesystem;
+
+import java.io.File;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+
+public class TGBrowserDataDialog {
+	
+	private TGBrowserData data;
+	
+	public TGBrowserData getData() {
+		return this.data;
+	}
+	
+	public void setData(TGBrowserData data) {
+		this.data = data;
+	}
+	
+	public TGBrowserData open(Shell parent) {
+		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("browser.collection.fs.editor-title"));
+		
+		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
+		group.setLayout(new GridLayout());
+		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		group.setText(TuxGuitar.getProperty("browser.collection.fs.editor-tip"));
+		
+		Composite composite = new Composite(group,SWT.NONE);
+		composite.setLayout(new GridLayout(3,false));
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		final Label titleLabel = new Label(composite,SWT.LEFT);
+		titleLabel.setText(TuxGuitar.getProperty("browser.collection.fs.name"));
+		titleLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
+		
+		final Text titleValue = new Text(composite,SWT.BORDER);
+		titleValue.setLayoutData(getTextData(2));
+		
+		final Label pathLabel = new Label(composite,SWT.LEFT);
+		pathLabel.setText(TuxGuitar.getProperty("browser.collection.fs.path"));
+		pathLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
+		
+		final Text pathValue = new Text(composite,SWT.BORDER);
+		pathValue.setLayoutData(getTextData(1));
+		
+		final Button pathChooser = new Button(composite,SWT.PUSH);
+		pathChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
+		pathChooser.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				DirectoryDialog directoryDialog = new DirectoryDialog(dialog);
+				String selection = directoryDialog.open();
+				if(selection != null){
+					pathValue.setText(selection);
+				}
+			}
+		});
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				String selectedTitle = titleValue.getText();
+				String selectedPath = pathValue.getText();
+				if(!isValidPath(selectedPath)){
+					MessageDialog.errorMessage(dialog,TuxGuitar.getProperty("browser.collection.fs.invalid-path"));
+					return;
+				}
+				if(isBlank(selectedTitle)){
+					selectedTitle = selectedPath;
+				}
+				setData(new TGBrowserDataImpl(selectedTitle,selectedPath));
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return getData();
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	private GridData getTextData(int span){
+		GridData data = new GridData(SWT.LEFT, SWT.CENTER, true, true,span,1);
+		data.minimumWidth = 350;
+		return data;
+	}
+	
+	protected boolean isBlank(String s){
+		return (s == null || s.length() == 0);
+	}
+	
+	protected boolean isValidPath(String path){
+		if(!isBlank(path)){
+			File file = new File(path);
+			return (file.exists() && file.isDirectory());
+		}
+		return false;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserDataImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserDataImpl.java
new file mode 100644
index 0000000..3df3a64
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserDataImpl.java
@@ -0,0 +1,36 @@
+package org.herac.tuxguitar.app.tools.browser.filesystem;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
+
+public class TGBrowserDataImpl implements TGBrowserData{
+	
+	private static final String STRING_SEPARATOR = ";";
+	
+	private String title;
+	private String path;
+	
+	public TGBrowserDataImpl(String title,String path){
+		this.title = title;
+		this.path = path;
+	}
+	
+	public String getTitle(){
+		return this.title;
+	}
+	
+	public String getPath(){
+		return this.path;
+	}
+	
+	public String toString(){
+		return (getTitle() + STRING_SEPARATOR + getPath());
+	}
+	
+	public static TGBrowserData fromString(String string) {
+		String[] data = string.split(STRING_SEPARATOR);
+		if(data.length == 2){
+			return new TGBrowserDataImpl(data[0],data[1]);
+		}
+		return null;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserElementComparator.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserElementComparator.java
new file mode 100644
index 0000000..125c9e0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserElementComparator.java
@@ -0,0 +1,36 @@
+package org.herac.tuxguitar.app.tools.browser.filesystem;
+
+import java.util.Comparator;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
+
+public class TGBrowserElementComparator implements Comparator {
+	
+	private static final int RESULT_LESS = -1;
+	
+	private static final int RESULT_EQUAL = 0;
+	
+	private static final int RESULT_GREATER = 1;
+	
+	private static final int DIRECTION = 1;
+	
+	private static final int DIRECTION_FOLDER = 1;
+	
+	public int compare(Object o1, Object o2) {
+		if(o1 instanceof TGBrowserElement && o2 instanceof TGBrowserElement){
+			TGBrowserElement element1 = (TGBrowserElement)o1;
+			TGBrowserElement element2 = (TGBrowserElement)o2;
+			
+			if(element1.isFolder() && !element2.isFolder()){
+				return (DIRECTION_FOLDER * RESULT_LESS);
+			}
+			if(element2.isFolder() && !element1.isFolder()){
+				return (DIRECTION_FOLDER * RESULT_GREATER);
+			}
+			
+			return (DIRECTION * (element1.getName().compareTo(element2.getName())));
+		}
+		return RESULT_EQUAL;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserElementImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserElementImpl.java
new file mode 100644
index 0000000..c339089
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserElementImpl.java
@@ -0,0 +1,45 @@
+package org.herac.tuxguitar.app.tools.browser.filesystem;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+
+import org.herac.tuxguitar.app.tools.browser.TGBrowserException;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
+
+public class TGBrowserElementImpl extends TGBrowserElement{
+	
+	private TGBrowserElementImpl parent;
+	private File file;
+	
+	public TGBrowserElementImpl(TGBrowserElementImpl parent,File file) {
+		super(file.getName());
+		this.parent = parent;
+		this.file = file;
+	}
+	
+	public File getFile() {
+		return this.file;
+	}
+	
+	public TGBrowserElementImpl getParent() {
+		return this.parent;
+	}
+	
+	public boolean isFolder(){
+		return getFile().isDirectory();
+	}
+	
+	public InputStream getInputStream() throws TGBrowserException {
+		if(!isFolder()){
+			try {
+				return new FileInputStream(getFile());
+			} catch (FileNotFoundException e) {
+				throw new TGBrowserException(e);
+			}
+		}
+		return null;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserFactoryImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserFactoryImpl.java
new file mode 100644
index 0000000..359a98a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserFactoryImpl.java
@@ -0,0 +1,38 @@
+package org.herac.tuxguitar.app.tools.browser.filesystem;
+
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowser;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserData;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+
+public class TGBrowserFactoryImpl implements TGBrowserFactory{
+	
+	public TGBrowserFactoryImpl() {
+		super();
+	}
+	
+	public String getType(){
+		return "file.system";
+	}
+	
+	public String getName(){
+		return TuxGuitar.getProperty("browser.factory.fs.name");
+	}
+	
+	public TGBrowser newTGBrowser(TGBrowserData data) {
+		if(data instanceof TGBrowserDataImpl){
+			return new TGBrowserImpl((TGBrowserDataImpl)data);
+		}
+		return null;
+	}
+	
+	public TGBrowserData parseData(String string) {
+		return TGBrowserDataImpl.fromString(string);
+	}
+	
+	public TGBrowserData dataDialog(Shell parent) {
+		TGBrowserDataDialog dialog = new TGBrowserDataDialog();
+		return dialog.open(parent);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserImpl.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserImpl.java
new file mode 100644
index 0000000..568de29
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/filesystem/TGBrowserImpl.java
@@ -0,0 +1,58 @@
+package org.herac.tuxguitar.app.tools.browser.filesystem;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowser;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserElement;
+
+public class TGBrowserImpl extends TGBrowser{
+	
+	private File root;
+	private TGBrowserElementImpl element;
+	private TGBrowserDataImpl data;
+	
+	public TGBrowserImpl(TGBrowserDataImpl data){
+		this.data = data;
+	}
+	
+	public void open(){
+		this.root = new File(this.data.getPath());
+	}
+	
+	public void close(){
+		this.root = null;
+	}
+	
+	public void cdElement(TGBrowserElement element) {
+		this.element = (TGBrowserElementImpl)element;
+	}
+	
+	public void cdRoot() {
+		this.element = null;
+	}
+	
+	public void cdUp() {
+		if(this.element != null){
+			this.element = this.element.getParent();
+		}
+	}
+	
+	public List listElements() {
+		List elements = new ArrayList();
+		File file = ((this.element != null)?this.element.getFile():this.root);
+		if(file.exists() && file.isDirectory()){
+			File[] files = file.listFiles();
+			for(int i = 0; i < files.length;i ++){
+				elements.add(new TGBrowserElementImpl(this.element,files[i]));
+			}
+		}
+		if( !elements.isEmpty() ){
+			Collections.sort(elements,new TGBrowserElementComparator());
+		}
+		return elements;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/plugin/TGBrowserPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/plugin/TGBrowserPlugin.java
new file mode 100644
index 0000000..62dad15
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/plugin/TGBrowserPlugin.java
@@ -0,0 +1,45 @@
+package org.herac.tuxguitar.app.tools.browser.plugin;
+
+import org.herac.tuxguitar.app.tools.browser.TGBrowserManager;
+import org.herac.tuxguitar.app.tools.browser.base.TGBrowserFactory;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGBrowserPlugin implements TGPlugin{
+	
+	private boolean loaded;
+	private TGBrowserFactory factory;
+	
+	protected abstract TGBrowserFactory getFactory() throws TGPluginException;
+	
+	public void init() throws TGPluginException {
+		this.factory = getFactory();
+		this.loaded = false;
+	}
+	
+	public void close() throws TGPluginException {
+		this.loaded = false;
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded){
+			TGBrowserManager.instance().addFactory(this.factory);
+			this.loaded = true;
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded){
+			TGBrowserManager.instance().removeFactory(this.factory);
+			this.loaded = false;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/xml/TGBrowserReader.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/xml/TGBrowserReader.java
new file mode 100644
index 0000000..8c80d2e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/xml/TGBrowserReader.java
@@ -0,0 +1,64 @@
+package org.herac.tuxguitar.app.tools.browser.xml;
+
+import java.io.File;
+import java.io.IOException;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.herac.tuxguitar.app.tools.browser.TGBrowserCollectionInfo;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserManager;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+public class TGBrowserReader {
+	private static final String ITEM_TAG = "browser-collection";
+	private static final String ATTRIBUTE_TYPE = "type";
+	private static final String ATTRIBUTE_DATA = "data";
+	
+	public void loadCollections(TGBrowserManager manager,File file){
+		if (file.exists()){
+			try {
+				Document doc = getDocument(file);
+				loadCollections(manager,doc.getFirstChild());
+			} catch (Throwable throwable) {
+				throwable.printStackTrace();
+			}
+		}
+	}
+	
+	private static void loadCollections(TGBrowserManager manager,Node node){
+		NodeList listNode = node.getChildNodes();
+		for (int i = 0; i < listNode.getLength(); i++) {
+			Node child = listNode.item(i);
+			String nameNode = child.getNodeName();
+			if (nameNode.equals(ITEM_TAG)) {
+				NamedNodeMap params = child.getAttributes();
+				
+				String type = params.getNamedItem(ATTRIBUTE_TYPE).getNodeValue();
+				String data = params.getNamedItem(ATTRIBUTE_DATA).getNodeValue();
+				if(type != null){
+					TGBrowserCollectionInfo info = new TGBrowserCollectionInfo();
+					info.setType(type);
+					info.setData(data);
+					manager.addInfo(info);
+				}
+			}
+		}
+	}
+	
+	private static Document getDocument(File file) throws ParserConfigurationException, SAXException, IOException {
+		Document document = null;
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		document = builder.parse(file);
+		
+		return document;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/xml/TGBrowserWriter.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/xml/TGBrowserWriter.java
new file mode 100644
index 0000000..73cb58d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/browser/xml/TGBrowserWriter.java
@@ -0,0 +1,107 @@
+package org.herac.tuxguitar.app.tools.browser.xml;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.util.Iterator;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.herac.tuxguitar.app.tools.browser.TGBrowserCollection;
+import org.herac.tuxguitar.app.tools.browser.TGBrowserManager;
+import org.w3c.dom.Attr;
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+
+public class TGBrowserWriter {
+	
+	private static final String ITEM_LIST_TAG = "browser-collections";
+	private static final String ITEM_TAG = "browser-collection";
+	private static final String ATTRIBUTE_TYPE = "type";
+	private static final String ATTRIBUTE_DATA = "data";
+	
+	public void saveCollections(TGBrowserManager manager,String fileName) {
+		try{
+			Document doc = createDocument();
+			saveCollections(manager,doc);
+			saveDocument(doc,new File(fileName));
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+	}
+	
+	private static void saveCollections(TGBrowserManager manager,Document document){
+		//chords tag
+		Node listNode = document.createElement(ITEM_LIST_TAG);
+		
+		Iterator collections = manager.getCollections();
+		while(collections.hasNext()){
+			TGBrowserCollection collection = (TGBrowserCollection)collections.next();
+			
+			//chord tag
+			Node node = document.createElement(ITEM_TAG);
+			listNode.appendChild(node);
+			
+			//name attribute
+			Attr typeAttr = document.createAttribute(ATTRIBUTE_TYPE);
+			typeAttr.setNodeValue(collection.getType());
+			
+			//name attribute
+			Attr dataAttr = document.createAttribute(ATTRIBUTE_DATA);
+			dataAttr.setNodeValue(collection.getData().toString());
+			
+			node.getAttributes().setNamedItem(typeAttr);
+			node.getAttributes().setNamedItem(dataAttr);
+		}
+		
+		document.appendChild(listNode);
+	}
+	
+	public static Document createDocument() {
+		Document document = null;
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		try {
+			DocumentBuilder builder = factory.newDocumentBuilder();
+			document = builder.newDocument();
+		}catch (ParserConfigurationException pce) {
+			pce.printStackTrace();
+		}
+		return document;
+	}
+	
+	public static void saveDocument(Document document,File file) {
+		try {
+			FileOutputStream fs = new FileOutputStream(file);
+			
+			// Write it out again
+			TransformerFactory xformFactory = TransformerFactory.newInstance();
+			Transformer idTransform = xformFactory.newTransformer();
+			Source input = new DOMSource(document);
+			Result output = new StreamResult(fs);
+			idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
+			idTransform.transform(input, output);
+			
+		} catch (FactoryConfigurationError e) {
+			e.printStackTrace();
+		} catch (TransformerConfigurationException e) {
+			e.printStackTrace();
+		} catch (TransformerException e) {
+			e.printStackTrace();
+		} catch (FileNotFoundException e) {
+			e.printStackTrace();
+		}
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/custom/TGCustomTool.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/custom/TGCustomTool.java
new file mode 100644
index 0000000..61cb8d7
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/custom/TGCustomTool.java
@@ -0,0 +1,22 @@
+package org.herac.tuxguitar.app.tools.custom;
+
+public class TGCustomTool {
+	
+	private String name;
+	private String action;
+	
+	public TGCustomTool(String name, String action) {
+		super();
+		this.name = name;
+		this.action = action;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+	
+	public String getAction() {
+		return this.action;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/custom/TGCustomToolManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/custom/TGCustomToolManager.java
new file mode 100644
index 0000000..6ef984a
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/custom/TGCustomToolManager.java
@@ -0,0 +1,36 @@
+package org.herac.tuxguitar.app.tools.custom;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class TGCustomToolManager {
+	
+	private static TGCustomToolManager instance;
+	
+	private List tools;
+	
+	public TGCustomToolManager(){
+		this.tools = new ArrayList();
+	}
+	
+	public static TGCustomToolManager instance(){
+		if(instance == null){
+			instance = new TGCustomToolManager();
+		}
+		return instance;
+	}
+	
+	public void addCustomTool(TGCustomTool tool){
+		this.tools.add(tool);
+	}
+	
+	public void removeCustomTool(TGCustomTool tool){
+		this.tools.remove(tool);
+	}
+	
+	public Iterator getCustomTools(){
+		return this.tools.iterator();
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/custom/TGToolItemPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/custom/TGToolItemPlugin.java
new file mode 100644
index 0000000..eb24777
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/custom/TGToolItemPlugin.java
@@ -0,0 +1,66 @@
+package org.herac.tuxguitar.app.tools.custom;
+
+import org.herac.tuxguitar.action.TGActionContext;
+import org.herac.tuxguitar.action.TGActionManager;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionBase;
+import org.herac.tuxguitar.util.plugin.TGPlugin;
+import org.herac.tuxguitar.util.plugin.TGPluginException;
+
+public abstract class TGToolItemPlugin implements TGPlugin{
+	
+	private boolean loaded;
+	private TGCustomTool tool;
+	private TGCustomToolAction toolAction;
+	
+	protected abstract void doAction();
+	
+	protected abstract String getItemName() throws TGPluginException ;
+	
+	public void init() throws TGPluginException {
+		String name = getItemName();
+		this.tool = new TGCustomTool(name,name);
+		this.toolAction = new TGCustomToolAction(this.tool.getName());
+	}
+	
+	public void close() throws TGPluginException {
+		this.removePlugin();
+	}
+	
+	public void setEnabled(boolean enabled) throws TGPluginException {
+		if(enabled){
+			addPlugin();
+		}else{
+			removePlugin();
+		}
+	}
+	
+	protected void addPlugin() throws TGPluginException {
+		if(!this.loaded){
+			TGActionManager.getInstance().mapAction(this.tool.getAction(), this.toolAction);
+			TGCustomToolManager.instance().addCustomTool(this.tool);
+			TuxGuitar.instance().getItemManager().createMenu();
+			this.loaded = true;
+		}
+	}
+	
+	protected void removePlugin() throws TGPluginException {
+		if(this.loaded){
+			TGCustomToolManager.instance().removeCustomTool(this.tool);
+			TGActionManager.getInstance().unmapAction(this.tool.getAction());
+			TuxGuitar.instance().getItemManager().createMenu();
+			this.loaded = false;
+		}
+	}
+	
+	protected class TGCustomToolAction extends TGActionBase {
+		
+		public TGCustomToolAction(String name) {
+			super(name, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
+		}
+		
+		protected void processAction(TGActionContext context) {
+			doAction();
+		}
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleEditor.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleEditor.java
new file mode 100644
index 0000000..790765c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleEditor.java
@@ -0,0 +1,79 @@
+package org.herac.tuxguitar.app.tools.scale;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.DialogUtils;
+
+public class ScaleEditor {
+	
+	public void show() {
+		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		dialog.setLayout(new GridLayout());
+		dialog.setText(TuxGuitar.getProperty("scale.list"));
+		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		// ----------------------------------------------------------------------
+		Composite composite = new Composite(dialog, SWT.NONE);
+		composite.setLayout(new GridLayout(2,false));
+		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+		
+		final List keys = new List(composite,SWT.BORDER | SWT.V_SCROLL);
+		keys.setLayoutData(new GridData(50,200));
+		String[] keyNames = TuxGuitar.instance().getScaleManager().getKeyNames();
+		for(int i = 0;i < keyNames.length;i ++){
+			keys.add(keyNames[i]);
+		}
+		keys.select(TuxGuitar.instance().getScaleManager().getSelectionKey());
+		
+		final List scales = new List(composite,SWT.BORDER | SWT.V_SCROLL);
+		scales.setLayoutData(new GridData(SWT.DEFAULT,200));
+		scales.add("None");
+		String[] scaleNames = TuxGuitar.instance().getScaleManager().getScaleNames();
+		for(int i = 0;i < scaleNames.length;i ++){
+			scales.add(scaleNames[i]);
+		}
+		scales.select(TuxGuitar.instance().getScaleManager().getSelectionIndex() + 1);
+		
+		//------------------BUTTONS--------------------------
+		Composite buttons = new Composite(dialog, SWT.NONE);
+		buttons.setLayout(new GridLayout(2,false));
+		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		final Button buttonOK = new Button(buttons, SWT.PUSH);
+		buttonOK.setText(TuxGuitar.getProperty("ok"));
+		buttonOK.setLayoutData(getButtonData());
+		buttonOK.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				TuxGuitar.instance().getScaleManager().selectScale((scales.getSelectionIndex() - 1), keys.getSelectionIndex());
+				dialog.dispose();
+			}
+		});
+		
+		Button buttonCancel = new Button(buttons, SWT.PUSH);
+		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
+		buttonCancel.setLayoutData(getButtonData());
+		buttonCancel.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				dialog.dispose();
+			}
+		});
+		
+		dialog.setDefaultButton( buttonOK );
+		
+		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleInfo.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleInfo.java
new file mode 100644
index 0000000..3f97d0e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleInfo.java
@@ -0,0 +1,19 @@
+package org.herac.tuxguitar.app.tools.scale;
+
+public class ScaleInfo {
+	private String name;
+	private String keys;
+	
+	public ScaleInfo(String name,String keys){
+		this.name = name;
+		this.keys = keys;
+	}
+	
+	public String getKeys() {
+		return this.keys;
+	}
+	
+	public String getName() {
+		return this.name;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleListener.java
new file mode 100644
index 0000000..75b4445
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleListener.java
@@ -0,0 +1,7 @@
+package org.herac.tuxguitar.app.tools.scale;
+
+public interface ScaleListener {
+	
+	public void loadScale();
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleManager.java
new file mode 100644
index 0000000..1c6439e
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/ScaleManager.java
@@ -0,0 +1,135 @@
+package org.herac.tuxguitar.app.tools.scale;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.tools.scale.xml.ScaleReader;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.app.util.TGMusicKeyUtils;
+import org.herac.tuxguitar.song.models.TGScale;
+
+public class ScaleManager {
+	private static final String[] KEY_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_SCALE);
+	
+	private static final String KEY_SEPARATOR = ",";
+	
+	public static final int NONE_SELECTION = -1;
+	
+	private List scales;
+	
+	private List scaleListeners;
+	
+	private TGScale scale;
+	
+	private int selectionIndex;
+	
+	private int selectionKey;
+	
+	public ScaleManager(){
+		this.scales = new ArrayList();
+		this.scaleListeners = new ArrayList();
+		this.scale = TuxGuitar.instance().getSongManager().getFactory().newScale();
+		this.selectionKey = 0;
+		this.selectionIndex = NONE_SELECTION;
+		this.loadScales();
+	}
+	
+	public void addListener( ScaleListener listener){
+		if(!this.scaleListeners.contains( listener )){
+			this.scaleListeners.add( listener );
+		}
+	}
+	
+	public void removeListener( ScaleListener listener){
+		if(this.scaleListeners.contains( listener )){
+			this.scaleListeners.remove( listener );
+		}
+	}
+	
+	public void fireListeners(){
+		for(int i = 0; i < this.scaleListeners.size(); i ++){
+			ScaleListener listener = (ScaleListener) this.scaleListeners.get( i );
+			listener.loadScale();
+		}
+	}
+		
+	public void selectScale(int index,int key){
+		if(index == NONE_SELECTION){
+			getScale().clear();
+		}
+		else if(index >= 0 && index < this.scales.size()){
+			getScale().clear();
+			ScaleInfo info = (ScaleInfo)this.scales.get(index);
+			String[] keys = info.getKeys().split(KEY_SEPARATOR);
+			for (int i = 0; i < keys.length; i ++){
+				int note = (Integer.parseInt(keys[i]) - 1);
+				if(note >= 0 && note < 12){
+					getScale().setNote(note,true);
+				}
+			}
+			getScale().setKey(key);
+		}
+		this.selectionIndex = index;
+		this.selectionKey = key;
+		this.fireListeners();
+	}
+	
+	public TGScale getScale() {
+		return this.scale;
+	}
+	
+	public int countScales() {
+		return this.scales.size();
+	}
+	
+	public String getScaleName(int index) {
+		if(index >= 0 && index < this.scales.size()) {
+			return (((ScaleInfo)this.scales.get(index)).getName());
+		}
+		return null;
+	}
+	
+	public String getScaleKeys(int index) {
+		if(index >= 0 && index < this.scales.size()) {
+			return(((ScaleInfo)this.scales.get(index)).getKeys());
+		}
+		return null;
+	}
+	
+	public String[] getScaleNames(){
+		String[] names = new String[this.scales.size()];
+		for(int i = 0;i < this.scales.size();i ++){
+			ScaleInfo info = (ScaleInfo)this.scales.get(i);
+			names[i] = info.getName();
+		}
+		return names;
+	}
+	
+	public String getKeyName(int index){
+		if( index >=0 && index < KEY_NAMES.length){
+			return KEY_NAMES[ index ];
+		}
+		return null;
+	}
+	
+	public String[] getKeyNames(){
+		return KEY_NAMES;
+	}
+	
+	public int getSelectionIndex() {
+		return this.selectionIndex;
+	}
+	
+	public int getSelectionKey() {
+		return this.selectionKey;
+	}
+	
+	private void loadScales(){
+		try{
+			new ScaleReader().loadScales(this.scales, TGFileUtils.getResourceAsStream("scales/scales.xml") );
+		} catch (Throwable e) {
+			e.printStackTrace();
+		} 
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/xml/ScaleReader.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/xml/ScaleReader.java
new file mode 100644
index 0000000..03c61ba
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/scale/xml/ScaleReader.java
@@ -0,0 +1,64 @@
+package org.herac.tuxguitar.app.tools.scale.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.herac.tuxguitar.app.tools.scale.ScaleInfo;
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+public class ScaleReader {
+	private static final String SCALE_TAG = "scale";
+	private static final String NAME_ATTRIBUTE = "name";
+	private static final String KEYS_ATTRIBUTE = "keys";
+	
+	public void loadScales(List scales,InputStream stream){
+		try{
+			if ( stream != null ){
+				Document doc = getDocument(stream);
+				loadScales(scales,doc.getFirstChild());
+			}
+		}catch(Throwable e){
+			e.printStackTrace();
+		}
+	}
+	
+	private static Document getDocument(InputStream stream) throws ParserConfigurationException, SAXException, IOException {
+		Document document = null;
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		document = builder.parse(stream);
+		
+		return document;
+	}
+	
+	private static void loadScales(List scales,Node node){
+		NodeList nodeList = node.getChildNodes();
+		for (int i = 0; i < nodeList.getLength(); i++) {
+			Node child = nodeList.item(i);
+			String nodeName = child.getNodeName();
+			
+			if (nodeName.equals(SCALE_TAG)) {
+				NamedNodeMap params = child.getAttributes();
+				
+				String name = params.getNamedItem(NAME_ATTRIBUTE).getNodeValue();
+				String keys = params.getNamedItem(KEYS_ATTRIBUTE).getNodeValue();
+				
+				if (name == null || keys == null || name.trim().equals("") || keys.trim().equals("")){
+					throw new RuntimeException("Invalid Scale file format.");
+				}
+				
+				scales.add(new ScaleInfo(name,keys));
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/template/TGTemplate.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/template/TGTemplate.java
new file mode 100644
index 0000000..bc41685
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/template/TGTemplate.java
@@ -0,0 +1,27 @@
+package org.herac.tuxguitar.app.tools.template;
+
+public class TGTemplate {
+	
+	private String name;
+	private String resource;
+	
+	public TGTemplate(){
+		super();
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getResource() {
+		return this.resource;
+	}
+
+	public void setResource(String resource) {
+		this.resource = resource;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/template/TGTemplateManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/template/TGTemplateManager.java
new file mode 100644
index 0000000..3f3f758
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/template/TGTemplateManager.java
@@ -0,0 +1,66 @@
+package org.herac.tuxguitar.app.tools.template;
+
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.util.TGFileUtils;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class TGTemplateManager {
+	
+	private static final String TEMPLATE_DEFAULT_RESOURCE = "template-default.tg";
+	
+	private static final String TEMPLATES_PREFIX = "templates/";
+	private static final String TEMPLATES_CONFIG_PATH = (TEMPLATES_PREFIX + "templates.xml");
+	
+	private List templates;
+	
+	public TGTemplateManager(){
+		this.templates = new ArrayList();
+		this.loadTemplates();
+	}
+	
+	public int countTemplates(){
+		return this.templates.size();
+	}
+	
+	public Iterator getTemplates(){
+		return this.templates.iterator();
+	}
+	
+	public void loadTemplates(){
+		try{
+			InputStream templateInputStream = TGFileUtils.getResourceAsStream(TEMPLATES_CONFIG_PATH);
+			if( templateInputStream != null ){
+				TGTemplateReader tgTemplateReader = new TGTemplateReader();
+				tgTemplateReader.loadTemplates(this.templates, templateInputStream);
+			}
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+	}
+	
+	public TGTemplate getDefaultTemplate(){
+		TGTemplate tgTemplate = new TGTemplate();
+		tgTemplate.setName(new String());
+		tgTemplate.setResource(TEMPLATE_DEFAULT_RESOURCE);
+		return tgTemplate;
+	}
+	
+	public TGSong getTemplateAsSong(TGTemplate tgTemplate){
+		try{
+			if( tgTemplate != null && tgTemplate.getResource() != null ){
+				InputStream stream = TGFileUtils.getResourceAsStream(TEMPLATES_PREFIX + tgTemplate.getResource());
+				return TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream);
+			}
+		} catch (Throwable e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/tools/template/TGTemplateReader.java b/TuxGuitar/src/org/herac/tuxguitar/app/tools/template/TGTemplateReader.java
new file mode 100644
index 0000000..5fd7d41
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/tools/template/TGTemplateReader.java
@@ -0,0 +1,60 @@
+package org.herac.tuxguitar.app.tools.template;
+
+import java.io.InputStream;
+import java.util.List;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+public class TGTemplateReader {
+	
+	private static final String TAG_TEMPLATE = "template";
+	private static final String ATTRIBUTE_NAME = "name";
+	private static final String ATTRIBUTE_RESOURCE = "resource";
+	
+	public void loadTemplates(List templates,InputStream stream) throws Throwable{
+		if( stream != null ){
+			loadTemplates(templates,createDocument(stream).getFirstChild());
+		}
+	}
+	
+	private void loadTemplates(List templates,Node node) throws Throwable {
+		NodeList nodeList = node.getChildNodes();
+		for (int i = 0; i < nodeList.getLength(); i++) {
+			Node child = nodeList.item(i);
+			String nodeName = child.getNodeName();
+			
+			if (nodeName.equals(TAG_TEMPLATE)) {
+				NamedNodeMap params = child.getAttributes();
+				
+				TGTemplate tgTemplate = new TGTemplate();
+				tgTemplate.setName(params.getNamedItem(ATTRIBUTE_NAME).getNodeValue());
+				tgTemplate.setResource(params.getNamedItem(ATTRIBUTE_RESOURCE).getNodeValue());
+				
+				if (tgTemplate.getName() == null || tgTemplate.getName().trim().length() == 0 ){
+					throw new RuntimeException("Invalid template name.");
+				}
+				if (tgTemplate.getResource() == null || tgTemplate.getResource().trim().length() == 0 ){
+					throw new RuntimeException("Invalid template resource.");
+				}
+				
+				templates.add(tgTemplate);
+			}
+		}
+	}
+	
+	private Document createDocument(InputStream stream) throws Throwable {
+		Document document = null;
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		document = builder.parse(stream);
+		
+		return document;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/transport/TGTransport.java b/TuxGuitar/src/org/herac/tuxguitar/app/transport/TGTransport.java
new file mode 100644
index 0000000..a6ca2d0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/transport/TGTransport.java
@@ -0,0 +1,501 @@
+/*
+ * Created on 20-mar-2006
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.transport;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.ProgressBar;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.swt.widgets.ToolItem;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionProcessor;
+import org.herac.tuxguitar.app.action.impl.transport.TransportMetronomeAction;
+import org.herac.tuxguitar.app.action.impl.transport.TransportModeAction;
+import org.herac.tuxguitar.app.editors.TGRedrawListener;
+import org.herac.tuxguitar.app.editors.TGUpdateListener;
+import org.herac.tuxguitar.app.helper.SyncThread;
+import org.herac.tuxguitar.app.system.icons.IconLoader;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+import org.herac.tuxguitar.app.util.DialogUtils;
+import org.herac.tuxguitar.app.util.MessageDialog;
+import org.herac.tuxguitar.app.util.MidiTickUtil;
+import org.herac.tuxguitar.player.base.MidiPlayer;
+import org.herac.tuxguitar.player.base.MidiPlayerException;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window -
+ * Preferences - Java - Code Style - Code Templates
+ */
+public class TGTransport implements TGRedrawListener, TGUpdateListener, IconLoader,LanguageLoader{
+	private static final int PLAY_MODE_DELAY = 250;
+	
+	public static final int STATUS_STOPPED = 1;
+	public static final int STATUS_PAUSED = 2;
+	public static final int STATUS_RUNNING = 3;
+	
+	protected Shell dialog;
+	protected Label label;
+	protected ProgressBar tickProgress;
+	protected Button metronome;
+	protected Button mode;
+	protected ToolBar toolBar;
+	protected ToolItem first;
+	protected ToolItem last;
+	protected ToolItem previous;
+	protected ToolItem next;
+	protected ToolItem stop;
+	protected ToolItem play;
+	protected boolean editingTickScale;
+	protected long redrawTime;
+	protected int status;
+	
+	public TGTransport() {
+		super();
+	}
+	
+	public void show() {
+		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM);
+		this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+		this.dialog.setLayout(new GridLayout());
+		this.dialog.setText(TuxGuitar.getProperty("transport"));
+		this.initComposites();
+		this.initToolBar();
+		this.redraw();
+		
+		this.addListeners();
+		this.dialog.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				removeListeners();
+				TuxGuitar.instance().updateCache(true);
+			}
+		});
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
+	}
+	
+	public void addListeners(){
+		TuxGuitar.instance().getIconManager().addLoader(this);
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+		TuxGuitar.instance().getEditorManager().addRedrawListener(this);
+		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
+	}
+	
+	public void removeListeners(){
+		TuxGuitar.instance().getIconManager().removeLoader(this);
+		TuxGuitar.instance().getLanguageManager().removeLoader(this);
+		TuxGuitar.instance().getEditorManager().removeRedrawListener(this);
+		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
+	}
+	
+	private void initComposites(){
+		GridLayout layout = new GridLayout(2,false);
+		layout.marginWidth = 0;
+		layout.marginHeight = 0;
+		layout.horizontalSpacing = 0;
+		layout.verticalSpacing = 0;
+		
+		Composite composite = new Composite(this.dialog,SWT.BORDER);
+		composite.setLayout(layout);
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		initOptions(composite);
+		initProgress(composite);
+	}
+	
+	private void initOptions(Composite parent){
+		Composite composite = new Composite(parent,SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,false,true));
+		
+		this.metronome = new Button(composite,SWT.TOGGLE);
+		this.metronome.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.metronome.addSelectionListener(new TGActionProcessor(TransportMetronomeAction.NAME));
+		
+		this.mode = new Button(composite,SWT.PUSH);
+		this.mode.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.mode.addSelectionListener(new TGActionProcessor(TransportModeAction.NAME));
+		
+		this.loadOptionIcons();
+	}
+	
+	private void initProgress(Composite parent){
+		Composite composite = new Composite(parent,SWT.NONE);
+		composite.setLayout(new GridLayout());
+		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		initLabel(composite);
+		initScale(composite);
+	}
+	
+	private void initLabel(Composite parent){
+		final Font font = new Font(parent.getDisplay(),"Minisystem",36,SWT.NORMAL);
+		this.label = new Label(parent,SWT.RIGHT);
+		this.label.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		this.label.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_BLACK));
+		this.label.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_BLUE));
+		this.label.setFont(font);
+		this.label.addDisposeListener(new DisposeListener() {
+			public void widgetDisposed(DisposeEvent e) {
+				font.dispose();
+			}
+		});
+	}
+	
+	private void initScale(Composite parent){
+		GridData data = new GridData(SWT.FILL,SWT.CENTER,true,false);
+		data.heightHint = 10;
+		
+		this.tickProgress = new ProgressBar(parent, SWT.BORDER | SWT.HORIZONTAL | SWT.SMOOTH);
+		this.tickProgress.setCursor(this.tickProgress.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
+		this.tickProgress.setLayoutData(data);
+		this.tickProgress.setSelection((int)TGDuration.QUARTER_TIME);
+		this.tickProgress.addMouseListener(new MouseAdapter() {
+			public void mouseDown(MouseEvent e) {
+				setEditingTickScale(true);
+				updateProgressBar(e.x);
+			}
+			public void mouseUp(MouseEvent e) {
+				gotoMeasure(getSongManager().getMeasureHeaderAt(TGTransport.this.tickProgress.getSelection()),true);
+				setEditingTickScale(false);
+			}
+		});
+		this.tickProgress.addMouseMoveListener(new MouseMoveListener() {
+			public void mouseMove(MouseEvent e) {
+				updateProgressBar(e.x);
+			}
+		});
+	}
+	
+	protected void updateProgressBar(int x){
+		if(isEditingTickScale()){
+			int selection = (this.tickProgress.getMinimum() + (( x * (this.tickProgress.getMaximum() - this.tickProgress.getMinimum())) / this.tickProgress.getSize().x) );
+			this.tickProgress.setSelection(Math.max((int)TGDuration.QUARTER_TIME,selection));
+			this.redraw();
+		}
+	}
+	
+	private void initToolBar(){
+		if(this.toolBar != null){
+			this.toolBar.dispose();
+		}
+		this.toolBar = new ToolBar(this.dialog,SWT.FLAT);
+		
+		this.first = new ToolItem(this.toolBar,SWT.PUSH);
+		this.first.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				gotoFirst();
+			}
+		});
+		
+		this.previous = new ToolItem(this.toolBar,SWT.PUSH);
+		this.previous.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				gotoPrevious();
+			}
+		});
+		
+		this.stop = new ToolItem(this.toolBar,SWT.PUSH);
+		this.stop.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				stop();
+			}
+		});
+		
+		this.play = new ToolItem(this.toolBar,SWT.PUSH);
+		this.play.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				play();
+			}
+		});
+		
+		this.next = new ToolItem(this.toolBar,SWT.PUSH);
+		this.next.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				gotoNext();
+			}
+		});
+		
+		this.last = new ToolItem(this.toolBar,SWT.PUSH);
+		this.last.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent e) {
+				gotoLast();
+			}
+		});
+		
+		this.updateItems(true);
+		this.loadProperties();
+	}
+	
+	public int getStatus() {
+		return this.status;
+	}
+	
+	public void setStatus(int status) {
+		this.status = status;
+	}
+	
+	public void updateItems(){
+		this.updateItems(false);
+	}
+	
+	public void updateItems(boolean force){
+		if(!isDisposed()){
+			int lastStatus = getStatus();
+			
+			if(TuxGuitar.instance().getPlayer().isRunning()){
+				setStatus(STATUS_RUNNING);
+			}else if(TuxGuitar.instance().getPlayer().isPaused()){
+				setStatus(STATUS_PAUSED);
+			}else{
+				setStatus(STATUS_STOPPED);
+			}
+			
+			if(force || lastStatus != getStatus()){
+				if(getStatus() == STATUS_RUNNING){
+					this.first.setImage(TuxGuitar.instance().getIconManager().getTransportFirst2());
+					this.last.setImage(TuxGuitar.instance().getIconManager().getTransportLast2());
+					this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportPrevious2());
+					this.next.setImage(TuxGuitar.instance().getIconManager().getTransportNext2());
+					this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportStop2());
+					this.play.setImage(TuxGuitar.instance().getIconManager().getTransportPause());
+				}else if(getStatus() == STATUS_PAUSED){
+					this.first.setImage(TuxGuitar.instance().getIconManager().getTransportFirst2());
+					this.last.setImage(TuxGuitar.instance().getIconManager().getTransportLast2());
+					this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportPrevious2());
+					this.next.setImage(TuxGuitar.instance().getIconManager().getTransportNext2());
+					this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportStop2());
+					this.play.setImage(TuxGuitar.instance().getIconManager().getTransportPlay2());
+				}else if(getStatus() == STATUS_STOPPED){
+					this.first.setImage(TuxGuitar.instance().getIconManager().getTransportFirst1());
+					this.last.setImage(TuxGuitar.instance().getIconManager().getTransportLast1());
+					this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportPrevious1());
+					this.next.setImage(TuxGuitar.instance().getIconManager().getTransportNext1());
+					this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportStop1());
+					this.play.setImage(TuxGuitar.instance().getIconManager().getTransportPlay1());
+				}
+				this.loadPlayText();
+			}
+			TGMeasureHeader first = getSongManager().getFirstMeasureHeader();
+			TGMeasureHeader last = getSongManager().getLastMeasureHeader();
+			this.tickProgress.setMinimum((int)first.getStart());
+			this.tickProgress.setMaximum((int)(last.getStart() + last.getLength()) -1);
+			this.metronome.setSelection(TuxGuitar.instance().getPlayer().isMetronomeEnabled());
+			
+			this.redraw();
+		}
+	}
+	
+	public void loadProperties(){
+		if(!isDisposed()){
+			this.dialog.setText(TuxGuitar.getProperty("transport"));
+			this.stop.setToolTipText(TuxGuitar.getProperty("transport.stop"));
+			this.first.setToolTipText(TuxGuitar.getProperty("transport.first"));
+			this.last.setToolTipText(TuxGuitar.getProperty("transport.last"));
+			this.previous.setToolTipText(TuxGuitar.getProperty("transport.previous"));
+			this.next.setToolTipText(TuxGuitar.getProperty("transport.next"));
+			this.metronome.setToolTipText(TuxGuitar.getProperty("transport.metronome"));
+			this.mode.setToolTipText(TuxGuitar.getProperty("transport.mode"));
+			this.loadPlayText();
+		}
+	}
+	
+	public void loadPlayText(){
+		String property = TuxGuitar.getProperty( (getStatus() == STATUS_RUNNING ? "transport.pause" : "transport.start") );
+		this.play.setToolTipText(property);
+	}
+	
+	public void loadIcons(){
+		if(!isDisposed()){
+			this.initToolBar();
+			this.loadOptionIcons();
+			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+			this.dialog.layout(true);
+			this.dialog.pack(true);
+		}
+	}
+	
+	private void loadOptionIcons(){
+		this.metronome.setImage(TuxGuitar.instance().getIconManager().getTransportMetronome());
+		this.mode.setImage(TuxGuitar.instance().getIconManager().getTransportMode());
+	}
+	
+	public void dispose() {
+		if(!isDisposed()){
+			this.dialog.dispose();
+		}
+	}
+	
+	public boolean isDisposed() {
+		return (this.dialog == null || this.dialog.isDisposed());
+	}
+	
+	public boolean isEditingTickScale() {
+		return this.editingTickScale;
+	}
+	
+	public void setEditingTickScale(boolean editingTickScale) {
+		this.editingTickScale = editingTickScale;
+	}
+	
+	protected TGSongManager getSongManager(){
+		return TuxGuitar.instance().getSongManager();
+	}
+	
+	public void gotoFirst(){
+		gotoMeasure(getSongManager().getFirstMeasureHeader(),true);
+	}
+	
+	public void gotoLast(){
+		gotoMeasure(getSongManager().getLastMeasureHeader(),true) ;
+	}
+	
+	public void gotoNext(){
+		MidiPlayer player = TuxGuitar.instance().getPlayer();
+		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition()));
+		if(header != null){
+			gotoMeasure(getSongManager().getNextMeasureHeader(header),true);
+		}
+	}
+	
+	public void gotoPrevious(){
+		MidiPlayer player = TuxGuitar.instance().getPlayer();
+		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition()));
+		if(header != null){
+			gotoMeasure(getSongManager().getPrevMeasureHeader(header),true);
+		}
+	}
+	
+	public void gotoMeasure(TGMeasureHeader header){
+		gotoMeasure(header,false);
+	}
+	
+	public void gotoMeasure(TGMeasureHeader header,boolean moveCaret){
+		if(header != null){
+			TGMeasure playingMeasure = null;
+			if( TuxGuitar.instance().getPlayer().isRunning() ){
+				TuxGuitar.instance().getEditorCache().updatePlayMode();
+				playingMeasure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
+			}
+			if( playingMeasure == null || playingMeasure.getHeader().getNumber() != header.getNumber() ){
+				TuxGuitar.instance().getPlayer().setTickPosition(MidiTickUtil.getTick(header.getStart()));
+				if(moveCaret){
+					TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().goToTickPosition();
+					TuxGuitar.instance().updateCache(true);
+				}
+				redraw();
+			}
+		}
+	}
+	
+	public void gotoPlayerPosition(){
+		TuxGuitar.instance().lock();
+		
+		MidiPlayer player = TuxGuitar.instance().getPlayer();
+		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition()));
+		if(header != null){
+			player.setTickPosition(MidiTickUtil.getTick(header.getStart()));
+		}
+		TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().goToTickPosition();
+		TuxGuitar.instance().unlock();
+		
+		TuxGuitar.instance().updateCache(true);
+	}
+	
+	public void play(){
+		MidiPlayer player = TuxGuitar.instance().getPlayer();
+		if(!player.isRunning()){
+			try{
+				player.getMode().reset();
+				player.play();
+			}catch(MidiPlayerException exception){
+				MessageDialog.errorMessage(exception);
+			}
+		}else{
+			player.pause();
+		}
+	}
+	
+	public void stop(){
+		MidiPlayer player = TuxGuitar.instance().getPlayer();
+		if(!player.isRunning()){
+			player.reset();
+			this.gotoPlayerPosition();
+		}else{
+			player.reset();
+		}
+	}
+	
+	public void redraw(){
+		if(!TuxGuitar.instance().isLocked()){
+			if(!isDisposed()){
+				new SyncThread(new Runnable() {
+					public void run() {
+						if(!isDisposed() && !TuxGuitar.instance().isLocked()){
+							if(isEditingTickScale()){
+								TGTransport.this.label.setText(Long.toString(TGTransport.this.tickProgress.getSelection()));
+							}
+							else if(!TuxGuitar.instance().getPlayer().isRunning()){
+								long tickPosition = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getPosition();
+								
+								TGTransport.this.label.setText(Long.toString(tickPosition));
+								TGTransport.this.tickProgress.setSelection((int)tickPosition);
+							}
+						}
+					}
+				}).start();
+			}
+		}
+	}
+	
+	public void redrawPlayingMode(){
+		if(!TuxGuitar.instance().isLocked()){
+			//TuxGuitar.instance().lock();
+			if(!isDisposed()){
+				if(!isEditingTickScale() && TuxGuitar.instance().getPlayer().isRunning()){
+					long time = System.currentTimeMillis();
+					if(time > this.redrawTime + PLAY_MODE_DELAY){
+						long position = (TuxGuitar.instance().getEditorCache().getPlayStart() + (TuxGuitar.instance().getPlayer().getTickPosition() - TuxGuitar.instance().getEditorCache().getPlayTick()));
+						this.label.setText(Long.toString(position));
+						this.tickProgress.setSelection((int)position);
+						this.redrawTime = time;
+					}
+				}
+			}
+			//TuxGuitar.instance().unlock();
+		}
+	}
+	
+	public void doRedraw(int type) {
+		if( type == TGRedrawListener.PLAYING_THREAD || type == TGRedrawListener.PLAYING_NEW_BEAT ){
+			this.redrawPlayingMode();
+		}
+	}
+	
+	public void doUpdate(int type) {
+		if( type == TGUpdateListener.SELECTION ){
+			this.updateItems();
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/transport/TGTransportListener.java b/TuxGuitar/src/org/herac/tuxguitar/app/transport/TGTransportListener.java
new file mode 100644
index 0000000..67130d3
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/transport/TGTransportListener.java
@@ -0,0 +1,78 @@
+package org.herac.tuxguitar.app.transport;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.player.base.MidiPlayerListener;
+import org.herac.tuxguitar.util.TGException;
+import org.herac.tuxguitar.util.TGSynchronizer;
+
+public class TGTransportListener implements MidiPlayerListener{
+	
+	protected Object sync;
+	protected TGSynchronizer.TGRunnable startedRunnable;
+	protected TGSynchronizer.TGRunnable stoppedRunnable;
+	
+	public TGTransportListener(){
+		this.sync = new Object();
+		this.startedRunnable = getStartedRunnable();
+		this.stoppedRunnable = getStoppedRunnable();
+	}
+	
+	public void notifyStarted() {
+		new Thread(new Runnable() {
+			public void run() throws TGException {
+				try {
+					TuxGuitar.instance().updateCache(true);
+					while (TuxGuitar.instance().getPlayer().isRunning()) {
+						synchronized( TGTransportListener.this.sync ){
+							TGSynchronizer.instance().execute( TGTransportListener.this.startedRunnable );
+							TGTransportListener.this.sync.wait(25);
+						}
+					}
+					TGTransportListener.this.notifyStopped();
+				} catch (Throwable throwable) {
+					throwable.printStackTrace();
+				}
+			}
+		}).start();
+	}
+	
+	public void notifyStopped() {
+		try {
+			if(!TuxGuitar.instance().getDisplay().isDisposed()){
+				TGSynchronizer.instance().executeLater( TGTransportListener.this.stoppedRunnable );
+			}
+		} catch (Throwable throwable) {
+			throwable.printStackTrace();
+		}
+	}
+	
+	public void notifyLoop(){
+		// Not implemented
+	}
+	
+	private TGSynchronizer.TGRunnable getStartedRunnable(){
+		return new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				if(TuxGuitar.instance().getPlayer().isRunning()){
+					TuxGuitar.instance().redrawPlayingMode();
+				}
+			}
+		};
+	}
+	
+	private TGSynchronizer.TGRunnable getStoppedRunnable(){
+		return new TGSynchronizer.TGRunnable() {
+			public void run() throws TGException {
+				TuxGuitar.instance().getTransport().gotoPlayerPosition();
+			}
+		};
+	}
+
+	public void notifyCountDownStarted() {
+		// Not implemented
+	}
+	
+	public void notifyCountDownStopped() {
+		// Not implemented
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/CannotRedoException.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/CannotRedoException.java
new file mode 100644
index 0000000..a1e8406
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/CannotRedoException.java
@@ -0,0 +1,34 @@
+/*
+ * Created on 05-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.undo;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class CannotRedoException extends Exception{
+	
+	private static final long serialVersionUID = 1L;
+	
+	public CannotRedoException() {
+		super();
+	}
+	
+	public CannotRedoException(String message) {
+		super(message);
+	}
+	
+	public CannotRedoException(String message, Throwable cause) {
+		super(message, cause);
+	}
+	
+	public CannotRedoException(Throwable cause) {
+		super(cause);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/CannotUndoException.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/CannotUndoException.java
new file mode 100644
index 0000000..6bd2545
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/CannotUndoException.java
@@ -0,0 +1,34 @@
+/*
+ * Created on 05-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.undo;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class CannotUndoException extends Exception{
+	
+	private static final long serialVersionUID = 1L;
+	
+	public CannotUndoException() {
+		super();
+	}
+	
+	public CannotUndoException(String message) {
+		super(message);
+	}
+	
+	public CannotUndoException(String message, Throwable cause) {
+		super(message, cause);
+	}
+	
+	public CannotUndoException(Throwable cause) {
+		super(cause);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/UndoableEdit.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/UndoableEdit.java
new file mode 100644
index 0000000..19b7fec
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/UndoableEdit.java
@@ -0,0 +1,14 @@
+package org.herac.tuxguitar.app.undo;
+
+public interface UndoableEdit {
+	public static final int UNDO_ACTION = 1;
+	public static final int REDO_ACTION = 2;
+	
+	public void redo() throws CannotRedoException;
+	
+	public void undo() throws CannotUndoException;
+	
+	public boolean canRedo();
+	
+	public boolean canUndo();
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/UndoableManager.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/UndoableManager.java
new file mode 100644
index 0000000..69b024b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/UndoableManager.java
@@ -0,0 +1,125 @@
+/*
+ * Created on 08-ago-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.undo;
+
+import java.util.ArrayList;
+import java.util.List;
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class UndoableManager {
+	private static final int LIMIT = 100;
+	private int indexOfNextAdd;
+	private List edits;
+	
+	public UndoableManager() {
+		this.init();
+	}
+	
+	public void discardAllEdits() {
+		this.reset();
+	}
+	
+	public synchronized void undo() throws CannotUndoException {
+		UndoableEdit edit = editToBeUndone();
+		if (edit == null) {
+			throw new CannotUndoException();
+		}
+		try{
+			edit.undo();
+		}catch(Throwable throwable){
+			throw new CannotUndoException(throwable);
+		}
+		this.indexOfNextAdd--;
+	}
+	
+	public synchronized void redo() throws CannotRedoException {
+		UndoableEdit edit = editToBeRedone();
+		if (edit == null) {
+			throw new CannotRedoException();
+		}
+		try{
+			edit.redo();
+		}catch(Throwable throwable){
+			throw new CannotRedoException();
+		}
+		this.indexOfNextAdd++;
+	}
+	
+	public synchronized boolean canUndo() {
+		boolean canUndo = false;
+		UndoableEdit edit = editToBeUndone();
+		if (edit != null) {
+			canUndo = edit.canUndo();
+		}
+		return canUndo;
+	}
+	
+	public synchronized boolean canRedo() {
+		boolean canRedo = false;
+		UndoableEdit edit = editToBeRedone();
+		if (edit != null) {
+			canRedo = edit.canRedo();
+		}
+		return canRedo;
+	}
+	
+	public synchronized void addEdit(UndoableEdit anEdit) {
+		checkForUnused();
+		checkForLimit();
+		this.edits.add(this.indexOfNextAdd, anEdit);
+		this.indexOfNextAdd++;
+	}
+	
+	private void checkForUnused() {
+		while (this.edits.size() > this.indexOfNextAdd) {
+			UndoableEdit edit = (UndoableEdit) this.edits.get(this.indexOfNextAdd);
+			remove(edit);
+		}
+	}
+	
+	private void checkForLimit() {
+		while (this.edits.size() >= LIMIT) {
+			UndoableEdit edit = (UndoableEdit) this.edits.get(0);
+			remove(edit);
+			this.indexOfNextAdd--;
+		}
+	}
+	
+	private void remove(UndoableEdit edit) {
+		this.edits.remove(edit);
+	}
+	
+	private UndoableEdit editToBeUndone() {
+		int index = this.indexOfNextAdd - 1;
+		if (index >= 0 && index < this.edits.size()) {
+			return (UndoableEdit) this.edits.get(index);
+		}
+		return null;
+	}
+	
+	private UndoableEdit editToBeRedone() {
+		int index = this.indexOfNextAdd;
+		if (index >= 0 && index < this.edits.size()) {
+			return (UndoableEdit) this.edits.get(index);
+		}
+		return null;
+	}
+	
+	private void init() {
+		this.indexOfNextAdd = 0;
+		this.edits = new ArrayList();
+	}
+	
+	private void reset() {
+		this.indexOfNextAdd = 0;
+		this.edits.clear();
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/UndoableCaretHelper.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/UndoableCaretHelper.java
new file mode 100644
index 0000000..e862698
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/UndoableCaretHelper.java
@@ -0,0 +1,37 @@
+package org.herac.tuxguitar.app.undo.undoables;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.song.models.TGDuration;
+import org.herac.tuxguitar.song.models.TGString;
+
+public class UndoableCaretHelper {
+	private long position;
+	private int track;
+	private int string;
+	private int velocity;
+	private TGDuration duration;
+	
+	public UndoableCaretHelper(){
+		Caret caret = getCaret();
+		this.track = caret.getTrack().getNumber();
+		this.position = caret.getPosition();
+		this.velocity = caret.getVelocity();
+		this.duration = caret.getDuration().clone(TuxGuitar.instance().getSongManager().getFactory());
+		this.string = 1;
+		TGString instrumentString = caret.getSelectedString();
+		if(instrumentString != null){
+			this.string = instrumentString.getNumber();
+		}
+	}
+	
+	public void update(){
+		getCaret().update(this.track,this.position,this.string,this.velocity);
+		getCaret().setSelectedDuration(this.duration.clone(TuxGuitar.instance().getSongManager().getFactory()));
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/UndoableJoined.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/UndoableJoined.java
new file mode 100644
index 0000000..56bfffb
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/UndoableJoined.java
@@ -0,0 +1,62 @@
+package org.herac.tuxguitar.app.undo.undoables;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+
+public class UndoableJoined implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private List undoables;
+	
+	public UndoableJoined(){
+		this.doAction = UNDO_ACTION;
+		this.undoCaret = new UndoableCaretHelper();
+		this.undoables = new ArrayList();
+	}
+	
+	public void addUndoableEdit(UndoableEdit undoable){
+		this.undoables.add(undoable);
+	}
+	
+	public void redo() throws CannotRedoException {
+		int count = this.undoables.size();
+		for(int i = 0;i < count;i++){
+			UndoableEdit undoable = (UndoableEdit)this.undoables.get(i);
+			undoable.redo();
+		}
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		int count = this.undoables.size();
+		for(int i = (count - 1);i >= 0;i--){
+			UndoableEdit undoable = (UndoableEdit)this.undoables.get(i);
+			undoable.undo();
+		}
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public UndoableJoined endUndo(){
+		this.redoCaret = new UndoableCaretHelper();
+		return this;
+	}
+	
+	public boolean isEmpty(){
+		return this.undoables.isEmpty();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/channel/UndoableChannelGeneric.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/channel/UndoableChannelGeneric.java
new file mode 100644
index 0000000..3fc2ab4
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/channel/UndoableChannelGeneric.java
@@ -0,0 +1,90 @@
+package org.herac.tuxguitar.app.undo.undoables.channel;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class UndoableChannelGeneric implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private List undoChannels;
+	private List redoChannels;
+	
+	private UndoableChannelGeneric(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		this.updateSongChannels(this.redoChannels);
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		this.updateSongChannels(this.undoChannels);
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChannelGeneric startUndo(){
+		UndoableChannelGeneric undoable = new UndoableChannelGeneric();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoChannels = undoable.getChannels();
+		return undoable;
+	}
+	
+	public UndoableChannelGeneric endUndo(){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoChannels = getChannels();
+		return this;
+	}
+	
+	private List getChannels(){
+		List channels = new ArrayList();
+		Iterator it = TuxGuitar.instance().getSongManager().getChannels().iterator();
+		while( it.hasNext() ){
+			channels.add(cloneChannel((TGChannel)it.next()));
+		}
+		return channels;
+	}
+	
+	private TGChannel cloneChannel(TGChannel channel){
+		return channel.clone(TuxGuitar.instance().getSongManager().getFactory());
+	}
+	
+	private void updateSongChannels( List channels ){
+		TGSongManager tgSongManager = TuxGuitar.instance().getSongManager();
+		tgSongManager.removeAllChannels();
+		
+		Iterator it = channels.iterator();
+		while( it.hasNext() ){
+			tgSongManager.addChannel(cloneChannel((TGChannel)it.next()));
+		}
+		
+		TuxGuitar.instance().updateCache(true);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/channel/UndoableModifyChannel.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/channel/UndoableModifyChannel.java
new file mode 100644
index 0000000..afdd452
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/channel/UndoableModifyChannel.java
@@ -0,0 +1,91 @@
+package org.herac.tuxguitar.app.undo.undoables.channel;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGChannel;
+
+public class UndoableModifyChannel implements UndoableEdit{
+	
+	private int channelId;
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private TGChannel undoChannel;
+	private TGChannel redoChannel;
+	
+	private UndoableModifyChannel(int channelId){
+		this.channelId = channelId;
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		this.updateSongChannel(this.redoChannel);
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		this.updateSongChannel(this.undoChannel);
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableModifyChannel startUndo(int channelId){
+		UndoableModifyChannel undoable = new UndoableModifyChannel(channelId);
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoChannel = undoable.cloneChannel(undoable.getChannel());
+		return undoable;
+	}
+	
+	public UndoableModifyChannel endUndo(){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoChannel = cloneChannel(getChannel());
+		return this;
+	}
+	
+	private TGChannel cloneChannel(TGChannel channel){
+		return channel.clone(TuxGuitar.instance().getSongManager().getFactory());
+	}
+	
+	private TGChannel getChannel(){
+		return TuxGuitar.instance().getSongManager().getChannel(this.channelId);
+	}
+	
+	private void updateSongChannel(TGChannel channel){
+		TGSongManager tgSongManager = TuxGuitar.instance().getSongManager();
+		tgSongManager.updateChannel(
+			channel.getChannelId(),  
+			channel.getBank(), 
+			channel.getProgram(), 
+			channel.getVolume(), 
+			channel.getBalance(), 
+			channel.getChorus(), 
+			channel.getReverb(), 
+			channel.getPhaser(), 
+			channel.getTremolo(), 
+			channel.getName()
+		);
+		
+		TuxGuitar.instance().updateCache(true);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeAlternativeRepeat.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeAlternativeRepeat.java
new file mode 100644
index 0000000..fe9bdb6
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeAlternativeRepeat.java
@@ -0,0 +1,79 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+public class UndoableChangeAlternativeRepeat implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private long position;
+	private int undoRepeatAlternative;
+	private int redoRepeatAlternative;
+	
+	private UndoableChangeAlternativeRepeat(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.changeAlternativeRepeat(this.position,this.redoRepeatAlternative);
+		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
+		TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(measure.getNumber());
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.changeAlternativeRepeat(this.position,this.undoRepeatAlternative);
+		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
+		TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(measure.getNumber());
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeAlternativeRepeat startUndo(){
+		UndoableChangeAlternativeRepeat undoable = new UndoableChangeAlternativeRepeat();
+		Caret caret = getCaret();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.position = caret.getPosition();
+		undoable.undoRepeatAlternative = caret.getMeasure().getHeader().getRepeatAlternative();
+		
+		return undoable;
+	}
+	
+	public UndoableChangeAlternativeRepeat endUndo(int redoRepeatAlternative){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoRepeatAlternative = redoRepeatAlternative;
+		return this;
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeClef.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeClef.java
new file mode 100644
index 0000000..3712d0d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeClef.java
@@ -0,0 +1,123 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableChangeClef implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private long position;
+	private int redoableClef;
+	private int undoableClef;
+	private List nextClefPositions;
+	private boolean toEnd;
+	private TGTrack track;
+	
+	private UndoableChangeClef(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getSongManager().getTrackManager().changeClef(this.track,this.position,this.redoableClef,this.toEnd);
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TuxGuitar.instance().getSongManager().getTrackManager().changeClef(this.track,this.position,this.undoableClef,this.toEnd);
+		if(this.toEnd){
+			Iterator it = this.nextClefPositions.iterator();
+			while(it.hasNext()){
+				ClefPosition ksp = (ClefPosition)it.next();
+				TuxGuitar.instance().getSongManager().getTrackManager().changeClef(this.track,ksp.getPosition(),ksp.getClef(),true);
+			}
+		}
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeClef startUndo(){
+		UndoableChangeClef undoable = new UndoableChangeClef();
+		Caret caret = getCaret();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.position = caret.getPosition();
+		undoable.undoableClef = caret.getMeasure().getClef();
+		undoable.track = caret.getTrack();
+		undoable.nextClefPositions = new ArrayList();
+		
+		int prevClef = undoable.undoableClef;
+		Iterator it = caret.getTrack().getMeasures();
+		while(it.hasNext()){
+			TGMeasureImpl measure = (TGMeasureImpl)it.next();
+			if(measure.getStart() > undoable.position){
+				int currClef = measure.getClef();
+				if(prevClef != currClef){
+					ClefPosition tsp = undoable.new ClefPosition(measure.getStart(),currClef);
+					undoable.nextClefPositions.add(tsp);
+				}
+				prevClef = currClef;
+			}
+		}
+		
+		return undoable;
+	}
+	
+	public UndoableChangeClef endUndo(int clef,boolean toEnd){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoableClef = clef;
+		this.toEnd = toEnd;
+		return this;
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+	private class ClefPosition{
+		private long position;
+		private int clef;
+		
+		public ClefPosition(long position,int clef) {
+			this.position = position;
+			this.clef = clef;
+		}
+		
+		public long getPosition() {
+			return this.position;
+		}
+		
+		public int getClef() {
+			return this.clef;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeCloseRepeat.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeCloseRepeat.java
new file mode 100644
index 0000000..4f980ab
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeCloseRepeat.java
@@ -0,0 +1,82 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+public class UndoableChangeCloseRepeat implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private long position;
+	private int undoRepeatClose;
+	private int redoRepeatClose;
+	
+	private UndoableChangeCloseRepeat(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.changeCloseRepeat(this.position,this.redoRepeatClose);
+		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
+		TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(measure.getNumber());
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.changeCloseRepeat(this.position,this.undoRepeatClose);
+		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
+		TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(measure.getNumber());
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeCloseRepeat startUndo(){
+		Caret caret = getCaret();
+		return startUndo(caret.getPosition(),caret.getMeasure().getRepeatClose());
+	}
+	
+	public static UndoableChangeCloseRepeat startUndo(long position,int repeatClose){
+		UndoableChangeCloseRepeat undoable = new UndoableChangeCloseRepeat();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.position = position;
+		undoable.undoRepeatClose = repeatClose;
+		
+		return undoable;
+	}
+	
+	public UndoableChangeCloseRepeat endUndo(int redoRepeatClose){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoRepeatClose = redoRepeatClose;
+		return this;
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeInfo.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeInfo.java
new file mode 100644
index 0000000..245f6e8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeInfo.java
@@ -0,0 +1,98 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.models.TGSong;
+
+public class UndoableChangeInfo implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private String undoName;
+	private String undoArtist;
+	private String undoAlbum;
+	private String undoAuthor;
+	private String undoDate;
+	private String undoCopyright;
+	private String undoWriter;
+	private String undoTranscriber;
+	private String undoComments;
+	private String redoName;
+	private String redoArtist;
+	private String redoAlbum;
+	private String redoAuthor;
+	private String redoDate;
+	private String redoCopyright;
+	private String redoWriter;
+	private String redoTranscriber;
+	private String redoComments;
+	
+	private UndoableChangeInfo(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getSongManager().setProperties(this.redoName,this.redoArtist,this.redoAlbum,this.redoAuthor,this.redoDate,this.redoCopyright,this.redoWriter,this.redoTranscriber,this.redoComments);
+		TuxGuitar.instance().showTitle();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TuxGuitar.instance().getSongManager().setProperties(this.undoName,this.undoArtist,this.undoAlbum,this.undoAuthor,this.undoDate,this.undoCopyright,this.undoWriter,this.undoTranscriber,this.undoComments);
+		TuxGuitar.instance().showTitle();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeInfo startUndo(){
+		TGSong song = TuxGuitar.instance().getSongManager().getSong();
+		UndoableChangeInfo undoable = new UndoableChangeInfo();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoName = song.getName();
+		undoable.undoArtist = song.getArtist();
+		undoable.undoAlbum = song.getAlbum();
+		undoable.undoAuthor = song.getAuthor();
+		undoable.undoDate = song.getDate();
+		undoable.undoCopyright = song.getCopyright();
+		undoable.undoWriter = song.getWriter();
+		undoable.undoTranscriber = song.getTranscriber();
+		undoable.undoComments = song.getComments();		
+		return undoable;
+	}
+	
+	public UndoableChangeInfo endUndo(){
+		TGSong song = TuxGuitar.instance().getSongManager().getSong();
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoName = song.getName();
+		this.redoArtist = song.getArtist();
+		this.redoAlbum = song.getAlbum();
+		this.redoAuthor = song.getAuthor();
+		this.redoDate = song.getDate();
+		this.redoCopyright = song.getCopyright();
+		this.redoWriter = song.getWriter();
+		this.redoTranscriber = song.getTranscriber();
+		this.redoComments = song.getComments();
+		return this;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeKeySignature.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeKeySignature.java
new file mode 100644
index 0000000..7ad6e65
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeKeySignature.java
@@ -0,0 +1,123 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableChangeKeySignature implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private long position;
+	private int redoableKeySignature;
+	private int undoableKeySignature;
+	private List nextKeySignaturePositions;
+	private boolean toEnd;
+	private TGTrack track;
+	
+	private UndoableChangeKeySignature(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getSongManager().getTrackManager().changeKeySignature(this.track,this.position,this.redoableKeySignature,this.toEnd);
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TuxGuitar.instance().getSongManager().getTrackManager().changeKeySignature(this.track,this.position,this.undoableKeySignature,this.toEnd);
+		if(this.toEnd){
+			Iterator it = this.nextKeySignaturePositions.iterator();
+			while(it.hasNext()){
+				KeySignaturePosition ksp = (KeySignaturePosition)it.next();
+				TuxGuitar.instance().getSongManager().getTrackManager().changeKeySignature(this.track,ksp.getPosition(),ksp.getKeySignature(),true);
+			}
+		}
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeKeySignature startUndo(){
+		UndoableChangeKeySignature undoable = new UndoableChangeKeySignature();
+		Caret caret = getCaret();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.position = caret.getPosition();
+		undoable.undoableKeySignature = caret.getMeasure().getKeySignature();
+		undoable.track = caret.getTrack();
+		undoable.nextKeySignaturePositions = new ArrayList();
+		
+		int prevKeySignature = undoable.undoableKeySignature;
+		Iterator it = caret.getTrack().getMeasures();
+		while(it.hasNext()){
+			TGMeasureImpl measure = (TGMeasureImpl)it.next();
+			if(measure.getStart() > undoable.position){
+				int currKeySignature = measure.getKeySignature();
+				if(prevKeySignature != currKeySignature){
+					KeySignaturePosition tsp = undoable.new KeySignaturePosition(measure.getStart(),currKeySignature);
+					undoable.nextKeySignaturePositions.add(tsp);
+				}
+				prevKeySignature = currKeySignature;
+			}
+		}
+		
+		return undoable;
+	}
+	
+	public UndoableChangeKeySignature endUndo(int keySignature,boolean toEnd){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoableKeySignature = keySignature;
+		this.toEnd = toEnd;
+		return this;
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+	private class KeySignaturePosition{
+		private long position;
+		private int keySignature;
+		
+		public KeySignaturePosition(long position,int keySignature) {
+			this.position = position;
+			this.keySignature = keySignature;
+		}
+		
+		public long getPosition() {
+			return this.position;
+		}
+		
+		public int getKeySignature() {
+			return this.keySignature;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeMarker.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeMarker.java
new file mode 100644
index 0000000..4a7df26
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeMarker.java
@@ -0,0 +1,74 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.marker.MarkerList;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.models.TGMarker;
+
+public class UndoableChangeMarker implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private TGMarker undoMarker;
+	private TGMarker redoMarker;
+	
+	private UndoableChangeMarker(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		if(this.redoMarker != null){
+			TuxGuitar.instance().getSongManager().updateMarker(this.redoMarker.clone(TuxGuitar.instance().getSongManager().getFactory()));
+			MarkerList.instance().update(true);
+		}else if(this.undoMarker != null){
+			TuxGuitar.instance().getSongManager().removeMarker(this.undoMarker.clone(TuxGuitar.instance().getSongManager().getFactory()));
+			MarkerList.instance().update(false);
+		}
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		if(this.undoMarker != null){
+			TuxGuitar.instance().getSongManager().updateMarker(this.undoMarker.clone(TuxGuitar.instance().getSongManager().getFactory()));
+			MarkerList.instance().update(true);
+		}else if(this.redoMarker != null){
+			TuxGuitar.instance().getSongManager().removeMarker(this.redoMarker.clone(TuxGuitar.instance().getSongManager().getFactory()));
+			MarkerList.instance().update(false);
+		}
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeMarker startUndo(TGMarker marker){
+		UndoableChangeMarker undoable = new UndoableChangeMarker();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoMarker = (marker == null)?null:(TGMarker)marker.clone(TuxGuitar.instance().getSongManager().getFactory());
+		
+		return undoable;
+	}
+	
+	public UndoableChangeMarker endUndo(TGMarker marker){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoMarker = (marker == null)?null:(TGMarker)marker.clone(TuxGuitar.instance().getSongManager().getFactory());
+		return this;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeOpenRepeat.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeOpenRepeat.java
new file mode 100644
index 0000000..2b585d6
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeOpenRepeat.java
@@ -0,0 +1,75 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGMeasure;
+
+public class UndoableChangeOpenRepeat implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private long position;
+	
+	private UndoableChangeOpenRepeat(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.changeOpenRepeat(this.position);
+		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
+		TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(measure.getNumber());
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.changeOpenRepeat(this.position);
+		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
+		TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(measure.getNumber());
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeOpenRepeat startUndo(){
+		UndoableChangeOpenRepeat undoable = new UndoableChangeOpenRepeat();
+		Caret caret = getCaret();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.position = caret.getPosition();
+		
+		return undoable;
+	}
+	
+	public UndoableChangeOpenRepeat endUndo(){
+		this.redoCaret = new UndoableCaretHelper();
+		return this;
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeTempo.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeTempo.java
new file mode 100644
index 0000000..2fcc184
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeTempo.java
@@ -0,0 +1,89 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGTempo;
+
+public class UndoableChangeTempo implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private List undoableTempos;
+	private List redoableTempos;
+	
+	private UndoableChangeTempo(){
+		super();
+		this.undoableTempos = new ArrayList();
+		this.redoableTempos = new ArrayList();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		this.setTempos(this.redoableTempos);
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		this.setTempos(this.undoableTempos);
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeTempo startUndo(){
+		UndoableChangeTempo undoable = new UndoableChangeTempo();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.getTempos(undoable.undoableTempos);
+		return undoable;
+	}
+	
+	public UndoableChangeTempo endUndo(){
+		this.redoCaret = new UndoableCaretHelper();
+		this.getTempos(this.redoableTempos);
+		return this;
+	}
+	
+	private void getTempos(List list){
+		Iterator it = TuxGuitar.instance().getSongManager().getSong().getMeasureHeaders();
+		while(it.hasNext()){
+			TGMeasureHeader header = (TGMeasureHeader)it.next();
+			list.add(header.getTempo().clone(TuxGuitar.instance().getSongManager().getFactory()));
+		}
+	}
+	
+	private void setTempos(List tempos){
+		int length = tempos.size();
+		if(length != TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders()){
+			return;
+		}
+		for(int i =0; i < length; i ++){
+			TGTempo tempo = ((TGTempo)tempos.get(i)).clone(TuxGuitar.instance().getSongManager().getFactory());
+			TuxGuitar.instance().getSongManager().changeTempo(TuxGuitar.instance().getSongManager().getMeasureHeader(i + 1),tempo);
+		}
+		TuxGuitar.instance().fireUpdate();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeTimeSignature.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeTimeSignature.java
new file mode 100644
index 0000000..4fe555b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeTimeSignature.java
@@ -0,0 +1,72 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGTimeSignature;
+
+public class UndoableChangeTimeSignature implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private TGSong song;
+	private long tsStart;
+	private boolean tsToEnd;
+	private TGTimeSignature ts;
+	
+	private UndoableChangeTimeSignature(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().changeTimeSignature(this.tsStart,this.ts,this.tsToEnd);
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGFactory factory = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getFactory();
+		TGSong song = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getSong();
+		this.song.copy(factory, song);
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeTimeSignature startUndo(){
+		TGFactory factory = new TGFactory();
+		TGSong song = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getSong();
+		UndoableChangeTimeSignature undoable = new UndoableChangeTimeSignature();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.song = song.clone(factory);
+		return undoable;
+	}
+	
+	public UndoableChangeTimeSignature endUndo(TGTimeSignature timeSignature,long start, boolean toEnd){
+		this.ts = timeSignature;
+		this.tsStart = start;
+		this.tsToEnd = toEnd;
+		this.redoCaret = new UndoableCaretHelper();
+		return this;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeTripletFeel.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeTripletFeel.java
new file mode 100644
index 0000000..aa907c2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/custom/UndoableChangeTripletFeel.java
@@ -0,0 +1,118 @@
+package org.herac.tuxguitar.app.undo.undoables.custom;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.graphics.control.TGMeasureImpl;
+
+public class UndoableChangeTripletFeel implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private long position;
+	private int redoableTripletFeel;
+	private int undoableTripletFeel;
+	private List nextTripletFeelPositions;
+	private boolean toEnd;
+	
+	private UndoableChangeTripletFeel(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getSongManager().changeTripletFeel(this.position,this.redoableTripletFeel,this.toEnd);
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TuxGuitar.instance().getSongManager().changeTripletFeel(this.position,this.undoableTripletFeel,this.toEnd);
+		if(this.toEnd){
+			Iterator it = this.nextTripletFeelPositions.iterator();
+			while(it.hasNext()){
+				TripletFeelPosition tfp = (TripletFeelPosition)it.next();
+				TuxGuitar.instance().getSongManager().changeTripletFeel(tfp.getPosition(),tfp.getTripletFeel(),true);
+			}
+		}
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableChangeTripletFeel startUndo(){
+		UndoableChangeTripletFeel undoable = new UndoableChangeTripletFeel();
+		Caret caret = getCaret();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.position = caret.getPosition();
+		undoable.undoableTripletFeel = caret.getMeasure().getTripletFeel();
+		undoable.nextTripletFeelPositions = new ArrayList();
+		
+		int prevTripletFeel = undoable.undoableTripletFeel;
+		Iterator it = TuxGuitar.instance().getSongManager().getFirstTrack().getMeasures();
+		while(it.hasNext()){
+			TGMeasureImpl measure = (TGMeasureImpl)it.next();
+			if(measure.getStart() > undoable.position){
+				int currTripletFeel = measure.getTripletFeel();
+				if(prevTripletFeel != currTripletFeel){
+					TripletFeelPosition tfp = undoable.new TripletFeelPosition(measure.getStart(),currTripletFeel);
+					undoable.nextTripletFeelPositions.add(tfp);
+				}
+				prevTripletFeel = currTripletFeel;
+			}
+		}
+		return undoable;
+	}
+	
+	public UndoableChangeTripletFeel endUndo(int tripletFeel,boolean toEnd){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoableTripletFeel = tripletFeel;
+		this.toEnd = toEnd;
+		return this;
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+	
+	private class TripletFeelPosition{
+		private long position;
+		private int tripletFeel;
+		
+		public TripletFeelPosition(long position,int tripletFeel) {
+			this.position = position;
+			this.tripletFeel = tripletFeel;
+		}
+		public long getPosition() {
+			return this.position;
+		}
+		public int getTripletFeel() {
+			return this.tripletFeel;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableAddMeasure.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableAddMeasure.java
new file mode 100644
index 0000000..37c9df8
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableAddMeasure.java
@@ -0,0 +1,62 @@
+package org.herac.tuxguitar.app.undo.undoables.measure;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+
+public class UndoableAddMeasure implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private int number;
+	
+	private UndoableAddMeasure(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getSongManager().addNewMeasure(this.number);
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TuxGuitar.instance().getSongManager().removeMeasure(this.number);
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableAddMeasure startUndo(int number){
+		UndoableAddMeasure undoable = new UndoableAddMeasure();
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.doAction = UNDO_ACTION;
+		undoable.number = number;
+		return undoable;
+	}
+	
+	public UndoableAddMeasure endUndo(){
+		this.redoCaret = new UndoableCaretHelper();
+		return this;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableInsertMeasure.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableInsertMeasure.java
new file mode 100644
index 0000000..ec314d2
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableInsertMeasure.java
@@ -0,0 +1,77 @@
+package org.herac.tuxguitar.app.undo.undoables.measure;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.helpers.TGSongSegment;
+import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper;
+
+public class UndoableInsertMeasure implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private TGSongSegment tracksMeasures;
+	private long insertPosition;
+	private int toTrack;
+	private int copyCount;
+	private int fromNumber;
+	private long theMove;
+	
+	public UndoableInsertMeasure(int toTrack){
+		Caret caret = getCaret();
+		this.doAction = UNDO_ACTION;
+		this.toTrack = toTrack;
+		this.undoCaret = new UndoableCaretHelper();
+		this.insertPosition = caret.getMeasure().getStart();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSongSegmentHelper helper = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager());
+		helper.insertMeasures(this.tracksMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),this.fromNumber,this.theMove,this.toTrack);
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		for(int i = 0;i < this.copyCount;i ++){
+			TuxGuitar.instance().getSongManager().removeMeasure(this.insertPosition);
+		}
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public UndoableInsertMeasure endUndo(TGSongSegment tracksMeasures,int copyCount,int fromNumber,long theMove){
+		this.redoCaret = new UndoableCaretHelper();
+		this.copyCount = copyCount;
+		this.tracksMeasures = tracksMeasures;
+		this.fromNumber = fromNumber;
+		this.theMove = theMove;
+		return this;
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableMeasureGeneric.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableMeasureGeneric.java
new file mode 100644
index 0000000..43130dc
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableMeasureGeneric.java
@@ -0,0 +1,102 @@
+package org.herac.tuxguitar.app.undo.undoables.measure;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.models.TGMeasure;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableMeasureGeneric implements UndoableEdit{
+	private int doAction;
+	private int trackNumber;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private TGMeasure undoMeasure;
+	private TGMeasure redoMeasure;
+	
+	private UndoableMeasureGeneric(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		this.replace(this.redoMeasure);
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		this.replace(this.undoMeasure);
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	private void replace(TGMeasure replace){
+		TGTrack track = TuxGuitar.instance().getSongManager().getTrack(this.trackNumber);
+		if(track != null && replace != null){
+			TGMeasureHeader header = TuxGuitar.instance().getSongManager().getMeasureHeader(replace.getNumber());
+			TGMeasure measure = replace.clone(TuxGuitar.instance().getSongManager().getFactory(),header);
+			TuxGuitar.instance().getSongManager().getTrackManager().replaceMeasure(track,measure);
+			TuxGuitar.instance().getTablatureEditor().getTablature().updateMeasure(header.getNumber());
+		}
+	}
+	
+	public static UndoableMeasureGeneric startUndo( TGMeasure measure ){
+		UndoableMeasureGeneric undoable = new UndoableMeasureGeneric();
+		undoable.doAction = UNDO_ACTION;
+		undoable.trackNumber = measure.getTrack().getNumber();
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoMeasure = measure.clone(TuxGuitar.instance().getSongManager().getFactory(),measure.getHeader().clone(TuxGuitar.instance().getSongManager().getFactory()));
+		return undoable;
+	}
+	
+	public UndoableMeasureGeneric endUndo( TGMeasure measure ){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoMeasure = measure.clone(TuxGuitar.instance().getSongManager().getFactory(),measure.getHeader().clone(TuxGuitar.instance().getSongManager().getFactory()));
+		return this;
+	}
+	
+	public static UndoableMeasureGeneric startUndo(){
+		/*
+		UndoableMeasureGeneric undoable = new UndoableMeasureGeneric();
+		Caret caret = getCaret();
+		undoable.doAction = UNDO_ACTION;
+		undoable.trackNumber = caret.getTrack().getNumber();
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoMeasure = caret.getMeasure().clone(TuxGuitar.instance().getSongManager().getFactory(),caret.getMeasure().getHeader().clone(TuxGuitar.instance().getSongManager().getFactory()));
+		return undoable;
+		*/
+		return startUndo( getCaret().getMeasure() );
+	}
+	
+	public UndoableMeasureGeneric endUndo(){
+		/*
+		Caret caret = getCaret();
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoMeasure = caret.getMeasure().clone(TuxGuitar.instance().getSongManager().getFactory(),caret.getMeasure().getHeader().clone(TuxGuitar.instance().getSongManager().getFactory()));
+		return this;
+		*/
+		return endUndo( getCaret().getMeasure() );
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableRemoveMeasure.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableRemoveMeasure.java
new file mode 100644
index 0000000..10e1e0d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableRemoveMeasure.java
@@ -0,0 +1,91 @@
+package org.herac.tuxguitar.app.undo.undoables.measure;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.helpers.TGSongSegment;
+import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper;
+import org.herac.tuxguitar.song.models.TGMarker;
+
+public class UndoableRemoveMeasure implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private TGSongSegment tracksMeasures;
+	private UndoMarkers undoMarkers;
+	private int n1;
+	private int n2;
+	
+	public UndoableRemoveMeasure(int n1,int n2){
+		this.doAction = UNDO_ACTION;
+		this.undoCaret = new UndoableCaretHelper();
+		this.n1 = n1;
+		this.n2 = n2;
+		this.tracksMeasures = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(n1,n2);
+		this.undoMarkers = new UndoMarkers();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getSongManager().removeMeasureHeaders(this.n1,this.n2);
+		TuxGuitar.instance().fireUpdate();
+		
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).insertMeasures(this.tracksMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),this.n1,0,0);
+		
+		TuxGuitar.instance().fireUpdate();
+		this.undoMarkers.undo();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public UndoableRemoveMeasure endUndo(){
+		this.redoCaret = new UndoableCaretHelper();
+		return this;
+	}
+	
+	private class UndoMarkers{
+		private List markers;
+		
+		public UndoMarkers(){
+			this.markers = new ArrayList();
+			Iterator it = TuxGuitar.instance().getSongManager().getMarkers().iterator();
+			while(it.hasNext()){
+				this.markers.add(((TGMarker)it.next()).clone(TuxGuitar.instance().getSongManager().getFactory()));
+			}
+		}
+		
+		public void undo(){
+			TuxGuitar.instance().getSongManager().removeAllMarkers();
+			Iterator it = this.markers.iterator();
+			while(it.hasNext()){
+				TGMarker marker = (TGMarker)it.next();
+				TuxGuitar.instance().getSongManager().updateMarker(marker.clone(TuxGuitar.instance().getSongManager().getFactory()));
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableReplaceMeasures.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableReplaceMeasures.java
new file mode 100644
index 0000000..5e9ad1d
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/measure/UndoableReplaceMeasures.java
@@ -0,0 +1,105 @@
+package org.herac.tuxguitar.app.undo.undoables.measure;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.helpers.TGSongSegment;
+import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper;
+import org.herac.tuxguitar.song.models.TGMarker;
+
+public class UndoableReplaceMeasures implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private UndoMarkers undoMarkers;
+	private TGSongSegment undoTrackMeasures;
+	private TGSongSegment redoTrackMeasures;
+	private int toTrack;
+	private int count;
+	private int freeSpace;
+	private long theMove;
+	
+	public UndoableReplaceMeasures(int p1,int p2,int toTrack){
+		this.doAction = UNDO_ACTION;
+		this.toTrack = toTrack;
+		this.undoCaret = new UndoableCaretHelper();
+		this.undoMarkers = new UndoMarkers();
+		this.undoTrackMeasures = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2);
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		for(int i = this.freeSpace;i < this.count;i ++){
+			TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
+		}
+		new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).replaceMeasures(this.redoTrackMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),this.theMove,this.toTrack);
+		
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		
+		for(int i = this.freeSpace;i < this.count;i ++){
+			TuxGuitar.instance().getSongManager().removeLastMeasure();
+		}
+		new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).replaceMeasures(this.undoTrackMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),0,0);
+		
+		TuxGuitar.instance().fireUpdate();
+		this.undoMarkers.undo();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public UndoableReplaceMeasures endUndo(TGSongSegment tracksMeasures,int count,int freeSpace,long theMove){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoTrackMeasures = tracksMeasures;
+		this.count = count;
+		this.freeSpace = freeSpace;
+		this.theMove = theMove;
+		return this;
+	}
+	
+	private class UndoMarkers{
+		private List markers;
+		
+		public UndoMarkers(){
+			this.markers = new ArrayList();
+			Iterator it = TuxGuitar.instance().getSongManager().getMarkers().iterator();
+			while(it.hasNext()){
+				this.markers.add(((TGMarker)it.next()).clone(TuxGuitar.instance().getSongManager().getFactory()));
+			}
+		}
+		
+		public void undo(){
+			TuxGuitar.instance().getSongManager().removeAllMarkers();
+			Iterator it = this.markers.iterator();
+			while(it.hasNext()){
+				TGMarker marker = (TGMarker)it.next();
+				TuxGuitar.instance().getSongManager().updateMarker(marker.clone(TuxGuitar.instance().getSongManager().getFactory()));
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableAddTrack.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableAddTrack.java
new file mode 100644
index 0000000..94b9040
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableAddTrack.java
@@ -0,0 +1,68 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableAddTrack implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private TGTrack redoableTrack;
+	
+	private UndoableAddTrack(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getSongManager().addTrack(cloneTrack(this.redoableTrack));
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TuxGuitar.instance().getSongManager().removeTrack(cloneTrack(this.redoableTrack));
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableAddTrack startUndo(){
+		UndoableAddTrack undoable = new UndoableAddTrack();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		
+		return undoable;
+	}
+	
+	public UndoableAddTrack endUndo(TGTrack track){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoableTrack = cloneTrack(track);
+		return this;
+	}
+	
+	private static TGTrack cloneTrack(TGTrack track){
+		return track.clone(TuxGuitar.instance().getSongManager().getFactory(), TuxGuitar.instance().getSongManager().getSong());
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableCloneTrack.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableCloneTrack.java
new file mode 100644
index 0000000..200a11c
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableCloneTrack.java
@@ -0,0 +1,69 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+
+public class UndoableCloneTrack implements UndoableEdit{
+	private int doAction;
+	private int trackNumber;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	
+	private UndoableCloneTrack(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getSongManager().cloneTrack(TuxGuitar.instance().getSongManager().getTrack(this.trackNumber));
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TuxGuitar.instance().getSongManager().removeTrack(TuxGuitar.instance().getSongManager().getLastTrack());
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableCloneTrack startUndo(){
+		UndoableCloneTrack undoable = new UndoableCloneTrack();
+		Caret caret = getCaret();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.trackNumber = caret.getTrack().getNumber();
+		
+		return undoable;
+	}
+	
+	public UndoableCloneTrack endUndo(){
+		this.redoCaret = new UndoableCaretHelper();
+		return this;
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableMoveTrackDown.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableMoveTrackDown.java
new file mode 100644
index 0000000..a4d80a0
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableMoveTrackDown.java
@@ -0,0 +1,67 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableMoveTrackDown implements UndoableEdit{
+	private int doAction;
+	private int trackNumber;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	
+	private UndoableMoveTrackDown(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.moveTrackDown(manager.getTrack(this.trackNumber - 1));
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.moveTrackUp(manager.getTrack(this.trackNumber));
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	
+	public static UndoableMoveTrackDown startUndo(){
+		UndoableMoveTrackDown undoable = new UndoableMoveTrackDown();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		
+		return undoable;
+	}
+	
+	public UndoableMoveTrackDown endUndo(TGTrack track){
+		this.redoCaret = new UndoableCaretHelper();
+		this.trackNumber = track.getNumber();
+		
+		return this;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableMoveTrackUp.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableMoveTrackUp.java
new file mode 100644
index 0000000..6320e61
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableMoveTrackUp.java
@@ -0,0 +1,66 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableMoveTrackUp implements UndoableEdit{
+	private int doAction;
+	private int trackNumber;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	
+	private UndoableMoveTrackUp(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.moveTrackUp(manager.getTrack(this.trackNumber + 1));
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.moveTrackDown(manager.getTrack(this.trackNumber));
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableMoveTrackUp startUndo(){
+		UndoableMoveTrackUp undoable = new UndoableMoveTrackUp();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		
+		return undoable;
+	}
+	
+	public UndoableMoveTrackUp endUndo(TGTrack track){
+		this.redoCaret = new UndoableCaretHelper();
+		this.trackNumber = track.getNumber();
+		
+		return this;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableRemoveTrack.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableRemoveTrack.java
new file mode 100644
index 0000000..04df2e5
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableRemoveTrack.java
@@ -0,0 +1,73 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.tab.Caret;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableRemoveTrack implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private TGTrack undoableTrack;
+	
+	private UndoableRemoveTrack(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TuxGuitar.instance().getSongManager().removeTrack(cloneTrack(this.undoableTrack));
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TuxGuitar.instance().getSongManager().addTrack(cloneTrack(this.undoableTrack));
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableRemoveTrack startUndo(){
+		UndoableRemoveTrack undoable = new UndoableRemoveTrack();
+		Caret caret = getCaret();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoableTrack = cloneTrack(caret.getTrack());
+		
+		return undoable;
+	}
+	
+	public UndoableRemoveTrack endUndo(){
+		this.redoCaret = new UndoableCaretHelper();
+		return this;
+	}
+	
+	private static Caret getCaret(){
+		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
+	}
+	
+	private static TGTrack cloneTrack(TGTrack track){
+		return track.clone(TuxGuitar.instance().getSongManager().getFactory(), TuxGuitar.instance().getSongManager().getSong());
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackChannel.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackChannel.java
new file mode 100644
index 0000000..19eaba1
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackChannel.java
@@ -0,0 +1,111 @@
+/*
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.factory.TGFactory;
+import org.herac.tuxguitar.song.models.TGChannel;
+import org.herac.tuxguitar.song.models.TGSong;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableTrackChannel implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private List undoChannels;
+	private List redoChannels;
+	
+	private UndoableTrackChannel(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSong song = TuxGuitar.instance().getSongManager().getSong();
+		for( int i = 0; i < this.redoChannels.size(); i ++){
+			TGChannel channel = (TGChannel)this.redoChannels.get(i);
+			TGTrack track = song.getTrack(i);
+			channel.copy( track.getChannel() );
+		}
+		TuxGuitar.instance().getMixer().updateValues();
+		TuxGuitar.instance().getTable().fireUpdate(false);
+		TuxGuitar.instance().updateCache(true);
+		if (TuxGuitar.instance().getPlayer().isRunning()) {
+			TuxGuitar.instance().getPlayer().updateControllers();
+		}
+		
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGSong song = TuxGuitar.instance().getSongManager().getSong();
+		for( int i = 0; i < this.undoChannels.size(); i ++){
+			TGChannel channel = (TGChannel)this.undoChannels.get(i);
+			TGTrack track = song.getTrack(i);
+			channel.copy( track.getChannel() );
+		}
+		TuxGuitar.instance().getMixer().updateValues();
+		TuxGuitar.instance().getTable().fireUpdate(false);
+		TuxGuitar.instance().updateCache(true);
+		if (TuxGuitar.instance().getPlayer().isRunning()) {
+			TuxGuitar.instance().getPlayer().updateControllers();
+		}
+		
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableTrackChannel startUndo(){
+		TGSong song = TuxGuitar.instance().getSongManager().getSong();
+		TGFactory factory = TuxGuitar.instance().getSongManager().getFactory();
+		int tracks = song.countTracks();
+		
+		UndoableTrackChannel undoable = new UndoableTrackChannel();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoChannels = new ArrayList();
+		
+		for( int i = 0; i < tracks; i ++){
+			TGTrack track = song.getTrack(i);
+			undoable.undoChannels.add( track.getChannel().clone(factory) );
+		}
+		return undoable;
+	}
+	
+	public UndoableTrackChannel endUndo(){
+		TGSong song = TuxGuitar.instance().getSongManager().getSong();
+		TGFactory factory = TuxGuitar.instance().getSongManager().getFactory();
+		int tracks = song.countTracks();
+		
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoChannels = new ArrayList();
+		
+		for( int i = 0; i < tracks; i ++){
+			TGTrack track = song.getTrack(i);
+			this.redoChannels.add( track.getChannel().clone(factory) );
+		}
+		return this;
+	}
+}
+*/
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackGeneric.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackGeneric.java
new file mode 100644
index 0000000..be25268
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackGeneric.java
@@ -0,0 +1,107 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableTrackGeneric implements UndoableEdit{
+	private int doAction;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private UndoTrack undoTrack;
+	private RedoTrack redoTrack;
+	
+	private UndoableTrackGeneric(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		this.redoTrack.redo();
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		this.undoTrack.undo();
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	
+	public static UndoableTrackGeneric startUndo(TGTrack track){
+		UndoableTrackGeneric undoable = new UndoableTrackGeneric();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoTrack = undoable.new UndoTrack(track);
+		return undoable;
+	}
+	
+	public UndoableTrackGeneric endUndo(TGTrack track){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoTrack = new RedoTrack(track);
+		return this;
+	}
+	
+	private class UndoTrack{
+		private TGTrack track;
+		
+		public UndoTrack(TGTrack track){
+			if(track != null){
+				this.track = track.clone(TuxGuitar.instance().getSongManager().getFactory(),TuxGuitar.instance().getSongManager().getSong());
+			}
+		}
+		
+		public void undo(){
+			if(this.track != null){
+				while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() < this.track.countMeasures() ){
+					TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
+				}
+				while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() > this.track.countMeasures() ){
+					TuxGuitar.instance().getSongManager().removeLastMeasureHeader();
+				}
+				TuxGuitar.instance().getSongManager().replaceTrack(this.track);
+				TuxGuitar.instance().fireUpdate();
+			}
+		}
+	}
+	
+	private class RedoTrack{
+		private TGTrack track;
+		
+		public RedoTrack(TGTrack track){
+			if(track != null){
+				this.track = track.clone(TuxGuitar.instance().getSongManager().getFactory(),TuxGuitar.instance().getSongManager().getSong());
+			}
+		}
+		
+		public void redo(){
+			if(this.track != null){
+				while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() < this.track.countMeasures() ){
+					TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
+				}
+				while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() > this.track.countMeasures() ){
+					TuxGuitar.instance().getSongManager().removeLastMeasureHeader();
+				}
+				TuxGuitar.instance().getSongManager().replaceTrack(this.track);
+				TuxGuitar.instance().fireUpdate();
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackInfo.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackInfo.java
new file mode 100644
index 0000000..51c4d48
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackInfo.java
@@ -0,0 +1,80 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGColor;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableTrackInfo implements UndoableEdit{
+	private int doAction;
+	private int trackNumber;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private String undoName;
+	private String redoName;
+	private TGColor undoColor;
+	private TGColor redoColor;
+	private int undoOffset;
+	private int redoOffset;
+	
+	private UndoableTrackInfo(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.getTrackManager().changeInfo(manager.getTrack(this.trackNumber),this.redoName,this.redoColor.clone(manager.getFactory()),this.redoOffset);
+		TuxGuitar.instance().fireUpdate();
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		manager.getTrackManager().changeInfo(manager.getTrack(this.trackNumber),this.undoName,this.undoColor.clone(manager.getFactory()),this.undoOffset);
+		TuxGuitar.instance().fireUpdate();
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableTrackInfo startUndo(TGTrack track){
+		UndoableTrackInfo undoable = new UndoableTrackInfo();
+		undoable.doAction = UNDO_ACTION;
+		undoable.trackNumber = track.getNumber();
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoName = track.getName();
+		undoable.undoColor = track.getColor().clone(TuxGuitar.instance().getSongManager().getFactory());
+		undoable.undoOffset = track.getOffset();
+		
+		return undoable;
+	}
+	
+	public UndoableTrackInfo endUndo(TGTrack track){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoName = track.getName();
+		this.redoColor = track.getColor().clone(TuxGuitar.instance().getSongManager().getFactory());
+		this.redoOffset = track.getOffset();
+		
+		return this;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackInstrument.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackInstrument.java
new file mode 100644
index 0000000..84890d4
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackInstrument.java
@@ -0,0 +1,75 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableTrackInstrument implements UndoableEdit{
+	private int doAction;
+	private int trackNumber;
+	private int undoChannelId;
+	private int redoChannelId;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	
+	private UndoableTrackInstrument(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSongManager tgSongManager = TuxGuitar.instance().getSongManager();
+		tgSongManager.getTrackManager().changeChannel(tgSongManager.getTrack(this.trackNumber),this.redoChannelId);
+		
+		TuxGuitar.instance().updateCache(true);
+		
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGSongManager tgSongManager = TuxGuitar.instance().getSongManager();
+		tgSongManager.getTrackManager().changeChannel(tgSongManager.getTrack(this.trackNumber),this.undoChannelId);
+		
+		TuxGuitar.instance().updateCache(true);
+		
+		this.undoCaret.update();
+		
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableTrackInstrument startUndo(TGTrack track){
+		UndoableTrackInstrument undoable = new UndoableTrackInstrument();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.trackNumber = track.getNumber();
+		undoable.undoChannelId = track.getChannelId();
+		
+		return undoable;
+	}
+	
+	public UndoableTrackInstrument endUndo(TGTrack track){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoChannelId = track.getChannelId();
+		
+		return this;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackLyric.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackLyric.java
new file mode 100644
index 0000000..0bd3e4f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackLyric.java
@@ -0,0 +1,77 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.models.TGLyric;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableTrackLyric implements UndoableEdit{
+	private int doAction;
+	private int trackNumber;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private TGLyric undoLyric;
+	private TGLyric redoLyric;
+	private int undoCaretPosition;
+	private int redoCaretPosition;
+	
+	private UndoableTrackLyric(){
+		this.undoLyric = TuxGuitar.instance().getSongManager().getFactory().newLyric();
+		this.redoLyric = TuxGuitar.instance().getSongManager().getFactory().newLyric();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGTrack track = TuxGuitar.instance().getSongManager().getTrack(this.trackNumber);
+		this.redoLyric.copy(track.getLyrics());
+		TuxGuitar.instance().getLyricEditor().setCaretPosition(this.redoCaretPosition);
+		TuxGuitar.instance().getLyricEditor().update();
+		TuxGuitar.instance().updateCache(false);
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGTrack track = TuxGuitar.instance().getSongManager().getTrack(this.trackNumber);
+		this.undoLyric.copy(track.getLyrics());
+		TuxGuitar.instance().getLyricEditor().setCaretPosition(this.undoCaretPosition);
+		TuxGuitar.instance().getLyricEditor().update();
+		TuxGuitar.instance().updateCache(false);
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableTrackLyric startUndo(TGTrack track,int undoCaretPosition){
+		UndoableTrackLyric undoable = new UndoableTrackLyric();
+		undoable.doAction = UNDO_ACTION;
+		undoable.trackNumber = track.getNumber();
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.undoCaretPosition = undoCaretPosition;
+		track.getLyrics().copy( undoable.undoLyric );
+		return undoable;
+	}
+	
+	public UndoableTrackLyric endUndo(TGTrack track,int redoCaretPosition){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoCaretPosition = redoCaretPosition;
+		track.getLyrics().copy( this.redoLyric );
+		return this;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackSoloMute.java b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackSoloMute.java
new file mode 100644
index 0000000..f6f2995
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/undo/undoables/track/UndoableTrackSoloMute.java
@@ -0,0 +1,92 @@
+package org.herac.tuxguitar.app.undo.undoables.track;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.undo.CannotRedoException;
+import org.herac.tuxguitar.app.undo.CannotUndoException;
+import org.herac.tuxguitar.app.undo.UndoableEdit;
+import org.herac.tuxguitar.app.undo.undoables.UndoableCaretHelper;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGTrack;
+
+public class UndoableTrackSoloMute implements UndoableEdit{
+	private int doAction;
+	private int track;
+	private UndoableCaretHelper undoCaret;
+	private UndoableCaretHelper redoCaret;
+	private boolean undoSolo;
+	private boolean undoMute;
+	private boolean redoSolo;
+	private boolean redoMute;
+	
+	private UndoableTrackSoloMute(){
+		super();
+	}
+	
+	public void redo() throws CannotRedoException {
+		if(!canRedo()){
+			throw new CannotRedoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		TGTrack track = manager.getTrack( this.track );
+		if( track != null ){
+			manager.getTrackManager().changeSolo(track, this.redoSolo );
+			manager.getTrackManager().changeMute(track, this.redoMute );
+		}
+		TuxGuitar.instance().getTable().fireUpdate(false);
+		TuxGuitar.instance().updateCache(true);
+		if (TuxGuitar.instance().getPlayer().isRunning()) {
+			TuxGuitar.instance().getPlayer().updateControllers();
+		}
+		
+		this.redoCaret.update();
+		this.doAction = UNDO_ACTION;
+	}
+	
+	public void undo() throws CannotUndoException {
+		if(!canUndo()){
+			throw new CannotUndoException();
+		}
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		TGTrack track = manager.getTrack( this.track );
+		if( track != null ){
+			manager.getTrackManager().changeSolo(track, this.undoSolo );
+			manager.getTrackManager().changeMute(track, this.undoMute );
+		}
+		TuxGuitar.instance().getTable().fireUpdate(false);
+		TuxGuitar.instance().updateCache(true);
+		if (TuxGuitar.instance().getPlayer().isRunning()) {
+			TuxGuitar.instance().getPlayer().updateControllers();
+		}
+		
+		this.undoCaret.update();
+		this.doAction = REDO_ACTION;
+	}
+	
+	public boolean canRedo() {
+		return (this.doAction == REDO_ACTION);
+	}
+	
+	public boolean canUndo() {
+		return (this.doAction == UNDO_ACTION);
+	}
+	
+	public static UndoableTrackSoloMute startUndo(TGTrack track){
+		UndoableTrackSoloMute undoable = new UndoableTrackSoloMute();
+		undoable.doAction = UNDO_ACTION;
+		undoable.undoCaret = new UndoableCaretHelper();
+		undoable.track = track.getNumber();
+		undoable.undoSolo = track.isSolo();
+		undoable.undoMute = track.isMute();
+		
+		return undoable;
+	}
+	
+	public UndoableTrackSoloMute endUndo(TGTrack track){
+		this.redoCaret = new UndoableCaretHelper();
+		this.redoSolo = track.isSolo();
+		this.redoMute = track.isMute();
+		
+		return this;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/ArgumentParser.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/ArgumentParser.java
new file mode 100644
index 0000000..261ff8f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/ArgumentParser.java
@@ -0,0 +1,151 @@
+package org.herac.tuxguitar.app.util;
+
+import java.io.File;
+import java.net.URL;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.util.TGVersion;
+
+public class ArgumentParser {
+	
+	private static final String TG_DEFAULT_URL = "tuxguitar.default.url";
+	
+	private static final String[] OPTION_HELP = new String[]{"-h","--help"};
+	private static final String[] OPTION_VERSION = new String[]{"-v","--version"};
+	private static final String[] OPTION_JRE_INFO = new String[]{"-i","--system-info"};
+	
+	private String[] arguments;
+	private boolean processAndExit;
+	private URL url;
+	
+	public ArgumentParser(String[] arguments){
+		this.arguments = arguments;
+		this.processAndExit = false;
+		this.parse();
+	}
+	
+	private void parse(){
+		try{
+			checkHelp();
+			checkVersion();
+			checkSystemInfo();
+			if(!processAndExit()){
+				checkProperties();
+				checkURL();
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+	}
+	
+	private void checkHelp(){
+		for(int i = 0;i < this.arguments.length;i++){
+			for(int j = 0;j < OPTION_HELP.length;j++){
+				if(this.arguments[i].equals(OPTION_HELP[j])){
+					print("usage: TuxGuitar [file]");
+					print("Options:");
+					print("	-h, --help                 Show help options");
+					print("	-v, --version              Show version information and exit");
+					print("	-i, --system-info          Show the JVM system information");
+					print("	-D<name>=<value>           Set a JVM system property");
+					
+					this.processAndExit = true;
+				}
+			}
+		}
+	}
+	
+	private void checkVersion(){
+		for(int i = 0;i < this.arguments.length;i++){
+			for(int j = 0;j < OPTION_VERSION.length;j++){
+				if(this.arguments[i].equals(OPTION_VERSION[j])){
+					print(TuxGuitar.APPLICATION_NAME + " - " + TGVersion.CURRENT.getVersion());
+					
+					this.processAndExit = true;
+				}
+			}
+		}
+	}
+	
+	private void checkSystemInfo(){
+		for(int i = 0;i < this.arguments.length;i++){
+			for(int j = 0;j < OPTION_JRE_INFO.length;j++){
+				if(this.arguments[i].equals(OPTION_JRE_INFO[j])){
+					print("System Info:");
+					print("-> OS-Name:           " + System.getProperty("os.name"));
+					print("-> OS-Arch:           " + System.getProperty("os.arch"));
+					print("-> OS-Version:        " + System.getProperty("os.version"));
+					print("-> JVM-Name:          " + System.getProperty("java.vm.name"));
+					print("-> JVM-Version:       " + System.getProperty("java.vm.version"));
+					print("-> JVM-Vendor:        " + System.getProperty("java.vm.vendor"));
+					print("-> Java-Version:      " + System.getProperty("java.version"));
+					print("-> Java-Vendor:       " + System.getProperty("java.vendor"));
+					print("-> Java-Home:         " + System.getProperty("java.home"));
+					print("-> Java-Class-Path:   " + System.getProperty("java.class.path"));
+					print("-> Java-Library-Path: " + System.getProperty("java.library.path"));
+					
+					this.processAndExit = true;
+				}
+			}
+		}
+	}
+	
+	private void checkProperties(){
+		for(int i = 0;i < this.arguments.length;i++){
+			int indexKey = this.arguments[i].indexOf("-D");
+			int indexValue = this.arguments[i].indexOf("=");
+			if(indexKey == 0 && indexValue > indexKey && (indexValue + 1) < this.arguments[i].length() ){
+				String key =  this.arguments[i].substring(2, indexValue);
+				String value =  this.arguments[i].substring( indexValue + 1 );
+				if( key != null && key.length() > 0 && value != null && value.length() > 0){
+					System.setProperty( key, value);
+				}
+			}
+		}
+	}
+	
+	private void checkURL(){
+		String propertyUrl = System.getProperty(TG_DEFAULT_URL);
+		if( propertyUrl != null && makeURL( propertyUrl ) ){
+			return;
+		}
+		for(int i = 0;i < this.arguments.length;i++){
+			if(makeURL(this.arguments[i])){
+				return;
+			}
+		}
+	}
+	
+	private boolean makeURL(String spec){
+		try{
+			File file = new File(spec);
+			if(file.exists()){
+				this.url = file.toURI().toURL();
+			}else{
+				this.url = new URL(spec);
+			}
+		}catch(Throwable throwable){
+			this.url = null;
+		}
+		return (this.url != null);
+	}
+	
+	public boolean processAndExit(){
+		return this.processAndExit;
+	}
+	
+	public URL getURL() {
+		return this.url;
+	}
+	
+	protected void print(String s){
+		print(s, true);
+	}
+	
+	protected void print(String s, boolean ignoreNull){
+		if(!ignoreNull || s != null){
+			System.out.println( s );
+		}
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/ConfirmDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/ConfirmDialog.java
new file mode 100644
index 0000000..519ae7f
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/ConfirmDialog.java
@@ -0,0 +1,99 @@
+package org.herac.tuxguitar.app.util;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+
+public class ConfirmDialog {
+	
+	public static int BUTTON_CANCEL = 0x01;
+	public static int BUTTON_YES = 0x02;
+	public static int BUTTON_NO = 0x04;
+	
+	public static int STATUS_YES = 1;
+	public static int STATUS_NO = 2;
+	public static int STATUS_CANCEL = 3;
+	
+	protected Shell dialog;
+	protected int status;
+	private String message;
+	
+	
+	public ConfirmDialog(String message){
+		this.message = message;
+	}
+	
+	public int confirm(int style, int defaultButton){
+		Shell parent = TuxGuitar.instance().getShell();
+		this.dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
+		this.dialog.setLayout(new GridLayout(1, true));
+		
+		//========================================================================
+		Composite labelComposite = new Composite(this.dialog, SWT.NONE);
+		labelComposite.setLayout(new GridLayout(2, false));
+		labelComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
+		
+		Label icon = new Label(labelComposite, SWT.NONE);
+		Label message = new Label(labelComposite, SWT.NONE);
+		icon.setImage(parent.getDisplay().getSystemImage(SWT.ICON_QUESTION));
+		message.setText(this.message);
+		
+		
+		//========================================================================
+		GridLayout buttonsLayout = new GridLayout(0,false);
+		Composite buttonsComposite = new Composite(this.dialog, SWT.NONE);
+		buttonsComposite.setLayout(buttonsLayout);
+		buttonsComposite.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
+		
+		if((style & BUTTON_YES)!= 0){
+			addCloseButton(TuxGuitar.getProperty("yes"),STATUS_YES,buttonsComposite, (defaultButton == BUTTON_YES) );
+			buttonsLayout.numColumns ++;
+		}
+		if((style & BUTTON_NO)!= 0){
+			addCloseButton(TuxGuitar.getProperty("no"),STATUS_NO,buttonsComposite, (defaultButton == BUTTON_NO) );
+			buttonsLayout.numColumns ++;
+		}
+		if((style & BUTTON_CANCEL)!= 0){
+			addCloseButton(TuxGuitar.getProperty("cancel"),STATUS_CANCEL,buttonsComposite, (defaultButton == BUTTON_CANCEL) );
+			buttonsLayout.numColumns ++;
+		}
+		
+		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
+		
+		return this.status;
+	}
+	
+	private void addCloseButton(String text,final int value,Composite parent, boolean defaultButton){
+		Button button = new Button(parent, SWT.PUSH);
+		button.setLayoutData(getButtonData());
+		button.setText(text);
+		button.addSelectionListener(new SelectionAdapter() {
+			public void widgetSelected(SelectionEvent arg0) {
+				ConfirmDialog.this.dialog.dispose();
+				ConfirmDialog.this.status = value;
+			}
+		});
+		if(defaultButton){
+			this.dialog.setDefaultButton(button);
+		}
+	}
+	
+	private GridData getButtonData(){
+		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
+		data.minimumWidth = 80;
+		data.minimumHeight = 25;
+		return data;
+	}
+	
+	public void setDefaultStatus(int status){
+		this.status = status;
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/DialogUtils.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/DialogUtils.java
new file mode 100644
index 0000000..69d4d61
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/DialogUtils.java
@@ -0,0 +1,64 @@
+package org.herac.tuxguitar.app.util;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.action.TGActionLock;
+
+public class DialogUtils {
+	
+	public static final int OPEN_STYLE_WAIT = 0x01;
+	
+	public static final int OPEN_STYLE_PACK = 0x02;
+	
+	public static final int OPEN_STYLE_LAYOUT = 0x04;
+	
+	public static final int OPEN_STYLE_CENTER = 0x08;
+	
+	public static final int OPEN_STYLE_MAXIMIZED = 0x10;
+	
+	public static final Shell newDialog(Display display,int style){
+		return new Shell(display, style);
+	}
+	
+	public static final Shell newDialog(Shell parent,int style){
+		parent.setCursor(parent.getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
+		return new Shell(parent, style);
+	}
+	
+	public static final void openDialog(Shell dialog,int style){
+		DialogUtils.openDialog(dialog,dialog.getParent().getShell(),style);
+	}
+	
+	public static final void openDialog(Shell dialog,Shell parent,int style){
+		Display display = dialog.getDisplay();
+		if((style & OPEN_STYLE_PACK) != 0){
+			dialog.pack();
+		}
+		if((style & OPEN_STYLE_LAYOUT) != 0){
+			dialog.layout();
+		}
+		if((style & OPEN_STYLE_MAXIMIZED) != 0){
+			dialog.setMaximized(true);
+		}
+		else if((style & OPEN_STYLE_CENTER) != 0){
+			int x = Math.max(0,parent.getBounds().x + (parent.getBounds().width - dialog.getSize().x) / 2);
+			int y = Math.max(0,parent.getBounds().y + (parent.getBounds().height - dialog.getSize().y) / 2);
+			dialog.setLocation(x,y);
+		}
+		dialog.open();
+		
+		parent.setCursor(display.getSystemCursor(SWT.CURSOR_ARROW));
+		
+		if((style & OPEN_STYLE_WAIT) != 0){
+			if( (dialog.getStyle() & SWT.APPLICATION_MODAL) == 0 ){
+				TGActionLock.unlock();
+			}
+			while (!display.isDisposed() && !dialog.isDisposed()) {
+				if (!display.readAndDispatch()) {
+					display.sleep();
+				}
+			}
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/FileChooser.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/FileChooser.java
new file mode 100644
index 0000000..2e1a358
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/FileChooser.java
@@ -0,0 +1,166 @@
+/*
+ * Created on 08-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.util;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.io.base.TGFileFormat;
+import org.herac.tuxguitar.io.base.TGFileFormatManager;
+
+/**
+ * @author julian
+ * 
+ * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
+ */
+public class FileChooser {
+	
+	public static final String DEFAULT_OPEN_FILENAME = null;
+	
+	public static final String DEFAULT_SAVE_FILENAME = ("Untitled" + TGFileFormatManager.DEFAULT_EXTENSION);
+	
+	public static TGFileFormat ALL_FORMATS = new TGFileFormat("All Files","*.*");
+	
+	private static FileChooser instance;
+	
+	public static FileChooser instance() {
+		if(instance == null){
+			instance = new FileChooser();
+		}
+		return instance;
+	}
+	
+	private List list(Object o){
+		List list = new ArrayList();
+		list.add(o);
+		return list;
+	}
+	
+	public String open(Shell parent,TGFileFormat format) {
+		return open(parent, list(format));
+	}
+	
+	public String open(Shell parent,List formats) {
+		String currentPath = TuxGuitar.instance().getFileHistory().getCurrentFilePath();
+		String chooserPath = TuxGuitar.instance().getFileHistory().getOpenPath();
+		boolean localFile = TuxGuitar.instance().getFileHistory().isLocalFile();
+		boolean existentFile = (localFile && currentPath != null && chooserPath != null && currentPath.equals(chooserPath));
+		
+		FilterList filter = new FilterList(formats);
+		FileDialog dialog = new FileDialog(parent,SWT.OPEN);
+		dialog.setFileName((existentFile ? getFileName(formats, DEFAULT_OPEN_FILENAME, false) : null ));
+		dialog.setFilterPath(chooserPath);
+		dialog.setFilterNames(filter.getFilterNames());
+		dialog.setFilterExtensions(filter.getFilterExtensions());
+		return openDialog(dialog);
+	}
+	
+	public String save(Shell parent,TGFileFormat format) {
+		return save(parent, list(format));
+	}
+	
+	public String save(Shell parent,List formats) {
+		String chooserPath = TuxGuitar.instance().getFileHistory().getSavePath();
+		
+		FilterList filter = new FilterList(formats);
+		FileDialog dialog = new FileDialog(parent,SWT.SAVE);
+		dialog.setFileName(getFileName(formats, DEFAULT_SAVE_FILENAME, true));
+		dialog.setFilterPath(chooserPath);
+		dialog.setFilterNames(filter.getFilterNames());
+		dialog.setFilterExtensions(filter.getFilterExtensions());
+		return openDialog(dialog);
+	}
+	
+	private String openDialog(FileDialog dialog){
+		String path = dialog.open();
+		if(path != null){
+			File file = new File(path);
+			File parent = file.getParentFile();
+			if( parent != null && parent.exists() && parent.isDirectory() ){
+				TuxGuitar.instance().getFileHistory().setChooserPath( parent.getAbsolutePath() );
+			}
+		}
+		return path;
+	}
+	
+	private String getFileName(List formats, String defaultName, boolean replaceExtension){
+		if(formats == null || formats.isEmpty()){
+			return defaultName;
+		}
+		String file = TuxGuitar.instance().getFileHistory().getCurrentFileName(defaultName);
+		if(file != null && file.length() > 0){
+			int index = file.lastIndexOf('.');
+			if(index > 0){
+				String fileName = file.substring(0,index);
+				String fileExtension = file.substring(index).toLowerCase();
+				Iterator it = formats.iterator();
+				while(it.hasNext()){
+					TGFileFormat format = (TGFileFormat)it.next();
+					if(format.getSupportedFormats() != null){
+						String[] extensions = format.getSupportedFormats().split(TGFileFormat.EXTENSION_SEPARATOR);
+						if(extensions != null && extensions.length > 0){
+							for(int i = 0; i < extensions.length; i ++){
+								if(extensions[i].equals("*" + fileExtension)){
+									return file;
+								}
+							}
+						}
+					}
+				}
+				if( replaceExtension ){
+					TGFileFormat format = (TGFileFormat)formats.get(0);
+					if(format.getSupportedFormats() != null){
+						String[] extensions = format.getSupportedFormats().split(TGFileFormat.EXTENSION_SEPARATOR);
+						if(extensions != null && extensions.length > 0){
+							if(extensions[0].length() > 1){
+								return (fileName + extensions[0].substring(1));
+							}
+						}
+					}
+				}
+			}
+		}
+		return defaultName;
+	}
+	
+	private class FilterList{
+		private String[] filterExtensions;
+		private String[] filterNames;
+		
+		public  FilterList(List formats) {
+			int size = (formats.size() + 2);
+			this.filterNames = new String[size];
+			this.filterExtensions = new String[size];
+			this.filterNames[0] = new String("All Supported Formats");
+			this.filterExtensions[0] = new String();
+			for(int i = 1; i < (size - 1); i ++){
+				TGFileFormat format = (TGFileFormat)formats.get(i-1);
+				this.filterNames[i] = format.getName();
+				this.filterExtensions[i] = format.getSupportedFormats();
+				this.filterExtensions[0] += (i > 1)?";":"";
+				this.filterExtensions[0] += format.getSupportedFormats();
+			}
+			this.filterNames[(size - 1)] = new String("All Files");
+			this.filterExtensions[(size - 1)] = new String("*.*");
+		}
+		
+		public String[] getFilterExtensions() {
+			return this.filterExtensions;
+		}
+		
+		public String[] getFilterNames() {
+			return this.filterNames;
+		}
+		
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/ImageUtils.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/ImageUtils.java
new file mode 100644
index 0000000..5a74b50
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/ImageUtils.java
@@ -0,0 +1,58 @@
+package org.herac.tuxguitar.app.util;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+
+import org.eclipse.swt.graphics.ImageData;
+import org.eclipse.swt.graphics.ImageLoader;
+import org.eclipse.swt.graphics.PaletteData;
+import org.eclipse.swt.graphics.RGB;
+
+public class ImageUtils {
+	/**
+	 * Escribe el ImageData en el outputStream
+	 * @param data
+	 * @param outputStream
+	 * @param format
+	 */
+	public static void writeImage(ImageData data,OutputStream outputStream,int format){
+		ImageLoader loader = new ImageLoader();
+		loader.data = new ImageData[]{data};
+		loader.save(outputStream,format);
+	}
+	
+	/**
+	 * Convierte un ImageData en un array de bytes
+	 * @param data
+	 * @param format
+	 * @return
+	 */
+	public static byte[] imageToByteArray(ImageData data,int format){
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		writeImage(data,out,format);
+		return out.toByteArray();
+	}
+	
+	/**
+	 * Crea una mascara a partir de src.
+	 * 
+	 * @param src
+	 * @param alpha
+	 * @param none
+	 * @return ImageData
+	 */
+	public static ImageData applyMask(ImageData src,RGB alpha,RGB none){
+		ImageData maskData = new ImageData(src.width,src.height,1,new PaletteData(new RGB[]{ none,alpha }  ));
+		for(int x = 0; x< maskData.width; x++) {
+			for(int y = 0; y < maskData.height; y++) {
+				RGB rgb = src.palette.getRGB(src.getPixel(x, y));
+				if(rgb.red == alpha.red && rgb.green == alpha.green && rgb.blue == alpha.blue){
+					maskData.setPixel(x, y, maskData.palette.getPixel(none));
+				}else{
+					maskData.setPixel(x, y, maskData.palette.getPixel(alpha));
+				}
+			}
+		}
+		return maskData;
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/MessageDialog.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/MessageDialog.java
new file mode 100644
index 0000000..b815862
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/MessageDialog.java
@@ -0,0 +1,83 @@
+/*
+ * Created on 20-dic-2005
+ *
+ * TODO To change the template for this generated file go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+package org.herac.tuxguitar.app.util;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.action.TGActionLock;
+import org.herac.tuxguitar.app.helper.SyncThread;
+
+/**
+ * @author julian
+ *
+ * TODO To change the template for this generated type comment go to
+ * Window - Preferences - Java - Code Style - Code Templates
+ */
+public class MessageDialog {
+	
+	private int style;
+	private String name;
+	private String message;
+	
+	protected MessageDialog(String name,String message,int style){
+		this.name = name;
+		this.message = message;
+		this.style = style;
+	}
+	
+	protected void show(Shell parent){
+		MessageBox messageBox = new MessageBox(parent, this.style);
+		messageBox.setText(this.name);
+		messageBox.setMessage(this.message);
+		messageBox.open();
+	}
+	
+	public static void infoMessage(final String title,final String message){
+		MessageDialog.infoMessage(TuxGuitar.instance().getShell(), title, message);
+	}
+	
+	public static void infoMessage(final Shell shell,final String title,final String message){
+		new SyncThread(new Runnable() {
+			public void run() {
+				if(!shell.isDisposed()){
+					new MessageDialog(title,message,SWT.ICON_INFORMATION).show(shell);
+				}
+			}
+		}).start();
+	}
+	
+	public static void errorMessage(final Throwable throwable){
+		MessageDialog.errorMessage(TuxGuitar.instance().getShell(),throwable);
+	}
+	
+	public static void errorMessage(final Shell shell,final Throwable throwable){
+		MessageDialog.errorMessage(shell, (throwable.getMessage() != null ? throwable.getMessage() : throwable.getClass().getName() ));
+		new Thread(new Runnable() {
+			public void run() {
+				throwable.printStackTrace();
+			}
+		}).start();
+	}
+	
+	public static void errorMessage(final Shell shell,final String message){
+		if(!shell.isDisposed()){
+			new SyncThread(new Runnable() {
+				public void run() {
+					if(!shell.isDisposed()){
+						TGActionLock.unlock();
+						TuxGuitar.instance().unlock();
+						shell.setCursor(shell.getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
+						new MessageDialog(TuxGuitar.getProperty("error"),message,SWT.ICON_ERROR).show(shell);
+					}
+				}
+			}).start();
+		}
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/MidiTickUtil.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/MidiTickUtil.java
new file mode 100644
index 0000000..55b9e27
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/MidiTickUtil.java
@@ -0,0 +1,70 @@
+package org.herac.tuxguitar.app.util;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.player.base.MidiRepeatController;
+import org.herac.tuxguitar.song.managers.TGSongManager;
+import org.herac.tuxguitar.song.models.TGMeasureHeader;
+
+public class MidiTickUtil {
+	
+	public static long getStart(long tick){
+		long startPoint = getStartPoint();
+		long start = startPoint;
+		long length = 0;
+		
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		MidiRepeatController controller = new MidiRepeatController(manager.getSong(), getSHeader() , getEHeader() );
+		while(!controller.finished()){
+			TGMeasureHeader header = manager.getSong().getMeasureHeader(controller.getIndex());
+			controller.process();
+			if(controller.shouldPlay()){
+				
+				start += length;
+				length = header.getLength();
+				
+				//verifico si es el compas correcto
+				if(tick >= start && tick < (start + length )){
+					return header.getStart() + (tick - start);
+				}
+			}
+		}
+		return ( tick < startPoint ? startPoint : start );
+	}
+	
+	public static long getTick(long start){
+		long startPoint = getStartPoint();
+		long tick = startPoint;
+		long length = 0;
+		
+		TGSongManager manager = TuxGuitar.instance().getSongManager();
+		MidiRepeatController controller = new MidiRepeatController(manager.getSong(), getSHeader() , getEHeader() );
+		while(!controller.finished()){
+			TGMeasureHeader header = manager.getSong().getMeasureHeader(controller.getIndex());
+			controller.process();
+			if(controller.shouldPlay()){
+				
+				tick += length;
+				length = header.getLength();
+				
+				//verifico si es el compas correcto
+				if(start >= header.getStart() && start < (header.getStart() + length )){
+					return tick;
+				}
+			}
+		}
+		return ( start < startPoint ? startPoint : tick );
+	}
+	
+	private static long getStartPoint(){
+		TuxGuitar.instance().getPlayer().updateLoop( false );
+		return TuxGuitar.instance().getPlayer().getLoopSPosition();
+	}
+	
+	public static int getSHeader() {
+		return TuxGuitar.instance().getPlayer().getLoopSHeader();
+	}
+	
+	public static int getEHeader() {
+		return TuxGuitar.instance().getPlayer().getLoopEHeader();
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/TGFileUtils.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/TGFileUtils.java
new file mode 100644
index 0000000..4a5430b
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/TGFileUtils.java
@@ -0,0 +1,294 @@
+package org.herac.tuxguitar.app.util;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URL;
+import java.net.URLDecoder;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.ImageData;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.util.TGClassLoader;
+import org.herac.tuxguitar.util.TGLibraryLoader;
+import org.herac.tuxguitar.util.TGVersion;
+
+public class TGFileUtils {
+	
+	private static final String TG_CONFIG_PATH = "tuxguitar.config.path";
+	private static final String TG_SHARE_PATH = "tuxguitar.share.path";
+	private static final String TG_USER_SHARE_PATH = "tuxguitar.user-share.path";
+	private static final String TG_CLASS_PATH = "tuxguitar.class.path";
+	private static final String TG_LIBRARY_PATH = "tuxguitar.library.path";
+	private static final String TG_LIBRARY_PREFIX = "tuxguitar.library.prefix";
+	private static final String TG_LIBRARY_EXTENSION = "tuxguitar.library.extension";
+	
+	public static final String PATH_USER_CONFIG = getUserConfigDir();
+	public static final String PATH_USER_PLUGINS_CONFIG = getUserPluginsConfigDir();
+	public static final String PATH_USER_SHARE_PATH = getUserSharedPath();
+	//writable
+	public static final String[] TG_STATIC_SHARED_PATHS = getStaticSharedPaths();
+	
+	public static InputStream getResourceAsStream(String resource) {
+		try {
+			if(TG_STATIC_SHARED_PATHS != null){
+				for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){
+					File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource);
+					if( isExistentAndReadable( file ) ){
+						return new FileInputStream( file );
+					}
+				}
+			}
+			return TGClassLoader.instance().getClassLoader().getResourceAsStream(resource);
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static URL getResourceUrl(String resource) {
+		try {
+			if(TG_STATIC_SHARED_PATHS != null){
+				for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){
+					File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource);
+					if( isExistentAndReadable( file ) ){
+						return file.toURI().toURL();
+					}
+				}
+			}
+			return TGClassLoader.instance().getClassLoader().getResource(resource);
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static Enumeration getResourceUrls(String resource) {
+		try {
+			Vector vector = new Vector();
+			if(TG_STATIC_SHARED_PATHS != null){
+				for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){
+					File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource);
+					if( isExistentAndReadable( file ) ){
+						vector.addElement( file.toURI().toURL() );
+					}
+				}
+			}
+			Enumeration resources = TGClassLoader.instance().getClassLoader().getResources(resource);
+			while( resources.hasMoreElements() ){
+				URL url = (URL)resources.nextElement();
+				if( !vector.contains(url) ){
+					vector.addElement( url );
+				}
+			}
+			return vector.elements();
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	private static String getResourcePath(String resource) {
+		try {
+			if(TG_STATIC_SHARED_PATHS != null){
+				for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){
+					File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource);
+					if( isExistentAndReadable( file ) ){
+						return file.getAbsolutePath() + File.separator;
+					}
+				}
+			}
+			URL url = TGClassLoader.instance().getClassLoader().getResource(resource);
+			if(url != null){
+				return getUrlPath(url);
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static void loadClasspath(){
+		try {
+			Enumeration plugins = getResourceUrls("plugins");
+			while( plugins.hasMoreElements() ){
+				URL url = (URL)plugins.nextElement();
+				TGClassLoader.instance().addPaths(new File(getUrlPath(url)));
+			}
+			
+			String custompath = System.getProperty(TG_CLASS_PATH);
+			if(custompath != null){
+				String[] paths = custompath.split(File.pathSeparator);
+				for(int i = 0; i < paths.length; i++){
+					TGClassLoader.instance().addPaths(new File(paths[i]));
+				}
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+	}
+	
+	public static void loadLibraries(){
+		String libraryPath = System.getProperty(TG_LIBRARY_PATH);
+		if(libraryPath != null){
+			String[] libraryPaths = libraryPath.split(File.pathSeparator);
+			String libraryPrefix = System.getProperty(TG_LIBRARY_PREFIX);
+			String libraryExtension = System.getProperty(TG_LIBRARY_EXTENSION);
+			for(int i = 0; i < libraryPaths.length; i++){
+				TGLibraryLoader.instance().loadLibraries(new File(libraryPaths[i]),libraryPrefix,libraryExtension);
+			}
+		}
+	}
+	
+	public static String[] getFileNames( String resource ){
+		try {
+			String path = getResourcePath(resource);
+			if( path != null ){
+				File file = new File( path );
+				if( isExistentAndReadable( file ) && isDirectoryAndReadable( file )){
+					return file.list();
+				}
+			}
+			InputStream stream = getResourceAsStream(resource + "/list.properties" );
+			if( stream != null ){
+				BufferedReader reader = new BufferedReader( new InputStreamReader(stream) );
+				List fileNameList = new ArrayList();
+				String fileName = null;
+				while( (fileName = reader.readLine()) != null ){
+					fileNameList.add( fileName );
+				}
+				String[] fileNames = new String[ fileNameList.size() ];
+				for (int i = 0 ; i < fileNames.length ; i ++ ){
+					fileNames[ i ] = (String)fileNameList.get( i );
+				}
+				return fileNames;
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return null;
+	}
+	
+	public static Image loadImage(String name){
+		return loadImage(TuxGuitar.instance().getConfig().getStringValue(TGConfigKeys.SKIN),name);
+	}
+	
+	public static Image loadImage(String skin,String name){
+		try{
+			InputStream stream = getResourceAsStream("skins/" + skin + "/" + name);
+			if(stream != null){			
+				return new Image(TuxGuitar.instance().getDisplay(),new ImageData(stream));
+			}
+			System.err.println(name + ": not found");
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return new Image(TuxGuitar.instance().getDisplay(),16,16);
+	}
+	
+	public static boolean isLocalFile(URL url){
+		try {
+			if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){
+				return true;
+			}
+		}catch(Throwable throwable){
+			throwable.printStackTrace();
+		}
+		return false;
+	}
+	
+	private static String getDefaultUserAppDir(){
+		return ((System.getProperty("user.home") + File.separator + ".tuxguitar-" + TGVersion.CURRENT.getVersion()));
+	}
+	
+	private static String getUserConfigDir(){
+		// Look for the system property
+		String configPath = System.getProperty(TG_CONFIG_PATH);
+		
+		// Default System User Home
+		if(configPath == null){
+			configPath = (getDefaultUserAppDir() + File.separator + "config");
+		}
+		
+		// Check if the path exists
+		File file = new File(configPath);
+		if(!isExistentAndReadable( file )){
+			tryCreateDirectory( file );
+		}
+		return configPath;
+	}
+	
+	private static String getUserPluginsConfigDir(){
+		String configPluginsPath = (getUserConfigDir() + File.separator + "plugins");
+		
+		//Check if the path exists
+		File file = new File(configPluginsPath);
+		if(!isExistentAndReadable( file )){
+			tryCreateDirectory( file );
+		}
+		
+		return configPluginsPath;
+	}
+	
+	private static String getUserSharedPath(){
+		// Look for the system property
+		String userSharePath = System.getProperty(TG_USER_SHARE_PATH);
+		
+		// Use configuration path as default.
+		if( userSharePath == null){
+			userSharePath = (getDefaultUserAppDir() + File.separator + "cache");
+		}
+		
+		// Check if the path exists
+		File file = new File(userSharePath);
+		if(!isExistentAndReadable( file )){
+			tryCreateDirectory( file );
+		}
+		return userSharePath;
+	}
+	
+	private static String[] getStaticSharedPaths(){
+		String staticSharedPaths = new String(PATH_USER_SHARE_PATH);
+		String staticSharedPathsProperty = System.getProperty(TG_SHARE_PATH);
+		if( staticSharedPathsProperty != null ){
+			staticSharedPaths += (File.pathSeparator + staticSharedPathsProperty);
+		}
+		return staticSharedPaths.split(File.pathSeparator);
+	}
+	
+	private static String getUrlPath( URL url ) throws UnsupportedEncodingException{
+		return (new File(URLDecoder.decode(url.getPath(), "UTF-8")).getAbsolutePath() + File.separator);
+	}
+	
+	private static boolean isExistentAndReadable( File file ){
+		try{
+			return file.exists();
+		}catch(SecurityException se){
+			return false;
+		}
+	}
+	
+	private static boolean isDirectoryAndReadable( File file ){
+		try{
+			return file.isDirectory();
+		}catch(SecurityException se){
+			return false;
+		}
+	}
+	
+	private static boolean tryCreateDirectory( File file ){
+		try{
+			return file.mkdirs();
+		}catch(SecurityException se){
+			return false;
+		}
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/TGMusicKeyUtils.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/TGMusicKeyUtils.java
new file mode 100644
index 0000000..c9dfe19
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/TGMusicKeyUtils.java
@@ -0,0 +1,102 @@
+package org.herac.tuxguitar.app.util;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.language.LanguageLoader;
+
+public class TGMusicKeyUtils {
+	
+	public static final String PREFIX_CHORD = "chord";
+	
+	public static final String PREFIX_SCALE = "scale";
+	
+	public static final String PREFIX_TUNING = "tuning";
+	
+	public static final String PREFIX_FRETBOARD = "fretboard";
+	
+	public static final String PREFIX_MATRIX = "matrix";
+	
+	private static final String[][] DEFAULT_KEY_NAMES = new String[][]{
+		{"C","C#","Cb"},
+		{"D","D#","Db"},
+		{"E","E#","Eb"},
+		{"F","F#","Fb"},
+		{"G","G#","Gb"},
+		{"A","A#","Ab"},
+		{"B","B#","Bb"}
+	};
+	
+	public static String[] getSharpKeyNames(String prefix){
+		return new TGMusicKeyNames(true,prefix).getNames();
+	}
+	
+	public static String[] getFlatKeyNames(String prefix){
+		return new TGMusicKeyNames(false,prefix).getNames();
+	}
+	
+	protected static void loadKeyNames(String[] names,String prefix,boolean sharp){
+		if(sharp){
+			loadSharpKeyNames(names, prefix);
+		}else{
+			loadFlatKeyNames(names, prefix);
+		}
+	}
+	
+	private static void loadSharpKeyNames(String[] names,String prefix){
+		names[0] = getName(prefix,0,0);
+		names[1] = getName(prefix,0,1);
+		names[2] = getName(prefix,1,0);
+		names[3] = getName(prefix,1,1);
+		names[4] = getName(prefix,2,0);
+		names[5] = getName(prefix,3,0);
+		names[6] = getName(prefix,3,1);
+		names[7] = getName(prefix,4,0);
+		names[8] = getName(prefix,4,1);
+		names[9] = getName(prefix,5,0);
+		names[10] = getName(prefix,5,1);
+		names[11] = getName(prefix,6,0);
+	}
+	
+	private static void loadFlatKeyNames(String[] names,String prefix){
+		names[0] = getName(prefix,0,0);
+		names[1] = getName(prefix,1,2);
+		names[2] = getName(prefix,1,0);
+		names[3] = getName(prefix,2,2);
+		names[4] = getName(prefix,2,0);
+		names[5] = getName(prefix,3,0);
+		names[6] = getName(prefix,4,2);
+		names[7] = getName(prefix,4,0);
+		names[8] = getName(prefix,5,2);
+		names[9] = getName(prefix,5,0);
+		names[10] = getName(prefix,6,2);
+		names[11] = getName(prefix,6,0);
+	}
+	
+	private static String getName(String prefix,int key,int signature){
+		String resource = ("key." + prefix + "." + key + "." + signature);
+		return TuxGuitar.instance().getLanguageManager().getProperty(resource,DEFAULT_KEY_NAMES[key][signature]);
+	}
+}
+
+class TGMusicKeyNames implements LanguageLoader{
+	
+	private boolean sharp;
+	private String prefix;
+	private String[] names;
+	
+	public TGMusicKeyNames(boolean sharp,String prefix){
+		this.sharp = sharp;
+		this.prefix = prefix;
+		this.names = new String[12];
+		this.loadProperties();
+		
+		TuxGuitar.instance().getLanguageManager().addLoader(this);
+	}
+	
+	public String[] getNames(){
+		return this.names;
+	}
+	
+	public void loadProperties() {
+		TGMusicKeyUtils.loadKeyNames(this.names, this.prefix, this.sharp);
+	}
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/TGSplash.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/TGSplash.java
new file mode 100644
index 0000000..f8a9f83
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/TGSplash.java
@@ -0,0 +1,72 @@
+package org.herac.tuxguitar.app.util;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Shell;
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.editors.TGImageImpl;
+import org.herac.tuxguitar.app.editors.TGPainterImpl;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.graphics.TGPainter;
+
+public class TGSplash {
+	
+	private static TGSplash instance;
+	
+	private Shell shell;
+	
+	private TGSplash(){
+		super();
+	}
+	
+	public static TGSplash instance(){
+		if(instance == null){
+			instance = new TGSplash();
+		}
+		return instance;
+	}
+	
+	public void init() {
+		if(TuxGuitar.instance().getConfig().getBooleanValue(TGConfigKeys.SHOW_SPLASH)){
+			final Image image = TuxGuitar.instance().getIconManager().getAppSplash();
+			
+			this.shell = new Shell(TuxGuitar.instance().getDisplay(), SWT.NO_TRIM | SWT.NO_BACKGROUND);
+			this.shell.setLayout(new FillLayout());
+			this.shell.setBounds(getBounds(image));
+			this.shell.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
+			this.shell.setText(TuxGuitar.APPLICATION_NAME);
+			this.shell.addPaintListener(new PaintListener() {
+				public void paintControl(PaintEvent e) {
+					TGPainter painter = new TGPainterImpl(e.gc);
+					painter.drawImage(new TGImageImpl(image), 0, 0);
+				}
+			});
+			this.shell.open();
+			this.shell.redraw();
+			this.shell.update();
+		}
+	}
+	
+	public void finish(){
+		if(this.shell != null && !this.shell.isDisposed()){
+			this.shell.close();
+			this.shell.dispose();
+		}
+		instance = null;
+	}
+	
+	private Rectangle getBounds(Image image){
+		Rectangle iBounds = image.getBounds();
+		Rectangle mBounds = this.shell.getMonitor().getClientArea();
+		int x = ( ((mBounds.x + mBounds.width) / 2) - (iBounds.width / 2) );
+		int y = ( ((mBounds.y + mBounds.height) / 2) - (iBounds.height / 2) );
+		int width = iBounds.width;
+		int height = iBounds.height;
+		return new Rectangle( x , y , width , height);
+	}
+	
+}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/app/util/WindowTitleUtil.java b/TuxGuitar/src/org/herac/tuxguitar/app/util/WindowTitleUtil.java
new file mode 100644
index 0000000..0417b99
--- /dev/null
+++ b/TuxGuitar/src/org/herac/tuxguitar/app/util/WindowTitleUtil.java
@@ -0,0 +1,81 @@
+package org.herac.tuxguitar.app.util;
+
+import org.herac.tuxguitar.app.TuxGuitar;
+import org.herac.tuxguitar.app.system.config.TGConfigKeys;
+import org.herac.tuxguitar.util.TGVersion;
+
+public class WindowTitleUtil {
+	private static final String VAR_START = "${";
+	private static final String VAR_END = "}";
+	
+	public static final String VAR_APP_NAME = "appname";
+	public static final String VAR_APP_VERSION = "appversion";
+	public static final String VAR_FILE_NAME = "filename";
+	public static final String VAR_FILE_PATH = "filepath";
+	public static final String VAR_SONG_NAME = "songname";
+	public static final String VAR_SONG_AUTHOR = "songauthor";
+	public static final String VAR_SONG_ALBUM = "songalbum";
+	public static final String VAR_SONG_ARTIST = "songartist";
+	
+	public static String parseTitle(){
+		String title = parseString(TuxGuitar.instance().getConfig().getStringValue(TGConfigKeys.WINDOW_TITLE));
+		return ((title == null)?TuxGuitar.APPLICATION_NAME:title);
+	}
+	
+	private static String parseString(String src){
+		try{
+			if(src != null){
+				String result = new String();
+				for(int pos = 0; pos < src.length(); pos ++){
+					int startIndex = src.indexOf(VAR_START, pos );
+					int endIndex = startIndex;
+					if(startIndex >= 0){
+						endIndex = src.indexOf(VAR_END,(startIndex +  VAR_START.length()));
+					}
+					if((startIndex >= 0) && endIndex > (startIndex + VAR_START.length()) ){
+						if(startIndex > pos){
+							result += src.substring(pos,startIndex );
+						}
+						String var = src.substring(startIndex,(endIndex + 1));
+						result += parseVar(var);
+						pos = endIndex;
+					}else{
+						result += src.substring(pos,src.length() );
+						break;
+					}
+				}
+				return result;
+			}
+		}catch(Exception e){
+			e.printStackTrace();
+		}
+		return null;
+	}
+	
+	private static String parseVar(String var){
+		String varName = var.substring((VAR_START.length()),(var.length() - 1));
+		String varValue = var;
+		if(varName.equals(VAR_APP_NAME)){
+			varValue = TuxGuitar.APPLICATION_NAME;
+		}else if(varName.equals(VAR_APP_VERSION)){
+			varValue = TGVersion.CURRENT.getVersion();
+		}else if(varName.equals(VAR_FILE_NAME)){
+			varValue = TuxGuitar.instance().getFileHistory().getCurrentFileName(FileChooser.DEFAULT_SAVE_FILENAME);
+		}else if(varName.equals(VAR_FILE_PATH)){
+			varValue = TuxGuitar.instance().getFileHistory().getCurrentFilePath();
+		}else if(varName.equals(VAR_SONG_NAME)){
+			varValue = TuxGuitar.instance().getSongManager().getSong().getName();
+		}else if(varName.equals(VAR_SONG_AUTHOR)){
+			varValue = TuxGuitar.instance().getSongManager().getSong().getAuthor();
+		}else if(varName.equals(VAR_SONG_ALBUM)){
+			varValue = TuxGuitar.instance().getSongManager().getSong().getAlbum();
+		}else if(varName.equals(VAR_SONG_ARTIST)){
+			varValue = TuxGuitar.instance().getSongManager().getSong().getArtist();
+		}
+		return varValue;
+	}
+	
+	public static String getVar(String varName){
+		return (VAR_START + varName + VAR_END);
+	}
+}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/TGMain.java b/TuxGuitar/src/org/herac/tuxguitar/gui/TGMain.java
deleted file mode 100644
index d07ba5d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/TGMain.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.herac.tuxguitar.gui;
-
-public class TGMain {
-	
-	public static void main(String[] args){
-		TuxGuitar.instance().displayGUI(args);
-		System.exit(0);
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/TuxGuitar.java b/TuxGuitar/src/org/herac/tuxguitar/gui/TuxGuitar.java
deleted file mode 100644
index b1cd56c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/TuxGuitar.java
+++ /dev/null
@@ -1,812 +0,0 @@
-/*
- * Created on 25-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui;
-
-import java.net.URL;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseTrackAdapter;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Sash;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.actions.ActionManager;
-import org.herac.tuxguitar.gui.actions.file.FileActionUtils;
-import org.herac.tuxguitar.gui.actions.system.DisposeAction;
-import org.herac.tuxguitar.gui.editors.EditorCache;
-import org.herac.tuxguitar.gui.editors.FretBoardEditor;
-import org.herac.tuxguitar.gui.editors.PianoEditor;
-import org.herac.tuxguitar.gui.editors.TGEditorManager;
-import org.herac.tuxguitar.gui.editors.TGRedrawListener;
-import org.herac.tuxguitar.gui.editors.TGUpdateListener;
-import org.herac.tuxguitar.gui.editors.TablatureEditor;
-import org.herac.tuxguitar.gui.editors.chord.CustomChordManager;
-import org.herac.tuxguitar.gui.editors.lyric.LyricEditor;
-import org.herac.tuxguitar.gui.editors.matrix.MatrixEditor;
-import org.herac.tuxguitar.gui.editors.tab.TGFactoryImpl;
-import org.herac.tuxguitar.gui.helper.FileHistory;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.items.ItemManager;
-import org.herac.tuxguitar.gui.marker.MarkerList;
-import org.herac.tuxguitar.gui.mixer.TGMixer;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.system.config.TGConfigManagerImpl;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.icons.IconManager;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingActionManager;
-import org.herac.tuxguitar.gui.system.language.LanguageManager;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginManager;
-import org.herac.tuxguitar.gui.table.TGTableViewer;
-import org.herac.tuxguitar.gui.tools.browser.dialog.TGBrowserDialog;
-import org.herac.tuxguitar.gui.tools.scale.ScaleManager;
-import org.herac.tuxguitar.gui.transport.TGTransport;
-import org.herac.tuxguitar.gui.transport.TGTransportListener;
-import org.herac.tuxguitar.gui.undo.UndoableManager;
-import org.herac.tuxguitar.gui.util.ArgumentParser;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-import org.herac.tuxguitar.gui.util.TGSplash;
-import org.herac.tuxguitar.gui.util.WindowTitleUtil;
-import org.herac.tuxguitar.player.base.MidiPlayer;
-import org.herac.tuxguitar.player.base.MidiPlayerException;
-import org.herac.tuxguitar.player.impl.sequencer.MidiSequencerProviderImpl;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.util.TGLock;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class TuxGuitar {
-	
-	public static final String APPLICATION_NAME = "TuxGuitar";
-	
-	public static final int MARGIN_WIDTH = 5;
-	
-	private static TuxGuitar instance;
-	
-	private boolean initialized;
-	
-	private TGLock lock;
-	
-	private Display display;
-	
-	private Shell shell;
-	
-	private MidiPlayer player;
-	
-	private TGSongManager songManager;
-	
-	private TGConfigManager configManager;
-	
-	private LanguageManager languageManager;
-	
-	private KeyBindingActionManager keyBindingManager;
-	
-	private IconManager iconManager;
-	
-	private EditorCache editorCache;
-	
-	private TablatureEditor tablatureEditor;
-	
-	private TGTableViewer table;
-	
-	private TGMixer songMixer;
-	
-	private TGTransport songTransport;
-	
-	private FretBoardEditor fretBoardEditor;
-	
-	private PianoEditor pianoEditor;
-	
-	private MatrixEditor matrixEditor;
-	
-	private LyricEditor lyricEditor;
-	
-	private TGEditorManager editorManager;
-	
-	private TGBrowserDialog browser;
-	
-	private UndoableManager undoableManager;
-	
-	private ScaleManager scaleManager;
-	
-	private ActionManager actionManager;
-	
-	private ItemManager itemManager;
-	
-	private CustomChordManager customChordManager;
-	
-	private FileHistory fileHistory;
-	
-	private TGPluginManager pluginManager;
-	
-	protected Sash sash;
-	
-	protected Composite sashComposite;
-	
-	public TuxGuitar() {
-		this.lock = new TGLock();
-		this.initialized = false;
-	}
-	
-	public static TuxGuitar instance() {
-		if (instance == null) {
-			synchronized (TuxGuitar.class) {
-				instance = new TuxGuitar();
-			}
-		}
-		return instance;
-	}
-	
-	private void initSynchronizer(){
-		TGSynchronizer.instance().setController(new TGSynchronizer.TGSynchronizerController() {
-			public void execute(final TGSynchronizer.TGSynchronizerTask task) {
-				final Display display = getDisplay();
-				if(display != null && !display.isDisposed()){
-					display.syncExec(new Runnable() {
-						public void run() {
-							task.run();
-						}
-					});
-				}
-			}
-			
-			public void executeLater(final TGSynchronizer.TGSynchronizerTask task) {
-				final Display display = getDisplay();
-				if(display != null && !display.isDisposed()){
-					display.asyncExec(new Runnable() {
-						public void run() {
-							task.run();
-						}
-					});
-				}
-			}
-		});
-	}
-	
-	public void displayGUI(String[] args) {
-		//checkeo los argumentos
-		ArgumentParser argumentParser = new ArgumentParser(args);
-		if(argumentParser.processAndExit()){
-			return;
-		}
-		
-		// Priority 1 ----------------------------------------------//
-		TGFileUtils.loadLibraries();
-		TGFileUtils.loadClasspath();
-		
-		// Priority 2 ----------------------------------------------//
-		Display.setAppName(APPLICATION_NAME);
-		
-		this.display = new Display();
-		this.initSynchronizer();
-		
-		TGSplash.instance().init();
-		
-		this.shell = new Shell(getDisplay());
-		this.shell.setLayout(getShellLayout());
-		this.shell.setImage(getIconManager().getAppIcon());
-		
-		this.createComposites(getShell());
-		
-		// Priority 3 ----------------------------------------------//
-		this.getPluginManager().openPlugins();
-		this.restoreControlsConfig();
-		this.restorePlayerConfig();
-		this.updateCache(true);
-		this.showTitle();
-		
-		TGSplash.instance().finish();
-		
-		// Priority 4 ----------------------------------------------//
-		this.shell.addShellListener(getAction(DisposeAction.NAME));
-		this.shell.open();
-		this.startSong(argumentParser);
-		this.setInitialized( true );
-		while (!getDisplay().isDisposed() && !getShell().isDisposed()) {
-			if (!getDisplay().readAndDispatch()) {
-				getDisplay().sleep();
-			}
-		}
-		getDisplay().dispose();
-	}
-	
-	private FormLayout getShellLayout(){
-		FormLayout layout = new FormLayout();
-		layout.marginWidth = MARGIN_WIDTH;
-		layout.marginHeight = MARGIN_WIDTH;
-		return layout;
-	}
-	
-	private void startSong(final ArgumentParser parser){
-		final URL url = parser.getURL();
-		if(url != null){
-			ActionLock.lock();
-			new SyncThread(new Runnable() {
-				public void run() {
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-					new Thread(new Runnable() {
-						public void run() {
-							if(!TuxGuitar.isDisposed()){
-								FileActionUtils.open(url);
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								ActionLock.unlock();
-							}
-						}
-					}).start();
-				}
-			}).start();
-		}
-	}
-	
-	public void createComposites(Composite composite) {
-		FormData data = new FormData();
-		data.left = new FormAttachment(0,0);
-		data.right = new FormAttachment(100,0);
-		data.top = new FormAttachment(getItemManager().getCoolbar(),MARGIN_WIDTH);
-		data.bottom = new FormAttachment(100,0);
-		this.sashComposite = new Composite(composite,SWT.NONE);
-		this.sashComposite.setLayout(new FormLayout());
-		this.sashComposite.setLayoutData(data);
-		
-		data = new FormData();
-		data.left = new FormAttachment(0,0);
-		data.right = new FormAttachment(100,0);
-		data.bottom = new FormAttachment(100,-150);
-		data.height = MARGIN_WIDTH;
-		this.sash = new Sash(this.sashComposite, SWT.HORIZONTAL);
-		this.sash.setLayoutData(data);
-		
-		data = new FormData();
-		data.left = new FormAttachment(0,0);
-		data.right = new FormAttachment(100,0);
-		data.top = new FormAttachment(0,0);
-		data.bottom = new FormAttachment(this.sash, 0);
-		getTablatureEditor().showTablature(this.sashComposite);
-		getTablatureEditor().getTablature().setLayoutData(data);
-		
-		data = new FormData();
-		data.left = new FormAttachment(0,0);
-		data.right = new FormAttachment(100,0);
-		data.top = new FormAttachment(this.sash,0);
-		data.bottom = new FormAttachment(100,0);
-		getTable().init(this.sashComposite);
-		getTable().getComposite().setLayoutData(data);
-		
-		data = new FormData();
-		data.left = new FormAttachment(0,0);
-		data.right = new FormAttachment(100,0);
-		data.top = new FormAttachment(this.sashComposite,0);
-		data.bottom = new FormAttachment(100,0);
-		
-		Composite footer = new Composite(composite,SWT.NONE);
-		footer.setLayout(new FormLayout());
-		footer.setLayoutData(data);
-		getFretBoardEditor().showFretBoard(footer);
-		
-		this.sash.addMouseListener(new MouseAdapter() {
-			public void mouseUp(MouseEvent e) {
-				TuxGuitar.this.sashComposite.layout(true,true);
-			}
-		});
-		this.sash.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				int maximumHeight = (TuxGuitar.this.sashComposite.getBounds().height - TuxGuitar.this.sash.getBounds().height);
-				int height = (maximumHeight - event.y);
-				height = Math.max(height,0);
-				height = Math.min(height,maximumHeight);
-				((FormData) TuxGuitar.this.sash.getLayoutData()).bottom = new FormAttachment(100, -height);
-			}
-		});
-		this.sash.addMouseTrackListener(new MouseTrackAdapter() {
-			public void mouseEnter(MouseEvent e) {
-				TuxGuitar.this.sash.setCursor( getDisplay().getSystemCursor( SWT.CURSOR_SIZENS ) );
-			}
-		});
-		this.sashComposite.addListener(SWT.Resize, new Listener() {
-			public void handleEvent(Event arg0) {
-				FormData data = ((FormData) TuxGuitar.this.sash.getLayoutData());
-				int height = -data.bottom.offset;
-				int maximumHeight = (TuxGuitar.this.sashComposite.getBounds().height - TuxGuitar.this.sash.getBounds().height);
-				if(height > maximumHeight){
-					data.bottom = new FormAttachment(100, -maximumHeight);
-				}
-			}
-		});
-	}
-	
-	public void restoreControlsConfig(){
-		final TGConfigManager config = getConfig();
-		
-		//---Main Shell---
-		boolean maximized = config.getBooleanConfigValue(TGConfigKeys.MAXIMIZED);
-		getShell().setMaximized(maximized);
-		if(!maximized){
-			int width = config.getIntConfigValue(TGConfigKeys.WIDTH);
-			int height = config.getIntConfigValue(TGConfigKeys.HEIGHT);
-			if(width > 0 && height > 0){
-				getShell().setSize(width,height);
-			}
-		}
-		getShell().setMinimumSize(640,480);
-		//---Fretboard---
-		if(config.getBooleanConfigValue(TGConfigKeys.SHOW_FRETBOARD)){
-			getFretBoardEditor().showFretBoard();
-		}else{
-			getFretBoardEditor().hideFretBoard();
-		}
-		//---Mixer---
-		if(config.getBooleanConfigValue(TGConfigKeys.SHOW_MIXER)){
-			new SyncThread(new Runnable() {
-				public void run() {
-					getMixer().show();
-				}
-			}).start();
-		}
-		//---Transport---
-		if(config.getBooleanConfigValue(TGConfigKeys.SHOW_TRANSPORT)){
-			new SyncThread(new Runnable() {
-				public void run() {
-					getTransport().show();
-				}
-			}).start();
-		}
-		//---Matrix---
-		if(config.getBooleanConfigValue(TGConfigKeys.SHOW_MATRIX)){
-			new SyncThread(new Runnable() {
-				public void run() {
-					getMatrixEditor().show();
-				}
-			}).start();
-		}
-		//---Piano---
-		if(config.getBooleanConfigValue(TGConfigKeys.SHOW_PIANO)){
-			new SyncThread(new Runnable() {
-				public void run() {
-					getPianoEditor().show();
-				}
-			}).start();
-		}
-		//---Markers---
-		if(config.getBooleanConfigValue(TGConfigKeys.SHOW_MARKERS)){
-			new SyncThread(new Runnable() {
-				public void run() {
-					MarkerList.instance().show();
-				}
-			}).start();
-		}
-	}
-	
-	public void setTableHeight(int value){
-		int offset = ((FormData) getTable().getComposite().getLayoutData()).top.offset;
-		int sashHeight = this.sash.getBounds().height;
-		int maximumHeight = (this.sashComposite.getBounds().height - sashHeight);
-		int height = (value + offset);
-		height = Math.max( height,0);
-		height = Math.min( height,maximumHeight);
-		((FormData) TuxGuitar.this.sash.getLayoutData()).bottom = new FormAttachment(100, -height);
-		this.sashComposite.layout(true,true);
-	}
-	
-	public void updateShellFooter(int offset,int minimumWith,int minimumHeight){
-		FormData data = ((FormData)this.sashComposite.getLayoutData());
-		data.bottom.offset = -offset;
-		getShell().setMinimumSize(Math.max(640,minimumWith),Math.max(480,minimumHeight));
-		getShell().layout(true,true);
-		getShell().redraw();
-	}
-	
-	public TGTableViewer getTable(){
-		if(this.table == null){
-			this.table = new TGTableViewer();
-		}
-		return this.table;
-	}
-	
-	public TablatureEditor getTablatureEditor(){
-		if(this.tablatureEditor == null){
-			this.tablatureEditor = new TablatureEditor();
-		}
-		return this.tablatureEditor;
-	}
-	
-	public FretBoardEditor getFretBoardEditor(){
-		if(this.fretBoardEditor == null){
-			this.fretBoardEditor = new FretBoardEditor();
-		}
-		return this.fretBoardEditor;
-	}
-	
-	public PianoEditor getPianoEditor(){
-		if(this.pianoEditor == null){
-			this.pianoEditor = new PianoEditor();
-		}
-		return this.pianoEditor;
-	}
-	
-	public MatrixEditor getMatrixEditor(){
-		if(this.matrixEditor == null){
-			this.matrixEditor = new MatrixEditor();
-		}
-		return this.matrixEditor;
-	}
-	
-	public TGSongManager getSongManager(){
-		if(this.songManager == null){
-			this.songManager = new TGSongManager(new TGFactoryImpl());
-			this.songManager.setSong(this.songManager.newSong());
-		}
-		return this.songManager;
-	}
-	
-	public TGMixer getMixer(){
-		if(this.songMixer == null){
-			this.songMixer = new TGMixer();
-		}
-		return this.songMixer;
-	}
-	
-	public TGTransport getTransport(){
-		if(this.songTransport == null){
-			this.songTransport = new TGTransport();
-		}
-		return this.songTransport;
-	}
-	
-	public EditorCache getEditorCache(){
-		if(this.editorCache == null){
-			this.editorCache = new EditorCache();
-		}
-		return this.editorCache;
-	}
-	
-	public TGEditorManager getEditorManager(){
-		if(this.editorManager == null){
-			this.editorManager = new TGEditorManager();
-		}
-		return this.editorManager;
-	}
-	
-	public LyricEditor getLyricEditor(){
-		if(this.lyricEditor == null){
-			this.lyricEditor = new LyricEditor();
-		}
-		return this.lyricEditor;
-	}
-	
-	public TGBrowserDialog getBrowser(){
-		if(this.browser == null){
-			this.browser = new TGBrowserDialog();
-		}
-		return this.browser;
-	}
-	
-	public UndoableManager getUndoableManager(){
-		if(this.undoableManager == null){
-			this.undoableManager = new UndoableManager();
-		}
-		return this.undoableManager;
-	}
-	
-	public ScaleManager getScaleManager(){
-		if(this.scaleManager == null){
-			this.scaleManager = new ScaleManager();
-		}
-		return this.scaleManager;
-	}
-	
-	public TGPluginManager getPluginManager(){
-		if(this.pluginManager == null){
-			this.pluginManager = new TGPluginManager();
-		}
-		return this.pluginManager;
-	}
-	
-	public IconManager getIconManager(){
-		if(this.iconManager == null){
-			this.iconManager = new IconManager();
-			this.iconManager.addLoader( new IconLoader() {
-				public void loadIcons() {
-					getShell().setImage(getIconManager().getAppIcon());
-					getShell().layout(true);
-				}
-			});
-		}
-		return this.iconManager;
-	}
-	
-	public CustomChordManager getCustomChordManager(){
-		if(this.customChordManager == null){
-			this.customChordManager = new CustomChordManager();
-		}
-		return this.customChordManager;
-	}
-	
-	public ItemManager getItemManager() {
-		if(this.itemManager == null){
-			this.itemManager = new ItemManager();
-		}
-		return this.itemManager;
-	}
-	
-	public ActionManager getActionManager() {
-		if(this.actionManager == null){
-			this.actionManager = new ActionManager();
-		}
-		return this.actionManager;
-	}
-	
-	public LanguageManager getLanguageManager() {
-		if(this.languageManager == null){
-			this.languageManager = new LanguageManager();
-			this.loadLanguage();
-		}
-		return this.languageManager;
-	}
-	
-	public TGConfigManager getConfig(){
-		if(this.configManager == null){
-			this.configManager = new TGConfigManagerImpl();
-			this.configManager.init();
-		}
-		return this.configManager;
-	}
-	
-	public KeyBindingActionManager getkeyBindingManager(){
-		if(this.keyBindingManager == null){
-			this.keyBindingManager = new KeyBindingActionManager();
-		}
-		return this.keyBindingManager;
-	}
-	
-	public FileHistory getFileHistory(){
-		if(this.fileHistory == null){
-			this.fileHistory = new FileHistory();
-		}
-		return this.fileHistory;
-	}
-	
-	public MidiPlayer getPlayer(){
-		if(this.player == null){
-			this.player = new MidiPlayer();
-			this.player.init(getSongManager());
-			this.player.addListener( new TGTransportListener() );
-			try {
-				getPlayer().addSequencerProvider(new MidiSequencerProviderImpl(), false);
-			} catch (MidiPlayerException e) {
-				e.printStackTrace();
-			}
-		}
-		return this.player;
-	}
-	
-	public void restorePlayerConfig(){
-		//check midi sequencer
-		getPlayer().openSequencer(getConfig().getStringConfigValue(TGConfigKeys.MIDI_SEQUENCER), true);
-		
-		//check midi port
-		getPlayer().openOutputPort(getConfig().getStringConfigValue(TGConfigKeys.MIDI_PORT), true);
-	}
-	
-	public void showTitle(){
-		new SyncThread(new Runnable() {
-			public void run() {
-				if(!isDisposed()){
-					getShell().setText(WindowTitleUtil.parseTitle());
-				}
-			}
-		}).start();
-	}
-	
-	public void updateCache(final boolean updateItems){
-		if(!this.isLocked()){
-			this.lock();
-			this.getEditorCache().updateEditMode();
-			this.unlock();
-			new SyncThread(new Runnable() {
-				public void run() {
-					if(!isDisposed() && !isLocked()){
-						if(updateItems){
-							lock();
-							getEditorManager().doUpdate( TGUpdateListener.SELECTION );
-							unlock();
-						}
-						redraw();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	protected void redraw(){
-		if(!isDisposed() && !this.isLocked()){
-			this.lock();
-			this.getEditorManager().doRedraw( TGRedrawListener.NORMAL );
-			this.unlock();
-		}
-	}
-	
-	public void redrawPlayingMode(){
-		if(!isDisposed() && !this.isLocked()){
-			this.lock();
-			this.getEditorCache().updatePlayMode();
-			this.getEditorManager().doRedraw( this.getEditorCache().shouldRedraw() ? TGRedrawListener.PLAYING_NEW_BEAT : TGRedrawListener.PLAYING_THREAD );
-			this.unlock();
-		}
-	}
-	
-	public void showExternalBeat( TGBeat beat ){
-		if(!isDisposed() && !this.isLocked()){
-			this.lock();
-			this.getEditorManager().showExternalBeat(beat);
-			this.updateCache(true);
-			this.unlock();
-		}
-	}
-	
-	public void hideExternalBeat(){
-		if(!isDisposed() && !this.isLocked()){
-			this.lock();
-			this.getEditorManager().hideExternalBeat();
-			this.updateCache(true);
-			this.unlock();
-		}
-	}
-	
-	public Display getDisplay(){
-		return this.display;
-	}
-	
-	public Shell getShell(){
-		return this.shell;
-	}
-	
-	public Action getAction(String name) {
-		return this.getActionManager().getAction(name);
-	}
-	
-	public static String getProperty(String key) {
-		return TuxGuitar.instance().getLanguageManager().getProperty(key);
-	}
-	
-	public static String getProperty(String key,String[] arguments) {
-		return  TuxGuitar.instance().getLanguageManager().getProperty(key,arguments);
-	}
-	
-	public static boolean isDisposed(){
-		return (TuxGuitar.instance().getDisplay().isDisposed() || TuxGuitar.instance().getShell().isDisposed());
-	}
-	
-	public void loadLanguage(){
-		this.lock();
-		
-		getLanguageManager().setLanguage(getConfig().getStringConfigValue(TGConfigKeys.LANGUAGE));
-		
-		this.unlock();
-	}
-	
-	public void loadToolBars(){
-		this.lock();
-		
-		getItemManager().createCoolbar();
-		
-		this.unlock();
-	}
-	
-	public void loadStyles(){
-		this.lock();
-		
-		getTablatureEditor().getTablature().reloadStyles();
-		
-		this.unlock();
-	}
-	
-	public void loadSkin(){
-		this.lock();
-		
-		getIconManager().reloadIcons();
-		
-		this.unlock();
-	}
-	
-	public void newSong(){
-		TuxGuitar.instance().fireNewSong(TuxGuitar.instance().getSongManager().newSong(),null);
-	}
-	
-	public void fireNewSong(TGSong song,URL url){
-		this.lock();
-		
-		TuxGuitar.instance().getSongManager().setSong(song);
-		getFileHistory().reset(url);
-		getPlayer().reset();
-		getPlayer().getMode().clear();
-		getEditorCache().reset();
-		getUndoableManager().discardAllEdits();
-		getEditorManager().doUpdate( TGUpdateListener.SONG_LOADED );
-		
-		this.unlock();
-		
-		updateCache(true);
-		showTitle();
-	}
-	
-	public void fireSaveSong(URL url){
-		this.lock();
-		
-		getFileHistory().reset(url);
-		getEditorCache().reset();
-		getUndoableManager().discardAllEdits();
-		getEditorManager().doUpdate( TGUpdateListener.SONG_SAVED );
-		
-		this.unlock();
-		
-		updateCache(true);
-		showTitle();
-	}
-	
-	public void fireUpdate(){
-		this.lock();
-		this.getEditorCache().reset();
-		this.getEditorManager().doUpdate( TGUpdateListener.SONG_UPDATED );
-		this.unlock();
-	}
-	
-	public void loadCursor(int style){
-		this.loadCursor(getShell(),style);
-	}
-	
-	public void loadCursor(final Control control,final int style){
-		try {
-			TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
-					if(!control.isDisposed()){
-						control.setCursor(getDisplay().getSystemCursor(style));
-					}
-				}
-			});
-		} catch (Throwable e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public boolean isInitialized() {
-		return this.initialized;
-	}
-	
-	public void setInitialized(boolean initialized) {
-		this.initialized = initialized;
-	}
-	
-	public void lock(){
-		this.lock.lock();
-	}
-	
-	public void unlock(){
-		this.lock.unlock();
-	}
-	
-	public boolean isLocked(){
-		return this.lock.isLocked();
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/Action.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/Action.java
deleted file mode 100644
index c1fa7d4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/Action.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TablatureEditor;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window 
- * Preferences - Java - Code Style - Code Templates
- */
-public abstract class Action extends ActionAdapter {
-	
-	protected static final int AUTO_LOCK = 0x01;
-	
-	protected static final int AUTO_UNLOCK = 0x02;
-	
-	protected static final int AUTO_UPDATE = 0x04;
-	
-	protected static final int KEY_BINDING_AVAILABLE = 0x08;
-	
-	protected static final int DISABLE_ON_PLAYING = 0x10;
-	
-	private String name;
-	
-	private int flags;
-	
-	public Action(String name, int flags) {
-		this.name = name;
-		this.flags = flags;
-	}
-	
-	protected abstract int execute(TypedEvent e);
-	
-	public synchronized void process(final TypedEvent e) {
-		if (!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()) {
-			final int flags = getFlags();
-			
-			if ((flags & DISABLE_ON_PLAYING) != 0 && TuxGuitar.instance().getPlayer().isRunning()) {
-				TuxGuitar.instance().updateCache(((flags & AUTO_UPDATE) != 0));
-				return;
-			}
-			
-			if ((flags & AUTO_LOCK) != 0) {
-				ActionLock.lock();
-			}
-			/*
-			new SyncThread(new Runnable() {
-				public void run() {
-					if (!TuxGuitar.isDisposed()) {
-						int result = execute(e);
-						
-						TuxGuitar.instance().updateCache((((flags | result) & AUTO_UPDATE) != 0));
-						
-						if (((flags | result) & AUTO_UNLOCK) != 0) {
-							ActionLock.unlock();
-						}
-					}
-				}
-			}).start();
-			*/
-			try {
-				TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-					public void run() throws Throwable {
-						if (!TuxGuitar.isDisposed()) {
-							int result = execute(e);
-							
-							TuxGuitar.instance().updateCache((((flags | result) & AUTO_UPDATE) != 0));
-							
-							if (((flags | result) & AUTO_UNLOCK) != 0) {
-								ActionLock.unlock();
-							}
-						}
-					}
-				});
-			} catch (Throwable throwable) {
-				throwable.printStackTrace();
-			}
-		}
-	}
-	
-	protected int getFlags() {
-		return this.flags;
-	}
-	
-	public TGSongManager getSongManager() {
-		return TuxGuitar.instance().getSongManager();
-	}
-	
-	public TablatureEditor getEditor() {
-		return TuxGuitar.instance().getTablatureEditor();
-	}
-	
-	public String getName() {
-		return this.name;
-	}
-	
-	public boolean isKeyBindingAvailable() {
-		return ((getFlags() & KEY_BINDING_AVAILABLE) != 0);
-	}
-	
-	public synchronized void updateTablature() {
-		TuxGuitar.instance().fireUpdate();
-	}
-	
-	public void fireUpdate(int measureNumber) {
-		this.getEditor().getTablature().getViewLayout().fireUpdate(measureNumber);
-	}
-	
-	public void addUndoableEdit(UndoableEdit anEdit) {
-		TuxGuitar.instance().getUndoableManager().addEdit(anEdit);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionAdapter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionAdapter.java
deleted file mode 100644
index 9f25799..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionAdapter.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.herac.tuxguitar.gui.actions;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MenuEvent;
-import org.eclipse.swt.events.MenuListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.events.ShellEvent;
-import org.eclipse.swt.events.ShellListener;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.ToolItem;
-
-public abstract class ActionAdapter implements SelectionListener,MouseListener,MenuListener,ShellListener{
-	
-	public abstract void process(TypedEvent e);
-	
-	public void widgetSelected(SelectionEvent e) {
-		if(e.widget != null && (e.widget.getStyle() & SWT.RADIO) != 0){
-			if(e.widget instanceof Button && !((Button)e.widget).getSelection() ){
-				return;
-			}
-			if(e.widget instanceof ToolItem && !((ToolItem)e.widget).getSelection() ){
-				return;
-			}
-			if(e.widget instanceof MenuItem && !((MenuItem)e.widget).getSelection() ){
-				return;
-			}
-		}
-		process(e);
-	}
-	
-	public void mouseUp(MouseEvent e) {
-		process(e);
-	}
-	
-	public void menuShown(MenuEvent e) {
-		process(e);
-	}
-	
-	public void shellClosed(ShellEvent e) {
-		e.doit = false;
-		process(e);
-	}
-	
-	public void widgetDefaultSelected(SelectionEvent e) {
-		//Override me
-	}
-	
-	public void mouseDoubleClick(MouseEvent e) {
-		//Override me
-	}
-	
-	public void mouseDown(MouseEvent e) {
-		//Override me
-	}
-	
-	public void menuHidden(MenuEvent e) {
-		//Override me
-	}
-	
-	public void shellActivated(ShellEvent e) {
-		//Override me
-	}
-	
-	public void shellDeactivated(ShellEvent e) {
-		//Override me
-	}
-	
-	public void shellDeiconified(ShellEvent e) {
-		//Override me
-	}
-	
-	public void shellIconified(ShellEvent e) {
-		//Override me
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionLock.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionLock.java
deleted file mode 100644
index 324aeb6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionLock.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.herac.tuxguitar.gui.actions;
-
-public class ActionLock {
-	
-	private static boolean working;
-	
-	public synchronized static boolean isLocked(){
-		return working;
-	}
-	
-	public synchronized static void lock(){
-		working = true;
-	}
-	
-	public synchronized static void unlock(){
-		working = false;
-	}
-	
-	public synchronized static void waitFor(){
-		try {
-			while(isLocked()){
-				synchronized( ActionLock.class ) {
-					ActionLock.class.wait(1);
-				}
-			}
-		} catch (InterruptedException e) {
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionManager.java
deleted file mode 100644
index 0cc19e8..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/ActionManager.java
+++ /dev/null
@@ -1,366 +0,0 @@
-/*
- * Created on 18-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-import org.herac.tuxguitar.gui.actions.caret.GoDownAction;
-import org.herac.tuxguitar.gui.actions.caret.GoLeftAction;
-import org.herac.tuxguitar.gui.actions.caret.GoRightAction;
-import org.herac.tuxguitar.gui.actions.caret.GoUpAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeClefAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeInfoAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeKeySignatureAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeTempoAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeTimeSignatureAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeTripletFeelAction;
-import org.herac.tuxguitar.gui.actions.duration.ChangeDottedDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.ChangeDoubleDottedDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.ChangeDivisionTypeAction;
-import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetEighthDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetHalfDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetQuarterDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetSixteenthDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetSixtyFourthDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetThirtySecondDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetWholeDurationAction;
-import org.herac.tuxguitar.gui.actions.edit.RedoAction;
-import org.herac.tuxguitar.gui.actions.edit.SetMouseModeEditionAction;
-import org.herac.tuxguitar.gui.actions.edit.SetMouseModeSelectionAction;
-import org.herac.tuxguitar.gui.actions.edit.SetNaturalKeyAction;
-import org.herac.tuxguitar.gui.actions.edit.SetVoice1Action;
-import org.herac.tuxguitar.gui.actions.edit.SetVoice2Action;
-import org.herac.tuxguitar.gui.actions.edit.UndoAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeAccentuatedNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeBendNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeDeadNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeFadeInAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeGhostNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeGraceNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeHammerNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeHarmonicNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeHeavyAccentuatedNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangePalmMuteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangePoppingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeSlappingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeSlideNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeStaccatoAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTappingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloBarAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloPickingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTrillNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeVibratoNoteAction;
-import org.herac.tuxguitar.gui.actions.file.ExitAction;
-import org.herac.tuxguitar.gui.actions.file.ExportSongAction;
-import org.herac.tuxguitar.gui.actions.file.ImportSongAction;
-import org.herac.tuxguitar.gui.actions.file.NewFileAction;
-import org.herac.tuxguitar.gui.actions.file.OpenFileAction;
-import org.herac.tuxguitar.gui.actions.file.OpenURLAction;
-import org.herac.tuxguitar.gui.actions.file.PrintAction;
-import org.herac.tuxguitar.gui.actions.file.PrintPreviewAction;
-import org.herac.tuxguitar.gui.actions.file.SaveAsFileAction;
-import org.herac.tuxguitar.gui.actions.file.SaveFileAction;
-import org.herac.tuxguitar.gui.actions.help.ShowAboutAction;
-import org.herac.tuxguitar.gui.actions.help.ShowDocAction;
-import org.herac.tuxguitar.gui.actions.insert.InsertChordAction;
-import org.herac.tuxguitar.gui.actions.insert.InsertTextAction;
-import org.herac.tuxguitar.gui.actions.insert.RepeatAlternativeAction;
-import org.herac.tuxguitar.gui.actions.insert.RepeatCloseAction;
-import org.herac.tuxguitar.gui.actions.insert.RepeatOpenAction;
-import org.herac.tuxguitar.gui.actions.layout.SetChordDiagramEnabledAction;
-import org.herac.tuxguitar.gui.actions.layout.SetChordNameEnabledAction;
-import org.herac.tuxguitar.gui.actions.layout.SetCompactViewAction;
-import org.herac.tuxguitar.gui.actions.layout.SetLinearLayoutAction;
-import org.herac.tuxguitar.gui.actions.layout.SetMultitrackViewAction;
-import org.herac.tuxguitar.gui.actions.layout.SetPageLayoutAction;
-import org.herac.tuxguitar.gui.actions.layout.SetScoreEnabledAction;
-import org.herac.tuxguitar.gui.actions.layout.SetTablatureEnabledAction;
-import org.herac.tuxguitar.gui.actions.marker.AddMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoFirstMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoLastMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoNextMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoPreviousMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.ListMarkersAction;
-import org.herac.tuxguitar.gui.actions.measure.AddMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.CleanMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.CopyMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.GoFirstMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.GoLastMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.GoNextMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.GoPreviousMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.PasteMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.RemoveMeasureAction;
-import org.herac.tuxguitar.gui.actions.note.ChangeNoteAction;
-import org.herac.tuxguitar.gui.actions.note.ChangeTiedNoteAction;
-import org.herac.tuxguitar.gui.actions.note.ChangeVelocityAction;
-import org.herac.tuxguitar.gui.actions.note.CleanBeatAction;
-import org.herac.tuxguitar.gui.actions.note.DecrementNoteSemitoneAction;
-import org.herac.tuxguitar.gui.actions.note.IncrementNoteSemitoneAction;
-import org.herac.tuxguitar.gui.actions.note.InsertNoteAction;
-import org.herac.tuxguitar.gui.actions.note.MoveBeatsCustomAction;
-import org.herac.tuxguitar.gui.actions.note.MoveBeatsLeftAction;
-import org.herac.tuxguitar.gui.actions.note.MoveBeatsRightAction;
-import org.herac.tuxguitar.gui.actions.note.RemoveNoteAction;
-import org.herac.tuxguitar.gui.actions.note.RemoveUnusedVoiceAction;
-import org.herac.tuxguitar.gui.actions.note.SetStrokeDownAction;
-import org.herac.tuxguitar.gui.actions.note.SetStrokeUpAction;
-import org.herac.tuxguitar.gui.actions.note.SetVoiceAutoAction;
-import org.herac.tuxguitar.gui.actions.note.SetVoiceDownAction;
-import org.herac.tuxguitar.gui.actions.note.SetVoiceUpAction;
-import org.herac.tuxguitar.gui.actions.note.ShiftNoteDownAction;
-import org.herac.tuxguitar.gui.actions.note.ShiftNoteUpAction;
-import org.herac.tuxguitar.gui.actions.settings.EditConfigAction;
-import org.herac.tuxguitar.gui.actions.settings.EditKeyBindingsAction;
-import org.herac.tuxguitar.gui.actions.settings.EditPluginsAction;
-import org.herac.tuxguitar.gui.actions.system.DisposeAction;
-import org.herac.tuxguitar.gui.actions.tools.ScaleAction;
-import org.herac.tuxguitar.gui.actions.tools.TGBrowserAction;
-import org.herac.tuxguitar.gui.actions.tools.TransposeAction;
-import org.herac.tuxguitar.gui.actions.track.AddTrackAction;
-import org.herac.tuxguitar.gui.actions.track.CloneTrackAction;
-import org.herac.tuxguitar.gui.actions.track.EditLyricsAction;
-import org.herac.tuxguitar.gui.actions.track.GoFirstTrackAction;
-import org.herac.tuxguitar.gui.actions.track.GoLastTrackAction;
-import org.herac.tuxguitar.gui.actions.track.GoNextTrackAction;
-import org.herac.tuxguitar.gui.actions.track.GoPreviousTrackAction;
-import org.herac.tuxguitar.gui.actions.track.GoToTrackAction;
-import org.herac.tuxguitar.gui.actions.track.MoveTrackDownAction;
-import org.herac.tuxguitar.gui.actions.track.MoveTrackUpAction;
-import org.herac.tuxguitar.gui.actions.track.RemoveTrackAction;
-import org.herac.tuxguitar.gui.actions.track.TrackPropertiesAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportMetronomeAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportModeAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportPlayAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopEHeaderAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopSHeaderAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportStopAction;
-import org.herac.tuxguitar.gui.actions.view.ShowFretBoardAction;
-import org.herac.tuxguitar.gui.actions.view.ShowMatrixAction;
-import org.herac.tuxguitar.gui.actions.view.ShowMixerAction;
-import org.herac.tuxguitar.gui.actions.view.ShowPianoAction;
-import org.herac.tuxguitar.gui.actions.view.ShowTransportAction;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ActionManager {
-	
-	private Map actions;
-	
-	public ActionManager(){
-		this.actions = new HashMap();
-		this.init();
-	}
-	
-	public void init(){
-		//file actions
-		addAction(new NewFileAction());
-		addAction(new OpenFileAction());
-		addAction(new SaveFileAction());
-		addAction(new SaveAsFileAction());
-		addAction(new ImportSongAction());
-		addAction(new ExportSongAction());
-		addAction(new PrintAction());
-		addAction(new PrintPreviewAction());
-		addAction(new OpenURLAction());
-		addAction(new ExitAction());
-		
-		//edit actions
-		addAction(new UndoAction());
-		addAction(new RedoAction());
-		addAction(new SetMouseModeSelectionAction());
-		addAction(new SetMouseModeEditionAction());
-		addAction(new SetNaturalKeyAction());
-		addAction(new SetVoice1Action());
-		addAction(new SetVoice2Action());
-		
-		//layout actions
-		addAction(new SetPageLayoutAction());
-		addAction(new SetLinearLayoutAction());
-		addAction(new SetMultitrackViewAction());
-		addAction(new SetScoreEnabledAction());
-		addAction(new SetTablatureEnabledAction());
-		addAction(new SetCompactViewAction());
-		addAction(new SetChordNameEnabledAction());
-		addAction(new SetChordDiagramEnabledAction());
-		
-		//view actions
-		addAction(new ShowFretBoardAction());
-		addAction(new ShowPianoAction());
-		addAction(new ShowMixerAction());
-		addAction(new ShowTransportAction());
-		addAction(new ShowMatrixAction());
-		
-		//composition actions
-		addAction(new ChangeTimeSignatureAction());
-		addAction(new ChangeTempoAction());
-		addAction(new ChangeClefAction());
-		addAction(new ChangeKeySignatureAction());
-		addAction(new ChangeTripletFeelAction());
-		addAction(new ChangeInfoAction());
-		
-		//track actions
-		addAction(new AddTrackAction());
-		addAction(new RemoveTrackAction());
-		addAction(new CloneTrackAction());
-		addAction(new GoFirstTrackAction());
-		addAction(new GoLastTrackAction());
-		addAction(new GoNextTrackAction());
-		addAction(new GoToTrackAction());
-		addAction(new GoPreviousTrackAction());
-		addAction(new MoveTrackUpAction());
-		addAction(new MoveTrackDownAction());
-		addAction(new EditLyricsAction());
-		addAction(new TrackPropertiesAction());
-		
-		//measure actions
-		addAction(new AddMeasureAction());
-		addAction(new RemoveMeasureAction());
-		addAction(new CopyMeasureAction());
-		addAction(new PasteMeasureAction());
-		addAction(new GoFirstMeasureAction());
-		addAction(new GoLastMeasureAction());
-		addAction(new GoNextMeasureAction());
-		addAction(new GoPreviousMeasureAction());
-		addAction(new CleanMeasureAction());
-		
-		//note actions
-		addAction(new ChangeNoteAction());
-		addAction(new InsertNoteAction());
-		addAction(new RemoveNoteAction());
-		addAction(new RemoveUnusedVoiceAction());
-		addAction(new CleanBeatAction());
-		addAction(new ChangeTiedNoteAction());
-		addAction(new ChangeVelocityAction());
-		addAction(new ShiftNoteUpAction());
-		addAction(new ShiftNoteDownAction());
-		addAction(new IncrementNoteSemitoneAction());
-		addAction(new DecrementNoteSemitoneAction());
-		addAction(new SetStrokeUpAction());
-		addAction(new SetStrokeDownAction());
-		addAction(new MoveBeatsRightAction());
-		addAction(new MoveBeatsLeftAction());
-		addAction(new MoveBeatsCustomAction());
-		
-		//duration actions
-		addAction(new SetWholeDurationAction());
-		addAction(new SetHalfDurationAction());
-		addAction(new SetQuarterDurationAction());
-		addAction(new SetEighthDurationAction());
-		addAction(new SetSixteenthDurationAction());
-		addAction(new SetThirtySecondDurationAction());
-		addAction(new SetSixtyFourthDurationAction());
-		addAction(new ChangeDottedDurationAction());
-		addAction(new ChangeDoubleDottedDurationAction());
-		addAction(new ChangeDivisionTypeAction());
-		addAction(new IncrementDurationAction());
-		addAction(new DecrementDurationAction());
-		
-		//insert actions
-		addAction(new RepeatOpenAction());
-		addAction(new RepeatCloseAction());
-		addAction(new RepeatAlternativeAction());
-		addAction(new InsertChordAction());
-		addAction(new InsertTextAction());
-		
-		//note effects action
-		addAction(new ChangeVibratoNoteAction());
-		addAction(new ChangeBendNoteAction());
-		addAction(new ChangeDeadNoteAction());
-		addAction(new ChangeSlideNoteAction());
-		addAction(new ChangeHammerNoteAction());
-		addAction(new ChangeGhostNoteAction());
-		addAction(new ChangeAccentuatedNoteAction());
-		addAction(new ChangeHeavyAccentuatedNoteAction());
-		addAction(new ChangeHarmonicNoteAction());
-		addAction(new ChangeGraceNoteAction());
-		addAction(new ChangeTrillNoteAction());
-		addAction(new ChangeTremoloPickingAction());
-		addAction(new ChangePalmMuteAction());
-		addAction(new ChangeStaccatoAction());
-		addAction(new ChangeTappingAction());
-		addAction(new ChangeSlappingAction());
-		addAction(new ChangePoppingAction());
-		addAction(new ChangeTremoloBarAction());
-		addAction(new ChangeFadeInAction());
-		addAction(new SetVoiceAutoAction());
-		addAction(new SetVoiceUpAction());
-		addAction(new SetVoiceDownAction());
-		
-		//marker actions
-		addAction(new AddMarkerAction());
-		addAction(new ListMarkersAction());
-		addAction(new GoPreviousMarkerAction());
-		addAction(new GoNextMarkerAction());
-		addAction(new GoFirstMarkerAction());
-		addAction(new GoLastMarkerAction());
-		
-		//player actions
-		addAction(new TransportPlayAction());
-		addAction(new TransportStopAction());
-		addAction(new TransportMetronomeAction());
-		addAction(new TransportModeAction());
-		addAction(new TransportSetLoopSHeaderAction());
-		addAction(new TransportSetLoopEHeaderAction());
-		
-		//setting actions
-		addAction(new EditPluginsAction());
-		addAction(new EditConfigAction()); 
-		addAction(new EditKeyBindingsAction()); 
-		
-		//caret actions
-		addAction(new GoRightAction());
-		addAction(new GoLeftAction());
-		addAction(new GoUpAction());
-		addAction(new GoDownAction());
-		
-		//help actions
-		addAction(new ShowDocAction());
-		addAction(new ShowAboutAction());
-		
-		//tools
-		addAction(new TransposeAction() );
-		addAction(new ScaleAction());
-		addAction(new TGBrowserAction());
-		
-		//exit
-		addAction(new DisposeAction());
-	}
-	
-	public void addAction(Action action){
-		this.actions.put(action.getName(),action);
-	}
-	
-	public void removeAction(String name){
-		this.actions.remove(name);
-	}
-	
-	public Action getAction(String name){
-		return (Action)this.actions.get(name);
-	}
-	
-	public List getAvailableKeyBindingActions(){
-		List availableKeyBindingActions = new ArrayList();
-		Iterator it = this.actions.keySet().iterator();
-		while(it.hasNext()){
-			String actionName = (String)it.next();
-			if(getAction(actionName).isKeyBindingAvailable()){
-				availableKeyBindingActions.add(actionName);
-			}
-		}
-		return availableKeyBindingActions;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoDownAction.java
deleted file mode 100644
index 1bd093c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoDownAction.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.caret;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoDownAction extends Action{
-	public static final String NAME = "action.caret.go-down";
-	
-	public GoDownAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE );
-	}
-	
-	protected int execute(TypedEvent e){
-		getEditor().getTablature().getCaret().moveDown();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoLeftAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoLeftAction.java
deleted file mode 100644
index 18c3582..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoLeftAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.caret;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoLeftAction extends Action{
-	public static final String NAME = "action.caret.go-left";
-	
-	public GoLeftAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getPlayer().isRunning()){
-			TuxGuitar.instance().getTransport().gotoPrevious();
-		}
-		else{
-			getEditor().getTablature().getCaret().moveLeft();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoRightAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoRightAction.java
deleted file mode 100644
index 7b57c3d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoRightAction.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.caret;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableAddMeasure;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoRightAction extends Action{
-	public static final String NAME = "action.caret.go-right";
-	
-	public GoRightAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getPlayer().isRunning()){
-			TuxGuitar.instance().getTransport().gotoNext();
-		}
-		else{
-			Caret caret = getEditor().getTablature().getCaret();
-			if(!caret.moveRight()){
-				int number = (getSongManager().getSong().countMeasureHeaders() + 1);
-				
-				//comienza el undoable
-				UndoableAddMeasure undoable = UndoableAddMeasure.startUndo(number);
-				
-				getSongManager().addNewMeasure(number);
-				fireUpdate(number);
-				caret.moveRight();
-				
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				
-				//termia el undoable
-				addUndoableEdit(undoable.endUndo());
-			}
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoUpAction.java
deleted file mode 100644
index 51be64a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/caret/GoUpAction.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.caret;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoUpAction extends Action{
-	public static final String NAME = "action.caret.go-up";
-	
-	public GoUpAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		getEditor().getTablature().getCaret().moveUp();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeClefAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeClefAction.java
deleted file mode 100644
index 277cda6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeClefAction.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.composition;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeClef;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeClefAction extends Action{
-	public static final String NAME = "action.composition.change-clef";
-	
-	public ChangeClefAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("composition.clef"));
-			
-			//-------clef-------------------------------------
-			Group clef = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			clef.setLayout(new GridLayout(2,false));
-			clef.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			clef.setText(TuxGuitar.getProperty("composition.clef"));
-			
-			Label numeratorLabel = new Label(clef, SWT.NULL);
-			numeratorLabel.setText(TuxGuitar.getProperty("composition.clef") + ":");
-			
-			final Combo clefs = new Combo(clef, SWT.DROP_DOWN | SWT.READ_ONLY);
-			
-			clefs.add(TuxGuitar.getProperty("composition.clef.treble"));
-			clefs.add(TuxGuitar.getProperty("composition.clef.bass"));
-			clefs.add(TuxGuitar.getProperty("composition.clef.tenor"));
-			clefs.add(TuxGuitar.getProperty("composition.clef.alto"));
-			clefs.select(measure.getClef() - 1);
-			clefs.setLayoutData(getComboData());
-			
-			//--------------------To End Checkbox-------------------------------
-			Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			check.setLayout(new GridLayout());
-			check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			check.setText(TuxGuitar.getProperty("options"));
-			
-			final Button toEnd = new Button(check, SWT.CHECK);
-			toEnd.setText(TuxGuitar.getProperty("composition.clef.to-the-end"));
-			toEnd.setSelection(true);
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					final boolean toEndValue = toEnd.getSelection();
-					final int clef = (clefs.getSelectionIndex() + 1);
-					
-					dialog.dispose();
-					try {
-						TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-							public void run() throws Throwable {
-								ActionLock.lock();
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-								setClef(clef,toEndValue);
-								TuxGuitar.instance().updateCache( true );
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								ActionLock.unlock();
-							}
-						});
-					} catch (Throwable throwable) {
-						MessageDialog.errorMessage(throwable);
-					}
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getComboData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 150;
-		return data;
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected void setClef(int clef,boolean toEnd){
-		//comienza el undoable
-		UndoableChangeClef undoable = UndoableChangeClef.startUndo();
-		
-		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
-		TGTrack track = getEditor().getTablature().getCaret().getTrack();
-		getSongManager().getTrackManager().changeClef(track,measure.getStart(),clef,toEnd);
-		
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		//actualizo la tablatura
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo(clef,toEnd));
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeInfoAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeInfoAction.java
deleted file mode 100644
index e1b4800..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeInfoAction.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.composition;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeInfo;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeInfoAction extends Action{
-	public static final String NAME = "action.composition.change-info";
-	
-	private static final int GROUP_WIDTH  = 450;
-	private static final int GROUP_HEIGHT = SWT.DEFAULT;
-	
-	public ChangeInfoAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGSong song = getSongManager().getSong();
-		if (song != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			
-			dialog.setLayout(new GridLayout());
-			dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			dialog.setText(TuxGuitar.getProperty("composition.properties"));
-			
-			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			group.setLayout(makeGroupLayout(5));
-			group.setLayoutData(new GridData(GROUP_WIDTH,GROUP_HEIGHT));
-			group.setText(TuxGuitar.getProperty("composition.properties"));
-			
-			//-------NAME------------------------------------
-			Label nameLabel = new Label(group, SWT.NULL);
-			nameLabel.setLayoutData(makeLabelData()); 
-			nameLabel.setText(TuxGuitar.getProperty("composition.name") + ":");
-			
-			final Text nameText = new Text(group, SWT.BORDER);
-			nameText.setLayoutData(makeTextData());
-			nameText.setText(song.getName());
-			//-------ARTIST------------------------------------
-			Label artistLabel = new Label(group, SWT.NULL);
-			artistLabel.setLayoutData(makeLabelData());
-			artistLabel.setText(TuxGuitar.getProperty("composition.artist") + ":");
-			
-			final Text artistText = new Text(group, SWT.BORDER);
-			artistText.setLayoutData(makeTextData());
-			artistText.setText(song.getArtist());
-			//-------ALBUM------------------------------------
-			Label albumLabel = new Label(group, SWT.NULL);
-			albumLabel.setLayoutData(makeLabelData());
-			albumLabel.setText(TuxGuitar.getProperty("composition.album") + ":");
-			
-			final Text albumText = new Text(group, SWT.BORDER);
-			albumText.setLayoutData(makeTextData());
-			albumText.setText(song.getAlbum());
-			//-------AUTHOR------------------------------------
-			Label authorLabel = new Label(group, SWT.NULL);
-			authorLabel.setLayoutData(makeLabelData());
-			authorLabel.setText(TuxGuitar.getProperty("composition.author") + ":");
-			
-			final Text authorText = new Text(group, SWT.BORDER);
-			authorText.setLayoutData(makeTextData());
-			authorText.setText(song.getAuthor());
-			//-------DATE------------------------------------
-			Label dateLabel = new Label(group, SWT.NULL);
-			dateLabel.setLayoutData(makeLabelData());
-			dateLabel.setText(TuxGuitar.getProperty("composition.date") + ":");
-			
-			final Text dateText = new Text(group, SWT.BORDER);
-			dateText.setLayoutData(makeTextData());
-			dateText.setText(song.getDate());
-			//-------COPYRIGHT------------------------------------
-			Label copyrightLabel = new Label(group, SWT.NULL);
-			copyrightLabel.setLayoutData(makeLabelData());
-			copyrightLabel.setText(TuxGuitar.getProperty("composition.copyright") + ":");
-			
-			final Text copyrightText = new Text(group, SWT.BORDER);
-			copyrightText.setLayoutData(makeTextData());
-			copyrightText.setText(song.getCopyright());
-			//-------WRITER-------------------------------------
-			Label writerLabel = new Label(group, SWT.NULL);
-			writerLabel.setLayoutData(makeLabelData());
-			writerLabel.setText(TuxGuitar.getProperty("composition.writer") + ":");
-			
-			final Text writerText = new Text(group, SWT.BORDER);
-			writerText.setLayoutData(makeTextData());
-			writerText.setText(song.getWriter());
-			//-------TRANSCRIBER------------------------------------
-			Label transcriberLabel = new Label(group, SWT.NULL);
-			transcriberLabel.setLayoutData(makeLabelData());
-			transcriberLabel.setText(TuxGuitar.getProperty("composition.transcriber") + ":");
-			
-			final Text transcriberText = new Text(group, SWT.BORDER);
-			transcriberText.setLayoutData(makeTextData());
-			transcriberText.setText(song.getTranscriber());
-			
-			//-------COMMENTS------------------------------------
-			Label commentsLabel = new Label(group, SWT.NULL);
-			commentsLabel.setLayoutData(makeLabelData());
-			commentsLabel.setText(TuxGuitar.getProperty("composition.comments") + ":");
-			
-			final Text commentsText = new Text(group, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
-			commentsText.setLayoutData(makeTextAreaData());
-			commentsText.setText(song.getComments());
-			
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					final String name = nameText.getText();
-					final String artist = artistText.getText();
-					final String album = albumText.getText();
-					final String author = authorText.getText();
-					final String date = dateText.getText();
-					final String copyright = copyrightText.getText();
-					final String writer = writerText.getText();
-					final String transcriber = transcriberText.getText();
-					final String comments = commentsText.getText();
-					
-					dialog.dispose();
-					try {
-						TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-							public void run() throws Throwable {
-								ActionLock.lock();
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-								setProperties(name,artist,album,author,date,copyright,writer,transcriber,comments);
-								TuxGuitar.instance().updateCache( true );
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								ActionLock.unlock();
-							}
-						});
-					} catch (Throwable throwable) {
-						MessageDialog.errorMessage(throwable);
-					}
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridLayout makeGroupLayout(int spacing){
-		GridLayout layout = new GridLayout(2,false);
-		layout.marginTop = spacing;
-		layout.marginBottom = spacing;
-		layout.marginLeft = spacing;
-		layout.marginRight = spacing;
-		layout.verticalSpacing = spacing;
-		layout.horizontalSpacing = spacing;
-		return layout;
-	}
-	
-	private GridData makeTextAreaData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumHeight = 100;
-		return data;
-	}
-	
-	private GridData makeTextData(){
-		return new GridData(SWT.FILL, SWT.FILL, true, true);
-	}
-	
-	private GridData makeLabelData(){
-		return new GridData(SWT.RIGHT,SWT.CENTER,false,true);
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected void setProperties(String name,String artist,String album,String author,String date,String copyright,String writer,String transcriber,String comments){
-		//comienza el undoable
-		UndoableChangeInfo undoable = UndoableChangeInfo.startUndo();
-		
-		getSongManager().setProperties(name,artist,album,author,date,copyright,writer,transcriber,comments);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		TuxGuitar.instance().showTitle();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeKeySignatureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeKeySignatureAction.java
deleted file mode 100644
index 35708d9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeKeySignatureAction.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.composition;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeKeySignature;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeKeySignatureAction extends Action{
-	public static final String NAME = "action.composition.change-key-signature";
-	
-	public ChangeKeySignatureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("composition.keysignature"));
-			
-			//-------key Signature-------------------------------------
-			Group keySignature = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			keySignature.setLayout(new GridLayout(2,false));
-			keySignature.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			keySignature.setText(TuxGuitar.getProperty("composition.keysignature"));
-			
-			Label numeratorLabel = new Label(keySignature, SWT.NULL);
-			numeratorLabel.setText(TuxGuitar.getProperty("composition.keysignature") + ":");
-			
-			final Combo keySignatures = new Combo(keySignature, SWT.DROP_DOWN | SWT.READ_ONLY);
-			
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.natural"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-1"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-2"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-3"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-4"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-5"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-6"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.sharp-7"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-1"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-2"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-3"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-4"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-5"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-6"));
-			keySignatures.add(TuxGuitar.getProperty("composition.keysignature.flat-7"));
-			keySignatures.select(measure.getKeySignature());
-			keySignatures.setLayoutData(getComboData());
-			//--------------------To End Checkbox-------------------------------
-			Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			check.setLayout(new GridLayout());
-			check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			check.setText(TuxGuitar.getProperty("options"));
-			
-			final Button toEnd = new Button(check, SWT.CHECK);
-			toEnd.setText(TuxGuitar.getProperty("composition.keysignature.to-the-end"));
-			toEnd.setSelection(true);
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					final boolean toEndValue = toEnd.getSelection();
-					final int keySignature = keySignatures.getSelectionIndex();
-					
-					dialog.dispose();
-					try {
-						TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-							public void run() throws Throwable {
-								ActionLock.lock();
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-								setKeySignature(keySignature,toEndValue);
-								TuxGuitar.instance().updateCache( true );
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								ActionLock.unlock();
-							}
-						});
-					} catch (Throwable throwable) {
-						MessageDialog.errorMessage(throwable);
-					}
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private GridData getComboData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 150;
-		return data;
-	}
-	
-	protected void setKeySignature(int keySignature,boolean toEnd){
-		//comienza el undoable
-		UndoableChangeKeySignature undoable = UndoableChangeKeySignature.startUndo();
-		
-		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
-		TGTrack track = getEditor().getTablature().getCaret().getTrack();
-		getSongManager().getTrackManager().changeKeySignature(track,measure.getStart(),keySignature,toEnd);
-		
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		//actualizo la tablatura
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo(keySignature,toEnd));
-		
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTempoAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTempoAction.java
deleted file mode 100644
index e2e1071..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTempoAction.java
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.composition;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeTempo;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGTempo;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeTempoAction extends Action{
-	public static final String NAME = "action.composition.change-tempo";
-	private static final int MIN_TEMPO = 30;
-	private static final int MAX_TEMPO = 320;
-	
-	protected static final int[] DEFAULT_PERCENTS = new int[]{25,50,75,100,125,150,175,200};
-	
-	public ChangeTempoAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("composition.tempo"));
-			
-			//-----------------TEMPO------------------------
-			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			group.setLayout(new GridLayout(2,false));
-			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			group.setText(TuxGuitar.getProperty("composition.tempo"));
-			
-			TGTempo currentTempo = measure.getTempo();
-			Label tempoLabel = new Label(group, SWT.NULL);
-			tempoLabel.setText(TuxGuitar.getProperty("composition.tempo"));
-			
-			final Spinner tempo = new Spinner(group, SWT.BORDER);
-			tempo.setLayoutData(getSpinnerData());
-			tempo.setMinimum(MIN_TEMPO);
-			tempo.setMaximum(MAX_TEMPO);
-			tempo.setSelection(currentTempo.getValue());
-			
-			//------------------OPTIONS--------------------------
-			Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			options.setLayout(new GridLayout());
-			options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			options.setText(TuxGuitar.getProperty("options"));
-			
-			final Button applyToAllMeasures = new Button(options, SWT.RADIO);
-			applyToAllMeasures.setText(TuxGuitar.getProperty("composition.tempo.start-to-end"));
-			
-			final Button applyToEnd = new Button(options, SWT.RADIO);
-			applyToEnd.setText(TuxGuitar.getProperty("composition.tempo.position-to-end"));
-			
-			final Button applyToNext = new Button(options, SWT.RADIO);
-			applyToNext.setText(TuxGuitar.getProperty("composition.tempo.position-to-next"));
-			
-			applyToAllMeasures.setSelection(true);
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					final int tempoValue = tempo.getSelection();
-					final boolean applyToEndValue = applyToEnd.getSelection();
-					final boolean applyToAllMeasuresValue = applyToAllMeasures.getSelection();
-					
-					dialog.dispose();
-					try {
-						TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-							public void run() throws Throwable {
-								ActionLock.lock();
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-								setTempo(tempoValue, applyToAllMeasuresValue, applyToEndValue);
-								TuxGuitar.instance().updateCache( true );
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								ActionLock.unlock();
-							}
-						});
-					} catch (Throwable throwable) {
-						MessageDialog.errorMessage(throwable);
-					}
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private GridData getSpinnerData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 150;
-		return data;
-	}
-	
-	protected void setTempo(int tempoValue,boolean applyToAllMeasures,boolean applyToEnd){
-		if(tempoValue >= MIN_TEMPO && MAX_TEMPO <= 320){
-			TGTempo tempo = getSongManager().getFactory().newTempo();
-			tempo.setValue(tempoValue);
-			
-			long start = (applyToAllMeasures ? TGDuration.QUARTER_TIME : getEditor().getTablature().getCaret().getMeasure().getStart());
-			boolean toEnd = (applyToAllMeasures || applyToEnd);
-			
-			//comienza el undoable
-			UndoableChangeTempo undoable = UndoableChangeTempo.startUndo();
-			
-			getSongManager().changeTempos(start,tempo,toEnd);
-			
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			//actualizo la tablatura
-			updateTablature();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-	}
-	
-	public TGSongManager getSongManager(){
-		return super.getSongManager();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTimeSignatureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTimeSignatureAction.java
deleted file mode 100644
index b7d284d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTimeSignatureAction.java
+++ /dev/null
@@ -1,178 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.composition;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeTimeSignature;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGTimeSignature;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeTimeSignatureAction extends Action{
-	public static final String NAME = "action.composition.change-time-signature";
-	
-	public ChangeTimeSignatureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("composition.timesignature"));
-			
-			//-------------TIME SIGNATURE-----------------------------------------------
-			Group timeSignature = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			timeSignature.setLayout(new GridLayout(2,false));
-			timeSignature.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			timeSignature.setText(TuxGuitar.getProperty("composition.timesignature"));
-			
-			TGTimeSignature currentTimeSignature = measure.getTimeSignature();
-			//numerator
-			Label numeratorLabel = new Label(timeSignature, SWT.NULL);
-			numeratorLabel.setText(TuxGuitar.getProperty("composition.timesignature.Numerator"));
-			final Combo numerator = new Combo(timeSignature, SWT.DROP_DOWN | SWT.READ_ONLY);
-			for (int i = 1; i <= 32; i++) {
-				numerator.add(Integer.toString(i));
-			}
-			numerator.setText(Integer.toString(currentTimeSignature.getNumerator()));
-			numerator.setLayoutData(getComboData());
-			//denominator
-			Label denominatorLabel = new Label(timeSignature, SWT.NULL);
-			denominatorLabel.setText(TuxGuitar.getProperty("composition.timesignature.denominator"));
-			final Combo denominator = new Combo(timeSignature, SWT.DROP_DOWN | SWT.READ_ONLY);
-			for (int i = 1; i <= 32; i = i * 2) {
-				denominator.add(Integer.toString(i));
-			}
-			denominator.setText(Integer.toString(currentTimeSignature.getDenominator().getValue()));
-			denominator.setLayoutData(getComboData());
-			
-			//--------------------To End Checkbox-------------------------------
-			Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			check.setLayout(new GridLayout());
-			check.setText(TuxGuitar.getProperty("options"));
-			check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			
-			final Button toEnd = new Button(check, SWT.CHECK);
-			toEnd.setText(TuxGuitar.getProperty("composition.timesignature.to-the-end"));
-			toEnd.setSelection(true);
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOk = new Button(buttons, SWT.PUSH);
-			buttonOk.setText(TuxGuitar.getProperty("ok"));
-			buttonOk.setLayoutData(getButtonData());
-			buttonOk.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					final boolean toEndValue = toEnd.getSelection();
-					final int numeratorValue = Integer.parseInt(numerator.getText());
-					final int denominatorValue = Integer.parseInt(denominator.getText());
-					
-					dialog.dispose();
-					try {
-						TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-							public void run() throws Throwable {
-								ActionLock.lock();
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-								TGTimeSignature timeSignature = getSongManager().getFactory().newTimeSignature();
-								timeSignature.setNumerator(numeratorValue);
-								timeSignature.getDenominator().setValue(denominatorValue);
-								setTimeSignature(timeSignature,toEndValue);
-								TuxGuitar.instance().updateCache( true );
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								ActionLock.unlock();
-							}
-						});
-					} catch (Throwable throwable) {
-						MessageDialog.errorMessage(throwable);
-					}
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOk );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private GridData getComboData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 150;
-		return data;
-	}
-	
-	protected void setTimeSignature(TGTimeSignature timeSignature,boolean toEnd){
-		//comienza el undoable
-		UndoableChangeTimeSignature undoable = UndoableChangeTimeSignature.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		TGMeasureImpl measure = caret.getMeasure();
-		
-		getSongManager().changeTimeSignature(measure.getStart(),timeSignature,toEnd);
-		
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		//actualizo la tablatura
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo(timeSignature,measure.getStart(),toEnd));
-	}
-	
-	public TGSongManager getSongManager(){
-		return super.getSongManager();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTripletFeelAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTripletFeelAction.java
deleted file mode 100644
index 9a33560..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/composition/ChangeTripletFeelAction.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.composition;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeTripletFeel;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeTripletFeelAction extends Action{
-	public static final String NAME = "action.composition.change-triplet-feel";
-	
-	public ChangeTripletFeelAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("composition.tripletfeel"));
-			dialog.setMinimumSize(300,0);
-			
-			//-------------TIME SIGNATURE-----------------------------------------------
-			Group tripletFeel = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			tripletFeel.setLayout(new GridLayout());
-			tripletFeel.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			tripletFeel.setText(TuxGuitar.getProperty("composition.tripletfeel"));
-			
-			//none
-			final Button tripletFeelNone = new Button(tripletFeel, SWT.RADIO);
-			tripletFeelNone.setText(TuxGuitar.getProperty("composition.tripletfeel.none"));
-			tripletFeelNone.setSelection(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_NONE);
-			
-			final Button tripletFeelEighth = new Button(tripletFeel, SWT.RADIO);
-			tripletFeelEighth.setText(TuxGuitar.getProperty("composition.tripletfeel.eighth"));
-			tripletFeelEighth.setSelection(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH);
-			
-			final Button tripletFeelSixteenth = new Button(tripletFeel, SWT.RADIO);
-			tripletFeelSixteenth.setText(TuxGuitar.getProperty("composition.tripletfeel.sixteenth"));
-			tripletFeelSixteenth.setSelection(measure.getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH);
-			
-			//--------------------To End Checkbox-------------------------------
-			Group check = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			check.setLayout(new GridLayout());
-			check.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			check.setText(TuxGuitar.getProperty("options"));
-			
-			final Button toEnd = new Button(check, SWT.CHECK);
-			toEnd.setText(TuxGuitar.getProperty("composition.tripletfeel.to-the-end"));
-			toEnd.setSelection(true);
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOk = new Button(buttons, SWT.PUSH);
-			buttonOk.setText(TuxGuitar.getProperty("ok"));
-			buttonOk.setLayoutData(getButtonData());
-			buttonOk.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					final boolean toEndValue = toEnd.getSelection();
-					final int tripletFeel = getSelectedTripletFeel(tripletFeelNone, tripletFeelEighth, tripletFeelSixteenth);
-					
-					dialog.dispose();
-					try {
-						TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-							public void run() throws Throwable {
-								ActionLock.lock();
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-								setTripletFeel(tripletFeel,toEndValue);
-								TuxGuitar.instance().updateCache( true );
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								ActionLock.unlock();
-							}
-						});
-					} catch (Throwable throwable) {
-						MessageDialog.errorMessage(throwable);
-					}
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOk );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected int getSelectedTripletFeel(Button tripletFeelNone,Button tripletFeelEighth, Button tripletFeelSixteenth){
-		if(tripletFeelNone.getSelection()){
-			return TGMeasureHeader.TRIPLET_FEEL_NONE;
-		}else if(tripletFeelEighth.getSelection()){
-			return TGMeasureHeader.TRIPLET_FEEL_EIGHTH;
-		}else if(tripletFeelSixteenth.getSelection()){
-			return TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH;
-		}
-		return TGMeasureHeader.TRIPLET_FEEL_NONE;
-	}
-	
-	protected void setTripletFeel(int tripletFeel,boolean toEnd){
-		//comienza el undoable
-		UndoableChangeTripletFeel undoable = UndoableChangeTripletFeel.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		TGMeasureImpl measure = caret.getMeasure();
-		
-		getSongManager().changeTripletFeel(measure.getStart(),tripletFeel,toEnd);
-		
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		//actualizo la tablatura
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo(tripletFeel,toEnd));
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDivisionTypeAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDivisionTypeAction.java
deleted file mode 100644
index 9b90f4d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDivisionTypeAction.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGDivisionType;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeDivisionTypeAction extends Action{
-	public static final String NAME = "action.note.duration.change-division-type";
-	
-	public ChangeDivisionTypeAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		boolean isKeyEvent = false;
-		if(e instanceof KeyEvent){
-			isKeyEvent = true;
-		}
-		if(!isKeyEvent){
-			TGDivisionType divisionType = defaultDivisionType();
-			if(e.widget.getData() != null && e.widget.getData() instanceof TGDivisionType){
-				divisionType = (TGDivisionType)e.widget.getData();
-			}
-			
-			if(getSelectedDuration().getDivision().isEqual(divisionType)){
-				setDivisionType(noTuplet());
-			}else{
-				setDivisionType(divisionType);
-			}
-		}
-		else{
-			if(getSelectedDuration().getDivision().isEqual(TGDivisionType.NORMAL)){
-				setDivisionType(defaultDivisionType());
-			}else{
-				setDivisionType(noTuplet());
-			}
-		}
-		setDurations();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	private TGDivisionType noTuplet(){
-		TGDivisionType divisionType = getSongManager().getFactory().newDivisionType();
-		divisionType.setEnters(1);
-		divisionType.setTimes(1);
-		return divisionType;
-	}
-	
-	private TGDivisionType defaultDivisionType(){
-		TGDivisionType divisionType = getSongManager().getFactory().newDivisionType();
-		divisionType.setEnters(3);
-		divisionType.setTimes(2);
-		return divisionType;
-	}
-	
-	private void setDivisionType(TGDivisionType divisionType){
-		getSelectedDuration().getDivision().setEnters(divisionType.getEnters());
-		getSelectedDuration().getDivision().setTimes(divisionType.getTimes());
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDottedDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDottedDurationAction.java
deleted file mode 100644
index c306d18..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDottedDurationAction.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeDottedDurationAction extends Action{
-	public static final String NAME = "action.note.duration.change-dotted";
-	
-	public ChangeDottedDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		getSelectedDuration().setDotted(!getSelectedDuration().isDotted());
-		getSelectedDuration().setDoubleDotted(false);
-		
-		setDurations();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDoubleDottedDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDoubleDottedDurationAction.java
deleted file mode 100644
index 22363d2..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/ChangeDoubleDottedDurationAction.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeDoubleDottedDurationAction extends Action{
-	public static final String NAME = "action.note.duration.change-double-dotted";
-	
-	public ChangeDoubleDottedDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		getSelectedDuration().setDoubleDotted(!getSelectedDuration().isDoubleDotted());
-		getSelectedDuration().setDotted(false);
-		
-		setDurations();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/DecrementDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/DecrementDurationAction.java
deleted file mode 100644
index 40aacdb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/DecrementDurationAction.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class DecrementDurationAction extends Action{
-	public static final String NAME = "action.note.duration.decrement-duration";
-	
-	public DecrementDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGDuration duration = getEditor().getTablature().getCaret().getDuration();
-		if(duration.getValue() > TGDuration.WHOLE){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			this.changeDuration(duration.getValue() / 2);
-			
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			this.updateTablature();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		
-		return 0;
-	}
-	
-	private void changeDuration(int value) {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.getDuration().setValue(value);
-		caret.getDuration().setDotted(false);
-		caret.getDuration().setDoubleDotted(false);
-		caret.changeDuration(caret.getDuration().clone(getSongManager().getFactory()));
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/IncrementDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/IncrementDurationAction.java
deleted file mode 100644
index 6c4410c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/IncrementDurationAction.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class IncrementDurationAction extends Action{
-	public static final String NAME = "action.note.duration.increment-duration";
-	
-	public IncrementDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGDuration duration = getEditor().getTablature().getCaret().getDuration();
-		if(duration.getValue() < TGDuration.SIXTY_FOURTH){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			this.changeDuration(duration.getValue() * 2);
-			
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			this.updateTablature();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		
-		return 0;
-	}
-	
-	private void changeDuration(int value) {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.getDuration().setValue(value);
-		caret.getDuration().setDotted(false);
-		caret.getDuration().setDoubleDotted(false);
-		caret.changeDuration(caret.getDuration().clone(getSongManager().getFactory()));
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetEighthDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetEighthDurationAction.java
deleted file mode 100644
index 373cbdf..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetEighthDurationAction.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetEighthDurationAction extends Action{
-	public static final String NAME = "action.note.duration.set-eighth";
-	public static final int VALUE = TGDuration.EIGHTH;
-	
-	public SetEighthDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(getSelectedDuration().getValue() != VALUE){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSelectedDuration().setValue(VALUE);
-			getSelectedDuration().setDotted(false);
-			getSelectedDuration().setDoubleDotted(false);
-			setDurations();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		return 0;
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetHalfDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetHalfDurationAction.java
deleted file mode 100644
index 33d5819..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetHalfDurationAction.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetHalfDurationAction extends Action{
-	public static final String NAME = "action.note.duration.set-half";
-	public static final int VALUE = TGDuration.HALF;
-	
-	public SetHalfDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(getSelectedDuration().getValue() != VALUE){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSelectedDuration().setValue(VALUE);
-			getSelectedDuration().setDotted(false);
-			getSelectedDuration().setDoubleDotted(false);
-			setDurations();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		return 0;
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetQuarterDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetQuarterDurationAction.java
deleted file mode 100644
index 8d74e8e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetQuarterDurationAction.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetQuarterDurationAction extends Action{
-	public static final String NAME = "action.note.duration.set-quarter";
-	public static final int VALUE = TGDuration.QUARTER;
-	
-	public SetQuarterDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(getSelectedDuration().getValue() != VALUE){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSelectedDuration().setValue(VALUE);
-			getSelectedDuration().setDotted(false);
-			getSelectedDuration().setDoubleDotted(false);
-			setDurations();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		return 0;
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixteenthDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixteenthDurationAction.java
deleted file mode 100644
index 4d4007f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixteenthDurationAction.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetSixteenthDurationAction extends Action{
-	public static final String NAME = "action.note.duration.set-sixteenth";
-	public static final int VALUE = TGDuration.SIXTEENTH;
-	
-	public SetSixteenthDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(getSelectedDuration().getValue() != VALUE){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSelectedDuration().setValue(VALUE);
-			getSelectedDuration().setDotted(false);
-			getSelectedDuration().setDoubleDotted(false);
-			setDurations();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		return 0;
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixtyFourthDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixtyFourthDurationAction.java
deleted file mode 100644
index c397f85..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetSixtyFourthDurationAction.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetSixtyFourthDurationAction extends Action{
-	public static final String NAME = "action.note.duration.set-sixty-fourth";
-	public static final int VALUE = TGDuration.SIXTY_FOURTH;
-	
-	public SetSixtyFourthDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(getSelectedDuration().getValue() != VALUE){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSelectedDuration().setValue(VALUE);
-			getSelectedDuration().setDotted(false);
-			getSelectedDuration().setDoubleDotted(false);
-			setDurations();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		return 0;
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetThirtySecondDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetThirtySecondDurationAction.java
deleted file mode 100644
index afa9d19..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetThirtySecondDurationAction.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetThirtySecondDurationAction extends Action{
-	public static final String NAME = "action.note.duration.set-thirty-second";
-	public static final int VALUE = TGDuration.THIRTY_SECOND;
-	
-	public SetThirtySecondDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(getSelectedDuration().getValue() != VALUE){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSelectedDuration().setValue(VALUE);
-			getSelectedDuration().setDotted(false);
-			getSelectedDuration().setDoubleDotted(false);
-			setDurations();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		return 0;
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetWholeDurationAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetWholeDurationAction.java
deleted file mode 100644
index aa57f9b..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/duration/SetWholeDurationAction.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.duration;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetWholeDurationAction extends Action{
-	public static final String NAME = "action.note.duration.set-whole";
-	public static final int VALUE = TGDuration.WHOLE;
-	
-	public SetWholeDurationAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(getSelectedDuration().getValue() != VALUE){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSelectedDuration().setValue(VALUE);
-			getSelectedDuration().setDotted(false);
-			getSelectedDuration().setDoubleDotted(false);
-			setDurations();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		return 0;
-	}
-	
-	private void setDurations() {
-		Caret caret = getEditor().getTablature().getCaret();
-		caret.changeDuration(getSelectedDuration().clone(getSongManager().getFactory()));
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public TGDuration getSelectedDuration(){
-		return getEditor().getTablature().getCaret().getDuration();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/RedoAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/RedoAction.java
deleted file mode 100644
index 7e655bc..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/RedoAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.edit;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class RedoAction extends Action{
-	public static final String NAME = "action.edit.redo";
-	
-	public RedoAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		try {
-			if(TuxGuitar.instance().getUndoableManager().canRedo()){
-				TuxGuitar.instance().getUndoableManager().redo();
-			}
-		} catch (CannotRedoException e1) {
-			e1.printStackTrace();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetMouseModeEditionAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetMouseModeEditionAction.java
deleted file mode 100644
index ef680f8..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetMouseModeEditionAction.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.edit;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetMouseModeEditionAction extends Action{
-	public static final String NAME = "action.edit.set-mouse-mode-edition";
-	
-	public SetMouseModeEditionAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		getEditor().getTablature().getEditorKit().setMouseMode(EditorKit.MOUSE_MODE_EDITION);
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetMouseModeSelectionAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetMouseModeSelectionAction.java
deleted file mode 100644
index 806dbf5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetMouseModeSelectionAction.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.edit;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetMouseModeSelectionAction extends Action{
-	public static final String NAME = "action.edit.set-mouse-mode-selection";
-	
-	public SetMouseModeSelectionAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		getEditor().getTablature().getEditorKit().setMouseMode(EditorKit.MOUSE_MODE_SELECTION);
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetNaturalKeyAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetNaturalKeyAction.java
deleted file mode 100644
index 01edeca..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetNaturalKeyAction.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.edit;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetNaturalKeyAction extends Action{
-	public static final String NAME = "action.edit.set-natural-key";
-	
-	public SetNaturalKeyAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		getEditor().getTablature().getEditorKit().setNatural(!getEditor().getTablature().getEditorKit().isNatural());
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetVoice1Action.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetVoice1Action.java
deleted file mode 100644
index e08e9fb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetVoice1Action.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.edit;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetVoice1Action extends Action{
-	public static final String NAME = "action.edit.voice-1";
-	
-	public SetVoice1Action() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		getEditor().getTablature().getCaret().setVoice(0);
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetVoice2Action.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetVoice2Action.java
deleted file mode 100644
index 8a1b7d9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/SetVoice2Action.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.edit;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetVoice2Action extends Action{
-	public static final String NAME = "action.edit.voice-2";
-	
-	public SetVoice2Action() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		getEditor().getTablature().getCaret().setVoice(1);
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/UndoAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/UndoAction.java
deleted file mode 100644
index dafd9e7..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/edit/UndoAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.edit;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class UndoAction extends Action{
-	public static final String NAME = "action.edit.undo";
-	
-	public UndoAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		try {
-			if(TuxGuitar.instance().getUndoableManager().canUndo()){
-				TuxGuitar.instance().getUndoableManager().undo();
-			}
-		} catch (CannotUndoException e1) {
-			e1.printStackTrace();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeAccentuatedNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeAccentuatedNoteAction.java
deleted file mode 100644
index 31c47d5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeAccentuatedNoteAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeAccentuatedNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-accentuated";
-	
-	public ChangeAccentuatedNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeAccentuatedNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeBendNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeBendNoteAction.java
deleted file mode 100644
index 90e9def..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeBendNoteAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.effects.BendEditor;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectBend;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeBendNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-bend";
-	
-	public ChangeBendNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			changeBend(new BendEditor().show(getEditor().getTablature().getShell(),note));
-		}
-		return 0;
-	}
-	
-	private void changeBend(TGEffectBend effect){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeBendNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeDeadNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeDeadNoteAction.java
deleted file mode 100644
index 7885e45..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeDeadNoteAction.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGNote;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeDeadNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-dead";
-	
-	public ChangeDeadNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		TGNote note = caret.getSelectedNote();
-		if(note == null){
-			note = getSongManager().getFactory().newNote();
-			note.setValue(0);
-			note.setVelocity(caret.getVelocity());
-			note.setString(caret.getSelectedString().getNumber());
-			
-			TGDuration duration = getSongManager().getFactory().newDuration();
-			caret.getDuration().copy(duration);
-			
-			getSongManager().getMeasureManager().addNote(caret.getMeasure(),caret.getPosition(),note,duration,caret.getVoice());
-		}
-		getSongManager().getMeasureManager().changeDeadNote(note);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeFadeInAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeFadeInAction.java
deleted file mode 100644
index 2e5433f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeFadeInAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeFadeInAction extends Action{
-	public static final String NAME = "action.note.effect.change-fade-in";
-	
-	public ChangeFadeInAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeFadeIn(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeGhostNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeGhostNoteAction.java
deleted file mode 100644
index 06cac90..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeGhostNoteAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeGhostNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-ghost";
-	
-	public ChangeGhostNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeGhostNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeGraceNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeGraceNoteAction.java
deleted file mode 100644
index aa6827f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeGraceNoteAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.effects.GraceEditor;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeGraceNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-grace";
-	
-	public ChangeGraceNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			changeGrace(new GraceEditor().show(note));
-		}
-		return 0;
-	}
-	
-	private void changeGrace(TGEffectGrace effect){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeGraceNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHammerNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHammerNoteAction.java
deleted file mode 100644
index fe8c6ab..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHammerNoteAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeHammerNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-hammer";
-	
-	public ChangeHammerNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeHammerNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHarmonicNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHarmonicNoteAction.java
deleted file mode 100644
index e8dfe76..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHarmonicNoteAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.effects.HarmonicEditor;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeHarmonicNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-harmonic";
-	
-	public ChangeHarmonicNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			changeHarmonic(new HarmonicEditor().show(note));
-		}
-		return 0;
-	}
-	
-	private void changeHarmonic(TGEffectHarmonic effect){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeHarmonicNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHeavyAccentuatedNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHeavyAccentuatedNoteAction.java
deleted file mode 100644
index 1eba5da..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeHeavyAccentuatedNoteAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeHeavyAccentuatedNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-heavy-accentuated";
-	
-	public ChangeHeavyAccentuatedNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeHeavyAccentuatedNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangePalmMuteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangePalmMuteAction.java
deleted file mode 100644
index b2b3baa..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangePalmMuteAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangePalmMuteAction extends Action{
-	public static final String NAME = "action.note.effect.change-palm-mute";
-	
-	public ChangePalmMuteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changePalmMute(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangePoppingAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangePoppingAction.java
deleted file mode 100644
index ef46ca9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangePoppingAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangePoppingAction extends Action{
-	public static final String NAME = "action.note.effect.change-popping";
-	
-	public ChangePoppingAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changePopping(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeSlappingAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeSlappingAction.java
deleted file mode 100644
index 2cd3b8c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeSlappingAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeSlappingAction extends Action{
-	public static final String NAME = "action.note.effect.change-slapping";
-	
-	public ChangeSlappingAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeSlapping(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeSlideNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeSlideNoteAction.java
deleted file mode 100644
index fe01360..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeSlideNoteAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeSlideNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-slide";
-	
-	public ChangeSlideNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeSlideNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeStaccatoAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeStaccatoAction.java
deleted file mode 100644
index e107be0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeStaccatoAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeStaccatoAction extends Action{
-	public static final String NAME = "action.note.effect.change-staccato";
-	
-	public ChangeStaccatoAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeStaccato(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTappingAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTappingAction.java
deleted file mode 100644
index 50d78a4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTappingAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeTappingAction extends Action{
-	public static final String NAME = "action.note.effect.change-tapping";
-	
-	public ChangeTappingAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeTapping(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTremoloBarAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTremoloBarAction.java
deleted file mode 100644
index cb419db..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTremoloBarAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.effects.TremoloBarEditor;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeTremoloBarAction extends Action{
-	public static final String NAME = "action.note.effect.change-tremolo-bar";
-	
-	public ChangeTremoloBarAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			changeTremoloBar(new TremoloBarEditor().show(getEditor().getTablature().getShell(),note));
-		}
-		return 0;
-	}
-	
-	private void changeTremoloBar(TGEffectTremoloBar effect){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeTremoloBar(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTremoloPickingAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTremoloPickingAction.java
deleted file mode 100644
index 58dad4c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTremoloPickingAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.effects.TremoloPickingEditor;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeTremoloPickingAction extends Action{
-	public static final String NAME = "action.note.effect.change-tremolo-picking";
-	
-	public ChangeTremoloPickingAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			changeTremoloPicking(new TremoloPickingEditor().show(note));
-		}
-		return 0;
-	}
-	
-	private void changeTremoloPicking(TGEffectTremoloPicking effect){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeTremoloPicking(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTrillNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTrillNoteAction.java
deleted file mode 100644
index 1452b79..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeTrillNoteAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.effects.TrillEditor;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeTrillNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-trill";
-	
-	public ChangeTrillNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			changeTrill(new TrillEditor().show(note));
-		}
-		return 0;
-	}
-	
-	private void changeTrill(TGEffectTrill effect){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeTrillNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber(),effect);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeVibratoNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeVibratoNoteAction.java
deleted file mode 100644
index 2738ebf..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/effects/ChangeVibratoNoteAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.effects;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeVibratoNoteAction extends Action{
-	public static final String NAME = "action.note.effect.change-vibrato";
-	
-	public ChangeVibratoNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		getSongManager().getMeasureManager().changeVibratoNote(caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ExitAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ExitAction.java
deleted file mode 100644
index 08768a4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ExitAction.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class ExitAction extends Action {
-	public static final String NAME = "action.file.exit";
-	
-	public ExitAction() {
-		super(NAME, AUTO_LOCK | KEY_BINDING_AVAILABLE );
-	}
-	
-	protected int execute(TypedEvent e){
-		ActionLock.unlock();
-		TuxGuitar.instance().getShell().close();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ExportSongAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ExportSongAction.java
deleted file mode 100644
index 1b8b573..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ExportSongAction.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.io.base.TGLocalFileExporter;
-import org.herac.tuxguitar.io.base.TGRawExporter;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class ExportSongAction extends Action {
-	public static final String NAME = "action.file.export";
-	
-	public ExportSongAction() {
-		super(NAME, AUTO_LOCK | AUTO_UPDATE );
-	}
-	
-	protected int execute(TypedEvent e){
-		Object data = e.widget.getData(); 
-		if(! (data instanceof TGRawExporter) ){
-			return AUTO_UNLOCK;
-		}
-		
-		final TGRawExporter exporter = (TGRawExporter)data;
-		if( exporter instanceof TGLocalFileExporter ){
-			return this.processLocalFileExporter( (TGLocalFileExporter)exporter );
-		}
-		return this.processRawExporter( exporter );
-		/*
-		if(!exporter.configure(false)){
-			return AUTO_UNLOCK;
-		}
-		
-		final String fileName = FileActionUtils.chooseFileName(exporter.getFileFormat());
-		if(fileName == null){
-			return AUTO_UNLOCK;
-		}
-		
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					FileActionUtils.exportSong(exporter, fileName);
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-		
-		return 0;
-		*/
-	}
-	
-	private int processLocalFileExporter( final TGLocalFileExporter exporter ){
-		if(!exporter.configure(false)){
-			return AUTO_UNLOCK;
-		}
-		
-		final String fileName = FileActionUtils.chooseFileName(exporter.getFileFormat());
-		if(fileName == null){
-			return AUTO_UNLOCK;
-		}
-		
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					FileActionUtils.exportSong(exporter, fileName);
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-		
-		return 0;
-	}
-	
-	private int processRawExporter( final TGRawExporter exporter ){
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					FileActionUtils.exportSong(exporter);
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/FileActionUtils.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/FileActionUtils.java
deleted file mode 100644
index 255760e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/FileActionUtils.java
+++ /dev/null
@@ -1,188 +0,0 @@
-package org.herac.tuxguitar.gui.actions.file;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-import java.util.Iterator;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-import org.herac.tuxguitar.gui.util.FileChooser;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.io.base.TGFileFormat;
-import org.herac.tuxguitar.io.base.TGFileFormatException;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.io.base.TGOutputStreamBase;
-import org.herac.tuxguitar.io.base.TGLocalFileExporter;
-import org.herac.tuxguitar.io.base.TGLocalFileImporter;
-import org.herac.tuxguitar.io.base.TGRawExporter;
-import org.herac.tuxguitar.io.base.TGRawImporter;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGSong;
-
-public class FileActionUtils {
-	
-	public static String getFileName(){
-		if (TuxGuitar.instance().getFileHistory().isNewFile() || !TuxGuitar.instance().getFileHistory().isLocalFile()) {
-			return chooseFileName();
-		}
-		String path = TuxGuitar.instance().getFileHistory().getCurrentFilePath();
-		String file = TuxGuitar.instance().getFileHistory().getCurrentFileName(FileChooser.DEFAULT_SAVE_FILENAME);
-		String fullPath = path + File.separator + file;
-		return ( isSupportedFormat(fullPath) ? fullPath : chooseFileName() );
-	}
-	
-	public static String chooseFileName(){
-		String fileName = FileChooser.instance().save(TuxGuitar.instance().getShell(),TGFileFormatManager.instance().getOutputFormats());
-		if (fileName != null) {
-			if (!isSupportedFormat(fileName)) {
-				fileName += TGFileFormatManager.DEFAULT_EXTENSION;
-			}
-			if(!canWrite(fileName)){
-				return null;
-			}
-		}
-		return fileName;
-	}
-	
-	public static String chooseFileName(TGFileFormat format){
-		String fileName = FileChooser.instance().save(TuxGuitar.instance().getShell(),format);
-		if (fileName != null && !canWrite(fileName)){
-			return null;
-		}
-		return fileName;
-	}
-	
-	public static boolean isSupportedFormat(String path) {
-		if(path != null){
-			int index = path.lastIndexOf(".");
-			if(index > 0){
-				Iterator it = TGFileFormatManager.instance().getOutputStreams();
-				while(it.hasNext()){
-					TGOutputStreamBase writer = (TGOutputStreamBase)it.next();
-					if(writer.isSupportedExtension(path.substring(index))){
-						return true;
-					}
-				}
-			}
-		}
-		return false;
-	}
-	
-	public static boolean canWrite(String fileName){
-		boolean canWrite = true;
-		File file = new File(fileName);
-		if (file.exists()) {
-			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.overwrite-question"));
-			confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
-			if (confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO , ConfirmDialog.BUTTON_NO ) == ConfirmDialog.STATUS_NO) {
-				canWrite = false;
-			}
-		}
-		return canWrite;
-	}
-	
-	public static void open(final String fileName){
-		try {
-			TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),new FileInputStream(fileName));
-			TuxGuitar.instance().fireNewSong(song,new File(fileName).toURI().toURL());
-		}catch (Throwable throwable) {
-			TuxGuitar.instance().newSong();
-			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{fileName}),throwable));
-		}
-	}
-	
-	public static void save(final String fileName){
-		try {
-			TGSongManager manager = TuxGuitar.instance().getSongManager();
-			TGFileFormatManager.instance().getWriter().write(manager.getFactory(),manager.getSong(), fileName);
-			TuxGuitar.instance().fireSaveSong(new File(fileName).toURI().toURL());
-		} catch (Throwable throwable) {
-			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.save.error", new String[]{fileName}),throwable));
-		}
-	}
-	
-	public static void open(final URL url){
-		try {
-			InputStream stream = (isLocalFile(url) ? url.openStream() : getInputStream(url.openStream()));
-			TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream);
-			TuxGuitar.instance().fireNewSong(song,url);
-		}catch (Throwable throwable) {
-			TuxGuitar.instance().newSong();
-			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{url.toString()}),throwable));
-		}
-	}
-	
-	public static void exportSong(TGRawExporter exporter){
-		try {
-			TGSongManager manager = TuxGuitar.instance().getSongManager();
-			exporter.exportSong(manager.getSong());
-		} catch (Throwable throwable) {
-			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.export.error"),throwable));
-		}
-	}
-	
-	public static void exportSong(TGLocalFileExporter exporter, String path){
-		try {
-			OutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(path)));
-			TGSongManager manager = TuxGuitar.instance().getSongManager();
-			exporter.init( manager.getFactory() , stream );
-			exporter.exportSong(manager.getSong());
-		} catch (Throwable throwable) {
-			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.export.error", new String[]{path}),throwable));
-		}
-	}
-	
-	public static void importSong(final TGRawImporter importer){
-		try {
-			TGSong song = importer.importSong();
-			TuxGuitar.instance().fireNewSong(song,null);
-		}catch (Throwable throwable) {
-			TuxGuitar.instance().newSong();
-			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.import.error"),throwable));
-		}
-	}
-	
-	public static void importSong(final TGLocalFileImporter importer, String path){
-		try {
-			InputStream stream = new BufferedInputStream(new FileInputStream(new File(path)));
-			importer.init(TuxGuitar.instance().getSongManager().getFactory(),stream);
-			TGSong song = importer.importSong();
-			TuxGuitar.instance().fireNewSong(song,null);
-		}catch (Throwable throwable) {
-			TuxGuitar.instance().newSong();
-			MessageDialog.errorMessage(new TGFileFormatException(TuxGuitar.getProperty("file.import.error", new String[]{path}),throwable));
-		}
-	}
-	
-	private static boolean isLocalFile(URL url){
-		try {
-			if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){
-				return true;
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return false;
-	}
-	
-	private static InputStream getInputStream(InputStream in)throws Throwable {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		int read = 0;
-		while((read = in.read()) != -1){
-			out.write(read);
-		}
-		byte[] bytes = out.toByteArray();
-		in.close();
-		out.close();
-		out.flush();
-		return new ByteArrayInputStream(bytes);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ImportSongAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ImportSongAction.java
deleted file mode 100644
index f799af7..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/ImportSongAction.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import java.io.File;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-import org.herac.tuxguitar.gui.util.FileChooser;
-import org.herac.tuxguitar.io.base.TGLocalFileImporter;
-import org.herac.tuxguitar.io.base.TGRawImporter;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class ImportSongAction extends Action {
-	public static final String NAME = "action.file.import";
-	
-	public ImportSongAction() {
-		super(NAME, AUTO_LOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(final TypedEvent event){
-		TuxGuitar.instance().getPlayer().reset();
-		
-		if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
-			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
-			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
-			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
-			if(status == ConfirmDialog.STATUS_CANCEL){
-				return AUTO_UNLOCK;
-			}
-			if(status == ConfirmDialog.STATUS_YES){
-				final String fileName = FileActionUtils.getFileName();
-				if(fileName == null){
-					return AUTO_UNLOCK;
-				}
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-				new Thread(new Runnable() {
-					public void run() {
-						if(!TuxGuitar.isDisposed()){
-							FileActionUtils.save(fileName);
-							new SyncThread(new Runnable() {
-								public void run() {
-									if(!TuxGuitar.isDisposed()){
-										TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-										processImporter(event.widget.getData());
-									}
-								}
-							}).start();
-						}
-					}
-				}).start();
-				return 0;
-			}
-		}
-		processImporter(event.widget.getData());
-		
-		return 0;
-	}
-	
-	protected void processImporter(Object importer){
-		if( importer instanceof TGLocalFileImporter ){
-			this.processLocalFileImporter( (TGLocalFileImporter)importer );
-		}else if( importer instanceof TGRawImporter ){
-			this.processRawImporter( (TGRawImporter)importer );
-		}
-	}
-	
-	private void processLocalFileImporter(final TGLocalFileImporter importer){
-		final String path = FileChooser.instance().open(TuxGuitar.instance().getShell(),importer.getFileFormat());
-		if(!isValidFile(path) || !importer.configure(false)){
-			ActionLock.unlock();
-			return;
-		}
-		
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					FileActionUtils.importSong(importer, path);
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-	}
-	
-	private void processRawImporter( final TGRawImporter importer ){
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					FileActionUtils.importSong(importer);
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-	}
-	
-	protected boolean isValidFile( String path ){
-		if( path != null ){
-			File file = new File( path );
-			return ( file.exists() && file.isFile() );
-		}
-		return false;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/NewFileAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/NewFileAction.java
deleted file mode 100644
index 42ae5dc..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/NewFileAction.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class NewFileAction extends Action{
-	public static final String NAME = "action.file.new";
-	
-	public NewFileAction() {
-		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
-			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
-			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
-			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
-			if(status == ConfirmDialog.STATUS_CANCEL){
-				return AUTO_UNLOCK;
-			}
-			if(status == ConfirmDialog.STATUS_YES){
-				final String fileName = FileActionUtils.getFileName();
-				if(fileName == null){
-					return AUTO_UNLOCK;
-				}
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-				new Thread(new Runnable() {
-					public void run() {
-						if(!TuxGuitar.isDisposed()){
-							FileActionUtils.save(fileName);
-							TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-							new SyncThread(new Runnable() {
-								public void run() {
-									if(!TuxGuitar.isDisposed()){
-										newSong();
-									}
-								}
-							}).start();
-						}
-					}
-				}).start();
-				return 0;
-			}
-		}
-		newSong();
-		
-		return 0;
-	}
-	
-	protected void newSong(){
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					TuxGuitar.instance().newSong();
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/OpenFileAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/OpenFileAction.java
deleted file mode 100644
index cd99b22..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/OpenFileAction.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import java.io.File;
-import java.net.URL;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-import org.herac.tuxguitar.gui.util.FileChooser;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class OpenFileAction extends Action {
-	public static final String NAME = "action.file.open";
-	
-	public OpenFileAction() {
-		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(final TypedEvent event){
-		TuxGuitar.instance().getPlayer().reset();
-		
-		final Object data = event.widget.getData();
-		if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
-			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
-			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
-			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
-			if(status == ConfirmDialog.STATUS_CANCEL){
-				return AUTO_UNLOCK;
-			}
-			if(status == ConfirmDialog.STATUS_YES){
-				final String fileName = FileActionUtils.getFileName();
-				if(fileName == null){
-					return AUTO_UNLOCK;
-				}
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-				new Thread(new Runnable() {
-					public void run() {
-						if(!TuxGuitar.isDisposed()){
-							FileActionUtils.save(fileName);
-							new SyncThread(new Runnable() {
-								public void run() {
-									if(!TuxGuitar.isDisposed()){
-										TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-										openFile( data );
-									}
-								}
-							}).start();
-						}
-					}
-				}).start();
-				return 0;
-			}
-		}
-		openFile( data );
-		
-		return 0;
-	}
-	
-	protected void openFile(Object data){
-		final URL url = getOpenFileName(data);
-		if(url == null){
-			ActionLock.unlock();
-			return;
-		}
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		try {
-			TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
-					new Thread(new Runnable() {
-						public void run() {
-							if(!TuxGuitar.isDisposed()){
-								FileActionUtils.open(url);
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								ActionLock.unlock();
-							}
-						}
-					}).start();
-				}
-			});
-		} catch (Throwable e) {
-			e.printStackTrace();
-		}
-	}
-	
-	protected URL getOpenFileName(Object data){
-		try{
-			if(data instanceof URL){
-				TuxGuitar.instance().getFileHistory().setChooserPath( (URL)data );
-				return (URL)data;
-			}
-			String path = FileChooser.instance().open(TuxGuitar.instance().getShell(),TGFileFormatManager.instance().getInputFormats());
-			if(path != null){
-				File file = new File(path);
-				if( file.exists() && file.isFile() ){
-					return file.toURI().toURL();
-				}
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/OpenURLAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/OpenURLAction.java
deleted file mode 100644
index 672ec7c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/OpenURLAction.java
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import java.net.URL;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class OpenURLAction extends Action {
-	
-	public static final String NAME = "action.file.open-url";
-	
-	public OpenURLAction() {
-		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(final TypedEvent event){
-		TuxGuitar.instance().getPlayer().reset();
-		
-		if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
-			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
-			confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
-			int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
-			if(status == ConfirmDialog.STATUS_CANCEL){
-				return AUTO_UNLOCK;
-			}
-			if(status == ConfirmDialog.STATUS_YES){
-				final String fileName = FileActionUtils.getFileName();
-				if(fileName == null){
-					return AUTO_UNLOCK;
-				}
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-				new Thread(new Runnable() {
-					public void run() {
-						if(!TuxGuitar.isDisposed()){
-							FileActionUtils.save(fileName);
-							new SyncThread(new Runnable() {
-								public void run() {
-									if(!TuxGuitar.isDisposed()){
-										TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-										openURL(event.widget.getData());
-									}
-								}
-							}).start();
-						}
-					}
-				}).start();
-				return 0;
-			}
-		}
-		openURL(event.widget.getData());
-		
-		return 0;
-	}
-	
-	protected void openURL(Object data){
-		final URL url = getURL(data);
-		if(url == null){
-			ActionLock.unlock();
-			return;
-		}
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					FileActionUtils.open(url);
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-	}
-	
-	protected URL getURL(Object data){
-		if(data instanceof URL){
-			return (URL)data;
-		}
-		return new URLDialog().openDialog();
-	}
-	
-	protected class URLDialog{
-		
-		protected URL url;
-		
-		protected URL openDialog(){
-			this.url = null;
-			
-			final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("file.open-url"));
-			
-			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			group.setLayout(new GridLayout());
-			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			group.setText(TuxGuitar.getProperty("file.open-url"));
-			
-			Composite composite = new Composite(group, SWT.NONE);
-			composite.setLayout(new GridLayout(2,false));
-			composite.setLayoutData(getMainData());
-			
-			final Label label = new Label(composite,SWT.LEFT);
-			label.setText(TuxGuitar.getProperty("url") + ":");
-			label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
-			
-			final Text url = new Text(composite,SWT.BORDER | SWT.SINGLE);
-			url.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					try {
-						URLDialog.this.url = new URL(url.getText());
-						dialog.dispose();
-					} catch (Throwable throwable) {
-						MessageDialog.errorMessage(throwable);
-					}
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-			
-			return this.url;
-		}
-		
-		private GridData getMainData(){
-			GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-			data.minimumWidth = 450;
-			return data;
-		}
-		
-		private GridData getButtonData(){
-			GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-			data.minimumWidth = 80;
-			data.minimumHeight = 25;
-			return data;
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/PrintAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/PrintAction.java
deleted file mode 100644
index ab91800..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/PrintAction.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.printing.PrintDialog;
-import org.eclipse.swt.printing.Printer;
-import org.eclipse.swt.printing.PrinterData;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.TGFactoryImpl;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-import org.herac.tuxguitar.gui.editors.tab.layout.PrinterViewLayout;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.printer.PrintDocument;
-import org.herac.tuxguitar.gui.printer.PrintStyles;
-import org.herac.tuxguitar.gui.printer.PrintStylesDialog;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class PrintAction extends Action{
-	public static final String NAME = "action.file.print";
-	
-	public PrintAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		try{
-			final PrintStyles data = PrintStylesDialog.open(TuxGuitar.instance().getShell());
-			if(data != null){
-				PrintDialog dialog = new PrintDialog(TuxGuitar.instance().getShell(), SWT.NULL);
-				PrinterData printerData = dialog.open();
-				
-				if (printerData != null) {
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-					
-					this.print(printerData, data);
-				}
-			}
-		}catch(Throwable throwable ){
-			MessageDialog.errorMessage(throwable);
-		}
-		return 0;
-	}
-	
-	public void print(final PrinterData printerData ,final PrintStyles data){
-		try{
-			new Thread(new Runnable() {
-				public void run() {
-					try{
-						final TGSongManager manager = new TGSongManager();
-						manager.setFactory(new TGFactoryImpl());
-						manager.setSong(getSongManager().getSong().clone(manager.getFactory()));
-						
-						new SyncThread(new Runnable() {
-							public void run() {
-								try{
-									Shell shell = new Shell();
-									Printer printer = new Printer(printerData);
-									
-									Tablature tablature = new Tablature(shell);
-									tablature.setSongManager(manager);
-									
-									Rectangle bounds = getPrinterArea(printer,0.5);
-									
-									PrinterViewLayout layout = new PrinterViewLayout(tablature,data, getPrinterScale(printer));
-									
-									print(printer, printerData, layout , bounds);
-								}catch(Throwable throwable ){
-									MessageDialog.errorMessage(throwable);
-								}
-							}
-						}).start();
-					}catch(Throwable throwable ){
-						MessageDialog.errorMessage(throwable);
-					}
-				}
-			}).start();
-		}catch(Throwable throwable ){
-			MessageDialog.errorMessage(throwable);
-		}
-	}
-	
-	protected void print(final Printer printer,final PrinterData printerData ,final PrinterViewLayout layout, final Rectangle bounds){
-		new Thread(new Runnable() {
-			public void run() {
-				try{
-					layout.getTablature().updateTablature();
-					layout.makeDocument(new PrintDocumentImpl(layout,printer, printerData, bounds));
-					//new SyncThread(new Runnable() {
-					//	public void run() {
-					//		try{
-					//			layout.makeDocument(new PrintDocumentImpl(layout,printer, bounds));
-					//		}catch(Throwable throwable ){
-					//			MessageDialog.errorMessage(throwable);
-					//		}
-					//	}
-					//}).start();
-				}catch(Throwable throwable ){
-					MessageDialog.errorMessage(throwable);
-				}
-			}
-		}).start();
-	}
-	
-	protected Rectangle getPrinterArea(Printer printer,double margin) {
-		Rectangle clientArea = printer.getClientArea();
-		Rectangle trim = printer.computeTrim(0, 0, 0, 0);
-		Point dpi = printer.getDPI();
-		
-		int x = (int) (margin * dpi.x) - trim.x;
-		int y = (int) (margin * dpi.y) - trim.y;
-		int width = clientArea.width + trim.width - (int) (margin * dpi.x) - trim.x;
-		int height = clientArea.height + trim.height - (int) (margin * dpi.y) - trim.y;
-		
-		return new Rectangle(x,y,width,height);
-	}
-	
-	protected float getPrinterScale(Printer printer) {
-		Point dpi = printer.getDPI();
-		if( dpi != null ){
-			return ( dpi.x / 100.0f );
-		}
-		return 1.0f;
-	}
-	
-	private class PrintDocumentImpl implements PrintDocument{
-		
-		private Printer printer;
-		private PrinterData printerData;
-		private PrinterViewLayout layout;
-		private TGPainter painter;
-		private Rectangle bounds;
-		private boolean started;
-		
-		public PrintDocumentImpl(PrinterViewLayout layout, Printer printer,PrinterData printerData, Rectangle bounds){
-			this.layout = layout;
-			this.printer = printer;
-			this.printerData = printerData;
-			this.bounds = bounds;
-			this.painter = new TGPainter();
-		}
-		
-		public TGPainter getPainter() {
-			return this.painter;
-		}
-		
-		public Rectangle getBounds(){
-			return this.bounds;
-		}
-		
-		public void pageStart() {
-			if(this.started){
-				this.printer.startPage();
-				this.painter.init(new GC(this.printer));
-			}
-		}
-		
-		public void pageFinish() {
-			if(this.started){
-				this.painter.dispose();
-				this.printer.endPage();
-			}
-		}
-		
-		public void start() {
-			this.started = this.printer.startJob(getJobName());
-		}
-		
-		public void finish() {
-			if(this.started){
-				this.printer.endJob();
-				this.started = false;
-				try {
-					TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable(){
-						public void run() {
-							dispose();
-						}
-					});
-				} catch (Throwable e) {
-					e.printStackTrace();
-				}
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-			}
-		}
-		
-		public boolean isPaintable(int page){
-			if(this.printerData.scope == PrinterData.PAGE_RANGE){
-				if(this.printerData.startPage > 0 && this.printerData.startPage > page){
-					return false;
-				}
-				if(this.printerData.endPage > 0 && this.printerData.endPage < page){
-					return false;
-				}
-			}
-			return true;
-		}
-		
-		public String getJobName(){
-			String prefix = TuxGuitar.APPLICATION_NAME;
-			String song = this.layout.getSongManager().getSong().getName();
-			return ( song != null && song.length() > 0 ? (prefix + "-" + song) : prefix );
-		}
-		
-		public void dispose(){
-			if(!this.printer.isDisposed()){
-				this.printer.dispose();
-			}
-			if(!this.layout.getTablature().isDisposed() && !this.layout.getTablature().getShell().isDisposed()){
-				this.layout.getTablature().getShell().dispose();
-			}
-			if(!this.layout.getTablature().isDisposed()){
-				this.layout.getTablature().dispose();
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/PrintPreviewAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/PrintPreviewAction.java
deleted file mode 100644
index 8fb1b44..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/PrintPreviewAction.java
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.TGFactoryImpl;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-import org.herac.tuxguitar.gui.editors.tab.layout.PrinterViewLayout;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.printer.PrintDocument;
-import org.herac.tuxguitar.gui.printer.PrintPreview;
-import org.herac.tuxguitar.gui.printer.PrintStyles;
-import org.herac.tuxguitar.gui.printer.PrintStylesDialog;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class PrintPreviewAction extends Action{
-	public static final String NAME = "action.file.print-preview";
-	
-	public PrintPreviewAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		try{
-			final PrintStyles data = PrintStylesDialog.open(TuxGuitar.instance().getShell());
-			if(data != null){
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-				
-				this.printPreview(data);
-			}
-		}catch(Throwable throwable){
-			MessageDialog.errorMessage(throwable);
-		}
-		return 0;
-	}
-	
-	public void printPreview(final PrintStyles data){
-		new Thread(new Runnable() {
-			public void run() {
-				try{
-					final TGSongManager manager = new TGSongManager();
-					manager.setFactory(new TGFactoryImpl());
-					manager.setSong(getSongManager().getSong().clone(manager.getFactory()));
-				
-					printPreview(manager,data);
-				}catch(Throwable throwable){
-					MessageDialog.errorMessage(throwable);
-				}
-			}
-		}).start();
-	}
-	
-	public void printPreview(final TGSongManager manager, final PrintStyles data){
-		new SyncThread(new Runnable() {
-			public void run() {
-				try{
-					Tablature tablature = new Tablature(TuxGuitar.instance().getShell());
-					tablature.setSongManager(manager);
-					
-					PrinterViewLayout layout = new PrinterViewLayout(tablature,data, 1f);
-					
-					printPreview( layout );
-				}catch(Throwable throwable){
-					MessageDialog.errorMessage(throwable);
-				}
-			}
-		}).start();
-	}
-	
-	public void printPreview(final PrinterViewLayout layout){
-		new Thread(new Runnable() {
-			public void run() {
-				try{
-					layout.getTablature().updateTablature();
-					layout.makeDocument(new PrintDocumentImpl(layout, new Rectangle(0,0,850,1050)));
-					//new SyncThread(new Runnable() {
-					//	public void run() {
-					//		layout.makeDocument(new PrintDocumentImpl(layout, new Rectangle(0,0,850,1050)));
-					//	}
-					//}).start();
-				}catch(Throwable throwable){
-					MessageDialog.errorMessage(throwable);
-				}
-			}
-		}).start();
-	}
-	
-	private class PrintDocumentImpl implements PrintDocument{
-		
-		private PrinterViewLayout layout;
-		private TGPainter painter;
-		private Rectangle bounds;
-		private List pages;
-		
-		public PrintDocumentImpl(PrinterViewLayout layout, Rectangle bounds){
-			this.layout = layout;
-			this.bounds = bounds;
-			this.painter = new TGPainter();
-			this.pages = new ArrayList();
-		}
-		
-		public TGPainter getPainter() {
-			return this.painter;
-		}
-		
-		public Rectangle getBounds(){
-			return this.bounds;
-		}
-		
-		public void pageStart() {
-			Image page = new Image(this.layout.getTablature().getDisplay(),this.bounds.width - this.bounds.x, this.bounds.height - this.bounds.y);
-			this.painter.init( page );
-			this.pages.add( page );
-		}
-		
-		public void pageFinish() {
-			this.painter.dispose();
-		}
-		
-		public void start() {
-			// Not implemented
-		}
-		
-		public void finish() {
-			final Tablature tablature = this.layout.getTablature();
-			final Rectangle bounds = this.bounds;
-			final List pages = this.pages;
-			try {
-				TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable(){
-					public void run() {
-						tablature.dispose();
-						PrintPreview preview = new PrintPreview(pages,bounds);
-						preview.showPreview(getEditor().getTablature().getShell());
-						Iterator it = pages.iterator();
-						while(it.hasNext()){
-							Image image = (Image)it.next();
-							image.dispose();
-						}
-					}
-				});
-			} catch (Throwable e) {
-				e.printStackTrace();
-			}
-		}
-		
-		public boolean isPaintable(int page) {
-			return true;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/SaveAsFileAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/SaveAsFileAction.java
deleted file mode 100644
index bc0c321..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/SaveAsFileAction.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class SaveAsFileAction extends Action {
-	public static final String NAME = "action.file.save-as";
-	
-	public SaveAsFileAction() {
-		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE );
-	}
-	
-	protected int execute(TypedEvent e){
-		final String fileName = FileActionUtils.chooseFileName();
-		if(fileName == null){
-			return AUTO_UNLOCK;
-		}
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					FileActionUtils.save(fileName);
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/SaveFileAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/SaveFileAction.java
deleted file mode 100644
index 9d92fa7..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/file/SaveFileAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.file;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SaveFileAction extends Action{
-	public static final String NAME = "action.file.save";
-	
-	public SaveFileAction() {
-		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE );
-	}
-	
-	protected int execute(TypedEvent e){
-		final String fileName = FileActionUtils.getFileName();
-		if(fileName == null){
-			return AUTO_UNLOCK;
-		}
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					FileActionUtils.save(fileName);
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/help/ShowAboutAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/help/ShowAboutAction.java
deleted file mode 100644
index 9ba0602..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/help/ShowAboutAction.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.help;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.widgets.Canvas;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.help.about.AboutDialog;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-public class ShowAboutAction extends Action {
-	public static final String NAME = "action.help.about";
-	
-	protected Canvas imageCanvas;
-	protected Image tabImage;
-	
-	public ShowAboutAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK);
-	}
-	
-	protected int execute(TypedEvent e){
-		new AboutDialog().open(TuxGuitar.instance().getShell());
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/help/ShowDocAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/help/ShowDocAction.java
deleted file mode 100644
index e5e6944..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/help/ShowDocAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.help;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.help.doc.TGDocumentation;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-public class ShowDocAction extends Action {
-	public static final String NAME = "action.help.doc";
-	
-	public ShowDocAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | KEY_BINDING_AVAILABLE );
-	}
-	
-	protected int execute(TypedEvent e){
-		try {
-			new TGDocumentation().display();
-		} catch (Throwable throwable) {
-			MessageDialog.errorMessage(throwable);
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/InsertChordAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/InsertChordAction.java
deleted file mode 100644
index fad240d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/InsertChordAction.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.insert;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.chord.ChordDialog;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class InsertChordAction extends Action {
-	public static final String NAME = "action.insert.chord";
-	
-	public InsertChordAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		TGTrackImpl track = caret.getTrack();
-		TGMeasureImpl measure = caret.getMeasure();
-		TGBeat beat = caret.getSelectedBeat();
-		if (track != null && measure != null && beat != null) {
-			//Si el acorde llego en el data del widget solo lo agrego
-			if(e.widget.getData() instanceof TGChord){
-				TGChord chord = ((TGChord)e.widget.getData()).clone(getSongManager().getFactory());
-				insertChord(chord, track, measure, beat, caret.getVoice());
-			}
-			//sino muestro el editor de acordes
-			else{
-				Shell shell = TuxGuitar.instance().getShell();
-				ChordDialog dialog = new ChordDialog();
-				
-				int result = dialog.open(shell, measure,beat, caret.getPosition());
-				if( result == ChordDialog.RESULT_SAVE ){
-					insertChord(dialog.getChord(), track, measure, beat, caret.getVoice());
-				}
-				else if( result == ChordDialog.RESULT_CLEAN ){
-					removeChord( measure, beat);
-				}
-			}
-		}
-		return 0;
-	}
-	
-	protected void insertChord(TGChord chord, TGTrackImpl track, TGMeasureImpl measure, TGBeat beat, int voiceIndex) {
-		boolean restBeat = beat.isRestBeat();
-		if(!restBeat || chord.countNotes() > 0 ) {
-			
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			// Add the chord notes to the tablature
-			// Only if this is a "rest" beat
-			TGVoice voice = beat.getVoice(voiceIndex);
-			if( restBeat ){
-				
-				Iterator it = track.getStrings().iterator();
-				while (it.hasNext()) {
-					TGString string = (TGString) it.next();
-					
-					int value = chord.getFretValue(string.getNumber() - 1);
-					if (value >= 0) {
-						TGNote note = getSongManager().getFactory().newNote();
-						note.setValue(value);
-						note.setVelocity(getEditor().getTablature().getCaret().getVelocity());
-						note.setString(string.getNumber());
-						
-						TGDuration duration = getSongManager().getFactory().newDuration();
-						voice.getDuration().copy(duration);
-						
-						getSongManager().getMeasureManager().addNote(beat,note,duration,voice.getIndex());
-					}
-				}
-			}
-			
-			getSongManager().getMeasureManager().addChord(beat, chord);
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			fireUpdate(measure.getNumber());
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-	}
-	
-	protected void removeChord(TGMeasureImpl measure, TGBeat beat) {
-		if( beat.isChordBeat() ){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSongManager().getMeasureManager().removeChord(measure, beat.getStart());
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			fireUpdate(measure.getNumber());
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/InsertTextAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/InsertTextAction.java
deleted file mode 100644
index 4956312..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/InsertTextAction.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.insert;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGText;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class InsertTextAction extends Action {
-	public static final String NAME = "action.insert.text";
-	
-	public InsertTextAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		final TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat();
-		
-		showInsertDialog(beat,(beat.getText() == null?new String():beat.getText().getValue()));
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public void showInsertDialog(final TGBeat beat,String value) {
-		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("text.editor"));
-		
-		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout());
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setText(TuxGuitar.getProperty("text.insert"));
-		
-		Composite composite = new Composite(group, SWT.NONE);
-		composite.setLayout(new GridLayout(2,false));
-		composite.setLayoutData(getMainData());  
-		
-		final Label label = new Label(composite,SWT.LEFT);
-		label.setText(TuxGuitar.getProperty("text.text") + ":");
-		label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
-		
-		final Text text = new Text(composite,SWT.BORDER | SWT.SINGLE);
-		text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		text.setText(value);
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				insertText(beat,text.getText());
-				dialog.dispose();
-			}
-		});
-		
-		final Button buttonClean = new Button(buttons, SWT.PUSH);
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.setLayoutData(getButtonData());
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				removeText(beat);
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	private GridData getMainData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 300;
-		return data;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected void insertText(TGBeat beat,String value) {
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		TGText text = getSongManager().getFactory().newText();
-		text.setValue(value);
-		getSongManager().getMeasureManager().addText(beat, text);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-	}
-	
-	protected void removeText(TGBeat beat) {
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		getSongManager().getMeasureManager().removeText(beat);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatAlternativeAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatAlternativeAction.java
deleted file mode 100644
index 4a54811..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatAlternativeAction.java
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.insert;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeAlternativeRepeat;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeCloseRepeat;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class RepeatAlternativeAction extends Action{
-	public static final String NAME = "action.insert.repeat-alternative";
-	
-	public RepeatAlternativeAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
-		showCloseRepeatDialog(getEditor().getTablature().getShell(), measure);
-		return 0;
-	}
-	
-	public void showCloseRepeatDialog(Shell shell, final TGMeasure measure) {
-		if (measure != null) {
-			int existentEndings = getExistentEndings(measure);
-			int selectedEndings = (measure.getHeader().getRepeatAlternative() > 0)?measure.getHeader().getRepeatAlternative():getDefaultEndings(existentEndings);
-			
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("repeat.alternative.editor"));
-			
-			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			group.setLayout(new GridLayout(4,true));
-			group.setLayoutData(getMainData());
-			group.setText(TuxGuitar.getProperty("repeat.alternative"));
-			
-			final Button[] selections = new Button[8];
-			for(int i = 0; i < selections.length; i ++){
-				boolean enabled = ((existentEndings & (1 << i)) == 0);
-				selections[i] = new Button(group,SWT.CHECK);
-				selections[i].setText(Integer.toString( i + 1 ));
-				selections[i].setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-				selections[i].setEnabled(enabled);
-				selections[i].setSelection(enabled && ((selectedEndings & (1 << i)) != 0)  );
-			}
-			
-			//----------------------BUTTONS--------------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(3,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					int values = 0;
-					for(int i = 0; i < selections.length; i ++){
-						values |=  (  (selections[i].getSelection()) ? (1 << i) : 0  );
-					}
-					update(measure,values);
-					dialog.dispose();
-				}
-			});
-			Button buttonClean = new Button(buttons, SWT.PUSH);
-			buttonClean.setText(TuxGuitar.getProperty("clean"));
-			buttonClean.setLayoutData(getButtonData());
-			buttonClean.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					update(measure,0);
-					dialog.dispose();
-				}
-			});
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getMainData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 350;
-		return data;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected int getExistentEndings(TGMeasure measure){
-		int existentEndings = 0;
-		Iterator it = getSongManager().getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if(header.getNumber() == measure.getNumber()){
-				break;
-			}
-			if(header.isRepeatOpen()){
-				existentEndings = 0;
-			}
-			existentEndings |= header.getRepeatAlternative();
-		}
-		return existentEndings;
-	}
-	
-	protected int getDefaultEndings(int existentEndings){
-		for(int i = 0; i < 8; i ++){
-			if((existentEndings & (1 << i)) == 0){
-				return (1 << i);
-			}
-		}
-		return -1;
-	}
-	
-	protected void update(TGMeasure measure, int value) {
-		//Solo si hubieron cambios
-		if(value != measure.getHeader().getRepeatAlternative()){
-			//Si no estoy editando, y la alternativa no contiene el primer final,
-			//por defecto se cierra la repeticion del compas anterior
-			boolean previousRepeatClose = (measure.getHeader().getRepeatAlternative() == 0 && ((value & (1 << 0)) == 0)) ;
-			
-			//comienza el undoable
-			UndoableJoined undoable = new UndoableJoined();
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			//Guardo la repeticion alternativa
-			UndoableChangeAlternativeRepeat u1 = UndoableChangeAlternativeRepeat.startUndo();
-			getSongManager().changeAlternativeRepeat(measure.getStart(), value);
-			fireUpdate(measure.getNumber());
-			undoable.addUndoableEdit(u1.endUndo(value));
-			
-			if(previousRepeatClose){
-				//Agrego un cierre de repeticion al compaz anterior
-				TGMeasureHeader previous = getSongManager().getMeasureHeader( measure.getNumber() - 1);
-				if(previous != null && previous.getRepeatClose() == 0){
-					UndoableChangeCloseRepeat u2 = UndoableChangeCloseRepeat.startUndo(previous.getStart(),previous.getRepeatClose());
-					getSongManager().changeCloseRepeat(previous.getStart(), 1);
-					fireUpdate(previous.getNumber());
-					undoable.addUndoableEdit(u2.endUndo(1));
-				}
-			}
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatCloseAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatCloseAction.java
deleted file mode 100644
index 9e1f6a9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatCloseAction.java
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.insert;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeCloseRepeat;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class RepeatCloseAction extends Action{
-	public static final String NAME = "action.insert.close-repeat";
-	
-	public RepeatCloseAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		showCloseRepeatDialog(getEditor().getTablature().getShell(), measure);
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-	
-	public void showCloseRepeatDialog(Shell shell, final TGMeasureImpl measure) {
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("repeat.close"));
-			
-			int currentRepeatClose = measure.getRepeatClose();
-			if (currentRepeatClose < 1) {
-				currentRepeatClose = 1;
-			}
-			
-			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			group.setLayout(new GridLayout(2,false));
-			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			group.setText(TuxGuitar.getProperty("repeat.close"));
-			
-			Label repeatCloseLabel = new Label(group, SWT.NULL);
-			repeatCloseLabel.setText(TuxGuitar.getProperty("repeat.number-of-repetitions"));
-			
-			final Spinner repeatClose = new Spinner(group, SWT.BORDER);
-			repeatClose.setMinimum(0);
-			repeatClose.setMaximum(100);
-			repeatClose.setSelection(currentRepeatClose);
-			repeatClose.setLayoutData(getSpinnerData());
-			
-			//----------------------BUTTONS--------------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(3,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					closeRepeat(measure,repeatClose.getSelection());
-					dialog.dispose();
-				}
-			});
-			Button buttonClean = new Button(buttons, SWT.PUSH);
-			buttonClean.setText(TuxGuitar.getProperty("clean"));
-			buttonClean.setLayoutData(getButtonData());
-			buttonClean.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					closeRepeat(measure,0);
-					dialog.dispose();
-				}
-			});
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected GridData getSpinnerData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 100;
-		return data;
-	}
-	
-	protected void closeRepeat(TGMeasureImpl measure, int repeatClose) {
-		if(repeatClose >= 0){
-			
-			//comienza el undoable
-			UndoableChangeCloseRepeat undoable = UndoableChangeCloseRepeat.startUndo();
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			//numberOfRepetitions = Math.abs(numberOfRepetitions);
-			getSongManager().changeCloseRepeat(measure.getStart(), repeatClose);
-			updateTablature();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo(repeatClose));
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatOpenAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatOpenAction.java
deleted file mode 100644
index 0568095..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/insert/RepeatOpenAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.insert;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeOpenRepeat;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class RepeatOpenAction extends Action{
-	public static final String NAME = "action.insert.open-repeat";
-	
-	public RepeatOpenAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableChangeOpenRepeat undoable = UndoableChangeOpenRepeat.startUndo();
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		getSongManager().changeOpenRepeat(measure.getStart());
-		updateTablature();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordDiagramEnabledAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordDiagramEnabledAction.java
deleted file mode 100644
index f8f4c8a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordDiagramEnabledAction.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.layout;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetChordDiagramEnabledAction extends Action{
-	public static final String NAME = "action.view.layout-set-chord-diagram-enabled";
-	
-	public SetChordDiagramEnabledAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		ViewLayout layout = getEditor().getTablature().getViewLayout();
-		layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_CHORD_DIAGRAM) );
-		updateTablature();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordNameEnabledAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordNameEnabledAction.java
deleted file mode 100644
index a8a0d3c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetChordNameEnabledAction.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.layout;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetChordNameEnabledAction extends Action{
-	public static final String NAME = "action.view.layout-set-chord-name-enabled";
-	
-	public SetChordNameEnabledAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		ViewLayout layout = getEditor().getTablature().getViewLayout();
-		layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_CHORD_NAME ) );
-		updateTablature();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetCompactViewAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetCompactViewAction.java
deleted file mode 100644
index 94b6c11..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetCompactViewAction.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.layout;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetCompactViewAction extends Action{
-	public static final String NAME = "action.view.layout-set-compact";
-	
-	public SetCompactViewAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		ViewLayout layout = getEditor().getTablature().getViewLayout();
-		layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_COMPACT ) );
-		updateTablature();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetLinearLayoutAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetLinearLayoutAction.java
deleted file mode 100644
index ab007cd..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetLinearLayoutAction.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.layout;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-import org.herac.tuxguitar.gui.editors.tab.layout.LinearViewLayout;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetLinearLayoutAction extends Action{
-	public static final String NAME = "action.view.layout-set-linear";
-	
-	public SetLinearLayoutAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Tablature tablature = getEditor().getTablature();
-		tablature.setViewLayout(new LinearViewLayout(tablature,tablature.getViewLayout().getStyle()));
-		updateTablature();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetMultitrackViewAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetMultitrackViewAction.java
deleted file mode 100644
index abb7e93..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetMultitrackViewAction.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.layout;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetMultitrackViewAction extends Action{
-	public static final String NAME = "action.view.layout-set-multitrack";
-	
-	public SetMultitrackViewAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		ViewLayout layout = getEditor().getTablature().getViewLayout();
-		layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_MULTITRACK ) );
-		updateTablature();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetPageLayoutAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetPageLayoutAction.java
deleted file mode 100644
index 23bd776..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetPageLayoutAction.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.layout;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-import org.herac.tuxguitar.gui.editors.tab.layout.PageViewLayout;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetPageLayoutAction extends Action{
-	public static final String NAME = "action.view.layout-set-page";
-	
-	public SetPageLayoutAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Tablature tablature = getEditor().getTablature();
-		tablature.setViewLayout(new PageViewLayout(tablature,tablature.getViewLayout().getStyle()));
-		updateTablature();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetScoreEnabledAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetScoreEnabledAction.java
deleted file mode 100644
index fbe9a8e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetScoreEnabledAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.layout;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetScoreEnabledAction extends Action{
-	public static final String NAME = "action.view.layout-set-score-enabled";
-	
-	public SetScoreEnabledAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		ViewLayout layout = getEditor().getTablature().getViewLayout();
-		layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_SCORE ) );
-		if((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) == 0 && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){
-			layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_TABLATURE) );
-		}
-		updateTablature();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetTablatureEnabledAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetTablatureEnabledAction.java
deleted file mode 100644
index e109692..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/layout/SetTablatureEnabledAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.layout;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetTablatureEnabledAction extends Action{
-	public static final String NAME = "action.view.layout-set-tablature-enabled";
-	
-	public SetTablatureEnabledAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		ViewLayout layout = getEditor().getTablature().getViewLayout();
-		layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_TABLATURE ) );
-		if((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) == 0 && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){
-			layout.setStyle( ( layout.getStyle() ^ ViewLayout.DISPLAY_SCORE ) );
-		}
-		updateTablature();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/AddMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/AddMarkerAction.java
deleted file mode 100644
index f8f40bf..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/AddMarkerAction.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.marker;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.marker.MarkerEditor;
-import org.herac.tuxguitar.gui.marker.MarkerList;
-import org.herac.tuxguitar.song.models.TGMarker;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class AddMarkerAction extends Action{
-	public static final String NAME = "action.marker.add";
-	
-	public AddMarkerAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(new MarkerEditor(getMarker()).open(getEditor().getTablature().getShell())){
-			MarkerList.instance().update(true);
-		}
-		return 0;
-	}
-	
-	private TGMarker getMarker(){
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			TGMarker marker = getSongManager().getMarker(measure.getNumber());
-			if(marker == null){
-				marker = getSongManager().getFactory().newMarker();
-				marker.setMeasure(measure.getNumber());
-			}
-			return marker;
-		}
-		return null;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoFirstMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoFirstMarkerAction.java
deleted file mode 100644
index 6cae13c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoFirstMarkerAction.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.marker;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.marker.MarkerNavigator;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoFirstMarkerAction extends Action{
-	public static final String NAME = "action.marker.go-first";
-	
-	public GoFirstMarkerAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		new MarkerNavigator().goToSelectedMarker(getSongManager().getFirstMarker());
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoLastMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoLastMarkerAction.java
deleted file mode 100644
index 625138a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoLastMarkerAction.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.marker;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.marker.MarkerNavigator;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoLastMarkerAction extends Action{
-	public static final String NAME = "action.marker.go-last";
-	
-	public GoLastMarkerAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		new MarkerNavigator().goToSelectedMarker(getSongManager().getLastMarker());
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoNextMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoNextMarkerAction.java
deleted file mode 100644
index b2cdcd1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoNextMarkerAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.marker;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.marker.MarkerNavigator;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoNextMarkerAction extends Action{
-	public static final String NAME = "action.marker.go-next";
-	
-	public GoNextMarkerAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE );
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		
-		new MarkerNavigator().goToSelectedMarker(getSongManager().getNextMarker(caret.getMeasure().getNumber()));
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoPreviousMarkerAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoPreviousMarkerAction.java
deleted file mode 100644
index 44a2ebd..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/GoPreviousMarkerAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.marker;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.marker.MarkerNavigator;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoPreviousMarkerAction extends Action{
-	public static final String NAME = "action.marker.go-previous";
-	
-	public GoPreviousMarkerAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		
-		new MarkerNavigator().goToSelectedMarker(getSongManager().getPreviousMarker(caret.getMeasure().getNumber()));
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/ListMarkersAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/ListMarkersAction.java
deleted file mode 100644
index 5b11340..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/marker/ListMarkersAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.marker;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.marker.MarkerList;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ListMarkersAction extends Action{
-	public static final String NAME = "action.marker.list";
-	
-	public ListMarkersAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(MarkerList.instance().isDisposed()){
-			MarkerList.instance().show();
-		}
-		else{
-			MarkerList.instance().dispose();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/AddMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/AddMeasureAction.java
deleted file mode 100644
index d61e2c1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/AddMeasureAction.java
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.measure;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableAddMeasure;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class AddMeasureAction extends Action{
-	public static final String NAME = "action.measure.add";
-	
-	public AddMeasureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog();
-		return 0;
-	}
-	
-	public void showDialog() {
-		if (getEditor().getTablature().getCaret().getMeasure() != null) {
-			final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("measure.add"));
-			
-			//-----------------COUNT------------------------
-			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			group.setLayout(new GridLayout(2,false));
-			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			group.setText(TuxGuitar.getProperty("measure.add"));
-			
-			Label countLabel = new Label(group, SWT.NULL);
-			countLabel.setText(TuxGuitar.getProperty("measure.add.count"));
-			
-			final Spinner countSpinner = new Spinner(group, SWT.BORDER);
-			countSpinner.setLayoutData(getSpinnerData());
-			countSpinner.setMinimum( 1 );
-			countSpinner.setMaximum( 100 );
-			countSpinner.setSelection( 1 );
-			
-			//----------------------------------------------------------------------
-			Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			options.setLayout(new GridLayout());
-			options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			options.setText(TuxGuitar.getProperty("options"));
-			
-			final Button beforePosition = new Button(options,SWT.RADIO);
-			beforePosition.setText(TuxGuitar.getProperty("measure.add-before-current-position"));
-			
-			final Button afterPosition = new Button(options,SWT.RADIO);
-			afterPosition.setText(TuxGuitar.getProperty("measure.add-after-current-position"));
-			
-			final Button atEnd = new Button(options,SWT.RADIO);
-			atEnd.setText(TuxGuitar.getProperty("measure.add-at-end"));
-			atEnd.setSelection(true);
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					int number = 0;
-					int count = countSpinner.getSelection();
-					if(beforePosition.getSelection()){
-						number = (getEditor().getTablature().getCaret().getMeasure().getNumber());
-					}else if(afterPosition.getSelection()){
-						number = (getEditor().getTablature().getCaret().getMeasure().getNumber() + 1);
-					}else if(atEnd.getSelection()){
-						number = (getSongManager().getSong().countMeasureHeaders() + 1);
-					}
-					addMeasure(number, count);
-					dialog.dispose();
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getSpinnerData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 150;
-		return data;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private void addMeasure( final int number , final int count ){
-		if(count > 0 && number > 0 && number <=  (getSongManager().getSong().countMeasureHeaders() + 1)){
-			new Thread(new Runnable() {
-				public void run() {
-					new SyncThread(new Runnable() {
-						public void run() {
-							UndoableJoined undoable = new UndoableJoined();
-							for( int i = 0 ; i < count ; i ++ ){
-								//comienza el undoable
-								UndoableAddMeasure mUndoable = UndoableAddMeasure.startUndo( ( number + i ) );
-								
-								getSongManager().addNewMeasure( ( number + i ) );
-								
-								//termia el undoable
-								undoable.addUndoableEdit(mUndoable.endUndo());
-								
-							}
-							updateTablature();
-							
-							int trackNumber = getEditor().getTablature().getCaret().getTrack().getNumber();
-							int stringNumber = getEditor().getTablature().getCaret().getStringNumber();
-							long start = getSongManager().getMeasureHeader(number).getStart();
-							getEditor().getTablature().getCaret().update(trackNumber,start,stringNumber);
-							
-							//termia el undoable
-							addUndoableEdit( undoable.endUndo() );
-							
-							TuxGuitar.instance().getFileHistory().setUnsavedFile();
-							TuxGuitar.instance().updateCache(true);
-						}
-					}).start();
-				}
-			}).start();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/CleanMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/CleanMeasureAction.java
deleted file mode 100644
index 4d19b6b..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/CleanMeasureAction.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.measure;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGMeasure;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class CleanMeasureAction extends Action{
-	public static final String NAME = "action.measure.clean";
-	
-	public CleanMeasureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(TuxGuitar.instance().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("measure.clean"));
-			
-			//----------------------------------------------------------------------
-			Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			range.setLayout(new GridLayout(2,false));
-			range.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			range.setText(TuxGuitar.getProperty("measure.clean"));
-			
-			int measureCount = getSongManager().getSong().countMeasureHeaders();
-			
-			Label fromLabel = new Label(range, SWT.NULL);
-			fromLabel.setText(TuxGuitar.getProperty("edit.from"));
-			final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
-			fromSpinner.setLayoutData(getSpinnerData());
-			fromSpinner.setMinimum(1);
-			fromSpinner.setMaximum(measureCount);
-			fromSpinner.setSelection(measure.getNumber());
-			
-			Label toLabel = new Label(range, SWT.NULL);
-			toLabel.setText(TuxGuitar.getProperty("edit.to"));
-			final Spinner toSpinner = new Spinner(range, SWT.BORDER);
-			toSpinner.setLayoutData(getSpinnerData());
-			toSpinner.setMinimum(1);
-			toSpinner.setMaximum(measureCount);
-			toSpinner.setSelection(measure.getNumber());
-			
-			final int minSelection = 1;
-			final int maxSelection = track.countMeasures();
-			
-			fromSpinner.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					int fromSelection = fromSpinner.getSelection();
-					int toSelection = toSpinner.getSelection();
-					
-					if(fromSelection < minSelection){
-						fromSpinner.setSelection(minSelection);
-					}else if(fromSelection > toSelection){
-						fromSpinner.setSelection(toSelection);
-					}
-				}
-			});
-			toSpinner.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					int toSelection = toSpinner.getSelection();
-					int fromSelection = fromSpinner.getSelection();
-					if(toSelection < fromSelection){
-						toSpinner.setSelection(fromSelection);
-					}else if(toSelection > maxSelection){
-						toSpinner.setSelection(maxSelection);
-					}
-				}
-			});
-			
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					cleanMeasures(fromSpinner.getSelection(),toSpinner.getSelection());
-					dialog.dispose();
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected GridData getSpinnerData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 180;
-		return data;
-	}
-	
-	public void cleanMeasures(int m1,int m2){
-		if(m1 > 0 && m1 <= m2){
-			//comienza el undoable
-			UndoableJoined undoable = new UndoableJoined();
-			
-			Caret caret = getEditor().getTablature().getCaret();
-			for( int number = m1 ; number <= m2 ; number ++ ){
-				TGMeasure measure = getSongManager().getTrackManager().getMeasure( caret.getTrack() , number );
-				if( measure != null ){
-					//comienza el undoable
-					UndoableMeasureGeneric mUndoable = UndoableMeasureGeneric.startUndo( measure );
-					
-					getSongManager().getMeasureManager().cleanMeasure( measure );
-					
-					//termia el undoable
-					undoable.addUndoableEdit( mUndoable.endUndo( measure ) );
-				}
-			}
-			
-			//termia el undoable
-			if( ! undoable.isEmpty()){
-				addUndoableEdit(undoable.endUndo());
-			}
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			updateTablature();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/CopyMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/CopyMeasureAction.java
deleted file mode 100644
index ae6d120..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/CopyMeasureAction.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.measure;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.clipboard.MeasureTransferable;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class CopyMeasureAction extends Action{
-	public static final String NAME = "action.measure.copy";
-	
-	protected boolean copyAllTracks;
-	
-	public CopyMeasureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("edit.copy"));
-			
-			//----------------------------------------------------------------------
-			Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			range.setLayout(new GridLayout(2,false));
-			range.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			range.setText(TuxGuitar.getProperty("edit.copy"));
-			
-			int measureCount = getSongManager().getSong().countMeasureHeaders();
-			
-			Label fromLabel = new Label(range, SWT.NULL);
-			fromLabel.setText(TuxGuitar.getProperty("edit.from"));
-			final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
-			fromSpinner.setLayoutData(getSpinnerData());
-			fromSpinner.setMinimum(1);
-			fromSpinner.setMaximum(measureCount);
-			fromSpinner.setSelection(measure.getNumber());
-			
-			Label toLabel = new Label(range, SWT.NULL);
-			toLabel.setText(TuxGuitar.getProperty("edit.to"));
-			final Spinner toSpinner = new Spinner(range, SWT.BORDER);
-			toSpinner.setLayoutData(getSpinnerData());
-			toSpinner.setMinimum(1);
-			toSpinner.setMaximum(measureCount);
-			toSpinner.setSelection(measure.getNumber());
-			
-			final int minSelection = 1;
-			final int maxSelection = track.countMeasures();
-			
-			fromSpinner.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					int fromSelection = fromSpinner.getSelection();
-					int toSelection = toSpinner.getSelection();
-					
-					if(fromSelection < minSelection){
-						fromSpinner.setSelection(minSelection);
-					}else if(fromSelection > toSelection){
-						fromSpinner.setSelection(toSelection);
-					}
-				}
-			});
-			toSpinner.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					int toSelection = toSpinner.getSelection();
-					int fromSelection = fromSpinner.getSelection();
-					if(toSelection < fromSelection){
-						toSpinner.setSelection(fromSelection);
-					}else if(toSelection > maxSelection){
-						toSpinner.setSelection(maxSelection);
-					}
-				}
-			});
-			//----------------------------------------------------------------------
-			this.copyAllTracks = true;
-			if(getSongManager().getSong().countTracks() > 1){
-				Group checkComposites = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-				checkComposites.setLayout(new GridLayout());
-				checkComposites.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-				checkComposites.setText(TuxGuitar.getProperty("options"));
-				
-				final Button allTracks = new Button(checkComposites,SWT.CHECK);
-				allTracks.setText(TuxGuitar.getProperty("edit.all-tracks"));
-				allTracks.setSelection(this.copyAllTracks);
-				allTracks.addSelectionListener(new SelectionAdapter() {
-					public void widgetSelected(SelectionEvent e) {
-						CopyMeasureAction.this.copyAllTracks = allTracks.getSelection();
-					}
-				});
-			}
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					copyMeasures(fromSpinner.getSelection(),toSpinner.getSelection(),CopyMeasureAction.this.copyAllTracks);
-					dialog.dispose();
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected GridData getSpinnerData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 180;
-		return data;
-	}
-	
-	protected void copyMeasures(int m1,int m2,boolean allTracks){
-		if(m1 > 0 && m1 <= m2){
-			MeasureTransferable transferable = new MeasureTransferable(getEditor(),m1,m2,allTracks);
-			getEditor().getClipBoard().addTransferable(transferable);
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoFirstMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoFirstMeasureAction.java
deleted file mode 100644
index 3fb148a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoFirstMeasureAction.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.measure;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoFirstMeasureAction extends Action{
-	public static final String NAME = "action.measure.go-first";
-	
-	public GoFirstMeasureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getPlayer().isRunning()){
-			TuxGuitar.instance().getTransport().gotoFirst();
-		}
-		else{
-			Caret caret = getEditor().getTablature().getCaret();
-			TGTrackImpl track = caret.getTrack();
-			TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getFirstMeasure(track);
-			if(track != null && measure != null){
-				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
-			}
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoLastMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoLastMeasureAction.java
deleted file mode 100644
index 87eacb0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoLastMeasureAction.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.measure;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoLastMeasureAction extends Action{
-	public static final String NAME = "action.measure.go-last";
-	
-	public GoLastMeasureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getPlayer().isRunning()){
-			TuxGuitar.instance().getTransport().gotoLast();
-		}
-		else{
-			Caret caret = getEditor().getTablature().getCaret();
-			TGTrackImpl track = caret.getTrack();
-			TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getLastMeasure(track);
-			if(track != null && measure != null){
-				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
-			}
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoNextMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoNextMeasureAction.java
deleted file mode 100644
index 7fe1af4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoNextMeasureAction.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.measure;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableAddMeasure;
-import org.herac.tuxguitar.song.models.TGMeasure;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoNextMeasureAction extends Action{
-	public static final String NAME = "action.measure.go-next";
-	
-	public GoNextMeasureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		//si es el ultimo compas, agrego uno nuevo
-		if(getSongManager().getTrackManager().isLastMeasure(caret.getMeasure())){
-			int number = (getSongManager().getSong().countMeasureHeaders() + 1);
-			
-			//comienza el undoable
-			UndoableAddMeasure undoable = UndoableAddMeasure.startUndo(number);
-			
-			this.getSongManager().addNewMeasure(number);
-			this.fireUpdate(number);
-			this.moveToNext();
-			
-			//termia el undoable
-			this.addUndoableEdit(undoable.endUndo());
-		}
-		else{
-			this.moveToNext();
-		}
-		
-		return 0;
-	}
-	
-	private void moveToNext(){
-		if(TuxGuitar.instance().getPlayer().isRunning()){
-			TuxGuitar.instance().getTransport().gotoNext();
-		}
-		else{
-			Caret caret = getEditor().getTablature().getCaret();
-			TGTrackImpl track = caret.getTrack();
-			TGMeasure measure = getSongManager().getTrackManager().getNextMeasure(caret.getMeasure());
-			if(track != null && measure != null){
-				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoPreviousMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoPreviousMeasureAction.java
deleted file mode 100644
index 50583f8..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/GoPreviousMeasureAction.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.measure;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoPreviousMeasureAction extends Action{
-	public static final String NAME = "action.measure.go-previous";
-	
-	public GoPreviousMeasureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getPlayer().isRunning()){
-			TuxGuitar.instance().getTransport().gotoPrevious();
-		}
-		else{
-			Caret caret = getEditor().getTablature().getCaret();
-			TGTrackImpl track = caret.getTrack();
-			TGMeasureImpl measure = (TGMeasureImpl)getSongManager().getTrackManager().getPrevMeasure(caret.getMeasure());
-			if(track != null && measure != null){
-				caret.update(track.getNumber(),measure.getStart(),caret.getSelectedString().getNumber());
-			}
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/PasteMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/PasteMeasureAction.java
deleted file mode 100644
index bcbac85..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/PasteMeasureAction.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.measure;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.clipboard.CannotInsertTransferException;
-import org.herac.tuxguitar.gui.clipboard.MeasureTransferable;
-import org.herac.tuxguitar.gui.clipboard.Transferable;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class PasteMeasureAction extends Action{
-	public static final String NAME = "action.measure.paste";
-	
-	public PasteMeasureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("edit.paste"));
-			
-			//-----------------COUNT------------------------
-			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			group.setLayout(new GridLayout(2,false));
-			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			group.setText(TuxGuitar.getProperty("edit.paste"));
-			
-			Label countLabel = new Label(group, SWT.NULL);
-			countLabel.setText(TuxGuitar.getProperty("edit.paste.count"));
-			
-			final Spinner countSpinner = new Spinner(group, SWT.BORDER);
-			countSpinner.setLayoutData(getSpinnerData());
-			countSpinner.setMinimum( 1 );
-			countSpinner.setMaximum( 100 );
-			countSpinner.setSelection( 1 );
-			
-			//----------------------------------------------------------------------
-			Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			options.setLayout(new GridLayout());
-			options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			options.setText(TuxGuitar.getProperty("options"));
-			
-			final Button replace = new Button(options,SWT.RADIO);
-			replace.setText(TuxGuitar.getProperty("edit.paste.replace-mode"));
-			replace.setSelection(true);
-			
-			final Button insert = new Button(options,SWT.RADIO);
-			insert.setText(TuxGuitar.getProperty("edit.paste.insert-mode"));
-			
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					int pasteMode = 0;
-					int pasteCount = countSpinner.getSelection();
-					if( replace.getSelection() ){
-						pasteMode = MeasureTransferable.TRANSFER_TYPE_REPLACE;
-					}else if(insert.getSelection()){
-						pasteMode = MeasureTransferable.TRANSFER_TYPE_INSERT;
-					}
-					pasteMeasures( pasteMode , pasteCount);
-					
-					dialog.dispose();
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getSpinnerData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 150;
-		return data;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected void pasteMeasures(int pasteMode, int pasteCount){
-		try {
-			if( pasteMode > 0 && pasteCount > 0 ){
-				Transferable transferable = getEditor().getClipBoard().getTransferable();
-				if(transferable instanceof MeasureTransferable){
-					((MeasureTransferable)transferable).setTransferType( pasteMode );
-					((MeasureTransferable)transferable).setPasteCount( pasteCount );
-					
-					transferable.insertTransfer();
-					
-					updateTablature();
-				}
-			}
-		} catch (CannotInsertTransferException ex) {
-			ex.printStackTrace();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/RemoveMeasureAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/RemoveMeasureAction.java
deleted file mode 100644
index 429e7c2..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/measure/RemoveMeasureAction.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.measure;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableRemoveMeasure;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class RemoveMeasureAction extends Action{
-	public static final String NAME = "action.measure.remove";
-	
-	public RemoveMeasureAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell()/*,e*/);
-		return 0;
-	}
-	
-	public void showDialog(Shell shell/*,final TypedEvent event*/) {
-		TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
-		TGMeasureImpl measure = getEditor().getTablature().getCaret().getMeasure();
-		if (measure != null) {
-			final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("edit.delete"));
-			
-			//----------------------------------------------------------------------
-			Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			range.setLayout(new GridLayout(2,false));
-			range.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			range.setText(TuxGuitar.getProperty("edit.delete"));
-			
-			int measureCount = getSongManager().getSong().countMeasureHeaders();
-			
-			Label fromLabel = new Label(range, SWT.NULL);
-			fromLabel.setText(TuxGuitar.getProperty("edit.from"));
-			final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
-			fromSpinner.setLayoutData(getSpinnerData());
-			fromSpinner.setMinimum(1);
-			fromSpinner.setMaximum(measureCount);
-			fromSpinner.setSelection(measure.getNumber());
-			
-			Label toLabel = new Label(range, SWT.NULL);
-			toLabel.setText(TuxGuitar.getProperty("edit.to"));
-			final Spinner toSpinner = new Spinner(range, SWT.BORDER);
-			toSpinner.setLayoutData(getSpinnerData());
-			toSpinner.setMinimum(1);
-			toSpinner.setMaximum(measureCount);
-			toSpinner.setSelection(measure.getNumber());
-			
-			final int minSelection = 1;
-			final int maxSelection = track.countMeasures();
-			
-			fromSpinner.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					int fromSelection = fromSpinner.getSelection();
-					int toSelection = toSpinner.getSelection();
-					
-					if(fromSelection < minSelection){
-						fromSpinner.setSelection(minSelection);
-					}else if(fromSelection > toSelection){
-						fromSpinner.setSelection(toSelection);
-					}
-				}
-			});
-			toSpinner.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					int toSelection = toSpinner.getSelection();
-					int fromSelection = fromSpinner.getSelection();
-					if(toSelection < fromSelection){
-						toSpinner.setSelection(fromSelection);
-					}else if(toSelection > maxSelection){
-						toSpinner.setSelection(maxSelection);
-					}
-				}
-			});
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					removeMeasures(fromSpinner.getSelection(),toSpinner.getSelection()/*,event*/);
-					dialog.dispose();
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected GridData getSpinnerData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 180;
-		return data;
-	}
-	
-	protected void removeMeasures(int m1,int m2/*,TypedEvent event*/){
-		if(m1 > 0 && m1 <= m2 && m2 <= getSongManager().getSong().countMeasureHeaders()){
-			Caret caret = getEditor().getTablature().getCaret();
-			
-			if(m1 == 1 && m2 == getSongManager().getSong().countMeasureHeaders()){
-				//TuxGuitar.instance().getAction(NewFileAction.NAME).process(event);
-				TuxGuitar.instance().newSong();
-				return;
-			}
-			//comienza el undoable
-			UndoableRemoveMeasure undoable = new UndoableRemoveMeasure(m1,m2);
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			//borro los compases
-			getSongManager().removeMeasureHeaders(m1,m2);
-			
-			updateTablature();
-			
-			int measureCount = getSongManager().getSong().countMeasureHeaders();
-			if(caret.getMeasure().getNumber() > measureCount){
-				TGTrack track = getSongManager().getTrack(caret.getTrack().getNumber());
-				TGMeasure measure = getSongManager().getTrackManager().getMeasure(track,measureCount);
-				caret.update(track.getNumber(),measure.getStart(),1);
-			}
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeNoteAction.java
deleted file mode 100644
index 7b78fa5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeNoteAction.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingConstants;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGNote;
-
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeNoteAction extends Action {
-	
-	public static final String NAME = "action.note.general.change";
-	
-	private static final int DELAY = 1000;
-	
-	private static int lastAddedValue;
-	
-	private static int lastAddedString;
-	
-	private static long lastAddedStart;
-	
-	private static long lastAddedTime;
-	
-	public ChangeNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING);
-	}
-	
-	protected int execute(TypedEvent e){
-		if (e instanceof KeyEvent) {
-			int value = getValueOf(((KeyEvent) e).keyCode);
-			if (value >= 0) {
-				Caret caret = getEditor().getTablature().getCaret();
-				TGMeasureImpl measure = caret.getMeasure();
-				TGDuration duration = caret.getDuration();
-				int string = caret.getSelectedString().getNumber();
-				int velocity = caret.getVelocity();
-				long start = caret.getPosition();
-				long time = System.currentTimeMillis();
-				
-				if(lastAddedStart == start && lastAddedString == string){
-					if (lastAddedValue > 0 && lastAddedValue < 10 && time <  ( lastAddedTime + DELAY ) ){
-						int newValue = ( ( lastAddedValue * 10 ) + value );
-						if(newValue < 30 || caret.getTrack().isPercussionTrack()){
-							value = newValue;
-						}
-					}
-				}
-				
-				this.addNote(measure, duration, start, value, string, velocity);
-				this.fireUpdate(measure.getNumber());
-				
-				lastAddedValue = value;
-				lastAddedStart = start;
-				lastAddedString = string;
-				lastAddedTime = time;
-				
-				return AUTO_UPDATE;
-			}
-		}
-		return 0;
-	}
-	
-	private void addNote(TGMeasureImpl measure,TGDuration duration, long start, int value,int string, int velocity) {
-		TGNote note = getSongManager().getFactory().newNote();
-		note.setValue(value);
-		note.setVelocity(velocity);
-		note.setString(string);
-		
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		//getSongManager().getMeasureManager().addNote(measure,start,note,duration.clone(getSongManager().getFactory()) );
-		getSongManager().getMeasureManager().addNote(measure,start,note,duration.clone(getSongManager().getFactory()), getEditor().getTablature().getCaret().getVoice() );
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		//reprodusco las notas en el pulso
-		getEditor().getTablature().getCaret().getSelectedBeat().play();
-	}
-	
-	private int getValueOf(int keyCode){
-		switch(keyCode){
-		case KeyBindingConstants.NUMBER_0:
-		case KeyBindingConstants.KEYPAD_0:
-			return 0;
-		case KeyBindingConstants.NUMBER_1:
-		case KeyBindingConstants.KEYPAD_1:
-			return 1;
-		case KeyBindingConstants.NUMBER_2:
-		case KeyBindingConstants.KEYPAD_2:
-			return 2;
-		case KeyBindingConstants.NUMBER_3:
-		case KeyBindingConstants.KEYPAD_3:
-			return 3;
-		case KeyBindingConstants.NUMBER_4:
-		case KeyBindingConstants.KEYPAD_4:
-			return 4;
-		case KeyBindingConstants.NUMBER_5:
-		case KeyBindingConstants.KEYPAD_5:
-			return 5;
-		case KeyBindingConstants.NUMBER_6:
-		case KeyBindingConstants.KEYPAD_6:
-			return 6;
-		case KeyBindingConstants.NUMBER_7:
-		case KeyBindingConstants.KEYPAD_7:
-			return 7;
-		case KeyBindingConstants.NUMBER_8:
-		case KeyBindingConstants.KEYPAD_8:
-			return 8;
-		case KeyBindingConstants.NUMBER_9:
-		case KeyBindingConstants.KEYPAD_9:
-			return 9;
-		}
-		return -1;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeTiedNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeTiedNoteAction.java
deleted file mode 100644
index cbd039d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeTiedNoteAction.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeTiedNoteAction extends Action{
-	public static final String NAME = "action.note.general.tied";
-	
-	public ChangeTiedNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		if(caret.getSelectedNote() != null){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSongManager().getMeasureManager().changeTieNote(caret.getSelectedNote());
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}else{
-			TGNote note = getSongManager().getFactory().newNote();
-			note.setValue(0);
-			note.setVelocity(caret.getVelocity());
-			note.setString(caret.getSelectedString().getNumber());
-			note.setTiedNote(true);
-			
-			TGDuration duration = getSongManager().getFactory().newDuration();
-			caret.getDuration().copy(duration);
-			
-			setTiedNoteValue(note,caret);
-			
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			getSongManager().getMeasureManager().addNote(caret.getSelectedBeat(),note,duration, caret.getVoice());
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-		}
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		updateTablature();
-		return 0;
-	}
-	
-	private void setTiedNoteValue(TGNote note,Caret caret){
-		TGMeasure measure = caret.getMeasure();
-		TGVoice voice = getSongManager().getMeasureManager().getPreviousVoice( measure.getBeats(), caret.getSelectedBeat(), caret.getVoice());
-		while( measure != null){
-			while( voice != null ){
-				if(voice.isRestVoice()){
-					note.setValue(0);
-					return;
-				}
-				// Check if is there any note at same string.
-				Iterator it = voice.getNotes().iterator();
-				while( it.hasNext() ){
-					TGNote current = (TGNote) it.next();
-					if(current.getString() == note.getString()){
-						note.setValue( current.getValue() );
-						return;
-					}
-				}
-				voice = getSongManager().getMeasureManager().getPreviousVoice( measure.getBeats(), voice.getBeat(), caret.getVoice());
-			}
-			measure = getSongManager().getTrackManager().getPrevMeasure(measure);
-			if( measure != null ){
-				voice = getSongManager().getMeasureManager().getLastVoice( measure.getBeats() , caret.getVoice());
-			}
-		}
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeVelocityAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeVelocityAction.java
deleted file mode 100644
index b427f5e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ChangeVelocityAction.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChangeVelocityAction extends Action{
-	public static final String NAME = "action.note.general.velocity";
-	
-	public ChangeVelocityAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | DISABLE_ON_PLAYING);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(e.widget.getData() instanceof Integer){
-			int velocity = ((Integer)e.widget.getData()).intValue();
-			
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			Caret caret = getEditor().getTablature().getCaret();
-			caret.setVelocity(velocity);
-			getSongManager().getMeasureManager().changeVelocity(velocity,caret.getMeasure(),caret.getPosition(),caret.getSelectedString().getNumber());
-			updateTablature();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-			
-			return AUTO_UPDATE;
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/CleanBeatAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/CleanBeatAction.java
deleted file mode 100644
index d284daa..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/CleanBeatAction.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGBeat;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class CleanBeatAction extends Action{
-	public static final String NAME = "action.note.general.clean-beat";
-	
-	public CleanBeatAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat();
-		if( beat != null){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			//getSongManager().getMeasureManager().removeAllComponentsAt(caret.getMeasure(),caret.getSelectedComponent().getStart());
-			getSongManager().getMeasureManager().cleanBeat(beat);
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-			updateTablature();
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/DecrementNoteSemitoneAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/DecrementNoteSemitoneAction.java
deleted file mode 100644
index 024501c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/DecrementNoteSemitoneAction.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class DecrementNoteSemitoneAction extends Action{
-	public static final String NAME = "action.note.general.decrement-semitone";
-	
-	public DecrementNoteSemitoneAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			if(getSongManager().getMeasureManager().moveSemitoneDown(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString())){
-				//termia el undoable
-				addUndoableEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			}
-			updateTablature();
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/IncrementNoteSemitoneAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/IncrementNoteSemitoneAction.java
deleted file mode 100644
index b057faf..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/IncrementNoteSemitoneAction.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class IncrementNoteSemitoneAction extends Action{
-	public static final String NAME = "action.note.general.increment-semitone";
-	
-	public IncrementNoteSemitoneAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			if(getSongManager().getMeasureManager().moveSemitoneUp(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString())){
-				//termia el undoable
-				addUndoableEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			}
-			updateTablature();
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/InsertNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/InsertNoteAction.java
deleted file mode 100644
index 3dc1175..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/InsertNoteAction.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGBeat;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class InsertNoteAction extends Action{
-	public static final String NAME = "action.note.general.insert";
-	
-	public InsertNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		TGBeat beat = caret.getSelectedBeat();
-		if(beat != null){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			if(beat.getVoice(caret.getVoice()).isEmpty()){
-				getSongManager().getMeasureManager().addSilence(beat, caret.getDuration().clone(getSongManager().getFactory()), caret.getVoice());
-			}
-			else{
-				long start = beat.getStart();
-				long length = beat.getVoice(caret.getVoice()).getDuration().getTime();
-				getSongManager().getMeasureManager().moveVoices(caret.getMeasure(),start,length,caret.getVoice(),beat.getVoice(caret.getVoice()).getDuration());
-			}
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-			
-			updateTablature();
-			
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsCustomAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsCustomAction.java
deleted file mode 100644
index 9260fad..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsCustomAction.java
+++ /dev/null
@@ -1,335 +0,0 @@
-package org.herac.tuxguitar.gui.actions.note;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-public class MoveBeatsCustomAction extends Action{
-	public static final String NAME = "action.beat.general.move-custom";
-	
-	private static final ComboItem[] MOVE_DIRECTIONS = new ComboItem[]{
-		new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.direction.right"), new Integer(1) ),
-		new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.direction.left") , new Integer(-1) ),
-	};
-	
-	private static final ComboItem[] MOVE_DURATIONS = new ComboItem[]{
-		new ComboItem( TuxGuitar.getProperty("duration.whole") , new Integer(TGDuration.WHOLE) ),
-		new ComboItem( TuxGuitar.getProperty("duration.half") , new Integer(TGDuration.HALF) ),
-		new ComboItem( TuxGuitar.getProperty("duration.quarter") , new Integer(TGDuration.QUARTER) ),
-		new ComboItem( TuxGuitar.getProperty("duration.eighth") , new Integer(TGDuration.EIGHTH) ),
-		new ComboItem( TuxGuitar.getProperty("duration.sixteenth") , new Integer(TGDuration.SIXTEENTH) ),
-		new ComboItem( TuxGuitar.getProperty("duration.thirtysecond") , new Integer(TGDuration.THIRTY_SECOND) ),
-		new ComboItem( TuxGuitar.getProperty("duration.sixtyfourth") , new Integer(TGDuration.SIXTY_FOURTH) ),
-	};
-	
-	private static final ComboItem[] MOVE_DURATION_TYPES = new ComboItem[]{
-		new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.duration.type.normal") , new boolean[]{ false, false} ),
-		new ComboItem( TuxGuitar.getProperty("duration.dotted") , new boolean[]{ true, false} ),
-		new ComboItem( TuxGuitar.getProperty("duration.doubledotted") , new boolean[]{ false, true} ),
-	};
-	
-	private static final ComboItem[] MOVE_DURATION_DIVISIONS = new ComboItem[]{
-		new ComboItem( TuxGuitar.getProperty("beat.move-custom.dialog.duration.division-type.normal") , new int[] { 1  , 1} ),
-		new ComboItem( "3"    , new int[] { 3  , 2} ),
-		new ComboItem( "5"    , new int[] { 5  , 4} ),
-		new ComboItem( "6"    , new int[] { 6  , 4} ),
-		new ComboItem( "7"    , new int[] { 7  , 4} ),
-		new ComboItem( "9"    , new int[] { 9  , 8} ),
-		new ComboItem( "10"   , new int[] { 10 , 8} ),
-		new ComboItem( "11"   , new int[] { 11 , 8} ),
-		new ComboItem( "12"   , new int[] { 12 , 8} ),
-	};
-	
-	public MoveBeatsCustomAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		this.showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	protected void showDialog(Shell shell){
-		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("beat.move-custom.dialog.title"));
-		
-		//-------direction-------------------------------------
-		Group direction = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		direction.setLayout(new GridLayout(2,false));
-		direction.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		direction.setText(TuxGuitar.getProperty("beat.move-custom.dialog.direction-tip"));
-		
-		Label directionLabel = new Label(direction, SWT.RIGHT);
-		directionLabel.setText(TuxGuitar.getProperty("beat.move-custom.dialog.direction") + ":");
-		
-		final Combo directionCombo = new Combo(direction, SWT.DROP_DOWN | SWT.READ_ONLY);
-		for( int i = 0 ; i < MOVE_DIRECTIONS.length ; i ++ ){
-			directionCombo.add( MOVE_DIRECTIONS[i].getLabel() );
-		}
-		directionCombo.select( 0 );
-		directionCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		
-		//-------move 1------------------------------------------
-		final List move1Controls = new ArrayList();
-		
-		Group move1 = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		move1.setLayout(new GridLayout(2,false));
-		move1.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		move1.setText(TuxGuitar.getProperty("beat.move-custom.dialog.move-1.tip"));
-		
-		Label count1Label = new Label(move1, SWT.RIGHT);
-		count1Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
-		count1Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.count") + ":");
-		
-		final Spinner count1Spinner = new Spinner(move1 , SWT.BORDER );
-		count1Spinner.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		count1Spinner.setMinimum(0);
-		count1Spinner.setMaximum(100);
-		count1Spinner.setIncrement(1);
-		count1Spinner.setSelection(0);
-		count1Spinner.addSelectionListener( new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				updateControls( count1Spinner.getSelection(), move1Controls );
-			}
-		});
-		
-		Label duration1Label = new Label(move1, SWT.RIGHT);
-		duration1Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
-		duration1Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration") + ":");
-		move1Controls.add( duration1Label );
-		
-		final Combo duration1Combo = new Combo(move1, SWT.DROP_DOWN | SWT.READ_ONLY);
-		duration1Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		for( int i = 0 ; i < MOVE_DURATIONS.length ; i ++ ){
-			duration1Combo.add( MOVE_DURATIONS[i].getLabel() );
-		}
-		duration1Combo.select( 0 );
-		move1Controls.add( duration1Combo );
-		
-		updateControls( 0, move1Controls );
-		//-------move 2------------------------------------------
-		final List move2Controls = new ArrayList();
-		
-		Group move2 = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		move2.setLayout(new GridLayout(2,false));
-		move2.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		move2.setText(TuxGuitar.getProperty("beat.move-custom.dialog.move-2.tip"));
-		
-		Label count2Label = new Label(move2, SWT.RIGHT);
-		count2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
-		count2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.count") + ":");
-		
-		final Spinner count2Spinner = new Spinner(move2 , SWT.BORDER );
-		count2Spinner.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		count2Spinner.setSelection(0);
-		count2Spinner.addSelectionListener( new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				updateControls( count2Spinner.getSelection(), move2Controls );
-			}
-		});
-		
-		Label duration2Label = new Label(move2, SWT.RIGHT);
-		duration2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
-		duration2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration") + ":");
-		move2Controls.add( duration2Label );
-		
-		final Combo duration2Combo = new Combo(move2, SWT.DROP_DOWN | SWT.READ_ONLY);
-		duration2Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		for( int i = 0 ; i < MOVE_DURATIONS.length ; i ++ ){
-			duration2Combo.add( MOVE_DURATIONS[i].getLabel() );
-		}
-		duration2Combo.select( 2 );
-		move2Controls.add( duration2Combo );
-		
-		Label type2Label = new Label(move2, SWT.RIGHT);
-		type2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
-		type2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration.type") + ":");
-		move2Controls.add( type2Label );
-		
-		final Combo type2Combo = new Combo(move2, SWT.DROP_DOWN | SWT.READ_ONLY);
-		type2Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		for( int i = 0 ; i < MOVE_DURATION_TYPES.length ; i ++ ){
-			type2Combo.add( MOVE_DURATION_TYPES[i].getLabel() );
-		}
-		type2Combo.select( 0 );
-		move2Controls.add( type2Combo );
-		
-		Label division2Label = new Label(move2, SWT.RIGHT);
-		division2Label.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,true,true));
-		division2Label.setText(TuxGuitar.getProperty("beat.move-custom.dialog.duration.division-type") + ":");
-		move2Controls.add( division2Label );
-		
-		final Combo division2Combo = new Combo(move2, SWT.DROP_DOWN | SWT.READ_ONLY);
-		division2Combo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		for( int i = 0 ; i < MOVE_DURATION_DIVISIONS.length ; i ++ ){
-			division2Combo.add( MOVE_DURATION_DIVISIONS[i].getLabel() );
-		}
-		division2Combo.select( 0 );
-		move2Controls.add( division2Combo );
-		
-		updateControls( 0, move2Controls );
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				final int directionValue = getDirection( directionCombo.getSelectionIndex() );
-				final long duration1 = getDuration1(duration1Combo.getSelectionIndex(), count1Spinner.getSelection());
-				final long duration2 = getDuration2(duration2Combo.getSelectionIndex(),type2Combo.getSelectionIndex(),division2Combo.getSelectionIndex(), count2Spinner.getSelection());
-				final long duration = ( ( duration1 + duration2 ) * directionValue );
-				
-				dialog.dispose();
-				try {
-					TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-						public void run() throws Throwable {
-							ActionLock.lock();
-							TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-							moveBeats(duration);
-							TuxGuitar.instance().updateCache( true );
-							TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-							ActionLock.unlock();
-						}
-					});
-				} catch (Throwable throwable) {
-					MessageDialog.errorMessage(throwable);
-				}
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected int getDirection( int index ){
-		if( index >= 0 && index < MOVE_DIRECTIONS.length ){
-			return ((Integer)MOVE_DIRECTIONS[ index ].getValue()).intValue();
-		}
-		return 0;
-	}
-	
-	protected long getDuration1( int index , int count ){
-		if( count > 0 && index >= 0 && index < MOVE_DURATIONS.length ){
-			TGDuration duration = getSongManager().getFactory().newDuration();
-			duration.setValue( ((Integer)MOVE_DURATIONS[ index ].getValue()).intValue() );
-			duration.setDotted( false );
-			duration.setDoubleDotted( false );
-			duration.getDivision().setTimes( 1 );
-			duration.getDivision().setEnters( 1 );
-			return ( duration.getTime() * count );
-		}
-		return 0;
-	}
-	
-	protected long getDuration2( int index , int indexType , int indexDivision, int count ){
-		if( count > 0 && index >= 0 && index < MOVE_DURATIONS.length ){
-			if( indexType >= 0 && indexType < MOVE_DURATION_TYPES.length && indexDivision >= 0 && indexDivision < MOVE_DURATION_DIVISIONS.length ){
-				TGDuration duration = getSongManager().getFactory().newDuration();
-				duration.setValue( ((Integer)MOVE_DURATIONS[ index ].getValue()).intValue() );
-				duration.setDotted(((boolean[])MOVE_DURATION_TYPES[ indexType ].getValue())[0]);
-				duration.setDoubleDotted(((boolean[])MOVE_DURATION_TYPES[ indexType ].getValue())[1]);
-				duration.getDivision().setEnters(((int[])MOVE_DURATION_DIVISIONS[ indexDivision ].getValue())[0]);
-				duration.getDivision().setTimes(((int[])MOVE_DURATION_DIVISIONS[ indexDivision ].getValue())[1]);
-				return ( duration.getTime() * count );
-			}
-		}
-		return 0;
-	}
-	
-	protected void updateControls(int count, List controls){
-		Iterator it = controls.iterator();
-		while( it.hasNext() ){
-			Control control = (Control) it.next();
-			control.setEnabled( count > 0 );
-		}
-	}
-	
-	protected int moveBeats( long theMove ){
-		Caret caret = getEditor().getTablature().getCaret();		
-		TGBeat beat = caret.getSelectedBeat();
-		TGMeasure measure = caret.getMeasure();
-		TGTrack track = caret.getTrack();
-		if(beat != null && measure != null && track != null){
-			//comienza el undoable
-			UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo(track);
-			
-			getSongManager().getTrackManager().moveTrackBeats(track, measure.getStart(), beat.getStart(), theMove );
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo(track));
-			
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			updateTablature();
-		}
-		return 0;
-	}
-	
-	protected static class ComboItem {		
-		private String label;
-		private Object value;
-		
-		public ComboItem(String label, Object value){
-			this.label = label;
-			this.value = value;
-		}
-		
-		public String getLabel() {
-			return this.label;
-		}
-		
-		public Object getValue() {
-			return this.value;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsLeftAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsLeftAction.java
deleted file mode 100644
index 62bd35f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsLeftAction.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class MoveBeatsLeftAction extends Action{
-	public static final String NAME = "action.beat.general.move-left";
-	
-	public MoveBeatsLeftAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();		
-		TGBeat beat = caret.getSelectedBeat();
-		TGMeasure measure = caret.getMeasure();
-		TGTrack track = caret.getTrack();
-		TGDuration duration = (beat != null ? beat.getVoice( caret.getVoice() ).getDuration() : null );
-		if(beat != null && measure != null && track != null && duration != null){
-			//comienza el undoable
-			UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo(track);
-			
-			getSongManager().getTrackManager().moveTrackBeats(track, measure.getStart(), beat.getStart(), -duration.getTime() );
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo(track));
-			
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			updateTablature();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsRightAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsRightAction.java
deleted file mode 100644
index 499996e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/MoveBeatsRightAction.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class MoveBeatsRightAction extends Action{
-	public static final String NAME = "action.beat.general.move-right";
-	
-	public MoveBeatsRightAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();		
-		TGBeat beat = caret.getSelectedBeat();
-		TGMeasure measure = caret.getMeasure();
-		TGTrack track = caret.getTrack();
-		TGDuration duration = (beat != null ? beat.getVoice( caret.getVoice() ).getDuration() : null );
-		if(beat != null && measure != null && track != null && duration != null){
-			//comienza el undoable
-			UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo(track);
-			
-			getSongManager().getTrackManager().moveTrackBeats(track, measure.getStart(), beat.getStart(), duration.getTime() );
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo(track));
-			
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			updateTablature();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/RemoveNoteAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/RemoveNoteAction.java
deleted file mode 100644
index fe2c4c6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/RemoveNoteAction.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class RemoveNoteAction extends Action{
-	public static final String NAME = "action.note.general.remove";
-	
-	public RemoveNoteAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		TGBeat beat = caret.getSelectedBeat();
-		TGVoice voice = beat.getVoice( caret.getVoice() );
-		if( beat.isTextBeat() && beat.isRestBeat() ){
-			getSongManager().getMeasureManager().removeText(beat);
-		}else if(voice.isRestVoice()){
-			getSongManager().getMeasureManager().removeVoice(voice ,true);
-		}else{
-			int string = caret.getSelectedString().getNumber();
-			getSongManager().getMeasureManager().removeNote(caret.getMeasure(),beat.getStart(), caret.getVoice(), string);
-		}
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		updateTablature();
-		
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/RemoveUnusedVoiceAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/RemoveUnusedVoiceAction.java
deleted file mode 100644
index d1afd39..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/RemoveUnusedVoiceAction.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGBeat;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class RemoveUnusedVoiceAction extends Action{
-	public static final String NAME = "action.beat.general.remove-unused-voice";
-	
-	public RemoveUnusedVoiceAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		if( caret.getMeasure() != null){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			for( int v = 0 ; v < TGBeat.MAX_VOICES ; v ++ ){
-				if( caret.getVoice() != v ){
-					getSongManager().getMeasureManager().removeMeasureVoices( caret.getMeasure(), v );
-				}
-			}
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo());
-			updateTablature();
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetStrokeDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetStrokeDownAction.java
deleted file mode 100644
index d91b7b7..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetStrokeDownAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.effects.StrokeEditor;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGStroke;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetStrokeDownAction extends Action{
-	public static final String NAME = "action.beat.general.set-stroke-down";
-	
-	public SetStrokeDownAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat();
-		if(beat != null && !beat.isRestBeat()){
-			StrokeEditor editor = new StrokeEditor();
-			editor.open(beat);
-			if( editor.getStatus() != StrokeEditor.STATUS_CANCEL ){
-				int direction = ( editor.getStatus() == StrokeEditor.STATUS_CLEAN ? TGStroke.STROKE_NONE : TGStroke.STROKE_DOWN );
-				int value = editor.getValue();
-				
-				//comienza el undoable
-				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-				if(getSongManager().getMeasureManager().setStroke( beat.getMeasure(), beat.getStart(), value, direction ) ){
-					//termia el undoable
-					addUndoableEdit(undoable.endUndo());
-					TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				}
-				updateTablature();
-			}
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetStrokeUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetStrokeUpAction.java
deleted file mode 100644
index ebea73e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetStrokeUpAction.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.effects.StrokeEditor;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGStroke;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetStrokeUpAction extends Action{
-	public static final String NAME = "action.beat.general.set-stroke-up";
-	
-	public SetStrokeUpAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGBeat beat = getEditor().getTablature().getCaret().getSelectedBeat();
-		if(beat != null && !beat.isRestBeat()){
-			StrokeEditor editor = new StrokeEditor();
-			editor.open(beat);
-			if( editor.getStatus() != StrokeEditor.STATUS_CANCEL ){
-				int direction = ( editor.getStatus() == StrokeEditor.STATUS_CLEAN ? TGStroke.STROKE_NONE : TGStroke.STROKE_UP );
-				int value = editor.getValue();
-				
-				//comienza el undoable
-				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-				if(getSongManager().getMeasureManager().setStroke( beat.getMeasure(), beat.getStart(), value, direction ) ){
-					//termia el undoable
-					addUndoableEdit(undoable.endUndo());
-					TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				}
-				updateTablature();
-			}
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceAutoAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceAutoAction.java
deleted file mode 100644
index 1f8401e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceAutoAction.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatGroup;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetVoiceAutoAction extends Action{
-	public static final String NAME = "action.beat.general.voice-auto";
-	
-	public SetVoiceAutoAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		TGBeatImpl beat = caret.getSelectedBeat();
-		if( beat != null ){
-			TGVoiceImpl voice = beat.getVoiceImpl( caret.getVoice() );
-			TGBeatGroup group = voice.getBeatGroup();
-			if(!voice.isEmpty() && !voice.isRestVoice() && group != null ){
-				//comienza el undoable
-				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-				
-				Iterator it = group.getVoices().iterator();
-				while( it.hasNext() ){
-					TGVoice current = (TGVoice)it.next();
-					getSongManager().getMeasureManager().changeVoiceDirection(current, TGVoice.DIRECTION_NONE);
-				}
-				
-				//termia el undoable
-				addUndoableEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				
-				updateTablature();
-			}
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceDownAction.java
deleted file mode 100644
index 9ea7e0a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceDownAction.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatGroup;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetVoiceDownAction extends Action{
-	public static final String NAME = "action.beat.general.voice-down";
-	
-	public SetVoiceDownAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		TGBeatImpl beat = caret.getSelectedBeat();
-		if( beat != null ){
-			TGVoiceImpl voice = beat.getVoiceImpl( caret.getVoice() );
-			TGBeatGroup group = voice.getBeatGroup();
-			if(!voice.isEmpty() && !voice.isRestVoice() && group != null ){
-				//comienza el undoable
-				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-				
-				Iterator it = group.getVoices().iterator();
-				while( it.hasNext() ){
-					TGVoice current = (TGVoice)it.next();
-					getSongManager().getMeasureManager().changeVoiceDirection(current, TGVoice.DIRECTION_DOWN);
-				}
-				
-				//termia el undoable
-				addUndoableEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				
-				updateTablature();
-			}
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceUpAction.java
deleted file mode 100644
index cb8e868..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/SetVoiceUpAction.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatGroup;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class SetVoiceUpAction extends Action{
-	public static final String NAME = "action.beat.general.voice-up";
-	
-	public SetVoiceUpAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		TGBeatImpl beat = caret.getSelectedBeat();
-		if( beat != null ){
-			TGVoiceImpl voice = beat.getVoiceImpl( caret.getVoice() );
-			TGBeatGroup group = voice.getBeatGroup();
-			if(!voice.isEmpty() && !voice.isRestVoice() && group != null ){
-				//comienza el undoable
-				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-				
-				Iterator it = group.getVoices().iterator();
-				while( it.hasNext() ){
-					TGVoice current = (TGVoice)it.next();
-					getSongManager().getMeasureManager().changeVoiceDirection(current, TGVoice.DIRECTION_UP);
-				}
-				
-				//termia el undoable
-				addUndoableEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				
-				updateTablature();
-			}
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ShiftNoteDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ShiftNoteDownAction.java
deleted file mode 100644
index c8c4e3f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ShiftNoteDownAction.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ShiftNoteDownAction extends Action{
-	public static final String NAME = "action.note.general.shift-down";
-	
-	public ShiftNoteDownAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			int nextString = getSongManager().getMeasureManager().shiftNoteDown(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString());
-			if(nextString > 0){
-				getEditor().getTablature().getCaret().setStringNumber(nextString);
-				
-				//termia el undoable
-				addUndoableEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			}
-			updateTablature();
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ShiftNoteUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ShiftNoteUpAction.java
deleted file mode 100644
index 36a0b1b..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/note/ShiftNoteUpAction.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.note;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.models.TGNote;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ShiftNoteUpAction extends Action{
-	public static final String NAME = "action.note.general.shift-up";
-	
-	public ShiftNoteUpAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGNote note = getEditor().getTablature().getCaret().getSelectedNote();
-		if(note != null){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			int nextString = getSongManager().getMeasureManager().shiftNoteUp(getEditor().getTablature().getCaret().getMeasure(),note.getVoice().getBeat().getStart(),note.getString());
-			if(nextString > 0){
-				getEditor().getTablature().getCaret().setStringNumber(nextString);
-				
-				//termia el undoable
-				addUndoableEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			}
-			updateTablature();
-		}
-		return 0;
-	}
-	
-	public void updateTablature() {
-		fireUpdate(getEditor().getTablature().getCaret().getMeasure().getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditConfigAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditConfigAction.java
deleted file mode 100644
index 7d85dd9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditConfigAction.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.settings;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.system.config.TGConfigEditor;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class EditConfigAction extends Action{
-	public static final String NAME = "action.settings.configure";
-	
-	public EditConfigAction() {
-		super(NAME, AUTO_LOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE );
-	}
-	
-	protected int execute(TypedEvent e){
-		new TGConfigEditor().showDialog(TuxGuitar.instance().getShell());
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditKeyBindingsAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditKeyBindingsAction.java
deleted file mode 100644
index d615e26..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditKeyBindingsAction.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.settings;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.system.keybindings.editor.KeyBindingEditor;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class EditKeyBindingsAction extends Action{
-	public static final String NAME = "action.settings.key-bindings";
-	
-	public EditKeyBindingsAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		new KeyBindingEditor().show(TuxGuitar.instance().getShell());
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditPluginsAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditPluginsAction.java
deleted file mode 100644
index 68ddb5f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/settings/EditPluginsAction.java
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.settings;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.system.plugins.TGPlugin;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginSetup;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class EditPluginsAction extends Action{
-	public static final String NAME = "action.settings.plugins";
-	
-	private static final int TABLE_WIDTH = 400;
-	private static final int TABLE_HEIGHT = 300;
-	
-	public EditPluginsAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog();
-		return 0;
-	}
-	
-	public void showDialog() {
-		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		dialog.setText(TuxGuitar.getProperty("plugins"));
-		
-		final Table table = new Table(dialog, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL);
-		table.setLayoutData(new GridData(TABLE_WIDTH,TABLE_HEIGHT));
-		table.setHeaderVisible(true);
-		
-		final TableColumn columnEnabled = new TableColumn(table, SWT.LEFT);
-		final TableColumn columnPlugin = new TableColumn(table, SWT.LEFT);
-		columnEnabled.setText(TuxGuitar.getProperty("plugin.column.enabled"));
-		columnPlugin.setText(TuxGuitar.getProperty("plugin.column.name"));
-		columnEnabled.setWidth( (TABLE_WIDTH / 4) );
-		columnPlugin.setWidth( (TABLE_WIDTH - (TABLE_WIDTH / 4)) );
-		
-		Iterator it = TuxGuitar.instance().getPluginManager().getPlugins().iterator();
-		while(it.hasNext()){
-			TGPlugin plugin = (TGPlugin)it.next();
-			TableItem item = new TableItem(table, SWT.NONE);
-			item.setData(plugin);
-			item.setText(1,((plugin.getName() != null)?plugin.getName():"Undefined Plugin"));
-			item.setChecked(TuxGuitar.instance().getPluginManager().isEnabled(plugin));
-		}
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		final Button buttonSetup = new Button(buttons, SWT.PUSH);
-		buttonSetup.setText(TuxGuitar.getProperty("configure"));
-		buttonSetup.setLayoutData(getButtonData());
-		buttonSetup.setEnabled(false);
-		buttonSetup.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TableItem item = table.getItem(table.getSelectionIndex());
-				if(item != null && item.getData() instanceof TGPluginSetup){
-					try {
-						((TGPluginSetup)item.getData()).setupDialog(dialog);
-					}catch(Throwable throwable){
-						MessageDialog.errorMessage(dialog, throwable);
-					}
-				}
-			}
-		});
-		
-		final Button buttonInfo = new Button(buttons, SWT.PUSH);
-		buttonInfo.setText(TuxGuitar.getProperty("info"));
-		buttonInfo.setLayoutData(getButtonData());
-		buttonInfo.setEnabled(false);
-		buttonInfo.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TableItem item = table.getItem(table.getSelectionIndex());
-				if(item != null && item.getData() instanceof TGPlugin){
-					try {
-						showInfo(dialog,(TGPlugin)item.getData());
-					}catch(Throwable throwable){
-						MessageDialog.errorMessage(dialog, throwable);
-					}
-				}
-			}
-		});
-		
-		Button buttonClose = new Button(buttons, SWT.PUSH);
-		buttonClose.setText(TuxGuitar.getProperty("close"));
-		buttonClose.setLayoutData(getButtonData());
-		buttonClose.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		table.addListener (SWT.Selection, new Listener() {
-			public void handleEvent (Event event) {
-				buttonInfo.setEnabled(false);
-				buttonSetup.setEnabled(false);
-				if(event.item instanceof TableItem && event.item.getData() instanceof TGPlugin){
-					final TableItem item = (TableItem)event.item;
-					if(event.detail == SWT.CHECK){
-						TuxGuitar.instance().loadCursor(dialog,SWT.CURSOR_WAIT);
-						TuxGuitar.instance().getPluginManager().setEnabled((TGPlugin)item.getData(),item.getChecked());
-						TuxGuitar.instance().loadCursor(dialog,SWT.CURSOR_ARROW);
-						table.setSelection(item);
-					}
-					buttonInfo.setEnabled(true);
-					buttonSetup.setEnabled((item.getData() instanceof TGPluginSetup));
-				}
-			}
-		});
-		
-		dialog.setDefaultButton( buttonInfo );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-	
-	public void showInfo(Shell parent,TGPlugin plugin) {
-		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		dialog.setText(TuxGuitar.getProperty("plugins"));
-		
-		Composite info = new Composite(dialog,SWT.NONE);
-		info.setLayout(new GridLayout(2,false));
-		
-		showInfoString(info,TuxGuitar.getProperty("name") + ":",plugin.getName());
-		showInfoString(info,TuxGuitar.getProperty("version") + ":",plugin.getVersion());
-		showInfoString(info,TuxGuitar.getProperty("author") + ":",plugin.getAuthor());
-		showInfoString(info,TuxGuitar.getProperty("description") + ":",plugin.getDescription());
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout());
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		Button buttonExit = new Button(buttons, SWT.PUSH);
-		buttonExit.setText(TuxGuitar.getProperty("exit"));
-		buttonExit.setLayoutData(getButtonData());
-		buttonExit.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonExit );
-		
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-	
-	private void showInfoString(Composite parent,String key,String value){
-		Label labelKey = new Label(parent,SWT.LEFT);
-		Label labelValue = new Label(parent,SWT.LEFT | SWT.WRAP);
-		labelKey.setLayoutData(new GridData(SWT.LEFT,SWT.TOP,false,true));
-		labelValue.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
-		setBold(labelKey);
-		labelKey.setText(key);
-		labelValue.setText( (value != null && value.length() > 0)?value:TuxGuitar.getProperty("plugin.unknown-value"));
-	}
-	
-	private void setBold(Label label){
-		FontData[] fontDatas = label.getFont().getFontData();
-		if(fontDatas.length > 0){
-			final Font font = new Font(label.getDisplay(),fontDatas[0].getName(),(fontDatas[0].getHeight()),SWT.BOLD);
-			label.setFont(font);
-			label.addDisposeListener(new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-					font.dispose();
-				}
-			});
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/system/DisposeAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/system/DisposeAction.java
deleted file mode 100644
index babea3e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/system/DisposeAction.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.system;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ShellEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.file.FileActionUtils;
-import org.herac.tuxguitar.gui.marker.MarkerList;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.table.TGTableViewer;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class DisposeAction extends Action {
-	public static final String NAME = "action.system.dispose";
-	
-	public DisposeAction() {
-		super(NAME, AUTO_LOCK);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(e instanceof ShellEvent){
-			TuxGuitar.instance().getPlayer().reset();
-			
-			if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
-				ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
-				confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
-				int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
-				if(status == ConfirmDialog.STATUS_CANCEL){
-					return AUTO_UNLOCK;
-				}
-				if(status == ConfirmDialog.STATUS_YES){
-					final String fileName = FileActionUtils.getFileName();
-					if(fileName == null){
-						return AUTO_UNLOCK;
-					}
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-					new Thread(new Runnable() {
-						public void run() {
-							if(!TuxGuitar.isDisposed()){
-								FileActionUtils.save(fileName);
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								
-								exit();
-							}
-						}
-					}).start();
-					return 0;
-				}
-			}
-			exit();
-		}
-		return 0;
-	}
-	
-	protected void exit(){
-		try {
-			TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
-					TuxGuitar.instance().lock();
-					closeModules();
-					saveConfig();
-					dispose();
-					TuxGuitar.instance().unlock();
-				}
-			});
-		} catch (Throwable throwable) {
-			throwable.printStackTrace();
-		}
-	}
-	
-	protected void saveConfig(){
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		
-		config.setProperty(TGConfigKeys.LAYOUT_MODE,getEditor().getTablature().getViewLayout().getMode());
-		config.setProperty(TGConfigKeys.LAYOUT_STYLE,getEditor().getTablature().getViewLayout().getStyle());
-		config.setProperty(TGConfigKeys.SHOW_PIANO,!TuxGuitar.instance().getPianoEditor().isDisposed());
-		config.setProperty(TGConfigKeys.SHOW_MATRIX,!TuxGuitar.instance().getMatrixEditor().isDisposed());
-		config.setProperty(TGConfigKeys.SHOW_FRETBOARD,TuxGuitar.instance().getFretBoardEditor().isVisible());
-		config.setProperty(TGConfigKeys.SHOW_MIXER,!TuxGuitar.instance().getMixer().isDisposed());
-		config.setProperty(TGConfigKeys.SHOW_TRANSPORT,!TuxGuitar.instance().getTransport().isDisposed());
-		config.setProperty(TGConfigKeys.SHOW_MARKERS,!MarkerList.instance().isDisposed());
-		config.setProperty(TGConfigKeys.MAXIMIZED,TuxGuitar.instance().getShell().getMaximized());
-		config.setProperty(TGConfigKeys.WIDTH,TuxGuitar.instance().getShell().getClientArea().width);
-		config.setProperty(TGConfigKeys.HEIGHT,TuxGuitar.instance().getShell().getClientArea().height);
-		config.setProperty(TGConfigKeys.EDITOR_MOUSE_MODE,getEditor().getTablature().getEditorKit().getMouseMode());
-		config.setProperty(TGConfigKeys.MATRIX_GRIDS,TuxGuitar.instance().getMatrixEditor().getGrids());
-		
-		TuxGuitar.instance().getConfig().save();
-	}
-	
-	protected void closeModules(){
-		TuxGuitar.instance().getPlayer().close();
-		TuxGuitar.instance().getPluginManager().closePlugins();
-	}
-	
-	protected void dispose(){
-		TGTableViewer.disposeColors();
-		TuxGuitar.instance().getSongManager().clearSong();
-		TuxGuitar.instance().getFretBoardEditor().dispose();
-		TuxGuitar.instance().getTablatureEditor().getTablature().dispose();
-		TuxGuitar.instance().getIconManager().disposeIcons();
-		TuxGuitar.instance().getShell().dispose();
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/ScaleAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/ScaleAction.java
deleted file mode 100644
index dace99b..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/ScaleAction.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.tools;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.tools.scale.ScaleEditor;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ScaleAction extends Action{
-	public static final String NAME = "action.tools.scale";
-	
-	public ScaleAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		new ScaleEditor().show();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/TGBrowserAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/TGBrowserAction.java
deleted file mode 100644
index c271e8e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/TGBrowserAction.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.herac.tuxguitar.gui.actions.tools;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-public class TGBrowserAction extends Action{
-	public static final String NAME = "action.tools.browser";
-	
-	public TGBrowserAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getBrowser().isDisposed()){
-			TuxGuitar.instance().getBrowser().show();
-		}else{
-			TuxGuitar.instance().getBrowser().dispose();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/TransposeAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/TransposeAction.java
deleted file mode 100644
index faa3297..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/tools/TransposeAction.java
+++ /dev/null
@@ -1,230 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.tools;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TransposeAction extends Action{
-	public static final String NAME = "action.tools.transpose";
-	
-	public TransposeAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		final int[] transpositions = new int[25];
-		for( int i = 0 ; i < transpositions.length ; i ++ ){
-			transpositions[ i ] = ( i - ( transpositions.length / 2 ) );
-		}
-		
-		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("tools.transpose"));
-		
-		//-----------------TEMPO------------------------
-		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout(2,false));
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setText(TuxGuitar.getProperty("tools.transpose"));
-		
-		
-		Label transpositionLabel = new Label(group, SWT.NULL);
-		transpositionLabel.setText(TuxGuitar.getProperty("tools.transpose.semitones"));
-		transpositionLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
-		
-		final Combo transpositionCombo = new Combo(group, SWT.DROP_DOWN | SWT.READ_ONLY );
-		transpositionCombo.setLayoutData( new GridData(SWT.FILL, SWT.FILL, true , true) );
-		for( int i = 0 ; i < transpositions.length ; i ++ ){
-			transpositionCombo.add( Integer.toString( transpositions[i]) );
-		}
-		transpositionCombo.select( ( transpositions.length / 2 ) );
-		
-		//------------------OPTIONS--------------------------
-		Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		options.setLayout(new GridLayout());
-		options.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		options.setText(TuxGuitar.getProperty("options"));
-		
-		final Button applyToAllMeasuresButton = new Button(options, SWT.RADIO);
-		applyToAllMeasuresButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-track"));
-		applyToAllMeasuresButton.setSelection(true);
-		
-		final Button applyToCurrentMeasureButton = new Button(options, SWT.RADIO);
-		applyToCurrentMeasureButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-measure"));
-		
-		final Button applyToAllTracksButton = new Button(options, SWT.CHECK);
-		applyToAllTracksButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-all-tracks"));
-		applyToAllTracksButton.setSelection(true);
-		
-		final Button applyToChordsButton = new Button(options, SWT.CHECK);
-		applyToChordsButton.setText(TuxGuitar.getProperty("tools.transpose.apply-to-chords"));
-		applyToChordsButton.setSelection(true);
-		
-		final Button tryKeepStringButton = new Button(options, SWT.CHECK);
-		tryKeepStringButton.setText(TuxGuitar.getProperty("tools.transpose.try-keep-strings"));
-		tryKeepStringButton.setSelection(true);
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				int transpositionIndex =  transpositionCombo.getSelectionIndex() ;
-				if( transpositionIndex >= 0 && transpositionIndex < transpositions.length ){
-					final int transposition = transpositions[ transpositionIndex ];
-					final boolean tryKeepString = tryKeepStringButton.getSelection();
-					final boolean applyToChords = applyToChordsButton.getSelection();
-					final boolean applyToAllTracks = applyToAllTracksButton.getSelection();
-					final boolean applyToAllMeasures = applyToAllMeasuresButton.getSelection();
-					
-					dialog.dispose();
-					try {
-						TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-							public void run() throws Throwable {
-								ActionLock.lock();
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-								transpose(transposition, tryKeepString, applyToChords , applyToAllMeasures, applyToAllTracks );
-								TuxGuitar.instance().updateCache( true );
-								TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-								ActionLock.unlock();
-							}
-						});
-					} catch (Throwable throwable) {
-						MessageDialog.errorMessage(throwable);
-					}
-				} else {
-					dialog.dispose();
-				}
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	public void transpose( int transposition , boolean tryKeepString , boolean applyToChords , boolean applyToAllMeasures , boolean applyToAllTracks) {
-		//comienza el undoable
-		UndoableJoined undoableJoined = new UndoableJoined();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		if( applyToAllMeasures ){
-			
-			if( applyToAllTracks ){
-				TGSong song = getSongManager().getSong();
-				for( int i = 0 ; i < song.countTracks() ; i ++ ){
-					transposeTrack( undoableJoined , song.getTrack( i ) , transposition , tryKeepString , applyToChords);
-				}
-			} else {
-				transposeTrack( undoableJoined , caret.getTrack(), transposition , tryKeepString , applyToChords);
-			}
-			
-			updateTablature();
-		}else{
-			if( applyToAllTracks ){
-				TGSong song = getSongManager().getSong();
-				for( int i = 0 ; i < song.countTracks() ; i ++ ){
-					TGTrack track = song.getTrack( i );
-					TGMeasure measure = getSongManager().getTrackManager().getMeasure(track, caret.getMeasure().getNumber() );
-					if( measure != null ){
-						transposeMeasure( undoableJoined, measure, transposition , tryKeepString , applyToChords);
-					}
-				}
-			} else {
-				transposeMeasure( undoableJoined , caret.getMeasure(), transposition , tryKeepString , applyToChords);
-			}
-			fireUpdate( caret.getMeasure().getNumber() );
-		}
-		
-		//termia el undoable
-		if( !undoableJoined.isEmpty() ){
-			addUndoableEdit(undoableJoined.endUndo());
-		}
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-	}
-	
-	public void transposeMeasure( UndoableJoined undoableJoined , TGMeasure measure, int transposition , boolean tryKeepString , boolean applyToChords ) {
-		if( transposition != 0 && !measure.getTrack().isPercussionTrack() ){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo( measure );
-			
-			getSongManager().getMeasureManager().transposeNotes( measure , transposition , tryKeepString , applyToChords , -1 );
-			
-			//termia el undoable
-			undoableJoined.addUndoableEdit( undoable.endUndo( measure ) );
-		}
-	}
-	
-	public void transposeTrack( UndoableJoined undoableJoined , TGTrack track, int transposition , boolean tryKeepString , boolean applyToChords ) {
-		if( transposition != 0 && !track.isPercussionTrack() ){
-			//comienza el undoable
-			UndoableTrackGeneric undoable = UndoableTrackGeneric.startUndo( track );
-			
-			getSongManager().getTrackManager().transposeNotes( track , transposition , tryKeepString , applyToChords, -1 );
-			
-			//termia el undoable
-			undoableJoined.addUndoableEdit( undoable.endUndo( track ) );
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/AddTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/AddTrackAction.java
deleted file mode 100644
index 2e74c8a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/AddTrackAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableAddTrack;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class AddTrackAction extends Action{
-	public static final String NAME = "action.track.add";
-	
-	public AddTrackAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableAddTrack undoable = UndoableAddTrack.startUndo();
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		
-		TGTrack track = getSongManager().createTrack();
-		updateTablature();
-		caret.update(track.getNumber(),caret.getPosition(),1);
-		TuxGuitar.instance().getMixer().update();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo(track));
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/CloneTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/CloneTrackAction.java
deleted file mode 100644
index 3a1254d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/CloneTrackAction.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableCloneTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class CloneTrackAction extends Action{
-	public static final String NAME = "action.track.clone";
-	
-	public CloneTrackAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableCloneTrack undoable = UndoableCloneTrack.startUndo();
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		
-		getSongManager().cloneTrack(caret.getTrack());
-		updateTablature();
-		TuxGuitar.instance().getMixer().update();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/EditLyricsAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/EditLyricsAction.java
deleted file mode 100644
index 1b91090..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/EditLyricsAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class EditLyricsAction extends Action{
-	public static final String NAME = "action.track.lyrics";
-	
-	public EditLyricsAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getLyricEditor().isDisposed()){
-			TuxGuitar.instance().getLyricEditor().show();
-		}else{
-			TuxGuitar.instance().getLyricEditor().dispose();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoFirstTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoFirstTrackAction.java
deleted file mode 100644
index 6c8c8df..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoFirstTrackAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoFirstTrackAction extends Action{
-	public static final String NAME = "action.track.go-first";
-	
-	public GoFirstTrackAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		TGTrack track = getSongManager().getFirstTrack();
-		if(track != null){
-			caret.update(track.getNumber());
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoLastTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoLastTrackAction.java
deleted file mode 100644
index 3108b8a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoLastTrackAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoLastTrackAction extends Action{
-	public static final String NAME = "action.track.go-last";
-	
-	public GoLastTrackAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		TGTrack track = getSongManager().getLastTrack();
-		if(track != null){
-			caret.update(track.getNumber());
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoNextTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoNextTrackAction.java
deleted file mode 100644
index d5cc583..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoNextTrackAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoNextTrackAction extends Action{
-	public static final String NAME = "action.track.go-next";
-	
-	public GoNextTrackAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		TGTrack track = getSongManager().getTrack(caret.getTrack().getNumber() + 1);
-		if(track != null){
-			caret.update(track.getNumber());
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoPreviousTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoPreviousTrackAction.java
deleted file mode 100644
index f4bb01c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoPreviousTrackAction.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoPreviousTrackAction extends Action{
-	public static final String NAME = "action.track.go-previous";
-	
-	public GoPreviousTrackAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		TGTrack track = getSongManager().getTrack(caret.getTrack().getNumber() - 1);
-		if(track != null){
-			caret.update(track.getNumber());
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoToTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoToTrackAction.java
deleted file mode 100644
index d82a856..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/GoToTrackAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class GoToTrackAction extends Action{
-	public static final String NAME = "action.track.goto";
-	
-	public GoToTrackAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Object data = e.widget.getData();
-		if(data instanceof TGTrackImpl){
-			TGTrackImpl track = (TGTrackImpl)data;
-			getEditor().getTablature().getCaret().update(track.getNumber());
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/MoveTrackDownAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/MoveTrackDownAction.java
deleted file mode 100644
index b4ae57e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/MoveTrackDownAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableMoveTrackDown;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class MoveTrackDownAction extends Action{
-	public static final String NAME = "action.track.move-down";
-	
-	public MoveTrackDownAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMoveTrackDown undoable = UndoableMoveTrackDown.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		TGTrack track = caret.getTrack();
-		
-		if(getSongManager().moveTrackDown(track)){
-			updateTablature();
-			TuxGuitar.instance().getMixer().update();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo(track));
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/MoveTrackUpAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/MoveTrackUpAction.java
deleted file mode 100644
index 85f147e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/MoveTrackUpAction.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableMoveTrackUp;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class MoveTrackUpAction extends Action{
-	public static final String NAME = "action.track.move-up";
-	
-	public MoveTrackUpAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		//comienza el undoable
-		UndoableMoveTrackUp undoable = UndoableMoveTrackUp.startUndo();
-		
-		Caret caret = getEditor().getTablature().getCaret();
-		TGTrack track = caret.getTrack();
-		
-		if(getSongManager().moveTrackUp(track)){
-			updateTablature();
-			TuxGuitar.instance().getMixer().update();
-			
-			//termia el undoable
-			addUndoableEdit(undoable.endUndo(track));
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/RemoveTrackAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/RemoveTrackAction.java
deleted file mode 100644
index 9970f20..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/RemoveTrackAction.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableRemoveTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class RemoveTrackAction extends Action{
-	public static final String NAME = "action.track.remove";
-	
-	public RemoveTrackAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		Caret caret = getEditor().getTablature().getCaret();
-		
-		if(getSongManager().getSong().countTracks() <= 1){
-			//TuxGuitar.instance().getAction(NewFileAction.NAME).process(e);
-			TuxGuitar.instance().newSong();
-			return 0;
-		}
-		//comienza el undoable
-		UndoableRemoveTrack undoable = UndoableRemoveTrack.startUndo();
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		TGTrackImpl track = caret.getTrack();
-		TGTrackImpl nextCaretTrack = (TGTrackImpl)getSongManager().getTrack(track.getNumber() + 1);
-		if(nextCaretTrack == null){
-			nextCaretTrack =  (TGTrackImpl)getSongManager().getTrack(track.getNumber() - 1);
-		}
-		getSongManager().removeTrack(track);
-		updateTablature();
-		
-		//move the caret to the next or previous track
-		if(nextCaretTrack != null){
-			caret.update(nextCaretTrack.getNumber(),getSongManager().getTrackManager().getMeasureAt(nextCaretTrack, caret.getMeasure().getStart()).getStart(),1);
-		}
-		TuxGuitar.instance().getMixer().update();
-		
-		//termia el undoable
-		addUndoableEdit(undoable.endUndo());
-		
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/TrackPropertiesAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/TrackPropertiesAction.java
deleted file mode 100644
index 0d70e27..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/track/TrackPropertiesAction.java
+++ /dev/null
@@ -1,648 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.track;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.ColorDialog;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackGeneric;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackInfo;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackInstrument;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.TGMusicKeyUtils;
-import org.herac.tuxguitar.player.base.MidiInstrument;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGColor;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class TrackPropertiesAction extends Action {
-	public static final String NAME = "action.track.properties";
-	
-	private static final String[] NOTE_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_TUNING);
-	private static final int MINIMUM_LEFT_CONTROLS_WIDTH = 180;
-	private static final int MINIMUM_BUTTON_WIDTH = 80;
-	private static final int MINIMUM_BUTTON_HEIGHT = 25;
-	private static final int MAX_STRINGS = 7;
-	private static final int MIN_STRINGS = 4;
-	private static final int MAX_OCTAVES = 10;
-	private static final int MAX_NOTES = 12;
-	
-	protected Shell dialog;
-	protected Text nameText;
-	protected TGColor trackColor;
-	protected List tempStrings;
-	protected Button stringTransposition;
-	protected Button stringTranspositionTryKeepString;
-	protected Button stringTranspositionApplyToChords;
-	protected Spinner stringCountSpinner;
-	protected Combo[] stringCombos = new Combo[MAX_STRINGS];
-	protected Combo offsetCombo;
-	protected int stringCount;
-	protected Combo instrumentCombo;
-	protected Button percussionCheckBox;
-	protected Color colorButtonValue;
-	
-	public TrackPropertiesAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | DISABLE_ON_PLAYING | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		showDialog(getEditor().getTablature().getShell());
-		return 0;
-	}
-	
-	public void showDialog(Shell shell) {
-		TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
-		if (track != null) {
-			this.stringCount = track.getStrings().size();
-			this.trackColor = track.getColor().clone(getSongManager().getFactory());
-			this.initTempStrings(track.getStrings());
-			
-			this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			this.dialog.setLayout(new GridLayout(2,false));
-			this.dialog.setText(TuxGuitar.getProperty("track.properties"));
-			
-			Composite left = new Composite(this.dialog,SWT.NONE);
-			left.setLayout(new GridLayout());
-			left.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			
-			Composite right = new Composite(this.dialog,SWT.NONE);
-			right.setLayout(new GridLayout());
-			right.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			
-			Composite bottom = new Composite(this.dialog, SWT.NONE);
-			bottom.setLayout(new GridLayout(2,false));
-			bottom.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true,2,1));
-			
-			//GENERAL
-			initTrackInfo(makeGroup(left,1,TuxGuitar.getProperty("track.properties.general")), track);
-			
-			//INSTRUMENT
-			initInstrumentFields(makeGroup(left,1,TuxGuitar.getProperty("instrument.instrument")), track);
-			
-			//TUNING
-			initTuningInfo(makeGroup(right,2,TuxGuitar.getProperty("tuning")), track);
-			
-			//BUTTONS
-			initButtons(bottom);
-			
-			updateTuningGroup(!track.isPercussionTrack());
-			
-			DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		}
-	}
-	
-	private Group makeGroup(Composite parent,int horizontalSpan,String text){
-		Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
-		group.setLayoutData(makeGridData(horizontalSpan));
-		group.setText(text);
-		
-		return group;
-	}
-	
-	private GridData makeGridData(int horizontalSpan){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.horizontalSpan = horizontalSpan;
-		return data;
-	}
-	
-	public GridData getButtonsData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
-		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
-		return data;
-	}
-	
-	private void initTrackInfo(Composite composite,TGTrackImpl track) {
-		composite.setLayout(new GridLayout(/*2,false*/));
-		Composite top = new Composite(composite, SWT.NONE);
-		top.setLayout(new GridLayout(/*2,false*/));
-		top.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
-		Composite bottom = new Composite(composite, SWT.NONE);
-		bottom.setLayout(new GridLayout(/*2,false*/));
-		bottom.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
-		
-		//-----------------------NAME---------------------------------
-		Label nameLabel = new Label(top, SWT.NONE);
-		nameLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
-		nameLabel.setText(TuxGuitar.getProperty("track.name") + ":");
-		
-		this.nameText = new Text(top, SWT.BORDER);
-		this.nameText.setLayoutData(getAlignmentData(MINIMUM_LEFT_CONTROLS_WIDTH,SWT.FILL));
-		this.nameText.setText(track.getName());
-		
-		//-----------------------COLOR---------------------------------
-		Label colorLabel = new Label(bottom, SWT.NONE);
-		colorLabel.setText(TuxGuitar.getProperty("track.color") + ":");
-		colorLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
-		
-		final Button colorButton = new Button(bottom, SWT.PUSH);
-		colorButton.setLayoutData(getAlignmentData(MINIMUM_LEFT_CONTROLS_WIDTH,SWT.FILL));
-		colorButton.setText(TuxGuitar.getProperty("choose"));
-		colorButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				ColorDialog dlg = new ColorDialog(TrackPropertiesAction.this.dialog);
-				dlg.setRGB(TrackPropertiesAction.this.dialog.getDisplay().getSystemColor(SWT.COLOR_BLACK).getRGB());
-				dlg.setText(TuxGuitar.getProperty("choose-color"));
-				RGB rgb = dlg.open();
-				if (rgb != null) {
-					TrackPropertiesAction.this.trackColor.setR(rgb.red);
-					TrackPropertiesAction.this.trackColor.setG(rgb.green);
-					TrackPropertiesAction.this.trackColor.setB(rgb.blue);
-					TrackPropertiesAction.this.setButtonColor(colorButton);
-				}
-			}
-		});
-		colorButton.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				TrackPropertiesAction.this.disposeButtonColor();
-			}
-		});
-		this.setButtonColor(colorButton);
-	}
-	
-	private void initTuningInfo(Composite composite,TGTrackImpl track) {
-		composite.setLayout(new GridLayout(2,false));
-		initTuningData(composite,track);
-		initTuningCombos(composite);
-		//initTuningOptions(composite);
-	}
-	
-	private void initTuningCombos(Composite parent) {
-		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setLayout(new GridLayout(/*MAX_STRINGS, false*/));
-		composite.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,false,true));
-		String[] tuningTexts = getAllValueNames();
-		for (int i = 0; i < MAX_STRINGS; i++) {
-			this.stringCombos[i] = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
-			this.stringCombos[i].setItems(tuningTexts);
-		}
-	}
-	
-	private void initTuningData(Composite parent,TGTrackImpl track) {
-		Composite composite = new Composite(parent, SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
-		
-		Composite top = new Composite(composite, SWT.NONE);
-		top.setLayout(new GridLayout());
-		top.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
-		
-		Composite middle = new Composite(composite, SWT.NONE);
-		middle.setLayout(new GridLayout());
-		middle.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
-		
-		Composite bottom = new Composite( composite , SWT.NONE );
-		bottom.setLayout( new GridLayout() );
-		bottom.setLayoutData( new GridData(SWT.FILL,SWT.TOP,true,true) );
-		
-		//---------------------------------STRING--------------------------------
-		Label stringCountLabel = new Label(top, SWT.NONE);
-		stringCountLabel.setText(TuxGuitar.getProperty("tuning.strings") + ":");
-		stringCountLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
-		
-		this.stringCountSpinner = new Spinner(top, SWT.BORDER);
-		this.stringCountSpinner.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
-		//this.stringCountSpinner.setLayoutData(getAlignmentData(80,SWT.FILL));
-		this.stringCountSpinner.setMinimum(MIN_STRINGS);
-		this.stringCountSpinner.setMaximum(MAX_STRINGS);
-		this.stringCountSpinner.setSelection(this.stringCount);
-		this.stringCountSpinner.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				TrackPropertiesAction.this.stringCount = TrackPropertiesAction.this.stringCountSpinner.getSelection();
-				setDefaultTuning();
-				updateTuningGroup(!TrackPropertiesAction.this.percussionCheckBox.getSelection());
-			}
-		});
-		
-		//---------------------------------OFFSET--------------------------------
-		Label offsetLabel = new Label(middle, SWT.NONE);
-		offsetLabel.setText(TuxGuitar.getProperty("tuning.offset") + ":");
-		offsetLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
-		
-		this.offsetCombo = new Combo(middle, SWT.DROP_DOWN | SWT.READ_ONLY);
-		//this.offsetCombo.setLayoutData(getAlignmentData(80,SWT.LEFT));
-		this.offsetCombo.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
-		for(int i = TGTrack.MIN_OFFSET;i <= TGTrack.MAX_OFFSET;i ++){
-			this.offsetCombo.add(Integer.toString(i));
-			if(i == track.getOffset()){
-				this.offsetCombo.select(i - TGTrack.MIN_OFFSET);
-			}
-		}
-		
-		//---------------------------------OPTIONS----------------------------------
-		this.stringTransposition = new Button( bottom , SWT.CHECK );
-		this.stringTransposition.setLayoutData( new GridData(SWT.FILL,SWT.CENTER,true,true) );
-		this.stringTransposition.setText(TuxGuitar.getProperty("tuning.strings.transpose"));
-		this.stringTransposition.setSelection( true );
-		
-		this.stringTranspositionApplyToChords = new Button( bottom , SWT.CHECK );
-		this.stringTranspositionApplyToChords.setLayoutData( new GridData(SWT.FILL,SWT.CENTER,true,true) );
-		this.stringTranspositionApplyToChords.setText(TuxGuitar.getProperty("tuning.strings.transpose.apply-to-chords"));
-		this.stringTranspositionApplyToChords.setSelection( true );
-		
-		this.stringTranspositionTryKeepString = new Button( bottom , SWT.CHECK );
-		this.stringTranspositionTryKeepString.setLayoutData( new GridData(SWT.FILL,SWT.CENTER,true,true) );
-		this.stringTranspositionTryKeepString.setText(TuxGuitar.getProperty("tuning.strings.transpose.try-keep-strings"));
-		this.stringTranspositionTryKeepString.setSelection( true );
-		
-		this.stringTransposition.addSelectionListener( new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				Button stringTransposition = TrackPropertiesAction.this.stringTransposition;
-				Button stringTranspositionApplyToChords = TrackPropertiesAction.this.stringTranspositionApplyToChords;
-				Button stringTranspositionTryKeepString = TrackPropertiesAction.this.stringTranspositionTryKeepString;
-				stringTranspositionApplyToChords.setEnabled( ( stringTransposition.isEnabled() && stringTransposition.getSelection() ) );
-				stringTranspositionTryKeepString.setEnabled( ( stringTransposition.isEnabled() && stringTransposition.getSelection() ) );
-			}
-		});
-	}
-	
-	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
-		GridData data = new GridData();
-		data.minimumWidth = minimumWidth;
-		data.horizontalAlignment = horizontalAlignment;
-		data.verticalAlignment = SWT.DEFAULT;
-		data.grabExcessHorizontalSpace = true;
-		data.grabExcessVerticalSpace = true;
-		return data;
-	}
-	
-	private void initButtons(final Composite parent) {
-		Button buttonOK = new Button(parent, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonsData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				updateTrackProperties();
-				TrackPropertiesAction.this.dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(parent, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonsData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TrackPropertiesAction.this.dialog.dispose();
-			}
-		});
-		
-		this.dialog.setDefaultButton( buttonOK );
-	}
-	
-	private void initInstrumentFields(Composite composite,TGTrackImpl track) {
-		composite.setLayout(new GridLayout());
-		
-		Composite top = new Composite(composite, SWT.NONE);
-		top.setLayout(new GridLayout());
-		top.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
-		
-		Composite bottom = new Composite(composite, SWT.NONE);
-		bottom.setLayout(new GridLayout());
-		bottom.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
-		
-		//------------Instrument Combo-------------------------------------
-		Label instrumentLabel = new Label(top, SWT.NONE);
-		instrumentLabel.setText(TuxGuitar.getProperty("instrument.instrument") + ":");
-		instrumentLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
-		
-		this.instrumentCombo = new Combo(top, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.instrumentCombo.setLayoutData(getAlignmentData(MINIMUM_LEFT_CONTROLS_WIDTH,SWT.FILL));
-		MidiInstrument[] instruments = TuxGuitar.instance().getPlayer().getInstruments();
-		if (instruments != null) {
-			int count = instruments.length;
-			if (count > 128) {
-				count = 128;
-			}
-			for (int i = 0; i < count; i++) {
-				this.instrumentCombo.add(instruments[i].getName());
-			}
-			this.instrumentCombo.select(track.getChannel().getInstrument());
-		}
-		this.instrumentCombo.setEnabled(!track.isPercussionTrack() && instruments != null);
-		
-		//--------------------Precusion CheckBox-------------------------------
-		this.percussionCheckBox = new Button(bottom, SWT.CHECK);
-		this.percussionCheckBox.setText(TuxGuitar.getProperty("instrument.percussion-track"));
-		this.percussionCheckBox.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
-		if (instruments != null) {
-			this.percussionCheckBox.setSelection(track.isPercussionTrack());
-			this.percussionCheckBox.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					TrackPropertiesAction.this.instrumentCombo.setEnabled(!TrackPropertiesAction.this.percussionCheckBox.getSelection());
-					
-					setDefaultTuning();
-					updateTuningGroup(!TrackPropertiesAction.this.percussionCheckBox.getSelection());
-				}
-			});
-		} else {
-			this.percussionCheckBox.setEnabled(false);
-		}
-		//-----------------------------------------------------------
-	}
-	
-	protected void updateTrackProperties() {
-		final TGTrackImpl track = getEditor().getTablature().getCaret().getTrack();
-		
-		final String trackName = this.nameText.getText();
-		
-		final List strings = new ArrayList();
-		for (int i = 0; i < this.stringCount; i++) {
-			strings.add(TGSongManager.newString(getSongManager().getFactory(),(i + 1), this.stringCombos[i].getSelectionIndex()));
-		}
-		
-		final boolean percussion = this.percussionCheckBox.getSelection();
-		final int offset = ((percussion)?0:TGTrack.MIN_OFFSET + this.offsetCombo.getSelectionIndex());
-		final int instrument = ((this.instrumentCombo.getSelectionIndex() >= 0)?this.instrumentCombo.getSelectionIndex():0);
-		
-		final TGColor trackColor = this.trackColor;
-		final boolean infoChanges = hasInfoChanges(track,trackName,trackColor,offset);
-		final boolean tuningChanges = hasTuningChanges(track,strings);
-		final boolean instrumentChanges = hasInstrumentChanges(track,instrument,percussion);
-		final boolean transposeStrings = (this.stringTransposition.getSelection() && !percussion && !track.isPercussionTrack() );
-		final boolean transposeApplyToChords = (transposeStrings && this.stringTranspositionApplyToChords.getSelection());
-		final boolean transposeTryKeepString = (transposeStrings && this.stringTranspositionTryKeepString.getSelection());
-		
-		try {
-			if(infoChanges || tuningChanges || instrumentChanges){
-				ActionLock.lock();
-				TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-					public void run() throws Throwable {
-						TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-						new Thread( new Runnable() {
-							public void run() {
-								TuxGuitar.instance().getFileHistory().setUnsavedFile();
-								UndoableJoined undoable = new UndoableJoined();
-								
-								UndoableTrackGeneric undoableGeneric = null;
-								if(tuningChanges){
-									undoableGeneric = UndoableTrackGeneric.startUndo(track);
-								}
-								
-								//--------------------------------------info---------------------------------------
-								if(infoChanges){
-									UndoableTrackInfo undoableInfo = null;
-									if(!tuningChanges){
-										undoableInfo = UndoableTrackInfo.startUndo(track);
-									}
-									getSongManager().getTrackManager().changeInfo(track,trackName,trackColor,offset);
-									if(!tuningChanges && undoableInfo != null){
-										undoable.addUndoableEdit(undoableInfo.endUndo(track));
-									}
-								}
-								//--------------------------------------tuning---------------------------------------
-								if(tuningChanges){
-									updateTrackTunings(track, strings, transposeStrings, transposeTryKeepString, transposeApplyToChords);
-								}
-								//-----------------------------instrument----------------------------------------------
-								if(instrumentChanges){
-									UndoableTrackInstrument undoableInstrument = null;
-									if(!tuningChanges){
-										undoableInstrument = UndoableTrackInstrument.startUndo(track);
-									}
-									getSongManager().getTrackManager().changeInstrument(track,instrument,percussion);
-									if(!tuningChanges && undoableInstrument != null){
-										undoable.addUndoableEdit(undoableInstrument.endUndo(track));
-									}
-								}
-								if(tuningChanges && undoableGeneric != null){
-									undoable.addUndoableEdit(undoableGeneric.endUndo(track));
-								}
-								addUndoableEdit(undoable.endUndo());
-								
-								new SyncThread(new Runnable() {
-									public void run() {
-										if(!TuxGuitar.isDisposed()){
-											updateTablature();
-											TuxGuitar.instance().getMixer().updateValues();
-											TuxGuitar.instance().updateCache( true );
-											TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-											ActionLock.unlock();
-										}
-									}
-								}).start();
-							}
-						}).start();
-					}
-				});
-			}
-		} catch (Throwable throwable) {
-			TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-			ActionLock.unlock();
-			throwable.printStackTrace();
-		}
-	}
-	
-	protected boolean hasInfoChanges(TGTrackImpl track,String name,TGColor color,int offset){
-		if(!name.equals(track.getName())){
-			return true;
-		}
-		if(!color.isEqual(track.getColor())){
-			return true;
-		}
-		if(offset != track.getOffset()){
-			return true;
-		}
-		return false;
-	}
-	
-	protected boolean hasInstrumentChanges(TGTrackImpl track,int instrument,boolean percussion){
-		return ((track.getChannel().getInstrument() != instrument) || (track.isPercussionTrack() != percussion));
-	}
-	
-	protected boolean hasTuningChanges(TGTrackImpl track,List newStrings){
-		List oldStrings = track.getStrings();
-		//check the number of strings
-		if(oldStrings.size() != newStrings.size()){
-			return true;
-		}
-		//check the tuning of strings
-		for(int i = 0;i < oldStrings.size();i++){
-			TGString oldString = (TGString)oldStrings.get(i);
-			boolean stringExists = false;
-			for(int j = 0;j < newStrings.size();j++){
-				TGString newString = (TGString)newStrings.get(j);
-				if(newString.isEqual(oldString)){
-					stringExists = true;
-				}
-			}
-			if(!stringExists){
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	protected void updateTrackTunings(TGTrackImpl track, List strings, boolean transposeStrings , boolean transposeTryKeepString , boolean transposeApplyToChords ){
-		int[] transpositions = getStringTranspositions(track, strings);
-		getSongManager().getTrackManager().changeInstrumentStrings(track,strings);
-		if( transposeStrings ){
-			getSongManager().getTrackManager().transposeNotes(track, transpositions, transposeTryKeepString, transposeApplyToChords );
-		}
-	}
-	
-	protected int[] getStringTranspositions(TGTrackImpl track, List newStrings ){
-		int[] transpositions = new int[ newStrings.size() ];
-		
-		TGString newString = null;
-		TGString oldString = null;
-		for( int index = 0; index < transpositions.length ; index ++ ){
-			for( int i = 0; i < track.stringCount() ; i ++ ){
-				TGString string = track.getString( i + 1 );
-				if( string.getNumber() == (index + 1) ){
-					oldString = string;
-					break;
-				}
-			}
-			for( int i = 0; i < newStrings.size() ; i ++ ){
-				TGString string = (TGString)newStrings.get( i );
-				if( string.getNumber() == (index + 1) ){
-					newString = string;
-					break;
-				}
-			}
-			if( oldString != null && newString != null ){
-				transpositions[ index ] = (oldString.getValue() - newString.getValue());
-			}else{
-				transpositions[ index ] = 0;
-			}
-			
-			newString = null;
-			oldString = null;
-		}
-		
-		return transpositions;
-	}
-	
-	protected void setButtonColor(Button button){
-		Color color = new Color(this.dialog.getDisplay(), this.trackColor.getR(), this.trackColor.getG(), this.trackColor.getB());
-		button.setForeground( color );
-		this.disposeButtonColor();
-		this.colorButtonValue = color;
-	}
-	
-	protected void disposeButtonColor(){
-		if(this.colorButtonValue != null && !this.colorButtonValue.isDisposed()){
-			this.colorButtonValue.dispose();
-			this.colorButtonValue = null;
-		}
-	}
-	
-	protected void updateTuningGroup(boolean enabled) {
-		for (int i = 0; i < this.tempStrings.size(); i++) {
-			TGString string = (TGString)this.tempStrings.get(i);
-			this.stringCombos[i].select(string.getValue());
-			this.stringCombos[i].setVisible(true);
-			this.stringCombos[i].setEnabled(enabled);
-		}
-		
-		for (int i = this.tempStrings.size(); i < MAX_STRINGS; i++) {
-			this.stringCombos[i].select(0);
-			this.stringCombos[i].setVisible(false);
-		}
-		this.offsetCombo.setEnabled(enabled);
-		this.stringTransposition.setEnabled(enabled);
-		this.stringTranspositionApplyToChords.setEnabled(enabled && this.stringTransposition.getSelection());
-		this.stringTranspositionTryKeepString.setEnabled(enabled && this.stringTransposition.getSelection());
-	}
-	
-	protected void initTempStrings(List realStrings) {
-		this.tempStrings = new ArrayList();
-		for (int i = 0; i < realStrings.size(); i++) {
-			TGString realString = (TGString) realStrings.get(i);
-			this.tempStrings.add(realString.clone(getSongManager().getFactory()));
-		}
-	}
-	
-	protected void setDefaultTuning() {
-		this.tempStrings.clear();
-		if (this.percussionCheckBox.getSelection()) {
-			for (int i = 1; i <= this.stringCount; i++) {
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),i, 0));
-			}
-		}
-		else {
-			switch (this.stringCount) {
-			case 7:
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 64));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 59));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 55));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 50));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),5, 45));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),6, 40));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),7, 35));
-				break;
-			case 6:
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 64));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 59));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 55));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 50));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),5, 45));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),6, 40));
-				break;
-			case 5:
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 43));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 38));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 33));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 28));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),5, 23));
-				break;
-			case 4:
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),1, 43));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),2, 38));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),3, 33));
-				this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),4, 28));
-				break;
-			default:
-				for( int i = 1 ; i <= this.stringCount ; i ++ ){
-					this.tempStrings.add(TGSongManager.newString(getSongManager().getFactory(),i,0));
-				}
-				break;
-			}
-		}
-	}
-	
-	protected String[] getAllValueNames() {
-		String[] valueNames = new String[MAX_NOTES * MAX_OCTAVES];
-		for (int i = 0; i < valueNames.length; i++) {
-			valueNames[i] =  NOTE_NAMES[ (i -  ((i / MAX_NOTES) * MAX_NOTES) ) ] + (i / MAX_NOTES);
-		}
-		return valueNames;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportMetronomeAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportMetronomeAction.java
deleted file mode 100644
index 2b0eacb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportMetronomeAction.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.herac.tuxguitar.gui.actions.transport;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-public class TransportMetronomeAction extends Action {
-	
-	public static final String NAME = "action.transport.metronome";
-	
-	public TransportMetronomeAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TuxGuitar.instance().getPlayer().setMetronomeEnabled(!TuxGuitar.instance().getPlayer().isMetronomeEnabled());
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportModeAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportModeAction.java
deleted file mode 100644
index ffc5886..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportModeAction.java
+++ /dev/null
@@ -1,463 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.transport;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.TypedEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.player.base.MidiPlayerMode;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGSong;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-public class TransportModeAction extends Action {
-	public static final String NAME = "action.transport.mode";
-	
-	protected static final int MIN_SELECTION = 1;
-	protected static final int MAX_SELECTION = 500;
-	protected static final int[] DEFAULT_PERCENTS = new int[]{25,50,75,100,125,150,175,200};
-	
-	protected Button simple;
-	protected Button simpleLoop;
-	protected Combo simplePercent;
-	
-	protected Button custom;
-	protected Spinner customFrom;
-	protected Spinner customTo;
-	protected Spinner customIncrement;
-	
-	protected MHeaderCombo loopSHeader;
-	protected MHeaderCombo loopEHeader;
-	
-	public TransportModeAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		this.showDialog(e.widget.getDisplay().getActiveShell(), TuxGuitar.instance().getPlayer().getMode());
-		return 0;
-	}
-	
-	public void showDialog(final Shell parent,final MidiPlayerMode mode) {
-		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("transport.mode"));
-		
-		// ----------------------------------------------------------------------
-		
-		Composite radios = new Composite(dialog, SWT.NONE);
-		radios.setLayout(new GridLayout());
-		radios.setLayoutData(getMainData());
-		
-		//---Simple---
-		this.simple = new Button(radios, SWT.RADIO);
-		this.simple.setText(TuxGuitar.getProperty("transport.mode.simple"));
-		this.simple.setSelection(mode.getType() == MidiPlayerMode.TYPE_SIMPLE);
-		RadioSelectionAdapter simpleAdapter = new RadioSelectionAdapter(this.simple);
-		
-		Group simpleGroup = new Group(radios, SWT.SHADOW_ETCHED_IN);
-		simpleGroup.setLayout(new GridLayout(2,false));
-		simpleGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		simpleGroup.setText(TuxGuitar.getProperty("transport.mode.simple"));
-		simpleAdapter.addControl(simpleGroup);
-		
-		simpleAdapter.addControl(makeLabel(simpleGroup, TuxGuitar.getProperty("transport.mode.simple.tempo-percent"),SWT.LEFT,1));
-		this.simplePercent = new Combo(simpleGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.simplePercent.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		for(int i = 0; i < DEFAULT_PERCENTS.length; i ++){
-			this.simplePercent.add(Integer.toString(DEFAULT_PERCENTS[i]) + "%",i);
-			if(mode.getSimplePercent() == DEFAULT_PERCENTS[i]){
-				this.simplePercent.select(i);
-			}
-		}
-		simpleAdapter.addControl(this.simplePercent);
-		
-		this.simpleLoop = new Button(simpleGroup, SWT.CHECK);
-		this.simpleLoop.setText(TuxGuitar.getProperty("transport.mode.simple.loop"));
-		this.simpleLoop.setSelection(mode.isLoop());
-		simpleAdapter.addControl(this.simpleLoop);
-		
-		GridData loopedData = new GridData(SWT.FILL,SWT.FILL,true,true);
-		loopedData.horizontalSpan = 2;
-		this.simpleLoop.setLayoutData(loopedData);
-		
-		//---Trainer---
-		this.custom = new Button(radios, SWT.RADIO);
-		this.custom.setText(TuxGuitar.getProperty("transport.mode.trainer"));
-		this.custom.setSelection(mode.getType() == MidiPlayerMode.TYPE_CUSTOM);
-		RadioSelectionAdapter customAdapter = new RadioSelectionAdapter(this.custom);
-		
-		Group trainerGroup = new Group(radios, SWT.SHADOW_ETCHED_IN);
-		trainerGroup.setLayout(new GridLayout(6,false));
-		trainerGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		trainerGroup.setText(TuxGuitar.getProperty("transport.mode.trainer"));
-		customAdapter.addControl(trainerGroup);
-		
-		customAdapter.addControl(makeLabel(trainerGroup, TuxGuitar.getProperty("composition.tempo"),SWT.LEFT,1));
-		this.customFrom = new Spinner(trainerGroup,SWT.BORDER);
-		this.customFrom.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		this.customFrom.setMinimum(MIN_SELECTION);
-		this.customFrom.setMaximum(MAX_SELECTION);
-		this.customFrom.setSelection(mode.getCustomPercentFrom());
-		customAdapter.addControl(this.customFrom);
-		customAdapter.addControl(makeLabel(trainerGroup, "%",SWT.LEFT,1));
-		
-		customAdapter.addControl(makeLabel(trainerGroup, TuxGuitar.getProperty("edit.to"),SWT.RIGHT,1));
-		this.customTo = new Spinner(trainerGroup,SWT.BORDER);
-		this.customTo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		this.customTo.setMinimum(MIN_SELECTION);
-		this.customTo.setMaximum(MAX_SELECTION);
-		this.customTo.setSelection(mode.getCustomPercentTo());
-		customAdapter.addControl(this.customTo);
-		customAdapter.addControl(makeLabel(trainerGroup, "%",SWT.LEFT,1));
-		
-		customAdapter.addControl(makeLabel(trainerGroup, TuxGuitar.getProperty("transport.mode.trainer.increment-description"),SWT.LEFT,4));
-		this.customIncrement = new Spinner(trainerGroup,SWT.BORDER);
-		this.customIncrement.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		this.customIncrement.setMinimum(MIN_SELECTION);
-		this.customIncrement.setMaximum(MAX_SELECTION);
-		this.customIncrement.setSelection(mode.getCustomPercentIncrement());
-		customAdapter.addControl(this.customIncrement);
-		customAdapter.addControl(makeLabel(trainerGroup, "%",SWT.LEFT,1));
-		
-		SpinnerSelectionAdapter spinnerAdapter = new SpinnerSelectionAdapter(this.customFrom,this.customTo,this.customIncrement);
-		this.customFrom.addSelectionListener(spinnerAdapter);
-		this.customTo.addSelectionListener(spinnerAdapter);
-		this.customIncrement.addSelectionListener(spinnerAdapter);
-		
-		//--- Loop Range ---
-		MHeaderRangeStatus mHeaderRangeStatus = new MHeaderRangeStatus(this.simple,this.simpleLoop,this.custom);
-		
-		Group rangeGroup = new Group(radios, SWT.SHADOW_ETCHED_IN);
-		rangeGroup.setLayout(new GridLayout(2,false));
-		rangeGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		rangeGroup.setText(TuxGuitar.getProperty("transport.mode.loop-range"));
-		mHeaderRangeStatus.addControl( rangeGroup );
-		
-		mHeaderRangeStatus.addControl( makeLabel(rangeGroup, TuxGuitar.getProperty("transport.mode.loop-range.from"), SWT.LEFT, 1) );
-		this.loopSHeader = new MHeaderCombo(rangeGroup);
-		mHeaderRangeStatus.addControl( this.loopSHeader.getControl() );
-		
-		mHeaderRangeStatus.addControl( makeLabel(rangeGroup, TuxGuitar.getProperty("transport.mode.loop-range.to"), SWT.LEFT, 1) );
-		this.loopEHeader = new MHeaderCombo(rangeGroup);
-		mHeaderRangeStatus.addControl( this.loopEHeader.getControl() );
-		
-		MHeaderComboController mHeaderController = new MHeaderComboController(this.loopSHeader, this.loopEHeader);
-		mHeaderController.updateLoopSHeader( mode.getLoopSHeader() );
-		mHeaderController.updateLoopEHeader( mode.getLoopSHeader() , mode.getLoopEHeader() );
-		mHeaderController.appendListener();
-		
-		simpleAdapter.update();
-		customAdapter.update();
-		mHeaderRangeStatus.update();
-		// ------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2, false));
-		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				updateMode(mode);
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	private GridData getMainData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 350;
-		return data;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private Label makeLabel(Composite parent,String text,int aligment,int horizontalSpan){
-		Label label = new Label(parent,SWT.CENTER | aligment);
-		label.setText(text);
-		GridData data = new GridData(SWT.FILL,SWT.CENTER,true,true);
-		data.horizontalSpan = horizontalSpan;
-		label.setLayoutData(data);
-		return label;
-	}
-	
-	protected void updateMode(MidiPlayerMode mode){
-		int type = (this.custom.getSelection())?MidiPlayerMode.TYPE_CUSTOM:MidiPlayerMode.TYPE_SIMPLE;
-		boolean loop = (type == MidiPlayerMode.TYPE_CUSTOM || (type == MidiPlayerMode.TYPE_SIMPLE && this.simpleLoop.getSelection()));
-		mode.setType(type);
-		mode.setLoop( loop );
-		mode.setSimplePercent( this.simplePercent.getSelectionIndex() >= 0?DEFAULT_PERCENTS[this.simplePercent.getSelectionIndex()]:MidiPlayerMode.DEFAULT_TEMPO_PERCENT);
-		mode.setCustomPercentFrom(this.customFrom.getSelection());
-		mode.setCustomPercentTo(this.customTo.getSelection());
-		mode.setCustomPercentIncrement(this.customIncrement.getSelection());
-		mode.setLoopSHeader( ( loop ? this.loopSHeader.getValue() : -1 ) );
-		mode.setLoopEHeader( ( loop ? this.loopEHeader.getValue() : -1 ) );
-		//mode.setLoopSHeader( ( loop && this.loopSHeader.getSelectionIndex() > 0 ? this.loopSHeader.getSelectionIndex() : -1 ) );
-		//mode.setLoopEHeader( ( loop && this.loopEHeader.getSelectionIndex() > 0 ? this.loopEHeader.getSelectionIndex() : -1 ) );
-		mode.reset();
-	}
-	
-	private class RadioSelectionAdapter extends SelectionAdapter{
-		private Button control;
-		private List controls;
-		
-		public RadioSelectionAdapter(Button control) {
-			this.controls = new ArrayList();
-			this.control = control;
-			this.control.addSelectionListener(this);
-		}
-		
-		public void addControl(Control control){
-			this.controls.add(control);
-		}
-		
-		public void update(){
-			boolean enabled = this.control.getSelection();
-			Iterator it = this.controls.iterator();
-			while(it.hasNext()){
-				Control control = (Control)it.next();
-				control.setEnabled(enabled);
-			}
-		}
-		
-		public void widgetSelected(SelectionEvent e) {
-			update();
-		}
-		
-	}
-	
-	private class SpinnerSelectionAdapter extends SelectionAdapter{
-		private Spinner to;
-		private Spinner from;
-		private Spinner increment;
-		
-		public SpinnerSelectionAdapter(Spinner from,Spinner to, Spinner increment) {
-			this.from = from;
-			this.to = to;
-			this.increment = increment;
-		}
-		
-		public void widgetSelected(SelectionEvent e) {
-			if(e.widget.equals(this.from)){
-				if(this.from.getSelection() < MIN_SELECTION){
-					this.from.setSelection(MIN_SELECTION);
-				}else if(this.from.getSelection() >= this.to.getSelection()){
-					this.from.setSelection(this.to.getSelection() - 1);
-				}
-			}else if(e.widget.equals(this.to)){
-				if(this.to.getSelection() <= this.from.getSelection()){
-					this.to.setSelection(this.from.getSelection() + 1);
-				}else if(this.to.getSelection() > MAX_SELECTION){
-					this.to.setSelection(MAX_SELECTION);
-				}
-			}
-			if(this.increment.getSelection() > (this.to.getSelection() - this.from.getSelection())){
-				this.increment.setSelection(this.to.getSelection() - this.from.getSelection());
-			}
-		}
-	}
-	
-	private class MHeaderRangeStatus extends SelectionAdapter{
-		
-		private List controls;
-		private boolean enabled;
-		
-		private Button simpleMode;
-		private Button simpleLoop;
-		private Button customLoop;
-		
-		public MHeaderRangeStatus(Button simpleMode, Button simpleLoop, Button customLoop) {
-			this.controls = new ArrayList();
-			this.enabled = false;
-			this.simpleMode = simpleMode;
-			this.simpleLoop = simpleLoop;
-			this.customLoop = customLoop;
-			this.simpleMode.addSelectionListener(this);
-			this.simpleLoop.addSelectionListener(this);
-			this.customLoop.addSelectionListener(this);
-		}
-		
-		public void addControl(Control control){
-			this.controls.add(control);
-		}
-		
-		public void update(){
-			// Check enabled
-			this.enabled = this.customLoop.getSelection();
-			if( !this.enabled ){
-				if( this.simpleMode.getSelection() ){
-					this.enabled = this.simpleLoop.getSelection();
-				}
-			}
-			
-			// Update controls
-			Iterator it = this.controls.iterator();
-			while(it.hasNext()){
-				Control control = (Control)it.next();
-				control.setEnabled( this.enabled );
-			}
-		}
-		
-		public void widgetSelected(SelectionEvent e) {
-			this.update();
-		}
-	}
-	
-	private class MHeaderCombo {
-		private List values;
-		private Combo combo;
-		
-		public MHeaderCombo( Composite parent ){
-			this.values = new ArrayList();
-			this.combo = new Combo( parent, SWT.DROP_DOWN | SWT.READ_ONLY );
-			this.combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		}
-		
-		public Combo getControl(){
-			return this.combo;
-		}
-		
-		public void clear(){
-			this.values.clear();
-			this.combo.removeAll();
-		}
-		
-		public void addItem( String text , int value ){
-			this.values.add( new Integer( value ) );
-			this.combo.add( text );
-		}
-		
-		public void addItem( TGMeasureHeader header ){
-			this.addItem( getItemText(header) , header.getNumber() );
-		}
-		
-		public void setValue( int value ){
-			for( int index = 0 ; index < this.values.size() ; index++ ){
-				Integer currentValue = (Integer) this.values.get( index );
-				if( currentValue != null && currentValue.intValue() == value ){
-					int currentIndex = this.combo.getSelectionIndex();
-					if( currentIndex != index ){
-						this.combo.select( index );
-					}
-				}
-			}
-		}
-		
-		public int getValue(){
-			int index = this.combo.getSelectionIndex();
-			if( index >= 0 && index < this.values.size() ){
-				Integer value = (Integer) this.values.get( index );
-				if( value != null ){
-					return value.intValue();
-				}
-			}
-			return -1;
-		}
-		
-		private String getItemText( TGMeasureHeader header ){
-			String text = ("#" + header.getNumber());
-			if( header.hasMarker() ){
-				text += (" (" + header.getMarker().getTitle() + ")");
-			}
-			return text;
-		}
-	}
-	
-	private class MHeaderComboController {
-		protected MHeaderCombo loopSHeader;
-		protected MHeaderCombo loopEHeader;
-		
-		public MHeaderComboController(MHeaderCombo loopSHeader, MHeaderCombo loopEHeader){
-			this.loopSHeader = loopSHeader;
-			this.loopEHeader = loopEHeader;
-		}
-		
-		public void updateLoopSHeader( int sHeader ){
-			TGSong song = TuxGuitar.instance().getSongManager().getSong();
-			this.loopSHeader.clear();
-			this.loopSHeader.addItem(TuxGuitar.getProperty("transport.mode.loop-range.from-default"), -1 );
-			for(int i = 0; i < song.countMeasureHeaders() ; i ++){
-				TGMeasureHeader header = song.getMeasureHeader( i );
-				this.loopSHeader.addItem( header );
-			}
-			this.loopSHeader.setValue( sHeader );
-		}
-		
-		public void updateLoopEHeader( int sHeader , int eHeader ){
-			TGSong song = TuxGuitar.instance().getSongManager().getSong();
-			this.loopEHeader.clear();
-			this.loopEHeader.addItem(TuxGuitar.getProperty("transport.mode.loop-range.to-default"), -1 );
-			for(int i = 0; i < song.countMeasureHeaders() ; i ++){
-				TGMeasureHeader header = song.getMeasureHeader( i );
-				if( sHeader == -1 || header.getNumber() >= sHeader ){
-					this.loopEHeader.addItem( header );
-				}
-			}
-			this.loopEHeader.setValue( eHeader );
-		}
-		
-		public void updateLoopEHeader(){
-			int sHeader = this.loopSHeader.getValue();
-			int eHeader = this.loopEHeader.getValue();
-			if( eHeader != -1 && sHeader > eHeader ){
-				eHeader = sHeader;
-			}
-			this.updateLoopEHeader( sHeader , eHeader );
-		}
-		
-		public void appendListener(){
-			this.loopSHeader.getControl().addSelectionListener( new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					updateLoopEHeader();
-				}
-			});
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportPlayAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportPlayAction.java
deleted file mode 100644
index 07d0eca..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportPlayAction.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.transport;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class TransportPlayAction extends Action {
-	public static final String NAME = "action.transport.play";
-	
-	public TransportPlayAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TuxGuitar.instance().getTransport().play();
-		return 0;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopEHeaderAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopEHeaderAction.java
deleted file mode 100644
index 77e4f9b..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopEHeaderAction.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.herac.tuxguitar.gui.actions.transport;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.player.base.MidiPlayerMode;
-import org.herac.tuxguitar.song.models.TGMeasure;
-
-public class TransportSetLoopEHeaderAction extends Action {
-	
-	public static final String NAME = "action.transport.set-loop-end";
-	
-	public TransportSetLoopEHeaderAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
-		if( measure != null ){
-			MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
-			if( pm.isLoop() ){
-				pm.setLoopEHeader( pm.getLoopEHeader() != measure.getNumber() ? measure.getNumber() : -1 );
-			}
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopSHeaderAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopSHeaderAction.java
deleted file mode 100644
index db0951c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportSetLoopSHeaderAction.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.herac.tuxguitar.gui.actions.transport;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.player.base.MidiPlayerMode;
-import org.herac.tuxguitar.song.models.TGMeasure;
-
-public class TransportSetLoopSHeaderAction extends Action {
-	
-	public static final String NAME = "action.transport.set-loop-start";
-	
-	public TransportSetLoopSHeaderAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TGMeasure measure = getEditor().getTablature().getCaret().getMeasure();
-		if( measure != null ){
-			MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
-			if( pm.isLoop() ){
-				pm.setLoopSHeader( pm.getLoopSHeader() != measure.getNumber() ? measure.getNumber() : -1 );
-			}
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportStopAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportStopAction.java
deleted file mode 100644
index 8272186..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/transport/TransportStopAction.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.transport;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TransportStopAction extends Action{
-	public static final String NAME = "action.transport.stop";
-	
-	public TransportStopAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TuxGuitar.instance().getTransport().stop();
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowFretBoardAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowFretBoardAction.java
deleted file mode 100644
index 6cd8928..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowFretBoardAction.java
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.view;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ShowFretBoardAction extends Action{
-	public static final String NAME = "action.view.show-fretboard";
-	
-	public ShowFretBoardAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		if(TuxGuitar.instance().getFretBoardEditor().isVisible()){
-			TuxGuitar.instance().getFretBoardEditor().hideFretBoard();
-		}else{
-			TuxGuitar.instance().getFretBoardEditor().showFretBoard();
-		}
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowMatrixAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowMatrixAction.java
deleted file mode 100644
index 8992f24..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowMatrixAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.view;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ShowMatrixAction extends Action{
-	public static final String NAME = "action.view.show-matrix";
-	
-	public ShowMatrixAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getMatrixEditor().isDisposed()){
-			TuxGuitar.instance().getMatrixEditor().show();
-		}else{
-			TuxGuitar.instance().getMatrixEditor().dispose();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowMixerAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowMixerAction.java
deleted file mode 100644
index 56ad571..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowMixerAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.view;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ShowMixerAction extends Action{
-	public static final String NAME = "action.view.show-mixer";
-	
-	public ShowMixerAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getMixer().isDisposed()){
-			TuxGuitar.instance().getMixer().show();
-		}else{
-			TuxGuitar.instance().getMixer().dispose();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowPianoAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowPianoAction.java
deleted file mode 100644
index 9ef2c72..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowPianoAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.view;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ShowPianoAction extends Action{
-	public static final String NAME = "action.view.show-piano";
-	
-	public ShowPianoAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getPianoEditor().isDisposed()){
-			TuxGuitar.instance().getPianoEditor().show();
-		}else{
-			TuxGuitar.instance().getPianoEditor().dispose();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowTransportAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowTransportAction.java
deleted file mode 100644
index b11e7d9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/actions/view/ShowTransportAction.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.actions.view;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ShowTransportAction extends Action{
-	public static final String NAME = "action.view.show-transport";
-	
-	public ShowTransportAction() {
-		super(NAME, AUTO_LOCK | AUTO_UNLOCK |  AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-	}
-	
-	protected int execute(TypedEvent e){
-		if(TuxGuitar.instance().getTransport().isDisposed()){
-			TuxGuitar.instance().getTransport().show();
-		}else{
-			TuxGuitar.instance().getTransport().dispose();
-		}
-		return 0;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/CannotInsertTransferException.java b/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/CannotInsertTransferException.java
deleted file mode 100644
index 513cd53..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/CannotInsertTransferException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 05-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.clipboard;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class CannotInsertTransferException extends Exception{
-	
-	private static final long serialVersionUID = 1L;
-	
-	public CannotInsertTransferException() {
-		super();
-	}
-	
-	public CannotInsertTransferException(String message) {
-		super(message);
-	}
-	
-	public CannotInsertTransferException(String message, Throwable cause) {
-		super(message, cause);
-	}
-	
-	public CannotInsertTransferException(Throwable cause) {
-		super(cause);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/ClipBoard.java b/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/ClipBoard.java
deleted file mode 100644
index bb6dec9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/ClipBoard.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Created on 09-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.clipboard;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ClipBoard {
-	private Transferable transferable;
-	
-	public ClipBoard(){
-		this.transferable = null;
-	}
-	
-	public void addTransferable(Transferable transferable){
-		this.transferable = transferable;
-	}
-	
-	public Transferable getTransferable(){
-		return this.transferable;
-	}
-	
-	public void insertTransfer() throws CannotInsertTransferException{
-		if(this.isEmpty()){
-			throw new CannotInsertTransferException();
-		}
-		this.transferable.insertTransfer();
-	}
-	
-	public boolean isEmpty(){
-		return (this.transferable == null);
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/MeasureTransferable.java b/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/MeasureTransferable.java
deleted file mode 100644
index 2344fc1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/MeasureTransferable.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- * Created on 09-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.clipboard;
-
-import java.util.Iterator;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TablatureEditor;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableInsertMeasure;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableReplaceMeasures;
-import org.herac.tuxguitar.song.helpers.TGSongSegment;
-import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGTrack;
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class MeasureTransferable implements Transferable {
-	public static final int TRANSFER_TYPE_REPLACE = 1;
-	public static final int TRANSFER_TYPE_INSERT = 2;
-	
-	private TablatureEditor tablatureEditor;
-	private TGSongSegment segment;
-	private int transferType;
-	private int pasteCount;
-	
-	public MeasureTransferable(TablatureEditor tablatureEditor, int p1, int p2,boolean allTracks) {
-		this.tablatureEditor = tablatureEditor;
-		this.transferType = TRANSFER_TYPE_REPLACE;
-		this.getTransfer(p1, p2,allTracks);
-	}
-	
-	private void getTransfer(int p1, int p2,boolean allTracks) {
-		if(allTracks){
-			this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2);
-		}else{
-			TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
-			this.segment = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2,track);
-		}
-		skipMarkers(this.segment);
-	}
-	
-	public void insertTransfer() throws CannotInsertTransferException {
-		TGSongSegmentHelper helper = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager());
-		TGSongSegment segment = helper.createSegmentCopies(this.segment, this.pasteCount );
-		if(this.transferType == TRANSFER_TYPE_REPLACE){
-			replaceMeasures(helper, segment);
-		}else if(this.transferType == TRANSFER_TYPE_INSERT){
-			insertMeasures(helper, segment);
-		}
-	}
-	
-	public void insertMeasures(TGSongSegmentHelper helper, TGSongSegment segment) throws CannotInsertTransferException {
-		TGMeasure measure = this.tablatureEditor.getTablature().getCaret().getMeasure();
-		TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
-		if (measure == null || segment.isEmpty()) {
-			throw new CannotInsertTransferException();
-		}
-		//Si el segmento tiene una sola pista,
-		//la pego en la pista seleccionada
-		int toTrack = ((segment.getTracks().size() == 1)?track.getNumber():0);
-		
-		//comienza el undoable
-		UndoableInsertMeasure undoable = new UndoableInsertMeasure(toTrack);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		TGMeasureHeader first = (TGMeasureHeader)segment.getHeaders().get(0);
-		int fromNumber = measure.getNumber();
-		long theMove = (measure.getStart() - first.getStart());
-		
-		helper.insertMeasures(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),fromNumber,theMove,toTrack);
-		
-		//termia el undoable
-		TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),segment.getHeaders().size(),fromNumber,theMove));
-	}
-	
-	public void replaceMeasures(TGSongSegmentHelper helper, TGSongSegment segment) throws CannotInsertTransferException {
-		TGMeasure measure = this.tablatureEditor.getTablature().getCaret().getMeasure();
-		TGTrack track = this.tablatureEditor.getTablature().getCaret().getTrack();
-		if (measure == null || segment.isEmpty()) {
-			throw new CannotInsertTransferException();
-		}
-		TGMeasureHeader first = (TGMeasureHeader)segment.getHeaders().get(0);
-		
-		//Si el segmento tiene una sola pista,
-		//la pego en la pista seleccionada
-		int toTrack = ((segment.getTracks().size() == 1)?track.getNumber():0);
-		
-		//si no existen los compases los creo
-		int count = segment.getHeaders().size();
-		int current = measure.getNumber();
-		int freeSpace =  (track.countMeasures() - (current - 1));
-		long theMove = (measure.getStart() - first.getStart());
-		
-		//comienza el undoable
-		UndoableReplaceMeasures undoable = new UndoableReplaceMeasures(current, (current + count) , toTrack);
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		for(int i = freeSpace;i < count;i ++){
-			TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
-		}
-		helper.replaceMeasures(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),theMove,toTrack);
-		
-		//Termina el undoable
-		TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(segment.clone(TuxGuitar.instance().getSongManager().getFactory()),count,freeSpace,theMove));
-	}
-	
-	public void setTransferType(int transferType){
-		this.transferType = transferType;
-	}
-	
-	public void setPasteCount(int pasteCount){
-		this.pasteCount = pasteCount;
-	}
-	
-	private void skipMarkers(TGSongSegment segment){
-		Iterator it = segment.getHeaders().iterator();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			header.setMarker(null);
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/Transferable.java b/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/Transferable.java
deleted file mode 100644
index 77a9a53..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/clipboard/Transferable.java
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Created on 09-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.clipboard;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public interface Transferable {
-	
-	public void insertTransfer()throws CannotInsertTransferException;
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/EditorCache.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/EditorCache.java
deleted file mode 100644
index 4da46c5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/EditorCache.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.herac.tuxguitar.gui.editors;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.util.MidiTickUtil;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class EditorCache {
-	
-	//Modo edition
-	private boolean editUpdate;
-	private TGBeatImpl editBeat;
-	
-	//Modo reproduccion
-	private int playTrack;
-	private long playTick;
-	private long playStart;
-	private long playBeatEnd;
-	private boolean playChanges;
-	private boolean playUpdate;
-	private TGBeatImpl playBeat;
-	private TGMeasureImpl playMeasure;
-	
-	public EditorCache(){
-		this.reset();
-	}
-	
-	public void reset(){
-		this.resetEditMode();
-		this.resetPlayMode();
-	}
-	
-	private void resetEditMode(){
-		this.editBeat = null;
-		this.editUpdate = false;
-	}
-	
-	private void resetPlayMode(){
-		this.playBeat = null;
-		this.playMeasure = null;
-		this.playUpdate = false;
-		this.playChanges = false;
-		this.playTrack =  0;
-		this.playTick = 0;
-		this.playStart = 0;
-		this.playBeatEnd = 0;
-	}
-	
-	public void updateEditMode(){
-		this.editUpdate = true;
-		this.resetPlayMode();
-		this.getEditBeat();
-	}
-	
-	public void updatePlayMode(){
-		this.playUpdate = true;
-		this.resetEditMode();
-		this.getPlayBeat();
-	}
-	
-	public TGBeatImpl getEditBeat() {
-		if(this.editUpdate){
-			this.editBeat =  TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedBeat();
-			this.editUpdate = false;
-		}
-		return this.editBeat;
-	}
-	
-	public TGBeatImpl getPlayBeat(){
-		if(this.playUpdate){
-			this.playChanges = false;
-			
-			TGSongManager manager = TuxGuitar.instance().getSongManager();
-			if(TuxGuitar.instance().getPlayer().isRunning()){
-				Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-				TGTrack track = caret.getTrack();
-				
-				long tick = TuxGuitar.instance().getPlayer().getTickPosition();
-				long start = this.playStart + (tick - this.playTick);
-				if(this.playMeasure == null || start < this.playMeasure.getStart() || start > (this.playMeasure.getStart() + this.playMeasure.getLength())){
-					this.playMeasure = null;
-					start = MidiTickUtil.getStart(tick);
-				}
-				
-				if(this.playMeasure == null || this.playBeatEnd == 0 || start > this.playBeatEnd || start < this.playStart || track.getNumber() != this.playTrack){
-					this.playBeat = null;
-					this.playBeatEnd = 0;
-					this.playChanges = true;
-					
-					if(this.playMeasure == null || !this.playMeasure.hasTrack(track.getNumber())  || !isPlaying(this.playMeasure)){
-						this.playMeasure = (TGMeasureImpl)manager.getTrackManager().getMeasureAt(track,start);
-					}
-					if (this.playMeasure != null) {
-						this.playBeat = (TGBeatImpl)manager.getMeasureManager().getBeatIn(this.playMeasure, start);
-						if(this.playBeat != null){
-							TGBeat next = manager.getMeasureManager().getNextBeat(this.playMeasure.getBeats(), this.playBeat);
-							if( next != null ){
-								this.playBeatEnd = next.getStart();
-							}else{
-								TGDuration duration = manager.getMeasureManager().getMinimumDuration(this.playBeat);
-								this.playBeatEnd = (this.playBeat.getStart() + duration.getTime());
-							}
-						}
-					}
-				}
-				this.playTrack = track.getNumber();
-				this.playTick = tick;
-				this.playStart = start;
-			}
-			this.playUpdate = false;
-		}
-		return this.playBeat;
-	}
-	
-	public long getPlayTick(){
-		return this.playTick;
-	}
-	
-	public long getPlayStart(){
-		return this.playStart;
-	}
-	
-	public TGMeasureImpl getPlayMeasure(){
-		return this.playMeasure;
-	}
-	
-	public boolean shouldRedraw(){
-		return this.playChanges;
-	}
-	
-	public boolean isPlaying(TGMeasure measure){
-		return (TuxGuitar.instance().getPlayer().isRunning() && this.playMeasure != null && measure.equals(this.playMeasure));
-	}
-	
-	public boolean isPlaying(TGMeasure measure,TGBeat b){
-		return (isPlaying(measure) && this.playBeat != null && this.playBeat.getStart() == b.getStart());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/FretBoardEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/FretBoardEditor.java
deleted file mode 100644
index 6e729ed..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/FretBoardEditor.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package org.herac.tuxguitar.gui.editors;
-
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.widgets.Composite;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.fretboard.FretBoard;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.tools.scale.ScaleListener;
-import org.herac.tuxguitar.song.models.TGBeat;
-
-public class FretBoardEditor implements TGRedrawListener, TGExternalBeatViewerListener, IconLoader, LanguageLoader, ScaleListener{
-	
-	private FretBoard fretBoard;
-	private boolean visible;
-	
-	public FretBoardEditor(){
-		TuxGuitar.instance().getIconManager().addLoader(this);
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		TuxGuitar.instance().getScaleManager().addListener(this); 
-	}
-	
-	private FretBoard getFretBoard(){
-		return this.fretBoard;
-	}
-	
-	public void hideFretBoard(){
-		this.visible = false;
-		getFretBoard().setVisible(this.visible);
-		TuxGuitar.instance().getEditorManager().removeRedrawListener(this);
-		TuxGuitar.instance().getEditorManager().removeBeatViewerListener(this);
-		TuxGuitar.instance().updateShellFooter(0,0,0);
-	}
-	
-	public void showFretBoard(){
-		this.visible = true;
-		getFretBoard().setVisible(this.visible);
-		TuxGuitar.instance().getEditorManager().addRedrawListener(this);
-		TuxGuitar.instance().getEditorManager().addBeatViewerListener(this);
-		TuxGuitar.instance().updateShellFooter(getFretBoard().getHeight(), 730,520);
-	}
-	
-	public void showFretBoard(Composite parent) {
-		FormData data = new FormData();
-		data.left = new FormAttachment(0, 0);
-		data.right = new FormAttachment(100, 0);
-		data.top = new FormAttachment(0,0);
-		data.bottom = new FormAttachment(100,0);
-		
-		this.fretBoard = new FretBoard(parent);
-		this.fretBoard.setLayoutData(data);
-	}
-	
-	public void dispose(){
-		if(getFretBoard() != null && !getFretBoard().isDisposed()){
-			getFretBoard().dispose();
-		}
-	}
-	
-	public void redraw(){
-		if(getFretBoard() != null && !getFretBoard().isDisposed() && !TuxGuitar.instance().isLocked()){
-			getFretBoard().redraw();
-		}
-	}
-	
-	public void redrawPlayingMode(){
-		if(getFretBoard() != null && !getFretBoard().isDisposed() && !TuxGuitar.instance().isLocked()){
-			getFretBoard().redrawPlayingMode();
-		}
-	}
-	
-	public boolean isVisible(){
-		return (getFretBoard() != null && !getFretBoard().isDisposed() && this.visible);
-	}
-	
-	public void loadProperties(){
-		if(getFretBoard() != null && !getFretBoard().isDisposed()){
-			getFretBoard().loadProperties();
-		}
-	}
-	
-	public void loadIcons(){
-		if(getFretBoard() != null && !getFretBoard().isDisposed()){
-			getFretBoard().loadIcons();
-		}
-	}
-	
-	public void loadScale(){
-		if(getFretBoard() != null){
-			getFretBoard().loadScale();
-		}
-	}
-	
-	public void doRedraw(int type) {
-		if( type == TGRedrawListener.NORMAL ){
-			this.redraw();
-		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
-			this.redrawPlayingMode();
-		}
-	}
-	
-	public void showExternalBeat(TGBeat beat) {
-		if(getFretBoard() != null && !getFretBoard().isDisposed()){
-			getFretBoard().setExternalBeat(beat);
-		}
-	}
-	
-	public void hideExternalBeat() {
-		if(getFretBoard() != null && !getFretBoard().isDisposed()){
-			getFretBoard().setExternalBeat(null);
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/PianoEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/PianoEditor.java
deleted file mode 100644
index 44e1ca4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/PianoEditor.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.herac.tuxguitar.gui.editors;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.piano.Piano;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.tools.scale.ScaleListener;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGBeat;
-
-public class PianoEditor implements TGRedrawListener, TGExternalBeatViewerListener, IconLoader, LanguageLoader, ScaleListener{
-	
-	private Piano piano;
-	
-	public PianoEditor(){
-		super();
-	}
-	
-	public void show() {
-		Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("piano.editor"));
-		
-		this.piano = new Piano(dialog,SWT.NONE);
-		
-		this.addListeners();
-		dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				removeListeners();
-				TuxGuitar.instance().updateCache(true);
-			}
-		});
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-	
-	public void addListeners(){
-		TuxGuitar.instance().getIconManager().addLoader(this);
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		TuxGuitar.instance().getScaleManager().addListener(this);
-		TuxGuitar.instance().getEditorManager().addRedrawListener(this);
-		TuxGuitar.instance().getEditorManager().addBeatViewerListener(this);
-	}
-	
-	public void removeListeners(){
-		TuxGuitar.instance().getIconManager().removeLoader(this);
-		TuxGuitar.instance().getLanguageManager().removeLoader(this);
-		TuxGuitar.instance().getScaleManager().removeListener(this); 
-		TuxGuitar.instance().getEditorManager().removeRedrawListener(this);
-		TuxGuitar.instance().getEditorManager().removeBeatViewerListener(this);
-	}
-	
-	private Piano getPiano(){
-		return this.piano;
-	}
-	
-	public void dispose(){
-		if(!isDisposed()){
-			getPiano().getShell().dispose();
-			getPiano().dispose();
-		}
-	}
-	
-	public void redraw(){
-		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
-			getPiano().redraw();
-		}
-	}
-	
-	public void redrawPlayingMode(){
-		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
-			getPiano().redrawPlayingMode();
-		}
-	}
-	
-	public boolean isDisposed() {
-		return (this.getPiano() == null || getPiano().isDisposed());
-	}
-	
-	public void loadProperties(){
-		if(!isDisposed()){
-			getPiano().loadProperties();
-			getPiano().getShell().setText(TuxGuitar.getProperty("piano.editor"));
-		}
-	}
-	
-	public void loadIcons(){
-		if(!isDisposed()){
-			getPiano().loadIcons();
-		}
-	}
-	
-	public void loadScale(){
-		if(!isDisposed()){
-			getPiano().loadScale();
-		}
-	}
-	
-	public void doRedraw(int type) {
-		if( type == TGRedrawListener.NORMAL ){
-			this.redraw();
-		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
-			this.redrawPlayingMode();
-		}
-	}
-	
-	public void showExternalBeat(TGBeat beat) {
-		if(!isDisposed()){
-			getPiano().setExternalBeat(beat);
-		}
-	}
-	
-	public void hideExternalBeat() {
-		if(!isDisposed()){
-			getPiano().setExternalBeat(null);
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGEditorManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGEditorManager.java
deleted file mode 100644
index 0619989..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGEditorManager.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.herac.tuxguitar.gui.editors;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.song.models.TGBeat;
-
-public class TGEditorManager {
-	
-	private List redrawListeners;
-	private List updateListeners;
-	private List beatViewerListeners;
-	
-	public TGEditorManager(){
-		this.redrawListeners = new ArrayList();
-		this.updateListeners = new ArrayList();
-		this.beatViewerListeners = new ArrayList();
-	}
-	
-	public void doRedraw( int type ){
-		for(int i = 0; i < this.redrawListeners.size(); i ++){
-			TGRedrawListener listener = (TGRedrawListener) this.redrawListeners.get( i );
-			listener.doRedraw( type );
-		}
-	}
-	
-	public void doUpdate( int type ){
-		for(int i = 0; i < this.updateListeners.size(); i ++){
-			TGUpdateListener listener = (TGUpdateListener) this.updateListeners.get( i );
-			listener.doUpdate( type );
-		}
-	}
-	
-	public void showExternalBeat( TGBeat beat ){
-		for(int i = 0; i < this.beatViewerListeners.size(); i ++){
-			TGExternalBeatViewerListener listener = (TGExternalBeatViewerListener) this.beatViewerListeners.get( i );
-			listener.showExternalBeat(beat);
-		}
-	}
-	
-	public void hideExternalBeat(){
-		for(int i = 0; i < this.beatViewerListeners.size(); i ++){
-			TGExternalBeatViewerListener listener = (TGExternalBeatViewerListener) this.beatViewerListeners.get( i );
-			listener.hideExternalBeat();
-		}
-	}
-	
-	public void addRedrawListener( TGRedrawListener listener){
-		if(!this.redrawListeners.contains( listener )){
-			this.redrawListeners.add( listener );
-		}
-	}
-	
-	public void removeRedrawListener( TGRedrawListener listener){
-		if(this.redrawListeners.contains( listener )){
-			this.redrawListeners.remove( listener );
-		}
-	}
-	
-	public void addUpdateListener( TGUpdateListener listener){
-		if(!this.updateListeners.contains( listener )){
-			this.updateListeners.add( listener );
-		}
-	}
-	
-	public void removeUpdateListener( TGUpdateListener listener){
-		if(this.updateListeners.contains( listener )){
-			this.updateListeners.remove( listener );
-		}
-	}
-	
-	public void addBeatViewerListener( TGExternalBeatViewerListener listener){
-		if(!this.beatViewerListeners.contains( listener )){
-			this.beatViewerListeners.add( listener );
-		}
-	}
-	
-	public void removeBeatViewerListener( TGExternalBeatViewerListener listener){
-		if(this.beatViewerListeners.contains( listener )){
-			this.beatViewerListeners.remove( listener );
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGExternalBeatViewerListener.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGExternalBeatViewerListener.java
deleted file mode 100644
index 4737c77..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGExternalBeatViewerListener.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.herac.tuxguitar.gui.editors;
-
-import org.herac.tuxguitar.song.models.TGBeat;
-
-public interface TGExternalBeatViewerListener {
-	
-	public void showExternalBeat( TGBeat beat );
-	
-	public void hideExternalBeat();
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGPainter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGPainter.java
deleted file mode 100644
index 2a86521..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGPainter.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package org.herac.tuxguitar.gui.editors;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Path;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-
-public class TGPainter {
-	
-	public static final int PATH_DRAW = 0x01;
-	
-	public static final int PATH_FILL = 0x02;
-	
-	private boolean pathEmpty;
-	
-	private int style;
-	
-	private GC gc;
-	
-	private Path path;
-	
-	public TGPainter(){
-		super();
-	}
-	
-	public TGPainter(GC gc){
-		this.init(gc);
-	}
-	
-	public TGPainter(Image image){
-		this.init(image);
-	}
-	
-	public void init(Image image){
-		this.init(new GC(image));
-	}
-	
-	public void init(GC gc){
-		if(this.gc != null && !this.gc.isDisposed()){
-			this.gc.dispose();
-		}
-		this.gc = gc;
-	}
-	
-	public void initPath(int style){
-		this.style = style;
-		this.path = new Path(this.gc.getDevice());
-		this.pathEmpty = true;
-		this.setAntialias(true);
-	}
-	
-	public void initPath(){
-		this.initPath( PATH_DRAW );
-	}
-	
-	public void closePath(){
-		if(! this.pathEmpty ){
-			if( (this.style & PATH_DRAW) != 0){
-				this.gc.drawPath(this.path);
-			}
-			if( (this.style & PATH_FILL) != 0){
-				this.gc.fillPath(this.path);
-			}
-		}
-		this.style = 0;
-		this.path.dispose();
-		this.pathEmpty = true;
-		this.setAntialias(false);
-	}
-	
-	public GC getGC(){
-		return this.gc;
-	}
-	
-	public void dispose(){
-		this.gc.dispose();
-	}
-	
-	public void copyArea(Image image, int x, int y) {
-		this.gc.copyArea(image, x, y);
-	}
-	
-	public Point getStringExtent(String string) {
-		this.setAdvanced(false);
-		return this.gc.stringExtent(string);
-	}
-	
-	public void drawString(String string, int x, int y) {
-		this.setAdvanced(false);
-		this.gc.drawString(string, x, y);
-	}
-	
-	public void drawString(String string, int x, int y, boolean isTransparent) {
-		this.setAdvanced(false);
-		this.gc.drawString(string, x, y, isTransparent);
-	}
-	
-	public void drawImage(Image image, int srcX, int srcY, int srcWidth, int srcHeight, int destX, int destY, int destWidth, int destHeight) {
-		this.setAdvanced(false);
-		this.gc.drawImage(image, srcX, srcY, srcWidth, srcHeight, destX, destY, destWidth, destHeight);
-	}
-	
-	public void drawImage(Image image, int x, int y) {
-		this.setAdvanced(false);
-		this.gc.drawImage(image, x, y);
-	}
-	
-	public void drawPolygon(int[] arg0) {
-		this.gc.drawPolygon(arg0);
-	}
-	
-	public void fillPolygon(int[] arg0) {
-		this.gc.fillPolygon(arg0);
-	}
-	
-	public void cubicTo(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5) {
-		this.path.cubicTo(arg0, arg1, arg2, arg3, arg4, arg5);
-		this.pathEmpty = false;
-	}
-	
-	public void lineTo(float arg0, float arg1) {
-		this.path.lineTo(arg0, arg1);
-		this.pathEmpty = false;
-	}
-	
-	public void moveTo(float arg0, float arg1) {
-		this.path.moveTo(arg0, arg1);
-		this.pathEmpty = false;
-	}
-	
-	public void addString(String arg0, float arg1, float arg2, Font arg3) {
-		this.path.addString(arg0, arg1, arg2, arg3);
-		this.pathEmpty = false;
-	}
-	
-	public void addArc(float arg0, float arg1, float arg2, float arg3, float arg4, float arg5) {
-		this.path.addArc(arg0, arg1, arg2, arg3, arg4, arg5);
-		this.pathEmpty = false;
-	}
-	
-	public void addOval(float arg0, float arg1, float arg2, float arg3) {
-		this.path.addArc(arg0, arg1, arg2, arg3, 0, 360);
-		this.pathEmpty = false;
-	}
-	
-	public void addRectangle(float x,float y,float width,float height) {
-		this.path.addRectangle(x, y, width, height);
-		this.pathEmpty = false;
-	}
-	
-	public void addRectangle(Rectangle rectangle) {
-		this.path.addRectangle(rectangle.x,rectangle.y,rectangle.width,rectangle.height);
-		this.pathEmpty = false;
-	}
-	
-	public void setBackground(Color arg0) {
-		this.gc.setBackground(arg0);
-	}
-	
-	public void setFont(Font arg0) {
-		this.gc.setFont(arg0);
-	}
-	
-	public void setForeground(Color arg0) {
-		this.gc.setForeground(arg0);
-	}
-	
-	public void setLineStyle(int arg0) {
-		this.gc.setLineStyle(arg0);
-	}
-	
-	public void setLineWidth(int arg0) {
-		this.gc.setLineWidth(arg0);
-	}
-	
-	public void setAlpha(int alpha) {
-		this.gc.setAlpha(alpha);
-	}
-	
-	public void setAntialias(boolean enabled){
-		if( !TGPainterUtils.FORCE_OS_DEFAULTS ){
-			this.gc.setAntialias(enabled ? SWT.ON : SWT.OFF );
-		}
-	}
-	
-	public void setAdvanced(boolean advanced){
-		if( !TGPainterUtils.FORCE_OS_DEFAULTS ){
-			this.gc.setAdvanced(advanced);
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGPainterUtils.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGPainterUtils.java
deleted file mode 100644
index 6f13b43..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGPainterUtils.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.herac.tuxguitar.gui.editors;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-
-public class TGPainterUtils {
-	
-	/** On swt-carbon (and maybe another platform) advanced mode must be allways true **/
-	public static final boolean FORCE_OS_DEFAULTS = getValue(TGConfigKeys.FORCE_OS_DEFAULTS);
-	
-	private static boolean getValue(String key){
-		return TuxGuitar.instance().getConfig().getBooleanConfigValue(key);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGRedrawListener.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGRedrawListener.java
deleted file mode 100644
index e8ff49f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGRedrawListener.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.herac.tuxguitar.gui.editors;
-
-public interface TGRedrawListener {
-	
-	public static final int NORMAL = 1;
-	public static final int PLAYING_THREAD = 2;
-	public static final int PLAYING_NEW_BEAT = 3;
-	
-	public void doRedraw( int type );
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGUpdateListener.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGUpdateListener.java
deleted file mode 100644
index 0664e9c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TGUpdateListener.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.herac.tuxguitar.gui.editors;
-
-public interface TGUpdateListener {
-	public static final int SELECTION = 1;
-	public static final int SONG_UPDATED = 2;
-	public static final int SONG_LOADED = 3;
-	public static final int SONG_SAVED = 4;
-	
-	public void doUpdate( int type );
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TablatureEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TablatureEditor.java
deleted file mode 100644
index 51de95c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/TablatureEditor.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Created on 30-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Menu;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.clipboard.ClipBoard;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class TablatureEditor implements TGRedrawListener, TGUpdateListener{
-	private Tablature tablature;
-	private ClipBoard clipBoard;
-	
-	public TablatureEditor() {
-		this.clipBoard = new ClipBoard();
-	}
-	
-	public void showTablature(Composite parent) {
-		this.tablature = new Tablature(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.DOUBLE_BUFFERED);
-		this.tablature.initGUI();
-		this.tablature.setSongManager(TuxGuitar.instance().getSongManager());
-		this.tablature.reloadViewLayout();
-		this.tablature.initDefaults();
-		this.tablature.updateTablature();
-		this.tablature.initCaret();
-		this.tablature.setFocus();
-		this.initListener();
-		this.initKeyActions();
-		this.initMenu();
-	}
-	
-	private void initListener(){
-		TuxGuitar.instance().getEditorManager().addRedrawListener( this );
-		TuxGuitar.instance().getEditorManager().addUpdateListener( this );
-	}
-	
-	private void initKeyActions(){
-		TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.tablature);
-	}
-	
-	private void initMenu(){
-		Menu menu = TuxGuitar.instance().getItemManager().getPopupMenu();
-		menu.addMenuListener(getTablature().getEditorKit());
-		this.tablature.setMenu(menu);
-	}
-	
-	public void reloadConfig(){
-		getTablature().reloadStyles();
-	}
-	
-	public Tablature getTablature() {
-		return this.tablature;
-	}
-	
-	public ClipBoard getClipBoard(){
-		return this.clipBoard;
-	}
-	
-	public void doRedraw(int type) {
-		if( type == TGRedrawListener.NORMAL ){
-			getTablature().redraw();
-		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
-			getTablature().redrawPlayingMode();
-		}
-	}
-	
-	public void doUpdate(int type) {
-		if( type == TGUpdateListener.SONG_UPDATED ){
-			getTablature().updateTablature();
-		}else if( type == TGUpdateListener.SONG_LOADED ){
-			getTablature().updateTablature();
-			getTablature().resetScroll();
-			getTablature().initCaret();
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCreatorListener.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCreatorListener.java
deleted file mode 100644
index 84c71bb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCreatorListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord;
-
-import java.util.List;
-
-public interface ChordCreatorListener {
-	
-	public void notifyChords(ChordCreatorUtil process, List chords);
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCreatorUtil.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCreatorUtil.java
deleted file mode 100644
index 92658cb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCreatorUtil.java
+++ /dev/null
@@ -1,1216 +0,0 @@
-/*
-
- * Created on 31-dic-2005
-
- * Redesigned on 05-March-2007
-
- * 
-
- */
-
-package org.herac.tuxguitar.gui.editors.chord;
-
-import java.util.ArrayList;
-import java.util.Collections;
-
-import java.util.Comparator;
-
-import java.util.Iterator;
-
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-
-import org.herac.tuxguitar.song.models.TGChord;
-
-/**
- * 
- * Class that helps to create a chord from information put in ChordSelector
- * dialog.
- * 
- * Also contains ChordDatabase static field.
- * 
- * @author Nikola Kolarovic
- * 
- * @author julian
- * 
- */
-public class ChordCreatorUtil {
-	
-	/**
-	 * Maximum number of strings variable - has twin in TrackPropertiesAction
-	 * class
-	 */
-	public static final int MAX_STRINGS = 7;
-	
-	/** Maximum fret distance for a chord */
-	
-	public static final int MAX_FRET_SPAN = 5;
-	
-	/** mark for bass note type **/
-	private final int BASS_INDEX = -1;
-	
-	/** mark for essential note in a chord - MUST be in */
-	private final int ESSENTIAL_INDEX = -2;
-	
-	/** mark for essential note in a chord - PENALTY if not in */
-	private final int NOT_ESSENTIAL_INDEX = -3;
-	
-	/** Keep the Thread control */
-	private static long runningProcess;
-	
-	// ------ attributes ------
-	
-	//protected ChordInfo info;
-	private long processId;
-	
-	private ChordCreatorListener listener;
-	
-	/** the alteration List selectionIndex */
-	private int alteration;
-	
-	private int chordIndex;
-	
-	/** essential notes for the chord (from ChordInfo) */
-	private int[] requiredNotes;
-	
-	/** notes that expand the chord (add+-) */
-	private int[] expandingNotes;
-	
-	/** is the fifth altered */
-	private int add5 = 0;
-	
-	/** name of a chord */
-	private String chordName = null;
-	
-	private int bassTonic; 
-	
-	private int chordTonic;
-	
-	/** current tunning */
-	private int[] tuning;
-	
-	private ChordCreatorUtil(long processId,ChordCreatorListener listener){
-		this.processId = processId;
-		this.listener = listener;
-	}
-	
-	public boolean isValidProcess(){
-		return (this.processId == runningProcess);
-	}
-	
-	public static long getNewProcess(){
-		return (++ runningProcess);
-	}
-	
-	public static void getChords(final ChordCreatorListener listener,
-	                             final int[] tuning,
-	                             final int chordIndex,
-	                             final int alteration,
-	                             final int plusMinus,
-	                             final boolean add,
-	                             final int add5,
-	                             final int add9,
-	                             final int add11,
-	                             final int bassTonic,
-	                             final int chordTonic,
-	                             final boolean sharp){
-		
-		final ChordCreatorUtil chordCreator = new ChordCreatorUtil(getNewProcess(), listener );
-		new Thread(new Runnable() {
-			public void run() {
-				chordCreator.getChords( tuning, chordIndex, alteration, plusMinus, add, add5, add9, add11, bassTonic, chordTonic, sharp);
-			}
-		}).start();
-	}
-	
-	protected void getChords(int[] tuning,
-	                         int chordIndex,
-	                         int alteration,
-	                         int plusMinus,
-	                         boolean add,
-	                         int add5,
-	                         int add9,
-	                         int add11,
-	                         int bassTonic,
-	                         int chordTonic,
-	                         boolean sharp) {
-		
-		if(!isValidProcess()){
-			return;
-		}
-		
-		this.add5 = add5;
-		
-		this.tuning = tuning;
-		
-		this.chordIndex = chordIndex;
-		
-		this.chordTonic = chordTonic;
-		
-		this.bassTonic = bassTonic;
-		
-		this.alteration = alteration;
-		
-		this.chordName = new ChordNamingConvention().createChordName(this.chordTonic,
-		                                                             this.chordIndex,
-		                                                             this.alteration,
-		                                                             plusMinus,
-		                                                             add,
-		                                                             add5,
-		                                                             add9,
-		                                                             add11,
-		                                                             this.bassTonic,
-		                                                             sharp);
-		
-		
-		// find the notes that expand the chord
-		if (this.alteration!=0) {
-			if (add) {
-				this.expandingNotes = new int[1];
-				this.expandingNotes[0]= getAddNote(this.alteration-1,plusMinus);
-			}
-			else { // not just add...
-				// 9+- = 7b !9(+-)    (index=1)
-				// 11+- = 7b !11(+-) 9(+-)  (index=2)
-				// 13+- = 7b !13(+-) 9(+-) 11(+-) (index=3)
-				this.expandingNotes = new int[1+this.alteration];
-				this.expandingNotes[0] = 11; //7b
-				this.expandingNotes[1] = getAddNote(this.alteration-1,plusMinus); //this.alteration+-
-				
-				// rest
-				for (int i=2; i<=this.alteration; i++)
-					this.expandingNotes[i]=getAddNote(i-2, i==2 ? add9 : add11); // @2=add9+-, @3=add11+- tone
-			}
-			
-		}
-		else this.expandingNotes=new int[0];
-		
-		
-		
-		// Required notes
-		//this.requiredNotes = ((ChordDatabase.ChordInfo)new ChordDatabase().getChords().get(chordIndex)).cloneRequireds();
-		this.requiredNotes = ChordDatabase.get(chordIndex).cloneRequireds();
-		//IT DON'T BUILD UNDER JRE1.4
-		//this.requiredNotes = ((ChordDatabase.ChordInfo) ChordCreatorUtil.getChordData().getChords().get(chordIndex)).getRequiredNotes().clone();
-		
-		
-		// adjust the subdominant if needed
-		if (add5!=0) {
-			for (int i=0; i<this.requiredNotes.length; i++)
-				if (this.requiredNotes[i]==8) // alternate the subdominant
-					this.requiredNotes[i]+=(add5==1 ? 1 : -1);
-		}
-		
-		// first count different from -1
-		int count = 0;
-		for (int i=0; i<this.requiredNotes.length; i++) {
-			this.requiredNotes[i]=checkForOverlapping(this.requiredNotes[i]);
-			if (this.requiredNotes[i]!=-1)
-				count++;
-		}
-		// then fill in the new array
-		int[] tempNotes = new int[count];
-		count = 0;
-		for (int i=0; i<this.requiredNotes.length; i++)
-			if (this.requiredNotes[i]!=-1) {
-				tempNotes[count]=this.requiredNotes[i];
-				count++;
-			}
-		// and substitute them
-		this.requiredNotes = tempNotes;
-		
-		//return getChords();
-		if(isValidProcess()){
-			List chords = getChords();
-			if(chords != null && isValidProcess()){
-				this.listener.notifyChords(this, chords);
-			}
-		}
-	}
-	
-	/** We have to make sure that if required note is already inside
-	 * expanding notes array so we don't put it twice...
-	 */
-	protected int checkForOverlapping(int checkIt) {
-		for (int i=0; i<this.expandingNotes.length; i++)
-			if (this.expandingNotes[i]==checkIt)
-				return -1;
-		return checkIt;
-	}
-	
-	/**
-	 * 
-	 * Creates the chord combinations out of given data and then uses some kind
-	 * of
-	 * 
-	 * heuristics to check the most suitable formations.
-	 * 
-	 * @return the list of TGChord structures that are most suitable
-	 * 
-	 */
-	private java.util.List getChords() {
-		if(!isValidProcess()){
-			return null;
-		}
-		ArrayList potentialNotes = makePotentialNotes();
-		
-		ArrayList combinations = makeCombinations( potentialNotes);
-		
-		ArrayList priorities = determinePriority( combinations);
-		
-		ArrayList theBestOnes = takeBest( priorities);
-		
-		return createChords( theBestOnes);
-	}
-	
-	/**
-	 * Creates the TGChord ArrayList out of StringValue's ArrayLists
-	 * 
-	 * @param Highest rated StringValues
-	 * @return TGChord collection
-	 */
-	private ArrayList createChords(ArrayList top) {
-		if(!isValidProcess()){
-			return null;
-		}
-		
-		ArrayList chords = new ArrayList(top.size());
-		
-		Iterator it = top.iterator();
-		
-		while (it.hasNext()) {
-			TGChord chord = TuxGuitar.instance().getSongManager().getFactory()
-					.newChord(this.tuning.length);
-			Iterator it2 = ((ArrayList) it.next()).iterator();
-			
-			while (it2.hasNext()) {
-				StringValue stringValue = (StringValue) it2.next();
-				int string = ((chord.getStrings().length - 1) - (stringValue.getString()));
-				int fret = stringValue.getFret();
-				chord.addFretValue(string, fret);
-				chord.setName(this.chordName);
-			}
-			
-			chords.add(chord);
-		}
-		return chords;
-	}
-	
-	/**
-	 * 
-	 * If string/fret combination is needed for the chord formation, add it into
-	 * List
-	 * 
-	 * @return true if the note is needed for chord formation
-	 * 
-	 */
-	private void find(int stringTone, int stringIndex, int fret,List stringList){
-		if(!isValidProcess()){
-			return;
-		}
-		boolean bassAlreadyIn=false;
-		// chord base notes
-		for (int i = 0; i < this.requiredNotes.length; i++)
-			if ((stringTone + fret) % 12 == (this.chordTonic+this.requiredNotes[i] - 1) % 12) {
-				if (!bassAlreadyIn && (stringTone + fret) % 12 == this.bassTonic)
-					bassAlreadyIn=true;
-				stringList.add(new StringValue(stringIndex, fret, i));
-				return;
-			}
-		
-		// alterations
-		if (this.expandingNotes.length!=0) {
-			for (int i=0; i<this.expandingNotes.length; i++) {
-				if ((stringTone+fret)%12==(this.chordTonic+this.expandingNotes[i]-1)%12) {
-					if (!bassAlreadyIn && (stringTone + fret) % 12 == this.bassTonic)
-						bassAlreadyIn=true;
-					stringList.add(new StringValue(stringIndex,fret,(i<2 ? this.ESSENTIAL_INDEX : this.NOT_ESSENTIAL_INDEX)));
-				}
-			}
-		}
-		
-		// bass tone
-		if (!bassAlreadyIn)
-			if ((stringTone + fret) % 12 == this.bassTonic) {
-				stringList.add(new StringValue(stringIndex, fret, this.BASS_INDEX));
-				return;
-			}
-		
-	}
-	
-	/**
-	 * Returns the wanted note for ADD chord
-	 * 
-	 * @param type
-	 *            0==add9; 1==add11; 2==add13; 
-	 * @param selectionIndex
-	 *            index of selected item in the List combo
-	 * @return wanted note, or -1 if nothing was selected
-	 * 
-	 */
-	private int getAddNote(int type, int selectionIndex) {
-		
-		int wantedNote = 0;
-		
-		switch (type) {
-			case 0:
-				wantedNote = 3; // add9
-				break;
-			case 1:
-				wantedNote = 6; // add11
-				break;
-			case 2:
-				wantedNote = 10; // add13
-				break;
-		}
-		
-		switch (selectionIndex) {
-			case 1:
-				wantedNote++;
-				break;
-			case 2:
-				wantedNote--;
-				break;
-			default:
-				break;
-		}
-		
-		return wantedNote;
-	}
-	
-	private ArrayList makePotentialNotes(){
-		if(!isValidProcess()){
-			return null;
-		}
-		ArrayList potentialNotes = new ArrayList(this.tuning.length);
-		
-		for (int string = 0; string < this.tuning.length; string++) {
-			
-			ArrayList currentStringList = new ArrayList(10);
-			
-			// search all the frets
-			
-			if (ChordSettings.instance().getFindChordsMin()>0 && ChordSettings.instance().isEmptyStringChords())
-				find(this.tuning[string], string, 0, currentStringList); // if it's open chord but wanted to search from different minimal fret
-				
-			
-			for (int fret = ChordSettings.instance().getFindChordsMin(); fret <= ChordSettings.instance().getFindChordsMax(); fret++) {
-				// put in all the needed notes
-				find(this.tuning[string], string, fret, currentStringList);
-			}
-			
-			potentialNotes.add(currentStringList);
-			
-		}
-		return potentialNotes;
-	}
-	
-	/**
-	 * 
-	 * Makes the all-possible combinations of found notes that can be reached by
-	 * fingers
-	 * 
-	 * @param potentialNotes
-	 *            list consisted of found notes for each string
-	 * 
-	 * @return list of list of StringValues, with tones that can form a chord
-	 * 
-	 */
-	private ArrayList makeCombinations(ArrayList potentialNotes) {
-		if(!isValidProcess()){
-			return null;
-		}
-		
-		// COMBINATIONS of strings used in a chord
-		ArrayList stringCombination = new ArrayList(60);
-		ArrayList lastLevelCombination = null;
-		
-		for (int i = 0; i < this.tuning.length - 1; i++)
-		{
-			lastLevelCombination = makeStringCombination(lastLevelCombination);
-			
-			// lastLevelCombination after 3rd round: [[0, 1, 2, 3], [0, 1, 2,
-			// 4], [0, 1, 3, 4], [0, 2, 3, 4], [1, 2, 3, 4], [0, 1, 2, 5], [0,
-			// 1, 3, 5], [0, 2, 3, 5], [1, 2, 3, 5], [0, 1, 4, 5], [0, 2, 4, 5],
-			// [1, 2, 4, 5], [0, 3, 4, 5], [1, 3, 4, 5], [2, 3, 4, 5]]
-			
-			stringCombination.addAll(lastLevelCombination);
-		}
-		
-		ArrayList combinations = new ArrayList(800);
-		
-		// --- combine the StringValues according to strings combination
-		// ----------------------=======
-		
-		Iterator iterator = stringCombination.iterator();
-		
-		while (iterator.hasNext()) { // go through all string combinations list
-			// take a string combinations
-			ArrayList currentStringCombination = (ArrayList) iterator.next();
-			lastLevelCombination = null;
-			
-			// go through all the strings in one combination
-			for (int level = 0; level < currentStringCombination.size(); level++) { 
-				
-				// take the string index
-				int currentString = ((Integer) currentStringCombination.get(level)).intValue();
-				
-				// take all the potential notes from currentString and combine
-				// them with potential notes from other strings
-				
-				lastLevelCombination = makeStringValueCombination(lastLevelCombination,(ArrayList)potentialNotes.get(currentString));
-				
-				// the structure of combinations is AL { AL(StringValue,SV,SV),
-				// AL(SV), AL(SV,SV),AL(SV,SV,SV,SV,SV,SV) }
-				
-			}
-			
-			if(lastLevelCombination != null){
-				combinations.addAll(lastLevelCombination);
-			}
-		}
-		
-		return combinations;
-	}
-	
-	/**
-	 * Makes a combination of string indices
-	 * 
-	 * @param lastLevelCombination
-	 *            structure to be expanded by current level
-	 * 
-	 * @return structure of stringCombination is AL { AL(0), AL(0,1),
-	 *         AL(0,2),AL(0,1,3,4),AL(0,1,2,3,4,5) }
-	 */
-	private ArrayList makeStringCombination(ArrayList lastLevelCombinationRef){
-		if(!isValidProcess()){
-			return null;
-		}
-		
-		List lastLevelCombination = lastLevelCombinationRef;
-		
-		if (lastLevelCombination == null) {
-			// first combination is AL { AL(0), AL(1), AL(2), AL(3), AL(4),
-			// ...AL(tuning.length) }
-			lastLevelCombination = new ArrayList();
-			
-			for (int i = 0; i < this.tuning.length; i++) {
-				lastLevelCombination.add(new ArrayList());
-				((ArrayList) lastLevelCombination.get(i)).add(new Integer(i));
-			}
-		}
-		
-		ArrayList thisLevelCombination = new ArrayList();
-		for (int current = 1; current < this.tuning.length; current++)
-		{
-			Iterator it = lastLevelCombination.iterator();
-			
-			while (it.hasNext()) {
-				ArrayList combination = (ArrayList) it.next();
-				Integer currentInteger = new Integer(current);
-				if (((Integer) combination.get(combination.size() - 1))
-						.intValue() < current
-						&& !combination.contains(currentInteger)) {
-					
-					// check if the string is already in combination
-					ArrayList newCombination = (ArrayList) combination.clone();
-					newCombination.add(currentInteger);
-					thisLevelCombination.add(newCombination);
-				}
-				
-			}
-			
-		}
-		
-		return thisLevelCombination;
-		
-	}
-	
-	/**
-	 * Makes a combination of notes by multiplying last combination and current
-	 * note arrays
-	 * 
-	 * 
-	 * 
-	 * @param lastLevelCombination
-	 *            structure to be expanded by current level
-	 * 
-	 * @param notes
-	 *            notes that can be considered into making a chord
-	 * 
-	 * @return structure of StringValue combinations : AL {
-	 *         AL(StringValue,SV,SV), AL(SV), AL(SV,SV),AL(SV,SV,SV,SV,SV,SV) }
-	 * 
-	 */
-	private ArrayList makeStringValueCombination(ArrayList lastLevelCombination, ArrayList notes) {
-		if(!isValidProcess()){
-			return null;
-		}
-		ArrayList thisLevelCombination = null;
-		
-		if (lastLevelCombination == null) { // initial combination
-			
-			thisLevelCombination = new ArrayList(notes.size());
-			
-			for (int i = 0; i < notes.size(); i++) {
-				
-				thisLevelCombination.add(new ArrayList(6));
-				
-				((ArrayList) thisLevelCombination.get(i)).add(notes.get(i));
-				
-			}
-			
-			// first combination is AL { AL(firstOne), AL(anotherFret) }
-			
-		}
-		
-		else {
-			
-			thisLevelCombination = new ArrayList();
-			
-			for (int i = 0; i < notes.size(); i++)
-				for (int j = 0; j < lastLevelCombination.size(); j++) { // cartesian multiplication
-					ArrayList currentCombination = (ArrayList) ((ArrayList) lastLevelCombination.get(j)).clone();
-					currentCombination.add(notes.get(i));
-					
-					// if the distance maximum between the existing frets
-					// is less than wanted, add it into potential list
-					
-					if (checkCombination(currentCombination))
-						thisLevelCombination.add(currentCombination);
-					
-				}
-		}
-		
-		return thisLevelCombination;
-	}
-	
-	/**
-	 * Checks if the combination can be reached by fingers. It is reachable
-	 * 
-	 * if the distance between lowest and highest fret is less than
-	 * 
-	 * <i>ChordCreatorUtil.MAX_FRET_SPAN</i>.
-	 * 
-	 * Also note that this method eliminates or includes the chords with empty
-	 * strings,
-	 * 
-	 * which is controlled with <i>boolean ChordCreatorUtil.EMPTY_STRING_CHORDS</i>
-	 * 
-	 * @param combination
-	 *            current combination to be examined
-	 * 
-	 * @return true if it can be reached
-	 * 
-	 */
-	private boolean checkCombination(ArrayList combination) {
-		
-		Iterator it = combination.iterator();
-		int maxLeft, maxRight;
-		
-		maxLeft = maxRight = ((StringValue) combination.get(0)).getFret();
-		
-		while (it.hasNext()) {
-			
-			int fret = ((StringValue) it.next()).getFret();
-			
-			//chords with empty-string are welcome
-			if (fret != 0 || !ChordSettings.instance().isEmptyStringChords()) {
-				
-				if (fret < maxLeft)
-					maxLeft = fret;
-				
-				if (fret > maxRight)
-					maxRight = fret;
-				
-			}
-			
-		}
-		
-		if (Math.abs(maxLeft - maxRight) >= MAX_FRET_SPAN)
-			
-			return false;
-		
-		return true;
-		
-	}
-	
-	/**
-	 * orders the StringValue ArrayList by their priority, calculated here
-	 * 
-	 * for every single chord combination.<br>
-	 * 
-	 * Priority is higher if:<br>
-	 *  - tone combination has all notes required for the chord basis<br>
-	 *  - has good chord semantics uses many basic tones, and all necessary
-	 * tones in their place<br>
-	 *  - tone combination has all subsequent strings (no string skipping)<br>
-	 *  - has a chord bass tone as lowest tone<br>
-	 *  - uses more strings<br>
-	 *  - uses good fingering positions<br>
-	 * 
-	 * @param allCombinations
-	 *            all the StringValue combinations that make some sense
-	 * 
-	 * @return Treemap of the StringValue ArrayLists, in which the key is
-	 * 
-	 * <i>float priority</i>.
-	 * 
-	 */
-	private ArrayList determinePriority(ArrayList allCombinations) {
-		if(!isValidProcess()){
-			return null;
-		}
-		ArrayList ordered = new ArrayList();
-		
-		Iterator it = allCombinations.iterator();
-		
-		while (it.hasNext() && isValidProcess()) {
-			
-			float priority = 0;
-			
-			ArrayList stringValueCombination = (ArrayList) it.next();
-			
-			// tone combination has all notes required for the chord basis
-			
-			priority += combinationHasAllRequiredNotes(stringValueCombination);
-			
-			// uses good chord semantics
-			
-			priority += combinationChordSemantics(stringValueCombination);
-			
-			// tone combination has all subsequent strings (no string skipping)
-			
-			priority += combinationHasSubsequentStrings(stringValueCombination);
-			
-			// has a chord bass tone as lowest tone
-			
-			priority += combinationBassInBass(stringValueCombination);
-			
-			// uses many strings
-			// 4 and less strings will be more praised in case of negative grade
-			// 4 and more strings will be more praised in case of positive grade 
-			priority += ChordSettings.instance().getManyStringsGrade() / 3
-				* (stringValueCombination.size()-this.tuning.length / 
-						(ChordSettings.instance().getManyStringsGrade()>0 ? 2 : 1.2) );
-			
-			// uses good fingering positions
-			
-			priority += combinationHasGoodFingering(stringValueCombination);
-			
-			// System.out.println("OVERALL:
-			// "+priority+"----------------------------");
-			
-			PriorityItem item = new PriorityItem();
-			
-			item.priority = priority;
-			
-			item.stringValues = stringValueCombination;
-			
-			ordered.add(item);
-			
-		}
-		
-		return ordered;
-		
-	}
-	
-	/**
-	 * 
-	 * Takes the StringValue ArrayLists that has the best priority rating
-	 * 
-	 */
-	private ArrayList takeBest(ArrayList priorityItems) {
-		if(!isValidProcess()){
-			return null;
-		}
-		
-		int maximum = ChordSettings.instance().getChordsToDisplay();
-		
-		ArrayList bestOnes = new ArrayList(maximum);
-		
-		Collections.sort(priorityItems, new PriorityComparator());
-		for(int i = 0; i < priorityItems.size() && isValidProcess(); i ++){
-			PriorityItem item = (PriorityItem)priorityItems.get(i);
-			if (!checkIfSubset(item.stringValues, bestOnes) ){
-				bestOnes.add(item.stringValues);
-				
-				if( bestOnes.size() >= maximum ){
-					break;
-				}
-			}
-		}
-		
-		return bestOnes;
-		
-	}
-	
-	/** adds points if the combination has all the notes in the basis of chord */
-	private float combinationHasAllRequiredNotes(ArrayList stringValueCombination) {
-		if(!isValidProcess()){
-			return 0;
-		}
-		Iterator it = stringValueCombination.iterator();
-		int[] values = new int[this.requiredNotes.length];
-		int currentIndex = 0;
-		
-		while (it.hasNext()) {
-			StringValue sv = (StringValue) it.next();
-			
-			if (sv.getRequiredNoteIndex() >= 0) { // only basis tones
-				boolean insert = true;
-				
-				for (int i = 0; i < currentIndex; i++)
-					if (values[i] == sv.getRequiredNoteIndex() + 1)
-						insert = false;
-				
-				// sv.requiredNoteIndex+1, because we have index 0 and we don't
-				// want it inside
-				
-				if (insert) {
-					values[currentIndex] = sv.getRequiredNoteIndex() + 1;
-					currentIndex++;
-				}
-				
-			}
-		}
-		
-		if (currentIndex == this.requiredNotes.length) {
-			return ChordSettings.instance().getRequiredBasicsGrade();
-		}
-		
-		if (currentIndex == this.requiredNotes.length - 1) {
-			
-			boolean existsSubdominant = false;
-			
-			Iterator it2 = stringValueCombination.iterator();
-			while (it2.hasNext()) {
-				StringValue current = (StringValue)it2.next();
-				if ((this.tuning[current.getString()] + current.getFret()) % 12 == (this.chordTonic + 7) %12)
-					existsSubdominant = true;
-			}
-			
-			if (!existsSubdominant && currentIndex == this.requiredNotes.length-1) {
-				// if not riff. "sus" chord, or chord with altered fifth allow chord without JUST subdominant (fifth) with small penalty 
-				
-				//if ( !((ChordInfo)new ChordDatabase().getChords().get(this.chordIndex)).getName().contains("sus") && this.requiredNotes.length!=2 && this.add5==0) {
-				//String.contains(String) is not available at JRE1.4
-				//Replaced by "String.indexOf(String) >= 0"
-				if ( ChordDatabase.get(this.chordIndex).getName().indexOf("sus") >= 0 && this.requiredNotes.length != 2 && this.add5 == 0) {
-					return ( ChordSettings.instance().getRequiredBasicsGrade() * 4 / 5 );
-				}
-			}
-			
-		}
-		
-		// required notes count should decrease the penalty
-		int noteCount = (this.alteration == 0 ? 0 : 1+ this.alteration)+currentIndex+ (this.bassTonic == this.chordTonic ? 0 : 1);
-		
-		// sometimes, when noteCount is bigger then tunning length, this pennalty will become positive, which may help
-		return -ChordSettings.instance().getRequiredBasicsGrade()
-				* (this.tuning.length - noteCount) / this.tuning.length * 2;
-		
-	}
-	
-	/** adds points if the combination has strings in a row */
-	private float combinationHasSubsequentStrings(ArrayList stringValueCombination) {
-		if(!isValidProcess()){
-			return 0;
-		}
-		boolean stumbled = false, noMore = false, penalty = false;
-		
-		for (int i = 0; i < this.tuning.length; i++) {
-			boolean found = false;
-			Iterator it = stringValueCombination.iterator();
-			while (it.hasNext())
-				if (((StringValue) it.next()).getString() == i)
-					found = true;
-			if (found) {
-				if (!stumbled)
-					stumbled = true;
-				if (noMore)
-					penalty = true;
-				if (penalty) // penalty for skipped strings
-					return -ChordSettings.instance().getSubsequentGrade();
-			}
-			else
-			if (stumbled)
-				noMore = true;
-		}
-		
-		if (penalty)
-			return 0.0f;
-		
-		return ChordSettings.instance().getSubsequentGrade();
-	}
-	
-	/** checks if the bass tone is the lowest tone in chord */
-	private float combinationBassInBass(ArrayList stringValueCombination) {
-		if(!isValidProcess()){
-			return 0;
-		}
-		for (int i = 0; i < this.tuning.length; i++) {
-			
-			Iterator it = stringValueCombination.iterator();
-			
-			while (it.hasNext()) {
-				StringValue sv = (StringValue) it.next();
-				
-				if (sv.getString() == i) { // stumbled upon lowest tone
-					if ( (this.tuning[sv.getString()]+sv.getFret()) % 12 == this.bassTonic  )
-					  return ChordSettings.instance().getBassGrade();
-					// else
-					return -ChordSettings.instance().getBassGrade();
-				}
-			}
-			
-		}
-		
-		return 0;
-	}
-	
-	/**
-	 * grades the fingering in a chord.
-	 * 
-	 * fingering is good if:<br>
-	 *  - uses as little as possible fret positions<br>
-	 *  - uses less than 3 fret positions<br>
-	 *  - distributes good among fingers<br>
-	 *  - can be placed capo <br>
-	 * 
-	 */
-	private float combinationHasGoodFingering(ArrayList stringValueCombination) {
-		if(!isValidProcess()){
-			return 0;
-		}
-		// init: copy into simple array
-		float finalGrade = 0;
-		int[] positions = new int[this.tuning.length];
-		for (int i = 0; i < this.tuning.length; i++)
-			positions[i] = -1;
-		{
-			Iterator it = stringValueCombination.iterator();
-			
-			while (it.hasNext()) {
-				StringValue sv = (StringValue) it.next();
-				positions[sv.getString()] = sv.getFret();
-			}
-		}
-		// algorithm
-		
-		// distance between fingers
-		int min = ChordSettings.instance().getFindChordsMax()+2, max = 0, maxCount=0;
-		boolean openChord = false, zeroString = false;
-		
-		for (int i = 0; i < this.tuning.length; i++) {
-			
-			openChord|= ChordSettings.instance().isEmptyStringChords() && positions[i] == 0;
-			zeroString |= positions[i]==0;
-			
-			if (positions[i] < min && positions[i] != 0 && positions[i]!=-1)
-				min = positions[i];
-			
-			if (positions[i] > max) {
-				max = positions[i];
-				maxCount=1;
-			}
-			else 
-				if (positions[i]==max) 
-					maxCount++;
-			
-		}
-		
-		// finger as capo
-		
-		int count = 0;
-		
-		for (int i = 0; i < this.tuning.length; i++)
-			if (positions[i] == min)
-				count++;
-		
-		if (!openChord) { 
-			if (zeroString)
-				finalGrade += ChordSettings.instance().getFingeringGrade()/8;
-			else
-				if (count >= 2)
-					finalGrade += ChordSettings.instance().getFingeringGrade()/8;
-		}
-		else
-			if (openChord)
-				finalGrade += ChordSettings.instance().getFingeringGrade()/8;
-		
-		// position distance: 1-2 nice 3 good 4 bad 5 disaster
-		float distanceGrade;
-		
-		switch(Math.abs(max-min)) {
-			case 0 : distanceGrade=ChordSettings.instance().getFingeringGrade()/5;
-					break;
-			case 1 : distanceGrade=ChordSettings.instance().getFingeringGrade()/(5+maxCount);
-					break;
-			case 2 : distanceGrade=ChordSettings.instance().getFingeringGrade()/(6+maxCount);
-					 if (min<5) distanceGrade*=0.9;
-					break;
-			case 3 : distanceGrade=-ChordSettings.instance().getFingeringGrade()/10*maxCount;
-					// I emphasize the penalty if big difference is on some 
-					// lower frets (it is greater distance then)
-					if (min<5) distanceGrade*=1.3;
-					break;
-			case 4 : distanceGrade=-ChordSettings.instance().getFingeringGrade()/4*maxCount;
-					if (min<=5) distanceGrade*=1.8;
-					break;
-			default : distanceGrade=-ChordSettings.instance().getFingeringGrade()*maxCount;
-					break;
-		}
-		finalGrade += distanceGrade;
-		
-		// ============== finger position abstraction ==================
-		// TODO: what to do with e.g. chord -35556 (C7)
-		// ... it can be held with capo on 5th fret, but very hard :)
-		// ... This is the same as with "capo after", I didn't consider that (e.g. chord -35555)
-		ArrayList[] fingers={new ArrayList(2),new ArrayList(2),new ArrayList(2),new ArrayList(2)};
-		// TODO: still no thumb, sorry :)
-		
-		// STRUCTURE: ArrayList consists of Integers - first is fret
-		//                                           - others are strings
-/*		
-		for (int i=0; i<this.tuning.length; i++)
-			System.out.print(" "+positions[i]);
-		System.out.println("");
-*/
-		
-		// if chord is open, then we can have capo only in strings before open string
-		int lastZeroIndex = 0;
-		
-		if (zeroString)
-			for (int i=0; i<positions.length; i++)
-				if (positions[i]==0) lastZeroIndex=i;
-		
-		// open or not not open chord,
-		// index finger is always on lowest fret possible
-		fingers[0].add(new Integer(min));
-		
-		for (int i=lastZeroIndex; i<positions.length; i++)
-				if (positions[i]==min) {
-					fingers[0].add(new Integer(i));
-					positions[i]=-1;
-				}
-		
-		// other fingers
-		// if not zero-fret, occupy fingers respectivly
-		int finger=1;
-		for (int i=0; i<positions.length; i++) {
-			if (positions[i]!=0 && positions[i]!=-1) {
-				if (finger<4) {
-					fingers[finger].add(new Integer(positions[i]));
-					fingers[finger].add(new Integer(i));
-					positions[i]=-1;
-				}
-				finger++;
-			}
-		}
-		
-/*		System.out.println("Positions:");
-		for (int i=0; i<4; i++) {
-			if (fingers[i].size()>1)
-				System.out.print("G"+(i+1)+"R"+((Integer)fingers[i].get(0)).intValue()+"S"+((Integer)fingers[i].get(1)).intValue()+" ");
-		}
-*/		
-		
-		if (finger>4) 
-			finalGrade-=ChordSettings.instance().getFingeringGrade();
-		 else
-			finalGrade+=ChordSettings.instance().getFingeringGrade()*0.1*(15-2*finger);
-		
-		// TODO: maybe to put each finger's distance from the minimum
-		return finalGrade;
-		
-	}
-	
-	/**
-	 * grades the chord semantics, based on theory.
-	 * 
-	 * Tone semantics is good if:<br>
-	 *  - there appear tones from chord basis or bass tone<br>
-	 *  - there appear alteration tones on their specific places<br><br>
-	 *
-	 * Algorithm:<br>
-	 *  - search for chord tonic. If some note is found before (and it's not bass) do penalty<br>
-	 *  - make penalty if the bass tone is not in bass<br>
-	 *  - check if all the expanding notes are here. If some are not, do penalty<br>
-	 *  - if expanding note isn't higher than tonic octave, then priority should be less<br>
-	 *  - If there are not some with NON_ESSENTIAL_INDEX are not here, penalty should be less<br>
-	 */
-	private float combinationChordSemantics(ArrayList stringValueCombination) {
-		if(!isValidProcess()){
-			return 0;
-		}
-		float finalGrade = 0;
-		
-		int foundTonic = -1;
-		
-		int[] foundExpanding = new int[this.expandingNotes.length];
-		int stringDepth=0;
-		
-		for (int string = 0; string < this.tuning.length; string++) {
-			// we have to go string-by-string because of the octave
-			Iterator it = stringValueCombination.iterator();
-			StringValue current = null;
-			boolean found=false;
-			
-			while (it.hasNext() && !found) {
-				StringValue sv = (StringValue) it.next();
-				if (sv.getString() == string &&!found && sv.getFret()!=-1) { // stumbled upon next string
-					current = sv;
-					found=true;
-					stringDepth++;
-				}
-			}
-			
-			// grade algorithms----
-			if (current != null) {
-				// search for tonic
-				if (foundTonic==-1 && current.getRequiredNoteIndex()==0)
-					foundTonic=this.tuning[current.getString()]+current.getFret();
-				
-				// specific bass not in bass?
-				if (stringDepth>1) {
-					if (current.getRequiredNoteIndex()==this.BASS_INDEX)  
-						finalGrade -= ChordSettings.instance().getGoodChordSemanticsGrade();
-					
-					if (current.getRequiredNoteIndex()<0) { // expanding tones
-						// expanding tone found before the tonic
-						if (foundTonic==-1)
-							finalGrade -= ChordSettings.instance().getGoodChordSemanticsGrade()/2;
-						else {
-							// if expanding note isn't higher than tonic's octave
-							if (foundTonic+11 > this.tuning[current.getString()]+current.getFret())
-								finalGrade -= ChordSettings.instance().getGoodChordSemanticsGrade()/3;
-						}
-						
-						// search for distinct expanding notes
-						for (int i=0; i<this.expandingNotes.length; i++)
-							if ((this.tuning[string]+current.getFret())%12==(this.chordTonic+this.expandingNotes[i]-1)%12)
-								if (foundExpanding[i]==0)
-									foundExpanding[i]=current.getRequiredNoteIndex();
-						
-					}
-				}
-			}
-		}
-		
-		// penalties for not founding an expanding note
-		if (this.alteration!=0) {
-			int essentials=0, nonEssentials=0;
-			for (int i=0; i<foundExpanding.length; i++) {
-				if (foundExpanding[i]==this.ESSENTIAL_INDEX)
-					essentials++;
-				else
-					if (foundExpanding[i]!=0)
-						nonEssentials++;
-			}
-			
-			if (essentials+nonEssentials==this.expandingNotes.length)
-				finalGrade+=ChordSettings.instance().getGoodChordSemanticsGrade();
-			else {
-				if (essentials==2) // if all essentials are there, it's good enough
-					finalGrade+=ChordSettings.instance().getGoodChordSemanticsGrade()/2;
-				
-				// but if some are missing, that's BAD:
-				else {
-					finalGrade+= (essentials+nonEssentials-this.expandingNotes.length)*ChordSettings.instance().getGoodChordSemanticsGrade();
-					// half of the penalty for non-essential notes
-					finalGrade+= nonEssentials*ChordSettings.instance().getGoodChordSemanticsGrade()/2;
-				}
-			}
-		}
-		
-		return finalGrade;
-		
-	}
-	
-	/**
-	 *  If current StringValue is a subset or superset of already better ranked
-	 *  chords, it shouldn't be put inside, because it is duplicate.
-	 *  @param stringValues current StringValue to be examined
-	 *  @param betterOnes ArrayList of already stored StringList chords
-	 *  @return true if it is duplicate, false if it is unique
-	 */
-	private boolean checkIfSubset(List stringValues, List betterOnes) {
-		if(!isValidProcess()){
-			return false;
-		}
-		Iterator it = betterOnes.iterator();
-		while (it.hasNext()) {
-			List currentStringValue = (List)it.next();
-			boolean foundDifferentFret = false;
-			// repeat until gone through all strings, or found something different
-			for (int i=0; i<currentStringValue.size(); i++) {
-				int currentString = ((ChordCreatorUtil.StringValue)currentStringValue.get(i)).getString() ;
-				// search for the same string - if not found do nothing
-				for (int j=0; j<stringValues.size(); j++)
-				if ( ((ChordCreatorUtil.StringValue)stringValues.get(j)).getString() == currentString) {
-					// if the frets on the same string differ, then chords are not subset/superset of each other
-					if (((ChordCreatorUtil.StringValue)stringValues.get(j)).getFret() != ((ChordCreatorUtil.StringValue)currentStringValue.get(i)).getFret())
-						foundDifferentFret=true;
-				}
-				
-			}
-			if (!foundDifferentFret)// nothing is different
-				return true;
-		}
-		
-		return false;
-	}
-	
-	/**
-	 * contains information about the note: string, fret and tone function in a
-	 * chord
-	 * 
-	 * @author julian
-	 * 
-	 */
-	
-	private class StringValue {
-		
-		protected int string;
-		protected int fret;
-		protected int requiredNoteIndex;
-		
-		public StringValue(int string, int fret, int requiredNoteIndex) {
-			this.string = string;
-			this.fret = fret;
-			this.requiredNoteIndex = requiredNoteIndex;
-			
-		}
-		
-		public int getString() {
-			return this.string;
-		}
-		
-		public int getFret() {
-			return this.fret;
-		}
-		
-		public int getRequiredNoteIndex() {
-			return this.requiredNoteIndex;
-		}
-	}
-	
-	/** used just to sort StringValue ArrayLists by priorities */
-	protected class PriorityItem {
-		
-		ArrayList stringValues;
-		float priority;
-		
-	}
-	
-	/** used to sort the array */
-	protected class PriorityComparator implements Comparator {
-		
-		public int compare(Object o1, Object o2) {
-			return Math.round(((PriorityItem) o2).priority - ((PriorityItem) o1).priority);
-		}
-		
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCustomList.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCustomList.java
deleted file mode 100644
index 0f401aa..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordCustomList.java
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
- * Created on 02-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.chord;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.song.models.TGChord;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChordCustomList extends Composite {
-	
-	private ChordDialog dialog;
-	private List chords;
-	
-	public ChordCustomList(ChordDialog dialog,Composite parent,int style,int height) {
-		super(parent,style);
-		this.setLayout(dialog.gridLayout(1,false,0,0));
-		this.setLayoutData(makeGridData(height));
-		this.dialog = dialog;
-		this.init();
-	}
-	
-	public GridData makeGridData(int height){
-		GridData data = new GridData(SWT.FILL,SWT.TOP,true,true);
-		data.heightHint = height;
-		
-		return data;
-	}
-	
-	public void init(){
-		Composite composite = new Composite(this,SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.chords = new List(composite,SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-		this.chords.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.chords.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(getDialog().getEditor() != null){
-					showChord(getChords().getSelectionIndex());
-				}
-			}
-		});
-		
-		//-------------BUTTONS-----------------------------
-		Composite buttons = new Composite(this,SWT.NONE);
-		buttons.setLayout(new GridLayout(3,false));
-		
-		Button add = new Button(buttons,SWT.PUSH);
-		add.setText(TuxGuitar.getProperty("add"));
-		add.addSelectionListener(new SelectionAdapter(){
-			public void widgetSelected(SelectionEvent e) {
-				addCustomChord();
-			}
-		});
-		
-		Button rename = new Button(buttons,SWT.PUSH);
-		rename.setText(TuxGuitar.getProperty("rename"));
-		rename.addSelectionListener(new SelectionAdapter(){
-			public void widgetSelected(SelectionEvent e) {
-				renameCustomChord(getChords().getSelectionIndex());
-			}
-		});
-		
-		Button remove = new Button(buttons,SWT.PUSH);
-		remove.setText(TuxGuitar.getProperty("remove"));
-		remove.addSelectionListener(new SelectionAdapter(){
-			public void widgetSelected(SelectionEvent e) {
-				removeCustomChord(getChords().getSelectionIndex());
-			}
-		});
-		
-		loadChords();
-	}
-	
-	private void loadChords(){
-		int selectionIndex = this.chords.getSelectionIndex();
-		this.chords.removeAll();
-		
-		for(int i = 0;i < TuxGuitar.instance().getCustomChordManager().countChords();i ++){
-			TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i);
-			if(chord != null){
-				this.chords.add(chord.getName());
-			}
-		}
-		
-		if(selectionIndex >= 0 && selectionIndex < this.chords.getItemCount()){
-			this.chords.select(selectionIndex);
-		}else if(selectionIndex > 0 && (selectionIndex - 1) < this.chords.getItemCount()){
-			this.chords.select((selectionIndex - 1));
-		}
-	}
-	
-	protected void showChord(int index) {
-		TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(index);
-		if (chord != null) {
-			this.dialog.getEditor().setChord(chord);
-		}
-	}
-	
-	protected void addCustomChord(){
-		TGChord chord = this.dialog.getEditor().getChord();
-		if(chord != null){
-			NameDialog nDialog = new NameDialog();
-			nDialog.name = this.dialog.getEditor().getChordName().getText().trim();
-			String name = nDialog.open();
-			if(name != null){
-				if(name.length() == 0){
-					MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-empty-error"));
-					return;
-				}
-				if(TuxGuitar.instance().getCustomChordManager().existOtherEqualCustomChord(name,-1)){
-					MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-exist-error"));
-					return;
-				}
-				chord.setName(name);
-				TuxGuitar.instance().getCustomChordManager().addChord(chord);
-				loadChords();
-			}
-		}
-	}
-	
-	protected void renameCustomChord(int index){
-		TGChord chord =  TuxGuitar.instance().getCustomChordManager().getChord(index);
-		if(chord != null){
-			String name = new NameDialog(chord.getName()).open();
-			if(name != null){
-				if(name.length() == 0){
-					MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-empty-error"));
-					return;
-				}
-				if(TuxGuitar.instance().getCustomChordManager().existOtherEqualCustomChord(name,index)){
-					MessageDialog.errorMessage(getShell(),TuxGuitar.getProperty("chord.custom.name-exist-error"));
-					return;
-				}
-				TuxGuitar.instance().getCustomChordManager().renameChord(index,name);
-				loadChords();
-			}
-		}
-	}
-	
-	protected void removeCustomChord(int index){
-		if (index >= 0 && index < TuxGuitar.instance().getCustomChordManager().countChords()) {
-			TuxGuitar.instance().getCustomChordManager().removeChord(index);
-			loadChords();
-		}
-	}
-	
-	protected ChordDialog getDialog(){
-		return this.dialog;
-	}
-	
-	protected List getChords(){
-		return this.chords;
-	}
-	
-	private class NameDialog{
-		protected String name;
-		
-		public NameDialog(String name){
-			this.name = name;
-		}
-		
-		public NameDialog(){
-			this(new String());
-		}
-		
-		public String open(){
-			final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-			dialog.setLayout(new GridLayout());
-			dialog.setText(TuxGuitar.getProperty("chord.custom"));
-			
-			Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-			group.setLayout(new GridLayout());
-			group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			group.setText(TuxGuitar.getProperty("chord.custom"));
-			
-			Composite composite = new Composite(group, SWT.NONE);
-			composite.setLayout(new GridLayout(2,false));
-			composite.setLayoutData(getMainData());
-			
-			final Label label = new Label(composite,SWT.LEFT);
-			label.setText(TuxGuitar.getProperty("chord.name") + ":");
-			label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
-			
-			final Text text = new Text(composite,SWT.BORDER | SWT.SINGLE);
-			text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-			text.setText(this.name);
-			
-			//------------------BUTTONS--------------------------
-			Composite buttons = new Composite(dialog, SWT.NONE);
-			buttons.setLayout(new GridLayout(2,false));
-			buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-			
-			final Button buttonOK = new Button(buttons, SWT.PUSH);
-			buttonOK.setText(TuxGuitar.getProperty("ok"));
-			buttonOK.setLayoutData(getButtonData());
-			buttonOK.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					NameDialog.this.name = text.getText();
-					dialog.dispose();
-				}
-			});
-			
-			Button buttonCancel = new Button(buttons, SWT.PUSH);
-			buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-			buttonCancel.setLayoutData(getButtonData());
-			buttonCancel.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent arg0) {
-					NameDialog.this.name = null;
-					dialog.dispose();
-				}
-			});
-			
-			dialog.setDefaultButton( buttonOK );
-			
-			DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-			
-			return this.name;
-		}
-		
-		private GridData getMainData(){
-			GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-			data.minimumWidth = 300;
-			return data;
-		}
-		
-		private GridData getButtonData(){
-			GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-			data.minimumWidth = 80;
-			data.minimumHeight = 25;
-			return data;
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordDatabase.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordDatabase.java
deleted file mode 100644
index af3795b..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordDatabase.java
+++ /dev/null
@@ -1,110 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord;
-
-/**
- * Stores the information about the chord name, structure and
- * alteration abilities into a list
- * 
- * @author Nikola Kolarovic <nikola.kolarovic at gmail.com>
- *
- */
-public class ChordDatabase {
-	
-	/**
-	 * fills all the necessary data into chords List consisted out of ChordInfo-s
-	 * 
-	 * If you want to change it, please contact me on
-	 * nikola.kolarovic at gmail.com
-	 */
-	private static final ChordInfo[] data = new ChordInfo[]{
-		
-		// Major--------------------------
-		new ChordInfo("M",new int[]{ 1, 5, 8 }),
-		
-		// 7--------------------------
-		new ChordInfo("7",new int[]{ 1, 5, 8, 11 }),
-		
-		// 7M--------------------------
-		// hard-coded index used in ChordRecognizer, below comment "determine seventh", line 315 now
-		new ChordInfo("maj7",new int[]{ 1, 5, 8, 12 }),
-		
-		// 6--------------------------
-		new ChordInfo("6",new int[]{ 1, 5, 8, 10 }),
-		
-		// m--------------------------
-		// index 4 hard-coded in ChordRecognizer line 220, so it is not so unusual
-		new ChordInfo("m",new int[]{ 1, 4, 8 }),
-		
-		// m7--------------------------
-		new ChordInfo("m7",new int[]{ 1, 4, 8, 11 }),
-		
-		// m7M--------------------------
-		new ChordInfo("m/maj7",new int[]{ 1, 4, 8, 12 }),
-		
-		// m6--------------------------
-		new ChordInfo("m6",new int[]{ 1, 4, 8, 10 }),
-		
-		// sus2--------------------------
-		new ChordInfo("sus2",new int[]{ 1, 3, 8 }),
-		
-		// sus4--------------------------
-		new ChordInfo("sus4",new int[]{ 1, 6, 8 }),
-		
-		// 7sus2--------------------------
-		new ChordInfo("7sus2",new int[]{ 1, 3, 8, 11 }),
-		
-		// 7sus4--------------------------
-		new ChordInfo("7sus4",new int[]{ 1, 6, 8, 11 }),
-		
-		// below indexes are hard-coded in ChordRecognizer line 311 now
-		
-		// dim--------------------------
-		new ChordInfo("dim",new int[]{ 1, 4, 7 }),
-		
-		// dim7--------------------------
-		new ChordInfo("dim7",new int[]{ 1, 4, 7, 10 }),
-		
-		// aug--------------------------
-		new ChordInfo("aug",new int[]{ 1, 5, 9 }),
-		
-		// 5--------------------------
-		// index <last> hard-coded in ChordRecognizer line 220, so it is not so unusual
-		new ChordInfo("5",new int[]{ 1, 8 }),
-		
-	};
-	
-	public static int length(){
-		return data.length;
-	}
-	
-	public static ChordInfo get(int index){
-		return data[index];
-	}
-	
-	/** chord data structure, contains all info for chord formation **/
-	public static class ChordInfo {
-		
-		private String name;
-		private int[] requiredNotes;
-		
-		public ChordInfo(String name,int[] requiredNotes){
-			this.name = name;
-			this.requiredNotes = requiredNotes;
-		}
-		
-		public String getName() {
-			return this.name;
-		}
-		
-		public int[] getRequiredNotes() {
-			return this.requiredNotes;
-		}
-		
-		public int[] cloneRequireds() {
-			int[] requiredNotes = new int[this.requiredNotes.length];
-			for(int i = 0; i < requiredNotes.length; i ++){
-				requiredNotes[i] = this.requiredNotes[i];
-			}
-			return requiredNotes;
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordDialog.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordDialog.java
deleted file mode 100644
index 046c286..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordDialog.java
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.chord;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.TGChordImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class ChordDialog {
-	public static final String NAME = "action.insert.chord";
-	
-	public static final int RESULT_SAVE = 1;
-	public static final int RESULT_CLEAN = 2;
-	public static final int RESULT_CANCEL = 3;
-	
-	private static final int DEFAULT_STYLE = SWT.BORDER;
-	
-	private Shell dialog;
-	private TGChord chord;
-	private ChordEditor editor;
-	private ChordSelector selector;
-	private ChordList list;
-	private ChordRecognizer recognizer;
-	//private boolean accepted;
-	private int result;
-	
-	public ChordDialog() {
-		super();
-	}
-	
-	public int open(Shell shell,final TGMeasureImpl measure,TGBeat beat, long start) {
-		this.setResult(RESULT_CANCEL);
-		
-		this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setText(TuxGuitar.getProperty("chord.editor"));
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				TuxGuitar.instance().getCustomChordManager().write();
-			}
-		});
-		
-		Composite topComposite = new Composite(this.dialog, SWT.NONE);
-		topComposite.setLayout(new GridLayout(4,false));
-		topComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Composite bottomComposite = new Composite(this.dialog, SWT.NONE);  
-		bottomComposite.setLayout(new GridLayout());
-		bottomComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		int[] tuning = findCurrentTuning(measure.getTrack());
-		
-		//---------------SELECTOR--------------------------------
-		this.selector = new ChordSelector(this,topComposite,DEFAULT_STYLE, tuning);
-		this.selector.pack();
-		
-		//---------------EDITOR--------------------------------
-		this.editor = new ChordEditor(this, topComposite, DEFAULT_STYLE,(short)tuning.length);
-		this.editor.pack();
-		
-		this.editor.setCurrentTrack(measure.getTrack());
-		
-		//---------------RECOGNIZER------------------------------------
-		this.recognizer = new ChordRecognizer(this, topComposite, DEFAULT_STYLE);
-		
-		//---------------CUSTOM CHORDS---------------------------------
-		new ChordCustomList(this, topComposite, DEFAULT_STYLE,Math.max(this.selector.getBounds().height,this.editor.getBounds().height));
-		
-		//---------------LIST--------------------------------
-		Composite listComposite = new Composite(bottomComposite, SWT.NONE);
-		listComposite.setLayout(gridLayout(1,false,0,0));
-		listComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.list = new ChordList(this,listComposite,beat);
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(this.dialog, SWT.NONE);
-		buttons.setLayout(gridLayout(3,false,0,0));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				setChord(getEditor().getChord());
-				setResult(RESULT_SAVE);
-				getDialog().dispose();
-			}
-		});
-		
-		Button buttonClean = new Button(buttons, SWT.PUSH);
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.setLayoutData(getButtonData());
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				setResult(RESULT_CLEAN);
-				getDialog().dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				getDialog().dispose();
-			}
-		});
-		
-		// load the current chord
-		this.editor.setChord(findCurrentChord(measure, start));
-		
-		this.dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return getResult();
-	}
-	
-	public ChordEditor getEditor() {
-		return this.editor;
-	}
-	
-	public ChordSelector getSelector() {
-		return this.selector;
-	}
-	
-	public ChordList getList() {
-		return this.list;
-	}
-	
-	public ChordRecognizer getRecognizer() {
-		return this.recognizer;
-	}
-	
-	public TGChord getChord() {
-		return this.chord;
-	}
-	
-	public void setChord(TGChord chord) {
-		this.chord = chord;
-	}
-	
-	public int getResult() {
-		return this.result;
-	}
-	
-	public void setResult(int result) {
-		this.result = result;
-	}
-	
-	public boolean isDisposed(){
-		return this.dialog.isDisposed();
-	}
-	
-	public Shell getDialog(){
-		return this.dialog;
-	}
-	
-	public GridLayout gridLayout(int numColumns,boolean makeColumnsEqualWidth,int marginWidth,int marginHeight){
-		GridLayout layout = new GridLayout();
-		layout.numColumns = numColumns;
-		layout.makeColumnsEqualWidth = makeColumnsEqualWidth;
-		layout.marginWidth = (marginWidth >= 0)?marginWidth:layout.marginWidth;
-		layout.marginHeight = (marginHeight >= 0)?marginHeight:layout.marginHeight;
-		return layout;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private int[] findCurrentTuning(TGTrack track){
-		int[] tuning = new int[track.stringCount()];
-		Iterator it = track.getStrings().iterator();
-		while(it.hasNext()){
-			TGString string = (TGString)it.next();
-			tuning[(tuning.length - string.getNumber())] = string.getValue();
-		}
-		return tuning;
-	}
-	
-	protected TGChord findCurrentChord(TGMeasure measure, long start){
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		TGChord chord = manager.getMeasureManager().getChord(measure, start);
-		if(chord == null){
-			chord = manager.getFactory().newChord(measure.getTrack().stringCount());
-			chord.setFirstFret(1);
-			List notes = manager.getMeasureManager().getNotes(measure, start);
-			if(!notes.isEmpty()){
-				int maxValue = -1;
-				int minValue = -1;
-				
-				//verifico el first fret
-				Iterator it = notes.iterator();
-				while(it.hasNext()){
-					TGNote note = (TGNote)it.next(); 
-					if(maxValue < 0 || maxValue < note.getValue()){
-						maxValue = note.getValue();
-					}
-					if(note.getValue() > 0 && (minValue < 0 || minValue > note.getValue())){
-						minValue = note.getValue();
-					}
-				}
-				if(maxValue > TGChordImpl.MAX_FRETS  && minValue > 0){
-					chord.setFirstFret((short)(minValue));
-				}
-				
-				//agrego los valores
-				it = notes.iterator();
-				while(it.hasNext()){
-					TGNote note = (TGNote)it.next();
-					chord.addFretValue( ( note.getString() - 1) , note.getValue());
-				}
-			}
-		}
-		return chord;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordEditor.java
deleted file mode 100644
index 999085b..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordEditor.java
+++ /dev/null
@@ -1,502 +0,0 @@
-/*
- * Created on 28-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.chord;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.TGChordImpl;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGVelocities;
-/**
- * @author julian
- * @author Nikola Kolarovic
- */
-public class ChordEditor extends Composite {
-	
-	public static final int STRING_SPACING = 30;
-	public static final int FRET_SPACING = 30;
-	public static final short MIN_FRET = 1;
-	public static final short MAX_FRET = 24;
-	
-	private ChordDialog dialog;
-	private Composite composite;
-	private Text chordName;
-	private List points;
-	private boolean[] firstFrets;
-	private int[] strings;
-	private int[] frets;
-	private short fret;
-	private short maxStrings;
-	private int width;
-	private int height;
-	private TGTrack currentTrack = null;
-	
-	public ChordEditor(Composite parent, int style) {
-		super(parent, style);
-	}
-	
-	public ChordEditor(ChordDialog dialog, Composite parent,int style, short maxStrings) {
-		this(parent, style);
-		this.dialog = dialog;
-		this.setLayout(dialog.gridLayout(1, false, 0, 0));
-		this.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		this.init(maxStrings);
-	}
-	
-	public void init(short maxStrings) {
-		this.fret = MIN_FRET;
-		this.maxStrings = maxStrings;
-		this.firstFrets = new boolean[this.maxStrings];
-		this.strings = new int[this.maxStrings];
-		this.frets = new int[TGChordImpl.MAX_FRETS];
-		this.width = ((STRING_SPACING * this.maxStrings) - STRING_SPACING);
-		this.height = ((FRET_SPACING * TGChordImpl.MAX_FRETS) - FRET_SPACING);
-		this.points = new ArrayList();
-		
-		for (int i = 0; i < this.firstFrets.length; i++) {
-			this.firstFrets[i] = false;
-		}
-		
-		for (int i = 0; i < this.strings.length; i++) {
-			this.strings[i] = ((i + 1) * STRING_SPACING);
-		}
-		
-		for (int i = 0; i < this.frets.length; i++) {
-			this.frets[i] = ((i + 1) * FRET_SPACING);
-		}
-		
-		Composite composite = new Composite(this, SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		
-		this.composite = new Composite(composite, SWT.BORDER | SWT.V_SCROLL | SWT.DOUBLE_BUFFERED);
-		
-		Composite nameComposite = new Composite(composite, SWT.NONE);
-		nameComposite.setLayout(this.dialog.gridLayout(1, true, 0, 0));
-		nameComposite.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,true));
-		
-		Label formulaLabel = new Label(nameComposite, SWT.SEPARATOR | SWT.HORIZONTAL);
-		formulaLabel.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,true));
-		
-		Label chordNameLabel = new Label(nameComposite, SWT.LEFT);
-		chordNameLabel.setText(TuxGuitar.getProperty("chord.name"));
-		chordNameLabel.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,false));
-		
-		this.chordName = new Text(nameComposite, SWT.SINGLE | SWT.BORDER);
-		this.chordName.setLayoutData(new GridData(SWT.FILL, SWT.BOTTOM, true,false));
-		
-		this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE));
-		this.composite.addPaintListener(new PaintListener() {
-			public void paintControl(PaintEvent e) {
-				TGPainter painter = new TGPainter(e.gc);
-				paintEditor(painter);
-			}
-		});
-		
-		this.composite.addMouseListener(new MouseAdapter() {
-			public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
-				getComposite().setFocus();
-				checkPoint(e.x, e.y);
-				redraw();
-			}
-		});
-		
-		this.composite.getVerticalBar().setIncrement(1);
-		this.composite.getVerticalBar().setMaximum( ((MAX_FRET + MIN_FRET) - (TGChordImpl.MAX_FRETS - 1) + 1));
-		this.composite.getVerticalBar().setMinimum(MIN_FRET);
-		this.composite.getVerticalBar().setThumb(1);
-		this.composite.getVerticalBar().addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				setFret((short) getComposite().getVerticalBar().getSelection(), false, true);
-				redraw();
-			}
-		});
-		
-		this.composite.setLayoutData(makeCompositeData());
-	}
-	
-	private GridData makeCompositeData() {
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = (getWidth() + (STRING_SPACING * 2) + this.composite.getVerticalBar().getSize().x);
-		data.minimumHeight = (getHeight() + (FRET_SPACING * 2));
-		return data;
-	}
-	
-	protected void paintEditor(TGPainter painter) {
-		int noteSize = (FRET_SPACING / 2);
-		
-		painter.setForeground(this.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		
-		// dibujo el puente
-		painter.initPath();
-		painter.setAntialias(false);
-		painter.moveTo((STRING_SPACING - 10), (FRET_SPACING - 10));
-		painter.lineTo(STRING_SPACING + (this.width + 10), (FRET_SPACING - 10));
-		painter.closePath();
-		
-		painter.drawString(Integer.toString(getFret()), FRET_SPACING - 25,STRING_SPACING);
-		
-		// dibujo las cuerdas
-		painter.initPath();
-		painter.setAntialias(false);
-		for (int i = 0; i < this.strings.length; i++) {
-			painter.moveTo(this.strings[i], FRET_SPACING);
-			painter.lineTo(this.strings[i], FRET_SPACING + this.height);
-		}
-		painter.closePath();
-		
-		// dibujo las cegillas
-		painter.initPath();
-		painter.setAntialias(false);
-		for (int i = 0; i < this.frets.length; i++) {
-			painter.moveTo(STRING_SPACING, this.frets[i]);
-			painter.lineTo(STRING_SPACING + this.width, this.frets[i]);
-		}
-		painter.closePath();
-		
-		// dibujo las notas
-		painter.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		Iterator it = this.points.iterator();
-		while (it.hasNext()) {
-			Point point = (Point) it.next();
-			painter.initPath(TGPainter.PATH_FILL);
-			painter.addOval(point.x - (noteSize / 2), point.y + (noteSize / 2),noteSize, noteSize);
-			painter.closePath();
-		}
-		
-		// dibujo las notas al aire
-		for (int i = 0; i < this.firstFrets.length; i++) {
-			if (!hasPoints(i)) {
-				painter.initPath();
-				if (this.firstFrets[i]) {
-					int x = this.strings[i] - (noteSize / 2);
-					int y = (FRET_SPACING - noteSize) - 11;
-					painter.addOval(x, y, (noteSize - 1), (noteSize - 1));
-				} else {
-					int x = this.strings[i];
-					int y = (FRET_SPACING - noteSize) - 4;
-					painter.moveTo(x - ((noteSize / 2) - 1), y + ((noteSize / 2) - 1));
-					painter.lineTo(x + ((noteSize / 2) - 1), y - ((noteSize / 2) - 1));
-					painter.moveTo(x - ((noteSize / 2) - 1), y - ((noteSize / 2) - 1));
-					painter.lineTo(x + ((noteSize / 2) - 1), y + ((noteSize / 2) - 1));
-				}
-				painter.closePath();
-			}
-		}
-	}
-	
-	protected void checkPoint(int x, int y) {
-		int stringIndex = getStringIndex(x);
-		int fretIndex = getFretIndex(y);
-		
-		if (y < FRET_SPACING) {
-			this.firstFrets[stringIndex] = !this.firstFrets[stringIndex];
-			this.removePointsAtStringLine(this.strings[stringIndex]);
-		} else if (y < (FRET_SPACING * TGChordImpl.MAX_FRETS)) {
-			Point point = new Point(this.strings[stringIndex],this.frets[fretIndex]);
-			if (!this.removePoint(point)) {
-				this.firstFrets[stringIndex] = false;
-				this.removePointsAtStringLine(this.strings[stringIndex]);
-				this.addPoint(point);
-				this.orderPoints();
-			}
-		}
-		else{
-			return; // don't recognize it otherwise
-		}
-		
-		// after changing a chord, recognize it
-		this.dialog.getRecognizer().recognize(getChord(),true,false);
-	}
-	
-	private boolean removePoint(Point point) {
-		Iterator it = this.points.iterator();
-		while (it.hasNext()) {
-			Point currPoint = (Point) it.next();
-			if (currPoint.x == point.x && currPoint.y == point.y) {
-				this.points.remove(point);
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	private void orderPoints() {
-		for (int i = 0; i < this.points.size(); i++) {
-			Point minPoint = null;
-			for (int noteIdx = i; noteIdx < this.points.size(); noteIdx++) {
-				Point point = (Point) this.points.get(noteIdx);
-				if (minPoint == null || point.x < minPoint.x) {
-					minPoint = point;
-				}
-			}
-			this.points.remove(minPoint);
-			this.points.add(i, minPoint);
-		}
-	}
-	
-	private void removePointsAtStringLine(int x) {
-		Iterator it = this.points.iterator();
-		while (it.hasNext()) {
-			Point point = (Point) it.next();
-			if (point.x == x) {
-				this.points.remove(point);
-				break;
-			}
-		}
-	}
-	
-	private void addPoint(Point point) {
-		this.points.add(point);
-	}
-	
-	private int getStringIndex(int x) {
-		int index = -1;
-		for (int i = 0; i < this.strings.length; i++) {
-			if (index < 0) {
-				index = i;
-			} else {
-				int distanceX = Math.abs(x - this.strings[index]);
-				int currDistanceX = Math.abs(x - this.strings[i]);
-				if (currDistanceX < distanceX) {
-					index = i;
-				}
-			}
-		}
-		return index;
-	}
-	
-	private int getFretIndex(int y) {
-		int index = -1;
-		for (int i = 0; i < this.frets.length; i++) {
-			if (index < 0) {
-				index = i;
-			} else {
-				int distanceX = Math.abs(y - (this.frets[index] + (FRET_SPACING / 2)));
-				int currDistanceX = Math.abs(y - (this.frets[i] + (FRET_SPACING / 2)));
-				if (currDistanceX < distanceX) {
-					index = i;
-				}
-			}
-		}
-		return index;
-		
-	}
-	
-	private boolean hasPoints(int stringIndex) {
-		Iterator it = this.points.iterator();
-		while (it.hasNext()) {
-			Point point = (Point) it.next();
-			if (point.x == this.strings[stringIndex]) {
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	public boolean isEmpty() {
-		return this.points.isEmpty();
-	}
-	
-	public int getValue(int string) {
-		int value = -1;
-		if (this.firstFrets[this.maxStrings - string]) {
-			value = 0;
-		}
-		
-		if (value < 0) {
-			Iterator it = this.points.iterator();
-			while (it.hasNext()) {
-				Point point = (Point) it.next();
-				if (string == (this.maxStrings - getStringIndex(point.x))) {
-					value = (getFretIndex(point.y + (FRET_SPACING / 2)) + 1);
-					value += (getFret() - 1);
-				}
-			}
-		}
-		return value;
-	}
-	
-	public void addValue(int value, int string/*, boolean redecorate*/) {
-		int realValue = value;
-		if (string >= 1 && string <= this.maxStrings) {
-			this.firstFrets[this.maxStrings - string] = false;
-			this.removePointsAtStringLine(this.strings[this.maxStrings - string]);
-			if (realValue == 0) {
-				this.firstFrets[this.maxStrings - string] = true;
-			} else if (realValue >= 0) {
-				realValue -= (getFret() - 1);
-				if (realValue > 0 && realValue <= TGChordImpl.MAX_FRETS) {
-					this.addPoint(new Point(this.strings[this.maxStrings - string], this.frets[realValue - 1]));
-				}
-			}
-			//INNECESARY CODE
-			//this method is called allways from "setChord(c)" 
-			//but it is called some times, as Strings has the chord.
-			//So i moved it to "setChord" to call "recognize" only one time.
-			
-			// after adding a value, recognize the current chord
-			//this.chordName.setText(this.dialog.getRecognizer().recognize(getChord(), redecorate));
-		}
-	}
-	
-	public short getFret() {
-		return this.fret;
-	}
-	
-	public void setFret(short fret) {
-		setFret(fret, true, false);
-	}
-	
-	protected void setFret(short fret, boolean updateScroll, boolean recognize) {
-		if (fret >= MIN_FRET && fret <= MAX_FRET) {
-			this.fret = fret;
-		}
-		
-		if (updateScroll) {
-			this.composite.getVerticalBar().setSelection(this.fret);
-		}
-		
-		if(recognize){
-			this.dialog.getRecognizer().recognize(getChord(), true,false);
-		}
-	}
-	
-	public TGChord getChord() {
-		TGChord chord = TuxGuitar.instance().getSongManager().getFactory().newChord(this.strings.length);
-		chord.setName(this.chordName.getText());
-		chord.setFirstFret(this.fret);
-		for (int i = 0; i < chord.getStrings().length; i++) {
-			chord.addFretValue(i, getValue(i + 1));
-			//chord.setName(this.chordName.getText());
-		}
-		return chord;
-	}
-	
-	public void setChord(TGChord chord) {
-		if (chord != null) {
-			this.setFret((short)chord.getFirstFret());
-			for (int i = 0; i < chord.getStrings().length; i++) {
-				int fretValue = chord.getFretValue(i);
-				this.addValue(fretValue, i + 1/*, false*/);
-			}
-			
-			//SEE Comment on addValue.
-			//this.getChordName().setText(chord.getName() != null ? chord.getName() : this.dialog.getRecognizer().recognize(getChord(),true) );
-			
-			String name = chord.getName();
-			
-			this.dialog.getRecognizer().recognize(getChord(), (name == null), (name == null) );
-			
-			this.previewChord(chord);
-			
-			if(name != null){
-				this.setChordName( name );
-			}
-			
-			this.redraw();
-		}
-	}
-	
-	public short getMaxStrings() {
-		return this.maxStrings;
-	}
-	
-	public void setMaxStrings(short maxStrings) {
-		this.maxStrings = maxStrings;
-	}
-	
-	public int getWidth() {
-		return this.width;
-	}
-	
-	public int getHeight() {
-		return this.height;
-	}
-	
-	protected Composite getComposite(){
-		return this.composite;
-	}
-	
-	public Text getChordName() {
-		return this.chordName;
-	}
-	
-	public void setChordName(String chordName) {
-		this.chordName.setText(chordName);
-	}
-	
-	public void redraw() {
-		super.redraw();
-		this.composite.redraw();
-	}
-	
-	public void setCurrentTrack(TGTrack track) {
-		this.currentTrack = track;
-	}
-	
-	public TGTrack getCurrentTrack() {
-		return this.currentTrack;
-	}
-	
-	public void previewChord(final TGChord chord) {
-		
-		new Thread(new Runnable() {
-			public void run() {
-				int playedStrings = 0;
-				int stringCount = Math.min( getMaxStrings(), chord.countStrings() );
-				for (int i = 0; i < stringCount; i++) {
-					if (chord.getFretValue( i ) != -1) {
-						playedStrings ++;
-					}
-				}
-				int next = 0;
-				int[][] beat = new int[playedStrings][2];
-				for (int i = 0; i < stringCount; i++) {
-					int string = (stringCount - i);
-					int value = chord.getFretValue(string - 1);
-					if (value != -1) {
-						beat[next][0] = getCurrentTrack().getOffset() + getCurrentTrack().getString(string).getValue() + value;
-						beat[next][1] = TGVelocities.DEFAULT;
-						next ++;
-					}
-				}
-				
-				TGChannel ch = getCurrentTrack().getChannel(); 
-				TuxGuitar.instance().getPlayer().playBeat(ch.getChannel(),
-				                                          ch.getInstrument(),
-				                                          ch.getVolume(),
-				                                          ch.getBalance(),
-				                                          ch.getChorus(),
-				                                          ch.getReverb(),
-				                                          ch.getPhaser(),
-				                                          ch.getTremolo(),
-				                                          beat,
-				                                          200,
-				                                          200 );
-			}
-		}).start();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordList.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordList.java
deleted file mode 100644
index 3cabb07..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordList.java
+++ /dev/null
@@ -1,254 +0,0 @@
-/*
-
-
- * Created on 02-ene-2006
-
-
- *
-
-
- * TODO To change the template for this generated file go to
-
-
- * Window - Preferences - Java - Code Style - Code Templates
-
-
- */
-
-package org.herac.tuxguitar.gui.editors.chord;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.TGChordImpl;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGString;
-/**
- * @author julian
- * 
- * Component that shows the list of (alternative) chords - bottom of the screen
- */
-public class ChordList extends Composite {
-	
-	private static final int MIN_HEIGHT = 160;
-	private static final int SCROLL_INCREMENT = 25;
-	private static final int CHORD_FIRST_FRET_SPACING = 12;
-	private static final int CHORD_STRING_SPACING = 8;
-	private static final int CHORD_FRET_SPACING = 10;
-	private static final int CHORD_NOTE_SIZE = 6;
-	
-	private ChordDialog dialog;
-	private TGBeat beat;
-	private List graphicChords;
-	private int height;
-	private TGChordImpl selectedChord;
-	private Composite composite;
-	private Font font;
-	
-	public ChordList(ChordDialog dialog,Composite parent,TGBeat beat) {
-		super(parent, SWT.NONE);
-		this.setLayout(dialog.gridLayout(1,false,0,0));
-		this.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.graphicChords = new ArrayList();
-		this.dialog = dialog;
-		this.beat = beat;
-		this.init();
-	}
-	
-	private void init(){
-		this.composite = new Composite(this,SWT.BORDER | SWT.V_SCROLL | SWT.DOUBLE_BUFFERED);
-		this.composite.setBackground(this.getDisplay().getSystemColor(SWT.COLOR_WHITE));
-		this.composite.addPaintListener(new PaintListener() {
-			public void paintControl(PaintEvent e) {
-				TGPainter painter = new TGPainter(e.gc);
-				paintChords(painter);
-			}
-		});
-		this.composite.addMouseListener(new MouseAdapter() {
-			public void mouseUp(MouseEvent e) {
-				getComposite().setFocus();
-				getDialog().getEditor().setChord(getChord(e.x, e.y,true));
-				redraw();
-			}
-		});
-		
-		final Point origin = new Point(0, 0);
-		final ScrollBar vBar = this.composite.getVerticalBar();
-		vBar.setIncrement(SCROLL_INCREMENT);
-		vBar.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				int vSelection = vBar.getSelection();
-				int destY = -vSelection - origin.y;
-				Rectangle rect = getComposite().getBounds();
-				getShell().scroll(0, destY, 0, 0, rect.width, rect.height, false);
-				origin.y = -vSelection;
-				redraw();
-			}
-		});
-		
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumHeight = MIN_HEIGHT;
-		this.composite.setLayoutData(data);
-		this.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent arg0) {
-				disposeChords();
-				disposeFont();
-			}
-		});
-	}
-	
-	public void redraw(){
-		super.redraw();
-		this.composite.redraw();
-	}
-	
-	protected void paintChords(TGPainter painter) {
-		int maxHeight = 0;
-		int fromX = 15;
-		int fromY = 10;
-		int vScroll = this.composite.getVerticalBar().getSelection();
-		Iterator it = this.graphicChords.iterator();
-		while (it.hasNext()) {
-			TGChordImpl chord = (TGChordImpl) it.next();
-			
-			Color color = getChordColor(chord);
-			chord.setBackgroundColor(this.composite.getBackground());
-			chord.setColor(color);
-			chord.setNoteColor(color);
-			chord.setTonicColor(getDisplay().getSystemColor(SWT.COLOR_DARK_RED));
-			chord.setFirstFretSpacing(CHORD_FIRST_FRET_SPACING);
-			chord.setStringSpacing(CHORD_STRING_SPACING);
-			chord.setFretSpacing(CHORD_FRET_SPACING);
-			chord.setNoteSize(CHORD_NOTE_SIZE);
-			chord.setFirstFretFont(getFont(painter.getGC()));
-			chord.setStyle(ViewLayout.DISPLAY_CHORD_DIAGRAM);
-			chord.update(painter, true);
-			if(fromX + chord.getWidth() >= ((getBounds().x + getBounds().width) - 20)){
-				fromX = 15;
-				fromY += chord.getHeight() + 10;
-			}
-			chord.setEditing(true);
-			chord.setPosX( fromX );
-			chord.setPosY( fromY - vScroll);
-			chord.paint(painter,(chord.getWidth() / 2),0);
-			
-			fromX += chord.getWidth() + 10;
-			maxHeight = Math.max(maxHeight,chord.getHeight());
-		}
-		this.height = (fromY + maxHeight + 10);
-		this.updateScroll();
-	}
-	
-	private Color getChordColor(TGChordImpl chord){
-		if(this.selectedChord != null && this.selectedChord.equals(chord)){
-			return getDisplay().getSystemColor(SWT.COLOR_BLUE);
-		}
-		return getDisplay().getSystemColor(SWT.COLOR_BLACK);
-	}
-	
-	public void updateScroll(){
-		Rectangle rect = this.composite.getBounds();
-		Rectangle client = this.composite.getClientArea();
-		ScrollBar vBar = this.composite.getVerticalBar();
-		vBar.setMaximum(this.height);
-		vBar.setThumb(Math.min(rect.height, client.height));
-	}
-	
-	protected int getTrackString(int number){
-		TGString string = ChordList.this.beat.getMeasure().getTrack().getString(number);
-		return string.getValue();
-	}
-	
-	protected Font getFont(GC painter){
-		if(this.font == null || this.font.isDisposed()){ 
-			Font available = painter.getFont();
-			if(available == null || available.isDisposed()){
-				available = getDisplay().getSystemFont();
-			}
-			FontData[] datas = available.getFontData();
-			if(datas.length > 0){
-				this.font = new Font(getDisplay(),datas[0].getName(),Math.min(7,datas[0].getHeight()),SWT.BOLD);
-			}
-		}
-		return this.font;
-	}
-	
-	protected TGChordImpl getChord(int x, int y,boolean setAsSelected) {
-		Iterator it = this.graphicChords.iterator();
-		while (it.hasNext()) {
-			TGChordImpl chord = (TGChordImpl) it.next();
-			int x1 = chord.getPosX();
-			int x2 = x1 + chord.getWidth();
-			int y1 = chord.getPosY();
-			int y2 = y1 + chord.getHeight();
-			if (x > x1 && x < x2 && y > y1 && y < y2) {
-				if(setAsSelected){
-					if(this.selectedChord != null){
-						this.selectedChord.dispose();
-					}
-					this.selectedChord = chord;
-					chord.dispose();
-				}
-				return chord;
-			}
-		}
-		return null;
-	}
-	
-	public void setChords(List chords) {
-		this.disposeChords();
-		this.selectedChord = null;
-		
-		Iterator it = chords.iterator();
-		while (it.hasNext()) {
-			TGChordImpl chord = (TGChordImpl) it.next();
-			chord.setTonic( ChordList.this.dialog.getSelector().getTonicList().getSelectionIndex() );
-			chord.setBeat(ChordList.this.beat);
-			this.graphicChords.add(chord);
-		}
-		this.redraw();
-	}
-	
-	public void disposeFont(){
-		if(this.font != null){
-			this.font.dispose();
-		}
-	}
-	
-	public void disposeChords(){
-		Iterator it = this.graphicChords.iterator();
-		while (it.hasNext()) {
-			((TGChordImpl) it.next()).dispose();
-		}
-		this.graphicChords.clear();
-	}
-	
-	protected Composite getComposite(){
-		return this.composite;
-	}
-	
-	protected ChordDialog getDialog(){
-		return this.dialog;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordNamingConvention.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordNamingConvention.java
deleted file mode 100644
index 7298b3d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordNamingConvention.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord;
-
-/**
- * Creates a chord name String out of given parameters
- * @author Nikola Kolarovic
- */
-public class ChordNamingConvention {
-	
-	/** generates the chord name out of selected items */
-	public String createChordName(int chordTonic,
-	                              int chordIndex,
-	                              int alteration,
-	                              int plusMinus,
-	                              boolean add,
-	                              int add5,
-	                              int add9,
-	                              int add11,
-	                              int bassTonic,
-	                              boolean sharp) {
-		
-		StringBuffer sb = new StringBuffer();
-		
-		sb.append(getTonic(chordTonic,sharp));
-		
-		//String chordName = ((ChordInfo)ChordCreatorUtil.getChordData().getChords().get(chordIndex)).getName();
-		String chordName = ChordDatabase.get(chordIndex).getName();
-		if (!chordName.equals("M"))
-			sb.append(chordName);
-		
-		if (add)
-			sb.append("add");
-		
-		// TODO: ALTERATION
-		if (alteration!=0) {
-			char lastChar = sb.toString().charAt(sb.toString().length()-1);
-			// if chord name ends with a number then add a backslash
-			if (lastChar>='0' && lastChar <='9')
-				sb.append("/");
-			
-			switch (alteration) {
-				case 1 : sb.append( getAdd("9",plusMinus));
-					break;
-				case 2 : sb.append( getAdd("11",plusMinus));
-					break;
-				case 3 : sb.append( getAdd("13",plusMinus));
-					break;
-			}
-			
-		}
-		
-		if (add5!=0)
-			sb.append("/").append(getAdd("5",add5));
-		if (add9!=0)
-			sb.append("/").append(getAdd("9",add9));
-		if (add11!=0)
-			sb.append("/").append(getAdd("11",add11));
-		
-		if (chordTonic!=bassTonic) {
-			sb.append(" \\");
-			sb.append(getTonic(bassTonic,sharp));
-		}
-		return sb.toString();
-	}
-	
-	/** tonic marks */
-	public String getTonic(int chordTonic, boolean sharp) {
-		String retVal;
-		switch(chordTonic) {
-			case 0 : retVal="C"; break;
-			case 1 : retVal= sharp ? "C#" : "Db"; break;
-			case 2 : retVal="D"; break;
-			case 3 : retVal= sharp ? "D#" : "Eb"; break;
-			case 4 : retVal="E"; break;
-			case 5 : retVal="F"; break;
-			case 6 : retVal= sharp ? "F#" : "Gb"; break;
-			case 7 : retVal="G"; break;
-			case 8 : retVal= sharp ? "G#" : "Ab"; break;
-			case 9 : retVal="A"; break;
-			case 10 : retVal= sharp ? "A#" : "Bb"; break;
-			default : retVal="B"; break;
-		}
-		return retVal;
-	}
-	
-	/** adds + or - to an add chord String */
-	private String getAdd(String number, int selectionIndex) {
-		StringBuffer retVal=new StringBuffer(number);
-		switch(selectionIndex) {
-			case 1 : retVal.append("+"); break;
-			case 2 : retVal.append("-"); break;
-		}
-		return retVal.toString();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordRecognizer.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordRecognizer.java
deleted file mode 100644
index 59ac7f4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordRecognizer.java
+++ /dev/null
@@ -1,658 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord;
-/* Created on 05-March-2007
-*/
-
-import java.util.ArrayList;
-import java.util.Iterator;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.List;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author Nikola Kolarovic
- * 
- */
-public class ChordRecognizer extends Composite {
-	
-	// index for parameter array
-	protected static final int TONIC_INDEX = 0;
-	protected static final int CHORD_INDEX = 1;
-	protected static final int ALTERATION_INDEX = 2;
-	protected static final int PLUSMINUS_INDEX = 3;
-	protected static final int BASS_INDEX = 4;
-	protected static final int ADDCHK_INDEX = 5;
-	protected static final int I5_INDEX = 6;
-	protected static final int I9_INDEX = 7;
-	protected static final int I11_INDEX = 8;
-	
-	private ChordDialog dialog;
-	private List proposalList;
-	private java.util.List proposalParameters;
-	
-	// this var keep a control to running threads.
-	private long runningProcess;
-	
-	public ChordRecognizer(ChordDialog dialog, Composite parent,int style) {
-		super(parent,style);
-		this.setLayout(dialog.gridLayout(1,false,0,0));
-		this.setLayoutData(makeGridData());
-		this.runningProcess = 0;
-		this.dialog = dialog;
-		this.init();
-	}
-	
-	public GridData makeGridData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 180;
-		return data;
-	}
-	
-	public void init(){
-		Composite composite = new Composite(this,SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.proposalParameters = new ArrayList();
-		
-		this.proposalList = new List(composite,SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
-		this.proposalList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.proposalList.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(getDialog().getEditor() != null){
-					showChord(getProposalList().getSelectionIndex());
-				}
-			}
-		});
-		
-	}
-	
-	/** sets the current chord to be selected proposal */
-	protected void showChord(int index) {
-		int[] params = (int[])this.proposalParameters.get(index);
-		this.dialog.getSelector().adjustWidgets(params[TONIC_INDEX],
-		                                        params[CHORD_INDEX],
-		                                        params[ALTERATION_INDEX],
-		                                        params[BASS_INDEX],
-		                                        params[PLUSMINUS_INDEX],
-		                                        params[ADDCHK_INDEX],
-		                                        params[I5_INDEX],
-		                                        params[I9_INDEX],
-		                                        params[I11_INDEX]);
-		String chordName = this.proposalList.getItem(index);
-		chordName = chordName.substring(0, chordName.indexOf('(')-1);
-		this.dialog.getEditor().getChordName().setText(chordName);
-		this.dialog.getEditor().redraw();
-	}
-	
-	/**
-	 * - Recognizes the chord string
-	 * - Fills the component's list with alternative names
-	 * - Sets all the ChordSelector fields into recognized chord (tonic, bass, chord, alterations)
-	 * - Makes the alternatives and puts them into ChordList
-	 * - Writes the chord formula into appropriate label
-	 *  @param chord chord structure (frets, strings)
-	 *  @param redecorate is the Chord Editor in editing mode, or it is just changed by ChordSelector
-	 */
-	
-	public void recognize(final TGChord chord,final boolean redecorate,final boolean setChordName) {
-		
-		final long processId = (++ this.runningProcess);
-		final boolean sharp = this.dialog.getSelector().getSharpButton().getSelection();
-		
-		this.clearProposals();
-		
-		new Thread( new Runnable() {
-			public void run() {
-				if(!getDialog().isDisposed() && isValidProcess(processId)){
-					
-					final int params[] = makeProposals(processId, chord,sharp);
-					
-					if (params == null) { // could not recognize anything!?
-						if (isValidProcess(processId) && setChordName) {
-							try {
-								TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-									public void run() {
-										if(!getDialog().isDisposed() && isValidProcess(processId)){
-											getDialog().getEditor().setChordName("");
-										}
-									}
-								});
-							} catch (Throwable e) {
-								e.printStackTrace();
-							}
-						}
-						return;
-					}
-					
-					final String chordName = getChordName(params,sharp);
-					
-					// Sets all the ChordSelector fields into recognized chord (tonic, bass, chord, alterations)
-					if (isValidProcess(processId) && redecorate) {
-						try {
-							TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-								public void run() {
-									if(!getDialog().isDisposed()){
-										redecorate(params);
-									}
-								}
-							});
-						} catch (Throwable e) {
-							e.printStackTrace();
-						}
-					}
-					
-					if (isValidProcess(processId) && setChordName) {
-						try {
-							TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-								public void run() {
-									if(!getDialog().isDisposed()){
-										getDialog().getEditor().setChordName( (chordName != null ? chordName : "" ) );
-									}
-								}
-							});
-						} catch (Throwable e) {
-							e.printStackTrace();
-						}
-					}
-				}
-			}
-		} ).start();
-	}
-	
-	/** Fills the component's list with alternative names
-	 * @param chord TGChord to be recognized
-	 * @return parameters for adjustWidgets and getChordName methods 
-	 */
-	protected int[] makeProposals(final long processId, TGChord chord,final boolean sharp) {
-		
-		int[] tuning = this.dialog.getSelector().getTuning();
-		java.util.List notesInside = new ArrayList();
-		
-		// find and put in all the distinct notes
-		for (int i=0; i<tuning.length; i++) {
-			int fret = chord.getStrings()[i];
-			if (fret!=-1) {
-				Integer note = new Integer((tuning[tuning.length-1-i] + fret) % 12);
-				Iterator it = notesInside.iterator();
-				boolean found=false;
-				while (it.hasNext())
-					if (it.next().equals(note))
-						found=true;
-				if (!found)
-					notesInside.add(note);
-			}
-		}
-		
-		// Now search:
-		// go through all the possible tonics
-		// it is required because tonic isn't mandatory in a chord
-		java.util.List allProposals = new ArrayList(10);
-		
-		for (int tonic=0; tonic<12; tonic++) {
-			
-			Proposal currentProp = null;
-			
-			// first check for the basic chord tones
-			for (int chordIndex = 0; chordIndex < ChordDatabase.length(); chordIndex ++) {
-				ChordDatabase.ChordInfo info = ChordDatabase.get(chordIndex);
-				
-				currentProp = new Proposal(notesInside);
-				// it is more unusual the more we go down the index
-				// except chords "5" and "m", they are quite usual :)
-				currentProp.unusualGrade-=(chordIndex!=ChordDatabase.length() && chordIndex!=4 ? 2*chordIndex : 0);
-				
-				//ChordDatabase.ChordInfo info = (ChordDatabase.ChordInfo)chordItr.next();
-				boolean foundNote = false;
-				for (int i=0; i<info.getRequiredNotes().length; i++) { // go through all the requred notes
-					Iterator nit = notesInside.iterator();
-					while (nit.hasNext()) // go through all the needed notes
-						if (((Integer)nit.next()).intValue() == (tonic+info.getRequiredNotes()[i]-1)%12) {
-							foundNote=true;
-							if (tonic+info.getRequiredNotes()[i]-1 == tonic)
-								currentProp.dontHaveGrade+=15; // this means penalty for not having tonic is -65
-							currentProp.foundNote(tonic+info.getRequiredNotes()[i]-1); // found a note in a chord
-						}
-					
-				}
-				// if something found, add it into a proposal if it's worth
-				if (foundNote) {
-					currentProp.params[TONIC_INDEX] = tonic;
-					currentProp.params[CHORD_INDEX] = chordIndex;//possibleChords.indexOf(info);
-					int foundNotesCount = currentProp.missingNotes.length-currentProp.missingCount;
-					
-					// it is worth if it is missing 1 essential note and/or fifth
-					if (!info.getName().startsWith("dim") && !info.getName().startsWith("aug"))
-						if (!currentProp.isFound(tonic+8-1)) {
-							
-							// hmmm. maybe it's altered fifth? Create a branch for it.
-							if (currentProp.isNeeded(tonic+7-1) || currentProp.isNeeded(tonic+9-1)) {
-								Proposal branchProp = (Proposal)currentProp.clone();
-								if (branchProp.isNeeded(tonic+9-1)) {
-									branchProp.params[I5_INDEX] = 1;
-									branchProp.foundNote(tonic+8);
-								}
-								else {
-									branchProp.params[I5_INDEX] = 2;
-									branchProp.foundNote(tonic+6);
-								}
-								branchProp.unusualGrade-=35;
-								if (foundNotesCount+1>=info.getRequiredNotes().length-1) {
-									branchProp.dontHaveGrade-=(info.getRequiredNotes().length-(foundNotesCount+1))*50;
-									allProposals.add(branchProp);
-								}
-								
-							}
-							else {
-								currentProp.params[I5_INDEX] = 0;
-								currentProp.dontHaveGrade+=30;
-							}
-						}
-					
-					currentProp.params[I5_INDEX] = 0;
-					if (foundNotesCount>=info.getRequiredNotes().length-1 ) {
-							currentProp.dontHaveGrade-=(info.getRequiredNotes().length-foundNotesCount)*50;
-							allProposals.add(currentProp);
-					}
-				}
-				currentProp=null;
-			}
-		}
-		
-		Iterator props = allProposals.iterator();
-		java.util.List unsortedProposals = new ArrayList(5);
-		while (props.hasNext()) {
-			// place the still missing alterations notes accordingly... bass also
-			///////////////////////////////////////////////////////////////
-			
-			final Proposal current = (Proposal)props.next();
-			
-			boolean bassIsOnlyInBass = true;
-			// ---------------- bass tone ----------------
-			for (int i=chord.getStrings().length-1; i>=0; i--) {
-				if (chord.getStrings()[i]!=-1) {
-					if (current.params[BASS_INDEX]==-1) {// if we still didn't determine bass
-						current.params[BASS_INDEX] = (tuning[tuning.length-1-i] + chord.getStrings()[i]) % 12;
-						if (current.params[BASS_INDEX]!=current.params[TONIC_INDEX])
-							current.unusualGrade-=20;
-					}
-					if (current.params[BASS_INDEX]==(tuning[tuning.length-1-i] + chord.getStrings()[i]) % 12 )
-						bassIsOnlyInBass=false; // if we stumbled upon bass tone again
-				}
-			}
-			
-			if (current.isNeeded(current.params[BASS_INDEX]) && bassIsOnlyInBass) {
-				   // do not mark as FOUND if bass is somewhere other than in bass only
-					current.foundNote(current.params[BASS_INDEX]);
-					current.unusualGrade-=20;
-			}
-			// <=11 means "not DIM or AUG or 5"
-			if (current.missingCount>0 && current.params[CHORD_INDEX]<=11) {
-				// ---------------- alteration tones ----------------
-				// determine seventh -->> 2 is HARDCODED!
-				int seventh;
-				if (current.params[CHORD_INDEX] == 2) seventh=current.params[TONIC_INDEX]+12-1; // plain 7
-						else seventh=current.params[TONIC_INDEX]+11-1; // b7
-				if (current.isExisting(seventh)) {
-					if (!current.isFound(seventh)) {
-						current.filled[3]=true;
-						current.foundNote(seventh);
-					}
-				}
-				for (int plusminus=0; plusminus<=2; plusminus++) {
-					for (int i=2; i>=0; i--)  // 13, 11, 9
-							if (current.isNeeded(current.params[TONIC_INDEX]+getAddNote(i, plusminus)) && !current.filled[i]) {
-								current.filled[i]=true;
-								current.plusminusValue[i]=plusminus;
-								if (plusminus!=0) 
-									current.unusualGrade-=15;
-								current.foundNote(current.params[TONIC_INDEX]+getAddNote(i, plusminus));
-							}
-					
-				}
-			}
-			
-			// fill in the list
-			///////////////////////////////////////////////////////////////
-			if (!(current.filled[3] && !(current.filled[0] || current.filled[1] || current.filled[2])) &&  // if just found seventh, cancel it
-					current.missingCount==0 && // we don't tollerate notes in chord that are not used in the ChordName
-					current.dontHaveGrade>-51) {
-						findChordLogic(current);
-						unsortedProposals.add(current);
-				}
-			
-		}
-		// first, sort by DontHaveGrade
-		shellsort(unsortedProposals,1);
-		
-		int cut=-1;
-		int howManyIncomplete = ChordSettings.instance().getIncompleteChords();
-		
-		for (int i=0; i<unsortedProposals.size() && cut==-1; i++) {
-			int prior = ((Proposal)unsortedProposals.get(i)).dontHaveGrade;
-			if (prior<0) 
-				cut=i+howManyIncomplete;
-		}
-		// cut the search
-		unsortedProposals=unsortedProposals.subList(0, (cut>0 && cut<unsortedProposals.size() ? cut : unsortedProposals.size()));
-		// sort by unusualGrade
-		shellsort(unsortedProposals,2);
-		
-		int firstNegative = 0;
-		for (int i=0; i<unsortedProposals.size(); i++) {
-			final Proposal current = (Proposal)unsortedProposals.get(i);
-			if (firstNegative==0 && current.unusualGrade<0) 
-				firstNegative=current.unusualGrade;
-			
-			if (current.unusualGrade > (firstNegative>=0 ? 0 : firstNegative)-60){
-				try {
-					TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-						public void run() {
-							if(!getDialog().isDisposed() && isValidProcess(processId)){
-								addProposal(current.params, getChordName(current.params,sharp)+" ("+Math.round(100+current.dontHaveGrade*7/10)+"%)" );
-							}
-						}
-					});
-				} catch (Throwable e) {
-					e.printStackTrace();
-				}
-			}
-		}
-		if (this.proposalParameters.size()==0)
-			return null;
-		return (int[])this.proposalParameters.get(0);
-	}
-	
-	/** adjusts widgets on the Recognizer combo */
-	protected void redecorate(int params[]){
-		this.dialog.getSelector().adjustWidgets(params[TONIC_INDEX],
-		                                        params[CHORD_INDEX],
-		                                        params[ALTERATION_INDEX],
-		                                        params[BASS_INDEX],
-		                                        params[PLUSMINUS_INDEX],
-		                                        params[ADDCHK_INDEX],
-		                                        params[I5_INDEX],
-		                                        params[I9_INDEX],
-		                                        params[I11_INDEX]);
-	}
-	
-	/** Assembles chord name according to ChordNamingConvention */
-	protected String getChordName(int[] param, boolean sharp) {
-		return new ChordNamingConvention().createChordName(param[TONIC_INDEX],
-		                                                   param[CHORD_INDEX],
-		                                                   param[ALTERATION_INDEX],
-		                                                   param[PLUSMINUS_INDEX],
-		                                                   param[ADDCHK_INDEX] != 0,
-		                                                   param[I5_INDEX],
-		                                                   param[I9_INDEX],
-		                                                   param[I11_INDEX],
-		                                                   param[BASS_INDEX],
-		                                                   sharp);
-	}
-	
-	/** Return required interval in semitones for add type and +- modificator
-	 * @param type 0=add9, 1=add11, 2=add13
-	 * @param selectionIndex 0=usual, 1="+", 2="-"
-	 */
-	protected int getAddNote(int type, int selectionIndex) {
-		
-		int wantedNote = 0;
-		
-		switch (type) {
-			case 0:
-				wantedNote = 3; // add9
-				break;
-			case 1:
-				wantedNote = 6; // add11
-				break;
-			case 2:
-				wantedNote = 10; // add13
-				break;
-		}
-		
-		switch (selectionIndex) {
-			case 1:
-				wantedNote++;
-				break;
-			case 2:
-				wantedNote--;
-				break;
-			default:
-				break;
-		}
-		
-		return --wantedNote;
-		
-	}
-	
-	void findChordLogic(Proposal current) {
-		boolean[] found = current.filled;
-		int[] plusMinus = current.plusminusValue;
-		/*if (!found[3])
-			current.unusualGrade-=50;*/
-		current.params[ALTERATION_INDEX]=0;
-		current.params[I9_INDEX]=plusMinus[0];
-		current.params[I11_INDEX]=plusMinus[1];
-		current.params[ADDCHK_INDEX]=0;
-		current.params[PLUSMINUS_INDEX]=0;
-		
-		if (found[2]) { // -------------- 13
-			current.params[ALTERATION_INDEX]=3;
-			current.params[PLUSMINUS_INDEX]=plusMinus[2];
-			if (!found[1] || !found[0] || !found[3]) { // b7 or 9 or 11 not inside
-				current.unusualGrade-=10;
-				if (!found[1] && !found[0] && !found[3])
-					current.params[ADDCHK_INDEX]=1;
-				else { // just penalty if something's missing
-					if (!found[3]) // don't-have penalty if seventh is missing
-						current.dontHaveGrade-=25;
-					if (!found[1]) { // if 9 or 11 is missing, it is more unusual
-						current.unusualGrade-=30;
-						current.dontHaveGrade-=10;
-					}
-					if (!found[0]) {
-						current.unusualGrade-=30;
-						current.dontHaveGrade-=10;
-					}
-				}
-			}
-		}
-		else
-			if (found[1]) { // -------------- 11
-				current.params[ALTERATION_INDEX]=2;
-				current.params[PLUSMINUS_INDEX]=plusMinus[1];
-				current.params[I11_INDEX]=0;
-				current.unusualGrade-=10;
-				
-				if (!found[0] || !found[3]) { // b7 or 9 not inside
-					if (!found[0] && !found[3])
-						current.params[ADDCHK_INDEX]=1;
-					else{
-						if (!found[3])
-							current.dontHaveGrade-=25;
-						if (!found[0]) {
-							current.unusualGrade-=30;
-							current.dontHaveGrade-=10;
-						}
-					}
-				}
-			}
-			else 
-				if (found[0]) { // 9
-					current.params[ALTERATION_INDEX]=1;
-					current.params[I9_INDEX]=0;
-					current.params[I11_INDEX]=0;
-					current.params[PLUSMINUS_INDEX]=plusMinus[0];
-					current.unusualGrade-=10;
-					if (!found[3])
-						current.params[ADDCHK_INDEX]=1;
-					
-				}
-	}
-	
-	/**
-	 * Shellsort, using a sequence suggested by Gonnet.
-	 * -- a little adopted
-	 * @param a List of Proposals, unsorted
-	 * @param sortIndex 1 to sort by don'tHaveGrade, 2 to sort by unusualGrade
-	 * @return sorted list by selected criteria
-	 */
-	public void shellsort( java.util.List a, int sortIndex ){
-		int length = a.size();
-		for( int gap = length / 2; gap > 0;
-					 gap = gap == 2 ? 1 : (int) ( gap / 2.2 ) )
-			for( int i = gap; i < length; i++ ){
-				Proposal tmp = (Proposal)a.get(i);
-				int j = i;
-				
-				for( ; j >= gap && 
-				(  sortIndex == 1 ?
-				tmp.dontHaveGrade > ((Proposal)a.get(j - gap)).dontHaveGrade :
-				tmp.unusualGrade > ((Proposal)a.get(j - gap)).unusualGrade  )
-				; 
-				j -= gap )
-					a.set(j, a.get(j - gap));
-				a.set( j , tmp);
-			}
-	}
-	
-	protected void addProposal(int[] params, String name){
-		this.proposalParameters.add(params);
-		this.proposalList.add(name);
-	}
-	
-	protected void clearProposals(){
-		this.proposalList.removeAll();
-		this.proposalParameters.clear();
-	}
-	
-	protected ChordDialog getDialog(){
-		return this.dialog;
-	}
-	
-	protected List getProposalList(){
-		return this.proposalList;
-	}
-	
-	protected boolean isValidProcess(long processId){
-		return (this.runningProcess == processId);
-	}
-	
-	protected class Proposal implements Cloneable{
-		int[] params;
-		
-		/** grade for chord "unusualness" - Cm is less unusual than E7/9+/C */
-		int unusualGrade = 0;
-		/** penalty for notes that chord doesn't have */
-		int dontHaveGrade = -15;
-		
-		/** counts the notes that are in chord but still not recognized */
-		int missingCount;
-		int[] missingNotes;
-		
-		boolean filled[]={false,false,false,false};
-		int plusminusValue[]={0,0,0};
-		
-		private Proposal() {
-			super();
-			this.params = new int[9];
-			for (int i=0; i<9; i++)
-				this.params[i]=-1;
-		}
-		
-		/** initialize with needed notes */
-		public Proposal(java.util.List notes) {
-			this.params = new int[9];
-			for (int i=0; i<9; i++)
-				this.params[i]=-1;
-			
-			int length = notes.size();
-			this.missingNotes = new int[length];
-			for (int i = 0; i< length; i++){ // deep copy, because of clone() method
-				this.missingNotes[i] = ((Integer)notes.get(i)).intValue();
-			}
-			this.missingCount = length;
-		}
-		
-		/** if note is found, mark it as found in the Missing array*/
-		void foundNote(int value) {
-			int note = (value % 12);
-			if (this.missingCount!=0)
-				for (int i=0; i<this.missingCount; i++)
-					if (this.missingNotes[i] == note) {
-						// put the found one on the end, switch positions
-						this.missingCount--;
-						int temp = this.missingNotes[i]; 
-						this.missingNotes[i]=this.missingNotes[this.missingCount];
-						this.missingNotes[this.missingCount]=temp;
-						return;
-					}
-		}
-		
-		/** is note already found? */
-		boolean isFound(int value) {
-			int note = (value % 12);
-			for (int i=this.missingCount; i<this.missingNotes.length; i++)
-				if (this.missingNotes[i] == note)
-					return true;
-			return false;
-		}
-		
-		/** is note required to be found? */
-		boolean isNeeded(int value) {
-			int note = (value % 12);
-			if (this.missingCount!=0)
-				for (int i=0; i<this.missingCount; i++)
-					if (this.missingNotes[i] == note)
-						return true;
-			return false;
-		}
-		
-		/** does note exist in a chord? (found or not found) */
-		boolean isExisting(int value) {
-			int note = (value % 12);
-			for (int i=0; i<this.missingNotes.length; i++)
-				if (this.missingNotes[i] == note)
-					return true;
-			return false;
-		}
-		
-		/** calls the Object.clone() method, since it is private (?!!??) */
-		public Object clone() {
-			Proposal proposal = new Proposal();
-			for (int i=0; i<9; i++)
-				proposal.params[i] = this.params[i];
-			proposal.unusualGrade = this.unusualGrade;
-			proposal.dontHaveGrade = this.dontHaveGrade;
-			proposal.missingCount = this.missingCount;
-			proposal.missingNotes = new int[this.missingNotes.length];
-			for(int i = 0; i < proposal.missingNotes.length; i ++){
-				proposal.missingNotes[i] = this.missingNotes[i];
-			}
-			proposal.filled = new boolean[this.filled.length];
-			for (int i=0; i<proposal.filled.length; i++)
-				proposal.filled[i] = this.filled[i];
-			
-			proposal.plusminusValue = new int[this.plusminusValue.length];
-			for (int i=0; i<proposal.plusminusValue.length; i++)
-				proposal.plusminusValue[i] = this.plusminusValue[i];
-			
-			return proposal;
-		}
-		
-		public boolean equals(Object o) {
-			Proposal another = (Proposal)o;
-			for (int i=0; i<9; i++)
-				if (this.params[i]!=another.params[i])
-					return false;
-			// not all attributes, but the rest is not needed YET!
-			return true;
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSelector.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSelector.java
deleted file mode 100644
index c5e015a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSelector.java
+++ /dev/null
@@ -1,534 +0,0 @@
-/*
- * Created on 02-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.chord;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.List;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.util.TGMusicKeyUtils;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- * @author Nikola Kolarovic
- *
- *    WIDGET SET that allows complex chord choosing<br>
- *    Chord theory according to <a href="http://www.jazzguitar.be/quick_crd_ref.html">http://www.jazzguitar.be/quick_crd_ref.html</a>.
- */
-public class ChordSelector extends Composite{
-	
-	public static final String[][] KEY_NAMES = new String[][]{
-		TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_CHORD),
-		TGMusicKeyUtils.getFlatKeyNames(TGMusicKeyUtils.PREFIX_CHORD),
-	};
-	
-	private ChordDialog dialog;
-	private int[] tuning;
-	private List tonicList;
-	private List chordList;
-	private List alterationList;
-	private Button sharpButton;
-	private Button flatButton;
-	private Combo bassCombo;
-	private Button addCheck;
-	private List plusMinusList;
-	private List _5List;
-	private List _9List;
-	private List _11List;
-	
-	private boolean refresh;
-	
-	public ChordSelector(ChordDialog dialog,Composite parent,int style,int[] tuning) {
-		super(parent,style);
-		this.setLayout(new GridLayout(3,false));
-		this.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.dialog = dialog;
-		this.tuning = tuning;
-		
-		this.refresh = true;
-		this.init();
-	}
-	
-	
-	public void init(){
-		Composite tonicComposite = new Composite(this,SWT.NONE);
-		tonicComposite.setLayout(this.dialog.gridLayout(1,false,0,0));
-		tonicComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.tonicList = new List(tonicComposite,SWT.BORDER);
-		this.tonicList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		// sharp & flat buttons
-		Composite buttonsComposite = new Composite(tonicComposite,SWT.NONE);
-		buttonsComposite.setLayout(this.dialog.gridLayout(2,true,0,0));
-		GridData buttonGd = new GridData(SWT.FILL,SWT.TOP,true,false);
-		buttonGd.heightHint = 28;
-		buttonGd.widthHint = 28;
-		this.sharpButton = new Button(buttonsComposite,SWT.TOGGLE);
-		this.sharpButton.setLayoutData(buttonGd);
-		this.flatButton = new Button(buttonsComposite,SWT.TOGGLE);
-		this.flatButton.setLayoutData(buttonGd);
-		// TODO: maybe put an image instead of #,b
-		this.sharpButton.setText("#");
-		this.flatButton.setText("b");
-		this.chordList = new List(this,SWT.BORDER);
-		this.chordList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Label separator = new Label(tonicComposite,SWT.SEPARATOR | SWT.HORIZONTAL);
-		separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
-		Button customizeButton = new Button(tonicComposite,SWT.PUSH);
-		customizeButton.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
-		customizeButton.setText(TuxGuitar.getProperty("settings"));
-		
-		customizeButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				if(new ChordSettingsDialog().open(ChordSelector.this.getShell())){
-					new SyncThread(new Runnable() {
-						public void run() {
-							ChordSelector.this.showChord();
-							getChordList().redraw();
-						}
-					}).start();
-				}
-			}
-		});
-		
-		
-		initChordWidgets();
-		
-		// fill the List widgets with text
-		insertTonicNames(true);
-		
-		for(int i = 0 ; i < ChordDatabase.length(); i ++) {
-			this.chordList.add( ChordDatabase.get(i).getName() );
-		}
-		/*
-		Iterator chordInfo = ChordCreatorUtil.getChordData().getChords().iterator();
-		while(chordInfo.hasNext()) {
-			this.chordList.add( ((ChordDatabase.ChordInfo)chordInfo.next()).getName() );
-		}
-		*/
-		
-		this.chordList.setSelection(0);
-		
-		String[] alterationNames = getAlterationNames();
-		for(int i = 0;i < alterationNames.length;i++){
-			this.alterationList.add(alterationNames[i]);
-		}
-		this.alterationList.setSelection(0);
-		
-		String[] plusMinus = this.getPlusMinus("");
-		for(int i = 0;i < plusMinus.length;i++){
-			this.plusMinusList.add(plusMinus[i]);
-		}
-		this.plusMinusList.setSelection(0);
-		
-		String[] plus5Minus = this.getPlusMinus("/5");
-		for(int i = 0;i < plus5Minus.length;i++){
-			this._5List.add(plus5Minus[i]);
-		}
-		this._5List.setSelection(0);
-		String[] plus9Minus = this.getPlusMinus("/9");
-		for(int i = 0;i < plus9Minus.length;i++){
-			this._9List.add(plus9Minus[i]);
-		}
-		this._9List.setSelection(0);
-		String[] plus11Minus = this.getPlusMinus("/11");
-		for(int i = 0;i < plus11Minus.length;i++){
-			this._11List.add(plus11Minus[i]);
-		}
-		this._11List.setSelection(0);
-		
-		// LISTENERS
-		
-		this.tonicList.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if (ChordSelector.this.getRefresh()) {
-					if(getDialog().getEditor() != null && getDialog().getList() != null){
-						getBassCombo().select(getTonicList().getSelectionIndex());
-						showChord();
-					}
-				}
-			}
-		});
-		
-		this.bassCombo.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if (ChordSelector.this.getRefresh()) {
-					if(getDialog().getEditor() != null && getDialog().getList() != null){
-						showChord();
-					}
-				}
-			}
-		});
-		
-		this.chordList.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(getDialog().getEditor() != null && getDialog().getList() != null){
-					adjustWidgetAvailability();
-					if (ChordSelector.this.getRefresh()) {
-						showChord();
-					}
-				}
-			}
-		});
-		
-		this.alterationList.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(getDialog().getEditor() != null && getDialog().getList() != null){
-					ChordSelector.this.adjustWidgetAvailability();
-					if (ChordSelector.this.getRefresh()) {
-						showChord();
-					}
-				}
-			}
-		});
-		
-		this.addCheck.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				if(getDialog().getEditor() != null && getDialog().getList() != null){
-					
-					ChordSelector.this.adjustWidgetAvailability();
-					/*
-					if (getAddCheck().getSelection()) {
-						updateWidget(get_9List(), false);
-						updateWidget(get_11List(), false);
-					}
-					*/
-					if (ChordSelector.this.getRefresh()) {
-						showChord();
-						//ChordSelector.this.dialog.getList().redraw();
-					}
-				}
-				
-			}
-		});
-		
-		this._5List.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(getDialog().getEditor() != null && getDialog().getList() != null){
-					if (ChordSelector.this.getRefresh()) {
-						showChord();
-					}
-				}
-			}
-		});
-		
-		this._9List.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(getDialog().getEditor() != null && getDialog().getList() != null){
-					if (ChordSelector.this.getRefresh()) {
-						showChord();
-					}
-				}
-			}
-		});
-		
-		this._11List.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(getDialog().getEditor() != null && getDialog().getList() != null){
-					if (ChordSelector.this.getRefresh()) {
-						showChord();
-					}
-				}
-			}
-		});
-		
-		this.plusMinusList.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(getDialog().getEditor() != null && getDialog().getList() != null){
-					if (ChordSelector.this.getRefresh()) {
-						showChord();
-						//ChordSelector.this.dialog.getList().redraw();
-					}
-				}
-			}
-		});
-		
-		this.sharpButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				insertTonicNames(true);
-			}
-		});
-		
-		this.flatButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				insertTonicNames(false);
-			}
-		});
-		this.adjustWidgetAvailability();
-	}
-	
-	protected void initChordWidgets() {
-		Composite alterationComposite = new Composite(this,SWT.NONE);
-		alterationComposite.setLayout(this.dialog.gridLayout(1,true,0,0));
-		alterationComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		Composite aboveComposite = new Composite(alterationComposite,SWT.NONE);
-		aboveComposite.setLayout(this.dialog.gridLayout(2,true,0,0));
-		aboveComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		Composite firstComposite = new Composite(aboveComposite,SWT.NONE);
-		firstComposite.setLayout(this.dialog.gridLayout(1,false,0,0));
-		firstComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.alterationList = new List(firstComposite,SWT.BORDER);
-		this.alterationList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.plusMinusList = new List(firstComposite,SWT.BORDER);
-		this.plusMinusList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Composite secondComposite = new Composite(aboveComposite,SWT.NONE);
-		secondComposite.setLayout(this.dialog.gridLayout(1,false,0,0));
-		secondComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this._5List = new List(secondComposite,SWT.BORDER);
-		this._5List.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this._9List = new List(secondComposite,SWT.BORDER);
-		this._9List.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this._11List = new List(secondComposite,SWT.BORDER);
-		this._11List.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Composite bassComposite = new Composite(alterationComposite,SWT.NONE);
-		bassComposite.setLayout(this.dialog.gridLayout(1,true,0,0));
-		bassComposite.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
-		this.addCheck = new Button(bassComposite, SWT.CHECK | SWT.LEFT);
-		this.addCheck.setText("add");
-		//this.addCheck.setSelection(false);
-		//this.addCheck.setEnabled(false);
-		this.addCheck.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
-		
-		Label separator = new Label(bassComposite,SWT.SEPARATOR | SWT.HORIZONTAL );
-		separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,true));
-		
-		Label bText = new Label(bassComposite,SWT.LEFT);
-		bText.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
-		bText.setText(TuxGuitar.getProperty("chord.bass"));
-		this.bassCombo = new Combo(bassComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.bassCombo.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
-	}
-	
-	protected void insertTonicNames(boolean sharp){
-		
-		String[] names = KEY_NAMES[ sharp?0:1 ];
-		
-		// update the buttons
-		this.flatButton.setSelection(!sharp);
-		this.sharpButton.setSelection(sharp);
-		// keep the old position
-		int indexL = this.tonicList.getSelectionIndex();
-		if (indexL==-1) indexL=0;
-		int indexC = this.bassCombo.getSelectionIndex();
-		if (indexC==-1) indexC=0;
-		
-		// update the list
-		this.tonicList.removeAll();
-		this.bassCombo.removeAll();
-		for(int i = 0;i < names.length;i++){
-			this.tonicList.add(names[i]);
-			this.bassCombo.add(names[i]);
-		}
-		this.tonicList.setSelection(indexL);
-		this.bassCombo.select(indexC);
-	}
-	
-	private String[] getPlusMinus(String text){
-		String[] names = new String[3];
-		
-		names[0] = " ";
-		names[1] = text+"+";
-		names[2] = text+"-";
-		
-		return names;
-	}
-	
-	private String[] getAlterationNames(){
-		String[] names = new String[4];
-		
-		names[0] = " ";
-		names[1] = "9";
-		names[2] = "11";
-		names[3] = "13";
-		
-		return names;
-	}
-	
-	protected void showChord(){
-		TuxGuitar.instance().loadCursor(getShell(),SWT.CURSOR_WAIT);
-		ChordCreatorListener listener = new ChordCreatorListener() {
-			public void notifyChords(final ChordCreatorUtil instance,final java.util.List chords) {
-				try {
-					TGSynchronizer.instance().addRunnable(new TGSynchronizer.TGRunnable() {
-						public void run() {
-							if(instance.isValidProcess() && !getDialog().isDisposed()){
-								getDialog().getList().setChords(chords);
-								TuxGuitar.instance().loadCursor(getShell(),SWT.CURSOR_ARROW);
-							}
-						}
-					});
-				} catch (Throwable e) {
-					e.printStackTrace();
-				}
-			}
-		};
-		
-		ChordCreatorUtil.getChords(listener,
-		                           this.tuning,
-		                           this.chordList.getSelectionIndex(),
-		                           this.alterationList.getSelectionIndex(),
-		                           this.plusMinusList.getSelectionIndex(),
-		                           this.addCheck.getSelection(),
-		                           this._5List.getSelectionIndex(),
-		                           this._9List.getSelectionIndex(),
-		                           this._11List.getSelectionIndex(),
-		                           this.bassCombo.getSelectionIndex(),
-		                           this.tonicList.getSelectionIndex(),
-		                           this.sharpButton.getSelection());
-	}
-	
-	protected void updateWidget(List widget, boolean enabled) {
-		widget.setEnabled(enabled);
-		if(!enabled){
-			widget.setSelection(0);
-		}
-	}
-	
-	protected void updateWidget(Button widget, boolean enabled) {
-		widget.setEnabled(enabled);
-		if(!enabled){
-			widget.setSelection(false);
-		}
-	}
-	
-	/**
-	 * Sets all the widgets' fields into recognized chord 
-	 * (tonic, bass, chord, alterations)
-	 */
-	public void adjustWidgets(int tonic, int chordBasic, int alteration, int bass, int plusMinus, int addBoolean, int index5, int index9, int index11) {
-		this.setRefresh(false);
-		// adjust widgets
-		this.tonicList.setSelection(tonic);
-		this.alterationList.setSelection(alteration);
-		this.bassCombo.select(bass);
-		this.plusMinusList.setSelection(plusMinus);
-		this.addCheck.setSelection(addBoolean != 0);
-		this._5List.setSelection(index5);
-		this._9List.setSelection(index9);
-		this._11List.setSelection(index11);
-		this.chordList.setSelection(chordBasic);
-		this.adjustWidgetAvailability();
-		this.setRefresh(true);
-		this.showChord();
-	}
-	
-	/**
-	 * adjusts the widgets availability according to chord theory options
-	 */
-	protected void adjustWidgetAvailability() {
-		String chordName = ChordDatabase.get(getChordList().getSelectionIndex()).getName();
-		if (chordName.equals("dim") || chordName.equals("dim7") || chordName.equals("aug") || chordName.equals("5") ) {
-			updateWidget(getAlterationList(),false);
-			updateWidget(getAddCheck(),false);
-			updateWidget(get_9List(),false);
-			updateWidget(get_11List(),false);
-			updateWidget(getPlusMinusList(),false);
-			
-			if (!chordName.equals("5")){
-				updateWidget(get_5List(),false);//disableWidget(get_5List());
-			}else{
-				updateWidget(get_5List(),true);
-			}
-		}
-		else {
-			// enable and don't change the selection index
-			//getAlterationList().setEnabled(true);
-			//get_5List().setEnabled(true);
-			updateWidget(getAlterationList(),true);
-			updateWidget(get_5List(),true);
-		}
-		
-		if(this.alterationList.isEnabled()){
-			int currentIndex = this.alterationList.getSelectionIndex();
-			// handle the +- list and ADD checkbox
-			// handle the 9 and 11 list
-			updateWidget(this.plusMinusList,(currentIndex > 0));
-			updateWidget(this.addCheck,(currentIndex > 0));
-			updateWidget(this._9List, (currentIndex >= 2 && !this.addCheck.getSelection() ) );
-			updateWidget(this._11List, (currentIndex >= 3 && !this.addCheck.getSelection() ) );
-		}
-	}
-	
-	public boolean getRefresh() {
-		return this.refresh;
-	}
-	
-	public void setRefresh(boolean refresh) {
-		this.refresh = refresh;
-	}
-	
-	public void setTuning(int[] tuning){
-		this.tuning = tuning;
-	}
-	
-	public int[] getTuning(){
-		return this.tuning;
-	}
-	
-	protected ChordDialog getDialog() {
-		return this.dialog;
-	}
-	
-	protected List getTonicList() {
-		return this.tonicList;
-	}
-	
-	protected List getChordList() {
-		return this.chordList;
-	}
-	
-	protected List getAlterationList() {
-		return this.alterationList;
-	}
-	
-	protected Button getSharpButton() {
-		return this.sharpButton;
-	}
-	
-	protected Button getFlatButton() {
-		return this.flatButton;
-	}
-	
-	protected Combo getBassCombo() {
-		return this.bassCombo;
-	}
-	
-	protected Button getAddCheck() {
-		return this.addCheck;
-	}
-	
-	protected List getPlusMinusList() {
-		return this.plusMinusList;
-	}
-	
-	protected List get_5List() {
-		return this._5List;
-	}
-	
-	protected List get_9List() {
-		return this._9List;
-	}
-	
-	protected List get_11List() {
-		return this._11List;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSettings.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSettings.java
deleted file mode 100644
index 1d37952..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSettings.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord;
-
-public class ChordSettings {
-	
-	private static ChordSettings instance;
-	
-	private boolean emptyStringChords;
-	private float bassGrade;
-	private float fingeringGrade;
-	private float subsequentGrade;
-	private float requiredBasicsGrade;
-	private float manyStringsGrade;
-	private float goodChordSemanticsGrade;
-	private int chordsToDisplay;
-	private int howManyIncompleteChords;
-	private int chordTypeIndex;
-	private int findChordsMin;
-	private int findChordsMax;
-	
-	private ChordSettings() {
-		this.emptyStringChords = false;
-		this.bassGrade = 200.0f;
-		this.fingeringGrade = 150.0f; // was:200
-		this.subsequentGrade = 200.0f;
-		this.requiredBasicsGrade = 150.0f;
-		this.manyStringsGrade = 100.0f;
-		this.goodChordSemanticsGrade = 200.0f;
-		this.chordsToDisplay = 30;
-		this.howManyIncompleteChords = 4;
-		this.chordTypeIndex = 0;
-		this.findChordsMin=0;
-		this.findChordsMax=15;
-	}
-	
-	public static ChordSettings instance(){
-		if( instance == null ){
-			instance = new ChordSettings();
-		}
-		return instance;
-	}
-	
-	public float getBassGrade() {
-		return this.bassGrade;
-	}
-	
-	public void setBassGrade(float bassGrade) {
-		this.bassGrade = bassGrade;
-	}
-	
-	public int getChordsToDisplay() {
-		return this.chordsToDisplay;
-	}
-	
-	public void setChordsToDisplay(int chordsToDisplay) {
-		this.chordsToDisplay = chordsToDisplay;
-	}
-	
-	public boolean isEmptyStringChords() {
-		return this.emptyStringChords;
-	}
-	
-	public void setEmptyStringChords(boolean emptyStringChords) {
-		this.emptyStringChords = emptyStringChords;
-	}
-	
-	public float getFingeringGrade() {
-		return this.fingeringGrade;
-	}
-	
-	public void setFingeringGrade(float fingeringGrade) {
-		this.fingeringGrade = fingeringGrade;
-	}
-	
-	public float getGoodChordSemanticsGrade() {
-		return this.goodChordSemanticsGrade;
-	}
-	
-	public void setGoodChordSemanticsGrade(float goodChordSemanticsGrade) {
-		this.goodChordSemanticsGrade = goodChordSemanticsGrade;
-	}
-	
-	public float getManyStringsGrade() {
-		return this.manyStringsGrade;
-	}
-	
-	public void setManyStringsGrade(float manyStringsGrade) {
-		this.manyStringsGrade = manyStringsGrade;
-	}
-	
-	public float getRequiredBasicsGrade() {
-		return this.requiredBasicsGrade;
-	}
-	
-	public void setRequiredBasicsGrade(float requiredBasicsGrade) {
-		this.requiredBasicsGrade = requiredBasicsGrade;
-	}
-	
-	public float getSubsequentGrade() {
-		return this.subsequentGrade;
-	}
-	
-	public void setSubsequentGrade(float subsequentGrade) {
-		this.subsequentGrade = subsequentGrade;
-	}
-	
-	public int getIncompleteChords() {
-		return this.howManyIncompleteChords;
-	}
-	
-	public void setIncompleteChords(int incomplete) {
-		this.howManyIncompleteChords = incomplete;
-	}
-	
-	public int getFindChordsMin() {
-		return this.findChordsMin;
-	}
-	
-	public void setFindChordsMin(int min) {
-		this.findChordsMin = min;
-	}
-	
-	public int getFindChordsMax() {
-		return this.findChordsMax;
-	}
-	
-	public void setFindChordsMax(int max) {
-		this.findChordsMax = max;
-	}
-	
-	public int getChordTypeIndex() {
-		return this.chordTypeIndex;
-	}
-	
-	public void setChordTypeIndex(int index) {
-		switch (index) {
-			case 0 : // normal
-					this.bassGrade = 200.0f;
-					this.fingeringGrade = 150.0f;
-					this.subsequentGrade = 200.0f;
-					this.requiredBasicsGrade = 150.0f;
-					this.manyStringsGrade = 100.0f;
-					this.goodChordSemanticsGrade = 200.0f;
-				    break;
-			case 1 : // inversions
-					this.bassGrade = -100.0f;
-					this.fingeringGrade = 150.0f;
-					this.subsequentGrade = 200.0f;
-					this.requiredBasicsGrade = 150.0f;
-					this.manyStringsGrade = 50.0f;
-					this.goodChordSemanticsGrade = 200.0f;
-					break;
-			case 2 : // close-voiced
-					this.bassGrade = 50.0f;
-					this.fingeringGrade = 200.0f;
-					this.subsequentGrade = 350.0f;
-					this.requiredBasicsGrade = 150.0f;
-					this.manyStringsGrade = -100.0f;
-					this.goodChordSemanticsGrade = 200.0f;
-					break;
-			case 3 : // open-voiced
-					this.bassGrade = 100.0f;
-					this.fingeringGrade = 100.0f;
-					this.subsequentGrade = -80.0f;
-					this.requiredBasicsGrade = 100.0f;
-					this.manyStringsGrade = -80.0f;
-					this.goodChordSemanticsGrade = 200.0f;
-					break;
-		}
-		this.chordTypeIndex = index;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSettingsDialog.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSettingsDialog.java
deleted file mode 100644
index 5ccdfeb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/ChordSettingsDialog.java
+++ /dev/null
@@ -1,195 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-/**
- * Dialog for customizing chord criteria parameters
- * 
- * @author Nikola Kolarovic
- *
- */
-public class ChordSettingsDialog {
-	
-	private boolean updated;
-	private Shell dialog;
-	private Button emptyStringChords = null;
-	private Spinner chordsToDisplay = null;
-	private Combo typeCombo = null;
-	private Spinner minFret = null;
-	private Spinner maxFret = null;
-	
-	public ChordSettingsDialog() {
-		super();
-	}
-	
-	public boolean open(Shell parent){
-		this.updated = false;
-		
-		this.dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setText(TuxGuitar.getProperty("settings"));
-		this.init();
-		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return this.updated;
-	}
-	
-	protected void init() {
-		Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout());
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setText(TuxGuitar.getProperty("chord.settings.tip"));
-		
-		Composite composite = new Composite(group,SWT.NONE);
-		composite.setLayout(new GridLayout(2,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		initTypeCombo(composite);
-		initChordsToDisplay(composite);
-		initEmptyStringChords(composite);
-		initFretSearch(composite);
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(this.dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dispose(true);
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dispose(false);
-			}
-		});
-		
-		this.dialog.setDefaultButton( buttonOK );
-	}
-	
-	private GridData getGridData(int minimumWidth, int minimumHeight){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = minimumWidth;
-		data.minimumHeight = minimumHeight;
-		return data;
-	}
-	
-	private GridData getGridData(){
-		return getGridData(125,0);
-	}
-	
-	private GridData getButtonData(){
-		return getGridData(80,25);
-	}
-	
-	private Spinner makeSpinner(Composite parent,String label,int value, int min, int max){
-		this.newLabel(parent,label);
-		Spinner spinner = new Spinner(parent,SWT.BORDER);
-		spinner.setMinimum(min);
-		spinner.setMaximum(max);
-		spinner.setSelection(value);
-		spinner.setLayoutData(getGridData());
-		return spinner;
-	}
-	
-	private Label newLabel(Composite parent,String text){
-		Label label = new Label(parent,SWT.HORIZONTAL);
-		label.setText(text);
-		return label;
-	}
-	
-	private void initTypeCombo(Composite parent) {
-		this.newLabel(parent, TuxGuitar.getProperty("chord.settings.type"));
-		this.typeCombo = new Combo(parent,SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.typeCombo.setLayoutData(getGridData());
-		this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.most-common"));
-		this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.inversions"));
-		this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.close-voiced"));
-		this.typeCombo.add(TuxGuitar.getProperty("chord.settings.type.open-voiced"));
-		this.typeCombo.select(ChordSettings.instance().getChordTypeIndex());
-	}
-	
-	private void initChordsToDisplay(Composite parent) {
-		this.chordsToDisplay = makeSpinner(parent,TuxGuitar.getProperty("chord.settings.chords-to-display"),ChordSettings.instance().getChordsToDisplay(),1,100);
-	}
-	
-	private void initEmptyStringChords(Composite parent) {
-		this.emptyStringChords = new Button(parent,SWT.CHECK);
-		this.emptyStringChords.setSelection(ChordSettings.instance().isEmptyStringChords());
-		this.emptyStringChords.setText(TuxGuitar.getProperty("chord.settings.open-chords"));
-		this.emptyStringChords.setSize(100,20);
-		this.emptyStringChords.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,2,1));
-	}
-	
-	private void initFretSearch(Composite parent) {
-		Group group = new Group(parent,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout(4,false));
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true,2,1));
-		group.setText(TuxGuitar.getProperty("chord.settings.search-frets"));
-		this.minFret = makeSpinner(group,TuxGuitar.getProperty("chord.settings.minimum-fret"),ChordSettings.instance().getFindChordsMin(),0,15);
-		this.maxFret = makeSpinner(group,TuxGuitar.getProperty("chord.settings.maximum-fret"),ChordSettings.instance().getFindChordsMax(),2,25);
-		this.minFret.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				checkMinimumFretValue();
-			}
-		});
-		this.maxFret.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				checkMaximumFretValue();
-			}
-		});
-	}
-	
-	protected void checkMinimumFretValue(){
-		int maxSelection = this.maxFret.getSelection();
-		int minSelection = this.minFret.getSelection();
-		if(maxSelection < minSelection){
-			this.maxFret.setSelection(minSelection);
-		}
-	}
-	
-	protected void checkMaximumFretValue(){
-		int maxSelection = this.maxFret.getSelection();
-		int minSelection = this.minFret.getSelection();
-		if(maxSelection < minSelection){
-			this.maxFret.setSelection(minSelection);
-		}
-	}
-	
-	private void update(){
-		ChordSettings.instance().setChordTypeIndex(this.typeCombo.getSelectionIndex());
-		ChordSettings.instance().setEmptyStringChords(this.emptyStringChords.getSelection());
-		ChordSettings.instance().setChordsToDisplay(this.chordsToDisplay.getSelection() );
-		ChordSettings.instance().setFindChordsMax(this.maxFret.getSelection());
-		ChordSettings.instance().setFindChordsMin(this.minFret.getSelection());
-	}
-	
-	protected void dispose(boolean updated){
-		this.updated = updated;
-		if(this.updated){
-			this.update();
-		}
-		this.dialog.dispose();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/CustomChordManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/CustomChordManager.java
deleted file mode 100644
index a596365..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/CustomChordManager.java
+++ /dev/null
@@ -1,76 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord;
-
-import java.io.File;
-import java.util.List;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.chord.xml.ChordXMLReader;
-import org.herac.tuxguitar.gui.editors.chord.xml.ChordXMLWriter;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-import org.herac.tuxguitar.song.models.TGChord;
-
-public class CustomChordManager {
-	
-	private long lastEdit;
-	private List chords;
-	
-	public CustomChordManager() {
-		this.chords = ChordXMLReader.getChords(getUserFileName());
-		this.setLastEdit();
-	}
-	
-	public int countChords() {
-		return this.chords.size();
-	}
-	
-	public TGChord getChord(int index) {
-		if (index >= 0 && index < countChords()) {
-			return ((TGChord) this.chords.get(index)).clone(TuxGuitar.instance().getSongManager().getFactory());
-		}
-		return null;
-	}
-	
-	public void addChord(TGChord chord) {
-		this.chords.add(chord);
-		this.setLastEdit();
-	}
-	
-	public void removeChord(int index) {
-		if (index >= 0 && index < countChords()) {
-			this.chords.remove(index);
-			this.setLastEdit();
-		}
-	}
-	
-	public void renameChord(int index, String name) {
-		if (index >= 0 && index < countChords()) {
-			((TGChord) this.chords.get(index)).setName(name);
-			this.setLastEdit();
-		}
-	}
-	
-	public boolean existOtherEqualCustomChord(String name, int index) {
-		for (int i = 0; i < countChords(); i++) {
-			TGChord chord = getChord(i);
-			if (chord.getName().equals(name) && index != i) {
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	public void write() {
-		ChordXMLWriter.setChords(this.chords, getUserFileName());
-	}
-	
-	private static String getUserFileName() {
-		return (TGFileUtils.PATH_USER_CONFIG + File.separator + "customchords.xml");
-	}
-	
-	private void setLastEdit() {
-		this.lastEdit = System.currentTimeMillis();
-	}
-	
-	public long getLastEdit() {
-		return this.lastEdit;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXML.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXML.java
deleted file mode 100644
index 9ee9ff8..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXML.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord.xml;
-
-public class ChordXML {
-	
-	public static final String CHORD_LIST_TAG = "chords";
-	public static final String CHORD_TAG = "chord";
-	public static final String CHORD_NAME_ATTRIBUTE = "name";
-	public static final String CHORD_STRINGS_ATTRIBUTE = "strings";
-	public static final String CHORD_FIRST_FRET_ATTRIBUTE = "first-fret";
-	public static final String STRING_TAG = "string";
-	public static final String STRING_NUMBER_ATTRIBUTE = "number";
-	public static final String STRING_FRET_ATTRIBUTE = "fret";
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXMLReader.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXMLReader.java
deleted file mode 100644
index e355f4c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXMLReader.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord.xml;
-
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-public class ChordXMLReader {
-	
-	public static List getChords(String fileName) {
-		List chords = new ArrayList();
-		try{
-			File file = new File(fileName);
-			if (file.exists()){
-				Document doc = getDocument(file);
-				loadChords(doc.getFirstChild(),chords);
-			}
-		}catch(Exception e){
-			e.printStackTrace();
-		}
-		return chords;
-	}
-	
-	private static Document getDocument(File file) {
-		Document document = null;
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		try {
-			DocumentBuilder builder = factory.newDocumentBuilder();
-			document = builder.parse(file);
-		} catch (SAXException sxe) {
-			sxe.printStackTrace();
-		} catch (ParserConfigurationException pce) {
-			pce.printStackTrace();
-		} catch (IOException ioe) {
-			ioe.printStackTrace();
-		}
-		return document;
-	}
-	
-	/**
-	 * Read shortcuts from xml file
-	 * 
-	 * @param shortcutsNode
-	 * @return
-	 */
-	private static void loadChords(Node chordsNode,List chords){
-		try{
-			NodeList chordList = chordsNode.getChildNodes();
-			for (int i = 0; i < chordList.getLength(); i++) {
-				Node chordItem = chordList.item(i);
-				if (chordItem.getNodeName().equals(ChordXML.CHORD_TAG)) {
-					NamedNodeMap chordAttributes = chordItem.getAttributes();
-					
-					String name = chordAttributes.getNamedItem(ChordXML.CHORD_NAME_ATTRIBUTE).getNodeValue();
-					String strings = chordAttributes.getNamedItem(ChordXML.CHORD_STRINGS_ATTRIBUTE).getNodeValue();
-					String firstFret = chordAttributes.getNamedItem(ChordXML.CHORD_FIRST_FRET_ATTRIBUTE).getNodeValue();
-					
-					TGChord chord = TuxGuitar.instance().getSongManager().getFactory().newChord(Integer.parseInt(strings));
-					chord.setName(name);
-					chord.setFirstFret(Integer.parseInt(firstFret));
-					
-					NodeList stringList = chordItem.getChildNodes();
-					for (int j = 0; j < stringList.getLength(); j++) {
-						Node stringItem = stringList.item(j);
-						if (stringItem.getNodeName().equals(ChordXML.STRING_TAG)) {
-							NamedNodeMap stringAttributes = stringItem.getAttributes();
-							
-							String number = stringAttributes.getNamedItem(ChordXML.STRING_NUMBER_ATTRIBUTE).getNodeValue();
-							String fret = stringAttributes.getNamedItem(ChordXML.STRING_FRET_ATTRIBUTE).getNodeValue();
-							
-							chord.addFretValue(Integer.parseInt(number),Integer.parseInt(fret));
-						}
-					}
-					chords.add(chord);
-				}
-			}
-		}catch(Exception e){
-			chords.clear();
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXMLWriter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXMLWriter.java
deleted file mode 100644
index d3f8839..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/chord/xml/ChordXMLWriter.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package org.herac.tuxguitar.gui.editors.chord.xml;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.herac.tuxguitar.song.models.TGChord;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-public class ChordXMLWriter {
-	
-	public static void setChords(List chords,String fileName) {
-		File file = new File(fileName);
-		
-		Document doc = createDocument();
-		setChords(chords,doc);
-		saveDocument(doc,file);
-	}
-	
-	public static Document createDocument() {
-		Document document = null;
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		try {
-			DocumentBuilder builder = factory.newDocumentBuilder();
-			document = builder.newDocument();
-		}catch (ParserConfigurationException pce) {
-			pce.printStackTrace();
-		}
-		return document;
-	}
-	
-	public static void saveDocument(Document document,File file) {
-		try {
-			FileOutputStream fs = new FileOutputStream(file);
-			
-			// Write it out again
-			TransformerFactory xformFactory = TransformerFactory.newInstance();
-			Transformer idTransform = xformFactory.newTransformer();
-			Source input = new DOMSource(document);
-			Result output = new StreamResult(fs);
-			idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
-			idTransform.transform(input, output);
-		} catch (FactoryConfigurationError e) {
-			e.printStackTrace();
-		} catch (TransformerConfigurationException e) {
-			e.printStackTrace();
-		} catch (TransformerException e) {
-			e.printStackTrace();
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * Write chords to xml file
-	 */
-	private static void setChords(List chords,Document document){
-		//chords tag
-		Node chordsNode = document.createElement(ChordXML.CHORD_LIST_TAG);
-		
-		Iterator it = chords.iterator();
-		while(it.hasNext()){
-			TGChord chord = (TGChord)it.next();
-			
-			//chord tag
-			Node chordNode = document.createElement(ChordXML.CHORD_TAG);
-			chordsNode.appendChild(chordNode);
-			
-			//name attribute
-			Attr nameAttr = document.createAttribute(ChordXML.CHORD_NAME_ATTRIBUTE);
-			nameAttr.setNodeValue( chord.getName());
-			chordNode.getAttributes().setNamedItem(nameAttr);
-			
-			//strings attribute
-			Attr stringsAttr = document.createAttribute(ChordXML.CHORD_STRINGS_ATTRIBUTE);
-			stringsAttr.setNodeValue(Integer.toString(chord.getStrings().length));
-			chordNode.getAttributes().setNamedItem(stringsAttr);
-			
-			//first fret attribute
-			Attr firstFretAttr = document.createAttribute(ChordXML.CHORD_FIRST_FRET_ATTRIBUTE);
-			firstFretAttr.setNodeValue(Integer.toString(chord.getFirstFret()));
-			chordNode.getAttributes().setNamedItem(firstFretAttr);
-			
-			for(int i = 0;i < chord.getStrings().length; i++){
-				//string tag
-				Node stringNode = document.createElement(ChordXML.STRING_TAG);
-				chordNode.appendChild(stringNode);
-				
-				//number attribute
-				Attr numberAttr = document.createAttribute(ChordXML.STRING_NUMBER_ATTRIBUTE);
-				numberAttr.setNodeValue(Integer.toString(i));
-				stringNode.getAttributes().setNamedItem(numberAttr);
-				
-				//fret attribute
-				Attr fretAttr = document.createAttribute(ChordXML.STRING_FRET_ATTRIBUTE);
-				fretAttr.setNodeValue(Integer.toString(chord.getFretValue(i)));
-				stringNode.getAttributes().setNamedItem(fretAttr);
-			}
-		}
-		
-		document.appendChild(chordsNode);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/BendEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/BendEditor.java
deleted file mode 100644
index 5f82025..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/BendEditor.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- * Created on 28-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.effects;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectBend;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class BendEditor{
-	public static final int X_SPACING = 30;
-	public static final int Y_SPACING = 15;
-	private static final int X_LENGTH = TGEffectBend.MAX_POSITION_LENGTH + 1;
-	private static final int Y_LENGTH = TGEffectBend.MAX_VALUE_LENGTH + 1;
-	
-	private int[] x;
-	private int[] y;
-	private int width;
-	private int height;
-	private List points;
-	protected Composite editor;
-	protected DefaultBend[] defaultBends;
-	protected TGEffectBend result;
-	
-	public BendEditor() {
-		this.init();
-	}
-	
-	private void init(){
-		this.x = new int[X_LENGTH];
-		this.y = new int[Y_LENGTH];
-		this.width = ((X_SPACING * X_LENGTH) - X_SPACING);
-		this.height = ((Y_SPACING * Y_LENGTH) - Y_SPACING);
-		this.points = new ArrayList();
-		
-		for(int i = 0;i < this.x.length;i++){
-			this.x[i] = ((i + 1) * X_SPACING);
-		}
-		for(int i = 0;i < this.y.length;i++){
-			this.y[i] = ((i + 1) * Y_SPACING);
-		}
-	}
-	
-	public TGEffectBend show(Shell shell,final TGNote note){
-		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("bend.editor"));
-		
-		//----------------------------------------------------------------------
-		Composite composite = new Composite(dialog,SWT.NONE);
-		composite.setLayout(new GridLayout(3,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Composite leftComposite = new Composite(composite,SWT.NONE);
-		leftComposite.setLayout(new GridLayout());
-		leftComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Composite rightComposite = new Composite(composite,SWT.NONE);
-		rightComposite.setLayout(new GridLayout());
-		rightComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		//-------------EDITOR---------------------------------------------------
-		this.editor = new Composite(leftComposite, SWT.BORDER | SWT.DOUBLE_BUFFERED);
-		this.editor.setBackground(this.editor.getDisplay().getSystemColor(SWT.COLOR_WHITE));
-		this.editor.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.FILL,true,true) , getWidth() + (X_SPACING * 2),getHeight() + (Y_SPACING * 2))  );
-		this.editor.addPaintListener(new PaintListener() {
-			public void paintControl(PaintEvent e) {
-				TGPainter painter = new TGPainter(e.gc);
-				paintEditor(painter);
-			}
-		});
-		this.editor.addMouseListener(new MouseAdapter() {
-			public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
-				checkPoint(e.x,e.y);
-				BendEditor.this.editor.redraw();
-			}
-		});
-		
-		//-------------DEFAULT BEND LIST---------------------------------------------------
-		this.resetDefaultBends();
-		
-		final org.eclipse.swt.widgets.List defaultBendList = new org.eclipse.swt.widgets.List(rightComposite,SWT.BORDER | SWT.SINGLE);
-		for(int i = 0;i < BendEditor.this.defaultBends.length;i++){
-			defaultBendList.add(this.defaultBends[i].getName());
-		}
-		defaultBendList.select(0);
-		defaultBendList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		defaultBendList.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				int index = defaultBendList.getSelectionIndex();
-				if(index >= 0 && index < BendEditor.this.defaultBends.length){
-					setBend(BendEditor.this.defaultBends[defaultBendList.getSelectionIndex()].getBend());
-					BendEditor.this.editor.redraw();
-				}
-			}
-		});
-		
-		//------------------BUTTONS--------------------------
-		Button buttonClean = new Button(rightComposite, SWT.PUSH);
-		buttonClean.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,true), 80,25));
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				BendEditor.this.result = null;
-				dialog.dispose();
-			}
-		});
-		Button buttonOK = new Button(rightComposite, SWT.PUSH);
-		buttonOK.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25));
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				BendEditor.this.result = getBend();
-				dialog.dispose();
-			}
-		});
-		Button buttonCancel = new Button(rightComposite, SWT.PUSH);
-		buttonCancel.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25));
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				BendEditor.this.result = note.getEffect().getBend();
-				dialog.dispose();
-			}
-		});
-		
-		if(note.getEffect().isBend()){
-			setBend(note.getEffect().getBend());
-		}else{
-			setBend(this.defaultBends[0].getBend());
-		}
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return this.result;
-	}
-	
-	private GridData resizeData(GridData data,int minimumWidth,int minimumHeight){
-		data.minimumWidth = minimumWidth;
-		data.minimumHeight = minimumHeight;
-		return data;
-	}
-	
-	protected void paintEditor(TGPainter painter){
-		for(int i = 0;i < this.x.length;i++){
-			this.setStyleX(painter,i);
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.moveTo(this.x[i],Y_SPACING);
-			painter.lineTo(this.x[i],Y_SPACING + this.height);
-			painter.closePath();
-		}
-		for(int i = 0;i < this.y.length;i++){
-			this.setStyleY(painter,i);
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.moveTo(X_SPACING,this.y[i]);
-			painter.lineTo(X_SPACING + this.width,this.y[i]);
-			painter.closePath();
-		}
-		
-		Iterator it = null;
-		Point prevPoint = null;
-		painter.setLineStyle(SWT.LINE_SOLID);
-		painter.setLineWidth(2);
-		painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY));
-		
-		it = this.points.iterator();
-		while(it.hasNext()){
-			Point point = (Point)it.next();
-			if(prevPoint != null){
-				painter.initPath();
-				painter.moveTo(prevPoint.x,prevPoint.y);
-				painter.lineTo(point.x,point.y);
-				painter.closePath();
-			}
-			prevPoint = point;
-		}
-		
-		painter.setLineWidth(5);
-		painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		
-		it = this.points.iterator();
-		while(it.hasNext()){
-			Point point = (Point)it.next();
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.addRectangle(point.x - 2,point.y - 2,5,5);
-			painter.closePath();
-		}
-		painter.setLineWidth(1);
-	}
-	
-	private void setStyleX(TGPainter painter,int i){
-		painter.setLineStyle(SWT.LINE_SOLID);
-		if(i == 0 || i == (X_LENGTH - 1)){
-			painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		}else{
-			painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLUE));
-			if((i % 3) > 0){
-				painter.setLineStyle(SWT.LINE_DOT);
-			}
-		}
-	}
-	
-	private void setStyleY(TGPainter painter,int i){
-		painter.setLineStyle(SWT.LINE_SOLID);
-		if(i == 0 || i == (Y_LENGTH - 1)){
-			painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		}else{
-			painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_RED));
-			
-			if((i % 2) > 0){
-				painter.setLineStyle(SWT.LINE_DOT);
-				painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY));
-			}else if((i % 4) > 0){
-				painter.setLineStyle(SWT.LINE_DOT);
-			}
-		}
-	}
-	
-	protected void checkPoint(int x,int y){
-		Point point = new Point(this.getX(x),this.getY(y));
-		if(!this.removePoint(point)){
-			this.removePointsAtXLine(point.x);
-			this.addPoint(point);
-			this.orderPoints();
-		}
-	}
-	
-	protected boolean removePoint(Point point){
-		Iterator it = this.points.iterator();
-		while(it.hasNext()){
-			Point currPoint = (Point)it.next();
-			if(currPoint.x == point.x && currPoint.y == point.y){
-				this.points.remove(point);
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	protected void orderPoints(){
-		for(int i = 0;i < this.points.size();i++){
-			Point minPoint = null;
-			for(int noteIdx = i;noteIdx < this.points.size();noteIdx++){
-				Point point = (Point)this.points.get(noteIdx);
-				if(minPoint == null || point.x < minPoint.x){
-					minPoint = point;
-				}
-			}
-			this.points.remove(minPoint);
-			this.points.add(i,minPoint);
-		}
-	}
-	
-	protected void removePointsAtXLine(int x){
-		Iterator it = this.points.iterator();
-		while(it.hasNext()){
-			Point point = (Point)it.next();
-			if(point.x == x){
-				this.points.remove(point);
-				break;
-			}
-		}
-	}
-	
-	protected void addPoint(Point point){
-		this.points.add(point);
-	}
-	
-	protected int getX(int pointX){
-		int currPointX = -1;
-		for(int i = 0;i < this.x.length;i++){
-			if(currPointX < 0){
-				currPointX = this.x[i];
-			}else{
-				int distanceX = Math.abs(pointX - currPointX);
-				int currDistanceX = Math.abs(pointX - this.x[i]);
-				if(currDistanceX < distanceX){
-					currPointX = this.x[i];
-				}
-			}
-		}
-		return currPointX;
-	}
-	
-	protected int getY(int pointY){
-		int currPointY = -1;
-		for(int i = 0;i < this.y.length;i++){
-			if(currPointY < 0){
-				currPointY = this.y[i];
-			}else{
-				int distanceX = Math.abs(pointY - currPointY);
-				int currDistanceX = Math.abs(pointY - this.y[i]);
-				if(currDistanceX < distanceX){
-					currPointY = this.y[i];
-				}
-			}
-		}
-		return currPointY;
-	}
-	
-	public boolean isEmpty(){
-		return this.points.isEmpty();
-	}
-	
-	public TGEffectBend getBend(){
-		if(this.points != null && !this.points.isEmpty()){
-			TGEffectBend bend = TuxGuitar.instance().getSongManager().getFactory().newEffectBend();//new BendEffect();
-			Iterator it = this.points.iterator();
-			while(it.hasNext()){
-				Point point = (Point)it.next();
-				addBendPoint(bend,point);
-			}
-			return bend;
-		}
-		return null;
-	}
-	
-	private void addBendPoint(TGEffectBend effect,Point point){
-		int position = 0;
-		int value = 0;
-		for(int i=0;i<this.x.length;i++){
-			if(point.x == this.x[i]){
-				position = i;
-			}
-		}
-		for(int i=0;i<this.y.length;i++){
-			if(point.y == this.y[i]){
-				value = (this.y.length - i) -1;
-			}
-		}
-		effect.addPoint(position,value);
-	}
-	
-	public void setBend(TGEffectBend effect){
-		this.points.clear();
-		Iterator it = effect.getPoints().iterator();
-		while(it.hasNext()){
-			TGEffectBend.BendPoint bendPoint = (TGEffectBend.BendPoint)it.next();
-			this.makePoint(bendPoint);
-		}
-	}
-	
-	private void makePoint(TGEffectBend.BendPoint bendPoint){
-		int indexX = bendPoint.getPosition();
-		int indexY = (this.y.length - bendPoint.getValue()) - 1;
-		if(indexX >= 0 && indexX < this.x.length && indexY >= 0 && indexY < this.y.length){
-			Point point = new Point(0,0);
-			point.x = this.x[indexX];
-			point.y = this.y[indexY];
-			this.points.add(point);
-		}
-	}
-	
-	public int getWidth(){
-		return this.width;
-	}
-	
-	public int getHeight(){
-		return this.height;
-	}
-	
-	private void resetDefaultBends(){
-		this.defaultBends = new DefaultBend[5];
-		
-		this.defaultBends[0] = new DefaultBend(TuxGuitar.getProperty("bend.bend"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
-		this.defaultBends[0].getBend().addPoint(0,0);
-		this.defaultBends[0].getBend().addPoint(6,(TGEffectBend.SEMITONE_LENGTH * 4));
-		this.defaultBends[0].getBend().addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4));
-		
-		this.defaultBends[1] = new DefaultBend(TuxGuitar.getProperty("bend.bend-release"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
-		this.defaultBends[1].getBend().addPoint(0,0);
-		this.defaultBends[1].getBend().addPoint(3,(TGEffectBend.SEMITONE_LENGTH * 4));
-		this.defaultBends[1].getBend().addPoint(6,(TGEffectBend.SEMITONE_LENGTH * 4));
-		this.defaultBends[1].getBend().addPoint(9,0);
-		this.defaultBends[1].getBend().addPoint(12,0);
-		
-		this.defaultBends[2] = new DefaultBend(TuxGuitar.getProperty("bend.bend-release-bend"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
-		this.defaultBends[2].getBend().addPoint(0,0);
-		this.defaultBends[2].getBend().addPoint(2,(TGEffectBend.SEMITONE_LENGTH * 4));
-		this.defaultBends[2].getBend().addPoint(4,(TGEffectBend.SEMITONE_LENGTH * 4));
-		this.defaultBends[2].getBend().addPoint(6,0);
-		this.defaultBends[2].getBend().addPoint(8,0);
-		this.defaultBends[2].getBend().addPoint(10,(TGEffectBend.SEMITONE_LENGTH * 4));
-		this.defaultBends[2].getBend().addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4));
-		
-		this.defaultBends[3] = new DefaultBend(TuxGuitar.getProperty("bend.prebend"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
-		this.defaultBends[3].getBend().addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4));
-		this.defaultBends[3].getBend().addPoint(12,(TGEffectBend.SEMITONE_LENGTH * 4));
-		
-		this.defaultBends[4] = new DefaultBend(TuxGuitar.getProperty("bend.prebend-release"),TuxGuitar.instance().getSongManager().getFactory().newEffectBend());
-		this.defaultBends[4].getBend().addPoint(0,(TGEffectBend.SEMITONE_LENGTH * 4));
-		this.defaultBends[4].getBend().addPoint(4,(TGEffectBend.SEMITONE_LENGTH * 4));
-		this.defaultBends[4].getBend().addPoint(8,0);
-		this.defaultBends[4].getBend().addPoint(12,0);
-	}
-	
-	private class DefaultBend{
-		private String name;
-		private TGEffectBend bend;
-		
-		public DefaultBend(String name,TGEffectBend bend){
-			this.name = name;
-			this.bend = bend;
-		}
-		
-		public TGEffectBend getBend() {
-			return this.bend;
-		}
-		
-		public String getName() {
-			return this.name;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/GraceEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/GraceEditor.java
deleted file mode 100644
index d99a7f7..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/GraceEditor.java
+++ /dev/null
@@ -1,319 +0,0 @@
-package org.herac.tuxguitar.gui.editors.effects;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGVelocities;
-import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
-
-public class GraceEditor extends SelectionAdapter{
-	
-	public static final int WIDTH = 400;
-	
-	public static final int HEIGHT = 0;
-	
-	private Spinner fretSpinner;
-	private Button deadButton;
-	private Button beforeBeatButton;
-	private Button onBeatButton;
-	private Button durationButton1;
-	private Button durationButton2;
-	private Button durationButton3;
-	private Button pppButton;
-	private Button ppButton;
-	private Button pButton;
-	private Button mpButton;
-	private Button mfButton;
-	private Button fButton;
-	private Button ffButton;
-	private Button fffButton;
-	private Button noneButton;
-	private Button slideButton;
-	private Button bendButton;
-	private Button hammerButton;
-	
-	protected TGEffectGrace result;
-	
-	public GraceEditor(){
-		super();
-	}
-	
-	private static final int LAYOUT_COLUMNS = 2;
-	
-	public TGEffectGrace show(final TGNote note){
-		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("effects.grace-editor"));
-		dialog.setMinimumSize(360,360);
-		
-		Composite composite = new Composite(dialog,SWT.NONE);
-		composite.setLayout(new GridLayout(LAYOUT_COLUMNS,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		int horizontalSpan = 2;
-		
-		//-----defaults-------------------------------------------------
-		boolean dead = false;
-		boolean onBeat = false;
-		int fret = note.getValue();
-		int duration = 1;
-		int dynamic = TGVelocities.DEFAULT;
-		int transition = TGEffectGrace.TRANSITION_NONE;
-		if(note.getEffect().isGrace()){
-			dead = note.getEffect().getGrace().isDead();
-			fret = note.getEffect().getGrace().getFret();
-			onBeat = note.getEffect().getGrace().isOnBeat();
-			duration = note.getEffect().getGrace().getDuration();
-			dynamic = note.getEffect().getGrace().getDynamic();
-			transition = note.getEffect().getGrace().getTransition();
-		}
-		//---------------------------------------------------
-		//------------------NOTE-----------------------------
-		//---------------------------------------------------
-		Group noteGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("note"));
-		noteGroup.setLayout(new GridLayout(2,false));
-		
-		Label fretLabel = new Label(noteGroup,SWT.NONE);
-		
-		fretLabel.setText(TuxGuitar.getProperty("fret") + ": ");
-		
-		this.fretSpinner = new Spinner(noteGroup,SWT.BORDER);
-		this.fretSpinner.setLayoutData(makeGridData(1));
-		this.fretSpinner.setSelection(fret);
-		
-		this.deadButton = new Button(noteGroup,SWT.CHECK);
-		this.deadButton.setText(TuxGuitar.getProperty("note.deadnote"));
-		this.deadButton.setLayoutData(makeGridData(2));
-		this.deadButton.setSelection(dead);
-		//---------------------------------------------------
-		//------------------POSITION-------------------------
-		//---------------------------------------------------
-		Group positionGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("position"));
-		positionGroup.setLayout(new GridLayout());
-		
-		this.beforeBeatButton = new Button(positionGroup,SWT.RADIO);
-		this.beforeBeatButton.setText(TuxGuitar.getProperty("effects.grace.before-beat"));
-		this.beforeBeatButton.setLayoutData(makeGridData(1));
-		this.beforeBeatButton.setSelection(!onBeat);
-		
-		this.onBeatButton = new Button(positionGroup,SWT.RADIO);
-		this.onBeatButton.setText(TuxGuitar.getProperty("effects.grace.on-beat"));
-		this.onBeatButton.setLayoutData(makeGridData(1));
-		this.onBeatButton.setSelection(onBeat);
-		//---------------------------------------------------
-		//------------------DURATION-------------------------
-		//---------------------------------------------------
-		Group durationGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("duration"));
-		durationGroup.setLayout(new GridLayout(3,false));
-		
-		this.durationButton1 = new Button(durationGroup,SWT.RADIO);
-		this.durationButton1.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
-		this.durationButton1.setLayoutData(makeGridData(1));
-		this.durationButton1.setSelection(duration == 1);
-		
-		this.durationButton2 = new Button(durationGroup,SWT.RADIO);
-		this.durationButton2.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
-		this.durationButton2.setLayoutData(makeGridData(1));
-		this.durationButton2.setSelection(duration == 2);
-		
-		this.durationButton3 = new Button(durationGroup,SWT.RADIO);
-		this.durationButton3.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
-		this.durationButton3.setLayoutData(makeGridData(1));
-		this.durationButton3.setSelection(duration == 3);
-		
-		horizontalSpan = 1;
-		//---------------------------------------------------
-		//------------------DYNAMIC--------------------------
-		//---------------------------------------------------
-		Group dynamicGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("dynamic"));
-		dynamicGroup.setLayout(new GridLayout(2,false));
-		
-		this.pppButton = new Button(dynamicGroup,SWT.RADIO);
-		this.pppButton.setImage(TuxGuitar.instance().getIconManager().getDynamicPPP());
-		this.pppButton.setLayoutData(makeGridData(1));
-		this.pppButton.setSelection(dynamic == TGVelocities.PIANO_PIANISSIMO);
-		
-		this.mfButton = new Button(dynamicGroup,SWT.RADIO);
-		this.mfButton.setImage(TuxGuitar.instance().getIconManager().getDynamicMF());
-		this.mfButton.setLayoutData(makeGridData(1));
-		this.mfButton.setSelection(dynamic == TGVelocities.MEZZO_FORTE);
-		
-		this.ppButton = new Button(dynamicGroup,SWT.RADIO);
-		this.ppButton.setImage(TuxGuitar.instance().getIconManager().getDynamicPP());
-		this.ppButton.setLayoutData(makeGridData(1));
-		this.ppButton.setSelection(dynamic == TGVelocities.PIANISSIMO);
-		
-		this.fButton = new Button(dynamicGroup,SWT.RADIO);
-		this.fButton.setImage(TuxGuitar.instance().getIconManager().getDynamicF());
-		this.fButton.setLayoutData(makeGridData(1));
-		this.fButton.setSelection(dynamic == TGVelocities.FORTE);
-		
-		this.pButton = new Button(dynamicGroup,SWT.RADIO);
-		this.pButton.setImage(TuxGuitar.instance().getIconManager().getDynamicP());
-		this.pButton.setLayoutData(makeGridData(1));
-		this.pButton.setSelection(dynamic == TGVelocities.PIANO);
-		
-		this.ffButton = new Button(dynamicGroup,SWT.RADIO);
-		this.ffButton.setImage(TuxGuitar.instance().getIconManager().getDynamicFF());
-		this.ffButton.setLayoutData(makeGridData(1));
-		this.ffButton.setSelection(dynamic == TGVelocities.FORTISSIMO);
-		
-		this.mpButton = new Button(dynamicGroup,SWT.RADIO);
-		this.mpButton.setImage(TuxGuitar.instance().getIconManager().getDynamicMP());
-		this.mpButton.setLayoutData(makeGridData(1));
-		this.mpButton.setSelection(dynamic == TGVelocities.MEZZO_PIANO);
-		
-		this.fffButton = new Button(dynamicGroup,SWT.RADIO);
-		this.fffButton.setImage(TuxGuitar.instance().getIconManager().getDynamicFFF());
-		this.fffButton.setLayoutData(makeGridData(1));
-		this.fffButton.setSelection(dynamic == TGVelocities.FORTE_FORTISSIMO);
-		//---------------------------------------------------
-		//------------------TRANSITION-----------------------
-		//---------------------------------------------------
-		Group transitionGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("effects.grace.transition"));
-		transitionGroup.setLayout(new GridLayout());
-		
-		this.noneButton = new Button(transitionGroup,SWT.RADIO);
-		this.noneButton.setText(TuxGuitar.getProperty("effects.grace.transition-none"));
-		this.noneButton.setLayoutData(makeGridData(1));
-		this.noneButton.setSelection(transition == TGEffectGrace.TRANSITION_NONE);
-		
-		this.bendButton = new Button(transitionGroup,SWT.RADIO);
-		this.bendButton.setText(TuxGuitar.getProperty("effects.grace.transition-bend"));
-		this.bendButton.setLayoutData(makeGridData(1));
-		this.bendButton.setSelection(transition == TGEffectGrace.TRANSITION_BEND);
-		
-		this.slideButton = new Button(transitionGroup,SWT.RADIO);
-		this.slideButton.setText(TuxGuitar.getProperty("effects.grace.transition-slide"));
-		this.slideButton.setLayoutData(makeGridData(1));
-		this.slideButton.setSelection(transition == TGEffectGrace.TRANSITION_SLIDE);
-		
-		this.hammerButton = new Button(transitionGroup,SWT.RADIO);
-		this.hammerButton.setText(TuxGuitar.getProperty("effects.grace.transition-hammer"));
-		this.hammerButton.setLayoutData(makeGridData(1));
-		this.hammerButton.setSelection(transition == TGEffectGrace.TRANSITION_HAMMER);
-		//---------------------------------------------------
-		//------------------BUTTONS--------------------------
-		//---------------------------------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				GraceEditor.this.result = getGrace();
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonClean = new Button(buttons, SWT.PUSH);
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.setLayoutData(getButtonData());
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				GraceEditor.this.result = null;
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				GraceEditor.this.result = note.getEffect().getGrace();
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		return this.result;
-	}
-	
-	private Group makeGroup(Composite parent,int horizontalSpan,String text){
-		Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
-		group.setLayoutData(makeGridData(horizontalSpan));
-		group.setText(text);
-		
-		return group;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private GridData makeGridData(int horizontalSpan){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.horizontalSpan = horizontalSpan;
-		return data;
-	}
-	
-	public TGEffectGrace getGrace(){
-		TGEffectGrace effect = TuxGuitar.instance().getSongManager().getFactory().newEffectGrace();
-		
-		effect.setFret(this.fretSpinner.getSelection());
-		effect.setDead(this.deadButton.getSelection());
-		effect.setOnBeat(this.onBeatButton.getSelection());
-		
-		//duration
-		if(this.durationButton1.getSelection()){
-			effect.setDuration(1);
-		}else if(this.durationButton2.getSelection()){
-			effect.setDuration(2);
-		}else if(this.durationButton3.getSelection()){
-			effect.setDuration(3);
-		}
-		//velocity
-		if(this.pppButton.getSelection()){
-			effect.setDynamic(TGVelocities.PIANO_PIANISSIMO);
-		}else if(this.ppButton.getSelection()){
-			effect.setDynamic(TGVelocities.PIANISSIMO);
-		}else if(this.pButton.getSelection()){
-			effect.setDynamic(TGVelocities.PIANO);
-		}else if(this.mpButton.getSelection()){
-			effect.setDynamic(TGVelocities.MEZZO_PIANO);
-		}else if(this.mfButton.getSelection()){
-			effect.setDynamic(TGVelocities.MEZZO_FORTE);
-		}else if(this.fButton.getSelection()){
-			effect.setDynamic(TGVelocities.FORTE);
-		}else if(this.ffButton.getSelection()){
-			effect.setDynamic(TGVelocities.FORTISSIMO);
-		}else if(this.fffButton.getSelection()){
-			effect.setDynamic(TGVelocities.FORTE_FORTISSIMO);
-		}
-		
-		//transition
-		if(this.noneButton.getSelection()){
-			effect.setTransition(TGEffectGrace.TRANSITION_NONE);
-		}else if(this.slideButton.getSelection()){
-			effect.setTransition(TGEffectGrace.TRANSITION_SLIDE);
-		}else if(this.bendButton.getSelection()){
-			effect.setTransition(TGEffectGrace.TRANSITION_BEND);
-		}else if(this.hammerButton.getSelection()){
-			effect.setTransition(TGEffectGrace.TRANSITION_HAMMER);
-		}
-		
-		return effect;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/HarmonicEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/HarmonicEditor.java
deleted file mode 100644
index 48ed712..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/HarmonicEditor.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package org.herac.tuxguitar.gui.editors.effects;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
-
-public class HarmonicEditor extends SelectionAdapter{
-	
-	public static final int WIDTH = 400;
-	public static final int HEIGHT = 0;
-	
-	protected Combo harmonicType;
-	protected Combo harmonicDataCombo;
-	protected TGEffectHarmonic result;
-	
-	public HarmonicEditor(){
-		super();
-	}
-	
-	protected Button[] typeButtons;
-	
-	public TGEffectHarmonic show(final TGNote note){
-		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("effects.harmonic-editor"));
-		
-		//---------------------------------------------------------------------
-		//------------HARMONIC-------------------------------------------------
-		//---------------------------------------------------------------------
-		Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout());
-		group.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.FILL,true,true),WIDTH));
-		group.setText(TuxGuitar.getProperty("effects.harmonic.type-of-harmonic"));
-		
-		this.typeButtons = new Button[5];
-		SelectionListener listener = new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				update(note,getSelectedType());
-			}
-		};
-		
-		// Natural
-		String label = "[" + TGEffectHarmonic.KEY_NATURAL + "] " + TuxGuitar.getProperty("effects.harmonic.natural");
-		initButton(group,listener,0,TGEffectHarmonic.TYPE_NATURAL,label);
-		
-		// Artificial
-		label = ("[" + TGEffectHarmonic.KEY_ARTIFICIAL + "] " + TuxGuitar.getProperty("effects.harmonic.artificial"));
-		initButton(group,listener,1,TGEffectHarmonic.TYPE_ARTIFICIAL,label);
-		
-		// Tapped
-		label = ("[" + TGEffectHarmonic.KEY_TAPPED + "] " + TuxGuitar.getProperty("effects.harmonic.tapped"));
-		initButton(group,listener,2,TGEffectHarmonic.TYPE_TAPPED,label);
-		
-		// Pinch
-		label = ("[" + TGEffectHarmonic.KEY_PINCH + "] " + TuxGuitar.getProperty("effects.harmonic.pinch"));
-		initButton(group,listener,3,TGEffectHarmonic.TYPE_PINCH,label);
-		
-		// Semi
-		label = ("[" + TGEffectHarmonic.KEY_SEMI + "] " + TuxGuitar.getProperty("effects.harmonic.semi"));
-		initButton(group,listener,4,TGEffectHarmonic.TYPE_SEMI,label);
-		
-		this.harmonicDataCombo = new Combo(group,SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.harmonicDataCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		//---------------------------------------------------
-		//------------------BUTTONS--------------------------
-		//---------------------------------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
-		
-		Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				HarmonicEditor.this.result = getHarmonic();
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonClean = new Button(buttons, SWT.PUSH);
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.setLayoutData(getButtonData());
-		buttonClean.setEnabled( note.getEffect().isHarmonic());
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				HarmonicEditor.this.result = null;
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				HarmonicEditor.this.result = note.getEffect().getHarmonic();
-				dialog.dispose();
-			}
-		});
-		
-		this.initDefaults(note);
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		return this.result;
-	}
-	
-	private GridData resizeData(GridData data,int minWidth){
-		data.minimumWidth = minWidth;
-		return data;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private void initButton(Composite parent,SelectionListener listener,int index, int type, String label){
-		this.typeButtons[index] = new Button(parent,SWT.RADIO);
-		this.typeButtons[index].setText(label);
-		this.typeButtons[index].setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.typeButtons[index].setData(new Integer(type));
-		this.typeButtons[index].addSelectionListener(listener);
-	}
-	
-	protected void initDefaults(TGNote note){
-		int type = TGEffectHarmonic.TYPE_NATURAL;
-		if(note.getEffect().isHarmonic()){
-			type = note.getEffect().getHarmonic().getType();
-		}
-		else{
-			boolean naturalValid = false;
-			for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){
-				if((note.getValue() % 12) == (TGEffectHarmonic.NATURAL_FREQUENCIES[i][0] % 12)  ){
-					naturalValid = true;
-					break;
-				}
-			}
-			if(!naturalValid){
-				this.typeButtons[0].setEnabled(false);
-				type = TGEffectHarmonic.TYPE_ARTIFICIAL;
-			}
-			
-		}
-		for(int i = 0; i < this.typeButtons.length; i ++){
-			int data = ((Integer)this.typeButtons[i].getData()).intValue();
-			this.typeButtons[i].setSelection((data == type));
-		}
-		update(note,type);
-	}
-	
-	protected int getSelectedType(){
-		for(int i = 0; i < this.typeButtons.length; i ++){
-			if(this.typeButtons[i].getSelection()){
-				return ((Integer)this.typeButtons[i].getData()).intValue();
-			}
-		}
-		return 0;
-	}
-	
-	protected void update(TGNote note,int type){
-		TGEffectHarmonic h = note.getEffect().getHarmonic();
-		this.harmonicDataCombo.removeAll();
-		this.harmonicDataCombo.setEnabled(type != TGEffectHarmonic.TYPE_NATURAL);
-		if(type != TGEffectHarmonic.TYPE_NATURAL){
-			String label = getTypeLabel(type);
-			for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){
-				this.harmonicDataCombo.add(label + "(" + Integer.toString(TGEffectHarmonic.NATURAL_FREQUENCIES[i][0]) + ")" );
-			}
-			this.harmonicDataCombo.select((h != null && h.getType() == type)?h.getData():0);
-		}
-	}
-	
-	private String getTypeLabel(int type){
-		if(type == TGEffectHarmonic.TYPE_NATURAL){
-			return TGEffectHarmonic.KEY_NATURAL;
-		}
-		if(type == TGEffectHarmonic.TYPE_ARTIFICIAL){
-			return TGEffectHarmonic.KEY_ARTIFICIAL;
-		}
-		if(type == TGEffectHarmonic.TYPE_TAPPED){
-			return TGEffectHarmonic.KEY_TAPPED;
-		}
-		if(type == TGEffectHarmonic.TYPE_PINCH){
-			return TGEffectHarmonic.KEY_PINCH;
-		}
-		if(type == TGEffectHarmonic.TYPE_SEMI){
-			return TGEffectHarmonic.KEY_SEMI;
-		}
-		return new String();
-	}
-	
-	public TGEffectHarmonic getHarmonic(){
-		int type = getSelectedType();
-		if(type > 0){
-			TGEffectHarmonic effect = TuxGuitar.instance().getSongManager().getFactory().newEffectHarmonic();
-			effect.setType(type);
-			effect.setData(this.harmonicDataCombo.getSelectionIndex());
-			return effect;
-		}
-		return null;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/StrokeEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/StrokeEditor.java
deleted file mode 100644
index d3c04f5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/StrokeEditor.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.herac.tuxguitar.gui.editors.effects;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGStroke;
-
-public class StrokeEditor extends SelectionAdapter{
-	
-	public static final int WIDTH = 400;
-	
-	public static final int HEIGHT = 0;
-	
-	public static final int STATUS_OK = 1;
-	public static final int STATUS_CLEAN = 2;
-	public static final int STATUS_CANCEL = 3;
-	
-	private Button duration4;
-	private Button duration8;
-	private Button duration16;
-	private Button duration32;
-	private Button duration64;
-	
-	private int status;
-	private int value;
-	
-	public StrokeEditor(){
-		super();
-	}
-	
-	public void open(final TGBeat beat){
-		this.status = STATUS_CANCEL;
-		
-		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("beat.stroke"));
-		
-		//-----defaults-------------------------------------------------
-		int duration = TGDuration.SIXTEENTH;
-		if( beat.getStroke().getDirection() != TGStroke.STROKE_NONE ){
-			duration = beat.getStroke().getValue();
-		}
-		
-		//---------------------------------------------------
-		//------------------DURATION-------------------------
-		//---------------------------------------------------
-		Group group = new Group(dialog, SWT.SHADOW_ETCHED_IN);
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setLayout(new GridLayout(5,false));
-		group.setText( TuxGuitar.getProperty("duration") );
-		
-		this.duration64 = new Button(group,SWT.RADIO);
-		this.duration64.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
-		this.duration64.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.duration64.setSelection(duration == TGDuration.SIXTY_FOURTH);
-		
-		this.duration32 = new Button(group,SWT.RADIO);
-		this.duration32.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
-		this.duration32.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.duration32.setSelection(duration == TGDuration.THIRTY_SECOND);
-		
-		this.duration16 = new Button(group,SWT.RADIO);
-		this.duration16.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
-		this.duration16.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.duration16.setSelection(duration == TGDuration.SIXTEENTH);
-		
-		this.duration8 = new Button(group,SWT.RADIO);
-		this.duration8.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH));
-		this.duration8.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.duration8.setSelection(duration == TGDuration.EIGHTH);
-		
-		this.duration4 = new Button(group,SWT.RADIO);
-		this.duration4.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.QUARTER));
-		this.duration4.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.duration4.setSelection(duration == TGDuration.QUARTER);
-		//---------------------------------------------------
-		//------------------BUTTONS--------------------------
-		//---------------------------------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				setStatus( STATUS_OK );
-				setValue( getSelection() );
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonClean = new Button(buttons, SWT.PUSH);
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.setLayoutData(getButtonData());
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				setStatus( STATUS_CLEAN );
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				setStatus( STATUS_CANCEL );
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected int getSelection(){
-		if( this.duration4.getSelection() ){
-			return TGDuration.QUARTER;
-		}
-		if( this.duration8.getSelection() ){
-			return TGDuration.EIGHTH;
-		}
-		if( this.duration16.getSelection() ){
-			return TGDuration.SIXTEENTH;
-		}
-		if( this.duration32.getSelection() ){
-			return TGDuration.THIRTY_SECOND;
-		}
-		if( this.duration64.getSelection() ){
-			return TGDuration.SIXTY_FOURTH;
-		}
-		return 0;
-	}
-	
-	public int getStatus() {
-		return this.status;
-	}
-
-	public void setStatus(int status) {
-		this.status = status;
-	}
-
-	public int getValue() {
-		return this.value;
-	}
-
-	public void setValue(int value) {
-		this.value = value;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TremoloBarEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TremoloBarEditor.java
deleted file mode 100644
index d574d0f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TremoloBarEditor.java
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * Created on 28-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.effects;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TremoloBarEditor{
-	public static final int X_SPACING = 30;
-	public static final int Y_SPACING = 10;
-	private static final int X_LENGTH = TGEffectTremoloBar.MAX_POSITION_LENGTH + 1;
-	private static final int Y_LENGTH = (TGEffectTremoloBar.MAX_VALUE_LENGTH * 2) + 1;
-	
-	private int[] x; 
-	private int[] y;
-	private int width;
-	private int height;
-	private List points;
-	protected Composite editor;
-	protected DefaultTremoloBar[] defaultTremoloBars;
-	protected TGEffectTremoloBar result;
-	
-	public TremoloBarEditor() {
-		this.init();
-	}
-	
-	private void init(){
-		this.x = new int[X_LENGTH];
-		this.y = new int[Y_LENGTH];
-		this.width = ((X_SPACING * X_LENGTH) - X_SPACING);
-		this.height = ((Y_SPACING * Y_LENGTH) - Y_SPACING);
-		this.points = new ArrayList();
-		
-		for(int i = 0;i < this.x.length;i++){
-			this.x[i] = ((i + 1) * X_SPACING);
-		}
-		for(int i = 0;i < this.y.length;i++){
-			this.y[i] = ((i + 1) * Y_SPACING);
-		}
-	}
-	
-	public TGEffectTremoloBar show(Shell shell,final TGNote note){
-		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("effects.tremolo-bar-editor"));
-		
-		//----------------------------------------------------------------------
-		Composite composite = new Composite(dialog,SWT.NONE);
-		composite.setLayout(new GridLayout(2,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Composite leftComposite = new Composite(composite,SWT.NONE);
-		leftComposite.setLayout(new GridLayout());
-		leftComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Composite rightComposite = new Composite(composite,SWT.NONE);
-		rightComposite.setLayout(new GridLayout());
-		rightComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		//-------------EDITOR---------------------------------------------------
-		this.editor = new Composite(leftComposite, SWT.BORDER | SWT.DOUBLE_BUFFERED);
-		this.editor.setBackground(this.editor.getDisplay().getSystemColor(SWT.COLOR_WHITE));
-		this.editor.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.FILL,true,true) , getWidth() + (X_SPACING * 2),getHeight() + (Y_SPACING * 2))  );
-		this.editor.addPaintListener(new PaintListener() {
-			public void paintControl(PaintEvent e) {
-				TGPainter painter = new TGPainter(e.gc);
-				paintEditor(painter);
-			}
-		});
-		this.editor.addMouseListener(new MouseAdapter() {
-			public void mouseUp(org.eclipse.swt.events.MouseEvent e) {
-				checkPoint(e.x,e.y);
-				TremoloBarEditor.this.editor.redraw();
-			}
-		});
-		
-		//-------------DEFAULT BEND LIST---------------------------------------------------
-		this.resetDefaultTremoloBars();
-		final org.eclipse.swt.widgets.List defaultTremoloBarList = new org.eclipse.swt.widgets.List(rightComposite,SWT.BORDER);
-		for(int i = 0;i < this.defaultTremoloBars.length;i++){
-			defaultTremoloBarList.add(this.defaultTremoloBars[i].getName());
-		}
-		defaultTremoloBarList.select(0);
-		defaultTremoloBarList.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		defaultTremoloBarList.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				int index = defaultTremoloBarList.getSelectionIndex();
-				if(index >= 0 && index < TremoloBarEditor.this.defaultTremoloBars.length){
-					setTremoloBar(TremoloBarEditor.this.defaultTremoloBars[index].getTremoloBar());
-					TremoloBarEditor.this.editor.redraw();
-				}
-			}
-		});
-		
-		//------------------BUTTONS--------------------------
-		Button buttonClean = new Button(rightComposite, SWT.PUSH);
-		buttonClean.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,true), 80,25));
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TremoloBarEditor.this.result = null;
-				dialog.dispose();
-			}
-		});
-		Button buttonOK = new Button(rightComposite, SWT.PUSH);
-		buttonOK.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25));
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TremoloBarEditor.this.result = getTremoloBar();
-				dialog.dispose();
-			}
-		});
-		Button buttonCancel = new Button(rightComposite, SWT.PUSH);
-		buttonCancel.setLayoutData(resizeData(new GridData(SWT.FILL,SWT.BOTTOM,true,false), 80,25));
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TremoloBarEditor.this.result = note.getEffect().getTremoloBar();
-				dialog.dispose();
-			}
-		});
-		
-		if(note.getEffect().isTremoloBar()){
-			setTremoloBar(note.getEffect().getTremoloBar());
-		}else{
-			setTremoloBar(this.defaultTremoloBars[0].getTremoloBar());
-		}
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return this.result;
-	}
-	
-	private GridData resizeData(GridData data,int minimumWidth,int minimumHeight){
-		data.minimumWidth = minimumWidth;
-		data.minimumHeight = minimumHeight;
-		return data;
-	}
-	
-	protected void paintEditor(TGPainter painter){
-		for(int i = 0;i < this.x.length;i++){
-			this.setStyleX(painter,i);
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.moveTo(this.x[i],Y_SPACING);
-			painter.lineTo(this.x[i],Y_SPACING + this.height);
-			painter.closePath();
-		}
-		for(int i = 0;i < this.y.length;i++){
-			this.setStyleY(painter,i);
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.moveTo(X_SPACING,this.y[i]);
-			painter.lineTo(X_SPACING + this.width,this.y[i]);
-			painter.closePath();
-		}
-		
-		Iterator it = null;
-		Point prevPoint = null;
-		painter.setLineStyle(SWT.LINE_SOLID);
-		painter.setLineWidth(2);
-		painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY));
-		it = this.points.iterator();
-		while(it.hasNext()){
-			Point point = (Point)it.next();
-			if(prevPoint != null){
-				painter.initPath();
-				painter.moveTo(prevPoint.x,prevPoint.y);
-				painter.lineTo(point.x,point.y);
-				painter.closePath();
-			}
-			prevPoint = point;
-		}
-		
-		painter.setLineWidth(5);
-		painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		it = this.points.iterator();
-		while(it.hasNext()){
-			Point point = (Point)it.next();
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.addRectangle(point.x - 2,point.y - 2,5,5);
-			painter.closePath();
-		}
-		painter.setLineWidth(1);
-	}
-	
-	private void setStyleX(TGPainter painter,int i){
-		painter.setLineStyle(SWT.LINE_SOLID);
-		if(i == 0 || i == (X_LENGTH - 1)){
-			painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		}else{
-			painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLUE));
-			if((i % 3) > 0){
-				painter.setLineStyle(SWT.LINE_DOT);
-			}
-		}
-	}
-	
-	private void setStyleY(TGPainter painter,int i){
-		painter.setLineStyle(SWT.LINE_SOLID);
-		if(i == 0 || i == (Y_LENGTH - 1)){
-			painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		}
-		else if(i == (TGEffectTremoloBar.MAX_VALUE_LENGTH)){
-			painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		}else{
-			painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_RED));
-			if((i % 2) > 0){
-				painter.setLineStyle(SWT.LINE_DOT);
-				painter.setForeground(this.editor.getDisplay().getSystemColor(SWT.COLOR_GRAY));
-			}
-		}
-	}
-	
-	protected void checkPoint(int x,int y){
-		Point point = new Point(this.getX(x),this.getY(y));
-		if(!this.removePoint(point)){
-			this.removePointsAtXLine(point.x);
-			this.addPoint(point);
-			this.orderPoints();
-		}
-	}
-	
-	private boolean removePoint(Point point){
-		Iterator it = this.points.iterator();
-		while(it.hasNext()){
-			Point currPoint = (Point)it.next();
-			if(currPoint.x == point.x && currPoint.y == point.y){
-				this.points.remove(point);
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	private void orderPoints(){
-		for(int i = 0;i < this.points.size();i++){
-			Point minPoint = null;
-			for(int noteIdx = i;noteIdx < this.points.size();noteIdx++){
-				Point point = (Point)this.points.get(noteIdx);
-				if(minPoint == null || point.x < minPoint.x){
-					minPoint = point;
-				}
-			}
-			this.points.remove(minPoint);
-			this.points.add(i,minPoint);
-		}
-	}
-	
-	private void removePointsAtXLine(int x){
-		Iterator it = this.points.iterator();
-		while(it.hasNext()){
-			Point point = (Point)it.next();
-			if(point.x == x){
-				this.points.remove(point);
-				break;
-			}
-		}
-	}
-	
-	private void addPoint(Point point){
-		this.points.add(point);
-	}
-	
-	private int getX(int pointX){
-		int currPointX = -1;
-		for(int i = 0;i < this.x.length;i++){
-			if(currPointX < 0){
-				currPointX = this.x[i];
-			}else{
-				int distanceX = Math.abs(pointX - currPointX);
-				int currDistanceX = Math.abs(pointX - this.x[i]);
-				if(currDistanceX < distanceX){
-					currPointX = this.x[i];
-				}
-			}
-		}
-		return currPointX;
-	}
-	
-	private int getY(int pointY){
-		int currPointY = -1;
-		for(int i = 0;i < this.y.length;i++){
-			if(currPointY < 0){
-				currPointY = this.y[i];
-			}else{
-				int distanceX = Math.abs(pointY - currPointY);
-				int currDistanceX = Math.abs(pointY - this.y[i]);
-				if(currDistanceX < distanceX){
-					currPointY = this.y[i];
-				}
-			}
-		}
-		return currPointY;
-	}
-	
-	public boolean isEmpty(){
-		return this.points.isEmpty();
-	}
-	
-	public TGEffectTremoloBar getTremoloBar(){
-		if(this.points != null && !this.points.isEmpty()){
-			TGEffectTremoloBar tremoloBar = TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar();//new TremoloBarEffect();
-			Iterator it = this.points.iterator();
-			while(it.hasNext()){
-				Point point = (Point)it.next();
-				addTremoloBarPoint(tremoloBar,point);
-			}
-			return tremoloBar;
-		}
-		return null;
-	}
-	
-	private void addTremoloBarPoint(TGEffectTremoloBar effect,Point point){
-		int position = 0;
-		int value = 0;
-		for(int i=0;i<this.x.length;i++){
-			if(point.x == this.x[i]){
-				position = i;
-			}
-		}
-		for(int i=0;i<this.y.length;i++){
-			if(point.y == this.y[i]){
-				value = (TGEffectTremoloBar.MAX_VALUE_LENGTH - i);
-			}
-		}
-		effect.addPoint(position,value);
-	}
-	
-	public void setTremoloBar(TGEffectTremoloBar effect){
-		this.points.clear();
-		Iterator it = effect.getPoints().iterator();
-		while(it.hasNext()){
-			TGEffectTremoloBar.TremoloBarPoint tremoloBarPoint = (TGEffectTremoloBar.TremoloBarPoint)it.next();
-			this.makePoint(tremoloBarPoint);
-		}
-	}
-	
-	private void makePoint(TGEffectTremoloBar.TremoloBarPoint tremoloBarPoint){
-		int indexX = tremoloBarPoint.getPosition();
-		int indexY = ( (this.y.length - TGEffectTremoloBar.MAX_VALUE_LENGTH) - tremoloBarPoint.getValue()) - 1;
-		if(indexX >= 0 && indexX < this.x.length && indexY >= 0 && indexY < this.y.length){
-			Point point = new Point(0,0);
-			point.x = this.x[indexX];
-			point.y = this.y[indexY];
-			this.points.add(point);
-		}
-	}
-	
-	public int getWidth(){
-		return this.width;
-	}
-	
-	public int getHeight(){
-		return this.height;
-	}
-	
-	private void resetDefaultTremoloBars(){
-		this.defaultTremoloBars = new DefaultTremoloBar[6];
-		
-		this.defaultTremoloBars[0] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.dip"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
-		this.defaultTremoloBars[0].getTremoloBar().addPoint(0,0);
-		this.defaultTremoloBars[0].getTremoloBar().addPoint(6,-2);
-		this.defaultTremoloBars[0].getTremoloBar().addPoint(12,0);
-		
-		this.defaultTremoloBars[1] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.dive"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
-		this.defaultTremoloBars[1].getTremoloBar().addPoint(0,0);
-		this.defaultTremoloBars[1].getTremoloBar().addPoint(9,-2);
-		this.defaultTremoloBars[1].getTremoloBar().addPoint(12,-2);
-		
-		this.defaultTremoloBars[2] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.release-up"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
-		this.defaultTremoloBars[2].getTremoloBar().addPoint(0,-2);
-		this.defaultTremoloBars[2].getTremoloBar().addPoint(9,-2);
-		this.defaultTremoloBars[2].getTremoloBar().addPoint(12,0);
-		
-		this.defaultTremoloBars[3] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.inverted-dip"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
-		this.defaultTremoloBars[3].getTremoloBar().addPoint(0,0);
-		this.defaultTremoloBars[3].getTremoloBar().addPoint(6,2);
-		this.defaultTremoloBars[3].getTremoloBar().addPoint(12,0);
-		
-		this.defaultTremoloBars[4] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.return"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
-		this.defaultTremoloBars[4].getTremoloBar().addPoint(0,0);
-		this.defaultTremoloBars[4].getTremoloBar().addPoint(9,2);
-		this.defaultTremoloBars[4].getTremoloBar().addPoint(12,2);
-		
-		this.defaultTremoloBars[5] = new DefaultTremoloBar(TuxGuitar.getProperty("effects.tremolo-bar.release-down"),TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloBar());
-		this.defaultTremoloBars[5].getTremoloBar().addPoint(0,2);
-		this.defaultTremoloBars[5].getTremoloBar().addPoint(9,2);
-		this.defaultTremoloBars[5].getTremoloBar().addPoint(12,0);
-	}
-	
-	private class DefaultTremoloBar{
-		private String name;
-		private TGEffectTremoloBar tremoloBar;
-		
-		public DefaultTremoloBar(String name,TGEffectTremoloBar tremoloBar){
-			this.name = name;
-			this.tremoloBar = tremoloBar;
-		}
-		
-		public TGEffectTremoloBar getTremoloBar() {
-			return this.tremoloBar;
-		}
-		
-		public String getName() {
-			return this.name;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TremoloPickingEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TremoloPickingEditor.java
deleted file mode 100644
index 6cb86d2..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TremoloPickingEditor.java
+++ /dev/null
@@ -1,149 +0,0 @@
-package org.herac.tuxguitar.gui.editors.effects;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
-
-public class TremoloPickingEditor extends SelectionAdapter{
-	
-	public static final int WIDTH = 400;
-	
-	public static final int HEIGHT = 0;
-	
-	private Button thirtySecondButton;
-	private Button sixTeenthButton;
-	private Button eighthButton;
-	
-	protected TGEffectTremoloPicking result;
-	
-	public TremoloPickingEditor(){
-		super();
-	}
-	
-	public TGEffectTremoloPicking show(final TGNote note){
-		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("effects.tremolo-picking-editor"));
-		
-		Composite composite = new Composite(dialog,SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		int horizontalSpan = 2;
-		
-		//-----defaults-------------------------------------------------
-		int duration = TGDuration.EIGHTH;
-		if(note.getEffect().isTremoloPicking()){
-			duration = note.getEffect().getTremoloPicking().getDuration().getValue();
-		}
-		
-		//---------------------------------------------------
-		//------------------DURATION-------------------------
-		//---------------------------------------------------
-		Group durationGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("duration"));
-		durationGroup.setLayout(new GridLayout(3,false));
-		
-		this.thirtySecondButton = new Button(durationGroup,SWT.RADIO);
-		this.thirtySecondButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
-		this.thirtySecondButton.setLayoutData(makeGridData(1));
-		this.thirtySecondButton.setSelection(duration == TGDuration.THIRTY_SECOND);
-		
-		this.sixTeenthButton = new Button(durationGroup,SWT.RADIO);
-		this.sixTeenthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
-		this.sixTeenthButton.setLayoutData(makeGridData(1));
-		this.sixTeenthButton.setSelection(duration == TGDuration.SIXTEENTH);
-		
-		this.eighthButton = new Button(durationGroup,SWT.RADIO);
-		this.eighthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH));
-		this.eighthButton.setLayoutData(makeGridData(1));
-		this.eighthButton.setSelection(duration == TGDuration.EIGHTH);
-		//---------------------------------------------------
-		//------------------BUTTONS--------------------------
-		//---------------------------------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TremoloPickingEditor.this.result = getTremoloPicking();
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonClean = new Button(buttons, SWT.PUSH);
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.setLayoutData(getButtonData());
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TremoloPickingEditor.this.result = null;
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TremoloPickingEditor.this.result = note.getEffect().getTremoloPicking();
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		return this.result;
-	}
-	
-	private Group makeGroup(Composite parent,int horizontalSpan,String text){
-		Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
-		group.setLayoutData(makeGridData(horizontalSpan));
-		group.setText(text);
-		
-		return group;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private GridData makeGridData(int horizontalSpan){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.horizontalSpan = horizontalSpan;
-		return data;
-	}
-	
-	public TGEffectTremoloPicking getTremoloPicking(){
-		TGEffectTremoloPicking effect = TuxGuitar.instance().getSongManager().getFactory().newEffectTremoloPicking();
-		if(this.thirtySecondButton.getSelection()){
-			effect.getDuration().setValue(TGDuration.THIRTY_SECOND);
-		}else if(this.sixTeenthButton.getSelection()){
-			effect.getDuration().setValue(TGDuration.SIXTEENTH);
-		}else if(this.eighthButton.getSelection()){
-			effect.getDuration().setValue(TGDuration.EIGHTH);
-		}else{
-			return null;
-		}
-		return effect;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TrillEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TrillEditor.java
deleted file mode 100644
index 87bd864..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/effects/TrillEditor.java
+++ /dev/null
@@ -1,170 +0,0 @@
-package org.herac.tuxguitar.gui.editors.effects;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
-
-public class TrillEditor extends SelectionAdapter{
-	
-	public static final int WIDTH = 400;
-	
-	public static final int HEIGHT = 0;
-	
-	private Spinner fretSpinner;
-	private Button sixtyFourthButton;
-	private Button thirtySecondButton;
-	private Button sixTeenthButton;
-	
-	protected TGEffectTrill result;
-	
-	public TrillEditor(){
-		super();
-	}
-	
-	public TGEffectTrill show(final TGNote note){
-		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("effects.trill-editor"));
-		
-		
-		Composite composite = new Composite(dialog,SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		int horizontalSpan = 2;
-		
-		//-----defaults-------------------------------------------------
-		int fret = note.getValue();
-		int duration = TGDuration.SIXTEENTH;
-		if(note.getEffect().isTrill()){
-			fret = note.getEffect().getTrill().getFret();
-			duration = note.getEffect().getTrill().getDuration().getValue();
-		}
-		//---------------------------------------------------
-		//------------------NOTE-----------------------------
-		//---------------------------------------------------
-		Group noteGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("note"));
-		noteGroup.setLayout(new GridLayout(2,false));
-		
-		Label fretLabel = new Label(noteGroup,SWT.NONE);
-		
-		fretLabel.setText(TuxGuitar.getProperty("fret") + ": ");
-		
-		this.fretSpinner = new Spinner(noteGroup,SWT.BORDER);
-		this.fretSpinner.setLayoutData(makeGridData(1));
-		this.fretSpinner.setSelection(fret);
-		
-		//---------------------------------------------------
-		//------------------DURATION-------------------------
-		//---------------------------------------------------
-		Group durationGroup = makeGroup(composite,horizontalSpan, TuxGuitar.getProperty("duration"));
-		durationGroup.setLayout(new GridLayout(3,false));
-		
-		this.sixtyFourthButton = new Button(durationGroup,SWT.RADIO);
-		this.sixtyFourthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
-		this.sixtyFourthButton.setLayoutData(makeGridData(1));
-		this.sixtyFourthButton.setSelection(duration == TGDuration.SIXTY_FOURTH);
-		
-		this.thirtySecondButton = new Button(durationGroup,SWT.RADIO);
-		this.thirtySecondButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
-		this.thirtySecondButton.setLayoutData(makeGridData(1));
-		this.thirtySecondButton.setSelection(duration == TGDuration.THIRTY_SECOND);
-		
-		this.sixTeenthButton = new Button(durationGroup,SWT.RADIO);
-		this.sixTeenthButton.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
-		this.sixTeenthButton.setLayoutData(makeGridData(1));
-		this.sixTeenthButton.setSelection(duration == TGDuration.SIXTEENTH);
-		
-		//---------------------------------------------------
-		//------------------BUTTONS--------------------------
-		//---------------------------------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.BOTTOM,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TrillEditor.this.result = getTrill();
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonClean = new Button(buttons, SWT.PUSH);
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.setLayoutData(getButtonData());
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TrillEditor.this.result = null;
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TrillEditor.this.result = note.getEffect().getTrill();
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		return this.result;
-	}
-	
-	private Group makeGroup(Composite parent,int horizontalSpan,String text){
-		Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
-		group.setLayoutData(makeGridData(horizontalSpan));
-		group.setText(text);
-		
-		return group;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private GridData makeGridData(int horizontalSpan){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.horizontalSpan = horizontalSpan;
-		return data;
-	}
-	
-	public TGEffectTrill getTrill(){
-		TGEffectTrill effect = TuxGuitar.instance().getSongManager().getFactory().newEffectTrill();
-		effect.setFret(this.fretSpinner.getSelection());
-		if(this.sixtyFourthButton.getSelection()){
-			effect.getDuration().setValue(TGDuration.SIXTY_FOURTH);
-		}else if(this.thirtySecondButton.getSelection()){
-			effect.getDuration().setValue(TGDuration.THIRTY_SECOND);
-		}else if(this.sixTeenthButton.getSelection()){
-			effect.getDuration().setValue(TGDuration.SIXTEENTH);
-		}else{
-			return null;
-		}
-		return effect;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/FretBoard.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/FretBoard.java
deleted file mode 100644
index 4223a8a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/FretBoard.java
+++ /dev/null
@@ -1,736 +0,0 @@
-/*
- * Created on 28-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.fretboard;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.actions.caret.GoLeftAction;
-import org.herac.tuxguitar.gui.actions.caret.GoRightAction;
-import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction;
-import org.herac.tuxguitar.gui.actions.tools.ScaleAction;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.gui.util.TGMusicKeyUtils;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class FretBoard extends Composite {
-	
-	public static final int MAX_FRETS = 24;
-	public static final int TOP_SPACING = 10;
-	public static final int BOTTOM_SPACING = 10;
-	
-	private static final int STRING_SPACING = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.FRETBOARD_STRING_SPACING);
-	private static final String[] NOTE_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_FRETBOARD);
-	
-	private FretBoardListener listener;
-	private FretBoardConfig config;
-	private Composite toolComposite;
-	private Label durationLabel;
-	private Label scaleName;
-	private Button scale;
-	private Button settings;
-	private Image fretBoard;
-	
-	private TGBeat beat;
-	private TGBeat externalBeat;
-	
-	private int[] frets;
-	private int[] strings;
-	private int fretSpacing;
-	private boolean changes;
-	private Point lastSize;
-	private int duration;
-	protected Combo handSelector;
-	protected Composite fretBoardComposite;
-	
-	public FretBoard(Composite parent) {
-		super(parent, SWT.NONE);
-		this.setLayout(new FormLayout());
-		this.listener = new FretBoardListener();
-		this.config = new FretBoardConfig();
-		this.config.load();
-		this.initToolBar();
-		this.initEditor();
-		this.loadIcons();
-		this.loadProperties();
-		
-		TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.toolComposite);
-		TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.fretBoardComposite);
-	}
-	
-	private void initToolBar() {
-		FormData data = new FormData();
-		data.left = new FormAttachment(0, 0);
-		data.right = new FormAttachment(100, 0);
-		data.top = new FormAttachment(0,0);
-		
-		GridLayout layout = new GridLayout();
-		layout.makeColumnsEqualWidth = false;
-		layout.numColumns = 0;
-		layout.marginWidth = 0;
-		
-		this.toolComposite = new Composite(this, SWT.NONE);
-		
-		// position
-		layout.numColumns ++;
-		Button goLeft = new Button(this.toolComposite, SWT.ARROW | SWT.LEFT);
-		goLeft.addSelectionListener(TuxGuitar.instance().getAction(GoLeftAction.NAME));
-		
-		layout.numColumns ++;
-		Button goRight = new Button(this.toolComposite, SWT.ARROW | SWT.RIGHT);
-		goRight.addSelectionListener(TuxGuitar.instance().getAction(GoRightAction.NAME));
-		
-		// separator
-		layout.numColumns ++;
-		makeToolSeparator(this.toolComposite);
-		
-		// duration
-		layout.numColumns ++;
-		Button decrement = new Button(this.toolComposite, SWT.ARROW | SWT.MIN);
-		decrement.addSelectionListener(TuxGuitar.instance().getAction(DecrementDurationAction.NAME));
-		
-		layout.numColumns ++;
-		this.durationLabel = new Label(this.toolComposite, SWT.BORDER);
-		
-		layout.numColumns ++;
-		Button increment = new Button(this.toolComposite, SWT.ARROW | SWT.MAX);
-		increment.addSelectionListener(TuxGuitar.instance().getAction(IncrementDurationAction.NAME));
-		
-		// separator
-		layout.numColumns ++;
-		makeToolSeparator(this.toolComposite);
-		
-		// hand selector
-		layout.numColumns ++;
-		this.handSelector = new Combo(this.toolComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.handSelector.add(TuxGuitar.getProperty("fretboard.right-mode"));
-		this.handSelector.add(TuxGuitar.getProperty("fretboard.left-mode"));
-		this.handSelector.select( this.getDirection(this.config.getDirection()) );
-		this.handSelector.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				updateDirection(FretBoard.this.handSelector.getSelectionIndex());
-			}
-		});
-		
-		// separator
-		layout.numColumns ++;
-		makeToolSeparator(this.toolComposite);
-		
-		// scale
-		layout.numColumns ++;
-		this.scale = new Button(this.toolComposite, SWT.PUSH);
-		this.scale.setText(TuxGuitar.getProperty("scale"));
-		this.scale.addSelectionListener(TuxGuitar.instance().getAction(ScaleAction.NAME));
-		
-		// scale name
-		layout.numColumns ++;
-		this.scaleName = new Label(this.toolComposite, SWT.LEFT);
-		
-		// settings
-		layout.numColumns ++;
-		this.settings = new Button(this.toolComposite, SWT.PUSH);
-		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
-		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
-		this.settings.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		this.settings.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				configure();
-			}
-		});
-		
-		this.toolComposite.setLayoutData(data);
-		this.toolComposite.setLayout(layout);
-	}
-	
-	private void makeToolSeparator(Composite parent){
-		Label separator = new Label(parent,SWT.SEPARATOR);
-		separator.setLayoutData(new GridData(20,20));
-	}
-	
-	private void initEditor() {
-		this.lastSize = new Point(0,0);
-		
-		FormData data = new FormData();
-		data.left = new FormAttachment(0, 0);
-		data.right = new FormAttachment(100, 0);
-		data.top = new FormAttachment(this.toolComposite,0);
-		data.bottom = new FormAttachment(100, 0);
-		
-		this.fretBoardComposite = new Composite(this, SWT.BORDER | SWT.DOUBLE_BUFFERED);
-		this.fretBoardComposite.setLayoutData(data);
-		this.fretBoardComposite.setBackground(this.config.getColorBackground());
-		this.fretBoardComposite.addMouseListener(this.listener);
-		this.fretBoardComposite.addPaintListener(this.listener);
-	}
-	
-	private void loadDurationImage(boolean force) {
-		int duration = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getDuration().getValue();
-		if(force || this.duration != duration){
-			this.duration = duration;
-			this.durationLabel.setImage(TuxGuitar.instance().getIconManager().getDuration(this.duration));
-		}
-	}
-	
-	private void loadScaleName() {
-		int scaleKey = TuxGuitar.instance().getScaleManager().getSelectionKey();
-		int scaleIndex = TuxGuitar.instance().getScaleManager().getSelectionIndex();
-		String key = TuxGuitar.instance().getScaleManager().getKeyName( scaleKey );
-		String name = TuxGuitar.instance().getScaleManager().getScaleName( scaleIndex );
-		this.scaleName.setText( ( key != null && name != null ) ? ( key + " - " + name ) : "" );
-		this.scaleName.pack();
-	}
-	
-	private void calculateFretSpacing(int width) {
-		this.fretSpacing = (width / MAX_FRETS);
-		int aux = 0;
-		for (int i = 0; i < MAX_FRETS; i++) {
-			aux += (i * 2);
-		}
-		this.fretSpacing += (aux / MAX_FRETS) + 2;
-	}
-	
-	private void disposeFretBoardImage(){
-		if(this.fretBoard != null && !this.fretBoard.isDisposed()){
-			this.fretBoard.dispose();
-		}
-	}
-	
-	protected void initFrets(int fromX) {
-		this.frets = new int[MAX_FRETS];
-		int nextX = fromX;
-		int direction = this.getDirection(this.config.getDirection());
-		if (direction == FretBoardConfig.DIRECTION_RIGHT) {
-			for (int i = 0; i < this.frets.length; i++) {
-				this.frets[i] = nextX;
-				nextX += (this.fretSpacing - ((i + 1) * 2));
-			}
-		} else if (direction == FretBoardConfig.DIRECTION_LEFT) {
-			for (int i = this.frets.length - 1; i >= 0; i--) {
-				this.frets[i] = nextX;
-				nextX += (this.fretSpacing - (i * 2));
-			}
-		}
-	}
-	
-	private int getDirection( int value ){
-		int direction = value;
-		if( direction != FretBoardConfig.DIRECTION_RIGHT && direction != FretBoardConfig.DIRECTION_LEFT ){
-			direction = FretBoardConfig.DIRECTION_RIGHT;
-		}
-		return direction;
-	}
-	
-	private void initStrings(int count) {
-		int fromY = TOP_SPACING;
-		this.strings = new int[count];
-		
-		for (int i = 0; i < this.strings.length; i++) {
-			this.strings[i] = fromY + (STRING_SPACING * i);
-		}
-	}
-	
-	private void updateEditor(){
-		if(isVisible()){
-			if(TuxGuitar.instance().getPlayer().isRunning()){
-				this.beat = TuxGuitar.instance().getEditorCache().getPlayBeat();
-			}else if(this.externalBeat != null){
-				this.beat = this.externalBeat;
-			}else{
-				this.beat = TuxGuitar.instance().getEditorCache().getEditBeat();
-			}
-			
-			if (this.strings.length != getStringCount()) {
-				disposeFretBoardImage();
-				initStrings(getStringCount());
-				//Fuerzo a cambiar el ancho
-				this.lastSize.y = 0;
-			}
-			
-			int clientWidth = getClientArea().width;
-			int clientHeight = getClientArea().height;
-			
-			if(this.lastSize.x != clientWidth || hasChanges()){
-				this.layout(getClientArea().width);
-			}
-			
-			if(this.lastSize.y != clientHeight){
-				TuxGuitar.instance().getFretBoardEditor().showFretBoard();
-			}
-			this.lastSize.x = clientWidth;
-			this.lastSize.y = clientHeight;
-		}
-	}
-	
-	private void paintFretBoard(TGPainter painter){
-		if(this.fretBoard == null || this.fretBoard.isDisposed()){
-			this.fretBoard = new Image(getDisplay(),getClientArea().width,((STRING_SPACING) * (this.strings.length - 1)) + TOP_SPACING + BOTTOM_SPACING);
-			
-			TGPainter painterBuffer = new TGPainter(new GC(this.fretBoard));
-			
-			//fondo
-			painterBuffer.setBackground(this.config.getColorBackground());
-			painterBuffer.initPath(TGPainter.PATH_FILL);
-			painterBuffer.addRectangle(getClientArea());
-			painterBuffer.closePath();
-			
-			
-			// pinto las cegillas
-			Image fretImage = TuxGuitar.instance().getIconManager().getFretboardFret();
-			Image firstFretImage = TuxGuitar.instance().getIconManager().getFretboardFirstFret();
-			
-			painterBuffer.drawImage(firstFretImage,0,0,firstFretImage.getBounds().width,firstFretImage.getBounds().height,this.frets[0] - 5,this.strings[0] - 5,firstFretImage.getBounds().width,this.strings[this.strings.length - 1] );
-			
-			paintFretPoints(painterBuffer,0);
-			for (int i = 1; i < this.frets.length; i++) {
-				painterBuffer.drawImage(fretImage,0,0,fretImage.getBounds().width,fretImage.getBounds().height,this.frets[i],this.strings[0] - 5,fretImage.getBounds().width,this.strings[this.strings.length - 1] );
-				paintFretPoints(painterBuffer, i);
-			}
-			
-			// pinto las cuerdas
-			for (int i = 0; i < this.strings.length; i++) {
-				painterBuffer.setForeground(this.config.getColorString());
-				if(i > 2){
-					painterBuffer.setLineWidth(2);
-				}
-				painterBuffer.initPath();
-				painterBuffer.setAntialias(false);
-				painterBuffer.moveTo(this.frets[0], this.strings[i]);
-				painterBuffer.lineTo(this.frets[this.frets.length - 1], this.strings[i]);
-				painterBuffer.closePath();
-			}
-			
-			// pinto la escala
-			paintScale(painterBuffer);
-			
-			painterBuffer.dispose();
-		}
-		painter.drawImage(this.fretBoard,0,0);
-	}
-	
-	private void paintFretPoints(TGPainter painter, int fretIndex) {
-		painter.setBackground(this.config.getColorFretPoint());
-		if ((fretIndex + 1) < this.frets.length) {
-			int fret = ((fretIndex + 1) % 12);
-			painter.setLineWidth(10);
-			if (fret == 0) {
-				int size = getOvalSize();
-				int x = this.frets[fretIndex] + ((this.frets[fretIndex + 1] - this.frets[fretIndex]) / 2);
-				int y1 = this.strings[0] + ((this.strings[this.strings.length - 1] - this.strings[0]) / 2) - STRING_SPACING;
-				int y2 = this.strings[0] + ((this.strings[this.strings.length - 1] - this.strings[0]) / 2) + STRING_SPACING;
-				painter.initPath(TGPainter.PATH_FILL);
-				painter.addOval(x - (size / 2), y1 - (size / 2), size, size);
-				painter.addOval(x - (size / 2), y2 - (size / 2), size, size);
-				painter.closePath();
-			} else if (fret == 3 || fret == 5 || fret == 7 || fret == 9) {
-				int size = getOvalSize();
-				int x = this.frets[fretIndex] + ((this.frets[fretIndex + 1] - this.frets[fretIndex]) / 2);
-				int y = this.strings[0] + ((this.strings[this.strings.length - 1] - this.strings[0]) / 2);
-				painter.initPath(TGPainter.PATH_FILL);
-				painter.addOval(x - (size / 2),y - (size / 2),size, size);
-				painter.closePath();
-			}
-			painter.setLineWidth(1);
-		}
-	}
-	
-	private void paintScale(TGPainter painter) {
-		TGTrack track = getTrack();
-		
-		for (int i = 0; i < this.strings.length; i++) {
-			TGString string = track.getString(i + 1);
-			for (int j = 0; j < this.frets.length; j++) {
-				
-				int noteIndex = ((string.getValue() + j) %  12 );
-				if(TuxGuitar.instance().getScaleManager().getScale().getNote(noteIndex)){
-					int x = this.frets[j];
-					if(j > 0){
-						x -= ((x - this.frets[j - 1]) / 2);
-					}
-					int y = this.strings[i];
-					
-					if( (this.config.getStyle() & FretBoardConfig.DISPLAY_TEXT_SCALE) != 0 ){
-						paintKeyText(painter,this.config.getColorScale(),x,y,NOTE_NAMES[noteIndex]);
-					}
-					else{
-						paintKeyOval(painter,this.config.getColorScale(),x,y);
-					}
-				}
-			}
-		}
-		
-		painter.setForeground(this.config.getColorBackground());
-	}
-	
-	private void paintNotes(TGPainter painter) {
-		if(this.beat != null){
-			TGTrack track = getTrack();
-			
-			for(int v = 0; v < this.beat.countVoices(); v ++){
-				TGVoice voice = this.beat.getVoice( v );
-				Iterator it = voice.getNotes().iterator();
-				while (it.hasNext()) {
-					TGNote note = (TGNote) it.next();
-					int fretIndex = note.getValue();
-					int stringIndex = note.getString() - 1;
-					if (fretIndex >= 0 && fretIndex < this.frets.length && stringIndex >= 0 && stringIndex < this.strings.length) {
-						int x = this.frets[fretIndex];
-						if (fretIndex > 0) {
-							x -= ((this.frets[fretIndex] - this.frets[fretIndex - 1]) / 2);
-						}
-						int y = this.strings[stringIndex];
-						
-						if( (this.config.getStyle() & FretBoardConfig.DISPLAY_TEXT_NOTE) != 0 ){
-							int realValue = track.getString(note.getString()).getValue() + note.getValue();
-							paintKeyText(painter,this.config.getColorNote(), x, y, NOTE_NAMES[ (realValue % 12) ]);
-						}
-						else{
-							paintKeyOval(painter,this.config.getColorNote(), x, y);
-						}
-					}
-				}
-			}
-			painter.setLineWidth(1);
-		}
-	}
-	
-	private void paintKeyOval(TGPainter painter,Color background,int x, int y) {
-		int size = getOvalSize();
-		painter.setBackground(background);
-		painter.initPath(TGPainter.PATH_FILL);
-		painter.moveTo(x - (size / 2),y - (size / 2));
-		painter.addOval(x - (size / 2),y - (size / 2),size, size);
-		painter.closePath();
-	}
-	
-	private void paintKeyText(TGPainter painter,Color foreground,int x, int y,String text) {
-		painter.setBackground(getDisplay().getSystemColor(SWT.COLOR_WHITE));
-		painter.setForeground(foreground);
-		painter.setFont(this.config.getFont());
-		Point size = painter.getStringExtent(text);
-		painter.initPath(TGPainter.PATH_FILL);
-		painter.addRectangle(x - (size.x / 2),y - (size.y / 2),size.x, size.y);
-		painter.closePath();
-		painter.drawString(text,x - (size.x / 2),y - (size.y / 2),true);
-	}
-	
-	protected void paintEditor(TGPainter painter) {
-		if(!TuxGuitar.instance().isLocked()){
-			TuxGuitar.instance().lock();
-			this.updateEditor();
-			if (this.frets.length > 0 && this.strings.length > 0) {
-				paintFretBoard(painter);
-				paintNotes(painter);
-			}
-			TuxGuitar.instance().unlock();
-		}
-	}
-	
-	protected void hit(int x, int y) {
-		int fretIndex = getFretIndex(x);
-		int stringIndex = getStringIndex(y);
-		
-		TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().setStringNumber(stringIndex + 1);
-		if (!removeNote(fretIndex, stringIndex + 1)) {
-			addNote(fretIndex, stringIndex + 1);
-		}
-	}
-	
-	private int getStringIndex(int y) {
-		int index = -1;
-		for (int i = 0; i < this.strings.length; i++) {
-			if (index < 0) {
-				index = i;
-			} else {
-				int distanceY = Math.abs(y - this.strings[index]);
-				int currDistanceY = Math.abs(y - this.strings[i]);
-				if (currDistanceY < distanceY) {
-					index = i;
-				}
-			}
-		}
-		return index;
-	}
-	
-	private int getFretIndex(int x) {
-		int length = this.frets.length;
-		if ((x - 10) <= this.frets[0] && this.frets[0] < this.frets[length - 1]) {
-			return 0;
-		}
-		if ((x + 10) >= this.frets[0] && this.frets[0] > this.frets[length - 1]) {
-			return 0;
-		}
-		
-		for (int i = 0; i < length; i++) {
-			if ((i + 1) < length) {
-				if (x > this.frets[i] && x <= this.frets[i + 1] || x > this.frets[i + 1] && x <= this.frets[i]) {
-					return i + 1;
-				}
-			}
-		}
-		return length - 1;
-	}
-	
-	private boolean removeNote(int fret, int string) {
-		if(this.beat != null){
-			for(int v = 0; v < this.beat.countVoices(); v ++){
-				TGVoice voice = this.beat.getVoice( v );
-				Iterator it = voice.getNotes().iterator();
-				while (it.hasNext()) {
-					TGNote note = (TGNote) it.next();
-					if (note.getValue() == fret && note.getString() == string) {
-						//comienza el undoable
-						UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-						
-						TGSongManager manager = TuxGuitar.instance().getSongManager();
-						manager.getMeasureManager().removeNote(note);
-						
-						//termia el undoable
-						TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-						TuxGuitar.instance().getFileHistory().setUnsavedFile();
-						
-						return true;
-					}
-				}
-			}
-		}
-		return false;
-	}
-	
-	private TGTrack getTrack() {
-		if( this.beat != null ){
-			TGMeasure measure = this.beat.getMeasure();
-			if( measure != null ){
-				TGTrack track = measure.getTrack();
-				if( track != null ){
-					return track;
-				}
-			}
-		}
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
-	}
-	
-	private int getStringCount() {
-		TGTrack track = getTrack();
-		if( track != null ){
-			return track.stringCount();
-		}
-		return 0;
-	}
-	
-	private int getOvalSize(){
-		return ((STRING_SPACING / 2) + (STRING_SPACING / 10));
-	}
-	
-	private void addNote(int fret, int string) {
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		
-		//comienza el undoable
-		UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-		
-		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-		
-		TGNote note = manager.getFactory().newNote();
-		note.setValue(fret);
-		note.setVelocity(caret.getVelocity());
-		note.setString(string);
-		
-		TGDuration duration = manager.getFactory().newDuration();
-		caret.getDuration().copy(duration);
-		
-		manager.getMeasureManager().addNote(caret.getMeasure(),caret.getPosition(),note,duration, caret.getVoice());
-		
-		//termia el undoable
-		TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-		
-		//reprodusco las notas en el pulso
-		caret.getSelectedBeat().play();
-	}
-	
-	protected void afterAction() {
-		int measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().getNumber();
-		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure);
-		TuxGuitar.instance().updateCache(true);
-	}
-	
-	protected void updateDirection( int direction ){
-		this.config.saveDirection( this.getDirection(direction) );
-		this.initFrets(10);
-		this.setChanges(true);
-		this.fretBoardComposite.redraw();
-	}
-	
-	public boolean hasChanges(){
-		return this.changes;
-	}
-	
-	public void setChanges(boolean changes){
-		this.changes = changes;
-	}
-	
-	public void setExternalBeat(TGBeat externalBeat){
-		this.externalBeat = externalBeat;
-	}
-	
-	public TGBeat getExternalBeat(){
-		return this.externalBeat;
-	}
-	
-	public void redraw() {
-		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
-			super.redraw();
-			this.fretBoardComposite.redraw();
-			this.loadDurationImage(false);
-		}
-	}
-	
-	public void redrawPlayingMode(){
-		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
-			this.fretBoardComposite.redraw();
-		}
-	 }
-	
-	public void dispose(){
-		super.dispose();
-		this.disposeFretBoardImage();
-		this.config.dispose();
-	}
-	
-	public void loadProperties(){
-		int selection = this.handSelector.getSelectionIndex();
-		this.handSelector.removeAll();
-		this.handSelector.add(TuxGuitar.getProperty("fretboard.right-mode"));
-		this.handSelector.add(TuxGuitar.getProperty("fretboard.left-mode"));
-		this.handSelector.select(selection);
-		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
-		this.scale.setText(TuxGuitar.getProperty("scale"));
-		this.loadScaleName();
-		this.setChanges(true);
-		this.layout(true,true);
-	}
-	
-	public void loadIcons(){
-		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
-		this.loadDurationImage(true);
-		this.layout(true,true);
-		this.layout(getClientArea().width);
-	}
-	
-	public void loadScale(){
-		this.loadScaleName();
-		this.setChanges(true);
-	}
-	
-	public int getHeight(){
-		int borderWidth = (2 * this.fretBoardComposite.getBorderWidth());
-		int toolBarHeight = (this.toolComposite.getBounds().height);
-		int fretBoardHeight = (((STRING_SPACING) * (this.strings.length - 1)) + TOP_SPACING + BOTTOM_SPACING);
-		return (borderWidth + toolBarHeight + fretBoardHeight);
-	}
-	
-	public int getWidth(){
-		return this.frets[this.frets.length - 1];
-	}
-	
-	public void layout(){
-		super.layout();
-	}
-	
-	public void layout(int width){
-		this.disposeFretBoardImage();
-		this.calculateFretSpacing(width);
-		this.initFrets(10);
-		this.initStrings(getStringCount());
-		this.setChanges(false);
-	}
-	
-	protected void configure(){
-		this.config.configure(getShell());
-		this.handSelector.select( this.getDirection(this.config.getDirection()) );
-		this.setChanges(true);
-		this.redraw();
-	}
-	
-	public Composite getFretBoardComposite(){
-		return this.fretBoardComposite;
-	}
-	
-	private class FretBoardListener implements PaintListener,MouseListener {
-		
-		public FretBoardListener(){
-			super();
-		}
-		
-		public void paintControl(PaintEvent e) {
-			TGPainter painter = new TGPainter(e.gc);
-			paintEditor(painter);
-		}
-		
-		public void mouseUp(MouseEvent e) {
-			getFretBoardComposite().setFocus();
-			if(e.button == 1){
-				if(!TuxGuitar.instance().getPlayer().isRunning() && !TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){
-					ActionLock.lock();
-					if( getExternalBeat() == null ){
-						hit(e.x, e.y);
-					}else{
-						setExternalBeat( null );
-					}
-					afterAction();
-					ActionLock.unlock();
-				}
-			}else{
-				TuxGuitar.instance().getAction(GoRightAction.NAME).process(e);
-			}
-		}
-		
-		public void mouseDown(MouseEvent e) {
-			//Not implemented
-		}
-		
-		public void mouseDoubleClick(MouseEvent e) {
-			//Not implemented
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/FretBoardConfig.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/FretBoardConfig.java
deleted file mode 100644
index 0649339..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/fretboard/FretBoardConfig.java
+++ /dev/null
@@ -1,358 +0,0 @@
-package org.herac.tuxguitar.gui.editors.fretboard;
-
-import java.util.Properties;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.ColorDialog;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FontDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-public class FretBoardConfig {
-	
-	public static final int DISPLAY_TEXT_NOTE = 0x01;
-	
-	public static final int DISPLAY_TEXT_SCALE = 0x02;
-	
-	public static final int DIRECTION_RIGHT = 0;
-	
-	public static final int DIRECTION_LEFT = 1;
-	
-	private int style;
-	private int direction;
-	private Font font;
-	private Color colorBackground;
-	private Color colorString;
-	private Color colorFretPoint;
-	private Color colorNote;
-	private Color colorScale;
-	
-	public FretBoardConfig(){
-		super();
-	}
-	
-	public int getStyle() {
-		return this.style;
-	}
-	
-	public Font getFont() {
-		return this.font;
-	}
-	
-	public Color getColorBackground() {
-		return this.colorBackground;
-	}
-	
-	public Color getColorString() {
-		return this.colorString;
-	}
-	
-	public Color getColorFretPoint() {
-		return this.colorFretPoint;
-	}
-	
-	public Color getColorNote() {
-		return this.colorNote;
-	}
-	
-	public Color getColorScale() {
-		return this.colorScale;
-	}
-	
-	public int getDirection(){
-		return this.direction;
-	}
-	
-	public void load(){
-		Display display = TuxGuitar.instance().getDisplay();
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		this.style = config.getIntConfigValue(TGConfigKeys.FRETBOARD_STYLE);
-		this.direction = config.getIntConfigValue(TGConfigKeys.FRETBOARD_DIRECTION, DIRECTION_RIGHT );
-		this.font = new Font(display,config.getFontDataConfigValue(TGConfigKeys.FRETBOARD_FONT));
-		this.colorBackground = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND));
-		this.colorString = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_STRING));
-		this.colorFretPoint = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT));
-		this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_NOTE));
-		this.colorScale = new Color(display,config.getRGBConfigValue(TGConfigKeys.FRETBOARD_COLOR_SCALE));
-	}
-	
-	public void defaults(){
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		Properties defaults = config.getDefaults();
-		config.setProperty(TGConfigKeys.FRETBOARD_STYLE,defaults.getProperty(TGConfigKeys.FRETBOARD_STYLE));
-		config.setProperty(TGConfigKeys.FRETBOARD_DIRECTION,defaults.getProperty(TGConfigKeys.FRETBOARD_DIRECTION));
-		config.setProperty(TGConfigKeys.FRETBOARD_FONT,defaults.getProperty(TGConfigKeys.FRETBOARD_FONT));
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND));
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_STRING,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_STRING));
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT));
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE));
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE,defaults.getProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE));
-	}
-	
-	public void save(int style, int direction, FontData fontData,RGB rgbBackground,RGB rgbString,RGB rgbFretPoint,RGB rgbNote,RGB rgbScale){
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		config.setProperty(TGConfigKeys.FRETBOARD_STYLE,style);
-		config.setProperty(TGConfigKeys.FRETBOARD_DIRECTION,direction);
-		config.setProperty(TGConfigKeys.FRETBOARD_FONT,fontData);
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,rgbBackground);
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_STRING,rgbString);
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,rgbFretPoint);
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE,rgbNote);
-		config.setProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE,rgbScale);
-	}
-	
-	public void saveDirection( int direction ){
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		config.setProperty(TGConfigKeys.FRETBOARD_DIRECTION,direction);
-		
-		this.direction = direction;
-	}
-	
-	public void dispose(){
-		this.font.dispose();
-		this.colorBackground.dispose();
-		this.colorString.dispose();
-		this.colorFretPoint.dispose();
-		this.colorNote.dispose();
-		this.colorScale.dispose();
-	}
-	
-	private static final int MINIMUM_CONTROL_WIDTH = 180;
-	private static final int MINIMUM_BUTTON_WIDTH = 80;
-	private static final int MINIMUM_BUTTON_HEIGHT = 25;
-	
-	public void configure(Shell shell) {
-		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("fretboard.settings"));
-		
-		// ----------------------------------------------------------------------
-		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout(2, false));
-		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		group.setText(TuxGuitar.getProperty("fretboard.settings"));
-		
-		final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("fretboard.font"),this.font.getFontData()[0]);
-		
-		// Color
-		final RGB rgbBackground = getColorChooser(group,TuxGuitar.getProperty("fretboard.background-color"), this.colorBackground.getRGB());
-		final RGB rgbString = getColorChooser(group,TuxGuitar.getProperty("fretboard.string-color"), this.colorString.getRGB());
-		final RGB rgbFretPoint = getColorChooser(group,TuxGuitar.getProperty("fretboard.fretpoint-color"), this.colorFretPoint.getRGB());
-		final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("fretboard.note-color"), this.colorNote.getRGB());
-		final RGB rgbScale = getColorChooser(group,TuxGuitar.getProperty("fretboard.scale-note-color"), this.colorScale.getRGB());
-		
-		Label directionLabel = new Label(group, SWT.NULL);
-		directionLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
-		directionLabel.setText(TuxGuitar.getProperty("fretboard.direction"));
-		
-		final Combo directionCombo = new Combo(group , SWT.DROP_DOWN | SWT.READ_ONLY);
-		directionCombo.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
-		directionCombo.add(TuxGuitar.getProperty("fretboard.right-mode"));
-		directionCombo.add(TuxGuitar.getProperty("fretboard.left-mode"));
-		directionCombo.select( this.direction );
-		
-		// ----------------------------------------------------------------------
-		group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout());
-		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		group.setText(TuxGuitar.getProperty("fretboard.settings.options"));
-		
-		final Button displayTextNote = new Button(group,SWT.CHECK);
-		displayTextNote.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		displayTextNote.setText(TuxGuitar.getProperty("fretboard.display-note-text"));
-		displayTextNote.setSelection( (this.style & DISPLAY_TEXT_NOTE) != 0 );
-		
-		final Button displayTextScale = new Button(group,SWT.CHECK);
-		displayTextScale.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		displayTextScale.setText(TuxGuitar.getProperty("fretboard.display-scale-text"));
-		displayTextScale.setSelection( (this.style & DISPLAY_TEXT_SCALE) != 0 );
-		
-		// ------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3, false));
-		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
-		
-		final Button buttonDefaults = new Button(buttons, SWT.PUSH);
-		buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
-		buttonDefaults.setLayoutData(getButtonData());
-		buttonDefaults.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-				defaults();
-				applyChanges();
-			}
-		});
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				int style = 0;
-				style |= (displayTextNote.getSelection() ? DISPLAY_TEXT_NOTE : 0 );
-				style |= (displayTextScale.getSelection() ? DISPLAY_TEXT_SCALE : 0 );
-				
-				int direction = directionCombo.getSelectionIndex();
-				if( direction != DIRECTION_RIGHT && direction != DIRECTION_LEFT ){
-					direction = DIRECTION_RIGHT;
-				}
-				//if( direction )
-				dialog.dispose();
-				
-				save(style, direction, fontData, rgbBackground, rgbString, rgbFretPoint, rgbNote, rgbScale);
-				applyChanges();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
-		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
-		return data;
-	}
-	
-	protected void applyChanges(){
-		this.dispose();
-		this.load();
-	}
-	
-	private RGB getColorChooser(final Composite parent,String title,RGB rgb){
-		Label label = new Label(parent, SWT.NULL);
-		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
-		label.setText(title);
-		
-		ButtonColor button = new ButtonColor(parent, SWT.PUSH, TuxGuitar.getProperty("choose"));
-		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
-		button.loadColor(rgb);
-		
-		return button.getValue();
-	}
-	
-	private FontData getFontChooser(final Composite parent,String title,FontData fontData){
-		final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle());
-		
-		Label label = new Label(parent, SWT.NULL);
-		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
-		label.setText(title);
-		
-		Button button = new Button(parent, SWT.PUSH);
-		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
-		button.setText(TuxGuitar.getProperty("choose"));
-		button.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				Font font = new Font(parent.getDisplay(),selection);
-				FontDialog fontDialog = new FontDialog(parent.getShell());
-				fontDialog.setFontList(font.getFontData());
-				FontData fd = fontDialog.open();
-				if(fd != null){
-					selection.setName( fd.getName() );
-					selection.setHeight( fd.getHeight() );
-					selection.setStyle( fd.getStyle() );
-				}
-				font.dispose();
-			}
-		});
-		return selection;
-	}
-	
-	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
-		GridData data = new GridData();
-		data.minimumWidth = minimumWidth;
-		data.horizontalAlignment = horizontalAlignment;
-		data.verticalAlignment = SWT.DEFAULT;
-		data.grabExcessHorizontalSpace = true;
-		data.grabExcessVerticalSpace = true;
-		return data;
-	}
-	
-	private class ButtonColor {
-		protected Button button;
-		protected Color color;
-		protected RGB value;
-		
-		public ButtonColor(Composite parent, int style, String text){
-			this.value = new RGB(0,0,0);
-			this.button = new Button(parent, style);			
-			this.button.setText(text);
-			this.addListeners();
-		}
-		
-		protected void setLayoutData(Object layoutData){
-			this.button.setLayoutData(layoutData);
-		}
-		
-		protected void loadColor(RGB rgb){
-			this.value.red = rgb.red;
-			this.value.green = rgb.green;
-			this.value.blue = rgb.blue;
-			
-			Color color = new Color(this.button.getDisplay(), this.value);
-			this.button.setForeground(color);
-			this.disposeColor();
-			this.color = color;
-		}
-		
-		protected void disposeColor(){
-			if(this.color != null && !this.color.isDisposed()){
-				this.color.dispose();
-				this.color = null;
-			}
-		}
-		
-		private void addListeners(){
-			this.button.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent event) {
-					ColorDialog dlg = new ColorDialog(ButtonColor.this.button.getShell());
-					dlg.setRGB(ButtonColor.this.value);
-					dlg.setText(TuxGuitar.getProperty("choose-color"));
-					RGB result = dlg.open();
-					if (result != null) {
-						ButtonColor.this.loadColor(result);
-					}
-				}
-			});
-			this.button.addDisposeListener(new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-					ButtonColor.this.disposeColor();
-				}
-			});
-		}
-		
-		protected RGB getValue(){
-			return this.value;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/lyric/LyricEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/lyric/LyricEditor.java
deleted file mode 100644
index ee912bf..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/lyric/LyricEditor.java
+++ /dev/null
@@ -1,277 +0,0 @@
-package org.herac.tuxguitar.gui.editors.lyric;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.edit.RedoAction;
-import org.herac.tuxguitar.gui.actions.edit.UndoAction;
-import org.herac.tuxguitar.gui.actions.track.GoNextTrackAction;
-import org.herac.tuxguitar.gui.actions.track.GoPreviousTrackAction;
-import org.herac.tuxguitar.gui.editors.TGUpdateListener;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBinding;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingConstants;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class LyricEditor implements TGUpdateListener,IconLoader,LanguageLoader{
-	private static int EDITOR_WIDTH = 450;
-	private static int EDITOR_HEIGHT = 200;
-	
-	protected static final KeyBindingAction KB_ACTIONS[] = new KeyBindingAction[]{
-		new KeyBindingAction(UndoAction.NAME,new KeyBinding(122,KeyBindingConstants.CONTROL)),
-		new KeyBindingAction(RedoAction.NAME,new KeyBinding(121,KeyBindingConstants.CONTROL)),
-	};
-	
-	private TGTrack track;
-	private Shell dialog;
-	private LyricModifyListener listener;
-	
-	private Button previous;
-	private Button next;
-	private Label label;
-	private Label fromLabel;
-	private Spinner from;
-	private Text text;
-	private int caretPosition;
-	
-	private boolean updated;
-	private int lastTrack;
-	private int lastMeasuseCount;
-	private String lastTrackName;
-	
-	public LyricEditor(){
-		this.listener = new LyricModifyListener(this);
-	}
-	
-	public void show() {
-		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.RESIZE);
-		this.dialog.setLayout(getDialogLayout());
-		this.dialog.setSize(EDITOR_WIDTH,EDITOR_HEIGHT);
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				onDispose();
-			}
-		});
-		
-		this.track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
-		this.loadComposites();
-		this.loadProperties();
-		this.loadIcons();
-		this.updateItems();
-		this.addListeners();
-		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER);
-	}
-	
-	public void addListeners(){
-		TuxGuitar.instance().getIconManager().addLoader(this);
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
-	}
-	
-	public void removeListeners(){
-		TuxGuitar.instance().getIconManager().removeLoader(this);
-		TuxGuitar.instance().getLanguageManager().removeLoader(this);
-		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
-	}
-	
-	public void onDispose(){
-		this.track = null;
-		this.label = null;
-		this.text = null;
-		this.dialog = null;
-		this.removeListeners();
-		TuxGuitar.instance().updateCache(true);
-	}
-	
-	private GridLayout getDialogLayout(){
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		layout.verticalSpacing = 0;
-		return layout;
-	}
-	
-	private void loadComposites(){
-		loadToolBar(this.dialog);
-		loadLyricText(this.dialog);
-	}
-	
-	private void loadToolBar(Composite parent){
-		final Composite composite = new Composite(parent,SWT.NONE);
-		composite.setLayout(new GridLayout(5,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
-		
-		this.previous = new Button(composite, SWT.ARROW | SWT.LEFT);
-		this.next = new Button(composite, SWT.ARROW | SWT.RIGHT);
-		
-		this.label = new Label(composite,SWT.NONE);
-		this.label.setText(this.track.getName());
-		this.label.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
-		
-		this.fromLabel = new Label(composite,SWT.NONE);
-		this.fromLabel.setLayoutData(new GridData(SWT.RIGHT,SWT.CENTER,false,true));
-		
-		this.from = new Spinner(composite,SWT.BORDER);
-		this.from.setLayoutData(new GridData(50,SWT.DEFAULT));
-		
-		this.from.setMinimum(1);
-		this.from.setMaximum(this.track.countMeasures());
-		this.from.setSelection(this.track.getLyrics().getFrom());
-		this.from.setEnabled(this.track.countMeasures() > 1);
-		this.from.addModifyListener(this.listener);
-		
-		this.previous.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				TuxGuitar.instance().getAction(GoPreviousTrackAction.NAME).process(e);
-				composite.layout();
-			}
-		});
-		this.next.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				TuxGuitar.instance().getAction(GoNextTrackAction.NAME).process(e);
-				composite.layout();
-			}
-		});
-	}
-	
-	private void loadLyricText(Composite parent){
-		Composite composite = new Composite(parent,SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.text = new Text(composite,SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
-		this.text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.text.setFocus();
-		this.text.setText(this.track.getLyrics().getLyrics());
-		this.text.addModifyListener(this.listener);
-		this.text.addKeyListener(new KeyAdapter() {
-			public void keyPressed(KeyEvent event) {
-				for( int i = 0 ; i < KB_ACTIONS.length ; i ++ ){
-					if(event.keyCode == KB_ACTIONS[i].getKeyBinding().getKey() && event.stateMask == KB_ACTIONS[i].getKeyBinding().getMask()){
-						TuxGuitar.instance().getAction(KB_ACTIONS[i].getAction()).process(event);
-						return;
-					}
-				}
-			}
-		});
-	}
-	
-	public void updateItems(){
-		if(!isDisposed()){
-			boolean enabled = !TuxGuitar.instance().getPlayer().isRunning();
-			
-			this.listener.setEnabled(false);
-			if(this.updated){
-				this.lastTrack = 0;
-				this.lastTrackName = null;
-				this.lastMeasuseCount = 0;
-			}
-			this.track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
-			if( isTrackNameChanged() ){
-				this.label.setText(this.track.getName());
-			}
-			if( isMeasureCountChanged() ){
-				this.from.setMaximum(this.track.countMeasures());
-			}
-			if( isTrackChanged() ){
-				this.from.setSelection(this.track.getLyrics().getFrom());
-				this.text.setText(this.track.getLyrics().getLyrics());
-				this.text.setSelection( (this.caretPosition >= 0 ? this.caretPosition : this.text.getCharCount()));
-			}
-			
-			this.from.setEnabled( enabled && (this.track.countMeasures() > 1) );
-			this.text.setEnabled( enabled );
-			
-			this.setCaretPosition(-1);
-			
-			this.listener.setEnabled( enabled );
-			this.updated = false;
-		}
-	}
-	
-	private boolean isTrackChanged(){
-		int current = this.track.getNumber();
-		if(current != this.lastTrack){
-			this.lastTrack = current;
-			return true;
-		}
-		return false;
-	}
-	
-	private boolean isTrackNameChanged(){
-		String current = this.track.getName();
-		if(this.lastTrackName == null || !current.equals( this.lastTrackName ) ){
-			this.lastTrackName = current;
-			return true;
-		}
-		return false;
-	}
-	
-	private boolean isMeasureCountChanged(){
-		int current = this.track.countMeasures();
-		if(current != this.lastMeasuseCount){
-			this.lastMeasuseCount = current;
-			return true;
-		}
-		return false;
-	}
-	
-	public void update(){
-		this.updated = true;
-	}
-	
-	public void setCaretPosition(int caretPosition) {
-		this.caretPosition = caretPosition;
-	}
-	
-	public TGTrack getTrack(){
-		return this.track;
-	}
-	
-	public void loadProperties(){
-		if(!isDisposed()){
-			this.dialog.setText(TuxGuitar.getProperty("lyric.editor"));
-			this.fromLabel.setText(TuxGuitar.getProperty("edit.from"));
-		}
-	}
-	
-	public void loadIcons(){
-		if(!isDisposed()){
-			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-		}
-	}
-	
-	public boolean isDisposed() {
-		return (this.dialog == null || this.dialog.isDisposed());
-	}
-	
-	public void dispose(){
-		if(!isDisposed()){
-			this.dialog.dispose();
-		}
-	}
-
-	public void doUpdate(int type) {
-		if( type == TGUpdateListener.SELECTION ){
-			this.updateItems();
-		}else if( type == TGUpdateListener.SONG_UPDATED || type == TGUpdateListener.SONG_LOADED){
-			this.update();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/lyric/LyricModifyListener.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/lyric/LyricModifyListener.java
deleted file mode 100644
index bfaeeb5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/lyric/LyricModifyListener.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.herac.tuxguitar.gui.editors.lyric;
-
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.widgets.Spinner;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackLyric;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class LyricModifyListener implements ModifyListener{
-	
-	private boolean enabled;
-	private LyricEditor editor;
-	private int lastPosition;
-	
-	public LyricModifyListener(LyricEditor editor){
-		this.editor = editor;
-	}
-	
-	public void modifyText(ModifyEvent e) {
-		if(isEnabled() && !TuxGuitar.instance().getPlayer().isRunning()){
-			
-			if(e.widget instanceof Text){
-				TGTrack track = this.editor.getTrack();
-				Text text = (Text)e.widget;
-				String value = text.getText();
-				int position = text.getCaretPosition();
-				
-				UndoableTrackLyric undoable = UndoableTrackLyric.startUndo(track,this.lastPosition);
-				track.getLyrics().setLyrics(value);
-				TuxGuitar.instance().getUndoableManager().addEdit( undoable.endUndo(track,position) );
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				
-				this.lastPosition = position;
-			}else if(e.widget instanceof Spinner){
-				TGTrack track = this.editor.getTrack();
-				UndoableTrackLyric undoable = UndoableTrackLyric.startUndo(track,this.lastPosition);
-				track.getLyrics().setFrom(((Spinner)e.widget).getSelection());
-				TuxGuitar.instance().getUndoableManager().addEdit( undoable.endUndo(track,this.lastPosition) );
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			}
-			
-			TuxGuitar.instance().updateCache(true);
-		}
-	}
-	
-	public boolean isEnabled() {
-		return this.enabled;
-	}
-	
-	public void setEnabled(boolean enabled) {
-		this.enabled = enabled;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/MatrixConfig.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/MatrixConfig.java
deleted file mode 100644
index 4cc285d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/MatrixConfig.java
+++ /dev/null
@@ -1,341 +0,0 @@
-package org.herac.tuxguitar.gui.editors.matrix;
-
-import java.util.Properties;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.graphics.Resource;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.ColorDialog;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.FontDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-public class MatrixConfig {
-	
-	private Font font;
-	private Color[] colorLines;
-	private Color colorForeground;
-	private Color colorBorder;
-	private Color colorPosition;
-	private Color colorNote;
-	private Color colorPlay;
-	
-	public MatrixConfig(){
-		super();
-	}
-	
-	public Font getFont() {
-		return this.font;
-	}
-	
-	public Color getColorForeground() {
-		return this.colorForeground;
-	}
-	
-	public Color getColorBorder() {
-		return this.colorBorder;
-	}
-	
-	public Color getColorPosition() {
-		return this.colorPosition;
-	}
-	
-	public Color getColorNote() {
-		return this.colorNote;
-	}
-	
-	public Color getColorPlay() {
-		return this.colorPlay;
-	}
-	
-	public Color[] getColorLines() {
-		return this.colorLines;
-	}
-	
-	public Color getColorLine(int index) {
-		return this.colorLines[index];
-	}
-	
-	public void load(){
-		Display display = TuxGuitar.instance().getDisplay();
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		this.font = new Font(display,config.getFontDataConfigValue(TGConfigKeys.MATRIX_FONT));
-		this.colorForeground = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_FOREGROUND));
-		this.colorBorder = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_BORDER));
-		this.colorPosition = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_POSITION));
-		this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_NOTE));
-		this.colorPlay = new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE));
-		this.colorLines = new Color[]{
-				new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_1)),
-				new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_2)),
-				new Color(display,config.getRGBConfigValue(TGConfigKeys.MATRIX_COLOR_LINE_3)),
-		};
-	}
-	
-	public void defaults(){
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		Properties defaults = config.getDefaults();
-		config.setProperty(TGConfigKeys.MATRIX_FONT,defaults.getProperty(TGConfigKeys.MATRIX_FONT));
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND));
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_BORDER,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_BORDER));
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_POSITION,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_POSITION));
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_NOTE,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_NOTE));
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE));
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_1,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_LINE_1));
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_2,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_LINE_2));
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_3,defaults.getProperty(TGConfigKeys.MATRIX_COLOR_LINE_3));
-	}
-	
-	public void save(FontData fontData,
-					 RGB rgbForeground,
-					 RGB rgbBorder,
-					 RGB rgbPosition,
-					 RGB rgbNote,
-					 RGB rgbPlay,
-					 RGB rgbLines[]){
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		
-		config.setProperty(TGConfigKeys.MATRIX_FONT,fontData);
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND,rgbForeground);
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_BORDER,rgbBorder);
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_POSITION,rgbPosition);
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_NOTE,rgbNote);
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,rgbPlay);
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_1,rgbLines[0]);
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_2,rgbLines[1]);
-		config.setProperty(TGConfigKeys.MATRIX_COLOR_LINE_3,rgbLines[2]);
-	}
-	
-	public void dispose(){
-		dispose(this.font);
-		dispose(this.colorForeground);
-		dispose(this.colorBorder);
-		dispose(this.colorPosition);
-		dispose(this.colorNote);
-		dispose(this.colorPlay);
-		dispose(this.colorLines);
-	}
-	
-	protected void dispose(Resource[] resources){
-		if(resources != null){
-			for(int i = 0; i < resources.length; i ++){
-				dispose(resources[i]);
-			}
-		}
-	}
-	
-	protected void dispose(Resource resource){
-		if(resource != null){
-			resource.dispose();
-		}
-	}
-	
-	private static final int MINIMUM_CONTROL_WIDTH = 180;
-	private static final int MINIMUM_BUTTON_WIDTH = 80;
-	private static final int MINIMUM_BUTTON_HEIGHT = 25;
-	
-	public void configure(Shell shell) {
-		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("matrix.settings"));
-		
-		// ----------------------------------------------------------------------
-		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout(2, false));
-		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		group.setText(TuxGuitar.getProperty("matrix.settings"));
-		
-		// fonts
-		final FontData fontData = getFontChooser(group,TuxGuitar.getProperty("matrix.font"),this.font.getFontData()[0]);
-		
-		// colors
-		final RGB rgbForeground = getColorChooser(group,TuxGuitar.getProperty("matrix.foreground-color"), this.colorForeground.getRGB());
-		
-		final RGB rgbLines[] = new RGB[]{
-				getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-1"), this.colorLines[0].getRGB()),
-				getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-2"), this.colorLines[1].getRGB()),
-				getColorChooser(group,TuxGuitar.getProperty("matrix.line-color-over"), this.colorLines[2].getRGB()),
-		};
-		
-		final RGB rgbBorder = getColorChooser(group,TuxGuitar.getProperty("matrix.border-color"), this.colorBorder.getRGB());
-		final RGB rgbPosition = getColorChooser(group,TuxGuitar.getProperty("matrix.position-color"), this.colorPosition.getRGB());
-		final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("matrix.note-color"), this.colorNote.getRGB());
-		final RGB rgbPlay = getColorChooser(group,TuxGuitar.getProperty("matrix.play-note-color"), this.colorPlay.getRGB());
-		
-		// ------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3, false));
-		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
-		
-		final Button buttonDefaults = new Button(buttons, SWT.PUSH);
-		buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
-		buttonDefaults.setLayoutData(getButtonData());
-		buttonDefaults.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-				defaults();
-				applyChanges();
-			}
-		});
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-				save(fontData, rgbForeground, rgbBorder, rgbPosition, rgbNote, rgbPlay, rgbLines);
-				applyChanges();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
-		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
-		return data;
-	}
-	
-	protected void applyChanges(){
-		this.dispose();
-		this.load();
-	}
-	
-	private RGB getColorChooser(final Composite parent,String title,RGB rgb){
-		Label label = new Label(parent, SWT.NULL);
-		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
-		label.setText(title);
-		
-		ButtonColor button = new ButtonColor(parent, SWT.PUSH, TuxGuitar.getProperty("choose"));
-		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
-		button.loadColor(rgb);
-		
-		return button.getValue();
-	}
-	
-	private FontData getFontChooser(final Composite parent,String title,FontData fontData){
-		final FontData selection = new FontData(fontData.getName(),fontData.getHeight(),fontData.getStyle());
-		
-		Label label = new Label(parent, SWT.NULL);
-		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
-		label.setText(title);
-		
-		Button button = new Button(parent, SWT.PUSH);
-		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
-		button.setText(TuxGuitar.getProperty("choose"));
-		button.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				Font font = new Font(parent.getDisplay(),selection);
-				FontDialog fontDialog = new FontDialog(parent.getShell());
-				fontDialog.setFontList(font.getFontData());
-				FontData fd = fontDialog.open();
-				if(fd != null){
-					selection.setName( fd.getName() );
-					selection.setHeight( fd.getHeight() );
-					selection.setStyle( fd.getStyle() );
-				}
-				font.dispose();
-			}
-		});
-		return selection;
-	}
-	
-	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
-		GridData data = new GridData();
-		data.minimumWidth = minimumWidth;
-		data.horizontalAlignment = horizontalAlignment;
-		data.verticalAlignment = SWT.DEFAULT;
-		data.grabExcessHorizontalSpace = true;
-		data.grabExcessVerticalSpace = true;
-		return data;
-	}
-	
-	private class ButtonColor {
-		protected Button button;
-		protected Color color;
-		protected RGB value;
-		
-		public ButtonColor(Composite parent, int style, String text){
-			this.value = new RGB(0,0,0);
-			this.button = new Button(parent, style);			
-			this.button.setText(text);
-			this.addListeners();
-		}
-		
-		protected void setLayoutData(Object layoutData){
-			this.button.setLayoutData(layoutData);
-		}
-		
-		protected void loadColor(RGB rgb){
-			this.value.red = rgb.red;
-			this.value.green = rgb.green;
-			this.value.blue = rgb.blue;
-			
-			Color color = new Color(this.button.getDisplay(), this.value);
-			this.button.setForeground(color);
-			this.disposeColor();
-			this.color = color;
-		}
-		
-		protected void disposeColor(){
-			if(this.color != null && !this.color.isDisposed()){
-				this.color.dispose();
-				this.color = null;
-			}
-		}
-		
-		private void addListeners(){
-			this.button.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent event) {
-					ColorDialog dlg = new ColorDialog(ButtonColor.this.button.getShell());
-					dlg.setRGB(ButtonColor.this.value);
-					dlg.setText(TuxGuitar.getProperty("choose-color"));
-					RGB result = dlg.open();
-					if (result != null) {
-						ButtonColor.this.loadColor(result);
-					}
-				}
-			});
-			this.button.addDisposeListener(new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-					ButtonColor.this.disposeColor();
-				}
-			});
-		}
-		
-		protected RGB getValue(){
-			return this.value;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/MatrixEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/MatrixEditor.java
deleted file mode 100644
index 01d45a5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/matrix/MatrixEditor.java
+++ /dev/null
@@ -1,953 +0,0 @@
-package org.herac.tuxguitar.gui.editors.matrix;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.events.MouseTrackListener;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.graphics.Resource;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.actions.caret.GoLeftAction;
-import org.herac.tuxguitar.gui.actions.caret.GoRightAction;
-import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.TGRedrawListener;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGNoteImpl;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.TGMusicKeyUtils;
-import org.herac.tuxguitar.player.base.MidiPercussion;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGVelocities;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-public class MatrixEditor implements TGRedrawListener,IconLoader,LanguageLoader{
-	
-	private static final int BORDER_HEIGHT = 20;
-	private static final int SCROLL_INCREMENT = 50;
-	private static final String[] NOTE_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_MATRIX);
-	private static final MidiPercussion[] PERCUSSIONS = TuxGuitar.instance().getPlayer().getPercussions();
-	protected static final int[] DIVISIONS = new int[] {1,2,3,4,6,8,16};
-	
-	private MatrixConfig config;
-	private MatrixListener listener;
-	private Shell dialog;
-	private Composite composite;
-	private Composite toolbar;
-	private Composite editor;
-	private Rectangle clientArea;
-	private Image buffer;
-	private BufferDisposer bufferDisposer;
-	private Label durationLabel;
-	private Label gridsLabel;
-	private Button settings;
-	private float width;
-	private float height;
-	private float bufferWidth;
-	private float bufferHeight;
-	private float timeWidth;
-	private float lineHeight;
-	private int leftSpacing;
-	private int minNote;
-	private int maxNote;
-	private int duration;
-	private int selection;
-	private int grids;
-	private int playedTrack;
-	private int playedMeasure;
-	private TGBeat playedBeat;
-	
-	private Image selectionBackBuffer;
-	private int selectionX;
-	private int selectionY;
-	
-	private boolean selectionPaintDisabled;
-	
-	public MatrixEditor(){
-		this.grids = this.loadGrids();
-		this.listener = new MatrixListener();
-	}
-	
-	public void show(){
-		this.config = new MatrixConfig();
-		this.config.load();
-		
-		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE);
-		this.dialog.setText(TuxGuitar.getProperty("matrix.editor"));
-		this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.addDisposeListener(new DisposeListenerImpl());
-		this.bufferDisposer = new BufferDisposer();
-		
-		this.composite = new Composite(this.dialog,SWT.NONE);
-		this.composite.setLayout(new GridLayout());
-		this.composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.initToolBar();
-		this.initEditor();
-		this.loadIcons();
-		
-		this.addListeners();
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				removeListeners();
-				TuxGuitar.instance().updateCache(true);
-			}
-		});
-		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER);
-	}
-	
-	public void addListeners(){
-		TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.toolbar);
-		TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.editor);
-		TuxGuitar.instance().getIconManager().addLoader(this);
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		TuxGuitar.instance().getEditorManager().addRedrawListener( this );
-	}
-	
-	public void removeListeners(){
-		TuxGuitar.instance().getIconManager().removeLoader(this);
-		TuxGuitar.instance().getLanguageManager().removeLoader(this);
-		TuxGuitar.instance().getEditorManager().removeRedrawListener( this );
-	}
-	
-	private void initToolBar() {
-		GridLayout layout = new GridLayout();
-		layout.makeColumnsEqualWidth = false;
-		layout.numColumns = 0;
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		
-		this.toolbar = new Composite(this.composite, SWT.NONE);
-		
-		// position
-		layout.numColumns ++;
-		Button goLeft = new Button(this.toolbar, SWT.ARROW | SWT.LEFT);
-		goLeft.addSelectionListener(TuxGuitar.instance().getAction(GoLeftAction.NAME));
-		
-		layout.numColumns ++;
-		Button goRight = new Button(this.toolbar, SWT.ARROW | SWT.RIGHT);
-		goRight.addSelectionListener(TuxGuitar.instance().getAction(GoRightAction.NAME));
-		
-		// separator
-		layout.numColumns ++;
-		makeToolSeparator(this.toolbar);
-		
-		// duration
-		layout.numColumns ++;
-		Button decrement = new Button(this.toolbar, SWT.ARROW | SWT.MIN);
-		decrement.addSelectionListener(TuxGuitar.instance().getAction(DecrementDurationAction.NAME));
-		
-		layout.numColumns ++;
-		this.durationLabel = new Label(this.toolbar, SWT.BORDER);
-		
-		layout.numColumns ++;
-		Button increment = new Button(this.toolbar, SWT.ARROW | SWT.MAX);
-		increment.addSelectionListener(TuxGuitar.instance().getAction(IncrementDurationAction.NAME));
-		
-		// separator
-		layout.numColumns ++;
-		makeToolSeparator(this.toolbar);
-		
-		// grids
-		layout.numColumns ++;
-		this.gridsLabel = new Label(this.toolbar,SWT.NONE);
-		this.gridsLabel.setText(TuxGuitar.getProperty("matrix.grids"));
-		
-		layout.numColumns ++;
-		final Combo divisionsCombo = new Combo(this.toolbar, SWT.DROP_DOWN | SWT.READ_ONLY);
-		divisionsCombo.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false, true));
-		for(int i = 0; i < DIVISIONS.length; i ++){
-			divisionsCombo.add(Integer.toString(DIVISIONS[i]));
-			if(this.grids == DIVISIONS[i]){
-				divisionsCombo.select(i);
-			}
-		}
-		if(this.grids == 0){
-			divisionsCombo.select(0);
-		}
-		divisionsCombo.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				int index = divisionsCombo.getSelectionIndex();
-				if(index >= 0 && index < DIVISIONS.length){
-					setGrids(DIVISIONS[index]);
-				}
-			}
-		});
-		
-		// settings
-		layout.numColumns ++;
-		this.settings = new Button(this.toolbar, SWT.PUSH);
-		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
-		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
-		this.settings.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		this.settings.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				configure();
-			}
-		});
-		
-		this.toolbar.setLayout(layout);
-		this.toolbar.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
-	}
-	
-	private void makeToolSeparator(Composite parent){
-		Label separator = new Label(parent,SWT.SEPARATOR);
-		separator.setLayoutData(new GridData(20,20));
-	}
-	
-	private void loadDurationImage(boolean force) {
-		int duration = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getDuration().getValue();
-		if(force || this.duration != duration){
-			this.duration = duration;
-			this.durationLabel.setImage(TuxGuitar.instance().getIconManager().getDuration(this.duration));
-		}
-	}
-	
-	public void initEditor(){
-		this.selection = -1;
-		this.editor = new Composite(this.composite,SWT.DOUBLE_BUFFERED | SWT.BORDER  | SWT.H_SCROLL | SWT.V_SCROLL);
-		this.editor.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.editor.setLayout(new FillLayout());
-		this.editor.setFocus();
-		this.editor.addPaintListener(this.listener);
-		this.editor.addMouseListener(this.listener);
-		this.editor.addMouseMoveListener(this.listener);
-		this.editor.addMouseTrackListener(this.listener);
-		this.editor.getHorizontalBar().setIncrement(SCROLL_INCREMENT);
-		this.editor.getHorizontalBar().addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event event) {
-				redrawLocked();
-			}
-		});
-		this.editor.getVerticalBar().setIncrement(SCROLL_INCREMENT);
-		this.editor.getVerticalBar().addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event event) {
-				redrawLocked();
-			}
-		});
-	}
-	
-	protected void updateScroll(){
-		if( this.clientArea != null ){
-			int borderWidth = this.editor.getBorderWidth();
-			ScrollBar vBar = this.editor.getVerticalBar();
-			ScrollBar hBar = this.editor.getHorizontalBar();
-			vBar.setMaximum(Math.round(this.height + (borderWidth * 2)));
-			vBar.setThumb(Math.round(Math.min(this.height + (borderWidth * 2), this.clientArea.height)));
-			hBar.setMaximum(Math.round(this.width + (borderWidth * 2)));
-			hBar.setThumb(Math.round(Math.min(this.width + (borderWidth * 2), this.clientArea.width)));
-		}
-	}
-	
-	protected int getValueAt(float y){
-		if(this.clientArea == null || (y - BORDER_HEIGHT) < 0 || y + BORDER_HEIGHT > this.clientArea.height){
-			return -1;
-		}
-		int scroll = this.editor.getVerticalBar().getSelection();
-		int value = (this.maxNote -  ((int)(  (y + scroll - BORDER_HEIGHT)  / this.lineHeight)) );
-		return value;
-	}
-	
-	protected long getStartAt(float x){
-		TGMeasure measure = getMeasure();
-		float posX = (x + this.editor.getHorizontalBar().getSelection());
-		long start =(long) (measure.getStart() + (((posX - this.leftSpacing) * measure.getLength()) / (this.timeWidth * measure.getTimeSignature().getNumerator())));
-		return start;
-	}
-	
-	protected void paintEditor(TGPainter painter){
-		if(!TuxGuitar.instance().getPlayer().isRunning()){
-			this.resetPlayed();
-		}
-		
-		this.disposeSelectionBuffer();
-		this.clientArea = this.editor.getClientArea();
-		
-		if( this.clientArea != null ){
-			Image buffer = getBuffer();
-			
-			this.width = this.bufferWidth;
-			this.height = (this.bufferHeight + (BORDER_HEIGHT *2));
-			
-			this.updateScroll();
-			int scrollX = this.editor.getHorizontalBar().getSelection();
-			int scrollY = this.editor.getVerticalBar().getSelection();
-			
-			painter.drawImage(buffer,-scrollX,(BORDER_HEIGHT - scrollY));
-			this.paintMeasure(painter,(-scrollX), (BORDER_HEIGHT - scrollY) );
-			this.paintBorders(painter,(-scrollX),0);
-			this.paintPosition(painter,(-scrollX),0);
-			
-			this.paintSelection(painter, (-scrollX), (BORDER_HEIGHT - scrollY) );
-		}
-	}
-	
-	protected Image getBuffer(){
-		if( this.clientArea != null ){
-			this.bufferDisposer.update(this.clientArea.width, this.clientArea.height);
-			if(this.buffer == null || this.buffer.isDisposed()){
-				String[] names = null;
-				TGMeasure measure = getMeasure();
-				boolean percussion = measure.getTrack().isPercussionTrack();
-				this.maxNote = 0;
-				this.minNote = 127;
-				if(percussion){
-					names = new String[PERCUSSIONS.length];
-					for(int i = 0; i < names.length;i ++){
-						this.minNote = Math.min(this.minNote,PERCUSSIONS[i].getValue());
-						this.maxNote = Math.max(this.maxNote,PERCUSSIONS[i].getValue());
-						names[i] = PERCUSSIONS[names.length - i -1].getName();
-					}
-				}else{
-					for(int sNumber = 1; sNumber <= measure.getTrack().stringCount();sNumber ++){
-						TGString string = measure.getTrack().getString(sNumber);
-						this.minNote = Math.min(this.minNote,string.getValue());
-						this.maxNote = Math.max(this.maxNote,(string.getValue() + 20));
-					}
-					names = new String[this.maxNote - this.minNote + 1];
-					for(int i = 0; i < names.length;i ++){
-						names[i] = (NOTE_NAMES[ (this.maxNote - i) % 12] + ((this.maxNote - i) / 12 ) );
-					}
-				}
-				
-				int minimumNameWidth = 110;
-				int minimumNameHeight = 0;
-				TGPainter painter = new TGPainter(new GC(this.dialog.getDisplay()));
-				painter.setFont(this.config.getFont());
-				for(int i = 0; i < names.length;i ++){
-					Point size = painter.getStringExtent(names[i]);
-					if( size.x > minimumNameWidth ){
-						minimumNameWidth = size.x;
-					}
-					if( size.y  > minimumNameHeight ){
-						minimumNameHeight = size.y ;
-					}
-				}
-				painter.dispose();
-				
-				int cols = measure.getTimeSignature().getNumerator();
-				int rows = (this.maxNote - this.minNote);
-				
-				this.leftSpacing = minimumNameWidth + 10;
-				this.lineHeight = Math.max(minimumNameHeight,( (this.clientArea.height - (BORDER_HEIGHT * 2.0f))/ (rows + 1.0f)));
-				this.timeWidth = Math.max((10 * (TGDuration.SIXTY_FOURTH / measure.getTimeSignature().getDenominator().getValue())),( (this.clientArea.width-this.leftSpacing) / cols)  );
-				this.bufferWidth = this.leftSpacing + (this.timeWidth * cols);
-				this.bufferHeight = (this.lineHeight * (rows + 1));
-				this.buffer = new Image(this.editor.getDisplay(),Math.round( this.bufferWidth),Math.round(this.bufferHeight));
-				
-				painter = new TGPainter(new GC(this.buffer));
-				painter.setFont(this.config.getFont());
-				painter.setForeground(this.config.getColorForeground());
-				for(int i = 0; i <= rows; i++){
-					painter.setBackground(this.config.getColorLine( i % 2 ) );
-					painter.initPath(TGPainter.PATH_FILL);
-					painter.setAntialias(false);
-					painter.addRectangle(0 ,(i * this.lineHeight),this.bufferWidth ,this.lineHeight);
-					painter.closePath();
-					painter.drawString(names[i],5,( Math.round( (i * this.lineHeight) ) +  Math.round(  (this.lineHeight - minimumNameHeight) / 2 )  ) );
-				}
-				for(int i = 0; i < cols; i ++){
-					float colX = this.leftSpacing + (i * this.timeWidth);
-					float divisionWidth = ( this.timeWidth / this.grids );
-					for( int j = 0; j < this.grids; j ++ ){
-						painter.setLineStyle( j == 0 ? SWT.LINE_SOLID : SWT.LINE_DOT);
-						painter.initPath();
-						painter.setAntialias(false);
-						painter.moveTo(Math.round( colX + (j * divisionWidth) ),0);
-						painter.lineTo(Math.round( colX + (j * divisionWidth) ),this.bufferHeight);
-						painter.closePath();
-					}
-				}
-				painter.dispose();
-			}
-		}
-		return this.buffer;
-	}
-	
-	protected void paintMeasure(TGPainter painter,float fromX, float fromY){
-		if( this.clientArea != null ){
-			TGMeasure measure = getMeasure();
-			if(measure != null){
-				Iterator it = measure.getBeats().iterator();
-				while(it.hasNext()){
-					TGBeat beat = (TGBeat)it.next();
-					paintBeat(painter, measure, beat, fromX, fromY);
-				}
-			}
-		}
-	}
-	
-	protected void paintBeat(TGPainter painter,TGMeasure measure,TGBeat beat,float fromX, float fromY){
-		if( this.clientArea != null ){
-			int minimumY = BORDER_HEIGHT;
-			int maximumY = (this.clientArea.height - BORDER_HEIGHT);
-			
-			for( int v = 0; v < beat.countVoices(); v ++ ){
-				TGVoice voice = beat.getVoice(v);
-				for( int i = 0 ; i < voice.countNotes() ; i ++){
-					TGNoteImpl note = (TGNoteImpl)voice.getNote(i);
-					float x1 = (fromX + this.leftSpacing + (((beat.getStart() - measure.getStart()) * (this.timeWidth * measure.getTimeSignature().getNumerator())) / measure.getLength()) + 1);
-					float y1 = (fromY + (((this.maxNote - this.minNote) - (note.getRealValue() - this.minNote)) * this.lineHeight) + 1 );
-					float x2 = (x1 + ((voice.getDuration().getTime() * this.timeWidth) / measure.getTimeSignature().getDenominator().getTime()) - 2 );
-					float y2 = (y1 + this.lineHeight - 2 );
-					
-					if( y1 >= maximumY || y2 <= minimumY){
-						continue;
-					}
-					
-					y1 = ( y1 < minimumY ? minimumY : y1 );
-					y2 = ( y2 > maximumY ? maximumY : y2 );
-					
-					if((x2 - x1) > 0 && (y2 - y1) > 0){
-						painter.setBackground( (note.getBeatImpl().isPlaying(TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout()) ? this.config.getColorPlay():this.config.getColorNote() ) );
-						painter.initPath(TGPainter.PATH_FILL);
-						painter.setAntialias(false);
-						painter.addRectangle(x1,y1, (x2 - x1), (y2 - y1));
-						painter.closePath();
-					}
-				}
-			}
-		}
-	}
-	
-	protected void paintBorders(TGPainter painter,float fromX, float fromY){
-		if( this.clientArea != null ){
-			painter.setBackground(this.config.getColorBorder());
-			painter.initPath(TGPainter.PATH_FILL);
-			painter.setAntialias(false);
-			painter.addRectangle(fromX,fromY,this.bufferWidth ,BORDER_HEIGHT);
-			painter.addRectangle(fromX,fromY + (this.clientArea.height - BORDER_HEIGHT),this.bufferWidth ,BORDER_HEIGHT);
-			painter.closePath();
-			
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.addRectangle(fromX,fromY,this.width,this.clientArea.height);
-			painter.closePath();
-		}
-	}
-	
-	protected void paintPosition(TGPainter painter,float fromX, float fromY){
-		if( this.clientArea != null && !TuxGuitar.instance().getPlayer().isRunning()){
-			Caret caret = getCaret();
-			TGMeasure measure = getMeasure();
-			TGBeat beat = caret.getSelectedBeat();
-			if(beat != null){
-				float x = (((beat.getStart() - measure.getStart()) * (this.timeWidth * measure.getTimeSignature().getNumerator())) / measure.getLength());
-				float width = ((beat.getVoice(caret.getVoice()).getDuration().getTime() * this.timeWidth) / measure.getTimeSignature().getDenominator().getTime());
-				painter.setBackground(this.config.getColorPosition());
-				painter.initPath(TGPainter.PATH_FILL);
-				painter.setAntialias(false);
-				painter.addRectangle(fromX + (this.leftSpacing + x),fromY , width,BORDER_HEIGHT);
-				painter.closePath();
-				
-				painter.initPath(TGPainter.PATH_FILL);
-				painter.setAntialias(false);
-				painter.addRectangle(fromX + (this.leftSpacing + x),fromY + (this.clientArea.height - BORDER_HEIGHT), width,BORDER_HEIGHT);
-				painter.closePath();
-			}
-		}
-	}
-	
-	protected void paintSelection(TGPainter painter, float fromX, float fromY){
-		if( !this.selectionPaintDisabled && this.clientArea != null && !TuxGuitar.instance().getPlayer().isRunning()){
-			selectionFinish();
-			if(this.selection >= 0){
-				this.selectionPaintDisabled = true;
-				
-				int x = Math.round( fromX );
-				int y = Math.round( fromY + ((this.maxNote - this.selection) * this.lineHeight)  );
-				int width = Math.round( this.bufferWidth );
-				int height = Math.round( this.lineHeight );
-				
-				Image selectionArea = new Image(this.editor.getDisplay(),width,height);
-				painter.copyArea(selectionArea,x,y);
-				painter.setAlpha(100);
-				painter.setBackground(this.config.getColorLine(2));
-				painter.initPath(TGPainter.PATH_FILL);
-				painter.setAntialias(false);
-				painter.addRectangle(x,y,width,height);
-				painter.closePath();
-				
-				this.selectionX = x;
-				this.selectionY = y;
-				this.selectionBackBuffer = selectionArea;
-				this.selectionPaintDisabled = false;
-			}
-		}
-	}
-	
-	protected void updateSelection(float y){
-		if(!TuxGuitar.instance().getPlayer().isRunning()){
-			int selection = getValueAt(y);
-			
-			if(this.selection != selection){
-				this.selection = selection;
-				
-				int scrollX = this.editor.getHorizontalBar().getSelection();
-				int scrollY = this.editor.getVerticalBar().getSelection();
-				
-				TGPainter painter = new TGPainter(new GC(this.editor));
-				this.paintSelection(painter, (-scrollX), (BORDER_HEIGHT - scrollY) );
-				painter.dispose();
-			}
-		}
-	}
-	
-	public void selectionFinish(){
-		if(this.selectionBackBuffer != null && !this.selectionBackBuffer.isDisposed()){
-			TGPainter painter = new TGPainter(new GC(this.editor));
-			painter.drawImage(this.selectionBackBuffer,this.selectionX, this.selectionY);
-			painter.dispose();
-		}
-		disposeSelectionBuffer();
-	}
-	
-	protected void disposeSelectionBuffer(){
-		if(this.selectionBackBuffer != null && !this.selectionBackBuffer.isDisposed()){
-			this.selectionBackBuffer.dispose();
-			this.selectionBackBuffer = null;
-		}
-	}
-	
-	protected void hit(float x, float y){
-		if(!TuxGuitar.instance().getPlayer().isRunning()){
-			TGMeasure measure = getMeasure();
-			Caret caret = getCaret();
-			int value = getValueAt(y);
-			long start = getStartAt(x);
-			
-			if(start >= measure.getStart() && start < (measure.getStart() + measure.getLength())){
-				caret.update(caret.getTrack().getNumber(),start,caret.getStringNumber());
-				TuxGuitar.instance().updateCache(true);
-			}
-			if(value >= this.minNote || value <= this.maxNote){
-				if(start >= measure.getStart()){
-					TGVoice voice = TuxGuitar.instance().getSongManager().getMeasureManager().getVoiceIn(measure, start, caret.getVoice());
-					if( voice != null ){
-						if(!removeNote(voice.getBeat(), value)){
-							addNote(voice.getBeat(), start, value);
-						}
-					}
-				}else{
-					play(value);
-				}
-			}
-		}
-	}
-	
-	private boolean removeNote(TGBeat beat,int value) {
-		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-		TGMeasure measure = getMeasure();
-		
-		for(int v = 0; v < beat.countVoices(); v ++){
-			TGVoice voice = beat.getVoice( v );
-			Iterator it = voice.getNotes().iterator();
-			while (it.hasNext()) {
-				TGNoteImpl note = (TGNoteImpl) it.next();
-				if (note.getRealValue() == value) {
-					caret.update(measure.getTrack().getNumber(),beat.getStart(),note.getString());
-					
-					//comienza el undoable
-					UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-					
-					TGSongManager manager = TuxGuitar.instance().getSongManager();
-					manager.getMeasureManager().removeNote(note);
-					
-					//termia el undoable
-					TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-					TuxGuitar.instance().getFileHistory().setUnsavedFile();
-					
-					this.afterAction();
-					
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-	
-	private boolean addNote(TGBeat beat,long start, int value) {
-		if(beat != null){
-			TGMeasure measure = getMeasure();
-			Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-			
-			List strings = measure.getTrack().getStrings();
-			for(int i = 0;i < strings.size();i ++){
-				TGString string = (TGString)strings.get(i);
-				if(value >= string.getValue()){
-					boolean emptyString = true;
-					
-					for(int v = 0; v < beat.countVoices(); v ++){
-						TGVoice voice = beat.getVoice( v );
-						Iterator it = voice.getNotes().iterator();
-						while (it.hasNext()) {
-							TGNoteImpl note = (TGNoteImpl) it.next();
-							if (note.getString() == string.getNumber()) {
-								emptyString = false;
-								break;
-							}
-						}
-					}
-					if(emptyString){
-						TGSongManager manager = TuxGuitar.instance().getSongManager();
-						
-						//comienza el undoable
-						UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-						
-						TGNote note = manager.getFactory().newNote();
-						note.setValue((value - string.getValue()));
-						note.setVelocity(caret.getVelocity());
-						note.setString(string.getNumber());
-						
-						TGDuration duration = manager.getFactory().newDuration();
-						caret.getDuration().copy(duration);
-						
-						manager.getMeasureManager().addNote(beat,note,duration,start,caret.getVoice());
-						
-						caret.moveTo(caret.getTrack(),caret.getMeasure(),note.getVoice().getBeat(),note.getString());
-						
-						//termia el undoable
-						TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-						TuxGuitar.instance().getFileHistory().setUnsavedFile();
-						
-						//reprodusco las notas en el pulso
-						caret.getSelectedBeat().play();
-						
-						this.afterAction();
-						
-						return true;
-					}
-				}
-			}
-		}
-		return false;
-	}
-	
-	protected void afterAction() {
-		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(getMeasure().getNumber());
-		TuxGuitar.instance().updateCache(true);
-		this.editor.redraw();
-	}
-	
-	protected void play(final int value){
-		new Thread(new Runnable() {
-			public void run() {
-				TGTrack track = getMeasure().getTrack();
-				int volume = TGChannel.DEFAULT_VOLUME;
-				int balance = TGChannel.DEFAULT_BALANCE;
-				int chorus = track.getChannel().getChorus();
-				int reverb = track.getChannel().getReverb();
-				int phaser = track.getChannel().getPhaser();
-				int tremolo = track.getChannel().getTremolo();
-				int channel = track.getChannel().getChannel();
-				int program = track.getChannel().getInstrument();
-				int[][] beat = new int[][]{ new int[]{ (track.getOffset() + value) , TGVelocities.DEFAULT } };
-				TuxGuitar.instance().getPlayer().playBeat(channel,program, volume, balance,chorus,reverb,phaser,tremolo,beat);
-			}
-		}).start();
-	}
-	
-	protected int loadGrids(){
-		int grids = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.MATRIX_GRIDS);
-		// check if is valid value
-		for(int i = 0 ; i < DIVISIONS.length ; i ++ ){
-			if(grids == DIVISIONS[i]){
-				return grids;
-			}
-		}
-		return DIVISIONS[1];
-	}
-	
-	protected void setGrids(int grids){
-		this.grids = grids;
-		this.disposeBuffer();
-		this.redrawLocked();
-	}
-	
-	public int getGrids(){
-		return this.grids;
-	}
-	
-	protected TGMeasure getMeasure(){
-		if(TuxGuitar.instance().getPlayer().isRunning()){
-			TGMeasure measure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
-			if(measure != null){
-				return measure;
-			}
-		}
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure();
-	}
-	
-	protected Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-	public boolean isDisposed(){
-		return (this.dialog == null || this.dialog.isDisposed());
-	}
-	
-	protected void resetPlayed(){
-		this.playedBeat = null;
-		this.playedMeasure = -1;
-		this.playedTrack = -1;
-	}
-	
-	public void redrawLocked(){
-		if(!TuxGuitar.instance().isLocked()){
-			TuxGuitar.instance().lock();
-			this.redraw();
-			TuxGuitar.instance().unlock();
-		}
-	}
-	
-	public void redraw(){
-		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
-			//TuxGuitar.instance().lock();
-			
-			this.editor.redraw();
-			this.loadDurationImage(false);
-			
-			//TuxGuitar.instance().unlock();
-		}
-	}
-	
-	public void redrawPlayingMode(){
-		if(!isDisposed() && !TuxGuitar.instance().isLocked() && TuxGuitar.instance().getPlayer().isRunning()){
-			//TuxGuitar.instance().lock();
-			
-			TGMeasure measure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
-			TGBeat beat = TuxGuitar.instance().getEditorCache().getPlayBeat();
-			if(measure != null && beat != null){
-				int currentMeasure = measure.getNumber();
-				int currentTrack = measure.getTrack().getNumber();
-				boolean changed = (currentMeasure != this.playedMeasure || currentTrack != this.playedTrack);
-				if(changed){
-					this.resetPlayed();
-					this.editor.redraw();
-				}
-				else{
-					TGPainter painter = new TGPainter(new GC(this.editor));
-					int scrollX = this.editor.getHorizontalBar().getSelection();
-					int scrollY = this.editor.getVerticalBar().getSelection();
-					if(this.playedBeat != null){
-						this.paintBeat(painter,measure,this.playedBeat,(-scrollX), (BORDER_HEIGHT - scrollY));
-					}
-					this.paintBeat(painter,measure,beat,(-scrollX), (BORDER_HEIGHT - scrollY));
-					painter.dispose();
-				}
-				this.playedMeasure = currentMeasure;
-				this.playedTrack = currentTrack;
-				this.playedBeat = beat;
-			}
-			//TuxGuitar.instance().unlock();
-		}
-	}
-	
-	protected void configure(){
-		this.config.configure(this.dialog);
-		this.disposeBuffer();
-		this.redrawLocked();
-	}
-	
-	private void layout(){
-		if( !isDisposed() ){
-			this.toolbar.layout();
-			this.editor.layout();
-			this.composite.layout(true,true);
-		}
-	}
-	
-	public void loadIcons(){
-		if( !isDisposed() ){
-			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-			this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
-			this.loadDurationImage(true);
-			this.layout();
-			this.redraw();
-		}
-	}
-	
-	public void loadProperties() {
-		if( !isDisposed() ){
-			this.dialog.setText(TuxGuitar.getProperty("matrix.editor"));
-			this.gridsLabel.setText(TuxGuitar.getProperty("matrix.grids"));
-			this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
-			this.disposeBuffer();
-			this.layout();
-			this.redraw();
-		}
-	}
-	
-	public void dispose(){
-		if(!isDisposed()){
-			this.dialog.dispose();
-		}
-	}
-	
-	protected void disposeBuffer(){
-		if(this.buffer != null && !this.buffer.isDisposed()){
-			this.buffer.dispose();
-			this.buffer = null;
-		}
-	}
-	
-	protected void dispose(Resource[] resources){
-		if(resources != null){
-			for(int i = 0; i < resources.length; i ++){
-				dispose(resources[i]);
-			}
-		}
-	}
-	
-	protected void dispose(Resource resource){
-		if(resource != null){
-			resource.dispose();
-		}
-	}
-	
-	protected void disposeAll(){
-		this.disposeBuffer();
-		this.disposeSelectionBuffer();
-		this.config.dispose();
-	}
-	
-	protected Composite getEditor(){
-		return this.editor;
-	}
-	
-	protected class BufferDisposer{
-		private int numerator;
-		private int denominator;
-		private int track;
-		private boolean percussion;
-		
-		private int width;
-		private int height;
-		
-		public void update(int width, int height){
-			TGMeasure measure = getMeasure();
-			int track = measure.getTrack().getNumber();
-			int numerator = measure.getTimeSignature().getNumerator();
-			int denominator = measure.getTimeSignature().getDenominator().getValue();
-			boolean percussion = measure.getTrack().isPercussionTrack();
-			if(width != this.width || height != this.height || this.track != track || this.numerator != numerator || this.denominator != denominator || this.percussion != percussion){
-				disposeBuffer();
-			}
-			this.track = track;
-			this.numerator = numerator;
-			this.denominator = denominator;
-			this.percussion = percussion;
-			this.width = width;
-			this.height = height;
-		}
-	}
-	
-	protected class DisposeListenerImpl implements DisposeListener{
-		public void widgetDisposed(DisposeEvent e) {
-			disposeAll();
-		}
-	}
-	
-	protected class MatrixListener implements PaintListener,MouseListener,MouseMoveListener,MouseTrackListener {
-		
-		public MatrixListener(){
-			super();
-		}
-		
-		public void paintControl(PaintEvent e) {
-			if(!TuxGuitar.instance().isLocked()){
-				TuxGuitar.instance().lock();
-				TGPainter painter = new TGPainter(e.gc);
-				paintEditor(painter);
-				TuxGuitar.instance().unlock();
-			}
-		}
-		
-		public void mouseUp(MouseEvent e) {
-			getEditor().setFocus();
-			if(e.button == 1){
-				if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){
-					ActionLock.lock();
-					hit(e.x,e.y);
-					ActionLock.unlock();
-				}
-			}
-		}
-		
-		public void mouseMove(MouseEvent e) {
-			if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){
-				updateSelection(e.y);
-			}
-		}
-		
-		public void mouseExit(MouseEvent e) {
-			if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){
-				updateSelection(-1);
-			}
-		}
-		
-		public void mouseEnter(MouseEvent e) {
-			if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){
-				redrawLocked();
-			}
-		}
-		
-		public void mouseDoubleClick(MouseEvent e) {
-			// TODO Auto-generated method stub
-		}
-		
-		public void mouseDown(MouseEvent e) {
-			// TODO Auto-generated method stub
-		}
-		
-		public void mouseHover(MouseEvent e) {
-			// TODO Auto-generated method stub
-		}
-	}
-	
-	public void doRedraw(int type) {
-		if( type == TGRedrawListener.NORMAL ){
-			this.redraw();
-		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
-			this.redrawPlayingMode();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/piano/Piano.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/piano/Piano.java
deleted file mode 100644
index 01ec0bf..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/piano/Piano.java
+++ /dev/null
@@ -1,600 +0,0 @@
-package org.herac.tuxguitar.gui.editors.piano;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.actions.caret.GoLeftAction;
-import org.herac.tuxguitar.gui.actions.caret.GoRightAction;
-import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction;
-import org.herac.tuxguitar.gui.actions.tools.ScaleAction;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGNoteImpl;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-public class Piano extends Composite{
-	
-	private static final boolean TYPE_NOTES[] = new boolean[]{true,false,true,false,true,true,false,true,false,true,false,true};
-	private static final int NATURAL_NOTES = 7;
-	private static final int MAX_OCTAVES = 8;
-	private static final int NATURAL_WIDTH = 15;
-	private static final int SHARP_WIDTH = 8;
-	private static final int NATURAL_HEIGHT = 60;
-	private static final int SHARP_HEIGHT = 40;
-	
-	private int duration;
-	private boolean changes;
-	private PianoListener listener;
-	private PianoConfig config;
-	private Composite pianoComposite;
-	private Composite toolComposite;
-	private Label durationLabel;
-	private Label scaleName;
-	private Button scale;
-	private Button settings;
-	protected TGBeat beat;
-	protected TGBeat externalBeat;
-	protected Image image;
-	
-	public Piano(Composite parent, int style) {
-		super(parent, style);
-		this.setLayout(new GridLayout());
-		this.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.listener =  new PianoListener();
-		this.config = new PianoConfig();
-		this.config.load();
-		this.initToolBar();
-		this.makePiano();
-		this.loadIcons();
-		this.loadProperties();
-		
-		TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.toolComposite);
-		TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.pianoComposite);
-	}
-	
-	private void initToolBar() {
-		GridLayout layout = new GridLayout();
-		layout.makeColumnsEqualWidth = false;
-		layout.numColumns = 0;
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		
-		this.toolComposite = new Composite(this, SWT.NONE);
-		
-		// position
-		layout.numColumns ++;
-		Button goLeft = new Button(this.toolComposite, SWT.ARROW | SWT.LEFT);
-		goLeft.addSelectionListener(TuxGuitar.instance().getAction(GoLeftAction.NAME));
-		
-		layout.numColumns ++;
-		Button goRight = new Button(this.toolComposite, SWT.ARROW | SWT.RIGHT);
-		goRight.addSelectionListener(TuxGuitar.instance().getAction(GoRightAction.NAME));
-		
-		// separator
-		layout.numColumns ++;
-		makeToolSeparator(this.toolComposite);
-		
-		// duration
-		layout.numColumns ++;
-		Button decrement = new Button(this.toolComposite, SWT.ARROW | SWT.MIN);
-		decrement.addSelectionListener(TuxGuitar.instance().getAction(DecrementDurationAction.NAME));
-		
-		layout.numColumns ++;
-		this.durationLabel = new Label(this.toolComposite, SWT.BORDER);
-		
-		layout.numColumns ++;
-		Button increment = new Button(this.toolComposite, SWT.ARROW | SWT.MAX);
-		increment.addSelectionListener(TuxGuitar.instance().getAction(IncrementDurationAction.NAME));
-		
-		// separator
-		layout.numColumns ++;
-		makeToolSeparator(this.toolComposite);
-		
-		// scale
-		layout.numColumns ++;
-		this.scale = new Button(this.toolComposite, SWT.PUSH);
-		this.scale.setText(TuxGuitar.getProperty("scale"));
-		this.scale.addSelectionListener(TuxGuitar.instance().getAction(ScaleAction.NAME));
-		
-		// scale name
-		layout.numColumns ++;
-		this.scaleName = new Label(this.toolComposite, SWT.LEFT);
-		
-		// settings
-		layout.numColumns ++;
-		this.settings = new Button(this.toolComposite, SWT.PUSH);
-		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
-		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
-		this.settings.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		this.settings.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				configure();
-			}
-		});
-		
-		this.toolComposite.setLayout(layout);
-		this.toolComposite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,true));
-	}
-	
-	private void makeToolSeparator(Composite parent){
-		Label separator = new Label(parent,SWT.SEPARATOR);
-		separator.setLayoutData(new GridData(20,20));
-	}
-	
-	private void loadDurationImage(boolean force) {
-		int duration = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getDuration().getValue();
-		if(force || this.duration != duration){
-			this.duration = duration;
-			this.durationLabel.setImage(TuxGuitar.instance().getIconManager().getDuration(this.duration));
-		}
-	}
-	
-	private void loadScaleName() {
-		int scaleKey = TuxGuitar.instance().getScaleManager().getSelectionKey();
-		int scaleIndex = TuxGuitar.instance().getScaleManager().getSelectionIndex();
-		String key = TuxGuitar.instance().getScaleManager().getKeyName( scaleKey );
-		String name = TuxGuitar.instance().getScaleManager().getScaleName( scaleIndex );
-		this.scaleName.setText( ( key != null && name != null ) ? ( key + " - " + name ) : "" );
-		this.scaleName.pack();
-	}
-	
-	private void makePiano(){
-		this.image = makePianoImage();
-		this.pianoComposite = new Composite(this,SWT.BORDER | SWT.DOUBLE_BUFFERED);
-		this.pianoComposite.setLayout(new GridLayout());
-		this.pianoComposite.setLayoutData(new GridData((NATURAL_WIDTH * (MAX_OCTAVES * NATURAL_NOTES) ),NATURAL_HEIGHT));
-		this.pianoComposite.addPaintListener(this.listener);
-		this.pianoComposite.addMouseListener(this.listener);
-		this.pianoComposite.setFocus();
-	}
-	
-	/**
-	 * Crea la imagen del piano
-	 *
-	 * @return
-	 */
-	private Image makePianoImage(){
-		Image image = new Image(getDisplay(),(NATURAL_WIDTH * (MAX_OCTAVES * NATURAL_NOTES) ),NATURAL_HEIGHT);
-		TGPainter painter = new TGPainter(new GC(image));
-		
-		int x = 0;
-		int y = 0;
-		painter.setBackground(this.config.getColorNatural());
-		painter.initPath(TGPainter.PATH_FILL);
-		painter.addRectangle(x,y,(NATURAL_WIDTH * (MAX_OCTAVES * NATURAL_NOTES) ),NATURAL_HEIGHT);
-		painter.closePath();
-		for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){
-			
-			if(TYPE_NOTES[i % TYPE_NOTES.length]){
-				painter.setForeground(this.config.getColorNotNatural());
-				painter.initPath();
-				painter.setAntialias(false);
-				painter.addRectangle(x,y,NATURAL_WIDTH,NATURAL_HEIGHT);
-				painter.closePath();
-				x += NATURAL_WIDTH;
-			}else{
-				painter.setBackground(this.config.getColorNotNatural());
-				painter.initPath(TGPainter.PATH_FILL);
-				painter.setAntialias(false);
-				painter.addRectangle(x - (SHARP_WIDTH / 2),y,SHARP_WIDTH,SHARP_HEIGHT);
-				painter.closePath();
-			}
-		}
-		paintScale(painter);
-		
-		painter.dispose();
-		return image;
-	}
-	
-	/**
-	 * Pinta la nota a partir del indice
-	 * 	 
-	 * @param gc
-	 * @param value
-	 */
-	private void paintScale(TGPainter painter){
-		painter.setBackground(this.config.getColorScale());
-		painter.setForeground(this.config.getColorScale());
-		int posX = 0;
-		
-		for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){
-			int width = 0;
-			
-			if(TYPE_NOTES[i % TYPE_NOTES.length]){
-				width = NATURAL_WIDTH;
-				if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
-					width -= ((SHARP_WIDTH / 2));
-				}
-				if(!TYPE_NOTES[(i + 1)  % TYPE_NOTES.length]){
-					width -= ((SHARP_WIDTH / 2));
-				}
-			}else{
-				width = SHARP_WIDTH;
-			}
-			
-			if(TuxGuitar.instance().getScaleManager().getScale().getNote(i)){
-				if(TYPE_NOTES[i % TYPE_NOTES.length] ){
-					int x = posX;
-					if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
-						x -= ((SHARP_WIDTH / 2));
-					}
-					
-					int size = SHARP_WIDTH;
-					painter.initPath(TGPainter.PATH_FILL);
-					painter.setAntialias(false);
-					painter.addRectangle( (x + 1 + (((NATURAL_WIDTH - size) / 2))) ,(NATURAL_HEIGHT - size - (((NATURAL_WIDTH - size) / 2))),size,size);
-					painter.closePath();
-				}else{
-					painter.initPath(TGPainter.PATH_FILL);
-					painter.setAntialias(false);
-					painter.addRectangle(posX + 1, SHARP_HEIGHT - SHARP_WIDTH + 1,SHARP_WIDTH - 2,SHARP_WIDTH - 2);
-					painter.closePath();
-				}
-			}
-			
-			posX += width;
-		}
-	}
-	
-	/**
-	 * Pinta la nota a partir del indice
-	 * 	 
-	 * @param gc
-	 * @param value
-	 */
-	protected void paintNote(TGPainter painter,int value){
-		painter.setBackground(this.config.getColorNote());
-		int posX = 0;
-		int y = 0;
-		
-		for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){
-			int width = 0;
-			
-			if(TYPE_NOTES[i % TYPE_NOTES.length]){
-				width = NATURAL_WIDTH;
-				if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
-					width -= ((SHARP_WIDTH / 2));
-				}
-				if(!TYPE_NOTES[(i + 1)  % TYPE_NOTES.length]){
-					width -= ((SHARP_WIDTH / 2));
-				}
-			}else{
-				width = SHARP_WIDTH;
-			}
-			
-			if(i == value){
-				if(TYPE_NOTES[i % TYPE_NOTES.length]){
-					painter.initPath(TGPainter.PATH_FILL);
-					painter.setAntialias(false);
-					painter.addRectangle(posX + 1,y + 1,width - 1,SHARP_HEIGHT);
-					
-					int x = posX;
-					if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
-						x -= ((SHARP_WIDTH / 2));
-					}
-					painter.addRectangle(x + 1,(y + SHARP_HEIGHT) + 1,NATURAL_WIDTH - 1,(NATURAL_HEIGHT - SHARP_HEIGHT) - 1);
-					painter.closePath();
-				}else{
-					painter.initPath(TGPainter.PATH_FILL);
-					painter.setAntialias(false);
-					painter.addRectangle(posX + 1,y + 1,width - 1,SHARP_HEIGHT - 1);
-					painter.closePath();
-				}
-				
-			}
-			
-			posX += width;
-		}
-	}
-	
-	/**
-	 * Retorna el indice de la nota seleccionada
-	 * 
-	 * @param point
-	 * @return
-	 */
-	private int getSelection(Point point){
-		int posX = 0;
-		
-		for(int i = 0; i < (MAX_OCTAVES * TYPE_NOTES.length); i ++){
-			int width = 0;
-			
-			if(TYPE_NOTES[i % TYPE_NOTES.length]){
-				width = NATURAL_WIDTH;
-				if(i > 0 && !TYPE_NOTES[(i - 1)  % TYPE_NOTES.length]){
-					width -= ((SHARP_WIDTH / 2));
-				}
-				if(!TYPE_NOTES[(i + 1)  % TYPE_NOTES.length]){
-					width -= ((SHARP_WIDTH / 2));
-				}
-			}else{
-				width = SHARP_WIDTH;
-			}
-			
-			if(point.x >= posX && point.x < (posX + width)  ){
-				return i;
-			}
-			
-			posX += width;
-		}
-		return -1;
-	}
-	
-	protected void hit(int x, int y) {
-		int value = getSelection(new Point(x,y));
-		
-		if (!removeNote(value)) {
-			addNote(value);
-		}
-	}
-	
-	private boolean removeNote(int value) {
-		if(this.beat != null){
-			for(int v = 0; v < this.beat.countVoices(); v ++){
-				TGVoice voice = this.beat.getVoice( v );
-				Iterator it = voice.getNotes().iterator();
-				while (it.hasNext()) {
-					TGNote note = (TGNote) it.next();
-					if (getRealNoteValue(note) == value) {
-						//comienza el undoable
-						UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-						
-						TGSongManager manager = TuxGuitar.instance().getSongManager();
-						manager.getMeasureManager().removeNote(note);
-						
-						//termia el undoable
-						TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-						TuxGuitar.instance().getFileHistory().setUnsavedFile();
-						
-						return true;
-					}
-				}
-			}
-		}
-		return false;
-	}
-	
-	private boolean addNote(int value) {
-		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-		
-		List strings = caret.getTrack().getStrings();
-		for(int i = 0;i < strings.size();i ++){
-			TGString string = (TGString)strings.get(i);
-			if(value >= string.getValue()){
-				boolean emptyString = true;
-				
-				if(this.beat != null){
-					for(int v = 0; v < this.beat.countVoices(); v ++){
-						TGVoice voice = this.beat.getVoice( v );
-						Iterator it = voice.getNotes().iterator();
-						while (it.hasNext()) {
-							TGNoteImpl note = (TGNoteImpl) it.next();
-							if (note.getString() == string.getNumber()) {
-								emptyString = false;
-								break;
-							}
-						}
-					}
-				}
-				if(emptyString){
-					TGSongManager manager = TuxGuitar.instance().getSongManager();
-					
-					//comienza el undoable
-					UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-					
-					TGNote note = manager.getFactory().newNote();
-					note.setValue((value - string.getValue()));
-					note.setVelocity(caret.getVelocity());
-					note.setString(string.getNumber());
-					
-					TGDuration duration = manager.getFactory().newDuration();
-					caret.getDuration().copy(duration);
-					
-					manager.getMeasureManager().addNote(caret.getMeasure(),caret.getPosition(),note,duration,caret.getVoice());
-					
-					//termia el undoable
-					TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-					TuxGuitar.instance().getFileHistory().setUnsavedFile();
-					
-					//reprodusco las notas en el pulso
-					caret.getSelectedBeat().play();
-					
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-	
-	protected void afterAction() {
-		int measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().getNumber();
-		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure);
-		TuxGuitar.instance().updateCache(true);
-	}
-	
-	protected int getRealNoteValue(TGNote note){
-		TGVoice voice = note.getVoice();
-		if( voice != null ){
-			TGBeat beat = voice.getBeat();
-			if( beat != null ){
-				TGMeasure measure = beat.getMeasure();
-				if( measure != null ){
-					TGTrack track = measure.getTrack();
-					if( track != null ){
-						return ( note.getValue() + track.getString( note.getString() ).getValue() );
-					}
-				}
-			}
-		}
-		// If note have no parents, uses current track strings.
-		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-		TGTrack track = caret.getTrack();
-		if( track != null ){
-			return ( note.getValue() + track.getString( note.getString() ).getValue() );
-		}
-		return 0;
-	}
-	
-	public boolean hasChanges(){
-		return this.changes;
-	}
-	
-	public void setChanges(boolean changes){
-		this.changes = changes;
-	}
-	
-	public void setExternalBeat(TGBeat externalBeat){
-		this.externalBeat = externalBeat;
-	}
-	
-	public TGBeat getExternalBeat(){
-		return this.externalBeat;
-	}
-	
-	protected void updateEditor(){
-		if(isVisible()){
-			if(hasChanges()){
-				this.image.dispose();
-				this.image = makePianoImage();
-			}
-			if(TuxGuitar.instance().getPlayer().isRunning()){
-				this.beat = TuxGuitar.instance().getEditorCache().getPlayBeat();
-			}else if(this.externalBeat != null){
-				this.beat = this.externalBeat;
-			}else{
-				this.beat = TuxGuitar.instance().getEditorCache().getEditBeat();
-			}
-		}
-	}
-	
-	public void redraw() {
-		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
-			super.redraw();
-			this.pianoComposite.redraw();
-			this.loadDurationImage(false);
-		}
-	}
-	
-	public void redrawPlayingMode(){
-		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
-			this.pianoComposite.redraw();
-		}
-	}
-	
-	public void dispose(){
-		super.dispose();
-		this.image.dispose();
-		this.config.dispose();
-	}
-	
-	public void loadProperties(){
-		this.scale.setText(TuxGuitar.getProperty("scale"));
-		this.settings.setToolTipText(TuxGuitar.getProperty("settings"));
-		this.loadScaleName();
-		this.layout(true,true);
-	}
-	
-	public void loadIcons(){
-		this.getShell().setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-		this.settings.setImage(TuxGuitar.instance().getIconManager().getSettings());
-		this.loadDurationImage(true);
-		this.layout(true,true);
-	}
-	
-	public void loadScale(){
-		this.loadScaleName();
-		this.setChanges(true);
-	}
-	
-	protected void configure(){
-		this.config.configure(getShell());
-		this.setChanges(true);
-		this.redraw();
-	}
-	
-	public Composite getPianoComposite() {
-		return this.pianoComposite;
-	}
-	
-	private class PianoListener implements PaintListener,MouseListener {
-		
-		public PianoListener(){
-			super();
-		}
-		
-		public void paintControl(PaintEvent e) {
-			if(!TuxGuitar.instance().isLocked()){
-				TuxGuitar.instance().lock();
-				updateEditor();
-				
-				TGPainter painter = new TGPainter(e.gc);
-				painter.drawImage(Piano.this.image,0,0);
-				
-				//pinto notas
-				if(Piano.this.beat != null){
-					for(int v = 0; v < Piano.this.beat.countVoices(); v ++){
-						TGVoice voice = Piano.this.beat.getVoice( v );
-						Iterator it = voice.getNotes().iterator();
-						while(it.hasNext()){
-							TGNote note = (TGNote)it.next();
-							paintNote(painter, getRealNoteValue( note ) );
-						}
-					}
-				}
-				TuxGuitar.instance().unlock();
-			}
-		}
-		
-		public void mouseUp(MouseEvent e) {
-			getPianoComposite().setFocus();
-			if(e.button == 1){
-				if(!TuxGuitar.instance().getPlayer().isRunning() && !TuxGuitar.instance().isLocked() && !ActionLock.isLocked()){
-					ActionLock.lock();
-					if( getExternalBeat() == null ){
-						hit(e.x, e.y);
-					}else{
-						setExternalBeat( null );
-					}
-					afterAction();
-					ActionLock.unlock();
-				}
-			}else{
-				TuxGuitar.instance().getAction(GoRightAction.NAME).process(e);
-			}
-		}
-		
-		public void mouseDoubleClick(MouseEvent e) {
-			//Not implemented
-		}
-		
-		public void mouseDown(MouseEvent e) {
-			//Not implemented
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/piano/PianoConfig.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/piano/PianoConfig.java
deleted file mode 100644
index 8f6d7fd..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/piano/PianoConfig.java
+++ /dev/null
@@ -1,240 +0,0 @@
-package org.herac.tuxguitar.gui.editors.piano;
-
-import java.util.Properties;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.ColorDialog;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-public class PianoConfig {
-	
-	private static final int MINIMUM_CONTROL_WIDTH = 180;
-	private static final int MINIMUM_BUTTON_WIDTH = 80;
-	private static final int MINIMUM_BUTTON_HEIGHT = 25;
-	
-	private Color colorNatural;
-	private Color colorNotNatural;
-	private Color colorNote;
-	private Color colorScale;
-	
-	public PianoConfig(){
-		super();
-	}
-	
-	public Color getColorNatural() {
-		return this.colorNatural;
-	}
-	
-	public Color getColorNotNatural() {
-		return this.colorNotNatural;
-	}
-	
-	public Color getColorNote() {
-		return this.colorNote;
-	}
-	
-	public Color getColorScale() {
-		return this.colorScale;
-	}
-	
-	public void load(){
-		Display display = TuxGuitar.instance().getDisplay();
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		this.colorNatural = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_KEY_NATURAL));
-		this.colorNotNatural = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL));
-		this.colorNote = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_NOTE));
-		this.colorScale = new Color(display,config.getRGBConfigValue(TGConfigKeys.PIANO_COLOR_SCALE));
-	}
-	
-	public void defaults(){
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		Properties defaults = config.getDefaults();
-		config.setProperty(TGConfigKeys.PIANO_COLOR_KEY_NATURAL,defaults.getProperty(TGConfigKeys.PIANO_COLOR_KEY_NATURAL));
-		config.setProperty(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL,defaults.getProperty(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL));
-		config.setProperty(TGConfigKeys.PIANO_COLOR_NOTE,defaults.getProperty(TGConfigKeys.PIANO_COLOR_NOTE));
-		config.setProperty(TGConfigKeys.PIANO_COLOR_SCALE,defaults.getProperty(TGConfigKeys.PIANO_COLOR_SCALE));
-	}
-	
-	public void save(RGB rgbNatural,RGB rgbNotNatural,RGB rgbNote,RGB rgbScale){
-		TGConfigManager config = TuxGuitar.instance().getConfig();
-		config.setProperty(TGConfigKeys.PIANO_COLOR_KEY_NATURAL,rgbNatural);
-		config.setProperty(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL,rgbNotNatural);
-		config.setProperty(TGConfigKeys.PIANO_COLOR_NOTE,rgbNote);
-		config.setProperty(TGConfigKeys.PIANO_COLOR_SCALE,rgbScale);
-	}
-	
-	public void dispose(){
-		this.colorNatural.dispose();
-		this.colorNotNatural.dispose();
-		this.colorNote.dispose();
-		this.colorScale.dispose();
-	}
-	
-	public void configure(Shell shell) {
-		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("piano.settings"));
-		
-		// ----------------------------------------------------------------------
-		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout(2, false));
-		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		group.setText(TuxGuitar.getProperty("piano.settings"));
-		
-		// Color
-		final RGB rgbNatural = getColorChooser(group,TuxGuitar.getProperty("piano.natural-key-color"), this.colorNatural.getRGB());
-		final RGB rgbNotNatural = getColorChooser(group,TuxGuitar.getProperty("piano.not-natural-key-color"), this.colorNotNatural.getRGB());
-		final RGB rgbNote = getColorChooser(group,TuxGuitar.getProperty("piano.note-color"), this.colorNote.getRGB());
-		final RGB rgbScale = getColorChooser(group,TuxGuitar.getProperty("piano.scale-note-color"), this.colorScale.getRGB());
-		
-		// ------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(3, false));
-		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
-		
-		final Button buttonDefaults = new Button(buttons, SWT.PUSH);
-		buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
-		buttonDefaults.setLayoutData(getButtonData());
-		buttonDefaults.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-				defaults();
-				applyChanges();
-			}
-		});
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-				
-				save(rgbNatural, rgbNotNatural,rgbNote, rgbScale);
-				applyChanges();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	protected void applyChanges(){
-		this.dispose();
-		this.load();
-	}
-	
-	private RGB getColorChooser(final Composite parent,String title,RGB rgb){
-		Label label = new Label(parent, SWT.NULL);
-		label.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
-		label.setText(title);
-		
-		ButtonColor button = new ButtonColor(parent, SWT.PUSH, TuxGuitar.getProperty("choose"));
-		button.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
-		button.loadColor(rgb);
-		
-		return button.getValue();
-	}
-	
-	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
-		GridData data = new GridData();
-		data.minimumWidth = minimumWidth;
-		data.horizontalAlignment = horizontalAlignment;
-		data.verticalAlignment = SWT.DEFAULT;
-		data.grabExcessHorizontalSpace = true;
-		data.grabExcessVerticalSpace = true;
-		return data;
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
-		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
-		return data;
-	}
-	
-	private class ButtonColor {
-		protected Button button;
-		protected Color color;
-		protected RGB value;
-		
-		public ButtonColor(Composite parent, int style, String text){
-			this.value = new RGB(0,0,0);
-			this.button = new Button(parent, style);			
-			this.button.setText(text);
-			this.addListeners();
-		}
-		
-		protected void setLayoutData(Object layoutData){
-			this.button.setLayoutData(layoutData);
-		}
-		
-		protected void loadColor(RGB rgb){
-			this.value.red = rgb.red;
-			this.value.green = rgb.green;
-			this.value.blue = rgb.blue;
-			
-			Color color = new Color(this.button.getDisplay(), this.value);
-			this.button.setForeground(color);
-			this.disposeColor();
-			this.color = color;
-		}
-		
-		protected void disposeColor(){
-			if(this.color != null && !this.color.isDisposed()){
-				this.color.dispose();
-				this.color = null;
-			}
-		}
-		
-		private void addListeners(){
-			this.button.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent event) {
-					ColorDialog dlg = new ColorDialog(ButtonColor.this.button.getShell());
-					dlg.setRGB(ButtonColor.this.value);
-					dlg.setText(TuxGuitar.getProperty("choose-color"));
-					RGB result = dlg.open();
-					if (result != null) {
-						ButtonColor.this.loadColor(result);
-					}
-				}
-			});
-			this.button.addDisposeListener(new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-					ButtonColor.this.disposeColor();
-				}
-			});
-		}
-		
-		protected RGB getValue(){
-			return this.value;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/Caret.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/Caret.java
deleted file mode 100644
index 7340c21..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/Caret.java
+++ /dev/null
@@ -1,351 +0,0 @@
-/*
- * Created on 30-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.util.MidiTickUtil;
-import org.herac.tuxguitar.song.managers.TGMeasureManager;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGVelocities;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class Caret {
-	private Tablature tablature;
-	private TGTrackImpl selectedTrack;
-	private TGMeasureImpl selectedMeasure;
-	private TGBeat selectedBeat;
-	private TGNote selectedNote;
-	private TGDuration selectedDuration;
-	private long position;
-	private int string;
-	private int voice;
-	private int velocity;
-	private boolean restBeat;
-	private boolean changes;
-	
-	public Caret(Tablature tablature) {
-		this.tablature = tablature;
-		this.selectedDuration = getSongManager().getFactory().newDuration();
-		this.string = 1;
-		this.velocity = TGVelocities.DEFAULT;
-		this.changes = false;
-	}
-	
-	public synchronized void update(){
-		int trackNumber = (this.selectedTrack != null)?this.selectedTrack.getNumber():1;
-		update(trackNumber,this.position,this.string);
-	}
-	
-	public synchronized void update(int trackNumber){
-		update(trackNumber,this.position,this.string);
-	}
-	
-	public synchronized void update(int trackNumber,long position,int string){
-		update(trackNumber, position, string,getVelocity());
-	}
-	
-	public synchronized void update(int trackNumber,long position,int string,int velocity) {
-		long realPosition = ((TuxGuitar.instance().getPlayer().isRunning())?MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition()):position);
-		TGTrackImpl track = findTrack(trackNumber); 
-		TGMeasureImpl measure = findMeasure(realPosition,track);
-		TGBeat beat = findBeat(realPosition,measure);
-		if(track != null && measure != null && beat != null){
-			moveTo(track, measure, beat,string);
-		}
-		setVelocity(velocity);
-	}
-	
-	public void moveTo(TGTrackImpl selectedTrack, TGMeasureImpl selectedMeasure, TGBeat selectedBeat,int string) {
-		this.selectedTrack = selectedTrack;
-		this.selectedMeasure = selectedMeasure;
-		this.selectedBeat = selectedBeat;
-		this.string = string;
-		this.updatePosition();
-		this.updateDuration();
-		this.updateString();
-		this.updateNote();
-		this.updateBeat();
-		this.checkTransport();
-		this.setChanges(true);
-	}
-	
-	private TGTrackImpl findTrack(int number){
-		TGTrackImpl track = (TGTrackImpl)getSongManager().getTrack(number);
-		if(track == null){
-			track = (TGTrackImpl)getSongManager().getFirstTrack();
-		}
-		return track;
-	}
-	
-	private TGMeasureImpl findMeasure(long position,TGTrackImpl track){
-		TGMeasureImpl measure = null;
-		if(track != null){
-			measure = (TGMeasureImpl)getSongManager().getTrackManager().getMeasureAt(track,position);
-			if(measure == null){
-				measure = (TGMeasureImpl)getSongManager().getTrackManager().getFirstMeasure(track);
-			}
-		}
-		return measure;
-	}
-	
-	private TGBeat findBeat(long position,TGMeasureImpl measure){
-		TGBeat beat = null;
-		if(measure != null){
-			TGMeasureManager manager = getSongManager().getMeasureManager();
-			TGVoice voice = manager.getVoiceIn(measure, position, getVoice());
-			if( voice != null ){
-				beat = voice.getBeat();
-			}
-			if (beat == null) {
-				beat = manager.getFirstBeat(measure.getBeats());
-			}
-		}
-		return beat;
-	}
-	
-	public synchronized void goToTickPosition(){
-		long start = MidiTickUtil.getStart(TuxGuitar.instance().getPlayer().getTickPosition());
-		this.update(this.selectedTrack.getNumber(),start,this.string);
-		this.setChanges(true);
-	}
-	
-	public void paintCaret(ViewLayout layout,TGPainter painter) {
-		if(!TuxGuitar.instance().getPlayer().isRunning()){
-			if (this.selectedMeasure != null && this.selectedBeat instanceof TGBeatImpl) {
-				TGBeatImpl beat = (TGBeatImpl)this.selectedBeat;
-				if( (layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0){
-					boolean expectedVoice = (getSelectedNote() == null || getSelectedNote().getVoice().getIndex() == getVoice());
-					int stringSpacing = this.tablature.getViewLayout().getStringSpacing();
-					int leftSpacing = beat.getMeasureImpl().getHeaderImpl().getLeftSpacing(layout);
-					int x = this.selectedMeasure.getPosX() + beat.getPosX() + beat.getSpacing() + leftSpacing - 5;
-					int y = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + ((this.string * stringSpacing) - stringSpacing) - 7;
-					int width = 14;
-					int height = 14;
-					layout.setCaretStyle(painter, expectedVoice);
-					painter.initPath();
-					painter.setAntialias(false);
-					painter.addRectangle(x, y, width, height);
-					painter.closePath();
-				}
-				else if( (layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0){
-					int line = this.tablature.getViewLayout().getScoreLineSpacing();
-					int leftSpacing = beat.getMeasureImpl().getHeaderImpl().getLeftSpacing(layout);
-					float xMargin = (2.0f * layout.getScale());
-					float x1 = this.selectedMeasure.getPosX() + beat.getPosX() + beat.getSpacing() + leftSpacing - xMargin;
-					float x2 = (x1 + layout.getResources().getScoreNoteWidth() + xMargin);
-					float y1 = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_TOP) - line;
-					float y2 = this.selectedMeasure.getPosY() + this.selectedMeasure.getTs().getPosition(TGTrackSpacing.POSITION_BOTTOM);
-					layout.setCaretStyle(painter, true);
-					painter.initPath();
-					painter.moveTo(x1, y1);
-					painter.lineTo(x1 + ((x2 - x1) / 2f), y1 + (line / 2f));
-					painter.lineTo(x2, y1);
-					painter.moveTo(x1, y2 + line);
-					painter.lineTo(x1 + ((x2 - x1) / 2f), y2 + (line / 2f));
-					painter.lineTo(x2, y2 + line);
-					painter.closePath();
-				}
-			}
-		}
-	}
-	
-	public boolean moveRight() {
-		if (getSelectedBeat() != null) {
-			TGMeasureImpl measure = getMeasure();
-			TGVoice voice = getSongManager().getMeasureManager().getNextVoice(measure.getBeats(),getSelectedBeat(), getVoice());
-			TGBeat beat = (voice != null ? voice.getBeat() : null );
-			if (beat == null){
-				//si no habia mas componentes. busco el siguiente compas
-				measure = (TGMeasureImpl)getSongManager().getTrackManager().getNextMeasure(getMeasure());
-				if (measure == null) {
-					return false;
-				}
-				voice = getSongManager().getMeasureManager().getFirstVoice(measure.getBeats(), getVoice());
-				beat = (voice != null ? voice.getBeat() : null );
-				if( beat == null ){
-					beat = getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
-				}
-			}
-			if(beat != null){
-				moveTo(getTrack(), measure, beat, getStringNumber());
-			}
-		}
-		return true;
-	}
-	
-	public void moveLeft() {
-		if (getSelectedBeat() != null) {
-			TGMeasureImpl measure = getMeasure();
-			TGVoice voice = getSongManager().getMeasureManager().getPreviousVoice(measure.getBeats(),getSelectedBeat(), getVoice());
-			TGBeat beat = (voice != null ? voice.getBeat() : null );
-			if (beat == null) {
-				//si no habia mas componentes. busco el compas anterior
-				measure = (TGMeasureImpl)getSongManager().getTrackManager().getPrevMeasure(getMeasure());
-				if (measure == null) {
-					return;
-				}
-				voice = getSongManager().getMeasureManager().getLastVoice(measure.getBeats(), getVoice());
-				beat = (voice != null ? voice.getBeat() : null );
-				if( beat == null ){
-					beat = getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
-				}
-			}
-			if(beat != null){
-				moveTo(getTrack(), measure, beat, getStringNumber());
-			}
-		}
-	}
-	
-	/**
-	 * Luego de mover el Caret. cambia la duracion seleccionada por la del componente. solo si lo que resta del compas no esta vacio
-	 */
-	private void updateDuration() {
-		if (this.selectedBeat != null && !this.selectedBeat.getVoice(getVoice()).isRestVoice()) {
-			this.selectedBeat.getVoice(getVoice()).getDuration().copy(this.selectedDuration);
-		}
-	}
-	
-	public void moveUp() {
-		int stringCount = this.selectedTrack.stringCount() ;
-		int nextString = (( (this.string - 2 + stringCount) % stringCount) + 1);
-		setStringNumber(nextString);
-	}
-	
-	public void moveDown() {
-		int stringCount = this.selectedTrack.stringCount() ;
-		int nextString = ( (this.string  % stringCount) + 1);
-		setStringNumber(nextString);
-	}
-	
-	public void setStringNumber(int number){
-		this.string = number;
-		this.updateNote();
-	}
-	
-	public int getStringNumber(){
-		return this.string;
-	}
-	
-	public long getPosition() {
-		return this.position;
-	}
-	
-	public TGMeasureImpl getMeasure() {
-		return this.selectedMeasure;
-	}
-	
-	public TGTrackImpl getTrack() {
-		return this.selectedTrack;
-	}
-	
-	public TGDuration getDuration() {
-		return this.selectedDuration;
-	}
-	
-	public void setSelectedDuration(TGDuration selectedDuration) {
-		this.selectedDuration = selectedDuration;
-	}
-	
-	public TGString getSelectedString() {
-		List strings = this.selectedTrack.getStrings();
-		Iterator it = strings.iterator();
-		while (it.hasNext()) {
-			TGString instrumentString = (TGString) it.next();
-			if (instrumentString.getNumber() == this.string) {
-				return instrumentString;
-			}
-		}
-		return null;
-	}
-	
-	public void changeDuration(TGDuration duration){
-		getSongManager().getMeasureManager().changeDuration(getMeasure(),getSelectedBeat(),duration,getVoice(), true);
-		setChanges(true);
-	}
-	
-	private void updatePosition(){
-		this.position = getSelectedBeat().getStart();
-	}
-	
-	private void updateString(){
-		if(this.string < 1 || this.string > getTrack().stringCount() ){
-			this.string = 1;
-		}
-	}
-	
-	private void checkTransport(){
-		TuxGuitar.instance().getTransport().gotoMeasure(getMeasure().getHeader());
-	}
-	
-	public boolean hasChanges() {
-		return this.changes;
-	}
-	
-	public void setChanges(boolean changes) {
-		this.changes = changes;
-	}
-	
-	public int getVelocity() {
-		return this.velocity;
-	}
-	
-	public void setVelocity(int velocity) {
-		this.velocity = velocity;
-	}
-	
-	private void updateNote(){
-		this.selectedNote = null;
-		
-		TGString string = getSelectedString();
-		if( string != null ){
-			this.selectedNote = getSongManager().getMeasureManager().getNote(getMeasure(),getPosition(),string.getNumber());
-		}
-	}
-	
-	public TGNote getSelectedNote(){
-		return this.selectedNote;
-	}
-	
-	private void updateBeat(){
-		this.restBeat = this.selectedBeat.isRestBeat();
-	}
-	
-	public TGBeatImpl getSelectedBeat(){
-		return (TGBeatImpl)this.selectedBeat;
-	}
-	
-	public TGSongManager getSongManager(){
-		return this.tablature.getSongManager();
-	}
-	
-	public int getVoice() {
-		return this.voice;
-	}
-	
-	public void setVoice(int voice) {
-		this.voice = voice;
-		this.update();
-	}
-	
-	public boolean isRestBeatSelected(){
-		return this.restBeat;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatGroup.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatGroup.java
deleted file mode 100644
index 008c791..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatGroup.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-public class TGBeatGroup {
-	private static final int SCORE_MIDDLE_KEYS[] = new int[]{55,40,40,50};
-	private static final int SCORE_SHARP_POSITIONS[] = new int[]{7,7,6,6,5,4,4,3,3,2,2,1};
-	private static final int SCORE_FLAT_POSITIONS[] = new int[]{7,6,6,5,5,4,3,3,2,2,1,1};
-	
-	public static final int DIRECTION_NOT_SETTED = 0;
-	public static final int DIRECTION_UP = 1;
-	public static final int DIRECTION_DOWN = 2;
-	
-	private static final int UP_OFFSET = 28;
-	private static final int DOWN_OFFSET = 35;
-	
-	private int voice;
-	private int direction;
-	private List voices;
-	private TGNoteImpl firstMinNote;
-	private TGNoteImpl firstMaxNote;
-	private TGNoteImpl lastMinNote;
-	private TGNoteImpl lastMaxNote;
-	private TGNoteImpl maxNote;
-	private TGNoteImpl minNote;
-	
-	public TGBeatGroup(int voice){
-		this.voice = voice;
-		this.voices = new ArrayList();
-		this.direction = DIRECTION_NOT_SETTED;
-		this.firstMinNote = null;
-		this.firstMaxNote = null;
-		this.lastMinNote = null;
-		this.lastMaxNote = null;
-		this.maxNote = null;
-		this.minNote = null;
-	}
-	
-	public void check(TGVoiceImpl voice){
-		this.check(voice.getMaxNote());
-		this.check(voice.getMinNote());
-		this.voices.add( voice );
-		if( voice.getDirection() != TGVoice.DIRECTION_NONE ){
-			if( voice.getDirection() == TGVoice.DIRECTION_UP ){
-				this.direction = DIRECTION_UP;
-			}
-			else if( voice.getDirection() == TGVoice.DIRECTION_DOWN ){
-				this.direction = DIRECTION_DOWN;
-			}
-		}
-	}
-	
-	private void check(TGNoteImpl note){
-		int value = note.getRealValue();
-		
-		//FIRST MIN NOTE
-		if(this.firstMinNote == null || note.getVoice().getBeat().getStart() < this.firstMinNote.getVoice().getBeat().getStart()){
-			this.firstMinNote = note;
-		}else if(note.getVoice().getBeat().getStart() == this.firstMinNote.getVoice().getBeat().getStart()){
-			if(note.getRealValue() < this.firstMinNote.getRealValue()){
-				this.firstMinNote = note;
-			}
-		}
-		//FIRST MAX NOTE
-		if(this.firstMaxNote == null || note.getVoice().getBeat().getStart() < this.firstMaxNote.getVoice().getBeat().getStart()){
-			this.firstMaxNote = note;
-		}else if(note.getVoice().getBeat().getStart() == this.firstMaxNote.getVoice().getBeat().getStart()){
-			if(note.getRealValue() > this.firstMaxNote.getRealValue()){
-				this.firstMaxNote = note;
-			}
-		}
-		
-		//LAST MIN NOTE
-		if(this.lastMinNote == null || note.getVoice().getBeat().getStart() > this.lastMinNote.getVoice().getBeat().getStart()){
-			this.lastMinNote = note;
-		}else if(note.getVoice().getBeat().getStart() == this.lastMinNote.getVoice().getBeat().getStart()){
-			if(note.getRealValue() < this.lastMinNote.getRealValue()){
-				this.lastMinNote = note;
-			}
-		}
-		//LAST MIN NOTE
-		if(this.lastMaxNote == null || note.getVoice().getBeat().getStart() > this.lastMaxNote.getVoice().getBeat().getStart()){
-			this.lastMaxNote = note;
-		}else if(note.getVoice().getBeat().getStart() == this.lastMaxNote.getVoice().getBeat().getStart()){
-			if(note.getRealValue() > this.lastMaxNote.getRealValue()){
-				this.lastMaxNote = note;
-			}
-		}
-		
-		if(this.maxNote == null || value > this.maxNote.getRealValue()){
-			this.maxNote = note;
-		}
-		if(this.minNote == null || value < this.minNote.getRealValue()){
-			this.minNote = note;
-		}
-	}
-	
-	public void finish(ViewLayout layout, TGMeasureImpl measure){
-		if( this.direction == DIRECTION_NOT_SETTED ){
-			if (measure.getNotEmptyVoices() > 1 ){
-				this.direction = this.voice == 0 ? DIRECTION_UP : DIRECTION_DOWN;
-			}else if ( (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){
-				this.direction = DIRECTION_DOWN;
-			}else{
-				int max = Math.abs(this.minNote.getRealValue() - (SCORE_MIDDLE_KEYS[measure.getClef() - 1] + 100));
-				int min = Math.abs(this.maxNote.getRealValue() - (SCORE_MIDDLE_KEYS[measure.getClef() - 1] - 100));
-				if(max > min){
-					this.direction = DIRECTION_UP;
-				}else{
-					this.direction = DIRECTION_DOWN;
-				}
-			}
-		}
-	}
-	
-	public List getVoices(){
-		return this.voices;
-	}
-	
-	public int getY1(ViewLayout layout,TGNoteImpl note,int key,int clef){
-		double scale = (layout.getScoreLineSpacing() / 2.00);
-		int noteValue = note.getRealValue();
-		
-		int scoreLineY = 0;
-		if(key <= 7){
-			scoreLineY = (int)((SCORE_SHARP_POSITIONS[noteValue % 12]) * scale - (7 * (noteValue / 12)) * scale);
-		}else{
-			scoreLineY = (int)((SCORE_FLAT_POSITIONS[noteValue % 12]) * scale - (7 * (noteValue / 12)) * scale);
-		}
-		
-		scoreLineY += TGMeasureImpl.SCORE_KEY_OFFSETS[clef - 1] * scale;
-		
-		return scoreLineY;
-	}
-	
-	public int getY2(ViewLayout layout,int x,int key,int clef){
-		int maxDistance = 10;
-		float upOffset = TGBeatGroup.getUpOffset(layout);
-		float downOffset = TGBeatGroup.getDownOffset(layout);
-		if(this.direction == DIRECTION_DOWN){
-			if(this.minNote != this.firstMinNote && this.minNote != this.lastMinNote){
-				return (int) (getY1(layout,this.minNote,key,clef) + downOffset);
-			}
-			
-			int y = 0;
-			int x1 = this.firstMinNote.getPosX() + this.firstMinNote.getBeatImpl().getSpacing();
-			int x2 = this.lastMinNote.getPosX() + this.lastMinNote.getBeatImpl().getSpacing();
-			int y1 =  (int) (getY1(layout,this.firstMinNote,key,clef) +  downOffset);
-			int y2 =  (int) (getY1(layout,this.lastMinNote,key,clef) +  downOffset);
-			
-			if(y1 > y2 && (y1 - y2) > maxDistance) y2 = (y1 - maxDistance);
-			if(y2 > y1 && (y2 - y1) > maxDistance) y1 = (y2 - maxDistance);
-			
-			//int y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x));
-			if( (y1 - y2) != 0 && (x1 - x2) != 0 && (x1 - x) != 0){
-				y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x));
-			}
-			return y1 - y;
-		}else if(this.maxNote != this.firstMaxNote && this.maxNote != this.lastMaxNote){
-			return (int)(getY1(layout,this.maxNote,key,clef) - upOffset);
-		}else{
-			int y = 0;
-			int x1 = this.firstMaxNote.getPosX() + this.firstMaxNote.getBeatImpl().getSpacing();
-			int x2 = this.lastMaxNote.getPosX() + this.lastMaxNote.getBeatImpl().getSpacing();
-			int y1 = (int)(getY1(layout,this.firstMaxNote,key,clef) - upOffset);
-			int y2 = (int)(getY1(layout,this.lastMaxNote,key,clef) - upOffset);
-			
-			if(y1 < y2 && (y2 - y1) > maxDistance) y2 = (y1 + maxDistance);
-			if(y2 < y1 && (y1 - y2) > maxDistance) y1 = (y2 + maxDistance);
-			
-			if( (y1 - y2) != 0 && (x1 - x2) != 0 && (x1 - x) != 0){
-				y = (int)((((double)y1 -(double)y2) / ((double)x1 - (double)x2)) * ((double)x1 - (double)x));
-			}
-			return y1 - y;
-		}
-	}
-	
-	public int getDirection() {
-		return this.direction;
-	}
-	
-	public TGNoteImpl getMinNote(){
-		return this.minNote;
-	}
-	
-	public TGNoteImpl getMaxNote(){
-		return this.maxNote;
-	}
-	
-	public static float getUpOffset(ViewLayout layout){
-		float scale = (layout.getScoreLineSpacing() / 8.0f);
-		return (UP_OFFSET * scale);
-	}
-	
-	public static float getDownOffset(ViewLayout layout){
-		float scale = (layout.getScoreLineSpacing() / 8.0f);
-		return (DOWN_OFFSET * scale);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatImpl.java
deleted file mode 100644
index 454d1fe..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatImpl.java
+++ /dev/null
@@ -1,404 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGNoteEffect;
-import org.herac.tuxguitar.song.models.TGStroke;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-public class TGBeatImpl extends TGBeat{
-	/**
-	 * desviacion a la izquierda
-	 */
-	public static final int JOINED_TYPE_NONE_LEFT = 1;
-	/**
-	 * desviacion a la derecha
-	 */
-	public static final int JOINED_TYPE_NONE_RIGHT = 2;
-	/**
-	 * Union a la izquierda
-	 */
-	public static final int JOINED_TYPE_LEFT = 3;
-	/**
-	 * Union a la derecha
-	 */
-	public static final int JOINED_TYPE_RIGHT = 4;
-	
-	private int posX;
-	private int width;
-	private TGNoteImpl maxNote;
-	private TGNoteImpl minNote;
-	private boolean[] usedStrings;
-	private int joinedType;
-	private boolean joinedGreaterThanQuarter;
-	private TGBeatImpl join1;
-	private TGBeatImpl join2;
-	private TGBeatImpl previous;
-	private TGBeatImpl next;
-	private TGBeatGroup group;
-	
-	private TGBeatSpacing bs;
-	
-	private boolean accentuated;
-	private boolean heavyAccentuated;
-	private boolean harmonic;
-	private boolean tapping;
-	private boolean slapping;
-	private boolean popping;
-	private boolean palmMute;
-	private boolean vibrato;
-	private boolean trill;
-	private boolean fadeIn;
-	
-	public TGBeatImpl(TGFactory factory){
-		super(factory);
-	}
-	
-	public int getPosX() {
-		return this.posX;
-	}
-	
-	public void setPosX(int posX) {
-		this.posX = posX;
-	}
-	
-	public int getMinimumWidth() {
-		return this.width;
-	}
-	
-	public void setWidth(int width) {
-		this.width = width;
-	}
-	
-	public TGNoteImpl getMinNote(){
-		return this.minNote;
-	}
-	
-	public TGNoteImpl getMaxNote(){
-		return this.maxNote;
-	}
-	
-	public TGMeasureImpl getMeasureImpl() {
-		return (TGMeasureImpl)getMeasure();
-	}
-	
-	public boolean[] getUsedStrings() {
-		if(this.usedStrings == null){
-			this.usedStrings = new boolean[getMeasure().getTrack().stringCount()];
-		}
-		return this.usedStrings;
-	}
-	
-	public TGBeatImpl getJoin1() {
-		return this.join1;
-	}
-	
-	public void setJoin1(TGBeatImpl join1) {
-		this.join1 = join1;
-	}
-	
-	public TGBeatImpl getJoin2() {
-		return this.join2;
-	}
-	
-	public void setJoin2(TGBeatImpl join2) {
-		this.join2 = join2;
-	}
-	
-	public boolean isJoinedGreaterThanQuarter() {
-		return this.joinedGreaterThanQuarter;
-	}
-	
-	public void setJoinedGreaterThanQuarter(boolean joinedGreaterThanQuarter) {
-		this.joinedGreaterThanQuarter = joinedGreaterThanQuarter;
-	}
-	
-	public int getJoinedType() {
-		return this.joinedType;
-	}
-	
-	public void setJoinedType(int joinedType) {
-		this.joinedType = joinedType;
-	}
-	
-	public TGBeatImpl getPreviousBeat() {
-		return this.previous;
-	}
-
-	public void setPreviousBeat(TGBeatImpl previous) {
-		this.previous = previous;
-	}
-
-	public TGBeatImpl getNextBeat() {
-		return this.next;
-	}
-
-	public void setNextBeat(TGBeatImpl next) {
-		this.next = next;
-	}
-
-	public TGBeatGroup getBeatGroup() {
-		return this.group;
-	}
-	
-	public void setBeatGroup(TGBeatGroup group) {
-		this.group = group;
-	}
-	
-	public int getSpacing(){
-		return getMeasureImpl().getBeatSpacing(this);
-	}
-	
-	public boolean isPlaying(ViewLayout layout){
-		return (getMeasureImpl().isPlaying(layout) && TuxGuitar.instance().getEditorCache().isPlaying(getMeasure(),this));
-	}
-	
-	public TGVoiceImpl getVoiceImpl(int index){
-		TGVoice voice = super.getVoice(index);
-		if(voice instanceof TGVoiceImpl){
-			return (TGVoiceImpl)voice;
-		}
-		return null;
-	}
-	
-	public void reset(){
-		this.maxNote = null;
-		this.minNote = null;
-		this.usedStrings = new boolean[getMeasure().getTrack().stringCount()];
-	}
-	
-	public void check( ViewLayout layout , TGNoteImpl note){
-		int value = note.getRealValue();
-		if(this.maxNote == null || value > this.maxNote.getRealValue()){
-			this.maxNote = note;
-		}
-		if(this.minNote == null || value < this.minNote.getRealValue()){
-			this.minNote = note;
-		}
-		this.getUsedStrings();
-		this.usedStrings[note.getString() - 1] = true;
-	}
-	
-	public void resetEffectsSpacing( ViewLayout layout ){
-		this.bs = new TGBeatSpacing( layout );
-		this.accentuated = false;
-		this.heavyAccentuated = false;
-		this.harmonic = false;
-		this.tapping = false;
-		this.slapping = false;
-		this.popping = false;
-		this.palmMute = false;
-		this.fadeIn = false;
-		this.vibrato = false;
-		this.trill = false;
-	}
-	
-	public void updateEffectsSpacing(ViewLayout layout,TGNoteEffect effect){
-		if(effect.isAccentuatedNote()){
-			this.accentuated = true;
-		}
-		if(effect.isHeavyAccentuatedNote()){
-			this.heavyAccentuated = true;
-		}
-		if(effect.isHarmonic() && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){
-			this.harmonic = true;
-		}
-		if(effect.isTapping()){
-			this.tapping = true;
-		}
-		if(effect.isSlapping()){
-			this.slapping = true;
-		}
-		if(effect.isPopping()){
-			this.popping = true;
-		}
-		if(effect.isPalmMute()){
-			this.palmMute = true;
-		}
-		if(effect.isFadeIn()){
-			this.fadeIn = true;
-		}
-		if(effect.isVibrato()){
-			this.vibrato = true;
-		}
-		if(effect.isTrill()){
-			this.trill = true;
-		}
-	}
-	
-	public int getEffectsSpacing(ViewLayout layout){
-		if(this.accentuated){
-			this.bs.setSize(TGBeatSpacing.POSITION_ACCENTUATED_EFFECT,layout.getEffectSpacing());
-		}
-		if(this.heavyAccentuated){
-			this.bs.setSize(TGBeatSpacing.POSITION_HEAVY_ACCENTUATED_EFFECT,layout.getEffectSpacing());
-		}
-		if(this.harmonic){
-			this.bs.setSize(TGBeatSpacing.POSITION_HARMONIC_EFFEC,layout.getEffectSpacing());
-		}
-		if(this.tapping){
-			this.bs.setSize(TGBeatSpacing.POSITION_TAPPING_EFFEC,layout.getEffectSpacing());
-		}
-		if(this.slapping){
-			this.bs.setSize(TGBeatSpacing.POSITION_SLAPPING_EFFEC,layout.getEffectSpacing());
-		}
-		if(this.popping){
-			this.bs.setSize(TGBeatSpacing.POSITION_POPPING_EFFEC,layout.getEffectSpacing());
-		}
-		if(this.palmMute){
-			this.bs.setSize(TGBeatSpacing.POSITION_PALM_MUTE_EFFEC,layout.getEffectSpacing());
-		}
-		if(this.fadeIn){
-			this.bs.setSize(TGBeatSpacing.POSITION_FADE_IN,layout.getEffectSpacing());
-		}
-		if(this.vibrato){
-			this.bs.setSize(TGBeatSpacing.POSITION_VIBRATO_EFFEC,layout.getEffectSpacing());
-		}
-		if(this.trill){
-			this.bs.setSize(TGBeatSpacing.POSITION_TRILL_EFFEC,layout.getEffectSpacing());
-		}
-		return this.bs.getSize();
-	}
-	
-	public void play(){
-		if(!TuxGuitar.instance().getPlayer().isRunning()){
-			new Thread(new Runnable() {
-				public void run() {
-					List notes = new ArrayList();
-					for( int v = 0; v < countVoices(); v ++){
-						notes.addAll( getVoice(v).getNotes() );
-					}
-					TuxGuitar.instance().getPlayer().playBeat(getMeasure().getTrack(),notes);
-				}
-			}).start();
-		}
-	}
-	
-	public void paint(ViewLayout layout,TGPainter painter, int fromX, int fromY/*,boolean playMode*/) {
-		if(!layout.isPlayModeEnabled() && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){
-			paintExtraLines(painter, layout,fromX, fromY);
-		}
-		for(int v = 0; v < TGBeat.MAX_VOICES; v ++){
-			getVoiceImpl(v).paint(layout, painter, fromX, fromY);
-		}
-		if(!layout.isPlayModeEnabled()){
-			if(isChordBeat()){
-				TGChordImpl chord = (TGChordImpl)getChord();
-				chord.paint(layout,painter,fromX,fromY);
-			}
-			if(getStroke().getDirection() != TGStroke.STROKE_NONE){
-				paintStroke(layout, painter, fromX, fromY);
-			}
-		}
-	}
-	
-	public void paintExtraLines(TGPainter painter,ViewLayout layout,int fromX, int fromY){
-		if(!isRestBeat()){
-			int scoreY = (fromY + getMeasureImpl().getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES));
-			paintExtraLines(painter,layout,getMinNote(), fromX, scoreY);
-			paintExtraLines(painter,layout,getMaxNote(), fromX, scoreY);
-		}
-	}
-	
-	private void paintExtraLines(TGPainter painter,ViewLayout layout,TGNoteImpl note,int fromX,int fromY){
-		float scale = layout.getScale();
-		int y = fromY + note.getScorePosY();
-		int x = fromX + getPosX() + getSpacing();
-		float x1 = x - (4 * scale);
-		float x2 = x + (12 * scale);
-		
-		int scoreLineSpacing = layout.getScoreLineSpacing();
-		
-		layout.setLineStyle(painter);
-		if(y < fromY){
-			for(int i = fromY;i > y;i -= scoreLineSpacing){
-				painter.initPath();
-				painter.setAntialias(false);
-				painter.moveTo(x1,i);
-				painter.lineTo(x2,i);
-				painter.closePath();
-			}
-		}else if(y > (fromY + (scoreLineSpacing * 4))){
-			for(int i = (fromY +(scoreLineSpacing * 5));i < (y + scoreLineSpacing);i += scoreLineSpacing){
-				painter.initPath();
-				painter.setAntialias(false);
-				painter.moveTo(x1,i);
-				painter.lineTo(x2,i);
-				painter.closePath();
-			}
-		}
-	}
-	
-	public void paintStroke(ViewLayout layout,TGPainter painter, int fromX, int fromY){
-		int style = layout.getStyle();
-		float scale = layout.getScale();
-		float x = (fromX + getPosX() + getSpacing() + ( 12f * scale ));
-		float y1 = 0;
-		float y2 = 0;
-		if((style & ViewLayout.DISPLAY_SCORE) != 0){
-			float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); 
-			y1 = (y + layout.getScoreLineSpacing());
-			y2 = (y + (getMeasureImpl().getTrackImpl().getScoreHeight() - layout.getScoreLineSpacing()));
-		}
-		if((style & ViewLayout.DISPLAY_TABLATURE) != 0){
-			float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE));
-			y1 = (y + layout.getStringSpacing());
-			y2 = (y + (getMeasureImpl().getTrackImpl().getTabHeight() - layout.getStringSpacing()));
-		}
-		else if((style & ViewLayout.DISPLAY_SCORE) != 0){
-			float y = (fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)); 
-			y1 = (y + layout.getScoreLineSpacing());
-			y2 = (y + (getMeasureImpl().getTrackImpl().getScoreHeight() - layout.getScoreLineSpacing()));
-		}else{
-			return;
-		}
-		if( getStroke().getDirection() == TGStroke.STROKE_UP ){
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.moveTo( x, y1 );
-			painter.lineTo( x, y2 );
-			painter.lineTo( x - (2.0f * scale), y2 - (5.0f * scale));
-			painter.moveTo( x , y2 );
-			painter.lineTo( x + (2.0f * scale), y2 - (5.0f * scale));
-			painter.closePath();
-		}else if( getStroke().getDirection() == TGStroke.STROKE_DOWN ){
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.moveTo( x, y2 );
-			painter.lineTo( x, y1 );
-			painter.lineTo( x - (2.0f * scale), y1 + (3.0f * scale));
-			painter.moveTo( x , y1 );
-			painter.lineTo( x + (2.0f * scale), y1 + (3.0f * scale));
-			painter.closePath();
-		}
-	}
-	
-	public int getPaintPosition(int index){
-		return getMeasureImpl().getTs().getPosition(index);
-	}
-	
-	public TGBeatSpacing getBs(){
-		return this.bs;
-	}
-	
-	public void removeChord(){
-		if(isChordBeat()){
-			TGChordImpl chord = (TGChordImpl)getChord();
-			chord.dispose();
-		}
-		super.removeChord();
-	}
-	
-	public void dispose(){
-		if(isChordBeat()){
-			TGChordImpl chord = (TGChordImpl)getChord();
-			chord.dispose();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatSpacing.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatSpacing.java
deleted file mode 100644
index df2194a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGBeatSpacing.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-public class TGBeatSpacing extends TGSpacing {
-	
-	/***     POSITIONS ARRAY INDICES     ***/
-	public static final int POSITION_ACCENTUATED_EFFECT = 0;
-	public static final int POSITION_HEAVY_ACCENTUATED_EFFECT = 1;
-	public static final int POSITION_HARMONIC_EFFEC = 2;
-	public static final int POSITION_TAPPING_EFFEC = 3;
-	public static final int POSITION_SLAPPING_EFFEC = 4;
-	public static final int POSITION_POPPING_EFFEC = 5;
-	public static final int POSITION_PALM_MUTE_EFFEC = 6;
-	public static final int POSITION_VIBRATO_EFFEC = 7;
-	public static final int POSITION_TRILL_EFFEC = 8;
-	public static final int POSITION_FADE_IN = 9;
-	
-	private static final int[] EFFECT_POSITIONS = new int[]{
-		POSITION_ACCENTUATED_EFFECT,
-		POSITION_HEAVY_ACCENTUATED_EFFECT,
-		POSITION_HARMONIC_EFFEC,
-		POSITION_TAPPING_EFFEC,
-		POSITION_SLAPPING_EFFEC,
-		POSITION_POPPING_EFFEC,
-		POSITION_PALM_MUTE_EFFEC,
-		POSITION_VIBRATO_EFFEC,
-		POSITION_TRILL_EFFEC,
-		POSITION_FADE_IN,
-	};
-	
-	private static final int[][] POSITIONS = new int[][]{
-		/** SCORE **/
-		EFFECT_POSITIONS ,
-		/** TABLATURE **/
-		EFFECT_POSITIONS ,
-		/** SCORE | TABLATURE **/
-		EFFECT_POSITIONS ,
-	};
-	
-	public TGBeatSpacing(ViewLayout layout) {
-		super(layout, POSITIONS, EFFECT_POSITIONS.length );
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGChordImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGChordImpl.java
deleted file mode 100644
index 31c2b59..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGChordImpl.java
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * Created on 01-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Device;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.RGB;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGString;
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGChordImpl extends TGChord {
-	
-	public static final int MAX_FRETS = 6;
-	
-	private int style;
-	private int posX;
-	private int posY;
-	private int width;
-	private int height;
-	private int tonic;
-	private int diagramWidth;
-	private int diagramHeight;
-	private int nameWidth;
-	private int nameHeight;
-	private Image diagram;
-	private Color foregroundColor;
-	private Color backgroundColor;
-	private Color noteColor;
-	private Color tonicColor;
-	private Color color;
-	private Font font;
-	private Font firstFretFont;
-	private int firstFretSpacing;
-	private int stringSpacing;
-	private int fretSpacing;
-	private int noteSize;
-	
-	private boolean editing;
-	
-	public TGChordImpl(int length) {
-		super(length);
-	}
-	
-	public boolean isEditing() {
-		return this.editing;
-	}
-	
-	public void setEditing(boolean editing) {
-		this.editing = editing;
-	}
-	
-	public void setPosX(int posX){
-		this.posX = posX;
-	}
-	
-	public void setPosY(int posY){
-		this.posY = posY;
-	}
-	
-	public int getPosY() {
-		return this.posY;
-	}
-	
-	public int getWidth(){
-		return this.width;
-	}
-	
-	public int getHeight(){
-		return this.height;
-	}
-	
-	public void setStyle(int style) {
-		this.style = style;
-	}
-	
-	public void setTonic(int tonic){
-		if(!isDisposed() && this.tonic != tonic){
-			this.dispose();
-		}
-		this.tonic = tonic;
-	}
-	
-	public Color getForegroundColor() {
-		return this.foregroundColor;
-	}
-	
-	public void setForegroundColor(Color foregroundColor) {
-		if(!isDisposed() && !isSameColor(this.foregroundColor, foregroundColor)){
-			this.dispose();
-		}
-		this.foregroundColor = foregroundColor;
-	}
-	
-	public Color getBackgroundColor() {
-		return this.backgroundColor;
-	}
-	
-	public void setBackgroundColor(Color backgroundColor) {
-		if(!isDisposed() && !isSameColor(this.backgroundColor, backgroundColor)){
-			this.dispose();
-		}
-		this.backgroundColor = backgroundColor;
-	}
-	
-	public Color getColor() {
-		return this.color;
-	}
-	
-	public void setColor(Color color) {
-		if(!isDisposed() && !isSameColor(this.color, color)){
-			this.dispose();
-		}
-		this.color = color;
-	}
-	
-	public Color getNoteColor() {
-		return this.noteColor;
-	}
-	
-	public void setNoteColor(Color noteColor) {
-		if(!isDisposed() && !isSameColor(this.noteColor, noteColor)){
-			this.dispose();
-		}
-		this.noteColor = noteColor;
-	}
-	
-	public Color getTonicColor() {
-		return this.tonicColor;
-	}
-	
-	public void setTonicColor(Color tonicColor) {
-		if(!isDisposed() && !isSameColor(this.tonicColor, tonicColor)){
-			this.dispose();
-		}
-		this.tonicColor = tonicColor;
-	}
-	
-	public int getFirstFretSpacing() {
-		return this.firstFretSpacing;
-	}
-	
-	public void setFirstFretSpacing(int firstFretSpacing) {
-		if(!isDisposed() && this.firstFretSpacing != firstFretSpacing){
-			this.dispose();
-		}
-		this.firstFretSpacing = firstFretSpacing;
-	}
-	
-	public int getFretSpacing() {
-		return this.fretSpacing;
-	}
-	
-	public void setFretSpacing(int fretSpacing) {
-		if(!isDisposed() && this.fretSpacing != fretSpacing){
-			this.dispose();
-		}
-		this.fretSpacing = fretSpacing;
-	}
-	
-	public int getStringSpacing() {
-		return this.stringSpacing;
-	}
-	
-	public void setStringSpacing(int stringSpacing) {
-		if(!isDisposed() && this.stringSpacing != stringSpacing){
-			this.dispose();
-		}
-		this.stringSpacing = stringSpacing;
-	}
-	
-	public int getNoteSize() {
-		return this.noteSize;
-	}
-	
-	public void setNoteSize(int noteSize) {
-		if(!isDisposed() && this.noteSize != noteSize){
-			this.dispose();
-		}
-		this.noteSize = noteSize;
-	}
-	
-	public Font getFont() {
-		return this.font;
-	}
-	
-	public void setFont(Font font) {
-		if(!isDisposed() && !isSameFont(this.font, font)){
-			this.dispose();
-		}
-		this.font = font;
-	}
-	
-	public Font getFirstFretFont() {
-		return this.firstFretFont;
-	}
-	
-	public void setFirstFretFont(Font firstFretFont) {
-		if(!isDisposed() && !isSameFont(this.firstFretFont, firstFretFont)){
-			this.dispose();
-		}
-		this.firstFretFont = firstFretFont;
-	}
-	
-	public void paint(ViewLayout layout, TGPainter painter, int fromX, int fromY) {
-		layout.setChordStyle(this);
-		this.setPosY(getPaintPosition(TGTrackSpacing.POSITION_CHORD));
-		this.setEditing(false);
-		this.update(painter, layout.isBufferEnabled());
-		this.paint(painter,getBeatImpl().getSpacing() + fromX + Math.round(4f * layout.getScale()), fromY);
-	}
-	
-	public void paint(TGPainter painter, int fromX, int fromY){
-		int x = (fromX + getPosX());
-		int y = (fromY + getPosY());
-		if( (this.style & ViewLayout.DISPLAY_CHORD_DIAGRAM) != 0 ){
-			if(this.diagram != null){
-				painter.drawImage(this.diagram,x - ( (this.diagramWidth - getFirstFretSpacing()) / 2) - getFirstFretSpacing() ,y);
-			}else{
-				paintDiagram(painter,x - ( (this.diagramWidth - getFirstFretSpacing()) / 2) - getFirstFretSpacing() ,y);
-			}
-		}
-		if( (this.style & ViewLayout.DISPLAY_CHORD_NAME) != 0 && getName() != null && getName().length() > 0){
-			painter.setFont(getFont());
-			painter.setForeground(getForegroundColor());
-			painter.setBackground(getBackgroundColor());
-			painter.drawString(getName(),x - (this.nameWidth / 2) , y + (this.height - this.nameHeight ) );
-		}
-	}
-	
-	public void update(TGPainter painter, boolean makeBuffer) {
-		this.width = 0;
-		this.height = 0;
-		if(getFirstFret() <= 0 ){
-			this.calculateFirstFret();
-		}
-		if( (this.style & ViewLayout.DISPLAY_CHORD_NAME) != 0 ){
-			this.updateName(painter);
-			this.width = Math.max(this.width,this.nameWidth);
-			this.height += this.nameHeight;
-		}
-		if( (this.style & ViewLayout.DISPLAY_CHORD_DIAGRAM) != 0 ){
-			this.updateDiagram( (makeBuffer ? painter.getGC().getDevice() : null ) );
-			this.width = Math.max(this.width,this.diagramWidth);
-			this.height += this.diagramHeight;
-		}
-	}
-	
-	protected void updateName(TGPainter painter){
-		String name = getName();
-		if(painter == null || name == null || name.length() == 0){
-			this.nameWidth = 0;
-			this.nameHeight = 0;
-			return;
-		}
-		Point point = painter.getStringExtent(name);
-		this.nameWidth = point.x;
-		this.nameHeight = point.y;
-	}
-	
-	protected void updateDiagram(Device device){
-		Font font = getFirstFretFont();
-		this.diagramWidth = getStringSpacing() + (getStringSpacing() * countStrings()) + ((font != null)?getFirstFretSpacing():0);
-		this.diagramHeight = getFretSpacing() + (getFretSpacing() * MAX_FRETS);
-		if(device != null && (this.diagram == null || this.diagram.isDisposed())){
-			this.diagram = new Image(device,this.diagramWidth,this.diagramHeight);
-			TGPainter painter = new TGPainter(new GC(this.diagram));
-			paintDiagram(painter, 0, 0);
-			painter.dispose();
-		}
-	}
-	
-	protected void paintDiagram(TGPainter painter, int fromX, int fromY){
-		Font font = getFirstFretFont();
-		painter.setBackground(getBackgroundColor());
-		painter.initPath(TGPainter.PATH_FILL);
-		painter.addRectangle(fromX, fromY, this.diagramWidth, this.diagramHeight);
-		painter.closePath();
-		painter.setForeground(getColor());
-		
-		//dibujo las cuerdas
-		int x = fromX + getStringSpacing();
-		int y = fromY + getFretSpacing();
-		
-		if(font != null){
-			String firstFretString = Integer.toString(getFirstFret());
-			painter.setFont(font);
-			Point size = painter.getStringExtent(firstFretString);
-			painter.drawString(firstFretString,fromX + (getFirstFretSpacing() - size.x),Math.round(y + ((getFretSpacing() / 2f) - (size.y / 2f))));
-			x += getFirstFretSpacing();
-		}
-		
-		painter.initPath();
-		painter.setAntialias(false);
-		for(int i = 0;i < getStrings().length;i++){
-			int x1 = x + (i * getStringSpacing());
-			int x2 = x + (i * getStringSpacing());
-			int y1 = y;
-			int y2 = y + ((getFretSpacing() * (MAX_FRETS - 1)));
-			painter.moveTo(x1,y1);
-			painter.lineTo(x2,y2);
-		}
-		painter.closePath();
-		
-		//dibujo las cegillas
-		painter.initPath();
-		painter.setAntialias(false);
-		for(int i = 0;i < MAX_FRETS;i++){
-			int x1 = x;
-			int x2 = x + ((getStringSpacing() * (countStrings() - 1)));
-			int y1 = y + (i * getFretSpacing());
-			int y2 = y + (i * getFretSpacing());
-			painter.moveTo(x1,y1);
-			painter.lineTo(x2,y2);
-		}
-		painter.closePath();
-		
-		painter.setLineWidth(1);
-		//dibujo las notas
-		for(int i = 0;i < getStrings().length;i++){
-			int fret = getFretValue(i);
-			int noteX = x + ((getStringSpacing() * (countStrings() - 1)) - (getStringSpacing() * i));
-			if(fret < 0){
-				painter.initPath();
-				painter.moveTo((noteX - (getNoteSize() / 2)), fromY);
-				painter.lineTo((noteX + (getNoteSize() / 2)), fromY + getNoteSize());
-				painter.moveTo((noteX + (getNoteSize() / 2)), fromY);
-				painter.lineTo((noteX - (getNoteSize() / 2)), fromY + getNoteSize());
-				painter.closePath();
-			}
-			else if(fret == 0){
-				painter.initPath();
-				painter.addOval(noteX - (getNoteSize() / 2),fromY,getNoteSize(),getNoteSize());
-				painter.closePath();
-			}
-			else{
-				painter.setBackground( (this.tonic >= 0 && ( (getStringValue(i + 1) + fret) % 12) == this.tonic)?getTonicColor():getNoteColor());
-				painter.initPath(TGPainter.PATH_FILL);
-				fret -= (getFirstFret() - 1);
-				int noteY = y + ((getFretSpacing() * fret) - (getFretSpacing() / 2 ));
-				painter.addOval(noteX - (getNoteSize() / 2),noteY - (getNoteSize() / 2),(getNoteSize() + 1),(getNoteSize() + 1));
-				painter.closePath();
-			}
-		}
-	}
-	
-	public void calculateFirstFret(){
-		int minimum = -1;
-		int maximum = -1;
-		boolean zero = false;
-		for (int i = 0; i < getStrings().length; i++) {
-			int fretValue = getFretValue(i);
-			zero = (zero || fretValue == 0);
-			if(fretValue > 0){
-				minimum = (minimum < 0)?fretValue:Math.min(minimum,fretValue);
-				maximum = (Math.max(maximum,fretValue));
-			}
-		}
-		int firstFret = (zero && maximum < MAX_FRETS)?1:minimum;
-		setFirstFret( Math.max(firstFret,1) );
-	}
-	
-	private int getStringValue(int number){
-		TGString string = getBeat().getMeasure().getTrack().getString(number);
-		return string.getValue();
-	}
-	
-	public boolean isDisposed(){
-		return (this.diagram == null || this.diagram.isDisposed());
-	}
-	
-	public void dispose(){
-		if(!isDisposed()){
-			this.diagram.dispose();
-		}
-	}
-	
-	public int getPosX() {
-		return (isEditing())?this.posX:getBeatImpl().getPosX();
-	}
-	
-	public int getPaintPosition(int index){
-		return getBeatImpl().getMeasureImpl().getTs().getPosition(index);
-	}
-	
-	public TGBeatImpl getBeatImpl(){
-		return (TGBeatImpl)getBeat();
-	}
-	
-	private boolean isSameFont(Font f1, Font f2){
-		if( f1 == null && f2 == null ){
-			return true;
-		}
-		if( f1 != null && f2 != null && !f1.isDisposed() && !f2.isDisposed()){
-			FontData[] fd1 = f1.getFontData();
-			FontData[] fd2 = f2.getFontData();
-			if( fd1.length > 0 && fd2.length > 0){
-				boolean sameName = fd1[0].getName().equals(fd2[0].getName());
-				boolean sameStyle = fd1[0].getStyle() == fd2[0].getStyle();
-				boolean sameHeight = fd1[0].getHeight() == fd2[0].getHeight();
-				return (sameName && sameStyle && sameHeight);
-			}
-		}
-		return false;
-	}
-	
-	private boolean isSameColor(Color c1, Color c2){
-		if( c1 == null && c2 == null ){
-			return true;
-		}
-		if( c1 != null && c2 != null && !c1.isDisposed() && !c2.isDisposed()){
-			RGB rgb1 = c1.getRGB();
-			RGB rgb2 = c2.getRGB();
-			if( rgb1 != null && rgb2 != null){
-				return (rgb1.red == rgb2.red && rgb1.green == rgb2.green && rgb1.blue == rgb2.blue);
-			}
-		}
-		return false;
-	}
-	
-	public void addFretValue(int string,int fret){
-		if(!isDisposed() && this.getFretValue(string) != fret){
-			this.dispose();
-		}
-		super.addFretValue(string, fret);
-	}
-	
-	public void setFirstFret(int firstFret) {
-		if(!isDisposed() && this.getFirstFret() != firstFret){
-			this.dispose();
-		}
-		super.setFirstFret(firstFret);
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGFactoryImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGFactoryImpl.java
deleted file mode 100644
index 06ba7d6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGFactoryImpl.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGLyric;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGText;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-public class TGFactoryImpl extends TGFactory{
-	
-	public TGFactoryImpl(){
-		super();
-	}
-	
-	public TGMeasureHeader newHeader(){
-		return new TGMeasureHeaderImpl(this);
-	}
-	
-	public TGTrack newTrack(){
-		return new TGTrackImpl(this);
-	}
-	
-	public TGMeasure newMeasure(TGMeasureHeader header){
-		return new TGMeasureImpl(header);
-	}
-	
-	public TGNote newNote(){
-		return new TGNoteImpl(this);
-	}
-	
-	public TGBeat newBeat(){
-		return new TGBeatImpl(this);
-	}
-	
-	public TGVoice newVoice(int index){
-		return new TGVoiceImpl(this, index);
-	}
-	
-	public TGLyric newLyric(){
-		return new TGLyricImpl();
-	}
-	
-	public TGChord newChord(int length){
-		return new TGChordImpl(length);
-	}
-	
-	public TGText newText(){
-		return new TGTextImpl();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGLyricImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGLyricImpl.java
deleted file mode 100644
index d03e025..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGLyricImpl.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.song.models.TGLyric;
-
-public class TGLyricImpl extends TGLyric{
-	
-	private int height;
-	private int nextIndex = 0;
-	
-	public TGLyricImpl(){
-		this.height = 0;
-	}
-	
-	public void setFrom(int from) {
-		super.setFrom(from);
-		this.update();
-	}
-	
-	public void setLyrics(String lyrics) {
-		super.setLyrics(lyrics);
-		this.update();
-	}
-	
-	private void update(){
-		this.height = (this.isEmpty()?0:10);
-	}
-	
-	public void start(){
-		this.start(0);
-	}
-	
-	public void start(int index){
-		this.nextIndex = index;
-	}
-	
-	public void setCurrentMeasure(TGMeasureImpl measure){
-		if(measure.getNumber() >= getFrom()){
-			measure.setLyricBeatIndex(this.nextIndex);
-			this.nextIndex += (measure.getNotEmptyBeats());
-		}else{
-			measure.setLyricBeatIndex(-1);
-			this.start();
-		}
-	}
-	
-	public void paintCurrentNoteBeats(TGPainter painter,ViewLayout layout,TGMeasureImpl currentMeasure ,int fromX,int fromY){
-		int from = currentMeasure.getLyricBeatIndex();
-		String[] beats = getLyricBeats();
-		if(beats != null && from >= 0 && from < beats.length){
-			int beatIndex = 0;
-			for(int i = 0;i < currentMeasure.countBeats();i ++){
-				TGBeatImpl beat = (TGBeatImpl)currentMeasure.getBeat(i);
-				if(!beat.isRestBeat()){
-					if((from + beatIndex) < beats.length){
-						String str = beats[from + beatIndex].trim();
-						if(str.length() > 0){
-							int x = (fromX + beat.getPosX() + beat.getSpacing() + 2);
-							layout.setLyricStyle(painter,(layout.isPlayModeEnabled() && beat.isPlaying(layout)));
-							painter.drawString(str,x + 13,(fromY + currentMeasure.getTs().getPosition(TGTrackSpacing.POSITION_LYRIC)));
-						}
-					}
-					beatIndex ++;
-				}
-			}
-		}
-	}
-	
-	public int getHeight(){
-		return this.height;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureBuffer.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureBuffer.java
deleted file mode 100644
index 193425f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureBuffer.java
+++ /dev/null
@@ -1,80 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Device;
-import org.eclipse.swt.graphics.Image;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-public class TGMeasureBuffer {
-	
-	private Device device;
-	
-	private Image buffer;
-	
-	private TGPainter painter;
-	
-	private int width;
-	
-	private int height;
-	
-	public TGMeasureBuffer(Device device){
-		this.device = device;
-	}
-	
-	public void createBuffer(int width,int height,Color background){
-		this.dispose();
-		this.buffer = new Image(this.device,width,height);
-		this.width = width;
-		this.height = height;
-		this.fillBuffer(background);
-	}
-	
-	public void disposeBuffer(){
-		if(this.buffer != null && !this.buffer.isDisposed()){
-			this.buffer.dispose();
-		}
-	}
-	
-	private void fillBuffer(Color background){
-		getPainter().setBackground(background);
-		getPainter().initPath(TGPainter.PATH_FILL);
-		getPainter().addRectangle(0,0,this.width,this.height);
-		getPainter().closePath();
-	}
-	
-	public void paintBuffer(TGPainter painter,int x,int y,int srcY){
-		painter.drawImage(this.buffer,0,srcY, this.width, (this.height - srcY), x, (y + srcY), this.width, (this.height - srcY));
-	}
-	
-	public void createPainter(){
-		this.disposePainter();
-		this.painter = new TGPainter(this.buffer);
-	}
-	
-	public void disposePainter(){
-		if(this.painter != null && !this.painter.getGC().isDisposed()){
-			this.painter.dispose();
-			this.painter = null;
-		}
-	}
-	
-	public TGPainter getPainter(){
-		if(this.painter == null || this.painter.getGC().isDisposed()){
-			this.createPainter();
-		}
-		return this.painter;
-	}
-	
-	public Image getImage(){
-		return this.buffer;
-	}
-	
-	public void dispose(){
-		this.disposePainter();
-		this.disposeBuffer();
-	}
-	
-	public boolean isDisposed(){
-		return (this.buffer == null || this.buffer.isDisposed());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureHeaderImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureHeaderImpl.java
deleted file mode 100644
index 2984028..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureHeaderImpl.java
+++ /dev/null
@@ -1,157 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-
-public class TGMeasureHeaderImpl extends TGMeasureHeader{
-	/**
-	 * Espacio por defecto del timeSignature
-	 */
-	private static final int DEFAULT_TIME_SIGNATURE_SPACING = 30;
-	/**
-	 * Espacio por defecto a la izquierda
-	 */
-	private static final int DEFAULT_LEFT_SPACING = 15;
-	/**
-	 * Espacio por defecto a la derecha
-	 */
-	private static final int DEFAULT_RIGHT_SPACING = 15;
-	
-	private static final int PAINT_TEMPO = 0x01;
-	
-	private static final int PAINT_TRIPLET_FEEL = 0x02;
-	
-	private static final int PAINT_TIME_SIGNATURE = 0x04;
-	
-	private int paintFlags;
-	
-	private int maxQuarterSpacing;
-	
-	private int maxClefSpacing;
-	
-	private int maxKeySignatureSpacing;
-	
-	private int maxWidth;
-	
-	public TGMeasureHeaderImpl(TGFactory factory){
-		super(factory);
-	}
-	
-	public void reset() {
-		this.maxWidth = 0;
-		this.paintFlags = 0;
-		this.maxQuarterSpacing = 0;
-		this.maxClefSpacing = 0;
-		this.maxKeySignatureSpacing = 0;
-	}
-	
-	public void update(ViewLayout layout, int index) {
-		this.reset();
-		this.calculateMeasureChanges(layout);
-		
-		int trackCount = getSong().countTracks();
-		for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
-			TGTrackImpl track = (TGTrackImpl)getSong().getTrack(trackIdx);
-			TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure( index );
-			measure.calculateMeasureChanges(layout);
-		}
-	}
-	
-	public void calculateMeasureChanges(ViewLayout layout) {
-		TGMeasureHeader previous = layout.getSongManager().getPrevMeasureHeader(this);
-		if(previous == null){
-			this.paintFlags |= PAINT_TEMPO; 
-			this.paintFlags |= ((this.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE)?PAINT_TRIPLET_FEEL:0);
-			this.paintFlags |= PAINT_TIME_SIGNATURE;
-		}else{
-			//Tempo
-			if(this.getTempo().getValue() != previous.getTempo().getValue()){
-				this.paintFlags |= PAINT_TEMPO; 
-			}
-			//Triplet Feel
-			if(this.getTripletFeel() != previous.getTripletFeel()){
-				this.paintFlags |= PAINT_TRIPLET_FEEL;
-			}
-			//Time Signature
-			int thisNumerator = this.getTimeSignature().getNumerator();
-			int thisValue = this.getTimeSignature().getDenominator().getValue();
-			int prevNumerator = previous.getTimeSignature().getNumerator();
-			int prevValue = previous.getTimeSignature().getDenominator().getValue();
-			if(thisNumerator != prevNumerator || thisValue != prevValue){
-				this.paintFlags |= PAINT_TIME_SIGNATURE;
-			}
-		}
-	}
-	
-	public boolean shouldPaintTempo(){
-		return ( (this.paintFlags & PAINT_TEMPO) != 0 );
-	}
-	
-	public boolean shouldPaintTripletFeel(){
-		return ( (this.paintFlags & PAINT_TRIPLET_FEEL) != 0 );
-	}
-	
-	public boolean shouldPaintTimeSignature(){
-		return ( (this.paintFlags & PAINT_TIME_SIGNATURE) != 0 );
-	}
-	
-	public int getMaxQuarterSpacing() {
-		return this.maxQuarterSpacing;
-	}
-	
-	public void notifyQuarterSpacing(int spacing) {
-		this.maxQuarterSpacing = ((spacing > this.maxQuarterSpacing) ? spacing : this.maxQuarterSpacing );
-	}
-	
-	public int getClefSpacing(ViewLayout layout, TGMeasureImpl measure){
-		return (!measure.isPaintClef() && (layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) == 0 ? 0 : this.maxClefSpacing );
-	}
-	
-	public int getKeySignatureSpacing(ViewLayout layout, TGMeasureImpl measure){
-		return (!measure.isPaintKeySignature() && (layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) == 0 ? 0 : this.maxKeySignatureSpacing );
-	}
-	
-	public int getTempoSpacing(ViewLayout layout){
-		return (shouldPaintTempo()? Math.round( 45 * layout.getScale() ):0);
-	}
-	
-	public int getTripletFeelSpacing(ViewLayout layout){
-		return (shouldPaintTripletFeel()? Math.round( 55 * layout.getScale() ):0);
-	}
-	
-	public int getTimeSignatureSpacing(ViewLayout layout){
-		return (shouldPaintTimeSignature()? Math.round( DEFAULT_TIME_SIGNATURE_SPACING * layout.getScale() ):0);
-	}
-	
-	public int getLeftSpacing(ViewLayout layout){
-		return Math.round( DEFAULT_LEFT_SPACING * layout.getScale() );
-	}
-	
-	public int getRightSpacing(ViewLayout layout){
-		return Math.round( DEFAULT_RIGHT_SPACING * layout.getScale() );
-	}
-	
-	public int getFirstNoteSpacing(ViewLayout layout, TGMeasureImpl measure){
-		int topSpacing = getTempoSpacing(layout) + getTripletFeelSpacing(layout);
-		int middleSpacing = getClefSpacing(layout,measure) + getKeySignatureSpacing(layout,measure) + getTimeSignatureSpacing(layout);
-		
-		return Math.round(Math.max( topSpacing , middleSpacing) + (10f * layout.getScale()));
-	}
-	
-	public void notifyClefSpacing(int spacing){
-		this.maxClefSpacing = ((spacing > this.maxClefSpacing)?spacing:this.maxClefSpacing);
-	}
-	
-	public void notifyKeySignatureSpacing(int spacing){
-		this.maxKeySignatureSpacing = ((spacing > this.maxKeySignatureSpacing) ? spacing : this.maxKeySignatureSpacing);
-	}
-	
-	public void notifyWidth(int width){
-		this.maxWidth = ((width > this.maxWidth)?width:this.maxWidth);
-	}
-	
-	public int getMaxWidth(){
-		return this.maxWidth;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureImpl.java
deleted file mode 100644
index f9943c4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGMeasureImpl.java
+++ /dev/null
@@ -1,1316 +0,0 @@
-/*
- * Created on 26-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.RGB;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGClefPainter;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGKeySignaturePainter;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGTempoPainter;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGTripletFeelPainter;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.player.base.MidiPlayerMode;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGColor;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGDivisionType;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGMeasureImpl extends TGMeasure{
-	
-	public static final int NATURAL = 1;
-	public static final int SHARP = 2;
-	public static final int FLAT = 3;
-	
-	public static final int KEY_SIGNATURES[][] = new int[][]{
-		//------------NATURAL------------------------------------
-		{NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL}, // NATURAL
-		//------------SHARPS------------------------------------
-		{NATURAL,NATURAL,NATURAL,SHARP,NATURAL,NATURAL,NATURAL},   // 1 SHARP
-		{SHARP,NATURAL,NATURAL,SHARP,NATURAL,NATURAL,NATURAL},     // 2 SHARPS
-		{SHARP,NATURAL,NATURAL,SHARP,SHARP,NATURAL,NATURAL},       // 3 SHARPS
-		{SHARP,SHARP,NATURAL,SHARP,SHARP,NATURAL,NATURAL},         // 4 SHARPS
-		{SHARP,SHARP,NATURAL,SHARP,SHARP,SHARP,NATURAL},           // 5 SHARPS
-		{SHARP,SHARP,SHARP,SHARP,SHARP,SHARP,NATURAL},             // 6 SHARPS
-		{SHARP,SHARP,SHARP,SHARP,SHARP,SHARP,SHARP},               // 7 SHARPS
-		//------------FLATS------------------------------------
-		{NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,NATURAL,FLAT},    // 1 FLAT
-		{NATURAL,NATURAL,FLAT,NATURAL,NATURAL,NATURAL,FLAT},       // 2 FLATS
-		{NATURAL,NATURAL,FLAT,NATURAL,NATURAL,FLAT,FLAT},          // 3 FLATS
-		{NATURAL,FLAT,FLAT,NATURAL,NATURAL,FLAT,FLAT},             // 4 FLATS
-		{NATURAL,FLAT,FLAT,NATURAL,FLAT,FLAT,FLAT},                // 5 FLATS
-		{FLAT,FLAT,FLAT,NATURAL,FLAT,FLAT,FLAT},                   // 6 FLATS
-		{FLAT,FLAT,FLAT,FLAT,FLAT,FLAT,FLAT},                      // 7 FLATS
-	};
-	
-	public static final int ACCIDENTAL_SHARP_NOTES[] = new int[]{0,0,1,1,2,3,3,4,4,5,5,6};
-	public static final int ACCIDENTAL_FLAT_NOTES [] = new int[]{0,1,1,2,2,3,4,4,5,5,6,6};
-	public static final boolean ACCIDENTAL_NOTES[] = new boolean[]{false,true,false,true,false,false,true,false,true,false,true,false};
-	
-	public static final int SCORE_KEY_OFFSETS[] = new int[]{30,18,22,24};
-	
-	public static final int SCORE_KEY_SHARP_POSITIONS[][] = new int[][]{ 
-		new int[] { 1 , 4, 0, 3, 6, 2 , 5 } ,
-		new int[] { 3 , 6, 2, 5, 8, 4 , 7 } ,
-		new int[] { 7 , 3, 6, 2, 5, 1 , 4 } ,
-		new int[] { 2 , 5, 1, 4, 7, 3 , 6 } ,
-	};
-	
-	public static final int SCORE_KEY_FLAT_POSITIONS[][] = new int[][]{ 
-		new int[] { 5, 2, 6, 3, 7, 4, 8 } ,
-		new int[] { 7, 4, 8, 5, 9, 6, 10 } ,
-		new int[] { 4, 1, 5, 2, 6, 3, 7 } ,
-		new int[] { 6, 3, 7, 4, 8, 5, 9 } ,
-	};
-	
-	/**
-	 * Espacio por defecto de la clave
-	 */
-	private static final int DEFAULT_CLEF_SPACING = 40;
-	/**
-	 * Espacio por defecto entre negra y negra
-	 */
-	private static final int DEFAULT_QUARTER_SPACING = 30;
-	/**
-	 * Posicion X
-	 */
-	private int posX;
-	/** 
-	 * Posicion Y
-	 */
-	private int posY;
-	/**
-	 * Espacio entre negras
-	 */
-	private int quarterSpacing;
-	/**
-	 * Espacio entre pulsos
-	 */
-	private long divisionLength;
-	/**
-	 * Boolean para saber si hay que pintar la clave
-	 */
-	private boolean paintClef = true;
-	/**
-	 * Boolean para saber si hay que pintar el KeySignature
-	 */
-	private boolean paintKeySignature = true;
-	/**
-	 * Compas anterior
-	 */
-	private TGMeasure prevMeasure;
-	/**
-	 * Boolean para saber si el compas esta en el area de pantalla
-	 */
-	private boolean outOfBounds;
-	/**
-	 * Boolean para saber si el compas es el primero de la linea
-	 */
-	private boolean firstOfLine;
-	
-	private boolean compactMode;
-	
-	private int spacing;
-	
-	private TGTrackSpacing ts;
-	
-	private int maxY;
-	
-	private int minY;
-	
-	private int notEmptyVoices;
-	
-	private int notEmptyBeats;
-	
-	private int widthBeats = 0;
-	
-	private List[] voiceGroups;
-	
-	private TGMeasureBuffer buffer;
-	
-	private boolean bufferCreated;
-	
-	private Color markerColor;
-	
-	private int lyricBeatIndex;
-	private int width;
-	
-	private int beatEffectSpacing;
-	private boolean text;
-	private boolean chord;
-	private boolean division;
-	
-	private boolean[][] registeredAccidentals;
-	
-	public TGMeasureImpl(TGMeasureHeader header) {
-		super(header);
-		this.registeredAccidentals = new boolean[11][7];
-		this.voiceGroups = new List[TGBeat.MAX_VOICES];
-		for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){
-			this.voiceGroups[v] = new ArrayList();
-		}
-	}
-	
-	/**
-	 * Crea los valores necesarios
-	 */
-	public void create(ViewLayout layout) {
-		this.divisionLength = TGSongManager.getDivisionLength(getHeader());
-		this.resetSpacing();
-		this.autoCompleteSilences(layout.getSongManager());
-		this.orderBeats(layout.getSongManager());
-		this.checkCompactMode(layout);
-		this.clearRegisteredAccidentals();
-		this.calculateBeats(layout);
-		this.calculateWidth(layout);
-		this.setFirstOfLine(false);
-	}
-	
-	/**
-	 * Actualiza los valores para dibujar
-	 */
-	public void update(ViewLayout layout) {
-		updateComponents(layout);
-		setOutOfBounds(true);
-		setBufferCreated(false);
-	}
-	
-	private void checkCompactMode(ViewLayout layout){
-		boolean compactMode = ( (layout.getStyle() & ViewLayout.DISPLAY_COMPACT) != 0 );
-		if(compactMode && (layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) != 0){
-			compactMode = (layout.getSongManager().getSong().countTracks() == 1);
-		}
-		this.compactMode = compactMode;
-	}
-	
-	private void clearRegisteredAccidentals(){
-		for( int i = 0 ; i < 11 ; i ++ ){
-			for( int n = 0 ; n < 7 ; n ++ ){
-				this.registeredAccidentals[i][n] = false;
-			}
-		}
-	}
-	
-	public void calculateWidth(ViewLayout layout) {
-		if(this.compactMode){
-			this.width = this.widthBeats;
-		}
-		else{
-			double quartersInSignature = ((1.00 / this.getTimeSignature().getDenominator().getValue()) * 4.00) * this.getTimeSignature().getNumerator();
-			this.width = (int)(getQuarterSpacing() * quartersInSignature);
-		}
-		
-		this.width += getFirstNoteSpacing(layout);
-		this.width += (this.getRepeatClose() > 0)?20:0;
-		this.width += getHeaderImpl().getLeftSpacing(layout);
-		this.width += getHeaderImpl().getRightSpacing(layout);
-		
-		this.getHeaderImpl().notifyWidth(this.width);
-	}
-	
-	private void calculateBeats(ViewLayout layout) {
-		TGChord previousChord = null;
-		TGDuration minDuration = null;
-		TGBeatImpl previousBeat = null;
-		TGVoiceImpl[] previousVoices = new TGVoiceImpl[TGBeat.MAX_VOICES];
-		TGBeatGroup[] groups = new TGBeatGroup[TGBeat.MAX_VOICES];
-		
-		int style = layout.getStyle();
-		int minimumChordLength = 0;
-		
-		boolean[] notEmptyVoicesChecked = new boolean[TGBeat.MAX_VOICES];
-		boolean chordEnabled = ((style & (ViewLayout.DISPLAY_CHORD_DIAGRAM | ViewLayout.DISPLAY_CHORD_NAME)) != 0);
-		this.widthBeats = 0;
-		this.notEmptyBeats = 0;
-		this.notEmptyVoices = 0;
-		for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){
-			this.voiceGroups[v].clear();
-		}
-		
-		for (int i = 0; i < countBeats(); i++) {
-			TGBeatImpl beat = (TGBeatImpl)getBeat(i);
-			beat.reset();
-			
-			if(chordEnabled && beat.getChord() != null){
-				if(previousChord != null){
-					int length = (int) (beat.getStart() - previousChord.getBeat().getStart());
-					minimumChordLength = (minimumChordLength > 0)?Math.min(minimumChordLength, Math.abs(length)):length;
-				}
-				previousChord = beat.getChord();
-			}
-			boolean emptyBeat = true;
-			for( int v = 0; v < TGBeat.MAX_VOICES; v ++){
-				TGVoiceImpl voice = (TGVoiceImpl)beat.getVoice(v);
-				if(!voice.isEmpty()){
-					emptyBeat = false;
-					
-					voice.reset();
-					if (minDuration == null || voice.getDuration().getTime() <= minDuration.getTime()) {
-						minDuration = voice.getDuration();
-					}
-					if( !notEmptyVoicesChecked[v] ){
-						notEmptyVoicesChecked[v] = true;
-						this.notEmptyVoices ++;
-					}
-					
-					Iterator it = voice.getNotes().iterator();
-					while(it.hasNext()){
-						TGNoteImpl note = (TGNoteImpl)it.next();
-						voice.check(note);
-					}
-					
-					if(!voice.isRestVoice()){
-						beat.check( layout, voice.getMinNote() );
-						beat.check( layout, voice.getMaxNote() );
-						if( ( groups[v] == null ) || !canJoin(layout.getSongManager(),voice,previousVoices[v]) ){
-							groups[v] = new TGBeatGroup(v);
-							this.voiceGroups[v].add(groups[v]);
-						}
-						groups[v].check(voice);
-					}else{
-						for( int v2 = 0; v2 < TGBeat.MAX_VOICES; v2 ++){
-							if(v2 != voice.getIndex()){
-								TGVoiceImpl voice2 = beat.getVoiceImpl(v2);
-								if( !voice2.isEmpty() && voice2.getDuration().isEqual(voice.getDuration())){
-									if(!voice2.isRestVoice() || !voice2.isHiddenSilence()){
-										voice.setHiddenSilence(true);
-										break;
-									}
-								}
-							}
-						}
-					}
-					makeVoice(layout, voice, previousVoices[v], groups[v]);
-					previousVoices[v] = voice;
-				}
-			}
-			if (emptyBeat){
-				System.out.println( "Empty Beat !!!!!! " + beat.getStart() + "  " + i);
-			}
-			
-			makeBeat(layout,beat,previousBeat,chordEnabled);
-			previousBeat = beat;
-		}
-		
-		for(int v = 0; v < this.voiceGroups.length; v ++){
-			Iterator voiceGroups = this.voiceGroups[v].iterator();
-			while (voiceGroups.hasNext()) {
-				TGBeatGroup group = (TGBeatGroup)voiceGroups.next();
-				group.finish(layout,this);
-			}
-		}
-		
-		if(!this.compactMode){
-			this.quarterSpacing = (minDuration != null)?layout.getSpacingForQuarter(minDuration): Math.round(DEFAULT_QUARTER_SPACING * layout.getScale());
-			if(chordEnabled && minimumChordLength > 0){
-				int chordWidth = (layout.getChordFretIndexSpacing() + layout.getChordStringSpacing() + (getTrack().stringCount() * layout.getChordStringSpacing()));
-				int minimumSpacing = (int)((TGDuration.QUARTER_TIME * chordWidth) / minimumChordLength);
-				this.quarterSpacing = Math.max(minimumSpacing,this.quarterSpacing);
-			}
-			this.getHeaderImpl().notifyQuarterSpacing(this.quarterSpacing);
-		}
-	}
-	
-	public boolean canJoin(TGSongManager manager,TGVoiceImpl b1,TGVoiceImpl b2){
-		if( b1 == null || b2 == null || b1.isRestVoice() || b2.isRestVoice() ){
-			return false;
-		}
-		
-		long divisionLength = getDivisionLength();
-		long start = getStart();
-		long start1 = (manager.getMeasureManager().getRealStart(this, b1.getBeat().getStart()) - start);
-		long start2 = (manager.getMeasureManager().getRealStart(this, b2.getBeat().getStart()) - start);
-		
-		if(b1.getDuration().getValue() < TGDuration.EIGHTH || b2.getDuration().getValue() < TGDuration.EIGHTH ){
-			return ( start1 == start2);
-		}
-		
-		long p1 = ((divisionLength + start1) / divisionLength);
-		long p2 = ((divisionLength + start2) / divisionLength);
-		
-		return  (   p1 == p2  );
-	}
-	
-	private void makeVoice(ViewLayout layout,TGVoiceImpl voice,TGVoiceImpl previousVoice,TGBeatGroup group){
-		voice.setWidth((int)layout.getVoiceWidth(voice));
-		voice.setBeatGroup( group );
-		
-		if(previousVoice != null){
-			voice.setPreviousBeat(previousVoice);
-			previousVoice.setNextBeat(voice);
-		}
-	}
-	
-	private void makeBeat(ViewLayout layout,TGBeatImpl beat,TGBeatImpl previousBeat, boolean chordEnabled){
-		int minimumWidth = -1;
-		boolean restBeat = true;
-		for(int v = 0 ; v < TGBeat.MAX_VOICES; v ++){
-			TGVoiceImpl voice = beat.getVoiceImpl(v);
-			if(!voice.isEmpty()){
-				if( minimumWidth < 0 || voice.getWidth() < minimumWidth ){
-					minimumWidth = voice.getWidth();
-				}
-				if( !voice.isRestVoice() ){
-					restBeat = false;
-				}
-			}
-		}
-		
-		beat.setWidth( minimumWidth );
-		this.notEmptyBeats += (restBeat ? 0 : 1);
-		this.widthBeats += beat.getMinimumWidth();
-		
-		if(previousBeat != null){
-			beat.setPreviousBeat(previousBeat);
-			previousBeat.setNextBeat(beat);
-			
-			if(chordEnabled && beat.isChordBeat() && previousBeat.isChordBeat()){
-				int previousWidth = previousBeat.getMinimumWidth();
-				int chordWidth = (layout.getChordFretIndexSpacing() + layout.getChordStringSpacing() + (getTrack().stringCount() * layout.getChordStringSpacing()));
-				previousBeat.setWidth(Math.max(chordWidth,previousWidth));
-				this.widthBeats -= previousWidth;
-				this.widthBeats += previousBeat.getMinimumWidth();
-			}
-		}
-	}
-	
-	/**
-	 * Calcula si debe pintar el TimeSignature
-	 */
-	public void calculateMeasureChanges(ViewLayout layout) {
-		this.paintClef = false;
-		this.paintKeySignature = false;
-		this.prevMeasure = (layout.isFirstMeasure(this) ? null : (TGMeasureImpl)layout.getSongManager().getTrackManager().getPrevMeasure(this));
-		if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){
-			if(this.prevMeasure == null || getClef() != this.prevMeasure.getClef()){
-				this.paintClef = true;
-				this.getHeaderImpl().notifyClefSpacing( Math.round(DEFAULT_CLEF_SPACING * layout.getScale()) );
-			}
-			if(this.prevMeasure == null || getKeySignature() != this.prevMeasure.getKeySignature()){
-				this.paintKeySignature = true;
-				this.getHeaderImpl().notifyKeySignatureSpacing(calculateKeySignatureSpacing(layout));
-			}
-		}
-	}
-	
-	/**
-	 * Calcula si hay espacios libres. y crea nuevos silencios
-	 */
-	private void autoCompleteSilences(TGSongManager manager){
-		manager.getMeasureManager().autoCompleteSilences(this);
-	}
-	
-	/**
-	 * Llama a update de todas las notas del compas
-	 */
-	private void updateComponents(ViewLayout layout) {
-		this.maxY = 0;
-		this.minY = 0;
-		
-		int spacing = getFirstNoteSpacing(layout);
-		int tmpX = spacing;
-		for (int i = 0; i < countBeats(); i++) {
-			TGBeatImpl beat = (TGBeatImpl) getBeat(i);
-			beat.resetEffectsSpacing(layout);
-			
-			if(this.compactMode){
-				beat.setPosX(tmpX);
-				tmpX += beat.getMinimumWidth();
-			}
-			else{
-				int quarterWidth = getMaxQuarterSpacing(layout);
-				int x1 = (spacing + TablatureUtil.getStartPosition(this, beat.getStart(), quarterWidth));
-				int minimumWidth = -1;
-				for(int v = 0 ; v < beat.countVoices(); v ++){
-					TGVoiceImpl voice = beat.getVoiceImpl(v);
-					if(!voice.isEmpty()){
-						int x2 = (spacing + TablatureUtil.getStartPosition(this, beat.getStart() + voice.getDuration().getTime(), quarterWidth));
-						int width = ( x2 - x1 );
-						if( minimumWidth < 0 || width < minimumWidth ){
-							minimumWidth = width;
-						}
-						voice.setWidth( width );
-					}
-				}
-				beat.setPosX( x1 );
-				beat.setWidth( minimumWidth );
-			}
-			
-			for(int v = 0 ; v < beat.countVoices(); v ++){
-				TGVoiceImpl voice = beat.getVoiceImpl(v);
-				if(!voice.isEmpty()){
-					Iterator notes = voice.getNotes().iterator();
-					while(notes.hasNext()){
-						TGNoteImpl note = (TGNoteImpl)notes.next();
-						beat.updateEffectsSpacing(layout, note.getEffect());
-						note.update(layout);
-					}
-					voice.update(layout);
-					
-					if(!this.division && !voice.getDuration().getDivision().isEqual(TGDivisionType.NORMAL)){
-						this.division = true;
-					}
-					if( (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 || (voice.isRestVoice() && !voice.isHiddenSilence()) ){
-						if( voice.getMaxY() > this.maxY ){
-							this.maxY = voice.getMaxY();
-						}
-						if( voice.getMinY() < this.minY ){
-							this.minY = voice.getMinY();
-						}
-					}
-				}
-			}
-			
-			int bsSize = beat.getEffectsSpacing(layout);
-			if( bsSize > this.beatEffectSpacing ){
-				this.beatEffectSpacing = bsSize;
-			}
-			
-			if(!this.chord && beat.isChordBeat()){
-				this.chord = true;
-			}
-			
-			if(!this.text && beat.isTextBeat()){
-				this.text = true;
-			}
-		}
-		
-		if( (layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0){
-			for(int i = 0; i < this.voiceGroups.length; i ++){
-				Iterator groups = this.voiceGroups[i].iterator();
-				while (groups.hasNext()) {
-					TGBeatGroup group = (TGBeatGroup)groups.next();
-					checkValue(layout,group.getMinNote(),group.getDirection());
-					checkValue(layout,group.getMaxNote(),group.getDirection());
-				}
-			}
-		}
-	}
-	
-	public int getNoteAccidental(int noteValue){
-		if( noteValue >= 0 && noteValue < 128 ){
-			int key = getKeySignature();
-			int note = (noteValue % 12);
-			int octave = (noteValue / 12);
-			int accidentalValue = (key <= 7 ? SHARP : FLAT );
-			int [] accidentalNotes = (key <= 7 ? ACCIDENTAL_SHARP_NOTES : ACCIDENTAL_FLAT_NOTES );
-			boolean isAccidentalNote = ACCIDENTAL_NOTES[ note ];
-			boolean isAccidentalKey = KEY_SIGNATURES[key][accidentalNotes[ note ]] == accidentalValue;
-			
-			if(isAccidentalKey != isAccidentalNote && !this.registeredAccidentals[ octave ][ accidentalNotes[ note ] ]){
-				this.registeredAccidentals[ octave ][ accidentalNotes[note ]  ] = true;
-				return (isAccidentalNote ? accidentalValue : NATURAL);
-			}
-			
-			if(isAccidentalKey == isAccidentalNote && this.registeredAccidentals[ octave ][ accidentalNotes[ note ] ]){
-				this.registeredAccidentals[ octave ][ accidentalNotes[ note ]  ] = false;
-				return (isAccidentalNote ? accidentalValue : NATURAL);
-			}
-		}
-		return 0;
-	}
-	
-	private void checkValue(ViewLayout layout,TGNoteImpl note,int direction){
-		int y = note.getScorePosY();
-		float upOffset = TGBeatGroup.getUpOffset(layout);
-		float downOffset = TGBeatGroup.getDownOffset(layout);
-		
-		if(direction == TGBeatGroup.DIRECTION_UP && y > this.maxY ){
-			this.maxY = y;
-		}else if(direction == TGBeatGroup.DIRECTION_DOWN && (y + downOffset) > this.maxY ){
-			this.maxY = (int)(y + downOffset + 2);
-		}
-		
-		if(direction == TGBeatGroup.DIRECTION_UP && (y - upOffset) < this.minY ){
-			this.minY = (int)(y - upOffset - 2);
-		}else if(direction == TGBeatGroup.DIRECTION_DOWN && y < this.minY ){
-			this.minY = y;
-		}
-	}
-	
-	private void resetSpacing(){
-		this.text = false;
-		this.chord = false;
-		this.division = false;
-		this.beatEffectSpacing = 0;
-	}
-	
-	public void registerSpacing(ViewLayout layout,TGTrackSpacing ts){
-		if(layout.hasLoopMarker( this )){
-			ts.setSize(TGTrackSpacing.POSITION_LOOP_MARKER,layout.getLoopMarkerSpacing());
-		}
-		if(this.hasMarker()){
-			ts.setSize(TGTrackSpacing.POSITION_MARKER,layout.getMarkerSpacing());
-		}
-		if(this.chord){
-			ts.setSize(TGTrackSpacing.POSITION_CHORD,layout.getDefaultChordSpacing());
-		}
-		if(this.text){
-			ts.setSize(TGTrackSpacing.POSITION_TEXT,layout.getTextSpacing());
-		}
-		if(this.getHeader().getRepeatAlternative() > 0){
-			ts.setSize(TGTrackSpacing.POSITION_REPEAT_ENDING,layout.getRepeatEndingSpacing());
-		}
-		if(this.division){
-			ts.setSize(TGTrackSpacing.POSITION_DIVISION_TYPE,layout.getDivisionTypeSpacing());
-		}
-		if( this.beatEffectSpacing > 0 ){
-			ts.setSize(TGTrackSpacing.POSITION_EFFECTS, this.beatEffectSpacing );
-		}
-	}
-	
-	private void orderBeats(TGSongManager manager){
-		manager.getMeasureManager().orderBeats(this);
-	}
-	
-	public void paintMeasure(ViewLayout layout,TGPainter painter) {
-		this.setOutOfBounds(false);
-		
-		boolean bufferEnabled = layout.isBufferEnabled();
-		
-		if(shouldRepaintBuffer() || !bufferEnabled ){
-			TGPainter bufferPainter = painter;
-			int x = (bufferEnabled ? 0 : getPosX());
-			int y = (bufferEnabled ? 0 : getPosY());
-			if(bufferEnabled){
-				getBuffer().createBuffer(getWidth(layout) + getSpacing(), getTs().getSize(),layout.getResources().getBackgroundColor());
-				bufferPainter = getBuffer().getPainter();
-			}
-			layout.paintLines(getTrackImpl(),getTs(),bufferPainter,x,y, getWidth(layout) + getSpacing());
-			paintTimeSignature(layout,bufferPainter,x,y);
-			paintClef(layout,bufferPainter,x,y);
-			paintKeySignature(layout,bufferPainter,x,y);
-			paintComponents(layout,bufferPainter,x,y);
-			if(bufferEnabled){
-				getBuffer().disposePainter();
-			}
-			setBufferCreated(true);
-		}
-		if(bufferEnabled){
-			painter.setBackground(layout.getResources().getBackgroundColor());
-			getBuffer().paintBuffer(painter,getPosX(),getPosY(),getTs().getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR));
-		}
-		this.paintLoopMarker(layout, painter);
-		this.paintMarker(layout, painter);
-		this.paintTexts(layout,painter);
-		this.paintTempo(layout,painter);
-		this.paintTripletFeel(layout,painter);
-		this.paintDivisions(layout,painter);
-		this.paintRepeatEnding(layout,painter);
-		this.paintPlayMode(layout,painter);
-	}
-	
-	private boolean shouldRepaintBuffer(){
-		return (isDisposed() || !isBufferCreated());
-	}
-	
-	public void paintRepeatEnding(ViewLayout layout,TGPainter painter){
-		if(getHeader().getRepeatAlternative() > 0){
-			float scale = layout.getScale();
-			float x1 = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getFirstNoteSpacing(layout));
-			float x2 = (getPosX() + getWidth(layout) + getSpacing());
-			float y1 = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_REPEAT_ENDING));
-			float y2 = (y1 + (layout.getRepeatEndingSpacing() * 0.75f ));
-			String string = new String();
-			for(int i = 0; i < 8; i ++){
-				if((getHeader().getRepeatAlternative() & (1 << i)) != 0){
-					string += ((string.length() > 0)?(", ") + Integer.toString(i + 1):Integer.toString(i + 1));
-				}
-			}
-			layout.setRepeatEndingStyle(painter);
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.moveTo(x1, y2);
-			painter.lineTo(x1, y1);
-			painter.lineTo(x2, y1);
-			painter.closePath();
-			painter.drawString(string,Math.round( x1 + (5.0f * scale) ),Math.round( y1 + (2.0f * scale) ));
-		}
-	}
-	
-	/**
-	 * Pinta las notas
-	 */
-	public void paintComponents(ViewLayout layout,TGPainter painter, int fromX, int fromY) {
-		Iterator it = getBeats().iterator();
-		while(it.hasNext()){
-			TGBeatImpl beat = (TGBeatImpl)it.next();
-			beat.paint(layout, painter, fromX + getHeaderImpl().getLeftSpacing(layout) ,fromY);
-		}
-	}
-	
-	/**
-	 * Pinta las divisiones del compas
-	 */
-	private void paintDivisions(ViewLayout layout,TGPainter painter) {
-		int x1 = getPosX();
-		int x2 = getPosX() + getWidth(layout);
-		int y1 = 0;
-		int y2 = 0;
-		int offsetY = 0;
-		int style = layout.getStyle();
-		boolean addInfo = false;
-		//-----SCORE ------------------------------------//
-		if((style & ViewLayout.DISPLAY_SCORE) != 0 ){
-			y1 = getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
-			y2 = y1 + (layout.getScoreLineSpacing() * 4);
-			addInfo = true;
-			if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 && (layout.isFirstMeasure(this) || isFirstOfLine())){
-				offsetY = ( getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE)) - y2;
-			}
-			paintDivisions(layout, painter, x1, y1, x2, y2, offsetY, addInfo );
-		}
-		//-----TABLATURE ------------------------------------//
-		if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){
-			y1 = getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE);
-			y2 = y1 + ((getTrack().getStrings().size() - 1 ) * layout.getStringSpacing());
-			addInfo = ( (style & ViewLayout.DISPLAY_SCORE) == 0 );
-			offsetY = 0;
-			paintDivisions(layout, painter, x1, y1, x2, y2, offsetY, addInfo );
-		}
-	}
-	
-	private void paintDivisions(ViewLayout layout,TGPainter painter,int x1, int y1, int x2, int y2, int offsetY, boolean addInfo) {
-		float scale = layout.getScale();
-		int lineWidthSmall = 1;
-		int lineWidthBig = Math.max(lineWidthSmall,Math.round(3f * scale));
-		
-		//numero de compas
-		if(addInfo){
-			String number = Integer.toString(this.getNumber());
-			layout.setMeasureNumberStyle(painter);
-			painter.drawString(number,getPosX() + Math.round(scale),(y1 - painter.getStringExtent(number).y) - Math.round(scale));
-		}
-		
-		layout.setDivisionsStyle(painter,true);
-		
-		//principio
-		if(this.isRepeatOpen() || layout.isFirstMeasure(this)){
-			painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL);
-			painter.setAntialias(false);
-			painter.setLineWidth(lineWidthSmall);
-			painter.addRectangle( x1, y1, lineWidthBig, (y2 + offsetY) - y1);
-			painter.closePath();
-			
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.setLineWidth(lineWidthSmall);
-			painter.moveTo(x1 + lineWidthBig + scale + lineWidthSmall, y1);
-			painter.lineTo(x1 + lineWidthBig + scale + lineWidthSmall, (y2 + offsetY));
-			painter.closePath();
-			
-			if(this.isRepeatOpen()){
-				int size = Math.max(1,Math.round(4f * scale));
-				float xMove = ((lineWidthBig + scale + lineWidthSmall) + (2f * scale));
-				float yMove = ((lineWidthBig + scale + lineWidthSmall) + (2f * scale));
-				
-				painter.setLineWidth(lineWidthSmall);
-				painter.initPath(TGPainter.PATH_FILL);
-				painter.moveTo(x1 + xMove, y1 + ((y2 - y1) / 2) - (yMove + (size / 2)));
-				painter.addOval(x1 + xMove, y1 + ((y2 - y1) / 2) - (yMove + (size / 2)), size,size);
-				painter.moveTo(x1 + xMove, y1 + ((y2 - y1) / 2) + (yMove - (size / 2)));
-				painter.addOval(x1 + xMove, y1 + ((y2 - y1) / 2) + (yMove - (size / 2)), size, size);
-				painter.closePath();
-			}
-		}else{
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.setLineWidth(lineWidthSmall);
-			painter.moveTo(x1, y1);
-			painter.lineTo(x1, (y2 + offsetY));
-			painter.closePath();
-		}
-		
-		//fin
-		if(this.getRepeatClose() > 0 || layout.isLastMeasure(this)){
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.setLineWidth(lineWidthSmall);
-			painter.moveTo( (x2 + getSpacing()) - (lineWidthBig + scale + lineWidthSmall) , y1);
-			painter.lineTo( (x2 + getSpacing()) - (lineWidthBig + scale + lineWidthSmall) , y2);
-			painter.closePath();
-			
-			painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL);
-			painter.setAntialias(false);
-			painter.setLineWidth(lineWidthSmall);
-			painter.addRectangle( (x2 + getSpacing()) - lineWidthBig, y1, lineWidthBig, y2 - y1);
-			painter.closePath();
-			
-			if(this.getRepeatClose() > 0){
-				int size = Math.max(1,Math.round(4f * scale));
-				float xMove = (((lineWidthBig + scale + lineWidthSmall) + (2f * scale)) + size);
-				float yMove = ( (lineWidthBig + scale + lineWidthSmall) + (2f * scale) );
-				
-				painter.setLineWidth(lineWidthSmall);
-				painter.initPath(TGPainter.PATH_FILL);
-				painter.moveTo((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) - (yMove + (size / 2)));
-				painter.addOval((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) - (yMove + (size / 2)), size,size);
-				painter.moveTo((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) + (yMove - (size / 2)));
-				painter.addOval((x2 - xMove) + getSpacing(), y1 + ((y2 - y1) / 2) + (yMove - (size / 2)), size, size);
-				painter.closePath();
-				if(addInfo){
-					layout.setDivisionsStyle(painter,false);
-					String repetitions = ("x" + this.getRepeatClose());
-					Point numberSize = painter.getStringExtent(repetitions);
-					painter.drawString(repetitions,x2 - numberSize.x + getSpacing() - size,(y1 - numberSize.y) - Math.round(scale));
-				}
-			}
-		}else{
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.setLineWidth(lineWidthSmall);
-			painter.moveTo(x2 + getSpacing(), y1);
-			painter.lineTo(x2 + getSpacing(), y2);
-			painter.closePath();
-		}
-		painter.setLineWidth(lineWidthSmall);
-	}
-	
-	/**
-	 * Pinta la Clave
-	 */
-	private void paintClef(ViewLayout layout,TGPainter painter,int fromX, int fromY) {
-		//-----SCORE ------------------------------------//
-		if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 && this.paintClef){
-			int x = fromX + Math.round( 14 * layout.getScale() ) ;
-			int y = fromY + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
-			layout.setClefStyle(painter);
-			painter.initPath(TGPainter.PATH_FILL);
-			if(this.getClef() == TGMeasure.CLEF_TREBLE){
-				TGClefPainter.paintTreble(painter, x, y,layout.getScoreLineSpacing());
-			}
-			else if(this.getClef() == TGMeasure.CLEF_BASS){
-				TGClefPainter.paintBass(painter, x, y,layout.getScoreLineSpacing());
-			}
-			else if(this.getClef() == TGMeasure.CLEF_TENOR){
-				TGClefPainter.paintTenor(painter, x, y,layout.getScoreLineSpacing());
-			}
-			else if(this.getClef() == TGMeasure.CLEF_ALTO){
-				TGClefPainter.paintAlto(painter, x, y,layout.getScoreLineSpacing());
-			}
-			painter.closePath();
-		}
-	}
-	
-	/**
-	 * Pinta la Armadura de Clave
-	 */
-	private void paintKeySignature(ViewLayout layout,TGPainter painter, int fromX, int fromY) {
-		if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 && this.paintKeySignature){
-			float scale = layout.getScoreLineSpacing();
-			int x = fromX + getClefSpacing(layout) + 10;
-			int y = fromY + getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
-			int clefIndex = (this.getClef() - 1);
-			int currentKey = this.getKeySignature();
-			int previousKey = (this.prevMeasure != null ? this.prevMeasure.getKeySignature() : 0);
-			
-			layout.setKeySignatureStyle(painter);
-			
-			//natural
-			if(previousKey >= 1 && previousKey <= 7){
-				int naturalFrom =  (currentKey >= 1 && currentKey <= 7) ? currentKey : 0;
-				for(int i = naturalFrom; i < previousKey; i ++ ){
-					float offset =  ( ( (scale / 2) * SCORE_KEY_SHARP_POSITIONS[clefIndex][i] )  - (scale / 2) );
-					painter.initPath(TGPainter.PATH_FILL);
-					TGKeySignaturePainter.paintNatural(painter,x, (y +  offset  ), scale);
-					painter.closePath();
-					x += (scale - (scale / 4));
-				}
-			}
-			else if(previousKey >= 8 && previousKey <= 14){
-				int naturalFrom =  (currentKey >= 8 && currentKey <= 14) ? currentKey : 7;
-				for(int i = naturalFrom; i < previousKey; i ++ ){
-					float offset =  ( ( (scale / 2) * SCORE_KEY_FLAT_POSITIONS[clefIndex][i - 7] )  - (scale / 2) );
-					painter.initPath(TGPainter.PATH_FILL);
-					TGKeySignaturePainter.paintNatural(painter,x, (y +  offset  ), scale);
-					painter.closePath();
-					x += (scale - (scale / 4));
-				}
-			}
-			
-			//sharps
-			if(currentKey >= 1 && currentKey <= 7){
-				for(int i = 0; i < currentKey; i ++ ){
-					float offset =  ( ( (scale / 2) * SCORE_KEY_SHARP_POSITIONS[clefIndex][i] )  - (scale / 2) );
-					painter.initPath(TGPainter.PATH_FILL);
-					TGKeySignaturePainter.paintSharp(painter,x, (y +  offset  ), scale);
-					painter.closePath();
-					x += (scale - (scale / 4));
-				}
-			}
-			//flats
-			else if(currentKey >= 8 && currentKey <= 14){
-				for(int i = 7; i < currentKey; i ++ ){
-					float offset =  ( ( (scale / 2) * SCORE_KEY_FLAT_POSITIONS[clefIndex][i - 7] )  - (scale / 2) );
-					painter.initPath(TGPainter.PATH_FILL);
-					TGKeySignaturePainter.paintFlat(painter,x, (y +  offset  ), scale);
-					painter.closePath();
-					x += (scale - (scale / 4));
-				}
-			}
-		}
-	}
-	
-	private void paintTimeSignature(ViewLayout layout,TGPainter painter, int fromX, int fromY){
-		if(this.getHeaderImpl().shouldPaintTimeSignature()){
-			layout.setTimeSignatureStyle(painter);
-			float scale = layout.getScale();
-			int style = layout.getStyle();
-			int leftSpacing = Math.round( 5.0f * scale );
-			int x = (getClefSpacing(layout) + getKeySignatureSpacing(layout) + getHeaderImpl().getLeftSpacing(layout) + leftSpacing);
-			String numerator = Integer.toString(getTimeSignature().getNumerator());
-			String denominator = Integer.toString(getTimeSignature().getDenominator().getValue());
-			if( (style & ViewLayout.DISPLAY_SCORE) != 0 ){
-				int y = getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
-				int y1 = (int)(y - (3f * scale));
-				int y2 = (int)(((y + (layout.getScoreLineSpacing() * 4)) - painter.getStringExtent(denominator).y) + (3f * scale));
-				painter.drawString(numerator,fromX + x,fromY + y1,true);
-				painter.drawString(denominator,fromX + x,fromY + y2,true);
-			}else if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){
-				int y = getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE);
-				int move = (int)((8f - getTrack().stringCount()) * scale);
-				int y1 = (y - move);
-				int y2 = ((y  + getTrackImpl().getTabHeight()) - painter.getStringExtent(denominator).y) + move;
-				painter.drawString(numerator,fromX + x,fromY + y1,true);
-				painter.drawString(denominator,fromX + x,fromY + y2,true);
-			}
-		}
-	}
-	
-	private void paintTempo(ViewLayout layout,TGPainter painter){
-		if(this.getHeaderImpl().shouldPaintTempo()){
-			float scale = 5f * layout.getScale(); 
-			int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout));
-			int y = getPosY();
-			int lineSpacing = (Math.max(layout.getScoreLineSpacing() , layout.getStringSpacing()));
-			int style = layout.getStyle();
-			if( (style & ViewLayout.DISPLAY_SCORE) != 0 ){
-				y += ( getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - lineSpacing ) ;
-			}else if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){
-				y += ( getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - lineSpacing ) ;
-			}
-			
-			layout.setTempoStyle(painter, false);
-			int imgX = x;
-			int imgY = (y - (Math.round(scale * 3.5f ) + 2));
-			if( layout.isBufferEnabled() ){
-				painter.drawImage(layout.getResources().getTempoImage(),imgX , imgY );
-			} else {
-				TGTempoPainter.paintTempo(painter, imgX, imgY, scale);
-			}
-			
-			layout.setTempoStyle(painter, true);
-			String value = (" = " + getTempo().getValue());
-			int fontX = x + (Math.round( (1.33f * scale) ) + 1 );
-			int fontY = Math.round(y - painter.getStringExtent( value ).y - (1.0f * layout.getScale()));
-			painter.drawString(value , fontX, fontY, true);
-		}
-	}
-	
-	private void paintTripletFeel(ViewLayout layout,TGPainter painter){
-		if(this.getHeaderImpl().shouldPaintTripletFeel()){
-			float scale = (5f * layout.getScale());
-			int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getHeaderImpl().getTempoSpacing(layout));
-			int y = (getPosY());
-			int lineSpacing = (Math.max(layout.getScoreLineSpacing() , layout.getStringSpacing()));
-			int style = layout.getStyle();
-			if( (style & ViewLayout.DISPLAY_SCORE) != 0 ){
-				y += ( getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - lineSpacing );
-			}else if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){
-				y += ( getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - lineSpacing );
-			}
-			
-			layout.setTripletFeelStyle(painter, true);
-			String equal = (" = ");
-			Point fontSize = painter.getStringExtent( equal );
-			int fontX = x + (Math.round( (1.33f * scale) + (1.5f * scale) ));
-			int fontY = Math.round(y - fontSize.y - (1.0f * layout.getScale()));
-			painter.drawString(equal, fontX , fontY, true);
-			
-			layout.setTripletFeelStyle(painter, false);
-			int x1 = x;
-			int x2 = x + (Math.round( (1.33f * scale) + (1.5f * scale) ) + fontSize.x);
-			int y1 = y - (Math.round( (1.0f * scale) + (2.5f * scale) ) + 2);
-			int y2 = y - (Math.round( (1.0f * scale) + (2.5f * scale) + (1.0f * scale)) + 2);
-			
-			if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_NONE && this.prevMeasure != null){
-				int previous = this.prevMeasure.getTripletFeel();
-				if(previous == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){
-					if( layout.isBufferEnabled() ){
-						painter.drawImage(layout.getResources().getTripletFeel8(), x1, y2 );
-						painter.drawImage(layout.getResources().getTripletFeelNone8(),x2 , y1 );
-					}
-					else{
-						TGTripletFeelPainter.paintTripletFeel8(painter, x1, y2, scale );
-						TGTripletFeelPainter.paintTripletFeelNone8(painter, x2 , y1, scale );
-					}
-				}
-				else if(previous == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){
-					if( layout.isBufferEnabled() ){
-						painter.drawImage(layout.getResources().getTripletFeel16(), x1, y2 );
-						painter.drawImage(layout.getResources().getTripletFeelNone16(),x2 , y1 );
-					}
-					else{
-						TGTripletFeelPainter.paintTripletFeel16(painter, x1, y2, scale );
-						TGTripletFeelPainter.paintTripletFeelNone16(painter, x2 , y1, scale );
-					}
-				}
-			}
-			else if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){
-				if( layout.isBufferEnabled() ){
-					painter.drawImage(layout.getResources().getTripletFeelNone8(), x1, y1 );
-					painter.drawImage(layout.getResources().getTripletFeel8(),x2 , y2 );
-				}
-				else{
-					TGTripletFeelPainter.paintTripletFeelNone8(painter, x1, y1, scale );
-					TGTripletFeelPainter.paintTripletFeel8(painter, x2 , y2, scale );
-				}
-			}
-			else if(getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){
-				if( layout.isBufferEnabled() ){
-					painter.drawImage(layout.getResources().getTripletFeelNone16(), x1, y1 );
-					painter.drawImage(layout.getResources().getTripletFeel16(),x2 , y2 );
-				}
-				else{
-					TGTripletFeelPainter.paintTripletFeelNone16(painter, x1, y1, scale );
-					TGTripletFeelPainter.paintTripletFeel16(painter, x2 , y2, scale );
-				}
-			}
-		}
-	}
-	
-	private void paintLoopMarker(ViewLayout layout,TGPainter painter){
-		if( layout.hasLoopMarker( this ) ){
-			int size = Math.round( layout.getLoopMarkerSpacing() - (1f * layout.getScale()));
-			MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
-			if( pm.getLoopSHeader() == getHeader().getNumber() ){
-				int x = (getPosX() + Math.round(size / 2f) );
-				int y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_LOOP_MARKER));
-				layout.setLoopSMarkerStyle(painter);
-				paintLoopMarker(painter, x, y, size);
-			}
-			if( pm.getLoopEHeader() == getHeader().getNumber() ){
-				float x = (getPosX() + getWidth(layout) + getSpacing() - size );
-				float y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_LOOP_MARKER));
-				layout.setLoopEMarkerStyle(painter);
-				paintLoopMarker(painter, x, y, size);
-			}
-		}
-	}
-	
-	private void paintLoopMarker(TGPainter painter, float x, float y, float size){
-		painter.initPath( TGPainter.PATH_FILL );
-		painter.addRectangle(x, y, size, size);
-		painter.closePath();
-	}
-	
-	private void paintMarker(ViewLayout layout,TGPainter painter){
-		if( this.hasMarker() ){
-			int x = (getPosX() + getHeaderImpl().getLeftSpacing(layout) + getFirstNoteSpacing(layout));
-			int y = (getPosY() + getTs().getPosition(TGTrackSpacing.POSITION_MARKER));
-			
-			layout.setMarkerStyle(painter,getMarkerColor());
-			painter.drawString(getMarker().getTitle(), x, y);
-		}
-	}
-	
-	private void paintTexts(ViewLayout layout,TGPainter painter){
-		Iterator it = getBeats().iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat)it.next();
-			if( beat.isTextBeat() ){
-				TGTextImpl text = (TGTextImpl)beat.getText();
-				text.paint(layout, painter,(getPosX() + getHeaderImpl().getLeftSpacing(layout) ),getPosY());
-			}
-		}
-	}
-	
-	private void paintPlayMode(ViewLayout layout,TGPainter painter){
-		if(layout.isPlayModeEnabled() && isPlaying(layout)){
-			float scale = layout.getScale();
-			int width = getWidth(layout) + getSpacing();
-			int y1 = getPosY();
-			int y2 = getPosY();
-			int style = layout.getStyle();
-			if( (style & (ViewLayout.DISPLAY_SCORE | ViewLayout.DISPLAY_TABLATURE)) == (ViewLayout.DISPLAY_SCORE | ViewLayout.DISPLAY_TABLATURE) ){
-				y1 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - layout.getScoreLineSpacing());
-				y2 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + getTrackImpl().getTabHeight() + layout.getStringSpacing());
-			}else if( (style & ViewLayout.DISPLAY_SCORE) != 0 ){
-				y1 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) - layout.getScoreLineSpacing());
-				y2 += (getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) + (layout.getScoreLineSpacing() * 5));
-			} else if( (style & ViewLayout.DISPLAY_TABLATURE) != 0 ){
-				y1 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - layout.getStringSpacing());
-				y2 += (getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) + getTrackImpl().getTabHeight() + layout.getStringSpacing());
-			}
-			layout.setMeasurePlayingStyle(painter);
-			// Don't uncomment "lineStyle" until be sure SWT bug has fixed.
-			// See bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=225725
-			//painter.setLineStyle(SWT.LINE_DASH);
-			painter.setLineWidth(1);
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.addRectangle(getPosX() + (5f * scale),y1,width - (10f * scale),(y2 - y1));
-			painter.closePath();
-			//painter.setLineStyle(SWT.LINE_SOLID);
-		}
-	}
-	
-	/**
-	 * Retorna true si se esta reproduciendo y la posicion del player esta en este compas.
-	 */
-	public boolean isPlaying(ViewLayout layout){
-		return (getTrackImpl().hasCaret(layout) && TuxGuitar.instance().getEditorCache().isPlaying(this));
-	}
-	
-	public int getBeatSpacing(TGBeat beat){
-		return  (int)((beat.getStart() - getStart())  * getSpacing() / getLength());
-	}
-	
-	public boolean hasTrack(int number){
-		return (getTrack().getNumber() == number);
-	}
-	
-	/**
-	 * Retorna el ancho del Compas
-	 */
-	public int getWidth(ViewLayout layout) {
-		return ((layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) != 0 ?this.getHeaderImpl().getMaxWidth():this.width);
-	}
-	
-	private int calculateKeySignatureSpacing(ViewLayout layout){
-		int spacing = 0;
-		if(this.paintKeySignature){
-			if(this.getKeySignature() <= 7){
-				spacing += Math.round( ( 6f * layout.getScale() ) * this.getKeySignature() ) ;
-			}else{
-				spacing += Math.round( ( 6f * layout.getScale() ) * (this.getKeySignature() - 7) ) ;
-			}
-			if(this.prevMeasure != null ){
-				if(this.prevMeasure.getKeySignature() <= 7){
-					spacing += Math.round( ( 6f * layout.getScale() ) * this.prevMeasure.getKeySignature() ) ;
-				}else{
-					spacing += Math.round( ( 6f * layout.getScale() ) * (this.prevMeasure.getKeySignature() - 7) ) ;
-				}
-			}
-		}
-		return spacing;
-	}
-	
-	public int getFirstNoteSpacing(ViewLayout layout){
-		return getHeaderImpl().getFirstNoteSpacing(layout,this);
-	}
-	
-	public int getClefSpacing(ViewLayout layout){
-		return getHeaderImpl().getClefSpacing(layout, this);
-	}
-	
-	public int getKeySignatureSpacing(ViewLayout layout){
-		return getHeaderImpl().getKeySignatureSpacing(layout, this);
-	}
-	
-	public long getDivisionLength(){
-		return this.divisionLength;
-	}
-	
-	public boolean isBufferCreated() {
-		return this.bufferCreated;
-	}
-	
-	public void setBufferCreated(boolean bufferCreated) {
-		this.bufferCreated = bufferCreated;
-	}
-	
-	/**
-	 * Retorna la posicion X dentro del compas
-	 */
-	public int getPosX() {
-		return this.posX;
-	}
-	
-	/**
-	 * Asigna la posicion X dentro del compas
-	 */
-	public void setPosX(int posX) {
-		this.posX = posX;
-	}
-	
-	/**
-	 * Retorna la posicion Y dentro del compas
-	 */
-	public int getPosY() {
-		return this.posY;
-	}
-	
-	/**
-	 * Asigna la posicion Y dentro del compas
-	 */
-	public void setPosY(int posY) {
-		this.posY = posY;
-	}
-	
-	/**
-	 * Retorna el spacing de negras
-	 */
-	private int getQuarterSpacing(){
-		return this.quarterSpacing;
-	}
-	
-	/**
-	 * Retorna el spacing de negras
-	 */
-	private int getMaxQuarterSpacing(ViewLayout layout){
-		return (((layout.getStyle() & ViewLayout.DISPLAY_MULTITRACK) != 0)?getHeaderImpl().getMaxQuarterSpacing():this.quarterSpacing);
-	}
-	
-	public TGMeasureHeaderImpl getHeaderImpl(){
-		return (TGMeasureHeaderImpl)super.getHeader();
-	}
-	
-	public int getSpacing() {
-		return this.spacing;
-	}
-	
-	public void setSpacing(int spacing) {
-		if(spacing != this.spacing){
-			setBufferCreated(false);
-		}
-		this.spacing = spacing;
-	}
-	
-	public boolean isOutOfBounds() {
-		return this.outOfBounds;
-	}
-	
-	public void setOutOfBounds(boolean outOfBounds) {
-		this.outOfBounds = outOfBounds;
-	}
-	
-	public boolean isFirstOfLine() {
-		return this.firstOfLine;
-	}
-	
-	public void setFirstOfLine(boolean firstOfLine) {
-		this.firstOfLine = firstOfLine;
-	}
-	
-	public TGTrackImpl getTrackImpl(){
-		return (TGTrackImpl)super.getTrack();
-	}
-	
-	public TGTrackSpacing getTs() {
-		return this.ts;
-	}
-	
-	public void setTs(TGTrackSpacing ts) {
-		if(getTs() == null){
-			setBufferCreated(false);
-		}else if(getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) != ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)){
-			setBufferCreated(false);
-		}else if(getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) != ts.getPosition(TGTrackSpacing.POSITION_TABLATURE)){
-			setBufferCreated(false);
-		}else if(getTs().getPosition(TGTrackSpacing.POSITION_EFFECTS) != ts.getPosition(TGTrackSpacing.POSITION_EFFECTS)){
-			setBufferCreated(false);
-		}
-		this.ts = ts;
-	}
-	
-	public int getMaxY() {
-		return this.maxY;
-	}
-	
-	public int getMinY() {
-		return this.minY;
-	}
-	
-	public int getNotEmptyBeats(){
-		return this.notEmptyBeats;
-	}
-	
-	public int getNotEmptyVoices(){
-		return this.notEmptyVoices;
-	}
-	
-	public int getLyricBeatIndex() {
-		return this.lyricBeatIndex;
-	}
-	
-	public void setLyricBeatIndex(int lyricBeatIndex) {
-		this.lyricBeatIndex = lyricBeatIndex;
-	}
-	
-	public boolean isPaintClef() {
-		return this.paintClef;
-	}
-	
-	public boolean isPaintKeySignature() {
-		return this.paintKeySignature;
-	}
-	
-	public boolean isDisposed(){
-		return getBuffer().isDisposed();
-	}
-	
-	public TGMeasureBuffer getBuffer(){
-		if(this.buffer == null){
-			this.buffer = new TGMeasureBuffer(TuxGuitar.instance().getDisplay());
-		}
-		return this.buffer;
-	}
-	
-	public Color getMarkerColor(){
-		TGColor color = getMarker().getColor();
-		if(this.markerColor != null && !this.markerColor.isDisposed()){
-			RGB rgb = this.markerColor.getRGB();
-			if( rgb.red != color.getR() || rgb.green != color.getG() ||  rgb.blue != color.getB()){
-				this.disposeMarkerColor();
-			}
-		}
-		if(this.markerColor == null || this.markerColor.isDisposed()){
-			this.markerColor = new Color(TuxGuitar.instance().getDisplay(), color.getR(),color.getG(),color.getB());
-		}
-		return this.markerColor;
-	}
-
-	public void disposeMarkerColor(){
-		if(this.markerColor != null && !this.markerColor.isDisposed()){
-			this.markerColor.dispose();
-			this.markerColor = null;
-		}
-	}
-	
-	public void dispose(){
-		new SyncThread( new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					getBuffer().dispose();
-					disposeMarkerColor();
-					Iterator it = getBeats().iterator();
-					while(it.hasNext()){
-						TGBeatImpl beat = (TGBeatImpl)it.next();
-						beat.dispose();
-					}
-				}
-			}
-		} ).start();
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGNoteImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGNoteImpl.java
deleted file mode 100644
index 325a6b1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGNoteImpl.java
+++ /dev/null
@@ -1,656 +0,0 @@
-/*
- * Created on 29-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGKeySignaturePainter;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGNotePainter;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGNoteEffect;
-import org.herac.tuxguitar.song.models.TGVoice;
-import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGNoteImpl extends TGNote {
-	
-	private Rectangle noteOrientation;
-	
-	private int tabPosY;
-	
-	private int scorePosY;
-	
-	private int accidental;
-	
-	public TGNoteImpl(TGFactory factory) {
-		super(factory);
-		this.noteOrientation = new Rectangle(0,0,0,0);
-	}
-	
-	/**
-	 * Actualiza los valores para dibujar
-	 */
-	public void update(ViewLayout layout) {
-		this.accidental = getMeasureImpl().getNoteAccidental( getRealValue() );
-		this.tabPosY = ( (getString() * layout.getStringSpacing()) - layout.getStringSpacing() );
-		this.scorePosY = getVoiceImpl().getBeatGroup().getY1(layout,this,getMeasureImpl().getKeySignature(),getMeasureImpl().getClef());
-	}
-	
-	/**
-	 * Pinta la nota
-	 */
-	public void paint(ViewLayout layout,TGPainter painter, int fromX, int fromY) {
-		int spacing = getBeatImpl().getSpacing();
-		paintScoreNote(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES),spacing);
-		if(!layout.isPlayModeEnabled()){
-			paintOfflineEffects(layout, painter,fromX,fromY, spacing);
-		}
-		paintTablatureNote(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE),spacing);
-	}
-	
-	private void paintOfflineEffects(ViewLayout layout,TGPainter painter,int fromX, int fromY, int spacing){		
-		TGSpacing bs = getBeatImpl().getBs();
-		TGSpacing ts = getMeasureImpl().getTs();
-		TGNoteEffect effect = getEffect();
-		
-		int tsY = (fromY + ts.getPosition(TGTrackSpacing.POSITION_EFFECTS));
-		int bsY = (tsY + (ts.getSize(TGTrackSpacing.POSITION_EFFECTS) - bs.getSize( )));
-		
-		layout.setOfflineEffectStyle(painter);
-		if(effect.isAccentuatedNote()){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_ACCENTUATED_EFFECT ));
-			paintAccentuated(layout, painter, x, y);
-		}
-		if(effect.isHeavyAccentuatedNote()){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_HEAVY_ACCENTUATED_EFFECT ));
-			paintHeavyAccentuated(layout, painter, x, y);
-		}
-		if(effect.isFadeIn()){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_FADE_IN ));
-			paintFadeIn(layout, painter, x, y);
-		}
-		if(effect.isHarmonic() && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0 ){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_HARMONIC_EFFEC ));
-			String key = new String();
-			key = effect.getHarmonic().isNatural()?TGEffectHarmonic.KEY_NATURAL:key;
-			key = effect.getHarmonic().isArtificial()?TGEffectHarmonic.KEY_ARTIFICIAL:key;
-			key = effect.getHarmonic().isTapped()?TGEffectHarmonic.KEY_TAPPED:key;
-			key = effect.getHarmonic().isPinch()?TGEffectHarmonic.KEY_PINCH:key;
-			key = effect.getHarmonic().isSemi()?TGEffectHarmonic.KEY_SEMI:key;
-			painter.drawString(key,x, y);
-		}
-		if(effect.isTapping()){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_TAPPING_EFFEC ));
-			painter.drawString("T",x, y);
-		}
-		if(effect.isSlapping()){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_SLAPPING_EFFEC ));
-			painter.drawString("S",x, y);
-		}
-		if(effect.isPopping()){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_POPPING_EFFEC ));
-			painter.drawString("P",x, y);
-		}
-		if(effect.isPalmMute()){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_PALM_MUTE_EFFEC ));
-			painter.drawString("P.M",x, y);
-		}
-		if(effect.isVibrato()){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_VIBRATO_EFFEC ));
-			paintVibrato(layout, painter,x,y);
-		}
-		if(effect.isTrill()){
-			int x = fromX + getPosX() + spacing;
-			int y = (bsY + bs.getPosition( TGBeatSpacing.POSITION_TRILL_EFFEC ));
-			paintTrill(layout, painter,x,y);
-		}
-	}
-	
-	/**
-	 * Pinta la nota en la tablatura
-	 */
-	public void paintTablatureNote(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing) {
-		int style = layout.getStyle();
-		if((style & ViewLayout.DISPLAY_TABLATURE) != 0){
-			int stringSpacing = layout.getStringSpacing();
-			int x = fromX + getPosX() + spacing + 2;
-			int y = fromY + getTabPosY();
-			
-			this.noteOrientation.x = x;
-			this.noteOrientation.y = y;
-			this.noteOrientation.width = 1;
-			this.noteOrientation.height = 1;
-			
-			layout.setTabNoteStyle(painter, (layout.isPlayModeEnabled() && getBeatImpl().isPlaying(layout)));
-			//-------------ligadura--------------------------------------
-			if (isTiedNote() && (style & ViewLayout.DISPLAY_SCORE) == 0) {
-				float tX = 0;
-				float tY = 0;
-				float tWidth = 0;
-				float tHeight = (stringSpacing * 3);
-				TGNoteImpl noteForTie = getNoteForTie();
-				if (noteForTie != null) {
-					tX = (fromX + noteForTie.getPosX() + noteForTie.getBeatImpl().getSpacing());
-					tY = (fromY + noteForTie.getTabPosY() + stringSpacing);
-					tWidth = (x - tX);
-				}else{
-					Rectangle r = layout.getNoteOrientation(painter,x,y,this);
-					tX = r.x - (stringSpacing * 2);
-					tY = (fromY + getTabPosY() + stringSpacing);
-					tWidth = (stringSpacing * 2);
-				}
-				painter.initPath();
-				painter.addArc(tX, (tY - tHeight ), tWidth, tHeight, 225,90);
-				painter.closePath();
-				
-			//-------------nota--------------------------------------
-			} else if(!isTiedNote()){
-				Rectangle r = layout.getNoteOrientation(painter,x,y,this);
-				this.noteOrientation.x = r.x;
-				this.noteOrientation.y = r.y;
-				this.noteOrientation.width = r.width;
-				this.noteOrientation.height = r.height;
-				String visualNote = (getEffect().isDeadNote())?"X":Integer.toString(getValue());
-				visualNote = (getEffect().isGhostNote())?"(" + visualNote + ")":visualNote;
-				painter.drawString(visualNote, this.noteOrientation.x, this.noteOrientation.y);
-			}
-			
-			//-------------efectos--------------------------------------
-			if(! layout.isPlayModeEnabled() ){
-				
-				paintEffects(layout,painter,fromX,fromY,spacing);
-				
-				if((style & ViewLayout.DISPLAY_SCORE) == 0){
-					int y1 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + (stringSpacing / 2));
-					int y2 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + ((stringSpacing / 2) * 5));
-					
-					//-------------tremolo picking--------------------------------------
-					if(getEffect().isTremoloPicking()){
-						layout.setTabEffectStyle(painter);
-						painter.initPath();
-						int posy = (y1 + ((y2 - y1) / 2));
-						for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){
-							painter.moveTo(x - 3, posy - 1);
-							painter.lineTo(x + 4,posy + 1);
-							posy += 4;
-						}
-						painter.setLineWidth(2);
-						painter.closePath();
-						painter.setLineWidth(1);
-					}
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Pinta la nota en la partitura
-	 */
-	private void paintScoreNote(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing) {
-		if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){
-			float scale = layout.getScoreLineSpacing();
-			int direction = getVoiceImpl().getBeatGroup().getDirection();
-			int key = getMeasureImpl().getKeySignature();
-			int clef = getMeasureImpl().getClef();
-			
-			int x = ( fromX + getPosX() + spacing );
-			int y1 = ( fromY + getScorePosY() ) ;
-			
-			//-------------foreground--------------------------------------
-			boolean playing = (layout.isPlayModeEnabled() && getBeatImpl().isPlaying(layout));
-			
-			layout.setScoreNoteStyle(painter,playing);
-			
-			//----------ligadura---------------------------------------
-			if (isTiedNote()) {
-				TGNoteImpl noteForTie = getNoteForTie();
-				float tScale = (scale / 8.0f);
-				float tX = x - (20.0f * tScale);
-				float tY = y1 - (2.0f * tScale);
-				float tWidth = (20.0f * tScale);
-				float tHeight = (30.0f * tScale);
-				if (noteForTie != null) {
-					int tNoteX = (fromX + noteForTie.getPosX() + noteForTie.getBeatImpl().getSpacing());
-					int tNoteY = (fromY + getScorePosY());
-					tX = tNoteX + (6.0f * tScale);
-					tY = tNoteY - (3.0f * tScale);
-					tWidth = (x - tNoteX) - (3.0f * tScale);
-					tHeight = (35.0f * tScale);
-				}
-				painter.initPath();
-				painter.addArc(tX,tY, tWidth, tHeight, 45, 90);
-				painter.closePath();
-			}
-			//----------sostenido--------------------------------------
-			if(this.accidental == TGMeasureImpl.NATURAL){
-				painter.initPath(TGPainter.PATH_FILL);
-				TGKeySignaturePainter.paintNatural(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale);
-				painter.closePath();
-			}
-			else if(this.accidental == TGMeasureImpl.SHARP){
-				painter.initPath(TGPainter.PATH_FILL);
-				TGKeySignaturePainter.paintSharp(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale);
-				painter.closePath();
-			}
-			else if(this.accidental == TGMeasureImpl.FLAT){
-				painter.initPath(TGPainter.PATH_FILL);
-				TGKeySignaturePainter.paintFlat(painter,(x - (scale - (scale / 4)) ),(y1 + (scale / 2)), scale);
-				painter.closePath();
-			}
-			//----------fin sostenido--------------------------------------
-			if(getEffect().isHarmonic()){
-				if( layout.isBufferEnabled() ){
-					painter.drawImage(layout.getResources().getHarmonicNote(getVoice().getDuration().getValue(),playing),x,y1);
-				}else{
-					boolean full = (getVoice().getDuration().getValue() >= TGDuration.QUARTER);
-					painter.initPath((full ? TGPainter.PATH_DRAW | TGPainter.PATH_FILL : TGPainter.PATH_DRAW));
-					TGNotePainter.paintHarmonic(painter,x,y1+1,(layout.getScoreLineSpacing() - 2) );
-					painter.closePath();
-				}
-			}else{
-				if( layout.isBufferEnabled() ){
-					painter.drawImage(layout.getResources().getScoreNote(getVoice().getDuration().getValue(),playing),x,y1);
-				}else{
-					boolean full = (getVoice().getDuration().getValue() >= TGDuration.QUARTER);
-					painter.initPath((full ? TGPainter.PATH_FILL : TGPainter.PATH_DRAW));
-					TGNotePainter.paintNote(painter,x,y1+1, ((full ? layout.getScoreLineSpacing() + 1 : layout.getScoreLineSpacing() ) - 2) );
-					painter.closePath();
-				}
-			}
-			
-			if(! layout.isPlayModeEnabled() ){
-				
-				if(getEffect().isGrace()){
-					paintGrace(layout, painter,x ,y1);
-				}
-				
-				//PUNTILLO y DOBLE PUNTILLO
-				if (getVoice().getDuration().isDotted() || getVoice().getDuration().isDoubleDotted()) {
-					getVoiceImpl().paintDot(layout, painter,( x + (12.0f * (scale / 8.0f) ) ), ( y1 + (layout.getScoreLineSpacing()/ 2)), (scale / 10.0f) );
-				}
-				
-				//dibujo el pie
-				if(getVoice().getDuration().getValue() >= TGDuration.HALF){
-					layout.setScoreNoteFooterStyle(painter);
-					int xMove = (direction == TGBeatGroup.DIRECTION_UP ? layout.getResources().getScoreNoteWidth() : 0);
-					int y2 = fromY + getVoiceImpl().getBeatGroup().getY2(layout,getPosX() + spacing,key,clef);
-					
-					//staccato
-					if (getEffect().isStaccato()) {
-						int size = 3;
-						int sX = x + xMove;
-						int sY = (y2 + (4 * ((direction == TGBeatGroup.DIRECTION_UP)?-1:1)));
-						layout.setScoreEffectStyle(painter);
-						painter.initPath(TGPainter.PATH_FILL);
-						painter.moveTo(sX - (size / 2),sY - (size / 2));
-						painter.addOval(sX - (size / 2),sY - (size / 2),size,size);
-						painter.closePath();
-					}
-					//tremolo picking
-					if(getEffect().isTremoloPicking()){
-						layout.setScoreEffectStyle(painter);
-						painter.initPath();
-						int tpY = fromY;
-						if((direction == TGBeatGroup.DIRECTION_UP)){
-							tpY += (getVoiceImpl().getBeatGroup().getMaxNote().getScorePosY() - layout.getScoreLineSpacing() - 4);
-						}else{
-							tpY += (getVoiceImpl().getBeatGroup().getMinNote().getScorePosY() + layout.getScoreLineSpacing() + 4);
-						}
-						for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){
-							painter.moveTo(x + xMove - 3, tpY + 1);
-							painter.lineTo(x + xMove + 4,tpY - 1);
-							tpY += 4;
-						}
-						painter.setLineWidth(2);
-						painter.closePath();
-						painter.setLineWidth(1);
-					}
-				}else{
-					//staccato
-					if (getEffect().isStaccato()) {
-						int size = 3;
-						int sX = x + (layout.getResources().getScoreNoteWidth() / 2);
-						int sY = (fromY + getVoiceImpl().getBeatGroup().getMinNote().getScorePosY() + layout.getScoreLineSpacing()) + 2;
-						layout.setScoreEffectStyle(painter);
-						painter.initPath(TGPainter.PATH_FILL);
-						painter.moveTo(sX - (size / 2),sY - (size / 2));
-						painter.addOval(sX - (size / 2),sY - (size / 2),size,size);
-						painter.closePath();
-					}
-					//tremolo picking
-					if(getEffect().isTremoloPicking()){
-						layout.setScoreEffectStyle(painter);
-						painter.initPath();
-						int tpX = (x + (layout.getResources().getScoreNoteWidth() / 2));
-						int tpY = fromY + (getVoiceImpl().getBeatGroup().getMaxNote().getScorePosY() - layout.getScoreLineSpacing() - 4);
-						for(int i = TGDuration.EIGHTH;i <= getEffect().getTremoloPicking().getDuration().getValue(); i += i){
-							painter.moveTo(tpX - 3, tpY + 1);
-							painter.lineTo(tpX + 4,tpY - 1);
-							tpY += 4;
-						}
-						painter.setLineWidth(2);
-						painter.closePath();
-						painter.setLineWidth(1);
-					}
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Encuentra la nota a la que esta ligada
-	 */
-	private TGNoteImpl getNoteForTie() {
-		for (int i = getMeasureImpl().countBeats() - 1; i >= 0; i--) {
-			TGBeat beat = getMeasureImpl().getBeat(i);
-			TGVoice voice = beat.getVoice( getVoice().getIndex() );
-			if (beat.getStart() < getBeatImpl().getStart() && !voice.isRestVoice()) {
-				Iterator it = voice.getNotes().iterator();
-				while(it.hasNext()){
-					TGNoteImpl note = (TGNoteImpl)it.next();
-					if (note.getString() == getString()) {
-						return note;
-					}
-				}
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Pinta los efectos
-	 */
-	private void paintEffects(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing){
-		int x = fromX + getPosX() + spacing;
-		int y = fromY + getTabPosY();
-		TGNoteEffect effect = getEffect();
-		if(effect.isGrace()){
-			layout.setTabGraceStyle(painter);
-			String value = Integer.toString(effect.getGrace().getFret());
-			Point gracePoint = painter.getStringExtent(value);
-			painter.drawString(value, (this.noteOrientation.x - gracePoint.x - 2), this.noteOrientation.y );
-		}
-		if(effect.isBend()){
-			paintBend(layout, painter,(this.noteOrientation.x + this.noteOrientation.width), y);
-		}else if(effect.isTremoloBar()){
-			paintTremoloBar(layout, painter,(this.noteOrientation.x + this.noteOrientation.width), y);
-		}else if(effect.isSlide() || effect.isHammer()){
-			int nextFromX = fromX;
-			TGNoteImpl nextNote = (TGNoteImpl)layout.getSongManager().getMeasureManager().getNextNote(getMeasureImpl(),getBeatImpl().getStart(),getVoice().getIndex(),getString());
-			if(effect.isSlide()){
-				paintSlide(layout, painter, nextNote, x, y, nextFromX);
-			}else if(effect.isHammer()){
-				paintHammer(layout, painter, nextNote, x, y, nextFromX);
-			}
-		}
-	}
-	
-	private void paintBend(ViewLayout layout,TGPainter painter,int fromX,int fromY){
-		float scale = layout.getScale();
-		float x = (fromX + (1.0f * scale));
-		float y = (fromY - (2.0f * scale));
-		
-		layout.setTabEffectStyle(painter);
-		
-		painter.initPath();
-		painter.moveTo( x, y );
-		painter.lineTo( x + (1.0f * scale), y );
-		painter.cubicTo(x + (1.0f * scale), y,  x + (3.0f * scale), y , x + (3.0f * scale), y - (2.0f * scale));
-		painter.lineTo( x + (3.0f * scale), y - (12.0f * scale));
-		painter.lineTo( x + (1.0f * scale), y - (10.0f * scale));
-		painter.moveTo( x + (3.0f * scale), y - (12.0f * scale));
-		painter.lineTo( x + (5.0f * scale), y - (10.0f * scale));
-		painter.closePath();
-	}
-	
-	private void paintTremoloBar(ViewLayout layout,TGPainter painter,int fromX,int fromY){
-		float scale = layout.getScale();
-		float x1 = fromX + (1.0f * scale);
-		float x2 = x1 + (8.0f * scale);
-		float y1 = fromY;
-		float y2 = y1 + (9.0f * scale);
-		layout.setTabEffectStyle(painter);
-		painter.initPath();
-		painter.moveTo(x1,y1);
-		painter.lineTo(x1 + ( (x2 - x1) / 2 ),y2);
-		painter.lineTo(x2,y1);
-		painter.closePath();
-	}
-	
-	private void paintSlide(ViewLayout layout,TGPainter painter,TGNoteImpl nextNote,int fromX,int fromY,int nextFromX){
-		float xScale = layout.getScale();
-		float yScale = (layout.getStringSpacing() / 10.0f);
-		float yMove = (3.0f * yScale);
-		float x = fromX;
-		float y = fromY;
-		layout.setTabEffectStyle(painter);
-		if(nextNote != null){
-			float nextX = nextNote.getPosX() + nextFromX + nextNote.getBeatImpl().getSpacing();
-			float nextY = y;
-			
-			if(nextNote.getValue() < getValue()){
-				y -= yMove;
-				nextY += yMove;
-			}else if(nextNote.getValue() > getValue()){
-				y += yMove;
-				nextY -= yMove;
-			}else{
-				y -= yMove;
-				nextY -= yMove;
-			}
-			painter.initPath();
-			painter.moveTo(x + (6.0f * xScale),y);
-			painter.lineTo(nextX - (3.0f * xScale),nextY);
-			painter.closePath();
-		}else{
-			painter.initPath();
-			painter.moveTo(x + (6.0f * xScale),y - yMove);
-			painter.lineTo(x + (17.0f * xScale),y - yMove);
-			painter.closePath();
-		}
-	}
-	
-	private void paintHammer(ViewLayout layout,TGPainter painter,TGNoteImpl nextNote,int fromX,int fromY,int nextFromX){
-		float xScale = layout.getScale();
-		float yScale = (layout.getStringSpacing() / 10.0f);
-		
-		float x = (fromX + (7.0f * xScale));
-		float y = (fromY - (5.0f * yScale));
-		
-		float width = (nextNote != null)?( (nextNote.getPosX() + nextFromX + nextNote.getBeatImpl().getSpacing()) - (4.0f * xScale) - x ):(10.0f * xScale);
-		float height = (15.0f * yScale);
-		layout.setTabEffectStyle(painter);
-		painter.initPath();
-		painter.addArc(x,y, width, height, 45,90);
-		painter.closePath();
-	}
-	
-	private void paintGrace(ViewLayout layout, TGPainter painter,int fromX,int fromY){
-		float scale = ( layout.getScoreLineSpacing() / 2.25f );
-		
-		float x = fromX - (2f * scale);
-		float y = fromY + (scale / 3);
-		
-		layout.setScoreEffectStyle(painter);
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintFooter(painter,x, y , -1 , scale);
-		painter.closePath();
-		
-		painter.initPath();
-		painter.moveTo(x, y - (2f * scale));
-		painter.lineTo(x, y + (2f * scale) - (scale / 4f));
-		painter.closePath();
-		
-		painter.initPath(TGPainter.PATH_DRAW | TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x - scale*1.33f, y + scale + (scale / 4f),  scale);
-		painter.closePath();
-		
-		painter.initPath();
-		painter.moveTo(x - scale, y );
-		painter.lineTo(x + scale, y - scale);
-		painter.closePath();
-	}
-	
-	private void paintVibrato(ViewLayout layout, TGPainter painter,int fromX,int fromY){
-		float scale = layout.getScale();
-		float x = fromX;
-		float y = fromY + (2.0f * scale);
-		float width = ( getVoiceImpl().getWidth() - (2.0f * scale) );
-		
-		int loops = (int)(width / (6.0f * scale) );
-		if(loops > 0 ){
-			layout.setTabEffectStyle(painter);
-			painter.initPath(TGPainter.PATH_FILL);
-			painter.moveTo(( x + ((2.0f) * scale) ),( y + (1.0f * scale) ));
-			for( int i = 0; i < loops ; i ++ ){
-				x = (fromX + ( (6.0f * scale) * i ) );
-				painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
-				painter.cubicTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ),( x + (3.0f * scale) ), y ,( x + (4.0f * scale) ),( y + (1.0f * scale) ));
-				painter.lineTo(( x + (6.0f * scale) ),( y + (3.0f * scale) ));
-			}
-			
-			painter.lineTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ));
-			painter.cubicTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ),( x + (8.0f * scale) ),( y + (2.0f * scale) ),( x + (7.0f * scale) ),( y + (3.0f * scale) ));
-			
-			for( int i = (loops - 1); i >= 0 ; i -- ){
-				x = (fromX + ( (6.0f * scale) * i ) );
-				painter.lineTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ));
-				painter.cubicTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ),( x + (5.0f * scale) ),( y + (5.0f * scale) ),( x + (4.0f * scale) ),( y + (4.0f * scale) ));
-				painter.lineTo(( x + (2.0f * scale) ),( y + (2.0f * scale) ));
-				painter.lineTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ));
-			}
-			painter.cubicTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ), x ,( y + (3.0f * scale) ),( x + (1.0f * scale) ),( y + (2.0f * scale) ));
-			painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
-			painter.closePath();
-		}
-	}
-	
-	private void paintTrill(ViewLayout layout, TGPainter painter,int fromX,int fromY){
-		String string = "Tr";
-		Point stringSize = painter.getStringExtent( string );
-		float scale = layout.getScale();
-		float x = fromX + stringSize.x;
-		float y = fromY + (   (stringSize.y - (5.0f * scale)) / 2.0f );
-		float width = ( getVoiceImpl().getWidth() - stringSize.x - (2.0f * scale) );
-		
-		int loops = (int)(width / (6.0f * scale) );
-		if(loops > 0 ){
-			painter.drawString(string, fromX, fromY);
-			
-			layout.setTabEffectStyle(painter);
-			painter.initPath(TGPainter.PATH_FILL);
-			painter.moveTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
-			for( int i = 0; i < loops ; i ++ ){
-				x = (fromX + stringSize.x + ( (6.0f * scale) * i ) );
-				painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
-				painter.cubicTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ),( x + (3.0f * scale) ), y ,( x + (4.0f * scale) ),( y + (1.0f * scale) ));
-				painter.lineTo(( x + (6.0f * scale) ),( y + (3.0f * scale) ));
-			}
-			
-			painter.lineTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ));
-			painter.cubicTo(( x + (7.0f * scale) ),( y + (2.0f * scale) ),( x + (8.0f * scale) ),( y + (2.0f * scale) ),( x + (7.0f * scale) ),( y + (3.0f * scale) ));
-			
-			for( int i = (loops - 1); i >= 0 ; i -- ){
-				x = (fromX + stringSize.x + ( (6.0f * scale) * i ) );
-				painter.lineTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ));
-				painter.cubicTo(( x + (6.0f * scale) ),( y + (4.0f * scale) ),( x + (5.0f * scale) ),( y + (5.0f * scale) ),( x + (4.0f * scale) ),( y + (4.0f * scale) ));
-				painter.lineTo(( x + (2.0f * scale) ),( y + (2.0f * scale) ));
-				painter.lineTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ));
-			}
-			painter.cubicTo(( x + (1.0f * scale) ),( y + (3.0f * scale) ), x ,( y + (3.0f * scale) ),( x + (1.0f * scale) ),( y + (2.0f * scale) ));
-			painter.lineTo(( x + (2.0f * scale) ),( y + (1.0f * scale) ));
-			painter.closePath();
-		}
-	}
-	
-	private void paintFadeIn(ViewLayout layout, TGPainter painter,int fromX,int fromY){
-		float scale = layout.getScale();
-		float x = fromX;
-		float y = fromY + (4.0f * scale );
-		float width = getVoiceImpl().getWidth();
-		painter.initPath();
-		painter.moveTo ( x , y );
-		painter.cubicTo( x , y , x + width, y,  x + width, y - (4.0f * scale ));
-		painter.moveTo ( x , y );
-		painter.cubicTo( x , y , x + width, y,  x + width, y + (4.0f * scale ));
-		painter.closePath();
-	}
-	
-	private void paintAccentuated(ViewLayout layout, TGPainter painter,int fromX,int fromY){
-		float scale = layout.getScale();
-		float x = fromX;
-		float y = fromY + (2f * scale );
-		painter.initPath();
-		painter.moveTo( x , y );
-		painter.lineTo( x + (6.0f * scale ) , y + (2.5f * scale ));
-		painter.lineTo( x , y + (5.0f * scale ));
-		painter.closePath();
-	}
-	
-	private void paintHeavyAccentuated(ViewLayout layout, TGPainter painter,int fromX,int fromY){
-		float scale = layout.getScale();
-		float x = fromX;
-		float y = fromY;
-		painter.initPath();
-		painter.moveTo( x , y + (5.0f * scale ) );
-		painter.lineTo( x + (3.0f * scale ) , y + (1.0f * scale ));
-		painter.lineTo( x + (6.0f * scale ) , y + (5.0f * scale ) );
-		painter.closePath();
-	}
-	
-	public int getRealValue(){
-		return (getValue() + getMeasureImpl().getTrack().getString(getString()).getValue());
-	}
-	
-	public int getScorePosY() {
-		return this.scorePosY;
-	}
-	
-	public int getTabPosY() {
-		return this.tabPosY;
-	}
-	
-	public TGMeasureImpl getMeasureImpl(){
-		return getBeatImpl().getMeasureImpl();
-	}
-	
-	public int getPaintPosition(int index){
-		return getMeasureImpl().getTs().getPosition(index);
-	}
-	
-	public TGBeatImpl getBeatImpl() {
-		return getVoiceImpl().getBeatImpl();
-	}
-	
-	public TGVoiceImpl getVoiceImpl() {
-		return (TGVoiceImpl)super.getVoice();
-	}
-	
-	public int getPosX() {
-		return getBeatImpl().getPosX();
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGResources.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGResources.java
deleted file mode 100644
index 3b94f11..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGResources.java
+++ /dev/null
@@ -1,486 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.graphics.Resource;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGNotePainter;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGTempoPainter;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGTripletFeelPainter;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.util.ImageUtils;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-public class TGResources {
-	
-	private static final int SCORE_NOTE_EMPTY_NORMAL_MODE = 0;
-	private static final int SCORE_NOTE_EMPTY_PLAY_MODE = 1;
-	private static final int SCORE_NOTE_FULL_NORMAL_MODE = 2;
-	private static final int SCORE_NOTE_FULL_PLAY_MODE = 3;
-	
-	private ViewLayout layout;
-	private List resources;
-	private Font defaultFont;
-	private Font noteFont;
-	private Font timeSignatureFont;
-	private Font lyricFont;
-	private Font textFont;
-	private Font markerFont;
-	private Font graceFont;
-	private Font chordFont;
-	private Font chordFretFont;
-	private Font printerDefaultFont;
-	private Font printerNoteFont;
-	private Font printerTimeSignatureFont;
-	private Font printerLyricFont;
-	private Font printerTextFont;
-	private Font printerGraceFont;
-	private Font printerChordFont;
-	private Color backgroundColor;
-	private Color lineColor;
-	private Color scoreNoteColor;
-	private Color tabNoteColor;
-	private Color playNoteColor;
-	private Color colorWhite;
-	private Color colorBlack;
-	private Color colorRed;
-	private Color caretColor1;
-	private Color caretColor2;
-	private Color loopSMarkerColor;
-	private Color loopEMarkerColor;
-	private Image[] scoreNotes;
-	private Image[] harmonicNotes;
-	private Image tempoImage;
-	private Image tripletFeel8;
-	private Image tripletFeelNone8;
-	private Image tripletFeel16;
-	private Image tripletFeelNone16;
-	
-	private int scoreNoteWidth;
-	
-	public TGResources(ViewLayout layout){
-		this.layout = layout;
-		this.resources = new ArrayList();
-	}
-	
-	public void load(){
-		this.dispose();
-		this.initFonts();
-		this.initColors();
-		this.initImages();
-	}
-	
-	public ViewLayout getLayout(){
-		return this.layout;
-	}
-	
-	public Font getDefaultFont() {
-		return this.defaultFont;
-	}
-	
-	public Font getNoteFont() {
-		return this.noteFont;
-	}
-	
-	public Font getTimeSignatureFont() {
-		return this.timeSignatureFont;
-	}
-	
-	public Font getLyricFont(){
-		return this.lyricFont;
-	}
-	
-	public Font getTextFont(){
-		return this.textFont;
-	}
-	
-	public Font getMarkerFont(){
-		return this.markerFont;
-	}
-	
-	public Font getChordFont(){
-		return this.chordFont;
-	}
-	
-	public Font getChordFretFont(){
-		return this.chordFretFont;
-	}
-	
-	public Font getGraceFont() {
-		return this.graceFont;
-	}
-	
-	public Font getPrinterDefaultFont() {
-		return this.printerDefaultFont;
-	}
-	
-	public Font getPrinterNoteFont() {
-		return this.printerNoteFont;
-	}
-	
-	public Font getPrinterTimeSignatureFont() {
-		return this.printerTimeSignatureFont;
-	}
-	
-	public Font getPrinterLyricFont() {
-		return this.printerLyricFont;
-	}
-	
-	public Font getPrinterTextFont() {
-		return this.printerTextFont;
-	}
-	
-	public Font getPrinterGraceFont() {
-		return this.printerGraceFont;
-	}
-	
-	public Font getPrinterChordFont() {
-		return this.printerChordFont;
-	}
-	
-	public Color getBackgroundColor() {
-		return this.backgroundColor;
-	}
-	
-	public Color getLineColor() {
-		return this.lineColor;
-	}
-	
-	public Color getPlayNoteColor() {
-		return this.playNoteColor;
-	}
-	
-	public Color getScoreNoteColor() {
-		return this.scoreNoteColor;
-	}
-	
-	public Color getTabNoteColor() {
-		return this.tabNoteColor;
-	}
-	
-	public Color getColorWhite() {
-		return this.colorWhite;
-	}
-	
-	public Color getColorBlack() {
-		return this.colorBlack;
-	}
-	
-	public Color getColorRed() {
-		return this.colorRed;
-	}
-	
-	public Color getCaretColor1() {
-		return this.caretColor1;
-	}
-	
-	public Color getCaretColor2() {
-		return this.caretColor2;
-	}
-	
-	public Color getLoopSMarkerColor() {
-		return this.loopSMarkerColor;
-	}
-	
-	public Color getLoopEMarkerColor() {
-		return this.loopEMarkerColor;
-	}
-	
-	public Image getTempoImage() {
-		return this.tempoImage;
-	}
-	
-	public Image getTripletFeel8(){
-		return this.tripletFeel8;
-	}
-	
-	public Image getTripletFeelNone8(){
-		return this.tripletFeelNone8;
-	}
-	
-	public Image getTripletFeel16(){
-		return this.tripletFeel16;
-	}
-	
-	public Image getTripletFeelNone16(){
-		return this.tripletFeelNone16;
-	}
-	
-	public Image getScoreNote(int value,boolean playing) {
-		int index = 0;
-		index += ((playing)?1:0);
-		index += ((value >= TGDuration.QUARTER)?2:0);
-		return this.scoreNotes[index];
-	}
-	
-	public Image getHarmonicNote(int value,boolean playing) {
-		int index = 0;
-		index += ((playing)?1:0);
-		index += ((value >= TGDuration.QUARTER)?2:0);
-		return this.harmonicNotes[index];
-	}
-	
-	public int getScoreNoteWidth(){
-		return this.scoreNoteWidth;
-	}
-	
-	private void initFonts(){
-		float scale = this.layout.getFontScale() ;
-		this.defaultFont = getFont(TGConfigKeys.FONT_DEFAULT, scale);
-		this.noteFont = getFont(TGConfigKeys.FONT_NOTE, scale);
-		this.timeSignatureFont = getFont(TGConfigKeys.FONT_TIME_SIGNATURE, scale);
-		this.lyricFont = getFont(TGConfigKeys.FONT_LYRIC, scale);
-		this.textFont =  getFont(TGConfigKeys.FONT_TEXT, scale);
-		this.markerFont =  getFont(TGConfigKeys.FONT_MARKER, scale);
-		this.graceFont = getFont(TGConfigKeys.FONT_GRACE, scale);
-		this.chordFont = getFont(TGConfigKeys.FONT_CHORD, scale);
-		this.chordFretFont = getFont(TGConfigKeys.FONT_CHORD_FRET, scale);
-		this.printerDefaultFont = getFont(TGConfigKeys.FONT_PRINTER_DEFAULT, scale);
-		this.printerNoteFont = getFont(TGConfigKeys.FONT_PRINTER_NOTE, scale);
-		this.printerTimeSignatureFont = getFont(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE, scale);
-		this.printerLyricFont = getFont(TGConfigKeys.FONT_PRINTER_LYRIC, scale);
-		this.printerTextFont =  getFont(TGConfigKeys.FONT_PRINTER_TEXT, scale);
-		this.printerGraceFont = getFont(TGConfigKeys.FONT_PRINTER_GRACE, scale);
-		this.printerChordFont = getFont(TGConfigKeys.FONT_PRINTER_CHORD, scale);
-	}
-	
-	private void initColors(){
-		this.backgroundColor = getColor(TGConfigKeys.COLOR_BACKGROUND);
-		this.lineColor = getColor(TGConfigKeys.COLOR_LINE);
-		this.scoreNoteColor = getColor(TGConfigKeys.COLOR_SCORE_NOTE);
-		this.tabNoteColor = getColor(TGConfigKeys.COLOR_TAB_NOTE);
-		this.playNoteColor = getColor(TGConfigKeys.COLOR_PLAY_NOTE);
-		this.caretColor1 = getColor(TGConfigKeys.COLOR_CARET_1);
-		this.caretColor2 = getColor(TGConfigKeys.COLOR_CARET_2);
-		this.loopSMarkerColor = getColor(TGConfigKeys.COLOR_LOOP_S_MARKER);
-		this.loopEMarkerColor = getColor(TGConfigKeys.COLOR_LOOP_E_MARKER);
-		// Static colors
-		this.colorWhite = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_WHITE);
-		this.colorBlack = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_BLACK);
-		this.colorRed = TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_RED);
-	}
-	
-	private void initImages(){
-		this.scoreNotes = new Image[4];
-		this.scoreNotes[SCORE_NOTE_EMPTY_NORMAL_MODE] = getScoreNoteImage( getScoreNoteColor(),false);
-		this.scoreNotes[SCORE_NOTE_EMPTY_PLAY_MODE] = getScoreNoteImage( getPlayNoteColor(),false);
-		this.scoreNotes[SCORE_NOTE_FULL_NORMAL_MODE] = getScoreNoteImage( getScoreNoteColor(),true);
-		this.scoreNotes[SCORE_NOTE_FULL_PLAY_MODE] = getScoreNoteImage( getPlayNoteColor(),true);
-		
-		this.harmonicNotes = new Image[4];
-		this.harmonicNotes[SCORE_NOTE_EMPTY_NORMAL_MODE] = getHarmonicImage( getScoreNoteColor(),false);
-		this.harmonicNotes[SCORE_NOTE_EMPTY_PLAY_MODE] = getHarmonicImage( getPlayNoteColor(),false);
-		this.harmonicNotes[SCORE_NOTE_FULL_NORMAL_MODE] = getHarmonicImage( getScoreNoteColor(),true);
-		this.harmonicNotes[SCORE_NOTE_FULL_PLAY_MODE] = getHarmonicImage( getPlayNoteColor(),true);
-		
-		this.tempoImage = getTempoImage(this.getColorBlack());
-		
-		this.tripletFeel8 = getTripletFeel8(this.getColorBlack());
-		this.tripletFeelNone8 = getTripletFeelNone8(this.getColorBlack());
-		this.tripletFeel16 = getTripletFeel16(this.getColorBlack());
-		this.tripletFeelNone16 = getTripletFeelNone16(this.getColorBlack());
-	}
-	
-	private Font getFont(String key, float scale){
-		FontData data = TuxGuitar.instance().getConfig().getFontDataConfigValue(key);
-		if(data == null){
-			data = new FontData();
-		}
-		float height = ( data.getHeight() * scale );
-		
-		data.setHeight( ( height > 1 ? Math.round(height) : 1 ) );
-		
-		Font font = new Font(TuxGuitar.instance().getDisplay(),data);
-		this.resources.add( font );
-		return font;
-	}
-	
-	private Color getColor(String key){
-		RGB rgb = TuxGuitar.instance().getConfig().getRGBConfigValue(key);
-		if(rgb == null){
-			rgb = new RGB(0,0,0);
-		}
-		Color color = new Color(TuxGuitar.instance().getDisplay(),rgb);
-		this.resources.add( color );
-		return color;
-	}
-	
-	private Image getScoreNoteImage(Color color,boolean full) {
-		float scale = (full ? getLayout().getScoreLineSpacing() + 1 : getLayout().getScoreLineSpacing() ) - 2;
-		int width = Math.round(scale * 1.33f);
-		int height = Math.round(scale * 1.0f);
-		
-		Image image = getImage(width + 1, height + 2);
-		TGPainter painter = new TGPainter(new GC(image));
-		painter.setBackground(color);
-		painter.setForeground(color);
-		painter.initPath( (full ? TGPainter.PATH_FILL : TGPainter.PATH_DRAW) );
-		TGNotePainter.paintNote(painter,0,1, scale );
-		painter.closePath();
-		painter.dispose();
-		
-		this.scoreNoteWidth = width;
-		
-		return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB());
-	}
-	
-	private Image getHarmonicImage(Color color,boolean full) {
-		int size = getLayout().getScoreLineSpacing();
-		
-		int x = 0;
-		int y = 1;
-		int width = getScoreNoteWidth() - 1;
-		int height = size - 2;
-		
-		Image image = getImage(x + width + 2,y + height + 2);
-		TGPainter painter = new TGPainter(new GC(image));
-		painter.setForeground(color);
-		painter.setBackground(color);
-		painter.initPath( ( full ? TGPainter.PATH_DRAW | TGPainter.PATH_FILL : TGPainter.PATH_DRAW )  );
-		TGNotePainter.paintHarmonic(painter, x, y, height);
-		painter.closePath();
-		painter.dispose();
-		
-		return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB());
-	}
-	
-	private Image getTempoImage(Color color) {
-		float scale = 5f * getLayout().getScale();
-		int width = Math.round(scale * 1.33f);
-		int height = Math.round(scale * (1.0f + 2.5f));
-		
-		Image image = getImage(width + 1, height + 2);
-		TGPainter painter = new TGPainter(new GC(image));
-		painter.setBackground(color);
-		painter.setForeground(color);
-		TGTempoPainter.paintTempo(painter,0,0, scale);
-		painter.dispose();
-		
-		return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB());
-	}
-	
-	private Image getTripletFeelNone8(Color color) {
-		float scale = 5f * getLayout().getScale();
-		
-		float horizontalSpacing = (1.5f * scale);
-		float verticalSpacing = (2.5f * scale);
-		float ovalWidth = (1.33f * scale);
-		float ovalHeight = (1.0f * scale);
-		
-		int width = Math.round( ovalWidth + horizontalSpacing );
-		int height = Math.round( ovalHeight + verticalSpacing );
-		
-		Image image = getImage(width + 1, height + 2);
-		TGPainter painter = new TGPainter(new GC(image));
-		painter.setBackground(color);
-		painter.setForeground(color);
-		TGTripletFeelPainter.paintTripletFeelNone8(painter,0,0, scale);
-		painter.dispose();
-		
-		return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB());
-	}
-	
-	private Image getTripletFeel8(Color color) {
-		float scale = 5f * getLayout().getScale();
-		float topSpacing = (1.0f * scale);
-		float horizontalSpacing = (1.5f * scale);
-		float verticalSpacing = (2.5f * scale);
-		float ovalWidth = (1.33f * scale);
-		float ovalHeight = (1.0f * scale);
-		
-		int width = Math.round( (ovalWidth * 2f) + horizontalSpacing );
-		int height = Math.round((topSpacing + ovalHeight + verticalSpacing));
-		
-		Image image = getImage(width + 1, height + 2);
-		TGPainter painter = new TGPainter(new GC(image));
-		painter.setBackground(color);
-		painter.setForeground(color);
-		TGTripletFeelPainter.paintTripletFeel8(painter,0,0, scale);
-		painter.dispose();
-		
-		return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB());
-	}	
-	
-	private Image getTripletFeelNone16(Color color) {
-		float scale = 5f * getLayout().getScale();
-		
-		float horizontalSpacing = (1.5f * scale);
-		float verticalSpacing = (2.5f * scale);
-		float ovalWidth = (1.33f * scale);
-		float ovalHeight = (1.0f * scale);
-		
-		int width = Math.round( ovalWidth + horizontalSpacing );
-		int height = Math.round( ovalHeight + verticalSpacing );
-		
-		Image image = getImage(width + 1, height + 2);
-		TGPainter painter = new TGPainter(new GC(image));
-		painter.setBackground(color);
-		painter.setForeground(color);
-		TGTripletFeelPainter.paintTripletFeelNone16(painter,0,0, scale);
-		painter.dispose();
-		
-		return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB());
-	}
-	
-	private Image getTripletFeel16(Color color) {
-		float scale = 5f * getLayout().getScale();
-		float topSpacing = (1.0f * scale);
-		float horizontalSpacing = (1.5f * scale);
-		float verticalSpacing = (2.5f * scale);
-		float ovalWidth = (1.33f * scale);
-		float ovalHeight = (1.0f * scale);
-		
-		int width = Math.round( (ovalWidth * 2f) + horizontalSpacing );
-		int height = Math.round( topSpacing + ovalHeight + verticalSpacing );
-		
-		Image image = getImage(width + 1, height + 2);
-		TGPainter painter = new TGPainter(new GC(image));
-		painter.setBackground(color);
-		painter.setForeground(color);
-		TGTripletFeelPainter.paintTripletFeel16(painter,0,0, scale);
-		painter.dispose();
-		
-		return getImageMask(image, getBackgroundColor().getRGB(), color.getRGB());
-	}
-	
-	private Image getImage(int width, int height){
-		Image image = new Image(getLayout().getTablature().getDisplay(),width, height);
-		TGPainter painter = new TGPainter(new GC(image));
-		painter.setBackground( getBackgroundColor());
-		painter.initPath(TGPainter.PATH_FILL);
-		painter.addRectangle(0,0,width, height);
-		painter.closePath();
-		painter.dispose();
-		return image;
-	}
-	
-	private Image getImageMask(Image src,RGB alpha,RGB none){
-		ImageData srcData = src.getImageData();
-		ImageData maskData = ImageUtils.applyMask(srcData, alpha , none);
-		src.dispose();
-		Image image = new Image(getLayout().getTablature().getDisplay(),srcData,maskData);
-		this.resources.add(image);
-		return image;
-	}
-	
-	public void dispose(){
-		Iterator it = this.resources.iterator();
-		while( it.hasNext() ){
-			Resource resource = (Resource)it.next();
-			resource.dispose();
-		}
-		this.resources.clear();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGSpacing.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGSpacing.java
deleted file mode 100644
index 8259da6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGSpacing.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-public abstract class TGSpacing {
-	
-	public static final int SCORE = 0x01;
-	public static final int TABLATURE = 0x02;
-	
-	private int flags;
-	private int[] spacing;
-	private int[][] positions;
-	
-	public TGSpacing(ViewLayout layout, int[][] positions, int len){
-		this.flags = 0;
-		this.flags |= ((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ? SCORE : 0 );
-		this.flags |= ((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0 ? TABLATURE : 0 );
-		this.positions = positions;
-		this.spacing = new int[len];
-	}
-	
-	public void clear(){
-		for(int i = 0; i < this.spacing.length; i ++){
-			this.spacing[i] = 0;
-		}
-	}
-	
-	public void setSize(int index,int size){
-		if( size > this.spacing[ this.positions [this.flags -1] [index] ] ){
-			this.spacing[ this.positions [this.flags -1] [index] ] = size;
-		}
-	}
-	
-	public int getSize(int index){
-		return this.spacing[ this.positions [this.flags -1] [index] ];
-	}
-	
-	public int getSize(){
-		int spacing = 0;
-		for(int i = 0;i < this.spacing.length; i ++){
-			spacing += this.spacing[i];
-		}
-		return spacing;
-	}
-	
-	public int getPosition(int index){
-		int spacing = 0;
-		for(int i = 0;i < this.positions[this.flags -1][index]; i ++){
-			spacing += this.spacing[i];
-		}
-		return spacing;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTextImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTextImpl.java
deleted file mode 100644
index ae314ba..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTextImpl.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.song.models.TGText;
-
-public class TGTextImpl extends TGText{
-	
-	public void paint(ViewLayout layout,TGPainter painter,int fromX, int fromY){
-		TGBeatImpl beat = (TGBeatImpl)getBeat();
-		TGMeasureImpl measure = beat.getMeasureImpl();
-		int x = fromX + beat.getSpacing() + beat.getPosX();
-		int y = fromY + measure.getTs().getPosition(TGTrackSpacing.POSITION_TEXT);
-		layout.setTextStyle(painter);
-		painter.drawString(getValue(), x, y);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTrackImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTrackImpl.java
deleted file mode 100644
index 5dccc6d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTrackImpl.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- * Created on 29-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab;
-
-import java.util.Iterator;
-
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGTrackImpl extends TGTrack{
-	
-	private int tabHeight;
-	private int scoreHeight;
-	
-	public TGTrackImpl(TGFactory factory) {
-		super(factory);
-	}
-	
-	public void update(ViewLayout layout){
-		this.calculateTabHeight(layout);
-		this.calculateScoreHeight(layout);
-	}
-	/**
-	 * Calcula el el ancho de la tablatura
-	 */
-	public void calculateTabHeight(ViewLayout layout) {
-		this.tabHeight = ((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0 ?((stringCount() - 1) * layout.getStringSpacing()):0);
-	}
-	
-	/**
-	 * Calcula el el ancho de la partitura
-	 */
-	public void calculateScoreHeight(ViewLayout layout) {
-		this.scoreHeight = ((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ?(layout.getScoreLineSpacing() * 4):0);
-	}
-	
-	public boolean hasCaret(ViewLayout layout){
-		return (this.equals(layout.getTablature().getCaret().getTrack()));
-	}
-	
-	public int getTabHeight() {
-		return this.tabHeight;
-	}
-	
-	public int getScoreHeight() {
-		return this.scoreHeight;
-	}
-	
-	public void setTabHeight(int tabHeight) {
-		this.tabHeight = tabHeight;
-	}
-	
-	public void clear(){
-		Iterator measures = getMeasures();
-		while(measures.hasNext()){
-			TGMeasureImpl measure = (TGMeasureImpl)measures.next();
-			if(!measure.isDisposed()){
-				measure.dispose();
-			}
-		}
-		super.clear();
-	}
-	
-	public void removeMeasure(int index){
-		TGMeasureImpl measure = (TGMeasureImpl)getMeasure(index);
-		if(!measure.isDisposed()){
-			measure.dispose();
-		}
-		super.removeMeasure(index);
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTrackSpacing.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTrackSpacing.java
deleted file mode 100644
index 5c95149..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGTrackSpacing.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-public class TGTrackSpacing extends TGSpacing {
-	
-	/***     POSITIONS ARRAY INDICES     ***/
-	public static final int POSITION_TOP = 0;
-	public static final int POSITION_LOOP_MARKER = 1;
-	public static final int POSITION_MARKER = 2;
-	public static final int POSITION_TEXT = 3;
-	public static final int POSITION_BUFFER_SEPARATOR = 4;
-	public static final int POSITION_REPEAT_ENDING = 5;
-	public static final int POSITION_CHORD = 6;
-	public static final int POSITION_SCORE_UP_LINES = 7;
-	public static final int POSITION_SCORE_MIDDLE_LINES = 8;
-	public static final int POSITION_SCORE_DOWN_LINES = 9;
-	public static final int POSITION_DIVISION_TYPE = 10;
-	public static final int POSITION_EFFECTS = 11;
-	public static final int POSITION_TABLATURE_TOP_SEPARATOR = 12;
-	public static final int POSITION_TABLATURE = 13;
-	public static final int POSITION_LYRIC = 14;
-	public static final int POSITION_BOTTOM = 15;
-	
-	private static final int[][] POSITIONS = new int[][]{
-		/** SCORE **/
-		new int[]{
-				0,  //POSITION_TOP
-				1,  //POSITION_LOOP_MARKER
-				2,  //POSITION_MARKER
-				3,  //POSITION_TEXT
-				4,  //POSITION_BUFFER_SEPARATOR
-				5,  //POSITION_REPEAT_ENDING
-				6,  //POSITION_CHORD
-				8,  //POSITION_SCORE_UP_LINES
-				9,  //POSITION_SCORE_MIDDLE_LINES
-				10, //POSITION_SCORE_DOWN_LINES
-				11, //POSITION_DIVISION_TYPE
-				7,  //POSITION_EFFECTS
-				12, //POSITION_TABLATURE_TOP_SEPARATOR
-				13, //POSITION_TABLATURE
-				14, //POSITION_LYRIC
-				15, //POSITION_BOTTOM
-			},
-			
-		/** TABLATURE **/
-		new int[]{
-				0,  //POSITION_TOP
-				1,  //POSITION_LOOP_MARKER
-				2,  //POSITION_MARKER
-				3,  //POSITION_TEXT
-				4,  //POSITION_BUFFER_SEPARATOR
-				5,  //POSITION_REPEAT_ENDING
-				6,  //POSITION_CHORD
-				13, //POSITION_SCORE_UP_LINES
-				14, //POSITION_SCORE_MIDDLE_LINES
-				15, //POSITION_SCORE_DOWN_LINES
-				10, //POSITION_DIVISION_TYPE
-				7,  //POSITION_EFFECTS
-				8,  //POSITION_TABLATURE_TOP_SEPARATOR
-				9,  //POSITION_TABLATURE
-				11, //POSITION_LYRIC
-				12, //POSITION_BOTTOM
-			},
-			
-		/** SCORE | TABLATURE **/
-		new int[]{
-				0,  //POSITION_TOP
-				1,  //POSITION_LOOP_MARKER
-				2,  //POSITION_MARKER
-				3,  //POSITION_TEXT
-				4,  //POSITION_BUFFER_SEPARATOR
-				5,  //POSITION_REPEAT_ENDING
-				6,  //POSITION_CHORD
-				7,  //POSITION_SCORE_UP_LINES
-				8,  //POSITION_SCORE_MIDDLE_LINES
-				9,  //POSITION_SCORE_DOWN_LINES
-				10, //POSITION_DIVISION_TYPE
-				11, //POSITION_EFFECTS
-				12, //POSITION_TABLATURE_TOP_SEPARATOR
-				13, //POSITION_TABLATURE
-				14, //POSITION_LYRIC
-				15, //POSITION_BOTTOM
-			},
-	};
-	
-	public TGTrackSpacing(ViewLayout layout){
-		super( layout , POSITIONS , 16);
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGVoiceImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGVoiceImpl.java
deleted file mode 100644
index c40f0bc..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TGVoiceImpl.java
+++ /dev/null
@@ -1,649 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab;
-
-import java.util.Iterator;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGNotePainter;
-import org.herac.tuxguitar.gui.editors.tab.painters.TGSilencePainter;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGDivisionType;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-public class TGVoiceImpl extends TGVoice{
-	/**
-	 * desviacion a la izquierda
-	 */
-	public static final int JOINED_TYPE_NONE_LEFT = 1;
-	/**
-	 * desviacion a la derecha
-	 */
-	public static final int JOINED_TYPE_NONE_RIGHT = 2;
-	/**
-	 * Union a la izquierda
-	 */
-	public static final int JOINED_TYPE_LEFT = 3;
-	/**
-	 * Union a la derecha
-	 */
-	public static final int JOINED_TYPE_RIGHT = 4;
-	
-	private int width;
-	private TGNoteImpl maxNote;
-	private TGNoteImpl minNote;
-	private boolean[] usedStrings;
-	private int joinedType;
-	private boolean joinedGreaterThanQuarter;
-	private TGVoiceImpl join1;
-	private TGVoiceImpl join2;
-	private TGVoiceImpl previous;
-	private TGVoiceImpl next;
-	private TGBeatGroup group;
-	
-	private boolean hiddenSilence;
-	
-	private int maxY;
-	private int minY;
-	private float silenceY;
-	private float silenceHeight;
-	
-	private int maxString;
-	private int minString;
-	
-	public TGVoiceImpl(TGFactory factory,int index){
-		super(factory, index);
-	}
-	
-	public int getPosX() {
-		return this.getBeatImpl().getPosX();
-	}
-	
-	public int getWidth() {
-		return this.width;
-	}
-	
-	public void setWidth(int width) {
-		this.width = width;
-	}
-	
-	public TGNoteImpl getMinNote(){
-		return this.minNote;
-	}
-	
-	public TGNoteImpl getMaxNote(){
-		return this.maxNote;
-	}
-	
-	public TGBeatImpl getBeatImpl() {
-		return (TGBeatImpl)getBeat();
-	}
-	
-	public TGMeasureImpl getMeasureImpl() {
-		return (TGMeasureImpl)getBeat().getMeasure();
-	}
-	
-	public boolean[] getUsedStrings() {
-		if(this.usedStrings == null){
-			this.usedStrings = new boolean[getBeat().getMeasure().getTrack().stringCount()];
-		}
-		return this.usedStrings;
-	}
-	
-	public TGVoiceImpl getJoin1() {
-		return this.join1;
-	}
-	
-	public void setJoin1(TGVoiceImpl join1) {
-		this.join1 = join1;
-	}
-	
-	public TGVoiceImpl getJoin2() {
-		return this.join2;
-	}
-	
-	public void setJoin2(TGVoiceImpl join2) {
-		this.join2 = join2;
-	}
-	
-	public boolean isJoinedGreaterThanQuarter() {
-		return this.joinedGreaterThanQuarter;
-	}
-	
-	public void setJoinedGreaterThanQuarter(boolean joinedGreaterThanQuarter) {
-		this.joinedGreaterThanQuarter = joinedGreaterThanQuarter;
-	}
-	
-	public int getJoinedType() {
-		return this.joinedType;
-	}
-	
-	public void setJoinedType(int joinedType) {
-		this.joinedType = joinedType;
-	}
-	
-	public void setPreviousBeat(TGVoiceImpl previous){
-		this.previous = previous;
-	}
-	
-	public void setNextBeat(TGVoiceImpl next){
-		this.next = next;
-	}
-	
-	public TGBeatGroup getBeatGroup() {
-		return this.group;
-	}
-	
-	public void setBeatGroup(TGBeatGroup group) {
-		this.group = group;
-	}
-	
-	public boolean isPlaying(ViewLayout layout){
-		return (getMeasureImpl().isPlaying(layout) && TuxGuitar.instance().getEditorCache().isPlaying(getBeat().getMeasure(),getBeat()));
-	}
-	
-	public void reset(){
-		this.maxNote = null;
-		this.minNote = null;
-		this.hiddenSilence = false;
-		this.usedStrings = new boolean[getBeat().getMeasure().getTrack().stringCount()];
-		this.maxString = 1;
-		this.minString = getBeat().getMeasure().getTrack().stringCount();
-		this.group = null;
-		this.previous = null;
-		this.next = null;
-	}
-	
-	public void check(TGNoteImpl note){
-		int value = note.getRealValue();
-		if(this.maxNote == null || value > this.maxNote.getRealValue()){
-			this.maxNote = note;
-		}
-		if(this.minNote == null || value < this.minNote.getRealValue()){
-			this.minNote = note;
-		}
-		this.getUsedStrings();
-		this.usedStrings[note.getString() - 1] = true;
-		
-		if( note.getString() > this.maxString ){
-			this.maxString = note.getString();
-		}
-		if( note.getString() < this.minString ){
-			this.minString = note.getString();
-		}
-	}
-	
-	public void update(ViewLayout layout) {
-		this.minY = 0;
-		this.maxY = 0;
-		if(isRestVoice()){
-			this.updateSilenceSpacing(layout);
-		}
-		else{
-			this.updateNoteVoice(layout);
-		}
-	}
-	
-	public void updateNoteVoice(ViewLayout layout) {
-		this.joinedType = JOINED_TYPE_NONE_RIGHT;
-		this.joinedGreaterThanQuarter = false;
-		this.setJoin1(this);
-		this.setJoin2(this);
-		
-		boolean noteJoined = false;
-		boolean withPrev = false;
-		
-		//trato de unir con el componente anterior
-		if (this.previous != null && !this.previous.isRestVoice()) {
-			if (getMeasureImpl().canJoin(layout.getSongManager(),this, this.previous)) {
-				withPrev = true;
-				if (this.previous.getDuration().getValue() >= getDuration().getValue()) {
-					this.setJoin1(this.previous);
-					this.setJoin2(this);
-					this.joinedType = JOINED_TYPE_LEFT;
-					noteJoined = true;
-				}
-				if (this.previous.getDuration().getValue() > TGDuration.QUARTER){
-					this.joinedGreaterThanQuarter = true;
-				}
-			}
-		}
-		
-		//trato de unir con el componente que le sigue
-		if (this.next != null && !this.next.isRestVoice() ) {
-			if (getMeasureImpl().canJoin(layout.getSongManager(),this, this.next)) {
-				if (this.next.getDuration().getValue() >= getDuration().getValue()) {
-					this.setJoin2(this.next);
-					if (this.previous == null || this.previous.isRestVoice() || this.previous.getDuration().getValue() < getDuration().getValue()) {
-						this.setJoin1(this);
-					}
-					noteJoined = true;
-					this.joinedType = JOINED_TYPE_RIGHT;
-				}
-				if (this.next.getDuration().getValue() > TGDuration.QUARTER){
-					this.joinedGreaterThanQuarter = true;
-				}
-			}
-		}
-		
-		//si no hubo union decido para que lado girar la figura
-		if (!noteJoined && withPrev) {
-			this.joinedType = JOINED_TYPE_NONE_LEFT;
-		}
-		
-		if( (layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0 && (layout.getStyle() & ViewLayout.DISPLAY_SCORE) == 0){
-			this.minY = 0;
-			this.maxY = getBeatImpl().getMeasureImpl().getTrackImpl().getTabHeight();
-			if( getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ){
-				this.maxY += (((layout.getStringSpacing() / 2) * 5) + 1);
-			}else{
-				this.minY -= (((layout.getStringSpacing() / 2) * 5) + 1);
-			}
-		}
-	}
-	
-	public void updateSilenceSpacing(ViewLayout layout) {
-		this.silenceY = 0;
-		this.silenceHeight = 0;
-		
-		if(!isHiddenSilence()){
-			int style = layout.getStyle();
-			int lineSpacing = 0;
-			int lineCount = 0;
-			float scale = 0;
-			if((style & ViewLayout.DISPLAY_SCORE) != 0 ){
-				lineSpacing = layout.getScoreLineSpacing();
-				lineCount = 5;
-				scale = (lineSpacing / 9.0f);
-			}else{
-				lineSpacing = layout.getStringSpacing();
-				lineCount = getBeat().getMeasure().getTrack().stringCount();
-				scale = (lineSpacing / 10.0f);
-			}
-			
-			int duration = getDuration().getValue();
-			if(duration == TGDuration.WHOLE){
-				this.silenceHeight = (scale * 3.6513581f);
-				this.silenceY = ( lineCount <= 5 ? lineSpacing : lineSpacing * 2 );
-			}
-			else if(duration == TGDuration.HALF){
-				this.silenceHeight = (scale * 3.6513581f);
-				this.silenceY = ( lineCount <= 5 ? lineSpacing * 2 : lineSpacing * 3 ) - this.silenceHeight;
-			}
-			else if(duration == TGDuration.QUARTER){
-				this.silenceHeight = (scale * 16);
-				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
-			}
-			else if(duration == TGDuration.EIGHTH){
-				this.silenceHeight = (scale * 12);
-				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
-			}
-			else if(duration == TGDuration.SIXTEENTH){
-				this.silenceHeight = (scale * 16);
-				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
-			}
-			else if(duration == TGDuration.THIRTY_SECOND){
-				this.silenceHeight = (scale * 24);
-				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
-			}
-			else if(duration == TGDuration.SIXTY_FOURTH){
-				this.silenceHeight = (scale * 28);
-				this.silenceY = ((lineSpacing * (lineCount - 1)) / 2) - (this.silenceHeight / 2);
-			}
-			
-			for( int v = 0; v < getBeat().countVoices(); v ++){
-				if( v != getIndex() ){
-					TGVoiceImpl voice = getBeatImpl().getVoiceImpl( v );
-					if( !voice.isEmpty() ){
-						if( voice.isRestVoice()){
-							if( !voice.isHiddenSilence() ){
-								float maxSilenceHeight = (lineSpacing * 3);
-								float firstPosition = (this.silenceY - (maxSilenceHeight / getBeat().countVoices()));
-								this.silenceY = (firstPosition + ( maxSilenceHeight * getIndex() ));
-							}
-						}
-						else if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){
-							int direction = voice.getBeatGroup().getDirection();
-							int y1 = voice.getBeatGroup().getY1(layout,voice.getMinNote(),getMeasureImpl().getKeySignature(),getMeasureImpl().getClef());
-							int y2 = voice.getBeatGroup().getY1(layout,voice.getMaxNote(),getMeasureImpl().getKeySignature(),getMeasureImpl().getClef());
-							
-							if(direction == TGBeatGroup.DIRECTION_UP){
-								float position = (y1 + (lineSpacing * 2));
-								if( position > this.silenceY ){
-									this.silenceY = position;
-								}
-							}else if(direction == TGBeatGroup.DIRECTION_DOWN){
-								float position = (y2 - (this.silenceHeight + lineSpacing));
-								if( position < this.silenceY ){
-									this.silenceY = position;
-								}
-							}
-						}else if((layout.getStyle() & ViewLayout.DISPLAY_TABLATURE) != 0 ){
-							int direction = voice.getBeatGroup().getDirection();
-							if(direction == TGBeatGroup.DIRECTION_UP){
-								float position = (lineSpacing * voice.getMaxString() );
-								if( position > this.silenceY ){
-									this.silenceY = position;
-								}
-							}
-							else if(direction == TGBeatGroup.DIRECTION_DOWN){
-								float position = ((lineSpacing * (voice.getMinString() - 1) ) - (this.silenceHeight + lineSpacing));
-								if( position < this.silenceY ){
-									this.silenceY = position;
-								}
-							}
-						}
-					}
-				}
-			}
-			this.minY = (int)this.silenceY;
-			this.maxY = (int)(this.silenceY + this.silenceHeight);
-		}
-	}
-	
-	public void paint(ViewLayout layout,TGPainter painter, int fromX, int fromY) {
-		if(!isEmpty()){
-			if(isRestVoice() && !isHiddenSilence()){
-				paintSilence(layout, painter, fromX, fromY);
-			}
-			else{
-				Iterator notes = getNotes().iterator();
-				while (notes.hasNext()) {
-					TGNoteImpl note = (TGNoteImpl)notes.next();
-					note.paint(layout,painter,fromX ,fromY);
-				}
-				if(!layout.isPlayModeEnabled()){
-					paintBeat(layout, painter, fromX, fromY) ;
-				}
-			}
-		}
-	}
-	
-	//----silence
-	public void paintSilence(ViewLayout layout,TGPainter painter, int fromX, int fromY) {
-		int style = layout.getStyle();
-		int x = 0;
-		int lineSpacing = 0;
-		float y = 0;
-		float scale = 0;
-		
-		if((style & ViewLayout.DISPLAY_SCORE) != 0 ){
-			x = fromX + getPosX() + getBeatImpl().getSpacing();
-			y = fromY + getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES) + this.silenceY;
-			lineSpacing = layout.getScoreLineSpacing();
-			scale = (lineSpacing / 9.0f);
-		}else{
-			x = fromX + getPosX() + getBeatImpl().getSpacing() - 1;
-			y = fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE) + this.silenceY;
-			lineSpacing = layout.getStringSpacing();
-			scale = (lineSpacing / 10.0f);
-		}
-		
-		setStyle(layout, painter,(layout.isPlayModeEnabled() && isPlaying(layout)));
-		painter.initPath(TGPainter.PATH_FILL);
-		
-		int duration = getDuration().getValue();
-		if(duration == TGDuration.WHOLE){
-			TGSilencePainter.paintWhole(painter, x, y , scale);
-		}
-		else if(duration == TGDuration.HALF){
-			TGSilencePainter.paintHalf(painter, x, y , scale);
-		}
-		else if(duration == TGDuration.QUARTER){
-			TGSilencePainter.paintQuarter(painter, x, y, scale);
-		}
-		else if(duration == TGDuration.EIGHTH){
-			TGSilencePainter.paintEighth(painter, x, y, scale);
-		}
-		else if(duration == TGDuration.SIXTEENTH){
-			TGSilencePainter.paintSixteenth(painter, x, y, scale);
-		}
-		else if(duration == TGDuration.THIRTY_SECOND){
-			TGSilencePainter.paintThirtySecond(painter, x, y, scale);
-		}
-		else if(duration == TGDuration.SIXTY_FOURTH){
-			TGSilencePainter.paintSixtyFourth(painter, x, y, scale);
-		}
-		
-		painter.closePath();
-		
-		if(getDuration().isDotted() || getDuration().isDoubleDotted()){
-			layout.setDotStyle(painter);
-			painter.initPath();
-			painter.moveTo(x + 10,y +1);
-			painter.addOval(x + 10,y +1,1,1);
-			if(getDuration().isDoubleDotted()){
-				painter.moveTo(x + 13,y +1);
-				painter.addOval(x + 13,y +1,1,1);
-			}
-			painter.closePath();
-		}
-		if(!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)){
-			layout.setDivisionTypeStyle(painter);
-			if((style & ViewLayout.DISPLAY_SCORE) != 0 ){
-				painter.drawString(Integer.toString(getDuration().getDivision().getEnters()), x,(fromY + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
-			}else{
-				painter.drawString(Integer.toString(getDuration().getDivision().getEnters()),x,(fromY + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
-			}
-		}
-	}
-	
-	public void setStyle(ViewLayout layout, TGPainter painter, boolean playMode){
-		if((layout.getStyle() & ViewLayout.DISPLAY_SCORE) != 0 ){
-			layout.setScoreSilenceStyle(painter, playMode);
-		}else{
-			layout.setTabSilenceStyle(painter, playMode);
-		}
-	}
-	
-	public void paintBeat(ViewLayout layout,TGPainter painter, int fromX, int fromY){
-		if(!isRestVoice() ){
-			int style = layout.getStyle();
-			int spacing = getBeatImpl().getSpacing();
-			
-			if((style & ViewLayout.DISPLAY_SCORE) != 0){
-				paintScoreBeat(layout, painter, fromX, fromY+getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES), spacing);
-			}
-			if((style & ViewLayout.DISPLAY_TABLATURE) != 0 && (style & ViewLayout.DISPLAY_SCORE) == 0){
-				paintTablatureBeat(layout, painter, fromX, fromY + getPaintPosition(TGTrackSpacing.POSITION_TABLATURE), spacing);
-			}
-		}
-	}
-	
-	public void paintTablatureBeat(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing){
-		if(!isRestVoice() ){
-			float scale = layout.getScale();
-			float xMove = (2 * scale);
-			float x = ( fromX + getPosX() + spacing + xMove );
-			float y1 = 0;
-			float y2 = 0;
-			float verticalLineWidth = scale;
-			float horizontalLineWidth = (2 * scale);
-			int stringSpacing = layout.getStringSpacing();
-			if( getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ){
-				y1 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + (stringSpacing / 2));
-				y2 = (fromY + getMeasureImpl().getTrackImpl().getTabHeight() + ((stringSpacing / 2) * 5));
-			}else{
-				y1 = (fromY - (stringSpacing / 2) - horizontalLineWidth);
-				y2 = (fromY - ((stringSpacing / 2) * 5));
-			}
-			if (getDuration().getValue() >= TGDuration.QUARTER) {
-				layout.setTabNoteFooterStyle(painter);
-				painter.initPath();
-				painter.setAntialias(false);
-				painter.setLineWidth( (int)verticalLineWidth );
-				painter.moveTo(x, y1);
-				painter.lineTo(x, y2);
-				painter.closePath();
-				if (getDuration().getValue() >= TGDuration.EIGHTH) {
-					float x1 = 0;
-					float x2 = 0;
-					int joinedType = getJoinedType();
-					if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT){
-						x1 = getPosX() + xMove + spacing;
-						x2 = getPosX() + xMove + spacing + (6 * scale);
-					}else if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT){
-						x1 = getPosX() + xMove + spacing - (5 * scale);
-						x2 = getPosX() + xMove + spacing;
-					}else{
-						x1 = getJoin1().getPosX() + xMove + getJoin1().getBeatImpl().getSpacing();
-						x2 = getJoin2().getPosX() + xMove + getJoin2().getBeatImpl().getSpacing();
-					}
-					int index = ( getDuration().getIndex() - 2);
-					if(index > 0){
-						int height = (layout.getStringSpacing() / 2);
-						int direction = (getBeatGroup().getDirection() == TGBeatGroup.DIRECTION_DOWN ? 1 : -1);
-						painter.setLineWidth( (int)horizontalLineWidth );
-						painter.initPath();
-						for(int i = index; i > 0 ;i --){
-							painter.moveTo(fromX + x1, y2 + ((height - (i * height)) * direction));
-							painter.lineTo(fromX + x2, y2 + ((height - (i * height)) * direction));
-						}
-						painter.closePath();
-						painter.setLineWidth(1);
-					}
-				}
-			} else if (getDuration().getValue() == TGDuration.HALF) {
-				layout.setTabNoteFooterStyle(painter);
-				painter.initPath();
-				painter.setAntialias(false);
-				painter.setLineWidth( (int)verticalLineWidth );
-				painter.moveTo(x, (y1 + ((y2 - y1) / 2)));
-				painter.lineTo(x, y2);
-				painter.closePath();
-			}
-			
-			//-------------puntillo--------------------------------------
-			if (getDuration().isDotted() || getDuration().isDoubleDotted()) {
-				int joinedType = getJoinedType();
-				float posX = ((getDuration().getValue() > TGDuration.WHOLE)?((joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT || joinedType == TGVoiceImpl.JOINED_TYPE_RIGHT)?(x+ (4.0f * scale)):(x- (5.0f * scale))):x);
-				float posY = (y2 - ((getDuration().getValue() >= TGDuration.EIGHTH)? ((stringSpacing / 2) * (getDuration().getIndex() - 2)):(1.0f * scale)));
-				paintDot(layout, painter, posX, posY,scale);
-			}
-			
-			//-------------tresillo--------------------------------------
-			if (!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)) {
-				layout.setDivisionTypeStyle(painter);
-				painter.drawString(Integer.toString(getDuration().getDivision().getEnters()), (int)(x - 3),((fromY - getPaintPosition(TGTrackSpacing.POSITION_TABLATURE)) + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
-			}
-		}
-	}
-	
-	public void paintScoreBeat(ViewLayout layout,TGPainter painter, int fromX, int fromY, int spacing){
-		int vX = ( fromX + getPosX() + spacing );
-		
-		//division type
-		if (!getDuration().getDivision().isEqual(TGDivisionType.NORMAL)) {
-			layout.setDivisionTypeStyle(painter);
-			painter.drawString(Integer.toString(getDuration().getDivision().getEnters()),vX ,((fromY - getPaintPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES)) + getPaintPosition(TGTrackSpacing.POSITION_DIVISION_TYPE)));
-		}
-		//dibujo el pie
-		if(getDuration().getValue() >= TGDuration.HALF){
-			layout.setScoreNoteFooterStyle(painter);
-			
-			float scale = layout.getScale();
-			float lineSpacing = layout.getScoreLineSpacing();
-			int direction = this.group.getDirection();
-			int key = getBeat().getMeasure().getKeySignature();
-			int clef = getBeat().getMeasure().getClef();
-			
-			int xMove = (direction == TGBeatGroup.DIRECTION_UP ? layout.getResources().getScoreNoteWidth() : 0);
-			int yMove = (direction == TGBeatGroup.DIRECTION_UP ? ((layout.getScoreLineSpacing() / 3) + 1) : ((layout.getScoreLineSpacing() / 3) * 2));
-			
-			int vY1 = fromY + ( direction == TGBeatGroup.DIRECTION_DOWN ? this.maxNote.getScorePosY() : this.minNote.getScorePosY() );
-			int vY2 = fromY + this.group.getY2(layout,getPosX() + spacing,key,clef);
-			
-			painter.initPath();
-			painter.setAntialias(false);
-			painter.moveTo(vX + xMove, vY1 + yMove);
-			painter.lineTo(vX + xMove, vY2);
-			painter.closePath();
-			
-			if (getDuration().getValue() >= TGDuration.EIGHTH) {
-				int index =  ( getDuration().getIndex() - 3);
-				if(index >= 0){
-					int dir = (direction == TGBeatGroup.DIRECTION_DOWN)?1:-1;
-					int joinedType = getJoinedType();
-					boolean joinedGreaterThanQuarter = isJoinedGreaterThanQuarter();
-					
-					if((joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT || joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT) && !joinedGreaterThanQuarter){
-						float hX = (fromX + xMove + getPosX() + spacing);
-						float hY = ( (fromY + this.group.getY2(layout,getPosX() + spacing,key,clef)) - ( (lineSpacing * 2)* dir )) ;
-						for(int i = 0; i <= index; i ++){
-							painter.initPath(TGPainter.PATH_FILL);
-							TGNotePainter.paintFooter(painter,hX,(hY - ( (i * (lineSpacing / 2.0f)) * dir)),dir,lineSpacing);
-							painter.closePath();
-						}
-					}else{
-						int hX1 = 0;
-						int hX2 = 0;
-						if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_RIGHT){
-							hX1 = getPosX() + spacing;
-							hX2 = getPosX() + spacing + 6;
-						}else if(joinedType == TGVoiceImpl.JOINED_TYPE_NONE_LEFT){
-							hX1 = getPosX() + spacing - 5;
-							hX2 = getPosX() + spacing;
-						}else{
-							hX1 = getJoin1().getPosX() + getJoin1().getBeatImpl().getSpacing();
-							hX2 = getJoin2().getPosX() + getJoin2().getBeatImpl().getSpacing();
-						}
-						int hY1 = fromY + this.group.getY2(layout,hX1,key,clef);
-						int hY2 = fromY + this.group.getY2(layout,hX2,key,clef);
-						painter.setLineWidth(Math.max(1,Math.round(3f * scale)));
-						painter.initPath();
-						for(int i = 0; i <= index; i ++){
-							painter.moveTo(fromX + xMove + hX1, hY1 - ( (i * (5f * scale)) * dir));
-							painter.lineTo(fromX + xMove + hX2, hY2 - ( (i * (5f * scale)) * dir));
-						}
-						painter.closePath();
-						painter.setLineWidth(1);
-					}
-				}
-			}
-		}
-	}
-	
-	public void paintDot(ViewLayout layout,TGPainter painter,float fromX, float fromY,float scale){
-		float dotSize = (3.0f * scale);
-		float posX = fromX;
-		float posY = fromY;
-		layout.setDotStyle(painter);
-		painter.initPath(TGPainter.PATH_FILL);
-		painter.moveTo(posX - (dotSize / 2), posY - (dotSize / 2));
-		painter.addOval(posX - (dotSize / 2), posY - (dotSize / 2), dotSize,dotSize);
-		if(getDuration().isDoubleDotted()){
-			painter.moveTo(posX + (dotSize + 2) - (dotSize / 2), posY - (dotSize / 2));
-			painter.addOval(posX + (dotSize + 2) - (dotSize / 2), posY - (dotSize / 2), dotSize,dotSize);
-		}
-		painter.closePath();
-	}
-	
-	public int getPaintPosition(int index){
-		return getMeasureImpl().getTs().getPosition(index);
-	}
-	
-	public int getMaxString() {
-		return this.maxString;
-	}
-	
-	public int getMinString() {
-		return this.minString;
-	}
-	
-	public int getMaxY() {
-		return this.maxY;
-	}
-	
-	public int getMinY() {
-		return this.minY;
-	}
-	
-	public boolean isHiddenSilence() {
-		return this.hiddenSilence;
-	}
-	
-	public void setHiddenSilence(boolean hiddenSilence) {
-		this.hiddenSilence = hiddenSilence;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/Tablature.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/Tablature.java
deleted file mode 100644
index 530b014..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/Tablature.java
+++ /dev/null
@@ -1,340 +0,0 @@
-/*
- * Created on 29-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ControlAdapter;
-import org.eclipse.swt.events.ControlEvent;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit;
-import org.herac.tuxguitar.gui.editors.tab.layout.LinearViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.layout.PageViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGDuration;
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class Tablature extends Composite {
-	
-	private static final int SCROLL_DELAY = 15;
-	private static final int SCROLL_INCREMENT = 50;
-	
-	private TGSongManager songManager;
-	private Caret caret;
-	private int width;
-	private int height;
-	private ViewLayout viewLayout;
-	private EditorKit editorKit;
-	
-	private TGBeatImpl playedBeat;
-	private TGMeasureImpl playedMeasure;
-	
-	private int scrollX;
-	private int scrollY;
-	private boolean resetScroll;
-	protected long lastVScrollTime;
-	protected long lastHScrollTime;
-	
-	private boolean painting;
-	
-	public Tablature(final Composite parent) {
-		this(parent,SWT.NONE);
-	}
-	
-	public Tablature(final Composite parent,int style) {
-		super(parent, style);
-		this.editorKit = new EditorKit(this);
-	}
-	
-	public void initGUI(){
-		this.addPaintListener(new TablaturePaintListener(this));
-		
-		final ScrollBar hBar = getHorizontalBar();
-		hBar.setIncrement(SCROLL_INCREMENT);
-		hBar.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if(Tablature.this.lastHScrollTime + SCROLL_DELAY < System.currentTimeMillis()){
-					redraw();
-					Tablature.this.lastHScrollTime = System.currentTimeMillis();
-				}
-			}
-		});
-		
-		final ScrollBar vBar = getVerticalBar();
-		vBar.setIncrement(SCROLL_INCREMENT);
-		vBar.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				if(Tablature.this.lastVScrollTime + SCROLL_DELAY < System.currentTimeMillis()){
-					redraw();
-					Tablature.this.lastVScrollTime = System.currentTimeMillis();
-				}
-			}
-		});
-		
-		this.addControlListener(new ControlAdapter() {
-			public void controlResized(ControlEvent arg0) {
-				updateScroll();
-			}
-		});
-	}
-	
-	public void initDefaults(){
-		this.caret = new Caret(this);
-	}
-	
-	public void updateTablature(){
-		this.playedBeat = null;
-		this.playedMeasure = null;
-		getViewLayout().updateSong();
-	}
-	
-	public void initCaret(){
-		this.caret.update(1,TGDuration.QUARTER_TIME,1);
-	}
-	
-	public synchronized void paintTablature(TGPainter painter){
-		if(!TuxGuitar.instance().isLocked()){
-			TuxGuitar.instance().lock();
-			this.setPainting(true);
-			try{
-				this.checkScroll();
-				
-				Rectangle area = getClientArea();
-				ScrollBar xScroll = getHorizontalBar();
-				ScrollBar yScroll = getVerticalBar();
-				this.scrollX = xScroll.getSelection();
-				this.scrollY = yScroll.getSelection();
-				
-				this.getViewLayout().paint(painter,area,-this.scrollX,-this.scrollY);
-				
-				this.width = this.viewLayout.getWidth();
-				this.height = this.viewLayout.getHeight();
-				
-				this.updateScroll();
-				
-				if(TuxGuitar.instance().getPlayer().isRunning()){
-					redrawPlayingMode(painter,true);
-				}
-				// Si no estoy reproduciendo y hay cambios
-				// muevo el scroll al compas que tiene el caret
-				else if(getCaret().hasChanges()){
-					// Mover el scroll puede necesitar redibujar
-					// por eso es importante desmarcar los cambios antes de hacer el moveScrollTo
-					getCaret().setChanges(false);
-					
-					moveScrollTo(getCaret().getMeasure(), xScroll, yScroll,area);
-				}
-			}catch(Throwable throwable){
-				throwable.printStackTrace();
-			}
-			this.setPainting(false);
-			TuxGuitar.instance().unlock();
-		}
-	}
-	
-	public void resetScroll(){
-		this.resetScroll = true;
-	}
-	
-	public void checkScroll(){
-		if(this.resetScroll){
-			getHorizontalBar().setSelection(0);
-			getVerticalBar().setSelection(0);
-			this.resetScroll = false;
-		}
-	}
-	
-	public void updateScroll(){
-		Rectangle bounds = getBounds();
-		Rectangle client = getClientArea();
-		ScrollBar hBar = getHorizontalBar();
-		ScrollBar vBar = getVerticalBar();
-		hBar.setMaximum(this.width);
-		vBar.setMaximum(this.height);
-		hBar.setThumb(Math.min(bounds.width, client.width));
-		vBar.setThumb(Math.min(bounds.height, client.height));
-	}
-	
-	public boolean moveScrollTo(TGMeasureImpl measure){
-		return moveScrollTo(measure,getHorizontalBar(),getVerticalBar(),getClientArea());
-	}
-	
-	public boolean moveScrollTo(TGMeasureImpl measure,ScrollBar xScroll,ScrollBar yScroll,Rectangle area){
-		boolean success = false;
-		if(measure != null && measure.getTs() != null){
-			int mX = measure.getPosX();
-			int mY = measure.getPosY();
-			int mWidth = measure.getWidth(getViewLayout());
-			int mHeight = measure.getTs().getSize();
-			int marginWidth = getViewLayout().getFirstMeasureSpacing();
-			int marginHeight = getViewLayout().getFirstTrackSpacing();
-			boolean forceRedraw = false;
-			
-			//Solo se ajusta si es necesario
-			//si el largo del compas es mayor al de la pantalla. nunca se puede ajustar a la medida.
-			if( mX < 0 || ( (mX + mWidth ) > area.width && (area.width >= mWidth + marginWidth || mX > marginWidth) )  ){
-				xScroll.setSelection((this.scrollX + mX) - marginWidth );
-				success = true;
-			}
-			
-			//Solo se ajusta si es necesario
-			//si el alto del compas es mayor al de la pantalla. nunca se puede ajustar a la medida.
-			if( mY < 0 || ( (mY + mHeight ) > area.height && (area.height >= mHeight + marginHeight || mY > marginHeight) )  ){
-				yScroll.setSelection( (this.scrollY + mY)  - marginHeight );
-				success = true;
-			}
-			
-			if(!success){
-				// Si la seleccion "real" del scroll es distinta a la anterior, se fuerza el redraw
-				forceRedraw = (this.scrollX != xScroll.getSelection() || this.scrollY != yScroll.getSelection());
-			}
-			
-			if(forceRedraw || success){
-				redraw();
-			}
-		}
-		return success;
-	}
-	
-	public void redraw(){
-		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
-			this.playedBeat = null;
-			this.playedMeasure = null;
-			this.editorKit.tryBack();
-			this.setPainting(true);
-			super.redraw();
-		}
-	}
-	
-	public void redrawPlayingMode(){
-		if(!super.isDisposed() && !isPainting() && !TuxGuitar.instance().isLocked()){
-			//TuxGuitar.instance().lock();
-			if(TuxGuitar.instance().getPlayer().isRunning()){
-				this.editorKit.tryBack();
-				this.setPainting(true);
-				
-				TGPainter painter = new TGPainter(new GC(this));
-				redrawPlayingMode(painter,false);
-				painter.dispose();
-				
-				this.setPainting(false);
-			}
-			//TuxGuitar.instance().unlock();
-		}
-	}
-	
-	private void redrawPlayingMode(TGPainter painter,boolean force){
-		if(!super.isDisposed() && !TuxGuitar.instance().isLocked()){
-			try{
-				TGMeasureImpl measure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
-				TGBeatImpl beat = TuxGuitar.instance().getEditorCache().getPlayBeat();
-				if(measure != null && beat != null && measure.hasTrack(getCaret().getTrack().getNumber())){
-					if(!moveScrollTo(measure) || force){
-						boolean paintMeasure = (force || this.playedMeasure == null || !this.playedMeasure.equals(measure));
-						if(this.playedMeasure != null && this.playedBeat != null && !this.playedMeasure.isOutOfBounds() && this.playedMeasure.hasTrack(getCaret().getTrack().getNumber())){
-							getViewLayout().paintPlayMode(painter, this.playedMeasure, this.playedBeat,paintMeasure);
-						}
-						if(!measure.isOutOfBounds()){
-							getViewLayout().paintPlayMode(painter, measure, beat,paintMeasure);
-						}
-						this.playedBeat = beat;
-						this.playedMeasure =  measure;
-					}
-				}
-			}catch(Throwable throwable){
-				throwable.printStackTrace();
-			}
-		}
-	}
-	
-	public boolean isPainting() {
-		return this.painting;
-	}
-	
-	public void setPainting(boolean painting) {
-		this.painting = painting;
-	}
-	
-	public Caret getCaret(){
-		return this.caret;
-	}
-	
-	public EditorKit getEditorKit() {
-		return this.editorKit;
-	}
-	
-	public TGSongManager getSongManager() {
-		return this.songManager;
-	}
-	
-	public void setSongManager(TGSongManager songManager) {
-		this.songManager = songManager;
-	}
-	
-	public ViewLayout getViewLayout(){
-		return this.viewLayout;
-	}
-	
-	public void setViewLayout(ViewLayout viewLayout){
-		if(getViewLayout() != null){
-			getViewLayout().disposeLayout();
-		}
-		this.viewLayout = viewLayout;
-		if(this.getHorizontalBar() != null){
-			this.getHorizontalBar().setSelection(0);
-		}
-		if(this.getVerticalBar() != null){
-			this.getVerticalBar().setSelection(0);
-		}
-		this.reloadStyles();
-	}
-	
-	public void reloadStyles(){
-		if(this.getViewLayout() != null){
-			this.getViewLayout().reloadStyles();
-			this.setBackground(getViewLayout().getResources().getBackgroundColor());
-		}
-	}
-	
-	public void reloadViewLayout(){
-		int style =  TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.LAYOUT_STYLE);
-		int mode = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.LAYOUT_MODE);
-		this.loadViewLayout(style, mode);
-	}
-	
-	private void loadViewLayout( int style, int mode ){
-		switch(mode){
-			case ViewLayout.MODE_PAGE:
-				setViewLayout(new PageViewLayout(this,style));
-			break;
-			case ViewLayout.MODE_LINEAR:
-				setViewLayout(new LinearViewLayout(this,style));
-			break;
-			default:
-				if( mode != ViewLayout.DEFAULT_MODE ){
-					this.loadViewLayout( style, ViewLayout.DEFAULT_MODE );
-				}
-			break;
-		}
-	}
-	
-	public void dispose(){
-		super.dispose();
-		this.getViewLayout().disposeLayout();
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TablaturePaintListener.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TablaturePaintListener.java
deleted file mode 100644
index e3d62c5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TablaturePaintListener.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Created on 30-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TablaturePaintListener implements PaintListener{
-	private Tablature tablature;
-	
-	public TablaturePaintListener(Tablature tablature){
-		this.tablature = tablature;
-	}
-	
-	public void paintControl(PaintEvent e) {
-		this.tablature.paintTablature( new TGPainter(e.gc) );
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TablatureUtil.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TablatureUtil.java
deleted file mode 100644
index b19ec3a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/TablatureUtil.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Created on 25-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab;
-
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TablatureUtil {
-	/**
-	 * Calcula la posicion inicial de una nota, dependiendo de el spacing
-	 */
-	public static final int getStartPosition(TGMeasure measure,long start,int spacing){
-		double newStart = (double)start - (double)measure.getStart();
-		double displayPosition = 0.0;
-		if(newStart > 0){
-			double position = (newStart / TGDuration.QUARTER_TIME);
-			displayPosition = (position * spacing);
-		}
-		return (int)displayPosition;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/edit/EditorKit.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/edit/EditorKit.java
deleted file mode 100644
index 54724a7..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/edit/EditorKit.java
+++ /dev/null
@@ -1,227 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab.edit;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.events.MenuEvent;
-import org.eclipse.swt.events.MenuListener;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.events.MouseTrackListener;
-import org.eclipse.swt.graphics.Point;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGString;
-
-public class EditorKit implements MouseListener,MouseMoveListener,MouseTrackListener,MenuListener{
-	
-	public static final int MOUSE_MODE_SELECTION = 1;
-	public static final int MOUSE_MODE_EDITION = 2;
-	
-	private int mouseMode;
-	private boolean natural;
-	private Tablature tablature;
-	private MouseKit mouseKit;
-	private Point position;
-	private boolean menuOpen;
-	
-	public EditorKit(Tablature tablature){
-		this.tablature = tablature;
-		this.mouseKit = new MouseKit(this);
-		this.position = new Point(0,0);
-		this.menuOpen = false;
-		this.tablature.addMouseListener(this);
-		this.tablature.addMouseMoveListener(this);
-		this.tablature.addMouseTrackListener(this);
-		this.setDefaults();
-	}
-	
-	private void setDefaults(){
-		this.setMouseMode(TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.EDITOR_MOUSE_MODE,MOUSE_MODE_EDITION));
-		this.setNatural(TuxGuitar.instance().getConfig().getBooleanConfigValue(TGConfigKeys.EDITOR_NATURAL_KEY_MODE,true));
-	}
-	
-	public int getMouseMode() {
-		return this.mouseMode;
-	}
-	
-	public void setMouseMode(int mouseMode) {
-		this.mouseMode = mouseMode;
-	}
-	
-	public boolean isNatural() {
-		return this.natural;
-	}
-	
-	public void setNatural(boolean natural) {
-		this.natural = natural;
-	}
-	
-	public Tablature getTablature() {
-		return this.tablature;
-	}	
-	
-	public void tryBack(){
-		this.mouseKit.tryBack();
-	}
-	
-	public boolean select() {
-		int x = this.position.x;
-		int y = this.position.y;
-		if(x >= 0 && y >= 0){
-			TGTrackImpl track = findSelectedTrack(y);
-			if (track != null) {
-				TGMeasureImpl measure = findSelectedMeasure(track, x, y);
-				if (measure != null) {
-					TGBeat beat = findSelectedBeat(measure, x);
-					TGString tgString = findSelectedString(measure, y);
-					if (beat != null) {
-						int string = (tgString != null)?tgString.getNumber():getTablature().getCaret().getSelectedString().getNumber();
-						getTablature().getCaret().moveTo(track, measure, beat, string);
-					}
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-	
-	private boolean isScoreEnabled(){
-		return ( (getTablature().getViewLayout().getStyle() & ViewLayout.DISPLAY_SCORE) != 0 );
-	}
-	
-	public TGTrackImpl findSelectedTrack(int y){
-		ViewLayout layout = getTablature().getViewLayout();
-		int number = layout.getTrackNumberAt(y);
-		if(number >= 0){
-			return (TGTrackImpl)layout.getSongManager().getTrack(number);
-		}
-		return null;
-	}
-	
-	public TGMeasureImpl findSelectedMeasure(TGTrackImpl track,int x,int y){
-		TGMeasureImpl measure = null;
-		int minorDistance = 0;
-		
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasureImpl m = (TGMeasureImpl)it.next();
-			if(!m.isOutOfBounds() && m.getTs() != null){
-				boolean isAtX = (x >= m.getPosX() && x <= m.getPosX() + m.getWidth(getTablature().getViewLayout()) + m.getSpacing());
-				if(isAtX){
-					int measureHeight = m.getTs().getSize();
-					int distanceY = Math.min(Math.abs(y - (m.getPosY())),Math.abs(y - ( m.getPosY() + measureHeight - 10)));
-					if(measure == null || distanceY < minorDistance){
-						measure = m;
-						minorDistance = distanceY;
-					}
-				}
-			}
-		}
-		return measure;
-	}
-	
-	public TGBeatImpl findSelectedBeat(TGMeasureImpl measure, int x){
-		int voice = getTablature().getCaret().getVoice();
-		int posX = measure.getHeaderImpl().getLeftSpacing(getTablature().getViewLayout()) + measure.getPosX();
-		int bestDiff = -1;
-		TGBeatImpl bestBeat = null;
-		Iterator it = measure.getBeats().iterator();
-		while(it.hasNext()){
-			TGBeatImpl beat = (TGBeatImpl)it.next();
-			if(!beat.getVoice(voice).isEmpty()){
-				int diff = Math.abs(x - (posX + (beat.getPosX() + beat.getSpacing())));
-				if(bestDiff == -1 || diff < bestDiff){
-					bestBeat = beat;
-					bestDiff = diff;
-				}
-			}
-		}
-		if( bestBeat == null ){
-			bestBeat = (TGBeatImpl)getTablature().getViewLayout().getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
-		}
-		return bestBeat;
-	}
-	
-	public TGString findSelectedString(TGMeasureImpl measure,int y) {
-		TGString string = null;
-		int stringSpacing = getTablature().getViewLayout().getStringSpacing();
-		int minorDistance = 0;
-		int firstStringY = measure.getPosY() + measure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE);
-		
-		Iterator it = measure.getTrack().getStrings().iterator();
-		while(it.hasNext()){
-			TGString currString = (TGString)it.next();
-			int distanceX = Math.abs(y - (firstStringY + ((currString.getNumber() * stringSpacing) - stringSpacing)));
-			if(string == null || distanceX < minorDistance){
-				string = currString;
-				minorDistance = distanceX;
-			}
-		}
-		
-		return string;
-	}
-	
-	public void mouseDown(MouseEvent e) {
-		this.position.x = e.x;
-		this.position.y = e.y;
-	}
-	
-	public void mouseUp(MouseEvent e) {
-		this.position.x = e.x;
-		this.position.y = e.y;
-		this.tablature.setFocus();
-		if(select()){
-			TuxGuitar.instance().updateCache(true);
-			if(!this.menuOpen && e.button == 1 && !TuxGuitar.instance().getPlayer().isRunning() && isScoreEnabled() && getMouseMode() == MOUSE_MODE_EDITION){
-				this.mouseKit.mouseUp(e);
-			}
-		}
-	}
-	
-	public void mouseMove(MouseEvent e) {
-		if(!this.menuOpen && !TuxGuitar.instance().getPlayer().isRunning()){
-			if(isScoreEnabled() && getMouseMode() == MOUSE_MODE_EDITION){
-				this.mouseKit.mouseMove(e);
-			}
-		}
-	}
-	
-	public void mouseExit(MouseEvent e) {
-		if(!this.menuOpen && !TuxGuitar.instance().getPlayer().isRunning()){
-			if(isScoreEnabled() && getMouseMode() == MOUSE_MODE_EDITION){
-				this.mouseKit.mouseExit();
-			}
-		}
-	}
-	
-	public void menuShown(MenuEvent e) {
-		this.menuOpen = true;
-		this.select();
-		TuxGuitar.instance().updateCache(true);
-	}
-	
-	public void menuHidden(MenuEvent e){
-		this.menuOpen = false;
-		TuxGuitar.instance().updateCache(true);
-	}
-	
-	public void mouseDoubleClick(MouseEvent e) {
-		//not implemented
-	}
-	
-	public void mouseEnter(MouseEvent e) {
-		//not implemented
-	}
-	
-	public void mouseHover(MouseEvent e) {
-		//not implemented
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/edit/MouseKit.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/edit/MouseKit.java
deleted file mode 100644
index 14ea9fa..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/edit/MouseKit.java
+++ /dev/null
@@ -1,356 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab.edit;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.graphics.GC;
-import org.eclipse.swt.graphics.Image;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGNoteImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing;
-import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.undo.undoables.measure.UndoableMeasureGeneric;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-public class MouseKit {
-	private static final int FIRST_LINE_VALUES[] = new int[] {65,45,52,55};
-	
-	private EditorKit kit;
-	private Image back = null;
-	private int lastx;
-	private int lasty;
-	
-	public MouseKit(EditorKit kit){
-		this.kit = kit;
-	}
-	
-	private ViewLayout.TrackPosition getTrackPosition(int y) {
-		return this.kit.getTablature().getViewLayout().getTrackPositionAt(y);
-	}
-	
-	public void tryBack(){
-		if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked() && !this.kit.getTablature().isPainting()){
-			TGPainter painter = new TGPainter(new GC(this.kit.getTablature()));
-			if(this.back != null && !this.back.isDisposed()){
-				painter.drawImage(this.back,this.lastx,this.lasty);
-			}
-			painter.dispose();
-		}
-		if(this.back != null){
-			this.back.dispose();
-		}
-	}
-	
-	public void mouseExit() {
-		tryBack();
-	}
-	
-	public void mouseMove(MouseEvent e) {
-		this.tryBack();
-		if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked() && !this.kit.getTablature().isPainting()){
-			
-			TGTrackImpl track = this.kit.findSelectedTrack(e.y);
-			if (track != null) {
-				TGMeasureImpl measure = this.kit.findSelectedMeasure(track,e.x,e.y);
-				
-				if(measure != null && measure.getTs() != null){
-					float scale = this.kit.getTablature().getViewLayout().getScale();
-					int minValue = track.getString(track.stringCount()).getValue();
-					int maxValue = track.getString(1).getValue() + 29; //Max frets = 29
-					int tempValue = FIRST_LINE_VALUES[measure.getClef() - 1];
-					int lineSpacing = this.kit.getTablature().getViewLayout().getScoreLineSpacing();
-					int width = (int)(10.0f * scale);
-					int topHeight = measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
-					int bottomHeight = (measure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_DOWN_LINES));
-					
-					int x1 = (int)(e.x - (width / 2.0f));
-					int x2 = (int)(e.x + (width / 2.0f));
-					int y1 = (measure.getPosY() + measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES));
-					int y2 = (y1 + (lineSpacing * 5));
-					
-					if(e.y < (y1 + 3) && e.y >= (y1 - topHeight)){
-						this.back = new Image(TuxGuitar.instance().getDisplay(),width + 1,topHeight + 1);
-						TGPainter painter = new TGPainter(new GC(this.kit.getTablature()));
-						painter.copyArea(this.back,x1, (y1 - topHeight));
-						painter.setForeground(this.kit.getTablature().getViewLayout().getResources().getLineColor());
-						for(int y = (y1 - lineSpacing); y >= (y1 - topHeight); y -= lineSpacing){
-							tempValue += (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue + 1) % 12])?2:1;
-							tempValue += (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue + 1) % 12])?2:1;
-							if(y < e.y - 5 || tempValue > maxValue){
-								break;
-							}
-							painter.initPath();
-							painter.setAntialias(false);
-							painter.moveTo(x1, y);
-							painter.lineTo(x2, y);
-							painter.closePath();
-						}
-						painter.dispose();
-						
-						this.lastx = x1;
-						this.lasty = (y1 - topHeight);
-					}else if(e.y > (y2 - 3) && e.y  < y2 + bottomHeight){
-						this.back = new Image(TuxGuitar.instance().getDisplay(),width + 1,bottomHeight + 1);
-						TGPainter painter = new TGPainter(new GC(this.kit.getTablature()));
-						painter.copyArea(this.back,x1, y2);	
-						painter.setForeground(this.kit.getTablature().getViewLayout().getResources().getLineColor());
-						tempValue -= 14;
-						for(int y = y2; y <= (y2 + bottomHeight); y += lineSpacing){
-							if(tempValue > 0){
-								tempValue -= (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue - 1) % 12])?2:1;
-								tempValue -= (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue - 1) % 12])?2:1;
-								if(y > e.y + 5 || tempValue < minValue){
-									break;
-								}
-								painter.initPath();
-								painter.setAntialias(false);
-								painter.moveTo(x1, y);
-								painter.lineTo(x2, y);
-								painter.closePath();
-							}
-						}
-						painter.dispose();
-						
-						this.lastx = x1;
-						this.lasty = y2;
-					}
-				}
-			}
-		}
-	}
-	
-	public void mouseUp(MouseEvent e) {
-		if(!TuxGuitar.instance().isLocked() && !ActionLock.isLocked() && !this.kit.getTablature().isPainting()){
-			ActionLock.lock();
-			
-			ViewLayout.TrackPosition pos = getTrackPosition(e.y) ;
-			if(pos != null){
-				TGTrackImpl track = this.kit.getTablature().getCaret().getTrack();
-				TGMeasureImpl measure = this.kit.getTablature().getCaret().getMeasure();
-				if(measure.getTs() != null){
-					int minValue = track.getString(track.stringCount()).getValue();
-					int maxValue = track.getString(1).getValue() + 29; //Max frets = 29
-					
-					int lineSpacing = this.kit.getTablature().getViewLayout().getScoreLineSpacing();
-					
-					int topHeight = measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
-					int bottomHeight = (measure.getTs().getPosition(TGTrackSpacing.POSITION_TABLATURE) - measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_DOWN_LINES));
-					
-					int y1 = (pos.getPosY() + measure.getTs().getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES));
-					int y2 = (y1 + (lineSpacing * 5));
-					
-					if(e.y >= (y1 - topHeight) && e.y  < (y2 + bottomHeight)){
-						
-						int value = 0;
-						int tempValue = FIRST_LINE_VALUES[measure.getClef() - 1];
-						double limit = (topHeight / (lineSpacing / 2.00));
-						for(int i = 0;i < limit;i ++){
-							tempValue += (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue + 1) % 12])?2:1;
-						}
-						
-						float minorDistance = 0;
-						for(float y = (y1 - topHeight); y <= (y2 + bottomHeight); y += (lineSpacing / 2.00)){
-							if(tempValue > 0){
-								float distanceY = Math.abs(e.y - y);
-								if(value == 0 || distanceY < minorDistance){
-									value = tempValue;
-									minorDistance = distanceY;
-								}
-								tempValue -= (TGMeasureImpl.ACCIDENTAL_NOTES[(tempValue - 1) % 12])?2:1;
-							}
-						}
-						if(value >= minValue && value <= maxValue){
-							TGVoiceImpl beat = findBestVoice(measure, e.x);
-							if(beat != null){
-								value = getRealValue(value);
-								if(!removeNote(value,beat)){
-									makeNote(beat, getRealStart(beat, e.x), value);
-								}
-							}
-							redrawTablature();
-						}
-					}
-				}
-			}
-			ActionLock.unlock();
-		}
-	}
-	
-	private long getRealStart(TGVoiceImpl voice,int x){
-		if(voice.isEmpty()){
-			return voice.getBeat().getStart();
-		}
-		TGMeasureImpl measure = voice.getBeatImpl().getMeasureImpl();
-		long beatX = (measure.getHeaderImpl().getLeftSpacing( this.kit.getTablature().getViewLayout() ) + measure.getPosX() + voice.getBeatImpl().getPosX() + voice.getBeatImpl().getSpacing());
-		long beatStart = voice.getBeat().getStart();
-		long beatLength = voice.getDuration().getTime();
-		long beatEnd = ( beatStart + beatLength );
-		if(x > beatX){
-			return Math.min( ( beatStart + ( (x - beatX) * beatLength / voice.getWidth() ) ), (beatEnd - 1 ) );
-		}
-		return beatStart;
-	}
-	
-	private int getRealValue(int value){
-		int realValue = value;
-		int key = this.kit.getTablature().getCaret().getMeasure().getKeySignature();
-		if(key <= 7){
-			if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_SHARP_NOTES[realValue % 12]] == TGMeasureImpl.SHARP && this.kit.isNatural()){
-				realValue ++;
-			}
-			else if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_SHARP_NOTES[realValue % 12]] != TGMeasureImpl.SHARP && !this.kit.isNatural()){
-				if(TGMeasureImpl.ACCIDENTAL_NOTES[(realValue + 1) % 12]){
-					realValue ++;
-				}
-			}
-		}else if(key > 7 ){
-			if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_FLAT_NOTES[realValue % 12]] == TGMeasureImpl.FLAT && this.kit.isNatural()){
-				realValue --;
-			}
-			else if(TGMeasureImpl.KEY_SIGNATURES[key][TGMeasureImpl.ACCIDENTAL_FLAT_NOTES[realValue % 12]] != TGMeasureImpl.FLAT && !this.kit.isNatural()){
-				if(TGMeasureImpl.ACCIDENTAL_NOTES[(realValue - 1) % 12]){
-					realValue --;
-				}
-			}
-		}
-		return realValue;
-	}
-	
-	private boolean removeNote(int value,TGVoice voice) {
-		Iterator it = voice.getNotes().iterator();
-		while (it.hasNext()) {
-			TGNoteImpl note = (TGNoteImpl) it.next();
-			
-			if (note.getRealValue() == value) {
-				//comienza el undoable
-				UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-				
-				TGSongManager manager = this.kit.getTablature().getSongManager();
-				manager.getMeasureManager().removeNote(note);
-				
-				//termia el undoable
-				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	private void makeNote(TGVoice voice, long start,  int value){
-		Caret caret = this.kit.getTablature().getCaret();
-		TGSongManager manager = this.kit.getTablature().getSongManager();
-		TGTrack track = caret.getTrack();
-		int string = findBestString(track,voice,value);
-		if(string > 0){
-			//comienza el undoable
-			UndoableMeasureGeneric undoable = UndoableMeasureGeneric.startUndo();
-			
-			TGNote note = manager.getFactory().newNote();
-			note.setValue((value - track.getString(string).getValue()));
-			note.setVelocity(caret.getVelocity());
-			note.setString(string);
-			
-			TGDuration duration = manager.getFactory().newDuration();
-			caret.getDuration().copy(duration);
-			
-			manager.getMeasureManager().addNote(voice.getBeat(),note,duration, start, voice.getIndex());
-			
-			caret.moveTo(caret.getTrack(),caret.getMeasure(),note.getVoice().getBeat(),note.getString());
-			
-			//termia el undoable
-			TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-			TuxGuitar.instance().getFileHistory().setUnsavedFile();
-			
-			//reprodusco las notas en el pulso
-			caret.getSelectedBeat().play();
-		}
-	}
-	
-	private void redrawTablature(){
-		Caret caret = this.kit.getTablature().getCaret();
-		this.kit.getTablature().getViewLayout().fireUpdate(caret.getMeasure().getNumber());
-		TuxGuitar.instance().updateCache(true);
-	}
-	
-	private int findBestString(TGTrack track,TGVoice voice,int value){
-		List strings = new ArrayList();
-		for(int number = 1;number <= track.stringCount();number++){
-			boolean used = false;
-			TGString string = track.getString(number);
-			Iterator it = voice.getNotes().iterator();
-			while (it.hasNext()) {
-				TGNote note = (TGNote) it.next();
-				if(note.getString() == string.getNumber()){
-					used = true;
-				}
-			}
-			if(!used){
-				strings.add(string);
-			}
-		}
-		
-		int minFret = -1;
-		int stringForValue = 0;
-		for(int i = 0;i < strings.size();i++){
-			TGString string = (TGString)strings.get(i);
-			int fret = value - string.getValue();
-			if((fret >= 0) && (minFret < 0 || fret < minFret)){
-				stringForValue = string.getNumber();
-				minFret = fret;
-			}
-		}
-		return stringForValue;
-	}
-	
-	public TGVoiceImpl findBestVoice(TGMeasureImpl measure, int x){
-		int voiceIndex = this.kit.getTablature().getCaret().getVoice();
-		int posX = measure.getHeaderImpl().getLeftSpacing( this.kit.getTablature().getViewLayout() ) + measure.getPosX();
-		int bestDiff = -1;
-		TGVoiceImpl bestVoice = null;
-		TGDuration duration = this.kit.getTablature().getCaret().getDuration();
-		Iterator it = measure.getBeats().iterator();
-		while(it.hasNext()){
-			TGBeatImpl beat = (TGBeatImpl)it.next();
-			TGVoiceImpl voice = beat.getVoiceImpl( voiceIndex );
-			if(!voice.isEmpty()){
-				int x1 = (beat.getPosX() + beat.getSpacing());
-				int x2 = (x1 + voice.getWidth());
-				long increment = voice.getWidth();
-				if(voice.isRestVoice()){
-					increment = (duration.getTime() * voice.getWidth() / voice.getDuration().getTime());
-				}
-				for( int beatX = x1 ; beatX < x2 ; beatX += increment ){
-					int diff = Math.abs(x - (posX + beatX));
-					if(bestDiff == -1 || diff < bestDiff){
-						bestVoice = voice;
-						bestDiff = diff;
-					}
-				}
-			}
-		}
-		if( bestVoice == null ){
-			TGBeat beat = this.kit.getTablature().getViewLayout().getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
-			if( beat != null ){
-				bestVoice = (TGVoiceImpl)beat.getVoice(voiceIndex);
-			}
-		}
-		return bestVoice;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/LinearViewLayout.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/LinearViewLayout.java
deleted file mode 100644
index 9b5ba4f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/LinearViewLayout.java
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- * Created on 04-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab.layout;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.graphics.Rectangle;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.TGLyricImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class LinearViewLayout extends ViewLayout{
-	
-	public LinearViewLayout(Tablature tablature,int style){
-		super(tablature,style);
-	}
-	
-	public int getMode(){
-		return MODE_LINEAR;
-	}
-	
-	public void paintSong(TGPainter painter,Rectangle clientArea,int fromX,int fromY) {
-		this.setWidth(0);
-		this.setHeight(0);
-		this.clearTrackPositions();
-		
-		int style = getStyle();
-		int number = ((style & ViewLayout.DISPLAY_MULTITRACK) == 0?getTablature().getCaret().getTrack().getNumber():-1);
-		int posY = fromY + getFirstTrackSpacing();
-		int height = getFirstTrackSpacing();
-		int trackHeight;
-		Iterator tracks = getSongManager().getSong().getTracks();
-		while(tracks.hasNext()){
-			TGTrackImpl track = (TGTrackImpl) tracks.next();
-			if(number < 0 || track.getNumber() == number){
-				
-				TGTrackSpacing ts = new TGTrackSpacing(this) ;
-				ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0 ?( (getScoreLineSpacing() * 5) ):0));
-				((TGLyricImpl)track.getLyrics()).start();
-				
-				//------AUTO_SPACING---------------------------------------
-				int maxY = 0;
-				int minY = 0;
-				// Need to score extra-lines in edition mode
-				if( (style & DISPLAY_TABLATURE) == 0 && (style & DISPLAY_SCORE) != 0 ){
-					maxY = ((getScoreLineSpacing() * 4) + (getScoreLineSpacing() * 4));
-					minY = -(getScoreLineSpacing() * 3);
-				}
-				
-				Iterator measures = track.getMeasures();
-				while(measures.hasNext()){
-					TGMeasureImpl measure = (TGMeasureImpl)measures.next();
-					maxY = (measure.getMaxY() > maxY)?measure.getMaxY():maxY;
-					minY = (measure.getMinY() < minY)?measure.getMinY():minY;
-					measure.registerSpacing(this,ts);
-				}
-				ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, ( (style & DISPLAY_SCORE) != 0 ?Math.abs(minY):0));
-				if((style & DISPLAY_SCORE) != 0 && maxY + getMinScoreTabSpacing() > getScoreSpacing()){
-					ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (maxY - (getScoreLineSpacing() * 4)) );
-				}
-				
-				if((style & DISPLAY_TABLATURE) != 0){
-					ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(minY), getStringSpacing()) ));
-					ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ?  track.getTabHeight() + getStringSpacing() + 1 : Math.max(maxY, track.getTabHeight() + getStringSpacing() + 1) ));
-				}
-				ts.setSize(TGTrackSpacing.POSITION_LYRIC,10);
-				checkDefaultSpacing(ts);
-				
-				//----------------------------------------------------
-				paintMeasures(track,painter,fromX,posY,ts,clientArea);
-				paintLines(track,ts,painter,fromX + (getWidth() + 2),posY,(clientArea.width - (fromX + getWidth()) ));
-				
-				trackHeight = ts.getSize();
-				addTrackPosition(track.getNumber(),posY,trackHeight);
-				
-				posY += trackHeight + getTrackSpacing();
-				height += trackHeight + getTrackSpacing();
-			}
-		}
-		if(getWidth() > clientArea.width){
-			// solo para dar un espacio.
-			this.setWidth( getWidth() + getFirstMeasureSpacing());
-		}
-		this.setHeight(height);
-		this.paintCaret(painter);
-	}
-	
-	public void paintMeasures(TGTrackImpl track,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts,Rectangle clientArea) {
-		int posX = (fromX + getFirstMeasureSpacing());
-		int posY = fromY;
-		int width = getFirstMeasureSpacing();
-		
-		Iterator measures = track.getMeasures();
-		while(measures.hasNext()){
-			TGMeasureImpl measure = (TGMeasureImpl)measures.next();
-			
-			//asigno la posicion dentro del compas
-			measure.setPosX(posX);
-			measure.setPosY(posY);
-			measure.setTs(ts);
-			
-			((TGLyricImpl)track.getLyrics()).setCurrentMeasure(measure);
-			
-			//Solo pinto lo que entre en pantalla
-			boolean isAtX = ((posX + measure.getWidth(this)) > clientArea.x - 100 && posX < clientArea.x + clientArea.width + measure.getWidth(this) + 100);
-			boolean isAtY = (posY + ts.getSize() > clientArea.y && posY < clientArea.y + clientArea.height + 80);
-			if(isAtX && isAtY){
-				paintMeasure(measure,painter,0);
-				((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,measure,posX, posY);
-			}else{
-				measure.setOutOfBounds(true);
-			}
-			
-			int measureWidth = measure.getWidth(this);
-			posX += measureWidth;
-			width += measureWidth;
-		}
-		this.setWidth(Math.max(getWidth(),width));
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/PageViewLayout.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/PageViewLayout.java
deleted file mode 100644
index f72e32d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/PageViewLayout.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Created on 04-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab.layout;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Composite;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.TGLyricImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class PageViewLayout extends ViewLayout{
-	
-	private static final int STATIC_WIDTH = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.LAYOUT_PAGE_FORCE_WIDTH, 0);
-	
-	private int maximumWidth;
-	private int marginLeft;
-	private int marginRight;
-	
-	public PageViewLayout(Tablature tablature,int style){
-		super(tablature,style);
-	}
-	
-	public int getMode(){
-		return MODE_PAGE;
-	}
-	
-	public void paintSong(TGPainter painter,Rectangle clientArea,int fromX,int fromY) {
-		this.maximumWidth = STATIC_WIDTH;
-		this.marginLeft = getFirstMeasureSpacing();
-		this.marginRight = 10;
-		this.setWidth(0);
-		this.setHeight(0);
-		this.clearTrackPositions();
-		
-		int style = getStyle();
-		int number = ((style & ViewLayout.DISPLAY_MULTITRACK) == 0?getTablature().getCaret().getTrack().getNumber():-1);
-		int posY = fromY + getFirstTrackSpacing();
-		int height = getFirstTrackSpacing();
-		int lineHeight = 0;
-		
-		int measureCount = getSongManager().getSong().countMeasureHeaders();
-		int nextMeasureIndex = 0;
-		while(measureCount > nextMeasureIndex){
-			TempLine line = null;
-			Iterator tracks = getSongManager().getSong().getTracks();
-			while(tracks.hasNext()){
-				TGTrackImpl track = (TGTrackImpl) tracks.next();
-				if(number < 0 || track.getNumber() == number){
-					
-					TGTrackSpacing ts = new TGTrackSpacing(this) ;
-					ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0 ?( (getScoreLineSpacing() * 5) ):0));
-					
-					if(nextMeasureIndex == 0){
-						((TGLyricImpl)track.getLyrics()).start();
-					}
-					
-					line = getTempLines(track,nextMeasureIndex,ts);
-					if( (style & DISPLAY_SCORE) != 0 ){
-						ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, Math.abs(line.minY));
-						if(line.maxY + getMinScoreTabSpacing() > getScoreSpacing()){
-							ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (line.maxY - (getScoreLineSpacing() * 4)) );
-						}
-					}
-					if((style & DISPLAY_TABLATURE) != 0){
-						ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(line.minY), getStringSpacing()) ));
-						ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ?  track.getTabHeight() + getStringSpacing() + 1 : Math.max( line.maxY, track.getTabHeight() + getStringSpacing() + 1) ));
-					}
-					ts.setSize(TGTrackSpacing.POSITION_LYRIC,10);
-					checkDefaultSpacing(ts);
-					
-					paintLine(track,line,painter,fromX,posY,ts,clientArea);
-					
-					lineHeight = ts.getSize();
-					addTrackPosition(track.getNumber(),posY,lineHeight);
-					
-					int emptyX = (this.marginLeft + fromX + line.tempWith + 2);
-					int emptyWith = ( getMaxWidth() - emptyX );
-					if((emptyWith - 20) > 0 && (line.lastIndex + 1) >= measureCount){
-						if(emptyX < (clientArea.x + clientArea.width)){
-							emptyX = (emptyX < clientArea.x ? clientArea.x :emptyX);
-							emptyWith = ( emptyWith > clientArea.width ? clientArea.width : emptyWith );
-							paintLines(track,ts,painter, emptyX ,posY, emptyWith);
-						}
-					}
-					
-					posY += lineHeight + getTrackSpacing();
-					height += lineHeight + getTrackSpacing();
-				}
-			}
-			if(line != null){
-				nextMeasureIndex = line.lastIndex + 1;
-			}
-		}
-		
-		this.setHeight(height);
-		this.setWidth( getWidth() + this.marginRight );
-		this.paintCaret(painter);
-	}
-	
-	public void paintLine(TGTrackImpl track,TempLine line,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts,Rectangle clientArea) {
-		int posX = (this.marginLeft + fromX);
-		int posY = fromY;
-		int width = this.marginLeft;
-		
-		//verifico si esta en el area de cliente
-		boolean isAtY = (posY + ts.getSize() > clientArea.y && posY < clientArea.y + clientArea.height + 80);
-		
-		int measureSpacing = 0;
-		if(line.fullLine){
-			int diff = ( getMaxWidth() - line.tempWith);
-			if(diff != 0 && line.measures.size() > 0){
-				measureSpacing = diff / line.measures.size();
-			}
-		}
-		
-		for(int i = 0;i < line.measures.size();i ++){
-			int index = ((Integer)line.measures.get(i)).intValue();
-			TGMeasureImpl currMeasure = (TGMeasureImpl)track.getMeasure(index);
-			
-			//asigno la posicion dentro del compas
-			currMeasure.setPosX(posX);
-			currMeasure.setPosY(posY);
-			currMeasure.setTs(ts);
-			
-			((TGLyricImpl)track.getLyrics()).setCurrentMeasure(currMeasure);
-			
-			currMeasure.setFirstOfLine(i == 0);
-			
-			int measureWidth = ( currMeasure.getWidth(this) + measureSpacing );
-			boolean isAtX = ( posX + measureWidth > clientArea.x && posX < clientArea.x + clientArea.width);
-			if(isAtX && isAtY){
-				paintMeasure(currMeasure,painter,measureSpacing);
-				((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,currMeasure,posX, posY);
-			}else{
-				currMeasure.setOutOfBounds(true);
-			}
-			
-			posX += measureWidth;
-			width += measureWidth;
-		}
-		this.setWidth(Math.max(getWidth(),width));
-	}
-	
-	public TempLine getTempLines(TGTrack track,int fromIndex,TGTrackSpacing ts) {
-		int style = getStyle();
-		
-		TempLine line = new TempLine();
-		line.maxY = 0;
-		line.minY = 0;
-		
-		// Need to score extra-lines in edition mode
-		if( (style & DISPLAY_TABLATURE) == 0 && (style & DISPLAY_SCORE) != 0 ){
-			line.maxY = ((getScoreLineSpacing() * 4) + (getScoreLineSpacing() * 4));
-			line.minY = -(getScoreLineSpacing() * 3);
-		}
-		
-		int measureCount = track.countMeasures();
-		for (int measureIdx = fromIndex; measureIdx < measureCount; measureIdx++) {
-			TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure(measureIdx);
-			
-			//verifico si tengo que bajar de linea
-			if((line.tempWith + measure.getWidth(this)) >=  getMaxWidth() && !line.measures.isEmpty()){
-				line.fullLine = true;
-				return line;
-			}
-			line.tempWith +=  measure.getWidth(this);
-			line.maxY = (measure.getMaxY() > line.maxY)?measure.getMaxY():line.maxY;
-			line.minY = (measure.getMinY() < line.minY)?measure.getMinY():line.minY;
-			
-			line.addMeasure(measureIdx);
-			measure.registerSpacing(this,ts);
-		}
-		
-		return line;
-	}
-	
-	public int getMaxWidth(){
-		if(this.maximumWidth <= 0){
-			int marginLeft = 0;
-			int marginRight = 0;
-			int monitorWidth = getTablature().getMonitor().getClientArea().width;
-			Rectangle tablatureArea = getTablature().getClientArea();
-			Composite parent = getTablature().getParent();
-			while( parent != null ){
-				Rectangle parentArea = parent.getClientArea();
-				parent = parent.getParent();
-				if( parent == null ){
-					marginRight = ( parentArea.width - (marginLeft + tablatureArea.width ) );
-				}else{
-					marginLeft += parentArea.x ;
-				}
-			}
-			this.maximumWidth = (monitorWidth - ( marginLeft + marginRight ) );
-		}
-		return (this.maximumWidth - (this.marginLeft + this.marginRight));
-	}
-	
-	private class TempLine{
-		protected int tempWith;
-		protected int lastIndex;
-		protected boolean fullLine;
-		protected int maxY = 0;
-		protected int minY = 0;
-		protected List measures;
-		
-		public TempLine(){
-			this.measures = new ArrayList();
-		}
-		
-		protected void addMeasure(int index){
-			this.measures.add(new Integer(index));
-			this.lastIndex = index;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/PrinterViewLayout.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/PrinterViewLayout.java
deleted file mode 100644
index 6d32a43..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/PrinterViewLayout.java
+++ /dev/null
@@ -1,496 +0,0 @@
-/*
- * Created on 04-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab.layout;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.Rectangle;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.TGChordImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGLyricImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-import org.herac.tuxguitar.gui.printer.PrintDocument;
-import org.herac.tuxguitar.gui.printer.PrintStyles;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class PrinterViewLayout extends ViewLayout{
-	
-	private static final int DEFAULT_SCORE_LINE_SPACING = 7;
-	private static final int DEFAULT_STRING_SPACING = 8;
-	private static final int DEFAULT_HORIZONTAL_SPACING = 15;
-	private static final int MIN_SCORE_TAB_SPACING =  15;
-	private static final int DEFAULT_TRACK_SPACING = 5;
-	private static final int DEFAULT_FIRST_TRACK_SPACING = DEFAULT_TRACK_SPACING;
-	private static final int DEFAULT_MIN_BUFFER_SEPARATOR = 15;
-	private static final int DEFAULT_MIN_TOP_SPACING = 20;
-	private static final int CHORD_FRET_INDEX_SPACING = 8;
-	private static final int CHORD_STRING_SPACING = 4;
-	private static final int CHORD_FRET_SPACING = 5;
-	
-	private PrintStyles styles;
-	private PrintDocument document;
-	private int page;
-	
-	private Font songNameFont;
-	private Font trackNameFont;
-	private Font songAuthorFont;
-	
-	public PrinterViewLayout(Tablature tablature,PrintStyles styles, float scale){
-		super(tablature,( styles.getStyle() | DISPLAY_COMPACT ), scale );
-		this.styles = styles;
-	}
-	
-	protected void init( float scale ){
-		this.setBufferEnabled(false);
-		this.setFirstMeasureSpacing( getScaledValue(scale , DEFAULT_HORIZONTAL_SPACING ) );
-		this.setMinBufferSeparator( getScaledValue(scale ,  DEFAULT_MIN_BUFFER_SEPARATOR ) );
-		this.setMinTopSpacing( getScaledValue(scale ,  DEFAULT_MIN_TOP_SPACING ) );
-		this.setMinScoreTabSpacing( getScaledValue(scale ,  MIN_SCORE_TAB_SPACING ) );
-		this.setScoreLineSpacing( getScaledValue(scale ,  DEFAULT_SCORE_LINE_SPACING , 4) );
-		this.setScoreSpacing( (( getScoreLineSpacing() * 4) + getMinScoreTabSpacing() ) );
-		this.setFirstTrackSpacing( getScaledValue(scale ,  DEFAULT_FIRST_TRACK_SPACING ) );
-		this.setTrackSpacing( getScaledValue(scale ,  DEFAULT_TRACK_SPACING ) );
-		this.setStringSpacing( getScaledValue(scale ,  DEFAULT_STRING_SPACING  , 4) );
-		this.setChordFretIndexSpacing( getScaledValue(scale ,  CHORD_FRET_INDEX_SPACING, 2 ) );
-		this.setChordStringSpacing( getScaledValue(scale ,  CHORD_STRING_SPACING, 2 ) );
-		this.setChordFretSpacing( getScaledValue(scale ,  CHORD_FRET_SPACING , 2 ) );
-		this.setChordNoteSize(getScaledValue(scale ,  3 , 2 ));
-		this.setRepeatEndingSpacing( getScaledValue(scale ,  20 ) );
-		this.setTextSpacing( getScaledValue( scale, 15 ) );
-		this.setMarkerSpacing( getScaledValue( scale, 15 ) );
-		this.setDivisionTypeSpacing( getScaledValue( scale,  10 ) );
-		this.setEffectSpacing( getScaledValue(scale ,  8 ) );
-		this.setScale( checkScale() );
-		this.setFontScale( scale );
-		
-		// Initialize Tablature Defaults
-		this.getTablature().setViewLayout( this ) ;
-		this.getTablature().initDefaults();
-		
-		FontData[] fd = this.getResources().getPrinterDefaultFont().getFontData();
-		String fontName = (fd != null && fd.length > 0 ? fd[0].getName() : new String());
-		this.songNameFont = new Font(getTablature().getDisplay(),fontName,Math.round(16.0f * getFontScale()), SWT.BOLD | SWT.CENTER);
-		this.trackNameFont = new Font(getTablature().getDisplay(),fontName,Math.round(8.0f * getFontScale()), SWT.BOLD | SWT.CENTER);
-		this.songAuthorFont = new Font(getTablature().getDisplay(),fontName,Math.round(8.0f * getFontScale()), SWT.BOLD | SWT.CENTER);
-	}
-	
-	public int getMode(){
-		return 0;
-	}
-	
-	public void makeDocument(PrintDocument document){
-		this.page = 0;
-		this.document = document;
-		this.makeDocument();
-	}
-	
-	private void makeDocument(){
-		this.document.start();
-		
-		this.openPage();
-		paintHeader(this.document.getPainter());
-		paintSong(this.document.getPainter(),null,this.document.getBounds().x, ( this.document.getBounds().y + Math.round(80.0f * getFontScale() ) ) );
-		paintFooter(this.document.getPainter());
-		this.closePage();
-		
-		this.document.finish();
-	}
-	
-	public void paintSong(TGPainter painter,Rectangle clientArea,int fromX,int fromY) {
-		this.setWidth(0);
-		this.setHeight(0);
-		
-		int style = getStyle();
-		int posY = fromY + getFirstTrackSpacing();
-		int height = getFirstTrackSpacing();
-		int lineHeight = 0;
-		
-		TGTrackImpl track = (TGTrackImpl)getSongManager().getTrack(this.styles.getTrackNumber());
-		((TGLyricImpl)track.getLyrics()).start(getSkippedBeats(track));
-		
-		TGTrackSpacing ts = new TGTrackSpacing(this) ;
-		TempLine line = getTempLines(track,( this.styles.getFromMeasure() - 1 ),ts);
-		while(!line.measures.isEmpty()){
-			
-			ts.setSize(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES, ((style & DISPLAY_SCORE) != 0?( (getScoreLineSpacing() * 5) ):0));
-			if((style & DISPLAY_SCORE) != 0){
-				ts.setSize(TGTrackSpacing.POSITION_SCORE_UP_LINES, Math.abs(line.minY));
-				if(line.maxY + getMinScoreTabSpacing() > getScoreSpacing()){
-					ts.setSize(TGTrackSpacing.POSITION_SCORE_DOWN_LINES, (line.maxY - (getScoreLineSpacing() * 4)) );
-				}
-			}
-			if((style & DISPLAY_TABLATURE) != 0){
-				ts.setSize(TGTrackSpacing.POSITION_TABLATURE_TOP_SEPARATOR, ((style & DISPLAY_SCORE) != 0 ? getMinScoreTabSpacing() : Math.max(Math.abs(line.minY), getStringSpacing()) ));
-				ts.setSize(TGTrackSpacing.POSITION_TABLATURE, ((style & DISPLAY_SCORE) != 0 ?  track.getTabHeight() + getStringSpacing() + 1 : Math.max( line.maxY, track.getTabHeight() + getStringSpacing() + 1) ));
-			}
-			ts.setSize(TGTrackSpacing.POSITION_LYRIC,10);
-			checkDefaultSpacing(ts);
-			
-			lineHeight = ts.getSize();
-			//Verifico si entra en la pagina actual
-			if((posY + lineHeight + getTrackSpacing()) > (this.document.getBounds().y + getMaxHeight())){
-				this.paintFooter(painter);
-				this.closePage();
-				this.openPage();
-				posY = this.document.getBounds().y + getFirstTrackSpacing();
-			}
-			
-			//pinto la linea
-			paintLine(track,line,painter,fromX,posY,ts);
-			
-			posY += lineHeight + getTrackSpacing();
-			height += lineHeight + getTrackSpacing();
-			
-			ts = new TGTrackSpacing(this) ;
-			line = getTempLines(track,( line.lastIndex + 1 ),ts);
-		}
-		this.setHeight(height);
-	}
-	
-	public void paintHeader(TGPainter painter){
-		if(this.document.isPaintable(this.page) ){
-			int x = this.document.getBounds().x;
-			int y = this.document.getBounds().y;
-			String songName = getSongManager().getSong().getName();
-			String songAuthor = getSongManager().getSong().getAuthor();
-			String trackName = "(" + getSongManager().getTrack(this.styles.getTrackNumber()).getName() + ")";
-			
-			if(songName == null || songName.length() == 0){
-				songName = TuxGuitar.getProperty("print-header.default-song-name");
-			}
-			if(songAuthor == null || songAuthor.length() == 0){
-				songAuthor = TuxGuitar.getProperty("print-header.default-song-author");
-			}
-			painter.setFont(this.songNameFont);
-			painter.drawString(songName,(x + getCenter(painter,songName)),y);
-			painter.setFont(this.trackNameFont);
-			painter.drawString(trackName,(x + getCenter(painter,trackName)),(y + Math.round(30.0f * getFontScale())));
-			painter.setFont(this.songAuthorFont);
-			painter.drawString(songAuthor,(x + getRight(painter,songAuthor)),(y + Math.round(50.0f * getFontScale())));
-		}
-	}
-	
-	private void paintFooter(TGPainter painter){
-		if(this.document.isPaintable(this.page) ){
-			int x = this.document.getBounds().x;
-			int y = this.document.getBounds().y;
-			String pageNumber = Integer.toString(this.page);
-			
-			painter.setBackground(getResources().getColorWhite());
-			painter.setForeground(getResources().getColorBlack());
-			painter.drawString(pageNumber,(x + getRight(painter,pageNumber)),(y + getBottom(painter,pageNumber)));
-		}
-	}
-	
-	public void paintLine(TGTrackImpl track,TempLine line,TGPainter painter,int fromX, int fromY,TGTrackSpacing ts) {
-		if(this.document.isPaintable(this.page) ){
-			int posX = fromX;
-			int posY = fromY;
-			int width = 0;
-			
-			int measureSpacing = 0;
-			if(line.fullLine){
-				int diff = ( getMaxWidth() - line.tempWith);
-				if(diff != 0 && line.measures.size() > 0){
-					measureSpacing = diff / line.measures.size();
-				}
-			}
-			
-			for(int i = 0;i < line.measures.size();i ++){
-				int index = ((Integer)line.measures.get(i)).intValue();
-				TGMeasureImpl currMeasure = (TGMeasureImpl)track.getMeasure(index);
-				
-				//asigno la posicion dentro del compas
-				currMeasure.setPosX(posX);
-				currMeasure.setPosY(posY);
-				currMeasure.setTs(ts);
-				
-				((TGLyricImpl)track.getLyrics()).setCurrentMeasure(currMeasure);
-				
-				currMeasure.setFirstOfLine(i == 0);
-				
-				paintMeasure(currMeasure,painter,measureSpacing);
-				((TGLyricImpl)track.getLyrics()).paintCurrentNoteBeats(painter,this,currMeasure,posX, posY);
-				
-				int measureWidth = ( currMeasure.getWidth(this) + currMeasure.getSpacing() );
-				posX += measureWidth;
-				width += measureWidth;
-			}
-			this.setWidth(Math.max(getWidth(),width));
-		}
-	}
-	
-	private void openPage(){
-		this.page ++;
-		if(this.document.isPaintable(this.page)){
-			this.document.pageStart();
-		}
-	}
-	
-	private void closePage(){
-		if(this.document.isPaintable(this.page)){
-			this.document.pageFinish();
-		}
-	}
-	
-	private int getCenter(TGPainter painter,String text){
-		int textWidth = painter.getStringExtent(text).x;
-		return ((getMaxWidth() - textWidth) / 2);
-	}
-	
-	private int getRight(TGPainter painter,String text){
-		int textWidth = painter.getStringExtent(text).x;
-		return ((getMaxWidth() - textWidth));
-	}
-	
-	private int getBottom(TGPainter painter,String text){
-		int textHeight = painter.getStringExtent(text).y;
-		return ((getMaxHeight() - textHeight));
-	}
-	
-	private TempLine getTempLines(TGTrack track,int fromIndex,TGTrackSpacing ts) {
-		TempLine line = new TempLine();
-		int measureCount = track.countMeasures();
-		for (int measureIdx = fromIndex; measureIdx < measureCount; measureIdx++) {
-			TGMeasureImpl measure= (TGMeasureImpl) track.getMeasure(measureIdx);
-			if( measure.getNumber() >= this.styles.getFromMeasure() && measure.getNumber() <= this.styles.getToMeasure()){
-				
-				//verifico si tengo que bajar de linea
-				if((line.tempWith + measure.getWidth(this)) >=  getMaxWidth() && !line.measures.isEmpty()){
-					line.fullLine = true;
-					return line;
-				}
-				line.tempWith +=  measure.getWidth(this);
-				line.maxY = (measure.getMaxY() > line.maxY)?measure.getMaxY():line.maxY;
-				line.minY = (measure.getMinY() < line.minY)?measure.getMinY():line.minY;
-				
-				line.addMeasure(measureIdx);
-				measure.registerSpacing(this,ts);
-			}
-		}
-		
-		return line;
-	}
-	
-	private int getSkippedBeats(TGTrack track) {
-		int beats = 0;
-		
-		for (int i = 0; i < (this.styles.getFromMeasure() - 1); i++) {
-			TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure(i);
-			beats += measure.getNotEmptyBeats();
-		}
-		return beats;
-	}
-	
-	public boolean isCaretVisible(){
-		return false;
-	}
-	
-	public boolean isPlayModeEnabled(){
-		return false;
-	}
-	
-	public void setLineStyle(TGPainter painter){
-		painter.setLineWidth(1);
-		//painter.setForeground(getResources().getColorBlack());
-		painter.setForeground( getDarkColor( getResources().getLineColor() ) );
-	}
-	
-	public void setMeasureNumberStyle(TGPainter painter){
-		painter.setFont(getResources().getPrinterDefaultFont());
-		//painter.setBackground(getResources().getColorWhite());
-		//painter.setForeground(getResources().getColorBlack());
-		painter.setBackground(getResources().getColorWhite());
-		painter.setForeground(getDarkColor(getResources().getColorRed()));
-	}
-	
-	public void setDivisionsStyle(TGPainter painter, boolean fill){
-		painter.setFont(getResources().getPrinterDefaultFont());
-		painter.setBackground( (fill ? getResources().getColorBlack() :getResources().getColorWhite() ));
-		painter.setForeground(getResources().getColorBlack());
-	}
-	
-	public void setTempoStyle(TGPainter painter, boolean fontStyle){
-		painter.setFont(getResources().getPrinterDefaultFont());
-		painter.setForeground(getResources().getColorBlack());
-		painter.setBackground( ( fontStyle ? getResources().getColorWhite() : getResources().getColorBlack() ));
-	}
-	
-	public void setTripletFeelStyle(TGPainter painter, boolean fontStyle){
-		painter.setFont(getResources().getPrinterDefaultFont());
-		painter.setForeground(getResources().getColorBlack());
-		painter.setBackground( ( fontStyle ? getResources().getColorWhite() : getResources().getColorBlack() ));
-	}
-	
-	public void setTabNoteStyle(TGPainter painter,boolean playMode){
-		painter.setBackground( getResources().getColorWhite() );
-		painter.setForeground( getDarkColor(getResources().getTabNoteColor()) );
-		painter.setFont(getResources().getPrinterNoteFont());
-	}
-	
-	public void setTabNoteFooterStyle(TGPainter painter){
-		painter.setForeground( getDarkColor(getResources().getTabNoteColor()));
-		painter.setBackground( getDarkColor(getResources().getTabNoteColor()));
-	}
-	
-	public void setTabEffectStyle(TGPainter painter){
-		painter.setForeground( getDarkColor(getResources().getTabNoteColor()));
-		painter.setBackground( getDarkColor(getResources().getTabNoteColor()));
-	}
-	
-	public void setScoreNoteStyle(TGPainter painter,boolean playing){
-		painter.setBackground( getDarkColor(getResources().getScoreNoteColor()) );
-		painter.setForeground( getDarkColor(getResources().getScoreNoteColor()) );
-	}
-	
-	public void setScoreNoteFooterStyle(TGPainter painter){
-		painter.setForeground( getDarkColor(getResources().getScoreNoteColor()) );
-		painter.setBackground( getDarkColor(getResources().getScoreNoteColor()) );
-	}
-	
-	public void setScoreEffectStyle(TGPainter painter){
-		painter.setForeground( getDarkColor(getResources().getScoreNoteColor()) );
-		painter.setBackground( getDarkColor(getResources().getScoreNoteColor()) );
-	}
-	
-	public void setTimeSignatureStyle(TGPainter painter){
-		painter.setFont(getResources().getPrinterTimeSignatureFont());
-		painter.setBackground( getResources().getColorWhite() );
-		painter.setForeground( getResources().getColorBlack() );
-	}
-	
-	public void setTabGraceStyle(TGPainter painter){
-		painter.setFont(getResources().getPrinterGraceFont());
-		painter.setBackground( getResources().getColorWhite() );
-		painter.setForeground( getDarkColor(getResources().getTabNoteColor()) );
-	}
-	
-	public void setLyricStyle(TGPainter painter,boolean playMode){
-		painter.setFont(getResources().getPrinterLyricFont());
-		painter.setBackground( getResources().getColorWhite() );
-		painter.setForeground(getResources().getColorBlack());
-	}
-	
-	public void setMarkerStyle(TGPainter painter, Color color){
-		painter.setFont(getResources().getMarkerFont());
-		painter.setBackground(getResources().getColorWhite());
-		painter.setForeground(getDarkColor(color));
-	}
-	
-	public void setTextStyle(TGPainter painter){
-		painter.setFont(getResources().getPrinterTextFont());
-		painter.setBackground( getResources().getColorWhite() );
-		painter.setForeground( getResources().getColorBlack() );
-	}
-	
-	public void setOfflineEffectStyle(TGPainter painter){
-		painter.setFont(getResources().getPrinterDefaultFont());
-		painter.setBackground( getResources().getColorWhite() );
-		painter.setForeground( getResources().getColorBlack() );
-	}
-	
-	public void setDivisionTypeStyle(TGPainter painter){
-		painter.setFont(getResources().getPrinterDefaultFont());
-		painter.setBackground( getResources().getColorWhite() );
-		painter.setForeground( getResources().getColorBlack() );
-	}
-	
-	public void setRepeatEndingStyle(TGPainter painter){
-		painter.setFont(getResources().getPrinterDefaultFont());
-		painter.setBackground( getResources().getColorWhite() );
-		painter.setForeground( getResources().getColorBlack() );
-	}
-	
-	public void setChordStyle(TGChordImpl chord){
-		chord.setStyle(getStyle());
-		chord.setFont(getResources().getPrinterChordFont());
-		chord.setForegroundColor(getResources().getColorBlack());
-		chord.setBackgroundColor(getResources().getColorWhite());
-		chord.setColor(getDarkColor(getResources().getLineColor()));
-		chord.setNoteColor(getDarkColor(getResources().getTabNoteColor()));
-		chord.setTonicColor(getDarkColor(getResources().getTabNoteColor()));
-		chord.setFretSpacing(getChordFretSpacing());
-		chord.setStringSpacing(getChordStringSpacing());
-		chord.setNoteSize(getChordNoteSize());
-		chord.setFirstFretSpacing(getChordFretIndexSpacing());
-		chord.setFirstFretFont(getResources().getChordFretFont());
-	}
-	
-	public Color getDarkColor( Color color ) {
-		return ( this.styles.isBlackAndWhite() ? getResources().getColorBlack() : color );
-	}
-	
-	public int getMaxWidth(){
-		return (this.document.getBounds().width - this.document.getBounds().x - 10);
-	}
-	
-	public int getMaxHeight(){
-		return (this.document.getBounds().height - this.document.getBounds().y - 10);
-	}
-	
-	public boolean isFirstMeasure(TGMeasure measure){
-		return (measure.getNumber() == this.styles.getFromMeasure());
-	}
-	
-	public boolean isLastMeasure(TGMeasure measure){
-		return (measure.getNumber() == this.styles.getToMeasure());
-	}
-	
-	public boolean hasLoopMarker(TGMeasure measure){
-		return false;
-	}
-	
-	private int getScaledValue(float scale, int value){
-		return getScaledValue(scale, value,1);
-	}
-	
-	private int getScaledValue(float scale, int value, int minimum){
-		float scaledValue = ( value * scale );
-		return Math.max( Math.round( scaledValue ) , minimum );
-	}
-	
-	public void disposeLayout(){
-		super.disposeLayout();
-		this.songNameFont.dispose();
-		this.trackNameFont.dispose();
-		this.songAuthorFont.dispose();
-	}
-	
-	private class TempLine{
-		protected int tempWith;
-		protected int lastIndex;
-		protected boolean fullLine;
-		protected int maxY = 0;
-		protected int minY = 50;
-		protected List measures;
-		
-		public TempLine(){
-			this.measures = new ArrayList();
-		}
-		
-		protected void addMeasure(int index){
-			this.measures.add(new Integer(index));
-			this.lastIndex = index;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/ViewLayout.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/ViewLayout.java
deleted file mode 100644
index 1d2918d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/layout/ViewLayout.java
+++ /dev/null
@@ -1,872 +0,0 @@
-/*
- * Created on 04-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.editors.tab.layout;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGBeatImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGChordImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGLyricImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureHeaderImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGResources;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackSpacing;
-import org.herac.tuxguitar.gui.editors.tab.TGVoiceImpl;
-import org.herac.tuxguitar.gui.editors.tab.Tablature;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.player.base.MidiPlayerMode;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGVoice;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public abstract class ViewLayout {
-	public static final int MODE_PAGE = 1;
-	public static final int MODE_LINEAR = 2;
-	public static final int DEFAULT_MODE = MODE_LINEAR;
-	
-	public static final int DISPLAY_COMPACT = 0x01;
-	public static final int DISPLAY_MULTITRACK = 0x02;
-	public static final int DISPLAY_SCORE = 0x04;
-	public static final int DISPLAY_TABLATURE = 0x08;
-	public static final int DISPLAY_CHORD_NAME = 0x10;
-	public static final int DISPLAY_CHORD_DIAGRAM = 0x20;
-	
-	private Tablature tablature;
-	private float scale;
-	private float fontScale;
-	private int style;
-	private int width;
-	private int height;
-	private int minBufferSeparator;
-	private int minTopSpacing;
-	private int minScoreTabSpacing;
-	private int stringSpacing;
-	private int scoreLineSpacing;
-	private int scoreSpacing;
-	private int trackSpacing;
-	private int firstTrackSpacing;
-	private int firstMeasureSpacing;
-	private int chordFretIndexSpacing;
-	private int chordStringSpacing;
-	private int chordFretSpacing;
-	private int chordNoteSize;
-	private int repeatEndingSpacing;
-	private int effectSpacing;
-	private int divisionTypeSpacing;
-	private int textSpacing;
-	private int markerSpacing;
-	private int loopMarkerSpacing;
-	private boolean bufferEnabled;
-	private boolean playModeEnabled;
-	
-	private List trackPositions;
-	
-	private TGResources resources;
-	
-	public ViewLayout(Tablature tablature,int style){
-		this(tablature, style, 1.0f );
-	}
-	
-	public ViewLayout(Tablature tablature,int style, float scale){
-		this.tablature = tablature;
-		this.trackPositions = new ArrayList();
-		this.playModeEnabled = false;
-		this.resources = new TGResources(this);
-		this.style = style;
-		if((this.style & DISPLAY_TABLATURE) == 0 && (this.style & DISPLAY_SCORE) == 0 ){
-			this.style |= DISPLAY_TABLATURE;
-		}
-		this.init( scale );
-	}
-	
-	protected void init( float initScale ){
-		TGConfigManager config =  TuxGuitar.instance().getConfig();
-		this.setBufferEnabled(true);
-		this.setStringSpacing( (int)(config.getIntConfigValue(TGConfigKeys.TAB_LINE_SPACING) * initScale ) );
-		this.setScoreLineSpacing( (int)(config.getIntConfigValue(TGConfigKeys.SCORE_LINE_SPACING) * initScale ) );
-		this.setScale( checkScale() );
-		this.setFontScale( getScale() );
-		this.setFirstMeasureSpacing( Math.round( 20f * getScale() ) );
-		this.setMinBufferSeparator( Math.round( 20f * getScale() ) );
-		this.setMinTopSpacing( Math.round( 30f * getScale() ) );
-		this.setMinScoreTabSpacing( Math.round( config.getIntConfigValue(TGConfigKeys.MIN_SCORE_TABLATURE_SPACING) * getScale() ) );
-		this.setScoreSpacing( (( getScoreLineSpacing() * 4) + getMinScoreTabSpacing() ) );
-		this.setFirstTrackSpacing( Math.round(config.getIntConfigValue(TGConfigKeys.FIRST_TRACK_SPACING) * getScale() ) );
-		this.setTrackSpacing( Math.round(config.getIntConfigValue(TGConfigKeys.TRACK_SPACING) * getScale() ) );
-		
-		this.setChordFretIndexSpacing( Math.round( 8f * getScale() ) );
-		this.setChordStringSpacing( Math.round( 5f * getScale() ) );
-		this.setChordFretSpacing( Math.round( 6f * getScale() ) );
-		this.setChordNoteSize( Math.round( 4f * getScale() ) );
-		this.setRepeatEndingSpacing( Math.round( 20f * getScale() ) );
-		this.setTextSpacing( Math.round( 15f * getScale() ) );
-		this.setMarkerSpacing( Math.round( 15f * getScale() ) );
-		this.setLoopMarkerSpacing( Math.round( 5f * getScale() ) );
-		this.setDivisionTypeSpacing( Math.round( 10f * getScale() ) );
-		this.setEffectSpacing( Math.round( 8f * getScale() ) );
-	}
-	
-	public abstract void paintSong(TGPainter painter,Rectangle clientArea,int fromX,int fromY);
-	
-	public abstract int getMode();
-	
-	public void paint(TGPainter painter,Rectangle clientArea,int fromX,int fromY){
-		this.playModeEnabled = false;
-		paintSong(painter,clientArea,fromX,fromY);
-	}
-	
-	public void paintMeasure(TGMeasureImpl measure,TGPainter painter,int spacing) {
-		measure.setSpacing(spacing);
-		measure.paintMeasure(this,painter);
-	}
-	
-	public void updateSong(){
-		updateTracks();
-		updateCaret();
-	}
-	
-	public void updateTracks() {
-		int trackCount = getSongManager().getSong().countTracks();
-		int measureCount = getSongManager().getSong().countMeasureHeaders();
-		for (int measureIdx = 0; measureIdx < measureCount; measureIdx++) {
-			TGMeasureHeaderImpl header = (TGMeasureHeaderImpl)getSongManager().getSong().getMeasureHeader(measureIdx);
-			header.update(this, measureIdx);
-			for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
-				TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx);
-				TGMeasureImpl measure = (TGMeasureImpl) track.getMeasure(measureIdx);
-				measure.create(this);
-			}
-			for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
-				TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx);
-				TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure(measureIdx);
-				track.update(this);
-				measure.update(this);
-			}
-		}
-	}
-	
-	private void updateCaret(){
-		this.tablature.getCaret().update();
-	}
-	
-	public void fireUpdate(int measureNumber){
-		int measureIndex = (measureNumber - 1);
-		int trackCount = getSongManager().getSong().countTracks();
-		TGMeasureHeaderImpl header = (TGMeasureHeaderImpl)getSongManager().getSong().getMeasureHeader(measureIndex);
-		header.update(this, measureIndex);
-		for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
-			TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx);
-			TGMeasureImpl measure = null;
-			measure =  (TGMeasureImpl) track.getMeasure(measureIndex);
-			measure.create(this);
-		}
-		for (int trackIdx = 0; trackIdx < trackCount; trackIdx++) {
-			TGTrackImpl track = (TGTrackImpl)getSongManager().getSong().getTrack(trackIdx);
-			TGMeasureImpl measure =  (TGMeasureImpl) track.getMeasure(measureIndex);
-			measure.update(this);
-		}
-		updateCaret();
-	}
-	
-	public void reloadStyles(){
-		this.getResources().load();
-	}
-	
-	/**
-	 * Pinta las lineas
-	 */
-	public void paintLines(TGTrackImpl track,TGTrackSpacing ts,TGPainter painter,int x,int y,int width) {
-		if(width > 0){
-			setLineStyle(painter);
-			int tempX = ((x < 0)?0:x);
-			int tempY = y;
-			
-			//partitura
-			if( (this.style & DISPLAY_SCORE) != 0 ){
-				int posY = tempY + ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
-				
-				painter.initPath();
-				painter.setAntialias(false);
-				for(int i = 1;i <= 5;i ++){
-					painter.moveTo(tempX, posY);
-					painter.lineTo(tempX + width,posY);
-					posY += getScoreLineSpacing();
-				}
-				painter.closePath();
-			}
-			//tablatura
-			if((this.style & DISPLAY_TABLATURE) != 0){
-				tempY += ts.getPosition(TGTrackSpacing.POSITION_TABLATURE);
-				
-				painter.initPath();
-				painter.setAntialias(false);
-				for(int i = 0; i < track.stringCount();i++){
-					painter.moveTo(tempX,tempY);
-					painter.lineTo(tempX + width,tempY);
-					tempY += getStringSpacing();
-				}
-				painter.closePath();
-			}
-		}
-	}
-	
-	/**
-	 * Pinta el caret
-	 */
-	public void paintCaret(TGPainter painter) {
-		if(isCaretVisible() && ((this.style & (DISPLAY_TABLATURE | DISPLAY_SCORE) ) != 0 )){
-			Caret caret = getTablature().getCaret();
-			if(!caret.getMeasure().isOutOfBounds()){
-				caret.paintCaret(this,painter);
-			}
-		}
-	}
-	
-	/**
-	 * Pinta el compas y las notas que estan sonando
-	 */
-	public void paintPlayMode(TGPainter painter,TGMeasureImpl measure,TGBeatImpl beat,boolean paintMeasure){
-		this.playModeEnabled = true;
-		
-		//pinto el compas
-		if(paintMeasure){
-			measure.paintMeasure(this,painter);
-		}
-		//pinto el pulso
-		beat.paint(this,painter,measure.getPosX()  + measure.getHeaderImpl().getLeftSpacing(this), measure.getPosY());
-		
-		//pinto los lyrics
-		((TGLyricImpl)measure.getTrackImpl().getLyrics()).paintCurrentNoteBeats(painter,this,measure,measure.getPosX(), measure.getPosY());
-		
-		this.playModeEnabled = false;
-	}
-	
-	protected float checkScale(){
-		float v1 = ((this.style & DISPLAY_SCORE) != 0 ? (getScoreLineSpacing() * 1.25f ) : 0 );
-		float v2 = ((this.style & DISPLAY_TABLATURE) != 0 ? getStringSpacing() : 0 );
-		float scale = (Math.max(v1,v2) / 10.0f);
-		return scale;
-	}
-	
-	protected void checkDefaultSpacing(TGTrackSpacing ts){
-		int checkPosition = -1;
-		int minBufferSeparator = getMinBufferSeparator();
-		if( (this.style & DISPLAY_SCORE) != 0 ){
-			int bufferSeparator = (ts.getPosition(TGTrackSpacing.POSITION_SCORE_UP_LINES) - ts.getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR));
-			if(bufferSeparator < minBufferSeparator ) {
-				ts.setSize(TGTrackSpacing.POSITION_BUFFER_SEPARATOR,minBufferSeparator - bufferSeparator);
-			}
-			checkPosition = ts.getPosition(TGTrackSpacing.POSITION_SCORE_MIDDLE_LINES);
-		}
-		else if((this.style & DISPLAY_TABLATURE) != 0){
-			int bufferSeparator = (ts.getPosition(TGTrackSpacing.POSITION_TABLATURE) - ts.getPosition(TGTrackSpacing.POSITION_BUFFER_SEPARATOR));
-			if(bufferSeparator < minBufferSeparator ) {
-				ts.setSize(TGTrackSpacing.POSITION_BUFFER_SEPARATOR,minBufferSeparator - bufferSeparator);
-			}
-			checkPosition = ts.getPosition(TGTrackSpacing.POSITION_TABLATURE);
-		}
-		
-		if(checkPosition >= 0 && checkPosition < getMinTopSpacing()){
-			ts.setSize(TGTrackSpacing.POSITION_TOP, (getMinTopSpacing() - checkPosition));
-		}
-	}
-	
-	/**
-	 * Calcula el espacio minimo entre negras, dependiendo de la duracion de la nota 
-	 */
-	public int getSpacingForQuarter(TGDuration duration){
-		double spacing = (((double)TGDuration.QUARTER_TIME / (double)duration.getTime()) * getMinSpacing(duration));
-		return  (int)spacing;
-	}
-	
-	/**
-	 * Calcula el Espacio minimo que quedara entre nota y nota
-	 */
-	protected float getMinSpacing(TGDuration duration){
-		float scale = getScale();
-		switch(duration.getValue()){
-			case TGDuration.WHOLE:
-				return (50.0f * scale);
-			case TGDuration.HALF:
-				return (30.0f * scale);
-			case TGDuration.QUARTER:
-				return (25.0f * scale);
-			case TGDuration.EIGHTH:
-				return (20.0f * scale);
-			default:
-				return (18.0f * scale);
-		}
-	}
-	
-	/**
-	 * Calcula el Espacio que ocupara el pulso
-	 */
-	public float getBeatWidth(TGVoice voice){
-		float scale = getScale();
-		TGDuration duration = voice.getDuration();
-		if(duration != null){
-			switch(duration.getValue()){
-				case TGDuration.WHOLE:
-					return (30.0f * scale);
-				case TGDuration.HALF:
-					return (25.0f * scale);
-				case TGDuration.QUARTER:
-					return (21.0f * scale);
-				case TGDuration.EIGHTH:
-					return (20.0f * scale);
-				case TGDuration.SIXTEENTH:
-					return (19.0f * scale);
-				case TGDuration.THIRTY_SECOND:
-					return (18.0f * scale);
-				default:
-					return (17.0f * scale);
-			}
-		}
-		return (20.0f * scale);
-	}
-	
-	/**
-	 * Calcula el Espacio que ocupara el pulso
-	 */
-	public float getVoiceWidth(TGVoiceImpl voice){
-		float scale = getScale();
-		TGDuration duration = voice.getDuration();
-		if(duration != null){
-			switch(duration.getValue()){
-				case TGDuration.WHOLE:
-					return (30.0f * scale);
-				case TGDuration.HALF:
-					return (25.0f * scale);
-				case TGDuration.QUARTER:
-					return (21.0f * scale);
-				case TGDuration.EIGHTH:
-					return (20.0f * scale);
-				case TGDuration.SIXTEENTH:
-					return (19.0f * scale);
-				case TGDuration.THIRTY_SECOND:
-					return (18.0f * scale);
-				default:
-					return (17.0f * scale);
-			}
-		}
-		return (20.0f * scale);
-	}
-	
-	public boolean isCaretVisible(){
-		return true;
-	}
-	
-	public boolean isPlayModeEnabled(){
-		return this.playModeEnabled;
-	}
-	
-	public void setMeasureNumberStyle(TGPainter painter){
-		painter.setFont(getResources().getDefaultFont());
-		painter.setBackground(getResources().getBackgroundColor());
-		painter.setForeground(getResources().getColorRed());
-	}
-	
-	public void setDivisionsStyle(TGPainter painter, boolean fill){
-		painter.setFont(getResources().getDefaultFont());
-		painter.setBackground( (fill ? getResources().getColorBlack() :getResources().getBackgroundColor() ));
-		painter.setForeground(getResources().getColorBlack());
-	}
-	
-	public void setTempoStyle(TGPainter painter, boolean fontStyle){
-		painter.setFont(getResources().getDefaultFont());
-		painter.setForeground(getResources().getColorBlack());
-		painter.setBackground( ( fontStyle ? getResources().getBackgroundColor() : getResources().getColorBlack() ));
-	}
-	
-	public void setTripletFeelStyle(TGPainter painter, boolean fontStyle){
-		painter.setFont(getResources().getDefaultFont());
-		painter.setForeground(getResources().getColorBlack());
-		painter.setBackground( ( fontStyle ? getResources().getBackgroundColor() : getResources().getColorBlack() ));
-	}
-	
-	public void setMeasurePlayingStyle(TGPainter painter){
-		painter.setBackground(getResources().getBackgroundColor());
-		painter.setForeground(getResources().getColorBlack());
-	}
-	
-	public void setLyricStyle(TGPainter painter,boolean playMode){
-		painter.setFont(getResources().getLyricFont());
-		painter.setBackground(getResources().getBackgroundColor());
-		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getColorBlack()) );
-	}
-	
-	public void setMarkerStyle(TGPainter painter, Color color){
-		painter.setFont(getResources().getMarkerFont());
-		painter.setBackground(getResources().getBackgroundColor());
-		painter.setForeground(color);
-	}
-	
-	public void setTextStyle(TGPainter painter){
-		painter.setFont(getResources().getTextFont());
-		painter.setBackground(getResources().getBackgroundColor());
-		painter.setForeground(getResources().getColorBlack());
-	}
-	
-	public void setTimeSignatureStyle(TGPainter painter){
-		painter.setFont(getResources().getTimeSignatureFont());
-		painter.setForeground(getResources().getColorBlack());
-		painter.setBackground(getResources().getBackgroundColor());
-	}
-	
-	public void setKeySignatureStyle(TGPainter painter){
-		painter.setBackground(getResources().getColorBlack());
-	}
-	
-	public void setClefStyle(TGPainter painter){
-		painter.setBackground(getResources().getColorBlack());
-	}
-	
-	public void setLineStyle(TGPainter painter){
-		painter.setLineWidth(1);
-		painter.setForeground(getResources().getLineColor());
-	}
-	
-	public void setCaretStyle(TGPainter painter, boolean expectedVoice){
-		painter.setForeground( expectedVoice ? getResources().getCaretColor1() : getResources().getCaretColor2() );
-	}
-	
-	public void setScoreSilenceStyle(TGPainter painter,boolean playMode){
-		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
-		painter.setBackground( (playMode ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
-	}
-	
-	public void setTabSilenceStyle(TGPainter painter,boolean playMode){
-		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() ));
-		painter.setBackground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() ));
-	}
-	
-	public void setScoreNoteStyle(TGPainter painter,boolean playing){
-		painter.setForeground( (playing ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
-		painter.setBackground( (playing ? getResources().getPlayNoteColor() : getResources().getScoreNoteColor() ));
-	}
-	
-	public void setScoreNoteFooterStyle(TGPainter painter){
-		painter.setForeground( getResources().getScoreNoteColor());
-		painter.setBackground( getResources().getScoreNoteColor());
-	}
-	
-	public void setScoreEffectStyle(TGPainter painter){
-		painter.setForeground( getResources().getScoreNoteColor());
-		painter.setBackground( getResources().getScoreNoteColor());
-	}
-	
-	public void setTabNoteStyle(TGPainter painter,boolean playMode){
-		painter.setForeground( (playMode ? getResources().getPlayNoteColor() : getResources().getTabNoteColor() ));
-		painter.setBackground( getResources().getBackgroundColor() );
-		painter.setFont(getResources().getNoteFont());
-	}
-	
-	public void setTabNoteFooterStyle(TGPainter painter){
-		painter.setForeground( getResources().getTabNoteColor());
-		painter.setBackground( getResources().getTabNoteColor());
-	}
-	
-	public void setTabEffectStyle(TGPainter painter){
-		painter.setForeground( getResources().getTabNoteColor());
-		painter.setBackground( getResources().getTabNoteColor());
-	}
-	
-	public void setTabGraceStyle(TGPainter painter){
-		painter.setFont(getResources().getGraceFont());
-		painter.setForeground(getResources().getTabNoteColor());
-		painter.setBackground(getResources().getBackgroundColor());
-	}
-	
-	public void setPlayNoteColor(TGPainter painter){
-		painter.setForeground(getResources().getPlayNoteColor());
-		painter.setBackground(getResources().getPlayNoteColor());
-	}
-	
-	public void setOfflineEffectStyle(TGPainter painter){
-		painter.setForeground(getResources().getColorBlack());
-		painter.setBackground(getResources().getBackgroundColor());
-		painter.setFont(getResources().getDefaultFont());
-	}
-	
-	public void setDotStyle(TGPainter painter){
-		painter.setForeground(getResources().getColorBlack());
-		painter.setBackground(getResources().getColorBlack());
-	}
-	
-	public void setDivisionTypeStyle(TGPainter painter){
-		painter.setForeground(getResources().getColorBlack());
-		painter.setBackground(getResources().getBackgroundColor());
-		painter.setFont(getResources().getDefaultFont());
-	}
-	
-	public void setRepeatEndingStyle(TGPainter painter){
-		painter.setForeground(getResources().getColorBlack());
-		painter.setBackground(getResources().getBackgroundColor());
-		painter.setFont(getResources().getDefaultFont());
-	}
-	
-	public void setChordStyle(TGChordImpl chord){
-		chord.setFont(getResources().getChordFont());
-		chord.setForegroundColor(getResources().getColorBlack());
-		chord.setBackgroundColor(getResources().getBackgroundColor());
-		chord.setColor(getResources().getLineColor());
-		chord.setNoteColor(getResources().getTabNoteColor());
-		chord.setTonicColor(getResources().getTabNoteColor());
-		chord.setStyle(this.style);
-		chord.setFretSpacing(getChordFretSpacing());
-		chord.setStringSpacing(getChordStringSpacing());
-		chord.setNoteSize(getChordNoteSize());
-		chord.setFirstFretSpacing(getChordFretIndexSpacing());
-		chord.setFirstFretFont(getResources().getChordFretFont());
-	}
-	
-	public void setLoopSMarkerStyle(TGPainter painter){
-		painter.setBackground(getResources().getLoopSMarkerColor());
-	}
-	
-	public void setLoopEMarkerStyle(TGPainter painter){
-		painter.setBackground(getResources().getLoopEMarkerColor());
-	}
-	
-	public Rectangle getNoteOrientation(TGPainter painter,int x,int y,TGNote note){
-		String noteAsString = null;
-		if (note.isTiedNote()){
-			noteAsString = "L";
-			noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString;
-		}else if(note.getEffect().isDeadNote()){
-			noteAsString = "X";
-			noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString;
-		}else{
-			noteAsString = Integer.toString(note.getValue());
-			noteAsString = (note.getEffect().isGhostNote())?"(" + noteAsString + ")":noteAsString;
-		}
-		return getOrientation(painter,x,y,noteAsString);
-	}
-	
-	public Rectangle getOrientation(TGPainter painter,int x,int y,String s){
-		Point point = painter.getStringExtent(s);
-		return new Rectangle((x - (point.x / 2)),(y - (point.y / 2)),point.x, point.y );
-	}
-	
-	public TGSongManager getSongManager() {
-		return getTablature().getSongManager();
-	}
-	
-	public Tablature getTablature() {
-		return this.tablature;
-	}
-	
-	public void setTablature(Tablature tablature) {
-		this.tablature = tablature;
-	}
-	
-	public TGResources getResources(){
-		return this.resources;
-	}
-	
-	public int getHeight() {
-		return this.height;
-	}
-	
-	public void setHeight(int height) {
-		this.height = height;
-	}
-	
-	public int getWidth() {
-		return this.width;
-	}
-	
-	public void setWidth(int width) {
-		this.width = width;
-	}
-	
-	public int getStyle(){
-		return this.style;
-	}
-	
-	public void setStyle(int style){
-		this.style = style;
-	}
-	
-	public float getScale() {
-		return this.scale;
-	}
-	
-	public void setScale(float scale) {
-		this.scale = scale;
-	}
-	
-	public float getFontScale() {
-		return this.fontScale;
-	}
-	
-	public void setFontScale(float fontScale) {
-		this.fontScale = fontScale;
-	}
-	
-	public boolean isBufferEnabled() {
-		return this.bufferEnabled;
-	}
-	
-	public void setBufferEnabled(boolean bufferEnabled) {
-		this.bufferEnabled = bufferEnabled;
-	}
-	
-	public int getFirstMeasureSpacing() {
-		return this.firstMeasureSpacing;
-	}
-	
-	public void setFirstMeasureSpacing(int firstMeasureSpacing) {
-		this.firstMeasureSpacing = firstMeasureSpacing;
-	}
-	
-	public int getMinBufferSeparator() {
-		return this.minBufferSeparator;
-	}
-	
-	public void setMinBufferSeparator(int minBufferSeparator) {
-		this.minBufferSeparator = minBufferSeparator;
-	}
-	
-	public int getMinTopSpacing() {
-		return this.minTopSpacing;
-	}
-	
-	public void setMinTopSpacing(int minTopSpacing) {
-		this.minTopSpacing = minTopSpacing;
-	}
-	
-	public int getMinScoreTabSpacing() {
-		return this.minScoreTabSpacing;
-	}
-	
-	public void setMinScoreTabSpacing(int minScoreTabSpacing) {
-		this.minScoreTabSpacing = minScoreTabSpacing;
-	}
-	
-	public int getScoreLineSpacing() {
-		return this.scoreLineSpacing;
-	}
-	
-	public void setScoreLineSpacing(int scoreLineSpacing) {
-		this.scoreLineSpacing = scoreLineSpacing;
-	}
-	
-	public int getScoreSpacing() {
-		return this.scoreSpacing;
-	}
-	
-	public void setScoreSpacing(int scoreSpacing) {
-		this.scoreSpacing = scoreSpacing;
-	}
-	
-	public int getFirstTrackSpacing() {
-		return this.firstTrackSpacing;
-	}
-	
-	public void setFirstTrackSpacing(int firstTrackSpacing) {
-		this.firstTrackSpacing = firstTrackSpacing;
-	}
-	
-	public int getTrackSpacing() {
-		return this.trackSpacing;
-	}
-	
-	public void setTrackSpacing(int trackSpacing) {
-		this.trackSpacing = trackSpacing;
-	}
-	
-	public int getStringSpacing() {
-		return this.stringSpacing;
-	}
-	
-	public void setStringSpacing(int stringSpacing) {
-		this.stringSpacing = stringSpacing;
-	}
-	
-	public int getChordFretIndexSpacing() {
-		return this.chordFretIndexSpacing;
-	}
-	
-	public void setChordFretIndexSpacing(int chordFretIndexSpacing) {
-		this.chordFretIndexSpacing = chordFretIndexSpacing;
-	}
-	
-	public int getChordStringSpacing() {
-		return this.chordStringSpacing;
-	}
-	
-	public void setChordStringSpacing(int chordStringSpacing) {
-		this.chordStringSpacing = chordStringSpacing;
-	}
-	
-	public int getChordFretSpacing() {
-		return this.chordFretSpacing;
-	}
-	
-	public void setChordFretSpacing(int chordFretSpacing) {
-		this.chordFretSpacing = chordFretSpacing;
-	}
-	
-	public int getChordNoteSize() {
-		return this.chordNoteSize;
-	}
-	
-	public void setChordNoteSize(int chordNoteSize) {
-		this.chordNoteSize = chordNoteSize;
-	}
-	
-	public int getRepeatEndingSpacing() {
-		return this.repeatEndingSpacing;
-	}
-	
-	public void setRepeatEndingSpacing(int repeatEndingSpacing) {
-		this.repeatEndingSpacing = repeatEndingSpacing;
-	}
-	
-	public int getDivisionTypeSpacing() {
-		return this.divisionTypeSpacing;
-	}
-	
-	public void setDivisionTypeSpacing(int divisionTypeSpacing) {
-		this.divisionTypeSpacing = divisionTypeSpacing;
-	}
-	
-	public int getTextSpacing() {
-		return this.textSpacing;
-	}
-	
-	public void setTextSpacing(int textSpacing) {
-		this.textSpacing = textSpacing;
-	}
-	
-	public int getMarkerSpacing() {
-		return this.markerSpacing;
-	}
-	
-	public void setMarkerSpacing(int markerSpacing) {
-		this.markerSpacing = markerSpacing;
-	}
-	
-	public int getLoopMarkerSpacing() {
-		return this.loopMarkerSpacing;
-	}
-	
-	public void setLoopMarkerSpacing(int loopMarkerSpacing) {
-		this.loopMarkerSpacing = loopMarkerSpacing;
-	}
-	
-	public int getEffectSpacing() {
-		return this.effectSpacing;
-	}
-	
-	public void setEffectSpacing(int effectSpacing) {
-		this.effectSpacing = effectSpacing;
-	}
-	
-	public int getDefaultChordSpacing(){
-		int spacing = 0;
-		if( (this.style & DISPLAY_CHORD_DIAGRAM) != 0 ){
-			spacing += ( (TGChordImpl.MAX_FRETS * getChordFretSpacing()) + getChordFretSpacing());
-		}
-		if( (this.style & DISPLAY_CHORD_NAME) != 0 ){
-			spacing += Math.round( (15f * getScale()) );
-		}
-		return spacing;
-	}
-	
-	public boolean isFirstMeasure(TGMeasure measure){
-		return (measure.getNumber() == 1);
-	}
-	
-	public boolean isLastMeasure(TGMeasure measure){
-		return (measure.getNumber() == getSongManager().getSong().countMeasureHeaders());
-	}
-	
-	public boolean hasLoopMarker(TGMeasure measure){
-		MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
-		if( pm.isLoop() && ( pm.getLoopSHeader() == measure.getNumber() || pm.getLoopEHeader() == measure.getNumber() ) ){
-			return true;
-		}
-		return false;
-	}
-	
-	protected void clearTrackPositions(){
-		this.trackPositions.clear();
-	}
-	
-	protected void addTrackPosition(int track,int posY,int height){
-		this.trackPositions.add(new TrackPosition(track,posY,height));
-	}
-	
-	public int getTrackNumberAt(int y){
-		TrackPosition trackPos = getTrackPositionAt(y);
-		return ((trackPos != null)?trackPos.getTrack():-1);
-	}
-	
-	public TrackPosition getTrackPositionAt(int y){
-		TrackPosition trackPos = null;
-		int minorDistance = 0;
-		
-		Iterator it = this.trackPositions.iterator();
-		while(it.hasNext()){
-			TrackPosition pos = (TrackPosition)it.next();
-			int distanceY = Math.min(Math.abs(y - (pos.getPosY())), Math.abs(y - (pos.getPosY() + pos.getHeight() - 10)));
-			if(trackPos == null || distanceY < minorDistance){
-				trackPos = pos;
-				minorDistance = distanceY;
-			}
-		}
-		return trackPos;
-	}
-	
-	public void disposeLayout(){
-		this.getResources().dispose();
-	}
-	
-	public class TrackPosition{
-		private int track;
-		private int posY;
-		private int height;
-		
-		public TrackPosition(int track,int posY,int height){
-			this.track = track;
-			this.posY = posY;
-			this.height = height;
-		}
-		
-		public int getPosY() {
-			return this.posY;
-		}
-		
-		public int getHeight() {
-			return this.height;
-		}
-		
-		public int getTrack() {
-			return this.track;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGClefPainter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGClefPainter.java
deleted file mode 100644
index 7f7279a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGClefPainter.java
+++ /dev/null
@@ -1,345 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab.painters;
-
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-public class TGClefPainter {
-	
-	public static void paintTreble(TGPainter painter, int x, int y,float scale){
-		painter.moveTo((x + (0.9706216f * scale)),(y + (-0.9855771f * scale)));
-		painter.cubicTo((x + (0.99023926f * scale)),(y + (-0.99538594f * scale)),(x + (0.99350905f * scale)),(y + (-0.99538594f * scale)),(x + (1.0131269f * scale)),(y + (-0.99538594f * scale)));
-		painter.cubicTo((x + (1.0392835f * scale)),(y + (-0.99211615f * scale)),(x + (1.055632f * scale)),(y + (-0.9823073f * scale)),(x + (1.0915977f * scale)),(y + (-0.9430719f * scale)));
-		painter.cubicTo((x + (1.3270102f * scale)),(y + (-0.7011198f * scale)),(x + (1.5231876f * scale)),(y + (-0.26953024f * scale)),(x + (1.572232f * scale)),(y + (0.09666765f * scale)));
-		painter.cubicTo((x + (1.578771f * scale)),(y + (0.1555208f * scale)),(x + (1.578771f * scale)),(y + (0.29284477f * scale)),(x + (1.572232f * scale)),(y + (0.35496712f * scale)));
-		painter.cubicTo((x + (1.5362663f * scale)),(y + (0.6917379f * scale)),(x + (1.3956721f * scale)),(y + (0.9990827f * scale)),(x + (1.0719799f * scale)),(y + (1.4404812f * scale)));
-		painter.lineTo((x + (1.0262054f * scale)),(y + (1.502604f * scale)));
-		painter.lineTo((x + (1.0523622f * scale)),(y + (1.577805f * scale)));
-		painter.cubicTo((x + (1.1144851f * scale)),(y + (1.7576342f * scale)),(x + (1.1864164f * scale)),(y + (1.9766989f * scale)),(x + (1.2321913f * scale)),(y + (2.1369102f * scale)));
-		painter.cubicTo((x + (1.24527f * scale)),(y + (2.1761456f * scale)),(x + (1.2550789f * scale)),(y + (2.208842f * scale)),(x + (1.2550789f * scale)),(y + (2.212112f * scale)));
-		painter.cubicTo((x + (1.2550789f * scale)),(y + (2.212112f * scale)),(x + (1.2779659f * scale)),(y + (2.212112f * scale)),(x + (1.3008534f * scale)),(y + (2.2153816f * scale)));
-		painter.cubicTo((x + (1.4152898f * scale)),(y + (2.22519f * scale)),(x + (1.5133789f * scale)),(y + (2.2513473f * scale)),(x + (1.6147372f * scale)),(y + (2.3003914f * scale)));
-		painter.cubicTo((x + (1.6964773f * scale)),(y + (2.3428962f * scale)),(x + (1.7684091f * scale)),(y + (2.3919404f * scale)),(x + (1.8370711f * scale)),(y + (2.457333f * scale)));
-		painter.cubicTo((x + (1.9122725f * scale)),(y + (2.5325344f * scale)),(x + (1.9613168f * scale)),(y + (2.601196f * scale)),(x + (2.0070913f * scale)),(y + (2.6960156f * scale)));
-		painter.cubicTo((x + (2.0757532f * scale)),(y + (2.8333395f * scale)),(x + (2.10518f * scale)),(y + (2.9772024f * scale)),(x + (2.10191f * scale)),(y + (3.121066f * scale)));
-		painter.cubicTo((x + (2.0986407f * scale)),(y + (3.2126155f * scale)),(x + (2.085562f * scale)),(y + (3.2812777f * scale)),(x + (2.0561357f * scale)),(y + (3.3662882f * scale)));
-		painter.cubicTo((x + (2.0169f * scale)),(y + (3.4905329f * scale)),(x + (1.9449685f * scale)),(y + (3.60497f * scale)),(x + (1.8468798f * scale)),(y + (3.7030587f * scale)));
-		painter.cubicTo((x + (1.7618695f * scale)),(y + (3.7880688f * scale)),(x + (1.6833986f * scale)),(y + (3.8403826f * scale)),(x + (1.578771f * scale)),(y + (3.8828878f * scale)));
-		painter.lineTo((x + (1.5395356f * scale)),(y + (3.8992357f * scale)));
-		painter.lineTo((x + (1.5395356f * scale)),(y + (4.016942f * scale)));
-		painter.cubicTo((x + (1.5395356f * scale)),(y + (4.183693f * scale)),(x + (1.5297267f * scale)),(y + (4.37987f * scale)),(x + (1.516648f * scale)),(y + (4.497576f * scale)));
-		painter.cubicTo((x + (1.50357f * scale)),(y + (4.6185517f * scale)),(x + (1.4708736f * scale)),(y + (4.732989f * scale)),(x + (1.4185596f * scale)),(y + (4.837617f * scale)));
-		painter.cubicTo((x + (1.2812357f * scale)),(y + (5.1155343f * scale)),(x + (1.0392835f * scale)),(y + (5.262667f * scale)),(x + (0.7679054f * scale)),(y + (5.2365108f * scale)));
-		painter.cubicTo((x + (0.46056065f * scale)),(y + (5.2070837f * scale)),(x + (0.21207006f * scale)),(y + (4.997828f * scale)),(x + (0.14994715f * scale)),(y + (4.716641f * scale)));
-		painter.cubicTo((x + (0.12052006f * scale)),(y + (4.589125f * scale)),(x + (0.13359922f * scale)),(y + (4.491037f * scale)),(x + (0.18591277f * scale)),(y + (4.409296f * scale)));
-		painter.cubicTo((x + (0.25457475f * scale)),(y + (4.3013988f * scale)),(x + (0.38535964f * scale)),(y + (4.2392764f * scale)),(x + (0.5128747f * scale)),(y + (4.2425456f * scale)));
-		painter.cubicTo((x + (0.6632773f * scale)),(y + (4.2490854f * scale)),(x + (0.78425336f * scale)),(y + (4.3667912f * scale)),(x + (0.80714035f * scale)),(y + (4.5302725f * scale)));
-		painter.cubicTo((x + (0.8234888f * scale)),(y + (4.661057f * scale)),(x + (0.7679054f * scale)),(y + (4.782033f * scale)),(x + (0.6632773f * scale)),(y + (4.8474255f * scale)));
-		painter.cubicTo((x + (0.6044242f * scale)),(y + (4.8833914f * scale)),(x + (0.52268356f * scale)),(y + (4.8997393f * scale)),(x + (0.46056065f * scale)),(y + (4.8899307f * scale)));
-		painter.cubicTo((x + (0.45075235f * scale)),(y + (4.8899307f * scale)),(x + (0.44094297f * scale)),(y + (4.8866606f * scale)),(x + (0.44094297f * scale)),(y + (4.8899307f * scale)));
-		painter.lineTo((x + (0.48017892f * scale)),(y + (4.929166f * scale)));
-		painter.cubicTo((x + (0.55211014f * scale)),(y + (5.0010977f * scale)),(x + (0.63385075f * scale)),(y + (5.0468726f * scale)),(x + (0.7384789f * scale)),(y + (5.06976f * scale)));
-		painter.cubicTo((x + (0.76136583f * scale)),(y + (5.0730295f * scale)),(x + (0.78098357f * scale)),(y + (5.0730295f * scale)),(x + (0.8332976f * scale)),(y + (5.0730295f * scale)));
-		painter.cubicTo((x + (0.89215076f * scale)),(y + (5.0730295f * scale)),(x + (0.8986898f * scale)),(y + (5.0730295f * scale)),(x + (0.9313861f * scale)),(y + (5.0664897f * scale)));
-		painter.cubicTo((x + (0.97716117f * scale)),(y + (5.0534115f * scale)),(x + (1.0163965f * scale)),(y + (5.0370636f * scale)),(x + (1.0523622f * scale)),(y + (5.0174456f * scale)));
-		painter.cubicTo((x + (1.2158434f * scale)),(y + (4.919357f * scale)),(x + (1.3270102f * scale)),(y + (4.716641f * scale)),(x + (1.3564366f * scale)),(y + (4.47142f * scale)));
-		painter.cubicTo((x + (1.3662455f * scale)),(y + (4.37987f * scale)),(x + (1.3760543f * scale)),(y + (4.183693f * scale)),(x + (1.3760543f * scale)),(y + (4.0398297f * scale)));
-		painter.cubicTo((x + (1.3760543f * scale)),(y + (3.9450107f * scale)),(x + (1.3760543f * scale)),(y + (3.9384713f * scale)),(x + (1.3695153f * scale)),(y + (3.9384713f * scale)));
-		painter.cubicTo((x + (1.3564366f * scale)),(y + (3.9450107f * scale)),(x + (1.2877747f * scale)),(y + (3.95155f * scale)),(x + (1.2387304f * scale)),(y + (3.9548192f * scale)));
-		painter.cubicTo((x + (1.1766075f * scale)),(y + (3.9580889f * scale)),(x + (1.0719799f * scale)),(y + (3.9580889f * scale)),(x + (1.0229356f * scale)),(y + (3.95155f * scale)));
-		painter.cubicTo((x + (0.8300278f * scale)),(y + (3.9286623f * scale)),(x + (0.65346843f * scale)),(y + (3.8632698f * scale)),(x + (0.4997966f * scale)),(y + (3.755372f * scale)));
-		painter.cubicTo((x + (0.2709232f * scale)),(y + (3.595161f * scale)),(x + (0.10744194f * scale)),(y + (3.3564782f * scale)),(x + (0.038779963f * scale)),(y + (3.0818305f * scale)));
-		painter.cubicTo((x + (-0.04949972f * scale)),(y + (2.7385209f * scale)),(x + (0.012623194f * scale)),(y + (2.3723233f * scale)),(x + (0.22841798f * scale)),(y + (1.9865077f * scale)));
-		painter.cubicTo((x + (0.31996745f * scale)),(y + (1.8262968f * scale)),(x + (0.40824714f * scale)),(y + (1.6955118f * scale)),(x + (0.6273117f * scale)),(y + (1.4045155f * scale)));
-		painter.lineTo((x + (0.751557f * scale)),(y + (1.2377651f * scale)));
-		painter.lineTo((x + (0.72866946f * scale)),(y + (1.1756423f * scale)));
-		painter.cubicTo((x + (0.5717278f * scale)),(y + (0.7604004f * scale)),(x + (0.51941377f * scale)),(y + (0.52171814f * scale)),(x + (0.5030659f * scale)),(y + (0.17513847f * scale)));
-		painter.cubicTo((x + (0.49652684f * scale)),(y + (0.024735928f * scale)),(x + (0.5030659f * scale)),(y + (-0.102779746f * scale)),(x + (0.52268356f * scale)),(y + (-0.2074073f * scale)));
-		painter.cubicTo((x + (0.5717278f * scale)),(y + (-0.48205525f * scale)),(x + (0.69924295f * scale)),(y + (-0.72727656f * scale)),(x + (0.8986898f * scale)),(y + (-0.92345417f * scale)));
-		painter.cubicTo((x + (0.9379252f * scale)),(y + (-0.9626896f * scale)),(x + (0.9542737f * scale)),(y + (-0.9757682f * scale)),(x + (0.9706216f * scale)),(y + (-0.9855771f * scale)));
-		painter.moveTo((x + (1.2289215f * scale)),(y + (-0.4264719f * scale)));
-		painter.cubicTo((x + (1.1962258f * scale)),(y + (-0.48205525f * scale)),(x + (1.2027647f * scale)),(y + (-0.478786f * scale)),(x + (1.1733383f * scale)),(y + (-0.45916772f * scale)));
-		painter.cubicTo((x + (1.0817888f * scale)),(y + (-0.40358436f * scale)),(x + (0.98697f * scale)),(y + (-0.3185745f * scale)),(x + (0.9183075f * scale)),(y + (-0.23356462f * scale)));
-		painter.cubicTo((x + (0.77771425f * scale)),(y + (-0.05373496f * scale)),(x + (0.69924295f * scale)),(y + (0.1555208f * scale)),(x + (0.68943465f * scale)),(y + (0.38112438f * scale)));
-		painter.cubicTo((x + (0.6861648f * scale)),(y + (0.4726739f * scale)),(x + (0.69597363f * scale)),(y + (0.5315269f * scale)),(x + (0.7384789f * scale)),(y + (0.6721202f * scale)));
-		painter.cubicTo((x + (0.77117467f * scale)),(y + (0.7865572f * scale)),(x + (0.8627241f * scale)),(y + (1.0644748f * scale)),(x + (0.86926377f * scale)),(y + (1.0710139f * scale)));
-		painter.cubicTo((x + (0.86926377f * scale)),(y + (1.0742836f * scale)),(x + (0.88888097f * scale)),(y + (1.0513968f * scale)),(x + (0.90849864f * scale)),(y + (1.0219696f * scale)));
-		painter.cubicTo((x + (1.1341028f * scale)),(y + (0.6982775f * scale)),(x + (1.2550789f * scale)),(y + (0.43343806f * scale)),(x + (1.3008534f * scale)),(y + (0.16859889f * scale)));
-		painter.cubicTo((x + (1.3106622f * scale)),(y + (0.09993696f * scale)),(x + (1.3172013f * scale)),(y + (0.044353604f * scale)),(x + (1.320471f * scale)),(y + (-0.03411722f * scale)));
-		painter.cubicTo((x + (1.3237408f * scale)),(y + (-0.2139464f * scale)),(x + (1.3041232f * scale)),(y + (-0.30222607f * scale)),(x + (1.2289215f * scale)),(y + (-0.4264719f * scale)));
-		painter.moveTo((x + (0.9477346f * scale)),(y + (1.7739828f * scale)));
-		painter.cubicTo((x + (0.9281169f * scale)),(y + (1.71186f * scale)),(x + (0.90849864f * scale)),(y + (1.6628156f * scale)),(x + (0.90849864f * scale)),(y + (1.6628156f * scale)));
-		painter.cubicTo((x + (0.9052294f * scale)),(y + (1.6628156f * scale)),(x + (0.7679054f * scale)),(y + (1.8459139f * scale)),(x + (0.7090518f * scale)),(y + (1.9276547f * scale)));
-		painter.cubicTo((x + (0.5161445f * scale)),(y + (2.1990333f * scale)),(x + (0.39843827f * scale)),(y + (2.4180977f * scale)),(x + (0.32977578f * scale)),(y + (2.6338923f * scale)));
-		painter.cubicTo((x + (0.2840013f * scale)),(y + (2.7679467f * scale)),(x + (0.26438358f * scale)),(y + (2.8921926f * scale)),(x + (0.25784454f * scale)),(y + (3.0295167f * scale)));
-		painter.cubicTo((x + (0.25784454f * scale)),(y + (3.1047182f * scale)),(x + (0.26111433f * scale)),(y + (3.1504927f * scale)),(x + (0.27419245f * scale)),(y + (3.2060761f * scale)));
-		painter.cubicTo((x + (0.34939402f * scale)),(y + (3.4970722f * scale)),(x + (0.6600081f * scale)),(y + (3.7357545f * scale)),(x + (1.0262054f * scale)),(y + (3.7880688f * scale)));
-		painter.cubicTo((x + (1.0817888f * scale)),(y + (3.7946076f * scale)),(x + (1.2387304f * scale)),(y + (3.7946076f * scale)),(x + (1.3073924f * scale)),(y + (3.7880688f * scale)));
-		painter.cubicTo((x + (1.3760543f * scale)),(y + (3.7782598f * scale)),(x + (1.3695153f * scale)),(y + (3.7815294f * scale)),(x + (1.3662455f * scale)),(y + (3.7521029f * scale)));
-		painter.cubicTo((x + (1.3466283f * scale)),(y + (3.4414887f * scale)),(x + (1.320471f * scale)),(y + (3.2518506f * scale)),(x + (1.2681575f * scale)),(y + (2.9706633f * scale)));
-		painter.cubicTo((x + (1.2485392f * scale)),(y + (2.8529572f * scale)),(x + (1.192956f * scale)),(y + (2.604466f * scale)),(x + (1.1896861f * scale)),(y + (2.601196f * scale)));
-		painter.cubicTo((x + (1.1864164f * scale)),(y + (2.5979269f * scale)),(x + (1.1242939f * scale)),(y + (2.604466f * scale)),(x + (1.0883284f * scale)),(y + (2.614275f * scale)));
-		painter.cubicTo((x + (1.0425533f * scale)),(y + (2.6240838f * scale)),(x + (1.0131269f * scale)),(y + (2.6338923f * scale)),(x + (0.9738914f * scale)),(y + (2.6535103f * scale)));
-		painter.cubicTo((x + (0.76136583f * scale)),(y + (2.7614079f * scale)),(x + (0.69924295f * scale)),(y + (3.0066295f * scale)),(x + (0.8332976f * scale)),(y + (3.2060761f * scale)));
-		painter.cubicTo((x + (0.85618514f * scale)),(y + (3.2387724f * scale)),(x + (0.9150382f * scale)),(y + (3.2976255f * scale)),(x + (0.9510039f * scale)),(y + (3.3205128f * scale)));
-		painter.cubicTo((x + (0.96408254f * scale)),(y + (3.3303218f * scale)),(x + (0.99350905f * scale)),(y + (3.3499393f * scale)),(x + (1.0131269f * scale)),(y + (3.3597484f * scale)));
-		painter.cubicTo((x + (1.0425533f * scale)),(y + (3.3760962f * scale)),(x + (1.0490924f * scale)),(y + (3.3826356f * scale)),(x + (1.055632f * scale)),(y + (3.3957143f * scale)));
-		painter.cubicTo((x + (1.0817888f * scale)),(y + (3.4382195f * scale)),(x + (1.0654408f * scale)),(y + (3.4905329f * scale)),(x + (1.0163965f * scale)),(y + (3.5134206f * scale)));
-		painter.cubicTo((x + (0.99023926f * scale)),(y + (3.5264988f * scale)),(x + (0.9706216f * scale)),(y + (3.5232296f * scale)),(x + (0.9183075f * scale)),(y + (3.4970722f * scale)));
-		painter.cubicTo((x + (0.79079294f * scale)),(y + (3.4349499f * scale)),(x + (0.69597363f * scale)),(y + (3.3499393f * scale)),(x + (0.6273117f * scale)),(y + (3.2453117f * scale)));
-		painter.cubicTo((x + (0.4997966f * scale)),(y + (3.0491343f * scale)),(x + (0.48344818f * scale)),(y + (2.7973735f * scale)),(x + (0.5880763f * scale)),(y + (2.5848482f * scale)));
-		painter.cubicTo((x + (0.67962575f * scale)),(y + (2.4017498f * scale)),(x + (0.84310645f * scale)),(y + (2.2775042f * scale)),(x + (1.0523622f * scale)),(y + (2.2317295f * scale)));
-		painter.cubicTo((x + (1.0719799f * scale)),(y + (2.22519f * scale)),(x + (1.0883284f * scale)),(y + (2.2219207f * scale)),(x + (1.0883284f * scale)),(y + (2.2219207f * scale)));
-		painter.cubicTo((x + (1.0915977f * scale)),(y + (2.2186508f * scale)),(x + (1.0000482f * scale)),(y + (1.9211154f * scale)),(x + (0.9477346f * scale)),(y + (1.7739828f * scale)));
-		painter.moveTo((x + (1.3924028f * scale)),(y + (2.617545f * scale)));
-		painter.cubicTo((x + (1.382594f * scale)),(y + (2.617545f * scale)),(x + (1.3727851f * scale)),(y + (2.614275f * scale)),(x + (1.3695153f * scale)),(y + (2.614275f * scale)));
-		painter.lineTo((x + (1.3597065f * scale)),(y + (2.611005f * scale)));
-		painter.lineTo((x + (1.3760543f * scale)),(y + (2.6796675f * scale)));
-		painter.cubicTo((x + (1.4512559f * scale)),(y + (3.0098987f * scale)),(x + (1.5068393f * scale)),(y + (3.369557f * scale)),(x + (1.526457f * scale)),(y + (3.6736321f * scale)));
-		painter.cubicTo((x + (1.5297267f * scale)),(y + (3.7063284f * scale)),(x + (1.5297267f * scale)),(y + (3.7324853f * scale)),(x + (1.5297267f * scale)),(y + (3.7324853f * scale)));
-		painter.cubicTo((x + (1.5329965f * scale)),(y + (3.7324853f * scale)),(x + (1.5755012f * scale)),(y + (3.7128677f * scale)),(x + (1.5983888f * scale)),(y + (3.6965194f * scale)));
-		painter.cubicTo((x + (1.6539721f * scale)),(y + (3.6638227f * scale)),(x + (1.7062862f * scale)),(y + (3.6147785f * scale)),(x + (1.7487912f * scale)),(y + (3.559195f * scale)));
-		painter.cubicTo((x + (1.8501498f * scale)),(y + (3.4251404f * scale)),(x + (1.8861152f * scale)),(y + (3.25839f * scale)),(x + (1.8468798f * scale)),(y + (3.0883694f * scale)));
-		painter.cubicTo((x + (1.8174533f * scale)),(y + (2.9510455f * scale)),(x + (1.7389826f * scale)),(y + (2.8235304f * scale)),(x + (1.6278152f * scale)),(y + (2.735251f * scale)));
-		painter.cubicTo((x + (1.5591533f * scale)),(y + (2.6829367f * scale)),(x + (1.4676039f * scale)),(y + (2.6371622f * scale)),(x + (1.3924028f * scale)),(y + (2.617545f * scale)));
-	}
-	
-	public static void paintBass(TGPainter painter, int x, int y,float scale){
-		painter.moveTo((x + (0.71937084f * scale)),(y + (0.16147426f * scale)));
-		painter.cubicTo((x + (0.75454587f * scale)),(y + (0.15827677f * scale)),(x + (0.8920496f * scale)),(y + (0.16147426f * scale)),(x + (0.94321334f * scale)),(y + (0.16467176f * scale)));
-		painter.cubicTo((x + (1.3429334f * scale)),(y + (0.20944051f * scale)),(x + (1.6147422f * scale)),(y + (0.4077018f * scale)),(x + (1.7042797f * scale)),(y + (0.72108173f * scale)));
-		painter.cubicTo((x + (1.7266634f * scale)),(y + (0.8074205f * scale)),(x + (1.7362571f * scale)),(y + (0.87137556f * scale)),(x + (1.7330583f * scale)),(y + (0.9800993f * scale)));
-		painter.cubicTo((x + (1.7330583f * scale)),(y + (1.1176031f * scale)),(x + (1.7170696f * scale)),(y + (1.2327217f * scale)),(x + (1.6723021f * scale)),(y + (1.3542367f * scale)));
-		painter.cubicTo((x + (1.5092158f * scale)),(y + (1.8370967f * scale)),(x + (1.0327508f * scale)),(y + (2.236817f * scale)),(x + (0.16296211f * scale)),(y + (2.6205468f * scale)));
-		painter.cubicTo((x + (0.12778586f * scale)),(y + (2.6365356f * scale)),(x + (0.095808364f * scale)),(y + (2.6525242f * scale)),(x + (0.092610866f * scale)),(y + (2.655722f * scale)));
-		painter.cubicTo((x + (0.073424615f * scale)),(y + (2.668513f * scale)),(x + (0.054238364f * scale)),(y + (2.6717105f * scale)),(x + (0.035052113f * scale)),(y + (2.6621182f * scale)));
-		painter.cubicTo((x + (0.019063365f * scale)),(y + (2.655722f * scale)),(x + (0.012667115f * scale)),(y + (2.6493268f * scale)),(x + (0.006272115f * scale)),(y + (2.633338f * scale)));
-		painter.cubicTo((x + (-0.0033216353f * scale)),(y + (2.6173494f * scale)),(x + (-1.2413526E-4f * scale)),(y + (2.6013606f * scale)),(x + (0.006272115f * scale)),(y + (2.5885694f * scale)));
-		painter.cubicTo((x + (0.012667115f * scale)),(y + (2.575778f * scale)),(x + (0.025458366f * scale)),(y + (2.5661855f * scale)),(x + (0.095808364f * scale)),(y + (2.5246143f * scale)));
-		painter.cubicTo((x + (0.3804096f * scale)),(y + (2.355133f * scale)),(x + (0.58826333f * scale)),(y + (2.2048392f * scale)),(x + (0.7641396f * scale)),(y + (2.0513468f * scale)));
-		painter.cubicTo((x + (0.8185009f * scale)),(y + (2.000183f * scale)),(x + (0.9208296f * scale)),(y + (1.8978542f * scale)),(x + (0.96559834f * scale)),(y + (1.8466904f * scale)));
-		painter.cubicTo((x + (1.1606609f * scale)),(y + (1.6196505f * scale)),(x + (1.2629896f * scale)),(y + (1.3990055f * scale)),(x + (1.2981646f * scale)),(y + (1.1431843f * scale)));
-		painter.cubicTo((x + (1.3045596f * scale)),(y + (1.0824268f * scale)),(x + (1.3045596f * scale)),(y + (0.93852806f * scale)),(x + (1.2981646f * scale)),(y + (0.87777054f * scale)));
-		painter.cubicTo((x + (1.2853733f * scale)),(y + (0.7850368f * scale)),(x + (1.2629896f * scale)),(y + (0.69869673f * scale)),(x + (1.2342097f * scale)),(y + (0.6219505f * scale)));
-		painter.cubicTo((x + (1.2118247f * scale)),(y + (0.5707868f * scale)),(x + (1.2054296f * scale)),(y + (0.554798f * scale)),(x + (1.1798471f * scale)),(y + (0.51322675f * scale)));
-		painter.cubicTo((x + (1.0871121f * scale)),(y + (0.35653678f * scale)),(x + (0.94641083f * scale)),(y + (0.27019802f * scale)),(x + (0.7897221f * scale)),(y + (0.27019802f * scale)));
-		painter.cubicTo((x + (0.63622963f * scale)),(y + (0.27019802f * scale)),(x + (0.5083196f * scale)),(y + (0.35653678f * scale)),(x + (0.42517713f * scale)),(y + (0.51962304f * scale)));
-		painter.cubicTo((x + (0.4123871f * scale)),(y + (0.5452043f * scale)),(x + (0.3804096f * scale)),(y + (0.6283468f * scale)),(x + (0.3804096f * scale)),(y + (0.63154423f * scale)));
-		painter.cubicTo((x + (0.3804096f * scale)),(y + (0.6347418f * scale)),(x + (0.39319962f * scale)),(y + (0.63154423f * scale)),(x + (0.40599087f * scale)),(y + (0.63154423f * scale)));
-		painter.cubicTo((x + (0.4795396f * scale)),(y + (0.6283468f * scale)),(x + (0.55948335f * scale)),(y + (0.65712553f * scale)),(x + (0.62024087f * scale)),(y + (0.705093f * scale)));
-		painter.cubicTo((x + (0.7353596f * scale)),(y + (0.80422306f * scale)),(x + (0.7673371f * scale)),(y + (0.9641105f * scale)),(x + (0.6969871f * scale)),(y + (1.1080092f * scale)));
-		painter.cubicTo((x + (0.64902085f * scale)),(y + (1.2135355f * scale)),(x + (0.54669213f * scale)),(y + (1.280688f * scale)),(x + (0.43477085f * scale)),(y + (1.2902818f * scale)));
-		painter.cubicTo((x + (0.27808085f * scale)),(y + (1.2998742f * scale)),(x + (0.12458836f * scale)),(y + (1.1975467f * scale)),(x + (0.073424615f * scale)),(y + (1.0504493f * scale)));
-		painter.cubicTo((x + (0.057435866f * scale)),(y + (1.002483f * scale)),(x + (0.054238364f * scale)),(y + (0.95451677f * scale)),(x + (0.060633365f * scale)),(y + (0.87777054f * scale)));
-		painter.cubicTo((x + (0.08941337f * scale)),(y + (0.55799556f * scale)),(x + (0.29406962f * scale)),(y + (0.28618675f * scale)),(x + (0.5754721f * scale)),(y + (0.19345176f * scale)));
-		painter.cubicTo((x + (0.62343836f * scale)),(y + (0.17746301f * scale)),(x + (0.6714046f * scale)),(y + (0.16786925f * scale)),(x + (0.71937084f * scale)),(y + (0.16147426f * scale)));
-		painter.moveTo((x + (1.9632971f * scale)),(y + (0.462063f * scale)));
-		painter.cubicTo((x + (2.0144608f * scale)),(y + (0.44607428f * scale)),(x + (2.0752184f * scale)),(y + (0.462063f * scale)),(x + (2.1167896f * scale)),(y + (0.5004368f * scale)));
-		painter.cubicTo((x + (2.1455696f * scale)),(y + (0.53241426f * scale)),(x + (2.1615584f * scale)),(y + (0.57398427f * scale)),(x + (2.1615584f * scale)),(y + (0.6155555f * scale)));
-		painter.cubicTo((x + (2.1615584f * scale)),(y + (0.7018943f * scale)),(x + (2.091207f * scale)),(y + (0.7722455f * scale)),(x + (2.0048683f * scale)),(y + (0.7722455f * scale)));
-		painter.cubicTo((x + (1.9153309f * scale)),(y + (0.7722455f * scale)),(x + (1.8449808f * scale)),(y + (0.7018943f * scale)),(x + (1.8449808f * scale)),(y + (0.6155555f * scale)));
-		painter.cubicTo((x + (1.8449808f * scale)),(y + (0.54200673f * scale)),(x + (1.8929471f * scale)),(y + (0.48124927f * scale)),(x + (1.9632971f * scale)),(y + (0.462063f * scale)));
-		painter.moveTo((x + (1.9632971f * scale)),(y + (1.2583042f * scale)));
-		painter.cubicTo((x + (2.0144608f * scale)),(y + (1.2423155f * scale)),(x + (2.0752184f * scale)),(y + (1.2583042f * scale)),(x + (2.1167896f * scale)),(y + (1.2966768f * scale)));
-		painter.cubicTo((x + (2.155162f * scale)),(y + (1.338248f * scale)),(x + (2.171151f * scale)),(y + (1.3958068f * scale)),(x + (2.155162f * scale)),(y + (1.4469718f * scale)));
-		painter.cubicTo((x + (2.1391733f * scale)),(y + (1.5205193f * scale)),(x + (2.0784159f * scale)),(y + (1.5684855f * scale)),(x + (2.0048683f * scale)),(y + (1.5684855f * scale)));
-		painter.cubicTo((x + (1.9153309f * scale)),(y + (1.5684855f * scale)),(x + (1.8449808f * scale)),(y + (1.4981354f * scale)),(x + (1.8449808f * scale)),(y + (1.4117955f * scale)));
-		painter.cubicTo((x + (1.8449808f * scale)),(y + (1.338248f * scale)),(x + (1.8929471f * scale)),(y + (1.2774905f * scale)),(x + (1.9632971f * scale)),(y + (1.2583042f * scale)));
-	}
-	
-	public static void paintAlto(TGPainter painter, int x, int y,float scale){
-		painter.moveTo((x + (0.026545623f * scale)),(y + (0.5470838f * scale)));
-		painter.cubicTo((x + (0.03553187f * scale)),(y + (0.5410925f * scale)),(x + (0.053504374f * scale)),(y + (0.5410925f * scale)),(x + (0.21525937f * scale)),(y + (0.5410925f * scale)));
-		painter.lineTo((x + (0.39498562f * scale)),(y + (0.5410925f * scale)));
-		painter.lineTo((x + (0.40397188f * scale)),(y + (0.55007875f * scale)));
-		painter.cubicTo((x + (0.40996313f * scale)),(y + (0.55607f * scale)),(x + (0.41595438f * scale)),(y + (0.56206f * scale)),(x + (0.41894937f * scale)),(y + (0.5680513f * scale)));
-		painter.cubicTo((x + (0.42494062f * scale)),(y + (0.5800325f * scale)),(x + (0.42494062f * scale)),(y + (0.69086504f * scale)),(x + (0.42494062f * scale)),(y + (2.038815f * scale)));
-		painter.cubicTo((x + (0.42494062f * scale)),(y + (3.386765f * scale)),(x + (0.42494062f * scale)),(y + (3.4975975f * scale)),(x + (0.41894937f * scale)),(y + (3.5095787f * scale)));
-		painter.cubicTo((x + (0.41595438f * scale)),(y + (3.51557f * scale)),(x + (0.40996313f * scale)),(y + (3.52156f * scale)),(x + (0.40397188f * scale)),(y + (3.5275512f * scale)));
-		painter.lineTo((x + (0.39498562f * scale)),(y + (3.5335424f * scale)));
-		painter.lineTo((x + (0.21226312f * scale)),(y + (3.5335424f * scale)));
-		painter.lineTo((x + (0.029541872f * scale)),(y + (3.5335424f * scale)));
-		painter.lineTo((x + (0.020554373f * scale)),(y + (3.5275512f * scale)));
-		painter.cubicTo((x + (0.014564373f * scale)),(y + (3.52156f * scale)),(x + (0.008573122f * scale)),(y + (3.51557f * scale)),(x + (0.0055781226f * scale)),(y + (3.5095787f * scale)));
-		painter.cubicTo((x + (-4.131275E-4f * scale)),(y + (3.4975975f * scale)),(x + (-4.131275E-4f * scale)),(y + (3.386765f * scale)),(x + (-4.131275E-4f * scale)),(y + (2.03582f * scale)));
-		painter.lineTo((x + (0.0025818725f * scale)),(y + (0.5710463f * scale)));
-		painter.lineTo((x + (0.008573122f * scale)),(y + (0.56206f * scale)));
-		painter.cubicTo((x + (0.014564373f * scale)),(y + (0.55607f * scale)),(x + (0.020554373f * scale)),(y + (0.55007875f * scale)),(x + (0.026545623f * scale)),(y + (0.5470838f * scale)));
-		painter.moveTo((x + (0.6016719f * scale)),(y + (0.5470838f * scale)));
-		painter.cubicTo((x + (0.6106581f * scale)),(y + (0.5410925f * scale)),(x + (0.6196444f * scale)),(y + (0.5410925f * scale)),(x + (0.6525944f * scale)),(y + (0.5410925f * scale)));
-		painter.cubicTo((x + (0.6915344f * scale)),(y + (0.5410925f * scale)),(x + (0.6945306f * scale)),(y + (0.5440875f * scale)),(x + (0.7035169f * scale)),(y + (0.55007875f * scale)));
-		painter.cubicTo((x + (0.72748065f * scale)),(y + (0.5680513f * scale)),(x + (0.7244844f * scale)),(y + (0.49915627f * scale)),(x + (0.7244844f * scale)),(y + (1.2779713f * scale)));
-		painter.lineTo((x + (0.7244844f * scale)),(y + (1.9759114f * scale)));
-		painter.lineTo((x + (0.74245685f * scale)),(y + (1.9609337f * scale)));
-		painter.cubicTo((x + (0.8173431f * scale)),(y + (1.8890426f * scale)),(x + (0.8862381f * scale)),(y + (1.7782114f * scale)),(x + (0.92517936f * scale)),(y + (1.6793613f * scale)));
-		painter.cubicTo((x + (0.9491431f * scale)),(y + (1.6074712f * scale)),(x + (0.9641206f * scale)),(y + (1.5265937f * scale)),(x + (0.9701106f * scale)),(y + (1.4397264f * scale)));
-		painter.cubicTo((x + (0.9701106f * scale)),(y + (1.400785f * scale)),(x + (0.97310686f * scale)),(y + (1.3947937f * scale)),(x + (0.97909814f * scale)),(y + (1.3858075f * scale)));
-		painter.cubicTo((x + (0.9850881f * scale)),(y + (1.3768213f * scale)),(x + (1.0060569f * scale)),(y + (1.36484f * scale)),(x + (1.0210332f * scale)),(y + (1.36484f * scale)));
-		painter.cubicTo((x + (1.0360106f * scale)),(y + (1.36484f * scale)),(x + (1.0539831f * scale)),(y + (1.3738263f * scale)),(x + (1.0629693f * scale)),(y + (1.3828125f * scale)));
-		painter.cubicTo((x + (1.0689607f * scale)),(y + (1.3947937f * scale)),(x + (1.0719569f * scale)),(y + (1.39779f * scale)),(x + (1.0749519f * scale)),(y + (1.4547038f * scale)));
-		painter.cubicTo((x + (1.0839381f * scale)),(y + (1.5775163f * scale)),(x + (1.1258744f * scale)),(y + (1.6793613f * scale)),(x + (1.1947694f * scale)),(y + (1.7512524f * scale)));
-		painter.cubicTo((x + (1.2636644f * scale)),(y + (1.8171525f * scale)),(x + (1.3445419f * scale)),(y + (1.8441112f * scale)),(x + (1.4433919f * scale)),(y + (1.8321288f * scale)));
-		painter.cubicTo((x + (1.5122869f * scale)),(y + (1.8231425f * scale)),(x + (1.5632094f * scale)),(y + (1.802175f * scale)),(x + (1.6021507f * scale)),(y + (1.7632337f * scale)));
-		painter.cubicTo((x + (1.6440868f * scale)),(y + (1.7212975f * scale)),(x + (1.6680493f * scale)),(y + (1.6733713f * scale)),(x + (1.6860231f * scale)),(y + (1.598485f * scale)));
-		painter.cubicTo((x + (1.7039956f * scale)),(y + (1.532585f * scale)),(x + (1.7099856f * scale)),(y + (1.466685f * scale)),(x + (1.7129818f * scale)),(y + (1.3318901f * scale)));
-		painter.cubicTo((x + (1.7189732f * scale)),(y + (0.86759627f * scale)),(x + (1.6321044f * scale)),(y + (0.67888254f * scale)),(x + (1.3894731f * scale)),(y + (0.6459325f * scale)));
-		painter.cubicTo((x + (1.2936194f * scale)),(y + (0.63395125f * scale)),(x + (1.2307143f * scale)),(y + (0.6519238f * scale)),(x + (1.2037556f * scale)),(y + (0.696855f * scale)));
-		painter.cubicTo((x + (1.1977656f * scale)),(y + (0.7088375f * scale)),(x + (1.1977656f * scale)),(y + (0.7118325f * scale)),(x + (1.1977656f * scale)),(y + (0.7357963f * scale)));
-		painter.cubicTo((x + (1.1977656f * scale)),(y + (0.76275504f * scale)),(x + (1.1977656f * scale)),(y + (0.76575124f * scale)),(x + (1.2067518f * scale)),(y + (0.7837238f * scale)));
-		painter.cubicTo((x + (1.2157382f * scale)),(y + (0.8016963f * scale)),(x + (1.2217281f * scale)),(y + (0.81068254f * scale)),(x + (1.2576743f * scale)),(y + (0.84662753f * scale)));
-		painter.cubicTo((x + (1.2936194f * scale)),(y + (0.8795775f * scale)),(x + (1.2996106f * scale)),(y + (0.89156f * scale)),(x + (1.3085968f * scale)),(y + (0.9065363f * scale)));
-		painter.cubicTo((x + (1.3295643f * scale)),(y + (0.95146877f * scale)),(x + (1.3205781f * scale)),(y + (1.0173688f * scale)),(x + (1.2876282f * scale)),(y + (1.0772775f * scale)));
-		painter.cubicTo((x + (1.2756469f * scale)),(y + (1.098245f * scale)),(x + (1.2337106f * scale)),(y + (1.1401813f * scale)),(x + (1.2127419f * scale)),(y + (1.1521637f * scale)));
-		painter.cubicTo((x + (1.1378556f * scale)),(y + (1.197095f * scale)),(x + (1.0509881f * scale)),(y + (1.197095f * scale)),(x + (0.9761019f * scale)),(y + (1.1521637f * scale)));
-		painter.cubicTo((x + (0.9551344f * scale)),(y + (1.1401813f * scale)),(x + (0.9131981f * scale)),(y + (1.098245f * scale)),(x + (0.9012156f * scale)),(y + (1.0772775f * scale)));
-		painter.cubicTo((x + (0.8712619f * scale)),(y + (1.026355f * scale)),(x + (0.8622756f * scale)),(y + (0.9724363f * scale)),(x + (0.8712619f * scale)),(y + (0.90354127f * scale)));
-		painter.cubicTo((x + (0.8862381f * scale)),(y + (0.81667376f * scale)),(x + (0.92517936f * scale)),(y + (0.74178755f * scale)),(x + (0.9880844f * scale)),(y + (0.6758875f * scale)));
-		painter.cubicTo((x + (1.0539831f * scale)),(y + (0.6129825f * scale)),(x + (1.1348606f * scale)),(y + (0.5710463f * scale)),(x + (1.2307143f * scale)),(y + (0.55007875f * scale)));
-		painter.cubicTo((x + (1.2876282f * scale)),(y + (0.53809625f * scale)),(x + (1.3984594f * scale)),(y + (0.53809625f * scale)),(x + (1.4943144f * scale)),(y + (0.55307376f * scale)));
-		painter.cubicTo((x + (1.8477769f * scale)),(y + (0.6039963f * scale)),(x + (2.0364895f * scale)),(y + (0.81966877f * scale)),(x + (2.0634482f * scale)),(y + (1.197095f * scale)));
-		painter.cubicTo((x + (2.0724356f * scale)),(y + (1.3139175f * scale)),(x + (2.0634482f * scale)),(y + (1.39779f * scale)),(x + (2.0364895f * scale)),(y + (1.4846575f * scale)));
-		painter.cubicTo((x + (1.9526169f * scale)),(y + (1.7302837f * scale)),(x + (1.7279594f * scale)),(y + (1.9070151f * scale)),(x + (1.4583694f * scale)),(y + (1.933975f * scale)));
-		painter.cubicTo((x + (1.3715006f * scale)),(y + (1.9429612f * scale)),(x + (1.3475369f * scale)),(y + (1.93697f * scale)),(x + (1.2666606f * scale)),(y + (1.8830512f * scale)));
-		painter.cubicTo((x + (1.2187331f * scale)),(y + (1.8501024f * scale)),(x + (1.1947694f * scale)),(y + (1.83812f * scale)),(x + (1.1708056f * scale)),(y + (1.8321288f * scale)));
-		painter.cubicTo((x + (1.1348606f * scale)),(y + (1.8231425f * scale)),(x + (1.0989156f * scale)),(y + (1.8321288f * scale)),(x + (1.0719569f * scale)),(y + (1.8560925f * scale)));
-		painter.cubicTo((x + (1.0390068f * scale)),(y + (1.8830512f * scale)),(x + (1.0240294f * scale)),(y + (1.939965f * scale)),(x + (1.0240294f * scale)),(y + (2.038815f * scale)));
-		painter.cubicTo((x + (1.0240294f * scale)),(y + (2.137665f * scale)),(x + (1.0390068f * scale)),(y + (2.194579f * scale)),(x + (1.0719569f * scale)),(y + (2.2215376f * scale)));
-		painter.cubicTo((x + (1.0989156f * scale)),(y + (2.2455013f * scale)),(x + (1.1348606f * scale)),(y + (2.2544875f * scale)),(x + (1.1708056f * scale)),(y + (2.2455013f * scale)));
-		painter.cubicTo((x + (1.1947694f * scale)),(y + (2.23951f * scale)),(x + (1.2187331f * scale)),(y + (2.2275276f * scale)),(x + (1.2666606f * scale)),(y + (2.194579f * scale)));
-		painter.cubicTo((x + (1.3475369f * scale)),(y + (2.14066f * scale)),(x + (1.3715006f * scale)),(y + (2.1346688f * scale)),(x + (1.4583694f * scale)),(y + (2.143655f * scale)));
-		painter.cubicTo((x + (1.7279594f * scale)),(y + (2.170615f * scale)),(x + (1.9526169f * scale)),(y + (2.3473463f * scale)),(x + (2.0364895f * scale)),(y + (2.5929725f * scale)));
-		painter.cubicTo((x + (2.0634482f * scale)),(y + (2.6798398f * scale)),(x + (2.0724356f * scale)),(y + (2.7637124f * scale)),(x + (2.0634482f * scale)),(y + (2.8775399f * scale)));
-		painter.cubicTo((x + (2.0334945f * scale)),(y + (3.2909112f * scale)),(x + (1.8178219f * scale)),(y + (3.5035875f * scale)),(x + (1.4044507f * scale)),(y + (3.5335424f * scale)));
-		painter.cubicTo((x + (1.3056006f * scale)),(y + (3.5395336f * scale)),(x + (1.2367057f * scale)),(y + (3.5335424f * scale)),(x + (1.1678107f * scale)),(y + (3.5095787f * scale)));
-		painter.cubicTo((x + (1.0330156f * scale)),(y + (3.4646475f * scale)),(x + (0.92218435f * scale)),(y + (3.3568113f * scale)),(x + (0.88324314f * scale)),(y + (3.2280061f * scale)));
-		painter.cubicTo((x + (0.8592794f * scale)),(y + (3.1381438f * scale)),(x + (0.8652706f * scale)),(y + (3.0662525f * scale)),(x + (0.9012156f * scale)),(y + (3.0003524f * scale)));
-		painter.cubicTo((x + (0.9131981f * scale)),(y + (2.979385f * scale)),(x + (0.9551344f * scale)),(y + (2.9374487f * scale)),(x + (0.9761019f * scale)),(y + (2.9254663f * scale)));
-		painter.cubicTo((x + (1.0509881f * scale)),(y + (2.880535f * scale)),(x + (1.1378556f * scale)),(y + (2.880535f * scale)),(x + (1.2127419f * scale)),(y + (2.9254663f * scale)));
-		painter.cubicTo((x + (1.2337106f * scale)),(y + (2.9374487f * scale)),(x + (1.2756469f * scale)),(y + (2.979385f * scale)),(x + (1.2876282f * scale)),(y + (3.0003524f * scale)));
-		painter.cubicTo((x + (1.3205781f * scale)),(y + (3.0602612f * scale)),(x + (1.3295643f * scale)),(y + (3.126161f * scale)),(x + (1.3085968f * scale)),(y + (3.1710937f * scale)));
-		painter.cubicTo((x + (1.2996106f * scale)),(y + (3.18607f * scale)),(x + (1.2936194f * scale)),(y + (3.1980524f * scale)),(x + (1.2576743f * scale)),(y + (3.2310026f * scale)));
-		painter.cubicTo((x + (1.2217281f * scale)),(y + (3.2669475f * scale)),(x + (1.2157382f * scale)),(y + (3.2759337f * scale)),(x + (1.2067518f * scale)),(y + (3.2939062f * scale)));
-		painter.cubicTo((x + (1.1977656f * scale)),(y + (3.3118787f * scale)),(x + (1.1977656f * scale)),(y + (3.314875f * scale)),(x + (1.1977656f * scale)),(y + (3.3388388f * scale)));
-		painter.cubicTo((x + (1.1977656f * scale)),(y + (3.3657975f * scale)),(x + (1.1977656f * scale)),(y + (3.3687925f * scale)),(x + (1.2037556f * scale)),(y + (3.380775f * scale)));
-		painter.cubicTo((x + (1.2307143f * scale)),(y + (3.4257061f * scale)),(x + (1.2936194f * scale)),(y + (3.4436786f * scale)),(x + (1.3894731f * scale)),(y + (3.4316974f * scale)));
-		painter.cubicTo((x + (1.5362506f * scale)),(y + (3.4107287f * scale)),(x + (1.6261132f * scale)),(y + (3.3328474f * scale)),(x + (1.6710457f * scale)),(y + (3.1770837f * scale)));
-		painter.cubicTo((x + (1.7009994f * scale)),(y + (3.0752387f * scale)),(x + (1.7159768f * scale)),(y + (2.9374487f * scale)),(x + (1.7129818f * scale)),(y + (2.74574f * scale)));
-		painter.cubicTo((x + (1.7099856f * scale)),(y + (2.610945f * scale)),(x + (1.7039956f * scale)),(y + (2.545045f * scale)),(x + (1.6860231f * scale)),(y + (2.47615f * scale)));
-		painter.cubicTo((x + (1.6500769f * scale)),(y + (2.3323689f * scale)),(x + (1.5751907f * scale)),(y + (2.2604775f * scale)),(x + (1.4433919f * scale)),(y + (2.2455013f * scale)));
-		painter.cubicTo((x + (1.3445419f * scale)),(y + (2.2335188f * scale)),(x + (1.2636644f * scale)),(y + (2.2604775f * scale)),(x + (1.1947694f * scale)),(y + (2.3263776f * scale)));
-		painter.cubicTo((x + (1.1258744f * scale)),(y + (2.3982687f * scale)),(x + (1.0839381f * scale)),(y + (2.5001137f * scale)),(x + (1.0749519f * scale)),(y + (2.6229262f * scale)));
-		painter.cubicTo((x + (1.0719569f * scale)),(y + (2.6798398f * scale)),(x + (1.0689607f * scale)),(y + (2.6828363f * scale)),(x + (1.0629693f * scale)),(y + (2.6948175f * scale)));
-		painter.cubicTo((x + (1.0539831f * scale)),(y + (2.7038038f * scale)),(x + (1.0360106f * scale)),(y + (2.71279f * scale)),(x + (1.0210332f * scale)),(y + (2.71279f * scale)));
-		painter.cubicTo((x + (1.0060569f * scale)),(y + (2.71279f * scale)),(x + (0.9850881f * scale)),(y + (2.7008088f * scale)),(x + (0.97909814f * scale)),(y + (2.6918225f * scale)));
-		painter.cubicTo((x + (0.97310686f * scale)),(y + (2.6828363f * scale)),(x + (0.9701106f * scale)),(y + (2.676845f * scale)),(x + (0.9701106f * scale)),(y + (2.6379037f * scale)));
-		painter.cubicTo((x + (0.9641206f * scale)),(y + (2.5180862f * scale)),(x + (0.9401569f * scale)),(y + (2.4282224f * scale)),(x + (0.8922294f * scale)),(y + (2.3233826f * scale)));
-		painter.cubicTo((x + (0.8562844f * scale)),(y + (2.2514913f * scale)),(x + (0.79637563f * scale)),(y + (2.170615f * scale)),(x + (0.74245685f * scale)),(y + (2.1166964f * scale)));
-		painter.lineTo((x + (0.7244844f * scale)),(y + (2.1017187f * scale)));
-		painter.lineTo((x + (0.7244844f * scale)),(y + (2.7996588f * scale)));
-		painter.cubicTo((x + (0.7244844f * scale)),(y + (3.5784738f * scale)),(x + (0.72748065f * scale)),(y + (3.5095787f * scale)),(x + (0.7035169f * scale)),(y + (3.5275512f * scale)));
-		painter.cubicTo((x + (0.6945306f * scale)),(y + (3.5335424f * scale)),(x + (0.6915344f * scale)),(y + (3.5335424f * scale)),(x + (0.6495981f * scale)),(y + (3.5335424f * scale)));
-		painter.cubicTo((x + (0.6076619f * scale)),(y + (3.5335424f * scale)),(x + (0.6046669f * scale)),(y + (3.5335424f * scale)),(x + (0.59568065f * scale)),(y + (3.5275512f * scale)));
-		painter.cubicTo((x + (0.5896894f * scale)),(y + (3.52156f * scale)),(x + (0.58369815f * scale)),(y + (3.51557f * scale)),(x + (0.58070314f * scale)),(y + (3.5095787f * scale)));
-		painter.cubicTo((x + (0.57471186f * scale)),(y + (3.4975975f * scale)),(x + (0.57471186f * scale)),(y + (3.386765f * scale)),(x + (0.57471186f * scale)),(y + (2.03582f * scale)));
-		painter.lineTo((x + (0.5777081f * scale)),(y + (0.5710463f * scale)));
-		painter.lineTo((x + (0.58369815f * scale)),(y + (0.56206f * scale)));
-		painter.cubicTo((x + (0.5896894f * scale)),(y + (0.55607f * scale)),(x + (0.59568065f * scale)),(y + (0.55007875f * scale)),(x + (0.6016719f * scale)),(y + (0.5470838f * scale)));
-	}
-	
-	public static void paintTenor(TGPainter painter, int x, int y,float scale){
-		painter.moveTo((x + (0.026545623f * scale)),(y + (-0.45291623f * scale)));
-		painter.cubicTo((x + (0.03553187f * scale)),(y + (-0.45890749f * scale)),(x + (0.053504374f * scale)),(y + (-0.45890749f * scale)),(x + (0.21525937f * scale)),(y + (-0.45890749f * scale)));
-		painter.lineTo((x + (0.39498562f * scale)),(y + (-0.45890749f * scale)));
-		painter.lineTo((x + (0.40397188f * scale)),(y + (-0.44992122f * scale)));
-		painter.cubicTo((x + (0.40996313f * scale)),(y + (-0.44392997f * scale)),(x + (0.41595438f * scale)),(y + (-0.43793997f * scale)),(x + (0.41894937f * scale)),(y + (-0.43194872f * scale)));
-		painter.cubicTo((x + (0.42494062f * scale)),(y + (-0.41996747f * scale)),(x + (0.42494062f * scale)),(y + (-0.30913496f * scale)),(x + (0.42494062f * scale)),(y + (1.038815f * scale)));
-		painter.cubicTo((x + (0.42494062f * scale)),(y + (2.386765f * scale)),(x + (0.42494062f * scale)),(y + (2.4975975f * scale)),(x + (0.41894937f * scale)),(y + (2.5095787f * scale)));
-		painter.cubicTo((x + (0.41595438f * scale)),(y + (2.51557f * scale)),(x + (0.40996313f * scale)),(y + (2.52156f * scale)),(x + (0.40397188f * scale)),(y + (2.5275512f * scale)));
-		painter.lineTo((x + (0.39498562f * scale)),(y + (2.5335424f * scale)));
-		painter.lineTo((x + (0.21226312f * scale)),(y + (2.5335424f * scale)));
-		painter.lineTo((x + (0.029541872f * scale)),(y + (2.5335424f * scale)));
-		painter.lineTo((x + (0.020554373f * scale)),(y + (2.5275512f * scale)));
-		painter.cubicTo((x + (0.014564373f * scale)),(y + (2.52156f * scale)),(x + (0.008573122f * scale)),(y + (2.51557f * scale)),(x + (0.0055781226f * scale)),(y + (2.5095787f * scale)));
-		painter.cubicTo((x + (-4.131275E-4f * scale)),(y + (2.4975975f * scale)),(x + (-4.131275E-4f * scale)),(y + (2.386765f * scale)),(x + (-4.131275E-4f * scale)),(y + (1.03582f * scale)));
-		painter.lineTo((x + (0.0025818725f * scale)),(y + (-0.42895374f * scale)));
-		painter.lineTo((x + (0.008573122f * scale)),(y + (-0.43793997f * scale)));
-		painter.cubicTo((x + (0.014564373f * scale)),(y + (-0.44392997f * scale)),(x + (0.020554373f * scale)),(y + (-0.44992122f * scale)),(x + (0.026545623f * scale)),(y + (-0.45291623f * scale)));
-		painter.moveTo((x + (0.6016719f * scale)),(y + (-0.45291623f * scale)));
-		painter.cubicTo((x + (0.6106581f * scale)),(y + (-0.45890749f * scale)),(x + (0.6196444f * scale)),(y + (-0.45890749f * scale)),(x + (0.6525944f * scale)),(y + (-0.45890749f * scale)));
-		painter.cubicTo((x + (0.6915344f * scale)),(y + (-0.45890749f * scale)),(x + (0.6945306f * scale)),(y + (-0.45591247f * scale)),(x + (0.7035169f * scale)),(y + (-0.44992122f * scale)));
-		painter.cubicTo((x + (0.72748065f * scale)),(y + (-0.43194872f * scale)),(x + (0.7244844f * scale)),(y + (-0.5008437f * scale)),(x + (0.7244844f * scale)),(y + (0.27797127f * scale)));
-		painter.lineTo((x + (0.7244844f * scale)),(y + (0.9759113f * scale)));
-		painter.lineTo((x + (0.74245685f * scale)),(y + (0.96093374f * scale)));
-		painter.cubicTo((x + (0.8173431f * scale)),(y + (0.88904256f * scale)),(x + (0.8862381f * scale)),(y + (0.7782113f * scale)),(x + (0.92517936f * scale)),(y + (0.6793613f * scale)));
-		painter.cubicTo((x + (0.9491431f * scale)),(y + (0.6074713f * scale)),(x + (0.9641206f * scale)),(y + (0.52659374f * scale)),(x + (0.9701106f * scale)),(y + (0.4397263f * scale)));
-		painter.cubicTo((x + (0.9701106f * scale)),(y + (0.40078503f * scale)),(x + (0.97310686f * scale)),(y + (0.39479375f * scale)),(x + (0.97909814f * scale)),(y + (0.3858075f * scale)));
-		painter.cubicTo((x + (0.9850881f * scale)),(y + (0.37682128f * scale)),(x + (1.0060569f * scale)),(y + (0.36484003f * scale)),(x + (1.0210332f * scale)),(y + (0.36484003f * scale)));
-		painter.cubicTo((x + (1.0360106f * scale)),(y + (0.36484003f * scale)),(x + (1.0539831f * scale)),(y + (0.37382627f * scale)),(x + (1.0629693f * scale)),(y + (0.3828125f * scale)));
-		painter.cubicTo((x + (1.0689607f * scale)),(y + (0.39479375f * scale)),(x + (1.0719569f * scale)),(y + (0.39779f * scale)),(x + (1.0749519f * scale)),(y + (0.45470375f * scale)));
-		painter.cubicTo((x + (1.0839381f * scale)),(y + (0.57751626f * scale)),(x + (1.1258744f * scale)),(y + (0.6793613f * scale)),(x + (1.1947694f * scale)),(y + (0.7512525f * scale)));
-		painter.cubicTo((x + (1.2636644f * scale)),(y + (0.81715256f * scale)),(x + (1.3445419f * scale)),(y + (0.84411126f * scale)),(x + (1.4433919f * scale)),(y + (0.8321288f * scale)));
-		painter.cubicTo((x + (1.5122869f * scale)),(y + (0.82314247f * scale)),(x + (1.5632094f * scale)),(y + (0.802175f * scale)),(x + (1.6021507f * scale)),(y + (0.7632337f * scale)));
-		painter.cubicTo((x + (1.6440868f * scale)),(y + (0.72129756f * scale)),(x + (1.6680493f * scale)),(y + (0.67337126f * scale)),(x + (1.6860231f * scale)),(y + (0.59848505f * scale)));
-		painter.cubicTo((x + (1.7039956f * scale)),(y + (0.532585f * scale)),(x + (1.7099856f * scale)),(y + (0.466685f * scale)),(x + (1.7129818f * scale)),(y + (0.33189005f * scale)));
-		painter.cubicTo((x + (1.7189732f * scale)),(y + (-0.13240373f * scale)),(x + (1.6321044f * scale)),(y + (-0.32111746f * scale)),(x + (1.3894731f * scale)),(y + (-0.35406747f * scale)));
-		painter.cubicTo((x + (1.2936194f * scale)),(y + (-0.36604872f * scale)),(x + (1.2307143f * scale)),(y + (-0.34807622f * scale)),(x + (1.2037556f * scale)),(y + (-0.303145f * scale)));
-		painter.cubicTo((x + (1.1977656f * scale)),(y + (-0.2911625f * scale)),(x + (1.1977656f * scale)),(y + (-0.28816748f * scale)),(x + (1.1977656f * scale)),(y + (-0.26420373f * scale)));
-		painter.cubicTo((x + (1.1977656f * scale)),(y + (-0.23724498f * scale)),(x + (1.1977656f * scale)),(y + (-0.23424873f * scale)),(x + (1.2067518f * scale)),(y + (-0.21627623f * scale)));
-		painter.cubicTo((x + (1.2157382f * scale)),(y + (-0.19830373f * scale)),(x + (1.2217281f * scale)),(y + (-0.18931746f * scale)),(x + (1.2576743f * scale)),(y + (-0.15337247f * scale)));
-		painter.cubicTo((x + (1.2936194f * scale)),(y + (-0.12042248f * scale)),(x + (1.2996106f * scale)),(y + (-0.10843998f * scale)),(x + (1.3085968f * scale)),(y + (-0.09346372f * scale)));
-		painter.cubicTo((x + (1.3295643f * scale)),(y + (-0.048531234f * scale)),(x + (1.3205781f * scale)),(y + (0.017368764f * scale)),(x + (1.2876282f * scale)),(y + (0.07727754f * scale)));
-		painter.cubicTo((x + (1.2756469f * scale)),(y + (0.098245025f * scale)),(x + (1.2337106f * scale)),(y + (0.14018124f * scale)),(x + (1.2127419f * scale)),(y + (0.15216374f * scale)));
-		painter.cubicTo((x + (1.1378556f * scale)),(y + (0.19709504f * scale)),(x + (1.0509881f * scale)),(y + (0.19709504f * scale)),(x + (0.9761019f * scale)),(y + (0.15216374f * scale)));
-		painter.cubicTo((x + (0.9551344f * scale)),(y + (0.14018124f * scale)),(x + (0.9131981f * scale)),(y + (0.098245025f * scale)),(x + (0.9012156f * scale)),(y + (0.07727754f * scale)));
-		painter.cubicTo((x + (0.8712619f * scale)),(y + (0.026355028f * scale)),(x + (0.8622756f * scale)),(y + (-0.027563721f * scale)),(x + (0.8712619f * scale)),(y + (-0.09645873f * scale)));
-		painter.cubicTo((x + (0.8862381f * scale)),(y + (-0.18332621f * scale)),(x + (0.92517936f * scale)),(y + (-0.25821248f * scale)),(x + (0.9880844f * scale)),(y + (-0.32411247f * scale)));
-		painter.cubicTo((x + (1.0539831f * scale)),(y + (-0.3870175f * scale)),(x + (1.1348606f * scale)),(y + (-0.42895374f * scale)),(x + (1.2307143f * scale)),(y + (-0.44992122f * scale)));
-		painter.cubicTo((x + (1.2876282f * scale)),(y + (-0.46190372f * scale)),(x + (1.3984594f * scale)),(y + (-0.46190372f * scale)),(x + (1.4943144f * scale)),(y + (-0.44692624f * scale)));
-		painter.cubicTo((x + (1.8477769f * scale)),(y + (-0.39600372f * scale)),(x + (2.0364895f * scale)),(y + (-0.18033123f * scale)),(x + (2.0634482f * scale)),(y + (0.19709504f * scale)));
-		painter.cubicTo((x + (2.0724356f * scale)),(y + (0.31391752f * scale)),(x + (2.0634482f * scale)),(y + (0.39779f * scale)),(x + (2.0364895f * scale)),(y + (0.48465753f * scale)));
-		painter.cubicTo((x + (1.9526169f * scale)),(y + (0.7302838f * scale)),(x + (1.7279594f * scale)),(y + (0.907015f * scale)),(x + (1.4583694f * scale)),(y + (0.93397504f * scale)));
-		painter.cubicTo((x + (1.3715006f * scale)),(y + (0.9429613f * scale)),(x + (1.3475369f * scale)),(y + (0.93697006f * scale)),(x + (1.2666606f * scale)),(y + (0.8830512f * scale)));
-		painter.cubicTo((x + (1.2187331f * scale)),(y + (0.8501025f * scale)),(x + (1.1947694f * scale)),(y + (0.83812004f * scale)),(x + (1.1708056f * scale)),(y + (0.8321288f * scale)));
-		painter.cubicTo((x + (1.1348606f * scale)),(y + (0.82314247f * scale)),(x + (1.0989156f * scale)),(y + (0.8321288f * scale)),(x + (1.0719569f * scale)),(y + (0.8560925f * scale)));
-		painter.cubicTo((x + (1.0390068f * scale)),(y + (0.8830512f * scale)),(x + (1.0240294f * scale)),(y + (0.93996507f * scale)),(x + (1.0240294f * scale)),(y + (1.038815f * scale)));
-		painter.cubicTo((x + (1.0240294f * scale)),(y + (1.137665f * scale)),(x + (1.0390068f * scale)),(y + (1.1945789f * scale)),(x + (1.0719569f * scale)),(y + (1.2215376f * scale)));
-		painter.cubicTo((x + (1.0989156f * scale)),(y + (1.2455013f * scale)),(x + (1.1348606f * scale)),(y + (1.2544875f * scale)),(x + (1.1708056f * scale)),(y + (1.2455013f * scale)));
-		painter.cubicTo((x + (1.1947694f * scale)),(y + (1.23951f * scale)),(x + (1.2187331f * scale)),(y + (1.2275276f * scale)),(x + (1.2666606f * scale)),(y + (1.1945789f * scale)));
-		painter.cubicTo((x + (1.3475369f * scale)),(y + (1.14066f * scale)),(x + (1.3715006f * scale)),(y + (1.1346688f * scale)),(x + (1.4583694f * scale)),(y + (1.1436551f * scale)));
-		painter.cubicTo((x + (1.7279594f * scale)),(y + (1.170615f * scale)),(x + (1.9526169f * scale)),(y + (1.3473463f * scale)),(x + (2.0364895f * scale)),(y + (1.5929725f * scale)));
-		painter.cubicTo((x + (2.0634482f * scale)),(y + (1.6798398f * scale)),(x + (2.0724356f * scale)),(y + (1.7637124f * scale)),(x + (2.0634482f * scale)),(y + (1.8775399f * scale)));
-		painter.cubicTo((x + (2.0334945f * scale)),(y + (2.2909112f * scale)),(x + (1.8178219f * scale)),(y + (2.5035875f * scale)),(x + (1.4044507f * scale)),(y + (2.5335424f * scale)));
-		painter.cubicTo((x + (1.3056006f * scale)),(y + (2.5395336f * scale)),(x + (1.2367057f * scale)),(y + (2.5335424f * scale)),(x + (1.1678107f * scale)),(y + (2.5095787f * scale)));
-		painter.cubicTo((x + (1.0330156f * scale)),(y + (2.4646475f * scale)),(x + (0.92218435f * scale)),(y + (2.3568113f * scale)),(x + (0.88324314f * scale)),(y + (2.2280061f * scale)));
-		painter.cubicTo((x + (0.8592794f * scale)),(y + (2.1381438f * scale)),(x + (0.8652706f * scale)),(y + (2.0662525f * scale)),(x + (0.9012156f * scale)),(y + (2.0003524f * scale)));
-		painter.cubicTo((x + (0.9131981f * scale)),(y + (1.9793849f * scale)),(x + (0.9551344f * scale)),(y + (1.9374487f * scale)),(x + (0.9761019f * scale)),(y + (1.9254663f * scale)));
-		painter.cubicTo((x + (1.0509881f * scale)),(y + (1.8805349f * scale)),(x + (1.1378556f * scale)),(y + (1.8805349f * scale)),(x + (1.2127419f * scale)),(y + (1.9254663f * scale)));
-		painter.cubicTo((x + (1.2337106f * scale)),(y + (1.9374487f * scale)),(x + (1.2756469f * scale)),(y + (1.9793849f * scale)),(x + (1.2876282f * scale)),(y + (2.0003524f * scale)));
-		painter.cubicTo((x + (1.3205781f * scale)),(y + (2.0602612f * scale)),(x + (1.3295643f * scale)),(y + (2.126161f * scale)),(x + (1.3085968f * scale)),(y + (2.1710937f * scale)));
-		painter.cubicTo((x + (1.2996106f * scale)),(y + (2.18607f * scale)),(x + (1.2936194f * scale)),(y + (2.1980524f * scale)),(x + (1.2576743f * scale)),(y + (2.2310026f * scale)));
-		painter.cubicTo((x + (1.2217281f * scale)),(y + (2.2669475f * scale)),(x + (1.2157382f * scale)),(y + (2.2759337f * scale)),(x + (1.2067518f * scale)),(y + (2.2939062f * scale)));
-		painter.cubicTo((x + (1.1977656f * scale)),(y + (2.3118787f * scale)),(x + (1.1977656f * scale)),(y + (2.314875f * scale)),(x + (1.1977656f * scale)),(y + (2.3388388f * scale)));
-		painter.cubicTo((x + (1.1977656f * scale)),(y + (2.3657975f * scale)),(x + (1.1977656f * scale)),(y + (2.3687925f * scale)),(x + (1.2037556f * scale)),(y + (2.380775f * scale)));
-		painter.cubicTo((x + (1.2307143f * scale)),(y + (2.4257061f * scale)),(x + (1.2936194f * scale)),(y + (2.4436786f * scale)),(x + (1.3894731f * scale)),(y + (2.4316974f * scale)));
-		painter.cubicTo((x + (1.5362506f * scale)),(y + (2.4107287f * scale)),(x + (1.6261132f * scale)),(y + (2.3328474f * scale)),(x + (1.6710457f * scale)),(y + (2.1770837f * scale)));
-		painter.cubicTo((x + (1.7009994f * scale)),(y + (2.0752387f * scale)),(x + (1.7159768f * scale)),(y + (1.9374487f * scale)),(x + (1.7129818f * scale)),(y + (1.7457399f * scale)));
-		painter.cubicTo((x + (1.7099856f * scale)),(y + (1.610945f * scale)),(x + (1.7039956f * scale)),(y + (1.5450449f * scale)),(x + (1.6860231f * scale)),(y + (1.47615f * scale)));
-		painter.cubicTo((x + (1.6500769f * scale)),(y + (1.3323689f * scale)),(x + (1.5751907f * scale)),(y + (1.2604775f * scale)),(x + (1.4433919f * scale)),(y + (1.2455013f * scale)));
-		painter.cubicTo((x + (1.3445419f * scale)),(y + (1.2335188f * scale)),(x + (1.2636644f * scale)),(y + (1.2604775f * scale)),(x + (1.1947694f * scale)),(y + (1.3263776f * scale)));
-		painter.cubicTo((x + (1.1258744f * scale)),(y + (1.3982687f * scale)),(x + (1.0839381f * scale)),(y + (1.5001137f * scale)),(x + (1.0749519f * scale)),(y + (1.6229262f * scale)));
-		painter.cubicTo((x + (1.0719569f * scale)),(y + (1.6798398f * scale)),(x + (1.0689607f * scale)),(y + (1.6828363f * scale)),(x + (1.0629693f * scale)),(y + (1.6948175f * scale)));
-		painter.cubicTo((x + (1.0539831f * scale)),(y + (1.7038038f * scale)),(x + (1.0360106f * scale)),(y + (1.71279f * scale)),(x + (1.0210332f * scale)),(y + (1.71279f * scale)));
-		painter.cubicTo((x + (1.0060569f * scale)),(y + (1.71279f * scale)),(x + (0.9850881f * scale)),(y + (1.7008088f * scale)),(x + (0.97909814f * scale)),(y + (1.6918225f * scale)));
-		painter.cubicTo((x + (0.97310686f * scale)),(y + (1.6828363f * scale)),(x + (0.9701106f * scale)),(y + (1.6768451f * scale)),(x + (0.9701106f * scale)),(y + (1.6379037f * scale)));
-		painter.cubicTo((x + (0.9641206f * scale)),(y + (1.5180862f * scale)),(x + (0.9401569f * scale)),(y + (1.4282224f * scale)),(x + (0.8922294f * scale)),(y + (1.3233826f * scale)));
-		painter.cubicTo((x + (0.8562844f * scale)),(y + (1.2514913f * scale)),(x + (0.79637563f * scale)),(y + (1.170615f * scale)),(x + (0.74245685f * scale)),(y + (1.1166964f * scale)));
-		painter.lineTo((x + (0.7244844f * scale)),(y + (1.1017187f * scale)));
-		painter.lineTo((x + (0.7244844f * scale)),(y + (1.7996588f * scale)));
-		painter.cubicTo((x + (0.7244844f * scale)),(y + (2.5784738f * scale)),(x + (0.72748065f * scale)),(y + (2.5095787f * scale)),(x + (0.7035169f * scale)),(y + (2.5275512f * scale)));
-		painter.cubicTo((x + (0.6945306f * scale)),(y + (2.5335424f * scale)),(x + (0.6915344f * scale)),(y + (2.5335424f * scale)),(x + (0.6495981f * scale)),(y + (2.5335424f * scale)));
-		painter.cubicTo((x + (0.6076619f * scale)),(y + (2.5335424f * scale)),(x + (0.6046669f * scale)),(y + (2.5335424f * scale)),(x + (0.59568065f * scale)),(y + (2.5275512f * scale)));
-		painter.cubicTo((x + (0.5896894f * scale)),(y + (2.52156f * scale)),(x + (0.58369815f * scale)),(y + (2.51557f * scale)),(x + (0.58070314f * scale)),(y + (2.5095787f * scale)));
-		painter.cubicTo((x + (0.57471186f * scale)),(y + (2.4975975f * scale)),(x + (0.57471186f * scale)),(y + (2.386765f * scale)),(x + (0.57471186f * scale)),(y + (1.03582f * scale)));
-		painter.lineTo((x + (0.5777081f * scale)),(y + (-0.42895374f * scale)));
-		painter.lineTo((x + (0.58369815f * scale)),(y + (-0.43793997f * scale)));
-		painter.cubicTo((x + (0.5896894f * scale)),(y + (-0.44392997f * scale)),(x + (0.59568065f * scale)),(y + (-0.44992122f * scale)),(x + (0.6016719f * scale)),(y + (-0.45291623f * scale)));
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGKeySignaturePainter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGKeySignaturePainter.java
deleted file mode 100644
index f2389ba..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGKeySignaturePainter.java
+++ /dev/null
@@ -1,144 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab.painters;
-
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-public class TGKeySignaturePainter {
-	
-	public static void paintSharp(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (0.4330491f * scale)),(y + (-0.7961011300329119f * scale)));
-		painter.cubicTo((x + (0.44892004f * scale)),(y + (-0.8051702223718167f * scale)),(x + (0.47386006f * scale)),(y + (-0.7983684030594305f * scale)),(x + (0.48292914f * scale)),(y + (-0.7779629465192557f * scale)));
-		painter.cubicTo((x + (0.48746368f * scale)),(y + (-0.7688938558101654f * scale)),(x + (0.48746368f * scale)),(y + (-0.7620920382440091f * scale)),(x + (0.48746368f * scale)),(y + (-0.6033829182386399f * scale)));
-		painter.cubicTo((x + (0.48746368f * scale)),(y + (-0.5104247212409974f * scale)),(x + (0.48746368f * scale)),(y + (-0.435604739189148f * scale)),(x + (0.48973095f * scale)),(y + (-0.435604739189148f * scale)));
-		painter.cubicTo((x + (0.48973095f * scale)),(y + (-0.435604739189148f * scale)),(x + (0.51013637f * scale)),(y + (-0.4446738243103028f * scale)),(x + (0.5350764f * scale)),(y + (-0.45374290943145756f * scale)));
-		painter.cubicTo((x + (0.5872237f * scale)),(y + (-0.47414835095405583f * scale)),(x + (0.5940255f * scale)),(y + (-0.4764156520366669f * scale)),(x + (0.6076291f * scale)),(y + (-0.46507926583290105f * scale)));
-		painter.cubicTo((x + (0.62350005f * scale)),(y + (-0.45374290943145756f * scale)),(x + (0.62350005f * scale)),(y + (-0.45147563815116887f * scale)),(x + (0.62350005f * scale)),(y + (-0.36078472733497624f * scale)));
-		painter.cubicTo((x + (0.62350005f * scale)),(y + (-0.2836974740028382f * scale)),(x + (0.62350005f * scale)),(y + (-0.2768956303596497f * scale)),(x + (0.6189655f * scale)),(y + (-0.2700937867164612f * scale)));
-		painter.cubicTo((x + (0.6166982f * scale)),(y + (-0.26555924415588383f * scale)),(x + (0.61216366f * scale)),(y + (-0.26102470159530644f * scale)),(x + (0.6098964f * scale)),(y + (-0.25875746011734013f * scale)));
-		painter.cubicTo((x + (0.6053619f * scale)),(y + (-0.25649015903472905f * scale)),(x + (0.5781546f * scale)),(y + (-0.24288653135299687f * scale)),(x + (0.54641277f * scale)),(y + (-0.23155020475387578f * scale)));
-		painter.lineTo((x + (0.48973095f * scale)),(y + (-0.20661019086837773f * scale)));
-		painter.lineTo((x + (0.48746368f * scale)),(y + (-0.022961068153381392f * scale)));
-		painter.cubicTo((x + (0.48746368f * scale)),(y + (0.0767989873886108f * scale)),(x + (0.48746368f * scale)),(y + (0.16068805456161495f * scale)),(x + (0.48973095f * scale)),(y + (0.16068805456161495f * scale)));
-		painter.cubicTo((x + (0.48973095f * scale)),(y + (0.16068805456161495f * scale)),(x + (0.51013637f * scale)),(y + (0.15161896944046016f * scale)),(x + (0.5350764f * scale)),(y + (0.14254988431930538f * scale)));
-		painter.cubicTo((x + (0.5872237f * scale)),(y + (0.12214435338973995f * scale)),(x + (0.5940255f * scale)),(y + (0.11987711191177364f * scale)),(x + (0.6076291f * scale)),(y + (0.13121343851089473f * scale)));
-		painter.cubicTo((x + (0.62350005f * scale)),(y + (0.14254988431930538f * scale)),(x + (0.62350005f * scale)),(y + (0.14481712579727168f * scale)),(x + (0.62350005f * scale)),(y + (0.2355080366134643f * scale)));
-		painter.cubicTo((x + (0.62350005f * scale)),(y + (0.3125954389572143f * scale)),(x + (0.62350005f * scale)),(y + (0.31939716339111324f * scale)),(x + (0.6189655f * scale)),(y + (0.3261990070343017f * scale)));
-		painter.cubicTo((x + (0.6166982f * scale)),(y + (0.3307336091995239f * scale)),(x + (0.61216366f * scale)),(y + (0.3352680921554565f * scale)),(x + (0.6098964f * scale)),(y + (0.3375353336334228f * scale)));
-		painter.cubicTo((x + (0.6053619f * scale)),(y + (0.33980269432067867f * scale)),(x + (0.5781546f * scale)),(y + (0.35340626239776607f * scale)),(x + (0.54641277f * scale)),(y + (0.36474258899688716f * scale)));
-		painter.lineTo((x + (0.48973095f * scale)),(y + (0.3896826028823852f * scale)));
-		painter.lineTo((x + (0.48746368f * scale)),(y + (0.5801335096359252f * scale)));
-		painter.cubicTo((x + (0.48746368f * scale)),(y + (0.7524463653564453f * scale)),(x + (0.4851964f * scale)),(y + (0.7728516578674316f * scale)),(x + (0.48292914f * scale)),(y + (0.7796536207199096f * scale)));
-		painter.cubicTo((x + (0.4670582f * scale)),(y + (0.8068609952926635f * scale)),(x + (0.42851457f * scale)),(y + (0.8068609952926635f * scale)),(x + (0.4126437f * scale)),(y + (0.7796536207199096f * scale)));
-		painter.cubicTo((x + (0.41037643f * scale)),(y + (0.7728516578674316f * scale)),(x + (0.40810916f * scale)),(y + (0.754713487625122f * scale)),(x + (0.40810916f * scale)),(y + (0.5960044384002685f * scale)));
-		painter.lineTo((x + (0.40810916f * scale)),(y + (0.42142446041107173f * scale)));
-		painter.lineTo((x + (0.31061637f * scale)),(y + (0.4599680423736572f * scale)));
-		painter.lineTo((x + (0.21539094f * scale)),(y + (0.4985117435455322f * scale)));
-		painter.lineTo((x + (0.21539094f * scale)),(y + (0.6821606874465942f * scale)));
-		painter.cubicTo((x + (0.21539094f * scale)),(y + (0.8771464347839355f * scale)),(x + (0.21539094f * scale)),(y + (0.8726117134094238f * scale)),(x + (0.20405458f * scale)),(y + (0.8839481592178344f * scale)));
-		painter.cubicTo((x + (0.19952002f * scale)),(y + (0.8907500028610229f * scale)),(x + (0.18364911f * scale)),(y + (0.8975517272949218f * scale)),(x + (0.1768473f * scale)),(y + (0.8975517272949218f * scale)));
-		painter.cubicTo((x + (0.1677782f * scale)),(y + (0.8975517272949218f * scale)),(x + (0.15190728f * scale)),(y + (0.8907500028610229f * scale)),(x + (0.14737274f * scale)),(y + (0.8839481592178344f * scale)));
-		painter.cubicTo((x + (0.13603638f * scale)),(y + (0.8726117134094238f * scale)),(x + (0.13603638f * scale)),(y + (0.8771464347839355f * scale)),(x + (0.13603638f * scale)),(y + (0.7002989768981933f * scale)));
-		painter.cubicTo((x + (0.13603638f * scale)),(y + (0.6073408842086792f * scale)),(x + (0.13603638f * scale)),(y + (0.532520842552185f * scale)),(x + (0.1337691f * scale)),(y + (0.532520842552185f * scale)));
-		painter.cubicTo((x + (0.1337691f * scale)),(y + (0.532520842552185f * scale)),(x + (0.113363646f * scale)),(y + (0.5415899276733398f * scale)),(x + (0.08842365f * scale)),(y + (0.5506590127944946f * scale)));
-		painter.cubicTo((x + (0.036276367f * scale)),(y + (0.5710644245147705f * scale)),(x + (0.029474549f * scale)),(y + (0.5733317852020263f * scale)),(x + (0.01587091f * scale)),(y + (0.5619953393936157f * scale)));
-		painter.cubicTo((x + (0.0f * scale)),(y + (0.5506590127944946f * scale)),(x + (0.0f * scale)),(y + (0.5483916521072387f * scale)),(x + (0.0f * scale)),(y + (0.4577008008956909f * scale)));
-		painter.cubicTo((x + (0.0f * scale)),(y + (0.3806135177612304f * scale)),(x + (0.0f * scale)),(y + (0.3738117933273315f * scale)),(x + (0.004534546f * scale)),(y + (0.36700983047485347f * scale)));
-		painter.cubicTo((x + (0.0068018185f * scale)),(y + (0.36247534751892085f * scale)),(x + (0.011336365f * scale)),(y + (0.3579407453536987f * scale)),(x + (0.013603637f * scale)),(y + (0.3556735038757324f * scale)));
-		painter.cubicTo((x + (0.018138183f * scale)),(y + (0.35340626239776607f * scale)),(x + (0.04534546f * scale)),(y + (0.33980269432067867f * scale)),(x + (0.07708728f * scale)),(y + (0.328466248512268f * scale)));
-		painter.lineTo((x + (0.13603638f * scale)),(y + (0.30352623462677f * scale)));
-		painter.lineTo((x + (0.13603638f * scale)),(y + (0.11987711191177364f * scale)));
-		painter.cubicTo((x + (0.13603638f * scale)),(y + (0.020117175579071f * scale)),(x + (0.13603638f * scale)),(y + (-0.06377195119857793f * scale)),(x + (0.1337691f * scale)),(y + (-0.06377195119857793f * scale)));
-		painter.cubicTo((x + (0.1337691f * scale)),(y + (-0.06377195119857793f * scale)),(x + (0.113363646f * scale)),(y + (-0.054702806472778365f * scale)),(x + (0.08842365f * scale)),(y + (-0.04563372135162358f * scale)));
-		painter.cubicTo((x + (0.036276367f * scale)),(y + (-0.0252283096313477f * scale)),(x + (0.029474549f * scale)),(y + (-0.022961068153381392f * scale)),(x + (0.01587091f * scale)),(y + (-0.034297394752502486f * scale)));
-		painter.cubicTo((x + (0.0f * scale)),(y + (-0.04563372135162358f * scale)),(x + (0.0f * scale)),(y + (-0.047901022434234664f * scale)),(x + (0.0f * scale)),(y + (-0.13859199285507207f * scale)));
-		painter.cubicTo((x + (0.0f * scale)),(y + (-0.21567927598953252f * scale)),(x + (0.0f * scale)),(y + (-0.222481119632721f * scale)),(x + (0.004534546f * scale)),(y + (-0.2292829036712647f * scale)));
-		painter.cubicTo((x + (0.0068018185f * scale)),(y + (-0.23381744623184209f * scale)),(x + (0.011336365f * scale)),(y + (-0.23835204839706425f * scale)),(x + (0.013603637f * scale)),(y + (-0.2406192302703858f * scale)));
-		painter.cubicTo((x + (0.018138183f * scale)),(y + (-0.24288653135299687f * scale)),(x + (0.04534546f * scale)),(y + (-0.25649015903472905f * scale)),(x + (0.07708728f * scale)),(y + (-0.2678265452384949f * scale)));
-		painter.lineTo((x + (0.13603638f * scale)),(y + (-0.29276655912399296f * scale)));
-		painter.lineTo((x + (0.13603638f * scale)),(y + (-0.483217465877533f * scale)));
-		painter.cubicTo((x + (0.13603638f * scale)),(y + (-0.6555302023887635f * scale)),(x + (0.13830365f * scale)),(y + (-0.6759356662631035f * scale)),(x + (0.14057092f * scale)),(y + (-0.6827374875545502f * scale)));
-		painter.cubicTo((x + (0.15644182f * scale)),(y + (-0.7099447578191758f * scale)),(x + (0.19498548f * scale)),(y + (-0.7099447578191758f * scale)),(x + (0.2108564f * scale)),(y + (-0.6827374875545502f * scale)));
-		painter.cubicTo((x + (0.21312366f * scale)),(y + (-0.6759356662631035f * scale)),(x + (0.21539094f * scale)),(y + (-0.6577974885702134f * scale)),(x + (0.21539094f * scale)),(y + (-0.4990883648395539f * scale)));
-		painter.lineTo((x + (0.21765819f * scale)),(y + (-0.3245083570480347f * scale)));
-		painter.lineTo((x + (0.31288365f * scale)),(y + (-0.36305199861526494f * scale)));
-		painter.lineTo((x + (0.40810916f * scale)),(y + (-0.4015956103801728f * scale)));
-		painter.lineTo((x + (0.40810916f * scale)),(y + (-0.5852447479963303f * scale)));
-		painter.cubicTo((x + (0.40810916f * scale)),(y + (-0.7575574919581414f * scale)),(x + (0.40810916f * scale)),(y + (-0.7688938558101654f * scale)),(x + (0.4126437f * scale)),(y + (-0.7779629465192557f * scale)));
-		painter.cubicTo((x + (0.41717824f * scale)),(y + (-0.7870320381596685f * scale)),(x + (0.4217128f * scale)),(y + (-0.7915665844455362f * scale)),(x + (0.4330491f * scale)),(y + (-0.7961011300329119f * scale)));
-		painter.moveTo((x + (0.40810916f * scale)),(y + (0.008780729770660356f * scale)));
-		painter.lineTo((x + (0.40810916f * scale)),(y + (-0.1748683333396912f * scale)));
-		painter.lineTo((x + (0.31061637f * scale)),(y + (-0.13632469177246098f * scale)));
-		painter.lineTo((x + (0.21539094f * scale)),(y + (-0.09778105020523076f * scale)));
-		painter.lineTo((x + (0.21539094f * scale)),(y + (0.08813531398773189f * scale)));
-		painter.lineTo((x + (0.21539094f * scale)),(y + (0.27178437709808345f * scale)));
-		painter.lineTo((x + (0.22219275f * scale)),(y + (0.26951713562011714f * scale)));
-		painter.cubicTo((x + (0.22672729f * scale)),(y + (0.26724989414215083f * scale)),(x + (0.26980546f * scale)),(y + (0.24911172389984126f * scale)),(x + (0.3196855f * scale)),(y + (0.2309735536575317f * scale)));
-		painter.lineTo((x + (0.40810916f * scale)),(y + (0.19469715356826778f * scale)));
-		painter.lineTo((x + (0.40810916f * scale)),(y + (0.008780729770660356f * scale)));
-	}
-	
-	public static void paintFlat(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (0.036081146f * scale)),(y + (-1.2279010191746056f * scale)));
-		painter.cubicTo((x + (0.066563375f * scale)),(y + (-1.2334432420507073f * scale)),(x + (0.11644338f * scale)),(y + (-1.2279010191746056f * scale)),(x + (0.13584116f * scale)),(y + (-1.2140454626828432f * scale)));
-		painter.cubicTo((x + (0.14138338f * scale)),(y + (-1.2112743496149778f * scale)),(x + (0.14138338f * scale)),(y + (-1.1807921263575554f * scale)),(x + (0.13307005f * scale)),(y + (-0.729100923538208f * scale)));
-		painter.cubicTo((x + (0.12752782f * scale)),(y + (-0.4658453869819641f * scale)),(x + (0.12475671f * scale)),(y + (-0.24969867944717405f * scale)),(x + (0.12475671f * scale)),(y + (-0.24969867944717405f * scale)));
-		painter.cubicTo((x + (0.12475671f * scale)),(y + (-0.24692759990692137f * scale)),(x + (0.13584116f * scale)),(y + (-0.2524698185920715f * scale)),(x + (0.1469256f * scale)),(y + (-0.26078311681747435f * scale)));
-		painter.cubicTo((x + (0.20511894f * scale)),(y + (-0.29957870721817015f * scale)),(x + (0.27716786f * scale)),(y + (-0.32174758195877073f * scale)),(x + (0.34921673f * scale)),(y + (-0.3272898006439209f * scale)));
-		painter.cubicTo((x + (0.42403674f * scale)),(y + (-0.3300609993934631f * scale)),(x + (0.4850012f * scale)),(y + (-0.30789206504821776f * scale)),(x + (0.53765225f * scale)),(y + (-0.2552408981323242f * scale)));
-		painter.cubicTo((x + (0.5903034f * scale)),(y + (-0.2053608703613281f * scale)),(x + (0.6180146f * scale)),(y + (-0.13885424613952635f * scale)),(x + (0.6235568f * scale)),(y + (-0.06680534362792967f * scale)));
-		painter.cubicTo((x + (0.6263279f * scale)),(y + (-0.014154295921325666f * scale)),(x + (0.61524343f * scale)),(y + (0.03295471191406252f * scale)),(x + (0.5903034f * scale)),(y + (0.08283462047576906f * scale)));
-		painter.cubicTo((x + (0.55150783f * scale)),(y + (0.1576546621322632f * scale)),(x + (0.49608564f * scale)),(y + (0.21030582904815676f * scale)),(x + (0.32981896f * scale)),(y + (0.32392134189605715f * scale)));
-		painter.cubicTo((x + (0.2245167f * scale)),(y + (0.3959703636169434f * scale)),(x + (0.19680561f * scale)),(y + (0.41813923835754396f * scale)),(x + (0.16355227f * scale)),(y + (0.4569347095489502f * scale)));
-		painter.cubicTo((x + (0.1469256f * scale)),(y + (0.4735613059997559f * scale)),(x + (0.12752782f * scale)),(y + (0.49295916080474855f * scale)),(x + (0.12198559f * scale)),(y + (0.495730299949646f * scale)));
-		painter.cubicTo((x + (0.0970456f * scale)),(y + (0.5123568964004517f * scale)),(x + (0.06933448f * scale)),(y + (0.5095858764648438f * scale)),(x + (0.04716559f * scale)),(y + (0.4901880216598511f * scale)));
-		painter.cubicTo((x + (0.04162337f * scale)),(y + (0.48187472343444826f * scale)),(x + (0.036081146f * scale)),(y + (0.4735613059997559f * scale)),(x + (0.033310037f * scale)),(y + (0.4652481269836426f * scale)));
-		painter.cubicTo((x + (0.030538924f * scale)),(y + (0.4597058486938477f * scale)),(x + (0.024996702f * scale)),(y + (0.16319682121276857f * scale)),(x + (0.016683366f * scale)),(y + (-0.3051209259033203f * scale)));
-		painter.cubicTo((x + (0.0083700325f * scale)),(y + (-0.7235587048530578f * scale)),(x + (0.00282781f * scale)),(y + (-1.097658793926239f * scale)),(x + (5.669861E-5f * scale)),(y + (-1.1392254564166069f * scale)));
-		painter.lineTo((x + (5.669861E-5f * scale)),(y + (-1.2112743496149778f * scale)));
-		painter.lineTo((x + (0.011141145f * scale)),(y + (-1.2168165738880634f * scale)));
-		painter.cubicTo((x + (0.016683366f * scale)),(y + (-1.2195876850932836f * scale)),(x + (0.027767813f * scale)),(y + (-1.225129907503724f * scale)),(x + (0.036081146f * scale)),(y + (-1.2279010191746056f * scale)));
-		painter.moveTo((x + (0.32981896f * scale)),(y + (-0.21090314865112303f * scale)));
-		painter.cubicTo((x + (0.31042117f * scale)),(y + (-0.22198770523071287f * scale)),(x + (0.27993897f * scale)),(y + (-0.22475872516632078f * scale)),(x + (0.25499895f * scale)),(y + (-0.21644542694091795f * scale)));
-		painter.cubicTo((x + (0.20511894f * scale)),(y + (-0.2025898504257202f * scale)),(x + (0.16355227f * scale)),(y + (-0.15825198173522947f * scale)),(x + (0.1469256f * scale)),(y + (-0.10005865573883055f * scale)));
-		painter.cubicTo((x + (0.14138338f * scale)),(y + (-0.07234762191772459f * scale)),(x + (0.13584116f * scale)),(y + (0.16596796035766603f * scale)),(x + (0.14138338f * scale)),(y + (0.2574147176742554f * scale)));
-		painter.cubicTo((x + (0.14415449f * scale)),(y + (0.2962103080749512f * scale)),(x + (0.14415449f * scale)),(y + (0.33223464012146f * scale)),(x + (0.1469256f * scale)),(y + (0.3405479383468628f * scale)));
-		painter.lineTo((x + (0.14969671f * scale)),(y + (0.35163249492645265f * scale)));
-		painter.lineTo((x + (0.19126338f * scale)),(y + (0.3156080436706543f * scale)));
-		painter.cubicTo((x + (0.24945672f * scale)),(y + (0.2657280158996582f * scale)),(x + (0.30765006f * scale)),(y + (0.2075346899032593f * scale)),(x + (0.33536118f * scale)),(y + (0.1687390995025635f * scale)));
-		painter.cubicTo((x + (0.36307228f * scale)),(y + (0.12994362831115724f * scale)),(x + (0.39078343f * scale)),(y + (0.07729246139526369f * scale)),(x + (0.40186784f * scale)),(y + (0.03849699020385744f * scale)));
-		painter.cubicTo((x + (0.41849452f * scale)),(y + (-0.02523873329162596f * scale)),(x + (0.41018116f * scale)),(y + (-0.09728751659393309f * scale)),(x + (0.38524118f * scale)),(y + (-0.1527098226547241f * scale)));
-		painter.cubicTo((x + (0.37138563f * scale)),(y + (-0.18042085647583006f * scale)),(x + (0.35475895f * scale)),(y + (-0.19981859207153319f * scale)),(x + (0.32981896f * scale)),(y + (-0.21090314865112303f * scale)));
-	}
-	
-	public static void paintNatural(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (0.038880464f * scale)),(y + (-0.99784582760185f * scale)));
-		painter.cubicTo((x + (0.061049357f * scale)),(y + (-1.0033880504779518f * scale)),(x + (0.11092936f * scale)),(y + (-0.99784582760185f * scale)),(x + (0.13032715f * scale)),(y + (-0.9839902706444263f * scale)));
-		painter.cubicTo((x + (0.13309824f * scale)),(y + (-0.9812191594392061f * scale)),(x + (0.13309824f * scale)),(y + (-0.9396524876356125f * scale)),(x + (0.13032715f * scale)),(y + (-0.7429035902023315f * scale)));
-		painter.cubicTo((x + (0.12755603f * scale)),(y + (-0.6098902225494385f * scale)),(x + (0.12755603f * scale)),(y + (-0.5018168985843658f * scale)),(x + (0.12755603f * scale)),(y + (-0.5018168985843658f * scale)));
-		painter.cubicTo((x + (0.12755603f * scale)),(y + (-0.49904578924179077f * scale)),(x + (0.1968338f * scale)),(y + (-0.5101302564144135f * scale)),(x + (0.28273827f * scale)),(y + (-0.523985743522644f * scale)));
-		painter.cubicTo((x + (0.37141383f * scale)),(y + (-0.5406124293804169f * scale)),(x + (0.4406916f * scale)),(y + (-0.5489257574081421f * scale)),(x + (0.44346273f * scale)),(y + (-0.5489257574081421f * scale)));
-		painter.cubicTo((x + (0.4573183f * scale)),(y + (-0.546154648065567f * scale)),(x + (0.4684027f * scale)),(y + (-0.5350702106952667f * scale)),(x + (0.47671604f * scale)),(y + (-0.521214634180069f * scale)));
-		painter.lineTo((x + (0.48225826f * scale)),(y + (-0.5101302564144135f * scale)));
-		painter.lineTo((x + (0.49057162f * scale)),(y + (0.29072093963623047f * scale)));
-		painter.cubicTo((x + (0.49888495f * scale)),(y + (0.9336187839508057f * scale)),(x + (0.50165606f * scale)),(y + (1.0915722846984863f * scale)),(x + (0.49888495f * scale)),(y + (1.0915722846984863f * scale)));
-		painter.cubicTo((x + (0.49611384f * scale)),(y + (1.0943431854248047f * scale)),(x + (0.48780048f * scale)),(y + (1.0971143245697021f * scale)),(x + (0.47948715f * scale)),(y + (1.0998854637145996f * scale)));
-		painter.cubicTo((x + (0.4573183f * scale)),(y + (1.108198881149292f * scale)),(x + (0.4129805f * scale)),(y + (1.108198881149292f * scale)),(x + (0.3908116f * scale)),(y + (1.0998854637145996f * scale)));
-		painter.cubicTo((x + (0.3824983f * scale)),(y + (1.0971143245697021f * scale)),(x + (0.37418494f * scale)),(y + (1.0943431854248047f * scale)),(x + (0.37141383f * scale)),(y + (1.0915722846984863f * scale)));
-		painter.cubicTo((x + (0.36864272f * scale)),(y + (1.0888011455535889f * scale)),(x + (0.36864272f * scale)),(y + (1.0472345352172852f * scale)),(x + (0.37141383f * scale)),(y + (0.8504854440689087f * scale)));
-		painter.cubicTo((x + (0.37418494f * scale)),(y + (0.7174720764160156f * scale)),(x + (0.37418494f * scale)),(y + (0.6093987226486206f * scale)),(x + (0.37418494f * scale)),(y + (0.6093987226486206f * scale)));
-		painter.cubicTo((x + (0.37418494f * scale)),(y + (0.6066277027130127f * scale)),(x + (0.30490717f * scale)),(y + (0.617712140083313f * scale)),(x + (0.21900271f * scale)),(y + (0.6315675973892212f * scale)));
-		painter.cubicTo((x + (0.13032715f * scale)),(y + (0.6481943130493164f * scale)),(x + (0.061049357f * scale)),(y + (0.6565077304840088f * scale)),(x + (0.058278244f * scale)),(y + (0.6565077304840088f * scale)));
-		painter.cubicTo((x + (0.044422686f * scale)),(y + (0.6537365913391113f * scale)),(x + (0.033338238f * scale)),(y + (0.6426520347595215f * scale)),(x + (0.025024906f * scale)),(y + (0.6287965774536133f * scale)));
-		painter.lineTo((x + (0.019482683f * scale)),(y + (0.6149410009384155f * scale)));
-		painter.lineTo((x + (0.011169349f * scale)),(y + (-0.08060795068740845f * scale)));
-		painter.cubicTo((x + (0.005627127f * scale)),(y + (-0.46302133798599243f * scale)),(x + (0.002856015f * scale)),(y + (-0.8232658207416534f * scale)),(x + (8.490361E-5f * scale)),(y + (-0.8814591467380524f * scale)));
-		painter.lineTo((x + (8.490361E-5f * scale)),(y + (-0.9839902706444263f * scale)));
-		painter.lineTo((x + (0.01394046f * scale)),(y + (-0.9895324930548668f * scale)));
-		painter.cubicTo((x + (0.022253795f * scale)),(y + (-0.9923036047257483f * scale)),(x + (0.033338238f * scale)),(y + (-0.9950747163966298f * scale)),(x + (0.038880464f * scale)),(y + (-0.99784582760185f * scale)));
-		painter.moveTo((x + (0.38526937f * scale)),(y + (-0.22193467617034912f * scale)));
-		painter.cubicTo((x + (0.38526937f * scale)),(y + (-0.25241684913635254f * scale)),(x + (0.38526937f * scale)),(y + (-0.26073020696640015f * scale)),(x + (0.3824983f * scale)),(y + (-0.26073020696640015f * scale)));
-		painter.cubicTo((x + (0.37141383f * scale)),(y + (-0.26073020696640015f * scale)),(x + (0.12478492f * scale)),(y + (-0.21916353702545166f * scale)),(x + (0.12478492f * scale)),(y + (-0.2163923978805542f * scale)));
-		painter.cubicTo((x + (0.12201381f * scale)),(y + (-0.2163923978805542f * scale)),(x + (0.11647158f * scale)),(y + (0.3655409812927246f * scale)),(x + (0.11647158f * scale)),(y + (0.36831212043762207f * scale)));
-		painter.cubicTo((x + (0.1192427f * scale)),(y + (0.36831212043762207f * scale)),(x + (0.37418494f * scale)),(y + (0.3267453908920288f * scale)),(x + (0.37695605f * scale)),(y + (0.32397425174713135f * scale)));
-		painter.cubicTo((x + (0.37695605f * scale)),(y + (0.32397425174713135f * scale)),(x + (0.38526937f * scale)),(y + (-0.09446346759796143f * scale)),(x + (0.38526937f * scale)),(y + (-0.22193467617034912f * scale)));
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGNotePainter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGNotePainter.java
deleted file mode 100644
index 5439a6c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGNotePainter.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab.painters;
-
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-public class TGNotePainter {
-	
-	public static void paintFooter(TGPainter painter, float x, float y,int dir,float scale){
-		painter.moveTo(( x + (0.64375f * scale) ),( y + ((0.00625f * scale) * dir) ));
-		painter.cubicTo(( x + (0.659375f * scale) ),( y + ((0.0f * scale) * dir) ),( x + (0.69375f * scale) ),( y + ((0.00625f * scale) * dir) ),( x + (0.70625f * scale) ),( y + ((0.0125f * scale) * dir) ));
-		painter.cubicTo(( x + (0.725f * scale) ),( y + ((0.025f * scale) * dir) ),( x + (0.73125f * scale) ),( y + ((0.03125f * scale) * dir) ),( x + (0.75f * scale) ),( y + ((0.065625f * scale) * dir) ));
-		painter.cubicTo(( x + (0.815625f * scale) ),( y + ((0.1875f * scale) * dir) ),( x + (0.86875f * scale) ),( y + ((0.3375f * scale) * dir) ),( x + (0.890625f * scale) ),( y + ((0.4625f * scale) * dir) ));
-		painter.cubicTo(( x + (0.934375f * scale) ),( y + ((0.70937496f * scale) * dir) ),( x + (0.903125f * scale) ),( y + ((0.890625f * scale) * dir) ),( x + (0.778125f * scale) ),( y + ((1.096875f * scale) * dir) ));
-		painter.cubicTo(( x + (0.721875f * scale) ),( y + ((1.19375f * scale) * dir) ),( x + (0.653125f * scale) ),( y + ((1.28125f * scale) * dir) ),( x + (0.5f * scale) ),( y + ((1.453125f * scale) * dir) ));
-		painter.cubicTo(( x + (0.340625f * scale) ),( y + ((1.6375f * scale) * dir) ),( x + (0.290625f * scale) ),( y + ((1.703125f * scale) * dir) ),( x + (0.228125f * scale) ),( y + ((1.790625f * scale) * dir) ));
-		painter.cubicTo(( x + (0.165625f * scale) ),( y + ((1.8875f * scale) * dir) ),( x + (0.121875f * scale) ),( y + ((1.978125f * scale) * dir) ),( x + (0.09375f * scale) ),( y + ((2.06875f * scale) * dir) ));
-		painter.cubicTo(( x + (0.078125f * scale) ),( y + ((2.125f * scale) * dir) ),( x + (0.065625f * scale) ),( y + ((2.209375f * scale) * dir) ),( x + (0.065625f * scale) ),( y + ((2.25625f * scale) * dir) ));
-		painter.lineTo(( x + (0.065625f * scale) ),( y + ((2.271875f * scale) * dir) ));
-		painter.lineTo(( x + (0.034375f * scale) ),( y + ((2.271875f * scale) * dir) ));
-		painter.lineTo(( x + (0.0f * scale) ),( y + ((2.271875f * scale) * dir) ));
-		painter.lineTo(( x + (0.0f * scale) ),( y + ((1.88125f * scale) * dir) ));
-		painter.lineTo(( x + (0.0f * scale) ),( y + ((1.490625f * scale) * dir) ));
-		painter.lineTo(( x + (0.034375f * scale) ),( y + ((1.490625f * scale) * dir) ));
-		painter.lineTo(( x + (0.06875f * scale) ),( y + ((1.490625f * scale) * dir) ));
-		painter.lineTo(( x + (0.15f * scale) ),( y + ((1.434375f * scale) * dir) ));
-		painter.cubicTo(( x + (0.38125f * scale) ),( y + ((1.28125f * scale) * dir) ),( x + (0.521875f * scale) ),( y + ((1.15625f * scale) * dir) ),( x + (0.621875f * scale) ),( y + ((1.021875f * scale) * dir) ));
-		painter.cubicTo(( x + (0.74375f * scale) ),( y + ((0.85625f * scale) * dir) ),( x + (0.778125f * scale) ),( y + ((0.71874994f * scale) * dir) ),( x + (0.74375f * scale) ),( y + ((0.5124999f * scale) * dir) ));
-		painter.cubicTo(( x + (0.721875f * scale) ),( y + ((0.38125f * scale) * dir) ),( x + (0.66875f * scale) ),( y + ((0.246875f * scale) * dir) ),( x + (0.6f * scale) ),( y + ((0.128125f * scale) * dir) ));
-		painter.cubicTo(( x + (0.584375f * scale) ),( y + ((0.10625f * scale) * dir) ),( x + (0.58125f * scale) ),( y + ((0.096875f * scale) * dir) ),( x + (0.58125f * scale) ),( y + ((0.0875f * scale) * dir) ));
-		painter.cubicTo(( x + (0.58125f * scale) ),( y + ((0.05f * scale) * dir) ),( x + (0.60625f * scale) ),( y + ((0.01875f * scale) * dir) ),( x + (0.64375f * scale) ),( y + ((0.00625f * scale) * dir) ));
-	}
-	
-	public static void paintNote(TGPainter painter, float x, float y,float scale){
-		painter.moveTo( x ,( y + (0.66f * scale) ));
-		painter.cubicTo( x,( y + (0.83f * scale) ),( x + (0.166f * scale) ),( y + (1.0f * scale) ),( x + (0.33f * scale) ),( y + (1.0f * scale) ));
-		painter.cubicTo(( x + (0.83f * scale) ),( y + (1.0f * scale) ),( x + (1.33f * scale) ),( y + (0.66f * scale) ),( x + (1.33f * scale) ),( y + (0.33f * scale) ));
-		painter.cubicTo(( x + (1.33f * scale) ),( y + (0.166f * scale) ),( x + (1.16f * scale) ), y ,( x + (1.0f * scale) ), y );
-		painter.cubicTo(( x + (0.5f * scale) ), y , x ,( y + (0.33f * scale) ), x ,( y + (0.66f * scale) ));
-	}
-	
-	public static void paintHarmonic(TGPainter painter, float x, float y,float scale){
-		painter.moveTo(x ,(y + (0.5f * scale)));
-		painter.lineTo((x + (0.665f * scale )) ,(y + (1.0f * scale)));
-		painter.lineTo((x + (1.33f * scale)), (y + (0.5f*scale)));
-		painter.lineTo((x + (0.665f * scale)) ,y);
-		painter.lineTo(x ,(y + (0.5f * scale) ));
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGSilencePainter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGSilencePainter.java
deleted file mode 100644
index 1c9e5ac..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGSilencePainter.java
+++ /dev/null
@@ -1,254 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab.painters;
-
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-public class TGSilencePainter {
-	
-	public static void paintWhole(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
-		painter.lineTo((x + (0.1170311f * scale)),(y + (0.0f * scale)));
-		painter.lineTo((x + (4.3769493f * scale)),(y + (0.0f * scale)));
-		painter.lineTo((x + (8.6602745f * scale)),(y + (0.0f * scale)));
-		painter.lineTo((x + (8.730488f * scale)),(y + (0.046812057f * scale)));
-		painter.lineTo((x + (8.777302f * scale)),(y + (0.11703062f * scale)));
-		painter.lineTo((x + (8.777302f * scale)),(y + (1.8256791f * scale)));
-		painter.lineTo((x + (8.777302f * scale)),(y + (3.5343275f * scale)));
-		painter.lineTo((x + (8.730488f * scale)),(y + (3.6045456f * scale)));
-		painter.lineTo((x + (8.6602745f * scale)),(y + (3.6513581f * scale)));
-		painter.lineTo((x + (4.3769493f * scale)),(y + (3.6513581f * scale)));
-		painter.lineTo((x + (0.1170311f * scale)),(y + (3.6513581f * scale)));
-		painter.lineTo((x + (0.04681015f * scale)),(y + (3.6045456f * scale)));
-		painter.lineTo((x + (0.0f * scale)),(y + (3.5343275f * scale)));
-		painter.lineTo((x + (0.0f * scale)),(y + (1.8256791f * scale)));
-		painter.lineTo((x + (0.0f * scale)),(y + (0.11703062f * scale)));
-		painter.lineTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
-	}
-	
-	public static void paintHalf(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
-		painter.lineTo((x + (0.1170311f * scale)),(y + (0.0f * scale)));
-		painter.lineTo((x + (4.3769493f * scale)),(y + (0.0f * scale)));
-		painter.lineTo((x + (8.6602745f * scale)),(y + (0.0f * scale)));
-		painter.lineTo((x + (8.730488f * scale)),(y + (0.046812057f * scale)));
-		painter.lineTo((x + (8.777302f * scale)),(y + (0.11703062f * scale)));
-		painter.lineTo((x + (8.777302f * scale)),(y + (1.8256791f * scale)));
-		painter.lineTo((x + (8.777302f * scale)),(y + (3.5343275f * scale)));
-		painter.lineTo((x + (8.730488f * scale)),(y + (3.6045456f * scale)));
-		painter.lineTo((x + (8.6602745f * scale)),(y + (3.6513581f * scale)));
-		painter.lineTo((x + (4.3769493f * scale)),(y + (3.6513581f * scale)));
-		painter.lineTo((x + (0.1170311f * scale)),(y + (3.6513581f * scale)));
-		painter.lineTo((x + (0.04681015f * scale)),(y + (3.6045456f * scale)));
-		painter.lineTo((x + (0.0f * scale)),(y + (3.5343275f * scale)));
-		painter.lineTo((x + (0.0f * scale)),(y + (1.8256791f * scale)));
-		painter.lineTo((x + (0.0f * scale)),(y + (0.11703062f * scale)));
-		painter.lineTo((x + (0.04681015f * scale)),(y + (0.046812057f * scale)));
-	}
-	
-	public static void paintQuarter(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (2.1034088f * scale)),(y + (0.047267675f * scale)));
-		painter.cubicTo((x + (2.1979485f * scale)),(y + (0.0f * scale)),(x + (2.2924728f * scale)),(y + (0.0f * scale)),(x + (2.387024f * scale)),(y + (0.023633957f * scale)));
-		painter.cubicTo((x + (2.4579277f * scale)),(y + (0.070901394f * scale)),(x + (6.121151f * scale)),(y + (4.4195156f * scale)),(x + (6.2156906f * scale)),(y + (4.6085863f * scale)));
-		painter.cubicTo((x + (6.38113f * scale)),(y + (4.915825f * scale)),(x + (6.333866f * scale)),(y + (5.2230635f * scale)),(x + (6.0975113f * scale)),(y + (5.601205f * scale)));
-		painter.cubicTo((x + (5.9084587f * scale)),(y + (5.8611765f * scale)),(x + (5.5303154f * scale)),(y + (6.239316f * scale)),(x + (4.821308f * scale)),(y + (6.830161f * scale)));
-		painter.cubicTo((x + (4.4667816f * scale)),(y + (7.1137667f * scale)),(x + (4.1359215f * scale)),(y + (7.4210052f * scale)),(x + (4.065014f * scale)),(y + (7.491905f * scale)));
-		painter.cubicTo((x + (3.3323631f * scale)),(y + (8.271823f * scale)),(x + (3.166935f * scale)),(y + (9.453509f * scale)),(x + (3.5923424f * scale)),(y + (10.351589f * scale)));
-		painter.cubicTo((x + (3.73415f * scale)),(y + (10.65883f * scale)),(x + (3.8050346f * scale)),(y + (10.729736f * scale)),(x + (4.6322327f * scale)),(y + (11.675077f * scale)));
-		painter.cubicTo((x + (6.1447945f * scale)),(y + (13.447618f * scale)),(x + (6.0738907f * scale)),(y + (13.376713f * scale)),(x + (6.0738907f * scale)),(y + (13.518524f * scale)));
-		painter.cubicTo((x + (6.0738907f * scale)),(y + (13.66031f * scale)),(x + (5.9320793f * scale)),(y + (13.802121f * scale)),(x + (5.790291f * scale)),(y + (13.825765f * scale)));
-		painter.cubicTo((x + (5.6721115f * scale)),(y + (13.825765f * scale)),(x + (5.5775757f * scale)),(y + (13.778487f * scale)),(x + (5.4121437f * scale)),(y + (13.6130495f * scale)));
-		painter.cubicTo((x + (4.821308f * scale)),(y + (13.02221f * scale)),(x + (3.4741745f * scale)),(y + (12.5968f * scale)),(x + (2.7415237f * scale)),(y + (12.762231f * scale)));
-		painter.cubicTo((x + (2.387024f * scale)),(y + (12.833136f * scale)),(x + (2.1979485f * scale)),(y + (12.974947f * scale)),(x + (2.0325203f * scale)),(y + (13.305807f * scale)));
-		painter.cubicTo((x + (1.9379692f * scale)),(y + (13.542143f * scale)),(x + (1.8670654f * scale)),(y + (13.825765f * scale)),(x + (1.8434448f * scale)),(y + (14.203887f * scale)));
-		painter.cubicTo((x + (1.8198013f * scale)),(y + (14.7238455f * scale)),(x + (1.9143524f * scale)),(y + (15.267421f * scale)),(x + (2.0797806f * scale)),(y + (15.787354f * scale)));
-		painter.cubicTo((x + (2.1979485f * scale)),(y + (16.118237f * scale)),(x + (2.2688522f * scale)),(y + (16.307312f * scale)),(x + (2.4342842f * scale)),(y + (16.543648f * scale)));
-		painter.cubicTo((x + (2.5760956f * scale)),(y + (16.73272f * scale)),(x + (2.5760956f * scale)),(y + (16.803608f * scale)),(x + (2.4579277f * scale)),(y + (16.874508f * scale)));
-		painter.cubicTo((x + (2.3633804f * scale)),(y + (16.921787f * scale)),(x + (2.3161163f * scale)),(y + (16.898151f * scale)),(x + (2.1034088f * scale)),(y + (16.638172f * scale)));
-		painter.cubicTo((x + (1.2526054f * scale)),(y + (15.551019f * scale)),(x + (0.47267532f * scale)),(y + (13.991195f * scale)),(x + (0.21271515f * scale)),(y + (12.833136f * scale)));
-		painter.cubicTo((x + (0.0f * scale)),(y + (12.005961f * scale)),(x + (0.09454727f * scale)),(y + (11.438742f * scale)),(x + (0.4254074f * scale)),(y + (11.202407f * scale)));
-		painter.cubicTo((x + (0.590847f * scale)),(y + (11.107882f * scale)),(x + (0.75629425f * scale)),(y + (11.084239f * scale)),(x + (1.1107941f * scale)),(y + (11.084239f * scale)));
-		painter.cubicTo((x + (1.7961845f * scale)),(y + (11.131502f * scale)),(x + (2.7651672f * scale)),(y + (11.3914795f * scale)),(x + (3.7105103f * scale)),(y + (11.793245f * scale)));
-		painter.lineTo((x + (4.01775f * scale)),(y + (11.935056f * scale)));
-		painter.lineTo((x + (2.7178802f * scale)),(y + (10.398851f * scale)));
-		painter.cubicTo((x + (0.73265076f * scale)),(y + (8.059115f * scale)),(x + (0.66174316f * scale)),(y + (7.9645834f * scale)),(x + (0.590847f * scale)),(y + (7.8227787f * scale)));
-		painter.cubicTo((x + (0.5199585f * scale)),(y + (7.63371f * scale)),(x + (0.496315f * scale)),(y + (7.4446383f * scale)),(x + (0.5672188f * scale)),(y + (7.2319345f * scale)));
-		painter.cubicTo((x + (0.68538666f * scale)),(y + (6.853795f * scale)),(x + (1.0162506f * scale)),(y + (6.4756536f * scale)),(x + (2.0088768f * scale)),(y + (5.648472f * scale)));
-		painter.cubicTo((x + (2.3633804f * scale)),(y + (5.3648667f * scale)),(x + (2.67062f * scale)),(y + (5.0812616f * scale)),(x + (2.7415237f * scale)),(y + (5.033994f * scale)));
-		painter.cubicTo((x + (3.2851028f * scale)),(y + (4.443149f * scale)),(x + (3.5450783f * scale)),(y + (3.6159673f * scale)),(x + (3.450531f * scale)),(y + (2.8360534f * scale)));
-		painter.cubicTo((x + (3.4032707f * scale)),(y + (2.5760818f * scale)),(x + (3.2851028f * scale)),(y + (2.1743064f * scale)),(x + (3.1432915f * scale)),(y + (1.9616027f * scale)));
-		painter.cubicTo((x + (3.0723915f * scale)),(y + (1.8434343f * scale)),(x + (2.7887878f * scale)),(y + (1.4889283f * scale)),(x + (2.505188f * scale)),(y + (1.1344206f * scale)));
-		painter.cubicTo((x + (2.2215881f * scale)),(y + (0.8035486f * scale)),(x + (1.9616127f * scale)),(y + (0.49630952f * scale)),(x + (1.9379692f * scale)),(y + (0.44904137f * scale)));
-		painter.cubicTo((x + (1.8670654f * scale)),(y + (0.30723906f * scale)),(x + (1.9379692f * scale)),(y + (0.11816859f * scale)),(x + (2.1034088f * scale)),(y + (0.047267675f * scale)));
-	}
-	
-	public static void paintEighth(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (1.6779978f * scale)),(y + (0.070901394f * scale)));
-		painter.cubicTo((x + (2.1979408f * scale)),(y + (0.0f * scale)),(x + (2.6469831f * scale)),(y + (0.14180231f * scale)),(x + (3.0014887f * scale)),(y + (0.47267532f * scale)));
-		painter.cubicTo((x + (3.214193f * scale)),(y + (0.7090125f * scale)),(x + (3.3087273f * scale)),(y + (0.89808273f * scale)),(x + (3.450531f * scale)),(y + (1.4652932f * scale)));
-		painter.cubicTo((x + (3.5214317f * scale)),(y + (1.7252648f * scale)),(x + (3.5923345f * scale)),(y + (1.9852359f * scale)),(x + (3.6159685f * scale)),(y + (2.0325048f * scale)));
-		painter.cubicTo((x + (3.7105024f * scale)),(y + (2.2452075f * scale)),(x + (3.8759398f * scale)),(y + (2.3870108f * scale)),(x + (4.0886426f * scale)),(y + (2.4106443f * scale)));
-		painter.cubicTo((x + (4.183178f * scale)),(y + (2.4106443f * scale)),(x + (4.2304454f * scale)),(y + (2.4106443f * scale)),(x + (4.348614f * scale)),(y + (2.3397439f * scale)));
-		painter.cubicTo((x + (4.6558537f * scale)),(y + (2.19794f * scale)),(x + (5.388501f * scale)),(y + (1.3234913f * scale)),(x + (5.6721063f * scale)),(y + (0.7799146f * scale)));
-		painter.cubicTo((x + (5.7430067f * scale)),(y + (0.6144779f * scale)),(x + (5.861175f * scale)),(y + (0.5435767f * scale)),(x + (5.979345f * scale)),(y + (0.5435767f * scale)));
-		painter.cubicTo((x + (6.073879f * scale)),(y + (0.5435767f * scale)),(x + (6.192049f * scale)),(y + (0.6144779f * scale)),(x + (6.239316f * scale)),(y + (0.6853788f * scale)));
-		painter.cubicTo((x + (6.26295f * scale)),(y + (0.7326472f * scale)),(x + (6.026612f * scale)),(y + (1.5598292f * scale)),(x + (4.7740216f * scale)),(y + (5.7430067f * scale)));
-		painter.cubicTo((x + (3.970474f * scale)),(y + (8.484522f * scale)),(x + (3.2850938f * scale)),(y + (10.776992f * scale)),(x + (3.2614603f * scale)),(y + (10.800634f * scale)));
-		painter.cubicTo((x + (3.2614603f * scale)),(y + (10.824278f * scale)),(x + (3.1669261f * scale)),(y + (10.895159f * scale)),(x + (3.0723903f * scale)),(y + (10.918801f * scale)));
-		painter.cubicTo((x + (2.9305882f * scale)),(y + (10.989707f * scale)),(x + (2.9069548f * scale)),(y + (10.989707f * scale)),(x + (2.7178838f * scale)),(y + (10.989707f * scale)));
-		painter.cubicTo((x + (2.528813f * scale)),(y + (10.989707f * scale)),(x + (2.481546f * scale)),(y + (10.989707f * scale)),(x + (2.3397446f * scale)),(y + (10.942445f * scale)));
-		painter.cubicTo((x + (2.2688415f * scale)),(y + (10.895159f * scale)),(x + (2.1743073f * scale)),(y + (10.847896f * scale)),(x + (2.1743073f * scale)),(y + (10.824278f * scale)));
-		painter.cubicTo((x + (2.1270401f * scale)),(y + (10.800634f * scale)),(x + (2.292475f * scale)),(y + (10.375227f * scale)),(x + (3.4977982f * scale)),(y + (6.94833f * scale)));
-		painter.cubicTo((x + (4.254079f * scale)),(y + (4.844924f * scale)),(x + (4.8685584f * scale)),(y + (3.0960243f * scale)),(x + (4.8449225f * scale)),(y + (3.0960243f * scale)));
-		painter.lineTo((x + (4.4431496f * scale)),(y + (3.2141926f * scale)));
-		painter.cubicTo((x + (3.5923345f * scale)),(y + (3.4977977f * scale)),(x + (3.0723903f * scale)),(y + (3.5923336f * scale)),(x + (2.4342787f * scale)),(y + (3.5923336f * scale)));
-		painter.cubicTo((x + (1.914336f * scale)),(y + (3.5923336f * scale)),(x + (1.7725322f * scale)),(y + (3.5687f * scale)),(x + (1.394393f * scale)),(y + (3.3796299f * scale)));
-		painter.cubicTo((x + (0.3545066f * scale)),(y + (2.88332f * scale)),(x + (0.0f * scale)),(y + (1.6779974f * scale)),(x + (0.5908443f * scale)),(y + (0.7799146f * scale)));
-		painter.cubicTo((x + (0.85081583f * scale)),(y + (0.4254074f * scale)),(x + (1.2525895f * scale)),(y + (0.14180231f * scale)),(x + (1.6779978f * scale)),(y + (0.070901394f * scale)));
-	}
-	
-	public static void paintSixteenth(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (3.5214243f * scale)),(y + (0.070901394f * scale)));
-		painter.cubicTo((x + (4.041381f * scale)),(y + (0.0f * scale)),(x + (4.490409f * scale)),(y + (0.14180231f * scale)),(x + (4.8449125f * scale)),(y + (0.4726758f * scale)));
-		painter.cubicTo((x + (5.0576286f * scale)),(y + (0.7090137f * scale)),(x + (5.152153f * scale)),(y + (0.89808273f * scale)),(x + (5.2939644f * scale)),(y + (1.4652946f * scale)));
-		painter.cubicTo((x + (5.36487f * scale)),(y + (1.725266f * scale)),(x + (5.435775f * scale)),(y + (1.9852376f * scale)),(x + (5.4593954f * scale)),(y + (2.032505f * scale)));
-		painter.cubicTo((x + (5.5775614f * scale)),(y + (2.3397436f * scale)),(x + (5.9084463f * scale)),(y + (2.4815469f * scale)),(x + (6.144781f * scale)),(y + (2.363377f * scale)));
-		painter.cubicTo((x + (6.4520226f * scale)),(y + (2.2215748f * scale)),(x + (7.090123f * scale)),(y + (1.394392f * scale)),(x + (7.421006f * scale)),(y + (0.7326474f * scale)));
-		painter.cubicTo((x + (7.4682703f * scale)),(y + (0.6144779f * scale)),(x + (7.6100817f * scale)),(y + (0.54357696f * scale)),(x + (7.704606f * scale)),(y + (0.54357696f * scale)));
-		painter.cubicTo((x + (7.7991533f * scale)),(y + (0.54357696f * scale)),(x + (7.917321f * scale)),(y + (0.6144779f * scale)),(x + (7.9645834f * scale)),(y + (0.6853788f * scale)));
-		painter.cubicTo((x + (7.988206f * scale)),(y + (0.7326474f * scale)),(x + (7.6100817f * scale)),(y + (2.150673f * scale)),(x + (5.861184f * scale)),(y + (8.6972275f * scale)));
-		painter.cubicTo((x + (4.6794825f * scale)),(y + (13.069472f * scale)),(x + (3.710497f * scale)),(y + (16.685432f * scale)),(x + (3.6868773f * scale)),(y + (16.709076f * scale)));
-		painter.cubicTo((x + (3.6632347f * scale)),(y + (16.73272f * scale)),(x + (3.592329f * scale)),(y + (16.803608f * scale)),(x + (3.4978046f * scale)),(y + (16.827246f * scale)));
-		painter.cubicTo((x + (3.3559942f * scale)),(y + (16.89815f * scale)),(x + (3.3323498f * scale)),(y + (16.89815f * scale)),(x + (3.143302f * scale)),(y + (16.89815f * scale)));
-		painter.cubicTo((x + (2.9542284f * scale)),(y + (16.89815f * scale)),(x + (2.9069443f * scale)),(y + (16.89815f * scale)),(x + (2.7651548f * scale)),(y + (16.850887f * scale)));
-		painter.cubicTo((x + (2.69425f * scale)),(y + (16.803608f * scale)),(x + (2.5997238f * scale)),(y + (16.75634f * scale)),(x + (2.5997238f * scale)),(y + (16.73272f * scale)));
-		painter.cubicTo((x + (2.5524387f * scale)),(y + (16.709076f * scale)),(x + (2.69425f * scale)),(y + (16.283669f * scale)),(x + (3.7341404f * scale)),(y + (12.856779f * scale)));
-		painter.cubicTo((x + (4.372241f * scale)),(y + (10.753368f * scale)),(x + (4.8921986f * scale)),(y + (9.028101f * scale)),(x + (4.8921986f * scale)),(y + (9.004459f * scale)));
-		painter.cubicTo((x + (4.868556f * scale)),(y + (9.004459f * scale)),(x + (4.6794825f * scale)),(y + (9.051743f * scale)),(x + (4.46679f * scale)),(y + (9.122626f * scale)));
-		painter.cubicTo((x + (3.6159725f * scale)),(y + (9.406247f * scale)),(x + (3.0723963f * scale)),(y + (9.500772f * scale)),(x + (2.43427f * scale)),(y + (9.500772f * scale)));
-		painter.cubicTo((x + (1.9143381f * scale)),(y + (9.500772f * scale)),(x + (1.7725258f * scale)),(y + (9.477153f * scale)),(x + (1.3943825f * scale)),(y + (9.28808f * scale)));
-		painter.cubicTo((x + (0.3545103f * scale)),(y + (8.791764f * scale)),(x + (0.0f * scale)),(y + (7.586442f * scale)),(x + (0.59084797f * scale)),(y + (6.6883574f * scale)));
-		painter.cubicTo((x + (1.1580448f * scale)),(y + (5.8611765f * scale)),(x + (2.3397465f * scale)),(y + (5.7193727f * scale)),(x + (3.0014915f * scale)),(y + (6.357486f * scale)));
-		painter.cubicTo((x + (3.2378254f * scale)),(y + (6.6174574f * scale)),(x + (3.3323498f * scale)),(y + (6.830161f * scale)),(x + (3.4741611f * scale)),(y + (7.4446383f * scale)));
-		painter.cubicTo((x + (3.5450668f * scale)),(y + (7.799144f * scale)),(x + (3.6395912f * scale)),(y + (8.059116f * scale)),(x + (3.7341404f * scale)),(y + (8.153648f * scale)));
-		painter.cubicTo((x + (3.805046f * scale)),(y + (8.224551f * scale)),(x + (3.9468327f * scale)),(y + (8.295452f * scale)),(x + (4.088643f * scale)),(y + (8.31909f * scale)));
-		painter.cubicTo((x + (4.1831684f * scale)),(y + (8.31909f * scale)),(x + (4.2304544f * scale)),(y + (8.31909f * scale)),(x + (4.3486233f * scale)),(y + (8.248187f * scale)));
-		painter.cubicTo((x + (4.608577f * scale)),(y + (8.130019f * scale)),(x + (5.152153f * scale)),(y + (7.515539f * scale)),(x + (5.4593954f * scale)),(y + (6.995596f * scale)));
-		painter.cubicTo((x + (5.5539417f * scale)),(y + (6.830161f * scale)),(x + (5.601205f * scale)),(y + (6.6883574f * scale)),(x + (5.766636f * scale)),(y + (6.144781f * scale)));
-		painter.cubicTo((x + (6.2865934f * scale)),(y + (4.4904165f * scale)),(x + (6.6883574f * scale)),(y + (3.119658f * scale)),(x + (6.6883574f * scale)),(y + (3.0960245f * scale)));
-		painter.cubicTo((x + (6.6883574f * scale)),(y + (3.0960245f * scale)),(x + (6.5229273f * scale)),(y + (3.1432915f * scale)),(x + (6.3574743f * scale)),(y + (3.2141924f * scale)));
-		painter.cubicTo((x + (5.9557085f * scale)),(y + (3.3323627f * scale)),(x + (5.4121323f * scale)),(y + (3.474164f * scale)),(x + (5.033985f * scale)),(y + (3.5450664f * scale)));
-		painter.cubicTo((x + (4.7740307f * scale)),(y + (3.5923338f * scale)),(x + (4.6322203f * scale)),(y + (3.5923338f * scale)),(x + (4.2777157f * scale)),(y + (3.5923338f * scale)));
-		painter.cubicTo((x + (3.757759f * scale)),(y + (3.5923338f * scale)),(x + (3.6159725f * scale)),(y + (3.5687003f * scale)),(x + (3.2378254f * scale)),(y + (3.3796296f * scale)));
-		painter.cubicTo((x + (2.197935f * scale)),(y + (2.8833203f * scale)),(x + (1.8434324f * scale)),(y + (1.6779971f * scale)),(x + (2.43427f * scale)),(y + (0.77991486f * scale)));
-		painter.cubicTo((x + (2.69425f * scale)),(y + (0.4254074f * scale)),(x + (3.096015f * scale)),(y + (0.14180231f * scale)),(x + (3.5214243f * scale)),(y + (0.070901394f * scale)));
-	}
-	
-	public static void paintThirtySecond(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (4.939474f * scale)),(y + (0.070901155f * scale)));
-		painter.cubicTo((x + (5.459408f * scale)),(y + (0.0f * scale)),(x + (5.9084606f * scale)),(y + (0.14180207f * scale)),(x + (6.2629623f * scale)),(y + (0.4726758f * scale)));
-		painter.cubicTo((x + (6.4756565f * scale)),(y + (0.70901346f * scale)),(x + (6.570204f * scale)),(y + (0.89808273f * scale)),(x + (6.7119904f * scale)),(y + (1.4652941f * scale)));
-		painter.cubicTo((x + (6.782896f * scale)),(y + (1.7252657f * scale)),(x + (6.8538036f * scale)),(y + (1.9852374f * scale)),(x + (6.877445f * scale)),(y + (2.0325048f * scale)));
-		painter.cubicTo((x + (6.9719696f * scale)),(y + (2.245209f * scale)),(x + (7.1373997f * scale)),(y + (2.3870108f * scale)),(x + (7.3501167f * scale)),(y + (2.4106443f * scale)));
-		painter.cubicTo((x + (7.444641f * scale)),(y + (2.4106443f * scale)),(x + (7.4919033f * scale)),(y + (2.4106443f * scale)),(x + (7.562809f * scale)),(y + (2.3633773f * scale)));
-		painter.cubicTo((x + (7.8227882f * scale)),(y + (2.19794f * scale)),(x + (8.34272f * scale)),(y + (1.4889283f * scale)),(x + (8.697241f * scale)),(y + (0.80354834f * scale)));
-		painter.cubicTo((x + (8.768129f * scale)),(y + (0.61447763f * scale)),(x + (8.862679f * scale)),(y + (0.54357696f * scale)),(x + (9.004465f * scale)),(y + (0.54357696f * scale)));
-		painter.cubicTo((x + (9.099014f * scale)),(y + (0.54357696f * scale)),(x + (9.217182f * scale)),(y + (0.61447763f * scale)),(x + (9.264444f * scale)),(y + (0.6853788f * scale)));
-		painter.cubicTo((x + (9.288086f * scale)),(y + (0.7326474f * scale)),(x + (8.815416f * scale)),(y + (2.7887857f * scale)),(x + (6.735634f * scale)),(y + (11.627814f * scale)));
-		painter.cubicTo((x + (5.3175983f * scale)),(y + (17.6308f * scale)),(x + (4.1359196f * scale)),(y + (22.57025f * scale)),(x + (4.1359196f * scale)),(y + (22.593893f * scale)));
-		painter.cubicTo((x + (4.112276f * scale)),(y + (22.641155f * scale)),(x + (4.041378f * scale)),(y + (22.688417f * scale)),(x + (3.946846f * scale)),(y + (22.73568f * scale)));
-		painter.cubicTo((x + (3.781416f * scale)),(y + (22.806585f * scale)),(x + (3.7577744f * scale)),(y + (22.806585f * scale)),(x + (3.5687008f * scale)),(y + (22.806585f * scale)));
-		painter.cubicTo((x + (3.3796272f * scale)),(y + (22.806585f * scale)),(x + (3.332365f * scale)),(y + (22.806585f * scale)),(x + (3.1905785f * scale)),(y + (22.759323f * scale)));
-		painter.cubicTo((x + (3.1196728f * scale)),(y + (22.71206f * scale)),(x + (3.0251236f * scale)),(y + (22.664799f * scale)),(x + (3.0251236f * scale)),(y + (22.641155f * scale)));
-		painter.cubicTo((x + (2.9778614f * scale)),(y + (22.617512f * scale)),(x + (3.0960293f * scale)),(y + (22.192102f * scale)),(x + (3.9941082f * scale)),(y + (18.765215f * scale)));
-		painter.cubicTo((x + (4.5376854f * scale)),(y + (16.661814f * scale)),(x + (4.986738f * scale)),(y + (14.936537f * scale)),(x + (5.0103607f * scale)),(y + (14.912916f * scale)));
-		painter.cubicTo((x + (5.0103607f * scale)),(y + (14.889275f * scale)),(x + (4.9158325f * scale)),(y + (14.889275f * scale)),(x + (4.6322346f * scale)),(y + (15.007441f * scale)));
-		painter.cubicTo((x + (3.7105122f * scale)),(y + (15.314682f * scale)),(x + (2.883337f * scale)),(y + (15.456493f * scale)),(x + (2.2688541f * scale)),(y + (15.43285f * scale)));
-		painter.cubicTo((x + (1.9379692f * scale)),(y + (15.409229f * scale)),(x + (1.6780167f * scale)),(y + (15.3383255f * scale)),(x + (1.3943939f * scale)),(y + (15.196516f * scale)));
-		painter.cubicTo((x + (0.35450363f * scale)),(y + (14.700201f * scale)),(x + (0.0f * scale)),(y + (13.49488f * scale)),(x + (0.59086037f * scale)),(y + (12.5968f * scale)));
-		painter.cubicTo((x + (1.1580582f * scale)),(y + (11.769626f * scale)),(x + (2.3397598f * scale)),(y + (11.627814f * scale)),(x + (3.001505f * scale)),(y + (12.265927f * scale)));
-		painter.cubicTo((x + (3.2378407f * scale)),(y + (12.525894f * scale)),(x + (3.332365f * scale)),(y + (12.738611f * scale)),(x + (3.4741764f * scale)),(y + (13.353088f * scale)));
-		painter.cubicTo((x + (3.5450802f * scale)),(y + (13.707598f * scale)),(x + (3.6396065f * scale)),(y + (13.967552f * scale)),(x + (3.7341537f * scale)),(y + (14.062099f * scale)));
-		painter.cubicTo((x + (3.8286781f * scale)),(y + (14.133005f * scale)),(x + (3.9704895f * scale)),(y + (14.203886f * scale)),(x + (4.112276f * scale)),(y + (14.22753f * scale)));
-		painter.cubicTo((x + (4.2068253f * scale)),(y + (14.22753f * scale)),(x + (4.2540874f * scale)),(y + (14.22753f * scale)),(x + (4.348612f * scale)),(y + (14.156624f * scale)));
-		painter.cubicTo((x + (4.679497f * scale)),(y + (13.991194f * scale)),(x + (5.3648834f * scale)),(y + (13.140376f * scale)),(x + (5.5775776f * scale)),(y + (12.667706f * scale)));
-		painter.cubicTo((x + (5.601219f * scale)),(y + (12.573157f * scale)),(x + (6.546562f * scale)),(y + (9.051743f * scale)),(x + (6.546562f * scale)),(y + (9.004459f * scale)));
-		painter.cubicTo((x + (6.546562f * scale)),(y + (8.980838f * scale)),(x + (6.404751f * scale)),(y + (9.0281f * scale)),(x + (6.2393208f * scale)),(y + (9.099006f * scale)));
-		painter.cubicTo((x + (5.7430058f * scale)),(y + (9.240808f * scale)),(x + (5.2939777f * scale)),(y + (9.382604f * scale)),(x + (4.8685703f * scale)),(y + (9.453508f * scale)));
-		painter.cubicTo((x + (4.561329f * scale)),(y + (9.5007715f * scale)),(x + (4.443161f * scale)),(y + (9.5007715f * scale)),(x + (4.065014f * scale)),(y + (9.5007715f * scale)));
-		painter.cubicTo((x + (3.5450802f * scale)),(y + (9.5007715f * scale)),(x + (3.4032707f * scale)),(y + (9.477151f * scale)),(x + (3.0251236f * scale)),(y + (9.288079f * scale)));
-		painter.cubicTo((x + (1.9852371f * scale)),(y + (8.791764f * scale)),(x + (1.6307297f * scale)),(y + (7.586441f * scale)),(x + (2.2215939f * scale)),(y + (6.6883574f * scale)));
-		painter.cubicTo((x + (2.7887878f * scale)),(y + (5.8611755f * scale)),(x + (3.9704895f * scale)),(y + (5.7193727f * scale)),(x + (4.6322346f * scale)),(y + (6.357485f * scale)));
-		painter.cubicTo((x + (4.8685703f * scale)),(y + (6.6174564f * scale)),(x + (4.9630947f * scale)),(y + (6.830161f * scale)),(x + (5.104904f * scale)),(y + (7.4446383f * scale)));
-		painter.cubicTo((x + (5.175812f * scale)),(y + (7.799144f * scale)),(x + (5.270336f * scale)),(y + (8.059115f * scale)),(x + (5.3648834f * scale)),(y + (8.153648f * scale)));
-		painter.cubicTo((x + (5.50667f * scale)),(y + (8.295452f * scale)),(x + (5.7666492f * scale)),(y + (8.366357f * scale)),(x + (5.9320793f * scale)),(y + (8.271823f * scale)));
-		painter.cubicTo((x + (6.168415f * scale)),(y + (8.177285f * scale)),(x + (6.4756565f * scale)),(y + (7.8227797f * scale)),(x + (6.782896f * scale)),(y + (7.3501034f * scale)));
-		painter.cubicTo((x + (7.113781f * scale)),(y + (6.877428f * scale)),(x + (7.0901375f * scale)),(y + (6.948329f * scale)),(x + (7.610079f * scale)),(y + (4.963092f * scale)));
-		painter.cubicTo((x + (7.8700504f * scale)),(y + (3.970473f * scale)),(x + (8.082766f * scale)),(y + (3.1432917f * scale)),(x + (8.082766f * scale)),(y + (3.1196578f * scale)));
-		painter.cubicTo((x + (8.082766f * scale)),(y + (3.1196578f * scale)),(x + (7.9173126f * scale)),(y + (3.1432917f * scale)),(x + (7.72826f * scale)),(y + (3.2141926f * scale)));
-		painter.cubicTo((x + (7.279211f * scale)),(y + (3.355996f * scale)),(x + (6.830158f * scale)),(y + (3.4741638f * scale)),(x + (6.452036f * scale)),(y + (3.545066f * scale)));
-		painter.cubicTo((x + (6.1920567f * scale)),(y + (3.592334f * scale)),(x + (6.050247f * scale)),(y + (3.592334f * scale)),(x + (5.6957436f * scale)),(y + (3.592334f * scale)));
-		painter.cubicTo((x + (5.175812f * scale)),(y + (3.592334f * scale)),(x + (5.0339985f * scale)),(y + (3.5687f * scale)),(x + (4.6558533f * scale)),(y + (3.3796294f * scale)));
-		painter.cubicTo((x + (3.6159801f * scale)),(y + (2.88332f * scale)),(x + (3.2614594f * scale)),(y + (1.6779974f * scale)),(x + (3.8523216f * scale)),(y + (0.7799146f * scale)));
-		painter.cubicTo((x + (4.112276f * scale)),(y + (0.4254074f * scale)),(x + (4.5140667f * scale)),(y + (0.14180207f * scale)),(x + (4.939474f * scale)),(y + (0.070901155f * scale)));
-	}
-	
-	public static void paintSixtyFourth(TGPainter painter, float x, float y,float scale){
-		painter.moveTo((x + (5.908436f * scale)),(y + (0.07090092f * scale)));
-		painter.cubicTo((x + (6.4283676f * scale)),(y + (0.0f * scale)),(x + (6.8774185f * scale)),(y + (0.14180303f * scale)),(x + (7.231926f * scale)),(y + (0.4726758f * scale)));
-		painter.cubicTo((x + (7.4446335f * scale)),(y + (0.70901346f * scale)),(x + (7.5391655f * scale)),(y + (0.8980839f * scale)),(x + (7.680977f * scale)),(y + (1.4652941f * scale)));
-		painter.cubicTo((x + (7.7991447f * scale)),(y + (1.9616034f * scale)),(x + (7.846405f * scale)),(y + (2.1034052f * scale)),(x + (7.9409294f * scale)),(y + (2.221575f * scale)));
-		painter.cubicTo((x + (8.082741f * scale)),(y + (2.3870103f * scale)),(x + (8.366341f * scale)),(y + (2.4579127f * scale)),(x + (8.531792f * scale)),(y + (2.3633769f * scale)));
-		painter.cubicTo((x + (8.72084f * scale)),(y + (2.2688425f * scale)),(x + (9.028084f * scale)),(y + (1.8434336f * scale)),(x + (9.382591f * scale)),(y + (1.1344209f * scale)));
-		painter.cubicTo((x + (9.642563f * scale)),(y + (0.61447763f * scale)),(x + (9.689827f * scale)),(y + (0.5672102f * scale)),(x + (9.855282f * scale)),(y + (0.5672102f * scale)));
-		painter.cubicTo((x + (9.949806f * scale)),(y + (0.5672102f * scale)),(x + (10.067974f * scale)),(y + (0.6381123f * scale)),(x + (10.115234f * scale)),(y + (0.70901346f * scale)));
-		painter.cubicTo((x + (10.138878f * scale)),(y + (0.75628066f * scale)),(x + (9.571659f * scale)),(y + (3.592333f * scale)),(x + (7.3264503f * scale)),(y + (14.605665f * scale)));
-		painter.cubicTo((x + (5.790268f * scale)),(y + (22.215736f * scale)),(x + (4.514042f * scale)),(y + (28.478699f * scale)),(x + (4.514042f * scale)),(y + (28.502335f * scale)));
-		painter.cubicTo((x + (4.4903984f * scale)),(y + (28.549604f * scale)),(x + (4.4195137f * scale)),(y + (28.596869f * scale)),(x + (4.3249702f * scale)),(y + (28.644129f * scale)));
-		painter.cubicTo((x + (4.1595383f * scale)),(y + (28.715034f * scale)),(x + (4.135895f * scale)),(y + (28.715034f * scale)),(x + (3.9468231f * scale)),(y + (28.715034f * scale)));
-		painter.cubicTo((x + (3.7577515f * scale)),(y + (28.715034f * scale)),(x + (3.7104874f * scale)),(y + (28.715034f * scale)),(x + (3.568699f * scale)),(y + (28.667772f * scale)));
-		painter.cubicTo((x + (3.497795f * scale)),(y + (28.62051f * scale)),(x + (3.403244f * scale)),(y + (28.573223f * scale)),(x + (3.403244f * scale)),(y + (28.549604f * scale)));
-		painter.cubicTo((x + (3.3559837f * scale)),(y + (28.525963f * scale)),(x + (3.450531f * scale)),(y + (28.100554f * scale)),(x + (4.230446f * scale)),(y + (24.65002f * scale)));
-		painter.cubicTo((x + (4.7031136f * scale)),(y + (22.522978f * scale)),(x + (5.0812607f * scale)),(y + (20.797724f * scale)),(x + (5.0812607f * scale)),(y + (20.77408f * scale)));
-		painter.cubicTo((x + (5.0812607f * scale)),(y + (20.77408f * scale)),(x + (4.892189f * scale)),(y + (20.821352f * scale)),(x + (4.679474f * scale)),(y + (20.892248f * scale)));
-		painter.cubicTo((x + (4.1595383f * scale)),(y + (21.081322f * scale)),(x + (3.7341309f * scale)),(y + (21.175869f * scale)),(x + (3.28508f * scale)),(y + (21.270393f * scale)));
-		painter.cubicTo((x + (2.954216f * scale)),(y + (21.317657f * scale)),(x + (2.836052f * scale)),(y + (21.317657f * scale)),(x + (2.4579048f * scale)),(y + (21.317657f * scale)));
-		painter.cubicTo((x + (1.9143257f * scale)),(y + (21.317657f * scale)),(x + (1.7725143f * scale)),(y + (21.294037f * scale)),(x + (1.3943901f * scale)),(y + (21.104965f * scale)));
-		painter.cubicTo((x + (0.35450363f * scale)),(y + (20.60865f * scale)),(x + (0.0f * scale)),(y + (19.40333f * scale)),(x + (0.5908394f * scale)),(y + (18.505249f * scale)));
-		painter.cubicTo((x + (1.1580353f * scale)),(y + (17.678051f * scale)),(x + (2.339737f * scale)),(y + (17.536264f * scale)),(x + (3.00148f * scale)),(y + (18.174364f * scale)));
-		painter.cubicTo((x + (3.2378159f * scale)),(y + (18.434345f * scale)),(x + (3.3323517f * scale)),(y + (18.647038f * scale)),(x + (3.4741516f * scale)),(y + (19.261518f * scale)));
-		painter.cubicTo((x + (3.5450554f * scale)),(y + (19.616022f * scale)),(x + (3.6395798f * scale)),(y + (19.876f * scale)),(x + (3.7341309f * scale)),(y + (19.970549f * scale)));
-		painter.cubicTo((x + (3.8050346f * scale)),(y + (20.04143f * scale)),(x + (3.9468231f * scale)),(y + (20.112335f * scale)),(x + (4.0886345f * scale)),(y + (20.135979f * scale)));
-		painter.cubicTo((x + (4.2540627f * scale)),(y + (20.1596f * scale)),(x + (4.395874f * scale)),(y + (20.065073f * scale)),(x + (4.6558533f * scale)),(y + (19.805096f * scale)));
-		painter.cubicTo((x + (5.010357f * scale)),(y + (19.450592f * scale)),(x + (5.459385f * scale)),(y + (18.812492f * scale)),(x + (5.577553f * scale)),(y + (18.505249f * scale)));
-		painter.cubicTo((x + (5.6011925f * scale)),(y + (18.434345f * scale)),(x + (5.790268f * scale)),(y + (17.60717f * scale)),(x + (6.00296f * scale)),(y + (16.661804f * scale)));
-		painter.cubicTo((x + (6.2156754f * scale)),(y + (15.716461f * scale)),(x + (6.3811073f * scale)),(y + (14.93655f * scale)),(x + (6.404751f * scale)),(y + (14.912907f * scale)));
-		painter.cubicTo((x + (6.404751f * scale)),(y + (14.889288f * scale)),(x + (6.333843f * scale)),(y + (14.889288f * scale)),(x + (6.0266037f * scale)),(y + (15.007456f * scale)));
-		painter.cubicTo((x + (5.1048813f * scale)),(y + (15.314692f * scale)),(x + (4.277706f * scale)),(y + (15.456482f * scale)),(x + (3.6632233f * scale)),(y + (15.432863f * scale)));
-		painter.cubicTo((x + (3.3323517f * scale)),(y + (15.409222f * scale)),(x + (3.0723839f * scale)),(y + (15.338314f * scale)),(x + (2.7887688f * scale)),(y + (15.19651f * scale)));
-		painter.cubicTo((x + (1.7488976f * scale)),(y + (14.700214f * scale)),(x + (1.3943901f * scale)),(y + (13.494894f * scale)),(x + (1.9852333f * scale)),(y + (12.59679f * scale)));
-		painter.cubicTo((x + (2.2688293f * scale)),(y + (12.17139f * scale)),(x + (2.7415009f * scale)),(y + (11.911427f * scale)),(x + (3.28508f * scale)),(y + (11.864165f * scale)));
-		painter.cubicTo((x + (3.7104874f * scale)),(y + (11.840521f * scale)),(x + (4.0886345f * scale)),(y + (11.982332f * scale)),(x + (4.395874f * scale)),(y + (12.289569f * scale)));
-		painter.cubicTo((x + (4.6085663f * scale)),(y + (12.525908f * scale)),(x + (4.7031136f * scale)),(y + (12.714971f * scale)),(x + (4.8449097f * scale)),(y + (13.282178f * scale)));
-		painter.cubicTo((x + (4.915806f * scale)),(y + (13.542156f * scale)),(x + (4.9867134f * scale)),(y + (13.802132f * scale)),(x + (5.010357f * scale)),(y + (13.849398f * scale)));
-		painter.cubicTo((x + (5.128525f * scale)),(y + (14.156637f * scale)),(x + (5.459385f * scale)),(y + (14.298426f * scale)),(x + (5.7193604f * scale)),(y + (14.180258f * scale)));
-		painter.cubicTo((x + (6.00296f * scale)),(y + (14.038469f * scale)),(x + (6.6647034f * scale)),(y + (13.187653f * scale)),(x + (6.8774185f * scale)),(y + (12.691338f * scale)));
-		painter.cubicTo((x + (6.9010506f * scale)),(y + (12.620433f * scale)),(x + (7.1137543f * scale)),(y + (11.745991f * scale)),(x + (7.3264503f * scale)),(y + (10.777008f * scale)));
-		painter.lineTo((x + (7.728237f * scale)),(y + (8.980829f * scale)));
-		painter.lineTo((x + (7.3028297f * scale)),(y + (9.122639f * scale)));
-		painter.cubicTo((x + (6.4283676f * scale)),(y + (9.406237f * scale)),(x + (5.8847923f * scale)),(y + (9.500785f * scale)),(x + (5.246689f * scale)),(y + (9.500785f * scale)));
-		painter.cubicTo((x + (4.726738f * scale)),(y + (9.500785f * scale)),(x + (4.5849457f * scale)),(y + (9.47714f * scale)),(x + (4.2067986f * scale)),(y + (9.288069f * scale)));
-		painter.cubicTo((x + (3.1669083f * scale)),(y + (8.791758f * scale)),(x + (2.8124046f * scale)),(y + (7.586441f * scale)),(x + (3.403244f * scale)),(y + (6.6883574f * scale)));
-		painter.cubicTo((x + (3.6868668f * scale)),(y + (6.26295f * scale)),(x + (4.1595383f * scale)),(y + (6.0029783f * scale)),(x + (4.7031136f * scale)),(y + (5.9557104f * scale)));
-		painter.cubicTo((x + (5.128525f * scale)),(y + (5.9320765f * scale)),(x + (5.506672f * scale)),(y + (6.07388f * scale)),(x + (5.8138924f * scale)),(y + (6.381119f * scale)));
-		painter.cubicTo((x + (6.0266037f * scale)),(y + (6.6174564f * scale)),(x + (6.121128f * scale)),(y + (6.806527f * scale)),(x + (6.2629395f * scale)),(y + (7.3737373f * scale)));
-		painter.cubicTo((x + (6.3811073f * scale)),(y + (7.8700476f * scale)),(x + (6.4283676f * scale)),(y + (8.0118475f * scale)),(x + (6.5229187f * scale)),(y + (8.130014f * scale)));
-		painter.cubicTo((x + (6.688347f * scale)),(y + (8.295459f * scale)),(x + (6.948326f * scale)),(y + (8.366352f * scale)),(x + (7.1137543f * scale)),(y + (8.271822f * scale)));
-		painter.cubicTo((x + (7.397354f * scale)),(y + (8.130014f * scale)),(x + (7.846405f * scale)),(y + (7.539174f * scale)),(x + (8.130005f * scale)),(y + (6.948328f * scale)));
-		painter.cubicTo((x + (8.224552f * scale)),(y + (6.759259f * scale)),(x + (8.271812f * scale)),(y + (6.5701895f * scale)),(x + (8.62632f * scale)),(y + (4.939458f * scale)));
-		painter.lineTo((x + (9.028084f * scale)),(y + (3.1196573f * scale)));
-		painter.cubicTo((x + (9.028084f * scale)),(y + (3.0960238f * scale)),(x + (8.886295f * scale)),(y + (3.1432912f * scale)),(x + (8.72084f * scale)),(y + (3.2141936f * scale)));
-		painter.cubicTo((x + (7.8227615f * scale)),(y + (3.4977987f * scale)),(x + (7.066494f * scale)),(y + (3.6396005f * scale)),(x + (6.4992714f * scale)),(y + (3.6159666f * scale)));
-		painter.cubicTo((x + (6.168415f * scale)),(y + (3.592333f * scale)),(x + (5.908436f * scale)),(y + (3.5214326f * scale)),(x + (5.624836f * scale)),(y + (3.379629f * scale)));
-		painter.cubicTo((x + (4.5849457f * scale)),(y + (2.8833196f * scale)),(x + (4.230446f * scale)),(y + (1.6779983f * scale)),(x + (4.8212814f * scale)),(y + (0.7799144f * scale)));
-		painter.cubicTo((x + (5.0812607f * scale)),(y + (0.42540812f * scale)),(x + (5.4830284f * scale)),(y + (0.14180303f * scale)),(x + (5.908436f * scale)),(y + (0.07090092f * scale)));
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGTempoPainter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGTempoPainter.java
deleted file mode 100644
index 0ab2405..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGTempoPainter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab.painters;
-
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-public class TGTempoPainter {
-	
-	public static void paintTempo(TGPainter painter, int x, int y,float scale) {
-		int width = Math.round(scale * 1.33f);
-		int height = Math.round(scale * (1.0f + 2.5f));
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x + (width - (scale * 1.33f)),y + ( height - (1.0f * scale) ), scale );
-		painter.closePath();
-		
-		painter.initPath();
-		painter.setAntialias(false);
-		painter.moveTo(x + width,y);
-		painter.lineTo(x + width,y + (height - (0.66f * scale)) );
-		painter.closePath();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGTripletFeelPainter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGTripletFeelPainter.java
deleted file mode 100644
index 03b7eb4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/editors/tab/painters/TGTripletFeelPainter.java
+++ /dev/null
@@ -1,122 +0,0 @@
-package org.herac.tuxguitar.gui.editors.tab.painters;
-
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-public class TGTripletFeelPainter {
-	
-	public static void paintTripletFeel8(TGPainter painter, int x, int y,float scale) {
-		float topSpacing = (1.0f * scale);
-		float horizontalSpacing = (1.5f * scale);
-		float verticalSpacing = (2.5f * scale);
-		float ovalWidth = (1.33f * scale);
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x, y + (topSpacing + verticalSpacing) , scale );
-		painter.closePath();
-		
-		painter.initPath();
-		painter.setAntialias(false);
-		painter.moveTo( x + Math.round(ovalWidth) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
-		painter.lineTo( x + Math.round(ovalWidth) ,y + topSpacing);
-		painter.closePath();
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + (topSpacing + verticalSpacing)  , scale );
-		painter.closePath();
-		
-		painter.initPath();
-		painter.setAntialias(false);
-		painter.moveTo(x + Math.round(ovalWidth + horizontalSpacing) ,y +Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
-		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y +topSpacing);
-		painter.closePath();
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintFooter(painter,x + Math.round(ovalWidth + horizontalSpacing),y + (topSpacing + (scale * 2.3f)), -1 , scale);
-		painter.closePath();
-		
-		painter.initPath();
-		painter.moveTo( x, y + (1 * scale) );
-		painter.cubicTo( x, y + (1 * scale), x + ( ( (ovalWidth * 2f) + horizontalSpacing) / 2f),y + (-1 * scale) ,x + ( (ovalWidth * 2f) + horizontalSpacing),y + (1 * scale));
-		painter.closePath();
-	}
-	
-	public static void paintTripletFeelNone8(TGPainter painter, int x, int y,float scale) {
-		float horizontalSpacing = (1.5f * scale);
-		float verticalSpacing = (2.5f * scale);
-		float ovalWidth = (1.33f * scale);
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x, y + verticalSpacing , scale );
-		painter.closePath();
-		
-		painter.initPath();
-		painter.setAntialias(false);
-		painter.moveTo( x + Math.round(ovalWidth) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
-		painter.lineTo( x + Math.round(ovalWidth) ,y);
-		painter.lineTo( x + Math.round(ovalWidth + horizontalSpacing) ,y);
-		painter.lineTo( x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
-		painter.closePath();
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + verticalSpacing , scale );
-		painter.closePath();
-	}
-	
-	public static int paintTripletFeel16(TGPainter painter, int x, int y,float scale) {
-		float topSpacing = (1.0f * scale);
-		float horizontalSpacing = (1.5f * scale);
-		float verticalSpacing = (2.5f * scale);
-		float ovalWidth = (1.33f * scale);
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x,y + (topSpacing + verticalSpacing) , scale );
-		painter.closePath();
-		
-		painter.initPath();
-		painter.setAntialias(false);
-		painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
-		painter.lineTo(x + Math.round(ovalWidth) ,y + topSpacing);
-		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + topSpacing);
-		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(topSpacing + verticalSpacing + (0.33f * scale)) );
-		painter.moveTo(x + Math.round(ovalWidth + horizontalSpacing - (0.55f * scale) ) ,y + Math.round(topSpacing + (0.5f * scale)));
-		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(topSpacing + (0.5f * scale)));
-		painter.closePath();
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + (topSpacing + verticalSpacing) , scale );
-		painter.closePath();
-		
-		painter.initPath();
-		painter.moveTo( x,y + (1 * scale) );
-		painter.cubicTo( x,y + (1 * scale),x + ( ( (ovalWidth * 2f) + horizontalSpacing) / 2f),y + (-1*scale) ,x + ( (ovalWidth * 2f) + horizontalSpacing),y + (1 * scale));
-		painter.closePath();
-		
-		return Math.round( (ovalWidth * 2f) + horizontalSpacing );
-	}
-	
-	public static int paintTripletFeelNone16(TGPainter painter, int x, int y,float scale) {
-		float horizontalSpacing = (1.5f * scale);
-		float verticalSpacing = (2.5f * scale);
-		float ovalWidth = (1.33f * scale);
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x,y + verticalSpacing , scale );
-		painter.closePath();
-		
-		painter.initPath();
-		painter.setAntialias(false);
-		painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
-		painter.lineTo(x + Math.round(ovalWidth) ,y);
-		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y);
-		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(verticalSpacing + (0.33f * scale)) );
-		painter.moveTo(x + Math.round(ovalWidth) ,y + Math.round(0.5f * scale));
-		painter.lineTo(x + Math.round(ovalWidth + horizontalSpacing) ,y + Math.round(0.5f * scale));
-		painter.closePath();
-		
-		painter.initPath(TGPainter.PATH_FILL);
-		TGNotePainter.paintNote(painter,x + horizontalSpacing,y + verticalSpacing , scale );
-		painter.closePath();
-		
-		return Math.round( ovalWidth + horizontalSpacing );
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/help/about/AboutContentReader.java b/TuxGuitar/src/org/herac/tuxguitar/gui/help/about/AboutContentReader.java
deleted file mode 100644
index 62cd4ce..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/help/about/AboutContentReader.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package org.herac.tuxguitar.gui.help.about;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.util.TGClassLoader;
-
-public class AboutContentReader {
-	
-	private static final String PREFIX = "about_";
-	private static final String EXTENSION = ".dist";
-	
-	public static final String DESCRIPTION = "description";
-	public static final String AUTHORS = "authors";
-	public static final String LICENSE = "license";
-	
-	public AboutContentReader(){
-		super();
-	}
-	
-	public StringBuffer read(String doc){
-		String lang = TuxGuitar.instance().getLanguageManager().getLanguage();
-		InputStream is = TGClassLoader.instance().getClassLoader().getResourceAsStream(PREFIX + doc + "_" + lang + EXTENSION);
-		if(is == null){
-			is = TGClassLoader.instance().getClassLoader().getResourceAsStream(PREFIX + doc + EXTENSION);
-		}
-		if(is != null){
-			return read(is);
-		}
-		System.out.println(doc + ".txt");
-		
-		return new StringBuffer();
-	}
-	
-	public StringBuffer read(InputStream is){
-		StringBuffer sb = new StringBuffer();
-		try {
-			int length = 0;
-			byte[] buffer = new byte[1024];
-			while((length = is.read(buffer)) != -1){
-				sb.append(new String(buffer,0,length));
-			}
-			is.close();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return sb;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/help/about/AboutDialog.java b/TuxGuitar/src/org/herac/tuxguitar/gui/help/about/AboutDialog.java
deleted file mode 100644
index 97462cf..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/help/about/AboutDialog.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package org.herac.tuxguitar.gui.help.about;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.util.TGVersion;
-
-public class AboutDialog {
-	
-	private static final String RELEASE_NAME = (TuxGuitar.APPLICATION_NAME + " " + TGVersion.CURRENT.getVersion());
-	private static final String PROPERTY_PREFIX = ("help.about.");
-	
-	private static final int IMAGE_WIDTH = 100;
-	private static final int IMAGE_HEIGHT = 100;
-	
-	private static final int TAB_ITEM_WIDTH = 660;
-	private static final int TAB_ITEM_HEIGHT = 300;
-	
-	protected Composite imageComposite;
-	protected Image image;
-	
-	public AboutDialog() {
-		super();
-	}
-	
-	public void open(Shell shell) {
-		final Shell dialog = DialogUtils.newDialog(shell,SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("help.about"));
-		
-		//--------------------HEADER----------------------------------
-		Composite header = new Composite(dialog,SWT.NONE);
-		header.setLayout(new GridLayout(2,false));
-		header.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true ,true));
-		
-		this.image = TuxGuitar.instance().getIconManager().getAboutDescription();
-		
-		this.imageComposite = new Composite(header,SWT.NONE);
-		this.imageComposite.setLayoutData(new GridData(IMAGE_WIDTH,IMAGE_HEIGHT));
-		this.imageComposite.addPaintListener(new PaintListener() {
-			public void paintControl(PaintEvent e) {
-				Rectangle bounds = AboutDialog.this.image.getBounds();
-				TGPainter painter = new TGPainter(e.gc);
-				painter.drawImage(AboutDialog.this.image,((IMAGE_WIDTH - bounds.width) /2),((IMAGE_HEIGHT - bounds.height) /2));
-			}
-		});
-		
-		final Font titleFont = new Font(dialog.getDisplay(),TuxGuitar.instance().getConfig().getFontDataConfigValue(TGConfigKeys.FONT_ABOUT_DIALOG_TITLE));
-		Label title = new Label(header,SWT.NONE);
-		title.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true ,true));
-		title.setFont(titleFont);
-		title.setForeground(dialog.getDisplay().getSystemColor(SWT.COLOR_GRAY));
-		title.setText(RELEASE_NAME);
-		title.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				titleFont.dispose();
-			}
-		});
-		
-		//-------------------TABS-----------------------
-		Composite tabs = new Composite(dialog, SWT.NONE);
-		tabs.setLayout(new GridLayout());
-		tabs.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		final TabFolder tabFolder = new TabFolder(tabs, SWT.NONE);
-		tabFolder.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		tabFolder.setLayout(new FormLayout());
-		
-		AboutContentReader docReader = new AboutContentReader();
-		
-		makeTabItem(tabFolder,AboutContentReader.DESCRIPTION,docReader.read(AboutContentReader.DESCRIPTION).toString());
-		makeTabItem(tabFolder,AboutContentReader.AUTHORS,docReader.read(AboutContentReader.AUTHORS).toString());
-		makeTabItem(tabFolder,AboutContentReader.LICENSE,docReader.read(AboutContentReader.LICENSE).toString());
-		
-		tabFolder.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(tabFolder.getSelectionIndex() == 0){
-					AboutDialog.this.image = TuxGuitar.instance().getIconManager().getAboutDescription();
-				}else if(tabFolder.getSelectionIndex() == 1){
-					AboutDialog.this.image = TuxGuitar.instance().getIconManager().getAboutAuthors();
-				}else if(tabFolder.getSelectionIndex() == 2){
-					AboutDialog.this.image = TuxGuitar.instance().getIconManager().getAboutLicense();
-				}
-				AboutDialog.this.imageComposite.redraw();
-			}
-		});
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout());
-		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-		
-		Button buttonClose = new Button(buttons, SWT.PUSH);
-		buttonClose.setLayoutData(getButtonData());
-		buttonClose.setText(TuxGuitar.getProperty("close"));
-		buttonClose.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		tabFolder.setSelection(0);
-		
-		dialog.setDefaultButton( buttonClose );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private void makeTabItem(TabFolder tabFolder,String itemName,String itemText){
-		Composite control = new Composite(tabFolder, SWT.NONE);
-		control.setLayout(new GridLayout());
-		control.setLayoutData(new FormData(TAB_ITEM_WIDTH,TAB_ITEM_HEIGHT));
-		
-		Text text = new Text(control,SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
-		text.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		text.setBackground(TuxGuitar.instance().getDisplay().getSystemColor(SWT.COLOR_WHITE));
-		text.setEditable(false);
-		text.append(itemText);
-		text.setSelection(0);
-		
-		TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
-		tabItem.setText(TuxGuitar.getProperty(PROPERTY_PREFIX + itemName));
-		tabItem.setControl(control);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/help/doc/TGDocumentation.java b/TuxGuitar/src/org/herac/tuxguitar/gui/help/doc/TGDocumentation.java
deleted file mode 100644
index 43b2706..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/help/doc/TGDocumentation.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.herac.tuxguitar.gui.help.doc;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.URL;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.browser.Browser;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-public class TGDocumentation {
-	
-	private static final String RESOURCE_PATH = "help";
-	private static final String TEMPORAL_PATH = System.getProperty("java.io.tmpdir") + File.separator + "tuxguitar";
-	
-	public void display() throws Throwable{
-		URL url = getIndexUrl();
-		if( url != null ){
-			Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.SHELL_TRIM);
-			dialog.setLayout(new FillLayout());
-			
-			Browser browser = new Browser(dialog, SWT.BORDER);
-			browser.setLayout(new FillLayout());
-			browser.setUrl( url.toExternalForm() );
-			
-			DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_MAXIMIZED);
-		}
-	}
-	
-	private URL getIndexUrl() throws Throwable{
-		URL url = TGFileUtils.getResourceUrl(RESOURCE_PATH + "/index.html");
-		if( url != null && !TGFileUtils.isLocalFile( url ) ){
-			String path = TEMPORAL_PATH + File.separator + RESOURCE_PATH;
-			copyTemporalResources(path, RESOURCE_PATH, TGFileUtils.getFileNames( RESOURCE_PATH ));
-			url = new File( path + File.separator + "index.html" ).toURI().toURL();
-		}
-		return url;
-	}
-	
-	private void copyTemporalResources( String dstPath , String resourcePath, String[] resources ) throws Throwable{
-		if( resources != null ){
-			for( int i = 0 ; i < resources.length ; i ++ ){
-				File file = new File( dstPath + File.separator + resources[i] );
-				file.getParentFile().mkdirs();
-				String resource = (resourcePath + "/" + resources[i]);
-				String[] children = TGFileUtils.getFileNames(resource);
-				if( children != null && children.length > 0 ){
-					copyTemporalResources( file.getAbsolutePath(), resource , children );
-				}else if( !file.exists() ){
-					InputStream in = TGFileUtils.getResourceAsStream(resource);
-					if( in != null ){
-						OutputStream out = new FileOutputStream( file );
-						int len = 0;
-						byte[] buf = new byte[1024];
-						while ((len = in.read(buf)) > 0){
-							out.write(buf, 0, len);
-						}
-						out.flush();
-						out.close();
-						in.close();
-					}
-				}
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/helper/FileHistory.java b/TuxGuitar/src/org/herac/tuxguitar/gui/helper/FileHistory.java
deleted file mode 100644
index 7c65be1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/helper/FileHistory.java
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Created on 08-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.helper;
-
-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.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class FileHistory {
-	
-	private static final int URL_LIMIT = TuxGuitar.instance().getConfig().getIntConfigValue(TGConfigKeys.MAX_HISTORY_FILES);
-	
-	private boolean changed;
-	private boolean newFile;
-	private boolean localFile;
-	private boolean unsavedFile;
-	private List urls;
-	private String chooserPath;
-	
-	public FileHistory(){
-		this.urls = new ArrayList();
-		this.loadHistory();
-		this.reset(null);
-	}
-	
-	public void reset(URL url) {
-		this.unsavedFile = false;
-		this.newFile = (url == null);
-		this.localFile = (url != null && isLocalFile(url));
-		this.addURL(url);
-	}
-	
-	public boolean isNewFile(){
-		return this.newFile;
-	}
-	
-	public boolean isLocalFile(){
-		return this.localFile;
-	}
-	
-	public boolean isUnsavedFile() {
-		return this.unsavedFile;
-	}
-	
-	public void setUnsavedFile() {
-		this.unsavedFile = true;
-	}
-	
-	public void setChooserPath(String chooserPath){
-		this.chooserPath = chooserPath;
-	}
-	
-	public void setChooserPath(URL url){
-		String path = getFilePath(url);
-		if( path != null ){
-			this.setChooserPath( path );
-		}
-	}
-	
-	public String getCurrentFileName(String defaultName) {
-		if(!this.isNewFile()){
-			URL url = getCurrentURL();
-			if(url != null){
-				return decode(new File(url.getFile()).getName());
-			}
-		}
-		return defaultName;
-	}
-	
-	public String getCurrentFilePath() {
-		if(!this.isNewFile()){
-			URL url = getCurrentURL();
-			if(url != null){
-				String file = getFilePath(url);
-				if(file != null){
-					return decode(file);
-				}
-			}
-		}
-		return this.chooserPath;
-	}
-	
-	public String getSavePath() {
-		String current = getCurrentFilePath();
-		return (current != null ? current : this.chooserPath);
-	}
-	
-	public String getOpenPath() {
-		return this.chooserPath;
-	}
-	
-	protected String getFilePath(URL url){
-		if(isLocalFile(url)){
-			return new File(url.getFile()).getParent();
-		}
-		return null;
-	}
-	
-	protected String decode(String url){
-		try {
-			return URLDecoder.decode(url, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
-		}
-		return url;
-	}
-	
-	protected boolean isLocalFile(URL url){
-		try {
-			if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){
-				return true;
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return false;
-	}
-	
-	protected URL getCurrentURL(){
-		if(!this.urls.isEmpty()){
-			return (URL)this.urls.get(0);
-		}
-		return null;
-	}
-	
-	public void addURL(URL url){
-		if(url != null){
-			removeURL(url);
-			this.urls.add(0,url);
-			checkLimit();
-			setChanged(true);
-		}
-		saveHistory();
-	}
-	
-	public List getURLs(){
-		return this.urls;
-	}
-	
-	private void checkLimit(){
-		while(this.urls.size() > URL_LIMIT){
-			this.urls.remove(this.urls.size() - 1);
-		}
-	}
-	
-	private void removeURL(URL url){
-		for(int i = 0; i < this.urls.size(); i++){
-			URL old = (URL)this.urls.get(i);
-			if(old.toString().equals(url.toString())){
-				this.urls.remove(i);
-				break;
-			}
-		}
-	}
-	
-	public boolean isChanged() {
-		return this.changed;
-	}
-	
-	public void setChanged(boolean changed) {
-		this.changed = changed;
-	}
-	
-	public void loadHistory() {
-		try {
-			this.urls.clear();
-			if(new File(getHistoryFileName()).exists()){
-				InputStream inputStream = new FileInputStream(getHistoryFileName());
-				Properties properties = new Properties();
-				properties.load(inputStream);
-				
-				this.chooserPath = (String)properties.get("history.path");
-				
-				int count = Integer.parseInt((String)properties.get("history.count"));
-				for(int i = 0; i < count;i ++){
-					String url = (String)properties.get("history." + i);
-					if(URL_LIMIT > i && url != null && url.length() > 0){
-						this.urls.add(new URL(url));
-					}
-				}
-				setChanged(true);
-			}else{
-				this.saveHistory();
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void saveHistory(){
-		try {
-			Properties properties = new Properties();
-			
-			int count = this.urls.size();
-			for(int i = 0;i < count;i ++){
-				properties.put("history." + i,this.urls.get(i).toString());
-			}
-			properties.put("history.count",Integer.toString(count));
-			if(this.chooserPath != null){
-				properties.put("history.path",this.chooserPath);
-			}
-			properties.store(new FileOutputStream(getHistoryFileName()),"History Files");
-		} catch (FileNotFoundException e1) {
-			e1.printStackTrace();
-		} catch (IOException e1) {
-			e1.printStackTrace();
-		}
-	}
-	
-	private String getHistoryFileName(){
-		return TGFileUtils.PATH_USER_CONFIG + File.separator + "history.properties";
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/helper/SyncThread.java b/TuxGuitar/src/org/herac/tuxguitar/gui/helper/SyncThread.java
deleted file mode 100644
index 260aea1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/helper/SyncThread.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Created on 09-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.helper;
-
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class SyncThread extends Thread {
-	
-	private TGSynchronizer.TGRunnable runnable;
-	
-	public SyncThread(TGSynchronizer.TGRunnable runnable) {
-		this.runnable = runnable;
-	}
-	
-	public SyncThread(final Runnable runnable) {
-		this(new TGSynchronizer.TGRunnable() {
-			public void run() throws Throwable {
-				runnable.run();
-			}
-		});
-	}
-	
-	public void run() {
-		try {
-			TGSynchronizer.instance().addRunnable(this.runnable);
-		} catch (Throwable e) {
-			e.printStackTrace();
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/ItemBase.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/ItemBase.java
deleted file mode 100644
index 18ca6c1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/ItemBase.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.herac.tuxguitar.gui.items;
-
-public interface ItemBase {
-	/**
-	 * Actualiza los estados
-	 */
-	public void update();
-	/**
-	 * Actualiza los textos
-	 */
-	public void loadProperties();
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/ItemManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/ItemManager.java
deleted file mode 100644
index 187f7e0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/ItemManager.java
+++ /dev/null
@@ -1,448 +0,0 @@
-/*
- * Created on 18-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.CoolBar;
-import org.eclipse.swt.widgets.CoolItem;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.ToolBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGUpdateListener;
-import org.herac.tuxguitar.gui.items.menu.BeatMenuItem;
-import org.herac.tuxguitar.gui.items.menu.CompositionMenuItem;
-import org.herac.tuxguitar.gui.items.menu.EditMenuItem;
-import org.herac.tuxguitar.gui.items.menu.FileMenuItem;
-import org.herac.tuxguitar.gui.items.menu.HelpMenuItem;
-import org.herac.tuxguitar.gui.items.menu.MarkerMenuItem;
-import org.herac.tuxguitar.gui.items.menu.MeasureMenuItem;
-import org.herac.tuxguitar.gui.items.menu.ToolMenuItem;
-import org.herac.tuxguitar.gui.items.menu.TrackMenuItem;
-import org.herac.tuxguitar.gui.items.menu.TransportMenuItem;
-import org.herac.tuxguitar.gui.items.menu.ViewMenuItem;
-import org.herac.tuxguitar.gui.items.tool.BeatToolItems;
-import org.herac.tuxguitar.gui.items.tool.CompositionToolItems;
-import org.herac.tuxguitar.gui.items.tool.DurationToolItems;
-import org.herac.tuxguitar.gui.items.tool.DynamicToolItems;
-import org.herac.tuxguitar.gui.items.tool.EditToolItems;
-import org.herac.tuxguitar.gui.items.tool.FileToolItems;
-import org.herac.tuxguitar.gui.items.tool.LayoutToolItems;
-import org.herac.tuxguitar.gui.items.tool.MarkerToolItems;
-import org.herac.tuxguitar.gui.items.tool.NoteEffectToolItems;
-import org.herac.tuxguitar.gui.items.tool.PropertiesToolItems;
-import org.herac.tuxguitar.gui.items.tool.TrackToolItems;
-import org.herac.tuxguitar.gui.items.tool.TransportToolItems;
-import org.herac.tuxguitar.gui.items.tool.ViewToolItems;
-import org.herac.tuxguitar.gui.items.xml.ToolBarsReader;
-import org.herac.tuxguitar.gui.items.xml.ToolBarsWriter;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ItemManager implements TGUpdateListener,IconLoader,LanguageLoader{
-	
-	private Menu menu;
-	private Menu popupMenu;
-	private CoolBar coolBar;
-	private List loadedToolItems;
-	private List loadedMenuItems;
-	private List loadedPopupMenuItems;
-	private ToolItems[] toolItems;
-	
-	private boolean layout_locked;
-	private boolean shouldReloadToolBars;
-	private boolean coolbarVisible;
-	private boolean updateCoolBarWrapIndicesEnabled;
-	
-	public ItemManager(){
-		this.loadedToolItems = new ArrayList();
-		this.loadedMenuItems = new ArrayList();
-		this.loadedPopupMenuItems = new ArrayList();
-		this.layout_locked = false;
-		this.setDefaultToolBars();
-		this.loadItems();
-		TuxGuitar.instance().getIconManager().addLoader(this);
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
-	}
-	
-	public void loadItems(){
-		this.createMenu();
-		this.createPopupMenu();
-		this.createCoolbar();
-	}
-	
-	public void createCoolbar() {
-		boolean initialized = (this.coolBar != null && !this.coolBar.isDisposed());
-		
-		this.layout_locked = true;
-		this.updateCoolBarWrapIndicesEnabled = true;
-		if( !initialized ){
-			FormData coolData = new FormData();
-			coolData.left = new FormAttachment(0);
-			coolData.right = new FormAttachment(100);
-			coolData.top = new FormAttachment(0,0);
-			
-			this.coolBar = new CoolBar(TuxGuitar.instance().getShell(),SWT.HORIZONTAL | SWT.FLAT);
-			this.coolBar.setLayoutData(coolData);
-			this.coolBar.addListener(SWT.Resize, new Listener() {
-				public void handleEvent(Event event) {
-					layoutCoolBar();
-				}
-			});
-			this.coolBar.addListener(SWT.DragDetect, new Listener() {
-				public void handleEvent(Event event) {
-					disableUpdateCoolBarWrapIndices();
-				}
-			});
-			
-			TuxGuitar.instance().getkeyBindingManager().appendListenersTo(this.coolBar);
-		}
-		this.makeCoolItems();
-		
-		this.layout_locked = false;
-		
-		if( initialized ){
-			this.layoutCoolBar();
-		}
-	}
-	
-	public void toogleToolbarVisibility(){
-		if(this.coolBar != null && !this.coolBar.isDisposed()){
-			this.layout_locked = true;
-			this.coolBar.setVisible( !this.coolbarVisible );
-			if( this.coolbarVisible ){
-				this.clearCoolBar();
-			}else{
-				this.makeCoolItems();
-			}
-			
-			this.layout_locked = false;
-			
-			this.layoutCoolBar();
-		}
-	}
-	
-	private void clearCoolBar(){
-		if(this.coolBar != null && !this.coolBar.isDisposed()){
-			this.loadedToolItems.clear();
-			CoolItem[] items = this.coolBar.getItems();
-			for(int i = 0;i < items.length; i ++){
-				items[i].dispose();
-			}
-			Control[] controls = this.coolBar.getChildren();
-			for(int i = 0;i < controls.length; i ++){
-				controls[i].dispose();
-			}
-		}
-		this.coolbarVisible = false;
-	}
-	
-	protected void updateCoolBarWrapIndices(){
-		int coolBarWidth = this.coolBar.getClientArea().width;
-		int coolItemsWidth = 0;
-		
-		List coolItemIndices = new ArrayList();
-		
-		CoolItem[] items = this.coolBar.getItems();
-		for(int i = 0;i < items.length; i ++){
-			Point controlSise = items[i].getControl().computeSize(SWT.DEFAULT, SWT.DEFAULT);
-			Point itemSize = items[i].computeSize(controlSise.x, controlSise.y);
-			
-			int nextCoolItemsWidth = ( coolItemsWidth + itemSize.x );
-			if( nextCoolItemsWidth > coolBarWidth ){
-				coolItemIndices.add( new Integer( i ) );
-				nextCoolItemsWidth = itemSize.x;
-			}
-			coolItemsWidth = nextCoolItemsWidth;
-		}
-		
-		int[] coolItemIndicesArray = new int[ coolItemIndices.size() ];
-		for(int i = 0;i < coolItemIndicesArray.length; i ++){
-			coolItemIndicesArray[i] = ((Integer)coolItemIndices.get(i)).intValue();
-		}
-		
-		this.coolBar.setWrapIndices( coolItemIndicesArray );
-	}
-	
-	protected void layoutCoolBar(){
-		if(!this.layout_locked){
-			this.layout_locked = true;
-			if( this.updateCoolBarWrapIndicesEnabled ){
-				this.updateCoolBarWrapIndices();
-			}
-			this.layoutShellLater();
-			this.layout_locked = false;
-		}
-	}
-	
-	protected void layoutShell(){
-		if(!this.layout_locked){
-			this.layout_locked = true;
-			TuxGuitar.instance().getShell().layout(true,true);
-			this.layout_locked = false;
-		}
-	}
-	
-	protected void layoutShellLater(){
-		try {
-			TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-				public void run() throws Throwable {
-					layoutShell();
-				}
-			});
-		} catch (Throwable e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void makeCoolItems(){
-		this.clearCoolBar();
-		this.readToolBars();
-		for(int i = 0; i < this.toolItems.length; i ++){
-			if(this.toolItems[i].isEnabled()){
-				this.makeToolBar(this.toolItems[i]);
-			}
-		}
-		this.coolbarVisible = true;
-	}
-	
-	private void makeToolBar(ToolItems item){
-		ToolBar toolBar = new ToolBar(this.coolBar,SWT.HORIZONTAL | SWT.FLAT );
-		item.showItems(toolBar);
-		makeCoolItem(toolBar); 
-		this.loadedToolItems.add(item);
-	}
-	
-	private void makeCoolItem(ToolBar toolBar){
-		Point size = toolBar.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		CoolItem coolItem = new CoolItem(this.coolBar, SWT.NONE);
-		coolItem.setMinimumSize(size);
-		coolItem.setPreferredSize(coolItem.computeSize(size.x, size.y));
-		coolItem.setControl(toolBar);
-	}
-	
-	public void createMenu() {
-		Shell shell = TuxGuitar.instance().getShell();
-		if(this.menu == null || this.menu.isDisposed()){
-			this.menu = new Menu(shell, SWT.BAR);
-		}
-		MenuItem[] items = this.menu.getItems();
-		for(int i = 0; i < items.length;i ++){
-			items[i].dispose();
-		}
-		
-		this.loadedMenuItems.clear();
-		this.loadedMenuItems.add(new FileMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new EditMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new ViewMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new CompositionMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new TrackMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new MeasureMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new BeatMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new MarkerMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new TransportMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new ToolMenuItem(shell,this.menu, SWT.CASCADE));
-		this.loadedMenuItems.add(new HelpMenuItem(shell,this.menu, SWT.CASCADE));
-		this.showMenuItems(this.loadedMenuItems);
-		shell.setMenuBar(this.menu);
-	}
-	
-	public void createPopupMenu() {
-		Shell shell = TuxGuitar.instance().getShell();
-		if(this.popupMenu == null || this.popupMenu.isDisposed()){
-			this.popupMenu = new Menu(shell, SWT.POP_UP);
-		}
-		MenuItem[] items = this.popupMenu.getItems();
-		for(int i = 0; i < items.length;i ++){
-			items[i].dispose();
-		}
-		this.loadedPopupMenuItems.clear();
-		this.loadedPopupMenuItems.add(new EditMenuItem(shell,this.popupMenu, SWT.CASCADE));
-		this.loadedPopupMenuItems.add(new CompositionMenuItem(shell,this.popupMenu, SWT.CASCADE));
-		this.loadedPopupMenuItems.add(new TrackMenuItem(shell,this.popupMenu, SWT.CASCADE));
-		this.loadedPopupMenuItems.add(new MeasureMenuItem(shell,this.popupMenu, SWT.CASCADE));
-		this.loadedPopupMenuItems.add(new BeatMenuItem(shell,this.popupMenu, SWT.CASCADE)); 
-		this.loadedPopupMenuItems.add(new MarkerMenuItem(shell,this.popupMenu, SWT.CASCADE));
-		this.loadedPopupMenuItems.add(new TransportMenuItem(shell,this.popupMenu, SWT.CASCADE));
-		this.showMenuItems(this.loadedPopupMenuItems);
-	}
-	
-	private void showMenuItems(List items){
-		Iterator it = items.iterator();
-		while(it.hasNext()){
-			MenuItems item = (MenuItems)it.next();
-			item.showItems();
-		}
-	}
-	
-	public void updateItems(){
-		if(!isDisposed()){
-			updateItems(this.loadedToolItems);
-			updateItems(this.loadedMenuItems);
-			updateItems(this.loadedPopupMenuItems);
-		}
-	}
-	
-	public void updateItems(List items){
-		Iterator it = items.iterator();
-		while(it.hasNext()){
-			ItemBase item = (ItemBase)it.next();
-			item.update();
-		}
-	}
-	
-	public void loadProperties(){
-		if(!isDisposed()){
-			loadProperties(this.loadedToolItems);
-			loadProperties(this.loadedMenuItems);
-			loadProperties(this.loadedPopupMenuItems);
-		}
-	}
-	
-	public void loadProperties(List items){
-		Iterator it = items.iterator();
-		while(it.hasNext()){
-			ItemBase item = (ItemBase)it.next();
-			item.loadProperties();
-		}
-	}
-	
-	public void loadIcons(){
-		this.loadItems();
-	}
-	
-	public CoolBar getCoolbar(){
-		return this.coolBar;
-	}
-	
-	public Menu getPopupMenu(){
-		return this.popupMenu;
-	}
-	
-	public void readToolBars() {
-		File file = new File(getCoolItemsFileName());
-		if(!file.exists()){
-			writeToolBars();
-		}
-		this.shouldReloadToolBars = false;
-		ToolBarsReader.loadToolBars(this,file);
-	}
-	
-	public void writeToolBars(){
-		File file = new File(getCoolItemsFileName());
-		ToolBarsWriter.saveToolBars(getToolBars(), file);
-	}
-	
-	public void setToolBarStatus(String name, boolean enabled, int index){
-		if(index >= 0 && index < this.toolItems.length){
-			setToolBarPosition(name, index);
-			setToolBarEnabled(index, enabled);
-		}
-	}
-	
-	public void setToolBarEnabled(int index, boolean enabled){
-		this.shouldReloadToolBars = (this.shouldReloadToolBars || (this.toolItems[ index ].isEnabled() != enabled ));
-		
-		this.toolItems[ index ].setEnabled(enabled);
-	}
-	
-	public void setToolBarPosition(String name, int index){
-		if(index >= 0 && index < this.toolItems.length){
-			ToolItems element = this.toolItems[index];
-			if( ! element.getName().trim().toLowerCase().equals(name.trim().toLowerCase())){
-				int oldIndex = -1;
-				for(int i = 0; i < this.toolItems.length; i ++){
-					if(this.toolItems[i].getName().trim().toLowerCase().equals(name.trim().toLowerCase())){
-						oldIndex = i;
-						break;
-					}
-				}
-				if(oldIndex == -1){
-					return;
-				}
-				this.toolItems[index] = this.toolItems[oldIndex];
-				this.toolItems[oldIndex] = element;
-				
-				this.shouldReloadToolBars = true;
-			}
-		}
-	}
-	
-	public ToolItems[] getToolBars(){
-		return this.toolItems;
-	}
-	
-	public boolean shouldReloadToolBars(){
-		return this.shouldReloadToolBars;
-	}
-	
-	public void setDefaultToolBars(){
-		this.toolItems = new ToolItems[]{
-				initToolItem(new FileToolItems(), true),
-				initToolItem(new EditToolItems(), true),
-				initToolItem(new PropertiesToolItems(), true),
-				initToolItem(new TrackToolItems(), true),
-				initToolItem(new DurationToolItems(), true),
-				initToolItem(new BeatToolItems(), true),
-				initToolItem(new CompositionToolItems(), true),
-				initToolItem(new TransportToolItems(), true),
-				initToolItem(new MarkerToolItems(), true),
-				initToolItem(new LayoutToolItems(), true),
-				initToolItem(new ViewToolItems(), true),
-				initToolItem(new NoteEffectToolItems(), true),
-				initToolItem(new DynamicToolItems(), true),
-		};
-		this.shouldReloadToolBars = true;
-	}
-	
-	private ToolItems initToolItem(ToolItems item, boolean enabled){
-		item.setEnabled(enabled);
-		return item;
-	}
-	
-	private boolean isDisposed(){
-		return (this.coolBar.isDisposed() || this.menu.isDisposed() || this.popupMenu.isDisposed());
-	}
-	
-	private String getCoolItemsFileName(){
-		return TGFileUtils.PATH_USER_CONFIG + File.separator + "toolbars.xml";
-	}
-
-	public void doUpdate(int type) {
-		if( type == TGUpdateListener.SELECTION ){
-			this.updateItems();
-		}
-	}
-	
-	public void disableUpdateCoolBarWrapIndices() {
-		if( this.updateCoolBarWrapIndicesEnabled ){
-			this.coolBar.setWrapIndices( null );
-		}
-		this.updateCoolBarWrapIndicesEnabled = false;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/MenuItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/MenuItems.java
deleted file mode 100644
index 6569a4e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/MenuItems.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.herac.tuxguitar.gui.items;
-
-
-import org.eclipse.swt.widgets.MenuItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBinding;
-
-public abstract class MenuItems implements ItemBase {
-	
-	public abstract void showItems();
-	
-	protected void setMenuItemTextAndAccelerator(MenuItem menuItem, String key,String action) {
-		String text = TuxGuitar.getProperty(key);
-		if (action != null) {
-			KeyBinding keyBinding = TuxGuitar.instance().getkeyBindingManager().getKeyBindingForAction(action);
-			if (keyBinding != null) {
-				text += "\t" + keyBinding.toString();
-			}
-		}
-		menuItem.setText(text);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/ToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/ToolItems.java
deleted file mode 100644
index 69744bd..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/ToolItems.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.herac.tuxguitar.gui.items;
-
-import org.eclipse.swt.widgets.ToolBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TablatureEditor;
-
-public abstract class ToolItems implements ItemBase{
-	
-	private String name;
-	private boolean enabled;
-	
-	public ToolItems(String name){
-		this.name = name;
-		this.enabled = true;
-	}
-	
-	public String getName(){
-		return this.name;
-	}
-	
-	public boolean isEnabled() {
-		return this.enabled;
-	}
-	
-	public void setEnabled(boolean enabled) {
-		this.enabled = enabled;
-	}
-	
-	protected TablatureEditor getEditor(){
-		return TuxGuitar.instance().getTablatureEditor();
-	}
-	
-	public abstract void showItems(ToolBar toolBar);
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/BeatMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/BeatMenuItem.java
deleted file mode 100644
index a80287e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/BeatMenuItem.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.insert.InsertTextAction;
-import org.herac.tuxguitar.gui.actions.note.ChangeTiedNoteAction;
-import org.herac.tuxguitar.gui.actions.note.CleanBeatAction;
-import org.herac.tuxguitar.gui.actions.note.DecrementNoteSemitoneAction;
-import org.herac.tuxguitar.gui.actions.note.IncrementNoteSemitoneAction;
-import org.herac.tuxguitar.gui.actions.note.MoveBeatsCustomAction;
-import org.herac.tuxguitar.gui.actions.note.MoveBeatsLeftAction;
-import org.herac.tuxguitar.gui.actions.note.MoveBeatsRightAction;
-import org.herac.tuxguitar.gui.actions.note.RemoveUnusedVoiceAction;
-import org.herac.tuxguitar.gui.actions.note.SetStrokeDownAction;
-import org.herac.tuxguitar.gui.actions.note.SetStrokeUpAction;
-import org.herac.tuxguitar.gui.actions.note.SetVoiceAutoAction;
-import org.herac.tuxguitar.gui.actions.note.SetVoiceDownAction;
-import org.herac.tuxguitar.gui.actions.note.SetVoiceUpAction;
-import org.herac.tuxguitar.gui.actions.note.ShiftNoteDownAction;
-import org.herac.tuxguitar.gui.actions.note.ShiftNoteUpAction;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.items.MenuItems;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGStroke;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class BeatMenuItem extends MenuItems{
-	
-	private MenuItem noteMenuItem;
-	private Menu menu;
-	private MenuItem tiedNote;
-	private MenuItem cleanBeat;
-	private MenuItem removeVoice;
-	private MenuItem insertText;
-	private MenuItem voiceAuto;
-	private MenuItem voiceUp;
-	private MenuItem voiceDown;
-	private MenuItem strokeUp;
-	private MenuItem strokeDown;
-	private MenuItem shiftUp;
-	private MenuItem shiftDown;
-	private MenuItem semitoneUp;
-	private MenuItem semitoneDown;
-	private MenuItem moveBeatsLeft;
-	private MenuItem moveBeatsRight;
-	private MenuItem moveBeatsCustom;
-	private DurationMenuItem durationMenuItem;
-	private ChordMenuItem chordMenuItem;
-	private NoteEffectsMenuItem effectMenuItem;
-	private DynamicMenuItem dynamicMenuItem;
-	
-	public BeatMenuItem(Shell shell,Menu parent, int style) {
-		this.noteMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//--Tied Note
-		this.tiedNote = new MenuItem(this.menu, SWT.CHECK);
-		this.tiedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeTiedNoteAction.NAME));
-		
-		//--Clean Beat
-		this.cleanBeat = new MenuItem(this.menu, SWT.PUSH);
-		this.cleanBeat.addSelectionListener(TuxGuitar.instance().getAction(CleanBeatAction.NAME));
-		
-		//--Remove Voice
-		this.removeVoice = new MenuItem(this.menu, SWT.PUSH);
-		this.removeVoice.addSelectionListener(TuxGuitar.instance().getAction(RemoveUnusedVoiceAction.NAME));
-		
-		//--Duration--
-		this.durationMenuItem = new DurationMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE);
-		this.durationMenuItem.showItems();
-		
-		//--Chord--
-		this.chordMenuItem = new ChordMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE);
-		this.chordMenuItem.showItems();
-		
-		//--Effects--
-		this.effectMenuItem = new NoteEffectsMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE);
-		this.effectMenuItem.showItems();
-		
-		//--Dynamic--
-		this.dynamicMenuItem = new DynamicMenuItem(this.menu.getShell(),this.menu,SWT.CASCADE);
-		this.dynamicMenuItem.showItems();
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		this.insertText = new MenuItem(this.menu, SWT.PUSH);
-		this.insertText.addSelectionListener(TuxGuitar.instance().getAction(InsertTextAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--Semitone Down
-		this.voiceAuto = new MenuItem(this.menu, SWT.PUSH);
-		this.voiceAuto.addSelectionListener(TuxGuitar.instance().getAction(SetVoiceAutoAction.NAME));
-		
-		//--Semitone Up
-		this.voiceUp = new MenuItem(this.menu, SWT.PUSH);
-		this.voiceUp.addSelectionListener(TuxGuitar.instance().getAction(SetVoiceUpAction.NAME));
-		
-		//--Semitone Down
-		this.voiceDown = new MenuItem(this.menu, SWT.PUSH);
-		this.voiceDown.addSelectionListener(TuxGuitar.instance().getAction(SetVoiceDownAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--Semitone Up
-		this.strokeUp = new MenuItem(this.menu, SWT.CHECK);
-		this.strokeUp.addSelectionListener(TuxGuitar.instance().getAction(SetStrokeUpAction.NAME));
-		
-		//--Semitone Down
-		this.strokeDown = new MenuItem(this.menu, SWT.CHECK);
-		this.strokeDown.addSelectionListener(TuxGuitar.instance().getAction(SetStrokeDownAction.NAME));
-				
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--Semitone Up
-		this.semitoneUp = new MenuItem(this.menu, SWT.PUSH);
-		this.semitoneUp.addSelectionListener(TuxGuitar.instance().getAction(IncrementNoteSemitoneAction.NAME));
-		
-		//--Semitone Down
-		this.semitoneDown = new MenuItem(this.menu, SWT.PUSH);
-		this.semitoneDown.addSelectionListener(TuxGuitar.instance().getAction(DecrementNoteSemitoneAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--Shift Up
-		this.shiftUp = new MenuItem(this.menu, SWT.PUSH);
-		this.shiftUp.addSelectionListener(TuxGuitar.instance().getAction(ShiftNoteUpAction.NAME));
-		
-		//--Shift Down
-		this.shiftDown = new MenuItem(this.menu, SWT.PUSH);
-		this.shiftDown.addSelectionListener(TuxGuitar.instance().getAction(ShiftNoteDownAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--Move Beats Left
-		this.moveBeatsLeft = new MenuItem(this.menu, SWT.PUSH);
-		this.moveBeatsLeft.addSelectionListener(TuxGuitar.instance().getAction(MoveBeatsLeftAction.NAME));
-		
-		//--Move Beats Right
-		this.moveBeatsRight = new MenuItem(this.menu, SWT.PUSH);
-		this.moveBeatsRight.addSelectionListener(TuxGuitar.instance().getAction(MoveBeatsRightAction.NAME));
-		
-		//--Move Beats Custom
-		this.moveBeatsCustom = new MenuItem(this.menu, SWT.PUSH);
-		this.moveBeatsCustom.addSelectionListener(TuxGuitar.instance().getAction(MoveBeatsCustomAction.NAME));
-		
-		this.noteMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-		TGBeat beat = caret.getSelectedBeat();
-		TGNote note = caret.getSelectedNote();
-		boolean restBeat = caret.isRestBeatSelected();
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.tiedNote.setEnabled(!running);
-		this.tiedNote.setSelection(note != null && note.isTiedNote());
-		this.cleanBeat.setEnabled(!running);
-		this.removeVoice.setEnabled(!running);
-		this.voiceAuto.setEnabled(!running && !restBeat);
-		this.voiceUp.setEnabled(!running && !restBeat);
-		this.voiceDown.setEnabled(!running && !restBeat);
-		this.strokeUp.setEnabled(!running && !restBeat);
-		this.strokeUp.setSelection( beat != null && beat.getStroke().getDirection() == TGStroke.STROKE_UP );
-		this.strokeDown.setEnabled(!running && !restBeat);
-		this.strokeDown.setSelection( beat != null && beat.getStroke().getDirection() == TGStroke.STROKE_DOWN );
-		this.semitoneUp.setEnabled(!running && note != null);
-		this.semitoneDown.setEnabled(!running && note != null);
-		this.shiftUp.setEnabled(!running && note != null);
-		this.shiftDown.setEnabled(!running && note != null);
-		this.insertText.setEnabled(!running);
-		this.moveBeatsLeft.setEnabled(!running);
-		this.moveBeatsRight.setEnabled(!running);
-		this.moveBeatsCustom.setEnabled(!running);
-		this.durationMenuItem.update();
-		this.chordMenuItem.update();
-		this.effectMenuItem.update();
-		this.dynamicMenuItem.update();
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.noteMenuItem, "beat", null);
-		setMenuItemTextAndAccelerator(this.cleanBeat, "beat.clean", CleanBeatAction.NAME);
-		setMenuItemTextAndAccelerator(this.removeVoice, "beat.voice.remove-unused", RemoveUnusedVoiceAction.NAME);
-		setMenuItemTextAndAccelerator(this.tiedNote, "note.tiednote", ChangeTiedNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.voiceAuto, "beat.voice-auto", SetVoiceAutoAction.NAME);
-		setMenuItemTextAndAccelerator(this.voiceUp, "beat.voice-up", SetVoiceUpAction.NAME);
-		setMenuItemTextAndAccelerator(this.voiceDown, "beat.voice-down", SetVoiceDownAction.NAME);
-		setMenuItemTextAndAccelerator(this.strokeUp, "beat.stroke-up", SetStrokeUpAction.NAME);
-		setMenuItemTextAndAccelerator(this.strokeDown, "beat.stroke-down", SetStrokeDownAction.NAME);
-		setMenuItemTextAndAccelerator(this.semitoneUp, "note.semitone-up", IncrementNoteSemitoneAction.NAME);
-		setMenuItemTextAndAccelerator(this.semitoneDown, "note.semitone-down", DecrementNoteSemitoneAction.NAME);
-		setMenuItemTextAndAccelerator(this.shiftUp, "note.shift-up", ShiftNoteUpAction.NAME);
-		setMenuItemTextAndAccelerator(this.shiftDown, "note.shift-down", ShiftNoteDownAction.NAME);
-		setMenuItemTextAndAccelerator(this.insertText, "text.insert", InsertTextAction.NAME);
-		setMenuItemTextAndAccelerator(this.moveBeatsLeft, "beat.move-left", MoveBeatsLeftAction.NAME);
-		setMenuItemTextAndAccelerator(this.moveBeatsRight, "beat.move-right", MoveBeatsRightAction.NAME);
-		setMenuItemTextAndAccelerator(this.moveBeatsCustom, "beat.move-custom", MoveBeatsCustomAction.NAME);
-		
-		this.durationMenuItem.loadProperties();
-		this.chordMenuItem.loadProperties();
-		this.effectMenuItem.loadProperties();
-		this.dynamicMenuItem.loadProperties();
-	}
-	
-	public void loadIcons(){
-		this.tiedNote.setImage(TuxGuitar.instance().getIconManager().getNoteTied());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ChordMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ChordMenuItem.java
deleted file mode 100644
index a1238c5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ChordMenuItem.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.insert.InsertChordAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-import org.herac.tuxguitar.song.models.TGChord;
-
-public class ChordMenuItem extends MenuItems{
-	private MenuItem chordMenuItem;
-	private Menu menu;
-	private MenuItem insertChord;
-	private MenuItem[] subMenuItems;
-	
-	private long lastEdit;
-	
-	public ChordMenuItem(Shell shell,Menu parent, int style) {
-		this.chordMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems() {
-		//--INSERT CHORD--
-		this.insertChord = new MenuItem(this.menu, SWT.PUSH);
-		this.insertChord.addSelectionListener(TuxGuitar.instance().getAction(InsertChordAction.NAME));
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--CUSTOM CHORDS--
-		this.addItems();
-		
-		this.chordMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void addItems() {
-		this.disposeItems();
-		this.subMenuItems = new MenuItem[TuxGuitar.instance().getCustomChordManager().countChords()];
-		for(int i = 0;i < this.subMenuItems.length; i++){
-			TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i);
-			this.subMenuItems[i] = new MenuItem(this.menu, SWT.PUSH);
-			this.subMenuItems[i].setData(chord);
-			this.subMenuItems[i].setText(chord.getName());
-			this.subMenuItems[i].addSelectionListener(TuxGuitar.instance().getAction(InsertChordAction.NAME));
-		}
-	}
-	
-	public void disposeItems() {
-		if(this.subMenuItems != null){
-			for(int i = 0;i < this.subMenuItems.length; i++){
-				this.subMenuItems[i].dispose();
-			}
-		}
-	}
-	
-	public void widgetSelected(SelectionEvent event) {
-		if (event.detail == SWT.ARROW && this.subMenuItems != null && this.subMenuItems.length > 0) {
-			ToolItem item = (ToolItem) event.widget;
-			Rectangle rect = item.getBounds();
-			Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
-			this.menu.setLocation(pt.x, pt.y + rect.height);
-			this.menu.setVisible(true);
-		}else{
-			TuxGuitar.instance().getAction(InsertChordAction.NAME).process(event);
-		}
-	}
-	
-	public void update(){
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		if(this.lastEdit != TuxGuitar.instance().getCustomChordManager().getLastEdit()){
-			this.addItems();
-			this.lastEdit = TuxGuitar.instance().getCustomChordManager().getLastEdit();
-		}
-		this.insertChord.setEnabled(!running);
-		for(int i = 0;i < this.subMenuItems.length; i++){
-			this.subMenuItems[i].setEnabled(!running);
-		}
-	}
-	
-	public void loadProperties() {
-		setMenuItemTextAndAccelerator(this.chordMenuItem, "chord", null);
-		setMenuItemTextAndAccelerator(this.insertChord, "insert.chord", InsertChordAction.NAME);
-	}
-	
-	public void loadIcons() {
-		//Nothing to do
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/CompositionMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/CompositionMenuItem.java
deleted file mode 100644
index 1ba66e5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/CompositionMenuItem.java
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.composition.ChangeClefAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeInfoAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeKeySignatureAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeTempoAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeTimeSignatureAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeTripletFeelAction;
-import org.herac.tuxguitar.gui.actions.insert.RepeatAlternativeAction;
-import org.herac.tuxguitar.gui.actions.insert.RepeatCloseAction;
-import org.herac.tuxguitar.gui.actions.insert.RepeatOpenAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class CompositionMenuItem extends MenuItems{
-	private MenuItem compositionMenuItem;
-	private Menu menu;
-	private MenuItem timeSignature;
-	private MenuItem tempo;
-	private MenuItem clef;
-	private MenuItem keySignature;
-	private MenuItem repeatOpen;
-	private MenuItem repeatClose;
-	private MenuItem repeatAlternative;
-	private MenuItem tripletFeel;
-	
-	private MenuItem properties;
-	
-	public CompositionMenuItem(Shell shell,Menu parent, int style) {
-		this.compositionMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//--TIME SIGNATURE--
-		this.timeSignature = new MenuItem(this.menu, SWT.PUSH);
-		this.timeSignature.addSelectionListener(TuxGuitar.instance().getAction(ChangeTimeSignatureAction.NAME));
-		//--TEMPO--
-		this.tempo = new MenuItem(this.menu, SWT.PUSH);
-		this.tempo.addSelectionListener(TuxGuitar.instance().getAction(ChangeTempoAction.NAME));
-		//--CLEF--
-		this.clef = new MenuItem(this.menu, SWT.PUSH);
-		this.clef.addSelectionListener(TuxGuitar.instance().getAction(ChangeClefAction.NAME));
-		//--KEY SIGNATURE--
-		this.keySignature = new MenuItem(this.menu, SWT.PUSH);
-		this.keySignature.addSelectionListener(TuxGuitar.instance().getAction(ChangeKeySignatureAction.NAME));
-		//--TRIPLET FEEL--
-		this.tripletFeel = new MenuItem(this.menu, SWT.PUSH);
-		this.tripletFeel.addSelectionListener(TuxGuitar.instance().getAction(ChangeTripletFeelAction.NAME));
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--REPEAT OPEN--
-		this.repeatOpen = new MenuItem(this.menu, SWT.PUSH);
-		this.repeatOpen.addSelectionListener(TuxGuitar.instance().getAction(RepeatOpenAction.NAME));
-		//--REPEAT CLOSE--
-		this.repeatClose = new MenuItem(this.menu, SWT.PUSH);
-		this.repeatClose.addSelectionListener(TuxGuitar.instance().getAction(RepeatCloseAction.NAME));
-		//--REPEAT ALTERNATIVE--
-		this.repeatAlternative = new MenuItem(this.menu, SWT.PUSH);
-		this.repeatAlternative.addSelectionListener(TuxGuitar.instance().getAction(RepeatAlternativeAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--INFO--
-		this.properties = new MenuItem(this.menu, SWT.PUSH);
-		this.properties.addSelectionListener(TuxGuitar.instance().getAction(ChangeInfoAction.NAME));
-		
-		this.compositionMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.timeSignature.setEnabled(!running);
-		this.tempo.setEnabled(!running);
-		this.clef.setEnabled(!running);
-		this.keySignature.setEnabled(!running);
-		this.tripletFeel.setEnabled(!running);
-		this.repeatOpen.setEnabled(!running);
-		this.repeatClose.setEnabled(!running);
-		this.repeatAlternative.setEnabled(!running);
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.compositionMenuItem, "composition", null);		
-		setMenuItemTextAndAccelerator(this.timeSignature, "composition.timesignature", ChangeTimeSignatureAction.NAME);
-		setMenuItemTextAndAccelerator(this.tempo, "composition.tempo", ChangeTempoAction.NAME);
-		setMenuItemTextAndAccelerator(this.clef, "composition.clef", ChangeClefAction.NAME);
-		setMenuItemTextAndAccelerator(this.keySignature, "composition.keysignature", ChangeKeySignatureAction.NAME);
-		setMenuItemTextAndAccelerator(this.tripletFeel, "composition.tripletfeel", ChangeTripletFeelAction.NAME);
-		setMenuItemTextAndAccelerator(this.repeatOpen, "repeat.open", RepeatOpenAction.NAME);
-		setMenuItemTextAndAccelerator(this.repeatClose, "repeat.close", RepeatCloseAction.NAME);
-		setMenuItemTextAndAccelerator(this.repeatAlternative, "repeat.alternative", RepeatAlternativeAction.NAME);
-		setMenuItemTextAndAccelerator(this.properties, "composition.properties", ChangeInfoAction.NAME);
-	}
-	
-	public void loadIcons() {
-		this.timeSignature.setImage(TuxGuitar.instance().getIconManager().getCompositionTimeSignature());
-		this.tempo.setImage(TuxGuitar.instance().getIconManager().getCompositionTempo());
-		this.repeatOpen.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatOpen());
-		this.repeatClose.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatClose());
-		this.repeatAlternative.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatAlternative());
-		this.properties.setImage(TuxGuitar.instance().getIconManager().getSongProperties());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/DurationMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/DurationMenuItem.java
deleted file mode 100644
index 84afc5b..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/DurationMenuItem.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.duration.ChangeDottedDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.ChangeDoubleDottedDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.ChangeDivisionTypeAction;
-import org.herac.tuxguitar.gui.actions.duration.SetEighthDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetHalfDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetQuarterDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetSixteenthDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetSixtyFourthDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetThirtySecondDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetWholeDurationAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-import org.herac.tuxguitar.song.models.TGDuration;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class DurationMenuItem  extends MenuItems{
-	private MenuItem durationMenuItem;
-	private Menu menu;
-	private MenuItem whole;
-	private MenuItem half;
-	private MenuItem quarter;
-	private MenuItem eighth;
-	private MenuItem sixteenth;
-	private MenuItem thirtySecond;
-	private MenuItem sixtyFourth;
-	private MenuItem dotted;
-	private MenuItem doubleDotted;
-	private MenuItem division;
-	
-	public DurationMenuItem(Shell shell,Menu parent, int style) {
-		this.durationMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//--whole--
-		this.whole = new MenuItem(this.menu, SWT.PUSH);
-		this.whole.addSelectionListener(TuxGuitar.instance().getAction(SetWholeDurationAction.NAME));
-		//--half--
-		this.half = new MenuItem(this.menu, SWT.PUSH);
-		this.half.addSelectionListener(TuxGuitar.instance().getAction(SetHalfDurationAction.NAME));
-		//--quarter--
-		this.quarter = new MenuItem(this.menu, SWT.PUSH);
-		this.quarter.addSelectionListener(TuxGuitar.instance().getAction(SetQuarterDurationAction.NAME));
-		//--Eighth--
-		this.eighth = new MenuItem(this.menu, SWT.PUSH);
-		this.eighth.addSelectionListener(TuxGuitar.instance().getAction(SetEighthDurationAction.NAME));
-		//--sixteenth--
-		this.sixteenth = new MenuItem(this.menu, SWT.PUSH);
-		this.sixteenth.addSelectionListener(TuxGuitar.instance().getAction(SetSixteenthDurationAction.NAME));
-		//--thirtySecond--
-		this.thirtySecond = new MenuItem(this.menu, SWT.PUSH);
-		this.thirtySecond.addSelectionListener(TuxGuitar.instance().getAction(SetThirtySecondDurationAction.NAME));
-		//--sixtyFourth--
-		this.sixtyFourth = new MenuItem(this.menu, SWT.PUSH);
-		this.sixtyFourth.addSelectionListener(TuxGuitar.instance().getAction(SetSixtyFourthDurationAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--dotted---
-		this.dotted = new MenuItem(this.menu, SWT.PUSH);
-		this.dotted.addSelectionListener(TuxGuitar.instance().getAction(ChangeDottedDurationAction.NAME));
-		
-		this.doubleDotted = new MenuItem(this.menu, SWT.PUSH);
-		this.doubleDotted.addSelectionListener(TuxGuitar.instance().getAction(ChangeDoubleDottedDurationAction.NAME));
-		
-		//--division---
-		this.division = new MenuItem(this.menu, SWT.PUSH);
-		this.division.addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME));
-		
-		this.durationMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.whole.setEnabled(!running);
-		this.half.setEnabled(!running);
-		this.quarter.setEnabled(!running);
-		this.eighth.setEnabled(!running);
-		this.sixteenth.setEnabled(!running);
-		this.thirtySecond.setEnabled(!running);
-		this.sixtyFourth.setEnabled(!running);
-		this.dotted.setEnabled(!running);
-		this.doubleDotted.setEnabled(!running);
-		this.division.setEnabled(!running);
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.durationMenuItem, "duration", null);
-		setMenuItemTextAndAccelerator(this.whole, "duration.whole", SetWholeDurationAction.NAME);
-		setMenuItemTextAndAccelerator(this.half, "duration.half", SetHalfDurationAction.NAME);
-		setMenuItemTextAndAccelerator(this.quarter, "duration.quarter", SetQuarterDurationAction.NAME);
-		setMenuItemTextAndAccelerator(this.eighth, "duration.eighth", SetEighthDurationAction.NAME);
-		setMenuItemTextAndAccelerator(this.sixteenth, "duration.sixteenth", SetSixteenthDurationAction.NAME);
-		setMenuItemTextAndAccelerator(this.thirtySecond, "duration.thirtysecond", SetThirtySecondDurationAction.NAME);
-		setMenuItemTextAndAccelerator(this.sixtyFourth, "duration.sixtyfourth", SetSixtyFourthDurationAction.NAME);
-		setMenuItemTextAndAccelerator(this.dotted, "duration.dotted", ChangeDottedDurationAction.NAME);
-		setMenuItemTextAndAccelerator(this.doubleDotted, "duration.doubledotted", ChangeDoubleDottedDurationAction.NAME);
-		setMenuItemTextAndAccelerator(this.division, "duration.division-type", ChangeDivisionTypeAction.NAME);
-	}
-	
-	public void loadIcons() {
-		this.whole.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.WHOLE));
-		this.half.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.HALF));
-		this.quarter.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.QUARTER));
-		this.eighth.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH));
-		this.sixteenth.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
-		this.thirtySecond.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
-		this.sixtyFourth.setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
-		this.dotted.setImage(TuxGuitar.instance().getIconManager().getDurationDotted());
-		this.doubleDotted.setImage(TuxGuitar.instance().getIconManager().getDurationDoubleDotted());
-		this.division.setImage(TuxGuitar.instance().getIconManager().getDivisionType());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/DynamicMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/DynamicMenuItem.java
deleted file mode 100644
index ece4f5c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/DynamicMenuItem.java
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.note.ChangeVelocityAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGVelocities;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class DynamicMenuItem extends MenuItems{
-	private MenuItem dynamicMenuItem;
-	private Menu menu;
-	private MenuItem pianoPianissimo;
-	private MenuItem pianissimo;
-	private MenuItem piano;
-	private MenuItem mezzoPiano;
-	private MenuItem mezzoForte;
-	private MenuItem forte;
-	private MenuItem fortissimo;
-	private MenuItem forteFortissimo;
-	
-	public DynamicMenuItem(Shell shell,Menu parent, int style) {
-		this.dynamicMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		
-		this.pianoPianissimo = new MenuItem(this.menu, SWT.CHECK);
-		this.pianoPianissimo.setData(new Integer(TGVelocities.PIANO_PIANISSIMO));
-		this.pianoPianissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		this.pianissimo = new MenuItem(this.menu, SWT.CHECK);
-		this.pianissimo.setData(new Integer(TGVelocities.PIANISSIMO));
-		this.pianissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		this.piano = new MenuItem(this.menu, SWT.CHECK);
-		this.piano.setData(new Integer(TGVelocities.PIANO));
-		this.piano.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		this.mezzoPiano = new MenuItem(this.menu, SWT.CHECK);
-		this.mezzoPiano.setData(new Integer(TGVelocities.MEZZO_PIANO));
-		this.mezzoPiano.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		this.mezzoForte = new MenuItem(this.menu, SWT.CHECK);
-		this.mezzoForte.setData(new Integer(TGVelocities.MEZZO_FORTE));
-		this.mezzoForte.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		this.forte = new MenuItem(this.menu, SWT.CHECK);
-		this.forte.setData(new Integer(TGVelocities.FORTE));
-		this.forte.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		this.fortissimo = new MenuItem(this.menu, SWT.CHECK);
-		this.fortissimo.setData(new Integer(TGVelocities.FORTISSIMO));
-		this.fortissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		this.forteFortissimo = new MenuItem(this.menu, SWT.CHECK);
-		this.forteFortissimo.setData(new Integer(TGVelocities.FORTE_FORTISSIMO));
-		this.forteFortissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		this.dynamicMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote();
-		int velocity = ((note != null)?note.getVelocity():TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getVelocity());
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.pianoPianissimo.setSelection(velocity == TGVelocities.PIANO_PIANISSIMO);
-		this.pianoPianissimo.setEnabled(!running);
-		this.pianissimo.setSelection(velocity == TGVelocities.PIANISSIMO);
-		this.pianissimo.setEnabled(!running);
-		this.piano.setSelection(velocity == TGVelocities.PIANO);
-		this.piano.setEnabled(!running);
-		this.mezzoPiano.setSelection(velocity == TGVelocities.MEZZO_PIANO);
-		this.mezzoPiano.setEnabled(!running);
-		this.mezzoForte.setSelection(velocity == TGVelocities.MEZZO_FORTE);
-		this.mezzoForte.setEnabled(!running);
-		this.forte.setSelection(velocity == TGVelocities.FORTE);
-		this.forte.setEnabled(!running);
-		this.fortissimo.setSelection(velocity == TGVelocities.FORTISSIMO);
-		this.fortissimo.setEnabled(!running);
-		this.forteFortissimo.setSelection(velocity == TGVelocities.FORTE_FORTISSIMO);
-		this.forteFortissimo.setEnabled(!running);
-	}
-	
-	public void loadProperties(){
-		this.dynamicMenuItem.setText(TuxGuitar.getProperty("dynamic"));
-		this.pianoPianissimo.setText(TuxGuitar.getProperty("dynamic.piano-pianissimo"));
-		this.pianissimo.setText(TuxGuitar.getProperty("dynamic.pianissimo"));
-		this.piano.setText(TuxGuitar.getProperty("dynamic.piano"));
-		this.mezzoPiano.setText(TuxGuitar.getProperty("dynamic.mezzo-piano"));
-		this.mezzoForte.setText(TuxGuitar.getProperty("dynamic.mezzo-forte"));
-		this.forte.setText(TuxGuitar.getProperty("dynamic.forte"));
-		this.fortissimo.setText(TuxGuitar.getProperty("dynamic.fortissimo"));
-		this.forteFortissimo.setText(TuxGuitar.getProperty("dynamic.forte-fortissimo"));
-	}
-	
-	public void loadIcons(){
-		//Nothing to do
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/EditMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/EditMenuItem.java
deleted file mode 100644
index 354baec..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/EditMenuItem.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.edit.RedoAction;
-import org.herac.tuxguitar.gui.actions.edit.SetMouseModeEditionAction;
-import org.herac.tuxguitar.gui.actions.edit.SetMouseModeSelectionAction;
-import org.herac.tuxguitar.gui.actions.edit.SetNaturalKeyAction;
-import org.herac.tuxguitar.gui.actions.edit.SetVoice1Action;
-import org.herac.tuxguitar.gui.actions.edit.SetVoice2Action;
-import org.herac.tuxguitar.gui.actions.edit.UndoAction;
-import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit;
-import org.herac.tuxguitar.gui.items.MenuItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class EditMenuItem extends MenuItems{
-	
-	private MenuItem editMenuItem;
-	private Menu menu; 
-	private MenuItem undo;
-	private MenuItem redo;
-	private MenuItem modeSelection;
-	private MenuItem modeEdition;
-	private MenuItem notNaturalKey;
-	private MenuItem voice1;
-	private MenuItem voice2;
-	
-	public EditMenuItem(Shell shell,Menu parent, int style) {
-		this.editMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//---------------------------------------------------
-		//--UNDO--
-		this.undo = new MenuItem(this.menu, SWT.PUSH);
-		this.undo.addSelectionListener(TuxGuitar.instance().getAction(UndoAction.NAME));
-		//--REDO--
-		this.redo = new MenuItem(this.menu, SWT.PUSH);
-		this.redo.addSelectionListener(TuxGuitar.instance().getAction(RedoAction.NAME));
-		//--SEPARATOR
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--TABLATURE EDIT MODE
-		this.modeSelection = new MenuItem(this.menu, SWT.RADIO);
-		this.modeSelection.addSelectionListener(TuxGuitar.instance().getAction(SetMouseModeSelectionAction.NAME));
-		//--SCORE EDIT MODE
-		this.modeEdition = new MenuItem(this.menu, SWT.RADIO);
-		this.modeEdition.addSelectionListener(TuxGuitar.instance().getAction(SetMouseModeEditionAction.NAME));
-		//--NATURAL NOTES
-		this.notNaturalKey = new MenuItem(this.menu, SWT.CHECK);
-		this.notNaturalKey.addSelectionListener(TuxGuitar.instance().getAction(SetNaturalKeyAction.NAME));
-		//--SEPARATOR
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--VOICE 1
-		this.voice1 = new MenuItem(this.menu, SWT.RADIO);
-		this.voice1.addSelectionListener(TuxGuitar.instance().getAction(SetVoice1Action.NAME));
-		//--VOICE 2
-		this.voice2 = new MenuItem(this.menu, SWT.RADIO);
-		this.voice2.addSelectionListener(TuxGuitar.instance().getAction(SetVoice2Action.NAME));
-		
-		this.editMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		EditorKit kit = TuxGuitar.instance().getTablatureEditor().getTablature().getEditorKit();
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.undo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canUndo());
-		this.redo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canRedo());
-		this.modeSelection.setSelection(kit.getMouseMode() == EditorKit.MOUSE_MODE_SELECTION);
-		this.modeSelection.setEnabled(!running);
-		this.modeEdition.setSelection(kit.getMouseMode() == EditorKit.MOUSE_MODE_EDITION);
-		this.modeEdition.setEnabled(!running);
-		this.notNaturalKey.setSelection(!kit.isNatural());
-		this.notNaturalKey.setEnabled(!running && kit.getMouseMode() == EditorKit.MOUSE_MODE_EDITION);
-		this.voice1.setSelection(kit.getTablature().getCaret().getVoice() == 0);
-		this.voice2.setSelection(kit.getTablature().getCaret().getVoice() == 1);
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.editMenuItem, "edit.menu", null);
-		setMenuItemTextAndAccelerator(this.undo, "edit.undo", UndoAction.NAME);
-		setMenuItemTextAndAccelerator(this.redo, "edit.redo", RedoAction.NAME);
-		setMenuItemTextAndAccelerator(this.modeSelection, "edit.mouse-mode-selection", SetMouseModeSelectionAction.NAME);
-		setMenuItemTextAndAccelerator(this.modeEdition, "edit.mouse-mode-edition", SetMouseModeEditionAction.NAME);
-		setMenuItemTextAndAccelerator(this.notNaturalKey, "edit.not-natural-key", SetNaturalKeyAction.NAME);
-		setMenuItemTextAndAccelerator(this.voice1, "edit.voice-1", SetVoice1Action.NAME);
-		setMenuItemTextAndAccelerator(this.voice2, "edit.voice-2", SetVoice2Action.NAME);
-	}
-	
-	public void loadIcons(){
-		this.undo.setImage(TuxGuitar.instance().getIconManager().getEditUndo());
-		this.redo.setImage(TuxGuitar.instance().getIconManager().getEditRedo());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/FileMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/FileMenuItem.java
deleted file mode 100644
index 92d208f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/FileMenuItem.java
+++ /dev/null
@@ -1,308 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.file.ExitAction;
-import org.herac.tuxguitar.gui.actions.file.ExportSongAction;
-import org.herac.tuxguitar.gui.actions.file.ImportSongAction;
-import org.herac.tuxguitar.gui.actions.file.NewFileAction;
-import org.herac.tuxguitar.gui.actions.file.OpenFileAction;
-import org.herac.tuxguitar.gui.actions.file.OpenURLAction;
-import org.herac.tuxguitar.gui.actions.file.PrintAction;
-import org.herac.tuxguitar.gui.actions.file.PrintPreviewAction;
-import org.herac.tuxguitar.gui.actions.file.SaveAsFileAction;
-import org.herac.tuxguitar.gui.actions.file.SaveFileAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.io.base.TGLocalFileExporter;
-import org.herac.tuxguitar.io.base.TGLocalFileImporter;
-import org.herac.tuxguitar.io.base.TGRawExporter;
-import org.herac.tuxguitar.io.base.TGRawImporter;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class FileMenuItem extends MenuItems {
-	private MenuItem fileMenuItem;
-	private Menu menu;
-	private Menu importMenu; 
-	private Menu exportMenu; 
-	private Menu historyMenu;
-	private MenuItem newSong;
-	private MenuItem open;
-	private MenuItem openURL;
-	private MenuItem save;
-	private MenuItem saveAs;
-	private MenuItem importItem;
-	private MenuItem exportItem;
-	private MenuItem printPreview;
-	private MenuItem print;
-	private MenuItem historyItem;
-	private MenuItem[] historyFiles;
-	private MenuItem exit;
-	
-	private List importItems;
-	private List exportItems;
-	
-	public FileMenuItem(Shell shell,Menu parent, int style) {
-		this.fileMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-		this.importItems = new ArrayList();
-		this.exportItems = new ArrayList();
-	}
-	
-	public void showItems(){
-		//---------------------------------------------------
-		//--NEW--
-		this.newSong = new MenuItem(this.menu, SWT.PUSH);
-		this.newSong.addSelectionListener(TuxGuitar.instance().getAction(NewFileAction.NAME));
-		//--OPEN--
-		this.open = new MenuItem(this.menu, SWT.PUSH);
-		this.open.addSelectionListener(TuxGuitar.instance().getAction(OpenFileAction.NAME));
-		//--OPEN--
-		this.openURL = new MenuItem(this.menu, SWT.PUSH);
-		this.openURL.addSelectionListener(TuxGuitar.instance().getAction(OpenURLAction.NAME));
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--SAVE--
-		this.save = new MenuItem(this.menu, SWT.PUSH);
-		this.save.addSelectionListener(TuxGuitar.instance().getAction(SaveFileAction.NAME));
-		//--SAVE AS--
-		this.saveAs = new MenuItem(this.menu, SWT.PUSH);
-		this.saveAs.addSelectionListener(TuxGuitar.instance().getAction(SaveAsFileAction.NAME));
-		
-		//-- IMPORT | EXPORT --
-		int countImporters = TGFileFormatManager.instance().countImporters();
-		int countExporters = TGFileFormatManager.instance().countExporters();
-		if( ( countImporters + countExporters ) > 0 ){
-			//--SEPARATOR--
-			new MenuItem(this.menu, SWT.SEPARATOR);
-			
-			//--IMPORT--
-			this.importItems.clear();
-			if( countImporters > 0 ){
-				this.importItem = new MenuItem(this.menu,SWT.CASCADE);
-				this.importMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN);
-				this.addImporters();
-			}
-			
-			//--EXPORT--
-			this.exportItems.clear();
-			if( countExporters > 0 ){
-				this.exportItem = new MenuItem(this.menu,SWT.CASCADE);
-				this.exportMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN);
-				this.addExporters();
-			}
-		}
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--PRINT PREVIEW--
-		this.printPreview = new MenuItem(this.menu, SWT.PUSH);
-		this.printPreview.addSelectionListener(TuxGuitar.instance().getAction(PrintPreviewAction.NAME));
-		//--PRINT--
-		this.print = new MenuItem(this.menu, SWT.PUSH);
-		this.print.addSelectionListener(TuxGuitar.instance().getAction(PrintAction.NAME));
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--HISTORY--
-		this.historyItem = new MenuItem(this.menu,SWT.CASCADE);
-		this.historyMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN);
-		this.updateHistoryFiles();
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--EXIT--
-		this.exit = new MenuItem(this.menu, SWT.PUSH);
-		this.exit.addSelectionListener(TuxGuitar.instance().getAction(ExitAction.NAME));
-		
-		//---------------------------------------------------
-		if( this.importItem != null ){
-			this.importItem.setMenu(this.importMenu);
-		}
-		if( this.exportItem != null ){
-			this.exportItem.setMenu(this.exportMenu);
-		}
-		this.historyItem.setMenu(this.historyMenu);
-		this.fileMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	private void addImporters(){
-		List importersRaw = new ArrayList();
-		List importersFile = new ArrayList();
-		
-		Iterator importers = TGFileFormatManager.instance().getImporters();
-		while(importers.hasNext()){
-			TGRawImporter importer = (TGRawImporter)importers.next();
-			if( importer instanceof TGLocalFileImporter ){
-				importersFile.add( importer );
-			}else{
-				importersRaw.add( importer );
-			}
-		}
-		
-		for( int i = 0 ; i < importersFile.size() ; i ++ ){
-			TGRawImporter importer = (TGRawImporter)importersFile.get( i );
-			MenuItem item = new MenuItem(this.importMenu, SWT.PUSH);
-			item.setData(importer);
-			item.addSelectionListener(TuxGuitar.instance().getAction(ImportSongAction.NAME));
-			this.importItems.add( item );
-		}
-		
-		//--SEPARATOR--
-		if( !importersFile.isEmpty() && !importersRaw.isEmpty() ){
-			new MenuItem(this.importMenu, SWT.SEPARATOR);
-		}
-		
-		for( int i = 0 ; i < importersRaw.size() ; i ++ ){
-			TGRawImporter importer = (TGRawImporter)importersRaw.get( i );
-			MenuItem item = new MenuItem(this.importMenu, SWT.PUSH);
-			item.setData(importer);
-			item.addSelectionListener(TuxGuitar.instance().getAction(ImportSongAction.NAME));
-			this.importItems.add( item );
-		}
-	}
-	
-	private void addExporters(){
-		List exportersRaw = new ArrayList();
-		List exportersFile = new ArrayList();
-		
-		Iterator exporters = TGFileFormatManager.instance().getExporters();
-		while(exporters.hasNext()){
-			TGRawExporter exporter = (TGRawExporter)exporters.next();
-			if( exporter instanceof TGLocalFileExporter ){
-				exportersFile.add( exporter );
-			}else{
-				exportersRaw.add( exporter );
-			}
-		}
-		
-		for( int i = 0 ; i < exportersFile.size() ; i ++ ){
-			TGRawExporter exporter = (TGRawExporter)exportersFile.get( i );
-			MenuItem item = new MenuItem(this.exportMenu, SWT.PUSH);
-			item.setData(exporter);
-			item.addSelectionListener(TuxGuitar.instance().getAction(ExportSongAction.NAME));
-			this.exportItems.add( item );
-		}
-		
-		//--SEPARATOR--
-		if( !exportersFile.isEmpty() && !exportersRaw.isEmpty() ){
-			new MenuItem(this.exportMenu, SWT.SEPARATOR);
-		}
-		
-		for( int i = 0 ; i < exportersRaw.size() ; i ++ ){
-			TGRawExporter exporter = (TGRawExporter)exportersRaw.get( i );
-			MenuItem item = new MenuItem(this.exportMenu, SWT.PUSH);
-			item.setData(exporter);
-			item.addSelectionListener(TuxGuitar.instance().getAction(ExportSongAction.NAME));
-			this.exportItems.add( item );
-		}
-	}
-	
-	private void disposeHistoryFiles(){
-		for(int i = 0;i < this.historyFiles.length; i++){
-			this.historyFiles[i].dispose();
-		}
-	}
-	
-	private void updateHistoryFiles(){
-		List urls = TuxGuitar.instance().getFileHistory().getURLs();
-		this.historyFiles = new MenuItem[urls.size()];
-		for(int i = 0;i < this.historyFiles.length; i++){
-			URL url = (URL)urls.get(i);
-			this.historyFiles[i] = new MenuItem(this.historyMenu, SWT.PUSH);
-			this.historyFiles[i].setText(decode(url.toString()));
-			this.historyFiles[i].setData(url);
-			this.historyFiles[i].addSelectionListener(TuxGuitar.instance().getAction(OpenFileAction.NAME));
-		}
-		this.historyItem.setEnabled(this.historyFiles.length > 0);
-	}
-	
-	private String decode(String url){
-		try {
-			return URLDecoder.decode(url, "UTF-8");
-		} catch (UnsupportedEncodingException e) {
-			e.printStackTrace();
-		}
-		return url;
-	}
-	
-	public void update(){
-		if(TuxGuitar.instance().getFileHistory().isChanged()){
-			disposeHistoryFiles();
-			updateHistoryFiles();
-			TuxGuitar.instance().getFileHistory().setChanged(false);
-		}
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.fileMenuItem, "file", null);
-		setMenuItemTextAndAccelerator(this.newSong, "file.new", NewFileAction.NAME);
-		setMenuItemTextAndAccelerator(this.open, "file.open", OpenFileAction.NAME);
-		setMenuItemTextAndAccelerator(this.openURL, "file.open-url", OpenURLAction.NAME);
-		setMenuItemTextAndAccelerator(this.save, "file.save", SaveFileAction.NAME);
-		setMenuItemTextAndAccelerator(this.saveAs, "file.save-as", SaveAsFileAction.NAME);
-		setMenuItemTextAndAccelerator(this.printPreview, "file.print-preview", PrintPreviewAction.NAME);
-		setMenuItemTextAndAccelerator(this.print, "file.print", PrintAction.NAME);
-		setMenuItemTextAndAccelerator(this.historyItem, "file.history", null);
-		setMenuItemTextAndAccelerator(this.exit, "file.exit", ExitAction.NAME);
-		
-		if( this.importItem != null ){
-			setMenuItemTextAndAccelerator(this.importItem, "file.import", ImportSongAction.NAME);
-			
-			Iterator importItems = this.importItems.iterator();
-			while(importItems.hasNext()){
-				MenuItem item = (MenuItem)importItems.next();
-				if( item.getData() instanceof TGLocalFileImporter ){
-					item.setText(TuxGuitar.getProperty("file.import") + " " + ((TGRawImporter)item.getData()).getImportName());
-				}else if( item.getData() instanceof TGRawImporter ){
-					item.setText(((TGRawImporter)item.getData()).getImportName());
-				}
-			}
-		}
-		if( this.exportItem != null ){
-			setMenuItemTextAndAccelerator(this.exportItem, "file.export", ExportSongAction.NAME);
-			
-			Iterator exportItems = this.exportItems.iterator();
-			while(exportItems.hasNext()){
-				MenuItem item = (MenuItem)exportItems.next();
-				if( item.getData() instanceof TGLocalFileExporter ){
-					item.setText(TuxGuitar.getProperty("file.export") + " " + ((TGRawExporter)item.getData()).getExportName());
-				}else if( item.getData() instanceof TGRawExporter ){
-					item.setText(((TGRawExporter)item.getData()).getExportName());
-				}
-			}
-		}
-	}
-	
-	public void loadIcons(){
-		this.newSong.setImage(TuxGuitar.instance().getIconManager().getFileNew());
-		this.open.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
-		this.save.setImage(TuxGuitar.instance().getIconManager().getFileSave());
-		this.saveAs.setImage(TuxGuitar.instance().getIconManager().getFileSaveAs());
-		this.printPreview.setImage(TuxGuitar.instance().getIconManager().getFilePrintPreview());
-		this.print.setImage(TuxGuitar.instance().getIconManager().getFilePrint());
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/HelpMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/HelpMenuItem.java
deleted file mode 100644
index a038e57..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/HelpMenuItem.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.help.ShowAboutAction;
-import org.herac.tuxguitar.gui.actions.help.ShowDocAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class HelpMenuItem extends MenuItems{
-	private MenuItem helpMenuItem;
-	private Menu menu; 
-	private MenuItem doc;
-	private MenuItem about;
-	
-	public HelpMenuItem(Shell shell,Menu parent, int style) {
-		this.helpMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//--Doc
-		this.doc = new MenuItem(this.menu, SWT.PUSH);
-		this.doc.addSelectionListener(TuxGuitar.instance().getAction(ShowDocAction.NAME));
-		
-		//--ABOUT
-		this.about = new MenuItem(this.menu, SWT.PUSH);
-		this.about.addSelectionListener(TuxGuitar.instance().getAction(ShowAboutAction.NAME));
-		
-		this.helpMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.helpMenuItem, "help", null);
-		setMenuItemTextAndAccelerator(this.doc, "help.doc", ShowDocAction.NAME);
-		setMenuItemTextAndAccelerator(this.about, "help.about", ShowAboutAction.NAME);
-	}
-	
-	public void loadIcons(){
-		//Nothing to do
-	}
-	
-	public void update(){
-		//Nothing to do
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/MarkerMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/MarkerMenuItem.java
deleted file mode 100644
index 04b5486..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/MarkerMenuItem.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.marker.AddMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoFirstMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoLastMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoNextMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoPreviousMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.ListMarkersAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class MarkerMenuItem extends MenuItems{
-	private MenuItem markerMenuItem;
-	private Menu menu;
-	private MenuItem add;
-	private MenuItem list;
-	private MenuItem first;
-	private MenuItem last;
-	private MenuItem next;
-	private MenuItem previous;
-	
-	public MarkerMenuItem(Shell shell,Menu parent, int style) {
-		this.markerMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//--ADD--
-		this.add = new MenuItem(this.menu, SWT.PUSH);
-		this.add.addSelectionListener(TuxGuitar.instance().getAction(AddMarkerAction.NAME));
-		
-		//--LIST--
-		this.list = new MenuItem(this.menu, SWT.PUSH);
-		this.list.addSelectionListener(TuxGuitar.instance().getAction(ListMarkersAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--FIRST--
-		this.first = new MenuItem(this.menu, SWT.PUSH);
-		this.first.addSelectionListener(TuxGuitar.instance().getAction(GoFirstMarkerAction.NAME));
-		
-		//--PREVIOUS--
-		this.previous = new MenuItem(this.menu, SWT.PUSH);
-		this.previous.addSelectionListener(TuxGuitar.instance().getAction(GoPreviousMarkerAction.NAME));
-		
-		//--PREVIOUS--
-		this.next = new MenuItem(this.menu, SWT.PUSH);
-		this.next.addSelectionListener(TuxGuitar.instance().getAction(GoNextMarkerAction.NAME));
-		
-		//--LAST--
-		this.last = new MenuItem(this.menu, SWT.PUSH);
-		this.last.addSelectionListener(TuxGuitar.instance().getAction(GoLastMarkerAction.NAME));
-		
-		this.markerMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		//Nothing to do
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.markerMenuItem, "marker", null);
-		setMenuItemTextAndAccelerator(this.add, "marker.add", AddMarkerAction.NAME);
-		setMenuItemTextAndAccelerator(this.list, "marker.list", ListMarkersAction.NAME);
-		setMenuItemTextAndAccelerator(this.first, "marker.first", GoFirstMarkerAction.NAME);
-		setMenuItemTextAndAccelerator(this.last, "marker.last", GoLastMarkerAction.NAME);
-		setMenuItemTextAndAccelerator(this.previous, "marker.previous", GoPreviousMarkerAction.NAME);
-		setMenuItemTextAndAccelerator(this.next, "marker.next", GoNextMarkerAction.NAME);
-	}
-	
-	public void loadIcons(){
-		this.add.setImage(TuxGuitar.instance().getIconManager().getMarkerAdd());
-		this.list.setImage(TuxGuitar.instance().getIconManager().getMarkerList());
-		this.first.setImage(TuxGuitar.instance().getIconManager().getMarkerFirst());
-		this.previous.setImage(TuxGuitar.instance().getIconManager().getMarkerPrevious());
-		this.next.setImage(TuxGuitar.instance().getIconManager().getMarkerNext());
-		this.last.setImage(TuxGuitar.instance().getIconManager().getMarkerLast());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/MeasureMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/MeasureMenuItem.java
deleted file mode 100644
index cde93ab..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/MeasureMenuItem.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.measure.AddMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.CleanMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.CopyMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.GoFirstMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.GoLastMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.GoNextMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.GoPreviousMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.PasteMeasureAction;
-import org.herac.tuxguitar.gui.actions.measure.RemoveMeasureAction;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.items.MenuItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class MeasureMenuItem extends MenuItems{
-	
-	private MenuItem measureMenuItem;
-	private Menu menu; 
-	private MenuItem first;
-	private MenuItem last;
-	private MenuItem next;
-	private MenuItem previous;
-	private MenuItem addMeasure;
-	private MenuItem cleanMeasure;
-	private MenuItem removeMeasure;
-	private MenuItem copyMeasure;
-	private MenuItem pasteMeasure;
-	
-	public MeasureMenuItem(Shell shell,Menu parent, int style) {
-		this.measureMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//--first--
-		this.first = new MenuItem(this.menu, SWT.PUSH);
-		this.first.addSelectionListener(TuxGuitar.instance().getAction(GoFirstMeasureAction.NAME));
-		//--previous--
-		this.previous = new MenuItem(this.menu, SWT.PUSH);
-		this.previous.addSelectionListener(TuxGuitar.instance().getAction(GoPreviousMeasureAction.NAME));
-		//--next--
-		this.next = new MenuItem(this.menu, SWT.PUSH);
-		this.next.addSelectionListener(TuxGuitar.instance().getAction(GoNextMeasureAction.NAME));
-		//--last--
-		this.last = new MenuItem(this.menu, SWT.PUSH);
-		this.last.addSelectionListener(TuxGuitar.instance().getAction(GoLastMeasureAction.NAME));
-		
-		//--SEPARATOR
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--add--
-		this.addMeasure = new MenuItem(this.menu, SWT.PUSH);
-		this.addMeasure.addSelectionListener(TuxGuitar.instance().getAction(AddMeasureAction.NAME));
-		//--clean--
-		this.cleanMeasure = new MenuItem(this.menu, SWT.PUSH);
-		this.cleanMeasure.addSelectionListener(TuxGuitar.instance().getAction(CleanMeasureAction.NAME));
-		//--remove--
-		this.removeMeasure = new MenuItem(this.menu, SWT.PUSH);
-		this.removeMeasure.addSelectionListener(TuxGuitar.instance().getAction(RemoveMeasureAction.NAME));
-		
-		//--SEPARATOR
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--copy--
-		this.copyMeasure = new MenuItem(this.menu, SWT.PUSH);
-		this.copyMeasure.addSelectionListener(TuxGuitar.instance().getAction(CopyMeasureAction.NAME));
-		//--paste--
-		this.pasteMeasure = new MenuItem(this.menu, SWT.PUSH);
-		
-		this.pasteMeasure.addSelectionListener(TuxGuitar.instance().getAction(PasteMeasureAction.NAME));
-		
-		this.measureMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		TGMeasureImpl measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure();
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		boolean isFirst = (measure.getNumber() == 1);
-		boolean isLast = (measure.getNumber() == measure.getTrack().countMeasures());
-		this.first.setEnabled(!isFirst);
-		this.previous.setEnabled(!isFirst);
-		this.next.setEnabled(!isLast);
-		this.last.setEnabled(!isLast);
-		this.addMeasure.setEnabled(!running);
-		this.cleanMeasure.setEnabled(!running);
-		this.removeMeasure.setEnabled(!running);
-		this.copyMeasure.setEnabled(!running);
-		this.pasteMeasure.setEnabled(!running && !TuxGuitar.instance().getTablatureEditor().getClipBoard().isEmpty());
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.measureMenuItem, "measure", null);
-		setMenuItemTextAndAccelerator(this.first, "measure.first", GoFirstMeasureAction.NAME);
-		setMenuItemTextAndAccelerator(this.last, "measure.last", GoLastMeasureAction.NAME);
-		setMenuItemTextAndAccelerator(this.previous, "measure.previous", GoPreviousMeasureAction.NAME);
-		setMenuItemTextAndAccelerator(this.next, "measure.next", GoNextMeasureAction.NAME);
-		setMenuItemTextAndAccelerator(this.addMeasure, "measure.add", AddMeasureAction.NAME);
-		setMenuItemTextAndAccelerator(this.cleanMeasure, "measure.clean", CleanMeasureAction.NAME);
-		setMenuItemTextAndAccelerator(this.removeMeasure, "measure.remove", RemoveMeasureAction.NAME);
-		setMenuItemTextAndAccelerator(this.copyMeasure, "measure.copy", CopyMeasureAction.NAME);
-		setMenuItemTextAndAccelerator(this.pasteMeasure, "measure.paste", PasteMeasureAction.NAME);
-	}
-	
-	public void loadIcons(){
-		//Nothing to do
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/NoteEffectsMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/NoteEffectsMenuItem.java
deleted file mode 100644
index f434f08..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/NoteEffectsMenuItem.java
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.effects.ChangeAccentuatedNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeBendNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeDeadNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeFadeInAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeGhostNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeGraceNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeHammerNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeHarmonicNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeHeavyAccentuatedNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangePalmMuteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangePoppingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeSlappingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeSlideNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeStaccatoAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTappingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloBarAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloPickingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTrillNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeVibratoNoteAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-import org.herac.tuxguitar.song.models.TGNote;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class NoteEffectsMenuItem extends MenuItems{
-	
-	private MenuItem noteEffectsMenuItem;
-	private Menu menu; 
-	private MenuItem vibrato;
-	private MenuItem bend;
-	private MenuItem tremoloBar;
-	private MenuItem deadNote;
-	private MenuItem slide;
-	private MenuItem hammer;
-	
-	private MenuItem ghostNote;
-	private MenuItem accentuatedNote;
-	private MenuItem heavyAccentuatedNote;
-	
-	private MenuItem harmonicNote;
-	private MenuItem graceNote;
-	private MenuItem trill;
-	private MenuItem tremoloPicking;
-	private MenuItem palmMute;
-	
-	private MenuItem staccato;
-	private MenuItem tapping;
-	private MenuItem slapping;
-	private MenuItem popping;
-	
-	private MenuItem fadeIn;
-	
-	public NoteEffectsMenuItem(Shell shell,Menu parent, int style) {
-		this.noteEffectsMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//--VIBRATO--
-		this.vibrato = new MenuItem(this.menu, SWT.CHECK);
-		this.vibrato.addSelectionListener(TuxGuitar.instance().getAction(ChangeVibratoNoteAction.NAME));
-		
-		//--BEND--
-		this.bend = new MenuItem(this.menu, SWT.CHECK);
-		this.bend.addSelectionListener(TuxGuitar.instance().getAction(ChangeBendNoteAction.NAME));
-		
-		//--BEND--
-		this.tremoloBar = new MenuItem(this.menu, SWT.CHECK);
-		this.tremoloBar.addSelectionListener(TuxGuitar.instance().getAction(ChangeTremoloBarAction.NAME));
-		
-		//--SLIDE--
-		this.slide = new MenuItem(this.menu, SWT.CHECK);
-		this.slide.addSelectionListener(TuxGuitar.instance().getAction(ChangeSlideNoteAction.NAME));
-		
-		//--SLIDE--
-		this.deadNote = new MenuItem(this.menu, SWT.CHECK);
-		this.deadNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeDeadNoteAction.NAME));
-		
-		//--HAMMER--
-		this.hammer = new MenuItem(this.menu, SWT.CHECK);
-		this.hammer.addSelectionListener(TuxGuitar.instance().getAction(ChangeHammerNoteAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--GHOST NOTE--
-		this.ghostNote = new MenuItem(this.menu, SWT.CHECK);
-		this.ghostNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeGhostNoteAction.NAME));
-		
-		//--ACCENTUATED NOTE--
-		this.accentuatedNote = new MenuItem(this.menu, SWT.CHECK);
-		this.accentuatedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeAccentuatedNoteAction.NAME));
-		
-		//--HEAVY ACCENTUATED NOTE--
-		this.heavyAccentuatedNote = new MenuItem(this.menu, SWT.CHECK);
-		this.heavyAccentuatedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeHeavyAccentuatedNoteAction.NAME));
-		
-		//--HARMONIC NOTE--
-		this.harmonicNote = new MenuItem(this.menu, SWT.CHECK);
-		this.harmonicNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeHarmonicNoteAction.NAME));
-		
-		//--GRACE NOTE--
-		this.graceNote = new MenuItem(this.menu, SWT.CHECK);
-		this.graceNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeGraceNoteAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--TRILL--
-		this.trill = new MenuItem(this.menu, SWT.CHECK);
-		this.trill.addSelectionListener(TuxGuitar.instance().getAction(ChangeTrillNoteAction.NAME));
-		
-		//--TREMOLO PICKING--
-		this.tremoloPicking = new MenuItem(this.menu, SWT.CHECK);
-		this.tremoloPicking.addSelectionListener(TuxGuitar.instance().getAction(ChangeTremoloPickingAction.NAME));
-		
-		//--PALM MUTE--
-		this.palmMute = new MenuItem(this.menu, SWT.CHECK);
-		this.palmMute.addSelectionListener(TuxGuitar.instance().getAction(ChangePalmMuteAction.NAME));
-		
-		//--STACCATO
-		this.staccato = new MenuItem(this.menu, SWT.CHECK);
-		this.staccato.addSelectionListener(TuxGuitar.instance().getAction(ChangeStaccatoAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--TAPPING
-		this.tapping = new MenuItem(this.menu, SWT.CHECK);
-		this.tapping.addSelectionListener(TuxGuitar.instance().getAction(ChangeTappingAction.NAME));
-		
-		//--SLAPPING
-		this.slapping = new MenuItem(this.menu, SWT.CHECK);
-		this.slapping.addSelectionListener(TuxGuitar.instance().getAction(ChangeSlappingAction.NAME));
-		
-		//--POPPING
-		this.popping = new MenuItem(this.menu, SWT.CHECK);
-		this.popping.addSelectionListener(TuxGuitar.instance().getAction(ChangePoppingAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--FADE IN
-		this.fadeIn = new MenuItem(this.menu, SWT.CHECK);
-		this.fadeIn.addSelectionListener(TuxGuitar.instance().getAction(ChangeFadeInAction.NAME));
-		
-		this.noteEffectsMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote();
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.vibrato.setSelection(note != null && note.getEffect().isVibrato());
-		this.vibrato.setEnabled(!running && note != null);
-		this.bend.setSelection(note != null && note.getEffect().isBend());
-		this.bend.setEnabled(!running && note != null);
-		this.tremoloBar.setSelection(note != null && note.getEffect().isTremoloBar());
-		this.tremoloBar.setEnabled(!running && note != null);
-		this.deadNote.setSelection(note != null && note.getEffect().isDeadNote());
-		this.deadNote.setEnabled(!running && note != null);
-		this.slide.setSelection(note != null && note.getEffect().isSlide());
-		this.slide.setEnabled(!running && note != null);
-		this.hammer.setSelection(note != null && note.getEffect().isHammer());
-		this.hammer.setEnabled(!running && note != null);
-		this.ghostNote.setSelection(note != null && note.getEffect().isGhostNote());
-		this.ghostNote.setEnabled(!running && note != null);
-		this.accentuatedNote.setSelection(note != null && note.getEffect().isAccentuatedNote());
-		this.accentuatedNote.setEnabled(!running && note != null);
-		this.heavyAccentuatedNote.setSelection(note != null && note.getEffect().isHeavyAccentuatedNote());
-		this.heavyAccentuatedNote.setEnabled(!running && note != null);
-		this.harmonicNote.setSelection(note != null && note.getEffect().isHarmonic());
-		this.harmonicNote.setEnabled(!running && note != null);
-		this.graceNote.setSelection(note != null && note.getEffect().isGrace());
-		this.graceNote.setEnabled(!running && note != null);
-		this.trill.setSelection(note != null && note.getEffect().isTrill());
-		this.trill.setEnabled(!running && note != null);
-		this.tremoloPicking.setSelection(note != null && note.getEffect().isTremoloPicking());
-		this.tremoloPicking.setEnabled(!running && note != null);
-		this.palmMute.setSelection(note != null && note.getEffect().isPalmMute());
-		this.palmMute.setEnabled(!running && note != null);
-		this.staccato.setSelection(note != null && note.getEffect().isStaccato());
-		this.staccato.setEnabled(!running && note != null);
-		this.tapping.setSelection(note != null && note.getEffect().isTapping());
-		this.tapping.setEnabled(!running && note != null);
-		this.slapping.setSelection(note != null && note.getEffect().isSlapping());
-		this.slapping.setEnabled(!running && note != null);
-		this.popping.setSelection(note != null && note.getEffect().isPopping());
-		this.popping.setEnabled(!running && note != null);
-		this.fadeIn.setSelection(note != null && note.getEffect().isFadeIn());
-		this.fadeIn.setEnabled(!running && note != null);
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.noteEffectsMenuItem, "effects", null);
-		setMenuItemTextAndAccelerator(this.vibrato, "effects.vibrato", ChangeVibratoNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.bend, "effects.bend", ChangeBendNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.tremoloBar, "effects.tremolo-bar", ChangeTremoloBarAction.NAME);
-		setMenuItemTextAndAccelerator(this.deadNote, "effects.deadnote", ChangeDeadNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.slide, "effects.slide", ChangeSlideNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.hammer, "effects.hammer", ChangeHammerNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.ghostNote, "effects.ghostnote", ChangeGhostNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.accentuatedNote, "effects.accentuatednote", ChangeAccentuatedNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.heavyAccentuatedNote, "effects.heavyaccentuatednote", ChangeHeavyAccentuatedNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.harmonicNote, "effects.harmonic", ChangeHarmonicNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.graceNote, "effects.grace", ChangeGraceNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.trill, "effects.trill", ChangeTrillNoteAction.NAME);
-		setMenuItemTextAndAccelerator(this.tremoloPicking, "effects.tremolo-picking", ChangeTremoloPickingAction.NAME);
-		setMenuItemTextAndAccelerator(this.palmMute, "effects.palm-mute", ChangePalmMuteAction.NAME);
-		setMenuItemTextAndAccelerator(this.staccato, "effects.staccato", ChangeStaccatoAction.NAME);
-		setMenuItemTextAndAccelerator(this.tapping, "effects.tapping", ChangeTappingAction.NAME);
-		setMenuItemTextAndAccelerator(this.slapping, "effects.slapping", ChangeSlappingAction.NAME);
-		setMenuItemTextAndAccelerator(this.popping, "effects.popping", ChangePoppingAction.NAME);
-		setMenuItemTextAndAccelerator(this.fadeIn, "effects.fade-in", ChangeFadeInAction.NAME);
-	}
-	
-	public void loadIcons(){
-		//Nothing to do
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ToolMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ToolMenuItem.java
deleted file mode 100644
index ce47d68..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ToolMenuItem.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.settings.EditConfigAction;
-import org.herac.tuxguitar.gui.actions.settings.EditKeyBindingsAction;
-import org.herac.tuxguitar.gui.actions.settings.EditPluginsAction;
-import org.herac.tuxguitar.gui.actions.tools.ScaleAction;
-import org.herac.tuxguitar.gui.actions.tools.TGBrowserAction;
-import org.herac.tuxguitar.gui.actions.tools.TransposeAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-import org.herac.tuxguitar.gui.tools.custom.TGCustomTool;
-import org.herac.tuxguitar.gui.tools.custom.TGCustomToolManager;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class ToolMenuItem extends MenuItems {
-	private MenuItem settingsMenuItem;
-	private Menu menu;
-	private MenuItem scale;
-	private MenuItem browser;
-	private MenuItem transpose;
-	private MenuItem plugins;
-	private MenuItem config;
-	private MenuItem keyBindings;
-	
-	public ToolMenuItem(Shell shell,Menu parent, int style) {
-		this.settingsMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		this.transpose = new MenuItem(this.menu, SWT.PUSH);
-		this.transpose.addSelectionListener(TuxGuitar.instance().getAction(TransposeAction.NAME));
-		
-		this.scale = new MenuItem(this.menu, SWT.PUSH);
-		this.scale.addSelectionListener(TuxGuitar.instance().getAction(ScaleAction.NAME));
-		
-		this.browser = new MenuItem(this.menu, SWT.PUSH);
-		this.browser.addSelectionListener(TuxGuitar.instance().getAction(TGBrowserAction.NAME));
-		
-		Iterator it = TGCustomToolManager.instance().getCustomTools();
-		while(it.hasNext()){
-			TGCustomTool tool = (TGCustomTool)it.next();
-			MenuItem menuItem = new MenuItem(this.menu, SWT.PUSH);
-			menuItem.setText(tool.getName());
-			menuItem.addSelectionListener(TuxGuitar.instance().getAction(tool.getAction()));
-		}
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--PLUGINS--
-		this.plugins = new MenuItem(this.menu, SWT.PUSH);
-		this.plugins.addSelectionListener(TuxGuitar.instance().getAction(EditPluginsAction.NAME));
-		
-		//--KEY BINDINGS--
-		this.keyBindings = new MenuItem(this.menu, SWT.PUSH);
-		this.keyBindings.addSelectionListener(TuxGuitar.instance().getAction(EditKeyBindingsAction.NAME));
-		
-		//--CONFIG--
-		this.config = new MenuItem(this.menu, SWT.PUSH);
-		this.config.addSelectionListener(TuxGuitar.instance().getAction(EditConfigAction.NAME));
-		
-		this.settingsMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.settingsMenuItem, "tools", null);
-		setMenuItemTextAndAccelerator(this.transpose, "tools.transpose", TransposeAction.NAME);
-		setMenuItemTextAndAccelerator(this.scale, "tools.scale", ScaleAction.NAME);
-		setMenuItemTextAndAccelerator(this.browser, "tools.browser", TGBrowserAction.NAME);
-		setMenuItemTextAndAccelerator(this.plugins, "tools.plugins", EditPluginsAction.NAME);
-		setMenuItemTextAndAccelerator(this.keyBindings, "tools.shortcuts", EditKeyBindingsAction.NAME);
-		setMenuItemTextAndAccelerator(this.config, "tools.settings", EditConfigAction.NAME);
-	}
-	
-	public void loadIcons(){
-		//Nothing to do
-	}
-	
-	public void update(){
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.transpose.setEnabled( !running );
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/TrackMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/TrackMenuItem.java
deleted file mode 100644
index 0d1141b..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/TrackMenuItem.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.track.AddTrackAction;
-import org.herac.tuxguitar.gui.actions.track.CloneTrackAction;
-import org.herac.tuxguitar.gui.actions.track.EditLyricsAction;
-import org.herac.tuxguitar.gui.actions.track.GoFirstTrackAction;
-import org.herac.tuxguitar.gui.actions.track.GoLastTrackAction;
-import org.herac.tuxguitar.gui.actions.track.GoNextTrackAction;
-import org.herac.tuxguitar.gui.actions.track.GoPreviousTrackAction;
-import org.herac.tuxguitar.gui.actions.track.MoveTrackDownAction;
-import org.herac.tuxguitar.gui.actions.track.MoveTrackUpAction;
-import org.herac.tuxguitar.gui.actions.track.RemoveTrackAction;
-import org.herac.tuxguitar.gui.actions.track.TrackPropertiesAction;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.items.MenuItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TrackMenuItem extends MenuItems{
-	private MenuItem trackMenuItem;
-	private Menu menu;
-	private MenuItem first;
-	private MenuItem last;
-	private MenuItem next;
-	private MenuItem previous;
-	private MenuItem addTrack;
-	private MenuItem cloneTrack;
-	private MenuItem removeTrack;
-	private MenuItem moveUp;
-	private MenuItem moveDown;
-	private MenuItem lyrics;
-	private MenuItem properties;
-	
-	public TrackMenuItem(Shell shell,Menu parent, int style) {
-		this.trackMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//--First--
-		this.first = new MenuItem(this.menu, SWT.PUSH);
-		this.first.addSelectionListener(TuxGuitar.instance().getAction(GoFirstTrackAction.NAME));
-		//--previous--
-		this.previous = new MenuItem(this.menu, SWT.PUSH);
-		this.previous.addSelectionListener(TuxGuitar.instance().getAction(GoPreviousTrackAction.NAME));
-		//--next--
-		this.next = new MenuItem(this.menu, SWT.PUSH);
-		this.next.addSelectionListener(TuxGuitar.instance().getAction(GoNextTrackAction.NAME));
-		//--last--
-		this.last = new MenuItem(this.menu, SWT.PUSH);
-		this.last.addSelectionListener(TuxGuitar.instance().getAction(GoLastTrackAction.NAME));
-		//--SEPARATOR
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--ADD TRACK--
-		this.addTrack = new MenuItem(this.menu, SWT.PUSH);
-		this.addTrack.addSelectionListener(TuxGuitar.instance().getAction(AddTrackAction.NAME));
-		//--CLONE TRACK--
-		this.cloneTrack = new MenuItem(this.menu, SWT.PUSH);
-		this.cloneTrack.addSelectionListener(TuxGuitar.instance().getAction(CloneTrackAction.NAME));
-		//--REMOVE TRACK--
-		this.removeTrack = new MenuItem(this.menu, SWT.PUSH);
-		this.removeTrack.addSelectionListener(TuxGuitar.instance().getAction(RemoveTrackAction.NAME));
-		//--SEPARATOR
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--MOVE UP--
-		this.moveUp = new MenuItem(this.menu, SWT.PUSH);
-		this.moveUp.addSelectionListener(TuxGuitar.instance().getAction(MoveTrackUpAction.NAME));
-		//--MOVE DOWN--
-		this.moveDown = new MenuItem(this.menu, SWT.PUSH);
-		this.moveDown.addSelectionListener(TuxGuitar.instance().getAction(MoveTrackDownAction.NAME));
-		//--SEPARATOR
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		//--LYRICS--
-		this.lyrics = new MenuItem(this.menu, SWT.PUSH);
-		this.lyrics.addSelectionListener(TuxGuitar.instance().getAction(EditLyricsAction.NAME));
-		//--PROPERTIES--
-		this.properties = new MenuItem(this.menu, SWT.PUSH);
-		this.properties.addSelectionListener(TuxGuitar.instance().getAction(TrackPropertiesAction.NAME));
-		
-		this.trackMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.trackMenuItem, "track", null);
-		setMenuItemTextAndAccelerator(this.first, "track.first", GoFirstTrackAction.NAME);
-		setMenuItemTextAndAccelerator(this.last, "track.last", GoLastTrackAction.NAME);
-		setMenuItemTextAndAccelerator(this.previous, "track.previous", GoPreviousTrackAction.NAME);
-		setMenuItemTextAndAccelerator(this.next, "track.next", GoNextTrackAction.NAME);
-		setMenuItemTextAndAccelerator(this.addTrack, "track.add", AddTrackAction.NAME);
-		setMenuItemTextAndAccelerator(this.cloneTrack, "track.clone", CloneTrackAction.NAME);
-		setMenuItemTextAndAccelerator(this.removeTrack, "track.remove", RemoveTrackAction.NAME);
-		setMenuItemTextAndAccelerator(this.moveUp, "track.move-up", MoveTrackUpAction.NAME);
-		setMenuItemTextAndAccelerator(this.moveDown, "track.move-down", MoveTrackDownAction.NAME);
-		setMenuItemTextAndAccelerator(this.lyrics, "track.lyrics", EditLyricsAction.NAME);
-		setMenuItemTextAndAccelerator(this.properties, "track.properties", TrackPropertiesAction.NAME);
-	}
-	
-	public void update(){
-		TGTrackImpl track = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack();
-		int tracks = track.getSong().countTracks();
-		boolean isFirst = (track.getNumber() == 1);
-		boolean isLast = (track.getNumber() == tracks);
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.addTrack.setEnabled(!running);
-		this.cloneTrack.setEnabled(!running);
-		this.removeTrack.setEnabled(!running);
-		this.moveUp.setEnabled(!running && tracks > 1);
-		this.moveDown.setEnabled(!running && tracks > 1);
-		this.first.setEnabled(!isFirst);
-		this.previous.setEnabled(!isFirst);
-		this.next.setEnabled(!isLast);
-		this.last.setEnabled(!isLast);
-		this.properties.setEnabled(!running);
-	}
-	
-	public void loadIcons(){
-		//Nothing to do
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/TransportMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/TransportMenuItem.java
deleted file mode 100644
index a9744b4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/TransportMenuItem.java
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.transport.TransportMetronomeAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportModeAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportPlayAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopEHeaderAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportSetLoopSHeaderAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportStopAction;
-import org.herac.tuxguitar.gui.items.MenuItems;
-import org.herac.tuxguitar.player.base.MidiPlayerMode;
-import org.herac.tuxguitar.song.models.TGMeasure;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TransportMenuItem extends MenuItems{
-	private static final int STATUS_STOPPED = 1;
-	private static final int STATUS_PAUSED = 2;
-	private static final int STATUS_RUNNING = 3;
-	
-	private MenuItem transportMenuItem;
-	private Menu menu;
-	private MenuItem play;
-	private MenuItem stop;
-	private MenuItem metronome;
-	private MenuItem mode;
-	private MenuItem loopSHeader;
-	private MenuItem loopEHeader;
-	
-	private int status;
-	
-	public TransportMenuItem(Shell shell,Menu parent, int style) {
-		this.transportMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		this.play = new MenuItem(this.menu,SWT.PUSH);
-		this.play.addSelectionListener(TuxGuitar.instance().getAction(TransportPlayAction.NAME));
-		
-		this.stop = new MenuItem(this.menu, SWT.PUSH);
-		this.stop.addSelectionListener(TuxGuitar.instance().getAction(TransportStopAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		this.metronome = new MenuItem(this.menu, SWT.CHECK);
-		this.metronome.addSelectionListener(TuxGuitar.instance().getAction(TransportMetronomeAction.NAME));
-		
-		this.mode = new MenuItem(this.menu, SWT.PUSH);
-		this.mode.addSelectionListener(TuxGuitar.instance().getAction(TransportModeAction.NAME));
-		
-		//--SEPARATOR--
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		this.loopSHeader = new MenuItem(this.menu, SWT.CHECK);
-		this.loopSHeader.addSelectionListener(TuxGuitar.instance().getAction(TransportSetLoopSHeaderAction.NAME));
-		
-		this.loopEHeader = new MenuItem(this.menu, SWT.CHECK);
-		this.loopEHeader.addSelectionListener(TuxGuitar.instance().getAction(TransportSetLoopEHeaderAction.NAME));
-		
-		this.transportMenuItem.setMenu(this.menu);
-		
-		this.status = STATUS_STOPPED;
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		TGMeasure measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure();
-		MidiPlayerMode pm = TuxGuitar.instance().getPlayer().getMode();
-		this.metronome.setSelection(TuxGuitar.instance().getPlayer().isMetronomeEnabled());
-		this.loopSHeader.setEnabled( pm.isLoop() );
-		this.loopSHeader.setSelection( measure != null && measure.getNumber() == pm.getLoopSHeader() );
-		this.loopEHeader.setEnabled( pm.isLoop() );
-		this.loopEHeader.setSelection( measure != null && measure.getNumber() == pm.getLoopEHeader() );
-		this.loadIcons(false);
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.transportMenuItem, "transport", null);
-		setMenuItemTextAndAccelerator(this.play, "transport.start", TransportPlayAction.NAME);
-		setMenuItemTextAndAccelerator(this.stop, "transport.stop", TransportStopAction.NAME);
-		setMenuItemTextAndAccelerator(this.mode, "transport.mode", TransportModeAction.NAME);
-		setMenuItemTextAndAccelerator(this.metronome, "transport.metronome", TransportMetronomeAction.NAME);
-		setMenuItemTextAndAccelerator(this.loopSHeader, "transport.set-loop-start", TransportSetLoopSHeaderAction.NAME);
-		setMenuItemTextAndAccelerator(this.loopEHeader, "transport.set-loop-end", TransportSetLoopEHeaderAction.NAME);
-	}
-	
-	public void loadIcons(){
-		this.loadIcons(true);
-		this.mode.setImage(TuxGuitar.instance().getIconManager().getTransportMode());
-		this.metronome.setImage(TuxGuitar.instance().getIconManager().getTransportMetronome());
-	}
-	
-	public void loadIcons(boolean force){
-		int lastStatus = this.status;
-		
-		if(TuxGuitar.instance().getPlayer().isRunning()){
-			this.status = STATUS_RUNNING;
-		}else if(TuxGuitar.instance().getPlayer().isPaused()){
-			this.status = STATUS_PAUSED;
-		}else{
-			this.status = STATUS_STOPPED;
-		}
-		
-		if(force || lastStatus != this.status){
-			if(this.status == STATUS_RUNNING){
-				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2());
-				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPause());
-			}else if(this.status == STATUS_PAUSED){
-				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2());
-				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay2());
-			}else if(this.status == STATUS_STOPPED){
-				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop1());
-				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay1());
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ViewMenuItem.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ViewMenuItem.java
deleted file mode 100644
index 9dcf331..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/menu/ViewMenuItem.java
+++ /dev/null
@@ -1,170 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.menu;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.layout.SetChordDiagramEnabledAction;
-import org.herac.tuxguitar.gui.actions.layout.SetChordNameEnabledAction;
-import org.herac.tuxguitar.gui.actions.layout.SetCompactViewAction;
-import org.herac.tuxguitar.gui.actions.layout.SetLinearLayoutAction;
-import org.herac.tuxguitar.gui.actions.layout.SetMultitrackViewAction;
-import org.herac.tuxguitar.gui.actions.layout.SetPageLayoutAction;
-import org.herac.tuxguitar.gui.actions.layout.SetScoreEnabledAction;
-import org.herac.tuxguitar.gui.actions.layout.SetTablatureEnabledAction;
-import org.herac.tuxguitar.gui.actions.view.ShowFretBoardAction;
-import org.herac.tuxguitar.gui.actions.view.ShowMatrixAction;
-import org.herac.tuxguitar.gui.actions.view.ShowMixerAction;
-import org.herac.tuxguitar.gui.actions.view.ShowPianoAction;
-import org.herac.tuxguitar.gui.actions.view.ShowTransportAction;
-import org.herac.tuxguitar.gui.editors.tab.layout.LinearViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.layout.PageViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.items.MenuItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ViewMenuItem extends MenuItems{
-	
-	private Menu menu;
-	private Menu chordMenu;
-	private MenuItem layoutMenuItem;
-	private MenuItem showMixer;
-	private MenuItem showTransport;
-	private MenuItem showFretBoard;
-	private MenuItem showPiano;
-	private MenuItem showMatrix;
-	private MenuItem pageLayout;
-	private MenuItem linearLayout;
-	private MenuItem multitrack;
-	private MenuItem scoreEnabled;
-	private MenuItem tablatureEnabled;
-	private MenuItem compact;
-	
-	private MenuItem chordMenuItem;
-	private MenuItem chordName;
-	private MenuItem chordDiagram;
-	
-	public ViewMenuItem(Shell shell,Menu parent, int style) {
-		this.layoutMenuItem = new MenuItem(parent, style);
-		this.menu = new Menu(shell, SWT.DROP_DOWN);
-	}
-	
-	public void showItems(){
-		//--MIXER--
-		this.showMixer = new MenuItem(this.menu, SWT.CHECK);
-		this.showMixer.addSelectionListener(TuxGuitar.instance().getAction(ShowMixerAction.NAME));
-		
-		//--TRANSPORT--
-		this.showTransport = new MenuItem(this.menu, SWT.CHECK);
-		this.showTransport.addSelectionListener(TuxGuitar.instance().getAction(ShowTransportAction.NAME));
-		
-		//--FRETBOARD--
-		this.showFretBoard = new MenuItem(this.menu, SWT.CHECK);
-		this.showFretBoard.addSelectionListener(TuxGuitar.instance().getAction(ShowFretBoardAction.NAME));
-		
-		//--PIANO--
-		this.showPiano = new MenuItem(this.menu, SWT.CHECK);
-		this.showPiano.addSelectionListener(TuxGuitar.instance().getAction(ShowPianoAction.NAME));
-		
-		//--MATRIX--
-		this.showMatrix = new MenuItem(this.menu, SWT.CHECK);
-		this.showMatrix.addSelectionListener(TuxGuitar.instance().getAction(ShowMatrixAction.NAME));
-		
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--PAGE LAYOUT--
-		this.pageLayout = new MenuItem(this.menu, SWT.RADIO);
-		this.pageLayout.addSelectionListener(TuxGuitar.instance().getAction(SetPageLayoutAction.NAME));
-		
-		//--LINEAR LAYOUT--
-		this.linearLayout = new MenuItem(this.menu, SWT.RADIO);
-		this.linearLayout.addSelectionListener(TuxGuitar.instance().getAction(SetLinearLayoutAction.NAME));
-		
-		//--MULTITRACK--
-		this.multitrack = new MenuItem(this.menu, SWT.CHECK);
-		this.multitrack.addSelectionListener(TuxGuitar.instance().getAction(SetMultitrackViewAction.NAME));
-		
-		//--SCORE
-		this.scoreEnabled = new MenuItem(this.menu, SWT.CHECK);
-		this.scoreEnabled.addSelectionListener(TuxGuitar.instance().getAction(SetScoreEnabledAction.NAME));
-		
-		//--SCORE
-		this.tablatureEnabled = new MenuItem(this.menu, SWT.CHECK);
-		this.tablatureEnabled.addSelectionListener(TuxGuitar.instance().getAction(SetTablatureEnabledAction.NAME));
-		
-		//--COMPACT
-		this.compact = new MenuItem(this.menu, SWT.CHECK);
-		this.compact.addSelectionListener(TuxGuitar.instance().getAction(SetCompactViewAction.NAME));
-		
-		new MenuItem(this.menu, SWT.SEPARATOR);
-		
-		//--CHORD STYLE
-		this.chordMenuItem = new MenuItem(this.menu,SWT.CASCADE);
-		this.chordMenu = new Menu(this.menu.getShell(), SWT.DROP_DOWN);
-		
-		this.chordName = new MenuItem(this.chordMenu, SWT.CHECK);
-		this.chordName.addSelectionListener(TuxGuitar.instance().getAction(SetChordNameEnabledAction.NAME));
-		
-		this.chordDiagram = new MenuItem(this.chordMenu, SWT.CHECK);
-		this.chordDiagram.addSelectionListener(TuxGuitar.instance().getAction(SetChordDiagramEnabledAction.NAME));
-		
-		this.chordMenuItem.setMenu(this.chordMenu);
-		this.layoutMenuItem.setMenu(this.menu);
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		ViewLayout layout = TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout();
-		int style = layout.getStyle();
-		this.showMixer.setSelection(!TuxGuitar.instance().getMixer().isDisposed());
-		this.showTransport.setSelection(!TuxGuitar.instance().getTransport().isDisposed());
-		this.showFretBoard.setSelection(TuxGuitar.instance().getFretBoardEditor().isVisible());
-		this.showPiano.setSelection(!TuxGuitar.instance().getPianoEditor().isDisposed());
-		this.showMatrix.setSelection(!TuxGuitar.instance().getMatrixEditor().isDisposed());
-		this.pageLayout.setSelection(layout instanceof PageViewLayout);
-		this.linearLayout.setSelection(layout instanceof LinearViewLayout);
-		this.multitrack.setSelection( (style & ViewLayout.DISPLAY_MULTITRACK) != 0 );
-		this.scoreEnabled.setSelection( (style & ViewLayout.DISPLAY_SCORE) != 0 );
-		this.tablatureEnabled.setSelection( (style & ViewLayout.DISPLAY_TABLATURE) != 0 );
-		this.compact.setSelection( (style & ViewLayout.DISPLAY_COMPACT) != 0 );
-		this.compact.setEnabled((style & ViewLayout.DISPLAY_MULTITRACK) == 0 || layout.getSongManager().getSong().countTracks() == 1);
-		this.chordName.setSelection( (style & ViewLayout.DISPLAY_CHORD_NAME) != 0 );
-		this.chordDiagram.setSelection( (style & ViewLayout.DISPLAY_CHORD_DIAGRAM) != 0 );
-	}
-	
-	public void loadProperties(){
-		setMenuItemTextAndAccelerator(this.layoutMenuItem, "view", null);
-		setMenuItemTextAndAccelerator(this.showMixer, "view.show-mixer", ShowMixerAction.NAME);
-		setMenuItemTextAndAccelerator(this.showTransport, "view.show-transport", ShowTransportAction.NAME);
-		setMenuItemTextAndAccelerator(this.showFretBoard, "view.show-fretboard", ShowFretBoardAction.NAME);
-		setMenuItemTextAndAccelerator(this.showPiano, "view.show-piano", ShowPianoAction.NAME);
-		setMenuItemTextAndAccelerator(this.showMatrix, "view.show-matrix", ShowMatrixAction.NAME);
-		setMenuItemTextAndAccelerator(this.pageLayout, "view.layout.page", SetPageLayoutAction.NAME);
-		setMenuItemTextAndAccelerator(this.linearLayout, "view.layout.linear", SetLinearLayoutAction.NAME);
-		setMenuItemTextAndAccelerator(this.multitrack, "view.layout.multitrack", SetMultitrackViewAction.NAME);
-		setMenuItemTextAndAccelerator(this.scoreEnabled, "view.layout.score-enabled", SetScoreEnabledAction.NAME);
-		setMenuItemTextAndAccelerator(this.tablatureEnabled, "view.layout.tablature-enabled", SetTablatureEnabledAction.NAME);
-		setMenuItemTextAndAccelerator(this.compact, "view.layout.compact", SetCompactViewAction.NAME);
-		setMenuItemTextAndAccelerator(this.chordMenuItem, "view.layout.chord-style", null);
-		setMenuItemTextAndAccelerator(this.chordName, "view.layout.chord-name", SetChordNameEnabledAction.NAME);
-		setMenuItemTextAndAccelerator(this.chordDiagram, "view.layout.chord-diagram", SetChordDiagramEnabledAction.NAME);
-	}
-	
-	public void loadIcons(){
-		//Nothing to do
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/BeatToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/BeatToolItems.java
deleted file mode 100644
index 5ff92d5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/BeatToolItems.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.insert.InsertChordAction;
-import org.herac.tuxguitar.gui.actions.note.ChangeTiedNoteAction;
-import org.herac.tuxguitar.gui.items.ToolItems;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGNote;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class BeatToolItems  extends ToolItems{
-	public static final String NAME = "beat.items";
-	
-	protected ToolBar toolBar;
-	private ToolItem tiedNote;
-	private ChordMenuItem chordItems;
-	
-	public BeatToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.toolBar = toolBar;
-		
-		this.tiedNote = new ToolItem(toolBar, SWT.CHECK);
-		this.tiedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeTiedNoteAction.NAME));
-		
-		this.chordItems = new ChordMenuItem();
-		this.chordItems.addItems();
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote();
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.tiedNote.setEnabled(!running);
-		this.tiedNote.setSelection(note != null && note.isTiedNote());
-		this.chordItems.setEnabled(!running);
-		this.chordItems.update();
-	}
-	
-	public void loadProperties(){
-		this.tiedNote.setToolTipText(TuxGuitar.getProperty("note.tiednote"));
-		this.chordItems.setToolTipText(TuxGuitar.getProperty("insert.chord"));
-	}
-	
-	public void loadIcons(){
-		this.tiedNote.setImage(TuxGuitar.instance().getIconManager().getNoteTied());
-		this.chordItems.setImage(TuxGuitar.instance().getIconManager().getChord());
-	}
-	
-	private class ChordMenuItem extends SelectionAdapter {
-		private long lastEdit;
-		private ToolItem item;
-		private Menu subMenu;
-		private MenuItem[] subMenuItems;
-		
-		public ChordMenuItem() {
-			this.item = new ToolItem(BeatToolItems.this.toolBar, SWT.DROP_DOWN);
-			this.item.addSelectionListener(this);
-			this.subMenu = new Menu(this.item.getParent().getShell());
-		}
-		
-		public void setToolTipText(String text){
-			this.item.setToolTipText(text);
-		}
-		
-		public void setEnabled(boolean enabled){
-			this.item.setEnabled(enabled);
-		}
-		
-		public void setImage(Image image){
-			this.item.setImage(image);
-		}
-		
-		public void addItems() {
-			this.disposeItems();
-			this.subMenuItems = new MenuItem[TuxGuitar.instance().getCustomChordManager().countChords()];
-			for(int i = 0;i < this.subMenuItems.length; i++){
-				TGChord chord = TuxGuitar.instance().getCustomChordManager().getChord(i);
-				this.subMenuItems[i] = new MenuItem(this.subMenu, SWT.PUSH);
-				this.subMenuItems[i].setData(chord);
-				this.subMenuItems[i].setText(chord.getName());
-				this.subMenuItems[i].addSelectionListener(TuxGuitar.instance().getAction(InsertChordAction.NAME));
-			}
-		}
-		
-		public void disposeItems() {
-			if(this.subMenuItems != null){
-				for(int i = 0;i < this.subMenuItems.length; i++){
-					this.subMenuItems[i].dispose();
-				}
-			}
-		}
-		
-		public void widgetSelected(SelectionEvent event) {
-			if (event.detail == SWT.ARROW && this.subMenuItems != null && this.subMenuItems.length > 0) {
-				ToolItem item = (ToolItem) event.widget;
-				Rectangle rect = item.getBounds();
-				Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
-				this.subMenu.setLocation(pt.x, pt.y + rect.height);
-				this.subMenu.setVisible(true);
-			}else{
-				TuxGuitar.instance().getAction(InsertChordAction.NAME).process(event);
-			}
-		}
-		
-		public void update(){
-			if(this.lastEdit != TuxGuitar.instance().getCustomChordManager().getLastEdit()){
-				this.addItems();
-				this.lastEdit = TuxGuitar.instance().getCustomChordManager().getLastEdit();
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/CompositionToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/CompositionToolItems.java
deleted file mode 100644
index ec50b02..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/CompositionToolItems.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.composition.ChangeTempoAction;
-import org.herac.tuxguitar.gui.actions.composition.ChangeTimeSignatureAction;
-import org.herac.tuxguitar.gui.actions.insert.RepeatAlternativeAction;
-import org.herac.tuxguitar.gui.actions.insert.RepeatCloseAction;
-import org.herac.tuxguitar.gui.actions.insert.RepeatOpenAction;
-import org.herac.tuxguitar.gui.items.ToolItems;
-import org.herac.tuxguitar.song.models.TGMeasure;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class CompositionToolItems extends ToolItems{
-	public static final String NAME = "composition.items";
-	
-	private ToolItem tempo;
-	private ToolItem timeSignature;
-	private ToolItem repeatOpen;
-	private ToolItem repeatClose;
-	private ToolItem repeatAlternative;
-	
-	public CompositionToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.tempo = new ToolItem(toolBar, SWT.PUSH);
-		this.tempo.addSelectionListener(TuxGuitar.instance().getAction(ChangeTempoAction.NAME));
-		
-		this.timeSignature = new ToolItem(toolBar, SWT.PUSH);
-		this.timeSignature.addSelectionListener(TuxGuitar.instance().getAction(ChangeTimeSignatureAction.NAME));
-		
-		new ToolItem(toolBar, SWT.SEPARATOR);
-		
-		this.repeatOpen = new ToolItem(toolBar, SWT.CHECK);
-		this.repeatOpen.addSelectionListener(TuxGuitar.instance().getAction(RepeatOpenAction.NAME));
-		
-		this.repeatClose = new ToolItem(toolBar, SWT.CHECK);
-		this.repeatClose.addSelectionListener(TuxGuitar.instance().getAction(RepeatCloseAction.NAME));
-		
-		this.repeatAlternative = new ToolItem(toolBar, SWT.CHECK);
-		this.repeatAlternative.addSelectionListener(TuxGuitar.instance().getAction(RepeatAlternativeAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void loadProperties(){
-		this.tempo.setToolTipText(TuxGuitar.getProperty("composition.tempo"));
-		this.timeSignature.setToolTipText(TuxGuitar.getProperty("composition.timesignature"));
-		this.repeatOpen.setToolTipText(TuxGuitar.getProperty("repeat.open"));
-		this.repeatClose.setToolTipText(TuxGuitar.getProperty("repeat.close"));
-		this.repeatAlternative.setToolTipText(TuxGuitar.getProperty("repeat.alternative"));
-	}
-	
-	public void loadIcons(){
-		this.tempo.setImage(TuxGuitar.instance().getIconManager().getCompositionTempo());
-		this.timeSignature.setImage(TuxGuitar.instance().getIconManager().getCompositionTimeSignature());
-		this.repeatOpen.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatOpen());
-		this.repeatClose.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatClose());
-		this.repeatAlternative.setImage(TuxGuitar.instance().getIconManager().getCompositionRepeatAlternative());
-	}
-	
-	public void update(){
-		TGMeasure measure = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure();
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.tempo.setEnabled( !running );
-		this.timeSignature.setEnabled( !running );
-		this.repeatOpen.setEnabled( !running );
-		this.repeatOpen.setSelection(measure != null && measure.isRepeatOpen());
-		this.repeatClose.setEnabled( !running );
-		this.repeatClose.setSelection(measure != null && measure.getRepeatClose() > 0);
-		this.repeatAlternative.setEnabled( !running );
-		this.repeatAlternative.setSelection(measure != null && measure.getHeader().getRepeatAlternative() > 0);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/DurationToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/DurationToolItems.java
deleted file mode 100644
index e7233bb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/DurationToolItems.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.duration.ChangeDottedDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.ChangeDoubleDottedDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.ChangeDivisionTypeAction;
-import org.herac.tuxguitar.gui.actions.duration.SetEighthDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetHalfDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetQuarterDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetSixteenthDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetSixtyFourthDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetThirtySecondDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.SetWholeDurationAction;
-import org.herac.tuxguitar.gui.editors.TablatureEditor;
-import org.herac.tuxguitar.gui.items.ToolItems;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGDivisionType;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class DurationToolItems  extends ToolItems{
-	public static final String NAME = "duration.items";
-	protected ToolBar toolBar;
-	private ToolItem[] durationItems;
-	private ToolItem dotted;
-	private ToolItem doubleDotted;
-	private DivisionTypeMenuItem divisionTypeItems;
-	
-	public DurationToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.toolBar = toolBar;
-		this.durationItems = new ToolItem[7];
-		
-		this.durationItems[0] = new ToolItem(toolBar, SWT.RADIO);
-		this.durationItems[0].addSelectionListener(TuxGuitar.instance().getAction(SetWholeDurationAction.NAME));
-		
-		this.durationItems[1] = new ToolItem(toolBar, SWT.RADIO);
-		this.durationItems[1].addSelectionListener(TuxGuitar.instance().getAction(SetHalfDurationAction.NAME));
-		
-		this.durationItems[2] = new ToolItem(toolBar, SWT.RADIO);
-		this.durationItems[2].setSelection(true);
-		this.durationItems[2].addSelectionListener(TuxGuitar.instance().getAction(SetQuarterDurationAction.NAME));
-		
-		this.durationItems[3] = new ToolItem(toolBar, SWT.RADIO);
-		this.durationItems[3].addSelectionListener(TuxGuitar.instance().getAction(SetEighthDurationAction.NAME));
-		
-		this.durationItems[4] = new ToolItem(toolBar, SWT.RADIO);
-		this.durationItems[4].addSelectionListener(TuxGuitar.instance().getAction(SetSixteenthDurationAction.NAME));
-		
-		this.durationItems[5] = new ToolItem(toolBar, SWT.RADIO);
-		this.durationItems[5].addSelectionListener(TuxGuitar.instance().getAction(SetThirtySecondDurationAction.NAME));
-		
-		this.durationItems[6] = new ToolItem(toolBar, SWT.RADIO);
-		this.durationItems[6].addSelectionListener(TuxGuitar.instance().getAction(SetSixtyFourthDurationAction.NAME));
-		
-		new ToolItem(toolBar, SWT.SEPARATOR);
-		
-		this.dotted = new ToolItem(toolBar, SWT.CHECK);
-		this.dotted.addSelectionListener(TuxGuitar.instance().getAction(ChangeDottedDurationAction.NAME));
-		
-		this.doubleDotted = new ToolItem(toolBar, SWT.CHECK);
-		this.doubleDotted.addSelectionListener(TuxGuitar.instance().getAction(ChangeDoubleDottedDurationAction.NAME));
-		
-		this.divisionTypeItems = new DivisionTypeMenuItem();
-		this.divisionTypeItems.addItems();
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		TGDuration duration = getEditor().getTablature().getCaret().getDuration();
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		int index = duration.getIndex();
-		for(int i = 0;i < this.durationItems.length;i++){
-			this.durationItems[i].setSelection( (i == index) );
-			this.durationItems[i].setEnabled( !running );
-		}
-		this.dotted.setSelection(duration.isDotted());
-		this.dotted.setEnabled( !running );
-		this.doubleDotted.setSelection(duration.isDoubleDotted());
-		this.doubleDotted.setEnabled( !running );
-		
-		this.divisionTypeItems.setEnabled( !running );
-		this.divisionTypeItems.update();
-	}
-	
-	public void loadProperties(){
-		this.durationItems[0].setToolTipText(TuxGuitar.getProperty("duration.whole"));
-		this.durationItems[1].setToolTipText(TuxGuitar.getProperty("duration.half"));
-		this.durationItems[2].setToolTipText(TuxGuitar.getProperty("duration.quarter"));
-		this.durationItems[3].setToolTipText(TuxGuitar.getProperty("duration.eighth"));
-		this.durationItems[4].setToolTipText(TuxGuitar.getProperty("duration.sixteenth"));
-		this.durationItems[5].setToolTipText(TuxGuitar.getProperty("duration.thirtysecond"));
-		this.durationItems[6].setToolTipText(TuxGuitar.getProperty("duration.sixtyfourth"));
-		this.dotted.setToolTipText(TuxGuitar.getProperty("duration.dotted"));
-		this.doubleDotted.setToolTipText(TuxGuitar.getProperty("duration.doubledotted"));
-		this.divisionTypeItems.setText(TuxGuitar.getProperty("duration.division-type"));
-	}
-	
-	public void loadIcons(){
-		this.durationItems[0].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.WHOLE));
-		this.durationItems[1].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.HALF));
-		this.durationItems[2].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.QUARTER));
-		this.durationItems[3].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.EIGHTH));
-		this.durationItems[4].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTEENTH));
-		this.durationItems[5].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.THIRTY_SECOND));
-		this.durationItems[6].setImage(TuxGuitar.instance().getIconManager().getDuration(TGDuration.SIXTY_FOURTH));
-		this.dotted.setImage(TuxGuitar.instance().getIconManager().getDurationDotted());
-		this.doubleDotted.setImage(TuxGuitar.instance().getIconManager().getDurationDoubleDotted());
-		this.divisionTypeItems.setImage(TuxGuitar.instance().getIconManager().getDivisionType());
-	}
-	
-	protected TablatureEditor getEditor(){
-		return super.getEditor();
-	}
-	
-	private class DivisionTypeMenuItem extends SelectionAdapter {
-		private ToolItem divisionType;
-		private Menu subMenu;
-		private MenuItem[] subMenuItems;
-		
-		public DivisionTypeMenuItem() {
-			this.divisionType = new ToolItem(DurationToolItems.this.toolBar, SWT.DROP_DOWN);
-			this.divisionType.addSelectionListener(this);
-			this.divisionType.setData(newDivisionType(3,2));
-			this.subMenu = new Menu(this.divisionType.getParent().getShell());
-		}
-		
-		public void setText(String text){
-			this.divisionType.setToolTipText(text);
-		}
-		
-		public void setImage(Image image){
-			this.divisionType.setImage(image);
-		}
-		
-		public void setEnabled(boolean enabled){
-			this.divisionType.setEnabled(enabled);
-		}
-		
-		public void addItems() {
-			this.subMenuItems = new MenuItem[8];
-			
-			this.subMenuItems[0] = new MenuItem(this.subMenu, SWT.CHECK);
-			this.subMenuItems[0].setText("3");
-			this.subMenuItems[0].setData(newDivisionType(3,2));
-			this.subMenuItems[0].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME));
-			
-			this.subMenuItems[1] = new MenuItem(this.subMenu, SWT.CHECK);
-			this.subMenuItems[1].setText("5");
-			this.subMenuItems[1].setData(newDivisionType(5,4));
-			this.subMenuItems[1].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME));
-			
-			this.subMenuItems[2] = new MenuItem(this.subMenu, SWT.CHECK);
-			this.subMenuItems[2].setText("6");
-			this.subMenuItems[2].setData(newDivisionType(6,4));
-			this.subMenuItems[2].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME));
-			
-			this.subMenuItems[3] = new MenuItem(this.subMenu, SWT.CHECK);
-			this.subMenuItems[3].setText("7");
-			this.subMenuItems[3].setData(newDivisionType(7,4));
-			this.subMenuItems[3].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME));
-			
-			this.subMenuItems[4] = new MenuItem(this.subMenu, SWT.CHECK);
-			this.subMenuItems[4].setText("9");
-			this.subMenuItems[4].setData(newDivisionType(9,8));
-			this.subMenuItems[4].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME));
-			
-			this.subMenuItems[5] = new MenuItem(this.subMenu, SWT.CHECK);
-			this.subMenuItems[5].setText("10");
-			this.subMenuItems[5].setData(newDivisionType(10,8));
-			this.subMenuItems[5].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME));
-			
-			this.subMenuItems[6] = new MenuItem(this.subMenu, SWT.CHECK);
-			this.subMenuItems[6].setText("11");
-			this.subMenuItems[6].setData(newDivisionType(11,8));
-			this.subMenuItems[6].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME));
-			
-			this.subMenuItems[7] = new MenuItem(this.subMenu, SWT.CHECK);
-			this.subMenuItems[7].setText("12");
-			this.subMenuItems[7].setData(newDivisionType(12,8));
-			this.subMenuItems[7].addSelectionListener(TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME));
-		}
-		
-		public void widgetSelected(SelectionEvent event) {
-			if (event.detail == SWT.ARROW) {
-				ToolItem item = (ToolItem) event.widget;
-				Rectangle rect = item.getBounds();
-				Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
-				this.subMenu.setLocation(pt.x, pt.y + rect.height);
-				this.subMenu.setVisible(true);
-			}else{
-				TGDuration duration = getEditor().getTablature().getCaret().getDuration();
-				if(duration.getDivision().isEqual(TGDivisionType.NORMAL)){
-					((TGDivisionType)this.divisionType.getData()).setEnters(3);
-					((TGDivisionType)this.divisionType.getData()).setTimes(2);
-				}else{
-					((TGDivisionType)this.divisionType.getData()).setEnters(1);
-					((TGDivisionType)this.divisionType.getData()).setTimes(1);
-				}
-				TuxGuitar.instance().getAction(ChangeDivisionTypeAction.NAME).process(event);
-			}
-		}
-		
-		public void update(){
-			TGDuration duration = getEditor().getTablature().getCaret().getDuration();
-			
-			for(int i = 0;i < this.subMenuItems.length;i++){
-				TGDivisionType divisionType = (TGDivisionType)this.subMenuItems[i].getData();
-				this.subMenuItems[i].setSelection((divisionType.isEqual(duration.getDivision())));
-			}
-		}
-		
-		private TGDivisionType newDivisionType(int enters,int times){
-			TGDivisionType divisionType = TuxGuitar.instance().getSongManager().getFactory().newDivisionType();
-			divisionType.setEnters(enters);
-			divisionType.setTimes(times);
-			return divisionType;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/DynamicToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/DynamicToolItems.java
deleted file mode 100644
index 1c12d5d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/DynamicToolItems.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.note.ChangeVelocityAction;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.items.ToolItems;
-import org.herac.tuxguitar.song.models.TGVelocities;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class DynamicToolItems  extends ToolItems{
-	public static final String NAME = "dynamic.items";
-	
-	private ToolBar toolBar;
-	
-	private ToolItem pianoPianissimo;
-	private ToolItem pianissimo;
-	private ToolItem piano;
-	private ToolItem mezzoPiano;
-	private ToolItem mezzoForte;
-	private ToolItem forte;
-	private ToolItem fortissimo;
-	private ToolItem forteFortissimo;
-	
-	
-	public DynamicToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.toolBar = toolBar;
-		//--PPP--
-		this.pianoPianissimo = new ToolItem(this.toolBar, SWT.CHECK);
-		this.pianoPianissimo.setData(new Integer(TGVelocities.PIANO_PIANISSIMO));
-		this.pianoPianissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		//--PP--
-		this.pianissimo = new ToolItem(this.toolBar, SWT.CHECK);
-		this.pianissimo.setData(new Integer(TGVelocities.PIANISSIMO));
-		this.pianissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		//--P--
-		this.piano = new ToolItem(this.toolBar, SWT.CHECK);
-		this.piano.setData(new Integer(TGVelocities.PIANO));
-		this.piano.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		//--MP--
-		this.mezzoPiano = new ToolItem(this.toolBar, SWT.CHECK);
-		this.mezzoPiano.setData(new Integer(TGVelocities.MEZZO_PIANO));
-		this.mezzoPiano.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		//--MF--
-		this.mezzoForte = new ToolItem(this.toolBar, SWT.CHECK);
-		this.mezzoForte.setData(new Integer(TGVelocities.MEZZO_FORTE));
-		this.mezzoForte.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		//--F--
-		this.forte = new ToolItem(this.toolBar, SWT.CHECK);
-		this.forte.setData(new Integer(TGVelocities.FORTE));
-		this.forte.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		//--FF--
-		this.fortissimo = new ToolItem(this.toolBar, SWT.CHECK);
-		this.fortissimo.setData(new Integer(TGVelocities.FORTISSIMO));
-		this.fortissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		//--FF--
-		this.forteFortissimo = new ToolItem(this.toolBar, SWT.CHECK);
-		this.forteFortissimo.setData(new Integer(TGVelocities.FORTE_FORTISSIMO));
-		this.forteFortissimo.addSelectionListener(TuxGuitar.instance().getAction(ChangeVelocityAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-		int velocity = ((caret.getSelectedNote() != null)?caret.getSelectedNote().getVelocity():caret.getVelocity());
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.pianoPianissimo.setSelection(velocity == TGVelocities.PIANO_PIANISSIMO);
-		this.pianoPianissimo.setEnabled( !running );
-		this.pianissimo.setSelection(velocity == TGVelocities.PIANISSIMO);
-		this.pianissimo.setEnabled( !running );
-		this.piano.setSelection(velocity == TGVelocities.PIANO);
-		this.piano.setEnabled( !running );
-		this.mezzoPiano.setSelection(velocity == TGVelocities.MEZZO_PIANO);
-		this.mezzoPiano.setEnabled( !running );
-		this.mezzoForte.setSelection(velocity == TGVelocities.MEZZO_FORTE);
-		this.mezzoForte.setEnabled( !running );
-		this.forte.setSelection(velocity == TGVelocities.FORTE);
-		this.forte.setEnabled( !running );
-		this.fortissimo.setSelection(velocity == TGVelocities.FORTISSIMO);
-		this.fortissimo.setEnabled( !running );
-		this.forteFortissimo.setSelection(velocity == TGVelocities.FORTE_FORTISSIMO);
-		this.forteFortissimo.setEnabled( !running );
-	}
-	
-	public void loadProperties(){
-		this.pianoPianissimo.setToolTipText(TuxGuitar.getProperty("dynamic.piano-pianissimo"));
-		this.pianissimo.setToolTipText(TuxGuitar.getProperty("dynamic.pianissimo"));
-		this.piano.setToolTipText(TuxGuitar.getProperty("dynamic.piano"));
-		this.mezzoPiano.setToolTipText(TuxGuitar.getProperty("dynamic.mezzo-piano"));
-		this.mezzoForte.setToolTipText(TuxGuitar.getProperty("dynamic.mezzo-forte"));
-		this.forte.setToolTipText(TuxGuitar.getProperty("dynamic.forte"));
-		this.fortissimo.setToolTipText(TuxGuitar.getProperty("dynamic.fortissimo"));
-		this.forteFortissimo.setToolTipText(TuxGuitar.getProperty("dynamic.forte-fortissimo"));
-	}
-	
-	public void loadIcons(){
-		this.pianoPianissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicPPP());
-		this.pianissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicPP());
-		this.piano.setImage(TuxGuitar.instance().getIconManager().getDynamicP());
-		this.mezzoPiano.setImage(TuxGuitar.instance().getIconManager().getDynamicMP());
-		this.mezzoForte.setImage(TuxGuitar.instance().getIconManager().getDynamicMF());
-		this.forte.setImage(TuxGuitar.instance().getIconManager().getDynamicF());
-		this.fortissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicFF());
-		this.forteFortissimo.setImage(TuxGuitar.instance().getIconManager().getDynamicFFF());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/EditToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/EditToolItems.java
deleted file mode 100644
index 45fa7a6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/EditToolItems.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.edit.RedoAction;
-import org.herac.tuxguitar.gui.actions.edit.SetMouseModeEditionAction;
-import org.herac.tuxguitar.gui.actions.edit.SetMouseModeSelectionAction;
-import org.herac.tuxguitar.gui.actions.edit.SetNaturalKeyAction;
-import org.herac.tuxguitar.gui.actions.edit.SetVoice1Action;
-import org.herac.tuxguitar.gui.actions.edit.SetVoice2Action;
-import org.herac.tuxguitar.gui.actions.edit.UndoAction;
-import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit;
-import org.herac.tuxguitar.gui.items.ToolItems;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class EditToolItems extends ToolItems {
-	public static final String NAME = "edit.items";
-	private ToolItem undo;
-	private ToolItem redo;
-	
-	private ToolItem voice1;
-	private ToolItem voice2;
-	
-	private ToolItem modeSelection;
-	private ToolItem modeEdition;
-	private ToolItem notNaturalKey;
-	
-	public EditToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.undo = new ToolItem(toolBar, SWT.PUSH);
-		this.undo.addSelectionListener(TuxGuitar.instance().getAction(UndoAction.NAME));
-		
-		this.redo = new ToolItem(toolBar, SWT.PUSH);
-		this.redo.addSelectionListener(TuxGuitar.instance().getAction(RedoAction.NAME));
-		
-		new ToolItem(toolBar, SWT.SEPARATOR);
-		
-		this.voice1 = new ToolItem(toolBar, SWT.RADIO);
-		this.voice1.addSelectionListener(TuxGuitar.instance().getAction(SetVoice1Action.NAME));
-		
-		this.voice2 = new ToolItem(toolBar, SWT.RADIO);
-		this.voice2.addSelectionListener(TuxGuitar.instance().getAction(SetVoice2Action.NAME));
-		
-		new ToolItem(toolBar, SWT.SEPARATOR);
-		
-		this.modeSelection = new ToolItem(toolBar, SWT.RADIO);
-		this.modeSelection.addSelectionListener(TuxGuitar.instance().getAction(SetMouseModeSelectionAction.NAME));
-		
-		this.modeEdition = new ToolItem(toolBar, SWT.RADIO);
-		this.modeEdition.addSelectionListener(TuxGuitar.instance().getAction(SetMouseModeEditionAction.NAME));
-		
-		this.notNaturalKey = new ToolItem(toolBar, SWT.CHECK);
-		this.notNaturalKey.addSelectionListener(TuxGuitar.instance().getAction(SetNaturalKeyAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.undo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canUndo());
-		this.redo.setEnabled(!running && TuxGuitar.instance().getUndoableManager().canRedo());
-		this.voice1.setSelection(getEditor().getTablature().getCaret().getVoice() == 0);
-		this.voice1.setEnabled(!running);
-		this.voice2.setSelection(getEditor().getTablature().getCaret().getVoice() == 1);
-		this.voice2.setEnabled(!running);
-		this.modeSelection.setSelection(getEditor().getTablature().getEditorKit().getMouseMode() == EditorKit.MOUSE_MODE_SELECTION);
-		this.modeSelection.setEnabled(!running);
-		this.modeEdition.setSelection(getEditor().getTablature().getEditorKit().getMouseMode() == EditorKit.MOUSE_MODE_EDITION);
-		this.modeEdition.setEnabled(!running);
-		this.notNaturalKey.setSelection(!getEditor().getTablature().getEditorKit().isNatural());
-		this.notNaturalKey.setEnabled(!running && getEditor().getTablature().getEditorKit().getMouseMode() == EditorKit.MOUSE_MODE_EDITION);
-	}
-	
-	public void loadProperties(){
-		this.undo.setToolTipText(TuxGuitar.getProperty("edit.undo"));
-		this.redo.setToolTipText(TuxGuitar.getProperty("edit.redo"));
-		this.voice1.setToolTipText(TuxGuitar.getProperty("edit.voice-1"));
-		this.voice2.setToolTipText(TuxGuitar.getProperty("edit.voice-2"));
-		this.modeSelection.setToolTipText(TuxGuitar.getProperty("edit.mouse-mode-selection"));
-		this.modeEdition.setToolTipText(TuxGuitar.getProperty("edit.mouse-mode-edition"));
-		this.notNaturalKey.setToolTipText(TuxGuitar.getProperty("edit.not-natural-key"));
-	}
-	
-	public void loadIcons(){
-		this.undo.setImage(TuxGuitar.instance().getIconManager().getEditUndo());
-		this.redo.setImage(TuxGuitar.instance().getIconManager().getEditRedo());
-		this.voice1.setImage(TuxGuitar.instance().getIconManager().getEditVoice1());
-		this.voice2.setImage(TuxGuitar.instance().getIconManager().getEditVoice2());
-		this.modeSelection.setImage(TuxGuitar.instance().getIconManager().getEditModeSelection());
-		this.modeEdition.setImage(TuxGuitar.instance().getIconManager().getEditModeEdition());
-		this.notNaturalKey.setImage(TuxGuitar.instance().getIconManager().getEditModeEditionNotNatural());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/FileToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/FileToolItems.java
deleted file mode 100644
index 4db0643..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/FileToolItems.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.file.NewFileAction;
-import org.herac.tuxguitar.gui.actions.file.OpenFileAction;
-import org.herac.tuxguitar.gui.actions.file.PrintAction;
-import org.herac.tuxguitar.gui.actions.file.PrintPreviewAction;
-import org.herac.tuxguitar.gui.actions.file.SaveAsFileAction;
-import org.herac.tuxguitar.gui.actions.file.SaveFileAction;
-import org.herac.tuxguitar.gui.items.ToolItems;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class FileToolItems extends ToolItems {
-	public static final String NAME = "file.items";
-	private ToolItem newSong;
-	private ToolItem openSong;
-	private ToolItem saveSong;
-	private ToolItem saveAsSong;
-	private ToolItem printSong;
-	private ToolItem printPreviewSong;
-	
-	public FileToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.newSong = new ToolItem(toolBar, SWT.PUSH);
-		this.newSong.addSelectionListener(TuxGuitar.instance().getAction(NewFileAction.NAME));
-		
-		this.openSong = new ToolItem(toolBar, SWT.PUSH);
-		this.openSong.addSelectionListener(TuxGuitar.instance().getAction(OpenFileAction.NAME));
-		
-		this.saveSong = new ToolItem(toolBar, SWT.PUSH);
-		this.saveSong.addSelectionListener(TuxGuitar.instance().getAction(SaveFileAction.NAME));
-		
-		this.saveAsSong = new ToolItem(toolBar, SWT.PUSH);
-		this.saveAsSong.addSelectionListener(TuxGuitar.instance().getAction(SaveAsFileAction.NAME));
-		
-		this.printSong = new ToolItem(toolBar, SWT.PUSH);
-		this.printSong.addSelectionListener(TuxGuitar.instance().getAction(PrintAction.NAME));
-		
-		this.printPreviewSong = new ToolItem(toolBar, SWT.PUSH);
-		this.printPreviewSong.addSelectionListener(TuxGuitar.instance().getAction(PrintPreviewAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		//Nothing to do
-	}
-	
-	public void loadProperties(){
-		this.newSong.setToolTipText(TuxGuitar.getProperty("file.new"));
-		this.openSong.setToolTipText(TuxGuitar.getProperty("file.open"));
-		this.saveSong.setToolTipText(TuxGuitar.getProperty("file.save"));
-		this.saveAsSong.setToolTipText(TuxGuitar.getProperty("file.save-as"));
-		this.printSong.setToolTipText(TuxGuitar.getProperty("file.print"));
-		this.printPreviewSong.setToolTipText(TuxGuitar.getProperty("file.print-preview"));
-	}
-	
-	public void loadIcons(){
-		this.newSong.setImage(TuxGuitar.instance().getIconManager().getFileNew());
-		this.openSong.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
-		this.saveSong.setImage(TuxGuitar.instance().getIconManager().getFileSave());
-		this.saveAsSong.setImage(TuxGuitar.instance().getIconManager().getFileSaveAs());
-		this.printSong.setImage(TuxGuitar.instance().getIconManager().getFilePrint());
-		this.printPreviewSong.setImage(TuxGuitar.instance().getIconManager().getFilePrintPreview());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/LayoutToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/LayoutToolItems.java
deleted file mode 100644
index 7f6afa4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/LayoutToolItems.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.layout.SetCompactViewAction;
-import org.herac.tuxguitar.gui.actions.layout.SetLinearLayoutAction;
-import org.herac.tuxguitar.gui.actions.layout.SetMultitrackViewAction;
-import org.herac.tuxguitar.gui.actions.layout.SetPageLayoutAction;
-import org.herac.tuxguitar.gui.actions.layout.SetScoreEnabledAction;
-import org.herac.tuxguitar.gui.editors.tab.layout.LinearViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.layout.PageViewLayout;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.items.ToolItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class LayoutToolItems extends ToolItems{
-	public static final String NAME = "layout.items";
-	
-	private ToolItem pageLayout;
-	private ToolItem linearLayout;
-	private ToolItem multitrack;
-	private ToolItem scoreEnabled;
-	private ToolItem compact;
-	
-	public LayoutToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.pageLayout = new ToolItem(toolBar, SWT.RADIO);
-		this.pageLayout.addSelectionListener(TuxGuitar.instance().getAction(SetPageLayoutAction.NAME));
-		
-		this.linearLayout = new ToolItem(toolBar, SWT.RADIO);
-		this.linearLayout.addSelectionListener(TuxGuitar.instance().getAction(SetLinearLayoutAction.NAME));
-		
-		this.multitrack = new ToolItem(toolBar, SWT.CHECK);
-		this.multitrack.addSelectionListener(TuxGuitar.instance().getAction(SetMultitrackViewAction.NAME));
-		
-		this.scoreEnabled = new ToolItem(toolBar, SWT.CHECK);
-		this.scoreEnabled.addSelectionListener(TuxGuitar.instance().getAction(SetScoreEnabledAction.NAME));
-		
-		this.compact = new ToolItem(toolBar, SWT.CHECK);
-		this.compact.addSelectionListener(TuxGuitar.instance().getAction(SetCompactViewAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void loadProperties(){
-		this.pageLayout.setToolTipText(TuxGuitar.getProperty("view.layout.page"));
-		this.linearLayout.setToolTipText(TuxGuitar.getProperty("view.layout.linear"));
-		this.multitrack.setToolTipText(TuxGuitar.getProperty("view.layout.multitrack"));
-		this.scoreEnabled.setToolTipText(TuxGuitar.getProperty("view.layout.score-enabled"));
-		this.compact.setToolTipText(TuxGuitar.getProperty("view.layout.compact"));
-	}
-	
-	public void loadIcons(){
-		this.pageLayout.setImage(TuxGuitar.instance().getIconManager().getLayoutPage());
-		this.linearLayout.setImage(TuxGuitar.instance().getIconManager().getLayoutLinear());
-		this.multitrack.setImage(TuxGuitar.instance().getIconManager().getLayoutMultitrack());
-		this.scoreEnabled.setImage(TuxGuitar.instance().getIconManager().getLayoutScore());
-		this.compact.setImage(TuxGuitar.instance().getIconManager().getLayoutCompact());
-	}
-	
-	public void update(){
-		ViewLayout layout = getEditor().getTablature().getViewLayout();
-		int style = layout.getStyle();
-		this.pageLayout.setSelection(layout instanceof PageViewLayout);
-		this.linearLayout.setSelection(layout instanceof LinearViewLayout);
-		this.multitrack.setSelection( (style & ViewLayout.DISPLAY_MULTITRACK) != 0 );
-		this.scoreEnabled.setSelection( (style & ViewLayout.DISPLAY_SCORE) != 0 );
-		this.compact.setSelection( (style & ViewLayout.DISPLAY_COMPACT) != 0 );
-		this.compact.setEnabled((style & ViewLayout.DISPLAY_MULTITRACK) == 0 || getEditor().getTablature().getSongManager().getSong().countTracks() == 1);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/MarkerToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/MarkerToolItems.java
deleted file mode 100644
index bcd0cef..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/MarkerToolItems.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.marker.AddMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoFirstMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoLastMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoNextMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.GoPreviousMarkerAction;
-import org.herac.tuxguitar.gui.actions.marker.ListMarkersAction;
-import org.herac.tuxguitar.gui.items.ToolItems;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class MarkerToolItems  extends ToolItems{
-	public static final String NAME = "marker.items";
-	
-	private ToolItem add;
-	private ToolItem list;
-	private ToolItem first;
-	private ToolItem last;
-	private ToolItem previous;
-	private ToolItem next;
-	
-	public MarkerToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		//--ADD--
-		this.add = new ToolItem(toolBar, SWT.PUSH);
-		this.add.addSelectionListener(TuxGuitar.instance().getAction(AddMarkerAction.NAME));
-		
-		//--LIST--
-		this.list = new ToolItem(toolBar, SWT.PUSH);
-		this.list.addSelectionListener(TuxGuitar.instance().getAction(ListMarkersAction.NAME));
-		
-		//--SEPARATOR--
-		new ToolItem(toolBar, SWT.SEPARATOR);
-		
-		//--FIRST--
-		this.first = new ToolItem(toolBar, SWT.PUSH);
-		this.first.addSelectionListener(TuxGuitar.instance().getAction(GoFirstMarkerAction.NAME));
-		
-		//--PREVIOUS--
-		this.previous = new ToolItem(toolBar, SWT.PUSH);
-		this.previous.addSelectionListener(TuxGuitar.instance().getAction(GoPreviousMarkerAction.NAME));
-		
-		//--PREVIOUS--
-		this.next = new ToolItem(toolBar, SWT.PUSH);
-		this.next.addSelectionListener(TuxGuitar.instance().getAction(GoNextMarkerAction.NAME));
-		
-		//--LAST--
-		this.last = new ToolItem(toolBar, SWT.PUSH);
-		this.last.addSelectionListener(TuxGuitar.instance().getAction(GoLastMarkerAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		//Nothing to do
-	}
-	
-	public void loadProperties(){
-		this.add.setToolTipText(TuxGuitar.getProperty("marker.add"));
-		this.list.setToolTipText(TuxGuitar.getProperty("marker.list"));
-		this.first.setToolTipText(TuxGuitar.getProperty("marker.first"));
-		this.last.setToolTipText(TuxGuitar.getProperty("marker.last"));
-		this.previous.setToolTipText(TuxGuitar.getProperty("marker.previous"));
-		this.next.setToolTipText(TuxGuitar.getProperty("marker.next"));
-	}
-	
-	public void loadIcons(){
-		this.add.setImage(TuxGuitar.instance().getIconManager().getMarkerAdd());
-		this.list.setImage(TuxGuitar.instance().getIconManager().getMarkerList());
-		this.first.setImage(TuxGuitar.instance().getIconManager().getMarkerFirst());
-		this.previous.setImage(TuxGuitar.instance().getIconManager().getMarkerPrevious());
-		this.next.setImage(TuxGuitar.instance().getIconManager().getMarkerNext());
-		this.last.setImage(TuxGuitar.instance().getIconManager().getMarkerLast());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/NoteEffectToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/NoteEffectToolItems.java
deleted file mode 100644
index ef7a59c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/NoteEffectToolItems.java
+++ /dev/null
@@ -1,251 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.effects.ChangeAccentuatedNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeBendNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeDeadNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeFadeInAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeGhostNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeGraceNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeHammerNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeHarmonicNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeHeavyAccentuatedNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangePalmMuteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangePoppingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeSlappingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeSlideNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeStaccatoAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTappingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloBarAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTremoloPickingAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeTrillNoteAction;
-import org.herac.tuxguitar.gui.actions.effects.ChangeVibratoNoteAction;
-import org.herac.tuxguitar.gui.items.ToolItems;
-import org.herac.tuxguitar.song.models.TGNote;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class NoteEffectToolItems  extends ToolItems{
-	public static final String NAME = "effect.items";
-	
-	private ToolItem deadNote;
-	private ToolItem ghostNote;
-	private ToolItem accentuatedNote;
-	private ToolItem heavyAccentuatedNote;
-	private ToolItem harmonicNote;
-	private ToolItem graceNote;
-	
-	private ToolItem vibrato;
-	private ToolItem bend;
-	private ToolItem tremoloBar;
-	private ToolItem slide;
-	private ToolItem hammer;
-	
-	private ToolItem trill;
-	private ToolItem tremoloPicking;
-	private ToolItem palmMute;
-	
-	private ToolItem staccato;
-	private ToolItem tapping;
-	private ToolItem slapping;
-	private ToolItem popping;
-	
-	private ToolItem fadeIn;
-	
-	public NoteEffectToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		//--DEAD NOTE--
-		this.deadNote = new ToolItem(toolBar, SWT.CHECK);
-		this.deadNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeDeadNoteAction.NAME));
-		
-		//--GHOST NOTE--
-		this.ghostNote = new ToolItem(toolBar, SWT.CHECK);
-		this.ghostNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeGhostNoteAction.NAME));
-		
-		//--ACCENTUATED NOTE--
-		this.accentuatedNote = new ToolItem(toolBar, SWT.CHECK);
-		this.accentuatedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeAccentuatedNoteAction.NAME));
-		
-		//--HEAVY ACCENTUATED NOTE--
-		this.heavyAccentuatedNote = new ToolItem(toolBar, SWT.CHECK);
-		this.heavyAccentuatedNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeHeavyAccentuatedNoteAction.NAME));
-		
-		//--HARMONIC NOTE--
-		this.harmonicNote = new ToolItem(toolBar, SWT.CHECK);
-		this.harmonicNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeHarmonicNoteAction.NAME));
-		
-		//--GRACE NOTE--
-		this.graceNote = new ToolItem(toolBar, SWT.CHECK);
-		this.graceNote.addSelectionListener(TuxGuitar.instance().getAction(ChangeGraceNoteAction.NAME));
-		
-		//--SEPARATOR--
-		new ToolItem(toolBar, SWT.SEPARATOR);
-		
-		//--VIBRATO--
-		this.vibrato = new ToolItem(toolBar, SWT.CHECK);
-		this.vibrato.addSelectionListener(TuxGuitar.instance().getAction(ChangeVibratoNoteAction.NAME));
-		
-		//--BEND--
-		this.bend = new ToolItem(toolBar, SWT.CHECK);
-		this.bend.addSelectionListener(TuxGuitar.instance().getAction(ChangeBendNoteAction.NAME));
-		
-		//--BEND--
-		this.tremoloBar = new ToolItem(toolBar, SWT.CHECK);
-		this.tremoloBar.addSelectionListener(TuxGuitar.instance().getAction(ChangeTremoloBarAction.NAME));
-		
-		//--SLIDE--
-		this.slide = new ToolItem(toolBar, SWT.CHECK);
-		this.slide.addSelectionListener(TuxGuitar.instance().getAction(ChangeSlideNoteAction.NAME));
-		
-		//--HAMMER--
-		this.hammer = new ToolItem(toolBar, SWT.CHECK);
-		this.hammer.addSelectionListener(TuxGuitar.instance().getAction(ChangeHammerNoteAction.NAME));
-		
-		//--SEPARATOR--
-		new ToolItem(toolBar, SWT.SEPARATOR);
-		
-		//--TRILL--
-		this.trill = new ToolItem(toolBar, SWT.CHECK);
-		this.trill.addSelectionListener(TuxGuitar.instance().getAction(ChangeTrillNoteAction.NAME));
-		
-		//--TREMOLO PICKING--
-		this.tremoloPicking = new ToolItem(toolBar, SWT.CHECK);
-		this.tremoloPicking.addSelectionListener(TuxGuitar.instance().getAction(ChangeTremoloPickingAction.NAME));
-		
-		//--PALM MUTE--
-		this.palmMute = new ToolItem(toolBar, SWT.CHECK);
-		this.palmMute.addSelectionListener(TuxGuitar.instance().getAction(ChangePalmMuteAction.NAME));
-		
-		//--STACCATO
-		this.staccato = new ToolItem(toolBar, SWT.CHECK);
-		this.staccato.addSelectionListener(TuxGuitar.instance().getAction(ChangeStaccatoAction.NAME));
-		
-		//--SEPARATOR--
-		new ToolItem(toolBar, SWT.SEPARATOR);
-		
-		//--TAPPING
-		this.tapping = new ToolItem(toolBar, SWT.CHECK);
-		this.tapping.addSelectionListener(TuxGuitar.instance().getAction(ChangeTappingAction.NAME));
-		
-		//--SLAPPING
-		this.slapping = new ToolItem(toolBar, SWT.CHECK);
-		this.slapping.addSelectionListener(TuxGuitar.instance().getAction(ChangeSlappingAction.NAME));
-		
-		//--POPPING
-		this.popping = new ToolItem(toolBar, SWT.CHECK);
-		this.popping.addSelectionListener(TuxGuitar.instance().getAction(ChangePoppingAction.NAME));
-		
-		//--SEPARATOR--
-		new ToolItem(toolBar, SWT.SEPARATOR);
-		
-		//--FADE IN
-		this.fadeIn = new ToolItem(toolBar, SWT.CHECK);
-		this.fadeIn.addSelectionListener(TuxGuitar.instance().getAction(ChangeFadeInAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		TGNote note = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getSelectedNote();
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.vibrato.setSelection(note != null && note.getEffect().isVibrato());
-		this.vibrato.setEnabled(!running && note != null);
-		this.bend.setSelection(note != null && note.getEffect().isBend());
-		this.bend.setEnabled(!running && note != null);
-		this.tremoloBar.setSelection(note != null && note.getEffect().isTremoloBar());
-		this.tremoloBar.setEnabled(!running && note != null);
-		this.deadNote.setSelection(note != null && note.getEffect().isDeadNote());
-		this.deadNote.setEnabled(!running && note != null);
-		this.slide.setSelection(note != null && note.getEffect().isSlide());
-		this.slide.setEnabled(!running && note != null);
-		this.hammer.setSelection(note != null && note.getEffect().isHammer());
-		this.hammer.setEnabled(!running && note != null);
-		this.ghostNote.setSelection(note != null && note.getEffect().isGhostNote());
-		this.ghostNote.setEnabled(!running && note != null);
-		this.accentuatedNote.setSelection(note != null && note.getEffect().isAccentuatedNote());
-		this.accentuatedNote.setEnabled(!running && note != null);
-		this.heavyAccentuatedNote.setSelection(note != null && note.getEffect().isHeavyAccentuatedNote());
-		this.heavyAccentuatedNote.setEnabled(!running && note != null);
-		this.harmonicNote.setSelection(note != null && note.getEffect().isHarmonic());
-		this.harmonicNote.setEnabled(!running && note != null);
-		this.graceNote.setSelection(note != null && note.getEffect().isGrace());
-		this.graceNote.setEnabled(!running && note != null);
-		this.trill.setSelection(note != null && note.getEffect().isTrill());
-		this.trill.setEnabled(!running && note != null);
-		this.tremoloPicking.setSelection(note != null && note.getEffect().isTremoloPicking());
-		this.tremoloPicking.setEnabled(!running && note != null);
-		this.palmMute.setSelection(note != null && note.getEffect().isPalmMute());
-		this.palmMute.setEnabled(!running && note != null);
-		this.staccato.setSelection(note != null && note.getEffect().isStaccato());
-		this.staccato.setEnabled(!running && note != null);
-		this.tapping.setSelection(note != null && note.getEffect().isTapping());
-		this.tapping.setEnabled(!running && note != null);
-		this.slapping.setSelection(note != null && note.getEffect().isSlapping());
-		this.slapping.setEnabled(!running && note != null);
-		this.popping.setSelection(note != null && note.getEffect().isPopping());
-		this.popping.setEnabled(!running && note != null);
-		this.fadeIn.setSelection(note != null && note.getEffect().isFadeIn());
-		this.fadeIn.setEnabled(!running && note != null);
-	}
-	
-	public void loadProperties(){
-		this.vibrato.setToolTipText(TuxGuitar.getProperty("effects.vibrato"));
-		this.bend.setToolTipText(TuxGuitar.getProperty("effects.bend"));
-		this.tremoloBar.setToolTipText(TuxGuitar.getProperty("effects.tremolo-bar"));
-		this.popping.setToolTipText(TuxGuitar.getProperty("effects.popping"));
-		this.deadNote.setToolTipText(TuxGuitar.getProperty("effects.deadnote"));
-		this.slide.setToolTipText(TuxGuitar.getProperty("effects.slide"));
-		this.hammer.setToolTipText(TuxGuitar.getProperty("effects.hammer"));
-		this.ghostNote.setToolTipText(TuxGuitar.getProperty("effects.ghostnote"));
-		this.accentuatedNote.setToolTipText(TuxGuitar.getProperty("effects.accentuatednote"));
-		this.heavyAccentuatedNote.setToolTipText(TuxGuitar.getProperty("effects.heavyaccentuatednote"));
-		this.harmonicNote.setToolTipText(TuxGuitar.getProperty("effects.harmonic"));
-		this.graceNote.setToolTipText(TuxGuitar.getProperty("effects.grace"));
-		this.trill.setToolTipText(TuxGuitar.getProperty("effects.trill"));
-		this.tremoloPicking.setToolTipText(TuxGuitar.getProperty("effects.tremolo-picking"));
-		this.palmMute.setToolTipText(TuxGuitar.getProperty("effects.palm-mute"));
-		this.staccato.setToolTipText(TuxGuitar.getProperty("effects.staccato"));
-		this.tapping.setToolTipText(TuxGuitar.getProperty("effects.tapping"));
-		this.slapping.setToolTipText(TuxGuitar.getProperty("effects.slapping"));
-		this.popping.setToolTipText(TuxGuitar.getProperty("effects.popping"));
-		this.fadeIn.setToolTipText(TuxGuitar.getProperty("effects.fade-in"));
-	}
-	
-	public void loadIcons(){
-		this.deadNote.setImage(TuxGuitar.instance().getIconManager().getEffectDead());
-		this.ghostNote.setImage(TuxGuitar.instance().getIconManager().getEffectGhost());
-		this.accentuatedNote.setImage(TuxGuitar.instance().getIconManager().getEffectAccentuated());
-		this.heavyAccentuatedNote.setImage(TuxGuitar.instance().getIconManager().getEffectHeavyAccentuated());
-		this.harmonicNote.setImage(TuxGuitar.instance().getIconManager().getEffectHarmonic());
-		this.graceNote.setImage(TuxGuitar.instance().getIconManager().getEffectGrace());
-		this.vibrato.setImage(TuxGuitar.instance().getIconManager().getEffectVibrato());
-		this.bend.setImage(TuxGuitar.instance().getIconManager().getEffectBend());
-		this.tremoloBar.setImage(TuxGuitar.instance().getIconManager().getEffectTremoloBar());
-		this.slide.setImage(TuxGuitar.instance().getIconManager().getEffectSlide());
-		this.hammer.setImage(TuxGuitar.instance().getIconManager().getEffectHammer());
-		this.trill.setImage(TuxGuitar.instance().getIconManager().getEffectTrill());
-		this.tremoloPicking.setImage(TuxGuitar.instance().getIconManager().getEffectTremoloPicking());
-		this.palmMute.setImage(TuxGuitar.instance().getIconManager().getEffectPalmMute());
-		this.staccato.setImage(TuxGuitar.instance().getIconManager().getEffectStaccato());
-		this.tapping.setImage(TuxGuitar.instance().getIconManager().getEffectTapping());
-		this.slapping.setImage(TuxGuitar.instance().getIconManager().getEffectSlapping());
-		this.popping.setImage(TuxGuitar.instance().getIconManager().getEffectPopping());
-		this.fadeIn.setImage(TuxGuitar.instance().getIconManager().getEffectFadeIn());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/PropertiesToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/PropertiesToolItems.java
deleted file mode 100644
index f9bbbec..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/PropertiesToolItems.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.composition.ChangeInfoAction;
-import org.herac.tuxguitar.gui.items.ToolItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class PropertiesToolItems extends ToolItems{
-	public static final String NAME = "property.items";
-	
-	private ToolItem info;
-	
-	public PropertiesToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.info = new ToolItem(toolBar, SWT.PUSH);
-		this.info.addSelectionListener(TuxGuitar.instance().getAction(ChangeInfoAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void loadProperties(){
-		this.info.setToolTipText(TuxGuitar.getProperty("composition.properties"));
-	}
-	
-	public void loadIcons(){
-		this.info.setImage(TuxGuitar.instance().getIconManager().getSongProperties());
-	}
-	
-	public void update(){
-		//Nothing to do
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/TrackToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/TrackToolItems.java
deleted file mode 100644
index 6d24456..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/TrackToolItems.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.track.AddTrackAction;
-import org.herac.tuxguitar.gui.actions.track.RemoveTrackAction;
-import org.herac.tuxguitar.gui.items.ToolItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TrackToolItems extends ToolItems{
-	public static final String NAME = "track.items";
-	
-	private ToolItem add;
-	private ToolItem remove;
-	
-	public TrackToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.add = new ToolItem(toolBar, SWT.PUSH);
-		this.add.addSelectionListener(TuxGuitar.instance().getAction(AddTrackAction.NAME));
-		
-		this.remove = new ToolItem(toolBar, SWT.PUSH);
-		this.remove.addSelectionListener(TuxGuitar.instance().getAction(RemoveTrackAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void loadProperties(){
-		this.add.setToolTipText(TuxGuitar.getProperty("track.add"));
-		this.remove.setToolTipText(TuxGuitar.getProperty("track.remove"));
-	}
-	
-	public void loadIcons(){
-		this.add.setImage(TuxGuitar.instance().getIconManager().getTrackAdd());
-		this.remove.setImage(TuxGuitar.instance().getIconManager().getTrackRemove());
-	}
-	
-	public void update(){
-		boolean running = TuxGuitar.instance().getPlayer().isRunning();
-		this.add.setEnabled(!running);
-		this.remove.setEnabled(!running);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/TransportToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/TransportToolItems.java
deleted file mode 100644
index c0aea21..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/TransportToolItems.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.transport.TransportPlayAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportStopAction;
-import org.herac.tuxguitar.gui.items.ToolItems;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TransportToolItems  extends ToolItems{
-	public static final String NAME = "transport.items";
-	
-	private static final int STATUS_STOPPED = 1;
-	private static final int STATUS_PAUSED = 2;
-	private static final int STATUS_RUNNING = 3;
-	
-	private ToolItem first;
-	private ToolItem last;
-	private ToolItem previous;
-	private ToolItem next;
-	private ToolItem stop;
-	private ToolItem play;
-	private int status;
-	
-	public TransportToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		this.first = new ToolItem(toolBar,SWT.PUSH);
-		this.first.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				TuxGuitar.instance().getTransport().gotoFirst();
-			}
-		});
-		
-		this.previous = new ToolItem(toolBar,SWT.PUSH);
-		this.previous.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				TuxGuitar.instance().getTransport().gotoPrevious();
-			}
-		});
-		
-		this.stop = new ToolItem(toolBar,SWT.PUSH);
-		this.stop.addSelectionListener(TuxGuitar.instance().getAction(TransportStopAction.NAME));
-		
-		this.play = new ToolItem(toolBar,SWT.PUSH);
-		this.play.addSelectionListener(TuxGuitar.instance().getAction(TransportPlayAction.NAME));
-		
-		this.next = new ToolItem(toolBar,SWT.PUSH);
-		this.next.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				TuxGuitar.instance().getTransport().gotoNext();
-			}
-		});
-		
-		this.last = new ToolItem(toolBar,SWT.PUSH);
-		this.last.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				TuxGuitar.instance().getTransport().gotoLast();
-			}
-		});
-		
-		this.status = STATUS_STOPPED;
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		loadIcons(false);
-	}
-	
-	public void loadProperties(){
-		this.play.setToolTipText(TuxGuitar.getProperty("transport.start"));
-		this.stop.setToolTipText(TuxGuitar.getProperty("transport.stop"));
-		this.first.setToolTipText(TuxGuitar.getProperty("transport.first"));
-		this.last.setToolTipText(TuxGuitar.getProperty("transport.last"));
-		this.previous.setToolTipText(TuxGuitar.getProperty("transport.previous"));
-		this.next.setToolTipText(TuxGuitar.getProperty("transport.next"));
-	}
-	
-	public void loadIcons(){
-		loadIcons(true);
-	}
-	
-	public void loadIcons(boolean force){
-		int lastStatus = this.status;
-		
-		if(TuxGuitar.instance().getPlayer().isRunning()){
-			this.status = STATUS_RUNNING;
-		}else if(TuxGuitar.instance().getPlayer().isPaused()){
-			this.status = STATUS_PAUSED;
-		}else{
-			this.status = STATUS_STOPPED;
-		}
-		
-		if(force || lastStatus != this.status){
-			if(this.status == STATUS_RUNNING){
-				this.first.setImage(TuxGuitar.instance().getIconManager().getTransportIconFirst2());
-				this.last.setImage(TuxGuitar.instance().getIconManager().getTransportIconLast2());
-				this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportIconPrevious2());
-				this.next.setImage(TuxGuitar.instance().getIconManager().getTransportIconNext2());
-				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2());
-				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPause());
-				this.play.setToolTipText(TuxGuitar.getProperty("transport.pause"));
-			}else if(this.status == STATUS_PAUSED){
-				this.first.setImage(TuxGuitar.instance().getIconManager().getTransportIconFirst2());
-				this.last.setImage(TuxGuitar.instance().getIconManager().getTransportIconLast2());
-				this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportIconPrevious2());
-				this.next.setImage(TuxGuitar.instance().getIconManager().getTransportIconNext2());
-				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop2());
-				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay2());
-				this.play.setToolTipText(TuxGuitar.getProperty("transport.start"));
-			}else if(this.status == STATUS_STOPPED){
-				this.first.setImage(TuxGuitar.instance().getIconManager().getTransportIconFirst1());
-				this.last.setImage(TuxGuitar.instance().getIconManager().getTransportIconLast1());
-				this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportIconPrevious1());
-				this.next.setImage(TuxGuitar.instance().getIconManager().getTransportIconNext1());
-				this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportIconStop1());
-				this.play.setImage(TuxGuitar.instance().getIconManager().getTransportIconPlay1());
-				this.play.setToolTipText(TuxGuitar.getProperty("transport.start"));
-			}
-		}
-		
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/ViewToolItems.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/ViewToolItems.java
deleted file mode 100644
index f04e816..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/tool/ViewToolItems.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Created on 02-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.items.tool;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.view.ShowFretBoardAction;
-import org.herac.tuxguitar.gui.actions.view.ShowMixerAction;
-import org.herac.tuxguitar.gui.actions.view.ShowTransportAction;
-import org.herac.tuxguitar.gui.items.ToolItems;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class ViewToolItems extends ToolItems{
-	public static final String NAME = "view.items";
-	
-	private ToolItem showFretBoard;
-	private ToolItem showMixer;
-	private ToolItem showTransport;
-	
-	public ViewToolItems(){
-		super(NAME);
-	}
-	
-	public void showItems(ToolBar toolBar){
-		//--FRETBOARD--
-		this.showFretBoard = new ToolItem(toolBar, SWT.CHECK);
-		this.showFretBoard.addSelectionListener(TuxGuitar.instance().getAction(ShowFretBoardAction.NAME));
-		
-		//--MIXER--
-		this.showMixer = new ToolItem(toolBar, SWT.CHECK);
-		this.showMixer.addSelectionListener(TuxGuitar.instance().getAction(ShowMixerAction.NAME));
-		
-		//--TRANSPORT--
-		this.showTransport = new ToolItem(toolBar, SWT.CHECK);
-		this.showTransport.addSelectionListener(TuxGuitar.instance().getAction(ShowTransportAction.NAME));
-		
-		this.loadIcons();
-		this.loadProperties();
-	}
-	
-	public void update(){
-		this.showFretBoard.setSelection(TuxGuitar.instance().getFretBoardEditor().isVisible());
-		this.showMixer.setSelection(!TuxGuitar.instance().getMixer().isDisposed());
-		this.showTransport.setSelection(!TuxGuitar.instance().getTransport().isDisposed());
-	}
-	
-	public void loadProperties(){
-		this.showFretBoard.setToolTipText(TuxGuitar.getProperty("view.show-fretboard"));
-		this.showMixer.setToolTipText(TuxGuitar.getProperty("view.show-mixer"));
-		this.showTransport.setToolTipText(TuxGuitar.getProperty("view.show-transport"));
-	}
-	
-	public void loadIcons(){
-		this.showFretBoard.setImage(TuxGuitar.instance().getIconManager().getFretboard());
-		this.showMixer.setImage(TuxGuitar.instance().getIconManager().getMixer());
-		this.showTransport.setImage(TuxGuitar.instance().getIconManager().getTransport());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/xml/ToolBarsReader.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/xml/ToolBarsReader.java
deleted file mode 100644
index f8891f2..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/xml/ToolBarsReader.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package org.herac.tuxguitar.gui.items.xml;
-
-import java.io.File;
-import java.io.IOException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.herac.tuxguitar.gui.items.ItemManager;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-public class ToolBarsReader {
-	private static final String ITEM_TAG = "toolbar";
-	private static final String ATTR_NAME = "name";
-	private static final String ATTR_ENABLED = "enabled";
-	
-	public static void loadToolBars(ItemManager manager,File file){
-		try {
-			if (file.exists()){
-				loadToolBars(manager,getDocument(file).getFirstChild());
-			}
-		} catch (Throwable throwable) {
-			throwable.printStackTrace();
-		}
-	}
-	
-	private static Document getDocument(File file) throws ParserConfigurationException, SAXException, IOException {
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		DocumentBuilder builder = factory.newDocumentBuilder();
-		Document document = builder.parse(file);
-		return document;
-	}
-	
-	private static void loadToolBars(ItemManager manager,Node node){
-		NodeList listNode = node.getChildNodes();
-		int index = 0;
-		for (int i = 0; i < listNode.getLength(); i++) {
-			Node child = listNode.item(i);
-			String nameNode = child.getNodeName();
-			
-			if (nameNode.equals(ITEM_TAG)) {
-				NamedNodeMap params = child.getAttributes();
-				
-				Node name = params.getNamedItem(ATTR_NAME);
-				Node enabled = params.getNamedItem(ATTR_ENABLED);
-				
-				if (name == null || enabled == null || name.getNodeValue() == null || enabled.getNodeValue() == null ){
-					System.err.println("Invalid ToolBar Attributes.");
-					continue;
-				}
-				manager.setToolBarStatus(name.getNodeValue(),Boolean.valueOf(enabled.getNodeValue().trim()).booleanValue(), index ++);
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/items/xml/ToolBarsWriter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/items/xml/ToolBarsWriter.java
deleted file mode 100644
index 1f25276..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/items/xml/ToolBarsWriter.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.herac.tuxguitar.gui.items.xml;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-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.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.herac.tuxguitar.gui.items.ToolItems;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-public class ToolBarsWriter {
-	
-	private static final String ITEM_LIST_TAG = "toolbars";
-	private static final String ITEM_TAG = "toolbar";
-	private static final String ATTR_NAME = "name";
-	private static final String ATTR_ENABLED = "enabled";
-	
-	public static void saveToolBars(ToolItems[] items,File file) {
-		try {
-			Document doc = createDocument();
-			setToolBars(items,doc);
-			saveDocument(doc,file);
-		} catch (Throwable throwable) {
-			throwable.printStackTrace();
-		}
-	}
-	
-	public static Document createDocument() throws ParserConfigurationException {
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		DocumentBuilder builder = factory.newDocumentBuilder();
-		Document document = builder.newDocument();
-		return document;
-	}
-	
-	public static void saveDocument(Document document,File file) throws FileNotFoundException, TransformerException {
-		FileOutputStream fs = new FileOutputStream(file);
-		
-		// Write it out again
-		TransformerFactory xformFactory = TransformerFactory.newInstance();
-		Transformer idTransform = xformFactory.newTransformer();
-		Source input = new DOMSource(document);
-		Result output = new StreamResult(fs);
-		idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
-		idTransform.transform(input, output);
-	}
-	
-	private static void setToolBars(ToolItems[] items,Document document){
-		//chords tag
-		Node listNode = document.createElement(ITEM_LIST_TAG);
-		
-		for(int i = 0; i < items.length ; i ++){
-			
-			//chord tag
-			Node node = document.createElement(ITEM_TAG);
-			listNode.appendChild(node);
-			
-			//name attribute
-			Attr attribute = document.createAttribute(ATTR_NAME);
-			attribute.setNodeValue( items[i].getName());
-			node.getAttributes().setNamedItem(attribute);
-			
-			//enabled attribute
-			attribute = document.createAttribute(ATTR_ENABLED);
-			attribute.setNodeValue( Boolean.toString(items[i].isEnabled()));
-			node.getAttributes().setNamedItem(attribute);
-		}
-		
-		document.appendChild(listNode);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerEditor.java
deleted file mode 100644
index e86f25d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerEditor.java
+++ /dev/null
@@ -1,210 +0,0 @@
-package org.herac.tuxguitar.gui.marker;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.ColorDialog;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableJoined;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeMarker;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGMarker;
-
-public class MarkerEditor {
-	public static final int STATUS_NEW = 1;
-	public static final int STATUS_EDIT = 2;
-	
-	private static final int MINIMUM_CONTROL_WIDTH = 180;
-	private static final int MINIMUM_BUTTON_WIDTH = 80;
-	private static final int MINIMUM_BUTTON_HEIGHT = 25;
-	
-	private int status;
-	protected TGMarker marker;
-	protected Shell dialog;
-	protected Spinner measureSpinner;
-	protected Text titleText;
-	protected Button colorButton;
-	protected Color colorButtonValue;
-	
-	protected boolean accepted;
-	
-	public MarkerEditor(TGMarker marker) {
-		this(marker,STATUS_NEW);
-	}
-	
-	public MarkerEditor(TGMarker marker,int status) {
-		this.marker = marker.clone(TuxGuitar.instance().getSongManager().getFactory());
-		this.status = status;
-	}
-	
-	public boolean open(Shell shell) {
-		this.accepted = false;
-		
-		this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setText(TuxGuitar.getProperty("marker"));
-		
-		// ----------------------------------------------------------------------
-		Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout(2, false));
-		group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		group.setText(TuxGuitar.getProperty("marker"));
-		
-		// Measure Number
-		final int measureCount = TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders();
-		Label measureLabel = new Label(group, SWT.NULL);
-		measureLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true,true));
-		measureLabel.setText(TuxGuitar.getProperty("measure"));
-		
-		this.measureSpinner = new Spinner(group, SWT.BORDER);
-		this.measureSpinner.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
-		this.measureSpinner.setMinimum(1);
-		this.measureSpinner.setMaximum(measureCount);
-		this.measureSpinner.setSelection(this.marker.getMeasure());
-		this.measureSpinner.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				int selection = MarkerEditor.this.measureSpinner.getSelection();
-				if (selection < 1) {
-					MarkerEditor.this.measureSpinner.setSelection(1);
-				} else if (selection > measureCount) {
-					MarkerEditor.this.measureSpinner.setSelection(measureCount);
-				}
-			}
-		});
-		
-		// Title
-		Label titleLabel = new Label(group, SWT.NULL);
-		titleLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
-		titleLabel.setText(TuxGuitar.getProperty("title"));
-		this.titleText = new Text(group, SWT.BORDER);
-		this.titleText.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
-		this.titleText.setText(this.marker.getTitle());
-		
-		// Color
-		Label colorLabel = new Label(group, SWT.NULL);
-		colorLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, true));
-		colorLabel.setText(TuxGuitar.getProperty("color"));
-		this.colorButton = new Button(group, SWT.PUSH);
-		this.colorButton.setLayoutData(getAlignmentData(MINIMUM_CONTROL_WIDTH,SWT.FILL));
-		this.colorButton.setText(TuxGuitar.getProperty("choose"));
-		this.colorButton.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				ColorDialog dlg = new ColorDialog(MarkerEditor.this.dialog);
-				dlg.setRGB(MarkerEditor.this.dialog.getDisplay().getSystemColor(SWT.COLOR_BLACK).getRGB());
-				dlg.setText(TuxGuitar.getProperty("choose-color"));
-				RGB rgb = dlg.open();
-				if (rgb != null) {
-					MarkerEditor.this.marker.getColor().setR(rgb.red);
-					MarkerEditor.this.marker.getColor().setG(rgb.green);
-					MarkerEditor.this.marker.getColor().setB(rgb.blue);
-					MarkerEditor.this.setButtonColor();
-				}
-			}
-		});
-		this.colorButton.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				MarkerEditor.this.disposeButtonColor();
-			}
-		});
-		this.setButtonColor();
-		
-		// ------------------BUTTONS--------------------------
-		Composite buttons = new Composite(this.dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2, false));
-		buttons.setLayoutData(new GridData(SWT.END, SWT.FILL, true, true));
-		
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = MINIMUM_BUTTON_WIDTH;
-		data.minimumHeight = MINIMUM_BUTTON_HEIGHT;
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(data);
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				updateMarker();
-				MarkerEditor.this.accepted = true;
-				MarkerEditor.this.dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(data);
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				MarkerEditor.this.dialog.dispose();
-			}
-		});
-		
-		this.dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return this.accepted;
-	}
-	
-	private GridData getAlignmentData(int minimumWidth,int horizontalAlignment){
-		GridData data = new GridData();
-		data.minimumWidth = minimumWidth;
-		data.horizontalAlignment = horizontalAlignment;
-		data.verticalAlignment = SWT.DEFAULT;
-		data.grabExcessHorizontalSpace = true;
-		data.grabExcessVerticalSpace = true;
-		return data;
-	}
-	
-	protected void setButtonColor(){
-		Color color = new Color(this.dialog.getDisplay(), this.marker.getColor().getR(), this.marker.getColor().getG(), this.marker.getColor().getB());
-		
-		this.colorButton.setForeground( color );
-		this.disposeButtonColor();
-		this.colorButtonValue = color;
-	}
-	
-	protected void disposeButtonColor(){
-		if(this.colorButtonValue != null && !this.colorButtonValue.isDisposed()){
-			this.colorButtonValue.dispose();
-			this.colorButtonValue = null;
-		}
-	}
-	
-	protected void updateMarker() {
-		int oldMeasure = this.marker.getMeasure();
-		this.marker.setMeasure(this.measureSpinner.getSelection());
-		this.marker.setTitle(this.titleText.getText());
-		this.marker = this.marker.clone(TuxGuitar.instance().getSongManager().getFactory());
-		
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		
-		//comienza el undoable
-		UndoableJoined joinedUndoable = new UndoableJoined();
-		
-		if(this.status == STATUS_EDIT && oldMeasure != this.marker.getMeasure()){
-			UndoableChangeMarker undoable = UndoableChangeMarker.startUndo(manager.getMarker(oldMeasure));
-			TuxGuitar.instance().getSongManager().removeMarker(oldMeasure);
-			joinedUndoable.addUndoableEdit(undoable.endUndo(null));
-		}
-		UndoableChangeMarker undoable = UndoableChangeMarker.startUndo(manager.getMarker(this.marker.getMeasure()));
-		TuxGuitar.instance().getSongManager().updateMarker(this.marker);
-		joinedUndoable.addUndoableEdit(undoable.endUndo(this.marker));
-		
-		// termia el undoable
-		TuxGuitar.instance().getUndoableManager().addEdit(joinedUndoable.endUndo());
-		TuxGuitar.instance().getFileHistory().setUnsavedFile();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerList.java b/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerList.java
deleted file mode 100644
index f06aec5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerList.java
+++ /dev/null
@@ -1,298 +0,0 @@
-package org.herac.tuxguitar.gui.marker;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.TGUpdateListener;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.undo.undoables.custom.UndoableChangeMarker;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGMarker;
-
-public class MarkerList implements TGUpdateListener, IconLoader,LanguageLoader{
-	
-	private static MarkerList instance;
-	
-	protected Shell dialog;
-	private Table table;
-	private List markers;
-	
-	private Composite compositeTable;
-	private TableColumn measureColumn;
-	private TableColumn titleColumn;
-	
-	private Composite compositeButtons;
-	private Button buttonAdd;
-	private Button buttonEdit;
-	private Button buttonDelete;
-	private Button buttonGo;
-	private Button buttonClose;
-	
-	public static MarkerList instance(){
-		if(instance == null){
-			instance = new MarkerList();
-		}
-		return instance;
-	}
-	
-	private MarkerList() {
-		super();
-	}
-	
-	public void show() {
-		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM);
-		this.dialog.setLayout(new GridLayout(2,false));
-		this.dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		// ----------------------------------------------------------------------
-		this.compositeTable = new Composite(this.dialog, SWT.NONE);
-		this.compositeTable.setLayout(new GridLayout());
-		this.compositeTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		
-		this.table = new Table(this.compositeTable, SWT.BORDER | SWT.FULL_SELECTION);
-		this.table.setLayoutData(new GridData(250,200));
-		this.table.setHeaderVisible(true);
-		this.table.addListener (SWT.MouseDoubleClick, new Listener() {
-			public void handleEvent (Event event) {
-				new MarkerNavigator().goToSelectedMarker(getSelectedMarker());
-				TuxGuitar.instance().updateCache(true);
-			}
-		});
-		this.measureColumn = new TableColumn(this.table, SWT.LEFT);
-		this.measureColumn.setWidth(70);
-		
-		this.titleColumn = new TableColumn(this.table, SWT.LEFT);
-		this.titleColumn.setWidth(180);
-		
-		this.loadTableItems(false);
-		
-		// ------------------BUTTONS--------------------------
-		this.compositeButtons = new Composite(this.dialog, SWT.NONE);
-		this.compositeButtons.setLayout(new GridLayout(1,false));
-		this.compositeButtons.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.buttonAdd = new Button(this.compositeButtons, SWT.PUSH);
-		this.buttonAdd.setLayoutData(makeGridData(SWT.FILL, SWT.TOP,false));
-		this.buttonAdd.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()){
-					ActionLock.lock();
-					Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-					TGMarker marker = TuxGuitar.instance().getSongManager().getFactory().newMarker();
-					marker.setMeasure(caret.getMeasure().getNumber());
-					if(new MarkerEditor(marker,MarkerEditor.STATUS_NEW).open(MarkerList.this.dialog)){
-						TuxGuitar.instance().updateCache(true);
-						loadTableItems(true);
-					}
-					ActionLock.unlock();
-				}
-			}
-		});
-		
-		this.buttonEdit = new Button(this.compositeButtons, SWT.PUSH);
-		this.buttonEdit.setLayoutData(makeGridData(SWT.FILL, SWT.TOP,false));
-		this.buttonEdit.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				if(!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()){
-					ActionLock.lock();
-					TGMarker marker = getSelectedMarker();
-					if(marker != null){
-						if(new MarkerEditor(marker,MarkerEditor.STATUS_EDIT).open(MarkerList.this.dialog)){
-							TuxGuitar.instance().updateCache(true);
-							loadTableItems(true);
-						}
-					}
-					ActionLock.unlock();
-				}
-			}
-		});
-		
-		this.buttonDelete = new Button(this.compositeButtons, SWT.PUSH);
-		this.buttonDelete.setLayoutData(makeGridData(SWT.FILL, SWT.TOP,false));
-		this.buttonDelete.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				if(!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()){
-					ActionLock.lock();
-					TGMarker marker = getSelectedMarker();
-					// comienza el undoable
-					UndoableChangeMarker undoable = UndoableChangeMarker.startUndo(marker);
-					
-					TuxGuitar.instance().getSongManager().removeMarker(marker);
-					
-					// termia el undoable
-					TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(null));
-					TuxGuitar.instance().getFileHistory().setUnsavedFile();
-					TuxGuitar.instance().updateCache(true);
-					loadTableItems(true);
-					ActionLock.unlock();
-				}
-			}
-		});
-		
-		this.buttonGo = new Button(this.compositeButtons, SWT.PUSH);
-		this.buttonGo.setLayoutData(makeGridData(SWT.FILL, SWT.BOTTOM,true));
-		this.buttonGo.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				if(!ActionLock.isLocked() && !TuxGuitar.instance().isLocked()){
-					ActionLock.lock();
-					new MarkerNavigator().goToSelectedMarker(getSelectedMarker());
-					TuxGuitar.instance().updateCache(true);
-					ActionLock.unlock();
-				}
-			}
-		});
-		
-		this.buttonClose = new Button(this.compositeButtons, SWT.PUSH);
-		this.buttonClose.setLayoutData(makeGridData(SWT.FILL, SWT.BOTTOM,false));
-		this.buttonClose.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				MarkerList.this.dialog.dispose();
-			}
-		});
-		
-		this.loadIcons();
-		this.loadProperties(false);
-		
-		this.addListeners();
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				removeListeners();
-			}
-		});
-		this.dialog.setDefaultButton( this.buttonGo );
-		
-		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-	
-	public void addListeners(){
-		TuxGuitar.instance().getIconManager().addLoader(this);
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
-	}
-	
-	public void removeListeners(){
-		TuxGuitar.instance().getIconManager().removeLoader(this);
-		TuxGuitar.instance().getLanguageManager().removeLoader(this);
-		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
-	}
-	
-	public void dispose(){
-		if(!isDisposed()){
-			this.dialog.dispose();
-		}
-	}
-	
-	public void update(){
-		this.update(false);
-	}
-	
-	public void update(final boolean keepSelection){
-		if(!isDisposed()){
-			new SyncThread(new Runnable() {
-				public void run() {
-					if(!isDisposed()){
-						loadTableItems(keepSelection);
-					}
-				}
-			}).start();
-		}
-	}
-	
-	private GridData makeGridData(int horizontalAlignment,int verticalAlignment,boolean grabExcessVerticalSpace){
-		GridData data = new GridData();
-		data.horizontalAlignment = horizontalAlignment;
-		data.verticalAlignment = verticalAlignment;
-		data.grabExcessHorizontalSpace = true;
-		data.grabExcessVerticalSpace = grabExcessVerticalSpace;
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		
-		return data;
-	}
-	
-	protected void loadTableItems(boolean keepSelection){
-		int itemSelected = (keepSelection ? this.table.getSelectionIndex() : -1 );
-		
-		this.table.removeAll();
-		this.markers = TuxGuitar.instance().getSongManager().getMarkers();
-		
-		Iterator it = this.markers.iterator();
-		while (it.hasNext()) {
-			TGMarker marker = (TGMarker) it.next();
-			
-			TableItem item = new TableItem(this.table, SWT.NONE);
-			item.setText(new String[] { Integer.toString(marker.getMeasure()),marker.getTitle() });
-		}
-		
-		if(itemSelected >= 0 && itemSelected < this.markers.size()){
-			this.table.select(itemSelected);
-		}
-	}
-	
-	protected TGMarker getSelectedMarker(){
-		int itemSelected = this.table.getSelectionIndex();
-		if(itemSelected >= 0 && itemSelected < this.markers.size()){
-			return (TGMarker)this.markers.get(itemSelected);
-		}
-		return null;
-	}
-	
-	public boolean isDisposed(){
-		return (this.dialog == null || this.dialog.isDisposed());
-	}
-	
-	public void loadIcons() {
-		if(!isDisposed()){
-			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-		}
-	}
-	
-	public void loadProperties() {
-		this.loadProperties(true);
-	}
-	
-	public void loadProperties(boolean layout) {
-		if(!isDisposed()){
-			this.dialog.setText(TuxGuitar.getProperty("marker.list"));
-			this.measureColumn.setText(TuxGuitar.getProperty("measure"));
-			this.titleColumn.setText(TuxGuitar.getProperty("title"));
-			this.buttonAdd.setText(TuxGuitar.getProperty("add"));
-			this.buttonEdit.setText(TuxGuitar.getProperty("edit"));
-			this.buttonDelete.setText(TuxGuitar.getProperty("remove"));
-			this.buttonGo.setText(TuxGuitar.getProperty("go"));
-			this.buttonClose.setText(TuxGuitar.getProperty("close"));
-			
-			if(layout){
-				this.table.layout();
-				this.compositeTable.layout();
-				this.compositeButtons.layout();
-				this.dialog.pack(true);
-			}
-		}
-	}
-	
-	public void doUpdate(int type) {
-		if( type ==  TGUpdateListener.SONG_LOADED ){
-			this.update();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerNavigator.java b/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerNavigator.java
deleted file mode 100644
index f8f5118..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/marker/MarkerNavigator.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package org.herac.tuxguitar.gui.marker;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGMarker;
-
-public class MarkerNavigator {
-	
-	public MarkerNavigator(){
-		super();
-	}
-	
-	public void goToSelectedMarker(TGMarker marker){
-		if(marker != null){
-			Caret caret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-			TGSongManager manager = TuxGuitar.instance().getSongManager();
-			TGTrackImpl track = caret.getTrack();
-			if(track != null){
-				TGMeasureImpl measure = (TGMeasureImpl)manager.getTrackManager().getMeasure(track,marker.getMeasure());
-				if(measure != null){
-					TGBeat beat = manager.getMeasureManager().getFirstBeat(measure.getBeats());
-					if(beat != null){
-						caret.moveTo(track, measure,beat,caret.getStringNumber());
-					}
-				}
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixer.java b/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixer.java
deleted file mode 100644
index 58a56aa..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixer.java
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * Created on 20-mar-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.mixer;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Scale;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGUpdateListener;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-public class TGMixer implements TGUpdateListener,IconLoader,LanguageLoader{
-	
-	public static final int MUTE = 0x01;
-	public static final int SOLO = 0x02;
-	public static final int VOLUME = 0x04;
-	public static final int BALANCE = 0x08;
-	public static final int CHORUS = 0x10;
-	public static final int REVERB = 0x20;
-	public static final int PHASER = 0x40;
-	public static final int TREMOLO = 0x80;
-	public static final int CHANNEL = 0x100;
-	
-	public static final int CHANGE_ALL = (MUTE | SOLO | VOLUME | BALANCE | CHORUS | REVERB | PHASER | TREMOLO | CHANNEL);
-	
-	protected Shell dialog;
-	private List tracks;
-	private Scale volumeScale;
-	private Label volumeValueLabel;
-	private Label volumeValueTitleLabel;
-	private String volumeTip;
-	private int volumeValue;
-	
-	public TGMixer() {
-		this.tracks = new ArrayList();
-	}
-	
-	public void show() {
-		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM);
-		this.loadData();
-		
-		this.addListeners();
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				removeListeners();
-				TuxGuitar.instance().updateCache(true);
-			}
-		});
-		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER );
-	}
-	
-	public void addListeners(){
-		TuxGuitar.instance().getIconManager().addLoader(this);
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
-	}
-	
-	public void removeListeners(){
-		TuxGuitar.instance().getIconManager().removeLoader(this);
-		TuxGuitar.instance().getLanguageManager().removeLoader(this);
-		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
-	}
-	
-	protected void loadData(){
-		this.tracks.clear();
-		Iterator it = TuxGuitar.instance().getSongManager().getSong().getTracks();
-		while (it.hasNext()) {
-			TGTrack track = (TGTrack) it.next();
-			TGMixerTrack trackMixer = new TGMixerTrack(this,track);
-			trackMixer.init(this.dialog);
-			this.tracks.add(trackMixer);
-		}
-		Composite composite = new Composite(this.dialog, SWT.BORDER);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true));
-		
-		this.volumeValue = -1;
-		
-		this.volumeScale = new Scale(composite, SWT.VERTICAL);
-		this.volumeScale.setMaximum(10);
-		this.volumeScale.setMinimum(0);
-		this.volumeScale.setIncrement(1);
-		this.volumeScale.setPageIncrement(1);
-		this.volumeScale.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true));
-		
-		Label separator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
-		separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
-		
-		Composite volumeValueComposite = new Composite(composite, SWT.NONE);
-		volumeValueComposite.setLayout(new GridLayout(2,false));
-		
-		this.volumeValueTitleLabel = new Label(volumeValueComposite, SWT.NONE);
-		
-		this.volumeValueLabel = new Label(volumeValueComposite, SWT.CENTER);
-		this.volumeValueLabel.setLayoutData(getVolumeValueLabelData());
-		
-		this.volumeScale.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event event) {
-				changeVolume();
-			}
-		});
-		
-		this.loadVolume();
-		this.loadIcons();
-		this.loadProperties(false);
-		
-		this.dialog.setLayout(getLayout(this.dialog.getChildren().length));
-		this.dialog.pack();
-	}
-	
-	private GridLayout getLayout(int columns){
-		GridLayout layout = new GridLayout(columns, false);
-		layout.verticalSpacing = 1;
-		layout.horizontalSpacing = 1;
-		return layout;
-	}
-	
-	protected void changeVolume(){
-		int volume = (short)(TGMixer.this.volumeScale.getMaximum() - TGMixer.this.volumeScale.getSelection());
-		if(volume != TuxGuitar.instance().getPlayer().getVolume()){
-			TuxGuitar.instance().getPlayer().setVolume(volume);
-			this.volumeScale.setToolTipText(TGMixer.this.volumeTip + ": " + TuxGuitar.instance().getPlayer().getVolume());
-			this.volumeValueLabel.setText(Integer.toString(TGMixer.this.volumeScale.getMaximum() - TGMixer.this.volumeScale.getSelection()));
-			this.volumeValue = volume;
-		}
-	}
-	
-	protected void loadVolume(){
-		int volume = TuxGuitar.instance().getPlayer().getVolume();
-		if(this.volumeValue != volume){
-			this.volumeScale.setSelection(this.volumeScale.getMaximum() - TuxGuitar.instance().getPlayer().getVolume());
-			this.volumeValueLabel.setText(Integer.toString(this.volumeScale.getMaximum() - this.volumeScale.getSelection()));
-			this.volumeValue = volume;
-		}
-	}
-	
-	private GridData getVolumeValueLabelData(){
-		GridData data = new GridData(SWT.CENTER,SWT.NONE,true,false);
-		data.minimumWidth = 40;
-		return data;
-	}
-	
-	protected void clear(){
-		Control[] controls = this.dialog.getChildren();
-		for(int i = 0;i < controls.length;i++){
-			controls[i].dispose();
-		}
-	}
-	
-	public boolean isDisposed() {
-		return (this.dialog == null || this.dialog.isDisposed());
-	}
-	
-	public synchronized void fireChanges(TGChannel channel,int type){
-		Iterator it = this.tracks.iterator();
-		while(it.hasNext()){
-			TGMixerTrack mixer = (TGMixerTrack)it.next();
-			if(mixer.getTrack().getChannel().getChannel() == channel.getChannel()){
-				channel.copy(mixer.getTrack().getChannel());
-			}
-			mixer.fireChanges(type);
-		}
-		if (TuxGuitar.instance().getPlayer().isRunning()) {
-			TuxGuitar.instance().getPlayer().updateControllers();
-		}
-	}
-	
-	public synchronized void loadProperties(){
-		this.loadProperties(true);
-	}
-	
-	public synchronized void loadProperties(boolean pack){
-		if(!isDisposed()){
-			Iterator it = this.tracks.iterator();
-			while(it.hasNext()){
-				TGMixerTrack mixer = (TGMixerTrack)it.next();
-				mixer.loadProperties();
-			}
-			this.volumeValueTitleLabel.setText(TuxGuitar.getProperty("mixer.volume") + ":");
-			this.volumeTip = TuxGuitar.getProperty("mixer.volume");
-			this.volumeScale.setToolTipText(this.volumeTip + ": " + TuxGuitar.instance().getPlayer().getVolume());
-			this.dialog.setText(TuxGuitar.getProperty("mixer"));
-			if( pack ){
-				this.dialog.pack();
-				this.dialog.layout(true,true);
-				this.dialog.redraw();
-			}
-		}
-	}
-	
-	public synchronized void loadIcons(){
-		if(!isDisposed()){
-			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-		}
-	}
-	
-	public synchronized void updateItems(){
-		if(!isDisposed()){
-			Iterator it = this.tracks.iterator();
-			while(it.hasNext()){
-				TGMixerTrack mixer = (TGMixerTrack)it.next();
-				mixer.updateItems();
-			}
-		}
-	}
-	
-	public synchronized void updateValues(){
-		if(!isDisposed()){
-			this.loadVolume();
-			
-			Iterator it = this.tracks.iterator();
-			while(it.hasNext()){
-				TGMixerTrack mixer = (TGMixerTrack)it.next();
-				mixer.fireChanges(CHANGE_ALL);
-			}
-		}
-	}
-	
-	public synchronized void update(){
-		if(!isDisposed()){
-			new SyncThread(new Runnable() {
-				public void run() {
-					if(!isDisposed()){
-						TGMixer.this.clear();
-						TGMixer.this.loadData();
-						TGMixer.this.dialog.layout(true,true);
-						TGMixer.this.dialog.redraw();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	public synchronized void dispose() {
-		if(!isDisposed()){
-			this.dialog.dispose();
-		}
-	}
-
-	public void doUpdate(int type) {
-		if( type == TGUpdateListener.SELECTION ){
-			this.updateItems();
-		}else if( type == TGUpdateListener.SONG_LOADED ){
-			this.update();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixerTrack.java b/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixerTrack.java
deleted file mode 100644
index 8fcc7ab..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixerTrack.java
+++ /dev/null
@@ -1,393 +0,0 @@
-package org.herac.tuxguitar.gui.mixer;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.ShellAdapter;
-import org.eclipse.swt.events.ShellEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Scale;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackChannel;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackSoloMute;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class TGMixerTrack {
-	
-	protected TGTrack track;
-	protected TGMixer mixer;
-	protected TGMixerTrackChannel mixerChannel;
-	
-	protected Button checkSolo;
-	protected Button checkMute;
-	
-	private TGMixerScale scaleVolume;
-	private TGMixerScale scaleBalance;
-	private TGMixerScalePopup scaleChorus;
-	private TGMixerScalePopup scaleReverb;
-	private TGMixerScalePopup scalePhaser;
-	private TGMixerScalePopup scaleTremolo;
-	
-	private Label volumeValueLabel;
-	private Label volumeValueTitleLabel;
-	
-	public TGMixerTrack(TGMixer mixer,TGTrack track){
-		this.mixer = mixer;
-		this.track = track;
-	}
-	
-	public void init(final Composite parent) {
-		final Composite composite = new Composite(parent, SWT.BORDER);
-		composite.setLayout(new GridLayout(1, true));
-		composite.setLayoutData(new GridData(SWT.CENTER,SWT.FILL,true,true));
-		
-		this.mixerChannel = new TGMixerTrackChannel(this);
-		this.mixerChannel.init(composite);
-		
-		this.checkSolo = new Button(composite,SWT.CHECK);
-		this.checkSolo.setSelection(TGMixerTrack.this.track.isSolo());
-		this.checkSolo.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				TGTrack track = TGMixerTrack.this.track;
-				
-				UndoableTrackSoloMute undoable = UndoableTrackSoloMute.startUndo(track);
-				TuxGuitar.instance().getSongManager().getTrackManager().changeSolo(track,TGMixerTrack.this.checkSolo.getSelection());
-				TGMixerTrack.this.mixer.fireChanges(track.getChannel(),TGMixer.SOLO);
-				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(track));
-				TuxGuitar.instance().updateCache(true);
-			}
-		});
-		this.checkMute = new Button(composite,SWT.CHECK);
-		this.checkMute.setSelection(TGMixerTrack.this.track.isMute());
-		this.checkMute.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				TGTrack track = TGMixerTrack.this.track;
-				
-				UndoableTrackSoloMute undoable = UndoableTrackSoloMute.startUndo(track);
-				TuxGuitar.instance().getSongManager().getTrackManager().changeMute(track,TGMixerTrack.this.checkMute.getSelection());
-				TGMixerTrack.this.mixer.fireChanges(track.getChannel(),TGMixer.MUTE);
-				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo(track));
-				TuxGuitar.instance().updateCache(true);
-			}
-		});
-		
-		new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR).setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,false));
-		
-		Composite effects = new Composite(composite, SWT.NONE);
-		effects.setLayout(new GridLayout(4,false));
-		effects.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		
-		this.scaleChorus = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.CHORUS, getVerticalScaleData());
-		this.scaleChorus.setSelection(  this.track.getChannel().getChorus());
-		
-		this.scaleReverb = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.REVERB, getVerticalScaleData());
-		this.scaleReverb.setSelection(  this.track.getChannel().getReverb());
-		
-		this.scalePhaser = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.PHASER, getVerticalScaleData());
-		this.scalePhaser.setSelection(  this.track.getChannel().getPhaser());
-		
-		this.scaleTremolo = new TGMixerScalePopup(effects, SWT.VERTICAL, 64, TGMixer.TREMOLO, getVerticalScaleData());
-		this.scaleTremolo.setSelection(  this.track.getChannel().getTremolo());
-		
-		new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR).setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,false));
-		
-		this.scaleBalance = new TGMixerScale(composite, SWT.HORIZONTAL, 64, TGMixer.BALANCE, getHorizontalScaleData());
-		this.scaleBalance.setSelection(this.track.getChannel().getBalance());
-		
-		this.scaleVolume = new TGMixerScale(composite, SWT.VERTICAL, 16, TGMixer.VOLUME, new GridData(SWT.CENTER,SWT.FILL,true,true));
-		this.scaleVolume.setSelection(  this.track.getChannel().getVolume());
-		
-		Label separator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
-		separator.setLayoutData(new GridData(SWT.FILL,SWT.BOTTOM,true,false));
-		
-		Composite volumeValueComposite = new Composite(composite, SWT.NONE);
-		volumeValueComposite.setLayout(new GridLayout(2,false));
-		
-		this.volumeValueTitleLabel = new Label(volumeValueComposite, SWT.LEFT);
-		this.volumeValueLabel = new Label(volumeValueComposite, SWT.CENTER);
-		this.volumeValueLabel.setLayoutData(getVolumeValueLabelData());
-		this.volumeValueLabel.setText(Integer.toString(this.track.getChannel().getVolume()));
-	}
-	
-	private GridData getHorizontalScaleData(){
-		GridData data = new GridData(SWT.CENTER,SWT.NONE,false,true);
-		data.widthHint = 80;
-		return data;
-	}
-	
-	private GridData getVerticalScaleData(){
-		GridData data = new GridData(SWT.CENTER,SWT.FILL,false,true);
-		data.heightHint = 65;
-		return data;
-	}
-	
-	private GridData getVolumeValueLabelData(){
-		GridData data = new GridData(SWT.CENTER,SWT.NONE,true,false);
-		data.minimumWidth = 40;
-		return data;
-	}
-	
-	public void fireChanges(int type){
-		if((type & TGMixer.SOLO) != 0 || (type & TGMixer.MUTE) != 0){
-			this.checkSolo.setSelection(this.track.isSolo());
-			this.checkMute.setSelection(this.track.isMute());
-		}
-		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.VOLUME) != 0){
-			int value = this.track.getChannel().getVolume();
-			this.scaleVolume.setSelection( ( value) );
-			this.volumeValueLabel.setText(Integer.toString( value ));
-		}
-		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.BALANCE) != 0){
-			int value = this.track.getChannel().getBalance();
-			this.scaleBalance.setSelection(value);
-		}
-		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.CHORUS) != 0){
-			int value = this.track.getChannel().getChorus();
-			this.scaleChorus.setSelection( ( value) );
-		}
-		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.REVERB) != 0){
-			int value = this.track.getChannel().getReverb();
-			this.scaleReverb.setSelection( ( value) );
-		}
-		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.PHASER) != 0){
-			int value = this.track.getChannel().getPhaser();
-			this.scalePhaser.setSelection( ( value) );
-		}
-		if((type & TGMixer.CHANNEL) != 0 || (type & TGMixer.TREMOLO) != 0){
-			int value = this.track.getChannel().getTremolo();
-			this.scaleTremolo.setSelection( ( value) );
-		}
-		if((type & TGMixer.CHANNEL) != 0){
-			this.mixerChannel.updateItems(true);
-		}
-	}
-	
-	public void loadProperties(){
-		this.checkSolo.setText(TuxGuitar.getProperty("mixer.track.solo"));
-		this.checkMute.setText(TuxGuitar.getProperty("mixer.track.mute"));
-		this.volumeValueTitleLabel.setText(TuxGuitar.getProperty("mixer.channel.volume") + ":");
-		
-		this.scaleVolume.setText(TuxGuitar.getProperty("mixer.channel.volume"));
-		this.scaleBalance.setText(TuxGuitar.getProperty("mixer.channel.balance"));
-		this.scaleChorus.setText(TuxGuitar.getProperty("mixer.channel.chorus"));
-		this.scaleReverb.setText(TuxGuitar.getProperty("mixer.channel.reverb"));
-		this.scalePhaser.setText(TuxGuitar.getProperty("mixer.channel.phaser"));
-		this.scaleTremolo.setText(TuxGuitar.getProperty("mixer.channel.tremolo"));
-		
-		this.mixerChannel.updateItems(true);
-	}
-	
-	public void updateItems(){
-		this.mixerChannel.updateItems(false);
-	}
-	
-	public TGTrack getTrack(){
-		return this.track;
-	}
-	
-	public TGMixer getMixer(){
-		return this.mixer;
-	}
-	
-	protected void updateChannelValue(int type, int value){
-		if( (type & TGMixer.VOLUME) != 0 ){
-			TGMixerTrack.this.track.getChannel().setVolume( (short)value );
-		}
-		else if( (type & TGMixer.BALANCE) != 0 ){
-			TGMixerTrack.this.track.getChannel().setBalance( (short)value );
-		}
-		else if( (type & TGMixer.CHORUS) != 0 ){
-			TGMixerTrack.this.track.getChannel().setChorus( (short)value );
-		}
-		else if( (type & TGMixer.REVERB) != 0 ){
-			TGMixerTrack.this.track.getChannel().setReverb( (short)value );
-		}
-		else if( (type & TGMixer.PHASER) != 0 ){
-			TGMixerTrack.this.track.getChannel().setPhaser( (short)value );
-		}
-		else if( (type & TGMixer.TREMOLO) != 0 ){
-			TGMixerTrack.this.track.getChannel().setTremolo( (short)value );
-		}
-		this.mixer.fireChanges(TGMixerTrack.this.track.getChannel(), type);
-	}
-	
-	private class TGMixerScale {
-		
-		private int type;
-		private int value;
-		private boolean inverted;
-		private Scale scale;
-		private String text;
-		protected UndoableTrackChannel undoable;
-		
-		public TGMixerScale(Composite parent, int style, int pageIncrement, int type, Object layoutData){
-			this.init(parent, style, pageIncrement, type, layoutData);
-		}
-		
-		public void init(Composite parent, int style, int pageIncrement, int type, Object layoutData){
-			this.scale = new Scale(parent, style);
-			this.scale.setMaximum(127);
-			this.scale.setMinimum(0);
-			this.scale.setIncrement(1);
-			this.scale.setPageIncrement(pageIncrement);
-			this.scale.setLayoutData(layoutData);
-			this.type = type;
-			this.value = -1;
-			this.inverted =  ((style & SWT.VERTICAL) != 0 );
-			this.addDefaultListeners();
-		}
-		
-		public void addDefaultListeners(){
-			this.scale.addListener(SWT.Selection, new Listener() {
-				public synchronized void handleEvent(Event event) {
-					TGMixerScale.this.updateValue();
-					TGMixerTrack.this.updateChannelValue(getType(), getSelection());
-				}
-			});
-			this.scale.addMouseListener(new MouseAdapter() {
-				public void mouseDown(MouseEvent arg0) {
-					TGMixerScale.this.undoable = UndoableTrackChannel.startUndo();
-				}
-				public void mouseUp(MouseEvent arg0) {
-					if(TGMixerScale.this.undoable != null){
-						TuxGuitar.instance().getUndoableManager().addEdit(TGMixerScale.this.undoable.endUndo());
-						TuxGuitar.instance().getFileHistory().setUnsavedFile();
-						TuxGuitar.instance().updateCache(true);
-						TGMixerScale.this.undoable = null;
-					}
-				}
-			});
-		}
-		
-		public void updateValue(){
-			this.setSelection( ( this.inverted ? 127 - this.scale.getSelection() : this.scale.getSelection() ) );
-		}
-		
-		public int getType(){
-			return this.type;
-		}
-		
-		public int getSelection(){
-			if(this.value < 0){
-				this.updateValue();
-			}
-			return this.value;
-		}
-		
-		public void setSelection(int value){
-			if(value != this.value){
-				this.value = value;
-				this.scale.setSelection( ( this.inverted ? 127 - this.value : this.value ) );
-				this.updateToolTipValue();
-			}
-		}
-		
-		public void updateToolTipValue(){
-			if(this.text != null){
-				this.scale.setToolTipText( this.text + ": " + this.value );
-			}
-		}
-		
-		public void setText(String text){
-			this.text = text;
-			this.updateToolTipValue();
-		}
-		
-		public String getText(){
-			return this.text;
-		}
-	}
-	
-	private class TGMixerScalePopup extends TGMixerScale{
-		
-		private Shell shell;
-		private Composite composite;
-		private Button item;
-		
-		public TGMixerScalePopup(Composite parent, int style, int pageIncrement, int type, Object layoutData){
-			super(parent, style, pageIncrement, type, layoutData);
-		}
-		
-		public void init(Composite parent, int style, int pageIncrement, int type, Object layoutData){
-			this.shell = new Shell( parent.getShell(), SWT.NO_TRIM);
-			this.shell.setVisible(false);
-			this.shell.setLayout(getGridLayout());
-			this.shell.addShellListener(new ShellAdapter() {
-				public void shellDeactivated(ShellEvent e) {
-					hideShell();
-				}
-				public void shellClosed(ShellEvent e) {
-					e.doit = false;
-					hideShell();
-				}
-			});
-			
-			this.composite = new Composite(this.shell, SWT.BORDER);
-			this.composite.setLayout(getGridLayout());
-			this.composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-			
-			this.item = new Button(parent, SWT.PUSH);
-			this.item.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					showSelect();
-				}
-			});
-			
-			super.init(this.composite, style, pageIncrement, type, layoutData);
-		}
-		
-		private GridLayout getGridLayout(){
-			GridLayout layout = new GridLayout();
-			layout.horizontalSpacing = 0;
-			layout.verticalSpacing = 0;
-			layout.marginWidth = 0;
-			layout.marginHeight = 0;
-			layout.marginTop = 0;
-			layout.marginBottom = 0;
-			layout.marginLeft = 0;
-			layout.marginHeight = 0;
-			return layout;
-		}
-		
-		public void updateToolTipValue(){
-			super.updateToolTipValue();
-			if(this.getText() != null){
-				this.item.setToolTipText( this.getText() + ": " + this.getSelection() );
-			}
-		}
-		
-		public void setText(String text){
-			super.setText(text);
-			if(this.getText() != null && this.getText().length() > 0){
-				this.item.setText( this.getText().substring(0,1) );
-			}
-		}
-		
-		public void showSelect() {
-			if(!this.shell.isVisible()){
-				Rectangle bounds = this.item.getBounds();
-				Point location = this.item.getParent().toDisplay(new Point(bounds.x, bounds.y));
-				
-				this.shell.pack();
-				this.shell.setLocation( (location.x + (bounds.width / 2)) - (this.shell.getSize().x / 2), location.y + bounds.height);
-				this.shell.setVisible(true);
-				this.shell.setActive();
-			}
-		}
-		
-		public void hideShell() {
-			this.shell.setVisible(false);
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixerTrackChannel.java b/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixerTrackChannel.java
deleted file mode 100644
index 17ae991..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/mixer/TGMixerTrackChannel.java
+++ /dev/null
@@ -1,206 +0,0 @@
-package org.herac.tuxguitar.gui.mixer;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.undoables.track.UndoableTrackChannel;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class TGMixerTrackChannel {
-	
-	private TGMixerTrack mixer;
-	protected Combo normalChannel;
-	protected Combo effectChannel;
-	protected ChannelList normalChannels;
-	protected ChannelList effectChannels;
-	
-	public TGMixerTrackChannel(TGMixerTrack mixer){
-		this.mixer = mixer;
-	}
-	
-	protected TGTrack getTrack(){
-		return this.mixer.getTrack();
-	}
-	
-	protected TGChannel getChannel(){
-		return this.mixer.getTrack().getChannel();
-	}
-	
-	public void init(Composite parent){
-		this.normalChannels = new ChannelList();
-		this.normalChannel = new Combo(parent,SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.normalChannel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		
-		this.effectChannels = new ChannelList();
-		this.effectChannel = new Combo(parent,SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.effectChannel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		
-		this.normalChannel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				UndoableTrackChannel undoable = UndoableTrackChannel.startUndo();
-				
-				TGChannel channel = getTrack().getChannel();
-				boolean[] usedChannels = TuxGuitar.instance().getSongManager().getUsedChannels();
-				int idx = TGMixerTrackChannel.this.normalChannels.getChannel(TGMixerTrackChannel.this.normalChannel.getSelectionIndex());
-				if(!usedChannels[idx]){
-					channel.setChannel((short)idx);
-					channel.setEffectChannel(channel.getChannel());
-				}else{
-					TuxGuitar.instance().getSongManager().getUsedChannel(idx).copy(channel);
-				}
-				fireChannelChange(channel);
-				
-				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				TuxGuitar.instance().getTable().fireUpdate(false);
-				TuxGuitar.instance().updateCache(true);
-			}
-		});
-		
-		this.effectChannel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				UndoableTrackChannel undoable = UndoableTrackChannel.startUndo();
-				
-				TGChannel channel = getTrack().getChannel();
-				int idx = TGMixerTrackChannel.this.effectChannels.getChannel(TGMixerTrackChannel.this.effectChannel.getSelectionIndex());
-				channel.setEffectChannel((short)idx);
-				fireChannelChange(channel);
-				
-				TuxGuitar.instance().getUndoableManager().addEdit(undoable.endUndo());
-				TuxGuitar.instance().getFileHistory().setUnsavedFile();
-				TuxGuitar.instance().updateCache(true);
-			}
-		});
-		
-		this.updateItems(true);
-	}
-	
-	public void updateItems(boolean reload){
-		if(reload){
-			this.updateNormalChannel();
-			this.updateEffectChannel();
-		}
-		this.normalChannel.setEnabled(!TuxGuitar.instance().getPlayer().isRunning());
-		this.effectChannel.setEnabled(!TuxGuitar.instance().getPlayer().isRunning());
-	}
-	
-	private void updateNormalChannel(){
-		this.normalChannel.removeAll();
-		this.normalChannels.clear();
-		
-		boolean[] usedChannels = TuxGuitar.instance().getSongManager().getUsedChannels();
-		boolean[] usedEffectChannels = TuxGuitar.instance().getSongManager().getUsedEffectChannels();
-		if(getChannel().isPercussionChannel()){
-			this.normalChannel.add(Integer.toString(TGChannel.DEFAULT_PERCUSSION_CHANNEL));
-			this.normalChannel.select(0);
-			this.normalChannels.addChannel(0,0);
-		}else{
-			int itemIndex = 0;
-			for(int i = 0;i < usedChannels.length;i++){
-				if(!TGChannel.isPercussionChannel(i)){
-					if(!usedEffectChannels[i] || (usedEffectChannels[i] && usedChannels[i]) || (getChannel().getChannel() == i && getChannel().getEffectChannel() == getChannel().getChannel())){
-						String itemName = new String();
-						if(usedChannels[i] && (getChannel().getChannel() != i || TuxGuitar.instance().getSongManager().countTracksForChannel(i) > 1)){
-							itemName = i + " " + TuxGuitar.getProperty("mixer.channel.link");
-						}else{
-							itemName =  i + " " + TuxGuitar.getProperty("mixer.channel.free");
-						}
-						this.normalChannel.add(itemName);
-						
-						if(i == getChannel().getChannel()){
-							this.normalChannel.select(itemIndex);
-						}
-						this.normalChannels.addChannel(itemIndex,i);
-						itemIndex ++;
-					}
-				}
-			}
-		}
-	}
-	
-	private void updateEffectChannel(){
-		this.effectChannel.removeAll();
-		this.effectChannels.clear();
-		
-		boolean[] usedChannels = TuxGuitar.instance().getSongManager().getUsedChannels();
-		boolean[] usedEffectChannels = TuxGuitar.instance().getSongManager().getUsedEffectChannels();
-		if(getChannel().isPercussionChannel()){
-			this.effectChannel.add(Integer.toString(TGChannel.DEFAULT_PERCUSSION_CHANNEL));
-			this.effectChannel.select(0);
-			this.effectChannels.addChannel(0,0);
-		}else{
-			int itemIndex = 0;
-			for(int i = 0;i < usedEffectChannels.length;i++){
-				if(!TGChannel.isPercussionChannel(i)){
-					if((!usedEffectChannels[i] || getChannel().getEffectChannel() == i) && (!usedChannels[i] || i == getChannel().getChannel())){
-						this.effectChannel.add(Integer.toString(i));
-						
-						if(i == getChannel().getEffectChannel()){
-							this.effectChannel.select(itemIndex);
-						}
-						this.effectChannels.addChannel(itemIndex,i);
-						itemIndex ++;
-					}
-				}
-			}
-		}
-	}
-	
-	public void fireChannelChange(TGChannel channel){
-		this.mixer.getMixer().fireChanges(channel,TGMixer.CHANNEL);
-	}
-	
-	private class ChannelList{
-		private List channelIndexs;
-		
-		public ChannelList(){
-			this.channelIndexs = new ArrayList();
-		}
-		
-		public void addChannel(int index,int channel){
-			this.channelIndexs.add(new ChannelIndex(index,channel));
-		}
-		
-		public int getChannel(int index){
-			Iterator it = this.channelIndexs.iterator();
-			while (it.hasNext()) {
-				ChannelIndex channelIndex = (ChannelIndex) it.next();
-				if(index == channelIndex.getIndex()){
-					return channelIndex.getChannel();
-				}
-			}
-			return -1;
-		}
-		
-		public void clear(){
-			this.channelIndexs.clear();
-		}
-	}
-	
-	private class ChannelIndex{
-		private int index;
-		private int channel;
-		
-		public ChannelIndex(int index,int channel){
-			this.index = index;
-			this.channel = channel;
-		}
-		
-		public int getChannel() {
-			return this.channel;
-		}
-		
-		public int getIndex() {
-			return this.index;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintDocument.java b/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintDocument.java
deleted file mode 100644
index 3273c68..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintDocument.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.herac.tuxguitar.gui.printer;
-
-import org.eclipse.swt.graphics.Rectangle;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-
-public interface PrintDocument{
-	
-	public void start();
-	
-	public void finish();
-	
-	public void pageStart();
-	
-	public void pageFinish();
-	
-	public boolean isPaintable(int page);
-	
-	public TGPainter getPainter();
-	
-	public Rectangle getBounds();
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintPreview.java b/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintPreview.java
deleted file mode 100644
index 7e9b542..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintPreview.java
+++ /dev/null
@@ -1,185 +0,0 @@
-package org.herac.tuxguitar.gui.printer;
-
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingConstants;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-public class PrintPreview{
-	private static final int SCROLL_INCREMENT = 50;
-	private static final int MARGIN_TOP = 20;
-	private static final int MARGIN_BOTTOM = 40;
-	private static final int MARGIN_LEFT = 50;
-	private static final int MARGIN_RIGHT = 20;
-	
-	protected Shell dialog;
-	protected Composite previewComposite;
-	protected Composite pageComposite;
-	protected Text currentText;
-	protected Button previous;
-	protected Button next;
-	protected Rectangle bounds;
-	protected List pages;
-	protected int currentPage;
-	
-	public PrintPreview(List pages,Rectangle bounds){
-		this.pages = pages;
-		this.bounds = bounds;
-	}
-	
-	public void showPreview(Shell parent){
-		this.dialog = DialogUtils.newDialog(parent,SWT.SHELL_TRIM | SWT.APPLICATION_MODAL );
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setText(TuxGuitar.getProperty("print.preview"));
-		
-		this.initToolBar();
-		this.initPreviewComposite();
-		this.changePage(0);
-		
-		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_MAXIMIZED | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	private void initToolBar(){
-		Composite composite = new Composite(this.dialog,SWT.NONE);
-		composite.setLayout(new GridLayout(5,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,false));
-		
-		this.previous = new Button(composite,SWT.ARROW | SWT.LEFT);
-		this.currentText = new Text(composite,SWT.BORDER);
-		this.currentText.setLayoutData(new GridData(25,SWT.DEFAULT));
-		this.next = new Button(composite,SWT.ARROW | SWT.RIGHT);
-		Label maxPages = new Label(composite,SWT.NONE);
-		
-		Button close = new Button(composite,SWT.PUSH);
-		close.setLayoutData(getButtonData());
-		
-		this.currentText.addKeyListener(new KeyAdapter() {
-			public void keyReleased(KeyEvent e) {
-				if(e.keyCode == KeyBindingConstants.ENTER){
-					try{
-						Integer number = new Integer(PrintPreview.this.currentText.getText());
-						changePage(number.intValue() - 1);
-					}catch(NumberFormatException exception){
-						changePage(PrintPreview.this.currentPage);
-					}
-				}
-			}
-		});
-		this.previous.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(PrintPreview.this.currentPage >= 0){
-					changePage(PrintPreview.this.currentPage - 1);
-				}
-			}
-		});
-		this.next.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				if(PrintPreview.this.currentPage >= 0){
-					changePage(PrintPreview.this.currentPage + 1);
-				}
-			}
-		});
-		close.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				PrintPreview.this.dialog.dispose();
-			}
-		});
-		maxPages.setText(TuxGuitar.getProperty("print.preview.page-of") + " " + this.pages.size());
-		close.setText(TuxGuitar.getProperty("close"));
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.RIGHT, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private void initPreviewComposite(){
-		this.previewComposite = new Composite(this.dialog,SWT.BORDER | SWT.V_SCROLL);
-		this.previewComposite.setLayout(new GridLayout());
-		this.previewComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.previewComposite.setBackground(this.previewComposite.getDisplay().getSystemColor(SWT.COLOR_GRAY));
-		this.previewComposite.setFocus();
-		this.pageComposite = new Composite(this.previewComposite,SWT.BORDER | SWT.DOUBLE_BUFFERED);
-		this.pageComposite.setLayout(new GridLayout());
-		this.pageComposite.setBackground(this.previewComposite.getDisplay().getSystemColor(SWT.COLOR_WHITE));
-		this.pageComposite.addPaintListener(new PaintListener() {
-			public void paintControl(PaintEvent e) {
-				if(PrintPreview.this.currentPage >= 0){
-					updateScroll();
-					
-					int vScroll = PrintPreview.this.previewComposite.getVerticalBar().getSelection();
-					
-					TGPainter painter = new TGPainter(e.gc);
-					painter.drawImage((Image)PrintPreview.this.pages.get(PrintPreview.this.currentPage),MARGIN_LEFT,MARGIN_TOP - vScroll);
-				}
-			}
-		});
-		GridData pageData = new GridData();
-		pageData.horizontalAlignment = SWT.CENTER;
-		pageData.verticalAlignment = SWT.CENTER;
-		pageData.grabExcessHorizontalSpace = true;
-		pageData.grabExcessVerticalSpace = true;
-		pageData.widthHint = (this.bounds.width - this.bounds.x) + (MARGIN_LEFT + MARGIN_RIGHT);
-		pageData.heightHint = (this.bounds.height - this.bounds.y) + (MARGIN_TOP + MARGIN_BOTTOM);
-		this.pageComposite.setLayoutData(pageData);
-		this.previewComposite.getVerticalBar().setIncrement(SCROLL_INCREMENT);
-		this.previewComposite.getVerticalBar().addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				PrintPreview.this.pageComposite.redraw();
-			}
-		});
-	}
-	
-	protected void updateScroll(){
-		ScrollBar vBar = this.previewComposite.getVerticalBar();
-		Rectangle client = this.pageComposite.getClientArea();
-		vBar.setMaximum((this.bounds.height - this.bounds.y) + (MARGIN_TOP + MARGIN_BOTTOM));
-		vBar.setThumb(Math.min((this.bounds.height - this.bounds.y) + (MARGIN_TOP + MARGIN_BOTTOM), client.height));
-	}
-	
-	protected void changePage(int index){
-		if(!this.pages.isEmpty()){
-			int pageCount = this.pages.size();
-			if(index >= 0 && index < pageCount){
-				this.currentPage = index;
-				this.currentText.setText(Integer.toString(index + 1));
-				this.pageComposite.redraw();
-			}else if(this.currentPage >= 0 && this.currentPage < pageCount){
-				this.currentText.setText(Integer.toString(this.currentPage + 1 ));
-			}
-			this.previous.setEnabled(this.currentPage > 0);
-			this.next.setEnabled((this.currentPage + 1) < pageCount);
-			this.previewComposite.getVerticalBar().setSelection(0);
-			this.previewComposite.setFocus();
-		}else{
-			this.currentText.setEnabled(false);
-			this.previous.setEnabled(false);
-			this.next.setEnabled(false);
-		}
-		
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintStyles.java b/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintStyles.java
deleted file mode 100644
index 65bd389..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintStyles.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.herac.tuxguitar.gui.printer;
-
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-
-public class PrintStyles {
-	
-	private int trackNumber;
-	
-	private int fromMeasure;
-	
-	private int toMeasure;
-	
-	private int style;
-	
-	private boolean blackAndWhite;
-	
-	public PrintStyles() {
-		this(-1,-1,-1,ViewLayout.DISPLAY_TABLATURE, true);
-	}
-	
-	public PrintStyles(int trackNumber,int fromMeasure, int toMeasure, int style , boolean blackAndWhite) {
-		this.trackNumber = trackNumber;
-		this.fromMeasure = fromMeasure;
-		this.toMeasure = toMeasure;
-		this.style = style;
-		this.blackAndWhite = blackAndWhite;
-	}
-	
-	public int getFromMeasure() {
-		return this.fromMeasure;
-	}
-	
-	public void setFromMeasure(int fromMeasure) {
-		this.fromMeasure = fromMeasure;
-	}
-	
-	public int getStyle() {
-		return this.style;
-	}
-	
-	public void setStyle(int style) {
-		this.style = style;
-	}
-	
-	public int getToMeasure() {
-		return this.toMeasure;
-	}
-	
-	public void setToMeasure(int toMeasure) {
-		this.toMeasure = toMeasure;
-	}
-	
-	public int getTrackNumber() {
-		return this.trackNumber;
-	}
-	
-	public void setTrackNumber(int trackNumber) {
-		this.trackNumber = trackNumber;
-	}
-	
-	public boolean isBlackAndWhite() {
-		return this.blackAndWhite;
-	}
-	
-	public void setBlackAndWhite(boolean blackAndWhite) {
-		this.blackAndWhite = blackAndWhite;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintStylesDialog.java b/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintStylesDialog.java
deleted file mode 100644
index a3206a9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/printer/PrintStylesDialog.java
+++ /dev/null
@@ -1,190 +0,0 @@
-package org.herac.tuxguitar.gui.printer;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Spinner;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-public class PrintStylesDialog {
-
-	public static PrintStyles open(Shell shell) {
-		final PrintStyles styles = new PrintStyles();
-		final Shell dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("options"));
-		
-		//------------------TRACK SELECTION------------------
-		Group track = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		track.setLayout(new GridLayout(2,false));
-		track.setLayoutData(getGroupData());
-		track.setText(TuxGuitar.getProperty("track"));
-		
-		Label trackLabel = new Label(track, SWT.NULL);
-		trackLabel.setText(TuxGuitar.getProperty("track"));
-		
-		final Combo tracks = new Combo(track, SWT.DROP_DOWN | SWT.READ_ONLY);
-		tracks.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		for(int number = 1; number <= TuxGuitar.instance().getSongManager().getSong().countTracks(); number ++){
-			tracks.add(TuxGuitar.instance().getSongManager().getTrack(number).getName());
-		}
-		tracks.select(TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getTrack().getNumber() - 1);
-		
-		//------------------MEASURE RANGE------------------
-		Group range = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		range.setLayout(new GridLayout(2,false));
-		range.setLayoutData(getGroupData());
-		range.setText(TuxGuitar.getProperty("print.range"));
-		
-		final int minSelection = 1;
-		final int maxSelection = TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders();
-		
-		Label fromLabel = new Label(range, SWT.NULL);
-		fromLabel.setText(TuxGuitar.getProperty("edit.from"));
-		final Spinner fromSpinner = new Spinner(range, SWT.BORDER);
-		fromSpinner.setLayoutData(getSpinnerData());
-		fromSpinner.setMaximum(maxSelection);
-		fromSpinner.setMinimum(minSelection);
-		fromSpinner.setSelection(minSelection);
-		
-		Label toLabel = new Label(range, SWT.NULL);
-		toLabel.setText(TuxGuitar.getProperty("edit.to"));
-		final Spinner toSpinner = new Spinner(range, SWT.BORDER);
-		toSpinner.setLayoutData(getSpinnerData());
-		toSpinner.setMinimum(minSelection);
-		toSpinner.setMaximum(maxSelection);
-		toSpinner.setSelection(maxSelection);
-		
-		fromSpinner.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				int fromSelection = fromSpinner.getSelection();
-				int toSelection = toSpinner.getSelection();
-				
-				if(fromSelection < minSelection){
-					fromSpinner.setSelection(minSelection);
-				}else if(fromSelection > toSelection){
-					fromSpinner.setSelection(toSelection);
-				}
-			}
-		});
-		toSpinner.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				int toSelection = toSpinner.getSelection();
-				int fromSelection = fromSpinner.getSelection();
-				if(toSelection < fromSelection){
-					toSpinner.setSelection(fromSelection);
-				}else if(toSelection > maxSelection){
-					toSpinner.setSelection(maxSelection);
-				}
-			}
-		});
-		//------------------CHECK OPTIONS--------------------
-		Group options = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		options.setLayout(new GridLayout());
-		options.setLayoutData(getGroupData());
-		options.setText(TuxGuitar.getProperty("options"));
-		
-		final Button tablatureEnabled = new Button(options,SWT.CHECK);
-		tablatureEnabled.setText(TuxGuitar.getProperty("export.tablature-enabled"));
-		tablatureEnabled.setSelection(true);
-		
-		final Button scoreEnabled = new Button(options,SWT.CHECK);
-		scoreEnabled.setText(TuxGuitar.getProperty("export.score-enabled"));
-		scoreEnabled.setSelection(true);
-		
-		final Button chordNameEnabled = new Button(options,SWT.CHECK);
-		chordNameEnabled.setText(TuxGuitar.getProperty("export.chord-name-enabled"));
-		chordNameEnabled.setSelection(true);
-		
-		final Button chordDiagramEnabled = new Button(options,SWT.CHECK);
-		chordDiagramEnabled.setText(TuxGuitar.getProperty("export.chord-diagram-enabled"));
-		chordDiagramEnabled.setSelection(true);
-		
-		final Button blackAndWhite = new Button(options,SWT.CHECK);
-		blackAndWhite.setText(TuxGuitar.getProperty("export.black-and-white"));
-		blackAndWhite.setSelection(true);
-		
-		tablatureEnabled.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				if(!tablatureEnabled.getSelection()){
-					scoreEnabled.setSelection(true);
-				}
-			}
-		});
-		scoreEnabled.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				if(!scoreEnabled.getSelection()){
-					tablatureEnabled.setSelection(true);
-				}
-			}
-		});
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				int style = 0;
-				style |= (scoreEnabled.getSelection() ? ViewLayout.DISPLAY_SCORE : 0);
-				style |= (tablatureEnabled.getSelection() ? ViewLayout.DISPLAY_TABLATURE : 0);
-				style |= (chordNameEnabled.getSelection() ? ViewLayout.DISPLAY_CHORD_NAME : 0);
-				style |= (chordDiagramEnabled.getSelection() ? ViewLayout.DISPLAY_CHORD_DIAGRAM : 0);
-				styles.setTrackNumber(tracks.getSelectionIndex() + 1);
-				styles.setFromMeasure(fromSpinner.getSelection());
-				styles.setToMeasure(toSpinner.getSelection());
-				styles.setBlackAndWhite(blackAndWhite.getSelection());
-				styles.setStyle(style);
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return ((styles.getTrackNumber() > 0)?styles:null);
-	}
-	
-	private static GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private static GridData getSpinnerData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 60;
-		return data;
-	}
-	
-	private static GridData getGroupData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 300;
-		return data;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigDefaults.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigDefaults.java
deleted file mode 100644
index 620eac0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigDefaults.java
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
- * Created on 27-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.system.config;
-
-import java.io.InputStream;
-import java.util.Properties;
-
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.fretboard.FretBoardConfig;
-import org.herac.tuxguitar.gui.editors.tab.edit.EditorKit;
-import org.herac.tuxguitar.gui.editors.tab.layout.ViewLayout;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGConfigDefaults{
-	
-	private static final String DEFAULT_FILE = "config.dist";
-	
-	private static final String DEFAULT_FONT_NAME = getDefaultFontName();
-	
-	private Properties properties;
-	
-	public TGConfigDefaults(){
-		this.properties = new Properties();
-		this.loadDefaults();
-		this.loadDefaultFile();
-	}
-	
-	public void loadDefaultFile() {
-		try {
-			InputStream is = TGFileUtils.getResourceAsStream(DEFAULT_FILE);
-			if(is != null){
-				this.properties.load(is);
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-	
-	private void loadDefaults(){
-		this.loadProperty(TGConfigKeys.SKIN,"Lavender");
-		this.loadProperty(TGConfigKeys.WINDOW_TITLE,"${appname} - ${filename}");
-		this.loadProperty(TGConfigKeys.SHOW_SPLASH,true);
-		this.loadProperty(TGConfigKeys.MAXIMIZED,false);
-		this.loadProperty(TGConfigKeys.WIDTH,800);
-		this.loadProperty(TGConfigKeys.HEIGHT,600);
-		this.loadProperty(TGConfigKeys.SHOW_MIXER,false);
-		this.loadProperty(TGConfigKeys.SHOW_TRANSPORT,false);
-		this.loadProperty(TGConfigKeys.SHOW_FRETBOARD,false);
-		this.loadProperty(TGConfigKeys.SHOW_PIANO,false);
-		this.loadProperty(TGConfigKeys.SHOW_MARKERS,false);
-		this.loadProperty(TGConfigKeys.LAYOUT_MODE,ViewLayout.MODE_PAGE);
-		this.loadProperty(TGConfigKeys.LAYOUT_STYLE,(ViewLayout.DISPLAY_TABLATURE | ViewLayout.DISPLAY_SCORE | ViewLayout.DISPLAY_COMPACT | ViewLayout.DISPLAY_CHORD_DIAGRAM));
-		this.loadProperty(TGConfigKeys.EDITOR_MOUSE_MODE,EditorKit.MOUSE_MODE_EDITION);
-		this.loadProperty(TGConfigKeys.EDITOR_NATURAL_KEY_MODE,true);
-		this.loadProperty(TGConfigKeys.FONT_DEFAULT, (DEFAULT_FONT_NAME + ",6,0"));
-		this.loadProperty(TGConfigKeys.FONT_NOTE, (DEFAULT_FONT_NAME + ",7,0"));
-		this.loadProperty(TGConfigKeys.FONT_TIME_SIGNATURE, (DEFAULT_FONT_NAME + ",13,1"));
-		this.loadProperty(TGConfigKeys.FONT_LYRIC, (DEFAULT_FONT_NAME + ",7,0"));
-		this.loadProperty(TGConfigKeys.FONT_TEXT, (DEFAULT_FONT_NAME + ",8,0"));
-		this.loadProperty(TGConfigKeys.FONT_CHORD, (DEFAULT_FONT_NAME + ",7,0"));
-		this.loadProperty(TGConfigKeys.FONT_CHORD_FRET, (DEFAULT_FONT_NAME + ",5,0"));
-		this.loadProperty(TGConfigKeys.FONT_GRACE, (DEFAULT_FONT_NAME + ",6,0"));
-		this.loadProperty(TGConfigKeys.FONT_MARKER, (DEFAULT_FONT_NAME + ",7,0"));
-		this.loadProperty(TGConfigKeys.FONT_PRINTER_DEFAULT, (DEFAULT_FONT_NAME + ",6,0"));
-		this.loadProperty(TGConfigKeys.FONT_PRINTER_NOTE, (DEFAULT_FONT_NAME + ",6,0"));
-		this.loadProperty(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE, (DEFAULT_FONT_NAME + ",10,1"));
-		this.loadProperty(TGConfigKeys.FONT_PRINTER_LYRIC, (DEFAULT_FONT_NAME + ",7,0"));
-		this.loadProperty(TGConfigKeys.FONT_PRINTER_TEXT, (DEFAULT_FONT_NAME + ",8,0"));
-		this.loadProperty(TGConfigKeys.FONT_PRINTER_CHORD, (DEFAULT_FONT_NAME + ",7,0"));
-		this.loadProperty(TGConfigKeys.FONT_PRINTER_GRACE, (DEFAULT_FONT_NAME + ",6,0"));
-		this.loadProperty(TGConfigKeys.FONT_ABOUT_DIALOG_TITLE, (DEFAULT_FONT_NAME + ",36,3"));
-		this.loadProperty(TGConfigKeys.COLOR_BACKGROUND,"255,255,255");
-		this.loadProperty(TGConfigKeys.COLOR_LINE,"214,214,214");
-		this.loadProperty(TGConfigKeys.COLOR_SCORE_NOTE,"64,64,64");
-		this.loadProperty(TGConfigKeys.COLOR_TAB_NOTE,"64,64,64");
-		this.loadProperty(TGConfigKeys.COLOR_PLAY_NOTE,"255,0,0");
-		this.loadProperty(TGConfigKeys.COLOR_CARET_1,"127,127,127");
-		this.loadProperty(TGConfigKeys.COLOR_CARET_2,"165,42,42");
-		this.loadProperty(TGConfigKeys.COLOR_LOOP_S_MARKER,"42,165,42");
-		this.loadProperty(TGConfigKeys.COLOR_LOOP_E_MARKER,"165,42,42");
-		this.loadProperty(TGConfigKeys.MAX_HISTORY_FILES,10);
-		this.loadProperty(TGConfigKeys.MIN_SCORE_TABLATURE_SPACING,20);
-		this.loadProperty(TGConfigKeys.SCORE_LINE_SPACING,8);
-		this.loadProperty(TGConfigKeys.TAB_LINE_SPACING,10);
-		this.loadProperty(TGConfigKeys.FIRST_TRACK_SPACING,20);
-		this.loadProperty(TGConfigKeys.TRACK_SPACING,10);
-		this.loadProperty(TGConfigKeys.LANGUAGE,"");
-		this.loadProperty(TGConfigKeys.FRETBOARD_STRING_SPACING,20);
-		this.loadProperty(TGConfigKeys.FRETBOARD_STYLE ,FretBoardConfig.DISPLAY_TEXT_SCALE);
-		this.loadProperty(TGConfigKeys.FRETBOARD_DIRECTION ,FretBoardConfig.DIRECTION_RIGHT);
-		this.loadProperty(TGConfigKeys.FRETBOARD_FONT, (DEFAULT_FONT_NAME + ",8,1"));
-		this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_BACKGROUND,"0,0,0");
-		this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_STRING,"227,217,217");
-		this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_FRET_POINT,"192,192,192");
-		this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_NOTE,"42,85,128");
-		this.loadProperty(TGConfigKeys.FRETBOARD_COLOR_SCALE,"128,32,32");
-		this.loadProperty(TGConfigKeys.PIANO_COLOR_KEY_NATURAL,"255,255,255");
-		this.loadProperty(TGConfigKeys.PIANO_COLOR_KEY_NOT_NATURAL,"0,0,0");
-		this.loadProperty(TGConfigKeys.PIANO_COLOR_NOTE,"42,85,128");
-		this.loadProperty(TGConfigKeys.PIANO_COLOR_SCALE,"128,32,32");
-		this.loadProperty(TGConfigKeys.MATRIX_FONT, (DEFAULT_FONT_NAME + ",8,1"));
-		this.loadProperty(TGConfigKeys.MATRIX_COLOR_FOREGROUND,"190,190,190");
-		this.loadProperty(TGConfigKeys.MATRIX_COLOR_BORDER,"25,25,25");
-		this.loadProperty(TGConfigKeys.MATRIX_COLOR_POSITION,"190,190,190");
-		this.loadProperty(TGConfigKeys.MATRIX_COLOR_NOTE,"42,85,128");
-		this.loadProperty(TGConfigKeys.MATRIX_COLOR_PLAY_NOTE,"128,32,32");
-		this.loadProperty(TGConfigKeys.MATRIX_COLOR_LINE_1,"255,255,255");
-		this.loadProperty(TGConfigKeys.MATRIX_COLOR_LINE_2,"230,230,250");
-		this.loadProperty(TGConfigKeys.MATRIX_COLOR_LINE_3,"173,216,230");
-		this.loadProperty(TGConfigKeys.TABLE_AUTO_SIZE,true);
-		this.loadProperty(TGConfigKeys.BROWSER_LINES_VISIBLE,true);
-	}
-	
-	public Properties getProperties() {
-		return this.properties;
-	}
-	
-	private void loadProperty(String key,String value){
-		this.properties.setProperty(key,value);
-	}
-	
-	private void loadProperty(String key,int value){
-		this.properties.setProperty(key,Integer.toString(value));
-	}
-	
-	private void loadProperty(String key,boolean value){
-		this.properties.setProperty(key,Boolean.toString(value));
-	}
-	
-	private static String getDefaultFontName(){
-		Font font = TuxGuitar.instance().getDisplay().getSystemFont();
-		if( font != null ){
-			FontData[] fd = font.getFontData();
-			if(fd != null && fd.length > 0){
-				return fd[0].getName();
-			}
-		}
-		return new String();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigEditor.java
deleted file mode 100644
index 89c2ad3..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigEditor.java
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * Created on 17-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.system.config;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Properties;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.ToolBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.editors.TablatureEditor;
-import org.herac.tuxguitar.gui.system.config.items.LanguageOption;
-import org.herac.tuxguitar.gui.system.config.items.MainOption;
-import org.herac.tuxguitar.gui.system.config.items.Option;
-import org.herac.tuxguitar.gui.system.config.items.SkinOption;
-import org.herac.tuxguitar.gui.system.config.items.SoundOption;
-import org.herac.tuxguitar.gui.system.config.items.StylesOption;
-import org.herac.tuxguitar.gui.system.config.items.ToolBarsOption;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGConfigEditor{
-	
-	protected Shell dialog;
-	protected TGConfigManager config;
-	protected List options;
-	protected Properties defaults;
-	protected boolean accepted;
-	
-	protected List runnables;
-	
-	public TGConfigEditor() {
-		this.config = TuxGuitar.instance().getConfig();
-	}
-	
-	public void showDialog(Shell shell) {
-		this.accepted = false;
-		
-		this.dialog = DialogUtils.newDialog(shell, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setText(TuxGuitar.getProperty("settings.config"));
-		
-		//-------main-------------------------------------
-		Composite mainComposite = new Composite(this.dialog,SWT.NONE);
-		mainComposite.setLayout(new GridLayout(2,false));
-		mainComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true , true));
-		createComposites(mainComposite);
-		
-		//-------buttons-------------------------------------
-		Composite buttonComposite = new Composite(this.dialog,SWT.NONE);
-		buttonComposite.setLayout(new GridLayout(3,true));
-		buttonComposite.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		Button buttonDefaults = new Button(buttonComposite, SWT.PUSH);
-		buttonDefaults.setLayoutData(getButtonData()); 
-		buttonDefaults.setText(TuxGuitar.getProperty("defaults"));
-		buttonDefaults.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TGConfigEditor.this.accepted = true;
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-				dispose();
-				setDefaults();
-				ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("settings.config.apply-changes-question"));
-				confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
-				if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_NO){
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-					return;
-				}
-				applyConfig(true);
-			}
-		});
-		
-		Button buttonOK = new Button(buttonComposite, SWT.PUSH);
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TGConfigEditor.this.accepted = true;
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-				updateOptions();
-				dispose();
-				ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("settings.config.apply-changes-question"));
-				confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
-				if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_YES) == ConfirmDialog.STATUS_NO){
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-					return;
-				}
-				applyConfig(false);
-			}
-		});
-		
-		Button buttonCancel = new Button(buttonComposite, SWT.PUSH);
-		buttonCancel.setLayoutData(getButtonData()); 
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-				dispose();
-				TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-			}
-		});
-		
-		this.dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		if(!this.accepted){
-			ActionLock.unlock();
-		}
-	}
-	
-	private void createComposites(Composite parent) {
-		ToolBar toolBar = new ToolBar(parent, SWT.VERTICAL | SWT.FLAT | SWT.WRAP);
-		toolBar.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true , true));
-		
-		Composite option = new Composite(parent,SWT.NONE);
-		option.setLayout(new FormLayout());
-		
-		initOptions(toolBar,option);
-		
-		Point optionSize = computeOptionsSize( 0 , toolBar.computeSize(SWT.DEFAULT,SWT.DEFAULT).y );
-		option.setLayoutData(new GridData(optionSize.x,optionSize.y));
-		
-		if(this.options.size() > 0){
-			select((Option)this.options.get(0));
-		}
-	}
-	
-	private void initOptions(ToolBar toolBar,Composite parent){
-		this.options = new ArrayList();
-		this.options.add(new MainOption(this,toolBar,parent));
-		this.options.add(new StylesOption(this,toolBar,parent));
-		this.options.add(new LanguageOption(this,toolBar,parent));
-		this.options.add(new ToolBarsOption(this,toolBar,parent));
-		this.options.add(new SkinOption(this,toolBar,parent));
-		this.options.add(new SoundOption(this,toolBar,parent));
-		
-		Iterator it = this.options.iterator();
-		while(it.hasNext()){
-			Option option = (Option)it.next();
-			option.createOption();
-		}
-	}
-	
-	private Point computeOptionsSize(int minimumWidth, int minimumHeight){
-		int width = minimumWidth;
-		int height = minimumHeight;
-		
-		Iterator it = this.options.iterator();
-		while(it.hasNext()){
-			Option option = (Option)it.next();
-			Point size = option.computeSize();
-			if(size.x > width){
-				width = size.x;
-			}
-			if(size.y > height){
-				height = size.y;
-			}
-		}
-		return new Point(width, height);
-	}
-	
-	public void pack(){
-		this.dialog.pack();
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	public GridData makeGridData(int with,int height,int minWith,int minHeight){
-		GridData data = new GridData();
-		data.minimumWidth = minWith;
-		data.minimumHeight = minHeight;
-		if(with > 0){
-			data.widthHint = with;
-		}else{
-			data.horizontalAlignment = SWT.FILL;
-			data.grabExcessHorizontalSpace = true;
-		}
-		if(height > 0){
-			data.heightHint = with;
-		}else{
-			data.verticalAlignment = SWT.FILL;
-			data.grabExcessVerticalSpace = true;
-		}
-		
-		return data;
-	}
-	
-	public void select(Option option){
-		hideAll();
-		option.setVisible(true);
-		//this.dialog.layout();
-		this.dialog.redraw();
-	}
-	
-	private void hideAll(){
-		Iterator it = this.options.iterator();
-		while(it.hasNext()){
-			Option option = (Option)it.next();
-			option.setVisible(false);
-		}
-	}
-	
-	protected void updateOptions(){
-		Iterator it = this.options.iterator();
-		while(it.hasNext()){
-			Option option = (Option)it.next();
-			option.updateConfig();
-		}
-		this.config.save();
-	}
-	
-	protected void setDefaults(){
-		Iterator it = this.options.iterator();
-		while(it.hasNext()){
-			Option option = (Option)it.next();
-			option.updateDefaults();
-		}
-		this.config.save();
-	}
-	
-	protected void applyConfig(final boolean force){
-		TuxGuitar.instance().loadCursor(SWT.CURSOR_WAIT);
-		new Thread(new Runnable() {
-			public void run() {
-				TGConfigEditor.this.runnables = new ArrayList();
-				
-				Iterator it = TGConfigEditor.this.options.iterator();
-				while(it.hasNext()){
-					Option option = (Option)it.next();
-					option.applyConfig(force);
-				}
-				try {
-					TGSynchronizer.instance().runLater(new TGSynchronizer.TGRunnable() {
-						public void run() throws Throwable {
-							Iterator it = TGConfigEditor.this.runnables.iterator();
-							while(it.hasNext()){
-								Runnable current = (Runnable)it.next();
-								current.run();
-							}
-							new Thread(new Runnable() {
-								public void run() {
-									TuxGuitar.instance().fireUpdate();
-									TuxGuitar.instance().updateCache(true);
-									TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-									ActionLock.unlock();
-								}
-							}).start();
-						}
-					});
-				} catch (Throwable throwable) {
-					TuxGuitar.instance().fireUpdate();
-					TuxGuitar.instance().updateCache(true);
-					TuxGuitar.instance().loadCursor(SWT.CURSOR_ARROW);
-					ActionLock.unlock();
-					throwable.printStackTrace();
-				}
-			}
-		}).start();
-	}
-	
-	protected void dispose(){
-		Iterator it = this.options.iterator();
-		while(it.hasNext()){
-			Option option = (Option)it.next();
-			option.dispose();
-		}
-		getDialog().dispose();
-	}
-	
-	public Properties getDefaults(){
-		if(this.defaults == null){
-			this.defaults = new TGConfigDefaults().getProperties();
-		}
-		return this.defaults;
-	}
-	
-	public TGConfigManager getConfig(){
-		return this.config;
-	}
-	
-	public TablatureEditor getEditor(){
-		return TuxGuitar.instance().getTablatureEditor();
-	}
-	
-	public Shell getDialog(){
-		return this.dialog;
-	}
-	
-	public void addSyncThread(Runnable runnable){
-		this.runnables.add( runnable );
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigKeys.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigKeys.java
deleted file mode 100644
index f69051d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigKeys.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Created on 27-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.system.config;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGConfigKeys {
-	public static final String SKIN = "skin";
-	public static final String WINDOW_TITLE = "window.title";
-	public static final String SHOW_SPLASH = "show.splash";
-	public static final String MAXIMIZED = "window.maximized";
-	public static final String WIDTH = "window.width";
-	public static final String HEIGHT = "window.height";
-	public static final String SHOW_MIXER = "show.mixer";
-	public static final String SHOW_TRANSPORT = "show.transport";
-	public static final String SHOW_FRETBOARD = "show.fretboard";
-	public static final String SHOW_MATRIX = "show.matrix";
-	public static final String SHOW_PIANO = "show.piano";
-	public static final String SHOW_MARKERS = "show.markers";
-	public static final String LAYOUT_MODE = "layout.mode";
-	public static final String LAYOUT_STYLE = "layout.style";
-	public static final String LAYOUT_PAGE_FORCE_WIDTH = "layout.page.force-width";
-	public static final String LANGUAGE = "language";
-	public static final String EDITOR_MOUSE_MODE = "editor.mouse.mode";
-	public static final String EDITOR_NATURAL_KEY_MODE = "editor.natural.key.mode";
-	public static final String FONT_DEFAULT = "font.default";
-	public static final String FONT_NOTE = "font.note";
-	public static final String FONT_TIME_SIGNATURE = "font.time-signature";
-	public static final String FONT_CHORD = "font.chord";
-	public static final String FONT_CHORD_FRET = "font.chord-fret";
-	public static final String FONT_GRACE = "font.grace";
-	public static final String FONT_LYRIC = "font.lyric";
-	public static final String FONT_TEXT = "font.text";
-	public static final String FONT_MARKER = "font.marker";
-	public static final String FONT_PRINTER_DEFAULT = "font.printer.default";
-	public static final String FONT_PRINTER_NOTE = "font.printer.note";
-	public static final String FONT_PRINTER_TIME_SIGNATURE = "font.printer.time-signature";
-	public static final String FONT_PRINTER_LYRIC = "font.printer.lyric";
-	public static final String FONT_PRINTER_TEXT = "font.printer.text";
-	public static final String FONT_PRINTER_CHORD = "font.printer.chord";
-	public static final String FONT_PRINTER_GRACE = "font.printer.grace";
-	public static final String FONT_ABOUT_DIALOG_TITLE = "font.about.dialog.title";
-	public static final String COLOR_BACKGROUND = "color.background";
-	public static final String COLOR_LINE = "color.line";
-	public static final String COLOR_SCORE_NOTE = "color.score.note";
-	public static final String COLOR_TAB_NOTE = "color.tab.note";
-	public static final String COLOR_PLAY_NOTE = "color.play.note";
-	public static final String COLOR_CARET_1 = "color.caret.1";
-	public static final String COLOR_CARET_2 = "color.caret.2";
-	public static final String COLOR_LOOP_S_MARKER = "color.loop.s.marker";
-	public static final String COLOR_LOOP_E_MARKER = "color.loop.e.marker";
-	public static final String MIDI_PORT = "midi.port";
-	public static final String MIDI_SEQUENCER = "midi.sequencer";
-	public static final String MAX_HISTORY_FILES = "history.max-files";
-	public static final String MIN_SCORE_TABLATURE_SPACING = "score.min.score-tab-spacing";
-	public static final String SCORE_LINE_SPACING = "score.line-spacing";
-	public static final String TAB_LINE_SPACING = "tab.line-spacing";
-	public static final String FIRST_TRACK_SPACING = "first-track.spacing";
-	public static final String TRACK_SPACING = "track.spacing";
-	public static final String FRETBOARD_STRING_SPACING = "fretboard.string-spacing";
-	public static final String FRETBOARD_STYLE = "fretboard.style";
-	public static final String FRETBOARD_FONT = "fretboard.font";
-	public static final String FRETBOARD_COLOR_BACKGROUND = "fretboard.color.background";
-	public static final String FRETBOARD_COLOR_STRING = "fretboard.color.string";
-	public static final String FRETBOARD_COLOR_FRET_POINT = "fretboard.color.fret-point";
-	public static final String FRETBOARD_COLOR_NOTE = "fretboard.color.note";
-	public static final String FRETBOARD_COLOR_SCALE = "fretboard.color.scale";
-	public static final String FRETBOARD_DIRECTION = "fretboard.direction";
-	public static final String PIANO_COLOR_KEY_NATURAL = "piano.color.natural-key";
-	public static final String PIANO_COLOR_KEY_NOT_NATURAL = "piano.color.not-natural-key";
-	public static final String PIANO_COLOR_NOTE = "piano.color.note";
-	public static final String PIANO_COLOR_SCALE = "piano.color.scale";
-	public static final String MATRIX_GRIDS = "matrix.grids";
-	public static final String MATRIX_FONT = "matrix.font";
-	public static final String MATRIX_COLOR_FOREGROUND = "matrix.color.foreground";
-	public static final String MATRIX_COLOR_LINE_1= "matrix.color.line-1";
-	public static final String MATRIX_COLOR_LINE_2= "matrix.color.line-2";
-	public static final String MATRIX_COLOR_LINE_3= "matrix.color.line-3";
-	public static final String MATRIX_COLOR_BORDER = "matrix.color.border";
-	public static final String MATRIX_COLOR_POSITION = "matrix.color.position";
-	public static final String MATRIX_COLOR_NOTE = "matrix.color.note";
-	public static final String MATRIX_COLOR_PLAY_NOTE = "matrix.color.play-note";
-	public static final String TABLE_AUTO_SIZE = "table.auto-size";
-	public static final String BROWSER_LINES_VISIBLE = "browser.lines-visible";
-	public static final String SYSTEM_PLAYER = "system.player";
-	public static final String FORCE_OS_DEFAULTS = "painter.force-os-defaults";
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigManager.java
deleted file mode 100644
index 1406f22..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigManager.java
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
- * Created on 09-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.system.config;
-
-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.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.RGB;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public abstract class TGConfigManager {
-	
-	private Properties properties;
-	
-	public TGConfigManager() {
-		super();
-	}
-	
-	public void init(){
-		this.properties = new Properties(getDefaults());
-		this.load();
-	}
-	
-	private String getProperty(String key) {
-		return this.properties.getProperty(key);
-	}
-	
-	public String getStringConfigValue(String key,String defaultValue) {
-		try{
-			String property = getProperty(key);
-			return (property == null)?defaultValue:property.trim();
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return defaultValue;
-	}
-	
-	public String getStringConfigValue(String key) {
-		return this.getStringConfigValue(key,null);
-	}
-	
-	public int getIntConfigValue(String key,int defaultValue) {
-		try{
-			String value = getProperty(key);
-			return (value == null)?defaultValue:Integer.parseInt(value.trim());
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return defaultValue;
-	}
-	
-	public int getIntConfigValue(String key) {
-		return this.getIntConfigValue(key,0);
-	}
-	
-	public float getFloatConfigValue(String key,float defaultValue) {
-		try{
-			String value = getProperty(key);
-			return (value == null)?defaultValue:Float.parseFloat(value.trim());
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return defaultValue;
-	}
-	
-	public float getFloatConfigValue(String key) {
-		return this.getFloatConfigValue(key,0f);
-	}
-	
-	public double getDoubleConfigValue(String key,double defaultValue) {
-		try{
-			String value = getProperty(key);
-			return (value == null)?defaultValue:Double.parseDouble(value.trim());
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return defaultValue;
-	}
-	
-	public double getDoubleConfigValue(String key) {
-		return this.getDoubleConfigValue(key,0.0);
-	}
-	
-	public boolean getBooleanConfigValue(String key,boolean defaultValue) {
-		try{
-			String value = getProperty(key);
-			return (value == null)?defaultValue:Boolean.valueOf(value.trim()).booleanValue();
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return defaultValue;
-	}
-	
-	public boolean getBooleanConfigValue(String key) {
-		return this.getBooleanConfigValue(key,false);
-	}
-	
-	public FontData getFontDataConfigValue(String key){
-		try{
-			String value = getProperty(key);
-			if(value != null){
-				String[] values = value.trim().split(",");
-				if(values != null && values.length == 3){
-					try{
-						String name = values[0].trim();
-						int size = Integer.parseInt(values[1].trim());
-						int style = Integer.parseInt(values[2].trim());
-						return new FontData( (name == null ? "" : name),size,style);
-					}catch(NumberFormatException e){
-						e.printStackTrace();
-					}
-				}
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return new FontData();
-	}
-	
-	public RGB getRGBConfigValue(String key){
-		try{
-			String value = getProperty(key);
-			if(value != null){
-				String[] values = value.trim().split(",");
-				if(values != null && values.length == 3){
-					try{
-						int red = Integer.parseInt(values[0].trim());
-						int green = Integer.parseInt(values[1].trim());
-						int blue = Integer.parseInt(values[2].trim());
-						
-						return new RGB(red,green,blue);
-					}catch(NumberFormatException e){
-						e.printStackTrace();
-					}
-				}
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-	
-	public void setProperty(String key,String value){
-		this.properties.setProperty(key, (value != null ? value : new String()) );
-	}
-	
-	public void setProperty(String key,int value){
-		this.setProperty(key,Integer.toString(value));
-	}
-	
-	public void setProperty(String key,float value){
-		this.setProperty(key,Float.toString(value));
-	}
-	
-	public void setProperty(String key,double value){
-		this.setProperty(key,Double.toString(value));
-	}
-	
-	public void setProperty(String key,boolean value){
-		this.setProperty(key,Boolean.toString(value));
-	}
-	
-	public void setProperty(String key,RGB rgb){
-		this.setProperty(key,(rgb.red + "," + rgb.green + "," + rgb.blue));
-	}
-	
-	public void setProperty(String key,FontData fd){
-		this.setProperty(key,(fd.getName() + "," + fd.getHeight() + "," + fd.getStyle()));
-	}
-	
-	public void setDefaults(){
-		Properties defaults = new TGConfigDefaults().getProperties();
-		Iterator it = defaults.entrySet().iterator();
-		while(it.hasNext()){
-			Map.Entry property = (Map.Entry)it.next();
-			setProperty((String)property.getKey(),(String)property.getValue());
-		}
-		this.save();
-	}
-	
-	public void removeProperty(String key){
-		this.properties.remove(key);
-	}
-	
-	public void clear(){
-		this.properties.clear();
-	}
-	
-	public void load() {
-		try {
-			if(new File(getFileName()).exists()){
-				InputStream inputStream = new FileInputStream(getFileName());
-				this.properties.clear();
-				this.properties.load(inputStream);
-			}else{
-				this.save();
-			}
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void save(){
-		try {
-			File file = new File(getFileName());
-			if(!file.exists()){
-				File folder = file.getParentFile();
-				if(folder != null && !folder.exists()){
-					folder.mkdirs();
-				}
-			}
-			this.properties.store(new FileOutputStream(file),getName());
-		} catch (FileNotFoundException e1) {
-			e1.printStackTrace();
-		} catch (IOException e1) {
-			e1.printStackTrace();
-		}
-	}
-	
-	public abstract String getName();
-	
-	public abstract String getFileName();
-	
-	public abstract Properties getDefaults();
-	
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigManagerImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigManagerImpl.java
deleted file mode 100644
index dcb8f58..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/TGConfigManagerImpl.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package org.herac.tuxguitar.gui.system.config;
-
-import java.io.File;
-import java.util.Properties;
-
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-public class TGConfigManagerImpl extends TGConfigManager{
-	
-	public TGConfigManagerImpl(){
-		super();
-	}
-	
-	public String getName() {
-		return "System Configuration";
-	}
-	
-	public String getFileName(){
-		return TGFileUtils.PATH_USER_CONFIG + File.separator + "config.properties";
-	}
-	
-	public Properties getDefaults() {
-		return new TGConfigDefaults().getProperties();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/LanguageOption.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/LanguageOption.java
deleted file mode 100644
index 9892844..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/LanguageOption.java
+++ /dev/null
@@ -1,178 +0,0 @@
-package org.herac.tuxguitar.gui.system.config.items;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.ToolBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.system.config.TGConfigEditor;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-
-public class LanguageOption extends Option{
-	protected boolean initialized;
-	protected Table table;
-	protected TableColumn column;
-	
-	public LanguageOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
-		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.language"), SWT.FILL, SWT.FILL);
-		this.initialized = false;
-	}
-	
-	public void createOption(){
-		getToolItem().setText(TuxGuitar.getProperty("settings.config.language"));
-		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionLanguage());
-		getToolItem().addSelectionListener(this);
-		
-		showLabel(getComposite(),SWT.FILL,SWT.TOP, true, false,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.language.choose"));
-		
-		Composite composite = new Composite(getComposite(),SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL));
-		
-		this.table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL);
-		this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.table.setHeaderVisible(true);
-		this.table.setLinesVisible(false);
-		
-		this.column = new TableColumn(this.table, SWT.LEFT);
-		this.column.setText(TuxGuitar.getProperty("settings.config.language.choose"));
-		this.column.pack();
-		
-		this.loadConfig();
-	}
-	
-	protected void loadTableItem(String text, String data, boolean selected){
-		TableItem item = new TableItem(this.table, SWT.NONE);
-		item.setText(text);
-		item.setData(data);
-		if( selected ){
-			this.table.setSelection(item);
-		}
-	}
-	
-	protected List getLanguageItems(String[] languages){
-		List list = new ArrayList();
-		if( languages != null ){
-			for(int i = 0;i < languages.length; i ++){
-				list.add( new LanguageItem(languages[i],TuxGuitar.getProperty("locale." + languages[i] ) ) );
-			}
-			Collections.sort(list, new Comparator() {
-				public int compare(Object o1, Object o2) {
-					if( o1 instanceof LanguageItem && o2 instanceof LanguageItem){
-						LanguageItem l1 = (LanguageItem)o1;
-						LanguageItem l2 = (LanguageItem)o2;
-						return l1.getValue().compareTo( l2.getValue() );
-					}
-					return 0;
-				}
-			} );
-		}
-		return list;
-	}
-	
-	protected void loadConfig(){
-		new Thread(new Runnable() {
-			public void run() {
-				final String language = getConfig().getStringConfigValue(TGConfigKeys.LANGUAGE);
-				final List languages = getLanguageItems( TuxGuitar.instance().getLanguageManager().getLanguages() );
-				new SyncThread(new Runnable() {
-					public void run() {
-						if(!isDisposed()){
-							// Load default item
-							loadTableItem(TuxGuitar.getProperty("locale.default"), new String(), true);
-							
-							for(int i = 0;i < languages.size(); i ++){
-								LanguageItem item = (LanguageItem)languages.get( i );
-								loadTableItem(item.getValue(),item.getKey(),(language != null && item.getKey().equals( language )));
-							}
-							
-							LanguageOption.this.initialized = true;
-							LanguageOption.this.column.pack();
-							LanguageOption.this.pack();
-						}
-					}
-				}).start();
-			}
-		}).start();
-	}
-	
-	public void updateConfig(){
-		if(this.initialized){
-			String language = null;
-			if(this.table != null && !this.table.isDisposed()){
-				int index = this.table.getSelectionIndex();
-				if(index >= 0 && index < this.table.getItemCount() ){
-					language = (String)this.table.getItem(index).getData();
-				}
-			}
-			getConfig().setProperty(TGConfigKeys.LANGUAGE, language );
-		}
-	}
-	
-	public void updateDefaults(){
-		if(this.initialized){
-			getConfig().setProperty(TGConfigKeys.LANGUAGE,getDefaults().getProperty(TGConfigKeys.LANGUAGE));
-		}
-	}
-	
-	public void applyConfig(boolean force){
-		if(force || this.initialized){
-			boolean changed = force;
-			
-			if(!changed){
-				String languageLoaded = TuxGuitar.instance().getLanguageManager().getLanguage();
-				String languageConfigured = getConfig().getStringConfigValue(TGConfigKeys.LANGUAGE);
-				if(languageLoaded == null && languageConfigured == null){
-					changed = false;
-				}
-				else if(languageLoaded != null && languageConfigured != null){
-					changed = ( !languageLoaded.equals( languageConfigured ) );
-				}
-				else {
-					changed = true;
-				}
-			}
-			
-			if(changed){
-				addSyncThread(new Runnable() {
-					public void run() {
-						TuxGuitar.instance().loadLanguage();
-					}
-				});
-			}
-		}
-	}
-	
-	public Point computeSize(){
-		return this.computeSize(SWT.DEFAULT,SWT.NONE);
-	}
-	
-	private class LanguageItem {
-		private String key;
-		private String value;
-		
-		public LanguageItem(String key, String value){
-			this.key = key;
-			this.value = value;
-		}
-		
-		public String getKey(){
-			return this.key;
-		}
-		
-		public String getValue(){
-			return this.value;
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/MainOption.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/MainOption.java
deleted file mode 100644
index 670c834..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/MainOption.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.herac.tuxguitar.gui.system.config.items;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.swt.widgets.ToolBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.system.config.TGConfigEditor;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.util.WindowTitleUtil;
-
-public class MainOption  extends Option{
-	protected boolean initialized;
-	protected Button showSplash;
-	protected Button autoSizeTable;
-	protected Text windowTitle;
-	
-	public MainOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
-		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.main"));
-		this.initialized = false;
-	}
-	
-	public void createOption(){
-		getToolItem().setText(TuxGuitar.getProperty("settings.config.main"));
-		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionMain());
-		getToolItem().addSelectionListener(this);
-		
-		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.main.window-title"));
-		
-		Composite windowTitleComposite = new Composite(getComposite(),SWT.NONE);
-		windowTitleComposite.setLayout(new GridLayout());
-		windowTitleComposite.setLayoutData(getTabbedData());
-		
-		this.windowTitle = new Text(windowTitleComposite,SWT.BORDER);
-		this.windowTitle.setLayoutData(new GridData(SWT.FILL, SWT.FILL , true, true));
-		this.windowTitle.setTextLimit(80);
-		
-		Composite infoHeader = new Composite(windowTitleComposite,SWT.NONE);
-		infoHeader.setLayout(new GridLayout(2,false));
-		infoHeader.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		showImageLabel(infoHeader,SWT.NONE,infoHeader.getDisplay().getSystemImage(SWT.ICON_INFORMATION));
-		showLabel(infoHeader,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.help"));
-		
-		Composite infoBody = new Composite(windowTitleComposite,SWT.NONE);
-		infoBody.setLayout(new GridLayout(2,false));
-		infoBody.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_APP_NAME));
-		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_APP_NAME ));
-		
-		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_APP_VERSION));
-		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_APP_VERSION ));
-		
-		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_FILE_NAME));
-		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_FILE_NAME ));
-		
-		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_FILE_PATH));
-		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_FILE_PATH ));
-		
-		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_NAME));
-		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_NAME ));
-		
-		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_ALBUM));
-		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_ALBUM ));
-		
-		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_ARTIST));
-		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_ARTIST ));
-		
-		showLabel(infoBody, SWT.NONE,SWT.BOLD,-1,WindowTitleUtil.getVar(WindowTitleUtil.VAR_SONG_AUTHOR));
-		showLabel(infoBody,SWT.TOP | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.main.window-title.var.description." + WindowTitleUtil.VAR_SONG_AUTHOR ));
-		
-		showLabel(getComposite(),SWT.BOTTOM | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.main.options"));
-		
-		Composite options = new Composite(getComposite(),SWT.NONE);
-		options.setLayout(new GridLayout());
-		options.setLayoutData(getTabbedData());
-		
-		this.autoSizeTable = new Button(options,SWT.CHECK);
-		this.autoSizeTable.setText(TuxGuitar.getProperty("settings.config.main.table.auto-size.enabled"));
-		
-		this.showSplash = new Button(options,SWT.CHECK);
-		this.showSplash.setText(TuxGuitar.getProperty("settings.config.main.splash-enabled"));
-		
-		this.loadConfig();
-	}
-	
-	protected void loadConfig(){
-		new Thread(new Runnable() {
-			public void run() {
-				final String windowTitle = getConfig().getStringConfigValue(TGConfigKeys.WINDOW_TITLE);
-				final boolean showSplash = getConfig().getBooleanConfigValue(TGConfigKeys.SHOW_SPLASH);
-				final boolean autoSizeTable = getConfig().getBooleanConfigValue(TGConfigKeys.TABLE_AUTO_SIZE);
-				new SyncThread(new Runnable() {
-					public void run() {
-						if(!isDisposed()){
-							MainOption.this.windowTitle.setText(windowTitle);
-							MainOption.this.showSplash.setSelection(showSplash);
-							MainOption.this.autoSizeTable.setSelection(autoSizeTable);
-							MainOption.this.initialized = true;
-							MainOption.this.pack();
-						}
-					}
-				}).start();
-			}
-		}).start();
-	}
-	
-	public void updateConfig(){
-		if(this.initialized){
-			getConfig().setProperty(TGConfigKeys.WINDOW_TITLE,this.windowTitle.getText());
-			getConfig().setProperty(TGConfigKeys.SHOW_SPLASH,this.showSplash.getSelection());
-			getConfig().setProperty(TGConfigKeys.TABLE_AUTO_SIZE,this.autoSizeTable.getSelection());
-		}
-	}
-	
-	public void updateDefaults(){
-		if(this.initialized){
-			getConfig().setProperty(TGConfigKeys.WINDOW_TITLE,getDefaults().getProperty(TGConfigKeys.WINDOW_TITLE));
-			getConfig().setProperty(TGConfigKeys.SHOW_SPLASH,getDefaults().getProperty(TGConfigKeys.SHOW_SPLASH));
-			getConfig().setProperty(TGConfigKeys.TABLE_AUTO_SIZE,getDefaults().getProperty(TGConfigKeys.TABLE_AUTO_SIZE));
-		}
-	}
-	
-	public void applyConfig(boolean force){
-		if(force || this.initialized){
-			TuxGuitar.instance().showTitle();
-			TuxGuitar.instance().getTable().loadConfig();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/Option.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/Option.java
deleted file mode 100644
index 8122af0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/Option.java
+++ /dev/null
@@ -1,228 +0,0 @@
-package org.herac.tuxguitar.gui.system.config.items;
-
-import java.util.Properties;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TablatureEditor;
-import org.herac.tuxguitar.gui.system.config.TGConfigEditor;
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-
-public abstract class Option extends SelectionAdapter{
-	
-	protected static final int DEFAULT_INDENT = 20;
-	
-	private TGConfigEditor configEditor ;
-	private ToolBar toolBar;
-	private Group group;
-	private Composite composite;
-	private ToolItem toolItem;
-	
-	public Option(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent,String text, int horizontalAlignment,int verticalAlignment){
-		this.configEditor = configEditor;
-		this.toolBar = toolBar;
-		this.toolItem = new ToolItem(toolBar, SWT.RADIO);
-		this.group = new Group(parent, SWT.SHADOW_ETCHED_IN);
-		this.group.setLayout(new GridLayout());
-		this.group.setLayoutData(getGroupData());
-		this.group.setText(text);
-		this.composite = new Composite(this.group, SWT.SHADOW_ETCHED_IN);
-		this.composite.setLayout(new GridLayout());
-		this.composite.setLayoutData(new GridData(horizontalAlignment,verticalAlignment,true ,true));
-	}
-	
-	public Option(TGConfigEditor configEditor,ToolBar toolBar, Composite parent,String text){
-		this(configEditor, toolBar, parent, text, SWT.FILL,SWT.TOP);
-	}
-	
-	public abstract void createOption();
-	
-	public abstract void updateConfig();
-	
-	public abstract void updateDefaults();
-	
-	public abstract void applyConfig(boolean force);
-	
-	public void setVisible(boolean visible){
-		this.toolItem.setSelection(visible);
-		this.group.setVisible(visible);
-		this.group.setFocus();
-		this.group.redraw();
-	}
-	
-	public void dispose(){
-		//Override me
-	}
-	
-	protected Label showLabel(Composite parent,int labelStyle,int fontStyle,int fontScale,String text){
-		return showLabel(parent,SWT.FILL,SWT.CENTER, labelStyle, fontStyle, fontScale, text);
-	}
-	
-	protected Label showLabel(Composite parent,int hAlign,int vAlign,int labelStyle,int fontStyle,int fontScale,String text){
-		return showLabel(parent, hAlign, vAlign, true, true, labelStyle, fontStyle, fontScale, text);
-	}
-	
-	protected Label showLabel(Composite parent,int hAlign,int vAlign,boolean grabExcessHSpace,boolean grabExcessVSpace,int labelStyle,int fontStyle,int fontScale,String text){
-		Label label = new Label(parent,labelStyle);
-		label.setText(text);
-		label.setLayoutData(new GridData(hAlign,vAlign,grabExcessHSpace,grabExcessVSpace));
-		
-		FontData[] fontDatas = label.getFont().getFontData();
-		if(fontDatas.length > 0){
-			final Font font = new Font(label.getDisplay(),fontDatas[0].getName(),(fontDatas[0].getHeight() + fontScale),fontStyle);
-			label.setFont(font);
-			label.addDisposeListener(new DisposeListener() {
-				public void widgetDisposed(DisposeEvent arg0) {
-					font.dispose();
-				}
-			});
-		}
-		return label;
-	}
-	
-	protected Label showImageLabel(Composite parent,int labelStyle,Image image){
-		Label label = new Label(parent,labelStyle);
-		label.setImage(image);
-		return label;
-	}
-	
-	protected FormData getGroupData(){
-		FormData data = new FormData();
-		data.top = new FormAttachment(0,0);
-		data.bottom = new FormAttachment(100,0);
-		data.left = new FormAttachment(0,0);
-		data.right = new FormAttachment(100,0);
-		return data;
-	}
-	
-	public void widgetSelected(SelectionEvent e) {
-		this.configEditor.select(this);
-	}
-	
-	public Composite getComposite(){
-		return this.composite;
-	}
-	
-	public ToolItem getToolItem(){
-		return this.toolItem;
-	}
-	
-	public Point computeSize(){
-		return this.computeSize(SWT.DEFAULT,SWT.DEFAULT);
-	}
-	
-	protected Point computeSize(int wHint,int hHint){
-		return this.group.computeSize(wHint, hHint);
-	}
-	
-	public TGConfigManager getConfig(){
-		return this.configEditor.getConfig();
-	}
-	
-	public Properties getDefaults(){
-		return this.configEditor.getDefaults();
-	}
-	
-	public TablatureEditor getEditor(){
-		return this.configEditor.getEditor();
-	}
-	
-	public Display getDisplay(){
-		return this.toolBar.getDisplay();
-	}
-	
-	public Shell getShell(){
-		return this.toolBar.getShell();
-	}
-	
-	protected boolean isDisposed(){
-		return (this.toolBar.isDisposed() || this.toolBar.getShell().isDisposed());
-	}
-	
-	public  GridData makeGridData(int with,int height,int minWith,int minHeight){
-		return this.configEditor.makeGridData(with, height, minWith, minHeight);
-	}
-	
-	protected GridData getTabbedData(){
-		return getTabbedData(DEFAULT_INDENT,SWT.FILL,SWT.CENTER);
-	}
-	
-	protected GridData getTabbedData(int horizontalAlignment,int verticalAlignment, boolean grabExcessHorizontalSpace, boolean grabExcessVerticalSpace){
-		return getTabbedData(DEFAULT_INDENT,horizontalAlignment,verticalAlignment,grabExcessHorizontalSpace,grabExcessVerticalSpace);
-	}
-	
-	protected GridData getTabbedData(int horizontalAlignment,int verticalAlignment){
-		return getTabbedData(DEFAULT_INDENT,horizontalAlignment,verticalAlignment);
-	}
-	
-	protected GridData getTabbedData(int indent,int horizontalAlignment,int verticalAlignment){
-		return getTabbedData(indent, horizontalAlignment, verticalAlignment, true, true);
-	}
-	
-	protected GridData getTabbedData(int indent,int horizontalAlignment,int verticalAlignment, boolean grabExcessHorizontalSpace, boolean grabExcessVerticalSpace){
-		GridData data = new GridData();
-		data.horizontalAlignment = horizontalAlignment;
-		data.grabExcessHorizontalSpace = grabExcessHorizontalSpace;
-		data.verticalAlignment = verticalAlignment;
-		data.grabExcessVerticalSpace = grabExcessVerticalSpace;
-		data.horizontalIndent = indent;
-		return data;
-	}
-	
-	public GridData makeGridData(int widthHint,
-								 int heightHint,
-								 int minimumWidth,
-								 int minimumHeight,
-								 int horizontalAlignment,
-								 int verticalAlignment,
-								 boolean grabExcessHorizontalSpace,
-								 boolean grabExcessVerticalSpace,
-								 int horizontalSpan,
-								 int verticalSpan){
-		GridData data = new GridData();
-		data.widthHint = widthHint;
-		data.heightHint = heightHint;
-		data.minimumWidth = minimumWidth;
-		data.minimumHeight = minimumHeight;
-		data.horizontalAlignment = horizontalAlignment;
-		data.verticalAlignment = verticalAlignment;
-		data.grabExcessHorizontalSpace = grabExcessHorizontalSpace;
-		data.grabExcessVerticalSpace = grabExcessVerticalSpace;
-		data.horizontalSpan = horizontalSpan;
-		data.verticalSpan = verticalSpan;
-		
-		return data;
-	}
-	
-	public void pack(){
-		this.configEditor.pack();
-	}
-	
-	public void loadCursor(int style){
-		TuxGuitar.instance().loadCursor(this.configEditor.getDialog(),style);
-	}
-	
-	protected void addSyncThread(Runnable runnable){
-		this.configEditor.addSyncThread(runnable);
-	}
-	
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/SkinOption.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/SkinOption.java
deleted file mode 100644
index df4c005..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/SkinOption.java
+++ /dev/null
@@ -1,265 +0,0 @@
-package org.herac.tuxguitar.gui.system.config.items;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.ToolBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.system.config.TGConfigEditor;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-public class SkinOption extends Option{
-	
-	protected boolean initialized;
-	protected List skins;
-	protected Combo combo;
-	protected Label nameLabel;
-	protected Label authorLabel;
-	protected Label versionLabel;
-	protected Label descriptionLabel;
-	protected Image preview;
-	protected Composite previewArea;
-	
-	public SkinOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
-		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.skin"), SWT.FILL,SWT.FILL);
-		this.initialized = false;
-	}
-	
-	public void createOption() {
-		getToolItem().setText(TuxGuitar.getProperty("settings.config.skin"));
-		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionSkin());
-		getToolItem().addSelectionListener(this);
-		
-		showLabel(getComposite(),SWT.FILL,SWT.TOP,true, false, SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.skin.choose"));
-		
-		Composite composite = new Composite(getComposite(),SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL, true, false));
-		
-		this.combo = new Combo(composite,SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.combo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Composite skinInfoComposite = new Composite(getComposite(),SWT.NONE);
-		skinInfoComposite.setLayout(new GridLayout(2,false));
-		skinInfoComposite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL, true, false));
-		showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("name") + ": ");
-		this.nameLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,"");
-		showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("author")+": ");
-		this.authorLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,"");
-		showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("version")+": ");
-		this.versionLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,"");
-		showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,false,true,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("description")+": ");
-		this.descriptionLabel = showLabel(skinInfoComposite,SWT.FILL,SWT.CENTER,SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.NONE,0,"");
-		
-		Composite skinPreviewComposite = new Composite(getComposite(),SWT.NONE);
-		skinPreviewComposite.setLayout(new GridLayout());
-		skinPreviewComposite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL ,true, true));
-		
-		this.previewArea = new Composite(skinPreviewComposite,SWT.DOUBLE_BUFFERED);
-		this.previewArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		this.previewArea.addPaintListener(new PaintListener() {
-			public void paintControl(PaintEvent e) {
-				if(SkinOption.this.preview != null && !SkinOption.this.preview.isDisposed()){
-					e.gc.drawImage(SkinOption.this.preview, 0, 0);
-				}
-			}
-		});
-		
-		this.loadConfig();
-	}
-	
-	protected void loadConfig(){
-		new Thread(new Runnable() {
-			public void run() {
-				SkinOption.this.skins = new ArrayList();
-				String[] skinNames = TGFileUtils.getFileNames("skins");
-				if( skinNames != null ){
-					for(int i = 0;i < skinNames.length;i++){
-						Properties properties = new Properties();
-						try {
-							InputStream skinInfo = TGFileUtils.getResourceAsStream("skins/" + skinNames[i] + "/skin.properties");
-							if( skinInfo != null ){
-								properties.load( skinInfo );
-							}
-						}catch (Throwable throwable) {
-							throwable.printStackTrace();
-						}
-						SkinInfo info = new SkinInfo(skinNames[i]);
-						info.setName(properties.getProperty("name",info.getSkin()));
-						info.setAuthor(properties.getProperty("author","Not available."));
-						info.setVersion(properties.getProperty("version","Not available."));
-						info.setDescription(properties.getProperty("description","Not available."));
-						info.setDate(properties.getProperty("date",null));
-						info.setPreview(properties.getProperty("preview",null));
-						SkinOption.this.skins.add(info);
-					}
-				}
-				new SyncThread(new Runnable() {
-					public void run() {
-						if(!isDisposed()){
-							for(int i = 0;i < SkinOption.this.skins.size();i++){
-								SkinInfo info = (SkinInfo)SkinOption.this.skins.get(i);
-								SkinOption.this.combo.add(info.getName());
-								if(info.getSkin().equals(getConfig().getStringConfigValue(TGConfigKeys.SKIN))){
-									SkinOption.this.combo.select(i);
-								}
-							}
-							SkinOption.this.combo.addSelectionListener(new SelectionAdapter() {
-								public void widgetSelected(SelectionEvent e) {
-									int selection = SkinOption.this.combo.getSelectionIndex();
-									if(selection >= 0 && selection < SkinOption.this.skins.size()){
-										showSkinInfo((SkinInfo)SkinOption.this.skins.get(selection));
-									}
-								}
-							});
-							
-							int selection = SkinOption.this.combo.getSelectionIndex();
-							if(selection >= 0 && selection < SkinOption.this.skins.size()){
-								showSkinInfo((SkinInfo)SkinOption.this.skins.get(selection));
-							}
-							SkinOption.this.initialized = true;
-							SkinOption.this.pack();
-						}
-					}
-				}).start();
-			}
-		}).start();
-	}
-	
-	protected void showSkinInfo(final SkinInfo info){
-		loadCursor(SWT.CURSOR_WAIT);
-		new SyncThread(new Runnable() {
-			public void run() {
-				if(!isDisposed()){
-					disposePreview();
-					SkinOption.this.nameLabel.setText(info.getName());
-					SkinOption.this.authorLabel.setText(info.getAuthor());
-					SkinOption.this.descriptionLabel.setText(info.getDescription());
-					SkinOption.this.versionLabel.setText((info.getDate() == null)?info.getVersion():info.getVersion() + " (" + info.getDate() + ")");
-					if(info.getPreview() != null){
-						SkinOption.this.preview = TGFileUtils.loadImage(info.getSkin(),info.getPreview());
-					}
-					SkinOption.this.previewArea.redraw();
-					loadCursor(SWT.CURSOR_ARROW);
-				}
-			}
-		}).start();
-	}
-	
-	public void updateConfig() {
-		if(this.initialized){
-			int selection = this.combo.getSelectionIndex();
-			if(selection >= 0 && selection < this.skins.size()){
-				SkinInfo info = (SkinInfo)this.skins.get(selection);
-				getConfig().setProperty(TGConfigKeys.SKIN,info.getSkin());
-			}
-		}
-	}
-	
-	public void updateDefaults(){
-		if(this.initialized){
-			getConfig().setProperty(TGConfigKeys.SKIN,getDefaults().getProperty(TGConfigKeys.SKIN));
-		}
-	}
-	
-	public void applyConfig(boolean force){
-		if(force || (this.initialized && TuxGuitar.instance().getIconManager().shouldReload())){
-			addSyncThread(new Runnable() {
-				public void run() {
-					TuxGuitar.instance().loadSkin();
-				}
-			});
-		}
-	}
-	
-	public void dispose(){
-		this.disposePreview();
-	}
-	
-	public void disposePreview(){
-		if(this.preview != null && !this.preview.isDisposed()){
-			this.preview.dispose();
-		}
-	}
-	
-	private class SkinInfo{
-		private String skin;
-		private String name;
-		private String date;
-		private String author;
-		private String version;
-		private String description;
-		private String preview;
-		
-		public SkinInfo(String skin){
-			this.skin = skin;
-		}
-		
-		public String getAuthor() {
-			return this.author;
-		}
-		
-		public void setAuthor(String author) {
-			this.author = author;
-		}
-		
-		public String getDate() {
-			return this.date;
-		}
-		
-		public void setDate(String date) {
-			this.date = date;
-		}
-		
-		public String getDescription() {
-			return this.description;
-		}
-		
-		public void setDescription(String description) {
-			this.description = description;
-		}
-		
-		public String getName() {
-			return this.name;
-		}
-		
-		public void setName(String name) {
-			this.name = name;
-		}
-		
-		public String getVersion() {
-			return this.version;
-		}
-		
-		public void setVersion(String version) {
-			this.version = version;
-		}
-		
-		public String getSkin() {
-			return this.skin;
-		}
-		
-		public String getPreview() {
-			return this.preview;
-		}
-		
-		public void setPreview(String preview) {
-			this.preview = preview;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/SoundOption.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/SoundOption.java
deleted file mode 100644
index c68d9a0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/SoundOption.java
+++ /dev/null
@@ -1,156 +0,0 @@
-package org.herac.tuxguitar.gui.system.config.items;
-
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.ToolBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.system.config.TGConfigEditor;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.player.base.MidiOutputPort;
-import org.herac.tuxguitar.player.base.MidiSequencer;
-
-public class SoundOption extends Option{
-	protected boolean initialized;
-	
-	//**MidiSequencer module**//
-	protected String msCurrentKey;
-	protected List msList;
-	protected Combo msCombo;
-	
-	//**MidiPort module**//
-	protected String mpCurrentKey;
-	protected List mpList;
-	protected Combo mpCombo;
-	
-	public SoundOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
-		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.sound"));
-		this.initialized = false;
-	}
-	
-	public void createOption(){
-		getToolItem().setText(TuxGuitar.getProperty("settings.config.sound"));
-		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionSound());
-		getToolItem().addSelectionListener(this);
-		
-		//---Midi Sequencer---//
-		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("midi.sequencer"));
-		
-		Composite msComposite = new Composite(getComposite(),SWT.NONE);
-		msComposite.setLayout(new GridLayout());
-		msComposite.setLayoutData(getTabbedData());
-		
-		this.msCombo = new Combo(msComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.msCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		//---Midi Port---//
-		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("midi.port"));
-		
-		Composite mpComposite = new Composite(getComposite(),SWT.NONE);
-		mpComposite.setLayout(new GridLayout());
-		mpComposite.setLayoutData(getTabbedData());
-		
-		this.mpCombo = new Combo(mpComposite, SWT.DROP_DOWN | SWT.READ_ONLY);
-		this.mpCombo.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.loadConfig();
-	}
-	
-	protected void loadConfig(){
-		new Thread(new Runnable() {
-			public void run() {
-				SoundOption.this.mpList = TuxGuitar.instance().getPlayer().listOutputPorts();
-				SoundOption.this.msList = TuxGuitar.instance().getPlayer().listSequencers();
-				
-				SoundOption.this.mpCurrentKey = getConfig().getStringConfigValue(TGConfigKeys.MIDI_PORT);
-				SoundOption.this.msCurrentKey = getConfig().getStringConfigValue(TGConfigKeys.MIDI_SEQUENCER);
-				
-				MidiSequencer sequencer = TuxGuitar.instance().getPlayer().getSequencer();
-				MidiOutputPort outputPort = TuxGuitar.instance().getPlayer().getOutputPort();
-				
-				final String msLoaded = (sequencer != null ? sequencer.getKey() : null ) ;
-				final String mpLoaded = (outputPort != null ? outputPort.getKey() : null );
-				
-				new SyncThread(new Runnable() {
-					public void run() {
-						if(!isDisposed()){
-							//---Midi Sequencer---//
-							String loadedSequencer = msLoaded;
-							for (int i = 0; i < SoundOption.this.msList.size(); i++) {
-								MidiSequencer sequencer = (MidiSequencer)SoundOption.this.msList.get(i);
-								SoundOption.this.msCombo.add(sequencer.getName());
-								if(SoundOption.this.msCurrentKey != null && SoundOption.this.msCurrentKey.equals(sequencer.getKey())){
-									SoundOption.this.msCombo.select(i);
-									loadedSequencer = null;
-								}else if(loadedSequencer != null && loadedSequencer.equals(sequencer.getKey())){
-									SoundOption.this.msCombo.select(i);
-								}
-							}
-							if(SoundOption.this.msCombo.getSelectionIndex() < 0 && SoundOption.this.msCombo.getItemCount() > 0){
-								SoundOption.this.msCombo.select(0);
-							}
-							
-							//---Midi Port---//
-							String loadedPort = mpLoaded;
-							for (int i = 0; i < SoundOption.this.mpList.size(); i++) {
-								MidiOutputPort port = (MidiOutputPort)SoundOption.this.mpList.get(i);
-								SoundOption.this.mpCombo.add(port.getName());
-								if(SoundOption.this.mpCurrentKey != null && SoundOption.this.mpCurrentKey.equals(port.getKey())){
-									SoundOption.this.mpCombo.select(i);
-									loadedPort = null;
-								}else if(loadedPort != null && loadedPort.equals(port.getKey())){
-									SoundOption.this.mpCombo.select(i);
-								}
-							}
-							if(SoundOption.this.mpCombo.getSelectionIndex() < 0 && SoundOption.this.mpCombo.getItemCount() > 0){
-								SoundOption.this.mpCombo.select(0);
-							}
-							
-							SoundOption.this.initialized = true;
-							SoundOption.this.pack();
-						}
-					}
-				}).start();
-			}
-		}).start();
-	}
-	
-	public void updateConfig(){
-		if(this.initialized){
-			int msIndex = this.msCombo.getSelectionIndex();
-			if(msIndex >= 0 && msIndex < this.msList.size()){
-				getConfig().setProperty(TGConfigKeys.MIDI_SEQUENCER, ((MidiSequencer)this.msList.get(msIndex)).getKey());
-			}
-			int mpIndex = this.mpCombo.getSelectionIndex();
-			if(mpIndex >= 0 && mpIndex < this.mpList.size()){
-				MidiOutputPort midiPort = (MidiOutputPort)this.mpList.get(mpIndex);
-				getConfig().setProperty(TGConfigKeys.MIDI_PORT, midiPort.getKey());
-			}
-		}
-	}
-	
-	public void updateDefaults(){
-		if(this.initialized){
-			getConfig().setProperty(TGConfigKeys.MIDI_PORT,getDefaults().getProperty(TGConfigKeys.MIDI_PORT));
-			getConfig().setProperty(TGConfigKeys.MIDI_SEQUENCER,getDefaults().getProperty(TGConfigKeys.MIDI_SEQUENCER));
-		}
-	}
-	
-	public void applyConfig(final boolean force){
-		if(force || this.initialized){
-			String midiSequencer = getConfig().getStringConfigValue(TGConfigKeys.MIDI_SEQUENCER);
-			if(force || !TuxGuitar.instance().getPlayer().isSequencerOpen(midiSequencer)){
-				TuxGuitar.instance().getPlayer().openSequencer(midiSequencer);
-			}
-			String midiPort = getConfig().getStringConfigValue(TGConfigKeys.MIDI_PORT);
-			if(force || !TuxGuitar.instance().getPlayer().isOutputPortOpen(midiPort)){
-				TuxGuitar.instance().getPlayer().openOutputPort(midiPort);
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/StylesOption.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/StylesOption.java
deleted file mode 100644
index 6371e88..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/StylesOption.java
+++ /dev/null
@@ -1,361 +0,0 @@
-package org.herac.tuxguitar.gui.system.config.items;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.graphics.RGB;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.ColorDialog;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.FontDialog;
-import org.eclipse.swt.widgets.ToolBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.system.config.TGConfigEditor;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-
-public class StylesOption extends Option{
-	private static final int BUTTON_WIDTH = 200;
-	private static final int BUTTON_HEIGHT = 0;
-	
-	protected boolean initialized;
-	protected FontData defaultFontData;
-	protected FontData noteFontData;
-	protected FontData timeSignatureFontData;
-	protected FontData textFontData;
-	protected FontData lyricFontData;
-	protected FontData printerDefaultFontData;
-	protected FontData printerNoteFontData;
-	protected FontData printerTSFontData;
-	protected FontData printerTextFontData;
-	protected FontData printerLyricFontData;
-	
-	protected Button defaultFontButton;
-	protected Button noteFontButton;
-	protected Button timeSignatureFontButton;
-	protected Button textFontButton;
-	protected Button lyricFontButton;
-	
-	protected Button printerDefaultFontButton;
-	protected Button printerNoteFontButton;
-	protected Button printerTSFontButton;
-	protected Button printerTextFontButton;
-	protected Button printerLyricFontButton;
-	
-	protected ButtonColor scoreNoteColorButton;
-	protected ButtonColor tabNoteColorButton;
-	protected ButtonColor playNoteColorButton;
-	protected ButtonColor linesColorButton;
-	
-	public StylesOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
-		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.styles"));
-		this.initialized = false;
-		this.defaultFontData = new FontData();
-		this.noteFontData = new FontData();
-		this.timeSignatureFontData = new FontData();
-		this.textFontData = new FontData();
-		this.lyricFontData = new FontData();
-		this.printerDefaultFontData = new FontData();
-		this.printerNoteFontData = new FontData();
-		this.printerTSFontData = new FontData();
-		this.printerTextFontData = new FontData();
-		this.printerLyricFontData = new FontData();
-	}
-	
-	public void createOption(){
-		getToolItem().setText(TuxGuitar.getProperty("settings.config.styles"));
-		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionStyle());
-		getToolItem().addSelectionListener(this);
-		
-		//=================================================== EDITOR STYLES ===================================================//
-		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.styles.general"));
-		
-		Composite composite = new Composite(getComposite(),SWT.NONE);
-		composite.setLayout(new GridLayout(2,false));
-		composite.setLayoutData(getTabbedData());
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.default"));
-		this.defaultFontButton = new Button(composite, SWT.PUSH);
-		this.defaultFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.defaultFontButton,this.defaultFontData);
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.note"));
-		this.noteFontButton = new Button(composite, SWT.PUSH);
-		this.noteFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.noteFontButton,this.noteFontData);
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.lyric"));
-		this.lyricFontButton = new Button(composite, SWT.PUSH);
-		this.lyricFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.lyricFontButton,this.lyricFontData);
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.text"));
-		this.textFontButton = new Button(composite, SWT.PUSH);
-		this.textFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.textFontButton,this.textFontData);
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.time-signature"));
-		this.timeSignatureFontButton = new Button(composite, SWT.PUSH);
-		this.timeSignatureFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.timeSignatureFontButton,this.timeSignatureFontData);
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.score-note"));
-		this.scoreNoteColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose"));
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.tab-note"));
-		this.tabNoteColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose"));
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.play-note"));
-		this.playNoteColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose"));
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.color.lines"));
-		this.linesColorButton = new ButtonColor(composite, SWT.PUSH, makeButtonData(), TuxGuitar.getProperty("choose"));
-		
-		//=================================================== PRINTER STYLES ===================================================//
-		showLabel(getComposite(),SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.styles.printer"));
-		
-		composite = new Composite(getComposite(),SWT.NONE);
-		composite.setLayout(new GridLayout(2,false));
-		composite.setLayoutData(getTabbedData());
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.default"));
-		this.printerDefaultFontButton = new Button(composite, SWT.PUSH);
-		this.printerDefaultFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.printerDefaultFontButton,this.printerDefaultFontData);
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.note"));
-		this.printerNoteFontButton = new Button(composite, SWT.PUSH);
-		this.printerNoteFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.printerNoteFontButton,this.printerNoteFontData);
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.lyric"));
-		this.printerLyricFontButton = new Button(composite, SWT.PUSH);
-		this.printerLyricFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.printerLyricFontButton,this.printerLyricFontData);
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.text"));
-		this.printerTextFontButton = new Button(composite, SWT.PUSH);
-		this.printerTextFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.printerTextFontButton,this.printerTextFontData);
-		
-		showLabel(composite,SWT.FILL,SWT.CENTER,SWT.LEFT | SWT.WRAP,SWT.NORMAL,0,TuxGuitar.getProperty("settings.config.styles.font.time-signature"));
-		this.printerTSFontButton = new Button(composite, SWT.PUSH);
-		this.printerTSFontButton.setLayoutData(makeButtonData());
-		this.addFontButtonListeners(this.printerTSFontButton,this.printerTSFontData);
-		
-		this.loadConfig();
-	}
-	
-	private void addFontButtonListeners(final Button button, final FontData fontData){
-		button.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				if(StylesOption.this.initialized){
-					Font font = new Font(getDisplay(),fontData);
-					FontData[] fontDataList = font.getFontData();
-					font.dispose();
-					FontDialog fontDialog = new FontDialog(getShell());
-					fontDialog.setFontList(fontDataList);
-					FontData result = fontDialog.open();
-					if(result != null){
-						loadFontData(result, fontData,button);
-					}
-				}
-			}
-		});
-	}
-	
-	protected void loadFontData(FontData src, FontData dst, Button button){
-		copyFontData(src, dst);
-		setButtonFontData(button, dst);
-	}
-	
-	protected void loadColor(ButtonColor button, RGB rgb){
-		button.loadColor(rgb);
-	}
-	
-	protected void setButtonFontData(Button button,FontData fontData) {
-		String text = fontData.getName();
-		if( (fontData.getStyle() & SWT.BOLD) != 0 ){
-			text += " Bold";
-		}
-		if( (fontData.getStyle() & SWT.ITALIC) != 0 ){
-			text += " Italic";
-		}
-		text += (" " + fontData.getHeight());
-		button.setText(text);
-	}
-	
-	protected void copyFontData(FontData src, FontData dst){
-		dst.setName( src.getName() );
-		dst.setStyle( src.getStyle() );
-		dst.setHeight( src.getHeight() );
-	}
-	
-	protected void copyRGB(RGB src, RGB dst){
-		dst.red = src.red;
-		dst.green = src.green;
-		dst.blue = src.blue;
-	}
-	
-	protected void loadConfig(){
-		new Thread(new Runnable() {
-			public void run() {
-				final FontData defaultFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_DEFAULT);
-				final FontData noteFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_NOTE);
-				final FontData timeSignatureFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_TIME_SIGNATURE);
-				final FontData textFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_TEXT);
-				final FontData lyricFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_LYRIC);
-				final FontData printerDefaultFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_DEFAULT);
-				final FontData printerNoteFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_NOTE);
-				final FontData printerTSFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE);
-				final FontData printerTextFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_TEXT);
-				final FontData printerLyricFontData = getConfig().getFontDataConfigValue(TGConfigKeys.FONT_PRINTER_LYRIC);
-				final RGB scoreNoteRGB  = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_SCORE_NOTE);
-				final RGB tabNoteRGB  = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_TAB_NOTE);
-				final RGB playNoteRGB  = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_PLAY_NOTE);
-				final RGB linesRGB  = getConfig().getRGBConfigValue(TGConfigKeys.COLOR_LINE);
-				new SyncThread(new Runnable() {
-					public void run() {
-						if(!isDisposed()){
-							loadFontData(defaultFontData,StylesOption.this.defaultFontData,StylesOption.this.defaultFontButton);
-							loadFontData(noteFontData,StylesOption.this.noteFontData,StylesOption.this.noteFontButton);
-							loadFontData(timeSignatureFontData,StylesOption.this.timeSignatureFontData,StylesOption.this.timeSignatureFontButton);
-							loadFontData(textFontData,StylesOption.this.textFontData,StylesOption.this.textFontButton);
-							loadFontData(lyricFontData,StylesOption.this.lyricFontData,StylesOption.this.lyricFontButton);
-							loadFontData(printerDefaultFontData,StylesOption.this.printerDefaultFontData,StylesOption.this.printerDefaultFontButton);
-							loadFontData(printerNoteFontData,StylesOption.this.printerNoteFontData,StylesOption.this.printerNoteFontButton);
-							loadFontData(printerTSFontData,StylesOption.this.printerTSFontData,StylesOption.this.printerTSFontButton);
-							loadFontData(printerTextFontData,StylesOption.this.printerTextFontData,StylesOption.this.printerTextFontButton);
-							loadFontData(printerLyricFontData,StylesOption.this.printerLyricFontData,StylesOption.this.printerLyricFontButton);
-							StylesOption.this.scoreNoteColorButton.loadColor(scoreNoteRGB);
-							StylesOption.this.tabNoteColorButton.loadColor(tabNoteRGB);
-							StylesOption.this.playNoteColorButton.loadColor(playNoteRGB);
-							StylesOption.this.linesColorButton.loadColor(linesRGB);
-							StylesOption.this.initialized = true;
-							StylesOption.this.pack();
-						}
-					}
-				}).start();
-			}
-		}).start();
-	}
-	
-	public GridData makeButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.CENTER, true, true);
-		data.minimumWidth = BUTTON_WIDTH;
-		data.minimumHeight = BUTTON_HEIGHT;
-		return data;
-	}
-	
-	public void updateConfig(){
-		if(this.initialized){
-			getConfig().setProperty(TGConfigKeys.FONT_DEFAULT,this.defaultFontData);
-			getConfig().setProperty(TGConfigKeys.FONT_NOTE,this.noteFontData);
-			getConfig().setProperty(TGConfigKeys.FONT_TIME_SIGNATURE,this.timeSignatureFontData);
-			getConfig().setProperty(TGConfigKeys.FONT_TEXT,this.textFontData);
-			getConfig().setProperty(TGConfigKeys.FONT_LYRIC,this.lyricFontData);
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_DEFAULT,this.printerDefaultFontData);
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_NOTE,this.printerNoteFontData);
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE,this.printerTSFontData);
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_TEXT,this.printerTextFontData);
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_LYRIC,this.printerLyricFontData);
-			getConfig().setProperty(TGConfigKeys.COLOR_SCORE_NOTE,this.scoreNoteColorButton.getValue());
-			getConfig().setProperty(TGConfigKeys.COLOR_TAB_NOTE,this.tabNoteColorButton.getValue());
-			getConfig().setProperty(TGConfigKeys.COLOR_PLAY_NOTE,this.playNoteColorButton.getValue());
-			getConfig().setProperty(TGConfigKeys.COLOR_LINE,this.linesColorButton.getValue());
-		}
-	}
-	
-	public void updateDefaults(){
-		if(this.initialized){
-			getConfig().setProperty(TGConfigKeys.FONT_DEFAULT,getDefaults().getProperty(TGConfigKeys.FONT_DEFAULT));
-			getConfig().setProperty(TGConfigKeys.FONT_NOTE,getDefaults().getProperty(TGConfigKeys.FONT_NOTE));
-			getConfig().setProperty(TGConfigKeys.FONT_TIME_SIGNATURE,getDefaults().getProperty(TGConfigKeys.FONT_TIME_SIGNATURE));
-			getConfig().setProperty(TGConfigKeys.FONT_TEXT,getDefaults().getProperty(TGConfigKeys.FONT_TEXT));
-			getConfig().setProperty(TGConfigKeys.FONT_LYRIC,getDefaults().getProperty(TGConfigKeys.FONT_LYRIC));
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_DEFAULT,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_DEFAULT));
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_NOTE,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_NOTE));
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_TIME_SIGNATURE));
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_TEXT,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_TEXT));
-			getConfig().setProperty(TGConfigKeys.FONT_PRINTER_LYRIC,getDefaults().getProperty(TGConfigKeys.FONT_PRINTER_LYRIC));
-			getConfig().setProperty(TGConfigKeys.COLOR_SCORE_NOTE,getDefaults().getProperty(TGConfigKeys.COLOR_SCORE_NOTE));
-			getConfig().setProperty(TGConfigKeys.COLOR_TAB_NOTE,getDefaults().getProperty(TGConfigKeys.COLOR_TAB_NOTE));
-			getConfig().setProperty(TGConfigKeys.COLOR_PLAY_NOTE,getDefaults().getProperty(TGConfigKeys.COLOR_PLAY_NOTE));
-			getConfig().setProperty(TGConfigKeys.COLOR_LINE,getDefaults().getProperty(TGConfigKeys.COLOR_LINE));
-		}
-	}
-	
-	public void applyConfig(boolean force){
-		if(force || this.initialized){
-			addSyncThread(new Runnable() {
-				public void run() {
-					TuxGuitar.instance().loadStyles();
-				}
-			});
-		}
-	}
-	
-	private class ButtonColor {
-		protected Button button;
-		protected Color color;
-		protected RGB value;
-		
-		public ButtonColor(Composite parent, int style, Object layoutData, String text){
-			this.value = new RGB(0,0,0);
-			this.button = new Button(parent, style);
-			this.button.setLayoutData(layoutData);
-			this.button.setText(text);
-			this.addListeners();
-		}
-		
-		protected void loadColor(RGB rgb){
-			this.value.red = rgb.red;
-			this.value.green = rgb.green;
-			this.value.blue = rgb.blue;
-			
-			Color color = new Color(this.button.getDisplay(), this.value);
-			this.button.setForeground(color);
-			this.disposeColor();
-			this.color = color;
-		}
-		
-		protected void disposeColor(){
-			if(this.color != null && !this.color.isDisposed()){
-				this.color.dispose();
-				this.color = null;
-			}
-		}
-		
-		private void addListeners(){
-			this.button.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent event) {
-					if(StylesOption.this.initialized){
-						ColorDialog dlg = new ColorDialog(getShell());
-						dlg.setRGB(ButtonColor.this.value);
-						dlg.setText(TuxGuitar.getProperty("choose-color"));
-						RGB result = dlg.open();
-						if (result != null) {
-							ButtonColor.this.loadColor(result);
-						}
-					}
-				}
-			});
-			this.button.addDisposeListener(new DisposeListener() {
-				public void widgetDisposed(DisposeEvent e) {
-					ButtonColor.this.disposeColor();
-				}
-			});
-		}
-		
-		protected RGB getValue(){
-			return this.value;
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/ToolBarsOption.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/ToolBarsOption.java
deleted file mode 100644
index 1eba1aa..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/config/items/ToolBarsOption.java
+++ /dev/null
@@ -1,175 +0,0 @@
-package org.herac.tuxguitar.gui.system.config.items;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.swt.widgets.ToolBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.items.ToolItems;
-import org.herac.tuxguitar.gui.system.config.TGConfigEditor;
-
-public class ToolBarsOption extends Option{
-	protected boolean initialized;
-	
-	protected Table table;
-	protected TableColumn column;
-	protected Button moveUp;
-	protected Button moveDown;
-	
-	public ToolBarsOption(TGConfigEditor configEditor,ToolBar toolBar,final Composite parent){
-		super(configEditor,toolBar,parent,TuxGuitar.getProperty("settings.config.toolbars"), SWT.FILL,SWT.FILL);
-		this.initialized = false;
-	}
-	
-	public void createOption() {
-		getToolItem().setText(TuxGuitar.getProperty("settings.config.toolbars"));
-		getToolItem().setImage(TuxGuitar.instance().getIconManager().getOptionToolbars());
-		getToolItem().addSelectionListener(this);
-		
-		showLabel(getComposite(),SWT.FILL, SWT.TOP, true, false, SWT.TOP | SWT.LEFT | SWT.WRAP,SWT.BOLD,0,TuxGuitar.getProperty("settings.config.toolbars.tip"));
-		
-		Composite composite = new Composite(getComposite(),SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(getTabbedData(SWT.FILL, SWT.FILL));
-		
-		this.table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION | SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL);
-		this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.table.setHeaderVisible(true);
-		this.table.setLinesVisible(false);
-		
-		this.column = new TableColumn(this.table, SWT.LEFT);
-		this.column.setText(TuxGuitar.getProperty("settings.config.toolbars.list"));
-		this.column.pack();
-		
-		Composite buttons = new Composite(getComposite(), SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.BOTTOM,true,false));
-		
-		this.moveUp = new Button(buttons,SWT.PUSH);
-		this.moveUp.setLayoutData(getButtonData());
-		this.moveUp.setText(TuxGuitar.getProperty("settings.config.toolbars.move-up"));
-		this.moveUp.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				moveUp();
-			}
-		});
-		
-		this.moveDown = new Button(buttons,SWT.PUSH);
-		this.moveDown.setLayoutData(getButtonData());
-		this.moveDown.setText(TuxGuitar.getProperty("settings.config.toolbars.move-down"));
-		this.moveDown.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				moveDown();
-			}
-		});
-		
-		this.loadConfig();
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected void moveUp(){
-		if(this.initialized){
-			int count = this.table.getItemCount();
-			int index = this.table.getSelectionIndex();
-			if(index > 0 && index < count){
-				TableItem item1 = this.table.getItem(index);
-				TableItem item2 = this.table.getItem(index - 1);
-				this.swapItems(item1,item2);
-				this.table.setSelection(index - 1);
-			}
-		}
-	}
-	
-	protected void moveDown(){
-		if(this.initialized){
-			int count = this.table.getItemCount();
-			int index = this.table.getSelectionIndex();
-			if(index >= 0 && index < ( count - 1 ) ){
-				TableItem item1 = this.table.getItem(index);
-				TableItem item2 = this.table.getItem(index + 1);
-				this.swapItems(item1,item2);
-				this.table.setSelection(index + 1);
-			}
-		}
-	}
-	
-	protected void swapItems(TableItem item1, TableItem item2){
-		ToolItems data1 = (ToolItems)item1.getData();
-		ToolItems data2 = (ToolItems)item2.getData();
-		loadItem(item1, data2);
-		loadItem(item2, data1);
-	}
-	
-	protected void loadItem(TableItem item, ToolItems data){
-		item.setText( TuxGuitar.getProperty( data.getName() ));
-		item.setChecked( data.isEnabled() );
-		item.setData( data );
-	}
-	
-	protected void loadConfig(){
-		new Thread(new Runnable() {
-			public void run() {
-				final ToolItems[] items = TuxGuitar.instance().getItemManager().getToolBars();
-				new SyncThread(new Runnable() {
-					public void run() {
-						if(!isDisposed()){
-							for(int i = 0;i < items.length; i ++){
-								loadItem(new TableItem(ToolBarsOption.this.table, SWT.NONE), items[i]);
-							}
-							ToolBarsOption.this.initialized = true;
-							ToolBarsOption.this.column.pack();
-							ToolBarsOption.this.pack();
-						}
-					}
-				}).start();
-			}
-		}).start();
-	}
-	
-	public void updateConfig() {
-		if(this.initialized){
-			for( int i = 0 ; i < this.table.getItemCount() ; i ++){
-				TableItem item = this.table.getItem( i );
-				ToolItems data = (ToolItems)item.getData();
-				TuxGuitar.instance().getItemManager().setToolBarStatus(data.getName(), item.getChecked() , i);
-			}
-			TuxGuitar.instance().getItemManager().writeToolBars();
-		}
-	}
-	
-	public void updateDefaults() {
-		if(this.initialized){
-			TuxGuitar.instance().getItemManager().setDefaultToolBars();
-			TuxGuitar.instance().getItemManager().writeToolBars();
-		}
-	}
-	
-	public void applyConfig(boolean force){
-		if(force || (this.initialized && TuxGuitar.instance().getItemManager().shouldReloadToolBars())){
-			addSyncThread(new Runnable() {
-				public void run() {
-					TuxGuitar.instance().loadToolBars();
-				}
-			});
-		}
-	}
-	
-	public Point computeSize(){
-		return this.computeSize(SWT.DEFAULT,SWT.NONE);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/icons/IconLoader.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/icons/IconLoader.java
deleted file mode 100644
index 2e00070..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/icons/IconLoader.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.herac.tuxguitar.gui.system.icons;
-
-public interface IconLoader {
-	
-	public void loadIcons();
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/icons/IconManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/icons/IconManager.java
deleted file mode 100644
index ab8992a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/icons/IconManager.java
+++ /dev/null
@@ -1,828 +0,0 @@
-package org.herac.tuxguitar.gui.system.icons;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Resource;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-import org.herac.tuxguitar.song.models.TGDuration;
-
-public class IconManager {
-	private String theme;
-	private List loaders;
-	private List disposableIcons;
-	
-	private Image[] durations;
-	private Image editUndo;
-	private Image editRedo;
-	private Image editVoice1;
-	private Image editVoice2;
-	private Image editModeSelection;
-	private Image editModeEdition;
-	private Image editModeEditionNotNatural;
-	private Image layoutPage;
-	private Image layoutLinear;
-	private Image layoutMultitrack;
-	private Image layoutScore;
-	private Image layoutCompact;
-	private Image transport;
-	private Image transportFirst1;
-	private Image transportFirst2;
-	private Image transportLast1;
-	private Image transportLast2;
-	private Image transportPrevious1;
-	private Image transportPrevious2;
-	private Image transportNext1;
-	private Image transportNext2;
-	private Image transportStop1;
-	private Image transportStop2;
-	private Image transportPlay1;
-	private Image transportPlay2;
-	private Image transportPause;
-	private Image transportIconFirst1;
-	private Image transportIconFirst2;
-	private Image transportIconLast1;
-	private Image transportIconLast2;
-	private Image transportIconPrevious1;
-	private Image transportIconPrevious2;
-	private Image transportIconNext1;
-	private Image transportIconNext2;
-	private Image transportIconStop1;
-	private Image transportIconStop2;
-	private Image transportIconPlay1;
-	private Image transportIconPlay2;
-	private Image transportIconPause;
-	private Image transportMetronome;
-	private Image transportMode;
-	private Image markerList;
-	private Image markerAdd;
-	private Image markerRemove;
-	private Image markerFirst;
-	private Image markerLast;
-	private Image markerPrevious;
-	private Image markerNext;
-	private Image aboutDescription;
-	private Image aboutLicense;
-	private Image aboutAuthors;
-	private Image appIcon;
-	private Image appSplash;
-	private Image optionMain;
-	private Image optionStyle;
-	private Image optionSound;
-	private Image optionLanguage;
-	private Image optionToolbars;
-	private Image optionSkin;
-	private Image trackAdd;
-	private Image trackRemove;
-	private Image paintableTempo;
-	private Image paintableGrace;
-	private Image fretboard;
-	private Image fretboardFirstFret;
-	private Image fretboardFret;
-	private Image compositionTimeSignature;
-	private Image compositionTempo;
-	private Image compositionRepeatOpen;
-	private Image compositionRepeatClose;
-	private Image compositionRepeatAlternative;
-	private Image songProperties;
-	private Image durationDotted;
-	private Image durationDoubleDotted;
-	private Image divisionType;
-	private Image fileNew;
-	private Image fileOpen;
-	private Image fileSave;
-	private Image fileSaveAs;
-	private Image filePrint;
-	private Image filePrintPreview;
-	private Image chord;
-	private Image noteTied;
-	private Image mixer;
-	private Image dynamicPPP;
-	private Image dynamicPP;
-	private Image dynamicP;
-	private Image dynamicMP;
-	private Image dynamicMF;
-	private Image dynamicF;
-	private Image dynamicFF;
-	private Image dynamicFFF;
-	private Image effectDead;
-	private Image effectGhost;
-	private Image effectAccentuated;
-	private Image effectHeavyAccentuated;
-	private Image effectHarmonic;
-	private Image effectGrace;
-	private Image effectBend;
-	private Image effectTremoloBar;
-	private Image effectSlide;
-	private Image effectHammer;
-	private Image effectVibrato;
-	private Image effectTrill;
-	private Image effectTremoloPicking;
-	private Image effectPalmMute;
-	private Image effectStaccato;
-	private Image effectTapping;
-	private Image effectSlapping;
-	private Image effectPopping;
-	private Image effectFadeIn;
-	private Image browserNew;
-	private Image browserFile;
-	private Image browserFolder;
-	private Image browserRoot;
-	private Image browserBack;
-	private Image browserRefresh;
-	private Image settings;
-	
-	public IconManager(){
-		this.loaders = new ArrayList();
-		this.disposableIcons = new ArrayList();
-		this.loadIcons();
-	}
-	
-	public void addLoader(IconLoader loader){
-		if( !this.loaders.contains( loader )){
-			this.loaders.add(loader);
-		}
-	}
-	
-	public void removeLoader(IconLoader loader){
-		if( this.loaders.contains( loader )){
-			this.loaders.remove(loader);
-		}
-	}
-	
-	private void fireChanges(){
-		Iterator it = this.loaders.iterator();
-		while(it.hasNext()){
-			IconLoader loader = (IconLoader)it.next();
-			loader.loadIcons();
-		}
-	}
-	
-	public void reloadIcons(){
-		List disposableIcons = purgeDisposableIcons();
-		this.loadIcons();
-		this.fireChanges();
-		this.disposeIcons(disposableIcons);
-	}
-	
-	public void loadIcons(){
-		this.theme = TuxGuitar.instance().getConfig().getStringConfigValue(TGConfigKeys.SKIN);
-		this.durations = new Image[]{
-			loadIcon("1.png"),
-			loadIcon("2.png"),
-			loadIcon("4.png"),
-			loadIcon("8.png"),
-			loadIcon("16.png"),
-			loadIcon("32.png"),
-			loadIcon("64.png")
-		};
-		this.paintableTempo = loadIcon("tempo.png");
-		this.paintableGrace = loadIcon("grace.png");
-		this.layoutPage = loadIcon("layout_page.png");
-		this.layoutLinear = loadIcon("layout_linear.png");
-		this.layoutMultitrack = loadIcon("layout_multitrack.png");
-		this.layoutScore = loadIcon("layout_score.png");
-		this.layoutCompact = loadIcon("layout_compact.png");
-		this.fileNew = loadIcon("new.png");
-		this.fileOpen = loadIcon("open.png");
-		this.fileSave = loadIcon("save.png");
-		this.fileSaveAs = loadIcon("save-as.png");
-		this.filePrint = loadIcon("print.png");
-		this.filePrintPreview = loadIcon("print-preview.png");
-		this.editUndo = loadIcon("edit_undo.png");
-		this.editRedo = loadIcon("edit_redo.png");
-		this.editVoice1 = loadIcon("edit_voice_1.png");
-		this.editVoice2 = loadIcon("edit_voice_2.png");
-		this.editModeSelection = loadIcon("edit_mode_selection.png");
-		this.editModeEdition = loadIcon("edit_mode_edition.png");
-		this.editModeEditionNotNatural = loadIcon("edit_mode_edition_no_natural.png");
-		this.appIcon = loadIcon("icon.png");
-		this.appSplash = loadIcon("splash.png");
-		this.aboutDescription = loadIcon("about_description.png");
-		this.aboutLicense = loadIcon("about_license.png");
-		this.aboutAuthors = loadIcon("about_authors.png");
-		this.optionMain = loadIcon("option_view.png");
-		this.optionStyle = loadIcon("option_style.png");
-		this.optionSound = loadIcon("option_sound.png");
-		this.optionSkin = loadIcon("option_skin.png");
-		this.optionLanguage= loadIcon("option_language.png");
-		this.optionToolbars = loadIcon("option_toolbars.png");
-		this.compositionTimeSignature = loadIcon("timesignature.png");
-		this.compositionTempo = loadIcon("tempoicon.png");
-		this.compositionRepeatOpen = loadIcon("openrepeat.png");
-		this.compositionRepeatClose = loadIcon("closerepeat.png");
-		this.compositionRepeatAlternative = loadIcon("repeat_alternative.png");
-		this.songProperties = loadIcon("song_properties.png");
-		this.trackAdd = loadIcon("track_add.png");
-		this.trackRemove = loadIcon("track_remove.png");
-		this.durationDotted = loadIcon("dotted.png");
-		this.durationDoubleDotted = loadIcon("doubledotted.png");
-		this.divisionType = loadIcon("division-type.png");
-		this.fretboard = loadIcon("fretboard.png");
-		this.fretboardFirstFret = loadIcon("firstfret.png");
-		this.fretboardFret = loadIcon("fret.png");
-		this.chord = loadIcon("chord.png");
-		this.noteTied = loadIcon("tiednote.png");
-		this.transport = loadIcon("transport.png");
-		this.transportFirst1 = loadIcon("transport_first_1.png");
-		this.transportFirst2 = loadIcon("transport_first_2.png");
-		this.transportLast1 = loadIcon("transport_last_1.png");
-		this.transportLast2 = loadIcon("transport_last_2.png");
-		this.transportPrevious1 = loadIcon("transport_previous_1.png");
-		this.transportPrevious2 = loadIcon("transport_previous_2.png");
-		this.transportNext1 = loadIcon("transport_next_1.png");
-		this.transportNext2 = loadIcon("transport_next_2.png");
-		this.transportStop1 = loadIcon("transport_stop_1.png");
-		this.transportStop2 = loadIcon("transport_stop_2.png");
-		this.transportPlay1 = loadIcon("transport_play_1.png");
-		this.transportPlay2 = loadIcon("transport_play_2.png");
-		this.transportPause = loadIcon("transport_pause.png");
-		this.transportIconFirst1 = loadIcon("transport_icon_first_1.png");
-		this.transportIconFirst2 = loadIcon("transport_icon_first_2.png");
-		this.transportIconLast1 = loadIcon("transport_icon_last_1.png");
-		this.transportIconLast2 = loadIcon("transport_icon_last_2.png");
-		this.transportIconPrevious1 = loadIcon("transport_icon_previous_1.png");
-		this.transportIconPrevious2 = loadIcon("transport_icon_previous_2.png");
-		this.transportIconNext1 = loadIcon("transport_icon_next_1.png");
-		this.transportIconNext2 = loadIcon("transport_icon_next_2.png");
-		this.transportIconStop1 = loadIcon("transport_icon_stop_1.png");
-		this.transportIconStop2 = loadIcon("transport_icon_stop_2.png");
-		this.transportIconPlay1 = loadIcon("transport_icon_play_1.png");
-		this.transportIconPlay2 = loadIcon("transport_icon_play_2.png");
-		this.transportIconPause = loadIcon("transport_icon_pause.png");
-		this.transportMetronome = loadIcon("transport_metronome.png");
-		this.transportMode = loadIcon("transport_mode.png");
-		this.markerList = loadIcon("marker_list.png");
-		this.markerAdd = loadIcon("marker_add.png");
-		this.markerRemove = loadIcon("marker_remove.png");
-		this.markerFirst = loadIcon("marker_first.png");
-		this.markerLast = loadIcon("marker_last.png");
-		this.markerPrevious = loadIcon("marker_previous.png");
-		this.markerNext = loadIcon("marker_next.png");
-		this.mixer = loadIcon("mixer.png");
-		this.dynamicPPP = loadIcon("dynamic_ppp.png");
-		this.dynamicPP = loadIcon("dynamic_pp.png");
-		this.dynamicP = loadIcon("dynamic_p.png");
-		this.dynamicMP =loadIcon("dynamic_mp.png");
-		this.dynamicMF = loadIcon("dynamic_mf.png");
-		this.dynamicF = loadIcon("dynamic_f.png");
-		this.dynamicFF = loadIcon("dynamic_ff.png");
-		this.dynamicFFF = loadIcon("dynamic_fff.png");
-		this.effectDead = loadIcon("effect_dead.png");
-		this.effectGhost = loadIcon("effect_ghost.png");
-		this.effectAccentuated = loadIcon("effect_accentuated.png");
-		this.effectHeavyAccentuated = loadIcon("effect_heavy_accentuated.png");
-		this.effectHarmonic = loadIcon("effect_harmonic.png");
-		this.effectGrace = loadIcon("effect_grace.png");
-		this.effectBend = loadIcon("effect_bend.png");
-		this.effectTremoloBar = loadIcon("effect_tremolo_bar.png");
-		this.effectSlide = loadIcon("effect_slide.png");
-		this.effectHammer = loadIcon("effect_hammer.png");
-		this.effectVibrato = loadIcon("effect_vibrato.png");
-		this.effectTrill= loadIcon("effect_trill.png");
-		this.effectTremoloPicking = loadIcon("effect_tremolo_picking.png");
-		this.effectPalmMute= loadIcon("effect_palm_mute.png");
-		this.effectStaccato = loadIcon("effect_staccato.png");
-		this.effectTapping = loadIcon("effect_tapping.png");
-		this.effectSlapping = loadIcon("effect_slapping.png");
-		this.effectPopping = loadIcon("effect_popping.png");
-		this.effectFadeIn = loadIcon("effect_fade_in.png");
-		this.browserNew = loadIcon("browser_new.png");
-		this.browserFile = loadIcon("browser_file.png");
-		this.browserFolder = loadIcon("browser_folder.png");
-		this.browserRoot = loadIcon("browser_root.png");
-		this.browserBack = loadIcon("browser_back.png");
-		this.browserRefresh = loadIcon("browser_refresh.png");
-		this.settings = loadIcon("settings.png");
-	}
-	
-	private Image loadIcon(String name){
-		Image image = TGFileUtils.loadImage(this.theme,name);
-		this.disposableIcons.add(image);
-		return image;
-	}
-	
-	private List purgeDisposableIcons(){
-		List disposableIcons = new ArrayList();
-		Iterator it = this.disposableIcons.iterator();
-		while( it.hasNext() ){
-			Resource resource = (Resource)it.next();
-			disposableIcons.add( resource );
-		}
-		this.disposableIcons.clear();
-		return disposableIcons;
-	}
-	
-	public void disposeIcons(List resources){
-		Iterator it = resources.iterator();
-		while( it.hasNext() ){
-			Image image = (Image)it.next();
-			image.dispose();
-		}
-	}
-	
-	public void disposeIcons(){
-		this.disposeIcons(purgeDisposableIcons());
-	}
-	
-	public boolean shouldReload(){
-		return (!this.theme.equals(TuxGuitar.instance().getConfig().getStringConfigValue(TGConfigKeys.SKIN)));
-	}
-	
-	public Image getDuration(int value){
-		switch(value){
-		case TGDuration.WHOLE:
-			return this.durations[0];
-		case TGDuration.HALF:
-			return this.durations[1];
-		case TGDuration.QUARTER:
-			return this.durations[2];
-		case TGDuration.EIGHTH:
-			return this.durations[3];
-		case TGDuration.SIXTEENTH:
-			return this.durations[4];
-		case TGDuration.THIRTY_SECOND:
-			return this.durations[5];
-		case TGDuration.SIXTY_FOURTH:
-			return this.durations[6];
-		}
-		return null;
-	}
-	
-	public Image getAboutAuthors() {
-		return this.aboutAuthors;
-	}
-	
-	public Image getAboutDescription() {
-		return this.aboutDescription;
-	}
-	
-	public Image getAboutLicense() {
-		return this.aboutLicense;
-	}
-	
-	public Image getAppIcon() {
-		return this.appIcon;
-	}
-	
-	public Image getAppSplash() {
-		return this.appSplash;
-	}
-	
-	public Image getChord() {
-		return this.chord;
-	}
-	
-	public Image getCompositionRepeatClose() {
-		return this.compositionRepeatClose;
-	}
-	
-	public Image getCompositionRepeatAlternative() {
-		return this.compositionRepeatAlternative;
-	}
-	
-	public Image getCompositionRepeatOpen() {
-		return this.compositionRepeatOpen;
-	}
-	
-	public Image getCompositionTempo() {
-		return this.compositionTempo;
-	}
-	
-	public Image getCompositionTimeSignature() {
-		return this.compositionTimeSignature;
-	}
-	
-	public Image getDurationDotted() {
-		return this.durationDotted;
-	}
-	
-	public Image getDurationDoubleDotted() {
-		return this.durationDoubleDotted;
-	}
-	
-	public Image getDivisionType() {
-		return this.divisionType;
-	}
-	
-	public Image getDynamicF() {
-		return this.dynamicF;
-	}
-	
-	public Image getDynamicFF() {
-		return this.dynamicFF;
-	}
-	
-	public Image getDynamicFFF() {
-		return this.dynamicFFF;
-	}
-	
-	public Image getDynamicMF() {
-		return this.dynamicMF;
-	}
-	
-	public Image getDynamicMP() {
-		return this.dynamicMP;
-	}
-	
-	public Image getDynamicP() {
-		return this.dynamicP;
-	}
-	
-	public Image getDynamicPP() {
-		return this.dynamicPP;
-	}
-	
-	public Image getDynamicPPP() {
-		return this.dynamicPPP;
-	}
-	
-	public Image getEditModeEdition() {
-		return this.editModeEdition;
-	}
-	
-	public Image getEditModeEditionNotNatural() {
-		return this.editModeEditionNotNatural;
-	}
-	
-	public Image getEditModeSelection() {
-		return this.editModeSelection;
-	}
-	
-	public Image getEditRedo() {
-		return this.editRedo;
-	}
-	
-	public Image getEditUndo() {
-		return this.editUndo;
-	}
-	
-	public Image getEditVoice1() {
-		return this.editVoice1;
-	}
-	
-	public Image getEditVoice2() {
-		return this.editVoice2;
-	}
-	
-	public Image getEffectAccentuated() {
-		return this.effectAccentuated;
-	}
-	
-	public Image getEffectBend() {
-		return this.effectBend;
-	}
-	
-	public Image getEffectDead() {
-		return this.effectDead;
-	}
-	
-	public Image getEffectFadeIn() {
-		return this.effectFadeIn;
-	}
-	
-	public Image getEffectGhost() {
-		return this.effectGhost;
-	}
-	
-	public Image getEffectGrace() {
-		return this.effectGrace;
-	}
-	
-	public Image getEffectHammer() {
-		return this.effectHammer;
-	}
-	
-	public Image getEffectHarmonic() {
-		return this.effectHarmonic;
-	}
-	
-	public Image getEffectHeavyAccentuated() {
-		return this.effectHeavyAccentuated;
-	}
-	
-	public Image getEffectPalmMute() {
-		return this.effectPalmMute;
-	}
-	
-	public Image getEffectPopping() {
-		return this.effectPopping;
-	}
-	
-	public Image getEffectSlapping() {
-		return this.effectSlapping;
-	}
-	
-	public Image getEffectSlide() {
-		return this.effectSlide;
-	}
-	
-	public Image getEffectStaccato() {
-		return this.effectStaccato;
-	}
-	
-	public Image getEffectTapping() {
-		return this.effectTapping;
-	}
-	
-	public Image getEffectTremoloBar() {
-		return this.effectTremoloBar;
-	}
-	
-	public Image getEffectTremoloPicking() {
-		return this.effectTremoloPicking;
-	}
-	
-	public Image getEffectTrill() {
-		return this.effectTrill;
-	}
-	
-	public Image getEffectVibrato() {
-		return this.effectVibrato;
-	}
-	
-	public Image getFileNew() {
-		return this.fileNew;
-	}
-	
-	public Image getFileOpen() {
-		return this.fileOpen;
-	}
-	
-	public Image getFilePrint() {
-		return this.filePrint;
-	}
-	
-	public Image getFilePrintPreview() {
-		return this.filePrintPreview;
-	}
-	
-	public Image getFileSave() {
-		return this.fileSave;
-	}
-	
-	public Image getFileSaveAs() {
-		return this.fileSaveAs;
-	}
-	
-	public Image getFretboard() {
-		return this.fretboard;
-	}
-	
-	public Image getFretboardFirstFret() {
-		return this.fretboardFirstFret;
-	}
-	
-	public Image getFretboardFret() {
-		return this.fretboardFret;
-	}
-	
-	public Image getLayoutLinear() {
-		return this.layoutLinear;
-	}
-	
-	public Image getLayoutMultitrack() {
-		return this.layoutMultitrack;
-	}
-	
-	public Image getLayoutPage() {
-		return this.layoutPage;
-	}
-	
-	public Image getLayoutScore() {
-		return this.layoutScore;
-	}
-	
-	public Image getLayoutCompact() {
-		return this.layoutCompact;
-	}
-	
-	public Image getMarkerAdd() {
-		return this.markerAdd;
-	}
-	
-	public Image getMarkerFirst() {
-		return this.markerFirst;
-	}
-	
-	public Image getMarkerLast() {
-		return this.markerLast;
-	}
-	
-	public Image getMarkerList() {
-		return this.markerList;
-	}
-	
-	public Image getMarkerNext() {
-		return this.markerNext;
-	}
-	
-	public Image getMarkerPrevious() {
-		return this.markerPrevious;
-	}
-	
-	public Image getMarkerRemove() {
-		return this.markerRemove;
-	}
-	
-	public Image getMixer() {
-		return this.mixer;
-	}
-	
-	public Image getNoteTied() {
-		return this.noteTied;
-	}
-	
-	public Image getOptionLanguage() {
-		return this.optionLanguage;
-	}
-	
-	public Image getOptionMain() {
-		return this.optionMain;
-	}
-	
-	public Image getOptionSound() {
-		return this.optionSound;
-	}
-	
-	public Image getOptionStyle() {
-		return this.optionStyle;
-	}
-	
-	public Image getOptionToolbars() {
-		return this.optionToolbars;
-	}
-	
-	public Image getOptionSkin() {
-		return this.optionSkin;
-	}
-	
-	public Image getPaintableGrace() {
-		return this.paintableGrace;
-	}
-	
-	public Image getPaintableTempo() {
-		return this.paintableTempo;
-	}
-	
-	public Image getSongProperties() {
-		return this.songProperties;
-	}
-	
-	public Image getTrackAdd() {
-		return this.trackAdd;
-	}
-	
-	public Image getTrackRemove() {
-		return this.trackRemove;
-	}
-	
-	public Image getTransport() {
-		return this.transport;
-	}
-	
-	public Image getTransportFirst1() {
-		return this.transportFirst1;
-	}
-	
-	public Image getTransportFirst2() {
-		return this.transportFirst2;
-	}
-	
-	public Image getTransportIconFirst1() {
-		return this.transportIconFirst1;
-	}
-	
-	public Image getTransportIconFirst2() {
-		return this.transportIconFirst2;
-	}
-	
-	public Image getTransportIconLast1() {
-		return this.transportIconLast1;
-	}
-	
-	public Image getTransportIconLast2() {
-		return this.transportIconLast2;
-	}
-	
-	public Image getTransportIconNext1() {
-		return this.transportIconNext1;
-	}
-	
-	public Image getTransportIconNext2() {
-		return this.transportIconNext2;
-	}
-	
-	public Image getTransportIconPause() {
-		return this.transportIconPause;
-	}
-	
-	public Image getTransportIconPlay1() {
-		return this.transportIconPlay1;
-	}
-	
-	public Image getTransportIconPlay2() {
-		return this.transportIconPlay2;
-	}
-	
-	public Image getTransportIconPrevious1() {
-		return this.transportIconPrevious1;
-	}
-	
-	public Image getTransportIconPrevious2() {
-		return this.transportIconPrevious2;
-	}
-	
-	public Image getTransportIconStop1() {
-		return this.transportIconStop1;
-	}
-	
-	public Image getTransportIconStop2() {
-		return this.transportIconStop2;
-	}
-	
-	public Image getTransportLast1() {
-		return this.transportLast1;
-	}
-	
-	public Image getTransportLast2() {
-		return this.transportLast2;
-	}
-	
-	public Image getTransportNext1() {
-		return this.transportNext1;
-	}
-	
-	public Image getTransportNext2() {
-		return this.transportNext2;
-	}
-	
-	public Image getTransportPause() {
-		return this.transportPause;
-	}
-	
-	public Image getTransportPlay1() {
-		return this.transportPlay1;
-	}
-	
-	public Image getTransportPlay2() {
-		return this.transportPlay2;
-	}
-	
-	public Image getTransportPrevious1() {
-		return this.transportPrevious1;
-	}
-	
-	public Image getTransportPrevious2() {
-		return this.transportPrevious2;
-	}
-	
-	public Image getTransportStop1() {
-		return this.transportStop1;
-	}
-	
-	public Image getTransportStop2() {
-		return this.transportStop2;
-	}
-	
-	public Image getTransportMetronome() {
-		return this.transportMetronome;
-	}
-	
-	public Image getTransportMode() {
-		return this.transportMode;
-	}
-	
-	public Image getBrowserBack() {
-		return this.browserBack;
-	}
-	
-	public Image getBrowserFile() {
-		return this.browserFile;
-	}
-	
-	public Image getBrowserFolder() {
-		return this.browserFolder;
-	}
-	
-	public Image getBrowserRefresh() {
-		return this.browserRefresh;
-	}
-	
-	public Image getBrowserRoot() {
-		return this.browserRoot;
-	}
-	
-	public Image getBrowserNew() {
-		return this.browserNew;
-	}
-	
-	public Image getSettings() {
-		return this.settings;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBinding.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBinding.java
deleted file mode 100644
index 0d1937e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBinding.java
+++ /dev/null
@@ -1,127 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings;
-
-public class KeyBinding {
-	
-	public static final String MASK_SEPARATOR = "+";
-	
-	private int mask;
-	private int key;
-	
-	public KeyBinding(int key,int mask){
-		this.key = key;
-		this.mask = mask;
-	}
-	
-	public KeyBinding(){
-		this(0,0);
-	}
-	
-	public int getKey() {
-		return this.key;
-	}
-	
-	public void setKey(int key) {
-		this.key = key;
-	}
-	
-	public int getMask() {
-		return this.mask;
-	}
-	
-	public void setMask(int mask) {
-		this.mask = mask;
-	}
-	
-	private String getSpecialKey(){
-		for(int i = 0; i < KeyConversion.relations.length; i++){
-			if (this.key == KeyConversion.relations[i].getCode()){
-				return KeyConversion.relations[i].getKey();
-			}
-		}
-		return null;
-	}
-	
-	private String getSpecialMask(){
-		String mask = new String();
-		for(int i = 0; i < KeyConversion.relations.length; i++){
-			if ( (this.mask & KeyConversion.relations[i].getCode()) == KeyConversion.relations[i].getCode()){
-				mask += KeyConversion.relations[i].getKey() + MASK_SEPARATOR;
-			}
-		}
-		return mask;
-	}
-	
-	public boolean isSameAs(KeyBinding kb){
-		if( kb != null ){
-			return (this.key == kb.key && this.mask == kb.mask);
-		}
-		return false;
-	}
-	
-	public String toString(){
-		String mask = getSpecialMask();
-		String key = getSpecialKey();
-		return (key != null ? (mask + key) : (mask + (char)this.key) );
-	}
-	
-	public Object clone(){
-		return new KeyBinding(getKey(),getMask());
-	}
-}
-
-class KeyConversion {
-	
-	protected static final KeyConversion[] relations = new KeyConversion[]{
-		new KeyConversion("F1",KeyBindingConstants.F1),
-		new KeyConversion("F2",KeyBindingConstants.F2),
-		new KeyConversion("F3",KeyBindingConstants.F3),
-		new KeyConversion("F4",KeyBindingConstants.F4),
-		new KeyConversion("F5",KeyBindingConstants.F5),
-		new KeyConversion("F6",KeyBindingConstants.F6),
-		new KeyConversion("F7",KeyBindingConstants.F7),
-		new KeyConversion("F8",KeyBindingConstants.F8),
-		new KeyConversion("F9",KeyBindingConstants.F9),
-		new KeyConversion("F10",KeyBindingConstants.F10),
-		new KeyConversion("F11",KeyBindingConstants.F11),
-		new KeyConversion("F12",KeyBindingConstants.F12),
-		new KeyConversion("Esc",KeyBindingConstants.ESC),
-		new KeyConversion("Pause",KeyBindingConstants.PAUSE),
-		new KeyConversion("Print",KeyBindingConstants.PRINT_SCREEN),
-		new KeyConversion("Ins",KeyBindingConstants.INSERT),
-		new KeyConversion("Del",KeyBindingConstants.DELETE),
-		new KeyConversion("Home",KeyBindingConstants.HOME),
-		new KeyConversion("PgUp",KeyBindingConstants.PAGE_UP),
-		new KeyConversion("PgDn",KeyBindingConstants.PAGE_DOWN),
-		new KeyConversion("End",KeyBindingConstants.END),
-		new KeyConversion("Up",KeyBindingConstants.UP),
-		new KeyConversion("Down",KeyBindingConstants.DOWN),
-		new KeyConversion("Left",KeyBindingConstants.LEFT),
-		new KeyConversion("Right",KeyBindingConstants.RIGHT),
-		new KeyConversion("Control",KeyBindingConstants.CONTROL),
-		new KeyConversion("\u2318",KeyBindingConstants.COMMAND),
-		new KeyConversion("Shift",KeyBindingConstants.SHIFT),
-		new KeyConversion("Alt",KeyBindingConstants.ALT),
-		new KeyConversion("Tab",KeyBindingConstants.TAB),
-		new KeyConversion("Space",KeyBindingConstants.SPACE),
-		new KeyConversion("Enter",KeyBindingConstants.ENTER),
-		new KeyConversion("*",KeyBindingConstants.KEYPAD_MULTIPLY),
-		new KeyConversion("/",KeyBindingConstants.KEYPAD_DIVIDE),
-		new KeyConversion(".",KeyBindingConstants.KEYPAD_DECIMAL),
-	};
-	
-	private String key;
-	private int code;
-	
-	private KeyConversion(String key,int code){
-		this.key = key;
-		this.code = code;
-	}
-	
-	public String getKey(){
-		return this.key;
-	}
-	
-	public int getCode(){
-		return this.code;
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingAction.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingAction.java
deleted file mode 100644
index 5aa79f0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingAction.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings;
-
-public class KeyBindingAction {
-	
-	private String action;
-	private KeyBinding keyBinding;
-	
-	public KeyBindingAction(String action,KeyBinding keyBinding){
-		this.action = action;
-		this.keyBinding = keyBinding;
-	}
-	
-	public String getAction() {
-		return this.action;
-	}
-	
-	public void setAction(String action) {
-		this.action = action;
-	}
-	
-	public KeyBinding getKeyBinding() {
-		return this.keyBinding;
-	}
-	
-	public void setKeyBinding(KeyBinding keyBinding) {
-		this.keyBinding = keyBinding;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionDefaults.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionDefaults.java
deleted file mode 100644
index 360dfc8..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionDefaults.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings;
-
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.system.keybindings.xml.KeyBindingReader;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-public class KeyBindingActionDefaults {
-
-	private static final String DEFAULT_SHORTCUT_FILE = "shortcuts-default.xml";
-
-	public static List getDefaultKeyBindings() {
-		List list = new ArrayList();
-		try {
-			InputStream stream = TGFileUtils.getResourceAsStream(DEFAULT_SHORTCUT_FILE);
-			if (stream != null) {
-				List defaults = KeyBindingReader.getKeyBindings(stream);
-				if (defaults != null) {
-					list.addAll(defaults);
-				}
-			}
-		} catch (Throwable throwable) {
-			throwable.printStackTrace();
-		}
-		return list;
-
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionManager.java
deleted file mode 100644
index 2620067..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingActionManager.java
+++ /dev/null
@@ -1,100 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.KeyListener;
-import org.eclipse.swt.widgets.Control;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.system.keybindings.xml.KeyBindingReader;
-import org.herac.tuxguitar.gui.system.keybindings.xml.KeyBindingWriter;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-public class KeyBindingActionManager {
-	
-	private List keyBindingsActions;
-	private KeyBindingListener listener;
-	
-	public KeyBindingActionManager(){
-		this.keyBindingsActions = new ArrayList();
-		this.init();
-	}
-	
-	public void init(){
-		List enabled = KeyBindingReader.getKeyBindings(getUserFileName());
-		this.keyBindingsActions.addAll( (enabled != null ? enabled : KeyBindingActionDefaults.getDefaultKeyBindings()) );
-		this.listener = new KeyBindingListener();
-	}
-	
-	private String getUserFileName(){
-		return TGFileUtils.PATH_USER_CONFIG + File.separator + "shortcuts.xml";
-	}
-	
-	public Action getActionForKeyBinding(KeyBinding kb){
-		Action action = KeyBindingReserveds.getActionForKeyBinding(kb);
-		if(action != null){
-			return action;
-		}
-		Iterator it = this.keyBindingsActions.iterator();
-		while(it.hasNext()){
-			KeyBindingAction keyBindingAction = (KeyBindingAction)it.next();
-			if(keyBindingAction.getKeyBinding() != null && kb.isSameAs( keyBindingAction.getKeyBinding() )){
-				return TuxGuitar.instance().getAction(keyBindingAction.getAction());
-			}
-		}
-		return null;
-	}
-	
-	public KeyBinding getKeyBindingForAction(String action){
-		KeyBinding kb = KeyBindingReserveds.getKeyBindingForAction(action);
-		if(kb != null){
-			return kb;
-		}
-		Iterator it = this.keyBindingsActions.iterator();
-		while(it.hasNext()){
-			KeyBindingAction keyBindingAction = (KeyBindingAction)it.next();
-			if(action.equals( keyBindingAction.getAction() )){
-				return keyBindingAction.getKeyBinding();
-			}
-		}
-		return null;
-	}
-	
-	public void reset(List keyBindings){
-		this.keyBindingsActions.clear();
-		this.keyBindingsActions.addAll(keyBindings);
-	}
-	
-	public List getKeyBindingActions(){
-		return this.keyBindingsActions;
-	}
-	
-	public void saveKeyBindings(){
-		KeyBindingWriter.setBindings(getKeyBindingActions(),getUserFileName());
-	}
-	
-	public void appendListenersTo(Control control){
-		control.addKeyListener(this.listener);
-	}
-	
-	protected class KeyBindingListener implements KeyListener {
-		
-		public void keyPressed(KeyEvent event) {
-			KeyBinding kb = new KeyBinding();
-			kb.setKey(event.keyCode);
-			kb.setMask(event.stateMask);
-			Action action = getActionForKeyBinding(kb);
-			if (action != null){
-				action.process(event);
-			}
-		}
-		
-		public void keyReleased(KeyEvent evt) {
-			//not implemented
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingConstants.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingConstants.java
deleted file mode 100644
index a6ecaee..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingConstants.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings;
-
-import org.eclipse.swt.SWT;
-
-public class KeyBindingConstants{
-	
-	public static final int F1 = SWT.F1;
-	
-	public static final int F2 = SWT.F2;
-	
-	public static final int F3 = SWT.F3;
-	
-	public static final int F4 = SWT.F4;
-	
-	public static final int F5 = SWT.F5;
-	
-	public static final int F6 = SWT.F6;
-	
-	public static final int F7 = SWT.F7;
-	
-	public static final int F8 = SWT.F8;
-	
-	public static final int F9 = SWT.F9;
-	
-	public static final int F10 = SWT.F10;
-	
-	public static final int F11 = SWT.F11;
-	
-	public static final int F12 = SWT.F12;
-	
-	public static final int ESC = SWT.ESC;
-	
-	public static final int PAUSE = SWT.PAUSE;
-	
-	public static final int PRINT_SCREEN = SWT.PRINT_SCREEN;
-	
-	public static final int INSERT = SWT.INSERT;
-	
-	public static final int DELETE = SWT.DEL;
-	
-	public static final int HOME = SWT.HOME;
-	
-	public static final int PAGE_UP = SWT.PAGE_UP;
-	
-	public static final int PAGE_DOWN = SWT.PAGE_DOWN;
-	
-	public static final int END = SWT.END;
-	
-	public static final int ALT = SWT.ALT;
-	
-	public static final int CONTROL = SWT.CONTROL;
-	
-	public static final int COMMAND = SWT.COMMAND;
-	
-	public static final int SHIFT = SWT.SHIFT;
-	
-	public static final int TAB = SWT.TAB;
-	
-	public static final int BACKSPACE = SWT.BS;
-	
-	public static final int SPACE = 32;
-	
-	public static final int ENTER = 13;
-	
-	public static final int UP = 16777217;
-	
-	public static final int DOWN = 16777218;
-	
-	public static final int LEFT = 16777219;
-	
-	public static final int RIGHT = 16777220;
-	
-	public static final int NUMBER_0 = 48;
-	
-	public static final int NUMBER_1 = 49;
-	
-	public static final int NUMBER_2 = 50;
-	
-	public static final int NUMBER_3 = 51;
-	
-	public static final int NUMBER_4 = 52;
-	
-	public static final int NUMBER_5 = 53;
-	
-	public static final int NUMBER_6 = 54;
-	
-	public static final int NUMBER_7 = 55;
-	
-	public static final int NUMBER_8 = 56;
-	
-	public static final int NUMBER_9 = 57;
-	
-	public static final int KEYPAD_0 = SWT.KEYPAD_0;
-	
-	public static final int KEYPAD_1 = SWT.KEYPAD_1;
-	
-	public static final int KEYPAD_2 = SWT.KEYPAD_2;
-	
-	public static final int KEYPAD_3 = SWT.KEYPAD_3;
-	
-	public static final int KEYPAD_4 = SWT.KEYPAD_4;
-	
-	public static final int KEYPAD_5 = SWT.KEYPAD_5;
-	
-	public static final int KEYPAD_6 = SWT.KEYPAD_6;
-	
-	public static final int KEYPAD_7 = SWT.KEYPAD_7;
-	
-	public static final int KEYPAD_8 = SWT.KEYPAD_8;
-	
-	public static final int KEYPAD_9 = SWT.KEYPAD_9;
-	
-	public static final int KEYPAD_MULTIPLY = SWT.KEYPAD_MULTIPLY;
-	
-	public static final int KEYPAD_DIVIDE = SWT.KEYPAD_DIVIDE;
-	
-	public static final int KEYPAD_DECIMAL = SWT.KEYPAD_DECIMAL;
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingReserveds.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingReserveds.java
deleted file mode 100644
index 2254b65..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/KeyBindingReserveds.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.actions.caret.GoDownAction;
-import org.herac.tuxguitar.gui.actions.caret.GoLeftAction;
-import org.herac.tuxguitar.gui.actions.caret.GoRightAction;
-import org.herac.tuxguitar.gui.actions.caret.GoUpAction;
-import org.herac.tuxguitar.gui.actions.duration.DecrementDurationAction;
-import org.herac.tuxguitar.gui.actions.duration.IncrementDurationAction;
-import org.herac.tuxguitar.gui.actions.note.ChangeNoteAction;
-import org.herac.tuxguitar.gui.actions.note.InsertNoteAction;
-import org.herac.tuxguitar.gui.actions.note.RemoveNoteAction;
-
-public class KeyBindingReserveds {
-	
-	private static KeyBindingAction[] reserveds = new KeyBindingAction[]{
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_0,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_1,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_2,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_3,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_4,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_5,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_6,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_7,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_8,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.NUMBER_9,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_0,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_1,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_2,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_3,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_4,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_5,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_6,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_7,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_8,0)),
-		new KeyBindingAction(ChangeNoteAction.NAME,new KeyBinding(KeyBindingConstants.KEYPAD_9,0)),
-		new KeyBindingAction(RemoveNoteAction.NAME,new KeyBinding(KeyBindingConstants.BACKSPACE,0)),
-		new KeyBindingAction(RemoveNoteAction.NAME,new KeyBinding(KeyBindingConstants.DELETE,0)),
-		new KeyBindingAction(InsertNoteAction.NAME,new KeyBinding(KeyBindingConstants.INSERT,0)),
-		new KeyBindingAction(IncrementDurationAction.NAME,new KeyBinding(16777259,0)),
-		new KeyBindingAction(DecrementDurationAction.NAME,new KeyBinding(16777261,0)),
-		new KeyBindingAction(GoUpAction.NAME,new KeyBinding(KeyBindingConstants.UP,0)),
-		new KeyBindingAction(GoDownAction.NAME,new KeyBinding(KeyBindingConstants.DOWN,0)),
-		new KeyBindingAction(GoLeftAction.NAME,new KeyBinding(KeyBindingConstants.LEFT,0)),
-		new KeyBindingAction(GoRightAction.NAME,new KeyBinding(KeyBindingConstants.RIGHT,0)),
-	};
-	
-	public static boolean isReserved(KeyBinding kb){
-		for(int i = 0;i < reserveds.length;i++){
-			if(kb.isSameAs(reserveds[i].getKeyBinding())){
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	public static Action getActionForKeyBinding(KeyBinding kb){
-		for(int i = 0;i < reserveds.length;i++){
-			if(kb.isSameAs(reserveds[i].getKeyBinding())){
-				return TuxGuitar.instance().getAction(reserveds[i].getAction());
-			}
-		}
-		return null;
-	}
-	
-	public static KeyBinding getKeyBindingForAction(String action){
-		for(int i = 0;i < reserveds.length;i++){
-			if(action.equals(reserveds[i].getAction())){
-				return reserveds[i].getKeyBinding();
-			}
-		}
-		return null;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingEditor.java
deleted file mode 100644
index 78005ea..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingEditor.java
+++ /dev/null
@@ -1,235 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings.editor;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBinding;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingActionDefaults;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-public class KeyBindingEditor {
-	
-	private static final int ACTION_WIDTH = 400;
-	private static final int SHORTCUT_WIDTH = 100;
-	
-	protected Shell dialog;
-	protected Table table;
-	protected List items;
-	
-	public KeyBindingEditor(){
-		this.items = new ArrayList();
-	}
-	
-	public void show(Shell parent){
-		this.dialog = DialogUtils.newDialog(parent,SWT.DIALOG_TRIM |SWT.APPLICATION_MODAL);
-		this.dialog.setText(TuxGuitar.getProperty("key-bindings-editor"));
-		this.dialog.setLayout(new GridLayout());
-		
-		Composite composite = new Composite(this.dialog,SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.NONE,true,true));
-		
-		this.table = new Table(composite, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
-		this.table.setLayoutData(new GridData((ACTION_WIDTH + SHORTCUT_WIDTH) ,250));
-		this.table.setHeaderVisible(true);
-		this.table.addMouseListener(new MouseAdapter() {
-			public void mouseDoubleClick(MouseEvent e) {
-				TableItem item = getSelectedItem();
-				if(item != null){
-					KeyBindingAction itemData = (KeyBindingAction)item.getData();
-					KeyBindingSelector selector = new KeyBindingSelector(KeyBindingEditor.this,itemData);
-					KeyBinding kb = selector.select(KeyBindingEditor.this.dialog.getShell());
-					removeKeyBindingAction(kb);
-					itemData.setKeyBinding(kb);
-					loadTableItemLabel(item);
-				}
-			}
-		});
-		
-		TableColumn actionColumn = new TableColumn(this.table, SWT.LEFT);
-		actionColumn.setText(TuxGuitar.getProperty("key-bindings-editor-action-column"));
-		
-		TableColumn shortcutColumn = new TableColumn(this.table, SWT.LEFT);
-		shortcutColumn.setText(TuxGuitar.getProperty("key-bindings-editor-shortcut-column"));
-		
-		loadAvailableActionKeyBindings();
-		loadEnableActionKeyBindings(TuxGuitar.instance().getkeyBindingManager().getKeyBindingActions());
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(this.dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		Button defaults = new Button(buttons,SWT.PUSH);
-		defaults.setText(TuxGuitar.getProperty("defaults"));
-		defaults.setLayoutData(getButtonData());
-		defaults.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				loadEnableActionKeyBindings(KeyBindingActionDefaults.getDefaultKeyBindings());
-			}
-		});
-		
-		Button close = new Button(buttons,SWT.PUSH);
-		close.setText(TuxGuitar.getProperty("close"));
-		close.setLayoutData(getButtonData());
-		close.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				KeyBindingEditor.this.dialog.dispose();
-			}
-		});
-		
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				save();
-			}
-		});
-		
-		this.table.setLayoutData(new GridData( (adjustWidth(actionColumn,ACTION_WIDTH) + adjustWidth(shortcutColumn,SHORTCUT_WIDTH)) ,250) );
-		
-		this.dialog.setDefaultButton( close );
-		
-		DialogUtils.openDialog(this.dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-	
-	protected int adjustWidth(TableColumn column, int defaultWidth){
-		column.pack();
-		int width = column.getWidth();
-		if( width < defaultWidth ){
-			width = defaultWidth;
-			column.setWidth( width );
-		}
-		return width;
-	}
-	
-	protected GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected void loadTableItemLabel(TableItem item){
-		if(item.getData() instanceof KeyBindingAction){
-			KeyBindingAction actionkeyBinding = (KeyBindingAction)item.getData();
-			String action = actionkeyBinding.getAction();
-			String shortcut = (actionkeyBinding.getKeyBinding() != null)?actionkeyBinding.getKeyBinding().toString():"";
-			item.setText(new String[] { TuxGuitar.getProperty(action),shortcut});
-		}
-	}
-	
-	protected void loadAvailableActionKeyBindings(){
-		List list = TuxGuitar.instance().getActionManager().getAvailableKeyBindingActions();
-		Collections.sort(list);
-		Iterator it = list.iterator();
-		while (it.hasNext()) {
-			String action = (String) it.next();
-			TableItem item = new TableItem(this.table, SWT.NONE);
-			item.setData(new KeyBindingAction(action,null));
-			this.items.add(item);
-		}
-	}
-	
-	protected void loadEnableActionKeyBindings(List list){
-		Iterator items = this.items.iterator();
-		while (items.hasNext()) {
-			TableItem item = (TableItem) items.next();
-			if(item.getData() instanceof KeyBindingAction){
-				KeyBindingAction itemData = (KeyBindingAction)item.getData();
-				KeyBinding keyBinding = null;
-				Iterator it = list.iterator();
-				while (it.hasNext()) {
-					KeyBindingAction keyBindingAction = (KeyBindingAction) it.next();
-					if(keyBindingAction.getAction().equals(itemData.getAction())){
-						keyBinding =  (KeyBinding) keyBindingAction.getKeyBinding().clone();
-						break;
-					}
-				}
-				itemData.setKeyBinding(keyBinding);
-				loadTableItemLabel(item);
-			}
-		}
-	}
-	
-	protected void removeKeyBindingAction(KeyBinding kb){
-		if(kb != null){
-			Iterator it = this.items.iterator();
-			while(it.hasNext()){
-				TableItem item = (TableItem) it.next();
-				if(item.getData() instanceof KeyBindingAction){
-					KeyBindingAction itemData = (KeyBindingAction)item.getData();
-					if(kb.isSameAs(itemData.getKeyBinding())){
-						itemData.setKeyBinding(null);
-						loadTableItemLabel(item);
-					}
-				}
-			}
-		}
-	}
-	
-	protected TableItem getSelectedItem(){
-		TableItem item = null;
-		int itemSelected = this.table.getSelectionIndex();
-		if(itemSelected >= 0){
-			item = this.table.getItem(itemSelected);
-		}
-		return item;
-	}
-	
-	public boolean exists(KeyBinding kb){
-		Iterator it = this.items.iterator();
-		while(it.hasNext()){
-			TableItem item = (TableItem) it.next();
-			if(item.getData() instanceof KeyBindingAction){
-				KeyBindingAction itemData = (KeyBindingAction)item.getData();
-				if(itemData.getKeyBinding() != null && kb.isSameAs(itemData.getKeyBinding())){
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-	
-	protected void save(){
-		List list = new ArrayList();
-		Iterator it = this.items.iterator();
-		while (it.hasNext()) {
-			TableItem item = (TableItem) it.next();
-			if(item.getData() instanceof KeyBindingAction){
-				KeyBindingAction keyBindingAction = (KeyBindingAction)item.getData();
-				if(keyBindingAction.getAction() != null && keyBindingAction.getKeyBinding() != null){
-					list.add(keyBindingAction);
-				}
-			}
-		}
-		TuxGuitar.instance().getkeyBindingManager().reset(list);
-		TuxGuitar.instance().getkeyBindingManager().saveKeyBindings();
-		TuxGuitar.instance().loadLanguage();
-	}
-	
-	public Shell getDialog(){
-		return this.dialog;
-	}
-	
-	public boolean isDisposed(){
-		return (this.dialog == null || this.dialog.isDisposed() );
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingSelector.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingSelector.java
deleted file mode 100644
index e1e0367..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/editor/KeyBindingSelector.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings.editor;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.KeyAdapter;
-import org.eclipse.swt.events.KeyEvent;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.graphics.FontData;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBinding;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingReserveds;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-
-public class KeyBindingSelector {
-	
-	protected Shell dialog;
-	protected KeyBindingEditor editor;
-	protected KeyBinding keyBinding;
-	protected String action;
-	
-	public KeyBindingSelector(KeyBindingEditor editor,KeyBindingAction keyBindingAction){
-		this.editor = editor;
-		this.keyBinding = keyBindingAction.getKeyBinding();
-		this.action = keyBindingAction.getAction();
-	}
-	
-	public KeyBinding select(Shell parent){
-		this.dialog = DialogUtils.newDialog(parent,SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.dialog.setText(TuxGuitar.getProperty("key-bindings-editor"));
-		
-		Group group = new Group(this.dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout());
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setText(TuxGuitar.getProperty(this.action));
-		
-		final Composite composite = new Composite(group,SWT.NONE);
-		composite.setLayout(new GridLayout(2,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		composite.setFocus();
-		composite.addKeyListener(new KeyAdapter() {
-			public void keyReleased(KeyEvent e) {
-				KeyBinding kb = new KeyBinding(e.keyCode,e.stateMask);
-				if(kb.isSameAs(KeyBindingSelector.this.keyBinding) || isValid(kb)){
-					if(KeyBindingSelector.this.keyBinding == null){
-						KeyBindingSelector.this.keyBinding = new KeyBinding();
-					}
-					KeyBindingSelector.this.keyBinding.setKey(kb.getKey());
-					KeyBindingSelector.this.keyBinding.setMask(kb.getMask());
-				}
-				KeyBindingSelector.this.dialog.dispose();
-			}
-		});
-		
-		Label iconLabel = new Label(composite, SWT.CENTER );
-		iconLabel.setImage(iconLabel.getDisplay().getSystemImage(SWT.ICON_INFORMATION));
-		iconLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
-		
-		Label textLabel = new Label(composite,SWT.CENTER);
-		textLabel.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,false,true));
-		textLabel.setText(TuxGuitar.getProperty("key-bindings-editor-push-a-key"));
-		
-		FontData[] fd = textLabel.getFont().getFontData();
-		if(fd != null && fd.length > 0){
-			final Font font = new Font(textLabel.getDisplay(),new FontData( fd[0].getName(), 14 , SWT.BOLD) );
-			textLabel.setFont(font);
-			textLabel.addDisposeListener(new DisposeListener() {
-				public void widgetDisposed(DisposeEvent arg0) {
-					font.dispose();
-				}
-			});
-		}
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(this.dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.RIGHT,SWT.FILL,true,true));
-		
-		final Button buttonClean = new Button(buttons, SWT.PUSH);
-		buttonClean.setText(TuxGuitar.getProperty("clean"));
-		buttonClean.setLayoutData(getButtonData());
-		buttonClean.addMouseListener(new MouseAdapter() {
-			public void mouseUp(MouseEvent e) {
-				composite.setFocus();
-			}
-		});
-		buttonClean.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				KeyBindingSelector.this.keyBinding = null;
-				KeyBindingSelector.this.dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addMouseListener(new MouseAdapter() {
-			public void mouseUp(MouseEvent e) {
-				composite.setFocus();
-			}
-		});
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				KeyBindingSelector.this.dialog.dispose();
-			}
-		});
-		
-		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return this.keyBinding;
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	protected boolean isValid(KeyBinding kb){
-		if(KeyBindingReserveds.isReserved(kb)){
-			if(!this.editor.isDisposed()){
-				String title = TuxGuitar.getProperty("key-bindings-editor-reserved-title");
-				String message = TuxGuitar.getProperty("key-bindings-editor-reserved-message");
-				MessageDialog.infoMessage(this.editor.getDialog(),title,message);
-			}
-			return false;
-		}
-		if(this.editor.exists(kb)){
-			ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("key-bindings-editor-override"));
-			confirm.setDefaultStatus( ConfirmDialog.STATUS_NO );
-			if(confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO, ConfirmDialog.BUTTON_NO) == ConfirmDialog.STATUS_NO){
-				return false;
-			}
-		}
-		return true;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingReader.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingReader.java
deleted file mode 100644
index a492dc0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingReader.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings.xml;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction;
-import org.herac.tuxguitar.gui.system.keybindings.KeyBinding;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-public class KeyBindingReader {
-	private static final String SHORTCUT_TAG = "shortcut";
-	private static final String SHORTCUT_ATTRIBUTE_ACTION = "action";
-	private static final String SHORTCUT_ATTRIBUTE_KEY = "key";
-	private static final String SHORTCUT_ATTRIBUTE_MASK = "mask";
-	
-	public static List getKeyBindings(String fileName) {
-		try{
-			File file = new File(fileName);
-			if (file.exists()){
-				return getBindings(getDocument(file).getFirstChild());
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-	
-	public static List getKeyBindings(InputStream is) {
-		try{
-			if (is!=null){
-				return getBindings(getDocument(is).getFirstChild());
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-	
-	private static Document getDocument(InputStream is) {
-		Document document = null;
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		try {
-			DocumentBuilder builder = factory.newDocumentBuilder();
-			document = builder.parse(is);
-		} catch (SAXException sxe) {
-			sxe.printStackTrace();
-		} catch (ParserConfigurationException pce) {
-			pce.printStackTrace();
-		} catch (IOException ioe) {
-			ioe.printStackTrace();
-		}
-		return document;
-	}
-	
-	
-	private static Document getDocument(File file) {
-		Document document = null;
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		try {
-			DocumentBuilder builder = factory.newDocumentBuilder();
-			document = builder.parse(file);
-		} catch (SAXException sxe) {
-			sxe.printStackTrace();
-		} catch (ParserConfigurationException pce) {
-			pce.printStackTrace();
-		} catch (IOException ioe) {
-			ioe.printStackTrace();
-		}
-		return document;
-	}
-	
-	/**
-	 * Read shortcuts from xml file
-	 * 
-	 * @param shortcutsNode
-	 * @return
-	 */
-	private static List getBindings(Node shortcutsNode){
-		List list = new ArrayList();
-		
-		NodeList nodeList = shortcutsNode.getChildNodes();
-		for (int i = 0; i < nodeList.getLength(); i++) {
-			Node child = nodeList.item(i);
-			String nodeName = child.getNodeName();
-			
-			if (nodeName.equals(SHORTCUT_TAG)) {
-				NamedNodeMap params = child.getAttributes();
-				
-				Node nodeKey = params.getNamedItem(SHORTCUT_ATTRIBUTE_KEY);
-				Node nodeMask = params.getNamedItem(SHORTCUT_ATTRIBUTE_MASK);
-				Node nodeAction = params.getNamedItem(SHORTCUT_ATTRIBUTE_ACTION);
-				if( nodeKey != null && nodeMask != null && nodeAction != null){
-					String key = nodeKey.getNodeValue();
-					String mask = nodeMask.getNodeValue();
-					String action = nodeAction.getNodeValue();
-					
-					if (key != null && mask != null && action != null){
-						list.add(new KeyBindingAction(action, new KeyBinding(Integer.parseInt(key), Integer.parseInt(mask)) ));
-					}
-				}
-			}
-		}
-		return list;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingWriter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingWriter.java
deleted file mode 100644
index bfe6fb2..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/keybindings/xml/KeyBindingWriter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-package org.herac.tuxguitar.gui.system.keybindings.xml;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.util.Iterator;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.herac.tuxguitar.gui.system.keybindings.KeyBindingAction;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-public class KeyBindingWriter {
-	
-	private static final String SHORTCUT_ROOT = "shortcuts";
-	private static final String SHORTCUT_TAG = "shortcut";
-	private static final String SHORTCUT_ATTRIBUTE_ACTION = "action";
-	private static final String SHORTCUT_ATTRIBUTE_KEY = "key";
-	private static final String SHORTCUT_ATTRIBUTE_MASK = "mask";
-	
-	public static void setBindings(List list,String fileName) {
-		try{
-			File file = new File(fileName);
-			Document doc = createDocument();
-			setBindings(list,doc);
-			saveDocument(doc,file);
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-	}
-	
-	public static Document createDocument() {
-		try {
-			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-			DocumentBuilder builder = factory.newDocumentBuilder();
-			Document document = builder.newDocument();
-			return document;
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-	
-	public static void saveDocument(Document document,File file) {
-		try {
-			FileOutputStream fs = new FileOutputStream(file);
-			
-			// Write it out again
-			TransformerFactory xformFactory = TransformerFactory.newInstance();
-			Transformer idTransform = xformFactory.newTransformer();
-			Source input = new DOMSource(document);
-			Result output = new StreamResult(fs);
-			idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
-			idTransform.transform(input, output);
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-	}
-	
-	/**
-	 * Write shortcuts to xml file
-	 * 
-	 * @param shortcutsNode
-	 * @return
-	 */
-	private static void setBindings(List list,Document document){
-		Node shortcutsNode = document.createElement(SHORTCUT_ROOT);
-		
-		Iterator it = list.iterator();
-		while(it.hasNext()){
-			KeyBindingAction keyBindingAction = (KeyBindingAction) it.next();
-			
-			Node node = document.createElement(SHORTCUT_TAG);
-			shortcutsNode.appendChild(node);
-			
-			Attr attrKey = document.createAttribute(SHORTCUT_ATTRIBUTE_KEY);
-			Attr attrMask = document.createAttribute(SHORTCUT_ATTRIBUTE_MASK);
-			Attr attrAction = document.createAttribute(SHORTCUT_ATTRIBUTE_ACTION);
-			
-			attrKey.setNodeValue(Integer.toString(keyBindingAction.getKeyBinding().getKey()));
-			attrMask.setNodeValue(Integer.toString(keyBindingAction.getKeyBinding().getMask()));
-			attrAction.setNodeValue(keyBindingAction.getAction());
-			
-			node.getAttributes().setNamedItem(attrKey);
-			node.getAttributes().setNamedItem(attrMask);
-			node.getAttributes().setNamedItem(attrAction);
-		}
-		document.appendChild(shortcutsNode);
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/LanguageLoader.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/LanguageLoader.java
deleted file mode 100644
index b709230..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/LanguageLoader.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.herac.tuxguitar.gui.system.language;
-
-public interface LanguageLoader {
-	
-	public void loadProperties();
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/LanguageManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/LanguageManager.java
deleted file mode 100644
index 31ca64e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/LanguageManager.java
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Created on 09-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.system.language;
-
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-/**
- * @author julian
- * 
- */
-public class LanguageManager {
-	
-	public static final String PACKAGE = "lang";
-	public static final String PREFIX = "messages";
-	public static final String EXTENSION = ".properties";
-	
-	private TGResourceBundle resources;
-	private String[] languages;
-	private List loaders;
-	
-	public LanguageManager() {
-		this.loaders = new ArrayList();
-		this.loadLanguages();
-	}
-	
-	public void addLoader(LanguageLoader loader){
-		if( !this.loaders.contains( loader )){
-			this.loaders.add(loader);
-		}
-	}
-	
-	public void removeLoader(LanguageLoader loader){
-		if( this.loaders.contains( loader )){
-			this.loaders.remove(loader);
-		}
-	}
-	
-	private void fireChanges(){
-		Iterator it = this.loaders.iterator();
-		while(it.hasNext()){
-			LanguageLoader loader = (LanguageLoader)it.next();
-			loader.loadProperties();
-		}
-	}
-	
-	public void setLanguage(String lang) {
-		try {
-			String baseName = (PACKAGE + "." + PREFIX);
-			Locale locale = getLocale(lang);
-			this.resources = TGResourceBundle.getBundle(baseName, locale);
-			this.fireChanges();
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-	}
-	
-	private Locale getLocale(String lang){
-		if(this.isSupportedLanguage(lang)){
-			String[] locale = lang.split("_");
-			String language = (locale.length > 0 ? locale[0] : "" );
-			String country =  (locale.length > 1 ? locale[1] : "" );
-			String variant =  (locale.length > 2 ? locale[2] : "" );
-			return new Locale(language, country, variant);
-		}
-		return Locale.getDefault();
-	}
-	
-	private boolean isSupportedLanguage(String lang){
-		if(lang != null && lang.length() > 0 && this.languages != null){
-			for(int i = 0 ; i < this.languages.length; i ++){
-				if(this.languages[i].equals(lang)){
-					return true;
-				}
-			}
-		}
-		return false;
-	}
-	
-	public String getProperty(String key,String value) {
-		try {
-			String property = this.resources.getString(key);
-			return (property == null ? value : property );
-		}catch(Throwable throwable){
-			return value;
-		}
-	}
-	
-	public String getProperty(String key) {
-		return this.getProperty(key,key);
-	}
-	
-	public String getProperty(String key, Object[] arguments) {
-		return getProperty(key,key,arguments);
-	}
-	
-	public String getProperty(String key,String value, Object[] arguments) {
-		String property = this.getProperty(key,value);
-		return ( arguments != null ? MessageFormat.format(property, arguments) : property );
-	}
-	
-	public String[] getLanguages() {
-		return this.languages;
-	}
-	
-	public String getLanguage() {
-		if(this.resources != null){
-			Locale locale = this.resources.getLocale();
-			boolean language = (locale.getLanguage() != null && locale.getLanguage().length() > 0);
-			boolean country = (locale.getCountry() != null && locale.getCountry().length() > 0);
-			boolean variant = (locale.getVariant() != null && locale.getVariant().length() > 0);
-			
-			String localeId = new String();
-			if( language ){
-				localeId += locale.getLanguage();
-			}
-			if( country ){
-				localeId += "_" + locale.getCountry();
-			}
-			if( variant ){
-				localeId += "_" + ( country ? locale.getVariant() : ("_" + locale.getVariant()) );
-			}
-			return localeId;
-		}
-		return null;
-	}
-	
-	/**
-	 * Load language files from lang folder
-	 *
-	 */
-	private void loadLanguages(){
-		List availableList = new ArrayList();
-		String[] fileNames = TGFileUtils.getFileNames("lang");
-		if( fileNames != null ){
-			// now iterate over them
-			for(int i = 0;i < fileNames.length;i++){
-				if (fileNames[i].indexOf("messages_") == 0){
-					int prefixIndex = fileNames[i].indexOf(PREFIX + "_");
-					int extensionIndex = fileNames[i].indexOf(EXTENSION);
-					if(prefixIndex == 0 && extensionIndex > (PREFIX + "_").length()){
-						availableList.add( fileNames[i].substring( (PREFIX + "_").length() , extensionIndex ) );
-					}
-				}
-			}
-		}
-		this.languages = new String[availableList.size()];
-		for(int i = 0; i < this.languages.length; i++){
-			this.languages[i] = (String) availableList.get( i );
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/TGResourceBundle.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/TGResourceBundle.java
deleted file mode 100644
index 1bed7ae..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/language/TGResourceBundle.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.herac.tuxguitar.gui.system.language;
-
-import java.io.IOException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.Locale;
-import java.util.Properties;
-
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-public class TGResourceBundle {
-	
-	private Locale locale;
-	private Properties properties;
-	
-	public TGResourceBundle(Locale locale, Properties properties){
-		this.locale = locale;
-		this.properties = properties;
-	}
-	
-	public Locale getLocale() {
-		return this.locale;
-	}
-	
-	public void setLocale(Locale locale) {
-		this.locale = locale;
-	}
-	
-	public String getString(String key) {
-		return this.properties.getProperty(key);
-	}
-	
-	public static TGResourceBundle getBundle(String baseName, Locale locale){
-		Properties properties = new Properties();
-		
-		String bundleName = baseName.replace('.','/');
-		String bundleExtension = ".properties";
-		
-		// load default
-		TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties);
-		
-		// load language
-		bundleName += "_";
-		if(locale.getLanguage() != null && locale.getLanguage().length() > 0){
-			bundleName += locale.getLanguage();
-			TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties);
-		}
-		
-		// load country
-		bundleName += "_";
-		if(locale.getCountry() != null && locale.getCountry().length() > 0){
-			bundleName += locale.getCountry();
-			TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties);
-		}
-		
-		// load variant
-		bundleName += "_";
-		if(locale.getVariant() != null && locale.getVariant().length() > 0){
-			bundleName += locale.getVariant();
-			TGResourceBundle.loadResources( (bundleName + bundleExtension ), properties);
-		}
-		
-		return new TGResourceBundle(locale, properties);
-	}
-	
-	private static void loadResources(String name, Properties p){
-		try {
-			Enumeration enumeration = TGFileUtils.getResourceUrls(name);
-			while (enumeration.hasMoreElements()) {
-				URL url = (URL) enumeration.nextElement();
-				Properties properties = new Properties();
-				properties.load( url.openStream() );
-				p.putAll(properties);
-			}
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPlugin.java
deleted file mode 100644
index 4a4025f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPlugin.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins;
-
-public interface TGPlugin {
-	
-	public void init() throws TGPluginException;
-	
-	public void close() throws TGPluginException;
-	
-	public void setEnabled(boolean enabled) throws TGPluginException;
-	
-	public String getName();
-	
-	public String getDescription();
-	
-	public String getVersion();
-	
-	public String getAuthor();
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginConfigManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginConfigManager.java
deleted file mode 100644
index 5f66dfb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginConfigManager.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins;
-
-import java.io.File;
-import java.io.InputStream;
-import java.util.Properties;
-
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-public class TGPluginConfigManager extends TGConfigManager{
-	
-	private String name;
-	
-	public TGPluginConfigManager(String name){
-		this.name = name;
-	}
-	
-	public String getName() {
-		return "Plugin Configuration";
-	}
-	
-	public String getFileName(){
-		return TGFileUtils.PATH_USER_PLUGINS_CONFIG + File.separator + this.name + ".cfg";
-	}
-	
-	public Properties getDefaults() {
-		Properties properties = new Properties();
-		try {
-			InputStream is = TGFileUtils.getResourceAsStream(this.name + ".cfg");
-			if(is != null){
-				properties.load(is);
-			}
-		} catch (Throwable throwable) {
-			throwable.printStackTrace();
-		}
-		return properties;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginException.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginException.java
deleted file mode 100644
index 6d69e46..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginException.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins;
-
-
-public class TGPluginException extends Exception{
-	
-	private static final long serialVersionUID = 1L;
-	
-	public TGPluginException() {
-		super();
-	}
-	
-	public TGPluginException(String message, Throwable cause) {
-		super(message, cause);
-	}
-	
-	public TGPluginException(String message) {
-		super(message);
-	}
-	
-	public TGPluginException(Throwable cause) {
-		super(cause);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginManager.java
deleted file mode 100644
index ed90d0e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginManager.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.util.TGClassLoader;
-import org.herac.tuxguitar.util.TGServiceReader;
-
-public class TGPluginManager {
-	
-	private List plugins;
-	
-	public TGPluginManager(){
-		this.plugins = new ArrayList();
-		this.initPlugins();
-	}
-	
-	public List getPlugins(){
-		return this.plugins;
-	}
-	
-	public void initPlugins(){
-		try{
-			//Search available providers
-			Iterator it = TGServiceReader.lookupProviders(TGPlugin.class,TGClassLoader.instance().getClassLoader());
-			while(it.hasNext()){
-				try{
-					TGPlugin plugin = (TGPlugin)it.next();
-					plugin.init();
-					this.plugins.add(plugin);
-				}catch(TGPluginException exception){
-					MessageDialog.errorMessage(exception);
-				}catch(Throwable throwable){
-					MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to init plugin",throwable));
-				}
-			}
-		}catch(Throwable throwable){
-			MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to init plugin",throwable));
-		}
-	}
-	
-	public void closePlugins(){
-		Iterator it = this.plugins.iterator();
-		while(it.hasNext()){
-			try{
-				((TGPlugin)it.next()).close();
-			}catch(TGPluginException exception){
-				MessageDialog.errorMessage(exception);
-			}catch(Throwable throwable){
-				MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to close plugin",throwable));
-			}
-		}
-	}
-	
-	public void openPlugins(){
-		Iterator it = this.plugins.iterator();
-		while(it.hasNext()){
-			try{
-				TGPlugin plugin = (TGPlugin)it.next();
-				plugin.setEnabled(isEnabled(plugin));
-			}catch(TGPluginException exception){
-				MessageDialog.errorMessage(exception);
-			}catch(Throwable throwable){
-				MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to set plugin status",throwable));
-			}
-		}
-	}
-	
-	public void setEnabled(TGPlugin plugin,boolean enabled){
-		try{
-			TGPluginProperties.instance().setProperty(getEnabledProperty(plugin),enabled);
-			TGPluginProperties.instance().save();
-			plugin.setEnabled(enabled);
-		}catch(TGPluginException exception){
-			MessageDialog.errorMessage(exception);
-		}catch(Throwable throwable){
-			MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to set plugin status",throwable));
-		}
-	}
-	
-	public boolean isEnabled(TGPlugin plugin){
-		try{
-			return TGPluginProperties.instance().getBooleanConfigValue(getEnabledProperty(plugin),true);
-		}catch(Throwable throwable){
-			MessageDialog.errorMessage(new TGPluginException("An error ocurred when trying to get plugin status",throwable));
-		}
-		return false;
-	}
-	
-	public String getEnabledProperty(TGPlugin plugin){
-		return (plugin.getClass().getName() + ".enabled");
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginProperties.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginProperties.java
deleted file mode 100644
index eb53d3f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginProperties.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Created on 09-ene-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.system.plugins;
-
-import java.io.File;
-import java.util.Properties;
-
-import org.herac.tuxguitar.gui.system.config.TGConfigManager;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGPluginProperties  extends TGConfigManager{
-	
-	private static TGPluginProperties instance;
-	
-	public static TGPluginProperties instance(){
-		if(instance == null){
-			instance = new TGPluginProperties();
-			instance.init();
-		}
-		return instance;
-	}
-	
-	private TGPluginProperties(){
-		super();
-	}
-	
-	public String getName() {
-		return "TuxGuitar Plugin Properties";
-	}
-	
-	public String getFileName(){
-		return TGFileUtils.PATH_USER_CONFIG + File.separator + "plugin.properties";
-	}
-	
-	public Properties getDefaults() {
-		return new Properties();
-	}
-	
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginSetup.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginSetup.java
deleted file mode 100644
index 716ffe0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/TGPluginSetup.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins;
-
-import org.eclipse.swt.widgets.Shell;
-
-public interface TGPluginSetup {
-	
-	public void setupDialog(Shell parent);
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGBrowserPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGBrowserPlugin.java
deleted file mode 100644
index 425729d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGBrowserPlugin.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
-
-public abstract class TGBrowserPlugin extends TGPluginAdapter{
-	private boolean loaded;
-	private TGBrowserFactory factory;
-	
-	protected abstract TGBrowserFactory getFactory() throws TGPluginException;
-	
-	public void init() throws TGPluginException {
-		this.factory = getFactory();
-		this.loaded = false;
-	}
-	
-	public void close() throws TGPluginException {
-		this.loaded = false;
-	}
-	
-	public void setEnabled(boolean enabled) throws TGPluginException {
-		if(enabled){
-			addPlugin();
-		}else{
-			removePlugin();
-		}
-	}
-	
-	protected void addPlugin() throws TGPluginException {
-		if(!this.loaded){
-			TGBrowserManager.instance().addFactory(this.factory);
-			this.loaded = true;
-		}
-	}
-	
-	protected void removePlugin() throws TGPluginException {
-		if(this.loaded){
-			TGBrowserManager.instance().removeFactory(this.factory);
-			this.loaded = false;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGExporterPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGExporterPlugin.java
deleted file mode 100644
index 137d9f5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGExporterPlugin.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.io.base.TGRawExporter;
-
-public abstract class TGExporterPlugin extends TGPluginAdapter{
-	
-	private boolean loaded;
-	private TGRawExporter exporter;
-	
-	protected abstract TGRawExporter getExporter() throws TGPluginException;
-	
-	public void init() throws TGPluginException {
-		this.exporter = getExporter();
-	}
-	
-	public void close() throws TGPluginException {
-		this.removePlugin();
-	}
-	
-	public void setEnabled(boolean enabled) throws TGPluginException {
-		if(enabled){
-			addPlugin();
-		}else{
-			removePlugin();
-		}
-	}
-	
-	protected void addPlugin() throws TGPluginException {
-		if(!this.loaded && this.exporter != null){
-			TGFileFormatManager.instance().addExporter(this.exporter);
-			TuxGuitar.instance().getItemManager().createMenu();
-			this.loaded = true;
-		}
-	}
-	
-	protected void removePlugin() throws TGPluginException {
-		if(this.loaded && this.exporter != null){
-			TGFileFormatManager.instance().removeExporter(this.exporter);
-			TuxGuitar.instance().getItemManager().createMenu();
-			this.loaded = false;
-		}
-	}	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGImporterPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGImporterPlugin.java
deleted file mode 100644
index 0709430..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGImporterPlugin.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.io.base.TGRawImporter;
-
-public abstract class TGImporterPlugin extends TGPluginAdapter{
-	
-	private boolean loaded;
-	private TGRawImporter importer;
-	
-	protected abstract TGRawImporter getImporter() throws TGPluginException;
-	
-	public void init() throws TGPluginException {
-		this.importer = getImporter();
-	}
-	
-	public void close() throws TGPluginException {
-		this.removePlugin();
-	}
-	
-	public void setEnabled(boolean enabled) throws TGPluginException {
-		if(enabled){
-			addPlugin();
-		}else{
-			removePlugin();
-		}
-	}
-	
-	protected void addPlugin() throws TGPluginException {
-		if(!this.loaded){
-			TGFileFormatManager.instance().addImporter(this.importer);
-			TuxGuitar.instance().getItemManager().createMenu();
-			this.loaded = true;
-		}
-	}
-	
-	protected void removePlugin() throws TGPluginException {
-		if(this.loaded){
-			TGFileFormatManager.instance().removeImporter(this.importer);
-			TuxGuitar.instance().getItemManager().createMenu();
-			this.loaded = false;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGInputStreamPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGInputStreamPlugin.java
deleted file mode 100644
index 0e90e2e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGInputStreamPlugin.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.io.base.TGInputStreamBase;
-
-public abstract class TGInputStreamPlugin extends TGPluginAdapter{
-	
-	private boolean loaded;
-	private TGInputStreamBase stream;
-	
-	protected abstract TGInputStreamBase getInputStream() throws TGPluginException ;
-	
-	public void init() throws TGPluginException {
-		this.stream = getInputStream();
-	}
-	
-	public void close() throws TGPluginException {
-		this.removePlugin();
-	}
-	
-	public void setEnabled(boolean enabled) throws TGPluginException {
-		if(enabled){
-			addPlugin();
-		}else{
-			removePlugin();
-		}
-	}
-	
-	protected void addPlugin() throws TGPluginException {
-		if(!this.loaded){
-			TGFileFormatManager.instance().addInputStream(this.stream);
-			this.loaded = true;
-		}
-	}
-	
-	protected void removePlugin() throws TGPluginException {
-		if(this.loaded){
-			TGFileFormatManager.instance().removeInputStream(this.stream);
-			this.loaded = false;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiOutputPortProviderPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiOutputPortProviderPlugin.java
deleted file mode 100644
index 97bb0d4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiOutputPortProviderPlugin.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.player.base.MidiOutputPortProvider;
-
-public abstract class TGMidiOutputPortProviderPlugin extends TGPluginAdapter{
-	private boolean loaded;
-	private MidiOutputPortProvider provider;
-	
-	protected abstract MidiOutputPortProvider getProvider() throws TGPluginException;
-	
-	public void init() throws TGPluginException {
-		this.provider = getProvider();
-		this.loaded = false;
-	}
-	
-	public void close() throws TGPluginException {
-		try {
-			this.provider.closeAll();
-		} catch (Throwable throwable) {
-			throw new TGPluginException(throwable.getMessage(),throwable);
-		}
-	}
-	
-	public void setEnabled(boolean enabled) throws TGPluginException {
-		if(enabled){
-			addPlugin();
-		}else{
-			removePlugin();
-		}
-	}
-	
-	protected void addPlugin() throws TGPluginException {
-		if(!this.loaded){
-			try {
-				TuxGuitar.instance().getPlayer().addOutputPortProvider(this.provider,TuxGuitar.instance().isInitialized());
-				this.loaded = true;
-			} catch (Throwable throwable) {
-				throw new TGPluginException(throwable.getMessage(),throwable);
-			}
-		}
-	}
-	
-	protected void removePlugin() throws TGPluginException {
-		if(this.loaded){
-			try {
-				TuxGuitar.instance().getPlayer().removeOutputPortProvider(this.provider);
-				this.loaded = false;
-			} catch (Throwable throwable) {
-				throw new TGPluginException(throwable.getMessage(),throwable);
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiSequencerProviderPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiSequencerProviderPlugin.java
deleted file mode 100644
index 29b37e9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGMidiSequencerProviderPlugin.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.player.base.MidiSequencerProvider;
-
-public abstract class TGMidiSequencerProviderPlugin extends TGPluginAdapter{
-	private boolean loaded;
-	private MidiSequencerProvider provider;
-	
-	protected abstract MidiSequencerProvider getProvider() throws TGPluginException;
-	
-	public void init() throws TGPluginException {
-		this.provider = getProvider();
-		this.loaded = false;
-	}
-	
-	public void close() throws TGPluginException {
-		try {
-			this.provider.closeAll();
-		} catch (Throwable throwable) {
-			throw new TGPluginException(throwable.getMessage(),throwable);
-		}
-	}
-	
-	public void setEnabled(boolean enabled) throws TGPluginException {
-		if(enabled){
-			addPlugin();
-		}else{
-			removePlugin();
-		}
-	}
-	
-	protected void addPlugin() throws TGPluginException {
-		if(!this.loaded){
-			try {
-				TuxGuitar.instance().getPlayer().addSequencerProvider(this.provider,TuxGuitar.instance().isInitialized());
-				this.loaded = true;
-			} catch (Throwable throwable) {
-				throw new TGPluginException(throwable.getMessage(),throwable);
-			}
-		}
-	}
-	
-	protected void removePlugin() throws TGPluginException {
-		if(this.loaded){
-			try {
-				TuxGuitar.instance().getPlayer().removeSequencerProvider(this.provider);
-				this.loaded = false;
-			} catch (Throwable throwable) {
-				throw new TGPluginException(throwable.getMessage(),throwable);
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGOutputStreamPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGOutputStreamPlugin.java
deleted file mode 100644
index 272eb51..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGOutputStreamPlugin.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.io.base.TGOutputStreamBase;
-
-public abstract class TGOutputStreamPlugin extends TGPluginAdapter{
-	
-	private boolean loaded;
-	private TGOutputStreamBase stream;
-	
-	protected abstract TGOutputStreamBase getOutputStream() throws TGPluginException ;
-	
-	public void init() throws TGPluginException {
-		this.stream = getOutputStream();
-	}
-	
-	public void close() throws TGPluginException {
-		this.removePlugin();
-	}
-	
-	public void setEnabled(boolean enabled) throws TGPluginException {
-		if(enabled){
-			addPlugin();
-		}else{
-			removePlugin();
-		}
-	}
-	
-	protected void addPlugin() throws TGPluginException {
-		if(!this.loaded){
-			TGFileFormatManager.instance().addOutputStream(this.stream);
-			this.loaded = true;
-		}
-	}
-	
-	protected void removePlugin() throws TGPluginException {
-		if(this.loaded){
-			TGFileFormatManager.instance().removeOutputStream(this.stream);
-			this.loaded = false;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGPluginAdapter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGPluginAdapter.java
deleted file mode 100644
index 2274581..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGPluginAdapter.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import org.herac.tuxguitar.gui.system.plugins.TGPlugin;
-
-public abstract class TGPluginAdapter implements TGPlugin{
-	
-	public String getName() {
-		return "Untitled Plugin";
-	}
-	
-	public String getAuthor() {
-		return "Unavailable";
-	}
-	
-	public String getDescription() {
-		return "Unavailable";
-	}
-	
-	public String getVersion() {
-		return "Unavailable";
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGPluginList.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGPluginList.java
deleted file mode 100644
index b305913..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGPluginList.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.system.plugins.TGPlugin;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-
-public abstract class TGPluginList extends TGPluginAdapter{
-	
-	private List plugins;
-	
-	public TGPluginList(){
-		super();
-	}
-	
-	public void init() throws TGPluginException {
-		Iterator it = getIterator();
-		while(it.hasNext()){
-			TGPlugin plugin = (TGPlugin)it.next();
-			plugin.init();
-		}
-	}
-	
-	public void close() throws TGPluginException {
-		Iterator it = getIterator();
-		while(it.hasNext()){
-			TGPlugin plugin = (TGPlugin)it.next();
-			plugin.close();
-		}
-	}
-	
-	public void setEnabled(boolean enabled) throws TGPluginException {
-		Iterator it = getIterator();
-		while(it.hasNext()){
-			TGPlugin plugin = (TGPlugin)it.next();
-			plugin.setEnabled( enabled);
-		}
-	}
-	
-	private Iterator getIterator() throws TGPluginException {
-		if(this.plugins == null){
-			this.plugins = getPlugins();
-		}
-		return this.plugins.iterator();
-	}
-	
-	protected abstract List getPlugins() throws TGPluginException ;
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGToolItemPlugin.java b/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGToolItemPlugin.java
deleted file mode 100644
index 37b048a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/system/plugins/base/TGToolItemPlugin.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package org.herac.tuxguitar.gui.system.plugins.base;
-
-import org.eclipse.swt.events.TypedEvent;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.Action;
-import org.herac.tuxguitar.gui.system.plugins.TGPluginException;
-import org.herac.tuxguitar.gui.tools.custom.TGCustomTool;
-import org.herac.tuxguitar.gui.tools.custom.TGCustomToolManager;
-
-public abstract class TGToolItemPlugin extends TGPluginAdapter{
-	
-	private boolean loaded;
-	private TGCustomTool tool;
-	private TGCustomToolAction toolAction;
-	
-	protected abstract void doAction();
-	
-	protected abstract String getItemName() throws TGPluginException ;
-	
-	public void init() throws TGPluginException {
-		String name = getItemName();
-		this.tool = new TGCustomTool(name,name);
-		this.toolAction = new TGCustomToolAction(this.tool.getName());
-	}
-	
-	public void close() throws TGPluginException {
-		this.removePlugin();
-	}
-	
-	public void setEnabled(boolean enabled) throws TGPluginException {
-		if(enabled){
-			addPlugin();
-		}else{
-			removePlugin();
-		}
-	}
-	
-	protected void addPlugin() throws TGPluginException {
-		if(!this.loaded){
-			TuxGuitar.instance().getActionManager().addAction(this.toolAction);
-			TGCustomToolManager.instance().addCustomTool(this.tool);
-			TuxGuitar.instance().getItemManager().createMenu();
-			this.loaded = true;
-		}
-	}
-	
-	protected void removePlugin() throws TGPluginException {
-		if(this.loaded){
-			TGCustomToolManager.instance().removeCustomTool(this.tool);
-			TuxGuitar.instance().getActionManager().removeAction(this.tool.getAction());
-			TuxGuitar.instance().getItemManager().createMenu();
-			this.loaded = false;
-		}
-	}
-	
-	protected class TGCustomToolAction extends Action{
-		
-		public TGCustomToolAction(String name) {
-			super(name, AUTO_LOCK | AUTO_UNLOCK | AUTO_UPDATE | KEY_BINDING_AVAILABLE);
-		}
-		
-		protected int execute(TypedEvent e) {
-			doAction();
-			return 0;
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTable.java b/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTable.java
deleted file mode 100644
index dec38eb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTable.java
+++ /dev/null
@@ -1,161 +0,0 @@
-package org.herac.tuxguitar.gui.table;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.SashForm;
-import org.eclipse.swt.custom.ScrolledComposite;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-
-public class TGTable {
-	private ScrolledComposite sComposite;
-	private Composite table;
-	private SashForm columnControl;
-	private Composite rowControl;
-	private TGTableColumn columnNumber;
-	private TGTableColumn columnName;
-	private TGTableColumn columnInstrument;
-	private TGTableColumn columnCanvas;
-	private List rows;
-	private int rowHeight;
-	private int scrollIncrement;
-	
-	public TGTable(Composite parent){
-		this.rows = new ArrayList();
-		this.newTable(parent);
-	}
-	
-	public void newTable(Composite parent){
-		this.sComposite = new ScrolledComposite(parent,SWT.BORDER | SWT.V_SCROLL);
-		this.sComposite.setLayout(new GridLayout());
-		this.sComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.sComposite.setAlwaysShowScrollBars(true);
-		this.sComposite.setExpandHorizontal(true);
-		this.sComposite.setExpandVertical(true);
-		this.table = new Composite(this.sComposite,SWT.NONE);
-		this.table.setLayout(newGridLayout(1,0,0,0,0));
-		this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.columnControl = new SashForm(this.table,SWT.HORIZONTAL);
-		this.columnControl.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
-		
-		this.columnNumber = new TGTableColumn(this,SWT.LEFT);
-		this.columnName = new TGTableColumn(this,SWT.LEFT);
-		this.columnInstrument = new TGTableColumn(this,SWT.LEFT);
-		this.columnCanvas = new TGTableColumn(this,SWT.CENTER);
-		this.columnControl.setWeights(new int[]{1,7,7,20});
-		
-		this.rowControl = new Composite(this.table,SWT.NONE);
-		this.rowControl.setLayout(newGridLayout(1,0,1,0,1));
-		this.rowControl.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		this.sComposite.setContent(this.table);
-	}
-	
-	public Composite getControl(){
-		return this.table;
-	}
-	
-	public void newRow(){
-		this.rows.add(new TGTableRow(this));
-	}
-	
-	private GridLayout newGridLayout(int cols,int marginWidth,int marginHeight,int horizontalSpacing,int verticalSpacing){
-		GridLayout layout = new GridLayout(cols,false);
-		layout.marginWidth = marginWidth;
-		layout.marginHeight = marginHeight;
-		layout.horizontalSpacing = horizontalSpacing;
-		layout.verticalSpacing = verticalSpacing;
-		return layout;
-	}
-	
-	public void addRowItem(TGTableColumn column,Control control,boolean computeSize){
-		if(computeSize){
-			this.rowHeight = Math.max(this.rowHeight,control.computeSize(SWT.DEFAULT,SWT.DEFAULT).y);
-			this.scrollIncrement = this.rowHeight;
-		}
-		column.addControl(control);
-	}
-	
-	public int getMinHeight(){
-		return (this.sComposite.getMinHeight() + ( this.sComposite.getBorderWidth() * 2 ) );
-	}
-	
-	public Composite getColumnControl(){
-		return this.columnControl;
-	}
-	
-	public Composite getRowControl(){
-		return this.rowControl;
-	}
-	
-	public int getRowHeight(){
-		return this.rowHeight;
-	}
-	
-	public int getScrollIncrement(){
-		return this.scrollIncrement;
-	}	
-	
-	public TGTableColumn getColumnInstrument() {
-		return this.columnInstrument;
-	}
-	
-	public TGTableColumn getColumnName() {
-		return this.columnName;
-	}
-	
-	public TGTableColumn getColumnNumber() {
-		return this.columnNumber;
-	}	
-	
-	public TGTableColumn getColumnCanvas() {
-		return this.columnCanvas;
-	}
-	
-	public TGTableRow getRow(int index){
-		if(index >= 0 && index < this.rows.size()){
-			return (TGTableRow)this.rows.get(index);
-		}
-		return null;
-	}
-	
-	public void removeRowsAfter(int index){
-		while(index < this.rows.size()){
-			TGTableRow row = (TGTableRow)this.rows.get(index);
-			row.dispose();
-			this.rows.remove(index);
-		}
-		this.notifyRemoved();
-	}
-	
-	public int getRowCount(){
-		return this.rows.size();
-	}
-	
-	public void update(){
-		this.layoutColumns();
-		this.table.layout(true,true);
-		this.sComposite.setMinHeight(this.table.computeSize(SWT.DEFAULT, SWT.DEFAULT).y);
-		this.sComposite.getVerticalBar().setIncrement( (getScrollIncrement() + this.sComposite.getBorderWidth() ) );
-	}
-	
-	private void notifyRemoved(){
-		this.columnNumber.notifyRemoved();
-		this.columnName.notifyRemoved();
-		this.columnInstrument.notifyRemoved();
-		this.columnCanvas.notifyRemoved();
-	}
-	
-	private void layoutColumns(){
-		this.columnNumber.layout();
-		this.columnName.layout();
-		this.columnInstrument.layout();
-		this.columnCanvas.layout();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableCanvasPainter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableCanvasPainter.java
deleted file mode 100644
index 66903bf..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableCanvasPainter.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.herac.tuxguitar.gui.table;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Color;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class TGTableCanvasPainter implements PaintListener{
-	
-	private TGTableViewer viewer;
-	private TGTrack track;
-	
-	public TGTableCanvasPainter(TGTableViewer viewer,TGTrack track){
-		this.viewer = viewer;
-		this.track = track;
-	}
-	
-	public void paintControl(PaintEvent e) {
-		TGPainter painter = new TGPainter(e.gc);
-		paintTrack(painter);
-	}
-	
-	protected void paintTrack(TGPainter painter){
-		if(!TuxGuitar.instance().isLocked()){
-			TuxGuitar.instance().lock();
-			
-			int x = -this.viewer.getHScrollSelection();
-			int y = 0;
-			int size = this.viewer.getTable().getRowHeight();
-			int width = painter.getGC().getDevice().getBounds().width;
-			boolean playing = TuxGuitar.instance().getPlayer().isRunning();
-			
-			painter.setBackground(painter.getGC().getDevice().getSystemColor(SWT.COLOR_GRAY));
-			painter.initPath(TGPainter.PATH_FILL);
-			painter.setAntialias(false);
-			painter.addRectangle(0,y,width,size);
-			painter.closePath();
-			
-			Color trackColor = new Color(painter.getGC().getDevice(),this.track.getColor().getR(),this.track.getColor().getG(),this.track.getColor().getB());
-			painter.setBackground(trackColor);
-			painter.setForeground(trackColor);
-			
-			int count = this.track.countMeasures();
-			for(int j = 0;j < count;j++){
-				TGMeasureImpl measure = (TGMeasureImpl)this.track.getMeasure(j);
-				if(isRestMeasure(measure)){
-					painter.initPath();
-					painter.setAntialias(false);
-					painter.addRectangle(x,y,size - 2,size - 1);
-					painter.closePath();
-				}else{
-					painter.initPath(TGPainter.PATH_FILL);
-					painter.setAntialias(false);
-					painter.addRectangle(x,y,size - 1,size );
-					painter.closePath();
-				}
-				boolean hasCaret = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getMeasure().equals(measure);
-				if((playing && measure.isPlaying(this.viewer.getEditor().getTablature().getViewLayout())) || (!playing && hasCaret)){
-					painter.setBackground(painter.getGC().getDevice().getSystemColor(SWT.COLOR_BLACK));
-					painter.initPath(TGPainter.PATH_FILL);
-					painter.setAntialias(false);
-					painter.addRectangle(x + 4,y + 4,size - 9,size - 8);
-					painter.closePath();
-					painter.setBackground(trackColor);
-				}
-				x += size;
-			}
-			trackColor.dispose();
-			
-			TuxGuitar.instance().unlock();
-		}
-	}
-	
-	private boolean isRestMeasure(TGMeasureImpl measure){
-		int beatCount = measure.countBeats();
-		for(int i = 0; i < beatCount; i++){
-			if( !measure.getBeat(i).isRestBeat() ){
-				return false;
-			}
-		}
-		return true;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableColumn.java b/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableColumn.java
deleted file mode 100644
index 1a6d31c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableColumn.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.herac.tuxguitar.gui.table;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.herac.tuxguitar.gui.TuxGuitar;
-
-public class TGTableColumn {
-	private TGTable table;
-	private CLabel column;
-	private List controls;
-	
-	public TGTableColumn(TGTable table,int align){
-		this.table = table;
-		this.controls = new ArrayList();
-		this.column = new CLabel(this.table.getColumnControl(),align | SWT.SHADOW_OUT);
-		this.column.setLayout(new GridLayout());
-		this.column.addListener(SWT.Resize,new Listener() {
-			public void handleEvent(Event arg0) {
-				layout();
-			}
-		});
-		this.column.pack();
-		this.appendListeners(this.column);
-	}
-	
-	public CLabel getControl(){
-		return this.column;
-	}
-	
-	public void setTitle(String title){
-		this.column.setText(title);
-	}
-	
-	public void addControl(Control control){
-		this.controls.add(control);
-		this.appendListeners(control);
-	}
-	
-	public void appendListeners(Control control){
-		TuxGuitar.instance().getkeyBindingManager().appendListenersTo(control);
-	}
-	
-	public void layout(){
-		Point location = this.column.getLocation();
-		Point size = this.column.getSize();
-		
-		for(int i = 0; i < this.controls.size(); i ++){
-			Control control = (Control)this.controls.get(i);
-			if(!control.isDisposed()){
-				control.setSize(size.x,this.table.getRowHeight());
-				control.setLocation(location.x, 0);
-			}
-		}
-	}
-	
-	public void notifyRemoved(){
-		for(int i = 0; i < this.controls.size(); i ++){
-			Control control = (Control)this.controls.get(i);
-			if(control.isDisposed()){
-				this.controls.remove(i --);
-			}
-		}
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableRow.java b/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableRow.java
deleted file mode 100644
index c4fc889..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableRow.java
+++ /dev/null
@@ -1,169 +0,0 @@
-package org.herac.tuxguitar.gui.table;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.widgets.Composite;
-
-public class TGTableRow {
-	private TGTable table;
-	private Composite row;
-	private CLabel number;
-	private CLabel name;
-	private CLabel instrument;
-	private Composite painter;
-	private MouseListener mouseListenerLabel;
-	private MouseListener mouseListenerCanvas;
-	private PaintListener paintListenerCanvas;
-	
-	public TGTableRow(TGTable table){
-		this.table = table;
-		this.init();
-	}
-	
-	public void init(){
-		MouseListener mouseListenerLabel = new MouseListenerLabel();
-		MouseListener mouseListenerCanvas = new MouseListenerCanvas();
-		PaintListener paintListenerCanvas = new PaintListenerCanvas();
-		
-		this.row = new Composite(this.table.getRowControl(),SWT.NONE );
-		this.row.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
-		
-		this.number = new CLabel(this.row,SWT.LEFT);
-		this.number.addMouseListener(mouseListenerLabel);
-		this.table.addRowItem(this.table.getColumnNumber(),this.number,true);
-		
-		this.name = new CLabel(this.row,SWT.LEFT);
-		this.name.addMouseListener(mouseListenerLabel);
-		this.table.addRowItem(this.table.getColumnName(),this.name,true);
-		
-		this.instrument = new CLabel(this.row,SWT.LEFT);
-		this.instrument.addMouseListener(mouseListenerLabel);
-		this.table.addRowItem(this.table.getColumnInstrument(),this.instrument,true);
-		
-		this.painter = new Composite(this.row,SWT.DOUBLE_BUFFERED);
-		this.painter.addMouseListener(mouseListenerCanvas);
-		this.painter.addPaintListener(paintListenerCanvas);
-		this.table.addRowItem(this.table.getColumnCanvas(),this.painter,false);
-		
-		this.row.pack();
-	}
-	
-	public void setBackground(Color background){
-		this.number.setBackground(background);
-		this.name.setBackground(background);
-		this.instrument.setBackground(background);
-	}
-	
-	public void dispose(){
-		this.row.dispose();
-	}
-	
-	public Composite getPainter() {
-		return this.painter;
-	}
-	
-	public CLabel getInstrument() {
-		return this.instrument;
-	}
-	
-	public CLabel getName() {
-		return this.name;
-	}
-	
-	public CLabel getNumber() {
-		return this.number;
-	}
-	
-	public MouseListener getMouseListenerLabel() {
-		return this.mouseListenerLabel;
-	}
-	
-	public void setMouseListenerLabel(MouseListener mouseListenerLabel) {
-		this.mouseListenerLabel = mouseListenerLabel;
-	}
-	
-	public MouseListener getMouseListenerCanvas() {
-		return this.mouseListenerCanvas;
-	}
-	
-	public void setMouseListenerCanvas(MouseListener mouseListenerCanvas) {
-		this.mouseListenerCanvas = mouseListenerCanvas;
-	}
-	
-	public PaintListener getPaintListenerCanvas() {
-		return this.paintListenerCanvas;
-	}
-	
-	public void setPaintListenerCanvas(PaintListener paintListenerCanvas) {
-		this.paintListenerCanvas = paintListenerCanvas;
-	}
-	
-	private class MouseListenerLabel implements MouseListener{
-		
-		public MouseListenerLabel(){
-			super();
-		}
-		
-		public void mouseDoubleClick(MouseEvent e) {
-			if(getMouseListenerLabel() != null){
-				getMouseListenerLabel().mouseDoubleClick(e);
-			}
-		}
-		
-		public void mouseDown(MouseEvent e) {
-			if(getMouseListenerLabel() != null){
-				getMouseListenerLabel().mouseDown(e);
-			}
-		}
-		
-		public void mouseUp(MouseEvent e) {
-			if(getMouseListenerLabel() != null){
-				getMouseListenerLabel().mouseUp(e);
-			}
-		}
-	}
-	
-	private class MouseListenerCanvas implements MouseListener{
-		
-		public MouseListenerCanvas(){
-			super();
-		}
-		
-		public void mouseDoubleClick(MouseEvent e) {
-			if(getMouseListenerCanvas() != null){
-				getMouseListenerCanvas().mouseDoubleClick(e);
-			}
-		}
-		
-		public void mouseDown(MouseEvent e) {
-			if(getMouseListenerCanvas() != null){
-				getMouseListenerCanvas().mouseDown(e);
-			}
-		}
-		
-		public void mouseUp(MouseEvent e) {
-			if(getMouseListenerCanvas() != null){
-				getMouseListenerCanvas().mouseUp(e);
-			}
-		}
-	}
-	
-	private class PaintListenerCanvas implements PaintListener{
-		
-		public PaintListenerCanvas(){
-			super();
-		}
-		
-		public void paintControl(PaintEvent e) {
-			if(getPaintListenerCanvas() != null){
-				getPaintListenerCanvas().paintControl(e);
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableViewer.java b/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableViewer.java
deleted file mode 100644
index b859fae..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/table/TGTableViewer.java
+++ /dev/null
@@ -1,360 +0,0 @@
-package org.herac.tuxguitar.gui.table;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseListener;
-import org.eclipse.swt.graphics.Color;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.ScrollBar;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.actions.composition.ChangeInfoAction;
-import org.herac.tuxguitar.gui.actions.track.GoToTrackAction;
-import org.herac.tuxguitar.gui.actions.track.TrackPropertiesAction;
-import org.herac.tuxguitar.gui.editors.TGRedrawListener;
-import org.herac.tuxguitar.gui.editors.TGUpdateListener;
-import org.herac.tuxguitar.gui.editors.TablatureEditor;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.editors.tab.TGTrackImpl;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.player.base.MidiInstrument;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class TGTableViewer implements TGRedrawListener, TGUpdateListener, LanguageLoader{
-	
-	public static final Color[] BACKGROUNDS = new Color[]{
-		new Color(TuxGuitar.instance().getDisplay(),255,255,255),
-		new Color(TuxGuitar.instance().getDisplay(),238,238,238),
-		new Color(TuxGuitar.instance().getDisplay(),192,192,192)
-	};
-	
-	private Composite composite;
-	private ScrollBar hSroll;
-	private TGTable table;
-	private int selectedTrack;
-	private int selectedMeasure;
-	private int trackCount = 0;
-	private boolean autoSizeEnabled;
-	private boolean update;
-	private boolean followScroll;
-	
-	public TGTableViewer() {
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		TuxGuitar.instance().getEditorManager().addRedrawListener(this);
-		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
-	}
-	
-	public void init(Composite parent){
-		this.composite = new Composite(parent,SWT.H_SCROLL);
-		this.addLayout();
-		this.addTable();
-		this.addHScroll();
-		this.loadConfig();
-	}
-	
-	private void addLayout(){
-		GridLayout layout = new GridLayout();
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		layout.marginTop = 0;
-		layout.marginBottom = 0;
-		layout.horizontalSpacing = 0;
-		layout.verticalSpacing = 0;
-		getComposite().setLayout(layout);
-	}
-	
-	private void addHScroll(){
-		this.hSroll = getComposite().getHorizontalBar();
-		this.hSroll.addListener(SWT.Selection, new Listener() {
-			public void handleEvent(Event e) {
-				redrawLocked();
-			}
-		});
-	}
-	
-	private void addTable(){
-		MouseListener listener = mouseFocusListener();
-		this.table = new TGTable(getComposite());
-		this.table.getColumnNumber().getControl().addMouseListener(listener);
-		this.table.getColumnName().getControl().addMouseListener(listener);
-		this.table.getColumnInstrument().getControl().addMouseListener(listener);
-		this.table.getColumnCanvas().getControl().addMouseListener(listener);
-		this.table.getColumnCanvas().getControl().addMouseListener(new MouseAdapter() {
-			public void mouseDoubleClick(MouseEvent e) {
-				TuxGuitar.instance().getAction(ChangeInfoAction.NAME).process(e);
-			}
-		});
-		this.fireUpdate(true);
-		this.loadProperties();
-	}
-	
-	public void loadProperties() {
-		this.table.getColumnNumber().setTitle(TuxGuitar.getProperty("track.number"));
-		this.table.getColumnName().setTitle(TuxGuitar.getProperty("track.name"));
-		this.table.getColumnInstrument().setTitle(TuxGuitar.getProperty("track.instrument"));
-	}
-	
-	public void fireUpdate(boolean newSong){
-		this.update = true;
-		if(newSong){
-			this.trackCount = 0;
-		}
-	}
-	
-	public void updateItems(){
-		this.followScroll = true;
-	}
-	
-	public void updateHScroll(){
-		int width = (getEditor().getTablature().getCaret().getTrack().countMeasures() * this.table.getRowHeight());
-		this.hSroll.setIncrement(this.table.getScrollIncrement());
-		this.hSroll.setMaximum(width);
-		this.hSroll.setThumb(Math.min(width ,this.table.getColumnCanvas().getControl().getClientArea().width));
-	}
-	
-	public TGTable getTable(){
-		return this.table;
-	}
-	
-	public int getHScrollSelection(){
-		return this.hSroll.getSelection();
-	}
-	
-	public TablatureEditor getEditor(){
-		return TuxGuitar.instance().getTablatureEditor();
-	}
-	
-	private String getInstrument(TGTrack track){
-		if(track.isPercussionTrack()){
-			return TuxGuitar.getProperty("track.name.default-percussion-name");
-		}
-		MidiInstrument[] list = TuxGuitar.instance().getPlayer().getInstruments();
-		int index = track.getChannel().getInstrument();
-		if(list != null && index >= 0 && index < list.length){
-			return list[index].getName();
-		}
-		return new String();
-	}
-	
-	private void updateTable(){
-		if(this.update){
-			int count = TuxGuitar.instance().getSongManager().getSong().countTracks();
-			this.table.removeRowsAfter(count);
-			for(int i = this.table.getRowCount(); i < count; i ++){
-				this.table.newRow();
-			}
-			
-			for(int i = 0; i < count; i ++){
-				final TGTrack track = TuxGuitar.instance().getSongManager().getSong().getTrack(i);
-				final TGTableRow row = this.table.getRow(i);
-				if(row != null){
-					//Number
-					row.getNumber().setText(Integer.toString(track.getNumber()));
-					row.getNumber().setData(track);
-					
-					//Name
-					row.getName().setText(track.getName());
-					row.getName().setData(track);
-					
-					//Instrument
-					row.getInstrument().setText(getInstrument(track));
-					row.getInstrument().setData(track);
-					
-					row.setMouseListenerLabel(new MouseAdapter() {
-						
-						public void mouseUp(MouseEvent e) {
-							row.getPainter().setFocus();
-						}
-						
-						public void mouseDown(MouseEvent e) {
-							if(track.getNumber() != getEditor().getTablature().getCaret().getTrack().getNumber()){
-								TuxGuitar.instance().getAction(GoToTrackAction.NAME).process(e);
-							}
-						}
-						
-						public void mouseDoubleClick(final MouseEvent e) {
-							new Thread(new Runnable() {
-								public void run() {
-									ActionLock.waitFor();
-									TuxGuitar.instance().getAction(TrackPropertiesAction.NAME).process(e);
-								}
-							}).start();
-						}
-					});
-					row.setMouseListenerCanvas(new MouseAdapter() {
-						
-						public void mouseUp(MouseEvent e) {
-							row.getPainter().setFocus();
-						}
-						
-						public void mouseDown(MouseEvent e) {
-							int index = ((e.x + getHScrollSelection())/ getTable().getRowHeight());
-							if(index >= 0 && index < track.countMeasures()){
-								TGMeasureImpl measure = (TGMeasureImpl)track.getMeasure(index);
-								TGBeat beat = TuxGuitar.instance().getSongManager().getMeasureManager().getFirstBeat(measure.getBeats());
-								if(beat != null){
-									getEditor().getTablature().getCaret().moveTo((TGTrackImpl)track,measure,beat,1);
-									TuxGuitar.instance().updateCache(true);
-								}
-							}
-						}
-					});
-					row.setPaintListenerCanvas(new TGTableCanvasPainter(this,track));
-				}
-			}
-			this.table.update();
-			this.selectedTrack = 0;
-			this.selectedMeasure = 0;
-			
-			if(this.autoSizeEnabled && this.trackCount != count){
-				TuxGuitar.instance().setTableHeight( getHeight() );
-				this.trackCount = count;
-			}
-			
-		}
-		this.update = false;
-	}
-	
-	private int getHeight(){
-		Rectangle r1 = this.composite.getBounds();
-		Rectangle r2 = this.composite.getClientArea();
-		return ( this.table.getMinHeight() + (r1.height - r2.height) );
-		//return ( this.table.getMinHeight() + getComposite().getHorizontalBar().getSize().y );
-	}
-	
-	private void redrawRows(int selectedTrack){
-		int rows = this.table.getRowCount();
-		for(int i = 0; i < rows; i ++){
-			TGTableRow row = this.table.getRow(i); 
-			row.getPainter().redraw();
-			if(this.selectedTrack != selectedTrack){
-				row.setBackground( ((selectedTrack - 1) == i)?BACKGROUNDS[2]:BACKGROUNDS[ i % 2] );
-			}
-		}
-	}
-	
-	public void redrawLocked(){
-		if( !TuxGuitar.instance().isLocked() ){
-			TuxGuitar.instance().lock();
-			redraw();
-			TuxGuitar.instance().unlock();
-		}
-	}
-	
-	public void redraw(){
-		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
-			this.updateTable();
-			this.table.getColumnCanvas().setTitle(TuxGuitar.instance().getSongManager().getSong().getName());
-			int selectedTrack = getEditor().getTablature().getCaret().getTrack().getNumber();
-			this.redrawRows(selectedTrack);
-			this.selectedTrack = selectedTrack;
-			this.selectedMeasure = 0;
-			this.updateHScroll();
-			
-			if(this.followScroll){
-				this.followHorizontalScroll(getEditor().getTablature().getCaret().getMeasure().getNumber());
-				this.followScroll = false;
-			}
-			getComposite().redraw();
-		}
-	}
-	
-	public void redrawPlayingMode(){
-		if(!isDisposed() && !TuxGuitar.instance().isLocked()){
-			TGMeasure measure =  TuxGuitar.instance().getEditorCache().getPlayMeasure();
-			if(measure != null && measure.getTrack() != null){
-				this.updateTable();
-				int selectedTrack = measure.getTrack().getNumber();
-				int selectedMeasure = measure.getNumber();
-				if(this.selectedTrack != selectedTrack || this.selectedMeasure != selectedMeasure){
-					this.redrawRows(selectedTrack);
-					this.followHorizontalScroll(selectedMeasure);
-				}
-				this.selectedTrack = selectedTrack;
-				this.selectedMeasure = selectedMeasure;
-			}
-		}
-	}
-	
-	private void followHorizontalScroll(int selectedMeasure){
-		int hScrollSelection = this.hSroll.getSelection();
-		int hScrollThumb = this.hSroll.getThumb();
-		
-		int measureSize = this.table.getRowHeight();
-		int measurePosition = ( (selectedMeasure * measureSize) - measureSize );
-		
-		if( (measurePosition - hScrollSelection) < 0 || (measurePosition + measureSize - hScrollSelection ) > hScrollThumb){
-			this.hSroll.setSelection(measurePosition);
-		}
-	}
-	
-	public void loadConfig(){
-		this.autoSizeEnabled = TuxGuitar.instance().getConfig().getBooleanConfigValue(TGConfigKeys.TABLE_AUTO_SIZE);
-		this.trackCount = 0;
-	}
-	
-	public static void disposeColors(){
-		for(int i = 0;i < BACKGROUNDS.length;i++){
-			BACKGROUNDS[i].dispose();
-		}
-	}
-	
-	public Composite getComposite(){
-		return this.composite;
-	}
-	
-	public void dispose(){
-		if(!isDisposed()){
-			getComposite().dispose();
-			disposeColors();
-		}
-	}
-	
-	public boolean isDisposed(){
-		return (getComposite() == null || getComposite().isDisposed());
-	}
-	
-	protected int getSelectedTrack(){
-		return this.selectedTrack;
-	}
-	
-	private MouseListener mouseFocusListener(){
-		return new MouseAdapter() {
-			public void mouseUp(MouseEvent e) {
-				TGTable table = getTable();
-				if(table != null){
-					TGTableRow row = table.getRow( ( getSelectedTrack() - 1 ) );
-					if(row != null){
-						row.getPainter().setFocus();
-					}
-				}
-			}
-		};
-	}
-
-	public void doRedraw(int type) {
-		if( type == TGRedrawListener.NORMAL ){
-			this.redraw();
-		}else if( type == TGRedrawListener.PLAYING_NEW_BEAT ){
-			this.redrawPlayingMode();
-		}
-	}
-	
-	public void doUpdate(int type) {
-		if( type == TGUpdateListener.SELECTION ){
-			this.updateItems();
-		}else if( type == TGUpdateListener.SONG_UPDATED ){
-			this.fireUpdate( false );
-		}else if( type == TGUpdateListener.SONG_LOADED ){
-			this.fireUpdate( true );
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserCollection.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserCollection.java
deleted file mode 100644
index ab196c9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserCollection.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser;
-
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
-
-public class TGBrowserCollection {
-	
-	private String type;
-	private TGBrowserData data;
-	
-	public TGBrowserCollection(){
-		super();
-	}
-	
-	public TGBrowserData getData() {
-		return this.data;
-	}
-	
-	public void setData(TGBrowserData data) {
-		this.data = data;
-	}
-	
-	public String getType() {
-		return this.type;
-	}
-	
-	public void setType(String type) {
-		this.type = type;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserCollectionInfo.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserCollectionInfo.java
deleted file mode 100644
index 13e05f1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserCollectionInfo.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser;
-
-public class TGBrowserCollectionInfo {
-	
-	private String type;
-	private String data;
-	
-	public TGBrowserCollectionInfo(){
-		super();
-	}
-	
-	public String getData() {
-		return this.data;
-	}
-	
-	public void setData(String data) {
-		this.data = data;
-	}
-	
-	public String getType() {
-		return this.type;
-	}
-	
-	public void setType(String type) {
-		this.type = type;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserConnection.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserConnection.java
deleted file mode 100644
index 41561f1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserConnection.java
+++ /dev/null
@@ -1,225 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser;
-
-import java.io.InputStream;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
-
-public class TGBrowserConnection {
-	
-	private boolean locked;
-	private TGBrowser browser;
-	private TGBrowserConnectionHandler handler;
-	
-	public TGBrowserConnection(TGBrowserConnectionHandler handler){
-		this.handler = handler;
-	}
-	
-	protected void lock(){
-		this.locked = true;
-		this.handler.notifyLockStatusChanged();
-	}
-	
-	protected void unlock(){
-		this.locked = false;
-		this.handler.notifyLockStatusChanged();
-	}
-	
-	public boolean isLocked(){
-		return this.locked;
-	}
-	
-	public TGBrowser getBrowser(){
-		return this.browser;
-	}
-	
-	public boolean isOpen(){
-		return (getBrowser() != null);
-	}
-	
-	public void open(final int callId,final TGBrowser browser){
-		if(!isLocked()){
-			this.close(callId);
-			this.lock();
-			this.browser = browser;
-			new Thread(new Runnable() {
-				public void run() {
-					try {
-						if(getBrowser() != null){
-							getBrowser().open();
-							notifyOpened(callId);
-						}else{
-							notifyClosed(callId);
-						}
-					} catch (TGBrowserException e) {
-						notifyError(callId,e);
-						e.printStackTrace();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	public void close(final int callId){
-		if(!isLocked()){
-			this.lock();
-			final TGBrowser browser = getBrowser();
-			this.browser = null;
-			new Thread(new Runnable() {
-				public void run() {
-					try {
-						if(browser != null){
-							browser.close();
-							notifyClosed(callId);
-						}else{
-							notifyClosed(callId);
-						}
-					} catch (TGBrowserException e) {
-						notifyError(callId,e);
-						e.printStackTrace();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	public void cdRoot(final int callId){
-		if(!isLocked()){
-			this.lock();
-			new Thread(new Runnable() {
-				public void run() {
-					try {
-						if(isOpen()){
-							getBrowser().cdRoot();
-							notifyCd(callId);
-						}else{
-							notifyClosed(callId);
-						}
-					} catch (TGBrowserException e) {
-						notifyError(callId,e);
-						e.printStackTrace();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	public void cdUp(final int callId){
-		if(!isLocked()){
-			this.lock();
-			new Thread(new Runnable() {
-				public void run() {
-					try {
-						if(isOpen()){
-							getBrowser().cdUp();
-							notifyCd(callId);
-						}else{
-							notifyClosed(callId);
-						}
-					} catch (TGBrowserException e) {
-						notifyError(callId,e);
-						e.printStackTrace();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	public void cd(final int callId,final TGBrowserElement element){
-		if(!isLocked()){
-			this.lock();
-			new Thread(new Runnable() {
-				public void run() {
-					try {
-						if(isOpen()){
-							getBrowser().cdElement(element);
-							notifyCd(callId);
-						}else{
-							notifyClosed(callId);
-						}
-					} catch (TGBrowserException e) {
-						notifyError(callId,e);
-						e.printStackTrace();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	public void listElements(final int callId){
-		if(!isLocked()){
-			this.lock();
-			new Thread(new Runnable() {
-				public void run() {
-					try {
-						if(isOpen()){
-							List elements = getBrowser().listElements();
-							notifyElements(callId,elements);
-						}else{
-							notifyClosed(callId);
-						}
-					} catch (TGBrowserException e) {
-						notifyError(callId,e);
-						e.printStackTrace();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	public void openStream(final int callId,final TGBrowserElement element){
-		if(!isLocked()){
-			this.lock();
-			new Thread(new Runnable() {
-				public void run() {
-					try {
-						if(element == null){
-							release();
-							return;
-						}
-						if(element.isFolder()){
-							release();
-							cd(callId,element);
-						}
-						else{
-							InputStream stream = element.getInputStream();
-							notifyStream(callId,stream,element);
-						}
-					} catch (TGBrowserException e) {
-						notifyError(callId,e);
-						e.printStackTrace();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	public void release(){
-		this.unlock();
-	}
-	
-	public void notifyCd(final int callId) {
-		this.handler.notifyCd(callId);
-	}
-	
-	public void notifyClosed(final int callId) {
-		this.handler.notifyClosed(callId);
-	}
-	
-	public void notifyElements(final int callId,List elements) {
-		this.handler.notifyElements(callId,elements);
-	}
-	
-	public void notifyError(final int callId,Throwable throwable) {
-		this.handler.notifyError(callId,throwable);
-	}
-	
-	public void notifyOpened(final int callId) {
-		this.handler.notifyOpened(callId);
-	}
-	
-	public void notifyStream(final int callId,InputStream stream, TGBrowserElement element) {
-		this.handler.notifyStream(callId,stream,element);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserConnectionHandler.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserConnectionHandler.java
deleted file mode 100644
index 1b7e0d6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserConnectionHandler.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser;
-
-import java.io.InputStream;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
-
-public interface TGBrowserConnectionHandler {
-	
-	public void notifyLockStatusChanged();
-	
-	public void notifyOpened(int callId);
-	
-	public void notifyClosed(int callId);
-	
-	public void notifyCd(int callId);
-	
-	public void notifyElements(int callId,List elements);
-	
-	public void notifyStream(int callId,InputStream stream,TGBrowserElement element);
-	
-	public void notifyError(int callId,Throwable throwable);
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserException.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserException.java
deleted file mode 100644
index d858259..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserException.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser;
-
-public class TGBrowserException extends Exception{
-	
-	private static final long serialVersionUID = 1L;
-	
-	public TGBrowserException() {
-		super();
-	}
-	
-	public TGBrowserException(String message, Throwable cause) {
-		super(message, cause);
-	}
-	
-	public TGBrowserException(String message) {
-		super(message);
-	}
-	
-	public TGBrowserException(Throwable cause) {
-		super(cause);
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserFactoryHandler.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserFactoryHandler.java
deleted file mode 100644
index 654b7e5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserFactoryHandler.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser;
-
-public interface TGBrowserFactoryHandler {
-	
-	public void notifyAdded();
-	
-	public void notifyRemoved();
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserManager.java
deleted file mode 100644
index 81923e3..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/TGBrowserManager.java
+++ /dev/null
@@ -1,162 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
-import org.herac.tuxguitar.gui.tools.browser.filesystem.TGBrowserFactoryImpl;
-import org.herac.tuxguitar.gui.tools.browser.xml.TGBrowserReader;
-import org.herac.tuxguitar.gui.tools.browser.xml.TGBrowserWriter;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-
-public class TGBrowserManager {
-	
-	private static TGBrowserManager instance;
-	
-	private List factories;
-	private List collections;
-	private List collectionInfos;
-	private boolean changes;
-	
-	private TGBrowserFactoryHandler handler;
-	
-	private TGBrowserManager(){
-		this.factories = new ArrayList();
-		this.collections = new ArrayList();
-		this.collectionInfos = new ArrayList();
-		this.readCollections();
-		this.addDefaultFactory();
-	}
-	
-	public static TGBrowserManager instance(){
-		if(instance == null){
-			instance = new TGBrowserManager();
-		}
-		return instance;
-	}
-	
-	public void setFactoryHandler(TGBrowserFactoryHandler handler){
-		this.handler = handler;
-	}
-	
-	public Iterator getFactories(){
-		return this.factories.iterator();
-	}
-	
-	public TGBrowserFactory getFactory(String type){
-		Iterator factories = getFactories();
-		while(factories.hasNext()){
-			TGBrowserFactory factory = (TGBrowserFactory)factories.next();
-			if(factory.getType().equals(type)){
-				return factory;
-			}
-		}
-		return null;
-	}
-	
-	public void addFactory(TGBrowserFactory factory){
-		this.factories.add(factory);
-		
-		Iterator it = this.collectionInfos.iterator();
-		while(it.hasNext()){
-			TGBrowserCollectionInfo info = (TGBrowserCollectionInfo)it.next();
-			if(info.getType().equals(factory.getType())){
-				TGBrowserCollection collection = new TGBrowserCollection();
-				collection.setType(factory.getType());
-				collection.setData(factory.parseData(info.getData()));
-				addCollection(collection);
-			}
-		}
-		
-		if(this.handler != null){
-			this.handler.notifyAdded();
-		}
-	}
-	
-	public void removeFactory(TGBrowserFactory factory){
-		this.factories.remove(factory);
-		
-		int index = 0;
-		while(index < this.collections.size()){
-			TGBrowserCollection collection = (TGBrowserCollection)this.collections.get(index);
-			if(collection.getType().equals(factory.getType())){
-				removeCollection(collection);
-				continue;
-			}
-			index ++;
-		}
-		if(this.handler != null){
-			this.handler.notifyRemoved();
-		}
-	}
-	
-	public void addInfo(TGBrowserCollectionInfo info){
-		this.collectionInfos.add(info);
-	}
-	
-	public Iterator getCollections(){
-		return this.collections.iterator();
-	}
-	
-	public int countCollections(){
-		return this.collections.size();
-	}
-	
-	public void removeCollection(TGBrowserCollection collection){
-		this.collections.remove(collection);
-		this.changes = true;
-	}
-	
-	public TGBrowserCollection addCollection(TGBrowserCollection collection){
-		if(collection.getData() != null ){
-			TGBrowserCollection existent = getCollection(collection.getType(), collection.getData());
-			if( existent != null ){
-				return existent;
-			}
-			this.collections.add(collection);
-			this.changes = true;
-		}
-		return collection;
-	}
-	
-	public TGBrowserCollection getCollection(String type, TGBrowserData data ){
-		Iterator it = this.getCollections();
-		while( it.hasNext() ){
-			TGBrowserCollection collection = ( TGBrowserCollection ) it.next();
-			if( collection.getType().equals(type) && collection.getData().equals(data) ){
-				return collection;
-			}
-		}
-		return null;
-	}
-	
-	public TGBrowserCollection getCollection(int index){
-		if(index >= 0 && index < countCollections()){
-			return (TGBrowserCollection)this.collections.get(index);
-		}
-		return null;
-	}
-	
-	public void readCollections(){
-		new TGBrowserReader().loadCollections(this,new File(getCollectionsFileName()));
-		this.changes = false;
-	}
-	
-	public void writeCollections(){
-		if(this.changes){
-			new TGBrowserWriter().saveCollections(this,getCollectionsFileName());
-		}
-		this.changes = false;
-	}
-	
-	private String getCollectionsFileName(){
-		return TGFileUtils.PATH_USER_CONFIG + File.separator + "browser-collections.xml";
-	}
-	
-	private void addDefaultFactory(){
-		this.addFactory(new TGBrowserFactoryImpl());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowser.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowser.java
deleted file mode 100644
index 5803626..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowser.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.base;
-
-import java.util.List;
-
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserException;
-
-public abstract class TGBrowser {
-	
-	public TGBrowser(){
-		super();
-	}
-	
-	public abstract void open() throws TGBrowserException;
-	
-	public abstract void close()throws TGBrowserException;
-	
-	public abstract void cdRoot()throws TGBrowserException;
-	
-	public abstract void cdUp()throws TGBrowserException;
-	
-	public abstract void cdElement(TGBrowserElement element)throws TGBrowserException;
-	
-	public abstract List listElements()throws TGBrowserException;
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserData.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserData.java
deleted file mode 100644
index da76853..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserData.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.base;
-
-public interface TGBrowserData {
-	
-	public String getTitle();
-	
-	public String toString();
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserElement.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserElement.java
deleted file mode 100644
index 37146bd..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserElement.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.base;
-
-import java.io.InputStream;
-
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserException;
-
-public abstract class TGBrowserElement {
-	
-	private String name;
-	
-	public TGBrowserElement(String name){
-		this.name = name;
-	}
-	
-	public String getName(){
-		return this.name;
-	}
-	
-	public abstract boolean isFolder();
-	
-	public abstract InputStream getInputStream() throws TGBrowserException;
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserFactory.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserFactory.java
deleted file mode 100644
index a43e692..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/base/TGBrowserFactory.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.base;
-
-import org.eclipse.swt.widgets.Shell;
-
-public interface TGBrowserFactory {
-	
-	public String getName();
-	
-	public String getType();
-	
-	public TGBrowserData parseData(String string);
-	
-	public TGBrowserData dataDialog(Shell parent);
-	
-	public TGBrowser newTGBrowser(TGBrowserData data);
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserBar.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserBar.java
deleted file mode 100644
index 5110e0f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserBar.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.dialog;
-
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
-
-public abstract class TGBrowserBar implements LanguageLoader{
-	private TGBrowserDialog browser;
-	
-	public TGBrowserBar(TGBrowserDialog browser){
-		this.browser = browser;
-	}
-	
-	public abstract void init(Shell shell);
-	
-	public abstract void updateItems();
-	
-	public abstract void updateCollections(TGBrowserCollection selection);
-	
-	protected TGBrowserDialog getBrowser(){
-		return this.browser;
-	}
-	
-	protected void newCollection(String type){
-		TGBrowserFactory factory = TGBrowserManager.instance().getFactory(type);
-		if(factory != null){
-			TGBrowserData data = factory.dataDialog(getBrowser().getShell());
-			if(data != null){
-				openCollection(addCollection(factory, data, true));
-			}
-		}
-	}
-	
-	protected TGBrowserCollection addCollection(TGBrowserFactory factory,String data){
-		return this.addCollection(factory,factory.parseData(data),false);
-	}
-	
-	protected TGBrowserCollection addCollection(TGBrowserFactory factory,TGBrowserData data,boolean reload){
-		TGBrowserCollection collection = new TGBrowserCollection();
-		collection.setType(factory.getType());
-		collection.setData(data);
-		collection = TGBrowserManager.instance().addCollection(collection);
-		if(reload){
-			getBrowser().updateCollections(collection);
-		}
-		return collection;
-	}
-	
-	protected void openCollection(TGBrowserCollection collection){
-		getBrowser().setCollection(collection);
-		getBrowser().openCollection();
-	}
-	
-	protected void removeCollection(TGBrowserCollection collection){
-		getBrowser().removeCollection(collection);
-	}
-	
-	protected void closeCollection(){
-		getBrowser().closeCollection();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserCollectionCombo.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserCollectionCombo.java
deleted file mode 100644
index ed781c1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserCollectionCombo.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.dialog;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.widgets.Combo;
-import org.eclipse.swt.widgets.Composite;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection;
-
-public class TGBrowserCollectionCombo {
-	
-	private Combo combo;
-	private List collections;
-	
-	public TGBrowserCollectionCombo(Composite parent, int style){
-		this.combo = new Combo(parent,style);
-		this.collections = new ArrayList();
-		this.addFirstElement();
-	}
-	
-	private void addFirstElement(){
-		this.combo.add(TuxGuitar.getProperty("browser.collection.select"));
-		this.combo.select(0);
-	}
-	
-	public void add(TGBrowserCollection collection) {
-		this.combo.add(collection.getData().getTitle());
-		this.collections.add(collection);
-	}
-	
-	public TGBrowserCollection getSelection(){
-		int index = ( this.combo.getSelectionIndex() - 1);
-		if(index >= 0 && index < this.collections.size()){
-			return ( (TGBrowserCollection)this.collections.get(index) );
-		}
-		return null;
-	}
-	
-	public void addSelectionListener(SelectionListener listener) {
-		this.combo.addSelectionListener(listener);
-	}
-	
-	public void setLayoutData(Object layoutData) {
-		this.combo.setLayoutData(layoutData);
-	}
-	
-	public void removeAll() {
-		this.combo.removeAll();
-		this.collections.clear();
-		this.addFirstElement();
-	}
-	
-	public void select(int index) {
-		this.combo.select( ( index + 1 ) );
-	}
-	
-	public void setEnabled(boolean enabled){
-		this.combo.setEnabled(enabled);
-	}
-	
-	public boolean isEmpty(){
-		return this.collections.isEmpty();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserDialog.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserDialog.java
deleted file mode 100644
index bd43167..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserDialog.java
+++ /dev/null
@@ -1,393 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.dialog;
-
-import java.io.InputStream;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Event;
-import org.eclipse.swt.widgets.Listener;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.actions.file.FileActionUtils;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserConnection;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserConnectionHandler;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserFactoryHandler;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
-import org.herac.tuxguitar.gui.util.ConfirmDialog;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.io.base.TGFileFormatException;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-import org.herac.tuxguitar.song.models.TGSong;
-
-public class TGBrowserDialog implements TGBrowserFactoryHandler,TGBrowserConnectionHandler,IconLoader,LanguageLoader{
-	
-	private static final int SHELL_WIDTH = 500;
-	private static final int SHELL_HEIGHT = 350;
-	
-	public static final int CALL_OPEN = 1;
-	public static final int CALL_CLOSE = 2;
-	public static final int CALL_CD_ROOT = 3;
-	public static final int CALL_CD_UP = 4;
-	public static final int CALL_LIST = 5;
-	public static final int CALL_ELEMENT = 6;
-	
-	private TGBrowserCollection collection;
-	private TGBrowserConnection connection;
-	private Shell dialog;
-	protected Table table;
-	protected TableColumn column;
-	protected List elements;
-	protected TGBrowserMenuBar menu;
-	protected TGBrowserToolBar toolBar;
-	
-	public TGBrowserDialog(){
-		this.connection = new TGBrowserConnection(this);
-		this.menu = new TGBrowserMenuBar(this);
-		this.toolBar = new TGBrowserToolBar(this);
-	}
-	
-	public TGBrowserConnection getConnection(){
-		return this.connection;
-	}
-	
-	public TGBrowserCollection getCollection() {
-		return this.collection;
-	}
-	
-	public void setCollection(TGBrowserCollection collection) {
-		this.collection = collection;
-	}
-	
-	public Shell getShell(){
-		return this.dialog;
-	}
-	
-	public void exit(){
-		this.getConnection().release();
-		this.getConnection().close(CALL_CLOSE);
-		TGBrowserManager.instance().writeCollections();
-		TuxGuitar.instance().getIconManager().removeLoader(this);
-	}
-	
-	public void show(){
-		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(),SWT.DIALOG_TRIM | SWT.RESIZE);
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-		
-		this.menu.init(getShell());
-		this.toolBar.init(getShell());
-		this.initTable(this.dialog);
-		this.updateCollections(null);
-		this.updateTable();
-		this.dialog.setSize(SHELL_WIDTH,SHELL_HEIGHT);
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				exit();
-			}
-		});
-		
-		this.loadProperties();
-		this.updateBars();
-		
-		TGBrowserManager.instance().setFactoryHandler(this);
-		TuxGuitar.instance().getIconManager().addLoader(this);
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER);
-	}
-	
-	private void initTable(Composite parent){
-		this.table = new Table(parent, SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION);
-		this.table.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.table.setLinesVisible(TuxGuitar.instance().getConfig().getBooleanConfigValue(TGConfigKeys.BROWSER_LINES_VISIBLE));
-		this.table.setHeaderVisible(false);
-		
-		this.column = new TableColumn(this.table, SWT.LEFT);
-		
-		this.table.addListener (SWT.MouseDoubleClick, new Listener() {
-			public void handleEvent (Event event) {
-				openElement();
-			}
-		});
-	}
-	
-	public boolean isDisposed(){
-		return (this.dialog == null || this.dialog.isDisposed());
-	}
-	
-	public void dispose(){
-		if(!isDisposed()){
-			this.dialog.dispose();
-		}
-	}
-	
-	private void updateTable(){
-		if(!isDisposed()){
-			new SyncThread(new Runnable() {
-				public void run() {
-					if(!isDisposed()){
-						TGBrowserDialog.this.table.removeAll();
-						if(TGBrowserDialog.this.elements != null){
-							Iterator it = TGBrowserDialog.this.elements.iterator();
-							while(it.hasNext()){
-								TGBrowserElement element = (TGBrowserElement)it.next();
-								TableItem item = new TableItem(TGBrowserDialog.this.table, SWT.NONE);
-								item.setImage(element.isFolder()?TuxGuitar.instance().getIconManager().getBrowserFolder():TuxGuitar.instance().getIconManager().getBrowserFile());
-								item.setText(element.getName());
-							}
-						}
-						updateColumn();
-					}
-				}
-			}).start();
-		}
-	}
-	
-	protected void updateColumn(){
-		if(!isDisposed()){
-			this.column.pack();
-		}
-	}
-	
-	public void updateBars(){
-		if(!isDisposed()){
-			this.menu.updateItems();
-			this.toolBar.updateItems();
-		}
-	}
-	
-	public void updateCollections(final TGBrowserCollection selection){
-		if(!isDisposed()){
-			new SyncThread(new Runnable() {
-				public void run() {
-					if(!isDisposed()){
-						TGBrowserDialog.this.menu.updateCollections(selection);
-						TGBrowserDialog.this.toolBar.updateCollections(selection);
-					}
-				}
-			}).start();
-		}
-	}
-	
-	public TGBrowserElement getSelection(int index){
-		if(!isDisposed() && getConnection().isOpen()){
-			if(this.elements != null && index >= 0 && index < this.elements.size()){
-				return (TGBrowserElement)this.elements.get(index);
-			}
-		}
-		return null;
-	}
-	
-	protected void removeElements(){
-		this.elements = null;
-	}
-	
-	protected void addElements(List elements){
-		this.elements = elements;
-	}
-	
-	protected void openCollection(){
-		if(!isDisposed() && getCollection() != null){
-			TGBrowserFactory factory = TGBrowserManager.instance().getFactory(getCollection().getType());
-			getConnection().open(CALL_OPEN,factory.newTGBrowser(getCollection().getData()));
-		}
-	}
-	
-	protected void closeCollection(){
-		if(!isDisposed() && getCollection() != null){
-			this.getConnection().close(CALL_CLOSE);
-		}
-	}
-	
-	protected void removeCollection(TGBrowserCollection collection){
-		if(collection != null){
-			TGBrowserManager.instance().removeCollection(collection);
-			if( getCollection() != null && getCollection().equals( collection ) ){
-				this.getConnection().close(CALL_CLOSE);
-			}else{
-				this.updateCollections( getCollection() );
-			}
-		}
-	}
-	
-	public void openElement(){
-		TGBrowserElement element = getSelection(this.table.getSelectionIndex());
-		if(element != null){
-			this.getConnection().openStream(CALL_ELEMENT,element);
-		}
-	}
-	
-	public void notifyLockStatusChanged(){
-		new SyncThread(new Runnable() {
-			public void run() {
-				if(!isDisposed()){
-					updateBars();
-					TuxGuitar.instance().loadCursor(getShell(),( getConnection().isLocked() ? SWT.CURSOR_WAIT : SWT.CURSOR_ARROW ) );
-				}
-			}
-		}).start();
-	}
-	
-	public void notifyOpened(int callId) {
-		if(!isDisposed()){
-			this.removeElements();
-			this.updateTable();
-			this.updateCollections(getCollection());
-			this.getConnection().release();
-			this.getConnection().listElements(CALL_LIST);
-		}
-	}
-	
-	public void notifyClosed(int callId) {
-		if(callId != CALL_OPEN){
-			this.setCollection(null);
-		}
-		this.removeElements();
-		this.updateCollections(getCollection());
-		this.updateTable();
-		if(callId != CALL_OPEN){
-			this.getConnection().release();
-		}
-	}
-	
-	public void notifyError(int callId,Throwable throwable){
-		if(!isDisposed()){
-			this.updateTable();
-			this.getConnection().release();
-			MessageDialog.errorMessage(getShell(),throwable);
-		}
-	}
-	
-	public void notifyCd(int callId) {
-		if(!isDisposed()){
-			this.getConnection().release();
-			this.getConnection().listElements(CALL_LIST);
-		}
-	}
-	
-	public void notifyElements(int callId,List elements) {
-		if(!isDisposed()){
-			this.addElements(elements);
-			this.updateTable();
-			this.getConnection().release();
-		}
-	}
-	
-	public void notifyStream(int callId,final InputStream stream,final TGBrowserElement element) {
-		if(!isDisposed()){
-			ActionLock.lock();
-			new SyncThread(new Runnable() {
-				public void run() {
-					if(!TuxGuitar.isDisposed()){
-						TuxGuitar.instance().getPlayer().reset();
-						if(TuxGuitar.instance().getFileHistory().isUnsavedFile()){
-							ConfirmDialog confirm = new ConfirmDialog(TuxGuitar.getProperty("file.save-changes-question"));
-							confirm.setDefaultStatus( ConfirmDialog.STATUS_CANCEL );
-							int status = confirm.confirm(ConfirmDialog.BUTTON_YES | ConfirmDialog.BUTTON_NO | ConfirmDialog.BUTTON_CANCEL, ConfirmDialog.BUTTON_YES);
-							if(status == ConfirmDialog.STATUS_CANCEL){
-								getConnection().release();
-								ActionLock.unlock();
-								return;
-							}
-							if(status == ConfirmDialog.STATUS_YES){
-								final String fileName = FileActionUtils.getFileName();
-								if(fileName == null){
-									getConnection().release();
-									ActionLock.unlock();
-									return;
-								}
-								new Thread(new Runnable() {
-									public void run() {
-										if(!TuxGuitar.isDisposed()){
-											FileActionUtils.save(fileName);
-											new SyncThread(new Runnable() {
-												public void run() {
-													if(!TuxGuitar.isDisposed()){
-														openStream(stream,element);
-													}
-												}
-											}).start();
-										}
-									}
-								}).start();
-								return;
-							}
-						}
-						openStream(stream,element);
-					}
-				}
-			}).start();
-		}
-	}
-	
-	protected void openStream(final InputStream stream,final TGBrowserElement element){
-		new Thread(new Runnable() {
-			public void run() {
-				if(!TuxGuitar.isDisposed()){
-					try {
-						TGSong song = TGFileFormatManager.instance().getLoader().load(TuxGuitar.instance().getSongManager().getFactory(),stream);
-						TuxGuitar.instance().fireNewSong(song,null);
-					}catch (Throwable throwable) {
-						TuxGuitar.instance().newSong();
-						MessageDialog.errorMessage(getShell(),new TGFileFormatException(TuxGuitar.getProperty("file.open.error", new String[]{element.getName()}),throwable));
-					}
-					getConnection().release();
-					ActionLock.unlock();
-				}
-			}
-		}).start();
-	}
-	
-	public void loadIcons() {
-		if(!isDisposed()){
-			this.getShell().setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-			this.reload();
-		}
-	}
-	
-	public void loadProperties() {
-		if(!isDisposed()){
-			this.dialog.setText(TuxGuitar.getProperty("browser.dialog"));
-			this.menu.loadProperties();
-			this.toolBar.loadProperties();
-		}
-	}
-	
-	public void notifyAdded() {
-		reload();
-	}
-	
-	public void notifyRemoved() {
-		if(getCollection() != null){
-			closeCollection();
-		}
-		reload();
-	}
-	
-	protected void reload(){
-		if(!isDisposed()){
-			this.menu.reload(getShell());
-			this.toolBar.reload();
-			this.updateTable();
-			this.updateCollections(getCollection());
-			this.getShell().layout();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserMenuBar.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserMenuBar.java
deleted file mode 100644
index 92d0766..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserMenuBar.java
+++ /dev/null
@@ -1,217 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.dialog;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
-
-public class TGBrowserMenuBar extends TGBrowserBar{
-	private Menu menu;
-	private Menu newCollection;
-	private Menu openCollection;
-	private Menu removeCollection;
-	
-	private MenuItem menuFileItem;
-	private MenuItem menuCollectionItem;
-	private MenuItem menuGoItem;
-	private MenuItem open;
-	private MenuItem exit;
-	private MenuItem newItem;
-	private MenuItem openItem;
-	private MenuItem removeItem;
-	private MenuItem close;
-	private MenuItem root;
-	private MenuItem back;
-	private MenuItem refresh;
-	
-	public TGBrowserMenuBar(TGBrowserDialog browser){
-		super(browser);
-	}
-	
-	public void init(Shell shell){
-		this.menu = new Menu(shell, SWT.BAR);
-		
-		//---File menu------------------------------------------------------
-		Menu menuFile = new Menu(shell,SWT.DROP_DOWN);
-		this.menuFileItem = new MenuItem(this.menu, SWT.CASCADE);
-		this.menuFileItem.setMenu(menuFile);
-		
-		this.open = new MenuItem(menuFile,SWT.PUSH);
-		this.open.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
-		this.open.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				getBrowser().openElement();
-			}
-		});
-		
-		new MenuItem(menuFile,SWT.SEPARATOR);
-		
-		this.exit = new MenuItem(menuFile,SWT.PUSH);
-		this.exit.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				getBrowser().getShell().dispose();
-			}
-		});
-		
-		//---Collection menu------------------------------------------------------
-		Menu menuCollection = new Menu(shell,SWT.DROP_DOWN);
-		this.menuCollectionItem = new MenuItem(this.menu, SWT.CASCADE);
-		this.menuCollectionItem.setMenu(menuCollection);
-		
-		this.newCollection = new Menu(menuCollection.getShell(), SWT.DROP_DOWN);
-		this.newItem = new MenuItem(menuCollection,SWT.CASCADE);
-		this.newItem.setImage(TuxGuitar.instance().getIconManager().getBrowserNew());
-		this.newItem.setMenu(this.newCollection);
-		this.updateTypes();
-		
-		this.openCollection = new Menu(menuCollection.getShell(), SWT.DROP_DOWN);
-		this.openItem = new MenuItem(menuCollection,SWT.CASCADE);
-		this.openItem.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
-		this.openItem.setMenu(this.openCollection);
-		
-		this.removeCollection = new Menu(menuCollection.getShell(), SWT.DROP_DOWN);
-		this.removeItem = new MenuItem(menuCollection,SWT.CASCADE);
-		this.removeItem.setMenu(this.removeCollection);
-		
-		new MenuItem(menuCollection,SWT.SEPARATOR);
-		
-		this.close = new MenuItem(menuCollection,SWT.PUSH);
-		this.close.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				closeCollection();
-			}
-		});
-		
-		//---Go menu------------------------------------------------------
-		final Menu menuGo = new Menu(shell,SWT.DROP_DOWN);  
-		this.menuGoItem = new MenuItem(this.menu, SWT.CASCADE);
-		this.menuGoItem.setMenu(menuGo);
-		
-		this.root = new MenuItem(menuGo,SWT.PUSH);
-		this.root.setImage(TuxGuitar.instance().getIconManager().getBrowserRoot());
-		this.root.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				getBrowser().getConnection().cdRoot(TGBrowserDialog.CALL_CD_ROOT);
-			}
-		});
-		
-		//---Back Folder------------------------------------------------------
-		this.back = new MenuItem(menuGo,SWT.PUSH);
-		this.back.setImage(TuxGuitar.instance().getIconManager().getBrowserBack());
-		this.back.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				getBrowser().getConnection().cdUp(TGBrowserDialog.CALL_CD_UP);
-			}
-		});
-		
-		//---Refresh Folder------------------------------------------------------
-		this.refresh = new MenuItem(menuGo,SWT.PUSH);
-		this.refresh.setImage(TuxGuitar.instance().getIconManager().getBrowserRefresh());
-		this.refresh.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				getBrowser().getConnection().listElements(TGBrowserDialog.CALL_LIST);
-			}
-		});
-		
-		shell.setMenuBar(this.menu);
-	}
-	
-	public void updateItems(){
-		this.open.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
-		this.root.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
-		this.back.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
-		this.refresh.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
-		this.newItem.setEnabled(!getBrowser().getConnection().isLocked());
-		this.openItem.setEnabled(!getBrowser().getConnection().isLocked());
-		this.removeItem.setEnabled(!getBrowser().getConnection().isLocked());
-		this.close.setEnabled(!getBrowser().getConnection().isLocked());
-	}
-	
-	public void loadProperties(){
-		this.menuFileItem.setText(TuxGuitar.getProperty("browser.menu.file"));
-		this.menuCollectionItem.setText(TuxGuitar.getProperty("browser.menu.collection"));
-		this.menuGoItem.setText(TuxGuitar.getProperty("browser.menu.go"));
-		this.open.setText(TuxGuitar.getProperty("browser.open"));
-		this.exit.setText(TuxGuitar.getProperty("browser.exit"));
-		this.newItem.setText(TuxGuitar.getProperty("browser.collection.new"));
-		this.openItem.setText(TuxGuitar.getProperty("browser.collection.open"));
-		this.removeItem.setText(TuxGuitar.getProperty("browser.collection.remove"));
-		this.close.setText(TuxGuitar.getProperty("browser.collection.close"));
-		this.root.setText(TuxGuitar.getProperty("browser.go-root"));
-		this.back.setText(TuxGuitar.getProperty("browser.go-back"));
-		this.refresh.setText(TuxGuitar.getProperty("browser.refresh"));
-	}
-	
-	public void updateCollections(TGBrowserCollection selection){
-		MenuItem[] openItems = this.openCollection.getItems();
-		for(int i = 0;i < openItems.length; i ++){
-			openItems[i].dispose();
-		}
-		MenuItem[] removeItems = this.removeCollection.getItems();
-		for(int i = 0;i < removeItems.length; i ++){
-			removeItems[i].dispose();
-		}
-		Iterator it = TGBrowserManager.instance().getCollections();
-		while(it.hasNext()){
-			final TGBrowserCollection collection = (TGBrowserCollection)it.next();
-			if(collection.getData() != null){
-				MenuItem openItem = new MenuItem(this.openCollection,SWT.PUSH);
-				openItem.setText(collection.getData().getTitle());
-				openItem.addSelectionListener(new SelectionAdapter() {
-					public void widgetSelected(SelectionEvent e) {
-						openCollection(collection);
-					}
-				});
-				if(selection != null && selection.equals(collection)){
-					openItem.setSelection(true);
-				}
-				
-				MenuItem removeItem = new MenuItem(this.removeCollection,SWT.PUSH);
-				removeItem.setText(collection.getData().getTitle());
-				removeItem.addSelectionListener(new SelectionAdapter() {
-					public void widgetSelected(SelectionEvent e) {
-						removeCollection(collection);
-					}
-				});
-				if(selection != null && selection.equals(collection)){
-					removeItem.setSelection(true);
-				}
-			}
-		}
-	}
-	
-	public void updateTypes(){
-		MenuItem[] items = this.newCollection.getItems();
-		for(int i = 0;i < items.length; i ++){
-			items[i].dispose();
-		}
-		Iterator bookTypes = TGBrowserManager.instance().getFactories();
-		while(bookTypes.hasNext()){
-			final TGBrowserFactory bookType = (TGBrowserFactory)bookTypes.next();
-			MenuItem item = new MenuItem(this.newCollection,SWT.PUSH);
-			item.setText(bookType.getName());
-			item.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					newCollection( bookType.getType());
-				}
-			});
-		}
-	}
-	
-	public void reload(Shell shell){
-		if(this.menu != null && !this.menu.isDisposed()){
-			this.menu.dispose();
-		}
-		this.init(shell);
-		this.loadProperties();
-		this.updateItems();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserToolBar.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserToolBar.java
deleted file mode 100644
index ef39423..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/dialog/TGBrowserToolBar.java
+++ /dev/null
@@ -1,180 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.dialog;
-
-import java.util.Iterator;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Menu;
-import org.eclipse.swt.widgets.MenuItem;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
-
-public class TGBrowserToolBar extends TGBrowserBar{
-	private Composite composite;
-	private ToolBar toolBar;
-	private ToolItem newBrowser;
-	private ToolItem root;
-	private ToolItem back;
-	private ToolItem refresh;
-	protected Menu newBrowserMenu;
-	protected TGBrowserCollectionCombo collections;
-	
-	public TGBrowserToolBar(TGBrowserDialog browser){
-		super(browser);
-	}
-	
-	public void init(Shell shell){
-		this.composite = new Composite(shell,SWT.NONE);
-		this.composite.setLayout(getLayout());
-		this.composite.setLayoutData(new GridData(SWT.FILL,SWT.TOP,true,false));
-		this.initItems();
-	}
-	
-	public void initItems(){
-		this.toolBar = new ToolBar(this.composite,SWT.FLAT | SWT.WRAP);
-		
-		//---New Book----------------------------------------------------------
-		this.newBrowserMenu = new Menu(this.composite);
-		Iterator bookTypes = TGBrowserManager.instance().getFactories();
-		while(bookTypes.hasNext()) {
-			final TGBrowserFactory bookType = (TGBrowserFactory)bookTypes.next();
-			MenuItem item = new MenuItem(this.newBrowserMenu, SWT.PUSH);
-			item.setText(bookType.getName());
-			item.setData(bookType);
-			item.addSelectionListener(new SelectionAdapter() {
-				public void widgetSelected(SelectionEvent e) {
-					newCollection( bookType.getType());
-				}
-			});
-		}
-		this.newBrowser = new ToolItem(this.toolBar,SWT.DROP_DOWN);
-		this.newBrowser.setImage(TuxGuitar.instance().getIconManager().getBrowserNew());
-		this.newBrowser.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent event) {
-				if (event.detail == SWT.ARROW) {
-					ToolItem item = (ToolItem) event.widget;
-					Rectangle rect = item.getBounds();
-					Point pt = item.getParent().toDisplay(new Point(rect.x, rect.y));
-					TGBrowserToolBar.this.newBrowserMenu.setLocation(pt.x, pt.y + rect.height);
-					TGBrowserToolBar.this.newBrowserMenu.setVisible(true);
-				}
-			}
-		});
-		
-		new ToolItem(this.toolBar, SWT.SEPARATOR);
-		//---Root Folder------------------------------------------------------
-		this.root = new ToolItem(this.toolBar,SWT.PUSH);
-		this.root.setImage(TuxGuitar.instance().getIconManager().getBrowserRoot());
-		this.root.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				getBrowser().getConnection().cdRoot(TGBrowserDialog.CALL_CD_ROOT);
-			}
-		});
-		
-		//---Back Folder------------------------------------------------------
-		this.back = new ToolItem(this.toolBar,SWT.PUSH);
-		this.back.setImage(TuxGuitar.instance().getIconManager().getBrowserBack());
-		this.back.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				getBrowser().getConnection().cdUp(TGBrowserDialog.CALL_CD_UP);
-			}
-		});
-		
-		//---Refresh Folder------------------------------------------------------
-		this.refresh = new ToolItem(this.toolBar,SWT.PUSH);
-		this.refresh.setImage(TuxGuitar.instance().getIconManager().getBrowserRefresh());
-		this.refresh.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				getBrowser().getConnection().listElements(TGBrowserDialog.CALL_LIST);
-			}
-		});
-		
-		//---Finish tool bar
-		new ToolItem(this.toolBar, SWT.SEPARATOR);
-		
-		//---Collections-------------------------------------------------------------
-		this.collections = new TGBrowserCollectionCombo(this.composite, SWT.READ_ONLY);
-		this.collections.setLayoutData(new GridData(SWT.FILL,SWT.CENTER,true,true));
-		this.collections.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				updateCollection();
-			}
-		});
-	}
-	
-	public void updateItems(){
-		this.newBrowser.setEnabled(!getBrowser().getConnection().isLocked());
-		this.collections.setEnabled(!getBrowser().getConnection().isLocked());
-		this.root.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
-		this.back.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
-		this.refresh.setEnabled(!getBrowser().getConnection().isLocked() && getBrowser().getConnection().isOpen());
-	}
-	
-	public void updateCollections(TGBrowserCollection selection){
-		int index = 0;
-		this.collections.removeAll();
-		
-		Iterator it = TGBrowserManager.instance().getCollections();
-		while(it.hasNext()){
-			TGBrowserCollection collection = (TGBrowserCollection)it.next();
-			if(collection.getData() != null){
-				this.collections.add(collection);
-				if(selection != null && selection.equals(collection)){
-					this.collections.select(index);
-				}
-				index ++;
-			}
-		}
-	}
-	
-	public void reload(){
-		this.disposeItems();
-		this.initItems();
-		this.loadProperties();
-		this.updateItems();
-		this.composite.layout(true,true);
-	}
-	
-	public void loadProperties(){
-		this.newBrowser.setToolTipText(TuxGuitar.getProperty("browser.collection.new"));
-		this.root.setToolTipText(TuxGuitar.getProperty("browser.go-root"));
-		this.back.setToolTipText(TuxGuitar.getProperty("browser.go-back"));
-		this.refresh.setToolTipText(TuxGuitar.getProperty("browser.refresh"));
-		this.updateCollections(getBrowser().getCollection());
-	}
-	
-	protected void updateCollection(){
-		TGBrowserCollection collection = this.collections.getSelection();
-		if(collection == null){
-			closeCollection();
-		}else{
-			openCollection(collection);
-		}
-	}
-	
-	private void disposeItems(){
-		Control[] controls = this.composite.getChildren();
-		for(int i = 0; i < controls.length; i ++){
-			controls[i].dispose();
-		}
-	}
-	
-	private GridLayout getLayout(){
-		GridLayout layout = new GridLayout(2,false);
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		return layout;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataDialog.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataDialog.java
deleted file mode 100644
index 485bd06..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataDialog.java
+++ /dev/null
@@ -1,138 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.filesystem;
-
-import java.io.File;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.Text;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-
-public class TGBrowserDataDialog {
-	
-	private TGBrowserData data;
-	
-	public TGBrowserData getData() {
-		return this.data;
-	}
-	
-	public void setData(TGBrowserData data) {
-		this.data = data;
-	}
-	
-	public TGBrowserData open(Shell parent) {
-		final Shell dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("browser.collection.fs.editor-title"));
-		
-		Group group = new Group(dialog,SWT.SHADOW_ETCHED_IN);
-		group.setLayout(new GridLayout());
-		group.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		group.setText(TuxGuitar.getProperty("browser.collection.fs.editor-tip"));
-		
-		Composite composite = new Composite(group,SWT.NONE);
-		composite.setLayout(new GridLayout(3,false));
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		final Label titleLabel = new Label(composite,SWT.LEFT);
-		titleLabel.setText(TuxGuitar.getProperty("browser.collection.fs.name"));
-		titleLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
-		
-		final Text titleValue = new Text(composite,SWT.BORDER);
-		titleValue.setLayoutData(getTextData(2));
-		
-		final Label pathLabel = new Label(composite,SWT.LEFT);
-		pathLabel.setText(TuxGuitar.getProperty("browser.collection.fs.path"));
-		pathLabel.setLayoutData(new GridData(SWT.LEFT,SWT.CENTER,true,true));
-		
-		final Text pathValue = new Text(composite,SWT.BORDER);
-		pathValue.setLayoutData(getTextData(1));
-		
-		final Button pathChooser = new Button(composite,SWT.PUSH);
-		pathChooser.setImage(TuxGuitar.instance().getIconManager().getFileOpen());
-		pathChooser.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				DirectoryDialog directoryDialog = new DirectoryDialog(dialog);
-				String selection = directoryDialog.open();
-				if(selection != null){
-					pathValue.setText(selection);
-				}
-			}
-		});
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				String selectedTitle = titleValue.getText();
-				String selectedPath = pathValue.getText();
-				if(!isValidPath(selectedPath)){
-					MessageDialog.errorMessage(dialog,TuxGuitar.getProperty("browser.collection.fs.invalid-path"));
-					return;
-				}
-				if(isBlank(selectedTitle)){
-					selectedTitle = selectedPath;
-				}
-				setData(new TGBrowserDataImpl(selectedTitle,selectedPath));
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return getData();
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	private GridData getTextData(int span){
-		GridData data = new GridData(SWT.LEFT, SWT.CENTER, true, true,span,1);
-		data.minimumWidth = 350;
-		return data;
-	}
-	
-	protected boolean isBlank(String s){
-		return (s == null || s.length() == 0);
-	}
-	
-	protected boolean isValidPath(String path){
-		if(!isBlank(path)){
-			File file = new File(path);
-			return (file.exists() && file.isDirectory());
-		}
-		return false;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataImpl.java
deleted file mode 100644
index 4e3dff6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserDataImpl.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.filesystem;
-
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
-
-public class TGBrowserDataImpl implements TGBrowserData{
-	
-	private static final String STRING_SEPARATOR = ";";
-	
-	private String title;
-	private String path;
-	
-	public TGBrowserDataImpl(String title,String path){
-		this.title = title;
-		this.path = path;
-	}
-	
-	public String getTitle(){
-		return this.title;
-	}
-	
-	public String getPath(){
-		return this.path;
-	}
-	
-	public String toString(){
-		return (getTitle() + STRING_SEPARATOR + getPath());
-	}
-	
-	public static TGBrowserData fromString(String string) {
-		String[] data = string.split(STRING_SEPARATOR);
-		if(data.length == 2){
-			return new TGBrowserDataImpl(data[0],data[1]);
-		}
-		return null;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementComparator.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementComparator.java
deleted file mode 100644
index 8b66693..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementComparator.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.filesystem;
-
-import java.util.Comparator;
-
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
-
-public class TGBrowserElementComparator implements Comparator {
-	
-	private static final int RESULT_LESS = -1;
-	
-	private static final int RESULT_EQUAL = 0;
-	
-	private static final int RESULT_GREATER = 1;
-	
-	private static final int DIRECTION = 1;
-	
-	private static final int DIRECTION_FOLDER = 1;
-	
-	public int compare(Object o1, Object o2) {
-		if(o1 instanceof TGBrowserElement && o2 instanceof TGBrowserElement){
-			TGBrowserElement element1 = (TGBrowserElement)o1;
-			TGBrowserElement element2 = (TGBrowserElement)o2;
-			
-			if(element1.isFolder() && !element2.isFolder()){
-				return (DIRECTION_FOLDER * RESULT_LESS);
-			}
-			if(element2.isFolder() && !element1.isFolder()){
-				return (DIRECTION_FOLDER * RESULT_GREATER);
-			}
-			
-			return (DIRECTION * (element1.getName().compareTo(element2.getName())));
-		}
-		return RESULT_EQUAL;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementImpl.java
deleted file mode 100644
index 2d23b9e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserElementImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.filesystem;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserException;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
-
-public class TGBrowserElementImpl extends TGBrowserElement{
-	
-	private TGBrowserElementImpl parent;
-	private File file;
-	
-	public TGBrowserElementImpl(TGBrowserElementImpl parent,File file) {
-		super(file.getName());
-		this.parent = parent;
-		this.file = file;
-	}
-	
-	public File getFile() {
-		return this.file;
-	}
-	
-	public TGBrowserElementImpl getParent() {
-		return this.parent;
-	}
-	
-	public boolean isFolder(){
-		return getFile().isDirectory();
-	}
-	
-	public InputStream getInputStream() throws TGBrowserException {
-		if(!isFolder()){
-			try {
-				return new FileInputStream(getFile());
-			} catch (FileNotFoundException e) {
-				throw new TGBrowserException(e);
-			}
-		}
-		return null;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserFactoryImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserFactoryImpl.java
deleted file mode 100644
index c3ca003..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserFactoryImpl.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.filesystem;
-
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserData;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserFactory;
-
-public class TGBrowserFactoryImpl implements TGBrowserFactory{
-	
-	public TGBrowserFactoryImpl() {
-		super();
-	}
-	
-	public String getType(){
-		return "file.system";
-	}
-	
-	public String getName(){
-		return TuxGuitar.getProperty("browser.factory.fs.name");
-	}
-	
-	public TGBrowser newTGBrowser(TGBrowserData data) {
-		if(data instanceof TGBrowserDataImpl){
-			return new TGBrowserImpl((TGBrowserDataImpl)data);
-		}
-		return null;
-	}
-	
-	public TGBrowserData parseData(String string) {
-		return TGBrowserDataImpl.fromString(string);
-	}
-	
-	public TGBrowserData dataDialog(Shell parent) {
-		TGBrowserDataDialog dialog = new TGBrowserDataDialog();
-		return dialog.open(parent);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserImpl.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserImpl.java
deleted file mode 100644
index 85786dc..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/filesystem/TGBrowserImpl.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.filesystem;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowser;
-import org.herac.tuxguitar.gui.tools.browser.base.TGBrowserElement;
-
-public class TGBrowserImpl extends TGBrowser{
-	
-	private File root;
-	private TGBrowserElementImpl element;
-	private TGBrowserDataImpl data;
-	
-	public TGBrowserImpl(TGBrowserDataImpl data){
-		this.data = data;
-	}
-	
-	public void open(){
-		this.root = new File(this.data.getPath());
-	}
-	
-	public void close(){
-		this.root = null;
-	}
-	
-	public void cdElement(TGBrowserElement element) {
-		this.element = (TGBrowserElementImpl)element;
-	}
-	
-	public void cdRoot() {
-		this.element = null;
-	}
-	
-	public void cdUp() {
-		if(this.element != null){
-			this.element = this.element.getParent();
-		}
-	}
-	
-	public List listElements() {
-		List elements = new ArrayList();
-		File file = ((this.element != null)?this.element.getFile():this.root);
-		if(file.exists() && file.isDirectory()){
-			File[] files = file.listFiles();
-			for(int i = 0; i < files.length;i ++){
-				elements.add(new TGBrowserElementImpl(this.element,files[i]));
-			}
-		}
-		if( !elements.isEmpty() ){
-			Collections.sort(elements,new TGBrowserElementComparator());
-		}
-		return elements;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/xml/TGBrowserReader.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/xml/TGBrowserReader.java
deleted file mode 100644
index 7f15948..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/xml/TGBrowserReader.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.xml;
-
-import java.io.File;
-import java.io.IOException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollectionInfo;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-public class TGBrowserReader {
-	private static final String ITEM_TAG = "browser-collection";
-	private static final String ATTRIBUTE_TYPE = "type";
-	private static final String ATTRIBUTE_DATA = "data";
-	
-	public void loadCollections(TGBrowserManager manager,File file){
-		if (file.exists()){
-			try {
-				Document doc = getDocument(file);
-				loadCollections(manager,doc.getFirstChild());
-			} catch (Throwable throwable) {
-				throwable.printStackTrace();
-			}
-		}
-	}
-	
-	private static void loadCollections(TGBrowserManager manager,Node node){
-		NodeList listNode = node.getChildNodes();
-		for (int i = 0; i < listNode.getLength(); i++) {
-			Node child = listNode.item(i);
-			String nameNode = child.getNodeName();
-			if (nameNode.equals(ITEM_TAG)) {
-				NamedNodeMap params = child.getAttributes();
-				
-				String type = params.getNamedItem(ATTRIBUTE_TYPE).getNodeValue();
-				String data = params.getNamedItem(ATTRIBUTE_DATA).getNodeValue();
-				if(type != null){
-					TGBrowserCollectionInfo info = new TGBrowserCollectionInfo();
-					info.setType(type);
-					info.setData(data);
-					manager.addInfo(info);
-				}
-			}
-		}
-	}
-	
-	private static Document getDocument(File file) throws ParserConfigurationException, SAXException, IOException {
-		Document document = null;
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		
-		DocumentBuilder builder = factory.newDocumentBuilder();
-		document = builder.parse(file);
-		
-		return document;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/xml/TGBrowserWriter.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/xml/TGBrowserWriter.java
deleted file mode 100644
index 7130242..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/browser/xml/TGBrowserWriter.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package org.herac.tuxguitar.gui.tools.browser.xml;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.util.Iterator;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.FactoryConfigurationError;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserCollection;
-import org.herac.tuxguitar.gui.tools.browser.TGBrowserManager;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-
-public class TGBrowserWriter {
-	
-	private static final String ITEM_LIST_TAG = "browser-collections";
-	private static final String ITEM_TAG = "browser-collection";
-	private static final String ATTRIBUTE_TYPE = "type";
-	private static final String ATTRIBUTE_DATA = "data";
-	
-	public void saveCollections(TGBrowserManager manager,String fileName) {
-		try{
-			Document doc = createDocument();
-			saveCollections(manager,doc);
-			saveDocument(doc,new File(fileName));
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-	}
-	
-	private static void saveCollections(TGBrowserManager manager,Document document){
-		//chords tag
-		Node listNode = document.createElement(ITEM_LIST_TAG);
-		
-		Iterator collections = manager.getCollections();
-		while(collections.hasNext()){
-			TGBrowserCollection collection = (TGBrowserCollection)collections.next();
-			
-			//chord tag
-			Node node = document.createElement(ITEM_TAG);
-			listNode.appendChild(node);
-			
-			//name attribute
-			Attr typeAttr = document.createAttribute(ATTRIBUTE_TYPE);
-			typeAttr.setNodeValue(collection.getType());
-			
-			//name attribute
-			Attr dataAttr = document.createAttribute(ATTRIBUTE_DATA);
-			dataAttr.setNodeValue(collection.getData().toString());
-			
-			node.getAttributes().setNamedItem(typeAttr);
-			node.getAttributes().setNamedItem(dataAttr);
-		}
-		
-		document.appendChild(listNode);
-	}
-	
-	public static Document createDocument() {
-		Document document = null;
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		try {
-			DocumentBuilder builder = factory.newDocumentBuilder();
-			document = builder.newDocument();
-		}catch (ParserConfigurationException pce) {
-			pce.printStackTrace();
-		}
-		return document;
-	}
-	
-	public static void saveDocument(Document document,File file) {
-		try {
-			FileOutputStream fs = new FileOutputStream(file);
-			
-			// Write it out again
-			TransformerFactory xformFactory = TransformerFactory.newInstance();
-			Transformer idTransform = xformFactory.newTransformer();
-			Source input = new DOMSource(document);
-			Result output = new StreamResult(fs);
-			idTransform.setOutputProperty(OutputKeys.INDENT, "yes");
-			idTransform.transform(input, output);
-			
-		} catch (FactoryConfigurationError e) {
-			e.printStackTrace();
-		} catch (TransformerConfigurationException e) {
-			e.printStackTrace();
-		} catch (TransformerException e) {
-			e.printStackTrace();
-		} catch (FileNotFoundException e) {
-			e.printStackTrace();
-		}
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/custom/TGCustomTool.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/custom/TGCustomTool.java
deleted file mode 100644
index 068dbd2..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/custom/TGCustomTool.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom;
-
-public class TGCustomTool {
-	
-	private String name;
-	private String action;
-	
-	public TGCustomTool(String name, String action) {
-		super();
-		this.name = name;
-		this.action = action;
-	}
-	
-	public String getName() {
-		return this.name;
-	}
-	
-	public String getAction() {
-		return this.action;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/custom/TGCustomToolManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/custom/TGCustomToolManager.java
deleted file mode 100644
index 3e8f13c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/custom/TGCustomToolManager.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.herac.tuxguitar.gui.tools.custom;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-public class TGCustomToolManager {
-	
-	private static TGCustomToolManager instance;
-	
-	private List tools;
-	
-	public TGCustomToolManager(){
-		this.tools = new ArrayList();
-	}
-	
-	public static TGCustomToolManager instance(){
-		if(instance == null){
-			instance = new TGCustomToolManager();
-		}
-		return instance;
-	}
-	
-	public void addCustomTool(TGCustomTool tool){
-		this.tools.add(tool);
-	}
-	
-	public void removeCustomTool(TGCustomTool tool){
-		this.tools.remove(tool);
-	}
-	
-	public Iterator getCustomTools(){
-		return this.tools.iterator();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleEditor.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleEditor.java
deleted file mode 100644
index 30b1e6f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleEditor.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.herac.tuxguitar.gui.tools.scale;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.List;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-
-public class ScaleEditor {
-	
-	public void show() {
-		final Shell dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		dialog.setLayout(new GridLayout());
-		dialog.setText(TuxGuitar.getProperty("scale.list"));
-		dialog.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		// ----------------------------------------------------------------------
-		Composite composite = new Composite(dialog, SWT.NONE);
-		composite.setLayout(new GridLayout(2,false));
-		composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
-		
-		final List keys = new List(composite,SWT.BORDER | SWT.V_SCROLL);
-		keys.setLayoutData(new GridData(50,200));
-		String[] keyNames = TuxGuitar.instance().getScaleManager().getKeyNames();
-		for(int i = 0;i < keyNames.length;i ++){
-			keys.add(keyNames[i]);
-		}
-		keys.select(TuxGuitar.instance().getScaleManager().getSelectionKey());
-		
-		final List scales = new List(composite,SWT.BORDER | SWT.V_SCROLL);
-		scales.setLayoutData(new GridData(SWT.DEFAULT,200));
-		scales.add("None");
-		String[] scaleNames = TuxGuitar.instance().getScaleManager().getScaleNames();
-		for(int i = 0;i < scaleNames.length;i ++){
-			scales.add(scaleNames[i]);
-		}
-		scales.select(TuxGuitar.instance().getScaleManager().getSelectionIndex() + 1);
-		
-		//------------------BUTTONS--------------------------
-		Composite buttons = new Composite(dialog, SWT.NONE);
-		buttons.setLayout(new GridLayout(2,false));
-		buttons.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-		
-		final Button buttonOK = new Button(buttons, SWT.PUSH);
-		buttonOK.setText(TuxGuitar.getProperty("ok"));
-		buttonOK.setLayoutData(getButtonData());
-		buttonOK.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				TuxGuitar.instance().getScaleManager().selectScale((scales.getSelectionIndex() - 1), keys.getSelectionIndex());
-				dialog.dispose();
-			}
-		});
-		
-		Button buttonCancel = new Button(buttons, SWT.PUSH);
-		buttonCancel.setText(TuxGuitar.getProperty("cancel"));
-		buttonCancel.setLayoutData(getButtonData());
-		buttonCancel.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				dialog.dispose();
-			}
-		});
-		
-		dialog.setDefaultButton( buttonOK );
-		
-		DialogUtils.openDialog(dialog,DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleInfo.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleInfo.java
deleted file mode 100644
index 1af0960..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleInfo.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.herac.tuxguitar.gui.tools.scale;
-
-public class ScaleInfo {
-	private String name;
-	private String keys;
-	
-	public ScaleInfo(String name,String keys){
-		this.name = name;
-		this.keys = keys;
-	}
-	
-	public String getKeys() {
-		return this.keys;
-	}
-	
-	public String getName() {
-		return this.name;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleListener.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleListener.java
deleted file mode 100644
index b828745..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleListener.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.herac.tuxguitar.gui.tools.scale;
-
-public interface ScaleListener {
-	
-	public void loadScale();
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleManager.java
deleted file mode 100644
index c32e190..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/ScaleManager.java
+++ /dev/null
@@ -1,135 +0,0 @@
-package org.herac.tuxguitar.gui.tools.scale;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.tools.scale.xml.ScaleReader;
-import org.herac.tuxguitar.gui.util.TGFileUtils;
-import org.herac.tuxguitar.gui.util.TGMusicKeyUtils;
-import org.herac.tuxguitar.song.models.TGScale;
-
-public class ScaleManager {
-	private static final String[] KEY_NAMES = TGMusicKeyUtils.getSharpKeyNames(TGMusicKeyUtils.PREFIX_SCALE);
-	
-	private static final String KEY_SEPARATOR = ",";
-	
-	public static final int NONE_SELECTION = -1;
-	
-	private List scales;
-	
-	private List scaleListeners;
-	
-	private TGScale scale;
-	
-	private int selectionIndex;
-	
-	private int selectionKey;
-	
-	public ScaleManager(){
-		this.scales = new ArrayList();
-		this.scaleListeners = new ArrayList();
-		this.scale = TuxGuitar.instance().getSongManager().getFactory().newScale();
-		this.selectionKey = 0;
-		this.selectionIndex = NONE_SELECTION;
-		this.loadScales();
-	}
-	
-	public void addListener( ScaleListener listener){
-		if(!this.scaleListeners.contains( listener )){
-			this.scaleListeners.add( listener );
-		}
-	}
-	
-	public void removeListener( ScaleListener listener){
-		if(this.scaleListeners.contains( listener )){
-			this.scaleListeners.remove( listener );
-		}
-	}
-	
-	public void fireListeners(){
-		for(int i = 0; i < this.scaleListeners.size(); i ++){
-			ScaleListener listener = (ScaleListener) this.scaleListeners.get( i );
-			listener.loadScale();
-		}
-	}
-		
-	public void selectScale(int index,int key){
-		if(index == NONE_SELECTION){
-			getScale().clear();
-		}
-		else if(index >= 0 && index < this.scales.size()){
-			getScale().clear();
-			ScaleInfo info = (ScaleInfo)this.scales.get(index);
-			String[] keys = info.getKeys().split(KEY_SEPARATOR);
-			for (int i = 0; i < keys.length; i ++){
-				int note = (Integer.parseInt(keys[i]) - 1);
-				if(note >= 0 && note < 12){
-					getScale().setNote(note,true);
-				}
-			}
-			getScale().setKey(key);
-		}
-		this.selectionIndex = index;
-		this.selectionKey = key;
-		this.fireListeners();
-	}
-	
-	public TGScale getScale() {
-		return this.scale;
-	}
-	
-	public int countScales() {
-		return this.scales.size();
-	}
-	
-	public String getScaleName(int index) {
-		if(index >= 0 && index < this.scales.size()) {
-			return (((ScaleInfo)this.scales.get(index)).getName());
-		}
-		return null;
-	}
-	
-	public String getScaleKeys(int index) {
-		if(index >= 0 && index < this.scales.size()) {
-			return(((ScaleInfo)this.scales.get(index)).getKeys());
-		}
-		return null;
-	}
-	
-	public String[] getScaleNames(){
-		String[] names = new String[this.scales.size()];
-		for(int i = 0;i < this.scales.size();i ++){
-			ScaleInfo info = (ScaleInfo)this.scales.get(i);
-			names[i] = info.getName();
-		}
-		return names;
-	}
-	
-	public String getKeyName(int index){
-		if( index >=0 && index < KEY_NAMES.length){
-			return KEY_NAMES[ index ];
-		}
-		return null;
-	}
-	
-	public String[] getKeyNames(){
-		return KEY_NAMES;
-	}
-	
-	public int getSelectionIndex() {
-		return this.selectionIndex;
-	}
-	
-	public int getSelectionKey() {
-		return this.selectionKey;
-	}
-	
-	private void loadScales(){
-		try{
-			new ScaleReader().loadScales(this.scales, TGFileUtils.getResourceAsStream("scales/scales.xml") );
-		} catch (Throwable e) {
-			e.printStackTrace();
-		} 
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/xml/ScaleReader.java b/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/xml/ScaleReader.java
deleted file mode 100644
index 1fc2815..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/tools/scale/xml/ScaleReader.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.herac.tuxguitar.gui.tools.scale.xml;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.herac.tuxguitar.gui.tools.scale.ScaleInfo;
-import org.w3c.dom.Document;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.SAXException;
-
-public class ScaleReader {
-	private static final String SCALE_TAG = "scale";
-	private static final String NAME_ATTRIBUTE = "name";
-	private static final String KEYS_ATTRIBUTE = "keys";
-	
-	public void loadScales(List scales,InputStream stream){
-		try{
-			if ( stream != null ){
-				Document doc = getDocument(stream);
-				loadScales(scales,doc.getFirstChild());
-			}
-		}catch(Throwable e){
-			e.printStackTrace();
-		}
-	}
-	
-	private static Document getDocument(InputStream stream) throws ParserConfigurationException, SAXException, IOException {
-		Document document = null;
-		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-		
-		DocumentBuilder builder = factory.newDocumentBuilder();
-		document = builder.parse(stream);
-		
-		return document;
-	}
-	
-	private static void loadScales(List scales,Node node){
-		NodeList nodeList = node.getChildNodes();
-		for (int i = 0; i < nodeList.getLength(); i++) {
-			Node child = nodeList.item(i);
-			String nodeName = child.getNodeName();
-			
-			if (nodeName.equals(SCALE_TAG)) {
-				NamedNodeMap params = child.getAttributes();
-				
-				String name = params.getNamedItem(NAME_ATTRIBUTE).getNodeValue();
-				String keys = params.getNamedItem(KEYS_ATTRIBUTE).getNodeValue();
-				
-				if (name == null || keys == null || name.trim().equals("") || keys.trim().equals("")){
-					throw new RuntimeException("Invalid Scale file format.");
-				}
-				
-				scales.add(new ScaleInfo(name,keys));
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/transport/TGTransport.java b/TuxGuitar/src/org/herac/tuxguitar/gui/transport/TGTransport.java
deleted file mode 100644
index 7e3d2d0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/transport/TGTransport.java
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * Created on 20-mar-2006
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.transport;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.events.MouseAdapter;
-import org.eclipse.swt.events.MouseEvent;
-import org.eclipse.swt.events.MouseMoveListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Font;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.ProgressBar;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.swt.widgets.ToolBar;
-import org.eclipse.swt.widgets.ToolItem;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.transport.TransportMetronomeAction;
-import org.herac.tuxguitar.gui.actions.transport.TransportModeAction;
-import org.herac.tuxguitar.gui.editors.TGRedrawListener;
-import org.herac.tuxguitar.gui.editors.TGUpdateListener;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-import org.herac.tuxguitar.gui.system.icons.IconLoader;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-import org.herac.tuxguitar.gui.util.DialogUtils;
-import org.herac.tuxguitar.gui.util.MessageDialog;
-import org.herac.tuxguitar.gui.util.MidiTickUtil;
-import org.herac.tuxguitar.player.base.MidiPlayer;
-import org.herac.tuxguitar.player.base.MidiPlayerException;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window -
- * Preferences - Java - Code Style - Code Templates
- */
-public class TGTransport implements TGRedrawListener, TGUpdateListener, IconLoader,LanguageLoader{
-	private static final int PLAY_MODE_DELAY = 250;
-	
-	public static final int STATUS_STOPPED = 1;
-	public static final int STATUS_PAUSED = 2;
-	public static final int STATUS_RUNNING = 3;
-	
-	protected Shell dialog;
-	protected Label label;
-	protected ProgressBar tickProgress;
-	protected Button metronome;
-	protected Button mode;
-	protected ToolBar toolBar;
-	protected ToolItem first;
-	protected ToolItem last;
-	protected ToolItem previous;
-	protected ToolItem next;
-	protected ToolItem stop;
-	protected ToolItem play;
-	protected boolean editingTickScale;
-	protected long redrawTime;
-	protected int status;
-	
-	public TGTransport() {
-		super();
-	}
-	
-	public void show() {
-		this.dialog = DialogUtils.newDialog(TuxGuitar.instance().getShell(), SWT.DIALOG_TRIM);
-		this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-		this.dialog.setLayout(new GridLayout());
-		this.dialog.setText(TuxGuitar.getProperty("transport"));
-		this.initComposites();
-		this.initToolBar();
-		this.redraw();
-		
-		this.addListeners();
-		this.dialog.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				removeListeners();
-				TuxGuitar.instance().updateCache(true);
-			}
-		});
-		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK);
-	}
-	
-	public void addListeners(){
-		TuxGuitar.instance().getIconManager().addLoader(this);
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-		TuxGuitar.instance().getEditorManager().addRedrawListener(this);
-		TuxGuitar.instance().getEditorManager().addUpdateListener(this);
-	}
-	
-	public void removeListeners(){
-		TuxGuitar.instance().getIconManager().removeLoader(this);
-		TuxGuitar.instance().getLanguageManager().removeLoader(this);
-		TuxGuitar.instance().getEditorManager().removeRedrawListener(this);
-		TuxGuitar.instance().getEditorManager().removeUpdateListener(this);
-	}
-	
-	private void initComposites(){
-		GridLayout layout = new GridLayout(2,false);
-		layout.marginWidth = 0;
-		layout.marginHeight = 0;
-		layout.horizontalSpacing = 0;
-		layout.verticalSpacing = 0;
-		
-		Composite composite = new Composite(this.dialog,SWT.BORDER);
-		composite.setLayout(layout);
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		initOptions(composite);
-		initProgress(composite);
-	}
-	
-	private void initOptions(Composite parent){
-		Composite composite = new Composite(parent,SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,false,true));
-		
-		this.metronome = new Button(composite,SWT.TOGGLE);
-		this.metronome.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.metronome.addSelectionListener(TuxGuitar.instance().getAction(TransportMetronomeAction.NAME));
-		
-		this.mode = new Button(composite,SWT.PUSH);
-		this.mode.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.mode.addSelectionListener(TuxGuitar.instance().getAction(TransportModeAction.NAME));
-		
-		this.loadOptionIcons();
-	}
-	
-	private void initProgress(Composite parent){
-		Composite composite = new Composite(parent,SWT.NONE);
-		composite.setLayout(new GridLayout());
-		composite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		initLabel(composite);
-		initScale(composite);
-	}
-	
-	private void initLabel(Composite parent){
-		final Font font = new Font(parent.getDisplay(),"Minisystem",36,SWT.NORMAL);
-		this.label = new Label(parent,SWT.RIGHT);
-		this.label.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		this.label.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_BLACK));
-		this.label.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_BLUE));
-		this.label.setFont(font);
-		this.label.addDisposeListener(new DisposeListener() {
-			public void widgetDisposed(DisposeEvent e) {
-				font.dispose();
-			}
-		});
-	}
-	
-	private void initScale(Composite parent){
-		GridData data = new GridData(SWT.FILL,SWT.CENTER,true,false);
-		data.heightHint = 10;
-		
-		this.tickProgress = new ProgressBar(parent, SWT.BORDER | SWT.HORIZONTAL | SWT.SMOOTH);
-		this.tickProgress.setCursor(this.tickProgress.getDisplay().getSystemCursor(SWT.CURSOR_HAND));
-		this.tickProgress.setLayoutData(data);
-		this.tickProgress.setSelection((int)TGDuration.QUARTER_TIME);
-		this.tickProgress.addMouseListener(new MouseAdapter() {
-			public void mouseDown(MouseEvent e) {
-				setEditingTickScale(true);
-				updateProgressBar(e.x);
-			}
-			public void mouseUp(MouseEvent e) {
-				gotoMeasure(getSongManager().getMeasureHeaderAt(TGTransport.this.tickProgress.getSelection()),true);
-				setEditingTickScale(false);
-			}
-		});
-		this.tickProgress.addMouseMoveListener(new MouseMoveListener() {
-			public void mouseMove(MouseEvent e) {
-				updateProgressBar(e.x);
-			}
-		});
-	}
-	
-	protected void updateProgressBar(int x){
-		if(isEditingTickScale()){
-			int selection = (this.tickProgress.getMinimum() + (( x * (this.tickProgress.getMaximum() - this.tickProgress.getMinimum())) / this.tickProgress.getSize().x) );
-			this.tickProgress.setSelection(Math.max((int)TGDuration.QUARTER_TIME,selection));
-			this.redraw();
-		}
-	}
-	
-	private void initToolBar(){
-		if(this.toolBar != null){
-			this.toolBar.dispose();
-		}
-		this.toolBar = new ToolBar(this.dialog,SWT.FLAT);
-		
-		this.first = new ToolItem(this.toolBar,SWT.PUSH);
-		this.first.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				gotoFirst();
-			}
-		});
-		
-		this.previous = new ToolItem(this.toolBar,SWT.PUSH);
-		this.previous.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				gotoPrevious();
-			}
-		});
-		
-		this.stop = new ToolItem(this.toolBar,SWT.PUSH);
-		this.stop.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				stop();
-			}
-		});
-		
-		this.play = new ToolItem(this.toolBar,SWT.PUSH);
-		this.play.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				play();
-			}
-		});
-		
-		this.next = new ToolItem(this.toolBar,SWT.PUSH);
-		this.next.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				gotoNext();
-			}
-		});
-		
-		this.last = new ToolItem(this.toolBar,SWT.PUSH);
-		this.last.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent e) {
-				gotoLast();
-			}
-		});
-		
-		this.updateItems(true);
-		this.loadProperties();
-	}
-	
-	public int getStatus() {
-		return this.status;
-	}
-	
-	public void setStatus(int status) {
-		this.status = status;
-	}
-	
-	public void updateItems(){
-		this.updateItems(false);
-	}
-	
-	public void updateItems(boolean force){
-		if(!isDisposed()){
-			int lastStatus = getStatus();
-			
-			if(TuxGuitar.instance().getPlayer().isRunning()){
-				setStatus(STATUS_RUNNING);
-			}else if(TuxGuitar.instance().getPlayer().isPaused()){
-				setStatus(STATUS_PAUSED);
-			}else{
-				setStatus(STATUS_STOPPED);
-			}
-			
-			if(force || lastStatus != getStatus()){
-				if(getStatus() == STATUS_RUNNING){
-					this.first.setImage(TuxGuitar.instance().getIconManager().getTransportFirst2());
-					this.last.setImage(TuxGuitar.instance().getIconManager().getTransportLast2());
-					this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportPrevious2());
-					this.next.setImage(TuxGuitar.instance().getIconManager().getTransportNext2());
-					this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportStop2());
-					this.play.setImage(TuxGuitar.instance().getIconManager().getTransportPause());
-				}else if(getStatus() == STATUS_PAUSED){
-					this.first.setImage(TuxGuitar.instance().getIconManager().getTransportFirst2());
-					this.last.setImage(TuxGuitar.instance().getIconManager().getTransportLast2());
-					this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportPrevious2());
-					this.next.setImage(TuxGuitar.instance().getIconManager().getTransportNext2());
-					this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportStop2());
-					this.play.setImage(TuxGuitar.instance().getIconManager().getTransportPlay2());
-				}else if(getStatus() == STATUS_STOPPED){
-					this.first.setImage(TuxGuitar.instance().getIconManager().getTransportFirst1());
-					this.last.setImage(TuxGuitar.instance().getIconManager().getTransportLast1());
-					this.previous.setImage(TuxGuitar.instance().getIconManager().getTransportPrevious1());
-					this.next.setImage(TuxGuitar.instance().getIconManager().getTransportNext1());
-					this.stop.setImage(TuxGuitar.instance().getIconManager().getTransportStop1());
-					this.play.setImage(TuxGuitar.instance().getIconManager().getTransportPlay1());
-				}
-				this.loadPlayText();
-			}
-			TGMeasureHeader first = getSongManager().getFirstMeasureHeader();
-			TGMeasureHeader last = getSongManager().getLastMeasureHeader();
-			this.tickProgress.setMinimum((int)first.getStart());
-			this.tickProgress.setMaximum((int)(last.getStart() + last.getLength()) -1);
-			this.metronome.setSelection(TuxGuitar.instance().getPlayer().isMetronomeEnabled());
-			
-			this.redraw();
-		}
-	}
-	
-	public void loadProperties(){
-		if(!isDisposed()){
-			this.dialog.setText(TuxGuitar.getProperty("transport"));
-			this.stop.setToolTipText(TuxGuitar.getProperty("transport.stop"));
-			this.first.setToolTipText(TuxGuitar.getProperty("transport.first"));
-			this.last.setToolTipText(TuxGuitar.getProperty("transport.last"));
-			this.previous.setToolTipText(TuxGuitar.getProperty("transport.previous"));
-			this.next.setToolTipText(TuxGuitar.getProperty("transport.next"));
-			this.metronome.setToolTipText(TuxGuitar.getProperty("transport.metronome"));
-			this.mode.setToolTipText(TuxGuitar.getProperty("transport.mode"));
-			this.loadPlayText();
-		}
-	}
-	
-	public void loadPlayText(){
-		String property = TuxGuitar.getProperty( (getStatus() == STATUS_RUNNING ? "transport.pause" : "transport.start") );
-		this.play.setToolTipText(property);
-	}
-	
-	public void loadIcons(){
-		if(!isDisposed()){
-			this.initToolBar();
-			this.loadOptionIcons();
-			this.dialog.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-			this.dialog.layout(true);
-			this.dialog.pack(true);
-		}
-	}
-	
-	private void loadOptionIcons(){
-		this.metronome.setImage(TuxGuitar.instance().getIconManager().getTransportMetronome());
-		this.mode.setImage(TuxGuitar.instance().getIconManager().getTransportMode());
-	}
-	
-	public void dispose() {
-		if(!isDisposed()){
-			this.dialog.dispose();
-		}
-	}
-	
-	public boolean isDisposed() {
-		return (this.dialog == null || this.dialog.isDisposed());
-	}
-	
-	public boolean isEditingTickScale() {
-		return this.editingTickScale;
-	}
-	
-	public void setEditingTickScale(boolean editingTickScale) {
-		this.editingTickScale = editingTickScale;
-	}
-	
-	protected TGSongManager getSongManager(){
-		return TuxGuitar.instance().getSongManager();
-	}
-	
-	public void gotoFirst(){
-		gotoMeasure(getSongManager().getFirstMeasureHeader(),true);
-	}
-	
-	public void gotoLast(){
-		gotoMeasure(getSongManager().getLastMeasureHeader(),true) ;
-	}
-	
-	public void gotoNext(){
-		MidiPlayer player = TuxGuitar.instance().getPlayer();
-		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition()));
-		if(header != null){
-			gotoMeasure(getSongManager().getNextMeasureHeader(header),true);
-		}
-	}
-	
-	public void gotoPrevious(){
-		MidiPlayer player = TuxGuitar.instance().getPlayer();
-		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition()));
-		if(header != null){
-			gotoMeasure(getSongManager().getPrevMeasureHeader(header),true);
-		}
-	}
-	
-	public void gotoMeasure(TGMeasureHeader header){
-		gotoMeasure(header,false);
-	}
-	
-	public void gotoMeasure(TGMeasureHeader header,boolean moveCaret){
-		if(header != null){
-			TGMeasure playingMeasure = null;
-			if( TuxGuitar.instance().getPlayer().isRunning() ){
-				TuxGuitar.instance().getEditorCache().updatePlayMode();
-				playingMeasure = TuxGuitar.instance().getEditorCache().getPlayMeasure();
-			}
-			if( playingMeasure == null || playingMeasure.getHeader().getNumber() != header.getNumber() ){
-				TuxGuitar.instance().getPlayer().setTickPosition(MidiTickUtil.getTick(header.getStart()));
-				if(moveCaret){
-					TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().goToTickPosition();
-					TuxGuitar.instance().updateCache(true);
-				}
-				redraw();
-			}
-		}
-	}
-	
-	public void gotoPlayerPosition(){
-		TuxGuitar.instance().lock();
-		
-		MidiPlayer player = TuxGuitar.instance().getPlayer();
-		TGMeasureHeader header = getSongManager().getMeasureHeaderAt(MidiTickUtil.getStart(player.getTickPosition()));
-		if(header != null){
-			player.setTickPosition(MidiTickUtil.getTick(header.getStart()));
-		}
-		TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().goToTickPosition();
-		TuxGuitar.instance().unlock();
-		
-		TuxGuitar.instance().updateCache(true);
-	}
-	
-	public void play(){
-		MidiPlayer player = TuxGuitar.instance().getPlayer();
-		if(!player.isRunning()){
-			try{
-				player.getMode().reset();
-				player.play();
-			}catch(MidiPlayerException exception){
-				MessageDialog.errorMessage(exception);
-			}
-		}else{
-			player.pause();
-		}
-	}
-	
-	public void stop(){
-		MidiPlayer player = TuxGuitar.instance().getPlayer();
-		if(!player.isRunning()){
-			player.reset();
-			this.gotoPlayerPosition();
-		}else{
-			player.reset();
-		}
-	}
-	
-	public void redraw(){
-		if(!TuxGuitar.instance().isLocked()){
-			if(!isDisposed()){
-				new SyncThread(new Runnable() {
-					public void run() {
-						if(!isDisposed() && !TuxGuitar.instance().isLocked()){
-							if(isEditingTickScale()){
-								TGTransport.this.label.setText(Long.toString(TGTransport.this.tickProgress.getSelection()));
-							}
-							else if(!TuxGuitar.instance().getPlayer().isRunning()){
-								long tickPosition = TuxGuitar.instance().getTablatureEditor().getTablature().getCaret().getPosition();
-								
-								TGTransport.this.label.setText(Long.toString(tickPosition));
-								TGTransport.this.tickProgress.setSelection((int)tickPosition);
-							}
-						}
-					}
-				}).start();
-			}
-		}
-	}
-	
-	public void redrawPlayingMode(){
-		if(!TuxGuitar.instance().isLocked()){
-			//TuxGuitar.instance().lock();
-			if(!isDisposed()){
-				if(!isEditingTickScale() && TuxGuitar.instance().getPlayer().isRunning()){
-					long time = System.currentTimeMillis();
-					if(time > this.redrawTime + PLAY_MODE_DELAY){
-						long position = (TuxGuitar.instance().getEditorCache().getPlayStart() + (TuxGuitar.instance().getPlayer().getTickPosition() - TuxGuitar.instance().getEditorCache().getPlayTick()));
-						this.label.setText(Long.toString(position));
-						this.tickProgress.setSelection((int)position);
-						this.redrawTime = time;
-					}
-				}
-			}
-			//TuxGuitar.instance().unlock();
-		}
-	}
-	
-	public void doRedraw(int type) {
-		if( type == TGRedrawListener.PLAYING_THREAD || type == TGRedrawListener.PLAYING_NEW_BEAT ){
-			this.redrawPlayingMode();
-		}
-	}
-	
-	public void doUpdate(int type) {
-		if( type == TGUpdateListener.SELECTION ){
-			this.updateItems();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/transport/TGTransportListener.java b/TuxGuitar/src/org/herac/tuxguitar/gui/transport/TGTransportListener.java
deleted file mode 100644
index d449676..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/transport/TGTransportListener.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.herac.tuxguitar.gui.transport;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.player.base.MidiPlayerListener;
-import org.herac.tuxguitar.util.TGSynchronizer;
-
-public class TGTransportListener implements MidiPlayerListener{
-	
-	protected Object sync;
-	protected TGSynchronizer.TGRunnable startedRunnable;
-	protected TGSynchronizer.TGRunnable stoppedRunnable;
-	
-	public TGTransportListener(){
-		this.sync = new Object();
-		this.startedRunnable = getStartedRunnable();
-		this.stoppedRunnable = getStoppedRunnable();
-	}
-	
-	public void notifyStarted() {
-		new Thread(new Runnable() {
-			public void run() {
-				try {
-					TuxGuitar.instance().updateCache(true);
-					while (TuxGuitar.instance().getPlayer().isRunning()) {
-						synchronized( TGTransportListener.this.sync ){
-							TGSynchronizer.instance().addRunnable( TGTransportListener.this.startedRunnable );
-							TGTransportListener.this.sync.wait(25);
-						}
-					}
-					TGTransportListener.this.notifyStopped();
-				} catch (Throwable throwable) {
-					throwable.printStackTrace();
-				}
-			}
-		}).start();
-	}
-	
-	public void notifyStopped() {
-		try {
-			if(!TuxGuitar.instance().getDisplay().isDisposed()){
-				TGSynchronizer.instance().runLater( TGTransportListener.this.stoppedRunnable );
-			}
-		} catch (Throwable throwable) {
-			throwable.printStackTrace();
-		}
-	}
-	
-	public void notifyLoop(){
-		// Not implemented
-	}
-	
-	private TGSynchronizer.TGRunnable getStartedRunnable(){
-		return new TGSynchronizer.TGRunnable() {
-			public void run() {
-				if(TuxGuitar.instance().getPlayer().isRunning()){
-					TuxGuitar.instance().redrawPlayingMode();
-				}
-			}
-		};
-	}
-	
-	private TGSynchronizer.TGRunnable getStoppedRunnable(){
-		return new TGSynchronizer.TGRunnable() {
-			public void run() {
-				TuxGuitar.instance().getTransport().gotoPlayerPosition();
-			}
-		};
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/CannotRedoException.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/CannotRedoException.java
deleted file mode 100644
index 6f673fd..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/CannotRedoException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 05-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.undo;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class CannotRedoException extends Exception{
-	
-	private static final long serialVersionUID = 1L;
-	
-	public CannotRedoException() {
-		super();
-	}
-	
-	public CannotRedoException(String message) {
-		super(message);
-	}
-	
-	public CannotRedoException(String message, Throwable cause) {
-		super(message, cause);
-	}
-	
-	public CannotRedoException(Throwable cause) {
-		super(cause);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/CannotUndoException.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/CannotUndoException.java
deleted file mode 100644
index 8e4219f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/CannotUndoException.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Created on 05-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.undo;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class CannotUndoException extends Exception{
-	
-	private static final long serialVersionUID = 1L;
-	
-	public CannotUndoException() {
-		super();
-	}
-	
-	public CannotUndoException(String message) {
-		super(message);
-	}
-	
-	public CannotUndoException(String message, Throwable cause) {
-		super(message, cause);
-	}
-	
-	public CannotUndoException(Throwable cause) {
-		super(cause);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/UndoableEdit.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/UndoableEdit.java
deleted file mode 100644
index a320739..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/UndoableEdit.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.herac.tuxguitar.gui.undo;
-
-public interface UndoableEdit {
-	public static final int UNDO_ACTION = 1;
-	public static final int REDO_ACTION = 2;
-	
-	public void redo() throws CannotRedoException;
-	
-	public void undo() throws CannotUndoException;
-	
-	public boolean canRedo();
-	
-	public boolean canUndo();
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/UndoableManager.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/UndoableManager.java
deleted file mode 100644
index 8f12f0e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/UndoableManager.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Created on 08-ago-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.undo;
-
-import java.util.ArrayList;
-import java.util.List;
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class UndoableManager {
-	private static final int LIMIT = 100;
-	private int indexOfNextAdd;
-	private List edits;
-	
-	public UndoableManager() {
-		this.init();
-	}
-	
-	public void discardAllEdits() {
-		this.reset();
-	}
-	
-	public synchronized void undo() throws CannotUndoException {
-		UndoableEdit edit = editToBeUndone();
-		if (edit == null) {
-			throw new CannotUndoException();
-		}
-		try{
-			edit.undo();
-		}catch(Throwable throwable){
-			throw new CannotUndoException(throwable);
-		}
-		this.indexOfNextAdd--;
-	}
-	
-	public synchronized void redo() throws CannotRedoException {
-		UndoableEdit edit = editToBeRedone();
-		if (edit == null) {
-			throw new CannotRedoException();
-		}
-		try{
-			edit.redo();
-		}catch(Throwable throwable){
-			throw new CannotRedoException();
-		}
-		this.indexOfNextAdd++;
-	}
-	
-	public synchronized boolean canUndo() {
-		boolean canUndo = false;
-		UndoableEdit edit = editToBeUndone();
-		if (edit != null) {
-			canUndo = edit.canUndo();
-		}
-		return canUndo;
-	}
-	
-	public synchronized boolean canRedo() {
-		boolean canRedo = false;
-		UndoableEdit edit = editToBeRedone();
-		if (edit != null) {
-			canRedo = edit.canRedo();
-		}
-		return canRedo;
-	}
-	
-	public synchronized void addEdit(UndoableEdit anEdit) {
-		checkForUnused();
-		checkForLimit();
-		this.edits.add(this.indexOfNextAdd, anEdit);
-		this.indexOfNextAdd++;
-	}
-	
-	private void checkForUnused() {
-		while (this.edits.size() > this.indexOfNextAdd) {
-			UndoableEdit edit = (UndoableEdit) this.edits.get(this.indexOfNextAdd);
-			remove(edit);
-		}
-	}
-	
-	private void checkForLimit() {
-		while (this.edits.size() >= LIMIT) {
-			UndoableEdit edit = (UndoableEdit) this.edits.get(0);
-			remove(edit);
-			this.indexOfNextAdd--;
-		}
-	}
-	
-	private void remove(UndoableEdit edit) {
-		this.edits.remove(edit);
-	}
-	
-	private UndoableEdit editToBeUndone() {
-		int index = this.indexOfNextAdd - 1;
-		if (index >= 0 && index < this.edits.size()) {
-			return (UndoableEdit) this.edits.get(index);
-		}
-		return null;
-	}
-	
-	private UndoableEdit editToBeRedone() {
-		int index = this.indexOfNextAdd;
-		if (index >= 0 && index < this.edits.size()) {
-			return (UndoableEdit) this.edits.get(index);
-		}
-		return null;
-	}
-	
-	private void init() {
-		this.indexOfNextAdd = 0;
-		this.edits = new ArrayList();
-	}
-	
-	private void reset() {
-		this.indexOfNextAdd = 0;
-		this.edits.clear();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/UndoableCaretHelper.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/UndoableCaretHelper.java
deleted file mode 100644
index 89144b0..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/UndoableCaretHelper.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGString;
-
-public class UndoableCaretHelper {
-	private long position;
-	private int track;
-	private int string;
-	private int velocity;
-	private TGDuration duration;
-	
-	public UndoableCaretHelper(){
-		Caret caret = getCaret();
-		this.track = caret.getTrack().getNumber();
-		this.position = caret.getPosition();
-		this.velocity = caret.getVelocity();
-		this.duration = caret.getDuration().clone(TuxGuitar.instance().getSongManager().getFactory());
-		this.string = 1;
-		TGString instrumentString = caret.getSelectedString();
-		if(instrumentString != null){
-			this.string = instrumentString.getNumber();
-		}
-	}
-	
-	public void update(){
-		getCaret().update(this.track,this.position,this.string,this.velocity);
-		getCaret().setSelectedDuration(this.duration.clone(TuxGuitar.instance().getSongManager().getFactory()));
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/UndoableJoined.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/UndoableJoined.java
deleted file mode 100644
index e73ef0a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/UndoableJoined.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-
-public class UndoableJoined implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private List undoables;
-	
-	public UndoableJoined(){
-		this.doAction = UNDO_ACTION;
-		this.undoCaret = new UndoableCaretHelper();
-		this.undoables = new ArrayList();
-	}
-	
-	public void addUndoableEdit(UndoableEdit undoable){
-		this.undoables.add(undoable);
-	}
-	
-	public void redo() throws CannotRedoException {
-		int count = this.undoables.size();
-		for(int i = 0;i < count;i++){
-			UndoableEdit undoable = (UndoableEdit)this.undoables.get(i);
-			undoable.redo();
-		}
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		int count = this.undoables.size();
-		for(int i = (count - 1);i >= 0;i--){
-			UndoableEdit undoable = (UndoableEdit)this.undoables.get(i);
-			undoable.undo();
-		}
-		this.undoCaret.update();
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public UndoableJoined endUndo(){
-		this.redoCaret = new UndoableCaretHelper();
-		return this;
-	}
-	
-	public boolean isEmpty(){
-		return this.undoables.isEmpty();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeAlternativeRepeat.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeAlternativeRepeat.java
deleted file mode 100644
index 4a553f1..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeAlternativeRepeat.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGMeasure;
-
-public class UndoableChangeAlternativeRepeat implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private long position;
-	private int undoRepeatAlternative;
-	private int redoRepeatAlternative;
-	
-	private UndoableChangeAlternativeRepeat(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.changeAlternativeRepeat(this.position,this.redoRepeatAlternative);
-		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
-		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber());
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.changeAlternativeRepeat(this.position,this.undoRepeatAlternative);
-		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
-		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber());
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeAlternativeRepeat startUndo(){
-		UndoableChangeAlternativeRepeat undoable = new UndoableChangeAlternativeRepeat();
-		Caret caret = getCaret();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.position = caret.getPosition();
-		undoable.undoRepeatAlternative = caret.getMeasure().getHeader().getRepeatAlternative();
-		
-		return undoable;
-	}
-	
-	public UndoableChangeAlternativeRepeat endUndo(int redoRepeatAlternative){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoRepeatAlternative = redoRepeatAlternative;
-		return this;
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeClef.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeClef.java
deleted file mode 100644
index f62b24a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeClef.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableChangeClef implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private long position;
-	private int redoableClef;
-	private int undoableClef;
-	private List nextClefPositions;
-	private boolean toEnd;
-	private TGTrack track;
-	
-	private UndoableChangeClef(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getSongManager().getTrackManager().changeClef(this.track,this.position,this.redoableClef,this.toEnd);
-		TuxGuitar.instance().fireUpdate();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TuxGuitar.instance().getSongManager().getTrackManager().changeClef(this.track,this.position,this.undoableClef,this.toEnd);
-		if(this.toEnd){
-			Iterator it = this.nextClefPositions.iterator();
-			while(it.hasNext()){
-				ClefPosition ksp = (ClefPosition)it.next();
-				TuxGuitar.instance().getSongManager().getTrackManager().changeClef(this.track,ksp.getPosition(),ksp.getClef(),true);
-			}
-		}
-		TuxGuitar.instance().fireUpdate();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeClef startUndo(){
-		UndoableChangeClef undoable = new UndoableChangeClef();
-		Caret caret = getCaret();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.position = caret.getPosition();
-		undoable.undoableClef = caret.getMeasure().getClef();
-		undoable.track = caret.getTrack();
-		undoable.nextClefPositions = new ArrayList();
-		
-		int prevClef = undoable.undoableClef;
-		Iterator it = caret.getTrack().getMeasures();
-		while(it.hasNext()){
-			TGMeasureImpl measure = (TGMeasureImpl)it.next();
-			if(measure.getStart() > undoable.position){
-				int currClef = measure.getClef();
-				if(prevClef != currClef){
-					ClefPosition tsp = undoable.new ClefPosition(measure.getStart(),currClef);
-					undoable.nextClefPositions.add(tsp);
-				}
-				prevClef = currClef;
-			}
-		}
-		
-		return undoable;
-	}
-	
-	public UndoableChangeClef endUndo(int clef,boolean toEnd){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoableClef = clef;
-		this.toEnd = toEnd;
-		return this;
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-	private class ClefPosition{
-		private long position;
-		private int clef;
-		
-		public ClefPosition(long position,int clef) {
-			this.position = position;
-			this.clef = clef;
-		}
-		
-		public long getPosition() {
-			return this.position;
-		}
-		
-		public int getClef() {
-			return this.clef;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeCloseRepeat.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeCloseRepeat.java
deleted file mode 100644
index 3b10a58..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeCloseRepeat.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGMeasure;
-
-public class UndoableChangeCloseRepeat implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private long position;
-	private int undoRepeatClose;
-	private int redoRepeatClose;
-	
-	private UndoableChangeCloseRepeat(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.changeCloseRepeat(this.position,this.redoRepeatClose);
-		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
-		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber());
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.changeCloseRepeat(this.position,this.undoRepeatClose);
-		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
-		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber());
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeCloseRepeat startUndo(){
-		Caret caret = getCaret();
-		return startUndo(caret.getPosition(),caret.getMeasure().getRepeatClose());
-	}
-	
-	public static UndoableChangeCloseRepeat startUndo(long position,int repeatClose){
-		UndoableChangeCloseRepeat undoable = new UndoableChangeCloseRepeat();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.position = position;
-		undoable.undoRepeatClose = repeatClose;
-		
-		return undoable;
-	}
-	
-	public UndoableChangeCloseRepeat endUndo(int redoRepeatClose){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoRepeatClose = redoRepeatClose;
-		return this;
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeInfo.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeInfo.java
deleted file mode 100644
index af7ccf6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeInfo.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGSong;
-
-public class UndoableChangeInfo implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private String undoName;
-	private String undoArtist;
-	private String undoAlbum;
-	private String undoAuthor;
-	private String undoDate;
-	private String undoCopyright;
-	private String undoWriter;
-	private String undoTranscriber;
-	private String undoComments;
-	private String redoName;
-	private String redoArtist;
-	private String redoAlbum;
-	private String redoAuthor;
-	private String redoDate;
-	private String redoCopyright;
-	private String redoWriter;
-	private String redoTranscriber;
-	private String redoComments;
-	
-	private UndoableChangeInfo(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getSongManager().setProperties(this.redoName,this.redoArtist,this.redoAlbum,this.redoAuthor,this.redoDate,this.redoCopyright,this.redoWriter,this.redoTranscriber,this.redoComments);
-		TuxGuitar.instance().showTitle();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TuxGuitar.instance().getSongManager().setProperties(this.undoName,this.undoArtist,this.undoAlbum,this.undoAuthor,this.undoDate,this.undoCopyright,this.undoWriter,this.undoTranscriber,this.undoComments);
-		TuxGuitar.instance().showTitle();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeInfo startUndo(){
-		TGSong song = TuxGuitar.instance().getSongManager().getSong();
-		UndoableChangeInfo undoable = new UndoableChangeInfo();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.undoName = song.getName();
-		undoable.undoArtist = song.getArtist();
-		undoable.undoAlbum = song.getAlbum();
-		undoable.undoAuthor = song.getAuthor();
-		undoable.undoDate = song.getDate();
-		undoable.undoCopyright = song.getCopyright();
-		undoable.undoWriter = song.getWriter();
-		undoable.undoTranscriber = song.getTranscriber();
-		undoable.undoComments = song.getComments();		
-		return undoable;
-	}
-	
-	public UndoableChangeInfo endUndo(){
-		TGSong song = TuxGuitar.instance().getSongManager().getSong();
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoName = song.getName();
-		this.redoArtist = song.getArtist();
-		this.redoAlbum = song.getAlbum();
-		this.redoAuthor = song.getAuthor();
-		this.redoDate = song.getDate();
-		this.redoCopyright = song.getCopyright();
-		this.redoWriter = song.getWriter();
-		this.redoTranscriber = song.getTranscriber();
-		this.redoComments = song.getComments();
-		return this;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeKeySignature.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeKeySignature.java
deleted file mode 100644
index 87858b2..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeKeySignature.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableChangeKeySignature implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private long position;
-	private int redoableKeySignature;
-	private int undoableKeySignature;
-	private List nextKeySignaturePositions;
-	private boolean toEnd;
-	private TGTrack track;
-	
-	private UndoableChangeKeySignature(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getSongManager().getTrackManager().changeKeySignature(this.track,this.position,this.redoableKeySignature,this.toEnd);
-		TuxGuitar.instance().fireUpdate();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TuxGuitar.instance().getSongManager().getTrackManager().changeKeySignature(this.track,this.position,this.undoableKeySignature,this.toEnd);
-		if(this.toEnd){
-			Iterator it = this.nextKeySignaturePositions.iterator();
-			while(it.hasNext()){
-				KeySignaturePosition ksp = (KeySignaturePosition)it.next();
-				TuxGuitar.instance().getSongManager().getTrackManager().changeKeySignature(this.track,ksp.getPosition(),ksp.getKeySignature(),true);
-			}
-		}
-		TuxGuitar.instance().fireUpdate();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeKeySignature startUndo(){
-		UndoableChangeKeySignature undoable = new UndoableChangeKeySignature();
-		Caret caret = getCaret();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.position = caret.getPosition();
-		undoable.undoableKeySignature = caret.getMeasure().getKeySignature();
-		undoable.track = caret.getTrack();
-		undoable.nextKeySignaturePositions = new ArrayList();
-		
-		int prevKeySignature = undoable.undoableKeySignature;
-		Iterator it = caret.getTrack().getMeasures();
-		while(it.hasNext()){
-			TGMeasureImpl measure = (TGMeasureImpl)it.next();
-			if(measure.getStart() > undoable.position){
-				int currKeySignature = measure.getKeySignature();
-				if(prevKeySignature != currKeySignature){
-					KeySignaturePosition tsp = undoable.new KeySignaturePosition(measure.getStart(),currKeySignature);
-					undoable.nextKeySignaturePositions.add(tsp);
-				}
-				prevKeySignature = currKeySignature;
-			}
-		}
-		
-		return undoable;
-	}
-	
-	public UndoableChangeKeySignature endUndo(int keySignature,boolean toEnd){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoableKeySignature = keySignature;
-		this.toEnd = toEnd;
-		return this;
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-	private class KeySignaturePosition{
-		private long position;
-		private int keySignature;
-		
-		public KeySignaturePosition(long position,int keySignature) {
-			this.position = position;
-			this.keySignature = keySignature;
-		}
-		
-		public long getPosition() {
-			return this.position;
-		}
-		
-		public int getKeySignature() {
-			return this.keySignature;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeMarker.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeMarker.java
deleted file mode 100644
index cab4fe2..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeMarker.java
+++ /dev/null
@@ -1,74 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.marker.MarkerList;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGMarker;
-
-public class UndoableChangeMarker implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private TGMarker undoMarker;
-	private TGMarker redoMarker;
-	
-	private UndoableChangeMarker(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		if(this.redoMarker != null){
-			TuxGuitar.instance().getSongManager().updateMarker(this.redoMarker.clone(TuxGuitar.instance().getSongManager().getFactory()));
-			MarkerList.instance().update(true);
-		}else if(this.undoMarker != null){
-			TuxGuitar.instance().getSongManager().removeMarker(this.undoMarker.clone(TuxGuitar.instance().getSongManager().getFactory()));
-			MarkerList.instance().update(false);
-		}
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		if(this.undoMarker != null){
-			TuxGuitar.instance().getSongManager().updateMarker(this.undoMarker.clone(TuxGuitar.instance().getSongManager().getFactory()));
-			MarkerList.instance().update(true);
-		}else if(this.redoMarker != null){
-			TuxGuitar.instance().getSongManager().removeMarker(this.redoMarker.clone(TuxGuitar.instance().getSongManager().getFactory()));
-			MarkerList.instance().update(false);
-		}
-		this.undoCaret.update();
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeMarker startUndo(TGMarker marker){
-		UndoableChangeMarker undoable = new UndoableChangeMarker();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.undoMarker = (marker == null)?null:(TGMarker)marker.clone(TuxGuitar.instance().getSongManager().getFactory());
-		
-		return undoable;
-	}
-	
-	public UndoableChangeMarker endUndo(TGMarker marker){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoMarker = (marker == null)?null:(TGMarker)marker.clone(TuxGuitar.instance().getSongManager().getFactory());
-		return this;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeOpenRepeat.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeOpenRepeat.java
deleted file mode 100644
index 3aae264..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeOpenRepeat.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGMeasure;
-
-public class UndoableChangeOpenRepeat implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private long position;
-	
-	private UndoableChangeOpenRepeat(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.changeOpenRepeat(this.position);
-		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
-		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber());
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.changeOpenRepeat(this.position);
-		TGMeasure measure = manager.getTrackManager().getMeasureAt(manager.getFirstTrack(),this.position);
-		TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber());
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeOpenRepeat startUndo(){
-		UndoableChangeOpenRepeat undoable = new UndoableChangeOpenRepeat();
-		Caret caret = getCaret();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.position = caret.getPosition();
-		
-		return undoable;
-	}
-	
-	public UndoableChangeOpenRepeat endUndo(){
-		this.redoCaret = new UndoableCaretHelper();
-		return this;
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTempo.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTempo.java
deleted file mode 100644
index 8e6ba2f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTempo.java
+++ /dev/null
@@ -1,89 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGTempo;
-
-public class UndoableChangeTempo implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private List undoableTempos;
-	private List redoableTempos;
-	
-	private UndoableChangeTempo(){
-		super();
-		this.undoableTempos = new ArrayList();
-		this.redoableTempos = new ArrayList();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		this.setTempos(this.redoableTempos);
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		this.setTempos(this.undoableTempos);
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeTempo startUndo(){
-		UndoableChangeTempo undoable = new UndoableChangeTempo();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.getTempos(undoable.undoableTempos);
-		return undoable;
-	}
-	
-	public UndoableChangeTempo endUndo(){
-		this.redoCaret = new UndoableCaretHelper();
-		this.getTempos(this.redoableTempos);
-		return this;
-	}
-	
-	private void getTempos(List list){
-		Iterator it = TuxGuitar.instance().getSongManager().getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			list.add(header.getTempo().clone(TuxGuitar.instance().getSongManager().getFactory()));
-		}
-	}
-	
-	private void setTempos(List tempos){
-		int length = tempos.size();
-		if(length != TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders()){
-			return;
-		}
-		for(int i =0; i < length; i ++){
-			TGTempo tempo = ((TGTempo)tempos.get(i)).clone(TuxGuitar.instance().getSongManager().getFactory());
-			TuxGuitar.instance().getSongManager().changeTempo(TuxGuitar.instance().getSongManager().getMeasureHeader(i + 1),tempo);
-		}
-		TuxGuitar.instance().fireUpdate();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTimeSignature.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTimeSignature.java
deleted file mode 100644
index 42d4353..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTimeSignature.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.song.models.TGTimeSignature;
-
-public class UndoableChangeTimeSignature implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private TGSong song;
-	private long tsStart;
-	private boolean tsToEnd;
-	private TGTimeSignature ts;
-	
-	private UndoableChangeTimeSignature(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().changeTimeSignature(this.tsStart,this.ts,this.tsToEnd);
-		TuxGuitar.instance().fireUpdate();
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGFactory factory = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getFactory();
-		TGSong song = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getSong();
-		this.song.copy(factory, song);
-		TuxGuitar.instance().fireUpdate();
-		this.undoCaret.update();
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeTimeSignature startUndo(){
-		TGFactory factory = new TGFactory();
-		TGSong song = TuxGuitar.instance().getTablatureEditor().getTablature().getSongManager().getSong();
-		UndoableChangeTimeSignature undoable = new UndoableChangeTimeSignature();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.song = song.clone(factory);
-		return undoable;
-	}
-	
-	public UndoableChangeTimeSignature endUndo(TGTimeSignature timeSignature,long start, boolean toEnd){
-		this.ts = timeSignature;
-		this.tsStart = start;
-		this.tsToEnd = toEnd;
-		this.redoCaret = new UndoableCaretHelper();
-		return this;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTripletFeel.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTripletFeel.java
deleted file mode 100644
index ac5fa92..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/custom/UndoableChangeTripletFeel.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.custom;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.editors.tab.TGMeasureImpl;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-
-public class UndoableChangeTripletFeel implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private long position;
-	private int redoableTripletFeel;
-	private int undoableTripletFeel;
-	private List nextTripletFeelPositions;
-	private boolean toEnd;
-	
-	private UndoableChangeTripletFeel(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getSongManager().changeTripletFeel(this.position,this.redoableTripletFeel,this.toEnd);
-		TuxGuitar.instance().fireUpdate();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TuxGuitar.instance().getSongManager().changeTripletFeel(this.position,this.undoableTripletFeel,this.toEnd);
-		if(this.toEnd){
-			Iterator it = this.nextTripletFeelPositions.iterator();
-			while(it.hasNext()){
-				TripletFeelPosition tfp = (TripletFeelPosition)it.next();
-				TuxGuitar.instance().getSongManager().changeTripletFeel(tfp.getPosition(),tfp.getTripletFeel(),true);
-			}
-		}
-		TuxGuitar.instance().fireUpdate();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableChangeTripletFeel startUndo(){
-		UndoableChangeTripletFeel undoable = new UndoableChangeTripletFeel();
-		Caret caret = getCaret();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.position = caret.getPosition();
-		undoable.undoableTripletFeel = caret.getMeasure().getTripletFeel();
-		undoable.nextTripletFeelPositions = new ArrayList();
-		
-		int prevTripletFeel = undoable.undoableTripletFeel;
-		Iterator it = TuxGuitar.instance().getSongManager().getFirstTrack().getMeasures();
-		while(it.hasNext()){
-			TGMeasureImpl measure = (TGMeasureImpl)it.next();
-			if(measure.getStart() > undoable.position){
-				int currTripletFeel = measure.getTripletFeel();
-				if(prevTripletFeel != currTripletFeel){
-					TripletFeelPosition tfp = undoable.new TripletFeelPosition(measure.getStart(),currTripletFeel);
-					undoable.nextTripletFeelPositions.add(tfp);
-				}
-				prevTripletFeel = currTripletFeel;
-			}
-		}
-		return undoable;
-	}
-	
-	public UndoableChangeTripletFeel endUndo(int tripletFeel,boolean toEnd){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoableTripletFeel = tripletFeel;
-		this.toEnd = toEnd;
-		return this;
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-	
-	private class TripletFeelPosition{
-		private long position;
-		private int tripletFeel;
-		
-		public TripletFeelPosition(long position,int tripletFeel) {
-			this.position = position;
-			this.tripletFeel = tripletFeel;
-		}
-		public long getPosition() {
-			return this.position;
-		}
-		public int getTripletFeel() {
-			return this.tripletFeel;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableAddMeasure.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableAddMeasure.java
deleted file mode 100644
index 5068b47..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableAddMeasure.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.measure;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-
-public class UndoableAddMeasure implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private int number;
-	
-	private UndoableAddMeasure(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getSongManager().addNewMeasure(this.number);
-		TuxGuitar.instance().fireUpdate();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TuxGuitar.instance().getSongManager().removeMeasure(this.number);
-		TuxGuitar.instance().fireUpdate();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableAddMeasure startUndo(int number){
-		UndoableAddMeasure undoable = new UndoableAddMeasure();
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.doAction = UNDO_ACTION;
-		undoable.number = number;
-		return undoable;
-	}
-	
-	public UndoableAddMeasure endUndo(){
-		this.redoCaret = new UndoableCaretHelper();
-		return this;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableInsertMeasure.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableInsertMeasure.java
deleted file mode 100644
index 03a1654..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableInsertMeasure.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.measure;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.helpers.TGSongSegment;
-import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper;
-
-public class UndoableInsertMeasure implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private TGSongSegment tracksMeasures;
-	private long insertPosition;
-	private int toTrack;
-	private int copyCount;
-	private int fromNumber;
-	private long theMove;
-	
-	public UndoableInsertMeasure(int toTrack){
-		Caret caret = getCaret();
-		this.doAction = UNDO_ACTION;
-		this.toTrack = toTrack;
-		this.undoCaret = new UndoableCaretHelper();
-		this.insertPosition = caret.getPosition();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSongSegmentHelper helper = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager());
-		helper.insertMeasures(this.tracksMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),this.fromNumber,this.theMove,this.toTrack);
-		TuxGuitar.instance().fireUpdate();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		for(int i = 0;i < this.copyCount;i ++){
-			TuxGuitar.instance().getSongManager().removeMeasure(this.insertPosition);
-		}
-		TuxGuitar.instance().fireUpdate();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public UndoableInsertMeasure endUndo(TGSongSegment tracksMeasures,int copyCount,int fromNumber,long theMove){
-		this.redoCaret = new UndoableCaretHelper();
-		this.copyCount = copyCount;
-		this.tracksMeasures = tracksMeasures;
-		this.fromNumber = fromNumber;
-		this.theMove = theMove;
-		return this;
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableMeasureGeneric.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableMeasureGeneric.java
deleted file mode 100644
index 45fe7d7..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableMeasureGeneric.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.measure;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableMeasureGeneric implements UndoableEdit{
-	private int doAction;
-	private int trackNumber;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private TGMeasure undoMeasure;
-	private TGMeasure redoMeasure;
-	
-	private UndoableMeasureGeneric(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		this.replace(this.redoMeasure);
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		this.replace(this.undoMeasure);
-		this.undoCaret.update();
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	private void replace(TGMeasure replace){
-		TGTrack track = TuxGuitar.instance().getSongManager().getTrack(this.trackNumber);
-		if(track != null && replace != null){
-			TGMeasureHeader header = TuxGuitar.instance().getSongManager().getMeasureHeader(replace.getNumber());
-			TGMeasure measure = replace.clone(TuxGuitar.instance().getSongManager().getFactory(),header);
-			measure = TuxGuitar.instance().getSongManager().getTrackManager().replaceMeasure(track,measure);
-			TuxGuitar.instance().getTablatureEditor().getTablature().getViewLayout().fireUpdate(measure.getNumber());
-		}
-	}
-	
-	public static UndoableMeasureGeneric startUndo( TGMeasure measure ){
-		UndoableMeasureGeneric undoable = new UndoableMeasureGeneric();
-		undoable.doAction = UNDO_ACTION;
-		undoable.trackNumber = measure.getTrack().getNumber();
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.undoMeasure = measure.clone(TuxGuitar.instance().getSongManager().getFactory(),measure.getHeader().clone(TuxGuitar.instance().getSongManager().getFactory()));
-		return undoable;
-	}
-	
-	public UndoableMeasureGeneric endUndo( TGMeasure measure ){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoMeasure = measure.clone(TuxGuitar.instance().getSongManager().getFactory(),measure.getHeader().clone(TuxGuitar.instance().getSongManager().getFactory()));
-		return this;
-	}
-	
-	public static UndoableMeasureGeneric startUndo(){
-		/*
-		UndoableMeasureGeneric undoable = new UndoableMeasureGeneric();
-		Caret caret = getCaret();
-		undoable.doAction = UNDO_ACTION;
-		undoable.trackNumber = caret.getTrack().getNumber();
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.undoMeasure = caret.getMeasure().clone(TuxGuitar.instance().getSongManager().getFactory(),caret.getMeasure().getHeader().clone(TuxGuitar.instance().getSongManager().getFactory()));
-		return undoable;
-		*/
-		return startUndo( getCaret().getMeasure() );
-	}
-	
-	public UndoableMeasureGeneric endUndo(){
-		/*
-		Caret caret = getCaret();
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoMeasure = caret.getMeasure().clone(TuxGuitar.instance().getSongManager().getFactory(),caret.getMeasure().getHeader().clone(TuxGuitar.instance().getSongManager().getFactory()));
-		return this;
-		*/
-		return endUndo( getCaret().getMeasure() );
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableRemoveMeasure.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableRemoveMeasure.java
deleted file mode 100644
index 59f7bbe..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableRemoveMeasure.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.measure;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.helpers.TGSongSegment;
-import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper;
-import org.herac.tuxguitar.song.models.TGMarker;
-
-public class UndoableRemoveMeasure implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private TGSongSegment tracksMeasures;
-	private UndoMarkers undoMarkers;
-	private int n1;
-	private int n2;
-	
-	public UndoableRemoveMeasure(int n1,int n2){
-		this.doAction = UNDO_ACTION;
-		this.undoCaret = new UndoableCaretHelper();
-		this.n1 = n1;
-		this.n2 = n2;
-		this.tracksMeasures = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(n1,n2);
-		this.undoMarkers = new UndoMarkers();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getSongManager().removeMeasureHeaders(this.n1,this.n2);
-		TuxGuitar.instance().fireUpdate();
-		
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).insertMeasures(this.tracksMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),this.n1,0,0);
-		
-		TuxGuitar.instance().fireUpdate();
-		this.undoMarkers.undo();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public UndoableRemoveMeasure endUndo(){
-		this.redoCaret = new UndoableCaretHelper();
-		return this;
-	}
-	
-	private class UndoMarkers{
-		private List markers;
-		
-		public UndoMarkers(){
-			this.markers = new ArrayList();
-			Iterator it = TuxGuitar.instance().getSongManager().getMarkers().iterator();
-			while(it.hasNext()){
-				this.markers.add(((TGMarker)it.next()).clone(TuxGuitar.instance().getSongManager().getFactory()));
-			}
-		}
-		
-		public void undo(){
-			TuxGuitar.instance().getSongManager().removeAllMarkers();
-			Iterator it = this.markers.iterator();
-			while(it.hasNext()){
-				TGMarker marker = (TGMarker)it.next();
-				TuxGuitar.instance().getSongManager().updateMarker(marker.clone(TuxGuitar.instance().getSongManager().getFactory()));
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableReplaceMeasures.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableReplaceMeasures.java
deleted file mode 100644
index 9ecb6de..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/measure/UndoableReplaceMeasures.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.measure;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.helpers.TGSongSegment;
-import org.herac.tuxguitar.song.helpers.TGSongSegmentHelper;
-import org.herac.tuxguitar.song.models.TGMarker;
-
-public class UndoableReplaceMeasures implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private UndoMarkers undoMarkers;
-	private TGSongSegment undoTrackMeasures;
-	private TGSongSegment redoTrackMeasures;
-	private int toTrack;
-	private int count;
-	private int freeSpace;
-	private long theMove;
-	
-	public UndoableReplaceMeasures(int p1,int p2,int toTrack){
-		this.doAction = UNDO_ACTION;
-		this.toTrack = toTrack;
-		this.undoCaret = new UndoableCaretHelper();
-		this.undoMarkers = new UndoMarkers();
-		this.undoTrackMeasures = new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).copyMeasures(p1,p2);
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		for(int i = this.freeSpace;i < this.count;i ++){
-			TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
-		}
-		new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).replaceMeasures(this.redoTrackMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),this.theMove,this.toTrack);
-		
-		TuxGuitar.instance().fireUpdate();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		
-		for(int i = this.freeSpace;i < this.count;i ++){
-			TuxGuitar.instance().getSongManager().removeLastMeasure();
-		}
-		new TGSongSegmentHelper(TuxGuitar.instance().getSongManager()).replaceMeasures(this.undoTrackMeasures.clone(TuxGuitar.instance().getSongManager().getFactory()),0,0);
-		
-		TuxGuitar.instance().fireUpdate();
-		this.undoMarkers.undo();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public UndoableReplaceMeasures endUndo(TGSongSegment tracksMeasures,int count,int freeSpace,long theMove){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoTrackMeasures = tracksMeasures;
-		this.count = count;
-		this.freeSpace = freeSpace;
-		this.theMove = theMove;
-		return this;
-	}
-	
-	private class UndoMarkers{
-		private List markers;
-		
-		public UndoMarkers(){
-			this.markers = new ArrayList();
-			Iterator it = TuxGuitar.instance().getSongManager().getMarkers().iterator();
-			while(it.hasNext()){
-				this.markers.add(((TGMarker)it.next()).clone(TuxGuitar.instance().getSongManager().getFactory()));
-			}
-		}
-		
-		public void undo(){
-			TuxGuitar.instance().getSongManager().removeAllMarkers();
-			Iterator it = this.markers.iterator();
-			while(it.hasNext()){
-				TGMarker marker = (TGMarker)it.next();
-				TuxGuitar.instance().getSongManager().updateMarker(marker.clone(TuxGuitar.instance().getSongManager().getFactory()));
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableAddTrack.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableAddTrack.java
deleted file mode 100644
index 76fcceb..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableAddTrack.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableAddTrack implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private TGTrack redoableTrack;
-	
-	private UndoableAddTrack(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getSongManager().addTrack(cloneTrack(this.redoableTrack));
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TuxGuitar.instance().getSongManager().removeTrack(cloneTrack(this.redoableTrack));
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableAddTrack startUndo(){
-		UndoableAddTrack undoable = new UndoableAddTrack();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		
-		return undoable;
-	}
-	
-	public UndoableAddTrack endUndo(TGTrack track){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoableTrack = cloneTrack(track);
-		return this;
-	}
-	
-	private static TGTrack cloneTrack(TGTrack track){
-		return track.clone(TuxGuitar.instance().getSongManager().getFactory(), TuxGuitar.instance().getSongManager().getSong());
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableCloneTrack.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableCloneTrack.java
deleted file mode 100644
index 0321eee..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableCloneTrack.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-
-public class UndoableCloneTrack implements UndoableEdit{
-	private int doAction;
-	private int trackNumber;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	
-	private UndoableCloneTrack(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getSongManager().cloneTrack(TuxGuitar.instance().getSongManager().getTrack(this.trackNumber));
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TuxGuitar.instance().getSongManager().removeTrack(TuxGuitar.instance().getSongManager().getLastTrack());
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableCloneTrack startUndo(){
-		UndoableCloneTrack undoable = new UndoableCloneTrack();
-		Caret caret = getCaret();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.trackNumber = caret.getTrack().getNumber();
-		
-		return undoable;
-	}
-	
-	public UndoableCloneTrack endUndo(){
-		this.redoCaret = new UndoableCaretHelper();
-		return this;
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackDown.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackDown.java
deleted file mode 100644
index 06aa779..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackDown.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableMoveTrackDown implements UndoableEdit{
-	private int doAction;
-	private int trackNumber;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	
-	private UndoableMoveTrackDown(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.moveTrackDown(manager.getTrack(this.trackNumber - 1));
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.moveTrackUp(manager.getTrack(this.trackNumber));
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.undoCaret.update();
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	
-	public static UndoableMoveTrackDown startUndo(){
-		UndoableMoveTrackDown undoable = new UndoableMoveTrackDown();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		
-		return undoable;
-	}
-	
-	public UndoableMoveTrackDown endUndo(TGTrack track){
-		this.redoCaret = new UndoableCaretHelper();
-		this.trackNumber = track.getNumber();
-		
-		return this;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackUp.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackUp.java
deleted file mode 100644
index 2138b02..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableMoveTrackUp.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableMoveTrackUp implements UndoableEdit{
-	private int doAction;
-	private int trackNumber;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	
-	private UndoableMoveTrackUp(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.moveTrackUp(manager.getTrack(this.trackNumber + 1));
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.moveTrackDown(manager.getTrack(this.trackNumber));
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.undoCaret.update();
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableMoveTrackUp startUndo(){
-		UndoableMoveTrackUp undoable = new UndoableMoveTrackUp();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		
-		return undoable;
-	}
-	
-	public UndoableMoveTrackUp endUndo(TGTrack track){
-		this.redoCaret = new UndoableCaretHelper();
-		this.trackNumber = track.getNumber();
-		
-		return this;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableRemoveTrack.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableRemoveTrack.java
deleted file mode 100644
index 84f77d3..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableRemoveTrack.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.tab.Caret;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableRemoveTrack implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private TGTrack undoableTrack;
-	
-	private UndoableRemoveTrack(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TuxGuitar.instance().getSongManager().removeTrack(cloneTrack(this.undoableTrack));
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.redoCaret.update();
-		
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TuxGuitar.instance().getSongManager().addTrack(cloneTrack(this.undoableTrack));
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableRemoveTrack startUndo(){
-		UndoableRemoveTrack undoable = new UndoableRemoveTrack();
-		Caret caret = getCaret();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.undoableTrack = cloneTrack(caret.getTrack());
-		
-		return undoable;
-	}
-	
-	public UndoableRemoveTrack endUndo(){
-		this.redoCaret = new UndoableCaretHelper();
-		return this;
-	}
-	
-	private static Caret getCaret(){
-		return TuxGuitar.instance().getTablatureEditor().getTablature().getCaret();
-	}
-	
-	private static TGTrack cloneTrack(TGTrack track){
-		return track.clone(TuxGuitar.instance().getSongManager().getFactory(), TuxGuitar.instance().getSongManager().getSong());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackChannel.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackChannel.java
deleted file mode 100644
index bb23246..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackChannel.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableTrackChannel implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private List undoChannels;
-	private List redoChannels;
-	
-	private UndoableTrackChannel(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSong song = TuxGuitar.instance().getSongManager().getSong();
-		for( int i = 0; i < this.redoChannels.size(); i ++){
-			TGChannel channel = (TGChannel)this.redoChannels.get(i);
-			TGTrack track = song.getTrack(i);
-			channel.copy( track.getChannel() );
-		}
-		TuxGuitar.instance().getMixer().updateValues();
-		TuxGuitar.instance().getTable().fireUpdate(false);
-		TuxGuitar.instance().updateCache(true);
-		if (TuxGuitar.instance().getPlayer().isRunning()) {
-			TuxGuitar.instance().getPlayer().updateControllers();
-		}
-		
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGSong song = TuxGuitar.instance().getSongManager().getSong();
-		for( int i = 0; i < this.undoChannels.size(); i ++){
-			TGChannel channel = (TGChannel)this.undoChannels.get(i);
-			TGTrack track = song.getTrack(i);
-			channel.copy( track.getChannel() );
-		}
-		TuxGuitar.instance().getMixer().updateValues();
-		TuxGuitar.instance().getTable().fireUpdate(false);
-		TuxGuitar.instance().updateCache(true);
-		if (TuxGuitar.instance().getPlayer().isRunning()) {
-			TuxGuitar.instance().getPlayer().updateControllers();
-		}
-		
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableTrackChannel startUndo(){
-		TGSong song = TuxGuitar.instance().getSongManager().getSong();
-		TGFactory factory = TuxGuitar.instance().getSongManager().getFactory();
-		int tracks = song.countTracks();
-		
-		UndoableTrackChannel undoable = new UndoableTrackChannel();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.undoChannels = new ArrayList();
-		
-		for( int i = 0; i < tracks; i ++){
-			TGTrack track = song.getTrack(i);
-			undoable.undoChannels.add( track.getChannel().clone(factory) );
-		}
-		return undoable;
-	}
-	
-	public UndoableTrackChannel endUndo(){
-		TGSong song = TuxGuitar.instance().getSongManager().getSong();
-		TGFactory factory = TuxGuitar.instance().getSongManager().getFactory();
-		int tracks = song.countTracks();
-		
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoChannels = new ArrayList();
-		
-		for( int i = 0; i < tracks; i ++){
-			TGTrack track = song.getTrack(i);
-			this.redoChannels.add( track.getChannel().clone(factory) );
-		}
-		return this;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackGeneric.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackGeneric.java
deleted file mode 100644
index 8626e07..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackGeneric.java
+++ /dev/null
@@ -1,109 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableTrackGeneric implements UndoableEdit{
-	private int doAction;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private UndoTrack undoTrack;
-	private RedoTrack redoTrack;
-	
-	private UndoableTrackGeneric(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		this.redoTrack.redo();
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		this.undoTrack.undo();
-		this.undoCaret.update();
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	
-	public static UndoableTrackGeneric startUndo(TGTrack track){
-		UndoableTrackGeneric undoable = new UndoableTrackGeneric();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.undoTrack = undoable.new UndoTrack(track);
-		return undoable;
-	}
-	
-	public UndoableTrackGeneric endUndo(TGTrack track){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoTrack = new RedoTrack(track);
-		return this;
-	}
-	
-	private class UndoTrack{
-		private TGTrack track;
-		
-		public UndoTrack(TGTrack track){
-			if(track != null){
-				this.track = track.clone(TuxGuitar.instance().getSongManager().getFactory(),TuxGuitar.instance().getSongManager().getSong());
-			}
-		}
-		
-		public void undo(){
-			if(this.track != null){
-				while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() < this.track.countMeasures() ){
-					TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
-				}
-				while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() > this.track.countMeasures() ){
-					TuxGuitar.instance().getSongManager().removeLastMeasureHeader();
-				}
-				TuxGuitar.instance().getSongManager().replaceTrack(this.track);
-				TuxGuitar.instance().fireUpdate();
-				TuxGuitar.instance().getMixer().update();
-			}
-		}
-	}
-	
-	private class RedoTrack{
-		private TGTrack track;
-		
-		public RedoTrack(TGTrack track){
-			if(track != null){
-				this.track = track.clone(TuxGuitar.instance().getSongManager().getFactory(),TuxGuitar.instance().getSongManager().getSong());
-			}
-		}
-		
-		public void redo(){
-			if(this.track != null){
-				while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() < this.track.countMeasures() ){
-					TuxGuitar.instance().getSongManager().addNewMeasureBeforeEnd();
-				}
-				while( TuxGuitar.instance().getSongManager().getSong().countMeasureHeaders() > this.track.countMeasures() ){
-					TuxGuitar.instance().getSongManager().removeLastMeasureHeader();
-				}
-				TuxGuitar.instance().getSongManager().replaceTrack(this.track);
-				TuxGuitar.instance().fireUpdate();
-				TuxGuitar.instance().getMixer().update();
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackInfo.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackInfo.java
deleted file mode 100644
index 48a0a35..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackInfo.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGColor;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableTrackInfo implements UndoableEdit{
-	private int doAction;
-	private int trackNumber;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private String undoName;
-	private String redoName;
-	private TGColor undoColor;
-	private TGColor redoColor;
-	private int undoOffset;
-	private int redoOffset;
-	
-	private UndoableTrackInfo(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.getTrackManager().changeInfo(manager.getTrack(this.trackNumber),this.redoName,this.redoColor.clone(manager.getFactory()),this.redoOffset);
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.getTrackManager().changeInfo(manager.getTrack(this.trackNumber),this.undoName,this.undoColor.clone(manager.getFactory()),this.undoOffset);
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().update();
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableTrackInfo startUndo(TGTrack track){
-		UndoableTrackInfo undoable = new UndoableTrackInfo();
-		undoable.doAction = UNDO_ACTION;
-		undoable.trackNumber = track.getNumber();
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.undoName = track.getName();
-		undoable.undoColor = track.getColor().clone(TuxGuitar.instance().getSongManager().getFactory());
-		undoable.undoOffset = track.getOffset();
-		
-		return undoable;
-	}
-	
-	public UndoableTrackInfo endUndo(TGTrack track){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoName = track.getName();
-		this.redoColor = track.getColor().clone(TuxGuitar.instance().getSongManager().getFactory());
-		this.redoOffset = track.getOffset();
-		
-		return this;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackInstrument.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackInstrument.java
deleted file mode 100644
index 77813ab..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackInstrument.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableTrackInstrument implements UndoableEdit{
-	private int doAction;
-	private int trackNumber;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private short undoInstrument;
-	private short redoInstrument;
-	private boolean undoPercussion;
-	private boolean redoPercussion;
-	
-	private UndoableTrackInstrument(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.getTrackManager().changeInstrument(manager.getTrack(this.trackNumber),this.redoInstrument,this.redoPercussion);
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().updateValues();
-		if (TuxGuitar.instance().getPlayer().isRunning()) {
-			TuxGuitar.instance().getPlayer().updatePrograms();
-		}
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		manager.getTrackManager().changeInstrument(manager.getTrack(this.trackNumber),this.undoInstrument,this.undoPercussion);
-		TuxGuitar.instance().fireUpdate();
-		TuxGuitar.instance().getMixer().updateValues();
-		if (TuxGuitar.instance().getPlayer().isRunning()) {
-			TuxGuitar.instance().getPlayer().updatePrograms();
-		}
-		this.undoCaret.update();
-		
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableTrackInstrument startUndo(TGTrack track){
-		UndoableTrackInstrument undoable = new UndoableTrackInstrument();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.trackNumber = track.getNumber();
-		undoable.undoInstrument = track.getChannel().getInstrument();
-		undoable.undoPercussion = track.isPercussionTrack();
-		
-		return undoable;
-	}
-	
-	public UndoableTrackInstrument endUndo(TGTrack track){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoInstrument = track.getChannel().getInstrument();
-		this.redoPercussion = track.isPercussionTrack();
-		
-		return this;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackLyric.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackLyric.java
deleted file mode 100644
index f4b78db..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackLyric.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.models.TGLyric;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableTrackLyric implements UndoableEdit{
-	private int doAction;
-	private int trackNumber;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private TGLyric undoLyric;
-	private TGLyric redoLyric;
-	private int undoCaretPosition;
-	private int redoCaretPosition;
-	
-	private UndoableTrackLyric(){
-		this.undoLyric = TuxGuitar.instance().getSongManager().getFactory().newLyric();
-		this.redoLyric = TuxGuitar.instance().getSongManager().getFactory().newLyric();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGTrack track = TuxGuitar.instance().getSongManager().getTrack(this.trackNumber);
-		this.redoLyric.copy(track.getLyrics());
-		TuxGuitar.instance().getLyricEditor().setCaretPosition(this.redoCaretPosition);
-		TuxGuitar.instance().getLyricEditor().update();
-		TuxGuitar.instance().updateCache(false);
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGTrack track = TuxGuitar.instance().getSongManager().getTrack(this.trackNumber);
-		this.undoLyric.copy(track.getLyrics());
-		TuxGuitar.instance().getLyricEditor().setCaretPosition(this.undoCaretPosition);
-		TuxGuitar.instance().getLyricEditor().update();
-		TuxGuitar.instance().updateCache(false);
-		this.undoCaret.update();
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableTrackLyric startUndo(TGTrack track,int undoCaretPosition){
-		UndoableTrackLyric undoable = new UndoableTrackLyric();
-		undoable.doAction = UNDO_ACTION;
-		undoable.trackNumber = track.getNumber();
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.undoCaretPosition = undoCaretPosition;
-		track.getLyrics().copy( undoable.undoLyric );
-		return undoable;
-	}
-	
-	public UndoableTrackLyric endUndo(TGTrack track,int redoCaretPosition){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoCaretPosition = redoCaretPosition;
-		track.getLyrics().copy( this.redoLyric );
-		return this;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackSoloMute.java b/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackSoloMute.java
deleted file mode 100644
index e3c5dc5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/undo/undoables/track/UndoableTrackSoloMute.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package org.herac.tuxguitar.gui.undo.undoables.track;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.undo.CannotRedoException;
-import org.herac.tuxguitar.gui.undo.CannotUndoException;
-import org.herac.tuxguitar.gui.undo.UndoableEdit;
-import org.herac.tuxguitar.gui.undo.undoables.UndoableCaretHelper;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class UndoableTrackSoloMute implements UndoableEdit{
-	private int doAction;
-	private int track;
-	private UndoableCaretHelper undoCaret;
-	private UndoableCaretHelper redoCaret;
-	private boolean undoSolo;
-	private boolean undoMute;
-	private boolean redoSolo;
-	private boolean redoMute;
-	
-	private UndoableTrackSoloMute(){
-		super();
-	}
-	
-	public void redo() throws CannotRedoException {
-		if(!canRedo()){
-			throw new CannotRedoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		TGTrack track = manager.getTrack( this.track );
-		if( track != null ){
-			manager.getTrackManager().changeSolo(track, this.redoSolo );
-			manager.getTrackManager().changeMute(track, this.redoMute );
-		}
-		TuxGuitar.instance().getMixer().updateValues();
-		TuxGuitar.instance().getTable().fireUpdate(false);
-		TuxGuitar.instance().updateCache(true);
-		if (TuxGuitar.instance().getPlayer().isRunning()) {
-			TuxGuitar.instance().getPlayer().updateControllers();
-		}
-		
-		this.redoCaret.update();
-		this.doAction = UNDO_ACTION;
-	}
-	
-	public void undo() throws CannotUndoException {
-		if(!canUndo()){
-			throw new CannotUndoException();
-		}
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		TGTrack track = manager.getTrack( this.track );
-		if( track != null ){
-			manager.getTrackManager().changeSolo(track, this.undoSolo );
-			manager.getTrackManager().changeMute(track, this.undoMute );
-		}
-		TuxGuitar.instance().getMixer().updateValues();
-		TuxGuitar.instance().getTable().fireUpdate(false);
-		TuxGuitar.instance().updateCache(true);
-		if (TuxGuitar.instance().getPlayer().isRunning()) {
-			TuxGuitar.instance().getPlayer().updateControllers();
-		}
-		
-		this.undoCaret.update();
-		this.doAction = REDO_ACTION;
-	}
-	
-	public boolean canRedo() {
-		return (this.doAction == REDO_ACTION);
-	}
-	
-	public boolean canUndo() {
-		return (this.doAction == UNDO_ACTION);
-	}
-	
-	public static UndoableTrackSoloMute startUndo(TGTrack track){
-		UndoableTrackSoloMute undoable = new UndoableTrackSoloMute();
-		undoable.doAction = UNDO_ACTION;
-		undoable.undoCaret = new UndoableCaretHelper();
-		undoable.track = track.getNumber();
-		undoable.undoSolo = track.isSolo();
-		undoable.undoMute = track.isMute();
-		
-		return undoable;
-	}
-	
-	public UndoableTrackSoloMute endUndo(TGTrack track){
-		this.redoCaret = new UndoableCaretHelper();
-		this.redoSolo = track.isSolo();
-		this.redoMute = track.isMute();
-		
-		return this;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/ArgumentParser.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/ArgumentParser.java
deleted file mode 100644
index 94cacd6..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/ArgumentParser.java
+++ /dev/null
@@ -1,151 +0,0 @@
-package org.herac.tuxguitar.gui.util;
-
-import java.io.File;
-import java.net.URL;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.util.TGVersion;
-
-public class ArgumentParser {
-	
-	private static final String TG_DEFAULT_URL = "tuxguitar.default.url";
-	
-	private static final String[] OPTION_HELP = new String[]{"-h","--help"};
-	private static final String[] OPTION_VERSION = new String[]{"-v","--version"};
-	private static final String[] OPTION_JRE_INFO = new String[]{"-i","--system-info"};
-	
-	private String[] arguments;
-	private boolean processAndExit;
-	private URL url;
-	
-	public ArgumentParser(String[] arguments){
-		this.arguments = arguments;
-		this.processAndExit = false;
-		this.parse();
-	}
-	
-	private void parse(){
-		try{
-			checkHelp();
-			checkVersion();
-			checkSystemInfo();
-			if(!processAndExit()){
-				checkProperties();
-				checkURL();
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-	}
-	
-	private void checkHelp(){
-		for(int i = 0;i < this.arguments.length;i++){
-			for(int j = 0;j < OPTION_HELP.length;j++){
-				if(this.arguments[i].equals(OPTION_HELP[j])){
-					print("usage: TuxGuitar [file]");
-					print("Options:");
-					print("	-h, --help                 Show help options");
-					print("	-v, --version              Show version information and exit");
-					print("	-i, --system-info          Show the JVM system information");
-					print("	-D<name>=<value>           Set a JVM system property");
-					
-					this.processAndExit = true;
-				}
-			}
-		}
-	}
-	
-	private void checkVersion(){
-		for(int i = 0;i < this.arguments.length;i++){
-			for(int j = 0;j < OPTION_VERSION.length;j++){
-				if(this.arguments[i].equals(OPTION_VERSION[j])){
-					print(TuxGuitar.APPLICATION_NAME + " - " + TGVersion.CURRENT.getVersion());
-					
-					this.processAndExit = true;
-				}
-			}
-		}
-	}
-	
-	private void checkSystemInfo(){
-		for(int i = 0;i < this.arguments.length;i++){
-			for(int j = 0;j < OPTION_JRE_INFO.length;j++){
-				if(this.arguments[i].equals(OPTION_JRE_INFO[j])){
-					print("System Info:");
-					print("-> OS-Name:           " + System.getProperty("os.name"));
-					print("-> OS-Arch:           " + System.getProperty("os.arch"));
-					print("-> OS-Version:        " + System.getProperty("os.version"));
-					print("-> JVM-Name:          " + System.getProperty("java.vm.name"));
-					print("-> JVM-Version:       " + System.getProperty("java.vm.version"));
-					print("-> JVM-Vendor:        " + System.getProperty("java.vm.vendor"));
-					print("-> Java-Version:      " + System.getProperty("java.version"));
-					print("-> Java-Vendor:       " + System.getProperty("java.vendor"));
-					print("-> Java-Home:         " + System.getProperty("java.home"));
-					print("-> Java-Class-Path:   " + System.getProperty("java.class.path"));
-					print("-> Java-Library-Path: " + System.getProperty("java.library.path"));
-					
-					this.processAndExit = true;
-				}
-			}
-		}
-	}
-	
-	private void checkProperties(){
-		for(int i = 0;i < this.arguments.length;i++){
-			int indexKey = this.arguments[i].indexOf("-D");
-			int indexValue = this.arguments[i].indexOf("=");
-			if(indexKey == 0 && indexValue > indexKey && (indexValue + 1) < this.arguments[i].length() ){
-				String key =  this.arguments[i].substring(2, indexValue);
-				String value =  this.arguments[i].substring( indexValue + 1 );
-				if( key != null && key.length() > 0 && value != null && value.length() > 0){
-					System.setProperty( key, value);
-				}
-			}
-		}
-	}
-	
-	private void checkURL(){
-		String propertyUrl = System.getProperty(TG_DEFAULT_URL);
-		if( propertyUrl != null && makeURL( propertyUrl ) ){
-			return;
-		}
-		for(int i = 0;i < this.arguments.length;i++){
-			if(makeURL(this.arguments[i])){
-				return;
-			}
-		}
-	}
-	
-	private boolean makeURL(String spec){
-		try{
-			File file = new File(spec);
-			if(file.exists()){
-				this.url = file.toURI().toURL();
-			}else{
-				this.url = new URL(spec);
-			}
-		}catch(Throwable throwable){
-			this.url = null;
-		}
-		return (this.url != null);
-	}
-	
-	public boolean processAndExit(){
-		return this.processAndExit;
-	}
-	
-	public URL getURL() {
-		return this.url;
-	}
-	
-	protected void print(String s){
-		print(s, true);
-	}
-	
-	protected void print(String s, boolean ignoreNull){
-		if(!ignoreNull || s != null){
-			System.out.println( s );
-		}
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/ConfirmDialog.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/ConfirmDialog.java
deleted file mode 100644
index ac499d3..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/ConfirmDialog.java
+++ /dev/null
@@ -1,99 +0,0 @@
-package org.herac.tuxguitar.gui.util;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-
-public class ConfirmDialog {
-	
-	public static int BUTTON_CANCEL = 0x01;
-	public static int BUTTON_YES = 0x02;
-	public static int BUTTON_NO = 0x04;
-	
-	public static int STATUS_YES = 1;
-	public static int STATUS_NO = 2;
-	public static int STATUS_CANCEL = 3;
-	
-	protected Shell dialog;
-	protected int status;
-	private String message;
-	
-	
-	public ConfirmDialog(String message){
-		this.message = message;
-	}
-	
-	public int confirm(int style, int defaultButton){
-		Shell parent = TuxGuitar.instance().getShell();
-		this.dialog = DialogUtils.newDialog(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
-		this.dialog.setLayout(new GridLayout(1, true));
-		
-		//========================================================================
-		Composite labelComposite = new Composite(this.dialog, SWT.NONE);
-		labelComposite.setLayout(new GridLayout(2, false));
-		labelComposite.setLayoutData(new GridData(SWT.FILL,SWT.FILL,true,true));
-		
-		Label icon = new Label(labelComposite, SWT.NONE);
-		Label message = new Label(labelComposite, SWT.NONE);
-		icon.setImage(parent.getDisplay().getSystemImage(SWT.ICON_QUESTION));
-		message.setText(this.message);
-		
-		
-		//========================================================================
-		GridLayout buttonsLayout = new GridLayout(0,false);
-		Composite buttonsComposite = new Composite(this.dialog, SWT.NONE);
-		buttonsComposite.setLayout(buttonsLayout);
-		buttonsComposite.setLayoutData(new GridData(SWT.END,SWT.FILL,true,true));
-		
-		if((style & BUTTON_YES)!= 0){
-			addCloseButton(TuxGuitar.getProperty("yes"),STATUS_YES,buttonsComposite, (defaultButton == BUTTON_YES) );
-			buttonsLayout.numColumns ++;
-		}
-		if((style & BUTTON_NO)!= 0){
-			addCloseButton(TuxGuitar.getProperty("no"),STATUS_NO,buttonsComposite, (defaultButton == BUTTON_NO) );
-			buttonsLayout.numColumns ++;
-		}
-		if((style & BUTTON_CANCEL)!= 0){
-			addCloseButton(TuxGuitar.getProperty("cancel"),STATUS_CANCEL,buttonsComposite, (defaultButton == BUTTON_CANCEL) );
-			buttonsLayout.numColumns ++;
-		}
-		
-		DialogUtils.openDialog(this.dialog, DialogUtils.OPEN_STYLE_CENTER | DialogUtils.OPEN_STYLE_PACK | DialogUtils.OPEN_STYLE_WAIT);
-		
-		return this.status;
-	}
-	
-	private void addCloseButton(String text,final int value,Composite parent, boolean defaultButton){
-		Button button = new Button(parent, SWT.PUSH);
-		button.setLayoutData(getButtonData());
-		button.setText(text);
-		button.addSelectionListener(new SelectionAdapter() {
-			public void widgetSelected(SelectionEvent arg0) {
-				ConfirmDialog.this.dialog.dispose();
-				ConfirmDialog.this.status = value;
-			}
-		});
-		if(defaultButton){
-			this.dialog.setDefaultButton(button);
-		}
-	}
-	
-	private GridData getButtonData(){
-		GridData data = new GridData(SWT.FILL,SWT.FILL,true,true);
-		data.minimumWidth = 80;
-		data.minimumHeight = 25;
-		return data;
-	}
-	
-	public void setDefaultStatus(int status){
-		this.status = status;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/DialogUtils.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/DialogUtils.java
deleted file mode 100644
index 426736f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/DialogUtils.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package org.herac.tuxguitar.gui.util;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Display;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-
-public class DialogUtils {
-	
-	public static final int OPEN_STYLE_WAIT = 0x01;
-	
-	public static final int OPEN_STYLE_PACK = 0x02;
-	
-	public static final int OPEN_STYLE_LAYOUT = 0x04;
-	
-	public static final int OPEN_STYLE_CENTER = 0x08;
-	
-	public static final int OPEN_STYLE_MAXIMIZED = 0x10;
-	
-	public static final Shell newDialog(Display display,int style){
-		return new Shell(display, style);
-	}
-	
-	public static final Shell newDialog(Shell parent,int style){
-		parent.setCursor(parent.getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
-		return new Shell(parent, style);
-	}
-	
-	public static final void openDialog(Shell dialog,int style){
-		DialogUtils.openDialog(dialog,dialog.getParent().getShell(),style);
-	}
-	
-	public static final void openDialog(Shell dialog,Shell parent,int style){
-		Display display = dialog.getDisplay();
-		if((style & OPEN_STYLE_PACK) != 0){
-			dialog.pack();
-		}
-		if((style & OPEN_STYLE_LAYOUT) != 0){
-			dialog.layout();
-		}
-		if((style & OPEN_STYLE_MAXIMIZED) != 0){
-			dialog.setMaximized(true);
-		}
-		else if((style & OPEN_STYLE_CENTER) != 0){
-			int x = Math.max(0,parent.getBounds().x + (parent.getBounds().width - dialog.getSize().x) / 2);
-			int y = Math.max(0,parent.getBounds().y + (parent.getBounds().height - dialog.getSize().y) / 2);
-			dialog.setLocation(x,y);
-		}
-		dialog.open();
-		
-		parent.setCursor(display.getSystemCursor(SWT.CURSOR_ARROW));
-		
-		if((style & OPEN_STYLE_WAIT) != 0){
-			if( (dialog.getStyle() & SWT.APPLICATION_MODAL) == 0 ){
-				ActionLock.unlock();
-			}
-			while (!display.isDisposed() && !dialog.isDisposed()) {
-				if (!display.readAndDispatch()) {
-					display.sleep();
-				}
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/FileChooser.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/FileChooser.java
deleted file mode 100644
index f5fcf85..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/FileChooser.java
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Created on 08-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.util;
-
-import java.io.File;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.io.base.TGFileFormat;
-import org.herac.tuxguitar.io.base.TGFileFormatManager;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class FileChooser {
-	
-	public static final String DEFAULT_OPEN_FILENAME = null;
-	
-	public static final String DEFAULT_SAVE_FILENAME = ("Untitled" + TGFileFormatManager.DEFAULT_EXTENSION);
-	
-	public static TGFileFormat ALL_FORMATS = new TGFileFormat("All Files","*.*");
-	
-	private static FileChooser instance;
-	
-	public static FileChooser instance() {
-		if(instance == null){
-			instance = new FileChooser();
-		}
-		return instance;
-	}
-	
-	private List list(Object o){
-		List list = new ArrayList();
-		list.add(o);
-		return list;
-	}
-	
-	public String open(Shell parent,TGFileFormat format) {
-		return open(parent, list(format));
-	}
-	
-	public String open(Shell parent,List formats) {
-		String currentPath = TuxGuitar.instance().getFileHistory().getCurrentFilePath();
-		String chooserPath = TuxGuitar.instance().getFileHistory().getOpenPath();
-		boolean localFile = TuxGuitar.instance().getFileHistory().isLocalFile();
-		boolean existentFile = (localFile && currentPath != null && chooserPath != null && currentPath.equals(chooserPath));
-		
-		FilterList filter = new FilterList(formats);
-		FileDialog dialog = new FileDialog(parent,SWT.OPEN);
-		dialog.setFileName((existentFile ? getFileName(formats, DEFAULT_OPEN_FILENAME, false) : null ));
-		dialog.setFilterPath(chooserPath);
-		dialog.setFilterNames(filter.getFilterNames());
-		dialog.setFilterExtensions(filter.getFilterExtensions());
-		return openDialog(dialog);
-	}
-	
-	public String save(Shell parent,TGFileFormat format) {
-		return save(parent, list(format));
-	}
-	
-	public String save(Shell parent,List formats) {
-		String chooserPath = TuxGuitar.instance().getFileHistory().getSavePath();
-		
-		FilterList filter = new FilterList(formats);
-		FileDialog dialog = new FileDialog(parent,SWT.SAVE);
-		dialog.setFileName(getFileName(formats, DEFAULT_SAVE_FILENAME, true));
-		dialog.setFilterPath(chooserPath);
-		dialog.setFilterNames(filter.getFilterNames());
-		dialog.setFilterExtensions(filter.getFilterExtensions());
-		return openDialog(dialog);
-	}
-	
-	private String openDialog(FileDialog dialog){
-		String path = dialog.open();
-		if(path != null){
-			File file = new File(path);
-			File parent = file.getParentFile();
-			if( parent != null && parent.exists() && parent.isDirectory() ){
-				TuxGuitar.instance().getFileHistory().setChooserPath( parent.getAbsolutePath() );
-			}
-		}
-		return path;
-	}
-	
-	private String getFileName(List formats, String defaultName, boolean replaceExtension){
-		if(formats == null || formats.isEmpty()){
-			return defaultName;
-		}
-		String file = TuxGuitar.instance().getFileHistory().getCurrentFileName(defaultName);
-		if(file != null && file.length() > 0){
-			int index = file.lastIndexOf('.');
-			if(index > 0){
-				String fileName = file.substring(0,index);
-				String fileExtension = file.substring(index).toLowerCase();
-				Iterator it = formats.iterator();
-				while(it.hasNext()){
-					TGFileFormat format = (TGFileFormat)it.next();
-					if(format.getSupportedFormats() != null){
-						String[] extensions = format.getSupportedFormats().split(TGFileFormat.EXTENSION_SEPARATOR);
-						if(extensions != null && extensions.length > 0){
-							for(int i = 0; i < extensions.length; i ++){
-								if(extensions[i].equals("*" + fileExtension)){
-									return file;
-								}
-							}
-						}
-					}
-				}
-				if( replaceExtension ){
-					TGFileFormat format = (TGFileFormat)formats.get(0);
-					if(format.getSupportedFormats() != null){
-						String[] extensions = format.getSupportedFormats().split(TGFileFormat.EXTENSION_SEPARATOR);
-						if(extensions != null && extensions.length > 0){
-							if(extensions[0].length() > 1){
-								return (fileName + extensions[0].substring(1));
-							}
-						}
-					}
-				}
-			}
-		}
-		return defaultName;
-	}
-	
-	private class FilterList{
-		private String[] filterExtensions;
-		private String[] filterNames;
-		
-		public  FilterList(List formats) {
-			int size = (formats.size() + 2);
-			this.filterNames = new String[size];
-			this.filterExtensions = new String[size];
-			this.filterNames[0] = new String("All Supported Formats");
-			this.filterExtensions[0] = new String();
-			for(int i = 1; i < (size - 1); i ++){
-				TGFileFormat format = (TGFileFormat)formats.get(i-1);
-				this.filterNames[i] = format.getName();
-				this.filterExtensions[i] = format.getSupportedFormats();
-				this.filterExtensions[0] += (i > 1)?";":"";
-				this.filterExtensions[0] += format.getSupportedFormats();
-			}
-			this.filterNames[(size - 1)] = new String("All Files");
-			this.filterExtensions[(size - 1)] = new String("*.*");
-		}
-		
-		public String[] getFilterExtensions() {
-			return this.filterExtensions;
-		}
-		
-		public String[] getFilterNames() {
-			return this.filterNames;
-		}
-		
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/ImageUtils.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/ImageUtils.java
deleted file mode 100644
index 2947cc9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/ImageUtils.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.herac.tuxguitar.gui.util;
-
-import java.io.ByteArrayOutputStream;
-import java.io.OutputStream;
-
-import org.eclipse.swt.graphics.ImageData;
-import org.eclipse.swt.graphics.ImageLoader;
-import org.eclipse.swt.graphics.PaletteData;
-import org.eclipse.swt.graphics.RGB;
-
-public class ImageUtils {
-	/**
-	 * Escribe el ImageData en el outputStream
-	 * @param data
-	 * @param outputStream
-	 * @param format
-	 */
-	public static void writeImage(ImageData data,OutputStream outputStream,int format){
-		ImageLoader loader = new ImageLoader();
-		loader.data = new ImageData[]{data};
-		loader.save(outputStream,format);
-	}
-	
-	/**
-	 * Convierte un ImageData en un array de bytes
-	 * @param data
-	 * @param format
-	 * @return
-	 */
-	public static byte[] imageToByteArray(ImageData data,int format){
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		writeImage(data,out,format);
-		return out.toByteArray();
-	}
-	
-	/**
-	 * Crea una mascara a partir de src.
-	 * 
-	 * @param src
-	 * @param alpha
-	 * @param none
-	 * @return ImageData
-	 */
-	public static ImageData applyMask(ImageData src,RGB alpha,RGB none){
-		ImageData maskData = new ImageData(src.width,src.height,1,new PaletteData(new RGB[]{ none,alpha }  ));
-		for(int x = 0; x< maskData.width; x++) {
-			for(int y = 0; y < maskData.height; y++) {
-				RGB rgb = src.palette.getRGB(src.getPixel(x, y));
-				if(rgb.red == alpha.red && rgb.green == alpha.green && rgb.blue == alpha.blue){
-					maskData.setPixel(x, y, maskData.palette.getPixel(none));
-				}else{
-					maskData.setPixel(x, y, maskData.palette.getPixel(alpha));
-				}
-			}
-		}
-		return maskData;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/MessageDialog.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/MessageDialog.java
deleted file mode 100644
index 9f6d033..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/MessageDialog.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Created on 20-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.gui.util;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.MessageBox;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.actions.ActionLock;
-import org.herac.tuxguitar.gui.helper.SyncThread;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class MessageDialog {
-	
-	private int style;
-	private String name;
-	private String message;
-	
-	protected MessageDialog(String name,String message,int style){
-		this.name = name;
-		this.message = message;
-		this.style = style;
-	}
-	
-	protected void show(Shell parent){
-		MessageBox messageBox = new MessageBox(parent, this.style);
-		messageBox.setText(this.name);
-		messageBox.setMessage(this.message);
-		messageBox.open();
-	}
-	
-	public static void infoMessage(final String title,final String message){
-		MessageDialog.infoMessage(TuxGuitar.instance().getShell(), title, message);
-	}
-	
-	public static void infoMessage(final Shell shell,final String title,final String message){
-		new SyncThread(new Runnable() {
-			public void run() {
-				if(!shell.isDisposed()){
-					new MessageDialog(title,message,SWT.ICON_INFORMATION).show(shell);
-				}
-			}
-		}).start();
-	}
-	
-	public static void errorMessage(final Throwable throwable){
-		MessageDialog.errorMessage(TuxGuitar.instance().getShell(),throwable);
-	}
-	
-	public static void errorMessage(final Shell shell,final Throwable throwable){
-		MessageDialog.errorMessage(shell, (throwable.getMessage() != null ? throwable.getMessage() : throwable.getClass().getName() ));
-		new Thread(new Runnable() {
-			public void run() {
-				throwable.printStackTrace();
-			}
-		}).start();
-	}
-	
-	public static void errorMessage(final Shell shell,final String message){
-		if(!shell.isDisposed()){
-			new SyncThread(new Runnable() {
-				public void run() {
-					if(!shell.isDisposed()){
-						ActionLock.unlock();
-						TuxGuitar.instance().unlock();
-						shell.setCursor(shell.getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
-						new MessageDialog(TuxGuitar.getProperty("error"),message,SWT.ICON_ERROR).show(shell);
-					}
-				}
-			}).start();
-		}
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/MidiTickUtil.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/MidiTickUtil.java
deleted file mode 100644
index 77488bf..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/MidiTickUtil.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.herac.tuxguitar.gui.util;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.player.base.MidiRepeatController;
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-
-public class MidiTickUtil {
-	
-	public static long getStart(long tick){
-		long startPoint = getStartPoint();
-		long start = startPoint;
-		long length = 0;
-		
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		MidiRepeatController controller = new MidiRepeatController(manager.getSong(), getSHeader() , getEHeader() );
-		while(!controller.finished()){
-			TGMeasureHeader header = manager.getSong().getMeasureHeader(controller.getIndex());
-			controller.process();
-			if(controller.shouldPlay()){
-				
-				start += length;
-				length = header.getLength();
-				
-				//verifico si es el compas correcto
-				if(tick >= start && tick < (start + length )){
-					return header.getStart() + (tick - start);
-				}
-			}
-		}
-		return ( tick < startPoint ? startPoint : start );
-	}
-	
-	public static long getTick(long start){
-		long startPoint = getStartPoint();
-		long tick = startPoint;
-		long length = 0;
-		
-		TGSongManager manager = TuxGuitar.instance().getSongManager();
-		MidiRepeatController controller = new MidiRepeatController(manager.getSong(), getSHeader() , getEHeader() );
-		while(!controller.finished()){
-			TGMeasureHeader header = manager.getSong().getMeasureHeader(controller.getIndex());
-			controller.process();
-			if(controller.shouldPlay()){
-				
-				tick += length;
-				length = header.getLength();
-				
-				//verifico si es el compas correcto
-				if(start >= header.getStart() && start < (header.getStart() + length )){
-					return tick;
-				}
-			}
-		}
-		return ( start < startPoint ? startPoint : tick );
-	}
-	
-	private static long getStartPoint(){
-		TuxGuitar.instance().getPlayer().updateLoop( false );
-		return TuxGuitar.instance().getPlayer().getLoopSPosition();
-	}
-	
-	public static int getSHeader() {
-		return TuxGuitar.instance().getPlayer().getLoopSHeader();
-	}
-	
-	public static int getEHeader() {
-		return TuxGuitar.instance().getPlayer().getLoopEHeader();
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGFileUtils.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGFileUtils.java
deleted file mode 100644
index 662df1e..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGFileUtils.java
+++ /dev/null
@@ -1,235 +0,0 @@
-package org.herac.tuxguitar.gui.util;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
-import java.net.URLDecoder;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Vector;
-
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.ImageData;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.util.TGClassLoader;
-import org.herac.tuxguitar.util.TGLibraryLoader;
-import org.herac.tuxguitar.util.TGVersion;
-
-public class TGFileUtils {
-	
-	private static final String TG_CONFIG_PATH = "tuxguitar.config.path";
-	private static final String TG_SHARE_PATH = "tuxguitar.share.path";
-	private static final String TG_CLASS_PATH = "tuxguitar.class.path";
-	private static final String TG_LIBRARY_PATH = "tuxguitar.library.path";
-	private static final String TG_LIBRARY_PREFIX = "tuxguitar.library.prefix";
-	private static final String TG_LIBRARY_EXTENSION = "tuxguitar.library.extension";
-	
-	public static final String PATH_USER_CONFIG = getUserConfigDir();
-	public static final String PATH_USER_PLUGINS_CONFIG = getUserPluginsConfigDir();
-	public static final String[] TG_STATIC_SHARED_PATHS = getStaticSharedPaths();
-	
-	public static InputStream getResourceAsStream(String resource) {
-		try {
-			if(TG_STATIC_SHARED_PATHS != null){
-				for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){
-					File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource);
-					if( file.exists() ){
-						return new FileInputStream( file );
-					}
-				}
-			}
-			return TGClassLoader.instance().getClassLoader().getResourceAsStream(resource);
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-	
-	public static URL getResourceUrl(String resource) {
-		try {
-			if(TG_STATIC_SHARED_PATHS != null){
-				for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){
-					File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource);
-					if( file.exists() ){
-						return file.toURI().toURL();
-					}
-				}
-			}
-			return TGClassLoader.instance().getClassLoader().getResource(resource);
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-	
-	public static Enumeration getResourceUrls(String resource) {
-		try {
-			Vector vector = new Vector();
-			if(TG_STATIC_SHARED_PATHS != null){
-				for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){
-					File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource);
-					if( file.exists() ){
-						vector.addElement( file.toURI().toURL() );
-					}
-				}
-			}
-			Enumeration resources = TGClassLoader.instance().getClassLoader().getResources(resource);
-			while( resources.hasMoreElements() ){
-				URL url = (URL)resources.nextElement();
-				if( !vector.contains(url) ){
-					vector.addElement( url );
-				}
-			}
-			return vector.elements();
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-	
-	private static String getResourcePath(String resource) {
-		try {
-			if(TG_STATIC_SHARED_PATHS != null){
-				for( int i = 0; i < TG_STATIC_SHARED_PATHS.length ; i ++ ){
-					File file = new File(TG_STATIC_SHARED_PATHS[i] + File.separator + resource);
-					if( file.exists() ){
-						return file.getAbsolutePath() + File.separator;
-					}
-				}
-			}
-			URL url = TGClassLoader.instance().getClassLoader().getResource(resource);
-			if(url != null){
-				return new File(URLDecoder.decode(url.getPath(), "UTF-8")).getAbsolutePath() + File.separator;
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-	
-	public static void loadClasspath(){
-		String plugins = getResourcePath("plugins");
-		if(plugins != null){
-			TGClassLoader.instance().addPaths(new File(plugins));
-		}
-		
-		String custompath = System.getProperty(TG_CLASS_PATH);
-		if(custompath != null){
-			String[] paths = custompath.split(File.pathSeparator);
-			for(int i = 0; i < paths.length; i++){
-				TGClassLoader.instance().addPaths(new File(paths[i]));
-			}
-		}
-	}
-	
-	public static void loadLibraries(){
-		String libraryPath = System.getProperty(TG_LIBRARY_PATH);
-		if(libraryPath != null){
-			String[] libraryPaths = libraryPath.split(File.pathSeparator);
-			String libraryPrefix = System.getProperty(TG_LIBRARY_PREFIX);
-			String libraryExtension = System.getProperty(TG_LIBRARY_EXTENSION);
-			for(int i = 0; i < libraryPaths.length; i++){
-				TGLibraryLoader.instance().loadLibraries(new File(libraryPaths[i]),libraryPrefix,libraryExtension);
-			}
-		}
-	}
-	
-	public static String[] getFileNames( String resource ){
-		try {
-			String path = getResourcePath(resource);
-			if( path != null ){
-				File file = new File( path );
-				if(file.exists() && file.isDirectory()){
-					return file.list();
-				}
-			}
-			InputStream stream = getResourceAsStream(resource + "/list.properties" );
-			if( stream != null ){
-				BufferedReader reader = new BufferedReader( new InputStreamReader(stream) );
-				List fileNameList = new ArrayList();
-				String fileName = null;
-				while( (fileName = reader.readLine()) != null ){
-					fileNameList.add( fileName );
-				}
-				String[] fileNames = new String[ fileNameList.size() ];
-				for (int i = 0 ; i < fileNames.length ; i ++ ){
-					fileNames[ i ] = (String)fileNameList.get( i );
-				}
-				return fileNames;
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return null;
-	}
-	
-	public static Image loadImage(String name){
-		return loadImage(TuxGuitar.instance().getConfig().getStringConfigValue(TGConfigKeys.SKIN),name);
-	}
-	
-	public static Image loadImage(String skin,String name){
-		try{
-			InputStream stream = getResourceAsStream("skins/" + skin + "/" + name);
-			if(stream != null){			
-				return new Image(TuxGuitar.instance().getDisplay(),new ImageData(stream));
-			}
-			System.err.println(name + ": not found");
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return new Image(TuxGuitar.instance().getDisplay(),16,16);
-	}
-	
-	public static boolean isLocalFile(URL url){
-		try {
-			if(url.getProtocol().equals( new File(url.getFile()).toURI().toURL().getProtocol() ) ){
-				return true;
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-		return false;
-	}
-	
-	private static String getUserConfigDir(){
-		// Look for the system property
-		String configPath = System.getProperty(TG_CONFIG_PATH);
-		
-		// Default System User Home
-		if(configPath == null){
-			configPath = ( (System.getProperty("user.home") + File.separator + ".tuxguitar-" + TGVersion.CURRENT.getVersion()) ) ;
-		}
-		
-		// Check if the path exists
-		File file = new File(configPath);
-		if(!file.exists()){
-			file.mkdirs();
-		}
-		return configPath;
-	}
-	
-	private static String getUserPluginsConfigDir(){
-		String configPluginsPath = (getUserConfigDir() + File.separator + "plugins");
-		
-		//Check if the path exists
-		File file = new File(configPluginsPath);
-		if(!file.exists()){
-			file.mkdirs();
-		}
-		
-		return configPluginsPath;
-	}
-	
-	private static String[] getStaticSharedPaths(){
-		String staticSharedPaths = System.getProperty(TG_SHARE_PATH);
-		if( staticSharedPaths != null ){
-			return staticSharedPaths.split(File.pathSeparator);
-		}
-		return null;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGMusicKeyUtils.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGMusicKeyUtils.java
deleted file mode 100644
index 22df708..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGMusicKeyUtils.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.herac.tuxguitar.gui.util;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.language.LanguageLoader;
-
-public class TGMusicKeyUtils {
-	
-	public static final String PREFIX_CHORD = "chord";
-	
-	public static final String PREFIX_SCALE = "scale";
-	
-	public static final String PREFIX_TUNING = "tuning";
-	
-	public static final String PREFIX_FRETBOARD = "fretboard";
-	
-	public static final String PREFIX_MATRIX = "matrix";
-	
-	private static final String[][] DEFAULT_KEY_NAMES = new String[][]{
-		{"C","C#","Cb"},
-		{"D","D#","Db"},
-		{"E","E#","Eb"},
-		{"F","F#","Fb"},
-		{"G","G#","Gb"},
-		{"A","A#","Ab"},
-		{"B","B#","Bb"}
-	};
-	
-	public static String[] getSharpKeyNames(String prefix){
-		return new TGMusicKeyNames(true,prefix).getNames();
-	}
-	
-	public static String[] getFlatKeyNames(String prefix){
-		return new TGMusicKeyNames(false,prefix).getNames();
-	}
-	
-	protected static void loadKeyNames(String[] names,String prefix,boolean sharp){
-		if(sharp){
-			loadSharpKeyNames(names, prefix);
-		}else{
-			loadFlatKeyNames(names, prefix);
-		}
-	}
-	
-	private static void loadSharpKeyNames(String[] names,String prefix){
-		names[0] = getName(prefix,0,0);
-		names[1] = getName(prefix,0,1);
-		names[2] = getName(prefix,1,0);
-		names[3] = getName(prefix,1,1);
-		names[4] = getName(prefix,2,0);
-		names[5] = getName(prefix,3,0);
-		names[6] = getName(prefix,3,1);
-		names[7] = getName(prefix,4,0);
-		names[8] = getName(prefix,4,1);
-		names[9] = getName(prefix,5,0);
-		names[10] = getName(prefix,5,1);
-		names[11] = getName(prefix,6,0);
-	}
-	
-	private static void loadFlatKeyNames(String[] names,String prefix){
-		names[0] = getName(prefix,0,0);
-		names[1] = getName(prefix,1,2);
-		names[2] = getName(prefix,1,0);
-		names[3] = getName(prefix,2,2);
-		names[4] = getName(prefix,2,0);
-		names[5] = getName(prefix,3,0);
-		names[6] = getName(prefix,4,2);
-		names[7] = getName(prefix,4,0);
-		names[8] = getName(prefix,5,2);
-		names[9] = getName(prefix,5,0);
-		names[10] = getName(prefix,6,2);
-		names[11] = getName(prefix,6,0);
-	}
-	
-	private static String getName(String prefix,int key,int signature){
-		String resource = ("key." + prefix + "." + key + "." + signature);
-		return TuxGuitar.instance().getLanguageManager().getProperty(resource,DEFAULT_KEY_NAMES[key][signature]);
-	}
-}
-
-class TGMusicKeyNames implements LanguageLoader{
-	
-	private boolean sharp;
-	private String prefix;
-	private String[] names;
-	
-	public TGMusicKeyNames(boolean sharp,String prefix){
-		this.sharp = sharp;
-		this.prefix = prefix;
-		this.names = new String[12];
-		this.loadProperties();
-		
-		TuxGuitar.instance().getLanguageManager().addLoader(this);
-	}
-	
-	public String[] getNames(){
-		return this.names;
-	}
-	
-	public void loadProperties() {
-		TGMusicKeyUtils.loadKeyNames(this.names, this.prefix, this.sharp);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGSplash.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGSplash.java
deleted file mode 100644
index 7edec4f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/TGSplash.java
+++ /dev/null
@@ -1,70 +0,0 @@
-package org.herac.tuxguitar.gui.util;
-
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.FillLayout;
-import org.eclipse.swt.widgets.Shell;
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.editors.TGPainter;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-
-public class TGSplash {
-	
-	private static TGSplash instance;
-	
-	private Shell shell;
-	
-	private TGSplash(){
-		super();
-	}
-	
-	public static TGSplash instance(){
-		if(instance == null){
-			instance = new TGSplash();
-		}
-		return instance;
-	}
-	
-	public void init() {
-		if(TuxGuitar.instance().getConfig().getBooleanConfigValue(TGConfigKeys.SHOW_SPLASH)){
-			final Image image = TuxGuitar.instance().getIconManager().getAppSplash();
-			
-			this.shell = new Shell(TuxGuitar.instance().getDisplay(), SWT.NO_TRIM | SWT.NO_BACKGROUND);
-			this.shell.setLayout(new FillLayout());
-			this.shell.setBounds(getBounds(image));
-			this.shell.setImage(TuxGuitar.instance().getIconManager().getAppIcon());
-			this.shell.setText(TuxGuitar.APPLICATION_NAME);
-			this.shell.addPaintListener(new PaintListener() {
-				public void paintControl(PaintEvent e) {
-					TGPainter painter = new TGPainter(e.gc);
-					painter.drawImage(image, 0, 0);
-				}
-			});
-			this.shell.open();
-			this.shell.redraw();
-			this.shell.update();
-		}
-	}
-	
-	public void finish(){
-		if(this.shell != null && !this.shell.isDisposed()){
-			this.shell.close();
-			this.shell.dispose();
-		}
-		instance = null;
-	}
-	
-	private Rectangle getBounds(Image image){
-		Rectangle iBounds = image.getBounds();
-		Rectangle mBounds = this.shell.getMonitor().getClientArea();
-		int x = ( ((mBounds.x + mBounds.width) / 2) - (iBounds.width / 2) );
-		int y = ( ((mBounds.y + mBounds.height) / 2) - (iBounds.height / 2) );
-		int width = iBounds.width;
-		int height = iBounds.height;
-		return new Rectangle( x , y , width , height);
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/gui/util/WindowTitleUtil.java b/TuxGuitar/src/org/herac/tuxguitar/gui/util/WindowTitleUtil.java
deleted file mode 100644
index 9c0fa0c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/gui/util/WindowTitleUtil.java
+++ /dev/null
@@ -1,81 +0,0 @@
-package org.herac.tuxguitar.gui.util;
-
-import org.herac.tuxguitar.gui.TuxGuitar;
-import org.herac.tuxguitar.gui.system.config.TGConfigKeys;
-import org.herac.tuxguitar.util.TGVersion;
-
-public class WindowTitleUtil {
-	private static final String VAR_START = "${";
-	private static final String VAR_END = "}";
-	
-	public static final String VAR_APP_NAME = "appname";
-	public static final String VAR_APP_VERSION = "appversion";
-	public static final String VAR_FILE_NAME = "filename";
-	public static final String VAR_FILE_PATH = "filepath";
-	public static final String VAR_SONG_NAME = "songname";
-	public static final String VAR_SONG_AUTHOR = "songauthor";
-	public static final String VAR_SONG_ALBUM = "songalbum";
-	public static final String VAR_SONG_ARTIST = "songartist";
-	
-	public static String parseTitle(){
-		String title = parseString(TuxGuitar.instance().getConfig().getStringConfigValue(TGConfigKeys.WINDOW_TITLE));
-		return ((title == null)?TuxGuitar.APPLICATION_NAME:title);
-	}
-	
-	private static String parseString(String src){
-		try{
-			if(src != null){
-				String result = new String();
-				for(int pos = 0; pos < src.length(); pos ++){
-					int startIndex = src.indexOf(VAR_START, pos );
-					int endIndex = startIndex;
-					if(startIndex >= 0){
-						endIndex = src.indexOf(VAR_END,(startIndex +  VAR_START.length()));
-					}
-					if((startIndex >= 0) && endIndex > (startIndex + VAR_START.length()) ){
-						if(startIndex > pos){
-							result += src.substring(pos,startIndex );
-						}
-						String var = src.substring(startIndex,(endIndex + 1));
-						result += parseVar(var);
-						pos = endIndex;
-					}else{
-						result += src.substring(pos,src.length() );
-						break;
-					}
-				}
-				return result;
-			}
-		}catch(Exception e){
-			e.printStackTrace();
-		}
-		return null;
-	}
-	
-	private static String parseVar(String var){
-		String varName = var.substring((VAR_START.length()),(var.length() - 1));
-		String varValue = var;
-		if(varName.equals(VAR_APP_NAME)){
-			varValue = TuxGuitar.APPLICATION_NAME;
-		}else if(varName.equals(VAR_APP_VERSION)){
-			varValue = TGVersion.CURRENT.getVersion();
-		}else if(varName.equals(VAR_FILE_NAME)){
-			varValue = TuxGuitar.instance().getFileHistory().getCurrentFileName(FileChooser.DEFAULT_SAVE_FILENAME);
-		}else if(varName.equals(VAR_FILE_PATH)){
-			varValue = TuxGuitar.instance().getFileHistory().getCurrentFilePath();
-		}else if(varName.equals(VAR_SONG_NAME)){
-			varValue = TuxGuitar.instance().getSongManager().getSong().getName();
-		}else if(varName.equals(VAR_SONG_AUTHOR)){
-			varValue = TuxGuitar.instance().getSongManager().getSong().getAuthor();
-		}else if(varName.equals(VAR_SONG_ALBUM)){
-			varValue = TuxGuitar.instance().getSongManager().getSong().getAlbum();
-		}else if(varName.equals(VAR_SONG_ARTIST)){
-			varValue = TuxGuitar.instance().getSongManager().getSong().getArtist();
-		}
-		return varValue;
-	}
-	
-	public static String getVar(String varName){
-		return (VAR_START + varName + VAR_END);
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormatManager.java b/TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormatManager.java
deleted file mode 100644
index 525e9f3..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGFileFormatManager.java
+++ /dev/null
@@ -1,154 +0,0 @@
-package org.herac.tuxguitar.io.base;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.io.tg.TGInputStream;
-import org.herac.tuxguitar.io.tg.TGOutputStream;
-import org.herac.tuxguitar.io.tg.TGStream;
-
-public class TGFileFormatManager {
-	
-	public static final String DEFAULT_EXTENSION = TGStream.TG_FORMAT_EXTENSION;
-	
-	private static TGFileFormatManager instance;
-	
-	private TGSongLoader loader;
-	private TGSongWriter writer;
-	private List inputStreams;
-	private List outputStreams;
-	private List exporters;
-	private List importers;
-	
-	private TGFileFormatManager(){
-		this.loader = new TGSongLoader();
-		this.writer = new TGSongWriter();
-		this.inputStreams = new ArrayList();
-		this.outputStreams = new ArrayList();
-		this.exporters = new ArrayList();
-		this.importers = new ArrayList();
-		this.addDefaultStreams();
-	}
-	
-	public static TGFileFormatManager instance(){
-		if(instance == null){
-			instance = new TGFileFormatManager();
-		}
-		return instance;
-	}
-	
-	public TGSongLoader getLoader(){
-		return this.loader;
-	}
-	
-	public TGSongWriter getWriter(){
-		return this.writer;
-	}
-	
-	public void addInputStream(TGInputStreamBase stream){
-		this.inputStreams.add(stream);
-	}
-	
-	public void removeInputStream(TGInputStreamBase stream){
-		this.inputStreams.remove(stream);
-	}
-	
-	public int countInputStreams(){
-		return this.inputStreams.size();
-	}
-	
-	public void addOutputStream(TGOutputStreamBase stream){
-		this.outputStreams.add(stream);
-	}
-	
-	public void removeOutputStream(TGOutputStreamBase stream){
-		this.outputStreams.remove(stream);
-	}
-	
-	public int countOutputStreams(){
-		return this.outputStreams.size();
-	}
-	
-	public void addImporter(TGRawImporter importer){
-		this.importers.add(importer);
-	}
-	
-	public void removeImporter(TGRawImporter importer){
-		this.importers.remove(importer);
-	}
-	
-	public int countImporters(){
-		return this.importers.size();
-	}
-	
-	public void addExporter(TGRawExporter exporter){
-		this.exporters.add(exporter);
-	}
-	
-	public void removeExporter(TGRawExporter exporter){
-		this.exporters.remove(exporter);
-	}
-	
-	public int countExporters(){
-		return this.exporters.size();
-	}
-	
-	public Iterator getInputStreams(){
-		return this.inputStreams.iterator();
-	}
-	
-	public Iterator getOutputStreams(){
-		return this.outputStreams.iterator();
-	}
-	
-	public Iterator getImporters(){
-		return this.importers.iterator();
-	}
-	
-	public Iterator getExporters(){
-		return this.exporters.iterator();
-	}
-	
-	public List getInputFormats(){
-		List formats = new ArrayList();
-		Iterator it = getInputStreams();
-		while(it.hasNext()){
-			TGInputStreamBase stream = (TGInputStreamBase)it.next();
-			TGFileFormat format = stream.getFileFormat();
-			if(!existsFormat(format, formats)){
-				formats.add(format);
-			}
-		}
-		return formats;
-	}
-	
-	public List getOutputFormats(){
-		List formats = new ArrayList();
-		Iterator it = getOutputStreams();
-		while(it.hasNext()){
-			TGOutputStreamBase stream = (TGOutputStreamBase)it.next();
-			TGFileFormat format = stream.getFileFormat();
-			if(!existsFormat(format, formats)){
-				formats.add(format);
-			}
-		}
-		return formats;
-	}
-	
-	private boolean existsFormat(TGFileFormat format,List formats){
-		Iterator it = formats.iterator();
-		while(it.hasNext()){
-			TGFileFormat comparator = (TGFileFormat)it.next();
-			if(comparator.getName().equals(format.getName()) || comparator.getSupportedFormats().equals(format.getSupportedFormats())){
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	private void addDefaultStreams(){
-		this.addInputStream(new TGInputStream());
-		this.addOutputStream(new TGOutputStream());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGInputStreamBase.java b/TuxGuitar/src/org/herac/tuxguitar/io/base/TGInputStreamBase.java
deleted file mode 100644
index 67c5a14..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGInputStreamBase.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.herac.tuxguitar.io.base;
-
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGSong;
-
-public interface TGInputStreamBase {
-	
-	public void init(TGFactory factory,InputStream stream);
-	
-	public boolean isSupportedVersion();
-	
-	public TGFileFormat getFileFormat();
-	
-	public TGSong readSong() throws TGFileFormatException,IOException;
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGOutputStreamBase.java b/TuxGuitar/src/org/herac/tuxguitar/io/base/TGOutputStreamBase.java
deleted file mode 100644
index 2d84dc4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/io/base/TGOutputStreamBase.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package org.herac.tuxguitar.io.base;
-
-import java.io.IOException;
-import java.io.OutputStream;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGSong;
-
-public interface TGOutputStreamBase {
-	
-	public void init(TGFactory factory,OutputStream stream);
-	
-	public boolean isSupportedExtension(String extension);
-	
-	public TGFileFormat getFileFormat();
-	
-	public void writeSong(TGSong song) throws TGFileFormatException,IOException;
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGInputStream.java b/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGInputStream.java
deleted file mode 100644
index 59b6061..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGInputStream.java
+++ /dev/null
@@ -1,763 +0,0 @@
-/*
- * Created on 16-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.io.tg;
-
-import java.io.DataInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-import org.herac.tuxguitar.io.base.TGFileFormat;
-import org.herac.tuxguitar.io.base.TGFileFormatException;
-import org.herac.tuxguitar.io.base.TGInputStreamBase;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGColor;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGLyric;
-import org.herac.tuxguitar.song.models.TGMarker;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGNoteEffect;
-import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGStroke;
-import org.herac.tuxguitar.song.models.TGTempo;
-import org.herac.tuxguitar.song.models.TGText;
-import org.herac.tuxguitar.song.models.TGTimeSignature;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGDivisionType;
-import org.herac.tuxguitar.song.models.TGVoice;
-import org.herac.tuxguitar.song.models.effects.TGEffectBend;
-import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
-import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
-import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGInputStream extends TGStream implements TGInputStreamBase{
-	
-	private DataInputStream dataInputStream;
-	private String version;
-	private TGFactory factory;
-	
-	public TGInputStream() {
-		super();
-	}
-	
-	public void init(TGFactory factory,InputStream stream) {
-		this.factory = factory;
-		this.dataInputStream = new DataInputStream(stream);
-		this.version = null;
-	}
-	
-	public TGFileFormat getFileFormat(){
-		return new TGFileFormat("TuxGuitar","*.tg");
-	}
-	
-	public boolean isSupportedVersion(String version){
-		return (version.equals(TG_FORMAT_VERSION));
-	}
-	
-	public boolean isSupportedVersion(){
-		try{
-			readVersion();
-			return isSupportedVersion(this.version);
-		}catch(Throwable throwable){
-			return false;
-		}
-	}
-	
-	public TGSong readSong() throws TGFileFormatException{
-		try {
-			if(this.isSupportedVersion()){
-				TGSong song = this.read();
-				this.dataInputStream.close();
-				return song;
-			}
-			throw new TGFileFormatException("Unsopported Version");
-		} catch (Throwable throwable) {
-			throw new TGFileFormatException(throwable);
-		}
-	}
-	
-	private void readVersion(){
-		if(this.version == null){
-			this.version = readUnsignedByteString();
-		}
-	}
-	
-	private TGSong read(){
-		TGSong song = this.factory.newSong();
-		
-		//leo el nombre
-		song.setName(readUnsignedByteString());
-		
-		//leo el artista
-		song.setArtist(readUnsignedByteString());
-		
-		//leo el album
-		song.setAlbum(readUnsignedByteString());
-		
-		//leo el autor
-		song.setAuthor(readUnsignedByteString());
-		
-		//leo la fecha
-		song.setDate(readUnsignedByteString());
-		
-		//leo el copyright
-		song.setCopyright(readUnsignedByteString());
-		
-		//leo el creador
-		song.setWriter(readUnsignedByteString());
-		
-		//leo el transcriptor
-		song.setTranscriber(readUnsignedByteString());
-		
-		//leo los comentarios
-		song.setComments(readIntegerString());
-		
-		//leo la cantidad de measure headers
-		int headerCount = readShort();
-		
-		//leo las pistas
-		TGMeasureHeader lastHeader = null;
-		long headerStart = TGDuration.QUARTER_TIME;
-		for(int i = 0;i < headerCount;i++){
-			TGMeasureHeader header = readMeasureHeader(i + 1,headerStart,lastHeader);
-			song.addMeasureHeader(header);
-			headerStart += header.getLength();
-			lastHeader = header;
-		}
-		
-		//leo la cantidad de pistas
-		int trackCount = readByte();
-		
-		//leo las pistas
-		for(int i = 0;i < trackCount;i++){
-			song.addTrack(readTrack(i + 1,song));
-		}
-		
-		return song;
-	}
-	
-	private TGTrack readTrack(int number,TGSong song){
-		//header
-		int header = readHeader();
-		
-		TGTrack track = this.factory.newTrack();
-		
-		track.setNumber(number);
-		
-		//leo el nombre
-		track.setName(readUnsignedByteString());
-		
-		//leo el solo
-		track.setSolo((header & TRACK_SOLO) != 0);
-		
-		//leo el mute
-		track.setMute((header & TRACK_MUTE) != 0);
-		
-		//leo el canal
-		readChannel(track.getChannel());
-		
-		//leo la cantidad de compases
-		int measureCount = song.countMeasureHeaders();
-		
-		//leo los compases
-		TGMeasure lastMeasure = null;
-		for(int i = 0;i < measureCount;i++){
-			TGMeasure measure = readMeasure(song.getMeasureHeader(i),lastMeasure);
-			track.addMeasure(measure);
-			lastMeasure = measure;
-		}
-		
-		//leo la cantidad de cuerdas
-		int stringCount = readByte();
-		
-		//leo las cuerdas
-		for(int i = 0;i < stringCount;i++){
-			track.getStrings().add(readInstrumentString(i + 1));
-		}
-		
-		//leo el offset
-		track.setOffset(TGTrack.MIN_OFFSET + readByte());
-		
-		//leo el color
-		readRGBColor(track.getColor());
-		
-		//leo el lyrics
-		if(((header & TRACK_LYRICS) != 0)){
-			readLyrics(track.getLyrics());
-		}
-		
-		return track;
-	}
-	
-	private TGMeasureHeader readMeasureHeader(int number,long start,TGMeasureHeader lastMeasureHeader){
-		int header = readHeader();
-		
-		TGMeasureHeader measureHeader = this.factory.newHeader();
-		measureHeader.setNumber(number);
-		measureHeader.setStart(start);
-		
-		//leo el time signature
-		if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){
-			readTimeSignature(measureHeader.getTimeSignature());
-		}else if(lastMeasureHeader != null){
-			lastMeasureHeader.getTimeSignature().copy(measureHeader.getTimeSignature());
-		}
-		
-		//leo el tempo
-		if(((header & MEASURE_HEADER_TEMPO) != 0)){
-			readTempo(measureHeader.getTempo());
-		}else if(lastMeasureHeader != null){
-			lastMeasureHeader.getTempo().copy(measureHeader.getTempo());
-		}
-		
-		//leo el comienzo de la repeticion
-		measureHeader.setRepeatOpen((header & MEASURE_HEADER_REPEAT_OPEN) != 0);
-		
-		//leo el numero de repeticiones
-		if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){
-			 measureHeader.setRepeatClose(readShort());
-		}
-		
-		//leo los finales alternativos
-		if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){
-			 measureHeader.setRepeatAlternative(readByte());
-		}
-		
-		//leo el marker
-		if(((header & MEASURE_HEADER_MARKER) != 0)){
-			measureHeader.setMarker(readMarker(number));
-		}
-		
-		measureHeader.setTripletFeel((lastMeasureHeader != null)?lastMeasureHeader.getTripletFeel():TGMeasureHeader.TRIPLET_FEEL_NONE);
-		if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){
-			measureHeader.setTripletFeel(readByte());
-		}
-		
-		return measureHeader;
-	}
-	
-	private TGMeasure readMeasure(TGMeasureHeader measureHeader,TGMeasure lastMeasure){
-		int header = readHeader();
-		
-		TGMeasure measure = this.factory.newMeasure(measureHeader);
-		TGBeatData data = new TGBeatData(measure);
-		
-		//leo la los beats
-		readBeats(measure, data);
-		
-		//leo la clave
-		measure.setClef( (lastMeasure == null)?TGMeasure.CLEF_TREBLE:lastMeasure.getClef());
-		if(((header & MEASURE_CLEF) != 0)){
-			measure.setClef(readByte());
-		}
-		
-		//leo el key signature
-		measure.setKeySignature((lastMeasure == null)?0:lastMeasure.getKeySignature());
-		if(((header & MEASURE_KEYSIGNATURE) != 0)){
-			measure.setKeySignature(readByte());
-		}
-		
-		return measure;
-	}
-	
-	private void readChannel(TGChannel channel){
-		//leo el canal
-		channel.setChannel(readByte());
-		
-		//leo el canal de efectos
-		channel.setEffectChannel(readByte());
-		
-		//leo el instrumento
-		channel.setInstrument(readByte());
-		
-		//leo el volumen
-		channel.setVolume(readByte());
-		
-		//leo el balance
-		channel.setBalance(readByte());
-		
-		//leo el chorus
-		channel.setChorus(readByte());
-		
-		//leo el reverb
-		channel.setReverb(readByte());
-		
-		//leo el phaser
-		channel.setPhaser(readByte());
-		
-		//leo el tremolo
-		channel.setTremolo(readByte());
-	}
-	
-	private void readBeats(TGMeasure measure,TGBeatData data){
-		int header = BEAT_HAS_NEXT;
-		while(((header & BEAT_HAS_NEXT) != 0)){
-			header = readHeader();
-			readBeat(header, measure, data);
-		}
-	}
-	
-	private void readBeat(int header, TGMeasure measure,TGBeatData data){
-		TGBeat beat = this.factory.newBeat();
-		
-		beat.setStart(data.getCurrentStart());
-		
-		readVoices(header, beat, data);
-		
-		//leo el stroke
-		if(((header & BEAT_HAS_STROKE) != 0)){
-			readStroke(beat.getStroke());
-		}
-		
-		//leo el acorde
-		if(((header & BEAT_HAS_CHORD) != 0)){
-			readChord(beat);
-		}
-		
-		//leo el texto
-		if(((header & BEAT_HAS_TEXT) != 0)){
-			readText(beat);
-		}
-		
-		measure.addBeat(beat);
-	}
-	
-	private void readVoices(int header, TGBeat beat, TGBeatData data){
-		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
-			int shift = (i * 2 );
-			
-			beat.getVoice(i).setEmpty(true);
-			
-			if(((header & (BEAT_HAS_VOICE << shift)) != 0)){
-				if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){
-					data.getVoice(i).setFlags( readHeader() );
-				}
-				
-				int flags = data.getVoice(i).getFlags();
-				
-				//leo la duracion
-				if(((flags & VOICE_NEXT_DURATION) != 0)){
-					readDuration(data.getVoice(i).getDuration());
-				}
-				
-				//leo las notas
-				if(((flags & VOICE_HAS_NOTES) != 0)){
-					readNotes(beat.getVoice(i), data);
-				}
-				
-				//leo la direccion
-				if(((flags & VOICE_DIRECTION_UP) != 0)){
-					beat.getVoice(i).setDirection( TGVoice.DIRECTION_UP );
-				}
-				else if(((flags & VOICE_DIRECTION_DOWN) != 0)){
-					beat.getVoice(i).setDirection( TGVoice.DIRECTION_DOWN );
-				}
-				data.getVoice(i).getDuration().copy(beat.getVoice(i).getDuration());
-				data.getVoice(i).setStart(data.getVoice(i).getStart() + beat.getVoice(i).getDuration().getTime());
-				
-				beat.getVoice(i).setEmpty(false);
-			}
-		}
-	}
-	
-	private void readNotes(TGVoice voice,TGBeatData data){
-		int header = NOTE_HAS_NEXT;
-		while(((header & NOTE_HAS_NEXT) != 0)){
-			header = readHeader();
-			readNote(header, voice, data);
-		}
-	}
-	
-	private void readNote(int header,TGVoice voice,TGBeatData data){
-		TGNote note = this.factory.newNote();
-		
-		//leo el valor
-		note.setValue(readByte());
-		
-		//leo la cuerda
-		note.setString(readByte());
-		
-		//leo la ligadura
-		note.setTiedNote((header & NOTE_TIED) != 0);
-		
-		//leo el velocity
-		if(((header & NOTE_VELOCITY) != 0)){
-			data.getVoice(voice.getIndex()).setVelocity(readByte());
-		}
-		note.setVelocity(data.getVoice(voice.getIndex()).getVelocity());
-		
-		//leo los efectos
-		if(((header & NOTE_EFFECT) != 0)){
-			readNoteEffect(note.getEffect());
-		}
-		
-		voice.addNote(note);
-	}
-	
-	private void readChord(TGBeat beat){
-		TGChord chord = this.factory.newChord(readByte());
-		
-		//leo el nombre
-		chord.setName( readUnsignedByteString() );
-		
-		//leo el primer fret
-		chord.setFirstFret(readByte());
-		
-		//leo las cuerdas
-		for(int string = 0; string < chord.countStrings(); string ++){
-			chord.addFretValue(string, readByte());
-		}
-		beat.setChord(chord);
-	}
-	
-	private void readText(TGBeat beat){
-		TGText text = this.factory.newText();
-		
-		//leo el texto
-		text.setValue(readUnsignedByteString());
-		
-		beat.setText(text);
-	}
-	
-	private TGString readInstrumentString(int number){
-		TGString string = this.factory.newString();
-		
-		string.setNumber(number);
-		
-		//leo el valor
-		string.setValue(readByte());
-		
-		return string;
-	}
-	
-	private void readTempo(TGTempo tempo){
-		//leo el valor
-		tempo.setValue(readShort());
-	}
-	
-	private void readTimeSignature(TGTimeSignature timeSignature){
-		//leo el numerador
-		timeSignature.setNumerator(readByte());
-		
-		//leo el denominador
-		readDuration(timeSignature.getDenominator());
-	}
-	
-	private void readDuration(TGDuration duration){
-		int header = readHeader();
-		
-		// leo el puntillo
-		duration.setDotted((header & DURATION_DOTTED) != 0);
-		
-		//leo el doble puntillo
-		duration.setDoubleDotted((header & DURATION_DOUBLE_DOTTED) != 0);
-		
-		//leo el valor
-		duration.setValue(readByte());
-		
-		//leo el tipo de divisiones
-		if(((header & DURATION_NO_TUPLET) != 0)){
-			readDivisionType(duration.getDivision());
-		}
-		else{
-			TGDivisionType.NORMAL.copy(duration.getDivision());
-		}
-	}
-	
-	private void readDivisionType(TGDivisionType divisionType){
-		//leo los enters
-		divisionType.setEnters(readByte());
-		
-		//leo los tiempos
-		divisionType.setTimes(readByte());
-	}
-	
-	private void readStroke(TGStroke stroke){
-		//leo la direccion
-		stroke.setDirection( readByte() );
-		
-		//leo el valor
-		stroke.setValue( readByte() );
-	}
-	
-	private void readNoteEffect(TGNoteEffect effect){
-		int header = readHeader(3);
-		
-		//leo el bend
-		if(((header & EFFECT_BEND) != 0)){
-			effect.setBend(readBendEffect());
-		}
-		
-		//leo el tremolo bar
-		if(((header & EFFECT_TREMOLO_BAR) != 0)){
-			effect.setTremoloBar(readTremoloBarEffect());
-		}
-		
-		//leo el harmonic
-		if(((header & EFFECT_HARMONIC) != 0)){
-			effect.setHarmonic(readHarmonicEffect());
-		}
-		
-		//leo el grace
-		if(((header & EFFECT_GRACE) != 0)){
-			effect.setGrace(readGraceEffect());
-		}
-		
-		//leo el trill
-		if(((header & EFFECT_TRILL) != 0)){
-			effect.setTrill(readTrillEffect());
-		}
-		
-		//leo el tremolo picking
-		if(((header & EFFECT_TREMOLO_PICKING) != 0)){
-			effect.setTremoloPicking(readTremoloPickingEffect());
-		}
-		
-		//vibrato
-		effect.setVibrato(((header & EFFECT_VIBRATO) != 0));
-		
-		//dead note
-		effect.setDeadNote(((header & EFFECT_DEAD) != 0));
-		
-		//slide
-		effect.setSlide(((header & EFFECT_SLIDE) != 0));
-		
-		//hammer-on/pull-off
-		effect.setHammer(((header & EFFECT_HAMMER) != 0));
-		
-		//ghost note
-		effect.setGhostNote(((header & EFFECT_GHOST) != 0));
-		
-		//accentuated note
-		effect.setAccentuatedNote(((header & EFFECT_ACCENTUATED) != 0));
-		
-		//heavy accentuated note
-		effect.setHeavyAccentuatedNote(((header & EFFECT_HEAVY_ACCENTUATED) != 0));
-		
-		//palm mute
-		effect.setPalmMute(((header & EFFECT_PALM_MUTE) != 0));
-		
-		//staccato
-		effect.setStaccato(((header & EFFECT_STACCATO) != 0));
-		
-		//tapping
-		effect.setTapping(((header & EFFECT_TAPPING) != 0));
-		
-		//slapping
-		effect.setSlapping(((header & EFFECT_SLAPPING) != 0));
-		
-		//popping
-		effect.setPopping(((header & EFFECT_POPPING) != 0));
-		
-		//fade in
-		effect.setFadeIn(((header & EFFECT_FADE_IN) != 0));
-	}
-	
-	private TGEffectBend readBendEffect(){
-		TGEffectBend bend = this.factory.newEffectBend();
-		
-		//leo la cantidad de puntos
-		int count = readByte();
-		
-		for(int i = 0;i < count;i++){
-			//leo la posicion
-			int position = readByte();
-			
-			//leo el valor
-			int value = readByte();
-			
-			//agrego el punto
-			bend.addPoint(position,value);
-		}
-		return bend;
-	}
-	
-	private TGEffectTremoloBar readTremoloBarEffect(){
-		TGEffectTremoloBar tremoloBar = this.factory.newEffectTremoloBar();
-		
-		//leo la cantidad de puntos
-		int count = readByte();
-		
-		for(int i = 0;i < count;i++){
-			//leo la posicion
-			int position = readByte();
-			
-			//leo el valor
-			int value =  (readByte() - TGEffectTremoloBar.MAX_VALUE_LENGTH);
-			
-			//agrego el punto
-			tremoloBar.addPoint(position,value);
-		}
-		return tremoloBar;
-	}
-	
-	private TGEffectHarmonic readHarmonicEffect(){
-		TGEffectHarmonic effect = this.factory.newEffectHarmonic();
-		
-		//leo el tipo
-		effect.setType(readByte());
-		
-		//leo la data
-		if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){
-			effect.setData(readByte());
-		}
-		return effect;
-	}
-	
-	private TGEffectGrace readGraceEffect(){
-		int header = readHeader();
-		
-		TGEffectGrace effect = this.factory.newEffectGrace();
-		
-		effect.setDead((header & GRACE_FLAG_DEAD) != 0) ;
-		
-		effect.setOnBeat((header & GRACE_FLAG_ON_BEAT) != 0) ;
-		
-		//leo el fret
-		effect.setFret(readByte());
-		
-		//leo la duracion
-		effect.setDuration(readByte());
-		
-		//leo el velocity
-		effect.setDynamic(readByte());
-		
-		//leo la transicion
-		effect.setTransition(readByte());
-		
-		return effect;
-	}
-	
-	private TGEffectTremoloPicking readTremoloPickingEffect(){
-		TGEffectTremoloPicking effect = this.factory.newEffectTremoloPicking();
-		
-		//leo la duracion
-		effect.getDuration().setValue(readByte());
-		
-		return effect;
-	}
-	
-	private TGEffectTrill readTrillEffect(){
-		TGEffectTrill effect = this.factory.newEffectTrill();
-		
-		//leo el fret
-		effect.setFret(readByte());
-		
-		//leo la duracion
-		effect.getDuration().setValue(readByte());
-		
-		return effect;
-	}
-	
-	private TGMarker readMarker(int measure){
-		TGMarker marker = this.factory.newMarker();
-		
-		marker.setMeasure(measure);
-		
-		//leo el titulo
-		marker.setTitle(readUnsignedByteString());
-		
-		//leo el color
-		readRGBColor(marker.getColor());
-		
-		return marker;
-	}
-	
-	private void readRGBColor(TGColor color){
-		//leo el RGB
-		color.setR((readByte() & 0xff));
-		color.setG((readByte() & 0xff));
-		color.setB((readByte() & 0xff));
-	}
-	
-	private void readLyrics(TGLyric lyrics){
-		//leo el compas de comienzo
-		lyrics.setFrom(readShort());
-		
-		//leo el texto
-		lyrics.setLyrics(readIntegerString());
-	}
-	
-	private byte readByte(){
-		try {
-			return (byte)this.dataInputStream.read();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return 0;
-	}
-	
-	private int readHeader(){
-		try {
-			return this.dataInputStream.read();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return 0;
-	}
-	
-	private int readHeader(int bCount){
-		int header = 0;
-		for(int i = bCount; i > 0; i --){
-			header += ( readHeader() << ( (8 * i) - 8 ) );
-		}
-		return header;
-	}
-	
-	private short readShort(){
-		try {
-			return this.dataInputStream.readShort();
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return 0;
-	}
-	
-	private String readUnsignedByteString(){
-		try {
-			return readString( (this.dataInputStream.read() & 0xFF ));
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-	
-	private String readIntegerString(){
-		try {
-			return readString(this.dataInputStream.readInt());
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-	
-	private String readString(int length){
-		try {
-			char[] chars = new char[length];
-			for(int i = 0;i < chars.length; i++){
-				chars[i] = this.dataInputStream.readChar();
-			}
-			return String.copyValueOf(chars);
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-		return null;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGOutputStream.java b/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGOutputStream.java
deleted file mode 100644
index 34c78e5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGOutputStream.java
+++ /dev/null
@@ -1,707 +0,0 @@
-/*
- * Created on 16-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.io.tg;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.util.Iterator;
-
-import org.herac.tuxguitar.io.base.TGFileFormat;
-import org.herac.tuxguitar.io.base.TGOutputStreamBase;
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGColor;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGLyric;
-import org.herac.tuxguitar.song.models.TGMarker;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGNoteEffect;
-import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGStroke;
-import org.herac.tuxguitar.song.models.TGTempo;
-import org.herac.tuxguitar.song.models.TGText;
-import org.herac.tuxguitar.song.models.TGTimeSignature;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGDivisionType;
-import org.herac.tuxguitar.song.models.TGVoice;
-import org.herac.tuxguitar.song.models.effects.TGEffectBend;
-import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
-import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
-import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGOutputStream extends TGStream implements TGOutputStreamBase{
-	
-	private DataOutputStream dataOutputStream;
-	
-	public boolean isSupportedExtension(String extension) {
-		return (extension.toLowerCase().equals(TG_FORMAT_EXTENSION));
-	}
-	
-	public void init(TGFactory factory,OutputStream stream) {
-		this.dataOutputStream = new DataOutputStream(stream);
-	}
-	
-	public TGFileFormat getFileFormat(){
-		return new TGFileFormat("TuxGuitar","*.tg");
-	}
-	
-	public void writeSong(TGSong song) throws IOException{
-		this.writeVersion();
-		this.write(song);
-		this.dataOutputStream.flush();
-		this.dataOutputStream.close();
-	}
-	
-	private void writeVersion(){
-		writeUnsignedByteString(TG_FORMAT_VERSION);
-	}
-	
-	private void write(TGSong song){
-		//escribo el nombre
-		writeUnsignedByteString(song.getName());
-		
-		//escribo el artista
-		writeUnsignedByteString(song.getArtist());
-		
-		//escribo el album
-		writeUnsignedByteString(song.getAlbum());
-		
-		//escribo el autor
-		writeUnsignedByteString(song.getAuthor());
-		
-		//escribo la fecha
-		writeUnsignedByteString(song.getDate());
-		
-		//escribo el copyright
-		writeUnsignedByteString(song.getCopyright());
-		
-		//escribo el creador
-		writeUnsignedByteString(song.getWriter());
-		
-		//escribo el transcriptor
-		writeUnsignedByteString(song.getTranscriber());
-		
-		//escribo los comentarios
-		writeIntegerString(song.getComments());
-		
-		//escribo la cantidad de measure headers 
-		writeShort((short)song.countMeasureHeaders());
-		
-		//escribo las pistas
-		TGMeasureHeader lastHeader = null;
-		Iterator headers = song.getMeasureHeaders();
-		while(headers.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)headers.next();
-			writeMeasureHeader(header,lastHeader);
-			lastHeader = header;
-		}
-		
-		//escribo la cantidad de pistas
-		writeByte(song.countTracks());
-		
-		//escribo las pistas
-		for(int i = 0;i < song.countTracks();i++){
-			TGTrack track = song.getTrack(i);
-			writeTrack(track);
-		}
-	}
-	
-	private void writeTrack(TGTrack track){
-		//header
-		int header = 0;
-		if (track.isSolo()) {
-			header |= TRACK_SOLO;
-		}
-		if (track.isMute()) {
-			header |= TRACK_MUTE;
-		}
-		if(!track.getLyrics().isEmpty()){
-			header |= TRACK_LYRICS;
-		}
-		writeHeader(header);
-		
-		//escribo el nombre
-		writeUnsignedByteString(track.getName());
-		
-		//escribo el canal
-		writeChannel(track.getChannel());
-		
-		//escribo los compases
-		TGMeasure lastMeasure = null;
-		Iterator measures  = track.getMeasures();
-		while(measures.hasNext()){
-			TGMeasure measure = (TGMeasure)measures.next();
-			writeMeasure(measure,lastMeasure);
-			lastMeasure = measure;
-		}
-		
-		//escribo la cantidad de cuerdas 
-		writeByte(track.getStrings().size());
-		
-		//escribo las cuerdas
-		Iterator stringIt  = track.getStrings().iterator();
-		while(stringIt.hasNext()){
-			TGString string = (TGString)stringIt.next();
-			writeInstrumentString(string);
-		}
-		
-		//escribo el offset
-		writeByte(track.getOffset() - TGTrack.MIN_OFFSET);
-		
-		//escribo el color
-		writeRGBColor(track.getColor());
-		
-		//escribo el lyrics
-		if(((header & TRACK_LYRICS) != 0)){
-			writeLyrics(track.getLyrics());
-		}
-	}
-	
-	private void writeMeasureHeader(TGMeasureHeader measureheader,TGMeasureHeader lastMeasureHeader){
-		int header = 0;
-		if(lastMeasureHeader == null){
-			header |= MEASURE_HEADER_TIMESIGNATURE;
-			header |= MEASURE_HEADER_TEMPO;
-			if(measureheader.getTripletFeel() != TGMeasureHeader.TRIPLET_FEEL_NONE){
-				header |= MEASURE_HEADER_TRIPLET_FEEL;
-			}
-		}else{
-			//Time Signature
-			int numerator = measureheader.getTimeSignature().getNumerator();
-			int value = measureheader.getTimeSignature().getDenominator().getValue();
-			int prevNumerator = lastMeasureHeader.getTimeSignature().getNumerator();
-			int prevValue = lastMeasureHeader.getTimeSignature().getDenominator().getValue();
-			if(numerator != prevNumerator || value != prevValue){
-				header |= MEASURE_HEADER_TIMESIGNATURE;
-			}
-			//Tempo
-			if(measureheader.getTempo().getValue() != lastMeasureHeader.getTempo().getValue()){
-				header |= MEASURE_HEADER_TEMPO;
-			}
-			//Triplet Feel
-			if(measureheader.getTripletFeel() != lastMeasureHeader.getTripletFeel()){
-				header |= MEASURE_HEADER_TRIPLET_FEEL;
-			}
-		}
-		header = (measureheader.isRepeatOpen())?header |= MEASURE_HEADER_REPEAT_OPEN:header;
-		header = (measureheader.getRepeatClose() > 0)?header |= MEASURE_HEADER_REPEAT_CLOSE:header;
-		header = (measureheader.getRepeatAlternative() > 0)?header |= MEASURE_HEADER_REPEAT_ALTERNATIVE:header;
-		header = (measureheader.hasMarker())?header |= MEASURE_HEADER_MARKER:header;
-		
-		writeHeader(header);
-		
-		//escribo el timeSignature
-		if(((header & MEASURE_HEADER_TIMESIGNATURE) != 0)){
-			writeTimeSignature(measureheader.getTimeSignature());
-		}
-		
-		//escribo el tempo
-		if(((header & MEASURE_HEADER_TEMPO) != 0)){
-			writeTempo(measureheader.getTempo());
-		}
-		
-		//escribo el numero de repeticiones
-		if(((header & MEASURE_HEADER_REPEAT_CLOSE) != 0)){
-			writeShort((short)measureheader.getRepeatClose());
-		}
-		
-		//escribo los finales alternativos
-		if(((header & MEASURE_HEADER_REPEAT_ALTERNATIVE) != 0)){
-			writeByte(measureheader.getRepeatAlternative());
-		}
-		
-		//escribo el marker
-		if(((header & MEASURE_HEADER_MARKER) != 0)){
-			writeMarker(measureheader.getMarker());
-		}
-		
-		//escribo el triplet feel
-		if(((header & MEASURE_HEADER_TRIPLET_FEEL) != 0)){
-			writeByte(measureheader.getTripletFeel());
-		}
-	}
-	
-	private void writeMeasure(TGMeasure measure,TGMeasure lastMeasure){
-		int header = 0;
-		if(lastMeasure == null){
-			header |= MEASURE_CLEF;
-			header |= MEASURE_KEYSIGNATURE;
-		}else{
-			//Clef
-			if(measure.getClef() != lastMeasure.getClef()){
-				header |= MEASURE_CLEF;
-			}
-			//KeySignature
-			if(measure.getKeySignature() != lastMeasure.getKeySignature()){
-				header |= MEASURE_KEYSIGNATURE;
-			}
-		}
-		//escribo la cabecera
-		writeHeader(header);
-		
-		//escribo los beats
-		TGBeatData data = new TGBeatData(measure);
-		writeBeats(measure, data);
-		
-		//escribo la clave
-		if(((header & MEASURE_CLEF) != 0)){
-			writeByte(measure.getClef());
-		}
-		
-		//escribo el key signature
-		if(((header & MEASURE_KEYSIGNATURE) != 0)){
-			writeByte(measure.getKeySignature());
-		}
-	}
-	
-	private void writeChannel(TGChannel channel){
-		//escribo el canal
-		writeByte(channel.getChannel());
-		
-		//escribo el canal de efectos
-		writeByte(channel.getEffectChannel());
-		
-		//escribo el instrumento
-		writeByte(channel.getInstrument());
-		
-		//escribo el volumen
-		writeByte(channel.getVolume());
-		
-		//escribo el balance
-		writeByte(channel.getBalance());
-		
-		//escribo el chorus
-		writeByte(channel.getChorus());
-		
-		//escribo el reverb
-		writeByte(channel.getReverb());
-		
-		//escribo el phaser
-		writeByte(channel.getPhaser());
-		
-		//escribo el tremolo
-		writeByte(channel.getTremolo());
-	}
-	
-	private void writeBeats(TGMeasure measure,TGBeatData data){
-		int count = measure.countBeats();
-		for(int i = 0; i < count; i ++){
-			TGBeat beat = measure.getBeat(i);
-			writeBeat(beat,data, (i + 1 < count ));
-		}
-	}
-	
-	private void writeBeat(TGBeat beat,TGBeatData data, boolean hasNext){
-		int header = hasNext ? BEAT_HAS_NEXT : 0;
-		
-		//Berifico si hay cambios en las voces
-		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
-			int shift = (i * 2 );
-			if(!beat.getVoice(i).isEmpty()){
-				header |= ( BEAT_HAS_VOICE << shift ); 
-				
-				int flags = ( beat.getVoice(i).isRestVoice() ? 0 : VOICE_HAS_NOTES );
-				if(!beat.getVoice(i).getDuration().isEqual(data.getVoice(i).getDuration())){
-					flags |= VOICE_NEXT_DURATION;
-					data.getVoice(i).setDuration(beat.getVoice(i).getDuration());
-				}
-				if(beat.getVoice(i).getDirection() != TGVoice.DIRECTION_NONE ){
-					if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_UP ){
-						flags |= VOICE_DIRECTION_UP;
-					}
-					else if(beat.getVoice(i).getDirection() == TGVoice.DIRECTION_DOWN ){
-						flags |= VOICE_DIRECTION_DOWN;
-					}
-				}
-				if( data.getVoice(i).getFlags() != flags ){
-					header |= ( BEAT_HAS_VOICE_CHANGES << shift ); 
-					data.getVoice(i).setFlags( flags );
-				}
-			}
-			
-		}
-		//Berifico si tiene stroke
-		if(beat.getStroke().getDirection() != TGStroke.STROKE_NONE){
-			header |= BEAT_HAS_STROKE;
-		}
-		//Berifico si tiene acorde
-		if(beat.getChord() != null){
-			header |= BEAT_HAS_CHORD;
-		}
-		//Berifico si tiene texto
-		if(beat.getText() != null){
-			header |= BEAT_HAS_TEXT;
-		}
-		
-		// escribo la cabecera
-		writeHeader(header);
-		
-		//escribo las voces
-		writeVoices(header, beat, data);
-		
-		//escribo el stroke
-		if(((header & BEAT_HAS_STROKE) != 0)){
-			writeStroke(beat.getStroke());
-		}
-		
-		//escribo el acorde
-		if(((header & BEAT_HAS_CHORD) != 0)){
-			writeChord(beat.getChord());
-		}
-		
-		//escribo el texto
-		if(((header & BEAT_HAS_TEXT) != 0)){
-			writeText(beat.getText());
-		}
-	}
-	
-	private void writeVoices(int header, TGBeat beat,TGBeatData data){
-		for(int i = 0 ; i < TGBeat.MAX_VOICES; i ++ ){
-			int shift = (i * 2 );
-			if((( header & (BEAT_HAS_VOICE << shift)) != 0)){
-				
-				if(((header & (BEAT_HAS_VOICE_CHANGES << shift)) != 0)){
-					writeHeader( data.getVoice(i).getFlags() );
-				}
-				
-				//escribo la duracion
-				if((( data.getVoice(i).getFlags() & VOICE_NEXT_DURATION) != 0)){
-					writeDuration(beat.getVoice(i).getDuration());
-				}
-				
-				//escribo las notas
-				if((( data.getVoice(i).getFlags() & VOICE_HAS_NOTES) != 0)){
-					writeNotes(beat.getVoice(i), data);
-				}
-			}
-		}
-	}
-	
-	private void writeNotes(TGVoice voice,TGBeatData data){
-		for( int i = 0 ; i < voice.countNotes() ; i ++){
-			TGNote note = voice.getNote(i);
-			
-			int header = ( i + 1 < voice.countNotes() ? NOTE_HAS_NEXT : 0 );
-			header = (note.isTiedNote())?header |= NOTE_TIED:header;
-			if(note.getVelocity() != data.getVoice(voice.getIndex()).getVelocity()){
-				data.getVoice(voice.getIndex()).setVelocity(note.getVelocity());
-				header |= NOTE_VELOCITY;
-			}
-			header = (note.getEffect().hasAnyEffect())?header |= NOTE_EFFECT:header;
-			
-			writeHeader(header);
-			
-			writeNote(header,note);
-		}
-	}
-	
-	private void writeNote(int header,TGNote note){
-		//escribo el valor
-		writeByte(note.getValue());
-		
-		//escribo la cuerda
-		writeByte(note.getString());
-		
-		//escribo el velocity
-		if(((header & NOTE_VELOCITY) != 0)){
-			writeByte(note.getVelocity());
-		}
-		
-		//escribo los efectos
-		if(((header & NOTE_EFFECT) != 0)){
-			writeNoteEffect(note.getEffect());
-		}
-	}
-	
-	private void writeStroke(TGStroke stroke){
-		//escribo la direccion
-		writeByte(stroke.getDirection());
-		
-		//escribo el valor
-		writeByte(stroke.getValue());
-	}
-	
-	private void writeChord(TGChord chord){
-		//escribo la cantidad de cuerdas
-		writeByte(chord.countStrings());
-		
-		//escribo el nombre
-		writeUnsignedByteString(chord.getName());
-		
-		//escribo el primer fret
-		writeByte(chord.getFirstFret());
-		
-		//escribo el valor de cada cuerda
-		for(int string = 0; string < chord.countStrings(); string ++){
-			writeByte(chord.getFretValue(string));
-		}
-	}
-	
-	private void writeText(TGText text){
-		//escribo el texto
-		writeUnsignedByteString(text.getValue());
-	}
-	
-	private void writeInstrumentString(TGString string){
-		//escribo el valor
-		writeByte(string.getValue());
-	}
-	
-	private void writeTempo(TGTempo tempo){
-		//escribo el valor
-		writeShort((short)tempo.getValue());
-	}
-	
-	private void writeTimeSignature(TGTimeSignature timeSignature){
-		//escribo el numerador
-		writeByte(timeSignature.getNumerator());
-		
-		//escribo el denominador
-		writeDuration(timeSignature.getDenominator());
-	}
-	
-	private void writeDuration(TGDuration duration){
-		int header = 0;
-		header = (duration.isDotted())?header |= DURATION_DOTTED:header;
-		header = (duration.isDoubleDotted())?header |= DURATION_DOUBLE_DOTTED:header;
-		header = (!duration.getDivision().isEqual(TGDivisionType.NORMAL))?header |= DURATION_NO_TUPLET:header;
-		writeHeader(header);
-		
-		//escribo el valor
-		writeByte(duration.getValue());
-		
-		//escribo el tipo de divisiones
-		if(((header & DURATION_NO_TUPLET) != 0)){
-			writeDivisionType(duration.getDivision());
-		}
-	}
-	
-	private void writeDivisionType(TGDivisionType divisionType){
-		//escribo los enters
-		writeByte(divisionType.getEnters());
-		
-		//escribo los tiempos
-		writeByte(divisionType.getTimes());
-	}
-	
-	private void writeNoteEffect(TGNoteEffect effect){
-		int header = 0;
-		
-		header = (effect.isBend())?header |= EFFECT_BEND:header;
-		header = (effect.isTremoloBar())?header |= EFFECT_TREMOLO_BAR:header;
-		header = (effect.isHarmonic())?header |= EFFECT_HARMONIC:header;
-		header = (effect.isGrace())?header |= EFFECT_GRACE:header;
-		header = (effect.isTrill())?header |= EFFECT_TRILL:header;
-		header = (effect.isTremoloPicking())?header |= EFFECT_TREMOLO_PICKING:header;
-		header = (effect.isVibrato())?header |= EFFECT_VIBRATO:header;
-		header = (effect.isDeadNote())?header |= EFFECT_DEAD:header;
-		header = (effect.isSlide())?header |= EFFECT_SLIDE:header;
-		header = (effect.isHammer())?header |= EFFECT_HAMMER:header;
-		header = (effect.isGhostNote())?header |= EFFECT_GHOST:header;
-		header = (effect.isAccentuatedNote())?header |= EFFECT_ACCENTUATED:header;
-		header = (effect.isHeavyAccentuatedNote())?header |= EFFECT_HEAVY_ACCENTUATED:header;
-		header = (effect.isPalmMute())?header |= EFFECT_PALM_MUTE:header;
-		header = (effect.isStaccato())?header |= EFFECT_STACCATO:header;
-		header = (effect.isTapping())?header |= EFFECT_TAPPING:header;
-		header = (effect.isSlapping())?header |= EFFECT_SLAPPING:header;
-		header = (effect.isPopping())?header |= EFFECT_POPPING:header;
-		header = (effect.isFadeIn())?header |= EFFECT_FADE_IN:header;
-		
-		writeHeader(header,3);
-		
-		//escribo el bend
-		if(((header & EFFECT_BEND) != 0)){
-			writeBendEffect(effect.getBend());
-		}
-		
-		//leo el tremolo bar
-		if(((header & EFFECT_TREMOLO_BAR) != 0)){
-			writeTremoloBarEffect(effect.getTremoloBar());
-		}
-		
-		//leo el harmonic
-		if(((header & EFFECT_HARMONIC) != 0)){
-			writeHarmonicEffect(effect.getHarmonic());
-		}
-		
-		//leo el grace
-		if(((header & EFFECT_GRACE) != 0)){
-			writeGraceEffect(effect.getGrace());
-		}
-		
-		//leo el trill
-		if(((header & EFFECT_TRILL) != 0)){
-			writeTrillEffect(effect.getTrill());
-		}
-		
-		//leo el tremolo picking
-		if(((header & EFFECT_TREMOLO_PICKING) != 0)){
-			writeTremoloPickingEffect(effect.getTremoloPicking());
-		}
-	}
-	
-	private void writeBendEffect(TGEffectBend effect){
-		//escribo la cantidad de puntos
-		writeByte(effect.getPoints().size());
-		
-		Iterator it = effect.getPoints().iterator();
-		while(it.hasNext()){
-			TGEffectBend.BendPoint point = (TGEffectBend.BendPoint)it.next();
-			
-			//escribo la posicion
-			writeByte(point.getPosition());
-			
-			//escribo el valor
-			writeByte(point.getValue());
-		}
-	}
-	
-	private void writeTremoloBarEffect(TGEffectTremoloBar effect){
-		//escribo la cantidad de puntos
-		writeByte(effect.getPoints().size());
-		
-		Iterator it = effect.getPoints().iterator();
-		while(it.hasNext()){
-			TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint)it.next();
-			
-			//escribo la posicion
-			writeByte(point.getPosition());
-			
-			//escribo el valor
-			writeByte( (point.getValue() + TGEffectTremoloBar.MAX_VALUE_LENGTH) );
-		}
-	}
-	
-	private void writeHarmonicEffect(TGEffectHarmonic effect){
-		//excribo el tipo
-		writeByte(effect.getType());
-		
-		//excribo la data
-		if(effect.getType() != TGEffectHarmonic.TYPE_NATURAL){
-			writeByte(effect.getData());
-		}
-	}
-	
-	private void writeGraceEffect(TGEffectGrace effect){
-		int header = 0;
-		header = (effect.isDead())?header |= GRACE_FLAG_DEAD:header;
-		header = (effect.isOnBeat())?header |= GRACE_FLAG_ON_BEAT:header;
-		
-		//excribo el header
-		writeHeader(header);
-		
-		//excribo el fret
-		writeByte(effect.getFret());
-		
-		//excribo la duracion
-		writeByte(effect.getDuration());
-		
-		//excribo el velocity
-		writeByte(effect.getDynamic());
-		
-		//excribo la transicion
-		writeByte(effect.getTransition());
-	}
-	
-	private void writeTremoloPickingEffect(TGEffectTremoloPicking effect){
-		//excribo la duracion
-		writeByte(effect.getDuration().getValue());
-	}
-	
-	private void writeTrillEffect(TGEffectTrill effect){
-		//excribo el fret
-		writeByte(effect.getFret());
-		
-		//excribo la duracion
-		writeByte(effect.getDuration().getValue());
-	}
-	
-	private void writeMarker(TGMarker marker){
-		//escribo el titulo
-		writeUnsignedByteString(marker.getTitle());
-		
-		//escribo el color
-		writeRGBColor(marker.getColor());
-	}
-	
-	private void writeRGBColor(TGColor color){
-		//escribo el RGB
-		writeByte(color.getR());
-		writeByte(color.getG());
-		writeByte(color.getB());
-	}
-	
-	private void writeLyrics(TGLyric lyrics){
-		//escribo el compas de comienzo
-		writeShort((short)lyrics.getFrom());
-		
-		//escribo el texto
-		writeIntegerString(lyrics.getLyrics());
-	}
-	
-	public void writeByte(int v){
-		try {
-			this.dataOutputStream.write(v);
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	private void writeUnsignedByteString(String v){
-		try {
-			String byteString = (v == null ? new String() : ((v.length() > 0xFF)?v.substring(0, 0xFF):v) );
-			this.dataOutputStream.write(byteString.length());
-			this.dataOutputStream.writeChars(byteString);
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	private void writeIntegerString(String v){
-		try {
-			this.dataOutputStream.writeInt(v.length());
-			this.dataOutputStream.writeChars(v);
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void writeHeader(int v){
-		try {
-			this.dataOutputStream.write(v);
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void writeHeader(int v,int bCount){
-		for(int i = bCount; i > 0; i --){
-			writeHeader( (v >>> ( (8 * i) - 8 ) )  &  0xFF);
-		}
-	}
-	
-	public void writeShort(short v){
-		try {
-			this.dataOutputStream.writeShort(v);
-		} catch (IOException e) {
-			e.printStackTrace();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGStream.java b/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGStream.java
deleted file mode 100644
index 6bda8b8..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/io/tg/TGStream.java
+++ /dev/null
@@ -1,203 +0,0 @@
-package org.herac.tuxguitar.io.tg;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGVelocities;
-import org.herac.tuxguitar.util.TGVersion;
-
-public class TGStream {
-	
-	public static final String TG_FORMAT_NAME = ("TuxGuitar File Format");
-	
-	public static final String TG_FORMAT_VERSION = (TG_FORMAT_NAME + " - " + TGVersion.CURRENT.getVersion() );
-	
-	public static final String TG_FORMAT_EXTENSION = (".tg");
-	
-	protected static final int TRACK_SOLO = 0x01;
-	
-	protected static final int TRACK_MUTE = 0x02;
-	
-	protected static final int TRACK_LYRICS = 0x04;
-	
-	protected static final int MEASURE_HEADER_TIMESIGNATURE = 0x01;
-	
-	protected static final int MEASURE_HEADER_TEMPO = 0x02;
-	
-	protected static final int MEASURE_HEADER_REPEAT_OPEN = 0x04;
-	
-	protected static final int MEASURE_HEADER_REPEAT_CLOSE = 0x08;
-	
-	protected static final int MEASURE_HEADER_REPEAT_ALTERNATIVE = 0x10;
-	
-	protected static final int MEASURE_HEADER_MARKER = 0x20;
-	
-	protected static final int MEASURE_HEADER_TRIPLET_FEEL = 0x40;
-	
-	protected static final int MEASURE_CLEF = 0x01;
-	
-	protected static final int MEASURE_KEYSIGNATURE = 0x02;
-	
-	protected static final int BEAT_HAS_NEXT = 0x01;
-	
-	protected static final int BEAT_HAS_STROKE = 0x02;
-	
-	protected static final int BEAT_HAS_CHORD = 0x04;
-	
-	protected static final int BEAT_HAS_TEXT = 0x08;
-	
-	protected static final int BEAT_HAS_VOICE = 0x10;
-	
-	protected static final int BEAT_HAS_VOICE_CHANGES = 0x20;
-	
-	protected static final int VOICE_HAS_NOTES = 0x01;
-	
-	protected static final int VOICE_NEXT_DURATION = 0x02;
-	
-	protected static final int VOICE_DIRECTION_UP = 0x04;
-	
-	protected static final int VOICE_DIRECTION_DOWN = 0x08;
-	
-	protected static final int NOTE_HAS_NEXT = 0x01;
-	
-	protected static final int NOTE_TIED = 0x02;
-	
-	protected static final int NOTE_EFFECT = 0x04;
-	
-	protected static final int NOTE_VELOCITY = 0x08;
-	
-	protected static final int DURATION_DOTTED = 0x01;
-	
-	protected static final int DURATION_DOUBLE_DOTTED = 0x02;
-	
-	protected static final int DURATION_NO_TUPLET = 0x04;
-	
-	protected static final int EFFECT_BEND = 0x01;
-	
-	protected static final int EFFECT_TREMOLO_BAR = 0x02;
-	
-	protected static final int EFFECT_HARMONIC = 0x04;
-	
-	protected static final int EFFECT_GRACE = 0x08;
-	
-	protected static final int EFFECT_TRILL = 0x010;
-	
-	protected static final int EFFECT_TREMOLO_PICKING = 0x020;
-	
-	protected static final int EFFECT_VIBRATO = 0x040;
-	
-	protected static final int EFFECT_DEAD = 0x080;
-	
-	protected static final int EFFECT_SLIDE = 0x0100;
-	
-	protected static final int EFFECT_HAMMER = 0x0200;
-	
-	protected static final int EFFECT_GHOST = 0x0400;
-	
-	protected static final int EFFECT_ACCENTUATED = 0x0800;
-	
-	protected static final int EFFECT_HEAVY_ACCENTUATED = 0x01000;
-	
-	protected static final int EFFECT_PALM_MUTE = 0x02000;
-	
-	protected static final int EFFECT_STACCATO = 0x04000;
-	
-	protected static final int EFFECT_TAPPING = 0x08000;
-	
-	protected static final int EFFECT_SLAPPING = 0x010000;
-	
-	protected static final int EFFECT_POPPING = 0x020000;
-	
-	protected static final int EFFECT_FADE_IN = 0x040000;
-	
-	protected static final int GRACE_FLAG_DEAD = 0x01;
-	
-	protected static final int GRACE_FLAG_ON_BEAT = 0x02;
-	
-	protected class TGBeatData {
-		private long currentStart;
-		private TGVoiceData[] voices;
-		
-		protected TGBeatData(TGMeasure measure){
-			this.init(measure);
-		}
-		
-		private void init(TGMeasure measure){
-			this.currentStart = measure.getStart();
-			this.voices = new TGVoiceData[TGBeat.MAX_VOICES];
-			for(int i = 0 ; i < this.voices.length ; i ++ ){
-				this.voices[i] = new TGVoiceData(measure);
-			}
-		}
-		
-		protected TGVoiceData getVoice(int index){
-			return this.voices[index];
-		}
-		
-		public long getCurrentStart(){
-			long minimumStart = -1;
-			for(int i = 0 ; i < this.voices.length ; i ++ ){
-				if( this.voices[i].getStart() > this.currentStart ){
-					if( minimumStart < 0 || this.voices[i].getStart() < minimumStart ){
-						minimumStart = this.voices[i].getStart();
-					}
-				}
-			}
-			if( minimumStart > this.currentStart ){
-				this.currentStart = minimumStart;
-			}
-			return this.currentStart;
-		}
-	}
-	
-	protected class TGVoiceData {
-		private long start;
-		private int velocity;
-		private int flags;
-		private TGDuration duration;
-		
-		protected TGVoiceData(TGMeasure measure){
-			this.init(measure);
-		}
-		
-		private void init(TGMeasure measure){
-			this.flags = 0;
-			this.setStart(measure.getStart());
-			this.setVelocity(TGVelocities.DEFAULT);
-			this.setDuration(new TGFactory().newDuration());
-		}
-		
-		public TGDuration getDuration() {
-			return this.duration;
-		}
-		
-		public void setDuration(TGDuration duration) {
-			this.duration = duration;
-		}
-		
-		public long getStart() {
-			return this.start;
-		}
-		
-		public void setStart(long start) {
-			this.start = start;
-		}
-		
-		public int getVelocity() {
-			return this.velocity;
-		}
-		
-		public void setVelocity(int velocity) {
-			this.velocity = velocity;
-		}
-		
-		public int getFlags() {
-			return this.flags;
-		}
-		
-		public void setFlags(int flags) {
-			this.flags = flags;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiControllers.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiControllers.java
deleted file mode 100644
index d3a42ab..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiControllers.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package org.herac.tuxguitar.player.base;
-
-public class MidiControllers {
-	
-	public static final int VOLUME = 0x07;
-	
-	public static final int BALANCE = 0x0A;
-	
-	public static final int EXPRESSION = 0x0B;
-	
-	public static final int REVERB = 0x5B;
-	
-	public static final int TREMOLO = 0x5C;
-	
-	public static final int CHORUS = 0x5D;
-	
-	public static final int PHASER = 0x5F;
-	
-	public static final int DATA_ENTRY_MSB = 0x06;
-	
-	public static final int DATA_ENTRY_LSB = 0x26;
-	
-	public static final int RPN_LSB = 0x64 ;
-	
-	public static final int RPN_MSB = 0x65 ;
-	
-	public static final int ALL_NOTES_OFF = 0x7B;
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiOutputPort.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiOutputPort.java
deleted file mode 100644
index bcb1f79..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiOutputPort.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.herac.tuxguitar.player.base;
-
-public interface MidiOutputPort extends MidiDevice {
-	
-	public MidiReceiver getReceiver() throws MidiPlayerException;
-	
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayer.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayer.java
deleted file mode 100644
index 0ba2f30..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayer.java
+++ /dev/null
@@ -1,855 +0,0 @@
-package org.herac.tuxguitar.player.base;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.util.TGLock;
-
-public class MidiPlayer{
-	
-	private static final int MAX_CHANNELS = 16;
-	
-	public static final int MAX_VOLUME = 10;
-	
-	private static final int TIMER_DELAY = 10;
-	
-	private TGSongManager songManager;
-	
-	private MidiSequencer sequencer;
-	
-	private MidiTransmitter outputTransmitter;
-	
-	private MidiOutputPort outputPort;
-	
-	private MidiPlayerMode mode;
-	
-	private String sequencerKey;
-	
-	private String outputPortKey;
-	
-	private List outputPortProviders;
-	
-	private List sequencerProviders;
-	
-	private List listeners;
-	
-	private int volume;
-	
-	private boolean running;
-	
-	private boolean paused;
-	
-	private boolean changeTickPosition;
-	
-	private boolean metronomeEnabled;
-	
-	private int metronomeTrack;
-	
-	private int infoTrack;
-	
-	private int loopSHeader;
-	
-	private int loopEHeader;
-	
-	private long loopSPosition;
-	
-	private boolean anySolo;
-	
-	protected long tickLength;
-	
-	protected long tickPosition;
-	
-	protected boolean starting;
-	
-	protected TGLock lock = new TGLock();
-	
-	public MidiPlayer() {
-		this.lock = new TGLock();
-		this.volume = MAX_VOLUME;
-	}
-	
-	/**
-	 * Inicia el Secuenciador y Sintetizador
-	 * @throws MidiUnavailableException 
-	 */
-	
-	public void init(TGSongManager songManager) {
-		this.songManager = songManager;
-		this.outputPortProviders = new ArrayList();
-		this.sequencerProviders = new ArrayList();
-		this.listeners = new ArrayList();
-		this.getSequencer();
-		this.getMode();
-		this.reset();
-	}
-	
-	/**
-	 * Retorna una lista de instrumentos
-	 */
-	public MidiInstrument[] getInstruments(){
-		return MidiInstrument.INSTRUMENT_LIST;
-	}
-	
-	/**
-	 * Retorna una lista de instrumentos
-	 */
-	public MidiPercussion[] getPercussions(){
-		return MidiPercussion.PERCUSSION_LIST;
-	}
-	
-	/**
-	 * Resetea los valores
-	 */
-	public void reset(){
-		this.stop();
-		this.lock.lock();
-		this.tickPosition = TGDuration.QUARTER_TIME;
-		this.setChangeTickPosition(false);
-		this.lock.unlock();
-	}
-	
-	/**
-	 * Cierra el Secuenciador y Sintetizador
-	 * @throws MidiUnavailableException 
-	 */
-	public void close(){
-		try {
-			this.closeSequencer();
-			this.closeOutputPort();
-		} catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * Para la reproduccion
-	 * @throws MidiUnavailableException 
-	 */
-	public void stop(boolean paused) {
-		try{
-			this.setPaused(paused);
-			if(this.isRunning()){
-				this.getSequencer().stop();
-			}
-			this.setRunning(false);
-		}catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * Para la reproduccion
-	 * @throws MidiUnavailableException 
-	 */
-	public void stop() {
-		this.stop(false);
-	}
-	
-	public void pause(){
-		this.stop(true);
-	}
-	
-	/**
-	 * Inicia la reproduccion
-	 * @throws MidiPlayerException 
-	 * @throws MidiUnavailableException 
-	 */
-	public synchronized void play() throws MidiPlayerException{
-		try {
-			final boolean notifyStarted = (!this.isRunning());
-			this.setStarting(true);
-			this.stop();
-			this.lock.lock();
-			this.checkDevices();
-			this.updateLoop( true );
-			this.systemReset();
-			this.addSequence();
-			this.updatePrograms();
-			this.updateControllers();
-			this.updateDefaultControllers();
-			this.setMetronomeEnabled(isMetronomeEnabled());
-			this.changeTickPosition();
-			this.setRunning(true);
-			this.getSequencer().start();
-			new Thread(new Runnable() {
-				public synchronized void run() {
-					try {
-						MidiPlayer.this.lock.lock();
-						
-						MidiPlayer.this.setStarting(false);
-						
-						if( notifyStarted ){
-							MidiPlayer.this.notifyStarted();
-						}
-						
-						MidiPlayer.this.tickLength = getSequencer().getTickLength();
-						MidiPlayer.this.tickPosition = getSequencer().getTickPosition();
-						
-						Object sequencerLock = new Object();
-						while (getSequencer().isRunning() && isRunning()) {
-							synchronized(sequencerLock) {
-								if (isChangeTickPosition()) {
-									changeTickPosition();
-								}
-								MidiPlayer.this.tickPosition = getSequencer().getTickPosition();
-								
-								sequencerLock.wait( TIMER_DELAY );
-							}
-						}
-						
-						//FINISH
-						if(isRunning()){
-							if(MidiPlayer.this.tickPosition >= (MidiPlayer.this.tickLength - (TGDuration.QUARTER_TIME / 2) )){
-								finish();
-							}else {
-								stop(isPaused());
-							}
-						}
-						
-						if( !isRunning() ){
-							MidiPlayer.this.notifyStopped();
-						}
-					}catch (Throwable throwable) {
-						setStarting(false);
-						reset();
-						throwable.printStackTrace();
-					}finally{
-						MidiPlayer.this.lock.unlock();
-					}
-				}
-			}).start();
-		}catch (Throwable throwable) {
-			this.setStarting(false);
-			this.reset();
-			throw new MidiPlayerException(throwable.getMessage(),throwable);
-		}finally{
-			this.lock.unlock();
-		}
-	}
-	
-	protected void finish(){
-		try {
-			if(this.getMode().isLoop()){
-				this.setStarting(true);
-				this.reset();
-				this.getMode().notifyLoop();
-				this.notifyLoop();
-				this.play();
-				return;
-			}
-			this.reset();
-		} catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void updateLoop( boolean force ){
-		if( force || !this.isRunning() ){
-			this.loopSHeader = -1;
-			this.loopEHeader = -1;
-			this.loopSPosition = TGDuration.QUARTER_TIME;
-			if( getMode().isLoop() ){
-				int hCount = this.songManager.getSong().countMeasureHeaders();
-				this.loopSHeader = ( getMode().getLoopSHeader() <= hCount ? getMode().getLoopSHeader() : -1 ) ;
-				this.loopEHeader = ( getMode().getLoopEHeader() <= hCount ? getMode().getLoopEHeader() : -1 ) ;
-				if( this.loopSHeader > 0 && this.loopSHeader <= hCount ){
-					TGMeasureHeader header = this.songManager.getMeasureHeader( this.loopSHeader );
-					if( header != null ){
-						this.loopSPosition = header.getStart();
-					}
-				}
-			}
-		}
-	}
-	
-	public int getLoopSHeader() {
-		return this.loopSHeader;
-	}
-	
-	public int getLoopEHeader() {
-		return this.loopEHeader;
-	}
-	
-	public long getLoopSPosition() {
-		return this.loopSPosition;
-	}
-	
-	public void checkDevices() throws Throwable {
-		this.getSequencer().check();
-		if( this.getOutputPort() != null ){
-			this.getOutputPort().check();
-		}
-	}
-	
-	public int getVolume() {
-		return this.volume;
-	}
-	
-	public void setVolume(int volume) {
-		this.volume = volume;
-		if (this.isRunning()) {
-			this.updateControllers();
-		}
-	}
-	
-	protected boolean isStarting() {
-		return this.starting;
-	}
-	
-	protected void setStarting(boolean starting) {
-		this.starting = starting;
-	}
-	
-	/**
-	 * Asigna el valor a running
-	 */
-	public void setRunning(boolean running) {
-		this.running = running;
-	}
-	
-	/**
-	 * Retorna True si esta reproduciendo
-	 */
-	public boolean isRunning() {
-		try {
-			return (this.running || this.getSequencer().isRunning() || this.isStarting());
-		} catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-		return false;
-	}
-	
-	public boolean isPaused() {
-		return this.paused;
-	}
-	
-	public void setPaused(boolean paused) {
-		this.paused = paused;
-	}
-	
-	/**
-	 * Retorna True si hay cambios en la posicion
-	 */
-	protected boolean isChangeTickPosition() {
-		return this.changeTickPosition;
-	}
-	
-	/**
-	 * Asigna los cambios de la posicion
-	 */
-	private void setChangeTickPosition(boolean changeTickPosition) {
-		this.changeTickPosition = changeTickPosition;
-	}
-	
-	/**
-	 * Indica la posicion del secuenciador
-	 * @throws MidiUnavailableException 
-	 */
-	public void setTickPosition(long position) {
-		this.tickPosition = position;
-		this.setChangeTickPosition(true);
-	}
-	
-	/**
-	 * Retorna el tick de la nota que esta reproduciendo
-	 */
-	public long getTickPosition() {
-		return this.tickPosition;
-	}
-	
-	protected void changeTickPosition(){
-		try{
-			if(isRunning()){
-				if( this.tickPosition < this.getLoopSPosition() ){
-					this.tickPosition = this.getLoopSPosition();
-				}
-				this.getSequencer().setTickPosition(this.tickPosition);
-			}
-			setChangeTickPosition(false);
-		} catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void systemReset(){
-		try {
-			this.getOutputTransmitter().sendSystemReset();
-		} catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	/**
-	 * Agrega la Secuencia
-	 * @throws MidiUnavailableException 
-	 */
-	public void addSequence() {
-		try{
-			MidiSequenceParser parser = new MidiSequenceParser(this.songManager,MidiSequenceParser.DEFAULT_PLAY_FLAGS,getMode().getCurrentPercent(),0);		
-			MidiSequenceHandler sequence = getSequencer().createSequence(this.songManager.getSong().countTracks() + 2);
-			parser.setSHeader( getLoopSHeader() );
-			parser.setEHeader( getLoopEHeader() );
-			parser.parse(sequence);
-			this.infoTrack = parser.getInfoTrack();
-			this.metronomeTrack = parser.getMetronomeTrack();
-		} catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	private void updateDefaultControllers(){
-		try{
-			for(int channel = 0; channel < MAX_CHANNELS;channel ++){
-				getOutputTransmitter().sendControlChange(channel,MidiControllers.RPN_MSB,0);
-				getOutputTransmitter().sendControlChange(channel,MidiControllers.RPN_LSB,0);
-				getOutputTransmitter().sendControlChange(channel,MidiControllers.DATA_ENTRY_MSB,12);
-				getOutputTransmitter().sendControlChange(channel,MidiControllers.DATA_ENTRY_LSB, 0);
-			}
-		}
-		catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void updatePrograms() {
-		try{
-			Iterator it = this.songManager.getSong().getTracks();
-			while(it.hasNext()){
-				TGTrack track = (TGTrack)it.next();
-				getOutputTransmitter().sendProgramChange(track.getChannel().getChannel(),track.getChannel().getInstrument());
-				if(track.getChannel().getChannel() != track.getChannel().getEffectChannel()){
-					getOutputTransmitter().sendProgramChange(track.getChannel().getEffectChannel(),track.getChannel().getInstrument());
-				}
-			}
-		}catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void updateControllers() {
-		this.anySolo = false;
-		boolean percussionUpdated = false;
-		Iterator it = this.songManager.getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack track = (TGTrack)it.next();
-			this.updateController(track);
-			this.anySolo = ((!this.anySolo)?track.isSolo():this.anySolo);
-			percussionUpdated = (percussionUpdated || track.isPercussionTrack());
-		}
-		if(!percussionUpdated && isMetronomeEnabled()){
-			int volume = (int)((this.getVolume() / 10.00) * TGChannel.DEFAULT_VOLUME);
-			int balance = TGChannel.DEFAULT_BALANCE;
-			int chorus = TGChannel.DEFAULT_CHORUS;
-			int reverb = TGChannel.DEFAULT_REVERB;
-			int phaser = TGChannel.DEFAULT_PHASER;
-			int tremolo = TGChannel.DEFAULT_TREMOLO;
-			updateController(9,volume,balance,chorus,reverb,phaser,tremolo,127);
-		}
-		this.afterUpdate();
-	}
-	
-	private void updateController(TGTrack track) {
-		try{
-			int volume = (int)((this.getVolume() / 10.00) * track.getChannel().getVolume());
-			int balance = track.getChannel().getBalance();
-			int chorus = track.getChannel().getChorus();
-			int reverb = track.getChannel().getReverb();
-			int phaser = track.getChannel().getPhaser();
-			int tremolo = track.getChannel().getTremolo();
-			
-			updateController(track.getChannel().getChannel(),volume,balance,chorus,reverb,phaser,tremolo,127);
-			if(track.getChannel().getChannel() != track.getChannel().getEffectChannel()){
-				updateController(track.getChannel().getEffectChannel(),volume,balance,chorus,reverb,phaser,tremolo,127);
-			}
-			getSequencer().setMute(track.getNumber(),track.isMute());
-			getSequencer().setSolo(track.getNumber(),track.isSolo());
-		}catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	private void updateController(int channel,int volume,int balance,int chorus, int reverb,int phaser, int tremolo, int expression) {
-		try{
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.VOLUME,volume);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.BALANCE,balance);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.CHORUS,chorus);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.REVERB,reverb);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.PHASER,phaser);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.TREMOLO,tremolo);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.EXPRESSION,expression);
-		}catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	private void afterUpdate(){
-		try{
-			getSequencer().setSolo(this.infoTrack,this.anySolo);
-			getSequencer().setSolo(this.metronomeTrack,(isMetronomeEnabled() && this.anySolo));
-		}catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public boolean isMetronomeEnabled() {
-		return this.metronomeEnabled;
-	}
-	
-	public void setMetronomeEnabled(boolean metronomeEnabled) {
-		try{
-			this.metronomeEnabled = metronomeEnabled;
-			this.getSequencer().setMute(this.metronomeTrack,!isMetronomeEnabled());
-			this.getSequencer().setSolo(this.metronomeTrack,(isMetronomeEnabled() && this.anySolo));
-		}catch (MidiPlayerException e) {
-			e.printStackTrace();
-		}
-	}
-	
-	public void playBeat(final TGTrack track,final List notes) {
-		int channel = track.getChannel().getChannel();
-		int program = track.getChannel().getInstrument();
-		int volume = (int)((this.getVolume() / 10.00) * track.getChannel().getVolume());
-		int balance = track.getChannel().getBalance();
-		int chorus = track.getChannel().getChorus();
-		int reverb = track.getChannel().getReverb();
-		int phaser = track.getChannel().getPhaser();
-		int tremolo = track.getChannel().getTremolo();
-		int size = notes.size();
-		int[][] beat = new int[size][2];
-		for(int i = 0; i < size; i ++){
-			TGNote note = (TGNote)notes.get(i);
-			beat[i][0] = track.getOffset() + (note.getValue() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue());
-			beat[i][1] = note.getVelocity();
-		}
-		playBeat(channel,program,volume,balance,chorus,reverb,phaser,tremolo,beat);
-	}
-	
-	public void playBeat(int channel,int program,int volume,int balance,int chorus, int reverb,int phaser,int tremolo,int[][] beat) {
-		playBeat(channel, program, volume, balance, chorus, reverb, phaser, tremolo, beat,500,0);
-	}
-	
-	public void playBeat(int channel,int program,int volume,int balance,int chorus, int reverb,int phaser,int tremolo,int[][] beat,long duration,int interval) {
-		try {
-			getOutputTransmitter().sendProgramChange(channel,program);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.VOLUME,volume);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.BALANCE,balance);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.CHORUS,chorus);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.REVERB,reverb);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.PHASER,phaser);
-			getOutputTransmitter().sendControlChange(channel,MidiControllers.TREMOLO,tremolo);
-				
-			for(int i = 0; i < beat.length; i ++){
-				getOutputTransmitter().sendNoteOn(channel,beat[i][0], beat[i][1]);
-				if(interval > 0){
-					Thread.sleep(interval);
-				}
-			}
-			Thread.sleep(duration);
-			for(int i = 0; i < beat.length; i ++){
-				getOutputTransmitter().sendNoteOff(channel,beat[i][0], beat[i][1]);
-			}
-		} catch (Throwable throwable) {
-			throwable.printStackTrace();
-		}
-	}
-	
-	public MidiPlayerMode getMode(){
-		if(this.mode == null){
-			this.mode = new MidiPlayerMode();
-		}
-		return this.mode;
-	}
-	
-	public MidiTransmitter getOutputTransmitter(){
-		if (this.outputTransmitter == null) {
-			this.outputTransmitter = new MidiTransmitter();
-		}
-		return this.outputTransmitter;
-	}
-	
-	/**
-	 * Retorna el Puerto Midi
-	 */
-	public MidiOutputPort getOutputPort(){
-		return this.outputPort;
-	}
-	
-	/**
-	 * Retorna el Sequenciador 
-	 */
-	public MidiSequencer getSequencer(){
-		if (this.sequencer == null) {
-			this.sequencer = new MidiSequencerEmpty();
-		}
-		return this.sequencer;
-	}
-	
-	public boolean loadSequencer(MidiSequencer sequencer){
-		try{
-			this.closeSequencer();
-			this.sequencer = sequencer;
-			this.sequencer.open();
-			this.sequencer.setTransmitter( getOutputTransmitter() );
-		}catch(Throwable throwable){
-			this.sequencer = null;
-			return false;
-		}
-		return true;
-	}
-	
-	public boolean loadOutputPort(MidiOutputPort port){
-		try{
-			this.closeOutputPort();
-			this.outputPort = port;
-			this.outputPort.open();
-			this.getOutputTransmitter().addReceiver(this.outputPort.getKey(), this.outputPort.getReceiver() );
-		}catch(Throwable throwable){
-			this.outputPort = null;
-			return false;
-		}
-		return true;
-	}
-	
-	public void openOutputPort(String key) {
-		this.openOutputPort(key, false);
-	}
-	
-	public void openOutputPort(String key, boolean tryFirst) {
-		this.outputPortKey = key;
-		this.openOutputPort(listOutputPorts(),tryFirst);
-	}
-	
-	public void openOutputPort(List ports, boolean tryFirst) {
-		try{
-			if(this.outputPortKey != null && !this.isOutputPortOpen(this.outputPortKey)){
-				this.closeOutputPort();
-				for(int i = 0; i < ports.size(); i ++){
-					MidiOutputPort port = (MidiOutputPort)ports.get(i);
-					if(port.getKey().equals(this.outputPortKey)){
-						if(this.loadOutputPort(port)){
-							return;
-						}
-					}
-				}
-			}
-			if(getOutputPort() == null && !ports.isEmpty() && tryFirst){
-				this.loadOutputPort( (MidiOutputPort)ports.get(0) );
-			}
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-	}
-	
-	public void openSequencer(String key) {
-		this.openSequencer(key, false);
-	}
-	
-	public void openSequencer(String key, boolean tryFirst) {
-		try{
-			this.sequencerKey = key;
-			this.openSequencer(listSequencers(),tryFirst);
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-	}
-	
-	public void openSequencer(List sequencers ,boolean tryFirst) throws MidiPlayerException {
-		try{
-			if(this.sequencerKey != null && !this.isSequencerOpen(this.sequencerKey)){
-				this.closeSequencer();
-				for(int i = 0; i < sequencers.size(); i ++){
-					MidiSequencer sequencer = (MidiSequencer)sequencers.get(i);
-					if(sequencer.getKey().equals(this.sequencerKey)){
-						if(this.loadSequencer(sequencer)){
-							return;
-						}
-					}
-				}
-			}
-			
-			if(getSequencer() instanceof MidiSequencerEmpty && !sequencers.isEmpty() && tryFirst){
-				this.loadSequencer( (MidiSequencer) sequencers.get(0));
-			}
-			
-		}catch(Throwable throwable){
-			throw new MidiPlayerException(throwable.getMessage(),throwable);
-		}
-	}
-	
-	public List listOutputPorts() {
-		List ports = new ArrayList();
-		Iterator it = this.outputPortProviders.iterator();
-		while(it.hasNext()){
-			try{
-				MidiOutputPortProvider provider = (MidiOutputPortProvider)it.next();
-				ports.addAll(provider.listPorts());
-			}catch(Throwable throwable){
-				throwable.printStackTrace();
-			}
-		}
-		return ports;
-	}
-	
-	public List listSequencers(){
-		List sequencers = new ArrayList();
-		Iterator it = this.sequencerProviders.iterator();
-		while(it.hasNext()){
-			try{
-				MidiSequencerProvider provider = (MidiSequencerProvider)it.next();
-				sequencers.addAll(provider.listSequencers());
-			}catch(Throwable throwable){
-				throwable.printStackTrace();
-			}
-		}
-		return sequencers;
-	}
-	
-	public void closeSequencer() throws MidiPlayerException{
-		try{
-			if(this.isRunning()){
-				this.stop();
-			}
-			this.lock.lock();
-			if (this.sequencer != null) {
-				this.sequencer.close();
-				this.sequencer = null;
-			}
-			this.lock.unlock();
-		}catch(Throwable throwable){
-			throw new MidiPlayerException(throwable.getMessage(),throwable);
-		}
-	}
-	
-	public void closeOutputPort(){
-		try{
-			if(this.isRunning()){
-				this.stop();
-			}
-			this.lock.lock();
-			if (this.outputPort != null) {
-				this.getOutputTransmitter().removeReceiver(this.outputPort.getKey());
-				this.outputPort.close();
-				this.outputPort = null;
-			}
-			this.lock.unlock();
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-	}
-	
-	public boolean isSequencerOpen(String key){
-		if(key != null){
-			String currentKey = getSequencer().getKey();
-			if(currentKey == null){
-				return false;
-			}
-			return currentKey.equals(key);
-		}
-		return false;
-	}
-	
-	public boolean isOutputPortOpen(String key){
-		if(key != null && getOutputPort() != null ){
-			String currentKey = getOutputPort().getKey();
-			if(currentKey == null){
-				return false;
-			}
-			return currentKey.equals(key);
-		}
-		return false;
-	}
-	
-	public void addOutputPortProvider(MidiOutputPortProvider provider) throws MidiPlayerException {
-		this.addOutputPortProvider(provider, false);
-	}
-	
-	public void addOutputPortProvider(MidiOutputPortProvider provider, boolean tryFirst) throws MidiPlayerException {
-		this.outputPortProviders.add(provider);
-		this.openOutputPort(provider.listPorts(),tryFirst);
-	}
-	
-	public void addSequencerProvider(MidiSequencerProvider provider) throws MidiPlayerException {
-		this.addSequencerProvider(provider, false);
-	}
-	
-	public void addSequencerProvider(MidiSequencerProvider provider, boolean tryFirst) throws MidiPlayerException {
-		this.sequencerProviders.add(provider);
-		this.openSequencer(provider.listSequencers(), tryFirst);
-	}
-	
-	public void removeOutputPortProvider(MidiOutputPortProvider provider) throws MidiPlayerException {
-		this.outputPortProviders.remove(provider);
-		
-		MidiOutputPort current = getOutputPort();
-		if( current != null ){
-			Iterator it = provider.listPorts().iterator();
-			while(it.hasNext()){
-				MidiOutputPort port = (MidiOutputPort)it.next();
-				if(port.getKey().equals(current.getKey())){
-					closeOutputPort();
-					break;
-				}
-			}
-		}
-	}
-	
-	public void removeSequencerProvider(MidiSequencerProvider provider) throws MidiPlayerException {
-		this.sequencerProviders.remove(provider);
-		
-		MidiSequencer current = getSequencer();
-		if(!(current instanceof MidiSequencerEmpty) && current != null){
-			Iterator it = provider.listSequencers().iterator();
-			while(it.hasNext()){
-				MidiSequencer sequencer = (MidiSequencer)it.next();
-				if(current.getKey().equals(sequencer.getKey())){
-					closeSequencer();
-					break;
-				}
-			}
-		}
-	}
-	
-	public void addListener( MidiPlayerListener listener ){
-		if( !this.listeners.contains( listener ) ){
-			this.listeners.add( listener );
-		}
-	}
-	
-	public void removeListener( MidiPlayerListener listener ){
-		if( this.listeners.contains( listener ) ){
-			this.listeners.remove( listener );
-		}
-	}
-	
-	public void notifyStarted(){
-		Iterator it = this.listeners.iterator();
-		while( it.hasNext() ){
-			MidiPlayerListener listener = (MidiPlayerListener) it.next();
-			listener.notifyStarted();
-		}
-	}
-	
-	public void notifyStopped(){
-		Iterator it = this.listeners.iterator();
-		while( it.hasNext() ){
-			MidiPlayerListener listener = (MidiPlayerListener) it.next();
-			listener.notifyStopped();
-		}
-	}
-	
-	public void notifyLoop(){
-		Iterator it = this.listeners.iterator();
-		while( it.hasNext() ){
-			MidiPlayerListener listener = (MidiPlayerListener) it.next();
-			listener.notifyLoop();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerException.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerException.java
deleted file mode 100644
index 84a0356..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerException.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package org.herac.tuxguitar.player.base;
-
-public class MidiPlayerException extends Exception{
-	
-	private static final long serialVersionUID = 1L;
-	
-	public MidiPlayerException(String message) {
-		super(message);
-	}
-	
-	public MidiPlayerException(String message, Throwable cause) {
-		super(message, cause);
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerListener.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerListener.java
deleted file mode 100644
index d952ba7..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiPlayerListener.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package org.herac.tuxguitar.player.base;
-
-public interface MidiPlayerListener {
-	
-	public void notifyStarted();
-	
-	public void notifyStopped();
-	
-	public void notifyLoop();
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiReceiver.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiReceiver.java
deleted file mode 100644
index 261594d..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiReceiver.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.herac.tuxguitar.player.base;
-
-public interface MidiReceiver {
-	
-	public void sendSystemReset() throws MidiPlayerException;
-	
-	public void sendAllNotesOff() throws MidiPlayerException;
-	
-	public void sendNoteOn(int channel, int key, int velocity) throws MidiPlayerException;
-	
-	public void sendNoteOff(int channel, int key, int velocity) throws MidiPlayerException;
-	
-	public void sendProgramChange(int channel, int value) throws MidiPlayerException;
-	
-	public void sendControlChange(int channel, int controller, int value) throws MidiPlayerException;
-	
-	public void sendPitchBend(int channel, int value) throws MidiPlayerException;
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequenceHandler.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequenceHandler.java
deleted file mode 100644
index b4df394..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequenceHandler.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package org.herac.tuxguitar.player.base;
-
-import org.herac.tuxguitar.song.models.TGTimeSignature;
-
-public abstract class MidiSequenceHandler {
-	
-	private int tracks;
-	
-	public MidiSequenceHandler(int tracks){
-		this.tracks = tracks;
-	}
-	
-	public int getTracks() {
-		return this.tracks;
-	}
-	
-	public abstract void addNoteOn(long tick,int track,int channel,int note,int velocity);
-	
-	public abstract void addNoteOff(long tick,int track,int channel,int note,int velocity);
-	
-	public abstract void addControlChange(long tick,int track,int channel,int controller,int value);
-	
-	public abstract void addProgramChange(long tick,int track,int channel,int instrument);
-	
-	public abstract void addPitchBend(long tick,int track,int channel,int value);
-	
-	public abstract void addTempoInUSQ(long tick,int track,int usq);
-	
-	public abstract void addTimeSignature(long tick,int track,TGTimeSignature ts);
-	
-	public abstract void notifyFinish();
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequenceParser.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequenceParser.java
deleted file mode 100644
index 1f527dc..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequenceParser.java
+++ /dev/null
@@ -1,816 +0,0 @@
-/*
- * Created on 13-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.player.base;
-
-import java.util.List;
-
-import org.herac.tuxguitar.song.managers.TGSongManager;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGStroke;
-import org.herac.tuxguitar.song.models.TGTempo;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGVelocities;
-import org.herac.tuxguitar.song.models.TGVoice;
-import org.herac.tuxguitar.song.models.effects.TGEffectBend;
-import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
-
-/**
- * @author julian
- * 
- * TODO To change the template for this generated type comment go to Window - Preferences - Java - Code Style - Code Templates
- */
-public class MidiSequenceParser {
-	
-	private static final int DEFAULT_METRONOME_KEY = 37;
-	
-	private static final int DEFAULT_DURATION_PM = 60;
-	
-	private static final int DEFAULT_DURATION_DEAD = 30;
-	
-	private static final int DEFAULT_BEND = 64;
-	
-	private static final float DEFAULT_BEND_SEMI_TONE = 2.75f;
-	
-	/**
-	 * flag para agregar los controles por defecto, 
-	 * no se recomienda usar este flag si el reproductor asigna estos controles en tiempo real.
-	 */
-	public static final int ADD_DEFAULT_CONTROLS = 0x01;
-	/**
-	 * flag para agregar los valores del mixer (volumen, balance, instrumento),
-	 * no se recomienda usar este flag si el reproductor asigna estos valores en tiempo real.
-	 */
-	public static final int ADD_MIXER_MESSAGES = 0x02;
-	/**
-	 * flag para agregar la pista del metronomo,
-	 * en casos como la exportacion de midi, este flag no sera necesario
-	 */
-	public static final int ADD_METRONOME = 0x04;
-	/**
-	 * tuxguitar usa como primer tick el valor de la constante Duration.QUARTER_TIME
-	 * asignando este flag, es posible crear el primer tick en cero.
-	 */
-	public static final int ADD_FIRST_TICK_MOVE = 0x08;
-	
-	public static final int DEFAULT_PLAY_FLAGS = (ADD_METRONOME);
-	
-	public static final int DEFAULT_EXPORT_FLAGS = (ADD_FIRST_TICK_MOVE | ADD_DEFAULT_CONTROLS | ADD_MIXER_MESSAGES);
-	
-	/**
-	 * Song Manager
-	 */
-	private TGSongManager manager;
-	/**
-	 * flags
-	 */
-	private int flags;
-	/**
-	 * Index of info track
-	 */
-	private int infoTrack;
-	/**
-	 * Index of metronome track
-	 */
-	private int metronomeTrack;
-	
-	private int firstTickMove;
-	
-	private int tempoPercent;
-	
-	private int transpose;
-	
-	private int sHeader;
-	
-	private int eHeader;
-	
-	public MidiSequenceParser(TGSongManager manager,int flags,int tempoPercent,int transpose) {
-		this.manager = manager;
-		this.flags = flags;
-		this.transpose = transpose;
-		this.tempoPercent = tempoPercent;
-		this.firstTickMove = (int)(((flags & ADD_FIRST_TICK_MOVE) != 0)?(-TGDuration.QUARTER_TIME):0);
-		this.sHeader = -1;
-		this.eHeader = -1;
-	}
-	
-	public MidiSequenceParser(TGSongManager manager,int flags) {
-		this(manager,flags,100,0);
-	}
-	
-	/**
-	 * Crea la cancion
-	 */
-	public void parse(MidiSequenceHandler sequence) {
-		this.infoTrack = 0;
-		this.metronomeTrack = (sequence.getTracks() - 1);
-		addDefaultMessages(sequence);
-		for (int i = 0; i < this.manager.getSong().countTracks(); i++) {
-			TGTrack songTrack = this.manager.getSong().getTrack(i);
-			createTrack(sequence,songTrack);
-		}
-		sequence.notifyFinish();
-	}
-	
-	public int getInfoTrack(){
-		return this.infoTrack;
-	}
-	
-	public int getMetronomeTrack(){
-		return this.metronomeTrack;
-	}
-	
-	private long getTick(long tick){
-		return (tick + this.firstTickMove);
-	}
-	
-	public void setSHeader(int header) {
-		this.sHeader = header;
-	}
-	
-	public void setEHeader(int header) {
-		this.eHeader = header;
-	}
-	
-	private int fix( int value ){
-		return ( value >= 0 ? value <= 127 ? value : 127 : 0 );
-	}
-	/**
-	 * Crea las pistas de la cancion
-	 */
-	private void createTrack(MidiSequenceHandler sequence,TGTrack track) {
-		TGMeasure previous = null;
-		MidiRepeatController controller = new MidiRepeatController(track.getSong(),this.sHeader,this.eHeader);
-		
-		addBend(sequence,track.getNumber(),TGDuration.QUARTER_TIME,DEFAULT_BEND,track.getChannel().getChannel());
-		makeChannel(sequence, track.getChannel(), track.getNumber());
-		while(!controller.finished()){
-			TGMeasure measure = track.getMeasure(controller.getIndex());
-			int index = controller.getIndex();
-			long move = controller.getRepeatMove();
-			controller.process();
-			if(controller.shouldPlay()){
-				if(track.getNumber() == 1){
-					addTimeSignature(sequence,measure, previous,move);
-					addTempo(sequence,measure, previous,move);
-					addMetronome(sequence,measure.getHeader(),move);
-				}
-				//agrego los pulsos
-				makeBeats(sequence, track, measure,index, move);
-				
-				previous = measure;
-			}
-		}
-	}
-	
-	private void makeBeats(MidiSequenceHandler sequence, TGTrack track, TGMeasure measure, int measureIdx, long startMove) {
-		int[] stroke = new int[track.stringCount()];
-		TGBeat previous = null;
-		for (int bIndex = 0; bIndex < measure.countBeats(); bIndex++) {
-			TGBeat beat = measure.getBeat(bIndex);
-			makeNotes(sequence, track, beat, measure.getTempo(), measureIdx, bIndex, startMove, getStroke(beat, previous, stroke) );
-			previous = beat;
-		}
-	}
-	
-	/**
-	 * Crea las notas del compas
-	 */
-	private void makeNotes(MidiSequenceHandler sequence, TGTrack track, TGBeat beat, TGTempo tempo, int measureIdx,int bIndex, long startMove, int[] stroke) {
-		int trackId = track.getNumber();
-		for( int vIndex = 0; vIndex < beat.countVoices(); vIndex ++ ){
-			TGVoice voice = beat.getVoice(vIndex);
-			
-			BeatData data = checkTripletFeel(voice,bIndex);
-			for (int noteIdx = 0; noteIdx < voice.countNotes(); noteIdx++) {
-				TGNote note = voice.getNote(noteIdx);
-				if (!note.isTiedNote()) {
-					int key = (this.transpose + track.getOffset() + note.getValue() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue());
-					
-					
-					//long start = data.getStart() + startMove;
-					//long duration = getRealNoteDuration(note,data.getDuration(), songTrack, measureIdx,bIndex);
-					long start = applyStrokeStart(note, (data.getStart() + startMove) , stroke);
-					long duration = applyStrokeDuration(note, getRealNoteDuration(track, note, tempo, data.getDuration(), measureIdx,bIndex), stroke);
-					
-					int velocity = getRealVelocity(note, track, measureIdx, bIndex);
-					int channel = track.getChannel().getChannel();
-					int effectChannel = track.getChannel().getEffectChannel();
-					
-					boolean percussionTrack = track.isPercussionTrack();
-					//---Fade In---
-					if(note.getEffect().isFadeIn()){
-						channel = effectChannel;
-						makeFadeIn(sequence,trackId, start, duration, track.getChannel().getVolume(), channel);
-					}
-					//---Grace---
-					if(note.getEffect().isGrace() && effectChannel >= 0 && !percussionTrack ){
-						channel = effectChannel;
-						int graceKey = track.getOffset() + note.getEffect().getGrace().getFret() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue();
-						int graceLength = note.getEffect().getGrace().getDurationTime();
-						int graceVelocity = note.getEffect().getGrace().getDynamic();
-						long graceDuration = ((note.getEffect().getGrace().isDead())?applyStaticDuration(tempo, DEFAULT_DURATION_DEAD, graceLength):graceLength);
-						
-						if(note.getEffect().getGrace().isOnBeat() || (start - graceLength) < TGDuration.QUARTER_TIME){
-							start += graceLength;
-							duration -= graceLength;
-						}
-						makeNote(sequence,trackId, graceKey,start - graceLength,graceDuration,graceVelocity,channel);
-						
-					}
-					//---Trill---
-					if(note.getEffect().isTrill() && effectChannel >= 0 && !percussionTrack ){
-						int trillKey = track.getOffset() + note.getEffect().getTrill().getFret() + ((TGString)track.getStrings().get(note.getString() - 1)).getValue();
-						long trillLength = note.getEffect().getTrill().getDuration().getTime();
-						
-						boolean realKey = true;
-						long tick = start;
-						while(true){
-							if(tick + 10 >= (start + duration)){
-								break ;
-							}else if( (tick + trillLength) >= (start + duration)){
-								trillLength = (((start + duration) - tick) - 1);
-							}
-							makeNote(sequence,trackId,((realKey)?key:trillKey),tick,trillLength,velocity,channel);
-							realKey = (!realKey);
-							tick += trillLength;
-						}
-						continue;
-					}
-					//---Tremolo Picking---
-					if(note.getEffect().isTremoloPicking() && effectChannel >= 0){
-						long tpLength = note.getEffect().getTremoloPicking().getDuration().getTime();
-						long tick = start;
-						while(true){
-							if(tick + 10 >= (start + duration)){
-								break ;
-							}else if( (tick + tpLength) >= (start + duration)){
-								tpLength = (((start + duration) - tick) - 1);
-							}
-							makeNote(sequence,trackId,key,tick,tpLength,velocity,channel);
-							tick += tpLength;
-						}
-						continue;
-					}
-					
-					//---Bend---
-					if(note.getEffect().isBend() && effectChannel >= 0 && !percussionTrack ){
-						channel = effectChannel;
-						makeBend(sequence,trackId,start,duration,note.getEffect().getBend(),channel);
-					}
-					//---TremoloBar---
-					else if(note.getEffect().isTremoloBar() && effectChannel >= 0 && !percussionTrack ){
-						channel = effectChannel;
-						makeTremoloBar(sequence,trackId,start,duration,note.getEffect().getTremoloBar(),channel);
-					}
-					//---Slide---
-					else if(note.getEffect().isSlide() && effectChannel >= 0 && !percussionTrack){
-						channel = effectChannel;
-						TGNote nextNote = getNextNote(note,track,measureIdx,bIndex,true);
-						makeSlide(sequence,trackId,note,nextNote,startMove,channel);
-					}
-					//---Vibrato---
-					else if(note.getEffect().isVibrato() && effectChannel >= 0 && !percussionTrack){
-						channel = effectChannel;
-						makeVibrato(sequence,trackId,start,duration,channel);
-					}
-					//---Harmonic---
-					if(note.getEffect().isHarmonic() && !percussionTrack){
-						int orig = key;
-						
-						//Natural
-						if(note.getEffect().getHarmonic().isNatural()){
-							for(int i = 0;i < TGEffectHarmonic.NATURAL_FREQUENCIES.length;i ++){
-								if((note.getValue() % 12) ==  (TGEffectHarmonic.NATURAL_FREQUENCIES[i][0] % 12) ){
-									key = ((orig + TGEffectHarmonic.NATURAL_FREQUENCIES[i][1]) - note.getValue());
-									break;
-								}
-							}
-						}
-						//Artifical/Tapped/Pinch/Semi
-						else{
-							if(note.getEffect().getHarmonic().isSemi() && !percussionTrack){
-								makeNote(sequence,trackId,Math.min(127,orig), start, duration,Math.max(TGVelocities.MIN_VELOCITY,velocity - (TGVelocities.VELOCITY_INCREMENT * 3)),channel);
-							}
-							key = (orig + TGEffectHarmonic.NATURAL_FREQUENCIES[note.getEffect().getHarmonic().getData()][1]);
-							
-						}
-						if( (key - 12) > 0 ){
-							int hVelocity = Math.max(TGVelocities.MIN_VELOCITY,velocity - (TGVelocities.VELOCITY_INCREMENT * 4));
-							makeNote(sequence,trackId,(key - 12), start, duration,hVelocity,channel);
-						}
-					}
-					
-					//---Normal Note---
-					makeNote(sequence,trackId, Math.min(127,key), start, duration, velocity,channel);
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Crea una nota en la posicion start
-	 */
-	private void makeNote(MidiSequenceHandler sequence,int track, int key, long start, long duration, int velocity, int channel) {
-		sequence.addNoteOn(getTick(start),track,channel,fix(key),fix(velocity));
-		sequence.addNoteOff(getTick(start + duration),track,channel,fix(key),fix(velocity));
-	}
-	
-	private void makeChannel(MidiSequenceHandler sequence,TGChannel channel,int track) {
-		if( (this.flags & ADD_MIXER_MESSAGES) != 0){
-			makeChannel(sequence, channel, track,true);
-			if(channel.getChannel() != channel.getEffectChannel()){
-				makeChannel(sequence, channel, track,false);
-			}
-		}
-	}
-	
-	private void makeChannel(MidiSequenceHandler sequence,TGChannel channel,int track,boolean primary) {
-		int number = (primary?channel.getChannel():channel.getEffectChannel());
-		sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.VOLUME,fix(channel.getVolume()));
-		sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.BALANCE,fix(channel.getBalance()));
-		sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.CHORUS,fix(channel.getChorus()));
-		sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.REVERB,fix(channel.getReverb()));
-		sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.PHASER,fix(channel.getPhaser()));
-		sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.TREMOLO,fix(channel.getTremolo()));
-		sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),track,number,MidiControllers.EXPRESSION, 127);
-		sequence.addProgramChange(getTick(TGDuration.QUARTER_TIME),track,number,fix(channel.getInstrument()));
-	}
-	/**
-	 * Agrega un Time Signature si es distinto al anterior
-	 */
-	private void addTimeSignature(MidiSequenceHandler sequence,TGMeasure currMeasure, TGMeasure prevMeasure,long startMove){
-		boolean addTimeSignature = false;
-		if (prevMeasure == null) {
-			addTimeSignature = true;
-		} else {
-			int currNumerator = currMeasure.getTimeSignature().getNumerator();
-			int currValue = currMeasure.getTimeSignature().getDenominator().getValue();
-			int prevNumerator = prevMeasure.getTimeSignature().getNumerator();
-			int prevValue = prevMeasure.getTimeSignature().getDenominator().getValue();
-			if (currNumerator != prevNumerator || currValue != prevValue) {
-				addTimeSignature = true;
-			}
-		}
-		if (addTimeSignature) {
-			sequence.addTimeSignature(getTick(currMeasure.getStart() + startMove), getInfoTrack(), currMeasure.getTimeSignature());
-		}
-	}
-	
-	/**
-	 * Agrega un Tempo si es distinto al anterior
-	 */
-	private void addTempo(MidiSequenceHandler sequence,TGMeasure currMeasure, TGMeasure prevMeasure,long startMove){
-		boolean addTempo = false;
-		if (prevMeasure == null) {
-			addTempo = true;
-		} else {
-			if (currMeasure.getTempo().getInUSQ() != prevMeasure.getTempo().getInUSQ()) {
-				addTempo = true;
-			}
-		}
-		if (addTempo) {
-			int usq = (int)(currMeasure.getTempo().getInUSQ() * 100.00 / this.tempoPercent );
-			sequence.addTempoInUSQ(getTick(currMeasure.getStart() + startMove), getInfoTrack(), usq);
-		}
-	}
-	
-	/**
-	 * Retorna la Duracion real de una nota, verificando si tiene otras ligadas
-	 */
-	private long getRealNoteDuration(TGTrack track, TGNote note, TGTempo tempo, long duration,int mIndex, int bIndex) {
-		long lastEnd = (note.getVoice().getBeat().getStart() + note.getVoice().getDuration().getTime());
-		long realDuration = duration;
-		int nextBIndex = (bIndex + 1);
-		int measureCount = ( this.eHeader == -1 ? track.countMeasures() : Math.min( this.eHeader, track.countMeasures() ) );
-		for (int m = mIndex; m < measureCount; m++) {
-			TGMeasure measure = track.getMeasure( m );
-			int beatCount = measure.countBeats();
-			for (int b = nextBIndex; b < beatCount; b++) {
-				TGBeat beat = measure.getBeat(b);
-				TGVoice voice = beat.getVoice(note.getVoice().getIndex());
-				if(voice.isRestVoice()){
-					return applyDurationEffects(note, tempo, realDuration);
-				}
-				int noteCount = voice.countNotes();
-				for (int n = 0; n < noteCount; n++) {
-					TGNote nextNote = voice.getNote( n );
-					if (!nextNote.equals(note)) {
-						if (nextNote.getString() == note.getString()) {
-							if (nextNote.isTiedNote()) {
-								realDuration += (beat.getStart() - lastEnd) + (nextNote.getVoice().getDuration().getTime());
-								lastEnd = (beat.getStart() + voice.getDuration().getTime());
-							} else {
-								return applyDurationEffects(note, tempo, realDuration);
-							}
-						}
-					}
-				}
-			}
-			nextBIndex = 0;
-		}
-		return applyDurationEffects(note, tempo, realDuration);
-	}
-	
-	private long applyDurationEffects(TGNote note, TGTempo tempo, long duration){
-		//dead note
-		if(note.getEffect().isDeadNote()){
-			return applyStaticDuration(tempo, DEFAULT_DURATION_DEAD, duration);
-		}
-		//palm mute
-		if(note.getEffect().isPalmMute()){
-			return applyStaticDuration(tempo, DEFAULT_DURATION_PM, duration);
-		}
-		//staccato
-		if(note.getEffect().isStaccato()){
-			return (long)(duration * 50.00 / 100.00);
-		}
-		return duration;
-	}
-	
-	private long applyStaticDuration(TGTempo tempo, long duration, long maximum ){
-		long value = ( tempo.getValue() * duration / 60 );
-		return (value < maximum ? value : maximum );
-	}
-	
-	private int getRealVelocity(TGNote note, TGTrack songTrack, int mIndex,int bIndex){
-		int velocity = note.getVelocity();
-		
-		//Check for Hammer effect
-		if(!songTrack.isPercussionTrack()){
-			TGNote prevNote = getPreviousNote(note,songTrack,mIndex,bIndex,false);
-			if(prevNote != null && prevNote.getEffect().isHammer()){
-				velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity - 25));
-			}
-		}
-		
-		//Check for GhostNote effect
-		if(note.getEffect().isGhostNote()){
-			velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity - TGVelocities.VELOCITY_INCREMENT));
-		}else if(note.getEffect().isAccentuatedNote()){
-			velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity + TGVelocities.VELOCITY_INCREMENT));
-		}else if(note.getEffect().isHeavyAccentuatedNote()){
-			velocity = Math.max(TGVelocities.MIN_VELOCITY,(velocity + (TGVelocities.VELOCITY_INCREMENT * 2)));
-		}
-		
-		return ((velocity > 127)?127:velocity);
-	}
-	
-	public void addMetronome(MidiSequenceHandler sequence,TGMeasureHeader header, long startMove){
-		if( (this.flags & ADD_METRONOME) != 0) {
-		
-			long start = (startMove + header.getStart());
-			long length = header.getTimeSignature().getDenominator().getTime();
-			for(int i = 1; i <= header.getTimeSignature().getNumerator();i ++){
-				makeNote(sequence,getMetronomeTrack(),DEFAULT_METRONOME_KEY,start,length,TGVelocities.DEFAULT,9);
-				start += length;
-			}
-		}
-	}
-	
-	public void addDefaultMessages(MidiSequenceHandler sequence) {
-		if( (this.flags & ADD_DEFAULT_CONTROLS) != 0) {
-			for(int i = 0; i < 16; i ++){
-				sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),i,MidiControllers.RPN_MSB,0);
-				sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),i,MidiControllers.RPN_LSB,0);
-				sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),i,MidiControllers.DATA_ENTRY_MSB,12);
-				sequence.addControlChange(getTick(TGDuration.QUARTER_TIME),getInfoTrack(),i,MidiControllers.DATA_ENTRY_LSB, 0);
-			}
-		}
-	}
-	
-	private void addBend(MidiSequenceHandler sequence,int track, long tick,int bend, int channel) {
-		sequence.addPitchBend(getTick(tick),track,channel,fix(bend));
-	}
-	
-	public void makeVibrato(MidiSequenceHandler sequence,int track,long start, long duration,int channel){
-		long nextStart = start;
-		long end = nextStart + duration;
-		
-		while(nextStart < end){
-			nextStart = ((nextStart + 160 > end)?end:nextStart + 160);
-			addBend(sequence,track,nextStart,DEFAULT_BEND,channel);
-			nextStart = ((nextStart + 160 > end)?end:nextStart + 160);
-			addBend(sequence,track,nextStart,DEFAULT_BEND + (int)(DEFAULT_BEND_SEMI_TONE / 2.0f),channel);
-		}
-		addBend(sequence,track,nextStart,DEFAULT_BEND,channel);
-	}
-	
-	public void makeBend(MidiSequenceHandler sequence,int track,long start, long duration, TGEffectBend bend, int channel){
-		List points = bend.getPoints();
-		for(int i=0;i<points.size();i++){
-			TGEffectBend.BendPoint point = (TGEffectBend.BendPoint)points.get(i);
-			long bendStart = start + point.getTime(duration);
-			int value = DEFAULT_BEND + (int)(point.getValue() * DEFAULT_BEND_SEMI_TONE / TGEffectBend.SEMITONE_LENGTH);
-			value = ((value <= 127)?value:127);
-			value = ((value >= 0)?value:0);
-			addBend(sequence,track,bendStart,value,channel);
-			
-			if(points.size() > i + 1){
-				TGEffectBend.BendPoint nextPoint = (TGEffectBend.BendPoint)points.get(i + 1);
-				int nextValue = DEFAULT_BEND + (int)(nextPoint.getValue() * DEFAULT_BEND_SEMI_TONE / TGEffectBend.SEMITONE_LENGTH);
-				long nextBendStart = start + nextPoint.getTime(duration);
-				if(nextValue != value){
-					double width = ( (nextBendStart - bendStart) / Math.abs(  (nextValue - value) ) );
-					//ascendente
-					if(value < nextValue){
-						while(value < nextValue){
-							value ++;
-							bendStart +=width;
-							addBend(sequence,track,bendStart,((value <= 127)?value:127),channel);
-						}
-						//descendente
-					}else if(value > nextValue){
-						while(value > nextValue){
-							value --;
-							bendStart +=width;
-							addBend(sequence,track,bendStart,((value >= 0)?value:0),channel);
-						}
-					}
-				}
-			}
-		}
-		addBend(sequence,track,start + duration,DEFAULT_BEND,channel);
-	}
-	
-	public void makeTremoloBar(MidiSequenceHandler sequence,int track,long start, long duration, TGEffectTremoloBar effect, int channel){
-		List points = effect.getPoints();
-		for(int i=0;i<points.size();i++){
-			TGEffectTremoloBar.TremoloBarPoint point = (TGEffectTremoloBar.TremoloBarPoint)points.get(i);
-			long pointStart = start + point.getTime(duration);
-			int value = DEFAULT_BEND + (int)(point.getValue() * (DEFAULT_BEND_SEMI_TONE * 2) );
-			value = ((value <= 127)?value:127);
-			value = ((value >= 0)?value:0);
-			addBend(sequence,track,pointStart,value,channel);
-			if(points.size() > i + 1){
-				TGEffectTremoloBar.TremoloBarPoint nextPoint = (TGEffectTremoloBar.TremoloBarPoint)points.get(i + 1);
-				int nextValue = DEFAULT_BEND + (int)(nextPoint.getValue() * (DEFAULT_BEND_SEMI_TONE * 2));
-				long nextPointStart = start + nextPoint.getTime(duration);
-				if(nextValue != value){
-					double width = ( (nextPointStart - pointStart) / Math.abs(  (nextValue - value) ) );
-					//ascendente
-					if(value < nextValue){
-						while(value < nextValue){
-							value ++;
-							pointStart +=width;
-							addBend(sequence,track,pointStart,((value <= 127)?value:127),channel);
-						}
-					//descendente
-					}else if(value > nextValue){
-						while(value > nextValue){
-							value --;
-							pointStart += width;
-							addBend(sequence,track,pointStart,((value >= 0)?value:0),channel);
-						}
-					}
-				}
-			}
-		}
-		addBend(sequence,track,start + duration,DEFAULT_BEND,channel);
-	}
-	
-	public void makeSlide(MidiSequenceHandler sequence,int track,TGNote note,TGNote nextNote,long startMove,int channel){
-		if(nextNote != null){
-			makeSlide(sequence,track,note.getVoice().getBeat().getStart()+startMove,note.getValue(),nextNote.getVoice().getBeat().getStart() + startMove,nextNote.getValue(),channel);
-			addBend(sequence,track,nextNote.getVoice().getBeat().getStart() + startMove,DEFAULT_BEND,channel);
-		}
-	}
-	
-	public void makeSlide(MidiSequenceHandler sequence,int track,long tick1,int value1,long tick2,int value2,int channel){
-		long distance = (value2 - value1);
-		long length = (tick2 - tick1);
-		int points = (int)(length / (TGDuration.QUARTER_TIME / 8));
-		for(int i = 1;i <= points; i ++){
-			float tone = ((((length / points) * (float)i) * distance) / length);
-			int bend = (DEFAULT_BEND + (int)(tone * (DEFAULT_BEND_SEMI_TONE * 2)));
-			addBend(sequence,track,tick1 + ( (length / points) * i),bend,channel);
-		}
-	}
-	
-	private void makeFadeIn(MidiSequenceHandler sequence,int track,long start,long duration,int volume3,int channel){
-		int expression = 31;
-		int expressionIncrement = 1;
-		long tick = start;
-		long tickIncrement = (duration / ((127 - expression) / expressionIncrement));
-		while( tick < (start + duration) && expression < 127 ) {
-			sequence.addControlChange(getTick(tick),track,channel,MidiControllers.EXPRESSION, fix(expression));
-			tick += tickIncrement;
-			expression += expressionIncrement;
-		}
-		sequence.addControlChange(getTick((start + duration)),track,channel, MidiControllers.EXPRESSION, 127);
-	}
-	
-	private int[] getStroke(TGBeat beat, TGBeat previous, int[] stroke){
-		int direction = beat.getStroke().getDirection();
-		if( previous == null || !(direction == TGStroke.STROKE_NONE && previous.getStroke().getDirection() == TGStroke.STROKE_NONE)){
-			if( direction == TGStroke.STROKE_NONE ){
-				for( int i = 0 ; i < stroke.length ; i ++ ){
-					stroke[ i ] = 0;
-				}
-			}else{
-				int stringUseds = 0;
-				int stringCount = 0;
-				for( int vIndex = 0; vIndex < beat.countVoices(); vIndex ++ ){
-					TGVoice voice = beat.getVoice(vIndex);
-					for (int nIndex = 0; nIndex < voice.countNotes(); nIndex++) {
-						TGNote note = voice.getNote(nIndex);
-						if( !note.isTiedNote() ){
-							stringUseds |= 0x01 << ( note.getString() - 1 );
-							stringCount ++;
-						}
-					}
-				}
-				if( stringCount > 0 ){
-					int strokeMove = 0;
-					int strokeIncrement = beat.getStroke().getIncrementTime(beat);
-					for( int i = 0 ; i < stroke.length ; i ++ ){
-						int index = ( direction == TGStroke.STROKE_DOWN ? (stroke.length - 1) - i : i );
-						if( (stringUseds & ( 0x01 << index ) ) != 0 ){
-							stroke[ index ] = strokeMove;
-							strokeMove += strokeIncrement;
-						}
-					}
-				}
-			}
-		}
-		return stroke;
-	}
-	
-	private long applyStrokeStart( TGNote note, long start , int[] stroke){
-		return (start + stroke[ note.getString() - 1 ]);
-	}
-	
-	private long applyStrokeDuration( TGNote note, long duration , int[] stroke){
-		return (duration - stroke[ note.getString() - 1 ]);
-	}
-	
-	private BeatData checkTripletFeel(TGVoice voice,int bIndex){
-		long bStart = voice.getBeat().getStart();
-		long bDuration =  voice.getDuration().getTime();
-		if(voice.getBeat().getMeasure().getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_EIGHTH){
-			if(voice.getDuration().isEqual(newDuration(TGDuration.EIGHTH))){
-				//first time
-				if( (bStart % TGDuration.QUARTER_TIME) == 0){
-					TGVoice v = getNextBeat(voice,bIndex);
-					if(v == null || ( v.getBeat().getStart() > (bStart + voice.getDuration().getTime()) || v.getDuration().isEqual(newDuration(TGDuration.EIGHTH)))  ){
-						TGDuration duration = newDuration(TGDuration.EIGHTH);
-						duration.getDivision().setEnters(3);
-						duration.getDivision().setTimes(2);
-						bDuration = (duration.getTime() * 2);
-					}
-				}
-				//second time
-				else if( (bStart % (TGDuration.QUARTER_TIME / 2)) == 0){
-					TGVoice v = getPreviousBeat(voice,bIndex);
-					if(v == null || ( v.getBeat().getStart() < (bStart - voice.getDuration().getTime())  || v.getDuration().isEqual(newDuration(TGDuration.EIGHTH)) )){
-						TGDuration duration = newDuration(TGDuration.EIGHTH);
-						duration.getDivision().setEnters(3);
-						duration.getDivision().setTimes(2);
-						bStart = ( (bStart - voice.getDuration().getTime()) + (duration.getTime() * 2));
-						bDuration = duration.getTime();
-					}
-				}
-			}
-		}else if(voice.getBeat().getMeasure().getTripletFeel() == TGMeasureHeader.TRIPLET_FEEL_SIXTEENTH){
-			if(voice.getDuration().isEqual(newDuration(TGDuration.SIXTEENTH))){
-				//first time
-				if( (bStart % (TGDuration.QUARTER_TIME / 2)) == 0){
-					TGVoice v = getNextBeat(voice,bIndex);
-					if(v == null || ( v.getBeat().getStart() > (bStart + voice.getDuration().getTime()) || v.getDuration().isEqual(newDuration(TGDuration.SIXTEENTH)))  ){
-						TGDuration duration = newDuration(TGDuration.SIXTEENTH);
-						duration.getDivision().setEnters(3);
-						duration.getDivision().setTimes(2);
-						bDuration = (duration.getTime() * 2);
-					}
-				}
-				//second time
-				else if( (bStart % (TGDuration.QUARTER_TIME / 4)) == 0){
-					TGVoice v = getPreviousBeat(voice,bIndex);
-					if(v == null || ( v.getBeat().getStart() < (bStart - voice.getDuration().getTime())  || v.getDuration().isEqual(newDuration(TGDuration.SIXTEENTH)) )){
-						TGDuration duration = newDuration(TGDuration.SIXTEENTH);
-						duration.getDivision().setEnters(3);
-						duration.getDivision().setTimes(2);
-						bStart = ( (bStart - voice.getDuration().getTime()) + (duration.getTime() * 2));
-						bDuration = duration.getTime();
-					}
-				}
-			}
-		}
-		return new BeatData(bStart, bDuration);
-	}
-	
-	private TGDuration newDuration(int value){
-		TGDuration duration = this.manager.getFactory().newDuration();
-		duration.setValue(value);
-		return duration;
-	}
-	
-	private TGVoice getPreviousBeat(TGVoice beat,int bIndex){
-		TGVoice previous = null;
-		for (int b = bIndex - 1; b >= 0; b--) {
-			TGBeat current = beat.getBeat().getMeasure().getBeat( b );
-			if(current.getStart() < beat.getBeat().getStart() && !current.getVoice(beat.getIndex()).isEmpty()){
-				if(previous == null || current.getStart() > previous.getBeat().getStart()){
-					previous = current.getVoice(beat.getIndex());
-				}
-			}
-		}
-		return previous;
-	}
-	
-	private TGVoice getNextBeat(TGVoice beat,int bIndex){
-		TGVoice next = null;
-		for (int b = bIndex + 1; b < beat.getBeat().getMeasure().countBeats(); b++) {
-			TGBeat current = beat.getBeat().getMeasure().getBeat( b );
-			if(current.getStart() > beat.getBeat().getStart() && !current.getVoice(beat.getIndex()).isEmpty()){
-				if(next == null || current.getStart() < next.getBeat().getStart()){
-					next = current.getVoice(beat.getIndex());
-				}
-			}
-		}
-		return next;
-	}
-	
-	private TGNote getNextNote(TGNote note,TGTrack track, int mIndex, int bIndex, boolean breakAtRest){ 
-		int nextBIndex = (bIndex + 1);
-		int measureCount = ( this.eHeader == -1 ? track.countMeasures() : Math.min( this.eHeader, track.countMeasures() ) );
-		for (int m = mIndex; m < measureCount; m++) {
-			TGMeasure measure = track.getMeasure( m );
-			int beatCount = measure.countBeats();
-			for (int b = nextBIndex; b < beatCount; b++) {
-				TGBeat beat = measure.getBeat( b );
-				TGVoice voice = beat.getVoice( note.getVoice().getIndex() );
-				if( !voice.isEmpty() ){
-					int noteCount = voice.countNotes();
-					for (int n = 0; n < noteCount; n++) {
-						TGNote currNote = voice.getNote( n );
-						if(currNote.getString() == note.getString()){
-							return currNote;
-						}
-					}
-					if( breakAtRest ){
-						return null;
-					}
-				}
-			}
-			nextBIndex = 0;
-		}
-		return null;
-	}
-	
-	private TGNote getPreviousNote(TGNote note,TGTrack track, int mIndex, int bIndex, boolean breakAtRest){
-		int nextBIndex = bIndex;
-		for (int m = mIndex; m >= 0; m--) {
-			TGMeasure measure = track.getMeasure( m );
-			if( this.sHeader == -1 || this.sHeader <= measure.getNumber() ){
-				nextBIndex = (nextBIndex < 0 ? measure.countBeats() : nextBIndex);
-				for (int b = (nextBIndex - 1); b >= 0; b--) {
-					TGBeat beat = measure.getBeat( b );
-					TGVoice voice = beat.getVoice( note.getVoice().getIndex() );
-					if( !voice.isEmpty() ){
-						int noteCount = voice.countNotes();
-						for (int n = 0; n < noteCount; n ++) {
-							TGNote current = voice.getNote( n );
-							if(current.getString() == note.getString()){
-								return current;
-							}
-						}
-						if( breakAtRest ){
-							return null;
-						}
-					}
-				}
-			}
-			nextBIndex = -1;
-		}
-		return null;
-	}
-	
-	private class BeatData{
-		private long start;
-		private long duration;
-		
-		public BeatData(long start,long duration){
-			this.start = start;
-			this.duration = duration;
-		}
-		
-		public long getDuration() {
-			return this.duration;
-		}
-		
-		public long getStart() {
-			return this.start;
-		}
-	}
-}
\ No newline at end of file
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencerEmpty.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencerEmpty.java
deleted file mode 100644
index 9614fc4..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiSequencerEmpty.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package org.herac.tuxguitar.player.base;
-
-import org.herac.tuxguitar.song.models.TGTimeSignature;
-
-public class MidiSequencerEmpty implements MidiSequencer{
-	
-	public void open() {
-		// Not implemented
-	}	
-	
-	public void close() {
-		// Not implemented
-	}
-	
-	public void check() {
-		// Not implemented
-	}
-	
-	public MidiSequenceHandler createSequence(int tracks) {
-		return new MidiSequenceHandler(tracks) {
-			
-			public void notifyFinish() {
-				// Not implemented
-			}
-			
-			public void addTimeSignature(long tick, int track, TGTimeSignature ts) {
-				// Not implemented
-			}
-			
-			public void addTempoInUSQ(long tick, int track, int usq) {
-				// Not implemented
-			}
-			
-			public void addProgramChange(long tick, int track, int channel,int instrument) {
-				// Not implemented
-			}
-			
-			public void addPitchBend(long tick, int track, int channel, int value) {
-				// Not implemented
-			}
-			
-			public void addNoteOn(long tick, int track, int channel, int note,int velocity) {
-				// Not implemented
-			}
-			
-			public void addNoteOff(long tick, int track, int channel, int note,int velocity) {
-				// Not implemented
-			}
-			
-			public void addControlChange(long tick, int track, int channel,int controller, int value) {
-				// Not implemented
-			}
-		};
-	}
-	
-	public void setTransmitter(MidiTransmitter transmitter) throws MidiPlayerException {
-		// Not implemented
-	}
-	
-	public long getTickLength() {
-		// Not implemented
-		return 0;
-	}
-	
-	public long getTickPosition() {
-		// Not implemented
-		return 0;
-	}
-	
-	public boolean isRunning() {
-		// Not implemented
-		return false;
-	}
-	
-	public void setMute(int index, boolean mute) {
-		//not implemented
-	}
-	
-	public void setSolo(int index, boolean solo) {
-		// Not implemented
-	}
-	
-	public void setTickPosition(long tickPosition) {
-		// Not implemented
-	}
-	
-	public void start() {
-		// Not implemented
-	}
-	
-	public void stop() {
-		// Not implemented
-	}
-	
-	public String getKey() {
-		return null;
-	}
-	
-	public String getName() {
-		return null;
-	}	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiTransmitter.java b/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiTransmitter.java
deleted file mode 100644
index 8c06392..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/base/MidiTransmitter.java
+++ /dev/null
@@ -1,106 +0,0 @@
-package org.herac.tuxguitar.player.base;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class MidiTransmitter {
-	
-	private List receivers;
-	
-	public MidiTransmitter(){
-		this.receivers = new ArrayList();
-	}
-	
-	public void sendSystemReset() throws MidiPlayerException {
-		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
-			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
-			receiver.getReceiver().sendSystemReset();
-		}
-	}
-	
-	public void sendAllNotesOff() throws MidiPlayerException {
-		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
-			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
-			receiver.getReceiver().sendAllNotesOff();
-		}
-	}
-	
-	public void sendNoteOn(int channel, int key, int velocity) throws MidiPlayerException {
-		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
-			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
-			receiver.getReceiver().sendNoteOn(channel, key, velocity);
-		}
-	}
-	
-	public void sendNoteOff(int channel, int key, int velocity) throws MidiPlayerException {
-		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
-			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
-			receiver.getReceiver().sendNoteOff(channel, key, velocity);
-		}
-	}
-	
-	public void sendProgramChange(int channel, int value) throws MidiPlayerException {
-		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
-			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
-			receiver.getReceiver().sendProgramChange(channel, value);
-		}
-	}
-	
-	public void sendControlChange(int channel, int controller, int value) throws MidiPlayerException {
-		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
-			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
-			receiver.getReceiver().sendControlChange(channel, controller, value);
-		}
-	}
-	
-	public void sendPitchBend(int channel, int value) throws MidiPlayerException {
-		for( int i = 0 ; i < this.receivers.size() ; i ++ ){
-			MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
-			receiver.getReceiver().sendPitchBend(channel, value);
-		}
-	}
-	
-	public void addReceiver(String id, MidiReceiver receiver){
-		MidiReceiverItem item = getReceiver( id );
-		if( item == null ){
-			this.receivers.add( new MidiReceiverItem( id , receiver ) );
-		}
-	}
-	
-	public void removeReceiver(String id){
-		MidiReceiverItem item = getReceiver( id );
-		if( item != null ){
-			this.receivers.remove( item );
-		}
-	}
-	
-	private MidiReceiverItem getReceiver(String id){
-		if( id != null ){
-			for( int i = 0 ; i < this.receivers.size() ; i ++ ){
-				MidiReceiverItem receiver = (MidiReceiverItem) this.receivers.get( i );
-				if( receiver.getId() != null && receiver.getId().equals( id ) ){
-					return receiver;
-				}
-			}
-		}
-		return null;
-	}
-	
-	private class MidiReceiverItem {
-		private String id;
-		private MidiReceiver receiver;
-		
-		public MidiReceiverItem(String id, MidiReceiver receiver){
-			this.id = id;
-			this.receiver = receiver;
-		}
-		
-		public String getId() {
-			return this.id;
-		}
-		
-		public MidiReceiver getReceiver() {
-			return this.receiver;
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEvent.java b/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEvent.java
deleted file mode 100644
index 63b3dbd..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEvent.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.herac.tuxguitar.player.impl.sequencer;
-
-public class MidiEvent {
-	
-	public static final int ALL_TRACKS = -1;
-	
-	public static final int MIDI_SYSTEM_EVENT = 1;
-	public static final int MIDI_EVENT_NOTEON = 2;
-	public static final int MIDI_EVENT_NOTEOFF = 3;
-	public static final int MIDI_EVENT_PROGRAM_CHANGE = 4;
-	public static final int MIDI_EVENT_CONTROL_CHANGE = 5;
-	public static final int MIDI_EVENT_PITCH_BEND = 6;
-	
-	private long tick;
-	private int type;
-	private int track;
-	private byte[] data;
-	
-	public MidiEvent(long tick,int type,byte[] data){
-		this(tick,type,ALL_TRACKS,data);
-	}
-	
-	public MidiEvent(long tick,int type,int track,byte[] data){
-		this.tick = tick;
-		this.type = type;
-		this.track = track;
-		this.data = data;
-	}
-	
-	public long getTick() {
-		return this.tick;
-	}
-	
-	public int getType() {
-		return this.type;
-	}
-	
-	public int getTrack() {
-		return this.track;
-	}
-	
-	public byte[] getData() {
-		return this.data;
-	}
-	
-	public static MidiEvent systemReset(final long tick){
-		return new MidiEvent(tick,MIDI_SYSTEM_EVENT,ALL_TRACKS,null);
-	}
-	
-	public static MidiEvent noteOn(final long tick,final int track,final int channel,final int key,final int velocity){
-		return new MidiEvent(tick,MIDI_EVENT_NOTEON,track,new byte[]{(byte)channel,(byte)key,(byte)velocity});
-	}
-	
-	public static MidiEvent noteOff(final long tick,final int track,final int channel,final int key,final int velocity){
-		return new MidiEvent(tick,MIDI_EVENT_NOTEOFF,track,new byte[]{(byte)channel,(byte)key,(byte)velocity});
-	}
-	
-	public static MidiEvent controlChange(final long tick,final int track,final int channel,final int controller,final int value){
-		return new MidiEvent(tick,MIDI_EVENT_CONTROL_CHANGE,track,new byte[]{(byte)channel,(byte)controller,(byte)value});
-	}
-	
-	public static MidiEvent programChange(final long tick,final int track,final int channel,final int value){
-		return new MidiEvent(tick,MIDI_EVENT_PROGRAM_CHANGE,track,new byte[]{(byte)channel,(byte)value});
-	}
-	
-	public static MidiEvent pitchBend(final long tick,final int track,final int channel,final int value){
-		return new MidiEvent(tick,MIDI_EVENT_PITCH_BEND,track,new byte[]{(byte)channel,(byte)value});
-	}
-	
-	public static MidiEvent tempoInUSQ(final long tick,final int usq){
-		return new MidiEvent(tick,MIDI_SYSTEM_EVENT,new byte[]{0x51,(byte) (usq & 0xff),(byte) ((usq >> 8) & 0xff),(byte) ((usq >> 16) & 0xff)});
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventDispacher.java b/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventDispacher.java
deleted file mode 100644
index 3804919..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiEventDispacher.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package org.herac.tuxguitar.player.impl.sequencer;
-
-import org.herac.tuxguitar.player.base.MidiPlayerException;
-
-public class MidiEventDispacher{
-	private MidiSequencerImpl sequencer;
-	
-	public MidiEventDispacher(MidiSequencerImpl sequencer){
-		this.sequencer = sequencer;
-	}
-	
-	public void dispatch(MidiEvent event) throws MidiPlayerException{
-		if(event.getType() == MidiEvent.MIDI_EVENT_NOTEON){
-			this.sequencer.getTransmitter().sendNoteOn(event.getData()[0],event.getData()[1],event.getData()[2]);
-		}
-		else if(event.getType() == MidiEvent.MIDI_EVENT_NOTEOFF){
-			this.sequencer.getTransmitter().sendNoteOff(event.getData()[0],event.getData()[1],event.getData()[2]);
-		}
-		else if(event.getType() == MidiEvent.MIDI_EVENT_CONTROL_CHANGE){
-			this.sequencer.getTransmitter().sendControlChange(event.getData()[0],event.getData()[1],event.getData()[2]);
-		}
-		else if(event.getType() == MidiEvent.MIDI_EVENT_PROGRAM_CHANGE){
-			this.sequencer.getTransmitter().sendProgramChange(event.getData()[0],event.getData()[1]);
-		}
-		else if(event.getType() == MidiEvent.MIDI_EVENT_PITCH_BEND){
-			this.sequencer.getTransmitter().sendPitchBend(event.getData()[0],event.getData()[1]);
-		}
-		else if(event.getType() == MidiEvent.MIDI_SYSTEM_EVENT){
-			if(event.getData()[0] == 0x51){
-				int usq = ((event.getData()[1] & 0xff) | ((event.getData()[2] & 0xff) << 8) | ((event.getData()[3] & 0xff) << 16));
-				this.sequencer.setTempo( (int)((60.00 * 1000.00) / (usq / 1000.00)) );
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequenceHandlerImpl.java b/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequenceHandlerImpl.java
deleted file mode 100644
index 3b1b8e9..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequenceHandlerImpl.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.herac.tuxguitar.player.impl.sequencer;
-
-import org.herac.tuxguitar.player.base.MidiSequenceHandler;
-import org.herac.tuxguitar.song.models.TGTimeSignature;
-
-public class MidiSequenceHandlerImpl extends MidiSequenceHandler{
-	
-	private MidiSequencerImpl seq;
-	
-	public MidiSequenceHandlerImpl(MidiSequencerImpl seq,int tracks) {
-		super(tracks);
-		this.seq = seq;
-		this.seq.getMidiTrackController().init(getTracks());
-	}
-	
-	public void addControlChange(long tick,int track,int channel, int controller, int value) {
-		this.seq.addEvent(MidiEvent.controlChange(tick, track, channel, controller, value));
-	}
-	
-	public void addNoteOff(long tick,int track,int channel, int note, int velocity) {
-		this.seq.addEvent(MidiEvent.noteOff(tick, track, channel, note, velocity));
-	}
-	
-	public void addNoteOn(long tick,int track,int channel, int note, int velocity) {
-		this.seq.addEvent(MidiEvent.noteOn(tick, track, channel, note, velocity));
-	}
-	
-	public void addPitchBend(long tick,int track,int channel, int value) {
-		this.seq.addEvent(MidiEvent.pitchBend(tick, track, channel, value));
-	}
-	
-	public void addProgramChange(long tick,int track,int channel, int instrument) {
-		this.seq.addEvent(MidiEvent.programChange(tick, track, channel, instrument));
-	}
-	
-	public void addTempoInUSQ(long tick,int track,int usq) {
-		this.seq.addEvent(MidiEvent.tempoInUSQ(tick, usq));
-	}
-	
-	public void addTimeSignature(long tick,int track,TGTimeSignature ts) {
-		//not implemented
-	}
-	
-	public void notifyFinish(){
-		//not implemented
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerImpl.java b/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerImpl.java
deleted file mode 100644
index aa4b5b7..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/player/impl/sequencer/MidiSequencerImpl.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package org.herac.tuxguitar.player.impl.sequencer;
-
-import org.herac.tuxguitar.player.base.MidiPlayerException;
-import org.herac.tuxguitar.player.base.MidiSequenceHandler;
-import org.herac.tuxguitar.player.base.MidiSequencer;
-import org.herac.tuxguitar.player.base.MidiTransmitter;
-
-public class MidiSequencerImpl implements MidiSequencer{
-	
-	private boolean reset;
-	private boolean running;
-	private boolean stopped;
-	private MidiTransmitter transmitter;
-	private MidiTickPlayer midiTickPlayer;
-	private MidiEventPlayer midiEventPlayer;
-	private MidiEventDispacher midiEventDispacher;
-	private MidiTrackController midiTrackController;
-	
-	public MidiSequencerImpl(){
-		this.running = false;
-		this.stopped = true;
-		this.midiTickPlayer = new MidiTickPlayer();
-		this.midiEventPlayer = new MidiEventPlayer(this);
-		this.midiEventDispacher = new MidiEventDispacher(this);
-		this.midiTrackController = new MidiTrackController(this);
-	}
-	
-	public synchronized MidiTrackController getMidiTrackController(){
-		return this.midiTrackController;
-	}
-	
-	public synchronized void setTempo(int tempo){
-		this.midiTickPlayer.setTempo(tempo);
-	}
-	
-	public synchronized long getTickPosition(){
-		return this.midiTickPlayer.getTick();
-	}
-	
-	public synchronized void setTickPosition(long tickPosition){
-		this.reset = true;
-		this.midiTickPlayer.setTick(tickPosition);
-	}
-	
-	public synchronized long getTickLength(){
-		return this.midiTickPlayer.getTickLength();
-	}
-	
-	public synchronized void sendEvent(MidiEvent event) throws MidiPlayerException{
-		if(!this.reset){
-			this.midiEventDispacher.dispatch(event);
-		}
-	}
-	
-	public synchronized void addEvent(MidiEvent event){
-		this.midiEventPlayer.addEvent(event);
-		this.midiTickPlayer.notifyTick(event.getTick());
-	}
-	
-	public synchronized boolean isRunning() {
-		return this.running;
-	}
-	
-	public synchronized void setRunning(boolean running) throws MidiPlayerException {
-		this.running = running;
-		if(this.running){
-			this.setTempo(120);
-			this.setTickPosition( this.getTickPosition() );
-			new MidiTimer(this).start();
-		}else{
-			this.process();
-		}
-	}
-	
-	public synchronized void stop() throws MidiPlayerException{
-		this.setRunning(false);
-	}
-	
-	public synchronized void start() throws MidiPlayerException{
-		this.setRunning(true);
-	}
-	
-	public synchronized void reset(boolean systemReset)  throws MidiPlayerException{
-		this.getTransmitter().sendAllNotesOff();
-		for(int channel = 0; channel < 16;channel ++){
-			this.getTransmitter().sendPitchBend(channel, 64);
-		}
-		if( systemReset ){
-			this.getTransmitter().sendSystemReset();
-		}
-	}
-	
-	protected synchronized boolean process() throws MidiPlayerException{
-		boolean running = this.isRunning();
-		if(running){
-			if(this.reset){
-				this.reset( false );
-				this.reset = false;
-				this.midiEventPlayer.reset();
-			}
-			this.stopped = false;
-			this.midiTickPlayer.process();
-			this.midiEventPlayer.process();
-			if(this.getTickPosition() > this.getTickLength()){
-				this.stop();
-			}
-		}
-		else if( !this.stopped ){
-			this.stopped = true;
-			this.midiEventPlayer.clearEvents();
-			this.midiTickPlayer.clearTick();
-			this.reset( true );
-		}
-		return running;
-	}
-	
-	public synchronized MidiTransmitter getTransmitter() {
-		return this.transmitter;
-	}
-	
-	public synchronized void setTransmitter(MidiTransmitter transmitter) {
-		this.transmitter = transmitter;
-	}
-	
-	public void check() {
-		// Not implemented
-	}
-	
-	public synchronized void open() {
-		//not implemented
-	}
-	
-	public synchronized void close() throws MidiPlayerException {
-		if(isRunning()){
-			this.stop();
-		}
-	}
-	
-	public synchronized MidiSequenceHandler createSequence(int tracks) throws MidiPlayerException{
-		return new MidiSequenceHandlerImpl(this,tracks);
-	}
-	
-	public synchronized void setSolo(int index,boolean solo) throws MidiPlayerException{
-		this.getMidiTrackController().setSolo(index, solo);
-	}
-	
-	public synchronized void setMute(int index,boolean mute) throws MidiPlayerException{
-		this.getMidiTrackController().setMute(index, mute);
-	}
-	
-	public String getKey() {
-		return "tuxguitar.sequencer";
-	}
-	
-	public String getName() {
-		return "TuxGuitar Sequencer";
-	}
-	
-	private class MidiTimer extends Thread{
-		
-		private static final int TIMER_DELAY = 15;
-		
-		private MidiSequencerImpl sequencer;
-		
-		public MidiTimer(MidiSequencerImpl sequencer){
-			this.sequencer = sequencer;
-		}
-		
-		public void run() {
-			try {
-				synchronized(this.sequencer) {
-					while( this.sequencer.process() ){
-						this.sequencer.wait( TIMER_DELAY );
-					}
-				}
-			} catch (Throwable throwable) {
-				throwable.printStackTrace();
-			}
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/factory/TGFactory.java b/TuxGuitar/src/org/herac/tuxguitar/song/factory/TGFactory.java
deleted file mode 100644
index df0578f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/factory/TGFactory.java
+++ /dev/null
@@ -1,194 +0,0 @@
-package org.herac.tuxguitar.song.factory;
-
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGColor;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGLyric;
-import org.herac.tuxguitar.song.models.TGMarker;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGNoteEffect;
-import org.herac.tuxguitar.song.models.TGScale;
-import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGStroke;
-import org.herac.tuxguitar.song.models.TGTempo;
-import org.herac.tuxguitar.song.models.TGText;
-import org.herac.tuxguitar.song.models.TGTimeSignature;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGDivisionType;
-import org.herac.tuxguitar.song.models.TGVoice;
-import org.herac.tuxguitar.song.models.effects.TGEffectBend;
-import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
-import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
-import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
-
-public class TGFactory {
-	
-	public TGSong newSong(){
-		return new TGSong() {
-			//TGSong Implementation
-		};
-	}
-	
-	public TGLyric newLyric(){
-		return new TGLyric(){
-			//TGLyric Implementation
-		};
-	}
-	
-	public TGMarker newMarker(){
-		return new TGMarker(this){
-			//TGMarker Implementation
-		};
-	}
-	
-	public TGChord newChord(int length){
-		return new TGChord(length){
-			//TGChord Implementation
-		};
-	}
-	
-	public TGScale newScale(){
-		return new TGScale(){
-			//TGScale Implementation
-		};
-	}
-	
-	public TGColor newColor(){
-		return new TGColor(){
-			//TGColor Implementation
-		};
-	}
-	
-	public TGDuration newDuration(){
-		return new TGDuration(this){
-			//TGDuration Implementation
-		};
-	}
-	
-	public TGDivisionType newDivisionType(){
-		return new TGDivisionType(){
-			//TGDivisionType Implementation
-		};
-	}
-	
-	public TGTimeSignature newTimeSignature(){
-		return new TGTimeSignature(this){
-			//TGTimeSignature Implementation
-		};
-	}
-	
-	public TGTempo newTempo(){
-		return new TGTempo(){
-			//TGTempo Implementation
-		};
-	}
-	
-	public TGChannel newChannel(){
-		return new TGChannel(){
-			//TGChannel Implementation
-		};
-	}
-	
-	public TGTrack newTrack(){
-		return new TGTrack(this){
-			//TGTrack Implementation
-		};
-	}
-	
-	public TGMeasureHeader newHeader(){
-		return new TGMeasureHeader(this){
-			//TGMeasureHeader Implementation
-		};
-	}
-	
-	public TGMeasure newMeasure(TGMeasureHeader header){
-		return new TGMeasure(header){
-			//TGMeasure Implementation
-		};
-	}
-	
-	public TGBeat newBeat(){
-		return new TGBeat(this){
-			//TGBeat Implementation
-		};
-	}
-	
-	public TGVoice newVoice(int index){
-		return new TGVoice(this, index){
-			//TGVoice Implementation
-		};
-	}
-	
-	public TGNote newNote(){
-		return new TGNote(this){
-			//TGNote Implementation
-		};
-	}
-	
-	public TGString newString(){
-		return new TGString(){
-			//TGString Implementation
-		};
-	}
-	
-	public TGStroke newStroke(){
-		return new TGStroke(){
-			//TGString Implementation
-		};
-	}
-	
-	public TGText newText(){
-		return new TGText(){
-			//TGString Implementation
-		};
-	}
-	
-	public TGNoteEffect newEffect(){
-		return new TGNoteEffect(){
-			//TGNoteEffect Implementation
-		};
-	}
-	
-	public TGEffectBend newEffectBend(){
-		return new TGEffectBend(){
-			//TGEffectBend Implementation
-		};
-	}
-	
-	public TGEffectTremoloBar newEffectTremoloBar(){
-		return new TGEffectTremoloBar(){
-			//TGEffectTremoloBar Implementation
-		};
-	}
-	
-	public TGEffectGrace newEffectGrace(){
-		return new TGEffectGrace(){
-			//TGEffectGrace Implementation
-		};
-	}
-	
-	public TGEffectHarmonic newEffectHarmonic(){
-		return new TGEffectHarmonic(){
-			//TGEffectHarmonic Implementation
-		};
-	}
-	
-	public TGEffectTrill newEffectTrill(){
-		return new TGEffectTrill(this){
-			//TGEffectTrill Implementation
-		};
-	}
-	
-	public TGEffectTremoloPicking newEffectTremoloPicking(){
-		return new TGEffectTremoloPicking(this){
-			//TGEffectTremoloPicking Implementation
-		};
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGMeasureManager.java b/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGMeasureManager.java
deleted file mode 100644
index f8514af..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGMeasureManager.java
+++ /dev/null
@@ -1,2400 +0,0 @@
-package org.herac.tuxguitar.song.managers;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGBeat;
-import org.herac.tuxguitar.song.models.TGChord;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGNote;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGStroke;
-import org.herac.tuxguitar.song.models.TGText;
-import org.herac.tuxguitar.song.models.TGTrack;
-import org.herac.tuxguitar.song.models.TGVoice;
-import org.herac.tuxguitar.song.models.effects.TGEffectBend;
-import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
-import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
-import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
-
-public class TGMeasureManager {
-	private TGSongManager songManager;
-	
-	public TGMeasureManager(TGSongManager songManager){
-		this.songManager = songManager;
-	}
-	
-	public TGSongManager getSongManager(){
-		return this.songManager;
-	}
-	
-	public void orderBeats(TGMeasure measure){
-		for(int i = 0;i < measure.countBeats();i++){
-			TGBeat minBeat = null;
-			for(int j = i;j < measure.countBeats();j++){
-				TGBeat beat = measure.getBeat(j);
-				if(minBeat == null || beat.getStart() < minBeat.getStart()){
-					minBeat = beat;
-				}
-			}
-			measure.moveBeat(i, minBeat);
-		}
-	}
-	
-	/**
-	 * Agrega un beat al compas
-	 */
-	public void addBeat(TGMeasure measure,TGBeat beat){
-		//Verifico si entra en el compas
-		//if(validateDuration(measure,beat,false,false)){
-			
-			//Agrego el beat
-			measure.addBeat(beat);
-		//}
-	}
-	
-	public void removeBeat(TGBeat beat){
-		beat.getMeasure().removeBeat(beat);
-	}
-	
-	public void removeBeat(TGMeasure measure,long start,boolean moveNextComponents){
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			removeBeat(beat, moveNextComponents);
-		}
-	}
-	
-	/**
-	 * Elimina un silencio del compas.
-	 * si se asigna moveNextComponents = true. los componentes que le siguen
-	 * se moveran para completar el espacio vacio que dejo el silencio
-	 */
-	public void removeBeat(TGBeat beat,boolean moveNextBeats){
-		TGMeasure measure = beat.getMeasure();
-		
-		removeBeat(beat);
-		if(moveNextBeats){
-			TGDuration minimumDuration = getMinimumDuration(beat);
-			long start = beat.getStart();
-			long length = (minimumDuration != null ? minimumDuration.getTime() : 0);
-			
-			TGBeat next = getNextBeat(measure.getBeats(),beat);
-			if(next != null){
-				length = next.getStart() - start;
-			}
-			moveBeatsInMeasure(beat.getMeasure(),start + length,-length, minimumDuration);
-		}
-	}
-	
-	public void removeEmptyBeats(TGMeasure measure){
-		List beats = new ArrayList();
-		Iterator it = measure.getBeats().iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat)it.next();
-			boolean emptyBeat = true;
-			for( int v = 0; v < beat.countVoices() ; v ++){
-				TGVoice voice = beat.getVoice( v );
-				if(!voice.isEmpty()){
-					emptyBeat = false;
-				}
-			}
-			if( emptyBeat ){
-				beats.add( beat );
-			}
-		}
-		
-		it = beats.iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat)it.next();
-			this.removeBeat( beat );
-		}
-	}
-		
-	public void removeBeatsBeforeEnd(TGMeasure measure,long fromStart){
-		List beats = getBeatsBeforeEnd( measure.getBeats() , fromStart);
-		Iterator it = beats.iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat) it.next();
-			removeBeat(beat);
-		}
-	}
-	
-	public void removeBeatsBeetween(TGMeasure measure,long p1, long p2){
-		List beats = getBeatsBeetween( measure.getBeats() , p1, p2 );
-		Iterator it = beats.iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat) it.next();
-			removeBeat(beat);
-		}
-	}
-	
-	public void addNote(TGMeasure measure,long start, TGNote note, TGDuration duration, int voice){
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			addNote(beat, note, duration, voice);
-		}
-	}
-	
-	public void addNote(TGBeat beat, TGNote note, TGDuration duration, int voice){
-		addNote(beat, note, duration, beat.getStart(),voice);
-	}
-	
-	public void addNote(TGBeat beat, TGNote note, TGDuration duration, long start, int voice){
-		boolean emptyVoice = beat.getVoice( voice ).isEmpty();
-		if( emptyVoice ){
-			beat.getVoice( voice ).setEmpty( false );
-		}
-		
-		//Verifico si entra en el compas
-		if(validateDuration(beat.getMeasure(),beat, voice, duration,true,true)){
-			//Borro lo que haya en la misma posicion
-			for( int v = 0 ; v < beat.countVoices() ; v ++ ){
-				removeNote(beat.getMeasure(),beat.getStart(), v, note.getString(), false);
-			}
-			
-			duration.copy(beat.getVoice(voice).getDuration());
-			
-			//trato de agregar un silencio similar al lado
-			tryChangeSilenceAfter(beat.getMeasure(),beat.getVoice(voice));
-			
-			// Despues de cambiar la duracion, verifico si hay un beat mejor para agregar la nota.
-			TGVoice realVoice = beat.getVoice(voice);
-			if(realVoice.getBeat().getStart() != start){
-				TGVoice beatIn = getVoiceIn(realVoice.getBeat().getMeasure(), start, voice);
-				if( beatIn != null ) {
-					realVoice = beatIn;
-				}
-			}
-			realVoice.addNote(note);
-		}else{
-			beat.getVoice( voice ).setEmpty( emptyVoice );
-		}
-	}
-	
-	public void removeNote(TGNote note, boolean checkRestBeat){
-		//note.getVoice().removeNote(note);
-		TGVoice voice = note.getVoice();
-		if( voice != null ){
-			// Remove the note
-			voice.removeNote(note);
-			
-			TGBeat beat = voice.getBeat();
-			if(checkRestBeat && beat.isRestBeat()){
-				//Anulo un posible stroke
-				beat.getStroke().setDirection( TGStroke.STROKE_NONE );
-				
-				//Borro un posible acorde
-				if( beat.getMeasure() != null ){
-					removeChord(beat.getMeasure(), beat.getStart());
-				}
-			}
-		}
-	}
-	
-	public void removeNote(TGNote note){
-		this.removeNote(note, true);
-	}
-	
-	public void removeNote(TGMeasure measure,long start, int voiceIndex,int string){
-		this.removeNote(measure, start, voiceIndex, string, true);
-	}
-	
-	/**
-	 * Elimina los Componentes que empiecen en Start y esten en la misma cuerda
-	 * Si hay un Silencio lo borra sin importar la cuerda
-	 */
-	public void removeNote(TGMeasure measure,long start, int voiceIndex,int string, boolean checkRestBeat){
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			TGVoice voice = beat.getVoice(voiceIndex);
-			for( int i = 0; i < voice.countNotes(); i ++){
-				TGNote note = voice.getNote(i);
-				if(note.getString() == string){
-					removeNote(note , checkRestBeat);
-					return;
-				}
-			}
-		}
-	}
-	
-	public void removeNotesAfterString(TGMeasure measure,int string){
-		List notesToRemove = new ArrayList();
-		
-		Iterator beats = measure.getBeats().iterator();
-		while(beats.hasNext()){
-			TGBeat beat = (TGBeat)beats.next();
-			for(int v = 0; v < beat.countVoices(); v ++){
-				TGVoice voice = beat.getVoice( v );
-				Iterator notes = voice.getNotes().iterator();
-				while(notes.hasNext()){
-					TGNote note = (TGNote)notes.next();
-					if(note.getString() > string){
-						notesToRemove.add(note);
-					}
-				}
-			}
-		}
-		Iterator it = notesToRemove.iterator();
-		while(it.hasNext()){
-			TGNote note = (TGNote)it.next();
-			removeNote(note);
-		}
-	}
-	
-	/**
-	 * Retorna Todas las Notas en la posicion Start
-	 */
-	public List getNotes(TGMeasure measure,long start){
-		List notes = new ArrayList();
-		
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			for(int v = 0 ; v < beat.countVoices(); v ++){
-				TGVoice voice = beat.getVoice( v );
-				Iterator it = voice.getNotes().iterator();
-				while(it.hasNext()){
-					TGNote note = (TGNote)it.next();
-					notes.add(note);
-				}
-			}
-		}
-		return notes;
-	}
-	
-	/**
-	 * Retorna Todas las Notas en el pulso
-	 */
-	public List getNotes(TGBeat beat){
-		List notes = new ArrayList();
-		
-		if(beat != null){
-			for(int v = 0 ; v < beat.countVoices(); v ++){
-				TGVoice voice = beat.getVoice( v );
-				if( !voice.isEmpty() && !voice.isRestVoice() ){
-					Iterator it = voice.getNotes().iterator();
-					while(it.hasNext()){
-						TGNote note = (TGNote)it.next();
-						notes.add(note);
-					}
-				}
-			}
-		}
-		return notes;
-	}
-	
-	/**
-	 * Retorna la Nota en la posicion y cuerda
-	 */
-	public TGNote getNote(TGMeasure measure,long start,int string) {
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			return getNote(beat, string);
-		}
-		return null;
-	}
-	
-	/**
-	 * Retorna la Nota en la cuerda
-	 */
-	public TGNote getNote(TGBeat beat,int string) {
-		for( int v = 0; v < beat.countVoices(); v ++){
-			TGVoice voice = beat.getVoice(v);
-			if(!voice.isEmpty()){
-				TGNote note = getNote(voice, string);
-				if(note != null){
-					return note;
-				}
-			}
-		}
-		return null;
-	}
-	
-	public TGNote getNote(TGVoice voice,int string) {
-		Iterator it = voice.getNotes().iterator();
-		while(it.hasNext()){
-			TGNote note = (TGNote)it.next();
-			if (note.getString() == string) {
-				return note;
-			}
-		}
-		return null;
-	}
-	
-	public TGNote getPreviousNote(TGMeasure measure,long start, int voiceIndex, int string) {
-		TGBeat beat = getBeat(measure, start);
-		if( beat != null ){
-			TGBeat previous = getPreviousBeat(measure.getBeats(),beat);
-			while(previous != null){
-				TGVoice voice = previous.getVoice(voiceIndex);
-				if(!voice.isEmpty()){
-					for (int i = 0; i < voice.countNotes(); i++) {
-						TGNote current = voice.getNote(i);
-						if (current.getString() == string) {
-							return current;
-						}
-					}
-				}
-				previous = getPreviousBeat(measure.getBeats(),previous);
-			}
-		}
-		return null;
-	}
-	
-	public TGNote getNextNote(TGMeasure measure,long start, int voiceIndex, int string) {
-		TGBeat beat = getBeat(measure, start);
-		if( beat != null ){
-			TGBeat next = getNextBeat(measure.getBeats(),beat);
-			while(next != null){
-				TGVoice voice = next.getVoice(voiceIndex);
-				if(!voice.isEmpty()){
-					for (int i = 0; i < voice.countNotes(); i++) {
-						TGNote current = voice.getNote(i);
-						if (current.getString() == string) {
-							return current;
-						}
-					}
-				}
-				next = getNextBeat(measure.getBeats(),next);
-			}
-		}
-		return null;
-	}
-	
-	public TGDuration getMinimumDuration(TGBeat beat){
-		TGDuration minimumDuration = null;
-		for(int v = 0; v < beat.countVoices(); v ++){
-			TGVoice voice = beat.getVoice( v );
-			if( !voice.isEmpty() ){
-				if(minimumDuration == null || voice.getDuration().getTime() < minimumDuration.getTime()){
-					minimumDuration = voice.getDuration();
-				}
-			}
-		}
-		return minimumDuration;
-	}
-	
-	public TGBeat getBeat(TGTrack track,long start) {
-		Iterator measures = track.getMeasures();
-		while( measures.hasNext() ){
-			TGMeasure measure = (TGMeasure)measures.next();
-			Iterator beats = measure.getBeats().iterator();
-			while(beats.hasNext()){
-				TGBeat beat = (TGBeat)beats.next();
-				if (beat.getStart() == start) {
-					return beat;
-				}
-			}
-		}
-		return null;
-	}
-	/**
-	 * Retorna las Nota en la posicion y cuerda
-	 */
-	public TGBeat getBeat(TGMeasure measure,long start) {
-		Iterator it = measure.getBeats().iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat)it.next();
-			if (beat.getStart() == start) {
-				return beat;
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Retorna las Nota en la posicion y cuerda
-	 */
-	public TGBeat getBeatIn(TGMeasure measure,long start) {
-		TGBeat beatIn = null;
-		Iterator it = measure.getBeats().iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat)it.next();
-			TGDuration duration = getMinimumDuration(beat);
-			if (beat.getStart() <= start && (beat.getStart() + duration.getTime() > start)) {
-				if(beatIn == null || beat.getStart() > beatIn.getStart()){
-					beatIn = beat;
-				}
-			}
-		}
-		return beatIn;
-	}
-	
-	/**
-	 * Retorna las Nota en la posicion y cuerda
-	 */
-	public TGVoice getVoiceIn(TGMeasure measure,long start, int voiceIndex) {
-		Iterator it = measure.getBeats().iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat)it.next();
-			TGVoice voice = beat.getVoice(voiceIndex);
-			if (!voice.isEmpty() && beat.getStart() <= start && (beat.getStart() + voice.getDuration().getTime() > start)) {
-				return voice;
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Retorna el Siguiente Componente
-	 */
-	public TGBeat getNextBeat(List beats,TGBeat beat) {
-		TGBeat next = null;
-		for (int i = 0; i < beats.size(); i++) {
-			TGBeat current = (TGBeat) beats.get(i);
-			if (current.getStart() > beat.getStart()) {
-				if (next == null) {
-					next = current;
-				} else if (current.getStart() < next.getStart()) {
-					next = current;
-				} /*else if (current.getStart() == next.getStart() && current.getDuration().getTime() <= next.getDuration().getTime()) {
-					next = current;
-				}*/
-			}
-		}
-		return next;
-	}
-	
-	/**
-	 * Retorna el Componente Anterior
-	 */
-	public TGBeat getPreviousBeat(List beats,TGBeat beat) {
-		TGBeat previous = null;
-		for (int i = 0; i < beats.size(); i++) {
-			TGBeat current = (TGBeat) beats.get(i);
-			if (current.getStart() < beat.getStart()) {
-				if (previous == null) {
-					previous = current;
-				} else if (current.getStart() > previous.getStart()) {
-					previous = current;
-				} /*else if (current.getStart() == previous.getStart() && current.getDuration().getTime() <= previous.getDuration().getTime()) {
-					previous = current;
-				}*/
-			}
-		}
-		return previous;
-	}
-	
-	/**
-	 * Retorna el Primer Componente
-	 */
-	public TGBeat getFirstBeat(List components) {
-		TGBeat first = null;
-		for (int i = 0; i < components.size(); i++) {
-			TGBeat component = (TGBeat) components.get(i);
-			if (first == null || component.getStart() < first.getStart()) {
-				first = component;
-			}
-		}
-		return first;
-	}
-	
-	/**
-	 * Retorna el Ultimo Componente
-	 */
-	public TGBeat getLastBeat(List components) {
-		TGBeat last = null;
-		for (int i = 0; i < components.size(); i++) {
-			TGBeat component = (TGBeat) components.get(i);
-			if (last == null || last.getStart() < component.getStart()) {
-				last = component;
-			}
-		}
-		return last;
-	}
-	
-	/**
-	 * Retorna el Siguiente Componente
-	 */
-	/*
-	public TGBeat getNextRestBeat(List beats,TGBeat component) {
-		TGBeat next = getNextBeat(beats, component);
-		while(next != null && !next.isRestBeat()){
-			next = getNextBeat(beats, next);
-		}
-		return next;
-	}
-	*/
-	
-	/**
-	 * Retorna Todos los desde Start hasta el final del compas
-	 */
-	public List getBeatsBeforeEnd(List beats,long fromStart) {
-		List list = new ArrayList();
-		Iterator it = beats.iterator();
-		while(it.hasNext()){
-			TGBeat current = (TGBeat)it.next();
-			if (current.getStart() >= fromStart) {
-				list.add(current);
-			}
-		}
-		return list;
-	}
-	
-	public List getBeatsBeetween(List beats,long p1, long p2) {
-		List list = new ArrayList();
-		Iterator it = beats.iterator();
-		while(it.hasNext()){
-			TGBeat current = (TGBeat)it.next();
-			if (current.getStart() >= p1 && current.getStart() < p2 ) {
-				list.add(current);
-			}
-		}
-		return list;
-	}
-	
-	public void locateBeat( TGBeat beat, TGTrack track , boolean newMeasureAlsoForRestBeats) {
-		if( beat.getMeasure() != null ){
-			beat.getMeasure().removeBeat(beat);
-			beat.setMeasure(null);
-		}
-		TGMeasure newMeasure = getSongManager().getTrackManager().getMeasureAt(track, beat.getStart() );
-		if( newMeasure == null ){
-			boolean createNewMeasure = newMeasureAlsoForRestBeats;
-			if( !createNewMeasure ){
-				createNewMeasure = ( !beat.isRestBeat() || beat.isTextBeat() );
-			}
-			if( createNewMeasure ){
-				
-				while( newMeasure == null && beat.getStart() >= TGDuration.QUARTER_TIME){
-					getSongManager().addNewMeasureBeforeEnd();
-					newMeasure = getSongManager().getTrackManager().getMeasureAt(track, beat.getStart() );
-				}
-			}
-		}
-		if( newMeasure != null ){
-			long mStart = newMeasure.getStart();
-			long mLength = newMeasure.getLength();
-			long bStart = beat.getStart();
-			for( int v = 0 ; v < beat.countVoices() ; v ++ ){
-				TGVoice voice = beat.getVoice( v );
-				long vDuration = voice.getDuration().getTime();
-				if(!voice.isEmpty() && (bStart + vDuration) > (mStart + mLength) ){
-					long vTiedDuration = ( (bStart + vDuration) - (mStart + mLength) );
-					vDuration -= vTiedDuration;
-					if( vDuration > 0 ){
-						TGDuration duration = TGDuration.fromTime(getSongManager().getFactory(), vDuration);
-						if( duration != null ){
-							duration.copy( voice.getDuration() );
-						}
-					}
-					if( vTiedDuration > 0 ) {
-						TGDuration newVoiceDuration = TGDuration.fromTime(getSongManager().getFactory(), vTiedDuration);
-						if( newVoiceDuration != null ){
-							long newBeatStart = (bStart + vDuration);
-							TGBeat newBeat = getBeat(track, newBeatStart);
-							if( newBeat == null ){
-								newBeat = getSongManager().getFactory().newBeat();
-								newBeat.setStart( (bStart + vDuration) );
-							}
-							TGVoice newVoice = newBeat.getVoice( v );
-							for( int n = 0 ; n < voice.countNotes() ; n ++ ){
-								TGNote note = voice.getNote( n );
-								TGNote newNote = getSongManager().getFactory().newNote();
-								newNote.setTiedNote( true );
-								newNote.setValue( note.getValue() );
-								newNote.setString( note.getString() );
-								newNote.setVelocity( note.getVelocity() );
-								newVoice.addNote( newNote );
-							}
-							newVoice.setEmpty( false );
-							newVoiceDuration.copy( newVoice.getDuration() );
-							
-							locateBeat(newBeat, track, newMeasureAlsoForRestBeats);
-						}
-					}
-				}
-			}
-			
-			newMeasure.addBeat(beat);
-		}
-	}
-	
-	public void moveOutOfBoundsBeatsToNewMeasure(TGMeasure measure){
-		this.moveOutOfBoundsBeatsToNewMeasure(measure, true );
-	}
-	
-	public void moveOutOfBoundsBeatsToNewMeasure(TGMeasure measure, boolean newMeasureAlsoForRestBeats ){
-		List beats = new ArrayList();
-		long mStart = measure.getStart();
-		long mLength = measure.getLength();
-		for( int i = 0; i < measure.countBeats() ; i ++ ){
-			TGBeat beat = measure.getBeat( i );
-			if( beat.getStart() < mStart || beat.getStart() >= mStart + mLength ){
-				beats.add( beat );
-			}
-			else{
-				long bStart = beat.getStart();
-				for( int v = 0 ; v < beat.countVoices() ; v ++ ){
-					TGVoice voice = beat.getVoice( v );
-					long vDuration = voice.getDuration().getTime();
-					if(!voice.isEmpty() && (bStart + vDuration) > (mStart + mLength) ){
-						beats.add( beat );
-					}
-				}
-			}
-		}
-		while( !beats.isEmpty() ){
-			TGBeat beat = (TGBeat)beats.get( 0 );
-			if( beat.getMeasure() != null ){
-				beat.getMeasure().removeBeat(beat);
-				beat.setMeasure(null);
-			}
-			this.locateBeat(beat, measure.getTrack(), newMeasureAlsoForRestBeats);
-			
-			beats.remove(0);
-		}
-	}
-	
-	public boolean moveBeatsInMeasure(TGMeasure measure,long start,long theMove, TGDuration fillDuration){
-		if( theMove == 0 ){
-			return false;
-		}
-		boolean success = true;
-		long measureStart = measure.getStart();
-		long measureEnd =  (measureStart + measure.getLength());
-		
-		// Muevo los componentes
-		List beatsToMove = getBeatsBeforeEnd(measure.getBeats(),start);
-		moveBeats(beatsToMove,theMove);
-		
-		if(success){
-			List beatsToRemove = new ArrayList();
-			List beats = new ArrayList(measure.getBeats());
-			
-			// Verifica los silencios a eliminar al principio del compas
-			TGBeat first = getFirstBeat( beats );
-			while(first != null && first.isRestBeat() && !first.isTextBeat() && first.getStart() < measureStart){
-				beats.remove(first);
-				beatsToRemove.add(first);
-				first = getNextBeat( beats,first);
-			}
-			
-			// Verifica los silencios a eliminar al final del compas
-			TGBeat last = getLastBeat(beats);
-			TGDuration lastDuration = (last != null ? getMinimumDuration(last) : null);
-			while(last != null && lastDuration != null && last.isRestBeat() && !last.isTextBeat()  && (last.getStart() + lastDuration.getTime() ) > measureEnd  ){
-				beats.remove(last);
-				beatsToRemove.add(last);
-				last = getPreviousBeat(beats,last);
-				lastDuration = (last != null ? getMinimumDuration(last) : null);
-			}
-			
-			// Si el primer o ultimo componente, quedan fuera del compas, entonces el movimiento no es satisfactorio
-			if(first != null && last != null && lastDuration != null){
-				if(first.getStart() < measureStart || (last.getStart() + lastDuration.getTime()) > measureEnd){
-					success = false;
-				}
-			}
-			
-			if(success){
-				// Elimino los silencios que quedaron fuera del compas.
-				Iterator it = beatsToRemove.iterator();
-				while( it.hasNext() ){
-					TGBeat beat = (TGBeat)it.next();
-					removeBeat(beat);
-				}
-				
-				// Se crean silencios en los espacios vacios, si la duracion fue especificada.
-				if( fillDuration != null ){
-					if( theMove < 0 ){
-						last = getLastBeat(measure.getBeats());
-						lastDuration = (last != null ? getMinimumDuration(last) : null);
-						TGBeat beat = getSongManager().getFactory().newBeat();
-						beat.setStart( (last != null && lastDuration != null ? last.getStart()  + lastDuration.getTime() : start  )  );
-						if( (beat.getStart() + fillDuration.getTime()) <= measureEnd ){
-							for(int v = 0; v < beat.countVoices(); v ++){
-								TGVoice voice = beat.getVoice(v);
-								voice.setEmpty(false);
-								fillDuration.copy( voice.getDuration() );
-							}
-							addBeat(measure, beat );
-						}
-					}
-					else{
-						first = getFirstBeat(getBeatsBeforeEnd(measure.getBeats(),start));
-						TGBeat beat = getSongManager().getFactory().newBeat();
-						beat.setStart( start );
-						if( (beat.getStart() + fillDuration.getTime()) <= (first != null ?first.getStart() : measureEnd ) ){
-							for(int v = 0; v < beat.countVoices(); v ++){
-								TGVoice voice = beat.getVoice(v);
-								voice.setEmpty(false);
-								fillDuration.copy( voice.getDuration() );
-							}
-							addBeat(measure, beat );
-						}
-					}
-				}
-			}
-		}
-		
-		// Si el movimiento no es satisfactorio, regreso todo como estaba
-		if(! success ){
-			moveBeats(beatsToMove,-theMove);
-		}
-		
-		return success;
-	}
-	
-	public void moveAllBeats(TGMeasure measure,long theMove){
-		moveBeats(measure.getBeats(),theMove);
-	}
-	
-	public void moveBeats(TGMeasure measure, long start, long theMove){
-		moveBeats(getBeatsBeforeEnd(measure.getBeats(), start),theMove);
-	}
-	
-	/**
-	 * Mueve los componentes
-	 */
-	private void moveBeats(List beats,long theMove){
-		Iterator it = beats.iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat)it.next();
-			moveBeat(beat,theMove);
-		}
-	}
-	
-	/**
-	 * Mueve el componente
-	 */
-	private void moveBeat(TGBeat beat,long theMove){
-		//obtengo el start viejo
-		long start = beat.getStart();
-		
-		//asigno el nuevo start
-		beat.setStart(start + theMove);
-	}
-	
-	public void cleanBeat(TGBeat beat){
-		beat.getStroke().setDirection( TGStroke.STROKE_NONE );
-		if( beat.getText() != null ){
-			beat.removeText();
-		}
-		if( beat.getChord() != null){
-			beat.removeChord();
-		}
-		
-		this.cleanBeatNotes(beat);
-	}
-	
-	public void cleanBeatNotes(TGBeat beat){
-		for(int v = 0; v < beat.countVoices(); v ++){
-			cleanVoiceNotes(beat.getVoice( v ));
-		}
-	}
-	
-	public void cleanBeatNotes(TGMeasure measure, long start){
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			cleanBeatNotes(beat);
-		}
-	}
-	
-	public void cleanVoiceNotes(TGVoice voice){
-		if(!voice.isEmpty()){
-			while(voice.countNotes() > 0 ){
-				TGNote note = voice.getNote(0);
-				removeNote(note);
-			}
-		}
-	}
-	/**
-	 * Agrega el acorde al compas
-	 */
-	public void addChord(TGMeasure measure,long start, TGChord chord){
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			addChord(beat, chord);
-		}
-	}
-	
-	/**
-	 * Agrega el acorde al compas
-	 */
-	public void addChord(TGBeat beat,TGChord chord){
-		beat.removeChord();
-		beat.setChord(chord);
-	}
-	
-	/**
-	 * Retorna el acorde en la position
-	 */
-	public TGChord getChord(TGMeasure measure,long start) {
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			return beat.getChord();
-		}
-		return null;
-	}
-	
-	/**
-	 * Borra el acorde en la position
-	 */
-	public void removeChord(TGMeasure measure,long start) {
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			beat.removeChord();
-		}
-	}
-	
-	/**
-	 * Agrega el texto al compas
-	 */
-	public void addText(TGMeasure measure,long start, TGText text){
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			addText(beat, text);
-		}
-	}
-	
-	/**
-	 * Agrega el texto al compas
-	 */
-	public void addText(TGBeat beat,TGText text){
-		beat.removeText();
-		if(!text.isEmpty()){
-			beat.setText(text);
-		}
-	}
-	
-	/**
-	 * Retorna el texto en la position
-	 */
-	public TGText getText(TGMeasure measure,long start) {
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			return beat.getText();
-		}
-		return null;
-	}
-	
-	/**
-	 * Borra el texto en el pulso
-	 */
-	public void removeText(TGBeat beat){
-		beat.removeText();
-	}
-	
-	/**
-	 * Borra el texto en la position
-	 */
-	public boolean removeText(TGMeasure measure,long start) {
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			removeText(beat);
-			return true;
-		}
-		return false;
-	}
-	
-	public void cleanMeasure(TGMeasure measure){
-		while( measure.countBeats() > 0){
-			removeBeat( measure.getBeat(0));
-		}
-	}
-	
-	/**
-	 * Mueve la nota a la cuerda de arriba
-	 */
-	public int shiftNoteUp(TGMeasure measure,long start,int string){
-		return shiftNote(measure, start, string,-1);
-	}
-	
-	/**
-	 * Mueve la nota a la cuerda de abajo
-	 */
-	public int shiftNoteDown(TGMeasure measure,long start,int string){
-		return shiftNote(measure, start, string,1);
-	}
-	
-	/**
-	 * Mueve la nota a la siguiente cuerda
-	 */
-	private int shiftNote(TGMeasure measure,long start,int string,int move){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			int nextStringNumber = (note.getString() + move);
-			while(getNote(measure,start,nextStringNumber) != null){
-				nextStringNumber += move;
-			}
-			if(nextStringNumber >= 1 && nextStringNumber <= measure.getTrack().stringCount()){
-				TGString currentString = measure.getTrack().getString(note.getString());
-				TGString nextString = measure.getTrack().getString(nextStringNumber);
-				int noteValue = (note.getValue() + currentString.getValue());
-				if(noteValue >= nextString.getValue() && ((nextString.getValue() + 30 > noteValue) || measure.getTrack().isPercussionTrack()) ){
-					note.setValue(noteValue - nextString.getValue());
-					note.setString(nextString.getNumber());
-					return note.getString();
-				}
-			}
-		}
-		return 0;
-	}
-	
-	/**
-	 * Mueve la nota 1 semitono arriba
-	 */
-	public boolean moveSemitoneUp(TGMeasure measure,long start,int string){
-		return moveSemitone(measure, start, string,1);
-	}
-	
-	/**
-	 * Mueve la nota 1 semitono abajo
-	 */
-	public boolean moveSemitoneDown(TGMeasure measure,long start,int string){
-		return moveSemitone(measure, start, string,-1);
-	}
-	
-	/**
-	 * Mueve la nota los semitonos indicados
-	 */
-	private boolean moveSemitone(TGMeasure measure,long start,int string,int semitones){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			int newValue = (note.getValue() + semitones);
-			if(newValue >= 0 && (newValue < 30 || measure.getTrack().isPercussionTrack()) ){
-				note.setValue(newValue);
-				return true;
-			}
-		}
-		return false;
-	}
-	
-	/**
-	 * Set the beat stroke
-	 */
-	public boolean setStroke(TGMeasure measure,long start,int value, int direction){
-		TGBeat beat = getBeat(measure, start);
-		if( beat != null ){
-			beat.getStroke().setValue(value);
-			beat.getStroke().setDirection(direction);
-			return true;
-		}
-		return false;
-	}
-	
-	/**
-	 * Verifica si el componente se puede insertar en el compas.
-	 * si no puede, con la opcion removeSilences, verifica si el motivo por el
-	 * cual no entra es que lo siguen silencios. de ser asi los borra. 
-	 */
-	/*
-	public boolean validateDuration(TGMeasure measure,TGBeat beat,boolean moveNextComponents, boolean setCurrentDuration){
-		return validateDuration(measure, beat, beat.getDuration(),moveNextComponents, setCurrentDuration);
-	}
-	
-	
-	public boolean validateDuration(TGMeasure measure,TGBeat beat,TGDuration duration,boolean moveNextBeats, boolean setCurrentDuration){
-		int errorMargin = 10;
-		this.orderBeats(measure);
-		long measureStart = measure.getStart();
-		long measureEnd =  (measureStart + measure.getLength());
-		long beatStart = beat.getStart();
-		long beatLength = duration.getTime();
-		long beatEnd = (beatStart + beatLength);
-		List beats = measure.getBeats();
-		
-		//Verifico si hay un beat en el mismo lugar, y comparo las duraciones.
-		TGBeat currentBeat = getBeat(measure,beatStart);
-		if(currentBeat != null && beatLength <= currentBeat.getDuration().getTime()){
-			return true;
-		}
-		
-		//Verifico si hay lugar para meter el beat
-		TGBeat nextComponent = getNextBeat(beats,beat);
-		if(currentBeat == null){
-			if(nextComponent == null && beatEnd < (measureEnd + errorMargin)){
-				return true;
-			}
-			if(nextComponent != null && beatEnd < (nextComponent.getStart() + errorMargin)){
-				return true;
-			}
-		}
-		
-		// Busca si hay espacio disponible de silencios entre el componente y el el que le sigue.. si encuentra lo borra
-		if(nextComponent != null && nextComponent.isRestBeat()){
-			//Verifico si lo que sigue es un silencio. y lo borro
-			long nextBeatEnd = 0;
-			List nextBeats = new ArrayList();
-			while(nextComponent != null && nextComponent.isRestBeat() && !nextComponent.isTextBeat()){
-				nextBeats.add(nextComponent);
-				nextBeatEnd = nextComponent.getStart() + nextComponent.getDuration().getTime();
-				nextComponent = getNextBeat(beats,nextComponent);
-			}
-			if(nextComponent == null){
-				nextBeatEnd = measureEnd;
-			}else if(!nextComponent.isRestBeat() || nextComponent.isTextBeat()){
-				nextBeatEnd = nextComponent.getStart();
-			}
-			if(beatEnd <= (nextBeatEnd + errorMargin)){
-				while(!nextBeats.isEmpty()){
-					TGBeat currBeat = (TGBeat)nextBeats.get(0);
-					nextBeats.remove(currBeat);
-					removeBeat(currBeat, false);
-				}
-				return true;
-			}
-		}
-		
-		// Busca si hay espacio disponible de silencios entre el componente y el final.. si encuentra mueve todo
-		if(moveNextBeats){
-			nextComponent = getNextBeat(beats,beat);
-			if(nextComponent != null){
-				long requiredLength = (beatLength  - (nextComponent.getStart() - beatStart));
-				long nextSilenceLength = 0;
-				TGBeat nextRestBeat = getNextRestBeat(beats, beat);
-				while(nextRestBeat != null && !nextRestBeat.isTextBeat()){ 
-					nextSilenceLength += nextRestBeat.getDuration().getTime();
-					nextRestBeat = getNextRestBeat(beats, nextRestBeat);
-				}
-				
-				if(requiredLength <= (nextSilenceLength + errorMargin)){
-					beats = getBeatsBeforeEnd(measure.getBeats(),nextComponent.getStart());
-					while(!beats.isEmpty()){
-						TGBeat current = (TGBeat)beats.get(0);
-						if(current.isRestBeat() && !current.isTextBeat()){
-							requiredLength -= current.getDuration().getTime();
-							removeBeat(current, false);
-						}else if(requiredLength > 0){
-							moveBeat(current,requiredLength);
-						}
-						beats.remove(0);
-					}
-					return true;
-				}
-			}
-		}
-		
-		// como ultimo intento, asigno la duracion de cualquier componente existente en el lugar.
-		if(setCurrentDuration && currentBeat != null){
-			currentBeat.getDuration().copy( duration );
-			return true;
-		}
-		return false;
-	}
-	*/
-	/**
-	 * Cambia la Duracion del pulso.
-	 */
-	/*
-	@Deprecated
-	public void changeDuration(TGMeasure measure,TGBeat beat,TGDuration duration,boolean tryMove){
-		//obtengo la duracion vieja
-		TGDuration oldDuration = beat.getDuration().clone(getSongManager().getFactory());
-		
-		//si no entra vuelvo a dejar la vieja
-		if(validateDuration(measure,beat, duration,tryMove,false)){
-			//se lo agrego a todas las notas en la posicion
-			beat.setDuration(duration.clone(getSongManager().getFactory()));
-			
-			//trato de agregar un silencio similar al lado
-			tryChangeSilenceAfter(measure,beat);
-		}else{
-			oldDuration.copy( beat.getDuration() );
-		}
-	}
-	*/
-	/*
-	@Deprecated
-	public void tryChangeSilenceAfter(TGMeasure measure,TGBeat beat){
-		autoCompleteSilences(measure);
-		TGBeat nextBeat = getNextBeat(measure.getBeats(),beat);
-		
-		long beatEnd = (beat.getStart() + beat.getDuration().getTime());
-		long measureEnd = (measure.getStart() + measure.getLength());
-		if(nextBeat != null && nextBeat.isRestBeat() && beatEnd <= measureEnd){
-			long theMove = (getRealStart(measure,beatEnd)) - getRealStart(measure,nextBeat.getStart());
-			if((nextBeat.getStart() + theMove) < measureEnd && (nextBeat.getStart() + nextBeat.getDuration().getTime() + theMove) <= measureEnd){
-				moveBeat(nextBeat,theMove);
-				changeDuration(measure,nextBeat,beat.getDuration().clone(getSongManager().getFactory()),false);
-			}
-		}
-	}
-	*/
-	/**
-	 * Calcula si hay espacios libres. y crea nuevos silencios
-	 */
-	/*
-	public void autoCompleteSilences(TGMeasure measure){
-		List components = measure.getBeats();
-		
-		for( int i = 0; i < TGBeat.MAX_VOICES; i ++ ){
-			//TGBeat component = getFirstBeat(components);
-			TGVoice component = getFirstVoice(components, i);
-			
-			long start = measure.getStart();
-			long end = 0;
-			long diff = 0;
-			
-			while (component != null) {
-				end = component.getBeat().getStart() + component.getDuration().getTime();
-				if(component.getBeat().getStart() > start){
-					diff = component.getBeat().getStart() - start;
-					if(diff > 0){
-						createSilences(measure,start,diff, i);
-					}
-				}
-				start = end;
-				component = getNextVoice(components,component.getBeat(), i);
-			}
-			end = measure.getStart() + measure.getLength();
-			diff = end - start;
-			if(diff > 0){
-				createSilences(measure,start,diff, i);
-			}
-		}
-	}
-	*/
-	public void autoCompleteSilences(TGMeasure measure){
-		TGBeat beat = getFirstBeat( measure.getBeats() );
-		if( beat == null ){
-			createSilences(measure, measure.getStart(), measure.getLength(), 0);
-			return;
-		}
-		for( int v = 0 ; v < TGBeat.MAX_VOICES ; v ++ ){
-			TGVoice voice = getFirstVoice( measure.getBeats() , v );
-			if( voice != null && voice.getBeat().getStart() > measure.getStart() ){
-				createSilences(measure, measure.getStart(), (voice.getBeat().getStart() - measure.getStart()), v);
-			}
-		}
-		
-		long[] start = new long[beat.countVoices()];
-		long[] uncompletedLength = new long[beat.countVoices()];
-		for( int v = 0; v < uncompletedLength.length; v ++ ){
-			start[v] = 0;
-			uncompletedLength[v] = 0;
-		}
-		
-		while (beat != null) {
-			for( int v = 0; v < beat.countVoices(); v ++ ){
-				TGVoice voice = beat.getVoice( v );
-				if( !voice.isEmpty() ){
-					long voiceEnd = (beat.getStart() + voice.getDuration().getTime());
-					long nextPosition = (measure.getStart() + measure.getLength());
-					
-					TGVoice nextVoice = getNextVoice(measure.getBeats(), beat, voice.getIndex());
-					if(nextVoice != null){
-						nextPosition = nextVoice.getBeat().getStart();
-					}
-					if( voiceEnd < nextPosition ){
-						start[v] = voiceEnd;
-						uncompletedLength[v] = (nextPosition - voiceEnd);
-					}
-				}
-			}
-			
-			for( int v = 0; v < uncompletedLength.length; v ++ ){
-				if( uncompletedLength[v] > 0 ){
-					createSilences(measure,start[v],uncompletedLength[v], v);
-				}
-				start[v] = 0;
-				uncompletedLength[v] = 0;
-			}
-			beat = getNextBeat(measure.getBeats(), beat );
-		}
-	}
-	
-	/**
-	 * Crea Silencios temporarios en base a length
-	 */
-	private void createSilences(TGMeasure measure,long start,long length, int voiceIndex){
-		long nextStart = start;
-		List durations = createDurations(getSongManager().getFactory(),length);
-		Iterator it = durations.iterator();
-		while(it.hasNext()){
-			TGDuration duration = (TGDuration)it.next();
-			
-			boolean isNew = false;
-			long beatStart = getRealStart(measure, nextStart);
-			TGBeat beat = getBeat(measure, beatStart);
-			if( beat == null ){
-				beat = getSongManager().getFactory().newBeat();
-				beat.setStart( getRealStart(measure, nextStart) );
-				isNew = true;
-			}
-			//TGBeat beat = getSongManager().getFactory().newBeat();
-			//beat.setStart( getRealStart(measure, nextStart) );
-			
-			TGVoice voice = beat.getVoice(voiceIndex);
-			voice.setEmpty(false);
-			duration.copy(voice.getDuration());
-			
-			if( isNew ){
-				addBeat(measure,beat);
-			}
-			// temporal
-			//beat.getVoice(0).setEmpty(false);
-			//beat.getVoice(1).setEmpty(false);
-			// /temporal
-			
-			nextStart += duration.getTime();
-		}
-	}
-	
-	public long getRealStart(TGMeasure measure,long currStart){
-		long beatLength = TGSongManager.getDivisionLength(measure.getHeader());
-		long start = currStart;
-		boolean startBeat = (start % beatLength == 0);
-		if(!startBeat){
-			TGDuration minDuration = getSongManager().getFactory().newDuration();
-			minDuration.setValue(TGDuration.SIXTY_FOURTH);
-			minDuration.getDivision().setEnters(3);
-			minDuration.getDivision().setTimes(2);
-			for(int i = 0;i < minDuration.getTime();i++){
-				start ++;
-				startBeat = (start % beatLength == 0);
-				if(startBeat){
-				   break;
-				}
-			}
-			if(!startBeat){
-				start = currStart;
-			}
-		}
-		return start;
-	}
-	
-	/** 
-	 * Liga la nota
-	 */
-	public void changeTieNote(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			changeTieNote(note);
-		}
-	}
-	
-	/** 
-	 * Liga la nota
-	 */
-	public void changeTieNote(TGNote note){
-		note.setTiedNote(!note.isTiedNote());
-		note.getEffect().setDeadNote(false);
-	}
-	
-	/** 
-	 * Agrega un vibrato
-	 */
-	public void changeVibratoNote(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setVibrato(!note.getEffect().isVibrato());
-		}
-	}
-	
-	/** 
-	 * Agrega una nota muerta
-	 */
-	public void changeDeadNote(TGNote note){
-		note.getEffect().setDeadNote(!note.getEffect().isDeadNote());
-		note.setTiedNote(false);
-	}
-	
-	/** 
-	 * Agrega un slide
-	 */
-	public void changeSlideNote(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setSlide(!note.getEffect().isSlide());
-		}
-	}
-	
-	/** 
-	 * Agrega un hammer
-	 */
-	public void changeHammerNote(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setHammer(!note.getEffect().isHammer());
-		}
-	}
-	
-	/** 
-	 * Agrega un palm-mute
-	 */
-	public void changePalmMute(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setPalmMute(!note.getEffect().isPalmMute());
-		}
-	}
-	
-	/** 
-	 * Agrega un staccato
-	 */
-	public void changeStaccato(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setStaccato(!note.getEffect().isStaccato());
-		}
-	}
-	
-	/** 
-	 * Agrega un tapping
-	 */
-	public void changeTapping(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setTapping(!note.getEffect().isTapping());
-		}
-	}
-	
-	/** 
-	 * Agrega un slapping
-	 */
-	public void changeSlapping(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setSlapping(!note.getEffect().isSlapping());
-		}
-	}
-	
-	/** 
-	 * Agrega un popping
-	 */
-	public void changePopping(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setPopping(!note.getEffect().isPopping());
-		}
-	}
-	
-	/** 
-	 * Agrega un bend
-	 */
-	public void changeBendNote(TGMeasure measure,long start,int string,TGEffectBend bend){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setBend(bend);
-		}
-	}
-	
-	/** 
-	 * Agrega un tremoloBar
-	 */
-	public void changeTremoloBar(TGMeasure measure,long start,int string,TGEffectTremoloBar tremoloBar){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setTremoloBar(tremoloBar);
-		}
-	}
-	
-	/** 
-	 * Agrega un GhostNote
-	 */
-	public void changeGhostNote(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){ 
-			note.getEffect().setGhostNote(!note.getEffect().isGhostNote());
-		}
-	}
-	
-	/** 
-	 * Agrega un AccentuatedNote
-	 */
-	public void changeAccentuatedNote(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){ 
-			note.getEffect().setAccentuatedNote(!note.getEffect().isAccentuatedNote());
-		}
-	}
-	
-	/** 
-	 * Agrega un GhostNote
-	 */
-	public void changeHeavyAccentuatedNote(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setHeavyAccentuatedNote(!note.getEffect().isHeavyAccentuatedNote());
-		}
-	}
-	
-	/** 
-	 * Agrega un harmonic
-	 */
-	public void changeHarmonicNote(TGMeasure measure,long start,int string,TGEffectHarmonic harmonic){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setHarmonic(harmonic);
-		}
-	}
-	
-	/** 
-	 * Agrega un grace
-	 */
-	public void changeGraceNote(TGMeasure measure,long start,int string,TGEffectGrace grace){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setGrace(grace);
-		}
-	}
-	
-	/** 
-	 * Agrega un trill
-	 */
-	public void changeTrillNote(TGMeasure measure,long start,int string,TGEffectTrill trill){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setTrill(trill);
-		}
-	}
-	
-	/** 
-	 * Agrega un tremolo picking
-	 */
-	public void changeTremoloPicking(TGMeasure measure,long start,int string,TGEffectTremoloPicking tremoloPicking){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setTremoloPicking(tremoloPicking);
-		}
-	}
-	
-	/** 
-	 * Agrega un fadeIn
-	 */
-	public void changeFadeIn(TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.getEffect().setFadeIn(!note.getEffect().isFadeIn());
-		}
-	}
-	
-	/** 
-	 * Cambia el Velocity
-	 */
-	public void changeVelocity(int velocity,TGMeasure measure,long start,int string){
-		TGNote note = getNote(measure,start,string);
-		if(note != null){
-			note.setVelocity(velocity);
-		}
-	}
-	/*
-	public static List createDurations(TGFactory factory,long time){
-		List durations = new ArrayList();
-		TGDuration tempDuration = factory.newDuration();
-		tempDuration.setValue(TGDuration.WHOLE);
-		tempDuration.setDotted(true);
-		long tempTime = time;
-		boolean finish = false;
-		while(!finish){
-			long currentDurationTime = tempDuration.getTime();
-			if(currentDurationTime <= tempTime){
-				durations.add(tempDuration.clone(factory));
-				tempTime -= currentDurationTime;
-			}else{
-				if(tempDuration.isDotted()){
-					tempDuration.setDotted(false);
-				}else{
-					tempDuration.setValue(tempDuration.getValue() * 2);
-					tempDuration.setDotted(true);
-				}
-			}
-			if(tempDuration.getValue() > TGDuration.SIXTY_FOURTH){
-				finish = true;
-			}
-		}
-		return durations;
-	}
-	*/
-	
-	public static List createDurations(TGFactory factory,long time){
-		List durations = new ArrayList();
-		TGDuration minimum = factory.newDuration();
-		minimum.setValue(TGDuration.SIXTY_FOURTH);
-		minimum.setDotted(false);
-		minimum.setDoubleDotted(false);
-		minimum.getDivision().setEnters(3);
-		minimum.getDivision().setTimes(2);
-		
-		long missingTime = time;
-		while( missingTime > minimum.getTime() ){
-			TGDuration duration = TGDuration.fromTime(factory, missingTime, minimum ,  10);
-			durations.add( duration.clone(factory) );
-			missingTime -= duration.getTime();
-		}
-		return durations;
-	}
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	
-	/**
-	 * Retorna el Siguiente Componente
-	 */
-	public TGVoice getNextVoice(List beats,TGBeat beat, int index) {
-		TGVoice next = null;
-		for (int i = 0; i < beats.size(); i++) {
-			TGBeat current = (TGBeat) beats.get(i);
-			if (current.getStart() > beat.getStart() && !current.getVoice(index).isEmpty()) {
-				if (next == null) {
-					next = current.getVoice(index);
-				} else if (current.getStart() < next.getBeat().getStart()) {
-					next = current.getVoice(index);
-				} /*else if (current.getStart() == next.getBeat().getStart() && current.getDuration().getTime() <= next.getDuration().getTime()) {
-					next = current.getVoice(index);
-				}*/
-			}
-		}
-		return next;
-	}
-	
-	/**
-	 * Retorna el Componente Anterior
-	 */
-	public TGVoice getPreviousVoice(List beats,TGBeat beat, int index) {
-		TGVoice previous = null;
-		for (int i = 0; i < beats.size(); i++) {
-			TGBeat current = (TGBeat) beats.get(i);
-			if (current.getStart() < beat.getStart() && !current.getVoice(index).isEmpty()) {
-				if (previous == null) {
-					previous = current.getVoice(index);
-				} else if (current.getStart() > previous.getBeat().getStart()) {
-					previous = current.getVoice(index);
-				} /*else if (current.getStart() == previous.getBeat().getStart() && current.getDuration().getTime() <= previous.getDuration().getTime()) {
-					previous = current.getVoice(index);
-				}*/
-			}
-		}
-		return previous;
-	}
-	
-	/**
-	 * Retorna el Primer Componente
-	 */
-	public TGVoice getFirstVoice(List beats, int index) {
-		TGVoice first = null;
-		for (int i = 0; i < beats.size(); i++) {
-			TGBeat current = (TGBeat) beats.get(i);
-			if ( (first == null || current.getStart() < first.getBeat().getStart() ) && !current.getVoice(index).isEmpty()) {
-				first = current.getVoice(index);
-			}
-		}
-		return first;
-	}
-	
-	/**
-	 * Retorna el Ultimo Componente
-	 */
-	public TGVoice getLastVoice(List beats, int index) {
-		TGVoice last = null;
-		for (int i = 0; i < beats.size(); i++) {
-			TGBeat current = (TGBeat) beats.get(i);
-			if ( (last == null || last.getBeat().getStart() < current.getStart()) && !current.getVoice(index).isEmpty() ) {
-				last = current.getVoice(index);
-			}
-		}
-		return last;
-	}
-	
-	
-	/**
-	 * Retorna el Siguiente Componente
-	 */
-	public TGVoice getNextRestVoice(List beats,TGVoice voice) {
-		TGVoice next = getNextVoice(beats, voice.getBeat(), voice.getIndex());
-		while(next != null && !next.isRestVoice()){
-			next = getNextVoice(beats, next.getBeat(), next.getIndex());
-		}
-		return next;
-	}
-	
-	public List getVoicesBeforeEnd(List beats,long fromStart, int index) {
-		List list = new ArrayList();
-		Iterator it = beats.iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat)it.next();
-			if (beat.getStart() >= fromStart) {
-				TGVoice voice = beat.getVoice(index);
-				if(!voice.isEmpty()){
-					list.add(voice);
-				}
-			}
-		}
-		return list;
-	}
-	
-	public void addSilence(TGMeasure measure,long start, TGDuration duration, int voice){
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			addSilence(beat, duration, voice);
-		}
-	}
-	
-	public void addSilence(TGBeat beat, TGDuration duration, int voice){
-		addSilence(beat, duration, beat.getStart(),voice);
-	}
-	
-	public void addSilence(TGBeat beat, TGDuration duration, long start, int voice){
-		boolean emptyVoice = beat.getVoice( voice ).isEmpty();
-		if( emptyVoice ){
-			beat.getVoice( voice ).setEmpty( false );
-		}
-		
-		//Verifico si entra en el compas
-		if(validateDuration(beat.getMeasure(),beat, voice, duration,true,true)){
-			//Borro lo que haya en la misma posicion
-			//removeNote(beat.getMeasure(),beat.getStart(),voice, note.getString());
-			
-			duration.copy(beat.getVoice(voice).getDuration());
-			
-			//trato de agregar un silencio similar al lado
-			tryChangeSilenceAfter(beat.getMeasure(),beat.getVoice(voice));
-			
-			// Despues de cambiar la duracion, verifico si hay un beat mejor para agregar el silencio.
-			TGVoice realVoice = beat.getVoice(voice);
-			if(realVoice.getBeat().getStart() != start){
-				TGVoice beatIn = getVoiceIn(realVoice.getBeat().getMeasure(), start, voice);
-				if( beatIn != null ) {
-					realVoice = beatIn;
-				}
-			}
-			realVoice.setEmpty(false);
-		}else{
-			beat.getVoice( voice ).setEmpty( emptyVoice );
-		}
-	}
-	
-	public void removeVoice(TGVoice voice){
-		voice.setEmpty(true);
-		
-		// Remove the beat If all voices are empty 
-		TGBeat beat = voice.getBeat();
-		for(int i = 0; i < beat.countVoices(); i ++){
-			if( !beat.getVoice(i).isEmpty() ){
-				return;
-			}
-		}
-		this.removeBeat(beat);
-	}
-	
-	public void removeVoice(TGVoice voice,boolean moveNextVoices){
-		removeVoice(voice);
-		if(moveNextVoices){
-			long start = voice.getBeat().getStart();
-			long length = voice.getDuration().getTime();
-			TGVoice next = getNextVoice(voice.getBeat().getMeasure().getBeats(),voice.getBeat(),voice.getIndex());
-			if(next != null){
-				length = next.getBeat().getStart() - start;
-			}
-			moveVoices(voice.getBeat().getMeasure(),start + length,-length, voice.getIndex(), voice.getDuration());
-		}
-	}
-	
-	public void removeVoice(TGMeasure measure,long start,int index, boolean moveNextComponents){
-		TGBeat beat = getBeat(measure, start);
-		if(beat != null){
-			removeVoice(beat.getVoice(index), moveNextComponents);
-		}
-	}
-	
-	public void removeVoicesOutOfTime(TGMeasure measure){
-		List voicesToRemove = new ArrayList();
-		
-		long mStart = measure.getStart();
-		long mEnd = mStart + measure.getLength();
-		
-		Iterator beats = measure.getBeats().iterator();
-		while(beats.hasNext()){
-			TGBeat beat = (TGBeat)beats.next();
-			for( int v = 0; v < beat.countVoices() ; v ++){
-				TGVoice voice = beat.getVoice( v );
-				if(!voice.isEmpty()){
-					if( beat.getStart() < mStart || (beat.getStart() + voice.getDuration().getTime()) > mEnd){
-						voicesToRemove.add( voice );
-					}
-				}
-			}
-		}
-		Iterator it = voicesToRemove.iterator();
-		while(it.hasNext()){
-			TGVoice voice = (TGVoice)it.next();
-			this.removeVoice( voice );
-		}
-	}
-	
-	public void removeMeasureVoices(TGMeasure measure,int index){
-		boolean hasNotes = false;
-		
-		List voices = new ArrayList();
-		Iterator it = measure.getBeats().iterator();
-		while(it.hasNext()){
-			TGBeat beat = (TGBeat)it.next();
-			TGVoice voice = beat.getVoice(index);
-			if(voice.isRestVoice()){
-				voices.add(voice);
-			}else if(!voice.isEmpty()){
-				hasNotes = true;
-				break;
-			}
-		}
-		
-		if( !hasNotes ){
-			it = voices.iterator();
-			while(it.hasNext()){
-				TGVoice voice = (TGVoice)it.next();
-				this.removeVoice( voice );
-			}
-		}
-	}
-	
-	public void changeVoiceDirection( TGVoice voice , int direction){
-		voice.setDirection( direction );
-	}
-	
-	public void changeDuration(TGMeasure measure,TGBeat beat,TGDuration duration,int voice, boolean tryMove){
-		//obtengo la duracion vieja
-		TGDuration oldDuration = beat.getVoice(voice).getDuration().clone(getSongManager().getFactory());
-		
-		//si no entra vuelvo a dejar la vieja
-		if(validateDuration(measure,beat, voice, duration,tryMove,false)){
-			//se lo agrego a todas las notas en la posicion
-			beat.getVoice(voice).setDuration(duration.clone(getSongManager().getFactory()));
-			
-			//trato de agregar un silencio similar al lado
-			tryChangeSilenceAfter(measure,beat.getVoice(voice));
-		}else{
-			oldDuration.copy( beat.getVoice(voice).getDuration() );
-		}
-	}
-	
-	public void tryChangeSilenceAfter(TGMeasure measure,TGVoice voice){
-		autoCompleteSilences(measure);
-		
-		TGVoice nextVoice = getNextVoice(measure.getBeats(),voice.getBeat(),voice.getIndex());
-		
-		long beatEnd = (voice.getBeat().getStart() + voice.getDuration().getTime());
-		long measureEnd = (measure.getStart() + measure.getLength());
-		if(nextVoice != null && !nextVoice.isEmpty() && nextVoice.isRestVoice() && beatEnd <= measureEnd){
-			long theMove = (getRealStart(measure,beatEnd)) - getRealStart(measure,nextVoice.getBeat().getStart());
-			if((nextVoice.getBeat().getStart() + theMove) < measureEnd && (nextVoice.getBeat().getStart() + nextVoice.getDuration().getTime() + theMove) <= measureEnd){
-				moveVoice(nextVoice,theMove);
-				changeDuration(measure,nextVoice.getBeat(),voice.getDuration().clone(getSongManager().getFactory()),nextVoice.getIndex(),false);
-			}
-		}
-	}
-	
-	private void moveVoices(List voices,long theMove){
-		/*
-		Iterator it = voices.iterator();
-		while(it.hasNext()){
-			TGVoice voice = (TGVoice)it.next();
-			moveVoice(voice,theMove);
-		}
-		*/
-		int count = voices.size();
-		for( int i = 0 ; i < count ; i ++ ){
-			TGVoice voice = (TGVoice)voices.get( (theMove < 0 ? i : ( (count - 1) - i ) ) );
-			moveVoice(voice,theMove);
-		}
-	}
-	
-	public void moveVoice(TGVoice voice, long theMove){
-		long newStart = (voice.getBeat().getStart() + theMove);
-		
-		TGBeat newBeat = getBeat(voice.getBeat().getMeasure(),newStart);
-		if( newBeat == null ){
-			newBeat = getSongManager().getFactory().newBeat();
-			newBeat.setStart( newStart );
-			addBeat(voice.getBeat().getMeasure(), newBeat);
-		}
-		
-		this.moveVoice(voice, newBeat);
-	}
-	
-	public void moveVoice(TGVoice voice, TGBeat beat){
-		TGBeat currentBeat = voice.getBeat();
-		if(!currentBeat.equals(beat)){
-			if(currentBeat.getVoice( voice.getIndex() ).equals( voice )){
-				if ( currentBeat.isTextBeat() && isUniqueVoice(voice, false) ){
-						beat.setText( currentBeat.getText() );
-						currentBeat.removeText();
-				}
-				if( isUniqueVoice(voice, true) ){
-					if( currentBeat.isChordBeat() ){
-						beat.setChord( currentBeat.getChord() );
-						currentBeat.removeChord();
-					}
-					if( currentBeat.getStroke().getDirection() != TGStroke.STROKE_NONE ){
-						currentBeat.getStroke().copy( beat.getStroke() );
-						currentBeat.getStroke().setDirection(TGStroke.STROKE_NONE);
-					}
-				}
-				// Make sure to remove another voice instance from old beat.
-				TGVoice newVoice = getSongManager().getFactory().newVoice(voice.getIndex());
-				currentBeat.setVoice( voice.getIndex(), newVoice);
-				this.removeVoice(newVoice);
-			}
-			beat.setVoice( voice.getIndex() , voice);
-		}
-	}
-	
-	public boolean validateDuration(TGMeasure measure,TGBeat beat,int voice, TGDuration duration,boolean moveNextBeats, boolean setCurrentDuration){
-		int errorMargin = 10;
-		this.orderBeats(measure);
-		long measureStart = measure.getStart();
-		long measureEnd =  (measureStart + measure.getLength());
-		long beatStart = beat.getStart();
-		long beatLength = duration.getTime();
-		long beatEnd = (beatStart + beatLength);
-		List beats = measure.getBeats();
-		
-		//Verifico si hay un beat en el mismo lugar, y comparo las duraciones.
-		TGBeat currentBeat = getBeat(measure,beatStart);
-		TGVoice currentVoice = null;
-		if(currentBeat != null){
-			currentVoice = currentBeat.getVoice(voice);
-			if(!currentVoice.isEmpty() && beatLength <= currentVoice.getDuration().getTime()){
-				return true;
-			}
-		}
-		
-		//Verifico si hay lugar para meter el beat
-		TGVoice nextVoice = getNextVoice(beats,beat, voice);
-		if(currentVoice == null || currentVoice.isEmpty()){
-			if((nextVoice == null || nextVoice.isEmpty()) && beatEnd < (measureEnd + errorMargin)){
-				return true;
-			}
-			if((nextVoice != null && !nextVoice.isEmpty()) && beatEnd < (nextVoice.getBeat().getStart() + errorMargin)){
-				return true;
-			}
-		}
-		
-		// Busca si hay espacio disponible de silencios entre el componente y el el que le sigue.. si encuentra lo borra
-		if(nextVoice != null && !nextVoice.isEmpty() && nextVoice.isRestVoice()){
-			//Verifico si lo que sigue es un silencio. y lo borro
-			long nextBeatEnd = 0;
-			List nextBeats = new ArrayList();
-			while(nextVoice != null && !nextVoice.isEmpty() && nextVoice.isRestVoice() && !nextVoice.getBeat().isTextBeat()){
-				nextBeats.add(nextVoice);
-				nextBeatEnd = nextVoice.getBeat().getStart() + nextVoice.getDuration().getTime();
-				nextVoice = getNextVoice(beats,nextVoice.getBeat(), voice);
-			}
-			if(nextVoice == null || nextVoice.isEmpty()){
-				nextBeatEnd = measureEnd;
-			}else if(!nextVoice.isRestVoice() || nextVoice.getBeat().isTextBeat()){
-				nextBeatEnd = nextVoice.getBeat().getStart();
-			}
-			if(beatEnd <= (nextBeatEnd + errorMargin)){
-				while(!nextBeats.isEmpty()){
-					TGVoice currVoice = (TGVoice)nextBeats.get(0);
-					nextBeats.remove(currVoice);
-					removeVoice(currVoice, false);
-				}
-				return true;
-			}
-		}
-		
-		// Busca si hay espacio disponible de silencios entre el componente y el final.. si encuentra mueve todo
-		
-		if(moveNextBeats){
-			nextVoice = getNextVoice(beats,beat, voice);
-			if(nextVoice != null){
-				long requiredLength = (beatLength  - (nextVoice.getBeat().getStart() - beatStart));
-				long nextSilenceLength = 0;
-				TGVoice nextRestBeat = getNextRestVoice(beats, beat.getVoice(voice));
-				while(nextRestBeat != null){ 
-					nextSilenceLength += nextRestBeat.getDuration().getTime();
-					nextRestBeat = getNextRestVoice(beats, nextRestBeat);
-				}
-				
-				if(requiredLength <= (nextSilenceLength + errorMargin)){
-					List voices = getVoicesBeforeEnd(measure.getBeats(),nextVoice.getBeat().getStart(), voice);
-					while(!voices.isEmpty()){
-						TGVoice currentVocie = (TGVoice)voices.get(0);
-						if(currentVocie.isRestVoice()){
-							requiredLength -= currentVocie.getDuration().getTime();
-							removeVoice(currentVocie, false);
-						}else if(requiredLength > 0){
-							moveVoice(currentVocie,requiredLength);
-						}
-						voices.remove(0);
-					}
-					return true;
-				}
-			}
-		}
-		
-		
-		// como ultimo intento, asigno la duracion de cualquier componente existente en el lugar.
-		if(setCurrentDuration && currentVoice != null && !currentVoice.isEmpty()){
-			currentVoice.getDuration().copy( duration );
-			return true;
-		}
-		return false;
-	}
-	/*
-	public boolean moveVoices(TGMeasure measure,long start,long theMove, int voiceIndex, TGDuration fillDuration){
-		if( theMove == 0 ){
-			return false;
-		}
-		boolean success = true;
-		long measureStart = measure.getStart();
-		long measureEnd =  (measureStart + measure.getLength());
-		
-		// Muevo los componentes
-		List voicesToMove = getVoicesBeforeEnd(measure.getBeats(),start, voiceIndex);
-		moveVoices(voicesToMove,theMove);
-		
-		if(success){
-			List voicesToRemove = new ArrayList();
-			List beats = new ArrayList(measure.getBeats());
-			
-			// Verifica los silencios a eliminar al principio del compas
-			TGVoice first = getFirstVoice( beats, voiceIndex );
-			while(first != null && first.isRestVoice() && first.getBeat().getStart() < measureStart){
-				beats.remove(first);
-				voicesToRemove.add(first);
-				first = getNextVoice( beats,first.getBeat(), voiceIndex);
-			}
-			
-			// Verifica los silencios a eliminar al final del compas
-			TGVoice last = getLastVoice(beats, voiceIndex);
-			TGDuration lastDuration = (last != null ? last.getDuration() : null);
-			while(last != null && lastDuration != null && last.isRestVoice() && (last.getBeat().getStart() + lastDuration.getTime() ) > measureEnd  ){
-				beats.remove(last);
-				voicesToRemove.add(last);
-				last = getPreviousVoice(beats,last.getBeat(), voiceIndex);
-				lastDuration = (last != null ? last.getDuration() : null);
-			}
-			
-			// Si el primer o ultimo componente, quedan fuera del compas, entonces el movimiento no es satisfactorio
-			if(first != null && last != null && lastDuration != null){
-				if(first.getBeat().getStart() < measureStart || (last.getBeat().getStart() + lastDuration.getTime()) > measureEnd){
-					success = false;
-				}
-			}
-			
-			if(success){
-				// Elimino los silencios que quedaron fuera del compas.
-				Iterator it = voicesToRemove.iterator();
-				while( it.hasNext() ){
-					TGVoice beat = (TGVoice)it.next();
-					removeVoice(beat);
-				}
-				
-				// Se crean silencios en los espacios vacios, si la duracion fue especificada.
-				if( fillDuration != null ){
-					if( theMove < 0 ){
-						last = getLastVoice(measure.getBeats(), voiceIndex);
-						lastDuration = (last != null ? last.getDuration() : null);
-						long beatStart = ( (last != null && lastDuration != null ? last.getBeat().getStart()  + lastDuration.getTime() : start  )  );
-						if( (beatStart + fillDuration.getTime()) <= measureEnd ){
-							boolean beatNew = false;
-							TGBeat beat = getBeat(measure, beatStart);
-							if(beat == null){
-								beat = getSongManager().getFactory().newBeat();
-								beat.setStart( beatStart );
-								beatNew = true;
-							}
-							TGVoice voice = beat.getVoice(voiceIndex);
-							voice.setEmpty(false);
-							fillDuration.copy( voice.getDuration() );
-							if( beatNew ){
-								addBeat(measure, beat );
-							}
-						}
-					}
-					else{
-						first = getFirstVoice(getBeatsBeforeEnd(measure.getBeats(),start), voiceIndex);
-						if( (start + fillDuration.getTime()) <= (first != null ?first.getBeat().getStart() : measureEnd ) ){
-							boolean beatNew = false;
-							TGBeat beat = getBeat(measure, start);
-							if(beat == null){
-								beat = getSongManager().getFactory().newBeat();
-								beat.setStart( start );
-								beatNew = true;
-							}
-							TGVoice voice = beat.getVoice(voiceIndex);
-							voice.setEmpty(false);
-							fillDuration.copy( voice.getDuration() );
-							if( beatNew ){
-								addBeat(measure, beat );
-							}
-						}
-					}
-				}
-			}
-		}
-		
-		// Si el movimiento no es satisfactorio, regreso todo como estaba
-		if(! success ){
-			moveVoices(voicesToMove,-theMove);
-		}
-		this.removeEmptyBeats(measure);
-		
-		return success;
-	}
-	*/
-		
-	public boolean moveVoices(TGMeasure measure,long start,long theMove, int voiceIndex, TGDuration fillDuration){
-		if( theMove == 0 ){
-			return false;
-		}
-		boolean success = true;
-		long measureStart = measure.getStart();
-		long measureEnd =  (measureStart + measure.getLength());
-		
-		List voicesToMove = getVoicesBeforeEnd(measure.getBeats(),start, voiceIndex);
-		List voicesToRemove = new ArrayList();
-		List currentBeats = getBeatsBeforeEnd(measure.getBeats(), start);
-		
-		// Verifica los silencios a eliminar al principio del compas
-		TGVoice first = getFirstVoice( currentBeats, voiceIndex );
-		while(first != null && first.isRestVoice() && (!first.getBeat().isTextBeat() || !isUniqueVoice(first,false)) && (first.getBeat().getStart() + theMove) < measureStart){
-			currentBeats.remove(first.getBeat());
-			voicesToRemove.add(first);
-			first = getNextVoice( currentBeats,first.getBeat(), voiceIndex);
-		}
-		
-		// Verifica los silencios a eliminar al final del compas
-		TGVoice last = getLastVoice(currentBeats, voiceIndex);
-		TGDuration lastDuration = (last != null ? last.getDuration() : null);
-		while(last != null && lastDuration != null && last.isRestVoice() && (!last.getBeat().isTextBeat() || !isUniqueVoice(last,false)) && (last.getBeat().getStart() + lastDuration.getTime() + theMove) > measureEnd  ){
-			currentBeats.remove(last.getBeat());
-			voicesToRemove.add(last);
-			last = getPreviousVoice(currentBeats,last.getBeat(), voiceIndex);
-			lastDuration = (last != null ? last.getDuration() : null);
-		}
-		
-		// Si el primer o ultimo componente, quedan fuera del compas, entonces el movimiento no es satisfactorio
-		if(first != null && last != null && lastDuration != null){
-			if((first.getBeat().getStart() + theMove) < measureStart || (last.getBeat().getStart() + lastDuration.getTime() + theMove) > measureEnd){
-				success = false;
-			}
-		}
-		
-		if(success){
-			this.moveVoices(voicesToMove,theMove);
-			
-			// Elimino los silencios que quedaron fuera del compas.
-			Iterator it = voicesToRemove.iterator();
-			while( it.hasNext() ){
-				TGVoice beat = (TGVoice)it.next();
-				removeVoice(beat);
-			}
-			
-			// Se crean silencios en los espacios vacios, si la duracion fue especificada.
-			if( fillDuration != null ){
-				if( theMove < 0 ){
-					last = getLastVoice(measure.getBeats(), voiceIndex);
-					lastDuration = (last != null ? last.getDuration() : null);
-					long beatStart = ( (last != null && lastDuration != null ? last.getBeat().getStart()  + lastDuration.getTime() : start  )  );
-					if( (beatStart + fillDuration.getTime()) <= measureEnd ){
-						boolean beatNew = false;
-						TGBeat beat = getBeat(measure, beatStart);
-						if(beat == null){
-							beat = getSongManager().getFactory().newBeat();
-							beat.setStart( beatStart );
-							beatNew = true;
-						}
-						TGVoice voice = beat.getVoice(voiceIndex);
-						voice.setEmpty(false);
-						fillDuration.copy( voice.getDuration() );
-						if( beatNew ){
-							addBeat(measure, beat );
-						}
-					}
-				}
-				else{
-					first = getFirstVoice(getBeatsBeforeEnd(measure.getBeats(),start), voiceIndex);
-					if( (start + fillDuration.getTime()) <= (first != null ?first.getBeat().getStart() : measureEnd ) ){
-						boolean beatNew = false;
-						TGBeat beat = getBeat(measure, start);
-						if(beat == null){
-							beat = getSongManager().getFactory().newBeat();
-							beat.setStart( start );
-							beatNew = true;
-						}
-						TGVoice voice = beat.getVoice(voiceIndex);
-						voice.setEmpty(false);
-						fillDuration.copy( voice.getDuration() );
-						if( beatNew ){
-							addBeat(measure, beat );
-						}
-					}
-				}
-			}
-			
-			// Borro todos los beats que quedaron vacios.
-			this.removeEmptyBeats(measure);
-		}
-		
-		return success;
-	}
-	
-	public boolean isUniqueVoice(TGVoice voice, boolean ignoreRests){
-		TGBeat beat = voice.getBeat();
-		for( int v = 0 ; v < beat.countVoices() ; v ++ ){
-			if( v != voice.getIndex() ){
-				TGVoice currentVoice = beat.getVoice( v );
-				if( !currentVoice.isEmpty() && (!ignoreRests || !currentVoice.isRestVoice())){
-					return false;
-				}
-			}
-		}
-		return true;
-	}
-	
-	public void transposeNotes( TGMeasure measure, int transposition , boolean tryKeepString, boolean applyToChords, int applyToString){
-		if( transposition != 0 ){
-			if( measure != null ){
-				TGTrack track = measure.getTrack();
-				if( track != null ){
-					List strings = getSortedStringsByValue(track, ( transposition > 0 ? 1 : -1 ) ) ;
-					for( int i = 0 ; i < measure.countBeats() ; i ++ ){
-						TGBeat beat = measure.getBeat( i );
-						transposeNotes( beat, strings, transposition , tryKeepString, applyToChords, applyToString );
-					}
-				}
-			}
-		}
-	}
-	
-	public void transposeNotes( TGMeasure measure, int[] transpositionStrings , boolean tryKeepString , boolean applyToChords){
-		if( transpositionStrings != null && transpositionStrings.length > 0 ){
-			if( measure != null ){
-				TGTrack track = measure.getTrack();
-				if( track != null ){
-					TGNote[] notes = new TGNote[ transpositionStrings.length ];
-					
-					for( int b = 0 ; b < measure.countBeats() ; b ++ ){
-						TGBeat beat = measure.getBeat( b );
-						
-						for( int n = 0 ; n < notes.length ; n ++ ){
-							notes[ n ] = getNote( beat, (n + 1) );
-						}
-						
-						for( int i = 0 ; i < notes.length ; i ++ ){
-							if( notes[ i ] != null ){
-								int transposition = transpositionStrings[ i ];
-								if( transposition != 0 ){
-									int applyToString = notes[i].getString();
-									List strings = getSortedStringsByValue(track, ( transposition > 0 ? 1 : -1 ) ) ;
-									transposeNotes( beat, strings, transposition , tryKeepString, applyToChords, applyToString );
-								}
-							}
-						}
-					}
-				}
-			}
-		}
-	}
-	
-	public void transposeNotes( TGBeat beat, List strings, int transposition , boolean tryKeepString, boolean applyToChord, int applyToString){
-		if( transposition != 0 ){
-			List notes = getNotes(beat);
-			
-			int stringCount = strings.size();
-			for( int i = 0 ; i < stringCount ; i ++ ){
-				TGString string = (TGString)strings.get( (stringCount - i) - 1 );
-				if( applyToString == -1 || string.getNumber() == applyToString ){
-					TGNote note = null;
-					for( int n = 0 ; n < notes.size() ; n ++ ){
-						TGNote current = (TGNote)notes.get( n );
-						if( current.getString() == string.getNumber() ){
-							note = current;
-						}
-					}
-					if( note != null ){
-						transposeNote(note, notes, strings, transposition, tryKeepString, false );
-					}
-					
-					if( applyToChord && beat.isChordBeat() ){
-						TGChord chord = beat.getChord();
-						int chordString = ( string.getNumber() - 1 );
-						if( chord.getFretValue( chordString ) >= 0 ){
-							transposeChordNote(chord, chordString, strings, transposition, tryKeepString, false);
-						}
-						chord.setFirstFret( -1 );
-					}
-				}
-			}
-		}
-	}
-	
-	private boolean transposeNote( TGNote note, List notes, List strings , int transposition , boolean tryKeepString, boolean forceChangeString ){
-		boolean canTransposeFret = false;
-		
-		int maximumFret = 29;
-		
-		int transposedFret = ( note.getValue() + transposition );
-		
-		// Check if transposition could be done without change the string
-		if( transposedFret >= 0 && transposedFret <= maximumFret ){
-			// Do it now if keep string is the priority
-			if( !forceChangeString && tryKeepString ){
-				note.setValue( transposedFret );
-				return true;
-			}
-			canTransposeFret = true;
-		}
-		
-		// Check the current string index for this note
-		int stringIndex = -1;
-		for( int i = 0 ; i < strings.size() ; i ++ ){
-			TGString string = ( TGString ) strings.get( i );
-			if( string.getNumber() == note.getString() ){
-				stringIndex = i;
-				break;
-			}
-		}
-		
-		// Try to change the string of the note
-		TGString string = ( TGString ) strings.get( stringIndex );
-		int transposedValue = ( string.getValue() + note.getValue() + transposition );
-		int nextStringIndex = ( stringIndex + 1 );
-		while( nextStringIndex >= 0 && nextStringIndex < strings.size() ){
-			TGString nextString = ( TGString ) strings.get( nextStringIndex );
-			TGNote nextOwner = null;
-			for( int i = 0 ; i < notes.size() ; i ++ ){
-				TGNote nextNote = (TGNote) notes.get( i );
-				if( nextNote.getString() == nextString.getNumber() ){
-					nextOwner = nextNote;
-				}
-			}
-			
-			int transposedStringFret = ( transposedValue - nextString.getValue() );
-			if( transposedStringFret >= 0 && transposedStringFret <= maximumFret ){
-				if( nextOwner != null ){
-					if( ! transposeNote(nextOwner, notes, strings, 0 , tryKeepString , !canTransposeFret ) ){
-						// Note was removed.
-						nextOwner = null ;
-					}
-				}
-				if( nextOwner == null || nextOwner.getString() != nextString.getNumber() ){
-					note.setValue( transposedStringFret );
-					note.setString( nextString.getNumber() );
-					
-					return true;
-				}
-			}
-			nextStringIndex ++;
-		}
-		
-		// Keep using same string if it's possible
-		if( !forceChangeString && canTransposeFret ){
-			note.setValue( transposedFret );
-			return true;
-		}
-		
-		// If note can't be transposed, it must be removed.
-		notes.remove( note );
-		removeNote(note);
-		
-		return false;
-	}
-	
-	private boolean transposeChordNote( TGChord chord, int chordString, List strings , int transposition , boolean tryKeepString, boolean forceChangeString ){
-		boolean canTransposeFret = false;
-		
-		int maximumFret = 24;
-		
-		int noteValue = chord.getFretValue( chordString );
-		int noteString = (chordString + 1 );
-		
-		int transposedFret = ( noteValue + transposition );
-		
-		// Check if transposition could be done without change the string
-		if( transposedFret >= 0 && transposedFret <= maximumFret ){
-			// Do it now if keep string is the priority
-			if( !forceChangeString && tryKeepString ){
-				chord.addFretValue(chordString, transposedFret);
-				return true;
-			}
-			canTransposeFret = true;
-		}
-		
-		// Check the current string index for this note
-		int stringIndex = -1;
-		for( int i = 0 ; i < strings.size() ; i ++ ){
-			TGString string = ( TGString ) strings.get( i );
-			if( string.getNumber() == noteString ){
-				stringIndex = i;
-				break;
-			}
-		}
-		
-		// Try to change the string of the note
-		TGString string = ( TGString ) strings.get( stringIndex );
-		int transposedValue = ( string.getValue() + noteValue + transposition );
-		int nextStringIndex = ( stringIndex + 1 );
-		while( nextStringIndex >= 0 && nextStringIndex < strings.size() ){
-			TGString nextString = ( TGString ) strings.get( nextStringIndex );
-			int nextChordString = -1;
-			for( int i = 0 ; i < chord.countStrings() ; i ++ ){
-				if( (i + 1) == nextString.getNumber() ){
-					if( chord.getFretValue( i ) >= 0 ){
-						nextChordString = i;
-					}
-				}
-			}
-			
-			int transposedStringFret = ( transposedValue - nextString.getValue() );
-			if( transposedStringFret >= 0 && transposedStringFret <= maximumFret ){
-				if( nextChordString >= 0 ){
-					transposeChordNote(chord, nextChordString , strings, 0 , tryKeepString , !canTransposeFret );
-				}
-				if( nextChordString < 0 || chord.getFretValue( nextChordString ) < 0 ){
-					chord.addFretValue( chordString , -1 );
-					chord.addFretValue( ( nextString.getNumber() - 1 ) , transposedStringFret );
-					
-					return true;
-				}
-			}
-			nextStringIndex ++;
-		}
-		
-		// Keep using same string if it's possible
-		if( !forceChangeString && canTransposeFret ){
-			chord.addFretValue( chordString , transposedFret );
-			return true;
-		}
-		
-		// If note can't be transposed, it must be removed.
-		chord.addFretValue( chordString , -1 );
-		
-		return false;
-	}
-	
-	public List getSortedStringsByValue( TGTrack track , final int direction ){
-		List strings = new ArrayList();
-		for( int number = 1 ; number <= track.stringCount() ; number ++ ){
-			strings.add( track.getString( number ) );
-		}
-		
-		Collections.sort( strings , new Comparator() {
-			public int compare(Object o1, Object o2) {
-				if( o1 != null && o2 != null && o1 instanceof TGString && o2 instanceof TGString ){
-					TGString s1 = (TGString)o1;
-					TGString s2 = (TGString)o2;
-					int status = ( s1.getValue() - s2.getValue() );
-					if( status == 0 ){
-						return 0;
-					}
-					return ( (status * direction) > 0 ? 1 : -1 );
-				}
-				return 0;
-			}
-		});
-		
-		return strings;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGSongManager.java b/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGSongManager.java
deleted file mode 100644
index ec33d65..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGSongManager.java
+++ /dev/null
@@ -1,1044 +0,0 @@
-/*
- * Created on 23-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.song.managers;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGColor;
-import org.herac.tuxguitar.song.models.TGDuration;
-import org.herac.tuxguitar.song.models.TGMarker;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGSong;
-import org.herac.tuxguitar.song.models.TGString;
-import org.herac.tuxguitar.song.models.TGTempo;
-import org.herac.tuxguitar.song.models.TGTimeSignature;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public class TGSongManager {
-	public static final short MAX_CHANNELS = 16;
-	
-	private TGFactory factory;
-	private TGSong song;
-	private TGTrackManager trackManager;
-	private TGMeasureManager measureManager;
-	
-	public TGSongManager(){
-		this(new TGFactory());
-	}
-	
-	public TGSongManager(TGFactory factory){
-		this.factory = factory;
-	}
-	
-	public TGFactory getFactory(){
-		return this.factory;
-	}
-	
-	public void setFactory(TGFactory factory){
-		this.factory = factory;
-	}
-	
-	public TGTrackManager getTrackManager(){
-		if(this.trackManager == null){
-			this.trackManager = new TGTrackManager(this);
-		}
-		return this.trackManager;
-	}
-	
-	public TGMeasureManager getMeasureManager(){
-		if(this.measureManager == null){
-			this.measureManager = new TGMeasureManager(this);
-		}
-		return this.measureManager;
-	}
-	
-	public void setSongName(String name){
-		getSong().setName(name);
-	}
-	
-	public TGSong getSong(){
-		return this.song;
-	}
-	
-	public void clearSong(){
-		if(this.getSong() != null){
-			this.getSong().clear();
-		}
-	}
-	
-	public void setSong(TGSong song){
-		if(song != null){
-			this.clearSong();
-			this.song = song;
-		}
-	}
-	
-	public void setProperties(String name,String artist,String album,String author,String date,String copyright,String writer,String transcriber,String comments){
-		getSong().setName(name);
-		getSong().setArtist(artist);
-		getSong().setAlbum(album);
-		getSong().setAuthor(author);
-		getSong().setDate(date);
-		getSong().setCopyright(copyright);
-		getSong().setWriter(writer);
-		getSong().setTranscriber(transcriber);
-		getSong().setComments(comments);
-	}
-	
-	public void addTrack(TGTrack trackToAdd){
-		this.orderTracks();
-		int addIndex = -1;
-		for(int i = 0;i < getSong().countTracks();i++){
-			TGTrack track = getSong().getTrack(i);
-			if(addIndex == -1 && track.getNumber() == trackToAdd.getNumber()){
-				addIndex = i;
-			}
-			if(addIndex >= 0){
-				track.setNumber(track.getNumber() + 1);
-			}
-		}
-		if(addIndex < 0){
-			addIndex = getSong().countTracks();
-		}
-		getSong().addTrack(addIndex,trackToAdd);
-	}
-	
-	public void removeTrack(int number){
-		int nextNumber = number;
-		TGTrack trackToRemove = null;
-		orderTracks();
-		Iterator it = getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack currTrack = (TGTrack)it.next();
-			if(trackToRemove == null && currTrack.getNumber() == nextNumber){
-				trackToRemove = currTrack;
-			}else if(currTrack.getNumber() == (nextNumber + 1)){
-				currTrack.setNumber(nextNumber);
-				nextNumber ++;
-			}
-			
-		}
-		getSong().removeTrack(trackToRemove);
-	}
-	
-	private void orderTracks(){
-		for(int i = 0;i < getSong().countTracks();i++){
-			TGTrack minTrack = null;
-			for(int trackIdx = i;trackIdx < getSong().countTracks();trackIdx++){
-				TGTrack track = getSong().getTrack(trackIdx);
-				if(minTrack == null || track.getNumber() < minTrack.getNumber()){
-					minTrack = track;
-				}
-			}
-			getSong().moveTrack(i,minTrack);
-		}
-	}
-	
-	public TGSong newSong(){
-		TGSong song = getFactory().newSong();
-		
-		TGMeasureHeader header = getFactory().newHeader();
-		header.setNumber(1);
-		header.setStart(TGDuration.QUARTER_TIME);
-		header.getTimeSignature().setNumerator(4);
-		header.getTimeSignature().getDenominator().setValue(TGDuration.QUARTER);
-		song.addMeasureHeader(header);
-		
-		TGMeasure measure = getFactory().newMeasure(header);
-		
-		TGTrack track = getFactory().newTrack();
-		track.setNumber(1);
-		track.setName("Track 1");
-		track.addMeasure(measure);
-		track.getChannel().setChannel((short)0);
-		track.getChannel().setEffectChannel((short)1);
-		track.setStrings(createDefaultInstrumentStrings());
-		TGColor.RED.copy(track.getColor());
-		song.addTrack(track);
-		
-		return song;
-	}
-	
-	public int getNextTrackNumber(){
-		return (getSong().countTracks() + 1);
-	}
-	
-	public TGChannel getFreeChannel(short instrument,boolean isPercussion){
-		if(isPercussion){
-			return TGChannel.newPercussionChannel(getFactory());
-		}
-		short normalChannel = -1;
-		short effectChannel = -1;
-		
-		boolean[] usedChannels = getUsedChannels();
-		boolean[] usedEffectChannels = getUsedEffectChannels();
-		for(short i = 0;i < MAX_CHANNELS;i++){
-			if(!TGChannel.isPercussionChannel(i) && !usedChannels[i] && !usedEffectChannels[i]){
-				normalChannel = (normalChannel < 0)?i:normalChannel;
-				effectChannel = (effectChannel < 0 && i != normalChannel)?i:effectChannel;
-			}
-		}
-		if(normalChannel < 0 || effectChannel < 0){
-			if(normalChannel >= 0 ){
-				effectChannel = normalChannel;
-			}else{
-				TGChannel songChannel = getLastTrack().getChannel();
-				return songChannel.clone(getFactory());
-			}
-		}
-		TGChannel channel = getFactory().newChannel();
-		channel.setChannel(normalChannel);
-		channel.setEffectChannel(effectChannel);
-		channel.setInstrument(instrument);
-		return channel;
-	}
-	
-	public boolean[] getUsedEffectChannels(){
-		boolean[] channels = new boolean[MAX_CHANNELS];
-		for(int i = 0;i < getSong().countTracks();i++){
-			TGTrack track = getSong().getTrack(i);
-			channels[track.getChannel().getEffectChannel()] = true;
-		}
-		return channels;
-	}
-	
-	public boolean[] getUsedChannels(){
-		boolean[] channels = new boolean[MAX_CHANNELS];
-		for(int i = 0;i < getSong().countTracks();i++){
-			TGTrack track = getSong().getTrack(i);
-			channels[track.getChannel().getChannel()] = true;
-		}
-		return channels;
-	}
-	
-	public TGChannel getUsedChannel(int channel){
-		for(int i = 0;i < getSong().countTracks();i++){
-			TGTrack track = getSong().getTrack(i);
-			if(channel == track.getChannel().getChannel()){
-				return track.getChannel().clone(getFactory());
-			}
-		}
-		return null;
-	}
-	
-	public int countTracksForChannel(int channel){
-		int count = 0;
-		for(int i = 0;i < getSong().countTracks();i++){
-			TGTrack track = getSong().getTrack(i);
-			if(channel == track.getChannel().getChannel()){
-				count ++;
-			}
-		}
-		return count;
-	}
-	
-	public void updateChannel(TGChannel channel){
-		for(int i = 0;i < getSong().countTracks();i++){
-			TGTrack track = getSong().getTrack(i);
-			if(channel.getChannel() == track.getChannel().getChannel()){
-				track.setChannel(channel.clone(getFactory()));
-			}
-		}
-	}
-	
-	public TGTrack getTrack(int number){
-		TGTrack track = null;
-		for (int i = 0; i < getSong().countTracks(); i++) {
-			TGTrack currTrack = getSong().getTrack(i);
-			if(currTrack.getNumber() == number){
-				track = currTrack;
-				break;
-			}
-		}
-		return track;
-	}
-	
-	public TGTrack getFirstTrack(){
-		TGTrack track = null;
-		if(!getSong().isEmpty()){
-			track = getSong().getTrack(0);
-		}
-		return track;
-	}
-	
-	public TGTrack getLastTrack(){
-		TGTrack track = null;
-		if(!getSong().isEmpty()){
-			track = getSong().getTrack(getSong().countTracks() - 1);
-		}
-		return track;
-	}
-	
-	public TGTrack cloneTrack(TGTrack track){
-		TGTrack clone = track.clone(getFactory(),getSong());
-		clone.setNumber(getNextTrackNumber());
-		addTrack(clone);
-		return clone;
-	}
-	
-	public boolean moveTrackUp(TGTrack track){
-		if(track.getNumber() > 1){
-			TGTrack prevTrack = getTrack(track.getNumber() - 1);
-			prevTrack.setNumber(prevTrack.getNumber() + 1);
-			track.setNumber(track.getNumber() - 1);
-			orderTracks();
-			return true;
-		}
-		return false;
-	}
-	
-	public boolean moveTrackDown(TGTrack track){
-		if(track.getNumber() < getSong().countTracks()){
-			TGTrack nextTrack = getTrack(track.getNumber() + 1);
-			nextTrack.setNumber(nextTrack.getNumber() - 1);
-			track.setNumber(track.getNumber() + 1);
-			orderTracks();
-			return true;
-		}
-		return false;
-	}
-	
-	private TGTrack makeNewTrack(){
-		TGTrack track = getFactory().newTrack();
-		track.setNumber(getNextTrackNumber());
-		track.setName("Track " + track.getNumber());
-		//measures
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			TGMeasure measure = getFactory().newMeasure(header);
-			track.addMeasure(measure);
-		}
-		track.setStrings(createDefaultInstrumentStrings());
-		getFreeChannel(TGChannel.DEFAULT_INSTRUMENT,false).copy(track.getChannel());
-		TGColor.RED.copy(track.getColor());
-		return track;
-	}
-	
-	public TGTrack createTrack(){
-		if(getSong().isEmpty()){
-			setSong(newSong());
-			return getLastTrack();
-		}
-		TGTrack track = makeNewTrack();
-		addTrack(track);
-		return track;
-	}
-	
-	public void removeTrack(TGTrack track){
-		removeTrack(track.getNumber());
-	}
-	
-	public void changeTimeSignature(long start,TGTimeSignature timeSignature,boolean toEnd){
-		changeTimeSignature(getMeasureHeaderAt(start),timeSignature,toEnd);
-	}
-	
-	public void changeTimeSignature(TGMeasureHeader header,TGTimeSignature timeSignature,boolean toEnd){
-		//asigno el nuevo ritmo
-		timeSignature.copy(header.getTimeSignature());
-		
-		long nextStart = header.getStart() + header.getLength();
-		List measures = getMeasureHeadersBeforeEnd(header.getStart() + 1);
-		Iterator it = measures.iterator();
-		while(it.hasNext()){
-			TGMeasureHeader nextHeader = (TGMeasureHeader)it.next();
-			
-			long theMove = nextStart - nextHeader.getStart();
-			
-			//moveMeasureComponents(nextHeader,theMove);
-			moveMeasureHeader(nextHeader,theMove,0);
-			
-			if(toEnd){
-				timeSignature.copy(nextHeader.getTimeSignature());
-			}
-			nextStart = nextHeader.getStart() + nextHeader.getLength();
-		}
-		moveOutOfBoundsBeatsToNewMeasure(header.getStart());
-	}
-	
-	public void moveOutOfBoundsBeatsToNewMeasure(long start){
-		Iterator it = getSong().getTracks();
-		while( it.hasNext() ){
-			TGTrack track = (TGTrack) it.next();
-			getTrackManager().moveOutOfBoundsBeatsToNewMeasure(track, start);
-		}
-	}
-	
-	/*
-	public void changeTimeSignature(TGMeasureHeader header,TGTimeSignature timeSignature,boolean toEnd){
-		//asigno el nuevo ritmo
-		timeSignature.copy(header.getTimeSignature());
-		
-		long nextStart = header.getStart() + header.getLength();
-		List measures = getMeasureHeadersBeforeEnd(header.getStart() + 1);
-		Iterator it = measures.iterator();
-		while(it.hasNext()){
-			TGMeasureHeader nextHeader = (TGMeasureHeader)it.next();
-			
-			long theMove = nextStart - nextHeader.getStart();
-			
-			moveMeasureComponents(nextHeader,theMove);
-			moveMeasureHeader(nextHeader,theMove,0);
-			
-			if(toEnd){
-				timeSignature.copy(nextHeader.getTimeSignature());
-			}
-			nextStart = nextHeader.getStart() + nextHeader.getLength();
-		}
-	}
-	*/
-	public void changeTripletFeel(long start,int tripletFeel,boolean toEnd){
-		changeTripletFeel(getMeasureHeaderAt(start),tripletFeel,toEnd);
-	}
-	
-	public void changeTripletFeel(TGMeasureHeader header,int tripletFeel,boolean toEnd){
-		//asigno el nuevo tripletFeel
-		header.setTripletFeel(tripletFeel);
-		
-		if(toEnd){
-			List measures = getMeasureHeadersBeforeEnd(header.getStart() + 1);
-			Iterator it = measures.iterator();
-			while(it.hasNext()){
-				TGMeasureHeader nextHeader = (TGMeasureHeader)it.next();
-				nextHeader.setTripletFeel(tripletFeel); 
-			}
-		}
-	}
-	
-	public void changeTempos(long start,TGTempo tempo,boolean toEnd){
-		changeTempos(getMeasureHeaderAt(start),tempo,toEnd);
-	}
-	
-	public void changeTempos(TGMeasureHeader header,TGTempo tempo,boolean toEnd){
-		int oldValue = header.getTempo().getValue();
-		Iterator it = getMeasureHeadersAfter(header.getNumber() - 1).iterator();
-		while(it.hasNext()){
-			TGMeasureHeader nextHeader = (TGMeasureHeader)it.next();
-			if(toEnd || nextHeader.getTempo().getValue() == oldValue){
-				changeTempo(nextHeader,tempo);
-			}else{
-				break;
-			}
-		}
-	}
-	
-	public void changeTempo(TGMeasureHeader header,TGTempo tempo){
-		tempo.copy(header.getTempo());
-	}
-	
-	public void changeOpenRepeat(long start){
-		TGMeasureHeader header = getMeasureHeaderAt(start);
-		header.setRepeatOpen(!header.isRepeatOpen());
-	}
-	
-	public void changeCloseRepeat(long start,int repeatClose){
-		TGMeasureHeader header = getMeasureHeaderAt(start);
-		header.setRepeatClose(repeatClose);
-	}
-	
-	public void changeAlternativeRepeat(long start,int repeatAlternative){
-		TGMeasureHeader header = getMeasureHeaderAt(start);
-		header.setRepeatAlternative(repeatAlternative);
-	}
-	
-	public TGMeasureHeader addNewMeasureBeforeEnd(){
-		TGMeasureHeader lastHeader = getLastMeasureHeader();
-		TGMeasureHeader header = getFactory().newHeader();
-		header.setNumber((lastHeader.getNumber() + 1));
-		header.setStart((lastHeader.getStart() + lastHeader.getLength()));
-		header.setRepeatOpen(false);
-		header.setRepeatClose(0);
-		header.setTripletFeel(lastHeader.getTripletFeel());
-		lastHeader.getTimeSignature().copy(header.getTimeSignature());
-		lastHeader.getTempo().copy(header.getTempo());
-		getSong().addMeasureHeader(header);
-		
-		Iterator it = getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack track = (TGTrack)it.next();
-			getTrackManager().addNewMeasureBeforeEnd(track,header);
-		}
-		return header;
-	}
-	
-	public void addNewMeasure(int number){
-		//Obtengo un clon para el nuevo Header.
-		TGMeasureHeader header = null;
-		if(number == 1){
-			header = getMeasureHeader(number).clone(getFactory());
-		}else{
-			header = getMeasureHeader((number - 1)).clone(getFactory());
-			header.setStart(header.getStart() + header.getLength());
-			header.setNumber(header.getNumber() + 1);
-		}
-		header.setMarker(null);
-		header.setRepeatOpen(false);
-		header.setRepeatAlternative(0);
-		header.setRepeatClose(0);
-		
-		//Si hay Headers siguientes los muevo
-		TGMeasureHeader nextHeader = getMeasureHeader(number);
-		if(nextHeader != null){
-			moveMeasureHeaders(getMeasureHeadersBeforeEnd(nextHeader.getStart()),header.getLength(),1,true);
-		}
-		
-		//Agrego el header a la lista
-		addMeasureHeader( (header.getNumber() - 1) ,header);
-		
-		//Agrego los compases en todas las pistas
-		Iterator it = getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack track = (TGTrack)it.next();
-			getTrackManager().addNewMeasure(track,header);
-		}
-	}
-	
-	public List getMeasures(long start){
-		List measures = new ArrayList();
-		Iterator it = getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack track = (TGTrack)it.next();
-			TGMeasure measure = getTrackManager().getMeasureAt(track,start);
-			if(measure != null){
-				measures.add(measure);
-			}
-		}
-		return measures;
-	}
-	
-	public TGTrack replaceTrack(TGTrack track){
-		TGTrack current = getTrack(track.getNumber());
-		if(current != null){
-			track.copy(getFactory(), getSong(), current);
-		}
-		return current;
-	}
-	/*
-	public TGSongSegment copyMeasures(int m1, int m2){
-		TGSongSegment segment = new TGSongSegment();
-		int number1 = Math.max(1,m1);
-		int number2 = Math.min(getSong().countMeasureHeaders(),m2);
-		for(int number = number1; number <= number2;number ++){
-			segment.getHeaders().add( getMeasureHeader(number) );
-		}
-		Iterator it = getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack track = (TGTrack)it.next();
-			List measures = getTrackManager().copyMeasures(track,number1,number2);
-			segment.addTrack(track.getNumber(),measures);
-		}
-		return segment.clone(getFactory());
-	}
-	
-	public TGSongSegment copyMeasures(int m1, int m2,TGTrack track){
-		TGSongSegment segment = new TGSongSegment();
-		int number1 = Math.max(1,m1);
-		int number2 = Math.min(getSong().countMeasureHeaders(),m2);
-		for(int number = number1; number <= number2;number ++){
-			segment.getHeaders().add( getMeasureHeader(number) );
-		}
-		List measures = getTrackManager().copyMeasures(track,number1,number2);
-		segment.addTrack(track.getNumber(),measures);
-	
-		return segment.clone(getFactory());
-	}
-	
-	public void insertMeasures(TGSongSegment segment,int fromNumber,long move){
-		List headers = new ArrayList();
-		moveMeasureHeaders(segment.getHeaders(),move,0,false);
-		
-		int headerNumber = fromNumber;
-		Iterator it = segment.getHeaders().iterator();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			header.setNumber(headerNumber);
-			headers.add(header);
-			headerNumber ++;
-		}
-		long start = ((TGMeasureHeader)headers.get(0)).getStart();
-		long end = ((TGMeasureHeader)headers.get(headers.size() - 1)).getStart() + ((TGMeasureHeader)headers.get(headers.size() - 1)).getLength();
-		List headersBeforeEnd = getMeasureHeadersBeforeEnd(start);
-		moveMeasureHeaders(headersBeforeEnd,end - start,headers.size(),true);
-		
-		it = segment.getHeaders().iterator();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			addMeasureHeader(header.getNumber() - 1,header);
-		}
-		
-		it = getSong().getTracks();
-		while (it.hasNext()) {
-			TGTrack currTrack = (TGTrack) it.next();
-			List measures = null;
-			
-			Iterator tracks = segment.getTracks().iterator();
-			while(tracks.hasNext()){
-				TGTrackSegment tSegment = (TGTrackSegment)tracks.next();
-				if(tSegment.getTrack() == currTrack.getNumber()){
-					measures = tSegment.getMeasures();
-					break;
-				}
-			}
-			if(measures == null){
-				measures = getEmptyMeasures(((TGTrackSegment)segment.getTracks().get(0)).getMeasures());
-			}
-			
-			for(int i = 0;i < measures.size();i++){
-				TGMeasure measure = (TGMeasure)measures.get(i);
-				measure.setHeader((TGMeasureHeader)headers.get(i));
-				getMeasureManager().moveAllComponents(measure,move);
-			}
-			getTrackManager().insertMeasures(currTrack,measures);
-		}
-	}
-	
-	private List getEmptyMeasures(List measures) {
-		List emptyMeasures = new ArrayList();
-		
-		Iterator it = measures.iterator();
-		while (it.hasNext()) {
-			TGMeasure measure = (TGMeasure) it.next();
-			TGMeasure emptyMeasure = getFactory().newMeasure(null);
-			emptyMeasure.setClef(measure.getClef());
-			emptyMeasure.setKeySignature(measure.getKeySignature());
-			emptyMeasures.add(emptyMeasure);
-		}
-		return emptyMeasures;
-	}
-	*/
-	/*
-	public void replaceMeasures(TGSongSegment tracksMeasures,long move) {
-		List measureHeaders = new ArrayList();
-		moveMeasureHeaders(tracksMeasures.getHeaders(),move,0,false);
-		Iterator it = tracksMeasures.getHeaders().iterator();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			TGMeasureHeader replace = replaceMeasureHeader(header);
-			
-			Iterator nextHeaders = getMeasureHeadersAfter(replace.getNumber()).iterator();
-			long nextStart =  (replace.getStart() + replace.getLength());
-			while(nextHeaders.hasNext()){
-				TGMeasureHeader next = (TGMeasureHeader)nextHeaders.next();
-				moveMeasureComponents(next, (nextStart - next.getStart() ));
-				moveMeasureHeader(next, (nextStart - next.getStart() ) , 0);
-				nextStart = (next.getStart() + next.getLength());
-			}
-			measureHeaders.add(replace);
-		}
-		
-		it = tracksMeasures.getTracks().iterator();
-		while(it.hasNext()){
-			TGTrackSegment trackMeasure = (TGTrackSegment)it.next();
-			
-			TGTrack currTrack = getTrack(trackMeasure.getTrack());
-			List measures = trackMeasure.getMeasures();
-			for(int i = 0;i < measures.size();i++){
-				TGMeasure measure = (TGMeasure)measures.get(i);
-				measure.setHeader((TGMeasureHeader)measureHeaders.get(i));
-				getMeasureManager().moveAllComponents(measure,move);
-				getTrackManager().replaceMeasure(currTrack,measure);
-			}
-		}
-	}
-	*/
-	public TGMeasureHeader getFirstMeasureHeader(){
-		TGMeasureHeader firstHeader = null;
-		for(int i = 0;i < getSong().countMeasureHeaders();i++){
-			TGMeasureHeader currHeader = getSong().getMeasureHeader(i);
-			if(firstHeader == null || (currHeader.getStart() < firstHeader.getStart())){
-				firstHeader = currHeader;
-			}
-		}
-		return firstHeader;
-	}
-	
-	public TGMeasureHeader getLastMeasureHeader(){
-		int lastIndex = getSong().countMeasureHeaders() - 1;
-		return getSong().getMeasureHeader(lastIndex);
-	}
-	
-	public TGMeasureHeader getPrevMeasureHeader(TGMeasureHeader header){
-		int prevIndex = header.getNumber() - 1;
-		if(prevIndex > 0){
-			return getSong().getMeasureHeader(prevIndex - 1);
-		}
-		return null;
-	}
-	
-	public TGMeasureHeader getNextMeasureHeader(TGMeasureHeader header){
-		int nextIndex = header.getNumber();
-		if(nextIndex < getSong().countMeasureHeaders()){
-			return getSong().getMeasureHeader(nextIndex);
-		}
-		return null;
-	}
-	
-	public TGMeasureHeader getMeasureHeaderAt(long start){
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			long measureStart = header.getStart();
-			long measureLength = header.getLength();
-			if(start >= measureStart && start < measureStart + measureLength){
-				return header;
-			}
-		}
-		return null;
-	}
-	
-	public TGMeasureHeader getMeasureHeader(int number){
-		for (int i = 0; i < getSong().countMeasureHeaders(); i++) {
-			TGMeasureHeader header = getSong().getMeasureHeader(i);
-			if(header.getNumber() == number){
-				return header;
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Retorna Todos los desde Start hasta el final del compas
-	 */
-	public List getMeasureHeadersBeforeEnd(long fromStart) {
-		List headers = new ArrayList();
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if (header.getStart() >= fromStart) {
-				headers.add(header);
-			}
-		}
-		return headers;
-	}
-	
-	/**
-	 * Retorna Todos los desde Start hasta el final del compas
-	 */
-	public List getMeasureHeadersAfter(int number) {
-		List headers = new ArrayList();
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if (header.getNumber() > number) {
-				headers.add(header);
-			}
-		}
-		return headers;
-	}
-	
-	/**
-	 * Retorna Todos los desde Start hasta el final del compas
-	 */
-	public List getMeasureHeadersBetween(long p1,long p2) {
-		List headers = new ArrayList();
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if ((header.getStart() + header.getLength()) > p1  &&  header.getStart() < p2) {
-				headers.add(header);
-			}
-		}
-		return headers;
-	}
-	
-	public void removeLastMeasure(){
-		removeLastMeasureHeader();
-	}
-	
-	public void removeMeasure(long start){
-		removeMeasureHeader(start);
-	}
-	
-	public void removeMeasure(int number){
-		removeMeasureHeader(number);
-	}
-	
-	/**
-	 * Agrega un Compas
-	 */
-	public void addMeasureHeader(TGMeasureHeader measure){
-		getSong().addMeasureHeader(measure);
-	}
-	
-	/**
-	 * Agrega un Compas
-	 */
-	public void addMeasureHeader(int index,TGMeasureHeader measure){
-		getSong().addMeasureHeader(index,measure);
-	}
-	
-	public void removeMeasureHeaders(int n1,int n2){
-		for(int i = n1; i <= n2; i ++){
-			TGMeasureHeader measure = getMeasureHeader(n1);
-			removeMeasureHeader(measure);
-		}
-		/*
-		Iterator it = getMeasureHeadersBetween(p1,p2).iterator();
-		while(it.hasNext()){
-			TGMeasureHeader measure = (TGMeasureHeader)it.next();
-			removeMeasureHeader(measure);
-		} */
-	}
-	
-	public void removeLastMeasureHeader(){
-		removeMeasureHeader(getLastMeasureHeader());
-	}
-	
-	public void removeMeasureHeader(long start){
-		removeMeasureHeader(getMeasureHeaderAt(start));
-	}
-	
-	public void removeMeasureHeader(int number){
-		removeMeasureHeader(getMeasureHeader(number));
-	}
-	
-	public void removeMeasureHeader(TGMeasureHeader header){
-		long start = header.getStart();
-		long length = header.getLength();
-		
-		Iterator it = getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack track = (TGTrack)it.next();
-			getTrackManager().removeMeasure(track,start);
-		}
-		moveMeasureHeaders(getMeasureHeadersBeforeEnd(start + 1),-length,-1,true);
-		getSong().removeMeasureHeader(header.getNumber() - 1);
-	}
-	
-	public TGMeasureHeader replaceMeasureHeader(TGMeasureHeader newMeasure){
-		TGMeasureHeader header = getMeasureHeaderAt(newMeasure.getStart());
-		header.makeEqual(newMeasure.clone(getFactory()));
-		return header;
-	}
-	
-	public void moveMeasureHeaders(List headers,long theMove,int numberMove,boolean moveComponents) {
-		if(moveComponents){
-			Iterator it = headers.iterator();
-			while(it.hasNext()){
-				TGMeasureHeader header = (TGMeasureHeader) it.next();
-				moveMeasureComponents(header,theMove);
-			}
-		}
-		Iterator it = headers.iterator();
-		while (it.hasNext()) {
-			TGMeasureHeader header = (TGMeasureHeader) it.next();
-			moveMeasureHeader(header,theMove,numberMove);
-		}
-	}
-	
-	/**
-	 * Mueve el compas
-	 */
-	public void moveMeasureHeader(TGMeasureHeader header,long theMove,int numberMove){
-		header.setNumber(header.getNumber() + numberMove);
-		header.setStart(header.getStart() + theMove);
-	}
-	
-	/**
-	 * Mueve el compas
-	 */
-	public void moveMeasureComponents(TGMeasureHeader header,long theMove){
-		Iterator it = getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack track = (TGTrack)it.next();
-			getTrackManager().moveMeasure(getTrackManager().getMeasure(track,header.getNumber()),theMove);
-		}
-	}
-	
-	/** 
-	 * Retorna true si el start esta en el rango del compas
-	 */
-	public boolean isAtPosition(TGMeasureHeader header,long start){
-		return (start >= header.getStart() && start < header.getStart() + header.getLength());
-	}
-	
-	public TGMarker updateMarker(int measure,String title,TGColor color){
-		TGMeasureHeader header = getMeasureHeader(measure);
-		if(header != null){
-			if(!header.hasMarker()){
-				header.setMarker(getFactory().newMarker());
-			}
-			header.getMarker().setMeasure(measure);
-			header.getMarker().setTitle(title);
-			header.getMarker().getColor().setR(color.getR());
-			header.getMarker().getColor().setG(color.getG());
-			header.getMarker().getColor().setB(color.getB());
-			return header.getMarker(); 
-		}
-		return null;
-	}
-	
-	public TGMarker updateMarker(TGMarker marker){
-		return updateMarker(marker.getMeasure(),marker.getTitle(),marker.getColor());
-	}
-	
-	public void removeMarker(TGMarker marker){
-		if(marker != null){
-			removeMarker(marker.getMeasure());
-		}
-	}
-	
-	public void removeMarker(int number){
-		TGMeasureHeader header = getMeasureHeader(number);
-		if(header != null && header.hasMarker()){
-			header.setMarker(null);
-		}
-	}
-	
-	public void removeAllMarkers(){
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if(header.hasMarker()){
-				header.setMarker(null);
-			}
-		}
-	}
-	
-	public List getMarkers(){
-		List markers = new ArrayList();
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if(header.hasMarker()){
-				markers.add(header.getMarker());
-			}
-		}
-		return markers;
-	}
-	
-	public TGMarker getMarker(int number){
-		TGMeasureHeader header = getMeasureHeader(number);
-		if(header != null && header.hasMarker()){
-			return header.getMarker();
-		}
-		return null;
-	}
-	
-	public TGMarker getPreviousMarker(int from){
-		TGMeasureHeader previous = null;
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if(header.hasMarker() && header.getNumber() < from){
-				if(previous == null || previous.getNumber() < header.getNumber()){
-					previous = header;
-				}
-			}
-		}
-		return (previous != null)?previous.getMarker():null;
-	}
-	
-	public TGMarker getNextMarker(int from){
-		TGMeasureHeader next = null;
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if(header.hasMarker() && header.getNumber() > from){
-				if(next == null || next.getNumber() > header.getNumber()){
-					next = header;
-				}
-			}
-		}
-		return (next != null)?next.getMarker():null;
-	}
-	
-	public TGMarker getFirstMarker(){
-		TGMeasureHeader first = null;
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if(header.hasMarker()){
-				if(first == null || header.getNumber() < first.getNumber()){
-					first = header;
-				}
-			}
-		}
-		return (first != null)?first.getMarker():null;
-	}
-	
-	public TGMarker getLastMarker(){
-		TGMeasureHeader next = null;
-		Iterator it = getSong().getMeasureHeaders();
-		while(it.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)it.next();
-			if(header.hasMarker()){
-				if(next == null || header.getNumber() > next.getNumber()){
-					next = header;
-				}
-			}
-		}
-		return (next != null)?next.getMarker():null;
-	}
-	
-	public void autoCompleteSilences(){
-		Iterator it = getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack track = (TGTrack)it.next();
-			getTrackManager().autoCompleteSilences(track);
-		}
-	}
-	
-	public void orderBeats(){
-		Iterator it = getSong().getTracks();
-		while(it.hasNext()){
-			TGTrack track = (TGTrack)it.next();
-			getTrackManager().orderBeats(track);
-		}
-	}
-	
-	public List createDefaultInstrumentStrings(){
-		List strings = new ArrayList();
-		strings.add(newString(getFactory(),1, 64));
-		strings.add(newString(getFactory(),2, 59));
-		strings.add(newString(getFactory(),3, 55));
-		strings.add(newString(getFactory(),4, 50));
-		strings.add(newString(getFactory(),5, 45));
-		strings.add(newString(getFactory(),6, 40));
-		return strings;
-	}
-	
-	public static List createPercussionStrings(TGFactory factory,int stringCount){
-		List strings = new ArrayList();
-		for(int i = 1;i <= stringCount; i++){
-			strings.add(newString(factory,i, 0));
-		}
-		return strings;
-	}
-	
-	public static TGString newString(TGFactory factory,int number,int value){
-		TGString string = factory.newString();
-		string.setNumber(number);
-		string.setValue(value);
-		return string;
-	}
-	
-	public static long getDivisionLength(TGMeasureHeader header){
-		long defaultLenght = TGDuration.QUARTER_TIME;
-		int denominator = header.getTimeSignature().getDenominator().getValue();
-		switch(denominator){
-			case TGDuration.EIGHTH:
-				if(header.getTimeSignature().getNumerator() % 3 == 0){
-					defaultLenght += TGDuration.QUARTER_TIME / 2;
-				}
-				break;
-		}
-		return defaultLenght;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGTrackManager.java b/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGTrackManager.java
deleted file mode 100644
index 0d7865f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/managers/TGTrackManager.java
+++ /dev/null
@@ -1,346 +0,0 @@
-package org.herac.tuxguitar.song.managers;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.song.models.TGChannel;
-import org.herac.tuxguitar.song.models.TGColor;
-import org.herac.tuxguitar.song.models.TGMeasure;
-import org.herac.tuxguitar.song.models.TGMeasureHeader;
-import org.herac.tuxguitar.song.models.TGTrack;
-
-public class TGTrackManager {
-	private TGSongManager songManager;
-	
-	public TGTrackManager(TGSongManager songManager){
-		this.songManager = songManager;
-	}
-	
-	public TGSongManager getSongManager(){
-		return this.songManager;
-	}
-	
-	public TGMeasure getFirstMeasure(TGTrack track){
-		TGMeasure firstMeasure = null;
-		Iterator measures = track.getMeasures();
-		while(measures.hasNext()){
-			TGMeasure currMeasure = (TGMeasure)measures.next();
-			if(firstMeasure == null || (currMeasure.getStart() < firstMeasure.getStart())){
-				firstMeasure = currMeasure;
-			}
-		}
-		return firstMeasure;
-	}
-	
-	public TGMeasure getLastMeasure(TGTrack track){
-		return track.getMeasure(track.countMeasures() - 1);
-	}
-	
-	public TGMeasure getPrevMeasure(TGMeasure measure){
-		return measure.getTrack().getMeasure(measure.getNumber() - 2);
-	}
-	
-	public TGMeasure getNextMeasure(TGMeasure measure){
-		return measure.getTrack().getMeasure(measure.getNumber());
-	}
-	
-	public TGMeasure getMeasureAt(TGTrack track,long start){
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasure measure = (TGMeasure)it.next();
-			long measureStart = measure.getStart();
-			long measureLength = measure.getLength();
-			if(start >= measureStart && start < measureStart + measureLength){
-				return measure;
-			}
-		}
-		return null;
-	}
-	
-	public TGMeasure getMeasure(TGTrack track,int number){
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasure measure = (TGMeasure)it.next();
-			if(measure.getNumber() == number){
-				return measure;
-			}
-		}
-		return null;
-	}
-	
-	/**
-	 * Retorna Todos los desde Start hasta el final del compas
-	 */
-	public List getMeasuresBeforeEnd(TGTrack track,long fromStart) {
-		List measures = new ArrayList();
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasure currMeasure = (TGMeasure)it.next();
-			if (currMeasure.getStart() >= fromStart) {
-				measures.add(currMeasure);
-			}
-		}
-		return measures;
-	}
-	
-	/**
-	 * Retorna Todos los desde Start hasta el final del compas
-	 */
-	public List getMeasuresBetween(TGTrack track,long p1,long p2) {
-		List measures = new ArrayList();
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasure measure = (TGMeasure)it.next();
-			if ((measure.getStart() + measure.getLength()) > p1  &&  measure.getStart() < p2) {
-				measures.add(measure);
-			}
-		}
-		return measures;
-	}
-	
-	public void addNewMeasureBeforeEnd(TGTrack track,TGMeasureHeader header){
-		addNewMeasureAfter(track,header,getLastMeasure(track));
-	}
-	
-	/**
-	 * Agrega un Compas
-	 */
-	public void addNewMeasureAfter(TGTrack track,TGMeasureHeader header,TGMeasure measure){
-		TGMeasure newMeasure = getSongManager().getFactory().newMeasure(header);
-		newMeasure.setClef(measure.getClef());
-		newMeasure.setKeySignature(measure.getKeySignature());
-		addMeasure(track,newMeasure);
-	}
-	
-	public void addNewMeasure(TGTrack track,TGMeasureHeader header){
-		TGMeasure previous = getMeasure(track, (header.getNumber() == 1)?(header.getNumber()+1):header.getNumber()-1);
-		TGMeasure newMeasure = getSongManager().getFactory().newMeasure(header);
-		newMeasure.setTrack(track);
-		newMeasure.setClef(previous.getClef());
-		newMeasure.setKeySignature(previous.getKeySignature());
-		addMeasure(track,header.getNumber() - 1,newMeasure);
-	}
-	/*
-	public List copyMeasures(TGTrack track,int m1,int m2){
-		List measures = new ArrayList();
-		int number1 = Math.max(1,m1);
-		int number2 = Math.min(track.countMeasures(),m2);
-		for(int number = number1; number <= number2;number ++){
-			measures.add(getMeasure(track, number));
-		}
-		return measures;
-	}
-	*/
-	/**
-	 * Agrega un Compas
-	 *//*
-	public void insertMeasures(TGTrack track,List measures){
-		if(!measures.isEmpty()){
-			Iterator it = measures.iterator();
-			while(it.hasNext()){
-				TGMeasure measure = (TGMeasure)it.next();
-				addMeasure(track,(measure.getNumber() - 1),measure);
-			}
-		}
-	}*/
-	
-	/**
-	 * Agrega un Compas
-	 */
-	public void addMeasure(TGTrack track,TGMeasure measure){
-		track.addMeasure(measure);
-	}
-	
-	/**
-	 * Agrega un Compas
-	 */
-	public void addMeasure(TGTrack track,int index,TGMeasure measure){
-		track.addMeasure(index,measure);
-	}
-	
-	public void removeLastMeasure(TGTrack track){
-		removeMeasure(getLastMeasure(track));
-	}
-	
-	public void removeMeasure(TGTrack track,long start){
-		removeMeasure(getMeasureAt(track,start));
-	}
-	
-	public void removeMeasure(TGMeasure measure){
-		measure.getTrack().removeMeasure(measure.getNumber() - 1);
-	}
-	
-	public TGMeasure replaceMeasure(TGTrack track,TGMeasure newMeasure){
-		TGMeasure measure = getMeasureAt(track,newMeasure.getStart());
-		measure.makeEqual(newMeasure);
-		return measure;
-	}
-	
-	/**
-	 * Mueve el compas
-	 */
-	public void moveMeasure(TGMeasure measure,long theMove){
-		//getSongManager().getMeasureManager().moveAllComponents(measure,theMove);
-		getSongManager().getMeasureManager().moveAllBeats(measure,theMove);
-	}
-	
-	public void moveOutOfBoundsBeatsToNewMeasure(TGTrack track, long start){
-		Iterator it = getMeasuresBeforeEnd(track,start).iterator();
-		while( it.hasNext() ){
-			TGMeasure measure = (TGMeasure)it.next();
-			getSongManager().getMeasureManager().moveOutOfBoundsBeatsToNewMeasure(measure);
-		}
-	}
-	
-	public void moveTrackBeats(TGTrack track, long measureStart, long moveStart, long theMove ){
-		List measures = getMeasuresBeforeEnd(track,measureStart);
-		for( int i = 0 ; i < measures.size() ; i ++ ){
-			TGMeasure measure = (TGMeasure)measures.get(i);
-			if( moveStart + theMove < moveStart ){
-				getSongManager().getMeasureManager().removeBeatsBeetween(measure, moveStart, (moveStart + Math.abs(theMove)));
-			}
-			getSongManager().getMeasureManager().moveBeats(measure, moveStart, theMove);
-		}
-		for( int i = 0 ; i < measures.size() ; i ++ ){
-			TGMeasure measure = (TGMeasure)measures.get(i);
-			getSongManager().getMeasureManager().moveOutOfBoundsBeatsToNewMeasure(measure,false);
-		}
-	}
-	
-	public void changeKeySignature(TGTrack track,long start,int keySignature,boolean toEnd){
-		changeKeySignature(track,getMeasureAt(track,start),keySignature,toEnd);
-	}
-	
-	/**
-	 * Cambia el Key Signature
-	 */
-	public void changeKeySignature(TGTrack track,TGMeasure measure,int keySignature,boolean toEnd){
-		//asigno el nuevo Key
-		measure.setKeySignature(keySignature);
-		
-		if(toEnd){
-			List measures = getMeasuresBeforeEnd(track,measure.getStart() + 1);
-			Iterator it = measures.iterator();
-			while(it.hasNext()){
-				TGMeasure nextMeasure = (TGMeasure)it.next();
-				nextMeasure.setKeySignature(keySignature);
-			}
-		}
-	}
-	
-	public void changeClef(TGTrack track,long start,int clef,boolean toEnd){
-		changeClef(track,getMeasureAt(track,start),clef,toEnd);
-	}
-	
-	/**
-	 * Cambia el Clef
-	 */
-	public void changeClef(TGTrack track,TGMeasure measure,int clef,boolean toEnd){
-		//asigno el nuevo clef
-		measure.setClef(clef);
-		
-		if(toEnd){
-			List measures = getMeasuresBeforeEnd(track,measure.getStart() + 1);
-			Iterator it = measures.iterator();
-			while(it.hasNext()){
-				TGMeasure nextMeasure = (TGMeasure)it.next();
-				nextMeasure.setClef(clef);
-			}
-		}
-	}
-	
-	public void changeSolo(TGTrack track,boolean solo){
-		track.setSolo(solo);
-		track.setMute(track.isSolo() ? false : track.isMute());
-	}
-	
-	public void changeMute(TGTrack track,boolean mute){
-		track.setMute(mute);
-		track.setSolo(track.isMute() ? false : track.isSolo());
-	}
-	
-	public void changeInfo(TGTrack track,String name,TGColor color,int offset){
-		track.setName(name);
-		track.setOffset(offset);
-		track.getColor().setR(color.getR());
-		track.getColor().setG(color.getG());
-		track.getColor().setB(color.getB());
-	}
-	
-	public void changeInstrumentStrings(TGTrack track,List strings){
-		if(strings.size() < track.getStrings().size()){
-			removeNotesAfterString(track,strings.size());
-		}
-		track.setStrings(strings);
-	}
-	
-	public void removeNotesAfterString(TGTrack track,int string){
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasure measure = (TGMeasure)it.next();
-			getSongManager().getMeasureManager().removeNotesAfterString(measure,string);
-		}
-	}
-	
-	public void changeInstrument(TGTrack track,int instrument,boolean percussion){
-		track.getChannel().setInstrument((short)instrument);
-		if(percussion){
-			TGChannel.setPercussionChannel(track.getChannel());
-			track.setStrings(TGSongManager.createPercussionStrings(getSongManager().getFactory(),track.getStrings().size()));
-		}else{
-			if(track.getChannel().isPercussionChannel()){
-				TGChannel tempChannel = this.songManager.getFreeChannel((short)instrument,false);
-				track.getChannel().setChannel(tempChannel.getChannel());
-				track.getChannel().setEffectChannel(tempChannel.getEffectChannel());
-			}
-		}
-		this.songManager.updateChannel(track.getChannel());
-	}
-	
-	public void autoCompleteSilences(TGTrack track){
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasure measure = (TGMeasure)it.next();
-			this.songManager.getMeasureManager().autoCompleteSilences(measure);
-		}
-	}
-	
-	public void orderBeats(TGTrack track){
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasure measure = (TGMeasure)it.next();
-			this.songManager.getMeasureManager().orderBeats(measure);
-		}
-	}
-	
-	public void transposeNotes(TGTrack track, int transposition , boolean tryKeepString, boolean applyToChords, int applyToString){
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasure measure = (TGMeasure)it.next();
-			this.songManager.getMeasureManager().transposeNotes(measure, transposition, tryKeepString, applyToChords, applyToString );
-		}
-	}
-	
-	public void transposeNotes(TGTrack track, int[] transpositionStrings , boolean tryKeepString , boolean applyToChords ){
-		Iterator it = track.getMeasures();
-		while(it.hasNext()){
-			TGMeasure measure = (TGMeasure)it.next();
-			this.songManager.getMeasureManager().transposeNotes(measure, transpositionStrings, tryKeepString , applyToChords);
-		}
-	}
-	
-	/**
-	 * Retorna true si es el primer compas
-	 */
-	public boolean isFirstMeasure(TGMeasure measure){
-		return (measure.getNumber() == 1);
-	}
-	
-	/**
-	 * Retorna true si es el ultimo compas
-	 */
-	public boolean isLastMeasure(TGMeasure measure){
-		return (getSongManager().getSong().countMeasureHeaders() == measure.getNumber());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGChannel.java b/TuxGuitar/src/org/herac/tuxguitar/song/models/TGChannel.java
deleted file mode 100644
index ad7024c..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGChannel.java
+++ /dev/null
@@ -1,146 +0,0 @@
-package org.herac.tuxguitar.song.models;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-
-public abstract class TGChannel {
-	public static final short DEFAULT_PERCUSSION_CHANNEL = 9;
-	
-	public static final short DEFAULT_INSTRUMENT = 25;
-	public static final short DEFAULT_VOLUME = 127;
-	public static final short DEFAULT_BALANCE = 64;
-	public static final short DEFAULT_CHORUS = 0;
-	public static final short DEFAULT_REVERB = 0;
-	public static final short DEFAULT_PHASER = 0;
-	public static final short DEFAULT_TREMOLO = 0;
-	
-	private short channel;
-	private short effectChannel;
-	private short instrument;
-	private short volume;
-	private short balance;
-	private short chorus;
-	private short reverb;
-	private short phaser;
-	private short tremolo;
-	
-	public TGChannel() {
-		this.channel = 0;
-		this.effectChannel = 0;
-		this.instrument = DEFAULT_INSTRUMENT;
-		this.volume = DEFAULT_VOLUME;
-		this.balance = DEFAULT_BALANCE;
-		this.chorus = DEFAULT_CHORUS;
-		this.reverb = DEFAULT_REVERB;
-		this.phaser = DEFAULT_PHASER;
-		this.tremolo = DEFAULT_TREMOLO;
-	}
-	
-	public short getBalance() {
-		return this.balance;
-	}
-	
-	public void setBalance(short balance) {
-		this.balance = balance;
-	}
-	
-	public short getChannel() {
-		return this.channel;
-	}
-	
-	public void setChannel(short channel) {
-		this.channel = channel;
-	}
-	
-	public short getEffectChannel() {
-		return this.effectChannel;
-	}
-	
-	public void setEffectChannel(short effectChannel) {
-		this.effectChannel = effectChannel;
-	}
-	
-	public short getChorus() {
-		return this.chorus;
-	}
-	
-	public void setChorus(short chorus) {
-		this.chorus = chorus;
-	}
-	
-	public short getInstrument() {
-		return (!this.isPercussionChannel()?this.instrument:0);
-	}
-	
-	public void setInstrument(short instrument) {
-		this.instrument = instrument;
-	}
-	
-	public short getPhaser() {
-		return this.phaser;
-	}
-	
-	public void setPhaser(short phaser) {
-		this.phaser = phaser;
-	}
-	
-	public short getReverb() {
-		return this.reverb;
-	}
-	
-	public void setReverb(short reverb) {
-		this.reverb = reverb;
-	}
-	
-	public short getTremolo() {
-		return this.tremolo;
-	}
-	
-	public void setTremolo(short tremolo) {
-		this.tremolo = tremolo;
-	}
-	
-	public short getVolume() {
-		return this.volume;
-	}
-	
-	public void setVolume(short volume) {
-		this.volume = volume;
-	}
-	
-	public boolean isPercussionChannel(){
-		return TGChannel.isPercussionChannel(this.getChannel());
-	}
-	
-	public static boolean isPercussionChannel(int channel){
-		return (channel == DEFAULT_PERCUSSION_CHANNEL);
-	}
-	
-	public static void setPercussionChannel(TGChannel channel){
-		channel.setChannel(DEFAULT_PERCUSSION_CHANNEL);
-		channel.setEffectChannel(DEFAULT_PERCUSSION_CHANNEL);
-	}
-	
-	public static TGChannel newPercussionChannel(TGFactory factory){
-		TGChannel channel = factory.newChannel();
-		TGChannel.setPercussionChannel(channel);
-		return channel;
-	}
-	
-	public TGChannel clone(TGFactory factory){
-		TGChannel channel = factory.newChannel();
-		copy(channel);
-		return channel; 
-	}
-	
-	public void copy(TGChannel channel){
-		channel.setChannel(getChannel());
-		channel.setEffectChannel(getEffectChannel());
-		channel.setInstrument(getInstrument());
-		channel.setVolume(getVolume());
-		channel.setBalance(getBalance());
-		channel.setChorus(getChorus());
-		channel.setReverb(getReverb());
-		channel.setPhaser(getPhaser());
-		channel.setTremolo(getTremolo());
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGDivisionType.java b/TuxGuitar/src/org/herac/tuxguitar/song/models/TGDivisionType.java
deleted file mode 100644
index 80f4b47..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGDivisionType.java
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Created on 05-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.song.models;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public abstract class TGDivisionType {
-	public static final TGDivisionType NORMAL = newDivisionType(1,1);
-	
-	/**
-	 * Cantidad de Duraciones que entran en los tiempos
-	 */
-	private int enters;
-	/**
-	 * Tiempos
-	 */
-	private int times;
-	
-	public TGDivisionType(){
-		this.enters = 1;
-		this.times = 1;
-	}
-	
-	public int getEnters() {
-		return this.enters;
-	}
-	
-	public void setEnters(int enters) {
-		this.enters = enters;
-	}
-	
-	public int getTimes() {
-		return this.times;
-	}
-	
-	public void setTimes(int times) {
-		this.times = times;
-	}
-	
-	public long convertTime(long time){
-		return time * this.times / this.enters;
-	}
-	
-	public boolean isEqual(TGDivisionType divisionType){
-		return (divisionType.getEnters() == getEnters() && divisionType.getTimes() == getTimes());
-	}
-	
-	public TGDivisionType clone(TGFactory factory){
-		TGDivisionType divisionType = factory.newDivisionType();
-		copy(divisionType);
-		return divisionType;
-	}
-	
-	public void copy(TGDivisionType divisionType){
-		divisionType.setEnters(this.enters);
-		divisionType.setTimes(this.times);
-	}
-	
-	private static TGDivisionType newDivisionType(int enters,int times){
-		TGDivisionType divisionType = new TGFactory().newDivisionType();
-		divisionType.setEnters(enters);
-		divisionType.setTimes(times);
-		return divisionType;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGMeasure.java b/TuxGuitar/src/org/herac/tuxguitar/song/models/TGMeasure.java
deleted file mode 100644
index 76b633a..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGMeasure.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Created on 26-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.song.models;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public abstract class TGMeasure {
-	
-	public static final int CLEF_TREBLE = 1;
-	public static final int CLEF_BASS = 2;
-	public static final int CLEF_TENOR = 3;
-	public static final int CLEF_ALTO = 4;
-	
-	public static final int DEFAULT_CLEF = CLEF_TREBLE;
-	public static final int DEFAULT_KEY_SIGNATURE= 0;
-	
-	private TGMeasureHeader header;
-	private TGTrack track;
-	private int clef;
-	private int keySignature;
-	
-	private List beats;
-	
-	public TGMeasure(TGMeasureHeader header){
-		this.header = header;
-		this.clef = DEFAULT_CLEF;
-		this.keySignature = DEFAULT_KEY_SIGNATURE;
-		this.beats = new ArrayList();
-	}
-	
-	public TGTrack getTrack() {
-		return this.track;
-	}
-	
-	public void setTrack(TGTrack track) {
-		this.track = track;
-	}
-	
-	public int getClef() {
-		return this.clef;
-	}
-	
-	public void setClef(int clef) {
-		this.clef = clef;
-	}
-	
-	public int getKeySignature() {
-		return this.keySignature;
-	}
-	
-	public void setKeySignature(int keySignature) {
-		this.keySignature = keySignature;
-	}
-	
-	public List getBeats() {
-		return this.beats;
-	}
-	
-	public void addBeat(TGBeat beat){
-		beat.setMeasure(this);
-		this.beats.add(beat);
-	}
-	
-	public void moveBeat(int index,TGBeat beat){
-		this.beats.remove(beat);
-		this.beats.add(index,beat);
-	}
-	
-	public void removeBeat(TGBeat beat){
-		this.beats.remove(beat);
-	}
-	
-	public TGBeat getBeat(int index){
-		if(index >= 0 && index < countBeats()){
-			return (TGBeat)this.beats.get(index);
-		}
-		return null;
-	}
-	
-	public int countBeats(){
-		return this.beats.size();
-	}
-	
-	public TGMeasureHeader getHeader() {
-		return this.header;
-	}
-	
-	public void setHeader(TGMeasureHeader header) {
-		this.header = header;
-	}
-	
-	public int getNumber() {
-		return this.header.getNumber();
-	}
-	
-	public int getRepeatClose() {
-		return this.header.getRepeatClose();
-	}
-	
-	public long getStart() {
-		return this.header.getStart();
-	}
-	
-	public TGTempo getTempo() {
-		return this.header.getTempo();
-	}
-	
-	public TGTimeSignature getTimeSignature() {
-		return this.header.getTimeSignature();
-	}
-	
-	public boolean isRepeatOpen() {
-		return this.header.isRepeatOpen();
-	}
-	
-	public int getTripletFeel() {
-		return this.header.getTripletFeel();
-	}
-	
-	public long getLength() {
-		return this.header.getLength();
-	}
-	
-	public boolean hasMarker() {
-		return this.header.hasMarker();
-	}
-	
-	public TGMarker getMarker(){
-		return this.header.getMarker();
-	}
-	
-	public void makeEqual(TGMeasure measure){
-		this.clef = measure.getClef();
-		this.keySignature = measure.getKeySignature();
-		this.beats.clear();
-		for(int i = 0; i < measure.countBeats(); i ++){
-			TGBeat beat = measure.getBeat(i);
-			this.addBeat(beat);
-		}
-	}
-	
-	public TGMeasure clone(TGFactory factory,TGMeasureHeader header){
-		TGMeasure measure = factory.newMeasure(header);
-		measure.setClef(getClef());
-		measure.setKeySignature(getKeySignature());
-		for(int i = 0; i < countBeats(); i ++){
-			TGBeat beat = (TGBeat)this.beats.get(i);
-			measure.addBeat(beat.clone(factory));
-		}
-		return measure;
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGNoteEffect.java b/TuxGuitar/src/org/herac/tuxguitar/song/models/TGNoteEffect.java
deleted file mode 100644
index 3915043..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGNoteEffect.java
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
- * Created on 26-dic-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.song.models;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-import org.herac.tuxguitar.song.models.effects.TGEffectBend;
-import org.herac.tuxguitar.song.models.effects.TGEffectGrace;
-import org.herac.tuxguitar.song.models.effects.TGEffectHarmonic;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloBar;
-import org.herac.tuxguitar.song.models.effects.TGEffectTremoloPicking;
-import org.herac.tuxguitar.song.models.effects.TGEffectTrill;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public abstract class TGNoteEffect {
-	private TGEffectBend bend;
-	private TGEffectTremoloBar tremoloBar;
-	private TGEffectHarmonic harmonic;
-	private TGEffectGrace grace;
-	private TGEffectTrill trill;
-	private TGEffectTremoloPicking tremoloPicking;
-	private boolean vibrato;
-	private boolean deadNote;
-	private boolean slide;
-	private boolean hammer;
-	private boolean ghostNote;
-	private boolean accentuatedNote;
-	private boolean heavyAccentuatedNote;
-	private boolean palmMute;
-	private boolean staccato;
-	private boolean tapping;
-	private boolean slapping;
-	private boolean popping;
-	private boolean fadeIn;
-	
-	public TGNoteEffect(){
-		this.bend = null;
-		this.tremoloBar = null;
-		this.harmonic = null;
-		this.grace = null;
-		this.trill = null;
-		this.tremoloPicking = null;
-		this.vibrato = false;
-		this.deadNote = false;
-		this.slide = false;
-		this.hammer = false;
-		this.ghostNote = false;
-		this.accentuatedNote = false;
-		this.heavyAccentuatedNote = false;
-		this.palmMute = false;
-		this.staccato = false;
-		this.tapping = false;
-		this.slapping = false;
-		this.popping = false;
-		this.fadeIn = false;
-	}
-	
-	public boolean isDeadNote() {
-		return this.deadNote;
-	}
-	
-	public void setDeadNote(boolean deadNote) {
-		this.deadNote = deadNote;
-		//si es true, quito los efectos incompatibles
-		if(this.isDeadNote()){
-			this.tremoloBar = null;
-			this.bend = null;
-			this.trill = null;
-			this.slide = false;
-			this.hammer = false;
-		}
-	}
-	
-	public boolean isVibrato() {
-		return this.vibrato;
-	}
-	public void setVibrato(boolean vibrato) {
-		this.vibrato = vibrato;
-		//si no es null quito los efectos incompatibles
-		if(this.isVibrato()){
-			this.trill = null;
-		}
-	}
-	
-	public TGEffectBend getBend() {
-		return this.bend;
-	}
-	
-	public void setBend(TGEffectBend bend) {
-		this.bend = bend;
-		//si no es null quito los efectos incompatibles
-		if(this.isBend()){
-			this.tremoloBar = null;
-			this.trill = null;
-			this.deadNote = false;
-			this.slide = false;
-			this.hammer = false;
-		}
-	}
-	
-	public boolean isBend() {
-		return (this.bend != null && !this.bend.getPoints().isEmpty());
-	}
-	
-	public TGEffectTremoloBar getTremoloBar() {
-		return this.tremoloBar;
-	}
-	
-	public void setTremoloBar(TGEffectTremoloBar tremoloBar) {
-		this.tremoloBar = tremoloBar;
-		//si no es null quito los efectos incompatibles
-		if(this.isTremoloBar()){
-			this.bend = null;
-			this.trill = null;
-			this.deadNote = false;
-			this.slide = false;
-			this.hammer = false;
-		}
-	}
-	
-	public boolean isTremoloBar() {
-		return (this.tremoloBar != null);
-	}
-	
-	
-	public TGEffectTrill getTrill() {
-		return this.trill;
-	}
-	
-	public void setTrill(TGEffectTrill trill) {
-		this.trill = trill;
-		//si es true, quito los efectos incompatibles
-		if(this.isTrill()){
-			this.bend = null;
-			this.tremoloBar = null;
-			this.tremoloPicking = null;
-			this.slide = false;
-			this.hammer = false;
-			this.deadNote = false;
-			this.vibrato = false;
-		}
-	}
-	
-	public boolean isTrill() {
-		return (this.trill != null);
-	}
-	
-	public TGEffectTremoloPicking getTremoloPicking() {
-		return this.tremoloPicking;
-	}
-	
-	public void setTremoloPicking(TGEffectTremoloPicking tremoloPicking) {
-		this.tremoloPicking = tremoloPicking;
-		//si es true, quito los efectos incompatibles
-		if(this.isTremoloPicking()){
-			this.trill = null;
-			this.bend = null;
-			this.tremoloBar = null;
-			this.slide = false;
-			this.hammer = false;
-			this.deadNote = false;
-			this.vibrato = false;
-		}
-	}
-	
-	public boolean isTremoloPicking() {
-		return (this.tremoloPicking != null);
-	}
-	
-	public boolean isHammer() {
-		return this.hammer;
-	}
-	
-	public void setHammer(boolean hammer) {
-		this.hammer = hammer;
-		//si es true, quito los efectos incompatibles
-		if(this.isHammer()){
-			this.trill = null;
-			this.tremoloBar = null;
-			this.bend = null;
-			this.deadNote = false;
-			this.slide = false;
-		}
-	}
-	
-	public boolean isSlide() {
-		return this.slide;
-	}
-	
-	public void setSlide(boolean slide) {
-		this.slide = slide;
-		//si es true, quito los efectos incompatibles
-		if(this.isSlide()){
-			this.trill = null;
-			this.tremoloBar = null;
-			this.bend = null;
-			this.deadNote = false;
-			this.hammer = false;
-		}
-	}
-	
-	public boolean isGhostNote() {
-		return this.ghostNote;
-	}
-	
-	public void setGhostNote(boolean ghostNote) {
-		this.ghostNote = ghostNote;
-		//si es true, quito los efectos incompatibles
-		if(this.isGhostNote()){
-			this.accentuatedNote = false;
-			this.heavyAccentuatedNote = false;
-		}
-	}
-	
-	public boolean isAccentuatedNote() {
-		return this.accentuatedNote;
-	}
-	
-	public void setAccentuatedNote(boolean accentuatedNote) {
-		this.accentuatedNote = accentuatedNote;
-		//si es true, quito los efectos incompatibles
-		if(this.isAccentuatedNote()){
-			this.ghostNote = false;
-			this.heavyAccentuatedNote = false;
-		}
-	}
-	
-	public boolean isHeavyAccentuatedNote() {
-		return this.heavyAccentuatedNote;
-	}
-	
-	public void setHeavyAccentuatedNote(boolean heavyAccentuatedNote) {
-		this.heavyAccentuatedNote = heavyAccentuatedNote;
-		//si es true, quito los efectos incompatibles
-		if(this.isHeavyAccentuatedNote()){
-			this.ghostNote = false;
-			this.accentuatedNote = false;
-		}
-	}
-	
-	public void setHarmonic(TGEffectHarmonic harmonic) {
-		this.harmonic = harmonic;
-	}
-	
-	public TGEffectHarmonic getHarmonic() {
-		return this.harmonic;
-	}
-	
-	public boolean isHarmonic() {
-		return (this.harmonic != null);
-	}
-	
-	public TGEffectGrace getGrace() {
-		return this.grace;
-	}
-	
-	public void setGrace(TGEffectGrace grace) {
-		this.grace = grace;
-	}
-	
-	public boolean isGrace() {
-		return (this.grace != null);
-	}
-	
-	public boolean isPalmMute() {
-		return this.palmMute;
-	}
-	
-	public void setPalmMute(boolean palmMute) {
-		this.palmMute = palmMute;
-		//si es true, quito los efectos incompatibles
-		if(this.isPalmMute()){
-			this.staccato = false;
-		}
-	}
-	
-	public boolean isStaccato() {
-		return this.staccato;
-	}
-	
-	public void setStaccato(boolean staccato) {
-		this.staccato = staccato;
-		//si es true, quito los efectos incompatibles
-		if(this.isStaccato()){
-			this.palmMute = false;
-		}
-	}
-	
-	public boolean isPopping() {
-		return this.popping;
-	}
-	
-	public void setPopping(boolean popping) {
-		this.popping = popping;
-		//si es true, quito los efectos incompatibles
-		if(this.isPopping()){
-			this.tapping = false;
-			this.slapping = false;
-		}
-	}
-	
-	public boolean isSlapping() {
-		return this.slapping;
-	}
-	
-	public void setSlapping(boolean slapping) {
-		this.slapping = slapping;
-		//si es true, quito los efectos incompatibles
-		if(this.isSlapping()){
-			this.tapping = false;
-			this.popping = false;
-		}
-	}
-	
-	public boolean isTapping() {
-		return this.tapping;
-	}
-	
-	public void setTapping(boolean tapping) {
-		this.tapping = tapping;
-		//si es true, quito los efectos incompatibles
-		if(this.isTapping()){
-			this.slapping = false;
-			this.popping = false;
-		}
-	}
-	
-	public boolean isFadeIn() {
-		return this.fadeIn;
-	}
-	
-	public void setFadeIn(boolean fadeIn) {
-		this.fadeIn = fadeIn;
-	}
-	
-	public boolean hasAnyEffect(){
-		return (isBend() ||
-				isTremoloBar() ||
-				isHarmonic() ||
-				isGrace() ||
-				isTrill() ||
-				isTremoloPicking() ||
-				isVibrato() ||
-				isDeadNote() ||
-				isSlide() ||
-				isHammer() ||
-				isGhostNote() ||
-				isAccentuatedNote() ||
-				isHeavyAccentuatedNote() ||
-				isPalmMute() ||
-				isStaccato() ||
-				isTapping() ||
-				isSlapping() ||
-				isPopping() ||
-				isFadeIn());
-	}
-	
-	public TGNoteEffect clone(TGFactory factory){
-		TGNoteEffect effect = factory.newEffect();
-		effect.setVibrato(isVibrato());
-		effect.setDeadNote(isDeadNote());
-		effect.setSlide(isSlide());
-		effect.setHammer(isHammer());
-		effect.setGhostNote(isGhostNote());
-		effect.setAccentuatedNote(isAccentuatedNote());
-		effect.setHeavyAccentuatedNote(isHeavyAccentuatedNote());
-		effect.setPalmMute(isPalmMute());
-		effect.setStaccato(isStaccato());
-		effect.setTapping(isTapping());
-		effect.setSlapping(isSlapping());
-		effect.setPopping(isPopping());
-		effect.setFadeIn(isFadeIn());
-		effect.setBend(isBend()?(TGEffectBend)this.bend.clone(factory):null);
-		effect.setTremoloBar(isTremoloBar()?(TGEffectTremoloBar)this.tremoloBar.clone(factory):null);
-		effect.setHarmonic(isHarmonic()?(TGEffectHarmonic)this.harmonic.clone(factory):null);
-		effect.setGrace(isGrace()?(TGEffectGrace)this.grace.clone(factory):null);
-		effect.setTrill(isTrill()?(TGEffectTrill)this.trill.clone(factory):null);
-		effect.setTremoloPicking(isTremoloPicking()?(TGEffectTremoloPicking)this.tremoloPicking.clone(factory):null);
-		return effect;
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGSong.java b/TuxGuitar/src/org/herac/tuxguitar/song/models/TGSong.java
deleted file mode 100644
index 20200e5..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGSong.java
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
- * Created on 23-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.song.models;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public abstract class TGSong {
-	
-	private String name;
-	private String artist;
-	private String album;
-	private String author;
-	private String date;
-	private String copyright;
-	private String writer;
-	private String transcriber;
-	private String comments;
-	private List tracks;
-	private List measureHeaders;
-	
-	public TGSong() {
-		this.name = new String();
-		this.artist = new String();
-		this.album = new String();
-		this.author = new String();
-		this.date = new String();
-		this.copyright = new String();
-		this.writer = new String();
-		this.transcriber = new String();
-		this.comments = new String();
-		this.tracks = new ArrayList();
-		this.measureHeaders = new ArrayList();
-	}
-	
-	public String getName() {
-		return this.name;
-	}
-	
-	public void setName(String name) {
-		this.name = name;
-	}
-	
-	public String getAlbum() {
-		return this.album;
-	}
-	
-	public void setAlbum(String album) {
-		this.album = album;
-	}
-	
-	public String getAuthor() {
-		return this.author;
-	}
-	
-	public void setAuthor(String author) {
-		this.author = author;
-	}
-	
-	public String getArtist() {
-		return this.artist;
-	}
-	
-	public void setArtist(String artist) {
-		this.artist = artist;
-	}
-	
-	public String getDate() {
-		return this.date;
-	}
-	
-	public void setDate(String date) {
-		this.date = date;
-	}
-	
-	public String getCopyright() {
-		return this.copyright;
-	}
-	
-	public void setCopyright(String copyright) {
-		this.copyright = copyright;
-	}
-	
-	public String getWriter() {
-		return this.writer;
-	}
-	
-	public void setWriter(String writer) {
-		this.writer = writer;
-	}
-	
-	public String getTranscriber() {
-		return this.transcriber;
-	}
-	
-	public void setTranscriber(String transcriber) {
-		this.transcriber = transcriber;
-	}
-	
-	public String getComments() {
-		return this.comments;
-	}
-	
-	public void setComments(String comments) {
-		this.comments = comments;
-	}
-	
-	public int countMeasureHeaders(){
-		return this.measureHeaders.size();
-	}
-	
-	public void addMeasureHeader(TGMeasureHeader measureHeader){
-		this.addMeasureHeader(countMeasureHeaders(),measureHeader);
-	}
-	
-	public void addMeasureHeader(int index,TGMeasureHeader measureHeader){
-		measureHeader.setSong(this);
-		this.measureHeaders.add(index,measureHeader);
-	}
-	
-	public void removeMeasureHeader(int index){
-		this.measureHeaders.remove(index);
-	}
-	
-	public void removeMeasureHeader(TGMeasureHeader measureHeader){
-		this.measureHeaders.remove(measureHeader);
-	}
-	
-	public TGMeasureHeader getMeasureHeader(int index){
-		return (TGMeasureHeader)this.measureHeaders.get(index);
-	}
-	
-	public Iterator getMeasureHeaders() {
-		return this.measureHeaders.iterator();
-	}
-	
-	public int countTracks(){
-		return this.tracks.size();
-	}
-	
-	public void addTrack(TGTrack track){
-		this.addTrack(countTracks(),track);
-	}
-	
-	public void addTrack(int index,TGTrack track){
-		track.setSong(this);
-		this.tracks.add(index,track);
-	}
-	
-	public void moveTrack(int index,TGTrack track){
-		this.tracks.remove(track);
-		this.tracks.add(index,track);
-	}
-	
-	public void removeTrack(TGTrack track){
-		this.tracks.remove(track);
-		track.clear();
-	}
-	
-	public TGTrack getTrack(int index){
-		return (TGTrack)this.tracks.get(index);
-	}
-	
-	public Iterator getTracks() {
-		return this.tracks.iterator();
-	}
-	
-	public boolean isEmpty(){
-		return (countMeasureHeaders() == 0 || countTracks() == 0);
-	}
-	
-	public void clear(){
-		Iterator tracks = getTracks();
-		while(tracks.hasNext()){
-			TGTrack track = (TGTrack)tracks.next();
-			track.clear();
-		}
-		this.tracks.clear();
-		this.measureHeaders.clear();
-	}
-	
-	public TGSong clone(TGFactory factory){
-		TGSong song = factory.newSong();
-		copy(factory,song);
-		return song;
-	}
-	
-	public void copy(TGFactory factory,TGSong song){
-		song.clear();
-		song.setName(getName());
-		song.setArtist(getArtist());
-		song.setAlbum(getAlbum());
-		song.setAuthor(getAuthor());
-		song.setDate(getDate());
-		song.setCopyright(getCopyright());
-		song.setWriter(getWriter());
-		song.setTranscriber(getTranscriber());
-		song.setComments(getComments());
-		Iterator headers = getMeasureHeaders();
-		while(headers.hasNext()){
-			TGMeasureHeader header = (TGMeasureHeader)headers.next();
-			song.addMeasureHeader(header.clone(factory));
-		}
-		Iterator tracks = getTracks();
-		while(tracks.hasNext()){
-			TGTrack track = (TGTrack)tracks.next();
-			song.addTrack(track.clone(factory, song));
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGTrack.java b/TuxGuitar/src/org/herac/tuxguitar/song/models/TGTrack.java
deleted file mode 100644
index 083313f..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/song/models/TGTrack.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Created on 23-nov-2005
- *
- * TODO To change the template for this generated file go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-package org.herac.tuxguitar.song.models;
-
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
-import org.herac.tuxguitar.song.factory.TGFactory;
-/**
- * @author julian
- *
- * TODO To change the template for this generated type comment go to
- * Window - Preferences - Java - Code Style - Code Templates
- */
-public abstract class TGTrack {
-	public static final int MAX_OFFSET = 24;
-	public static final int MIN_OFFSET = -24;
-	
-	private int number;
-	private int offset;
-	private boolean solo;
-	private boolean mute;
-	private String name;
-	private List measures;
-	private List strings;
-	private TGChannel channel;
-	private TGColor color;
-	private TGLyric lyrics;
-	private TGSong song;
-	
-	public TGTrack(TGFactory factory) {
-		this.number = 0;
-		this.offset = 0;
-		this.solo = false;
-		this.mute = false;
-		this.name = new String();
-		this.measures = new ArrayList();
-		this.strings = new ArrayList();
-		this.channel = factory.newChannel();
-		this.color = factory.newColor();
-		this.lyrics = factory.newLyric();
-	}
-	
-	public int getNumber() {
-		return this.number;
-	}
-	
-	public void setNumber(int number) {
-		this.number = number;
-	}
-	
-	public Iterator getMeasures() {
-		return this.measures.iterator();
-	}
-	
-	public void addMeasure(TGMeasure measure){
-		measure.setTrack(this);
-		this.measures.add(measure);
-	}
-	
-	public void addMeasure(int index,TGMeasure measure){
-		measure.setTrack(this);
-		this.measures.add(index,measure);
-	}
-	
-	public TGMeasure getMeasure(int index){
-		if(index >= 0 && index < countMeasures()){
-			return (TGMeasure)this.measures.get(index);
-		}
-		return null;
-	}
-	
-	public void removeMeasure(int index){
-		this.measures.remove(index);
-	}
-	
-	public int countMeasures(){
-		return this.measures.size();
-	}
-	
-	public TGChannel getChannel() {
-		return this.channel;
-	}
-	
-	public void setChannel(TGChannel channel) {
-		this.channel = channel;
-	}
-	
-	public List getStrings() {
-		return this.strings;
-	}
-	
-	public void setStrings(List strings) {
-		this.strings = strings;
-	}
-	
-	public TGColor getColor() {
-		return this.color;
-	}
-	
-	public void setColor(TGColor color) {
-		this.color = color;
-	}
-	
-	public String getName() {
-		return this.name;
-	}
-	
-	public void setName(String name) {
-		this.name = name;
-	}
-	
-	public int getOffset() {
-		return this.offset;
-	}
-	
-	public void setOffset(int offset) {
-		this.offset = offset;
-	}
-	
-	public boolean isSolo() {
-		return this.solo;
-	}
-	
-	public void setSolo(boolean solo) {
-		this.solo = solo;
-	}
-	
-	public boolean isMute() {
-		return this.mute;
-	}
-	
-	public void setMute(boolean mute) {
-		this.mute = mute;
-	}
-	
-	public TGLyric getLyrics() {
-		return this.lyrics;
-	}
-	
-	public void setLyrics(TGLyric lyrics) {
-		this.lyrics = lyrics;
-	}
-	
-	public TGString getString(int number){
-		return (TGString)this.strings.get(number - 1);
-	}
-	
-	public int stringCount(){
-		return this.strings.size();
-	}
-	
-	public boolean isPercussionTrack(){
-		return (getChannel().isPercussionChannel());
-	}
-	
-	public TGSong getSong() {
-		return this.song;
-	}
-	
-	public void setSong(TGSong song) {
-		this.song = song;
-	}
-	
-	public void clear(){
-		this.strings.clear();
-		this.measures.clear();
-	}
-	
-	public TGTrack clone(TGFactory factory,TGSong song){
-		TGTrack track = factory.newTrack();
-		copy(factory, song, track);
-		return track;
-	}
-	
-	public void copy(TGFactory factory,TGSong song,TGTrack track){
-		track.clear();
-		track.setNumber(getNumber());
-		track.setName(getName());
-		track.setOffset(getOffset());
-		getChannel().copy(track.getChannel());
-		getColor().copy(track.getColor());
-		getLyrics().copy(track.getLyrics());
-		for (int i = 0; i < getStrings().size(); i++) {
-			TGString string = (TGString) getStrings().get(i);
-			track.getStrings().add(string.clone(factory));
-		}
-		for (int i = 0; i < countMeasures(); i++) {
-			TGMeasure measure = getMeasure(i);
-			track.addMeasure(measure.clone(factory,song.getMeasureHeader(i)));
-		}
-	}
-	
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/util/TGLibraryLoader.java b/TuxGuitar/src/org/herac/tuxguitar/util/TGLibraryLoader.java
deleted file mode 100644
index 53c3d02..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/util/TGLibraryLoader.java
+++ /dev/null
@@ -1,61 +0,0 @@
-package org.herac.tuxguitar.util;
-
-import java.io.File;
-import java.io.FilenameFilter;
-
-public class TGLibraryLoader {
-	
-	private static TGLibraryLoader instance;
-	
-	private TGLibraryLoader(){
-		super();
-	}
-	
-	public static TGLibraryLoader instance(){
-		if(instance == null){
-			instance = new TGLibraryLoader();
-		}
-		return instance;
-	}
-	
-	public void loadLibraries(File folder,final String prefix,final  String extension){
-		if(folder != null && folder.exists()){
-			FilenameFilter filter = new FilenameFilter() {
-				public boolean accept(File dir, String name) {
-					if(name == null){
-						return false;
-					}
-					if(prefix != null && prefix.length() > 0){
-						int index = name.indexOf(prefix);
-						if(index != 0){
-							return false;
-						}
-					}
-					if(extension != null && extension.length() > 0){
-						int index = name.indexOf(extension);
-						if(index != ( name.length() - extension.length() ) ){
-							return false;
-						}
-					}
-					return true;
-				}
-			};
-			String[] files = folder.list(filter);
-			for(int i = 0; i < files.length; i ++){
-				File file = new File(folder.getAbsolutePath() + File.separator + files[i]);
-				if(file.exists() && !file.isDirectory()){
-					loadLibrary(file);
-				}
-			}
-		}
-	}
-	
-	protected void loadLibrary(File file){
-		try{
-			System.out.println("Loading: " + file.getAbsolutePath());
-			System.load(file.getAbsolutePath());
-		}catch(Throwable throwable){
-			throwable.printStackTrace();
-		}
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/util/TGSynchronizer.java b/TuxGuitar/src/org/herac/tuxguitar/util/TGSynchronizer.java
deleted file mode 100644
index e77d975..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/util/TGSynchronizer.java
+++ /dev/null
@@ -1,73 +0,0 @@
-package org.herac.tuxguitar.util;
-
-
-public class TGSynchronizer {
-	
-	private static TGSynchronizer instance;
-	
-	private TGSynchronizerController controller;
-	
-	private TGSynchronizer(){
-		super();
-	}
-	
-	public static TGSynchronizer instance(){
-		if (instance == null) {
-			synchronized (TGSynchronizer.class) {
-				instance = new TGSynchronizer();
-			}
-		}
-		return instance;
-	}
-	
-	public void addRunnable(TGRunnable runnable) throws Throwable {
-		TGSynchronizerTask task = new TGSynchronizerTask(runnable);
-		this.controller.execute(task);
-		if(task.getThrowable() != null){
-			throw task.getThrowable();
-		}
-	}
-	
-	public void runLater(TGRunnable runnable) throws Throwable {
-		TGSynchronizerTask task = new TGSynchronizerTask(runnable);
-		this.controller.executeLater(task);
-		if(task.getThrowable() != null){
-			throw task.getThrowable();
-		}
-	}
-	
-	public void setController(TGSynchronizerController controller){
-		this.controller = controller;
-	}
-	
-	public class TGSynchronizerTask{
-		private Throwable throwable;
-		private TGRunnable runnable;
-		
-		public TGSynchronizerTask(TGRunnable runnable){
-			this.runnable = runnable;
-			this.throwable = null;
-		}
-		
-		public Throwable getThrowable(){
-			return this.throwable;
-		}
-		
-		public void run(){
-			try{
-				this.runnable.run();
-			}catch(Throwable throwable){
-				this.throwable = throwable;
-			}
-		}
-	}
-	
-	public interface TGRunnable {
-		public void run() throws Throwable;
-	}
-	
-	public interface TGSynchronizerController{
-		public void execute(TGSynchronizerTask task);
-		public void executeLater(TGSynchronizerTask task);
-	}
-}
diff --git a/TuxGuitar/src/org/herac/tuxguitar/util/TGVersion.java b/TuxGuitar/src/org/herac/tuxguitar/util/TGVersion.java
deleted file mode 100644
index 9ed4c90..0000000
--- a/TuxGuitar/src/org/herac/tuxguitar/util/TGVersion.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.herac.tuxguitar.util;
-
-public class TGVersion {
-	
-	public static final TGVersion CURRENT = new TGVersion(1,2,0);
-	
-	private int major;
-	private int minor;
-	private int revision;
-	
-	public TGVersion(int major,int minor, int revision){
-		this.major = major;
-		this.minor = minor;
-		this.revision = revision;
-	}
-	
-	public int getMajor() {
-		return this.major;
-	}
-	
-	public int getMinor() {
-		return this.minor;
-	}
-	
-	public int getRevision() {
-		return this.revision;
-	}
-	
-	public boolean isSameVersion(TGVersion version){
-		if( version == null ){
-			return false;
-		}
-		return ( version.getMajor() == getMajor() && version.getMinor() == getMinor() && version.getRevision() == getRevision());
-	}
-	
-	public String getVersion(){
-		String version = (getMajor() + "." + getMinor());
-		if( getRevision() > 0 ){
-			version += ("." + getRevision());
-		}
-		return version;
-	}
-	
-	public String toString(){
-		return getVersion();
-	}
-}
diff --git a/TuxGuitar/xml/build-fedora.xml b/TuxGuitar/xml/build-fedora.xml
new file mode 100644
index 0000000..d2e9559
--- /dev/null
+++ b/TuxGuitar/xml/build-fedora.xml
@@ -0,0 +1,150 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+
+<project name="Tux Guitar" basedir="." >
+	<description>
+		Tux-Guitar
+	</description>
+	<taskdef resource="net/sf/antcontrib/antlib.xml"/>
+
+	<property name="file.properties" value="${build.path}${file.separator}config.dist" />
+	<property name="file.desktop" value="tuxguitar.desktop" />
+	<property name="file.mime" value="tuxguitar.xml" />
+	<property name="file.script" value="tuxguitar" />
+	<property name="file.plugin.properties" value="${build.path}${file.separator}plugin.properties" />
+	<property name="file.fluidsynth.config" value="${build.path}${file.separator}tuxguitar-fluidsynth.cfg" />
+	<property name="file.song" value="../misc/tuxguitar.tg" />
+	<target name="clean" >
+		<delete quiet="true" dir="tuxguitar-${dist.version}" />
+	</target>
+
+	<target name="package" />
+	
+	<target name="install" >
+		<mkdir dir="${dist.dst.path}${os.data.dir}/applications" />
+		<copy todir="${dist.dst.path}${os.data.dir}/applications/">
+			<fileset file="${file.desktop}"/>
+		</copy>
+		<mkdir dir="${dist.dst.path}${os.data.dir}/mime/packages" />
+		<copy todir="${dist.dst.path}${os.data.dir}/mime/packages">
+			<fileset file="${file.mime}"/>
+		</copy>
+		<mkdir dir="${dist.dst.path}${os.bin.dir}" />
+		<exec executable="cp" >
+			<arg value="-a"/>
+			<arg value="${file.script}"/>
+			<arg value="${dist.dst.path}${os.bin.dir}/"/>
+		</exec>
+		<copy tofile="${dist.dst.path}${dist.default.song}/" >
+			<fileset file="${file.song}"/>
+		</copy>
+		
+		<for list="16,24,32,48,64,96" param="dim" >
+			<sequential>
+				<mkdir dir="${dist.dst.path}${os.data.dir}/icons/hicolor/@{dim}x@{dim}/apps/" />
+				<mkdir dir="${dist.dst.path}${os.data.dir}/icons/hicolor/@{dim}x@{dim}/mimetypes/" />
+				<symlink link="${dist.dst.path}${os.data.dir}/icons/hicolor/@{dim}x@{dim}/apps/tuxguitar.png" resource="../../../../tuxguitar/skins/${dist.default.style}/icon-@{dim}x@{dim}.png" />
+				<symlink link="${dist.dst.path}${os.data.dir}/icons/hicolor/@{dim}x@{dim}/mimetypes/audio-x-tuxguitar.png" resource="../../../../tuxguitar/skins/${dist.default.style}/icon-@{dim}x@{dim}.png" />
+				<symlink link="${dist.dst.path}${os.data.dir}/icons/hicolor/@{dim}x@{dim}/mimetypes/audio-x-gtp.png" resource="../../../../tuxguitar/skins/${dist.default.style}/icon-@{dim}x@{dim}.png" />
+				<symlink link="${dist.dst.path}${os.data.dir}/icons/hicolor/@{dim}x@{dim}/mimetypes/audio-x-ptb.png" resource="../../../../tuxguitar/skins/${dist.default.style}/icon-@{dim}x@{dim}.png" />
+			</sequential>
+		</for>
+	</target>
+
+	<target name="build" >
+		<echo file="${file.properties}" append="false">font.default=Sans,6,0${line.separator}</echo>
+		<echo file="${file.properties}" append="true">font.note=Sans,7,0${line.separator}</echo>
+		<echo file="${file.properties}" append="true">font.text=Sans,8,0${line.separator}</echo>
+		<echo file="${file.properties}" append="true">font.lyric=Sans,7,0${line.separator}</echo>
+		<echo file="${file.properties}" append="true">font.time-signature=Sans,13,1${line.separator}</echo>
+		<echo file="${file.properties}" append="true">font.printer.default=Sans,6,0${line.separator}</echo>
+		<echo file="${file.properties}" append="true">font.printer.note=Sans,6,0${line.separator}</echo>
+		<echo file="${file.properties}" append="true">font.printer.text=Sans,8,0${line.separator}</echo>
+		<echo file="${file.properties}" append="true">font.printer.lyric=Sans,7,0${line.separator}</echo>
+		<echo file="${file.properties}" append="true">font.printer.time-signature=Sans,10,1${line.separator}</echo>
+		<echo file="${file.properties}" append="true">midi.sequencer=tuxguitar.sequencer${line.separator}</echo>
+		<echo file="${file.properties}" append="true">midi.port=tuxguitar-fluidsynth_${os.data.dir}/soundfonts/default.sf2${line.separator}</echo>
+		<echo file="${file.properties}" append="true">skin=${dist.default.style}${line.separator}</echo>
+
+		<echo file="${file.desktop}" append="false">[Desktop Entry]${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Version=1.0${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Name=TuxGuitar${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">GenericName=Tablature Editor/Playback${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Comment=Edit, playback guitar tablatures${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Comment[fr]=Edite, joue des tablatures de guitare${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Comment[es]=Edita, reproduce tablaturas de guitarra${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Type=Application${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">MimeType=audio/x-tuxguitar;audio/x-gtp;audio/x-ptb;audio/midi;${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Categories=AudioVideo;Audio;X-Notation;${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Exec=tuxguitar %f${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Icon=tuxguitar${line.separator}</echo>
+		<echo file="${file.desktop}" append="true">Terminal=false${line.separator}</echo>
+
+		<echo file="${file.mime}" append="false"><?xml version="1.0" encoding="UTF-8"?>${line.separator}</echo>
+		<echo file="${file.mime}" append="true"><mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">${line.separator}</echo>
+		<echo file="${file.mime}" append="true">	<mime-type type="audio/x-tuxguitar">${line.separator}</echo>
+		<echo file="${file.mime}" append="true">		<comment>TuxGuitar file</comment>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">		<glob pattern="*.tg"/>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">	</mime-type>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">	<mime-type type="audio/x-gtp">${line.separator}</echo>
+		<echo file="${file.mime}" append="true">		<comment>GuitarPro file</comment>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">		<glob pattern="*.gtp"/>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">		<glob pattern="*.gp3"/>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">		<glob pattern="*.gp4"/>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">		<glob pattern="*.gp5"/>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">	</mime-type>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">	<mime-type type="audio/x-ptb">${line.separator}</echo>
+		<echo file="${file.mime}" append="true">		<comment>PowerTab file</comment>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">		<glob pattern="*.ptb"/>${line.separator}</echo>
+		<echo file="${file.mime}" append="true">	</mime-type>${line.separator}</echo>
+		<echo file="${file.mime}" append="true"></mime-info>${line.separator}</echo>
+
+		<echo file="${file.script}" append="false">#!/bin/sh${line.separator}</echo>
+		<echo file="${file.script}" append="true">##SCRIPT DIR${line.separator}</echo>
+		<echo file="${file.script}" append="true">DIR_NAME=`dirname "$0"`${line.separator}</echo>
+		<echo file="${file.script}" append="true">DIR_NAME=`cd "$DIR_NAME"; pwd`${line.separator}</echo>
+		<echo file="${file.script}" append="true">cd "${DIR_NAME}"${line.separator}</echo>
+		<echo file="${file.script}" append="true">##JAVA${line.separator}</echo>
+		<echo file="${file.script}" append="true">if [ -z $JAVA ]; then${line.separator}</echo>
+		<echo file="${file.script}" append="true">	JAVA=${JAVA_HOME}/bin/java${line.separator}</echo>
+		<echo file="${file.script}" append="true">	[ ! -f ${JAVA} ] && JAVA=/usr/bin/java${line.separator}</echo>
+		<echo file="${file.script}" append="true">	[ ! -f ${JAVA} ] && JAVA=java${line.separator}</echo>
+		<echo file="${file.script}" append="true">fi${line.separator}</echo>
+		<echo file="${file.script}" append="true">##MOZILLA_FIVE_HOME${line.separator}</echo>
+		<echo file="${file.script}" append="true">if [ -z $MOZILLA_FIVE_HOME ]; then${line.separator}</echo>
+		<echo file="${file.script}" append="true">	MOZILLA_FIVE_HOME=/usr/lib${os.lib.suffix}/firefox${line.separator}</echo>
+		<echo file="${file.script}" append="true">	[ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib${os.lib.suffix}/mozilla${line.separator}</echo>
+		<echo file="${file.script}" append="true">	[ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib${os.lib.suffix}/iceweasel${line.separator}</echo>
+		<echo file="${file.script}" append="true">fi${line.separator}</echo>
+		<echo file="${file.script}" append="true">##LIBRARY_PATH${line.separator}</echo>
+		<echo file="${file.script}" append="true">LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${dist.lib.path}${line.separator}</echo>
+		<echo file="${file.script}" append="true">LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib${os.lib.suffix}${line.separator}</echo>
+		<echo file="${file.script}" append="true">LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib${os.lib.suffix}${line.separator}</echo>
+		<echo file="${file.script}" append="true">LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib${os.lib.suffix}/jni${line.separator}</echo>
+		<echo file="${file.script}" append="true">LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib${os.lib.suffix}${line.separator}</echo>
+		<echo file="${file.script}" append="true">LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MOZILLA_FIVE_HOME}${line.separator}</echo>
+		<echo file="${file.script}" append="true">##CLASSPATH${line.separator}</echo>
+		<echo file="${file.script}" append="true">CLASSPATH=$CLASSPATH:${dist.jar.path}${build.jar}:${lib.swt.jar}:${path.itext}:${dist.share.path}${line.separator}</echo>
+		<echo file="${file.script}" append="true">##MAINCLASS${line.separator}</echo>
+		<echo file="${file.script}" append="true">MAINCLASS=org.herac.tuxguitar.app.TGMain${line.separator}</echo>
+		<echo file="${file.script}" append="true">##JVM ARGUMENTS${line.separator}</echo>
+		<echo file="${file.script}" append="true">VM_ARGS="-Xmx512m"${line.separator}</echo>
+		<echo file="${file.script}" append="true">##EXPORT VARS${line.separator}</echo>
+		<echo file="${file.script}" append="true">export CLASSPATH${line.separator}</echo>
+		<echo file="${file.script}" append="true">export LD_LIBRARY_PATH${line.separator}</echo>
+		<echo file="${file.script}" append="true">export MOZILLA_FIVE_HOME${line.separator}</echo>
+		<echo file="${file.script}" append="true">arg=""${line.separator}</echo>
+		<echo file="${file.script}" append="true">if [ ! "$1" ] ; then arg="${dist.default.song}"; fi${line.separator}</echo>
+		<echo file="${file.script}" append="true">##LAUNCH${line.separator}</echo>
+		<echo file="${file.script}" append="true">${JAVA} ${VM_ARGS} -cp :${CLASSPATH} -Dtuxguitar.share.path="${dist.share.path}" -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2" "$arg"${line.separator}</echo>
+		<chmod file="${file.script}" perm="755"/>
+
+		<echo file="${file.plugin.properties}" append="false">org.herac.tuxguitar.player.impl.midiport.oss.MidiOutputPortProviderPlugin.enabled=false${line.separator}</echo>
+		<echo file="${file.plugin.properties}" append="true">org.herac.tuxguitar.tray.TGTrayPlugin.enabled=false${line.separator}</echo>
+
+		<echo file="${file.fluidsynth.config}" append="false">soundfont.count=1${line.separator}</echo>
+		<echo file="${file.fluidsynth.config}" append="true">soundfont.path0=${os.data.dir}/soundfonts/default.sf2${line.separator}</echo>
+		<echo file="${file.fluidsynth.config}" append="true">audio.driver=alsa${line.separator}</echo>
+		<echo file="${file.fluidsynth.config}" append="true">audio.period-size=1024${line.separator}</echo>
+	</target>
+	
+</project>
diff --git a/TuxGuitar/xml/build-freebsd.xml b/TuxGuitar/xml/build-freebsd.xml
index 22b44a5..b321ae7 100644
--- a/TuxGuitar/xml/build-freebsd.xml
+++ b/TuxGuitar/xml/build-freebsd.xml
@@ -49,7 +49,7 @@
 		<echo file="${file.script}" append="true">##LIBRARY_PATH${line.separator}</echo>
 		<echo file="${file.script}" append="true">LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${lib.swt.jni}${line.separator}</echo>
 		<echo file="${file.script}" append="true">##MAINCLASS${line.separator}</echo>
-		<echo file="${file.script}" append="true">MAINCLASS=org.herac.tuxguitar.gui.TGMain${line.separator}</echo>
+		<echo file="${file.script}" append="true">MAINCLASS=org.herac.tuxguitar.app.TGMain${line.separator}</echo>
 		<echo file="${file.script}" append="true">##JVM ARGUMENTS${line.separator}</echo>
 		<echo file="${file.script}" append="true">VM_ARGS="-Xmx512m"${line.separator}</echo>
 		<echo file="${file.script}" append="true">##LAUNCH${line.separator}</echo>
diff --git a/TuxGuitar/xml/build-linux.xml b/TuxGuitar/xml/build-linux.xml
index 0c99dab..8616e81 100644
--- a/TuxGuitar/xml/build-linux.xml
+++ b/TuxGuitar/xml/build-linux.xml
@@ -69,7 +69,7 @@
 		<echo file="${file.script}" append="true">##CLASSPATH${line.separator}</echo>
 		<echo file="${file.script}" append="true">CLASSPATH=$CLASSPATH:${dist.jar.path}${build.jar}:${lib.swt.jar}:${lib.itext.jar}:${dist.share.path}${line.separator}</echo>
 		<echo file="${file.script}" append="true">##MAINCLASS${line.separator}</echo>
-		<echo file="${file.script}" append="true">MAINCLASS=org.herac.tuxguitar.gui.TGMain${line.separator}</echo>
+		<echo file="${file.script}" append="true">MAINCLASS=org.herac.tuxguitar.app.TGMain${line.separator}</echo>
 		<echo file="${file.script}" append="true">##JVM ARGUMENTS${line.separator}</echo>
 		<echo file="${file.script}" append="true">VM_ARGS="-Xmx512m"${line.separator}</echo>
 		<echo file="${file.script}" append="true">##EXPORT VARS${line.separator}</echo>
diff --git a/TuxGuitar/xml/build-mac.xml b/TuxGuitar/xml/build-mac.xml
index 09bccdf..46ea397 100644
--- a/TuxGuitar/xml/build-mac.xml
+++ b/TuxGuitar/xml/build-mac.xml
@@ -176,7 +176,7 @@
 		<echo file="${file.script}" append="true">LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni${line.separator}</echo>
 		<echo file="${file.script}" append="true">LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib${line.separator}</echo>
 		<echo file="${file.script}" append="true">##MAINCLASS${line.separator}</echo>
-		<echo file="${file.script}" append="true">MAINCLASS=org.herac.tuxguitar.gui.TGMain${line.separator}</echo>
+		<echo file="${file.script}" append="true">MAINCLASS=org.herac.tuxguitar.app.TGMain${line.separator}</echo>
 		<echo file="${file.script}" append="true">##JVM ARGUMENTS${line.separator}</echo>
 		<echo file="${file.script}" append="true">VM_ARGS="-Xmx512m"${line.separator}</echo>
 		<echo file="${file.script}" append="true">##SWT ARGUMENTS${line.separator}</echo>
diff --git a/TuxGuitar/xml/build-ubuntu.xml b/TuxGuitar/xml/build-ubuntu.xml
index d702135..d8cc27a 100644
--- a/TuxGuitar/xml/build-ubuntu.xml
+++ b/TuxGuitar/xml/build-ubuntu.xml
@@ -155,7 +155,7 @@
 		<echo file="${file.script}" append="true">##CLASSPATH${line.separator}</echo>
 		<echo file="${file.script}" append="true">CLASSPATH=$CLASSPATH:${dist.jar.path}${build.jar}:${lib.swt.jar}:${lib.itext.jar}:${dist.share.path}${line.separator}</echo>
 		<echo file="${file.script}" append="true">##MAINCLASS${line.separator}</echo>
-		<echo file="${file.script}" append="true">MAINCLASS=org.herac.tuxguitar.gui.TGMain${line.separator}</echo>
+		<echo file="${file.script}" append="true">MAINCLASS=org.herac.tuxguitar.app.TGMain${line.separator}</echo>
 		<echo file="${file.script}" append="true">##JVM ARGUMENTS${line.separator}</echo>
 		<echo file="${file.script}" append="true">VM_ARGS="-Xmx512m"${line.separator}</echo>
 		<echo file="${file.script}" append="true">##EXPORT VARS${line.separator}</echo>
diff --git a/TuxGuitar/xml/build-windows.xml b/TuxGuitar/xml/build-windows.xml
index 2b006b9..75e6353 100644
--- a/TuxGuitar/xml/build-windows.xml
+++ b/TuxGuitar/xml/build-windows.xml
@@ -56,7 +56,7 @@
 		<echo file="${file.description}" append="true">-> iText (Free Java-PDF library): http://www.lowagie.com/iText/${line.separator}</echo>
 		
 		<echo file="${file.script}" append="false">cd "."${line.separator}</echo>
-		<echo file="${file.script}" append="true">java -cp ;${dist.jar.path}${build.jar};${lib.swt.jar};${lib.itext.jar};${dist.share.path} -Djava.library.path=${lib.swt.jni} org.herac.tuxguitar.gui.TGMain %1 %2 %3 %4 %5 %6 %7 %8 %9 %10</echo>
+		<echo file="${file.script}" append="true">java -cp ;${dist.jar.path}${build.jar};${lib.swt.jar};${lib.itext.jar};${dist.share.path} -Djava.library.path=${lib.swt.jni} org.herac.tuxguitar.app.TGMain %1 %2 %3 %4 %5 %6 %7 %8 %9 %10</echo>
 		<chmod file="${file.script}" perm="755"/>
 		
 		<available property="janel.enabled" file="${janel.exe}" />
@@ -68,7 +68,7 @@
 		
 		<echo file="${janel.name}.lap" append="false">-Djava.class.path=${janel.lap.prefix}${dist.jar.path}${build.jar};${janel.lap.prefix}${lib.swt.jar};${janel.lap.prefix}${lib.itext.jar};${janel.lap.prefix}${dist.share.path}${line.separator}</echo>
 		<echo file="${janel.name}.lap" append="true"># Java class to call, ex. mypackage.Start or mypackage/Start${line.separator}</echo>
-		<echo file="${janel.name}.lap" append="true">janel.main.class=org.herac.tuxguitar.gui.TGMain${line.separator}</echo>
+		<echo file="${janel.name}.lap" append="true">janel.main.class=org.herac.tuxguitar.app.TGMain${line.separator}</echo>
 		<echo file="${janel.name}.lap" append="true">${line.separator}</echo>
 		<echo file="${janel.name}.lap" append="true"># the minimum version of the JVM, ex. 1.4.1${line.separator}</echo>
 		<echo file="${janel.name}.lap" append="true">janel.min.java.version=1.4.2${line.separator}</echo>
diff --git a/build-scripts/.project b/build-scripts/.project
new file mode 100644
index 0000000..ce0e980
--- /dev/null
+++ b/build-scripts/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>build-scripts</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+	</buildSpec>
+	<natures>
+	</natures>
+</projectDescription>
diff --git a/build-scripts/native-modules/tuxguitar-alsa-linux-x86/pom.xml b/build-scripts/native-modules/tuxguitar-alsa-linux-x86/pom.xml
new file mode 100644
index 0000000..517251b
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-alsa-linux-x86/pom.xml
@@ -0,0 +1,126 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-alsa-linux-x86</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-alsa.jni.path>${parent.relativePath}/TuxGuitar-alsa/jni/</tuxguitar-alsa.jni.path>
+		<tuxguitar-alsa.jni.cc>gcc</tuxguitar-alsa.jni.cc>
+		<tuxguitar-alsa.jni.cflags>-I$(shell gcj -print-file-name=include/) -fPIC</tuxguitar-alsa.jni.cflags>
+		<tuxguitar-alsa.jni.ldflags></tuxguitar-alsa.jni.ldflags>
+		<tuxguitar-alsa.jni.ldlibs>-lasound</tuxguitar-alsa.jni.ldlibs>
+		<tuxguitar-alsa.jni.ldpath>-L/usr/lib</tuxguitar-alsa.jni.ldpath>
+		<tuxguitar-alsa.jni.library.name>tuxguitar-alsa-jni</tuxguitar-alsa.jni.library.name>
+		<tuxguitar-alsa.jni.library.prefix>lib</tuxguitar-alsa.jni.library.prefix>
+		<tuxguitar-alsa.jni.library.suffix>.so</tuxguitar-alsa.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-alsa</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-alsa.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-alsa.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-alsa.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-alsa.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-alsa.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-alsa.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-alsa.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-alsa.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-alsa.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-alsa.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="LIBRARY_NAME" value="${tuxguitar-alsa.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-alsa.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-alsa.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-alsa.jni.path}/${tuxguitar-alsa.jni.library.prefix}${tuxguitar-alsa.jni.library.name}${tuxguitar-alsa.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-alsa.jni.library.prefix}${tuxguitar-alsa.jni.library.name}${tuxguitar-alsa.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-alsa</artifactId>
+									<destFileName>tuxguitar-alsa.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-alsa-linux-x86_64/pom.xml b/build-scripts/native-modules/tuxguitar-alsa-linux-x86_64/pom.xml
new file mode 100644
index 0000000..24c380b
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-alsa-linux-x86_64/pom.xml
@@ -0,0 +1,126 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-alsa-linux-x86_64</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-alsa.jni.path>${parent.relativePath}/TuxGuitar-alsa/jni/</tuxguitar-alsa.jni.path>
+		<tuxguitar-alsa.jni.cc>gcc</tuxguitar-alsa.jni.cc>
+		<tuxguitar-alsa.jni.cflags>-I$(shell gcj -print-file-name=include/) -fPIC</tuxguitar-alsa.jni.cflags>
+		<tuxguitar-alsa.jni.ldflags></tuxguitar-alsa.jni.ldflags>
+		<tuxguitar-alsa.jni.ldlibs>-lasound</tuxguitar-alsa.jni.ldlibs>
+		<tuxguitar-alsa.jni.ldpath>-L/usr/lib</tuxguitar-alsa.jni.ldpath>
+		<tuxguitar-alsa.jni.library.name>tuxguitar-alsa-jni</tuxguitar-alsa.jni.library.name>
+		<tuxguitar-alsa.jni.library.prefix>lib</tuxguitar-alsa.jni.library.prefix>
+		<tuxguitar-alsa.jni.library.suffix>.so</tuxguitar-alsa.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-alsa</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-alsa.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-alsa.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-alsa.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-alsa.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-alsa.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-alsa.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-alsa.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-alsa.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-alsa.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-alsa.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="LIBRARY_NAME" value="${tuxguitar-alsa.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-alsa.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-alsa.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-alsa.jni.path}/${tuxguitar-alsa.jni.library.prefix}${tuxguitar-alsa.jni.library.name}${tuxguitar-alsa.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-alsa.jni.library.prefix}${tuxguitar-alsa.jni.library.name}${tuxguitar-alsa.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-alsa</artifactId>
+									<destFileName>tuxguitar-alsa.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-linux-x86/pom.xml b/build-scripts/native-modules/tuxguitar-fluidsynth-linux-x86/pom.xml
new file mode 100644
index 0000000..47e1565
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-linux-x86/pom.xml
@@ -0,0 +1,126 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-fluidsynth-linux-x86</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-fluidsynth.jni.path>${parent.relativePath}/TuxGuitar-fluidsynth/jni/</tuxguitar-fluidsynth.jni.path>
+		<tuxguitar-fluidsynth.jni.cc>gcc</tuxguitar-fluidsynth.jni.cc>
+		<tuxguitar-fluidsynth.jni.cflags>-I$(shell gcj -print-file-name=include/) -fPIC</tuxguitar-fluidsynth.jni.cflags>
+		<tuxguitar-fluidsynth.jni.ldflags></tuxguitar-fluidsynth.jni.ldflags>
+		<tuxguitar-fluidsynth.jni.ldlibs>-lfluidsynth</tuxguitar-fluidsynth.jni.ldlibs>
+		<tuxguitar-fluidsynth.jni.ldpath>-L/usr/lib</tuxguitar-fluidsynth.jni.ldpath>
+		<tuxguitar-fluidsynth.jni.library.name>tuxguitar-fluidsynth-jni</tuxguitar-fluidsynth.jni.library.name>
+		<tuxguitar-fluidsynth.jni.library.prefix>lib</tuxguitar-fluidsynth.jni.library.prefix>
+		<tuxguitar-fluidsynth.jni.library.suffix>.so</tuxguitar-fluidsynth.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-fluidsynth</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-fluidsynth.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-fluidsynth.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-fluidsynth.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-fluidsynth.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-fluidsynth.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-fluidsynth.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-fluidsynth.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-fluidsynth.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-fluidsynth.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-fluidsynth.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="LIBRARY_NAME" value="${tuxguitar-fluidsynth.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-fluidsynth.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-fluidsynth.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-fluidsynth.jni.path}/${tuxguitar-fluidsynth.jni.library.prefix}${tuxguitar-fluidsynth.jni.library.name}${tuxguitar-fluidsynth.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-fluidsynth.jni.library.prefix}${tuxguitar-fluidsynth.jni.library.name}${tuxguitar-fluidsynth.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-fluidsynth</artifactId>
+									<destFileName>tuxguitar-fluidsynth.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-linux-x86_64/pom.xml b/build-scripts/native-modules/tuxguitar-fluidsynth-linux-x86_64/pom.xml
new file mode 100644
index 0000000..466e996
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-linux-x86_64/pom.xml
@@ -0,0 +1,126 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-fluidsynth-linux-x86_64</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-fluidsynth.jni.path>${parent.relativePath}/TuxGuitar-fluidsynth/jni/</tuxguitar-fluidsynth.jni.path>
+		<tuxguitar-fluidsynth.jni.cc>gcc</tuxguitar-fluidsynth.jni.cc>
+		<tuxguitar-fluidsynth.jni.cflags>-I$(shell gcj -print-file-name=include/) -fPIC</tuxguitar-fluidsynth.jni.cflags>
+		<tuxguitar-fluidsynth.jni.ldflags></tuxguitar-fluidsynth.jni.ldflags>
+		<tuxguitar-fluidsynth.jni.ldlibs>-lfluidsynth</tuxguitar-fluidsynth.jni.ldlibs>
+		<tuxguitar-fluidsynth.jni.ldpath>-L/usr/lib</tuxguitar-fluidsynth.jni.ldpath>
+		<tuxguitar-fluidsynth.jni.library.name>tuxguitar-fluidsynth-jni</tuxguitar-fluidsynth.jni.library.name>
+		<tuxguitar-fluidsynth.jni.library.prefix>lib</tuxguitar-fluidsynth.jni.library.prefix>
+		<tuxguitar-fluidsynth.jni.library.suffix>.so</tuxguitar-fluidsynth.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-fluidsynth</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-fluidsynth.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-fluidsynth.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-fluidsynth.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-fluidsynth.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-fluidsynth.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-fluidsynth.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-fluidsynth.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-fluidsynth.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-fluidsynth.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-fluidsynth.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="LIBRARY_NAME" value="${tuxguitar-fluidsynth.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-fluidsynth.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-fluidsynth.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-fluidsynth.jni.path}/${tuxguitar-fluidsynth.jni.library.prefix}${tuxguitar-fluidsynth.jni.library.name}${tuxguitar-fluidsynth.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-fluidsynth.jni.library.prefix}${tuxguitar-fluidsynth.jni.library.name}${tuxguitar-fluidsynth.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-fluidsynth</artifactId>
+									<destFileName>tuxguitar-fluidsynth.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth.h
new file mode 100644
index 0000000..ef40f82
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth.h
@@ -0,0 +1,102 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_H
+#define _FLUIDSYNTH_H
+
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if defined(WIN32)
+#if defined(FLUIDSYNTH_DLL_EXPORTS)
+#define FLUIDSYNTH_API __declspec(dllexport)
+#elif defined(FLUIDSYNTH_NOT_A_DLL)
+#define FLUIDSYNTH_API 
+#else
+#define FLUIDSYNTH_API __declspec(dllimport)
+#endif
+
+#elif defined(MACOS9)
+#define FLUIDSYNTH_API __declspec(export)
+
+#else
+#define FLUIDSYNTH_API
+#endif
+
+
+/**
+ * @file fluidsynth.h
+ * @brief FluidSynth is a real-time synthesizer designed for SoundFont(R) files.
+ *
+ * This is the header of the fluidsynth library and contains the
+ * synthesizer's public API.
+ *
+ * Depending on how you want to use or extend the synthesizer you
+ * will need different API functions. You probably do not need all
+ * of them. Here is what you might want to do:
+ *
+ * o Embedded synthesizer: create a new synthesizer and send MIDI
+ *   events to it. The sound goes directly to the audio output of
+ *   your system.
+ *
+ * o Plugin synthesizer: create a synthesizer and send MIDI events
+ *   but pull the audio back into your application.
+ *
+ * o SoundFont plugin: create a new type of "SoundFont" and allow
+ *   the synthesizer to load your type of SoundFonts.
+ *
+ * o MIDI input: Create a MIDI handler to read the MIDI input on your
+ *   machine and send the MIDI events directly to the synthesizer.
+ *
+ * o MIDI files: Open MIDI files and send the MIDI events to the
+ *   synthesizer.
+ *
+ * o Command lines: You can send textual commands to the synthesizer.
+ *
+ * SoundFont(R) is a registered trademark of E-mu Systems, Inc.
+ */
+
+#include "fluidsynth/types.h"
+#include "fluidsynth/settings.h"
+#include "fluidsynth/synth.h"
+#include "fluidsynth/shell.h"
+#include "fluidsynth/sfont.h"
+#include "fluidsynth/ramsfont.h"
+#include "fluidsynth/audio.h"
+#include "fluidsynth/event.h"
+#include "fluidsynth/midi.h"
+#include "fluidsynth/seq.h"
+#include "fluidsynth/seqbind.h"
+#include "fluidsynth/log.h"
+#include "fluidsynth/misc.h"
+#include "fluidsynth/mod.h"
+#include "fluidsynth/gen.h"
+#include "fluidsynth/voice.h"
+#include "fluidsynth/version.h"
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/audio.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/audio.h
new file mode 100644
index 0000000..e2c9bd1
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/audio.h
@@ -0,0 +1,70 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_AUDIO_H
+#define _FLUIDSYNTH_AUDIO_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file audio.h
+ * @brief Functions for audio driver output.
+ *
+ * Defines functions for creating audio driver output.  Use
+ * new_fluid_audio_driver() to create a new audio driver for a given synth
+ * and configuration settings.  The function new_fluid_audio_driver2() can be
+ * used if custom audio processing is desired before the audio is sent to the
+ * audio driver (although it is not as efficient).
+ */
+
+/**
+ * Callback function type used with new_fluid_audio_driver2() to allow for
+ * custom user audio processing before the audio is sent to the driver.  This
+ * function is responsible for rendering the audio to the buffers.
+ * @param data The user data parameter as passed to new_fluid_audio_driver2().
+ * @param len Length of the audio in frames.
+ * @param nin Count of buffers in 'in'
+ * @param in FIXME - Not used currently?
+ * @param nout Count of arrays in 'out' (i.e., channel count)
+ * @param out Output buffers, one for each channel
+ * @return Should return 0 on success, non-zero if an error occured.
+ */
+typedef int (*fluid_audio_func_t)(void* data, int len, 
+				 int nin, float** in, 
+				 int nout, float** out);
+
+FLUIDSYNTH_API fluid_audio_driver_t* new_fluid_audio_driver(fluid_settings_t* settings, 
+							 fluid_synth_t* synth);
+
+FLUIDSYNTH_API fluid_audio_driver_t* new_fluid_audio_driver2(fluid_settings_t* settings, 
+							  fluid_audio_func_t func,
+							  void* data);
+
+FLUIDSYNTH_API void delete_fluid_audio_driver(fluid_audio_driver_t* driver);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_AUDIO_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/event.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/event.h
new file mode 100644
index 0000000..086a878
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/event.h
@@ -0,0 +1,123 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_EVENT_H
+#define _FLUIDSYNTH_EVENT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file event.h
+ * @brief Sequencer event functions and defines.
+ *
+ * Functions and constants for creating/processing sequencer events.
+ */
+
+/**
+ * Sequencer event type enumeration.
+ */
+enum fluid_seq_event_type {
+  FLUID_SEQ_NOTE = 0,		/**< Note event (DOCME) */
+  FLUID_SEQ_NOTEON,		/**< Note on event */
+  FLUID_SEQ_NOTEOFF,		/**< Note off event */
+  FLUID_SEQ_ALLSOUNDSOFF,	/**< All sounds off event */
+  FLUID_SEQ_ALLNOTESOFF,	/**< All notes off event */
+  FLUID_SEQ_BANKSELECT,		/**< Bank select message */
+  FLUID_SEQ_PROGRAMCHANGE,	/**< Program change message */
+  FLUID_SEQ_PROGRAMSELECT,	/**< Program select message (DOCME) */
+  FLUID_SEQ_PITCHBEND,		/**< Pitch bend message */
+  FLUID_SEQ_PITCHWHHELSENS,	/**< Pitch wheel sensitivity set message */
+  FLUID_SEQ_MODULATION,		/**< Modulation controller event */
+  FLUID_SEQ_SUSTAIN,		/**< Sustain controller event */
+  FLUID_SEQ_CONTROLCHANGE,	/**< MIDI control change event */
+  FLUID_SEQ_PAN,		/**< Stereo pan set event */
+  FLUID_SEQ_VOLUME,		/**< Volume set event */
+  FLUID_SEQ_REVERBSEND,		/**< Reverb send set event */
+  FLUID_SEQ_CHORUSSEND,		/**< Chorus send set event */
+  FLUID_SEQ_TIMER,		/**< Timer event (DOCME) */
+  FLUID_SEQ_ANYCONTROLCHANGE,	/**< DOCME (used for remove_events only) */
+  FLUID_SEQ_LASTEVENT		/**< Defines the count of event enums */
+};
+
+/* Event alloc/free */
+FLUIDSYNTH_API fluid_event_t* new_fluid_event(void);
+FLUIDSYNTH_API void delete_fluid_event(fluid_event_t* evt);
+
+/* Initializing events */
+FLUIDSYNTH_API void fluid_event_set_source(fluid_event_t* evt, short src);
+FLUIDSYNTH_API void fluid_event_set_dest(fluid_event_t* evt, short dest);
+
+/* Timer events */
+FLUIDSYNTH_API void fluid_event_timer(fluid_event_t* evt, void* data);
+
+/* Note events */
+FLUIDSYNTH_API void fluid_event_note(fluid_event_t* evt, int channel, 
+				   short key, short vel, 
+				   unsigned int duration);
+
+FLUIDSYNTH_API void fluid_event_noteon(fluid_event_t* evt, int channel, short key, short vel);
+FLUIDSYNTH_API void fluid_event_noteoff(fluid_event_t* evt, int channel, short key);
+FLUIDSYNTH_API void fluid_event_all_sounds_off(fluid_event_t* evt, int channel);
+FLUIDSYNTH_API void fluid_event_all_notes_off(fluid_event_t* evt, int channel);
+
+/* Instrument selection */
+FLUIDSYNTH_API void fluid_event_bank_select(fluid_event_t* evt, int channel, short bank_num);
+FLUIDSYNTH_API void fluid_event_program_change(fluid_event_t* evt, int channel, short preset_num);
+FLUIDSYNTH_API void fluid_event_program_select(fluid_event_t* evt, int channel, unsigned int sfont_id, short bank_num, short preset_num);
+
+/* Real-time generic instrument controllers */
+FLUIDSYNTH_API 
+void fluid_event_control_change(fluid_event_t* evt, int channel, short control, short val);
+
+/* Real-time instrument controllers shortcuts */
+FLUIDSYNTH_API void fluid_event_pitch_bend(fluid_event_t* evt, int channel, int val);
+FLUIDSYNTH_API void fluid_event_pitch_wheelsens(fluid_event_t* evt, int channel, short val);
+FLUIDSYNTH_API void fluid_event_modulation(fluid_event_t* evt, int channel, short val);
+FLUIDSYNTH_API void fluid_event_sustain(fluid_event_t* evt, int channel, short val);
+FLUIDSYNTH_API void fluid_event_pan(fluid_event_t* evt, int channel, short val);
+FLUIDSYNTH_API void fluid_event_volume(fluid_event_t* evt, int channel, short val);
+FLUIDSYNTH_API void fluid_event_reverb_send(fluid_event_t* evt, int channel, short val);
+FLUIDSYNTH_API void fluid_event_chorus_send(fluid_event_t* evt, int channel, short val);
+
+/* Only for removing events */
+FLUIDSYNTH_API void fluid_event_any_control_change(fluid_event_t* evt, int channel);
+
+/* Accessing event data */
+FLUIDSYNTH_API int fluid_event_get_type(fluid_event_t* evt);
+FLUIDSYNTH_API short fluid_event_get_source(fluid_event_t* evt);
+FLUIDSYNTH_API short fluid_event_get_dest(fluid_event_t* evt);
+FLUIDSYNTH_API int fluid_event_get_channel(fluid_event_t* evt);
+FLUIDSYNTH_API short fluid_event_get_key(fluid_event_t* evt);
+FLUIDSYNTH_API short fluid_event_get_velocity(fluid_event_t* evt);
+FLUIDSYNTH_API short fluid_event_get_control(fluid_event_t* evt);
+FLUIDSYNTH_API short fluid_event_get_value(fluid_event_t* evt);
+FLUIDSYNTH_API short fluid_event_get_program(fluid_event_t* evt);
+FLUIDSYNTH_API void* fluid_event_get_data(fluid_event_t* evt);
+FLUIDSYNTH_API unsigned int fluid_event_get_duration(fluid_event_t* evt);
+FLUIDSYNTH_API short fluid_event_get_bank(fluid_event_t* evt);
+FLUIDSYNTH_API int fluid_event_get_pitch(fluid_event_t* evt);
+FLUIDSYNTH_API unsigned int fluid_event_get_sfont_id(fluid_event_t* evt);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FLUIDSYNTH_EVENT_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/gen.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/gen.h
new file mode 100644
index 0000000..055ea75
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/gen.h
@@ -0,0 +1,135 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_GEN_H
+#define _FLUIDSYNTH_GEN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file gen.h
+ * @brief Functions and defines for SoundFont generator effects.
+ */
+
+/**
+ * Generator (effect) numbers (Soundfont 2.01 specifications section 8.1.3)
+ */
+enum fluid_gen_type {
+  GEN_STARTADDROFS,		/**< Sample start address offset (0-32767) */
+  GEN_ENDADDROFS,		/**< Sample end address offset (-32767-0) */
+  GEN_STARTLOOPADDROFS,		/**< Sample loop start address offset (-32767-32767) */
+  GEN_ENDLOOPADDROFS,		/**< Sample loop end address offset (-32767-32767) */
+  GEN_STARTADDRCOARSEOFS,	/**< Sample start address coarse offset (X 32768) */
+  GEN_MODLFOTOPITCH,		/**< Modulation LFO to pitch */
+  GEN_VIBLFOTOPITCH,		/**< Vibrato LFO to pitch */
+  GEN_MODENVTOPITCH,		/**< Modulation envelope to pitch */
+  GEN_FILTERFC,			/**< Filter cutoff */
+  GEN_FILTERQ,			/**< Filter Q */
+  GEN_MODLFOTOFILTERFC,		/**< Modulation LFO to filter cutoff */
+  GEN_MODENVTOFILTERFC,		/**< Modulation envelope to filter cutoff */
+  GEN_ENDADDRCOARSEOFS,		/**< Sample end address coarse offset (X 32768) */
+  GEN_MODLFOTOVOL,		/**< Modulation LFO to volume */
+  GEN_UNUSED1,			/**< Unused */
+  GEN_CHORUSSEND,		/**< Chorus send amount */
+  GEN_REVERBSEND,		/**< Reverb send amount */
+  GEN_PAN,			/**< Stereo panning */
+  GEN_UNUSED2,			/**< Unused */
+  GEN_UNUSED3,			/**< Unused */
+  GEN_UNUSED4,			/**< Unused */
+  GEN_MODLFODELAY,		/**< Modulation LFO delay */
+  GEN_MODLFOFREQ,		/**< Modulation LFO frequency */
+  GEN_VIBLFODELAY,		/**< Vibrato LFO delay */
+  GEN_VIBLFOFREQ,		/**< Vibrato LFO frequency */
+  GEN_MODENVDELAY,		/**< Modulation envelope delay */
+  GEN_MODENVATTACK,		/**< Modulation envelope attack */
+  GEN_MODENVHOLD,		/**< Modulation envelope hold */
+  GEN_MODENVDECAY,		/**< Modulation envelope decay */
+  GEN_MODENVSUSTAIN,		/**< Modulation envelope sustain */
+  GEN_MODENVRELEASE,		/**< Modulation envelope release */
+  GEN_KEYTOMODENVHOLD,		/**< Key to modulation envelope hold */
+  GEN_KEYTOMODENVDECAY,		/**< Key to modulation envelope decay */
+  GEN_VOLENVDELAY,		/**< Volume envelope delay */
+  GEN_VOLENVATTACK,		/**< Volume envelope attack */
+  GEN_VOLENVHOLD,		/**< Volume envelope hold */
+  GEN_VOLENVDECAY,		/**< Volume envelope decay */
+  GEN_VOLENVSUSTAIN,		/**< Volume envelope sustain */
+  GEN_VOLENVRELEASE,		/**< Volume envelope release */
+  GEN_KEYTOVOLENVHOLD,		/**< Key to volume envelope hold */
+  GEN_KEYTOVOLENVDECAY,		/**< Key to volume envelope decay */
+  GEN_INSTRUMENT,		/**< Instrument ID (shouldn't be set by user) */
+  GEN_RESERVED1,		/**< Reserved */
+  GEN_KEYRANGE,			/**< MIDI note range */
+  GEN_VELRANGE,			/**< MIDI velocity range */
+  GEN_STARTLOOPADDRCOARSEOFS,	/**< Sample start loop address coarse offset (X 32768) */
+  GEN_KEYNUM,			/**< Fixed MIDI note number */
+  GEN_VELOCITY,			/**< Fixed MIDI velocity value */
+  GEN_ATTENUATION,		/**< Initial volume attenuation */
+  GEN_RESERVED2,		/**< Reserved */
+  GEN_ENDLOOPADDRCOARSEOFS,	/**< Sample end loop address coarse offset (X 32768) */
+  GEN_COARSETUNE,		/**< Coarse tuning */
+  GEN_FINETUNE,			/**< Fine tuning */
+  GEN_SAMPLEID,			/**< Sample ID (shouldn't be set by user) */
+  GEN_SAMPLEMODE,		/**< Sample mode flags */
+  GEN_RESERVED3,		/**< Reserved */
+  GEN_SCALETUNE,		/**< Scale tuning */
+  GEN_EXCLUSIVECLASS,		/**< Exclusive class number */
+  GEN_OVERRIDEROOTKEY,		/**< Sample root note override */
+
+  /* the initial pitch is not a "standard" generator. It is not
+   * mentioned in the list of generator in the SF2 specifications. It
+   * is used, however, as the destination for the default pitch wheel
+   * modulator. */
+  GEN_PITCH,			/**< Pitch (NOTE: Not a real SoundFont generator) */
+  GEN_LAST			/**< Value defines the count of generators (#fluid_gen_type) */
+};
+
+
+/**
+ * SoundFont generator structure.
+ */
+typedef struct _fluid_gen_t
+{
+  unsigned char flags; /**< Is the generator set or not (#fluid_gen_flags) */
+  double val;          /**< The nominal value */
+  double mod;          /**< Change by modulators */
+  double nrpn;         /**< Change by NRPN messages */
+} fluid_gen_t;
+
+/**
+ * Enum value for 'flags' field of #_fluid_gen_t (not really flags).
+ */
+enum fluid_gen_flags
+{
+  GEN_UNUSED,		/**< Generator value is not set */
+  GEN_SET,		/**< Generator value is set */
+  GEN_ABS_NRPN		/**< DOCME */
+};
+
+FLUIDSYNTH_API int fluid_gen_set_default_values(fluid_gen_t* gen);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FLUIDSYNTH_GEN_H */
+
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/log.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/log.h
new file mode 100644
index 0000000..51fdebe
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/log.h
@@ -0,0 +1,83 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_LOG_H
+#define _FLUIDSYNTH_LOG_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/**
+ * @file log.h
+ * @brief Logging interface
+ *
+ * The default logging function of the fluidsynth prints its messages
+ * to the stderr. The synthesizer uses five level of messages: #FLUID_PANIC,
+ * #FLUID_ERR, #FLUID_WARN, #FLUID_INFO, and #FLUID_DBG.
+ *
+ * A client application can install a new log function to handle the
+ * messages differently. In the following example, the application
+ * sets a callback function to display #FLUID_PANIC messages in a dialog,
+ * and ignores all other messages by setting the log function to
+ * NULL:
+ *
+ * DOCME (formatting)
+ * fluid_set_log_function(FLUID_PANIC, show_dialog, (void*) root_window);
+ * fluid_set_log_function(FLUID_ERR, NULL, NULL);
+ * fluid_set_log_function(FLUID_WARN, NULL, NULL);
+ * fluid_set_log_function(FLUID_DBG, NULL, NULL);
+ */
+
+/**
+ * FluidSynth log levels.
+ */
+enum fluid_log_level { 
+  FLUID_PANIC,   /**< The synth can't function correctly any more */
+  FLUID_ERR,     /**< Serious error occurred */
+  FLUID_WARN,    /**< Warning */
+  FLUID_INFO,    /**< Verbose informational messages */
+  FLUID_DBG,     /**< Debugging messages */
+  LAST_LOG_LEVEL
+};
+
+/**
+ * Log function handler callback type used by fluid_set_log_function().
+ * @param level Log level (#fluid_log_level)
+ * @param message Log message text
+ * @param data User data pointer supplied to fluid_set_log_function().
+ */
+typedef void (*fluid_log_function_t)(int level, char* message, void* data);
+
+FLUIDSYNTH_API 
+fluid_log_function_t fluid_set_log_function(int level, fluid_log_function_t fun, void* data);
+
+FLUIDSYNTH_API void fluid_default_log_function(int level, char* message, void* data);
+
+FLUIDSYNTH_API int fluid_log(int level, char * fmt, ...);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_LOG_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/midi.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/midi.h
new file mode 100644
index 0000000..822c56c
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/midi.h
@@ -0,0 +1,118 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_MIDI_H
+#define _FLUIDSYNTH_MIDI_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file midi.h
+ * @brief Functions for MIDI events, drivers and MIDI file playback.
+ */
+
+FLUIDSYNTH_API fluid_midi_event_t* new_fluid_midi_event(void);
+FLUIDSYNTH_API int delete_fluid_midi_event(fluid_midi_event_t* event);
+
+FLUIDSYNTH_API int fluid_midi_event_set_type(fluid_midi_event_t* evt, int type);
+FLUIDSYNTH_API int fluid_midi_event_get_type(fluid_midi_event_t* evt);
+FLUIDSYNTH_API int fluid_midi_event_set_channel(fluid_midi_event_t* evt, int chan);
+FLUIDSYNTH_API int fluid_midi_event_get_channel(fluid_midi_event_t* evt);
+FLUIDSYNTH_API int fluid_midi_event_get_key(fluid_midi_event_t* evt);
+FLUIDSYNTH_API int fluid_midi_event_set_key(fluid_midi_event_t* evt, int key);
+FLUIDSYNTH_API int fluid_midi_event_get_velocity(fluid_midi_event_t* evt);
+FLUIDSYNTH_API int fluid_midi_event_set_velocity(fluid_midi_event_t* evt, int vel);
+FLUIDSYNTH_API int fluid_midi_event_get_control(fluid_midi_event_t* evt);
+FLUIDSYNTH_API int fluid_midi_event_set_control(fluid_midi_event_t* evt, int ctrl);
+FLUIDSYNTH_API int fluid_midi_event_get_value(fluid_midi_event_t* evt);
+FLUIDSYNTH_API int fluid_midi_event_set_value(fluid_midi_event_t* evt, int val);
+FLUIDSYNTH_API int fluid_midi_event_get_program(fluid_midi_event_t* evt);
+FLUIDSYNTH_API int fluid_midi_event_set_program(fluid_midi_event_t* evt, int val);
+FLUIDSYNTH_API int fluid_midi_event_get_pitch(fluid_midi_event_t* evt);
+FLUIDSYNTH_API int fluid_midi_event_set_pitch(fluid_midi_event_t* evt, int val);
+
+
+/**
+ * Generic callback function for MIDI events.
+ * @param data User defined data pointer
+ * @param event The MIDI event
+ * @return DOCME
+ *
+ * Will be used between
+ * - MIDI driver and MIDI router
+ * - MIDI router and synth
+ * to communicate events.
+ * In the not-so-far future...
+ */
+typedef int (*handle_midi_event_func_t)(void* data, fluid_midi_event_t* event);
+
+/*
+ *  MIDI router
+ *
+ *  The MIDI handler forwards incoming MIDI events to the synthesizer
+ */
+
+FLUIDSYNTH_API fluid_midi_router_t* new_fluid_midi_router(fluid_settings_t* settings,
+						       handle_midi_event_func_t handler, 
+						       void* event_handler_data); 
+
+FLUIDSYNTH_API int delete_fluid_midi_router(fluid_midi_router_t* handler); 
+FLUIDSYNTH_API int fluid_midi_router_handle_midi_event(void* data, fluid_midi_event_t* event);
+FLUIDSYNTH_API int fluid_midi_dump_prerouter(void* data, fluid_midi_event_t* event); 
+FLUIDSYNTH_API int fluid_midi_dump_postrouter(void* data, fluid_midi_event_t* event); 
+
+/*
+ *  MIDI driver
+ *
+ *  The MIDI handler forwards incoming MIDI events to the synthesizer
+ */
+
+FLUIDSYNTH_API 
+fluid_midi_driver_t* new_fluid_midi_driver(fluid_settings_t* settings, 
+					 handle_midi_event_func_t handler, 
+					 void* event_handler_data);
+
+FLUIDSYNTH_API void delete_fluid_midi_driver(fluid_midi_driver_t* driver);
+
+
+
+/*
+ *  MIDI file player
+ *
+ *  The MIDI player allows you to play MIDI files with the FLUID Synth
+ */
+
+FLUIDSYNTH_API fluid_player_t* new_fluid_player(fluid_synth_t* synth);
+FLUIDSYNTH_API int delete_fluid_player(fluid_player_t* player);
+FLUIDSYNTH_API int fluid_player_add(fluid_player_t* player, char* midifile);
+FLUIDSYNTH_API int fluid_player_play(fluid_player_t* player);
+FLUIDSYNTH_API int fluid_player_stop(fluid_player_t* player);
+FLUIDSYNTH_API int fluid_player_join(fluid_player_t* player);
+FLUIDSYNTH_API int fluid_player_set_loop(fluid_player_t* player, int loop);
+FLUIDSYNTH_API int fluid_player_set_midi_tempo(fluid_player_t* player, int tempo);
+FLUIDSYNTH_API int fluid_player_set_bpm(fluid_player_t* player, int bpm);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_MIDI_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/misc.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/misc.h
new file mode 100644
index 0000000..b7d4fdf
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/misc.h
@@ -0,0 +1,65 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_MISC_H
+#define _FLUIDSYNTH_MISC_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ *
+ *  Utility functions
+ */
+
+/**
+ * fluid_is_soundfont returns 1 if the specified filename is a
+ * soundfont. It retuns 0 otherwise. The current implementation only
+ * checks for the "RIFF" header in the file. It is useful only to
+ * distinguish between SoundFonts and MIDI files.
+ */
+FLUIDSYNTH_API int fluid_is_soundfont(char* filename);
+
+/**
+ * fluid_is_midifile returns 1 if the specified filename is a MIDI
+ * file. It retuns 0 otherwise. The current implementation only checks
+ * for the "MThd" header in the file.  
+ */
+FLUIDSYNTH_API int fluid_is_midifile(char* filename);
+
+
+
+
+#ifdef WIN32
+/** Set the handle to the instance of the application on the Windows
+    platform. The handle is needed to open DirectSound. */
+FLUIDSYNTH_API void* fluid_get_hinstance(void);
+FLUIDSYNTH_API void fluid_set_hinstance(void* hinstance);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_MISC_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/mod.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/mod.h
new file mode 100644
index 0000000..5fe86cd
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/mod.h
@@ -0,0 +1,112 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_MOD_H
+#define _FLUIDSYNTH_MOD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  /* Modulator-related definitions */
+
+  /* Maximum number of modulators in a voice */
+#define FLUID_NUM_MOD           64
+
+  /*
+   *  fluid_mod_t
+   */
+struct _fluid_mod_t
+{
+  unsigned char dest;
+  unsigned char src1;
+  unsigned char flags1;
+  unsigned char src2;
+  unsigned char flags2;
+  double amount;
+  /* The 'next' field allows to link modulators into a list.  It is
+   * not used in fluid_voice.c, there each voice allocates memory for a
+   * fixed number of modulators.  Since there may be a huge number of
+   * different zones, this is more efficient.
+   */
+  fluid_mod_t * next;
+};
+
+/* Flags telling the polarity of a modulator.  Compare with SF2.01
+   section 8.2. Note: The numbers of the bits are different!  (for
+   example: in the flags of a SF modulator, the polarity bit is bit
+   nr. 9) */
+enum fluid_mod_flags
+{
+  FLUID_MOD_POSITIVE = 0,
+  FLUID_MOD_NEGATIVE = 1,
+  FLUID_MOD_UNIPOLAR = 0,
+  FLUID_MOD_BIPOLAR = 2,
+  FLUID_MOD_LINEAR = 0,
+  FLUID_MOD_CONCAVE = 4,
+  FLUID_MOD_CONVEX = 8,
+  FLUID_MOD_SWITCH = 12,
+  FLUID_MOD_GC = 0,
+  FLUID_MOD_CC = 16
+};
+
+/* Flags telling the source of a modulator.  This corresponds to
+ * SF2.01 section 8.2.1 */
+enum fluid_mod_src
+{
+  FLUID_MOD_NONE = 0,
+  FLUID_MOD_VELOCITY = 2,
+  FLUID_MOD_KEY = 3,
+  FLUID_MOD_KEYPRESSURE = 10,
+  FLUID_MOD_CHANNELPRESSURE = 13,
+  FLUID_MOD_PITCHWHEEL = 14,
+  FLUID_MOD_PITCHWHEELSENS = 16
+};
+
+/* Allocates memory for a new modulator */
+FLUIDSYNTH_API fluid_mod_t * fluid_mod_new(void);
+
+/* Frees the modulator */
+FLUIDSYNTH_API void fluid_mod_delete(fluid_mod_t * mod);
+
+
+FLUIDSYNTH_API void fluid_mod_set_source1(fluid_mod_t* mod, int src, int flags); 
+FLUIDSYNTH_API void fluid_mod_set_source2(fluid_mod_t* mod, int src, int flags); 
+FLUIDSYNTH_API void fluid_mod_set_dest(fluid_mod_t* mod, int dst); 
+FLUIDSYNTH_API void fluid_mod_set_amount(fluid_mod_t* mod, double amount); 
+
+FLUIDSYNTH_API int fluid_mod_get_source1(fluid_mod_t* mod);
+FLUIDSYNTH_API int fluid_mod_get_flags1(fluid_mod_t* mod);
+FLUIDSYNTH_API int fluid_mod_get_source2(fluid_mod_t* mod);
+FLUIDSYNTH_API int fluid_mod_get_flags2(fluid_mod_t* mod);
+FLUIDSYNTH_API int fluid_mod_get_dest(fluid_mod_t* mod);
+FLUIDSYNTH_API double fluid_mod_get_amount(fluid_mod_t* mod);
+
+
+/* Determines, if two modulators are 'identical' (all parameters
+   except the amount match) */
+FLUIDSYNTH_API int fluid_mod_test_identity(fluid_mod_t * mod1, fluid_mod_t * mod2);
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FLUIDSYNTH_MOD_H */
+
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/ramsfont.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/ramsfont.h
new file mode 100644
index 0000000..75a8d67
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/ramsfont.h
@@ -0,0 +1,113 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_RAMSFONT_H
+#define _FLUIDSYNTH_RAMSFONT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/********************************************************************************/
+/********************************************************************************/
+/* ram soundfonts:
+	October 2002 - Antoine Schmitt
+
+	ram soundfonts live in ram. The samples are loaded from files
+	or from RAM.  A minimal API manages a soundFont structure,
+	with presets, each preset having only one preset-zone, which
+	instrument has potentially many instrument-zones.  No global
+	zones, and nor generator nor modulator other than the default
+	ones are permitted.  This may be extensible in the future.
+*/
+/********************************************************************************/
+/********************************************************************************/
+
+/* 
+   We are not using the sfloader protocol, as we need more arguments
+   than what it provides.
+*/
+
+/** Creates a fluid_sfont_t wrapping an fluid_ramsfont_t */
+FLUIDSYNTH_API fluid_sfont_t* fluid_ramsfont_create_sfont(void);
+
+/***********************
+ * ramsfont specific API
+ ***********************/
+FLUIDSYNTH_API int fluid_ramsfont_set_name(fluid_ramsfont_t* sfont, char * name);
+
+/* Creates one instrument zone for the sample inside the preset defined
+ *     by bank/num
+ *     \returns 0 if success
+ */
+FLUIDSYNTH_API 
+int fluid_ramsfont_add_izone(fluid_ramsfont_t* sfont,
+				unsigned int bank, unsigned int num, fluid_sample_t* sample,
+				int lokey, int hikey);
+				
+/* Removes the instrument zone corresponding to bank/num and to the sample
+ *     \returns 0 if success
+ */
+FLUIDSYNTH_API
+int fluid_ramsfont_remove_izone(fluid_ramsfont_t* sfont,
+				unsigned int bank, unsigned int num, fluid_sample_t* sample);
+
+/* Sets a generator on an instrument zone
+ *     \returns 0 if success
+ */
+FLUIDSYNTH_API
+int fluid_ramsfont_izone_set_gen(fluid_ramsfont_t* sfont,
+				unsigned int bank, unsigned int num, fluid_sample_t* sample,
+				int gen_type, float value);
+		
+/* Utility : sets the loop start/end values
+ *     \on = 0 or 1; if 0, loopstart and loopend are not used
+ *     \loopstart and loopend are floats, in frames
+ *     \loopstart is counted from frame 0
+ *     \loopend is counted from the last frame, thus is < 0
+ *     \returns 0 if success
+ */
+FLUIDSYNTH_API
+int fluid_ramsfont_izone_set_loop(fluid_ramsfont_t* sfont,
+				unsigned int bank, unsigned int num, fluid_sample_t* sample,
+				int on, float loopstart, float loopend);
+
+/***************************************
+ * sample_t specific API for ramsfont
+ ***************************************/
+FLUIDSYNTH_API fluid_sample_t* new_fluid_ramsample(void);
+FLUIDSYNTH_API int delete_fluid_ramsample(fluid_sample_t* sample);
+FLUIDSYNTH_API int fluid_sample_set_name(fluid_sample_t* sample, char * name);
+
+/* Sets the sound data of the sample
+ *     Warning : if copy_data is FALSE, data should have 8 unused frames at start
+ *     and 8 unused frames at the end.
+ */
+FLUIDSYNTH_API 
+int fluid_sample_set_sound_data(fluid_sample_t* sample, short *data, 
+			       unsigned int nbframes, short copy_data, int rootkey);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_RAMSFONT_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/seq.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/seq.h
new file mode 100644
index 0000000..25ab059
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/seq.h
@@ -0,0 +1,109 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_SEQ_H
+#define _FLUIDSYNTH_SEQ_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef void (*fluid_event_callback_t)(unsigned int time, fluid_event_t* event, 
+				      fluid_sequencer_t* seq, void* data);
+
+
+/** Allocate a new sequencer structure */
+FLUIDSYNTH_API fluid_sequencer_t* new_fluid_sequencer(void);
+
+/** Free the sequencer structure */
+FLUIDSYNTH_API void delete_fluid_sequencer(fluid_sequencer_t* seq);
+
+/** clients can be sources or destinations of events. These functions ensure a unique ID for any
+source or dest, for filtering purposes.
+sources only dont need to register a callback.
+*/
+
+/** Register a client. The registration returns a unique client ID (-1 if error) */
+FLUIDSYNTH_API 
+short fluid_sequencer_register_client(fluid_sequencer_t* seq, char* name, 
+				     fluid_event_callback_t callback, void* data);
+
+/** Unregister a previously registered client. */
+FLUIDSYNTH_API void fluid_sequencer_unregister_client(fluid_sequencer_t* seq, short id);
+
+/** Returns the number of register clients. */
+FLUIDSYNTH_API int fluid_sequencer_count_clients(fluid_sequencer_t* seq);
+
+/** Returns the id of a registered client (-1 if non existing) */
+FLUIDSYNTH_API short fluid_sequencer_get_client_id(fluid_sequencer_t* seq, int index);
+
+/** Returns the name of a registered client, given its id. */
+FLUIDSYNTH_API char* fluid_sequencer_get_client_name(fluid_sequencer_t* seq, int id);
+
+/** Returns 1 if client is a destination (has a callback) */
+FLUIDSYNTH_API int fluid_sequencer_client_is_dest(fluid_sequencer_t* seq, int id);
+
+
+
+/** Sending an event immediately. */
+FLUIDSYNTH_API void fluid_sequencer_send_now(fluid_sequencer_t* seq, fluid_event_t* evt);
+
+
+/** Schedule an event for later sending. If absolute is 0, the time of
+    the event will be offset with the current tick of the
+    sequencer. If absolute is different from 0, the time will assumed
+    to be absolute (starting from the creation of the sequencer). 
+    MAKES A COPY */
+FLUIDSYNTH_API 
+int fluid_sequencer_send_at(fluid_sequencer_t* seq, fluid_event_t* evt, 
+			   unsigned int time, int absolute);
+
+/** Remove events from the event queue. The events can be filtered on
+    the source, the destination, and the type of the event. To avoid
+    filtering, set either source, dest, or type to -1.  */
+FLUIDSYNTH_API 
+void fluid_sequencer_remove_events(fluid_sequencer_t* seq, short source, short dest, int type);
+
+
+/** Get the current tick */
+FLUIDSYNTH_API unsigned int fluid_sequencer_get_tick(fluid_sequencer_t* seq);
+
+/** Set the conversion from tick to absolute time. scale should be
+    expressed as ticks per second. */
+FLUIDSYNTH_API void fluid_sequencer_set_time_scale(fluid_sequencer_t* seq, double scale);
+
+/** Set the conversion from tick to absolute time (ticks per
+    second). */
+FLUIDSYNTH_API double fluid_sequencer_get_time_scale(fluid_sequencer_t* seq);
+
+// compile in internal traceing functions
+#define FLUID_SEQ_WITH_TRACE 0
+
+#if FLUID_SEQ_WITH_TRACE
+FLUIDSYNTH_API char * fluid_seq_gettrace(fluid_sequencer_t* seq);
+FLUIDSYNTH_API void fluid_seq_cleartrace(fluid_sequencer_t* seq);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_SEQ_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/seqbind.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/seqbind.h
new file mode 100644
index 0000000..09fb46a
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/seqbind.h
@@ -0,0 +1,44 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_SEQBIND_H
+#define _FLUIDSYNTH_SEQBIND_H
+
+#include "fluidsynth/seq.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  /** registers fluidsynth as a client of the given sequencer.
+      The fluidsynth is registered with the name "fluidsynth".
+	
+      \returns the fluidsynth destID.
+  */
+FLUIDSYNTH_API 
+short fluid_sequencer_register_fluidsynth(fluid_sequencer_t* seq, fluid_synth_t* synth);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FLUIDSYNTH_SEQBIND_H */
+
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/settings.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/settings.h
new file mode 100644
index 0000000..61f0431
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/settings.h
@@ -0,0 +1,223 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_SETTINGS_H
+#define _FLUIDSYNTH_SETTINGS_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  /**
+   *
+   *    Synthesizer settings
+   *    
+   *     
+   *     The create a synthesizer object you will have to specify its
+   *     settings. These settings are stored in the structure below. 
+
+   *     void my_synthesizer() 
+   *     {
+   *       fluid_settings_t* settings;
+   *       fluid_synth_t* synth;
+   *       fluid_audio_driver_t* adriver;
+   *
+   *
+   *       settings = new_fluid_settings();
+   *       fluid_settings_setstr(settings, "audio.driver", "alsa");
+   *       // ... change settings ... 
+   *       synth = new_fluid_synth(settings);
+   *       adriver = new_fluid_audio_driver(settings, synth);
+   *
+   *       ...
+   *
+   *     }
+   * 
+   *
+   */
+
+
+
+
+/* Hint FLUID_HINT_BOUNDED_BELOW indicates that the LowerBound field
+   of the FLUID_PortRangeHint should be considered meaningful. The
+   value in this field should be considered the (inclusive) lower
+   bound of the valid range. If FLUID_HINT_SAMPLE_RATE is also
+   specified then the value of LowerBound should be multiplied by the
+   sample rate. */
+#define FLUID_HINT_BOUNDED_BELOW   0x1
+
+/* Hint FLUID_HINT_BOUNDED_ABOVE indicates that the UpperBound field
+   of the FLUID_PortRangeHint should be considered meaningful. The
+   value in this field should be considered the (inclusive) upper
+   bound of the valid range. If FLUID_HINT_SAMPLE_RATE is also
+   specified then the value of UpperBound should be multiplied by the
+   sample rate. */
+#define FLUID_HINT_BOUNDED_ABOVE   0x2
+
+/* Hint FLUID_HINT_TOGGLED indicates that the data item should be
+   considered a Boolean toggle. Data less than or equal to zero should
+   be considered `off' or `false,' and data above zero should be
+   considered `on' or `true.' FLUID_HINT_TOGGLED may not be used in
+   conjunction with any other hint except FLUID_HINT_DEFAULT_0 or
+   FLUID_HINT_DEFAULT_1. */
+#define FLUID_HINT_TOGGLED         0x4
+
+/* Hint FLUID_HINT_SAMPLE_RATE indicates that any bounds specified
+   should be interpreted as multiples of the sample rate. For
+   instance, a frequency range from 0Hz to the Nyquist frequency (half
+   the sample rate) could be requested by this hint in conjunction
+   with LowerBound = 0 and UpperBound = 0.5. Hosts that support bounds
+   at all must support this hint to retain meaning. */
+#define FLUID_HINT_SAMPLE_RATE     0x8
+
+/* Hint FLUID_HINT_LOGARITHMIC indicates that it is likely that the
+   user will find it more intuitive to view values using a logarithmic
+   scale. This is particularly useful for frequencies and gains. */
+#define FLUID_HINT_LOGARITHMIC     0x10
+
+/* Hint FLUID_HINT_INTEGER indicates that a user interface would
+   probably wish to provide a stepped control taking only integer
+   values. Any bounds set should be slightly wider than the actual
+   integer range required to avoid floating point rounding errors. For
+   instance, the integer set {0,1,2,3} might be described as [-0.1,
+   3.1]. */
+#define FLUID_HINT_INTEGER         0x20
+
+
+#define FLUID_HINT_FILENAME        0x01
+#define FLUID_HINT_OPTIONLIST      0x02
+
+
+
+enum fluid_types_enum {
+  FLUID_NO_TYPE = -1,
+  FLUID_NUM_TYPE,
+  FLUID_INT_TYPE,
+  FLUID_STR_TYPE,
+  FLUID_SET_TYPE
+};
+
+
+FLUIDSYNTH_API fluid_settings_t* new_fluid_settings(void);
+FLUIDSYNTH_API void delete_fluid_settings(fluid_settings_t* settings);
+
+
+
+FLUIDSYNTH_API 
+int fluid_settings_get_type(fluid_settings_t* settings, char* name);
+
+FLUIDSYNTH_API 
+int fluid_settings_get_hints(fluid_settings_t* settings, char* name);
+
+/** Returns whether the setting is changeable in real-time. */
+FLUIDSYNTH_API int fluid_settings_is_realtime(fluid_settings_t* settings, char* name);
+
+
+/** returns 1 if the value has been set, 0 otherwise */
+FLUIDSYNTH_API 
+int fluid_settings_setstr(fluid_settings_t* settings, char* name, char* str);
+
+/** 
+    Get the value of a string setting. If the value does not exists,
+    'str' is set to NULL. Otherwise, 'str' will point to the
+    value. The application does not own the returned value. Instead,
+    the application should make a copy of the value if it needs it
+    later.
+
+   \returns 1 if the value exists, 0 otherwise 
+*/
+FLUIDSYNTH_API 
+int fluid_settings_getstr(fluid_settings_t* settings, char* name, char** str);
+
+/** Get the default value of a string setting. */
+FLUIDSYNTH_API 
+char* fluid_settings_getstr_default(fluid_settings_t* settings, char* name);
+
+/** Get the value of a numeric setting. 
+
+   \returns 1 if the value exists and is equal to 'value', 0
+    otherwise 
+*/
+FLUIDSYNTH_API 
+int fluid_settings_str_equal(fluid_settings_t* settings, char* name, char* value);
+
+
+/** returns 1 if the value has been set, 0 otherwise */
+FLUIDSYNTH_API 
+int fluid_settings_setnum(fluid_settings_t* settings, char* name, double val);
+
+/** returns 1 if the value exists, 0 otherwise */
+FLUIDSYNTH_API 
+int fluid_settings_getnum(fluid_settings_t* settings, char* name, double* val);
+
+/** Get the default value of a string setting. */
+FLUIDSYNTH_API 
+double fluid_settings_getnum_default(fluid_settings_t* settings, char* name);
+  
+/** Get the range of values of a numeric settings. */
+FLUIDSYNTH_API 
+void fluid_settings_getnum_range(fluid_settings_t* settings, char* name, 
+				double* min, double* max);
+
+
+/** returns 1 if the value has been set, 0 otherwise */
+FLUIDSYNTH_API 
+int fluid_settings_setint(fluid_settings_t* settings, char* name, int val);
+
+/** returns 1 if the value exists, 0 otherwise */
+FLUIDSYNTH_API 
+int fluid_settings_getint(fluid_settings_t* settings, char* name, int* val);
+
+/** Get the default value of a string setting. */
+FLUIDSYNTH_API 
+int fluid_settings_getint_default(fluid_settings_t* settings, char* name);
+  
+/** Get the range of values of a numeric settings. */
+FLUIDSYNTH_API 
+void fluid_settings_getint_range(fluid_settings_t* settings, char* name, 
+				int* min, int* max);
+
+
+
+typedef void (*fluid_settings_foreach_option_t)(void* data, char* name, char* option);
+
+
+
+FLUIDSYNTH_API 
+void fluid_settings_foreach_option(fluid_settings_t* settings, 
+				  char* name, void* data, 
+				  fluid_settings_foreach_option_t func);
+
+
+typedef void (*fluid_settings_foreach_t)(void* data, char* s, int type);
+
+FLUIDSYNTH_API
+void fluid_settings_foreach(fluid_settings_t* settings, void* data, 
+			   fluid_settings_foreach_t func);
+
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_SETTINGS_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/sfont.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/sfont.h
new file mode 100644
index 0000000..84020ba
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/sfont.h
@@ -0,0 +1,193 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_SFONT_H
+#define _FLUIDSYNTH_SFONT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+  /**
+   *
+   *   SoundFont plugins
+   *
+   *    It is possible to add new SoundFont loaders to the
+   *    synthesizer. The API uses a couple of "interfaces" (structures
+   *    with callback functions): fluid_sfloader_t, fluid_sfont_t, and
+   *    fluid_preset_t. 
+   *
+   *    To add a new SoundFont loader to the synthesizer, call
+   *    fluid_synth_add_sfloader() and pass a pointer to an
+   *    fluid_sfloader_t structure. The important callback function in
+   *    this structure is "load", which should try to load a file and
+   *    returns a fluid_sfont_t structure, or NULL if it fails.
+   *
+   *    The fluid_sfont_t structure contains a callback to obtain the
+   *    name of the soundfont. It contains two functions to iterate
+   *    though the contained presets, and one function to obtain a
+   *    preset corresponding to a bank and preset number. This
+   *    function should return an fluid_preset_t structure.
+   *
+   *    The fluid_preset_t structure contains some functions to obtain
+   *    information from the preset (name, bank, number). The most
+   *    important callback is the noteon function. The noteon function
+   *    should call fluid_synth_alloc_voice() for every sample that has
+   *    to be played. fluid_synth_alloc_voice() expects a pointer to a
+   *    fluid_sample_t structure and returns a pointer to the opaque
+   *    fluid_voice_t structure. To set or increments the values of a
+   *    generator, use fluid_voice_gen_{set,incr}. When you are
+   *    finished initializing the voice call fluid_voice_start() to
+   *    start playing the synthesis voice.
+   * */
+
+  enum {
+    FLUID_PRESET_SELECTED,
+    FLUID_PRESET_UNSELECTED,
+    FLUID_SAMPLE_DONE
+  };
+
+
+/*
+ * fluid_sfloader_t
+ */
+
+struct _fluid_sfloader_t {
+  /** Private data */
+  void* data;
+
+  /** The free must free the memory allocated for the loader in
+   * addition to any private data. It should return 0 if no error
+   * occured, non-zero otherwise.*/
+  int (*free)(fluid_sfloader_t* loader);
+
+  /** Load a file. Returns NULL if an error occured. */
+  fluid_sfont_t* (*load)(fluid_sfloader_t* loader, const char* filename);
+};
+
+
+/*
+ * fluid_sfont_t
+ */
+
+struct _fluid_sfont_t {
+  void* data;
+  unsigned int id;
+
+  /** The 'free' callback function should return 0 when it was able to
+      free all resources. It should return a non-zero value if some of
+      the samples could not be freed because they are still in use. */
+  int (*free)(fluid_sfont_t* sfont);
+
+  /** Return the name of the sfont */
+  char* (*get_name)(fluid_sfont_t* sfont);
+
+  /** Return the preset with the specified bank and preset number. All
+   *  the fields, including the 'sfont' field, should * be filled
+   *  in. If the preset cannot be found, the function returns NULL. */
+  fluid_preset_t* (*get_preset)(fluid_sfont_t* sfont, unsigned int bank, unsigned int prenum);
+
+  void (*iteration_start)(fluid_sfont_t* sfont);
+
+  /* return 0 when no more presets are available, 1 otherwise */
+  int (*iteration_next)(fluid_sfont_t* sfont, fluid_preset_t* preset);
+};
+
+#define fluid_sfont_get_id(_sf) ((_sf)->id)
+
+
+/*
+ * fluid_preset_t 
+ */
+
+struct _fluid_preset_t {
+  void* data;
+  fluid_sfont_t* sfont;
+  int (*free)(fluid_preset_t* preset);
+  char* (*get_name)(fluid_preset_t* preset);
+  int (*get_banknum)(fluid_preset_t* preset);
+  int (*get_num)(fluid_preset_t* preset);
+
+  /** handle a noteon event. Returns 0 if no error occured. */
+  int (*noteon)(fluid_preset_t* preset, fluid_synth_t* synth, int chan, int key, int vel);
+
+  /** Implement this function if the preset needs to be notified about
+      preset select and unselect events. */
+  int (*notify)(fluid_preset_t* preset, int reason, int chan);
+};
+
+
+/*
+ * fluid_sample_t
+ */
+
+struct _fluid_sample_t
+{
+  char name[21];
+  unsigned int start;
+  unsigned int end;	/* Note: Index of last valid sample point (contrary to SF spec) */
+  unsigned int loopstart;
+  unsigned int loopend;	/* Note: first point following the loop (superimposed on loopstart) */
+  unsigned int samplerate;
+  int origpitch;
+  int pitchadj;
+  int sampletype;
+  int valid;
+  short* data;
+
+  /** The amplitude, that will lower the level of the sample's loop to
+      the noise floor. Needed for note turnoff optimization, will be
+      filled out automatically */
+  /* Set this to zero, when submitting a new sample. */
+  int amplitude_that_reaches_noise_floor_is_valid; 
+  double amplitude_that_reaches_noise_floor;
+
+  /** Count the number of playing voices that use this sample. */
+  unsigned int refcount;
+
+  /** Implement this function if the sample or SoundFont needs to be
+      notified when the sample is no longer used. */
+  int (*notify)(fluid_sample_t* sample, int reason);
+
+  /** Pointer to SoundFont specific data */
+  void* userdata;
+};
+
+
+#define fluid_sample_refcount(_sample) ((_sample)->refcount)
+
+
+/** Sample types */
+
+#define FLUID_SAMPLETYPE_MONO	1
+#define FLUID_SAMPLETYPE_RIGHT	2
+#define FLUID_SAMPLETYPE_LEFT	4
+#define FLUID_SAMPLETYPE_LINKED	8
+#define FLUID_SAMPLETYPE_ROM	0x8000
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_SFONT_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/shell.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/shell.h
new file mode 100644
index 0000000..58151a8
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/shell.h
@@ -0,0 +1,137 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_SHELL_H
+#define _FLUIDSYNTH_SHELL_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+ *
+ *   Shell interface
+ *
+ *   The shell interface allows you to send simple textual commands to
+ *   the synthesizer, to parse a command file, or to read commands
+ *   from the stdin or other input streams.
+ *
+ *   To find the list of currently supported commands, please check the
+ *   fluid_cmd.c file.
+ *   
+ */
+
+FLUIDSYNTH_API fluid_istream_t fluid_get_stdin(void);
+FLUIDSYNTH_API fluid_ostream_t fluid_get_stdout(void);
+
+FLUIDSYNTH_API char* fluid_get_userconf(char* buf, int len);
+FLUIDSYNTH_API char* fluid_get_sysconf(char* buf, int len);
+
+
+/** The command structure */
+
+typedef int (*fluid_cmd_func_t)(void* data, int ac, char** av, fluid_ostream_t out);  
+
+typedef struct {
+  char* name;                           /** The name of the command, as typed in in the shell */
+  char* topic;                          /** The help topic group of this command */ 
+  fluid_cmd_func_t handler;              /** Pointer to the handler for this command */
+  void* data;                           /** Pointer to the user data */
+  char* help;                           /** A help string */
+} fluid_cmd_t;
+
+
+/** The command handler */
+
+/**
+    Create a new command handler. If the synth object passed as
+    argument is not NULL, the handler will add all the default
+    synthesizer commands to the command list.
+
+    \param synth The synthesizer object
+    \returns A new command handler
+*/
+FLUIDSYNTH_API 
+fluid_cmd_handler_t* new_fluid_cmd_handler(fluid_synth_t* synth);
+
+FLUIDSYNTH_API 
+void delete_fluid_cmd_handler(fluid_cmd_handler_t* handler);
+
+FLUIDSYNTH_API 
+void fluid_cmd_handler_set_synth(fluid_cmd_handler_t* handler, fluid_synth_t* synth);
+
+/**
+    Register a new command to the handler. The handler makes a private
+    copy of the 'cmd' structure passed as argument.
+
+    \param handler A pointer to the command handler
+    \param cmd A pointer to the command structure
+    \returns 0 if the command was inserted, non-zero if error
+*/
+FLUIDSYNTH_API 
+int fluid_cmd_handler_register(fluid_cmd_handler_t* handler, fluid_cmd_t* cmd);
+
+FLUIDSYNTH_API 
+int fluid_cmd_handler_unregister(fluid_cmd_handler_t* handler, char* cmd);
+
+
+/** Command function */
+
+FLUIDSYNTH_API 
+int fluid_command(fluid_cmd_handler_t* handler, char* cmd, fluid_ostream_t out);
+
+FLUIDSYNTH_API 
+int fluid_source(fluid_cmd_handler_t* handler, char* filename);
+
+FLUIDSYNTH_API 
+void fluid_usershell(fluid_settings_t* settings, fluid_cmd_handler_t* handler);
+
+
+/** Shell */
+
+FLUIDSYNTH_API 
+fluid_shell_t* new_fluid_shell(fluid_settings_t* settings, fluid_cmd_handler_t* handler,
+			     fluid_istream_t in, fluid_ostream_t out, int thread);
+
+FLUIDSYNTH_API void delete_fluid_shell(fluid_shell_t* shell);
+
+
+
+/** TCP/IP server */
+
+typedef fluid_cmd_handler_t* (*fluid_server_newclient_func_t)(void* data, char* addr);
+
+FLUIDSYNTH_API 
+fluid_server_t* new_fluid_server(fluid_settings_t* settings, 
+			       fluid_server_newclient_func_t func,
+			       void* data);
+
+FLUIDSYNTH_API void delete_fluid_server(fluid_server_t* server);
+
+FLUIDSYNTH_API int fluid_server_join(fluid_server_t* server);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_SHELL_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/synth.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/synth.h
new file mode 100644
index 0000000..912e4c5
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/synth.h
@@ -0,0 +1,700 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_SYNTH_H
+#define _FLUIDSYNTH_SYNTH_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+  /**   Embedded synthesizer
+   *  
+   *    You create a new synthesizer with new_fluid_synth() and you destroy
+   *    if with delete_fluid_synth(). Use the settings structure to specify
+   *    the synthesizer characteristics. 
+   *
+   *    You have to load a SoundFont in order to hear any sound. For that
+   *    you use the fluid_synth_sfload() function.
+   *
+   *    You can use the audio driver functions described below to open
+   *    the audio device and create a background audio thread.
+   *  
+   *    The API for sending MIDI events is probably what you expect:
+   *    fluid_synth_noteon(), fluid_synth_noteoff(), ...
+   * 
+   */
+
+
+  /** Creates a new synthesizer object. 
+   *
+   *  Creates a new synthesizer object. As soon as the synthesizer is
+   *  created, it will start playing.  
+   *
+   * \param settings a pointer to a settings structure
+   * \return a newly allocated synthesizer or NULL in case of error
+   */
+FLUIDSYNTH_API fluid_synth_t* new_fluid_synth(fluid_settings_t* settings);
+
+
+  /** 
+   * Deletes the synthesizer previously created with new_fluid_synth.
+   *
+   * \param synth the synthesizer object
+   * \return 0 if no error occured, -1 otherwise 
+   */
+FLUIDSYNTH_API int delete_fluid_synth(fluid_synth_t* synth);
+
+
+  /** Get a reference to the settings of the synthesizer.
+   *
+   * \param synth the synthesizer object
+   * \return pointer to the settings
+   */
+FLUIDSYNTH_API fluid_settings_t* fluid_synth_get_settings(fluid_synth_t* synth);
+
+
+  /*
+   * 
+   * MIDI channel messages 
+   *
+   */
+
+  /** Send a noteon message. Returns 0 if no error occurred, -1 otherwise. */
+FLUIDSYNTH_API int fluid_synth_noteon(fluid_synth_t* synth, int chan, int key, int vel);
+
+  /** Send a noteoff message. Returns 0 if no error occurred, -1 otherwise.  */
+FLUIDSYNTH_API int fluid_synth_noteoff(fluid_synth_t* synth, int chan, int key);
+
+  /** Send a control change message. Returns 0 if no error occurred, -1 otherwise.  */
+FLUIDSYNTH_API int fluid_synth_cc(fluid_synth_t* synth, int chan, int ctrl, int val);
+
+  /** Get a control value. Returns 0 if no error occurred, -1 otherwise.  */
+FLUIDSYNTH_API int fluid_synth_get_cc(fluid_synth_t* synth, int chan, int ctrl, int* pval);
+
+  /** Send a pitch bend message. Returns 0 if no error occurred, -1 otherwise.  */
+FLUIDSYNTH_API int fluid_synth_pitch_bend(fluid_synth_t* synth, int chan, int val);
+
+  /** Get the pitch bend value. Returns 0 if no error occurred, -1 otherwise. */
+FLUIDSYNTH_API 
+int fluid_synth_get_pitch_bend(fluid_synth_t* synth, int chan, int* ppitch_bend);
+
+  /** Set the pitch wheel sensitivity. Returns 0 if no error occurred, -1 otherwise. */
+FLUIDSYNTH_API int fluid_synth_pitch_wheel_sens(fluid_synth_t* synth, int chan, int val);
+
+  /** Get the pitch wheel sensitivity. Returns 0 if no error occurred, -1 otherwise. */
+FLUIDSYNTH_API int fluid_synth_get_pitch_wheel_sens(fluid_synth_t* synth, int chan, int* pval);
+
+  /** Send a program change message. Returns 0 if no error occurred, -1 otherwise. */
+FLUIDSYNTH_API int fluid_synth_program_change(fluid_synth_t* synth, int chan, int program);
+
+  /** Select a bank. Returns 0 if no error occurred, -1 otherwise. */
+FLUIDSYNTH_API 
+int fluid_synth_bank_select(fluid_synth_t* synth, int chan, unsigned int bank);
+
+  /** Select a sfont. Returns 0 if no error occurred, -1 otherwise. */
+FLUIDSYNTH_API 
+int fluid_synth_sfont_select(fluid_synth_t* synth, int chan, unsigned int sfont_id);
+
+  /** Select a preset for a channel. The preset is specified by the
+      SoundFont ID, the bank number, and the preset number. This
+      allows any preset to be selected and circumvents preset masking
+      due to previously loaded SoundFonts on the SoundFont stack.
+
+      \param synth The synthesizer
+      \param chan The channel on which to set the preset
+      \param sfont_id The ID of the SoundFont 
+      \param bank_num The bank number
+      \param preset_num The preset number
+      \return 0 if no errors occured, -1 otherwise
+  */
+FLUIDSYNTH_API 
+int fluid_synth_program_select(fluid_synth_t* synth, int chan, 
+			      unsigned int sfont_id, 
+			      unsigned int bank_num, 
+			      unsigned int preset_num);
+
+  /** Returns the program, bank, and SoundFont number of the preset on
+      a given channel. Returns 0 if no error occurred, -1 otherwise. */
+FLUIDSYNTH_API 
+int fluid_synth_get_program(fluid_synth_t* synth, int chan, 
+			   unsigned int* sfont_id, 
+			   unsigned int* bank_num, 
+			   unsigned int* preset_num);
+
+  /** Send a bank select and a program change to every channel to
+   *  reinitialize the preset of the channel. This function is useful
+   *  mainly after a SoundFont has been loaded, unloaded or
+   *  reloaded. . Returns 0 if no error occurred, -1 otherwise. */
+FLUIDSYNTH_API int fluid_synth_program_reset(fluid_synth_t* synth);
+
+  /** Send a reset. A reset turns all the notes off and resets the
+      controller values. */
+FLUIDSYNTH_API int fluid_synth_system_reset(fluid_synth_t* synth);
+
+
+  /*
+   * 
+   * Low level access 
+   *
+   */
+
+  /** Create and start voices using a preset. The id passed as
+   * argument will be used as the voice group id.  */
+FLUIDSYNTH_API int fluid_synth_start(fluid_synth_t* synth, unsigned int id, 
+				     fluid_preset_t* preset, int audio_chan, 
+				     int midi_chan, int key, int vel);
+
+  /** Stop the voices in the voice group defined by id. */
+FLUIDSYNTH_API int fluid_synth_stop(fluid_synth_t* synth, unsigned int id);
+
+  /** Change the value of a generator of the voices in the voice group
+   * defined by id. */
+/* FLUIDSYNTH_API int fluid_synth_ctrl(fluid_synth_t* synth, int id,  */
+/* 				    int gen, float value,  */
+/* 				    int absolute, int normalized); */
+
+
+  /*
+   * 
+   * SoundFont management 
+   *
+   */
+
+  /** Loads a SoundFont file and creates a new SoundFont. The newly
+      loaded SoundFont will be put on top of the SoundFont
+      stack. Presets are searched starting from the SoundFont on the
+      top of the stack, working the way down the stack until a preset
+      is found.
+
+      \param synth The synthesizer object
+      \param filename The file name
+      \param reset_presets If non-zero, the presets on the channels will be reset
+      \returns The ID of the loaded SoundFont, or -1 in case of error
+  */
+FLUIDSYNTH_API 
+int fluid_synth_sfload(fluid_synth_t* synth, const char* filename, int reset_presets);
+
+  /** Reload a SoundFont. The reloaded SoundFont retains its ID and
+      index on the stack.
+
+      \param synth The synthesizer object
+      \param id The id of the SoundFont
+      \returns The ID of the loaded SoundFont, or -1 in case of error
+  */
+FLUIDSYNTH_API int fluid_synth_sfreload(fluid_synth_t* synth, unsigned int id);
+
+  /** Removes a SoundFont from the stack and deallocates it.
+
+      \param synth The synthesizer object
+      \param id The id of the SoundFont
+      \param reset_presets If TRUE then presets will be reset for all channels
+      \returns 0 if no error, -1 otherwise
+  */
+FLUIDSYNTH_API int fluid_synth_sfunload(fluid_synth_t* synth, unsigned int id, int reset_presets);
+
+  /** Add a SoundFont. The SoundFont will be put on top of
+      the SoundFont stack.
+
+      \param synth The synthesizer object
+      \param sfont The SoundFont
+      \returns The ID of the loaded SoundFont, or -1 in case of error
+  */
+FLUIDSYNTH_API int fluid_synth_add_sfont(fluid_synth_t* synth, fluid_sfont_t* sfont);
+
+  /** Remove a SoundFont that was previously added using
+   *  fluid_synth_add_sfont(). The synthesizer does not delete the
+   *  SoundFont; this is responsability of the caller.
+
+      \param synth The synthesizer object
+      \param sfont The SoundFont
+  */
+FLUIDSYNTH_API void fluid_synth_remove_sfont(fluid_synth_t* synth, fluid_sfont_t* sfont);
+
+  /** Count the number of loaded SoundFonts.
+
+      \param synth The synthesizer object
+      \returns The number of loaded SoundFonts 
+  */
+FLUIDSYNTH_API int fluid_synth_sfcount(fluid_synth_t* synth);
+
+  /** Get a SoundFont. The SoundFont is specified by its index on the
+      stack. The top of the stack has index zero. 
+    
+      \param synth The synthesizer object
+      \param num The number of the SoundFont (0 <= num < sfcount)
+      \returns A pointer to the SoundFont
+  */
+FLUIDSYNTH_API fluid_sfont_t* fluid_synth_get_sfont(fluid_synth_t* synth, unsigned int num);
+
+  /** Get a SoundFont. The SoundFont is specified by its ID.
+    
+      \param synth The synthesizer object
+      \param id The id of the sfont
+      \returns A pointer to the SoundFont
+  */
+FLUIDSYNTH_API fluid_sfont_t* fluid_synth_get_sfont_by_id(fluid_synth_t* synth, unsigned int id);
+
+
+  /** Get the preset of a channel */
+FLUIDSYNTH_API fluid_preset_t* fluid_synth_get_channel_preset(fluid_synth_t* synth, int chan);
+
+  /** Offset the bank numbers in a SoundFont. Returns -1 if an error
+   * occured (out of memory or negative offset) */ 
+FLUIDSYNTH_API int fluid_synth_set_bank_offset(fluid_synth_t* synth, int sfont_id, int offset);
+
+  /** Get the offset of the bank numbers in a SoundFont. */ 
+FLUIDSYNTH_API int fluid_synth_get_bank_offset(fluid_synth_t* synth, int sfont_id);
+
+
+
+  /*
+   * 
+   * Reverb 
+   *
+   */
+
+  /** Set the parameters for the built-in reverb unit */
+FLUIDSYNTH_API void fluid_synth_set_reverb(fluid_synth_t* synth, double roomsize, 
+					 double damping, double width, double level);
+
+  /** Turn on (1) / off (0) the built-in reverb unit */
+FLUIDSYNTH_API void fluid_synth_set_reverb_on(fluid_synth_t* synth, int on);
+
+
+  /** Query the current state of the reverb. */
+FLUIDSYNTH_API double fluid_synth_get_reverb_roomsize(fluid_synth_t* synth);
+FLUIDSYNTH_API double fluid_synth_get_reverb_damp(fluid_synth_t* synth);
+FLUIDSYNTH_API double fluid_synth_get_reverb_level(fluid_synth_t* synth);
+FLUIDSYNTH_API double fluid_synth_get_reverb_width(fluid_synth_t* synth);
+
+  /* Those are the default settings for the reverb */
+#define FLUID_REVERB_DEFAULT_ROOMSIZE 0.2f
+#define FLUID_REVERB_DEFAULT_DAMP 0.0f
+#define FLUID_REVERB_DEFAULT_WIDTH 0.5f
+#define FLUID_REVERB_DEFAULT_LEVEL 0.9f
+
+
+
+  /*
+   * 
+   * Chorus 
+   *
+   */
+
+enum fluid_chorus_mod {
+  FLUID_CHORUS_MOD_SINE = 0,
+  FLUID_CHORUS_MOD_TRIANGLE = 1
+};
+
+  /** Set up the chorus. It should be turned on with fluid_synth_set_chorus_on.
+   * If faulty parameters are given, all new settings are discarded.
+   * Keep in mind, that the needed CPU time is proportional to 'nr'.
+   */
+FLUIDSYNTH_API void fluid_synth_set_chorus(fluid_synth_t* synth, int nr, double level, 
+					 double speed, double depth_ms, int type);
+
+  /** Turn on (1) / off (0) the built-in chorus unit */
+FLUIDSYNTH_API void fluid_synth_set_chorus_on(fluid_synth_t* synth, int on);
+
+  /** Query the current state of the chorus. */
+FLUIDSYNTH_API int fluid_synth_get_chorus_nr(fluid_synth_t* synth);
+FLUIDSYNTH_API double fluid_synth_get_chorus_level(fluid_synth_t* synth);
+FLUIDSYNTH_API double fluid_synth_get_chorus_speed_Hz(fluid_synth_t* synth);
+FLUIDSYNTH_API double fluid_synth_get_chorus_depth_ms(fluid_synth_t* synth);
+FLUIDSYNTH_API int fluid_synth_get_chorus_type(fluid_synth_t* synth); /* see fluid_chorus_mod */
+
+  /* Those are the default settings for the chorus. */
+#define FLUID_CHORUS_DEFAULT_N 3
+#define FLUID_CHORUS_DEFAULT_LEVEL 2.0f
+#define FLUID_CHORUS_DEFAULT_SPEED 0.3f
+#define FLUID_CHORUS_DEFAULT_DEPTH 8.0f
+#define FLUID_CHORUS_DEFAULT_TYPE FLUID_CHORUS_MOD_SINE 
+
+
+
+  /*
+   * 
+   * Audio and MIDI channels 
+   *
+   */
+
+  /** Returns the number of MIDI channels that the synthesizer uses
+      internally */
+FLUIDSYNTH_API int fluid_synth_count_midi_channels(fluid_synth_t* synth);
+
+  /** Returns the number of audio channels that the synthesizer uses
+      internally */
+FLUIDSYNTH_API int fluid_synth_count_audio_channels(fluid_synth_t* synth);
+
+  /** Returns the number of audio groups that the synthesizer uses
+      internally. This is usually identical to audio_channels. */
+FLUIDSYNTH_API int fluid_synth_count_audio_groups(fluid_synth_t* synth);
+
+  /** Returns the number of effects channels that the synthesizer uses
+      internally */
+FLUIDSYNTH_API int fluid_synth_count_effects_channels(fluid_synth_t* synth);
+
+
+
+  /*
+   * 
+   * Synthesis parameters 
+   *
+   */
+
+  /** Set the master gain */
+FLUIDSYNTH_API void fluid_synth_set_gain(fluid_synth_t* synth, float gain);
+
+  /** Get the master gain */
+FLUIDSYNTH_API float fluid_synth_get_gain(fluid_synth_t* synth);
+
+  /** Set the polyphony limit (FluidSynth >= 1.0.6) */
+FLUIDSYNTH_API int fluid_synth_set_polyphony(fluid_synth_t* synth, int polyphony);
+
+  /** Get the polyphony limit (FluidSynth >= 1.0.6) */
+FLUIDSYNTH_API int fluid_synth_get_polyphony(fluid_synth_t* synth);
+
+  /** Get the internal buffer size. The internal buffer size if not the
+      same thing as the buffer size specified in the
+      settings. Internally, the synth *always* uses a specific buffer
+      size independent of the buffer size used by the audio driver. The
+      internal buffer size is normally 64 samples. The reason why it
+      uses an internal buffer size is to allow audio drivers to call the
+      synthesizer with a variable buffer length. The internal buffer
+      size is useful for client who want to optimize their buffer sizes.
+  */
+FLUIDSYNTH_API int fluid_synth_get_internal_bufsize(fluid_synth_t* synth);
+
+  /** Set the interpolation method for one channel or all channels (chan = -1) */
+FLUIDSYNTH_API 
+int fluid_synth_set_interp_method(fluid_synth_t* synth, int chan, int interp_method);
+
+  /* Flags to choose the interpolation method */
+enum fluid_interp {
+  /* no interpolation: Fastest, but questionable audio quality */
+  FLUID_INTERP_NONE = 0,
+  /* Straight-line interpolation: A bit slower, reasonable audio quality */
+  FLUID_INTERP_LINEAR = 1,
+  /* Fourth-order interpolation: Requires 50 % of the whole DSP processing time, good quality 
+   * Default. */
+  FLUID_INTERP_DEFAULT = 4,
+  FLUID_INTERP_4THORDER = 4,
+  FLUID_INTERP_7THORDER = 7,
+  FLUID_INTERP_HIGHEST=7
+};
+
+
+
+
+  /*
+   * 
+   * Generator interface 
+   *
+   */
+
+  /** Change the value of a generator. This function allows to control
+      all synthesis parameters in real-time. The changes are additive,
+      i.e. they add up to the existing parameter value. This function is
+      similar to sending an NRPN message to the synthesizer. The
+      function accepts a float as the value of the parameter. The
+      parameter numbers and ranges are described in the SoundFont 2.01
+      specification, paragraph 8.1.3, page 48. See also 'fluid_gen_type'.
+
+      \param synth The synthesizer object.
+      \param chan The MIDI channel number.
+      \param param The parameter number.
+      \param value The parameter value.
+      \returns Your favorite dish.
+  */
+FLUIDSYNTH_API 
+int fluid_synth_set_gen(fluid_synth_t* synth, int chan, int param, float value);
+
+
+  /** Retreive the value of a generator. This function returns the value
+      set by a previous call 'fluid_synth_set_gen' or by an NRPN message.
+
+      \param synth The synthesizer object.
+      \param chan The MIDI channel number.
+      \param param The generator number.
+      \returns The value of the generator.  
+  */
+FLUIDSYNTH_API float fluid_synth_get_gen(fluid_synth_t* synth, int chan, int param);
+
+
+
+
+  /*
+   * 
+   * Tuning 
+   *
+   */
+
+  /** Create a new key-based tuning with given name, number, and
+      pitches. The array 'pitches' should have length 128 and contains
+      the pitch in cents of every key in cents. However, if 'pitches' is
+      NULL, a new tuning is created with the well-tempered scale.
+    
+      \param synth The synthesizer object
+      \param tuning_bank The tuning bank number [0-127]
+      \param tuning_prog The tuning program number [0-127]
+      \param name The name of the tuning
+      \param pitch The array of pitch values. The array length has to be 128.
+  */
+FLUIDSYNTH_API 
+int fluid_synth_create_key_tuning(fluid_synth_t* synth, int tuning_bank, int tuning_prog,
+				 char* name, double* pitch);
+
+  /** Create a new octave-based tuning with given name, number, and
+      pitches.  The array 'pitches' should have length 12 and contains
+      derivation in cents from the well-tempered scale. For example, if
+      pitches[0] equals -33, then the C-keys will be tuned 33 cents
+      below the well-tempered C. 
+
+      \param synth The synthesizer object
+      \param tuning_bank The tuning bank number [0-127]
+      \param tuning_prog The tuning program number [0-127]
+      \param name The name of the tuning
+      \param pitch The array of pitch derivations. The array length has to be 12.
+  */
+FLUIDSYNTH_API 
+int fluid_synth_create_octave_tuning(fluid_synth_t* synth, int tuning_bank, int tuning_prog,
+				    char* name, double* pitch);
+
+  /** Request a note tuning changes. Both they 'keys' and 'pitches'
+      arrays should be of length 'num_pitches'. If 'apply' is non-zero,
+      the changes should be applied in real-time, i.e. sounding notes
+      will have their pitch updated. 'APPLY' IS CURRENTLY IGNORED. The
+      changes will be available for newly triggered notes only. 
+
+      \param synth The synthesizer object
+      \param tuning_bank The tuning bank number [0-127]
+      \param tuning_prog The tuning program number [0-127]
+      \param len The length of the keys and pitch arrays
+      \param keys The array of keys values.
+      \param pitch The array of pitch values.
+      \param apply Flag to indicate whether to changes should be applied in real-time.    
+  */
+FLUIDSYNTH_API 
+int fluid_synth_tune_notes(fluid_synth_t* synth, int tuning_bank, int tuning_prog,
+			  int len, int *keys, double* pitch, int apply);
+
+  /** Select a tuning for a channel. 
+
+  \param synth The synthesizer object
+  \param chan The channel number [0-max channels]
+  \param tuning_bank The tuning bank number [0-127]
+  \param tuning_prog The tuning program number [0-127]
+  */
+FLUIDSYNTH_API 
+int fluid_synth_select_tuning(fluid_synth_t* synth, int chan, int tuning_bank, int tuning_prog);
+
+  /** Set the tuning to the default well-tempered tuning on a channel.
+
+  \param synth The synthesizer object
+  \param chan The channel number [0-max channels]
+  */
+FLUIDSYNTH_API int fluid_synth_reset_tuning(fluid_synth_t* synth, int chan);
+
+  /** Start the iteration throught the list of available tunings.
+
+  \param synth The synthesizer object
+  */
+FLUIDSYNTH_API void fluid_synth_tuning_iteration_start(fluid_synth_t* synth);
+
+
+  /** Get the next tuning in the iteration. This functions stores the
+      bank and program number of the next tuning in the pointers given as
+      arguments.
+
+      \param synth The synthesizer object
+      \param bank Pointer to an int to store the bank number
+      \param prog Pointer to an int to store the program number
+      \returns 1 if there is a next tuning, 0 otherwise
+  */
+FLUIDSYNTH_API 
+int fluid_synth_tuning_iteration_next(fluid_synth_t* synth, int* bank, int* prog);
+
+
+  /** Dump the data of a tuning. This functions stores the name and
+      pitch values of a tuning in the pointers given as arguments. Both
+      name and pitch can be NULL is the data is not needed.
+
+      \param synth The synthesizer object
+      \param bank The tuning bank number [0-127]
+      \param prog The tuning program number [0-127]
+      \param name Pointer to a buffer to store the name
+      \param len The length of the name buffer
+      \param pitch Pointer to buffer to store the pitch values
+  */
+FLUIDSYNTH_API int fluid_synth_tuning_dump(fluid_synth_t* synth, int bank, int prog, 
+					 char* name, int len, double* pitch);
+
+
+
+
+  /*
+   * 
+   * Misc 
+   *
+   */
+
+  /** Get an estimation of the CPU load due to the audio synthesis.
+      Returns a percentage (0-100).
+
+      \param synth The synthesizer object
+  */
+FLUIDSYNTH_API double fluid_synth_get_cpu_load(fluid_synth_t* synth);
+
+  /** Get a textual representation of the last error */
+FLUIDSYNTH_API char* fluid_synth_error(fluid_synth_t* synth);
+
+
+  /*
+   *  
+   *    Synthesizer plugin
+   *  
+   *    
+   *    To create a synthesizer plugin, create the synthesizer as
+   *    explained above. Once the synthesizer is created you can call
+   *    any of the functions below to get the audio. 
+   * 
+   */
+
+  /** Generate a number of samples. This function expects two signed
+   *  16bits buffers (left and right channel) that will be filled with
+   *  samples.
+   *
+   *  \param synth The synthesizer
+   *  \param len The number of samples to generate
+   *  \param lout The sample buffer for the left channel
+   *  \param loff The offset, in samples, in the left buffer where the writing pointer starts
+   *  \param lincr The increment, in samples, of the writing pointer in the left buffer 
+   *  \param rout The sample buffer for the right channel
+   *  \param roff The offset, in samples, in the right buffer where the writing pointer starts
+   *  \param rincr The increment, in samples, of the writing pointer in the right buffer 
+   *  \returns 0 if no error occured, non-zero otherwise
+   */
+
+FLUIDSYNTH_API int fluid_synth_write_s16(fluid_synth_t* synth, int len, 
+				       void* lout, int loff, int lincr, 
+				       void* rout, int roff, int rincr);
+
+
+  /** Generate a number of samples. This function expects two floating
+   *  point buffers (left and right channel) that will be filled with
+   *  samples.
+   *
+   *  \param synth The synthesizer
+   *  \param len The number of samples to generate
+   *  \param lout The sample buffer for the left channel
+   *  \param loff The offset, in samples, in the left buffer where the writing pointer starts
+   *  \param lincr The increment, in samples, of the writing pointer in the left buffer 
+   *  \param rout The sample buffer for the right channel
+   *  \param roff The offset, in samples, in the right buffer where the writing pointer starts
+   *  \param rincr The increment, in samples, of the writing pointer in the right buffer 
+   *  \returns 0 if no error occured, non-zero otherwise
+   */
+
+FLUIDSYNTH_API int fluid_synth_write_float(fluid_synth_t* synth, int len, 
+					 void* lout, int loff, int lincr, 
+					 void* rout, int roff, int rincr);
+
+FLUIDSYNTH_API int fluid_synth_nwrite_float(fluid_synth_t* synth, int len, 
+					  float** left, float** right, 
+					  float** fx_left, float** fx_right);
+
+  /** Generate a number of samples. This function implements the
+   *  default interface defined in fluidsynth/audio.h. This function
+   *  ignores the input buffers and expects at least two output
+   *  buffer.
+   *
+   *  \param synth The synthesizer
+   *  \param len The number of samples to generate
+   *  \param nin The number of input buffers
+   *  \param in The array of input buffers
+   *  \param nout The number of output buffers
+   *  \param out The array of output buffers
+   *  \returns 0 if no error occured, non-zero otherwise
+   */
+
+FLUIDSYNTH_API int fluid_synth_process(fluid_synth_t* synth, int len,
+				     int nin, float** in, 
+				     int nout, float** out);
+
+
+
+  /* Type definition of the synthesizer's audio callback function. */
+typedef int (*fluid_audio_callback_t)(fluid_synth_t* synth, int len, 
+				     void* out1, int loff, int lincr, 
+				     void* out2, int roff, int rincr);
+
+
+
+
+
+  /*
+   *  Synthesizer's interface to handle SoundFont loaders 
+   */
+
+
+  /** Add a SoundFont loader to the synthesizer. Note that SoundFont
+      loader don't necessarily load SoundFonts. They can load any type
+      of wavetable data but export a SoundFont interface. */
+FLUIDSYNTH_API void fluid_synth_add_sfloader(fluid_synth_t* synth, fluid_sfloader_t* loader);
+
+  /** Allocate a synthesis voice. This function is called by a
+      soundfont's preset in response to a noteon event.
+      The returned voice comes with default modulators installed (velocity-to-attenuation,
+      velocity to filter, ...)
+      Note: A single noteon event may create any number of voices, when the preset is layered. 
+      Typically 1 (mono) or 2 (stereo).*/
+FLUIDSYNTH_API fluid_voice_t* fluid_synth_alloc_voice(fluid_synth_t* synth, fluid_sample_t* sample, 
+						   int channum, int key, int vel);
+
+  /** Start a synthesis voice. This function is called by a
+      soundfont's preset in response to a noteon event after the voice
+      has been allocated with fluid_synth_alloc_voice() and
+      initialized. 
+      Exclusive classes are processed here.*/
+FLUIDSYNTH_API void fluid_synth_start_voice(fluid_synth_t* synth, fluid_voice_t* voice);
+
+
+  /** Write a list of all voices matching ID into buf, but not more than bufsize voices.
+   * If ID <0, return all voices. */
+FLUIDSYNTH_API void fluid_synth_get_voicelist(fluid_synth_t* synth, 
+					    fluid_voice_t* buf[], int bufsize, int ID);
+
+
+  /** Callback function for the MIDI router. Any event goes through this. */
+FLUIDSYNTH_API int fluid_synth_handle_midi_event(void* data, fluid_midi_event_t* event);
+
+
+  /** This is a hack to get command handlers working */
+FLUIDSYNTH_API void fluid_synth_set_midi_router(fluid_synth_t* synth, 
+					      fluid_midi_router_t* router);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_SYNTH_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/types.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/types.h
new file mode 100644
index 0000000..d36f2fb
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/types.h
@@ -0,0 +1,66 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_TYPES_H
+#define _FLUIDSYNTH_TYPES_H
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/*
+
+  Forward declarations
+
+*/
+typedef struct _fluid_hashtable_t fluid_settings_t;
+typedef struct _fluid_synth_t fluid_synth_t;
+typedef struct _fluid_voice_t fluid_voice_t;
+typedef struct _fluid_sfloader_t fluid_sfloader_t;
+typedef struct _fluid_sfont_t fluid_sfont_t;
+typedef struct _fluid_preset_t fluid_preset_t;
+typedef struct _fluid_sample_t fluid_sample_t;
+typedef struct _fluid_mod_t fluid_mod_t;
+typedef struct _fluid_audio_driver_t fluid_audio_driver_t;
+typedef struct _fluid_player_t fluid_player_t;
+typedef struct _fluid_midi_event_t fluid_midi_event_t;
+typedef struct _fluid_midi_driver_t fluid_midi_driver_t;
+typedef struct _fluid_midi_router_t fluid_midi_router_t;
+typedef struct _fluid_midi_router_rule_t fluid_midi_router_rule_t;
+typedef struct _fluid_hashtable_t fluid_cmd_handler_t;
+typedef struct _fluid_shell_t fluid_shell_t;
+typedef struct _fluid_server_t fluid_server_t;
+typedef struct _fluid_event_t fluid_event_t;
+typedef struct _fluid_sequencer_t fluid_sequencer_t;
+typedef struct _fluid_ramsfont_t fluid_ramsfont_t;
+typedef struct _fluid_rampreset_t fluid_rampreset_t;
+
+typedef int fluid_istream_t;
+typedef int fluid_ostream_t;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_TYPES_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/version.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/version.h
new file mode 100644
index 0000000..68a0c14
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/version.h
@@ -0,0 +1,44 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_VERSION_H
+#define _FLUIDSYNTH_VERSION_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define FLUIDSYNTH_VERSION       "1.0.8"
+#define FLUIDSYNTH_VERSION_MAJOR 1
+#define FLUIDSYNTH_VERSION_MINOR 0
+#define FLUIDSYNTH_VERSION_MICRO 8
+
+
+FLUIDSYNTH_API void fluid_version(int *major, int *minor, int *micro);
+
+FLUIDSYNTH_API char* fluid_version_str(void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _FLUIDSYNTH_VERSION_H */
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/voice.h b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/voice.h
new file mode 100644
index 0000000..13b6b80
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/include/fluidsynth/voice.h
@@ -0,0 +1,97 @@
+/* FluidSynth - A Software Synthesizer
+ *
+ * Copyright (C) 2003  Peter Hanappe and others.
+ *
+ * This library 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 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
+ * Library General Public License for more details.
+ *  
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ * 02111-1307, USA
+ */
+
+#ifndef _FLUIDSYNTH_VOICE_H
+#define _FLUIDSYNTH_VOICE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+  /*
+   *  The interface to the synthesizer's voices
+   *  Examples on using them can be found in fluid_defsfont.c
+   */
+
+  /** Update all the synthesis parameters, which depend on generator gen. 
+      This is only necessary after changing a generator of an already operating voice.
+      Most applications will not need this function.*/
+
+FLUIDSYNTH_API void fluid_voice_update_param(fluid_voice_t* voice, int gen); 
+
+
+  /* for fluid_voice_add_mod */
+enum fluid_voice_add_mod{
+  FLUID_VOICE_OVERWRITE,
+  FLUID_VOICE_ADD,
+  FLUID_VOICE_DEFAULT
+};
+
+  /* Add a modulator to a voice (SF2.1 only). */
+FLUIDSYNTH_API void fluid_voice_add_mod(fluid_voice_t* voice, fluid_mod_t* mod, int mode);
+
+  /** Set the value of a generator */
+FLUIDSYNTH_API void fluid_voice_gen_set(fluid_voice_t* voice, int gen, float val);
+
+  /** Get the value of a generator */
+FLUIDSYNTH_API float fluid_voice_gen_get(fluid_voice_t* voice, int gen);
+
+  /** Modify the value of a generator by val */
+FLUIDSYNTH_API void fluid_voice_gen_incr(fluid_voice_t* voice, int gen, float val);
+
+
+  /** Return the unique ID of the noteon-event. A sound font loader
+   *  may store the voice processes it has created for * real-time
+   *  control during the operation of a voice (for example: parameter
+   *  changes in sound font editor). The synth uses a pool of
+   *  voices, which are 'recycled' and never deallocated.
+   *
+   * Before modifying an existing voice, check
+   * - that its state is still 'playing'
+   * - that the ID is still the same
+   * Otherwise the voice has finished playing.
+   */
+FLUIDSYNTH_API unsigned int fluid_voice_get_id(fluid_voice_t* voice);
+
+
+FLUIDSYNTH_API int fluid_voice_is_playing(fluid_voice_t* voice);
+
+  /** If the peak volume during the loop is known, then the voice can
+   * be released earlier during the release phase. Otherwise, the
+   * voice will operate (inaudibly), until the envelope is at the
+   * nominal turnoff point. In many cases the loop volume is many dB
+   * below the maximum volume.  For example, the loop volume for a
+   * typical acoustic piano is 20 dB below max.  Taking that into
+   * account in the turn-off algorithm we can save 20 dB / 100 dB =>
+   * 1/5 of the total release time.
+   * So it's a good idea to call fluid_voice_optimize_sample
+   * on each sample once.
+   */
+  
+FLUIDSYNTH_API int fluid_voice_optimize_sample(fluid_sample_t* s);
+       
+    
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _FLUIDSYNTH_VOICE_H */
+
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/lib/fluidsynth.dll b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/lib/fluidsynth.dll
new file mode 100644
index 0000000..3b6694e
Binary files /dev/null and b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/lib/fluidsynth.dll differ
diff --git a/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/pom.xml b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/pom.xml
new file mode 100644
index 0000000..d07860d
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-fluidsynth-windows-x86/pom.xml
@@ -0,0 +1,148 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-fluidsynth-windows-x86</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-fluidsynth.jni.path>${parent.relativePath}/TuxGuitar-fluidsynth/jni/</tuxguitar-fluidsynth.jni.path>
+		<tuxguitar-fluidsynth.jni.cc>gcc</tuxguitar-fluidsynth.jni.cc>
+		<tuxguitar-fluidsynth.jni.cflags>-mno-cygwin -I${basedir}/include -I$(shell gcj -print-file-name=include/)</tuxguitar-fluidsynth.jni.cflags>
+		<tuxguitar-fluidsynth.jni.ldflags>-mno-cygwin -Wl,--kill-at</tuxguitar-fluidsynth.jni.ldflags>
+		<tuxguitar-fluidsynth.jni.ldlibs>-lfluidsynth</tuxguitar-fluidsynth.jni.ldlibs>
+		<tuxguitar-fluidsynth.jni.ldpath>-L${basedir}/lib/</tuxguitar-fluidsynth.jni.ldpath>
+		<tuxguitar-fluidsynth.jni.library.name>tuxguitar-fluidsynth-jni</tuxguitar-fluidsynth.jni.library.name>
+		<tuxguitar-fluidsynth.jni.library.prefix></tuxguitar-fluidsynth.jni.library.prefix>
+		<tuxguitar-fluidsynth.jni.library.suffix>.dll</tuxguitar-fluidsynth.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-fluidsynth</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-fluidsynth.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-fluidsynth.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-fluidsynth.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-fluidsynth.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-fluidsynth.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-fluidsynth.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-fluidsynth.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-fluidsynth.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-fluidsynth.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-fluidsynth.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="LIBRARY_NAME" value="${tuxguitar-fluidsynth.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-fluidsynth.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-fluidsynth.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build" />
+								<copy todir="${project.build.directory}/build">
+									<fileset file="${basedir}/lib/*.dll" />
+								</copy>
+								
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-fluidsynth.jni.path}/${tuxguitar-fluidsynth.jni.library.prefix}${tuxguitar-fluidsynth.jni.library.name}${tuxguitar-fluidsynth.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-fluidsynth.jni.library.prefix}${tuxguitar-fluidsynth.jni.library.name}${tuxguitar-fluidsynth.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-fluidsynth</artifactId>
+									<destFileName>tuxguitar-fluidsynth.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+	
+	
+	<profiles>
+		<profile>
+			<id>platform-linux-x86</id>
+			<activation>
+				<os>
+					<family>unix</family>
+					<name>linux</name>
+					<arch>i386</arch>
+				</os>
+			</activation>
+			<properties>
+				<tuxguitar-fluidsynth.jni.cc>i586-mingw32msvc-gcc</tuxguitar-fluidsynth.jni.cc>
+			</properties>
+		</profile>
+	</profiles>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-jack-linux-x86/pom.xml b/build-scripts/native-modules/tuxguitar-jack-linux-x86/pom.xml
new file mode 100644
index 0000000..7d121d5
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-linux-x86/pom.xml
@@ -0,0 +1,135 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-jack-linux-x86</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-jack.jni.path>${parent.relativePath}/TuxGuitar-jack/jni/</tuxguitar-jack.jni.path>
+		<tuxguitar-jack.jni.rm>rm -f</tuxguitar-jack.jni.rm>
+		<tuxguitar-jack.jni.cc>gcc</tuxguitar-jack.jni.cc>
+		<tuxguitar-jack.jni.cflags>-I$(shell gcj -print-file-name=include/) -fPIC</tuxguitar-jack.jni.cflags>
+		<tuxguitar-jack.jni.ldflags></tuxguitar-jack.jni.ldflags>
+		<tuxguitar-jack.jni.ldlibs>`pkg-config --libs jack`</tuxguitar-jack.jni.ldlibs>
+		<tuxguitar-jack.jni.ldpath></tuxguitar-jack.jni.ldpath>
+		<tuxguitar-jack.jni.library.name>tuxguitar-jack-jni</tuxguitar-jack.jni.library.name>
+		<tuxguitar-jack.jni.library.prefix>lib</tuxguitar-jack.jni.library.prefix>
+		<tuxguitar-jack.jni.library.suffix>.so</tuxguitar-jack.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-jack</module>
+		<module>${parent.relativePath}/TuxGuitar-jack-ui</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-jack.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-jack.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-jack.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-jack.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-jack.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-jack.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-jack.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-jack.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-jack.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-jack.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="RM" value="${tuxguitar-jack.jni.rm}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-jack.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-jack.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-jack.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-jack.jni.path}/${tuxguitar-jack.jni.library.prefix}${tuxguitar-jack.jni.library.name}${tuxguitar-jack.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-jack.jni.library.prefix}${tuxguitar-jack.jni.library.name}${tuxguitar-jack.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jack</artifactId>
+									<destFileName>tuxguitar-jack.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jack-ui</artifactId>
+                  					<destFileName>tuxguitar-jack-ui.jar</destFileName>
+                  					<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-jack-linux-x86_64/pom.xml b/build-scripts/native-modules/tuxguitar-jack-linux-x86_64/pom.xml
new file mode 100644
index 0000000..ef48e82
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-linux-x86_64/pom.xml
@@ -0,0 +1,135 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-jack-linux-x86_64</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-jack.jni.path>${parent.relativePath}/TuxGuitar-jack/jni/</tuxguitar-jack.jni.path>
+		<tuxguitar-jack.jni.rm>rm -f</tuxguitar-jack.jni.rm>
+		<tuxguitar-jack.jni.cc>gcc</tuxguitar-jack.jni.cc>
+		<tuxguitar-jack.jni.cflags>-I$(shell gcj -print-file-name=include/) -fPIC</tuxguitar-jack.jni.cflags>
+		<tuxguitar-jack.jni.ldflags></tuxguitar-jack.jni.ldflags>
+		<tuxguitar-jack.jni.ldlibs>`pkg-config --libs jack`</tuxguitar-jack.jni.ldlibs>
+		<tuxguitar-jack.jni.ldpath></tuxguitar-jack.jni.ldpath>
+		<tuxguitar-jack.jni.library.name>tuxguitar-jack-jni</tuxguitar-jack.jni.library.name>
+		<tuxguitar-jack.jni.library.prefix>lib</tuxguitar-jack.jni.library.prefix>
+		<tuxguitar-jack.jni.library.suffix>.so</tuxguitar-jack.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-jack</module>
+		<module>${parent.relativePath}/TuxGuitar-jack-ui</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-jack.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-jack.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-jack.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-jack.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-jack.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-jack.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-jack.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-jack.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-jack.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-jack.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="RM" value="${tuxguitar-jack.jni.rm}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-jack.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-jack.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-jack.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-jack.jni.path}/${tuxguitar-jack.jni.library.prefix}${tuxguitar-jack.jni.library.name}${tuxguitar-jack.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-jack.jni.library.prefix}${tuxguitar-jack.jni.library.name}${tuxguitar-jack.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jack</artifactId>
+									<destFileName>tuxguitar-jack.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jack-ui</artifactId>
+                  					<destFileName>tuxguitar-jack-ui.jar</destFileName>
+                  					<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/control.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/control.h
new file mode 100644
index 0000000..263af1d
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/control.h
@@ -0,0 +1,563 @@
+/* -*- Mode: C ; c-basic-offset: 4 -*- */
+/*
+  JACK control API
+
+  Copyright (C) 2008 Nedko Arnaudov
+  Copyright (C) 2008 GRAME
+    
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; version 2 of the License.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+/**
+ * @file   jack/control.h
+ * @ingroup publicheader
+ * @brief  JACK control API
+ *
+ */
+
+#ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
+#define JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED
+
+#include <jack/jslist.h>
+#include <jack/systemdeps.h>
+#include <stdbool.h>
+
+/** Parameter types, intentionally similar to jack_driver_param_type_t */
+typedef enum
+{
+    JackParamInt = 1,			/**< @brief value type is a signed integer */
+    JackParamUInt,				/**< @brief value type is an unsigned integer */
+    JackParamChar,				/**< @brief value type is a char */
+    JackParamString,			/**< @brief value type is a string with max size of ::JACK_PARAM_STRING_MAX+1 chars */
+    JackParamBool,				/**< @brief value type is a boolean */
+} jackctl_param_type_t;
+
+/** @brief Max value that jackctl_param_type_t type can have */
+#define JACK_PARAM_MAX (JackParamBool + 1)
+
+/** @brief Max length of string parameter value, excluding terminating nul char */
+#define JACK_PARAM_STRING_MAX  63
+
+/** @brief Type for parameter value */
+/* intentionally similar to jack_driver_param_value_t */
+union jackctl_parameter_value
+{
+    uint32_t ui;				/**< @brief member used for ::JackParamUInt */
+    int32_t i;					/**< @brief member used for ::JackParamInt */
+    char c;						/**< @brief member used for ::JackParamChar */
+    char str[JACK_PARAM_STRING_MAX + 1]; /**< @brief member used for ::JackParamString */
+    bool b;				/**< @brief member used for ::JackParamBool */
+};
+
+/** opaque type for server object */
+typedef struct jackctl_server jackctl_server_t;
+
+/** opaque type for driver object */
+typedef struct jackctl_driver jackctl_driver_t;
+
+/** opaque type for internal client object */
+typedef struct jackctl_internal jackctl_internal_t;
+
+/** opaque type for parameter object */
+typedef struct jackctl_parameter jackctl_parameter_t;
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+#if 0
+} /* Adjust editor indent */
+#endif
+
+/**
+ * @defgroup ServerControl Controling the server
+ * @{
+ */
+
+/** 
+ * Call this function to setup process signal handling. As a general
+ * rule, it is required for proper operation for the server object.
+ * 
+ * @param flags signals setup flags, use 0 for none. Currently no
+ * flags are defined
+ *
+ * @return the configurated signal set.
+ */
+sigset_t
+jackctl_setup_signals(
+    unsigned int flags);
+
+/** 
+ * Call this function to wait on a signal set.
+ * 
+ * @param signals signals set to wait on
+ */
+void
+jackctl_wait_signals(
+    sigset_t signals);
+
+/**
+ * Call this function to create server object.
+ *
+ * @param on_device_acquire - Optional callback to be called before device is acquired. If false is returned, device usage will fail
+ * @param on_device_release - Optional callback to be called after device is released.
+ *
+ * @return server object handle, NULL if creation of server object
+ * failed. Successfully created server object must be destroyed with
+ * paired call to ::jackctl_server_destroy
+ */
+jackctl_server_t *
+jackctl_server_create(
+    bool (* on_device_acquire)(const char * device_name),
+    void (* on_device_release)(const char * device_name));
+
+/** 
+ * Call this function to destroy server object.
+ * 
+ * @param server server object handle to destroy
+ */
+void
+jackctl_server_destroy(
+	jackctl_server_t * server);
+
+/** 
+ * Call this function to start JACK server
+ * 
+ * @param server server object handle
+ * @param driver driver to use
+ * 
+ * @return success status: true - success, false - fail
+ */
+bool
+jackctl_server_start(
+    jackctl_server_t * server,
+    jackctl_driver_t * driver);
+
+/** 
+ * Call this function to stop JACK server
+ * 
+ * @param server server object handle
+ * 
+ * @return success status: true - success, false - fail
+ */
+bool
+jackctl_server_stop(
+	jackctl_server_t * server);
+
+/** 
+ * Call this function to get list of available drivers. List node data
+ * pointers is a driver object handle (::jackctl_driver_t).
+ * 
+ * @param server server object handle to get drivers for
+ *
+ * @return Single linked list of driver object handles. Must not be
+ * modified. Always same for same server object.
+ */
+const JSList *
+jackctl_server_get_drivers_list(
+	jackctl_server_t * server);
+
+/** 
+ * Call this function to get list of server parameters. List node data
+ * pointers is a parameter object handle (::jackctl_parameter_t).
+ * 
+ * @param server server object handle to get parameters for
+ *
+ * @return Single linked list of parameter object handles. Must not be
+ * modified. Always same for same server object.
+ */
+const JSList *
+jackctl_server_get_parameters(
+	jackctl_server_t * server);
+
+/** 
+ * Call this function to get list of available internal clients. List node data
+ * pointers is a internal client object handle (::jackctl_internal_t).
+ * 
+ * @param server server object handle to get internal clients for
+ *
+ * @return Single linked list of internal client object handles. Must not be
+ * modified. Always same for same server object.
+ */
+const JSList *
+jackctl_server_get_internals_list(
+	jackctl_server_t * server);
+
+/** 
+ * Call this function to load one internal client.
+ * 
+ * @param server server object handle
+ * @param internal internal to use
+ * 
+ * @return success status: true - success, false - fail
+ */
+bool
+jackctl_server_load_internal(
+    jackctl_server_t * server,
+    jackctl_internal_t * internal);
+
+/** 
+ * Call this function to unload one internal client.
+ * 
+ * @param server server object handle
+ * @param internal internal to unload
+ * 
+ * @return success status: true - success, false - fail
+ */
+bool
+jackctl_server_unload_internal(
+    jackctl_server_t * server,
+    jackctl_internal_t * internal);
+
+/** 
+ * Call this function to add a slave in the driver slave list.
+ * 
+ * @param server server object handle
+ * @param driver driver to add in the driver slave list.
+ * 
+ * @return success status: true - success, false - fail
+ */ 
+bool 
+jackctl_server_add_slave(jackctl_server_t * server,
+                            jackctl_driver_t * driver);
+
+/** 
+ * Call this function to remove a slave from the driver slave list.
+ * 
+ * @param server server object handle
+ * @param driver driver to remove from the driver slave list.
+ * 
+ * @return success status: true - success, false - fail
+ */ 
+bool 
+jackctl_server_remove_slave(jackctl_server_t * server,
+                            jackctl_driver_t * driver);
+
+/** 
+ * Call this function to switch master driver.
+ * 
+ * @param server server object handle
+ * @param driver driver to switch to
+ * 
+ * @return success status: true - success, false - fail
+ */                          
+bool 
+jackctl_server_switch_master(jackctl_server_t * server,
+                            jackctl_driver_t * driver);
+                            
+
+/** 
+ * Call this function to get name of driver.
+ * 
+ * @param driver driver object handle to get name of
+ *
+ * @return driver name. Must not be modified. Always same for same
+ * driver object.
+ */
+const char *
+jackctl_driver_get_name(
+	jackctl_driver_t * driver);
+
+/** 
+ * Call this function to get list of driver parameters. List node data
+ * pointers is a parameter object handle (::jackctl_parameter_t).
+ * 
+ * @param driver driver object handle to get parameters for
+ *
+ * @return Single linked list of parameter object handles. Must not be
+ * modified. Always same for same driver object.
+ */
+const JSList *
+jackctl_driver_get_parameters(
+	jackctl_driver_t * driver);
+
+/** 
+ * Call this function to get name of internal client.
+ * 
+ * @param internal internal object handle to get name of
+ *
+ * @return internal name. Must not be modified. Always same for same
+ * internal object.
+ */
+const char *
+jackctl_internal_get_name(
+	jackctl_internal_t * internal);
+
+/** 
+ * Call this function to get list of internal parameters. List node data
+ * pointers is a parameter object handle (::jackctl_parameter_t).
+ * 
+ * @param internal internal object handle to get parameters for
+ *
+ * @return Single linked list of parameter object handles. Must not be
+ * modified. Always same for same internal object.
+ */
+const JSList *
+jackctl_internal_get_parameters(
+	jackctl_internal_t * internal);
+
+/** 
+ * Call this function to get parameter name.
+ * 
+ * @param parameter parameter object handle to get name of
+ *
+ * @return parameter name. Must not be modified. Always same for same
+ * parameter object.
+ */
+const char *
+jackctl_parameter_get_name(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to get parameter short description.
+ * 
+ * @param parameter parameter object handle to get short description of
+ *
+ * @return parameter short description. Must not be modified. Always
+ * same for same parameter object.
+ */
+const char *
+jackctl_parameter_get_short_description(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to get parameter long description.
+ * 
+ * @param parameter parameter object handle to get long description of
+ *
+ * @return parameter long description. Must not be modified. Always
+ * same for same parameter object.
+ */
+const char *
+jackctl_parameter_get_long_description(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to get parameter type.
+ * 
+ * @param parameter parameter object handle to get type of
+ *
+ * @return parameter type. Always same for same parameter object.
+ */
+jackctl_param_type_t
+jackctl_parameter_get_type(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to get parameter character.
+ * 
+ * @param parameter parameter object handle to get character of
+ *
+ * @return character. 
+ */
+char
+jackctl_parameter_get_id(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to check whether parameter has been set, or its
+ * default value is being used.
+ * 
+ * @param parameter parameter object handle to check
+ *
+ * @return true - parameter is set, false - parameter is using default
+ * value.
+ */
+bool
+jackctl_parameter_is_set(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to reset parameter to its default value.
+ * 
+ * @param parameter parameter object handle to reset value of
+ *
+ * @return success status: true - success, false - fail
+ */
+bool
+jackctl_parameter_reset(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to get parameter value.
+ * 
+ * @param parameter parameter object handle to get value of
+ *
+ * @return parameter value.
+ */
+union jackctl_parameter_value
+jackctl_parameter_get_value(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to set parameter value.
+ * 
+ * @param parameter parameter object handle to get value of
+ * @param value_ptr pointer to variable containing parameter value
+ *
+ * @return success status: true - success, false - fail
+ */
+bool
+jackctl_parameter_set_value(
+	jackctl_parameter_t * parameter,
+	const union jackctl_parameter_value * value_ptr);
+
+/** 
+ * Call this function to get parameter default value.
+ * 
+ * @param parameter parameter object handle to get default value of
+ *
+ * @return parameter default value.
+ */
+union jackctl_parameter_value
+jackctl_parameter_get_default_value(
+	jackctl_parameter_t * parameter);
+    
+/** 
+ * Call this function check whether parameter has range constraint.
+ * 
+ * @param parameter object handle of parameter to check
+ *
+ * @return whether parameter has range constraint.
+ */
+bool
+jackctl_parameter_has_range_constraint(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function check whether parameter has enumeration constraint.
+ * 
+ * @param parameter object handle of parameter to check
+ *
+ * @return whether parameter has enumeration constraint.
+ */
+bool
+jackctl_parameter_has_enum_constraint(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function get how many enumeration values parameter has.
+ * 
+ * @param parameter object handle of parameter
+ *
+ * @return number of enumeration values
+ */
+uint32_t
+jackctl_parameter_get_enum_constraints_count(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to get parameter enumeration value.
+ * 
+ * @param parameter object handle of parameter
+ * @param index index of parameter enumeration value
+ *
+ * @return enumeration value.
+ */
+union jackctl_parameter_value
+jackctl_parameter_get_enum_constraint_value(
+	jackctl_parameter_t * parameter,
+	uint32_t index);
+
+/** 
+ * Call this function to get parameter enumeration value description.
+ * 
+ * @param parameter object handle of parameter
+ * @param index index of parameter enumeration value
+ *
+ * @return enumeration value description.
+ */
+const char *
+jackctl_parameter_get_enum_constraint_description(
+	jackctl_parameter_t * parameter,
+	uint32_t index);
+
+/** 
+ * Call this function to get parameter range.
+ * 
+ * @param parameter object handle of parameter
+ * @param min_ptr pointer to variable receiving parameter minimum value
+ * @param max_ptr pointer to variable receiving parameter maximum value
+ */
+void
+jackctl_parameter_get_range_constraint(
+	jackctl_parameter_t * parameter,
+	union jackctl_parameter_value * min_ptr,
+	union jackctl_parameter_value * max_ptr);
+
+/** 
+ * Call this function to check whether parameter constraint is strict,
+ * i.e. whether supplying non-matching value will not work for sure.
+ * 
+ * @param parameter parameter object handle to check
+ *
+ * @return whether parameter constraint is strict.
+ */
+bool
+jackctl_parameter_constraint_is_strict(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to check whether parameter has fake values,
+ * i.e. values have no user meaningful meaning and only value
+ * description is meaningful to user.
+ * 
+ * @param parameter parameter object handle to check
+ *
+ * @return whether parameter constraint is strict.
+ */
+bool
+jackctl_parameter_constraint_is_fake_value(
+	jackctl_parameter_t * parameter);
+
+/** 
+ * Call this function to log an error message.
+ * 
+ * @param format string
+ */
+void
+jack_error(
+	const char *format,
+	...);
+
+/** 
+ * Call this function to log an information message.
+ * 
+ * @param format string
+ */
+void
+jack_info(
+	const char *format,
+	...);
+
+/** 
+ * Call this function to log an information message but only when
+ * verbose mode is enabled.
+ * 
+ * @param format string
+ */
+void
+jack_log(
+	const char *format,
+	...);
+
+/* @} */
+
+#if 0
+{ /* Adjust editor indent */
+#endif
+#ifdef __cplusplus
+} /* extern "C" */
+#endif
+
+#endif /* #ifndef JACKCTL_H__2EEDAD78_DF4C_4B26_83B7_4FF1A446A47E__INCLUDED */
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/intclient.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/intclient.h
new file mode 100644
index 0000000..50d758d
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/intclient.h
@@ -0,0 +1,130 @@
+/*
+*  Copyright (C) 2004 Jack O'Quin
+*  
+*  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.1 of the License, or
+*  (at your option) any later version.
+*  
+*  This program is distributed in the hope that 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*
+*/
+
+#ifndef __jack_intclient_h__
+#define __jack_intclient_h__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <jack/types.h>
+
+/**
+ * Get an internal client's name.  This is useful when @ref
+ * JackUseExactName was not specified on jack_internal_client_load()
+ * and @ref JackNameNotUnique status was returned.  In that case, the
+ * actual name will differ from the @a client_name requested.
+ *
+ * @param client requesting JACK client's handle.
+ *
+ * @param intclient handle returned from jack_internal_client_load()
+ * or jack_internal_client_handle().
+ *
+ * @return NULL if unsuccessful, otherwise pointer to the internal
+ * client name obtained from the heap via malloc().  The caller should
+ * free() this storage when no longer needed.
+ */
+char *jack_get_internal_client_name (jack_client_t *client,
+                                     jack_intclient_t intclient);
+
+/**
+ * Return the @ref jack_intclient_t handle for an internal client
+ * running in the JACK server.
+ *
+ * @param client requesting JACK client's handle.
+ *
+ * @param client_name for the internal client of no more than
+ * jack_client_name_size() characters.  The name scope is local to the
+ * current server.
+ *
+ * @param status (if non-NULL) an address for JACK to return
+ * information from this operation.  This status word is formed by
+ * OR-ing together the relevant @ref JackStatus bits.
+ *
+ * @return Opaque internal client handle if successful.  If 0, the
+ * internal client was not found, and @a *status includes the @ref
+ * JackNoSuchClient and @ref JackFailure bits.
+ */
+jack_intclient_t jack_internal_client_handle (jack_client_t *client,
+        const char *client_name,
+        jack_status_t *status);
+
+/**
+ * Load an internal client into the JACK server.
+ *
+ * Internal clients run inside the JACK server process.  They can use
+ * most of the same functions as external clients.  Each internal
+ * client is built as a shared object module, which must declare
+ * jack_initialize() and jack_finish() entry points called at load and
+ * unload times.  See @ref inprocess.c for an example.
+ *
+ * @param client loading JACK client's handle.
+ *
+ * @param client_name of at most jack_client_name_size() characters
+ * for the internal client to load.  The name scope is local to the
+ * current server.
+ *
+ * @param options formed by OR-ing together @ref JackOptions bits.
+ * Only the @ref JackLoadOptions bits are valid.
+ *
+ * @param status (if non-NULL) an address for JACK to return
+ * information from the load operation.  This status word is formed by
+ * OR-ing together the relevant @ref JackStatus bits.
+ *
+ * <b>Optional parameters:</b> depending on corresponding [@a options
+ * bits] additional parameters may follow @a status (in this order).
+ *
+ * @arg [@ref JackLoadName] <em>(char *) load_name</em> is the shared
+ * object file from which to load the new internal client (otherwise
+ * use the @a client_name).
+ *
+ * @arg [@ref JackLoadInit] <em>(char *) load_init</em> an arbitary
+ * string passed to the internal client's jack_initialize() routine
+ * (otherwise NULL), of no more than @ref JACK_LOAD_INIT_LIMIT bytes.
+ *
+ * @return Opaque internal client handle if successful.  If this is 0,
+ * the load operation failed, the internal client was not loaded, and
+ * @a *status includes the @ref JackFailure bit.
+ */
+jack_intclient_t jack_internal_client_load (jack_client_t *client,
+        const char *client_name,
+        jack_options_t options,
+        jack_status_t *status, ...);
+/**
+ * Unload an internal client from a JACK server.  This calls the
+ * intclient's jack_finish() entry point then removes it.  See @ref
+ * inprocess.c for an example.
+ *
+ * @param client unloading JACK client's handle.
+ *
+ * @param intclient handle returned from jack_internal_client_load() or
+ * jack_internal_client_handle().
+ *
+ * @return 0 if successful, otherwise @ref JackStatus bits.
+ */
+jack_status_t jack_internal_client_unload (jack_client_t *client,
+        jack_intclient_t intclient);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __jack_intclient_h__ */
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/jack.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/jack.h
new file mode 100644
index 0000000..5dc6290
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/jack.h
@@ -0,0 +1,1102 @@
+/*
+  Copyright (C) 2001 Paul Davis
+  Copyright (C) 2004 Jack O'Quin
+  
+  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.1 of the License, or
+  (at your option) any later version.
+  
+  This program is distributed in the hope that 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef __jack_h__
+#define __jack_h__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <jack/systemdeps.h>
+#include <jack/types.h>
+#include <jack/transport.h>
+
+/**
+ * Note: More documentation can be found in jack/types.h.
+ */
+ 
+/**
+* @defgroup ClientFunctions Creating & manipulating clients
+* @{
+*/
+
+/**
+ * Call this function to get version of the JACK, in form of several numbers
+ *
+ * @param major_ptr pointer to variable receiving major version of JACK.
+ *
+ * @param minor_ptr pointer to variable receiving minor version of JACK.
+ *
+ * @param major_ptr pointer to variable receiving micro version of JACK.
+ *
+ * @param major_ptr pointer to variable receiving protocol version of JACK.
+ *
+ */
+void
+jack_get_version(
+    int *major_ptr,
+    int *minor_ptr,
+    int *micro_ptr,
+    int *proto_ptr);
+
+/**
+ * Call this function to get version of the JACK, in form of a string
+ *
+ * @return Human readable string describing JACK version being used.
+ *
+ */
+const char *
+jack_get_version_string();
+
+/**
+ * Open an external client session with a JACK server.  This interface
+ * is more complex but more powerful than jack_client_new().  With it,
+ * clients may choose which of several servers to connect, and control
+ * whether and how to start the server automatically, if it was not
+ * already running.  There is also an option for JACK to generate a
+ * unique client name, when necessary.
+ *
+ * @param client_name of at most jack_client_name_size() characters.
+ * The name scope is local to each server.  Unless forbidden by the
+ * @ref JackUseExactName option, the server will modify this name to
+ * create a unique variant, if needed.
+ *
+ * @param options formed by OR-ing together @ref JackOptions bits.
+ * Only the @ref JackOpenOptions bits are allowed.
+ *
+ * @param status (if non-NULL) an address for JACK to return
+ * information from the open operation.  This status word is formed by
+ * OR-ing together the relevant @ref JackStatus bits.
+ *
+ *
+ * <b>Optional parameters:</b> depending on corresponding [@a options
+ * bits] additional parameters may follow @a status (in this order).
+ *
+ * @arg [@ref JackServerName] <em>(char *) server_name</em> selects
+ * from among several possible concurrent server instances.  Server
+ * names are unique to each user.  If unspecified, use "default"
+ * unless \$JACK_DEFAULT_SERVER is defined in the process environment.
+ *
+ * @return Opaque client handle if successful.  If this is NULL, the
+ * open operation failed, @a *status includes @ref JackFailure and the
+ * caller is not a JACK client.
+ */
+jack_client_t * jack_client_open (const char *client_name,
+                                  jack_options_t options,
+                                  jack_status_t *status, ...);
+
+/**
+* \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN
+*  NEW JACK CLIENTS
+*
+* @deprecated Please use jack_client_open().
+*/
+jack_client_t * jack_client_new (const char *client_name);
+
+/**
+ * Disconnects an external client from a JACK server.
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_client_close (jack_client_t *client);
+
+/**
+ * @return the maximum number of characters in a JACK client name
+ * including the final NULL character.  This value is a constant.
+ */
+int jack_client_name_size (void);
+
+/**
+ * @return pointer to actual client name.  This is useful when @ref
+ * JackUseExactName is not specified on open and @ref
+ * JackNameNotUnique status was returned.  In that case, the actual
+ * name will differ from the @a client_name requested.
+ */
+char * jack_get_client_name (jack_client_t *client);
+
+/**
+ * Load an internal client into the Jack server.
+ *
+ * Internal clients run inside the JACK server process.  They can use
+ * most of the same functions as external clients.  Each internal
+ * client must declare jack_initialize() and jack_finish() entry
+ * points, called at load and unload times.  See inprocess.c for an
+ * example of how to write an internal client.
+ *
+ * @deprecated Please use jack_internal_client_load().
+ *
+ * @param client_name of at most jack_client_name_size() characters.
+ *
+ * @param load_name of a shared object file containing the code for
+ * the new client.
+ *
+ * @param load_init an arbitary string passed to the jack_initialize()
+ * routine of the new client (may be NULL).
+ *
+ * @return 0 if successful.
+ */
+int jack_internal_client_new (const char *client_name,
+                              const char *load_name,
+                              const char *load_init);
+
+/**
+ * Remove an internal client from a JACK server.
+ *
+ * @deprecated Please use jack_internal_client_load().
+ */
+void jack_internal_client_close (const char *client_name);
+
+/**
+ * Tell the Jack server that the program is ready to start processing
+ * audio.
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_activate (jack_client_t *client);
+
+/**
+ * Tell the Jack server to remove this @a client from the process
+ * graph.  Also, disconnect all ports belonging to it, since inactive
+ * clients have no port connections.
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_deactivate (jack_client_t *client);
+
+/**
+ * @return pid of client. If not available, 0 will be returned.
+ */
+int jack_get_client_pid (const char *name);
+
+/**
+ * @return the pthread ID of the thread running the JACK client side
+ * code.
+ */
+pthread_t jack_client_thread_id (jack_client_t *);
+
+/*@}*/
+
+/**
+ * @param client pointer to JACK client structure.
+ *
+ * Check if the JACK subsystem is running with -R (--realtime).
+ *
+ * @return 1 if JACK is running realtime, 0 otherwise
+ */
+int jack_is_realtime (jack_client_t *client);
+
+/**
+ * @defgroup NonCallbackAPI The non-callback API
+ * @{
+ */
+
+/**
+ * \bold THIS FUNCTION IS DEPRECATED AND SHOULD NOT BE USED IN
+ *  NEW JACK CLIENTS.
+ *
+ * @deprecated Please use jack_cycle_wait() and jack_cycle_signal() functions.
+ */
+jack_nframes_t jack_thread_wait (jack_client_t*, int status);
+
+/**
+ * Wait until this JACK client should process data.
+ * 
+ * @param client - pointer to a JACK client structure
+ *
+ * @return the number of frames of data to process
+ */
+jack_nframes_t jack_cycle_wait (jack_client_t* client);
+
+/**
+ * Signal next clients in the graph.
+ * 
+ * @param client - pointer to a JACK client structure
+ * @param status - if non-zero, calling thread should exit
+ */
+void jack_cycle_signal (jack_client_t* client, int status);
+
+/**
+ * Tell the Jack server to call @a thread_callback in the RT thread.
+ * Typical use are in conjunction with @a jack_cycle_wait and @a jack_cycle_signal functions.
+ * The code in the supplied function must be suitable for real-time
+ * execution.  That means that it cannot call functions that might
+ * block for a long time. This includes malloc, free, printf,
+ * pthread_mutex_lock, sleep, wait, poll, select, pthread_join,
+ * pthread_cond_wait, etc, etc. See
+ * http://jackit.sourceforge.net/docs/design/design.html#SECTION00411000000000000000
+ * for more information.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+*/
+int jack_set_process_thread(jack_client_t* client, JackThreadCallback thread_callback, void *arg);
+
+/*@}*/
+
+/**
+ * @defgroup ClientCallbacks Setting Client Callbacks
+ * @{
+ */
+
+/**
+ * Tell JACK to call @a thread_init_callback once just after
+ * the creation of the thread in which all other callbacks 
+ * will be handled.
+ *
+ * The code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code, causing JACK
+ * to remove that client from the process() graph.
+ */
+int jack_set_thread_init_callback (jack_client_t *client,
+                                   JackThreadInitCallback thread_init_callback,
+                                   void *arg);
+
+/**
+ * @param client pointer to JACK client structure.
+ * @param function The jack_shutdown function pointer.
+ * @param arg The arguments for the jack_shutdown function.
+ *
+ * Register a function (and argument) to be called if and when the
+ * JACK server shuts down the client thread.  The function must
+ * be written as if it were an asynchonrous POSIX signal
+ * handler --- use only async-safe functions, and remember that it
+ * is executed from another thread.  A typical function might
+ * set a flag or write to a pipe so that the rest of the
+ * application knows that the JACK client thread has shut
+ * down.
+ *
+ * NOTE: clients do not need to call this.  It exists only
+ * to help more complex clients understand what is going
+ * on.  It should be called before jack_client_activate().
+ */
+void jack_on_shutdown (jack_client_t *client,
+                       JackShutdownCallback shutdown_callback, void *arg);
+
+/**
+ * Tell the Jack server to call @a process_callback whenever there is
+ * work be done, passing @a arg as the second argument.
+ *
+ * The code in the supplied function must be suitable for real-time
+ * execution.  That means that it cannot call functions that might
+ * block for a long time. This includes malloc, free, printf,
+ * pthread_mutex_lock, sleep, wait, poll, select, pthread_join,
+ * pthread_cond_wait, etc, etc. See
+ * http://jackit.sourceforge.net/docs/design/design.html#SECTION00411000000000000000
+ * for more information.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ */
+int jack_set_process_callback (jack_client_t *client,
+                               JackProcessCallback process_callback,
+                               void *arg);
+
+/**
+ * Tell the Jack server to call @a freewheel_callback
+ * whenever we enter or leave "freewheel" mode, passing @a
+ * arg as the second argument. The first argument to the
+ * callback will be non-zero if JACK is entering freewheel
+ * mode, and zero otherwise.
+ *
+ * All "notification events" are received in a seperated non RT thread,
+ * the code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ */
+int jack_set_freewheel_callback (jack_client_t *client,
+                                 JackFreewheelCallback freewheel_callback,
+                                 void *arg);
+
+/**
+ * Tell JACK to call @a bufsize_callback whenever the size of the the
+ * buffer that will be passed to the @a process_callback is about to
+ * change.  Clients that depend on knowing the buffer size must supply
+ * a @a bufsize_callback before activating themselves.
+ *
+ * All "notification events" are received in a seperated non RT thread,
+ * the code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @param client pointer to JACK client structure.
+ * @param bufsize_callback function to call when the buffer size changes.
+ * @param arg argument for @a bufsize_callback.
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_set_buffer_size_callback (jack_client_t *client,
+                                   JackBufferSizeCallback bufsize_callback,
+                                   void *arg);
+
+/**
+ * Tell the Jack server to call @a srate_callback whenever the system
+ * sample rate changes.
+ *
+ * All "notification events" are received in a seperated non RT thread,
+ * the code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_set_sample_rate_callback (jack_client_t *client,
+                                   JackSampleRateCallback srate_callback,
+                                   void *arg);
+
+/**
+ * Tell the JACK server to call @a registration_callback whenever a
+ * port is registered or unregistered, passing @a arg as a parameter.
+ *
+ * All "notification events" are received in a seperated non RT thread,
+ * the code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_set_client_registration_callback (jack_client_t *,
+                       JackClientRegistrationCallback
+                       registration_callback, void *arg);
+
+/**
+ * Tell the JACK server to call @a registration_callback whenever a
+ * port is registered or unregistered, passing @a arg as a parameter.
+ *
+ * All "notification events" are received in a seperated non RT thread,
+ * the code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+ int jack_set_port_registration_callback (jack_client_t *,
+        JackPortRegistrationCallback
+        registration_callback, void *arg);
+        
+ /**
+ * Tell the JACK server to call @a connect_callback whenever a
+ * port is connected or disconnected, passing @a arg as a parameter.
+ *
+ * All "notification events" are received in a seperated non RT thread,
+ * the code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_set_port_connect_callback (jack_client_t *,
+                JackPortConnectCallback
+                connect_callback, void *arg);
+
+ /**
+ * Tell the JACK server to call @a rename_callback whenever a
+ * port is renamed, passing @a arg as a parameter.
+ *
+ * All "notification events" are received in a seperated non RT thread,
+ * the code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_set_port_rename_callback (jack_client_t *,
+                JackPortRenameCallback
+                rename_callback, void *arg);
+
+/**
+ * Tell the JACK server to call @a graph_callback whenever the
+ * processing graph is reordered, passing @a arg as a parameter.
+ *
+ * All "notification events" are received in a seperated non RT thread,
+ * the code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_set_graph_order_callback (jack_client_t *,
+                                   JackGraphOrderCallback graph_callback,
+                                   void *);
+
+/**
+ * Tell the JACK server to call @a xrun_callback whenever there is a
+ * xrun, passing @a arg as a parameter.
+ *
+ * All "notification events" are received in a seperated non RT thread,
+ * the code in the supplied function does not need to be
+ * suitable for real-time execution.
+ *
+ * NOTE: this function cannot be called while the client is activated 
+ * (after jack_activate has been called.)
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_set_xrun_callback (jack_client_t *,
+                            JackXRunCallback xrun_callback, void *arg);
+                            
+/*@}*/
+
+/**
+ * @defgroup ServerClientControl Controlling & querying JACK server operation
+ * @{
+ */
+                         
+/**
+ * Start/Stop JACK's "freewheel" mode.
+ *
+ * When in "freewheel" mode, JACK no longer waits for
+ * any external event to begin the start of the next process
+ * cycle. 
+ *
+ * As a result, freewheel mode causes "faster than realtime"
+ * execution of a JACK graph. If possessed, real-time
+ * scheduling is dropped when entering freewheel mode, and
+ * if appropriate it is reacquired when stopping.
+ * 
+ * IMPORTANT: on systems using capabilities to provide real-time
+ * scheduling (i.e. Linux kernel 2.4), if onoff is zero, this function
+ * must be called from the thread that originally called jack_activate(). 
+ * This restriction does not apply to other systems (e.g. Linux kernel 2.6 
+ * or OS X).
+ * 
+ * @param client pointer to JACK client structure
+ * @param onoff  if non-zero, freewheel mode starts. Otherwise
+ *                  freewheel mode ends.
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ */
+int jack_set_freewheel(jack_client_t* client, int onoff);
+
+/**
+ * Change the buffer size passed to the @a process_callback.
+ *
+ * This operation stops the JACK engine process cycle, then calls all
+ * registered @a bufsize_callback functions before restarting the
+ * process cycle.  This will cause a gap in the audio flow, so it
+ * should only be done at appropriate stopping points.
+ *
+ * @see jack_set_buffer_size_callback()
+ *
+ * @param client pointer to JACK client structure.
+ * @param nframes new buffer size.  Must be a power of two.
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_set_buffer_size (jack_client_t *client, jack_nframes_t nframes);
+                       
+/**
+ * @return the sample rate of the jack system, as set by the user when
+ * jackd was started.
+ */
+jack_nframes_t jack_get_sample_rate (jack_client_t *);
+
+/**
+ * @return the current maximum size that will ever be passed to the @a
+ * process_callback.  It should only be used *before* the client has
+ * been activated.  This size may change, clients that depend on it
+ * must register a @a bufsize_callback so they will be notified if it
+ * does.
+ *
+ * @see jack_set_buffer_size_callback()
+ */
+jack_nframes_t jack_get_buffer_size (jack_client_t *);
+
+/**
+ * Old-style interface to become the timebase for the entire JACK
+ * subsystem.
+ *
+ * @deprecated This function still exists for compatibility with the
+ * earlier transport interface, but it does nothing.  Instead, see
+ * transport.h and use jack_set_timebase_callback().
+ *
+ * @return ENOSYS, function not implemented.
+ */
+int jack_engine_takeover_timebase (jack_client_t *);
+
+/**
+ * @return the current CPU load estimated by JACK.  This is a running
+ * average of the time it takes to execute a full process cycle for
+ * all clients as a percentage of the real time available per cycle
+ * determined by the buffer size and sample rate.
+ */
+float jack_cpu_load (jack_client_t *client);
+
+/*@}*/
+
+/**
+ * @defgroup PortFunctions Creating & manipulating ports
+ * @{
+ */
+ 
+/**
+ * Create a new port for the client. This is an object used for moving
+ * data of any type in or out of the client.  Ports may be connected
+ * in various ways.
+ *
+ * Each port has a short name.  The port's full name contains the name
+ * of the client concatenated with a colon (:) followed by its short
+ * name.  The jack_port_name_size() is the maximum length of this full
+ * name.  Exceeding that will cause the port registration to fail and
+ * return NULL.
+ *
+ * All ports have a type, which may be any non-NULL and non-zero
+ * length string, passed as an argument.  Some port types are built
+ * into the JACK API, currently only JACK_DEFAULT_AUDIO_TYPE.
+ *
+ * @param client pointer to JACK client structure.
+ * @param port_name non-empty short name for the new port (not
+ * including the leading @a "client_name:").
+ * @param port_type port type name.  If longer than
+ * jack_port_type_size(), only that many characters are significant.
+ * @param flags @ref JackPortFlags bit mask.
+ * @param buffer_size must be non-zero if this is not a built-in @a
+ * port_type.  Otherwise, it is ignored.
+ *
+ * @return jack_port_t pointer on success, otherwise NULL.
+ */
+jack_port_t * jack_port_register (jack_client_t *client,
+                                  const char *port_name,
+                                  const char *port_type,
+                                  unsigned long flags,
+                                  unsigned long buffer_size);
+
+/**
+ * Remove the port from the client, disconnecting any existing
+ * connections.
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_port_unregister (jack_client_t *, jack_port_t *);
+
+/**
+ * This returns a pointer to the memory area associated with the
+ * specified port. For an output port, it will be a memory area
+ * that can be written to; for an input port, it will be an area
+ * containing the data from the port's connection(s), or
+ * zero-filled. if there are multiple inbound connections, the data
+ * will be mixed appropriately.  
+ *
+ * FOR OUTPUT PORTS ONLY : DEPRECATED in Jack 2.0 !!
+ * ---------------------------------------------------
+ * You may cache the value returned, but only between calls to
+ * your "blocksize" callback. For this reason alone, you should
+ * either never cache the return value or ensure you have
+ * a "blocksize" callback and be sure to invalidate the cached
+ * address from there.
+ * 
+ * Caching output ports is DEPRECATED in Jack 2.0, due to some new optimization (like "pipelining").
+ * Port buffers have to be retrieved in each callback for proper functionning. 
+ */
+void * jack_port_get_buffer (jack_port_t *, jack_nframes_t);
+
+/**
+ * @return the full name of the jack_port_t (including the @a
+ * "client_name:" prefix).
+ *
+ * @see jack_port_name_size().
+ */
+const char * jack_port_name (const jack_port_t *port);
+
+/**
+ * @return the short name of the jack_port_t (not including the @a
+ * "client_name:" prefix).
+ *
+ * @see jack_port_name_size().
+ */
+const char * jack_port_short_name (const jack_port_t *port);
+
+/**
+ * @return the @ref JackPortFlags of the jack_port_t.
+ */
+int jack_port_flags (const jack_port_t *port);
+
+/**
+ * @return the @a port type, at most jack_port_type_size() characters
+ * including a final NULL.
+ */
+const char * jack_port_type (const jack_port_t *port);
+
+ /**
+ * @return the @a port type id.
+ */
+jack_port_type_id_t jack_port_type_id (const jack_port_t *port);
+
+/**
+ * @return TRUE if the jack_port_t belongs to the jack_client_t.
+ */
+int jack_port_is_mine (const jack_client_t *, const jack_port_t *port);
+
+/**
+ * @return number of connections to or from @a port.
+ *
+ * @pre The calling client must own @a port.
+ */
+int jack_port_connected (const jack_port_t *port);
+
+/**
+ * @return TRUE if the locally-owned @a port is @b directly connected
+ * to the @a port_name.
+ *
+ * @see jack_port_name_size()
+ */
+int jack_port_connected_to (const jack_port_t *port,
+                            const char *port_name);
+
+/**
+ * @return a null-terminated array of full port names to which the @a
+ * port is connected.  If none, returns NULL.
+ *
+ * The caller is responsible for calling free(3) on any non-NULL
+ * returned value.
+ *
+ * @param port locally owned jack_port_t pointer.
+ *
+ * @see jack_port_name_size(), jack_port_get_all_connections()
+ */
+const char ** jack_port_get_connections (const jack_port_t *port);
+
+/**
+ * @return a null-terminated array of full port names to which the @a
+ * port is connected.  If none, returns NULL.
+ *
+ * The caller is responsible for calling free(3) on any non-NULL
+ * returned value.
+ *
+ * This differs from jack_port_get_connections() in two important
+ * respects:
+ *
+ *     1) You may not call this function from code that is
+ *          executed in response to a JACK event. For example,
+ *          you cannot use it in a GraphReordered handler.
+ *
+ *     2) You need not be the owner of the port to get information
+ *          about its connections. 
+ *
+ * @see jack_port_name_size()
+ */
+const char ** jack_port_get_all_connections (const jack_client_t *client,
+        const jack_port_t *port);
+
+/**
+ *
+ * @deprecated This function will be removed from a future version 
+ * of JACK. Do not use it. There is no replacement. It has 
+ * turned out to serve essentially no purpose in real-life
+ * JACK clients.
+ */
+int jack_port_tie (jack_port_t *src, jack_port_t *dst);
+
+/**
+ *
+ * @deprecated This function will be removed from a future version 
+ * of JACK. Do not use it. There is no replacement. It has 
+ * turned out to serve essentially no purpose in real-life
+ * JACK clients.
+ */
+int jack_port_untie (jack_port_t *port);
+
+ /**
+ * @return the time (in frames) between data being available or
+ * delivered at/to a port, and the time at which it arrived at or is
+ * delivered to the "other side" of the port.  E.g. for a physical
+ * audio output port, this is the time between writing to the port and
+ * when the signal will leave the connector.  For a physical audio
+ * input port, this is the time between the sound arriving at the
+ * connector and the corresponding frames being readable from the
+ * port.
+ */
+jack_nframes_t jack_port_get_latency (jack_port_t *port);
+
+/**
+ * The maximum of the sum of the latencies in every
+ * connection path that can be drawn between the port and other
+ * ports with the @ref JackPortIsTerminal flag set.
+ */
+jack_nframes_t jack_port_get_total_latency (jack_client_t *,
+        jack_port_t *port);
+
+/**
+ * The port latency is zero by default. Clients that control
+ * physical hardware with non-zero latency should call this
+ * to set the latency to its correct value. Note that the value
+ * should include any systemic latency present "outside" the
+ * physical hardware controlled by the client. For example,
+ * for a client controlling a digital audio interface connected
+ * to an external digital converter, the latency setting should
+ * include both buffering by the audio interface *and* the converter. 
+ */
+void jack_port_set_latency (jack_port_t *, jack_nframes_t);
+
+/**
+* Request a complete recomputation of a port's total latency. This
+* can be called by a client that has just changed the internal
+* latency of its port using @function jack_port_set_latency
+* and wants to ensure that all signal pathways in the graph
+* are updated with respect to the values that will be returned
+* by @function jack_port_get_total_latency. 
+* 
+* @return zero for successful execution of the request. non-zero
+*         otherwise.
+*/
+int jack_recompute_total_latency (jack_client_t*, jack_port_t* port);
+
+/**
+* Request a complete recomputation of all port latencies. This
+* can be called by a client that has just changed the internal
+* latency of its port using @function jack_port_set_latency
+* and wants to ensure that all signal pathways in the graph
+* are updated with respect to the values that will be returned
+* by @function jack_port_get_total_latency. It allows a client 
+* to change multiple port latencies without triggering a 
+* recompute for each change.
+* 
+* @return zero for successful execution of the request. non-zero
+*         otherwise.
+*/
+int jack_recompute_total_latencies (jack_client_t*);
+
+/**
+ * Modify a port's short name.  May be called at any time.  If the
+ * resulting full name (including the @a "client_name:" prefix) is
+ * longer than jack_port_name_size(), it will be truncated.
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ */
+int jack_port_set_name (jack_port_t *port, const char *port_name);
+
+/**
+ * Set @a alias as an alias for @a port.  May be called at any time.
+ * If the alias is longer than jack_port_name_size(), it will be truncated.
+ * 
+ * After a successful call, and until JACK exits or
+ * @function jack_port_unset_alias() is called, @alias may be
+ * used as a alternate name for the port.
+ *
+ * Ports can have up to two aliases - if both are already 
+ * set, this function will return an error.
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ */
+int jack_port_set_alias (jack_port_t *port, const char *alias);
+
+/**
+ * Remove @a alias as an alias for @a port.  May be called at any time.
+ * 
+ * After a successful call, @a alias can no longer be 
+ * used as a alternate name for the port.
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ */
+int jack_port_unset_alias (jack_port_t *port, const char *alias);
+
+/**
+ * Get any aliases known for @port.
+ *
+ * @return the number of aliases discovered for the port
+ */
+int jack_port_get_aliases (const jack_port_t *port, char* const aliases[2]);
+
+/**
+ * If @ref JackPortCanMonitor is set for this @a port, turn input
+ * monitoring on or off.  Otherwise, do nothing.
+ */
+int jack_port_request_monitor (jack_port_t *port, int onoff);
+
+/**
+ * If @ref JackPortCanMonitor is set for this @a port_name, turn input
+ * monitoring on or off.  Otherwise, do nothing.
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ *
+ * @see jack_port_name_size()
+ */
+int jack_port_request_monitor_by_name (jack_client_t *client,
+                                       const char *port_name, int onoff);
+
+/**
+ * If @ref JackPortCanMonitor is set for a port, this function turns
+ * on input monitoring if it was off, and turns it off if only one
+ * request has been made to turn it on.  Otherwise it does nothing.
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_port_ensure_monitor (jack_port_t *port, int onoff);
+
+/**
+ * @return TRUE if input monitoring has been requested for @a port.
+ */
+int jack_port_monitoring_input (jack_port_t *port);
+
+/**
+ * Establish a connection between two ports.
+ *
+ * When a connection exists, data written to the source port will
+ * be available to be read at the destination port.
+ *
+ * @pre The port types must be identical.
+ *
+ * @pre The @ref JackPortFlags of the @a source_port must include @ref
+ * JackPortIsOutput.
+ *
+ * @pre The @ref JackPortFlags of the @a destination_port must include
+ * @ref JackPortIsInput.
+ *
+ * @return 0 on success, EEXIST if the connection is already made,
+ * otherwise a non-zero error code
+ */
+int jack_connect (jack_client_t *,
+                  const char *source_port,
+                  const char *destination_port);
+
+/**
+ * Remove a connection between two ports.
+ *
+ * @pre The port types must be identical.
+ *
+ * @pre The @ref JackPortFlags of the @a source_port must include @ref
+ * JackPortIsOutput.
+ *
+ * @pre The @ref JackPortFlags of the @a destination_port must include
+ * @ref JackPortIsInput.
+ *
+ * @return 0 on success, otherwise a non-zero error code
+ */
+int jack_disconnect (jack_client_t *,
+                     const char *source_port,
+                     const char *destination_port);
+
+/**
+ * Perform the same function as jack_disconnect() using port handles
+ * rather than names.  This avoids the name lookup inherent in the
+ * name-based version.
+ *
+ * Clients connecting their own ports are likely to use this function,
+ * while generic connection clients (e.g. patchbays) would use
+ * jack_disconnect().
+ */
+int jack_port_disconnect (jack_client_t *, jack_port_t *);
+
+/**
+ * @return the maximum number of characters in a full JACK port name
+ * including the final NULL character.  This value is a constant.
+ *
+ * A port's full name contains the owning client name concatenated
+ * with a colon (:) followed by its short name and a NULL
+ * character.
+ */
+int jack_port_name_size(void);
+
+/**
+ * @return the maximum number of characters in a JACK port type name
+ * including the final NULL character.  This value is a constant.
+ */
+int jack_port_type_size(void);
+
+/*@}*/
+
+/**
+ * @defgroup PortSearching Looking up ports
+ * @{
+ */
+
+/**
+ * @param port_name_pattern A regular expression used to select 
+ * ports by name.  If NULL or of zero length, no selection based 
+ * on name will be carried out.
+ * @param type_name_pattern A regular expression used to select 
+ * ports by type.  If NULL or of zero length, no selection based 
+ * on type will be carried out.
+ * @param flags A value used to select ports by their flags.  
+ * If zero, no selection based on flags will be carried out.
+ *
+ * @return a NULL-terminated array of ports that match the specified
+ * arguments.  The caller is responsible for calling free(3) any
+ * non-NULL returned value.
+ *
+ * @see jack_port_name_size(), jack_port_type_size()
+ */
+const char ** jack_get_ports (jack_client_t *,
+                              const char *port_name_pattern,
+                              const char *type_name_pattern,
+                              unsigned long flags);
+
+/**
+ * @return address of the jack_port_t named @a port_name.
+ *
+ * @see jack_port_name_size()
+ */
+jack_port_t * jack_port_by_name (jack_client_t *, const char *port_name);
+
+/**
+ * @return address of the jack_port_t of a @a port_id.
+ */
+jack_port_t * jack_port_by_id (jack_client_t *client,
+                               jack_port_id_t port_id);
+                               
+/*@}*/ 
+
+/**
+ * @defgroup TimeFunctions Handling time
+ * @{
+ *
+ * JACK time is in units of 'frames', according to the current sample rate.
+ * The absolute value of frame times is meaningless, frame times have meaning
+ * only relative to each other.
+ */
+
+/**
+ * @return the estimated time in frames that has passed since the JACK
+ * server began the current process cycle.
+ */
+jack_nframes_t jack_frames_since_cycle_start (const jack_client_t *);
+
+/**
+ * @return the estimated current time in frames.
+ * This function is intended for use in other threads (not the process
+ * callback).  The return value can be compared with the value of
+ * jack_last_frame_time to relate time in other threads to JACK time.
+ */
+jack_nframes_t jack_frame_time (const jack_client_t *);
+
+/**
+ * @return the precise time at the start of the current process cycle.
+ * This function may only be used from the process callback, and can
+ * be used to interpret timestamps generated by jack_frame_time() in
+ * other threads with respect to the current process cycle.
+ * 
+ * This is the only jack time function that returns exact time:
+ * when used during the process callback it always returns the same
+ * value (until the next process callback, where it will return
+ * that value + nframes, etc).  The return value is guaranteed to be
+ * monotonic and linear in this fashion unless an xrun occurs.
+ * If an xrun occurs, clients must check this value again, as time
+ * may have advanced in a non-linear way (e.g. cycles may have been skipped).
+ */
+jack_nframes_t jack_last_frame_time (const jack_client_t *client);
+
+/**
+ * @return the estimated time in microseconds of the specified frame time
+ */
+jack_time_t jack_frames_to_time(const jack_client_t *client, jack_nframes_t);
+
+/**
+ * @return the estimated time in frames for the specified system time.
+ */
+jack_nframes_t jack_time_to_frames(const jack_client_t *client, jack_time_t);
+
+/**
+ * @return return JACK's current system time in microseconds,
+ *         using the JACK clock source. 
+ * 
+ * The value returned is guaranteed to be monotonic, but not linear.
+ */
+jack_time_t jack_get_time();
+
+/*@}*/
+
+/**
+ * @defgroup ErrorOutput Controlling error/information output
+ */
+/*@{*/
+
+/**
+ * Display JACK error message.
+ *
+ * Set via jack_set_error_function(), otherwise a JACK-provided
+ * default will print @a msg (plus a newline) to stderr.
+ *
+ * @param msg error message text (no newline at end).
+ */
+extern void (*jack_error_callback)(const char *msg);
+
+/**
+ * Set the @ref jack_error_callback for error message display.
+ * Set it to NULL to restore default_jack_error_callback function.
+ *
+ * The JACK library provides two built-in callbacks for this purpose:
+ * default_jack_error_callback() and silent_jack_error_callback().
+ */
+void jack_set_error_function (void (*func)(const char *));
+
+/**
+ * Display JACK info message.
+ *
+ * Set via jack_set_info_function(), otherwise a JACK-provided
+ * default will print @a msg (plus a newline) to stdout.
+ *
+ * @param msg info message text (no newline at end).
+ */
+extern void (*jack_info_callback)(const char *msg);
+
+/**
+ * Set the @ref jack_info_callback for info message display.
+ * Set it to NULL to restore default_jack_info_callback function.
+ *
+ * The JACK library provides two built-in callbacks for this purpose:
+ * default_jack_info_callback() and silent_jack_info_callback().
+ */
+void jack_set_info_function (void (*func)(const char *));
+
+/*@}*/
+
+/**
+ * The free function to be used on memory returned by jack_port_get_connections, 
+ * jack_port_get_all_connections and jack_get_ports functions.
+ * This is MANDATORY on Windows when otherwise all nasty runtime version related crashes can occur.
+ * Developers are strongly encouraged to use this function instead of the standard "free" function in new code.
+ *
+ */
+void jack_free(void* ptr);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __jack_h__ */
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/jslist.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/jslist.h
new file mode 100644
index 0000000..1877370
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/jslist.h
@@ -0,0 +1,289 @@
+/*
+  Based on gslist.c from glib-1.2.9 (LGPL).
+
+  Adaption to JACK, Copyright (C) 2002 Kai Vehmanen.
+    - replaced use of gtypes with normal ANSI C types
+    - glib's memory allocation routines replaced with
+      malloc/free calls
+
+  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.1 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef __jack_jslist_h__
+#define __jack_jslist_h__
+
+#include <stdlib.h>
+#include <jack/systemdeps.h>
+
+#ifdef sun
+#define __inline__
+#endif
+
+typedef struct _JSList JSList;
+
+typedef int	(*JCompareFunc)	(void* a, void* b);
+struct _JSList
+{
+    void *data;
+    JSList *next;
+};
+
+static __inline__
+JSList*
+jack_slist_alloc (void)
+{
+    JSList *new_list;
+
+    new_list = (JSList*)malloc(sizeof(JSList));
+    new_list->data = NULL;
+    new_list->next = NULL;
+
+    return new_list;
+}
+
+static __inline__
+JSList*
+jack_slist_prepend (JSList* list, void* data)
+{
+    JSList *new_list;
+
+    new_list = (JSList*)malloc(sizeof(JSList));
+    new_list->data = data;
+    new_list->next = list;
+
+    return new_list;
+}
+
+#define jack_slist_next(slist)	((slist) ? (((JSList *)(slist))->next) : NULL)
+static __inline__
+JSList*
+jack_slist_last (JSList *list)
+{
+    if (list) {
+        while (list->next)
+            list = list->next;
+    }
+
+    return list;
+}
+
+static __inline__
+JSList*
+jack_slist_remove_link (JSList *list,
+                        JSList *link)
+{
+    JSList *tmp;
+    JSList *prev;
+
+    prev = NULL;
+    tmp = list;
+
+    while (tmp) {
+        if (tmp == link) {
+            if (prev)
+                prev->next = tmp->next;
+            if (list == tmp)
+                list = list->next;
+
+            tmp->next = NULL;
+            break;
+        }
+
+        prev = tmp;
+        tmp = tmp->next;
+    }
+
+    return list;
+}
+
+static __inline__
+void
+jack_slist_free (JSList *list)
+{
+    while (list) {
+        JSList *next = list->next;
+        free(list);
+        list = next;
+    }
+}
+
+static __inline__
+void
+jack_slist_free_1 (JSList *list)
+{
+    if (list) {
+        free(list);
+    }
+}
+
+static __inline__
+JSList*
+jack_slist_remove (JSList *list,
+                   void *data)
+{
+    JSList *tmp;
+    JSList *prev;
+
+    prev = NULL;
+    tmp = list;
+
+    while (tmp) {
+        if (tmp->data == data) {
+            if (prev)
+                prev->next = tmp->next;
+            if (list == tmp)
+                list = list->next;
+
+            tmp->next = NULL;
+            jack_slist_free (tmp);
+
+            break;
+        }
+
+        prev = tmp;
+        tmp = tmp->next;
+    }
+
+    return list;
+}
+
+static __inline__
+unsigned int
+jack_slist_length (JSList *list)
+{
+    unsigned int length;
+
+    length = 0;
+    while (list) {
+        length++;
+        list = list->next;
+    }
+
+    return length;
+}
+
+static __inline__
+JSList*
+jack_slist_find (JSList *list,
+                 void *data)
+{
+    while (list) {
+        if (list->data == data)
+            break;
+        list = list->next;
+    }
+
+    return list;
+}
+
+static __inline__
+JSList*
+jack_slist_copy (JSList *list)
+{
+    JSList *new_list = NULL;
+
+    if (list) {
+        JSList *last;
+
+        new_list = jack_slist_alloc ();
+        new_list->data = list->data;
+        last = new_list;
+        list = list->next;
+        while (list) {
+            last->next = jack_slist_alloc ();
+            last = last->next;
+            last->data = list->data;
+            list = list->next;
+        }
+    }
+
+    return new_list;
+}
+
+static __inline__
+JSList*
+jack_slist_append (JSList *list,
+                   void *data)
+{
+    JSList *new_list;
+    JSList *last;
+
+    new_list = jack_slist_alloc ();
+    new_list->data = data;
+
+    if (list) {
+        last = jack_slist_last (list);
+        last->next = new_list;
+
+        return list;
+    } else
+        return new_list;
+}
+
+static __inline__
+JSList*
+jack_slist_sort_merge (JSList *l1,
+                       JSList *l2,
+                       JCompareFunc compare_func)
+{
+    JSList list, *l;
+
+    l = &list;
+
+    while (l1 && l2) {
+        if (compare_func(l1->data, l2->data) < 0) {
+            l = l->next = l1;
+            l1 = l1->next;
+        } else {
+            l = l->next = l2;
+            l2 = l2->next;
+        }
+    }
+    l->next = l1 ? l1 : l2;
+
+    return list.next;
+}
+
+static __inline__
+JSList*
+jack_slist_sort (JSList *list,
+                 JCompareFunc compare_func)
+{
+    JSList *l1, *l2;
+
+    if (!list)
+        return NULL;
+    if (!list->next)
+        return list;
+
+    l1 = list;
+    l2 = list->next;
+
+    while ((l2 = l2->next) != NULL) {
+        if ((l2 = l2->next) == NULL)
+            break;
+        l1 = l1->next;
+    }
+    l2 = l1->next;
+    l1->next = NULL;
+
+    return jack_slist_sort_merge (jack_slist_sort (list, compare_func),
+                                  jack_slist_sort (l2, compare_func),
+                                  compare_func);
+}
+
+#endif /* __jack_jslist_h__ */
+
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/midiport.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/midiport.h
new file mode 100644
index 0000000..da0b940
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/midiport.h
@@ -0,0 +1,159 @@
+/*
+    Copyright (C) 2004 Ian Esten
+    
+    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.1 of the License, or
+    (at your option) any later version.
+    
+    This program is distributed in the hope that 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+
+#ifndef __JACK_MIDIPORT_H
+#define __JACK_MIDIPORT_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+	
+#include <jack/types.h>
+#include <stdlib.h>
+
+	
+/** Type for raw event data contained in @ref jack_midi_event_t. */
+typedef unsigned char jack_midi_data_t;
+
+
+/** A Jack MIDI event. */
+typedef struct _jack_midi_event
+{
+	jack_nframes_t    time;   /**< Sample index at which event is valid */
+	size_t            size;   /**< Number of bytes of data in \a buffer */
+	jack_midi_data_t *buffer; /**< Raw MIDI data */
+} jack_midi_event_t;
+
+
+/**
+ * @defgroup MIDIAPI Reading and writing MIDI data 
+ * @{
+ */
+
+/** Get number of events in a port buffer.
+ *
+ * @param port_buffer Port buffer from which to retrieve event.
+ * @return number of events inside @a port_buffer
+ */
+jack_nframes_t
+jack_midi_get_event_count(void*          port_buffer);
+
+
+/** Get a MIDI event from an event port buffer.
+ * 
+ * Jack MIDI is normalised, the MIDI event returned by this function is
+ * guaranteed to be a complete MIDI event (the status byte will always be
+ * present, and no realtime events will interspered with the event).
+ *
+ * @param event Event structure to store retrieved event in.
+ * @param port_buffer Port buffer from which to retrieve event.
+ * @param event_index Index of event to retrieve.
+ * @return 0 on success, ENODATA if buffer is empty.
+ */
+int
+jack_midi_event_get(jack_midi_event_t *event,
+                    void              *port_buffer,
+                    jack_nframes_t     event_index);
+
+
+/** Clear an event buffer.
+ * 
+ * This should be called at the beginning of each process cycle before calling
+ * @ref jack_midi_event_reserve or @ref jack_midi_event_write. This
+ * function may not be called on an input port's buffer.
+ *
+ * @param port_buffer Port buffer to clear (must be an output port buffer).
+ */
+void
+jack_midi_clear_buffer(void           *port_buffer);
+
+
+/** Get the size of the largest event that can be stored by the port.
+ *
+ * This function returns the current space available, taking into account
+ * events already stored in the port.
+ *
+ * @param port_buffer Port buffer to check size of.
+ */
+size_t
+jack_midi_max_event_size(void* port_buffer);
+
+
+/** Allocate space for an event to be written to an event port buffer.
+ *
+ * Clients are to write the actual event data to be written starting at the
+ * pointer returned by this function. Clients must not write more than
+ * @a data_size bytes into this buffer.  Clients must write normalised
+ * MIDI data to the port - no running status and no (1-byte) realtime
+ * messages interspersed with other messages (realtime messages are fine
+ * when they occur on their own, like other messages).
+ *
+ * @param port_buffer Buffer to write event to.
+ * @param time Sample offset of event.
+ * @param data_size Length of event's raw data in bytes.
+ * @return Pointer to the beginning of the reserved event's data buffer, or
+ * NULL on error (ie not enough space).
+ */
+jack_midi_data_t*
+jack_midi_event_reserve(void           *port_buffer,
+                        jack_nframes_t  time, 
+                        size_t          data_size);
+
+
+/** Write an event into an event port buffer.
+ *
+ * This function is simply a wrapper for @ref jack_midi_event_reserve
+ * which writes the event data into the space reserved in the buffer.
+ * The same restrictions on the MIDI data apply.
+ * 
+ * @param port_buffer Buffer to write event to.
+ * @param time Sample offset of event.
+ * @param data Message data to be written.
+ * @param data_size Length of @a data in bytes.
+ * @return 0 on success, ENOBUFS if there's not enough space in buffer for event.
+ */
+int
+jack_midi_event_write(void                   *port_buffer,
+                      jack_nframes_t          time,
+                      const jack_midi_data_t *data,
+                      size_t                  data_size);
+
+
+/** Get the number of events that could not be written to @a port_buffer.
+ *
+ * This function returning a non-zero value implies @a port_buffer is full.
+ * Currently the only way this can happen is if events are lost on port mixdown.
+ *
+ * @param port_buffer Port to receive count for.
+ * @returns Number of events that could not be written to @a port_buffer.
+ */
+jack_nframes_t
+jack_midi_get_lost_event_count(void           *port_buffer);
+
+/*@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __JACK_MIDIPORT_H */
+
+
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/ringbuffer.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/ringbuffer.h
new file mode 100644
index 0000000..cb0ca94
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/ringbuffer.h
@@ -0,0 +1,243 @@
+/*
+  Copyright (C) 2000 Paul Davis
+  Copyright (C) 2003 Rohan Drape
+  
+  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.1 of the License, or
+  (at your option) any later version.
+  
+  This program is distributed in the hope that 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef _RINGBUFFER_H
+#define _RINGBUFFER_H
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <sys/types.h>
+
+/** @file ringbuffer.h
+ *
+ * A set of library functions to make lock-free ringbuffers available
+ * to JACK clients.  The `capture_client.c' (in the example_clients
+ * directory) is a fully functioning user of this API.
+ *
+ * The key attribute of a ringbuffer is that it can be safely accessed
+ * by two threads simultaneously -- one reading from the buffer and
+ * the other writing to it -- without using any synchronization or
+ * mutual exclusion primitives.  For this to work correctly, there can
+ * only be a single reader and a single writer thread.  Their
+ * identities cannot be interchanged.
+ */
+
+typedef struct {
+    char *buf;
+    size_t len;
+}
+jack_ringbuffer_data_t ;
+
+typedef struct {
+    char	*buf;
+    volatile size_t write_ptr;
+    volatile size_t read_ptr;
+    size_t	size;
+    size_t	size_mask;
+    int	mlocked;
+}
+jack_ringbuffer_t ;
+
+/**
+ * Allocates a ringbuffer data structure of a specified size. The
+ * caller must arrange for a call to jack_ringbuffer_free() to release
+ * the memory associated with the ringbuffer.
+ *
+ * @param sz the ringbuffer size in bytes.
+ *
+ * @return a pointer to a new jack_ringbuffer_t, if successful; NULL
+ * otherwise.
+ */
+jack_ringbuffer_t *jack_ringbuffer_create(size_t sz);
+
+/**
+ * Frees the ringbuffer data structure allocated by an earlier call to
+ * jack_ringbuffer_create().
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ */
+void jack_ringbuffer_free(jack_ringbuffer_t *rb);
+
+/**
+ * Fill a data structure with a description of the current readable
+ * data held in the ringbuffer.  This description is returned in a two
+ * element array of jack_ringbuffer_data_t.  Two elements are needed
+ * because the data to be read may be split across the end of the
+ * ringbuffer.
+ *
+ * The first element will always contain a valid @a len field, which
+ * may be zero or greater.  If the @a len field is non-zero, then data
+ * can be read in a contiguous fashion using the address given in the
+ * corresponding @a buf field.
+ *
+ * If the second element has a non-zero @a len field, then a second
+ * contiguous stretch of data can be read from the address given in
+ * its corresponding @a buf field.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ * @param vec a pointer to a 2 element array of jack_ringbuffer_data_t.
+ *
+ */
+void jack_ringbuffer_get_read_vector(const jack_ringbuffer_t *rb,
+                                     jack_ringbuffer_data_t *vec);
+
+/**
+ * Fill a data structure with a description of the current writable
+ * space in the ringbuffer.  The description is returned in a two
+ * element array of jack_ringbuffer_data_t.  Two elements are needed
+ * because the space available for writing may be split across the end
+ * of the ringbuffer.
+ *
+ * The first element will always contain a valid @a len field, which
+ * may be zero or greater.  If the @a len field is non-zero, then data
+ * can be written in a contiguous fashion using the address given in
+ * the corresponding @a buf field.
+ *
+ * If the second element has a non-zero @a len field, then a second
+ * contiguous stretch of data can be written to the address given in
+ * the corresponding @a buf field.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ * @param vec a pointer to a 2 element array of jack_ringbuffer_data_t.
+ */
+void jack_ringbuffer_get_write_vector(const jack_ringbuffer_t *rb,
+                                      jack_ringbuffer_data_t *vec);
+
+/**
+ * Read data from the ringbuffer.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ * @param dest a pointer to a buffer where data read from the
+ * ringbuffer will go.
+ * @param cnt the number of bytes to read.
+ *
+ * @return the number of bytes read, which may range from 0 to cnt.
+ */
+size_t jack_ringbuffer_read(jack_ringbuffer_t *rb, char *dest, size_t cnt);
+
+/**
+ * Read data from the ringbuffer. Opposed to jack_ringbuffer_read()
+ * this function does not move the read pointer. Thus it's
+ * a convenient way to inspect data in the ringbuffer in a
+ * continous fashion. The price is that the data is copied
+ * into a user provided buffer. For "raw" non-copy inspection
+ * of the data in the ringbuffer use jack_ringbuffer_get_read_vector().
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ * @param dest a pointer to a buffer where data read from the
+ * ringbuffer will go.
+ * @param cnt the number of bytes to read.
+ *
+ * @return the number of bytes read, which may range from 0 to cnt.
+ */
+size_t jack_ringbuffer_peek(jack_ringbuffer_t *rb, char *dest, size_t cnt);
+
+/**
+ * Advance the read pointer.
+ *
+ * After data have been read from the ringbuffer using the pointers
+ * returned by jack_ringbuffer_get_read_vector(), use this function to
+ * advance the buffer pointers, making that space available for future
+ * write operations.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ * @param cnt the number of bytes read.
+ */
+void jack_ringbuffer_read_advance(jack_ringbuffer_t *rb, size_t cnt);
+
+/**
+ * Return the number of bytes available for reading.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ *
+ * @return the number of bytes available to read.
+ */
+size_t jack_ringbuffer_read_space(const jack_ringbuffer_t *rb);
+
+/**
+ * Lock a ringbuffer data block into memory.
+ *
+ * Uses the mlock() system call.  This is not a realtime operation.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ */
+int jack_ringbuffer_mlock(jack_ringbuffer_t *rb);
+
+/**
+ * Reset the read and write pointers, making an empty buffer.
+ *
+ * This is not thread safe.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ */
+void jack_ringbuffer_reset(jack_ringbuffer_t *rb);
+
+/**
+ * Reset the internal "available" size, and read and write pointers, making an empty buffer.
+ *
+ * This is not thread safe.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ * @param sz the new size, that must be less than allocated size.
+ */
+void jack_ringbuffer_reset_size (jack_ringbuffer_t * rb, size_t sz);
+
+/**
+ * Write data into the ringbuffer.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ * @param src a pointer to the data to be written to the ringbuffer.
+ * @param cnt the number of bytes to write.
+ *
+ * @return the number of bytes write, which may range from 0 to cnt
+ */
+size_t jack_ringbuffer_write(jack_ringbuffer_t *rb, const char *src,
+                             size_t cnt);
+
+/**
+ * Advance the write pointer.
+ *
+ * After data have been written the ringbuffer using the pointers
+ * returned by jack_ringbuffer_get_write_vector(), use this function
+ * to advance the buffer pointer, making the data available for future
+ * read operations.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ * @param cnt the number of bytes written.
+ */
+void jack_ringbuffer_write_advance(jack_ringbuffer_t *rb, size_t cnt);
+
+/**
+ * Return the number of bytes available for writing.
+ *
+ * @param rb a pointer to the ringbuffer structure.
+ *
+ * @return the amount of free space (in bytes) available for writing.
+ */
+size_t jack_ringbuffer_write_space(const jack_ringbuffer_t *rb);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/statistics.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/statistics.h
new file mode 100644
index 0000000..28c270d
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/statistics.h
@@ -0,0 +1,57 @@
+/*
+*  Copyright (C) 2004 Rui Nuno Capela, Lee Revell
+*  
+*  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.1
+*  of the License, or (at your option) any later version.
+*  
+*  This program is distributed in the hope that 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., 59 Temple Place - Suite 330, Boston, MA
+*  02111-1307, USA.
+*
+*/
+
+#ifndef __statistics_h__
+#define __statistics_h__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <jack/types.h>
+
+/**
+ * @return the maximum delay reported by the backend since
+ * startup or reset.  When compared to the period size in usecs, this
+ * can be used to estimate the ideal period size for a given setup.
+ */
+float jack_get_max_delayed_usecs (jack_client_t *client);
+
+/**
+ * @return the delay in microseconds due to the most recent XRUN
+ * occurrence.  This probably only makes sense when called from a @ref
+ * JackXRunCallback defined using jack_set_xrun_callback().
+ */
+float jack_get_xrun_delayed_usecs (jack_client_t *client);
+
+/**
+ * Reset the maximum delay counter.  This would be useful
+ * to estimate the effect that a change to the configuration of a running
+ * system (e.g. toggling kernel preemption) has on the delay
+ * experienced by JACK, without having to restart the JACK engine.
+ */
+void jack_reset_max_delayed_usecs (jack_client_t *client);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __statistics_h__ */
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/systemdeps.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/systemdeps.h
new file mode 100644
index 0000000..f6e36fa
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/systemdeps.h
@@ -0,0 +1,62 @@
+/*
+Copyright (C) 2004-2009 Grame
+
+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.1 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU 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., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __jack_systemdeps_h__
+#define __jack_systemdeps_h__
+
+#ifdef WIN32
+
+#include <windows.h>
+
+#ifdef _MSC_VER     /* Microsoft compiler */
+    #define __inline__ inline
+    #ifndef int8_t
+        typedef char int8_t;
+        typedef unsigned char uint8_t;
+        typedef short int16_t;
+        typedef unsigned short uint16_t;
+        typedef long int32_t;
+        typedef unsigned long uint32_t;
+        typedef LONGLONG int64_t;
+        typedef ULONGLONG uint64_t;
+    #endif
+    #ifndef pthread_t
+//    typedef HANDLE pthread_t;
+    #endif
+#elif __MINGW32__   /* MINGW */
+    #include <stdint.h>
+    #include <sys/types.h>
+    #ifndef pthread_t
+        //typedef HANDLE pthread_t;
+    #endif
+#else               /* other compilers ...*/
+    #include <inttypes.h>
+    #include <pthread.h>
+    #include <sys/types.h>
+#endif
+
+#endif /* WIN32 */
+
+#if defined(__APPLE__) || defined(__linux__) || defined(__sun__) || defined(sun)
+    #include <inttypes.h>
+    #include <pthread.h>
+    #include <sys/types.h>
+#endif /* __APPLE__ || __linux__ || __sun__ || sun */
+
+#endif
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/thread.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/thread.h
new file mode 100644
index 0000000..48adf08
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/thread.h
@@ -0,0 +1,155 @@
+/*
+   Copyright (C) 2004 Paul Davis
+
+   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.1 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef __jack_thread_h__
+#define __jack_thread_h__
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#include <jack/systemdeps.h>
+
+/** @file thread.h
+ *
+ * Library functions to standardize thread creation for JACK and its
+ * clients.  These interfaces hide some system variations in the
+ * handling of realtime scheduling and associated privileges.
+ */
+
+/**
+ * @defgroup ClientThreads Creating and managing client threads
+ * @{
+ */
+
+ /**
+ * @returns if JACK is running with realtime scheduling, this returns
+ * the priority that any JACK-created client threads will run at.
+ * Otherwise returns -1.
+ */
+
+int jack_client_real_time_priority (jack_client_t*);
+
+/**
+ * @returns if JACK is running with realtime scheduling, this returns
+ * the maximum priority that a JACK client thread should use if the thread
+ * is subject to realtime scheduling. Otherwise returns -1.
+ */
+
+int jack_client_max_real_time_priority (jack_client_t*);
+
+/**
+ * Attempt to enable realtime scheduling for a thread.  On some
+ * systems that may require special privileges.
+ *
+ * @param thread POSIX thread ID.
+ * @param priority requested thread priority.
+ *
+ * @returns 0, if successful; EPERM, if the calling process lacks
+ * required realtime privileges; otherwise some other error number.
+ */
+int jack_acquire_real_time_scheduling (pthread_t thread, int priority);
+
+/**
+ * Create a thread for JACK or one of its clients.  The thread is
+ * created executing @a start_routine with @a arg as its sole
+ * argument.
+ *
+ * @param client the JACK client for whom the thread is being created. May be
+ * NULL if the client is being created within the JACK server.
+ * @param thread place to return POSIX thread ID.
+ * @param priority thread priority, if realtime.
+ * @param realtime true for the thread to use realtime scheduling.  On
+ * some systems that may require special privileges.
+ * @param start_routine function the thread calls when it starts.
+ * @param arg parameter passed to the @a start_routine.
+ *
+ * @returns 0, if successful; otherwise some error number.
+ */
+int jack_client_create_thread (jack_client_t* client,
+                               pthread_t *thread,
+                               int priority,
+                               int realtime, 	/* boolean */
+                               void *(*start_routine)(void*),
+                               void *arg);
+
+/**
+ * Drop realtime scheduling for a thread.
+ *
+ * @param thread POSIX thread ID.
+ *
+ * @returns 0, if successful; otherwise an error number.
+ */
+int jack_drop_real_time_scheduling (pthread_t thread);
+
+/**
+ * Stop the thread, waiting for the thread handler to terminate.
+ *
+ * @param thread POSIX thread ID.
+ *
+ * @returns 0, if successful; otherwise an error number.
+ */
+int jack_client_stop_thread(jack_client_t* client, pthread_t thread);
+
+/**
+ * Cancel the thread then waits for the thread handler to terminate.
+ *
+ * @param thread POSIX thread ID.
+ *
+ * @returns 0, if successful; otherwise an error number.
+ */
+ int jack_client_kill_thread(jack_client_t* client, pthread_t thread);
+
+#ifndef WIN32
+
+ typedef int (*jack_thread_creator_t)(pthread_t*,
+				     const pthread_attr_t*,
+				     void* (*function)(void*),
+				     void* arg);
+/**
+ * This function can be used in very very specialized cases
+ * where it is necessary that client threads created by JACK
+ * are created by something other than pthread_create(). After
+ * it is used, any threads that JACK needs for the client will
+ * will be created by calling the function passed to this
+ * function.
+ *
+ * No normal application/client should consider calling this.
+ * The specific case for which it was created involves running
+ * win32/x86 plugins under Wine on Linux, where it is necessary
+ * that all threads that might call win32 functions are known
+ * to Wine.
+ *
+ * Set it to NULL to restore thread creation function.
+ *
+ * @param creator a function that creates a new thread
+ *
+ */
+void jack_set_thread_creator (jack_thread_creator_t creator);
+
+#endif
+
+/* @} */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __jack_thread_h__ */
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/transport.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/transport.h
new file mode 100644
index 0000000..67bcaa2
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/transport.h
@@ -0,0 +1,246 @@
+/*
+    Copyright (C) 2002 Paul Davis
+    Copyright (C) 2003 Jack O'Quin
+    
+    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.1 of the License, or
+    (at your option) any later version.
+    
+    This program is distributed in the hope that 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef __jack_transport_h__
+#define __jack_transport_h__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <jack/types.h>
+
+/**
+ * @defgroup TransportControl Transport and Timebase control
+ * @{
+ */
+
+/**
+ * Called by the timebase master to release itself from that
+ * responsibility.
+ *
+ * If the timebase master releases the timebase or leaves the JACK
+ * graph for any reason, the JACK engine takes over at the start of
+ * the next process cycle.  The transport state does not change.  If
+ * rolling, it continues to play, with frame numbers as the only
+ * available position information.
+ *
+ * @see jack_set_timebase_callback
+ *
+ * @param client the JACK client structure.
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ */
+int  jack_release_timebase (jack_client_t *client);
+
+/**
+ * Register (or unregister) as a slow-sync client, one that cannot
+ * respond immediately to transport position changes.
+ *
+ * The @a sync_callback will be invoked at the first available
+ * opportunity after its registration is complete.  If the client is
+ * currently active this will be the following process cycle,
+ * otherwise it will be the first cycle after calling jack_activate().
+ * After that, it runs according to the ::JackSyncCallback rules.
+ * Clients that don't set a @a sync_callback are assumed to be ready
+ * immediately any time the transport wants to start.
+ *
+ * @param client the JACK client structure.
+ * @param sync_callback is a realtime function that returns TRUE when
+ * the client is ready.  Setting @a sync_callback to NULL declares that
+ * this client no longer requires slow-sync processing.
+ * @param arg an argument for the @a sync_callback function.
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ */
+int  jack_set_sync_callback (jack_client_t *client,
+			     JackSyncCallback sync_callback,
+			     void *arg);
+
+/**
+ * Set the timeout value for slow-sync clients.
+ *
+ * This timeout prevents unresponsive slow-sync clients from
+ * completely halting the transport mechanism.  The default is two
+ * seconds.  When the timeout expires, the transport starts rolling,
+ * even if some slow-sync clients are still unready.  The @a
+ * sync_callbacks of these clients continue being invoked, giving them
+ * a chance to catch up.
+ *
+ * @see jack_set_sync_callback
+ *
+ * @param client the JACK client structure.
+ * @param timeout is delay (in microseconds) before the timeout expires.
+ *
+ * @return 0 on success, otherwise a non-zero error code.
+ */
+int  jack_set_sync_timeout (jack_client_t *client,
+			    jack_time_t timeout);
+
+/**
+ * Register as timebase master for the JACK subsystem.
+ *
+ * The timebase master registers a callback that updates extended
+ * position information such as beats or timecode whenever necessary.
+ * Without this extended information, there is no need for this
+ * function.
+ *
+ * There is never more than one master at a time.  When a new client
+ * takes over, the former @a timebase_callback is no longer called.
+ * Taking over the timebase may be done conditionally, so it fails if
+ * there was a master already.
+ *
+ * @param client the JACK client structure.
+ * @param conditional non-zero for a conditional request.
+ * @param timebase_callback is a realtime function that returns
+ * position information.
+ * @param arg an argument for the @a timebase_callback function.
+ *
+ * @return
+ *   - 0 on success;
+ *   - EBUSY if a conditional request fails because there was already a
+ *   timebase master;
+ *   - other non-zero error code.
+ */
+int  jack_set_timebase_callback (jack_client_t *client,
+				 int conditional,
+				 JackTimebaseCallback timebase_callback,
+				 void *arg);
+
+/**
+ * Reposition the transport to a new frame number.
+ *
+ * May be called at any time by any client.  The new position takes
+ * effect in two process cycles.  If there are slow-sync clients and
+ * the transport is already rolling, it will enter the
+ * ::JackTransportStarting state and begin invoking their @a
+ * sync_callbacks until ready.  This function is realtime-safe.
+ *
+ * @see jack_transport_reposition, jack_set_sync_callback
+ * 
+ * @param client the JACK client structure.
+ * @param frame frame number of new transport position.
+ *
+ * @return 0 if valid request, non-zero otherwise.
+ */
+int  jack_transport_locate (jack_client_t *client,
+			    jack_nframes_t frame);
+
+/**
+ * Query the current transport state and position.
+ *
+ * This function is realtime-safe, and can be called from any thread.
+ * If called from the process thread, @a pos corresponds to the first
+ * frame of the current cycle and the state returned is valid for the
+ * entire cycle.
+ *
+ * @param client the JACK client structure.
+ * @param pos pointer to structure for returning current transport
+ * position; @a pos->valid will show which fields contain valid data.
+ * If @a pos is NULL, do not return position information.
+ *
+ * @return Current transport state.
+ */
+jack_transport_state_t jack_transport_query (const jack_client_t *client,
+					     jack_position_t *pos);
+
+/**
+ * Return an estimate of the current transport frame,
+ * including any time elapsed since the last transport
+ * positional update.
+ *
+ * @param client the JACK client structure
+ */
+jack_nframes_t jack_get_current_transport_frame (const jack_client_t *client);
+						 
+/**
+ * Request a new transport position.
+ *
+ * May be called at any time by any client.  The new position takes
+ * effect in two process cycles.  If there are slow-sync clients and
+ * the transport is already rolling, it will enter the
+ * ::JackTransportStarting state and begin invoking their @a
+ * sync_callbacks until ready.  This function is realtime-safe.
+ *
+ * @see jack_transport_locate, jack_set_sync_callback
+ * 
+ * @param client the JACK client structure.
+ * @param pos requested new transport position.
+ *
+ * @return 0 if valid request, EINVAL if position structure rejected.
+ */
+int  jack_transport_reposition (jack_client_t *client,
+				jack_position_t *pos);
+
+/**
+ * Start the JACK transport rolling.
+ *
+ * Any client can make this request at any time.  It takes effect no
+ * sooner than the next process cycle, perhaps later if there are
+ * slow-sync clients.  This function is realtime-safe.
+ *
+ * @see jack_set_sync_callback
+ *
+ * @param client the JACK client structure.
+ */
+void jack_transport_start (jack_client_t *client);
+
+/**
+ * Stop the JACK transport.
+ *
+ * Any client can make this request at any time.  It takes effect on
+ * the next process cycle.  This function is realtime-safe.
+ *
+ * @param client the JACK client structure.
+ */
+void jack_transport_stop (jack_client_t *client);
+
+/**
+ * Gets the current transport info structure (deprecated).
+ *
+ * @param client the JACK client structure.
+ * @param tinfo current transport info structure.  The "valid" field
+ * describes which fields contain valid data.
+ *
+ * @deprecated This is for compatibility with the earlier transport
+ * interface.  Use jack_transport_query(), instead.
+ *
+ * @pre Must be called from the process thread.
+ */
+void jack_get_transport_info (jack_client_t *client,
+			      jack_transport_info_t *tinfo);
+
+/**
+ * Set the transport info structure (deprecated).
+ *
+ * @deprecated This function still exists for compatibility with the
+ * earlier transport interface, but it does nothing.  Instead, define
+ * a ::JackTimebaseCallback.
+ */
+void jack_set_transport_info (jack_client_t *client,
+			      jack_transport_info_t *tinfo);
+
+/*@}*/
+	
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __jack_transport_h__ */
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/types.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/types.h
new file mode 100644
index 0000000..fa65ce5
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/jack/types.h
@@ -0,0 +1,647 @@
+/*
+  Copyright (C) 2001 Paul Davis
+  Copyright (C) 2004 Jack O'Quin
+
+  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.1 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+*/
+
+#ifndef __jack_types_h__
+#define __jack_types_h__
+
+#include <jack/systemdeps.h>
+
+
+typedef int32_t jack_shmsize_t;
+
+/**
+ * Type used to represent sample frame counts.
+ */
+typedef uint32_t	jack_nframes_t;
+
+/**
+ * Maximum value that can be stored in jack_nframes_t
+ */
+#define JACK_MAX_FRAMES (4294967295U)	/* This should be UINT32_MAX, but C++ has a problem with that. */
+
+/**
+ * Type used to represent the value of free running
+ * monotonic clock with units of microseconds.
+ */
+typedef uint64_t jack_time_t;
+
+/**
+ *  Maximum size of @a load_init string passed to an internal client
+ *  jack_initialize() function via jack_internal_client_load().
+ */
+#define JACK_LOAD_INIT_LIMIT 1024
+
+/**
+ *  jack_intclient_t is an opaque type representing a loaded internal
+ *  client.  You may only access it using the API provided in @ref
+ *  intclient.h "<jack/intclient.h>".
+ */
+typedef uint64_t jack_intclient_t;
+
+/**
+ *  jack_port_t is an opaque type.  You may only access it using the
+ *  API provided.
+ */
+typedef struct _jack_port jack_port_t;
+
+/**
+ *  jack_client_t is an opaque type.  You may only access it using the
+ *  API provided.
+ */
+typedef struct _jack_client jack_client_t;
+
+/**
+ *  Ports have unique ids. A port registration callback is the only
+ *  place you ever need to know their value.
+ */
+typedef uint32_t jack_port_id_t;
+
+typedef uint32_t jack_port_type_id_t;
+
+/**
+ * Prototype for the client supplied function that is called
+ * by the engine anytime there is work to be done.
+ *
+ * @pre nframes == jack_get_buffer_size()
+ * @pre nframes == pow(2,x)
+ *
+ * @param nframes number of frames to process
+ * @param arg pointer to a client supplied structure
+ *
+ * @return zero on success, non-zero on error
+ */
+typedef int (*JackProcessCallback)(jack_nframes_t nframes, void *arg);
+
+/**
+ * Prototype for the client thread routine called
+ * by the engine when the client is inserted in the graph.
+ *
+ * @param arg pointer to a client supplied structure
+ *
+ */
+typedef void *(*JackThreadCallback)(void* arg);
+
+/**
+ * Prototype for the client supplied function that is called
+ * once after the creation of the thread in which other
+ * callbacks will be made. Special thread characteristics
+ * can be set from this callback, for example. This is a
+ * highly specialized callback and most clients will not
+ * and should not use it.
+ *
+ * @param arg pointer to a client supplied structure
+ *
+ * @return void
+ */
+typedef void (*JackThreadInitCallback)(void *arg);
+
+/**
+ * Prototype for the client supplied function that is called
+ * whenever the processing graph is reordered.
+ *
+ * @param arg pointer to a client supplied structure
+ *
+ * @return zero on success, non-zero on error
+ */
+typedef int (*JackGraphOrderCallback)(void *arg);
+
+/**
+ * Prototype for the client-supplied function that is called whenever
+ * an xrun has occured.
+ *
+ * @see jack_get_xrun_delayed_usecs()
+ *
+ * @param arg pointer to a client supplied structure
+ *
+ * @return zero on success, non-zero on error
+ */
+typedef int (*JackXRunCallback)(void *arg);
+
+/**
+ * Prototype for the @a bufsize_callback that is invoked whenever the
+ * JACK engine buffer size changes.  Although this function is called
+ * in the JACK process thread, the normal process cycle is suspended
+ * during its operation, causing a gap in the audio flow.  So, the @a
+ * bufsize_callback can allocate storage, touch memory not previously
+ * referenced, and perform other operations that are not realtime
+ * safe.
+ *
+ * @param nframes buffer size
+ * @param arg pointer supplied by jack_set_buffer_size_callback().
+ *
+ * @return zero on success, non-zero on error
+ */
+typedef int (*JackBufferSizeCallback)(jack_nframes_t nframes, void *arg);
+
+/**
+ * Prototype for the client supplied function that is called
+ * when the engine sample rate changes.
+ *
+ * @param nframes new engine sample rate
+ * @param arg pointer to a client supplied structure
+ *
+ * @return zero on success, non-zero on error
+ */
+typedef int (*JackSampleRateCallback)(jack_nframes_t nframes, void *arg);
+
+/**
+ * Prototype for the client supplied function that is called
+ * whenever a port is registered or unregistered.
+ *
+ * @param arg pointer to a client supplied structure
+ */
+typedef void (*JackPortRegistrationCallback)(jack_port_id_t port, int, void *arg);
+
+/**
+ * Prototype for the client supplied function that is called
+ * whenever a client is registered or unregistered.
+ *
+ * @param name a null-terminated string containing the client name
+ * @param register non-zero if the client is being registered,
+ *                     zero if the client is being unregistered
+ * @param arg pointer to a client supplied structure
+ */
+typedef void (*JackClientRegistrationCallback)(const char* name, int val, void *arg);
+
+/**
+ * Prototype for the client supplied function that is called
+ * whenever a port is connected or disconnected.
+ *
+ * @param a one of two ports connected or disconnected
+ * @param b one of two ports connected or disconnected
+ * @param connect non-zero if ports were connected
+ *                    zero if ports were disconnected
+ * @param arg pointer to a client supplied data
+ */
+typedef void (*JackPortConnectCallback)(jack_port_id_t a, jack_port_id_t b, int connect, void* arg);
+
+/**
+ * Prototype for the client supplied function that is called
+ * whenever the port name has been changed.
+ *
+ * @param port the port that has been renamed
+ * @param new_name the new name
+ * @param arg pointer to a client supplied structure
+ *
+ * @return zero on success, non-zero on error
+ */
+typedef int (*JackPortRenameCallback)(jack_port_id_t port, const char* new_name, void *arg);
+
+/**
+ * Prototype for the client supplied function that is called
+ * whenever jackd starts or stops freewheeling.
+ *
+ * @param starting non-zero if we start starting to freewheel, zero otherwise
+ * @param arg pointer to a client supplied structure
+ */
+typedef void (*JackFreewheelCallback)(int starting, void *arg);
+
+/**
+ * Prototype for the client supplied function that is called
+ * whenever jackd is shutdown. Note that after server shutdown, 
+ * the client pointer is *not* deallocated by libjack,
+ * the application is responsible to properly use jack_client_close()
+ * to release client ressources. Warning: jack_client_close() cannot be
+ * safely used inside the shutdown callback and has to be called outside of
+ * the callback context.
+ *
+ * @param arg pointer to a client supplied structure
+ */
+typedef void (*JackShutdownCallback)(void *arg);
+
+/**
+ * Used for the type argument of jack_port_register() for default
+ * audio ports and midi ports.
+ */
+#define JACK_DEFAULT_AUDIO_TYPE "32 bit float mono audio"
+#define JACK_DEFAULT_MIDI_TYPE "8 bit raw midi"
+
+/**
+ * For convenience, use this typedef if you want to be able to change
+ * between float and double. You may want to typedef sample_t to
+ * jack_default_audio_sample_t in your application.
+ */
+typedef float jack_default_audio_sample_t;
+
+/**
+ *  A port has a set of flags that are formed by AND-ing together the
+ *  desired values from the list below. The flags "JackPortIsInput" and
+ *  "JackPortIsOutput" are mutually exclusive and it is an error to use
+ *  them both.
+ */
+enum JackPortFlags {
+
+    /**
+     * if JackPortIsInput is set, then the port can receive
+     * data.
+     */
+    JackPortIsInput = 0x1,
+
+    /**
+     * if JackPortIsOutput is set, then data can be read from
+     * the port.
+     */
+    JackPortIsOutput = 0x2,
+
+    /**
+     * if JackPortIsPhysical is set, then the port corresponds
+     * to some kind of physical I/O connector.
+     */
+    JackPortIsPhysical = 0x4,
+
+    /**
+     * if JackPortCanMonitor is set, then a call to
+     * jack_port_request_monitor() makes sense.
+     *
+     * Precisely what this means is dependent on the client. A typical
+     * result of it being called with TRUE as the second argument is
+     * that data that would be available from an output port (with
+     * JackPortIsPhysical set) is sent to a physical output connector
+     * as well, so that it can be heard/seen/whatever.
+     *
+     * Clients that do not control physical interfaces
+     * should never create ports with this bit set.
+     */
+    JackPortCanMonitor = 0x8,
+
+    /**
+     * JackPortIsTerminal means:
+     *
+     *	for an input port: the data received by the port
+     *                    will not be passed on or made
+     *		           available at any other port
+     *
+     * for an output port: the data available at the port
+     *                    does not originate from any other port
+     *
+     * Audio synthesizers, I/O hardware interface clients, HDR
+     * systems are examples of clients that would set this flag for
+     * their ports.
+     */
+    JackPortIsTerminal = 0x10
+};
+
+/**
+ *  @ref jack_options_t bits
+ */
+enum JackOptions {
+
+    /**
+     * Null value to use when no option bits are needed.
+     */
+    JackNullOption = 0x00,
+
+    /**
+     * Do not automatically start the JACK server when it is not
+     * already running.  This option is always selected if
+     * \$JACK_NO_START_SERVER is defined in the calling process
+     * environment.
+     */
+    JackNoStartServer = 0x01,
+
+    /**
+     * Use the exact client name requested.  Otherwise, JACK
+     * automatically generates a unique one, if needed.
+     */
+    JackUseExactName = 0x02,
+
+    /**
+     * Open with optional <em>(char *) server_name</em> parameter.
+     */
+    JackServerName = 0x04,
+
+    /**
+     * Load internal client from optional <em>(char *)
+     * load_name</em>.  Otherwise use the @a client_name.
+     */
+    JackLoadName = 0x08,
+
+    /**
+     * Pass optional <em>(char *) load_init</em> string to the
+     * jack_initialize() entry point of an internal client.
+     */
+    JackLoadInit = 0x10
+};
+
+/** Valid options for opening an external client. */
+#define JackOpenOptions (JackServerName|JackNoStartServer|JackUseExactName)
+
+/** Valid options for loading an internal client. */
+#define JackLoadOptions (JackLoadInit|JackLoadName|JackUseExactName)
+
+/**
+ *  Options for several JACK operations, formed by OR-ing together the
+ *  relevant @ref JackOptions bits.
+ */
+typedef enum JackOptions jack_options_t;
+
+/**
+ *  @ref jack_status_t bits
+ */
+enum JackStatus {
+
+    /**
+     * Overall operation failed.
+     */
+    JackFailure = 0x01,
+
+    /**
+     * The operation contained an invalid or unsupported option.
+     */
+    JackInvalidOption = 0x02,
+
+    /**
+     * The desired client name was not unique.  With the @ref
+     * JackUseExactName option this situation is fatal.  Otherwise,
+     * the name was modified by appending a dash and a two-digit
+     * number in the range "-01" to "-99".  The
+     * jack_get_client_name() function will return the exact string
+     * that was used.  If the specified @a client_name plus these
+     * extra characters would be too long, the open fails instead.
+     */
+    JackNameNotUnique = 0x04,
+
+    /**
+     * The JACK server was started as a result of this operation.
+     * Otherwise, it was running already.  In either case the caller
+     * is now connected to jackd, so there is no race condition.
+     * When the server shuts down, the client will find out.
+     */
+    JackServerStarted = 0x08,
+
+    /**
+     * Unable to connect to the JACK server.
+     */
+    JackServerFailed = 0x10,
+
+    /**
+     * Communication error with the JACK server.
+     */
+    JackServerError = 0x20,
+
+    /**
+     * Requested client does not exist.
+     */
+    JackNoSuchClient = 0x40,
+
+    /**
+     * Unable to load internal client
+     */
+    JackLoadFailure = 0x80,
+
+    /**
+     * Unable to initialize client
+     */
+    JackInitFailure = 0x100,
+
+    /**
+     * Unable to access shared memory
+     */
+    JackShmFailure = 0x200,
+
+    /**
+     * Client's protocol version does not match
+     */
+    JackVersionError = 0x400
+};
+
+/**
+ *  Status word returned from several JACK operations, formed by
+ *  OR-ing together the relevant @ref JackStatus bits.
+ */
+typedef enum JackStatus jack_status_t;
+
+/**
+ * Transport states.
+ */
+typedef enum {
+
+    /* the order matters for binary compatibility */
+    JackTransportStopped = 0,       /**< Transport halted */
+    JackTransportRolling = 1,       /**< Transport playing */
+    JackTransportLooping = 2,       /**< For OLD_TRANSPORT, now ignored */
+    JackTransportStarting = 3,      /**< Waiting for sync ready */
+    JackTransportNetStarting = 4, 	/**< Waiting for sync ready on the network*/
+
+} jack_transport_state_t;
+
+typedef uint64_t jack_unique_t;		/**< Unique ID (opaque) */
+
+/**
+ * Optional struct jack_position_t fields.
+ */
+typedef enum {
+
+    JackPositionBBT = 0x10,  	/**< Bar, Beat, Tick */
+    JackPositionTimecode = 0x20,	/**< External timecode */
+    JackBBTFrameOffset =      0x40,	/**< Frame offset of BBT information */
+    JackAudioVideoRatio =     0x80, /**< audio frames per video frame */
+    JackVideoFrameOffset =   0x100  /**< frame offset of first video frame */
+    
+} jack_position_bits_t;
+
+/** all valid position bits */
+#define JACK_POSITION_MASK (JackPositionBBT|JackPositionTimecode)
+#define EXTENDED_TIME_INFO
+
+typedef struct {
+
+    /* these four cannot be set from clients: the server sets them */
+    jack_unique_t	unique_1;	/**< unique ID */
+    jack_time_t		usecs;		/**< monotonic, free-rolling */
+    jack_nframes_t	frame_rate;	/**< current frame rate (per second) */
+    jack_nframes_t	frame;		/**< frame number, always present */
+
+    jack_position_bits_t valid;		/**< which other fields are valid */
+
+    /* JackPositionBBT fields: */
+    int32_t		bar;		/**< current bar */
+    int32_t		beat;		/**< current beat-within-bar */
+    int32_t		tick;		/**< current tick-within-beat */
+    double		bar_start_tick;
+
+    float		beats_per_bar;	/**< time signature "numerator" */
+    float		beat_type;	/**< time signature "denominator" */
+    double		ticks_per_beat;
+    double		beats_per_minute;
+
+    /* JackPositionTimecode fields:	(EXPERIMENTAL: could change) */
+    double		frame_time;	/**< current time in seconds */
+    double		next_time;	/**< next sequential frame_time
+                         (unless repositioned) */
+
+    /* JackBBTFrameOffset fields: */
+    jack_nframes_t	bbt_offset;	/**< frame offset for the BBT fields
+                         (the given bar, beat, and tick
+                         values actually refer to a time
+                         frame_offset frames before the
+                         start of the cycle), should
+                         be assumed to be 0 if
+                         JackBBTFrameOffset is not
+                         set. If JackBBTFrameOffset is
+                         set and this value is zero, the BBT
+                         time refers to the first frame of this
+                         cycle. If the value is positive,
+                         the BBT time refers to a frame that
+                         many frames before the start of the
+                         cycle. */
+
+    /* JACK video positional data (experimental) */
+
+    float               audio_frames_per_video_frame; /**< number of audio frames
+                         per video frame. Should be assumed
+                         zero if JackAudioVideoRatio is not
+                         set. If JackAudioVideoRatio is set
+                         and the value is zero, no video
+                         data exists within the JACK graph */
+
+    jack_nframes_t      video_offset;   /**< audio frame at which the first video
+                         frame in this cycle occurs. Should
+                         be assumed to be 0 if JackVideoFrameOffset
+                         is not set. If JackVideoFrameOffset is
+                         set, but the value is zero, there is
+                         no video frame within this cycle. */
+
+    /* For binary compatibility, new fields should be allocated from
+     * this padding area with new valid bits controlling access, so
+     * the existing structure size and offsets are preserved. */
+    int32_t		padding[7];
+
+    /* When (unique_1 == unique_2) the contents are consistent. */
+    jack_unique_t	unique_2;	/**< unique ID */
+
+} jack_position_t;
+
+/**
+    * Prototype for the @a sync_callback defined by slow-sync clients.
+    * When the client is active, this callback is invoked just before
+    * process() in the same thread.  This occurs once after registration,
+    * then subsequently whenever some client requests a new position, or
+    * the transport enters the ::JackTransportStarting state.  This
+    * realtime function must not wait.
+    *
+    * The transport @a state will be:
+    *
+    *   - ::JackTransportStopped when a new position is requested;
+    *   - ::JackTransportStarting when the transport is waiting to start;
+    *   - ::JackTransportRolling when the timeout has expired, and the
+    *   position is now a moving target.
+    *
+    * @param state current transport state.
+    * @param pos new transport position.
+    * @param arg the argument supplied by jack_set_sync_callback().
+    *
+    * @return TRUE (non-zero) when ready to roll.
+    */
+typedef int (*JackSyncCallback)(jack_transport_state_t state,
+                                jack_position_t *pos,
+                                void *arg);
+
+
+/**
+  * Prototype for the @a timebase_callback used to provide extended
+  * position information.  Its output affects all of the following
+  * process cycle.  This realtime function must not wait.
+  *
+  * This function is called immediately after process() in the same
+  * thread whenever the transport is rolling, or when any client has
+  * requested a new position in the previous cycle.  The first cycle
+  * after jack_set_timebase_callback() is also treated as a new
+  * position, or the first cycle after jack_activate() if the client
+  * had been inactive.
+  *
+  * The timebase master may not use its @a pos argument to set @a
+  * pos->frame.  To change position, use jack_transport_reposition() or
+  * jack_transport_locate().  These functions are realtime-safe, the @a
+  * timebase_callback can call them directly.
+  *
+  * @param state current transport state.
+  * @param nframes number of frames in current period.
+  * @param pos address of the position structure for the next cycle; @a
+  * pos->frame will be its frame number.  If @a new_pos is FALSE, this
+  * structure contains extended position information from the current
+  * cycle.  If TRUE, it contains whatever was set by the requester.
+  * The @a timebase_callback's task is to update the extended
+  * information here.
+  * @param new_pos TRUE (non-zero) for a newly requested @a pos, or for
+  * the first cycle after the @a timebase_callback is defined.
+  * @param arg the argument supplied by jack_set_timebase_callback().
+  */
+typedef void (*JackTimebaseCallback)(jack_transport_state_t state,
+                                     jack_nframes_t nframes,
+                                     jack_position_t *pos,
+                                     int new_pos,
+                                     void *arg);
+
+/*********************************************************************
+    * The following interfaces are DEPRECATED.  They are only provided
+    * for compatibility with the earlier JACK transport implementation.
+    *********************************************************************/
+
+/**
+ * Optional struct jack_transport_info_t fields.
+ *
+ * @see jack_position_bits_t.
+ */
+typedef enum {
+
+    JackTransportState = 0x1,  	/**< Transport state */
+    JackTransportPosition = 0x2,  	/**< Frame number */
+    JackTransportLoop = 0x4,  	/**< Loop boundaries (ignored) */
+    JackTransportSMPTE = 0x8,  	/**< SMPTE (ignored) */
+    JackTransportBBT = 0x10	/**< Bar, Beat, Tick */
+
+} jack_transport_bits_t;
+
+/**
+ * Deprecated struct for transport position information.
+ *
+ * @deprecated This is for compatibility with the earlier transport
+ * interface.  Use the jack_position_t struct, instead.
+ */
+typedef struct {
+
+    /* these two cannot be set from clients: the server sets them */
+
+    jack_nframes_t frame_rate;		/**< current frame rate (per second) */
+    jack_time_t usecs;		/**< monotonic, free-rolling */
+
+    jack_transport_bits_t valid;	/**< which fields are legal to read */
+    jack_transport_state_t transport_state;
+    jack_nframes_t frame;
+    jack_nframes_t loop_start;
+    jack_nframes_t loop_end;
+
+    long smpte_offset;	/**< SMPTE offset (from frame 0) */
+    float smpte_frame_rate;	/**< 29.97, 30, 24 etc. */
+
+    int bar;
+    int beat;
+    int tick;
+    double bar_start_tick;
+
+    float beats_per_bar;
+    float beat_type;
+    double ticks_per_beat;
+    double beats_per_minute;
+
+} jack_transport_info_t;
+
+#endif /* __jack_types_h__ */
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/pthread.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/pthread.h
new file mode 100644
index 0000000..9f2868b
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/pthread.h
@@ -0,0 +1,1368 @@
+/* This is an implementation of the threads API of POSIX 1003.1-2001.
+ *
+ * --------------------------------------------------------------------------
+ *
+ *      Pthreads-win32 - POSIX Threads Library for Win32
+ *      Copyright(C) 1998 John E. Bossom
+ *      Copyright(C) 1999,2005 Pthreads-win32 contributors
+ * 
+ *      Contact Email: rpj at callisto.canberra.edu.au
+ * 
+ *      The current list of contributors is contained
+ *      in the file CONTRIBUTORS included with the source
+ *      code distribution. The list can also be seen at the
+ *      following World Wide Web location:
+ *      http://sources.redhat.com/pthreads-win32/contributors.html
+ * 
+ *      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 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 in the file COPYING.LIB;
+ *      if not, write to the Free Software Foundation, Inc.,
+ *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+
+#if !defined( PTHREAD_H )
+#define PTHREAD_H
+
+/*
+ * See the README file for an explanation of the pthreads-win32 version
+ * numbering scheme and how the DLL is named etc.
+ */
+#define PTW32_VERSION 2,8,0,0
+#define PTW32_VERSION_STRING "2, 8, 0, 0\0"
+
+/* There are three implementations of cancel cleanup.
+ * Note that pthread.h is included in both application
+ * compilation units and also internally for the library.
+ * The code here and within the library aims to work
+ * for all reasonable combinations of environments.
+ *
+ * The three implementations are:
+ *
+ *   WIN32 SEH
+ *   C
+ *   C++
+ *
+ * Please note that exiting a push/pop block via
+ * "return", "exit", "break", or "continue" will
+ * lead to different behaviour amongst applications
+ * depending upon whether the library was built
+ * using SEH, C++, or C. For example, a library built
+ * with SEH will call the cleanup routine, while both
+ * C++ and C built versions will not.
+ */
+
+/*
+ * Define defaults for cleanup code.
+ * Note: Unless the build explicitly defines one of the following, then
+ * we default to standard C style cleanup. This style uses setjmp/longjmp
+ * in the cancelation and thread exit implementations and therefore won't
+ * do stack unwinding if linked to applications that have it (e.g.
+ * C++ apps). This is currently consistent with most/all commercial Unix
+ * POSIX threads implementations.
+ */
+#if !defined( __CLEANUP_SEH ) && !defined( __CLEANUP_CXX ) && !defined( __CLEANUP_C )
+# define __CLEANUP_C
+#endif
+
+#if defined( __CLEANUP_SEH ) && ( !defined( _MSC_VER ) && !defined(PTW32_RC_MSC))
+#error ERROR [__FILE__, line __LINE__]: SEH is not supported for this compiler.
+#endif
+
+/*
+ * Stop here if we are being included by the resource compiler.
+ */
+#ifndef RC_INVOKED
+
+#undef PTW32_LEVEL
+
+#if defined(_POSIX_SOURCE)
+#define PTW32_LEVEL 0
+/* Early POSIX */
+#endif
+
+#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
+#undef PTW32_LEVEL
+#define PTW32_LEVEL 1
+/* Include 1b, 1c and 1d */
+#endif
+
+#if defined(INCLUDE_NP)
+#undef PTW32_LEVEL
+#define PTW32_LEVEL 2
+/* Include Non-Portable extensions */
+#endif
+
+#define PTW32_LEVEL_MAX 3
+
+#if !defined(PTW32_LEVEL)
+#define PTW32_LEVEL PTW32_LEVEL_MAX
+/* Include everything */
+#endif
+
+#ifdef _UWIN
+#   define HAVE_STRUCT_TIMESPEC 1
+#   define HAVE_SIGNAL_H        1
+#   undef HAVE_CONFIG_H
+#   pragma comment(lib, "pthread")
+#endif
+
+/*
+ * -------------------------------------------------------------
+ *
+ *
+ * Module: pthread.h
+ *
+ * Purpose:
+ *      Provides an implementation of PThreads based upon the
+ *      standard:
+ *
+ *              POSIX 1003.1-2001
+ *  and
+ *    The Single Unix Specification version 3
+ *
+ *    (these two are equivalent)
+ *
+ *      in order to enhance code portability between Windows,
+ *  various commercial Unix implementations, and Linux.
+ *
+ *      See the ANNOUNCE file for a full list of conforming
+ *      routines and defined constants, and a list of missing
+ *      routines and constants not defined in this implementation.
+ *
+ * Authors:
+ *      There have been many contributors to this library.
+ *      The initial implementation was contributed by
+ *      John Bossom, and several others have provided major
+ *      sections or revisions of parts of the implementation.
+ *      Often significant effort has been contributed to
+ *      find and fix important bugs and other problems to
+ *      improve the reliability of the library, which sometimes
+ *      is not reflected in the amount of code which changed as
+ *      result.
+ *      As much as possible, the contributors are acknowledged
+ *      in the ChangeLog file in the source code distribution
+ *      where their changes are noted in detail.
+ *
+ *      Contributors are listed in the CONTRIBUTORS file.
+ *
+ *      As usual, all bouquets go to the contributors, and all
+ *      brickbats go to the project maintainer.
+ *
+ * Maintainer:
+ *      The code base for this project is coordinated and
+ *      eventually pre-tested, packaged, and made available by
+ *
+ *              Ross Johnson <rpj at callisto.canberra.edu.au>
+ *
+ * QA Testers:
+ *      Ultimately, the library is tested in the real world by
+ *      a host of competent and demanding scientists and
+ *      engineers who report bugs and/or provide solutions
+ *      which are then fixed or incorporated into subsequent
+ *      versions of the library. Each time a bug is fixed, a
+ *      test case is written to prove the fix and ensure
+ *      that later changes to the code don't reintroduce the
+ *      same error. The number of test cases is slowly growing
+ *      and therefore so is the code reliability.
+ *
+ * Compliance:
+ *      See the file ANNOUNCE for the list of implemented
+ *      and not-implemented routines and defined options.
+ *      Of course, these are all defined is this file as well.
+ *
+ * Web site:
+ *      The source code and other information about this library
+ *      are available from
+ *
+ *              http://sources.redhat.com/pthreads-win32/
+ *
+ * -------------------------------------------------------------
+ */
+
+/* Try to avoid including windows.h */
+#if defined(__MINGW32__) && defined(__cplusplus)
+#define PTW32_INCLUDE_WINDOWS_H
+#endif
+
+#ifdef PTW32_INCLUDE_WINDOWS_H
+#include <windows.h>
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER < 1300 || defined(__DMC__)
+/*
+ * VC++6.0 or early compiler's header has no DWORD_PTR type.
+ */
+typedef unsigned long DWORD_PTR;
+#endif
+/*
+ * -----------------
+ * autoconf switches
+ * -----------------
+ */
+
+#if HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+#ifndef NEED_FTIME
+#include <time.h>
+#else /* NEED_FTIME */
+/* use native WIN32 time API */
+#endif /* NEED_FTIME */
+
+#if HAVE_SIGNAL_H
+#include <signal.h>
+#endif /* HAVE_SIGNAL_H */
+
+#include <setjmp.h>
+#include <limits.h>
+
+/*
+ * Boolean values to make us independent of system includes.
+ */
+enum {
+  PTW32_FALSE = 0,
+  PTW32_TRUE = (! PTW32_FALSE)
+};
+
+/*
+ * This is a duplicate of what is in the autoconf config.h,
+ * which is only used when building the pthread-win32 libraries.
+ */
+
+#ifndef PTW32_CONFIG_H
+#  if defined(WINCE)
+#    define NEED_ERRNO
+#    define NEED_SEM
+#  endif
+#  if defined(_UWIN) || defined(__MINGW32__)
+#    define HAVE_MODE_T
+#  endif
+#endif
+
+/*
+ *
+ */
+
+#if PTW32_LEVEL >= PTW32_LEVEL_MAX
+#ifdef NEED_ERRNO
+#include "need_errno.h"
+#else
+#include <errno.h>
+#endif
+#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
+
+/*
+ * Several systems don't define some error numbers.
+ */
+#ifndef ENOTSUP
+#  define ENOTSUP 48   /* This is the value in Solaris. */
+#endif
+
+#ifndef ETIMEDOUT
+#  define ETIMEDOUT 10060     /* This is the value in winsock.h. */
+#endif
+
+#ifndef ENOSYS
+#  define ENOSYS 140     /* Semi-arbitrary value */
+#endif
+
+#ifndef EDEADLK
+#  ifdef EDEADLOCK
+#    define EDEADLK EDEADLOCK
+#  else
+#    define EDEADLK 36     /* This is the value in MSVC. */
+#  endif
+#endif
+
+#include <sched.h>
+
+/*
+ * To avoid including windows.h we define only those things that we
+ * actually need from it.
+ */
+#ifndef PTW32_INCLUDE_WINDOWS_H
+#ifndef HANDLE
+# define PTW32__HANDLE_DEF
+# define HANDLE void *
+#endif
+#ifndef DWORD
+# define PTW32__DWORD_DEF
+# define DWORD unsigned long
+#endif
+#endif
+
+#ifndef HAVE_STRUCT_TIMESPEC
+#define HAVE_STRUCT_TIMESPEC 1
+struct timespec {
+        long tv_sec;
+        long tv_nsec;
+};
+#endif /* HAVE_STRUCT_TIMESPEC */
+
+#ifndef SIG_BLOCK
+#define SIG_BLOCK 0
+#endif /* SIG_BLOCK */
+
+#ifndef SIG_UNBLOCK 
+#define SIG_UNBLOCK 1
+#endif /* SIG_UNBLOCK */
+
+#ifndef SIG_SETMASK
+#define SIG_SETMASK 2
+#endif /* SIG_SETMASK */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif                          /* __cplusplus */
+
+/*
+ * -------------------------------------------------------------
+ *
+ * POSIX 1003.1-2001 Options
+ * =========================
+ *
+ * Options are normally set in <unistd.h>, which is not provided
+ * with pthreads-win32.
+ *
+ * For conformance with the Single Unix Specification (version 3), all of the
+ * options below are defined, and have a value of either -1 (not supported)
+ * or 200112L (supported).
+ *
+ * These options can neither be left undefined nor have a value of 0, because
+ * either indicates that sysconf(), which is not implemented, may be used at
+ * runtime to check the status of the option.
+ *
+ * _POSIX_THREADS (== 200112L)
+ *                      If == 200112L, you can use threads
+ *
+ * _POSIX_THREAD_ATTR_STACKSIZE (== 200112L)
+ *                      If == 200112L, you can control the size of a thread's
+ *                      stack
+ *                              pthread_attr_getstacksize
+ *                              pthread_attr_setstacksize
+ *
+ * _POSIX_THREAD_ATTR_STACKADDR (== -1)
+ *                      If == 200112L, you can allocate and control a thread's
+ *                      stack. If not supported, the following functions
+ *                      will return ENOSYS, indicating they are not
+ *                      supported:
+ *                              pthread_attr_getstackaddr
+ *                              pthread_attr_setstackaddr
+ *
+ * _POSIX_THREAD_PRIORITY_SCHEDULING (== -1)
+ *                      If == 200112L, you can use realtime scheduling.
+ *                      This option indicates that the behaviour of some
+ *                      implemented functions conforms to the additional TPS
+ *                      requirements in the standard. E.g. rwlocks favour
+ *                      writers over readers when threads have equal priority.
+ *
+ * _POSIX_THREAD_PRIO_INHERIT (== -1)
+ *                      If == 200112L, you can create priority inheritance
+ *                      mutexes.
+ *                              pthread_mutexattr_getprotocol +
+ *                              pthread_mutexattr_setprotocol +
+ *
+ * _POSIX_THREAD_PRIO_PROTECT (== -1)
+ *                      If == 200112L, you can create priority ceiling mutexes
+ *                      Indicates the availability of:
+ *                              pthread_mutex_getprioceiling
+ *                              pthread_mutex_setprioceiling
+ *                              pthread_mutexattr_getprioceiling
+ *                              pthread_mutexattr_getprotocol     +
+ *                              pthread_mutexattr_setprioceiling
+ *                              pthread_mutexattr_setprotocol     +
+ *
+ * _POSIX_THREAD_PROCESS_SHARED (== -1)
+ *                      If set, you can create mutexes and condition
+ *                      variables that can be shared with another
+ *                      process.If set, indicates the availability
+ *                      of:
+ *                              pthread_mutexattr_getpshared
+ *                              pthread_mutexattr_setpshared
+ *                              pthread_condattr_getpshared
+ *                              pthread_condattr_setpshared
+ *
+ * _POSIX_THREAD_SAFE_FUNCTIONS (== 200112L)
+ *                      If == 200112L you can use the special *_r library
+ *                      functions that provide thread-safe behaviour
+ *
+ * _POSIX_READER_WRITER_LOCKS (== 200112L)
+ *                      If == 200112L, you can use read/write locks
+ *
+ * _POSIX_SPIN_LOCKS (== 200112L)
+ *                      If == 200112L, you can use spin locks
+ *
+ * _POSIX_BARRIERS (== 200112L)
+ *                      If == 200112L, you can use barriers
+ *
+ *      + These functions provide both 'inherit' and/or
+ *        'protect' protocol, based upon these macro
+ *        settings.
+ *
+ * -------------------------------------------------------------
+ */
+
+/*
+ * POSIX Options
+ */
+#undef _POSIX_THREADS
+#define _POSIX_THREADS 200112L
+
+#undef _POSIX_READER_WRITER_LOCKS
+#define _POSIX_READER_WRITER_LOCKS 200112L
+
+#undef _POSIX_SPIN_LOCKS
+#define _POSIX_SPIN_LOCKS 200112L
+
+#undef _POSIX_BARRIERS
+#define _POSIX_BARRIERS 200112L
+
+#undef _POSIX_THREAD_SAFE_FUNCTIONS
+#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L
+
+#undef _POSIX_THREAD_ATTR_STACKSIZE
+#define _POSIX_THREAD_ATTR_STACKSIZE 200112L
+
+/*
+ * The following options are not supported
+ */
+#undef _POSIX_THREAD_ATTR_STACKADDR
+#define _POSIX_THREAD_ATTR_STACKADDR -1
+
+#undef _POSIX_THREAD_PRIO_INHERIT
+#define _POSIX_THREAD_PRIO_INHERIT -1
+
+#undef _POSIX_THREAD_PRIO_PROTECT
+#define _POSIX_THREAD_PRIO_PROTECT -1
+
+/* TPS is not fully supported.  */
+#undef _POSIX_THREAD_PRIORITY_SCHEDULING
+#define _POSIX_THREAD_PRIORITY_SCHEDULING -1
+
+#undef _POSIX_THREAD_PROCESS_SHARED
+#define _POSIX_THREAD_PROCESS_SHARED -1
+
+
+/*
+ * POSIX 1003.1-2001 Limits
+ * ===========================
+ *
+ * These limits are normally set in <limits.h>, which is not provided with
+ * pthreads-win32.
+ *
+ * PTHREAD_DESTRUCTOR_ITERATIONS
+ *                      Maximum number of attempts to destroy
+ *                      a thread's thread-specific data on
+ *                      termination (must be at least 4)
+ *
+ * PTHREAD_KEYS_MAX
+ *                      Maximum number of thread-specific data keys
+ *                      available per process (must be at least 128)
+ *
+ * PTHREAD_STACK_MIN
+ *                      Minimum supported stack size for a thread
+ *
+ * PTHREAD_THREADS_MAX
+ *                      Maximum number of threads supported per
+ *                      process (must be at least 64).
+ *
+ * SEM_NSEMS_MAX
+ *                      The maximum number of semaphores a process can have.
+ *                      (must be at least 256)
+ *
+ * SEM_VALUE_MAX
+ *                      The maximum value a semaphore can have.
+ *                      (must be at least 32767)
+ *
+ */
+#undef _POSIX_THREAD_DESTRUCTOR_ITERATIONS
+#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS     4
+
+#undef PTHREAD_DESTRUCTOR_ITERATIONS
+#define PTHREAD_DESTRUCTOR_ITERATIONS           _POSIX_THREAD_DESTRUCTOR_ITERATIONS
+
+#undef _POSIX_THREAD_KEYS_MAX
+#define _POSIX_THREAD_KEYS_MAX                  128
+
+#undef PTHREAD_KEYS_MAX
+#define PTHREAD_KEYS_MAX                        _POSIX_THREAD_KEYS_MAX
+
+#undef PTHREAD_STACK_MIN
+#define PTHREAD_STACK_MIN                       0
+
+#undef _POSIX_THREAD_THREADS_MAX
+#define _POSIX_THREAD_THREADS_MAX               64
+
+  /* Arbitrary value */
+#undef PTHREAD_THREADS_MAX
+#define PTHREAD_THREADS_MAX                     2019
+
+#undef _POSIX_SEM_NSEMS_MAX
+#define _POSIX_SEM_NSEMS_MAX                    256
+
+  /* Arbitrary value */
+#undef SEM_NSEMS_MAX
+#define SEM_NSEMS_MAX                           1024
+
+#undef _POSIX_SEM_VALUE_MAX
+#define _POSIX_SEM_VALUE_MAX                    32767
+
+#undef SEM_VALUE_MAX
+#define SEM_VALUE_MAX                           INT_MAX
+
+
+#if __GNUC__ && ! defined (__declspec)
+# error Please upgrade your GNU compiler to one that supports __declspec.
+#endif
+
+/*
+ * When building the DLL code, you should define PTW32_BUILD so that
+ * the variables/functions are exported correctly. When using the DLL,
+ * do NOT define PTW32_BUILD, and then the variables/functions will
+ * be imported correctly.
+ */
+#ifndef PTW32_STATIC_LIB
+#  ifdef PTW32_BUILD
+#    define PTW32_DLLPORT __declspec (dllexport)
+#  else
+#    define PTW32_DLLPORT __declspec (dllimport)
+#  endif
+#else
+#  define PTW32_DLLPORT
+#endif
+
+/*
+ * The Open Watcom C/C++ compiler uses a non-standard calling convention
+ * that passes function args in registers unless __cdecl is explicitly specified
+ * in exposed function prototypes.
+ *
+ * We force all calls to cdecl even though this could slow Watcom code down
+ * slightly. If you know that the Watcom compiler will be used to build both
+ * the DLL and application, then you can probably define this as a null string.
+ * Remember that pthread.h (this file) is used for both the DLL and application builds.
+ */
+#define PTW32_CDECL __cdecl
+
+#if defined(_UWIN) && PTW32_LEVEL >= PTW32_LEVEL_MAX
+#   include     <sys/types.h>
+#else
+/*
+ * Generic handle type - intended to extend uniqueness beyond
+ * that available with a simple pointer. It should scale for either
+ * IA-32 or IA-64.
+ */
+typedef struct {
+    void * p;                   /* Pointer to actual object */
+    unsigned int x;             /* Extra information - reuse count etc */
+} ptw32_handle_t;
+
+typedef ptw32_handle_t pthread_t;
+typedef struct pthread_attr_t_ * pthread_attr_t;
+typedef struct pthread_once_t_ pthread_once_t;
+typedef struct pthread_key_t_ * pthread_key_t;
+typedef struct pthread_mutex_t_ * pthread_mutex_t;
+typedef struct pthread_mutexattr_t_ * pthread_mutexattr_t;
+typedef struct pthread_cond_t_ * pthread_cond_t;
+typedef struct pthread_condattr_t_ * pthread_condattr_t;
+#endif
+typedef struct pthread_rwlock_t_ * pthread_rwlock_t;
+typedef struct pthread_rwlockattr_t_ * pthread_rwlockattr_t;
+typedef struct pthread_spinlock_t_ * pthread_spinlock_t;
+typedef struct pthread_barrier_t_ * pthread_barrier_t;
+typedef struct pthread_barrierattr_t_ * pthread_barrierattr_t;
+
+/*
+ * ====================
+ * ====================
+ * POSIX Threads
+ * ====================
+ * ====================
+ */
+
+enum {
+/*
+ * pthread_attr_{get,set}detachstate
+ */
+  PTHREAD_CREATE_JOINABLE       = 0,  /* Default */
+  PTHREAD_CREATE_DETACHED       = 1,
+
+/*
+ * pthread_attr_{get,set}inheritsched
+ */
+  PTHREAD_INHERIT_SCHED         = 0,
+  PTHREAD_EXPLICIT_SCHED        = 1,  /* Default */
+
+/*
+ * pthread_{get,set}scope
+ */
+  PTHREAD_SCOPE_PROCESS         = 0,
+  PTHREAD_SCOPE_SYSTEM          = 1,  /* Default */
+
+/*
+ * pthread_setcancelstate paramters
+ */
+  PTHREAD_CANCEL_ENABLE         = 0,  /* Default */
+  PTHREAD_CANCEL_DISABLE        = 1,
+
+/*
+ * pthread_setcanceltype parameters
+ */
+  PTHREAD_CANCEL_ASYNCHRONOUS   = 0,
+  PTHREAD_CANCEL_DEFERRED       = 1,  /* Default */
+
+/*
+ * pthread_mutexattr_{get,set}pshared
+ * pthread_condattr_{get,set}pshared
+ */
+  PTHREAD_PROCESS_PRIVATE       = 0,
+  PTHREAD_PROCESS_SHARED        = 1,
+
+/*
+ * pthread_barrier_wait
+ */
+  PTHREAD_BARRIER_SERIAL_THREAD = -1
+};
+
+/*
+ * ====================
+ * ====================
+ * Cancelation
+ * ====================
+ * ====================
+ */
+#define PTHREAD_CANCELED       ((void *) -1)
+
+
+/*
+ * ====================
+ * ====================
+ * Once Key
+ * ====================
+ * ====================
+ */
+#define PTHREAD_ONCE_INIT       { PTW32_FALSE, 0, 0, 0}
+
+struct pthread_once_t_
+{
+  int          done;        /* indicates if user function has been executed */
+  void *       lock;
+  int          reserved1;
+  int          reserved2;
+};
+
+
+/*
+ * ====================
+ * ====================
+ * Object initialisers
+ * ====================
+ * ====================
+ */
+#define PTHREAD_MUTEX_INITIALIZER ((pthread_mutex_t) -1)
+#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER ((pthread_mutex_t) -2)
+#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER ((pthread_mutex_t) -3)
+
+/*
+ * Compatibility with LinuxThreads
+ */
+#define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+#define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP PTHREAD_ERRORCHECK_MUTEX_INITIALIZER
+
+#define PTHREAD_COND_INITIALIZER ((pthread_cond_t) -1)
+
+#define PTHREAD_RWLOCK_INITIALIZER ((pthread_rwlock_t) -1)
+
+#define PTHREAD_SPINLOCK_INITIALIZER ((pthread_spinlock_t) -1)
+
+
+/*
+ * Mutex types.
+ */
+enum
+{
+  /* Compatibility with LinuxThreads */
+  PTHREAD_MUTEX_FAST_NP,
+  PTHREAD_MUTEX_RECURSIVE_NP,
+  PTHREAD_MUTEX_ERRORCHECK_NP,
+  PTHREAD_MUTEX_TIMED_NP = PTHREAD_MUTEX_FAST_NP,
+  PTHREAD_MUTEX_ADAPTIVE_NP = PTHREAD_MUTEX_FAST_NP,
+  /* For compatibility with POSIX */
+  PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_FAST_NP,
+  PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP,
+  PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP,
+  PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL
+};
+
+
+typedef struct ptw32_cleanup_t ptw32_cleanup_t;
+
+#if defined(_MSC_VER)
+/* Disable MSVC 'anachronism used' warning */
+#pragma warning( disable : 4229 )
+#endif
+
+typedef void (* PTW32_CDECL ptw32_cleanup_callback_t)(void *);
+
+#if defined(_MSC_VER)
+#pragma warning( default : 4229 )
+#endif
+
+struct ptw32_cleanup_t
+{
+  ptw32_cleanup_callback_t routine;
+  void *arg;
+  struct ptw32_cleanup_t *prev;
+};
+
+#ifdef __CLEANUP_SEH
+        /*
+         * WIN32 SEH version of cancel cleanup.
+         */
+
+#define pthread_cleanup_push( _rout, _arg ) \
+        { \
+            ptw32_cleanup_t     _cleanup; \
+            \
+        _cleanup.routine        = (ptw32_cleanup_callback_t)(_rout); \
+            _cleanup.arg        = (_arg); \
+            __try \
+              { \
+
+#define pthread_cleanup_pop( _execute ) \
+              } \
+            __finally \
+                { \
+                    if( _execute || AbnormalTermination()) \
+                      { \
+                          (*(_cleanup.routine))( _cleanup.arg ); \
+                      } \
+                } \
+        }
+
+#else /* __CLEANUP_SEH */
+
+#ifdef __CLEANUP_C
+
+        /*
+         * C implementation of PThreads cancel cleanup
+         */
+
+#define pthread_cleanup_push( _rout, _arg ) \
+        { \
+            ptw32_cleanup_t     _cleanup; \
+            \
+            ptw32_push_cleanup( &_cleanup, (ptw32_cleanup_callback_t) (_rout), (_arg) ); \
+
+#define pthread_cleanup_pop( _execute ) \
+            (void) ptw32_pop_cleanup( _execute ); \
+        }
+
+#else /* __CLEANUP_C */
+
+#ifdef __CLEANUP_CXX
+
+        /*
+         * C++ version of cancel cleanup.
+         * - John E. Bossom.
+         */
+
+        class PThreadCleanup {
+          /*
+           * PThreadCleanup
+           *
+           * Purpose
+           *      This class is a C++ helper class that is
+           *      used to implement pthread_cleanup_push/
+           *      pthread_cleanup_pop.
+           *      The destructor of this class automatically
+           *      pops the pushed cleanup routine regardless
+           *      of how the code exits the scope
+           *      (i.e. such as by an exception)
+           */
+      ptw32_cleanup_callback_t cleanUpRout;
+          void    *       obj;
+          int             executeIt;
+
+        public:
+          PThreadCleanup() :
+            cleanUpRout( 0 ),
+            obj( 0 ),
+            executeIt( 0 )
+            /*
+             * No cleanup performed
+             */
+            {
+            }
+
+          PThreadCleanup(
+             ptw32_cleanup_callback_t routine,
+                         void    *       arg ) :
+            cleanUpRout( routine ),
+            obj( arg ),
+            executeIt( 1 )
+            /*
+             * Registers a cleanup routine for 'arg'
+             */
+            {
+            }
+
+          ~PThreadCleanup()
+            {
+              if ( executeIt && ((void *) cleanUpRout != (void *) 0) )
+                {
+                  (void) (*cleanUpRout)( obj );
+                }
+            }
+
+          void execute( int exec )
+            {
+              executeIt = exec;
+            }
+        };
+
+        /*
+         * C++ implementation of PThreads cancel cleanup;
+         * This implementation takes advantage of a helper
+         * class who's destructor automatically calls the
+         * cleanup routine if we exit our scope weirdly
+         */
+#define pthread_cleanup_push( _rout, _arg ) \
+        { \
+            PThreadCleanup  cleanup((ptw32_cleanup_callback_t)(_rout), \
+                                    (void *) (_arg) );
+
+#define pthread_cleanup_pop( _execute ) \
+            cleanup.execute( _execute ); \
+        }
+
+#else
+
+#error ERROR [__FILE__, line __LINE__]: Cleanup type undefined.
+
+#endif /* __CLEANUP_CXX */
+
+#endif /* __CLEANUP_C */
+
+#endif /* __CLEANUP_SEH */
+
+/*
+ * ===============
+ * ===============
+ * Methods
+ * ===============
+ * ===============
+ */
+
+/*
+ * PThread Attribute Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_init (pthread_attr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_destroy (pthread_attr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_getdetachstate (const pthread_attr_t * attr,
+                                         int *detachstate);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstackaddr (const pthread_attr_t * attr,
+                                       void **stackaddr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_getstacksize (const pthread_attr_t * attr,
+                                       size_t * stacksize);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_setdetachstate (pthread_attr_t * attr,
+                                         int detachstate);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstackaddr (pthread_attr_t * attr,
+                                       void *stackaddr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_setstacksize (pthread_attr_t * attr,
+                                       size_t stacksize);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedparam (const pthread_attr_t *attr,
+                                        struct sched_param *param);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedparam (pthread_attr_t *attr,
+                                        const struct sched_param *param);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_setschedpolicy (pthread_attr_t *,
+                                         int);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_getschedpolicy (pthread_attr_t *,
+                                         int *);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_setinheritsched(pthread_attr_t * attr,
+                                         int inheritsched);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_getinheritsched(pthread_attr_t * attr,
+                                         int * inheritsched);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_setscope (pthread_attr_t *,
+                                   int);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_attr_getscope (const pthread_attr_t *,
+                                   int *);
+
+/*
+ * PThread Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_create (pthread_t * tid,
+                            const pthread_attr_t * attr,
+                            void *(*start) (void *),
+                            void *arg);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_detach (pthread_t tid);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_equal (pthread_t t1,
+                           pthread_t t2);
+
+PTW32_DLLPORT void PTW32_CDECL pthread_exit (void *value_ptr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_join (pthread_t thread,
+                          void **value_ptr);
+
+PTW32_DLLPORT pthread_t PTW32_CDECL pthread_self (void);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_cancel (pthread_t thread);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_setcancelstate (int state,
+                                    int *oldstate);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_setcanceltype (int type,
+                                   int *oldtype);
+
+PTW32_DLLPORT void PTW32_CDECL pthread_testcancel (void);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_once (pthread_once_t * once_control,
+                          void (*init_routine) (void));
+
+#if PTW32_LEVEL >= PTW32_LEVEL_MAX
+PTW32_DLLPORT ptw32_cleanup_t * PTW32_CDECL ptw32_pop_cleanup (int execute);
+
+PTW32_DLLPORT void PTW32_CDECL ptw32_push_cleanup (ptw32_cleanup_t * cleanup,
+                                 void (*routine) (void *),
+                                 void *arg);
+#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
+
+/*
+ * Thread Specific Data Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_key_create (pthread_key_t * key,
+                                void (*destructor) (void *));
+
+PTW32_DLLPORT int PTW32_CDECL pthread_key_delete (pthread_key_t key);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_setspecific (pthread_key_t key,
+                                 const void *value);
+
+PTW32_DLLPORT void * PTW32_CDECL pthread_getspecific (pthread_key_t key);
+
+
+/*
+ * Mutex Attribute Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_init (pthread_mutexattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_destroy (pthread_mutexattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_getpshared (const pthread_mutexattr_t
+                                          * attr,
+                                          int *pshared);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setpshared (pthread_mutexattr_t * attr,
+                                          int pshared);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_settype (pthread_mutexattr_t * attr, int kind);
+PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_gettype (pthread_mutexattr_t * attr, int *kind);
+
+/*
+ * Barrier Attribute Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_init (pthread_barrierattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_destroy (pthread_barrierattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_getpshared (const pthread_barrierattr_t
+                                            * attr,
+                                            int *pshared);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_barrierattr_setpshared (pthread_barrierattr_t * attr,
+                                            int pshared);
+
+/*
+ * Mutex Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_mutex_init (pthread_mutex_t * mutex,
+                                const pthread_mutexattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_mutex_destroy (pthread_mutex_t * mutex);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_mutex_lock (pthread_mutex_t * mutex);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_mutex_timedlock(pthread_mutex_t *mutex,
+                                    const struct timespec *abstime);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_mutex_trylock (pthread_mutex_t * mutex);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_mutex_unlock (pthread_mutex_t * mutex);
+
+/*
+ * Spinlock Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_spin_init (pthread_spinlock_t * lock, int pshared);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_spin_destroy (pthread_spinlock_t * lock);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_spin_lock (pthread_spinlock_t * lock);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_spin_trylock (pthread_spinlock_t * lock);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_spin_unlock (pthread_spinlock_t * lock);
+
+/*
+ * Barrier Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_barrier_init (pthread_barrier_t * barrier,
+                                  const pthread_barrierattr_t * attr,
+                                  unsigned int count);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_barrier_destroy (pthread_barrier_t * barrier);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_barrier_wait (pthread_barrier_t * barrier);
+
+/*
+ * Condition Variable Attribute Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_condattr_init (pthread_condattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_condattr_destroy (pthread_condattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_condattr_getpshared (const pthread_condattr_t * attr,
+                                         int *pshared);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_condattr_setpshared (pthread_condattr_t * attr,
+                                         int pshared);
+
+/*
+ * Condition Variable Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_cond_init (pthread_cond_t * cond,
+                               const pthread_condattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_cond_destroy (pthread_cond_t * cond);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_cond_wait (pthread_cond_t * cond,
+                               pthread_mutex_t * mutex);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_cond_timedwait (pthread_cond_t * cond,
+                                    pthread_mutex_t * mutex,
+                                    const struct timespec *abstime);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_cond_signal (pthread_cond_t * cond);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_cond_broadcast (pthread_cond_t * cond);
+
+/*
+ * Scheduling
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_setschedparam (pthread_t thread,
+                                   int policy,
+                                   const struct sched_param *param);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_getschedparam (pthread_t thread,
+                                   int *policy,
+                                   struct sched_param *param);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_setconcurrency (int);
+ 
+PTW32_DLLPORT int PTW32_CDECL pthread_getconcurrency (void);
+
+/*
+ * Read-Write Lock Functions
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_init(pthread_rwlock_t *lock,
+                                const pthread_rwlockattr_t *attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_destroy(pthread_rwlock_t *lock);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_tryrdlock(pthread_rwlock_t *);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_trywrlock(pthread_rwlock_t *);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_rdlock(pthread_rwlock_t *lock);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_timedrdlock(pthread_rwlock_t *lock,
+                                       const struct timespec *abstime);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_wrlock(pthread_rwlock_t *lock);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_timedwrlock(pthread_rwlock_t *lock,
+                                       const struct timespec *abstime);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlock_unlock(pthread_rwlock_t *lock);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_init (pthread_rwlockattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_destroy (pthread_rwlockattr_t * attr);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * attr,
+                                           int *pshared);
+
+PTW32_DLLPORT int PTW32_CDECL pthread_rwlockattr_setpshared (pthread_rwlockattr_t * attr,
+                                           int pshared);
+
+#if PTW32_LEVEL >= PTW32_LEVEL_MAX - 1
+
+/*
+ * Signal Functions. Should be defined in <signal.h> but MSVC and MinGW32
+ * already have signal.h that don't define these.
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_kill(pthread_t thread, int sig);
+
+/*
+ * Non-portable functions
+ */
+
+/*
+ * Compatibility with Linux.
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_setkind_np(pthread_mutexattr_t * attr,
+                                         int kind);
+PTW32_DLLPORT int PTW32_CDECL pthread_mutexattr_getkind_np(pthread_mutexattr_t * attr,
+                                         int *kind);
+
+/*
+ * Possibly supported by other POSIX threads implementations
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_delay_np (struct timespec * interval);
+PTW32_DLLPORT int PTW32_CDECL pthread_num_processors_np(void);
+
+/*
+ * Useful if an application wants to statically link
+ * the lib rather than load the DLL at run-time.
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_win32_process_attach_np(void);
+PTW32_DLLPORT int PTW32_CDECL pthread_win32_process_detach_np(void);
+PTW32_DLLPORT int PTW32_CDECL pthread_win32_thread_attach_np(void);
+PTW32_DLLPORT int PTW32_CDECL pthread_win32_thread_detach_np(void);
+
+/*
+ * Features that are auto-detected at load/run time.
+ */
+PTW32_DLLPORT int PTW32_CDECL pthread_win32_test_features_np(int);
+enum ptw32_features {
+  PTW32_SYSTEM_INTERLOCKED_COMPARE_EXCHANGE = 0x0001, /* System provides it. */
+  PTW32_ALERTABLE_ASYNC_CANCEL              = 0x0002  /* Can cancel blocked threads. */
+};
+
+/*
+ * Register a system time change with the library.
+ * Causes the library to perform various functions
+ * in response to the change. Should be called whenever
+ * the application's top level window receives a
+ * WM_TIMECHANGE message. It can be passed directly to
+ * pthread_create() as a new thread if desired.
+ */
+PTW32_DLLPORT void * PTW32_CDECL pthread_timechange_handler_np(void *);
+
+#endif /*PTW32_LEVEL >= PTW32_LEVEL_MAX - 1 */
+
+#if PTW32_LEVEL >= PTW32_LEVEL_MAX
+
+/*
+ * Returns the Win32 HANDLE for the POSIX thread.
+ */
+PTW32_DLLPORT HANDLE PTW32_CDECL pthread_getw32threadhandle_np(pthread_t thread);
+
+
+/*
+ * Protected Methods
+ *
+ * This function blocks until the given WIN32 handle
+ * is signaled or pthread_cancel had been called.
+ * This function allows the caller to hook into the
+ * PThreads cancel mechanism. It is implemented using
+ *
+ *              WaitForMultipleObjects
+ *
+ * on 'waitHandle' and a manually reset WIN32 Event
+ * used to implement pthread_cancel. The 'timeout'
+ * argument to TimedWait is simply passed to
+ * WaitForMultipleObjects.
+ */
+PTW32_DLLPORT int PTW32_CDECL pthreadCancelableWait (HANDLE waitHandle);
+PTW32_DLLPORT int PTW32_CDECL pthreadCancelableTimedWait (HANDLE waitHandle,
+                                        DWORD timeout);
+
+#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
+
+/*
+ * Thread-Safe C Runtime Library Mappings.
+ */
+#ifndef _UWIN
+#  if defined(NEED_ERRNO)
+     PTW32_DLLPORT int * PTW32_CDECL _errno( void );
+#  else
+#    ifndef errno
+#      if (defined(_MT) || defined(_DLL))
+         __declspec(dllimport) extern int * __cdecl _errno(void);
+#        define errno   (*_errno())
+#      endif
+#    endif
+#  endif
+#endif
+
+/*
+ * WIN32 C runtime library had been made thread-safe
+ * without affecting the user interface. Provide
+ * mappings from the UNIX thread-safe versions to
+ * the standard C runtime library calls.
+ * Only provide function mappings for functions that
+ * actually exist on WIN32.
+ */
+
+#if !defined(__MINGW32__)
+#define strtok_r( _s, _sep, _lasts ) \
+        ( *(_lasts) = strtok( (_s), (_sep) ) )
+#endif /* !__MINGW32__ */
+
+#define asctime_r( _tm, _buf ) \
+        ( strcpy( (_buf), asctime( (_tm) ) ), \
+          (_buf) )
+
+#define ctime_r( _clock, _buf ) \
+        ( strcpy( (_buf), ctime( (_clock) ) ),  \
+          (_buf) )
+
+#define gmtime_r( _clock, _result ) \
+        ( *(_result) = *gmtime( (_clock) ), \
+          (_result) )
+
+#define localtime_r( _clock, _result ) \
+        ( *(_result) = *localtime( (_clock) ), \
+          (_result) )
+
+#define rand_r( _seed ) \
+        ( _seed == _seed? rand() : rand() )
+
+
+/*
+ * Some compiler environments don't define some things.
+ */
+#if defined(__BORLANDC__)
+#  define _ftime ftime
+#  define _timeb timeb
+#endif
+
+#ifdef __cplusplus
+
+/*
+ * Internal exceptions
+ */
+class ptw32_exception {};
+class ptw32_exception_cancel : public ptw32_exception {};
+class ptw32_exception_exit   : public ptw32_exception {};
+
+#endif
+
+#if PTW32_LEVEL >= PTW32_LEVEL_MAX
+
+/* FIXME: This is only required if the library was built using SEH */
+/*
+ * Get internal SEH tag
+ */
+PTW32_DLLPORT DWORD PTW32_CDECL ptw32_get_exception_services_code(void);
+
+#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
+
+#ifndef PTW32_BUILD
+
+#ifdef __CLEANUP_SEH
+
+/*
+ * Redefine the SEH __except keyword to ensure that applications
+ * propagate our internal exceptions up to the library's internal handlers.
+ */
+#define __except( E ) \
+        __except( ( GetExceptionCode() == ptw32_get_exception_services_code() ) \
+                 ? EXCEPTION_CONTINUE_SEARCH : ( E ) )
+
+#endif /* __CLEANUP_SEH */
+
+#ifdef __CLEANUP_CXX
+
+/*
+ * Redefine the C++ catch keyword to ensure that applications
+ * propagate our internal exceptions up to the library's internal handlers.
+ */
+#ifdef _MSC_VER
+        /*
+         * WARNING: Replace any 'catch( ... )' with 'PtW32CatchAll'
+         * if you want Pthread-Win32 cancelation and pthread_exit to work.
+         */
+
+#ifndef PtW32NoCatchWarn
+
+#pragma message("Specify \"/DPtW32NoCatchWarn\" compiler flag to skip this message.")
+#pragma message("------------------------------------------------------------------")
+#pragma message("When compiling applications with MSVC++ and C++ exception handling:")
+#pragma message("  Replace any 'catch( ... )' in routines called from POSIX threads")
+#pragma message("  with 'PtW32CatchAll' or 'CATCHALL' if you want POSIX thread")
+#pragma message("  cancelation and pthread_exit to work. For example:")
+#pragma message("")
+#pragma message("    #ifdef PtW32CatchAll")
+#pragma message("      PtW32CatchAll")
+#pragma message("    #else")
+#pragma message("      catch(...)")
+#pragma message("    #endif")
+#pragma message("        {")
+#pragma message("          /* Catchall block processing */")
+#pragma message("        }")
+#pragma message("------------------------------------------------------------------")
+
+#endif
+
+#define PtW32CatchAll \
+        catch( ptw32_exception & ) { throw; } \
+        catch( ... )
+
+#else /* _MSC_VER */
+
+#define catch( E ) \
+        catch( ptw32_exception & ) { throw; } \
+        catch( E )
+
+#endif /* _MSC_VER */
+
+#endif /* __CLEANUP_CXX */
+
+#endif /* ! PTW32_BUILD */
+
+#ifdef __cplusplus
+}                               /* End of extern "C" */
+#endif                          /* __cplusplus */
+
+#ifdef PTW32__HANDLE_DEF
+# undef HANDLE
+#endif
+#ifdef PTW32__DWORD_DEF
+# undef DWORD
+#endif
+
+#undef PTW32_LEVEL
+#undef PTW32_LEVEL_MAX
+
+#endif /* ! RC_INVOKED */
+
+#endif /* PTHREAD_H */
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/sched.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/sched.h
new file mode 100644
index 0000000..10ecb5d
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/sched.h
@@ -0,0 +1,178 @@
+/*
+ * Module: sched.h
+ *
+ * Purpose:
+ *      Provides an implementation of POSIX realtime extensions
+ *      as defined in 
+ *
+ *              POSIX 1003.1b-1993      (POSIX.1b)
+ *
+ * --------------------------------------------------------------------------
+ *
+ *      Pthreads-win32 - POSIX Threads Library for Win32
+ *      Copyright(C) 1998 John E. Bossom
+ *      Copyright(C) 1999,2005 Pthreads-win32 contributors
+ * 
+ *      Contact Email: rpj at callisto.canberra.edu.au
+ * 
+ *      The current list of contributors is contained
+ *      in the file CONTRIBUTORS included with the source
+ *      code distribution. The list can also be seen at the
+ *      following World Wide Web location:
+ *      http://sources.redhat.com/pthreads-win32/contributors.html
+ * 
+ *      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 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 in the file COPYING.LIB;
+ *      if not, write to the Free Software Foundation, Inc.,
+ *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+#ifndef _SCHED_H
+#define _SCHED_H
+
+#undef PTW32_LEVEL
+
+#if defined(_POSIX_SOURCE)
+#define PTW32_LEVEL 0
+/* Early POSIX */
+#endif
+
+#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
+#undef PTW32_LEVEL
+#define PTW32_LEVEL 1
+/* Include 1b, 1c and 1d */
+#endif
+
+#if defined(INCLUDE_NP)
+#undef PTW32_LEVEL
+#define PTW32_LEVEL 2
+/* Include Non-Portable extensions */
+#endif
+
+#define PTW32_LEVEL_MAX 3
+
+#if !defined(PTW32_LEVEL)
+#define PTW32_LEVEL PTW32_LEVEL_MAX
+/* Include everything */
+#endif
+
+
+#if __GNUC__ && ! defined (__declspec)
+# error Please upgrade your GNU compiler to one that supports __declspec.
+#endif
+
+/*
+ * When building the DLL code, you should define PTW32_BUILD so that
+ * the variables/functions are exported correctly. When using the DLL,
+ * do NOT define PTW32_BUILD, and then the variables/functions will
+ * be imported correctly.
+ */
+#ifndef PTW32_STATIC_LIB
+#  ifdef PTW32_BUILD
+#    define PTW32_DLLPORT __declspec (dllexport)
+#  else
+#    define PTW32_DLLPORT __declspec (dllimport)
+#  endif
+#else
+#  define PTW32_DLLPORT
+#endif
+
+/*
+ * This is a duplicate of what is in the autoconf config.h,
+ * which is only used when building the pthread-win32 libraries.
+ */
+
+#ifndef PTW32_CONFIG_H
+#  if defined(WINCE)
+#    define NEED_ERRNO
+#    define NEED_SEM
+#  endif
+#  if defined(_UWIN) || defined(__MINGW32__)
+#    define HAVE_MODE_T
+#  endif
+#endif
+
+/*
+ *
+ */
+
+#if PTW32_LEVEL >= PTW32_LEVEL_MAX
+#ifdef NEED_ERRNO
+#include "need_errno.h"
+#else
+#include <errno.h>
+#endif
+#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
+
+#if defined(__MINGW32__) || defined(_UWIN)
+#if PTW32_LEVEL >= PTW32_LEVEL_MAX
+/* For pid_t */
+#  include <sys/types.h>
+/* Required by Unix 98 */
+#  include <time.h>
+#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
+#else
+typedef int pid_t;
+#endif
+
+/* Thread scheduling policies */
+
+enum {
+  SCHED_OTHER = 0,
+  SCHED_FIFO,
+  SCHED_RR,
+  SCHED_MIN   = SCHED_OTHER,
+  SCHED_MAX   = SCHED_RR
+};
+
+struct sched_param {
+  int sched_priority;
+};
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif                          /* __cplusplus */
+
+PTW32_DLLPORT int __cdecl sched_yield (void);
+
+PTW32_DLLPORT int __cdecl sched_get_priority_min (int policy);
+
+PTW32_DLLPORT int __cdecl sched_get_priority_max (int policy);
+
+PTW32_DLLPORT int __cdecl sched_setscheduler (pid_t pid, int policy);
+
+PTW32_DLLPORT int __cdecl sched_getscheduler (pid_t pid);
+
+/*
+ * Note that this macro returns ENOTSUP rather than
+ * ENOSYS as might be expected. However, returning ENOSYS
+ * should mean that sched_get_priority_{min,max} are
+ * not implemented as well as sched_rr_get_interval.
+ * This is not the case, since we just don't support
+ * round-robin scheduling. Therefore I have chosen to
+ * return the same value as sched_setscheduler when
+ * SCHED_RR is passed to it.
+ */
+#define sched_rr_get_interval(_pid, _interval) \
+  ( errno = ENOTSUP, (int) -1 )
+
+
+#ifdef __cplusplus
+}                               /* End of extern "C" */
+#endif                          /* __cplusplus */
+
+#undef PTW32_LEVEL
+#undef PTW32_LEVEL_MAX
+
+#endif                          /* !_SCHED_H */
+
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/semaphore.h b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/semaphore.h
new file mode 100644
index 0000000..ea42ce3
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/include/semaphore.h
@@ -0,0 +1,166 @@
+/*
+ * Module: semaphore.h
+ *
+ * Purpose:
+ *	Semaphores aren't actually part of the PThreads standard.
+ *	They are defined by the POSIX Standard:
+ *
+ *		POSIX 1003.1b-1993	(POSIX.1b)
+ *
+ * --------------------------------------------------------------------------
+ *
+ *      Pthreads-win32 - POSIX Threads Library for Win32
+ *      Copyright(C) 1998 John E. Bossom
+ *      Copyright(C) 1999,2005 Pthreads-win32 contributors
+ * 
+ *      Contact Email: rpj at callisto.canberra.edu.au
+ * 
+ *      The current list of contributors is contained
+ *      in the file CONTRIBUTORS included with the source
+ *      code distribution. The list can also be seen at the
+ *      following World Wide Web location:
+ *      http://sources.redhat.com/pthreads-win32/contributors.html
+ * 
+ *      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 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 in the file COPYING.LIB;
+ *      if not, write to the Free Software Foundation, Inc.,
+ *      59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+ */
+#if !defined( SEMAPHORE_H )
+#define SEMAPHORE_H
+
+#undef PTW32_LEVEL
+
+#if defined(_POSIX_SOURCE)
+#define PTW32_LEVEL 0
+/* Early POSIX */
+#endif
+
+#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309
+#undef PTW32_LEVEL
+#define PTW32_LEVEL 1
+/* Include 1b, 1c and 1d */
+#endif
+
+#if defined(INCLUDE_NP)
+#undef PTW32_LEVEL
+#define PTW32_LEVEL 2
+/* Include Non-Portable extensions */
+#endif
+
+#define PTW32_LEVEL_MAX 3
+
+#if !defined(PTW32_LEVEL)
+#define PTW32_LEVEL PTW32_LEVEL_MAX
+/* Include everything */
+#endif
+
+#if __GNUC__ && ! defined (__declspec)
+# error Please upgrade your GNU compiler to one that supports __declspec.
+#endif
+
+/*
+ * When building the DLL code, you should define PTW32_BUILD so that
+ * the variables/functions are exported correctly. When using the DLL,
+ * do NOT define PTW32_BUILD, and then the variables/functions will
+ * be imported correctly.
+ */
+#ifndef PTW32_STATIC_LIB
+#  ifdef PTW32_BUILD
+#    define PTW32_DLLPORT __declspec (dllexport)
+#  else
+#    define PTW32_DLLPORT __declspec (dllimport)
+#  endif
+#else
+#  define PTW32_DLLPORT
+#endif
+
+/*
+ * This is a duplicate of what is in the autoconf config.h,
+ * which is only used when building the pthread-win32 libraries.
+ */
+
+#ifndef PTW32_CONFIG_H
+#  if defined(WINCE)
+#    define NEED_ERRNO
+#    define NEED_SEM
+#  endif
+#  if defined(_UWIN) || defined(__MINGW32__)
+#    define HAVE_MODE_T
+#  endif
+#endif
+
+/*
+ *
+ */
+
+#if PTW32_LEVEL >= PTW32_LEVEL_MAX
+#ifdef NEED_ERRNO
+#include "need_errno.h"
+#else
+#include <errno.h>
+#endif
+#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */
+
+#define _POSIX_SEMAPHORES
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif				/* __cplusplus */
+
+#ifndef HAVE_MODE_T
+typedef unsigned int mode_t;
+#endif
+
+
+typedef struct sem_t_ * sem_t;
+
+PTW32_DLLPORT int __cdecl sem_init (sem_t * sem,
+			    int pshared,
+			    unsigned int value);
+
+PTW32_DLLPORT int __cdecl sem_destroy (sem_t * sem);
+
+PTW32_DLLPORT int __cdecl sem_trywait (sem_t * sem);
+
+PTW32_DLLPORT int __cdecl sem_wait (sem_t * sem);
+
+PTW32_DLLPORT int __cdecl sem_timedwait (sem_t * sem,
+				 const struct timespec * abstime);
+
+PTW32_DLLPORT int __cdecl sem_post (sem_t * sem);
+
+PTW32_DLLPORT int __cdecl sem_post_multiple (sem_t * sem,
+				     int count);
+
+PTW32_DLLPORT int __cdecl sem_open (const char * name,
+			    int oflag,
+			    mode_t mode,
+			    unsigned int value);
+
+PTW32_DLLPORT int __cdecl sem_close (sem_t * sem);
+
+PTW32_DLLPORT int __cdecl sem_unlink (const char * name);
+
+PTW32_DLLPORT int __cdecl sem_getvalue (sem_t * sem,
+				int * sval);
+
+#ifdef __cplusplus
+}				/* End of extern "C" */
+#endif				/* __cplusplus */
+
+#undef PTW32_LEVEL
+#undef PTW32_LEVEL_MAX
+
+#endif				/* !SEMAPHORE_H */
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/lib/libjack.a b/build-scripts/native-modules/tuxguitar-jack-windows-x86/lib/libjack.a
new file mode 100644
index 0000000..bd13d22
Binary files /dev/null and b/build-scripts/native-modules/tuxguitar-jack-windows-x86/lib/libjack.a differ
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/lib/pthreadVC2.dll b/build-scripts/native-modules/tuxguitar-jack-windows-x86/lib/pthreadVC2.dll
new file mode 100644
index 0000000..93f562b
Binary files /dev/null and b/build-scripts/native-modules/tuxguitar-jack-windows-x86/lib/pthreadVC2.dll differ
diff --git a/build-scripts/native-modules/tuxguitar-jack-windows-x86/pom.xml b/build-scripts/native-modules/tuxguitar-jack-windows-x86/pom.xml
new file mode 100644
index 0000000..d2685a8
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-jack-windows-x86/pom.xml
@@ -0,0 +1,158 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-jack-windows-x86</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-jack.jni.path>${parent.relativePath}/TuxGuitar-jack/jni/</tuxguitar-jack.jni.path>
+		<tuxguitar-jack.jni.rm>del</tuxguitar-jack.jni.rm>
+		<tuxguitar-jack.jni.cc>gcc</tuxguitar-jack.jni.cc>
+		<tuxguitar-jack.jni.cflags>-mno-cygwin -I${basedir}/include -I$(shell gcj -print-file-name=include/)</tuxguitar-jack.jni.cflags>
+		<tuxguitar-jack.jni.ldflags>-mno-cygwin -Wl,--kill-at</tuxguitar-jack.jni.ldflags>
+		<tuxguitar-jack.jni.ldlibs>-ljack -lpthreadVC2</tuxguitar-jack.jni.ldlibs>
+		<tuxguitar-jack.jni.ldpath>-L${basedir}/lib</tuxguitar-jack.jni.ldpath>
+		<tuxguitar-jack.jni.library.name>tuxguitar-jack-jni</tuxguitar-jack.jni.library.name>
+		<tuxguitar-jack.jni.library.prefix></tuxguitar-jack.jni.library.prefix>
+		<tuxguitar-jack.jni.library.suffix>.dll</tuxguitar-jack.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-jack</module>
+		<module>${parent.relativePath}/TuxGuitar-jack-ui</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-jack.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-jack.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-jack.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-jack.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-jack.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-jack.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-jack.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-jack.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-jack.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-jack.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="RM" value="${tuxguitar-jack.jni.rm}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-jack.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-jack.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-jack.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build" />
+								<copy todir="${project.build.directory}/build">
+									<fileset file="${basedir}/lib/*.dll" />
+								</copy>
+								
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-jack.jni.path}/${tuxguitar-jack.jni.library.prefix}${tuxguitar-jack.jni.library.name}${tuxguitar-jack.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-jack.jni.library.prefix}${tuxguitar-jack.jni.library.name}${tuxguitar-jack.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jack</artifactId>
+									<destFileName>tuxguitar-jack.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jack-ui</artifactId>
+                  					<destFileName>tuxguitar-jack-ui.jar</destFileName>
+                  					<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+	
+	
+	<profiles>
+		<profile>
+			<id>platform-linux-x86</id>
+			<activation>
+				<os>
+					<family>unix</family>
+					<name>linux</name>
+					<arch>i386</arch>
+				</os>
+			</activation>
+			<properties>
+				<tuxguitar-jack.jni.cc>i586-mingw32msvc-gcc</tuxguitar-jack.jni.cc>
+				<tuxguitar-jack.jni.rm>rm -f</tuxguitar-jack.jni.rm>
+			</properties>
+		</profile>
+	</profiles>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-oss-linux-x86/pom.xml b/build-scripts/native-modules/tuxguitar-oss-linux-x86/pom.xml
new file mode 100644
index 0000000..51a57d6
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-oss-linux-x86/pom.xml
@@ -0,0 +1,126 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-oss-linux-x86</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-oss.jni.path>${parent.relativePath}/TuxGuitar-oss/jni/</tuxguitar-oss.jni.path>
+		<tuxguitar-oss.jni.cc>gcc</tuxguitar-oss.jni.cc>
+		<tuxguitar-oss.jni.cflags>-I$(shell gcj -print-file-name=include/) -fPIC</tuxguitar-oss.jni.cflags>
+		<tuxguitar-oss.jni.ldflags></tuxguitar-oss.jni.ldflags>
+		<tuxguitar-oss.jni.ldlibs></tuxguitar-oss.jni.ldlibs>
+		<tuxguitar-oss.jni.ldpath></tuxguitar-oss.jni.ldpath>
+		<tuxguitar-oss.jni.library.name>tuxguitar-oss-jni</tuxguitar-oss.jni.library.name>
+		<tuxguitar-oss.jni.library.prefix>lib</tuxguitar-oss.jni.library.prefix>
+		<tuxguitar-oss.jni.library.suffix>.so</tuxguitar-oss.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-oss</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-oss.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-oss.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-oss.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-oss.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-oss.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-oss.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-oss.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-oss.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-oss.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-oss.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="LIBRARY_NAME" value="${tuxguitar-oss.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-oss.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-oss.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-oss.jni.path}/${tuxguitar-oss.jni.library.prefix}${tuxguitar-oss.jni.library.name}${tuxguitar-oss.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-oss.jni.library.prefix}${tuxguitar-oss.jni.library.name}${tuxguitar-oss.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-oss</artifactId>
+									<destFileName>tuxguitar-oss.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-oss-linux-x86_64/pom.xml b/build-scripts/native-modules/tuxguitar-oss-linux-x86_64/pom.xml
new file mode 100644
index 0000000..658d2a0
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-oss-linux-x86_64/pom.xml
@@ -0,0 +1,126 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-oss-linux-x86_64</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-oss.jni.path>${parent.relativePath}/TuxGuitar-oss/jni/</tuxguitar-oss.jni.path>
+		<tuxguitar-oss.jni.cc>gcc</tuxguitar-oss.jni.cc>
+		<tuxguitar-oss.jni.cflags>-I$(shell gcj -print-file-name=include/) -fPIC</tuxguitar-oss.jni.cflags>
+		<tuxguitar-oss.jni.ldflags></tuxguitar-oss.jni.ldflags>
+		<tuxguitar-oss.jni.ldlibs></tuxguitar-oss.jni.ldlibs>
+		<tuxguitar-oss.jni.ldpath></tuxguitar-oss.jni.ldpath>
+		<tuxguitar-oss.jni.library.name>tuxguitar-oss-jni</tuxguitar-oss.jni.library.name>
+		<tuxguitar-oss.jni.library.prefix>lib</tuxguitar-oss.jni.library.prefix>
+		<tuxguitar-oss.jni.library.suffix>.so</tuxguitar-oss.jni.library.suffix>
+	</properties>
+	
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-oss</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-oss.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-oss.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-oss.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-oss.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-oss.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-oss.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-oss.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-oss.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-oss.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-oss.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="LIBRARY_NAME" value="${tuxguitar-oss.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-oss.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-oss.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-oss.jni.path}/${tuxguitar-oss.jni.library.prefix}${tuxguitar-oss.jni.library.name}${tuxguitar-oss.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-oss.jni.library.prefix}${tuxguitar-oss.jni.library.name}${tuxguitar-oss.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-oss</artifactId>
+									<destFileName>tuxguitar-oss.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+</project>
diff --git a/build-scripts/native-modules/tuxguitar-winmm-windows-x86/pom.xml b/build-scripts/native-modules/tuxguitar-winmm-windows-x86/pom.xml
new file mode 100644
index 0000000..ab6f613
--- /dev/null
+++ b/build-scripts/native-modules/tuxguitar-winmm-windows-x86/pom.xml
@@ -0,0 +1,143 @@
+<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/xsd/maven-4.0.0.xsd">
+
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../../</relativePath>
+	</parent>
+	
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-winmm-windows-x86</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<tuxguitar-winmm.jni.path>${parent.relativePath}/TuxGuitar-winmm/jni/</tuxguitar-winmm.jni.path>
+		<tuxguitar-winmm.jni.cc>gcc</tuxguitar-winmm.jni.cc>
+		<tuxguitar-winmm.jni.cflags>-mno-cygwin -I$(shell gcj -print-file-name=include/)</tuxguitar-winmm.jni.cflags>
+		<tuxguitar-winmm.jni.ldflags>-mno-cygwin -Wl,--kill-at</tuxguitar-winmm.jni.ldflags>
+		<tuxguitar-winmm.jni.ldlibs>-lwinmm</tuxguitar-winmm.jni.ldlibs>
+		<tuxguitar-winmm.jni.ldpath></tuxguitar-winmm.jni.ldpath>
+		<tuxguitar-winmm.jni.library.name>tuxguitar-winmm-jni</tuxguitar-winmm.jni.library.name>
+		<tuxguitar-winmm.jni.library.prefix></tuxguitar-winmm.jni.library.prefix>
+		<tuxguitar-winmm.jni.library.suffix>.dll</tuxguitar-winmm.jni.library.suffix>
+	</properties>
+
+	<modules>
+		<module>${parent.relativePath}/TuxGuitar-winmm</module>
+	</modules>
+	
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>compile-native</id>
+						<phase>compile</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="compile-native">
+								<exec dir="${tuxguitar-winmm.jni.path}" executable="make" failonerror="true" >
+									<env key="CC" value="${tuxguitar-winmm.jni.cc}" />
+									<env key="CFLAGS" value="${tuxguitar-winmm.jni.cflags}" />
+									<env key="LDFLAGS" value="${tuxguitar-winmm.jni.ldflags}" />
+									<env key="LDLIBS" value="${tuxguitar-winmm.jni.ldlibs}" />
+									<env key="LDPATH" value="${tuxguitar-winmm.jni.ldpath}" />
+									<env key="LIBRARY_NAME" value="${tuxguitar-winmm.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-winmm.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-winmm.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>clean-native</id>
+						<phase>clean</phase>
+						<goals>
+							<goal>run</goal>
+						</goals>
+						<configuration>
+							<target name="clean-native">
+								<exec dir="${tuxguitar-winmm.jni.path}" executable="make" failonerror="true" >
+									<arg value="clean"/>
+									<env key="LIBRARY_NAME" value="${tuxguitar-winmm.jni.library.name}" />
+									<env key="LIBRARY_PREFIX" value="${tuxguitar-winmm.jni.library.prefix}" />
+									<env key="LIBRARY_SUFFIX" value="${tuxguitar-winmm.jni.library.suffix}" />
+								</exec>
+							</target>
+						</configuration>
+					</execution>
+					
+					<execution>
+						<id>native-module-copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/build/lib" />
+								<copy todir="${project.build.directory}/build/lib">
+									<fileset file="${tuxguitar-winmm.jni.path}/${tuxguitar-winmm.jni.library.prefix}${tuxguitar-winmm.jni.library.name}${tuxguitar-winmm.jni.library.suffix}" />
+								</copy>
+								<chmod file="${project.build.directory}/build/lib/${tuxguitar-winmm.jni.library.prefix}${tuxguitar-winmm.jni.library.name}${tuxguitar-winmm.jni.library.suffix}" perm="775" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+			
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>native-module-copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-winmm</artifactId>
+									<destFileName>tuxguitar-winmm.jar</destFileName>
+									<outputDirectory>${project.build.directory}/build/share/plugins</outputDirectory>
+								</artifactItem>
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+			
+		</plugins>
+	</build>
+	
+	
+	<profiles>
+		<profile>
+			<id>platform-linux-x86</id>
+			<activation>
+				<os>
+					<family>unix</family>
+					<name>linux</name>
+					<arch>i386</arch>
+				</os>
+			</activation>
+			<properties>
+				<tuxguitar-winmm.jni.cc>i586-mingw32msvc-gcc</tuxguitar-winmm.jni.cc>
+			</properties>
+		</profile>
+	</profiles>
+</project>
diff --git a/build-scripts/tuxguitar-linux-gcj/GNUmakefile b/build-scripts/tuxguitar-linux-gcj/GNUmakefile
new file mode 100644
index 0000000..9e89813
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/GNUmakefile
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $"
+#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
+#licence: LGPL
+#------------------------------------------------------------------------------
+PREFIX?=./
+PACKAGE?=tuxguitar-1.3-gcj
+
+TG_ROOT_PATH?=../..
+TG_BUILD_PATH?=./target
+TG_BUILD_PREFIX?=$(PREFIX)
+TG_BUILD_DESTDIR?=$(TG_BUILD_PATH)/$(PACKAGE)/
+
+ENVIRONMENT_PROPERTIES?=\
+	PREFIX=$(TG_BUILD_PREFIX)\
+	DESTDIR=$(TG_BUILD_DESTDIR)\
+	TG_ROOT_PATH=$(TG_ROOT_PATH)\
+	TG_SOURCE_PATH=$(TG_ROOT_PATH)/TuxGuitar/src/\
+	TG_LIB_SOURCE_PATH=$(TG_ROOT_PATH)/TuxGuitar-lib/src/\
+	TG_LIB_LIBRARY_PATH=$(TG_BUILD_DESTDIR)$(TG_BUILD_PREFIX)/lib\
+	TG_GM_UTILS_SOURCE_PATH=$(TG_ROOT_PATH)/TuxGuitar-gm-utils/src/\
+	TG_JACK_SOURCE_PATH=$(TG_ROOT_PATH)/TuxGuitar-jack/src/\
+
+# build paths
+MAKEFILE_PATH?=./makefiles
+MAKEFILE_SCRIPTS?=\
+	$(MAKEFILE_PATH)/tuxguitar-lib.mf\
+	$(MAKEFILE_PATH)/tuxguitar.mf\
+	$(MAKEFILE_PATH)/tuxguitar-gm-utils.mf\
+	$(MAKEFILE_PATH)/tuxguitar-compat.mf\
+	$(MAKEFILE_PATH)/tuxguitar-gtp.mf\
+	$(MAKEFILE_PATH)/tuxguitar-gpx.mf\
+	$(MAKEFILE_PATH)/tuxguitar-ptb.mf\
+	$(MAKEFILE_PATH)/tuxguitar-tef.mf\
+	$(MAKEFILE_PATH)/tuxguitar-lilypond.mf\
+	$(MAKEFILE_PATH)/tuxguitar-musicxml.mf\
+	$(MAKEFILE_PATH)/tuxguitar-ascii.mf\
+	$(MAKEFILE_PATH)/tuxguitar-svg.mf\
+	$(MAKEFILE_PATH)/tuxguitar-midi.mf\
+	$(MAKEFILE_PATH)/tuxguitar-image.mf\
+	$(MAKEFILE_PATH)/tuxguitar-alsa.mf\
+	$(MAKEFILE_PATH)/tuxguitar-fluidsynth.mf\
+	$(MAKEFILE_PATH)/tuxguitar-oss.mf\
+	$(MAKEFILE_PATH)/tuxguitar-jack.mf\
+	$(MAKEFILE_PATH)/tuxguitar-jack-ui.mf\
+	$(MAKEFILE_PATH)/tuxguitar-gm-settings.mf\
+	$(MAKEFILE_PATH)/tuxguitar-community.mf\
+	$(MAKEFILE_PATH)/tuxguitar-converter.mf\
+	$(MAKEFILE_PATH)/tuxguitar-browser-ftp.mf\
+
+MAKEFILE_OBJECTS?=$(MAKEFILE_SCRIPTS:%.mf=%.make)
+
+default: all
+
+all: $(MAKEFILE_OBJECTS) resources
+
+resources:
+	-install -d $(TG_BUILD_DESTDIR)$(TG_BUILD_PREFIX)/
+	-install src/resources/tuxguitar.sh $(TG_BUILD_DESTDIR)$(TG_BUILD_PREFIX)/tuxguitar.sh
+
+%.make: %.mf
+	$(ENVIRONMENT_PROPERTIES) make clean -f $^
+	$(ENVIRONMENT_PROPERTIES) make -f $^
+	$(ENVIRONMENT_PROPERTIES) make install -f $^
+	$(ENVIRONMENT_PROPERTIES) make clean -f $^
+
+clean:
+	-rm $(DESTDIR)$(TG_BUILD_PATH) -rf
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-alsa.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-alsa.mf
new file mode 100644
index 0000000..c3ac345
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-alsa.mf
@@ -0,0 +1,90 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-alsa
+
+PACKAGE?=tuxguitar-alsa
+LIBRARY?=lib$(PACKAGE).so
+LIBRARY_JNI?=lib$(PACKAGE)-jni.so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI)
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+JAVA_SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java")
+JAVA_OBJECTS?=$(PACKAGE).o
+JNI_SOURCE_PATH?=$(TG_PROJECT_HOME)/jni/
+JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c")
+JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o)
+
+GCJ?=gcj
+GCJFLAGS?=-fjni -I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+GCJLDFLAGS?=
+
+CC?=gcc
+CFLAGS?=-I$(shell $(GCJ) -print-file-name=include/) -fPIC
+CLDFLAGS?=-lasound -lpthread
+
+default: all
+
+all: library library_jni
+
+library: $(LIBRARY)
+
+library_jni: $(LIBRARY_JNI)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+%.o: %.c
+	$(CC) $(CFLAGS) -c -o $(@F) $<
+
+$(PACKAGE).o: $(JAVA_SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(JAVA_OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(GCJLDFLAGS)
+
+$(LIBRARY_JNI): $(JNI_OBJECTS)
+	$(CC) -shared -o $@ $(^F) $(CLDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-ascii.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-ascii.mf
new file mode 100644
index 0000000..834b8d8
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-ascii.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-ascii
+
+PACKAGE?=tuxguitar-ascii
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-browser-ftp.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-browser-ftp.mf
new file mode 100644
index 0000000..60c901b
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-browser-ftp.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-browser-ftp
+
+PACKAGE?=tuxguitar-browser-ftp
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-community.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-community.mf
new file mode 100644
index 0000000..99f83a5
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-community.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-community
+
+PACKAGE?=tuxguitar-community
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-compat.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-compat.mf
new file mode 100644
index 0000000..0d8c0c4
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-compat.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-compat
+
+PACKAGE?=tuxguitar-compat
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-converter.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-converter.mf
new file mode 100644
index 0000000..84a9302
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-converter.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-converter
+
+PACKAGE?=tuxguitar-converter
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-fluidsynth.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-fluidsynth.mf
new file mode 100644
index 0000000..77cda08
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-fluidsynth.mf
@@ -0,0 +1,90 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-fluidsynth
+
+PACKAGE?=tuxguitar-fluidsynth
+LIBRARY?=lib$(PACKAGE).so
+LIBRARY_JNI?=lib$(PACKAGE)-jni.so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI)
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+JAVA_SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java")
+JAVA_OBJECTS?=$(PACKAGE).o
+JNI_SOURCE_PATH?=$(TG_PROJECT_HOME)/jni/
+JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c")
+JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o)
+
+GCJ?=gcj
+GCJFLAGS?=-fjni -I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+GCJLDFLAGS?=
+
+CC?=gcc
+CFLAGS?=-I$(shell $(GCJ) -print-file-name=include/) -fPIC
+CLDFLAGS?=-lfluidsynth -L/usr/lib
+
+default: all
+
+all: library library_jni
+
+library: $(LIBRARY)
+
+library_jni: $(LIBRARY_JNI)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+%.o: %.c
+	$(CC) $(CFLAGS) -c -o $(@F) $<
+
+$(PACKAGE).o: $(JAVA_SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(JAVA_OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(GCJLDFLAGS)
+
+$(LIBRARY_JNI): $(JNI_OBJECTS)
+	$(CC) -shared -o $@ $(^F) $(CLDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gm-settings.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gm-settings.mf
new file mode 100644
index 0000000..55c4131
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gm-settings.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-gm-settings
+
+PACKAGE?=tuxguitar-gm-settings
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gm-utils.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gm-utils.mf
new file mode 100644
index 0000000..1f3497f
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gm-utils.mf
@@ -0,0 +1,53 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+#ident "$Id: GNUmakefile,v 1.3 2008/02/26 15:24:13 akdmia Exp $"
+#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
+#licence: LGPL
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-gm-utils
+
+PACKAGE?=tuxguitar-gm-utils
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(PREFIX)/lib/ext
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+uninstall:
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
+
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gpx.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gpx.mf
new file mode 100644
index 0000000..103e910
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gpx.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-gpx
+
+PACKAGE?=tuxguitar-gpx
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gtp.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gtp.mf
new file mode 100644
index 0000000..1ca0612
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-gtp.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-gtp
+
+PACKAGE?=tuxguitar-gtp
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-image.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-image.mf
new file mode 100644
index 0000000..e16a12f
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-image.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-image
+
+PACKAGE?=tuxguitar-image
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-jack-ui.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-jack-ui.mf
new file mode 100644
index 0000000..f84d7bb
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-jack-ui.mf
@@ -0,0 +1,75 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-jack-ui
+
+PACKAGE?=tuxguitar-jack-ui
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# tuxguitar jack paths
+TG_JACK_PREFIX?=$(PREFIX)
+TG_JACK_SOURCE_PATH?=$(TG_JACK_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_JACK_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-echo "libtuxguitar-jack.so" > $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY).deps
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY).deps
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-jack.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-jack.mf
new file mode 100644
index 0000000..d0fc20b
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-jack.mf
@@ -0,0 +1,90 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-jack
+
+PACKAGE?=tuxguitar-jack
+LIBRARY?=lib$(PACKAGE).so
+LIBRARY_JNI?=lib$(PACKAGE)-jni.so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI)
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+JAVA_SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java")
+JAVA_OBJECTS?=$(PACKAGE).o
+JNI_SOURCE_PATH?=$(TG_PROJECT_HOME)/jni/
+JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c")
+JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o)
+
+GCJ?=gcj
+GCJFLAGS?=-fjni -I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+GCJLDFLAGS?=
+
+CC?=gcc
+CFLAGS?=-I$(shell $(GCJ) -print-file-name=include/) -fPIC
+CLDFLAGS?=`pkg-config --libs jack`
+
+default: all
+
+all: library library_jni
+
+library: $(LIBRARY)
+
+library_jni: $(LIBRARY_JNI)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+%.o: %.c
+	$(CC) $(CFLAGS) -c -o $(@F) $<
+
+$(PACKAGE).o: $(JAVA_SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(JAVA_OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(GCJLDFLAGS)
+
+$(LIBRARY_JNI): $(JNI_OBJECTS)
+	$(CC) -shared -o $@ $(^F) $(CLDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-lib.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-lib.mf
new file mode 100644
index 0000000..b3d97bc
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-lib.mf
@@ -0,0 +1,50 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+#ident "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $"
+#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
+#licence: LGPL
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-lib
+
+PACKAGE?=tuxguitar-lib
+LIBRARY?=lib$(PACKAGE).so
+
+
+PREFIX?=/usr
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(PREFIX)/lib
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-fbootstrap-classes -fsource=1.4
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+uninstall:
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F)
+
+#eof "$Id: GNUmakefile,v 1.4 2008/02/26 15:25:26 akdmia Exp $"
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-lilypond.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-lilypond.mf
new file mode 100644
index 0000000..8866a9e
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-lilypond.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-lilypond
+
+PACKAGE?=tuxguitar-lilypond
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-midi.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-midi.mf
new file mode 100644
index 0000000..b31ceaf
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-midi.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-midi
+
+PACKAGE?=tuxguitar-midi
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-musicxml.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-musicxml.mf
new file mode 100644
index 0000000..4d78373
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-musicxml.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-musicxml
+
+PACKAGE?=tuxguitar-musicxml
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-oss.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-oss.mf
new file mode 100644
index 0000000..4675035
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-oss.mf
@@ -0,0 +1,90 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-oss
+
+PACKAGE?=tuxguitar-oss
+LIBRARY?=lib$(PACKAGE).so
+LIBRARY_JNI?=lib$(PACKAGE)-jni.so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_LIBRARY_PATH_JNI?=$(TG_PREFIX)/lib/jni
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_JNI_DIR?=$(TG_LIBRARY_PATH_JNI)
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+JAVA_SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+JAVA_SOURCES?=$(shell find $(JAVA_SOURCE_PATH) -name "*.java")
+JAVA_OBJECTS?=$(PACKAGE).o
+JNI_SOURCE_PATH?=$(TG_PROJECT_HOME)/jni/
+JNI_SOURCES?=$(shell find $(JNI_SOURCE_PATH) -name "*.c")
+JNI_OBJECTS?=$(JNI_SOURCES:%.c=%.o)
+
+GCJ?=gcj
+GCJFLAGS?=-fjni -I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+GCJLDFLAGS?=
+
+CC?=gcc
+CFLAGS?=-I$(shell $(GCJ) -print-file-name=include/) -fPIC
+CLDFLAGS?=
+
+default: all
+
+all: library library_jni
+
+library: $(LIBRARY)
+
+library_jni: $(LIBRARY_JNI)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-install $(LIBRARY_JNI) $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_JNI_DIR)/$(LIBRARY_JNI)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+%.o: %.c
+	$(CC) $(CFLAGS) -c -o $(@F) $<
+
+$(PACKAGE).o: $(JAVA_SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(JAVA_OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(GCJLDFLAGS)
+
+$(LIBRARY_JNI): $(JNI_OBJECTS)
+	$(CC) -shared -o $@ $(^F) $(CLDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-ptb.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-ptb.mf
new file mode 100644
index 0000000..13e585f
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-ptb.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-ptb
+
+PACKAGE?=tuxguitar-ptb
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-svg.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-svg.mf
new file mode 100644
index 0000000..9a3de17
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-svg.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-svg
+
+PACKAGE?=tuxguitar-svg
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-tef.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-tef.mf
new file mode 100644
index 0000000..5d6cd6f
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-tef.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-tef
+
+PACKAGE?=tuxguitar-tef
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-tray.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-tray.mf
new file mode 100644
index 0000000..bfd334e
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar-tray.mf
@@ -0,0 +1,69 @@
+#! /usr/bin/make -f
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar-tray
+
+PACKAGE?=tuxguitar-tray
+LIBRARY?=lib$(PACKAGE).so
+
+PREFIX?=/usr
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar paths
+TG_PREFIX?=$(PREFIX)
+TG_SOURCE_PATH?=$(TG_PREFIX)/src
+TG_LIBRARY_PATH?=$(TG_PREFIX)/lib
+TG_NATIVE_PLUGINS_PATH?=$(TG_PREFIX)/share/tuxguitar/plugins
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+
+# tuxguitar gm-utils paths
+TG_GM_UTILS_PREFIX?=$(PREFIX)
+TG_GM_UTILS_SOURCE_PATH?=$(TG_GM_UTILS_PREFIX)/src
+
+# install paths
+INSTALL_LIBRARY_DIR?=$(TG_NATIVE_PLUGINS_PATH)
+INSTALL_SHARED_DIR?=$(TG_NATIVE_PLUGINS_PATH)/$(PACKAGE)
+
+# resources
+SHARE_PATH?=$(TG_PROJECT_HOME)/share/
+
+# build paths
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+OBJECTS?=$(PACKAGE).o
+
+GCJ?=gcj
+GCJFLAGS?=-I$(TG_LIB_SOURCE_PATH) -I$(TG_GM_UTILS_SOURCE_PATH) -I$(TG_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+
+default: all
+
+all: library
+
+library: $(LIBRARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(INSTALL_LIBRARY_DIR)/
+	-install -d $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-install $(LIBRARY) $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+	-cp -rfa $(SHARE_PATH)/* $(DESTDIR)$(INSTALL_SHARED_DIR)
+
+uninstall:
+	-rm -rf $(DESTDIR)$(INSTALL_SHARED_DIR)/
+	-rm $(DESTDIR)$(INSTALL_LIBRARY_DIR)/$(LIBRARY)
+
+clean:
+	-rm *.so -f
+	-rm *.o -f
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar.mf b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar.mf
new file mode 100644
index 0000000..d597e0c
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/makefiles/tuxguitar.mf
@@ -0,0 +1,118 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+#ident "$Id: GNUmakefile,v 1.7 2008/02/29 12:55:24 akdmia Exp $"
+#@author: created by www.philippe.coval.online.fr -- revision: $Author: akdmia $
+#licence: LGPL
+#------------------------------------------------------------------------------
+TG_ROOT_PATH?=../../..
+TG_PROJECT_HOME?=$(TG_ROOT_PATH)/TuxGuitar
+
+OS_LIBRARY_PREFIX?=lib
+OS_LIBRARY_EXTENSION?=.so
+
+PACKAGE?=tuxguitar
+BINARY?=$(PACKAGE).bin
+LIBRARY?=$(OS_LIBRARY_PREFIX)$(PACKAGE)$(OS_LIBRARY_EXTENSION)
+
+# constants
+SHARE_DIR?=$(TG_PROJECT_HOME)/share/
+DOC_DIR?=$(TG_PROJECT_HOME)/doc/
+
+# dependencies
+SWT_PATH?=/usr/share/java/swt.jar
+
+# tuxguitar lib paths
+TG_LIB_PREFIX?=$(PREFIX)
+TG_LIB_SOURCE_PATH?=$(TG_LIB_PREFIX)/src
+TG_LIB_LIBRARY_PATH?=$(TG_LIB_PREFIX)/lib
+
+# install
+PREFIX?=/usr
+TG_BINARY_PATH?=$(PREFIX)/bin
+TG_LIBRARY_PATH?=$(PREFIX)/lib
+TG_LIBRARY_PATH_JNI?=$(TG_LIBRARY_PATH)/jni
+TG_LIBRARY_PATH_EXT?=$(TG_LIBRARY_PATH)/ext
+TG_LIBRARY_PATH_PLUGINS?=$(TG_SHARE_PATH)/plugins
+TG_LIBRARY_PATH_PROPERTY?=$(TG_LIBRARY_PATH_EXT):$(TG_LIBRARY_PATH_PLUGINS)
+TG_SHARE_PATH?=$(PREFIX)/share/$(PACKAGE)
+TG_DOC_PATH?=$(PREFIX)/share/doc/$(PACKAGE)
+
+
+# jar dependencies
+SWT_JAR?=$(SWT_PATH)
+
+# sources
+SOURCE_PATH?=$(TG_PROJECT_HOME)/src/
+SOURCES?=$(shell find $(SOURCE_PATH) -name "*.java")
+RESOURCE_PATH?=$(TG_PROJECT_HOME)/dist/
+RESOURCES_XML?=$(shell find $(RESOURCE_PATH) -name "*.xml")
+RESOURCES_DIST?=$(shell find $(RESOURCE_PATH) -name "*.dist")
+DEPENDENCIES?=$(SWT_JAR)
+OBJECTS?=\
+ $(PACKAGE).o\
+ $(RESOURCES_DIST:%.dist=%.o)\
+ $(RESOURCES_XML:%.xml=%.o)\
+ $(DEPENDENCIES:%.jar=%.o)\
+
+# runtime
+MAINCLASS?=org.herac.tuxguitar.app.TGMain
+PROPERTIES?=\
+ -Djava.library.path=$(TG_LIBRARY_PATH_JNI) \
+ -Djava.class.path=$(TG_SHARE_PATH) \
+ -Dtuxguitar.share.path=$(TG_SHARE_PATH) \
+ -Dtuxguitar.library.path=$(TG_LIBRARY_PATH_PROPERTY) \
+ -Dtuxguitar.library.prefix=$(OS_LIBRARY_PREFIX) \
+ -Dtuxguitar.library.extension=$(OS_LIBRARY_EXTENSION) \
+
+GCJ?=gcj
+GCJFLAGS+=-fbootstrap-classes -fjni -I$(TG_LIB_SOURCE_PATH) -I$(SWT_PATH) -fsource=1.4
+LDFLAGS?=
+BINFLAGS?=-l$(PACKAGE) -ltuxguitar-lib -L$(TG_LIBRARY_PATH) -L$(TG_LIB_LIBRARY_PATH)  -L./
+
+default: all
+
+all: objects library binary
+
+objects: $(OBJECTS)
+
+library: $(LIBRARY)
+
+binary: $(BINARY)
+
+install:
+	-install -d $(DESTDIR)$(PREFIX)/
+	-install -d $(DESTDIR)$(TG_BINARY_PATH)/
+	-install -d $(DESTDIR)$(TG_LIBRARY_PATH)/
+	-install -d $(DESTDIR)$(TG_SHARE_PATH)/
+	-install -d $(DESTDIR)$(TG_DOC_PATH)/
+	-install $(BINARY) $(DESTDIR)$(TG_BINARY_PATH)/$(BINARY)
+	-install $(LIBRARY) $(DESTDIR)$(TG_LIBRARY_PATH)/$(LIBRARY)
+	cp -rfa $(SHARE_DIR)/* $(DESTDIR)$(TG_SHARE_PATH)/
+	cp -rfa $(DOC_DIR)/* $(DESTDIR)$(TG_DOC_PATH)/
+
+uninstall:
+	-rm $(DESTDIR)$(TG_BINARY_PATH)/$(BINARY)
+	-rm $(DESTDIR)$(TG_LIBRARY_PATH)/$(LIBRARY)
+
+clean:
+	-rm *.bin -f
+	-rm *.so -f
+	-rm *.o -f
+
+%.o: %.jar
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $<
+
+%.o: %.dist
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) --resource $(<F) $<
+
+%.o: %.xml
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) --resource $(<F) $<
+
+$(PACKAGE).o: $(SOURCES)
+	$(GCJ) $(GCJFLAGS) -c -o $(@F) $^
+
+$(LIBRARY): $(OBJECTS)
+	$(GCJ) -shared -o $@ $(^F) $(LDFLAGS)
+
+$(BINARY):
+	$(GCJ) -o $@ --main=$(MAINCLASS) $(PROPERTIES) $(BINFLAGS)
diff --git a/build-scripts/tuxguitar-linux-gcj/src/resources/tuxguitar.sh b/build-scripts/tuxguitar-linux-gcj/src/resources/tuxguitar.sh
new file mode 100644
index 0000000..efd0c1c
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-gcj/src/resources/tuxguitar.sh
@@ -0,0 +1,10 @@
+#!/bin/bash
+##SCRIPT DIR
+TG_HOME=`dirname "$0"`
+TG_HOME=`cd "$TG_HOME"; pwd`
+
+export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${TG_HOME}/lib
+
+cd ${TG_HOME}
+
+${TG_HOME}/bin/tuxguitar.bin
diff --git a/build-scripts/tuxguitar-linux-x86/pom.xml b/build-scripts/tuxguitar-linux-x86/pom.xml
new file mode 100644
index 0000000..287c49f
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-x86/pom.xml
@@ -0,0 +1,328 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../</relativePath>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-linux-x86</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<project.rootPath>${project.parent.relativePath}</project.rootPath>
+		<project.finalName>tuxguitar-${project.version}-linux-x86</project.finalName>
+		<org.eclipse.swt.artifactId>org.eclipse.swt.gtk.linux.x86</org.eclipse.swt.artifactId>
+	</properties>
+
+	<modules>
+		<module>../../TuxGuitar</module>
+		<module>../../TuxGuitar-lib</module>
+		<module>../../TuxGuitar-gm-utils</module>
+		<module>../../TuxGuitar-ascii</module>
+		<module>../../TuxGuitar-browser-ftp</module>
+		<module>../../TuxGuitar-community</module>
+		<module>../../TuxGuitar-compat</module>
+		<module>../../TuxGuitar-converter</module>
+		<module>../../TuxGuitar-gervill</module>
+		<module>../../TuxGuitar-gm-settings</module>
+		<module>../../TuxGuitar-gtp</module>
+		<module>../../TuxGuitar-gpx</module>
+		<module>../../TuxGuitar-jsa</module>
+		<module>../../TuxGuitar-lilypond</module>
+		<module>../../TuxGuitar-midi</module>
+		<module>../../TuxGuitar-musicxml</module>
+		<module>../../TuxGuitar-pdf</module>
+		<module>../../TuxGuitar-ptb</module>
+		<module>../../TuxGuitar-tef</module>
+		<module>../../TuxGuitar-tuner</module>
+		<module>../../TuxGuitar-svg</module>
+		<module>../../TuxGuitar-image</module>
+	</modules>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<!-- LIBRARIES -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar</artifactId>
+									<destFileName>tuxguitar.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lib</artifactId>
+									<destFileName>tuxguitar-lib.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-utils</artifactId>
+									<destFileName>tuxguitar-gm-utils.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<!-- /LIBRARIES -->
+
+								<!-- 3RD PARTY LIBRARIES -->
+								<artifactItem>
+									<groupId>${org.eclipse.swt.groupId}</groupId>
+									<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+									<destFileName>swt.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+
+								<artifactItem>
+									<groupId>com.itextpdf</groupId>
+									<artifactId>itextpdf</artifactId>
+									<destFileName>itext-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>com.itextpdf.tool</groupId>
+									<artifactId>xmlworker</artifactId>
+									<destFileName>itext-xmlworker.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<!-- /3RD PARTY LIBRARIES -->
+
+								<!-- PLUGINS -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ascii</artifactId>
+									<destFileName>tuxguitar-ascii.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-browser-ftp</artifactId>
+									<destFileName>tuxguitar-browser-ftp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-community</artifactId>
+									<destFileName>tuxguitar-community.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-compat</artifactId>
+									<destFileName>tuxguitar-compat.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-converter</artifactId>
+									<destFileName>tuxguitar-converter.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gervill</artifactId>
+									<destFileName>tuxguitar-gervill.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-settings</artifactId>
+									<destFileName>tuxguitar-gm-settings.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gtp</artifactId>
+									<destFileName>tuxguitar-gtp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gpx</artifactId>
+									<destFileName>tuxguitar-gpx.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jsa</artifactId>
+									<destFileName>tuxguitar-jsa.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lilypond</artifactId>
+									<destFileName>tuxguitar-lilypond.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-midi</artifactId>
+									<destFileName>tuxguitar-midi.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-musicxml</artifactId>
+									<destFileName>tuxguitar-musicxml.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-pdf</artifactId>
+									<destFileName>tuxguitar-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ptb</artifactId>
+									<destFileName>tuxguitar-ptb.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tef</artifactId>
+									<destFileName>tuxguitar-tef.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tuner</artifactId>
+									<destFileName>tuxguitar-tuner.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-svg</artifactId>
+									<destFileName>tuxguitar-svg.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-image</artifactId>
+									<destFileName>tuxguitar-image.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<!-- /PLUGINS -->
+
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/${project.finalName}/" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/lib" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/share" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/doc" />
+
+								<copy todir="${project.build.directory}/${project.finalName}/share">
+									<fileset dir="${project.rootPath}/TuxGuitar/share/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/doc">
+									<fileset dir="${project.rootPath}/TuxGuitar/doc/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/dist">
+									<fileset dir="${project.rootPath}/TuxGuitar/dist/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/dist" overwrite="true">
+									<fileset dir="./src/resources/dist/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/">
+									<fileset file="./src/resources/tuxguitar.sh" />
+								</copy>
+
+								<chmod file="${project.build.directory}/${project.finalName}/tuxguitar.sh" perm="755" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+	<profiles>
+		<profile>
+			<id>native-modules</id>
+			<activation>
+				<property>
+					<name>native-modules</name>
+					<value>true</value>
+				</property>
+			</activation>
+			<modules>
+				<module>../native-modules/tuxguitar-alsa-linux-x86</module>
+				<module>../native-modules/tuxguitar-jack-linux-x86</module>
+				<module>../native-modules/tuxguitar-oss-linux-x86</module>
+				<module>../native-modules/tuxguitar-fluidsynth-linux-x86</module>
+			</modules>
+
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-antrun-plugin</artifactId>
+						<version>1.7</version>
+						<executions>
+							<execution>
+								<id>native-module-copy</id>
+								<phase>package</phase>
+								<configuration>
+									<target name="copy-files">
+										<!-- PLUGIN FILES -->
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-alsa-linux-x86/target/build" />
+										</copy>
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-jack-linux-x86/target/build" />
+										</copy>
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-oss-linux-x86/target/build" />
+										</copy>
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-fluidsynth-linux-x86/target/build" />
+										</copy>
+										
+										<chmod file="${project.build.directory}/${project.finalName}/lib/*.so" perm="775" />
+										<!-- /PLUGINS FILES -->
+									</target>
+								</configuration>
+								<goals>
+									<goal>run</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+</project>
diff --git a/build-scripts/tuxguitar-linux-x86/src/resources/dist/about_description.dist b/build-scripts/tuxguitar-linux-x86/src/resources/dist/about_description.dist
new file mode 100644
index 0000000..fe9ae2a
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-x86/src/resources/dist/about_description.dist
@@ -0,0 +1,10 @@
+TuxGuitar is an Open Source multitrack tablature editor and player written in Java.
+
+Copyright (C) 2005 Julian Gabriel Casadesus
+
+TuxGuitar project: http://www.tuxguitar.com.ar
+TuxGuitar community: http://community.tuxguitar.com.ar
+
+This product include third party libraries:
+-> SWT (Standard Widget Toolkit): http://www.eclipse.org/swt/
+-> iText (Free Java-PDF library): http://www.lowagie.com/iText/
diff --git a/build-scripts/tuxguitar-linux-x86/src/resources/dist/tuxguitar-plugin-settings.cfg b/build-scripts/tuxguitar-linux-x86/src/resources/dist/tuxguitar-plugin-settings.cfg
new file mode 100644
index 0000000..a5bac75
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-x86/src/resources/dist/tuxguitar-plugin-settings.cfg
@@ -0,0 +1,4 @@
+### Plugin Settings ###
+tuxguitar-oss.enabled=false
+tuxguitar-jack.enabled=false
+tuxguitar-fluidsynth.enabled=false
diff --git a/build-scripts/tuxguitar-linux-x86/src/resources/dist/tuxguitar.cfg b/build-scripts/tuxguitar-linux-x86/src/resources/dist/tuxguitar.cfg
new file mode 100644
index 0000000..a8798d0
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-x86/src/resources/dist/tuxguitar.cfg
@@ -0,0 +1,13 @@
+font.default=Sans,6,0
+font.note=Sans,7,0
+font.text=Sans,8,0
+font.lyric=Sans,7,0
+font.time-signature=Sans,13,1
+font.printer.default=Sans,6,0
+font.printer.note=Sans,6,0
+font.printer.text=Sans,8,0
+font.printer.lyric=Sans,7,0
+font.printer.time-signature=Sans,10,1
+midi.sequencer=tuxguitar.sequencer
+midi.port=Gervill
+skin=Oxygen
diff --git a/build-scripts/tuxguitar-linux-x86/src/resources/tuxguitar.sh b/build-scripts/tuxguitar-linux-x86/src/resources/tuxguitar.sh
new file mode 100644
index 0000000..335b9d3
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-x86/src/resources/tuxguitar.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+##SCRIPT DIR
+DIR_NAME=`dirname "$0"`
+DIR_NAME=`cd "$DIR_NAME"; pwd`
+cd "${DIR_NAME}"
+##JAVA
+if [ -z $JAVA ]; then
+	JAVA=${JAVA_HOME}/bin/java
+	[ ! -f ${JAVA} ] && JAVA=/usr/bin/java
+	[ ! -f ${JAVA} ] && JAVA=java
+fi
+##MOZILLA_FIVE_HOME
+if [ -z $MOZILLA_FIVE_HOME ]; then
+	MOZILLA_FIVE_HOME=/usr/lib/firefox
+	[ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib/mozilla
+	[ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib/iceweasel
+fi
+##LIBRARY_PATH
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:lib/
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MOZILLA_FIVE_HOME}
+##CLASSPATH
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar.jar
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar-lib.jar
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar-gm-utils.jar
+CLASSPATH=${CLASSPATH}:./lib/swt.jar
+CLASSPATH=${CLASSPATH}:./lib/itext-pdf.jar
+CLASSPATH=${CLASSPATH}:./lib/itext-xmlworker.jar
+CLASSPATH=${CLASSPATH}:./share/
+CLASSPATH=${CLASSPATH}:./dist/
+##MAINCLASS
+MAINCLASS=org.herac.tuxguitar.app.TGMain
+##JVM ARGUMENTS
+VM_ARGS="-Xmx512m"
+##EXPORT VARS
+export CLASSPATH
+export LD_LIBRARY_PATH
+export MOZILLA_FIVE_HOME
+##LAUNCH
+${JAVA} ${VM_ARGS} -cp :${CLASSPATH} -Dtuxguitar.share.path="share/" -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"
diff --git a/build-scripts/tuxguitar-linux-x86_64/pom.xml b/build-scripts/tuxguitar-linux-x86_64/pom.xml
new file mode 100644
index 0000000..d9f4505
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-x86_64/pom.xml
@@ -0,0 +1,328 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../</relativePath>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-linux-x86_64</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<project.rootPath>${project.parent.relativePath}</project.rootPath>
+		<project.finalName>tuxguitar-${project.version}-linux-x86_64</project.finalName>
+		<org.eclipse.swt.artifactId>org.eclipse.swt.gtk.linux.x86_64</org.eclipse.swt.artifactId>
+	</properties>
+	
+	<modules>
+		<module>../../TuxGuitar</module>
+		<module>../../TuxGuitar-lib</module>
+		<module>../../TuxGuitar-gm-utils</module>
+		<module>../../TuxGuitar-ascii</module>
+		<module>../../TuxGuitar-browser-ftp</module>
+		<module>../../TuxGuitar-community</module>
+		<module>../../TuxGuitar-compat</module>
+		<module>../../TuxGuitar-converter</module>
+		<module>../../TuxGuitar-gervill</module>
+		<module>../../TuxGuitar-gm-settings</module>
+		<module>../../TuxGuitar-gtp</module>
+		<module>../../TuxGuitar-gpx</module>
+		<module>../../TuxGuitar-jsa</module>
+		<module>../../TuxGuitar-lilypond</module>
+		<module>../../TuxGuitar-midi</module>
+		<module>../../TuxGuitar-musicxml</module>
+		<module>../../TuxGuitar-pdf</module>
+		<module>../../TuxGuitar-ptb</module>
+		<module>../../TuxGuitar-tef</module>
+		<module>../../TuxGuitar-tuner</module>
+		<module>../../TuxGuitar-svg</module>
+		<module>../../TuxGuitar-image</module>
+	</modules>
+	
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<!-- LIBRARIES -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar</artifactId>
+									<destFileName>tuxguitar.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lib</artifactId>
+                  					<destFileName>tuxguitar-lib.jar</destFileName>
+                  					<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-utils</artifactId>
+                  					<destFileName>tuxguitar-gm-utils.jar</destFileName>
+                  					<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<!-- /LIBRARIES -->
+								
+								<!-- 3RD PARTY LIBRARIES -->
+								<artifactItem>
+									<groupId>${org.eclipse.swt.groupId}</groupId>
+									<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+									<destFileName>swt.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								
+								<artifactItem>
+									<groupId>com.itextpdf</groupId>
+									<artifactId>itextpdf</artifactId>
+									<destFileName>itext-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>com.itextpdf.tool</groupId>
+									<artifactId>xmlworker</artifactId>
+									<destFileName>itext-xmlworker.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<!-- /3RD PARTY LIBRARIES -->
+								
+								<!-- PLUGINS  -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ascii</artifactId>
+									<destFileName>tuxguitar-ascii.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-browser-ftp</artifactId>
+									<destFileName>tuxguitar-browser-ftp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-community</artifactId>
+									<destFileName>tuxguitar-community.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-compat</artifactId>
+									<destFileName>tuxguitar-compat.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-converter</artifactId>
+									<destFileName>tuxguitar-converter.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gervill</artifactId>
+									<destFileName>tuxguitar-gervill.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-settings</artifactId>
+									<destFileName>tuxguitar-gm-settings.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gtp</artifactId>
+									<destFileName>tuxguitar-gtp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gpx</artifactId>
+									<destFileName>tuxguitar-gpx.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jsa</artifactId>
+									<destFileName>tuxguitar-jsa.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lilypond</artifactId>
+									<destFileName>tuxguitar-lilypond.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-midi</artifactId>
+									<destFileName>tuxguitar-midi.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-musicxml</artifactId>
+									<destFileName>tuxguitar-musicxml.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-pdf</artifactId>
+									<destFileName>tuxguitar-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ptb</artifactId>
+									<destFileName>tuxguitar-ptb.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tef</artifactId>
+									<destFileName>tuxguitar-tef.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tuner</artifactId>
+									<destFileName>tuxguitar-tuner.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-svg</artifactId>
+									<destFileName>tuxguitar-svg.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-image</artifactId>
+									<destFileName>tuxguitar-image.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<!-- /PLUGINS  -->
+								
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/${project.finalName}/" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/lib" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/share" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/doc" />
+								
+								<copy todir="${project.build.directory}/${project.finalName}/share">
+									<fileset dir="${project.rootPath}/TuxGuitar/share/"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/doc">
+									<fileset dir="${project.rootPath}/TuxGuitar/doc/"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/dist">
+									<fileset dir="${project.rootPath}/TuxGuitar/dist/"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/dist" overwrite="true">
+									<fileset dir="./src/resources/dist/"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/">
+									<fileset file="./src/resources/tuxguitar.sh"/>
+								</copy>
+								
+								<chmod file="${project.build.directory}/${project.finalName}/tuxguitar.sh" perm="755"/>
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+	
+	<profiles>
+		<profile>
+			<id>native-modules</id>
+			<activation>
+				<property>
+					<name>native-modules</name>
+					<value>true</value>
+				</property>
+			</activation>
+			<modules>
+				<module>../native-modules/tuxguitar-alsa-linux-x86_64</module>
+				<module>../native-modules/tuxguitar-jack-linux-x86_64</module>
+				<module>../native-modules/tuxguitar-oss-linux-x86_64</module>
+				<module>../native-modules/tuxguitar-fluidsynth-linux-x86_64</module>
+			</modules>
+			
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-antrun-plugin</artifactId>
+						<version>1.7</version>
+						<executions>
+							<execution>
+								<id>native-module-copy</id>
+								<phase>package</phase>
+								<configuration>
+									<target name="copy-files">
+										<!-- PLUGIN FILES -->				
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-alsa-linux-x86_64/target/build" />
+										</copy>
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-jack-linux-x86_64/target/build" />
+										</copy>
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-oss-linux-x86_64/target/build" />
+										</copy>
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-fluidsynth-linux-x86_64/target/build" />
+										</copy>
+										
+										<chmod file="${project.build.directory}/${project.finalName}/lib/*.so" perm="775" />
+										<!-- /PLUGINS FILES -->
+									</target>
+								</configuration>
+								<goals>
+									<goal>run</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+</project>
diff --git a/build-scripts/tuxguitar-linux-x86_64/src/resources/dist/about_description.dist b/build-scripts/tuxguitar-linux-x86_64/src/resources/dist/about_description.dist
new file mode 100644
index 0000000..fe9ae2a
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-x86_64/src/resources/dist/about_description.dist
@@ -0,0 +1,10 @@
+TuxGuitar is an Open Source multitrack tablature editor and player written in Java.
+
+Copyright (C) 2005 Julian Gabriel Casadesus
+
+TuxGuitar project: http://www.tuxguitar.com.ar
+TuxGuitar community: http://community.tuxguitar.com.ar
+
+This product include third party libraries:
+-> SWT (Standard Widget Toolkit): http://www.eclipse.org/swt/
+-> iText (Free Java-PDF library): http://www.lowagie.com/iText/
diff --git a/build-scripts/tuxguitar-linux-x86_64/src/resources/dist/tuxguitar.cfg b/build-scripts/tuxguitar-linux-x86_64/src/resources/dist/tuxguitar.cfg
new file mode 100644
index 0000000..a8798d0
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-x86_64/src/resources/dist/tuxguitar.cfg
@@ -0,0 +1,13 @@
+font.default=Sans,6,0
+font.note=Sans,7,0
+font.text=Sans,8,0
+font.lyric=Sans,7,0
+font.time-signature=Sans,13,1
+font.printer.default=Sans,6,0
+font.printer.note=Sans,6,0
+font.printer.text=Sans,8,0
+font.printer.lyric=Sans,7,0
+font.printer.time-signature=Sans,10,1
+midi.sequencer=tuxguitar.sequencer
+midi.port=Gervill
+skin=Oxygen
diff --git a/build-scripts/tuxguitar-linux-x86_64/src/resources/tuxguitar.sh b/build-scripts/tuxguitar-linux-x86_64/src/resources/tuxguitar.sh
new file mode 100644
index 0000000..335b9d3
--- /dev/null
+++ b/build-scripts/tuxguitar-linux-x86_64/src/resources/tuxguitar.sh
@@ -0,0 +1,43 @@
+#!/bin/sh
+##SCRIPT DIR
+DIR_NAME=`dirname "$0"`
+DIR_NAME=`cd "$DIR_NAME"; pwd`
+cd "${DIR_NAME}"
+##JAVA
+if [ -z $JAVA ]; then
+	JAVA=${JAVA_HOME}/bin/java
+	[ ! -f ${JAVA} ] && JAVA=/usr/bin/java
+	[ ! -f ${JAVA} ] && JAVA=java
+fi
+##MOZILLA_FIVE_HOME
+if [ -z $MOZILLA_FIVE_HOME ]; then
+	MOZILLA_FIVE_HOME=/usr/lib/firefox
+	[ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib/mozilla
+	[ ! -d ${MOZILLA_FIVE_HOME} ] && MOZILLA_FIVE_HOME=/usr/lib/iceweasel
+fi
+##LIBRARY_PATH
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:lib/
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:${MOZILLA_FIVE_HOME}
+##CLASSPATH
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar.jar
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar-lib.jar
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar-gm-utils.jar
+CLASSPATH=${CLASSPATH}:./lib/swt.jar
+CLASSPATH=${CLASSPATH}:./lib/itext-pdf.jar
+CLASSPATH=${CLASSPATH}:./lib/itext-xmlworker.jar
+CLASSPATH=${CLASSPATH}:./share/
+CLASSPATH=${CLASSPATH}:./dist/
+##MAINCLASS
+MAINCLASS=org.herac.tuxguitar.app.TGMain
+##JVM ARGUMENTS
+VM_ARGS="-Xmx512m"
+##EXPORT VARS
+export CLASSPATH
+export LD_LIBRARY_PATH
+export MOZILLA_FIVE_HOME
+##LAUNCH
+${JAVA} ${VM_ARGS} -cp :${CLASSPATH} -Dtuxguitar.share.path="share/" -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/pom.xml b/build-scripts/tuxguitar-macosx-cocoa-32/pom.xml
new file mode 100644
index 0000000..6cf0f66
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-32/pom.xml
@@ -0,0 +1,285 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../</relativePath>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-macosx-cocoa-32</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<project.rootPath>${project.parent.relativePath}</project.rootPath>
+		<project.finalName>tuxguitar-${project.version}-macosx-cocoa-32.app</project.finalName>
+		<org.eclipse.swt.artifactId>org.eclipse.swt.cocoa.macosx</org.eclipse.swt.artifactId>
+	</properties>
+
+	<modules>
+		<module>../../TuxGuitar</module>
+		<module>../../TuxGuitar-lib</module>
+		<module>../../TuxGuitar-gm-utils</module>
+		<module>../../TuxGuitar-ascii</module>
+		<module>../../TuxGuitar-browser-ftp</module>
+		<module>../../TuxGuitar-community</module>
+		<module>../../TuxGuitar-compat</module>
+		<module>../../TuxGuitar-converter</module>
+		<module>../../TuxGuitar-gervill</module>
+		<module>../../TuxGuitar-gm-settings</module>
+		<module>../../TuxGuitar-gtp</module>
+		<module>../../TuxGuitar-gpx</module>
+		<module>../../TuxGuitar-jsa</module>
+		<module>../../TuxGuitar-lilypond</module>
+		<module>../../TuxGuitar-midi</module>
+		<module>../../TuxGuitar-musicxml</module>
+		<module>../../TuxGuitar-pdf</module>
+		<module>../../TuxGuitar-ptb</module>
+		<module>../../TuxGuitar-tef</module>
+		<module>../../TuxGuitar-tuner</module>
+		<module>../../TuxGuitar-svg</module>
+		<module>../../TuxGuitar-image</module>
+		<module>../../TuxGuitar-cocoa-integration</module>
+		<module>../../TuxGuitar-AudioUnit</module>
+	</modules>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<!-- LIBRARIES -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar</artifactId>
+									<destFileName>tuxguitar.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lib</artifactId>
+									<destFileName>tuxguitar-lib.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-utils</artifactId>
+									<destFileName>tuxguitar-gm-utils.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<!-- /LIBRARIES -->
+
+								<!-- 3RD PARTY LIBRARIES -->
+								<artifactItem>
+									<groupId>${org.eclipse.swt.groupId}</groupId>
+									<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+									<destFileName>swt.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+
+								<artifactItem>
+									<groupId>com.itextpdf</groupId>
+									<artifactId>itextpdf</artifactId>
+									<destFileName>itext-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>com.itextpdf.tool</groupId>
+									<artifactId>xmlworker</artifactId>
+									<destFileName>itext-xmlworker.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<!-- /3RD PARTY LIBRARIES -->
+
+								<!-- PLUGINS -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ascii</artifactId>
+									<destFileName>tuxguitar-ascii.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-browser-ftp</artifactId>
+									<destFileName>tuxguitar-browser-ftp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-community</artifactId>
+									<destFileName>tuxguitar-community.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-compat</artifactId>
+									<destFileName>tuxguitar-compat.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-converter</artifactId>
+									<destFileName>tuxguitar-converter.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gervill</artifactId>
+									<destFileName>tuxguitar-gervill.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-settings</artifactId>
+									<destFileName>tuxguitar-gm-settings.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gtp</artifactId>
+									<destFileName>tuxguitar-gtp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gpx</artifactId>
+									<destFileName>tuxguitar-gpx.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jsa</artifactId>
+									<destFileName>tuxguitar-jsa.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lilypond</artifactId>
+									<destFileName>tuxguitar-lilypond.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-midi</artifactId>
+									<destFileName>tuxguitar-midi.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-musicxml</artifactId>
+									<destFileName>tuxguitar-musicxml.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-pdf</artifactId>
+									<destFileName>tuxguitar-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ptb</artifactId>
+									<destFileName>tuxguitar-ptb.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tef</artifactId>
+									<destFileName>tuxguitar-tef.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tuner</artifactId>
+									<destFileName>tuxguitar-tuner.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-svg</artifactId>
+									<destFileName>tuxguitar-svg.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-image</artifactId>
+									<destFileName>tuxguitar-image.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-cocoa-integration</artifactId>
+									<destFileName>tuxguitar-cocoa-integration.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-audiounit</artifactId>
+									<destFileName>tuxguitar-audiounit.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<!-- /PLUGINS -->
+
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/${project.finalName}/" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents/MacOS" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents/MacOS/lib" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents/MacOS/share" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents/MacOS/doc" />
+
+								<copy todir="${project.build.directory}/${project.finalName}/Contents/MacOS/share">
+									<fileset dir="${project.rootPath}/TuxGuitar/share/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/Contents/MacOS/doc">
+									<fileset dir="${project.rootPath}/TuxGuitar/doc/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/Contents/MacOS/dist">
+									<fileset dir="${project.rootPath}/TuxGuitar/dist/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/" overwrite="true">
+									<fileset dir="./src/resources/" />
+								</copy>
+								
+								<chmod file="${project.build.directory}/${project.finalName}/Contents/MacOS/tuxguitar" perm="755" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/Info.plist b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/Info.plist
new file mode 100644
index 0000000..7549432
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/Info.plist
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+<key>CFBundleExecutable</key>
+<string>tuxguitar</string>
+<key>CFBundleGetInfoString</key>
+<string>TuxGuitar 1.2 for Mac OS X</string>
+<key>CFBundleIconFile</key>
+<string>icon.icns</string>
+<key>CFBundleIdentifier</key>
+<string>org.herac.tuxguitar</string>
+<key>CFBundleInfoDictionaryVersion</key>
+<string>6.0</string>
+<key>CFBundleName</key>
+<string>TuxGuitar</string>
+<key>CFBundlePackageType</key>
+<string>APPL</string>
+<key>CFBundleShortVersionString</key>
+<string>1.2</string>
+<key>CFBundleSignature</key>
+<string>?????</string>
+<key>CFBundleVersion</key>
+<string>1.2</string>
+<key>NSPrincipalClass</key>
+<string>NSApplication</string>
+<key>CFBundleDocumentTypes</key>
+<array>
+<dict>
+<key>CFBundleTypeExtensions</key>
+<array>
+<string>tg</string>
+</array>
+<key>CFBundleTypeIconFile</key>
+<string>tgdoc.icns</string>
+<key>CFBundleTypeName</key>
+<string>TuxGuitar Document</string>
+<key>CFBundleTypeRole</key>
+<string>Editor</string>
+<key>LSIsAppleDefaultForType</key>
+<true/>
+<key>LSTypeIsPackage</key>
+<false/>
+</dict>
+<dict>
+<key>CFBundleTypeExtensions</key>
+<array>
+<string>gp</string>
+<string>gtp</string>
+<string>gp2</string>
+<string>gp3</string>
+<string>gp4</string>
+<string>gp5</string>
+</array>
+<key>CFBundleTypeIconFile</key>
+<string>tgdoc.icns</string>
+<key>CFBundleTypeName</key>
+<string>Guitar Pro Document</string>
+<key>CFBundleTypeRole</key>
+<string>Editor</string>
+<key>LSIsAppleDefaultForType</key>
+<true/>
+<key>LSTypeIsPackage</key>
+<false/>
+</dict>
+<dict>
+<key>CFBundleTypeExtensions</key>
+<array>
+<string>ptb</string>
+</array>
+<key>CFBundleTypeIconFile</key>
+<string>tgdoc.icns</string>
+<key>CFBundleTypeName</key>
+<string>PowerTab Document</string>
+<key>CFBundleTypeRole</key>
+<string>Editor</string>
+<key>LSIsAppleDefaultForType</key>
+<true/>
+<key>LSTypeIsPackage</key>
+<false/>
+</dict>
+</array>
+</dict>
+</plist>
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/dist/about_description.dist b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/dist/about_description.dist
new file mode 100644
index 0000000..d435889
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/dist/about_description.dist
@@ -0,0 +1,11 @@
+TuxGuitar is an Open Source multitrack tablature editor and player written in Java.
+
+Copyright (C) 2005 Julian Gabriel Casadesus
+
+TuxGuitar project: http://www.tuxguitar.com.ar
+TuxGuitar community: http://community.tuxguitar.com.ar
+
+This product include third party libraries:
+-> SWT (Standard Widget Toolkit): http://www.eclipse.org/swt/
+-> Gervill (Software Synthesizer): https://gervill.dev.java.net/
+-> iText (Free Java-PDF library): http://www.lowagie.com/iText/
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/dist/tuxguitar-shortcuts.xml b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/dist/tuxguitar-shortcuts.xml
new file mode 100644
index 0000000..0af07a7
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/dist/tuxguitar-shortcuts.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shortcuts>
+	<shortcut key="48" mask="0" action="action.note.general.set-fret-number-0"/>
+	<shortcut key="49" mask="0" action="action.note.general.set-fret-number-1"/>
+	<shortcut key="50" mask="0" action="action.note.general.set-fret-number-2"/>
+	<shortcut key="51" mask="0" action="action.note.general.set-fret-number-3"/>
+	<shortcut key="52" mask="0" action="action.note.general.set-fret-number-4"/>
+	<shortcut key="53" mask="0" action="action.note.general.set-fret-number-5"/>
+	<shortcut key="54" mask="0" action="action.note.general.set-fret-number-6"/>
+	<shortcut key="55" mask="0" action="action.note.general.set-fret-number-7"/>
+	<shortcut key="56" mask="0" action="action.note.general.set-fret-number-8"/>
+	<shortcut key="57" mask="0" action="action.note.general.set-fret-number-9"/>
+	<shortcut key="16777230" mask="0" action="action.composition.change-info"/>
+	<shortcut key="121" mask="4194304" action="action.edit.redo"/>
+	<shortcut key="122" mask="4194304" action="action.edit.undo"/>
+	<shortcut key="16777265" mask="4194304" action="action.edit.voice-1"/>
+	<shortcut key="16777266" mask="4194304" action="action.edit.voice-2"/>
+	<shortcut key="16777229" mask="65536" action="action.file.exit"/>
+	<shortcut key="110" mask="4194304" action="action.file.new"/>
+	<shortcut key="111" mask="4194304" action="action.file.open"/>
+	<shortcut key="112" mask="4194304" action="action.file.print"/>
+	<shortcut key="115" mask="4194304" action="action.file.save"/>
+	<shortcut key="16777237" mask="0" action="action.file.save-as"/>
+	<shortcut key="16777226" mask="0" action="action.help.doc"/>
+	<shortcut key="97" mask="0" action="action.insert.chord"/>
+	<shortcut key="116" mask="0" action="action.insert.text"/>
+	<shortcut key="16777225" mask="131072" action="action.marker.add"/>
+	<shortcut key="16777220" mask="65536" action="action.marker.go-next"/>
+	<shortcut key="16777219" mask="65536" action="action.marker.go-previous"/>
+	<shortcut key="99" mask="4194304" action="action.measure.copy"/>
+	<shortcut key="16777219" mask="393216" action="action.measure.go-first"/>
+	<shortcut key="16777220" mask="393216" action="action.measure.go-last"/>
+	<shortcut key="16777220" mask="4194304" action="action.measure.go-next"/>
+	<shortcut key="16777219" mask="4194304" action="action.measure.go-previous"/>
+	<shortcut key="118" mask="4194304" action="action.measure.paste"/>
+	<shortcut key="16777258" mask="0" action="action.note.duration.change-dotted"/>
+	<shortcut key="16777263" mask="0" action="action.note.duration.change-division-type"/>	
+	<shortcut key="98" mask="0" action="action.note.effect.change-bend"/>
+	<shortcut key="120" mask="0" action="action.note.effect.change-dead"/>
+	<shortcut key="102" mask="0" action="action.note.effect.change-fade-in"/>
+	<shortcut key="111" mask="0" action="action.note.effect.change-ghost"/>
+	<shortcut key="103" mask="0" action="action.note.effect.change-grace"/>
+	<shortcut key="104" mask="0" action="action.note.effect.change-hammer"/>
+	<shortcut key="112" mask="0" action="action.note.effect.change-palm-mute"/>
+	<shortcut key="115" mask="0" action="action.note.effect.change-slide"/>
+	<shortcut key="118" mask="0" action="action.note.effect.change-vibrato"/>
+	<shortcut key="127" mask="4194304" action="action.note.general.clean-beat"/>
+	<shortcut key="16777217" mask="4194304" action="action.beat.general.voice-up"/>
+	<shortcut key="16777218" mask="4194304" action="action.beat.general.voice-down"/>
+	<shortcut key="97" mask="4194304" action="action.beat.general.voice-auto"/>
+	<shortcut key="16777219" mask="131072" action="action.note.general.decrement-semitone"/>
+	<shortcut key="16777220" mask="131072" action="action.note.general.increment-semitone"/>
+	<shortcut key="16777218" mask="131072" action="action.note.general.shift-down"/>
+	<shortcut key="16777217" mask="131072" action="action.note.general.shift-up"/>
+	<shortcut key="108" mask="0" action="action.note.general.tied"/>
+	<shortcut key="16777232" mask="0" action="action.settings.configure"/>
+	<shortcut key="98" mask="4194304" action="action.tools.browser"/>
+	<shortcut key="16777225" mask="393216" action="action.track.add"/>
+	<shortcut key="16777217" mask="393216" action="action.track.go-previous"/>
+	<shortcut key="16777218" mask="393216" action="action.track.go-next"/>
+	<shortcut key="127" mask="393216" action="action.track.remove"/>
+	<shortcut key="16777234" mask="0" action="action.transport.mode"/>
+	<shortcut key="32" mask="0" action="action.transport.play"/>
+	<shortcut key="109" mask="4194304" action="action.view.show-mixer"/>
+	<shortcut key="116" mask="4194304" action="action.view.show-transport"/>
+</shortcuts>
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/dist/tuxguitar.cfg b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/dist/tuxguitar.cfg
new file mode 100644
index 0000000..f9ccb34
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/dist/tuxguitar.cfg
@@ -0,0 +1,10 @@
+painter.force-os-defaults=true
+font.default=Sans,6,2
+font.note=Sans,7,1
+font.time-signature=Sans,13,3
+font.printer.default=Sans,6,2
+font.printer.note=Sans,6,0
+font.printer.time-signature=Sans,12,3
+midi.sequencer=tuxguitar.sequencer
+midi.port=audiounit
+skin=Oxygen
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/lib/gervill.jar b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/lib/gervill.jar
new file mode 100644
index 0000000..9d67ebc
Binary files /dev/null and b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/lib/gervill.jar differ
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/lib/libtuxguitar-audiounit-jni.jnilib b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/lib/libtuxguitar-audiounit-jni.jnilib
new file mode 100644
index 0000000..b7177e7
Binary files /dev/null and b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/lib/libtuxguitar-audiounit-jni.jnilib differ
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/tuxguitar b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/tuxguitar
new file mode 100755
index 0000000..6b99abc
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/MacOS/tuxguitar
@@ -0,0 +1,29 @@
+#!/bin/bash
+##SCRIPT DIR
+DIR_NAME=`dirname "$0"`
+DIR_NAME=`cd "$DIR_NAME"; pwd`
+cd "${DIR_NAME}"
+##CLASSPATH
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar.jar
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar-lib.jar
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar-gm-utils.jar
+CLASSPATH=${CLASSPATH}:./lib/swt.jar
+CLASSPATH=${CLASSPATH}:./lib/gervill.jar
+CLASSPATH=${CLASSPATH}:./lib/itext-pdf.jar
+CLASSPATH=${CLASSPATH}:./lib/itext-xmlworker.jar
+CLASSPATH=${CLASSPATH}:./share/
+CLASSPATH=${CLASSPATH}:./dist/
+##LIBRARY_PATH
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:lib/
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
+##MAINCLASS
+MAINCLASS=org.herac.tuxguitar.app.TGMain
+##JVM ARGUMENTS
+VM_ARGS="-Xmx512m"
+##SWT ARGUMENTS
+SWT_ARGS="-XstartOnFirstThread"
+##LAUNCH
+exec java ${VM_ARGS} ${SWT_ARGS} -cp :${CLASSPATH} -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/Resources/icon.icns b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/Resources/icon.icns
new file mode 100644
index 0000000..d05a1ce
Binary files /dev/null and b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/Resources/icon.icns differ
diff --git a/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/Resources/tgdoc.icns b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/Resources/tgdoc.icns
new file mode 100644
index 0000000..2060a6e
Binary files /dev/null and b/build-scripts/tuxguitar-macosx-cocoa-32/src/resources/Contents/Resources/tgdoc.icns differ
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/pom.xml b/build-scripts/tuxguitar-macosx-cocoa-64/pom.xml
new file mode 100644
index 0000000..4d4352e
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-64/pom.xml
@@ -0,0 +1,285 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../</relativePath>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-macosx-cocoa-64</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<project.rootPath>${project.parent.relativePath}</project.rootPath>
+		<project.finalName>tuxguitar-${project.version}-macosx-cocoa-64.app</project.finalName>
+		<org.eclipse.swt.artifactId>org.eclipse.swt.cocoa.macosx.x86_64</org.eclipse.swt.artifactId>
+	</properties>
+
+	<modules>
+		<module>../../TuxGuitar</module>
+		<module>../../TuxGuitar-lib</module>
+		<module>../../TuxGuitar-gm-utils</module>
+		<module>../../TuxGuitar-ascii</module>
+		<module>../../TuxGuitar-browser-ftp</module>
+		<module>../../TuxGuitar-community</module>
+		<module>../../TuxGuitar-compat</module>
+		<module>../../TuxGuitar-converter</module>
+		<module>../../TuxGuitar-gervill</module>
+		<module>../../TuxGuitar-gm-settings</module>
+		<module>../../TuxGuitar-gtp</module>
+		<module>../../TuxGuitar-gpx</module>
+		<module>../../TuxGuitar-jsa</module>
+		<module>../../TuxGuitar-lilypond</module>
+		<module>../../TuxGuitar-midi</module>
+		<module>../../TuxGuitar-musicxml</module>
+		<module>../../TuxGuitar-pdf</module>
+		<module>../../TuxGuitar-ptb</module>
+		<module>../../TuxGuitar-tef</module>
+		<module>../../TuxGuitar-tuner</module>
+		<module>../../TuxGuitar-svg</module>
+		<module>../../TuxGuitar-image</module>
+		<module>../../TuxGuitar-cocoa-integration</module>
+		<module>../../TuxGuitar-AudioUnit</module>
+	</modules>
+
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<!-- LIBRARIES -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar</artifactId>
+									<destFileName>tuxguitar.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lib</artifactId>
+									<destFileName>tuxguitar-lib.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-utils</artifactId>
+									<destFileName>tuxguitar-gm-utils.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<!-- /LIBRARIES -->
+
+								<!-- 3RD PARTY LIBRARIES -->
+								<artifactItem>
+									<groupId>${org.eclipse.swt.groupId}</groupId>
+									<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+									<destFileName>swt.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+
+								<artifactItem>
+									<groupId>com.itextpdf</groupId>
+									<artifactId>itextpdf</artifactId>
+									<destFileName>itext-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>com.itextpdf.tool</groupId>
+									<artifactId>xmlworker</artifactId>
+									<destFileName>itext-xmlworker.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/lib</outputDirectory>
+								</artifactItem>
+								<!-- /3RD PARTY LIBRARIES -->
+
+								<!-- PLUGINS -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ascii</artifactId>
+									<destFileName>tuxguitar-ascii.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-browser-ftp</artifactId>
+									<destFileName>tuxguitar-browser-ftp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-community</artifactId>
+									<destFileName>tuxguitar-community.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-compat</artifactId>
+									<destFileName>tuxguitar-compat.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-converter</artifactId>
+									<destFileName>tuxguitar-converter.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gervill</artifactId>
+									<destFileName>tuxguitar-gervill.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-settings</artifactId>
+									<destFileName>tuxguitar-gm-settings.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gtp</artifactId>
+									<destFileName>tuxguitar-gtp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gpx</artifactId>
+									<destFileName>tuxguitar-gpx.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jsa</artifactId>
+									<destFileName>tuxguitar-jsa.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lilypond</artifactId>
+									<destFileName>tuxguitar-lilypond.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-midi</artifactId>
+									<destFileName>tuxguitar-midi.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-musicxml</artifactId>
+									<destFileName>tuxguitar-musicxml.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-pdf</artifactId>
+									<destFileName>tuxguitar-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ptb</artifactId>
+									<destFileName>tuxguitar-ptb.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tef</artifactId>
+									<destFileName>tuxguitar-tef.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tuner</artifactId>
+									<destFileName>tuxguitar-tuner.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-svg</artifactId>
+									<destFileName>tuxguitar-svg.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-image</artifactId>
+									<destFileName>tuxguitar-image.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-cocoa-integration</artifactId>
+									<destFileName>tuxguitar-cocoa-integration.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-audiounit</artifactId>
+									<destFileName>tuxguitar-audiounit.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/Contents/MacOS/share/plugins</outputDirectory>
+								</artifactItem>
+								<!-- /PLUGINS -->
+
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/${project.finalName}/" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents/MacOS" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents/MacOS/lib" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents/MacOS/share" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/Contents/MacOS/doc" />
+
+								<copy todir="${project.build.directory}/${project.finalName}/Contents/MacOS/share">
+									<fileset dir="${project.rootPath}/TuxGuitar/share/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/Contents/MacOS/doc">
+									<fileset dir="${project.rootPath}/TuxGuitar/doc/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/Contents/MacOS/dist">
+									<fileset dir="${project.rootPath}/TuxGuitar/dist/" />
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/" overwrite="true">
+									<fileset dir="./src/resources/" />
+								</copy>
+								
+								<chmod file="${project.build.directory}/${project.finalName}/Contents/MacOS/tuxguitar" perm="755" />
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+
+</project>
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/Info.plist b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/Info.plist
new file mode 100644
index 0000000..7549432
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/Info.plist
@@ -0,0 +1,84 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+<key>CFBundleExecutable</key>
+<string>tuxguitar</string>
+<key>CFBundleGetInfoString</key>
+<string>TuxGuitar 1.2 for Mac OS X</string>
+<key>CFBundleIconFile</key>
+<string>icon.icns</string>
+<key>CFBundleIdentifier</key>
+<string>org.herac.tuxguitar</string>
+<key>CFBundleInfoDictionaryVersion</key>
+<string>6.0</string>
+<key>CFBundleName</key>
+<string>TuxGuitar</string>
+<key>CFBundlePackageType</key>
+<string>APPL</string>
+<key>CFBundleShortVersionString</key>
+<string>1.2</string>
+<key>CFBundleSignature</key>
+<string>?????</string>
+<key>CFBundleVersion</key>
+<string>1.2</string>
+<key>NSPrincipalClass</key>
+<string>NSApplication</string>
+<key>CFBundleDocumentTypes</key>
+<array>
+<dict>
+<key>CFBundleTypeExtensions</key>
+<array>
+<string>tg</string>
+</array>
+<key>CFBundleTypeIconFile</key>
+<string>tgdoc.icns</string>
+<key>CFBundleTypeName</key>
+<string>TuxGuitar Document</string>
+<key>CFBundleTypeRole</key>
+<string>Editor</string>
+<key>LSIsAppleDefaultForType</key>
+<true/>
+<key>LSTypeIsPackage</key>
+<false/>
+</dict>
+<dict>
+<key>CFBundleTypeExtensions</key>
+<array>
+<string>gp</string>
+<string>gtp</string>
+<string>gp2</string>
+<string>gp3</string>
+<string>gp4</string>
+<string>gp5</string>
+</array>
+<key>CFBundleTypeIconFile</key>
+<string>tgdoc.icns</string>
+<key>CFBundleTypeName</key>
+<string>Guitar Pro Document</string>
+<key>CFBundleTypeRole</key>
+<string>Editor</string>
+<key>LSIsAppleDefaultForType</key>
+<true/>
+<key>LSTypeIsPackage</key>
+<false/>
+</dict>
+<dict>
+<key>CFBundleTypeExtensions</key>
+<array>
+<string>ptb</string>
+</array>
+<key>CFBundleTypeIconFile</key>
+<string>tgdoc.icns</string>
+<key>CFBundleTypeName</key>
+<string>PowerTab Document</string>
+<key>CFBundleTypeRole</key>
+<string>Editor</string>
+<key>LSIsAppleDefaultForType</key>
+<true/>
+<key>LSTypeIsPackage</key>
+<false/>
+</dict>
+</array>
+</dict>
+</plist>
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/dist/about_description.dist b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/dist/about_description.dist
new file mode 100644
index 0000000..d435889
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/dist/about_description.dist
@@ -0,0 +1,11 @@
+TuxGuitar is an Open Source multitrack tablature editor and player written in Java.
+
+Copyright (C) 2005 Julian Gabriel Casadesus
+
+TuxGuitar project: http://www.tuxguitar.com.ar
+TuxGuitar community: http://community.tuxguitar.com.ar
+
+This product include third party libraries:
+-> SWT (Standard Widget Toolkit): http://www.eclipse.org/swt/
+-> Gervill (Software Synthesizer): https://gervill.dev.java.net/
+-> iText (Free Java-PDF library): http://www.lowagie.com/iText/
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/dist/tuxguitar-shortcuts.xml b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/dist/tuxguitar-shortcuts.xml
new file mode 100644
index 0000000..0af07a7
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/dist/tuxguitar-shortcuts.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shortcuts>
+	<shortcut key="48" mask="0" action="action.note.general.set-fret-number-0"/>
+	<shortcut key="49" mask="0" action="action.note.general.set-fret-number-1"/>
+	<shortcut key="50" mask="0" action="action.note.general.set-fret-number-2"/>
+	<shortcut key="51" mask="0" action="action.note.general.set-fret-number-3"/>
+	<shortcut key="52" mask="0" action="action.note.general.set-fret-number-4"/>
+	<shortcut key="53" mask="0" action="action.note.general.set-fret-number-5"/>
+	<shortcut key="54" mask="0" action="action.note.general.set-fret-number-6"/>
+	<shortcut key="55" mask="0" action="action.note.general.set-fret-number-7"/>
+	<shortcut key="56" mask="0" action="action.note.general.set-fret-number-8"/>
+	<shortcut key="57" mask="0" action="action.note.general.set-fret-number-9"/>
+	<shortcut key="16777230" mask="0" action="action.composition.change-info"/>
+	<shortcut key="121" mask="4194304" action="action.edit.redo"/>
+	<shortcut key="122" mask="4194304" action="action.edit.undo"/>
+	<shortcut key="16777265" mask="4194304" action="action.edit.voice-1"/>
+	<shortcut key="16777266" mask="4194304" action="action.edit.voice-2"/>
+	<shortcut key="16777229" mask="65536" action="action.file.exit"/>
+	<shortcut key="110" mask="4194304" action="action.file.new"/>
+	<shortcut key="111" mask="4194304" action="action.file.open"/>
+	<shortcut key="112" mask="4194304" action="action.file.print"/>
+	<shortcut key="115" mask="4194304" action="action.file.save"/>
+	<shortcut key="16777237" mask="0" action="action.file.save-as"/>
+	<shortcut key="16777226" mask="0" action="action.help.doc"/>
+	<shortcut key="97" mask="0" action="action.insert.chord"/>
+	<shortcut key="116" mask="0" action="action.insert.text"/>
+	<shortcut key="16777225" mask="131072" action="action.marker.add"/>
+	<shortcut key="16777220" mask="65536" action="action.marker.go-next"/>
+	<shortcut key="16777219" mask="65536" action="action.marker.go-previous"/>
+	<shortcut key="99" mask="4194304" action="action.measure.copy"/>
+	<shortcut key="16777219" mask="393216" action="action.measure.go-first"/>
+	<shortcut key="16777220" mask="393216" action="action.measure.go-last"/>
+	<shortcut key="16777220" mask="4194304" action="action.measure.go-next"/>
+	<shortcut key="16777219" mask="4194304" action="action.measure.go-previous"/>
+	<shortcut key="118" mask="4194304" action="action.measure.paste"/>
+	<shortcut key="16777258" mask="0" action="action.note.duration.change-dotted"/>
+	<shortcut key="16777263" mask="0" action="action.note.duration.change-division-type"/>	
+	<shortcut key="98" mask="0" action="action.note.effect.change-bend"/>
+	<shortcut key="120" mask="0" action="action.note.effect.change-dead"/>
+	<shortcut key="102" mask="0" action="action.note.effect.change-fade-in"/>
+	<shortcut key="111" mask="0" action="action.note.effect.change-ghost"/>
+	<shortcut key="103" mask="0" action="action.note.effect.change-grace"/>
+	<shortcut key="104" mask="0" action="action.note.effect.change-hammer"/>
+	<shortcut key="112" mask="0" action="action.note.effect.change-palm-mute"/>
+	<shortcut key="115" mask="0" action="action.note.effect.change-slide"/>
+	<shortcut key="118" mask="0" action="action.note.effect.change-vibrato"/>
+	<shortcut key="127" mask="4194304" action="action.note.general.clean-beat"/>
+	<shortcut key="16777217" mask="4194304" action="action.beat.general.voice-up"/>
+	<shortcut key="16777218" mask="4194304" action="action.beat.general.voice-down"/>
+	<shortcut key="97" mask="4194304" action="action.beat.general.voice-auto"/>
+	<shortcut key="16777219" mask="131072" action="action.note.general.decrement-semitone"/>
+	<shortcut key="16777220" mask="131072" action="action.note.general.increment-semitone"/>
+	<shortcut key="16777218" mask="131072" action="action.note.general.shift-down"/>
+	<shortcut key="16777217" mask="131072" action="action.note.general.shift-up"/>
+	<shortcut key="108" mask="0" action="action.note.general.tied"/>
+	<shortcut key="16777232" mask="0" action="action.settings.configure"/>
+	<shortcut key="98" mask="4194304" action="action.tools.browser"/>
+	<shortcut key="16777225" mask="393216" action="action.track.add"/>
+	<shortcut key="16777217" mask="393216" action="action.track.go-previous"/>
+	<shortcut key="16777218" mask="393216" action="action.track.go-next"/>
+	<shortcut key="127" mask="393216" action="action.track.remove"/>
+	<shortcut key="16777234" mask="0" action="action.transport.mode"/>
+	<shortcut key="32" mask="0" action="action.transport.play"/>
+	<shortcut key="109" mask="4194304" action="action.view.show-mixer"/>
+	<shortcut key="116" mask="4194304" action="action.view.show-transport"/>
+</shortcuts>
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/dist/tuxguitar.cfg b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/dist/tuxguitar.cfg
new file mode 100644
index 0000000..f9ccb34
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/dist/tuxguitar.cfg
@@ -0,0 +1,10 @@
+painter.force-os-defaults=true
+font.default=Sans,6,2
+font.note=Sans,7,1
+font.time-signature=Sans,13,3
+font.printer.default=Sans,6,2
+font.printer.note=Sans,6,0
+font.printer.time-signature=Sans,12,3
+midi.sequencer=tuxguitar.sequencer
+midi.port=audiounit
+skin=Oxygen
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/lib/gervill.jar b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/lib/gervill.jar
new file mode 100644
index 0000000..9d67ebc
Binary files /dev/null and b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/lib/gervill.jar differ
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/lib/libtuxguitar-audiounit-jni.jnilib b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/lib/libtuxguitar-audiounit-jni.jnilib
new file mode 100644
index 0000000..b7177e7
Binary files /dev/null and b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/lib/libtuxguitar-audiounit-jni.jnilib differ
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/tuxguitar b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/tuxguitar
new file mode 100755
index 0000000..6b99abc
--- /dev/null
+++ b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/MacOS/tuxguitar
@@ -0,0 +1,29 @@
+#!/bin/bash
+##SCRIPT DIR
+DIR_NAME=`dirname "$0"`
+DIR_NAME=`cd "$DIR_NAME"; pwd`
+cd "${DIR_NAME}"
+##CLASSPATH
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar.jar
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar-lib.jar
+CLASSPATH=${CLASSPATH}:./lib/tuxguitar-gm-utils.jar
+CLASSPATH=${CLASSPATH}:./lib/swt.jar
+CLASSPATH=${CLASSPATH}:./lib/gervill.jar
+CLASSPATH=${CLASSPATH}:./lib/itext-pdf.jar
+CLASSPATH=${CLASSPATH}:./lib/itext-xmlworker.jar
+CLASSPATH=${CLASSPATH}:./share/
+CLASSPATH=${CLASSPATH}:./dist/
+##LIBRARY_PATH
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:lib/
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/lib/jni
+LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib
+##MAINCLASS
+MAINCLASS=org.herac.tuxguitar.app.TGMain
+##JVM ARGUMENTS
+VM_ARGS="-Xmx512m"
+##SWT ARGUMENTS
+SWT_ARGS="-XstartOnFirstThread"
+##LAUNCH
+exec java ${VM_ARGS} ${SWT_ARGS} -cp :${CLASSPATH} -Djava.library.path="${LD_LIBRARY_PATH}" ${MAINCLASS} "$1" "$2"
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/Resources/icon.icns b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/Resources/icon.icns
new file mode 100644
index 0000000..d05a1ce
Binary files /dev/null and b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/Resources/icon.icns differ
diff --git a/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/Resources/tgdoc.icns b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/Resources/tgdoc.icns
new file mode 100644
index 0000000..2060a6e
Binary files /dev/null and b/build-scripts/tuxguitar-macosx-cocoa-64/src/resources/Contents/Resources/tgdoc.icns differ
diff --git a/build-scripts/tuxguitar-windows-x86/pom.xml b/build-scripts/tuxguitar-windows-x86/pom.xml
new file mode 100644
index 0000000..c007526
--- /dev/null
+++ b/build-scripts/tuxguitar-windows-x86/pom.xml
@@ -0,0 +1,329 @@
+<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/xsd/maven-4.0.0.xsd">
+	<parent>
+		<artifactId>tuxguitar-pom</artifactId>
+		<groupId>org.herac.tuxguitar</groupId>
+		<version>1.3-SNAPSHOT</version>
+		<relativePath>../../</relativePath>
+	</parent>
+
+	<modelVersion>4.0.0</modelVersion>
+	<artifactId>tuxguitar-windows-x86</artifactId>
+	<packaging>pom</packaging>
+	<name>${project.artifactId}</name>
+
+	<properties>
+		<project.rootPath>${project.parent.relativePath}</project.rootPath>
+		<project.finalName>tuxguitar-${project.version}-windows-x86</project.finalName>
+		<org.eclipse.swt.artifactId>org.eclipse.swt.win32.win32.x86</org.eclipse.swt.artifactId>
+	</properties>
+	
+	<modules>
+		<module>../../TuxGuitar</module>
+		<module>../../TuxGuitar-lib</module>
+		<module>../../TuxGuitar-gm-utils</module>
+		<module>../../TuxGuitar-ascii</module>
+		<module>../../TuxGuitar-browser-ftp</module>
+		<module>../../TuxGuitar-community</module>
+		<module>../../TuxGuitar-compat</module>
+		<module>../../TuxGuitar-converter</module>
+		<module>../../TuxGuitar-gervill</module>
+		<module>../../TuxGuitar-gm-settings</module>
+		<module>../../TuxGuitar-gtp</module>
+		<module>../../TuxGuitar-gpx</module>
+		<module>../../TuxGuitar-jsa</module>
+		<module>../../TuxGuitar-lilypond</module>
+		<module>../../TuxGuitar-midi</module>
+		<module>../../TuxGuitar-musicxml</module>
+		<module>../../TuxGuitar-pdf</module>
+		<module>../../TuxGuitar-ptb</module>
+		<module>../../TuxGuitar-tef</module>
+		<module>../../TuxGuitar-tuner</module>
+		<module>../../TuxGuitar-svg</module>
+		<module>../../TuxGuitar-image</module>
+	</modules>
+	
+	<build>
+		<sourceDirectory>src</sourceDirectory>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-dependency-plugin</artifactId>
+				<version>2.4</version>
+				<executions>
+					<execution>
+						<id>copy-libs</id>
+						<phase>package</phase>
+						<goals>
+							<goal>copy</goal>
+						</goals>
+						<configuration>
+							<artifactItems>
+								<!-- LIBRARIES -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar</artifactId>
+									<destFileName>tuxguitar.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lib</artifactId>
+                  					<destFileName>tuxguitar-lib.jar</destFileName>
+                  					<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-utils</artifactId>
+                  					<destFileName>tuxguitar-gm-utils.jar</destFileName>
+                  					<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<!-- /LIBRARIES -->
+								
+								<!-- 3RD PARTY LIBRARIES -->
+								<artifactItem>
+									<groupId>${org.eclipse.swt.groupId}</groupId>
+									<artifactId>${org.eclipse.swt.artifactId}</artifactId>
+									<destFileName>swt.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								
+								<artifactItem>
+									<groupId>com.itextpdf</groupId>
+									<artifactId>itextpdf</artifactId>
+									<destFileName>itext-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>com.itextpdf.tool</groupId>
+									<artifactId>xmlworker</artifactId>
+									<destFileName>itext-xmlworker.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/lib</outputDirectory>
+								</artifactItem>
+								<!-- /3RD PARTY LIBRARIES -->
+								
+								<!-- PLUGINS  -->
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ascii</artifactId>
+									<destFileName>tuxguitar-ascii.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-browser-ftp</artifactId>
+									<destFileName>tuxguitar-browser-ftp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-community</artifactId>
+									<destFileName>tuxguitar-community.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-compat</artifactId>
+									<destFileName>tuxguitar-compat.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-converter</artifactId>
+									<destFileName>tuxguitar-converter.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gervill</artifactId>
+									<destFileName>tuxguitar-gervill.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gm-settings</artifactId>
+									<destFileName>tuxguitar-gm-settings.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gtp</artifactId>
+									<destFileName>tuxguitar-gtp.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-gpx</artifactId>
+									<destFileName>tuxguitar-gpx.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-jsa</artifactId>
+									<destFileName>tuxguitar-jsa.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-lilypond</artifactId>
+									<destFileName>tuxguitar-lilypond.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-midi</artifactId>
+									<destFileName>tuxguitar-midi.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-musicxml</artifactId>
+									<destFileName>tuxguitar-musicxml.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-pdf</artifactId>
+									<destFileName>tuxguitar-pdf.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-ptb</artifactId>
+									<destFileName>tuxguitar-ptb.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tef</artifactId>
+									<destFileName>tuxguitar-tef.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-tuner</artifactId>
+									<destFileName>tuxguitar-tuner.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-svg</artifactId>
+									<destFileName>tuxguitar-svg.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<artifactItem>
+									<groupId>${project.groupId}</groupId>
+									<artifactId>tuxguitar-image</artifactId>
+									<destFileName>tuxguitar-image.jar</destFileName>
+									<outputDirectory>${project.build.directory}/${project.finalName}/share/plugins</outputDirectory>
+								</artifactItem>
+								<!-- /PLUGINS  -->
+								
+							</artifactItems>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
+
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-antrun-plugin</artifactId>
+				<version>1.7</version>
+				<executions>
+					<execution>
+						<id>copy</id>
+						<phase>package</phase>
+						<configuration>
+							<target name="copy-files">
+								<mkdir dir="${project.build.directory}/${project.finalName}/" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/lib" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/share" />
+								<mkdir dir="${project.build.directory}/${project.finalName}/doc" />
+								
+								<copy todir="${project.build.directory}/${project.finalName}/share" overwrite="true">
+									<fileset dir="${project.rootPath}/TuxGuitar/share/"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/doc" overwrite="true">
+									<fileset dir="${project.rootPath}/TuxGuitar/doc/"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/dist" overwrite="true">
+									<fileset dir="${project.rootPath}/TuxGuitar/dist/"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/dist" overwrite="true">
+									<fileset dir="./src/resources/dist/"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/" overwrite="true">
+									<fileset dir="./src/resources/dll/"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/" overwrite="true">
+									<fileset file="./src/resources/tuxguitar.bat"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/" overwrite="true">
+									<fileset file="./src/resources/tuxguitar.lap"/>
+								</copy>
+								<copy todir="${project.build.directory}/${project.finalName}/" overwrite="true">
+									<fileset file="./src/resources/tuxguitar.exe"/>
+								</copy>
+							</target>
+						</configuration>
+						<goals>
+							<goal>run</goal>
+						</goals>
+					</execution>
+				</executions>
+			</plugin>
+		</plugins>
+	</build>
+	
+	<profiles>
+		<profile>
+			<id>native-modules</id>
+			<activation>
+				<property>
+					<name>native-modules</name>
+					<value>true</value>
+				</property>
+			</activation>
+			<modules>
+				<module>../native-modules/tuxguitar-winmm-windows-x86</module>
+				<module>../native-modules/tuxguitar-fluidsynth-windows-x86</module>
+				<module>../native-modules/tuxguitar-jack-windows-x86</module>
+			</modules>
+			
+			<build>
+				<plugins>
+					<plugin>
+						<groupId>org.apache.maven.plugins</groupId>
+						<artifactId>maven-antrun-plugin</artifactId>
+						<version>1.7</version>
+						<executions>
+							<execution>
+								<id>native-module-copy</id>
+								<phase>package</phase>
+								<configuration>
+									<target name="copy-files">
+										<!-- PLUGIN FILES -->
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-winmm-windows-x86/target/build" />
+										</copy>
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-fluidsynth-windows-x86/target/build" />
+										</copy>
+										<copy todir="${project.build.directory}/${project.finalName}/">
+											<fileset dir="../native-modules/tuxguitar-jack-windows-x86/target/build" />
+										</copy>
+										<!-- /PLUGINS FILES -->
+									</target>
+								</configuration>
+								<goals>
+									<goal>run</goal>
+								</goals>
+							</execution>
+						</executions>
+					</plugin>
+				</plugins>
+			</build>
+		</profile>
+	</profiles>
+</project>
diff --git a/build-scripts/tuxguitar-windows-x86/src/resources/dist/about_description.dist b/build-scripts/tuxguitar-windows-x86/src/resources/dist/about_description.dist
new file mode 100644
index 0000000..fe9ae2a
--- /dev/null
+++ b/build-scripts/tuxguitar-windows-x86/src/resources/dist/about_description.dist
@@ -0,0 +1,10 @@
+TuxGuitar is an Open Source multitrack tablature editor and player written in Java.
+
+Copyright (C) 2005 Julian Gabriel Casadesus
+
+TuxGuitar project: http://www.tuxguitar.com.ar
+TuxGuitar community: http://community.tuxguitar.com.ar
+
+This product include third party libraries:
+-> SWT (Standard Widget Toolkit): http://www.eclipse.org/swt/
+-> iText (Free Java-PDF library): http://www.lowagie.com/iText/
diff --git a/build-scripts/tuxguitar-windows-x86/src/resources/dist/tuxguitar.cfg b/build-scripts/tuxguitar-windows-x86/src/resources/dist/tuxguitar.cfg
new file mode 100644
index 0000000..1fd83af
--- /dev/null
+++ b/build-scripts/tuxguitar-windows-x86/src/resources/dist/tuxguitar.cfg
@@ -0,0 +1,18 @@
+font.default=Small Fonts,7,0
+font.note=Small Fonts,7,0
+font.time-signature=Sylfaen,10,1
+font.text=Tahoma,8,0
+font.lyric=Tahoma,7,0
+font.grace=Small Fonts,6,0
+font.chord=Tahoma,8,0
+font.chord-fret=Small Fonts,6,0
+font.printer.default=Tahoma,6,0
+font.printer.text=Tahoma,8,0
+font.printer.time-signature=Sylfaen,10,1
+font.printer.lyric=Tahoma,7,0
+font.printer.note=Small Fonts,6,0
+font.printer.grace=Small Fonts,5,0
+font.printer.chord=Tahoma,8,0
+browser.lines-visible=false
+midi.sequencer=tuxguitar.sequencer
+skin=Oxygen
diff --git a/build-scripts/tuxguitar-windows-x86/src/resources/dll/gdiplus.dll b/build-scripts/tuxguitar-windows-x86/src/resources/dll/gdiplus.dll
new file mode 100644
index 0000000..ba0ce22
Binary files /dev/null and b/build-scripts/tuxguitar-windows-x86/src/resources/dll/gdiplus.dll differ
diff --git a/build-scripts/tuxguitar-windows-x86/src/resources/dll/msvcr71.dll b/build-scripts/tuxguitar-windows-x86/src/resources/dll/msvcr71.dll
new file mode 100644
index 0000000..9d9e028
Binary files /dev/null and b/build-scripts/tuxguitar-windows-x86/src/resources/dll/msvcr71.dll differ
diff --git a/build-scripts/tuxguitar-windows-x86/src/resources/tuxguitar.bat b/build-scripts/tuxguitar-windows-x86/src/resources/tuxguitar.bat
new file mode 100644
index 0000000..1aa901a
--- /dev/null
+++ b/build-scripts/tuxguitar-windows-x86/src/resources/tuxguitar.bat
@@ -0,0 +1,18 @@
+cd "."
+
+SET "JAVA=java"
+
+SET "JAVA_LIBRARY_PATH=%JAVA_LIBRARY_PATH%;lib\"
+
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;lib\tuxguitar.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;lib\tuxguitar-lib.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;lib\tuxguitar-gm-utils.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;lib\swt.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;lib\itext-pdf.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;lib\itext-xmlworker.jar"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;share\"
+SET "JAVA_CLASSPATH=%JAVA_CLASSPATH%;dist\"
+
+SET "TG_MAIN_CLASS=org.herac.tuxguitar.app.TGMain"
+
+%JAVA% -cp %JAVA_CLASSPATH% -Djava.library.path=%JAVA_LIBRARY_PATH% %TG_MAIN_CLASS% %1 %2 %3 %4 %5 %6 %7 %8 %9 %10
diff --git a/build-scripts/tuxguitar-windows-x86/src/resources/tuxguitar.exe b/build-scripts/tuxguitar-windows-x86/src/resources/tuxguitar.exe
new file mode 100644
index 0000000..923a2a1
Binary files /dev/null and b/build-scripts/tuxguitar-windows-x86/src/resources/tuxguitar.exe differ
diff --git a/build-scripts/tuxguitar-windows-x86/src/resources/tuxguitar.lap b/build-scripts/tuxguitar-windows-x86/src/resources/tuxguitar.lap
new file mode 100644
index 0000000..a1ef300
--- /dev/null
+++ b/build-scripts/tuxguitar-windows-x86/src/resources/tuxguitar.lap
@@ -0,0 +1,24 @@
+-Djava.class.path=${FOUND_EXE_FOLDER}\lib\tuxguitar.jar;${FOUND_EXE_FOLDER}\lib\tuxguitar-lib.jar;${FOUND_EXE_FOLDER}\lib\tuxguitar-gm-utils.jar;${FOUND_EXE_FOLDER}\lib\swt.jar;${FOUND_EXE_FOLDER}\lib\itext-pdf.jar;${FOUND_EXE_FOLDER}\lib\itext-xmlworker.jar;${FOUND_EXE_FOLDER}\share\;${FOUND_EXE_FOLDER}\dist\
+# Java class to call, ex. mypackage.Start or mypackage/Start
+janel.main.class=org.herac.tuxguitar.app.TGMain
+
+# the minimum version of the JVM, ex. 1.4.1
+janel.min.java.version=1.4.2
+
+# the path to be added to Java system property java.library.path. which is used to locate native DLLs. Multiple
+# instances of this property may be used.
+#
+janel.library.path.dir=${FOUND_EXE_FOLDER}\lib\
+
+# overrides the default error text ("Error in Java launcher.") with a custom error message.
+#
+janel.error.default.text=Error in TuxGuitar
+
+# allows the detailed error messages to be disabled (true/false, yes/no - defaults to true). If true, the default
+# error message will be displayed followed by the details.
+#
+janel.error.show.detail=true
+
+# sets the max memory via -Xmx as percent of total physical memory. See above for percent explanation.
+#
+janel.memory.max.total.percent=50
diff --git a/build_gcj.sh b/build_gcj.sh
deleted file mode 100755
index a0e0b4b..0000000
--- a/build_gcj.sh
+++ /dev/null
@@ -1,76 +0,0 @@
-#!/bin/bash
-##SCRIPT DIR
-DIR_NAME=`dirname "$0"`
-DIR_NAME=`cd "$DIR_NAME"; pwd`
-
-cd ${DIR_NAME}
-
-export PREFIX=./
-export SWT_PATH=${DIR_NAME}/TuxGuitar/lib/swt.jar
-export TG_PREFIX=${DIR_NAME}/tuxguitar-1.2-linux-x86-gcj/
-export TG_SOURCE_PATH=${DIR_NAME}/TuxGuitar/src/
-export GCJFLAGS="-fsource=1.4 -fPIC"
-
-make -C TuxGuitar/
-make -C TuxGuitar/ install DESTDIR=${TG_PREFIX}
-make -C TuxGuitar/ clean
-
-make -C TuxGuitar-alsa/
-make -C TuxGuitar-alsa/ install
-make -C TuxGuitar-alsa/ clean
-
-make -C TuxGuitar-fluidsynth/
-make -C TuxGuitar-fluidsynth/ install
-make -C TuxGuitar-fluidsynth/ clean
-
-make -C TuxGuitar-jack/
-make -C TuxGuitar-jack/ install
-make -C TuxGuitar-jack/ clean
-
-make -C TuxGuitar-oss/
-make -C TuxGuitar-oss/ install
-make -C TuxGuitar-oss/ clean
-
-make -C TuxGuitar-compat/
-make -C TuxGuitar-compat/ install
-make -C TuxGuitar-compat/ clean
-
-make -C TuxGuitar-gtp/
-make -C TuxGuitar-gtp/ install
-make -C TuxGuitar-gtp/ clean
-
-make -C TuxGuitar-ptb/
-make -C TuxGuitar-ptb/ install
-make -C TuxGuitar-ptb/ clean
-
-make -C TuxGuitar-tef/
-make -C TuxGuitar-tef/ install
-make -C TuxGuitar-tef/ clean
-
-make -C TuxGuitar-midi/
-make -C TuxGuitar-midi/ install
-make -C TuxGuitar-midi/ clean
-
-make -C TuxGuitar-lilypond/
-make -C TuxGuitar-lilypond/ install
-make -C TuxGuitar-lilypond/ clean
-
-make -C TuxGuitar-musicxml/
-make -C TuxGuitar-musicxml/ install
-make -C TuxGuitar-musicxml/ clean
-
-make -C TuxGuitar-ascii/
-make -C TuxGuitar-ascii/ install
-make -C TuxGuitar-ascii/ clean
-
-make -C TuxGuitar-converter/
-make -C TuxGuitar-converter/ install
-make -C TuxGuitar-converter/ clean
-
-make -C TuxGuitar-tray/
-make -C TuxGuitar-tray/ install
-make -C TuxGuitar-tray/ clean
-
-make -C TuxGuitar-community/
-make -C TuxGuitar-community/ install
-make -C TuxGuitar-community/ clean
diff --git a/debian/README.Debian b/debian/README.Debian
new file mode 100644
index 0000000..41312d6
--- /dev/null
+++ b/debian/README.Debian
@@ -0,0 +1,19 @@
+tuxguitar for Debian
+--------------------
+
+The package has been splited into several part, the core is still tuxguitar
+but the sound plugins are optional.
+
+I suggest you to install tuxguitar-jsa (note that it depends OpenJDK)
+and does work on most systems (including pulseaudio). Tested settings are : 
+
+  Sound / Midi Sequencer : TuxGuitar Sequencer
+  MIDI Port : Gervill
+
+
+Note that, other JSA Sound banks can be downloaded at :
+  http://java.sun.com/products/java-media/sound/soundbanks.html
+
+TuxGuitar-gervill sound plugin is not compiled yet since it depends on non free jvm
+
+ -- Philippe Coval <rzr at users.sf.net>  Fri, 07 Mar 2008 21:16:53 +0100
diff --git a/debian/changelog b/debian/changelog
new file mode 100644
index 0000000..5974258
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,259 @@
+tuxguitar (0.0-0) UNRELEASED; urgency=low
+
+  * http://rzr.online.fr/q/tuxguitar
+
+ -- Philippe Coval <rzr at gna.org>  Sat, 02 Oct 2010 18:34:38 +0200
+
+tuxguitar (1.2-5) unstable; urgency=low
+
+  * debian/tuxguitar.install:
+    - Add tuxguitar-community.jar to plugins (Closes: #586968)
+
+ -- tony mancill <tmancill at debian.org>  Tue, 06 Jul 2010 22:10:19 -0700
+
+tuxguitar (1.2-4) unstable; urgency=low
+
+  * Address bashism in /usr/bin/tuxguitar (Closes: #581142) 
+    (Thank you to Raphael Geissert)
+  * Switch to dpkg-source 3.0 (quilt) format
+    - remove debian/README.source
+    - remove patch-related targets in debian/rules
+    - remove build-dep on quilt
+  * debian/compat - upgrade to debhelper 7
+  * Remove extraneous LICENSE file.
+
+ -- tony mancill <tmancill at debian.org>  Mon, 17 May 2010 22:22:45 -0700
+
+tuxguitar (1.2-3) unstable; urgency=low
+
+  * Modify tuxguitar.sh to find swt-gtk-3.5.1.jar (Closes: #575898)
+
+ -- tony mancill <tmancill at debian.org>  Tue, 04 May 2010 20:50:20 -0700
+
+tuxguitar (1.2-2) unstable; urgency=low
+
+  * Unbuild tuxguitar-gervill (Closes: #570556) :
+    - since it depends on unpackaged component
+  * Added jack plugin (Closes: #569999)
+  * Merged upstream files in patch (Closes: #569910)
+
+ -- Philippe Coval <rzr at gna.org>  Sun, 21 Feb 2010 22:51:26 +0100
+
+tuxguitar (1.2-1.1) unstable; urgency=low
+
+  * Non-maintainer upload.
+  * debian/control:
+    - Update swt-gtk dependency to 3.5 to fix FTBFS. (Closes: #564347)
+    - Change XS-Vcs-* fields to Vcs-*.
+    - Add ${misc:Depends}.
+    - Bump Standards-Version to 3.8.4.
+  * debian/rules: Don't install redundant LICENSE doc.
+
+ -- nobled <nobled at dreamwidth.org>  Sun, 07 Feb 2010 01:40:52 +0000
+
+tuxguitar (1.2-1) unstable; urgency=low
+
+  * New upstream release (Closes: #510742)
+  * Merged patch : tuxguitar_1.1-1ubuntu1.patch
+  * Added Makefile : from upstream repo
+  * debian/* :
+    - Migrated to quilt
+    - Updated standards
+
+ -- Philippe Coval <rzr at gna.org>  Fri, 20 Nov 2009 16:14:19 +0100
+
+tuxguitar (1.1-1.1) unstable; urgency=low
+
+  * Non-maintainer upload for transition to xulrunner 1.9.1.
+    (Closes: #548683)
+  * debian/control: Depend on a xulrunner-1.9.1.
+  * misc/tuxguitar.sh: Detect xulrunner 1.9.1.
+
+ -- Mike Hommey <glandium at debian.org>  Sat, 10 Oct 2009 16:20:19 +0200
+
+tuxguitar (1.1-1ubuntu1) karmic; urgency=low
+
+  * Use Java Sound API and Gervill by default (LP: #311319)
+  * Changed maintainer to MOTU developers
+  * Depend on xulrunner 1.9.1 instead of 1.9 (LP: #424727)
+
+ -- Teemu Heinämäki <teemu.heinamaki at gmail.com>  Wed, 5 Sep 2009 11:39:51 +0300
+
+tuxguitar (1.1-1) unstable; urgency=low
+
+  * New Upstream Release (Closes: #489859) (LP: #366476)
+  * Merged patch : tuxguitar_1.0.dak-1ubuntu1.patch
+  * debian/README.txt
+    - suggests to install tuxguitar-jsa
+
+ -- Philippe Coval <rzr at gna.org>  Sat, 25 Apr 2009 19:49:27 +0200
+
+tuxguitar (1.0.dak-1ubuntu1) jaunty; urgency=low
+
+  * Merge from debian unstable.
+  * debian/control
+    - Replace build dependency openjdk-6-jdk with default-jdk.
+    - Remove unnecessary build dependencies gcj, java-gcj-compat-dev,
+      sun-java5-jdk, icedtea-java7-jdk, libswt3.2-gtk-java.
+    - Replace runtime dependency openjdk-6-jre with default-jre.
+    - Remove unnecessary runtime java-gcj-compat, sun-java6-jre, sun-java5-jre,
+      libswt3.2-gtk-java. Replaced java-virtual-machine with java2-runtime.
+      (LP: #250137)
+  * debian/rules
+    - Set JAVA_HOME to the value corresponding to default-jdk.
+  * misc/tuxguitar.sh
+    - Ubuntu specific change for correct path of xulrunner-1.9 installation.
+
+ -- Onkar Shinde <onkarshinde at ubuntu.com>  Tue, 13 Jan 2009 00:52:49 +0530
+
+tuxguitar (1.0.dak-1) unstable; urgency=low
+
+  [ Philippe Coval ]
+  * debian/control ; debian/rules :
+    - set to main since openjdk supports sound (Closes: #505612)
+    - uses ${shlibs:Depends} vs hardcoded libs (Closes: #506883)
+    - depends on at least xulrunner for browsing doc (Closes: #493557)
+
+  [ Ben Hutchings ]
+  * Move virtual packages to end of dependency alternations
+  * Move OpenJDK dependencies to start of dependency alternations
+  * Replace recommendation of Sun JVM with OpenJDK
+  * Fix "2<" to "2>" in postinst and postrm
+  * Avoid adding current directory to LD_LIBRARY_PATH
+
+ -- Ben Hutchings <ben at decadent.org.uk>  Wed, 10 Dec 2008 03:15:10 +0000
+
+tuxguitar (1.0-1ubuntu1) intrepid; urgency=low
+
+  * fix LP: #272772: packages that Depend/Recommend/Suggest firefox
+    (meta-package) must alternatively Depend/Recommend/Suggest abrowser
+    - update debian/control
+
+ -- Alexander Sack <asac at ubuntu.com>  Mon, 22 Sep 2008 03:34:37 +0200
+
+tuxguitar (1.0-1) unstable; urgency=low
+
+  * New upstream release (Closes: #481728) also (LP: #176979, #212207)
+
+ -- Philippe Coval <rzr at users.sf.net>  Thu, 19 Jun 2008 00:30:30 +0200
+
+tuxguitar (0.9.99~1.0rc4-1) unstable; urgency=low
+
+  * New Upstream release (1.0-rc4 retitled to 0.9.99~1.0rc4)
+  * Fixed plugin loading bug by hardcoding path (Closes: #479668)
+
+ -- Philippe Coval <rzr at users.sf.net>  Sat, 17 May 2008 01:19:00 +0200
+
+tuxguitar (0.9.99~1.0rc3-1) unstable; urgency=low
+
+  * New Upstream release (1.0-rc3 retitled to 0.9.99~1.0rc3)
+  * Updated startup script from upstream
+  * debian/control now build with gcj by default not openjdk (Closes: #474410)
+
+ -- Philippe Coval <rzr at users.sf.net>  Sat, 01 May 2008 12:16:00 +0200
+
+tuxguitar (0.9.99~1.0rc2-2) unstable; urgency=low
+
+  * ADD: Support compilers and jvm's based on classpath
+  * FIX: arch vs indep for non i386 arch (closes: #474410)
+
+ -- Philippe Coval <rzr at users.sf.net>  Wed, 16 Apr 2008 19:19:52 +0200
+
+tuxguitar (0.9.99~1.0rc2-1) unstable; urgency=low
+
+  * ADD: New Upstream release (1.0-rc2 retitled to 0.9.99~1.0rc2)
+  * FIX: Only on sun-java6 supported (Closes: #466986)
+  * FIX: Compile in 1.4 format (Closes: #466038)
+  * ADD: plugins ALSA and OSS (natives JNI) (Closes: #439669)
+
+ -- Philippe Coval <rzr at users.sf.net>  Mon, 17 Mar 2008 19:37:27 +0100
+
+tuxguitar (0.9.1-4) unstable; urgency=low
+
+  * Merged Ubuntu changes (closes: #457342)
+  * Changed maintainer to myself
+  * Added desktop and icon
+
+ -- Philippe Coval <rzr at users.sf.net>  Fri, 25 Jan 2008 21:33:37 +0100
+
+tuxguitar (0.9.1-3ubuntu1) hardy; urgency=low
+
+  * Modified debian/control and GNUmakefile to make building work (LP: #176736)
+  * changed mantainer to Ubuntu MOTU Developers.
+
+ -- Teemu Heinamaki (Hippu) <teemu.heinamaki at gmail.com>  Sun, 16 Dec 2007 00:02:48 +0200
+
+tuxguitar (0.9.1-3) unstable; urgency=low
+
+  * Add generic wrapper script (closes: #434181)
+
+ -- Philippe Coval <rzr at users.sf.net>  Mon, 23 Jul 2007 08:56:56 +0200
+
+tuxguitar (0.9.1-2) unstable; urgency=low
+
+  * Fix depend bug (closes: #427340)
+  * Fix classpath (closes: #433821)
+  * Fix makefile for faster build (sync upstream)
+
+ -- Philippe Coval <rzr at users.sf.net>  Fri, 20 Jul 2007 00:20:17 +0200
+
+tuxguitar (0.9.1-1) unstable; urgency=low
+
+  * New upstream release
+  * added support for java6 too (closes: #409543)
+  * Fix swt bug (closes: #406122)
+
+ -- Philippe Coval <rzr at users.sf.net>  Sun,  4 Feb 2007 01:41:23 +0100
+
+tuxguitar (0.9-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Philippe Coval <rzr at users.sf.net>  Tue, 30 Jan 2007 19:05:13 +0100
+
+tuxguitar (0.8dfsg-1) testing-proposed-updates; urgency=medium
+
+  * removed janel-ant (closes: #405295)
+  * use sun's javac path to compile
+  * installed german locale (closes: #398972)
+
+ -- Philippe Coval <rzr at users.sf.net>  Sat,  6 Jan 2007 12:17:31 +0100
+
+tuxguitar (0.8.1-1) unstable; urgency=low
+
+  * New upstream release (closes: #405295 , #398972)
+
+ -- Philippe Coval <rzr at users.sf.net>  Wed,  3 Jan 2007 22:08:53 +0100
+
+tuxguitar (0.8-3) unstable; urgency=low
+
+  * classpath now includes swt-gtk-3.2.1 (closes: #397368)
+  * removed unecessary dependency on libswt-gtk-3.2-jni (closes: #396591)
+  * package architecture is now "all"
+
+ -- Philippe Coval <rzr at users.sf.net>  Tue,  7 Nov 2006 21:40:45 +0100
+
+tuxguitar (0.8-2) unstable; urgency=low
+
+  * suppport command line arguments
+
+ -- Philippe Coval <rzr at users.sf.net>  Sun,  3 Sep 2006 11:45:09 +0200
+
+tuxguitar (0.8-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Philippe Coval <rzr at users.sf.net>  Mon, 28 Aug 2006 21:37:59 +0200
+
+tuxguitar (0.7-1) unstable; urgency=low
+
+  * New upstream release
+  * updated from libswt-gtk-3.1-java to libswt-gtk-3.2-java
+
+ -- Philippe Coval <rzr at users.sf.net>  Thu,  3 Aug 2006 22:19:50 +0200
+
+tuxguitar (0.6-1) unstable; urgency=low
+
+  * Initial release (Closes: #374287)
+
+ -- Philippe Coval <rzr at users.sf.net>  Sat, 17 Jun 2006 13:19:36 +0200
diff --git a/debian/compat b/debian/compat
new file mode 100644
index 0000000..7f8f011
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+7
diff --git a/debian/control b/debian/control
new file mode 100644
index 0000000..5d53a3c
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,75 @@
+Source: tuxguitar
+Section: sound
+Priority: optional
+Maintainer: Philippe Coval <rzr at gna.org>
+Uploaders: tony mancill <tmancill at debian.org>
+Build-Depends: debhelper (>= 7), docbook-to-man, docbook-utils, quilt, ant, gcj, default-jdk | java2-compiler, libswt-gtk-3.5-java, libitext-java, libasound2-dev, libfluidsynth-dev
+Standards-Version: 3.8.4
+Homepage: http://www.tuxguitar.com.ar
+Vcs-Git: git://git.debian.org/git/pkg-java/tuxguitar.git
+Vcs-Browser: http://git.debian.org/git/pkg-java/tuxguitar.git
+
+Package: tuxguitar
+Architecture: all
+Section: sound
+Depends: default-jre | java2-runtime, libitext-java, libswt-gtk-3.5-java, libswt-cairo-gtk-3.5-jni , libswt-mozilla-gtk-3.5-jni, xulrunner-1.9.1, ${misc:Depends}
+Recommends: tuxguitar-alsa (= ${source:Version}), tuxguitar-oss (= ${source:Version})
+Suggests: tuxguitar-jsa (= ${source:Version}), lilypond
+Description: Multitrack guitar tablature editor and player (gp3 to gp5)
+ TuxGuitar is a multitrack Guitar tablature editor and player.
+ It can open GP3, GP4, and GP5 files and exports in MIDI and PDF.
+
+Package: tuxguitar-jsa
+Architecture: all
+Section: sound
+Depends: tuxguitar (= ${source:Version}), default-jre | sun-java6-jre | sun-java5-jre, ${misc:Depends}
+Description: tuxguitar plugin for sound playback using Java Sound API
+ Use Tuxguitar along this plugin if unsure, other sounds can be used too.
+
+Package: tuxguitar-alsa
+Architecture: any
+Section: sound
+Depends: ${shlibs:Depends}, tuxguitar (= ${source:Version}), ${misc:Depends}
+Suggests: timidity
+Description: tuxguitar plugin for sound playback using ALSA
+ Use Tuxguitar along this plugin if your Sound Device is supported by ALSA.
+ A MIDI expander is required (Hardware or Software).
+
+Package: tuxguitar-oss
+Architecture: any
+Section: sound
+Depends: ${shlibs:Depends}, tuxguitar (= ${source:Version}), oss-compat, ${misc:Depends}
+Suggests: timidity
+Priority: extra
+Description: tuxguitar plugin for sound playback using OSS
+ Use Tuxguitar along this plugin if your Sound Device is supported by OSS.
+ A MIDI expander is required (Hardware or Software).
+
+Package: tuxguitar-fluidsynth
+Architecture: any
+Section: sound
+Depends: ${shlibs:Depends}, tuxguitar (= ${source:Version}), fluidsynth, ${misc:Depends}
+Priority: extra
+Description: tuxguitar plugin for sound playback using fluidsynth
+ Use Tuxguitar along this plugin if your audio system is configured for 
+ fluidsynth as MIDI expander.
+
+Package: tuxguitar-jack
+Architecture: any
+Section: sound
+Depends: ${shlibs:Depends}, tuxguitar (= ${source:Version}), libjack-dev, ${misc:Depends}
+Suggests: qjackctl
+Priority: extra
+Description: tuxguitar plugin for sound playback using JACKD
+ Use Tuxguitar along this plugin if your Sound Device is supported by JACK.
+ A MIDI expander is required (Hardware or Software).
+
+Package: tuxguitar-snapshot
+Architecture: all
+Section: sound
+Depends: ${shlibs:Depends}, tuxguitar (= ${source:Version}), ${misc:Depends}
+Suggests: rzr
+Priority: extra
+Description: tuxguitar unreleased version
+ TODO: Remove on issue and upgrade tuxguitar
+
diff --git a/debian/copyright b/debian/copyright
new file mode 100644
index 0000000..fbc96b7
--- /dev/null
+++ b/debian/copyright
@@ -0,0 +1,20 @@
+This package was debianized by Philippe Coval <rzr at users.sf.net> on
+Sat, 17 Jun 2006 13:19:36 +0200.
+
+It was downloaded from <http://www.tuxguitar.com.ar>
+
+Upstream Author: Julian Casadesus <akdmia at users.sourceforge.net>
+
+
+Copyright: (c) 2006-2008 by Julian Casadesus.
+
+License:
+  You are free to distribute this software under the terms of
+  the GNU Lesser General Public License.
+
+  On Debian systems, the complete text of the GNU Lesser General Public
+  License can be found in the file `/usr/share/common-licenses/LGPL-2.1'.
+
+
+The Debian packaging is (C) 2006, Philippe Coval <rzr at users.sf.net> and
+is licensed under the LGPL-2.1, see `/usr/share/common-licenses/LGPL-2.1'.
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..b2b265b
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,74 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+default: build
+
+export DH_VERBOSE=1
+MAINPACKAGE?=$(shell dpkg-parsechangelog | sed -n 's/Source: \(.*\)/\1/p')
+PACKAGE?=tuxguitar
+JAVA_HOME=/usr/lib/jvm/default-java
+JAVA?=${JAVA_HOME}/jre/bin/java
+JAVAC?=${JAVA_HOME}/bin/javac
+export JAVAC JAVA JAVA_HOME
+DEB_DESTDIR?=${CURDIR}/debian/${MAINPACKAGE}
+DEB_DESTDIR_TMP?=${CURDIR}/debian/tmp/${MAINPACKAGE}
+
+build: build-stamp
+
+build-stamp:
+	dh_testdir
+#	${MAKE} clean
+	${MAKE}
+	docbook-to-man misc/${PACKAGE}.sgml > debian/${PACKAGE}.1
+	touch $@
+
+distclean: clean
+
+clean:
+	dh_testdir
+	dh_testroot
+	${MAKE} -k clean distclean $@ || echo "Ignored"
+	${RM} -f build-stamp configure-stamp
+	${RM} -f debian/${PACKAGE}.1 ./TuxGuitar/tuxguitar 
+	${RM} -rf TuxGuitar/build
+	dh_clean
+
+install: build 
+	dh_testdir
+	dh_testroot
+	dh_prep
+	dh_installdirs
+	${MAKE} $@ DESTDIR=${DEB_DESTDIR}
+	${MAKE} $@-linux DESTDIR=${DEB_DESTDIR_TMP}
+	install -d ${DEB_DESTDIR}/usr/bin/
+	rm -vf ${DEB_DESTDIR}/usr/share/tuxguitar/doc/LICENSE
+	dh_install
+
+binary-common:
+	dh_testdir
+	dh_testroot
+	dh_installchangelogs 
+	dh_installdocs --exclude=LICENSE
+	dh_installexamples
+	dh_install
+	dh_installmenu
+	dh_installman
+#	dh_link
+	dh_compress
+	dh_fixperms
+	dh_shlibdeps
+	dh_installdeb
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+binary-indep: build install
+	$(MAKE) -f debian/rules DH_OPTIONS=-i binary-common
+
+# Build architecture dependant packages using the common target.
+binary-arch: build install
+	$(MAKE) -f debian/rules DH_OPTIONS=-s binary-common
+
+binary: binary-arch binary-indep
+.PHONY: build clean binary-indep binary-arch binary install configure
+
+#eof "$Id: debian/rules $"
diff --git a/debian/snapshot.mk b/debian/snapshot.mk
new file mode 100644
index 0000000..97439f5
--- /dev/null
+++ b/debian/snapshot.mk
@@ -0,0 +1,534 @@
+#! /usr/bin/make -f
+# -*- makefile -*-
+#ident "$Id: Makefile,v 1.19 2008/04/17 20:06:22 rzr Exp $"
+#@author: created by www.philippe.coval.online.fr -- revision: $Author: rzr $
+#licence: LGPL
+#------------------------------------------------------------------------------
+
+default: debsrc
+
+package?=tuxguitar
+package?=${PACKAGE}
+
+
+snapshot-default: snapshot-deb
+
+
+#~rzr:{ various debian hack to be removed
+
+version=$(shell date +%Y%m%d)
+#debversion?=$(shell dpkg-parsechangelog | sed -n 's/Version: \(.*\)/\1/p')
+scmroot?=https://${package}.svn.sourceforge.net/svnroot/${package}/trunk
+#distfile?=${package}_${debversion}~snapshot$(shell date +%Y%m%d).orig.tar.gz
+
+pkg_ver?=${version_next}~snapshot${version}
+pkg_dir?=${package}-${pkg_ver}
+
+#{
+snapshot_version?=0.0.${version}
+snapshot_dir?=${package}-snapshot-${snapshot_version}
+
+
+snapshot: ../${snapshot_dir} 
+
+../${snapshot_dir}:
+	svn co ${scmroot} $@
+	cd .. && tar czf ${snapshot_dir}.tar.gz --exclude="debian" ${snapshot_dir}
+	cd ../${snapshot_dir} && find . > 00index.txt
+	cd .. && ln -fs ${snapshot_dir}.tar.gz ${package}-snapshot_${snapshot_version}.orig.tar.gz 
+	cd .. && ln -fs ${snapshot_dir} ${package}-snapshot
+	echo "# cd ../${snapshot_dir}"
+
+
+fix-release: overide
+	-cp TuxGuitar/scripts/tuxguitar.tg  ./
+	-cp TuxGuitar/scripts/tuxguitar.xpm  ./
+	-cp TuxGuitar/scripts/tuxguitar.gp3  ./
+
+clean/snapshot:
+	rm -f *.tg *.gp3
+#}
+
+refresh:
+	 ls | grep TuxGuitar- | xargs echo modules?= > tmp.mk
+
+DEBPACKAGE_VERSION?=$(shell dpkg-parsechangelog  | sed -n 's/Version: \(.*\)/\1/p')
+DEBPACKAGE?=$(shell dpkg-parsechangelog | sed -n 's/Source: \(.*\)/\1/p')
+
+
+sync:
+	${MAKE} deb # || make snapshot && cd ../${snapshot_dir} && ${MAKE} deb
+	diffstat  tmp.diff
+
+
+chk:
+	ls ../${package}*${snapshot_version}*.changes || ls ../${package}*.changes
+	lintian -i ../tuxguitar-snapshot*.changes
+
+
+
+tarball_name=TuxGuitar-full-1.0-rc1-src
+
+#	cd .. && ln -fs ${CURDIR} ${tarball_name} 
+
+#to-upstream:
+#	cp ./debian/${package}.sh TuxGuitar/scripts/
+#	cp ./debian/${package}.sgml TuxGuitar/scripts/
+#	cp ./debian/${package}.desktop TuxGuitar/scripts/
+
+
+release: tarball
+	mkdir -p ../tmp/${tarball_name} && cd ../tmp/${tarball_name} \
+	 && tar xf ${CURDIR}/../${tarball_name}.tar.gz \
+	 && cd ${tarball_name} && make build
+	echo "../${tarball_name}.tar.gz"
+
+cvsrelease:
+	${MAKE} fetch
+	${MAKE} -C ../${tarball_name} clean tarball
+	ls -l ../${tarball_name}.tar.gz
+
+fetch:
+	mkdir -p ../${tarball_name}
+	cd  ../${tarball_name} && \
+	 cvs -d${scmroot} login  && \
+	 cvs -d${scmroot} co .
+	echo "cd ../${tarball_name}"
+
+#test-help: ${CURDIR}
+#	echo "$<"
+#	echo "${<F}"
+#	echo "${<N}"
+#	echo "${<D}"
+
+sf:
+	lynx -dump "http://sourceforge.net/project/showfiles.php?group_id=155855&package_id=173684&release_id=580322" | grep filename | sed -e 's|.* http:.*filename=\(.*\)|http://heanet.dl.sourceforge.net/sourceforge/tuxguitar/\1|g' | xargs -n 1 wget -nc
+	unp *-src.tar.gz
+	rm *.tar.gz *.bin *.exe *.zip 
+	for t in *-1.0-rc1-src ; do  echo mv $t ${t/-1.0-rc1-src/}; done
+
+install_plugins: ${modules_plugins}
+	install $</$<.jar ${INSTALL_SHARE_DIR}
+
+#snapshot-test: ${CURDIR}
+#	echo ${<:%-1.0.0=%}
+#	echo ${<:%-1.0.0=%-snapshot}
+#	echo ${<:%-%=%-snapshot}
+#	echo ${<:%-1.0.0=%-snapshot}
+
+install-libs: ${modules_jni}
+	echo ${^:TuxGuitar-%=tuxguitar-%} 
+	for t in ${^} ; do  \
+	 echo install -s  $$t/$${t/TuxGuitar/tuxguitar} \
+	 ; done
+#	 echo install -s $$t/lib$(shell echo $${t} | tr [A-Z] [a-z])-jni.so  ${INSTALL_LIB_DIR}/ ; 
+# TODO:
+#	for t in ${modules_plugins} ; do cd "${CURDIR}/$$t" && \
+#	 ant -v -d ${ANT_FLAGS} install ; \
+#	done
+
+tuxguitar-install:
+	-cp -rfa ./TuxGuitar/share/files ${INSTALL_SHARE_DIR} # TODO
+	-cp -rfa ./TuxGuitar/share/services ${INSTALL_SHARE_DIR} # TODO
+	-cp -rfa ./TuxGuitar/share/themes ${INSTALL_SHARE_DIR} # TODO
+
+CURDIR?=$(shell pwd)
+
+#tarball:$(shell pwd)
+#	find . -type l -exec file {} \; | sed -e "s|\(.*\): symbolic link to \`\(.*\)'|rm \1; cp -fa \2 \1|g"
+#	find . -iname "*.jar"
+#	rm ./README; cp -fa TuxGuitar/doc/README ./README
+#	rm ./ChangeLog; cp -fa TuxGuitar/doc/CHANGES ./ChangeLog
+#	rm ./COPYING; cp -fa TuxGuitar/doc/LICENSE ./COPYING
+#	rm ./AUTHORS; cp -fa TuxGuitar/doc/AUTHORS ./AUTHORS
+#	cd .. && tar cvfz  ${<F}.tar.gz \
+##	 --exclude="debian" \
+#	 --exclude "CVS" --exclude "CVSROOT" --exclude ".cvsignore" \
+#	 --exclude="tmp.*" --exclude "build-stamp" \
+#	 --exclude="changed*.diff"	 \
+#	 ${<F}/*
+#	ls -l ../${<F}.tar.gz
+#	cd .. && ln -fs ${tarball_name}.tar.gz ${package}_${pkg_ver}.orig.tar.gz
+
+debsrc: clean/snapshot update
+	debuild && sudo debi && dpkg -L ${package}
+	debuild -S | grep "_source.changes"
+
+remove:
+	-sudo aptitude -y remove ${package} ${package}-snapshot
+
+install: remove
+	debi || sudo debi
+
+
+debsrc:  update remove
+	dch -i # -a "WIP:"
+	-fakeroot ./debian/rules clean
+	-make clean 
+	debuild -sa -S
+	debrelease -S --dput ppa
+
+
+deb: update remove
+	dch -i # -a "WIP:"
+	-fakeroot ./debian/rules clean
+	-make clean 
+	debuild -sa -S
+	debuild -sa 
+	sudo debi
+	make clean
+	debuild -sa -S
+	debrelease -S --dput ppa
+#	dput ppa  ../${DEBPACKAGE}*${DEBPACKAGE_VERSION}*source.changes
+
+merge:
+	-diff Makefile ../tuxguitar-snapshot-*/Makefile 
+	-cp Makefile ../tuxguitar-snapshot-*/Makefile
+	-diff debian/tuxguitar.sh ../tuxguitar-snapshot-*/TuxGuitar/scripts/tuxguitar.sh 
+	-cp debian/tuxguitar.sh ../tuxguitar-snapshot-*/TuxGuitar/scripts/tuxguitar.sh 
+	-cp /rzr.online.fr/docs/contribs/files/tuxguitar.tg ../tuxguitar-snapshot-*/TuxGuitar/scripts/
+#	-rm ../tuxguitar-snapshot-*/TuxGuitar/scripts/tuxguitar.tg
+	-cp tuxguitar.desktop  ../tuxguitar-snapshot-*/TuxGuitar/scripts/
+	-cp tuxguitar.sgml  ../tuxguitar-snapshot-*/TuxGuitar/scripts/
+
+
+apt:
+	sudo aptitude install build-essential docbook-utils gcj libasound2-dev
+
+update:
+#	rm -f TuxGuitar/dist/config* TuxGuitar/build.*
+#	-ssh-add
+	-svn $@ .
+	-svn diff > tmp.diff
+	diffstat  tmp.diff
+
+snapshot-clean:
+	-rm -rf TuxGuitar/build* AUTHORS COPYING ChangeLog LICENSE README
+
+commit: snapshot-clean clean distclean update help
+	${HOME}/bin/vc.sh changed
+	less tmp.diff
+	svn commit
+
+#~rzr:} various debian hack to be removed
+
+#all: clean fix jar jni
+help:
+	@echo "${scmroot}"
+	@echo "TODO: MOZILLA_FIVE_HOME, libc ver, plugins, jsa"
+	echo "FIX: (LP: #176979) ; oef dist"
+	@echo "TODO: timidity or fluidsynth installed ?"
+	echo "/rzr.online.fr/docs/contribs/files/${PACKAGE}.mk"
+	echo "org.herac.tuxguitar.gui.help.doc.DocException: org.eclipse.swt.SWTError: No more handles [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]"
+	echo "<man-di> just In case someone wants to know: I starting commiting my eclipse 3.3 work"
+	@echo "# $@"
+
+
+r:
+	sh /mnt/hda5/home/rzr/home/src/debian/tuxguitar/tuxguitar-0.9.99~1.0rc1/debian/tuxguitar.sh /rzr.online.fr/docs/contribs/files/tuxguitar.tg
+
+deb-fix: TuxGuitar
+	cp -a $</xml/build* $</
+	cp -a $</doc/LICENSE COPYING
+	cp -a $</doc/CHANGES ChangeLog
+	cp -a $</doc/README ./
+	cp -a $</doc/AUTHORS ./
+	find . -iname "*.desktop"
+	find . -iname "*.xpm"
+	find . -iname "*.sgml"
+
+#{ TODO:
+clean-snapshot:
+	rm -rf TuxGuitar/build* AUTHORS COPYING ChangeLog LICENSE README
+#}
+snapshot-run: ./TuxGuitar
+
+
+snapshot-install:
+	-cd debian &&  for t in  tuxguitar*.* ; do ln -fs $$t $${t/tuxguitar/tuxguitar-snapshot} ; done ;
+	cd debian && ln -fs tuxguitar-alsa.install tuxguitar-snapshot-alsa.install
+	cd debian && ln -fs tuxguitar-jsa.install tuxguitar-snapshot-jsa.install
+	cd debian && ln -fs tuxguitar-oss.install tuxguitar-snapshot-oss.install
+	cd debian && ln -fs tuxguitar.install tuxguitar-snapshot.install
+
+	cd debian && ln -fs tuxguitar-snapshot-alsa tuxguitar-alsa
+	cd debian && ln -fs tuxguitar-snapshot-oss tuxguitar-oss
+	cd debian && ln -fs tuxguitar-snapshot tuxguitar
+
+
+snapshot-deb: snapshot snapshot-clean update deb
+	-rm -f [a-z]*
+
+get-snapshot-source: ../${snapshot_dir}
+
+build-gcj:
+	${MAKE} build ANT_FLAGS="build.compiler=gcj" 
+
+#eof "$Id:"
+#! /usr/bin/make -f
+# -*- makefile -*-
+#ident "$Id: Makefile,v 1.19 2008/04/17 20:06:22 rzr Exp $"
+#@author: created by www.philippe.coval.online.fr -- revision: $Author: rzr $
+#licence: LGPL
+#------------------------------------------------------------------------------
+
+default: debsrc
+
+package?=tuxguitar
+package?=${PACKAGE}
+
+
+snapshot-default: snapshot-deb
+
+
+#~rzr:{ various debian hack to be removed
+
+version=$(shell date +%Y%m%d)
+#debversion?=$(shell dpkg-parsechangelog | sed -n 's/Version: \(.*\)/\1/p')
+scmroot?=https://${package}.svn.sourceforge.net/svnroot/${package}/trunk
+#distfile?=${package}_${debversion}~snapshot$(shell date +%Y%m%d).orig.tar.gz
+
+pkg_ver?=${version_next}~snapshot${version}
+pkg_dir?=${package}-${pkg_ver}
+
+#{
+snapshot_version?=0.0.${version}
+snapshot_dir?=${package}-snapshot-${snapshot_version}
+
+
+snapshot: ../${snapshot_dir} 
+
+../${snapshot_dir}:
+	svn co ${scmroot} $@
+	cd .. && tar czf ${snapshot_dir}.tar.gz --exclude="debian" ${snapshot_dir}
+	cd ../${snapshot_dir} && find . > 00index.txt
+	cd .. && ln -fs ${snapshot_dir}.tar.gz ${package}-snapshot_${snapshot_version}.orig.tar.gz 
+	cd .. && ln -fs ${snapshot_dir} ${package}-snapshot
+	echo "# cd ../${snapshot_dir}"
+
+
+fix-release: overide
+	-cp TuxGuitar/scripts/tuxguitar.tg  ./
+	-cp TuxGuitar/scripts/tuxguitar.xpm  ./
+	-cp TuxGuitar/scripts/tuxguitar.gp3  ./
+
+clean/snapshot:
+	rm -f *.tg *.gp3
+#}
+
+refresh:
+	 ls | grep TuxGuitar- | xargs echo modules?= > tmp.mk
+
+DEBPACKAGE_VERSION?=$(shell dpkg-parsechangelog  | sed -n 's/Version: \(.*\)/\1/p')
+DEBPACKAGE?=$(shell dpkg-parsechangelog | sed -n 's/Source: \(.*\)/\1/p')
+
+
+sync:
+	${MAKE} deb # || make snapshot && cd ../${snapshot_dir} && ${MAKE} deb
+	diffstat  tmp.diff
+
+
+chk:
+	ls ../${package}*${snapshot_version}*.changes || ls ../${package}*.changes
+	lintian -i ../tuxguitar-snapshot*.changes
+
+
+
+tarball_name=TuxGuitar-full-1.0-rc1-src
+
+#	cd .. && ln -fs ${CURDIR} ${tarball_name} 
+
+#to-upstream:
+#	cp ./debian/${package}.sh TuxGuitar/scripts/
+#	cp ./debian/${package}.sgml TuxGuitar/scripts/
+#	cp ./debian/${package}.desktop TuxGuitar/scripts/
+
+
+release: tarball
+	mkdir -p ../tmp/${tarball_name} && cd ../tmp/${tarball_name} \
+	 && tar xf ${CURDIR}/../${tarball_name}.tar.gz \
+	 && cd ${tarball_name} && make build
+	echo "../${tarball_name}.tar.gz"
+
+cvsrelease:
+	${MAKE} fetch
+	${MAKE} -C ../${tarball_name} clean tarball
+	ls -l ../${tarball_name}.tar.gz
+
+fetch:
+	mkdir -p ../${tarball_name}
+	cd  ../${tarball_name} && \
+	 cvs -d${scmroot} login  && \
+	 cvs -d${scmroot} co .
+	echo "cd ../${tarball_name}"
+
+#test-help: ${CURDIR}
+#	echo "$<"
+#	echo "${<F}"
+#	echo "${<N}"
+#	echo "${<D}"
+
+sf:
+	lynx -dump "http://sourceforge.net/project/showfiles.php?group_id=155855&package_id=173684&release_id=580322" | grep filename | sed -e 's|.* http:.*filename=\(.*\)|http://heanet.dl.sourceforge.net/sourceforge/tuxguitar/\1|g' | xargs -n 1 wget -nc
+	unp *-src.tar.gz
+	rm *.tar.gz *.bin *.exe *.zip 
+	for t in *-1.0-rc1-src ; do  echo mv $t ${t/-1.0-rc1-src/}; done
+
+install_plugins: ${modules_plugins}
+	install $</$<.jar ${INSTALL_SHARE_DIR}
+
+#snapshot-test: ${CURDIR}
+#	echo ${<:%-1.0.0=%}
+#	echo ${<:%-1.0.0=%-snapshot}
+#	echo ${<:%-%=%-snapshot}
+#	echo ${<:%-1.0.0=%-snapshot}
+
+install-libs: ${modules_jni}
+	echo ${^:TuxGuitar-%=tuxguitar-%} 
+	for t in ${^} ; do  \
+	 echo install -s  $$t/$${t/TuxGuitar/tuxguitar} \
+	 ; done
+#	 echo install -s $$t/lib$(shell echo $${t} | tr [A-Z] [a-z])-jni.so  ${INSTALL_LIB_DIR}/ ; 
+# TODO:
+#	for t in ${modules_plugins} ; do cd "${CURDIR}/$$t" && \
+#	 ant -v -d ${ANT_FLAGS} install ; \
+#	done
+
+tuxguitar-install:
+	-cp -rfa ./TuxGuitar/share/files ${INSTALL_SHARE_DIR} # TODO
+	-cp -rfa ./TuxGuitar/share/services ${INSTALL_SHARE_DIR} # TODO
+	-cp -rfa ./TuxGuitar/share/themes ${INSTALL_SHARE_DIR} # TODO
+
+CURDIR?=$(shell pwd)
+
+#tarball:$(shell pwd)
+#	find . -type l -exec file {} \; | sed -e "s|\(.*\): symbolic link to \`\(.*\)'|rm \1; cp -fa \2 \1|g"
+#	find . -iname "*.jar"
+#	rm ./README; cp -fa TuxGuitar/doc/README ./README
+#	rm ./ChangeLog; cp -fa TuxGuitar/doc/CHANGES ./ChangeLog
+#	rm ./COPYING; cp -fa TuxGuitar/doc/LICENSE ./COPYING
+#	rm ./AUTHORS; cp -fa TuxGuitar/doc/AUTHORS ./AUTHORS
+#	cd .. && tar cvfz  ${<F}.tar.gz \
+##	 --exclude="debian" \
+#	 --exclude "CVS" --exclude "CVSROOT" --exclude ".cvsignore" \
+#	 --exclude="tmp.*" --exclude "build-stamp" \
+#	 --exclude="changed*.diff"	 \
+#	 ${<F}/*
+#	ls -l ../${<F}.tar.gz
+#	cd .. && ln -fs ${tarball_name}.tar.gz ${package}_${pkg_ver}.orig.tar.gz
+
+debsrc: clean/snapshot update
+	debuild && sudo debi && dpkg -L ${package}
+	debuild -S | grep "_source.changes"
+
+remove:
+	-sudo aptitude -y remove ${package} ${package}-snapshot
+
+install: remove
+	debi || sudo debi
+
+
+debsrc:  update remove
+	dch -i # -a "WIP:"
+	-fakeroot ./debian/rules clean
+	-make clean 
+	debuild -sa -S
+	debrelease -S --dput ppa
+
+
+deb: update remove
+	dch -i # -a "WIP:"
+	-fakeroot ./debian/rules clean
+	-make clean 
+	debuild -sa -S
+	debuild -sa 
+	sudo debi
+	make clean
+	debuild -sa -S
+	debrelease -S --dput ppa
+#	dput ppa  ../${DEBPACKAGE}*${DEBPACKAGE_VERSION}*source.changes
+
+merge:
+	-diff Makefile ../tuxguitar-snapshot-*/Makefile 
+	-cp Makefile ../tuxguitar-snapshot-*/Makefile
+	-diff debian/tuxguitar.sh ../tuxguitar-snapshot-*/TuxGuitar/scripts/tuxguitar.sh 
+	-cp debian/tuxguitar.sh ../tuxguitar-snapshot-*/TuxGuitar/scripts/tuxguitar.sh 
+	-cp /rzr.online.fr/docs/contribs/files/tuxguitar.tg ../tuxguitar-snapshot-*/TuxGuitar/scripts/
+#	-rm ../tuxguitar-snapshot-*/TuxGuitar/scripts/tuxguitar.tg
+	-cp tuxguitar.desktop  ../tuxguitar-snapshot-*/TuxGuitar/scripts/
+	-cp tuxguitar.sgml  ../tuxguitar-snapshot-*/TuxGuitar/scripts/
+
+
+apt:
+	sudo aptitude install build-essential docbook-utils gcj libasound2-dev
+
+update:
+#	rm -f TuxGuitar/dist/config* TuxGuitar/build.*
+#	-ssh-add
+	-svn $@ .
+	-svn diff > tmp.diff
+	diffstat  tmp.diff
+
+snapshot-clean:
+	-rm -rf TuxGuitar/build* AUTHORS COPYING ChangeLog LICENSE README
+
+commit: snapshot-clean clean distclean update help
+	${HOME}/bin/vc.sh changed
+	less tmp.diff
+	svn commit
+
+#~rzr:} various debian hack to be removed
+
+#all: clean fix jar jni
+help:
+	@echo "${scmroot}"
+	@echo "TODO: MOZILLA_FIVE_HOME, libc ver, plugins, jsa"
+	echo "FIX: (LP: #176979) ; oef dist"
+	@echo "TODO: timidity or fluidsynth installed ?"
+	echo "/rzr.online.fr/docs/contribs/files/${PACKAGE}.mk"
+	echo "org.herac.tuxguitar.gui.help.doc.DocException: org.eclipse.swt.SWTError: No more handles [Unknown Mozilla path (MOZILLA_FIVE_HOME not set)]"
+	echo "<man-di> just In case someone wants to know: I starting commiting my eclipse 3.3 work"
+	@echo "# $@"
+
+
+r:
+	sh /mnt/hda5/home/rzr/home/src/debian/tuxguitar/tuxguitar-0.9.99~1.0rc1/debian/tuxguitar.sh /rzr.online.fr/docs/contribs/files/tuxguitar.tg
+
+deb-fix: TuxGuitar
+	cp -a $</xml/build* $</
+	cp -a $</doc/LICENSE COPYING
+	cp -a $</doc/CHANGES ChangeLog
+	cp -a $</doc/README ./
+	cp -a $</doc/AUTHORS ./
+	find . -iname "*.desktop"
+	find . -iname "*.xpm"
+	find . -iname "*.sgml"
+
+#{ TODO:
+clean-snapshot:
+	rm -rf TuxGuitar/build* AUTHORS COPYING ChangeLog LICENSE README
+#}
+snapshot-run: ./TuxGuitar
+
+
+snapshot-install:
+	-cd debian &&  for t in  tuxguitar*.* ; do ln -fs $$t $${t/tuxguitar/tuxguitar-snapshot} ; done ;
+	cd debian && ln -fs tuxguitar-alsa.install tuxguitar-snapshot-alsa.install
+	cd debian && ln -fs tuxguitar-jsa.install tuxguitar-snapshot-jsa.install
+	cd debian && ln -fs tuxguitar-oss.install tuxguitar-snapshot-oss.install
+	cd debian && ln -fs tuxguitar.install tuxguitar-snapshot.install
+
+	cd debian && ln -fs tuxguitar-snapshot-alsa tuxguitar-alsa
+	cd debian && ln -fs tuxguitar-snapshot-oss tuxguitar-oss
+	cd debian && ln -fs tuxguitar-snapshot tuxguitar
+
+
+snapshot-deb: snapshot snapshot-clean update deb
+	-rm -f [a-z]*
+
+get-snapshot-source: ../${snapshot_dir}
+
+build-gcj:
+	${MAKE} build ANT_FLAGS="build.compiler=gcj" 
+
+#eof "$Id:"
diff --git a/debian/source/format b/debian/source/format
new file mode 100644
index 0000000..163aaf8
--- /dev/null
+++ b/debian/source/format
@@ -0,0 +1 @@
+3.0 (quilt)
diff --git a/debian/stamp-patched b/debian/stamp-patched
new file mode 100644
index 0000000..e69de29
diff --git a/debian/tuxguitar-alsa.install b/debian/tuxguitar-alsa.install
new file mode 100644
index 0000000..8212baf
--- /dev/null
+++ b/debian/tuxguitar-alsa.install
@@ -0,0 +1,2 @@
+./TuxGuitar-alsa/tuxguitar-alsa.jar usr/share/tuxguitar/plugins/
+./debian/tmp/tuxguitar/usr/lib/jni/libtuxguitar-alsa-jni.so usr/lib/jni/
diff --git a/debian/tuxguitar-fluidsynth.install b/debian/tuxguitar-fluidsynth.install
new file mode 100644
index 0000000..24c6eeb
--- /dev/null
+++ b/debian/tuxguitar-fluidsynth.install
@@ -0,0 +1,3 @@
+./TuxGuitar-fluidsynth/tuxguitar-fluidsynth.jar usr/share/tuxguitar/plugins/
+./debian/tmp/tuxguitar/usr/lib/jni/libtuxguitar-fluidsynth-jni.so usr/lib/jni/
+
diff --git a/debian/tuxguitar-jack.install b/debian/tuxguitar-jack.install
new file mode 100644
index 0000000..d3ff822
--- /dev/null
+++ b/debian/tuxguitar-jack.install
@@ -0,0 +1,3 @@
+./TuxGuitar-jack/tuxguitar-jack.jar usr/share/tuxguitar/plugins/
+./debian/tmp/tuxguitar/usr/lib/jni/libtuxguitar-jack-jni.so usr/lib/jni/
+
diff --git a/debian/tuxguitar-jsa.install b/debian/tuxguitar-jsa.install
new file mode 100644
index 0000000..5a9a7cf
--- /dev/null
+++ b/debian/tuxguitar-jsa.install
@@ -0,0 +1 @@
+./TuxGuitar-jsa/tuxguitar-jsa.jar usr/share/tuxguitar/plugins/
diff --git a/debian/tuxguitar-oss.install b/debian/tuxguitar-oss.install
new file mode 100644
index 0000000..3da7426
--- /dev/null
+++ b/debian/tuxguitar-oss.install
@@ -0,0 +1,3 @@
+./TuxGuitar-oss/tuxguitar-oss.jar usr/share/tuxguitar/plugins/
+./debian/tmp/tuxguitar/usr/lib/jni/libtuxguitar-oss-jni.so usr/lib/jni/
+
diff --git a/debian/tuxguitar.docs b/debian/tuxguitar.docs
new file mode 100644
index 0000000..6f12db5
--- /dev/null
+++ b/debian/tuxguitar.docs
@@ -0,0 +1,2 @@
+AUTHORS
+README
diff --git a/debian/tuxguitar.install b/debian/tuxguitar.install
new file mode 100644
index 0000000..b033145
--- /dev/null
+++ b/debian/tuxguitar.install
@@ -0,0 +1,19 @@
+./TuxGuitar/share/plugins/tuxguitar.jar  usr/share/tuxguitar/
+
+./TuxGuitar/share/plugins/tuxguitar-ascii.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-compat.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-converter.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-gtp.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-lilypond.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-midi.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-musicxml.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-pdf.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-ptb.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-tef.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-tray.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-tuner.jar  usr/share/tuxguitar/plugins/
+./TuxGuitar/share/plugins/tuxguitar-community.jar  usr/share/tuxguitar/plugins/
+
+./misc/tuxguitar.xpm usr/share/pixmaps/
+./misc/tuxguitar.desktop usr/share/applications/
+./misc/tuxguitar.xml usr/share/mime/packages/
diff --git a/debian/tuxguitar.manpages b/debian/tuxguitar.manpages
new file mode 100644
index 0000000..0c4379c
--- /dev/null
+++ b/debian/tuxguitar.manpages
@@ -0,0 +1 @@
+debian/tuxguitar.1
diff --git a/debian/tuxguitar.menu b/debian/tuxguitar.menu
new file mode 100644
index 0000000..7bcd6c2
--- /dev/null
+++ b/debian/tuxguitar.menu
@@ -0,0 +1,2 @@
+?package(tuxguitar):needs="X11" section="Applications/Sound"\
+  title="tuxguitar" command="/usr/bin/tuxguitar"
diff --git a/debian/tuxguitar.postinst b/debian/tuxguitar.postinst
new file mode 100755
index 0000000..c28b149
--- /dev/null
+++ b/debian/tuxguitar.postinst
@@ -0,0 +1,16 @@
+#!/bin/sh
+set -e
+
+if [ "$1" = "configure" ]; then
+    if [ -x "`which update-menus 2>/dev/null`" ]; then
+	update-menus
+    fi
+    if [ -x "`which update-mime-database 2>/dev/null`" ]; then
+	update-mime-database /usr/share/mime
+    fi
+    if [ -x "`which update-desktop-database 2>/dev/null`" ]; then
+	update-desktop-database -q
+    fi
+fi
+
+#DEBHELPER#
diff --git a/debian/tuxguitar.postrm b/debian/tuxguitar.postrm
new file mode 100755
index 0000000..f3caef9
--- /dev/null
+++ b/debian/tuxguitar.postrm
@@ -0,0 +1,15 @@
+#!/bin/sh
+set -e
+
+if [ -x "`which update-menus 2>/dev/null`" ]; then update-menus ; fi
+
+if [ "$1" = "remove" ]; then
+	if [ -x "`which update-mime-database 2>/dev/null`" ]; then
+		update-mime-database /usr/share/mime
+	fi
+	if [ -x "`which update-desktop-database 2>/dev/null`" ]; then
+		update-desktop-database -q
+	fi
+fi
+
+#DEBHELPER#
diff --git a/debian/watch b/debian/watch
new file mode 100644
index 0000000..c5aa53c
--- /dev/null
+++ b/debian/watch
@@ -0,0 +1,2 @@
+version=3
+http://sf.net/tuxguitar/tuxguitar-src-(.*)\.tar\.gz
diff --git a/misc/env.sh b/misc/env.sh
new file mode 100644
index 0000000..4892d9f
--- /dev/null
+++ b/misc/env.sh
@@ -0,0 +1,44 @@
+#! /bin/sh
+#@ident "$Id:  $"
+#@Author: www.philippe.coval.online.fr -- revision: $Author: rzr $
+#@Licence: LGPL
+#@Description: Env script for starting java application tuxguitar
+###############################################################################
+PACKAGE="tuxguitar"
+
+# overide if needed
+
+
+#{ java : JAVA_HOME JAVA
+
+t="/usr/lib/jvm/java-6-openjdk/jre/bin/../../"
+
+[ -d "${t}" ] && JAVA_HOME="$t" && export JAVA_HOME
+t=${JAVA:=${JAVA_HOME}/jre/bin/java}
+[ -x "${t}" ] && JAVA="$t" && export JAVA
+
+#} java
+
+
+#{ swt : SWT_DIR
+
+t=/usr/lib/java/swt.jar
+
+[ -r "${t}" ] && SWT_DIR="$t" && export SWT_DIR
+
+#} swt : not used, for running not building
+
+
+#{ mozilla : MOZILLA_FIVE_HOME
+
+t="/usr/lib/xulrunner-1.9.1"
+
+if [ -d "$t" ] ; then
+	MOZILLA_FIVE_HOME="$t"
+	export MOZILLA_FIVE_HOME
+ 	export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$MOZILLA_FIVE_HOME"
+fi
+
+#} mozilla
+
+#eof "$Id:$"
diff --git a/misc/swt-3.3-gtk-linux-x86.patch b/misc/swt-3.3-gtk-linux-x86.patch
new file mode 100644
index 0000000..3e0ec05
--- /dev/null
+++ b/misc/swt-3.3-gtk-linux-x86.patch
@@ -0,0 +1,84 @@
+diff -Naur src-orig/org/eclipse/swt/internal/gtk/OS.java src-updated/org/eclipse/swt/internal/gtk/OS.java
+--- src-orig/org/eclipse/swt/internal/gtk/OS.java	2007-05-31 18:04:38.000000000 -0300
++++ src-updated/org/eclipse/swt/internal/gtk/OS.java	2007-10-12 15:13:09.000000000 -0300
+@@ -6145,6 +6145,15 @@
+ 		lock.unlock();
+ 	}
+ }
++public static final native int _gtk_paper_size_free(int paper_size);
++public static final int gtk_paper_size_free(int paper_size) {
++	lock.lock();
++	try {
++		return _gtk_paper_size_free(paper_size);
++	} finally {
++		lock.unlock();
++	}
++}
+ public static final native int /*long*/ _gtk_paper_size_get_name(int /*long*/ size);
+ public static final int /*long*/ gtk_paper_size_get_name(int /*long*/ size) {
+ 	lock.lock();
+diff -Naur src-orig/org/eclipse/swt/printing/Printer.java src-updated/org/eclipse/swt/printing/Printer.java
+--- src-orig/org/eclipse/swt/printing/Printer.java	2007-05-31 18:04:28.000000000 -0300
++++ src-updated/org/eclipse/swt/printing/Printer.java	2007-10-12 15:14:23.000000000 -0300
+@@ -691,7 +691,7 @@
+ 			paper_size = OS.gtk_paper_size_new(name);
+ 		}
+ 		OS.gtk_page_setup_set_paper_size(pageSetup, paper_size);
+-		OS.g_free(paper_size);
++		OS.gtk_paper_size_free(paper_size);
+ 	}
+ 	
+ 	/* Set values of settings from PrinterData. */
+diff -Naur src-orig/os.c src-updated/os.c
+--- src-orig/os.c	2007-04-26 14:03:00.000000000 -0300
++++ src-updated/os.c	2007-10-12 14:57:59.000000000 -0300
+@@ -10321,6 +10321,16 @@
+ }
+ #endif
+ 
++#ifndef NO__1gtk_1paper_1size_1free
++JNIEXPORT void JNICALL OS_NATIVE(_1gtk_1paper_1size_1free)
++	(JNIEnv *env, jclass that, jint arg0)
++{
++	OS_NATIVE_ENTER(env, that, _1gtk_1paper_1size_1free_FUNC);
++	gtk_paper_size_free( (GtkPaperSize *)arg0 );
++	OS_NATIVE_EXIT(env, that, _1gtk_1paper_1size_1free_FUNC);
++}
++#endif
++
+ #ifndef NO__1gtk_1plug_1get_1id
+ JNIEXPORT jint JNICALL OS_NATIVE(_1gtk_1plug_1get_1id)
+ 	(JNIEnv *env, jclass that, jint arg0)
+diff -Naur src-orig/os_custom.h src-updated/os_custom.h
+--- src-orig/os_custom.h	2007-05-31 18:04:22.000000000 -0300
++++ src-updated/os_custom.h	2007-10-12 14:27:50.000000000 -0300
+@@ -133,6 +133,7 @@
+ #define gtk_paper_size_new_LIB "libgtk-x11-2.0.so.0"
+ #define gtk_paper_size_new_custom_LIB "libgtk-x11-2.0.so.0"
+ #define gtk_paper_size_new_from_ppd_LIB "libgtk-x11-2.0.so.0"
++#define gtk_paper_size_free_LIB "libgtk-x11-2.0.so.0"
+ #define gtk_print_job_get_printer_LIB "libgtk-x11-2.0.so.0"
+ #define gtk_print_job_get_settings_LIB "libgtk-x11-2.0.so.0"
+ #define gtk_print_job_get_status_LIB "libgtk-x11-2.0.so.0"
+diff -Naur src-orig/os_stats.c src-updated/os_stats.c
+--- src-orig/os_stats.c	2007-04-26 14:03:00.000000000 -0300
++++ src-updated/os_stats.c	2007-10-12 14:22:08.000000000 -0300
+@@ -725,6 +725,7 @@
+ 	"_1gtk_1paper_1size_1new",
+ 	"_1gtk_1paper_1size_1new_1custom",
+ 	"_1gtk_1paper_1size_1new_1from_1ppd",
++	"_1gtk_1paper_1size_1free",
+ 	"_1gtk_1plug_1get_1id",
+ 	"_1gtk_1plug_1new",
+ 	"_1gtk_1print_1job_1get_1printer",
+diff -Naur src-orig/os_stats.h src-updated/os_stats.h
+--- src-orig/os_stats.h	2007-04-26 14:03:00.000000000 -0300
++++ src-updated/os_stats.h	2007-10-12 14:20:47.000000000 -0300
+@@ -733,6 +733,7 @@
+ 	_1gtk_1paper_1size_1new_FUNC,
+ 	_1gtk_1paper_1size_1new_1custom_FUNC,
+ 	_1gtk_1paper_1size_1new_1from_1ppd_FUNC,
++	_1gtk_1paper_1size_1free_FUNC,
+ 	_1gtk_1plug_1get_1id_FUNC,
+ 	_1gtk_1plug_1new_FUNC,
+ 	_1gtk_1print_1job_1get_1printer_FUNC,
diff --git a/misc/tuxguitar.sh b/misc/tuxguitar.sh
index b796d4a..74af373 100644
--- a/misc/tuxguitar.sh
+++ b/misc/tuxguitar.sh
@@ -4,7 +4,7 @@
 #@Licence: LGPL
 #@Description: Wrapper script for starting java application tuxguitar
 ###############################################################################
-PACKAGE=tuxguitar
+PACKAGE="tuxguitar"
 [ ! -z $DEBUG ] && set -e
 [ ! -z $DEBUG ] && set -x
 
@@ -41,16 +41,16 @@ java_guess_()
     t="/opt/sun-jdk-1.6.0.04/"
     [ -d "$t" ] && d="$t"
 # debian
-if [ -r /etc/debian_version  ]; then
-    t="/usr/lib/jvm/java-gcj/jre/bin/../../"
-    [ -d "$t" ] && d="$t"
-    t="/usr/lib/jvm/java-1.5.0-sun/jre/bin/../../"
-    [ -d "$t" ] && d="$t"
-    t="/usr/lib/jvm/java-6-sun/jre/bin/../../"
-    [ -d "$t" ] && d="$t"
-    t="/usr/lib/jvm/java-6-openjdk/jre/bin/../../"
-    [ -d "$t" ] && d="$t"
-fi
+    if [ -r /etc/debian_version  ]; then
+        t="/usr/lib/jvm/java-gcj/jre/bin/../../"
+        [ -d "$t" ] && d="$t"
+        t="/usr/lib/jvm/java-1.5.0-sun/jre/bin/../../"
+        [ -d "$t" ] && d="$t"
+        t="/usr/lib/jvm/java-6-sun/jre/bin/../../"
+        [ -d "$t" ] && d="$t"
+        t="/usr/lib/jvm/java-6-openjdk/jre/bin/../../"
+        [ -d "$t" ] && d="$t"
+    fi
 # results
     [ -d "$d" ] && echo "$d"
 }
@@ -65,6 +65,8 @@ swt_guess_()
     [ -r "$t" ] && f="$t"
     t="/usr/lib/java/swt.jar"
     [ -r "$t" ] && f="$t"
+    t="/usr/lib/java/swt-gtk-3.5.1.jar"
+    [ -r "$t" ] && f="$t"
     t="/usr/share/java/swt-gtk-3.4.jar"
     [ -r "$t" ] && f="$t"
     t="/usr/lib/java/swt3.2-gtk.jar"
@@ -91,41 +93,57 @@ mozilla_guess_()
     test -r "$t/libxpcom.so" && d="$t"
     t="/usr/lib/xulrunner-1.9"
     test -r "$t/libxpcom.so" && d="$t"
+    t="/usr/lib/xulrunner-`xulrunner-1.9.1 --gre-version`"
+    test -r "$t/libxpcom.so" && d="$t"
+    t="/usr/lib/xulrunner-1.9.1"
+    test -r "$t/libxpcom.so" && d="$t"
+    t="/usr/lib/xulrunner-1.9.2"
+    test -r "$t/libxpcom.so" && d="$t"
     echo "$d"
 }
 
+
 #
 env_()
 {
+    t="/etc/default/${PACKAGE}/env.sh"
+    [ -r "$t" ] && . "$t"
+
+    t="/etc/${PACKAGE}/env.sh"
+    [ -r "$t" ] && . "$t"
+
 # java
-    [ -z ${JAVA_HOME} ] && t=$(java_guess_) && [ -d "$t" ] && JAVA_HOME=$t
+    [ -z ${JAVA_HOME} ] && t=$(java_guess_) && [ -d "$t" ] && JAVA_HOME="$t"
     if [ -d "${JAVA_HOME}" ] ; then
         export JAVA_HOME
-        JAVA=${JAVA:=${JAVA_HOME}/jre/bin/java}
+        JAVA="${JAVA:=${JAVA_HOME}/jre/bin/java}"
         [ -x ${JAVA} ] && export JAVA
     else
         JAVA=${JAVA:=java}
         export JAVA
     fi
-    
+
 # mozilla
-    [ -z ${MOZILLA_FIVE_HOME} ] && t=$(mozilla_guess_) && [ -d "$t" ] && MOZILLA_FIVE_HOME=$t
+    [ -z ${MOZILLA_FIVE_HOME} ] \
+	&& t=$(mozilla_guess_) && [ -d "$t" ] && MOZILLA_FIVE_HOME="$t"
     if [ -d "$MOZILLA_FIVE_HOME" ] ; then
         export MOZILLA_FIVE_HOME
-        export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MOZILLA_FIVE_HOME
+        export LD_LIBRARY_PATH="$MOZILLA_FIVE_HOME"
     else
-	echo '$MOZILLA_FIVE_HOME not valid : check doc shipped w/ tuxguitar'
+        echo '$MOZILLA_FIVE_HOME not valid : check doc shipped w/ tuxguitar'
     fi
 
     [ ! -z ${DEBUG} ] && echo "# MOZILLA_FIVE_HOME=${MOZILLA_FIVE_HOME}"
     [ ! -z ${DEBUG} ] && echo "# JAVA_HOME=${JAVA_HOME}"}
 }
 
+
 tuxguitar_()
 {
     local PACKAGE=${PACKAGE:=tuxguitar}
     local PACKAGE_HOME=${PACKAGE_HOME:=/usr/share/${PACKAGE}/}
-    local PACKAGE_MAIN=${PACKAGE_MAIN:=org.herac.tuxguitar.gui.TGMain}
+#   local PACKAGE_MAIN=${PACKAGE_MAIN:=org.herac.tuxguitar.gui.TGMain}
+    local PACKAGE_MAIN=${PACKAGE_MAIN:=org.herac.tuxguitar.app.TGMain}
     local PACKAGE_LIB=${PACKAGE_LIB:=/usr/lib/jni}
 # java env
     JAVA=${JAVA:=java}
@@ -140,14 +158,15 @@ tuxguitar_()
     [ -r "$t" ] && CLASSPATH=${CLASSPATH}:$t
 
     JAVA_FLAGS=${JAVA_FLAGS:="-Xms128m -Xmx128m"}
-    JAVA_FLAGS="\
-${JAVA_FLAGS} \
- -Djava.library.path=${PACKAGE_LIB} \
- -D${PACKAGE}.share.path=/usr/share/${PACKAGE} \
- -cp ${CLASSPATH}:${PACKAGE_CLASSPATH}"
+    JAVA_FLAGS=" ${JAVA_FLAGS} \
+        -Djava.library.path=${PACKAGE_LIB} \
+        -D${PACKAGE}.share.path=/usr/share/${PACKAGE} \
+        -cp ${CLASSPATH}:${PACKAGE_CLASSPATH} \
+        "
     local arg=""
     [ -z "$1" ] && arg="/usr/share/tuxguitar/tuxguitar.tg"
 # run java
+    [ ! -z ${DEBUG} ] && echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}"
     [ ! -z ${DEBUG} ] && ${JAVA} -version
     [ ! -z ${DEBUG} ] && ${JAVA} ${JAVA_FLAGS} ${PACKAGE_MAIN} --version
 
@@ -155,6 +174,7 @@ ${JAVA_FLAGS} \
 }
 
 # main
+
 env_
 tuxguitar_ "$@"
 
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..8ad50c9
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,360 @@
+<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/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<groupId>org.herac.tuxguitar</groupId>
+	<artifactId>tuxguitar-pom</artifactId>
+	<packaging>pom</packaging>
+	<version>1.3-SNAPSHOT</version>
+	<name>${project.artifactId}</name>
+
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-lib</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-gm-utils</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-abc</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-alsa</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-ascii</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-AudioUnit</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-browser-ftp</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-community</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-compat</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-converter</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-CoreAudio</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-fluidsynth</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-gervill</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-gm-settings</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-gpx</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-gtp</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-image</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-jack</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-jack-ui</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-jsa</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-lilypond</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-midi</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-midi-input</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-musicxml</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-oss</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-pdf</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-ptb</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-svg</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-tef</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-tray</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-tuner</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-winmm</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-cocoa-integration</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-carbon-integration</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-audiounit</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			<dependency>
+				<groupId>${project.groupId}</groupId>
+				<artifactId>tuxguitar-coreaudio</artifactId>
+				<version>${project.version}</version>
+				<type>jar</type>
+			</dependency>
+			
+			<!-- SWT Platforms -->
+			<dependency>
+				<groupId>${org.eclipse.swt.groupId}</groupId>
+				<artifactId>org.eclipse.swt.gtk.linux.x86</artifactId>
+				<version>4.3</version>
+			</dependency>
+			<dependency>
+				<groupId>${org.eclipse.swt.groupId}</groupId>
+				<artifactId>org.eclipse.swt.gtk.linux.x86_64</artifactId>
+				<version>4.3</version>
+			</dependency>
+			<dependency>
+				<groupId>${org.eclipse.swt.groupId}</groupId>
+				<artifactId>org.eclipse.swt.gtk.linux.ppc</artifactId>
+				<version>4.3</version>
+			</dependency>
+			<dependency>
+				<groupId>${org.eclipse.swt.groupId}</groupId>
+				<artifactId>org.eclipse.swt.win32.win32.x86</artifactId>
+				<version>4.3</version>
+			</dependency>
+			<dependency>
+				<groupId>${org.eclipse.swt.groupId}</groupId>
+				<artifactId>org.eclipse.swt.cocoa.macosx</artifactId>
+				<version>4.3</version>
+			</dependency>
+			<dependency>
+				<groupId>${org.eclipse.swt.groupId}</groupId>
+				<artifactId>org.eclipse.swt.cocoa.macosx.x86_64</artifactId>
+				<version>4.3</version>
+			</dependency>
+			<dependency>
+				<groupId>${org.eclipse.swt.groupId}</groupId>
+				<artifactId>org.eclipse.swt.carbon.macosx</artifactId>
+				<version>3.7.2</version>
+			</dependency>
+			<!-- /SWT Platforms -->
+
+			<!-- iText -->
+			<dependency>
+				<groupId>com.itextpdf</groupId>
+				<artifactId>itextpdf</artifactId>
+				<version>5.1.3</version>
+			</dependency>
+			<dependency>
+				<groupId>com.itextpdf.tool</groupId>
+				<artifactId>xmlworker</artifactId>
+				<version>1.1.1</version>
+			</dependency>
+			<!-- /iText -->
+		</dependencies>
+	</dependencyManagement>
+
+	<build>
+		<pluginManagement>
+			<plugins>
+				<plugin>
+					<groupId>org.apache.maven.plugins</groupId>
+					<artifactId>maven-compiler-plugin</artifactId>
+					<version>2.3.2</version>
+					<configuration>
+						<source>1.4</source>
+						<target>1.4</target>
+					</configuration>
+				</plugin>
+			</plugins>
+		</pluginManagement>
+	</build>
+
+	<repositories>
+		<repository>
+			<id>swt-repo</id>
+			<url>https://swt-repo.googlecode.com/svn/repo/</url>
+		</repository>
+	</repositories>
+
+	<!-- We need a cross platform SWT version to compile projects -->
+	<properties>
+		<org.eclipse.swt.groupId>org.eclipse.swt</org.eclipse.swt.groupId>
+		<org.eclipse.swt.artifactId>org.eclipse.swt</org.eclipse.swt.artifactId>
+	</properties>
+	
+	<profiles>
+		<profile>
+			<id>platform-windows-all</id>
+			<activation>
+				<os>
+					<family>windows</family>
+				</os>
+			</activation>
+			<properties>
+				<org.eclipse.swt.groupId>org.eclipse.swt</org.eclipse.swt.groupId>
+				<org.eclipse.swt.artifactId>org.eclipse.swt.win32.win32.x86</org.eclipse.swt.artifactId>
+			</properties>
+		</profile>
+		<profile>
+			<id>platform-linux-x86</id>
+			<activation>
+				<os>
+					<family>unix</family>
+					<name>linux</name>
+					<arch>i386</arch>
+				</os>
+			</activation>
+			<properties>
+				<org.eclipse.swt.groupId>org.eclipse.swt</org.eclipse.swt.groupId>
+				<org.eclipse.swt.artifactId>org.eclipse.swt.gtk.linux.x86</org.eclipse.swt.artifactId>
+			</properties>
+		</profile>
+		<profile>
+			<id>platform-linux-x86_64</id>
+			<activation>
+				<os>
+					<family>unix</family>
+					<name>linux</name>
+					<arch>amd64</arch>
+				</os>
+			</activation>
+			<properties>
+				<org.eclipse.swt.groupId>org.eclipse.swt</org.eclipse.swt.groupId>
+				<org.eclipse.swt.artifactId>org.eclipse.swt.gtk.linux.x86_64</org.eclipse.swt.artifactId>
+			</properties>
+		</profile>
+	</profiles>
+</project>

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/tuxguitar.git



More information about the pkg-java-commits mailing list